From 979fb22d7c8b6ecc8f613bcf8dcf1f67d20092f4 Mon Sep 17 00:00:00 2001 From: wehub-resource-sync Date: Mon, 13 Jul 2026 13:01:18 +0800 Subject: [PATCH] chore: import upstream snapshot with attribution --- .claude-plugin/marketplace.json | 14 + .codex-plugin/marketplace.json | 22 + .env.example | 175 + .github/FUNDING.yml | 1 + .github/dependabot.yml | 110 + .github/security-advisories/01-viewer-xss.md | 46 + .github/security-advisories/02-curl-sh-rce.md | 57 + .../03-default-bind-0000.md | 62 + .github/security-advisories/04-mesh-unauth.md | 47 + .../05-obsidian-export-traversal.md | 61 + .../06-privacy-redaction-incomplete.md | 60 + .github/workflows/ci.yml | 70 + .github/workflows/publish.yml | 124 + .gitignore | 31 + AGENTS.md | 124 + CHANGELOG.md | 1119 +++++ CODE_OF_CONDUCT.md | 48 + CONTRIBUTING.md | 115 + DESIGN.md | 288 ++ GOVERNANCE.md | 88 + INSTALL_FOR_AGENTS.md | 164 + LICENSE | 190 + MAINTAINERS.md | 21 + README.md | 1546 ++++++ README.wehub.md | 7 + READMEs/README.de-DE.md | 1376 ++++++ READMEs/README.es-ES.md | 1369 ++++++ READMEs/README.fr-FR.md | 1376 ++++++ READMEs/README.hi-IN.md | 1379 ++++++ READMEs/README.ja-JP.md | 1379 ++++++ READMEs/README.ko-KR.md | 1360 ++++++ READMEs/README.pt-BR.md | 1369 ++++++ READMEs/README.ru-RU.md | 1376 ++++++ READMEs/README.tr-TR.md | 1380 ++++++ READMEs/README.zh-CN.md | 1377 ++++++ READMEs/README.zh-TW.md | 1377 ++++++ ROADMAP.md | 92 + SECURITY.md | 85 + assets/agents/pi.svg | 20 + assets/banner.png | Bin 0 -> 380039 bytes assets/demo.gif | Bin 0 -> 8171930 bytes assets/demo.mp4 | Bin 0 -> 11550410 bytes assets/icon.svg | 35 + assets/iii-console/states.png | Bin 0 -> 80261 bytes assets/iii-console/traces-waterfall.png | Bin 0 -> 480470 bytes assets/iii-console/workers.png | Bin 0 -> 177247 bytes assets/logo.svg | 59 + assets/tags/divider.svg | 20 + assets/tags/light/divider.svg | 17 + assets/tags/light/new-v082.svg | 5 + assets/tags/light/pill-beta.svg | 5 + assets/tags/light/pill-hook.svg | 5 + assets/tags/light/pill-mcp.svg | 5 + assets/tags/light/pill-new.svg | 5 + assets/tags/light/pill-plugin.svg | 5 + assets/tags/light/pill-secure.svg | 5 + assets/tags/light/pill-skill.svg | 5 + assets/tags/light/pill-stable.svg | 5 + assets/tags/light/section-agents.svg | 16 + assets/tags/light/section-api.svg | 16 + assets/tags/light/section-architecture.svg | 16 + assets/tags/light/section-benchmarks.svg | 16 + assets/tags/light/section-competitors.svg | 16 + assets/tags/light/section-config.svg | 16 + assets/tags/light/section-development.svg | 16 + assets/tags/light/section-how.svg | 16 + assets/tags/light/section-license.svg | 16 + assets/tags/light/section-mcp.svg | 16 + assets/tags/light/section-quickstart.svg | 16 + assets/tags/light/section-search.svg | 16 + assets/tags/light/section-viewer.svg | 16 + assets/tags/light/section-why.svg | 16 + assets/tags/light/stat-deps.svg | 5 + assets/tags/light/stat-hooks.svg | 5 + assets/tags/light/stat-recall.svg | 5 + assets/tags/light/stat-tests.svg | 5 + assets/tags/light/stat-tokens.svg | 5 + assets/tags/light/stat-tools.svg | 5 + assets/tags/new-v082.svg | 5 + assets/tags/pill-beta.svg | 5 + assets/tags/pill-hook.svg | 5 + assets/tags/pill-mcp.svg | 5 + assets/tags/pill-new.svg | 5 + assets/tags/pill-plugin.svg | 5 + assets/tags/pill-secure.svg | 5 + assets/tags/pill-skill.svg | 5 + assets/tags/pill-stable.svg | 5 + assets/tags/section-agents.svg | 16 + assets/tags/section-api.svg | 16 + assets/tags/section-architecture.svg | 16 + assets/tags/section-benchmarks.svg | 16 + assets/tags/section-competitors.svg | 16 + assets/tags/section-config.svg | 16 + assets/tags/section-development.svg | 16 + assets/tags/section-how.svg | 16 + assets/tags/section-license.svg | 16 + assets/tags/section-mcp.svg | 16 + assets/tags/section-quickstart.svg | 16 + assets/tags/section-search.svg | 16 + assets/tags/section-viewer.svg | 16 + assets/tags/section-why.svg | 16 + assets/tags/stat-deps.svg | 5 + assets/tags/stat-hooks.svg | 5 + assets/tags/stat-recall.svg | 5 + assets/tags/stat-tests.svg | 5 + assets/tags/stat-tokens.svg | 5 + assets/tags/stat-tools.svg | 5 + benchmark/COMPARISON.md | 165 + benchmark/LONGMEMEVAL.md | 79 + benchmark/QUALITY.md | 75 + benchmark/README.md | 100 + benchmark/REAL-EMBEDDINGS.md | 67 + benchmark/SCALE.md | 110 + benchmark/dataset.ts | 293 ++ benchmark/lib/percentiles.ts | 22 + benchmark/load-100k.ts | 528 +++ benchmark/longmemeval-bench.ts | 317 ++ benchmark/quality-eval.ts | 643 +++ benchmark/real-embeddings-eval.ts | 405 ++ benchmark/results/load-100k-96c0ed0.json | 61 + benchmark/scale-eval.ts | 398 ++ deploy/README.md | 100 + deploy/coolify/Dockerfile | 32 + deploy/coolify/README.md | 132 + deploy/coolify/docker-compose.yml | 30 + deploy/coolify/entrypoint.sh | 98 + deploy/fly/Dockerfile | 35 + deploy/fly/README.md | 166 + deploy/fly/entrypoint.sh | 112 + deploy/fly/fly.toml | 44 + deploy/railway/Dockerfile | 35 + deploy/railway/README.md | 136 + deploy/railway/entrypoint.sh | 98 + deploy/railway/railway.json | 15 + deploy/render/Dockerfile | 35 + deploy/render/README.md | 113 + deploy/render/entrypoint.sh | 98 + deploy/render/render.yaml | 22 + docker-compose.yml | 47 + .../2026-05-20-coding-agent-life-v1.md | 101 + docs/benchmarks/TEMPLATE.md | 54 + docs/recipes/pairings.md | 119 + eval/README.md | 111 + eval/data/coding-agent-life-v1/queries.json | 107 + eval/data/coding-agent-life-v1/sessions.json | 77 + eval/runner/adapters/agentmemory.ts | 93 + eval/runner/adapters/grep.ts | 36 + eval/runner/adapters/vector.ts | 108 + eval/runner/coding-life.ts | 101 + eval/runner/load.ts | 54 + eval/runner/longmemeval.ts | 126 + eval/runner/score.ts | 78 + eval/runner/types.ts | 38 + eval/scripts/sandbox.sh | 117 + examples/python/README.md | 71 + examples/python/observe_and_recall.py | 67 + examples/python/quickstart.py | 46 + iii-config.docker.yaml | 53 + iii-config.yaml | 61 + integrations/filesystem-watcher/README.md | 63 + integrations/filesystem-watcher/bin.mjs | 28 + integrations/filesystem-watcher/package.json | 22 + integrations/filesystem-watcher/watcher.mjs | 317 ++ integrations/hermes/README.md | 130 + integrations/hermes/__init__.py | 388 ++ integrations/hermes/plugin.yaml | 12 + integrations/openclaw/README.md | 155 + integrations/openclaw/openclaw.plugin.json | 27 + integrations/openclaw/package.json | 10 + integrations/openclaw/plugin.mjs | 217 + integrations/openclaw/plugin.yaml | 27 + integrations/pi/README.md | 77 + integrations/pi/index.ts | 275 ++ integrations/pi/package.json | 5 + integrations/pi/security.ts | 35 + package.json | 93 + packages/mcp/LICENSE | 190 + packages/mcp/README.md | 50 + packages/mcp/bin.mjs | 11 + packages/mcp/package.json | 40 + plugin/.claude-plugin/plugin.json | 13 + plugin/.codex-plugin/plugin.json | 15 + plugin/.mcp.copilot.json | 15 + plugin/.mcp.json | 13 + plugin/hooks/hooks.codex.json | 67 + plugin/hooks/hooks.copilot.json | 72 + plugin/hooks/hooks.json | 125 + plugin/opencode/README.md | 229 + plugin/opencode/agentmemory-capture.ts | 687 +++ plugin/opencode/commands/recall.md | 19 + plugin/opencode/commands/remember.md | 19 + plugin/opencode/plugin.json | 12 + plugin/plugin.json | 15 + plugin/scripts/diagnostics.mjs | 551 +++ plugin/scripts/notification.mjs | 76 + plugin/scripts/post-commit.mjs | 102 + plugin/scripts/post-tool-failure.mjs | 77 + plugin/scripts/post-tool-use.mjs | 122 + plugin/scripts/pre-compact.mjs | 80 + plugin/scripts/pre-tool-use.mjs | 84 + plugin/scripts/prompt-submit.mjs | 69 + plugin/scripts/session-end.mjs | 60 + plugin/scripts/session-start.mjs | 87 + plugin/scripts/stop.mjs | 44 + plugin/scripts/subagent-start.mjs | 75 + plugin/scripts/subagent-stop.mjs | 76 + plugin/scripts/task-completed.mjs | 75 + plugin/skills/_shared/TROUBLESHOOTING.md | 38 + plugin/skills/agentmemory-agents/REFERENCE.md | 28 + plugin/skills/agentmemory-agents/SKILL.md | 34 + .../skills/agentmemory-architecture/SKILL.md | 33 + plugin/skills/agentmemory-config/REFERENCE.md | 42 + plugin/skills/agentmemory-config/SKILL.md | 37 + plugin/skills/agentmemory-hooks/REFERENCE.md | 20 + plugin/skills/agentmemory-hooks/SKILL.md | 39 + .../skills/agentmemory-mcp-tools/REFERENCE.md | 65 + plugin/skills/agentmemory-mcp-tools/SKILL.md | 39 + .../skills/agentmemory-rest-api/REFERENCE.md | 129 + plugin/skills/agentmemory-rest-api/SKILL.md | 43 + plugin/skills/commit-context/EXAMPLES.md | 71 + plugin/skills/commit-context/SKILL.md | 64 + plugin/skills/commit-history/EXAMPLES.md | 71 + plugin/skills/commit-history/SKILL.md | 62 + plugin/skills/forget/EXAMPLES.md | 75 + plugin/skills/forget/SKILL.md | 66 + plugin/skills/handoff/EXAMPLES.md | 56 + plugin/skills/handoff/SKILL.md | 68 + plugin/skills/recall/EXAMPLES.md | 74 + plugin/skills/recall/SKILL.md | 60 + plugin/skills/recap/EXAMPLES.md | 60 + plugin/skills/recap/SKILL.md | 63 + plugin/skills/remember/EXAMPLES.md | 67 + plugin/skills/remember/SKILL.md | 61 + plugin/skills/session-history/EXAMPLES.md | 59 + plugin/skills/session-history/SKILL.md | 61 + .../skills/write-agentmemory-skill/SKILL.md | 40 + scripts/backfill-imported-sessions.sh | 259 + scripts/check-env-example.mjs | 101 + scripts/skills/check.ts | 80 + scripts/skills/generate.ts | 170 + src/auth.ts | 30 + src/cli.ts | 2992 ++++++++++++ src/cli/connect/antigravity.ts | 25 + src/cli/connect/claude-code.ts | 178 + src/cli/connect/cline.ts | 19 + src/cli/connect/codex-hooks.ts | 108 + src/cli/connect/codex.ts | 181 + src/cli/connect/continue.ts | 164 + src/cli/connect/copilot-cli.ts | 92 + src/cli/connect/cursor.ts | 13 + src/cli/connect/droid.ts | 21 + src/cli/connect/gemini-cli.ts | 13 + src/cli/connect/hermes.ts | 48 + src/cli/connect/index.ts | 209 + src/cli/connect/json-mcp-adapter.ts | 116 + src/cli/connect/kiro.ts | 16 + src/cli/connect/openclaw.ts | 14 + src/cli/connect/opencode.ts | 108 + src/cli/connect/openhuman.ts | 42 + src/cli/connect/pi.ts | 47 + src/cli/connect/qwen.ts | 17 + src/cli/connect/types.ts | 39 + src/cli/connect/util.ts | 109 + src/cli/connect/warp.ts | 19 + src/cli/connect/zed.ts | 22 + src/cli/doctor-diagnostics.ts | 379 ++ src/cli/onboarding.ts | 373 ++ src/cli/preferences.ts | 146 + src/cli/remove-plan.ts | 283 ++ src/cli/splash.ts | 86 + src/config.ts | 454 ++ src/eval/metrics-store.ts | 65 + src/eval/quality.ts | 51 + src/eval/schemas.ts | 124 + src/eval/self-correct.ts | 28 + src/eval/validator.ts | 31 + src/functions/access-tracker.ts | 104 + src/functions/actions.ts | 299 ++ src/functions/audit.ts | 113 + src/functions/auto-forget.ts | 206 + src/functions/branch-aware.ts | 166 + src/functions/cascade.ts | 90 + src/functions/checkpoints.ts | 236 + src/functions/claude-bridge.ts | 162 + src/functions/compress-file.ts | 188 + src/functions/compress-synthetic.ts | 106 + src/functions/compress.ts | 267 ++ src/functions/consolidate.ts | 241 + src/functions/consolidation-pipeline.ts | 270 ++ src/functions/context.ts | 234 + src/functions/crystallize.ts | 294 ++ src/functions/dedup.ts | 57 + src/functions/diagnostics.ts | 1063 +++++ src/functions/disk-size-manager.ts | 44 + src/functions/enrich.ts | 139 + src/functions/evict.ts | 347 ++ src/functions/export-import.ts | 587 +++ src/functions/facets.ts | 242 + src/functions/file-index.ts | 134 + src/functions/flow-compress.ts | 221 + src/functions/frontier.ts | 194 + src/functions/governance.ts | 177 + src/functions/graph-retrieval.ts | 362 ++ src/functions/graph.ts | 997 ++++ src/functions/image-quota-cleanup.ts | 99 + src/functions/image-refs.ts | 38 + src/functions/leases.ts | 251 + src/functions/lessons.ts | 283 ++ src/functions/mesh.ts | 495 ++ src/functions/migrate-vector-index.ts | 152 + src/functions/migrate.ts | 247 + src/functions/observe.ts | 345 ++ src/functions/obsidian-export.ts | 432 ++ src/functions/patterns.ts | 134 + src/functions/privacy.ts | 40 + src/functions/profile.ts | 159 + src/functions/query-expansion.ts | 188 + src/functions/recent-searches-sweep.ts | 72 + src/functions/reflect.ts | 477 ++ src/functions/relations.ts | 278 ++ src/functions/remember.ts | 264 ++ src/functions/replay.ts | 478 ++ src/functions/retention.ts | 412 ++ src/functions/routines.ts | 303 ++ src/functions/search.ts | 601 +++ src/functions/sentinels.ts | 455 ++ src/functions/signals.ts | 201 + src/functions/sketches.ts | 315 ++ src/functions/skill-extract.ts | 290 ++ src/functions/sliding-window.ts | 267 ++ src/functions/slots.ts | 487 ++ src/functions/smart-search.ts | 386 ++ src/functions/snapshot.ts | 232 + src/functions/summarize.ts | 398 ++ src/functions/team.ts | 160 + src/functions/temporal-graph.ts | 460 ++ src/functions/timeline.ts | 139 + src/functions/verify.ts | 116 + src/functions/vision-search.ts | 147 + src/functions/working-memory.ts | 254 + src/health/monitor.ts | 111 + src/health/thresholds.ts | 81 + src/hooks/_project.ts | 20 + src/hooks/notification.ts | 62 + src/hooks/post-commit.ts | 98 + src/hooks/post-tool-failure.ts | 66 + src/hooks/post-tool-use.ts | 117 + src/hooks/pre-compact.ts | 69 + src/hooks/pre-tool-use.ts | 126 + src/hooks/prompt-submit.ts | 52 + src/hooks/sdk-guard.ts | 26 + src/hooks/session-end.ts | 69 + src/hooks/session-start.ts | 92 + src/hooks/stop.ts | 59 + src/hooks/subagent-start.ts | 65 + src/hooks/subagent-stop.ts | 62 + src/hooks/task-completed.ts | 60 + src/index.ts | 612 +++ src/logger.ts | 110 + src/mcp/in-memory-kv.ts | 61 + src/mcp/rest-proxy.ts | 179 + src/mcp/server.ts | 1773 +++++++ src/mcp/standalone.ts | 501 ++ src/mcp/tools-registry.ts | 961 ++++ src/mcp/transport.ts | 263 ++ src/prompts/compression.ts | 67 + src/prompts/consolidation.ts | 48 + src/prompts/graph-extraction.ts | 35 + src/prompts/reflect.ts | 55 + src/prompts/summary.ts | 87 + src/prompts/vision.ts | 8 + src/prompts/xml.ts | 26 + src/providers/_fetch.ts | 19 + src/providers/_openai-shared.ts | 166 + src/providers/agent-sdk.ts | 120 + src/providers/anthropic.ts | 55 + src/providers/circuit-breaker.ts | 82 + src/providers/embedding/clip.ts | 107 + src/providers/embedding/cohere.ts | 47 + src/providers/embedding/gemini.ts | 78 + src/providers/embedding/index.ts | 80 + src/providers/embedding/local.ts | 52 + src/providers/embedding/openai.ts | 147 + src/providers/embedding/openrouter.ts | 52 + src/providers/embedding/voyage.ts | 47 + src/providers/fallback-chain.ts | 31 + src/providers/index.ts | 152 + src/providers/minimax.ts | 70 + src/providers/noop.ts | 20 + src/providers/openai.ts | 182 + src/providers/openrouter.ts | 72 + src/providers/resilient.ts | 37 + src/replay/jsonl-parser.ts | 181 + src/replay/timeline.ts | 166 + src/state/cjk-segmenter.ts | 169 + src/state/hybrid-search.ts | 324 ++ src/state/index-persistence.ts | 460 ++ src/state/keyed-mutex.ts | 18 + src/state/kv.ts | 47 + src/state/memory-utils.ts | 24 + src/state/reranker.ts | 74 + src/state/schema.ts | 104 + src/state/search-index.ts | 281 ++ src/state/stemmer.ts | 104 + src/state/synonyms.ts | 63 + src/state/vector-index.ts | 167 + src/telemetry/setup.ts | 149 + src/triggers/api.ts | 3195 +++++++++++++ src/triggers/events.ts | 146 + src/types.ts | 950 ++++ src/utils/image-store.ts | 90 + src/version.ts | 1 + src/viewer/document.ts | 45 + src/viewer/favicon.svg | 1 + src/viewer/index.html | 4182 +++++++++++++++++ src/viewer/server.ts | 451 ++ src/xenova.d.ts | 3 + test/access-tracker.test.ts | 247 + test/actions.test.ts | 453 ++ test/agent-id-scope.test.ts | 269 ++ test/agent-isolation-search.test.ts | 203 + test/agent-sdk-provider.test.ts | 160 + test/audit.test.ts | 106 + test/auto-compress.test.ts | 246 + test/auto-forget.test.ts | 273 ++ test/cascade.test.ts | 275 ++ test/checkpoints.test.ts | 494 ++ test/circuit-breaker.test.ts | 107 + test/claude-bridge-path.test.ts | 58 + test/claude-bridge.test.ts | 179 + test/claude-code-with-hooks.test.ts | 74 + test/cli-connect.test.ts | 503 ++ test/cli-doctor-fixes.test.ts | 239 + test/cli-onboarding.test.ts | 94 + test/cli-remove.test.ts | 169 + test/codex-connect-hooks.test.ts | 137 + test/codex-plugin.test.ts | 159 + test/compress-file.test.ts | 212 + test/confidence.test.ts | 248 + test/connect-new-agents.test.ts | 347 ++ test/consistency.test.ts | 110 + test/consolidate-project-scope.test.ts | 270 ++ test/consolidation-default.test.ts | 112 + test/consolidation-pipeline.test.ts | 252 + test/context-injection.test.ts | 128 + test/context-lessons.test.ts | 226 + test/context-slots.test.ts | 177 + test/copilot-plugin.test.ts | 380 ++ test/cross-project-isolation.test.ts | 284 ++ test/crystallize.test.ts | 522 ++ test/diagnostic-followup-rate.test.ts | 300 ++ test/diagnostics.test.ts | 868 ++++ test/embedding-provider.test.ts | 252 + test/enrich-project-isolation.test.ts | 253 + test/enrich.test.ts | 213 + test/env-loader.test.ts | 92 + test/eval-adapters.test.ts | 92 + test/eval.test.ts | 300 ++ test/evict.test.ts | 240 + test/export-import.test.ts | 252 + test/facets.test.ts | 449 ++ test/fallback-chain.test.ts | 93 + test/fallback-model-resolution.test.ts | 190 + test/fetch-timeout.test.ts | 346 ++ test/fixtures/jsonl/basic.jsonl | 2 + test/fixtures/jsonl/errors.jsonl | 4 + test/fixtures/jsonl/tool-use.jsonl | 4 + test/frontier.test.ts | 492 ++ test/fs-watcher.test.ts | 377 ++ test/governance.test.ts | 256 + test/graph-retrieval.test.ts | 298 ++ test/graph.test.ts | 732 +++ test/health-thresholds.test.ts | 97 + test/helpers/mocks.ts | 53 + test/hermes-plugin.test.ts | 71 + test/hook-project.test.ts | 66 + test/hybrid-search.test.ts | 183 + test/index-persistence.test.ts | 793 ++++ test/infer-memory-projects.test.ts | 241 + test/integration-plaintext-http.test.ts | 210 + test/integration.test.ts | 301 ++ test/leases.test.ts | 400 ++ test/lessons.test.ts | 352 ++ test/mcp-env-placeholder.test.ts | 57 + test/mcp-prompts.test.ts | 222 + test/mcp-resources.test.ts | 290 ++ test/mcp-standalone-proxy.test.ts | 386 ++ test/mcp-standalone.test.ts | 452 ++ test/mcp-surface-default.test.ts | 67 + test/mcp-transport.test.ts | 275 ++ test/memories-pagination.test.ts | 43 + test/mesh.test.ts | 755 +++ test/minimax-provider.test.ts | 30 + test/multi-instance-port.test.ts | 85 + test/multimodal.test.ts | 381 ++ test/observe-implicit-session.test.ts | 144 + test/obsidian-export.test.ts | 433 ++ test/onboarding.test.ts | 27 + test/openai-shared.test.ts | 304 ++ test/openclaw-plugin.test.ts | 62 + test/opencode-auto-context.test.ts | 37 + test/preferences.test.ts | 103 + test/privacy.test.ts | 107 + test/profile.test.ts | 162 + test/query-expansion.test.ts | 151 + test/reflect.test.ts | 352 ++ test/relations.test.ts | 199 + test/remember-bm25-index.test.ts | 97 + test/remember-forget-audit.test.ts | 211 + test/remember-project-scope.test.ts | 258 + test/replay-import-key.test.ts | 154 + test/replay-sensitive.test.ts | 21 + test/replay.test.ts | 145 + test/reranker.test.ts | 62 + test/retention-access.test.ts | 315 ++ test/retention.test.ts | 566 +++ test/routines.test.ts | 498 ++ test/schema-fingerprint.test.ts | 81 + test/schema.test.ts | 42 + test/search-index.test.ts | 293 ++ test/search.test.ts | 208 + test/sentinels.test.ts | 627 +++ test/session-end-triggers-graph.test.ts | 93 + test/signals.test.ts | 411 ++ test/sketches.test.ts | 550 +++ test/skill-extract.test.ts | 198 + test/sliding-window.test.ts | 195 + test/slots-flag-gate.test.ts | 90 + test/slots.test.ts | 257 + test/smart-search.test.ts | 294 ++ test/snapshot.test.ts | 166 + test/stop-hook-recursion-guard.test.ts | 57 + test/stop-worker-pidfile.test.ts | 35 + test/summarize.test.ts | 482 ++ test/team.test.ts | 157 + test/temporal-graph.test.ts | 375 ++ test/timeline.test.ts | 149 + test/tool-count-consistency.test.ts | 63 + test/vector-index-dimensions.test.ts | 132 + test/vector-index-populate.test.ts | 121 + test/vector-index.test.ts | 118 + test/verify.test.ts | 207 + test/viewer-graph-cooldown.test.ts | 38 + test/viewer-host.test.ts | 330 ++ test/viewer-memories-sort.test.ts | 32 + test/viewer-security.test.ts | 226 + test/viewer-session-id.test.ts | 242 + test/vision-search.test.ts | 184 + test/working-memory.test.ts | 144 + test/xml.test.ts | 65 + tsconfig.json | 22 + tsdown.config.ts | 87 + website/.gitignore | 10 + website/README.md | 63 + website/app/globals.css | 160 + website/app/layout.tsx | 59 + website/app/opengraph-image.tsx | 107 + website/app/page.tsx | 45 + website/app/twitter-image.tsx | 5 + website/components/AgentInstall.module.css | 228 + website/components/AgentInstall.tsx | 333 ++ website/components/Agents.module.css | 230 + website/components/Agents.tsx | 319 ++ website/components/CommandCenter.module.css | 195 + website/components/CommandCenter.tsx | 162 + website/components/Compare.module.css | 63 + website/components/Compare.tsx | 48 + website/components/FeaturedIn.module.css | 152 + website/components/FeaturedIn.tsx | 123 + website/components/Features.module.css | 67 + website/components/Features.tsx | 123 + website/components/Footer.module.css | 51 + website/components/Footer.tsx | 40 + .../components/GitHubStarButton.module.css | 30 + website/components/GitHubStarButton.tsx | 93 + website/components/Hero.module.css | 123 + website/components/Hero.tsx | 44 + website/components/HeroNpxCommand.module.css | 69 + website/components/HeroNpxCommand.tsx | 33 + website/components/Install.module.css | 93 + website/components/Install.tsx | 118 + website/components/LiveTerminal.module.css | 103 + website/components/LiveTerminal.tsx | 159 + website/components/MemoryGraph.module.css | 44 + website/components/MemoryGraph.tsx | 171 + website/components/MobileNavToggle.module.css | 101 + website/components/MobileNavToggle.tsx | 111 + website/components/Nav.module.css | 133 + website/components/Nav.tsx | 72 + website/components/Primitives.module.css | 76 + website/components/Primitives.tsx | 88 + website/components/ScrollProgress.tsx | 49 + website/components/Stats.module.css | 70 + website/components/Stats.tsx | 109 + website/components/Testimonials.module.css | 221 + website/components/Testimonials.tsx | 142 + website/lib/format.ts | 5 + website/lib/generated-meta.json | 8 + website/lib/github.ts | 39 + website/lib/meta.ts | 25 + website/next-env.d.ts | 6 + website/next.config.ts | 33 + website/package.json | 31 + website/public/dashboard.png | Bin 0 -> 225069 bytes website/public/demo.gif | Bin 0 -> 8171930 bytes website/public/featured/aaif-logo.png | Bin 0 -> 22537 bytes website/public/icon.svg | 35 + website/public/logo.svg | 59 + website/public/states.png | Bin 0 -> 80261 bytes website/public/traces-waterfall.png | Bin 0 -> 480470 bytes website/scripts/gen-meta.mjs | 120 + website/tsconfig.json | 41 + website/vercel.json | 12 + 613 files changed, 113494 insertions(+) create mode 100644 .claude-plugin/marketplace.json create mode 100644 .codex-plugin/marketplace.json create mode 100644 .env.example create mode 100644 .github/FUNDING.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/security-advisories/01-viewer-xss.md create mode 100644 .github/security-advisories/02-curl-sh-rce.md create mode 100644 .github/security-advisories/03-default-bind-0000.md create mode 100644 .github/security-advisories/04-mesh-unauth.md create mode 100644 .github/security-advisories/05-obsidian-export-traversal.md create mode 100644 .github/security-advisories/06-privacy-redaction-incomplete.md create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 DESIGN.md create mode 100644 GOVERNANCE.md create mode 100644 INSTALL_FOR_AGENTS.md create mode 100644 LICENSE create mode 100644 MAINTAINERS.md create mode 100644 README.md create mode 100644 README.wehub.md create mode 100644 READMEs/README.de-DE.md create mode 100644 READMEs/README.es-ES.md create mode 100644 READMEs/README.fr-FR.md create mode 100644 READMEs/README.hi-IN.md create mode 100644 READMEs/README.ja-JP.md create mode 100644 READMEs/README.ko-KR.md create mode 100644 READMEs/README.pt-BR.md create mode 100644 READMEs/README.ru-RU.md create mode 100644 READMEs/README.tr-TR.md create mode 100644 READMEs/README.zh-CN.md create mode 100644 READMEs/README.zh-TW.md create mode 100644 ROADMAP.md create mode 100644 SECURITY.md create mode 100644 assets/agents/pi.svg create mode 100644 assets/banner.png create mode 100644 assets/demo.gif create mode 100644 assets/demo.mp4 create mode 100644 assets/icon.svg create mode 100644 assets/iii-console/states.png create mode 100644 assets/iii-console/traces-waterfall.png create mode 100644 assets/iii-console/workers.png create mode 100644 assets/logo.svg create mode 100644 assets/tags/divider.svg create mode 100644 assets/tags/light/divider.svg create mode 100644 assets/tags/light/new-v082.svg create mode 100644 assets/tags/light/pill-beta.svg create mode 100644 assets/tags/light/pill-hook.svg create mode 100644 assets/tags/light/pill-mcp.svg create mode 100644 assets/tags/light/pill-new.svg create mode 100644 assets/tags/light/pill-plugin.svg create mode 100644 assets/tags/light/pill-secure.svg create mode 100644 assets/tags/light/pill-skill.svg create mode 100644 assets/tags/light/pill-stable.svg create mode 100644 assets/tags/light/section-agents.svg create mode 100644 assets/tags/light/section-api.svg create mode 100644 assets/tags/light/section-architecture.svg create mode 100644 assets/tags/light/section-benchmarks.svg create mode 100644 assets/tags/light/section-competitors.svg create mode 100644 assets/tags/light/section-config.svg create mode 100644 assets/tags/light/section-development.svg create mode 100644 assets/tags/light/section-how.svg create mode 100644 assets/tags/light/section-license.svg create mode 100644 assets/tags/light/section-mcp.svg create mode 100644 assets/tags/light/section-quickstart.svg create mode 100644 assets/tags/light/section-search.svg create mode 100644 assets/tags/light/section-viewer.svg create mode 100644 assets/tags/light/section-why.svg create mode 100644 assets/tags/light/stat-deps.svg create mode 100644 assets/tags/light/stat-hooks.svg create mode 100644 assets/tags/light/stat-recall.svg create mode 100644 assets/tags/light/stat-tests.svg create mode 100644 assets/tags/light/stat-tokens.svg create mode 100644 assets/tags/light/stat-tools.svg create mode 100644 assets/tags/new-v082.svg create mode 100644 assets/tags/pill-beta.svg create mode 100644 assets/tags/pill-hook.svg create mode 100644 assets/tags/pill-mcp.svg create mode 100644 assets/tags/pill-new.svg create mode 100644 assets/tags/pill-plugin.svg create mode 100644 assets/tags/pill-secure.svg create mode 100644 assets/tags/pill-skill.svg create mode 100644 assets/tags/pill-stable.svg create mode 100644 assets/tags/section-agents.svg create mode 100644 assets/tags/section-api.svg create mode 100644 assets/tags/section-architecture.svg create mode 100644 assets/tags/section-benchmarks.svg create mode 100644 assets/tags/section-competitors.svg create mode 100644 assets/tags/section-config.svg create mode 100644 assets/tags/section-development.svg create mode 100644 assets/tags/section-how.svg create mode 100644 assets/tags/section-license.svg create mode 100644 assets/tags/section-mcp.svg create mode 100644 assets/tags/section-quickstart.svg create mode 100644 assets/tags/section-search.svg create mode 100644 assets/tags/section-viewer.svg create mode 100644 assets/tags/section-why.svg create mode 100644 assets/tags/stat-deps.svg create mode 100644 assets/tags/stat-hooks.svg create mode 100644 assets/tags/stat-recall.svg create mode 100644 assets/tags/stat-tests.svg create mode 100644 assets/tags/stat-tokens.svg create mode 100644 assets/tags/stat-tools.svg create mode 100644 benchmark/COMPARISON.md create mode 100644 benchmark/LONGMEMEVAL.md create mode 100644 benchmark/QUALITY.md create mode 100644 benchmark/README.md create mode 100644 benchmark/REAL-EMBEDDINGS.md create mode 100644 benchmark/SCALE.md create mode 100644 benchmark/dataset.ts create mode 100644 benchmark/lib/percentiles.ts create mode 100644 benchmark/load-100k.ts create mode 100644 benchmark/longmemeval-bench.ts create mode 100644 benchmark/quality-eval.ts create mode 100644 benchmark/real-embeddings-eval.ts create mode 100644 benchmark/results/load-100k-96c0ed0.json create mode 100644 benchmark/scale-eval.ts create mode 100644 deploy/README.md create mode 100644 deploy/coolify/Dockerfile create mode 100644 deploy/coolify/README.md create mode 100644 deploy/coolify/docker-compose.yml create mode 100755 deploy/coolify/entrypoint.sh create mode 100644 deploy/fly/Dockerfile create mode 100644 deploy/fly/README.md create mode 100755 deploy/fly/entrypoint.sh create mode 100644 deploy/fly/fly.toml create mode 100644 deploy/railway/Dockerfile create mode 100644 deploy/railway/README.md create mode 100755 deploy/railway/entrypoint.sh create mode 100644 deploy/railway/railway.json create mode 100644 deploy/render/Dockerfile create mode 100644 deploy/render/README.md create mode 100755 deploy/render/entrypoint.sh create mode 100644 deploy/render/render.yaml create mode 100644 docker-compose.yml create mode 100644 docs/benchmarks/2026-05-20-coding-agent-life-v1.md create mode 100644 docs/benchmarks/TEMPLATE.md create mode 100644 docs/recipes/pairings.md create mode 100644 eval/README.md create mode 100644 eval/data/coding-agent-life-v1/queries.json create mode 100644 eval/data/coding-agent-life-v1/sessions.json create mode 100644 eval/runner/adapters/agentmemory.ts create mode 100644 eval/runner/adapters/grep.ts create mode 100644 eval/runner/adapters/vector.ts create mode 100644 eval/runner/coding-life.ts create mode 100644 eval/runner/load.ts create mode 100644 eval/runner/longmemeval.ts create mode 100644 eval/runner/score.ts create mode 100644 eval/runner/types.ts create mode 100755 eval/scripts/sandbox.sh create mode 100644 examples/python/README.md create mode 100644 examples/python/observe_and_recall.py create mode 100644 examples/python/quickstart.py create mode 100644 iii-config.docker.yaml create mode 100644 iii-config.yaml create mode 100644 integrations/filesystem-watcher/README.md create mode 100755 integrations/filesystem-watcher/bin.mjs create mode 100644 integrations/filesystem-watcher/package.json create mode 100644 integrations/filesystem-watcher/watcher.mjs create mode 100644 integrations/hermes/README.md create mode 100644 integrations/hermes/__init__.py create mode 100644 integrations/hermes/plugin.yaml create mode 100644 integrations/openclaw/README.md create mode 100644 integrations/openclaw/openclaw.plugin.json create mode 100644 integrations/openclaw/package.json create mode 100644 integrations/openclaw/plugin.mjs create mode 100644 integrations/openclaw/plugin.yaml create mode 100644 integrations/pi/README.md create mode 100644 integrations/pi/index.ts create mode 100644 integrations/pi/package.json create mode 100644 integrations/pi/security.ts create mode 100644 package.json create mode 100644 packages/mcp/LICENSE create mode 100644 packages/mcp/README.md create mode 100755 packages/mcp/bin.mjs create mode 100644 packages/mcp/package.json create mode 100644 plugin/.claude-plugin/plugin.json create mode 100644 plugin/.codex-plugin/plugin.json create mode 100644 plugin/.mcp.copilot.json create mode 100644 plugin/.mcp.json create mode 100644 plugin/hooks/hooks.codex.json create mode 100644 plugin/hooks/hooks.copilot.json create mode 100644 plugin/hooks/hooks.json create mode 100644 plugin/opencode/README.md create mode 100644 plugin/opencode/agentmemory-capture.ts create mode 100644 plugin/opencode/commands/recall.md create mode 100644 plugin/opencode/commands/remember.md create mode 100644 plugin/opencode/plugin.json create mode 100644 plugin/plugin.json create mode 100644 plugin/scripts/diagnostics.mjs create mode 100755 plugin/scripts/notification.mjs create mode 100755 plugin/scripts/post-commit.mjs create mode 100755 plugin/scripts/post-tool-failure.mjs create mode 100755 plugin/scripts/post-tool-use.mjs create mode 100755 plugin/scripts/pre-compact.mjs create mode 100755 plugin/scripts/pre-tool-use.mjs create mode 100755 plugin/scripts/prompt-submit.mjs create mode 100755 plugin/scripts/session-end.mjs create mode 100755 plugin/scripts/session-start.mjs create mode 100755 plugin/scripts/stop.mjs create mode 100755 plugin/scripts/subagent-start.mjs create mode 100755 plugin/scripts/subagent-stop.mjs create mode 100755 plugin/scripts/task-completed.mjs create mode 100644 plugin/skills/_shared/TROUBLESHOOTING.md create mode 100644 plugin/skills/agentmemory-agents/REFERENCE.md create mode 100644 plugin/skills/agentmemory-agents/SKILL.md create mode 100644 plugin/skills/agentmemory-architecture/SKILL.md create mode 100644 plugin/skills/agentmemory-config/REFERENCE.md create mode 100644 plugin/skills/agentmemory-config/SKILL.md create mode 100644 plugin/skills/agentmemory-hooks/REFERENCE.md create mode 100644 plugin/skills/agentmemory-hooks/SKILL.md create mode 100644 plugin/skills/agentmemory-mcp-tools/REFERENCE.md create mode 100644 plugin/skills/agentmemory-mcp-tools/SKILL.md create mode 100644 plugin/skills/agentmemory-rest-api/REFERENCE.md create mode 100644 plugin/skills/agentmemory-rest-api/SKILL.md create mode 100644 plugin/skills/commit-context/EXAMPLES.md create mode 100644 plugin/skills/commit-context/SKILL.md create mode 100644 plugin/skills/commit-history/EXAMPLES.md create mode 100644 plugin/skills/commit-history/SKILL.md create mode 100644 plugin/skills/forget/EXAMPLES.md create mode 100644 plugin/skills/forget/SKILL.md create mode 100644 plugin/skills/handoff/EXAMPLES.md create mode 100644 plugin/skills/handoff/SKILL.md create mode 100644 plugin/skills/recall/EXAMPLES.md create mode 100644 plugin/skills/recall/SKILL.md create mode 100644 plugin/skills/recap/EXAMPLES.md create mode 100644 plugin/skills/recap/SKILL.md create mode 100644 plugin/skills/remember/EXAMPLES.md create mode 100644 plugin/skills/remember/SKILL.md create mode 100644 plugin/skills/session-history/EXAMPLES.md create mode 100644 plugin/skills/session-history/SKILL.md create mode 100644 plugin/skills/write-agentmemory-skill/SKILL.md create mode 100755 scripts/backfill-imported-sessions.sh create mode 100644 scripts/check-env-example.mjs create mode 100644 scripts/skills/check.ts create mode 100644 scripts/skills/generate.ts create mode 100644 src/auth.ts create mode 100644 src/cli.ts create mode 100644 src/cli/connect/antigravity.ts create mode 100644 src/cli/connect/claude-code.ts create mode 100644 src/cli/connect/cline.ts create mode 100644 src/cli/connect/codex-hooks.ts create mode 100644 src/cli/connect/codex.ts create mode 100644 src/cli/connect/continue.ts create mode 100644 src/cli/connect/copilot-cli.ts create mode 100644 src/cli/connect/cursor.ts create mode 100644 src/cli/connect/droid.ts create mode 100644 src/cli/connect/gemini-cli.ts create mode 100644 src/cli/connect/hermes.ts create mode 100644 src/cli/connect/index.ts create mode 100644 src/cli/connect/json-mcp-adapter.ts create mode 100644 src/cli/connect/kiro.ts create mode 100644 src/cli/connect/openclaw.ts create mode 100644 src/cli/connect/opencode.ts create mode 100644 src/cli/connect/openhuman.ts create mode 100644 src/cli/connect/pi.ts create mode 100644 src/cli/connect/qwen.ts create mode 100644 src/cli/connect/types.ts create mode 100644 src/cli/connect/util.ts create mode 100644 src/cli/connect/warp.ts create mode 100644 src/cli/connect/zed.ts create mode 100644 src/cli/doctor-diagnostics.ts create mode 100644 src/cli/onboarding.ts create mode 100644 src/cli/preferences.ts create mode 100644 src/cli/remove-plan.ts create mode 100644 src/cli/splash.ts create mode 100644 src/config.ts create mode 100644 src/eval/metrics-store.ts create mode 100644 src/eval/quality.ts create mode 100644 src/eval/schemas.ts create mode 100644 src/eval/self-correct.ts create mode 100644 src/eval/validator.ts create mode 100644 src/functions/access-tracker.ts create mode 100644 src/functions/actions.ts create mode 100644 src/functions/audit.ts create mode 100644 src/functions/auto-forget.ts create mode 100644 src/functions/branch-aware.ts create mode 100644 src/functions/cascade.ts create mode 100644 src/functions/checkpoints.ts create mode 100644 src/functions/claude-bridge.ts create mode 100644 src/functions/compress-file.ts create mode 100644 src/functions/compress-synthetic.ts create mode 100644 src/functions/compress.ts create mode 100644 src/functions/consolidate.ts create mode 100644 src/functions/consolidation-pipeline.ts create mode 100644 src/functions/context.ts create mode 100644 src/functions/crystallize.ts create mode 100644 src/functions/dedup.ts create mode 100644 src/functions/diagnostics.ts create mode 100644 src/functions/disk-size-manager.ts create mode 100644 src/functions/enrich.ts create mode 100644 src/functions/evict.ts create mode 100644 src/functions/export-import.ts create mode 100644 src/functions/facets.ts create mode 100644 src/functions/file-index.ts create mode 100644 src/functions/flow-compress.ts create mode 100644 src/functions/frontier.ts create mode 100644 src/functions/governance.ts create mode 100644 src/functions/graph-retrieval.ts create mode 100644 src/functions/graph.ts create mode 100644 src/functions/image-quota-cleanup.ts create mode 100644 src/functions/image-refs.ts create mode 100644 src/functions/leases.ts create mode 100644 src/functions/lessons.ts create mode 100644 src/functions/mesh.ts create mode 100644 src/functions/migrate-vector-index.ts create mode 100644 src/functions/migrate.ts create mode 100644 src/functions/observe.ts create mode 100644 src/functions/obsidian-export.ts create mode 100644 src/functions/patterns.ts create mode 100644 src/functions/privacy.ts create mode 100644 src/functions/profile.ts create mode 100644 src/functions/query-expansion.ts create mode 100644 src/functions/recent-searches-sweep.ts create mode 100644 src/functions/reflect.ts create mode 100644 src/functions/relations.ts create mode 100644 src/functions/remember.ts create mode 100644 src/functions/replay.ts create mode 100644 src/functions/retention.ts create mode 100644 src/functions/routines.ts create mode 100644 src/functions/search.ts create mode 100644 src/functions/sentinels.ts create mode 100644 src/functions/signals.ts create mode 100644 src/functions/sketches.ts create mode 100644 src/functions/skill-extract.ts create mode 100644 src/functions/sliding-window.ts create mode 100644 src/functions/slots.ts create mode 100644 src/functions/smart-search.ts create mode 100644 src/functions/snapshot.ts create mode 100644 src/functions/summarize.ts create mode 100644 src/functions/team.ts create mode 100644 src/functions/temporal-graph.ts create mode 100644 src/functions/timeline.ts create mode 100644 src/functions/verify.ts create mode 100644 src/functions/vision-search.ts create mode 100644 src/functions/working-memory.ts create mode 100644 src/health/monitor.ts create mode 100644 src/health/thresholds.ts create mode 100644 src/hooks/_project.ts create mode 100644 src/hooks/notification.ts create mode 100644 src/hooks/post-commit.ts create mode 100644 src/hooks/post-tool-failure.ts create mode 100644 src/hooks/post-tool-use.ts create mode 100644 src/hooks/pre-compact.ts create mode 100644 src/hooks/pre-tool-use.ts create mode 100644 src/hooks/prompt-submit.ts create mode 100644 src/hooks/sdk-guard.ts create mode 100644 src/hooks/session-end.ts create mode 100644 src/hooks/session-start.ts create mode 100644 src/hooks/stop.ts create mode 100644 src/hooks/subagent-start.ts create mode 100644 src/hooks/subagent-stop.ts create mode 100644 src/hooks/task-completed.ts create mode 100644 src/index.ts create mode 100644 src/logger.ts create mode 100644 src/mcp/in-memory-kv.ts create mode 100644 src/mcp/rest-proxy.ts create mode 100644 src/mcp/server.ts create mode 100644 src/mcp/standalone.ts create mode 100644 src/mcp/tools-registry.ts create mode 100644 src/mcp/transport.ts create mode 100644 src/prompts/compression.ts create mode 100644 src/prompts/consolidation.ts create mode 100644 src/prompts/graph-extraction.ts create mode 100644 src/prompts/reflect.ts create mode 100644 src/prompts/summary.ts create mode 100644 src/prompts/vision.ts create mode 100644 src/prompts/xml.ts create mode 100644 src/providers/_fetch.ts create mode 100644 src/providers/_openai-shared.ts create mode 100644 src/providers/agent-sdk.ts create mode 100644 src/providers/anthropic.ts create mode 100644 src/providers/circuit-breaker.ts create mode 100644 src/providers/embedding/clip.ts create mode 100644 src/providers/embedding/cohere.ts create mode 100644 src/providers/embedding/gemini.ts create mode 100644 src/providers/embedding/index.ts create mode 100644 src/providers/embedding/local.ts create mode 100644 src/providers/embedding/openai.ts create mode 100644 src/providers/embedding/openrouter.ts create mode 100644 src/providers/embedding/voyage.ts create mode 100644 src/providers/fallback-chain.ts create mode 100644 src/providers/index.ts create mode 100644 src/providers/minimax.ts create mode 100644 src/providers/noop.ts create mode 100644 src/providers/openai.ts create mode 100644 src/providers/openrouter.ts create mode 100644 src/providers/resilient.ts create mode 100644 src/replay/jsonl-parser.ts create mode 100644 src/replay/timeline.ts create mode 100644 src/state/cjk-segmenter.ts create mode 100644 src/state/hybrid-search.ts create mode 100644 src/state/index-persistence.ts create mode 100644 src/state/keyed-mutex.ts create mode 100644 src/state/kv.ts create mode 100644 src/state/memory-utils.ts create mode 100644 src/state/reranker.ts create mode 100644 src/state/schema.ts create mode 100644 src/state/search-index.ts create mode 100644 src/state/stemmer.ts create mode 100644 src/state/synonyms.ts create mode 100644 src/state/vector-index.ts create mode 100644 src/telemetry/setup.ts create mode 100644 src/triggers/api.ts create mode 100644 src/triggers/events.ts create mode 100644 src/types.ts create mode 100644 src/utils/image-store.ts create mode 100644 src/version.ts create mode 100644 src/viewer/document.ts create mode 100644 src/viewer/favicon.svg create mode 100644 src/viewer/index.html create mode 100644 src/viewer/server.ts create mode 100644 src/xenova.d.ts create mode 100644 test/access-tracker.test.ts create mode 100644 test/actions.test.ts create mode 100644 test/agent-id-scope.test.ts create mode 100644 test/agent-isolation-search.test.ts create mode 100644 test/agent-sdk-provider.test.ts create mode 100644 test/audit.test.ts create mode 100644 test/auto-compress.test.ts create mode 100644 test/auto-forget.test.ts create mode 100644 test/cascade.test.ts create mode 100644 test/checkpoints.test.ts create mode 100644 test/circuit-breaker.test.ts create mode 100644 test/claude-bridge-path.test.ts create mode 100644 test/claude-bridge.test.ts create mode 100644 test/claude-code-with-hooks.test.ts create mode 100644 test/cli-connect.test.ts create mode 100644 test/cli-doctor-fixes.test.ts create mode 100644 test/cli-onboarding.test.ts create mode 100644 test/cli-remove.test.ts create mode 100644 test/codex-connect-hooks.test.ts create mode 100644 test/codex-plugin.test.ts create mode 100644 test/compress-file.test.ts create mode 100644 test/confidence.test.ts create mode 100644 test/connect-new-agents.test.ts create mode 100644 test/consistency.test.ts create mode 100644 test/consolidate-project-scope.test.ts create mode 100644 test/consolidation-default.test.ts create mode 100644 test/consolidation-pipeline.test.ts create mode 100644 test/context-injection.test.ts create mode 100644 test/context-lessons.test.ts create mode 100644 test/context-slots.test.ts create mode 100644 test/copilot-plugin.test.ts create mode 100644 test/cross-project-isolation.test.ts create mode 100644 test/crystallize.test.ts create mode 100644 test/diagnostic-followup-rate.test.ts create mode 100644 test/diagnostics.test.ts create mode 100644 test/embedding-provider.test.ts create mode 100644 test/enrich-project-isolation.test.ts create mode 100644 test/enrich.test.ts create mode 100644 test/env-loader.test.ts create mode 100644 test/eval-adapters.test.ts create mode 100644 test/eval.test.ts create mode 100644 test/evict.test.ts create mode 100644 test/export-import.test.ts create mode 100644 test/facets.test.ts create mode 100644 test/fallback-chain.test.ts create mode 100644 test/fallback-model-resolution.test.ts create mode 100644 test/fetch-timeout.test.ts create mode 100644 test/fixtures/jsonl/basic.jsonl create mode 100644 test/fixtures/jsonl/errors.jsonl create mode 100644 test/fixtures/jsonl/tool-use.jsonl create mode 100644 test/frontier.test.ts create mode 100644 test/fs-watcher.test.ts create mode 100644 test/governance.test.ts create mode 100644 test/graph-retrieval.test.ts create mode 100644 test/graph.test.ts create mode 100644 test/health-thresholds.test.ts create mode 100644 test/helpers/mocks.ts create mode 100644 test/hermes-plugin.test.ts create mode 100644 test/hook-project.test.ts create mode 100644 test/hybrid-search.test.ts create mode 100644 test/index-persistence.test.ts create mode 100644 test/infer-memory-projects.test.ts create mode 100644 test/integration-plaintext-http.test.ts create mode 100644 test/integration.test.ts create mode 100644 test/leases.test.ts create mode 100644 test/lessons.test.ts create mode 100644 test/mcp-env-placeholder.test.ts create mode 100644 test/mcp-prompts.test.ts create mode 100644 test/mcp-resources.test.ts create mode 100644 test/mcp-standalone-proxy.test.ts create mode 100644 test/mcp-standalone.test.ts create mode 100644 test/mcp-surface-default.test.ts create mode 100644 test/mcp-transport.test.ts create mode 100644 test/memories-pagination.test.ts create mode 100644 test/mesh.test.ts create mode 100644 test/minimax-provider.test.ts create mode 100644 test/multi-instance-port.test.ts create mode 100644 test/multimodal.test.ts create mode 100644 test/observe-implicit-session.test.ts create mode 100644 test/obsidian-export.test.ts create mode 100644 test/onboarding.test.ts create mode 100644 test/openai-shared.test.ts create mode 100644 test/openclaw-plugin.test.ts create mode 100644 test/opencode-auto-context.test.ts create mode 100644 test/preferences.test.ts create mode 100644 test/privacy.test.ts create mode 100644 test/profile.test.ts create mode 100644 test/query-expansion.test.ts create mode 100644 test/reflect.test.ts create mode 100644 test/relations.test.ts create mode 100644 test/remember-bm25-index.test.ts create mode 100644 test/remember-forget-audit.test.ts create mode 100644 test/remember-project-scope.test.ts create mode 100644 test/replay-import-key.test.ts create mode 100644 test/replay-sensitive.test.ts create mode 100644 test/replay.test.ts create mode 100644 test/reranker.test.ts create mode 100644 test/retention-access.test.ts create mode 100644 test/retention.test.ts create mode 100644 test/routines.test.ts create mode 100644 test/schema-fingerprint.test.ts create mode 100644 test/schema.test.ts create mode 100644 test/search-index.test.ts create mode 100644 test/search.test.ts create mode 100644 test/sentinels.test.ts create mode 100644 test/session-end-triggers-graph.test.ts create mode 100644 test/signals.test.ts create mode 100644 test/sketches.test.ts create mode 100644 test/skill-extract.test.ts create mode 100644 test/sliding-window.test.ts create mode 100644 test/slots-flag-gate.test.ts create mode 100644 test/slots.test.ts create mode 100644 test/smart-search.test.ts create mode 100644 test/snapshot.test.ts create mode 100644 test/stop-hook-recursion-guard.test.ts create mode 100644 test/stop-worker-pidfile.test.ts create mode 100644 test/summarize.test.ts create mode 100644 test/team.test.ts create mode 100644 test/temporal-graph.test.ts create mode 100644 test/timeline.test.ts create mode 100644 test/tool-count-consistency.test.ts create mode 100644 test/vector-index-dimensions.test.ts create mode 100644 test/vector-index-populate.test.ts create mode 100644 test/vector-index.test.ts create mode 100644 test/verify.test.ts create mode 100644 test/viewer-graph-cooldown.test.ts create mode 100644 test/viewer-host.test.ts create mode 100644 test/viewer-memories-sort.test.ts create mode 100644 test/viewer-security.test.ts create mode 100644 test/viewer-session-id.test.ts create mode 100644 test/vision-search.test.ts create mode 100644 test/working-memory.test.ts create mode 100644 test/xml.test.ts create mode 100644 tsconfig.json create mode 100644 tsdown.config.ts create mode 100644 website/.gitignore create mode 100644 website/README.md create mode 100644 website/app/globals.css create mode 100644 website/app/layout.tsx create mode 100644 website/app/opengraph-image.tsx create mode 100644 website/app/page.tsx create mode 100644 website/app/twitter-image.tsx create mode 100644 website/components/AgentInstall.module.css create mode 100644 website/components/AgentInstall.tsx create mode 100644 website/components/Agents.module.css create mode 100644 website/components/Agents.tsx create mode 100644 website/components/CommandCenter.module.css create mode 100644 website/components/CommandCenter.tsx create mode 100644 website/components/Compare.module.css create mode 100644 website/components/Compare.tsx create mode 100644 website/components/FeaturedIn.module.css create mode 100644 website/components/FeaturedIn.tsx create mode 100644 website/components/Features.module.css create mode 100644 website/components/Features.tsx create mode 100644 website/components/Footer.module.css create mode 100644 website/components/Footer.tsx create mode 100644 website/components/GitHubStarButton.module.css create mode 100644 website/components/GitHubStarButton.tsx create mode 100644 website/components/Hero.module.css create mode 100644 website/components/Hero.tsx create mode 100644 website/components/HeroNpxCommand.module.css create mode 100644 website/components/HeroNpxCommand.tsx create mode 100644 website/components/Install.module.css create mode 100644 website/components/Install.tsx create mode 100644 website/components/LiveTerminal.module.css create mode 100644 website/components/LiveTerminal.tsx create mode 100644 website/components/MemoryGraph.module.css create mode 100644 website/components/MemoryGraph.tsx create mode 100644 website/components/MobileNavToggle.module.css create mode 100644 website/components/MobileNavToggle.tsx create mode 100644 website/components/Nav.module.css create mode 100644 website/components/Nav.tsx create mode 100644 website/components/Primitives.module.css create mode 100644 website/components/Primitives.tsx create mode 100644 website/components/ScrollProgress.tsx create mode 100644 website/components/Stats.module.css create mode 100644 website/components/Stats.tsx create mode 100644 website/components/Testimonials.module.css create mode 100644 website/components/Testimonials.tsx create mode 100644 website/lib/format.ts create mode 100644 website/lib/generated-meta.json create mode 100644 website/lib/github.ts create mode 100644 website/lib/meta.ts create mode 100644 website/next-env.d.ts create mode 100644 website/next.config.ts create mode 100644 website/package.json create mode 100644 website/public/dashboard.png create mode 100644 website/public/demo.gif create mode 100644 website/public/featured/aaif-logo.png create mode 100644 website/public/icon.svg create mode 100644 website/public/logo.svg create mode 100644 website/public/states.png create mode 100644 website/public/traces-waterfall.png create mode 100644 website/scripts/gen-meta.mjs create mode 100644 website/tsconfig.json create mode 100644 website/vercel.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..4db7b4a --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,14 @@ +{ + "name": "agentmemory", + "owner": { + "name": "Rohit Ghumare", + "github": "rohitg00" + }, + "plugins": [ + { + "name": "agentmemory", + "description": "Persistent memory for AI coding agents -- captures tool usage, compresses via LLM, injects context into future sessions", + "source": "./plugin" + } + ] +} diff --git a/.codex-plugin/marketplace.json b/.codex-plugin/marketplace.json new file mode 100644 index 0000000..65ec86c --- /dev/null +++ b/.codex-plugin/marketplace.json @@ -0,0 +1,22 @@ +{ + "name": "agentmemory", + "interface": { + "displayName": "agentmemory" + }, + "plugins": [ + { + "name": "agentmemory", + "source": { + "source": "git-subdir", + "url": "https://github.com/rohitg00/agentmemory.git", + "path": "./plugin", + "ref": "main" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Memory" + } + ] +} diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..77ca0f3 --- /dev/null +++ b/.env.example @@ -0,0 +1,175 @@ +# ============================================================================= +# agentmemory configuration +# ============================================================================= +# +# Copy this file to `~/.agentmemory/.env` (or to your project root if you +# prefer scoped config) and uncomment the lines you want to override. +# +# Every line is OFF by default — `agentmemory` runs out of the box with no +# LLM key, no embedding key, and no API auth. Set keys here only when you +# want to enable the corresponding feature. +# +# Run `npx @agentmemory/agentmemory init` to copy this file into place +# automatically. Run `npx @agentmemory/agentmemory doctor` to verify that +# the daemon reads the env you expect. +# +# Defaults shown in comments. Listed in priority order — the first key +# present wins on the LLM detection path (see src/config.ts::detectProvider). + +# ----------------------------------------------------------------------------- +# 1. LLM provider — pick ONE +# ----------------------------------------------------------------------------- +# +# Without a provider key, agentmemory runs in noop mode: observations are +# indexed via zero-LLM synthetic compression, hybrid search still works, +# but LLM-backed summarisation / reflection / consolidation are disabled. +# The detection order is OPENAI_API_KEY → MINIMAX_API_KEY → ANTHROPIC_API_KEY +# → GEMINI_API_KEY → OPENROUTER_API_KEY → noop. + +# OPENAI_API_KEY=sk-... # Used for OpenAI-compatible embeddings today. PR #307 will extend this to chat completions (DeepSeek, SiliconFlow, vLLM, LM Studio, Ollama via `/v1`). +# OPENAI_BASE_URL=https://api.openai.com # Override for OpenAI-compatible providers + +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_MODEL=claude-sonnet-4-20250514 # Default Anthropic model +# ANTHROPIC_BASE_URL=https://api.anthropic.com # Override for Anthropic-compatible proxies / Azure AI Foundry + +# GEMINI_API_KEY=... # Either env name works; GEMINI_API_KEY takes precedence +# GOOGLE_API_KEY=... # Alias for GEMINI_API_KEY when set alone (emits a one-time stderr hint) +# GEMINI_MODEL=gemini-2.5-flash # Default Gemini model (auto-detected GA model) + +# OPENROUTER_API_KEY=sk-or-... +# OPENROUTER_MODEL=anthropic/claude-sonnet-4-20250514 + +# MINIMAX_API_KEY=... +# MINIMAX_MODEL=MiniMax-M2.7 + +# MAX_TOKENS=4096 # Cap LLM completion tokens for compression / summarise calls + +# Outbound LLM / embedding timeout — shared across every raw-fetch provider +# (Gemini, OpenRouter, MiniMax, OpenAI LLM, and OpenAI/Cohere/Voyage/OpenRouter +# embedding). The OpenAI LLM path also honours the OpenAI-scoped +# OPENAI_TIMEOUT_MS alias for back-compat with v0.9.17 (precedence). +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s) + +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk +# child sessions). Off by default — the agent-sdk fallback can trigger +# Stop-hook recursion (#149 follow-up) when invoked from inside Claude Code. +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# FALLBACK_PROVIDERS=anthropic,gemini # Comma-separated chain tried after the primary provider returns an error (e.g. rate limit) + +# ----------------------------------------------------------------------------- +# 2. Embedding provider — auto-detected, override via EMBEDDING_PROVIDER +# ----------------------------------------------------------------------------- +# +# Without an embedding key, agentmemory runs in BM25-only mode for hybrid +# search. Detection order: EMBEDDING_PROVIDER override → GEMINI_API_KEY → +# OPENAI_API_KEY → VOYAGE_API_KEY → COHERE_API_KEY → OPENROUTER_API_KEY → +# local (Xenova/all-MiniLM-L6-v2, 384-dim). + +# EMBEDDING_PROVIDER=local # local | openai | voyage | cohere | gemini | openrouter + +# VOYAGE_API_KEY=pa-... # Optimised for code embeddings + +# COHERE_API_KEY=... # General-purpose embeddings + +# Reuses OPENAI_API_KEY / OPENAI_BASE_URL above when EMBEDDING_PROVIDER=openai. +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small # Embedding model when EMBEDDING_PROVIDER=openai +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# OPENROUTER_EMBEDDING_MODEL=openai/text-embedding-3-small # When EMBEDDING_PROVIDER=openrouter + +# ----------------------------------------------------------------------------- +# 3. Auth & security +# ----------------------------------------------------------------------------- +# +# Bearer-token auth for the REST API + viewer + all integration plugins. +# Without a secret, REST endpoints are open on loopback. Set this when +# you expose the daemon beyond loopback or run behind a reverse proxy. + +# AGENTMEMORY_SECRET=your-secret-here + +# ----------------------------------------------------------------------------- +# 4. Search tuning +# ----------------------------------------------------------------------------- + +# BM25_WEIGHT=0.4 # Hybrid search weight for BM25 leg +# VECTOR_WEIGHT=0.6 # Hybrid search weight for vector leg +# AGENTMEMORY_GRAPH_WEIGHT=0.2 # Graph traversal bonus on smart-search ranking +# TOKEN_BUDGET=2000 # Max tokens injected via mem::context per session +# MAX_OBS_PER_SESSION=500 # Per-session observation cap before consolidation kicks in +# SUMMARIZE_CHUNK_SIZE=400 # When mem::summarize sees a session larger than this, it chunks observations and map-reduces (chunk-summarize → reduce-merge) to stay within the LLM's context window. Default 400 ≈ 50k tokens per chunk at ~110 tok/obs. Native sessions are capped by MAX_OBS_PER_SESSION; chunking primarily matters for bulk-imported jsonl sessions, which bypass that cap. +# SUMMARIZE_CHUNK_CONCURRENCY=6 # Parallel chunk LLM calls during chunked summarize. Default 6 fits ~100-chunk sessions under iii's 180s function-invocation timeout at typical ~8s/call. High-throughput providers (Novita, DeepInfra, DeepSeek) commonly allow 100+ concurrent — bump this for very large imported sessions. + +# ----------------------------------------------------------------------------- +# 5. Behaviour flags +# ----------------------------------------------------------------------------- + +# AGENTMEMORY_AUTO_COMPRESS=true # Run LLM compression on every observation batch (requires a provider key). Default off — synthetic compression handles most cases. +# AGENTMEMORY_INJECT_CONTEXT=true # Inject recalled memories back into agent prompts (#143). Default off — hooks capture observations but do not modify conversation. +# CONSOLIDATION_ENABLED=true # Run the 4-tier consolidation pipeline (memories → semantic → procedural). Default off — opt in once you've measured the LLM cost. +# CONSOLIDATION_DECAY_DAYS=30 # Age (days) after which non-reinforced memories decay during consolidation +# GRAPH_EXTRACTION_ENABLED=true # Extract concept-graph edges on remember; powers the graph-traversal recall path +# GRAPH_EXTRACTION_BATCH_SIZE=8 # Memories per graph-extraction batch +# AGENTMEMORY_REFLECT=true # Periodically auto-synthesize lessons from memories +# AGENTMEMORY_DROP_STALE_INDEX=true # Drop on-disk BM25 / vector index on startup if dim guard fires (#248). Recovery toggle for stuck-state debugging. +# AGENTMEMORY_IMAGE_EMBEDDINGS=true # Enable image embeddings when an image provider is present (experimental). + +# ----------------------------------------------------------------------------- +# 6. CLI / runtime knobs +# ----------------------------------------------------------------------------- + +# AGENTMEMORY_TOOLS=all # core (7 tools, default) | all (51 tools) — surface exposed to MCP clients +# AGENTMEMORY_SLOTS=memory # Comma-separated plugin slot names the CLI should claim +# AGENTMEMORY_DEBUG=1 # Trace MCP shim probe + standalone fallback decisions to stderr +# AGENTMEMORY_FORCE_PROXY=1 # Skip the MCP shim livez probe and trust AGENTMEMORY_URL (for sandboxed MCP clients that can't reach localhost) +# AGENTMEMORY_PROBE_TIMEOUT_MS=2000 # MCP shim livez probe timeout +# AGENTMEMORY_URL=http://localhost:3111 # REST base URL — honored by status, doctor, MCP shim +# AGENTMEMORY_VIEWER_URL=http://localhost:3113 # Override the viewer URL printed by `agentmemory status` +# AGENTMEMORY_EXPORT_ROOT=~/agentmemory-backup # Default destination for `agentmemory export` + +# STANDALONE_MCP=1 # MCP shim only — bypass the worker and run @agentmemory/mcp in-process +# STANDALONE_PERSIST_PATH=~/.agentmemory/local.db # Path used by the standalone MCP shim's local fallback store + +# Snapshot exporter — periodic snapshots of state_store + stream_store. +# SNAPSHOT_ENABLED=true +# SNAPSHOT_DIR=~/.agentmemory/snapshots +# SNAPSHOT_INTERVAL=3600 # Seconds between snapshots + +# Team sharing — when set, memories are scoped to (TEAM_ID, USER_ID) tuples. +# TEAM_MODE=shared +# TEAM_ID=acme +# USER_ID=rohit + +# ----------------------------------------------------------------------------- +# 7. Ports +# ----------------------------------------------------------------------------- + +# III_REST_PORT=3111 # REST API port (also affects viewer at +2) +# III_STREAMS_PORT=3112 # Streams API port +# III_ENGINE_URL=ws://localhost:49134 # iii-engine WebSocket URL (used by the worker) + +# ----------------------------------------------------------------------------- +# 8. iii engine pin +# ----------------------------------------------------------------------------- +# +# agentmemory currently pins iii-engine to v0.11.2 — v0.11.6 introduces a +# new sandbox-everything-via-`iii worker add` model that agentmemory +# hasn't been refactored for yet. Override with AGENTMEMORY_III_VERSION +# only after migrating to the sandbox model manually. + +# AGENTMEMORY_III_VERSION=0.11.2 + +# ----------------------------------------------------------------------------- +# 9. Claude Code bridge (opt-in) +# ----------------------------------------------------------------------------- + +# CLAUDE_MEMORY_BRIDGE=true # Mirror compressed memories into Claude Code's CLAUDE.md +# CLAUDE_PROJECT_PATH=/path/to/your/project # Required when CLAUDE_MEMORY_BRIDGE=true +# CLAUDE_MEMORY_LINE_BUDGET=200 # Lines of memory CLAUDE.md should hold + +# ----------------------------------------------------------------------------- +# 10. Obsidian export (opt-in) +# ----------------------------------------------------------------------------- + +# OBSIDIAN_AUTO_EXPORT=true # Auto-export memories to an Obsidian vault on every consolidation diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..a2f5e0c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [rohitg00] diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..e0a74e9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,110 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 10 + labels: + - dependencies + - npm + commit-message: + prefix: deps + include: scope + groups: + minor-and-patch: + update-types: + - minor + - patch + + - package-ecosystem: npm + directory: /website + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 10 + labels: + - dependencies + - npm + - website + commit-message: + prefix: deps(website) + include: scope + groups: + minor-and-patch: + update-types: + - minor + - patch + + - package-ecosystem: npm + directory: /integrations/openclaw + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 5 + labels: + - dependencies + - npm + - integrations + commit-message: + prefix: deps(openclaw) + include: scope + + - package-ecosystem: npm + directory: /integrations/pi + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 5 + labels: + - dependencies + - npm + - integrations + commit-message: + prefix: deps(pi) + include: scope + + - package-ecosystem: npm + directory: /integrations/filesystem-watcher + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 5 + labels: + - dependencies + - npm + - integrations + commit-message: + prefix: deps(fs-watcher) + include: scope + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + time: "06:00" + timezone: Etc/UTC + open-pull-requests-limit: 5 + labels: + - dependencies + - github-actions + commit-message: + prefix: ci(deps) + include: scope + groups: + minor-and-patch: + update-types: + - minor + - patch diff --git a/.github/security-advisories/01-viewer-xss.md b/.github/security-advisories/01-viewer-xss.md new file mode 100644 index 0000000..046c286 --- /dev/null +++ b/.github/security-advisories/01-viewer-xss.md @@ -0,0 +1,46 @@ +# GHSA Draft: Stored XSS in agentmemory real-time viewer + +**Severity:** Critical · **CVSS 3.1:** 9.6 (`AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L`) +**CWE:** [CWE-79 — Improper Neutralization of Input During Web Page Generation](https://cwe.mitre.org/data/definitions/79.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +agentmemory's real-time viewer (default port 3113) rendered user-controlled data — tool outputs, file paths, memory titles, observation content — into HTML using inline `onclick=` event handlers. The viewer's Content Security Policy simultaneously allowed `script-src 'unsafe-inline'`, meaning injected JavaScript would execute in the reader's browser context. + +## Impact + +Any data captured by agentmemory hooks — which includes tool output from Claude Code, Cursor, or any other agent — becomes an XSS vector when the user opens the viewer. An attacker with the ability to influence any captured observation (e.g., by sending a crafted file contents to be read by an agent, or by planting a malicious commit message in a repository) could: + +- Exfiltrate the entire memory store via authenticated requests from the browser +- Read `AGENTMEMORY_SECRET` if the viewer was configured with auth +- Make requests to arbitrary endpoints on behalf of the viewer user +- Modify the DOM to mislead the developer +- Pivot to other localhost services on the developer's machine + +The viewer runs on localhost by default but is **reachable from the browser**, so standard same-origin protections don't help. + +## Patches + +Fixed in **0.8.2**: + +- All inline `on*=` handlers removed from `src/viewer/index.html` +- Replaced with delegated `data-action` event handling +- CSP switched to a **per-response script nonce** (`script-src 'nonce-'`) +- Added `script-src-attr 'none'` to block any inline handler attributes even if injected +- Viewer HTML now rendered through `src/viewer/document.ts` which generates a fresh nonce per request + +## Workarounds + +**None.** Users on affected versions should upgrade to 0.8.2 immediately. Do not open `http://localhost:3113` in a browser on affected versions if you suspect any of your captured observations may contain attacker-controlled content. + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) +- Reporter: @eng-pf + +## Credit + +@eng-pf submitted PR #108 with fixes for this and 5 other vulnerabilities. diff --git a/.github/security-advisories/02-curl-sh-rce.md b/.github/security-advisories/02-curl-sh-rce.md new file mode 100644 index 0000000..f32a3e8 --- /dev/null +++ b/.github/security-advisories/02-curl-sh-rce.md @@ -0,0 +1,57 @@ +# GHSA Draft: Remote shell script execution in agentmemory CLI startup + +**Severity:** Critical · **CVSS 3.1:** 9.8 (`AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`) +**CWE:** [CWE-494 — Download of Code Without Integrity Check](https://cwe.mitre.org/data/definitions/494.html), [CWE-829 — Inclusion of Functionality from Untrusted Control Sphere](https://cwe.mitre.org/data/definitions/829.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +The agentmemory CLI (`npx @agentmemory/agentmemory`) auto-installed the iii-engine binary by piping a remote shell script into `sh`: + +```ts +execSync("curl -fsSL https://install.iii.dev/iii/main/install.sh | sh") +``` + +This happened automatically on first run if `iii` was not found in `$PATH`. The script was fetched over HTTPS and executed with the permissions of the user running `npx agentmemory`. No checksum verification, no pinned version, no signature check. + +## Impact + +If `install.iii.dev` were ever compromised — via DNS hijack, domain takeover, expired certificate + MITM on an untrusted network, BGP attack, or any other supply chain attack — **every new agentmemory user would execute attacker-controlled shell code** as their own user. + +This is the canonical "curl | sh" supply chain anti-pattern. It affected: +- Developers running `npx @agentmemory/agentmemory` for the first time +- CI/CD pipelines that installed agentmemory fresh +- Docker builds that installed agentmemory as part of an image + +## Patches + +Fixed in **0.8.2**: + +- Removed `execSync` call entirely from `src/cli.ts` +- CLI now uses an existing local `iii` binary if present in `$PATH` +- Falls back to Docker Compose (`docker compose up -d`) if Docker is available +- Shows manual install instructions if neither iii nor Docker is found: + - `cargo install iii-engine` + - `docker pull iiidev/iii:latest` + - Docs link: https://iii.dev/docs + +## Workarounds + +Users on affected versions should **install iii-engine manually** and run `agentmemory --no-engine` until upgraded: + +```bash +cargo install iii-engine +npx @agentmemory/agentmemory@0.8.1 --no-engine +``` + +Then upgrade to 0.8.2 at the earliest opportunity. + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) + +## Credit + +@eng-pf diff --git a/.github/security-advisories/03-default-bind-0000.md b/.github/security-advisories/03-default-bind-0000.md new file mode 100644 index 0000000..f244e5d --- /dev/null +++ b/.github/security-advisories/03-default-bind-0000.md @@ -0,0 +1,62 @@ +# GHSA Draft: agentmemory REST and stream services bound to 0.0.0.0 by default + +**Severity:** High · **CVSS 3.1:** 8.1 (`AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L`) +**CWE:** [CWE-668 — Exposure of Resource to Wrong Sphere](https://cwe.mitre.org/data/definitions/668.html), [CWE-306 — Missing Authentication for Critical Function](https://cwe.mitre.org/data/definitions/306.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +The default `iii-config.yaml` bound both the REST API (port 3111) and the streams server (port 3112) to `0.0.0.0`, exposing them on every network interface the host could reach. Combined with the fact that `AGENTMEMORY_SECRET` is **unset by default**, this meant any device on the same local network as a running agentmemory instance could read the entire memory store without authentication. + +Affected endpoints included: +- `GET /agentmemory/export` — full dump of every captured observation, memory, session, and audit entry +- `GET /agentmemory/sessions` — session list +- `POST /agentmemory/smart-search` — arbitrary search over all captured content +- `POST /agentmemory/observe` — ability to **inject** fake observations +- `POST /agentmemory/remember` — ability to plant arbitrary memories +- All 109 other REST endpoints + +## Impact + +A developer running agentmemory on a laptop in a coffee shop, office, or conference WiFi effectively published their entire memory store — including captured API keys, file contents, prompts, decisions, and project context — to anyone on the same network. + +Attackers on the same network could: + +1. **Exfiltrate secrets.** `curl http://:3111/agentmemory/export` downloads everything. Depending on the incompleteness of the secret redaction (see advisory #06), this could include API keys and tokens. +2. **Inject memories.** An attacker could `POST /agentmemory/observe` or `/remember` with fake observations, poisoning the memory store so future sessions retrieve attacker-controlled context. +3. **Pivot to other services.** The mesh sync endpoint (before the auth fix in advisory #04) accepted peer data from any source. + +## Patches + +Fixed in **0.8.2**: + +- `iii-config.yaml` now binds REST, streams to `127.0.0.1` +- Viewer server already bound to `127.0.0.1` +- New `iii-config.docker.yaml` for Docker deployments: containers bind to `0.0.0.0` internally (required for Docker networking) but host port mapping is restricted to `127.0.0.1:port` in `docker-compose.yml` +- README and API section documentation updated to note 127.0.0.1 as the default + +## Workarounds + +Users on affected versions should manually edit their `iii-config.yaml` and change the REST and streams `host` values to `127.0.0.1`: + +```yaml +modules: + - class: modules::api::RestApiModule + config: + host: 127.0.0.1 # was 0.0.0.0 + - class: modules::stream::StreamModule + config: + host: 127.0.0.1 # was 0.0.0.0 +``` + +And set `AGENTMEMORY_SECRET` to a strong random value to protect endpoints even if network exposure is needed. + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) + +## Credit + +@eng-pf diff --git a/.github/security-advisories/04-mesh-unauth.md b/.github/security-advisories/04-mesh-unauth.md new file mode 100644 index 0000000..d7ffe2e --- /dev/null +++ b/.github/security-advisories/04-mesh-unauth.md @@ -0,0 +1,47 @@ +# GHSA Draft: Unauthenticated mesh sync in agentmemory + +**Severity:** High · **CVSS 3.1:** 7.4 (`AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N`) +**CWE:** [CWE-306 — Missing Authentication for Critical Function](https://cwe.mitre.org/data/definitions/306.html), [CWE-862 — Missing Authorization](https://cwe.mitre.org/data/definitions/862.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +agentmemory's mesh federation feature (P2P sync between instances) accepted push/pull requests on its `/agentmemory/mesh/*` endpoints without requiring authentication. The mesh sync function also did not send any `Authorization` header when calling peer instances, meaning the federation protocol was entirely unauthenticated. + +## Impact + +Any attacker who could reach a mesh-enabled agentmemory instance could: + +1. **Push fake memories** via `POST /agentmemory/mesh/receive` — inject attacker-controlled observations, actions, semantic memories, and relations into the target's memory store. This poisons future retrievals and could be used to manipulate what the target's AI agent sees. +2. **Pull the entire memory store** via `GET /agentmemory/mesh/export` — download all memories, actions, and graph data marked as mesh-shareable. +3. **Chain with advisory #03** — combined with the default `0.0.0.0` binding, mesh endpoints were reachable from any device on the local network without any authentication. + +Mesh is opt-in (requires an explicit peer registration), so this affected only users who had enabled federation. But those users had no authentication at all. + +## Patches + +Fixed in **0.8.2**: + +- All 5 mesh REST endpoints (`mesh-register`, `mesh-list`, `mesh-sync`, `mesh-receive`, `mesh-export`) now return 503 with `"mesh requires AGENTMEMORY_SECRET"` if the secret is not configured +- The `mem::mesh-sync` function now accepts a `meshAuthToken` parameter and **refuses to sync at all** if the token is missing +- Outgoing push/pull requests include `Authorization: Bearer ` headers +- Server-side, all mesh endpoints check bearer auth via the existing `checkAuth` helper + +## Workarounds + +Users on affected versions who have mesh federation enabled should: +1. Set `AGENTMEMORY_SECRET` to a strong random value on **both** peers +2. Restart the server +3. Upgrade to 0.8.2 at the earliest opportunity + +Users who have **not** enabled mesh federation are not affected by this specific issue, but should still upgrade for the other 5 fixes. + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) + +## Credit + +@eng-pf diff --git a/.github/security-advisories/05-obsidian-export-traversal.md b/.github/security-advisories/05-obsidian-export-traversal.md new file mode 100644 index 0000000..13c4b8e --- /dev/null +++ b/.github/security-advisories/05-obsidian-export-traversal.md @@ -0,0 +1,61 @@ +# GHSA Draft: Arbitrary filesystem write via Obsidian export in agentmemory + +**Severity:** Medium · **CVSS 3.1:** 6.5 (`AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L`) +**CWE:** [CWE-22 — Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')](https://cwe.mitre.org/data/definitions/22.html), [CWE-73 — External Control of File Name or Path](https://cwe.mitre.org/data/definitions/73.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +The `POST /agentmemory/obsidian/export` endpoint accepted a `vaultDir` parameter and passed it directly to `mkdir` and `writeFile` calls without any containment check. A caller could set `vaultDir` to any absolute path on the filesystem and agentmemory would create directories and write Markdown files there with the permissions of the process running the server. + +```bash +# Example exploit payload (affected versions only) +curl -X POST http://localhost:3111/agentmemory/obsidian/export \ + -H "Content-Type: application/json" \ + -d '{"vaultDir": "/etc/cron.d"}' +``` + +The content written would be agentmemory's exported memories in Markdown format, but an attacker could craft specific memory content beforehand to plant arbitrary files. + +## Impact + +When chained with advisory #03 (default `0.0.0.0` binding) or advisory #04 (unauthenticated mesh), an attacker on the local network could write arbitrary files to any filesystem location the agentmemory process had write access to. + +Possible exploitation paths: +- Write to `~/.ssh/authorized_keys` — SSH key injection +- Write to `/etc/cron.d/*` — cron job injection (if running as root) +- Write to `~/.bashrc` or shell rc files — code execution on next shell +- Overwrite any file the process could write to + +## Patches + +Fixed in **0.8.2**: + +- New `AGENTMEMORY_EXPORT_ROOT` environment variable (default: `~/.agentmemory`) +- `vaultDir` now goes through `resolveVaultDir()` in `src/functions/obsidian-export.ts`: + - Resolves the path with `path.resolve` + - Checks `resolved === root || resolved.startsWith(root + path.sep)` + - Returns `null` if the check fails, and the endpoint returns `{ success: false, error: "vaultDir must be inside AGENTMEMORY_EXPORT_ROOT" }` +- Default export is confined to `~/.agentmemory/vault` +- Tests added in `test/obsidian-export.test.ts` for both the custom-but-valid case and the rejection case + +## Known limitations + +`resolveVaultDir()` performs lexical containment only — it does not call `fs.realpathSync` / `fs.lstatSync`. A pre-existing symlink under `AGENTMEMORY_EXPORT_ROOT` that points outside the root can still be written through. Users who allow untrusted processes to create files inside `AGENTMEMORY_EXPORT_ROOT` should additionally run agentmemory inside a sandbox that forbids symlink creation, or file a follow-up issue requesting symlink-aware containment. + +## Workarounds + +Users on affected versions should: +1. **Disable the Obsidian export endpoint** by setting `OBSIDIAN_AUTO_EXPORT=false` (and avoid calling `/agentmemory/obsidian/export` manually) +2. Set `AGENTMEMORY_SECRET` so the endpoint requires bearer auth +3. Upgrade to 0.8.2 + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) + +## Credit + +@eng-pf diff --git a/.github/security-advisories/06-privacy-redaction-incomplete.md b/.github/security-advisories/06-privacy-redaction-incomplete.md new file mode 100644 index 0000000..50c35d4 --- /dev/null +++ b/.github/security-advisories/06-privacy-redaction-incomplete.md @@ -0,0 +1,60 @@ +# GHSA Draft: Incomplete secret redaction in agentmemory privacy filter + +**Severity:** Medium · **CVSS 3.1:** 6.2 (`AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N`) +**CWE:** [CWE-532 — Insertion of Sensitive Information into Log File](https://cwe.mitre.org/data/definitions/532.html), [CWE-200 — Exposure of Sensitive Information to an Unauthorized Actor](https://cwe.mitre.org/data/definitions/200.html) +**Affected versions:** `< 0.8.2` +**Patched version:** `0.8.2` + +## Summary + +agentmemory's privacy filter (`src/functions/privacy.ts`) is supposed to strip API keys, secrets, and bearer tokens from captured observations before they are stored. The filter used regex patterns to detect common token formats. Three modern token formats were missing from the patterns: + +1. **Bearer tokens** — `Authorization: Bearer ` headers were not matched, so any captured HTTP request or response that included an Authorization header flowed into the memory store verbatim. +2. **OpenAI project keys** — `sk-proj-*` (the dominant OpenAI API key format since mid-2024) was not matched. The existing `sk-[A-Za-z0-9]{20,}` pattern only caught the legacy format. +3. **GitHub fine-grained service/user tokens** — `ghs_*` and `ghu_*` were not matched. The existing `ghp_[A-Za-z0-9]{36}` pattern only caught personal access tokens. + +## Impact + +agentmemory's README explicitly claimed "Privacy first — API keys, secrets, and `` tags are stripped before anything is stored." That claim was **false** for three common token formats. + +Users relying on the privacy filter to protect their captured observations had a false sense of security. Tokens matching these three patterns would: + +1. Be captured by `PostToolUse` hooks alongside the rest of the tool output +2. Pass through `stripPrivateData()` unmodified +3. Be LLM-compressed and stored in the memory KV +4. Be exposed to any attacker who could reach the `/agentmemory/export` or `/agentmemory/smart-search` endpoints +5. Be included in Obsidian exports, mesh syncs, and CLAUDE.md bridge writes + +When chained with advisory #03 (default `0.0.0.0` binding), this meant network-adjacent attackers could retrieve captured Bearer tokens, OpenAI keys, and GitHub service tokens from the memory store. + +## Patches + +Fixed in **0.8.2**: + +New regex patterns added to `SECRET_PATTERN_SOURCES` in `src/functions/privacy.ts`: + +```ts +/Bearer\s+[A-Za-z0-9._\-+/=]{20,}/gi, +/sk-proj-[A-Za-z0-9\-_]{20,}/g, +/(?:sk|pk|rk|ak)-[A-Za-z0-9][A-Za-z0-9\-_]{19,}/g, +/gh[pus]_[A-Za-z0-9]{36,}/g, +``` + +Three new unit tests in `test/privacy.test.ts` verify each format is now stripped. + +## Workarounds + +Users on affected versions should: +1. Avoid having agents read files or API responses containing these token formats +2. Use the `` tag around any block containing secrets — that filter was not affected +3. Set `AGENTMEMORY_SECRET` to restrict API access +4. Upgrade to 0.8.2 + +## References + +- Fix PR: [#108](https://github.com/rohitg00/agentmemory/pull/108) +- Commit: [`cbaaf4f`](https://github.com/rohitg00/agentmemory/commit/cbaaf4f) + +## Credit + +@eng-pf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ed53c6d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,70 @@ +name: CI + +# `paths-ignore` keeps doc-only / website / README / CHANGELOG churn from +# burning runner minutes. Source / config / workflow changes always run. +# `workflow_dispatch` gives a manual re-run button for flake debugging. +on: + push: + branches: [main] + paths-ignore: + - "README.md" + - "CHANGELOG.md" + - "AGENTS.md" + - "ROADMAP.md" + - "website/**" + - "docs/**" + - "assets/**" + - "deploy/**/README.md" + - "**/*.md" + - "**/*.mdx" + pull_request: + branches: [main] + paths-ignore: + - "README.md" + - "CHANGELOG.md" + - "AGENTS.md" + - "ROADMAP.md" + - "website/**" + - "docs/**" + - "assets/**" + - "deploy/**/README.md" + - "**/*.md" + - "**/*.mdx" + workflow_dispatch: + +# Cancel in-flight PR runs when a force-push lands. Keep push runs to +# protect against partial state on main. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + # Don't bail the whole matrix on one cell's failure — we want to + # see whether the same failure reproduces across OSes (e.g. + # whether a flake is platform-specific or universal). + fail-fast: false + matrix: + # Windows held back: test/obsidian-export.test.ts has hardcoded + # POSIX paths (`/tmp/...`) that fail on D:\ drive runners. + # src/functions/obsidian-export.ts needs os.tmpdir() + path.join + # rework before Windows can be added back. Tracked as follow-up. + os: [ubuntu-latest, macos-latest] + node-version: [20, 22] + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + # Two-step install: generate a lockfile in-runner with + # --package-lock-only, then install from it with `npm ci`. + # Lockfiles are gitignored at the repo level. + - run: npm install --package-lock-only --legacy-peer-deps --no-audit --no-fund + - run: npm ci --legacy-peer-deps --no-audit --no-fund + - run: npm run build + - run: npm run skills:check + - run: npm test diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..0000339 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,124 @@ +name: Publish to npm + +on: + release: + types: [published] + workflow_dispatch: + inputs: + packages: + description: "Packages to publish (comma-separated: agentmemory,mcp,fs-watcher)" + required: false + default: "agentmemory,mcp,fs-watcher" + +# Workflow-level permissions stay minimal — only `contents: read` +# is required to check out the repo. `id-token: write` is granted on +# the publish job for npm's --provenance Sigstore OIDC mint. +permissions: + contents: read + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v6 + with: + # Don't persist the GITHUB_TOKEN to .git/config — the + # publish steps don't push back to the repo, so the token + # only needs to live in memory for this checkout. + persist-credentials: false + + - uses: actions/setup-node@v6 + with: + node-version: 22 + registry-url: https://registry.npmjs.org + + # Two-step install: generate a lockfile in-runner with + # --package-lock-only, then install from it with `npm ci`. Gives a + # single deterministic dep graph across build / test / publish + # within one job — important because publish uses `--provenance`. + # Lockfiles are gitignored at the repo level. + - run: npm install --package-lock-only --legacy-peer-deps --no-audit --no-fund + - run: npm ci --legacy-peer-deps --no-audit --no-fund + - run: npm run build + - run: npm test + + - name: Publish @agentmemory/agentmemory + run: | + if npm view "@agentmemory/agentmemory@$(node -p "require('./package.json').version")" version >/dev/null 2>&1; then + echo "Version already published, skipping" + else + npm publish --provenance --access public + fi + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Wait for npm registry propagation + run: | + VERSION=$(node -p "require('./package.json').version") + for i in $(seq 1 24); do + if npm view "@agentmemory/agentmemory@$VERSION" version >/dev/null 2>&1; then + echo "Registry propagated after ${i} attempt(s)" + exit 0 + fi + echo "Attempt $i: not yet available, sleeping 5s..." + sleep 5 + done + echo "ERROR: registry never propagated after 2 minutes" >&2 + exit 1 + + - name: Publish @agentmemory/mcp shim + working-directory: packages/mcp + run: | + SHIM_VERSION=$(node -p "require('./package.json').version") + if npm view "@agentmemory/mcp@$SHIM_VERSION" version >/dev/null 2>&1; then + echo "Shim version already published, skipping" + else + npm publish --provenance --access public + fi + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Wait for @agentmemory/mcp registry propagation + working-directory: packages/mcp + run: | + SHIM_VERSION=$(node -p "require('./package.json').version") + for i in $(seq 1 24); do + if npm view "@agentmemory/mcp@$SHIM_VERSION" version >/dev/null 2>&1; then + echo "Shim propagated after ${i} attempt(s)" + exit 0 + fi + echo "Attempt $i: not yet available, sleeping 5s..." + sleep 5 + done + echo "ERROR: shim never propagated after 2 minutes" >&2 + exit 1 + + - name: Publish @agentmemory/fs-watcher connector + working-directory: integrations/filesystem-watcher + run: | + FSW_VERSION=$(node -p "require('./package.json').version") + if npm view "@agentmemory/fs-watcher@$FSW_VERSION" version >/dev/null 2>&1; then + echo "fs-watcher version already published, skipping" + else + npm publish --provenance --access public + fi + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Wait for @agentmemory/fs-watcher registry propagation + working-directory: integrations/filesystem-watcher + run: | + FSW_VERSION=$(node -p "require('./package.json').version") + for i in $(seq 1 24); do + if npm view "@agentmemory/fs-watcher@$FSW_VERSION" version >/dev/null 2>&1; then + echo "fs-watcher propagated after ${i} attempt(s)" + exit 0 + fi + echo "Attempt $i: not yet available, sleeping 5s..." + sleep 5 + done + echo "ERROR: fs-watcher never propagated after 2 minutes" >&2 + exit 1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba6af99 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +node_modules/ +dist/ +*.tsbuildinfo + +.env +.env.* +!.env.example + +*.log +.DS_Store +.claude/ + +plugin/scripts/*.map +plugin/scripts/*.d.mts +data/ +!eval/data/ +!eval/data/** +data-*/ +agentmemory-debug/ +.gstack/ + +# Lock files — never commit (see feedback_no_lockfiles memory) +package-lock.json +pnpm-lock.yaml +yarn.lock +integrations/hermes/__pycache__/ + +# Eval reports (transient; published scorecards live in docs/benchmarks/) +eval/reports/ +# LongMemEval download is 278MB; fetched on demand +eval/data/longmemeval/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..873ef10 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,124 @@ +# agentmemory — Agent Instructions + +## Architecture + +agentmemory is a persistent memory system for AI coding agents, built on iii-engine's three primitives (Worker/Function/Trigger). Everything goes through `registerFunction`/`registerTrigger`/`sdk.trigger()` — never bypass iii-engine with standalone SQLite or in-process alternatives. + +- **Engine**: iii-sdk (WebSocket to iii-engine on port 49134) +- **State**: File-based SQLite via iii-engine's StateModule (`./data/state_store.db`) +- **Build**: TypeScript → ESM via tsdown, output to `dist/` +- **Test**: vitest (`npm test` excludes integration tests) + +## Consistency Rules + +**When adding or removing MCP tools, you MUST update ALL of the following:** +1. `src/mcp/tools-registry.ts` — tool definition + `getAllTools()` array +2. `src/mcp/server.ts` — handler case in the `mcp::tools::call` switch +3. `src/triggers/api.ts` — REST endpoint registration +4. `src/index.ts` — function registration + endpoint count in the log line +5. `test/mcp-standalone.test.ts` — tool count assertion +6. `README.md` — tool counts (search for "MCP tools") +7. `plugin/.claude-plugin/plugin.json` — tool count in description +8. `plugin/plugin.json` and `plugin/.mcp.copilot.json` (when present) — tool count or MCP exposure + +**When adding REST endpoints, you MUST update:** +1. `src/triggers/api.ts` — endpoint registration +2. `src/index.ts` — endpoint count in the log line +3. `README.md` — endpoint count (search for "REST endpoints" and "endpoints on port") + +**When bumping version, you MUST update ALL of the following:** +1. `package.json` — version field +2. `src/version.ts` — VERSION constant and type union +3. `src/types.ts` — ExportData version union +4. `src/functions/export-import.ts` — supportedVersions set +5. `test/export-import.test.ts` — version assertion +6. `plugin/.claude-plugin/plugin.json` — version field +7. `plugin/plugin.json` (when present) — version field + +**When adding new KV scopes:** +1. `src/state/schema.ts` — add to the KV object +2. `src/types.ts` — add the corresponding interface + +**When adding new audit operations:** +1. `src/types.ts` — add to AuditEntry.operation union type + +## Code Patterns + +### Function Registration +```typescript +sdk.registerFunction( + "mem::your-function", + async (data: { ... }) => { + // validate inputs + // do work via kv.get/kv.set/kv.list + // record audit via recordAudit() + return { success: true, ... }; + }, +); +``` + +### REST Endpoint Registration +```typescript +sdk.registerFunction("api::your-endpoint", async (req: ApiRequest) => { + const denied = checkAuth(req, secret); + if (denied) return denied; + const body = req.body as Record; + // validate + whitelist fields (never pass raw body to sdk.trigger) + const result = await sdk.trigger({ + function_id: "mem::your-function", + payload: { ... }, + }); + return { status_code: 200, body: result }; +}); +sdk.registerTrigger({ + type: "http", + function_id: "api::your-endpoint", + config: { api_path: "/agentmemory/your-path", http_method: "POST" }, +}); +``` + +### MCP Tool Handler +```typescript +case "memory_your_tool": { + // validate args with typeof checks + // parse CSV args: args.field.split(",").map(t => t.trim()).filter(Boolean) + const result = await sdk.trigger({ + function_id: "mem::your-function", + payload: { ... }, + }); + return { status_code: 200, body: { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] } }; +} +``` + +### Hook Scripts +Hook scripts in `src/hooks/` are standalone Node.js scripts (no iii-sdk import). They read JSON from stdin, make HTTP calls to the REST API, and exit. There are two patterns depending on whether Claude Code consumes the script's stdout: + +- **Context-injecting hooks** (`pre-tool-use`, `pre-compact`, `session-start`) write recalled context to stdout for Claude Code to inject. These MUST use `try/catch` with `await fetch(..., { signal: AbortSignal.timeout(N) })` — the script has to wait for the response before exiting, and the timeout is the only bound on hang time. +- **Telemetry-only hooks** (`notification`, `post-tool-failure`, `post-tool-use`, `prompt-submit`, `stop`, `session-end`, `subagent-start`, `subagent-stop`, `task-completed`) write nothing to stdout. These MUST use fire-and-forget `fetch(..., { signal: AbortSignal.timeout(N) }).catch(() => {})` paired with `setTimeout(() => process.exit(0), 500).unref()`. The unawaited fetch dispatches the request; the unref'd `setTimeout` force-exits the process after the request has been flushed to the local daemon's socket buffer (~500ms is enough for single-request hooks; use 1500ms for multi-request hooks like `stop` and `session-end` so all fetches have time to start, especially when `AGENTMEMORY_URL` points to a remote daemon). Without the `setTimeout` Node keeps the event loop alive waiting for any in-flight fetch to settle, which means the hook still blocks Claude Code's next-prompt boundary for up to the AbortSignal duration — exactly the bug fire-and-forget is meant to fix. + +## Coding Standards + +- TypeScript, ESM only (`"type": "module"`) +- No code comments explaining WHAT — use clear naming instead +- Use `fingerprintId()` for content-addressable dedup, `generateId()` for unique IDs +- Parallel operations where possible (`Promise.all` for independent kv writes/reads) +- Input validation at system boundaries (MCP handlers, REST endpoints) +- REST endpoints must whitelist fields — never pass raw request body to `sdk.trigger()` +- Use `recordAudit()` for state-changing operations +- Timestamps: capture once with `new Date().toISOString()` and reuse + +## Testing + +- All tests must pass before PR: `npm test` (950+ tests) +- Mock pattern: `vi.mock("iii-sdk")` with mock `sdk.trigger`, `kv.get/set/list` +- Test files go in `test/` with `.test.ts` extension +- Follow existing patterns in `test/crystallize.test.ts` for function tests + +## Current Stats (v0.9.16) + +- 53 MCP tools (8 visible by default, `AGENTMEMORY_TOOLS=all` for all) +- 128 REST endpoints +- 6 MCP resources, 3 MCP prompts +- 12 hooks, 15 skills +- 50+ iii functions +- 950+ tests diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3b5188f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,1119 @@ +# Changelog + +All notable changes to agentmemory will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.9.27] — 2026-06-07 + +Wave release closing several breaking regressions reported against v0.9.26, plus an agent-scope isolation security fix, an iii version-pin audit fix, and a benchmark scorecard correction. No breaking changes; drop-in upgrade. + +### Security + +- **`AGENTMEMORY_AGENT_SCOPE=isolated` not enforced on `mem::search` / `POST /agentmemory/search` / `memory_recall` / `recall_context`** ([#817](https://github.com/rohitg00/agentmemory/issues/817)). PR #654's isolation work covered smart-search, `/memories`, `/observations`, and `/sessions` but missed the BM25-only recall path. An isolated worker booted with `AGENT_ID=B` could read agent A's memories via the standard MCP `memory_recall` tool. `mem::search` now applies the same filter as smart-search (wildcard `agentId: "*"` bypasses, explicit `agentId` pins, isolated mode falls back to env `AGENT_ID`). `recall_context` prompt also filters its kv.list memory feed by active agent. Fail-closed: if isolated mode is on and no agent id resolves from any source, the call throws rather than dropping the filter. + +### Fixed + +- **`/graph/query` and `/graph/stats` timed out with `"Invocation stopped"` on large existing corpora** ([#814](https://github.com/rohitg00/agentmemory/issues/814), [PR #816](https://github.com/rohitg00/agentmemory/pull/816)). The v0.9.25 fix from #753 paginated the response but the unbounded `kv.list` + `kv.list` pair still ran on every call. At 75K+ nodes the response payload exceeded the iii heartbeat budget and the worker was declared dead before the new wall-clock timer could fire. Refactored `mem::graph-extract` to maintain three side-indexes (`graphNameIndex`, `graphEdgeKey`, `graphNodeDegree`) so every extract path is O(1), never O(n). The hot path now reads exclusively from a precomputed top-degree snapshot updated inline on every extract. Same `kv.list` bottleneck was also blocking `mem::graph-extract` on every observation capture, so the fix immediately speeds up the observation pipeline too. +- **All data lost on `agentmemory stop` followed by restart** ([#843](https://github.com/rohitg00/agentmemory/issues/843)). `runStop()` killed the iii engine first, then the worker. The worker's shutdown handler flushes BM25/vector snapshots and audit rows via `indexPersistence.save() -> kv.set() -> state::set`, which all routed through an iii engine that was already dead. Stop order inverted: worker first with a bumped 5s SIGTERM grace (gives a large index a real chance to commit), engine second. The "Memories persisted to disk" message now reflects actual disk state. +- **`mem::graph-snapshot-rebuild` and `mem::graph-reset` heartbeat-crashed on legacy >25K-node corpora** ([#825](https://github.com/rohitg00/agentmemory/issues/825)). Both endpoints called `kv.list` up front. At 75K nodes the response payload blocks the event loop in `JSON.parse` and the iii heartbeat starves before any wall-clock budget timer can fire. `mem::graph-snapshot-rebuild` now refuses pre-flight when no prior snapshot exists, returning `{ legacyCorpus: true }` with operator guidance unless an explicit `force: true` flag is set. `mem::graph-reset` no longer enumerates anything: it writes an empty snapshot stamped with `resetAt` and returns. Legacy rows stay as on-disk orphans but post-reset `mem::graph-extract` calls compare each name-index hit's `createdAt` against `resetAt`, so older rows are treated as not-found and a fresh node is written instead of silently reconnecting to a pre-reset orphan. +- **Multi-instance port collisions on one host** ([#750](https://github.com/rohitg00/agentmemory/issues/750), [PR #815](https://github.com/rohitg00/agentmemory/pull/815)). `--port N` only relocated REST + viewer; streams (3112) and iii engine (49134) stayed hardcoded so a second daemon collided on those WS ports regardless of `--port`. `loadConfig()` now derives streams = REST+1 and engine = REST+46023 (so the canonical 3111 → 3112/49134 default is unchanged, and `--port 3211` → 3212/49234). New `--instance N` shortcut picks a 100-port block: `--instance 1` → 3211/3212/3213/49234. Per-port env overrides (`III_STREAM_PORT`, `III_ENGINE_PORT`, `III_ENGINE_URL`) still win. +- **iii console install pulled latest engine instead of the pinned v0.11.2** (audit). `III_CONSOLE_INSTALL_CMD` ran `curl -fsSL https://install.iii.dev/iii/main/install.sh | sh` with no version pin. A fresh first-run prompt could install a console build that talks a different protocol than the engine agentmemory pins. The install script reads a `VERSION` env var (`engine_version="${VERSION:-}"` in install.sh), so the command now passes `VERSION=${IIPINNED_VERSION}`. Render path is platform-aware too: Windows users get a PowerShell-friendly hint instead of a POSIX command they can't run. Mismatch error text updated from "reinstall the latest binary" to reference the pinned version explicitly. + +### Docs + +- **Corrected coding-agent-life-v1 P@5 numbers in the published scorecard** ([#796](https://github.com/rohitg00/agentmemory/issues/796), [PR #805](https://github.com/rohitg00/agentmemory/pull/805)). The original scorecard reported P@5 = 0.578 / 0.267, generated before [PR #562](https://github.com/rohitg00/agentmemory/pull/562) changed the P@K denominator from `topK.length` to `k`. On the current formula those numbers are mathematically impossible (math ceiling at K=5 on this corpus is 0.240). Re-scored on v0.9.26: hybrid 0.240 / R@5 1.000, grep 0.227 / R@5 0.967. Reframed lift as recall + temporal not aggregate precision; aggregate P@5 saturates on a small / single-gold corpus and can't differentiate top-tier adapters. +- **README refresh** ([PR #807](https://github.com/rohitg00/agentmemory/pull/807)). Stats line bumped to 174 files / 1,390+ tests / 258 functions. Corrected hero P@5 numbers. "New in vX.Y.Z" callout block removed since that pattern went stale every release; latest release notes link points at CHANGELOG.md. +- **`import-jsonl` users warned about Claude Code's `cleanupPeriodDays`.** Default 30-day auto-deletion of `~/.claude/projects/*.jsonl` doesn't affect hook-wired installs (each turn lands in iii state while the session is live), but fresh installs on months-old Claude Code histories silently lost anything older than 30 days. README now flags this with three workarounds: cron the import, raise `cleanupPeriodDays`, or wire hooks. + +### Added + +- **`POST /agentmemory/graph/snapshot-rebuild`** — pays the full enumeration cost once on corpora ≤ 25K nodes, persists a top-degree subgraph + aggregate counts, refuses with `{ success: false, tooLarge: true, totalNodes, ceiling }` above the safe ceiling instead of killing the worker. Strict `force: true` boolean check bypasses the legacy-corpus pre-flight refusal. +- **`POST /agentmemory/graph/reset`** — clean-restart escape hatch for legacy corpora. Enumeration-free: writes empty snapshot with `resetAt` epoch marker. Future extracts treat any pre-`resetAt` row as orphan via `createdAt` comparison. +- **`--instance N` CLI flag** — multi-daemon convenience. Picks a 100-port block off the 3111 base. Max N=50. +- **`GraphSnapshot.topDegrees`** — synchronous degree lookup keyed by nodeId so re-ranking after edge writes runs sync over numbers instead of async kv.get inside the sort comparator. +- **`GraphSnapshot.resetAt`** — ISO timestamp set by `mem::graph-reset`. Drives post-reset orphan detection in extract. +- **`GraphQueryResult.fromSnapshot`** + **`GraphQueryResult.warning`** — response fields the viewer can use to surface "served from cache" or "rebuild needed" banners instead of opaque 500s. + +### Changed + +- **REST endpoint count: 126 → 128**. `POST /agentmemory/graph/snapshot-rebuild` and `POST /agentmemory/graph/reset` added. +- **`mem::graph-stats`** now reads exclusively from the snapshot. Returns `{ ..., fromSnapshot, warning }` envelope when snapshot is absent; never returns a 500. +- **`mem::graph-query` empty-body / nodeType-only path** reads exclusively from the snapshot. `startNodeId` / `query` paths keep the live enumeration behind a 6s budget with snapshot-backed fallback on rejection. +- **`mem::search` over-fetch** triggers when agentId filtering is active (not just project/cwd). Without it, isolated-mode pages were silently underfilled when same-agent matches ranked below cross-agent ones. + +### Known limitations + +- `mem::graph-query` BFS (`startNodeId`) and text-search (`query`) paths still call `kv.list` and degrade past ~25K nodes on fresh corpora ([#828](https://github.com/rohitg00/agentmemory/issues/828)). The hot path stays safe (snapshot-only). A per-node adjacency index is the right next fix; deferred to the structured graph migration milestone ([#309](https://github.com/rohitg00/agentmemory/issues/309)). +- `/agentmemory:forget` skill still calls `memory_governance_delete` which only touches `KV.memories` and never observations ([#833](https://github.com/rohitg00/agentmemory/issues/833)). Skill rewrite + new `memory_forget` MCP tool tracked separately. +- `crypto.randomUUID()` global-only on Node <19 ([#715](https://github.com/rohitg00/agentmemory/issues/715)). Drop-in import fix tracked. + +[0.9.27]: https://github.com/rohitg00/agentmemory/compare/v0.9.26...v0.9.27 + +## [0.9.26] — 2026-06-03 + +Hotfix on top of v0.9.25. The first-run boot crashed for users without a persisted index because the load path didn't handle `undefined` returns from iii-state adapters. + +### Fixed + +- **First boot crash: `TypeError: Cannot read properties of undefined (reading 'v')`** ([#797](https://github.com/rohitg00/agentmemory/issues/797)). The sharded index load path (`loadShardedData`) checked `manifest.value !== null` before forwarding to `loadManifestData`. Some iii-state adapters return `undefined` (not `null`) for a missing key, so `undefined !== null` was true and `loadManifestData(undefined, ...)` immediately threw on `manifest.v`. Now treats both `null` and `undefined` (plus non-object values) as "no manifest" and falls through to the legacy load path. Self-healing: the next debounced save rebuilds a fresh manifest, so the crash was already cosmetic for ongoing operation — but it scared every fresh upgrader. Tests cover both undefined and wrong-shape manifest rows. + +[0.9.26]: https://github.com/rohitg00/agentmemory/compare/v0.9.25...v0.9.26 + +## [0.9.25] — 2026-06-03 + +Bug-fix wave closing every breaking regression reported against 0.9.24, plus a feature lane (graph pagination + smart-search followup diagnostic + obsidian-export hardening + sharded index persistence). Eleven issues closed. No breaking changes; drop-in upgrade. + +### Fixed + +- **Cross-provider fallback always 404'd and tripped the circuit breaker** ([#778](https://github.com/rohitg00/agentmemory/issues/778), [PR #791](https://github.com/rohitg00/agentmemory/pull/791)). `createFallbackProvider` copied the primary provider's `model` into every fallback config. With OpenAI primary + Gemini fallback, Gemini was called with `gpt-4o-mini` and 404'd on every call, tripping the circuit breaker and blocking downstream LLM ops. Each fallback now resolves its own env-driven default (`OPENAI_MODEL` / `GEMINI_MODEL` / `ANTHROPIC_MODEL` / `MINIMAX_MODEL` / `OPENROUTER_MODEL`). +- **`import-jsonl` aborted entire batch on legacy session row missing `id`** ([#775](https://github.com/rohitg00/agentmemory/issues/775), [PR #791](https://github.com/rohitg00/agentmemory/pull/791)). Existing-session branch re-keyed on `existing.id` which could be undefined for older rows. `JSON.stringify` dropped the key from the `state::set` payload, the engine returned `missing field \`key\``, and the rejection aborted the whole handler. Now re-keys on `parsed.sessionId` and backfills `existing.id`. +- **`parseSummaryXml` silently dropped summaries wrapped in markdown fences** ([#783](https://github.com/rohitg00/agentmemory/issues/783), [PR #791](https://github.com/rohitg00/agentmemory/pull/791)). DeepSeek / GPT / occasionally Anthropic responses wrap structured XML in ` ```xml ... ``` ` fences with optional conversational text. The raw payload went straight to the tag regex and returned `parse_failed`. New `stripXmlWrappers()` peels markdown fences + pre/postamble; final-merge parse path retries once on failure (matching chunk-level behavior). +- **`sdk.triggerVoid is not a function` on iii-sdk 0.11.2** ([#758](https://github.com/rohitg00/agentmemory/issues/758), [#726](https://github.com/rohitg00/agentmemory/issues/726), [PR #773](https://github.com/rohitg00/agentmemory/pull/773)). iii-sdk 0.11.2 removed `triggerVoid` in favor of `trigger({ action: TriggerAction.Void() })`. Nine call sites still used the removed API; six ran without try/catch and threw `TypeError`, breaking image lifecycle, disk-quota cleanup, vision embeddings, and observation write paths. +- **pi integration recorded every observation as "No content provided"** ([#759](https://github.com/rohitg00/agentmemory/issues/759), [PR #772](https://github.com/rohitg00/agentmemory/pull/772)). pi sent `data.input` / `data.output` but `observe.ts` reads `data.tool_input` / `data.tool_output`. Field-name mismatch left `raw.toolInput` / `raw.toolOutput` undefined; the compress pipeline produced empty observations. +- **Fresh global install refused to boot when PATH iii didn't match the runtime pin** ([#752](https://github.com/rohitg00/agentmemory/issues/752), [PR #774](https://github.com/rohitg00/agentmemory/pull/774)). The hard-pin enforcer told users to overwrite their global iii with v0.11.2, but the v0.11.2 release ships only `iii` (not `iii-init` / `iii-worker`) on some platforms. agentmemory now installs to `~/.agentmemory/bin/` and auto-falls-back to it when PATH iii mismatches the pin. User's existing iii install stays untouched. +- **`mem::obsidian-export` HTTP 500 `[object Object]` on any record missing `id`** ([#729](https://github.com/rohitg00/agentmemory/issues/729), [PR #780](https://github.com/rohitg00/agentmemory/pull/780)). `sanitize(undefined.id)` threw outside the per-record try and escaped the whole handler. Four-layer hardening: id filter, safe-array / safe-string / safe-timestamp normalizers, outer try/catch, fail-safe session sort. +- **Concurrent agent-sdk summarize chunks failed with `too_many_chunks_skipped`** ([#781](https://github.com/rohitg00/agentmemory/issues/781), [PR #782](https://github.com/rohitg00/agentmemory/pull/782)). `AGENTMEMORY_SDK_CHILD` recursion guard mutated `process.env` globally; concurrent chunks under `Promise.all` saw the marker and returned empty. Recursion guard now scoped to `AsyncLocalStorage`; the `process.env` marker stays for cross-process hook inheritance, reference-counted so overlapping calls don't race. +- **Viewer #graph tab blank on large graphs** ([#753](https://github.com/rohitg00/agentmemory/issues/753), [PR #789](https://github.com/rohitg00/agentmemory/pull/789)). `POST /agentmemory/graph/query` with `{}` on an 11k+ node corpus returned HTTP 500 `Invocation stopped`. `graph/query` now accepts `limit` / `offset`, applies a default cap (500) ranked by node degree, restricts page edges to in-page endpoints, and returns `totalNodes` / `totalEdges` / `truncated`. The viewer issues a bounded initial query, distinguishes server-error from empty-corpus, renders an actionable error banner with Retry. + +### Added + +- **Sharded BM25/vector index persistence with manifest commit/rollback** ([#762](https://github.com/rohitg00/agentmemory/issues/762), [PR #764](https://github.com/rohitg00/agentmemory/pull/764), contributed by [@Rokurolize](https://github.com/Rokurolize)). Large BM25/vector snapshots used to save as monolithic strings and failed past the iii state size ceiling. Each snapshot now writes as bounded shards under a generation-scoped prefix, with a manifest published only after all shards commit. Rollback on shard-write failure, fail-closed on length mismatch, legacy snapshot load preserved for downgrade compat. 957 LOC + 25 tests covering rollback / partial-commit / fail-closed paths. +- **Smart-search followup-rate diagnostic** ([#771](https://github.com/rohitg00/agentmemory/issues/771), [PR #786](https://github.com/rohitg00/agentmemory/pull/786)). Disambiguates retrieval bugs from reader bugs. When an agent issues a second `smart-search` within `AGENTMEMORY_FOLLOWUP_WINDOW_SECONDS` (default 30s) and the new result set has zero overlap with the prior one, counts as a directional "first results didn't satisfy" signal. OTEL counter `agentmemory.smart_search.followup_within_window_total`, `GET /agentmemory/diagnostics/followup` REST endpoint, `agentmemory status` surface, viewer-source exclusion via `X-Agentmemory-Source: viewer` header. + +### Changed + +- **Dependency bumps + zero `npm audit` vulnerabilities** ([PR #779](https://github.com/rohitg00/agentmemory/pull/779)). `@anthropic-ai/sdk` 0.93 → 0.100.1, `tsdown` 0.20.3 → 0.21.10 (stays on Node 20 floor), `@types/node` 25.7 → 25.9, website `next` 16.2.6 → 16.2.7 + React 19.2.7. `iii-sdk` stays pinned at 0.11.2. Transitive vulns closed via overrides: `qs ^6.15.2`, `ws ^8.21.0`, `protobufjs ^7.5.8`. `npm audit` root + website: 8 → **0**. +- **REST endpoint count: 125 → 126** (new `/agentmemory/diagnostics/followup`). + +### Infrastructure + +- 1379 tests passing (up from 1314 in v0.9.24). 13 new test files covering the regressions + features above. +- Removed `website/package-lock.json` from git tracking; root `.gitignore` already forbade lockfiles. + +[0.9.25]: https://github.com/rohitg00/agentmemory/compare/v0.9.24...v0.9.25 + +## [0.9.24] — 2026-05-29 + +Hotfix on top of v0.9.23. Two bugs surfaced in the first hour after v0.9.23 hit npm: + +### Fixed + +- **`agentmemory --version` silently launched the server instead of printing the version string**. `-v` flag was reserved by `--verbose`, and no `--version` literal was handled — falling through to the default `start` command. Now `--version` (and `-V` capital, per POSIX convention) prints `VERSION` and exits 0 before any side effects (engine boot, dir mkdir, env loading). +- **iii-engine version pin was warn-only, not enforced**. When the engine on `PATH` didn't match agentmemory's pinned version (currently `v0.11.2`), the worker still booted against the mismatched engine and crashed at runtime with cryptic `state::list not found` (v0.13.0) or sandbox-everything traps (v0.11.6). `warnIfEngineVersionMismatch` renamed to `enforceEngineVersionPin` — now `p.log.error`s with the downgrade command and `process.exit(1)`. Override escape hatch via `AGENTMEMORY_III_VERSION=` env unchanged (already redefines `IIPINNED_VERSION` upstream so the comparison passes for users who knowingly run against a different engine). + +[0.9.24]: https://github.com/rohitg00/agentmemory/compare/v0.9.23...v0.9.24 + +## [0.9.23] — 2026-05-28 + +Bug-fix + integration wave. GitHub Copilot CLI joins the supported agent matrix with plugin + hooks + MCP coverage. Three silent DX bugs fixed end-to-end: graph extraction never fired on session end, `agentmemory status` reported zero memories, consolidation defaulted off even with an LLM provider configured. Five additional adapters and a clearer local-LLM story for Ollama / LM Studio users. `agentmemory connect` now points users at `npx skills add` for the native-skills install path (50+ agents). + +### Added + +- **GitHub Copilot CLI** ([PR #534](https://github.com/rohitg00/agentmemory/pull/534)). Full first-class support: `plugin/plugin.json` manifest, `hooks.copilot.json` lifecycle hooks for all 11 Copilot events with camelCase payload normalization, `agentmemory connect copilot-cli` MCP path, first-run onboarding default-select via `COPILOT_CLI` / `COPILOT_AGENT_SESSION_ID` env detection, Windows-safe `cmd.exe /d /s /c npx` wrapper. Standalone MCP transport now speaks LSP-style `Content-Length` framed JSON-RPC alongside the existing newline-delimited form so Copilot's stdio init handshake works. +- **Five new MCP adapters** ([PR #677](https://github.com/rohitg00/agentmemory/pull/677)). Warp, Cline, Continue, Zed, and Droid. `createJsonMcpAdapter` extended with `wrapperKey` (Zed uses `context_servers` instead of `mcpServers`) and `extraEntryFields` (Droid requires `type: "stdio"`). `ADAPTERS` count: 11 → 17. +- **`/agentmemory/graph/build` endpoint** ([PR #698](https://github.com/rohitg00/agentmemory/pull/698)). Backfills the knowledge graph from existing compressed observations across every session in configurable batches. Wires up the viewer's "Build Graph" button that previously returned 404. +- **11 README translations + language picker** ([PR #675](https://github.com/rohitg00/agentmemory/pull/675)). zh-CN, zh-TW, ja-JP, ko-KR, es-ES, pt-BR, fr-FR, de-DE, ru-RU, tr-TR, hi-IN. +- **`npx skills add` hint in connect output** ([PR #709](https://github.com/rohitg00/agentmemory/pull/709)). After a successful `agentmemory connect `, the CLI now prints the matching `npx skills add rohitg00/agentmemory -y` command so users get the native-skills install alongside MCP wiring. The [`skills`](https://npmjs.com/package/skills) CLI covers 50+ agents including the 5 added in PR #677. README "Other agents" section gains a dedicated subsection explaining the two-step pattern (`connect` writes MCP config, `skills add` installs the 8 SKILL.md files into the agent's native skill directory). + +### Changed + +- **Consolidation auto-enables when an LLM provider is configured** ([PR #696](https://github.com/rohitg00/agentmemory/pull/696), closes [#612](https://github.com/rohitg00/agentmemory/discussions/612)). `CONSOLIDATION_ENABLED` defaulted to `false`, so users with a working provider got compression + summarization but zero graph nodes / crystals / lessons. Now defaults `true` whenever any of `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `OPENROUTER_API_KEY` / `GEMINI_API_KEY` / `GOOGLE_API_KEY` / `MINIMAX_API_KEY` / `OPENAI_BASE_URL` is set, or `AGENTMEMORY_PROVIDER=agent-sdk`. Explicit `=false` / `AGENTMEMORY_PROVIDER=noop` still opt out. `OPENAI_API_KEY_FOR_LLM=false` honored (key scoped to embeddings). +- **Fire-and-forget telemetry hooks** ([PR #688](https://github.com/rohitg00/agentmemory/pull/688), closes [#573](https://github.com/rohitg00/agentmemory/issues/573)). Nine telemetry-only hooks (notification, post-tool-failure, post-tool-use, prompt-submit, stop, session-end, subagent-start, subagent-stop, task-completed) switched to unawaited `fetch(...).catch(() => {})` paired with `setTimeout(() => process.exit(0), 500).unref()` (1500ms for the multi-fetch `stop` + `session-end` hooks). No longer blocks Claude Code's next-prompt boundary on every assistant turn. +- **Observability defaults tamed** ([PR #686](https://github.com/rohitg00/agentmemory/pull/686), closes [#519](https://github.com/rohitg00/agentmemory/issues/519)). `iii-config.yaml` defaults: `sampling_ratio: 0.1`, `logs_console_output: false`. `findIiiConfig()` precedence reversed so `AGENTMEMORY_III_CONFIG` env > cwd > `~/.agentmemory/iii-config.yaml` > bundled. + +### Fixed + +- **Graph extraction never fires automatically** ([PR #698](https://github.com/rohitg00/agentmemory/pull/698), closes [#666](https://github.com/rohitg00/agentmemory/issues/666)). `event::session::stopped` listens on `agentmemory.session.stopped` but nothing in the codebase ever published that topic. `api::session::end` now directly calls `sdk.triggerVoid("event::session::stopped", { sessionId })` (try/catch guarded so a fan-out error doesn't fail the HTTP response). Knowledge graphs now materialize automatically when sessions end. +- **`agentmemory status` shows Memories/Observations = 0** ([PR #698](https://github.com/rohitg00/agentmemory/pull/698), closes [#666](https://github.com/rohitg00/agentmemory/issues/666)). CLI fetched `/agentmemory/export` for counts but that endpoint times out (>5s) on iii-engine's file-based KV under concurrent `kv.list()`. Switched to `/memories?count=true` (count-only, constant-time) + sum of `sessions[].observationCount`. +- **Hooks send full filesystem path as `project` instead of repo basename** ([PR #687](https://github.com/rohitg00/agentmemory/pull/687), closes [#474](https://github.com/rohitg00/agentmemory/issues/474)). Native sessions, replay-import, and `memory_lesson_save` all use repo basename — the path/basename mismatch silently filtered out the bulk of relevant lessons from auto-injected context. New `resolveProject(cwd?)` helper: `AGENTMEMORY_PROJECT_NAME` env > `git rev-parse --show-toplevel` basename > `basename(cwd)`. Applied to 9 hooks. +- **Cross-project memory leakage** ([PR #662](https://github.com/rohitg00/agentmemory/pull/662)). Memories created in one project leaking into recall on another. Wildcard guard pattern `(!project || !m.project || m.project === project)` preserves backward-compat for legacy unscoped memories while scoping new ones strictly. +- **Graph parser tolerates reordered XML attributes** ([PR #685](https://github.com/rohitg00/agentmemory/pull/685), closes [#635](https://github.com/rohitg00/agentmemory/issues/635)). Order-dependent regex replaced with order-independent `parseAttrs` helper. Self-closing trailing-`/` handling preserved. +- **Defensive null guards on `Memory.sessionIds`** ([PR #684](https://github.com/rohitg00/agentmemory/pull/684)). Older exports + hand-edited dumps can omit this field; now treated as empty array on read. +- **Vector index Buffer slice metadata round-trip** ([PR #683](https://github.com/rohitg00/agentmemory/pull/683), closes [#587](https://github.com/rohitg00/agentmemory/issues/587), [#584](https://github.com/rohitg00/agentmemory/issues/584)). `byteOffset` + `byteLength` preserved on `Buffer.from` and `Float32Array` construction so base64 round-trips don't corrupt vectors stored as slices. +- **Slots HTTP triggers return 503 not 500** ([PR #682](https://github.com/rohitg00/agentmemory/pull/682), closes [#678](https://github.com/rohitg00/agentmemory/issues/678)). Feature-flag-disabled responses now use the documented 503 shape with `enableHow` + `docsHref`. `.env` propagation fixed (now reads via `getEnvVar()` not raw `process.env`). +- **`agentmemory doctor` points to correct iii install URL** ([PR #681](https://github.com/rohitg00/agentmemory/pull/681)). +- **Separate `OPENAI_EMBEDDING_BASE_URL` + `OPENAI_EMBEDDING_API_KEY`** ([PR #503](https://github.com/rohitg00/agentmemory/pull/503)). Lets users route embeddings and LLM calls to different OpenAI-compatible endpoints (e.g. cloud OpenAI for embeddings + local LM Studio for LLM, or vice versa). +- **Viewer Memories tab sorts newest first** ([PR #701](https://github.com/rohitg00/agentmemory/pull/701), closes [#674](https://github.com/rohitg00/agentmemory/issues/674)). Memories list rendered in KV-insertion order, hiding just-saved entries at the bottom of long lists. `loadMemories()` now sorts on `createdAt` desc (fallback `updatedAt`) before items reach state — matches the `localeCompare` pattern Sessions / Metrics tabs already use. + +### Docs + +- **Local-LLM section in README** ([PR #697](https://github.com/rohitg00/agentmemory/pull/697), closes [#671](https://github.com/rohitg00/agentmemory/discussions/671)). Dedicated "Local models (Ollama / LM Studio / vLLM)" subsection with copy-paste configs, model-pick table (qwen2.5-coder:7b, llama3.2:3b, mistral:7b-instruct, deepseek-r1:7b), and reasoning-model empty-content callout. Existing OpenAI-compatible support was buried in a one-line env comment. +- **Three pipeline layers, not three primitives** ([PR #690](https://github.com/rohitg00/agentmemory/pull/690)). Website + README copy: the three primitives are worker / function / trigger (iii). HOOKS / RECALL / CONSOLIDATE are pipeline layers. Section anchor renamed `#primitives` → `#stack` to match the nav label. + +### Infrastructure + +- Hook scripts now bundle per-entry instead of sharing chunks, so `plugin/scripts/_project-*.mjs` hashed artifacts no longer churn the diff on every build. +- `AGENTS.md` "Hook Scripts" section documents the two patterns (context-injecting vs telemetry-only) and the 500ms / 1500ms exit-delay rule for single vs multi-fetch hooks. +- Test suite: 1271 → 1291 (+20 new tests covering project basename resolver, fire-and-forget wiring, consolidation default behavior, session-end → graph extraction, the graph-build endpoint, and the viewer memories sort). + +[0.9.23]: https://github.com/rohitg00/agentmemory/compare/v0.9.22...v0.9.23 + +## [0.9.22] — 2026-05-26 + +Stability + ecosystem wave. Three install-broken bugs (`npm install` ERESOLVE, non-OpenAI base URLs, broken Claude bridge path) closed. Six runtime bugs from active users fixed end-to-end. Three new agent integrations (Qwen Code, Antigravity, Kiro). New `AGENT_ID` scope for multi-agent setups. Port mapping documented. + +### Fixed + +- **`npm install` ERESOLVE on fresh install** ([PR #649](https://github.com/rohitg00/agentmemory/pull/649), closes [#631](https://github.com/rohitg00/agentmemory/issues/631)). `@anthropic-ai/sdk` bumped from `^0.39.0` to `^0.93.0` so `claude-agent-sdk`'s peer is satisfied. Verified clean install with only the published `dependencies` block. + +- **Non-OpenAI base URLs silent-404** ([PR #649](https://github.com/rohitg00/agentmemory/pull/649), closes [#646](https://github.com/rohitg00/agentmemory/issues/646), [#628](https://github.com/rohitg00/agentmemory/issues/628)). `buildChatUrl` + `buildEmbeddingUrl` no longer blindly prepend `/v1/`. DeepSeek, SiliconFlow, Zhipu (`/api/paas/v4`), vLLM, LM Studio, Ollama all resolve correctly. + +- **`CLAUDE_MEMORY_BRIDGE` writes to a path Claude Code reads** ([PR #649](https://github.com/rohitg00/agentmemory/pull/649), closes [#625](https://github.com/rohitg00/agentmemory/issues/625)). Slug now preserves the leading `-` on POSIX absolute paths and drops the spurious `/memory/` subdir, matching `~/.claude/projects//MEMORY.md`. + +- **OpenAI provider reads `reasoning_content` for thinking models** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#627](https://github.com/rohitg00/agentmemory/issues/627)). DeepSeek V4 / Qwen3 / GLM / Kimi return `message.reasoning_content`. Previously only `message.reasoning` was checked — compress silently failed every call and tripped the circuit breaker. + +- **`agentmemory stop` reaps the worker process** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#640](https://github.com/rohitg00/agentmemory/issues/640), [#474](https://github.com/rohitg00/agentmemory/issues/474)). Worker pid is written to `~/.agentmemory/worker.pid` on boot; `stop` signals both engine + worker. + +- **OpenCode plugin implicit-creates the session on first observation** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#638](https://github.com/rohitg00/agentmemory/issues/638)). `mem::observe` creates the session row when one doesn't exist. No more orphan observations or `Session not found for summarize`. + +- **OpenCode plugin zero-config auto-context injection** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#431](https://github.com/rohitg00/agentmemory/issues/431)). `POST /session/start` context is cached per-session; the existing `experimental.chat.system.transform` hook reads from the cache. + +- **Viewer graph settles on 1000+ node graphs** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#563](https://github.com/rohitg00/agentmemory/issues/563)). Tick-decayed damping, per-node velocity cap, raf park on quiescence. Mousedown / wheel / zoom / recenter re-wake the parked loop. + +- **`/memories` + `/export` paginate** ([PR #648](https://github.com/rohitg00/agentmemory/pull/648), closes [#544](https://github.com/rohitg00/agentmemory/issues/544)). New `?count=true` and `?limit=N&offset=M` on `/memories`. `/export` forwards `?maxSessions` + `?offset`. Stops large corpora (8K+ memories) from timing out at the iii-engine invocation boundary. + +- **Claude Code drops the MCP server silently** ([PR #650](https://github.com/rohitg00/agentmemory/pull/650), closes [#510](https://github.com/rohitg00/agentmemory/issues/510)). `plugin/.mcp.json` env block uses `${VAR:-default}` form. Unset required vars no longer fail config parse. + +- **Full 51-tool MCP surface by default** ([PR #650](https://github.com/rohitg00/agentmemory/pull/650), closes [#553](https://github.com/rohitg00/agentmemory/issues/553)). `getVisibleTools()` default flipped from `core` (8) to `all` (51) to match what every plugin manifest advertises. `AGENTMEMORY_TOOLS=core` still gives the lean set. + +- **Connect adapters write `${VAR:-default}` env block** ([PR #650](https://github.com/rohitg00/agentmemory/pull/650)). `agentmemory connect` for Claude Code / Cursor / Gemini CLI / Windsurf writes the same default form. + +- **Hermes `memory status` no longer reports the plugin as Missing** ([PR #643](https://github.com/rohitg00/agentmemory/pull/643), closes [#520](https://github.com/rohitg00/agentmemory/issues/520)). Hermes plugin seeds `AGENTMEMORY_URL` to `http://localhost:3111` at import. Works for systemd-managed agentmemory where the env file is loaded via `EnvironmentFile=` and never reaches the interactive shell. + +- **Deleted memories cleared from BM25 + vector indices** ([PR #636](https://github.com/rohitg00/agentmemory/pull/636) by [@abhinav-m22](https://github.com/abhinav-m22), closes [#632](https://github.com/rohitg00/agentmemory/issues/632)). `SearchIndex.remove()` added and called from every delete path. Snapshot flushed synchronously so a SIGKILL between mutation + debounce can't resurrect deleted entries. + +- **PostToolUse hook reads `tool_response`, falls back to `tool_output`** ([PR #561](https://github.com/rohitg00/agentmemory/pull/561) by [@faraz152](https://github.com/faraz152), closes [#539](https://github.com/rohitg00/agentmemory/issues/539)). Claude Code's PostToolUse payload uses `tool_response`. Now reads `tool_response ?? tool_output` so legacy integrations keep working. + +- **iii-sdk pinned to exact `0.11.2`** ([PR #567](https://github.com/rohitg00/agentmemory/pull/567), closes [#555](https://github.com/rohitg00/agentmemory/issues/555)). `iii-sdk@0.11.6` introduced a routing regression where every `/agentmemory/*` route returned 404. Pin removes the caret. + +- **OpenAI provider sends explicit `stream: false`** ([PR #526](https://github.com/rohitg00/agentmemory/pull/526) by [@Ptah-CT](https://github.com/Ptah-CT)). Some OpenAI-compatible proxies default to `text/event-stream` when `stream` is absent. + +- **Viewer search uses NFKC normalisation for CJK / fullwidth input** ([PR #542](https://github.com/rohitg00/agentmemory/pull/542) by [@kaushalrog](https://github.com/kaushalrog)). + +- **Viewer splash shows actual bound viewer port** ([PR #560](https://github.com/rohitg00/agentmemory/pull/560) by [@Tanmay-008](https://github.com/Tanmay-008), closes [#521](https://github.com/rohitg00/agentmemory/issues/521)). `/agentmemory/livez` now returns `viewerPort` + `viewerSkipped`. + +- **Viewer tab bar height stable across tab switches** ([PR #325](https://github.com/rohitg00/agentmemory/pull/325) by [@hungtd119](https://github.com/hungtd119), closes [#324](https://github.com/rohitg00/agentmemory/issues/324)). + +- **Graph parser accepts self-closing `` tags** ([PR #494](https://github.com/rohitg00/agentmemory/pull/494) by [@Rex57](https://github.com/Rex57), closes [#492](https://github.com/rohitg00/agentmemory/issues/492)). + +- **Plugin MCP server inherits remote/auth env** ([PR #386](https://github.com/rohitg00/agentmemory/pull/386) by [@LaplaceYoung](https://github.com/LaplaceYoung), closes [#375](https://github.com/rohitg00/agentmemory/issues/375)). + +- **`@agentmemory/mcp` rejects literal `${VAR}` placeholders**. Any `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` value of the form `${...}` is treated as unset and falls back to `http://localhost:3111`. + +- **Codex `stop` hook closes session** ([PR #579](https://github.com/rohitg00/agentmemory/pull/579), closes [#493](https://github.com/rohitg00/agentmemory/issues/493)). `Stop` was missing from the Codex bundle; session never got marked completed. + +- **Claude Code `--with-hooks` works for MCP-standalone users** ([PR #581](https://github.com/rohitg00/agentmemory/pull/581), closes [#508](https://github.com/rohitg00/agentmemory/issues/508)). + +### Added + +- **`AGENT_ID` multi-agent memory isolation** ([PR #654](https://github.com/rohitg00/agentmemory/pull/654), closes [#554](https://github.com/rohitg00/agentmemory/issues/554)). Optional `AGENT_ID` env tags every Session / RawObservation / CompressedObservation / Memory. `AGENTMEMORY_AGENT_SCOPE=isolated` (opt-in; `shared` default) also filters every recall path (`mem::smart-search`, `/memories`, `/observations`, `/sessions`). Per-call overrides via request body + `?agentId=` / `?agentId=*` query params. `?includeOrphans=true` surfaces pre-tag rows. + +- **Qwen Code connect adapter** ([PR #651](https://github.com/rohitg00/agentmemory/pull/651), closes [#647](https://github.com/rohitg00/agentmemory/issues/647)). `agentmemory connect qwen` writes the standard `mcpServers` block to `~/.qwen/settings.json`. + +- **Antigravity connect adapter** ([PR #651](https://github.com/rohitg00/agentmemory/pull/651), closes [#614](https://github.com/rohitg00/agentmemory/issues/614)). Replacement for Gemini CLI (sunset 2026-06-18). Writes `mcp_config.json` to the platform-specific User dir. + +- **Kiro connect adapter** ([PR #651](https://github.com/rohitg00/agentmemory/pull/651), closes [#618](https://github.com/rohitg00/agentmemory/issues/618)). Writes user-level `~/.kiro/settings/mcp.json`. + +- **Cost-aware model selection** ([PR #654](https://github.com/rohitg00/agentmemory/pull/654), closes [#613](https://github.com/rohitg00/agentmemory/issues/613)). Runtime warning when `OPENROUTER_MODEL` matches the premium pattern. README cost-tier table with measured workload data. Suppress via `AGENTMEMORY_SUPPRESS_COST_WARNING=1`. + +- **Pluggable benchmark harness** ([PR #562](https://github.com/rohitg00/agentmemory/pull/562)). New `eval/` directory with the `coding-agent-life-v1` corpus (15 sessions + 15 graded queries) and three adapters (grep, OpenAI embeddings + cosine, agentmemory hybrid). LongMemEval support. Sandboxed agentmemory + iii-engine on alt ports via `eval/scripts/sandbox.sh`. Dev-only — no runtime impact. + +- **`agentmemory connect codex --with-hooks` opt-in flag** ([PR #564](https://github.com/rohitg00/agentmemory/pull/564), closes [#509](https://github.com/rohitg00/agentmemory/issues/509)). Workaround for [openai/codex#16430](https://github.com/openai/codex/issues/16430). + +- **Cross-platform CI matrix** ([PR #556](https://github.com/rohitg00/agentmemory/pull/556)). Ubuntu + macOS × Node 20 + 22, `paths-ignore`, per-branch concurrency cancellation. + +### Docs + +- **Port mapping table** ([PR #651](https://github.com/rohitg00/agentmemory/pull/651), closes [#629](https://github.com/rohitg00/agentmemory/issues/629)). `3111` REST / `3112` streams / `3113` viewer / `49134` engine WS + env overrides + stale-process cleanup recipe. + +- **Pairings recipe** ([PR #641](https://github.com/rohitg00/agentmemory/pull/641)). `docs/recipes/pairings.md` covers stacking agentmemory with codegraph, Understand Anything, and Graphify. + +- **Multi-agent README section** ([PR #654](https://github.com/rohitg00/agentmemory/pull/654)). `AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE` semantics, per-endpoint behavior table. + +- **Supply-chain policy in SECURITY.md** ([PR #654](https://github.com/rohitg00/agentmemory/pull/654), closes [#540](https://github.com/rohitg00/agentmemory/issues/540)). Explains why no lockfile is committed (`dist/` ships pre-built) and what monitoring exists. + +- **README "Config File" section + Windows path** ([PR #321](https://github.com/rohitg00/agentmemory/pull/321) by [@aqilaziz](https://github.com/aqilaziz), closes [#293](https://github.com/rohitg00/agentmemory/issues/293)). + +- **README sudo install hint for `EACCES`** ([PR #454](https://github.com/rohitg00/agentmemory/pull/454) by [@kedar-1](https://github.com/kedar-1)). + +### Infrastructure + +- 108 test files, **1171 tests pass**. +- Agent count: 8 → 11 (claude-code, codex, cursor, gemini-cli, qwen, antigravity, kiro, openclaw, hermes, pi, openhuman). + +## [0.9.21] — 2026-05-19 + +Quality + integration wave. Headline: native OpenCode plugin with full Claude Code hook parity ([#237](https://github.com/rohitg00/agentmemory/pull/237) by [@cl0ckt0wer](https://github.com/cl0ckt0wer)). Ten more PRs alongside: `memory_recall` returning the wrong shape, env-file `AGENTMEMORY_DROP_STALE_INDEX` silently ignored, hook scripts crashing on Windows usernames with spaces, viewer search inputs interrupting CJK IME composition, large sessions silently failing at the LLM context limit, lessons invisible to smart-search, Hermes plugin manifest missing hooks, cli onboarding crashing in non-TTY contexts, rebuildIndex blocking boot on large corpora, 25h embed-loop bottleneck during rebuild, and the v0.9.19 iii-console installer workaround can come out now that upstream is fixed. + +### Added + +- **OpenCode plugin with 22 auto-capture hooks** ([PR #237](https://github.com/rohitg00/agentmemory/pull/237) by [@cl0ckt0wer](https://github.com/cl0ckt0wer), closes [#236](https://github.com/rohitg00/agentmemory/issues/236) + [#244](https://github.com/rohitg00/agentmemory/issues/244)). Complete OpenCode plugin in `plugin/opencode/` matching Claude Code hook parity. Covers session lifecycle (8 hooks), messages (3), tool lifecycle (2), part tracking, permissions, task tracking, plus a two-layer enrichment pipeline (memory context on first turn, file enrichment on subsequent turns) and two slash commands (`/recall`, `/remember`). Full gap analysis in `plugin/opencode/README.md`. + +### Fixed + +- **`memory_recall` endpoint + format/token_budget forwarding** ([PR #516](https://github.com/rohitg00/agentmemory/pull/516) by [@serhiizghama](https://github.com/serhiizghama), closes [#507](https://github.com/rohitg00/agentmemory/issues/507) + [#440](https://github.com/rohitg00/agentmemory/issues/440)). MCP `memory_recall` always returned compact mode and dropped `format` + `token_budget` params. Two root causes fixed: standalone shim routed through `/agentmemory/smart-search` instead of `/agentmemory/search`, and the local-fallback path didn't read either param. Now routes correctly, forwards both params end-to-end, defaults `format` to `"full"` matching the MCP schema. + +- **env-file `AGENTMEMORY_DROP_STALE_INDEX` flag now honored** ([PR #461](https://github.com/rohitg00/agentmemory/pull/461) by [@honor2030](https://github.com/honor2030), closes [#456](https://github.com/rohitg00/agentmemory/issues/456)). Setting the flag in `~/.agentmemory/.env` was silently ignored because the boot path read `process.env` directly. New `isDropStaleIndexEnabled()` helper reads merged env. Combined with [#455](https://github.com/rohitg00/agentmemory/issues/455) + [#469](https://github.com/rohitg00/agentmemory/issues/469) reports, this is the unblock path for the stale-index server-crash recovery loop. + +- **Windows hook scripts quote plugin paths correctly** ([PR #487](https://github.com/rohitg00/agentmemory/pull/487) by [@honor2030](https://github.com/honor2030), closes [#477](https://github.com/rohitg00/agentmemory/issues/477)). Hook command strings referenced `${CLAUDE_PLUGIN_ROOT}/scripts/*.mjs` without quotes — Windows users with spaces in their username had every hook crash. Quotes added + regression test. + +- **Viewer search inputs honor IME composition** ([PR #517](https://github.com/rohitg00/agentmemory/pull/517) by [@jonathanzhan1975](https://github.com/jonathanzhan1975)). CJK users typing in the viewer's search inputs hit mid-character interruption — every keystroke fired the `oninput=` re-render handler, breaking IME composition mid-syllable. New `bindImeSafeSearch` helper defers re-render until `compositionend`. + +- **Chunk large sessions to fit LLM context window** ([PR #472](https://github.com/rohitg00/agentmemory/pull/472) by [@efenex](https://github.com/efenex)). Sessions with >7000 observations silently failed at the LLM provider's context limit — the consolidation pipeline silently skipped the session. New chunking splits oversized sessions across multiple compress calls + restitches the narrative via a `REDUCE_SYSTEM` prompt. Legacy single-call path preserved when obs count is under the chunk size. Backfill script under `scripts/` for users hitting the pre-fix bug. + +- **Surface lessons in smart-search + diagnose tally** ([PR #473](https://github.com/rohitg00/agentmemory/pull/473) by [@efenex](https://github.com/efenex)). Closes the lesson round-trip with [#458](https://github.com/rohitg00/agentmemory/pull/458) (lessons auto-injected into `mem::context`): lessons are now also returned alongside hybrid search results in a separate `lessons` field on `smart-search`, and the `diagnose` health surface tallies per-store counts so the trust-shock pattern (save succeeds, recall empty, diagnose says 0) goes away. + +- **Declare all Hermes plugin hooks** ([PR #486](https://github.com/rohitg00/agentmemory/pull/486) by [@honor2030](https://github.com/honor2030)). The Hermes `plugin.yaml` manifest only declared 3 of the 6 implemented hooks. All 6 now declared (`prefetch`, `sync_turn`, `on_session_end`, `on_pre_compress`, `on_memory_write`, `system_prompt_block`). + +- **`rebuildIndex` non-blocking on boot** ([PR #500](https://github.com/rohitg00/agentmemory/pull/500) by [@efenex](https://github.com/efenex)). Boot path previously `await`-ed `rebuildIndex(kv)`, so the viewer + later boot steps stalled — on large corpora this was 25h+ of blocked startup. Replaced with `void rebuildIndex(kv).then(...).catch(...)` so the rebuild runs in the background. + +- **Batched embed calls in `rebuildIndex` (25h → 3h on large corpora)** ([PR #504](https://github.com/rohitg00/agentmemory/pull/504) by [@efenex](https://github.com/efenex)). The rebuild loop made one embed call per observation, paying full HTTP RTT per item. New `vectorIndexAddBatchGuarded` helper batches embeds (default 32, configurable via `REBUILD_EMBED_BATCH_SIZE`) and try/catches per-item failures. Measured 25h → 3h on a 250k-observation corpus. + +- **CLI skips onboarding prompts without a tty** ([PR #491](https://github.com/rohitg00/agentmemory/pull/491) by [@honor2030](https://github.com/honor2030)). Onboarding prompts crashed in non-interactive contexts (CI, `docker run -d`, piped input). New guard short-circuits with sensible defaults when stdin/stdout aren't TTYs or `CI=1`. + +### Changed + +- **Drop iii-console installer `--next` workaround** ([PR #546](https://github.com/rohitg00/agentmemory/pull/546)). v0.9.19 routed first-run iii-console install through `bash -s -- --next` to dodge an upstream tag-prefix bug at [iii-hq/iii#1652](https://github.com/iii-hq/iii/issues/1652). Upstream [iii-hq/iii#1660](https://github.com/iii-hq/iii/pull/1660) shipped 2026-05-19; `install.iii.dev/console/main/install.sh` is a CDN proxy serving upstream main HEAD so the fix is live without an iii release tag. Reverted to canonical bare `curl ... | sh`. + +### Infrastructure + +- 95 test files (was 92), **1067 tests pass** (was 1038) on `chore(release): v0.9.21`. +- Bundles 11 PRs: 1 contributor feature + 9 bug fixes across MCP / hooks / viewer / summarize / lessons / Hermes / rebuildIndex / CLI + 1 upstream-installer revert. +- New contributors landing first PRs this release: [@cl0ckt0wer](https://github.com/cl0ckt0wer), [@serhiizghama](https://github.com/serhiizghama), [@jonathanzhan1975](https://github.com/jonathanzhan1975). + +[0.9.21]: https://github.com/rohitg00/agentmemory/compare/v0.9.20...v0.9.21 + +## [0.9.20] — 2026-05-18 + +Hotfix: revert the Codex Stop → session-end chain shipped in v0.9.19. + +### Fixed + +- **Revert Codex Stop hook session-end chain** ([PR #501](https://github.com/rohitg00/agentmemory/pull/501) by [@Rex57](https://github.com/Rex57), reverts v0.9.19's [#495](https://github.com/rohitg00/agentmemory/pull/495), re-opens [#493](https://github.com/rohitg00/agentmemory/issues/493)). Post-merge field-testing surfaced the underlying issue: Codex `Stop` fires before the overall conversation is truly finished — multiple Stops bracket each assistant turn within one session. Chaining `session-end.mjs` from Stop marked sessions completed too early, with later observations still arriving against an `endedAt`-stamped record. Restored to summarize-only Stop; the SessionEnd-shaped solution stays open as [#493](https://github.com/rohitg00/agentmemory/issues/493). + +[0.9.20]: https://github.com/rohitg00/agentmemory/compare/v0.9.19...v0.9.20 + +## [0.9.19] — 2026-05-18 + +Feature + hardening wave. Sessions now link to the git commits they shipped (forward + reverse lookup, REST + MCP surfaces). OpenAI provider transport collapses into one shared module with auto-detected Azure URL style (legacy `/openai/deployments/` and v1 `/openai/v1` both supported). Graph retrieval switches from BFS to Dijkstra over the weighted edge graph. Codex Stop hook chains session-end. Plugin MCP server inherits `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` from the shell. Point fix routes the bundled iii-console installer around an upstream tag-prefix bug. 1007+ tests pass. + +### Added + +- **Session-to-commit linking** ([PR #498](https://github.com/rohitg00/agentmemory/pull/498)). New `KV.commits` namespace keyed by full SHA holds `CommitLink` records (sha, shortSha, branch, repo, message, author, authoredAt, files, sessionIds). `Session.commitShas[]` provides the forward back-reference. REST: `POST /agentmemory/session/commit` upserts links (merges `sessionIds` on re-link, preserves `linkedAt`); `GET /agentmemory/commits/:sha` and `GET /agentmemory/commits` round-trip. MCP: `memory_commit_lookup` and `memory_commits` tools. Post-commit hook auto-captures the link on every commit in the working directory. Closes the loop on "what session wrote this code" / "what commits did this session ship" without leaving agentmemory. + +- **Azure OpenAI v1 URL pattern auto-detection** ([PR #462](https://github.com/rohitg00/agentmemory/pull/462), closes [#371](https://github.com/rohitg00/agentmemory/issues/371)). Both the LLM and embedding providers now route through `_openai-shared.ts` and auto-detect Azure URL style: + - `OPENAI_BASE_URL=https://r.openai.azure.com/openai/deployments/` → legacy URL pattern, `api-version` query param via `OPENAI_API_VERSION` (default `2024-08-01-preview`). + - `OPENAI_BASE_URL=https://r.openai.azure.com` (bare host, or `/openai`, or `/openai/v1`) → v1 GA pattern, `/openai/v1/`, deployment name carried in the request body as `model`. + - Net effect: Azure embeddings work for the first time (LLM-side Azure shipped in v0.9.17; embedding was still hardcoded to `/v1/embeddings` + Bearer). Closes [#199](https://github.com/rohitg00/agentmemory/issues/199) (consolidation) as superseded. + +### Changed + +- **Graph retrieval: BFS → Dijkstra over weighted edges** ([PR #463](https://github.com/rohitg00/agentmemory/pull/463), closes [#328](https://github.com/rohitg00/agentmemory/issues/328) filed by [@Tanmay-008](https://github.com/Tanmay-008) with benchmark numbers showing the BFS edge-count semantics + O(n) `Array.shift()` profile). Memory graph edges carry weights 0.1–1.0; BFS visited by edge-count regardless, so a one-hop weak edge ranked the same as a two-hop strong chain. Dijkstra over `cost = 1/max(weight, 0.01)` selects weight-optimal paths instead. Adjacency map built once in O(V+E) and min-heap dequeue at O(log V) replace the prior O(V·E) + O(n) `Array.shift()` profile. `maxDepth` semantics preserved (still edge-count bound). The `startNode` path is excluded from returned paths so the dedicated `score=1.0` fallback loop in `searchByEntities` fires as designed (regression catch from the inline review). + +- **Codex Stop hook chains session-end** ([PR #495](https://github.com/rohitg00/agentmemory/pull/495) by [@Rex57](https://github.com/Rex57), fixes [#493](https://github.com/rohitg00/agentmemory/issues/493) also filed by [@Rex57](https://github.com/Rex57)). `hooks.codex.json` Stop now runs `stop.mjs` followed by `session-end.mjs`. Codex doesn't ship a separate `SessionEnd` lifecycle event, so the session would otherwise stay open after the user terminated the Codex session. Tests assert both commands appear in the Stop chain. + +- **Plugin MCP entry inherits shell env via passthrough** ([PR #460](https://github.com/rohitg00/agentmemory/pull/460), closes [#375](https://github.com/rohitg00/agentmemory/issues/375) filed by [@anthony-spruyt](https://github.com/anthony-spruyt)). `plugin/.mcp.json` and `AGENTMEMORY_MCP_BLOCK` (the template `agentmemory connect ` writes into `~/.claude.json`, `~/.cursor/mcp.json`, etc.) now declare `env: { AGENTMEMORY_URL: "${AGENTMEMORY_URL}", AGENTMEMORY_SECRET: "${AGENTMEMORY_SECRET}" }`. The MCP host substitutes shell values at server launch. When the vars are unset, the host passes empty strings; the standalone shim's `process.env["AGENTMEMORY_URL"] || "http://localhost:3111"` falls back to localhost. One wired entry now covers both local and remote (k8s / reverse-proxied) deployments without `/doctor` "duplicate server" warnings. + +### Fixed + +- **`ensureIiiConsole()` install path** (`src/cli.ts`). The upstream `install.iii.dev/console/main/install.sh` script's jq predicate filters releases with `startswith("v")` while `iii-hq/iii` tags as `iii/v0.12.0`. The script bails with `no stable iii release found` on every fresh install. Switched the install command to `curl ... | bash -s -- --next` until upstream patches the script — the `--next` codepath uses a regex on `-next.` without the buggy `startswith` constraint, so it succeeds against the same tag set. Inline comment documents the upstream bug + revert condition. + +### Infrastructure + +- 91 test files, 1007 tests pass on `chore(release): v0.9.19`. +- Bundles five PRs ([#460](https://github.com/rohitg00/agentmemory/pull/460), [#462](https://github.com/rohitg00/agentmemory/pull/462), [#463](https://github.com/rohitg00/agentmemory/pull/463), [#495](https://github.com/rohitg00/agentmemory/pull/495), [#498](https://github.com/rohitg00/agentmemory/pull/498)) plus the inline iii-console installer workaround into one patch release. + +[0.9.19]: https://github.com/rohitg00/agentmemory/compare/v0.9.18...v0.9.19 + +## [0.9.18] — 2026-05-17 + +Hardening + DX wave. Five fixes land together: lessons now flow into the auto-inject context payload (closes a half-finished loop from earlier releases — see #381 / #457), the viewer drops `data:` from its `img-src` CSP by self-hosting its favicon, the filesystem watcher redacts PEM private-key blocks and standalone JWTs before transport, the mcp-standalone livez probe gets a dependency-injection seam that kills a flaky test, and the OpenAI timeout precedence is documented + tightened (strict integer parse, `OPENAI_TIMEOUT_MS` keeps its v0.9.17 meaning as an alias of the global `AGENTMEMORY_LLM_TIMEOUT_MS`). 1007/1007 tests pass. + +### Added + +- **Lessons auto-injected into `mem::context` payload** ([PR #458](https://github.com/rohitg00/agentmemory/pull/458), closes [#457](https://github.com/rohitg00/agentmemory/issues/457), surfaced in discussion [#381](https://github.com/rohitg00/agentmemory/discussions/381)). Lessons were generated + stored but only retrievable via an explicit `memory_lesson_recall` MCP call — agents rarely thought to invoke it, so the loop was half-done. `mem::context` now reads `KV.lessons` alongside slots + profile, ranks by `(project-relevance × confidence)` (project-scoped lessons get a 1.5× boost), filters tombstoned + cross-project entries, caps at top-10, and emits a `## Lessons Learned` block competing fairly for the token budget. Block recency tracks the most-recent `lastReinforcedAt || updatedAt`, so hot lessons survive when budget tightens. + +- **Self-hosted viewer favicon** ([PR #452](https://github.com/rohitg00/agentmemory/pull/452), closes [#447](https://github.com/rohitg00/agentmemory/issues/447)). The viewer's inline-SVG `data:` favicon (added in #313) required `data:` in `img-src` — a broader allowance than the viewer actually needed. The favicon now lives at `/favicon.svg` served by the viewer with `Content-Type: image/svg+xml` and `Cache-Control: public, max-age=3600`; build script copies the asset into `dist/viewer/` alongside `index.html`. CSP reverts to bare `img-src 'self'`. + +### Changed + +- **`OPENAI_TIMEOUT_MS` is now an alias of `AGENTMEMORY_LLM_TIMEOUT_MS`** ([PR #453](https://github.com/rohitg00/agentmemory/pull/453), closes [#446](https://github.com/rohitg00/agentmemory/issues/446)). v0.9.17 shipped `OPENAI_TIMEOUT_MS` as the OpenAI-scoped knob, then [PR #379](https://github.com/rohitg00/agentmemory/pull/379) introduced the global `AGENTMEMORY_LLM_TIMEOUT_MS` shared across all raw-fetch providers. The OpenAI provider now resolves them in precedence order: `OPENAI_TIMEOUT_MS` → `AGENTMEMORY_LLM_TIMEOUT_MS` → `60_000ms` default. v0.9.17 configs keep working unchanged; new configs should prefer the global. The provider's request also moved onto the shared `fetchWithTimeout` helper that owns AbortController + `clearTimeout` cleanup for every raw-fetch path (minimax, openrouter, gemini, embedding providers). + +- **Strict integer parse for timeout env vars** (PR #453, CodeRabbit catch). `parsePositiveInt` rejects values like `"30ms"`, `"1_000"`, `"60s"`, `"30abc"`, `"-30"`, `"0"` via `/^\d+$/` (after trim) instead of letting `parseInt`'s lenience silently swallow trailing units / underscores / signs as a number. Malformed values fall back to the 60s default with no surprise truncation. + +### Fixed + +- **Filesystem watcher redacts PEM private-key blocks + standalone JWTs in previews** ([PR #450](https://github.com/rohitg00/agentmemory/pull/450), closes [#448](https://github.com/rohitg00/agentmemory/issues/448)). Continues the redaction surface opened in [PR #332](https://github.com/rohitg00/agentmemory/pull/332). PEM blocks (`-----BEGIN ... PRIVATE KEY-----` through `-----END ... PRIVATE KEY-----`, including encrypted, RSA, EC, DSA, OpenSSH, PGP variants) get a state-machine pass that replaces the whole block with a single `[REDACTED ... PRIVATE KEY]` marker; standalone JWT-shaped tokens (three base64url segments separated by dots, length ≥ ~32 chars) are masked to their last 4 chars. Both run before any transport-layer write. + +- **mcp-standalone livez probe DI seam kills the test flake** ([PR #451](https://github.com/rohitg00/agentmemory/pull/451), closes [#449](https://github.com/rohitg00/agentmemory/issues/449)). The standalone shim's livez probe used a fixed `fetch` against `localhost:3111` which made the test suite depend on no other agentmemory instance running on the host. New `setLivezProbe()` injection seam lets tests provide a deterministic probe; default behaviour for production users is unchanged. + +### Infrastructure + +- 91 test files (was 90), 1007 tests (was 992). New `test/context-lessons.test.ts` (8 cases) covers lessons-auto-inject inclusion, empty-state no-op, project ranking, cross-project isolation, soft-delete skip, top-10 cap, confidence rendering, optional `context` string append. + +- Bundled the four follow-up issues filed during the v0.9.17 audit wave ([#446](https://github.com/rohitg00/agentmemory/issues/446), [#447](https://github.com/rohitg00/agentmemory/issues/447), [#448](https://github.com/rohitg00/agentmemory/issues/448), [#449](https://github.com/rohitg00/agentmemory/issues/449)) plus the cross-project lesson-injection gap surfaced in discussion [#381](https://github.com/rohitg00/agentmemory/discussions/381) into a single patch release — no behaviour changes for existing users beyond the hardening above. + +[0.9.18]: https://github.com/rohitg00/agentmemory/compare/v0.9.17...v0.9.18 + +## [0.9.17] — 2026-05-16 + +OpenAI-compatible LLM provider lands the universal-adapter shape (one provider config covers OpenAI, Azure OpenAI auto-detected by hostname, DeepSeek, SiliconFlow, vLLM, LM Studio, Ollama via `/v1`, plus any future endpoint that mirrors `POST /v1/chat/completions`). Worker registration now pins a stable `project_name` for engine telemetry so attribution reads cleanly across hosts. Comparison section on agent-memory.dev no longer wraps awkwardly after the v0.9.16 refresh. + +### Added + +- **OpenAI-compatible LLM provider** ([PR #307](https://github.com/rohitg00/agentmemory/pull/307), by @fatinghenji). Six providers behind one config: `OPENAI_API_KEY` + `OPENAI_BASE_URL` + `OPENAI_MODEL`. Closes [#185](https://github.com/rohitg00/agentmemory/issues/185), [#232](https://github.com/rohitg00/agentmemory/issues/232) (Ollama works via `OPENAI_BASE_URL=http://localhost:11434/v1`), [#312](https://github.com/rohitg00/agentmemory/issues/312), and [#240](https://github.com/rohitg00/agentmemory/pull/240) (superseded). + +- **Azure OpenAI auto-detection**. `OpenAIProvider` detects `.openai.azure.com` hostnames in the configured base URL at construction time and switches the request shape automatically: drops the `/v1` path prefix (deployment is in the URL), uses `api-key: ` header instead of `Authorization: Bearer`, appends `api-version=` query param. Default api-version is `2024-08-01-preview`; override via `OPENAI_API_VERSION`. Closes the gap with [PR #219](https://github.com/rohitg00/agentmemory/pull/219). + +- **`OPENAI_TIMEOUT_MS` env var** (PR #307). Outbound fetch timeout on the new provider, default 60s, AbortController-bounded with a clear timeout error message that points at the env var. The other raw-fetch providers (anthropic / gemini / openrouter / minimax) share the same gap tracked in [#373](https://github.com/rohitg00/agentmemory/issues/373). + +- **`OPENAI_REASONING_EFFORT` passthrough** (PR #307). Forwarded as `reasoning_effort` on the request body for OpenAI reasoning models (`o1`, `o3`, `gpt-*-reasoning`) and providers that mirror that schema (Ollama Cloud thinking models). Standard chat models reject this field with 400 — README documents the caveat. Set to `"none"` for thinking models that return reasoning but no content. The provider also falls back to `message.reasoning` when `message.content` is empty, covering the Ollama Cloud thinking-model shape. + +### Changed + +- **Worker `telemetry.project_name` pinned to `"agentmemory"`** ([PR #426](https://github.com/rohitg00/agentmemory/pull/426)). `iii-sdk`'s `InitOptions.telemetry.project_name` auto-detects when omitted — falls through cwd → package.json basename → hostname, which produces inconsistent identifiers per host (`agentmemory`, `node`, `npm`, occasionally the user's home dir basename when launched via npx). Pinning the value gives every install the same stable project identifier in the engine's metrics + traces output. Also pins `language: "node"` and `framework: "iii-sdk"` for the same reason. + +- **`OPENAI_API_KEY_FOR_LLM=false` opt-out gate** (PR #307, fix pushed via maintainer edit). `detectLlmProviderKind()` now mirrors `detectProvider()`'s existing gate — users who set `OPENAI_API_KEY` only for embeddings (via the `OPENAI_BASE_URL` + `OPENAI_EMBEDDING_MODEL` flow from #186) won't see the LLM auto-activate. The README's `.env` template now leads with an explicit shared-use callout above the LLM section pointing at the opt-out. + +- **Compare section on agent-memory.dev** ([PR #427](https://github.com/rohitg00/agentmemory/pull/427)). `AGENTMEMORY VS. THE FIELD.` title → `VS. THE FIELD.` (the eyebrow already reads VS., so the longer version was redundant + wrapped ugly). Added `text-wrap: balance` to `.section-title` globally so any wrapping title breaks at a balanced point. `NATIVE PLUGINS` cell value `6 (Claude/Codex/OpenClaw/Hermes/pi/OpenHuman)` → `6` (agent names already visible in the Agents grid two sections above). Row grid rebalanced (label 1.4fr / agentmemory 1.3fr / competitors 1fr each), added `word-break: break-word` + 24px row padding so cells like `YES (APACHE-2.0)` and `2 (Qdrant, Neo4j)` have breathing room. + +### Infrastructure + +- Provider factory at `src/providers/index.ts` now dispatches `"openai"` through `createBaseProvider`; type union extended in `src/types.ts:132`. `VALID_PROVIDERS` set in `src/config.ts` includes the new entry so the fallback-chain config accepts it. + +[0.9.17]: https://github.com/rohitg00/agentmemory/compare/v0.9.16...v0.9.17 + +## [0.9.16] — 2026-05-15 + +Two parallel waves landed back-to-back. (1) DevEx polish on top of v0.9.15's foundation: 5-port ready panel that shows REST/Viewer/Streams/Engine/iii-console in one boxed note, iii-console install probe + auto-install on first run, interactive global-install prompt that replaces the passive npx hint (so `agentmemory stop` actually works in new shells), onboarding wizard now wires every selected agent inline via the same `agentmemory connect` adapter the CLI exposes, plus a memory-share callout so users understand a single server feeds every wired agent. (2) Marketing site refresh against the v0.9.15 surface: new `AS FEATURED IN` bar (AlphaSignal · Agentic AI Foundation · Trendshift), six first-party agents in the featured grid (added pi + OpenHuman), MCP messaging reworded as opt-in surface so REST reads as the primary protocol. + +### Added + +- **5-port ready panel** ([PR #410](https://github.com/rohitg00/agentmemory/pull/410)). Replaces the single-line `Memory ready on :3111 · viewer on :3113 · try: agentmemory demo` hint with a clack `p.note` panel listing all live endpoints — REST API, Viewer, Streams, Engine, iii console — each derived from the configured env vars (`AGENTMEMORY_URL`, `III_REST_PORT`, `III_VIEWER_PORT`, `III_STREAM_PORT`, `III_ENGINE_URL`) so a remote-bind setup reads correctly, not as hardcoded localhost. + +- **iii console install probe + auto-install** (PR #410). New `ensureIiiConsole()` checks for the iii-console binary on PATH or in `~/.local/bin`; if missing, prompts interactively to run `curl -fsSL https://install.iii.dev/console/main/install.sh | sh`. Console is first-class — not optional. On install acceptance the ready panel includes the binary's resolved path and a runnable launch hint (` -p `); on decline the panel surfaces the install one-liner. + +- **Interactive global-install prompt** (PR #410). Replaces the passive `p.log.info` npx hint with a `p.confirm` on first npx run that runs `npm install -g @agentmemory/agentmemory@` inline. Suppressible via `preferences.skipGlobalInstall` so we never ask twice. Closes the v0.9.15-era footgun where users typed `agentmemory stop` in a new shell and hit `command not found`. + +- **Onboarding wires selected agents inline** ([PR #408](https://github.com/rohitg00/agentmemory/pull/408)). After the multi-select agents step in `runOnboarding`, asks `Run \`agentmemory connect \` for each selected agent now? [Y/n]` and dispatches each through the existing `runAdapter` path used by the explicit `agentmemory connect` command. Successes + failures get bucketed in a summary block (`Wired: claude-code, codex, cursor · Skipped/failed: hermes (manual install required)`). Cancellation prints the explicit per-agent commands for the user to run later. + +- **Memory-share callout** (PR #408). Between the agents multi-select and the provider single-select the wizard now prints a verbatim note: `All selected agents share the same memory at :3111. A memory saved by Claude Code is visible to Codex + Cursor instantly.` Closes the most common confusion ("does the same memory work across agents?") we were getting on the v0.9.15 install path. + +- **AS FEATURED IN bar on agent-memory.dev**. New `FeaturedIn` component between Hero and Stats. Three cards with real brand marks: AlphaSignal (github.com/Alpha-Signal avatar, links to the AlphaSignal Substack deep-dive), Agentic AI Foundation (self-hosted wordmark, inverted to white-on-dark for the brutalist palette), Trendshift (their official badge endpoint at `trendshift.io/api/badge/repositories/25123` which bakes the live rank + star count into the image). 3-column grid on desktop, 1-column stack on mobile, keyboard-accessible (`:focus-visible` outline). + +### Changed + +- **MCP messaging reworded as opt-in surface** ([PR #409](https://github.com/rohitg00/agentmemory/pull/409)). The endpoints summary line in `src/index.ts` was foregrounding MCP equally with REST — `Endpoints: 107 REST + 51 MCP tools + 6 MCP resources + 3 MCP prompts`. Users kept reading MCP as compulsory. Now: `REST API: 121 endpoints at http://localhost:/agentmemory/*` (primary), plus a second line `MCP surface (opt-in via \`npx @agentmemory/mcp\`): 51 tools · 6 resources · 3 prompts`. Each `connect` adapter additionally prints a protocol-note line above its install summary so the user sees which surface they're wiring (native hooks vs MCP vs both). + +- **CLI `--help` mcp subcommand description** (PR #409). Was `Start standalone MCP server (no engine required)`. Now: `Start standalone MCP shim — opt-in surface for MCP-only clients (Cursor, Gemini CLI, etc). REST always available at :3111.` + +- **Engine version-mismatch warning copy** (PR #410). The warning that fires when iii on PATH doesn't match `IIPINNED_VERSION` previously said `agentmemory v0.9.14+ pins v0.11.2`. Now reads `agentmemory v${VERSION} pins v${IIPINNED_VERSION}` so the string never lies post-release. + +- **CommandCenter — iii console messaging** (PR #415). `iii CONSOLE · OPTIONAL` → `iii CONSOLE · FIRST-CLASS`. Section lede now mentions both UIs (viewer + console) are first-class and installed inline by the CLI on first run. Bullet counts updated: dropped stale `33 functions` and `49 triggers` → `121 HTTP endpoints` (matches `generated-meta.json`). + +- **Compare table refreshed** (PR #415). MCP TOOLS row our column 44 → 51. New REST ENDPOINTS row (121) and NATIVE PLUGINS row (6: Claude/Codex/OpenClaw/Hermes/pi/OpenHuman). + +- **Agents grid refresh** (PR #415). Featured row expanded from 4 to 6 — added pi and OpenHuman. Codex CLI sub line updated to `NATIVE PLUGIN` (has 6 hooks now, not MCP-only). Section title `FOUR FIRST-PARTY` → `SIX FIRST-PARTY`. Lede mentions `agentmemory connect `. + +- **Hero CTA** (PR #415). `START IN 60 SECONDS` → `START IN 30 SECONDS`. Cold install + engine spawn measured 8-12s on v0.9.15 via the native binary path; 60s was the v0.9.0-era Docker-first claim. + +### Fixed + +- **CLI no longer kills its own parent process** (PR #410 follow-up via #411). `lsof -i :PORT -t` returns every PID with an active TCP connection — including the CLI's own keep-alive `fetch()` from `isEngineRunning()`. Now restricts to `-sTCP:LISTEN` and filters `process.pid` from the candidate set. The bug used to surface as exit code 137 with state files left stranded. + +- **Splash banner ASCII** ([PR #411](https://github.com/rohitg00/agentmemory/pull/411)). The hand-drawn block-art "agentmemory" wordmark in `src/cli/splash.ts` had broken middle glyphs (`_ _` instead of `_ __` around the 'n', merged 'tm/me' segments). Replaced with verified `figlet agentmemory` standard-font output. All 6 rows render at exactly 70 cols, regenerable. + +- **README install hoisted to top** (PR #411). Install section was buried at line 306 below benchmarks and comparison tables. Moved a 4-line install block right under the nav anchors at the top with the bare `agentmemory` command leading. Quick-start kept below for the in-depth walkthrough. Adds an npx-cache caveat with three workarounds (`npm install -g`, `npx -y @latest`, manual `rm -rf ~/.npm/_npx` annotated as POSIX-only). + +### Infrastructure + +- New modules: `src/cli/connect/{index,types,claude-code,codex,cursor,gemini-cli,openclaw,hermes,pi,openhuman,json-mcp-adapter}.ts`, `src/cli/doctor-diagnostics.ts`, `src/cli/remove-plan.ts`, `src/cli/splash.ts`, `src/cli/preferences.ts`, `src/cli/onboarding.ts`, `src/logger.ts` (bootLog shim) — actually shipped in v0.9.15; relisted here only to call out that v0.9.16 keeps every module backward-compatible (no signature breaks on `runOnboarding`, no field removals from `Prefs`). +- New tests: existing CLI test suites continue at 944+ passing. mcp-standalone pre-existing failures unrelated. +- Website: new `FeaturedIn` component (~150 LOC across `.tsx` + `.module.css`); `next.config.ts` adds `aaif.io`, `trendshift.io`, `raw.githubusercontent.com` to `remotePatterns`. + +[0.9.16]: https://github.com/rohitg00/agentmemory/compare/v0.9.15...v0.9.16 + +## [0.9.15] — 2026-05-15 + +DevEx overhaul. Four PRs landed simultaneously rebuilding the first-run experience to SkillKit-grade polish: splash banner + interactive agent grid + provider picker + smart-defaults preferences, `agentmemory connect ` to automate native-plugin install for 8 agents, interactive `doctor` v2 with Fix/Skip/More/Quit prompts and a `--all` auto-fix flag, `agentmemory remove` for clean uninstall with destruction-plan confirmation, plus five silent-killer fixes around viewer port collisions, engine version-mismatch detection, `stop --force` override, adopt-on-attach state recording, and an npx-to-global-install hint. + +### Added + +- **Splash banner + onboarding wizard** ([PR #403](https://github.com/rohitg00/agentmemory/pull/403)). Terminal-width-aware ASCII (full at ≥120 cols, compact at 80–119, single-line below 80), `NO_COLOR`-aware. First-run flow: multi-select 8 native-plugin agents + 8 MCP-server agents (`⟁ Claude Code`, `◫ Cursor`, `◎ Codex`, `✦ Gemini CLI`, `⬡ OpenCode`, etc), single-select LLM provider (Anthropic / OpenAI / Gemini / OpenRouter / MiniMax / BM25-only), seeds `~/.agentmemory/.env` with the chosen provider's `*_API_KEY=` line commented. Subsequent runs skip the splash. + +- **`~/.agentmemory/preferences.json`** (PR #403). Schema-versioned JSON with `{ lastAgent, lastAgents, lastProvider, skipSplash, skipNpxHint, firstRunAt }`. Atomic write via `.tmp` + rename, graceful defaults on read failure. Exports `isFirstRun()`, `readPrefs()`, `writePrefs()`, `resetPrefs()`. + +- **`agentmemory connect ` command** ([PR #402](https://github.com/rohitg00/agentmemory/pull/402)). Automates native-plugin install for `claude-code`, `codex`, `cursor`, `gemini-cli`, `openclaw` (end-to-end working) plus stubs for `hermes`, `pi`, `openhuman` (which print manual-install hints until deeper YAML/TS adapters land). Each adapter: detect → backup the agent's existing config to `~/.agentmemory/backups/-.` → merge → re-read & verify → idempotent on re-run. Supports `--dry-run`, `--force`, `--all`. Interactive picker when run without an agent argument. + +- **`agentmemory remove` command** ([PR #406](https://github.com/rohitg00/agentmemory/pull/406)). Tears down everything agentmemory installed: pidfile + state file + preferences + backups + `~/.local/bin/iii` (only when it matches the version we installed) + any agent connections. Asks separately for `.env` (holds API keys) and for the memory data dir. Requires two confirmations by default. Supports `--force`, `--keep-data`. + +- **`agentmemory doctor` v2** (PR #406). Replaces the passive reporter with an interactive fixer. Each diagnostic prints problem + cause + fix-preview, then offers Fix / Skip / More / Quit. Checks: missing `.env`, missing LLM key, engine version mismatch, viewer port unreachable, stale pidfile, empty API keys, iii on PATH outside `~/.local/bin/iii`. New flags: `--all` (apply every fix, for CI), `--dry-run` (show plan only). + +- **`agentmemory stop --force`** ([PR #405](https://github.com/rohitg00/agentmemory/pull/405)). Bypasses the Docker-compose heuristic refusal so engines started before v0.9.14 (which had no state file) can be torn down without a hand-rolled `lsof | xargs kill -9`. + +- **`--reset` flag**. Wipes preferences and re-runs the onboarding wizard (PR #403). + +- **`--verbose` / `AGENTMEMORY_VERBOSE=1`**. Restores the pre-v0.9.15 25-line `[agentmemory] X` engine-boot log stream for debugging (PR #403). Default is muted to a single ready-line. + +### Changed + +- **First-run output trimmed from 30+ lines to ~10**. The `[agentmemory] Worker v0.9.x` boot log stream is now buffered behind a `bootLog` shim (`src/logger.ts`) and only surfaces when `--verbose` is passed. The default surface is the splash banner, the onboarding prompts (first run only), a single engine spinner, and a one-line ready hint: `Memory ready on :3111 · viewer on http://localhost:3113 · try: agentmemory demo`. + +- **`isEngineRunning()` short-circuit now adopts the engine** ([PR #405](https://github.com/rohitg00/agentmemory/pull/405)). When the CLI finds an existing engine on `:3111`, it now writes `~/.agentmemory/iii.pid` (resolved via `lsof -i :PORT -sTCP:LISTEN -t`) and `~/.agentmemory/engine-state.json` (`{kind:"native", configPath, attached:true}`) if neither exists. Closes the migration gap where pre-v0.9.14 engines could not be stopped via `agentmemory stop` because no state file was written by the older code. + +- **Viewer port auto-bump** (PR #405). When `:3113` is taken, the viewer now retries 3114 → 3115 → … up to 3122 before failing loud. Pre-fix behaviour was a silent `Viewer port 3113 already in use, skipping viewer.` which left users staring at the previous run's stale viewer. + +- **Engine version-mismatch warning** (PR #405). When the iii binary on PATH (or attached engine) is not the pinned `IIPINNED_VERSION` (currently v0.11.2), the CLI now prints a clearly-labelled `p.log.warn` with the override path (`AGENTMEMORY_III_VERSION=...` env var or downgrade curl one-liner). Pre-fix was silent acceptance — v0.11.6 on PATH led to undebuggable EPIPE loops. + +- **npx PATH hint** (PR #405). After the engine is ready, runs invoked via `npx` get one extra line: `Tip: install globally for the bare \`agentmemory\` command: npm install -g @agentmemory/agentmemory`. Suppressible via `preferences.skipNpxHint`. + +### Fixed + +- `lsof -i :PORT -t` was returning client PIDs alongside the LISTEN-socket owner (already fixed in v0.9.14 via the `-sTCP:LISTEN` flag + `process.pid` filter; called out here so anyone bisecting the wave knows the LISTEN flag is what stopped the CLI from killing itself). + +### Infrastructure + +- New modules: `src/cli/splash.ts`, `src/cli/preferences.ts`, `src/cli/onboarding.ts`, `src/cli/connect/{index,types,claude-code,codex,cursor,gemini-cli,openclaw,hermes,pi,openhuman,json-mcp-adapter}.ts`, `src/cli/doctor-diagnostics.ts`, `src/cli/remove-plan.ts`, `src/logger.ts` (bootLog shim). +- New tests: `test/preferences.test.ts` (7), `test/cli-connect.test.ts` (13), `test/cli-doctor-fixes.test.ts` (18), `test/cli-remove.test.ts` (13). 944 tests passing, 10 pre-existing `mcp-standalone.test.ts` failures unrelated to this wave. + +[0.9.15]: https://github.com/rohitg00/agentmemory/compare/v0.9.14...v0.9.15 + +## [0.9.14] — 2026-05-15 + +CLI bootstrap rework so `npx @agentmemory/agentmemory` stops failing on Rancher Desktop and other Docker-shim daemons. The native iii-engine binary is now the first-class start path; Docker becomes opt-in. Also ships `agentmemory stop` so engines started in the background can be torn down without `lsof | xargs kill`. README agents grid reorders OpenHuman next to the other native-integration agents. + +### Added + +- **`agentmemory stop` command** ([PR #396](https://github.com/rohitg00/agentmemory/pull/396)). Reads `~/.agentmemory/iii.pid` first, falls back to `lsof -i :PORT -sTCP:LISTEN -t`, sends `SIGTERM`, waits 3s, escalates to `SIGKILL`. iii-engine doesn't currently handle `SIGTERM` cleanly so the SIGKILL escalation is what actually frees the port. State file (`~/.agentmemory/engine-state.json`) records whether the engine was started natively or via `docker compose up -d`, so `stop` runs `docker compose -f down` for Docker engines instead of signaling the host's Docker socket proxy by accident. + +- **`AGENTMEMORY_USE_DOCKER=1` env var**. Opt-in path for users who want the bundled `docker-compose.yml` to keep handling iii-engine lifecycle. Without it, the CLI prefers the native binary in `~/.local/bin/iii`. Documented in `npx @agentmemory/agentmemory --help`. + +### Changed + +- **`startEngine()` fallback order rewritten** ([PR #396](https://github.com/rohitg00/agentmemory/pull/396)). New tier order: (1) `iii` on PATH, (2) `~/.local/bin/iii` or other fallback paths, (3) interactive clack `p.select` with three choices — auto-install the pinned v0.11.2 binary, use Docker compose, or print manual install instructions and exit, (4) Docker compose only via explicit opt-in or the post-install failure fallback, (5) fail-loud with install instructions. CI / non-TTY environments auto-pick install. The Docker fallback was tier 2 and silently fired on every cold start; on Rancher Desktop `docker compose up -d` returns 0 even when the daemon's pull silently fails, which is what produced the "engine started but REST never responded" misdiagnoses we've been seeing this week. + +- **Installer logic extracted from `runUpgrade` into `runIiiInstaller()`**. Both first-run and `agentmemory upgrade` now share the same pinned-v0.11.2 curl-and-tar path. The pre-v0.9.14 installer only ran on `npx @agentmemory/agentmemory upgrade`, so first-time users never auto-installed. + +- **`installInstructions()` copy reordered**. The curl one-liner now leads (path A), Docker is path B with the `AGENTMEMORY_USE_DOCKER=1` env-var hint. The historical "Why pinned" rationale moved out of the failure note (it's still in the source comment for anyone debugging the pin choice). + +- **README agents grid reordered** ([PR #397](https://github.com/rohitg00/agentmemory/pull/397)). Row 1 is now Claude Code → Codex CLI → OpenClaw → Hermes → pi → OpenHuman → Cursor → Gemini CLI. OpenHuman moved from slot 3 to slot 6 so the native-Memory-trait callout reads cleanly alongside the other native-integration agents. + +### Fixed + +- **CLI no longer kills its own parent process**. `lsof -i :PORT -t` returns every PID with an active TCP connection to the port, including the CLI's own keep-alive `fetch()` from `isEngineRunning()`. Without a LISTEN filter, `agentmemory stop` would SIGKILL itself — exit code 137, state files never cleaned up. Now filters to `-sTCP:LISTEN` and drops `process.pid` from the candidate set. + +- **`agentmemory stop` no longer clears the pidfile when a stale process holds the port**. The HTTP probe can fail while the engine is hung, paused, or in a half-closed state. The pre-fix behaviour cleared the pidfile and printed "Nothing to stop" — the next run would silently start a second engine on a port that the first engine still owns. Now preserves the pidfile and surfaces the live PIDs with `ps -p` + `lsof` hints so the operator can investigate before manual cleanup. + +- **Docker-started engines stop safely**. The pre-fix code called `findEnginePidsByPort` and signaled whatever held :3111. When the engine was started via `docker compose up -d`, that's the host's Docker socket proxy (`com.docker.backend`, `vmnetd`), not the engine — killing it took down Docker Desktop networking for every other container. The new state file lets `runStop` detect Docker-managed engines and run `docker compose down` instead. + +### Infrastructure + +- Engine process now writes both `~/.agentmemory/iii.pid` and `~/.agentmemory/engine-state.json` at spawn. State file is cleared on clean shutdown or abnormal exit; pidfile is preserved when stale PIDs hold the port so the operator can investigate. + +[0.9.14]: https://github.com/rohitg00/agentmemory/compare/v0.9.13...v0.9.14 + +## [0.9.13] — 2026-05-15 + +Six PRs landed since v0.9.12 — `.env.example` discovery shipped (#372), CJK BM25 tokenizer landed (#344 / PR #362), `benchmark/load-100k.ts` load harness landed (#346 / PR #363), one-click deploy templates for fly.io / Railway / Render / Coolify added (#343 / PR #361), Gemini provider defaults moved to current GA models (#246 + #368 / PR #370), and the in-tree Python ecosystem story switched from a duplicate REST client to a one-page `iii-sdk` example (#342 / PR #364). Plus 14 Dependabot security advisories closed via Next.js + PostCSS bumps. + +### Added + +- **`.env.example` at repo root + bundled in the npm tarball** ([#372](https://github.com/rohitg00/agentmemory/issues/372), closes [#47](https://github.com/rohitg00/agentmemory/issues/47), [#293](https://github.com/rohitg00/agentmemory/issues/293), partial [#233](https://github.com/rohitg00/agentmemory/issues/233)). Every env var actually read by `src/` is now documented in one place, grouped by surface (LLM provider, embedding provider, auth, search tuning, behaviour flags, CLI runtime, ports, iii engine pin, Claude Code bridge, Obsidian export). Every line is commented out by default so the file ships as a config template, not a config. The npm package now lists `.env.example` in its `files` field so `npm i -g @agentmemory/agentmemory` carries it. + +- **`agentmemory init` command**. Copies the bundled `.env.example` to `~/.agentmemory/.env` if that file doesn't already exist; refuses to overwrite an existing config and prints a diff command pointing at the latest template. Wired into the CLI help block alongside `status` / `doctor` / `demo` / `upgrade` / `mcp` / `import-jsonl`. + +- **CI sync-checker for `.env.example`** (`scripts/check-env-example.mjs`). Walks every `.ts` / `.mts` / `.mjs` / `.js` file under `src/`, extracts `process.env["KEY"]` / `env["KEY"]` / `getMergedEnv()["KEY"]` / `getEnvVar("KEY")` references, and fails CI when `src/` reads an env var the template doesn't document (or vice versa). Plugged into `.github/workflows/ci.yml` after `npm test`. Initial bootstrap: 60 keys in sync. + +- **CJK tokenizer for BM25 search** ([#344](https://github.com/rohitg00/agentmemory/issues/344), PR [#362](https://github.com/rohitg00/agentmemory/pull/362)). New `src/state/cjk-segmenter.ts` detects CJK input by Unicode block and routes to `@node-rs/jieba` (Chinese, native, no model download), `tiny-segmenter` (Japanese, pure JS, ~25 KB), or rule-based syllable-block split (Korean). Both segmenters declared in `optionalDependencies` so the base install stays lean; soft-fail with a one-time stderr hint when the dep is missing. Order-preserving single-pass tokenization across mixed CJK + non-CJK runs (regression test for `"abc 메모리 def 项目 ghi"` returns `["abc","메모리","def","项目","ghi"]`). + +- **`benchmark/load-100k.ts` load harness** ([#346](https://github.com/rohitg00/agentmemory/issues/346), PR [#363](https://github.com/rohitg00/agentmemory/pull/363)). Hand-rolled, dependency-free harness that seeds N synthetic memories against a local daemon at `http://localhost:3111` and records p50 / p90 / p99 latency + throughput for `POST /agentmemory/remember`, `POST /agentmemory/smart-search`, and `GET /agentmemory/memories?latest=true` across the matrix N ∈ {1k, 10k, 100k} × concurrency C ∈ {1, 10, 100}. Content drawn from a seedable `mulberry32` PRNG so re-running against the same build produces the same seed corpus. Results land in `benchmark/results/load-100k-.json`. Wired as `npm run bench:load`. + +- **One-click deploy templates** for fly.io, Railway, Render, and Coolify ([#343](https://github.com/rohitg00/agentmemory/issues/343), PR [#361](https://github.com/rohitg00/agentmemory/pull/361)). Each template under `deploy//` ships a multi-stage Dockerfile that `COPY --from=iiidev/iii:0.11.2`s the engine binary into a `node:22-slim` runtime, npm-installs `@agentmemory/agentmemory` under `/opt/agentmemory` with `iii-sdk` pinned via `package.json` overrides (avoids the caret-resolves-to-0.11.6 drift), and runs an entrypoint that rewrites the bundled `iii-config.yaml` to bind `0.0.0.0` + use absolute `/data` paths, chowns the platform-mounted volume to `node:node` via `gosu`, generates a first-boot HMAC secret, and exec's the agentmemory CLI as the unprivileged `node` user under `tini` (with `TINI_SUBREAPER=1`). Verified end-to-end on fly.io (machine in `iad`, 1 GB volume, healthcheck passing). + +- **`examples/python/`** quickstart + observation/recall flow showing `iii-sdk` (Python) calling `mem::remember` / `mem::smart-search` / `mem::context` directly over `ws://localhost:49134` ([#342](https://github.com/rohitg00/agentmemory/issues/342), PR [#364](https://github.com/rohitg00/agentmemory/pull/364)). Replaces a duplicate-transport Python REST client (initial PR #360, closed) with a single-SDK story — the same `iii-sdk` install (`pip install iii-sdk` / `cargo add iii-sdk` / `npm install iii-sdk`) talks to every agentmemory function from any language. + +### Changed + +- **Gemini provider defaults bumped to current GA models** (PR [#370](https://github.com/rohitg00/agentmemory/pull/370), closes [#368](https://github.com/rohitg00/agentmemory/pull/368), [#246](https://github.com/rohitg00/agentmemory/pull/246)). LLM default `gemini-2.0-flash` → `gemini-2.5-flash` (the moving `gemini-flash-latest` alias was rejected — release behaviour should be deterministic). Embedding default `text-embedding-004` → `gemini-embedding-001` (the previous default is deprecated and shuts down 2026-01-14 per `ai.google.dev/gemini-api/docs/deprecations`). Three implementation details ride along: (1) URL path `:batchEmbedContent` → `:batchEmbedContents`, (2) every request now sends `outputDimensionality: 768` so the returned vectors match `GeminiEmbeddingProvider.dimensions = 768` and the index-restore dim guard from #248 — no reindex needed, (3) returned vectors are L2-normalized before the result-array push because `gemini-embedding-001` does **not** normalize by default unlike `text-embedding-004` and without this the downstream cosine-similarity math silently collapses recall. `l2Normalize` warns once on a zero-norm embedding so operators can correlate index quality dips with upstream regressions. + +### Security + +- **14 open Dependabot advisories closed via Next.js + PostCSS bumps** (PR [#348](https://github.com/rohitg00/agentmemory/pull/348)). Closed: 13 Next.js advisories (middleware/proxy bypass + SSRF on WebSocket upgrades + DoS via connection exhaustion + CSP-nonce XSS + image-opt DoS + RSC cache poisoning + beforeInteractive XSS + segment-prefetch routes) by bumping the website's Next.js to `^16.2.6`. Plus the PostCSS XSS-via-unescaped-`` advisory closed by pinning to `^8.5.10` via `overrides` in `website/package.json`. Verified `npm audit --omit=dev` returns 0 and `npm run build` clean on Next 16.2.6. Dependabot now runs weekly against six update streams (npm × 5 paths + github-actions) per the new `.github/dependabot.yml`. + +### Contributors + +External contributors landed this release: + +- [@fatinghenji](https://github.com/fatinghenji) — pre-cleanup work on the OpenAI-compatible LLM provider (PR #240 / PR #307); the universal-adapter shape will land in the next minor once branch maintenance catches up. +- [@AmmarSaleh50](https://github.com/AmmarSaleh50) — Gemini embedding migration with L2-norm + 768-dim plumbing (PR #246, folded into #370). +- [@yut304](https://github.com/yut304) — Gemini LLM default deprecation fix (PR #368, folded into #370). + +Thanks also to the issue reporters whose precise repros drove the search-quality + viewer + config-template work this cycle. + +## [0.9.12] — 2026-05-13 + +Four landed PRs since v0.9.11 — one type-correctness fix, one search-quality fix (BM25 unicode + vector-index live-write), one viewer hardening (CSP-clean fonts + load-error surface), and one integrations security hardening (bearer token over plaintext HTTP). + +### Fixed + +- **BM25 tokenizer now indexes non-ASCII (Greek, accented Latin, Hebrew, Arabic) and the vector index is actually populated at runtime** ([#327](https://github.com/rohitg00/agentmemory/pull/327), closes [#295](https://github.com/rohitg00/agentmemory/issues/295)). `src/state/search-index.ts` previously stripped every non-ASCII character via `\w` (JS `\w` is ASCII-only), so non-English search returned empty results across the board. Regex replaced with `/[^\p{L}\p{N}\s/.\\-_]/gu` — keeps Unicode letters/numbers, preserves underscore (matters for `memory_recall`-style identifiers), keeps existing path/separator handling. Separately, `VectorIndex.add()` had **zero callers** anywhere in `src/` — the vector index was loaded from disk at startup and never updated at runtime, so hybrid search returned stale results forever. New `vectorIndexAddGuarded()` helper in `src/functions/search.ts` wires `vectorIndex.add()` into `remember.ts`, `observe.ts` synthetic-compression branch, `compress.ts` post-LLM compression, and the cold-start `rebuildIndex()` walk — with a per-write dimension guard (symmetric to the persistence-load guard from #248), 16k-char input clipping (so an oversized memory can't 400 the embed call), and consistent stderr logging that no longer swallows embed failures. `migrateVectorIndex()` utility re-embeds every memory + per-session observation against a new provider when dimensions change; per-session try/catch isolation so one bad session can't abort the whole migration; structured `failedSessions[]` result with a `""` sentinel that distinguishes a catastrophic list-failure from per-session failures. Soft-fail throughout: a downed embedder never breaks an upstream save. Live-tested end-to-end against Greek fixtures (thanks @nik1t7n for the original repro on Cyrillic content; test fixtures swapped to Greek before merge). + + **CJK caveat preserved**: this fix recovers Greek, Cyrillic, accented Latin, Hebrew, Arabic, and other space-delimited scripts. CJK languages without spaces between characters still tokenize as a single sentence-long token — separate concern, needs a segmenter (PR #224 area). + +- **`@agentmemory/mcp` standalone shim's `RetentionScore` type no longer declares `source` twice** ([#326](https://github.com/rohitg00/agentmemory/pull/326), closes [#277](https://github.com/rohitg00/agentmemory/issues/277)). `src/types.ts:835` and `:842` both declared `source?: "episodic" | "semantic"` on `RetentionScore`. TypeScript silently accepts duplicate property declarations when the types are identical, so the build never errored — but the documented JSDoc on the first declaration (the #124 back-compat note explaining `undefined` should probe both scopes) was effectively shadowed by the duplicate. Removed the second declaration; grep confirmed no caller writes `source` twice on the same `RetentionScore` row, so the cleanup is a pure type-correctness fix with no runtime change. Thanks @cl0ckt0wer for the precise file:line trace. + +- **Viewer dashboard no longer sticks on "Loading dashboard…" when the page loads** ([#335](https://github.com/rohitg00/agentmemory/pull/335), closes [#323](https://github.com/rohitg00/agentmemory/issues/323)). Two narrow fixes from @hem57's Windows repro: (1) removed the `` to `fonts.googleapis.com` — the viewer's strict CSP (`default-src 'none'`, `style-src 'unsafe-inline'`, `font-src 'self'`) blocks external stylesheet origins by design, so every page load logged a CSP violation for the font CSS and another for each blocked font file; system-font fallbacks were already declared on every `--font-*` CSS variable so dropping the external `` is a clean swap. (2) Wrapped `loadDashboard()` body in a `try/catch` that renders the error inline ("Dashboard failed to load: ") instead of leaving the placeholder text up forever — future "stuck Loading" reports now come with concrete error messages instead of just a screenshot of the placeholder. + +- **Integrations (hermes / openclaw / pi) now warn when sending the bearer token over plaintext HTTP to a non-loopback host** ([#315](https://github.com/rohitg00/agentmemory/pull/315), closes [#275](https://github.com/rohitg00/agentmemory/issues/275)). Symmetric guard across all three plugin runtimes (Python / mjs / TypeScript): a request that would attach `Authorization: Bearer ` to a `http://:port` URL now logs a one-time stderr warning telling the operator the token is observable on the wire. Loopback hosts (`localhost`, `127.0.0.1`, `::1`) and `https://` URLs are exempt. New env knob `AGENTMEMORY_REQUIRE_HTTPS=1` escalates the warning to a hard refusal — the plugin throws before any request is sent, so a misconfigured deployment can fail loudly instead of leaking the bearer once. Edge cases verified by 13 tests: IPv6 `[::1]` loopback, RFC1918 LAN IPs (`192.168.x.x` / `10.x.x.x` warn — NOT loopback), lookalike hostnames (`localhost.evil.com` warns), no-secret short-circuit (guard never fires when no bearer would be sent), https-with-secret silent. Thanks [@mvanhorn](https://github.com/mvanhorn) for the cross-runtime implementation. + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.11 → 0.9.12 to lockstep with the main package. + +## [0.9.11] — 2026-05-13 + +Three additions on top of v0.9.10: OpenAI Codex got a plugin platform and agentmemory now ships a Codex manifest + marketplace alongside the existing Claude Code one (so `codex plugin marketplace add rohitg00/agentmemory` installs MCP + 6 hooks + 4 skills in one step); the OpenClaw integration now actually claims the `plugins.slots.memory` slot via `registerMemoryCapability` (older builds advertised the slot via manifest `kind` but never declared the capability so the slot reported `unavailable`); and the marketing website's hero CTA row now ships a live "Star on GitHub" button. + +### Added + +- **Codex plugin support** ([#311](https://github.com/rohitg00/agentmemory/pull/311)). `plugin/.codex-plugin/plugin.json` Codex manifest pointing at the same shared `.mcp.json` + `skills/` directory the Claude Code manifest uses, plus a Codex-shaped `plugin/hooks/hooks.codex.json` that registers exactly the events Codex's hook engine supports (`SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop`) and drops the Claude-Code-only ones (`SubagentStart`, `SubagentStop`, `SessionEnd`, `Notification`, `TaskCompleted`, `PostToolUseFailure`). Verified against `codex-rs/hooks/src/engine/discovery.rs` that Codex injects `CLAUDE_PLUGIN_ROOT` into hook subprocesses for OOTB compat with existing Claude Code plugin scripts — so the same `${CLAUDE_PLUGIN_ROOT}/scripts/...` references work on both hosts. `.codex-plugin/marketplace.json` at the repo root publishes the plugin via the Codex marketplace API (`git-subdir` source pointing at `./plugin`), so end users run `codex plugin marketplace add rohitg00/agentmemory && codex plugin install agentmemory` once and get MCP + lifecycle hooks + 4 skills (`/recall`, `/remember`, `/session-history`, `/forget`). + +- **`Star on GitHub` button in the website hero CTA row** ([#316](https://github.com/rohitg00/agentmemory/pull/316)). Adds a ghost-style `GitHubStarButton` component next to `START IN 60 SECONDS` and `SEE IT MOVE` with inline SVG star icon, `STAR` label, and a live stargazer count fetched once on mount from `api.github.com/repos/rohitg00/agentmemory`. Count is cached in `localStorage` for 30 minutes per repo. Graceful degradation: if the API is unreachable / rate-limited / blocked, the button still renders without the count. No new dependencies. + +### Fixed + +- **OpenClaw `plugins.slots.memory = "agentmemory"` now reports as available, not `unavailable`** ([#310](https://github.com/rohitg00/agentmemory/pull/310)). On OpenClaw `2026.4.9+`, the integration declared `"kind": "memory"` in its manifest and wired `before_agent_start` / `agent_end` hooks but **never called `api.registerMemoryCapability(...)`** — so OpenClaw's memory-slot machinery saw no claim on the slot even though the hooks and REST API worked end-to-end. The fix lands `api.registerMemoryCapability({ promptBuilder })` at register time when the host exposes it, with the `promptBuilder` accepting the documented `{ availableTools, citationsMode? }` params and emitting a three-line block identifying agentmemory as the active provider. Older OpenClaw builds without the capability API still load via the existing hook-only path (`typeof api.registerMemoryCapability === "function"` guard). The PR does **not** ship a `MemoryPluginRuntime` adapter because OpenClaw's current `MemoryRuntimeBackendConfig` type is exactly `{ backend: "builtin" } | { backend: "qmd"; ... }` — both in-process backends that don't fit an external REST shape. Verified against `openclaw@2026.5.7`'s `plugin-sdk/src/plugins/types.d.ts` and `memory-state.d.ts` declarations directly. (closes the bug premise originally surfaced in the closed PR #302, which had attempted the same goal but with an import path that wasn't in the package's `exports` map and a symbol that didn't exist in any released openclaw version.) + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.10 → 0.9.11 to lockstep with the main package. +- README now distinguishes **Codex CLI (MCP only)** from **Codex CLI (full plugin)** in the per-host install table and lists the marketplace install command for the latter. + +## [0.9.10] — 2026-05-12 + +Three deployment-shape fixes reported live by [@flamerged](https://github.com/flamerged) ([#299](https://github.com/rohitg00/agentmemory/issues/299), [#301](https://github.com/rohitg00/agentmemory/issues/301)): the v0.9.7 docker-compose persistence fix was incomplete because the distroless engine runs as UID 65532 but `docker volume create` initializes the named volume mountpoint as `root:root mode 755`; the viewer's port-detection JS hardcoded `'3113'` so any reverse-proxy fronting on port 80/443 returned an empty dashboard; and the `mem::context` budget loop short-circuited the entire selection on the first oversized block — pinning a large slot could starve all other context blocks even when smaller ones would have fit. + +### Fixed + +- **`docker-compose.yml` now chowns the named volume to UID 65532 before the engine starts.** The `iiidev/iii` image is distroless and runs as UID 65532; docker initializes named volumes as `root:root mode 755`; the engine has no `sh` / `chown` to self-heal at startup, so writes to `/data/state_store.db` and `/data/stream_store` returned `Permission denied (os error 13)`. The engine silently buffered in RAM, the API kept reporting `success: true`, and state evaporated on every container restart — the exact symptom v0.9.7's working-directory fix set out to solve. The compose file now ships an `iii-init` one-shot service (`busybox:1.36`, ~4 MB, exits in <100 ms) that runs `chown -R 65532:65532 /data && chmod 755 /data` once at compose-up, plus a `user: "65532:65532"` directive on the `iii-engine` service and a `depends_on.iii-init.condition: service_completed_successfully` gate so the engine never starts before the volume is owner-correct. Existing deployments that already hit the bug should run `docker compose down && docker compose up -d` after upgrading — the init container will fix the volume in place on the first run. (#301, closes [#301](https://github.com/rohitg00/agentmemory/issues/301) — thanks [@flamerged](https://github.com/flamerged) for the precise UID + mountpoint trace and the chown workaround that confirmed the fix shape) + +- **Viewer dashboard now works behind any reverse proxy on standard ports (80 / 443).** `src/viewer/index.html`'s port-detection JS resolved the REST base URL through `params.get('port') || window.location.port || '3113'` — when the page was served on port 80 or 443, `window.location.port` was the empty string and the fallback hardcoded `':3113'`, so every browser-side `/agentmemory/*` fetch missed the proxied origin and went to `:3113` (typically loopback-only on these deployments, so unreachable from outside). The viewer rendered cleanly but every panel showed the empty "first run" state — even though `curl /agentmemory/sessions` (no explicit port) returned correct data. The fix uses `window.location.origin` as the REST base when neither `?port=` nor `window.location.port` is set, and constructs the WebSocket URL from `window.location.host` (with whatever port the page was served on) so the same-origin path works for both REST and live updates. Behaviour with an explicit `?port=N` or non-default `window.location.port` is unchanged. (#299, closes [#299](https://github.com/rohitg00/agentmemory/issues/299) — thanks [@flamerged](https://github.com/flamerged) for the deployment context + the lines-927–930 trace) + +- **`mem::context` budget loop no longer bails the entire selection on the first oversized block.** The selection loop in `src/functions/context.ts` used `break` when `usedTokens + block.tokens > budget`, so a single oversized block at the top of the sorted list — most commonly a fat pinned slot under #288's new injection path — cut off every smaller block that would have fit. Switched to `continue`, so smaller blocks downstream of an oversized one can still slip into the remaining budget. Net effect: pinned-slot priority semantic is preserved (pinned blocks still sort first via `recency: Date.now()`), but the worst case no longer starves the entire context. Total tokens still bounded by `tokenBudget` (default 2000); only the composition under contention changes. + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.9 → 0.9.10 to lockstep with the main package. + +## [0.9.9] — 2026-05-11 + +Two field-reported regressions closed: pinned memory slots never reached SessionStart context (the `renderPinnedContext` and `listPinnedSlots` helpers shipped in v0.7 had no callers), and the MiniMax compression provider read its base URL straight off `process.env`, missing `~/.agentmemory/.env` values that the rest of agentmemory loads through the shared merged-env path. + +### Fixed + +- **Pinned memory slots are now actually injected into SessionStart context.** [@wyh0626](https://github.com/wyh0626) traced ([#286](https://github.com/rohitg00/agentmemory/issues/286)) that `renderPinnedContext` (`src/functions/slots.ts:182`) and `listPinnedSlots` (`src/functions/slots.ts:169`) — introduced in [#182](https://github.com/rohitg00/agentmemory/pull/182) — had zero callers in `src/`. `mem::context` (the function `/agentmemory/session/start` invokes and that `session-start.mjs` reads back into Claude Code) read profile / sessions / summaries / observations but never slots, so anything an agent wrote into a pinned slot via `mem::slot-replace` / `mem::slot-append` / `mem::slot-reflect` sat in KV and never reached the next session. The `mem::slot-reflect` writer fires on the Stop hook when `AGENTMEMORY_REFLECT=true` and persists into `pending_items` / `session_patterns` / `project_context` — the reflect → next-session loop was open. The fix wires `listPinnedSlots` → `renderPinnedContext` into `mem::context` behind `isSlotsEnabled()`, matching the existing `isGraphExtractionEnabled()` gate convention. Pinned slot content lands as a `type: "memory"` block with `recency: Date.now()` so it sorts to the top of the budget-bounded selection. `AGENTMEMORY_SLOTS=false` (the default) keeps the existing behaviour untouched. (#288, closes [#286](https://github.com/rohitg00/agentmemory/issues/286) — thanks [@wyh0626](https://github.com/wyh0626) for the precise zero-callers trace and the six-case regression suite covering global / multi-sort / unpinned-skip / empty-skip / project-shadows-global / gate-off) + +- **MiniMax provider now honors `MINIMAX_BASE_URL` from `~/.agentmemory/.env`, with the default pointed at the current Anthropic-compatible host.** [@rager306](https://github.com/rager306) reported ([#285](https://github.com/rohitg00/agentmemory/issues/285)) v0.9.8 MiniMax compression failing `MiniMax API error 401: invalid api key` against a verified-good key. Direct `curl https://api.minimax.io/anthropic/v1/messages` with the same key succeeded; the control call against `https://api.minimaxi.com/anthropic` returned 401. The 401 was the *stale fallback host* answering — the key was fine. Root cause: split-brain env source. `src/config.ts` (provider detection + API-key load) reads `~/.agentmemory/.env` through the merged `getMergedEnv()` loader; `src/providers/minimax.ts` read `MINIMAX_BASE_URL` straight off `process.env`. Deployments that kept MiniMax config in `~/.agentmemory/.env` only (systemd / launchd / `--env-file` not exported into the worker shell) got the key loaded but the base URL fell through to the stale default. The provider now resolves `MINIMAX_BASE_URL` via `getEnvVar()` (same merged loader the rest of agentmemory uses), and the default is bumped from `api.minimaxi.com` to `api.minimax.io/anthropic` per [MiniMax's current Anthropic-compatible docs](https://platform.minimax.io/docs/api-reference/text-anthropic-api). (#289, closes [#285](https://github.com/rohitg00/agentmemory/issues/285) — thanks [@rager306](https://github.com/rager306) for the precise repro and the local-patch verification) + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.8 → 0.9.9 to lockstep with the main package. + +## [0.9.8] — 2026-05-11 + +Single-line follow-up to v0.9.7's MCP shim work. v0.9.7 surfaced probe failures, added an `AGENTMEMORY_FORCE_PROXY=1` escape hatch, and shipped `AGENTMEMORY_DEBUG=1` — but the *local-mode* `tools/list` branch was still returning only 4 tools when an agentmemory server was unreachable, not the documented 7-tool `IMPLEMENTED_TOOLS` set the shim's `InMemoryKV` actually backs. v0.9.8 fixes that. + +### Fixed + +- **`@agentmemory/mcp` local-mode `tools/list` now exposes all 7 `IMPLEMENTED_TOOLS`, not the 4-tool intersection with `ESSENTIAL_TOOLS`.** The local-fallback branch in `src/mcp/standalone.ts` filtered `getVisibleTools()` through `IMPLEMENTED_TOOLS`, but `getVisibleTools()` honors the shim process's own `AGENTMEMORY_TOOLS` env var (unset → "core" → 8 `ESSENTIAL_TOOLS`). The intersection of `ESSENTIAL_TOOLS` (8) and `IMPLEMENTED_TOOLS` (7) is exactly 4 tools: `memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`. Those four were the only ones MCP clients saw when no agentmemory server was reachable — even though the shim's `InMemoryKV` implements all seven (the four above plus `memory_export`, `memory_audit`, `memory_governance_delete`). The filter source was wrong: the shim dispatches by `IMPLEMENTED_TOOLS`, not by `ESSENTIAL_TOOLS`, so a server-tier env var should never have shaped the shim's local-fallback list. Switched to `getAllTools().filter((t) => IMPLEMENTED_TOOLS.has(t.name))`, which picks the same 7 names from the unfiltered universe regardless of `AGENTMEMORY_TOOLS`. Refactored the `tools/list` handler into an exported `handleToolsList()` for direct testability, and added a regression test asserting the local-fallback path returns exactly the 7 names under both unset and `core` modes. Verified live via stdio against a downed server: shim now returns 7 names (was 4). (#283, closes [#234](https://github.com/rohitg00/agentmemory/issues/234)) + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.7 → 0.9.8 to lockstep with the main package. + +## [0.9.7] — 2026-05-11 + +Four follow-up fixes to v0.9.6 reported live by [@jcalfee](https://github.com/jcalfee) ([#234](https://github.com/rohitg00/agentmemory/issues/234)) and [@satabd](https://github.com/satabd) ([#278](https://github.com/rohitg00/agentmemory/issues/278)): the `@agentmemory/mcp` shim gained probe diagnostics and an escape hatch for clients that can reach the server via a non-default route, the Docker compose stack now persists state across `docker compose down` (the volume binding was unused due to a working-directory mismatch in the engine config), a cosmetic `which iii` stderr leak was suppressed, and the engine container's log output is now bounded so a crash/restart spam loop can no longer fill the host disk. + +### Fixed + +- **`@agentmemory/mcp` standalone shim now surfaces probe failures and ships an escape hatch and a debug-trace knob.** The `livez` probe in `src/mcp/rest-proxy.ts` used a 500 ms timeout and silently swallowed every failure: when the probe failed, the shim fell back to the 7-tool `IMPLEMENTED_TOOLS` set with no log line explaining why. The probe now writes the URL, HTTP status (or thrown reason), and the active timeout to `stderr` on every failure; the default timeout is raised to 2000 ms; `AGENTMEMORY_PROBE_TIMEOUT_MS` overrides it for slow loopbacks; `AGENTMEMORY_FORCE_PROXY=1` skips the probe entirely and trusts `AGENTMEMORY_URL` outright (the right escape hatch when the shim can reach the server via a known route but not the host's `localhost`); and `AGENTMEMORY_DEBUG=1` traces `tools/list` end-to-end (`handle.mode`, response shape, returned tool count, local-fallback contents) so MCP integrations have first-class visibility into what the shim is actually returning over the wire. The shim verified end-to-end via stdio against an `AGENTMEMORY_TOOLS=all` server: `tools/list` returns all 51 tools. (closes [#234](https://github.com/rohitg00/agentmemory/issues/234), thanks [@jcalfee](https://github.com/jcalfee) for the host-vs-sandboxed-client repro and detailed log captures) + +- **Docker compose stack no longer loses state on `docker compose down`.** `iii-config.docker.yaml` configured `iii-state` and `iii-stream` with relative `file_path: ./data/...`, which the engine resolves against its container `WORKDIR=/home/nonroot` — not the `/data` mount where the named `iii-data` volume lives. State and stream stores were written to the ephemeral container layer and discarded on every container restart, so memories, BM25 index, and stream backlog vanished. Both paths are now absolute (`/data/state_store.db` and `/data/stream_store`), routing writes through the named volume as the compose file always intended. Existing users need a one-time `docker compose down -v` to clear the old empty volume layout before the upgrade. + +- **CLI banner no longer leaks `which: no iii in $PATH` when iii isn't installed.** `whichBinary()` in `src/cli.ts` called `execFileSync("which", ["iii"])` with default stdio, which inherits the child's `stderr` to the parent process — and GNU `which` writes "no iii in (...)" to `stderr` (with exit 1) on miss. The catch swallowed the throw but the stderr line had already drained into the user's terminal between the `agentmemory` banner and the "iii-engine ready" line. `stdio: ["ignore", "pipe", "pipe"]` now captures both streams. Pure cosmetic, no behavior change. + +- **Docker compose stack now caps engine container log size at 30 MB total.** [@satabd](https://github.com/satabd) reported the `iiidev/iii:0.11.2` engine container filling a host disk with a 129 GB `-json.log` when the engine fell into a crash/restart spam loop ([#278](https://github.com/rohitg00/agentmemory/issues/278)). The compose service now sets `logging.driver: json-file` with `max-size: 10m` and `max-file: 3`, so unbounded engine stdout/stderr can no longer eat the host's disk. The upstream engine spam itself is filed against `iiidev/iii` — this is the compose-side guardrail. + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.6 → 0.9.7 to lockstep with the main package. + +## [0.9.6] — 2026-05-10 + +Three reliability fixes that close field-reported regressions in v0.9.5: search/recall returns saved memories again, the standalone MCP shim no longer caps non-Claude clients at a 7-tool subset, and the Claude Code session/subagent hooks no longer block agent startup for up to five seconds against a slow or unreachable REST server. + +### Fixed + +- **`memory_smart_search` and `memory_recall` surface memories saved via `memory_save` again.** v0.9.5 indexed memories into BM25 (#258), so search ranked them correctly — but the result-enrichment step on both retrieval paths still queried `KV.observations(sessionId, obsId)`. Memories live in `KV.memories` under a synthetic sessionId, so every hit was silently dropped and clients saw `results: []`. Both `HybridSearch.enrichResults` (which powers `/smart-search`) and `mem::search`'s observation map (which powers `/search` / `memory_recall`) now fall back to `KV.memories` when the observation lookup misses, coercing the `Memory` record into a `CompressedObservation` via a new shared `memoryToObservation` helper in `src/state/memory-utils.ts`. Verified live end-to-end against an iii-engine 0.11.2 stack: pre-fix both endpoints returned `[]` for a saved memory; post-fix the memory surfaces with `score > 0` on both. (#269, closes [#265](https://github.com/rohitg00/agentmemory/issues/265)) + +- **`@agentmemory/mcp` standalone shim now exposes the server's full tool surface to non-Claude clients.** With `AGENTMEMORY_TOOLS=all` on the server, OpenCode / Cursor / Gemini CLI / Cline users expected 51 tools; the shim filtered the response through a hardcoded 7-tool `IMPLEMENTED_TOOLS` set baked in for the local InMemoryKV fallback, so they got 4 (default) or 7 (with the env var). The shim now delegates `tools/list` to `GET /agentmemory/mcp/tools` when an agentmemory server is reachable, and forwards any non-essential tool to `POST /agentmemory/mcp/call` for server-side validation. The local InMemoryKV fallback is unchanged — it still implements only the 7 essential tools, with a clearer error pointing to `AGENTMEMORY_URL` when no server is reachable. Verified live end-to-end via stdio JSON-RPC driver: pre-fix `tools/list` returned 4 tools and `memory_lesson_save` raised "Unknown tool"; post-fix `tools/list` returned 51 and `memory_lesson_save` created a lesson. (#270, closes [#234](https://github.com/rohitg00/agentmemory/issues/234)) + +- **Claude Code session/subagent hooks no longer block agent startup waiting for a slow agentmemory.** `session-start.ts` awaited a 5000 ms POST and discarded the response whenever `AGENTMEMORY_INJECT_CONTEXT=false` (the default since 0.8.10) — pure latency. `subagent-start.ts` had a `// fire and forget` comment but the code awaited a 2000 ms POST. Under fan-out (Slack-bot orchestrators, multi-agent harnesses, fanned `claude -p` jobs) the awaited timeouts stack and feed back into the engine; the reporter hit a positive feedback loop that OOM-killed iii-engine. `session-start` now fire-and-forgets on the telemetry path and caps the inject path at 1500 ms (down from 5000 ms). `subagent-start` actually fire-and-forgets, capped at 800 ms. Verified live against a black-hole TCP listener (accepts, never replies): session-start (no inject) 5.05 s → 0.85 s, session-start (inject=true) 5.05 s → 1.55 s, subagent-start 2.05 s → 0.87 s. (#271, closes [#221](https://github.com/rohitg00/agentmemory/issues/221)) + +### Changed + +- `@agentmemory/mcp` package version bumped from 0.9.4 → 0.9.6 to lockstep with the main package, fixing a release-flow miss in v0.9.5. + +## [0.9.5] — 2026-05-09 + +Bug-fix patch focused on **search recall correctness** and **plugin compatibility**. Pins `iii-engine` to v0.11.2 because v0.11.6 introduces a new sandbox-everything-via-`iii worker add` model that agentmemory hasn't been refactored for yet — pin lifts once that refactor lands. Adds a hard guard against silent vector-index corruption, fixes BM25 indexing for memories saved via `memory_save`, and lands four Hermes plugin fixes that make the memory provider actually usable end-to-end. + +If you've been seeing `memory_smart_search` return empty results for memories you just saved, this release fixes that. If you've been hitting `hermes memory status` reporting "not available" against a healthy systemd-managed install, this release fixes that too. + +### Fixed + +- **BM25 search now indexes memories saved via `memory_save`.** `mem::remember` was writing to `KV.memories` but never calling `getSearchIndex().add()`, so `memory_smart_search` and `memory_recall` returned empty for everything saved through that path — for **every** version since v0.9.0. Synthesizes a `CompressedObservation` from the saved Memory (title + content + concepts + files) and adds it to BM25 right after the durable write. `rebuildIndex()` now walks `KV.memories` so a fresh rebuild covers the full corpus, and a startup backfill retroactively indexes pre-existing memories on first start after upgrade — no manual reindex required. New `SearchIndex.has(id)` is the idempotency gate. (#258, closes [#257](https://github.com/rohitg00/agentmemory/issues/257) — thanks @Nizar-BenHamida for the precise repro and log capture) + +- **Embedding providers no longer silently corrupt the vector index when an API returns wrong-dimension vectors.** `cosineSimilarity` returns `0` on length mismatch instead of throwing, so a wrong-size vector got stored, never matched anything, and the corresponding memory became invisible without a single log line. `withDimensionGuard()` now wraps every embedding provider at the factory boundary in `src/providers/embedding/index.ts` — `embed()`, `embedBatch()` (per-vector, indexed errors like `embedBatch[3]`), and `embedImage()` all throw a descriptive error when the returned `Float32Array` length doesn't match `provider.dimensions`. The persistence-restore path got the same defense: `IndexPersistence.load()` now refuses to start when persisted vectors mismatch the active provider, with an actionable error spelling out the recovery paths (re-embed / `AGENTMEMORY_DROP_STALE_INDEX=true` / switch back). (#248, closes [#247](https://github.com/rohitg00/agentmemory/issues/247) and [#256](https://github.com/rohitg00/agentmemory/issues/256) — thanks @AmmarSaleh50 for the issue analysis, the fix PR, and the test coverage) + +- **Hermes plugin: `handle_tool_call` now returns JSON strings, not raw Python dicts.** Hermes stores the return value as the tool result `content` field in session history. Anthropic-protocol providers reject non-string content with a 400 on the next request — once triggered, every subsequent request in the affected session 400s until the session JSON is hand-cleaned. Wrapped all four return paths (`memory_recall`, `memory_save`, `memory_search`, unknown-tool) in `json.dumps()` and tightened the return-type annotation `Any → str` on both the abstract base and the concrete class. Matches the contract that `src/mcp/standalone.ts` already honors. (#255, closes [#254](https://github.com/rohitg00/agentmemory/issues/254) — thanks @KyoMio for the Anthropic-protocol-specific repro) + +- **Hermes plugin: `hermes memory status` now reflects the real service state on systemd / launchd installs.** When agentmemory runs as an external service whose runtime config lives in `~/.agentmemory/.env`, those values never reach the Hermes CLI shell. Hermes status reads `os.environ` against `get_config_schema()`'s `env_var` keys, finds them unset, and reports the plugin as "not available" — even though the service is healthy. The plugin now preloads `~/.agentmemory/.env` at import time using `os.environ.setdefault`, bridging the agentmemory-managed and Hermes-managed config source-of-truths. Anything explicitly exported in the shell still wins. Best-effort: malformed / absent file is silently skipped. Both `~/.agentmemory/.env` and `$XDG_CONFIG_HOME/agentmemory/.env` are checked. (#253, closes [#250](https://github.com/rohitg00/agentmemory/issues/250) — thanks @OptionalCoin for the systemd repro and tracing it to env-source divergence) + +- **Hermes plugin: memory provider hooks accept passthrough kwargs.** Hermes calls memory provider hooks with extra context kwargs (e.g. `session_id`) at runtime that the existing strict signatures rejected with `sync_turn() got an unexpected keyword argument 'session_id'`. Hooks "succeeded" from Hermes's perspective but every conversation turn silently failed sync. Added `**kwargs: Any` to `sync_turn`, `on_session_end`, `on_pre_compress`, `on_memory_write`, `prefetch`, `queue_prefetch`, and `shutdown`. Where Hermes passes `session_id`, the patch prefers it over the cached `self._session_id` so multi-session gateway contexts route to the right session. Same change applied to the abstract `MemoryProvider` fallback for the import-error path. (#252, closes [#249](https://github.com/rohitg00/agentmemory/issues/249) — thanks @OptionalCoin for the precise log analysis) + +- **`agentmemory demo` now actually seeds observations.** `seedDemoSession` posted to `/agentmemory/observe` without `project` and `cwd`, which the API requires as non-empty strings, so every observation 400'd and the demo silently reported "Seeded 0 observations across 3 sessions". Two-line fix: re-stage `project` + `cwd` into the observe payload alongside `sessionId`. The smart-search queries the demo prints will now return real hits. (#251, closes [#229](https://github.com/rohitg00/agentmemory/issues/229) — thanks @seishonagon for the precise root-cause analysis) + +- **LLM compression / summarization timeouts increased.** Larger sessions were hitting the 120s consolidation timeout under heavier workloads, leaving partial state. Bumped per-step ceilings to give slow providers (esp. local models) room to finish. (#213 — thanks @xuli500177) + +- **`pi` / OpenClaw / Hermes integration fixes.** Tested round-trip fixes across the three integration plugins to keep them aligned with the latest hooks contract. (#230 — thanks @deepmroot) + +### Changed + +- **`iii-engine` pinned to v0.11.2 across every install path.** v0.11.6 introduces a new architecture where workers run inside sandboxed microVMs registered via `iii worker add`. agentmemory still uses the older `iii-exec watch + node dist/index.mjs` worker model from `iii-config.yaml`, which doesn't pass the new engine's stricter trigger validation cleanly — the worker drops into an EPIPE reconnect loop and recall stops working. Pinning to v0.11.2 (the last engine that runs agentmemory's current architecture cleanly) until we refactor agentmemory to register itself via `iii worker add` and run inside the new sandbox model. + - `src/cli.ts` auto-installer downloads `github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-.tar.gz` directly. Per-arch coverage: darwin arm64/x64, linux x64/arm64/armv7, win32 x64/arm64. + - Docker fallback pulls `iiidev/iii:0.11.2` instead of `:latest`. + - `docker-compose.yml` uses `image: iiidev/iii:${AGENTMEMORY_III_VERSION:-0.11.2}` so the override env var actually takes effect for compose users. + - Install instructions and Windows guide updated to point at the v0.11.2 release page. + - **Escape hatch:** `AGENTMEMORY_III_VERSION=` overrides the pin for users who've moved to the sandbox model manually. + - Windows ZIP path detection in `runUpgrade` so the auto-installer doesn't try to pipe a `.zip` through `tar -xz`. (#260) + - **Follow-up tracked separately:** refactor agentmemory to register as a sandboxed worker via `iii worker add` so the pin can be lifted. + +- **README documents how to extend agentmemory with `iii worker add`.** New "Powered by iii" section maps each `iii worker add ` to a concrete agentmemory capability — multi-instance memory, scheduled consolidation, durable retries on embeddings, sandboxed code exec, SQL state, extra MCP host. Lists only workers actually published to [workers.iii.dev](https://workers.iii.dev) with direct links. (#242) + +- **README iii Console section corrected.** The console ships with `iii` as a subcommand; there's no separate installer. Replaced the bogus `curl install.iii.dev/console/main/install.sh` line, simplified the launch command to `iii console --port 3114`, and added the missing console pages to the capability table (Workers, Queues, Config, Flow). Replaced the dashboard screenshot with the Workers page so users see real agentmemory instances connected. (#243) + +### Notes + +If you're upgrading from <0.9.5 and have an existing vector index on disk, the new dim-guard will refuse to load if your active embedding provider declares a different dimension than what's persisted. This is the intended safe default — set `AGENTMEMORY_DROP_STALE_INDEX=true` to discard and rebuild from live observations, or re-embed against the new provider before starting. + +If you've been on `iii-engine` v0.11.6 and noticed search returning empty after save, install agentmemory 0.9.5 fresh (or run `npx @agentmemory/agentmemory upgrade`) to pull pinned engine v0.11.2. v0.11.6 brings a new sandbox-everything-via-`iii worker add` model that agentmemory hasn't been refactored for yet — that work is tracked as a follow-up; this release just keeps existing users unblocked. + +[0.9.6]: https://github.com/rohitg00/agentmemory/compare/v0.9.5...v0.9.6 +[0.9.5]: https://github.com/rohitg00/agentmemory/compare/v0.9.4...v0.9.5 + +## [0.9.4] — 2026-04-29 + +Bug-fix patch. Fixes a silent gap where the knowledge graph never auto-populated despite `GRAPH_EXTRACTION_ENABLED=true`, and adds a doctor check that detects when Claude Code fails to load plugin hooks. + +### Fixed + +- **`mem::graph-extract` now auto-fires at session end.** When `GRAPH_EXTRACTION_ENABLED=true`, the function was registered and the REST endpoint was live, but no internal caller invoked it — the graph KV stayed empty unless users manually `POST`ed to `/agentmemory/graph/extract`. `event::session::stopped` now triggers it (fire-and-forget, idempotent via existing node/edge merge keys), so enabling the flag actually populates the graph. README pipeline diagram updated to show graph extraction at the Stop/SessionEnd phase rather than implying it runs per PostToolUse. (#210) + +### Added + +- **`agentmemory doctor` detects Claude Code plugin-hook load state.** Scans `~/.claude/debug/latest` for the `Loaded hooks from standard location for plugin agentmemory` line. Surfaces the silent failure mode where the plugin is enabled but Claude Code never registered the hooks — users previously got no signal, hooks just silently did nothing. Hint points at reinstall + session restart and the CC version floor (>= 2.1.x). Skips silently when `~/.claude/debug` is absent. (refs #212) + +[0.9.4]: https://github.com/rohitg00/agentmemory/compare/v0.9.3...v0.9.4 + +## [0.9.3] — 2026-04-24 + +Developer-experience patch. Every disabled feature flag is now visible in the viewer, the CLI, and REST error responses, so devs no longer hit empty tabs wondering whether the install is broken or just opt-in. Adds a `doctor` command that diagnoses the whole stack in one shot and a first-run hero in the viewer that points at the magical-moment `demo` command. + +### Added + +- **`agentmemory doctor` command.** Runs 10 diagnostic checks in one shot: server reachability, health status, viewer port, LLM provider, embedding provider, four feature flag states, and whether the knowledge graph has data. Every failing check includes a concrete hint with the exact env var or command to fix it. Mirrors the shape of the new viewer feature-flag banners. +- **`/agentmemory/config/flags` REST endpoint.** Returns `{ version, provider, embeddingProvider, flags[] }` with per-flag `{ key, label, enabled, default, affects, needsLlm, description, enableHow, docsHref }`. Used by the viewer banner, CLI status/doctor, and anyone who wants to introspect config without parsing logs. +- **Viewer feature-flag banner system.** Compact collapsible summary row at the top of every tab (`⚠ 3 off · ⚙ 1 note · Feature flags — click to expand`). Expanded view shows per-flag card with description, exact enable command, docs link, and dismiss button. Dismissed state persists per-flag in localStorage so banners stay out of the way once acknowledged. Banners filter by the current tab's `affects` list. +- **Viewer first-run hero card.** When `sessions.length === 0`, dashboard renders an orange-accent card titled "First run → magical moment in 10 seconds" with `npx @agentmemory/agentmemory demo` as the next step. Removes the dead-empty dashboard that used to greet fresh installs. +- **Viewer footer with preset issue report.** `agentmemory viewer · v{version} · github · docs · report issue →`. The feedback link opens a GitHub issue pre-filled with version, provider name, embedding provider, flag state, and user-agent — so the first message on an issue already contains the diagnostic context that used to take three back-and-forths. +- **Richer empty states on Actions, Memories, Lessons, Crystals tabs.** Each now has a titled lead explaining what the tab is for, why it's empty, three concrete ways to populate it (MCP tool, curl, hook), and a docs link. The old one-liners ("No actions yet. Create actions via memory_action_create MCP tool") assumed too much context. +- **`status` command shows flag state.** New section in the output block lists provider (`✓ llm` / `✗ noop`), embedding provider (`✓ embeddings` / `bm25-only`), and each flag with a tick/cross. Parity with the viewer banner. +- **`AGENTMEMORY_URL` environment variable honored by CLI.** `status`, `doctor`, and related health checks now respect `AGENTMEMORY_URL=http://host:port` and extract the port from it. Previously documented but silently ignored; `--port N` was the only way to override. +- **Website install section promotes `demo` to step 2.** `npx @agentmemory/agentmemory demo` now appears between "start server" and "open viewer" on agent-memory.dev. The magical-moment command is on the critical path of the three-step install, not tucked into the README. +- **Website version auto-derived from repo package.json.** `gen-meta.mjs` picks up `src/version.ts` on `prebuild` and writes `website/lib/generated-meta.json`. Removes the stale-version drift that showed `v0.9.1` on the landing page after `v0.9.2` shipped. + +### Changed + +- **REST "feature not enabled" errors now return structured bodies.** Graph extraction (3 endpoints) and consolidation pipeline (1 endpoint) used to return `{ error: "Knowledge graph not enabled" }`. Now return `{ error, flag, enableHow, docsHref }` matching the viewer banner contract. Curl users get the same fix guidance as UI users. +- **Website install title: `THREE STEPS` → `THREE COMMANDS`.** Matches the new three-command install (`npx agentmemory`, `agentmemory demo`, `open viewer`). + +### Fixed + +- **Viewer banner scroll blocker.** Initial banner implementation rendered four full-height banner cards stacked above the dashboard, pushing all stats off-screen. Replaced with compact collapsible summary that takes ~40px of vertical space by default and only expands on click. + +[0.9.3]: https://github.com/rohitg00/agentmemory/compare/v0.9.2...v0.9.3 + +## [0.9.2] — 2026-04-22 + +Safety + import-pipeline patch. Kills the infinite Stop-hook recursion loop that burned Claude Pro tokens on unkeyed installs, repairs every empty viewer tab after `import-jsonl`, derives lessons and crystals automatically from imported sessions, and opens up OpenAI-compatible embedding endpoints. + +### Security + +- **Stop-hook recursion loop** ([#187](https://github.com/rohitg00/agentmemory/pull/187), follow-up to [#149](https://github.com/rohitg00/agentmemory/issues/149)). A user with no provider key and `AGENTMEMORY_AUTO_COMPRESS=false` could still trigger unbounded recursion: Stop hook → `/summarize` → `provider.summarize()` → agent-sdk provider spawned a Claude Agent SDK child session that inherited the same plugin hooks, whose own Stop fired, spawning another child, etc. ~579 ghost `entrypoint: sdk-ts` sessions could accumulate in minutes, draining the Claude Pro subscription. Fixed at five layers in defense-in-depth: + 1. `detectProvider()` treats empty-string keys (`ANTHROPIC_API_KEY=`) as unset and returns the noop provider by default. The agent-sdk fallback now requires explicit `AGENTMEMORY_ALLOW_AGENT_SDK=true` opt-in with a second loud warning. + 2. New `NoopProvider` returns empty strings for compress/summarize; callers detect `.name === "noop"` and short-circuit. + 3. `agent-sdk` provider sets `AGENTMEMORY_SDK_CHILD=1` before spawning `query()` and restores the previous value in `finally` so later calls in the same parent process are not mis-classified. + 4. All 12 hook scripts inline a shared `isSdkChildContext(payload)` guard that checks both the env marker and `payload.entrypoint === "sdk-ts"`, and bail early. + 5. `/summarize` short-circuits with `{ success: false, error: "no_provider" }` when `provider.name === "noop"` instead of calling through. Empty provider responses are now logged and recorded as failures on the metrics store. + +### Added + +- **`OPENAI_BASE_URL` / `OPENAI_EMBEDDING_MODEL`** ([#186](https://github.com/rohitg00/agentmemory/pull/186), thanks @Edison-A-N). The `OpenAIEmbeddingProvider` now accepts a base URL override and a configurable model name, mirroring the `MINIMAX_BASE_URL` pattern. Unlocks Azure OpenAI, vLLM, LM Studio, and other OpenAI-compatible proxies for embeddings with zero breakage — defaults are preserved. +- **`OPENAI_EMBEDDING_DIMENSIONS`** ([#189](https://github.com/rohitg00/agentmemory/pull/189)). Follow-up: `dimensions` is now derived from the model via a `MODEL_DIMENSIONS` lookup (3-small=1536, 3-large=3072, ada-002=1536) and falls back to 1536 for unknown models. Custom or self-hosted OpenAI-compatible models should set this env var explicitly; non-positive values are rejected at construction. +- **Auto-derived lessons and crystals on `import-jsonl`** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Each imported session now produces one crystal (narrative, tool outcomes, files, lessons) and up to 20 heuristic lessons from instructional patterns (`always`/`never`/`don't`/`prefer`/`avoid`/`caveat`/`note`/`warning`). Lessons are keyed by `fingerprintId("lesson", content.toLowerCase())` so re-importing the same file bumps `reinforcements` on existing lessons instead of duplicating rows. Crystals are keyed by `fingerprintId("crystal", sessionId)` and preserve `createdAt` on upsert. +- **Session preview on the sessions list** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). `Session` gained `firstPrompt` / `summary` fields; both `import-jsonl` and the live `mem::observe` path populate `firstPrompt` from the first real user prompt they see, and the viewer renders it as a 140-char preview row under each session. +- **Richer session detail + crystals viz + lessons tab explainers** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Clicking a session now fetches its observations and renders a 4-stat grid (observations / tools / files / duration), top-10 tool bar chart, activity breakdown, and file list. Crystals cards show resolved lesson content instead of raw IDs. Lessons tab has a header explainer card for the rule + confidence + decay model. + +### Changed + +- **`detectProvider()` default is now `noop`** (see Security). Users who had no API key and relied on the implicit Claude-subscription fallback must set `AGENTMEMORY_ALLOW_AGENT_SDK=true` to restore old behavior — and should read the warning about Stop-hook recursion first. +- **`/agentmemory/audit` response shape** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Now returns `{ entries, success }` instead of a bare array to match the viewer's expected shape. The viewer was rendering empty despite populated data. +- **`/agentmemory/replay/sessions` path** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Calls `kv.list` directly instead of `sdk.trigger → mem::replay::sessions`. Sub-50ms on 600+ sessions instead of timing out at 10s+. +- **Viewer WebSocket connect timeout** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). 5-second timeout around `new WebSocket(...)`. If the socket is still CONNECTING after that, it is force-closed so the `onclose` retry / polling-fallback chain kicks in. Previously the banner stuck on `CONNECTING…` forever when the iii-stream port accepted TCP but never completed the upgrade handshake. +- **`import-jsonl` now runs synthetic compression + BM25 indexing** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Imported observations go through the same `buildSyntheticCompression` + `getSearchIndex().add()` path as live `mem::observe`. Previously the raw shape was written directly to KV and the search index never saw it — consolidation reported "fewer than 5 summaries" and semantic/procedural/memory tabs stayed empty. +- **Viewer strength gauge** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). Memory tab showed `700%` on `strength: 7` because the scale was treated as 0–1. Now handles both 0–1 and 0–10 and clamps at 100%. + +### Fixed + +- **`npm ci` on fork PRs** ([#187](https://github.com/rohitg00/agentmemory/pull/187), [#188](https://github.com/rohitg00/agentmemory/pull/188)). CI failed because lockfiles are gitignored at the repo level. `.github/workflows/ci.yml` + `publish.yml` now run a two-step install: `npm install --package-lock-only` to produce a lockfile in the runner workspace, then `npm ci` to install deterministically from it. Gives a single resolved dependency graph across build + test + publish within one job run — important because publish uses `--provenance`. +- **`image-quota-cleanup` fail-closed on refCount read errors** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). When `getImageRefCount` threw, the code fell through to `deleteImage` with `refCount === 0`, risking deletion of still-referenced images on transient KV errors. Fail-closed: log + return from the `withKeyedLock` callback, never reach `deleteImage` without a confirmed zero refcount. +- **`raw.userPrompt` type guard** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). `mem::observe` now runtime-checks `typeof raw.userPrompt === "string"` before calling `.replace` / `.trim` / `.slice`. Non-string truthy values from malformed hook payloads no longer crash the handler. +- **Viewer Actions frontier field** ([#188](https://github.com/rohitg00/agentmemory/pull/188)). The tab was reading `results[1].actions` but `/frontier` returns `{ frontier: [...] }`. Fixed the read path; preserves actions/frontier unification. +- **Hardcoded `maxTokens: 4096` in the agent-sdk branch of `detectProvider`** ([#188](https://github.com/rohitg00/agentmemory/pull/188), [#190](https://github.com/rohitg00/agentmemory/pull/190)). Ignored the `maxTokens` variable computed from `env["MAX_TOKENS"]`. Every other branch already used the computed value; agent-sdk now matches. + +### Infrastructure + +- `StateScope` interface in `types.ts` documents the `KV.state` scope shape (`system:currentDiskSize: number`); `disk-size-manager` uses `StateScope[typeof DISK_SIZE_KEY]` generics instead of ad-hoc ``. +- `onnxruntime-node` + `onnxruntime-web` moved to `optionalDependencies` alongside `@xenova/transformers` to make their lazy/transitive nature explicit; still externalized in `tsdown.config.ts` because bundling breaks the native `.node` binding paths. +- `FALLBACK_PROVIDERS` parsing now honors the same `AGENTMEMORY_ALLOW_AGENT_SDK` gate as `detectProvider`, filtering out `agent-sdk` from the fallback chain unless explicitly opted in. +- README provider table + env block updated: no-op is the new default, Claude-subscription fallback moved to a separate opt-in row, OpenAI env vars documented. +- Hero stat badge refreshed from 654 → 827 tests (both dark + light variants). +- `VERSION` / `ExportData.version` union / `supportedVersions` Set / `test/export-import.test.ts` / `@agentmemory/mcp` shim version all bumped in lockstep. +- Test count: 827 (up from 812 in v0.9.1). + +[0.9.2]: https://github.com/rohitg00/agentmemory/compare/v0.9.1...v0.9.2 + +## [0.9.1] — 2026-04-21 + +Trust-the-CLI patch. Three bugs that surfaced in real testing of v0.9.0: the dashboard viewer showed zeros for half its cards, the `import-jsonl` command crashed on anything but a perfect response, and `upgrade` hard-aborted on a cargo registry that never had the crate. + +### Fixed + +- **Viewer dashboard list endpoints** ([#172](https://github.com/rohitg00/agentmemory/pull/172)). `GET /agentmemory/semantic` and `GET /agentmemory/procedural` were never registered, and `GET /agentmemory/relations` returned 405 because only the POST trigger existed. The dashboard's `Promise.all` fan-out silently received null for those cards even when semantic, procedural, or relation data was present. Added `api::semantic-list`, `api::procedural-list`, and `api::relations-list` handlers next to `api::memories` in `src/triggers/api.ts`, each returning the shape the viewer already parses. +- **CLI version drift** ([#173](https://github.com/rohitg00/agentmemory/pull/173)). The viewer brand badge hardcoded `v0.7.0` and the README "New in" banner still said `v0.8.2`. Replaced the viewer string with a `__AGENTMEMORY_VERSION__` placeholder substituted at render time by `document.ts` (same mechanism as the CSP nonce). Collapsed `src/version.ts` from a literal union of every historical release back to a single `VERSION` constant — the import-compat contract is the `supportedVersions` Set in `export-import.ts`, not the type. +- **`import-jsonl` crashed with `Unexpected end of JSON input`** ([#174](https://github.com/rohitg00/agentmemory/pull/174)). The livez probe used fetch throws as the only failure signal — any stray service on port 3111 passed silently, then `res.json()` blew up when the real POST returned an empty body or HTML error. Probe now captures `probe.status` + body snippet on non-OK responses and the exception message on network failure, so the error distinguishes `unreachable (...)` from `reachable but unhealthy (HTTP 503: ...)`. The POST reads body as text, parses only if non-empty, requires `json.success === true`, and maps 401 → "set AGENTMEMORY_SECRET" and 404 → "upgrade server to v0.8.13+". +- **`upgrade` aborted on `cargo install iii-engine`** ([#174](https://github.com/rohitg00/agentmemory/pull/174)). The crate was never published — the old flow called `requireSuccess`, which exited before the Docker pull ran. Swapped to the official installer used throughout the README and demo command: `curl -fsSL https://install.iii.dev/iii/main/install.sh | sh`. Installer failure is optional; a warn points at `iiidev/iii:latest` and the releases page at `iii-hq/iii`. + +### Infrastructure + +- Three integration tests cover the new list endpoints. +- `VERSION` / `ExportData.version` union / `supportedVersions` / `test/export-import.test.ts` all bumped in lockstep. + +[0.9.1]: https://github.com/rohitg00/agentmemory/compare/v0.9.0...v0.9.1 + +## [0.9.0] — 2026-04-18 + +Visibility + correctness release. Landing site, filesystem connector, MCP standalone now actually talks to the running server, health logic stops crying wolf, audit trail closes its last gap, and every memory path has a clear policy. + +### Added +- **Website** ([#164](https://github.com/rohitg00/agentmemory/pull/164)). Next.js 16 App Router landing page at `website/` — Lamborghini-inspired dark canvas, live GitHub stars pill, agents marquee with real brand logos, command-center tab showcase (viewer · iii console · state · traces), 12-tile feature grid, 10-agent MCP install selector, universal MCP JSON + one-click Cursor/VS Code deeplinks. Deploys to Vercel with Root Directory = `website/`. +- **Filesystem connector** — new `@agentmemory/fs-watcher` package under `integrations/filesystem-watcher/` ([#163](https://github.com/rohitg00/agentmemory/pull/163), closes [#62](https://github.com/rohitg00/agentmemory/issues/62)). Node `fs.watch` based, no native deps. Emits valid `HookPayload` observations for every file change and delete, with debounce, default ignore list, text-file preview, bearer auth, and env-driven config. +- **Security advisory drafts** for v0.8.2 CVEs ([#118](https://github.com/rohitg00/agentmemory/pull/118)). Six markdown drafts under `.github/security-advisories/` covering viewer XSS, curl-sh RCE, default 0.0.0.0 bind, unauthenticated mesh sync, Obsidian export traversal, and incomplete secret redaction. Also documents the symlink-traversal limitation of the Obsidian export fix. +- **iii console documentation** in the README ([#157](https://github.com/rohitg00/agentmemory/pull/157)). How to launch the iii console alongside the viewer, what each page gives you for agentmemory, and the `iii-observability` config that ships turned on. + +### Changed +- **Audit policy codified** ([#162](https://github.com/rohitg00/agentmemory/pull/162), closes [#125](https://github.com/rohitg00/agentmemory/issues/125)). `src/functions/audit.ts` gains a top-of-file policy block: every structural deletion emits a `recordAudit` row, scoped deletions (`governance-delete`, `forget`) write one row per call, bulk sweeps (`retention-evict`, `evict`, `auto-forget`) write one batched row per invocation. `mem::forget` no longer deletes silently — it writes a single audit row with target ids, session id, and per-type counts. +- **Standalone MCP talks to the running server** ([#161](https://github.com/rohitg00/agentmemory/pull/161), closes [#159](https://github.com/rohitg00/agentmemory/issues/159)). `@agentmemory/mcp` now probes `GET /agentmemory/livez` at `AGENTMEMORY_URL` (defaults to `http://localhost:3111`) on first tool call. If the server is up, every tool (sessions, smart-search, recall, save, governance-delete, export, audit) routes through REST and sees exactly what hooks and the viewer see. If the probe fails, falls back to the local `InMemoryKV` so pure-standalone setups keep working. Bearer `AGENTMEMORY_SECRET` attached automatically. Handle cache invalidates on proxy failure with a 30s TTL so a later server start is picked up. Response shapes are now consistent across proxy and local branches. +- **Retention eviction targets the right store** ([#132](https://github.com/rohitg00/agentmemory/pull/132)). `mem::retention-evict` now routes deletes to `mem:memories` or `mem:semantic` based on the candidate's `source` field, probing both namespaces when the field is missing (legacy rows). Emits a single batched audit row per sweep with `evictedIds`, `evictedEpisodic`, `evictedSemantic`, and the threshold. Retention scores gain a `source` field persisted to the store. + +### Fixed +- **Health stops flagging `memory_critical` on tiny Node processes** ([#160](https://github.com/rohitg00/agentmemory/pull/160), closes [#158](https://github.com/rohitg00/agentmemory/issues/158)). Memory severity no longer escalates from heap ratio alone. Both warn and critical bands now require RSS above `memoryRssFloorBytes` (default 512 MB). When heap is tight but RSS is below the floor, a non-alerting `memory_heap_tight_NN%_rssMMmb` note is attached to the snapshot — visibility without the false positive. +- **iii console screenshots vendored** in the README so the docs don't depend on CDN signed URLs. + +### Infrastructure +- `VERSION` union extended to `0.9.0`; `ExportData.version`, `supportedVersions`, and `test/export-import.test.ts` bumped in lockstep. +- `@agentmemory/mcp` dependency pinned at `~0.9.0` to match. +- Tests: 777 passing (+ 14 skipped), up from 769. + +[0.9.0]: https://github.com/rohitg00/agentmemory/compare/v0.8.12...v0.9.0 + +## [0.8.13] — 2026-04-17 + +### Added + +- Session replay: new "Replay" tab in the viewer that plays any stored session as a scrubbable timeline with prompt, response, tool-call, and tool-result events. Keyboard bindings: space to play/pause, arrow keys to step, speed selector (0.5×–4×). +- JSONL transcript import via `agentmemory import-jsonl [path]` CLI subcommand and `POST /agentmemory/replay/import-jsonl`. Default path `~/.claude/projects`, or pass an explicit file/directory. Imports are recorded in the audit log. +- New iii functions `mem::replay::load`, `mem::replay::sessions`, and `mem::replay::import-jsonl`, each routed through the same HMAC-authed API trigger as other endpoints. + +### Security + +- JSONL import rejects symlinks, paths containing sensitive terms (`secret`, `credential`, `.env`, etc.), and skips malformed lines without aborting the batch. + +## [0.8.12] — 2026-04-16 + +### Added + +- Added token-efficient `memory_recall` output modes: + - `format: "full"` (default) + - `format: "compact"` (returns compact observation rows) + - `format: "narrative"` (title + narrative text for low-token recall) +- Added `token_budget` support to `memory_recall` / `mem::search` to trim results to a target budget and return `tokens_used`, `tokens_budget`, and `truncated` metadata. +- Added new MCP + REST tool `memory_compress_file` (`mem::compress-file` / `/agentmemory/compress-file`) to compress markdown files while preserving headings, URLs, and fenced code blocks. + +### Changed + +- Updated MCP tool count to 44 and REST endpoint count to 104. +- Updated docs and plugin metadata for new tool/endpoint counts. +- Added test coverage for search formats, token budget behavior, and file compression validation. + +## [0.8.11] — 2026-04-15 + +**Fix**: `node dist/index.mjs` crashed on first import after the iii-sdk v0.11 migration (#116) merged. iii-sdk v0.11 dropped `getContext()`, but 32 `src/functions/*.ts` files still imported and called it. Added `src/logger.ts` (thin stderr shim with the same `.info/.warn/.error` signature) and mechanically replaced every `ctx.logger.*` call. Updated all 45 test mock blocks. Fixed `search.ts` `registerFunction` call to use the v0.11 string-ID API. + +### Fixed + +- **iii-sdk v0.11 getContext crash** ([#116](https://github.com/rohitg00/agentmemory/issues/116)) — `SyntaxError: The requested module 'iii-sdk' does not provide an export named 'getContext'` on startup. Removed all `getContext` imports from 32 function files, added `src/logger.ts` shim, updated 45 test mock blocks. + +### Changed + +- Upgraded `iii-sdk` dependency from `^0.11.0-next.8` to stable `^0.11.0`. +- Aligned stream send payloads with v0.11 wire format by using `type` for `stream::send` events in observe/compress/session-activity paths. +- Updated migration guidance/examples and diagnostics plugin registration snippets to v0.11 function registration and trigger request shapes. +## [0.8.10] — 2026-04-15 + +**Behavior change**: the PreToolUse and SessionStart hooks no longer run enrichment by default. SessionStart saves ~1-2K input tokens per session you start (the only path that was actually reaching the model, per the [Claude Code hook docs](https://code.claude.com/docs/en/hooks.md)). PreToolUse stops spawning a Node process and POSTing to `/agentmemory/enrich` on every file-touching tool call — a pure resource cleanup, not a token fix. If you were relying on either path, set `AGENTMEMORY_INJECT_CONTEXT=true` in `~/.agentmemory/.env` and restart. Observations are still captured via PostToolUse regardless. + +### Fixed + +- **Gate SessionStart context injection** ([#143](https://github.com/rohitg00/agentmemory/issues/143), thanks [@adrianricardo](https://github.com/adrianricardo)) — `src/hooks/session-start.ts` previously wrote ~1-2K chars of project context to stdout at every session start. Per the [Claude Code hook docs](https://code.claude.com/docs/en/hooks.md), `SessionStart` stdout is explicitly injected into the model's context ("where stdout is added as context that Claude can see and act on"), so this was adding real tokens to the first turn of every new session. Now gated behind `AGENTMEMORY_INJECT_CONTEXT`, default off. The session still gets registered for observation tracking — only the stdout echo is skipped. +- **Skip the PreToolUse enrichment round-trip when disabled** ([#143](https://github.com/rohitg00/agentmemory/issues/143)) — `src/hooks/pre-tool-use.ts` was POSTing `/agentmemory/enrich` on every `Edit`/`Write`/`Read`/`Glob`/`Grep` tool call and piping up to 4000 chars to stdout. The Claude Code docs make clear that PreToolUse stdout goes to the debug log, not the model context, so this was **not** burning user tokens — but it was spawning a Node process + full HTTP round-trip ~20x per user message with no effect on the conversation. Gating it makes the disabled hot path a ~15ms no-op Node startup instead of a ~100-300ms REST round-trip. **This is a resource cleanup, not a token fix**; leaving the gate in place protects forward in case Claude Code ever changes PreToolUse to inject stdout like SessionStart does. +- **`mem::retention-evict` no longer leaks semantic memories** ([#124](https://github.com/rohitg00/agentmemory/issues/124)) — the eviction loop was unconditionally calling `kv.delete(KV.memories, id)` for every below-threshold candidate, but retention scores are computed for both episodic (`KV.memories`) and semantic (`KV.semantic`) memories. When a candidate came from `KV.semantic`, the delete silently became a no-op (key wasn't in `mem:memories` to begin with) and the semantic row stayed alive forever with a sub-threshold score. Semantic memories could not be evicted by this path at all. Fix: add a `source: "episodic" | "semantic"` discriminator to `RetentionScore`, tag it at score creation, and branch the delete on `candidate.source`. For pre-0.8.10 rows with no `source` field (including semantic retention rows written by the old scorer), the loop probes both namespaces to find where the `memoryId` actually lives, so upgraded stores get their stranded semantic memories evicted without needing to re-score first. The response shape now also includes `evictedEpisodic` and `evictedSemantic` counts for observability. +- **`mem::retention-evict` now emits an audit record per sweep** ([#124](https://github.com/rohitg00/agentmemory/issues/124)) — retention eviction performs structural deletes (memories, retention scores, access logs) but was not calling `recordAudit()`, which made evictions invisible to audit consumers. Now batched one audit row per non-zero sweep, with `operation: "delete"`, `functionId: "mem::retention-evict"`, `targetIds` containing every evicted id, and `details.evicted` / `evictedEpisodic` / `evictedSemantic` / `threshold` for context. Zero-eviction sweeps intentionally do not write an audit row. + +### Honest note on #143 + +My initial diagnosis on the #143 thread pattern-matched too quickly to #138 and overclaimed that PreToolUse stdout was the smoking gun behind "Claude Pro burned in 4 messages". It wasn't — per the docs, PreToolUse stdout is debug-log only. The actual background cause is that [Claude Pro's Claude Code quotas are documented as tight](https://www.theregister.com/2026/03/31/anthropic_claude_code_limits/) and Anthropic has publicly confirmed "people are hitting usage limits in Claude Code way faster than expected." agentmemory contributes ~1-2K tokens per session via SessionStart, and that contribution is worth eliminating, but this release does not and cannot make Claude Pro's base quotas roomier. Users on heavy tool-call workloads should consider Max 5x or Team tiers regardless of whether agentmemory is installed. + +0.8.8's #138 fix (opt-in `mem::compress` via `AGENTMEMORY_AUTO_COMPRESS`) remains the correct fix for users with `ANTHROPIC_API_KEY` set — that path was a real per-observation Claude API burn and is unrelated to the Claude Code hook pipeline. + +### Added + +- **`AGENTMEMORY_INJECT_CONTEXT` env var** — default `false`. When `true`, restores the old SessionStart stdout write and the old PreToolUse `/enrich` round-trip. Startup banner prints a loud warning when it's on, mirroring the `AGENTMEMORY_AUTO_COMPRESS` warning from 0.8.8. +- **`isContextInjectionEnabled()`** helper in `src/config.ts` — single source of truth for the flag. The hooks read the env var directly (they're spawned as standalone `.mjs` files by Claude Code and don't bootstrap through `src/index.ts`), so the helper is there for the startup banner and future code paths. +- **5 subprocess regression tests** in `test/context-injection.test.ts` — spawns the compiled `pre-tool-use.mjs` and `session-start.mjs` hooks with real stdin/stdout pipes and asserts that stdout is empty when the env var is unset, when it's explicitly `false`, and that the disabled PreToolUse path exits under 1 second. Also asserts that the opt-in path with an unreachable backend still exits cleanly. Full suite: **724 passing** (was 719 + 5 new). + +### Infrastructure + +- **Startup banner** (`src/index.ts`) now prints `Context injection: OFF (default, #143)` on normal startup and a prominent WARNING when opt-in is enabled, so the mode is never silent. +- **Migration note**: if you were relying on the old SessionStart project-context injection or the old PreToolUse enrichment round-trip, add to `~/.agentmemory/.env`: + ```env + AGENTMEMORY_INJECT_CONTEXT=true + ``` + and restart Claude Code. You'll see the startup warning in the engine logs confirming it's active. + +[0.8.10]: https://github.com/rohitg00/agentmemory/compare/v0.8.9...v0.8.10 +[0.8.12]: https://github.com/rohitg00/agentmemory/compare/v0.8.11...v0.8.12 + +## [0.8.9] — 2026-04-14 + +Two UX fixes for the Claude Code plugin install path, both reported in [#139](https://github.com/rohitg00/agentmemory/issues/139) by [@stefanfaur](https://github.com/stefanfaur). + +### Fixed + +- **Claude Code plugin now auto-wires the `@agentmemory/mcp` stdio server** ([#139](https://github.com/rohitg00/agentmemory/issues/139)) — the plugin previously only shipped hooks and skills, and the README told Claude Code users to wire up the MCP server manually. A new `plugin/.mcp.json` declares the MCP server so `/plugin install agentmemory@agentmemory` auto-starts it when the plugin is enabled. No extra config step. +- **Skills no longer fail under Claude Code's sandbox with "Contains expansion"** ([#139](https://github.com/rohitg00/agentmemory/issues/139)) — the `recall` and `session-history` skills used pre-execution bash with `$(...)` / `${VAR:-default}` shell expansion, which Claude Code's sandbox rejects by pattern match. All four plugin skills (`recall`, `remember`, `forget`, `session-history`) are now rewritten as pure prompts that tell Claude to use the MCP tools directly. No bash, no sandbox issues, no shell escaping — and the skills run faster because they no longer fork a curl subprocess on every invocation. + +### Added + +- **Standalone MCP shim now implements `memory_smart_search` and `memory_governance_delete`** — the `@agentmemory/mcp` stdio server only exposed 5 tools (`memory_save`, `memory_recall`, `memory_sessions`, `memory_export`, `memory_audit`), so the rewritten plugin skills would have failed at runtime referencing tools the standalone didn't know about. Now ships 7 tools. `memory_smart_search` falls back to the same substring filter as `memory_recall` since the standalone shim doesn't have BM25/vector/graph without the full engine. `memory_governance_delete` takes `memoryIds` as an array or comma-separated string and returns `{deleted, requested, reason}`. +- **`memory_save` accepts `concepts`/`files` as arrays or comma-separated strings** — the old standalone only accepted CSV strings, which would silently drop array inputs. New `normalizeList()` helper handles both. +- **`memory_sessions` honours a `limit` arg** (default 20) — previously returned every session. +- **8 regression tests** in `test/mcp-standalone.test.ts` covering array/CSV inputs for `memory_save`, `memory_smart_search` substring fallback, `memory_sessions` limit, `memory_governance_delete` happy path + unknown-id skip + validation. Full suite: 715 passing. + +### Changed + +- **README Claude Code install snippet** — now explicitly notes that `/plugin install agentmemory` registers hooks + skills AND auto-wires the MCP server via `.mcp.json`, with no extra step. + +[0.8.9]: https://github.com/rohitg00/agentmemory/compare/v0.8.8...v0.8.9 + +## [0.8.8] — 2026-04-14 + +**Behavior change**: per-observation LLM compression is now opt-in. If you were relying on LLM-generated summaries (the old default), set `AGENTMEMORY_AUTO_COMPRESS=true` in `~/.agentmemory/.env` and restart. + +### Fixed + +- **Stop silently burning Claude API tokens on every tool invocation** ([#138](https://github.com/rohitg00/agentmemory/issues/138), thanks [@olcor1](https://github.com/olcor1)) — the old `mem::observe` path fired `mem::compress` unconditionally on every PostToolUse hook, which called Claude via the user's `ANTHROPIC_API_KEY` to turn each raw observation into a structured summary. An active coding session (50-200 tool calls/hour) could run through hundreds of thousands of tokens in minutes, which is the exact opposite of what a memory tool should do. The new default path skips the LLM call and uses a zero-token **synthetic compression** step that derives `type`, `title`, `narrative`, and `files` from the raw tool name, tool input, and tool output directly. Recall and BM25 search still work — you just lose the LLM-generated summaries unless you opt in. + +### Added + +- **`AGENTMEMORY_AUTO_COMPRESS` env var** — default `false`. When `true`, restores the old per-observation LLM compression path. The engine startup banner now prints a loud warning when it's on, reminding you that it spends tokens proportional to your session tool-use frequency. +- **`src/functions/compress-synthetic.ts`** — the new zero-LLM compression helper. `buildSyntheticCompression(raw)` maps tool names to `ObservationType` (via camelCase-aware substring matching for `Read`/`Write`/`Edit`/`Bash`/`Grep`/`WebFetch`/`Task`/etc.), pulls file paths out of `tool_input.file_path` / `pattern` / etc., and truncates narratives to 400 chars so one huge tool output can't blow up the BM25 index. +- **Regression test** `test/auto-compress.test.ts` — 8 cases covering the default path (no `mem::compress` trigger, synthetic observation stored in KV), explicit opt-in, tool-name-to-type mapping, file-path extraction, narrative truncation, and the `post_tool_failure` → `error` path. Full suite: 707 passing. + +### Infrastructure + +- **Startup banner** (`src/index.ts:171`) now prints either `Auto-compress: OFF (default, #138)` or a prominent warning when opt-in is enabled, so the mode is never silent. +- **Migration note**: if you were running 0.8.7 or earlier with `ANTHROPIC_API_KEY` set, your token usage will drop sharply on upgrade. Search quality may also drop slightly because narratives are now derived from raw tool I/O instead of Claude-generated summaries. If you want the old behavior: + ```env + # ~/.agentmemory/.env + AGENTMEMORY_AUTO_COMPRESS=true + ``` + and restart. Existing compressed observations in `~/.agentmemory/` are untouched. + +[0.8.8]: https://github.com/rohitg00/agentmemory/compare/v0.8.7...v0.8.8 + +## [0.8.7] — 2026-04-14 + +One-line fix for a brown-paper-bag bug reported in [#136](https://github.com/rohitg00/agentmemory/issues/136). + +### Fixed + +- **`npx @agentmemory/agentmemory` no longer crashes with "`/app/config.yaml` is a directory"** ([#136](https://github.com/rohitg00/agentmemory/issues/136), thanks [@stefano-medapps](https://github.com/stefano-medapps)) — the published tarball shipped `docker-compose.yml` but **not** `iii-config.docker.yaml`, even though the compose file mounts `./iii-config.docker.yaml:/app/config.yaml:ro`. Docker resolves missing host-path bind sources by silently creating them as empty directories, so the iii-engine container mounted an empty dir at `/app/config.yaml` and crashed with `Error: Failed to read config file '/app/config.yaml': Is a directory (os error 21)`. The `files` array in `package.json` now includes `iii-config.docker.yaml` alongside the regular `iii-config.yaml`. + +### Infrastructure + +- New regression test in `test/consistency.test.ts` parses every `./:` bind mount in `docker-compose.yml` and asserts the source file is shipped via the `files` array. Catches the class of bug where a new bind mount is added to compose without a corresponding entry in `files`. + +[0.8.7]: https://github.com/rohitg00/agentmemory/compare/v0.8.6...v0.8.7 + +## [0.8.6] — 2026-04-13 + +Finishes the `npx ` story from #120 by moving the standalone package under the `@agentmemory` scope. + +### Changed + +- **Standalone MCP shim is now `@agentmemory/mcp`** — the 0.8.5 publish attempted to push `agentmemory-mcp` as an unscoped package, but npm's name-similarity policy rejects it because of an unrelated third-party package called `agent-memory-mcp`. The shim now lives under the scope we already own, so `npx -y @agentmemory/mcp` works on the live registry. All README/integration/CLI-help snippets, the OpenClaw and Hermes guides, and the Claude-Desktop/Cursor/Codex/OpenCode MCP config examples have been updated to use the scoped name. The unscoped `agentmemory-mcp` command line (in the main package's `bin` field) was never published and has been removed from the docs. +- **Package directory renamed** `packages/agentmemory-mcp/` → `packages/mcp/`. The `.github/workflows/publish.yml` publish step points at the new path and `npm view @agentmemory/mcp` for the propagation check. +- **Log prefix** in `src/mcp/standalone.ts` and `src/mcp/in-memory-kv.ts` changed from `[agentmemory-mcp]` to `[@agentmemory/mcp]` so stderr output matches the package users install. + +### Fixed + +- **Shim version bump was missed in 0.8.5** — `packages/agentmemory-mcp/package.json` (now `packages/mcp/package.json`) was still pinned at `0.8.4` because the release bump script only touched the 8 files in the main package. The shim now tracks the main package and depends on `@agentmemory/agentmemory: ~0.8.6`. + +[0.8.6]: https://github.com/rohitg00/agentmemory/compare/v0.8.5...v0.8.6 + +## [0.8.5] — 2026-04-13 + +Compatibility fix for stricter JSON-RPC clients, plus a spec cleanup CodeRabbit caught during review. + +### Fixed + +- **MCP server works with Codex CLI and any strict JSON-RPC 2.0 client** ([#129](https://github.com/rohitg00/agentmemory/issues/129)) — the stdio transport was responding to JSON-RPC **notifications** (messages without an `id` field, e.g. `notifications/initialized`), which violates JSON-RPC 2.0 §4.1 and caused stricter clients like Codex CLI v0.120.0 to close the transport with "Transport closed". Notifications are now detected by the missing/null `id` field, the handler still runs for side effects, but no response is written. Handler errors on notifications are logged to stderr instead of sent back to the client. Claude Code and other clients that tolerated the spurious responses continue to work unchanged. +- **Request `id` type validation per JSON-RPC 2.0 §4** — the transport previously only checked `id != null`, so a malformed request with `id: {}` or `id: [1,2]` could get echoed back with that non-primitive id, and valid-shape requests with bad id types fell through to the handler and produced a response carrying a bogus non-JSON-RPC id. `isValidId()` now enforces `string | number | null | undefined`, and bad-id requests get `-32600 Invalid Request` with `id: null` before the handler runs. Caught by CodeRabbit on PR [#131](https://github.com/rohitg00/agentmemory/pull/131). + +### Infrastructure + +- 14 tests in `test/mcp-transport.test.ts` covering the request path, notification path (#129), malformed input, and id-type validation (object/array/boolean). Full suite: 698 passing. + +[0.8.5]: https://github.com/rohitg00/agentmemory/compare/v0.8.4...v0.8.5 + +## [0.8.4] — 2026-04-13 + +Two community contributions land on top of 0.8.3 and close out the #120 npm story for real. + +### Fixed + +- **Memories saved via the standalone MCP server now survive SIGKILL** ([#122](https://github.com/rohitg00/agentmemory/pull/122), thanks [@JasonLandbridge](https://github.com/JasonLandbridge)) — `memory_save` previously only flushed to `~/.agentmemory/standalone.json` on `SIGINT`/`SIGTERM`. If the MCP server process was killed forcefully (e.g. when an agent session ended), every memory saved during that session was lost. The save handler now persists to disk immediately after every `memory_save` call, so data survives unexpected termination. Also switched to the shared `generateId("mem")` helper and a single `isoNow` shared by `createdAt`/`updatedAt` so they can't drift. +- **OpenCode MCP config format corrected** ([#121](https://github.com/rohitg00/agentmemory/pull/121), thanks [@JasonLandbridge](https://github.com/JasonLandbridge)) — the README previously told OpenCode users to edit `.opencode/config.json` with an `mcpServers` object, but OpenCode actually uses `opencode.json` with an `mcp` object, `type: "local"`, and a `command` array. The agents table row and a new dedicated OpenCode block in the Standalone MCP section now document the correct format. + +## [0.8.3] — 2026-04-13 + +Two bug fixes reported in the public issue tracker. + +### Fixed + +- **Retention score now reflects real agent-side reads** ([#119](https://github.com/rohitg00/agentmemory/issues/119)) — `mem::retention-score` previously hardcoded `accessCount = 0` and `accessTimestamps = []` for episodic memories, and only used a single-sample `lastAccessedAt` for semantic memories. Reads from `mem::search`, `mem::smart-search`, `mem::context`, `mem::timeline`, `mem::file-context`, and the matching MCP tools (`memory_recall`, `memory_smart_search`, `memory_timeline`, `memory_file_history`) were never recorded, so the time-frequency decay formula was a dead path. The reinforcement boost is now driven by a real per-memory access log persisted at `mem:access`, written by every read endpoint (fire-and-forget, so reads never block on tracker writes), with a bounded ring buffer of the last 20 access timestamps. Pre-0.8.3 semantic memories that only have the legacy `lastAccessedAt` field still score correctly via a backwards-compat fallback. +- **`npx agentmemory-mcp` 404** ([#120](https://github.com/rohitg00/agentmemory/issues/120)) — the README told users to run `npx agentmemory-mcp` for MCP client setup, but `agentmemory-mcp` was only a `bin` entry inside `@agentmemory/agentmemory`, not a real package, so `npx` returned 404 from the npm registry. Two fixes: + - Published a new sibling package `agentmemory-mcp` (in `packages/agentmemory-mcp/`) that is a thin shim over `@agentmemory/agentmemory/dist/standalone.mjs`. `npx agentmemory-mcp` now works as documented. + - Added a canonical `npx @agentmemory/agentmemory mcp` subcommand to the main CLI for users who already have `@agentmemory/agentmemory` installed and don't want a second package on disk. Both commands do the same thing. + - README install snippets now use `npx -y agentmemory-mcp` so first-time users skip the install confirmation prompt. + +### Added + +- **Concurrent access tracking is race-safe** — the access log RMW is wrapped in the existing `withKeyedLock` keyed mutex, so two parallel reads of the same memory don't lose increments. `recordAccessBatch` uses `Promise.allSettled` so a slow keyed-lock acquisition on one id doesn't block the rest of the batch. +- **`mem::export` / `mem::import` now round-trip the access log** — the new `mem:access` namespace is included in dumps and restored on import, so backup/restore cycles no longer silently zero out reinforcement signals. +- **`exports` field in `package.json`** — explicitly exposes `./dist/standalone.mjs` as a subpath so the shim package and external consumers have a stable contract. +- **CI publishes both packages on release** — `.github/workflows/publish.yml` now publishes `@agentmemory/agentmemory` first, then the `agentmemory-mcp` shim from `packages/agentmemory-mcp/` so `npx agentmemory-mcp` works on the live release. + +## [0.8.2] — 2026-04-12 + +This release ships 6 security fixes, growth features, and a visual redesign of the README. Users on v0.8.1 should upgrade as soon as possible — the security fixes address vulnerabilities in default deployments. + +### Security + +Six vulnerabilities fixed, originally introduced before v0.8.1: + +- **[CRITICAL] Stored XSS in the real-time viewer** — viewer HTML used inline `onclick=` handlers while the CSP allowed `script-src 'unsafe-inline'`. User-controlled tool outputs could execute JavaScript in the reader's browser. Fixed by removing all inline event handlers, adding delegated `data-action` handling, switching to a per-response nonce-based CSP, and adding `script-src-attr 'none'`. +- **[CRITICAL] `curl | sh` in CLI startup** — the CLI auto-installed iii-engine via `execSync("curl -fsSL https://install.iii.dev/iii/main/install.sh | sh")`. Removed entirely. The CLI now uses an existing local `iii` binary if available, or falls back to Docker Compose. Users install iii-engine manually via `cargo install iii-engine` or Docker. +- **[HIGH] Default `0.0.0.0` binding** — `iii-config.yaml` bound REST (3111) and streams (3112) to all interfaces, exposing the memory store to anyone on the local network. Now binds to `127.0.0.1` by default. A separate `iii-config.docker.yaml` handles the Docker case with host port mapping restricted to `127.0.0.1:port`. +- **[HIGH] Unauthenticated mesh sync** — mesh push/pull endpoints accepted requests without an `Authorization` header. Mesh endpoints now require `AGENTMEMORY_SECRET`, and outgoing mesh sync requests send `Authorization: Bearer `. +- **[MEDIUM] Path traversal in Obsidian export** — the `vaultDir` parameter was passed directly to `mkdir`/`writeFile`, allowing writes to any filesystem path (e.g., `/etc/cron.d`). Exports are now confined to `AGENTMEMORY_EXPORT_ROOT` (default `~/.agentmemory`) via `path.resolve` + `startsWith` containment check. +- **[MEDIUM] Incomplete secret redaction** — the privacy filter missed `Bearer ...` tokens, OpenAI project keys (`sk-proj-*`), and GitHub fine-grained service tokens (`ghs_`, `ghu_`). Added regex coverage for all three formats. + +See GitHub Security Advisories for CVSS scores and affected version ranges. + +### Added + +- **`agentmemory demo` CLI command** — seeds 3 realistic sessions (JWT auth, N+1 query fix, rate limiting) and runs smart-search queries against them. Shows semantic search finding "N+1 query fix" when you search "database performance optimization" — the kind of result keyword matching can't produce. Zero config, 30 seconds, no integration needed. +- **`benchmark/COMPARISON.md`** — head-to-head comparison vs mem0 (53K⭐), Letta/MemGPT (22K⭐), Khoj (34K⭐), claude-mem (46K⭐), and Hippo. 18-dimension feature matrix, honest LongMemEval vs LoCoMo caveats, token efficiency table. +- **`integrations/openclaw/`** — OpenClaw gateway plugin with 4 lifecycle hooks (`onSessionStart`, `onPreLlmCall`, `onPostToolUse`, `onSessionEnd`). Same pattern as the existing Hermes integration. Includes README with paste-this-prompt block, `plugin.yaml`, and `plugin.mjs`. +- **Token savings dashboard** — `agentmemory status` now shows cumulative token savings and dollar cost saved (`$0.30/1K tokens` rate). Same card added to the real-time viewer on port 3113. +- **Paste-this-prompt blocks** — main README and both integration READMEs now open with a copy-pasteable text block users drop into their agent. The agent handles the entire setup (start server, update MCP config, verify health, open viewer). +- **60 custom SVG tags** — 30 dark-bg + 30 light-bg variants under `assets/tags/` and `assets/tags/light/`. Covers 14 section headers, 6 stat cards, 8 pill tags, and utility badges. GitHub README uses `` elements to auto-swap based on reader theme (dark theme → light-bg SVGs, light theme → dark-bg SVGs). +- **Real agent logos** in the Supported Agents grid — 16 agents with clickable brand logos (Claude Code, OpenClaw, Hermes, Cursor, Gemini CLI, OpenCode, Codex CLI, Cline, Goose, Kilo Code, Aider, Claude Desktop, Windsurf, Roo Code, Claude SDK, plus "any MCP client"). + +### Changed + +- README redesigned from plain markdown headers to SVG-tagged sections matching the agentmemory brand palette (orange `#FF6B35 → #FF8F5E` accent on dark `#1A1A1A` background). +- Hero stat row replaced with 6 custom SVG stat cards showing 95.2% R@5, 92% fewer tokens, 43 MCP tools, 12 auto hooks, 0 external DBs, 654 tests passing. +- Supported Agents grid reordered: Claude Code, OpenClaw, and Hermes now lead the first row (the 3 agents with first-class integrations in `integrations/`). +- Viewer token savings card now shows dollar cost saved alongside raw token count. +- Default configuration files updated: `iii-config.yaml` binds to `127.0.0.1`, new `iii-config.docker.yaml` for Docker deployments. + +### Fixed + +- **Viewer cost calculation was 100x under-reporting** — the formula `tokensSaved / 1000 * 0.3` returns dollars but was treated as cents. Now computes `costDollars` first, then `costCents = Math.round(costDollars * 100)`. 100K tokens now correctly displays `$30.00` instead of `30ct`. +- **`ObservationType` union missing `"image"`** — `VALID_TYPES` in `compress.ts` included `"image"` but the TypeScript union in `types.ts` didn't, breaking exhaustive checks. +- **Dynamic imports inside eviction loops** — `auto-forget.ts` and `evict.ts` called `await import("../utils/image-store.js")` inside nested loops. Hoisted once at the top of each function. +- **OpenClaw `/agentmemory/context` payload** — plugin was sending `{ tokenBudget, query, minConfidence }` but the endpoint expects `{ sessionId, project, budget? }`. Fixed to match the server contract. +- **Cursor cell in README grid** was missing its `Cursor` label. +- Codex CLI logo URL returned 404 from simple-icons CDN. Switched to GitHub org avatars for all logos for maximum reliability. + +### Infrastructure + +- 654 tests (up from 646 in v0.8.1), including 8 new tests covering viewer security, mesh auth, privacy redaction, and export confinement. +- All 60 custom SVGs validated with `xmllint` in CI-ready fashion. +- README consistency check updated to match new tool counts. + +--- + +## [0.8.1] — 2026-04-09 + +- Fix viewer not found when installed via npx (#109) + +## [0.8.0] — 2026-04-09 + +- Initial 0.8.x release + +--- + +[0.8.4]: https://github.com/rohitg00/agentmemory/compare/v0.8.3...v0.8.4 +[0.8.3]: https://github.com/rohitg00/agentmemory/compare/v0.8.2...v0.8.3 +[0.8.2]: https://github.com/rohitg00/agentmemory/compare/v0.8.1...v0.8.2 +[0.8.1]: https://github.com/rohitg00/agentmemory/compare/v0.8.0...v0.8.1 +[0.8.0]: https://github.com/rohitg00/agentmemory/releases/tag/v0.8.0 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..026795a --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,48 @@ +# Code of Conduct + +agentmemory follows the [Contributor Covenant v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). + +The short version: + +- Be kind. Assume good faith. +- Disagree on the idea, not the person. +- Harassment — in issues, PRs, discussions, or any other project space — is not tolerated. +- Unwelcome behavior gets moderated first by reminder, then by time-out, then by removal. + +## Enforcement + +Reports go to **ghumare64@gmail.com** with subject `agentmemory CoC`. All reports are confidential. + +Responses follow the Covenant's enforcement ladder — correction, warning, temporary ban, permanent ban — and are decided by the project Maintainers listed in [MAINTAINERS.md](./MAINTAINERS.md). Where a Maintainer is a party to the report, that Maintainer recuses. + +### Escalation when no impartial Maintainer is available + +If every listed Maintainer recuses, or if the project is operating with a single Maintainer and the report concerns that Maintainer, the report is forwarded to an external neutral contact for independent adjudication. The current fallback chain, in order: + +1. **Contributor Covenant community ombudsperson** — email `ombudsperson@contributor-covenant.org` (see ). +2. **Hosting foundation abuse channel** — when agentmemory is accepted into a foundation (see `GOVERNANCE.md`), reports can be routed to that foundation's conduct committee instead. The current contact will be published here at that time. +3. **GitHub Trust & Safety** — for conduct that occurs inside GitHub spaces, the report can also be filed through . + +The external contact receives the original report verbatim (redacted only of third-party PII unrelated to the incident) and decides the enforcement step. The Maintainer body executes whatever enforcement action the external contact recommends. This ensures no report can dead-end because every internal reviewer is conflicted. + +## Scope + +This applies to every project space: + +- GitHub issues, PRs, discussions, and reviews on this repo. +- Any official chat channel that gets set up (currently none). +- Public representation of the project at conferences, meetups, and on social media. + +## Full text + +Reproduced verbatim from the Contributor Covenant 2.1 for convenience: + +> We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. +> +> We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +Full Covenant v2.1 text: + +## Attribution + +Contributor Covenant is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..39d38d6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,115 @@ +# Contributing to agentmemory + +Thanks for taking an interest. This file is the short path from "I have an idea" to "it's in main." + +## Ground rules + +- Apache-2.0 license applies to every contribution. +- Sign-off is required on every commit (see [DCO](#developer-certificate-of-origin) below). +- Be civil. [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) applies. +- No attribution headers ("Generated with Claude Code", "Co-Authored-By: Claude", etc.) in commits or PR descriptions. + +## Before you open an issue + +Search existing issues first: + +- [open issues](https://github.com/rohitg00/agentmemory/issues?q=is%3Aissue+is%3Aopen) +- [closed issues](https://github.com/rohitg00/agentmemory/issues?q=is%3Aissue+is%3Aclosed) + +If it's a bug: provide the repro steps, your Node version, OS, agentmemory version (`npm view @agentmemory/agentmemory version`), and what you expected vs. what you saw. + +If it's a feature: describe the user problem before the implementation. "I couldn't X because Y" beats "please add X." + +## Before you open a PR + +1. Fork the repo and create a branch off `main`: + - `feat/` for features + - `fix/-` for bug fixes + - `docs/`, `refactor/`, `chore/` for the rest +2. `npm install` — you need Node >=20. +3. `npm run build` — TypeScript must compile clean. +4. `npm test` — the full test suite must pass. The one integration test under `test/integration.test.ts` needs a live server on `:3111` and is fine to skip locally. +5. Commit with sign-off. Rebase over tiny fixup commits so the history stays readable. + +## Pull request flow + +- Keep PRs small and focused. One logical change per PR. +- Write a clear description: what it does, why, and how to verify. +- Link the issue the PR resolves (`Fixes #NNN` / `Closes #NNN`). +- Expect CodeRabbit to review automatically. Address its comments before asking a human. +- Address review feedback in new commits (do not force-push to the same branch). Maintainers may squash on merge. +- A maintainer will merge when tests pass, CodeRabbit is green, and any review comments are addressed. + +## Developer Certificate of Origin + +Every commit must carry a `Signed-off-by` trailer stating you have the right to submit the contribution under Apache-2.0. The full text of the DCO is at . + +Add it automatically: + +```bash +git commit -s -m "feat: your message" +``` + +PRs with commits lacking sign-off will not merge. + +## Coding style + +- TypeScript strict mode. No `any` unless justified in a comment. +- Prettier-compatible formatting (editor on save is fine; no repo-wide hook). +- No code comments that restate what the code does. Only write a comment when the *why* is non-obvious — a hidden constraint, an invariant, a workaround for a specific bug. +- No dead code, no commented-out imports. +- Tests live next to the feature in `test/.test.ts`. Name the test after the behavior, not the implementation. + +## Subsystems at a glance + +| Directory | What lives here | +|-|-| +| `src/triggers/api.ts` | Every HTTP endpoint under `/agentmemory/*`. Adding an MCP tool? Add the REST twin here too. | +| `src/mcp/` | Standalone MCP server (`@agentmemory/mcp`), tools registry, transport, in-memory KV. | +| `src/functions/` | Core memory operations — observe, compress, consolidate, retention, forget, graph, smart-search, export-import, governance. | +| `src/hooks/` | The 12 auto-hooks that capture sessions in agents. | +| `src/health/` | Liveness + readiness + alert thresholds. | +| `src/state/` | KV schema, keyed mutex, access log. | +| `integrations/` | First-party plugins: `hermes/`, `openclaw/`, `filesystem-watcher/`. | +| `plugin/` | Claude Code plugin (`agentmemory@agentmemory`). | +| `website/` | Marketing site (Next.js 16). | +| `test/` | Vitest test suite. | + +## Adding an MCP tool + +1. Register the function in `src/functions/.ts`. +2. Register the HTTP trigger in `src/triggers/api.ts` with a matching `api_path`. +3. Add the tool entry in `src/mcp/tools-registry.ts`. +4. Implement in `src/mcp/standalone.ts` if the standalone MCP package should also expose it. +5. Write a test under `test/`. +6. No CHANGELOG touch in the PR itself — release PRs are the only place CHANGELOG changes. + +## Adding an auto-hook + +1. Add the new `HookType` string to the union in `src/types.ts`. +2. Wire the handler in `src/hooks/.ts`. +3. Add a Vitest case that fires the hook and asserts the observation gets written. + +## Release process + +Maintainers cut releases. Every bump touches 8 files in lockstep: + +1. `package.json` +2. `package-lock.json` (top + `packages[""].version`) +3. `plugin/.claude-plugin/plugin.json` +4. `packages/mcp/package.json` (self + `~x.y.z` pin on the main package) +5. `src/version.ts` (extend the union, assign) +6. `src/types.ts` (`ExportData.version` union) +7. `src/functions/export-import.ts` (`supportedVersions` Set) +8. `test/export-import.test.ts` (assertion) + +Then: CHANGELOG section, PR, merge, tag, GitHub release. The `Publish to npm` workflow picks up the release trigger and publishes `@agentmemory/agentmemory`, `@agentmemory/mcp`, and `@agentmemory/fs-watcher` to npm with provenance. + +## Security issues + +Do not open a public issue for a security report. See [SECURITY.md](./SECURITY.md). + +## Questions + +- Implementation questions: open a GitHub Discussion. +- Governance questions: open an issue labeled `governance`. See [GOVERNANCE.md](./GOVERNANCE.md). diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..aa9b12f --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,288 @@ +# Design System Inspired by Lamborghini + +## 1. Visual Theme & Atmosphere + +Lamborghini's website is a cathedral of darkness — a digital stage where jet-black surfaces stretch infinitely and every element emerges from the void like a machine under a spotlight. The page is almost entirely black. Not dark gray, not near-black — true, uncompromising black (`#000000`) that saturates the viewport and refuses to yield. Into this abyss, white type and Lamborghini Gold (`#FFC000`) are deployed with surgical precision, creating a visual language that feels like walking through a nighttime motorsport event where every surface absorbs light except the things that matter. + +The hero is a full-viewport video — dark, cinematic, immersive — showing event footage or vehicle reveals with the Lamborghini bull logo floating ethereally above. The navigation is minimal: a centered bull logo, a "MENU" hamburger on the left, and search/bookmark icons on the right, all rendered in white against the black canvas. There are no borders, no visible nav containers, no background color on the header — just white marks floating in darkness. The overall mood is nocturnal luxury: exclusive, theatrical, and deliberately intimidating. Each section transition is a scroll through darkness into the next revelation. + +Typography is the voice of this darkness. LamboType — a custom Neo-Grotesk typeface created by Character Type and design agency Strichpunkt — is used for everything from 120px uppercase display headlines to 10px micro labels. Its distinctive 12° angled terminals are inspired by the aerodynamic lines of Lamborghini's super sports cars, and its proportions range from Normal to Ultracompressed width. Headlines SHOUT in uppercase at enormous scales with tight line-heights (0.92 at 120px), creating dense blocks of text that feel stamped from steel. The typeface carries hexagonal geometric DNA — constructed from hexagons, three-armed stars, and circles — that echoes throughout the interface in the hexagonal pause button and UI icons. Built on Bootstrap grid with 68 Element Plus/UI components, the technical infrastructure is substantial beneath the theatrical surface. + +**Key Characteristics:** +- True black (`#000000`) dominant surfaces with white and gold as the only relief colors +- LamboType custom Neo-Grotesk font with 12° angled terminals inspired by aerodynamic car lines +- Lamborghini Gold (`#FFC000`) as the sole accent color — used exclusively for primary CTA buttons +- All-uppercase display typography at extreme scales (120px, 80px, 54px) with tight line-heights +- Full-viewport video heroes with cinematic event/vehicle content +- Zero border-radius on buttons — sharp, angular, uncompromising rectangles +- Hexagonal motifs in UI elements (pause button, icon system) echoing brand geometry +- Bootstrap grid system + Element Plus/UI 68 components underneath +- Transparent ghost buttons with white borders at 50% opacity as the secondary CTA pattern + +## 2. Color Palette & Roles + +### Primary +- **Lamborghini Gold** (`#FFC000`): The signature accent color — a warm, saturated amber-gold (rgb 255, 192, 0) used exclusively for primary action buttons ("Discover More", "Tickets", "Start Configuration"). The only chromatic color in the entire interface, it ignites against the black canvas like a headlight cutting through night +- **Pure White** (`#FFFFFF`): Primary text color on dark surfaces, logo rendering, nav elements, and light-mode button fills — the voice that speaks from the darkness + +### Secondary & Accent +- **Dark Gold** (`#917300`): Hover/pressed state for gold buttons — a deep amber (rgb 145, 115, 0) that darkens the gold to signal interaction +- **Gold Text** (`#FFCE3E`): Slightly lighter gold variant (rgb 255, 206, 62) used for inline text accents and highlighted labels +- **Cyan Pulse** (`#29ABE2`): Electric blue-cyan (rgb 41, 171, 226) appearing as an informational accent and interactive element highlight +- **Link Blue** (`#3860BE`): Medium blue (rgb 56, 96, 190) used universally for link hover states across all text colors + +### Surface & Background +- **Absolute Black** (`#000000`): The dominant surface color — used for page background, hero sections, header, footer, and most containers +- **Charcoal** (`#202020`): Elevated dark surface (rgb 32, 32, 32) — the primary "dark gray" for cards, panels, and text containers sitting above the black canvas +- **Dark Iron** (`#181818`): Subtle surface variant (rgb 24, 24, 24) — barely distinguishable from black, used for footer and deep sections +- **Overlay Black** (`rgba(0,0,0,0.7)`): Semi-transparent overlay for modals and video dimming +- **Near White** (`#F8F8F8`): Rare light surface (rgb 248, 248, 248) for content blocks in white-mode sections +- **Mist** (`#E6E6E6`): Light gray surface for secondary light-mode containers + +### Neutrals & Text +- **Pure White** (`#FFFFFF`): Primary text on dark backgrounds — headlines, body, nav labels +- **Smoke** (`#F5F5F5`): Secondary text on dark surfaces — slightly softer than pure white +- **Graphite** (`#494949`): Dark gray text on light surfaces (rgb 73, 73, 73) +- **Ash** (`#7D7D7D`): Mid-range gray for muted text, timestamps, and metadata (rgb 125, 125, 125) +- **Steel** (`#969696`): Lighter gray for disabled text and subtle labels (rgb 150, 150, 150) +- **Slate** (`#666666`): Alternative mid-gray for secondary content +- **Iron** (`#555555`): Dark mid-gray for body text variants +- **Shadow** (`#313131`): Very dark gray for text on dark surfaces where white is too strong + +### Semantic & Accent +- **Cyan Pulse** (`#29ABE2`): Used for informational highlights and interactive feedback +- **Link Blue** (`#3860BE`): Universal hover state for all hyperlinks +- **Teal Action** (`#1EAEDB`): Button hover background for transparent/ghost variants (rgb 30, 174, 219) + +### Gradient System +- No explicit gradients in the color palette — the dark-to-light progression is achieved through surface layering: `#000000` → `#181818` → `#202020` → `#494949` → `#7D7D7D` +- Video heroes use natural atmospheric gradients from the content itself +- Top-of-page gradient: subtle dark-to-darker fade at the edges of full-bleed imagery + +## 3. Typography Rules + +### Font Family +- **Display & UI**: `LamboType`, Roboto, Helvetica Neue, Arial — custom Neo-Grotesk typeface by Character Type for Lamborghini's 2024 brand refresh. Available in widths from Normal to Ultracompressed and weights from Light (300) to Black. Features 12° angled terminals inspired by aerodynamic car geometry, hexagonal construction logic, and support for 200+ languages including Latin, Cyrillic, and Greek +- **Fallback/UI**: `Open Sans` — used for some button/form contexts as system fallback +- **No italic variants** observed on the marketing site — the brand voice is always upright + +### Hierarchy + +| Role | Size | Weight | Line Height | Letter Spacing | Notes | +|------|------|--------|-------------|----------------|-------| +| Hero Display | 120px (7.50rem) | 400 | 0.92 | normal | LamboType, uppercase, maximum impact | +| Display 2 | 80px (5.00rem) | 400 | 1.13 | normal | LamboType, uppercase, major section titles | +| Section Title | 54px (3.38rem) | 400 | 1.19 | normal | LamboType, uppercase | +| Sub-section | 40px (2.50rem) | 400 | 1.15 | normal | LamboType, uppercase | +| Feature Heading | 27px (1.69rem) | 400 | 1.37 | normal | LamboType, uppercase | +| Card Title | 24px (1.50rem) | 400 | — | normal | LamboType | +| Body Large | 18px (1.13rem) | 400 | 1.56 | normal | LamboType, mixed case and uppercase variants | +| Body / UI | 16px (1.00rem) | 400/700 | 1.50 | normal/0.16px | LamboType, primary body text | +| Button Large | 16px (1.00rem) | 400 | 1.50 | normal | Gold CTA buttons | +| Button Standard | 14.4px (0.90rem) | 300/700 | 1.00 | 0.14–0.2px | LamboType, uppercase, ghost buttons | +| Button Small | 13px (0.81rem) | 300/500 | 1.20 | 0.13–0.2px | LamboType, compact button variant | +| Caption | 14px (0.88rem) | 600/700 | 1.14–1.50 | -0.42px | LamboType, uppercase, negative tracking | +| Label | 12px (0.75rem) | 400/500 | 1.83 | 0.96px | LamboType, uppercase badges and micro labels | +| Micro | 10px (0.63rem) | 400 | 1.00–2.00 | 0.225px | LamboType, uppercase, smallest text | + +### Principles +- **ALL-CAPS is the default voice**: Display and feature headings are universally uppercase. This creates a shouting, commanding tone that matches the brand's aggression +- **Extreme scale range**: From 120px heroes to 10px micro labels — a 12:1 ratio that creates dramatic visual hierarchy +- **Tight line-heights at scale**: Display sizes use 0.92-1.19 line-height, creating dense, compressed blocks of type that feel stamped rather than typeset +- **Weight 400 dominates**: Unlike many design systems that use bold for emphasis, Lamborghini's regular weight carries the headlines — the typeface itself is so distinctive it doesn't need weight variation +- **Negative tracking on captions**: -0.42px letter-spacing on 14px captions creates a compressed, technical aesthetic +- **Positive tracking on micro text**: +0.225px at 10px ensures legibility at the smallest sizes +- **Single typeface discipline**: LamboType handles everything — the 12° angled terminals and hexagonal geometry provide visual coherence across all sizes + +## 4. Component Stylings + +### Buttons +All buttons use **zero border-radius** — sharp, angular rectangles that echo the aggressive lines of Lamborghini vehicles. + +**Gold Accent CTA** — The primary action: +- Default: bg `#FFC000` (Lamborghini Gold), text `#000000`, padding 24px, fontSize 16px, fontWeight 400, borderRadius 0px, no border +- Hover: bg `#917300` (Dark Gold), darkens significantly +- Class: `btn-accent btn-large` +- Used for: "Discover More", "Tickets", "Start Configuration" + +**Transparent Ghost** — The secondary action on dark backgrounds: +- Default: bg transparent, text `#FFFFFF`, border 1px solid `#FFFFFF`, padding 16px, opacity 0.5 +- Hover: bg `#1EAEDB` (Teal Action), text white, opacity 0.7 +- Focus: bg `#1EAEDB`, border 1px solid `#000000`, outline 2px solid `#000000` +- Used for: secondary CTAs on hero sections and dark panels + +**White Filled** — Light-mode primary: +- Default: bg `#FFFFFF`, text `#202020`, no border +- Used for: CTAs on dark sections where gold isn't appropriate + +**Black Filled** — Dark filled variant: +- Default: bg `#000000`, text `#202020` +- Used for: Inverted CTA on light sections + +**Gray Neutral** — Subtle action: +- Default: bg `#969696`, text `#202020` +- Used for: secondary/tertiary actions, badge-like buttons + +### Cards & Containers +- Background: `#202020` (Charcoal) on black canvas, or `#000000` on lighter sections +- Border: `0px 1px solid #202020` bottom borders for section dividers +- Border-radius: 0px (completely sharp corners) +- Shadow: minimal, uses overlay opacity for depth +- Content: full-bleed photography + overlaid text in white + +### Inputs & Forms +- Minimal form presence on the marketing site +- Switch elements: border-radius 20px (the only rounded element), border 1px solid `#DDDDDD` +- Cookie banner input style: white text on black with `#7D7D7D` borders + +### Navigation +- **Desktop**: Centered bull logo, "MENU" hamburger with icon on left, search icon + bookmarks icon on right +- **Background**: Transparent (inherits black page background) +- **Sticky**: Fixed to top, floats above content +- **No visible borders or shadows** — elements float in the darkness +- **"MENU" label**: White text at 14px weight 400, uppercase, accompanies hamburger icon +- **Hexagonal motifs**: Pause button on hero sections uses hexagonal outline shape + +### Image Treatment +- **Hero**: Full-viewport video sections (100vh) with cinematic event/vehicle footage +- **Event photography**: Full-bleed aerial shots of Lamborghini Arena events +- **Vehicle imagery**: High-contrast studio shots on dark backgrounds, full-width +- **Aspect ratios**: Predominantly 16:9 and wider for cinematic feel +- **Dark gradient overlays**: Subtle darkening at top/bottom edges of video to ensure text legibility + +### Distinctive Components +- **Hexagonal Pause Button**: Video control uses a hexagonal outline (matching the brand's geometric DNA from the typeface), positioned bottom-right of hero sections +- **Progress Bar**: Thin white line at bottom of hero sections indicating video/slide progress +- **Badge/Tag**: bg `#969696`, text white, padding 8px, fontSize 10px, borderRadius 2px — tiny metallic pills + +## 5. Layout Principles + +### Spacing System +- **Base unit**: 8px +- **Full scale**: 2px, 4px, 5px, 8px, 10px, 12px, 15px, 16px, 20px, 24px, 32px, 40px, 48px, 56px +- **Button padding**: 16px (ghost), 24px (gold accent) +- **Section padding**: 48–56px vertical, 40px horizontal +- **Small spacing**: 2–5px for fine adjustments (badge padding, border spacing) + +### Grid & Container +- **Framework**: Bootstrap grid system (container + row + col) +- **Max width**: 1440px (largest breakpoint) +- **Columns**: Standard 12-column Bootstrap grid +- **Full-bleed**: Hero sections break out of grid to fill viewport edge-to-edge +- **Content areas**: Centered within 1200px max-width containers + +### Whitespace Philosophy +Lamborghini uses darkness as whitespace. The generous black expanses between content blocks serve the same function as white space in a light design — creating breathing room that elevates each element to the status of exhibit. A model name floating in the middle of a black viewport has the same visual weight as a gallery piece on a white wall. The absence of color IS the design. + +### Border Radius Scale +| Value | Context | +|-------|---------| +| 0px | Default for everything — buttons, cards, containers, images | +| 1px | Subtle span elements | +| 2px | Badges, close buttons, cookie elements — barely perceptible | +| 20px | Toggle switches only — the sole rounded element | + +## 6. Depth & Elevation + +| Level | Treatment | Use | +|-------|-----------|-----| +| Level 0 (Abyss) | `#000000` flat | Page background, deepest layer | +| Level 1 (Surface) | `#181818` or `#202020` | Cards, content panels, elevated sections | +| Level 2 (Overlay) | `rgba(0,0,0,0.7)` | Modal backdrops, video dimming | +| Level 3 (Fog) | `rgba(0,0,0,0.5)` | Lighter overlays, hover states | +| Level 4 (Mist) | `rgba(0,0,0,0.25)` | Subtle depth hints | + +### Shadow Philosophy +Lamborghini achieves depth through surface color layering rather than shadows. On a black canvas, traditional drop shadows are invisible — instead, the system creates elevation by shifting from absolute black to progressively lighter dark grays: `#000000` → `#181818` → `#202020` → `#494949`. This "darkness gradient" approach means that elevated elements are literally lighter than their surroundings, inverting the traditional shadow model. + +### Decorative Depth +- Full-bleed video provides atmospheric depth through cinematic lighting +- The hexagonal pause button floats with a thin white outline stroke +- Progress bars at hero section bottoms create a subtle horizon line +- No gradients, glows, or blur effects on UI elements — the photography provides all visual richness + +## 7. Do's and Don'ts + +### Do +- Use absolute black (`#000000`) as the primary background — never dark gray as a substitute +- Apply Lamborghini Gold (`#FFC000`) exclusively for primary CTA buttons — never for decorative purposes +- Set all display headings in uppercase with LamboType — the brand voice is always SHOUTING +- Use zero border-radius on buttons and cards — sharp angles are non-negotiable +- Maintain tight line-heights (0.92–1.19) on display type to create dense, architectural text blocks +- Use the transparent ghost button (white border, 50% opacity) as the secondary CTA on dark backgrounds +- Let full-viewport video/photography carry emotional weight — UI is infrastructure, not decoration +- Reserve hexagonal geometry for UI icons and the video control button +- Use weight 400 (regular) for headlines — the typeface is distinctive enough without bold emphasis +- Keep the gray palette achromatic — all neutrals are pure gray without color tinting + +### Don't +- Introduce additional accent colors beyond gold — the monochrome-plus-gold system is sacred +- Apply border-radius to buttons or cards — curved edges contradict the angular vehicle aesthetic +- Use LamboType in italic or decorative styles — the brand is always upright and direct +- Add gradients to buttons or surfaces — depth comes from surface layering, not blending +- Use light backgrounds as the primary canvas — darkness is the default state, light is the exception +- Mix lowercase into display headings — the uppercase convention communicates authority and power +- Add hover animations with scale or translate — interactions should be color-only (background/opacity shifts) +- Use Open Sans for display text — LamboType must handle all visible typography +- Create busy layouts with many small elements — Lamborghini's design is about singular, bold statements +- Apply shadows to elements — on a black canvas, shadows are meaningless; use surface color shifts instead + +## 8. Responsive Behavior + +### Breakpoints +| Name | Width | Key Changes | +|------|-------|-------------| +| Mobile Small | <425px | Single column, reduced type scale, stacked buttons | +| Mobile | 425-576px | Single column, hamburger nav, hero text ~40px | +| Tablet Small | 576-768px | 2-column grid begins, padding adjusts | +| Tablet | 768-1024px | 2-column layout, expanded hero, vehicle cards side-by-side | +| Desktop | 1024-1280px | Full navigation, 3+ column grids, display text at 80px | +| Desktop Large | 1280-1440px | Full layout, hero at 120px display, max-width containers | +| Wide | >1440px | Content centered, margins expand, hero fills viewport | + +### Touch Targets +- Gold CTA buttons: 48px+ minimum height with 24px padding (exceeds WCAG 44×44px) +- Ghost buttons: 48px+ with 16px padding +- Hamburger menu: large touch target (~48px square) +- Hexagonal pause button: approximately 48px diameter + +### Collapsing Strategy +- **Navigation**: Always hamburger-based ("MENU" + icon) — no horizontal nav expansion on any breakpoint +- **Hero video**: Maintains full-viewport height across all breakpoints, adjusting object-fit +- **Display type**: Scales from 120px (desktop) → 80px (tablet) → 54px/40px (mobile) +- **Button layout**: Side-by-side on desktop, stacks vertically on mobile +- **Grid columns**: 3-column → 2-column → 1-column progression +- **Section spacing**: Reduces from 56px → 40px → 24px vertical padding + +### Image Behavior +- Hero videos use `object-fit: cover` to maintain cinematic framing at all sizes +- Vehicle images scale within their containers with maintained aspect ratios +- Event photography crops to viewport width on narrow screens +- Background images darken at edges to maintain text contrast on all viewports + +## 9. Agent Prompt Guide + +### Quick Color Reference +- Primary CTA: "Lamborghini Gold (#FFC000)" +- Background: "Absolute Black (#000000)" +- Surface: "Charcoal (#202020)" +- Heading text: "Pure White (#FFFFFF)" +- Body text: "Ash (#7D7D7D)" +- Link hover: "Link Blue (#3860BE)" +- Accent: "Cyan Pulse (#29ABE2)" +- Border: "Pure White (#FFFFFF) at 50% opacity" + +### Example Component Prompts +- "Create a hero section with a full-viewport black background, the model name 'TEMERARIO' in LamboType at 120px uppercase weight 400 white text with 0.92 line-height, centered vertically, with a Lamborghini Gold (#FFC000) 'Discover More' button below — sharp corners, 0px radius, 24px padding, black text" +- "Design a transparent ghost button with 1px solid white border at 50% opacity, white text at 14.4px uppercase with 0.2px letter-spacing, padding 16px, on a black background — hover state changes to Teal Action (#1EAEDB) background with 70% opacity" +- "Build a navigation bar with zero visible background on absolute black, a centered bull logo, 'MENU' text label with hamburger icon on the left, and search + bookmark icons on the right — all in white, sticky position" +- "Create a news card grid on charcoal (#202020) background with white headlines at 27px uppercase, body text in #7D7D7D at 16px, and a white underlined 'Read More' link that turns #3860BE on hover" +- "Design a section divider using a 1px solid bottom border in #202020 on a black canvas — the elevation difference is purely through surface color shift, not shadow" + +### Iteration Guide +When refining existing screens generated with this design system: +1. Focus on ONE component at a time — Lamborghini's system is extreme and every element must feel aggressive +2. Reference specific color names and hex codes from this document — the palette has only about 5 active colors +3. Use natural language descriptions, not CSS values — "sharp-cut golden rectangle" not "border-radius: 0px; background: #FFC000" +4. Describe the desired "feel" alongside specific measurements — "floating in total darkness" communicates the black canvas better than "background: #000000" +5. Remember that UPPERCASE IS THE DEFAULT — if text isn't uppercase at display sizes, it probably should be diff --git a/GOVERNANCE.md b/GOVERNANCE.md new file mode 100644 index 0000000..16f505c --- /dev/null +++ b/GOVERNANCE.md @@ -0,0 +1,88 @@ +# Governance + +This document describes how decisions are made in the agentmemory project. + +The model here is a near-copy of the [Linux Foundation Minimum Viable Governance (MVG)](https://github.com/todogroup/ospolog/blob/main/governance/minimum-viable-governance.md) pattern, scoped to the project's current single-maintainer reality with a concrete plan to diversify maintainership over the next two release cycles. + +## Mission + +Ship a persistent, local-first memory runtime for AI coding agents that: + +- Requires zero external databases. +- Runs under any MCP-compatible client. +- Stays compatible with the open [Model Context Protocol](https://modelcontextprotocol.io). +- Keeps every user's data on the user's machine by default. + +## Roles + +### Users + +Anyone who runs agentmemory. No process obligation beyond the license. Feedback via [GitHub issues](https://github.com/rohitg00/agentmemory/issues) and [discussions](https://github.com/rohitg00/agentmemory/discussions) is the input channel. + +### Contributors + +Anyone who opens an issue, comments on an issue, opens a pull request, or otherwise helps the project. See [CONTRIBUTING.md](./CONTRIBUTING.md) for the how-to. + +### Maintainers + +A Maintainer has commit access to the repository, responsibility for reviewing PRs, and a vote on project-level decisions. The current list is tracked in [MAINTAINERS.md](./MAINTAINERS.md). + +A Maintainer is expected to: + +- Respond to PRs they are review-owner for within a reasonable window (goal: 3 working days for first comment). +- Uphold the [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md). +- Avoid merging their own non-trivial PRs without a second reviewer once the maintainer count is greater than one. +- Disclose conflicts of interest (employer, paid relationships to users). + +### Maintainer acceptance process + +A Contributor becomes a Maintainer by: + +1. Sustained, high-signal contributions over the prior 6 months (multiple merged PRs across more than one subsystem, plus review comments on others' PRs). +2. A Maintainer nominates the Contributor in a public PR editing `MAINTAINERS.md`. +3. The PR stays open for 7 calendar days to collect objections. +4. If no standing objection from an existing Maintainer, the PR merges and the new Maintainer is added. + +A Maintainer steps down by opening a PR that moves their entry to the `Emeritus` section. This is always accepted. + +## Decision-making + +### Default: lazy consensus on PRs + +Most decisions happen inside pull requests. A PR merges when any Maintainer approves it and no other Maintainer blocks it. Silence is assent after 72 hours of no objection. + +### Non-PR decisions + +Anything that is not a normal code change — charter changes, governance edits, maintainer additions/removals, project scope, breaking API changes, relicensing — happens in a GitHub Issue labeled `governance` with a proposal in the first comment. + +- Minor scope decisions: rough consensus in the issue thread, captured by a Maintainer in a summary comment. +- Formal votes: Maintainers react `+1` / `-1` / `0` to the summary comment. Simple majority of Maintainers with a minimum of two distinct voters carries. If only one Maintainer exists, a 7-day public comment window substitutes for a vote. + +### Breaking changes + +A breaking change to the REST / MCP surface requires: + +1. A tracking issue labeled `breaking` opened at least one minor release cycle ahead of the change. +2. A deprecation path in the codebase (warning log, feature flag, or adapter) for at least one minor release. +3. The change landing in the CHANGELOG under a clearly marked `Breaking` sub-section. + +## Release process + +Releases follow [Semantic Versioning](https://semver.org). See the [release process](./CONTRIBUTING.md#release-process) in `CONTRIBUTING.md` and the automated `.github/workflows/publish.yml` pipeline for the mechanics. + +## Conflicts of interest + +Maintainers employed by a company that sells a product competing with agentmemory, or by a company whose business depends on agentmemory's roadmap, should disclose that relationship in `MAINTAINERS.md` next to their name. Nothing prohibits such maintainership; transparency is the requirement. + +## Amending this document + +This document changes by PR. Edits follow the Non-PR decisions path above: open a `governance` issue, collect feedback, then open the PR citing the issue. + +## Related documents + +- [LICENSE](./LICENSE) — Apache-2.0 +- [CONTRIBUTING.md](./CONTRIBUTING.md) — how to contribute +- [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) — community behavior +- [SECURITY.md](./SECURITY.md) — how to report a vulnerability +- [MAINTAINERS.md](./MAINTAINERS.md) — who has commit access +- [ROADMAP.md](./ROADMAP.md) — where the project is heading diff --git a/INSTALL_FOR_AGENTS.md b/INSTALL_FOR_AGENTS.md new file mode 100644 index 0000000..f368220 --- /dev/null +++ b/INSTALL_FOR_AGENTS.md @@ -0,0 +1,164 @@ +# Install agentmemory (agent runbook) + +You are a coding agent. Follow this runbook top to bottom to install agentmemory, wire it into yourself, and verify that persistent memory works. Run each command, check the result against the "Expect" note, then move on. If a step fails, jump to Troubleshooting, and if it still fails, stop and report the step, the exact command, and the error output. + +## What you are installing + +agentmemory is a local memory server for coding agents. It runs on your machine, exposes a REST API on port 3111 and an MCP server, and stores memories on disk under `~/.agentmemory`. It is built on the iii engine, which agentmemory downloads and manages for you as a pinned binary under `~/.agentmemory/bin`. You do not install iii separately. + +Default mode needs no API key and no cloud account. Out of the box it runs hybrid retrieval (BM25 keyword search plus local on-device embeddings), so a full install proves real semantic recall with zero credentials. An LLM provider key is optional and only unlocks richer summaries and auto-injection (see "Optional: richer features"). + +## Prerequisites + +- Node.js >= 20 and npm. Check with `node -v`. +- macOS or Linux for the one-command path. On Windows, use WSL2; native Windows engine setup is manual and `agentmemory connect` is not supported there. +- Ports 3111 (REST), 3112 (streams), 3113 (viewer), and 49134 (engine) free. If any are taken, stop whatever is using them before starting (see Troubleshooting). + +## Running non-interactively + +Several commands prompt on a TTY (for example the first-run "install globally?" question). As an agent you usually want no prompts. Either set `CI=1` in the environment for the commands below, or rely on the fact that agentmemory skips all prompts automatically when stdin/stdout are not a TTY. Prompts are also never-nag: once answered they persist and are not asked again. Re-run onboarding any time with `agentmemory --reset`. + +## 1. Install globally + +```bash +npm install -g @agentmemory/agentmemory +``` + +`npm install -g` already fetches the latest published release. If you hit `EACCES` on a system Node install (macOS/Linux), retry with `sudo npm install -g @agentmemory/agentmemory`. + +No-install alternative: skip this step and run the server with `npx -y @agentmemory/agentmemory@latest` everywhere this runbook says `agentmemory`. The `@latest` and `-y` flags matter because npx caches per version and a bare `npx @agentmemory/agentmemory` can serve a stale release. + +Expect: the install completes without errors. + +## 2. Verify the install + +```bash +agentmemory --version +``` + +Expect: a version string is printed. If `command not found`, the global bin is not on `PATH`; use the `npx -y @agentmemory/agentmemory@latest` form instead. + +## 3. Start the server + +The server listens on port 3111 and auto-starts its pinned iii engine on first run (this can take a few seconds the first time while the engine binary is fetched into `~/.agentmemory/bin`). Run it in the background or in a separate terminal so the rest of the runbook can talk to it. + +```bash +agentmemory & +``` + +Or run `agentmemory` in the foreground in a dedicated terminal. + +Wait until it is reachable, then continue: + +```bash +curl -fsS http://localhost:3111/agentmemory/livez +``` + +Expect: a `200` response. Retry for up to ~15 seconds on first run while the engine warms up. + +## 4. Prove recall in one command + +```bash +agentmemory demo --serve +``` + +`--serve` boots the server, seeds three realistic sessions (JWT auth, an N+1 query fix, rate limiting), runs semantic searches against them, prints the results, and tears everything down. No second terminal needed. + +Expect: the demo finds the "N+1 query fix" memory when it searches for "database performance optimization", which keyword matching alone cannot do. Open `http://localhost:3113` while it runs to watch the memory build live. + +## 5. Wire MCP into the calling agent + +Detect which agent is running this runbook, then wire its MCP config: + +```bash +agentmemory connect +``` + +`connect` merges agentmemory into that agent's MCP config and preserves any existing servers. Supported agent names: + +`claude-code`, `copilot-cli`, `codex`, `cursor`, `gemini-cli`, `opencode`, `cline`, `continue`, `droid`, `hermes`, `openclaw`, `openhuman`, `pi`, `qwen`, `warp`, `zed`, `antigravity`, `kiro`. + +If you cannot tell which agent you are, default to `claude-code`. After wiring, restart the agent or run its MCP reload command (for example `/mcp` in Claude Code) so it picks up the server. + +Expect: the agent now lists agentmemory's tools. With the server running you should see the full set of 53 tools (for example `memory_save`, `memory_smart_search`, `memory_sessions`). If you see only 7 tools, the MCP shim could not reach a server, see Troubleshooting. + +## 6. Install native skills + +```bash +npx skills add rohitg00/agentmemory -y +``` + +This installs the native skills so the agent knows when to call the memory tools, not just that they exist. `connect` makes the tools available; skills teach the agent when to use them. + +Expect: the skills are installed for the detected agent. + +## 7. Verify a save and recall round-trip + +Confirm health first: + +```bash +curl -fsS http://localhost:3111/agentmemory/health +``` + +Expect: a JSON body with an ok status. + +Now write a memory and read it back. If MCP is wired, call the `memory_save` tool followed by `memory_smart_search`. Otherwise use REST directly (note: these are the REST paths, which differ from the MCP tool names): + +```bash +curl -X POST http://localhost:3111/agentmemory/remember \ + -H "Content-Type: application/json" \ + -d '{"content":"agentmemory install verification probe","concepts":["install-check"]}' + +curl -X POST http://localhost:3111/agentmemory/smart-search \ + -H "Content-Type: application/json" \ + -d '{"query":"install verification probe","limit":5}' +``` + +Expect: the first call returns `201`, the second returns `200` with results that include the probe memory you just saved. + +If `AGENTMEMORY_SECRET` is set in the environment, the REST API requires it. Add `-H "Authorization: Bearer $AGENTMEMORY_SECRET"` to both calls. By default no secret is set and localhost is open. + +## Optional: richer features + +These are off by default because they spend tokens. Enable them only if the user wants them. Put configuration in `~/.agentmemory/.env` (no `export` prefix), then restart the server. + +- `AGENTMEMORY_INJECT_CONTEXT=true` makes the SessionStart and PreToolUse hooks inject past memory into the agent's context automatically. Cost: spends session tokens proportional to tool-call frequency. +- `AGENTMEMORY_AUTO_COMPRESS=true` sends each observation to your LLM provider for a richer summary. Cost: spends API tokens proportional to tool-use frequency. Requires a provider key. +- Provider key: set one of `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, and similar, in the same file. Without a key, agentmemory stays in zero-LLM mode and still indexes and recalls via BM25 plus local embeddings. + +## Tool surface + +The MCP server exposes 53 tools by default (`--tools all`). Use `--tools core` (or `AGENTMEMORY_TOOLS=core`) for a lean 8-tool set on hosts with tight tool limits. The 8 core tools cover save, recall, consolidate, smart search, sessions, diagnose, lesson save, and reflect. + +## Lifecycle commands + +- `agentmemory status` shows server and engine state. +- `agentmemory doctor` runs diagnostics and reports what is misconfigured. +- `agentmemory stop` stops the engine this CLI started (`stop --force` bypasses the Docker guard). +- `agentmemory upgrade` upgrades agentmemory and the iii runtime, best effort. +- `agentmemory --reset` wipes onboarding preferences and re-runs the wizard. +- `agentmemory import-jsonl ` imports prior Claude Code session logs as memories. + +## Troubleshooting + +- `command not found: agentmemory`: the global bin is not on `PATH`. Use `npx -y @agentmemory/agentmemory@latest`. +- `EACCES` during global install: retry with `sudo`, or use the npx form. +- Stale npx version: run `npx -y @agentmemory/agentmemory@latest`, or clear the cache with `rm -rf ~/.npm/_npx` (macOS/Linux). +- Port already in use: another process holds 3111, 3112, 3113, or 49134. Stop that process, then re-run. +- Server starts but `livez` never returns 200: re-run with `agentmemory --verbose` to see engine stderr. +- Engine version warning on start: harmless. agentmemory uses its own pinned engine in `~/.agentmemory/bin` regardless of any `iii` on `PATH`. Set `AGENTMEMORY_III_VERSION` only to override deliberately. +- "engine conflict" / another iii engine already running: if a different iii version is already serving the port (common if you run your own iii), agentmemory will not adopt it and stops with an "engine conflict" note. Stop that engine (`agentmemory stop --force`, or however you started it), then re-run `agentmemory` — it installs and runs the pinned engine in `~/.agentmemory/bin`, leaving your own iii untouched. +- Only 7 tools visible in the agent: the MCP shim is in local fallback because it could not reach a server. Start `npx @agentmemory/agentmemory` and ensure `AGENTMEMORY_URL` points at it (default `http://localhost:3111`), then reload MCP. +- Windows: use WSL2 for the path above. Native Windows runs the server but `connect` and the automated engine install are not supported. + +## Report success + +Report back to the user: + +- agentmemory installed, version, and the server running on port 3111 +- which agent was wired via `agentmemory connect`, and the tool count the agent now sees +- the save and recall round-trip returned the probe memory +- the viewer is available at `http://localhost:3113` +- whether any optional features were enabled + +If any step failed, report which step, the exact command, and the error output. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cb13c72 --- /dev/null +++ b/LICENSE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to the Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by the Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding any notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2026 Rohit Ghumare + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..c6ee2e6 --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,21 @@ +# Maintainers + +The authoritative list of people with commit access. See [GOVERNANCE.md](./GOVERNANCE.md) for what a Maintainer is, what they do, and how someone becomes one. + +## Active + +| Name | GitHub | Affiliation | Area of focus | Since | +|-|-|-|-|-| +| Rohit Ghumare | [@rohitg00](https://github.com/rohitg00) | Independent | Project lead, all subsystems | 2026-01 | + +## Emeritus + +_None yet._ + +## Maintainer recruitment + +agentmemory is actively looking to diversify maintainership. The growth plan in [ROADMAP.md](./ROADMAP.md) commits to adding at least one additional Maintainer from a different organization by the end of the current growth cycle. + +If you have a sustained contribution track record and would like to be considered, open an issue tagged `governance`. + +The complete contributor graph, with commit counts and recent activity, lives at . diff --git a/README.md b/README.md new file mode 100644 index 0000000..d04da37 --- /dev/null +++ b/README.md @@ -0,0 +1,1546 @@ +

+ agentmemory — Persistent memory for AI coding agents +

+ +

+ + Your coding agent remembers everything. No more re-explaining. + Built on iii engine +
+ Persistent memory for Claude Code, GitHub Copilot CLI, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode, and any MCP client. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1.3k stars / 182 forks on the gist +

+ +

+ The gist extends Karpathy's LLM Wiki pattern with confidence scoring, lifecycle, knowledge graphs, and hybrid search: agentmemory is the implementation. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 1,423+ tests passing +

+ +

+ agentmemory demo +

+ +

+ Install • + Quick Start • + Benchmarks • + vs Competitors • + Agents • + How It Works • + MCP • + Viewer • + iii Console • + Powered by iii • + Config • + API +

+ +--- + +## Install + +Fastest path if you use a coding agent: hand it this one instruction and it installs, wires, and verifies agentmemory end to end. + +> Retrieve and follow the instructions at: https://raw.githubusercontent.com/rohitg00/agentmemory/main/INSTALL_FOR_AGENTS.md + +On Windows the fast path is WSL2. Native Windows engine setup is manual (about 10 to 20 minutes) and `agentmemory connect` is currently unsupported there. See the [Windows notes](#windows) below for the step-by-step. + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory demo --serve # one command: boot server, run demo, tear down (no second terminal) +agentmemory connect claude-code # wire MCP into your agent (also: copilot-cli, codex, cursor, gemini-cli, ...) +npx skills add rohitg00/agentmemory -y # install 15 native skills (8 you can invoke, 7 reference) so your agent knows when to use the tools +``` + +Or via `npx` (no install): + +```bash +npx @agentmemory/agentmemory +``` + +Heads-up — npx caches per version. If a bare `npx @agentmemory/agentmemory` serves an older release, force the latest with `npx -y @agentmemory/agentmemory@latest`, or clear the cache once with `rm -rf ~/.npm/_npx` (macOS/Linux; on Windows delete `%LOCALAPPDATA%\npm-cache\_npx`). The first npx run from v0.9.16+ prompts to install globally inline so the bare `agentmemory` command works everywhere afterwards. + +Already running your own `iii` engine? agentmemory pins iii-engine v0.11.2 and won't attach to a different version (the worker can't speak another engine's protocol). Stop the other engine, then run `npx -y @agentmemory/agentmemory@latest` — it installs and runs the pinned v0.11.2 in `~/.agentmemory/bin`, leaving your own `iii` untouched. + +Full options at [Quick Start](#quick-start) below. Agent-specific wiring at [Works with every agent](#works-with-every-agent). + +--- + +

Works with every agent

+ +agentmemory works with any agent that supports hooks, MCP, or REST API. All agents share the same memory server. + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+native plugin + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+native plugin + 6 hooks + MCP +
+GitHub Copilot CLI
+GitHub Copilot CLI
+MCP + plugin hooks/skills +
+OpenClaw
+OpenClaw
+native plugin + MCP +
+Hermes
+Hermes
+native plugin + MCP +
+pi
+pi
+native plugin + MCP +
+OpenHuman
+OpenHuman
+native Memory trait backend +
+Cursor
+Cursor
+MCP server +
+Gemini CLI
+Gemini CLI
+MCP server +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+MCP server +
+Goose
+Goose
+MCP server +
+Kilo Code
+Kilo Code
+MCP server +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP server +
+Windsurf
+Windsurf
+MCP server +
+Roo Code
+Roo Code
+MCP server +
+Warp
+Warp
+connect + MCP + skills +
+ +

+ Works with any agent that speaks MCP or HTTP. One server, memories shared across all of them. +

+ +--- + +You explain the same architecture every session. You re-discover the same bugs. You re-teach the same preferences. Built-in memory (CLAUDE.md, .cursorrules) caps out at 200 lines and goes stale. agentmemory fixes this. It silently captures what your agent does, compresses it into searchable memory, and injects the right context when the next session starts. One command. Works across agents. + +**What changes:** Session 1 you set up JWT auth. Session 2 you ask for rate limiting. The agent already knows your auth uses jose middleware in `src/middleware/auth.ts`, your tests cover token validation, and you chose jose over jsonwebtoken for Edge compatibility. No re-explaining. No copy-pasting. The agent just *knows*. + +```bash +npx @agentmemory/agentmemory +``` + +Latest release notes: [CHANGELOG.md](CHANGELOG.md). + +--- + +

Benchmarks

+ + + + + + +
+ +### Retrieval Accuracy + +**coding-agent-life-v1** (in-house corpus, sandbox-reproducible) + +| Adapter | P@5 | R@5 | Top-5 hit rate | p50 latency | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.240** | **1.000** | **15 / 15** | 14 ms | +| grep baseline | 0.227 | 0.967 | 15 / 15 | 0 ms | + +100% top-5 hit rate at the **P@5 math ceiling** for this corpus (0.240, see scorecard). Hybrid retrieves every gold session; grep misses 1 of 2 gold on the multi-session temporal query. Lift is **recall + temporal**, not aggregate precision — this benchmark is small + gold-sparse, the larger LongMemEval-S below differentiates better. Full per-type breakdown + correction note: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 questions) + +| System | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only fallback | 86.2% | 94.6% | 71.5% | + + + +### Token Savings + +| Approach | Tokens/yr | Cost/yr | +|---|---|---| +| Paste full context | 19.5M+ | Impossible (exceeds window) | +| LLM-summarized | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + local embeddings | ~170K | **$0** | + +
+ +> Embedding model: `all-MiniLM-L6-v2` (local, free, no API key). Full reports: [`benchmark/LONGMEMEVAL.md`](benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](benchmark/QUALITY.md), [`benchmark/SCALE.md`](benchmark/SCALE.md). Competitor comparison: [`benchmark/COMPARISON.md`](benchmark/COMPARISON.md) covering agentmemory vs mem0, Letta, Khoj, supermemory, MemPalace, Hippo. + +**Reproduce locally:** [`eval/README.md`](eval/README.md) — adapter-pluggable harness for LongMemEval `_s` (public 500-Q) + `coding-agent-life-v1` (in-house 15-session corpus). Grep / vector / agentmemory adapters score side-by-side, NDJSON output, published scorecards land in [`docs/benchmarks/`](docs/benchmarks/). + +**Pairs with [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything), and [Graphify](https://github.com/safishamsi/graphify).** Code-graph indexing, multi-agent build pipelines, and broader knowledge graphs across docs / PDFs / images / videos. agentmemory remembers the work; those three projects light up the rest of the context layer. Recipes + question-routing table: [`docs/recipes/pairings.md`](docs/recipes/pairings.md). + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (58K ⭐)Letta / MemGPT (23K ⭐)Khoj (35K ⭐)supermemory (26K ⭐)MemPalace (54K ⭐)oracleagentmemoryHippoBuilt-in (CLAUDE.md)
TypeMemory engine + MCP serverMemory layer APIFull agent runtimePersonal AIMemory API + appVector memory (OSS)Memory engine (Oracle DB)Memory systemStatic file
Retrieval R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/ASelf-reported~96.6% (self-reported)94.4% (self-reported)N/AN/A (grep)
Auto-capture12 hooks (zero manual effort)Manual add() callsAgent self-editsManualAPI-side extractionManualAPI extractionManualManual editing
SearchBM25 + Vector + Graph (RRF fusion)Vector + GraphVector (archival)SemanticVector + RAGVector-onlyVector + semanticDecay-weightedLoads everything into context
Multi-agentMCP + REST + leases + signalsAPI (no coordination)Within Letta runtime onlyNoNoNoScoped onlyMulti-agent sharedPer-agent files
Framework lock-inNone (any MCP client)NoneHigh (must use Letta)StandaloneNoneNoneOracle DatabaseNonePer-agent format
External depsNone (SQLite + iii-engine)Qdrant / pgvectorPostgres + vector DBMultipleManaged cloudVector storeOracle AI DatabaseNoneNone
Memory lifecycle4-tier consolidation + decay + auto-forgetPassive extractionAgent-managedManualAuto-forgetNoneNot statedDecay + consolidationManual pruning
Token efficiency~1,900 tokens/session ($10/yr)Varies by integrationCore memory in contextVariesCloud pricingNo token budgetLLM-backed (varies)Varies22K+ tokens at 240 obs
Real-time viewerYes (port 3113)Cloud dashboardCloud dashboardWeb UICloud dashboardNoNoNoNo
Self-hostedYes (default)OptionalOptionalYesNo (cloud-only)YesYes (Oracle DB)YesYes
+ +Benchmark note: only agentmemory's R@5 is our own measured result (LongMemEval-S, reproducible from benchmark/COMPARISON.md). The mem0 and Letta figures are their published LoCoMo numbers (a different dataset); the MemPalace, supermemory, and oracleagentmemory figures are vendor self-reported claims we have not independently reproduced (oracleagentmemory's run used GPT-5.5 against an Oracle AI Database). Shown side by side for ballpark only, not a head-to-head on identical data. Star counts are approximate and drift over time. + +--- + +

Quick Start

+ +Compatibility: this release targets stable `iii-sdk` `^0.11.0` and iii-engine v0.11.x. + +### Try it in 30 seconds + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` seeds 3 realistic sessions (JWT auth, N+1 query fix, rate limiting) and runs semantic searches against them. You'll see it find "N+1 query fix" when you search "database performance optimization" — keyword matching can't do that. + +Open `http://localhost:3113` to watch the memory build live. + +### Recommended: install globally + +`npx` caches per-version. If you ran `npx @agentmemory/agentmemory@0.9.14` last week, a bare `npx @agentmemory/agentmemory` may serve the stale 0.9.14 from `~/.npm/_npx/`, not the latest release. Install once and the bare `agentmemory` command works everywhere: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +From v0.9.16 onward, the first npx run prompts you to install globally inline — answer `Y` once and you're set. If you skip, fall back to either of these for a fresh fetch: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +On Windows / PowerShell, the equivalent cache clear is `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — the `npx -y ...@latest` form above is the cross-platform option. + +### Session Replay + +Every session agentmemory records is replayable. Open the viewer, pick the **Replay** tab, and scrub through the timeline: prompts, tool calls, tool results, and responses render as discrete events with play/pause, speed control (0.5×–4×), and keyboard shortcuts (space to toggle, arrows to step). + +Already have older Claude Code JSONL transcripts you want to bring in? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Imported sessions show up in the Replay picker alongside native ones. Under the hood each entry routes through the `mem::replay::load`, `mem::replay::sessions`, and `mem::replay::import-jsonl` iii functions — no side-channel servers. + +> **Heads-up if you rely on `import-jsonl` as your primary capture path:** Claude Code's `cleanupPeriodDays` (in `~/.claude/settings.json`, default **30**) auto-deletes JSONL transcripts older than that window from `~/.claude/projects/`. If you install agentmemory fresh on a months-old Claude Code history, anything older than 30 days is already gone before the first import. Either run `import-jsonl` on a cron, raise `cleanupPeriodDays` to something higher, or wire the auto-capture hooks (the default plugin install path) so each turn lands in agentmemory while the session is live and the JSONL cleanup stops mattering. + +### Upgrade / Maintenance + +Use the maintenance command when you intentionally want to update your local runtime: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Warning: this command mutates the current workspace/runtime. It can update JavaScript dependencies and pull the pinned `iiidev/iii:0.11.2` Docker image. It never installs an unpinned or newer iii engine. + +Implementation details live in `src/cli.ts` (see `runUpgrade` around the `src/cli.ts:544-595` region). + +### Claude Code (one block, paste it) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 15 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code without the plugin install (MCP-standalone path) + +If you wire agentmemory's MCP server through `~/.claude.json` directly instead of using `/plugin install`, Claude Code never resolves `${CLAUDE_PLUGIN_ROOT}` and you have to point hook scripts at absolute paths in `~/.claude/settings.json`. Those paths typically embed the agentmemory version (e.g. `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.22/scripts/…`), so the next upgrade silently breaks every hook. + +Workaround: + +```bash +agentmemory connect claude-code --with-hooks +``` + +This merges the same hook commands into `~/.claude/settings.json` with absolute paths resolved to the bundled `plugin/` directory of the currently installed `@agentmemory/agentmemory` package. Re-run the command after upgrading agentmemory to refresh the paths. User entries in the same file are preserved; only previous agentmemory entries are replaced. Using the `/plugin install` path remains the recommended approach. +For remote or protected deployments, launch Claude Code with `AGENTMEMORY_URL` and `AGENTMEMORY_SECRET` set. The plugin passes both values through to its bundled MCP server; when `AGENTMEMORY_URL` is empty, the MCP shim uses `http://localhost:3111`. + +### Codex CLI (Codex plugin platform) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +The Codex plugin ships from the same `plugin/` directory as the Claude Code plugin. It registers: + +- `@agentmemory/mcp` as an MCP server (proxies all 53 tools when `AGENTMEMORY_URL` points at a running agentmemory server; falls back to 7 tools locally when no server is reachable) +- 6 lifecycle hooks: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 8 invocable skills: `/recall`, `/remember`, `/session-history`, `/forget`, `/recap`, `/handoff`, `/commit-context`, `/commit-history`, plus 7 reference skills the agent loads on demand (MCP tools, REST API, config, agents, hooks, architecture, and the skill-authoring guide) + +Codex's hook engine injects `CLAUDE_PLUGIN_ROOT` into hook subprocesses (per [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), so the same hook scripts work across both hosts without duplication. Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure events are Claude-Code-only and are not registered for Codex. + +#### Codex Desktop: plugin hooks currently silent (workaround available) + +`CodexHooks` and `PluginHooks` are both stable + default-enabled in [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), but Codex Desktop builds currently do not dispatch plugin-local `hooks.json` ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). MCP tools still work; only the lifecycle observations are missing. + +Until upstream lands the fix, mirror the same hook commands into the global `~/.codex/hooks.json`: + +```bash +agentmemory connect codex --with-hooks +``` + +This adds an idempotent block to `~/.codex/hooks.json` referencing absolute paths to the bundled scripts (no `${CLAUDE_PLUGIN_ROOT}` expansion needed at user-scope). Re-run the same command after upgrading agentmemory to refresh paths. User entries in the same file are preserved; only previous agentmemory entries are replaced. + +### GitHub Copilot CLI + +```bash +# MCP-only wiring +agentmemory connect copilot-cli + +# Full hooks/skills plugin from the GitHub subdir +copilot plugin install rohitg00/agentmemory:plugin +``` + +`agentmemory connect copilot-cli` merges `mcpServers.agentmemory` into `~/.copilot/mcp-config.json` (or `$COPILOT_HOME/mcp-config.json` when `COPILOT_HOME` is set) and preserves existing servers. This adapter is Windows-safe even though other `connect` adapters still require manual Windows setup. Copilot picks up the MCP server on next launch or after `/mcp`. Install the plugin as well when you want the full hook/skill experience. + +
+OpenClaw (paste this prompt) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 53 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Full guide: [`integrations/openclaw/`](integrations/openclaw/) + +
+ +
+Hermes Agent (paste this prompt) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 53 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Full guide: [`integrations/hermes/`](integrations/hermes/) + +
+ +### Other agents + +Start the memory server: `npx @agentmemory/agentmemory` + +#### Native skills via `npx skills add` (50+ agents) + +agentmemory ships 15 skills in the Claude-Code-style `/SKILL.md` format: 8 invocable action skills (`remember`, `recall`, `recap`, `handoff`, `forget`, `commit-context`, `commit-history`, `session-history`) and 7 reference skills the agent loads on demand (`agentmemory-mcp-tools`, `agentmemory-rest-api`, `agentmemory-config`, `agentmemory-agents`, `agentmemory-hooks`, `agentmemory-architecture`, `write-agentmemory-skill`). The reference skills carry data tables generated from source, so they never drift. The [`skills`](https://npmjs.com/package/skills) CLI by vercel-labs auto-installs them into the calling agent's native skill directory across 50+ agents (Claude Code, Cursor, Cline, Continue, Droid, Warp, Codex, Antigravity, Kiro, OpenCode, Goose, Roo, Trae, Windsurf, and more): + +```bash +npx skills add rohitg00/agentmemory -y # auto-detects the calling agent +npx skills add rohitg00/agentmemory -y -a warp # explicit agent +npx skills add rohitg00/agentmemory -y -a '*' # install to every installed agent +``` + +This is **complementary** to `agentmemory connect `: + +- `agentmemory connect ` writes the MCP server config so the tools are available. +- `npx skills add rohitg00/agentmemory` installs the skills so the agent knows when to call them. + +For the few agents the skills CLI doesn't cover yet (Zed v1.3.x and below), drop the 15 SKILL.md files under the agent's native skill directory yourself — same format works everywhere. + +#### Standard MCP block + +The agentmemory entry is the **same MCP server block** across every host that uses the `mcpServers` shape (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Merge this entry into the existing `mcpServers` object** in the host's config file — don't replace the file. If the file already has other servers, add `agentmemory` next to them as another key inside `mcpServers`. If `mcpServers` is missing entirely, paste the block inside `{ "mcpServers": { ... } }`. The `${VAR}` placeholders inherit `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` from the shell at MCP-server launch — unset vars pass empty strings and the shim falls back to `http://localhost:3111`. One wired entry covers both local and remote (k8s / reverse-proxied) deployments. + +| Agent | Config file | Notes | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | Merge into `mcpServers`. One-click deeplink also available on the website. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | Merge into `mcpServers`. Restart Claude Desktop after editing. | +| **Cline / Roo Code / Kilo Code** | Cline MCP settings (Settings UI → MCP Servers → Edit) | Same `mcpServers` block. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Same `mcpServers` block. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (auto-merges). | +| **GitHub Copilot CLI (MCP only)** | `~/.copilot/mcp-config.json` | `agentmemory connect copilot-cli` merges `mcpServers.agentmemory`; Copilot picks it up on next launch or `/mcp`. | +| **GitHub Copilot CLI (full plugin)** | Copilot plugin install | `copilot plugin install rohitg00/agentmemory:plugin` for the plugin from the GitHub subdir. | +| **OpenClaw** | OpenClaw MCP config | Same `mcpServers` block, or use the deeper [memory plugin](integrations/openclaw/). | +| **Codex CLI (MCP only)** | `.codex/config.toml` | TOML shape: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, or add `[mcp_servers.agentmemory]` manually. | +| **Codex CLI (full plugin)** | Codex plugin marketplace | `codex plugin marketplace add rohitg00/agentmemory` then `codex plugin add agentmemory@agentmemory`. Registers MCP + 6 lifecycle hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 15 skills. On Codex Desktop, also run `agentmemory connect codex --with-hooks` until [openai/codex#16430](https://github.com/openai/codex/issues/16430) lands — plugin hooks are currently silent there. | +| **OpenCode (MCP only)** | `opencode.json` | Different shape — top-level `mcp` key, command as array: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (full plugin)** | `plugin/opencode/` | 22 auto-capture hooks covering session lifecycle, messages, tools, errors. Two slash commands (`/recall`, `/remember`). Copy `plugin/opencode/` into your OpenCode workspace and add the plugin entry to `opencode.json`. See [`plugin/opencode/README.md`](plugin/opencode/README.md) for the full hook table + gap analysis. | +| **pi** | `~/.pi/agent/extensions/agentmemory` | Copy [`integrations/pi`](integrations/pi/) and restart pi. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Use the deeper [memory provider plugin](integrations/hermes/) with `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` writes the standard `mcpServers` block. Hook payload is field-compatible with Claude Code, so the existing 12-hook scripts work without modification — wire them via the `hooks` section in the same `settings.json`. | +| **Antigravity** (replaces Gemini CLI) | `mcp_config.json` (in Antigravity's User dir) | `agentmemory connect antigravity` writes the standard `mcpServers` block. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. Use after the 2026-06-18 Gemini CLI sunset. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` writes the user-level config. Workspace overrides go in `.kiro/settings/mcp.json` next to your code. | +| **Warp** | `~/.warp/.mcp.json` | `agentmemory connect warp` writes the standard `mcpServers` block. Warp also auto-discovers skills from `.claude/skills/` — once the Claude Code plugin is installed the 8 agentmemory skills (`remember`, `recall`, `recap`, `handoff`, `forget`, `commit-context`, `commit-history`, `session-history`) appear natively in Warp's slash-command palette. | +| **Cline (CLI)** | `~/.cline/mcp.json` | `agentmemory connect cline` writes the standard `mcpServers` block. VS Code extension users: paste the same block via Cline Settings → MCP Servers → Edit JSON. | +| **Continue.dev** | `~/.continue/config.yaml` (preferred) or `config.json` (legacy) | `agentmemory connect continue` creates `config.yaml` from scratch when neither exists, or modifies existing `config.json`. **If you already have `config.yaml`** the adapter prints the exact block to paste under `mcpServers:` — it won't silently rewrite your yaml because preserving comments and anchors safely needs a YAML parser the package doesn't ship. Continue uses array form (not object) for `mcpServers`. | +| **Zed** | `~/.config/zed/settings.json` | `agentmemory connect zed` writes under `context_servers` (Zed's key, NOT `mcpServers`). Remote MCP servers can be wired via `{"url": "..."}` instead. | +| **Droid (Factory.ai)** | `~/.factory/mcp.json` | `agentmemory connect droid` writes the standard `mcpServers` block. Project-scoped overrides go in `/.factory/mcp.json`. The `/mcp` slash command inside droid lists configured servers. | +| **Goose** | Goose MCP settings UI | Same `mcpServers` block — use `goose configure` → Add Extension → MCP. Direct YAML edit at `~/.config/goose/config.yaml` is supported but the schema uses `extensions:` + `cmd` (not `mcpServers:` + `command`). | +| **Aider** | n/a | Talk to the REST API directly: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Any agent (32+)** | n/a | `npx skillkit install agentmemory` auto-detects the host and merges. | + +**Sandboxed MCP clients** (Flatpak / Snap / restrictive containers) that can't reach the host's `localhost`: also set `"AGENTMEMORY_FORCE_PROXY": "1"` in the `env` block, and point `AGENTMEMORY_URL` at a route the sandbox can actually reach (e.g. your LAN IP). + +### Programmatic access (Python / Rust / Node) + +agentmemory registers its core operations as iii functions (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). Any language with an iii SDK can call them directly over `ws://localhost:49134` — no separate REST client per language. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Worked example: [`examples/python/`](examples/python/) (quickstart + observation/recall flow). REST on `:3111` remains available for hosts without an iii runtime. + +### From source + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +This starts agentmemory with a local `iii-engine` if `iii` is already installed, or falls back to Docker Compose if Docker is available. REST, streams, and the viewer bind to `127.0.0.1` by default. + +Install `iii-engine` manually. **agentmemory currently pins `iii-engine` to `v0.11.2`** — `v0.11.6` introduces a new sandbox-everything-via-`iii worker add` model that agentmemory hasn't been refactored for yet. Pin lifts once the refactor lands. Override with `AGENTMEMORY_III_VERSION=` if you've migrated to the sandbox model manually. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** swap `aarch64-apple-darwin` for `x86_64-apple-darwin` +- **Linux x64:** swap for `x86_64-unknown-linux-gnu` +- **Linux arm64:** swap for `aarch64-unknown-linux-gnu` +- **Windows:** download `iii-x86_64-pc-windows-msvc.zip` from [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2), extract `iii.exe`, add to PATH + +Or use Docker (the bundled `docker-compose.yml` pulls `iiidev/iii:0.11.2`). Full docs: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory runs on Windows 10/11, but the Node.js package alone isn't enough — you also need the `iii-engine` runtime (a separate native binary) as a background process. The official upstream installer is a `sh` script and there is no PowerShell installer or scoop/winget package today, so Windows users have two paths: + +**Option A — Prebuilt Windows binary (recommended):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Option B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Option C — standalone MCP only (no engine):** if you only need the MCP tools for your agent and don't need the REST API, viewer, or cron jobs, skip the engine entirely: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Diagnostics for Windows:** if `npx @agentmemory/agentmemory` fails, re-run with `--verbose` to see the actual engine stderr. Common failure modes: + +| Symptom | Fix | +|---|---| +| `iii-engine process started` then `did not become ready within 15s` | Engine crashed on startup — re-run with `--verbose`, check stderr | +| `Could not start iii-engine` | Neither `iii.exe` nor Docker is installed. See Option A or B above | +| Port conflict | `netstat -ano \| findstr :3111` to see what's bound, then kill it or use `--port ` | +| Docker fallback skipped even though Docker is installed | Make sure Docker Desktop is actually running (system tray icon) | + +> Note: the iii **engine** is a prebuilt binary, not a cargo crate — don't try to `cargo install` it. (The iii **SDKs** are published on crates.io, npm, and PyPI, but agentmemory doesn't need them.) Supported engine install methods, all pinned to v0.11.2: the prebuilt v0.11.2 binary above, the upstream sh install script **with the version pin** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux), and the Docker image `iiidev/iii:0.11.2`. A bare `install.sh | sh` installs the **latest** engine, which agentmemory does not support — always pass `VERSION=0.11.2`. Easiest of all: just run `npx @agentmemory/agentmemory`, which fetches the pinned engine into `~/.agentmemory/bin` for you. + +--- + +

Deploy

+ +One-click templates for managed hosts. Each one ships a self-contained +Dockerfile that pulls `@agentmemory/agentmemory` from npm and copies +the iii engine binary in from the official `iiidev/iii` Docker Hub +image — no pre-built agentmemory image required. Persistent storage +mounts at `/data`; the first-boot entrypoint overwrites the +npm-bundled iii config (which binds `127.0.0.1`) with a deploy-tuned +one that binds `0.0.0.0` and uses absolute `/data` paths, generates +the HMAC secret, then drops privileges from `root` to `node` via +`gosu` before exec'ing the agentmemory CLI. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render's one-click deploy button requires `render.yaml` at the repository root, which we deliberately keep clean. Use the Render Blueprint flow documented in [`deploy/render/`](./deploy/render/README.md) to point at the in-repo blueprint manually. + +Full setup details (HMAC capture, viewer SSH tunnel, rotation, backup, +cost floors) live in [`deploy/`](./deploy/README.md): + +- [`deploy/fly`](./deploy/fly/README.md) — single machine with + `auto_stop_machines = "stop"`; cheapest idle. +- [`deploy/railway`](./deploy/railway/README.md) — Hobby plan flat fee, + volume in the dashboard. +- [`deploy/render`](./deploy/render/README.md) — Blueprint flow, + automatic disk snapshots on paid plans. +- [`deploy/coolify`](./deploy/coolify/README.md) — self-hosted on your + own VPS via [Coolify](https://coolify.io/self-hosted); same Docker + Compose stack, you own the host and the data. + +Only port `3111` is published. The viewer on `3113` stays bound to +loopback inside the container — every template's README documents the +SSH-tunnel pattern for reaching it. + +--- + +

Why agentmemory

+ +Every coding agent forgets everything when the session ends. You waste the first 5 minutes of every session re-explaining your stack. agentmemory runs in the background and eliminates that entirely. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### vs built-in agent memory + +Every AI coding agent ships with built-in memory — Claude Code has `MEMORY.md`, Cursor has notepads, Cline has memory bank. These work like sticky notes. agentmemory is the searchable database behind the sticky notes. + +| | Built-in (CLAUDE.md) | agentmemory | +|---|---|---| +| Scale | 200-line cap | Unlimited | +| Search | Loads everything into context | BM25 + vector + graph (top-K only) | +| Token cost | 22K+ at 240 observations | ~1,900 tokens (92% less) | +| Cross-agent | Per-agent files | MCP + REST (any agent) | +| Coordination | None | Leases, signals, actions, routines | +| Observability | Read files manually | Real-time viewer on :3113 | + +--- + +

How It Works

+ +### Memory Pipeline + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4-Tier Memory Consolidation + +Inspired by how human brains process memory — not unlike sleep consolidation. + +| Tier | What | Analogy | +|------|------|---------| +| **Working** | Raw observations from tool use | Short-term memory | +| **Episodic** | Compressed session summaries | "What happened" | +| **Semantic** | Extracted facts and patterns | "What I know" | +| **Procedural** | Workflows and decision patterns | "How to do it" | + +Memories decay over time (Ebbinghaus curve). Frequently accessed memories strengthen. Stale memories auto-evict. Contradictions are detected and resolved. + +### What Gets Captured + +| Hook | Captures | +|------|----------| +| `SessionStart` | Project path, session ID | +| `UserPromptSubmit` | User prompts (privacy-filtered) | +| `PreToolUse` | File access patterns + enriched context | +| `PostToolUse` | Tool name, input, output | +| `PostToolUseFailure` | Error context | +| `PreCompact` | Re-injects memory before compaction | +| `SubagentStart/Stop` | Sub-agent lifecycle | +| `Stop` | End-of-session summary | +| `SessionEnd` | Session complete marker | + +### Key Capabilities + +| Capability | Description | +|---|---| +| **Automatic capture** | Every tool use recorded via hooks — zero manual effort | +| **Semantic search** | BM25 + vector + knowledge graph with RRF fusion | +| **Memory evolution** | Versioning, supersession, relationship graphs | +| **Auto-forgetting** | TTL expiry, contradiction detection, importance eviction | +| **Privacy first** | API keys, secrets, `` tags stripped before storage | +| **Self-healing** | Circuit breaker, provider fallback chain, health monitoring | +| **Claude bridge** | Bi-directional sync with MEMORY.md | +| **Knowledge graph** | Entity extraction + BFS traversal | +| **Team memory** | Namespaced shared + private across team members | +| **Citation provenance** | Trace any memory back to source observations | +| **Git snapshots** | Version, rollback, and diff memory state | + +--- + + + +Triple-stream retrieval combining three signals: + +| Stream | What it does | When | +|---|---|---| +| **BM25** | Stemmed keyword matching with synonym expansion | Always on | +| **Vector** | Cosine similarity over dense embeddings | Embedding provider configured | +| **Graph** | Knowledge graph traversal via entity matching | Entities detected in query | + +Fused with Reciprocal Rank Fusion (RRF, k=60) and session-diversified (max 3 results per session). + +BM25 tokenizes Greek, Cyrillic, Hebrew, Arabic, and accented Latin out of the box. For Chinese / Japanese / Korean memories, install the optional segmenters (`npm install @node-rs/jieba tiny-segmenter`) to split CJK runs into word-level tokens; without them, agentmemory soft-falls to whole-run tokenization and prints a one-time hint on stderr. + +### Embedding providers + +agentmemory auto-detects your provider. For best results, install local embeddings (free): + +```bash +npm install @xenova/transformers +``` + +| Provider | Model | Cost | Notes | +|---|---|---|---| +| **Local (recommended)** | `all-MiniLM-L6-v2` | Free | Offline, +8pp recall over BM25-only | +| Gemini | `gemini-embedding-001` | Free tier | 100+ languages, 768/1536/3072 dims (MRL), 2048-token input. Replaces `text-embedding-004` ([deprecated, shutdown Jan 14, 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | Highest quality | +| Voyage AI | `voyage-code-3` | Paid | Optimized for code | +| Cohere | `embed-english-v3.0` | Free trial | General purpose | +| OpenRouter | Any model | Varies | Multi-model proxy | + +--- + +

MCP Server

+ +53 tools, 6 resources, 3 prompts, and 15 skills, the most comprehensive MCP memory toolkit for any agent. + +> **MCP shim vs full server:** the published `@agentmemory/mcp` package is a thin shim. It exposes the full 53-tool surface **only when it can reach a running agentmemory server** via `AGENTMEMORY_URL` (proxy mode). With no server reachable, the shim falls back to a 7-tool local set (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). The `AGENTMEMORY_TOOLS=core|all` env var is a *server-side* flag — setting it in the shim's `env` block has no effect. If you see only 7 tools in Cursor / OpenCode / Gemini CLI, start `npx @agentmemory/agentmemory` (or the Docker stack) and set `AGENTMEMORY_URL=http://localhost:3111`. + +### 53 Tools + +
+Core tools (always available) + +| Tool | Description | +|------|-------------| +| `memory_recall` | Search past observations | +| `memory_compress_file` | Compress markdown files while preserving structure | +| `memory_save` | Save an insight, decision, or pattern | +| `memory_patterns` | Detect recurring patterns | +| `memory_smart_search` | Hybrid semantic + keyword search | +| `memory_file_history` | Past observations about specific files | +| `memory_sessions` | List recent sessions | +| `memory_timeline` | Chronological observations | +| `memory_profile` | Project profile (concepts, files, patterns) | +| `memory_export` | Export all memory data | +| `memory_relations` | Query relationship graph | + +
+ +
+Extended tools (53 total — set AGENTMEMORY_TOOLS=all) + +| Tool | Description | +|------|-------------| +| `memory_patterns` | Detect recurring patterns | +| `memory_timeline` | Chronological observations | +| `memory_relations` | Query relationship graph | +| `memory_graph_query` | Knowledge graph traversal | +| `memory_consolidate` | Run 4-tier consolidation | +| `memory_claude_bridge_sync` | Sync with MEMORY.md | +| `memory_team_share` | Share with team members | +| `memory_team_feed` | Recent shared items | +| `memory_audit` | Audit trail of operations | +| `memory_governance_delete` | Delete with audit trail | +| `memory_snapshot_create` | Git-versioned snapshot | +| `memory_action_create` | Create work items with dependencies | +| `memory_action_update` | Update action status | +| `memory_frontier` | Unblocked actions ranked by priority | +| `memory_next` | Single most important next action | +| `memory_lease` | Exclusive action leases (multi-agent) | +| `memory_routine_run` | Instantiate workflow routines | +| `memory_signal_send` | Inter-agent messaging | +| `memory_signal_read` | Read messages with receipts | +| `memory_checkpoint` | External condition gates | +| `memory_mesh_sync` | P2P sync between instances | +| `memory_sentinel_create` | Event-driven watchers | +| `memory_sentinel_trigger` | Fire sentinels externally | +| `memory_sketch_create` | Ephemeral action graphs | +| `memory_sketch_promote` | Promote to permanent | +| `memory_crystallize` | Compact action chains | +| `memory_diagnose` | Health checks | +| `memory_heal` | Auto-fix stuck state | +| `memory_facet_tag` | Dimension:value tags | +| `memory_facet_query` | Query by facet tags | +| `memory_verify` | Trace provenance | + +
+ +### 6 Resources · 3 Prompts · 4 Skills + +| Type | Name | Description | +|------|------|-------------| +| Resource | `agentmemory://status` | Health, session count, memory count | +| Resource | `agentmemory://project/{name}/profile` | Per-project intelligence | +| Resource | `agentmemory://memories/latest` | Latest 10 active memories | +| Resource | `agentmemory://graph/stats` | Knowledge graph statistics | +| Prompt | `recall_context` | Search + return context messages | +| Prompt | `session_handoff` | Handoff data between agents | +| Prompt | `detect_patterns` | Analyze recurring patterns | +| Skill | `/recall` | Search memory | +| Skill | `/remember` | Save to long-term memory | +| Skill | `/session-history` | Recent session summaries | +| Skill | `/forget` | Delete observations/sessions | + +### Standalone MCP + +Run without the full server — for any MCP client. Either of these works: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +Or add to your agent's MCP config: + +Most agents (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Merge the `agentmemory` entry into your host's existing `mcpServers` object rather than replacing the file. For sandboxed clients that can't reach the host's `localhost`, add `"AGENTMEMORY_FORCE_PROXY": "1"` to the env block and set `AGENTMEMORY_URL` to a route the sandbox can reach. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Copy the plugin file from the repo: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +Auto-starts on port `3113`. Live observation stream, session explorer, memory browser, knowledge graph visualization, and health dashboard. + +```bash +open http://localhost:3113 +``` + +The viewer server binds to `127.0.0.1` by default. The REST-served `/agentmemory/viewer` endpoint follows the normal `AGENTMEMORY_SECRET` bearer-token rules. CSP headers use a per-response script nonce and disable inline handler attributes (`script-src-attr 'none'`). + +--- + +

iii Console

+ +The viewer at `:3113` shows what your agent **remembered**. The [iii console](https://iii.dev/docs/console) shows what your agent **did** — every memory op as an OpenTelemetry trace, every KV entry editable, every function invocable, every stream tappable. Two windows on the same memory: one product-shaped, one engine-shaped. + +Watch a `memory_smart_search` fire and see the BM25 scan → embedding lookup → RRF fusion → reranker as a waterfall. Edit a stuck consolidation timer in the KV browser. Replay a `PostToolUse` hook with a tweaked payload. Pin the WebSocket stream and watch observations land live. + +agentmemory ships this for free because every function call and trigger fires through iii — nothing custom, nothing to instrument. + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers page: every connected worker — including agentmemory itself — with PID, function count, runtime, and last-seen. +

+ +**Already installed.** The console ships with `iii` — no separate installer. + +**Launch alongside agentmemory:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Then open `http://localhost:3114`. Add `--enable-flow` for the experimental architecture-graph page. + +Override engine endpoints only if you've moved them: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**What you can do from the console:** + +| Page | Use it to | +|------|-----------| +| **Workers** | See every connected worker and its live metrics — including the agentmemory worker itself. | +| **Functions** | Invoke any of agentmemory's functions directly with a JSON payload — handy for testing `memory.recall`, `memory.consolidate`, `graph.query` without wiring a client. | +| **Triggers** | Replay HTTP, cron, event, and state triggers — fire the consolidation cron manually, retry an HTTP route, emit a state change. | +| **States** | KV browser with full CRUD — sessions, memory slots, lifecycle timers, embeddings index — edit values in place. | +| **Streams** | Live WebSocket monitor for memory writes, hook events, and observation updates as they flow through iii streams. | +| **Queues** | Durable queue topics + dead-letter management. Replay or drop failed embedding / compression jobs. | +| **Traces** | OpenTelemetry waterfall / flame / service-breakdown views. Filter by `trace_id` to see exactly which functions, DB calls, and embedding requests a single `memory.search` produced. | +| **Logs** | Structured OTEL logs filtered and correlated to trace/span IDs. | +| **Config** | Runtime configuration — see exactly which workers, providers, and ports your engine is running with. | +| **Flow** | (Optional, `--enable-flow`) Interactive architecture graph of every worker, trigger, and stream. | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces: waterfall / flame / service breakdown for every memory operation. +

+ +**Traces are already on:** + +`iii-config.yaml` ships with the `iii-observability` worker enabled (`exporter: memory`, `sampling_ratio: 1.0`, metrics + logs). No extra config needed — the moment agentmemory starts, every memory operation emits a trace span and a structured log the console can read. + +If you want to export to Jaeger/Honeycomb/Grafana Tempo instead, change `exporter: memory` to `exporter: otlp` and set the collector endpoint per iii's observability docs. + +> **Heads-up:** no auth is enforced on the console itself — keep it bound to `127.0.0.1` (the default) and never expose it publicly. + +--- + +

Powered by iii

+ +agentmemory is **already a running [iii](https://iii.dev) instance**. Three primitives — worker, function, trigger — compose the runtime; KV state, streams, and OTEL traces come from iii-state, iii-stream, and iii-observability workers that ship with iii. You didn't install Postgres, Redis, Express, pm2, or Prometheus, because iii replaces them. + +That means one more command extends agentmemory with an entire new capability. + +### Extend agentmemory with one command + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Each `iii worker add` registers new functions and triggers into the same engine agentmemory is already running on. The viewer and console pick them up immediately — no reload, no new integration, no new container. + +| `iii worker add` | What you get on top of agentmemory | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Multi-instance memory: every `remember` fans out, every `search` reads the union | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Scheduled lifecycle — nightly consolidation, weekly snapshots, decay on a fixed clock | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Durable retries: failed embedding + compression jobs survive restart, no lost observations | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | OTEL traces, metrics, logs on every function — wired in `iii-config.yaml` from day one | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | Code that came out of `memory_recall` runs inside a throwaway VM, not your shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | SQL-backed state adapter when you outgrow the in-memory KV defaults | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Stand up extra MCP servers next to agentmemory's, share the same engine | + +Full registry: [workers.iii.dev](https://workers.iii.dev). Every worker there composes through the same primitives agentmemory uses — and the agentmemory you already have is one of them. + +### What iii replaces + +| Traditional stack | agentmemory uses | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + in-memory vector index | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker supervision | +| Prometheus / Grafana | iii OTEL + health monitor | +| Custom plugin systems | `iii worker add ` | + +**174 source files · ~37,800 LOC · 1,423+ tests · 258 functions · 44 KV scopes** — all on three primitives. No `agentmemory plugin install`. The plugin system is iii itself. + +--- + +

Configuration

+ +### LLM Providers + +agentmemory auto-detects from your environment. By default, no LLM calls are made unless you configure a provider or explicitly opt in to the Claude subscription fallback. + +| Provider | Config | Notes | +|----------|--------|-------| +| **No-op (default)** | No config needed | LLM-backed compress/summarize is DISABLED. Synthetic BM25 compression + recall still work. See `AGENTMEMORY_ALLOW_AGENT_SDK` below if you used to rely on the Claude-subscription fallback. | +| Anthropic API | `ANTHROPIC_API_KEY` | Per-token billing | +| MiniMax | `MINIMAX_API_KEY` | Anthropic-compatible | +| Gemini | `GEMINI_API_KEY` | Also enables embeddings | +| OpenRouter | `OPENROUTER_API_KEY` | Any model | +| OpenAI API | `OPENAI_API_KEY` | Default `gpt-4o-mini`, override with `OPENAI_MODEL` | +| **Local (Ollama / LM Studio / vLLM / llama.cpp)** | `OPENAI_API_KEY=local` + `OPENAI_BASE_URL=http://localhost:11434/v1` (Ollama) or `http://localhost:1234/v1` (LM Studio) + `OPENAI_MODEL=` | Anything OpenAI-API-compatible. Zero cost, runs on your hardware. See [Local models](#local-models-ollama-lm-studio-vllm) below. | +| Claude subscription fallback | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Opt-in only. Spawns `@anthropic-ai/claude-agent-sdk` sessions — used to cause unbounded Stop-hook recursion so it is no longer the default. | + +### Local models (Ollama / LM Studio / vLLM) + +agentmemory talks to any OpenAI-API-compatible server, so anything that exposes `/v1/chat/completions` works without code changes. No paid keys, no cloud, no rate limits — runs entirely on your hardware. + +**Ollama** (default port `11434`): + +```bash +ollama pull qwen2.5-coder:7b # or llama3.2:3b, mistral:7b, etc. +ollama serve +``` + +```env +# ~/.agentmemory/.env +OPENAI_API_KEY=ollama # any non-empty string; Ollama ignores it +OPENAI_BASE_URL=http://localhost:11434/v1 +OPENAI_MODEL=qwen2.5-coder:7b +``` + +**LM Studio** (default port `1234`): + +Open LM Studio → Local Server tab → Start Server. Pick any chat model from the picker (Qwen 2.5 Coder, Llama 3.2, DeepSeek, etc.). + +```env +# ~/.agentmemory/.env +OPENAI_API_KEY=lmstudio # any non-empty string; LM Studio ignores it +OPENAI_BASE_URL=http://localhost:1234/v1 +OPENAI_MODEL=qwen2.5-coder-7b-instruct # match the model name from LM Studio +``` + +**vLLM / llama.cpp / Text Generation Inference**: same shape — point `OPENAI_BASE_URL` at whatever URL your server exposes, set `OPENAI_MODEL` to a name your server will accept. + +**Model picks for memory work**: compression and summarization are short tasks (<2K tokens in, <500 tokens out) where a 7B instruct model is plenty. Recommendations: + +| Model | Size | Why | +|-------|------|-----| +| `qwen2.5-coder:7b` | ~4.7 GB | Best at code-shaped sessions; trained on programming + tool-use traces | +| `llama3.2:3b` | ~2 GB | Smallest sane option — fine for compression, weaker for graph extraction | +| `mistral:7b-instruct` | ~4.4 GB | Good general-purpose baseline if you don't want code-specific | +| `deepseek-r1:7b` | ~4.7 GB | Reasoning-tier quality at 7B; slower but cleaner extractions | + +Reasoning-class models (`o1`-style with `` blocks) can return empty `content` with a `reasoning` field your local server may not surface. If extractions come back blank, switch to a non-reasoning model first. The `OPENAI_REASONING_EFFORT=none` env can also disable thinking on Ollama Cloud thinking models that mirror the OpenAI reasoning schema. + +Local embeddings ship out of the box via `@xenova/transformers` — `EMBEDDING_PROVIDER=local` (default) gives you BGE-small entirely on-device. No extra config needed. + +### Cost-aware model selection + +Background compression runs on every observation, so model choice meaningfully changes monthly spend. Captured workload data: 635 requests / 888K tokens / 35 hours of active use, run against three OpenRouter models at 2026-05-23 pricing. + +| Tier | Model | Input / 1M | Output / 1M | Cost for the captured 35h | Notes | +|------|-------|------------|-------------|---------------------------|-------| +| Recommended | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Solid compression + summarization quality at ~10× lower cost than Sonnet. | +| Recommended | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | Older but still fine for compression-only workloads. | +| Recommended | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | Strong code reasoning if your sessions are heavily code-shaped. | +| Premium | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | High quality but expensive for always-on background work. | +| Premium | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Similar tier to Sonnet. | +| Avoid | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | Reasoning-class model; massive overspend for compression. | + +agentmemory prints a runtime warning when `OPENROUTER_MODEL` matches a premium-tier pattern. Set `AGENTMEMORY_SUPPRESS_COST_WARNING=1` to silence once you've made an informed choice. + +Quality vs cost tradeoff for memory work: compression is a summarization task with relatively loose quality bars (the agent re-reads the summary, not the user). DeepSeek-V4-Pro / Qwen3-Coder land within rounding error of Sonnet on this task while costing ~10× less. Save the premium-tier models for queries you read directly. + +Sources: [OpenRouter pricing for Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek pricing notes](https://api-docs.deepseek.com/quick_start/pricing/). + +### Multi-agent memory (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +In multi-agent setups where several roles share one agentmemory server (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` tags every write with the role that made it. `AGENTMEMORY_AGENT_SCOPE` controls whether recall filters by that tag. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Two modes: + +| Mode | Tag writes | Filter recall | When to use | +|------|------------|---------------|-------------| +| `shared` (default) | yes | no | Cross-agent context with audit trail. Architect can see what developer noted, but every row records who said it. | +| `isolated` | yes | yes | Strict separation. Architect never sees developer's observations / memories / sessions. | + +What gets tagged when `AGENT_ID` is set: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. The role flows from `api::session::start` → `mem::observe` → `mem::compress` → KV. + +What gets filtered in isolated mode: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Each endpoint accepts `?agentId=` to override per-request, and `?agentId=*` to opt out of the env scope entirely. `/memories` also accepts `?includeOrphans=true` to surface pre-AGENT_ID memories whose `agentId` is undefined. + +Per-call override at the SDK / REST layer: every mutating endpoint (`/session/start`, `/remember`) accepts an `agentId` field in the request body that wins over the env. Useful for runtimes routing many roles through one server process. + +When `AGENT_ID` is unset, memory remains unscoped (legacy behavior, no tags, no filters). + +### Ports + +agentmemory + iii-engine bind four ports by default. If a restart fails with `port in use`, this table tells you which process to look for. + +| Port | Process | Purpose | Env override | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Internal streams worker (consumed by agentmemory + viewer) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Real-time viewer (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — workers register here, OTel telemetry flows over it | `III_ENGINE_URL` (full URL, default `ws://localhost:49134`) | + +Stale-process cleanup when ports stay bound after a crashed run: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` reaps both the worker and the engine pidfile cleanly on graceful shutdown. The manual cleanup above is only for the post-crash case where neither pidfile is left behind. + +### Config File + +Put agentmemory runtime configuration in `~/.agentmemory/.env` instead of exporting variables in every shell. If the viewer shows a setup hint like `export ANTHROPIC_API_KEY=...`, copy it into this file as `ANTHROPIC_API_KEY=...` without the `export` prefix, then restart agentmemory. + +Process environment variables still work and take precedence over values in the file. + +On Windows, the same file lives at `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +To test with a Claude Code Pro/Max subscription instead of an API key, opt in explicitly: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Consolidation (graph nodes, lessons, crystals) is on by default whenever an LLM provider is configured. Explicitly opt out with `CONSOLIDATION_ENABLED=false` if you want LLM-free operation. Graph extraction is a separate flag: + +```env +GRAPH_EXTRACTION_ENABLED=true +# CONSOLIDATION_ENABLED=false # opt out of auto-consolidation +``` + +### Environment Variables + +Create `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=false # on by default when an LLM provider is configured +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools, lean fallback) or "all" (53 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +128 endpoints on port `3111`. The REST API binds to `127.0.0.1` by default. Protected endpoints require `Authorization: Bearer ` when `AGENTMEMORY_SECRET` is set, and mesh sync endpoints require `AGENTMEMORY_SECRET` on both peers. + +
+Key endpoints + +| Method | Path | Description | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Health check (always public) | +| `POST` | `/agentmemory/session/start` | Start session + get context | +| `POST` | `/agentmemory/session/end` | End session | +| `POST` | `/agentmemory/observe` | Capture observation | +| `POST` | `/agentmemory/smart-search` | Hybrid search | +| `POST` | `/agentmemory/context` | Generate context | +| `POST` | `/agentmemory/remember` | Save to long-term memory | +| `POST` | `/agentmemory/forget` | Delete observations | +| `POST` | `/agentmemory/enrich` | File context + memories + bugs | +| `GET` | `/agentmemory/profile` | Project profile | +| `GET` | `/agentmemory/export` | Export all data | +| `POST` | `/agentmemory/import` | Import from JSON | +| `POST` | `/agentmemory/graph/query` | Knowledge graph query | +| `POST` | `/agentmemory/team/share` | Share with team | +| `GET` | `/agentmemory/audit` | Audit trail | + +Full endpoint list: [`src/triggers/api.ts`](src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 1,423+ tests +npm run test:integration # API tests (requires running services) +``` + +**Prerequisites:** Node.js >= 20, [iii-engine](https://iii.dev/docs) or Docker + +

License

+ +[Apache-2.0](LICENSE) diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..db32ca8 --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`rohitg00/agentmemory` +- 原始仓库:https://github.com/rohitg00/agentmemory +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/READMEs/README.de-DE.md b/READMEs/README.de-DE.md new file mode 100644 index 0000000..8d92f8a --- /dev/null +++ b/READMEs/README.de-DE.md @@ -0,0 +1,1376 @@ +

+ agentmemory — Persistentes Gedächtnis für KI-Coding-Agenten +

+ +

+ + Ihr Coding-Agent merkt sich alles. Schluss mit dem ständigen Wiederholen. + Built on iii engine +
+ Persistentes Gedächtnis für Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode und jeden MCP-Client. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design-Dokument: 1200 stars / 172 forks im Gist +

+ +

+ Das Gist erweitert Karpathys LLM-Wiki-Muster um Confidence Scoring, Lifecycle, Knowledge Graphs und hybride Suche: agentmemory ist die Implementierung. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory-Demo +

+ +

+ Installation • + Schnellstart • + Benchmarks • + Vergleich • + Agenten • + Funktionsweise • + MCP • + Viewer • + iii Console • + Powered by iii • + Konfiguration • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +Oder per `npx` (keine Installation): + +```bash +npx @agentmemory/agentmemory +``` + +Achtung — npx cached pro Version. Wenn ein nacktes `npx @agentmemory/agentmemory` eine ältere Version liefert, erzwingen Sie die neueste mit `npx -y @agentmemory/agentmemory@latest` oder leeren Sie den Cache einmalig mit `rm -rf ~/.npm/_npx` (macOS/Linux; unter Windows löschen Sie `%LOCALAPPDATA%\npm-cache\_npx`). Der erste npx-Lauf ab v0.9.16+ fordert eine globale Installation inline an, sodass der nackte Befehl `agentmemory` anschließend überall funktioniert. + +Vollständige Optionen unter [Schnellstart](#quick-start). Agenten­spezifische Verdrahtung unter [Funktioniert mit jedem Agenten](#works-with-every-agent). + +--- + +

Funktioniert mit jedem Agenten

+ +agentmemory funktioniert mit jedem Agenten, der Hooks, MCP oder REST API unterstützt. Alle Agenten teilen sich denselben Memory-Server. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+natives Plugin + 12 Hooks + MCP +
+Codex CLI
+Codex CLI
+natives Plugin + 6 Hooks + MCP +
+OpenClaw
+OpenClaw
+natives Plugin + MCP +
+Hermes
+Hermes
+natives Plugin + MCP +
+pi
+pi
+natives Plugin + MCP +
+OpenHuman
+OpenHuman
+natives Memory-trait-Backend +
+Cursor
+Cursor
+MCP-Server +
+Gemini CLI
+Gemini CLI
+MCP-Server +
+OpenCode
+OpenCode
+22 Hooks + MCP + Plugin +
+Cline
+Cline
+MCP-Server +
+Goose
+Goose
+MCP-Server +
+Kilo Code
+Kilo Code
+MCP-Server +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP-Server +
+Windsurf
+Windsurf
+MCP-Server +
+Roo Code
+Roo Code
+MCP-Server +
+ +

+ Funktioniert mit jedem Agenten, der MCP oder HTTP spricht. Ein Server, gemeinsame Erinnerungen für alle. +

+ +--- + +Sie erklären in jeder Session dieselbe Architektur. Sie entdecken dieselben Bugs erneut. Sie bringen dem Agenten dieselben Präferenzen wieder bei. Eingebautes Gedächtnis (CLAUDE.md, .cursorrules) ist bei 200 Zeilen am Ende und veraltet. agentmemory behebt das. Es erfasst stillschweigend, was Ihr Agent tut, komprimiert das Ganze in durchsuchbares Gedächtnis und injiziert beim Start der nächsten Session den passenden Kontext. Ein Befehl. Funktioniert über Agenten hinweg. + +**Was sich ändert:** Session 1 richten Sie JWT-Authentifizierung ein. Session 2 fragen Sie nach Rate Limiting. Der Agent weiß bereits, dass Ihre Auth jose-Middleware in `src/middleware/auth.ts` verwendet, dass Ihre Tests Token-Validierung abdecken und dass Sie sich aus Gründen der Edge-Kompatibilität für jose statt jsonwebtoken entschieden haben. Kein Wiederholen. Kein Copy-Paste. Der Agent *weiß es einfach*. + +```bash +npx @agentmemory/agentmemory +``` + +> **Neu in v0.9.0** — Landing-Site unter [agent-memory.dev](https://agent-memory.dev), Filesystem-Connector (`@agentmemory/fs-watcher`), das standalone MCP proxyt nun zum laufenden Server, sodass Hooks und Viewer übereinstimmen, Audit-Policy auf jedem Delete-Pfad kodifiziert, der Health-Check meldet `memory_critical` nicht mehr bei kleinen Node-Prozessen. Vollständige Hinweise in [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18). + +--- + +

Benchmarks

+ + + + + + +
+ +### Retrieval-Genauigkeit + +**coding-agent-life-v1** (interner Korpus, Sandbox-reproduzierbar) + +| Adapter | P@5 | R@5 | Top-5-Trefferquote | p50-Latenz | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep-Baseline | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100 % Top-5-Trefferquote. **2,2×** bessere Präzision als die grep-Baseline bei identischer Eingabe. Volle Aufschlüsselung pro Typ: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 Fragen) + +| System | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only Fallback | 86.2% | 94.6% | 71.5% | + + + +### Token-Einsparungen + +| Ansatz | Tokens/Jahr | Kosten/Jahr | +|---|---|---| +| Vollständigen Kontext einfügen | 19,5M+ | Unmöglich (überschreitet das Fenster) | +| LLM-zusammengefasst | ~650K | ~500 $ | +| **agentmemory** | **~170K** | **~10 $** | +| agentmemory + lokale Embeddings | ~170K | **0 $** | + +
+ +> Embedding-Modell: `all-MiniLM-L6-v2` (lokal, kostenlos, kein API-Schlüssel). Vollständige Berichte: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Konkurrenzvergleich: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory vs mem0, Letta, Khoj, claude-mem, Hippo. + +**Lokal reproduzieren:** [`eval/README.md`](../eval/README.md) — Adapter-pluggable Harness für LongMemEval `_s` (öffentlich, 500 Fragen) + `coding-agent-life-v1` (interner 15-Session-Korpus). Adapter für grep / vector / agentmemory werden direkt verglichen, NDJSON-Ausgabe, veröffentlichte Scorecards landen in [`docs/benchmarks/`](../docs/benchmarks/). + +**Funktioniert kombiniert mit [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) und [Graphify](https://github.com/safishamsi/graphify).** Code-Graph-Indizierung, mehragentige Build-Pipelines und breitere Knowledge Graphs über Docs / PDFs / Bilder / Videos. agentmemory merkt sich die Arbeit; diese drei Projekte beleuchten den Rest der Kontextschicht. Rezepte + Frage-Routing-Tabelle: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

Vergleich mit der Konkurrenz

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Eingebaut (CLAUDE.md)
TypMemory-Engine + MCP-ServerMemory-Layer-APIKomplette Agenten-RuntimeStatische Datei
Retrieval R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/V (grep)
Auto-Erfassung12 Hooks (null manueller Aufwand)Manuelle add()-AufrufeAgent bearbeitet sich selbstManuelle Bearbeitung
SucheBM25 + Vector + Graph (RRF-Fusion)Vector + GraphVector (Archival)Lädt alles in den Kontext
Multi-AgentMCP + REST + Leases + SignalsAPI (keine Koordination)Nur innerhalb der Letta-RuntimeDateien pro Agent
Framework-Lock-inKeiner (jeder MCP-Client)KeinerHoch (Letta erforderlich)Format pro Agent
Externe AbhängigkeitenKeine (SQLite + iii-engine)Qdrant / pgvectorPostgres + Vector-DBKeine
Memory-Lifecycle4-stufige Konsolidierung + Decay + Auto-ForgetPassive ExtraktionVom Agenten verwaltetManuelles Pruning
Token-Effizienz~1.900 Tokens/Session (10 $/Jahr)Je nach Integration unterschiedlichCore Memory im Kontext22K+ Tokens bei 240 Beobachtungen
Echtzeit-ViewerJa (Port 3113)Cloud-DashboardCloud-DashboardNein
Self-hostedJa (Standard)OptionalOptionalJa
+ +--- + +

Schnellstart

+ +Kompatibilität: Diese Version zielt auf stabiles `iii-sdk` `^0.11.0` und iii-engine v0.11.x ab. + +### In 30 Sekunden ausprobieren + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` befüllt 3 realistische Sessions (JWT-Auth, N+1-Query-Fix, Rate Limiting) und führt semantische Suchen darauf aus. Sie sehen, wie „N+1 query fix" gefunden wird, wenn Sie nach „database performance optimization" suchen — Keyword-Matching kann das nicht. + +Öffnen Sie `http://localhost:3113`, um das Memory in Echtzeit aufgebaut zu sehen. + +### Empfohlen: global installieren + +`npx` cached pro Version. Wenn Sie letzte Woche `npx @agentmemory/agentmemory@0.9.14` ausgeführt haben, kann ein nacktes `npx @agentmemory/agentmemory` das veraltete 0.9.14 aus `~/.npm/_npx/` ausliefern und nicht die neueste Version. Einmal installieren, und der nackte Befehl `agentmemory` funktioniert überall: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +Ab v0.9.16 fordert der erste npx-Lauf inline zu einer globalen Installation auf — einmal mit `Y` antworten, fertig. Wenn Sie das überspringen, greifen Sie für einen frischen Fetch auf eine dieser Möglichkeiten zurück: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +Unter Windows / PowerShell lautet das Äquivalent zum Leeren des Caches `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — die plattformübergreifende Option ist `npx -y ...@latest` oben. + +### Session-Replay + +Jede Session, die agentmemory aufzeichnet, ist abspielbar. Öffnen Sie den Viewer, wählen Sie den Reiter **Replay** und scrubben Sie durch die Timeline: Prompts, Tool-Aufrufe, Tool-Ergebnisse und Antworten werden als diskrete Events mit Play/Pause, Geschwindigkeitssteuerung (0,5×–4×) und Tastenkürzeln (Leertaste zum Umschalten, Pfeile zum Schrittweisen) gerendert. + +Haben Sie ältere Claude-Code-JSONL-Transkripte, die Sie übernehmen wollen? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Importierte Sessions tauchen im Replay-Picker neben den nativen auf. Intern routet jeder Eintrag durch die iii-Funktionen `mem::replay::load`, `mem::replay::sessions` und `mem::replay::import-jsonl` — keine Seitenkanal-Server. + +### Upgrade / Wartung + +Verwenden Sie den Wartungsbefehl, wenn Sie Ihr lokales Runtime bewusst aktualisieren wollen: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Achtung: Dieser Befehl verändert den aktuellen Workspace/Runtime. Er kann JavaScript-Abhängigkeiten aktualisieren und das gepinnte Docker-Image `iiidev/iii:0.11.2` ziehen. Er installiert niemals eine ungepinnte oder neuere iii-Engine. + +Implementierungsdetails in `src/cli.ts` (siehe `runUpgrade` rund um den Bereich `src/cli.ts:544-595`). + +### Claude Code (ein Block, einfügen) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code ohne Plugin-Installation (MCP-Standalone-Pfad) + +Wenn Sie den MCP-Server von agentmemory direkt über `~/.claude.json` verdrahten anstatt über `/plugin install`, löst Claude Code `${CLAUDE_PLUGIN_ROOT}` niemals auf, und Sie müssen Hook-Skripte in `~/.claude/settings.json` auf absolute Pfade zeigen lassen. Diese Pfade enthalten typischerweise die agentmemory-Version (z. B. `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), sodass das nächste Upgrade jeden Hook stillschweigend bricht. + +Workaround: + +```bash +agentmemory connect claude-code --with-hooks +``` + +Das mischt dieselben Hook-Befehle in `~/.claude/settings.json` ein, mit absoluten Pfaden, die in das mitgelieferte `plugin/`-Verzeichnis des aktuell installierten `@agentmemory/agentmemory`-Pakets auflösen. Führen Sie den Befehl nach einem agentmemory-Upgrade erneut aus, um die Pfade zu aktualisieren. Eigene Einträge in derselben Datei bleiben erhalten; nur frühere agentmemory-Einträge werden ersetzt. Den `/plugin install`-Pfad zu nutzen, bleibt der empfohlene Ansatz. +Für entfernte oder geschützte Deployments starten Sie Claude Code mit gesetztem `AGENTMEMORY_URL` und `AGENTMEMORY_SECRET`. Das Plugin reicht beide Werte an seinen mitgelieferten MCP-Server weiter; ist `AGENTMEMORY_URL` leer, verwendet das MCP-Shim `http://localhost:3111`. + +### Codex CLI (Codex-Plugin-Plattform) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Das Codex-Plugin wird aus demselben `plugin/`-Verzeichnis ausgeliefert wie das Claude-Code-Plugin. Es registriert: + +- `@agentmemory/mcp` als MCP-Server (proxyt alle 51 Tools, wenn `AGENTMEMORY_URL` auf einen laufenden agentmemory-Server zeigt; fällt lokal auf 7 Tools zurück, wenn kein Server erreichbar ist) +- 6 Lifecycle-Hooks: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 Skills: `/recall`, `/remember`, `/session-history`, `/forget` + +Codex' Hook-Engine injiziert `CLAUDE_PLUGIN_ROOT` in Hook-Subprozesse (siehe [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), sodass dieselben Hook-Skripte ohne Duplikation auf beiden Hosts laufen. Die Events Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure gibt es nur in Claude Code und werden für Codex nicht registriert. + +#### Codex Desktop: Plugin-Hooks derzeit lautlos (Workaround vorhanden) + +`CodexHooks` und `PluginHooks` sind beide stabil und standardmäßig aktiviert in [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), aber aktuelle Codex-Desktop-Builds dispatchen die plugin-lokale `hooks.json` nicht ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). MCP-Tools funktionieren weiterhin; nur die Lifecycle-Beobachtungen fehlen. + +Solange der Fix upstream nicht gelandet ist, spiegeln Sie dieselben Hook-Befehle in die globale `~/.codex/hooks.json`: + +```bash +agentmemory connect codex --with-hooks +``` + +Das fügt einen idempotenten Block zu `~/.codex/hooks.json` hinzu, der absolute Pfade zu den mitgelieferten Skripten referenziert (keine `${CLAUDE_PLUGIN_ROOT}`-Expansion auf Benutzer-Scope nötig). Führen Sie denselben Befehl nach einem agentmemory-Upgrade erneut aus, um die Pfade zu aktualisieren. Eigene Einträge in derselben Datei bleiben erhalten; nur frühere agentmemory-Einträge werden ersetzt. + +
+OpenClaw (diesen Prompt einfügen) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Vollständiger Leitfaden: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (diesen Prompt einfügen) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Vollständiger Leitfaden: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Andere Agenten + +Starten Sie den Memory-Server: `npx @agentmemory/agentmemory` + +Der agentmemory-Eintrag ist der **gleiche MCP-Server-Block** für jeden Host, der das `mcpServers`-Format verwendet (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Fügen Sie diesen Eintrag in das bestehende `mcpServers`-Objekt** in der Konfigurationsdatei des Hosts ein — ersetzen Sie nicht die Datei. Wenn die Datei bereits andere Server enthält, fügen Sie `agentmemory` als zusätzlichen Schlüssel innerhalb von `mcpServers` daneben ein. Fehlt `mcpServers` ganz, fügen Sie den Block innerhalb von `{ "mcpServers": { ... } }` ein. Die `${VAR}`-Platzhalter übernehmen `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` aus der Shell beim Start des MCP-Servers — nicht gesetzte Variablen werden als leere Strings übergeben, und das Shim fällt auf `http://localhost:3111` zurück. Ein einziger verdrahteter Eintrag deckt sowohl lokale als auch entfernte (k8s / reverse-proxied) Deployments ab. + +| Agent | Konfigurationsdatei | Hinweise | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | In `mcpServers` einfügen. Ein-Klick-Deeplink auch auf der Website. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | In `mcpServers` einfügen. Claude Desktop nach dem Editieren neu starten. | +| **Cline / Roo Code / Kilo Code** | Cline-MCP-Einstellungen (Settings UI → MCP Servers → Edit) | Gleicher `mcpServers`-Block. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Gleicher `mcpServers`-Block. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (automatisches Mergen). | +| **OpenClaw** | OpenClaw-MCP-Konfig | Gleicher `mcpServers`-Block oder das tiefer integrierte [Memory-Plugin](../integrations/openclaw/). | +| **Codex CLI (nur MCP)** | `.codex/config.toml` | TOML-Form: `codex mcp add agentmemory -- npx -y @agentmemory/mcp` oder `[mcp_servers.agentmemory]` manuell hinzufügen. | +| **Codex CLI (volles Plugin)** | Codex-Plugin-Marketplace | `codex plugin marketplace add rohitg00/agentmemory`, dann `codex plugin add agentmemory@agentmemory`. Registriert MCP + 6 Lifecycle-Hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 Skills. Auf Codex Desktop zusätzlich `agentmemory connect codex --with-hooks` ausführen, bis [openai/codex#16430](https://github.com/openai/codex/issues/16430) landet — Plugin-Hooks sind dort derzeit lautlos. | +| **OpenCode (nur MCP)** | `opencode.json` | Anderes Format — `mcp`-Schlüssel auf oberster Ebene, Command als Array: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (volles Plugin)** | `plugin/opencode/` | 22 Auto-Capture-Hooks für Session-Lifecycle, Messages, Tools, Fehler. Zwei Slash-Befehle (`/recall`, `/remember`). Kopieren Sie `plugin/opencode/` in Ihren OpenCode-Workspace und fügen Sie den Plugin-Eintrag zu `opencode.json` hinzu. Siehe [`plugin/opencode/README.md`](../plugin/opencode/README.md) für die vollständige Hook-Tabelle + Gap-Analyse. | +| **pi** | `~/.pi/agent/extensions/agentmemory` | [`integrations/pi`](../integrations/pi/) kopieren und pi neu starten. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Verwenden Sie das tiefer integrierte [Memory-Provider-Plugin](../integrations/hermes/) mit `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` schreibt den standardmäßigen `mcpServers`-Block. Die Hook-Payload ist feldkompatibel mit Claude Code, sodass die bestehenden 12 Hook-Skripte ohne Änderung funktionieren — verdrahten Sie sie über den Abschnitt `hooks` in derselben `settings.json`. | +| **Antigravity** (ersetzt Gemini CLI) | `mcp_config.json` (im User-Verzeichnis von Antigravity) | `agentmemory connect antigravity` schreibt den standardmäßigen `mcpServers`-Block. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. Nach dem Sunset von Gemini CLI am 2026-06-18 zu nutzen. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` schreibt die Konfig auf Benutzerebene. Workspace-Overrides liegen in `.kiro/settings/mcp.json` neben Ihrem Code. | +| **Goose** | Goose-MCP-Einstellungen-UI | Gleicher `mcpServers`-Block. | +| **Aider** | n/v | Sprechen Sie direkt mit der REST API: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Jeder Agent (32+)** | n/v | `npx skillkit install agentmemory` erkennt den Host automatisch und merged. | + +**MCP-Clients in Sandboxen** (Flatpak / Snap / restriktive Container), die den `localhost` des Hosts nicht erreichen können: Setzen Sie zusätzlich `"AGENTMEMORY_FORCE_PROXY": "1"` im `env`-Block und lassen Sie `AGENTMEMORY_URL` auf eine Route zeigen, die die Sandbox tatsächlich erreichen kann (z. B. Ihre LAN-IP). + +### Programmatischer Zugriff (Python / Rust / Node) + +agentmemory registriert seine Kernoperationen als iii-Funktionen (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). Jede Sprache mit einem iii-SDK kann sie direkt über `ws://localhost:49134` aufrufen — kein separater REST-Client pro Sprache nötig. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Vollständiges Beispiel: [`examples/python/`](../examples/python/) (Quickstart + Beobachtungs-/Recall-Fluss). REST auf `:3111` bleibt verfügbar für Hosts ohne iii-Runtime. + +### Aus den Quellen + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Das startet agentmemory mit einer lokalen `iii-engine`, falls `iii` bereits installiert ist, oder fällt auf Docker Compose zurück, falls Docker vorhanden ist. REST, Streams und der Viewer binden sich standardmäßig an `127.0.0.1`. + +`iii-engine` manuell installieren. **agentmemory pinnt `iii-engine` derzeit auf `v0.11.2`** — `v0.11.6` führt ein neues Modell ein, alles per `iii worker add` zu sandboxen, für das agentmemory noch nicht refaktoriert wurde. Der Pin wird aufgehoben, sobald die Refaktorierung erfolgt ist. Überschreiben Sie mit `AGENTMEMORY_III_VERSION=`, wenn Sie manuell auf das Sandbox-Modell migriert sind. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** `aarch64-apple-darwin` durch `x86_64-apple-darwin` ersetzen +- **Linux x64:** durch `x86_64-unknown-linux-gnu` ersetzen +- **Linux arm64:** durch `aarch64-unknown-linux-gnu` ersetzen +- **Windows:** `iii-x86_64-pc-windows-msvc.zip` von [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2) herunterladen, `iii.exe` extrahieren, zum PATH hinzufügen + +Oder Docker verwenden (die mitgelieferte `docker-compose.yml` zieht `iiidev/iii:0.11.2`). Vollständige Doku: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory läuft auf Windows 10/11, aber das Node.js-Paket allein genügt nicht — Sie brauchen außerdem das `iii-engine`-Runtime (ein separates natives Binary) als Hintergrundprozess. Der offizielle Upstream-Installer ist ein `sh`-Skript, und es gibt heute weder einen PowerShell-Installer noch ein scoop/winget-Paket, daher haben Windows-Nutzer zwei Wege: + +**Option A — Vorgebautes Windows-Binary (empfohlen):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Option B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Option C — Nur Standalone-MCP (ohne Engine):** Wenn Sie nur die MCP-Tools für Ihren Agenten brauchen und weder REST API, Viewer noch Cron-Jobs, überspringen Sie die Engine ganz: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Diagnose unter Windows:** Wenn `npx @agentmemory/agentmemory` fehlschlägt, mit `--verbose` neu starten, um das tatsächliche Engine-stderr zu sehen. Häufige Fehlerbilder: + +| Symptom | Lösung | +|---|---| +| `iii-engine process started`, dann `did not become ready within 15s` | Engine ist beim Start abgestürzt — mit `--verbose` neu starten, stderr prüfen | +| `Could not start iii-engine` | Weder `iii.exe` noch Docker installiert. Siehe Option A oder B oben | +| Port-Konflikt | `netstat -ano \| findstr :3111`, um zu sehen, was gebunden ist, dann beenden oder `--port ` verwenden | +| Docker-Fallback wird übersprungen, obwohl Docker installiert ist | Stellen Sie sicher, dass Docker Desktop tatsächlich läuft (Taskleisten-Icon) | + +> Hinweis: Die iii-**Engine** ist ein vorgebautes Binary, kein Cargo-Crate — versuche nicht, sie per `cargo install` zu installieren. (Die iii-**SDKs** sind auf crates.io, npm und PyPI veröffentlicht, aber agentmemory benötigt sie nicht.) Unterstützte Engine-Installationsmethoden, alle auf v0.11.2 gepinnt: das vorgebaute v0.11.2-Binary oben, das Upstream-`sh`-Installationsskript **mit dem Versions-Pin** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) und das Docker-Image `iiidev/iii:0.11.2`. Ein bloßes `install.sh | sh` installiert die **neueste** Engine, die agentmemory nicht unterstützt — übergib immer `VERSION=0.11.2`. Am einfachsten von allen: Führe einfach `npx @agentmemory/agentmemory` aus, das die gepinnte Engine für dich nach `~/.agentmemory/bin` holt. + +--- + +

Deployment

+ +Ein-Klick-Vorlagen für gemanagte Hosts. Jede liefert ein autonomes +Dockerfile aus, das `@agentmemory/agentmemory` aus npm bezieht und das +iii-engine-Binary aus dem offiziellen `iiidev/iii`-Image vom Docker Hub +kopiert — keine vorgebaute agentmemory-Image-Erforderlichkeit. Persistenter +Speicher wird unter `/data` gemountet; der Entrypoint beim ersten Boot +überschreibt die per npm gelieferte iii-Konfig (die `127.0.0.1` bindet) +mit einer deploy-tauglichen Variante, die `0.0.0.0` bindet und absolute +`/data`-Pfade verwendet, generiert das HMAC-Secret und senkt die +Privilegien von `root` auf `node` via `gosu`, bevor er die agentmemory-CLI +exec't. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Der Ein-Klick-Deploy-Button von Render erfordert eine `render.yaml` im Repository-Root, das wir bewusst sauber halten. Verwenden Sie den Render-Blueprint-Fluss, dokumentiert in [`deploy/render/`](./deploy/render/README.md), um manuell auf das im Repo liegende Blueprint zu zeigen. + +Vollständige Setup-Details (HMAC-Capture, Viewer-SSH-Tunnel, Rotation, Backup, Kostenuntergrenzen) finden Sie in [`deploy/`](./deploy/README.md): + +- [`deploy/fly`](./deploy/fly/README.md) — Einzelmaschine mit + `auto_stop_machines = "stop"`; am günstigsten im Leerlauf. +- [`deploy/railway`](./deploy/railway/README.md) — Hobby-Plan mit Pauschalpreis, + Volume im Dashboard. +- [`deploy/render`](./deploy/render/README.md) — Blueprint-Fluss, + automatische Disk-Snapshots auf bezahlten Plänen. +- [`deploy/coolify`](./deploy/coolify/README.md) — self-hosted auf Ihrem + eigenen VPS via [Coolify](https://coolify.io/self-hosted); derselbe + Docker-Compose-Stack, Sie besitzen Host und Daten. + +Nur Port `3111` wird veröffentlicht. Der Viewer auf `3113` bleibt im +Container an Loopback gebunden — jedes Template-README dokumentiert +das SSH-Tunnel-Muster, um ihn zu erreichen. + +--- + +

Warum agentmemory

+ +Jeder Coding-Agent vergisst alles, wenn die Session endet. Sie verschwenden die ersten 5 Minuten jeder Session damit, Ihren Stack erneut zu erklären. agentmemory läuft im Hintergrund und beseitigt das vollständig. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### vs. eingebautes Agent-Memory + +Jeder KI-Coding-Agent kommt mit eingebautem Memory — Claude Code hat `MEMORY.md`, Cursor hat Notepads, Cline hat Memory Bank. Das funktioniert wie Klebezettel. agentmemory ist die durchsuchbare Datenbank hinter den Klebezetteln. + +| | Eingebaut (CLAUDE.md) | agentmemory | +|---|---|---| +| Skalierung | 200-Zeilen-Limit | Unbegrenzt | +| Suche | Lädt alles in den Kontext | BM25 + Vector + Graph (nur Top-K) | +| Token-Kosten | 22K+ bei 240 Beobachtungen | ~1.900 Tokens (92 % weniger) | +| Agentenübergreifend | Dateien pro Agent | MCP + REST (jeder Agent) | +| Koordination | Keine | Leases, Signale, Actions, Routinen | +| Observability | Dateien manuell lesen | Echtzeit-Viewer auf :3113 | + +--- + +

Funktionsweise

+ +### Memory-Pipeline + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4-stufige Memory-Konsolidierung + +Inspiriert davon, wie menschliche Gehirne Erinnerungen verarbeiten — nicht unähnlich der Schlafkonsolidierung. + +| Stufe | Was | Analogie | +|------|------|---------| +| **Working** | Rohbeobachtungen aus Tool-Nutzung | Kurzzeitgedächtnis | +| **Episodic** | Komprimierte Session-Zusammenfassungen | „Was passiert ist" | +| **Semantic** | Extrahierte Fakten und Muster | „Was ich weiß" | +| **Procedural** | Workflows und Entscheidungsmuster | „Wie es geht" | + +Erinnerungen klingen mit der Zeit ab (Ebbinghaus-Kurve). Häufig abgerufene Erinnerungen werden verstärkt. Veraltete Erinnerungen werden automatisch evakuiert. Widersprüche werden erkannt und aufgelöst. + +### Was erfasst wird + +| Hook | Erfasst | +|------|----------| +| `SessionStart` | Projektpfad, Session-ID | +| `UserPromptSubmit` | Benutzer-Prompts (Privacy-gefiltert) | +| `PreToolUse` | Datei-Zugriffsmuster + angereicherter Kontext | +| `PostToolUse` | Tool-Name, Eingabe, Ausgabe | +| `PostToolUseFailure` | Fehlerkontext | +| `PreCompact` | Re-injiziert Memory vor der Kompaktierung | +| `SubagentStart/Stop` | Sub-Agent-Lifecycle | +| `Stop` | Zusammenfassung am Session-Ende | +| `SessionEnd` | Session-Abschluss-Marker | + +### Kernfähigkeiten + +| Fähigkeit | Beschreibung | +|---|---| +| **Automatische Erfassung** | Jede Tool-Nutzung via Hooks aufgezeichnet — null manueller Aufwand | +| **Semantische Suche** | BM25 + Vector + Knowledge Graph mit RRF-Fusion | +| **Memory-Evolution** | Versionierung, Supersession, Beziehungsgraphen | +| **Auto-Vergessen** | TTL-Ablauf, Widerspruchserkennung, Wichtigkeits-Eviction | +| **Privacy first** | API-Keys, Secrets, ``-Tags vor Speicherung entfernt | +| **Selbstheilung** | Circuit Breaker, Provider-Fallback-Kette, Health-Monitoring | +| **Claude-Bridge** | Bidirektionale Synchronisierung mit MEMORY.md | +| **Knowledge Graph** | Entitäten-Extraktion + BFS-Traversal | +| **Team-Memory** | Namensraum-getrennt geteilt + privat über Teammitglieder hinweg | +| **Zitations-Provenienz** | Jedes Memory bis zu Ursprungsbeobachtungen zurückverfolgen | +| **Git-Snapshots** | Memory-Stand versionieren, zurückrollen und diffen | + +--- + + + +Triple-Stream-Retrieval, das drei Signale kombiniert: + +| Stream | Was es tut | Wann | +|---|---|---| +| **BM25** | Gestemmter Keyword-Abgleich mit Synonymerweiterung | Immer aktiv | +| **Vector** | Cosinus-Ähnlichkeit über dichte Embeddings | Embedding-Provider konfiguriert | +| **Graph** | Knowledge-Graph-Traversal via Entitäten-Abgleich | Entitäten in der Anfrage erkannt | + +Verschmolzen mit Reciprocal Rank Fusion (RRF, k=60) und session-diversifiziert (max. 3 Ergebnisse pro Session). + +BM25 tokenisiert Griechisch, Kyrillisch, Hebräisch, Arabisch und akzentuiertes Latein standardmäßig. Für Erinnerungen in Chinesisch / Japanisch / Koreanisch installieren Sie die optionalen Segmentierer (`npm install @node-rs/jieba tiny-segmenter`), um CJK-Folgen in Worttokens aufzuteilen; ohne sie fällt agentmemory weich auf eine Tokenisierung als gesamte Folge zurück und gibt einmalig einen Hinweis auf stderr aus. + +### Embedding-Provider + +agentmemory erkennt Ihren Provider automatisch. Für die besten Ergebnisse installieren Sie lokale Embeddings (kostenlos): + +```bash +npm install @xenova/transformers +``` + +| Provider | Modell | Kosten | Hinweise | +|---|---|---|---| +| **Lokal (empfohlen)** | `all-MiniLM-L6-v2` | Kostenlos | Offline, +8 pp Recall gegenüber BM25 allein | +| Gemini | `gemini-embedding-001` | Free Tier | 100+ Sprachen, 768/1536/3072 Dims (MRL), 2048-Token-Eingabe. Ersetzt `text-embedding-004` ([deprecated, Abschaltung 14. Jan. 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | 0,02 $/1M | Höchste Qualität | +| Voyage AI | `voyage-code-3` | Kostenpflichtig | Auf Code optimiert | +| Cohere | `embed-english-v3.0` | Testzugang | Allzweck | +| OpenRouter | Beliebiges Modell | Variabel | Multi-Modell-Proxy | + +--- + +

MCP-Server

+ +53 Tools, 6 Resources, 3 Prompts und 4 Skills — das umfassendste MCP-Memory-Toolkit für jeden Agenten. + +> **MCP-Shim vs. voller Server:** Das veröffentlichte `@agentmemory/mcp`-Paket ist ein dünnes Shim. Es legt die volle 51-Tool-Oberfläche **nur dann** offen, wenn es per `AGENTMEMORY_URL` einen laufenden agentmemory-Server erreichen kann (Proxy-Modus). Ohne erreichbaren Server fällt das Shim auf einen lokalen 7-Tool-Satz zurück (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). Die Umgebungsvariable `AGENTMEMORY_TOOLS=core|all` ist ein *serverseitiger* Schalter — sie im `env`-Block des Shims zu setzen hat keinen Effekt. Wenn Sie in Cursor / OpenCode / Gemini CLI nur 7 Tools sehen, starten Sie `npx @agentmemory/agentmemory` (oder den Docker-Stack) und setzen Sie `AGENTMEMORY_URL=http://localhost:3111`. + +### 51 Tools + +
+Core-Tools (immer verfügbar) + +| Tool | Beschreibung | +|------|-------------| +| `memory_recall` | Vergangene Beobachtungen durchsuchen | +| `memory_compress_file` | Markdown-Dateien unter Erhalt der Struktur komprimieren | +| `memory_save` | Erkenntnis, Entscheidung oder Muster speichern | +| `memory_patterns` | Wiederkehrende Muster erkennen | +| `memory_smart_search` | Hybride semantische + Keyword-Suche | +| `memory_file_history` | Vergangene Beobachtungen zu bestimmten Dateien | +| `memory_sessions` | Letzte Sessions auflisten | +| `memory_timeline` | Chronologische Beobachtungen | +| `memory_profile` | Projektprofil (Konzepte, Dateien, Muster) | +| `memory_export` | Alle Memory-Daten exportieren | +| `memory_relations` | Beziehungsgraph abfragen | + +
+ +
+Erweiterte Tools (insgesamt 51 — AGENTMEMORY_TOOLS=all setzen) + +| Tool | Beschreibung | +|------|-------------| +| `memory_patterns` | Wiederkehrende Muster erkennen | +| `memory_timeline` | Chronologische Beobachtungen | +| `memory_relations` | Beziehungsgraph abfragen | +| `memory_graph_query` | Knowledge-Graph-Traversal | +| `memory_consolidate` | 4-stufige Konsolidierung ausführen | +| `memory_claude_bridge_sync` | Mit MEMORY.md synchronisieren | +| `memory_team_share` | Mit Teammitgliedern teilen | +| `memory_team_feed` | Kürzlich geteilte Einträge | +| `memory_audit` | Audit-Trail der Operationen | +| `memory_governance_delete` | Mit Audit-Trail löschen | +| `memory_snapshot_create` | Git-versionierter Snapshot | +| `memory_action_create` | Arbeitspakete mit Abhängigkeiten anlegen | +| `memory_action_update` | Action-Status aktualisieren | +| `memory_frontier` | Entblockte Actions nach Priorität sortiert | +| `memory_next` | Einzelne wichtigste nächste Action | +| `memory_lease` | Exklusive Action-Leases (Multi-Agent) | +| `memory_routine_run` | Workflow-Routinen instanziieren | +| `memory_signal_send` | Inter-Agent-Messaging | +| `memory_signal_read` | Nachrichten mit Empfangsquittungen lesen | +| `memory_checkpoint` | Externe Bedingungs-Gates | +| `memory_mesh_sync` | P2P-Sync zwischen Instanzen | +| `memory_sentinel_create` | Ereignisgesteuerte Watcher | +| `memory_sentinel_trigger` | Sentinels extern auslösen | +| `memory_sketch_create` | Ephemere Action-Graphen | +| `memory_sketch_promote` | In permanent überführen | +| `memory_crystallize` | Action-Ketten kompaktieren | +| `memory_diagnose` | Health-Checks | +| `memory_heal` | Festsitzenden Zustand auto-fixen | +| `memory_facet_tag` | Dimension:Wert-Tags | +| `memory_facet_query` | Nach Facetten-Tags abfragen | +| `memory_verify` | Provenienz nachverfolgen | + +
+ +### 6 Resources · 3 Prompts · 4 Skills + +| Typ | Name | Beschreibung | +|------|------|-------------| +| Resource | `agentmemory://status` | Health, Session-Anzahl, Memory-Anzahl | +| Resource | `agentmemory://project/{name}/profile` | Projektspezifische Intelligenz | +| Resource | `agentmemory://memories/latest` | Die 10 neuesten aktiven Erinnerungen | +| Resource | `agentmemory://graph/stats` | Knowledge-Graph-Statistiken | +| Prompt | `recall_context` | Suche + Rückgabe von Kontext-Nachrichten | +| Prompt | `session_handoff` | Handoff-Daten zwischen Agenten | +| Prompt | `detect_patterns` | Wiederkehrende Muster analysieren | +| Skill | `/recall` | Memory durchsuchen | +| Skill | `/remember` | Im Langzeit-Memory speichern | +| Skill | `/session-history` | Zusammenfassungen letzter Sessions | +| Skill | `/forget` | Beobachtungen / Sessions löschen | + +### Standalone MCP + +Ohne den vollen Server laufen lassen — für jeden MCP-Client. Eines der folgenden geht: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +Oder zur MCP-Konfig Ihres Agenten hinzufügen: + +Die meisten Agenten (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Fügen Sie den `agentmemory`-Eintrag in das vorhandene `mcpServers`-Objekt Ihres Hosts ein, statt die Datei zu ersetzen. Für Sandbox-Clients, die den `localhost` des Hosts nicht erreichen können, fügen Sie `"AGENTMEMORY_FORCE_PROXY": "1"` zum env-Block hinzu und lassen `AGENTMEMORY_URL` auf eine Route zeigen, die die Sandbox erreicht. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Plugin-Datei aus dem Repo kopieren: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Echtzeit-Viewer

+ +Startet automatisch auf Port `3113`. Live-Beobachtungs-Stream, Session-Explorer, Memory-Browser, Knowledge-Graph-Visualisierung und Health-Dashboard. + +```bash +open http://localhost:3113 +``` + +Der Viewer-Server bindet sich standardmäßig an `127.0.0.1`. Der per REST ausgelieferte `/agentmemory/viewer`-Endpunkt folgt den üblichen `AGENTMEMORY_SECRET`-Bearer-Token-Regeln. CSP-Header verwenden eine Skript-Nonce pro Response und deaktivieren Inline-Handler-Attribute (`script-src-attr 'none'`). + +--- + +

iii Console

+ +Der Viewer auf `:3113` zeigt, was Ihr Agent **gespeichert hat**. Die [iii console](https://iii.dev/docs/console) zeigt, was Ihr Agent **getan hat** — jede Memory-Operation als OpenTelemetry-Trace, jeden KV-Eintrag editierbar, jede Funktion aufrufbar, jeden Stream abgreifbar. Zwei Fenster auf dasselbe Memory: eines produktnah, eines engine-nah. + +Sehen Sie, wie ein `memory_smart_search` feuert, und beobachten Sie BM25-Scan → Embedding-Lookup → RRF-Fusion → Reranker als Wasserfall. Editieren Sie einen festsitzenden Konsolidierungs-Timer im KV-Browser. Spielen Sie einen `PostToolUse`-Hook mit angepasster Payload erneut ab. Pinnen Sie den WebSocket-Stream an und sehen Sie Beobachtungen live eintrudeln. + +agentmemory liefert das umsonst, weil jede Funktion, jeder Trigger, jeder State-Scope und jeder Stream eine iii-Primitive ist — nichts Eigenes, nichts zu instrumentieren. + +

+ iii console Workers-Seite — verbundene Worker, einschließlich agentmemory-Instanzen mit Live-Funktionszahlen und Runtime-Metadaten +
+ Workers-Seite: jeder verbundene Worker — einschließlich agentmemory selbst — mit PID, Funktionsanzahl, Runtime und last-seen. +

+ +**Bereits installiert.** Die Console wird mit `iii` ausgeliefert — kein separater Installer. + +**Neben agentmemory starten:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Dann `http://localhost:3114` öffnen. `--enable-flow` ergänzen für die experimentelle Architektur-Graph-Seite. + +Engine-Endpunkte nur überschreiben, wenn Sie sie verschoben haben: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Was Sie aus der Console heraus tun können:** + +| Seite | Verwenden Sie sie für | +|------|-----------| +| **Workers** | Jeden verbundenen Worker und seine Live-Metriken sehen — einschließlich des agentmemory-Workers selbst. | +| **Functions** | Jede Funktion von agentmemory direkt mit einer JSON-Payload aufrufen — handlich zum Testen von `memory.recall`, `memory.consolidate`, `graph.query` ohne Client zu verdrahten. | +| **Triggers** | HTTP-, Cron-, Event- und State-Trigger erneut abspielen — den Konsolidierungs-Cron manuell auslösen, eine HTTP-Route wiederholen, einen State-Change emittieren. | +| **States** | KV-Browser mit vollem CRUD — Sessions, Memory-Slots, Lifecycle-Timer, Embedding-Index — Werte direkt bearbeiten. | +| **Streams** | Live-WebSocket-Monitor für Memory-Schreibvorgänge, Hook-Events und Beobachtungsupdates, wie sie durch iii-Streams fließen. | +| **Queues** | Durable Queue-Topics + Dead-Letter-Verwaltung. Fehlgeschlagene Embedding-/Kompressions-Jobs wiederholen oder verwerfen. | +| **Traces** | OpenTelemetry-Wasserfall- / Flame- / Service-Breakdown-Ansichten. Nach `trace_id` filtern, um exakt zu sehen, welche Funktionen, DB-Calls und Embedding-Anfragen eine einzelne `memory.search` ausgelöst hat. | +| **Logs** | Strukturierte OTEL-Logs, gefiltert und korreliert mit Trace-/Span-IDs. | +| **Config** | Runtime-Konfiguration — sehen Sie genau, mit welchen Workern, Providern und Ports Ihre Engine läuft. | +| **Flow** | (Optional, `--enable-flow`) Interaktiver Architekturgraph jedes Workers, Triggers und Streams. | + +

+ iii console Trace-Wasserfall-Ansicht mit Span-Dauer +
+ Traces: Wasserfall / Flame / Service-Breakdown für jede Memory-Operation. +

+ +**Traces sind bereits aktiv:** + +`iii-config.yaml` wird mit aktiviertem `iii-observability`-Worker ausgeliefert (`exporter: memory`, `sampling_ratio: 1.0`, Metriken + Logs). Keine zusätzliche Konfig nötig — in dem Moment, in dem agentmemory startet, emittiert jede Memory-Operation einen Trace-Span und ein strukturiertes Log, das die Console lesen kann. + +Wenn Sie stattdessen zu Jaeger/Honeycomb/Grafana Tempo exportieren wollen, ändern Sie `exporter: memory` zu `exporter: otlp` und setzen den Collector-Endpunkt gemäß der iii-Observability-Doku. + +> **Achtung:** Auf der Console selbst wird keine Auth erzwungen — lassen Sie sie an `127.0.0.1` gebunden (Standard) und stellen Sie sie niemals öffentlich bereit. + +--- + +

Powered by iii

+ +agentmemory ist **bereits eine laufende [iii](https://iii.dev)-Instanz**. Funktionen, Trigger, KV-State, Streams, OTEL-Traces — alles sind iii-Primitiven. Sie haben weder Postgres noch Redis, Express, pm2 oder Prometheus installiert, weil iii sie ersetzt. + +Das bedeutet, ein weiterer Befehl erweitert agentmemory um eine komplett neue Fähigkeit. + +### agentmemory mit einem Befehl erweitern + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Jedes `iii worker add` registriert neue Funktionen und Trigger im selben Engine, auf dem agentmemory bereits läuft. Viewer und Console übernehmen sie sofort — kein Reload, keine neue Integration, kein neuer Container. + +| `iii worker add` | Was Sie zusätzlich zu agentmemory erhalten | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Multi-Instanz-Memory: jedes `remember` fächert auf, jedes `search` liest die Vereinigung | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Geplanter Lifecycle — nächtliche Konsolidierung, wöchentliche Snapshots, Decay nach fester Uhr | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Durable Retries: fehlgeschlagene Embedding-/Kompressions-Jobs überleben den Neustart, keine verlorenen Beobachtungen | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | OTEL-Traces, Metriken, Logs auf jeder Funktion — in `iii-config.yaml` ab dem ersten Tag verdrahtet | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | Code, der aus `memory_recall` kommt, läuft in einer wegwerf-VM, nicht in Ihrer Shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | SQL-gestützter State-Adapter, wenn Sie die In-Memory-KV-Voreinstellungen überwachsen | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Zusätzliche MCP-Server neben dem von agentmemory aufstellen, die sich denselben Engine teilen | + +Volle Registry: [workers.iii.dev](https://workers.iii.dev). Jeder Worker dort komponiert sich über dieselben Primitiven wie agentmemory — und das agentmemory, das Sie bereits haben, ist einer davon. + +### Was iii ersetzt + +| Traditioneller Stack | agentmemory verwendet | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + In-Memory-Vector-Index | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii-Engine-Worker-Supervision | +| Prometheus / Grafana | iii OTEL + Health-Monitor | +| Eigene Plugin-Systeme | `iii worker add ` | + +**118 Quelldateien · ~21.800 LOC · 950+ Tests · 123 Funktionen · 34 KV-Scopes** — alles auf drei Primitiven. Kein `agentmemory plugin install`. Das Plugin-System ist iii selbst. + +--- + +

Konfiguration

+ +### LLM-Provider + +agentmemory erkennt aus Ihrer Umgebung automatisch. Standardmäßig werden keine LLM-Aufrufe ausgeführt, solange Sie nicht einen Provider konfigurieren oder dem Claude-Abonnement-Fallback ausdrücklich zustimmen. + +| Provider | Konfig | Hinweise | +|----------|--------|-------| +| **No-op (Standard)** | Keine Konfig nötig | LLM-gestütztes Compress/Summarize ist DEAKTIVIERT. Synthetische BM25-Kompression + Recall funktionieren weiter. Siehe `AGENTMEMORY_ALLOW_AGENT_SDK` unten, falls Sie früher auf den Claude-Abonnement-Fallback gesetzt haben. | +| Anthropic API | `ANTHROPIC_API_KEY` | Abrechnung pro Token | +| MiniMax | `MINIMAX_API_KEY` | Anthropic-kompatibel | +| Gemini | `GEMINI_API_KEY` | Aktiviert zusätzlich Embeddings | +| OpenRouter | `OPENROUTER_API_KEY` | Beliebiges Modell | +| Claude-Abonnement-Fallback | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Nur als Opt-in. Startet `@anthropic-ai/claude-agent-sdk`-Sessions — verursachte früher unbegrenzte Stop-Hook-Rekursion, daher nicht mehr Standard. | + +### Kostenbewusste Modellwahl + +Hintergrund-Kompression läuft bei jeder Beobachtung, daher beeinflusst die Modellwahl die monatlichen Kosten spürbar. Erfasste Lastdaten: 635 Requests / 888K Tokens / 35 Stunden aktive Nutzung, gegen drei OpenRouter-Modelle zu den Preisen vom 2026-05-23. + +| Stufe | Modell | Eingabe / 1M | Ausgabe / 1M | Kosten für die erfassten 35 h | Hinweise | +|------|-------|------------|-------------|---------------------------|-------| +| Empfohlen | `deepseek/deepseek-v4-pro` | 0,435 $ | 0,87 $ | ~0,46 $ | Solide Kompressions-/Summarize-Qualität zu ~10× geringeren Kosten als Sonnet. | +| Empfohlen | `deepseek/deepseek-chat` | 0,27 $ | 1,10 $ | ~0,40 $ | Älter, aber für reine Kompressions-Workloads weiterhin in Ordnung. | +| Empfohlen | `qwen/qwen3-coder` | 0,45 $ | 1,80 $ | ~0,55 $ | Starkes Code-Reasoning, wenn Ihre Sessions stark codelastig sind. | +| Premium | `anthropic/claude-sonnet-4.6` | 3,00 $ | 15,00 $ | ~5,02 $ | Hohe Qualität, aber teuer für dauerhafte Hintergrundarbeit. | +| Premium | `openai/gpt-4o` | 2,50 $ | 10,00 $ | ~4,20 $ | Ähnliche Stufe wie Sonnet. | +| Vermeiden | `anthropic/claude-opus-4.6` | 15,00 $ | 75,00 $ | ~25+ $ | Reasoning-Klasse-Modell; massive Überausgabe für Kompression. | + +agentmemory gibt eine Runtime-Warnung aus, wenn `OPENROUTER_MODEL` auf ein Premium-Tier-Muster passt. Setzen Sie `AGENTMEMORY_SUPPRESS_COST_WARNING=1`, um sie zum Schweigen zu bringen, sobald Sie eine bewusste Wahl getroffen haben. + +Qualitäts-Kosten-Abwägung für Memory-Arbeit: Kompression ist eine Summarize-Aufgabe mit eher lockerer Qualitätsanforderung (der Agent liest die Zusammenfassung erneut, nicht der Benutzer). DeepSeek-V4-Pro / Qwen3-Coder landen bei dieser Aufgabe innerhalb von Rundungsfehlern an Sonnet, bei ~10× weniger Kosten. Heben Sie Premium-Modelle für Anfragen auf, die Sie direkt lesen. + +Quellen: [OpenRouter-Preise für Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek-Preis-Hinweise](https://api-docs.deepseek.com/quick_start/pricing/). + +### Multi-Agent-Memory (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +In Multi-Agent-Setups, in denen sich mehrere Rollen einen agentmemory-Server teilen (architect / developer / reviewer / researcher / support-agent), markiert `AGENT_ID` jede Schreibaktion mit der Rolle, die sie ausgelöst hat. `AGENTMEMORY_AGENT_SCOPE` steuert, ob der Recall nach diesem Tag filtert. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Zwei Modi: + +| Modus | Schreibvorgänge markieren | Recall filtern | Wann verwenden | +|------|------------|---------------|-------------| +| `shared` (Standard) | ja | nein | Agentenübergreifender Kontext mit Audit-Trail. Architect sieht, was Developer notiert hat, aber jede Zeile vermerkt, wer es gesagt hat. | +| `isolated` | ja | ja | Strikte Trennung. Architect sieht niemals Beobachtungen / Erinnerungen / Sessions von Developer. | + +Was getaggt wird, wenn `AGENT_ID` gesetzt ist: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. Die Rolle fließt von `api::session::start` → `mem::observe` → `mem::compress` → KV. + +Was im Isolated-Modus gefiltert wird: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Jeder Endpunkt akzeptiert `?agentId=` als Per-Request-Override und `?agentId=*`, um sich komplett aus dem env-Scope auszuklinken. `/memories` akzeptiert zudem `?includeOrphans=true`, um Pre-AGENT_ID-Erinnerungen, deren `agentId` undefiniert ist, sichtbar zu machen. + +Per-Call-Override auf SDK-/REST-Ebene: jeder mutierende Endpunkt (`/session/start`, `/remember`) akzeptiert ein `agentId`-Feld im Request-Body, das die env-Variable überschreibt. Nützlich für Runtimes, die viele Rollen durch einen einzelnen Serverprozess routen. + +Wenn `AGENT_ID` nicht gesetzt ist, bleibt Memory unscoped (Legacy-Verhalten, keine Tags, keine Filter). + +### Ports + +agentmemory + iii-engine binden standardmäßig vier Ports. Wenn ein Neustart mit `port in use` fehlschlägt, sagt Ihnen diese Tabelle, nach welchem Prozess Sie suchen müssen. + +| Port | Prozess | Zweck | Env-Override | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Interner Streams-Worker (von agentmemory + Viewer verwendet) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Echtzeit-Viewer (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — Worker registrieren sich hier, OTel-Telemetrie fließt darüber | `III_ENGINE_URL` (volle URL, Standard `ws://localhost:49134`) | + +Aufräumen veralteter Prozesse, wenn Ports nach einem abgestürzten Lauf gebunden bleiben: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` räumt sowohl den Worker als auch das Engine-Pidfile bei einem geordneten Shutdown sauber auf. Das manuelle Cleanup oben ist nur für den Post-Crash-Fall nötig, in dem kein Pidfile zurückbleibt. + +### Konfigurationsdatei + +Legen Sie die agentmemory-Runtime-Konfiguration in `~/.agentmemory/.env` ab, statt Variablen in jeder Shell zu exportieren. Wenn der Viewer einen Setup-Hinweis wie `export ANTHROPIC_API_KEY=...` zeigt, kopieren Sie ihn als `ANTHROPIC_API_KEY=...` ohne `export`-Präfix in diese Datei und starten Sie agentmemory neu. + +Prozess-Umgebungsvariablen funktionieren weiterhin und haben Vorrang vor Werten in der Datei. + +Unter Windows liegt dieselbe Datei unter `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +Um mit einem Claude Code Pro/Max-Abonnement statt eines API-Schlüssels zu testen, stimmen Sie explizit zu: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Aktivieren Sie Graph- oder Konsolidierungs-Features in derselben Datei, falls gewünscht: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Umgebungsvariablen + +`~/.agentmemory/.env` anlegen: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +124 Endpunkte auf Port `3111`. Die REST API bindet sich standardmäßig an `127.0.0.1`. Geschützte Endpunkte verlangen `Authorization: Bearer `, wenn `AGENTMEMORY_SECRET` gesetzt ist, und Mesh-Sync-Endpunkte erfordern `AGENTMEMORY_SECRET` auf beiden Peers. + +
+Wichtige Endpunkte + +| Methode | Pfad | Beschreibung | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Health-Check (immer öffentlich) | +| `POST` | `/agentmemory/session/start` | Session starten + Kontext holen | +| `POST` | `/agentmemory/session/end` | Session beenden | +| `POST` | `/agentmemory/observe` | Beobachtung erfassen | +| `POST` | `/agentmemory/smart-search` | Hybride Suche | +| `POST` | `/agentmemory/context` | Kontext erzeugen | +| `POST` | `/agentmemory/remember` | In Langzeit-Memory speichern | +| `POST` | `/agentmemory/forget` | Beobachtungen löschen | +| `POST` | `/agentmemory/enrich` | Dateikontext + Erinnerungen + Bugs | +| `GET` | `/agentmemory/profile` | Projektprofil | +| `GET` | `/agentmemory/export` | Alle Daten exportieren | +| `POST` | `/agentmemory/import` | Aus JSON importieren | +| `POST` | `/agentmemory/graph/query` | Knowledge-Graph-Anfrage | +| `POST` | `/agentmemory/team/share` | Mit Team teilen | +| `GET` | `/agentmemory/audit` | Audit-Trail | + +Volle Endpunktliste: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Entwicklung

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**Voraussetzungen:** Node.js >= 20, [iii-engine](https://iii.dev/docs) oder Docker + +

Lizenz

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.es-ES.md b/READMEs/README.es-ES.md new file mode 100644 index 0000000..3245e21 --- /dev/null +++ b/READMEs/README.es-ES.md @@ -0,0 +1,1369 @@ +

+ agentmemory — Memoria persistente para agentes de codificación con IA +

+ +

+ + Tu agente de codificación lo recuerda todo. Se acabó volver a explicarlo. + Built on iii engine +
+ Memoria persistente para Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode y cualquier cliente MCP. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Documento de diseño: 1200 stars / 172 forks en el gist +

+ +

+ El gist extiende el patrón LLM Wiki de Karpathy con puntuación de confianza, ciclo de vida, grafos de conocimiento y búsqueda híbrida: agentmemory es la implementación. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ Demostración de agentmemory +

+ +

+ Instalación • + Inicio rápido • + Benchmarks • + Comparativa • + Agentes • + Cómo funciona • + MCP • + Visor • + iii Console • + Powered by iii • + Configuración • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +O mediante `npx` (sin instalación): + +```bash +npx @agentmemory/agentmemory +``` + +Aviso — npx cachea por versión. Si un simple `npx @agentmemory/agentmemory` sirve una versión antigua, fuerza la última con `npx -y @agentmemory/agentmemory@latest`, o limpia la caché una vez con `rm -rf ~/.npm/_npx` (macOS/Linux; en Windows borra `%LOCALAPPDATA%\npm-cache\_npx`). La primera ejecución vía npx desde la v0.9.16+ pregunta si deseas instalar globalmente, de modo que el comando `agentmemory` quede disponible en cualquier lugar. + +Todas las opciones en [Inicio rápido](#quick-start) más abajo. Conexión específica por agente en [Funciona con cualquier agente](#works-with-every-agent). + +--- + +

Funciona con cualquier agente

+ +agentmemory funciona con cualquier agente que soporte hooks, MCP o REST API. Todos los agentes comparten el mismo servidor de memoria. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+native plugin + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+native plugin + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+native plugin + MCP +
+Hermes
+Hermes
+native plugin + MCP +
+pi
+pi
+native plugin + MCP +
+OpenHuman
+OpenHuman
+native Memory trait backend +
+Cursor
+Cursor
+MCP server +
+Gemini CLI
+Gemini CLI
+MCP server +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+MCP server +
+Goose
+Goose
+MCP server +
+Kilo Code
+Kilo Code
+MCP server +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP server +
+Windsurf
+Windsurf
+MCP server +
+Roo Code
+Roo Code
+MCP server +
+ +

+ Funciona con cualquier agente que hable MCP o HTTP. Un único servidor, memorias compartidas entre todos ellos. +

+ +--- + +Vuelves a explicar la misma arquitectura cada sesión. Vuelves a descubrir los mismos bugs. Vuelves a enseñar las mismas preferencias. La memoria integrada (CLAUDE.md, .cursorrules) se topa con un techo de 200 líneas y se queda obsoleta. agentmemory soluciona esto. Captura silenciosamente lo que hace tu agente, lo comprime en una memoria buscable e inyecta el contexto correcto al inicio de la siguiente sesión. Un único comando. Funciona en todos los agentes. + +**Qué cambia:** En la sesión 1 configuras autenticación JWT. En la sesión 2 pides rate limiting. El agente ya sabe que tu autenticación usa el middleware jose en `src/middleware/auth.ts`, que tus pruebas cubren la validación de tokens y que elegiste jose en lugar de jsonwebtoken por compatibilidad con Edge. Sin volver a explicar. Sin copiar y pegar. El agente simplemente lo *sabe*. + +```bash +npx @agentmemory/agentmemory +``` + +> **Novedad en v0.9.0** — Sitio de aterrizaje en [agent-memory.dev](https://agent-memory.dev), conector de sistema de ficheros (`@agentmemory/fs-watcher`), el MCP standalone ahora hace de proxy al servidor en ejecución, por lo que los hooks y el visor coinciden, política de auditoría codificada en cada ruta de borrado, y health deja de marcar `memory_critical` en procesos Node pequeños. Notas completas en [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18). + +--- + +

Benchmarks

+ + + + + + +
+ +### Precisión de recuperación + +**coding-agent-life-v1** (corpus interno, reproducible en sandbox) + +| Adaptador | P@5 | R@5 | Tasa de aciertos top-5 | Latencia p50 | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep baseline | 0.267 | 0.967 | 15 / 15 | 0 ms | + +Tasa de aciertos top-5 del 100%. Precisión **2,2×** mejor que la baseline grep con la misma entrada. Desglose completo por tipo: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 preguntas) + +| Sistema | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only fallback | 86.2% | 94.6% | 71.5% | + + + +### Ahorro de tokens + +| Enfoque | Tokens/año | Coste/año | +|---|---|---| +| Pegar todo el contexto | 19.5M+ | Imposible (excede la ventana) | +| Resumido por LLM | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + embeddings locales | ~170K | **$0** | + +
+ +> Modelo de embedding: `all-MiniLM-L6-v2` (local, gratuito, sin API key). Informes completos: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Comparativa con la competencia: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory frente a mem0, Letta, Khoj, claude-mem, Hippo. + +**Reproduce en local:** [`eval/README.md`](../eval/README.md) — un harness con adaptadores intercambiables para LongMemEval `_s` (500-Q públicas) y `coding-agent-life-v1` (corpus interno de 15 sesiones). Los adaptadores grep / vector / agentmemory se puntúan en paralelo, salida NDJSON, y las scorecards publicadas quedan en [`docs/benchmarks/`](../docs/benchmarks/). + +**Funciona muy bien con [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) y [Graphify](https://github.com/safishamsi/graphify).** Indexado de grafos de código, pipelines de build multiagente y grafos de conocimiento más amplios sobre documentos / PDFs / imágenes / vídeos. agentmemory recuerda el trabajo; esos tres proyectos iluminan el resto de la capa de contexto. Recetas y tabla de enrutamiento por pregunta: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

Comparativa

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Built-in (CLAUDE.md)
TipoMotor de memoria + servidor MCPAPI de capa de memoriaRuntime de agente completoFichero estático
Retrieval R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
Captura automática12 hooks (esfuerzo manual cero)Llamadas manuales a add()El agente se edita a sí mismoEdición manual
BúsquedaBM25 + Vector + Graph (fusión RRF)Vector + GraphVector (archival)Carga todo en contexto
MultiagenteMCP + REST + leases + signalsAPI (sin coordinación)Solo dentro del runtime de LettaFicheros por agente
Dependencia de frameworkNinguna (cualquier cliente MCP)NingunaAlta (obliga a usar Letta)Formato por agente
Dependencias externasNinguna (SQLite + iii-engine)Qdrant / pgvectorPostgres + BD vectorialNinguna
Ciclo de vida de memoriaConsolidación de 4 niveles + decaimiento + auto-olvidoExtracción pasivaGestionado por el agentePoda manual
Eficiencia de tokens~1.900 tokens/sesión ($10/año)Varía según la integraciónMemoria principal en contexto22K+ tokens con 240 obs
Visor en tiempo realSí (port 3113)Dashboard en la nubeDashboard en la nubeNo
Self-hostedSí (por defecto)OpcionalOpcional
+ +--- + +

Inicio rápido

+ +Compatibilidad: esta release apunta a `iii-sdk` estable `^0.11.0` e iii-engine v0.11.x. + +### Pruébalo en 30 segundos + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` siembra 3 sesiones realistas (autenticación JWT, corrección de N+1 queries, rate limiting) y ejecuta búsquedas semánticas sobre ellas. Verás cómo encuentra "N+1 query fix" al buscar "database performance optimization" — algo que la coincidencia por palabra clave no puede hacer. + +Abre `http://localhost:3113` para ver cómo se construye la memoria en directo. + +### Recomendado: instala globalmente + +`npx` cachea por versión. Si la semana pasada ejecutaste `npx @agentmemory/agentmemory@0.9.14`, un simple `npx @agentmemory/agentmemory` puede servir la versión obsoleta 0.9.14 desde `~/.npm/_npx/`, y no la última. Instala una vez y el comando `agentmemory` funciona en cualquier sitio: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +A partir de v0.9.16, la primera ejecución vía npx pregunta si deseas instalar globalmente — responde `Y` una vez y listo. Si lo saltas, recurre a cualquiera de estos para un fetch limpio: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +En Windows / PowerShell, el equivalente para limpiar caché es `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — la opción `npx -y ...@latest` de arriba es la alternativa multiplataforma. + +### Session Replay + +Toda sesión que agentmemory registra es reproducible. Abre el visor, elige la pestaña **Replay** y desplázate por la línea de tiempo: prompts, llamadas a herramientas, resultados y respuestas se renderizan como eventos discretos con play/pause, control de velocidad (0,5×–4×) y atajos de teclado (espacio para alternar, flechas para avanzar paso a paso). + +¿Ya tienes transcripciones JSONL antiguas de Claude Code que quieras importar? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Las sesiones importadas aparecen en el selector de Replay junto a las nativas. Por debajo, cada entrada se enruta a través de las funciones iii `mem::replay::load`, `mem::replay::sessions` y `mem::replay::import-jsonl` — sin servidores side-channel. + +### Actualización / Mantenimiento + +Usa el comando de mantenimiento cuando intencionadamente quieras actualizar tu runtime local: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Aviso: este comando muta el workspace/runtime actual. Puede actualizar dependencias de JavaScript y traer la imagen Docker fijada `iiidev/iii:0.11.2`. Nunca instala un motor iii sin fijar ni más nuevo. + +Los detalles de implementación están en `src/cli.ts` (ver `runUpgrade` en torno a la región `src/cli.ts:544-595`). + +### Claude Code (un bloque, pégalo) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code sin instalar el plugin (ruta MCP standalone) + +Si conectas el servidor MCP de agentmemory directamente vía `~/.claude.json` en lugar de usar `/plugin install`, Claude Code nunca resuelve `${CLAUDE_PLUGIN_ROOT}` y tienes que apuntar los scripts de hook a rutas absolutas en `~/.claude/settings.json`. Esas rutas suelen incluir la versión de agentmemory (p. ej. `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), por lo que la siguiente actualización rompe silenciosamente todos los hooks. + +Solución: + +```bash +agentmemory connect claude-code --with-hooks +``` + +Esto fusiona los mismos comandos de hook en `~/.claude/settings.json` con rutas absolutas que apuntan al directorio `plugin/` empaquetado del paquete `@agentmemory/agentmemory` actualmente instalado. Vuelve a ejecutar el comando tras actualizar agentmemory para refrescar las rutas. Las entradas de usuario en el mismo fichero se preservan; solo se reemplazan las entradas previas de agentmemory. La ruta vía `/plugin install` sigue siendo la recomendada. +Para despliegues remotos o protegidos, lanza Claude Code con `AGENTMEMORY_URL` y `AGENTMEMORY_SECRET` definidos. El plugin pasa ambos valores a su servidor MCP empaquetado; cuando `AGENTMEMORY_URL` está vacío, el shim MCP usa `http://localhost:3111`. + +### Codex CLI (plataforma de plugins Codex) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +El plugin de Codex se sirve desde el mismo directorio `plugin/` que el de Claude Code. Registra: + +- `@agentmemory/mcp` como servidor MCP (hace de proxy a las 51 tools cuando `AGENTMEMORY_URL` apunta a un servidor agentmemory en ejecución; cae a 7 tools en local cuando no hay servidor accesible) +- 6 hooks de ciclo de vida: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skills: `/recall`, `/remember`, `/session-history`, `/forget` + +El motor de hooks de Codex inyecta `CLAUDE_PLUGIN_ROOT` en los subprocesos de hook (según [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), por lo que los mismos scripts de hook funcionan en ambos hosts sin duplicación. Los eventos Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure son exclusivos de Claude Code y no se registran para Codex. + +#### Codex Desktop: los hooks del plugin están silenciados (con workaround) + +`CodexHooks` y `PluginHooks` son estables y están activados por defecto en [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), pero las builds actuales de Codex Desktop no despachan el `hooks.json` local del plugin ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). Las tools MCP siguen funcionando; solo faltan las observaciones del ciclo de vida. + +Hasta que se solucione upstream, replica los mismos comandos de hook en el `~/.codex/hooks.json` global: + +```bash +agentmemory connect codex --with-hooks +``` + +Esto añade un bloque idempotente a `~/.codex/hooks.json` que referencia rutas absolutas a los scripts empaquetados (no hace falta expandir `${CLAUDE_PLUGIN_ROOT}` en el ámbito de usuario). Vuelve a ejecutar el mismo comando tras actualizar agentmemory para refrescar las rutas. Las entradas de usuario en el mismo fichero se preservan; solo se reemplazan las entradas previas de agentmemory. + +
+OpenClaw (pega este prompt) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Guía completa: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (pega este prompt) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Guía completa: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Otros agentes + +Arranca el servidor de memoria: `npx @agentmemory/agentmemory` + +La entrada de agentmemory es el **mismo bloque de servidor MCP** en cada host que use la forma `mcpServers` (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Fusiona esta entrada en el objeto `mcpServers` existente** en el fichero de configuración del host — no reemplaces el fichero. Si el fichero ya contiene otros servidores, añade `agentmemory` junto a ellos como otra clave dentro de `mcpServers`. Si `mcpServers` no existe, pega el bloque dentro de `{ "mcpServers": { ... } }`. Los marcadores `${VAR}` heredan `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` del shell al lanzar el servidor MCP — si no están definidas se pasan como cadena vacía y el shim cae a `http://localhost:3111`. Una sola entrada cubre tanto despliegues locales como remotos (k8s / con reverse-proxy). + +| Agente | Fichero de configuración | Notas | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | Fusiona en `mcpServers`. También hay deeplink de un clic en el sitio web. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | Fusiona en `mcpServers`. Reinicia Claude Desktop tras editar. | +| **Cline / Roo Code / Kilo Code** | Ajustes MCP de Cline (Settings UI → MCP Servers → Edit) | Mismo bloque `mcpServers`. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Mismo bloque `mcpServers`. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (fusión automática). | +| **OpenClaw** | Configuración MCP de OpenClaw | Mismo bloque `mcpServers`, o usa el [memory plugin](../integrations/openclaw/) más profundo. | +| **Codex CLI (solo MCP)** | `.codex/config.toml` | Forma TOML: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, o añade `[mcp_servers.agentmemory]` a mano. | +| **Codex CLI (plugin completo)** | Marketplace de plugins Codex | `codex plugin marketplace add rohitg00/agentmemory` y luego `codex plugin add agentmemory@agentmemory`. Registra MCP + 6 hooks de ciclo de vida (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skills. En Codex Desktop, ejecuta también `agentmemory connect codex --with-hooks` hasta que se mergee [openai/codex#16430](https://github.com/openai/codex/issues/16430) — los hooks de plugin están silenciados allí. | +| **OpenCode (solo MCP)** | `opencode.json` | Forma distinta — clave `mcp` en el nivel superior, comando como array: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (plugin completo)** | `plugin/opencode/` | 22 hooks de captura automática que cubren ciclo de vida de sesión, mensajes, tools y errores. Dos comandos slash (`/recall`, `/remember`). Copia `plugin/opencode/` a tu workspace de OpenCode y añade la entrada del plugin a `opencode.json`. Tabla completa de hooks + análisis de gaps en [`plugin/opencode/README.md`](../plugin/opencode/README.md). | +| **pi** | `~/.pi/agent/extensions/agentmemory` | Copia [`integrations/pi`](../integrations/pi/) y reinicia pi. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Usa el [memory provider plugin](../integrations/hermes/) más profundo con `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` escribe el bloque `mcpServers` estándar. El payload de los hooks es compatible a nivel de campo con Claude Code, así que los scripts de los 12 hooks existentes funcionan sin modificación — conéctalos en la sección `hooks` del mismo `settings.json`. | +| **Antigravity** (sustituye a Gemini CLI) | `mcp_config.json` (en el directorio User de Antigravity) | `agentmemory connect antigravity` escribe el bloque `mcpServers` estándar. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. Úsalo tras el sunset de Gemini CLI del 2026-06-18. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` escribe la configuración de nivel usuario. Los overrides por workspace van en `.kiro/settings/mcp.json` junto a tu código. | +| **Goose** | UI de ajustes MCP de Goose | Mismo bloque `mcpServers`. | +| **Aider** | n/a | Habla directamente con la REST API: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Cualquier agente (32+)** | n/a | `npx skillkit install agentmemory` auto-detecta el host y fusiona. | + +**Clientes MCP en sandbox** (Flatpak / Snap / contenedores restrictivos) que no pueden alcanzar el `localhost` del host: añade también `"AGENTMEMORY_FORCE_PROXY": "1"` al bloque `env`, y apunta `AGENTMEMORY_URL` a una ruta que el sandbox sí pueda alcanzar (p. ej. tu IP de LAN). + +### Acceso programático (Python / Rust / Node) + +agentmemory registra sus operaciones principales como funciones iii (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). Cualquier lenguaje con un SDK iii puede llamarlas directamente sobre `ws://localhost:49134` — sin un cliente REST separado por lenguaje. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Ejemplo trabajado: [`examples/python/`](../examples/python/) (quickstart + flujo de observación/recall). La REST en `:3111` sigue disponible para hosts sin runtime iii. + +### Desde el código fuente + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Esto arranca agentmemory con un `iii-engine` local si `iii` ya está instalado, o cae a Docker Compose si hay Docker disponible. REST, streams y el visor se enlazan a `127.0.0.1` por defecto. + +Instala `iii-engine` manualmente. **agentmemory actualmente fija `iii-engine` a `v0.11.2`** — `v0.11.6` introduce un nuevo modelo que sandboxea todo vía `iii worker add`, y agentmemory aún no se ha refactorizado para él. La fijación se levantará cuando aterrice el refactor. Sobrescribe con `AGENTMEMORY_III_VERSION=` si has migrado al modelo sandbox manualmente. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** cambia `aarch64-apple-darwin` por `x86_64-apple-darwin` +- **Linux x64:** cambia por `x86_64-unknown-linux-gnu` +- **Linux arm64:** cambia por `aarch64-unknown-linux-gnu` +- **Windows:** descarga `iii-x86_64-pc-windows-msvc.zip` desde [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2), extrae `iii.exe`, añádelo al PATH + +O usa Docker (el `docker-compose.yml` empaquetado descarga `iiidev/iii:0.11.2`). Documentación completa: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory funciona en Windows 10/11, pero el paquete de Node.js por sí solo no es suficiente — también necesitas el runtime `iii-engine` (un binario nativo aparte) como proceso en segundo plano. El instalador oficial upstream es un script `sh` y hoy no existe un instalador PowerShell ni paquete scoop/winget, así que los usuarios de Windows tienen dos rutas: + +**Opción A — Binario Windows preconstruido (recomendado):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Opción B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Opción C — Solo MCP standalone (sin engine):** si solo necesitas las tools MCP para tu agente y no necesitas la REST API, el visor ni los cron jobs, sáltate el engine por completo: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Diagnóstico para Windows:** si `npx @agentmemory/agentmemory` falla, vuelve a ejecutar con `--verbose` para ver el stderr real del engine. Modos de fallo habituales: + +| Síntoma | Solución | +|---|---| +| `iii-engine process started` seguido de `did not become ready within 15s` | El engine ha crasheado al arrancar — reejecuta con `--verbose` y revisa stderr | +| `Could not start iii-engine` | Ni `iii.exe` ni Docker están instalados. Ver Opción A o B | +| Conflicto de puerto | `netstat -ano \| findstr :3111` para ver qué está vinculado, mátalo o usa `--port ` | +| Se omite el fallback a Docker aunque Docker esté instalado | Asegúrate de que Docker Desktop esté efectivamente en ejecución (icono en la bandeja del sistema) | + +> Nota: el **motor** iii es un binario preconstruido, no un crate de cargo — no intentes instalarlo con `cargo install`. (Los **SDK** de iii sí están publicados en crates.io, npm y PyPI, pero agentmemory no los necesita.) Métodos de instalación del motor soportados, todos fijados a v0.11.2: el binario preconstruido v0.11.2 de arriba, el script de instalación `sh` upstream **con el pin de versión** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) y la imagen Docker `iiidev/iii:0.11.2`. Un simple `install.sh | sh` instala el motor **más reciente**, que agentmemory no soporta — pasa siempre `VERSION=0.11.2`. Lo más fácil de todo: simplemente ejecuta `npx @agentmemory/agentmemory`, que obtiene el motor fijado en `~/.agentmemory/bin` por ti. + +--- + +

Deploy

+ +Plantillas de un clic para hosts gestionados. Cada una incluye un +Dockerfile autocontenido que descarga `@agentmemory/agentmemory` desde npm +y copia el binario del iii engine desde la imagen oficial `iiidev/iii` de +Docker Hub — no se requiere una imagen preconstruida de agentmemory. El +almacenamiento persistente se monta en `/data`; el entrypoint del primer +arranque sobrescribe la configuración iii empaquetada por npm (que se +enlaza a `127.0.0.1`) por una afinada para despliegue que se enlaza a +`0.0.0.0` y usa rutas absolutas `/data`, genera el secreto HMAC y +baja privilegios de `root` a `node` con `gosu` antes de hacer exec +del CLI de agentmemory. + +

+ Deploy to fly.io + Deploy to Railway +

+ +El botón de despliegue de un clic de Render requiere un `render.yaml` en la raíz del repo, que mantenemos limpio a propósito. Usa el flujo Render Blueprint documentado en [`deploy/render/`](../deploy/render/README.md) para apuntar al blueprint del repo manualmente. + +Los detalles completos de configuración (captura HMAC, túnel SSH del visor, rotación, backup, mínimos de coste) están en [`deploy/`](../deploy/README.md): + +- [`deploy/fly`](../deploy/fly/README.md) — máquina única con `auto_stop_machines = "stop"`; más barato en idle. +- [`deploy/railway`](../deploy/railway/README.md) — tarifa plana del plan Hobby, volumen en el dashboard. +- [`deploy/render`](../deploy/render/README.md) — flujo Blueprint, snapshots automáticos de disco en planes de pago. +- [`deploy/coolify`](../deploy/coolify/README.md) — self-hosted en tu propio VPS vía [Coolify](https://coolify.io/self-hosted); misma stack Docker Compose, tú eres dueño del host y los datos. + +Solo se publica el puerto `3111`. El visor en `3113` permanece enlazado a loopback dentro del contenedor — el README de cada plantilla documenta el patrón de túnel SSH para alcanzarlo. + +--- + +

Por qué agentmemory

+ +Todo agente de codificación olvida todo al terminar la sesión. Pierdes los primeros 5 minutos de cada sesión re-explicando tu stack. agentmemory corre en segundo plano y lo elimina por completo. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### Frente a la memoria integrada del agente + +Todo agente de codificación con IA viene con memoria integrada — Claude Code tiene `MEMORY.md`, Cursor tiene notepads, Cline tiene memory bank. Funcionan como notas adhesivas. agentmemory es la base de datos buscable que hay detrás de esas notas adhesivas. + +| | Integrada (CLAUDE.md) | agentmemory | +|---|---|---| +| Escala | tope de 200 líneas | Ilimitado | +| Búsqueda | Carga todo en contexto | BM25 + vector + graph (solo top-K) | +| Coste en tokens | 22K+ con 240 observaciones | ~1.900 tokens (92% menos) | +| Cross-agent | Ficheros por agente | MCP + REST (cualquier agente) | +| Coordinación | Ninguna | Leases, signals, actions, routines | +| Observabilidad | Lectura manual de ficheros | Visor en tiempo real en :3113 | + +--- + +

Cómo funciona

+ +### Pipeline de memoria + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### Consolidación de memoria en 4 niveles + +Inspirada en cómo el cerebro humano procesa la memoria — no muy diferente de la consolidación del sueño. + +| Nivel | Qué | Analogía | +|------|------|---------| +| **Working** | Observaciones crudas a partir del uso de tools | Memoria a corto plazo | +| **Episodic** | Resúmenes de sesión comprimidos | "Qué pasó" | +| **Semantic** | Hechos y patrones extraídos | "Lo que sé" | +| **Procedural** | Workflows y patrones de decisión | "Cómo hacerlo" | + +Las memorias decaen con el tiempo (curva de Ebbinghaus). Las memorias accedidas con frecuencia se refuerzan. Las memorias obsoletas se evictan automáticamente. Las contradicciones se detectan y resuelven. + +### Qué se captura + +| Hook | Captura | +|------|----------| +| `SessionStart` | Ruta de proyecto, ID de sesión | +| `UserPromptSubmit` | Prompts del usuario (con filtro de privacidad) | +| `PreToolUse` | Patrones de acceso a ficheros + contexto enriquecido | +| `PostToolUse` | Nombre de la tool, entrada, salida | +| `PostToolUseFailure` | Contexto del error | +| `PreCompact` | Re-inyecta memoria antes de la compactación | +| `SubagentStart/Stop` | Ciclo de vida de sub-agentes | +| `Stop` | Resumen de fin de sesión | +| `SessionEnd` | Marcador de sesión completa | + +### Capacidades clave + +| Capacidad | Descripción | +|---|---| +| **Captura automática** | Cada uso de tool registrado vía hooks — esfuerzo manual cero | +| **Búsqueda semántica** | BM25 + vector + grafo de conocimiento con fusión RRF | +| **Evolución de memoria** | Versionado, supersesión, grafos de relaciones | +| **Auto-olvido** | Expiración por TTL, detección de contradicciones, evicción por importancia | +| **Privacy first** | API keys, secretos y etiquetas `` se eliminan antes del almacenado | +| **Self-healing** | Circuit breaker, cadena de fallback de proveedores, monitorización de salud | +| **Puente Claude** | Sincronización bidireccional con MEMORY.md | +| **Grafo de conocimiento** | Extracción de entidades + recorrido BFS | +| **Memoria de equipo** | Espacios compartidos y privados con namespace por miembro | +| **Provenance de citas** | Traza cualquier memoria de vuelta a las observaciones origen | +| **Snapshots de Git** | Versiona, revierte y diffea el estado de memoria | + +--- + + + +Recuperación de triple stream combinando tres señales: + +| Stream | Qué hace | Cuándo | +|---|---|---| +| **BM25** | Coincidencia por palabras con stemming y expansión de sinónimos | Siempre activo | +| **Vector** | Similitud coseno sobre embeddings densos | Proveedor de embeddings configurado | +| **Graph** | Recorrido del grafo de conocimiento vía coincidencia de entidades | Entidades detectadas en la consulta | + +Fusionado con Reciprocal Rank Fusion (RRF, k=60) y diversificado por sesión (máximo 3 resultados por sesión). + +BM25 tokeniza griego, cirílico, hebreo, árabe y latín con tildes de serie. Para memorias en chino / japonés / coreano, instala los segmentadores opcionales (`npm install @node-rs/jieba tiny-segmenter`) para partir los runs CJK en tokens a nivel de palabra; sin ellos, agentmemory hace soft-fallback a tokenización por run completo y muestra una pista única en stderr. + +### Proveedores de embedding + +agentmemory autodetecta tu proveedor. Para mejores resultados, instala embeddings locales (gratis): + +```bash +npm install @xenova/transformers +``` + +| Proveedor | Modelo | Coste | Notas | +|---|---|---|---| +| **Local (recomendado)** | `all-MiniLM-L6-v2` | Gratis | Offline, +8pp de recall sobre BM25-only | +| Gemini | `gemini-embedding-001` | Free tier | 100+ idiomas, 768/1536/3072 dims (MRL), entrada de 2048 tokens. Sustituye a `text-embedding-004` ([deprecado, cierre el 14 ene 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | Máxima calidad | +| Voyage AI | `voyage-code-3` | De pago | Optimizado para código | +| Cohere | `embed-english-v3.0` | Trial gratis | Uso general | +| OpenRouter | Cualquier modelo | Varía | Proxy multi-modelo | + +--- + +

Servidor MCP

+ +53 tools, 6 recursos, 3 prompts y 4 skills — el toolkit MCP de memoria más completo para cualquier agente. + +> **Shim MCP vs servidor completo:** el paquete publicado `@agentmemory/mcp` es un shim ligero. Expone la superficie completa de 51 tools **solo cuando puede alcanzar un servidor agentmemory en ejecución** vía `AGENTMEMORY_URL` (modo proxy). Sin servidor accesible, el shim cae a un set local de 7 tools (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). La variable de entorno `AGENTMEMORY_TOOLS=core|all` es un flag *del lado del servidor* — definirla en el bloque `env` del shim no tiene efecto. Si ves solo 7 tools en Cursor / OpenCode / Gemini CLI, arranca `npx @agentmemory/agentmemory` (o la stack Docker) y define `AGENTMEMORY_URL=http://localhost:3111`. + +### 51 Tools + +
+Tools principales (siempre disponibles) + +| Tool | Descripción | +|------|-------------| +| `memory_recall` | Busca observaciones pasadas | +| `memory_compress_file` | Comprime ficheros markdown preservando la estructura | +| `memory_save` | Guarda un insight, decisión o patrón | +| `memory_patterns` | Detecta patrones recurrentes | +| `memory_smart_search` | Búsqueda híbrida semántica + por palabras | +| `memory_file_history` | Observaciones pasadas sobre ficheros concretos | +| `memory_sessions` | Lista sesiones recientes | +| `memory_timeline` | Observaciones cronológicas | +| `memory_profile` | Perfil de proyecto (conceptos, ficheros, patrones) | +| `memory_export` | Exporta todos los datos de memoria | +| `memory_relations` | Consulta el grafo de relaciones | + +
+ +
+Tools extendidas (51 en total — define AGENTMEMORY_TOOLS=all) + +| Tool | Descripción | +|------|-------------| +| `memory_patterns` | Detecta patrones recurrentes | +| `memory_timeline` | Observaciones cronológicas | +| `memory_relations` | Consulta el grafo de relaciones | +| `memory_graph_query` | Recorrido del grafo de conocimiento | +| `memory_consolidate` | Ejecuta la consolidación de 4 niveles | +| `memory_claude_bridge_sync` | Sincroniza con MEMORY.md | +| `memory_team_share` | Comparte con miembros del equipo | +| `memory_team_feed` | Elementos compartidos recientes | +| `memory_audit` | Pista de auditoría de operaciones | +| `memory_governance_delete` | Borrado con pista de auditoría | +| `memory_snapshot_create` | Snapshot versionado en Git | +| `memory_action_create` | Crea ítems de trabajo con dependencias | +| `memory_action_update` | Actualiza estado de una action | +| `memory_frontier` | Actions desbloqueadas, ordenadas por prioridad | +| `memory_next` | La única acción más importante a continuación | +| `memory_lease` | Leases exclusivos de actions (multiagente) | +| `memory_routine_run` | Instancia rutinas de workflow | +| `memory_signal_send` | Mensajería entre agentes | +| `memory_signal_read` | Lee mensajes con acuse de recibo | +| `memory_checkpoint` | Gates de condiciones externas | +| `memory_mesh_sync` | Sincronización P2P entre instancias | +| `memory_sentinel_create` | Watchers dirigidos por eventos | +| `memory_sentinel_trigger` | Dispara sentinels desde fuera | +| `memory_sketch_create` | Grafos de actions efímeros | +| `memory_sketch_promote` | Promociona a permanente | +| `memory_crystallize` | Compacta cadenas de actions | +| `memory_diagnose` | Health checks | +| `memory_heal` | Repara automáticamente estado atascado | +| `memory_facet_tag` | Tags dimension:value | +| `memory_facet_query` | Consulta por tags de facet | +| `memory_verify` | Traza provenance | + +
+ +### 6 Recursos · 3 Prompts · 4 Skills + +| Tipo | Nombre | Descripción | +|------|------|-------------| +| Resource | `agentmemory://status` | Salud, conteo de sesiones, conteo de memorias | +| Resource | `agentmemory://project/{name}/profile` | Inteligencia por proyecto | +| Resource | `agentmemory://memories/latest` | Las 10 memorias activas más recientes | +| Resource | `agentmemory://graph/stats` | Estadísticas del grafo de conocimiento | +| Prompt | `recall_context` | Búsqueda + devuelve mensajes de contexto | +| Prompt | `session_handoff` | Datos de traspaso entre agentes | +| Prompt | `detect_patterns` | Analiza patrones recurrentes | +| Skill | `/recall` | Busca en memoria | +| Skill | `/remember` | Guarda en memoria a largo plazo | +| Skill | `/session-history` | Resúmenes recientes de sesiones | +| Skill | `/forget` | Borra observaciones/sesiones | + +### MCP standalone + +Ejecútalo sin el servidor completo — para cualquier cliente MCP. Cualquiera de estos funciona: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +O añádelo a la configuración MCP de tu agente: + +La mayoría de los agentes (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Fusiona la entrada `agentmemory` en el objeto `mcpServers` existente del host en lugar de reemplazar el fichero. Para clientes en sandbox que no pueden alcanzar el `localhost` del host, añade `"AGENTMEMORY_FORCE_PROXY": "1"` al bloque env y define `AGENTMEMORY_URL` a una ruta a la que el sandbox sí pueda llegar. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Copia el fichero del plugin desde el repo: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Visor en tiempo real

+ +Se inicia automáticamente en el puerto `3113`. Stream de observaciones en vivo, explorador de sesiones, navegador de memoria, visualización del grafo de conocimiento y dashboard de salud. + +```bash +open http://localhost:3113 +``` + +El servidor del visor se enlaza a `127.0.0.1` por defecto. El endpoint servido por REST `/agentmemory/viewer` sigue las reglas habituales de bearer-token `AGENTMEMORY_SECRET`. Las cabeceras CSP usan un nonce de script por respuesta y desactivan los atributos handler inline (`script-src-attr 'none'`). + +--- + +

iii Console

+ +El visor en `:3113` muestra lo que tu agente **recordó**. La [iii console](https://iii.dev/docs/console) muestra lo que tu agente **hizo** — cada operación de memoria como una traza OpenTelemetry, cada entrada KV editable, cada función invocable, cada stream tappable. Dos ventanas sobre la misma memoria: una con forma de producto, otra con forma de motor. + +Mira cómo se dispara `memory_smart_search` y observa el escaneo BM25 → consulta de embedding → fusión RRF → reranker como un waterfall. Edita un temporizador de consolidación atascado en el navegador KV. Reproduce un hook `PostToolUse` con un payload ajustado. Fija el stream WebSocket y mira cómo aterrizan las observaciones en vivo. + +agentmemory ofrece esto gratis porque cada función, trigger, scope de estado y stream es un primitivo de iii — nada custom, nada que instrumentar. + +

+ Página Workers de iii console — workers conectados incluyendo instancias de agentmemory con conteo de funciones en vivo y metadatos de runtime +
+ Página Workers: cada worker conectado — incluida agentmemory — con PID, conteo de funciones, runtime y last-seen. +

+ +**Ya instalada.** La console se incluye con `iii` — sin instalador aparte. + +**Lánzala junto a agentmemory:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Luego abre `http://localhost:3114`. Añade `--enable-flow` para la página experimental de grafo de arquitectura. + +Sobrescribe endpoints del engine solo si los has movido: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Qué puedes hacer desde la console:** + +| Página | Úsala para | +|------|-----------| +| **Workers** | Ver todos los workers conectados y sus métricas en vivo — incluyendo el propio worker de agentmemory. | +| **Functions** | Invocar cualquier función de agentmemory directamente con un payload JSON — útil para probar `memory.recall`, `memory.consolidate`, `graph.query` sin cablear un cliente. | +| **Triggers** | Reproducir triggers HTTP, cron, event y state — disparar manualmente el cron de consolidación, reintentar una ruta HTTP, emitir un cambio de estado. | +| **States** | Navegador KV con CRUD completo — sesiones, slots de memoria, temporizadores del ciclo de vida, índice de embeddings — edita valores in-place. | +| **Streams** | Monitor WebSocket en vivo para escrituras de memoria, eventos de hooks y actualizaciones de observaciones a medida que fluyen por los streams de iii. | +| **Queues** | Topics de cola duraderas + gestión de dead-letter. Reproduce o descarta jobs fallidos de embedding / compresión. | +| **Traces** | Vistas OpenTelemetry waterfall / flame / desglose por servicio. Filtra por `trace_id` para ver exactamente qué funciones, llamadas a BD y peticiones de embedding produjo un único `memory.search`. | +| **Logs** | Logs OTEL estructurados, filtrados y correlados con trace/span IDs. | +| **Config** | Configuración de runtime — ve exactamente con qué workers, proveedores y puertos está ejecutando tu engine. | +| **Flow** | (Opcional, `--enable-flow`) Grafo de arquitectura interactivo de cada worker, trigger y stream. | + +

+ Vista de waterfall de trazas de iii console mostrando duración por span +
+ Traces: waterfall / flame / desglose por servicio para cada operación de memoria. +

+ +**Las trazas ya están activas:** + +`iii-config.yaml` se sirve con el worker `iii-observability` habilitado (`exporter: memory`, `sampling_ratio: 1.0`, métricas + logs). No se necesita configuración adicional — desde el momento en que agentmemory arranca, cada operación de memoria emite una traza-span y un log estructurado que la console puede leer. + +Si quieres exportar a Jaeger/Honeycomb/Grafana Tempo en su lugar, cambia `exporter: memory` por `exporter: otlp` y define el endpoint del collector según la documentación de observabilidad de iii. + +> **Aviso:** la console en sí no impone auth — mantenla enlazada a `127.0.0.1` (por defecto) y nunca la expongas públicamente. + +--- + +

Powered by iii

+ +agentmemory **ya es una instancia [iii](https://iii.dev) en ejecución**. Funciones, triggers, estado KV, streams, trazas OTEL — todo son primitivos de iii. No has instalado Postgres, Redis, Express, pm2 ni Prometheus, porque iii los reemplaza. + +Eso significa que un comando más extiende agentmemory con una capacidad completamente nueva. + +### Extiende agentmemory con un comando + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Cada `iii worker add` registra nuevas funciones y triggers en el mismo engine en el que agentmemory ya está corriendo. El visor y la console los detectan al instante — sin recargar, sin nueva integración, sin nuevo contenedor. + +| `iii worker add` | Qué obtienes encima de agentmemory | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Memoria multi-instancia: cada `remember` se difunde, cada `search` lee la unión | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Ciclo de vida programado — consolidación nocturna, snapshots semanales, decaimiento en un reloj fijo | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Reintentos duraderos: los jobs de embedding + compresión fallidos sobreviven al reinicio, sin observaciones perdidas | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | Trazas OTEL, métricas y logs en cada función — cableado en `iii-config.yaml` desde el primer día | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | El código salido de `memory_recall` corre dentro de una VM desechable, no en tu shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | Adaptador de estado respaldado por SQL cuando te quedas pequeño con el KV in-memory por defecto | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Levanta servidores MCP adicionales junto al MCP de agentmemory, compartiendo el mismo engine | + +Registro completo: [workers.iii.dev](https://workers.iii.dev). Cada worker allí se compone a través de los mismos primitivos que usa agentmemory — y el agentmemory que ya tienes es uno de ellos. + +### Qué reemplaza iii + +| Stack tradicional | agentmemory usa | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + índice vectorial in-memory | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | Supervisión de workers del iii engine | +| Prometheus / Grafana | iii OTEL + monitor de salud | +| Sistemas de plugins propios | `iii worker add ` | + +**118 ficheros de código · ~21.800 LOC · 950+ tests · 123 funciones · 34 scopes KV** — todo sobre tres primitivos. No hay `agentmemory plugin install`. El sistema de plugins es iii mismo. + +--- + +

Configuración

+ +### Proveedores de LLM + +agentmemory autodetecta desde tu entorno. Por defecto no se hacen llamadas LLM a menos que configures un proveedor o aceptes explícitamente el fallback de suscripción de Claude. + +| Proveedor | Configuración | Notas | +|----------|--------|-------| +| **No-op (por defecto)** | Sin configuración | Compresión/resumen vía LLM DESACTIVADA. La compresión sintética BM25 + recall siguen funcionando. Mira `AGENTMEMORY_ALLOW_AGENT_SDK` más abajo si dependías del fallback de suscripción de Claude. | +| Anthropic API | `ANTHROPIC_API_KEY` | Facturación por token | +| MiniMax | `MINIMAX_API_KEY` | Compatible con Anthropic | +| Gemini | `GEMINI_API_KEY` | También habilita embeddings | +| OpenRouter | `OPENROUTER_API_KEY` | Cualquier modelo | +| Claude subscription fallback | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Solo opt-in. Lanza sesiones de `@anthropic-ai/claude-agent-sdk` — solía causar recursión sin límite en el Stop-hook, por eso ya no es el comportamiento por defecto. | + +### Selección de modelo con conciencia de coste + +La compresión en background corre en cada observación, así que la elección de modelo cambia el gasto mensual de forma significativa. Datos de carga capturados: 635 peticiones / 888K tokens / 35 horas de uso activo, sobre tres modelos de OpenRouter con precios del 2026-05-23. + +| Tier | Modelo | Input / 1M | Output / 1M | Coste para las 35h capturadas | Notas | +|------|-------|------------|-------------|---------------------------|-------| +| Recomendado | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Calidad de compresión + resumen sólida a ~10× menos coste que Sonnet. | +| Recomendado | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | Más antiguo pero aún correcto para cargas solo de compresión. | +| Recomendado | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | Buen razonamiento de código si tus sesiones son muy code-centric. | +| Premium | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | Alta calidad pero caro para trabajo de background siempre activo. | +| Premium | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Tier similar a Sonnet. | +| Evitar | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | Modelo de reasoning; sobrecoste enorme para compresión. | + +agentmemory imprime un aviso en runtime cuando `OPENROUTER_MODEL` coincide con un patrón de tier premium. Define `AGENTMEMORY_SUPPRESS_COST_WARNING=1` para silenciarlo una vez que hayas tomado una decisión informada. + +Trade-off de calidad vs coste en trabajo de memoria: la compresión es una tarea de resumen con un listón de calidad relativamente flexible (quien re-lee el resumen es el agente, no el usuario). DeepSeek-V4-Pro / Qwen3-Coder se quedan dentro del error de redondeo respecto a Sonnet en esta tarea, costando ~10× menos. Reserva los modelos de tier premium para las consultas que leas directamente. + +Fuentes: [OpenRouter pricing for Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek pricing notes](https://api-docs.deepseek.com/quick_start/pricing/). + +### Memoria multiagente (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +En montajes multiagente donde varios roles comparten un servidor agentmemory (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` etiqueta cada escritura con el rol que la hizo. `AGENTMEMORY_AGENT_SCOPE` controla si el recall filtra por esa etiqueta. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Dos modos: + +| Modo | Etiqueta escrituras | Filtra recall | Cuándo usarlo | +|------|------------|---------------|-------------| +| `shared` (por defecto) | sí | no | Contexto cross-agent con pista de auditoría. El architect puede ver lo que el developer apuntó, pero cada fila registra quién lo dijo. | +| `isolated` | sí | sí | Separación estricta. El architect nunca ve observaciones / memorias / sesiones del developer. | + +Qué se etiqueta cuando `AGENT_ID` está definido: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. El rol fluye `api::session::start` → `mem::observe` → `mem::compress` → KV. + +Qué se filtra en modo isolated: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Cada endpoint acepta `?agentId=` para sobreescribir por petición, y `?agentId=*` para optar por salir del scope del entorno por completo. `/memories` también acepta `?includeOrphans=true` para sacar memorias previas a AGENT_ID cuyo `agentId` es undefined. + +Sobrescritura por llamada en la capa SDK / REST: cada endpoint que muta (`/session/start`, `/remember`) acepta un campo `agentId` en el body que gana frente al entorno. Útil para runtimes que enrutan muchos roles a un único proceso de servidor. + +Cuando `AGENT_ID` no está definido, la memoria permanece sin scope (comportamiento legacy, sin etiquetas, sin filtros). + +### Puertos + +agentmemory + iii-engine enlazan cuatro puertos por defecto. Si un reinicio falla con `port in use`, esta tabla te dice qué proceso buscar. + +| Puerto | Proceso | Propósito | Override por env | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Worker de streams interno (consumido por agentmemory + visor) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Visor en tiempo real (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — los workers se registran aquí, la telemetría OTel fluye por encima | `III_ENGINE_URL` (URL completa, por defecto `ws://localhost:49134`) | + +Limpieza de procesos zombi cuando los puertos quedan ocupados tras una ejecución crasheada: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` recoge limpiamente tanto el worker como el pidfile del engine en un shutdown graceful. La limpieza manual de arriba solo aplica al caso post-crash en el que no queda ningún pidfile. + +### Fichero de configuración + +Coloca la configuración de runtime de agentmemory en `~/.agentmemory/.env` en lugar de exportar variables en cada shell. Si el visor muestra una pista de setup tipo `export ANTHROPIC_API_KEY=...`, cópiala a este fichero como `ANTHROPIC_API_KEY=...` sin el prefijo `export`, y reinicia agentmemory. + +Las variables de entorno del proceso siguen funcionando y tienen prioridad sobre los valores del fichero. + +En Windows, el mismo fichero vive en `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +Para probar con una suscripción Claude Code Pro/Max en lugar de una API key, acepta opt-in explícito: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Activa graph o consolidation en el mismo fichero si las quieres: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Variables de entorno + +Crea `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +124 endpoints en el puerto `3111`. La REST API se enlaza a `127.0.0.1` por defecto. Los endpoints protegidos requieren `Authorization: Bearer ` cuando `AGENTMEMORY_SECRET` está definido, y los endpoints de mesh sync requieren `AGENTMEMORY_SECRET` en ambos peers. + +
+Endpoints principales + +| Method | Path | Descripción | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Health check (siempre público) | +| `POST` | `/agentmemory/session/start` | Inicia sesión + obtiene contexto | +| `POST` | `/agentmemory/session/end` | Finaliza sesión | +| `POST` | `/agentmemory/observe` | Captura observación | +| `POST` | `/agentmemory/smart-search` | Búsqueda híbrida | +| `POST` | `/agentmemory/context` | Genera contexto | +| `POST` | `/agentmemory/remember` | Guarda en memoria a largo plazo | +| `POST` | `/agentmemory/forget` | Borra observaciones | +| `POST` | `/agentmemory/enrich` | Contexto de fichero + memorias + bugs | +| `GET` | `/agentmemory/profile` | Perfil de proyecto | +| `GET` | `/agentmemory/export` | Exporta todos los datos | +| `POST` | `/agentmemory/import` | Importa desde JSON | +| `POST` | `/agentmemory/graph/query` | Consulta del grafo de conocimiento | +| `POST` | `/agentmemory/team/share` | Comparte con el equipo | +| `GET` | `/agentmemory/audit` | Pista de auditoría | + +Lista completa de endpoints: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Desarrollo

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**Requisitos previos:** Node.js >= 20, [iii-engine](https://iii.dev/docs) o Docker + +

Licencia

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.fr-FR.md b/READMEs/README.fr-FR.md new file mode 100644 index 0000000..b72b503 --- /dev/null +++ b/READMEs/README.fr-FR.md @@ -0,0 +1,1376 @@ +

+ agentmemory — Mémoire persistante pour les agents de codage IA +

+ +

+ + Votre agent de codage se souvient de tout. Fini de tout réexpliquer. + Built on iii engine +
+ Mémoire persistante pour Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode et tout client MCP. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Document de conception : 1200 stars / 172 forks sur le gist +

+ +

+ Le gist étend le motif LLM Wiki de Karpathy avec scoring de confiance, cycle de vie, graphes de connaissances et recherche hybride : agentmemory en est l'implémentation. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ Démo agentmemory +

+ +

+ Installation • + Démarrage rapide • + Benchmarks • + vs Concurrents • + Agents • + Fonctionnement • + MCP • + Visualiseur • + iii Console • + Powered by iii • + Configuration • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +Ou via `npx` (sans installation) : + +```bash +npx @agentmemory/agentmemory +``` + +À noter — npx met en cache par version. Si un simple `npx @agentmemory/agentmemory` sert une version plus ancienne, forcez la dernière avec `npx -y @agentmemory/agentmemory@latest`, ou videz le cache une fois avec `rm -rf ~/.npm/_npx` (macOS/Linux ; sur Windows, supprimez `%LOCALAPPDATA%\npm-cache\_npx`). Depuis v0.9.16+, la première exécution npx propose une installation globale inline pour que la commande `agentmemory` soit ensuite disponible partout. + +Toutes les options dans [Démarrage rapide](#quick-start) ci-dessous. Câblage spécifique par agent dans [Compatible avec tous les agents](#works-with-every-agent). + +--- + +

Compatible avec tous les agents

+ +agentmemory fonctionne avec tout agent qui prend en charge les hooks, MCP ou l'API REST. Tous les agents partagent le même serveur de mémoire. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+plugin natif + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+plugin natif + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+plugin natif + MCP +
+Hermes
+Hermes
+plugin natif + MCP +
+pi
+pi
+plugin natif + MCP +
+OpenHuman
+OpenHuman
+backend natif trait Memory +
+Cursor
+Cursor
+serveur MCP +
+Gemini CLI
+Gemini CLI
+serveur MCP +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+serveur MCP +
+Goose
+Goose
+serveur MCP +
+Kilo Code
+Kilo Code
+serveur MCP +
+Aider
+Aider
+API REST +
+Claude Desktop
+Claude Desktop
+serveur MCP +
+Windsurf
+Windsurf
+serveur MCP +
+Roo Code
+Roo Code
+serveur MCP +
+ +

+ Fonctionne avec n'importe quel agent qui parle MCP ou HTTP. Un seul serveur, des mémoires partagées entre tous. +

+ +--- + +Vous expliquez la même architecture à chaque session. Vous redécouvrez les mêmes bugs. Vous réenseignez les mêmes préférences. La mémoire intégrée (CLAUDE.md, .cursorrules) plafonne à 200 lignes et devient obsolète. agentmemory règle ce problème. Il capture silencieusement ce que fait votre agent, le compresse dans une mémoire interrogeable, puis injecte le bon contexte au démarrage de la session suivante. Une seule commande. Compatible entre agents. + +**Ce qui change :** Session 1, vous mettez en place l'authentification JWT. Session 2, vous demandez une limitation de débit. L'agent sait déjà que votre authentification utilise le middleware jose dans `src/middleware/auth.ts`, que vos tests couvrent la validation des tokens, et que vous avez choisi jose plutôt que jsonwebtoken pour la compatibilité Edge. Pas de réexplication. Pas de copier-coller. L'agent *sait*, point. + +```bash +npx @agentmemory/agentmemory +``` + +> **Nouveau en v0.9.0** — Site d'accueil sur [agent-memory.dev](https://agent-memory.dev), connecteur système de fichiers (`@agentmemory/fs-watcher`), le MCP standalone fait désormais proxy vers le serveur en cours d'exécution afin que les hooks et le visualiseur soient cohérents, politique d'audit codifiée sur tous les chemins de suppression, l'état de santé ne signale plus `memory_critical` sur les petits processus Node. Notes complètes dans [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18). + +--- + +

Benchmarks

+ + + + + + +
+ +### Précision de récupération + +**coding-agent-life-v1** (corpus interne, reproductible en sandbox) + +| Adaptateur | P@5 | R@5 | Taux de hit top-5 | Latence p50 | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| Référence grep | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100 % de taux de hit top-5. **2,2×** meilleure précision que la référence grep sur entrée identique. Ventilation complète par type : [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 questions) + +| Système | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| Repli BM25 seul | 86.2% | 94.6% | 71.5% | + + + +### Économies de tokens + +| Approche | Tokens/an | Coût/an | +|---|---|---| +| Coller le contexte complet | 19,5M+ | Impossible (dépasse la fenêtre) | +| Résumé par LLM | ~650K | ~500 $ | +| **agentmemory** | **~170K** | **~10 $** | +| agentmemory + embeddings locaux | ~170K | **0 $** | + +
+ +> Modèle d'embedding : `all-MiniLM-L6-v2` (local, gratuit, aucune clé d'API). Rapports complets : [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Comparaison avec les concurrents : [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory vs mem0, Letta, Khoj, claude-mem, Hippo. + +**Reproduire localement :** [`eval/README.md`](../eval/README.md) — harnais à adaptateurs pluggables pour LongMemEval `_s` (public, 500 questions) + `coding-agent-life-v1` (corpus interne de 15 sessions). Les adaptateurs grep / vectoriel / agentmemory sont scorés côte à côte, sortie NDJSON, scorecards publiés dans [`docs/benchmarks/`](../docs/benchmarks/). + +**À associer à [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) et [Graphify](https://github.com/safishamsi/graphify).** Indexation de graphe de code, pipelines de build multi-agents et graphes de connaissances étendus sur docs / PDFs / images / vidéos. agentmemory mémorise le travail ; ces trois projets éclairent le reste de la couche de contexte. Recettes et tableau de routage des questions : [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

vs Concurrents

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Intégré (CLAUDE.md)
TypeMoteur de mémoire + serveur MCPAPI de couche mémoireRuntime d'agent completFichier statique
R@5 de récupération95.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
Capture automatique12 hooks (zéro effort manuel)Appels add() manuelsL'agent s'édite lui-mêmeÉdition manuelle
RechercheBM25 + Vectoriel + Graphe (fusion RRF)Vectoriel + GrapheVectoriel (archival)Charge tout en contexte
Multi-agentsMCP + REST + leases + signauxAPI (sans coordination)Uniquement dans le runtime LettaFichiers par agent
Verrouillage frameworkAucun (tout client MCP)AucunÉlevé (Letta obligatoire)Format par agent
Dépendances externesAucune (SQLite + iii-engine)Qdrant / pgvectorPostgres + base vectorielleAucune
Cycle de vie mémoireConsolidation à 4 niveaux + décroissance + oubli automatiqueExtraction passiveGérée par l'agentÉlagage manuel
Efficacité en tokens~1 900 tokens/session (10 $/an)Variable selon l'intégrationMémoire centrale dans le contexte22K+ tokens à 240 observations
Visualiseur temps réelOui (port 3113)Tableau de bord cloudTableau de bord cloudNon
Auto-hébergéOui (par défaut)OptionnelOptionnelOui
+ +--- + +

Démarrage rapide

+ +Compatibilité : cette version cible `iii-sdk` stable `^0.11.0` et iii-engine v0.11.x. + +### Essayez en 30 secondes + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` amorce 3 sessions réalistes (auth JWT, correctif de requêtes N+1, limitation de débit) et lance des recherches sémantiques dessus. Vous verrez le système trouver « N+1 query fix » quand vous cherchez « database performance optimization » — la correspondance par mots-clés en est incapable. + +Ouvrez `http://localhost:3113` pour voir la mémoire se construire en direct. + +### Recommandé : installation globale + +`npx` met en cache par version. Si vous avez lancé `npx @agentmemory/agentmemory@0.9.14` la semaine dernière, un simple `npx @agentmemory/agentmemory` peut servir le 0.9.14 obsolète depuis `~/.npm/_npx/`, pas la dernière version. Installez une fois et la commande `agentmemory` est disponible partout : + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +À partir de v0.9.16, la première exécution npx propose une installation globale inline — répondez `Y` une fois et c'est réglé. Si vous passez l'étape, repliez sur l'une de ces options pour un fetch frais : + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +Sur Windows / PowerShell, l'équivalent pour vider le cache est `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — le `npx -y ...@latest` ci-dessus reste l'option multiplateforme. + +### Replay de session + +Chaque session enregistrée par agentmemory est rejouable. Ouvrez le visualiseur, choisissez l'onglet **Replay**, et parcourez la chronologie : prompts, appels d'outils, résultats d'outils et réponses s'affichent comme événements discrets avec play/pause, contrôle de vitesse (0,5×–4×) et raccourcis clavier (espace pour basculer, flèches pour avancer). + +Vous avez déjà d'anciennes transcriptions JSONL Claude Code à importer ? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Les sessions importées apparaissent dans le sélecteur Replay aux côtés des natives. Sous le capot, chaque entrée passe par les fonctions iii `mem::replay::load`, `mem::replay::sessions` et `mem::replay::import-jsonl` — aucun serveur secondaire. + +### Mise à niveau / Maintenance + +Utilisez la commande de maintenance lorsque vous voulez intentionnellement mettre à jour votre runtime local : + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Avertissement : cette commande modifie l'espace de travail / runtime courant. Elle peut mettre à jour les dépendances JavaScript et tirer l'image Docker épinglée `iiidev/iii:0.11.2`. Elle n'installe jamais un moteur iii non épinglé ou plus récent. + +Détails d'implémentation dans `src/cli.ts` (voir `runUpgrade` autour de la zone `src/cli.ts:544-595`). + +### Claude Code (un seul bloc, à coller) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code sans installation du plugin (chemin MCP-standalone) + +Si vous câblez le serveur MCP d'agentmemory via `~/.claude.json` directement plutôt que via `/plugin install`, Claude Code ne résout jamais `${CLAUDE_PLUGIN_ROOT}` et vous devez pointer les scripts de hooks vers des chemins absolus dans `~/.claude/settings.json`. Ces chemins embarquent typiquement la version d'agentmemory (par ex. `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), si bien que la mise à niveau suivante casse silencieusement tous les hooks. + +Contournement : + +```bash +agentmemory connect claude-code --with-hooks +``` + +Cela fusionne les mêmes commandes de hooks dans `~/.claude/settings.json` avec des chemins absolus résolus vers le répertoire `plugin/` du paquet `@agentmemory/agentmemory` actuellement installé. Relancez la commande après une mise à niveau d'agentmemory pour rafraîchir les chemins. Les entrées de l'utilisateur dans le même fichier sont préservées ; seules les entrées agentmemory précédentes sont remplacées. Utiliser le chemin `/plugin install` reste l'approche recommandée. +Pour des déploiements distants ou protégés, lancez Claude Code avec `AGENTMEMORY_URL` et `AGENTMEMORY_SECRET` définis. Le plugin transmet les deux valeurs à son serveur MCP intégré ; quand `AGENTMEMORY_URL` est vide, le shim MCP utilise `http://localhost:3111`. + +### Codex CLI (plateforme de plugins Codex) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Le plugin Codex est livré depuis le même répertoire `plugin/` que le plugin Claude Code. Il enregistre : + +- `@agentmemory/mcp` comme serveur MCP (proxie les 51 outils lorsque `AGENTMEMORY_URL` pointe vers un serveur agentmemory actif ; retombe sur 7 outils en local si aucun serveur n'est accessible) +- 6 hooks de cycle de vie : `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skills : `/recall`, `/remember`, `/session-history`, `/forget` + +Le moteur de hooks de Codex injecte `CLAUDE_PLUGIN_ROOT` dans les sous-processus de hooks (cf. [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), donc les mêmes scripts de hooks fonctionnent sur les deux hôtes sans duplication. Les événements Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure sont propres à Claude Code et ne sont pas enregistrés pour Codex. + +#### Codex Desktop : hooks de plugin actuellement silencieux (contournement disponible) + +`CodexHooks` et `PluginHooks` sont tous deux stables + activés par défaut dans [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), mais les builds Codex Desktop actuels ne dispatchent pas les `hooks.json` locaux au plugin ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). Les outils MCP fonctionnent toujours ; seules les observations de cycle de vie manquent. + +En attendant le correctif amont, dupliquez les mêmes commandes de hooks dans le `~/.codex/hooks.json` global : + +```bash +agentmemory connect codex --with-hooks +``` + +Cela ajoute un bloc idempotent à `~/.codex/hooks.json` qui référence des chemins absolus vers les scripts intégrés (pas besoin d'expansion `${CLAUDE_PLUGIN_ROOT}` au scope utilisateur). Relancez la même commande après une mise à niveau d'agentmemory pour rafraîchir les chemins. Les entrées de l'utilisateur dans le même fichier sont préservées ; seules les entrées agentmemory précédentes sont remplacées. + +
+OpenClaw (collez ce prompt) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Guide complet : [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (collez ce prompt) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Guide complet : [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Autres agents + +Démarrez le serveur de mémoire : `npx @agentmemory/agentmemory` + +L'entrée agentmemory est le **même bloc serveur MCP** pour tous les hôtes utilisant le format `mcpServers` (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw) : + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Fusionnez cette entrée dans l'objet `mcpServers` existant** du fichier de config de l'hôte — ne remplacez pas le fichier. Si le fichier contient déjà d'autres serveurs, ajoutez `agentmemory` à côté d'eux comme nouvelle clé dans `mcpServers`. Si `mcpServers` est totalement absent, collez le bloc dans `{ "mcpServers": { ... } }`. Les placeholders `${VAR}` héritent de `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` depuis le shell au lancement du serveur MCP — des vars non définies passent des chaînes vides et le shim retombe sur `http://localhost:3111`. Une seule entrée câblée couvre à la fois les déploiements locaux et distants (k8s / reverse-proxy). + +| Agent | Fichier de config | Notes | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | Fusionner dans `mcpServers`. Deeplink en un clic également disponible sur le site web. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | Fusionner dans `mcpServers`. Redémarrer Claude Desktop après modification. | +| **Cline / Roo Code / Kilo Code** | Paramètres MCP de Cline (Settings UI → MCP Servers → Edit) | Même bloc `mcpServers`. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Même bloc `mcpServers`. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (fusion automatique). | +| **OpenClaw** | Config MCP d'OpenClaw | Même bloc `mcpServers`, ou utilisez le [plugin mémoire plus poussé](../integrations/openclaw/). | +| **Codex CLI (MCP seul)** | `.codex/config.toml` | Format TOML : `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, ou ajoutez `[mcp_servers.agentmemory]` à la main. | +| **Codex CLI (plugin complet)** | Marketplace de plugins Codex | `codex plugin marketplace add rohitg00/agentmemory` puis `codex plugin add agentmemory@agentmemory`. Enregistre MCP + 6 hooks de cycle de vie (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skills. Sur Codex Desktop, lancez également `agentmemory connect codex --with-hooks` en attendant que [openai/codex#16430](https://github.com/openai/codex/issues/16430) soit corrigé — les hooks de plugin y sont actuellement silencieux. | +| **OpenCode (MCP seul)** | `opencode.json` | Format différent — clé `mcp` au niveau racine, commande sous forme de tableau : `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (plugin complet)** | `plugin/opencode/` | 22 hooks de capture automatique couvrant cycle de vie de session, messages, outils, erreurs. Deux commandes slash (`/recall`, `/remember`). Copiez `plugin/opencode/` dans votre workspace OpenCode et ajoutez l'entrée du plugin à `opencode.json`. Voir [`plugin/opencode/README.md`](../plugin/opencode/README.md) pour le tableau complet des hooks et l'analyse des manques. | +| **pi** | `~/.pi/agent/extensions/agentmemory` | Copiez [`integrations/pi`](../integrations/pi/) et redémarrez pi. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Utilisez le [plugin de fournisseur de mémoire plus poussé](../integrations/hermes/) avec `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` écrit le bloc `mcpServers` standard. La charge utile des hooks est compatible champ-à-champ avec Claude Code, donc les 12 scripts de hooks existants fonctionnent sans modification — câblez-les via la section `hooks` du même `settings.json`. | +| **Antigravity** (remplace Gemini CLI) | `mcp_config.json` (dans le répertoire User d'Antigravity) | `agentmemory connect antigravity` écrit le bloc `mcpServers` standard. macOS : `~/Library/Application Support/Antigravity/User/`. Linux : `~/.config/Antigravity/User/`. À utiliser après l'arrêt de Gemini CLI au 2026-06-18. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` écrit la config au niveau utilisateur. Les overrides de workspace vont dans `.kiro/settings/mcp.json` à côté de votre code. | +| **Goose** | UI des paramètres MCP de Goose | Même bloc `mcpServers`. | +| **Aider** | n/a | Parlez directement à l'API REST : `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Tout agent (32+)** | n/a | `npx skillkit install agentmemory` détecte l'hôte automatiquement et fusionne. | + +**Clients MCP en sandbox** (Flatpak / Snap / conteneurs restrictifs) qui ne peuvent pas joindre le `localhost` de l'hôte : définissez également `"AGENTMEMORY_FORCE_PROXY": "1"` dans le bloc `env` et pointez `AGENTMEMORY_URL` vers une route que la sandbox peut effectivement atteindre (par ex. votre IP LAN). + +### Accès programmatique (Python / Rust / Node) + +agentmemory enregistre ses opérations principales en tant que fonctions iii (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). N'importe quel langage doté d'un SDK iii peut les appeler directement sur `ws://localhost:49134` — pas besoin de client REST séparé par langage. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Exemple complet : [`examples/python/`](../examples/python/) (quickstart + flux observation/recall). REST sur `:3111` reste disponible pour les hôtes sans runtime iii. + +### Depuis les sources + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Cela démarre agentmemory avec un `iii-engine` local si `iii` est déjà installé, ou retombe sur Docker Compose si Docker est disponible. REST, streams et visualiseur se lient à `127.0.0.1` par défaut. + +Installer `iii-engine` manuellement. **agentmemory épingle actuellement `iii-engine` à `v0.11.2`** — `v0.11.6` introduit un nouveau modèle de sandboxing systématique via `iii worker add` pour lequel agentmemory n'a pas encore été refactorisé. L'épinglage sera levé une fois la refonte effectuée. Surchargez avec `AGENTMEMORY_III_VERSION=` si vous avez migré au modèle sandbox manuellement. + +- **macOS arm64 :** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64 :** remplacez `aarch64-apple-darwin` par `x86_64-apple-darwin` +- **Linux x64 :** remplacez par `x86_64-unknown-linux-gnu` +- **Linux arm64 :** remplacez par `aarch64-unknown-linux-gnu` +- **Windows :** téléchargez `iii-x86_64-pc-windows-msvc.zip` depuis [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2), extrayez `iii.exe`, ajoutez-le au PATH + +Ou utilisez Docker (le `docker-compose.yml` fourni tire `iiidev/iii:0.11.2`). Documentation complète : [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory tourne sur Windows 10/11, mais le paquet Node.js seul ne suffit pas — il vous faut aussi le runtime `iii-engine` (un binaire natif séparé) comme processus en arrière-plan. L'installeur amont officiel est un script `sh` et il n'existe à ce jour ni installeur PowerShell ni paquet scoop/winget, donc les utilisateurs Windows ont deux chemins : + +**Option A — Binaire Windows précompilé (recommandé) :** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Option B — Docker Desktop :** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Option C — MCP standalone uniquement (sans moteur) :** si vous n'avez besoin que des outils MCP pour votre agent et pas de l'API REST, du visualiseur ou des jobs cron, sautez le moteur : + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Diagnostics pour Windows :** si `npx @agentmemory/agentmemory` échoue, relancez avec `--verbose` pour voir le stderr réel du moteur. Modes de défaillance courants : + +| Symptôme | Correctif | +|---|---| +| `iii-engine process started` puis `did not become ready within 15s` | Le moteur a planté au démarrage — relancez avec `--verbose`, vérifiez stderr | +| `Could not start iii-engine` | Ni `iii.exe` ni Docker installés. Voir les options A ou B ci-dessus | +| Conflit de port | `netstat -ano \| findstr :3111` pour voir ce qui est lié, puis tuez-le ou utilisez `--port ` | +| Fallback Docker ignoré bien que Docker soit installé | Assurez-vous que Docker Desktop tourne effectivement (icône de la barre d'état système) | + +> Note : le **moteur** iii est un binaire précompilé, pas un crate cargo — n'essayez pas de l'installer avec `cargo install`. (Les **SDK** iii sont bien publiés sur crates.io, npm et PyPI, mais agentmemory n'en a pas besoin.) Méthodes d'installation du moteur supportées, toutes épinglées à v0.11.2 : le binaire précompilé v0.11.2 ci-dessus, le script d'installation `sh` amont **avec l'épingle de version** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) et l'image Docker `iiidev/iii:0.11.2`. Un simple `install.sh | sh` installe le moteur **le plus récent**, que agentmemory ne supporte pas — passez toujours `VERSION=0.11.2`. Le plus simple de tout : exécutez simplement `npx @agentmemory/agentmemory`, qui récupère le moteur épinglé dans `~/.agentmemory/bin` pour vous. + +--- + +

Déploiement

+ +Templates en un clic pour les hébergeurs managés. Chacun livre un Dockerfile +autonome qui récupère `@agentmemory/agentmemory` depuis npm et copie le +binaire iii engine depuis l'image officielle `iiidev/iii` du Docker +Hub — pas d'image agentmemory précompilée requise. Le stockage +persistant se monte sur `/data` ; le point d'entrée au premier +démarrage réécrit la config iii livrée par npm (qui se lie à +`127.0.0.1`) par une version réglée pour le déploiement qui se lie à +`0.0.0.0` et utilise des chemins absolus `/data`, génère le secret HMAC, +puis abaisse les privilèges de `root` à `node` via `gosu` avant +d'exec'er la CLI agentmemory. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Le bouton de déploiement en un clic de Render exige un `render.yaml` à la racine du dépôt, que nous gardons délibérément propre. Utilisez le flux Render Blueprint documenté dans [`deploy/render/`](./deploy/render/README.md) pour pointer manuellement vers le blueprint dans le dépôt. + +Détails complets de configuration (capture HMAC, tunnel SSH du visualiseur, rotation, sauvegarde, plafonds de coût) dans [`deploy/`](./deploy/README.md) : + +- [`deploy/fly`](./deploy/fly/README.md) — machine unique avec + `auto_stop_machines = "stop"` ; le moins cher à l'arrêt. +- [`deploy/railway`](./deploy/railway/README.md) — forfait Hobby à tarif fixe, + volume dans le tableau de bord. +- [`deploy/render`](./deploy/render/README.md) — flux Blueprint, + snapshots disque automatiques sur les forfaits payants. +- [`deploy/coolify`](./deploy/coolify/README.md) — auto-hébergé sur votre + propre VPS via [Coolify](https://coolify.io/self-hosted) ; même stack + Docker Compose, vous possédez l'hôte et les données. + +Seul le port `3111` est publié. Le visualiseur sur `3113` reste lié à la +boucle locale dans le conteneur — chaque README de template documente +le motif tunnel SSH pour y accéder. + +--- + +

Pourquoi agentmemory

+ +Chaque agent de codage oublie tout quand la session se termine. Vous perdez les 5 premières minutes de chaque session à réexpliquer votre stack. agentmemory tourne en arrière-plan et élimine totalement cette perte. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### vs mémoire d'agent intégrée + +Chaque agent de codage IA est livré avec une mémoire intégrée — Claude Code a `MEMORY.md`, Cursor a des notepads, Cline a memory bank. Cela fonctionne comme des post-it. agentmemory est la base de données interrogeable derrière les post-it. + +| | Intégrée (CLAUDE.md) | agentmemory | +|---|---|---| +| Échelle | Plafond de 200 lignes | Illimitée | +| Recherche | Charge tout en contexte | BM25 + vecteur + graphe (top-K seul) | +| Coût en tokens | 22K+ à 240 observations | ~1 900 tokens (92 % de moins) | +| Inter-agents | Fichiers par agent | MCP + REST (n'importe quel agent) | +| Coordination | Aucune | Leases, signaux, actions, routines | +| Observabilité | Lire les fichiers à la main | Visualiseur temps réel sur :3113 | + +--- + +

Fonctionnement

+ +### Pipeline mémoire + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### Consolidation mémoire à 4 niveaux + +Inspirée de la façon dont le cerveau humain traite la mémoire — pas si éloignée de la consolidation pendant le sommeil. + +| Niveau | Quoi | Analogie | +|------|------|---------| +| **Working** | Observations brutes issues de l'usage des outils | Mémoire à court terme | +| **Episodic** | Résumés de session compressés | « Ce qui s'est passé » | +| **Semantic** | Faits et motifs extraits | « Ce que je sais » | +| **Procedural** | Workflows et motifs de décision | « Comment faire » | + +Les mémoires décroissent dans le temps (courbe d'Ebbinghaus). Les mémoires fréquemment consultées se renforcent. Les mémoires obsolètes sont évincées automatiquement. Les contradictions sont détectées et résolues. + +### Ce qui est capturé + +| Hook | Capture | +|------|----------| +| `SessionStart` | Chemin de projet, ID de session | +| `UserPromptSubmit` | Prompts utilisateur (filtrés pour la vie privée) | +| `PreToolUse` | Motifs d'accès fichier + contexte enrichi | +| `PostToolUse` | Nom de l'outil, entrée, sortie | +| `PostToolUseFailure` | Contexte d'erreur | +| `PreCompact` | Réinjecte la mémoire avant compaction | +| `SubagentStart/Stop` | Cycle de vie des sous-agents | +| `Stop` | Résumé de fin de session | +| `SessionEnd` | Marqueur de fin de session | + +### Capacités clés + +| Capacité | Description | +|---|---| +| **Capture automatique** | Chaque usage d'outil enregistré via hooks — zéro effort manuel | +| **Recherche sémantique** | BM25 + vecteur + graphe de connaissances avec fusion RRF | +| **Évolution de la mémoire** | Versioning, supersession, graphes de relations | +| **Oubli automatique** | Expiration TTL, détection de contradictions, éviction par importance | +| **Vie privée d'abord** | Clés d'API, secrets, balises `` retirés avant stockage | +| **Auto-réparation** | Circuit breaker, chaîne de repli de fournisseur, surveillance de santé | +| **Pont Claude** | Synchronisation bidirectionnelle avec MEMORY.md | +| **Graphe de connaissances** | Extraction d'entités + parcours BFS | +| **Mémoire d'équipe** | Partagée + privée par namespace entre membres de l'équipe | +| **Provenance des citations** | Tracer toute mémoire jusqu'aux observations sources | +| **Snapshots git** | Version, rollback et diff de l'état mémoire | + +--- + + + +Récupération triple-flux combinant trois signaux : + +| Flux | Ce qu'il fait | Quand | +|---|---|---| +| **BM25** | Correspondance par mots-clés racinisés avec expansion par synonymes | Toujours actif | +| **Vector** | Similarité cosinus sur embeddings denses | Fournisseur d'embedding configuré | +| **Graph** | Parcours du graphe de connaissances par correspondance d'entités | Entités détectées dans la requête | + +Fusionnés par Reciprocal Rank Fusion (RRF, k=60) et diversifiés par session (max 3 résultats par session). + +BM25 tokenise nativement le grec, le cyrillique, l'hébreu, l'arabe et le latin accentué. Pour des mémoires en chinois / japonais / coréen, installez les segmenteurs optionnels (`npm install @node-rs/jieba tiny-segmenter`) afin de découper les suites CJK en tokens au niveau du mot ; sans eux, agentmemory retombe doucement sur une tokenisation par suite entière et imprime un message indicatif unique sur stderr. + +### Fournisseurs d'embedding + +agentmemory détecte automatiquement votre fournisseur. Pour de meilleurs résultats, installez les embeddings locaux (gratuits) : + +```bash +npm install @xenova/transformers +``` + +| Fournisseur | Modèle | Coût | Notes | +|---|---|---|---| +| **Local (recommandé)** | `all-MiniLM-L6-v2` | Gratuit | Hors-ligne, +8 pp de rappel par rapport à BM25 seul | +| Gemini | `gemini-embedding-001` | Niveau gratuit | 100+ langues, dimensions 768/1536/3072 (MRL), entrée 2048 tokens. Remplace `text-embedding-004` ([déprécié, arrêt le 14 jan. 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | 0,02 $/1M | Meilleure qualité | +| Voyage AI | `voyage-code-3` | Payant | Optimisé pour le code | +| Cohere | `embed-english-v3.0` | Essai gratuit | Polyvalent | +| OpenRouter | N'importe quel modèle | Variable | Proxy multi-modèles | + +--- + +

Serveur MCP

+ +53 outils, 6 ressources, 3 prompts et 4 skills — la boîte à outils mémoire MCP la plus complète pour tout agent. + +> **Shim MCP vs serveur complet :** le paquet publié `@agentmemory/mcp` est un shim léger. Il expose la surface complète de 51 outils **uniquement quand il peut joindre un serveur agentmemory actif** via `AGENTMEMORY_URL` (mode proxy). Sans serveur joignable, le shim retombe sur un jeu local de 7 outils (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). La variable d'env `AGENTMEMORY_TOOLS=core|all` est un drapeau *côté serveur* — la définir dans le bloc `env` du shim n'a aucun effet. Si vous ne voyez que 7 outils dans Cursor / OpenCode / Gemini CLI, lancez `npx @agentmemory/agentmemory` (ou la stack Docker) et définissez `AGENTMEMORY_URL=http://localhost:3111`. + +### 51 outils + +
+Outils de base (toujours disponibles) + +| Outil | Description | +|------|-------------| +| `memory_recall` | Rechercher dans les observations passées | +| `memory_compress_file` | Compresser des fichiers markdown en préservant la structure | +| `memory_save` | Sauvegarder un insight, une décision ou un motif | +| `memory_patterns` | Détecter des motifs récurrents | +| `memory_smart_search` | Recherche hybride sémantique + mots-clés | +| `memory_file_history` | Observations passées sur des fichiers spécifiques | +| `memory_sessions` | Lister les sessions récentes | +| `memory_timeline` | Observations chronologiques | +| `memory_profile` | Profil de projet (concepts, fichiers, motifs) | +| `memory_export` | Exporter toutes les données mémoire | +| `memory_relations` | Interroger le graphe de relations | + +
+ +
+Outils étendus (51 au total — définissez AGENTMEMORY_TOOLS=all) + +| Outil | Description | +|------|-------------| +| `memory_patterns` | Détecter des motifs récurrents | +| `memory_timeline` | Observations chronologiques | +| `memory_relations` | Interroger le graphe de relations | +| `memory_graph_query` | Parcours du graphe de connaissances | +| `memory_consolidate` | Lancer la consolidation à 4 niveaux | +| `memory_claude_bridge_sync` | Synchroniser avec MEMORY.md | +| `memory_team_share` | Partager avec les membres de l'équipe | +| `memory_team_feed` | Éléments partagés récemment | +| `memory_audit` | Piste d'audit des opérations | +| `memory_governance_delete` | Supprimer avec piste d'audit | +| `memory_snapshot_create` | Snapshot versionné git | +| `memory_action_create` | Créer des éléments de travail avec dépendances | +| `memory_action_update` | Mettre à jour le statut d'une action | +| `memory_frontier` | Actions débloquées classées par priorité | +| `memory_next` | Seule action suivante la plus importante | +| `memory_lease` | Leases d'action exclusifs (multi-agents) | +| `memory_routine_run` | Instancier des routines de workflow | +| `memory_signal_send` | Messagerie inter-agents | +| `memory_signal_read` | Lire des messages avec accusés | +| `memory_checkpoint` | Portes de condition externes | +| `memory_mesh_sync` | Sync P2P entre instances | +| `memory_sentinel_create` | Watchers événementiels | +| `memory_sentinel_trigger` | Déclencher des sentinelles depuis l'extérieur | +| `memory_sketch_create` | Graphes d'action éphémères | +| `memory_sketch_promote` | Promouvoir en permanent | +| `memory_crystallize` | Compacter les chaînes d'actions | +| `memory_diagnose` | Vérifications de santé | +| `memory_heal` | Auto-correction d'état bloqué | +| `memory_facet_tag` | Tags dimension:valeur | +| `memory_facet_query` | Interroger par tags de facettes | +| `memory_verify` | Tracer la provenance | + +
+ +### 6 Ressources · 3 Prompts · 4 Skills + +| Type | Nom | Description | +|------|------|-------------| +| Ressource | `agentmemory://status` | Santé, nombre de sessions, nombre de mémoires | +| Ressource | `agentmemory://project/{name}/profile` | Intelligence par projet | +| Ressource | `agentmemory://memories/latest` | 10 dernières mémoires actives | +| Ressource | `agentmemory://graph/stats` | Statistiques du graphe de connaissances | +| Prompt | `recall_context` | Recherche + retour de messages de contexte | +| Prompt | `session_handoff` | Données de passation entre agents | +| Prompt | `detect_patterns` | Analyser les motifs récurrents | +| Skill | `/recall` | Rechercher la mémoire | +| Skill | `/remember` | Sauvegarder en mémoire long-terme | +| Skill | `/session-history` | Résumés de sessions récentes | +| Skill | `/forget` | Supprimer observations / sessions | + +### MCP autonome + +Tourne sans le serveur complet — pour n'importe quel client MCP. L'une ou l'autre marche : + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +Ou ajoutez à la config MCP de votre agent : + +La plupart des agents (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI) : +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Fusionnez l'entrée `agentmemory` dans l'objet `mcpServers` existant de votre hôte plutôt que de remplacer le fichier. Pour des clients en sandbox qui ne peuvent pas joindre le `localhost` de l'hôte, ajoutez `"AGENTMEMORY_FORCE_PROXY": "1"` au bloc env et pointez `AGENTMEMORY_URL` vers une route que la sandbox peut atteindre. + +OpenCode (`opencode.json`) : +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Copiez le fichier plugin depuis le dépôt : +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Visualiseur temps réel

+ +Démarre automatiquement sur le port `3113`. Flux d'observations en direct, explorateur de sessions, navigateur mémoire, visualisation du graphe de connaissances et tableau de bord de santé. + +```bash +open http://localhost:3113 +``` + +Le serveur du visualiseur se lie à `127.0.0.1` par défaut. Le point d'entrée `/agentmemory/viewer` servi par REST suit les règles normales de bearer-token `AGENTMEMORY_SECRET`. Les en-têtes CSP utilisent un nonce de script par réponse et désactivent les attributs gestionnaires inline (`script-src-attr 'none'`). + +--- + +

iii Console

+ +Le visualiseur sur `:3113` montre ce que votre agent **a mémorisé**. La [iii console](https://iii.dev/docs/console) montre ce que votre agent **a fait** — chaque op mémoire comme trace OpenTelemetry, chaque entrée KV éditable, chaque fonction invocable, chaque flux taps-able. Deux fenêtres sur la même mémoire : l'une orientée produit, l'autre orientée moteur. + +Regardez un `memory_smart_search` se déclencher et voyez le scan BM25 → recherche d'embeddings → fusion RRF → reranker comme un waterfall. Éditez un timer de consolidation bloqué dans le navigateur KV. Rejouez un hook `PostToolUse` avec une charge utile modifiée. Épinglez le flux WebSocket et regardez les observations arriver en direct. + +agentmemory livre cela gratuitement parce que chaque fonction, trigger, scope d'état et flux est une primitive iii — rien de personnalisé, rien à instrumenter. + +

+ iii console — page Workers montrant les workers connectés, dont les instances agentmemory avec compteurs de fonctions en direct et métadonnées de runtime +
+ Page Workers : chaque worker connecté — y compris agentmemory lui-même — avec PID, nombre de fonctions, runtime et last-seen. +

+ +**Déjà installé.** La console est livrée avec `iii` — pas d'installeur séparé. + +**Lancer aux côtés d'agentmemory :** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Puis ouvrez `http://localhost:3114`. Ajoutez `--enable-flow` pour la page expérimentale de graphe d'architecture. + +Surchargez les endpoints du moteur uniquement si vous les avez déplacés : + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Ce que vous pouvez faire depuis la console :** + +| Page | Pour | +|------|-----------| +| **Workers** | Voir chaque worker connecté et ses métriques en direct — y compris le worker agentmemory lui-même. | +| **Functions** | Invoquer n'importe quelle fonction d'agentmemory avec une charge utile JSON — pratique pour tester `memory.recall`, `memory.consolidate`, `graph.query` sans câbler un client. | +| **Triggers** | Rejouer les triggers HTTP, cron, event et state — déclencher manuellement le cron de consolidation, retenter une route HTTP, émettre un changement d'état. | +| **States** | Navigateur KV avec CRUD complet — sessions, slots mémoire, timers de cycle de vie, index d'embeddings — éditer les valeurs sur place. | +| **Streams** | Moniteur WebSocket en direct pour les écritures mémoire, événements de hooks et mises à jour d'observations à mesure qu'ils circulent dans les iii streams. | +| **Queues** | Topics de files durables + gestion de la dead-letter. Rejouer ou abandonner les jobs d'embedding / compression échoués. | +| **Traces** | Vues waterfall / flame / décomposition par service OpenTelemetry. Filtrez par `trace_id` pour voir exactement quelles fonctions, appels DB et requêtes d'embedding une seule `memory.search` a produits. | +| **Logs** | Logs OTEL structurés filtrés et corrélés aux IDs de trace/span. | +| **Config** | Configuration runtime — voir exactement quels workers, fournisseurs et ports tourne votre moteur. | +| **Flow** | (Optionnel, `--enable-flow`) Graphe d'architecture interactif de chaque worker, trigger et flux. | + +

+ vue waterfall de traces dans iii console montrant la durée par span +
+ Traces : waterfall / flame / décomposition par service pour chaque opération mémoire. +

+ +**Les traces sont déjà actives :** + +`iii-config.yaml` est livré avec le worker `iii-observability` activé (`exporter: memory`, `sampling_ratio: 1.0`, métriques + logs). Aucune config supplémentaire — dès qu'agentmemory démarre, chaque opération mémoire émet un span de trace et un log structuré que la console peut lire. + +Si vous voulez exporter vers Jaeger/Honeycomb/Grafana Tempo à la place, changez `exporter: memory` en `exporter: otlp` et définissez l'endpoint du collecteur selon la documentation d'observabilité d'iii. + +> **Attention :** aucune auth n'est appliquée sur la console elle-même — gardez-la liée à `127.0.0.1` (par défaut) et ne l'exposez jamais publiquement. + +--- + +

Powered by iii

+ +agentmemory est **déjà une instance [iii](https://iii.dev) en cours d'exécution**. Fonctions, triggers, état KV, flux, traces OTEL — tout est primitive iii. Vous n'avez pas installé Postgres, Redis, Express, pm2, ni Prometheus, parce qu'iii les remplace. + +Cela signifie qu'une commande supplémentaire étend agentmemory d'une toute nouvelle capacité. + +### Étendez agentmemory avec une seule commande + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Chaque `iii worker add` enregistre de nouvelles fonctions et triggers dans le même moteur sur lequel agentmemory tourne déjà. Le visualiseur et la console les prennent en compte immédiatement — sans rechargement, sans nouvelle intégration, sans nouveau conteneur. + +| `iii worker add` | Ce que vous obtenez en plus d'agentmemory | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Mémoire multi-instances : chaque `remember` se diffuse, chaque `search` lit l'union | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Cycle de vie planifié — consolidation nocturne, snapshots hebdomadaires, décroissance sur horloge fixe | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Retries durables : les jobs d'embedding + compression en échec survivent au redémarrage, aucune observation perdue | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | Traces, métriques et logs OTEL sur chaque fonction — câblés dans `iii-config.yaml` dès le premier jour | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | Le code issu de `memory_recall` s'exécute dans une VM jetable, pas dans votre shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | Adaptateur d'état adossé à SQL lorsque vous dépassez les valeurs par défaut KV en mémoire | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Déployez des serveurs MCP supplémentaires à côté de celui d'agentmemory, partageant le même moteur | + +Registre complet : [workers.iii.dev](https://workers.iii.dev). Chaque worker là-bas se compose via les mêmes primitives qu'utilise agentmemory — et l'agentmemory que vous avez déjà en est un. + +### Ce qu'iii remplace + +| Stack traditionnelle | agentmemory utilise | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + index vectoriel en mémoire | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | Supervision de workers du moteur iii | +| Prometheus / Grafana | iii OTEL + moniteur de santé | +| Systèmes de plugins personnalisés | `iii worker add ` | + +**118 fichiers sources · ~21 800 LOC · 950+ tests · 123 fonctions · 34 scopes KV** — tout sur trois primitives. Pas de `agentmemory plugin install`. Le système de plugins, c'est iii lui-même. + +--- + +

Configuration

+ +### Fournisseurs LLM + +agentmemory détecte automatiquement depuis votre environnement. Par défaut, aucun appel LLM n'est effectué tant que vous n'avez pas configuré de fournisseur ou explicitement opté pour le fallback abonnement Claude. + +| Fournisseur | Config | Notes | +|----------|--------|-------| +| **No-op (par défaut)** | Aucune config nécessaire | Le compress/summarize adossé à un LLM est DÉSACTIVÉ. La compression et le recall BM25 synthétiques fonctionnent toujours. Voir `AGENTMEMORY_ALLOW_AGENT_SDK` ci-dessous si vous comptiez sur le fallback abonnement Claude. | +| Anthropic API | `ANTHROPIC_API_KEY` | Facturation au token | +| MiniMax | `MINIMAX_API_KEY` | Compatible Anthropic | +| Gemini | `GEMINI_API_KEY` | Active aussi les embeddings | +| OpenRouter | `OPENROUTER_API_KEY` | N'importe quel modèle | +| Fallback abonnement Claude | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Opt-in seulement. Engendre des sessions `@anthropic-ai/claude-agent-sdk` — provoquait une récursion non bornée du Stop-hook, il n'est plus l'option par défaut. | + +### Sélection de modèle attentive au coût + +La compression en arrière-plan tourne sur chaque observation, donc le choix du modèle influence sensiblement la dépense mensuelle. Données de charge capturées : 635 requêtes / 888K tokens / 35 heures d'usage actif, exécutées contre trois modèles OpenRouter au tarif du 2026-05-23. + +| Niveau | Modèle | Entrée / 1M | Sortie / 1M | Coût pour les 35h capturées | Notes | +|------|-------|------------|-------------|---------------------------|-------| +| Recommandé | `deepseek/deepseek-v4-pro` | 0,435 $ | 0,87 $ | ~0,46 $ | Qualité de compression + résumé solide à un coût ~10× moindre que Sonnet. | +| Recommandé | `deepseek/deepseek-chat` | 0,27 $ | 1,10 $ | ~0,40 $ | Plus ancien mais toujours satisfaisant pour des charges de compression uniquement. | +| Recommandé | `qwen/qwen3-coder` | 0,45 $ | 1,80 $ | ~0,55 $ | Solide raisonnement code si vos sessions sont fortement code-shaped. | +| Premium | `anthropic/claude-sonnet-4.6` | 3,00 $ | 15,00 $ | ~5,02 $ | Haute qualité mais coûteux pour du travail de fond permanent. | +| Premium | `openai/gpt-4o` | 2,50 $ | 10,00 $ | ~4,20 $ | Niveau similaire à Sonnet. | +| À éviter | `anthropic/claude-opus-4.6` | 15,00 $ | 75,00 $ | ~25+ $ | Modèle classe raisonnement ; surcoût massif pour de la compression. | + +agentmemory imprime un avertissement runtime quand `OPENROUTER_MODEL` correspond à un motif de niveau premium. Définissez `AGENTMEMORY_SUPPRESS_COST_WARNING=1` pour le faire taire une fois votre choix éclairé. + +Compromis qualité vs coût pour le travail mémoire : la compression est une tâche de résumé avec des exigences de qualité relativement souples (c'est l'agent qui relit le résumé, pas l'utilisateur). DeepSeek-V4-Pro / Qwen3-Coder se situent à la précision d'arrondi près de Sonnet sur cette tâche tout en coûtant ~10× moins. Réservez les modèles premium aux requêtes que vous lisez directement. + +Sources : [tarification OpenRouter pour Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [notes de prix DeepSeek](https://api-docs.deepseek.com/quick_start/pricing/). + +### Mémoire multi-agents (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +Dans des configurations multi-agents où plusieurs rôles partagent un même serveur agentmemory (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` marque chaque écriture avec le rôle qui l'a produite. `AGENTMEMORY_AGENT_SCOPE` contrôle si le recall filtre par ce tag. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Deux modes : + +| Mode | Marquer les écritures | Filtrer le recall | Quand l'utiliser | +|------|------------|---------------|-------------| +| `shared` (par défaut) | oui | non | Contexte inter-agents avec piste d'audit. L'architect voit ce que le developer a noté, mais chaque ligne enregistre qui l'a dit. | +| `isolated` | oui | oui | Séparation stricte. L'architect ne voit jamais les observations / mémoires / sessions du developer. | + +Ce qui est marqué quand `AGENT_ID` est défini : `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. Le rôle circule de `api::session::start` → `mem::observe` → `mem::compress` → KV. + +Ce qui est filtré en mode isolé : `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Chaque endpoint accepte `?agentId=` pour surcharger par requête, et `?agentId=*` pour se désinscrire entièrement du scope de l'env. `/memories` accepte aussi `?includeOrphans=true` pour faire remonter les mémoires antérieures à AGENT_ID dont `agentId` est indéfini. + +Surcharge par appel au niveau SDK / REST : chaque endpoint mutant (`/session/start`, `/remember`) accepte un champ `agentId` dans le corps de la requête qui gagne sur l'env. Utile pour des runtimes qui routent plusieurs rôles à travers un même processus serveur. + +Quand `AGENT_ID` n'est pas défini, la mémoire reste non scopée (comportement legacy, sans tags ni filtres). + +### Ports + +agentmemory + iii-engine se lient à quatre ports par défaut. Si un redémarrage échoue avec `port in use`, ce tableau vous indique le processus à chercher. + +| Port | Processus | Usage | Surcharge env | +|------|---------|---------|--------------| +| `3111` | agentmemory | API REST + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Worker streams interne (consommé par agentmemory + visualiseur) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Visualiseur temps réel (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — les workers s'y enregistrent, la télémétrie OTel y circule | `III_ENGINE_URL` (URL complète, défaut `ws://localhost:49134`) | + +Nettoyage de processus zombies quand des ports restent occupés après un crash : + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` réclame proprement à la fois le worker et le pidfile du moteur en arrêt gracieux. Le nettoyage manuel ci-dessus n'est nécessaire que pour le cas post-crash où aucun pidfile n'est laissé en place. + +### Fichier de configuration + +Mettez la configuration runtime d'agentmemory dans `~/.agentmemory/.env` au lieu d'exporter des variables dans chaque shell. Si le visualiseur affiche un indice de setup comme `export ANTHROPIC_API_KEY=...`, recopiez-le dans ce fichier sous la forme `ANTHROPIC_API_KEY=...` sans le préfixe `export`, puis redémarrez agentmemory. + +Les variables d'environnement du processus restent valides et prennent le pas sur les valeurs du fichier. + +Sur Windows, le même fichier se trouve dans `%USERPROFILE%\.agentmemory\.env` : + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +Pour tester avec un abonnement Claude Code Pro/Max au lieu d'une clé d'API, optez-vous explicitement : + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Activez les fonctionnalités de graphe ou de consolidation dans le même fichier si vous les voulez : + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Variables d'environnement + +Créez `~/.agentmemory/.env` : + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +124 endpoints sur le port `3111`. L'API REST se lie à `127.0.0.1` par défaut. Les endpoints protégés exigent `Authorization: Bearer ` lorsque `AGENTMEMORY_SECRET` est défini, et les endpoints de mesh sync exigent `AGENTMEMORY_SECRET` sur les deux pairs. + +
+Endpoints clés + +| Méthode | Chemin | Description | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Vérification de santé (toujours publique) | +| `POST` | `/agentmemory/session/start` | Démarrer une session + obtenir le contexte | +| `POST` | `/agentmemory/session/end` | Terminer une session | +| `POST` | `/agentmemory/observe` | Capturer une observation | +| `POST` | `/agentmemory/smart-search` | Recherche hybride | +| `POST` | `/agentmemory/context` | Générer du contexte | +| `POST` | `/agentmemory/remember` | Sauvegarder en mémoire long-terme | +| `POST` | `/agentmemory/forget` | Supprimer des observations | +| `POST` | `/agentmemory/enrich` | Contexte de fichier + mémoires + bugs | +| `GET` | `/agentmemory/profile` | Profil de projet | +| `GET` | `/agentmemory/export` | Exporter toutes les données | +| `POST` | `/agentmemory/import` | Importer depuis JSON | +| `POST` | `/agentmemory/graph/query` | Requête sur le graphe de connaissances | +| `POST` | `/agentmemory/team/share` | Partager avec l'équipe | +| `GET` | `/agentmemory/audit` | Piste d'audit | + +Liste complète des endpoints : [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Développement

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**Prérequis :** Node.js >= 20, [iii-engine](https://iii.dev/docs) ou Docker + +

Licence

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.hi-IN.md b/READMEs/README.hi-IN.md new file mode 100644 index 0000000..00358fa --- /dev/null +++ b/READMEs/README.hi-IN.md @@ -0,0 +1,1379 @@ +

+ agentmemory — AI कोडिंग एजेंट्स के लिए स्थायी मेमोरी +

+ +

+ + आपका कोडिंग एजेंट सब कुछ याद रखता है। बार-बार समझाने की ज़रूरत नहीं। + Built on iii engine +
+ Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode, और किसी भी MCP क्लाइंट के लिए स्थायी मेमोरी। +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1200 stars / 172 forks on the gist +

+ +

+ यह gist Karpathy के LLM Wiki पैटर्न को confidence scoring, lifecycle, knowledge graphs और hybrid search के साथ बढ़ाता है: agentmemory इसका implementation है। +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory demo +

+ +

+ इंस्टॉल • + क्विक स्टार्ट • + बेंचमार्क्स • + प्रतिस्पर्धियों से तुलना • + एजेंट्स • + यह कैसे काम करता है • + MCP • + व्यूअर • + iii कंसोल • + iii द्वारा संचालित • + कॉन्फ़िग • + API +

+ +--- + +## इंस्टॉल + +```bash +npm install -g @agentmemory/agentmemory # एक बार — PATH पर `agentmemory` कमांड उपलब्ध +# अगर macOS/Linux सिस्टम Node इंस्टॉल पर EACCES त्रुटि आती है, तो इसके साथ फिर से चलाएँ: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # :3111 पर मेमोरी सर्वर शुरू करें +agentmemory demo # नमूना सेशंस सीड करें + recall साबित करें +agentmemory connect claude-code # अपना एजेंट जोड़ें (अन्य: codex, cursor, gemini-cli, ...) +``` + +या `npx` के माध्यम से (इंस्टॉल की ज़रूरत नहीं): + +```bash +npx @agentmemory/agentmemory +``` + +ध्यान दें — npx प्रति-वर्ज़न कैश करता है। अगर बेयर `npx @agentmemory/agentmemory` कोई पुराना रिलीज़ चला रहा है, तो नवीनतम को `npx -y @agentmemory/agentmemory@latest` से ज़बरदस्ती चलाएँ, या एक बार `rm -rf ~/.npm/_npx` से कैश साफ़ करें (macOS/Linux; Windows पर `%LOCALAPPDATA%\npm-cache\_npx` हटाएँ)। v0.9.16+ के बाद पहली npx रन आपको इनलाइन ग्लोबल इंस्टॉल करने का प्रॉम्प्ट देती है ताकि बेयर `agentmemory` कमांड हर जगह काम करे। + +पूर्ण विकल्प नीचे [क्विक स्टार्ट](#quick-start) में हैं। एजेंट-विशिष्ट कॉन्फ़िगरेशन [हर एजेंट के साथ काम करता है](#works-with-every-agent) में। + +--- + +

Works with every agent

+ +agentmemory किसी भी ऐसे एजेंट के साथ काम करता है जो hooks, MCP, या REST API सपोर्ट करता है। सभी एजेंट एक ही मेमोरी सर्वर साझा करते हैं। + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+native plugin + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+native plugin + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+native plugin + MCP +
+Hermes
+Hermes
+native plugin + MCP +
+pi
+pi
+native plugin + MCP +
+OpenHuman
+OpenHuman
+native Memory trait बैकएंड +
+Cursor
+Cursor
+MCP सर्वर +
+Gemini CLI
+Gemini CLI
+MCP सर्वर +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+MCP सर्वर +
+Goose
+Goose
+MCP सर्वर +
+Kilo Code
+Kilo Code
+MCP सर्वर +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP सर्वर +
+Windsurf
+Windsurf
+MCP सर्वर +
+Roo Code
+Roo Code
+MCP सर्वर +
+ +

+ MCP या HTTP बोलने वाले किसी भी एजेंट के साथ काम करता है। एक सर्वर, सभी के बीच साझा मेमोरी। +

+ +--- + +आप हर सेशन में वही आर्किटेक्चर समझाते हैं। आप वही bugs बार-बार खोजते हैं। आप वही प्राथमिकताएँ फिर से सिखाते हैं। बिल्ट-इन मेमोरी (CLAUDE.md, .cursorrules) 200 लाइनों पर सीमित है और पुरानी हो जाती है। agentmemory इसे ठीक करता है। यह चुपचाप आपके एजेंट की गतिविधियाँ कैप्चर करता है, उन्हें खोज योग्य मेमोरी में संकुचित करता है, और अगला सेशन शुरू होने पर सही संदर्भ इंजेक्ट करता है। एक कमांड। सभी एजेंट्स के साथ काम करता है। + +**क्या बदलता है:** सेशन 1 में आप JWT auth सेटअप करते हैं। सेशन 2 में आप rate limiting माँगते हैं। एजेंट को पहले से पता है कि आपकी auth `src/middleware/auth.ts` में jose middleware का उपयोग करती है, आपके tests token validation को कवर करते हैं, और आपने Edge compatibility के लिए jsonwebtoken के बजाय jose चुना है। फिर से समझाना नहीं। कॉपी-पेस्ट नहीं। एजेंट बस *जानता है*। + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0 में नया** — लैंडिंग साइट [agent-memory.dev](https://agent-memory.dev), फाइलसिस्टम कनेक्टर (`@agentmemory/fs-watcher`), स्टैंडअलोन MCP अब चल रहे सर्वर को प्रॉक्सी करता है ताकि hooks और व्यूअर सहमत हों, हर delete path में audit policy कोडिफाई की गई, small Node प्रक्रियाओं पर health अब `memory_critical` फ़्लैग नहीं करता। पूरे नोट्स [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18) में। + +--- + +

Benchmarks

+ + + + + + +
+ +### Retrieval सटीकता + +**coding-agent-life-v1** (in-house corpus, sandbox-reproducible) + +| Adapter | P@5 | R@5 | Top-5 hit rate | p50 latency | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep baseline | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100% top-5 hit rate। समान input पर grep baseline से **2.2×** बेहतर precision। पूरी प्रकार-वार breakdown: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md)। + +**LongMemEval-S** (ICLR 2025, 500 प्रश्न) + +| System | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only fallback | 86.2% | 94.6% | 71.5% | + + + +### Token बचत + +| दृष्टिकोण | Tokens/yr | Cost/yr | +|---|---|---| +| पूरा context paste करें | 19.5M+ | असंभव (window से अधिक) | +| LLM-summarized | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + local embeddings | ~170K | **$0** | + +
+ +> Embedding मॉडल: `all-MiniLM-L6-v2` (local, free, कोई API key नहीं)। पूरी रिपोर्ट्स: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md)। प्रतिस्पर्धी तुलना: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory बनाम mem0, Letta, Khoj, claude-mem, Hippo। + +**स्थानीय रूप से reproduce करें:** [`eval/README.md`](../eval/README.md) — LongMemEval `_s` (public 500-Q) + `coding-agent-life-v1` (in-house 15-session corpus) के लिए adapter-pluggable harness। Grep / vector / agentmemory adapters साथ-साथ scored होते हैं, NDJSON output, प्रकाशित scorecards [`docs/benchmarks/`](../docs/benchmarks/) में जाते हैं। + +**[codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything), और [Graphify](https://github.com/safishamsi/graphify) के साथ जोड़ता है।** Code-graph indexing, multi-agent build pipelines, और docs / PDFs / images / videos में व्यापक knowledge graphs। agentmemory काम याद रखता है; ये तीन प्रोजेक्ट्स context layer के बाकी हिस्से को रोशन करते हैं। Recipes + question-routing table: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md)। + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)बिल्ट-इन (CLAUDE.md)
प्रकारMemory engine + MCP सर्वरMemory layer APIपूर्ण agent runtimeStatic फाइल
Retrieval R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
स्वचालित कैप्चर12 hooks (शून्य मैनुअल प्रयास)मैनुअल add() कॉलएजेंट self-editsमैनुअल editing
खोजBM25 + Vector + Graph (RRF fusion)Vector + GraphVector (archival)सब कुछ context में लोड करता है
Multi-agentMCP + REST + leases + signalsAPI (कोई coordination नहीं)केवल Letta runtime मेंप्रति-एजेंट फाइलें
Framework lock-inकोई नहीं (कोई भी MCP क्लाइंट)कोई नहींउच्च (Letta का उपयोग आवश्यक)प्रति-एजेंट format
बाहरी निर्भरताएँकोई नहीं (SQLite + iii-engine)Qdrant / pgvectorPostgres + vector DBकोई नहीं
Memory lifecycle4-tier consolidation + decay + auto-forgetPassive extractionAgent-managedमैनुअल pruning
Token दक्षता~1,900 tokens/session ($10/yr)integration पर निर्भरCore memory context में240 observations पर 22K+ tokens
Real-time व्यूअरहाँ (port 3113)Cloud dashboardCloud dashboardनहीं
Self-hostedहाँ (default)OptionalOptionalहाँ
+ +--- + +

Quick Start

+ +संगतता: यह रिलीज़ stable `iii-sdk` `^0.11.0` और iii-engine v0.11.x को टार्गेट करता है। + +### 30 सेकंड में आज़माएँ + +```bash +# Terminal 1: सर्वर शुरू करें +npx @agentmemory/agentmemory + +# Terminal 2: नमूना डेटा सीड करें और recall को कार्य में देखें +npx @agentmemory/agentmemory demo +``` + +`demo` 3 यथार्थवादी सेशंस सीड करता है (JWT auth, N+1 query fix, rate limiting) और उन पर semantic searches चलाता है। जब आप "database performance optimization" खोजते हैं तो आप देखेंगे कि यह "N+1 query fix" ढूँढ़ लेता है — keyword matching ऐसा नहीं कर सकती। + +मेमोरी को लाइव बनते हुए देखने के लिए `http://localhost:3113` खोलें। + +### अनुशंसित: globally इंस्टॉल करें + +`npx` per-version कैश करता है। अगर आपने पिछले हफ्ते `npx @agentmemory/agentmemory@0.9.14` चलाया था, तो एक बेयर `npx @agentmemory/agentmemory` `~/.npm/_npx/` से stale 0.9.14 दे सकता है, न कि नवीनतम रिलीज़। एक बार इंस्टॉल करें और बेयर `agentmemory` कमांड हर जगह काम करता है: + +```bash +npm install -g @agentmemory/agentmemory +# अगर macOS/Linux सिस्टम Node इंस्टॉल पर EACCES त्रुटि आती है, इसके साथ फिर से चलाएँ: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # सर्वर शुरू करें (npx form के समान) +agentmemory stop # बंद करें +agentmemory remove # हमने जो भी बनाया उसे अनइंस्टॉल करें +agentmemory connect claude-code # एक एजेंट जोड़ें +agentmemory doctor # interactive diagnostics + fix prompts +``` + +v0.9.16 के बाद से, पहली npx रन आपको inline globally इंस्टॉल करने का प्रॉम्प्ट देती है — एक बार `Y` जवाब दें और तैयार। अगर आप skip करते हैं, तो ताज़ा fetch के लिए इनमें से किसी पर भी fallback करें: + +```bash +npx -y @agentmemory/agentmemory@latest # npm से नवीनतम को force करता है (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # केवल macOS/Linux (POSIX shell) +``` + +Windows / PowerShell पर, समतुल्य cache clear है `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — ऊपर का `npx -y ...@latest` form cross-platform विकल्प है। + +### Session Replay + +agentmemory द्वारा रिकॉर्ड किया गया हर सेशन replayable है। व्यूअर खोलें, **Replay** टैब चुनें, और timeline scrub करें: prompts, tool calls, tool results, और responses अलग events के रूप में render होते हैं, play/pause, speed control (0.5×–4×), और keyboard shortcuts (space toggle के लिए, arrows step के लिए) के साथ। + +क्या आपके पास पहले से पुरानी Claude Code JSONL transcripts हैं जिन्हें आप लाना चाहते हैं? + +```bash +# डिफ़ॉल्ट ~/.claude/projects के तहत सब कुछ import करें +npx @agentmemory/agentmemory import-jsonl + +# या एक अकेली फाइल import करें +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Imported सेशंस native ones के साथ Replay picker में दिखते हैं। हुड के नीचे प्रत्येक entry `mem::replay::load`, `mem::replay::sessions`, और `mem::replay::import-jsonl` iii functions के माध्यम से रूट होती है — कोई side-channel servers नहीं। + +### Upgrade / Maintenance + +जब आप जानबूझकर अपने local runtime को update करना चाहते हैं तो maintenance command का उपयोग करें: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +चेतावनी: यह कमांड वर्तमान workspace/runtime को mutate करता है। यह JavaScript निर्भरताएँ update कर सकता है और pinned Docker image `iiidev/iii:0.11.2` खींच सकता है। यह कभी भी unpinned या नया iii engine install नहीं करता। + +Implementation विवरण `src/cli.ts` में हैं (`src/cli.ts:544-595` क्षेत्र के आसपास `runUpgrade` देखें)। + +### Claude Code (एक block, paste करें) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Plugin install के बिना Claude Code (MCP-standalone path) + +अगर आप `/plugin install` का उपयोग करने के बजाय `~/.claude.json` के माध्यम से सीधे agentmemory का MCP सर्वर कनेक्ट करते हैं, तो Claude Code कभी भी `${CLAUDE_PLUGIN_ROOT}` resolve नहीं करता और आपको hook scripts को `~/.claude/settings.json` में absolute paths पर point करना पड़ता है। ये paths आमतौर पर agentmemory version को embed करते हैं (जैसे `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), इसलिए अगला upgrade चुपचाप हर hook को तोड़ देता है। + +Workaround: + +```bash +agentmemory connect claude-code --with-hooks +``` + +यह वही hook commands को `~/.claude/settings.json` में merge करता है, current installed `@agentmemory/agentmemory` package की bundled `plugin/` directory पर resolve किए गए absolute paths के साथ। agentmemory upgrade करने के बाद paths refresh करने के लिए कमांड फिर से चलाएँ। उसी फाइल में user entries संरक्षित होती हैं; केवल पिछली agentmemory entries replace होती हैं। `/plugin install` path अनुशंसित approach बनी रहती है। +Remote या protected deployments के लिए, Claude Code को `AGENTMEMORY_URL` और `AGENTMEMORY_SECRET` set के साथ launch करें। Plugin दोनों values को इसके bundled MCP सर्वर के माध्यम से pass करता है; जब `AGENTMEMORY_URL` खाली होता है, तो MCP shim `http://localhost:3111` का उपयोग करता है। + +### Codex CLI (Codex plugin platform) + +```bash +# 1. एक अलग terminal में memory सर्वर शुरू करें +npx @agentmemory/agentmemory + +# 2. agentmemory marketplace register करें और plugin install करें +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex plugin उसी `plugin/` directory से ship होता है जिससे Claude Code plugin। यह register करता है: + +- `@agentmemory/mcp` MCP सर्वर के रूप में (जब `AGENTMEMORY_URL` चल रहे agentmemory सर्वर पर point करता है, तो सभी 51 tools proxy करता है; कोई पहुँच योग्य सर्वर न होने पर locally 7 tools पर fallback करता है) +- 6 lifecycle hooks: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skills: `/recall`, `/remember`, `/session-history`, `/forget` + +Codex का hook engine hook subprocesses में `CLAUDE_PLUGIN_ROOT` inject करता है ([`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs) के अनुसार), इसलिए वही hook scripts duplication के बिना दोनों hosts में काम करते हैं। Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure events केवल Claude-Code-only हैं और Codex के लिए register नहीं होते। + +#### Codex Desktop: plugin hooks वर्तमान में silent हैं (workaround उपलब्ध) + +`CodexHooks` और `PluginHooks` दोनों [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs) में stable + default-enabled हैं, लेकिन Codex Desktop builds वर्तमान में plugin-local `hooks.json` dispatch नहीं करते ([openai/codex#16430](https://github.com/openai/codex/issues/16430))। MCP tools अभी भी काम करते हैं; केवल lifecycle observations छूट जाते हैं। + +जब तक upstream fix land नहीं करता, वही hook commands को global `~/.codex/hooks.json` में mirror करें: + +```bash +agentmemory connect codex --with-hooks +``` + +यह `~/.codex/hooks.json` में एक idempotent block जोड़ता है जो bundled scripts के absolute paths को reference करता है (user-scope पर `${CLAUDE_PLUGIN_ROOT}` expansion की ज़रूरत नहीं)। agentmemory upgrade के बाद paths refresh करने के लिए वही कमांड फिर से चलाएँ। उसी फाइल में user entries संरक्षित रहती हैं; केवल पिछली agentmemory entries replace होती हैं। + +
+OpenClaw (यह prompt paste करें) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +पूर्ण गाइड: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (यह prompt paste करें) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +पूर्ण गाइड: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### अन्य एजेंट्स + +मेमोरी सर्वर शुरू करें: `npx @agentmemory/agentmemory` + +agentmemory entry `mcpServers` shape का उपयोग करने वाले हर host में **वही MCP server block** है (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**इस entry को host की config file में मौजूदा `mcpServers` object में merge करें** — file को replace न करें। अगर फाइल में पहले से अन्य servers हैं, तो `mcpServers` के अंदर एक और key के रूप में `agentmemory` को उनके बगल में जोड़ें। अगर `mcpServers` पूरी तरह से missing है, तो block को `{ "mcpServers": { ... } }` के अंदर paste करें। `${VAR}` placeholders MCP-server launch पर shell से `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` inherit करते हैं — unset variables empty strings pass करते हैं और shim `http://localhost:3111` पर fallback होता है। एक wired entry local और remote (k8s / reverse-proxied) दोनों deployments को कवर करती है। + +| एजेंट | Config फाइल | नोट्स | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | `mcpServers` में merge करें। Website पर one-click deeplink भी उपलब्ध। | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | `mcpServers` में merge करें। Edit के बाद Claude Desktop restart करें। | +| **Cline / Roo Code / Kilo Code** | Cline MCP settings (Settings UI → MCP Servers → Edit) | वही `mcpServers` block। | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | वही `mcpServers` block। | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (auto-merges)। | +| **OpenClaw** | OpenClaw MCP config | वही `mcpServers` block, या गहरे [memory plugin](../integrations/openclaw/) का उपयोग करें। | +| **Codex CLI (केवल MCP)** | `.codex/config.toml` | TOML shape: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, या manually `[mcp_servers.agentmemory]` जोड़ें। | +| **Codex CLI (पूर्ण plugin)** | Codex plugin marketplace | `codex plugin marketplace add rohitg00/agentmemory` फिर `codex plugin add agentmemory@agentmemory`। MCP + 6 lifecycle hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skills register करता है। Codex Desktop पर, [openai/codex#16430](https://github.com/openai/codex/issues/16430) land होने तक `agentmemory connect codex --with-hooks` भी चलाएँ — plugin hooks वर्तमान में वहाँ silent हैं। | +| **OpenCode (केवल MCP)** | `opencode.json` | अलग shape — top-level `mcp` key, command array के रूप में: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`। | +| **OpenCode (पूर्ण plugin)** | `plugin/opencode/` | Session lifecycle, messages, tools, errors को कवर करने वाले 22 auto-capture hooks। दो slash commands (`/recall`, `/remember`)। `plugin/opencode/` को अपने OpenCode workspace में copy करें और plugin entry को `opencode.json` में जोड़ें। पूरी hook table + gap analysis के लिए [`plugin/opencode/README.md`](../plugin/opencode/README.md) देखें। | +| **pi** | `~/.pi/agent/extensions/agentmemory` | [`integrations/pi`](../integrations/pi/) copy करें और pi restart करें। | +| **Hermes Agent** | `~/.hermes/config.yaml` | गहरे [memory provider plugin](../integrations/hermes/) का उपयोग `memory.provider: agentmemory` के साथ करें। | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` standard `mcpServers` block लिखता है। Hook payload Claude Code के साथ field-compatible है, इसलिए मौजूदा 12-hook scripts modification के बिना काम करते हैं — उन्हें उसी `settings.json` के `hooks` section के माध्यम से जोड़ें। | +| **Antigravity** (Gemini CLI को replace करता है) | `mcp_config.json` (Antigravity की User dir में) | `agentmemory connect antigravity` standard `mcpServers` block लिखता है। macOS: `~/Library/Application Support/Antigravity/User/`। Linux: `~/.config/Antigravity/User/`। 2026-06-18 Gemini CLI sunset के बाद उपयोग करें। | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` user-level config लिखता है। Workspace overrides आपके code के बगल में `.kiro/settings/mcp.json` में जाते हैं। | +| **Goose** | Goose MCP settings UI | वही `mcpServers` block। | +| **Aider** | n/a | REST API से सीधे बात करें: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`। | +| **कोई भी एजेंट (32+)** | n/a | `npx skillkit install agentmemory` host को auto-detect करता है और merge करता है। | + +**Sandboxed MCP क्लाइंट्स** (Flatpak / Snap / प्रतिबंधात्मक containers) जो host के `localhost` तक नहीं पहुँच सकते: `env` block में `"AGENTMEMORY_FORCE_PROXY": "1"` भी set करें, और `AGENTMEMORY_URL` को एक ऐसे route पर point करें जिस तक sandbox वास्तव में पहुँच सकता है (जैसे आपका LAN IP)। + +### Programmatic access (Python / Rust / Node) + +agentmemory अपने core operations को iii functions के रूप में register करता है (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`)। iii SDK वाली कोई भी भाषा उन्हें `ws://localhost:49134` पर सीधे call कर सकती है — प्रति भाषा अलग REST क्लाइंट नहीं। + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +कार्यशील उदाहरण: [`examples/python/`](../examples/python/) (quickstart + observation/recall flow)। iii runtime के बिना hosts के लिए REST `:3111` पर उपलब्ध रहता है। + +### Source से + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +यह agentmemory को local `iii-engine` के साथ शुरू करता है अगर `iii` पहले से installed है, या Docker उपलब्ध होने पर Docker Compose पर fallback करता है। REST, streams, और व्यूअर default रूप से `127.0.0.1` से bind करते हैं। + +`iii-engine` मैनुअली इंस्टॉल करें। **agentmemory वर्तमान में `iii-engine` को `v0.11.2` पर pin करता है** — `v0.11.6` एक नया sandbox-everything-via-`iii worker add` model introduce करता है जिसके लिए agentmemory को अभी refactor नहीं किया गया है। Refactor land होने के बाद pin हटा दी जाती है। अगर आपने sandbox model पर मैनुअली migrate किया है तो `AGENTMEMORY_III_VERSION=` से override करें। + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** `aarch64-apple-darwin` को `x86_64-apple-darwin` के साथ बदलें +- **Linux x64:** `x86_64-unknown-linux-gnu` के साथ बदलें +- **Linux arm64:** `aarch64-unknown-linux-gnu` के साथ बदलें +- **Windows:** [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2) से `iii-x86_64-pc-windows-msvc.zip` download करें, `iii.exe` extract करें, PATH में जोड़ें + +या Docker का उपयोग करें (bundled `docker-compose.yml` `iiidev/iii:0.11.2` खींचता है)। पूर्ण docs: [iii.dev/docs](https://iii.dev/docs)। + +### Windows + +agentmemory Windows 10/11 पर चलता है, लेकिन केवल Node.js package पर्याप्त नहीं है — आपको एक background process के रूप में `iii-engine` runtime (एक अलग native binary) भी चाहिए। आधिकारिक upstream installer एक `sh` script है और आज कोई PowerShell installer या scoop/winget package नहीं है, इसलिए Windows users के पास दो रास्ते हैं: + +**विकल्प A — Prebuilt Windows binary (अनुशंसित):** + +```powershell +# 1. अपने browser में https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 खोलें +# (हम v0.11.2 पर pin करते हैं जब तक agentmemory नए sandbox +# model के लिए refactor नहीं हो जाता जो engine v0.11.6+ की आवश्यकता है) +# 2. iii-x86_64-pc-windows-msvc.zip download करें +# (या ARM machine पर हैं तो iii-aarch64-pc-windows-msvc.zip) +# 3. PATH पर कहीं iii.exe extract करें, या यहाँ रखें: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory उस location को automatically check करता है) +# 4. Verify करें: +iii --version +# Print होना चाहिए: 0.11.2 + +# 5. फिर agentmemory को सामान्य की तरह चलाएँ: +npx -y @agentmemory/agentmemory +``` + +**विकल्प B — Docker Desktop:** + +```powershell +# 1. Windows के लिए Docker Desktop install करें +# 2. Docker Desktop शुरू करें और सुनिश्चित करें कि engine चल रहा है +# 3. agentmemory चलाएँ — यह bundled compose file को auto-start करेगा: +npx -y @agentmemory/agentmemory +``` + +**विकल्प C — केवल standalone MCP (कोई engine नहीं):** अगर आपको केवल अपने agent के लिए MCP tools चाहिए और REST API, व्यूअर, या cron jobs की ज़रूरत नहीं है, तो engine को पूरी तरह से skip करें: + +```powershell +npx -y @agentmemory/agentmemory mcp +# या shim package के माध्यम से: +npx -y @agentmemory/mcp +``` + +**Windows के लिए diagnostics:** अगर `npx @agentmemory/agentmemory` fail करता है, तो वास्तविक engine stderr देखने के लिए `--verbose` के साथ फिर से चलाएँ। सामान्य failure modes: + +| लक्षण | समाधान | +|---|---| +| `iii-engine process started` फिर `did not become ready within 15s` | Engine startup पर crashed — `--verbose` के साथ फिर से चलाएँ, stderr check करें | +| `Could not start iii-engine` | न तो `iii.exe` न ही Docker installed है। ऊपर विकल्प A या B देखें | +| Port conflict | `netstat -ano \| findstr :3111` से देखें कि क्या bind है, फिर उसे kill करें या `--port ` का उपयोग करें | +| Docker installed होने पर भी Docker fallback skip हो रहा है | सुनिश्चित करें कि Docker Desktop वास्तव में चल रहा है (system tray icon) | + +> नोट: iii **engine** एक prebuilt binary है, cargo crate नहीं — इसे `cargo install` से install करने की कोशिश न करें। (iii **SDKs** crates.io, npm, और PyPI पर publish हैं, लेकिन agentmemory को उनकी ज़रूरत नहीं है।) समर्थित engine install methods, सभी v0.11.2 पर pinned: ऊपर वाला prebuilt v0.11.2 binary, version pin **के साथ** upstream `sh` install script `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux), और Docker image `iiidev/iii:0.11.2`। केवल `install.sh | sh` **latest** engine install करता है, जिसे agentmemory support नहीं करता — हमेशा `VERSION=0.11.2` पास करें। सबसे आसान: बस `npx @agentmemory/agentmemory` चलाएँ, जो pinned engine को आपके लिए `~/.agentmemory/bin` में ले आता है। + +--- + +

Deploy

+ +Managed hosts के लिए one-click templates। प्रत्येक एक self-contained +Dockerfile ship करता है जो npm से `@agentmemory/agentmemory` खींचता है +और आधिकारिक `iiidev/iii` Docker Hub image से iii engine binary को +copy करता है — pre-built agentmemory image की आवश्यकता नहीं। Persistent +storage `/data` पर mount होती है; first-boot entrypoint npm-bundled +iii config (जो `127.0.0.1` से bind करती है) को एक deploy-tuned config +से overwrite करता है जो `0.0.0.0` से bind करती है और absolute `/data` +paths का उपयोग करती है, HMAC secret generate करती है, फिर agentmemory +CLI को exec करने से पहले `gosu` के माध्यम से privileges को `root` से +`node` पर drop करती है। + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render का one-click deploy button repository root पर `render.yaml` की आवश्यकता रखता है, +जिसे हम जानबूझकर साफ़ रखते हैं। In-repo blueprint पर manually point करने के लिए +[`deploy/render/`](../deploy/render/README.md) में documented Render Blueprint flow का उपयोग करें। + +पूर्ण setup विवरण (HMAC capture, viewer SSH tunnel, +rotation, backup, cost floors) [`deploy/`](../deploy/README.md) में रहते हैं: + +- [`deploy/fly`](../deploy/fly/README.md) — `auto_stop_machines = "stop"` के साथ + single machine; सबसे सस्ता idle। +- [`deploy/railway`](../deploy/railway/README.md) — Hobby plan flat fee, + dashboard में volume। +- [`deploy/render`](../deploy/render/README.md) — Blueprint flow, + paid plans पर automatic disk snapshots। +- [`deploy/coolify`](../deploy/coolify/README.md) — अपने स्वयं के VPS पर + [Coolify](https://coolify.io/self-hosted) के माध्यम से self-hosted; वही Docker + Compose stack, आप host और data के मालिक हैं। + +केवल port `3111` publish किया जाता है। `3113` पर viewer container के अंदर +loopback से bound रहता है — हर template का README उस तक पहुँचने के लिए +SSH-tunnel pattern को document करता है। + +--- + +

Why agentmemory

+ +हर coding agent सेशन समाप्त होने पर सब कुछ भूल जाता है। आप हर सेशन के पहले 5 मिनट अपने stack को फिर से समझाने में बर्बाद करते हैं। agentmemory पृष्ठभूमि में चलता है और इसे पूरी तरह से समाप्त कर देता है। + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### बिल्ट-इन agent memory से तुलना + +हर AI coding agent बिल्ट-इन memory के साथ ship होता है — Claude Code में `MEMORY.md` है, Cursor में notepads हैं, Cline में memory bank है। ये sticky notes की तरह काम करते हैं। agentmemory उन sticky notes के पीछे का searchable database है। + +| | बिल्ट-इन (CLAUDE.md) | agentmemory | +|---|---|---| +| Scale | 200-line cap | असीमित | +| खोज | सब कुछ context में load करता है | BM25 + vector + graph (केवल top-K) | +| Token cost | 240 observations पर 22K+ | ~1,900 tokens (92% कम) | +| Cross-agent | प्रति-agent फाइलें | MCP + REST (कोई भी agent) | +| Coordination | कोई नहीं | Leases, signals, actions, routines | +| Observability | फाइलें मैनुअल पढ़ें | :3113 पर real-time viewer | + +--- + +

How It Works

+ +### Memory Pipeline + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4-Tier Memory Consolidation + +मानव मस्तिष्क memory को कैसे process करता है उससे प्रेरित — sleep consolidation से बहुत अलग नहीं। + +| Tier | क्या | Analogy | +|------|------|---------| +| **Working** | Tool use से raw observations | Short-term memory | +| **Episodic** | संकुचित session summaries | "क्या हुआ" | +| **Semantic** | निकाले गए facts और patterns | "मैं क्या जानता हूँ" | +| **Procedural** | Workflows और decision patterns | "कैसे करें" | + +Memories समय के साथ decay होती हैं (Ebbinghaus curve)। बार-बार access की जाने वाली memories मज़बूत होती हैं। पुरानी memories auto-evict होती हैं। Contradictions detect और resolve होती हैं। + +### क्या Capture होता है + +| Hook | Captures | +|------|----------| +| `SessionStart` | Project path, session ID | +| `UserPromptSubmit` | User prompts (privacy-filtered) | +| `PreToolUse` | File access patterns + enriched context | +| `PostToolUse` | Tool name, input, output | +| `PostToolUseFailure` | Error context | +| `PreCompact` | Compaction से पहले memory को re-inject करता है | +| `SubagentStart/Stop` | Sub-agent lifecycle | +| `Stop` | End-of-session summary | +| `SessionEnd` | Session complete marker | + +### मुख्य क्षमताएँ + +| क्षमता | विवरण | +|---|---| +| **Automatic capture** | हर tool use hooks के माध्यम से record होता है — शून्य manual effort | +| **Semantic search** | RRF fusion के साथ BM25 + vector + knowledge graph | +| **Memory evolution** | Versioning, supersession, relationship graphs | +| **Auto-forgetting** | TTL expiry, contradiction detection, importance eviction | +| **Privacy first** | API keys, secrets, `` tags storage से पहले strip होते हैं | +| **Self-healing** | Circuit breaker, provider fallback chain, health monitoring | +| **Claude bridge** | MEMORY.md के साथ bi-directional sync | +| **Knowledge graph** | Entity extraction + BFS traversal | +| **Team memory** | Team members के बीच namespaced shared + private | +| **Citation provenance** | किसी भी memory को source observations तक trace करें | +| **Git snapshots** | Memory state को version, rollback, और diff करें | + +--- + + + +तीन signals को combine करने वाला triple-stream retrieval: + +| Stream | यह क्या करता है | कब | +|---|---|---| +| **BM25** | Synonym expansion के साथ stemmed keyword matching | हमेशा on | +| **Vector** | Dense embeddings पर cosine similarity | Embedding provider configured | +| **Graph** | Entity matching के माध्यम से knowledge graph traversal | Query में entities detected | + +Reciprocal Rank Fusion (RRF, k=60) के साथ fuse होता है और session-diversified होता है (प्रति session max 3 results)। + +BM25 box से बाहर ही Greek, Cyrillic, Hebrew, Arabic, और accented Latin को tokenize करता है। Chinese / Japanese / Korean memories के लिए, CJK runs को word-level tokens में split करने के लिए optional segmenters install करें (`npm install @node-rs/jieba tiny-segmenter`); उनके बिना, agentmemory soft-fall back होकर whole-run tokenization पर जाता है और stderr पर एक-बार hint print करता है। + +### Embedding providers + +agentmemory आपके provider को auto-detect करता है। सर्वोत्तम परिणामों के लिए, local embeddings install करें (free): + +```bash +npm install @xenova/transformers +``` + +| Provider | Model | Cost | नोट्स | +|---|---|---|---| +| **Local (अनुशंसित)** | `all-MiniLM-L6-v2` | Free | Offline, BM25-only पर +8pp recall | +| Gemini | `gemini-embedding-001` | Free tier | 100+ भाषाएँ, 768/1536/3072 dims (MRL), 2048-token input। `text-embedding-004` को replace करता है ([deprecated, 14 जनवरी 2026 को shutdown](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | उच्चतम quality | +| Voyage AI | `voyage-code-3` | Paid | Code के लिए optimized | +| Cohere | `embed-english-v3.0` | Free trial | General purpose | +| OpenRouter | कोई भी model | भिन्न | Multi-model proxy | + +--- + +

MCP Server

+ +53 tools, 6 resources, 3 prompts, और 4 skills — किसी भी agent के लिए सबसे व्यापक MCP memory toolkit। + +> **MCP shim बनाम full server:** published `@agentmemory/mcp` package एक thin shim है। यह full 51-tool surface को **केवल तभी expose करता है जब यह `AGENTMEMORY_URL` के माध्यम से चल रहे agentmemory server तक पहुँच सके** (proxy mode)। कोई पहुँच योग्य server न होने पर, shim 7-tool local set (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`) पर fallback करता है। `AGENTMEMORY_TOOLS=core|all` env var एक *server-side* flag है — shim के `env` block में set करने का कोई असर नहीं। अगर आप Cursor / OpenCode / Gemini CLI में केवल 7 tools देखते हैं, तो `npx @agentmemory/agentmemory` (या Docker stack) शुरू करें और `AGENTMEMORY_URL=http://localhost:3111` set करें। + +### 51 Tools + +
+Core tools (हमेशा उपलब्ध) + +| Tool | विवरण | +|------|-------------| +| `memory_recall` | पिछले observations खोजें | +| `memory_compress_file` | Structure preserve करते हुए markdown files compress करें | +| `memory_save` | एक insight, decision, या pattern save करें | +| `memory_patterns` | Recurring patterns detect करें | +| `memory_smart_search` | Hybrid semantic + keyword search | +| `memory_file_history` | विशिष्ट files के बारे में पिछले observations | +| `memory_sessions` | Recent sessions list करें | +| `memory_timeline` | Chronological observations | +| `memory_profile` | Project profile (concepts, files, patterns) | +| `memory_export` | सभी memory data export करें | +| `memory_relations` | Relationship graph query करें | + +
+ +
+Extended tools (कुल 51 — AGENTMEMORY_TOOLS=all set करें) + +| Tool | विवरण | +|------|-------------| +| `memory_patterns` | Recurring patterns detect करें | +| `memory_timeline` | Chronological observations | +| `memory_relations` | Relationship graph query करें | +| `memory_graph_query` | Knowledge graph traversal | +| `memory_consolidate` | 4-tier consolidation चलाएँ | +| `memory_claude_bridge_sync` | MEMORY.md के साथ sync करें | +| `memory_team_share` | Team members के साथ share करें | +| `memory_team_feed` | हाल ही में shared items | +| `memory_audit` | Operations का audit trail | +| `memory_governance_delete` | Audit trail के साथ delete करें | +| `memory_snapshot_create` | Git-versioned snapshot | +| `memory_action_create` | Dependencies के साथ work items create करें | +| `memory_action_update` | Action status update करें | +| `memory_frontier` | Priority द्वारा ranked unblocked actions | +| `memory_next` | Single most important next action | +| `memory_lease` | Exclusive action leases (multi-agent) | +| `memory_routine_run` | Workflow routines instantiate करें | +| `memory_signal_send` | Inter-agent messaging | +| `memory_signal_read` | Receipts के साथ messages पढ़ें | +| `memory_checkpoint` | External condition gates | +| `memory_mesh_sync` | Instances के बीच P2P sync | +| `memory_sentinel_create` | Event-driven watchers | +| `memory_sentinel_trigger` | Sentinels externally fire करें | +| `memory_sketch_create` | Ephemeral action graphs | +| `memory_sketch_promote` | Permanent पर promote करें | +| `memory_crystallize` | Action chains compact करें | +| `memory_diagnose` | Health checks | +| `memory_heal` | Stuck state को auto-fix करें | +| `memory_facet_tag` | Dimension:value tags | +| `memory_facet_query` | Facet tags द्वारा query करें | +| `memory_verify` | Provenance trace करें | + +
+ +### 6 Resources · 3 Prompts · 4 Skills + +| प्रकार | नाम | विवरण | +|------|------|-------------| +| Resource | `agentmemory://status` | Health, session count, memory count | +| Resource | `agentmemory://project/{name}/profile` | Per-project intelligence | +| Resource | `agentmemory://memories/latest` | नवीनतम 10 active memories | +| Resource | `agentmemory://graph/stats` | Knowledge graph statistics | +| Prompt | `recall_context` | Search + context messages return करें | +| Prompt | `session_handoff` | Agents के बीच handoff data | +| Prompt | `detect_patterns` | Recurring patterns analyze करें | +| Skill | `/recall` | Memory खोजें | +| Skill | `/remember` | Long-term memory में save करें | +| Skill | `/session-history` | हाल के session summaries | +| Skill | `/forget` | Observations/sessions delete करें | + +### Standalone MCP + +Full server के बिना चलाएँ — किसी भी MCP client के लिए। इनमें से कोई भी काम करता है: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (हमेशा उपलब्ध) +npx -y @agentmemory/mcp # shim package alias +``` + +या अपने agent की MCP config में जोड़ें: + +अधिकांश agents (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +`agentmemory` entry को file को replace करने के बजाय अपने host के मौजूदा `mcpServers` object में merge करें। होस्ट के `localhost` तक नहीं पहुँच सकने वाले sandboxed clients के लिए, env block में `"AGENTMEMORY_FORCE_PROXY": "1"` जोड़ें और `AGENTMEMORY_URL` को एक ऐसे route पर set करें जिस तक sandbox पहुँच सकता है। + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Plugin file को repo से copy करें: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +Port `3113` पर auto-start होता है। Live observation stream, session explorer, memory browser, knowledge graph visualization, और health dashboard। + +```bash +open http://localhost:3113 +``` + +व्यूअर server default रूप से `127.0.0.1` से bind होता है। REST-served `/agentmemory/viewer` endpoint सामान्य `AGENTMEMORY_SECRET` bearer-token नियमों का पालन करता है। CSP headers per-response script nonce का उपयोग करते हैं और inline handler attributes को disable करते हैं (`script-src-attr 'none'`)। + +--- + +

iii Console

+ +`:3113` पर viewer दिखाता है कि आपके agent ने क्या **याद रखा**। [iii console](https://iii.dev/docs/console) दिखाता है कि आपके agent ने क्या **किया** — हर memory op एक OpenTelemetry trace के रूप में, हर KV entry editable, हर function invocable, हर stream tappable। एक ही memory पर दो windows: एक product-shaped, एक engine-shaped। + +`memory_smart_search` को fire होते देखें और BM25 scan → embedding lookup → RRF fusion → reranker को waterfall के रूप में देखें। KV browser में stuck consolidation timer को edit करें। `PostToolUse` hook को tweaked payload के साथ replay करें। WebSocket stream को pin करें और observations को live land होते देखें। + +agentmemory इसे free में ship करता है क्योंकि हर function, trigger, state scope, और stream एक iii primitive है — कुछ भी custom नहीं, instrument करने के लिए कुछ नहीं। + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers page: हर connected worker — agentmemory स्वयं सहित — PID, function count, runtime, और last-seen के साथ। +

+ +**पहले से installed।** Console `iii` के साथ ship होता है — कोई अलग installer नहीं। + +**agentmemory के साथ launch करें:** + +```bash +# agentmemory viewer port 3113 रखता है, तो console को 3114 पर चलाएँ। +# Engine REST (3111), WebSocket (3112), और bridge (49134) defaults agentmemory से match करते हैं। +iii console --port 3114 +``` + +फिर `http://localhost:3114` खोलें। Experimental architecture-graph page के लिए `--enable-flow` जोड़ें। + +केवल तभी engine endpoints override करें जब आपने उन्हें move किया हो: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Console से आप क्या कर सकते हैं:** + +| Page | इसके लिए उपयोग करें | +|------|-----------| +| **Workers** | हर connected worker और उसके live metrics देखें — agentmemory worker सहित। | +| **Functions** | agentmemory के किसी भी function को सीधे JSON payload के साथ invoke करें — client जोड़े बिना `memory.recall`, `memory.consolidate`, `graph.query` test करने के लिए उपयोगी। | +| **Triggers** | HTTP, cron, event, और state triggers replay करें — consolidation cron को manually fire करें, HTTP route retry करें, एक state change emit करें। | +| **States** | Full CRUD के साथ KV browser — sessions, memory slots, lifecycle timers, embeddings index — values को in place edit करें। | +| **Streams** | Memory writes, hook events, और observation updates के लिए live WebSocket monitor क्योंकि वे iii streams से बहते हैं। | +| **Queues** | Durable queue topics + dead-letter management। Failed embedding / compression jobs को replay या drop करें। | +| **Traces** | OpenTelemetry waterfall / flame / service-breakdown views। `trace_id` से filter करें ताकि देख सकें कि एक `memory.search` ने वास्तव में कौन से functions, DB calls, और embedding requests produce किए। | +| **Logs** | Trace/span IDs से correlated और filtered structured OTEL logs। | +| **Config** | Runtime configuration — देखें कि आपका engine किन workers, providers, और ports के साथ चल रहा है। | +| **Flow** | (Optional, `--enable-flow`) हर worker, trigger, और stream का interactive architecture graph। | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces: हर memory operation के लिए waterfall / flame / service breakdown। +

+ +**Traces पहले से on हैं:** + +`iii-config.yaml` `iii-observability` worker enabled (`exporter: memory`, `sampling_ratio: 1.0`, metrics + logs) के साथ ship होता है। कोई extra config की ज़रूरत नहीं — जैसे ही agentmemory शुरू होता है, हर memory operation एक trace span और एक structured log emit करता है जिसे console पढ़ सकता है। + +अगर आप इसके बजाय Jaeger/Honeycomb/Grafana Tempo पर export करना चाहते हैं, तो `exporter: memory` को `exporter: otlp` में बदलें और iii के observability docs के अनुसार collector endpoint set करें। + +> **ध्यान दें:** console पर कोई auth enforce नहीं है — इसे `127.0.0.1` (default) से bound रखें और इसे कभी publicly expose न करें। + +--- + +

Powered by iii

+ +agentmemory **पहले से एक चल रहा [iii](https://iii.dev) instance है**। Functions, triggers, KV state, streams, OTEL traces — यह सब iii primitives हैं। आपने Postgres, Redis, Express, pm2, या Prometheus install नहीं किया, क्योंकि iii उन्हें replace करता है। + +इसका मतलब है कि एक और कमांड agentmemory को एक पूरी नई capability के साथ extend करती है। + +### एक command के साथ agentmemory को extend करें + +```bash +iii worker add iii-pubsub # memory writes को हर connected instance पर fan out करें +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # embedding + compression jobs के लिए durable retries +iii worker add iii-observability # हर memory op पर OTEL traces (default on) +iii worker add iii-sandbox # recalled code को isolated microVM के अंदर चलाएँ +iii worker add iii-database # एक SQL-backed state adapter में swap करें +iii worker add mcp # agentmemory MCP के साथ-साथ generic MCP host +``` + +प्रत्येक `iii worker add` उसी engine में नए functions और triggers register करता है जिस पर agentmemory पहले से चल रहा है। Viewer और console उन्हें तुरंत pick करते हैं — कोई reload नहीं, कोई नया integration नहीं, कोई नया container नहीं। + +| `iii worker add` | agentmemory के ऊपर आपको क्या मिलता है | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Multi-instance memory: हर `remember` fan out होती है, हर `search` union पढ़ता है | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Scheduled lifecycle — रात की consolidation, साप्ताहिक snapshots, fixed clock पर decay | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Durable retries: failed embedding + compression jobs restart से बचते हैं, कोई lost observations नहीं | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | हर function पर OTEL traces, metrics, logs — दिन एक से `iii-config.yaml` में wired | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall` से निकला code throwaway VM के अंदर चलता है, आपके shell में नहीं | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | जब आप in-memory KV defaults से बाहर निकलते हैं तो SQL-backed state adapter | +| [`mcp`](https://workers.iii.dev/workers/mcp) | agentmemory के साथ-साथ extra MCP servers खड़े करें, वही engine share करें | + +Full registry: [workers.iii.dev](https://workers.iii.dev)। वहाँ हर worker उन्हीं primitives के माध्यम से compose करता है जिनका agentmemory उपयोग करता है — और आपके पास पहले से जो agentmemory है, वह उनमें से एक है। + +### iii क्या replace करता है + +| Traditional stack | agentmemory उपयोग करता है | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + in-memory vector index | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker supervision | +| Prometheus / Grafana | iii OTEL + health monitor | +| Custom plugin systems | `iii worker add ` | + +**118 source files · ~21,800 LOC · 950+ tests · 123 functions · 34 KV scopes** — सब कुछ तीन primitives पर। कोई `agentmemory plugin install` नहीं। Plugin system iii स्वयं है। + +--- + +

Configuration

+ +### LLM Providers + +agentmemory आपके environment से auto-detect करता है। Default रूप से, जब तक आप एक provider configure नहीं करते या Claude subscription fallback में explicitly opt in नहीं करते, कोई LLM calls नहीं की जातीं। + +| Provider | Config | नोट्स | +|----------|--------|-------| +| **No-op (default)** | कोई config की ज़रूरत नहीं | LLM-backed compress/summarize DISABLED है। Synthetic BM25 compression + recall अभी भी काम करते हैं। अगर आप पहले Claude-subscription fallback पर निर्भर थे तो नीचे `AGENTMEMORY_ALLOW_AGENT_SDK` देखें। | +| Anthropic API | `ANTHROPIC_API_KEY` | Per-token billing | +| MiniMax | `MINIMAX_API_KEY` | Anthropic-compatible | +| Gemini | `GEMINI_API_KEY` | Embeddings भी enable करता है | +| OpenRouter | `OPENROUTER_API_KEY` | कोई भी model | +| Claude subscription fallback | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | केवल opt-in। `@anthropic-ai/claude-agent-sdk` sessions spawn करता है — पहले unbounded Stop-hook recursion का कारण था तो यह अब default नहीं है। | + +### Cost-aware model selection + +Background compression हर observation पर चलता है, इसलिए model choice monthly spend को meaningfully बदलता है। Captured workload data: 635 requests / 888K tokens / 35 hours of active use, 2026-05-23 pricing पर तीन OpenRouter models पर चलाया गया। + +| Tier | Model | Input / 1M | Output / 1M | Captured 35h के लिए cost | नोट्स | +|------|-------|------------|-------------|---------------------------|-------| +| अनुशंसित | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Sonnet से ~10× कम cost पर solid compression + summarization quality। | +| अनुशंसित | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | पुराना लेकिन केवल-compression workloads के लिए अभी भी ठीक। | +| अनुशंसित | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | अगर आपके sessions भारी रूप से code-shaped हैं तो strong code reasoning। | +| Premium | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | High quality लेकिन always-on background work के लिए महंगा। | +| Premium | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Sonnet के समान tier। | +| बचें | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | Reasoning-class model; compression के लिए massive overspend। | + +जब `OPENROUTER_MODEL` premium-tier pattern से match करता है तो agentmemory एक runtime warning print करता है। जब आप informed choice कर लें तो silence करने के लिए `AGENTMEMORY_SUPPRESS_COST_WARNING=1` set करें। + +Memory work के लिए quality बनाम cost tradeoff: compression एक summarization task है जिसमें अपेक्षाकृत loose quality bars हैं (agent summary को re-read करता है, user नहीं)। DeepSeek-V4-Pro / Qwen3-Coder इस task पर Sonnet से rounding error के भीतर land होते हैं जबकि ~10× कम cost में। Premium-tier models को उन queries के लिए save करें जिन्हें आप सीधे पढ़ते हैं। + +Sources: [Sonnet 4.6 के लिए OpenRouter pricing](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek pricing नोट्स](https://api-docs.deepseek.com/quick_start/pricing/)। + +### Multi-agent memory (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +Multi-agent setups में जहाँ कई roles एक agentmemory server share करते हैं (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` हर write को उस role से tag करता है जिसने इसे किया। `AGENTMEMORY_AGENT_SCOPE` यह control करता है कि recall उस tag के द्वारा filter करता है या नहीं। + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +दो modes: + +| Mode | Writes को tag करें | Recall filter करें | कब उपयोग करें | +|------|------------|---------------|-------------| +| `shared` (default) | हाँ | नहीं | Audit trail के साथ cross-agent context। Architect देख सकता है कि developer ने क्या note किया, लेकिन हर row record करती है कि किसने कहा। | +| `isolated` | हाँ | हाँ | सख्त separation। Architect कभी developer के observations / memories / sessions नहीं देखता। | + +जब `AGENT_ID` set होता है तो क्या tagged होता है: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`। Role `api::session::start` → `mem::observe` → `mem::compress` → KV से flow करता है। + +Isolated mode में क्या filter होता है: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`। प्रत्येक endpoint per-request override के लिए `?agentId=` और env scope से पूरी तरह से opt out करने के लिए `?agentId=*` accept करता है। `/memories` AGENT_ID से पहले के memories को surface करने के लिए `?includeOrphans=true` भी accept करता है जिनकी `agentId` undefined है। + +SDK / REST layer पर per-call override: हर mutating endpoint (`/session/start`, `/remember`) request body में एक `agentId` field accept करता है जो env से जीतता है। एक server process के माध्यम से कई roles को route करने वाले runtimes के लिए उपयोगी। + +जब `AGENT_ID` unset होता है, तो memory unscoped रहती है (legacy behavior, कोई tags नहीं, कोई filters नहीं)। + +### Ports + +agentmemory + iii-engine default रूप से चार ports पर bind होते हैं। अगर एक restart `port in use` के साथ fail होता है, तो यह table बताती है कि किस process को देखना है। + +| Port | Process | उद्देश्य | Env override | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Internal streams worker (agentmemory + viewer द्वारा consumed) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Real-time viewer (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — workers यहाँ register होते हैं, OTel telemetry यहाँ से flow होती है | `III_ENGINE_URL` (full URL, default `ws://localhost:49134`) | + +Crashed run के बाद ports bound रहने पर stale-process cleanup: + +```bash +# macOS / Linux — हर port पर जो भी है उसे ढूँढ़ें और kill करें +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` graceful shutdown पर worker और engine pidfile दोनों को साफ़ रूप से reap करता है। ऊपर का manual cleanup केवल post-crash case के लिए है जहाँ कोई भी pidfile पीछे नहीं छोड़ी गई। + +### Config File + +हर shell में variables export करने के बजाय agentmemory runtime configuration को `~/.agentmemory/.env` में रखें। अगर viewer `export ANTHROPIC_API_KEY=...` जैसा setup hint दिखाता है, तो इसे `export` prefix के बिना इस file में `ANTHROPIC_API_KEY=...` के रूप में copy करें, फिर agentmemory restart करें। + +Process environment variables अभी भी काम करते हैं और file में values पर precedence लेते हैं। + +Windows पर, वही file `%USERPROFILE%\.agentmemory\.env` पर रहती है: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +API key के बजाय Claude Code Pro/Max subscription के साथ test करने के लिए, explicitly opt in करें: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +अगर आप graph या consolidation features चाहते हैं तो उसी file में उन्हें on करें: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Environment Variables + +`~/.agentmemory/.env` बनाएँ: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +Port `3111` पर 124 endpoints। REST API default रूप से `127.0.0.1` से bind होता है। `AGENTMEMORY_SECRET` set होने पर protected endpoints `Authorization: Bearer ` की आवश्यकता रखते हैं, और mesh sync endpoints दोनों peers पर `AGENTMEMORY_SECRET` की आवश्यकता रखते हैं। + +
+मुख्य endpoints + +| Method | Path | विवरण | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Health check (हमेशा public) | +| `POST` | `/agentmemory/session/start` | Session शुरू करें + context प्राप्त करें | +| `POST` | `/agentmemory/session/end` | Session समाप्त करें | +| `POST` | `/agentmemory/observe` | Observation capture करें | +| `POST` | `/agentmemory/smart-search` | Hybrid search | +| `POST` | `/agentmemory/context` | Context generate करें | +| `POST` | `/agentmemory/remember` | Long-term memory में save करें | +| `POST` | `/agentmemory/forget` | Observations delete करें | +| `POST` | `/agentmemory/enrich` | File context + memories + bugs | +| `GET` | `/agentmemory/profile` | Project profile | +| `GET` | `/agentmemory/export` | सभी data export करें | +| `POST` | `/agentmemory/import` | JSON से import करें | +| `POST` | `/agentmemory/graph/query` | Knowledge graph query | +| `POST` | `/agentmemory/team/share` | Team के साथ share करें | +| `GET` | `/agentmemory/audit` | Audit trail | + +Full endpoint list: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (running services की आवश्यकता है) +``` + +**आवश्यकताएँ:** Node.js >= 20, [iii-engine](https://iii.dev/docs) या Docker + +

License

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.ja-JP.md b/READMEs/README.ja-JP.md new file mode 100644 index 0000000..979094f --- /dev/null +++ b/READMEs/README.ja-JP.md @@ -0,0 +1,1379 @@ +

+ agentmemory — AI コーディングエージェントのための永続メモリ +

+ +

+ + コーディングエージェントがすべてを記憶します。もう説明し直す必要はありません。 + Built on iii engine +
+ Claude Code、Cursor、Gemini CLI、Codex CLI、Hermes、OpenClaw、pi、OpenCode、そしてあらゆる MCP クライアントのための永続メモリ。 +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1200 stars / 172 forks on the gist +

+ +

+ この gist は Karpathy の LLM Wiki パターンを信頼度スコア、ライフサイクル管理、ナレッジグラフ、ハイブリッド検索で拡張します。agentmemory はその実装です。 +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory demo +

+ +

+ インストール • + クイックスタート • + ベンチマーク • + 競合比較 • + エージェント • + 仕組み • + MCP • + ビューワー • + iii コンソール • + Powered by iii • + 設定 • + API +

+ +--- + +## インストール + +```bash +npm install -g @agentmemory/agentmemory # 一度のインストール — PATH 上に `agentmemory` が使えるようになる +# macOS/Linux のシステム Node で EACCES が出る場合は次を試してください: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # :3111 でメモリサーバーを起動 +agentmemory demo # サンプルセッションを投入してリコールを実証 +agentmemory connect claude-code # エージェントを接続 (他にも codex, cursor, gemini-cli, ...) +``` + +または `npx` で(インストール不要): + +```bash +npx @agentmemory/agentmemory +``` + +注意 — npx はバージョン単位でキャッシュします。素の `npx @agentmemory/agentmemory` が古いリリースを返す場合は、`npx -y @agentmemory/agentmemory@latest` で最新を強制するか、`rm -rf ~/.npm/_npx`(macOS/Linux。Windows では `%LOCALAPPDATA%\npm-cache\_npx` を削除)で一度キャッシュをクリアしてください。v0.9.16+ では初回 npx 実行時にインラインでグローバルインストールを促されるので、それ以降は素の `agentmemory` コマンドがどこでも動きます。 + +すべてのオプションは下の[クイックスタート](#quick-start)を参照。各エージェント固有の接続は[すべてのエージェントで動作](#works-with-every-agent)を参照。 + +--- + +

Works with every agent

+ +agentmemory は hooks、MCP、REST API をサポートするあらゆるエージェントで動作します。すべてのエージェントが同じメモリサーバーを共有します。 + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+ネイティブプラグイン + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+ネイティブプラグイン + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+ネイティブプラグイン + MCP +
+Hermes
+Hermes
+ネイティブプラグイン + MCP +
+pi
+pi
+ネイティブプラグイン + MCP +
+OpenHuman
+OpenHuman
+ネイティブ Memory trait バックエンド +
+Cursor
+Cursor
+MCP サーバー +
+Gemini CLI
+Gemini CLI
+MCP サーバー +
+OpenCode
+OpenCode
+22 hooks + MCP + プラグイン +
+Cline
+Cline
+MCP サーバー +
+Goose
+Goose
+MCP サーバー +
+Kilo Code
+Kilo Code
+MCP サーバー +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP サーバー +
+Windsurf
+Windsurf
+MCP サーバー +
+Roo Code
+Roo Code
+MCP サーバー +
+ +

+ MCP または HTTP を話すあらゆるエージェントで動作。サーバー 1 つで、すべてのエージェントがメモリを共有。 +

+ +--- + +あなたは毎セッション、同じアーキテクチャを説明し直している。同じバグを何度も発見する。同じ好みを繰り返し教える。組み込みのメモリ(CLAUDE.md、.cursorrules)は 200 行で打ち止め、しかも古びていく。agentmemory がこれを解決します。バックグラウンドで静かにエージェントの動きを捕捉し、検索可能なメモリに圧縮し、次のセッションが始まるときに適切なコンテキストを注入します。コマンド 1 つ。エージェント間で動作します。 + +**何が変わるか:** セッション 1 で JWT 認証をセットアップ。セッション 2 でレート制限を依頼する。エージェントは既に、あなたの認証が `src/middleware/auth.ts` の jose ミドルウェアを使い、テストがトークン検証をカバーし、Edge 互換性のために jsonwebtoken ではなく jose を選んだことを知っています。説明のし直し不要。コピペ不要。エージェントはただ*知っている*。 + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0 新機能** — ランディングサイト [agent-memory.dev](https://agent-memory.dev) 公開、ファイルシステムコネクタ(`@agentmemory/fs-watcher`)、スタンドアロン MCP は実行中のサーバーへプロキシすることで hooks とビューワーが整合、削除パス全体で監査ポリシーをコード化、健康チェックは小さな Node プロセスで `memory_critical` を誤検知しなくなりました。詳細は [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18) を参照。 + +--- + +

Benchmarks

+ + + + + + +
+ +### 検索精度 + +**coding-agent-life-v1**(社内コーパス、サンドボックスで再現可能) + +| アダプタ | P@5 | R@5 | Top-5 ヒット率 | p50 レイテンシ | +|---|---|---|---|---| +| **agentmemory ハイブリッド** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep ベースライン | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100% Top-5 ヒット率。同じ入力で grep ベースラインより **2.2×** 高い精度。タイプ別の詳細は [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md)。 + +**LongMemEval-S**(ICLR 2025、500 問) + +| システム | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25 のみのフォールバック | 86.2% | 94.6% | 71.5% | + + + +### トークン削減 + +| 方式 | トークン/年 | コスト/年 | +|---|---|---| +| フルコンテキスト貼付 | 19.5M+ | 不可能(コンテキストウィンドウ超過) | +| LLM 要約 | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + ローカル埋め込み | ~170K | **$0** | + +
+ +> 埋め込みモデル:`all-MiniLM-L6-v2`(ローカル、無料、API キー不要)。詳細レポート:[`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md)、[`benchmark/QUALITY.md`](../benchmark/QUALITY.md)、[`benchmark/SCALE.md`](../benchmark/SCALE.md)。競合比較:[`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory vs mem0、Letta、Khoj、claude-mem、Hippo。 + +**ローカルで再現:** [`eval/README.md`](../eval/README.md) — LongMemEval `_s`(公開 500 問)+ `coding-agent-life-v1`(社内 15 セッションコーパス)向けのアダプタプラガブルハーネス。Grep / vector / agentmemory アダプタを並べてスコアリングし、NDJSON 出力、公開スコアカードは [`docs/benchmarks/`](../docs/benchmarks/) に掲載。 + +**[codegraph](https://github.com/colbymchenry/codegraph)、[Understand Anything](https://github.com/Lum1104/Understand-Anything)、[Graphify](https://github.com/safishamsi/graphify) と組み合わせて使えます。** コードグラフのインデックス、マルチエージェントビルドパイプライン、ドキュメント / PDF / 画像 / 動画にまたがる広範なナレッジグラフ。agentmemory が作業を覚え、これら 3 つのプロジェクトがコンテキストレイヤーの残りを照らします。レシピと質問ルーティング表:[`docs/recipes/pairings.md`](../docs/recipes/pairings.md)。 + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)組み込み (CLAUDE.md)
種別メモリエンジン + MCP サーバーメモリレイヤー APIフルエージェントランタイム静的ファイル
検索 R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
自動キャプチャ12 hooks(手動作業ゼロ)手動の add() 呼び出しエージェントが自分で編集手動編集
検索BM25 + ベクトル + グラフ(RRF 融合)ベクトル + グラフベクトル(アーカイブ)すべてをコンテキストにロード
マルチエージェントMCP + REST + リース + シグナルAPI(調整なし)Letta ランタイム内のみエージェントごとにファイル
フレームワークロックインなし(任意の MCP クライアント)なし高(Letta 必須)エージェントごとのフォーマット
外部依存なし(SQLite + iii-engine)Qdrant / pgvectorPostgres + ベクトル DBなし
メモリライフサイクル4 層統合 + 減衰 + 自動忘却受動的抽出エージェント管理手動プルーニング
トークン効率~1,900 tokens/セッション ($10/年)統合方法によるコアメモリがコンテキスト内240 観測で 22K+ tokens
リアルタイムビューワーあり(ポート 3113)クラウドダッシュボードクラウドダッシュボードなし
セルフホストあり(デフォルト)オプションオプションあり
+ +--- + +

Quick Start

+ +互換性:このリリースは安定版の `iii-sdk` `^0.11.0` と iii-engine v0.11.x を対象とします。 + +### 30 秒で試す + +```bash +# ターミナル 1: サーバーを起動 +npx @agentmemory/agentmemory + +# ターミナル 2: サンプルデータを投入してリコールを確認 +npx @agentmemory/agentmemory demo +``` + +`demo` は 3 つの現実的なセッション(JWT 認証、N+1 クエリ修正、レート制限)を投入し、セマンティック検索を実行します。「database performance optimization」で検索すると「N+1 query fix」が見つかります — キーワード一致ではできない芸当です。 + +`http://localhost:3113` を開けばメモリがリアルタイムに構築される様子が見られます。 + +### 推奨:グローバルインストール + +`npx` はバージョン単位でキャッシュします。先週 `npx @agentmemory/agentmemory@0.9.14` を実行していた場合、素の `npx @agentmemory/agentmemory` は最新ではなく `~/.npm/_npx/` から古い 0.9.14 を提供することがあります。一度インストールすれば、素の `agentmemory` コマンドがどこでも動きます: + +```bash +npm install -g @agentmemory/agentmemory +# macOS/Linux のシステム Node で EACCES が出る場合は次を試してください: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # サーバー起動(npx 形式と同じ) +agentmemory stop # 停止 +agentmemory remove # 作成したものをすべてアンインストール +agentmemory connect claude-code # エージェントを 1 つ接続 +agentmemory doctor # 対話型診断 + 修正プロンプト +``` + +v0.9.16 以降、初回 npx 実行時にインラインでグローバルインストールを促されます — 一度 `Y` と答えれば完了です。スキップした場合、以下のいずれかで最新を取得できます: + +```bash +npx -y @agentmemory/agentmemory@latest # npm から最新を強制(クロスプラットフォーム) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux のみ (POSIX shell) +``` + +Windows / PowerShell では、同等のキャッシュクリアは `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` です — 上記の `npx -y ...@latest` 形式がクロスプラットフォームの選択肢になります。 + +### セッションリプレイ + +agentmemory が記録するすべてのセッションは再生可能です。ビューワーを開き、**Replay** タブを選択し、タイムラインをスクラブしてください: プロンプト、ツール呼び出し、ツール結果、応答が個別のイベントとして表示され、再生/一時停止、速度コントロール(0.5×–4×)、キーボードショートカット(スペースで切り替え、矢印でステップ)が使えます。 + +古い Claude Code の JSONL トランスクリプトを取り込みたい? + +```bash +# デフォルトの ~/.claude/projects 配下を一括インポート +npx @agentmemory/agentmemory import-jsonl + +# あるいは単一ファイルをインポート +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +インポートしたセッションはネイティブのセッションと並んで Replay ピッカーに表示されます。内部では各エントリが `mem::replay::load`、`mem::replay::sessions`、`mem::replay::import-jsonl` の iii functions を経由します — サイドチャネルサーバーはありません。 + +### アップグレード / メンテナンス + +意図的にローカルランタイムを更新したいときは、メンテナンスコマンドを使ってください: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +警告: このコマンドは現在のワークスペース/ランタイムを変更します。JavaScript 依存を更新したり、ピン留めされた Docker イメージ `iiidev/iii:0.11.2` を pull したりすることがあります。ピン留めされていない、あるいは新しい iii エンジンをインストールすることは決してありません。 + +実装の詳細は `src/cli.ts` を参照(`src/cli.ts:544-595` 付近の `runUpgrade`)。 + +### Claude Code(1 ブロックそのまま貼り付け) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### プラグインをインストールしない Claude Code(MCP スタンドアロン) + +`/plugin install` ではなく `~/.claude.json` から直接 agentmemory の MCP サーバーを配線する場合、Claude Code は `${CLAUDE_PLUGIN_ROOT}` を解決しないため、hook スクリプトを `~/.claude/settings.json` の絶対パスに向ける必要があります。これらのパスには通常 agentmemory のバージョン(例: `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`)が埋め込まれるため、次のアップグレードで全 hook が静かに壊れます。 + +回避策: + +```bash +agentmemory connect claude-code --with-hooks +``` + +同じ hook コマンドを `~/.claude/settings.json` にマージし、現在インストールされている `@agentmemory/agentmemory` パッケージの `plugin/` ディレクトリに解決された絶対パスを書き込みます。agentmemory をアップグレードしたら、このコマンドを再実行してパスを更新してください。同じファイル内のユーザーエントリは保持され、以前の agentmemory エントリだけが置き換えられます。`/plugin install` の経路が推奨アプローチであることに変わりはありません。 + +リモートや保護されたデプロイでは、`AGENTMEMORY_URL` と `AGENTMEMORY_SECRET` を設定して Claude Code を起動します。プラグインはこの両方の値を同梱の MCP サーバーに渡します。`AGENTMEMORY_URL` が空の場合、MCP shim は `http://localhost:3111` にフォールバックします。 + +### Codex CLI(Codex プラグインプラットフォーム) + +```bash +# 1. 別ターミナルでメモリサーバーを起動 +npx @agentmemory/agentmemory + +# 2. agentmemory マーケットプレイスを登録してプラグインをインストール +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex プラグインは Claude Code プラグインと同じ `plugin/` ディレクトリから出荷されます。以下を登録します: + +- `@agentmemory/mcp` を MCP サーバーとして(`AGENTMEMORY_URL` が動作中の agentmemory サーバーを指す場合は 51 ツールすべてをプロキシ、サーバーに到達できない場合はローカルで 7 ツールにフォールバック) +- 6 つのライフサイクル hooks: `SessionStart`、`UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`PreCompact`、`Stop` +- 4 つの skills: `/recall`、`/remember`、`/session-history`、`/forget` + +Codex の hook エンジンは hook サブプロセスに `CLAUDE_PLUGIN_ROOT` を注入する([`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs))ので、同じ hook スクリプトが両ホストで重複なく動きます。Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure イベントは Claude Code 専用で、Codex には登録されません。 + +#### Codex Desktop: プラグイン hooks は現在無音(回避策あり) + +`CodexHooks` と `PluginHooks` はどちらも [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs) で安定版・デフォルト有効ですが、Codex Desktop ビルドは現在プラグインローカルの `hooks.json` をディスパッチしません([openai/codex#16430](https://github.com/openai/codex/issues/16430))。MCP ツールは引き続き動きますが、ライフサイクル観測だけが欠落します。 + +上流が修正を出すまでは、同じ hook コマンドをグローバルな `~/.codex/hooks.json` にミラーしてください: + +```bash +agentmemory connect codex --with-hooks +``` + +これは同梱スクリプトへの絶対パスを参照する冪等なブロックを `~/.codex/hooks.json` に追加します(ユーザースコープでは `${CLAUDE_PLUGIN_ROOT}` の展開は不要)。agentmemory をアップグレードしたら同じコマンドを再実行してパスを更新してください。同じファイル内のユーザーエントリは保持され、以前の agentmemory エントリだけが置き換えられます。 + +
+OpenClaw(このプロンプトを貼り付け) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +詳細ガイド:[`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent(このプロンプトを貼り付け) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +詳細ガイド:[`integrations/hermes/`](../integrations/hermes/) + +
+ +### その他のエージェント + +メモリサーバーを起動:`npx @agentmemory/agentmemory` + +`mcpServers` シェイプを使うホスト(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI、OpenClaw)では、agentmemory エントリは**同じ MCP サーバーブロック**です: + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**このエントリをホストの設定ファイルにある既存の `mcpServers` オブジェクトにマージしてください** — ファイル全体を置き換えないでください。ファイルに既に他のサーバーがある場合は、`agentmemory` をその隣にもう 1 つのキーとして追加します。`mcpServers` が完全に欠落している場合は、ブロックを `{ "mcpServers": { ... } }` の中に貼り付けてください。`${VAR}` プレースホルダーは MCP サーバー起動時にシェルから `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` を継承します — 未設定の変数は空文字列を渡し、shim は `http://localhost:3111` にフォールバックします。1 つの接続済みエントリでローカルとリモート(k8s / リバースプロキシ)両方のデプロイに対応します。 + +| エージェント | 設定ファイル | 備考 | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | `mcpServers` にマージ。ウェブサイトでワンクリックディープリンクも利用可能。 | +| **Claude Desktop** | `claude_desktop_config.json`(Application Support) | `mcpServers` にマージ。編集後 Claude Desktop を再起動。 | +| **Cline / Roo Code / Kilo Code** | Cline MCP 設定(設定 UI → MCP Servers → Edit) | 同じ `mcpServers` ブロック。 | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | 同じ `mcpServers` ブロック。 | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user`(自動マージ)。 | +| **OpenClaw** | OpenClaw MCP 設定 | 同じ `mcpServers` ブロック、または[より深いメモリプラグイン](../integrations/openclaw/)を使用。 | +| **Codex CLI(MCP のみ)** | `.codex/config.toml` | TOML シェイプ: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`、または `[mcp_servers.agentmemory]` を手動で追加。 | +| **Codex CLI(フルプラグイン)** | Codex プラグインマーケットプレイス | `codex plugin marketplace add rohitg00/agentmemory` のあと `codex plugin add agentmemory@agentmemory`。MCP + 6 つのライフサイクル hooks(SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、PreCompact、Stop)+ 4 つの skills を登録。Codex Desktop では、[openai/codex#16430](https://github.com/openai/codex/issues/16430) が解決するまで `agentmemory connect codex --with-hooks` も実行 — そちらではプラグイン hooks が現在無音。 | +| **OpenCode(MCP のみ)** | `opencode.json` | 異なるシェイプ — トップレベルの `mcp` キー、command は配列: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`。 | +| **OpenCode(フルプラグイン)** | `plugin/opencode/` | 22 個の自動キャプチャ hooks がセッションライフサイクル、メッセージ、ツール、エラーをカバー。2 つのスラッシュコマンド(`/recall`、`/remember`)。`plugin/opencode/` を OpenCode ワークスペースにコピーし、プラグインエントリを `opencode.json` に追加。完全な hook 表とギャップ分析は [`plugin/opencode/README.md`](../plugin/opencode/README.md) を参照。 | +| **pi** | `~/.pi/agent/extensions/agentmemory` | [`integrations/pi`](../integrations/pi/) をコピーして pi を再起動。 | +| **Hermes Agent** | `~/.hermes/config.yaml` | より深い[メモリプロバイダープラグイン](../integrations/hermes/)を使い、`memory.provider: agentmemory` を設定。 | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` が標準の `mcpServers` ブロックを書き込みます。Hook ペイロードは Claude Code とフィールド互換なので、既存の 12 hook スクリプトはそのまま動作 — 同じ `settings.json` の `hooks` セクションで配線してください。 | +| **Antigravity**(Gemini CLI の後継) | `mcp_config.json`(Antigravity の User ディレクトリ内) | `agentmemory connect antigravity` が標準の `mcpServers` ブロックを書き込みます。macOS: `~/Library/Application Support/Antigravity/User/`。Linux: `~/.config/Antigravity/User/`。2026-06-18 の Gemini CLI 終了後に使用。 | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` がユーザーレベル設定を書き込みます。ワークスペースのオーバーライドはコードの横にある `.kiro/settings/mcp.json` に。 | +| **Goose** | Goose MCP 設定 UI | 同じ `mcpServers` ブロック。 | +| **Aider** | n/a | REST API に直接話しかける: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`。 | +| **任意のエージェント(32+)** | n/a | `npx skillkit install agentmemory` がホストを自動検出してマージ。 | + +**サンドボックス化された MCP クライアント**(Flatpak / Snap / 制限的なコンテナ)はホストの `localhost` に到達できません: `env` ブロックに `"AGENTMEMORY_FORCE_PROXY": "1"` も設定し、`AGENTMEMORY_URL` をサンドボックスが実際に到達できる経路(例: LAN IP)に向けてください。 + +### プログラマティックアクセス(Python / Rust / Node) + +agentmemory はコア操作を iii functions(`mem::remember`、`mem::observe`、`mem::context`、`mem::smart-search`、`mem::forget`)として登録します。iii SDK を持つあらゆる言語が `ws://localhost:49134` で直接呼び出せます — 言語ごとに REST クライアントを用意する必要はありません。 + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +実例:[`examples/python/`](../examples/python/)(クイックスタート + 観測/リコールフロー)。iii ランタイムがないホスト向けに `:3111` の REST も引き続き利用可能。 + +### ソースから + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +`iii` が既にインストールされていれば、これでローカルの `iii-engine` で agentmemory が起動します。Docker が使える場合は Docker Compose にフォールバックします。REST、ストリーム、ビューワーはデフォルトで `127.0.0.1` にバインドします。 + +`iii-engine` を手動でインストールしてください。**agentmemory は現在 `iii-engine` を `v0.11.2` にピン留めしています** — `v0.11.6` では `iii worker add` で何でもサンドボックス化する新モデルが導入されましたが、agentmemory はまだそれ向けにリファクタリングされていません。リファクタが完了次第ピンは解除されます。サンドボックスモデルへ手動移行済みなら `AGENTMEMORY_III_VERSION=` でオーバーライドできます。 + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** `aarch64-apple-darwin` を `x86_64-apple-darwin` に置換 +- **Linux x64:** `x86_64-unknown-linux-gnu` に置換 +- **Linux arm64:** `aarch64-unknown-linux-gnu` に置換 +- **Windows:** [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2) から `iii-x86_64-pc-windows-msvc.zip` をダウンロード、`iii.exe` を展開し PATH に追加 + +または Docker を使用(同梱の `docker-compose.yml` が `iiidev/iii:0.11.2` を pull します)。詳細ドキュメント:[iii.dev/docs](https://iii.dev/docs)。 + +### Windows + +agentmemory は Windows 10/11 で動作しますが、Node.js パッケージだけでは不十分で、`iii-engine` ランタイム(別のネイティブバイナリ)もバックグラウンドプロセスとして必要です。公式の上流インストーラは `sh` スクリプトで、今のところ PowerShell インストーラや scoop/winget パッケージは存在しないため、Windows ユーザーには 2 つの経路があります: + +**選択肢 A — ビルド済み Windows バイナリ(推奨):** + +```powershell +# 1. ブラウザで https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 を開く +# (engine v0.11.6+ が要求する新しいサンドボックスモデルへ +# agentmemory がリファクタリングされるまで v0.11.2 にピン留め) +# 2. iii-x86_64-pc-windows-msvc.zip をダウンロード +# (ARM マシンの場合は iii-aarch64-pc-windows-msvc.zip) +# 3. iii.exe を PATH 上のどこかに展開、または以下に配置: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory はこの場所を自動でチェックします) +# 4. 確認: +iii --version +# 出力: 0.11.2 + +# 5. その後 agentmemory を通常通り起動: +npx -y @agentmemory/agentmemory +``` + +**選択肢 B — Docker Desktop:** + +```powershell +# 1. Docker Desktop for Windows をインストール +# 2. Docker Desktop を起動し、エンジンが動作中であることを確認 +# 3. agentmemory を実行 — 同梱の compose ファイルが自動起動します: +npx -y @agentmemory/agentmemory +``` + +**選択肢 C — スタンドアロン MCP のみ(エンジンなし):** エージェント用に MCP ツールだけが必要で、REST API、ビューワー、cron ジョブが不要なら、エンジンを完全にスキップ: + +```powershell +npx -y @agentmemory/agentmemory mcp +# あるいは shim パッケージ経由: +npx -y @agentmemory/mcp +``` + +**Windows の診断:** `npx @agentmemory/agentmemory` が失敗する場合、`--verbose` 付きで再実行して実際のエンジン stderr を確認してください。よくある失敗パターン: + +| 症状 | 修正 | +|---|---| +| `iii-engine process started` のあとに `did not become ready within 15s` | エンジンが起動時にクラッシュ — `--verbose` で再実行し stderr を確認 | +| `Could not start iii-engine` | `iii.exe` も Docker もインストールされていない。上記の選択肢 A または B を参照 | +| ポート競合 | `netstat -ano \| findstr :3111` でバインドを確認、kill するか `--port ` を使用 | +| Docker をインストール済みなのにフォールバックがスキップされる | Docker Desktop が実際に動作している(システムトレイアイコン)ことを確認 | + +> 注意: iii **エンジン** はビルド済みバイナリであり、cargo クレートではありません — `cargo install` でインストールしようとしないでください。(iii **SDK** は crates.io、npm、PyPI に公開されていますが、agentmemory には不要です。)サポートされるエンジンのインストール方法はすべて v0.11.2 にピン留めされています: 上記のビルド済み v0.11.2 バイナリ、バージョンピン**付き**の上流 `sh` インストールスクリプト `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh`(macOS/Linux)、および Docker イメージ `iiidev/iii:0.11.2`。単なる `install.sh | sh` は **最新** のエンジンをインストールしますが、agentmemory はそれをサポートしていません — 必ず `VERSION=0.11.2` を渡してください。最も簡単なのは、`npx @agentmemory/agentmemory` を実行するだけです。これがピン留めされたエンジンを `~/.agentmemory/bin` に取得してくれます。 + +--- + +

デプロイ

+ +マネージドホスト向けのワンクリックテンプレート。それぞれが +自己完結した Dockerfile を提供し、npm から +`@agentmemory/agentmemory` を pull して公式の `iiidev/iii` +Docker Hub イメージから iii engine バイナリをコピーします — 事前に +ビルドした agentmemory イメージは不要です。永続ストレージは +`/data` にマウントされます。初回起動の entrypoint は npm 同梱の +iii 設定(`127.0.0.1` をバインド)をデプロイ向けに調整した +設定(`0.0.0.0` をバインドし絶対 `/data` パスを使用)で上書きし、 +HMAC シークレットを生成、そして `gosu` で `root` から `node` +に権限を落としてから agentmemory CLI を exec します。 + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render のワンクリックデプロイボタンはリポジトリルートに `render.yaml` を要求しますが、ルートをあえて綺麗に保っています。[`deploy/render/`](../deploy/render/README.md) にドキュメント化された Render Blueprint フローを使い、リポジトリ内のブループリントを手動で指してください。 + +完全なセットアップ詳細(HMAC キャプチャ、ビューワーの SSH トンネル、 +ローテーション、バックアップ、コスト下限)は +[`deploy/`](../deploy/README.md) を参照: + +- [`deploy/fly`](../deploy/fly/README.md) — 単一マシンで + `auto_stop_machines = "stop"`、アイドル時最安。 +- [`deploy/railway`](../deploy/railway/README.md) — Hobby プラン定額、 + ボリュームはダッシュボードで。 +- [`deploy/render`](../deploy/render/README.md) — Blueprint フロー、 + 有料プランで自動ディスクスナップショット。 +- [`deploy/coolify`](../deploy/coolify/README.md) — [Coolify](https://coolify.io/self-hosted) + 経由で自前 VPS にセルフホスト。同じ Docker Compose + スタックで、ホストとデータは自分の手元に。 + +公開されるのはポート `3111` のみです。`3113` のビューワーは +コンテナ内でループバックにバインドされ続けます — 各テンプレートの +README にそこへ到達する SSH トンネルパターンが記載されています。 + +--- + +

Why agentmemory

+ +すべてのコーディングエージェントはセッションが終わるとすべてを忘れます。毎セッションの最初の 5 分をスタックの再説明に浪費しています。agentmemory はバックグラウンドで動作し、それを完全になくします。 + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### 組み込みエージェントメモリとの比較 + +すべての AI コーディングエージェントには組み込みのメモリが付属します — Claude Code には `MEMORY.md`、Cursor には notepad、Cline には memory bank。これらは付箋のようなものです。agentmemory はその付箋の背後にある検索可能なデータベースです。 + +| | 組み込み (CLAUDE.md) | agentmemory | +|---|---|---| +| スケール | 200 行上限 | 無制限 | +| 検索 | すべてをコンテキストにロード | BM25 + ベクトル + グラフ(top-K のみ) | +| トークンコスト | 240 観測で 22K+ | ~1,900 tokens(92% 削減) | +| クロスエージェント | エージェントごとのファイル | MCP + REST(任意のエージェント) | +| 調整 | なし | リース、シグナル、アクション、ルーチン | +| 可観測性 | 手動でファイルを読む | ポート 3113 のリアルタイムビューワー | + +--- + +

How It Works

+ +### メモリパイプライン + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4 層メモリ統合 + +人間の脳が記憶を処理する方法に着想を得ています — 睡眠時の記憶統合と通じるものがあります。 + +| 層 | 内容 | 例え | +|------|------|---------| +| **Working(作業記憶)** | ツール使用からの生観測 | 短期記憶 | +| **Episodic(エピソード記憶)** | 圧縮されたセッション要約 | 「何が起きたか」 | +| **Semantic(意味記憶)** | 抽出された事実とパターン | 「何を知っているか」 | +| **Procedural(手続き記憶)** | ワークフローと意思決定パターン | 「どうやるか」 | + +記憶は時間とともに減衰(エビングハウス曲線)。頻繁にアクセスされる記憶は強化されます。古い記憶は自動退避。矛盾は検出され解決されます。 + +### 何をキャプチャするか + +| Hook | キャプチャ内容 | +|------|----------| +| `SessionStart` | プロジェクトパス、セッション ID | +| `UserPromptSubmit` | ユーザープロンプト(プライバシーフィルタ済み) | +| `PreToolUse` | ファイルアクセスパターン + コンテキスト富化 | +| `PostToolUse` | ツール名、入力、出力 | +| `PostToolUseFailure` | エラーコンテキスト | +| `PreCompact` | コンパクション前にメモリを再注入 | +| `SubagentStart/Stop` | サブエージェントのライフサイクル | +| `Stop` | セッション終了時の要約 | +| `SessionEnd` | セッション完了マーカー | + +### 主な機能 + +| 機能 | 説明 | +|---|---| +| **自動キャプチャ** | hooks で毎ツール使用を記録 — 手動作業ゼロ | +| **セマンティック検索** | BM25 + ベクトル + ナレッジグラフ、RRF 融合 | +| **メモリ進化** | バージョン管理、上書き、関係グラフ | +| **自動忘却** | TTL 期限切れ、矛盾検出、重要度退避 | +| **プライバシー優先** | API キー、シークレット、`` タグは保存前に除去 | +| **自己修復** | サーキットブレーカー、プロバイダーフォールバックチェーン、ヘルスモニタ | +| **Claude ブリッジ** | MEMORY.md と双方向同期 | +| **ナレッジグラフ** | エンティティ抽出 + BFS 探索 | +| **チームメモリ** | チームメンバー間で名前空間化された共有 + プライベート | +| **引用の出所追跡** | あらゆるメモリを元の観測まで遡れる | +| **Git スナップショット** | メモリ状態のバージョン、ロールバック、diff | + +--- + + + +3 つのシグナルを組み合わせるトリプルストリーム検索: + +| ストリーム | 役割 | 起動条件 | +|---|---|---| +| **BM25** | ステミング付きキーワード一致と類義語拡張 | 常時有効 | +| **Vector(ベクトル)** | 密埋め込みのコサイン類似度 | 埋め込みプロバイダー設定時 | +| **Graph(グラフ)** | エンティティ一致によるナレッジグラフ探索 | クエリにエンティティ検出時 | + +Reciprocal Rank Fusion (RRF, k=60) で融合し、セッションで多様化(セッションあたり最大 3 件)。 + +BM25 は箱から出してすぐにギリシャ文字、キリル文字、ヘブライ文字、アラビア文字、アクセント付きラテン文字をトークン化できます。中国語 / 日本語 / 韓国語のメモリには、オプションのセグメンタ(`npm install @node-rs/jieba tiny-segmenter`)をインストールして CJK 連続を単語レベルのトークンに分割してください。インストールしない場合、agentmemory は連続全体をそのままトークン化するソフトフォールバックに切り替わり、stderr に一度だけヒントを出します。 + +### 埋め込みプロバイダー + +agentmemory はプロバイダーを自動検出します。最良の結果を得るには、ローカル埋め込み(無料)をインストール: + +```bash +npm install @xenova/transformers +``` + +| プロバイダー | モデル | コスト | 備考 | +|---|---|---|---| +| **ローカル(推奨)** | `all-MiniLM-L6-v2` | 無料 | オフライン、BM25 単独より召集率 +8pp | +| Gemini | `gemini-embedding-001` | 無料枠 | 100+ 言語、768/1536/3072 次元 (MRL)、2048 トークン入力。`text-embedding-004` の後継([非推奨、2026 年 1 月 14 日に停止](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | 最高品質 | +| Voyage AI | `voyage-code-3` | 有料 | コード向け最適化 | +| Cohere | `embed-english-v3.0` | 無料試用 | 汎用 | +| OpenRouter | 任意のモデル | 場合による | マルチモデルプロキシ | + +--- + +

MCP Server

+ +53 ツール、6 リソース、3 プロンプト、4 skills — あらゆるエージェント向けで最も充実した MCP メモリツールキット。 + +> **MCP shim とフルサーバー:** 公開されている `@agentmemory/mcp` パッケージは薄い shim です。**`AGENTMEMORY_URL` 経由で動作中の agentmemory サーバーに到達できる場合に限り**、完全な 51 ツール群を公開します(プロキシモード)。サーバーに到達できない場合、shim は 7 ツールのローカルセット(`memory_save`、`memory_recall`、`memory_smart_search`、`memory_sessions`、`memory_export`、`memory_audit`、`memory_governance_delete`)にフォールバックします。`AGENTMEMORY_TOOLS=core|all` 環境変数は*サーバー側*のフラグです — shim の `env` ブロックで設定しても効果はありません。Cursor / OpenCode / Gemini CLI で 7 ツールしか見えない場合は、`npx @agentmemory/agentmemory`(または Docker スタック)を起動し、`AGENTMEMORY_URL=http://localhost:3111` を設定してください。 + +### 51 ツール + +
+コアツール(常時利用可能) + +| ツール | 説明 | +|------|-------------| +| `memory_recall` | 過去の観測を検索 | +| `memory_compress_file` | 構造を保持したまま markdown ファイルを圧縮 | +| `memory_save` | 洞察、決定、パターンを保存 | +| `memory_patterns` | 繰り返し現れるパターンを検出 | +| `memory_smart_search` | ハイブリッドなセマンティック + キーワード検索 | +| `memory_file_history` | 特定ファイルに関する過去の観測 | +| `memory_sessions` | 最近のセッション一覧 | +| `memory_timeline` | 時系列の観測 | +| `memory_profile` | プロジェクトプロファイル(概念、ファイル、パターン) | +| `memory_export` | すべてのメモリデータをエクスポート | +| `memory_relations` | 関係グラフを照会 | + +
+ +
+拡張ツール(全 51 — AGENTMEMORY_TOOLS=all を設定) + +| ツール | 説明 | +|------|-------------| +| `memory_patterns` | 繰り返し現れるパターンを検出 | +| `memory_timeline` | 時系列の観測 | +| `memory_relations` | 関係グラフを照会 | +| `memory_graph_query` | ナレッジグラフ探索 | +| `memory_consolidate` | 4 層統合を実行 | +| `memory_claude_bridge_sync` | MEMORY.md と同期 | +| `memory_team_share` | チームメンバーと共有 | +| `memory_team_feed` | 最近の共有アイテム | +| `memory_audit` | 操作の監査証跡 | +| `memory_governance_delete` | 監査証跡付き削除 | +| `memory_snapshot_create` | Git バージョンスナップショット | +| `memory_action_create` | 依存関係付き作業項目を作成 | +| `memory_action_update` | アクションのステータス更新 | +| `memory_frontier` | 優先度順のブロック解除済みアクション | +| `memory_next` | 次に最も重要なアクション 1 つ | +| `memory_lease` | 排他的アクションリース(マルチエージェント) | +| `memory_routine_run` | ワークフロー ルーチンをインスタンス化 | +| `memory_signal_send` | エージェント間メッセージング | +| `memory_signal_read` | 受領確認付きでメッセージを読む | +| `memory_checkpoint` | 外部条件ゲート | +| `memory_mesh_sync` | インスタンス間 P2P 同期 | +| `memory_sentinel_create` | イベント駆動ウォッチャー | +| `memory_sentinel_trigger` | 外部からセンチネルを発火 | +| `memory_sketch_create` | 一時的なアクショングラフ | +| `memory_sketch_promote` | 永続化に昇格 | +| `memory_crystallize` | アクションチェーンをコンパクト化 | +| `memory_diagnose` | ヘルスチェック | +| `memory_heal` | 詰まった状態を自動修復 | +| `memory_facet_tag` | 次元:値タグ | +| `memory_facet_query` | facet タグで照会 | +| `memory_verify` | 出所を追跡 | + +
+ +### 6 リソース · 3 プロンプト · 4 Skills + +| 種類 | 名前 | 説明 | +|------|------|-------------| +| Resource | `agentmemory://status` | ヘルス、セッション数、メモリ数 | +| Resource | `agentmemory://project/{name}/profile` | プロジェクト別インテリジェンス | +| Resource | `agentmemory://memories/latest` | 直近 10 件のアクティブメモリ | +| Resource | `agentmemory://graph/stats` | ナレッジグラフ統計 | +| Prompt | `recall_context` | 検索してコンテキストメッセージを返す | +| Prompt | `session_handoff` | エージェント間でのハンドオフデータ | +| Prompt | `detect_patterns` | 繰り返し現れるパターンを分析 | +| Skill | `/recall` | メモリを検索 | +| Skill | `/remember` | 長期メモリに保存 | +| Skill | `/session-history` | 最近のセッション要約 | +| Skill | `/forget` | 観測/セッションを削除 | + +### スタンドアロン MCP + +フルサーバーなしで実行 — 任意の MCP クライアント向け。以下のどちらも動きます: + +```bash +npx -y @agentmemory/agentmemory mcp # 正規(常時利用可能) +npx -y @agentmemory/mcp # shim パッケージのエイリアス +``` + +またはエージェントの MCP 設定に追加: + +ほとんどのエージェント(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +`agentmemory` エントリはホストの既存 `mcpServers` オブジェクトにマージし、ファイル全体を置き換えないでください。ホストの `localhost` に到達できないサンドボックスクライアントには、env ブロックに `"AGENTMEMORY_FORCE_PROXY": "1"` を追加し、`AGENTMEMORY_URL` をサンドボックスが到達できる経路に設定してください。 + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +リポジトリからプラグインファイルをコピー: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +ポート `3113` で自動起動。ライブ観測ストリーム、セッションエクスプローラ、メモリブラウザ、ナレッジグラフの可視化、ヘルスダッシュボード。 + +```bash +open http://localhost:3113 +``` + +ビューワーサーバーはデフォルトで `127.0.0.1` にバインドします。REST 経由の `/agentmemory/viewer` エンドポイントは通常の `AGENTMEMORY_SECRET` ベアラートークン規則に従います。CSP ヘッダーはレスポンスごとのスクリプト nonce を使い、インラインハンドラ属性は無効化(`script-src-attr 'none'`)。 + +--- + +

iii Console

+ +`:3113` のビューワーはエージェントが**覚えた**ことを見せます。[iii コンソール](https://iii.dev/docs/console)はエージェントが**やった**ことを見せます — 各メモリ操作は OpenTelemetry トレース、各 KV エントリは編集可能、各 function は呼び出し可能、各ストリームは tap 可能。同じメモリへの 2 つの窓: 一方はプロダクト形、もう一方はエンジン形。 + +`memory_smart_search` の発火を眺め、BM25 スキャン → 埋め込み参照 → RRF 融合 → リランカーをウォーターフォールで見ます。KV ブラウザで詰まった統合タイマーを編集します。調整したペイロードで `PostToolUse` hook を再生します。WebSocket ストリームをピンして観測がライブで着地するのを眺めます。 + +agentmemory はこれを無料で提供します。すべての function、トリガー、ステートスコープ、ストリームが iii プリミティブだからです — カスタム実装も計装も必要ありません。 + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers ページ: agentmemory 自身を含む、接続中のすべての worker と PID、function 数、ランタイム、最終応答時刻。 +

+ +**インストール済みです。** コンソールは `iii` に同梱 — 別途インストーラはありません。 + +**agentmemory と並行して起動:** + +```bash +# agentmemory ビューワーがポート 3113 を握っているので、コンソールは 3114 で実行します。 +# エンジン REST (3111)、WebSocket (3112)、bridge (49134) のデフォルトは agentmemory と一致します。 +iii console --port 3114 +``` + +その後 `http://localhost:3114` を開きます。`--enable-flow` で実験的なアーキテクチャグラフページを有効化します。 + +エンジンエンドポイントを移動した場合のみ上書き: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**コンソールでできること:** + +| ページ | 用途 | +|------|-----------| +| **Workers** | agentmemory worker 自身を含む、接続中の各 worker とライブメトリクスを表示。 | +| **Functions** | JSON ペイロードを与えて agentmemory の任意の function を直接呼び出し — クライアントを配線せずに `memory.recall`、`memory.consolidate`、`graph.query` をテストできて便利。 | +| **Triggers** | HTTP、cron、イベント、ステートのトリガーを再生 — 統合 cron を手動で発火、HTTP ルートを再試行、ステート変更を発行。 | +| **States** | フル CRUD の KV ブラウザ — セッション、メモリスロット、ライフサイクルタイマー、埋め込みインデックス — その場で値を編集。 | +| **Streams** | メモリ書き込み、hook イベント、観測更新が iii ストリームを流れる様子をライブで監視する WebSocket モニタ。 | +| **Queues** | 永続キューのトピック + デッドレター管理。失敗した埋め込み / 圧縮ジョブを再生または破棄。 | +| **Traces** | OpenTelemetry のウォーターフォール / フレーム / サービスブレークダウン。`trace_id` でフィルタすれば、単一の `memory.search` がどの function、DB 呼び出し、埋め込みリクエストを生んだか正確にわかります。 | +| **Logs** | 構造化 OTEL ログをフィルタし、trace/span ID と相関付け。 | +| **Config** | ランタイム設定 — エンジンがどの worker、プロバイダー、ポートで動いているか確認。 | +| **Flow** | (オプション、`--enable-flow`)各 worker、トリガー、ストリームの対話型アーキテクチャグラフ。 | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces: すべてのメモリ操作についてウォーターフォール / フレーム / サービスブレークダウン。 +

+ +**Traces は既にオン:** + +`iii-config.yaml` は出荷時から `iii-observability` worker を有効化(`exporter: memory`、`sampling_ratio: 1.0`、メトリクス + ログ)。追加設定不要 — agentmemory が起動した瞬間に、すべてのメモリ操作がトレーススパンとコンソールが読み取れる構造化ログを出します。 + +代わりに Jaeger / Honeycomb / Grafana Tempo へエクスポートしたい場合は、`exporter: memory` を `exporter: otlp` に変更し、iii の可観測性ドキュメントに従ってコレクタエンドポイントを設定してください。 + +> **注意:** コンソール自身に認証は強制されていません — デフォルトの `127.0.0.1` バインドのままにし、決して公開しないでください。 + +--- + +

Powered by iii

+ +agentmemory は**それ自体が稼働中の [iii](https://iii.dev) インスタンス**です。function、トリガー、KV ステート、ストリーム、OTEL トレース — すべてが iii プリミティブです。Postgres、Redis、Express、pm2、Prometheus をインストールしなかったのは、iii がそれらを置き換えるからです。 + +つまり、もう 1 つのコマンドで agentmemory にまったく新しい機能を拡張できます。 + +### 1 つのコマンドで agentmemory を拡張 + +```bash +iii worker add iii-pubsub # メモリ書き込みを接続中のすべてのインスタンスに fan-out +iii worker add iii-cron # スケジュール統合、減衰スイープ、スナップショットローテーション +iii worker add iii-queue # 埋め込み + 圧縮ジョブの永続リトライ +iii worker add iii-observability # すべてのメモリ操作に OTEL トレース(デフォルト オン) +iii worker add iii-sandbox # リコールしたコードを隔離 microVM 内で実行 +iii worker add iii-database # SQL バックエンドのステートアダプタに切り替え +iii worker add mcp # agentmemory MCP の横に汎用 MCP ホストを立てる +``` + +各 `iii worker add` は新しい function とトリガーを、agentmemory が既に動いているのと同じエンジンに登録します。ビューワーとコンソールがすぐに拾い上げます — リロード不要、新しい統合不要、新しいコンテナ不要。 + +| `iii worker add` | agentmemory の上に得られるもの | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | マルチインスタンスメモリ: すべての `remember` が fan-out、すべての `search` が和集合を読む | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | スケジュールされたライフサイクル — 夜間統合、週次スナップショット、固定クロックでの減衰 | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | 永続リトライ: 失敗した埋め込み + 圧縮ジョブが再起動を生き延び、観測は失われない | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | すべての function に OTEL トレース、メトリクス、ログ — 初日から `iii-config.yaml` に配線済み | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall` から出てきたコードはあなたのシェルではなく使い捨て VM 内で実行 | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | デフォルトのインメモリ KV では足りないときの SQL バックエンドのステートアダプタ | +| [`mcp`](https://workers.iii.dev/workers/mcp) | agentmemory の隣に追加の MCP サーバーを立て、同じエンジンを共有 | + +完全なレジストリ:[workers.iii.dev](https://workers.iii.dev)。そこにあるすべての worker は agentmemory が使っているのと同じプリミティブで組み立てられています — そして既に手元にある agentmemory もその 1 つです。 + +### iii が置き換えるもの + +| 従来のスタック | agentmemory が使うもの | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + インメモリベクトルインデックス | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker 監視 | +| Prometheus / Grafana | iii OTEL + ヘルスモニタ | +| カスタムプラグインシステム | `iii worker add ` | + +**118 ソースファイル · ~21,800 LOC · 950+ テスト · 123 functions · 34 KV スコープ** — すべて 3 つのプリミティブの上に。`agentmemory plugin install` はありません。プラグインシステムは iii そのものです。 + +--- + +

Configuration

+ +### LLM プロバイダー + +agentmemory は環境から自動検出します。デフォルトでは、プロバイダーを設定するか Claude 購読フォールバックに明示的にオプトインしない限り、LLM 呼び出しは行いません。 + +| プロバイダー | 設定 | 備考 | +|----------|--------|-------| +| **No-op(デフォルト)** | 設定不要 | LLM 駆動の compress/summarize は無効。合成 BM25 圧縮 + リコールは引き続き動作。以前 Claude 購読フォールバックに依存していた場合は、下記の `AGENTMEMORY_ALLOW_AGENT_SDK` を参照。 | +| Anthropic API | `ANTHROPIC_API_KEY` | トークン単位課金 | +| MiniMax | `MINIMAX_API_KEY` | Anthropic 互換 | +| Gemini | `GEMINI_API_KEY` | 埋め込みも有効化 | +| OpenRouter | `OPENROUTER_API_KEY` | 任意のモデル | +| Claude 購読フォールバック | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | オプトインのみ。`@anthropic-ai/claude-agent-sdk` セッションを生成 — 過去に無限の Stop-hook 再帰を引き起こしたため、もはやデフォルトではありません。 | + +### コストを意識したモデル選択 + +バックグラウンド圧縮は観測のたびに走るため、モデル選択は月額支出に大きく効きます。記録されたワークロード: 635 リクエスト / 888K トークン / 35 時間のアクティブ使用、2026-05-23 時点の OpenRouter 価格で 3 モデルを比較。 + +| 階層 | モデル | 入力 / 1M | 出力 / 1M | 35 時間のワークロードでのコスト | 備考 | +|------|-------|------------|-------------|---------------------------|-------| +| 推奨 | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | 圧縮 + 要約品質が手堅く、Sonnet の約 10 分の 1 のコスト。 | +| 推奨 | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | やや古めだが圧縮のみのワークロードには十分。 | +| 推奨 | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | セッションがコード中心ならコード推論が強い。 | +| プレミアム | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | 品質は高いが常時稼働のバックグラウンドには高価。 | +| プレミアム | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Sonnet と同階層。 | +| 回避 | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | 推論クラスのモデル。圧縮には大幅な過剰支出。 | + +agentmemory は `OPENROUTER_MODEL` がプレミアム階層パターンと一致するときランタイム警告を表示します。納得して選んだあとは `AGENTMEMORY_SUPPRESS_COST_WARNING=1` で消音できます。 + +メモリ作業における品質対コストのトレードオフ: 圧縮は品質のハードルが比較的緩い要約タスクです(要約を読み返すのはエージェントであってユーザーではありません)。DeepSeek-V4-Pro / Qwen3-Coder はこのタスクで Sonnet と誤差範囲に収まる一方、コストは約 10 分の 1 です。プレミアム階層のモデルは、あなたが直接読むクエリに取っておきましょう。 + +出典:[OpenRouter の Sonnet 4.6 価格](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing)、[DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro)、[DeepSeek の価格に関する注](https://api-docs.deepseek.com/quick_start/pricing/)。 + +### マルチエージェントメモリ(`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +複数のロール(architect / developer / reviewer / researcher / support-agent)が 1 つの agentmemory サーバーを共有するマルチエージェント構成では、`AGENT_ID` がすべての書き込みに発信したロールのタグを付けます。`AGENTMEMORY_AGENT_SCOPE` はリコールがそのタグでフィルタするかどうかを制御します。 + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # 任意、デフォルトは "shared" +``` + +2 つのモード: + +| モード | 書き込みにタグ | リコールでフィルタ | 使いどころ | +|------|------------|---------------|-------------| +| `shared`(デフォルト) | はい | いいえ | 監査証跡付きのクロスエージェントコンテキスト。Architect は developer のメモを見られるが、各行に発言者が記録されます。 | +| `isolated` | はい | はい | 厳格分離。Architect は developer の観測 / メモリ / セッションを決して見られません。 | + +`AGENT_ID` が設定されたときにタグ付けされるもの:`Session.agentId`、`RawObservation.agentId`、`CompressedObservation.agentId`、`Memory.agentId`。ロールは `api::session::start` → `mem::observe` → `mem::compress` → KV を流れます。 + +isolated モードでフィルタされるもの:`mem::smart-search`、`/agentmemory/memories`、`/agentmemory/observations`、`/agentmemory/sessions`。各エンドポイントはリクエスト単位でオーバーライドする `?agentId=` を受け付け、`?agentId=*` で環境スコープから完全にオプトアウトできます。`/memories` はさらに `?includeOrphans=true` を受け付け、`agentId` が undefined の AGENT_ID 導入前のメモリを浮上させます。 + +SDK / REST 層での呼び出し単位オーバーライド: すべての変更系エンドポイント(`/session/start`、`/remember`)はリクエストボディに `agentId` フィールドを受け付け、環境変数より優先されます。1 つのサーバープロセス経由で多数のロールをルーティングするランタイムに便利です。 + +`AGENT_ID` が未設定の場合、メモリはスコープなしのまま(従来の挙動、タグなし・フィルタなし)。 + +### ポート + +agentmemory + iii-engine はデフォルトで 4 つのポートをバインドします。再起動が `port in use` で失敗する場合、この表でどのプロセスを探せばよいか分かります。 + +| ポート | プロセス | 用途 | 環境変数で上書き | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | 内部ストリーム worker(agentmemory + ビューワーが消費) | `III_STREAMS_PORT` | +| `3113` | agentmemory | リアルタイムビューワー(`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — worker はここに登録、OTel テレメトリもここを流れる | `III_ENGINE_URL`(完全 URL、デフォルト `ws://localhost:49134`) | + +クラッシュ後にポートが解放されないときの古いプロセス整理: + +```bash +# macOS / Linux — 各ポートで動いているものを探して kill +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` は正常終了時に worker と engine の pidfile を綺麗に回収します。上の手動クリーンアップは、どちらの pidfile も残っていないクラッシュ後の状態を対象とします。 + +### 設定ファイル + +agentmemory のランタイム設定は、各シェルで変数を export するのではなく `~/.agentmemory/.env` に置いてください。ビューワーが `export ANTHROPIC_API_KEY=...` のようなセットアップヒントを表示したら、これをこのファイルに `ANTHROPIC_API_KEY=...` として(`export` プレフィックスなしで)コピーしてから agentmemory を再起動してください。 + +プロセスの環境変数も引き続き有効で、ファイルの値より優先されます。 + +Windows では同じファイルが `%USERPROFILE%\.agentmemory\.env` にあります: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +API キーの代わりに Claude Code Pro/Max 購読でテストするには、明示的にオプトイン: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +グラフや統合の機能を使いたい場合は同じファイルでオン: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### 環境変数 + +`~/.agentmemory/.env` を作成: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +ポート `3111` 上の 124 エンドポイント。REST API はデフォルトで `127.0.0.1` にバインドします。`AGENTMEMORY_SECRET` が設定されている場合、保護されたエンドポイントは `Authorization: Bearer ` を要求し、mesh sync エンドポイントは両ピアで `AGENTMEMORY_SECRET` を要求します。 + +
+主要エンドポイント + +| メソッド | パス | 説明 | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | ヘルスチェック(常に公開) | +| `POST` | `/agentmemory/session/start` | セッション開始 + コンテキスト取得 | +| `POST` | `/agentmemory/session/end` | セッション終了 | +| `POST` | `/agentmemory/observe` | 観測キャプチャ | +| `POST` | `/agentmemory/smart-search` | ハイブリッド検索 | +| `POST` | `/agentmemory/context` | コンテキスト生成 | +| `POST` | `/agentmemory/remember` | 長期メモリに保存 | +| `POST` | `/agentmemory/forget` | 観測の削除 | +| `POST` | `/agentmemory/enrich` | ファイルコンテキスト + メモリ + bug | +| `GET` | `/agentmemory/profile` | プロジェクトプロファイル | +| `GET` | `/agentmemory/export` | 全データをエクスポート | +| `POST` | `/agentmemory/import` | JSON からインポート | +| `POST` | `/agentmemory/graph/query` | ナレッジグラフ照会 | +| `POST` | `/agentmemory/team/share` | チームと共有 | +| `GET` | `/agentmemory/audit` | 監査証跡 | + +完全なエンドポイント一覧:[`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # ホットリロード +npm run build # 本番ビルド +npm test # 950+ テスト +npm run test:integration # API テスト(サービス起動が必要) +``` + +**前提:** Node.js >= 20、[iii-engine](https://iii.dev/docs) または Docker + +

License

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.ko-KR.md b/READMEs/README.ko-KR.md new file mode 100644 index 0000000..369797c --- /dev/null +++ b/READMEs/README.ko-KR.md @@ -0,0 +1,1360 @@ +

+ agentmemory — AI 코딩 에이전트를 위한 영구 메모리 +

+ +

+ + 코딩 에이전트가 모든 것을 기억합니다. 더 이상 다시 설명할 필요가 없습니다. + Built on iii engine +
+ Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode 및 모든 MCP 클라이언트를 위한 영구 메모리입니다. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ 설계 문서: gist 기준 1200 stars / 172 forks +

+ +

+ 이 gist는 Karpathy의 LLM Wiki 패턴을 신뢰도 점수, 라이프사이클, 지식 그래프, 하이브리드 검색으로 확장한 것입니다. agentmemory는 그 구현체입니다. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory 데모 +

+ +

+ 설치 • + 빠른 시작 • + 벤치마크 • + 경쟁 제품 비교 • + 에이전트 • + 동작 방식 • + MCP • + 뷰어 • + iii Console • + Powered by iii • + 설정 • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +또는 `npx`로 설치 없이 실행: + +```bash +npx @agentmemory/agentmemory +``` + +참고 — npx는 버전별로 캐싱합니다. 단순한 `npx @agentmemory/agentmemory`가 이전 릴리스를 제공한다면, `npx -y @agentmemory/agentmemory@latest`로 최신 버전을 강제로 가져오거나 `rm -rf ~/.npm/_npx`로 캐시를 한 번 비우십시오(macOS/Linux. Windows에서는 `%LOCALAPPDATA%\npm-cache\_npx`를 삭제). v0.9.16부터의 첫 npx 실행은 전역 설치 여부를 인라인으로 묻기 때문에, 이후에는 어디서나 단순한 `agentmemory` 명령이 동작합니다. + +전체 옵션은 아래 [빠른 시작](#quick-start)을 참고하십시오. 에이전트별 연결 방법은 [모든 에이전트와 호환](#works-with-every-agent) 섹션에서 확인할 수 있습니다. + +--- + +

모든 에이전트와 호환

+ +agentmemory는 hooks, MCP, REST API를 지원하는 모든 에이전트와 호환됩니다. 모든 에이전트는 동일한 메모리 서버를 공유합니다. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+native plugin + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+native plugin + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+native plugin + MCP +
+Hermes
+Hermes
+native plugin + MCP +
+pi
+pi
+native plugin + MCP +
+OpenHuman
+OpenHuman
+native Memory trait backend +
+Cursor
+Cursor
+MCP server +
+Gemini CLI
+Gemini CLI
+MCP server +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+MCP server +
+Goose
+Goose
+MCP server +
+Kilo Code
+Kilo Code
+MCP server +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP server +
+Windsurf
+Windsurf
+MCP server +
+Roo Code
+Roo Code
+MCP server +
+ +

+ MCP 또는 HTTP를 지원하는 모든 에이전트와 호환됩니다. 서버 하나, 모든 에이전트가 메모리를 공유합니다. +

+ +--- + +세션마다 같은 아키텍처를 설명하고, 같은 버그를 다시 찾고, 같은 선호 사항을 다시 가르치게 됩니다. 내장 메모리(CLAUDE.md, .cursorrules)는 200줄 한도에서 멈추고 금세 낡습니다. agentmemory가 이 문제를 해결합니다. 에이전트의 동작을 조용히 캡처하여 검색 가능한 메모리로 압축하고, 다음 세션이 시작될 때 적절한 컨텍스트를 주입합니다. 명령 하나면 됩니다. 모든 에이전트에서 동작합니다. + +**무엇이 바뀌는가:** 세션 1에서 JWT 인증을 설정합니다. 세션 2에서 rate limiting을 요청합니다. 에이전트는 이미 인증이 `src/middleware/auth.ts`의 jose 미들웨어로 처리된다는 것, 테스트가 토큰 검증을 다룬다는 것, 그리고 Edge 호환성 때문에 jsonwebtoken 대신 jose를 선택했다는 것을 알고 있습니다. 다시 설명할 필요도, 복사·붙여넣기도 필요 없습니다. 에이전트가 그냥 *알고* 있습니다. + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0의 새로운 기능** — [agent-memory.dev](https://agent-memory.dev)의 랜딩 사이트, 파일시스템 커넥터(`@agentmemory/fs-watcher`), 독립형 MCP가 이제 실행 중인 서버로 프록시되어 hooks와 뷰어가 일치합니다. 모든 삭제 경로에 감사 정책이 코드로 명문화되었고, 작은 Node 프로세스에서 health가 `memory_critical`로 잘못 표시되지 않습니다. 전체 노트는 [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18)에서 확인할 수 있습니다. + +--- + +

벤치마크

+ + + + + + +
+ +### 검색 정확도 + +**coding-agent-life-v1** (자체 코퍼스, 샌드박스 재현 가능) + +| 어댑터 | P@5 | R@5 | Top-5 적중률 | p50 지연 | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep baseline | 0.267 | 0.967 | 15 / 15 | 0 ms | + +Top-5 적중률 100%. 동일한 입력에서 grep 기준선 대비 정밀도가 **2.2배** 더 높습니다. 유형별 전체 분석은 다음에서 확인할 수 있습니다: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500개 질문) + +| 시스템 | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only fallback | 86.2% | 94.6% | 71.5% | + + + +### 토큰 절감 + +| 방식 | 연간 토큰 | 연간 비용 | +|---|---|---| +| 전체 컨텍스트를 매번 붙여넣기 | 19.5M+ | 불가능(컨텍스트 윈도우 초과) | +| LLM 요약 | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + 로컬 임베딩 | ~170K | **$0** | + +
+ +> 임베딩 모델: `all-MiniLM-L6-v2` (로컬, 무료, API 키 불필요). 전체 보고서: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). 경쟁 제품 비교: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory 대 mem0, Letta, Khoj, claude-mem, Hippo. + +**로컬 재현 방법:** [`eval/README.md`](../eval/README.md) — LongMemEval `_s`(공개 500-Q)와 `coding-agent-life-v1`(자체 15-세션 코퍼스)을 위한 어댑터 플러그형 하니스. grep / vector / agentmemory 어댑터를 나란히 평가하고, NDJSON으로 출력하며, 게시된 스코어카드는 [`docs/benchmarks/`](../docs/benchmarks/)에 보관됩니다. + +**다음과 함께 사용하기 좋습니다: [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything), [Graphify](https://github.com/safishamsi/graphify).** 코드 그래프 인덱싱, 멀티 에이전트 빌드 파이프라인, 그리고 docs/PDF/이미지/비디오에 걸친 더 넓은 지식 그래프. agentmemory는 작업을 기억하고, 이 세 프로젝트는 나머지 컨텍스트 레이어를 밝혀줍니다. 레시피와 질문 라우팅 표: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

경쟁 제품 비교

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)내장 메모리 (CLAUDE.md)
유형메모리 엔진 + MCP 서버메모리 레이어 API완전한 에이전트 런타임정적 파일
검색 R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)해당 없음 (grep)
자동 캡처12 hooks (수동 작업 없음)수동 add() 호출에이전트 자체 편집수동 편집
검색BM25 + Vector + Graph (RRF 융합)Vector + GraphVector (archival)모든 것을 컨텍스트에 로드
멀티 에이전트MCP + REST + leases + signalsAPI (조정 없음)Letta 런타임 내에서만에이전트별 파일
프레임워크 종속성없음 (모든 MCP 클라이언트)없음높음 (Letta 사용 필수)에이전트별 포맷
외부 의존성없음 (SQLite + iii-engine)Qdrant / pgvectorPostgres + 벡터 DB없음
메모리 라이프사이클4-tier 통합 + 감쇠 + 자동 망각수동적 추출에이전트 관리수동 정리
토큰 효율세션당 ~1,900 토큰 ($10/년)통합 방식에 따라 다름핵심 메모리는 컨텍스트에 상주관측 240개 기준 22K+ 토큰
실시간 뷰어있음 (port 3113)클라우드 대시보드클라우드 대시보드없음
셀프 호스팅예 (기본)선택 사항선택 사항
+ +--- + +

빠른 시작

+ +호환성: 이 릴리스는 안정 버전 `iii-sdk` `^0.11.0`과 iii-engine v0.11.x를 대상으로 합니다. + +### 30초 만에 사용해 보기 + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo`는 현실적인 세션 3개(JWT 인증, N+1 쿼리 수정, rate limiting)를 시드하고, 그 위에서 시맨틱 검색을 실행합니다. "database performance optimization"으로 검색하면 "N+1 query fix"를 찾는 것을 확인할 수 있는데, 키워드 매칭으로는 불가능한 결과입니다. + +`http://localhost:3113`을 열어서 메모리가 실시간으로 쌓이는 것을 지켜보십시오. + +### 권장: 전역 설치 + +`npx`는 버전별로 캐싱합니다. 지난주에 `npx @agentmemory/agentmemory@0.9.14`를 실행했다면, 단순한 `npx @agentmemory/agentmemory`는 최신 릴리스가 아니라 `~/.npm/_npx/`에 캐시된 0.9.14를 제공할 수 있습니다. 한 번 설치하면 단순한 `agentmemory` 명령이 어디서나 동작합니다: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +v0.9.16 이후부터 첫 npx 실행은 인라인으로 전역 설치 여부를 묻습니다 — `Y`로 한 번만 답하면 설정이 끝납니다. 만약 건너뛰었다면, 새로 가져오기 위해 다음 중 하나를 사용하십시오: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +Windows / PowerShell에서 동일한 캐시 비우기는 `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"`입니다 — 위의 `npx -y ...@latest`가 크로스 플랫폼 옵션입니다. + +### 세션 리플레이 + +agentmemory가 기록한 모든 세션은 재생 가능합니다. 뷰어를 열어 **Replay** 탭을 선택하고 타임라인을 스크럽하면 프롬프트, 도구 호출, 도구 결과, 응답이 별개의 이벤트로 렌더링됩니다. 재생/일시정지, 속도 제어(0.5×–4×), 키보드 단축키(space로 토글, 화살표로 단계 이동)를 모두 지원합니다. + +가져오고 싶은 기존 Claude Code JSONL 트랜스크립트가 있습니까? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +가져온 세션은 네이티브 세션과 함께 Replay 선택기에 표시됩니다. 내부적으로 각 항목은 `mem::replay::load`, `mem::replay::sessions`, `mem::replay::import-jsonl` iii 함수로 라우팅됩니다 — 별도의 사이드 채널 서버 없이. + +### 업그레이드 / 유지보수 + +로컬 런타임을 의도적으로 업데이트할 때는 maintenance 명령을 사용하십시오: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +경고: 이 명령은 현재 workspace/런타임을 변경합니다. JavaScript 의존성을 업데이트할 수 있으며, 고정된 Docker 이미지 `iiidev/iii:0.11.2`를 pull할 수 있습니다. 고정되지 않았거나 더 새로운 iii 엔진을 설치하는 일은 절대 없습니다. + +구현 세부 사항은 `src/cli.ts`에 있습니다 (`runUpgrade`는 `src/cli.ts:544-595` 부근 참고). + +### Claude Code (블록 한 번, 붙여넣기) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### 플러그인 설치 없이 Claude Code 사용 (MCP-독립형 경로) + +`/plugin install` 대신 `~/.claude.json`을 통해 agentmemory의 MCP 서버를 직접 연결한 경우, Claude Code는 `${CLAUDE_PLUGIN_ROOT}`를 해석하지 못하므로 `~/.claude/settings.json`의 hook 스크립트를 절대 경로로 지정해야 합니다. 이 경로들은 일반적으로 agentmemory 버전을 포함하기 때문에 (예: `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), 다음 업그레이드에서 모든 hook이 조용히 깨질 수 있습니다. + +해결책: + +```bash +agentmemory connect claude-code --with-hooks +``` + +이 명령은 현재 설치된 `@agentmemory/agentmemory` 패키지의 번들된 `plugin/` 디렉터리로 해석된 절대 경로로 동일한 hook 명령을 `~/.claude/settings.json`에 병합합니다. agentmemory를 업그레이드한 후 동일한 명령을 다시 실행하여 경로를 갱신하십시오. 동일한 파일의 사용자 항목은 보존되며, 이전 agentmemory 항목만 교체됩니다. `/plugin install` 경로를 사용하는 것이 여전히 권장 방식입니다. +원격 또는 보호된 배포의 경우, `AGENTMEMORY_URL`과 `AGENTMEMORY_SECRET`을 설정한 채로 Claude Code를 실행하십시오. 플러그인은 두 값을 모두 번들된 MCP 서버로 전달합니다. `AGENTMEMORY_URL`이 비어 있을 때는 MCP shim이 `http://localhost:3111`을 사용합니다. + +### Codex CLI (Codex 플러그인 플랫폼) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex 플러그인은 Claude Code 플러그인과 동일한 `plugin/` 디렉터리에서 제공됩니다. 다음을 등록합니다: + +- `@agentmemory/mcp`를 MCP 서버로 등록 (`AGENTMEMORY_URL`이 실행 중인 agentmemory 서버를 가리킬 때 51개 도구 모두 프록시. 도달 가능한 서버가 없으면 로컬에서 7개 도구로 폴백) +- 6개 라이프사이클 hooks: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4개 skills: `/recall`, `/remember`, `/session-history`, `/forget` + +Codex의 hook 엔진은 hook 서브프로세스에 `CLAUDE_PLUGIN_ROOT`를 주입하므로 ([`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs) 참고), 동일한 hook 스크립트가 중복 없이 두 호스트에서 모두 동작합니다. Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure 이벤트는 Claude Code 전용이며 Codex에는 등록되지 않습니다. + +#### Codex Desktop: 플러그인 hooks가 현재 동작하지 않음 (해결책 있음) + +`CodexHooks`와 `PluginHooks`는 [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs)에서 모두 안정 + 기본 활성화 상태이지만, 현재 Codex Desktop 빌드는 플러그인-로컬 `hooks.json`을 디스패치하지 않습니다 ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). MCP 도구는 여전히 동작합니다. 라이프사이클 관측만 누락됩니다. + +업스트림 수정이 적용될 때까지 동일한 hook 명령을 전역 `~/.codex/hooks.json`에 미러링하십시오: + +```bash +agentmemory connect codex --with-hooks +``` + +이 명령은 번들된 스크립트의 절대 경로를 참조하는 idempotent 블록을 `~/.codex/hooks.json`에 추가합니다(사용자 스코프에서 `${CLAUDE_PLUGIN_ROOT}` 확장이 필요 없음). agentmemory를 업그레이드한 후 동일한 명령을 다시 실행하여 경로를 갱신하십시오. 동일한 파일의 사용자 항목은 보존되며, 이전 agentmemory 항목만 교체됩니다. + +
+OpenClaw (이 프롬프트를 붙여넣으세요) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +전체 가이드: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (이 프롬프트를 붙여넣으세요) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +전체 가이드: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### 다른 에이전트 + +메모리 서버 시작: `npx @agentmemory/agentmemory` + +agentmemory 항목은 `mcpServers` 형태를 사용하는 모든 호스트(Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw)에서 **동일한 MCP 서버 블록**입니다: + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**호스트 설정 파일의 기존 `mcpServers` 객체에 이 항목을 병합하십시오** — 파일 전체를 교체하지 마십시오. 파일에 이미 다른 서버가 있다면, `agentmemory`를 `mcpServers` 안의 또 다른 키로 옆에 추가하십시오. `mcpServers` 자체가 없다면 `{ "mcpServers": { ... } }` 안에 블록을 붙여넣으십시오. `${VAR}` 자리표시자는 MCP 서버 실행 시 셸에서 `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET`을 상속합니다 — 설정되지 않은 변수는 빈 문자열로 전달되며 shim은 `http://localhost:3111`로 폴백합니다. 한 번 연결한 항목으로 로컬과 원격(k8s / 리버스 프록시) 배포를 모두 커버합니다. + +| 에이전트 | 설정 파일 | 비고 | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | `mcpServers`에 병합. 웹사이트에서 원클릭 deeplink도 사용 가능. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | `mcpServers`에 병합. 편집 후 Claude Desktop 재시작. | +| **Cline / Roo Code / Kilo Code** | Cline MCP settings (Settings UI → MCP Servers → Edit) | 동일한 `mcpServers` 블록. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | 동일한 `mcpServers` 블록. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (자동 병합). | +| **OpenClaw** | OpenClaw MCP config | 동일한 `mcpServers` 블록을 사용하거나, 더 깊은 [memory plugin](../integrations/openclaw/)을 사용. | +| **Codex CLI (MCP only)** | `.codex/config.toml` | TOML 형식: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, 또는 `[mcp_servers.agentmemory]`를 수동으로 추가. | +| **Codex CLI (full plugin)** | Codex 플러그인 마켓플레이스 | `codex plugin marketplace add rohitg00/agentmemory` 후 `codex plugin add agentmemory@agentmemory`. MCP + 6 lifecycle hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skills 등록. Codex Desktop에서는 [openai/codex#16430](https://github.com/openai/codex/issues/16430)이 머지될 때까지 `agentmemory connect codex --with-hooks`도 실행해야 합니다 — 현재 그곳에서는 플러그인 hooks가 동작하지 않습니다. | +| **OpenCode (MCP only)** | `opencode.json` | 다른 형식 — 최상위 `mcp` 키, 명령은 배열로: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (full plugin)** | `plugin/opencode/` | 세션 라이프사이클, 메시지, 도구, 오류를 다루는 22개의 자동 캡처 hooks. 두 개의 슬래시 명령(`/recall`, `/remember`). `plugin/opencode/`를 OpenCode workspace에 복사한 후 `opencode.json`에 플러그인 항목을 추가하십시오. 전체 hook 표 + gap 분석은 [`plugin/opencode/README.md`](../plugin/opencode/README.md) 참고. | +| **pi** | `~/.pi/agent/extensions/agentmemory` | [`integrations/pi`](../integrations/pi/)를 복사하고 pi를 재시작. | +| **Hermes Agent** | `~/.hermes/config.yaml` | `memory.provider: agentmemory`로 더 깊은 [memory provider plugin](../integrations/hermes/) 사용. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen`이 표준 `mcpServers` 블록을 기록. Hook 페이로드는 Claude Code와 필드 호환이므로, 기존 12-hook 스크립트가 수정 없이 동작합니다 — 동일한 `settings.json`의 `hooks` 섹션에서 연결. | +| **Antigravity** (Gemini CLI 대체) | `mcp_config.json` (Antigravity의 User 디렉터리 내) | `agentmemory connect antigravity`가 표준 `mcpServers` 블록을 기록. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. 2026-06-18 Gemini CLI sunset 이후 사용. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro`가 사용자 레벨 설정을 기록. 워크스페이스 오버라이드는 코드 옆 `.kiro/settings/mcp.json`에. | +| **Goose** | Goose MCP settings UI | 동일한 `mcpServers` 블록. | +| **Aider** | n/a | REST API와 직접 통신: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **모든 에이전트 (32+)** | n/a | `npx skillkit install agentmemory`가 호스트를 자동 감지하고 병합. | + +**샌드박스된 MCP 클라이언트**(Flatpak / Snap / 제한적인 컨테이너 등)가 호스트의 `localhost`에 도달할 수 없는 경우: `env` 블록에 `"AGENTMEMORY_FORCE_PROXY": "1"`도 설정하고, `AGENTMEMORY_URL`을 샌드박스가 실제로 도달 가능한 경로(예: LAN IP)로 지정하십시오. + +### 프로그래매틱 액세스 (Python / Rust / Node) + +agentmemory는 핵심 작업을 iii 함수(`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`)로 등록합니다. iii SDK가 있는 모든 언어에서 `ws://localhost:49134`로 직접 호출할 수 있습니다 — 언어별 별도의 REST 클라이언트가 필요하지 않습니다. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +작동 예제: [`examples/python/`](../examples/python/) (퀵스타트 + 관측/리콜 흐름). iii 런타임이 없는 호스트를 위해 `:3111`의 REST는 그대로 사용 가능합니다. + +### 소스에서 빌드 + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +`iii`가 이미 설치되어 있으면 로컬 `iii-engine`으로 agentmemory를 시작하고, Docker가 사용 가능하면 Docker Compose로 폴백합니다. REST, 스트림, 뷰어는 기본적으로 `127.0.0.1`에 바인딩됩니다. + +`iii-engine`을 수동으로 설치하십시오. **agentmemory는 현재 `iii-engine`을 `v0.11.2`로 고정합니다** — `v0.11.6`은 모든 것을 `iii worker add`를 통해 샌드박스화하는 새 모델을 도입했는데 agentmemory는 아직 이를 위해 리팩터링되지 않았기 때문입니다. 리팩터링이 완료되면 고정이 풀립니다. 수동으로 sandbox 모델로 마이그레이션했다면 `AGENTMEMORY_III_VERSION=`으로 덮어쓰십시오. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** `aarch64-apple-darwin`을 `x86_64-apple-darwin`으로 교체 +- **Linux x64:** `x86_64-unknown-linux-gnu`로 교체 +- **Linux arm64:** `aarch64-unknown-linux-gnu`로 교체 +- **Windows:** [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2)에서 `iii-x86_64-pc-windows-msvc.zip`을 다운로드하고 `iii.exe`를 추출한 후 PATH에 추가 + +또는 Docker 사용 (번들된 `docker-compose.yml`이 `iiidev/iii:0.11.2`를 pull). 전체 문서: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory는 Windows 10/11에서 실행되지만, Node.js 패키지만으로는 충분하지 않습니다 — 별도의 네이티브 바이너리인 `iii-engine` 런타임이 백그라운드 프로세스로 필요합니다. 공식 업스트림 인스톨러는 `sh` 스크립트이고 PowerShell 인스톨러나 scoop/winget 패키지는 현재 없으므로, Windows 사용자에게는 두 가지 경로가 있습니다: + +**옵션 A — 사전 빌드된 Windows 바이너리 (권장):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**옵션 B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**옵션 C — 독립형 MCP만 사용 (엔진 없음):** 에이전트용 MCP 도구만 필요하고 REST API, 뷰어, cron 작업이 필요하지 않다면 엔진을 완전히 건너뛸 수 있습니다: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Windows 진단:** `npx @agentmemory/agentmemory`가 실패하면 `--verbose`로 다시 실행하여 실제 엔진 stderr를 확인하십시오. 일반적인 실패 모드: + +| 증상 | 해결 방법 | +|---|---| +| `iii-engine process started`가 표시된 후 `did not become ready within 15s` | 엔진이 시작 시 충돌함 — `--verbose`로 다시 실행하여 stderr 확인 | +| `Could not start iii-engine` | `iii.exe`도 Docker도 설치되어 있지 않음. 위의 옵션 A 또는 B 참고 | +| 포트 충돌 | `netstat -ano \| findstr :3111`로 무엇이 바인딩되어 있는지 확인하고 종료하거나 `--port ` 사용 | +| Docker가 설치되어 있어도 Docker 폴백을 건너뜀 | Docker Desktop이 실제로 실행 중인지 확인 (시스템 트레이 아이콘) | + +> 참고: iii **엔진**은 사전 빌드된 바이너리이며 cargo 크레이트가 아닙니다 — `cargo install`로 설치하려 하지 마세요. (iii **SDK**는 crates.io, npm, PyPI에 게시되어 있지만 agentmemory에는 필요하지 않습니다.) 지원되는 엔진 설치 방법은 모두 v0.11.2에 고정되어 있습니다: 위의 사전 빌드된 v0.11.2 바이너리, 버전 핀**을 포함한** 업스트림 `sh` 설치 스크립트 `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux), 그리고 Docker 이미지 `iiidev/iii:0.11.2`. 그냥 `install.sh | sh`를 실행하면 **최신** 엔진이 설치되는데, agentmemory는 이를 지원하지 않습니다 — 항상 `VERSION=0.11.2`를 전달하세요. 가장 쉬운 방법은 그냥 `npx @agentmemory/agentmemory`를 실행하는 것입니다. 이 명령이 고정된 엔진을 `~/.agentmemory/bin`에 가져다 줍니다. + +--- + +

배포

+ +매니지드 호스트용 원클릭 템플릿입니다. 각각은 npm에서 `@agentmemory/agentmemory`를 가져오고 공식 `iiidev/iii` Docker Hub 이미지에서 iii 엔진 바이너리를 복사하는 자체 완결형 Dockerfile을 제공합니다 — 사전 빌드된 agentmemory 이미지가 필요 없습니다. 영구 스토리지는 `/data`에 마운트되며, 첫 부팅 진입점은 npm 번들 iii 설정(`127.0.0.1`에 바인딩)을 `0.0.0.0`에 바인딩하고 절대 `/data` 경로를 사용하는 배포 튜닝 설정으로 덮어쓰고, HMAC 시크릿을 생성한 후, `gosu`를 통해 `root`에서 `node`로 권한을 낮춘 다음 agentmemory CLI를 exec합니다. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render의 원클릭 배포 버튼은 저장소 루트에 `render.yaml`이 필요한데, 우리는 의도적으로 이를 깨끗하게 유지합니다. [`deploy/render/`](../deploy/render/README.md)에 문서화된 Render Blueprint 플로우를 사용하여 in-repo blueprint를 수동으로 가리키도록 하십시오. + +전체 설정 세부 사항(HMAC 캡처, 뷰어 SSH 터널, 로테이션, 백업, 비용 하한)은 [`deploy/`](../deploy/README.md)에 있습니다: + +- [`deploy/fly`](../deploy/fly/README.md) — `auto_stop_machines = "stop"`으로 단일 머신; 유휴 비용이 가장 저렴. +- [`deploy/railway`](../deploy/railway/README.md) — Hobby 플랜 정액제, 볼륨은 대시보드에서. +- [`deploy/render`](../deploy/render/README.md) — Blueprint 플로우, 유료 플랜에서 자동 디스크 스냅샷. +- [`deploy/coolify`](../deploy/coolify/README.md) — [Coolify](https://coolify.io/self-hosted)를 통해 자체 VPS에 셀프 호스팅; 동일한 Docker Compose 스택, 호스트와 데이터를 직접 소유. + +`3111` 포트만 게시됩니다. `3113`의 뷰어는 컨테이너 내부에서 loopback에 바인딩된 채로 유지됩니다 — 각 템플릿의 README는 그곳에 도달하기 위한 SSH 터널 패턴을 문서화합니다. + +--- + +

왜 agentmemory인가

+ +모든 코딩 에이전트는 세션이 끝나면 모든 것을 잊습니다. 매 세션의 첫 5분을 스택을 다시 설명하는 데 낭비합니다. agentmemory는 백그라운드에서 실행되어 이를 완전히 제거합니다. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### 내장 에이전트 메모리와의 비교 + +모든 AI 코딩 에이전트는 내장 메모리와 함께 제공됩니다 — Claude Code에는 `MEMORY.md`가 있고, Cursor에는 notepad가, Cline에는 memory bank가 있습니다. 이들은 포스트잇처럼 동작합니다. agentmemory는 포스트잇 뒤에 있는 검색 가능한 데이터베이스입니다. + +| | 내장 (CLAUDE.md) | agentmemory | +|---|---|---| +| 규모 | 200줄 한도 | 무제한 | +| 검색 | 모든 것을 컨텍스트에 로드 | BM25 + vector + graph (top-K만) | +| 토큰 비용 | 관측 240개 기준 22K+ | ~1,900 토큰 (92% 적음) | +| 크로스 에이전트 | 에이전트별 파일 | MCP + REST (모든 에이전트) | +| 조정 | 없음 | leases, signals, actions, routines | +| 가시성 | 파일 수동 읽기 | :3113의 실시간 뷰어 | + +--- + +

동작 방식

+ +### 메모리 파이프라인 + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4-Tier 메모리 통합 + +인간 뇌가 메모리를 처리하는 방식 — 수면 통합과 크게 다르지 않은 방식 — 에서 영감을 받았습니다. + +| Tier | 무엇 | 비유 | +|------|------|---------| +| **Working** | 도구 사용에서 나온 원시 관측 | 단기 기억 | +| **Episodic** | 압축된 세션 요약 | "무슨 일이 있었는가" | +| **Semantic** | 추출된 사실과 패턴 | "내가 아는 것" | +| **Procedural** | 워크플로우와 의사 결정 패턴 | "그것을 하는 방법" | + +메모리는 시간이 지나면서 감쇠합니다(Ebbinghaus 곡선). 자주 액세스하는 메모리는 강화됩니다. 오래된 메모리는 자동으로 축출됩니다. 모순은 감지되고 해결됩니다. + +### 무엇이 캡처되는가 + +| Hook | 캡처 내용 | +|------|----------| +| `SessionStart` | 프로젝트 경로, 세션 ID | +| `UserPromptSubmit` | 사용자 프롬프트 (개인정보 필터링됨) | +| `PreToolUse` | 파일 접근 패턴 + 풍부한 컨텍스트 | +| `PostToolUse` | 도구 이름, 입력, 출력 | +| `PostToolUseFailure` | 오류 컨텍스트 | +| `PreCompact` | 컴팩션 전에 메모리 재주입 | +| `SubagentStart/Stop` | 서브 에이전트 라이프사이클 | +| `Stop` | 세션 종료 요약 | +| `SessionEnd` | 세션 완료 마커 | + +### 핵심 기능 + +| 기능 | 설명 | +|---|---| +| **자동 캡처** | 모든 도구 사용을 hooks로 기록 — 수동 작업 없음 | +| **시맨틱 검색** | BM25 + vector + 지식 그래프, RRF 융합 | +| **메모리 진화** | 버저닝, supersession, 관계 그래프 | +| **자동 망각** | TTL 만료, 모순 감지, 중요도 기반 축출 | +| **개인정보 우선** | API 키, 시크릿, `` 태그를 저장 전에 제거 | +| **자가 치유** | 서킷 브레이커, 프로바이더 폴백 체인, 헬스 모니터링 | +| **Claude 브리지** | MEMORY.md와의 양방향 동기화 | +| **지식 그래프** | 엔티티 추출 + BFS 순회 | +| **팀 메모리** | 팀원 간 namespaced 공유 + 비공개 | +| **인용 출처 추적** | 모든 메모리를 원본 관측으로 추적 | +| **Git 스냅샷** | 메모리 상태의 버전 관리, 롤백, 차이 비교 | + +--- + + + +세 가지 신호를 결합한 트리플 스트림 검색: + +| 스트림 | 무엇을 하는가 | 언제 | +|---|---|---| +| **BM25** | 형태소 추출 키워드 매칭 + 동의어 확장 | 항상 활성 | +| **Vector** | 밀집 임베딩 위의 코사인 유사도 | 임베딩 프로바이더 구성 시 | +| **Graph** | 엔티티 매칭을 통한 지식 그래프 순회 | 쿼리에서 엔티티 감지 시 | + +Reciprocal Rank Fusion(RRF, k=60)으로 융합하고, 세션 다양화(세션당 최대 3개 결과)합니다. + +BM25는 기본적으로 그리스어, 키릴 문자, 히브리어, 아랍어, 강세 부호가 있는 라틴 문자를 토크나이즈합니다. 중국어 / 일본어 / 한국어 메모리의 경우 선택적 세그멘터(`npm install @node-rs/jieba tiny-segmenter`)를 설치하여 CJK 런을 단어 수준 토큰으로 분할하십시오. 설치하지 않으면 agentmemory는 전체 런 토크나이제이션으로 soft fallback하고 stderr에 일회성 힌트를 출력합니다. + +### 임베딩 프로바이더 + +agentmemory는 프로바이더를 자동 감지합니다. 최상의 결과를 위해 로컬 임베딩을 설치하십시오 (무료): + +```bash +npm install @xenova/transformers +``` + +| 프로바이더 | 모델 | 비용 | 비고 | +|---|---|---|---| +| **Local (권장)** | `all-MiniLM-L6-v2` | 무료 | 오프라인, BM25-only 대비 +8pp recall | +| Gemini | `gemini-embedding-001` | 무료 티어 | 100+ 언어, 768/1536/3072 dims (MRL), 2048-token 입력. `text-embedding-004`를 대체 ([deprecated, 2026년 1월 14일 종료](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | 최고 품질 | +| Voyage AI | `voyage-code-3` | 유료 | 코드 최적화 | +| Cohere | `embed-english-v3.0` | 무료 평가판 | 범용 | +| OpenRouter | 모든 모델 | 다양 | 멀티 모델 프록시 | + +--- + +

MCP 서버

+ +53개 도구, 6개 리소스, 3개 프롬프트, 4개 skills — 모든 에이전트를 위한 가장 포괄적인 MCP 메모리 툴킷. + +> **MCP shim 대 전체 서버:** 게시된 `@agentmemory/mcp` 패키지는 얇은 shim입니다. `AGENTMEMORY_URL`을 통해 실행 중인 agentmemory 서버에 도달할 수 있을 때 **만** 전체 51-도구 표면을 노출합니다(프록시 모드). 도달 가능한 서버가 없으면 shim은 7-도구 로컬 세트(`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`)로 폴백합니다. `AGENTMEMORY_TOOLS=core|all` 환경 변수는 *서버 측* 플래그입니다 — shim의 `env` 블록에 설정해도 효과가 없습니다. Cursor / OpenCode / Gemini CLI에서 도구가 7개만 보인다면 `npx @agentmemory/agentmemory`(또는 Docker 스택)를 시작하고 `AGENTMEMORY_URL=http://localhost:3111`을 설정하십시오. + +### 51개 도구 + +
+핵심 도구 (항상 사용 가능) + +| 도구 | 설명 | +|------|-------------| +| `memory_recall` | 과거 관측 검색 | +| `memory_compress_file` | 구조를 유지하면서 markdown 파일 압축 | +| `memory_save` | 통찰, 결정, 패턴 저장 | +| `memory_patterns` | 반복 패턴 감지 | +| `memory_smart_search` | 하이브리드 시맨틱 + 키워드 검색 | +| `memory_file_history` | 특정 파일에 대한 과거 관측 | +| `memory_sessions` | 최근 세션 목록 | +| `memory_timeline` | 시간순 관측 | +| `memory_profile` | 프로젝트 프로필 (개념, 파일, 패턴) | +| `memory_export` | 모든 메모리 데이터 내보내기 | +| `memory_relations` | 관계 그래프 쿼리 | + +
+ +
+확장 도구 (총 51개 — AGENTMEMORY_TOOLS=all 설정) + +| 도구 | 설명 | +|------|-------------| +| `memory_patterns` | 반복 패턴 감지 | +| `memory_timeline` | 시간순 관측 | +| `memory_relations` | 관계 그래프 쿼리 | +| `memory_graph_query` | 지식 그래프 순회 | +| `memory_consolidate` | 4-tier 통합 실행 | +| `memory_claude_bridge_sync` | MEMORY.md와 동기화 | +| `memory_team_share` | 팀원과 공유 | +| `memory_team_feed` | 최근 공유 항목 | +| `memory_audit` | 작업 감사 로그 | +| `memory_governance_delete` | 감사 로그를 남기는 삭제 | +| `memory_snapshot_create` | Git 버전 관리 스냅샷 | +| `memory_action_create` | 의존성이 있는 작업 항목 생성 | +| `memory_action_update` | 작업 상태 업데이트 | +| `memory_frontier` | 우선순위로 정렬된 차단 해제된 작업 | +| `memory_next` | 가장 중요한 다음 작업 하나 | +| `memory_lease` | 독점 작업 leases (멀티 에이전트) | +| `memory_routine_run` | 워크플로우 루틴 인스턴스화 | +| `memory_signal_send` | 에이전트 간 메시징 | +| `memory_signal_read` | 수신 확인이 있는 메시지 읽기 | +| `memory_checkpoint` | 외부 조건 게이트 | +| `memory_mesh_sync` | 인스턴스 간 P2P 동기화 | +| `memory_sentinel_create` | 이벤트 기반 워처 | +| `memory_sentinel_trigger` | 외부에서 sentinel 발화 | +| `memory_sketch_create` | 일시적 작업 그래프 | +| `memory_sketch_promote` | 영구로 승격 | +| `memory_crystallize` | 작업 체인 압축 | +| `memory_diagnose` | 헬스 체크 | +| `memory_heal` | 정체된 상태 자동 수정 | +| `memory_facet_tag` | dimension:value 태그 | +| `memory_facet_query` | facet 태그로 쿼리 | +| `memory_verify` | 출처 추적 | + +
+ +### 6 리소스 · 3 프롬프트 · 4 Skills + +| 유형 | 이름 | 설명 | +|------|------|-------------| +| Resource | `agentmemory://status` | 헬스, 세션 수, 메모리 수 | +| Resource | `agentmemory://project/{name}/profile` | 프로젝트별 인텔리전스 | +| Resource | `agentmemory://memories/latest` | 최신 10개 활성 메모리 | +| Resource | `agentmemory://graph/stats` | 지식 그래프 통계 | +| Prompt | `recall_context` | 검색 + 컨텍스트 메시지 반환 | +| Prompt | `session_handoff` | 에이전트 간 핸드오프 데이터 | +| Prompt | `detect_patterns` | 반복 패턴 분석 | +| Skill | `/recall` | 메모리 검색 | +| Skill | `/remember` | 장기 메모리에 저장 | +| Skill | `/session-history` | 최근 세션 요약 | +| Skill | `/forget` | 관측/세션 삭제 | + +### 독립형 MCP + +전체 서버 없이 실행 — 모든 MCP 클라이언트용. 다음 둘 다 동작합니다: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +또는 에이전트의 MCP 설정에 추가: + +대부분의 에이전트 (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +파일을 교체하지 말고 호스트의 기존 `mcpServers` 객체에 `agentmemory` 항목을 병합하십시오. 호스트의 `localhost`에 도달할 수 없는 샌드박스 클라이언트의 경우 env 블록에 `"AGENTMEMORY_FORCE_PROXY": "1"`을 추가하고 `AGENTMEMORY_URL`을 샌드박스가 도달할 수 있는 경로로 설정하십시오. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +저장소에서 플러그인 파일을 복사하십시오: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

실시간 뷰어

+ +`3113` 포트에서 자동 시작됩니다. 라이브 관측 스트림, 세션 탐색기, 메모리 브라우저, 지식 그래프 시각화, 헬스 대시보드. + +```bash +open http://localhost:3113 +``` + +뷰어 서버는 기본적으로 `127.0.0.1`에 바인딩됩니다. REST가 서빙하는 `/agentmemory/viewer` 엔드포인트는 일반 `AGENTMEMORY_SECRET` bearer-token 규칙을 따릅니다. CSP 헤더는 응답별 script nonce를 사용하며 인라인 핸들러 속성을 비활성화합니다 (`script-src-attr 'none'`). + +--- + +

iii Console

+ +`:3113`의 뷰어는 에이전트가 **기억한 것**을 보여줍니다. [iii console](https://iii.dev/docs/console)은 에이전트가 **무엇을 했는지**를 보여줍니다 — 모든 메모리 작업을 OpenTelemetry 추적으로, 모든 KV 항목을 편집 가능하게, 모든 함수를 호출 가능하게, 모든 스트림을 탭 가능하게. 동일한 메모리에 대한 두 창: 하나는 제품 형태, 하나는 엔진 형태. + +`memory_smart_search`가 발화되는 것을 보고 BM25 스캔 → 임베딩 조회 → RRF 융합 → 리랭커를 워터폴로 확인하십시오. KV 브라우저에서 정체된 통합 타이머를 편집하십시오. 조정된 페이로드로 `PostToolUse` hook을 재생하십시오. WebSocket 스트림을 고정하고 관측이 실시간으로 도착하는 것을 지켜보십시오. + +agentmemory는 모든 함수, 트리거, 상태 스코프, 스트림이 iii 프리미티브이기 때문에 — 사용자 정의도, 계측할 것도 없기 때문에 — 이를 무료로 제공합니다. + +

+ iii console Workers 페이지 — 연결된 워커들, 라이브 함수 수와 런타임 메타데이터가 표시된 agentmemory 인스턴스 포함 +
+ Workers 페이지: 연결된 모든 워커 — agentmemory 자체 포함 — PID, 함수 수, 런타임, last-seen 표시. +

+ +**이미 설치됨.** 콘솔은 `iii`와 함께 제공됩니다 — 별도의 인스톨러가 없습니다. + +**agentmemory와 함께 실행:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +그런 다음 `http://localhost:3114`을 여십시오. 실험적인 architecture-graph 페이지를 위해 `--enable-flow`를 추가하십시오. + +엔진 엔드포인트를 옮긴 경우에만 덮어쓰십시오: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**콘솔에서 할 수 있는 일:** + +| 페이지 | 용도 | +|------|-----------| +| **Workers** | 연결된 모든 워커와 그 라이브 메트릭 확인 — agentmemory 워커 자체 포함. | +| **Functions** | JSON 페이로드로 agentmemory의 모든 함수를 직접 호출 — 클라이언트를 연결하지 않고 `memory.recall`, `memory.consolidate`, `graph.query`를 테스트하기에 편리. | +| **Triggers** | HTTP, cron, event, state 트리거를 재생 — 통합 cron을 수동으로 발화, HTTP 라우트를 재시도, state 변경을 발생. | +| **States** | 전체 CRUD가 가능한 KV 브라우저 — 세션, 메모리 슬롯, 라이프사이클 타이머, 임베딩 인덱스 — 값을 그 자리에서 편집. | +| **Streams** | iii 스트림을 통해 흐르는 메모리 쓰기, hook 이벤트, 관측 업데이트를 위한 라이브 WebSocket 모니터. | +| **Queues** | 내구성 있는 큐 토픽 + 데드 레터 관리. 실패한 임베딩 / 압축 작업을 재생하거나 폐기. | +| **Traces** | OpenTelemetry 워터폴 / 플레임 / 서비스별 분해 뷰. `trace_id`로 필터링하여 단일 `memory.search`가 생성한 함수, DB 호출, 임베딩 요청을 정확히 확인. | +| **Logs** | trace/span ID에 필터링·상관된 구조화된 OTEL 로그. | +| **Config** | 런타임 설정 — 엔진이 실행 중인 워커, 프로바이더, 포트를 정확히 확인. | +| **Flow** | (선택, `--enable-flow`) 모든 워커, 트리거, 스트림의 인터랙티브 architecture graph. | + +

+ span별 지속 시간을 보여주는 iii console trace waterfall view +
+ Traces: 모든 메모리 작업에 대한 워터폴 / 플레임 / 서비스 분해. +

+ +**Traces는 이미 켜져 있습니다:** + +`iii-config.yaml`은 `iii-observability` 워커가 활성화된 상태로 제공됩니다(`exporter: memory`, `sampling_ratio: 1.0`, metrics + logs). 추가 설정이 필요 없습니다 — agentmemory가 시작되는 순간 모든 메모리 작업이 콘솔이 읽을 수 있는 trace span과 구조화된 로그를 방출합니다. + +대신 Jaeger/Honeycomb/Grafana Tempo로 내보내고 싶다면 `exporter: memory`를 `exporter: otlp`로 변경하고 iii의 가시성 문서에 따라 collector 엔드포인트를 설정하십시오. + +> **참고:** 콘솔 자체에는 인증이 적용되지 않습니다 — `127.0.0.1`에 바인딩된 채로 두고(기본값) 절대 공개적으로 노출하지 마십시오. + +--- + +

Powered by iii

+ +agentmemory는 **이미 실행 중인 [iii](https://iii.dev) 인스턴스**입니다. 함수, 트리거, KV 상태, 스트림, OTEL 추적 — 모두 iii 프리미티브입니다. Postgres, Redis, Express, pm2, Prometheus를 설치하지 않은 이유는 iii가 이들을 대체하기 때문입니다. + +그 말은 명령어 하나로 agentmemory에 완전히 새로운 기능을 확장할 수 있다는 뜻입니다. + +### 명령어 하나로 agentmemory 확장 + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +각 `iii worker add`는 agentmemory가 이미 실행 중인 동일한 엔진에 새 함수와 트리거를 등록합니다. 뷰어와 콘솔은 즉시 이를 인식합니다 — 재로드도, 새 통합도, 새 컨테이너도 필요 없습니다. + +| `iii worker add` | agentmemory 위에 무엇이 추가되는가 | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | 멀티 인스턴스 메모리: 모든 `remember`가 팬아웃, 모든 `search`가 합집합을 읽음 | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | 스케줄링된 라이프사이클 — 야간 통합, 주간 스냅샷, 고정된 시계에 따른 감쇠 | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | 내구성 있는 재시도: 실패한 임베딩 + 압축 작업은 재시작에도 살아남아 관측 손실 없음 | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | 모든 함수에 OTEL traces, metrics, logs — 첫날부터 `iii-config.yaml`에 연결됨 | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall`에서 나온 코드를 셸이 아니라 일회용 VM 안에서 실행 | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | 인메모리 KV 기본값을 넘어설 때 SQL 기반 state adapter | +| [`mcp`](https://workers.iii.dev/workers/mcp) | agentmemory의 MCP 옆에 추가 MCP 서버를 세우고 동일한 엔진을 공유 | + +전체 레지스트리: [workers.iii.dev](https://workers.iii.dev). 그곳의 모든 워커는 agentmemory가 사용하는 동일한 프리미티브로 구성됩니다 — 그리고 이미 갖고 있는 agentmemory도 그중 하나입니다. + +### iii가 무엇을 대체하는가 + +| 전통적인 스택 | agentmemory에서의 사용 | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + 인메모리 벡터 인덱스 | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker supervision | +| Prometheus / Grafana | iii OTEL + 헬스 모니터 | +| 사용자 정의 플러그인 시스템 | `iii worker add ` | + +**118개 소스 파일 · ~21,800 LOC · 950+ tests · 123개 함수 · 34개 KV 스코프** — 모두 세 가지 프리미티브 위에. `agentmemory plugin install`이 없습니다. 플러그인 시스템은 iii 자체입니다. + +--- + +

설정

+ +### LLM 프로바이더 + +agentmemory는 환경에서 자동 감지합니다. 기본적으로 프로바이더를 구성하거나 Claude subscription 폴백에 명시적으로 옵트인하지 않는 한 LLM 호출이 발생하지 않습니다. + +| 프로바이더 | 설정 | 비고 | +|----------|--------|-------| +| **No-op (기본)** | 설정 불필요 | LLM 기반 압축/요약이 비활성화됨. 합성 BM25 압축 + 리콜은 여전히 동작. 이전에 Claude-subscription 폴백에 의존했다면 아래의 `AGENTMEMORY_ALLOW_AGENT_SDK` 참고. | +| Anthropic API | `ANTHROPIC_API_KEY` | 토큰당 청구 | +| MiniMax | `MINIMAX_API_KEY` | Anthropic 호환 | +| Gemini | `GEMINI_API_KEY` | 임베딩도 활성화 | +| OpenRouter | `OPENROUTER_API_KEY` | 모든 모델 | +| Claude subscription 폴백 | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | 옵트인 전용. `@anthropic-ai/claude-agent-sdk` 세션을 스폰 — 무한 Stop-hook 재귀를 일으킨 전력이 있어서 더 이상 기본값이 아닙니다. | + +### 비용 인식 모델 선택 + +백그라운드 압축은 모든 관측마다 실행되므로 모델 선택이 월별 지출에 의미 있게 영향을 미칩니다. 캡처된 워크로드 데이터: 635 요청 / 888K 토큰 / 35시간의 활성 사용, 2026-05-23 가격으로 세 가지 OpenRouter 모델에 대해 실행. + +| 티어 | 모델 | Input / 1M | Output / 1M | 캡처된 35h 비용 | 비고 | +|------|-------|------------|-------------|---------------------------|-------| +| 권장 | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | 견고한 압축 + 요약 품질, Sonnet 대비 ~10배 저렴. | +| 권장 | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | 더 오래되었지만 압축 전용 워크로드에 여전히 적합. | +| 권장 | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | 세션이 코드 중심이라면 강한 코드 추론. | +| 프리미엄 | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | 고품질이지만 항시 백그라운드 작업에는 비쌈. | +| 프리미엄 | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Sonnet과 유사한 티어. | +| 회피 | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | 추론 클래스 모델; 압축에는 막대한 과지출. | + +`OPENROUTER_MODEL`이 프리미엄 티어 패턴과 일치하면 agentmemory가 런타임 경고를 출력합니다. 정보에 기반한 결정을 내렸다면 `AGENTMEMORY_SUPPRESS_COST_WARNING=1`로 한 번에 침묵시키십시오. + +메모리 작업에서의 품질 대 비용 트레이드오프: 압축은 비교적 느슨한 품질 기준을 가진 요약 작업입니다(사용자가 아니라 에이전트가 요약을 다시 읽습니다). DeepSeek-V4-Pro / Qwen3-Coder는 이 작업에서 Sonnet과 반올림 오차 내에 들어가면서 ~10배 적은 비용이 듭니다. 프리미엄 티어 모델은 직접 읽는 쿼리에 남겨두십시오. + +출처: [OpenRouter pricing for Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek pricing notes](https://api-docs.deepseek.com/quick_start/pricing/). + +### 멀티 에이전트 메모리 (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +여러 역할(architect / developer / reviewer / researcher / support-agent)이 하나의 agentmemory 서버를 공유하는 멀티 에이전트 설정에서, `AGENT_ID`는 모든 쓰기에 그것을 작성한 역할을 태깅합니다. `AGENTMEMORY_AGENT_SCOPE`는 리콜이 그 태그로 필터링되는지 여부를 제어합니다. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +두 가지 모드: + +| 모드 | 쓰기 태그 | 리콜 필터링 | 사용 시점 | +|------|------------|---------------|-------------| +| `shared` (기본) | 예 | 아니오 | 감사 로그가 있는 크로스 에이전트 컨텍스트. architect는 developer가 기록한 내용을 볼 수 있지만, 모든 행은 누가 말했는지 기록합니다. | +| `isolated` | 예 | 예 | 엄격한 분리. architect는 developer의 관측 / 메모리 / 세션을 절대 보지 않습니다. | + +`AGENT_ID`가 설정되었을 때 태깅되는 것: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. 역할은 `api::session::start` → `mem::observe` → `mem::compress` → KV로 흐릅니다. + +isolated 모드에서 필터링되는 것: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. 각 엔드포인트는 요청별로 덮어쓰기 위해 `?agentId=`을 받고, env 스코프를 완전히 옵트아웃하기 위해 `?agentId=*`을 받습니다. `/memories`는 또한 `agentId`가 undefined인 pre-AGENT_ID 메모리를 노출하기 위해 `?includeOrphans=true`를 받습니다. + +SDK / REST 레이어에서의 호출별 덮어쓰기: 모든 변형 엔드포인트(`/session/start`, `/remember`)는 env를 이기는 `agentId` 필드를 request body에서 받습니다. 많은 역할을 하나의 서버 프로세스로 라우팅하는 런타임에 유용합니다. + +`AGENT_ID`가 설정되지 않았을 때, 메모리는 스코프되지 않은 상태로 유지됩니다(레거시 동작, 태그 없음, 필터 없음). + +### 포트 + +agentmemory + iii-engine은 기본적으로 네 개의 포트에 바인딩합니다. 재시작이 `port in use`로 실패한다면, 이 표가 어떤 프로세스를 찾을지 알려줍니다. + +| 포트 | 프로세스 | 용도 | Env 덮어쓰기 | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | 내부 streams 워커 (agentmemory + 뷰어가 소비) | `III_STREAMS_PORT` | +| `3113` | agentmemory | 실시간 뷰어 (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — 워커가 여기에 등록, OTel 텔레메트리가 이 위로 흐름 | `III_ENGINE_URL` (전체 URL, 기본 `ws://localhost:49134`) | + +크래시된 실행 후 포트가 바인딩된 채로 남아 있을 때의 정리: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop`은 정상 종료 시 워커와 엔진 pidfile을 모두 깔끔하게 회수합니다. 위의 수동 정리는 어떤 pidfile도 남지 않은 크래시 후 케이스에만 해당됩니다. + +### 설정 파일 + +매 셸에서 변수를 export하는 대신 agentmemory 런타임 설정을 `~/.agentmemory/.env`에 두십시오. 뷰어가 `export ANTHROPIC_API_KEY=...` 같은 setup 힌트를 보여주면, `export` 접두사 없이 `ANTHROPIC_API_KEY=...`로 이 파일에 복사한 후 agentmemory를 재시작하십시오. + +프로세스 환경 변수는 여전히 동작하며 파일의 값보다 우선순위가 높습니다. + +Windows에서 동일한 파일은 `%USERPROFILE%\.agentmemory\.env`에 있습니다: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +API 키 대신 Claude Code Pro/Max subscription으로 테스트하려면 명시적으로 옵트인하십시오: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +원한다면 동일한 파일에서 graph 또는 consolidation 기능을 활성화하십시오: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### 환경 변수 + +`~/.agentmemory/.env` 생성: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +`3111` 포트의 124개 엔드포인트. REST API는 기본적으로 `127.0.0.1`에 바인딩됩니다. 보호된 엔드포인트는 `AGENTMEMORY_SECRET`이 설정되었을 때 `Authorization: Bearer `를 요구하며, mesh sync 엔드포인트는 양쪽 피어 모두에서 `AGENTMEMORY_SECRET`을 요구합니다. + +
+주요 엔드포인트 + +| Method | Path | 설명 | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | 헬스 체크 (항상 공개) | +| `POST` | `/agentmemory/session/start` | 세션 시작 + 컨텍스트 가져오기 | +| `POST` | `/agentmemory/session/end` | 세션 종료 | +| `POST` | `/agentmemory/observe` | 관측 캡처 | +| `POST` | `/agentmemory/smart-search` | 하이브리드 검색 | +| `POST` | `/agentmemory/context` | 컨텍스트 생성 | +| `POST` | `/agentmemory/remember` | 장기 메모리에 저장 | +| `POST` | `/agentmemory/forget` | 관측 삭제 | +| `POST` | `/agentmemory/enrich` | 파일 컨텍스트 + 메모리 + 버그 | +| `GET` | `/agentmemory/profile` | 프로젝트 프로필 | +| `GET` | `/agentmemory/export` | 모든 데이터 내보내기 | +| `POST` | `/agentmemory/import` | JSON에서 가져오기 | +| `POST` | `/agentmemory/graph/query` | 지식 그래프 쿼리 | +| `POST` | `/agentmemory/team/share` | 팀과 공유 | +| `GET` | `/agentmemory/audit` | 감사 로그 | + +전체 엔드포인트 목록: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

개발

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**전제 조건:** Node.js >= 20, [iii-engine](https://iii.dev/docs) 또는 Docker + +

라이선스

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.pt-BR.md b/READMEs/README.pt-BR.md new file mode 100644 index 0000000..e9bbc32 --- /dev/null +++ b/READMEs/README.pt-BR.md @@ -0,0 +1,1369 @@ +

+ agentmemory — Memória persistente para agentes de codificação com IA +

+ +

+ + Seu agente de codificação lembra de tudo. Chega de re-explicar. + Built on iii engine +
+ Memória persistente para Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode e qualquer cliente MCP. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Documento de design: 1200 stars / 172 forks no gist +

+ +

+ O gist estende o padrão LLM Wiki do Karpathy com pontuação de confiança, ciclo de vida, grafos de conhecimento e busca híbrida: agentmemory é a implementação. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ Demonstração do agentmemory +

+ +

+ Instalação • + Início rápido • + Benchmarks • + Comparativo • + Agentes • + Como funciona • + MCP • + Viewer • + iii Console • + Powered by iii • + Configuração • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +Ou via `npx` (sem instalação): + +```bash +npx @agentmemory/agentmemory +``` + +Atenção — o npx faz cache por versão. Se um simples `npx @agentmemory/agentmemory` servir uma release antiga, force a mais recente com `npx -y @agentmemory/agentmemory@latest`, ou limpe o cache uma vez com `rm -rf ~/.npm/_npx` (macOS/Linux; no Windows apague `%LOCALAPPDATA%\npm-cache\_npx`). A primeira execução via npx a partir da v0.9.16+ pergunta inline se você quer instalar globalmente, de modo que o comando `agentmemory` simples funcione em qualquer lugar depois. + +Opções completas em [Início rápido](#quick-start) abaixo. Conexão específica por agente em [Funciona com qualquer agente](#works-with-every-agent). + +--- + +

Funciona com qualquer agente

+ +agentmemory funciona com qualquer agente que suporte hooks, MCP ou REST API. Todos os agentes compartilham o mesmo servidor de memória. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+native plugin + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+native plugin + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+native plugin + MCP +
+Hermes
+Hermes
+native plugin + MCP +
+pi
+pi
+native plugin + MCP +
+OpenHuman
+OpenHuman
+native Memory trait backend +
+Cursor
+Cursor
+MCP server +
+Gemini CLI
+Gemini CLI
+MCP server +
+OpenCode
+OpenCode
+22 hooks + MCP + plugin +
+Cline
+Cline
+MCP server +
+Goose
+Goose
+MCP server +
+Kilo Code
+Kilo Code
+MCP server +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP server +
+Windsurf
+Windsurf
+MCP server +
+Roo Code
+Roo Code
+MCP server +
+ +

+ Funciona com qualquer agente que fale MCP ou HTTP. Um servidor, memórias compartilhadas entre todos eles. +

+ +--- + +Você explica a mesma arquitetura toda sessão. Você redescobre os mesmos bugs. Você reensina as mesmas preferências. A memória integrada (CLAUDE.md, .cursorrules) bate no teto das 200 linhas e fica desatualizada. agentmemory resolve isso. Ele captura silenciosamente o que seu agente faz, comprime em memória pesquisável e injeta o contexto certo quando a próxima sessão começa. Um comando. Funciona em todos os agentes. + +**O que muda:** Na sessão 1 você configura autenticação JWT. Na sessão 2 você pede rate limiting. O agente já sabe que sua autenticação usa o middleware jose em `src/middleware/auth.ts`, que seus testes cobrem a validação de tokens e que você escolheu jose em vez de jsonwebtoken por compatibilidade com Edge. Sem re-explicar. Sem copiar e colar. O agente simplesmente *sabe*. + +```bash +npx @agentmemory/agentmemory +``` + +> **Novidade na v0.9.0** — Landing em [agent-memory.dev](https://agent-memory.dev), conector de filesystem (`@agentmemory/fs-watcher`), MCP standalone agora faz proxy para o servidor em execução, então hooks e viewer combinam, política de auditoria codificada em cada caminho de deleção, e health para de marcar `memory_critical` em processos Node pequenos. Notas completas em [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18). + +--- + +

Benchmarks

+ + + + + + +
+ +### Precisão de recuperação + +**coding-agent-life-v1** (corpus interno, reproduzível em sandbox) + +| Adaptador | P@5 | R@5 | Taxa de acerto top-5 | Latência p50 | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep baseline | 0.267 | 0.967 | 15 / 15 | 0 ms | + +Taxa de acerto top-5 de 100%. **2,2×** mais precisão que a baseline grep com a mesma entrada. Detalhamento completo por tipo: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 perguntas) + +| Sistema | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| BM25-only fallback | 86.2% | 94.6% | 71.5% | + + + +### Economia de tokens + +| Abordagem | Tokens/ano | Custo/ano | +|---|---|---| +| Colar contexto completo | 19.5M+ | Impossível (excede a janela) | +| Resumido por LLM | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + embeddings locais | ~170K | **$0** | + +
+ +> Modelo de embedding: `all-MiniLM-L6-v2` (local, gratuito, sem API key). Relatórios completos: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Comparativo com concorrentes: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory vs mem0, Letta, Khoj, claude-mem, Hippo. + +**Reproduza localmente:** [`eval/README.md`](../eval/README.md) — harness com adaptadores plugáveis para LongMemEval `_s` (500-Q públicas) e `coding-agent-life-v1` (corpus interno de 15 sessões). Adaptadores grep / vector / agentmemory são pontuados lado a lado, saída em NDJSON, e as scorecards publicadas ficam em [`docs/benchmarks/`](../docs/benchmarks/). + +**Combina com [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) e [Graphify](https://github.com/safishamsi/graphify).** Indexação de grafos de código, pipelines de build multiagente e grafos de conhecimento mais amplos sobre docs / PDFs / imagens / vídeos. agentmemory lembra do trabalho; esses três projetos iluminam o resto da camada de contexto. Recipes e tabela de roteamento por pergunta: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

Comparativo

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Built-in (CLAUDE.md)
TipoEngine de memória + servidor MCPAPI de camada de memóriaRuntime de agente completoArquivo estático
Retrieval R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
Captura automática12 hooks (esforço manual zero)Chamadas manuais a add()O agente se autoeditaEdição manual
BuscaBM25 + Vector + Graph (fusão RRF)Vector + GraphVector (archival)Carrega tudo no contexto
MultiagenteMCP + REST + leases + signalsAPI (sem coordenação)Somente dentro do runtime do LettaArquivos por agente
Dependência de frameworkNenhuma (qualquer cliente MCP)NenhumaAlta (precisa usar Letta)Formato por agente
Dependências externasNenhuma (SQLite + iii-engine)Qdrant / pgvectorPostgres + BD vetorialNenhuma
Ciclo de vida da memóriaConsolidação de 4 níveis + decaimento + auto-esquecimentoExtração passivaGerenciado pelo agentePoda manual
Eficiência de tokens~1.900 tokens/sessão ($10/ano)Varia conforme a integraçãoMemória principal no contexto22K+ tokens com 240 obs
Viewer em tempo realSim (port 3113)Dashboard na nuvemDashboard na nuvemNão
Self-hostedSim (padrão)OpcionalOpcionalSim
+ +--- + +

Início rápido

+ +Compatibilidade: este release tem como alvo o `iii-sdk` estável `^0.11.0` e o iii-engine v0.11.x. + +### Experimente em 30 segundos + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` semeia 3 sessões realistas (autenticação JWT, correção de N+1 queries, rate limiting) e roda buscas semânticas sobre elas. Você verá que ele encontra "N+1 query fix" ao buscar "database performance optimization" — algo que matching por palavra-chave não consegue fazer. + +Abra `http://localhost:3113` para acompanhar a memória sendo construída ao vivo. + +### Recomendado: instale globalmente + +`npx` faz cache por versão. Se você rodou `npx @agentmemory/agentmemory@0.9.14` semana passada, um simples `npx @agentmemory/agentmemory` pode servir a versão velha 0.9.14 a partir de `~/.npm/_npx/`, e não a mais recente. Instale uma vez e o comando `agentmemory` funciona em qualquer lugar: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +A partir da v0.9.16, a primeira execução via npx pergunta inline se você quer instalar globalmente — responda `Y` uma vez e está pronto. Se pular, recorra a qualquer um destes para um fetch limpo: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +No Windows / PowerShell, o equivalente para limpar cache é `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — a forma `npx -y ...@latest` acima é a opção multiplataforma. + +### Session Replay + +Toda sessão que o agentmemory grava é reproduzível. Abra o viewer, escolha a aba **Replay** e arraste pela timeline: prompts, chamadas a tools, resultados e respostas renderizam como eventos discretos com play/pause, controle de velocidade (0,5×–4×) e atalhos de teclado (espaço para alternar, setas para avançar passo a passo). + +Já tem transcripts antigos JSONL do Claude Code que quer trazer para cá? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +As sessões importadas aparecem no seletor de Replay ao lado das nativas. Sob o capô, cada entrada passa pelas funções iii `mem::replay::load`, `mem::replay::sessions` e `mem::replay::import-jsonl` — sem servidores paralelos. + +### Atualização / Manutenção + +Use o comando de manutenção quando você intencionalmente quiser atualizar seu runtime local: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Aviso: este comando muta o workspace/runtime atual. Pode atualizar dependências JavaScript e puxar a imagem Docker fixada `iiidev/iii:0.11.2`. Nunca instala um engine iii sem fixação ou mais recente. + +Detalhes de implementação estão em `src/cli.ts` (veja `runUpgrade` na região `src/cli.ts:544-595`). + +### Claude Code (um bloco, cole) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code sem instalar o plugin (caminho MCP standalone) + +Se você cabear o servidor MCP do agentmemory via `~/.claude.json` diretamente em vez de usar `/plugin install`, o Claude Code nunca resolve `${CLAUDE_PLUGIN_ROOT}` e você tem que apontar os scripts de hook para caminhos absolutos em `~/.claude/settings.json`. Esses caminhos tipicamente embutem a versão do agentmemory (ex: `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), então a próxima atualização quebra silenciosamente todos os hooks. + +Contorno: + +```bash +agentmemory connect claude-code --with-hooks +``` + +Isso mescla os mesmos comandos de hook em `~/.claude/settings.json` com caminhos absolutos resolvidos para o diretório `plugin/` empacotado do pacote `@agentmemory/agentmemory` atualmente instalado. Rode o comando novamente após atualizar o agentmemory para atualizar os caminhos. Entradas de usuário no mesmo arquivo são preservadas; apenas entradas anteriores do agentmemory são substituídas. Usar o caminho `/plugin install` continua sendo a abordagem recomendada. +Para deploys remotos ou protegidos, inicie o Claude Code com `AGENTMEMORY_URL` e `AGENTMEMORY_SECRET` definidos. O plugin repassa ambos os valores para seu servidor MCP empacotado; quando `AGENTMEMORY_URL` está vazio, o shim MCP usa `http://localhost:3111`. + +### Codex CLI (plataforma de plugins do Codex) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +O plugin do Codex é servido a partir do mesmo diretório `plugin/` do plugin do Claude Code. Ele registra: + +- `@agentmemory/mcp` como servidor MCP (faz proxy de todas as 51 tools quando `AGENTMEMORY_URL` aponta para um servidor agentmemory em execução; cai para 7 tools localmente quando não há servidor acessível) +- 6 hooks de ciclo de vida: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skills: `/recall`, `/remember`, `/session-history`, `/forget` + +A engine de hooks do Codex injeta `CLAUDE_PLUGIN_ROOT` nos subprocessos de hook (conforme [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), então os mesmos scripts de hook funcionam nos dois hosts sem duplicação. Os eventos Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure são exclusivos do Claude Code e não são registrados para o Codex. + +#### Codex Desktop: hooks do plugin atualmente silenciosos (com contorno) + +`CodexHooks` e `PluginHooks` são estáveis e habilitados por padrão em [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), mas as builds atuais do Codex Desktop não despacham `hooks.json` local de plugin ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). As tools MCP continuam funcionando; só as observações de ciclo de vida estão faltando. + +Até que o upstream corrija, espelhe os mesmos comandos de hook no `~/.codex/hooks.json` global: + +```bash +agentmemory connect codex --with-hooks +``` + +Isso adiciona um bloco idempotente em `~/.codex/hooks.json` referenciando caminhos absolutos para os scripts empacotados (sem necessidade de expansão de `${CLAUDE_PLUGIN_ROOT}` no escopo de usuário). Rode o mesmo comando novamente após atualizar o agentmemory para atualizar os caminhos. Entradas de usuário no mesmo arquivo são preservadas; só entradas anteriores do agentmemory são substituídas. + +
+OpenClaw (cole este prompt) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Guia completo: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (cole este prompt) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Guia completo: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Outros agentes + +Inicie o servidor de memória: `npx @agentmemory/agentmemory` + +A entrada do agentmemory é o **mesmo bloco de servidor MCP** em todo host que usa o formato `mcpServers` (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Mescle esta entrada no objeto `mcpServers` existente** no arquivo de configuração do host — não substitua o arquivo. Se o arquivo já tem outros servidores, adicione `agentmemory` ao lado deles como outra chave dentro de `mcpServers`. Se `mcpServers` não existe, cole o bloco dentro de `{ "mcpServers": { ... } }`. Os placeholders `${VAR}` herdam `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` do shell no momento em que o servidor MCP sobe — variáveis não definidas passam string vazia e o shim cai para `http://localhost:3111`. Uma entrada cabeada cobre deploys tanto locais quanto remotos (k8s / com reverse-proxy). + +| Agente | Arquivo de configuração | Notas | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | Mescle em `mcpServers`. Deeplink de um clique também disponível no site. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | Mescle em `mcpServers`. Reinicie o Claude Desktop após editar. | +| **Cline / Roo Code / Kilo Code** | Configurações MCP do Cline (Settings UI → MCP Servers → Edit) | Mesmo bloco `mcpServers`. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Mesmo bloco `mcpServers`. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (mescla automaticamente). | +| **OpenClaw** | Configuração MCP do OpenClaw | Mesmo bloco `mcpServers`, ou use o [memory plugin](../integrations/openclaw/) mais profundo. | +| **Codex CLI (somente MCP)** | `.codex/config.toml` | Formato TOML: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, ou adicione `[mcp_servers.agentmemory]` manualmente. | +| **Codex CLI (plugin completo)** | Marketplace de plugins do Codex | `codex plugin marketplace add rohitg00/agentmemory` e depois `codex plugin add agentmemory@agentmemory`. Registra MCP + 6 hooks de ciclo de vida (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skills. No Codex Desktop, rode também `agentmemory connect codex --with-hooks` até que [openai/codex#16430](https://github.com/openai/codex/issues/16430) seja mergeado — os hooks de plugin estão silenciosos lá. | +| **OpenCode (somente MCP)** | `opencode.json` | Formato diferente — chave `mcp` no topo, comando como array: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (plugin completo)** | `plugin/opencode/` | 22 hooks de captura automática cobrindo ciclo de vida de sessão, mensagens, tools e erros. Dois comandos slash (`/recall`, `/remember`). Copie `plugin/opencode/` para seu workspace do OpenCode e adicione a entrada do plugin em `opencode.json`. Tabela completa de hooks + análise de gaps em [`plugin/opencode/README.md`](../plugin/opencode/README.md). | +| **pi** | `~/.pi/agent/extensions/agentmemory` | Copie [`integrations/pi`](../integrations/pi/) e reinicie o pi. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Use o [memory provider plugin](../integrations/hermes/) mais profundo com `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` escreve o bloco `mcpServers` padrão. O payload dos hooks é compatível em nível de campo com o Claude Code, então os scripts dos 12 hooks existentes funcionam sem modificação — cabê-los na seção `hooks` do mesmo `settings.json`. | +| **Antigravity** (substitui o Gemini CLI) | `mcp_config.json` (no diretório User do Antigravity) | `agentmemory connect antigravity` escreve o bloco `mcpServers` padrão. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. Use após o sunset do Gemini CLI em 2026-06-18. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` escreve a configuração no nível do usuário. Overrides por workspace vão em `.kiro/settings/mcp.json` ao lado do seu código. | +| **Goose** | UI de configurações MCP do Goose | Mesmo bloco `mcpServers`. | +| **Aider** | n/a | Fale diretamente com a REST API: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Qualquer agente (32+)** | n/a | `npx skillkit install agentmemory` autodetecta o host e mescla. | + +**Clientes MCP em sandbox** (Flatpak / Snap / contêineres restritivos) que não conseguem alcançar o `localhost` do host: também defina `"AGENTMEMORY_FORCE_PROXY": "1"` no bloco `env`, e aponte `AGENTMEMORY_URL` para uma rota que o sandbox realmente alcance (ex: seu IP de LAN). + +### Acesso programático (Python / Rust / Node) + +agentmemory registra suas operações principais como funções iii (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). Qualquer linguagem com um SDK iii pode chamá-las diretamente via `ws://localhost:49134` — sem um cliente REST separado por linguagem. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Exemplo prático: [`examples/python/`](../examples/python/) (quickstart + fluxo de observação/recall). A REST em `:3111` continua disponível para hosts sem runtime iii. + +### A partir do código-fonte + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Isso inicia o agentmemory com um `iii-engine` local se `iii` já estiver instalado, ou cai para Docker Compose se o Docker estiver disponível. REST, streams e o viewer fazem bind em `127.0.0.1` por padrão. + +Instale o `iii-engine` manualmente. **O agentmemory atualmente fixa o `iii-engine` em `v0.11.2`** — `v0.11.6` introduz um novo modelo que faz sandbox de tudo via `iii worker add` que o agentmemory ainda não foi refatorado para usar. O pin sai assim que o refactor cair. Sobrescreva com `AGENTMEMORY_III_VERSION=` se você migrou manualmente para o modelo de sandbox. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** troque `aarch64-apple-darwin` por `x86_64-apple-darwin` +- **Linux x64:** troque por `x86_64-unknown-linux-gnu` +- **Linux arm64:** troque por `aarch64-unknown-linux-gnu` +- **Windows:** baixe `iii-x86_64-pc-windows-msvc.zip` de [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2), extraia `iii.exe`, adicione ao PATH + +Ou use Docker (o `docker-compose.yml` empacotado puxa `iiidev/iii:0.11.2`). Docs completas: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory roda em Windows 10/11, mas só o pacote Node.js não é suficiente — você também precisa do runtime `iii-engine` (um binário nativo separado) como processo em segundo plano. O instalador oficial upstream é um script `sh` e hoje não há instalador PowerShell nem pacote scoop/winget, então usuários de Windows têm dois caminhos: + +**Opção A — Binário Windows pré-compilado (recomendado):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Opção B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Opção C — apenas MCP standalone (sem engine):** se você só precisa das tools MCP para seu agente e não precisa da REST API, viewer ou cron jobs, pule o engine completamente: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Diagnóstico para Windows:** se `npx @agentmemory/agentmemory` falhar, rode novamente com `--verbose` para ver o stderr real do engine. Modos de falha comuns: + +| Sintoma | Correção | +|---|---| +| `iii-engine process started` seguido de `did not become ready within 15s` | Engine crashou na inicialização — rode novamente com `--verbose`, verifique stderr | +| `Could not start iii-engine` | Nem `iii.exe` nem Docker estão instalados. Veja Opção A ou B acima | +| Conflito de porta | `netstat -ano \| findstr :3111` para ver o que está em bind, mate o processo ou use `--port ` | +| Fallback do Docker é pulado mesmo com Docker instalado | Confira se o Docker Desktop está de fato rodando (ícone na bandeja do sistema) | + +> Nota: o **engine** iii é um binário pré-compilado, não um crate do cargo — não tente instalá-lo com `cargo install`. (Os **SDKs** do iii são publicados no crates.io, npm e PyPI, mas o agentmemory não precisa deles.) Métodos de instalação do engine suportados, todos fixados em v0.11.2: o binário pré-compilado v0.11.2 acima, o script de instalação `sh` upstream **com a fixação de versão** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) e a imagem Docker `iiidev/iii:0.11.2`. Um simples `install.sh | sh` instala o engine **mais recente**, que o agentmemory não suporta — sempre passe `VERSION=0.11.2`. O mais fácil de tudo: basta rodar `npx @agentmemory/agentmemory`, que busca o engine fixado em `~/.agentmemory/bin` para você. + +--- + +

Deploy

+ +Templates de um clique para hosts gerenciados. Cada um inclui um +Dockerfile autocontido que puxa `@agentmemory/agentmemory` do npm +e copia o binário do iii engine da imagem oficial `iiidev/iii` no +Docker Hub — sem necessidade de imagem pré-compilada do agentmemory. +Armazenamento persistente monta em `/data`; o entrypoint de primeiro +boot sobrescreve a configuração iii empacotada pelo npm (que faz +bind em `127.0.0.1`) por uma ajustada para deploy que faz bind em +`0.0.0.0` e usa caminhos absolutos `/data`, gera o segredo HMAC e +depois reduz privilégios de `root` para `node` via `gosu` antes de +fazer exec do CLI do agentmemory. + +

+ Deploy to fly.io + Deploy to Railway +

+ +O botão de deploy de um clique do Render exige um `render.yaml` na raiz do repositório, que mantemos limpo de propósito. Use o fluxo Render Blueprint documentado em [`deploy/render/`](../deploy/render/README.md) para apontar para o blueprint do repo manualmente. + +Detalhes completos de setup (captura de HMAC, túnel SSH do viewer, rotação, backup, mínimos de custo) ficam em [`deploy/`](../deploy/README.md): + +- [`deploy/fly`](../deploy/fly/README.md) — máquina única com `auto_stop_machines = "stop"`; mais barato em idle. +- [`deploy/railway`](../deploy/railway/README.md) — taxa plana do plano Hobby, volume no dashboard. +- [`deploy/render`](../deploy/render/README.md) — fluxo Blueprint, snapshots automáticos de disco nos planos pagos. +- [`deploy/coolify`](../deploy/coolify/README.md) — self-hosted no seu próprio VPS via [Coolify](https://coolify.io/self-hosted); mesma stack Docker Compose, você possui o host e os dados. + +Somente a porta `3111` é publicada. O viewer em `3113` fica em bind no loopback dentro do contêiner — o README de cada template documenta o padrão de túnel SSH para alcançá-lo. + +--- + +

Por que agentmemory

+ +Todo agente de codificação esquece tudo quando a sessão termina. Você desperdiça os primeiros 5 minutos de toda sessão re-explicando sua stack. agentmemory roda em segundo plano e elimina isso por completo. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### vs memória integrada do agente + +Todo agente de codificação com IA vem com memória integrada — Claude Code tem `MEMORY.md`, Cursor tem notepads, Cline tem memory bank. Funcionam como post-its. agentmemory é o banco de dados pesquisável por trás dos post-its. + +| | Integrada (CLAUDE.md) | agentmemory | +|---|---|---| +| Escala | teto de 200 linhas | Ilimitado | +| Busca | Carrega tudo no contexto | BM25 + vector + graph (só top-K) | +| Custo em tokens | 22K+ com 240 observações | ~1.900 tokens (92% menos) | +| Cross-agent | Arquivos por agente | MCP + REST (qualquer agente) | +| Coordenação | Nenhuma | Leases, signals, actions, routines | +| Observabilidade | Leitura manual de arquivos | Viewer em tempo real em :3113 | + +--- + +

Como funciona

+ +### Pipeline de memória + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### Consolidação de memória em 4 níveis + +Inspirada em como o cérebro humano processa memória — não muito diferente da consolidação do sono. + +| Nível | O quê | Analogia | +|------|------|---------| +| **Working** | Observações brutas a partir do uso de tools | Memória de curto prazo | +| **Episodic** | Resumos de sessão comprimidos | "O que aconteceu" | +| **Semantic** | Fatos e padrões extraídos | "O que eu sei" | +| **Procedural** | Workflows e padrões de decisão | "Como fazer" | + +As memórias decaem com o tempo (curva de Ebbinghaus). Memórias acessadas com frequência se reforçam. Memórias velhas são evictadas automaticamente. Contradições são detectadas e resolvidas. + +### O que é capturado + +| Hook | Captura | +|------|----------| +| `SessionStart` | Caminho do projeto, ID da sessão | +| `UserPromptSubmit` | Prompts do usuário (filtrados por privacidade) | +| `PreToolUse` | Padrões de acesso a arquivos + contexto enriquecido | +| `PostToolUse` | Nome da tool, entrada, saída | +| `PostToolUseFailure` | Contexto do erro | +| `PreCompact` | Reinjeta memória antes da compactação | +| `SubagentStart/Stop` | Ciclo de vida de sub-agentes | +| `Stop` | Resumo de fim de sessão | +| `SessionEnd` | Marcador de sessão completa | + +### Principais capacidades + +| Capacidade | Descrição | +|---|---| +| **Captura automática** | Todo uso de tool registrado via hooks — esforço manual zero | +| **Busca semântica** | BM25 + vector + grafo de conhecimento com fusão RRF | +| **Evolução de memória** | Versionamento, supersessão, grafos de relacionamento | +| **Auto-esquecimento** | Expiração por TTL, detecção de contradição, evicção por importância | +| **Privacy first** | API keys, segredos e tags `` são removidos antes do armazenamento | +| **Self-healing** | Circuit breaker, cadeia de fallback de providers, monitoramento de saúde | +| **Ponte Claude** | Sincronização bidirecional com MEMORY.md | +| **Grafo de conhecimento** | Extração de entidades + travessia BFS | +| **Memória de time** | Compartilhado namespaced + privado entre membros do time | +| **Provenance de citação** | Rastreia qualquer memória de volta às observações originais | +| **Snapshots Git** | Versiona, faz rollback e diff do estado de memória | + +--- + + + +Recuperação triple-stream combinando três sinais: + +| Stream | O que faz | Quando | +|---|---|---| +| **BM25** | Matching de palavra-chave com stemming + expansão de sinônimos | Sempre ativo | +| **Vector** | Similaridade de cosseno sobre embeddings densos | Provider de embedding configurado | +| **Graph** | Travessia do grafo de conhecimento via matching de entidades | Entidades detectadas na query | + +Fundidos com Reciprocal Rank Fusion (RRF, k=60) e diversificados por sessão (máximo de 3 resultados por sessão). + +BM25 tokeniza grego, cirílico, hebraico, árabe e latim acentuado de fábrica. Para memórias em chinês / japonês / coreano, instale os segmentadores opcionais (`npm install @node-rs/jieba tiny-segmenter`) para quebrar runs CJK em tokens em nível de palavra; sem eles, o agentmemory faz soft-fallback para tokenização por run inteiro e imprime uma dica única no stderr. + +### Providers de embedding + +agentmemory autodetecta seu provider. Para melhores resultados, instale embeddings locais (gratuito): + +```bash +npm install @xenova/transformers +``` + +| Provider | Modelo | Custo | Notas | +|---|---|---|---| +| **Local (recomendado)** | `all-MiniLM-L6-v2` | Gratuito | Offline, +8pp de recall sobre BM25-only | +| Gemini | `gemini-embedding-001` | Free tier | 100+ idiomas, 768/1536/3072 dims (MRL), entrada de 2048 tokens. Substitui `text-embedding-004` ([deprecado, encerramento em 14 de janeiro de 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | Maior qualidade | +| Voyage AI | `voyage-code-3` | Pago | Otimizado para código | +| Cohere | `embed-english-v3.0` | Trial gratuito | Uso geral | +| OpenRouter | Qualquer modelo | Varia | Proxy multi-modelo | + +--- + +

Servidor MCP

+ +53 tools, 6 resources, 3 prompts e 4 skills — o toolkit MCP de memória mais completo para qualquer agente. + +> **Shim MCP vs servidor completo:** o pacote publicado `@agentmemory/mcp` é um shim fino. Expõe a superfície completa de 51 tools **apenas quando consegue alcançar um servidor agentmemory em execução** via `AGENTMEMORY_URL` (modo proxy). Sem servidor acessível, o shim cai para um set local de 7 tools (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). A variável de ambiente `AGENTMEMORY_TOOLS=core|all` é uma flag *do lado do servidor* — defini-la no bloco `env` do shim não tem efeito. Se você vê só 7 tools no Cursor / OpenCode / Gemini CLI, inicie `npx @agentmemory/agentmemory` (ou a stack Docker) e defina `AGENTMEMORY_URL=http://localhost:3111`. + +### 51 Tools + +
+Tools principais (sempre disponíveis) + +| Tool | Descrição | +|------|-------------| +| `memory_recall` | Busca observações passadas | +| `memory_compress_file` | Comprime arquivos markdown preservando a estrutura | +| `memory_save` | Salva um insight, decisão ou padrão | +| `memory_patterns` | Detecta padrões recorrentes | +| `memory_smart_search` | Busca híbrida semântica + por palavras | +| `memory_file_history` | Observações passadas sobre arquivos específicos | +| `memory_sessions` | Lista sessões recentes | +| `memory_timeline` | Observações cronológicas | +| `memory_profile` | Perfil de projeto (conceitos, arquivos, padrões) | +| `memory_export` | Exporta todos os dados de memória | +| `memory_relations` | Consulta o grafo de relacionamentos | + +
+ +
+Tools estendidas (51 no total — defina AGENTMEMORY_TOOLS=all) + +| Tool | Descrição | +|------|-------------| +| `memory_patterns` | Detecta padrões recorrentes | +| `memory_timeline` | Observações cronológicas | +| `memory_relations` | Consulta o grafo de relacionamentos | +| `memory_graph_query` | Travessia do grafo de conhecimento | +| `memory_consolidate` | Executa a consolidação de 4 níveis | +| `memory_claude_bridge_sync` | Sincroniza com MEMORY.md | +| `memory_team_share` | Compartilha com membros do time | +| `memory_team_feed` | Itens compartilhados recentes | +| `memory_audit` | Trilha de auditoria de operações | +| `memory_governance_delete` | Deleção com trilha de auditoria | +| `memory_snapshot_create` | Snapshot versionado no Git | +| `memory_action_create` | Cria itens de trabalho com dependências | +| `memory_action_update` | Atualiza status de action | +| `memory_frontier` | Actions desbloqueadas ranqueadas por prioridade | +| `memory_next` | A única action mais importante a seguir | +| `memory_lease` | Leases exclusivos de actions (multiagente) | +| `memory_routine_run` | Instancia rotinas de workflow | +| `memory_signal_send` | Mensageria entre agentes | +| `memory_signal_read` | Lê mensagens com confirmação de recebimento | +| `memory_checkpoint` | Portões de condições externas | +| `memory_mesh_sync` | Sincronização P2P entre instâncias | +| `memory_sentinel_create` | Watchers dirigidos por eventos | +| `memory_sentinel_trigger` | Dispara sentinels externamente | +| `memory_sketch_create` | Grafos de actions efêmeros | +| `memory_sketch_promote` | Promove para permanente | +| `memory_crystallize` | Compacta cadeias de actions | +| `memory_diagnose` | Health checks | +| `memory_heal` | Corrige automaticamente estado travado | +| `memory_facet_tag` | Tags dimension:value | +| `memory_facet_query` | Consulta por tags de facet | +| `memory_verify` | Rastreia provenance | + +
+ +### 6 Resources · 3 Prompts · 4 Skills + +| Tipo | Nome | Descrição | +|------|------|-------------| +| Resource | `agentmemory://status` | Saúde, contagem de sessões, contagem de memórias | +| Resource | `agentmemory://project/{name}/profile` | Inteligência por projeto | +| Resource | `agentmemory://memories/latest` | As 10 memórias ativas mais recentes | +| Resource | `agentmemory://graph/stats` | Estatísticas do grafo de conhecimento | +| Prompt | `recall_context` | Busca + retorna mensagens de contexto | +| Prompt | `session_handoff` | Dados de handoff entre agentes | +| Prompt | `detect_patterns` | Analisa padrões recorrentes | +| Skill | `/recall` | Busca na memória | +| Skill | `/remember` | Salva na memória de longo prazo | +| Skill | `/session-history` | Resumos recentes de sessões | +| Skill | `/forget` | Deleta observações/sessões | + +### MCP standalone + +Rode sem o servidor completo — para qualquer cliente MCP. Qualquer um destes funciona: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +Ou adicione à configuração MCP do seu agente: + +A maioria dos agentes (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Mescle a entrada `agentmemory` no objeto `mcpServers` existente do seu host em vez de substituir o arquivo. Para clientes em sandbox que não conseguem alcançar o `localhost` do host, adicione `"AGENTMEMORY_FORCE_PROXY": "1"` ao bloco env e defina `AGENTMEMORY_URL` para uma rota que o sandbox alcance. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Copie o arquivo do plugin do repo: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Viewer em tempo real

+ +Sobe automaticamente na porta `3113`. Stream ao vivo de observações, explorador de sessões, navegador de memórias, visualização do grafo de conhecimento e dashboard de saúde. + +```bash +open http://localhost:3113 +``` + +O servidor do viewer faz bind em `127.0.0.1` por padrão. O endpoint servido por REST `/agentmemory/viewer` segue as regras normais de bearer-token `AGENTMEMORY_SECRET`. Os headers CSP usam um nonce de script por resposta e desabilitam atributos de handler inline (`script-src-attr 'none'`). + +--- + +

iii Console

+ +O viewer em `:3113` mostra o que seu agente **lembrou**. O [iii console](https://iii.dev/docs/console) mostra o que seu agente **fez** — cada operação de memória como uma trace do OpenTelemetry, cada entrada KV editável, cada função invocável, cada stream observável. Duas janelas sobre a mesma memória: uma em formato de produto, outra em formato de engine. + +Veja um `memory_smart_search` disparar e enxergue o scan BM25 → busca de embedding → fusão RRF → reranker como um waterfall. Edite um timer de consolidação travado no navegador KV. Reproduza um hook `PostToolUse` com payload ajustado. Fixe o stream WebSocket e veja as observações chegando ao vivo. + +agentmemory oferece isso de graça porque toda função, trigger, escopo de estado e stream é um primitivo iii — nada custom, nada para instrumentar. + +

+ Página Workers do iii console — workers conectados incluindo instâncias do agentmemory com contagem de funções ao vivo e metadados de runtime +
+ Página Workers: todo worker conectado — incluindo o próprio agentmemory — com PID, contagem de funções, runtime e last-seen. +

+ +**Já instalado.** O console vem junto com `iii` — sem instalador separado. + +**Suba junto com o agentmemory:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Depois abra `http://localhost:3114`. Adicione `--enable-flow` para a página experimental de grafo de arquitetura. + +Sobrescreva endpoints do engine apenas se você os tiver movido: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**O que você pode fazer pelo console:** + +| Página | Use para | +|------|-----------| +| **Workers** | Ver todo worker conectado e suas métricas ao vivo — incluindo o próprio worker do agentmemory. | +| **Functions** | Invocar qualquer função do agentmemory diretamente com um payload JSON — útil para testar `memory.recall`, `memory.consolidate`, `graph.query` sem cabear um cliente. | +| **Triggers** | Reproduzir triggers HTTP, cron, event e state — disparar o cron de consolidação manualmente, reexecutar uma rota HTTP, emitir uma mudança de estado. | +| **States** | Navegador KV com CRUD completo — sessões, slots de memória, timers de ciclo de vida, índice de embeddings — edite valores no lugar. | +| **Streams** | Monitor WebSocket ao vivo para escritas de memória, eventos de hook e atualizações de observação à medida que fluem pelos streams iii. | +| **Queues** | Tópicos de fila duráveis + gestão de dead-letter. Reproduza ou descarte jobs de embedding / compressão que falharam. | +| **Traces** | Vistas waterfall / flame / breakdown por serviço do OpenTelemetry. Filtre por `trace_id` para ver exatamente quais funções, chamadas a DB e requisições de embedding um único `memory.search` produziu. | +| **Logs** | Logs OTEL estruturados filtrados e correlacionados a trace/span IDs. | +| **Config** | Configuração de runtime — veja exatamente com quais workers, providers e portas seu engine está rodando. | +| **Flow** | (Opcional, `--enable-flow`) Grafo de arquitetura interativo de todo worker, trigger e stream. | + +

+ Visão waterfall de trace do iii console mostrando duração por span +
+ Traces: waterfall / flame / breakdown por serviço para toda operação de memória. +

+ +**Traces já estão ativos:** + +`iii-config.yaml` vem com o worker `iii-observability` habilitado (`exporter: memory`, `sampling_ratio: 1.0`, métricas + logs). Sem configuração extra — no momento em que o agentmemory inicia, toda operação de memória emite um trace span e um log estruturado que o console consegue ler. + +Se você quiser exportar para Jaeger/Honeycomb/Grafana Tempo, troque `exporter: memory` por `exporter: otlp` e configure o endpoint do collector conforme a documentação de observabilidade do iii. + +> **Aviso:** nenhum auth é aplicado no console em si — mantenha-o em bind em `127.0.0.1` (o padrão) e nunca o exponha publicamente. + +--- + +

Powered by iii

+ +agentmemory **já é uma instância [iii](https://iii.dev) em execução**. Funções, triggers, estado KV, streams, traces OTEL — tudo são primitivos iii. Você não instalou Postgres, Redis, Express, pm2 ou Prometheus, porque o iii os substitui. + +Isso significa que mais um comando estende o agentmemory com uma capacidade totalmente nova. + +### Estenda o agentmemory com um comando + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Cada `iii worker add` registra novas funções e triggers no mesmo engine onde o agentmemory já está rodando. O viewer e o console os reconhecem na hora — sem reload, sem nova integração, sem novo contêiner. + +| `iii worker add` | O que você ganha em cima do agentmemory | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Memória multi-instância: todo `remember` faz fanout, todo `search` lê a união | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Ciclo de vida agendado — consolidação noturna, snapshots semanais, decaimento em relógio fixo | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Retries duráveis: jobs falhos de embedding + compressão sobrevivem a restart, sem observações perdidas | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | Traces OTEL, métricas, logs em toda função — cabeado em `iii-config.yaml` desde o primeiro dia | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | Código que veio do `memory_recall` roda dentro de uma VM descartável, não no seu shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | Adaptador de estado baseado em SQL quando você ultrapassa o KV in-memory padrão | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Suba servidores MCP adicionais ao lado do MCP do agentmemory, compartilhando o mesmo engine | + +Registry completo: [workers.iii.dev](https://workers.iii.dev). Todo worker lá se compõe pelos mesmos primitivos que o agentmemory usa — e o agentmemory que você já tem é um deles. + +### O que o iii substitui + +| Stack tradicional | agentmemory usa | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + índice vetorial in-memory | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | Supervisão de workers do iii engine | +| Prometheus / Grafana | iii OTEL + monitor de saúde | +| Sistemas de plugin customizados | `iii worker add ` | + +**118 arquivos de código · ~21.800 LOC · 950+ tests · 123 funções · 34 escopos KV** — tudo em cima de três primitivos. Sem `agentmemory plugin install`. O sistema de plugins é o próprio iii. + +--- + +

Configuração

+ +### Providers de LLM + +agentmemory autodetecta a partir do seu ambiente. Por padrão, nenhuma chamada LLM é feita a menos que você configure um provider ou opte explicitamente pelo fallback de assinatura do Claude. + +| Provider | Config | Notas | +|----------|--------|-------| +| **No-op (padrão)** | Sem configuração | Compress/summarize via LLM DESATIVADO. Compressão sintética BM25 + recall ainda funcionam. Veja `AGENTMEMORY_ALLOW_AGENT_SDK` abaixo se você dependia do fallback de assinatura do Claude. | +| Anthropic API | `ANTHROPIC_API_KEY` | Cobrança por token | +| MiniMax | `MINIMAX_API_KEY` | Compatível com Anthropic | +| Gemini | `GEMINI_API_KEY` | Também habilita embeddings | +| OpenRouter | `OPENROUTER_API_KEY` | Qualquer modelo | +| Claude subscription fallback | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Apenas opt-in. Cria sessões de `@anthropic-ai/claude-agent-sdk` — costumava causar recursão sem limite no Stop-hook, por isso não é mais o padrão. | + +### Seleção de modelo com consciência de custo + +A compressão em background roda em toda observação, então a escolha de modelo muda o gasto mensal de forma significativa. Dados de workload capturados: 635 requisições / 888K tokens / 35 horas de uso ativo, executados contra três modelos OpenRouter a preços de 2026-05-23. + +| Tier | Modelo | Input / 1M | Output / 1M | Custo para as 35h capturadas | Notas | +|------|-------|------------|-------------|---------------------------|-------| +| Recomendado | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Qualidade sólida de compressão + sumarização a um custo ~10× menor que o Sonnet. | +| Recomendado | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | Mais antigo mas ainda OK para workloads só de compressão. | +| Recomendado | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | Bom raciocínio de código se suas sessões forem muito orientadas a código. | +| Premium | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | Alta qualidade, mas caro para trabalho de background sempre ativo. | +| Premium | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Tier similar ao Sonnet. | +| Evitar | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | Modelo classe reasoning; gasto desproporcional para compressão. | + +agentmemory imprime um aviso em runtime quando `OPENROUTER_MODEL` casa com um padrão de tier premium. Defina `AGENTMEMORY_SUPPRESS_COST_WARNING=1` para silenciar depois que você tiver tomado uma decisão informada. + +Trade-off qualidade vs custo para trabalho de memória: compressão é uma tarefa de sumarização com critério de qualidade relativamente frouxo (quem relê o resumo é o agente, não o usuário). DeepSeek-V4-Pro / Qwen3-Coder ficam dentro do erro de arredondamento do Sonnet nessa tarefa, custando ~10× menos. Reserve os modelos tier premium para as queries que você lê diretamente. + +Fontes: [OpenRouter pricing for Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek pricing notes](https://api-docs.deepseek.com/quick_start/pricing/). + +### Memória multiagente (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +Em setups multiagente onde vários papéis compartilham um servidor agentmemory (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` etiqueta cada escrita com o papel que a fez. `AGENTMEMORY_AGENT_SCOPE` controla se o recall filtra por essa tag. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Dois modos: + +| Modo | Etiqueta escritas | Filtra recall | Quando usar | +|------|------------|---------------|-------------| +| `shared` (padrão) | sim | não | Contexto cross-agent com trilha de auditoria. O architect pode ver o que o developer anotou, mas toda linha registra quem disse. | +| `isolated` | sim | sim | Separação estrita. O architect nunca vê observações / memórias / sessões do developer. | + +O que é etiquetado quando `AGENT_ID` está definido: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. O papel flui `api::session::start` → `mem::observe` → `mem::compress` → KV. + +O que é filtrado no modo isolated: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Cada endpoint aceita `?agentId=` para sobrescrever por requisição, e `?agentId=*` para sair do escopo do env por completo. `/memories` também aceita `?includeOrphans=true` para mostrar memórias pré-AGENT_ID cujo `agentId` é undefined. + +Override por chamada na camada SDK / REST: todo endpoint mutador (`/session/start`, `/remember`) aceita um campo `agentId` no body da requisição que vence o env. Útil para runtimes que roteiam muitos papéis por um único processo de servidor. + +Quando `AGENT_ID` não está definido, a memória permanece sem escopo (comportamento legado, sem tags, sem filtros). + +### Portas + +agentmemory + iii-engine fazem bind em quatro portas por padrão. Se um restart falhar com `port in use`, esta tabela diz qual processo procurar. + +| Porta | Processo | Propósito | Override por env | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Worker de streams interno (consumido por agentmemory + viewer) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Viewer em tempo real (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — workers se registram aqui, telemetria OTel flui por cima | `III_ENGINE_URL` (URL completa, padrão `ws://localhost:49134`) | + +Limpeza de processo travado quando as portas ficam ocupadas após uma execução crashada: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` recolhe tanto o worker quanto o pidfile do engine de forma limpa no shutdown graceful. A limpeza manual acima só serve para o caso pós-crash em que nenhum pidfile foi deixado para trás. + +### Arquivo de configuração + +Coloque a configuração de runtime do agentmemory em `~/.agentmemory/.env` em vez de exportar variáveis em cada shell. Se o viewer mostrar uma dica de setup como `export ANTHROPIC_API_KEY=...`, copie para este arquivo como `ANTHROPIC_API_KEY=...` sem o prefixo `export`, depois reinicie o agentmemory. + +Variáveis de ambiente do processo continuam funcionando e têm precedência sobre os valores no arquivo. + +No Windows, o mesmo arquivo fica em `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +Para testar com uma assinatura Claude Code Pro/Max em vez de uma API key, faça opt-in explícito: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Ligue features de graph ou consolidation no mesmo arquivo se quiser: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Variáveis de ambiente + +Crie `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +124 endpoints na porta `3111`. A REST API faz bind em `127.0.0.1` por padrão. Endpoints protegidos exigem `Authorization: Bearer ` quando `AGENTMEMORY_SECRET` está definido, e endpoints de mesh sync exigem `AGENTMEMORY_SECRET` em ambos os peers. + +
+Endpoints principais + +| Method | Path | Descrição | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Health check (sempre público) | +| `POST` | `/agentmemory/session/start` | Inicia sessão + obtém contexto | +| `POST` | `/agentmemory/session/end` | Encerra sessão | +| `POST` | `/agentmemory/observe` | Captura observação | +| `POST` | `/agentmemory/smart-search` | Busca híbrida | +| `POST` | `/agentmemory/context` | Gera contexto | +| `POST` | `/agentmemory/remember` | Salva na memória de longo prazo | +| `POST` | `/agentmemory/forget` | Deleta observações | +| `POST` | `/agentmemory/enrich` | Contexto de arquivo + memórias + bugs | +| `GET` | `/agentmemory/profile` | Perfil de projeto | +| `GET` | `/agentmemory/export` | Exporta todos os dados | +| `POST` | `/agentmemory/import` | Importa de JSON | +| `POST` | `/agentmemory/graph/query` | Query do grafo de conhecimento | +| `POST` | `/agentmemory/team/share` | Compartilha com o time | +| `GET` | `/agentmemory/audit` | Trilha de auditoria | + +Lista completa de endpoints: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Desenvolvimento

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**Pré-requisitos:** Node.js >= 20, [iii-engine](https://iii.dev/docs) ou Docker + +

Licença

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.ru-RU.md b/READMEs/README.ru-RU.md new file mode 100644 index 0000000..804f380 --- /dev/null +++ b/READMEs/README.ru-RU.md @@ -0,0 +1,1376 @@ +

+ agentmemory — Постоянная память для ИИ-агентов программирования +

+ +

+ + Ваш агент программирования помнит всё. Больше не нужно объяснять заново. + Built on iii engine +
+ Постоянная память для Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode и любого MCP-клиента. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Документ проекта: 1200 звёзд / 172 форка в гисте +

+ +

+ Этот gist расширяет шаблон LLM Wiki от Karpathy: confidence-оценкой, жизненным циклом, графами знаний и гибридным поиском — agentmemory является его реализацией. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ Демо agentmemory +

+ +

+ Установка • + Быстрый старт • + Бенчмарки • + Сравнение • + Агенты • + Как это работает • + MCP • + Просмотрщик • + iii Console • + Powered by iii • + Конфигурация • + API +

+ +--- + +## Install + +```bash +npm install -g @agentmemory/agentmemory # once — bare `agentmemory` on PATH +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the memory server on :3111 +agentmemory demo # seed sample sessions + prove recall +agentmemory connect claude-code # wire your agent (also: codex, cursor, gemini-cli, ...) +``` + +Или через `npx` (без установки): + +```bash +npx @agentmemory/agentmemory +``` + +Внимание: npx кеширует пакеты по версиям. Если простой `npx @agentmemory/agentmemory` выдаёт более старый релиз, принудительно возьмите свежий через `npx -y @agentmemory/agentmemory@latest` или однократно очистите кеш: `rm -rf ~/.npm/_npx` (macOS/Linux; на Windows удалите `%LOCALAPPDATA%\npm-cache\_npx`). Начиная с v0.9.16+, при первом запуске npx предлагает поставить пакет глобально прямо в строке — после этого простая команда `agentmemory` будет работать повсюду. + +Полный список опций — в разделе [Быстрый старт](#quick-start) ниже. Привязка конкретного агента — в разделе [Работает с каждым агентом](#works-with-every-agent). + +--- + +

Работает с каждым агентом

+ +agentmemory работает с любым агентом, поддерживающим хуки, MCP или REST API. Все агенты используют один и тот же сервер памяти. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+нативный плагин + 12 хуков + MCP +
+Codex CLI
+Codex CLI
+нативный плагин + 6 хуков + MCP +
+OpenClaw
+OpenClaw
+нативный плагин + MCP +
+Hermes
+Hermes
+нативный плагин + MCP +
+pi
+pi
+нативный плагин + MCP +
+OpenHuman
+OpenHuman
+нативный бэкенд трейта Memory +
+Cursor
+Cursor
+MCP-сервер +
+Gemini CLI
+Gemini CLI
+MCP-сервер +
+OpenCode
+OpenCode
+22 хука + MCP + плагин +
+Cline
+Cline
+MCP-сервер +
+Goose
+Goose
+MCP-сервер +
+Kilo Code
+Kilo Code
+MCP-сервер +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP-сервер +
+Windsurf
+Windsurf
+MCP-сервер +
+Roo Code
+Roo Code
+MCP-сервер +
+ +

+ Работает с любым агентом, который говорит на MCP или HTTP. Один сервер — общая память для всех. +

+ +--- + +Вы заново объясняете архитектуру в каждой сессии. Вы заново находите те же баги. Вы заново обучаете агента тем же предпочтениям. Встроенная память (CLAUDE.md, .cursorrules) упирается в 200 строк и устаревает. agentmemory это решает. Он тихо собирает то, что делает ваш агент, сжимает это в индексируемую память и подмешивает нужный контекст при старте следующей сессии. Одна команда. Работает между агентами. + +**Что меняется:** В сессии 1 вы настраиваете JWT-аутентификацию. В сессии 2 просите добавить rate limiting. Агент уже знает, что аутентификация использует middleware jose в `src/middleware/auth.ts`, что ваши тесты покрывают валидацию токенов, и что вы выбрали jose, а не jsonwebtoken, из-за совместимости с Edge. Никаких повторных объяснений. Никакого копирования-вставки. Агент просто *знает*. + +```bash +npx @agentmemory/agentmemory +``` + +> **Новое в v0.9.0** — Лендинг по адресу [agent-memory.dev](https://agent-memory.dev), коннектор файловой системы (`@agentmemory/fs-watcher`), автономный MCP теперь проксирует к работающему серверу, поэтому хуки и просмотрщик согласованы, политика аудита кодифицирована для каждого пути удаления, проверка состояния больше не помечает `memory_critical` на маленьких Node-процессах. Полные заметки в [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18). + +--- + +

Бенчмарки

+ + + + + + +
+ +### Точность извлечения + +**coding-agent-life-v1** (внутренний корпус, воспроизводимо в sandbox) + +| Адаптер | P@5 | R@5 | Top-5 hit rate | p50-задержка | +|---|---|---|---|---| +| **agentmemory hybrid** | **0.578** | **0.967** | **15 / 15** | 14 мс | +| Базовый grep | 0.267 | 0.967 | 15 / 15 | 0 мс | + +100 % попаданий в top-5. **2,2×** выше точность, чем у grep-базы, на тех же входах. Полная разбивка по типам: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 вопросов) + +| Система | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| Fallback только BM25 | 86.2% | 94.6% | 71.5% | + + + +### Экономия токенов + +| Подход | Токенов в год | Стоимость в год | +|---|---|---| +| Вставлять весь контекст | 19,5М+ | Невозможно (выходит за окно) | +| LLM-резюме | ~650K | ~500 $ | +| **agentmemory** | **~170K** | **~10 $** | +| agentmemory + локальные эмбеддинги | ~170K | **0 $** | + +
+ +> Модель эмбеддингов: `all-MiniLM-L6-v2` (локальная, бесплатная, без API-ключа). Полные отчёты: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Сравнение с конкурентами: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory против mem0, Letta, Khoj, claude-mem, Hippo. + +**Воспроизведите локально:** [`eval/README.md`](../eval/README.md) — harness с подключаемыми адаптерами для LongMemEval `_s` (публичный, 500 вопросов) и `coding-agent-life-v1` (внутренний корпус из 15 сессий). Адаптеры grep / vector / agentmemory сравниваются бок о бок, вывод NDJSON, опубликованные scorecard'ы попадают в [`docs/benchmarks/`](../docs/benchmarks/). + +**Хорошо сочетается с [codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) и [Graphify](https://github.com/safishamsi/graphify).** Индексация кодового графа, мультиагентные конвейеры сборки и более широкие графы знаний по докам / PDF / изображениям / видео. agentmemory запоминает работу; эти три проекта подсвечивают остальное в слое контекста. Рецепты и таблица маршрутизации вопросов: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

Сравнение с конкурентами

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Встроенное (CLAUDE.md)
ТипДвижок памяти + MCP-серверAPI уровня памятиПолноценный агентский runtimeСтатический файл
R@5 при извлечении95.2%68.5% (LoCoMo)83.2% (LoCoMo)Н/Д (grep)
Авто-захват12 хуков (никаких ручных усилий)Ручные вызовы add()Агент сам редактируетРучное редактирование
ПоискBM25 + векторный + граф (RRF-слияние)Векторный + графВекторный (архивный)Загружает всё в контекст
МультиагентностьMCP + REST + lease'ы + сигналыAPI (без координации)Только внутри runtime LettaОтдельные файлы на агента
Привязка к фреймворкуНет (любой MCP-клиент)НетВысокая (нужен Letta)Формат на агента
Внешние зависимостиНет (SQLite + iii-engine)Qdrant / pgvectorPostgres + векторная БДНет
Жизненный цикл памяти4-уровневая консолидация + затухание + авто-забываниеПассивное извлечениеУправляется агентомРучное усечение
Эффективность по токенам~1 900 токенов/сессия (10 $/год)Зависит от интеграцииCore memory в контексте22K+ токенов при 240 наблюдениях
Просмотрщик в реальном времениДа (порт 3113)Облачная панельОблачная панельНет
Self-hostedДа (по умолчанию)ОпциональноОпциональноДа
+ +--- + +

Быстрый старт

+ +Совместимость: этот релиз нацелен на стабильный `iii-sdk` `^0.11.0` и iii-engine v0.11.x. + +### Попробуйте за 30 секунд + +```bash +# Terminal 1: start the server +npx @agentmemory/agentmemory + +# Terminal 2: seed sample data and see recall in action +npx @agentmemory/agentmemory demo +``` + +`demo` заполняет 3 реалистичные сессии (JWT-аутентификация, исправление N+1-запроса, rate limiting) и запускает по ним семантический поиск. Вы увидите, как находится «N+1 query fix», когда вы ищете «database performance optimization» — keyword-сопоставление так не умеет. + +Откройте `http://localhost:3113`, чтобы видеть построение памяти в реальном времени. + +### Рекомендуется: глобальная установка + +`npx` кеширует пакеты по версиям. Если на прошлой неделе вы запускали `npx @agentmemory/agentmemory@0.9.14`, простой `npx @agentmemory/agentmemory` может выдать застаревшую 0.9.14 из `~/.npm/_npx/`, а не последний релиз. Установите один раз — и команда `agentmemory` будет работать везде: + +```bash +npm install -g @agentmemory/agentmemory +# If you hit EACCES on macOS/Linux system Node installs, retry with: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # start the server (same as the npx form) +agentmemory stop # tear it down +agentmemory remove # uninstall everything we created +agentmemory connect claude-code # wire one agent +agentmemory doctor # interactive diagnostics + fix prompts +``` + +Начиная с v0.9.16, первый запуск npx предлагает установку глобально в той же строке — ответьте `Y` один раз, и готово. Если вы пропустили шаг, воспользуйтесь любым из этих вариантов для свежего скачивания: + +```bash +npx -y @agentmemory/agentmemory@latest # forces latest from npm (cross-platform) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # macOS/Linux only (POSIX shell) +``` + +В Windows / PowerShell эквивалент очистки кеша — `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"`, а вариант выше `npx -y ...@latest` остаётся кросс-платформенным. + +### Воспроизведение сессий + +Каждую сессию, которую записывает agentmemory, можно воспроизвести. Откройте просмотрщик, выберите вкладку **Replay** и пролистывайте таймлайн: промпты, вызовы инструментов, результаты вызовов и ответы отображаются как отдельные события с play/pause, регулировкой скорости (0,5×–4×) и горячими клавишами (пробел переключает, стрелки — пошаговое перемещение). + +Уже есть старые JSONL-расшифровки Claude Code, которые хотите подгрузить? + +```bash +# Import everything under the default ~/.claude/projects +npx @agentmemory/agentmemory import-jsonl + +# Or import a single file +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +Импортированные сессии появятся в Replay-пикере рядом с нативными. Под капотом каждая запись проходит через iii-функции `mem::replay::load`, `mem::replay::sessions` и `mem::replay::import-jsonl` — никаких побочных серверов. + +### Обновление / Обслуживание + +Используйте команду обслуживания, когда специально хотите обновить локальный runtime: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Внимание: команда меняет текущее рабочее окружение / runtime. Она может обновлять JavaScript-зависимости и стянуть закреплённый Docker-образ `iiidev/iii:0.11.2`. Она никогда не устанавливает незакреплённый или более новый движок iii. + +Детали реализации — в `src/cli.ts` (см. `runUpgrade` в районе `src/cli.ts:544-595`). + +### Claude Code (один блок, вставьте его) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code без установки плагина (путь MCP-standalone) + +Если подключать MCP-сервер agentmemory через `~/.claude.json` напрямую, минуя `/plugin install`, Claude Code никогда не разрешит `${CLAUDE_PLUGIN_ROOT}`, и в `~/.claude/settings.json` придётся прописывать абсолютные пути к скриптам хуков. Эти пути обычно включают версию agentmemory (например, `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), так что следующее обновление тихо ломает каждый хук. + +Обходное решение: + +```bash +agentmemory connect claude-code --with-hooks +``` + +Это вливает те же команды хуков в `~/.claude/settings.json` с абсолютными путями, разрешёнными в каталог `plugin/` текущего установленного пакета `@agentmemory/agentmemory`. После обновления agentmemory запустите команду ещё раз, чтобы освежить пути. Записи пользователя в этом файле сохраняются; заменяются только предыдущие записи agentmemory. Рекомендуемым способом остаётся путь через `/plugin install`. +Для удалённых или защищённых развертываний запускайте Claude Code с заданными `AGENTMEMORY_URL` и `AGENTMEMORY_SECRET`. Плагин пробрасывает обе переменные во встроенный MCP-сервер; если `AGENTMEMORY_URL` пуст, MCP-shim использует `http://localhost:3111`. + +### Codex CLI (платформа плагинов Codex) + +```bash +# 1. start the memory server in a separate terminal +npx @agentmemory/agentmemory + +# 2. register the agentmemory marketplace and install the plugin +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Плагин Codex поставляется из того же каталога `plugin/`, что и плагин Claude Code. Он регистрирует: + +- `@agentmemory/mcp` как MCP-сервер (проксирует все 51 инструмент, когда `AGENTMEMORY_URL` указывает на работающий сервер agentmemory; локально откатывается к 7 инструментам, если сервер недоступен) +- 6 хуков жизненного цикла: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skill'а: `/recall`, `/remember`, `/session-history`, `/forget` + +Хук-движок Codex подставляет `CLAUDE_PLUGIN_ROOT` в подпроцессы хуков (см. [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), поэтому одни и те же скрипты хуков работают на обоих хостах без дублирования. События Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure доступны только в Claude Code и для Codex не регистрируются. + +#### Codex Desktop: хуки плагинов сейчас тихие (есть обходное решение) + +`CodexHooks` и `PluginHooks` оба стабильны и включены по умолчанию в [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs), но текущие сборки Codex Desktop не диспатчат локальный `hooks.json` плагина ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). Инструменты MCP по-прежнему работают; не хватает только наблюдений жизненного цикла. + +Пока upstream не подвезёт фикс, продублируйте те же команды хуков в глобальный `~/.codex/hooks.json`: + +```bash +agentmemory connect codex --with-hooks +``` + +Это добавляет идемпотентный блок в `~/.codex/hooks.json` со ссылками на абсолютные пути к встроенным скриптам (раскрывать `${CLAUDE_PLUGIN_ROOT}` на уровне пользователя не нужно). После обновления agentmemory запустите ту же команду ещё раз, чтобы освежить пути. Записи пользователя в этом файле сохраняются; заменяются только предыдущие записи agentmemory. + +
+OpenClaw (вставьте этот промпт) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Полное руководство: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (вставьте этот промпт) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Полное руководство: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Другие агенты + +Запустите сервер памяти: `npx @agentmemory/agentmemory` + +Запись agentmemory — это **один и тот же блок MCP-сервера** для всех хостов, использующих формат `mcpServers` (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw): + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Вставьте эту запись в существующий объект `mcpServers`** в файле конфигурации хоста — не заменяйте сам файл. Если там уже есть другие серверы, добавьте `agentmemory` рядом с ними как новый ключ внутри `mcpServers`. Если `mcpServers` отсутствует совсем, вставьте блок внутрь `{ "mcpServers": { ... } }`. Подстановки `${VAR}` наследуют `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` из shell в момент запуска MCP-сервера — незаданные переменные передаются пустыми, и shim откатывается на `http://localhost:3111`. Одна подключённая запись покрывает как локальные, так и удалённые (k8s / reverse-proxied) развертывания. + +| Агент | Файл конфигурации | Заметки | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | Добавить в `mcpServers`. Также доступен deeplink в один клик на сайте. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | Добавить в `mcpServers`. После правки перезапустить Claude Desktop. | +| **Cline / Roo Code / Kilo Code** | Настройки MCP в Cline (Settings UI → MCP Servers → Edit) | Тот же блок `mcpServers`. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Тот же блок `mcpServers`. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (автоматическое слияние). | +| **OpenClaw** | MCP-конфиг OpenClaw | Тот же блок `mcpServers`, либо более глубокий [memory-плагин](../integrations/openclaw/). | +| **Codex CLI (только MCP)** | `.codex/config.toml` | Формат TOML: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, либо добавьте `[mcp_servers.agentmemory]` вручную. | +| **Codex CLI (полный плагин)** | Маркетплейс плагинов Codex | `codex plugin marketplace add rohitg00/agentmemory`, затем `codex plugin add agentmemory@agentmemory`. Регистрирует MCP + 6 хуков жизненного цикла (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skill'а. На Codex Desktop дополнительно запустите `agentmemory connect codex --with-hooks`, пока не зарелизят [openai/codex#16430](https://github.com/openai/codex/issues/16430) — хуки плагина там пока тихие. | +| **OpenCode (только MCP)** | `opencode.json` | Другая форма — корневой ключ `mcp`, команда задаётся массивом: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (полный плагин)** | `plugin/opencode/` | 22 хука авто-захвата по жизненному циклу сессии, сообщениям, инструментам и ошибкам. Две slash-команды (`/recall`, `/remember`). Скопируйте `plugin/opencode/` в свой рабочий каталог OpenCode и добавьте запись плагина в `opencode.json`. Полная таблица хуков и анализ пробелов — в [`plugin/opencode/README.md`](../plugin/opencode/README.md). | +| **pi** | `~/.pi/agent/extensions/agentmemory` | Скопируйте [`integrations/pi`](../integrations/pi/) и перезапустите pi. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Используйте более глубокий [плагин провайдера памяти](../integrations/hermes/) с `memory.provider: agentmemory`. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` записывает стандартный блок `mcpServers`. Payload хуков по полям совместим с Claude Code, поэтому существующие 12 скриптов хуков работают без изменений — подключите их через секцию `hooks` в том же `settings.json`. | +| **Antigravity** (заменяет Gemini CLI) | `mcp_config.json` (в каталоге User у Antigravity) | `agentmemory connect antigravity` записывает стандартный блок `mcpServers`. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. Использовать после отключения Gemini CLI 2026-06-18. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` записывает конфиг на уровне пользователя. Workspace-переопределения — в `.kiro/settings/mcp.json` рядом с кодом. | +| **Goose** | UI настроек MCP в Goose | Тот же блок `mcpServers`. | +| **Aider** | н/д | Разговаривайте напрямую с REST API: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Любой агент (32+)** | н/д | `npx skillkit install agentmemory` сам определит хост и сольёт настройки. | + +**MCP-клиенты в sandbox** (Flatpak / Snap / ограничивающие контейнеры), которые не могут добраться до `localhost` хоста: дополнительно установите `"AGENTMEMORY_FORCE_PROXY": "1"` в блоке `env` и укажите `AGENTMEMORY_URL` на маршрут, до которого sandbox действительно может дотянуться (например, IP в локальной сети). + +### Программный доступ (Python / Rust / Node) + +agentmemory регистрирует свои основные операции как iii-функции (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). Любой язык с SDK для iii может вызывать их напрямую через `ws://localhost:49134` — отдельный REST-клиент на каждый язык не требуется. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Рабочий пример: [`examples/python/`](../examples/python/) (быстрый старт + поток наблюдения/извлечения). REST на `:3111` остаётся доступным для хостов без iii-runtime. + +### Из исходников + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Это поднимает agentmemory с локальным `iii-engine`, если `iii` уже установлен, либо откатывается к Docker Compose, если есть Docker. REST, стримы и просмотрщик по умолчанию слушают на `127.0.0.1`. + +Установите `iii-engine` вручную. **agentmemory сейчас зафиксирован на `iii-engine` `v0.11.2`** — `v0.11.6` вводит новую модель «всё через `iii worker add` в sandbox», под которую agentmemory ещё не отрефакторен. Закрепление снимется, как только рефакторинг будет завершён. Переопределите через `AGENTMEMORY_III_VERSION=`, если вы вручную перешли на sandbox-модель. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** замените `aarch64-apple-darwin` на `x86_64-apple-darwin` +- **Linux x64:** замените на `x86_64-unknown-linux-gnu` +- **Linux arm64:** замените на `aarch64-unknown-linux-gnu` +- **Windows:** скачайте `iii-x86_64-pc-windows-msvc.zip` из [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2), распакуйте `iii.exe`, добавьте в PATH + +Либо используйте Docker (входящий в комплект `docker-compose.yml` тянет `iiidev/iii:0.11.2`). Полная документация: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory работает на Windows 10/11, но одного Node.js-пакета мало — также нужен runtime `iii-engine` (отдельный нативный бинарь) как фоновый процесс. Официальный upstream-установщик — это `sh`-скрипт, на сегодня нет ни PowerShell-установщика, ни пакета scoop/winget, поэтому у пользователей Windows два пути: + +**Вариант A — Готовый Windows-бинарь (рекомендуется):** + +```powershell +# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 in your browser +# (we pin to v0.11.2 until agentmemory refactors for the new sandbox +# model that engine v0.11.6+ requires) +# 2. Download iii-x86_64-pc-windows-msvc.zip +# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine) +# 3. Extract iii.exe somewhere on PATH, or place it at: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory checks that location automatically) +# 4. Verify: +iii --version +# Should print: 0.11.2 + +# 5. Then run agentmemory as usual: +npx -y @agentmemory/agentmemory +``` + +**Вариант B — Docker Desktop:** + +```powershell +# 1. Install Docker Desktop for Windows +# 2. Start Docker Desktop and make sure the engine is running +# 3. Run agentmemory — it will auto-start the bundled compose file: +npx -y @agentmemory/agentmemory +``` + +**Вариант C — только standalone MCP (без движка):** если вам нужны только MCP-инструменты для агента и не нужны REST API, просмотрщик или cron-задачи, пропустите движок целиком: + +```powershell +npx -y @agentmemory/agentmemory mcp +# or via the shim package: +npx -y @agentmemory/mcp +``` + +**Диагностика на Windows:** если `npx @agentmemory/agentmemory` падает, перезапустите с `--verbose`, чтобы увидеть реальный stderr движка. Частые сценарии сбоя: + +| Симптом | Что делать | +|---|---| +| `iii-engine process started`, затем `did not become ready within 15s` | Движок упал при старте — перезапустите с `--verbose`, проверьте stderr | +| `Could not start iii-engine` | Не установлены ни `iii.exe`, ни Docker. См. варианты A или B выше | +| Конфликт порта | `netstat -ano \| findstr :3111`, чтобы понять, что занимает порт, затем убить процесс или использовать `--port ` | +| Откат на Docker пропускается, хотя Docker установлен | Убедитесь, что Docker Desktop действительно запущен (иконка в трее) | + +> Примечание: **движок** iii — это готовый бинарь, а не cargo-крейт, не пытайтесь установить его через `cargo install`. (**SDK** iii опубликованы на crates.io, npm и PyPI, но agentmemory они не нужны.) Поддерживаемые способы установки движка, все закреплены на v0.11.2: готовый бинарь v0.11.2 выше, upstream-`sh`-скрипт **с закреплением версии** `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) и Docker-образ `iiidev/iii:0.11.2`. Простой `install.sh | sh` устанавливает **последний** движок, который agentmemory не поддерживает, — всегда передавайте `VERSION=0.11.2`. Самый простой вариант: просто запустите `npx @agentmemory/agentmemory`, который сам загрузит закреплённый движок в `~/.agentmemory/bin`. + +--- + +

Развёртывание

+ +Шаблоны в один клик для managed-хостов. Каждый поставляет автономный +Dockerfile, который тянет `@agentmemory/agentmemory` из npm и копирует +бинарь iii engine из официального образа `iiidev/iii` на Docker +Hub — собственный преcобранный образ agentmemory не нужен. Постоянное +хранилище монтируется в `/data`; entrypoint при первом запуске +перезаписывает поставляемый npm'ом iii-конфиг (который слушает на +`127.0.0.1`) на deploy-вариант, слушающий на `0.0.0.0` и +использующий абсолютные пути `/data`, генерирует HMAC-секрет, +а затем понижает привилегии с `root` до `node` через `gosu` +перед запуском CLI agentmemory. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Кнопке Render «деплой в один клик» нужен `render.yaml` в корне репозитория, который мы намеренно держим чистым. Используйте схему через Render Blueprint, описанную в [`deploy/render/`](./deploy/render/README.md), чтобы вручную указать на in-repo blueprint. + +Полные детали настройки (захват HMAC, SSH-туннель к просмотрщику, ротация, бэкап, нижние пороги стоимости) — в [`deploy/`](./deploy/README.md): + +- [`deploy/fly`](./deploy/fly/README.md) — одна машина с + `auto_stop_machines = "stop"`; дешевле всего в простое. +- [`deploy/railway`](./deploy/railway/README.md) — фиксированный тариф Hobby, + том в панели. +- [`deploy/render`](./deploy/render/README.md) — поток Blueprint, + автоматические снапшоты диска на платных тарифах. +- [`deploy/coolify`](./deploy/coolify/README.md) — self-hosted на собственном + VPS через [Coolify](https://coolify.io/self-hosted); тот же Docker + Compose-стек, хост и данные у вас. + +Публикуется только порт `3111`. Просмотрщик на `3113` остаётся +привязанным к loopback внутри контейнера — в README каждого шаблона +описан паттерн SSH-туннеля, чтобы до него достучаться. + +--- + +

Зачем agentmemory

+ +Каждый агент программирования забывает всё, когда сессия заканчивается. Вы тратите первые 5 минут каждой сессии на повторное объяснение своего стека. agentmemory работает в фоне и устраняет это полностью. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### vs встроенная память агента + +Каждый ИИ-агент программирования поставляется со встроенной памятью — у Claude Code есть `MEMORY.md`, у Cursor — notepad'ы, у Cline — memory bank. Это работает как стикеры. agentmemory — индексируемая база данных за этими стикерами. + +| | Встроенная (CLAUDE.md) | agentmemory | +|---|---|---| +| Масштаб | Потолок в 200 строк | Без ограничений | +| Поиск | Загружает всё в контекст | BM25 + векторный + граф (только top-K) | +| Цена в токенах | 22K+ при 240 наблюдениях | ~1 900 токенов (на 92 % меньше) | +| Между агентами | Файлы на каждого агента | MCP + REST (любой агент) | +| Координация | Нет | Lease'ы, сигналы, action'ы, routine'ы | +| Наблюдаемость | Читать файлы вручную | Просмотрщик в реальном времени на :3113 | + +--- + +

Как это работает

+ +### Конвейер памяти + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4-уровневая консолидация памяти + +Вдохновлено тем, как мозг человека обрабатывает воспоминания — похоже на консолидацию во время сна. + +| Уровень | Что | Аналогия | +|------|------|---------| +| **Working** | Сырые наблюдения от использования инструментов | Кратковременная память | +| **Episodic** | Сжатые краткие итоги сессий | «Что произошло» | +| **Semantic** | Извлечённые факты и закономерности | «Что я знаю» | +| **Procedural** | Workflow'ы и паттерны принятия решений | «Как это сделать» | + +Воспоминания затухают со временем (кривая Эббингауза). Часто используемые воспоминания усиливаются. Устаревшие — автоматически вытесняются. Противоречия обнаруживаются и разрешаются. + +### Что захватывается + +| Хук | Захватывает | +|------|----------| +| `SessionStart` | Путь к проекту, идентификатор сессии | +| `UserPromptSubmit` | Пользовательские промпты (с приватным фильтром) | +| `PreToolUse` | Паттерны доступа к файлам + обогащённый контекст | +| `PostToolUse` | Имя инструмента, вход, выход | +| `PostToolUseFailure` | Контекст ошибки | +| `PreCompact` | Заново подмешивает память перед компакцией | +| `SubagentStart/Stop` | Жизненный цикл подагентов | +| `Stop` | Итог в конце сессии | +| `SessionEnd` | Маркер завершения сессии | + +### Ключевые возможности + +| Возможность | Описание | +|---|---| +| **Автоматический захват** | Каждое использование инструмента записывается через хуки — никаких ручных усилий | +| **Семантический поиск** | BM25 + векторный + граф знаний со слиянием RRF | +| **Эволюция памяти** | Версионирование, supersession, графы связей | +| **Авто-забывание** | Истечение TTL, обнаружение противоречий, вытеснение по важности | +| **Privacy first** | API-ключи, секреты, теги `` вырезаются до сохранения | +| **Самовосстановление** | Circuit breaker, цепочка fallback-провайдеров, мониторинг состояния | +| **Claude bridge** | Двусторонняя синхронизация с MEMORY.md | +| **Граф знаний** | Извлечение сущностей + обход BFS | +| **Командная память** | Отдельные namespace'ы для общего и приватного у участников команды | +| **Происхождение цитат** | Любую запись памяти можно проследить до исходных наблюдений | +| **Git-снапшоты** | Версионирование, откат и diff состояния памяти | + +--- + + + +Тройной поток извлечения, объединяющий три сигнала: + +| Поток | Что делает | Когда | +|---|---|---| +| **BM25** | Сопоставление по стеммированным ключевым словам с расширением синонимами | Всегда включён | +| **Vector** | Косинусное сходство по плотным эмбеддингам | Если настроен embedding-провайдер | +| **Graph** | Обход графа знаний по сопоставлению сущностей | Если в запросе обнаружены сущности | + +Сливаются через Reciprocal Rank Fusion (RRF, k=60) и диверсифицируются по сессиям (не более 3 результатов на сессию). + +BM25 «из коробки» токенизирует греческий, кириллицу, иврит, арабский и латиницу с диакритикой. Для записей на китайском / японском / корейском поставьте опциональные сегментаторы (`npm install @node-rs/jieba tiny-segmenter`), чтобы CJK-последовательности разбивались на токены уровня слова; без них agentmemory мягко откатывается к токенизации целых последовательностей и выводит одноразовую подсказку в stderr. + +### Провайдеры эмбеддингов + +agentmemory автоматически определяет вашего провайдера. Для лучших результатов поставьте локальные эмбеддинги (бесплатно): + +```bash +npm install @xenova/transformers +``` + +| Провайдер | Модель | Стоимость | Заметки | +|---|---|---|---| +| **Локально (рекомендуется)** | `all-MiniLM-L6-v2` | Бесплатно | Офлайн, +8 пп recall по сравнению только с BM25 | +| Gemini | `gemini-embedding-001` | Бесплатный тариф | 100+ языков, размерности 768/1536/3072 (MRL), вход 2048 токенов. Заменяет `text-embedding-004` ([устарел, отключение 14 янв. 2026](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | 0,02 $/1M | Высочайшее качество | +| Voyage AI | `voyage-code-3` | Платно | Оптимизирован под код | +| Cohere | `embed-english-v3.0` | Бесплатная пробная версия | Общего назначения | +| OpenRouter | Любая модель | Зависит | Мульти-модельный прокси | + +--- + +

MCP-сервер

+ +53 инструмента, 6 ресурсов, 3 промпта и 4 skill'а — самый исчерпывающий MCP-набор для памяти любого агента. + +> **MCP-shim против полного сервера:** опубликованный пакет `@agentmemory/mcp` — это тонкий shim. Он раскрывает полную поверхность из 51 инструмента **только если может достучаться до работающего сервера agentmemory** через `AGENTMEMORY_URL` (режим прокси). Если сервер недоступен, shim откатывается к локальному набору из 7 инструментов (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`). Переменная окружения `AGENTMEMORY_TOOLS=core|all` — *серверный* флаг; задавать её в блоке `env` shim'а бесполезно. Если в Cursor / OpenCode / Gemini CLI видно только 7 инструментов, запустите `npx @agentmemory/agentmemory` (или Docker-стек) и установите `AGENTMEMORY_URL=http://localhost:3111`. + +### 51 инструмент + +
+Базовые инструменты (всегда доступны) + +| Инструмент | Описание | +|------|-------------| +| `memory_recall` | Искать в прошлых наблюдениях | +| `memory_compress_file` | Сжимать markdown-файлы с сохранением структуры | +| `memory_save` | Сохранить инсайт, решение или паттерн | +| `memory_patterns` | Выявить повторяющиеся паттерны | +| `memory_smart_search` | Гибридный семантический + keyword-поиск | +| `memory_file_history` | Прошлые наблюдения о конкретных файлах | +| `memory_sessions` | Список последних сессий | +| `memory_timeline` | Хронологические наблюдения | +| `memory_profile` | Профиль проекта (концепции, файлы, паттерны) | +| `memory_export` | Экспортировать все данные памяти | +| `memory_relations` | Запрос к графу связей | + +
+ +
+Расширенные инструменты (всего 51 — задайте AGENTMEMORY_TOOLS=all) + +| Инструмент | Описание | +|------|-------------| +| `memory_patterns` | Выявить повторяющиеся паттерны | +| `memory_timeline` | Хронологические наблюдения | +| `memory_relations` | Запрос к графу связей | +| `memory_graph_query` | Обход графа знаний | +| `memory_consolidate` | Запустить 4-уровневую консолидацию | +| `memory_claude_bridge_sync` | Синхронизация с MEMORY.md | +| `memory_team_share` | Поделиться с участниками команды | +| `memory_team_feed` | Недавно расшаренные элементы | +| `memory_audit` | Аудит-журнал операций | +| `memory_governance_delete` | Удалить с записью в аудит-журнал | +| `memory_snapshot_create` | Снапшот, версионированный в git | +| `memory_action_create` | Создать задачи с зависимостями | +| `memory_action_update` | Обновить статус action | +| `memory_frontier` | Разблокированные action'ы, отсортированные по приоритету | +| `memory_next` | Самый важный следующий action | +| `memory_lease` | Эксклюзивные lease'ы для action'ов (мультиагентность) | +| `memory_routine_run` | Инстанцировать workflow-routine'ы | +| `memory_signal_send` | Межагентный обмен сообщениями | +| `memory_signal_read` | Чтение сообщений с подтверждениями | +| `memory_checkpoint` | Внешние условные шлюзы | +| `memory_mesh_sync` | P2P-синхронизация между инстансами | +| `memory_sentinel_create` | События-наблюдатели | +| `memory_sentinel_trigger` | Запустить sentinel'ы извне | +| `memory_sketch_create` | Эфемерные графы action'ов | +| `memory_sketch_promote` | Перевести в постоянное состояние | +| `memory_crystallize` | Сжать цепочки action'ов | +| `memory_diagnose` | Проверки состояния | +| `memory_heal` | Авто-исправление зависшего состояния | +| `memory_facet_tag` | Теги вида измерение:значение | +| `memory_facet_query` | Запрос по фасет-тегам | +| `memory_verify` | Трассировка происхождения | + +
+ +### 6 ресурсов · 3 промпта · 4 skill'а + +| Тип | Имя | Описание | +|------|------|-------------| +| Ресурс | `agentmemory://status` | Состояние, число сессий, число записей памяти | +| Ресурс | `agentmemory://project/{name}/profile` | Интеллект на уровне проекта | +| Ресурс | `agentmemory://memories/latest` | 10 последних активных записей памяти | +| Ресурс | `agentmemory://graph/stats` | Статистика графа знаний | +| Промпт | `recall_context` | Поиск + возврат контекстных сообщений | +| Промпт | `session_handoff` | Передача данных между агентами | +| Промпт | `detect_patterns` | Анализ повторяющихся паттернов | +| Skill | `/recall` | Поиск по памяти | +| Skill | `/remember` | Сохранение в долговременную память | +| Skill | `/session-history` | Краткие итоги последних сессий | +| Skill | `/forget` | Удаление наблюдений / сессий | + +### Standalone MCP + +Запуск без полного сервера — для любого MCP-клиента. Подойдёт любое: + +```bash +npx -y @agentmemory/agentmemory mcp # canonical (always available) +npx -y @agentmemory/mcp # shim package alias +``` + +Или добавьте в MCP-конфиг своего агента: + +Большинство агентов (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +Вставьте запись `agentmemory` в существующий объект `mcpServers` хоста, а не заменяйте файл. Для sandbox-клиентов, которые не могут добраться до `localhost` хоста, добавьте `"AGENTMEMORY_FORCE_PROXY": "1"` в блок env и укажите `AGENTMEMORY_URL` на маршрут, доступный из sandbox. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Скопируйте файл плагина из репозитория: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Просмотрщик реального времени

+ +Автоматически запускается на порту `3113`. Живой поток наблюдений, обозреватель сессий, браузер по памяти, визуализация графа знаний и панель состояния. + +```bash +open http://localhost:3113 +``` + +Сервер просмотрщика по умолчанию слушает на `127.0.0.1`. Эндпоинт `/agentmemory/viewer`, отдаваемый REST'ом, подчиняется обычным правилам bearer-токена `AGENTMEMORY_SECRET`. Заголовки CSP используют nonce скрипта на ответ и отключают inline-атрибуты-обработчики (`script-src-attr 'none'`). + +--- + +

iii Console

+ +Просмотрщик на `:3113` показывает, что ваш агент **запомнил**. [iii console](https://iii.dev/docs/console) показывает, что ваш агент **сделал** — каждая операция памяти как трейс OpenTelemetry, каждая запись KV редактируема, каждая функция вызываема, каждый стрим тэппится. Два окна на одну и ту же память: одно повёрнуто к продукту, другое к движку. + +Наблюдайте, как срабатывает `memory_smart_search`, и видите BM25-скан → поиск эмбеддингов → RRF-слияние → reranker в виде waterfall. Отредактируйте зависший таймер консолидации в браузере KV. Воспроизведите хук `PostToolUse` с изменённым payload. Пин WebSocket-стрима — и смотрите, как наблюдения прилетают в реальном времени. + +agentmemory отдаёт это бесплатно, потому что каждая функция, триггер, scope состояния и стрим — это примитив iii: ничего самописного, нечего инструментировать. + +

+ Страница Workers в iii console — подключённые воркеры, включая инстансы agentmemory, с живым числом функций и метаданными runtime +
+ Страница Workers: каждый подключённый воркер — включая сам agentmemory — с PID, количеством функций, runtime и временем последнего появления. +

+ +**Уже установлено.** Console поставляется вместе с `iii` — отдельный установщик не нужен. + +**Запускать рядом с agentmemory:** + +```bash +# agentmemory viewer holds port 3113, so run the console on 3114. +# Engine REST (3111), WebSocket (3112), and bridge (49134) defaults match agentmemory. +iii console --port 3114 +``` + +Затем откройте `http://localhost:3114`. Добавьте `--enable-flow` для экспериментальной страницы графа архитектуры. + +Переопределяйте эндпоинты движка только если вы их перенесли: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Что можно делать из console:** + +| Страница | Зачем | +|------|-----------| +| **Workers** | Видеть каждый подключённый воркер и его живые метрики — включая сам воркер agentmemory. | +| **Functions** | Напрямую вызывать любую функцию agentmemory с JSON-payload — удобно для тестов `memory.recall`, `memory.consolidate`, `graph.query` без подключения клиента. | +| **Triggers** | Воспроизводить HTTP-, cron-, event- и state-триггеры — запустить cron консолидации вручную, повторить HTTP-маршрут, эмитировать изменение состояния. | +| **States** | KV-браузер с полным CRUD — сессии, слоты памяти, lifecycle-таймеры, индекс эмбеддингов — редактирование значений на месте. | +| **Streams** | Живой WebSocket-монитор для записей памяти, событий хуков и обновлений наблюдений по мере их прохождения через iii-стримы. | +| **Queues** | Долговечные топики очередей + управление dead-letter. Повтор или сброс упавших job'ов эмбеддинга / компрессии. | +| **Traces** | Виды waterfall / flame / разбивка по сервисам в OpenTelemetry. Фильтр по `trace_id` показывает, какие функции, обращения к БД и embedding-запросы породил отдельный `memory.search`. | +| **Logs** | Структурированные OTEL-логи, фильтруемые и коррелируемые с trace-/span-ID. | +| **Config** | Конфигурация runtime — какие именно воркеры, провайдеры и порты использует ваш движок. | +| **Flow** | (Опционально, `--enable-flow`) Интерактивный граф архитектуры из всех воркеров, триггеров и стримов. | + +

+ Просмотр trace-waterfall в iii console с длительностью каждого span +
+ Traces: waterfall / flame / разбивка по сервисам для каждой операции памяти. +

+ +**Traces уже включены:** + +`iii-config.yaml` поставляется с включённым воркером `iii-observability` (`exporter: memory`, `sampling_ratio: 1.0`, метрики + логи). Дополнительная настройка не нужна — как только agentmemory запускается, каждая операция памяти эмитит trace-span и структурированный лог, который консоль читает. + +Если хотите экспортировать в Jaeger/Honeycomb/Grafana Tempo, измените `exporter: memory` на `exporter: otlp` и укажите эндпоинт коллектора согласно документации по observability в iii. + +> **Внимание:** на самой console аутентификация не применяется — держите её привязанной к `127.0.0.1` (по умолчанию) и никогда не выставляйте наружу. + +--- + +

Powered by iii

+ +agentmemory — это **уже работающий инстанс [iii](https://iii.dev)**. Функции, триггеры, KV-состояние, стримы, OTEL-трейсы — всё это примитивы iii. Вы не ставили Postgres, Redis, Express, pm2 или Prometheus, потому что iii их заменяет. + +Это значит, что одна дополнительная команда расширяет agentmemory целой новой возможностью. + +### Расширить agentmemory одной командой + +```bash +iii worker add iii-pubsub # fan memory writes out to every connected instance +iii worker add iii-cron # scheduled consolidation, decay sweeps, snapshot rotation +iii worker add iii-queue # durable retries for embedding + compression jobs +iii worker add iii-observability # OTEL traces on every memory op (default on) +iii worker add iii-sandbox # run recalled code inside an isolated microVM +iii worker add iii-database # swap in a SQL-backed state adapter +iii worker add mcp # generic MCP host alongside the agentmemory MCP +``` + +Каждый `iii worker add` регистрирует новые функции и триггеры в том же движке, где уже работает agentmemory. Просмотрщик и console подхватывают их мгновенно — без перезагрузки, новой интеграции или нового контейнера. + +| `iii worker add` | Что получаете сверху к agentmemory | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Память на множестве инстансов: каждое `remember` разлетается, каждое `search` читает объединение | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Жизненный цикл по расписанию — ночная консолидация, еженедельные снапшоты, decay по фиксированному таймеру | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Надёжные повторы: упавшие job'ы эмбеддинга и компрессии переживают перезапуск, наблюдения не теряются | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | OTEL-трейсы, метрики, логи на каждой функции — подключены в `iii-config.yaml` с первого дня | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | Код, пришедший из `memory_recall`, исполняется внутри одноразовой VM, а не в вашем shell | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | SQL-адаптер состояния, когда дефолтная in-memory KV уже мала | +| [`mcp`](https://workers.iii.dev/workers/mcp) | Поднять дополнительные MCP-серверы рядом с MCP'ом agentmemory, на одном и том же движке | + +Полный реестр: [workers.iii.dev](https://workers.iii.dev). Каждый воркер там собирается из тех же примитивов, что и agentmemory — и тот agentmemory, который у вас уже есть, — один из них. + +### Что заменяет iii + +| Традиционный стек | agentmemory использует | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + векторный индекс в памяти | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | Супервизия воркеров движка iii | +| Prometheus / Grafana | iii OTEL + монитор состояния | +| Самописные плагинные системы | `iii worker add ` | + +**118 исходных файлов · ~21 800 LOC · 950+ тестов · 123 функции · 34 KV-scope'а** — всё на трёх примитивах. Никакого `agentmemory plugin install`. Плагинная система — это сам iii. + +--- + +

Конфигурация

+ +### LLM-провайдеры + +agentmemory автоопределяет провайдера по окружению. По умолчанию никакие вызовы LLM не выполняются, пока вы не настроите провайдера или явно не включите fallback на подписку Claude. + +| Провайдер | Конфигурация | Заметки | +|----------|--------|-------| +| **No-op (по умолчанию)** | Настройка не нужна | LLM-сжатие/резюме ВЫКЛЮЧЕНО. Синтетическое BM25-сжатие и recall продолжают работать. Если вы раньше полагались на fallback подписки Claude — см. `AGENTMEMORY_ALLOW_AGENT_SDK` ниже. | +| Anthropic API | `ANTHROPIC_API_KEY` | Поминутная (token-based) оплата | +| MiniMax | `MINIMAX_API_KEY` | Совместим с Anthropic | +| Gemini | `GEMINI_API_KEY` | Дополнительно включает эмбеддинги | +| OpenRouter | `OPENROUTER_API_KEY` | Любая модель | +| Fallback на подписку Claude | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Только по согласию. Запускает сессии `@anthropic-ai/claude-agent-sdk` — раньше приводил к неограниченной рекурсии Stop-хука, потому больше не по умолчанию. | + +### Выбор модели с учётом стоимости + +Фоновое сжатие выполняется на каждом наблюдении, поэтому выбор модели заметно влияет на ежемесячные расходы. Замеренные данные нагрузки: 635 запросов / 888K токенов / 35 часов активного использования, прогон против трёх моделей OpenRouter по ценам на 2026-05-23. + +| Уровень | Модель | Вход / 1M | Выход / 1M | Стоимость за зафиксированные 35 ч | Заметки | +|------|-------|------------|-------------|---------------------------|-------| +| Рекомендовано | `deepseek/deepseek-v4-pro` | 0,435 $ | 0,87 $ | ~0,46 $ | Хорошее качество сжатия и резюмирования при стоимости ~10× ниже Sonnet. | +| Рекомендовано | `deepseek/deepseek-chat` | 0,27 $ | 1,10 $ | ~0,40 $ | Постарше, но для рабочих нагрузок только на сжатие по-прежнему годится. | +| Рекомендовано | `qwen/qwen3-coder` | 0,45 $ | 1,80 $ | ~0,55 $ | Сильное code-reasoning, если ваши сессии сильно завязаны на код. | +| Premium | `anthropic/claude-sonnet-4.6` | 3,00 $ | 15,00 $ | ~5,02 $ | Высокое качество, но дорого для постоянной фоновой работы. | +| Premium | `openai/gpt-4o` | 2,50 $ | 10,00 $ | ~4,20 $ | Класс, схожий с Sonnet. | +| Избегать | `anthropic/claude-opus-4.6` | 15,00 $ | 75,00 $ | ~25+ $ | Модель класса reasoning; колоссальный перерасход на сжатие. | + +agentmemory выводит runtime-предупреждение, когда `OPENROUTER_MODEL` совпадает с шаблоном premium-уровня. Установите `AGENTMEMORY_SUPPRESS_COST_WARNING=1`, чтобы заглушить его, как только сделаете осознанный выбор. + +Компромисс качество/цена для работы с памятью: сжатие — это задача резюмирования с относительно мягкими требованиями к качеству (резюме перечитывает агент, не пользователь). DeepSeek-V4-Pro / Qwen3-Coder ложатся на этой задаче в пределах погрешности от Sonnet, стоя примерно в 10 раз дешевле. Премиум-модели оставляйте для запросов, которые читаете напрямую. + +Источники: [цены OpenRouter на Sonnet 4.6](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [заметки о ценах DeepSeek](https://api-docs.deepseek.com/quick_start/pricing/). + +### Мультиагентная память (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +В мультиагентных конфигурациях, где несколько ролей делят один сервер agentmemory (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` помечает каждую запись ролью, которая её сделала. `AGENTMEMORY_AGENT_SCOPE` управляет тем, фильтрует ли recall по этому тегу. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared" +``` + +Два режима: + +| Режим | Помечать записи | Фильтровать recall | Когда использовать | +|------|------------|---------------|-------------| +| `shared` (по умолчанию) | да | нет | Общий контекст между агентами с аудит-журналом. Architect видит, что отметил developer, но каждая запись фиксирует, кто это сказал. | +| `isolated` | да | да | Строгое разделение. Architect никогда не увидит наблюдения / записи памяти / сессии developer'а. | + +Что помечается, когда `AGENT_ID` задан: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. Роль течёт по `api::session::start` → `mem::observe` → `mem::compress` → KV. + +Что фильтруется в режиме `isolated`: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Каждый эндпоинт принимает `?agentId=` для переопределения на конкретный запрос и `?agentId=*`, чтобы полностью выйти из env-scope. `/memories` дополнительно принимает `?includeOrphans=true`, чтобы поднять «доисторические» записи памяти, у которых `agentId` не определён. + +Переопределение в самом вызове на уровне SDK / REST: каждый мутирующий эндпоинт (`/session/start`, `/remember`) принимает поле `agentId` в теле запроса, которое выигрывает у env. Полезно для runtime'ов, прогоняющих много ролей через один серверный процесс. + +Когда `AGENT_ID` не задан, память остаётся без scope (legacy-поведение: ни тегов, ни фильтров). + +### Порты + +agentmemory + iii-engine по умолчанию занимают четыре порта. Если перезапуск падает с `port in use`, эта таблица подскажет, какой процесс искать. + +| Порт | Процесс | Назначение | Override через env | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Внутренний streams-воркер (используется agentmemory + просмотрщиком) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Просмотрщик в реальном времени (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — воркеры регистрируются здесь, по нему же течёт OTel-телеметрия | `III_ENGINE_URL` (полный URL, по умолчанию `ws://localhost:49134`) | + +Очистка завис­ших процессов, если порты остаются занятыми после падения: + +```bash +# macOS / Linux — find whatever is on each port and kill it +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` корректно вычищает и воркер, и pidfile движка при штатном завершении. Ручная очистка выше нужна только в посткрэшевом сценарии, когда ни один pidfile не остался. + +### Конфигурационный файл + +Помещайте runtime-конфигурацию agentmemory в `~/.agentmemory/.env`, а не экспортируйте переменные в каждой сессии shell. Если просмотрщик показывает подсказку настройки вида `export ANTHROPIC_API_KEY=...`, скопируйте её в этот файл как `ANTHROPIC_API_KEY=...` без префикса `export`, затем перезапустите agentmemory. + +Переменные окружения процесса по-прежнему работают и имеют приоритет над значениями из файла. + +В Windows тот же файл лежит в `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +Чтобы протестировать с подпиской Claude Code Pro/Max вместо API-ключа, включите её явно: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +В этом же файле включите возможности графа или консолидации, если они нужны: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Переменные окружения + +Создайте `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +124 эндпоинта на порту `3111`. REST API по умолчанию слушает на `127.0.0.1`. Защищённые эндпоинты требуют `Authorization: Bearer `, когда установлен `AGENTMEMORY_SECRET`, а эндпоинты mesh-синхронизации требуют `AGENTMEMORY_SECRET` на обоих узлах. + +
+Ключевые эндпоинты + +| Метод | Путь | Описание | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Проверка состояния (всегда публична) | +| `POST` | `/agentmemory/session/start` | Запуск сессии + получение контекста | +| `POST` | `/agentmemory/session/end` | Завершение сессии | +| `POST` | `/agentmemory/observe` | Захват наблюдения | +| `POST` | `/agentmemory/smart-search` | Гибридный поиск | +| `POST` | `/agentmemory/context` | Генерация контекста | +| `POST` | `/agentmemory/remember` | Сохранить в долговременную память | +| `POST` | `/agentmemory/forget` | Удалить наблюдения | +| `POST` | `/agentmemory/enrich` | Контекст файла + записи памяти + баги | +| `GET` | `/agentmemory/profile` | Профиль проекта | +| `GET` | `/agentmemory/export` | Экспорт всех данных | +| `POST` | `/agentmemory/import` | Импорт из JSON | +| `POST` | `/agentmemory/graph/query` | Запрос к графу знаний | +| `POST` | `/agentmemory/team/share` | Расшарить в команду | +| `GET` | `/agentmemory/audit` | Аудит-журнал | + +Полный список эндпоинтов: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Разработка

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ tests +npm run test:integration # API tests (requires running services) +``` + +**Требования:** Node.js >= 20, [iii-engine](https://iii.dev/docs) или Docker + +

Лицензия

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.tr-TR.md b/READMEs/README.tr-TR.md new file mode 100644 index 0000000..28fad80 --- /dev/null +++ b/READMEs/README.tr-TR.md @@ -0,0 +1,1380 @@ +

+ agentmemory — AI kodlama ajanları için kalıcı bellek +

+ +

+ + Kodlama ajanınız her şeyi hatırlasın. Aynı şeyi bir daha açıklamayın. + Built on iii engine +
+ Claude Code, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode ve her MCP istemcisi için kalıcı bellek. +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1200 stars / 172 forks on the gist +

+ +

+ Bu gist, Karpathy'nin LLM Wiki desenini güven puanlaması, yaşam döngüsü, bilgi grafları ve hibrit aramayla genişletir: agentmemory bunun uygulamasıdır. +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory demo +

+ +

+ Kurulum • + Hızlı Başlangıç • + Kıyaslamalar • + Rakiplerle Karşılaştırma • + Ajanlar • + Nasıl Çalışır • + MCP • + Görüntüleyici • + iii Konsolu • + iii ile çalışır • + Yapılandırma • + API +

+ +--- + +## Kurulum + +```bash +npm install -g @agentmemory/agentmemory # bir kez — `agentmemory` PATH'te kullanılabilir +# macOS/Linux sistem Node kurulumlarında EACCES hatası alırsanız şununla deneyin: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # bellek sunucusunu :3111 üzerinde başlat +agentmemory demo # örnek oturumlar yükle + recall'u kanıtla +agentmemory connect claude-code # ajanınızı bağlayın (ayrıca: codex, cursor, gemini-cli, ...) +``` + +Veya `npx` ile (kurulum gerekmez): + +```bash +npx @agentmemory/agentmemory +``` + +Dikkat — npx sürüm bazında önbelleğe alır. Eğer çıplak bir `npx @agentmemory/agentmemory` eski bir sürümü servis ediyorsa, en güncelini `npx -y @agentmemory/agentmemory@latest` ile zorlayın veya önbelleği `rm -rf ~/.npm/_npx` ile bir kez temizleyin (macOS/Linux; Windows'ta `%LOCALAPPDATA%\npm-cache\_npx` dizinini silin). v0.9.16+ sonrası ilk npx çalıştırması, çıplak `agentmemory` komutunun her yerden çalışması için global kurulum yapmanızı satır içi olarak sorar. + +Tüm seçenekler aşağıdaki [Hızlı Başlangıç](#quick-start) bölümünde. Ajana özel bağlantılar için [Her ajanla çalışır](#works-with-every-agent) bölümüne bakın. + +--- + +

Works with every agent

+ +agentmemory; hook'ları, MCP'yi veya REST API'yi destekleyen her ajanla çalışır. Tüm ajanlar aynı bellek sunucusunu paylaşır. + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+yerel eklenti + 12 hook + MCP +
+Codex CLI
+Codex CLI
+yerel eklenti + 6 hook + MCP +
+OpenClaw
+OpenClaw
+yerel eklenti + MCP +
+Hermes
+Hermes
+yerel eklenti + MCP +
+pi
+pi
+yerel eklenti + MCP +
+OpenHuman
+OpenHuman
+yerel Memory trait arka uç +
+Cursor
+Cursor
+MCP sunucusu +
+Gemini CLI
+Gemini CLI
+MCP sunucusu +
+OpenCode
+OpenCode
+22 hook + MCP + eklenti +
+Cline
+Cline
+MCP sunucusu +
+Goose
+Goose
+MCP sunucusu +
+Kilo Code
+Kilo Code
+MCP sunucusu +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP sunucusu +
+Windsurf
+Windsurf
+MCP sunucusu +
+Roo Code
+Roo Code
+MCP sunucusu +
+ +

+ MCP veya HTTP konuşan herhangi bir ajanla çalışır. Tek sunucu, tüm ajanlar arasında paylaşılan bellek. +

+ +--- + +Her oturumda aynı mimariyi tekrar tekrar anlatıyorsunuz. Aynı bug'ları yeniden keşfediyorsunuz. Aynı tercihleri yeniden öğretiyorsunuz. Yerleşik bellek (CLAUDE.md, .cursorrules) 200 satırda tıkanır ve eskir. agentmemory bunu düzeltir. Ajanınızın yaptıklarını sessizce yakalar, aranabilir belleğe sıkıştırır ve bir sonraki oturum başladığında doğru bağlamı enjekte eder. Tek komut. Ajanlar arası çalışır. + +**Neler değişiyor:** Oturum 1'de JWT kimlik doğrulamasını kuruyorsunuz. Oturum 2'de hız sınırlaması istiyorsunuz. Ajan zaten biliyor: kimlik doğrulamanız `src/middleware/auth.ts` içinde jose middleware kullanıyor, testleriniz token doğrulamasını kapsıyor ve Edge uyumluluğu için jsonwebtoken yerine jose'yi seçtiniz. Yeniden anlatma yok. Kopyala-yapıştır yok. Ajan basitçe *biliyor*. + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0'da yeni** — [agent-memory.dev](https://agent-memory.dev) tanıtım sitesi, dosya sistemi bağlayıcısı (`@agentmemory/fs-watcher`), bağımsız MCP artık çalışan sunucuya proxy yapıyor (böylece hook'lar ve görüntüleyici hemfikir), her silme yolunda kodlanmış denetim politikası, küçük Node süreçlerinde sağlık `memory_critical` olarak işaretlenmiyor. Tüm notlar [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18) içinde. + +--- + +

Benchmarks

+ + + + + + +
+ +### Geri Getirme Doğruluğu + +**coding-agent-life-v1** (kurum içi corpus, sandbox-yeniden üretilebilir) + +| Adaptör | P@5 | R@5 | Top-5 isabet oranı | p50 gecikme | +|---|---|---|---|---| +| **agentmemory hibrit** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep referansı | 0.267 | 0.967 | 15 / 15 | 0 ms | + +%100 Top-5 isabet oranı. Aynı girdide grep referansından **2.2×** daha iyi hassasiyet. Tam tip bazında döküm: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md). + +**LongMemEval-S** (ICLR 2025, 500 soru) + +| Sistem | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| Yalnız BM25 yedeği | 86.2% | 94.6% | 71.5% | + + + +### Token Tasarrufu + +| Yaklaşım | Token/yıl | Maliyet/yıl | +|---|---|---| +| Tam bağlamı yapıştır | 19.5M+ | İmkansız (pencereyi aşar) | +| LLM-özetlenmiş | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + yerel embedding | ~170K | **$0** | + +
+ +> Embedding modeli: `all-MiniLM-L6-v2` (yerel, ücretsiz, API anahtarı gerekmez). Tam raporlar: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md). Rakip karşılaştırması: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory'nin mem0, Letta, Khoj, claude-mem, Hippo ile karşılaştırması. + +**Yerel olarak yeniden üretin:** [`eval/README.md`](../eval/README.md) — LongMemEval `_s` (genel 500 soru) + `coding-agent-life-v1` (kurum içi 15 oturum corpus) için adaptör-takılabilir harness. Grep / vektör / agentmemory adaptörleri yan yana puanlanır, NDJSON çıktısı, yayımlanan puan tabloları [`docs/benchmarks/`](../docs/benchmarks/) içine düşer. + +**[codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything) ve [Graphify](https://github.com/safishamsi/graphify) ile birlikte çalışır.** Kod-graf indeksleme, çok-ajanlı build pipeline'ları ve doküman / PDF / görsel / video boyunca daha geniş bilgi grafları. agentmemory çalışmayı hatırlar; bu üç proje bağlam katmanının geri kalanını aydınlatır. Tarifler + soru-yönlendirme tablosu: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md). + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)Yerleşik (CLAUDE.md)
TürBellek motoru + MCP sunucusuBellek katmanı API'siTam ajan runtime'ıStatik dosya
Geri getirme R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
Otomatik yakalama12 hook (sıfır manuel çaba)Manuel add() çağrılarıAjan kendi düzenlerManuel düzenleme
AramaBM25 + Vektör + Graf (RRF füzyonu)Vektör + GrafVektör (arşiv)Her şeyi bağlama yükler
Çoklu ajanMCP + REST + lease'ler + sinyallerAPI (koordinasyon yok)Yalnızca Letta runtime'ı içindeAjan başına dosya
Framework bağımlılığıYok (herhangi bir MCP istemcisi)YokYüksek (Letta kullanılmalı)Ajan başına format
Harici bağımlılıklarYok (SQLite + iii-engine)Qdrant / pgvectorPostgres + vektör DBYok
Bellek yaşam döngüsü4 katmanlı konsolidasyon + decay + otomatik-unutmaPasif çıkarımAjan-yönetimliManuel ayıklama
Token verimliliği~1,900 token/oturum ($10/yıl)Entegrasyona göre değişirÇekirdek bellek bağlamda240 gözlemde 22K+ token
Gerçek zamanlı görüntüleyiciVar (port 3113)Bulut panelBulut panelYok
Self-hostedEvet (varsayılan)İsteğe bağlıİsteğe bağlıEvet
+ +--- + +

Quick Start

+ +Uyumluluk: bu sürüm kararlı `iii-sdk` `^0.11.0` ve iii-engine v0.11.x'i hedefler. + +### 30 saniyede deneyin + +```bash +# Terminal 1: sunucuyu başlatın +npx @agentmemory/agentmemory + +# Terminal 2: örnek veriyi yükleyin ve geri çağırmayı iş başında görün +npx @agentmemory/agentmemory demo +``` + +`demo`, 3 gerçekçi oturum yükler (JWT auth, N+1 sorgu düzeltmesi, hız sınırlaması) ve bunlar üzerinde anlamsal aramalar çalıştırır. "veritabanı performans optimizasyonu" araması yaptığınızda "N+1 sorgu düzeltmesi"ni bulduğunu göreceksiniz — anahtar kelime eşleştirmesi bunu yapamaz. + +Belleğin canlı oluşumunu izlemek için `http://localhost:3113` adresini açın. + +### Önerilen: globally kurun + +`npx` sürüm bazında önbelleğe alır. Geçen hafta `npx @agentmemory/agentmemory@0.9.14`'ü çalıştırdıysanız, çıplak bir `npx @agentmemory/agentmemory` `~/.npm/_npx/`'ten en son sürümü değil, eski 0.9.14'ü servis edebilir. Bir kez kurun ve çıplak `agentmemory` komutu her yerde çalışsın: + +```bash +npm install -g @agentmemory/agentmemory +# macOS/Linux sistem Node kurulumlarında EACCES hatası alırsanız şununla deneyin: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # sunucuyu başlatın (npx şekliyle aynı) +agentmemory stop # kapatın +agentmemory remove # oluşturduğumuz her şeyi kaldırın +agentmemory connect claude-code # tek bir ajanı bağlayın +agentmemory doctor # interaktif teşhis + düzeltme istemleri +``` + +v0.9.16 ve sonrası ile birlikte, ilk npx çalıştırması global kurmanızı satır içi olarak ister — bir kez `Y` yanıtlayın, hazırsınız. Atlarsanız, taze bir indirme için şunlardan birine geri dönün: + +```bash +npx -y @agentmemory/agentmemory@latest # npm'den en güncelini zorlar (platformlar arası) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # yalnız macOS/Linux (POSIX shell) +``` + +Windows / PowerShell'de eşdeğer cache temizleme komutu `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` şeklindedir — yukarıdaki `npx -y ...@latest` formu platformlar arası seçenektir. + +### Oturum Tekrar Oynatma (Session Replay) + +agentmemory'nin kaydettiği her oturum tekrar oynatılabilir. Görüntüleyiciyi açın, **Replay** sekmesini seçin ve zaman çizelgesini tarayın: istemler, araç çağrıları, araç sonuçları ve yanıtlar; oynat/duraklat, hız kontrolü (0.5×–4×) ve klavye kısayollarıyla (boşluk geçiş, oklar adım atlama) ayrı olaylar olarak görüntülenir. + +Halihazırda içeri aktarmak istediğiniz eski Claude Code JSONL kayıtlarınız mı var? + +```bash +# Varsayılan ~/.claude/projects altındaki her şeyi içeri aktar +npx @agentmemory/agentmemory import-jsonl + +# Veya tek bir dosya içeri aktar +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +İçeri aktarılan oturumlar yerli olanların yanında Replay seçicisinde görünür. Arka planda her giriş `mem::replay::load`, `mem::replay::sessions` ve `mem::replay::import-jsonl` iii fonksiyonları üzerinden yönlendirilir — yan kanal sunucu yok. + +### Yükseltme / Bakım + +Yerel runtime'ınızı bilinçli olarak güncellemek istediğinizde bakım komutunu kullanın: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +Uyarı: bu komut mevcut çalışma alanını/runtime'ı değiştirir. JavaScript bağımlılıklarını güncelleyebilir ve sabitlenmiş `iiidev/iii:0.11.2` Docker imajını çekebilir. Asla sabitlenmemiş ya da daha yeni bir iii motoru kurmaz. + +Uygulama detayları `src/cli.ts` içinde (`src/cli.ts:544-595` bölgesi civarında `runUpgrade`'a bakın). + +### Claude Code (tek blok, yapıştırın) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Eklenti kurulumu olmadan Claude Code (MCP-bağımsız yol) + +Eğer `/plugin install` kullanmak yerine agentmemory'nin MCP sunucusunu doğrudan `~/.claude.json` üzerinden bağlarsanız, Claude Code `${CLAUDE_PLUGIN_ROOT}`'u asla çözmez ve hook scriptlerini `~/.claude/settings.json` içinde mutlak yollara işaret etmek zorunda kalırsınız. Bu yollar genellikle agentmemory sürümünü gömer (örn. `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`), bu yüzden bir sonraki yükseltme her hook'u sessizce kırar. + +Geçici çözüm: + +```bash +agentmemory connect claude-code --with-hooks +``` + +Bu, aynı hook komutlarını `~/.claude/settings.json` içine, kurulu `@agentmemory/agentmemory` paketinin paketli `plugin/` dizinine çözülmüş mutlak yollarla birleştirir. agentmemory'yi yükselttikten sonra yolları yenilemek için komutu yeniden çalıştırın. Aynı dosyadaki kullanıcı girdileri korunur; yalnızca önceki agentmemory girdileri değiştirilir. `/plugin install` yolunu kullanmak hâlâ önerilen yaklaşımdır. +Uzak veya korumalı deployment'lar için Claude Code'u `AGENTMEMORY_URL` ve `AGENTMEMORY_SECRET` ayarlanmış olarak başlatın. Eklenti her iki değeri de paketli MCP sunucusuna geçirir; `AGENTMEMORY_URL` boş olduğunda MCP shim'i `http://localhost:3111`'i kullanır. + +### Codex CLI (Codex eklenti platformu) + +```bash +# 1. ayrı bir terminalde bellek sunucusunu başlatın +npx @agentmemory/agentmemory + +# 2. agentmemory marketplace'i kaydedin ve eklentiyi kurun +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex eklentisi, Claude Code eklentisiyle aynı `plugin/` dizininden gelir. Şunları kaydeder: + +- `@agentmemory/mcp` MCP sunucusu olarak (`AGENTMEMORY_URL` çalışan bir agentmemory sunucusuna işaret ettiğinde tüm 51 tool'u proxy yapar; erişilebilir sunucu yoksa yerel olarak 7 tool'a düşer) +- 6 yaşam döngüsü hook'u: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop` +- 4 skill: `/recall`, `/remember`, `/session-history`, `/forget` + +Codex'in hook motoru, hook alt süreçlerine `CLAUDE_PLUGIN_ROOT` enjekte eder (bkz. [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), bu sayede aynı hook scriptleri her iki host'ta da çoğaltma yapmadan çalışır. Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure olayları yalnızca Claude Code'a özeldir ve Codex için kaydedilmez. + +#### Codex Desktop: eklenti hook'ları şu anda sessiz (geçici çözüm mevcut) + +`CodexHooks` ve `PluginHooks` her ikisi de [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs) içinde stable + varsayılan olarak etkin, ancak Codex Desktop sürümleri şu anda eklenti-yerel `hooks.json`'u dağıtmıyor ([openai/codex#16430](https://github.com/openai/codex/issues/16430)). MCP tool'ları hâlâ çalışıyor; yalnızca yaşam döngüsü gözlemleri eksik. + +Düzeltme upstream'e iner inmez, aynı hook komutlarını global `~/.codex/hooks.json` içine yansıtın: + +```bash +agentmemory connect codex --with-hooks +``` + +Bu, `~/.codex/hooks.json`'a paketli scriptlere mutlak yollarla atıfta bulunan idempotent bir blok ekler (user-scope'ta `${CLAUDE_PLUGIN_ROOT}` genişlemesi gerekmez). agentmemory'yi yükselttikten sonra yolları yenilemek için aynı komutu yeniden çalıştırın. Aynı dosyadaki kullanıcı girdileri korunur; yalnızca önceki agentmemory girdileri değiştirilir. + +
+OpenClaw (bu istemi yapıştırın) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +Tam kılavuz: [`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent (bu istemi yapıştırın) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +Tam kılavuz: [`integrations/hermes/`](../integrations/hermes/) + +
+ +### Diğer ajanlar + +Bellek sunucusunu başlatın: `npx @agentmemory/agentmemory` + +agentmemory girdisi, `mcpServers` şeklini kullanan her host'ta (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI, OpenClaw) **aynı MCP sunucu bloğudur**: + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**Bu girdiyi host'un yapılandırma dosyasındaki mevcut `mcpServers` nesnesine birleştirin** — dosyayı değiştirmeyin. Dosyada zaten başka sunucular varsa, `agentmemory`'yi `mcpServers` içindeki başka bir anahtar olarak yanlarına ekleyin. `mcpServers` tamamen eksikse, bloğu `{ "mcpServers": { ... } }` içine yapıştırın. `${VAR}` yer tutucuları, MCP-sunucu lansmanında shell'den `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET`'i miras alır — ayarsız değişkenler boş string geçirir ve shim `http://localhost:3111`'e geri döner. Bir tane bağlı girdi hem yerel hem uzak (k8s / reverse-proxy'li) dağıtımları kapsar. + +| Ajan | Yapılandırma dosyası | Notlar | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | `mcpServers` içine birleştirin. Web sitesinde tek tıklamayla deeplink de mevcut. | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | `mcpServers` içine birleştirin. Düzenlemeden sonra Claude Desktop'ı yeniden başlatın. | +| **Cline / Roo Code / Kilo Code** | Cline MCP ayarları (Settings UI → MCP Servers → Edit) | Aynı `mcpServers` bloğu. | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | Aynı `mcpServers` bloğu. | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (otomatik birleştirir). | +| **OpenClaw** | OpenClaw MCP yapılandırması | Aynı `mcpServers` bloğu veya daha derin [bellek eklentisi](../integrations/openclaw/) kullanın. | +| **Codex CLI (yalnız MCP)** | `.codex/config.toml` | TOML şekli: `codex mcp add agentmemory -- npx -y @agentmemory/mcp` veya manuel olarak `[mcp_servers.agentmemory]` ekleyin. | +| **Codex CLI (tam eklenti)** | Codex eklenti marketplace | `codex plugin marketplace add rohitg00/agentmemory` ardından `codex plugin add agentmemory@agentmemory`. MCP + 6 yaşam döngüsü hook'u (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact, Stop) + 4 skill kaydeder. Codex Desktop'ta, [openai/codex#16430](https://github.com/openai/codex/issues/16430) inene kadar `agentmemory connect codex --with-hooks` da çalıştırın — eklenti hook'ları şu anda orada sessiz. | +| **OpenCode (yalnız MCP)** | `opencode.json` | Farklı şekil — üst seviye `mcp` anahtarı, komut dizi olarak: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`. | +| **OpenCode (tam eklenti)** | `plugin/opencode/` | Oturum yaşam döngüsü, mesajlar, araçlar, hataları kapsayan 22 otomatik yakalama hook'u. İki slash komut (`/recall`, `/remember`). `plugin/opencode/`'u OpenCode çalışma alanınıza kopyalayın ve eklenti girdisini `opencode.json`'a ekleyin. Tam hook tablosu + gap analizi için [`plugin/opencode/README.md`](../plugin/opencode/README.md) bakın. | +| **pi** | `~/.pi/agent/extensions/agentmemory` | [`integrations/pi`](../integrations/pi/)'yi kopyalayın ve pi'yi yeniden başlatın. | +| **Hermes Agent** | `~/.hermes/config.yaml` | Daha derin [bellek sağlayıcı eklentisi](../integrations/hermes/)'ni `memory.provider: agentmemory` ile kullanın. | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` standart `mcpServers` bloğunu yazar. Hook yükü Claude Code ile alan-uyumludur, bu yüzden mevcut 12 hook scripti değişiklik yapmadan çalışır — aynı `settings.json`'daki `hooks` bölümü üzerinden bağlayın. | +| **Antigravity** (Gemini CLI'nin yerini alır) | `mcp_config.json` (Antigravity'nin User dizininde) | `agentmemory connect antigravity` standart `mcpServers` bloğunu yazar. macOS: `~/Library/Application Support/Antigravity/User/`. Linux: `~/.config/Antigravity/User/`. 2026-06-18 Gemini CLI sonlandırılması sonrasında kullanın. | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` kullanıcı-seviyesi yapılandırmayı yazar. Çalışma alanı override'ları kodunuzun yanındaki `.kiro/settings/mcp.json`'a gider. | +| **Goose** | Goose MCP ayarları UI | Aynı `mcpServers` bloğu. | +| **Aider** | n/a | REST API ile doğrudan konuşun: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`. | +| **Herhangi bir ajan (32+)** | n/a | `npx skillkit install agentmemory` host'u otomatik algılar ve birleştirir. | + +**Sandbox'lı MCP istemcileri** (Flatpak / Snap / kısıtlayıcı container'lar) host'un `localhost`'una erişemez: ayrıca `env` bloğunda `"AGENTMEMORY_FORCE_PROXY": "1"` ayarlayın ve `AGENTMEMORY_URL`'i sandbox'ın gerçekten erişebileceği bir rotaya yönlendirin (örn. LAN IP'niz). + +### Programatik erişim (Python / Rust / Node) + +agentmemory çekirdek işlemlerini iii fonksiyonları olarak kaydeder (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`). iii SDK'sı olan herhangi bir dil, bunları doğrudan `ws://localhost:49134` üzerinden çağırabilir — dil başına ayrı bir REST istemcisi yok. + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +Çalışan örnek: [`examples/python/`](../examples/python/) (quickstart + gözlem/recall akışı). iii runtime'ı olmayan host'lar için REST `:3111` üzerinde kullanılmaya devam eder. + +### Kaynaktan + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +Bu, `iii` zaten kuruluysa yerel bir `iii-engine` ile agentmemory'yi başlatır veya Docker mevcutsa Docker Compose'a düşer. REST, stream'ler ve görüntüleyici varsayılan olarak `127.0.0.1`'e bağlanır. + +`iii-engine`'i manuel olarak kurun. **agentmemory şu anda `iii-engine`'i `v0.11.2`'ye sabitliyor** — `v0.11.6`, agentmemory'nin henüz refactor edilmediği yeni bir sandbox-her-şey-üzerinden-`iii worker add` modelini tanıtıyor. Refactor geldiğinde sabitleme kaldırılır. Sandbox modeline manuel olarak geçtiyseniz `AGENTMEMORY_III_VERSION=` ile override edin. + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** `aarch64-apple-darwin`'i `x86_64-apple-darwin` ile değiştirin +- **Linux x64:** `x86_64-unknown-linux-gnu` ile değiştirin +- **Linux arm64:** `aarch64-unknown-linux-gnu` ile değiştirin +- **Windows:** [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2)'den `iii-x86_64-pc-windows-msvc.zip`'i indirin, `iii.exe`'yi çıkarın, PATH'e ekleyin + +Veya Docker kullanın (paketli `docker-compose.yml` `iiidev/iii:0.11.2`'yi çeker). Tam dokümanlar: [iii.dev/docs](https://iii.dev/docs). + +### Windows + +agentmemory Windows 10/11'de çalışır, ancak yalnızca Node.js paketi yeterli değildir — arka planda çalışan bir süreç olarak `iii-engine` runtime'ı (ayrı yerel ikilik) da gerekir. Resmi upstream kurucu bir `sh` scripti ve bugün için PowerShell kurucusu veya scoop/winget paketi yok, bu yüzden Windows kullanıcılarının iki yolu var: + +**Seçenek A — Önceden derlenmiş Windows ikiliği (önerilen):** + +```powershell +# 1. Tarayıcınızda https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 açın +# (engine v0.11.6+'nın gerektirdiği yeni sandbox modeli için +# agentmemory refactor edilene kadar v0.11.2'ye sabitliyoruz) +# 2. iii-x86_64-pc-windows-msvc.zip indirin +# (veya ARM makinedeyseniz iii-aarch64-pc-windows-msvc.zip) +# 3. iii.exe'yi PATH'te bir yere çıkarın veya şuraya yerleştirin: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory bu konumu otomatik kontrol eder) +# 4. Doğrulayın: +iii --version +# Şunu yazmalı: 0.11.2 + +# 5. Ardından agentmemory'yi her zamanki gibi çalıştırın: +npx -y @agentmemory/agentmemory +``` + +**Seçenek B — Docker Desktop:** + +```powershell +# 1. Windows için Docker Desktop kurun +# 2. Docker Desktop'ı başlatın ve engine'in çalıştığından emin olun +# 3. agentmemory'yi çalıştırın — paketli compose dosyasını otomatik başlatır: +npx -y @agentmemory/agentmemory +``` + +**Seçenek C — yalnızca bağımsız MCP (engine yok):** yalnızca ajanınız için MCP araçlarına ihtiyacınız varsa ve REST API'sine, görüntüleyiciye veya cron işlerine gerek yoksa engine'i tamamen atlayın: + +```powershell +npx -y @agentmemory/agentmemory mcp +# veya shim paketi üzerinden: +npx -y @agentmemory/mcp +``` + +**Windows için teşhis:** `npx @agentmemory/agentmemory` başarısız olursa, gerçek engine stderr'ini görmek için `--verbose` ile yeniden çalıştırın. Yaygın hata türleri: + +| Belirti | Düzeltme | +|---|---| +| `iii-engine process started` ardından `did not become ready within 15s` | Engine başlatma sırasında çöktü — `--verbose` ile yeniden çalıştırın, stderr'i kontrol edin | +| `Could not start iii-engine` | Ne `iii.exe` ne de Docker kurulu. Yukarıdaki Seçenek A veya B'ye bakın | +| Port çakışması | `netstat -ano \| findstr :3111` ile neyin bağlı olduğunu görün, ardından öldürün veya `--port ` kullanın | +| Docker kurulu olsa bile Docker fallback atlanıyor | Docker Desktop'ın gerçekten çalıştığından emin olun (sistem tepsisi simgesi) | + +> Not: iii **motoru** önceden derlenmiş bir ikiliktir, bir cargo crate'i değildir — onu `cargo install` ile kurmaya çalışmayın. (iii **SDK'ları** crates.io, npm ve PyPI'de yayımlanmıştır, ancak agentmemory bunlara ihtiyaç duymaz.) Desteklenen motor kurulum yöntemleri, hepsi v0.11.2'ye sabitlenmiştir: yukarıdaki önceden derlenmiş v0.11.2 ikiliği, sürüm sabitlemesi **ile** upstream `sh` kurulum scripti `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh` (macOS/Linux) ve Docker imajı `iiidev/iii:0.11.2`. Yalın bir `install.sh | sh`, agentmemory'nin desteklemediği **en son** motoru kurar — her zaman `VERSION=0.11.2` geçirin. Hepsinden kolayı: sadece `npx @agentmemory/agentmemory` çalıştırın; bu, sabitlenmiş motoru sizin için `~/.agentmemory/bin` dizinine indirir. + +--- + +

Deploy

+ +Yönetilen host'lar için tek tıklamayla şablonlar. Her biri, +npm'den `@agentmemory/agentmemory`'yi çeken ve iii engine +ikilisini resmi `iiidev/iii` Docker Hub imajından kopyalayan +kendi kendine yeten bir Dockerfile içerir — önceden derlenmiş +bir agentmemory imajı gerekmez. Kalıcı depolama `/data`'ya +bağlanır; ilk açılış entrypoint'i, npm-paketli iii yapılandırmasını +(ki `127.0.0.1`'e bağlanır) `0.0.0.0`'a bağlanan ve mutlak +`/data` yollarını kullanan deploy-ayarlı bir tanesiyle üzerine +yazar, HMAC secret'ını üretir, ardından agentmemory CLI'sini +exec etmeden önce `gosu` aracılığıyla yetkileri `root`'tan +`node`'a düşürür. + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render'ın tek-tıklamayla deploy düğmesi, depo kökünde `render.yaml` +gerektirir; biz bunu bilerek temiz tutuyoruz. Deponun içindeki blueprint'e +manuel olarak işaret etmek için [`deploy/render/`](../deploy/render/README.md) içinde belgelenen Render Blueprint akışını kullanın. + +Tam kurulum detayları (HMAC yakalama, görüntüleyici SSH tüneli, +döndürme, yedekleme, maliyet alt sınırları) [`deploy/`](../deploy/README.md) içinde: + +- [`deploy/fly`](../deploy/fly/README.md) — `auto_stop_machines = "stop"` ile + tek makine; en ucuz boşta çalışma. +- [`deploy/railway`](../deploy/railway/README.md) — Hobby planı sabit ücret, + panelden volume. +- [`deploy/render`](../deploy/render/README.md) — Blueprint akışı, + ücretli planlarda otomatik disk snapshot'ları. +- [`deploy/coolify`](../deploy/coolify/README.md) — kendi VPS'inizde + [Coolify](https://coolify.io/self-hosted) üzerinden self-hosted; aynı + Docker Compose stack'i, host ve verinin sahibi sizsiniz. + +Yalnızca `3111` portu yayımlanır. `3113`'teki görüntüleyici container içinde +loopback'e bağlı kalır — her şablonun README'si ona ulaşmak için SSH-tünel +desenini belgeler. + +--- + +

Why agentmemory

+ +Her kodlama ajanı, oturum sona erdiğinde her şeyi unutur. Her oturumun ilk 5 dakikasını yığınınızı yeniden anlatarak harcarsınız. agentmemory arka planda çalışır ve bunu tamamen ortadan kaldırır. + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### Yerleşik ajan belleğiyle karşılaştırma + +Her AI kodlama ajanı yerleşik bellekle gelir — Claude Code'da `MEMORY.md`, Cursor'da notepad, Cline'da memory bank var. Bunlar yapışkan notlar gibi çalışır. agentmemory, o yapışkan notların ardındaki aranabilir veritabanıdır. + +| | Yerleşik (CLAUDE.md) | agentmemory | +|---|---|---| +| Ölçek | 200 satır sınırı | Sınırsız | +| Arama | Her şeyi bağlama yükler | BM25 + vektör + graf (yalnız top-K) | +| Token maliyeti | 240 gözlemde 22K+ | ~1,900 token (%92 daha az) | +| Ajanlar arası | Ajan başına dosya | MCP + REST (herhangi bir ajan) | +| Koordinasyon | Yok | Lease'ler, sinyaller, action'lar, routine'ler | +| Gözlemlenebilirlik | Dosyaları manuel okuma | :3113'te gerçek zamanlı görüntüleyici | + +--- + +

How It Works

+ +### Bellek Pipeline'ı + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4 Katmanlı Bellek Konsolidasyonu + +İnsan beyninin belleği nasıl işlediğinden ilham aldı — uyku konsolidasyonundan çok da farklı değil. + +| Katman | Ne | Analoji | +|------|------|---------| +| **Working** | Araç kullanımından ham gözlemler | Kısa süreli bellek | +| **Episodic** | Sıkıştırılmış oturum özetleri | "Ne oldu" | +| **Semantic** | Çıkarılmış olgular ve desenler | "Ne biliyorum" | +| **Procedural** | İş akışları ve karar desenleri | "Nasıl yapılır" | + +Bellekler zamanla decay olur (Ebbinghaus eğrisi). Sık erişilen bellekler güçlenir. Bayat bellekler otomatik tahliye edilir. Çelişkiler algılanır ve çözülür. + +### Ne Yakalanır + +| Hook | Yakalar | +|------|----------| +| `SessionStart` | Proje yolu, oturum ID | +| `UserPromptSubmit` | Kullanıcı istemleri (gizlilik-filtrelenmiş) | +| `PreToolUse` | Dosya erişim desenleri + zenginleştirilmiş bağlam | +| `PostToolUse` | Tool adı, girdi, çıktı | +| `PostToolUseFailure` | Hata bağlamı | +| `PreCompact` | Sıkıştırmadan önce belleği yeniden enjekte eder | +| `SubagentStart/Stop` | Alt-ajan yaşam döngüsü | +| `Stop` | Oturum sonu özeti | +| `SessionEnd` | Oturum tamamlandı işareti | + +### Temel Yetenekler + +| Yetenek | Açıklama | +|---|---| +| **Otomatik yakalama** | Her tool kullanımı hook'lar üzerinden kaydedilir — sıfır manuel çaba | +| **Anlamsal arama** | RRF füzyonu ile BM25 + vektör + bilgi grafı | +| **Bellek evrimi** | Sürümleme, supersede, ilişki grafları | +| **Otomatik unutma** | TTL süresi dolması, çelişki algılama, önem tahliyesi | +| **Gizlilik öncelikli** | API anahtarları, secret'lar, `` etiketleri depolamadan önce çıkarılır | +| **Kendini iyileştirme** | Devre kesici, sağlayıcı yedek zinciri, sağlık izleme | +| **Claude bridge** | MEMORY.md ile çift yönlü sync | +| **Bilgi grafı** | Entity çıkarımı + BFS gezinti | +| **Takım belleği** | İsimlendirilmiş paylaşımlı + özel takım üyeleri arasında | +| **Atıf provenansı** | Herhangi bir belleği kaynak gözlemlere kadar izleyin | +| **Git snapshot'ları** | Bellek durumunu sürümleyin, geri alın ve diff'leyin | + +--- + + + +Üç sinyali birleştiren üçlü-akış geri getirme: + +| Akış | Ne yapar | Ne zaman | +|---|---|---| +| **BM25** | Eş anlamlı genişletmeli stem'lenmiş anahtar kelime eşleştirme | Her zaman açık | +| **Vektör** | Yoğun embedding'ler üzerinde kosinüs benzerliği | Embedding sağlayıcı yapılandırılmış | +| **Graf** | Entity eşleştirme yoluyla bilgi grafı gezintisi | Sorguda entity'ler tespit edildiğinde | + +Reciprocal Rank Fusion (RRF, k=60) ile birleştirilir ve oturum-çeşitlendirilir (oturum başına maksimum 3 sonuç). + +BM25, Yunanca, Kiril, İbranice, Arapça ve aksanlı Latin'i kutudan çıkar çıkmaz tokenize eder. Çince / Japonca / Korece bellekler için, CJK akışlarını kelime-seviyesinde token'lara bölmek üzere isteğe bağlı segmenter'ları kurun (`npm install @node-rs/jieba tiny-segmenter`); bunlar olmadan agentmemory yumuşak olarak tüm-akış tokenizasyonuna düşer ve stderr'e bir kerelik bir ipucu yazdırır. + +### Embedding sağlayıcıları + +agentmemory sağlayıcınızı otomatik algılar. En iyi sonuçlar için yerel embedding'leri kurun (ücretsiz): + +```bash +npm install @xenova/transformers +``` + +| Sağlayıcı | Model | Maliyet | Notlar | +|---|---|---|---| +| **Yerel (önerilen)** | `all-MiniLM-L6-v2` | Ücretsiz | Çevrim dışı, BM25-only üzerinde +8pp recall | +| Gemini | `gemini-embedding-001` | Ücretsiz katman | 100+ dil, 768/1536/3072 boyut (MRL), 2048-token girdi. `text-embedding-004`'ün yerini alır ([deprecated, 14 Ocak 2026'da kapanış](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | 1M başı $0.02 | En yüksek kalite | +| Voyage AI | `voyage-code-3` | Ücretli | Kod için optimize edilmiş | +| Cohere | `embed-english-v3.0` | Ücretsiz deneme | Genel amaçlı | +| OpenRouter | Herhangi bir model | Değişken | Çok-modelli proxy | + +--- + +

MCP Server

+ +53 tool, 6 kaynak, 3 prompt ve 4 skill — herhangi bir ajan için en kapsamlı MCP bellek toolkit'i. + +> **MCP shim vs tam sunucu:** yayımlanan `@agentmemory/mcp` paketi ince bir shim'dir. Tam 51-tool yüzeyini **yalnızca `AGENTMEMORY_URL` üzerinden çalışan bir agentmemory sunucusuna erişebildiğinde** açığa çıkarır (proxy modu). Erişilebilir sunucu yoksa, shim 7-tool yerel sete (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`) düşer. `AGENTMEMORY_TOOLS=core|all` env değişkeni *sunucu tarafı* bir bayraktır — shim'in `env` bloğunda ayarlamak hiçbir etki yapmaz. Cursor / OpenCode / Gemini CLI'da yalnızca 7 tool görüyorsanız, `npx @agentmemory/agentmemory` (veya Docker stack'i) başlatın ve `AGENTMEMORY_URL=http://localhost:3111` ayarlayın. + +### 51 Tool + +
+Çekirdek tool'lar (her zaman kullanılabilir) + +| Tool | Açıklama | +|------|-------------| +| `memory_recall` | Geçmiş gözlemleri ara | +| `memory_compress_file` | Yapıyı koruyarak markdown dosyalarını sıkıştır | +| `memory_save` | Bir içgörü, karar veya deseni kaydet | +| `memory_patterns` | Tekrar eden desenleri algıla | +| `memory_smart_search` | Hibrit anlamsal + anahtar kelime araması | +| `memory_file_history` | Belirli dosyalar hakkında geçmiş gözlemler | +| `memory_sessions` | Son oturumları listele | +| `memory_timeline` | Kronolojik gözlemler | +| `memory_profile` | Proje profili (kavramlar, dosyalar, desenler) | +| `memory_export` | Tüm bellek verisini dışa aktar | +| `memory_relations` | İlişki grafını sorgula | + +
+ +
+Genişletilmiş tool'lar (51 toplam — AGENTMEMORY_TOOLS=all ayarla) + +| Tool | Açıklama | +|------|-------------| +| `memory_patterns` | Tekrar eden desenleri algıla | +| `memory_timeline` | Kronolojik gözlemler | +| `memory_relations` | İlişki grafını sorgula | +| `memory_graph_query` | Bilgi grafı gezintisi | +| `memory_consolidate` | 4 katmanlı konsolidasyonu çalıştır | +| `memory_claude_bridge_sync` | MEMORY.md ile sync | +| `memory_team_share` | Takım üyeleriyle paylaş | +| `memory_team_feed` | Son paylaşılan öğeler | +| `memory_audit` | İşlemlerin denetim izi | +| `memory_governance_delete` | Denetim izi ile sil | +| `memory_snapshot_create` | Git-sürümlü snapshot | +| `memory_action_create` | Bağımlılıklarla iş öğesi oluştur | +| `memory_action_update` | Action durumunu güncelle | +| `memory_frontier` | Önceliğe göre sıralanmış engellenmemiş action'lar | +| `memory_next` | Tek en önemli sonraki action | +| `memory_lease` | Exclusive action lease'leri (çoklu ajan) | +| `memory_routine_run` | İş akışı routine'lerini örnekle | +| `memory_signal_send` | Ajanlar arası mesajlaşma | +| `memory_signal_read` | Onay alındıyla mesajları oku | +| `memory_checkpoint` | Harici koşul kapıları | +| `memory_mesh_sync` | Örnekler arasında P2P sync | +| `memory_sentinel_create` | Event-driven gözcüler | +| `memory_sentinel_trigger` | Sentinel'leri harici olarak tetikle | +| `memory_sketch_create` | Ephemeral action grafları | +| `memory_sketch_promote` | Kalıcıya yükselt | +| `memory_crystallize` | Action zincirlerini kompakt et | +| `memory_diagnose` | Sağlık kontrolleri | +| `memory_heal` | Sıkışmış durumu otomatik düzelt | +| `memory_facet_tag` | Boyut:değer etiketleri | +| `memory_facet_query` | Facet etiketlerine göre sorgula | +| `memory_verify` | Provenansı izle | + +
+ +### 6 Kaynak · 3 Prompt · 4 Skill + +| Tür | İsim | Açıklama | +|------|------|-------------| +| Resource | `agentmemory://status` | Sağlık, oturum sayısı, bellek sayısı | +| Resource | `agentmemory://project/{name}/profile` | Proje başına zeka | +| Resource | `agentmemory://memories/latest` | En son 10 aktif bellek | +| Resource | `agentmemory://graph/stats` | Bilgi grafı istatistikleri | +| Prompt | `recall_context` | Ara + bağlam mesajları döndür | +| Prompt | `session_handoff` | Ajanlar arasında handoff verisi | +| Prompt | `detect_patterns` | Tekrar eden desenleri analiz et | +| Skill | `/recall` | Belleği ara | +| Skill | `/remember` | Uzun süreli belleğe kaydet | +| Skill | `/session-history` | Son oturum özetleri | +| Skill | `/forget` | Gözlemleri/oturumları sil | + +### Bağımsız MCP + +Tam sunucu olmadan çalıştır — herhangi bir MCP istemcisi için. Şunlardan herhangi biri çalışır: + +```bash +npx -y @agentmemory/agentmemory mcp # kanonik (her zaman kullanılabilir) +npx -y @agentmemory/mcp # shim paketi takma adı +``` + +Veya ajanınızın MCP yapılandırmasına ekleyin: + +Çoğu ajan (Cursor, Claude Desktop, Cline, Roo Code, Windsurf, Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +`agentmemory` girdisini, dosyayı değiştirmek yerine host'unuzun mevcut `mcpServers` nesnesine birleştirin. Host'un `localhost`'una erişemeyen sandbox'lı istemciler için env bloğuna `"AGENTMEMORY_FORCE_PROXY": "1"` ekleyin ve `AGENTMEMORY_URL`'i sandbox'ın erişebileceği bir rotaya ayarlayın. + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +Eklenti dosyasını depodan kopyalayın: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +`3113` portunda otomatik başlar. Canlı gözlem akışı, oturum gezgini, bellek tarayıcısı, bilgi grafı görselleştirmesi ve sağlık paneli. + +```bash +open http://localhost:3113 +``` + +Görüntüleyici sunucusu varsayılan olarak `127.0.0.1`'e bağlanır. REST-servisli `/agentmemory/viewer` endpoint'i normal `AGENTMEMORY_SECRET` bearer-token kurallarını izler. CSP başlıkları yanıt başına bir script nonce'ı kullanır ve satır içi handler özniteliklerini devre dışı bırakır (`script-src-attr 'none'`). + +--- + +

iii Console

+ +`:3113`'teki görüntüleyici ajanınızın **hatırladıklarını** gösterir. [iii konsolu](https://iii.dev/docs/console) ajanınızın **yaptıklarını** gösterir — her bellek op'u bir OpenTelemetry trace'i olarak, her KV girdisi düzenlenebilir, her fonksiyon çağrılabilir, her stream dinlenebilir. Aynı belleğe iki pencere: biri ürün-şekilli, diğeri motor-şekilli. + +Bir `memory_smart_search`'ün ateşlenmesini izleyin ve BM25 taramasını → embedding aramasını → RRF füzyonunu → reranker'ı bir şelale olarak görün. Sıkışmış bir konsolidasyon zamanlayıcısını KV tarayıcıda düzenleyin. `PostToolUse` hook'unu değiştirilmiş bir payload ile tekrar oynatın. WebSocket stream'ini sabitleyin ve gözlemlerin canlı olarak indiğini izleyin. + +agentmemory bunu ücretsiz dağıtır çünkü her fonksiyon, trigger, durum kapsamı ve stream bir iii primitif'idir — özel hiçbir şey, enstrümante edilecek hiçbir şey yok. + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers sayfası: bağlı her worker — agentmemory'nin kendisi dahil — PID, fonksiyon sayısı, runtime ve son-görülme ile birlikte. +

+ +**Zaten kurulu.** Konsol `iii` ile birlikte gelir — ayrı kurucu yok. + +**agentmemory ile birlikte başlat:** + +```bash +# agentmemory görüntüleyicisi 3113 portunu tutar, bu yüzden konsolu 3114'te çalıştırın. +# Engine REST (3111), WebSocket (3112) ve bridge (49134) varsayılanları agentmemory ile eşleşir. +iii console --port 3114 +``` + +Ardından `http://localhost:3114`'ü açın. Deneysel mimari-grafı sayfası için `--enable-flow` ekleyin. + +Yalnızca taşıdıysanız engine endpoint'lerini override edin: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**Konsoldan neler yapabilirsiniz:** + +| Sayfa | Şunun için kullanın | +|------|-----------| +| **Workers** | Bağlı her worker'ı ve canlı metriklerini görün — agentmemory worker'ının kendisi dahil. | +| **Functions** | agentmemory'nin herhangi bir fonksiyonunu doğrudan JSON payload ile çağırın — bir istemci bağlamadan `memory.recall`, `memory.consolidate`, `graph.query` test etmek için kullanışlı. | +| **Triggers** | HTTP, cron, event ve state trigger'larını tekrar oynatın — konsolidasyon cron'unu manuel olarak ateşleyin, bir HTTP route'unu yeniden deneyin, bir durum değişikliği yayın. | +| **States** | Tam CRUD ile KV tarayıcı — oturumlar, bellek slot'ları, yaşam döngüsü zamanlayıcıları, embedding'ler indeksi — değerleri yerinde düzenleyin. | +| **Streams** | Bellek yazımları, hook olayları ve gözlem güncellemeleri için iii stream'leri üzerinden akarken canlı WebSocket monitörü. | +| **Queues** | Dayanıklı kuyruk konuları + dead-letter yönetimi. Başarısız embedding / sıkıştırma işlerini tekrar oynatın veya bırakın. | +| **Traces** | OpenTelemetry şelale / alev / hizmet-dağılımı görünümleri. `trace_id` ile filtreleyerek tek bir `memory.search`'ün hangi fonksiyonları, DB çağrılarını ve embedding isteklerini ürettiğini tam olarak görün. | +| **Logs** | Trace/span ID'lerine korelasyonlu, yapılandırılmış OTEL logları. | +| **Config** | Runtime yapılandırması — engine'inizin hangi worker'lar, sağlayıcılar ve portlarla çalıştığını tam olarak görün. | +| **Flow** | (İsteğe bağlı, `--enable-flow`) Her worker, trigger ve stream'in interaktif mimari grafı. | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces: her bellek işlemi için şelale / alev / hizmet dağılımı. +

+ +**Trace'ler zaten açık:** + +`iii-config.yaml` `iii-observability` worker'ı etkinleştirilmiş olarak gelir (`exporter: memory`, `sampling_ratio: 1.0`, metrikler + log'lar). Ekstra yapılandırma gerekmez — agentmemory başlar başlamaz, her bellek işlemi konsolun okuyabileceği bir trace span'ı ve yapılandırılmış bir log yayar. + +Bunun yerine Jaeger/Honeycomb/Grafana Tempo'ya dışa aktarmak isterseniz, `exporter: memory`'yi `exporter: otlp` olarak değiştirin ve collector endpoint'ini iii'nin observability dokümanlarına göre ayarlayın. + +> **Dikkat:** konsolun kendisinde hiçbir auth zorlanmaz — `127.0.0.1`'e bağlı tutun (varsayılan) ve asla genel kullanıma açmayın. + +--- + +

Powered by iii

+ +agentmemory **zaten çalışan bir [iii](https://iii.dev) örneğidir**. Fonksiyonlar, trigger'lar, KV state, stream'ler, OTEL trace'leri — hepsi iii primitifleridir. Postgres, Redis, Express, pm2 veya Prometheus kurmadınız çünkü iii bunların yerini alıyor. + +Bu da, tek bir komutun agentmemory'yi tamamen yeni bir yetenekle genişlettiği anlamına gelir. + +### agentmemory'yi tek komutla genişletin + +```bash +iii worker add iii-pubsub # bellek yazımlarını bağlı her örneğe fan-out et +iii worker add iii-cron # zamanlanmış konsolidasyon, decay süpürmeleri, snapshot rotasyonu +iii worker add iii-queue # embedding + sıkıştırma işleri için dayanıklı yeniden denemeler +iii worker add iii-observability # her bellek op'unda OTEL trace'leri (varsayılan açık) +iii worker add iii-sandbox # hatırlanan kodu izole bir microVM içinde çalıştır +iii worker add iii-database # SQL destekli bir state adaptörü tak +iii worker add mcp # agentmemory MCP'sinin yanında genel MCP host'u +``` + +Her `iii worker add` agentmemory'nin zaten çalıştığı aynı engine'e yeni fonksiyonlar ve trigger'lar kaydeder. Görüntüleyici ve konsol bunları anında alır — yeniden yükleme yok, yeni entegrasyon yok, yeni container yok. + +| `iii worker add` | agentmemory'nin üzerine ne elde edersiniz | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | Çoklu-örnek bellek: her `remember` fan-out olur, her `search` birleşimi okur | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | Zamanlanmış yaşam döngüsü — geceleri konsolidasyon, haftalık snapshot'lar, sabit bir saatte decay | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | Dayanıklı yeniden denemeler: başarısız embedding + sıkıştırma işleri yeniden başlatmaya dayanır, kayıp gözlem yok | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | OTEL trace'leri, metrikleri, log'ları her fonksiyonda — birinci günden itibaren `iii-config.yaml`'da bağlı | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall`'dan çıkan kod, shell'inizde değil, bir kullan-at VM içinde çalışır | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | In-memory KV varsayılanlarını aştığınızda SQL destekli state adaptörü | +| [`mcp`](https://workers.iii.dev/workers/mcp) | agentmemory'ninin yanında ekstra MCP sunucuları ayağa kaldırın, aynı engine'i paylaşın | + +Tam kayıt defteri: [workers.iii.dev](https://workers.iii.dev). Oradaki her worker, agentmemory'nin kullandığı aynı primitifler aracılığıyla bir araya gelir — ve elinizde olan agentmemory de onlardan biridir. + +### iii'nin yerini aldığı şeyler + +| Geleneksel stack | agentmemory kullanır | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + in-memory vektör indeksi | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker süpervizyonu | +| Prometheus / Grafana | iii OTEL + sağlık monitörü | +| Özel eklenti sistemleri | `iii worker add ` | + +**118 kaynak dosya · ~21,800 LOC · 950+ test · 123 fonksiyon · 34 KV scope** — hepsi üç primitif üzerinde. `agentmemory plugin install` yok. Eklenti sistemi iii'nin kendisi. + +--- + +

Configuration

+ +### LLM Sağlayıcıları + +agentmemory ortamınızdan otomatik algılar. Varsayılan olarak, bir sağlayıcı yapılandırmadıkça veya Claude abonelik fallback'ine açıkça opt-in yapmadıkça hiçbir LLM çağrısı yapılmaz. + +| Sağlayıcı | Yapılandırma | Notlar | +|----------|--------|-------| +| **No-op (varsayılan)** | Yapılandırma gerekmez | LLM destekli compress/summarize DEVRE DIŞI. Sentetik BM25 sıkıştırma + recall hâlâ çalışır. Eskiden Claude-abonelik fallback'ine dayanıyorsanız aşağıdaki `AGENTMEMORY_ALLOW_AGENT_SDK`'ya bakın. | +| Anthropic API | `ANTHROPIC_API_KEY` | Token başına faturalama | +| MiniMax | `MINIMAX_API_KEY` | Anthropic-uyumlu | +| Gemini | `GEMINI_API_KEY` | Embedding'leri de etkinleştirir | +| OpenRouter | `OPENROUTER_API_KEY` | Herhangi bir model | +| Claude abonelik fallback'i | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | Yalnızca opt-in. `@anthropic-ai/claude-agent-sdk` oturumları doğurur — eskiden sınırsız Stop-hook recursion'ına neden oluyordu, bu yüzden artık varsayılan değil. | + +### Maliyet bilincine sahip model seçimi + +Arka plan sıkıştırması her gözlemde çalışır, bu yüzden model seçimi aylık harcamayı anlamlı ölçüde değiştirir. Yakalanan iş yükü verisi: 635 istek / 888K token / 35 saatlik aktif kullanım, 2026-05-23 fiyatlandırmasında üç OpenRouter modeline karşı çalıştırıldı. + +| Katman | Model | Girdi / 1M | Çıktı / 1M | Yakalanan 35 saat maliyeti | Notlar | +|------|-------|------------|-------------|---------------------------|-------| +| Önerilen | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Sonnet'ten ~10× daha düşük maliyetle sağlam sıkıştırma + özetleme kalitesi. | +| Önerilen | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | Daha eski ama yalnızca-sıkıştırma iş yükleri için hâlâ iyi. | +| Önerilen | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | Oturumlarınız yoğun olarak kod-şekilli ise güçlü kod muhakemesi. | +| Premium | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | Yüksek kalite ancak her zaman açık arka plan çalışması için pahalı. | +| Premium | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | Sonnet ile benzer katman. | +| Kaçının | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | Reasoning sınıfı model; sıkıştırma için büyük aşırı harcama. | + +`OPENROUTER_MODEL` premium-katman bir desenle eşleştiğinde agentmemory bir runtime uyarısı yazdırır. Bilinçli bir seçim yaptıktan sonra susturmak için `AGENTMEMORY_SUPPRESS_COST_WARNING=1` ayarlayın. + +Bellek işi için kalite vs maliyet ödünleşmesi: sıkıştırma görece gevşek kalite çıtaları olan bir özetleme görevidir (özeti tekrar okuyan kullanıcı değil, ajandır). DeepSeek-V4-Pro / Qwen3-Coder bu görevde Sonnet'in yuvarlama hatası içinde kalırken ~10× daha az maliyetlidir. Premium katman modelleri doğrudan okuduğunuz sorgular için saklayın. + +Kaynaklar: [Sonnet 4.6 için OpenRouter fiyatlandırması](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing), [DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro), [DeepSeek fiyatlandırma notları](https://api-docs.deepseek.com/quick_start/pricing/). + +### Çoklu-ajan belleği (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +Birden fazla rolün tek bir agentmemory sunucusunu paylaştığı çoklu-ajan kurulumlarında (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` her yazıyı onu yapan rolle etiketler. `AGENTMEMORY_AGENT_SCOPE` recall'un bu etikete göre filtreleyip filtrelemeyeceğini kontrol eder. + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # isteğe bağlı; varsayılan "shared" +``` + +İki mod: + +| Mod | Yazıları etiketle | Recall'u filtrele | Ne zaman kullanılır | +|------|------------|---------------|-------------| +| `shared` (varsayılan) | evet | hayır | Denetim iziyle ajanlar arası bağlam. Architect, developer'ın notlarını görebilir ancak her satır kim söylediğini kaydeder. | +| `isolated` | evet | evet | Katı ayrım. Architect developer'ın gözlemlerini / belleklerini / oturumlarını asla görmez. | + +`AGENT_ID` ayarlandığında ne etiketlenir: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`. Rol `api::session::start` → `mem::observe` → `mem::compress` → KV boyunca akar. + +İzole modda ne filtrelenir: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`. Her endpoint istek başına override için `?agentId=` ve env kapsamından opt-out etmek için `?agentId=*` kabul eder. `/memories` ayrıca `agentId`'si undefined olan AGENT_ID öncesi belleklerin yüzeylenmesi için `?includeOrphans=true` kabul eder. + +SDK / REST katmanında çağrı başına override: her mutasyon endpoint'i (`/session/start`, `/remember`) istek gövdesinde env'i geçen bir `agentId` alanı kabul eder. Tek bir sunucu sürecinden birçok rolü yönlendiren runtime'lar için kullanışlıdır. + +`AGENT_ID` ayarlanmadığında bellek kapsam dışı kalır (eski davranış, etiket yok, filtre yok). + +### Portlar + +agentmemory + iii-engine varsayılan olarak dört port'a bağlanır. Bir yeniden başlatma `port in use` ile başarısız olursa, bu tablo hangi süreci aramanız gerektiğini söyler. + +| Port | Süreç | Amaç | Env override | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | Dahili stream'ler worker'ı (agentmemory + görüntüleyici tarafından tüketilir) | `III_STREAMS_PORT` | +| `3113` | agentmemory | Gerçek zamanlı görüntüleyici (`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — worker'lar burada kaydolur, OTel telemetri buradan akar | `III_ENGINE_URL` (tam URL, varsayılan `ws://localhost:49134`) | + +Çöken bir çalıştırma sonrası portlar bağlı kaldığında bayat-süreç temizliği: + +```bash +# macOS / Linux — her portta ne varsa bulun ve öldürün +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` graceful shutdown'da hem worker hem de engine pidfile'ını temiz olarak biçer. Yukarıdaki manuel temizlik yalnızca her iki pidfile'ın da geride kalmadığı çökme sonrası durum içindir. + +### Yapılandırma Dosyası + +agentmemory runtime yapılandırmasını her shell'de değişkenleri export etmek yerine `~/.agentmemory/.env`'a koyun. Görüntüleyici `export ANTHROPIC_API_KEY=...` gibi bir kurulum ipucu gösteriyorsa, `export` ön ekini koymadan bu dosyaya `ANTHROPIC_API_KEY=...` olarak kopyalayın, ardından agentmemory'yi yeniden başlatın. + +Süreç ortam değişkenleri hâlâ çalışır ve dosyadaki değerlere göre öncelik kazanır. + +Windows'ta aynı dosya `%USERPROFILE%\.agentmemory\.env` konumunda bulunur: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +API anahtarı yerine Claude Code Pro/Max aboneliğiyle test etmek için açıkça opt-in yapın: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +Graph veya konsolidasyon özelliklerini istiyorsanız aynı dosyada açın: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### Ortam Değişkenleri + +`~/.agentmemory/.env` oluşturun: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +`3111` portunda 124 endpoint. REST API varsayılan olarak `127.0.0.1`'e bağlanır. `AGENTMEMORY_SECRET` ayarlandığında korumalı endpoint'ler `Authorization: Bearer ` gerektirir ve mesh sync endpoint'leri her iki eşte de `AGENTMEMORY_SECRET` gerektirir. + +
+Önemli endpoint'ler + +| Method | Path | Açıklama | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | Sağlık kontrolü (her zaman public) | +| `POST` | `/agentmemory/session/start` | Oturum başlat + bağlam al | +| `POST` | `/agentmemory/session/end` | Oturumu bitir | +| `POST` | `/agentmemory/observe` | Gözlem yakala | +| `POST` | `/agentmemory/smart-search` | Hibrit arama | +| `POST` | `/agentmemory/context` | Bağlam üret | +| `POST` | `/agentmemory/remember` | Uzun süreli belleğe kaydet | +| `POST` | `/agentmemory/forget` | Gözlemleri sil | +| `POST` | `/agentmemory/enrich` | Dosya bağlamı + bellekler + bug'lar | +| `GET` | `/agentmemory/profile` | Proje profili | +| `GET` | `/agentmemory/export` | Tüm veriyi dışa aktar | +| `POST` | `/agentmemory/import` | JSON'dan içeri aktar | +| `POST` | `/agentmemory/graph/query` | Bilgi grafı sorgusu | +| `POST` | `/agentmemory/team/share` | Takımla paylaş | +| `GET` | `/agentmemory/audit` | Denetim izi | + +Tam endpoint listesi: [`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # Hot reload +npm run build # Production build +npm test # 950+ test +npm run test:integration # API testleri (çalışan servisler gerektirir) +``` + +**Ön koşullar:** Node.js >= 20, [iii-engine](https://iii.dev/docs) veya Docker + +

License

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.zh-CN.md b/READMEs/README.zh-CN.md new file mode 100644 index 0000000..e711a36 --- /dev/null +++ b/READMEs/README.zh-CN.md @@ -0,0 +1,1377 @@ +

+ agentmemory — 为 AI 编码代理提供持久化记忆 +

+ +

+ + 让你的编码代理记住一切。不再重复解释。 + Built on iii engine +
+ 为 Claude Code、Cursor、Gemini CLI、Codex CLI、Hermes、OpenClaw、pi、OpenCode 以及任何 MCP 客户端提供持久化记忆。 +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1200 stars / 172 forks on the gist +

+ +

+ 这份 gist 以置信度评分、生命周期管理、知识图谱和混合搜索扩展了 Karpathy 的 LLM Wiki 模式:agentmemory 就是其实现。 +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory demo +

+ +

+ 安装 • + 快速开始 • + 基准测试 • + 对比竞品 • + 代理 • + 工作原理 • + MCP • + 查看器 • + iii 控制台 • + 由 iii 驱动 • + 配置 • + API +

+ +--- + +## 安装 + +```bash +npm install -g @agentmemory/agentmemory # 一次安装 — 全局可用 `agentmemory` 命令 +# 如果在 macOS/Linux 的系统 Node 上遇到 EACCES,请重试: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # 在 :3111 启动记忆服务器 +agentmemory demo # 注入示例会话并验证召回 +agentmemory connect claude-code # 连接你的代理(也支持: codex, cursor, gemini-cli, ...) +``` + +或通过 `npx`(无需安装): + +```bash +npx @agentmemory/agentmemory +``` + +提醒 — npx 会按版本缓存。如果裸 `npx @agentmemory/agentmemory` 命令运行的是旧版本,强制使用最新版 `npx -y @agentmemory/agentmemory@latest`,或一次性清除缓存 `rm -rf ~/.npm/_npx`(macOS/Linux;Windows 上删除 `%LOCALAPPDATA%\npm-cache\_npx`)。从 v0.9.16+ 起,首次 npx 运行会内联提示你全局安装,这样之后裸 `agentmemory` 命令在任何地方都能用。 + +完整选项见下方[快速开始](#quick-start)。各代理具体接入见[支持所有代理](#works-with-every-agent)。 + +--- + +

Works with every agent

+ +agentmemory 兼容任何支持 hooks、MCP 或 REST API 的代理。所有代理共享同一个记忆服务器。 + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+原生插件 + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+原生插件 + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+原生插件 + MCP +
+Hermes
+Hermes
+原生插件 + MCP +
+pi
+pi
+原生插件 + MCP +
+OpenHuman
+OpenHuman
+原生 Memory trait 后端 +
+Cursor
+Cursor
+MCP 服务器 +
+Gemini CLI
+Gemini CLI
+MCP 服务器 +
+OpenCode
+OpenCode
+22 hooks + MCP + 插件 +
+Cline
+Cline
+MCP 服务器 +
+Goose
+Goose
+MCP 服务器 +
+Kilo Code
+Kilo Code
+MCP 服务器 +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP 服务器 +
+Windsurf
+Windsurf
+MCP 服务器 +
+Roo Code
+Roo Code
+MCP 服务器 +
+ +

+ 兼容任何使用 MCP 或 HTTP 的代理。一个服务器,所有代理共享记忆。 +

+ +--- + +你每次会话都在重复解释同样的架构。你反复发现同样的 bug。你重复教同样的偏好。内建的记忆(CLAUDE.md、.cursorrules)上限是 200 行而且会过时。agentmemory 解决了这个问题。它在后台静默捕获代理的行为,将其压缩为可搜索的记忆,并在下次会话开始时注入正确的上下文。一条命令。跨代理工作。 + +**改变了什么:** 会话 1 你设置了 JWT 鉴权。会话 2 你要求限流。代理已经知道你的鉴权使用 `src/middleware/auth.ts` 中的 jose 中间件,测试覆盖了 token 校验,你选择 jose 而非 jsonwebtoken 是为了 Edge 兼容性。无需重新解释。无需复制粘贴。代理就是*知道*。 + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0 新功能** — 落地页 [agent-memory.dev](https://agent-memory.dev) 上线,文件系统连接器(`@agentmemory/fs-watcher`),独立 MCP 现在代理至正在运行的服务器,使 hooks 和查看器保持一致,审计策略在所有删除路径上得到统一,健康状态在小型 Node 进程上不再误报 `memory_critical`。完整变更见 [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18)。 + +--- + +

Benchmarks

+ + + + + + +
+ +### 检索准确率 + +**coding-agent-life-v1** (内部语料库,沙盒可复现) + +| 适配器 | P@5 | R@5 | Top-5 命中率 | p50 延迟 | +|---|---|---|---|---| +| **agentmemory 混合** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep 基线 | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100% Top-5 命中率。在同一输入下,精度比 grep 基线高 **2.2×**。完整按类型分解:[`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md)。 + +**LongMemEval-S** (ICLR 2025,500 个问题) + +| 系统 | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| 仅 BM25 回退 | 86.2% | 94.6% | 71.5% | + + + +### Token 节省 + +| 方法 | Token/年 | 成本/年 | +|---|---|---| +| 粘贴全部上下文 | 19.5M+ | 不可能(超出窗口) | +| LLM 摘要 | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + 本地嵌入 | ~170K | **$0** | + +
+ +> 嵌入模型:`all-MiniLM-L6-v2` (本地、免费、无需 API key)。完整报告:[`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md)、[`benchmark/QUALITY.md`](../benchmark/QUALITY.md)、[`benchmark/SCALE.md`](../benchmark/SCALE.md)。竞品对比:[`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory 对比 mem0、Letta、Khoj、claude-mem、Hippo。 + +**本地复现:** [`eval/README.md`](../eval/README.md) — 适配器可插拔的 harness,支持 LongMemEval `_s`(公开 500 问)+ `coding-agent-life-v1`(内部 15 会话语料)。Grep / 向量 / agentmemory 适配器并排打分,NDJSON 输出,公开记分卡发布于 [`docs/benchmarks/`](../docs/benchmarks/)。 + +**搭配 [codegraph](https://github.com/colbymchenry/codegraph)、[Understand Anything](https://github.com/Lum1104/Understand-Anything) 和 [Graphify](https://github.com/safishamsi/graphify) 使用。** 代码图索引、多代理构建流水线,以及跨文档 / PDF / 图像 / 视频的更广泛知识图谱。agentmemory 记住工作内容;这三个项目点亮上下文层的其余部分。组合配方和问题路由表:[`docs/recipes/pairings.md`](../docs/recipes/pairings.md)。 + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)内建 (CLAUDE.md)
类型记忆引擎 + MCP 服务器记忆层 API完整代理运行时静态文件
检索 R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
自动捕获12 hooks (零人工)手动调用 add()代理自编辑手动编辑
搜索BM25 + 向量 + 图 (RRF 融合)向量 + 图向量 (归档)将所有内容加载到上下文
多代理MCP + REST + 租约 + 信号API (无协调)仅在 Letta 运行时内部每代理一个文件
框架锁定无 (任何 MCP 客户端)高 (必须使用 Letta)每代理格式
外部依赖无 (SQLite + iii-engine)Qdrant / pgvectorPostgres + 向量数据库
记忆生命周期4 层整合 + 衰减 + 自动遗忘被动提取代理管理手动清理
Token 效率~1,900 tokens/会话 ($10/年)依集成方式不同核心记忆位于上下文240 条观测达 22K+ tokens
实时查看器是 (端口 3113)云端仪表板云端仪表板
自托管是 (默认)可选可选
+ +--- + +

Quick Start

+ +兼容性:此版本面向稳定的 `iii-sdk` `^0.11.0` 和 iii-engine v0.11.x。 + +### 30 秒体验 + +```bash +# 终端 1:启动服务器 +npx @agentmemory/agentmemory + +# 终端 2:注入示例数据并查看召回 +npx @agentmemory/agentmemory demo +``` + +`demo` 会注入 3 个真实会话(JWT 鉴权、N+1 查询修复、限流)并对它们执行语义搜索。你将看到搜索「数据库性能优化」时找到「N+1 查询修复」 — 关键词匹配做不到这一点。 + +打开 `http://localhost:3113` 即时观察记忆的构建过程。 + +### 推荐:全局安装 + +`npx` 按版本缓存。如果你上周运行过 `npx @agentmemory/agentmemory@0.9.14`,裸 `npx @agentmemory/agentmemory` 命令可能会从 `~/.npm/_npx/` 提供过期的 0.9.14 而非最新版本。安装一次后,裸 `agentmemory` 命令处处可用: + +```bash +npm install -g @agentmemory/agentmemory +# 如果在 macOS/Linux 的系统 Node 上遇到 EACCES,请重试: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # 启动服务器(等同于 npx 形式) +agentmemory stop # 停止 +agentmemory remove # 卸载所有创建的内容 +agentmemory connect claude-code # 连接一个代理 +agentmemory doctor # 交互式诊断 + 修复提示 +``` + +从 v0.9.16 开始,首次 npx 运行会内联提示你全局安装 — 回答一次 `Y` 即可。如果你跳过,可使用以下任一方式获取最新版: + +```bash +npx -y @agentmemory/agentmemory@latest # 强制从 npm 拉取最新(跨平台) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # 仅 macOS/Linux (POSIX shell) +``` + +在 Windows / PowerShell 上,等价的缓存清除命令是 `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — 上面的 `npx -y ...@latest` 形式是跨平台选项。 + +### 会话回放 + +agentmemory 记录的每个会话都可回放。打开查看器,选择 **Replay** 标签,在时间线上拖动:提示词、工具调用、工具结果和响应都作为离散事件呈现,支持播放/暂停、速度控制(0.5×–4×)和键盘快捷键(空格切换,箭头单步)。 + +已有旧的 Claude Code JSONL 记录想导入? + +```bash +# 导入默认 ~/.claude/projects 下的全部内容 +npx @agentmemory/agentmemory import-jsonl + +# 或导入单个文件 +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +导入的会话与原生会话一起出现在 Replay 选择器中。底层每个条目都通过 `mem::replay::load`、`mem::replay::sessions`、`mem::replay::import-jsonl` 这些 iii 函数路由 — 没有侧通道服务器。 + +### 升级 / 维护 + +当你确实想更新本地运行时时,使用维护命令: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +警告:此命令会变更当前工作空间/运行时。它可能更新 JavaScript 依赖,并拉取固定版本的 Docker 镜像 `iiidev/iii:0.11.2`。它绝不会安装未固定版本或更新的 iii 引擎。 + +实现细节见 `src/cli.ts`(参考 `src/cli.ts:544-595` 附近的 `runUpgrade`)。 + +### Claude Code(一段话,直接粘贴) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code 不安装插件(MCP-standalone 路径) + +如果你直接通过 `~/.claude.json` 连接 agentmemory 的 MCP 服务器而不使用 `/plugin install`,Claude Code 永远不会解析 `${CLAUDE_PLUGIN_ROOT}`,你必须把 hook 脚本指向 `~/.claude/settings.json` 中的绝对路径。这些路径通常会嵌入 agentmemory 版本号(例如 `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`),因此下次升级会静默破坏所有 hooks。 + +变通方法: + +```bash +agentmemory connect claude-code --with-hooks +``` + +这会将同样的 hook 命令合并到 `~/.claude/settings.json`,绝对路径解析到当前安装的 `@agentmemory/agentmemory` 包的 `plugin/` 目录。升级 agentmemory 后重新运行该命令以刷新路径。同一文件中的用户条目会被保留;只替换之前的 agentmemory 条目。仍然推荐使用 `/plugin install` 路径。 + +对于远程或受保护的部署,启动 Claude Code 时设置 `AGENTMEMORY_URL` 和 `AGENTMEMORY_SECRET`。插件会将两个值传递给其捆绑的 MCP 服务器;当 `AGENTMEMORY_URL` 为空时,MCP shim 默认使用 `http://localhost:3111`。 + +### Codex CLI(Codex 插件平台) + +```bash +# 1. 在单独终端启动记忆服务器 +npx @agentmemory/agentmemory + +# 2. 注册 agentmemory 市场并安装插件 +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex 插件与 Claude Code 插件同源,来自相同的 `plugin/` 目录。它注册: + +- `@agentmemory/mcp` 作为 MCP 服务器(当 `AGENTMEMORY_URL` 指向运行中的 agentmemory 服务器时,代理全部 51 个工具;若服务器不可达,本地回退至 7 个工具) +- 6 个生命周期 hooks:`SessionStart`、`UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`PreCompact`、`Stop` +- 4 个 skills:`/recall`、`/remember`、`/session-history`、`/forget` + +Codex 的 hook 引擎会将 `CLAUDE_PLUGIN_ROOT` 注入 hook 子进程(参见 [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)),因此同样的 hook 脚本在两个宿主中都能工作,无需重复实现。Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure 事件仅 Claude Code 支持,Codex 未注册这些。 + +#### Codex Desktop:插件 hooks 当前无响应(有变通方法) + +`CodexHooks` 和 `PluginHooks` 在 [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs) 中都已稳定且默认启用,但 Codex Desktop 当前不会派发插件本地的 `hooks.json`([openai/codex#16430](https://github.com/openai/codex/issues/16430))。MCP 工具仍能工作;只是生命周期观测缺失。 + +在上游修复落地前,将同样的 hook 命令镜像到全局 `~/.codex/hooks.json`: + +```bash +agentmemory connect codex --with-hooks +``` + +这会在 `~/.codex/hooks.json` 添加一个幂等块,引用捆绑脚本的绝对路径(用户级作用域下无需 `${CLAUDE_PLUGIN_ROOT}` 展开)。升级 agentmemory 后重新运行同一命令以刷新路径。同一文件中的用户条目会被保留;只替换之前的 agentmemory 条目。 + +
+OpenClaw(粘贴此提示) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +完整指南:[`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent(粘贴此提示) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +完整指南:[`integrations/hermes/`](../integrations/hermes/) + +
+ +### 其他代理 + +启动记忆服务器:`npx @agentmemory/agentmemory` + +在使用 `mcpServers` 结构的每个宿主(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI、OpenClaw)中,agentmemory 条目是**相同的 MCP 服务器块**: + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**将此条目合并到宿主配置文件的现有 `mcpServers` 对象中** — 不要替换整个文件。如果文件已经有其他服务器,把 `agentmemory` 作为另一个 key 加在它们旁边。如果完全缺少 `mcpServers`,把整块粘贴到 `{ "mcpServers": { ... } }` 里。`${VAR}` 占位符会在 MCP 服务器启动时从 shell 继承 `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` — 未设置的变量传空字符串,shim 回退到 `http://localhost:3111`。一个接好的条目同时覆盖本地和远程(k8s / 反代)部署。 + +| 代理 | 配置文件 | 备注 | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | 合并到 `mcpServers`。网站上也提供一键深链。 | +| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | 合并到 `mcpServers`。编辑后重启 Claude Desktop。 | +| **Cline / Roo Code / Kilo Code** | Cline MCP 设置 (设置 UI → MCP Servers → Edit) | 同样的 `mcpServers` 块。 | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | 同样的 `mcpServers` 块。 | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user`(自动合并)。 | +| **OpenClaw** | OpenClaw MCP 配置 | 同样的 `mcpServers` 块,或使用更深的[记忆插件](../integrations/openclaw/)。 | +| **Codex CLI (仅 MCP)** | `.codex/config.toml` | TOML 形式:`codex mcp add agentmemory -- npx -y @agentmemory/mcp`,或手动添加 `[mcp_servers.agentmemory]`。 | +| **Codex CLI (完整插件)** | Codex 插件市场 | `codex plugin marketplace add rohitg00/agentmemory` 然后 `codex plugin add agentmemory@agentmemory`。注册 MCP + 6 个生命周期 hooks(SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、PreCompact、Stop)+ 4 个 skills。在 Codex Desktop 上,直到 [openai/codex#16430](https://github.com/openai/codex/issues/16430) 落地之前,还要运行 `agentmemory connect codex --with-hooks` — 那里的插件 hooks 当前无响应。 | +| **OpenCode (仅 MCP)** | `opencode.json` | 不同结构 — 顶层 `mcp` key,command 是数组:`{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`。 | +| **OpenCode (完整插件)** | `plugin/opencode/` | 22 个自动捕获 hooks,覆盖会话生命周期、消息、工具、错误。两个斜杠命令(`/recall`、`/remember`)。将 `plugin/opencode/` 复制到你的 OpenCode 工作空间并把插件条目添加到 `opencode.json`。完整 hook 表和差异分析见 [`plugin/opencode/README.md`](../plugin/opencode/README.md)。 | +| **pi** | `~/.pi/agent/extensions/agentmemory` | 复制 [`integrations/pi`](../integrations/pi/) 并重启 pi。 | +| **Hermes Agent** | `~/.hermes/config.yaml` | 使用更深的[记忆提供者插件](../integrations/hermes/),设置 `memory.provider: agentmemory`。 | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` 会写入标准的 `mcpServers` 块。Hook 负载与 Claude Code 字段兼容,因此现有的 12 hook 脚本无需修改即可工作 — 通过同一 `settings.json` 的 `hooks` 段连接它们。 | +| **Antigravity** (替换 Gemini CLI) | `mcp_config.json`(在 Antigravity 的 User 目录中) | `agentmemory connect antigravity` 会写入标准的 `mcpServers` 块。macOS: `~/Library/Application Support/Antigravity/User/`。Linux: `~/.config/Antigravity/User/`。在 2026-06-18 Gemini CLI 停服后使用。 | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` 写入用户级配置。工作空间覆盖放在你的代码旁的 `.kiro/settings/mcp.json` 中。 | +| **Goose** | Goose MCP 设置 UI | 同样的 `mcpServers` 块。 | +| **Aider** | n/a | 直接调用 REST API:`curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`。 | +| **任何代理 (32+)** | n/a | `npx skillkit install agentmemory` 自动检测宿主并合并。 | + +**沙盒化的 MCP 客户端**(Flatpak / Snap / 受限容器)无法访问宿主的 `localhost`:还要在 `env` 块中设置 `"AGENTMEMORY_FORCE_PROXY": "1"`,并把 `AGENTMEMORY_URL` 指向沙盒确实能到达的路由(例如你的 LAN IP)。 + +### 程序化访问(Python / Rust / Node) + +agentmemory 将其核心操作注册为 iii 函数(`mem::remember`、`mem::observe`、`mem::context`、`mem::smart-search`、`mem::forget`)。任何拥有 iii SDK 的语言都可以通过 `ws://localhost:49134` 直接调用它们 — 无需为每种语言准备单独的 REST 客户端。 + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +完整示例:[`examples/python/`](../examples/python/)(快速开始 + 观测/召回流程)。`:3111` 上的 REST 对没有 iii 运行时的宿主仍然可用。 + +### 从源码构建 + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +如果已经安装 `iii`,这会以本地 `iii-engine` 启动 agentmemory;如果 Docker 可用,则回退到 Docker Compose。REST、流和查看器默认绑定到 `127.0.0.1`。 + +手动安装 `iii-engine`。**agentmemory 当前将 `iii-engine` 固定在 `v0.11.2`** — `v0.11.6` 引入了新的「通过 `iii worker add` 沙盒化一切」模型,agentmemory 尚未为此重构。重构落地后即解除固定。如果你已经手动迁移到沙盒模型,可用 `AGENTMEMORY_III_VERSION=` 覆盖。 + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** 把 `aarch64-apple-darwin` 换成 `x86_64-apple-darwin` +- **Linux x64:** 换成 `x86_64-unknown-linux-gnu` +- **Linux arm64:** 换成 `aarch64-unknown-linux-gnu` +- **Windows:** 从 [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2) 下载 `iii-x86_64-pc-windows-msvc.zip`,提取 `iii.exe`,加入 PATH + +或使用 Docker(捆绑的 `docker-compose.yml` 会拉取 `iiidev/iii:0.11.2`)。完整文档:[iii.dev/docs](https://iii.dev/docs)。 + +### Windows + +agentmemory 可在 Windows 10/11 运行,但仅 Node.js 包不够 — 你还需要 `iii-engine` 运行时(一个独立的原生二进制)作为后台进程。官方上游安装器是 `sh` 脚本,目前没有 PowerShell 安装器或 scoop/winget 包,因此 Windows 用户有两条路径: + +**选项 A — 预构建 Windows 二进制(推荐):** + +```powershell +# 1. 在浏览器打开 https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 +# (我们固定在 v0.11.2,直到 agentmemory 为 v0.11.6+ 引擎要求的 +# 新沙盒模型完成重构) +# 2. 下载 iii-x86_64-pc-windows-msvc.zip +# (如果是 ARM 机器则下载 iii-aarch64-pc-windows-msvc.zip) +# 3. 把 iii.exe 解压到 PATH 上的某处,或放在: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory 会自动检查该位置) +# 4. 验证: +iii --version +# 应输出:0.11.2 + +# 5. 然后照常运行 agentmemory: +npx -y @agentmemory/agentmemory +``` + +**选项 B — Docker Desktop:** + +```powershell +# 1. 安装 Docker Desktop for Windows +# 2. 启动 Docker Desktop 并确保引擎运行中 +# 3. 运行 agentmemory — 它会自动启动捆绑的 compose 文件: +npx -y @agentmemory/agentmemory +``` + +**选项 C — 仅独立 MCP(无引擎):** 如果你只需要 MCP 工具供代理使用,不需要 REST API、查看器或定时任务,则完全跳过引擎: + +```powershell +npx -y @agentmemory/agentmemory mcp +# 或通过 shim 包: +npx -y @agentmemory/mcp +``` + +**Windows 诊断:** 如果 `npx @agentmemory/agentmemory` 失败,加 `--verbose` 重新运行以看到实际的引擎 stderr。常见失败模式: + +| 症状 | 修复 | +|---|---| +| `iii-engine process started` 然后 `did not become ready within 15s` | 引擎启动崩溃 — 用 `--verbose` 重新运行,检查 stderr | +| `Could not start iii-engine` | `iii.exe` 和 Docker 都未安装。见上面选项 A 或 B | +| 端口冲突 | `netstat -ano \| findstr :3111` 查看占用,然后 kill 或用 `--port ` | +| Docker 已安装但仍跳过回退 | 确保 Docker Desktop 确实在运行(系统托盘图标) | + +> 注意:iii **引擎** 是预构建的二进制文件,而非 cargo crate — 不要尝试用 `cargo install` 安装它。(iii 的 **SDK** 确实已发布到 crates.io、npm 和 PyPI,但 agentmemory 并不需要它们。)受支持的引擎安装方式均固定为 v0.11.2:上面的预构建 v0.11.2 二进制、**带版本固定** 的上游 `sh` 安装脚本 `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh`(macOS/Linux),以及 Docker 镜像 `iiidev/iii:0.11.2`。直接运行 `install.sh | sh` 会安装 **最新** 引擎,而 agentmemory 不支持该版本 — 请务必传入 `VERSION=0.11.2`。最简单的方式:直接运行 `npx @agentmemory/agentmemory`,它会为你把固定版本的引擎获取到 `~/.agentmemory/bin`。 + +--- + +

部署

+ +托管主机的一键模板。每个模板都附带自包含的 +Dockerfile,从 npm 拉取 `@agentmemory/agentmemory` 并从官方 +`iiidev/iii` Docker Hub 镜像复制 iii 引擎二进制 — 无需 +预构建 agentmemory 镜像。持久存储挂载在 +`/data`;首次启动 entrypoint 用面向部署调优的配置 +覆盖 npm 捆绑的 iii 配置(原配置绑定 `127.0.0.1`), +让其绑定 `0.0.0.0` 并使用绝对 `/data` 路径,生成 +HMAC secret,然后通过 `gosu` 从 `root` 降权到 `node` +再 exec agentmemory CLI。 + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render 的一键部署按钮要求仓库根有 `render.yaml`,我们刻意保持根目录整洁。使用 [`deploy/render/`](../deploy/render/README.md) 中文档化的 Render Blueprint 流程,手动指向仓库内的蓝图。 + +完整设置细节(HMAC 捕获、查看器 SSH 隧道、轮换、备份、 +成本下限)见 [`deploy/`](../deploy/README.md): + +- [`deploy/fly`](../deploy/fly/README.md) — 单机搭配 + `auto_stop_machines = "stop"`;空闲时最便宜。 +- [`deploy/railway`](../deploy/railway/README.md) — Hobby 套餐固定费用, + 卷在仪表板中配置。 +- [`deploy/render`](../deploy/render/README.md) — Blueprint 流程, + 付费套餐自动磁盘快照。 +- [`deploy/coolify`](../deploy/coolify/README.md) — 通过 [Coolify](https://coolify.io/self-hosted) + 在你自己的 VPS 上自托管;同样的 Docker + Compose 栈,主机和数据都归你所有。 + +只发布端口 `3111`。`3113` 上的查看器在容器内仍绑定到 +loopback — 每个模板的 README 都文档化了到达它的 +SSH 隧道模式。 + +--- + +

Why agentmemory

+ +每个编码代理在会话结束时都会忘记一切。你每次会话的前 5 分钟都浪费在重新解释技术栈上。agentmemory 在后台运行,完全消除这一点。 + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### 对比内建代理记忆 + +每个 AI 编码代理都自带内建记忆 — Claude Code 有 `MEMORY.md`,Cursor 有 notepad,Cline 有 memory bank。这些像便利贴。agentmemory 是便利贴背后的可搜索数据库。 + +| | 内建 (CLAUDE.md) | agentmemory | +|---|---|---| +| 规模 | 200 行上限 | 无限 | +| 搜索 | 把所有内容加载到上下文 | BM25 + 向量 + 图 (仅 top-K) | +| Token 成本 | 240 条观测达 22K+ | ~1,900 tokens(少 92%) | +| 跨代理 | 每代理一个文件 | MCP + REST(任何代理) | +| 协调 | 无 | 租约、信号、动作、例程 | +| 可观测性 | 手动读文件 | 端口 3113 实时查看器 | + +--- + +

How It Works

+ +### 记忆流水线 + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4 层记忆整合 + +灵感来自人脑处理记忆的方式 — 与睡眠时的记忆整合并无不同。 + +| 层级 | 内容 | 类比 | +|------|------|---------| +| **Working(工作记忆)** | 来自工具使用的原始观测 | 短期记忆 | +| **Episodic(情景记忆)** | 压缩后的会话摘要 | 「发生了什么」 | +| **Semantic(语义记忆)** | 提取的事实与模式 | 「我知道什么」 | +| **Procedural(程序记忆)** | 工作流与决策模式 | 「怎么做」 | + +记忆随时间衰减(Ebbinghaus 曲线)。频繁访问的记忆会强化。陈旧记忆会自动清除。矛盾会被检测并解决。 + +### 捕获了什么 + +| Hook | 捕获内容 | +|------|----------| +| `SessionStart` | 项目路径、会话 ID | +| `UserPromptSubmit` | 用户提示词(隐私过滤) | +| `PreToolUse` | 文件访问模式 + 富化上下文 | +| `PostToolUse` | 工具名、输入、输出 | +| `PostToolUseFailure` | 错误上下文 | +| `PreCompact` | 在压缩前重新注入记忆 | +| `SubagentStart/Stop` | 子代理生命周期 | +| `Stop` | 会话结束摘要 | +| `SessionEnd` | 会话完成标记 | + +### 关键能力 + +| 能力 | 描述 | +|---|---| +| **自动捕获** | 每次工具使用都通过 hooks 记录 — 零人工 | +| **语义搜索** | BM25 + 向量 + 知识图谱,RRF 融合 | +| **记忆演化** | 版本控制、覆盖关系、关系图 | +| **自动遗忘** | TTL 过期、矛盾检测、重要性驱逐 | +| **隐私优先** | API key、secret、`` 标签存储前被剥离 | +| **自愈** | 熔断器、提供者回退链、健康监控 | +| **Claude 桥接** | 与 MEMORY.md 双向同步 | +| **知识图谱** | 实体抽取 + BFS 遍历 | +| **团队记忆** | 团队成员之间的命名空间共享 + 私有 | +| **引用溯源** | 任意记忆追溯到源观测 | +| **Git 快照** | 记忆状态的版本、回滚、diff | + +--- + + + +三路检索结合三种信号: + +| 流 | 作用 | 何时启用 | +|---|---|---| +| **BM25** | 词干化关键词匹配 + 同义词扩展 | 始终启用 | +| **Vector(向量)** | 稠密嵌入上的余弦相似度 | 配置了嵌入提供者 | +| **Graph(图)** | 通过实体匹配进行知识图谱遍历 | 查询中检测到实体 | + +通过 Reciprocal Rank Fusion (RRF, k=60) 融合,并按会话多样化(每会话最多 3 个结果)。 + +BM25 开箱即用支持希腊语、西里尔语、希伯来语、阿拉伯语和带音标的拉丁文分词。对于中文/日语/韩语记忆,安装可选分词器(`npm install @node-rs/jieba tiny-segmenter`)以把 CJK 串切分为词级 token;不安装的话,agentmemory 会软回退到整串分词并在 stderr 打印一次性提示。 + +### 嵌入提供者 + +agentmemory 自动检测你的提供者。为获得最佳效果,安装本地嵌入(免费): + +```bash +npm install @xenova/transformers +``` + +| 提供者 | 模型 | 成本 | 备注 | +|---|---|---|---| +| **本地 (推荐)** | `all-MiniLM-L6-v2` | 免费 | 离线,比仅 BM25 召回率高 +8pp | +| Gemini | `gemini-embedding-001` | 免费层 | 100+ 语言,768/1536/3072 维 (MRL),2048-token 输入。替换 `text-embedding-004`([已弃用,2026 年 1 月 14 日下线](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | 最高质量 | +| Voyage AI | `voyage-code-3` | 付费 | 针对代码优化 | +| Cohere | `embed-english-v3.0` | 免费试用 | 通用 | +| OpenRouter | 任意模型 | 视而定 | 多模型代理 | + +--- + +

MCP Server

+ +53 个工具、6 个资源、3 个提示词、4 个 skills — 任何代理可用的最全面 MCP 记忆工具包。 + +> **MCP shim 对比完整服务器:** 已发布的 `@agentmemory/mcp` 包是一个薄 shim。**只有当它能通过 `AGENTMEMORY_URL` 连通运行中的 agentmemory 服务器**(代理模式)时,才暴露完整的 51 工具表面。在没有可达服务器的情况下,shim 回退到 7 工具的本地集合(`memory_save`、`memory_recall`、`memory_smart_search`、`memory_sessions`、`memory_export`、`memory_audit`、`memory_governance_delete`)。`AGENTMEMORY_TOOLS=core|all` 环境变量是*服务器端*标志 — 在 shim 的 `env` 块中设置无效。如果在 Cursor / OpenCode / Gemini CLI 中只看到 7 个工具,启动 `npx @agentmemory/agentmemory`(或 Docker 栈)并设置 `AGENTMEMORY_URL=http://localhost:3111`。 + +### 51 个工具 + +
+核心工具(始终可用) + +| 工具 | 描述 | +|------|-------------| +| `memory_recall` | 搜索过去的观测 | +| `memory_compress_file` | 在保留结构的同时压缩 markdown 文件 | +| `memory_save` | 保存洞察、决策或模式 | +| `memory_patterns` | 检测反复出现的模式 | +| `memory_smart_search` | 混合语义 + 关键词搜索 | +| `memory_file_history` | 关于特定文件的过去观测 | +| `memory_sessions` | 列出最近的会话 | +| `memory_timeline` | 按时间排列的观测 | +| `memory_profile` | 项目档案(概念、文件、模式) | +| `memory_export` | 导出所有记忆数据 | +| `memory_relations` | 查询关系图 | + +
+ +
+扩展工具(总 51 — 设置 AGENTMEMORY_TOOLS=all) + +| 工具 | 描述 | +|------|-------------| +| `memory_patterns` | 检测反复出现的模式 | +| `memory_timeline` | 按时间排列的观测 | +| `memory_relations` | 查询关系图 | +| `memory_graph_query` | 知识图谱遍历 | +| `memory_consolidate` | 运行 4 层整合 | +| `memory_claude_bridge_sync` | 与 MEMORY.md 同步 | +| `memory_team_share` | 与团队成员共享 | +| `memory_team_feed` | 最近共享条目 | +| `memory_audit` | 操作审计轨迹 | +| `memory_governance_delete` | 带审计轨迹的删除 | +| `memory_snapshot_create` | Git 版本快照 | +| `memory_action_create` | 创建带依赖的工作项 | +| `memory_action_update` | 更新动作状态 | +| `memory_frontier` | 按优先级排序的未阻塞动作 | +| `memory_next` | 单个最重要的下一动作 | +| `memory_lease` | 独占动作租约(多代理) | +| `memory_routine_run` | 实例化工作流例程 | +| `memory_signal_send` | 代理间消息 | +| `memory_signal_read` | 带回执读取消息 | +| `memory_checkpoint` | 外部条件门 | +| `memory_mesh_sync` | 实例间 P2P 同步 | +| `memory_sentinel_create` | 事件驱动监视器 | +| `memory_sentinel_trigger` | 外部触发哨兵 | +| `memory_sketch_create` | 临时动作图 | +| `memory_sketch_promote` | 提升为永久 | +| `memory_crystallize` | 紧凑化动作链 | +| `memory_diagnose` | 健康检查 | +| `memory_heal` | 自动修复卡住的状态 | +| `memory_facet_tag` | 维度:值 标签 | +| `memory_facet_query` | 按 facet 标签查询 | +| `memory_verify` | 追溯来源 | + +
+ +### 6 个资源 · 3 个提示词 · 4 个 Skills + +| 类型 | 名称 | 描述 | +|------|------|-------------| +| Resource | `agentmemory://status` | 健康、会话数、记忆数 | +| Resource | `agentmemory://project/{name}/profile` | 项目级智能 | +| Resource | `agentmemory://memories/latest` | 最新 10 条活跃记忆 | +| Resource | `agentmemory://graph/stats` | 知识图谱统计 | +| Prompt | `recall_context` | 搜索并返回上下文消息 | +| Prompt | `session_handoff` | 代理之间的交接数据 | +| Prompt | `detect_patterns` | 分析反复出现的模式 | +| Skill | `/recall` | 搜索记忆 | +| Skill | `/remember` | 保存到长期记忆 | +| Skill | `/session-history` | 最近的会话摘要 | +| Skill | `/forget` | 删除观测/会话 | + +### 独立 MCP + +无需完整服务器即可运行 — 适用于任何 MCP 客户端。以下两种都可以: + +```bash +npx -y @agentmemory/agentmemory mcp # 规范命令(始终可用) +npx -y @agentmemory/mcp # shim 包别名 +``` + +或添加到你的代理的 MCP 配置: + +大多数代理(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +把 `agentmemory` 条目合并到你的宿主现有的 `mcpServers` 对象中,而非替换文件。对于无法访问宿主 `localhost` 的沙盒客户端,在 env 块中添加 `"AGENTMEMORY_FORCE_PROXY": "1"`,并将 `AGENTMEMORY_URL` 设为沙盒能到达的路由。 + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +从仓库复制插件文件: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +在端口 `3113` 自动启动。实时观测流、会话浏览器、记忆浏览器、知识图谱可视化和健康仪表板。 + +```bash +open http://localhost:3113 +``` + +查看器服务器默认绑定 `127.0.0.1`。REST 提供的 `/agentmemory/viewer` 端点遵循正常的 `AGENTMEMORY_SECRET` bearer-token 规则。CSP 头使用每响应 script nonce 并禁用内联处理器属性(`script-src-attr 'none'`)。 + +--- + +

iii Console

+ +`:3113` 上的查看器展示你的代理**记住了什么**。[iii 控制台](https://iii.dev/docs/console) 展示你的代理**做了什么** — 每个记忆操作都是 OpenTelemetry trace,每个 KV 条目都可编辑,每个函数都可调用,每个流都可挂载。同一记忆的两个窗口:一个面向产品,一个面向引擎。 + +观察一次 `memory_smart_search` 触发,在瀑布图中看到 BM25 扫描 → 嵌入查找 → RRF 融合 → 重排器。在 KV 浏览器中编辑卡住的整合计时器。用调整后的负载重放一个 `PostToolUse` hook。固定 WebSocket 流,实时观察观测落地。 + +agentmemory 免费提供这一切,因为每个函数、触发器、状态作用域、流都是 iii 原语 — 没有定制,没有需要插桩的地方。 + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers 页面:每个已连接的 worker — 包括 agentmemory 本身 — 显示 PID、函数数、运行时和最后在线时间。 +

+ +**已经装好了。** 控制台随 `iii` 一同发布 — 无需单独安装器。 + +**与 agentmemory 并行启动:** + +```bash +# agentmemory 查看器占用端口 3113,所以在 3114 运行控制台。 +# 引擎 REST (3111)、WebSocket (3112)、bridge (49134) 默认值与 agentmemory 匹配。 +iii console --port 3114 +``` + +然后打开 `http://localhost:3114`。加 `--enable-flow` 开启实验性架构图页面。 + +仅在你移动了引擎端点时才覆盖: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**控制台能做什么:** + +| 页面 | 用途 | +|------|-----------| +| **Workers** | 查看每个已连接 worker 及其实时指标 — 包括 agentmemory worker 本身。 | +| **Functions** | 直接用 JSON 负载调用 agentmemory 的任何函数 — 测试 `memory.recall`、`memory.consolidate`、`graph.query` 无需接入客户端。 | +| **Triggers** | 重放 HTTP、cron、事件和状态触发器 — 手动触发整合 cron、重试 HTTP 路由、发出状态变化。 | +| **States** | 完整 CRUD 的 KV 浏览器 — 会话、记忆槽位、生命周期计时器、嵌入索引 — 就地编辑值。 | +| **Streams** | 记忆写入、hook 事件和观测更新流经 iii 流时的实时 WebSocket 监视器。 | +| **Queues** | 持久队列主题 + 死信管理。重放或丢弃失败的嵌入/压缩任务。 | +| **Traces** | OpenTelemetry 瀑布/火焰/服务分解视图。按 `trace_id` 过滤,精确查看单次 `memory.search` 产生了哪些函数、DB 调用和嵌入请求。 | +| **Logs** | 结构化 OTEL 日志,过滤并与 trace/span ID 关联。 | +| **Config** | 运行时配置 — 看到引擎正在使用的 workers、提供者和端口。 | +| **Flow** | (可选,`--enable-flow`) 每个 worker、触发器和流的交互式架构图。 | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces:每个记忆操作的瀑布/火焰/服务分解。 +

+ +**Traces 已开启:** + +`iii-config.yaml` 出厂启用 `iii-observability` worker(`exporter: memory`、`sampling_ratio: 1.0`、指标 + 日志)。无需额外配置 — agentmemory 启动那一刻,每个记忆操作都会发出一个 trace span 和一个控制台可读的结构化日志。 + +如果你想改为导出到 Jaeger/Honeycomb/Grafana Tempo,把 `exporter: memory` 改为 `exporter: otlp` 并按 iii 的可观测性文档设置收集器端点。 + +> **提醒:** 控制台本身未强制鉴权 — 保持其绑定 `127.0.0.1`(默认)并永远不要对外暴露。 + +--- + +

Powered by iii

+ +agentmemory **本身就是一个运行中的 [iii](https://iii.dev) 实例**。函数、触发器、KV 状态、流、OTEL traces — 全部都是 iii 原语。你没有安装 Postgres、Redis、Express、pm2 或 Prometheus,因为 iii 替代了它们。 + +这意味着多一条命令就能为 agentmemory 增加一整套新能力。 + +### 一条命令扩展 agentmemory + +```bash +iii worker add iii-pubsub # 把记忆写入扇出到每个连接的实例 +iii worker add iii-cron # 定时整合、衰减扫描、快照轮换 +iii worker add iii-queue # 嵌入 + 压缩任务的持久重试 +iii worker add iii-observability # 每个记忆操作的 OTEL traces(默认开启) +iii worker add iii-sandbox # 在隔离 microVM 内运行召回到的代码 +iii worker add iii-database # 切换 SQL 后端的状态适配器 +iii worker add mcp # 在 agentmemory 的 MCP 旁开通用 MCP 宿主 +``` + +每个 `iii worker add` 都会把新的函数和触发器注册到 agentmemory 正在运行的同一引擎中。查看器和控制台立即接收 — 无需重载、无需新集成、无需新容器。 + +| `iii worker add` | 在 agentmemory 上获得的额外能力 | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | 多实例记忆:每次 `remember` 扇出,每次 `search` 读取并集 | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | 定时生命周期 — 夜间整合、周快照、按固定时钟衰减 | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | 持久重试:失败的嵌入 + 压缩任务在重启后存活,无观测丢失 | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | 每个函数的 OTEL traces、指标、日志 — 从第一天起就接入 `iii-config.yaml` | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall` 出来的代码在一次性 VM 中运行,不在你的 shell 中 | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | 当默认的内存 KV 不够用时,SQL 后端状态适配器 | +| [`mcp`](https://workers.iii.dev/workers/mcp) | 在 agentmemory 的旁边架设额外 MCP 服务器,共享同一引擎 | + +完整注册表:[workers.iii.dev](https://workers.iii.dev)。那里的每个 worker 都通过 agentmemory 所用的同样原语组合 — 而你已经拥有的 agentmemory 本身就是其中之一。 + +### iii 替代了什么 + +| 传统栈 | agentmemory 使用 | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + 内存向量索引 | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker 监管 | +| Prometheus / Grafana | iii OTEL + 健康监控 | +| 自定义插件系统 | `iii worker add ` | + +**118 个源文件 · ~21,800 行代码 · 950+ 测试 · 123 个函数 · 34 个 KV 作用域** — 全部基于三种原语。没有 `agentmemory plugin install`。插件系统就是 iii 本身。 + +--- + +

Configuration

+ +### LLM 提供者 + +agentmemory 从你的环境自动检测。默认情况下,除非你配置提供者或显式启用 Claude 订阅回退,否则不会发起 LLM 调用。 + +| 提供者 | 配置 | 备注 | +|----------|--------|-------| +| **No-op(默认)** | 无需配置 | LLM 驱动的 compress/summarize 被禁用。合成 BM25 压缩 + 召回仍可用。如果你以前依赖 Claude 订阅回退,请见下面的 `AGENTMEMORY_ALLOW_AGENT_SDK`。 | +| Anthropic API | `ANTHROPIC_API_KEY` | 按 token 计费 | +| MiniMax | `MINIMAX_API_KEY` | Anthropic 兼容 | +| Gemini | `GEMINI_API_KEY` | 同时启用嵌入 | +| OpenRouter | `OPENROUTER_API_KEY` | 任意模型 | +| Claude 订阅回退 | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | 仅按需启用。会派生 `@anthropic-ai/claude-agent-sdk` 会话 — 曾导致无限 Stop-hook 递归故不再默认。 | + +### 成本感知的模型选择 + +后台压缩在每次观测时运行,模型选择会显著影响月度支出。捕获的工作负载数据:635 次请求 / 888K tokens / 35 小时活跃使用,基于 2026-05-23 OpenRouter 定价对三个模型评测。 + +| 等级 | 模型 | 输入 / 1M | 输出 / 1M | 35 小时捕获工作负载成本 | 备注 | +|------|-------|------------|-------------|---------------------------|-------| +| 推荐 | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | 压缩 + 摘要质量稳定,比 Sonnet 便宜 ~10×。 | +| 推荐 | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | 略旧但仍胜任仅压缩工作负载。 | +| 推荐 | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | 如果你的会话多为代码,代码推理能力强。 | +| 高级 | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | 质量高但对长期后台工作来说成本昂贵。 | +| 高级 | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | 与 Sonnet 同档。 | +| 避免 | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | 推理级模型;用于压缩属于巨额超支。 | + +当 `OPENROUTER_MODEL` 匹配高级层模式时,agentmemory 会打印运行时警告。在做出知情选择后,设置 `AGENTMEMORY_SUPPRESS_COST_WARNING=1` 来消音。 + +记忆工作的质量-成本权衡:压缩是质量门槛相对宽松的摘要任务(代理重新阅读摘要,而非用户)。DeepSeek-V4-Pro / Qwen3-Coder 在该任务上与 Sonnet 误差极小,而成本约低 10×。把高级层模型留给你直接阅读的查询。 + +来源:[OpenRouter Sonnet 4.6 定价](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing)、[DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro)、[DeepSeek 定价说明](https://api-docs.deepseek.com/quick_start/pricing/)。 + +### 多代理记忆(`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +在多个角色共享一台 agentmemory 服务器的多代理设置中(architect / developer / reviewer / researcher / support-agent),`AGENT_ID` 给每次写入打上发起角色的标签。`AGENTMEMORY_AGENT_SCOPE` 控制召回是否按该标签过滤。 + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # 可选;默认 "shared" +``` + +两种模式: + +| 模式 | 标记写入 | 过滤召回 | 何时使用 | +|------|------------|---------------|-------------| +| `shared`(默认) | 是 | 否 | 跨代理共享上下文且带审计轨迹。Architect 能看到 developer 记下了什么,但每条记录都标明发言者。 | +| `isolated` | 是 | 是 | 严格隔离。Architect 永远不会看到 developer 的观测/记忆/会话。 | + +设置 `AGENT_ID` 后会被标记的内容:`Session.agentId`、`RawObservation.agentId`、`CompressedObservation.agentId`、`Memory.agentId`。角色从 `api::session::start` → `mem::observe` → `mem::compress` → KV 流转。 + +isolated 模式下被过滤的内容:`mem::smart-search`、`/agentmemory/memories`、`/agentmemory/observations`、`/agentmemory/sessions`。每个端点都接受 `?agentId=` 来按请求覆盖,以及 `?agentId=*` 来完全跳过环境作用域。`/memories` 还接受 `?includeOrphans=true` 来浮现 `agentId` 为 undefined 的预-AGENT_ID 记忆。 + +SDK / REST 层的按调用覆盖:每个修改端点(`/session/start`、`/remember`)都接受请求体中的 `agentId` 字段,胜过环境变量。对于在一个服务器进程中路由多角色的运行时很有用。 + +当 `AGENT_ID` 未设置时,记忆保持无作用域(遗留行为,无标签、无过滤)。 + +### 端口 + +agentmemory + iii-engine 默认绑定四个端口。如果重启失败并显示 `port in use`,这张表告诉你该查找什么进程。 + +| 端口 | 进程 | 用途 | 环境覆盖 | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | 内部流 worker(由 agentmemory + 查看器消费) | `III_STREAMS_PORT` | +| `3113` | agentmemory | 实时查看器(`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — workers 在此注册,OTel 遥测在此流过 | `III_ENGINE_URL`(完整 URL,默认 `ws://localhost:49134`) | + +崩溃后端口仍被占用时的陈旧进程清理: + +```bash +# macOS / Linux — 查找每个端口上的进程并杀掉 +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` 在优雅关闭时干净地回收 worker 和 engine pidfile。上面的手动清理仅针对崩溃后两个 pidfile 都未留下的情况。 + +### 配置文件 + +把 agentmemory 运行时配置放到 `~/.agentmemory/.env`,而不是在每个 shell 中 export 变量。如果查看器显示像 `export ANTHROPIC_API_KEY=...` 这样的设置提示,把它复制到该文件中作为 `ANTHROPIC_API_KEY=...`(去掉 `export` 前缀),然后重启 agentmemory。 + +进程环境变量仍然有效,优先级高于文件中的值。 + +在 Windows 上,同一文件位于 `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +要用 Claude Code Pro/Max 订阅而非 API key 测试,显式启用: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +如果想开启图或整合特性,在同一文件中打开: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### 环境变量 + +创建 `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +端口 `3111` 上的 124 个端点。REST API 默认绑定 `127.0.0.1`。当 `AGENTMEMORY_SECRET` 已设置时,受保护端点需要 `Authorization: Bearer `,网状同步端点要求两端都设置 `AGENTMEMORY_SECRET`。 + +
+关键端点 + +| 方法 | 路径 | 描述 | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | 健康检查(始终公开) | +| `POST` | `/agentmemory/session/start` | 开始会话 + 获取上下文 | +| `POST` | `/agentmemory/session/end` | 结束会话 | +| `POST` | `/agentmemory/observe` | 捕获观测 | +| `POST` | `/agentmemory/smart-search` | 混合搜索 | +| `POST` | `/agentmemory/context` | 生成上下文 | +| `POST` | `/agentmemory/remember` | 保存到长期记忆 | +| `POST` | `/agentmemory/forget` | 删除观测 | +| `POST` | `/agentmemory/enrich` | 文件上下文 + 记忆 + bugs | +| `GET` | `/agentmemory/profile` | 项目档案 | +| `GET` | `/agentmemory/export` | 导出所有数据 | +| `POST` | `/agentmemory/import` | 从 JSON 导入 | +| `POST` | `/agentmemory/graph/query` | 知识图谱查询 | +| `POST` | `/agentmemory/team/share` | 与团队共享 | +| `GET` | `/agentmemory/audit` | 审计轨迹 | + +完整端点列表:[`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # 热重载 +npm run build # 生产构建 +npm test # 950+ 测试 +npm run test:integration # API 测试(需要服务运行中) +``` + +**先决条件:** Node.js >= 20、[iii-engine](https://iii.dev/docs) 或 Docker + +

License

+ +[Apache-2.0](../LICENSE) diff --git a/READMEs/README.zh-TW.md b/READMEs/README.zh-TW.md new file mode 100644 index 0000000..75b2fc9 --- /dev/null +++ b/READMEs/README.zh-TW.md @@ -0,0 +1,1377 @@ +

+ agentmemory — 為 AI 編碼代理提供持久化記憶 +

+ +

+ + 讓你的編碼代理記住一切。不再重複解釋。 + Built on iii engine +
+ 為 Claude Code、Cursor、Gemini CLI、Codex CLI、Hermes、OpenClaw、pi、OpenCode 以及任何 MCP 用戶端提供持久化記憶。 +

+ +

+ English | + 简体中文 | + 繁體中文 | + 日本語 | + 한국어 | + Español | + Türkçe | + Русский | + हिन्दी | + Português | + Français | + Deutsch +

+ +

+ rohitg00/agentmemory | Trendshift +

+ +

+ + + + + Star History Chart + + +

+ +

+ Design doc: 1200 stars / 172 forks on the gist +

+ +

+ 這份 gist 以信心評分、生命週期管理、知識圖譜和混合搜尋擴展了 Karpathy 的 LLM Wiki 模式:agentmemory 就是其實作。 +

+ +

+ npm version + CI + License + Stars +

+ +

+ 95.2% retrieval R@5 + 92% fewer tokens + 53 MCP tools + 12 auto hooks + 0 external DBs + 950+ tests passing +

+ +

+ agentmemory demo +

+ +

+ 安裝 • + 快速開始 • + 基準測試 • + 對比競品 • + 代理 • + 運作原理 • + MCP • + 檢視器 • + iii 主控台 • + 由 iii 驅動 • + 設定 • + API +

+ +--- + +## 安裝 + +```bash +npm install -g @agentmemory/agentmemory # 一次安裝 — 全域可用 `agentmemory` 指令 +# 如果在 macOS/Linux 的系統 Node 上遇到 EACCES,請重試: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # 在 :3111 啟動記憶伺服器 +agentmemory demo # 注入範例會話並驗證召回 +agentmemory connect claude-code # 連接你的代理(也支援: codex, cursor, gemini-cli, ...) +``` + +或透過 `npx`(無需安裝): + +```bash +npx @agentmemory/agentmemory +``` + +提醒 — npx 會依版本快取。若裸 `npx @agentmemory/agentmemory` 指令執行的是舊版,強制使用最新版 `npx -y @agentmemory/agentmemory@latest`,或一次性清除快取 `rm -rf ~/.npm/_npx`(macOS/Linux;Windows 上刪除 `%LOCALAPPDATA%\npm-cache\_npx`)。從 v0.9.16+ 起,首次 npx 執行會以行內方式提示你全域安裝,之後裸 `agentmemory` 指令在任何地方都能用。 + +完整選項見下方[快速開始](#quick-start)。各代理具體接入見[支援所有代理](#works-with-every-agent)。 + +--- + +

Works with every agent

+ +agentmemory 相容任何支援 hooks、MCP 或 REST API 的代理。所有代理共享同一個記憶伺服器。 + + + + + + + + + + + + + + + + + + + + + + +
+Claude Code
+Claude Code
+原生外掛 + 12 hooks + MCP +
+Codex CLI
+Codex CLI
+原生外掛 + 6 hooks + MCP +
+OpenClaw
+OpenClaw
+原生外掛 + MCP +
+Hermes
+Hermes
+原生外掛 + MCP +
+pi
+pi
+原生外掛 + MCP +
+OpenHuman
+OpenHuman
+原生 Memory trait 後端 +
+Cursor
+Cursor
+MCP 伺服器 +
+Gemini CLI
+Gemini CLI
+MCP 伺服器 +
+OpenCode
+OpenCode
+22 hooks + MCP + 外掛 +
+Cline
+Cline
+MCP 伺服器 +
+Goose
+Goose
+MCP 伺服器 +
+Kilo Code
+Kilo Code
+MCP 伺服器 +
+Aider
+Aider
+REST API +
+Claude Desktop
+Claude Desktop
+MCP 伺服器 +
+Windsurf
+Windsurf
+MCP 伺服器 +
+Roo Code
+Roo Code
+MCP 伺服器 +
+ +

+ 相容任何使用 MCP 或 HTTP 的代理。一個伺服器,所有代理共享記憶。 +

+ +--- + +你每次會話都在重複解釋同樣的架構。你反覆發現同樣的 bug。你重複教同樣的偏好。內建的記憶(CLAUDE.md、.cursorrules)上限是 200 行而且會過期。agentmemory 解決了這個問題。它在背景靜默捕捉代理的行為,將其壓縮為可搜尋的記憶,並在下次會話開始時注入正確的上下文。一條指令。跨代理工作。 + +**改變了什麼:** 會話 1 你設定了 JWT 驗證。會話 2 你要求限流。代理已經知道你的驗證使用 `src/middleware/auth.ts` 中的 jose middleware,測試覆蓋了 token 驗證,你選擇 jose 而非 jsonwebtoken 是為了 Edge 相容性。無需重新解釋。無需複製貼上。代理就是*知道*。 + +```bash +npx @agentmemory/agentmemory +``` + +> **v0.9.0 新功能** — 著陸頁 [agent-memory.dev](https://agent-memory.dev) 上線,檔案系統連接器(`@agentmemory/fs-watcher`),獨立 MCP 現在代理至執行中的伺服器,使 hooks 和檢視器保持一致,稽核策略在所有刪除路徑上得到統一,健康狀態在小型 Node 行程上不再誤報 `memory_critical`。完整變更見 [CHANGELOG.md](../CHANGELOG.md#090--2026-04-18)。 + +--- + +

Benchmarks

+ + + + + + +
+ +### 檢索準確率 + +**coding-agent-life-v1** (內部語料庫,沙盒可重現) + +| 適配器 | P@5 | R@5 | Top-5 命中率 | p50 延遲 | +|---|---|---|---|---| +| **agentmemory 混合** | **0.578** | **0.967** | **15 / 15** | 14 ms | +| grep 基線 | 0.267 | 0.967 | 15 / 15 | 0 ms | + +100% Top-5 命中率。在相同輸入下,精確度比 grep 基線高 **2.2×**。完整依類型分解:[`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md)。 + +**LongMemEval-S** (ICLR 2025,500 個問題) + +| 系統 | R@5 | R@10 | MRR | +|---|---|---|---| +| **agentmemory** | **95.2%** | **98.6%** | **88.2%** | +| 僅 BM25 回退 | 86.2% | 94.6% | 71.5% | + + + +### Token 節省 + +| 方法 | Token/年 | 成本/年 | +|---|---|---| +| 貼上完整上下文 | 19.5M+ | 不可能(超出窗口) | +| LLM 摘要 | ~650K | ~$500 | +| **agentmemory** | **~170K** | **~$10** | +| agentmemory + 本地嵌入 | ~170K | **$0** | + +
+ +> 嵌入模型:`all-MiniLM-L6-v2`(本地、免費、無需 API key)。完整報告:[`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md)、[`benchmark/QUALITY.md`](../benchmark/QUALITY.md)、[`benchmark/SCALE.md`](../benchmark/SCALE.md)。競品比較:[`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md) — agentmemory 比較 mem0、Letta、Khoj、claude-mem、Hippo。 + +**在地重現:** [`eval/README.md`](../eval/README.md) — 適配器可插拔的 harness,支援 LongMemEval `_s`(公開 500 問)+ `coding-agent-life-v1`(內部 15 會話語料)。Grep / 向量 / agentmemory 適配器並排計分,NDJSON 輸出,公開計分卡發布於 [`docs/benchmarks/`](../docs/benchmarks/)。 + +**搭配 [codegraph](https://github.com/colbymchenry/codegraph)、[Understand Anything](https://github.com/Lum1104/Understand-Anything) 和 [Graphify](https://github.com/safishamsi/graphify) 使用。** 程式碼圖索引、多代理建置流水線,以及跨文件 / PDF / 圖片 / 影片的更廣泛知識圖譜。agentmemory 記住工作內容;這三個專案點亮上下文層其餘部分。組合配方與問題路由表:[`docs/recipes/pairings.md`](../docs/recipes/pairings.md)。 + +--- + +

vs Competitors

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
agentmemorymem0 (53K ⭐)Letta / MemGPT (22K ⭐)內建 (CLAUDE.md)
類型記憶引擎 + MCP 伺服器記憶層 API完整代理執行階段靜態檔案
檢索 R@595.2%68.5% (LoCoMo)83.2% (LoCoMo)N/A (grep)
自動捕捉12 hooks(零人工)手動呼叫 add()代理自編輯手動編輯
搜尋BM25 + 向量 + 圖(RRF 融合)向量 + 圖向量(歸檔)把所有內容載入上下文
多代理MCP + REST + 租約 + 訊號API(無協調)僅在 Letta 執行階段內部每個代理一個檔案
框架鎖定無(任何 MCP 用戶端)高(必須使用 Letta)每個代理格式
外部相依無(SQLite + iii-engine)Qdrant / pgvectorPostgres + 向量資料庫
記憶生命週期4 層整合 + 衰減 + 自動遺忘被動擷取代理管理手動清理
Token 效率~1,900 tokens/會話 ($10/年)依整合方式不同核心記憶位於上下文240 條觀測達 22K+ tokens
即時檢視器是(連接埠 3113)雲端儀表板雲端儀表板
自架是(預設)選用選用
+ +--- + +

Quick Start

+ +相容性:此版本面向穩定的 `iii-sdk` `^0.11.0` 和 iii-engine v0.11.x。 + +### 30 秒體驗 + +```bash +# 終端 1:啟動伺服器 +npx @agentmemory/agentmemory + +# 終端 2:注入範例資料並查看召回 +npx @agentmemory/agentmemory demo +``` + +`demo` 會注入 3 個真實會話(JWT 驗證、N+1 查詢修正、限流)並對它們執行語義搜尋。你將看到搜尋「資料庫效能最佳化」時找到「N+1 查詢修正」 — 關鍵字比對做不到這一點。 + +打開 `http://localhost:3113` 即時觀察記憶的建構過程。 + +### 推薦:全域安裝 + +`npx` 依版本快取。若你上週執行過 `npx @agentmemory/agentmemory@0.9.14`,裸 `npx @agentmemory/agentmemory` 指令可能會從 `~/.npm/_npx/` 提供過期的 0.9.14 而非最新版。安裝一次後,裸 `agentmemory` 指令處處可用: + +```bash +npm install -g @agentmemory/agentmemory +# 如果在 macOS/Linux 的系統 Node 上遇到 EACCES,請重試: +# sudo npm install -g @agentmemory/agentmemory +agentmemory # 啟動伺服器(等同 npx 形式) +agentmemory stop # 停止 +agentmemory remove # 解除安裝所有建立的內容 +agentmemory connect claude-code # 連接一個代理 +agentmemory doctor # 互動式診斷 + 修復提示 +``` + +從 v0.9.16 開始,首次 npx 執行會以行內方式提示你全域安裝 — 回答一次 `Y` 即可。若你跳過,可使用以下任一方式取得最新版本: + +```bash +npx -y @agentmemory/agentmemory@latest # 強制從 npm 拉取最新(跨平台) +rm -rf ~/.npm/_npx && npx @agentmemory/agentmemory # 僅 macOS/Linux (POSIX shell) +``` + +在 Windows / PowerShell 上,等價的快取清除指令是 `Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"` — 上面的 `npx -y ...@latest` 形式是跨平台選項。 + +### 會話重播 + +agentmemory 紀錄的每個會話都可重播。打開檢視器,選擇 **Replay** 標籤,在時間軸上拖動:提示、工具呼叫、工具結果和回應都以離散事件呈現,支援播放/暫停、速度控制(0.5×–4×)和鍵盤快捷鍵(空白鍵切換,方向鍵單步)。 + +已有舊的 Claude Code JSONL 紀錄想匯入? + +```bash +# 匯入預設 ~/.claude/projects 下的全部內容 +npx @agentmemory/agentmemory import-jsonl + +# 或匯入單一檔案 +npx @agentmemory/agentmemory import-jsonl ~/.claude/projects/-my-project/abc123.jsonl +``` + +匯入的會話與原生會話一同出現在 Replay 選擇器中。底層每個條目都透過 `mem::replay::load`、`mem::replay::sessions`、`mem::replay::import-jsonl` 這些 iii 函式路由 — 沒有側通道伺服器。 + +### 升級 / 維護 + +當你確實想更新本地執行階段時,使用維護指令: + +```bash +npx @agentmemory/agentmemory upgrade +``` + +警告:此指令會變更目前工作區/執行階段。它可能更新 JavaScript 相依,並拉取固定版本的 Docker 鏡像 `iiidev/iii:0.11.2`。它絕不會安裝未固定版本或更新的 iii 引擎。 + +實作細節見 `src/cli.ts`(參考 `src/cli.ts:544-595` 附近的 `runUpgrade`)。 + +### Claude Code(一段話,直接貼上) + +```text +Install agentmemory: run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 4 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 53 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. +``` + +#### Claude Code 不安裝外掛(MCP-standalone 路徑) + +若你直接透過 `~/.claude.json` 連接 agentmemory 的 MCP 伺服器而非使用 `/plugin install`,Claude Code 永遠不會解析 `${CLAUDE_PLUGIN_ROOT}`,你必須把 hook 腳本指向 `~/.claude/settings.json` 中的絕對路徑。這些路徑通常會嵌入 agentmemory 版本號(例如 `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.21/scripts/…`),因此下次升級會靜默破壞所有 hooks。 + +變通方法: + +```bash +agentmemory connect claude-code --with-hooks +``` + +這會把同樣的 hook 指令合併到 `~/.claude/settings.json`,絕對路徑解析到目前安裝的 `@agentmemory/agentmemory` 套件的 `plugin/` 目錄。升級 agentmemory 後重新執行該指令以重新整理路徑。同一檔案中的使用者條目會被保留;只取代之前的 agentmemory 條目。仍然推薦使用 `/plugin install` 路徑。 + +對於遠端或受保護的部署,啟動 Claude Code 時設定 `AGENTMEMORY_URL` 和 `AGENTMEMORY_SECRET`。外掛會把這兩個值傳遞給其捆綁的 MCP 伺服器;當 `AGENTMEMORY_URL` 為空時,MCP shim 預設使用 `http://localhost:3111`。 + +### Codex CLI(Codex 外掛平台) + +```bash +# 1. 在另一個終端啟動記憶伺服器 +npx @agentmemory/agentmemory + +# 2. 註冊 agentmemory 市集並安裝外掛 +codex plugin marketplace add rohitg00/agentmemory +codex plugin add agentmemory@agentmemory +``` + +Codex 外掛與 Claude Code 外掛同源,來自相同的 `plugin/` 目錄。它註冊: + +- `@agentmemory/mcp` 作為 MCP 伺服器(當 `AGENTMEMORY_URL` 指向執行中的 agentmemory 伺服器時,代理全部 51 個工具;若伺服器不可達,本地回退至 7 個工具) +- 6 個生命週期 hooks:`SessionStart`、`UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`PreCompact`、`Stop` +- 4 個 skills:`/recall`、`/remember`、`/session-history`、`/forget` + +Codex 的 hook 引擎會把 `CLAUDE_PLUGIN_ROOT` 注入 hook 子行程(參見 [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)),因此同樣的 hook 腳本在兩個宿主中都能運作,無需重複實作。Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure 事件僅 Claude Code 支援,Codex 未註冊這些。 + +#### Codex Desktop:外掛 hooks 目前沒有回應(有變通方法) + +`CodexHooks` 和 `PluginHooks` 在 [`codex-rs/features/src/lib.rs`](https://github.com/openai/codex/blob/main/codex-rs/features/src/lib.rs) 中都已穩定且預設啟用,但 Codex Desktop 目前不會派發外掛本地的 `hooks.json`([openai/codex#16430](https://github.com/openai/codex/issues/16430))。MCP 工具仍能運作;只是生命週期觀測缺失。 + +在上游修正落地前,把同樣的 hook 指令鏡像到全域 `~/.codex/hooks.json`: + +```bash +agentmemory connect codex --with-hooks +``` + +這會在 `~/.codex/hooks.json` 新增一個冪等區塊,引用捆綁腳本的絕對路徑(在使用者範圍下無需 `${CLAUDE_PLUGIN_ROOT}` 展開)。升級 agentmemory 後重新執行同一指令以重新整理路徑。同一檔案中的使用者條目會被保留;只取代之前的 agentmemory 條目。 + +
+OpenClaw(貼上此提示) + +```text +Install agentmemory for OpenClaw. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 51 memory tools: + +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} + +Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`. +``` + +完整指南:[`integrations/openclaw/`](../integrations/openclaw/) + +
+ +
+Hermes Agent(貼上此提示) + +```text +Install agentmemory for Hermes. Run `npx @agentmemory/agentmemory` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 51 memory tools: + +mcp_servers: + agentmemory: + command: npx + args: ["-y", "@agentmemory/mcp"] + +memory: + provider: agentmemory + +Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory. +``` + +完整指南:[`integrations/hermes/`](../integrations/hermes/) + +
+ +### 其他代理 + +啟動記憶伺服器:`npx @agentmemory/agentmemory` + +在使用 `mcpServers` 結構的每個宿主(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI、OpenClaw)中,agentmemory 條目是**相同的 MCP 伺服器區塊**: + +```json +"agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "${AGENTMEMORY_URL}", + "AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}" + } +} +``` + +**把此條目合併到宿主設定檔現有的 `mcpServers` 物件中** — 不要取代整個檔案。若檔案已有其他伺服器,把 `agentmemory` 作為另一個 key 加在它們旁邊。若完全缺少 `mcpServers`,把整個區塊貼到 `{ "mcpServers": { ... } }` 裡。`${VAR}` 佔位符會在 MCP 伺服器啟動時從 shell 繼承 `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` — 未設定的變數傳空字串,shim 回退到 `http://localhost:3111`。一個接好的條目同時涵蓋本地和遠端(k8s / 反向代理)部署。 + +| 代理 | 設定檔 | 備註 | +|---|---|---| +| **Cursor** | `~/.cursor/mcp.json` | 合併到 `mcpServers`。網站上也提供一鍵深層連結。 | +| **Claude Desktop** | `claude_desktop_config.json`(Application Support) | 合併到 `mcpServers`。編輯後重新啟動 Claude Desktop。 | +| **Cline / Roo Code / Kilo Code** | Cline MCP 設定(設定 UI → MCP Servers → Edit) | 同樣的 `mcpServers` 區塊。 | +| **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | 同樣的 `mcpServers` 區塊。 | +| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user`(自動合併)。 | +| **OpenClaw** | OpenClaw MCP 設定 | 同樣的 `mcpServers` 區塊,或使用更深的[記憶外掛](../integrations/openclaw/)。 | +| **Codex CLI(僅 MCP)** | `.codex/config.toml` | TOML 形式:`codex mcp add agentmemory -- npx -y @agentmemory/mcp`,或手動新增 `[mcp_servers.agentmemory]`。 | +| **Codex CLI(完整外掛)** | Codex 外掛市集 | `codex plugin marketplace add rohitg00/agentmemory` 然後 `codex plugin add agentmemory@agentmemory`。註冊 MCP + 6 個生命週期 hooks(SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、PreCompact、Stop)+ 4 個 skills。在 Codex Desktop 上,直到 [openai/codex#16430](https://github.com/openai/codex/issues/16430) 落地之前,還要執行 `agentmemory connect codex --with-hooks` — 那裡的外掛 hooks 目前沒有回應。 | +| **OpenCode(僅 MCP)** | `opencode.json` | 不同結構 — 頂層 `mcp` key,command 是陣列:`{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`。 | +| **OpenCode(完整外掛)** | `plugin/opencode/` | 22 個自動捕捉 hooks,涵蓋會話生命週期、訊息、工具、錯誤。兩個斜線指令(`/recall`、`/remember`)。把 `plugin/opencode/` 複製到你的 OpenCode 工作區並把外掛條目新增到 `opencode.json`。完整 hook 表與差異分析見 [`plugin/opencode/README.md`](../plugin/opencode/README.md)。 | +| **pi** | `~/.pi/agent/extensions/agentmemory` | 複製 [`integrations/pi`](../integrations/pi/) 並重啟 pi。 | +| **Hermes Agent** | `~/.hermes/config.yaml` | 使用更深的[記憶提供者外掛](../integrations/hermes/),設定 `memory.provider: agentmemory`。 | +| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` 會寫入標準的 `mcpServers` 區塊。Hook 負載與 Claude Code 欄位相容,因此既有的 12 hook 腳本無需修改即可運作 — 透過同一 `settings.json` 的 `hooks` 區段連接它們。 | +| **Antigravity**(取代 Gemini CLI) | `mcp_config.json`(在 Antigravity 的 User 目錄中) | `agentmemory connect antigravity` 會寫入標準的 `mcpServers` 區塊。macOS: `~/Library/Application Support/Antigravity/User/`。Linux: `~/.config/Antigravity/User/`。在 2026-06-18 Gemini CLI 停止服務後使用。 | +| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` 寫入使用者層級設定。工作區覆寫放在你的程式碼旁的 `.kiro/settings/mcp.json` 中。 | +| **Goose** | Goose MCP 設定 UI | 同樣的 `mcpServers` 區塊。 | +| **Aider** | n/a | 直接呼叫 REST API:`curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`。 | +| **任何代理(32+)** | n/a | `npx skillkit install agentmemory` 自動偵測宿主並合併。 | + +**沙箱化的 MCP 用戶端**(Flatpak / Snap / 受限容器)無法存取宿主的 `localhost`:還要在 `env` 區塊中設定 `"AGENTMEMORY_FORCE_PROXY": "1"`,並把 `AGENTMEMORY_URL` 指向沙箱確實能到達的路由(例如你的 LAN IP)。 + +### 程式化存取(Python / Rust / Node) + +agentmemory 把核心操作註冊為 iii 函式(`mem::remember`、`mem::observe`、`mem::context`、`mem::smart-search`、`mem::forget`)。任何擁有 iii SDK 的語言都可以透過 `ws://localhost:49134` 直接呼叫它們 — 無需為每種語言準備獨立的 REST 用戶端。 + +```bash +pip install iii-sdk # Python +cargo add iii-sdk # Rust +npm install iii-sdk # Node +``` + +```python +from iii import register_worker + +iii = register_worker("ws://localhost:49134") +iii.connect() + +iii.trigger({ + "function_id": "mem::smart-search", + "payload": {"project": "demo", "query": "how do tokens refresh"}, +}) +``` + +完整範例:[`examples/python/`](../examples/python/)(快速開始 + 觀測/召回流程)。`:3111` 上的 REST 對沒有 iii 執行階段的宿主仍可用。 + +### 從原始碼建置 + +```bash +git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory +npm install && npm run build && npm start +``` + +若 `iii` 已安裝,這會以本地 `iii-engine` 啟動 agentmemory;若 Docker 可用,則回退到 Docker Compose。REST、串流和檢視器預設繫結到 `127.0.0.1`。 + +手動安裝 `iii-engine`。**agentmemory 目前把 `iii-engine` 釘在 `v0.11.2`** — `v0.11.6` 引入了新的「透過 `iii worker add` 沙盒化一切」模型,agentmemory 尚未為此重構。重構落地後即解除釘版。若你已手動遷移到沙盒模型,可用 `AGENTMEMORY_III_VERSION=` 覆寫。 + +- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSL https://github.com/iii-hq/iii/releases/download/iii/v0.11.2/iii-aarch64-apple-darwin.tar.gz | tar -xz -C ~/.local/bin && chmod +x ~/.local/bin/iii` +- **macOS x64:** 把 `aarch64-apple-darwin` 換成 `x86_64-apple-darwin` +- **Linux x64:** 換成 `x86_64-unknown-linux-gnu` +- **Linux arm64:** 換成 `aarch64-unknown-linux-gnu` +- **Windows:** 從 [iii-hq/iii releases v0.11.2](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2) 下載 `iii-x86_64-pc-windows-msvc.zip`,擷取 `iii.exe`,加入 PATH + +或使用 Docker(捆綁的 `docker-compose.yml` 會拉取 `iiidev/iii:0.11.2`)。完整文件:[iii.dev/docs](https://iii.dev/docs)。 + +### Windows + +agentmemory 可在 Windows 10/11 執行,但僅 Node.js 套件不夠 — 你還需要 `iii-engine` 執行階段(一個獨立的原生二進位)作為背景行程。官方上游安裝器是 `sh` 指令稿,目前沒有 PowerShell 安裝器或 scoop/winget 套件,因此 Windows 使用者有兩條路徑: + +**選項 A — 預建 Windows 二進位(推薦):** + +```powershell +# 1. 在瀏覽器打開 https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.11.2 +# (我們釘在 v0.11.2,直到 agentmemory 為 v0.11.6+ 引擎需求的 +# 新沙盒模型完成重構) +# 2. 下載 iii-x86_64-pc-windows-msvc.zip +# (若是 ARM 機器則下載 iii-aarch64-pc-windows-msvc.zip) +# 3. 把 iii.exe 解壓到 PATH 上的某處,或放在: +# %USERPROFILE%\.local\bin\iii.exe +# (agentmemory 會自動檢查該位置) +# 4. 驗證: +iii --version +# 應輸出:0.11.2 + +# 5. 然後照常執行 agentmemory: +npx -y @agentmemory/agentmemory +``` + +**選項 B — Docker Desktop:** + +```powershell +# 1. 安裝 Docker Desktop for Windows +# 2. 啟動 Docker Desktop 並確保引擎執行中 +# 3. 執行 agentmemory — 它會自動啟動捆綁的 compose 檔: +npx -y @agentmemory/agentmemory +``` + +**選項 C — 僅獨立 MCP(無引擎):** 若你只需要 MCP 工具供代理使用,不需要 REST API、檢視器或定時工作,則完全跳過引擎: + +```powershell +npx -y @agentmemory/agentmemory mcp +# 或透過 shim 套件: +npx -y @agentmemory/mcp +``` + +**Windows 診斷:** 若 `npx @agentmemory/agentmemory` 失敗,加 `--verbose` 重新執行以看到實際的引擎 stderr。常見失敗模式: + +| 症狀 | 修正 | +|---|---| +| `iii-engine process started` 然後 `did not become ready within 15s` | 引擎啟動當機 — 用 `--verbose` 重新執行,檢查 stderr | +| `Could not start iii-engine` | `iii.exe` 和 Docker 都未安裝。見上面選項 A 或 B | +| 連接埠衝突 | `netstat -ano \| findstr :3111` 查看佔用,然後 kill 或用 `--port ` | +| Docker 已安裝但仍跳過回退 | 確保 Docker Desktop 確實在執行(系統匣圖示) | + +> 注意:iii **引擎** 是預建的二進位檔,而非 cargo crate — 請勿嘗試以 `cargo install` 安裝它。(iii 的 **SDK** 確實已發布到 crates.io、npm 和 PyPI,但 agentmemory 並不需要它們。)受支援的引擎安裝方式皆固定為 v0.11.2:上述預建的 v0.11.2 二進位、**帶版本固定** 的上游 `sh` 安裝指令稿 `curl -fsSL https://install.iii.dev/iii/main/install.sh | VERSION=0.11.2 sh`(macOS/Linux),以及 Docker 鏡像 `iiidev/iii:0.11.2`。直接執行 `install.sh | sh` 會安裝 **最新** 引擎,而 agentmemory 並不支援該版本 — 請務必傳入 `VERSION=0.11.2`。最簡單的方式:直接執行 `npx @agentmemory/agentmemory`,它會為你把固定版本的引擎取得到 `~/.agentmemory/bin`。 + +--- + +

部署

+ +託管主機的一鍵範本。每個範本都附帶自含的 +Dockerfile,從 npm 拉取 `@agentmemory/agentmemory` 並從官方 +`iiidev/iii` Docker Hub 鏡像複製 iii 引擎二進位 — 無需 +預建 agentmemory 鏡像。持久儲存掛載在 +`/data`;首次啟動 entrypoint 用面向部署調校的設定 +覆寫 npm 捆綁的 iii 設定(原設定繫結 `127.0.0.1`), +讓其繫結 `0.0.0.0` 並使用絕對 `/data` 路徑,產生 +HMAC secret,然後透過 `gosu` 從 `root` 降權到 `node` +再 exec agentmemory CLI。 + +

+ Deploy to fly.io + Deploy to Railway +

+ +Render 的一鍵部署按鈕要求倉庫根有 `render.yaml`,我們刻意保持根目錄整潔。使用 [`deploy/render/`](../deploy/render/README.md) 中文件化的 Render Blueprint 流程,手動指向倉庫內的藍圖。 + +完整設定細節(HMAC 擷取、檢視器 SSH 隧道、輪替、備份、 +成本下限)見 [`deploy/`](../deploy/README.md): + +- [`deploy/fly`](../deploy/fly/README.md) — 單機搭配 + `auto_stop_machines = "stop"`;閒置時最便宜。 +- [`deploy/railway`](../deploy/railway/README.md) — Hobby 方案固定費, + 磁碟區在儀表板中設定。 +- [`deploy/render`](../deploy/render/README.md) — Blueprint 流程, + 付費方案自動磁碟快照。 +- [`deploy/coolify`](../deploy/coolify/README.md) — 透過 [Coolify](https://coolify.io/self-hosted) + 在你自己的 VPS 上自架;同樣的 Docker + Compose 堆疊,主機與資料都歸你所有。 + +僅發布連接埠 `3111`。`3113` 上的檢視器在容器內仍繫結到 +loopback — 每個範本的 README 都文件化了到達它的 +SSH 隧道模式。 + +--- + +

Why agentmemory

+ +每個編碼代理在會話結束時都會忘記一切。你每次會話的前 5 分鐘都浪費在重新解釋技術堆疊上。agentmemory 在背景執行,徹底消除這一點。 + +```text +Session 1: "Add auth to the API" + Agent writes code, runs tests, fixes bugs + agentmemory silently captures every tool use + Session ends -> observations compressed into structured memory + +Session 2: "Now add rate limiting" + Agent already knows: + - Auth uses JWT middleware in src/middleware/auth.ts + - Tests in test/auth.test.ts cover token validation + - You chose jose over jsonwebtoken for Edge compatibility + Zero re-explaining. Starts working immediately. +``` + +### 對比內建代理記憶 + +每個 AI 編碼代理都自帶內建記憶 — Claude Code 有 `MEMORY.md`、Cursor 有 notepad、Cline 有 memory bank。這些像便利貼。agentmemory 是便利貼背後的可搜尋資料庫。 + +| | 內建 (CLAUDE.md) | agentmemory | +|---|---|---| +| 規模 | 200 行上限 | 無限 | +| 搜尋 | 把所有內容載入上下文 | BM25 + 向量 + 圖(僅 top-K) | +| Token 成本 | 240 條觀測達 22K+ | ~1,900 tokens(少 92%) | +| 跨代理 | 每個代理一個檔案 | MCP + REST(任何代理) | +| 協調 | 無 | 租約、訊號、動作、例程 | +| 可觀測性 | 手動讀檔 | 連接埠 3113 即時檢視器 | + +--- + +

How It Works

+ +### 記憶流水線 + +```text +PostToolUse hook fires + -> SHA-256 dedup (5min window) + -> Privacy filter (strip secrets, API keys) + -> Store raw observation + -> LLM compress -> structured facts + concepts + narrative + -> Vector embedding (6 providers + local) + -> Index in BM25 + vector + +Stop / SessionEnd hook fires + -> Summarize session + -> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true) + -> Slot reflection (if SLOT_REFLECT_ENABLED=true) + +SessionStart hook fires + -> Load project profile (top concepts, files, patterns) + -> Hybrid search (BM25 + vector + graph) + -> Token budget (default: 2000 tokens) + -> Inject into conversation +``` + +### 4 層記憶整合 + +靈感來自人腦處理記憶的方式 — 與睡眠時的記憶整合並無不同。 + +| 層級 | 內容 | 類比 | +|------|------|---------| +| **Working(工作記憶)** | 來自工具使用的原始觀測 | 短期記憶 | +| **Episodic(情節記憶)** | 壓縮後的會話摘要 | 「發生了什麼」 | +| **Semantic(語意記憶)** | 擷取的事實與模式 | 「我知道什麼」 | +| **Procedural(程序記憶)** | 工作流與決策模式 | 「怎麼做」 | + +記憶隨時間衰減(Ebbinghaus 曲線)。頻繁存取的記憶會強化。陳舊記憶會自動清除。矛盾會被偵測並解決。 + +### 捕捉了什麼 + +| Hook | 捕捉內容 | +|------|----------| +| `SessionStart` | 專案路徑、會話 ID | +| `UserPromptSubmit` | 使用者提示(隱私過濾) | +| `PreToolUse` | 檔案存取模式 + 富化上下文 | +| `PostToolUse` | 工具名、輸入、輸出 | +| `PostToolUseFailure` | 錯誤上下文 | +| `PreCompact` | 在壓縮前重新注入記憶 | +| `SubagentStart/Stop` | 子代理生命週期 | +| `Stop` | 會話結束摘要 | +| `SessionEnd` | 會話完成標記 | + +### 關鍵能力 + +| 能力 | 描述 | +|---|---| +| **自動捕捉** | 每次工具使用都透過 hooks 記錄 — 零人工 | +| **語意搜尋** | BM25 + 向量 + 知識圖譜,RRF 融合 | +| **記憶演化** | 版本控制、覆寫關係、關係圖 | +| **自動遺忘** | TTL 過期、矛盾偵測、重要性驅逐 | +| **隱私優先** | API key、secret、`` 標籤儲存前被剝除 | +| **自癒** | 熔斷器、提供者回退鏈、健康監控 | +| **Claude 橋接** | 與 MEMORY.md 雙向同步 | +| **知識圖譜** | 實體擷取 + BFS 走訪 | +| **團隊記憶** | 團隊成員之間的命名空間共享 + 私有 | +| **引用溯源** | 任意記憶追溯到來源觀測 | +| **Git 快照** | 記憶狀態的版本、回滾、diff | + +--- + + + +三路檢索結合三種訊號: + +| 流 | 功用 | 何時啟用 | +|---|---|---| +| **BM25** | 詞幹化關鍵字比對 + 同義詞擴展 | 始終啟用 | +| **Vector(向量)** | 稠密嵌入上的餘弦相似度 | 已設定嵌入提供者 | +| **Graph(圖)** | 透過實體比對進行知識圖譜走訪 | 查詢中偵測到實體 | + +透過 Reciprocal Rank Fusion (RRF, k=60) 融合,並按會話多樣化(每個會話最多 3 個結果)。 + +BM25 開箱即用支援希臘文、西里爾文、希伯來文、阿拉伯文和帶音標拉丁文的分詞。對於中文/日文/韓文記憶,安裝可選分詞器(`npm install @node-rs/jieba tiny-segmenter`)以把 CJK 串切分為詞級 token;若未安裝,agentmemory 會軟回退到整串分詞並在 stderr 印出一次性提示。 + +### 嵌入提供者 + +agentmemory 自動偵測你的提供者。為獲得最佳效果,安裝本地嵌入(免費): + +```bash +npm install @xenova/transformers +``` + +| 提供者 | 模型 | 成本 | 備註 | +|---|---|---|---| +| **本地(推薦)** | `all-MiniLM-L6-v2` | 免費 | 離線,比僅 BM25 召回率高 +8pp | +| Gemini | `gemini-embedding-001` | 免費層 | 100+ 語言,768/1536/3072 維 (MRL),2048-token 輸入。取代 `text-embedding-004`([已棄用,2026 年 1 月 14 日下線](https://ai.google.dev/gemini-api/docs/deprecations)) | +| OpenAI | `text-embedding-3-small` | $0.02/1M | 最高品質 | +| Voyage AI | `voyage-code-3` | 付費 | 針對程式碼最佳化 | +| Cohere | `embed-english-v3.0` | 免費試用 | 通用 | +| OpenRouter | 任意模型 | 視情況 | 多模型代理 | + +--- + +

MCP Server

+ +53 個工具、6 個資源、3 個提示、4 個 skills — 任何代理可用的最全面 MCP 記憶工具組。 + +> **MCP shim 對比完整伺服器:** 已發布的 `@agentmemory/mcp` 套件是一個薄 shim。**只有當它能透過 `AGENTMEMORY_URL` 連通執行中的 agentmemory 伺服器**(代理模式)時,才暴露完整的 51 工具表面。在沒有可達伺服器的情況下,shim 回退到 7 工具的本地集合(`memory_save`、`memory_recall`、`memory_smart_search`、`memory_sessions`、`memory_export`、`memory_audit`、`memory_governance_delete`)。`AGENTMEMORY_TOOLS=core|all` 環境變數是*伺服器端*旗標 — 在 shim 的 `env` 區塊中設定無效。若在 Cursor / OpenCode / Gemini CLI 中只看到 7 個工具,啟動 `npx @agentmemory/agentmemory`(或 Docker 堆疊)並設定 `AGENTMEMORY_URL=http://localhost:3111`。 + +### 51 個工具 + +
+核心工具(始終可用) + +| 工具 | 描述 | +|------|-------------| +| `memory_recall` | 搜尋過去的觀測 | +| `memory_compress_file` | 在保留結構的同時壓縮 markdown 檔 | +| `memory_save` | 儲存洞察、決策或模式 | +| `memory_patterns` | 偵測反覆出現的模式 | +| `memory_smart_search` | 混合語意 + 關鍵字搜尋 | +| `memory_file_history` | 關於特定檔案的過去觀測 | +| `memory_sessions` | 列出最近的會話 | +| `memory_timeline` | 按時間排列的觀測 | +| `memory_profile` | 專案檔案(概念、檔案、模式) | +| `memory_export` | 匯出所有記憶資料 | +| `memory_relations` | 查詢關係圖 | + +
+ +
+擴展工具(共 51 — 設定 AGENTMEMORY_TOOLS=all) + +| 工具 | 描述 | +|------|-------------| +| `memory_patterns` | 偵測反覆出現的模式 | +| `memory_timeline` | 按時間排列的觀測 | +| `memory_relations` | 查詢關係圖 | +| `memory_graph_query` | 知識圖譜走訪 | +| `memory_consolidate` | 執行 4 層整合 | +| `memory_claude_bridge_sync` | 與 MEMORY.md 同步 | +| `memory_team_share` | 與團隊成員共享 | +| `memory_team_feed` | 最近共享條目 | +| `memory_audit` | 操作稽核軌跡 | +| `memory_governance_delete` | 帶稽核軌跡的刪除 | +| `memory_snapshot_create` | Git 版本快照 | +| `memory_action_create` | 建立帶相依性的工作項 | +| `memory_action_update` | 更新動作狀態 | +| `memory_frontier` | 依優先序排序的未阻塞動作 | +| `memory_next` | 單一最重要的下一個動作 | +| `memory_lease` | 獨佔動作租約(多代理) | +| `memory_routine_run` | 實例化工作流例程 | +| `memory_signal_send` | 代理之間的訊息 | +| `memory_signal_read` | 帶回執讀取訊息 | +| `memory_checkpoint` | 外部條件閘門 | +| `memory_mesh_sync` | 實例之間 P2P 同步 | +| `memory_sentinel_create` | 事件驅動監視器 | +| `memory_sentinel_trigger` | 外部觸發哨兵 | +| `memory_sketch_create` | 暫時動作圖 | +| `memory_sketch_promote` | 提升為永久 | +| `memory_crystallize` | 緊湊化動作鏈 | +| `memory_diagnose` | 健康檢查 | +| `memory_heal` | 自動修復卡住的狀態 | +| `memory_facet_tag` | 維度:值 標籤 | +| `memory_facet_query` | 依 facet 標籤查詢 | +| `memory_verify` | 追溯來源 | + +
+ +### 6 個資源 · 3 個提示 · 4 個 Skills + +| 類型 | 名稱 | 描述 | +|------|------|-------------| +| Resource | `agentmemory://status` | 健康、會話數、記憶數 | +| Resource | `agentmemory://project/{name}/profile` | 專案層級智慧 | +| Resource | `agentmemory://memories/latest` | 最新 10 條活躍記憶 | +| Resource | `agentmemory://graph/stats` | 知識圖譜統計 | +| Prompt | `recall_context` | 搜尋並回傳上下文訊息 | +| Prompt | `session_handoff` | 代理之間的交接資料 | +| Prompt | `detect_patterns` | 分析反覆出現的模式 | +| Skill | `/recall` | 搜尋記憶 | +| Skill | `/remember` | 儲存到長期記憶 | +| Skill | `/session-history` | 最近的會話摘要 | +| Skill | `/forget` | 刪除觀測/會話 | + +### 獨立 MCP + +無需完整伺服器即可執行 — 適用於任何 MCP 用戶端。以下兩種都可以: + +```bash +npx -y @agentmemory/agentmemory mcp # 標準指令(始終可用) +npx -y @agentmemory/mcp # shim 套件別名 +``` + +或新增到你的代理的 MCP 設定: + +大多數代理(Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI): +```json +{ + "mcpServers": { + "agentmemory": { + "command": "npx", + "args": ["-y", "@agentmemory/mcp"], + "env": { + "AGENTMEMORY_URL": "http://localhost:3111" + } + } + } +} +``` + +把 `agentmemory` 條目合併到你的宿主既有的 `mcpServers` 物件中,而非取代檔案。對於無法存取宿主 `localhost` 的沙箱用戶端,在 env 區塊中加入 `"AGENTMEMORY_FORCE_PROXY": "1"`,並把 `AGENTMEMORY_URL` 設為沙箱能到達的路由。 + +OpenCode (`opencode.json`): +```json +{ + "mcp": { + "agentmemory": { + "type": "local", + "command": ["npx", "-y", "@agentmemory/mcp"], + "enabled": true + } + }, + "plugin": ["./plugins/agentmemory-capture.ts"] +} +``` + +從倉庫複製外掛檔: +```bash +mkdir -p ~/.config/opencode/plugins +cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/ +cp plugin/opencode/commands/*.md ~/.config/opencode/commands/ +``` + +--- + +

Real-Time Viewer

+ +在連接埠 `3113` 自動啟動。即時觀測流、會話瀏覽器、記憶瀏覽器、知識圖譜視覺化和健康儀表板。 + +```bash +open http://localhost:3113 +``` + +檢視器伺服器預設繫結 `127.0.0.1`。REST 提供的 `/agentmemory/viewer` 端點遵循正常的 `AGENTMEMORY_SECRET` bearer-token 規則。CSP 標頭使用每回應 script nonce 並停用行內處理常式屬性(`script-src-attr 'none'`)。 + +--- + +

iii Console

+ +`:3113` 上的檢視器展示你的代理**記住了什麼**。[iii 主控台](https://iii.dev/docs/console) 展示你的代理**做了什麼** — 每個記憶操作都是 OpenTelemetry trace,每個 KV 條目都可編輯,每個函式都可呼叫,每個串流都可掛載。同一記憶的兩個視窗:一個面向產品,一個面向引擎。 + +觀察一次 `memory_smart_search` 觸發,在瀑布圖中看到 BM25 掃描 → 嵌入查找 → RRF 融合 → 重新排序器。在 KV 瀏覽器中編輯卡住的整合計時器。用調整後的負載重播一個 `PostToolUse` hook。釘選 WebSocket 串流,即時觀察觀測落地。 + +agentmemory 免費提供這一切,因為每個函式、觸發器、狀態範圍、串流都是 iii 原語 — 沒有自訂、沒有需要插樁的地方。 + +

+ iii console Workers page — connected workers including agentmemory instances with live function counts and runtime metadata +
+ Workers 頁面:每個已連接 worker — 包括 agentmemory 本身 — 顯示 PID、函式數、執行階段和最後在線時間。 +

+ +**已經裝好了。** 主控台隨 `iii` 一同發布 — 無需獨立安裝器。 + +**與 agentmemory 並行啟動:** + +```bash +# agentmemory 檢視器佔用連接埠 3113,所以在 3114 執行主控台。 +# 引擎 REST (3111)、WebSocket (3112)、bridge (49134) 預設值與 agentmemory 相符。 +iii console --port 3114 +``` + +然後打開 `http://localhost:3114`。加 `--enable-flow` 開啟實驗性架構圖頁面。 + +僅在你已移動引擎端點時才覆寫: + +```bash +iii console --port 3114 \ + --engine-port 3111 \ + --ws-port 3112 \ + --bridge-port 49134 +``` + +**主控台能做什麼:** + +| 頁面 | 用途 | +|------|-----------| +| **Workers** | 查看每個已連接 worker 及其即時指標 — 包括 agentmemory worker 本身。 | +| **Functions** | 直接以 JSON 負載呼叫 agentmemory 的任何函式 — 測試 `memory.recall`、`memory.consolidate`、`graph.query` 無需接入用戶端。 | +| **Triggers** | 重播 HTTP、cron、事件和狀態觸發器 — 手動觸發整合 cron、重試 HTTP 路由、發出狀態變更。 | +| **States** | 完整 CRUD 的 KV 瀏覽器 — 會話、記憶槽位、生命週期計時器、嵌入索引 — 就地編輯值。 | +| **Streams** | 記憶寫入、hook 事件和觀測更新流經 iii 串流時的即時 WebSocket 監視器。 | +| **Queues** | 持久佇列主題 + 死信管理。重播或捨棄失敗的嵌入/壓縮工作。 | +| **Traces** | OpenTelemetry 瀑布/火焰/服務分解視圖。按 `trace_id` 過濾,精確查看單次 `memory.search` 產生了哪些函式、DB 呼叫和嵌入請求。 | +| **Logs** | 結構化 OTEL 日誌,過濾並與 trace/span ID 關聯。 | +| **Config** | 執行階段設定 — 看到引擎正在使用的 workers、提供者和連接埠。 | +| **Flow** | (選用,`--enable-flow`)每個 worker、觸發器和串流的互動式架構圖。 | + +

+ iii console trace waterfall view showing per-span duration +
+ Traces:每個記憶操作的瀑布/火焰/服務分解。 +

+ +**Traces 已開啟:** + +`iii-config.yaml` 出廠啟用 `iii-observability` worker(`exporter: memory`、`sampling_ratio: 1.0`、指標 + 日誌)。無需額外設定 — agentmemory 啟動那一刻,每個記憶操作都會發出一個 trace span 和一個主控台可讀的結構化日誌。 + +若你想改為匯出到 Jaeger/Honeycomb/Grafana Tempo,把 `exporter: memory` 改為 `exporter: otlp` 並依 iii 的可觀測性文件設定收集器端點。 + +> **提醒:** 主控台本身未強制驗證 — 保持其繫結 `127.0.0.1`(預設)並永遠不要對外暴露。 + +--- + +

Powered by iii

+ +agentmemory **本身就是一個執行中的 [iii](https://iii.dev) 實例**。函式、觸發器、KV 狀態、串流、OTEL traces — 全部都是 iii 原語。你沒有安裝 Postgres、Redis、Express、pm2 或 Prometheus,因為 iii 取代了它們。 + +這代表多一條指令就能為 agentmemory 增加一整套新能力。 + +### 一條指令擴展 agentmemory + +```bash +iii worker add iii-pubsub # 把記憶寫入扇出到每個連接的實例 +iii worker add iii-cron # 排程整合、衰減掃描、快照輪替 +iii worker add iii-queue # 嵌入 + 壓縮工作的持久重試 +iii worker add iii-observability # 每個記憶操作的 OTEL traces(預設開啟) +iii worker add iii-sandbox # 在隔離 microVM 內執行召回到的程式碼 +iii worker add iii-database # 切換 SQL 後端的狀態適配器 +iii worker add mcp # 在 agentmemory 的 MCP 旁開設通用 MCP 宿主 +``` + +每個 `iii worker add` 都會把新的函式和觸發器註冊到 agentmemory 正在執行的同一引擎中。檢視器和主控台立即接收 — 無需重新載入、無需新整合、無需新容器。 + +| `iii worker add` | 在 agentmemory 上獲得的額外能力 | +|---|---| +| [`iii-pubsub`](https://workers.iii.dev/workers/iii-pubsub) | 多實例記憶:每次 `remember` 扇出,每次 `search` 讀取聯集 | +| [`iii-cron`](https://workers.iii.dev/workers/iii-cron) | 排程生命週期 — 夜間整合、週快照、按固定時鐘衰減 | +| [`iii-queue`](https://workers.iii.dev/workers/iii-queue) | 持久重試:失敗的嵌入 + 壓縮工作在重啟後存活,無觀測遺失 | +| [`iii-observability`](https://workers.iii.dev/workers/iii-observability) | 每個函式的 OTEL traces、指標、日誌 — 從第一天起就接入 `iii-config.yaml` | +| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall` 出來的程式碼在一次性 VM 中執行,不在你的 shell 中 | +| [`iii-database`](https://workers.iii.dev/workers/iii-database) | 當預設的記憶體 KV 不夠用時,SQL 後端狀態適配器 | +| [`mcp`](https://workers.iii.dev/workers/mcp) | 在 agentmemory 的旁邊架設額外 MCP 伺服器,共享同一引擎 | + +完整登錄表:[workers.iii.dev](https://workers.iii.dev)。那裡的每個 worker 都透過 agentmemory 所用的同樣原語組合 — 而你已經擁有的 agentmemory 本身就是其中之一。 + +### iii 取代了什麼 + +| 傳統堆疊 | agentmemory 使用 | +|---|---| +| Express.js / Fastify | iii HTTP Triggers | +| SQLite / Postgres + pgvector | iii KV State + 記憶體向量索引 | +| SSE / Socket.io | iii Streams (WebSocket) | +| pm2 / systemd | iii engine worker 監管 | +| Prometheus / Grafana | iii OTEL + 健康監控 | +| 自訂外掛系統 | `iii worker add ` | + +**118 個原始檔 · ~21,800 行程式碼 · 950+ 測試 · 123 個函式 · 34 個 KV 範圍** — 全部基於三種原語。沒有 `agentmemory plugin install`。外掛系統就是 iii 本身。 + +--- + +

Configuration

+ +### LLM 提供者 + +agentmemory 從你的環境自動偵測。預設情況下,除非你設定提供者或明確啟用 Claude 訂閱回退,否則不會發起 LLM 呼叫。 + +| 提供者 | 設定 | 備註 | +|----------|--------|-------| +| **No-op(預設)** | 無需設定 | LLM 驅動的 compress/summarize 被停用。合成 BM25 壓縮 + 召回仍可用。若你以前依賴 Claude 訂閱回退,請見下面的 `AGENTMEMORY_ALLOW_AGENT_SDK`。 | +| Anthropic API | `ANTHROPIC_API_KEY` | 依 token 計費 | +| MiniMax | `MINIMAX_API_KEY` | Anthropic 相容 | +| Gemini | `GEMINI_API_KEY` | 同時啟用嵌入 | +| OpenRouter | `OPENROUTER_API_KEY` | 任意模型 | +| Claude 訂閱回退 | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | 僅按需啟用。會衍生 `@anthropic-ai/claude-agent-sdk` 會話 — 曾導致無限 Stop-hook 遞迴故不再預設。 | + +### 成本感知的模型選擇 + +背景壓縮在每次觀測時執行,模型選擇會顯著影響月支出。擷取的工作負載資料:635 次請求 / 888K tokens / 35 小時活躍使用,基於 2026-05-23 OpenRouter 定價對三個模型評測。 + +| 等級 | 模型 | 輸入 / 1M | 輸出 / 1M | 35 小時擷取工作負載成本 | 備註 | +|------|-------|------------|-------------|---------------------------|-------| +| 推薦 | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | 壓縮 + 摘要品質穩定,比 Sonnet 便宜 ~10×。 | +| 推薦 | `deepseek/deepseek-chat` | $0.27 | $1.10 | ~$0.40 | 略舊但仍勝任僅壓縮工作負載。 | +| 推薦 | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | 若你的會話多為程式碼,程式碼推理能力強。 | +| 高階 | `anthropic/claude-sonnet-4.6` | $3.00 | $15.00 | ~$5.02 | 品質高但對長期背景工作來說成本昂貴。 | +| 高階 | `openai/gpt-4o` | $2.50 | $10.00 | ~$4.20 | 與 Sonnet 同檔。 | +| 避免 | `anthropic/claude-opus-4.6` | $15.00 | $75.00 | ~$25+ | 推理級模型;用於壓縮屬於巨額超支。 | + +當 `OPENROUTER_MODEL` 比對高階層模式時,agentmemory 會印出執行階段警告。在做出知情選擇後,設定 `AGENTMEMORY_SUPPRESS_COST_WARNING=1` 來消音。 + +記憶工作的品質-成本權衡:壓縮是品質門檻相對寬鬆的摘要任務(代理重新閱讀摘要,而非使用者)。DeepSeek-V4-Pro / Qwen3-Coder 在該任務上與 Sonnet 誤差極小,而成本約低 10×。把高階層模型留給你直接閱讀的查詢。 + +來源:[OpenRouter Sonnet 4.6 定價](https://openrouter.ai/anthropic/claude-sonnet-4.6/pricing)、[DeepSeek V4 Pro](https://openrouter.ai/deepseek/deepseek-v4-pro)、[DeepSeek 定價說明](https://api-docs.deepseek.com/quick_start/pricing/)。 + +### 多代理記憶(`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`) + +在多個角色共享一台 agentmemory 伺服器的多代理設置中(architect / developer / reviewer / researcher / support-agent),`AGENT_ID` 給每次寫入打上發起角色的標籤。`AGENTMEMORY_AGENT_SCOPE` 控制召回是否依該標籤過濾。 + +```env +TEAM_ID=company +USER_ID=engineering-team +AGENT_ID=architect +AGENTMEMORY_AGENT_SCOPE=isolated # 選填;預設 "shared" +``` + +兩種模式: + +| 模式 | 標記寫入 | 過濾召回 | 何時使用 | +|------|------------|---------------|-------------| +| `shared`(預設) | 是 | 否 | 跨代理共享上下文且帶稽核軌跡。Architect 能看到 developer 記下了什麼,但每條記錄都標明發言者。 | +| `isolated` | 是 | 是 | 嚴格隔離。Architect 永遠不會看到 developer 的觀測/記憶/會話。 | + +設定 `AGENT_ID` 後會被標記的內容:`Session.agentId`、`RawObservation.agentId`、`CompressedObservation.agentId`、`Memory.agentId`。角色從 `api::session::start` → `mem::observe` → `mem::compress` → KV 流轉。 + +isolated 模式下被過濾的內容:`mem::smart-search`、`/agentmemory/memories`、`/agentmemory/observations`、`/agentmemory/sessions`。每個端點都接受 `?agentId=` 來依請求覆寫,以及 `?agentId=*` 來完全跳過環境範圍。`/memories` 還接受 `?includeOrphans=true` 來浮現 `agentId` 為 undefined 的 pre-AGENT_ID 記憶。 + +SDK / REST 層的依呼叫覆寫:每個變更端點(`/session/start`、`/remember`)都接受請求體中的 `agentId` 欄位,勝過環境變數。對於在一個伺服器行程中路由多角色的執行階段很有用。 + +當 `AGENT_ID` 未設定時,記憶保持無範圍(舊行為,無標籤、無過濾)。 + +### 連接埠 + +agentmemory + iii-engine 預設繫結四個連接埠。若重啟失敗並顯示 `port in use`,這張表告訴你該查找什麼行程。 + +| 連接埠 | 行程 | 用途 | 環境覆寫 | +|------|---------|---------|--------------| +| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` | +| `3112` | iii-engine | 內部串流 worker(由 agentmemory + 檢視器消費) | `III_STREAMS_PORT` | +| `3113` | agentmemory | 即時檢視器(`http://localhost:3113`) | `AGENTMEMORY_VIEWER_PORT` | +| `49134` | iii-engine | WebSocket — workers 在此註冊,OTel 遙測在此流過 | `III_ENGINE_URL`(完整 URL,預設 `ws://localhost:49134`) | + +當機後連接埠仍被佔用時的陳舊行程清理: + +```bash +# macOS / Linux — 找出每個連接埠上的行程並 kill 掉 +lsof -i :3111,3112,3113,49134 +pkill -f agentmemory || true +pkill -f 'iii ' || true + +# Windows +netstat -ano | findstr ":3111 :3112 :3113 :49134" +taskkill /F /PID +``` + +`agentmemory stop` 在優雅關閉時乾淨地回收 worker 和 engine pidfile。上述手動清理僅針對當機後兩個 pidfile 都未留下的情況。 + +### 設定檔 + +把 agentmemory 執行階段設定放到 `~/.agentmemory/.env`,而非在每個 shell 中 export 變數。若檢視器顯示像 `export ANTHROPIC_API_KEY=...` 這樣的設定提示,把它複製到該檔案作為 `ANTHROPIC_API_KEY=...`(去掉 `export` 前綴),然後重啟 agentmemory。 + +行程環境變數仍然有效,優先序高於檔案中的值。 + +在 Windows 上,同一檔案位於 `%USERPROFILE%\.agentmemory\.env`: + +```powershell +New-Item -ItemType Directory -Force $HOME\.agentmemory +notepad $HOME\.agentmemory\.env +``` + +要用 Claude Code Pro/Max 訂閱而非 API key 測試,明確啟用: + +```env +AGENTMEMORY_ALLOW_AGENT_SDK=true +AGENTMEMORY_AUTO_COMPRESS=true +``` + +若想開啟圖或整合特性,在同一檔案中打開: + +```env +GRAPH_EXTRACTION_ENABLED=true +CONSOLIDATION_ENABLED=true +``` + +### 環境變數 + +建立 `~/.agentmemory/.env`: + +```env +# LLM provider (pick one — default is the no-op provider: no LLM calls) +# ANTHROPIC_API_KEY=sk-ant-... +# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure +# GEMINI_API_KEY=... +# OPENROUTER_API_KEY=... +# MINIMAX_API_KEY=... +# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the +# # OpenAI LLM provider (here) AND the OpenAI +# # embedding provider (further below). Set +# # OPENAI_API_KEY_FOR_LLM=false to scope it +# # to embeddings only. +# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies +# # Azure: https://.openai.azure.com/openai/deployments/ +# # Auto-detected from `.openai.azure.com` hostname; uses +# # api-key header + api-version query param. +# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param +# OPENAI_MODEL=gpt-4o-mini # Optional: default model +# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch +# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS +# # for back-compat with v0.9.17. New configs should +# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below. +# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none" +# # Honored only by OpenAI's reasoning models (o1, o3, +# # gpt-*-reasoning) and providers that mirror that +# # schema (Ollama Cloud thinking models). Standard +# # chat models reject this field with 400. Set to +# # "none" for thinking models that return reasoning +# # but no content. +# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection +# # for LLM (useful if you only want OpenAI for embeddings) +# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk); +# leave OFF unless you understand the Stop-hook recursion risk: +# AGENTMEMORY_ALLOW_AGENT_SDK=true + +# Embedding provider (auto-detected, or override) +# EMBEDDING_PROVIDER=local +# VOYAGE_API_KEY=... +# OPENAI_API_KEY=sk-... +# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table + +# Outbound LLM / embedding timeout +# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every + # raw-fetch provider (Gemini, OpenRouter, MiniMax, + # OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter + # embedding). For the OpenAI LLM path, the + # OpenAI-scoped OPENAI_TIMEOUT_MS alias (above) + # takes precedence when set, for back-compat + # with v0.9.17. + # Increase for slow networks or large batch calls; + # decrease to fail-fast on rate-limit holds. + +# Search tuning +# BM25_WEIGHT=0.4 +# VECTOR_WEIGHT=0.6 +# TOKEN_BUDGET=2000 + +# Auth +# AGENTMEMORY_SECRET=your-secret + +# Ports (defaults: 3111 API, 3113 viewer) +# III_REST_PORT=3111 + +# Features +# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. When on, + # every PostToolUse hook calls your + # LLM provider to compress the + # observation — expect significant + # token spend on active sessions. +# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned + # memory slots — persona, + # user_preferences, tool_guidelines, + # project_context, guidance, + # pending_items, session_patterns, + # self_notes. Size-limited; agent + # edits via memory_slot_* tools. + # Pinned slots addressable for + # SessionStart injection. +# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on. + # Stop hook fires mem::slot-reflect: + # scans recent observations, auto- + # appends TODOs to pending_items, + # counts patterns in + # session_patterns, records touched + # files in project_context. Fire- + # and-forget; does not block. +# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on: + # - SessionStart may inject ~1-2K + # chars of project context into + # the first turn of each session + # (this is what actually reaches + # the model — Claude Code treats + # SessionStart stdout as context) + # - PreToolUse fires /agentmemory/enrich + # on every file-touching tool call + # (resource cleanup, not a token + # fix — PreToolUse stdout is debug + # log only per Claude Code docs) + # Observations are still captured via + # PostToolUse regardless of this flag. +# GRAPH_EXTRACTION_ENABLED=false +# CONSOLIDATION_ENABLED=true +# LESSON_DECAY_ENABLED=true +# OBSIDIAN_AUTO_EXPORT=false +# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory +# CLAUDE_MEMORY_BRIDGE=false +# SNAPSHOT_ENABLED=false + +# Team +# TEAM_ID= +# USER_ID= +# TEAM_MODE=private + +# Tool visibility: "core" (8 tools) or "all" (51 tools) +# AGENTMEMORY_TOOLS=core +``` + +--- + +

API

+ +連接埠 `3111` 上的 124 個端點。REST API 預設繫結 `127.0.0.1`。當 `AGENTMEMORY_SECRET` 已設定時,受保護端點需要 `Authorization: Bearer `,網狀同步端點要求兩端都設定 `AGENTMEMORY_SECRET`。 + +
+關鍵端點 + +| 方法 | 路徑 | 描述 | +|--------|------|-------------| +| `GET` | `/agentmemory/health` | 健康檢查(始終公開) | +| `POST` | `/agentmemory/session/start` | 開始會話 + 取得上下文 | +| `POST` | `/agentmemory/session/end` | 結束會話 | +| `POST` | `/agentmemory/observe` | 擷取觀測 | +| `POST` | `/agentmemory/smart-search` | 混合搜尋 | +| `POST` | `/agentmemory/context` | 產生上下文 | +| `POST` | `/agentmemory/remember` | 儲存到長期記憶 | +| `POST` | `/agentmemory/forget` | 刪除觀測 | +| `POST` | `/agentmemory/enrich` | 檔案上下文 + 記憶 + bugs | +| `GET` | `/agentmemory/profile` | 專案檔案 | +| `GET` | `/agentmemory/export` | 匯出所有資料 | +| `POST` | `/agentmemory/import` | 從 JSON 匯入 | +| `POST` | `/agentmemory/graph/query` | 知識圖譜查詢 | +| `POST` | `/agentmemory/team/share` | 與團隊共享 | +| `GET` | `/agentmemory/audit` | 稽核軌跡 | + +完整端點列表:[`src/triggers/api.ts`](../src/triggers/api.ts) + +
+ +--- + +

Development

+ +```bash +npm run dev # 熱重新載入 +npm run build # 生產建置 +npm test # 950+ 測試 +npm run test:integration # API 測試(需要服務執行中) +``` + +**先決條件:** Node.js >= 20、[iii-engine](https://iii.dev/docs) 或 Docker + +

License

+ +[Apache-2.0](../LICENSE) diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..f77f371 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,92 @@ +# Roadmap + +This is agentmemory's public 12-month roadmap. It covers Q2 2026 through Q1 2027. The roadmap is the source of truth for where the project is heading; anything significant that lands in main should trace back to an item here or a ratified issue. + +Items shift as evidence changes. Each quarter we publish a short retrospective on what landed, what slipped, and why — attached to the release notes. + +## How to read this + +- **Shipped** — landed in main and tagged in a release. +- **Active** — in-flight, has an open PR or issue owner. +- **Planned** — accepted scope for the quarter, not started. +- **Candidate** — under consideration, may defer. + +Anything not on this list that a contributor wants to pursue is welcome — open an issue labeled `roadmap` and it gets triaged against the quarterly theme. + +## Themes + +- **Q2 2026 — Depth.** Multimodal memory, more connectors, close out backlog from the v0.9 cycle. +- **Q3 2026 — Breadth.** Hook parity across more agents, community expansion, OpenSSF best-practices alignment. +- **Q4 2026 — Trust.** Enterprise features — SSO, audit export, RBAC, long-running deployment story. +- **Q1 2027 — v1.0.** Stability, LTS branch, semver freeze on the REST + MCP surface. + +## Q2 2026 — Depth (April – June) + +### Shipped so far in this quarter +- [x] iii console docs in README with vendored screenshots (#157) +- [x] Health severity gated on RSS floor (#158 / PR #160) +- [x] Standalone MCP proxies to the running server (#159 / PR #161) +- [x] Audit coverage for `mem::forget` + audit policy doc (#125 / PR #162) +- [x] `@agentmemory/fs-watcher` filesystem connector (#62 / PR #163) +- [x] Next.js website on Vercel (PR #164) +- [x] CI publishes all three npm packages on release (PR #166) + +### Active +- [ ] **Multimodal memory** — content-addressed image store, vision-prompt compression, disk quota + refcount on eviction (#64, PR #111) +- [ ] **Governance baseline** — this file, plus `GOVERNANCE.md`, `CONTRIBUTING.md`, `MAINTAINERS.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md` + +### Planned +- [ ] **GitHub connector** (`@agentmemory/github-watcher`) — sync issues, PRs, discussions as observations. Shares the `POST /agentmemory/observe` wire format with the filesystem connector. +- [x] **OpenCode hook bus** (#156) — wired 22 hooks covering all 12 Claude Code hook types: session lifecycle (create/idle/status/compacted/update/diff/delete/error), messages & prompts (chat.message, message.updated user+assistant, message.removed), tool capture (before + rich ToolPart lifecycle in message.part.updated), memory injection (context + enrich via system.transform), part tracking (subtask, step-finish, reasoning, file, patch, compaction, agent, retry), file enrichment pipeline (stash via tool.execute.before + file.edited + file parts), permissions (updated + replied), task tracking (todo.updated w/ priority), commands (command.executed), config & model tracking (config + chat.params). Plus 2 slash commands (recall/remember). See `plugin/opencode/`. +- [ ] **Session replay UI** in the real-time viewer — scrub the timeline, inspect per-observation payloads. +- [ ] **Benchmark harness in CI** — keep the 95.2% R@5 number honest across releases by re-running LongMemEval-S on every minor tag. + +## Q3 2026 — Breadth (July – September) + +### Planned +- [ ] **Additional maintainer onboarding** — at least one Maintainer from a different organization added via the process in `GOVERNANCE.md`. This is a prerequisite for advancing past the foundation's Growth Stage. +- [ ] **Slack / Discord connector** — third source in the connector family. +- [ ] **OpenSSF Scorecard** — enroll, reach a Silver-equivalent score. Badged in the README. +- [ ] **Hermes integration hardening** — reach parity with the OpenClaw plugin surface (session lifecycle + tool-use hooks). +- [ ] **Knowledge graph query language** — small DSL on top of `/agentmemory/graph` for multi-hop questions. +- [ ] **First conference talk** — submit to KubeCon / LlamaCon / similar. + +### Candidate +- Cross-agent shared memory namespace. Currently each agent installs its own instance. This would let a Claude Code session and a Cursor session recall each other's observations via a shared mesh node. + +## Q4 2026 — Trust (October – December) + +### Planned +- [ ] **SSO gateway** — accept OIDC in front of the REST surface for team deployments. +- [ ] **Audit log export** — streamable tail to S3 / Loki / stdout for compliance pipelines. +- [ ] **RBAC on memory scope** — `project:read`, `project:write`, `governance:delete` role set. +- [ ] **Long-running deployment guide** — first-class Docker, systemd unit, and launchd plist. +- [ ] **Performance SLO** — publish p50/p95 recall latency targets, enforce via the benchmark harness. +- [ ] **Security audit** — external review of the REST surface + mesh-sync path. Fund through LF if foundation acceptance lands before end of quarter. + +### Candidate +- Agent-to-agent memory handoff protocol — standardize what one agent can inherit from another's memory, complementing MCP. + +## Q1 2027 — v1.0 (January – March) + +### Planned +- [ ] **REST + MCP surface freeze.** Any break requires a major-version tag per `GOVERNANCE.md`. +- [ ] **LTS branch `v1.x`** — 12-month security-fix commitment. +- [ ] **v1.0 release** — full documentation pass, all roadmap items from prior quarters either shipped or formally deferred. +- [ ] **Foundation membership** — Growth → Impact stage application if adoption + maintainer diversity metrics justify. + +### Candidate +- Hosted reference instance for the community to benchmark against. +- Reference implementation in a second language (Rust or Go) for the MCP server — would expand the set of runtimes that can host agentmemory. + +## Out of scope + +For transparency, these are deliberately *not* on the roadmap: + +- A cloud-hosted agentmemory SaaS. +- Billing, subscription tiers, commercial licensing beyond Apache-2.0. +- Agent frameworks themselves — agentmemory is a dependency, not a replacement for the agent runtime. + +## Feedback + +Anything on this list you disagree with, or think should move up / down — open an issue tagged `roadmap`. Quarterly themes are revisited with every quarterly retrospective. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..a24b6e9 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,85 @@ +# Security Policy + +## Reporting a vulnerability + +**Do not open a public GitHub issue for a suspected vulnerability.** + +Use one of: + +- **GitHub Security Advisories (preferred)** — private report form at . GitHub routes the report to the Maintainers, assigns a GHSA identifier, and keeps you in a private thread until the fix ships. All sensitive details (stack traces, credentials, exploit payloads) stay end-to-end within GitHub's security infrastructure — use this channel whenever possible. +- **Encrypted email (fallback)** — if GitHub is unavailable or the issue cannot be described in the GHSA form, send an encrypted message to `ghumare64@gmail.com` with subject `agentmemory security`. Encrypt with the Maintainer public keys published at (PGP) and (SSH for verification); attach your own public key so we can reply encrypted. Plaintext email is accepted only as a last resort — prefer GHSA. + +Include, at minimum: + +- agentmemory version (`npm view @agentmemory/agentmemory version` against your install). +- The affected surface — REST endpoint, MCP tool, hook, CLI flag, or filesystem layout. +- A minimal reproduction — prefer one curl invocation or one MCP tool call plus the environment state required. +- Impact, in your own words. + +## What we do with it + +1. **Acknowledge** within 72 hours (target: 24). +2. **Triage** — confirm reproduction, assign a severity using CVSS 3.1, and give you a rough timeline. +3. **Fix** in a private branch. Draft a GitHub Security Advisory with the patched version, CWE, CVSS vector, affected versions, and attribution to you (unless you prefer anonymity). +4. **Coordinate disclosure** — we agree a disclosure date with you. Default window is 30 days from acknowledgment for straightforward vulnerabilities, up to 90 days for ones that need a deep refactor. +5. **Publish** — release the patched version on npm, publish the advisory, update `CHANGELOG.md` under a `### Security` section for the release, notify downstream scanners. + +## Supported versions + +| Version | Security fixes? | +|-|-| +| Latest minor (currently `0.9.x`) | Yes | +| Previous minor (currently `0.8.x`) | Critical / High severity only, for 90 days after a new minor is released | +| Older | No | + +At v1.0 this policy switches to a stated LTS window per the roadmap. + +## Scope + +In scope: + +- The `@agentmemory/agentmemory` server (REST + MCP surface, hook handlers, state store). +- The `@agentmemory/mcp` standalone MCP server. +- The `@agentmemory/fs-watcher` connector. +- First-party integrations under `integrations/` (`hermes/`, `openclaw/`, `filesystem-watcher/`). +- The Claude Code plugin under `plugin/`. + +Out of scope: + +- Third-party MCP clients consuming agentmemory — report to those projects. +- `iii-sdk` upstream — report to the iii project. +- The marketing site under `website/` unless the issue affects user security (XSS against visitors, credential leak in build output). + +## Supply-chain stance + +agentmemory ships pre-built artifacts in the npm tarball — `dist/` is bundled at publish time, not built from `node_modules` at install time. The package's runtime dependency tree is intentionally small (6 production deps: `@anthropic-ai/sdk`, `@anthropic-ai/claude-agent-sdk`, `@clack/prompts`, `dotenv`, `iii-sdk`, `zod`) plus an optional set guarded behind `optionalDependencies` for embeddings. + +**No lockfile is committed** (#540). The reasoning: + +- The npm tarball ships pre-built `dist/` — fresh installs don't compile from source, so no lockfile is consulted at the user's install step. +- The lockfile only affects contributor-local builds. Pinning it would shift the supply-chain attack surface from "what npm resolves today" to "what was resolved when the lockfile was last regenerated," which is a different tradeoff, not strictly better. +- We use SemVer ranges (`^x.y.z`) on the published deps so security patches reach users without a re-release. + +If you ship agentmemory inside a hardened pipeline that requires reproducible installs, the recommended path is: + +1. `npm install --legacy-peer-deps` against the published tarball in a controlled environment. +2. `npm shrinkwrap` to produce a versioned `npm-shrinkwrap.json` that travels with your deployment. +3. Audit `node_modules/` once at that point and republish internally. + +CI runs `npm install --package-lock-only --legacy-peer-deps --no-audit --no-fund` then `npm ci` against that generated lockfile, so every test job builds against a fully resolved tree. The lockfile is regenerated on each CI run rather than checked in, which keeps the published tarball aligned with whatever SemVer-compatible patch level was current at release time. + +Supply-chain monitoring we already do: + +- Dependabot opens PRs for every minor/patch bump on the production dep list (visible in the open PRs). +- Every PR runs the full test suite on ubuntu-latest + macos-latest, Node 20 + 22, before any merge. +- `optionalDependencies` (`@xenova/transformers`, `onnxruntime-node`, etc.) are guarded by `try { await import("...") } catch` so a missing or compromised optional dep cannot break the core runtime path. + +If you find a malicious package in our dep tree, file via the GHSA flow at the top of this document — that's the fastest path to a fixed release on npm. + +## Past advisories + +See the [`.github/security-advisories/`](./.github/security-advisories) directory for advisory drafts. Published advisories (with assigned GHSA IDs) live at . + +## Safe harbor + +Good-faith research, reported privately, does not get legal heat from the project. Research targeting third-party deployments of agentmemory is not covered — that's between you and the deployer. diff --git a/assets/agents/pi.svg b/assets/agents/pi.svg new file mode 100644 index 0000000..3d40fc0 --- /dev/null +++ b/assets/agents/pi.svg @@ -0,0 +1,20 @@ + + + + + diff --git a/assets/banner.png b/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..da15c93b9a22038833a9b28000cb999c3d76daea GIT binary patch literal 380039 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%0A;@wLo=KvOrab6XCtJfDR; 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πC);VU7&m7-KU;u!5k2mjpwDEFh68 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 z z*{FQrg+JOL2Y;O6g`sG~rg{O}K7;g`!s>&B(~*chz=0RMCm}7!MfXP~AUx(G6xK0~?J@M@YY6jfVk)8N5h` zEv!L{QuAX;bb0P)tPzUxF{2&Nn1*u0!3=DS&3KlRT50mZ3~M~&8Q-|ZDN-?RZA`-& z)?i)F=JAYq6k{CBc!w?QI1m3V^GMz1D26@K!Hje~!y3d!_$i>xi&J!i8sT_`Il{4w zfS=+S=p>J0ixJ3nP~3GApGP|+&JSjEgC7)s$2bx$jBt$O6bXOwU}h6KY_P5!*Ql#M zj$y~#VS^v`hAR%wrd(s2!toD@`{NrQ z&&M(vesiszBGox}b=>7X_w~RUyY}1eT|E0v!PH}3ewW9i;5kqcWFz2tO{B zEXvDX_KyM?v2u)=XFdNbT%9^pZYl36lI%)RVv0<;a+|Gg_39m0!B&f=6q0vvt5GhK zNsB~+Ej(UcHX&h;r>;U0;^#gkbdgD-Tt#>Gx8METnV&rCN6)+~z}6wWM?LgEj|A0Y z9{x`ddEk-$`#%Bf3jW)_d{#6WaE>k628nzeeG z4o*l1aM%V$bi_u4#7C6GNTkF`w8TnmL~~#Z_Tj`%^u$jD#ZVN*Q6$AuG{sXy#Z*+q zRb<6hbj4TfM9%Aw>qX{5$#w8m@1#%$EaZREyo^u})l$8Z$KaU{obG{$OAeIFx_nEz3=+Gf z47}9KzT``}{L8+aOSlY7!8A<6EX>2S%fwX7#&k@@WK745%*VV-%B)Pw#7w``%+1Wp z%+$-joJ`CN%*4D1Y^jDX3y_|qh&8+mv%HXOGYkl!i`m4C+N6sYvCZ6^P1&%`+w9B6 zuoeH{v=t@{PQe5a?O?)eDbC;&&bn+)#e7c9U{1JWogeL{7`R&gvvi?a?OmbjG9^o-By{7nJ1 z&$>*`0o6~zdA$TBQ1GPB1dYoWyiW!dP>k4zuAG~H7=SAr%Uf(s@1jk6a6t?qj2>x+ z!pMhosI+%D(H&_AZ)t}X9gKHK2g6X&!idqrpivv;yBU?y!9YvGxQBM=QP_(wKjqOTjF2#$hb}e2J~Kf}T~tXe3_DHKD_zq+rBo4>5*-xMOQlmi4bwpNQypzp zJ^fQh)lwTZ)GZCwI_`;B=F4u%IZ@EEsVOC|WG!cCV{nNQ; z9nl^v(+p%*Y=tsy-PUAlL23xR& zYcR`{T}?zROYbUGGI?1AfiBpz*`!rk*g)E)b=uu~hkRap-$m|NqDdiaNz zeOkl#4#FUqv8{{t^NgmoSp*~7wPoA3b=$XvTe2Mtj8IwxOOCGvTarD^lhsh4B@nC) z0IlWPCy|HzFxBTp_1wsn5?`$b zldW1=yINz7h`WEl-r*(Q z;x*pmMP8(ozU}bUoZZ=;wc4L0%K$*ukBY4}r~^5WgF4{e?)Bd91>f)$-|;2i@-^S{ zC135$-a3c_q0-*>h2Qv<-}$BA`nBKt#ozqZU+&#r{q^7f1>gV{-~lG!0yf|S*55ej zUIb>~26kXMaNh@(;0XrcuL7a#2*IeGTD~1t)0JMptzPf)2R% zYvL%D;vxP8C7$9d#$p%71_=ux0Exb+-P_Vt&A&z6tX*Byi<$qWOx`sHUKZUHxq#z1 z1`49I2XjzkHpb)Kt(`pPPxj<|7>BW|5H11bQ%2=fo(U9HXJLbzb# zSlgnF+ivz|x~-jXa4x%L+HW@JbG{Q+?u@Wi4|I0tx6Oxl=mu9p+tnav_R}6n?oI!A zu6Ool&k$yPuIJTgjeqv%MOo%YZeFVG+vp`@YBuA~$u0kEUbAv07;ZM`jK+*`9_N8Z z4UGnAvQ=lgCFs-$>5z`+d1efgW@oy~XVw^#em?1L7L0%{+c=qNZ$@ZlP7b|g=nfuZ zOD<#8m1witco>2rpcQSRt_W(>7O44HoFoHmD6hUvuUXR)2zm9EXK z{^yjwt+2l8yd`OT#s-1@D5}=YmcHAS25Y5eYO-G2ntsij4!^3dYpZr^ye8Y7R%pE? z-G=tyhrS4dp!)=KCl$oyv@$& zkuKXWWbNp~Y`VpkBjL?ger?otTeBvQA$$_q4io>rcImeMY|w^|+2+mL#E37Bz6g1e zu{ILh9$UQ*Y~>EY*uIe<{E+JI!Errp=N@iWc^ok|2q3F_+wfmsQb0=fb1ZOO($u6-Oz) z*fYIZVTsT4luyC%o3`n_AQgIGi*7-b)58j6VHrWWyh8DC@QW3;5R_9PaSSKy2Wf|e zreuc}YKSK48HMa!MG#@AhITlHV)%z|5QhI46^3pIhs9d0eb@$bz=nC~hBKdU{o8T5 z<>vhIELP@nGw~o(E?5g>le^b{L0GFY|mD^M2!ntT|+0s0Mzpnr6R;eOLxE ze}`vSQfx56ad3=hIEH)Nap;B)RTt)FF9vO(hj8eHKwtB4(1vkHhQo>wAAW~$pt*M_ zhGHU@ zhfk1$U$6y<!&d2L zsDnZf9X&XPr4NOumwH;?5q`i1MmVKksDm4WggDqFVBm)pvW83Gg+%x`K0J(UEAjU@ zaSJtvI)DUhfP`-Ngd#hIP&kG@NCakx1vNN^ScnBsD+H~AghuEFh#7>DX@FB#A5+_oeXm8)RaQhz4^B3z( z95u`KKzdiGjhaHILKVA23r(VBmtw_PW)4yzjTLwD?CBF?K6BdgarE~K(y63s2EB_z zM%k%4p_aWN=`Y5 z>9EZk3TZyujIv0}k|7Khh6KV*IZ+X9JSpG)Qvq50%bEpq`v)X^_{ z{5RJ_`AlPrE!SLB#P82`^5eD$dKhVwfjz5E(;*W! zm}Q+|W?8F|A(R=dk8Kv6Ll`kK4nLvraf&skKmtiOgA8I#I*stdpfY~!8VWCaq~lMq zStb%nA`}`&gY;odDAtSv$vx+_ z$si<_>T&9|VV!cxGms=A5K?85+ZKTariv><3i4vhH~$QPP=xQQ z=5+H;I{(b`&OPaja}U;y&NELpB*9K{LI)6L!O z{3G}~?{Gs8J?WT3BHfv*-i_PNk26m6{Fqa=<>@d_d)3AN6!C${=Tpta8E^bg#~)J| zvWEX0njGSYKr*z?LiPc`iy$OPR@;YWT9pq3f^JCaD;LZR__=&Y${zRN$31ZOyq674 zg9+gWQT8#k2PRH!16ts!GzXo!&4q<6v|s@X=(m4hkcK2wT%;o7!hcY(Zu_{P-!!8c zxm55~u@c>79D>BmkS-#PL7d+xh!77R4tE~3TEBRBkbV&*A8te34S9mRh`fUzQ*5E? zoK_FXO(uhM=@$lnxDm;@QG^BbVm>k`!7xgMKzwLlf~uhljA@Kx60#ov@HeuO(dA_Q zTOuTb^bZH}aV<)dU=lfk5CBzDeL)$D5^eRhR1qzcoqX8hiWtevMY5HZ38gC=(?tKK z743mwJS9ZN2$9HK?H#4e%q~NROP=`gKTcCpKAyoK2SMnN_ERLuI@C!1r7V`BGukkX z6hT$!j@FZwC{0K)Jru}(&aZxm6sR;mbeIus^h0*phcD4N$)mk=Rt;S#tBQ&? ziN=$2zBG?WmHHEmE|DMp@CQFwYAdT^^`o-d$5qQ@&XOWEc~X6tN=J%NiJ1R&p)qY~ z#RN&nngSGL62VaZa@w?=w(l`lorc)@>Pl=%^^#4M%vn)sLX#q~BmQ_sZituIiBOeu z9l^vEqyPm}$;y>>>BAJ7um$o#rX#f2LKT)^3lgcdv7DhNVke8%a~)QwvfU&;tC^q$ zHRwTx^w>@BDzXjf6+|i#tjhS1gf=um3ddkfED5Vr!!oumqfFIp&&1T~)+ICf7(^1( zpxI;mC%Y5Lp<@=}%d7qJaM)l004h+71C3Ia6AS8fS*aQQHjN*#@E8lyaUS;C_Z>k1 zfB`_k+SXe3wXjW~c^#Ejt+w;FZ*|`^X!=`3CQ`V0-Csc+1EP^lz#RXB0Kg8+F|_Co z^{muoEEoIbj|eMnv9SuN4q5eh2^r*aUzajAMi}PDo|vq7Sg{IIAjSauO84 zfx-B4#&W3}S2Gw^JlX@RRSxSsGDtgrjDrOQn1St5bydI3(5hGf@}5K*OR{b7kBE(R^0G2?dlLkbOeG&34d0cMmJ)RjeuKFaY5V%&ll)zC*h{N@jH z2*VaVC;$h3fz^K`!xp)@hd;t0jACde6tUoR;hv%5Xcwax*R%hiKc-QPQo(Jd~^a2>nbCBO1hy zYz&CH0DuOtKn)d8!+FHn;=&%)G9Ws|4Q6ly7BIn#`(}%%Ei(^B$bk$uh{aW75ricS zVg^ZA?LWd$0E(jl0%wpcjc@%jWe|c8k01mw@S%@?_yZC#-~bs|U;qvj;~%_8LJz7? z0>jjy1W8E346eX}5TGFjB?tl&D$s;?gdqrRC;=ywn$<3+kV6}KpoayYoGp9aG3Ng>uldbqKC9*}I7jTE%-%K= zxC=M*a2cu7fKh_jD*z6)-uJElp$}y|f)bQ?1TplXGiDq=3H~^I2#OI776c#;#V~g$ zDiDA+gaH5?*n$~s0f7LpU735@^9&#)Nop_J}vhCl298SKFxz`-DF z4n##B8!&>S^;`ke0UGSwo+twc1V9tK0SA}?EtJ3#5?~380~RPi1zcMQ z6yQB{K>z!vz!6>MM$G8ksi*~uiK^+i>zu$5V{3Kv>bTJgg--~l3R z0wN3}F&3jS9-}dy!XAK$@>PE!%el5T_@3nU>6JVV9}*2Ya& z$JGTt#KAL!3W#h(3K^jhMOez|6chx&1jPRWGjM{B0U1C62ZVt2i6cDP*fh-}1jK?h;9ZLO12D*65TwHl06;7hLkKiL0jR+% z(inQtMLp<)IAlXMs6#fCgF`~30sQ|_4+H=QJcAm%p@CeLLI%MORDl^h1J@M8BPPL9 z0Rt0202YL131EW~j3T#$fVsVcORm;c^?_rOfj?BiPevw1*_%UvNKqC*9JD2$o!~h2 zqBTGQJ!ll0Kms?c!Z^@FFYtjd(8DSeLU$H|F6e?Dq(U0C13w%BH5}wiZKXq0!!r5S z4{{hzIb2(Ih~PoM1nh|(IOZxE6k9MvR_0z@*2OfG4FNU))16Bs?IkmY4v0(vZ~8-G z-at4gUjV29FT~!S?15uuL1da&k^v3VF`Yi>1FO}60vLcF+MhMV!5}7q=IjA8`~nM9 zK_XnjDVPI49D{Ev!H=|>{XPGK2(rL9R6ziY;W+qa4*0`7Hh^(jLn1%|1Q z08mbp2kw${?xY+@C!ZCSbshpeNZ}wH!YSy&9b|+Ytb!aA!y4cLHQ)grT*DzC0v@aa ziCosW$QFGjgrFr{eim9are30jn9A^jHn86x#X`>b;K3T;f+666E+9glerJ_grF^1POdZoh zRKqWL>{r@VSdPp<=~T&@tUoLRrgVe@iQ^MmlQVj|d# zIhcdCh1oc`<~}@wHSEnkSi>)9!#8xpH(-P9gu^eO3agpJFKoj&V1qe)Lk@~*t$dB z*L=-+IL+ZWj^8+r$xRU>gAfT5GPGe(9O0r+Mug;0kR5668Q+pgHAf38NxvRKJABWk zg+n-S11qy~Mufxnz;Y^^11x{fKODkUCa6>$DncZxSJu@N|L!%e9$DIoM)8+hE-yqi z?>=IT0FHv+(^x_FB!rZPLb~@qSS)`ZA6Y*;js9*Vp75AB2G%?136w0#U42 zH*5bhH^bDw)ma^D^ENx~nD&u8kMbE)C(Kf_nsV+xR1Y2;0zxOWLN7E!H}oOkK|9bx zKcAH^|3g>O6>#~4HAb;<9W!0XaA~R1HEl5z#--J8RWA*Q5}7d%*>N_vbTF;-E@EH$ z&a_hUEUe@XYBHJCc+(QmS%NUltQ>?W4>dTi^gx?cJ`6EaGj&8$&r>(`5Jxrj97H_# zvJ#sWH84mMACg8pDu3o{&CrhKAkYHs!;c)!T!_%+k~H(0v^G!rPUNI+YqNiIy`l2M^9_Fb~{9LIt=kUP|q1(wNh0yHAtgZ z_ryj&sz>jGp{Pdfi~~@mLpT(}Gf)Fi%|kkOAC@{lDzzt9dgEf>lPzh;yU-KRBB4f)| zWUorD(86kU114w#Q1!5TjxaN1_dJZl*HC!Al@T*g1MF;C{I-KN(C<7T@Hq4Wazhkq z=Nm6r!%`Q6LDGXZJVQ80byH*UZAT9`>vmE3a-eBgjJAcy3OAbO+c=zpN%sH3sa%XL zTmq^wL$RGgERZ!YxpgzgWk)Q7EeJzcV8SwlMK7E}ON_8B@YX2^gO`88{1!tj(84iT z8#9E0Fx*yrzr(>8FeK>gHzdU|&;lmxE=zy~p4h_S2%lmL5k2o$8u#>}2Raloo~t~B zmiR+2V1h7ULox7zlQYAZV*)Mo!nj>bDD;AngKsF%!kGWUsUWzK|3Wc@#W9RUi7ymt z?*lKG`h*uk3ogSm@Io(812-@^GaLghgo7^NLPXnmHD8yXIb*#3!!zt|!u2>?{CHSD z#s>8Qmh32GLR85^FryKT`)r|*a9ZlLN9#BDRlq&o4Dte@Peje z$~bWOsT2byz~C>WJ4~O|8t=n5SQ}WlgzL>jC{P2I&+jQ+{6bGXRAEg9+lV`Y+=Zow!ZBRA zmp{X&*Mh3yi#gB&EzIvYtjGMOdoe`#G1v)|PbWu#(_;h$;urrzH_*Z__~MM<$y6ly zFYp3j@#tpV8k-O#WWnxGo-^bJVOa%13z@bG|YTEXj?llgK?|A@c#p6 zKn8IOgQONiu)MoAOxwE`!VmCaAf1#CY9{KSwcL#{NfNCj>z3qsHssw|@ivDKHQqz(0o% zAx3l+xX8O$$an9jeGa6-8hZo_O)wAa;3R;`AX&_xl?CO zjz5706*`n?QKLlv?Hdb*0^@}0_gjs0DPgBV@rnhEGp|dVX?-%s*Kupti|1kEsFv%zcl*dby{&RASgR|mJ{?=O-BhW3 zZKGAX@^y2!*qBFD%BxzwdDg-STgHuAxM{zrSud;HCt9kH4& zTLv2{WZ0OZMT{DM@(3i6hRSCjj`G3Do&yv72`mMVicrD{DV$I#riyA1r@a=83qlWn zg0R65KdjKi6OEFKE}{&yM?MlCyb7ZP@ee*CLOWN5~$cHyb(kNOFR%k1ab0`Lk_h}6Da72+D9)0_t}S@ zIq9kKKsWQ^r$;sUq_DmB;+qd5YA`bhA^jR+tiOvg+Nh(CLUOdvNh!5(DKRU}R8yf; z+>^pM3-okTN_i|0m{X?Vg_dWI`KOp;uz98!Te{)p6l{38Oqpj+p+(YBH{}x8VKrrw zD6Tk?&$eZ2OE%dTi5>M%_(&=#qJi!^D4~TCU2M_+Bo#2yXvx*`LQKm|7sY?(s#e{1 zE7YhPcY*qcpL-7M%E5W?mG3EjN_yv=d+z^n2wpygJy>B0jh(PIXcrFFJ!%Dgs2YL{ z-F81kE4t_s03RK2rJi^yndFmAPC4RFFI~^&mtlTvF4khM+2+M~bc-vAx)N^Zo^K9X zXCs9!+GvQNa}CF%YyOiDf7Yrm+e5kKuj2qd4i{1aiFK%+dR9K_T&Bscxzn=Ib~)#? z*={bjw&8v)>BV%6+c~F2vQ46CFuUfG{Ho^IzeWSx`qxptu7}>RgBsiJ$J;s^^2wcA zoAS#adK>f29hzIQx}O4?bEoi*4x)Xm;bm%#yH)I4!b2Xn>wmsBm~o*TA02YZb${IQ z-tE>Lc*s3}3-q0bhp2S5E-px0M6LfG9AtaM<$Bn}AG*EqmXn8@_wLjF9elKfAD`{w z-8x?MWrZmoYCp4UwqTAzt(=JbM;@j)BYn?DgZ9*AF>%>#2OZ?o*ghK|8URK zOgE^${f%|eo1fM|qLGJfkb@oc;0Hk%LJ^LTgdE&RIKn}_60VSiEp*`vH!=>{yyJy6 zwBZe1NW*q$Lxni>;SYhx6&k*S8bLJT5o;(gYtRshCS+n0p|}!W@IfPL!4~`i=dG*3 zj(Q)lg+IU;Mlp_&jAb(_vP0F&Bo}}e1ZJEng>N1wRoTV>oxyxTB0useE<}s0(Ol2;U znayKOz{I66dx_0oYBQMG^yW6d*-dbc6O_b61Qx-6yzhBgbln!GhnQzblb{7P=s^*R%u8G%p$&EDLm?VbiB1%v45jEr zF?vvoW|X5HRpvrB>QRx3v=PV1ioY`V4?@|(Z-ATRKc)98#4M7gHMQwYahg+|?v$rJ z_32N68q}IT1wqoeVn6?1`j*#CFIo9?>QkW_RjE#us#Ue>Rk4~?t!|a8UG?f$!5UVv zj+LxsHS1Z?npU;0m91@ct5YE+kw_x7bxH;3;oxOHz2a=Ief4W!Y4+EmWy!BXk*j?q zSy#6#6|e6S>|-5bAjnRZvb)<$Wd~~_!5a2j6LhI!+rn5Bc_~f03oK@hmLQ3ob}g*6 zj?h$#TD7qDa2wIJ4*YL9k6%tc@c5%q+!T%edG zx)7U(Jme7(y+wqE+U;)UX2RXFC{Lf?jjVYcqLuY6SG?j~A9{7;-S5~G`s@FYWyzPj>(j4*;VUrjN(8^k1B-vF7?A)!M!^ymoo(oA--jd^z4c`< zeak!E^UfE*B))Hg->YHWm>9eaHZX|aE4u$$n7kl%@q)?AVgajIgW7#?WFrib32S5~ zK`HW2H1aDVuXnx|=5d4fdt?75c*yJpN`)aZSE?m-u~)O?mY6%HEeR#e0t<@1wuIf< z%|=oN8(F=aQr_Lp*}y!5?{2Z2UKHcl!R;k4&qxPo?egr!F?Mf(eav7&3tD-z9rUA5 zOyK?67}0&saitp#>69i~(|SJieP6ujNMG90nKt#NOO0v-M^IpfPW6iYd|y#V(i=u|NA$_hErXUVqK%OKBqW~_Jw_<_16#b}@|Fbc zR<@6US*^W2Iozsk(Bm%Kwqe_CK)aT=!#mNhwXN;f22HiYeaK2%T0!}NODOnC(7yp5 zaDfk;-~~7M!4aNtg)f}p4R`p%As%swPn_ZvxA?^|p76(HoZ}t$c*f~er-sjI;2Zz= z#3O5Oha7d;$K@h|?!jCr&Yb2oxB1O+o^ze=oaa6F`OinF9-y=EsgHq{Troyhmru`u zr$B=o-k^pyOkE9CxBAtwu7-bPo$Foq`q#l8cCnA0>}5Cm+0mYMwXdD+ZFl?I;U0In z&z=A7b+`N7@xJz{@0|>o;M!qV7e7i~5Xt`V10>#I4Qec&8q;w6;~^h;$xoj0mACxm zF`s$OZ=Um=_x$HUA9~S`p7fqpP{#)l&m_>{~;1manJ4<5N~ z{zxqR;U<0zpZLW${_&BYeC02n`OSC!^PwMo=}({f)wlljv7deIZ=d_!_x|_6AAa$V zpZwq7hd+ej$n~MFxJuvmmrG(e4~A~&^|$~1@t=SF@1OtupSjTe&x1UI7w}1+{^1#t zuI2WPiyTN~9>%bI0@@(3WF$}mhhitxEdw=h139n*BZ9E>YFY?nw^(lXV2bc&!*Kt~ z011oaa=e4fzuPHP{O z%>@6@W86>>Td=u)rdfVwHuU91kVO-f1$k^Idy0@b=0iSEae*>%5bLFZVDS}Y(G_X2 z6>ZTcY7rN2adCJt7IU!|XK@#OQ5b_!7mX1Ze{mR(Q5lhu7?ZIWn{gSTks1G~aT=}h z8L`nBwNVkjp}=WBvjD8c=pP0)Og&`d7K^T(ZNqRCUhmSP6VH|#;7>eOK zc;Ok$jU&zSEYT9PJhEn7&=gHkP#P$6K$2_LXA-Nh5>xUL>CqnK!5{x1K?-ak6wH7L zgaH!xU<+sg68ZoOnxGDBp$8yg5SAecpuiubpa~Z86lQ=ClE56QzzimCY#|9^p%BXA4ux|#iL*G3lTX}b zu#$5*tED+@Coa)(BS>-Obnh-t(jioGFZYy6TK@FNf9++VV z)ZiEPVGme97@(js{lOMyAP$mXAFhB3P9Yz#fCXaV8(07o{$U0};S0>*A9z6Y*@M=t;Ma5`10{n+pX^V0V) zk#_1q8&07+{h|>h1+E|qZnOyk^cc>d z1Y%(ZfG-9>PtMf6SKG*0ETIG^(< zpv?lGVlJh#E)&os-w`FV(|Y*Q9~dDP&fp9Dfee!1BYvR@)W9FUU{RTY1u&rxFd-BM zK@QAdQMq&mAfW_=feQL=5cWVAg5Vdvx642fgg>vVIB5iA(mX~v?wO_*_L&;Ql%Z4Z7se<9^cR>7Bcwy zaX}m?PvZk27xMfPWFNVrBF_jcz-S-J0*vfoArZ1(3o>MbuOQttVtw{!fi`F<)&h$$ z7X>9ccgr5w(YO{+F9r2kYQxNgNF=3mh-{;|90ggFC3CpqYpx3vm4%5q0u)`OxrFv? z(Kc=A5LvJB7R&JhiPi|uQBP4S%XFb6t@BS&F#i8m5*DA+WG3W8>WwA6HWX7tZ4ozd z757+~&?AS|Ikk&!Nw7MfRd275Z>N<^O0Fkz0mT-6>N9cN+#MNyEg2tgjcH4vUrX6c-dljzY22mly-NE z51Fvc|-Df?>2g^&|_otan++(i%?}47-bx|fg$*TB{+g9 zc!Djsf-(4lH8_Jgc!NE-gF*O%ML2{>c!d8=xP(KvPuTW<)q)V?!Vs60h5vzXrtq_l z%YZX?admiydANr`hb@){X`Lct3Ahq3cOIYChn0AVnb?P6a4qZ7=MCFU!_>JNC3z=8d#*ED35`gnYhVhLG z&zNJeSdEhyTGos&rmKySf?lkx9xx290+xk|lYPe+XEJ&0d;9E;E@ctiw&l zEGdZUf64e-syJ`acyEyyuWZCk_R$__wjf^^OA`6~#z-&9@0M{nmvwoUdAXN;`Imt? zn4?elY}xn<#%K_uHoDms8sQh}^NUWQ5tsp8a>Ux~fhNHL9GGFAl>r>?IiK-)pY^$)`T3vyIiLZ0par_1 z3HqQ7I-wDIp%uEJ8Tz3eI-((Zq9wYbDf*%MyP2QE|&JFjTnao zbtOJQ5BLBQ7=aI-K^WBF4341>^dJ_5Lze4-9@2py0znW;VY!*Rxt;sDp*y;zd%CH+ zx~==Vu{*o9d%L;2yS@9n!8^Rgd%VfJyv_T((L24FI}+UC8K%L#QIBZS%O5U*5&QuY zAgDd!;ETFqV%`A_z5uBIp%>nu5B8wy8Ua91G=TS}l>1mMoK30QtUWwq8BXC7>fjeH z0TeLd6Ci;ZPPT6DVXObs)fZY}7@%PoP<+Kxyv14k#a%qcVSL7AyvAw##%(;uaeT*h zyvKR`$9+7=fqck?yvT|C$c;S7k$lOOyvdpT$(=mPp?u1t92%e@7uJCrxS<=m;TydC z%fUR%#eB@KbvF268nz$|{$USZ+8>_53?3{W+Mx}qz!u(s40yp!dI1uOp%B!-3}hz{ zLsE|&+#OH(h(9(!@`)X&;Tz0hF92gwltqkK`TSh=()TgbF@4iDz0*1U(>*=ZL4DLk zz0^tl)J;9rQGL}_z13O$)m=T-VSUzRz1C^{)@?o4aedcyz1L}-(!oOHGH$xeff=3w zC0N5Bmf?#w>>2-Al|V{oe6C-}Qap`Mux${oesT;01o*3BKSB{@@Wl;o<5Y zhD9J{Hz}ZoW`@sRusz%Igt@l4b_wMl^39aJ9hDP(D0-FDcXP~X+JyCMgkRTkQMU6O68%r7I18&oYDDuZz+;-)S{^*h3T1c@gUKcJn7dnSp zI;z1IIQ}B6_~WA$kd>?jOHme+Q?n=pdBuM0$=)n?tLZX5X>IDO zKJo`|@&P%n_~94&;1k&46bfM*ejyQJ!I0y{cIJT|o*@-P0s5m~6sEuWrT_Y=AN#F8 z`?-Jny=(^-7?FQdkd9RKCZ_ix`gIdH~l8-&r{F*$<@ z)j9uD%pb>j{&?;2_b#8kj?ZlUyY?@@KLrK?2{r&ogSM5lb;@*n(m&mlQKd8)$?Q<5V*uXQM_q>bOylK5_)4bwci>U6ESV zgKIteyi<=k`n)3!mBLQN);;v_Lr=2GF3W7Q&OQrmw9-yX?L72+gl)FkZp;5|x88mW zZn)x(OK!R5o{Mg}>aNRfyY9XVZ@lu(tF2aOt>xiA^Y9anHTn2cWIpeVla4vhFvAab zrq)EGP8`|Ola7t>Xw<8)G8NP%vrdN|V1aXc)4MkMN7Au8u02+JD@l_tP2eoS*{(~~!@2Gsw-hTHD_}_vDPWa%4 z7moPhiWj~&hf_ZedE}B$PI={)Uyga^_^utY-D-uLmPTREGq!6HU&H?h+ODo0RNL3R zR_olFPgR`0A8vl$eDlsf4}J8~PfvaI)?bf( z_S$dHefO^tyA$m*F^tpgWIscTj)?@IK-$r*4P*eX4=MNTp-V@4{$uOU|Nj2>55WHk zFn|Ocpz^$jzyvCAfedV*10M*%2uhH3o$E*i$9J4}n9p>y_=hzNAr$v9FMji*Rma$Z zEqjP8g&)zH3SUUI;;d|jG!)weZ-~Pj>TriV?4b{T2*i%qgCG02kw?6CK+%y;gBNTM z`eI>?^*u*ztRvyZV#gMNgoGdeNJkgDIF5O=;~)IU$JaixkJtY&j~@VQqZUQ zj&!V}9q)+8JnC_eeC(qi=M_DvSOXjBnTH17p$%+skvPR!;s%TJ#A`@Vgv+xc+_0z> zn$Thov0w%yLUD>vr~wnU(8DQ?p@%^%qYu9b1v9?!hHxw+6#S6Klr}<>V*KF`ir}Rz zdbvwvq+=Z7Fo&Edg3M$pbD7L+rZb-j&1gz9G zXhR?1Kn6}FadaWW$Unx&3|c@Dgj0N<#p3ri*qtzw{s@H}c;SyikU<{osDn9T0f%3N zg%6*ALml|Aj8lYx7R6|UKez&$w8Uo+F5m$me!v5eij@BgF^Phmuun zo5mCtw^B*v9sc-49Bk2!LbPES`=~=ZZ1Dz##z76gD8wbUAPhOQK@YYVggDwUGWEn~ z4nOE?6n>xuk^UeOtboTgR)g5YDt57qZ2-|gF2Af}9}C&YN_Mi8t*m7)i`mR-cC(!A ztY<$9+R%!2w4^QVW~pI~X>=p6jFgU4_R)=Fw1HIo_=OzK(*`vpqEwAkYWei#&WuF$ zAM~Uu{9Jd%eM)6t!YITkiV=&5?jscPV8$T+v5a37Ll?3C5XU8yB#u)EgAp1_qp(&5$sijH{5FnQNZIK;~0oV?u+02>UY2V?XQ3T3*Z0?c)$cMuz?SZ-~=mp!3=J& zgC7jx2upav6i%=?+M!b)?PMR{xYRTDF-}MvBN1;ngF0p858pD;sTzr=QtCNEkV|$>CjVR*BJ)FGc_mt6oRIaj>uZ-m^ zYkA9DJ{oK9reUdIEgeNRS;6=LHb=H|BQD+%j4LT)eb(<|?Oa(scvTOm+_{E(j*1~= zSEcrBgoYvO+sfpjk9%}^(Tr}iqaO|FNHZE}#9G_`=R86jsaWlP>|`-iJNUs6uI{)^ zkzaD>tj5U&an-DDwX0tZ>sZS=fu;(d_`s*c3}Pg>?RbZaGa_m#k~%0Q%qpOf>^P-m z1XnelwX>fM?PyDT+SGnv*mkXvUjKTkqrRtAPp#F<2~myJF1NYQjqY@-dx1^toc=IK zBW!0x+Z_bj`XA}ed$bZ`pc#N$B$$1Vjs#AMl8bdjCN4Nf@c`5;0u5F#4o<_kB|J+OhX&c<0>!Upa)C< z>>Ff|!ztSEg>Xv#C^Kvee)K2 z8z+7~QhMbFH#Rm7iO>h`*9|fO34<^VUz2KqrgFKm55;f@c%TdP04K&|Opc<1JII4Q z=z~89gh42TLr8>0XoQS{gU}-~@6ZQ&Fb=#>2>dVzZ*U5yzzB_yFc%na83=mdcW=XH zYBPpv_Tn`}WJq1(HH;KGMYC*q<}7~%hjA!}b4Z7EXoq)*hj|Dt(ql$1$3;X0VqU{_ z80d9gIC>uVZDJU1f|fsNaXU`ahQLKbrPFYgXo;7IiJ8c52Gm52q-z(afri*^!VLJpiLbGGQYt^Jhuqi8QiiQ1Oi%=!|1$ifi!> z-_Q-%u`=Bd4u19y=I|ytkv06%4qh{n`(Tl1CMg*aM|wz-C25i;iIOR)k}LTx%(D-t z5DQedFTBtTSm6;Z$40555za@DEar_H*o<)Yj0?$6w4evEKntHh4Uq5&bQKE_g$csY z27?d|{s0NW;19o`2YvAW4MsT#-{5+uz=9}*4ctIX;((TEDGo=-mTl>lZwZ%iDVK9e zmvuQOZ(0kzGfD;^s36L-iw$KQz0W@5t3q9#hKPieFM~Vt*dXCsn za?lIb&j_3;;6-Sh)w`a0-pU2lMbrtv3j^@-h4%498#%)qtD1 zS%ACAo4x6qzX_ZZ@(gpg9$YmZaBvk~!wgHsRlU#!TaXB5a0bsXmiE9^wm^^>_>;@P zj9(~rZZj)frCiqO510@KQzua4PzddZekA4z@6l>tTZgQ(;wVrB{ljS*oR5%B5ZErC$oBVd`HO7Bm7g z2!pT>u@DOOzz1y*pZj19p%4ni&``%vofu&gT&NLV^hDq&nYtLGSl*1j^ro*sB&XL8l;Ve^o#EXT=~;fVk40H=&Qd9tig&uyGA+yX>je-tDUx!|L{ax z_o84}LgFc_-J_E}Qmw*@t=X!rz^bg>I1hb_kU|-#(mE?p(?Y}YWs;_@>&mX}>aOn! zubM+T8MItG`K|Kgtk2;*<0!5C=7@L(uy=+l8sv_eW=I7auL-NL3(K$#>#z@Nne+-e zq7yOHkUIZx00%Gt&4W+jIiv5WHC>ZNM5HUa0*LKsFYE}hE6cJi>#{Ekvr=kxYRDWotFs!*v9Q{&NtR2+&v_rUtTez8)xXGrti0inG3%QIdxq!R4l>4}od$^Hnxtg1~ zm|MA>ySbiwxuHwCpliCHi@KwGx~iMHoZGsh>$+zrYUNa0x-W4bB_? z3lAv_IS~@Va0<&H47PwU>kGjVEWr~@!Tbcg6B{!7aF`urycru5Mlk>(EW)s1N!$Un zYmpD*;AdG8GL2_Qy|zv7kPe`uLU}nu>!FGjtiwCZ!#yl%?b{w2Tnn}E4>|h}1n@j1 zETe;}X$Tv#BXeVUWnNU0!#-@qSB%A3OgUlmZ?v-y)L;v>pbZm~02(m>NK615o5rtN ziYENAX;HOIQ^i_L$8~JSckGLvN3iw!3`6`6@p}MeyswGq#!O5(bBxD{tjLRe#n-mS z|27WafDPdQ2?J2Zf}FfiQOM<3If%^2pA5>Oe7;?4D(NT>@6ZSYaLI!_l$*T&h@G4( zqAbg^Ov^1x%CodyoS_l#J`-)#{8Yv;mYzS&hHG*@!YT}8Wkf` zV=Ds*y(|F2%n`zj0BoEwn!Lm(!j4X7&IONIjz$> z&C@;Y(?1Q=K`qonP1Hqg)JKifNnO<6@D8V-2TXN}hExyja1R}g$@HuLkZybmW*`S| z00&We&t9GU#^zaV!kP&#UFUgYU{=nz|py%{Z4}qTNgbwI`uIJVg=zebKbPniLf#`*9=+=_w zh2H0kUg>~7=#PHr^x)@}9_f2d==4D8oX+QZ&gi4Q>89@g>4ARgmA>h&Zt9Hw>5m@k zl0NE<{_2n(>XDA=sBY(#E)%{^?8Uz5cCPEJj_0nv>WRMWlCJEN-sr37>d(&W!oKUn zZtZ^F?46$JyPhniUhRFJEVaHY-`?ubp6i*e=;R*iln(5X?&zML>h7NG)n4m`v(Ve(xE9>85_?0DtW1-su6~>-)~@+ivW6?lsB6MWk+>7$zgULe-M}4`i`b$01hed4lJ+o@X+!wFZ1Bw4l-Z!G;i}cU-LVU^EVIkE`Reo zKl4IQ^f}-2I&btv-||Aw@-E->NMH0vAM{CY^gloU^HxvvK>zbfuk%t5^;kdjU!V0? zAN63*^Hk6DG4JzgANFZq^=yCkJiqc>Pxoyv_DKKqYwz@U5B7Qg@=H(lT3_~XZ}wZ? z^>^?0bszPM|Mq)N_=LamDZlb6Klznk`IJxjk{|h!kMf$I`J4awo)7xq(D{}h`lnC& zqp$g5E}mf3H(>kV8H+d3>5tI@0~q}@BBrJbPwJ| zj2Sg<UN01>!jwD&q&(&bB-F=fuAS<~iCoHf_UGZlzmyLbN}LKJGR zUb}mLC@?tK)Tz^i3;#8I7|~xYQ~u`hqsNb5KCofMjwM^x>{+yF)vjgR*6mxkaplgX zTi5Pgym|HR<=fXU+kJumq7A%naACrN*Y4x$FHk3c?dTOH3i0T@OHCzcknq%VRE7?R zO2o?V-MrKG=B;Mk+VyMLu?xEX7u)u2+_`n{=H1)(Z{Wd&4<}yS_;KXPl`m)B-1&3p zx9PRx_t;;$p!0?nttaoEK@k5oJH0^v@aX`Bp{v>>O~)U*eDsFSue{wJW%~K&7u4V1 z|9=1j6mUQS3pDUR1QS$nK?WOi@IeS8lyE`{E41)J4E-~Ro^+~%OtRD}o2R>XH1TYp zg9cD>#e)o3D1gk?BP}a=?4hTg`!dvVM;?3h@kbzo6mm!+i!}1c{tDvI!^k+ihrSV! zGSRaOR=D7w6;@=?paTy02S(AX!s z_dko9cKT_kqn3JVs;jp8YOJ&N7h}k_?e$ww3lf23fC(tH%L4|;OdgnLB(rArwEG4g z?=EuZqHT6!=WcND*#{i|aOCA@8)X6moS&cd3{WV>b8P%^$0LV)a>*;F{Bp}P$9!|m zJLmj!&qD`&bkR#E{dCh)M}2kGTW9@s*JFo$cG+vE{dULy;W{$O=22X=j++`g-~m)F z$ji0czUorD1*q*G1dLh#E|@o(cktsE-q3@QI7cgnk&AoCg9_*12Ru6AL4W)L z5b0>(Jph5icc?IiYh+^^-S|eP%`jtMn-8D-M1%hwB!@ugVL=4&lphvkfXW-wt2&j& zZ9oDZ7K{cU$l;3y_Jb3?00a{+q6Kf{Ll*Fegg3fK1$dN^4&=B;8dnHMRHjmutE^SF zx>mzF_Ni1jEC><`A_E*0q>l#qqaO`IfJCv%h%_5b7m>jZU!3ES=Rn3eWWh{wcq5v3 z!`?l}fsA7&@tMn%MLLScN^pi#oa2Pk?s)Y(%kljarI0zf zby09(2?*|V=RagX10>iI2ezDN%Iq0WrwDTt2CUa=YSXQsq2@H&IZd}pxzp9i=RS-| zB0Vg6QH~~6sY_)leLRX&`h;`^BmIX;fndw4+R`b1jAt*Wvd=|9OF#OkM_GM0FL#Xy zW>B&jM3&Z6xW-kk<1}YG^0c3Kgp>w9;G;=tfJ-C*_6P$LWhkELv7EqhtaW>&MC}FTH z+vRR|z58A8hF84fC2x7ndtUUWSH0_HZ+pAD52t2|dgshf$1-7%lLFS3NC3hScIiu} z7>{kvA||}}@ee=9f`qPMFoQ|>U{^qR!3}nBge@%L3uhR^8`f}#Is9P{hZw{o7IBG5 zd}0%)7{x1Aaf?~}Vi(64#xs_2jcI&i8|N6uJJxZJdHiD^XP6oJpqEGQN*{gvV;uiD z84z;W$371BAjU<2a1Zi;e_-Mt@+gYimg`n_kVDMma0i*qTxK+jxy)x~bDG`UW;nn9 zSu0LfhP2z4P9tNA6n6gX7r*R-DpTZTGElG^rY`> zW-*&1A0c`wNZ*l;OrZ2BzrE_e5Fp?#FON}_5gc?2`f7p3TGp_pb*yWBYg^|U*Spqr zuX+7zUk4l5!xnb2iG6HiCmY$zR(7+Q{cLAP8`{&BcD1Q}ZEI&6+uPQ5x48{#S*I_) zG=yp$m0U}KEdT)vSU^G8jpc@Lxqx3@T6FAvZ+z!l-}~lwzy1AhfZIlE1Ap3V@7JVq z4+S;<2(?zz{f~CL`>XOU;t~5(R*Yv{;~VFA$36aWkcV94BPV&uO@4Ber(EU#D`$Dj zUH)>I$6V$!r+Lk7esi3QygzkK_d1IT_5yNYS1U!KoVEu-_KXMC=6ztEZJes?(; z8J+wqNYD==Wq+OhAA&zf#S2Uyw;KiSp3*qp9seM^KVI@_(z|Vgatho+jGynR%|VVT zuY!!+DI0eRV&`$wPqFRv1ZREgUElhBOWOc9PK{`?rbpUpgX$TBB0z4T2LbGgf(i_O z5I}$e8gg(2Uf>6O-~@I+249c|WDtjaC_fMkK@mKd^GiPy6q5BLis13PA+V+Ra|))2 zLHw(~rzk#yATmhu1y_IvWZ0w}+`;vMhjW;ua`**s2qSPn24%P=S-2)n=m%Ng1Oys~ zPB;hl@diK$hwbqOPDs8H{6a7c!@}E-5TdkO|viu|iT8f=QN zGCl=_hd|gK1?z-P*q&U723g33TsVgiM0aqaTtEhR*oS%$LsBe7@&k~9V-QnZMOLJmy5hQaX}>mvKhIzQ3y4EpG>AB~ zfEsL-w^0&$fCpFT2X8RMPKX9?D8y$X#C{+|a)1Xq@TB*k1Byt-X!t{Tz@B7EpJW7| zPB^gqrP$JPYBM#<`E8h{qg($5ly3d%VYnNkQNNl^^(%!RjGf ztV3O-Km8jf{+kUB@r5K5vqnS)Z*T`>xTbU9o^uEsQ#c15d?YB$#z{N}9uzZ95XWS6 z27JJW4a!D*a0L{a4SZ}#mn1>^Aj2JbNt&!liP1-nxjdo&8!WAQ!GhpLrr<@P?8QP- z4bS@uQQQYUVT^oG%AN5Fen5s2B8OiH#qHAvut=ZoV~lMOvwG-0eds>0P|BvXNwYl5 zr;y2*RLgjT95YeN^JAQ5ITN(3OS8nu6>N(4<1K^ejDqk>e<6*vGs<@9yxjN)vO*k# zG7Z$gk?3=)Cpj>Fh?mbhGP}IYnuN=FEW^!|5O&-T%nVI*#LJ*ag}tn*p6nqYkN^u{ zP1kHq@qo>OWFGtwi_f#DvM`K&ke9N!2eN<&uK*gT49>wQPUAdI`(vvPXG;20Ub~REl>kJPy|g-1zk`EZBPe&Pza6C1icgE zbEPIx!=d1luk#EjJBaYy&VLBc1LF_!gosV+1{6(E6642 z?NdMfQ$P*WFa?X&uu#c>MWV1$bNm6H^bGI+^iF@7H>4ww&zuv{ywr2lOnR);A;DBn z6+@4Dt5_O`OgPPcdDIi}2cz3R<1-Mu<5UFsR9O{6O-+|184y^_kI2K1S?$&G(?@%_ zQZ0qlgCK!{xUbOLJVV+i&Wy>nTuW%(OnG!iU#-?tj8=M#JzM=1Gs#s~wN`K?IAGOK zblW|?Jct?y&&~h=zzorX5CuE*#bpgwdZpJ|9m55|*LAE{eigxSHAh-(iW>Nb8mNKQ z49_j?mpk0nU!m51eOQ{jS1vt6ifs@>-IV%zS4KTogBaL?7+CQ1OY=AgWFQU9I&04M9TCVL{trb8!G0*R)(xAmX?ey4w?7M#$O7Q@X zSvm+Dk%&ebL<*~0yS-by&0D?QTfXgEzx`Xl4P3z;T*56}!#!NYOEuronQJz)AHq? zBq5o8G+2V|*w9^Dz#Q3_x*5>|3d%BI$3o!7+ByYRV8n9Z2R`7+f?xucfjEq9^wV2;TX=W3LdQ_&SA>};vi;XC4S&jTE`m_*#CVB4H(@O5MX)S*R-ry zFpi@Wk=OywkJiu-hUL^UMq`L=W5U`Oef5u^)g>IrC8y}#{3}+|Mcs7Sm@$r)DZZ9K zu9QJ`kbKDBKdukZWLS9rj3dcOV^o}2F($YQbz||XWY5smIL==`@m!+q-k;1r@C0Af z9Z~+62ka_;;j+C{l+2CemzGe1k2XJOSY_{iJp1yO=W!C6t*0_(;Q#k6gsdnDyfR^HV zc8zlm;%;W=ZJuU_mgsb*=7~;dWoBnru0C@RXN#`rbT;OQCTV8IXp>fGR$k?Rp6GQ} zWm*<#l@92bo@rbEzGaPG4Ps8|>Z|6L_UDqOjDp6iQN)wIvg41HKMTm??{(L-oQLM3 zu7Xh2tG!x-nrf`JYOf`)s-_;V)@rQXYOcO&vR<#O#@e$!Yq7SjdZCO1TWh$EYq_55 zwT3Tzf#ZU>um8GY{Ojw#^cX%~l?37iUigK=K5WBIY{Xt{#ZGL)W^BlA?81I*$&PHu zzHG_PY|GYc&R*=zo@~PIY{mZU(H3pe_H5Hm?bEJo(WY#~c5TyMZN`Re**0ulu!Uc+ zg(0hte0T=j=7rk^Zd>?=;0|uvwgurn?BYi53Z}_U+X&12E-AHeHe#00P9V!^r-YcSzYMe&JR{KKMte)HP0!fv=2yxA&R< z=aGc>hlM{HP@i^)hmeTxVnt>ee>ZrO2hCW8^@<050m+ocvrfBMe7}5KX z2$0YBFy4As{gtg)_)XjShu>5o`An2|*0~INv^RRShj{*|$A-mgx#W7EFFb?rKV4}0 zUHyl25QV*R3aP(!f7#NjpZ8x6`G}``x}ObxSommn__(*!P0sh4?|KcHkba^0qz^-S z^gmkw^oKZP`T+2}&Z85Ndd&b|6sbq7Km4LseAv(5uV;9%@AuY9c+ z5Z{0O*hl!;@P~}A_kYKu(5>|sVE0E&*n&`WyKnt^PyFErW5##_^1E*ANpp!`Q!gtyw+=gpn-!%jeq}M z7(8guLc)I_7&eS(@83Irg--c#&4p%edFGAY)Eq`(V|9=B2B7vsZ5*xbnVGVGUC4)1Pc~?fsiU!t`jR>lxpzf zyR!D?p`CYj?Z32b&(2GzHZEJVYty=gYxnJ3yG;KA4lH=^QJXk*^7ILGW5SMcJeC8`t1Fwf5dM#H$hW#(8D&QtqmHHS5+bTf>emdp7Obwr}JAR((>gKU;jH zj!Y=(-wzx>3P#+TPy>j68k~b5(VQz-j2g!V^{0KFc7FNn`D^FhA3uNj$p0&^oxHvB z?ZKbt$L}6_^78$0Utf`5div#a*Y+2H1HzUWfd_UK6k`YycvDV0aio}mW98=*Xq)|G zUV8JjmCt$Wd6*$Tan+|@clEuKk9sDmw~s#z!Wg5BGtyY2jZ|^ROH`eC29iPP{6oWW zK>R~wa{rKkWOUCtWY7vpre_mH7FoB^S^fai1|yKzvj-oE@bb#{b$tmyu`0>j)n7q@-C8vyd zBS(N)n%jgne#8-W3tHKjkD12iU^iz)_|t?P@l(hig9!6X8gya;)rmD(Z!COL!Z=f8VM{S;P{Ge7*5r`L zC)hv{!!x0L;>Qe$gyPR7CD>vMEiu>&7-JjVWE)Y0(}5t(vJ2_M|Ff9aVJ26=+C-O$fjLe6q|AmoO7bA|!uOO$BgV z9Lf||K!VLa_RP?RKWZeAPbiY^&;~7WB=HOfm(cP{7)kI_$P9kaas}YAym+ao3i6a0 z(w{|L!Pwen{Un?RKUS&P$o1KIgpVF*&ERcPa^r`3S9wwoxsA(a0M3r zkg)?K{>1PGe)%NP1V*t00k}WE#>f&4W1{Q*lkxaF3hc@JtNshLg1$FK)Oq0;lKI4xsG@%J^ct`l$#DZd& z;}?*K0n3(wjXhLgPFM&7e%cX=UzFe!T{xjFo-q#=bgT|b@CPqKFfKIg5*y$1M-n1P z8o@ZSDLY&yGjG$b9~$i+qbnVeYH&Iv(x!?36yjwQY_Wt;pg|3Zz(g^~5DP|NqX~)d z!zTvujyL%u6iEPvi-uJPFnzNQUeg03VgU&?gyIrXcn2fmaEU#%!w=~=1tWNoh(SaJ zLpA!@GT|3LqUdmG_gjppxT6L&G(rl%XaXkUPz^r3;S~OCLMZxBGJmuI82$(Y8P4;I zLWuAU*yzG367i2}EMZ)I*g{9tFsCg0EFc@tnRjbOHXC4!X2^msV zibNF=kS>V{32S4f6c*Weq#fx<$2-E&j&Nv$JND4VXWG#Xx4M-)?=VL?%+Zm2j3XTW zU`INvVUB%-;~Ovf#yB!kmhd$89pfnKX4){oRdiiL_IM|vFe(b{tYe9P8%09UQ;*eg5C zF%Pw}RjNp_Ds`*tl+R_=Xh8ab5QkXJhM*uw@%o1d{;>iYT;N|+3K-Hnl#hM9cPDDu ziHG(9U-;VPJKyPuedpmJ@BE{`?~RN>BD0T5;Wr`skSHSs)XZpdu5s2aZPQMBwC~IV zz5_lBaC@Sn`mUwE`rU72+M{2Oc*rqoNwItF(PGdhb0skz)l{u(<7W2oH!0dLit`aK zA$b)Dq_ZY+!Wv$KfHg=cAS)C9*Naw#3+3(ba8kzWlfx2Z~&WO0|fF`qNaOLrxcDyI`~k(ASwBO_TT zX01{UJ0;=BJ+97-o1Bd)+ULzd63mBL@R&hGn6g6J(UGnkIlpRe)bU!E(kx$qE>x3Nq9|=#049W{^Cx_%6%WVh6D{k?NV?5&;-#EuR?(vU< zJmexDImt_I@{^-H>WI`j!jo#TbWm#@nYF_h|<2>g&-#O2F?(?4mUE-wSjSsWi zWf};{nq4)>kPR{fg}1;UEeP+C5$&m9qxiDj*gDs{?)9&OJ?vs1JK4)__Oqis?P^~; z+uQE;x5GW|Vn4Ra?bqpu-o=vKJ=m=J?Tqt`qQI6^{QVz>s#;o*TX*cvY$Qa_gi*LUo+L!a3 zvG4uwTe^O@uke=@7whw*Km7w@jOTWgVi^BJ6a$ZZu8Ca4$2%PdPp7;nrmy+4c9#0B z-we@&02&~Tm`dK|-T^XT13F+=ZLVj&u$&ADMBDxz#e zU>A-TSKwc3h(hB0AERN46LJ<)9HIO)*!-*-&5fsv_rDp+yl# z9eR~)+#&S=ph;kuhoA+9q1f8^mw$aBgjp3xz?VMggJakOG42B~7Nd*7nJf0;S(KQM zL57UjDs(50y&yvIilk^nxi^$0y6MNma*cMt>Qe^ zNGp;dK@dphaiJ}CMn<%QUa5$S?L;^rS4EUXbon7wdBi>J!#nH)aiz$J(A<96mqRvV zojq9pdsKuyw1bN@*We8DL^!xo%@VBLutyg@i5LKR%XKS+TZqyvv( z;utyx9GpQh+<_FN0xxtyJM4iJ^i(klhl{+Id7OubXh<&d!#Hq9aK)8~ zz!!hWM?!!`h)5&5E!cq>8)tZ4e1c?v#izMVV~1?z`8A@%`N#|&(FWSaB;p}i#-U^E zgEn+Q7W4rbNI@Uy!70>1BlyD`6hajgf--c$G@Qadm_f%##$PH@Lz;maFat1%fj_{( z4AjCigaJRGK{32RDxg7(j!5>s;WBgqGmt?dNI@4I0~xddGmuMz_`@_j)uWujOyz(z zv_Ta_kQtmpF$j-@Hi8};5;HB$Oh#c%-XtgR13SnAGRQ(XfI~Y<13c)%Dfoi_J6r-M zNP{o<0z4EKJjjA-Edw*W!!u~Zp)5l>%mXvb!!x9VKRm-R%)>W4LvD4$HweQ#V1qEE zLpMljHxxrUXoE2HmN0xnIwZq5e8@ZS0we6{H^hQF@xwEGLpR9GJ1_$_{KGx`f-Q*W zZ)w9a@PnrQ1EBIkEOY}cJVRtCRV*9>FYtl`y~8mGgE`zoI9SF##Hw0B>+~SjGt}pP z_8C^yT4v~jJfIH!>7Z9791u)is*Pn?QrSLqgA`nXIeY;WGy){F!5N&w9$-NzK!F}m z0~zc=BD@Xa%-|;~1Kr~w!h10FQNCmd-1H@Z)TeM1=3 z0USU=6Knx5+=1|9>1gr;HM{{65Q-d7LlZ~=AH)F^_>LOX!Z9QPB%Hz)w88EG=x%-^ zO#&w}aDqR`gFXa;EXaa4&_O@A0y5|W9pr+Y27)`#0Vlu%J*ZV3$Z8$%fi3ufAH)J5 z)B!!kf;rGaIM`($#DccOLMW6BB-DW|G{PW+0waK}FvLM9Kmx9K%`ZskC8WdIo@yf4 zLLC$WK`E876ayS6Oq?jzDV)MMV1uB>0y9uUBUnQ_6hk{`Lo7Ulu{LCHoB}OeLLn4` zKQKcv*g`jq!zp0HFC+sn2tzTr5ii)nDJ;V;FoP|?7Pe+<@sULTw+3iykSh@2z!50l z5p*DdQlEi#p^K%%FT98_Si>*aLn2^AC_oCDm;*EL!7=!QFsRM>O+-GNLL-dBI21!T z{DM5JP%qHKKNJEj(8HdL!#&(XBY~Me9K#@JgEd@4I@m8%5(rB|!X8<}F;GJ>i~}zS zgErX0KJ-GTHUcJSgT$ztmcHBq+T`(osXXjMAoK&$(g8W>!8yDG9moPakm)_p!JOVh zJD7tkyaO`W2_*Evq%guDs1K-y!#qsG0b_!jKyDo{LmxnbLv0--6vHQk!XOCBG3aeE zOhY4Jui19PCD;NaKmy&e>OZv9C$Iw}`~xra!6$q}K46RgFccRyC<-mWaa-|2GQ&5=nA=L+X;D>gYa)yw{c*J@j zc6jHDXa@lw$Stb~e3FNYh{%VyNM_;K2K%N#1g$URgFNtqEQoMFbiz4!Lr%&<)RKcH zq{Gp|!#zlr)`G((oWe0&LMRYQDA>}XoB}nRksQ!MEEGaGFasl;Q6p4CER4fH)DkZY z%PH`}GRUqU94iy6h(8oVA7H{WG=eR}(r`nwNkoAHoTmK`^i8Iqyjz;uodz~N&;zv2 z149BBb*e})Kmum9g?18{hRw%;G2}il_GQmUS)_-3@drb`2>wz;QF;ip5@mlG1aJ+Q zv1v$A&R~7Ur#T#hX2%8o;%__r0xwv@d=w@BNPqND6Sa<9Y$aQTK_EnOBR9P;*=j&F zy6OdLEM=5QH(mrqbz^sSYxj0@cXvzoYG8MCd-r&gcX^xld82oFt9N>j%3M1$atWs_ z6K8R*$35IZV9x_Rphe9wWwG6aXd-22Jf&NN28OU_LqMxy#|414@>9yigM+tJW|$10 zMq2c&a90;r`Q=Ac@(SRKa)5Y{$P1GVT+@lAKSVW1l*fw8M~l1oi^F(~%lM4bc#Yfm zjpKNZ>-diIc#r$|j{|v-3wez5#QUWne>n}5Rm3j@0y12JFFd)NM){OWxtv=0C-_1j zcs4z(g-NVfTnol8{uP*$d6}<7`_WqepjGk`W?vMc+tGkdc;`?EuPv`hQ6Q+u^r`?X_xwkvxN^uq6K`pY5tVsPGk zllv(O-?^iEx~u!T;~RWgS@AWaafj7b;JTrS6>-2u5B3B#2*WWH!@mQ3zzh7q6MVrN z{J|r9!Ylm37sEdQyu&km#7q4D#8Z65Tl~die8z*4hJCyJgu6)OUHXdr$di1@m%KTk ze9Ei*%CmgSyZp<;e9X)I%+q|$+x*Sre9r6q&hvcFxBO(iJ8|=fNYuJQC`7$?#p|dJ zb>w+_prS#PqALG#)cbPPLw&hpeb#IJ)^mN=d;Qmgeb|fr*pq$Plj5>D2DpQxu(j1U zxc%G1ecZo2*sW^auj<&zz1th!-t&Fm`~BYwp4)4~ZBf}IZ>vYFIqBelR@}PL8w8Xf zi9sw8SD<#&^T>L;#ZhAZ=8v~#AR-}(##14a<9RJ&pF+m! zf1JpQV?Fk7$cog*FVEQbQKnIBt6hx$o5^}#g#Tb@)W^eEd6eFDf}SjUx8gLJ$Z+{7CqZ-#~lz-uWwZ%HO+*8z=tbIFIAUkRwTo ze0UONN|h^FBD4qb8l+1z|3R{O=#osGm}XwW1nCf@MvZLdgro`SQB8)%@hkZhYE-El z^ZDC16>C&}{PKacw>4ixry%$7+qchOzKv+Zmd*MW?#6liFx*Pr)Svx9sm< zcghAACVaRsIB@I#BxcR`7;;?6lPOoWd>M0Q&6}~#^T%sX#(5q?{?jM#W)hkF7M)Ttr}koSE}*k#oJwT~}#WHfXyf2)saaZk!%=he=rkt9lm~oyF2Ai_- zu|}A1#u3Jxe>7q+9BjU!#<%|7nyW73CdzBCk1A3o5LsL~(Um<=^aDi|QGD^lKpMje zvdA(Npw$LyZJ^lxiQ*p% z7K);_+7hb&=%V_1^Jp$>!tsYqe%O5H8Gej&lg&Eo>;;lK|9Lac>iqmOrRz?y#UFb1 z^d}-ax3ZH_dKk5n9!E97#mpn6;%6vG?iwv@8o5MBOL3&D8>c?hDl>9=WWwM=iBJd~Ba_^GSDIa@oCVU3Aq-m!ov&QOn1B?J4Ujdc#UodFCBdmjQ+ms`)u(&{!G?rPqr&40bJIMf{8t ze%N6L9A)YWM;T_!VMiWtj`;?hVxGyJop#z8M~`?6x7mYMmX1(JPheMdi9_x-OxcFnPdA8pJrYaeQkd54*2%AKY`YAkgB zsvB+Exk_PM;TN0A;*WHM!(4w;-~#RA8PJF(bRH8($W~(|>R5nF|Hy>PECRDL{lha; zIK>{SV1_p&fe(8iLpt8jhD$U75>to+6k-8|Q(yrNVZg!{&_ISngaQs2ILnd(X2SXSl6Hmwl7yj@EHq7A<*9Zm|GBJ)h;2{`R5Je{DU-fi$0?q1is`j+bi&$~ z>Eu!oWT|c*fhZ9&=+F;u^y43zB!?_I8HilK;~(;Xhb-Qq3_cWM88#6{9|l4Hxl6p` z6V=$qCHhc|QxrlNv|t7;Vo}Ra@PQVW@Ix_*!G~U)f)Bj-#U6MuOIzfl8~+f-9{lhO z-F%}Ea2iA?grNpdU?UN?+}tVV(T!#JqZiEZ)HvROM`8-YRmbCpErxc9LD(ImN{76DEuuumwECCYKkisDRk%%o! z%c3O7+Sc+`2Ua{oY?=7O9Jn9`Ma*Fi@?k|V#E=PkWI`0z-~ubOY6wyP7|r!7VQWJHTdzMeJ~>y=j|2T)Y=->@hzGIdDK!zU@0SP_)un>J9lsP)}pGKVG z5}}AiC_+&PTlAq2wD_km8j-Z)rqdRfNW?Lwk%&Qj;v0~d1}1EwG(IGv8;tPBDQ+7M zM&yGQdjRh~ju8uHyki{N_{1-45sF{D;~V2hl`uGWuYI247^nCIeSUEuY>Xoo;h+UC zVgXoMa1K?^_{1@45e`X46~h_+h(DABL6UfkWKtr?YhKf(e^9{xq!d7@iT}~EF?DdI zz3~Sm)L;uWBw~bo5QZ5-!KP`{419IiTN^_02{XjP45#>o847U>Gkn4yRV(6@Q!-Vq z;o=TyodYC-F~;zu;u`;03M=Mt2zuZm7}uCXCRl-oOr+xgu|Q709u?toMC#f`$6_Nx zL)yx|#FCb>_!lB(ann8qGMBDIgwRy>(?%Y0*K5;x|Ffts^|1bx$$-Sy}JUGCo zNC#SY@r`*Dn83{7MK$bUi(iCd!R#1RFtI_4Vl24A7uN8=E$SJKd3d9!K?z6^a*!1x zWTgLy_y%8GCf+<{E^cy)Klat8iu_^;YeGv!{GkmWMj0(m(Kx{;V&!*43g&KtIn3ic zbG*&`ACdA$64NMGzgbkTM$%}$iWMZIQzd~5Oh_d0Ldl8XEn}S62Rr@&4|1df)Z}o7 zFRYFXc-Vt6SjK+HRZndk790Es$1&=$(84m~Kh(I2|AF!`4hv`G9n?s?HtaDD zYvd#C>O)T9*By>ugu@*B_=Yyrhwak2mMoTzK)9zs?U441Uz3&L}E$gpYxi4p=1Q(Lw_1kii!U>4Gqh*%PY_AwD};~oNtCTo%=15IHtFk!YLQusmtqzooi0vm(UI$XjdPNE}Rk|L^P<5NE8lRoRyKJODh z^HV?flRx{@KmQXz12jGn=r%h{IpFeRkWVELAOZfNK^ycT65tbrv*lE>G}^)N(qT0b zr!+Z~Ha`?ZLsUdZltf?CLrWAzKXW`IlXNIEL{!2tV^l_GltydRMsIX5nKENGasZF7 zIuhVPfixi|l&&hYE?KHEaa2jg|1wFJ)JeIrN&7NN@$yL@<0V#9-u)9U_#0CI<{{mXQV&E)QD`u`{<83j>9>6kx%)w7e_-l z?9?S#N+}VMGmer=A+x1`B}>nfP$N}RCzVnwwWV-#JdMvI6%-{1z*8Mm0nijkAD{vL zfk-#v3uBB<>(o*wGKtt^Pv`_uY_2C2#U^(WSMQNfYcU^RVikS0A$4RZuSHRTQcTP9 zB_Op`mz7zY)me*Z7`d+_KrA6pU?8mZAF$O^xAjvA;2%o$0S4d_W+YYTluj+O7Lye! z5@_j|)gET@84`gJ3?UKf|5XnSff0nF5ey+Hioz!T;9qS*Cj{0e3;`0ZVTg7WEfNhM z!6G`qV$is8VcDY4CiW}{wJDYLSvQtrJ9c9=GB-KGV@?8Fv-Mj4!CSd?TL&Tm+>~6k zk2qa&BY?yE^a&(Ds89RUIND)3hKD$o^*XYn7;s@|(TqKKfjyE|JXir~--A7ZK|JJx zK5WxY@k2itb`j@+8HyqH2<GW z>rfPhO&rBhs1gEW|J5Hpp>HB}ABdt6?xGv_!BcFZ9z^9IFo71v0T@!{9faW@T*Vx^ z>lbLnR&YgWZpltF_9@|(Zj0A=kM|6l@NVtFV?^K~`W7JqAOHq{daHLJ4xmj>wL%FO zNl9a7Y6hI9s}Q0l3F5>bm_ZNZ09W215p*qSAOUDjp&R;u5#(TMZGkr#$zSca)1S~)V|1_ERbVsA~>TC3NGsrMfaz;DOZ zH_8<%JVOdb|40hV01lF15B4AoSf~v!K?*KG3TCK=Zs-ic;0k!ihfbjmgedr|>^7FD ziJmBm{y+?>s0;*g9JVME)Xa>;Koqu$ZZcxV=)+jMbRXJb5aQ^9y|En-3y-KlYZpwv z?x7vpj*x7@kPu0P`5_jl!I27c9~q5B@%M#in3Fr1lR?%wG<6`Hw_17FWdC6RP+65# z`2d9YABY%LVOClh%^$kJ$YhG9Y^n>umKv5J40>S-<+-}iLOBuG$9pOAr;1f9-b%|-0U6DOwHJA&Em{6AfazCOdH&JGxqGyz+z&;;wuEr zDuTpb1W4%`RWe6olM`C3$GTaYuq2Ez9ZFdxq?fG&0001Bq7A?R6hK@XBm0gNZYKg! z*d#0a73mbnaJ{-k!U;Z?d~G-|~fVj((~1G<^DA~b;)+C;J)cUB#6uOo1CAI0Ya8DnFc zA6>IfAdrOm&P78G)Y`BtEyJPQR9FhSS{y{u^JZgI!YKhipqjn(3|6|DE z!)V9q9g-+g^}AP-QonT&8wB{Nyed&IY#%N4D}5%gN&TP0SUw-unpF+n0~+(Kg< zD-2gEIQCs<(sSpWD(PgiZ(~=jJQ3|fQa}7fyByF1-A`(G029K!AA*z<;;k2b(OG;T zU|G%aT4sWf(ktE4FCEh}UDG$6(>vYM6>~;CUDQXN)Jt8|sm0Wz($rVI(@|n{3fi>= zUDjv4&~`KtxUD~Ie z+N<5#uN~X7UE8;v+q*s5|3UY_-P^|<+sDCJN9R$soYvQ!*1w#kY_q+4{}Uk+UD1J^ z%>SXqUzgZnTq30>*_EB#176?UAPZ32&)w3wQ@>Rp5^{;;{SZ&bAHPS zJ#-S{0_1((M|qSz9soc--^Z0|`F$ecBG1wp&VvLY{#1CRp6Z7ulw-zHyB8k~70OxC z>!JM0TU*_Ap6t(Cy?g%R^|o4_m*WS5=#5_FlYY(fI%euVDirlug9E!gH*+J<;U##677u%cR{$b;rWDqK|&$i~Zu3|6Wm1+wRX=@d2M6 z#^E1y!Etnf7g9f-O`jKPf%R3N7j!}PSAiPX=z}u+H#qzZe}gL!0%CjLBdq#-j#5F= z1#5eiDQ`aX8K3z-*={X99Wvq2pLg;(-tt3!*yUc*t)r4af=soMOdV_LU(z<6P$Nd3 zPgj+qDk2pMVHHy0{ZC;PR)KTs{}d1*6*vd~?;rjT0U!?1vq!L?!Gj1BDqP5rVZL|N z-Zh*^ks!8b?fC8c*KJxlZO_c@+h@-lHGBEOwaZ6v+_QJ%U{;)2@t@6`Hs|q^(=Fe; zfA;o`dqWVX(W6L{DqYI7sne%Wqe`7hwW`&tShH$1I?tc3|2_WRy#spi=!=^u(27Wl z0)X4MZvO@Nr@-c=e`9UF^H=Cp*n&0>&g<%Lqrb3+_Z{|UFWutA`401YY%lR+#UyEJ z-b`?BEMbS~gAM%rLV`G3~rV z4>gDIGmnf=;x@=Hg;W=1LHVQuWH{j*hGb#A3!LUnEfo zGlT5GMJ`T80(R2{YUwBYO(Fw;X@H!fT%hZC3bn-+ zYLFrHDP0T_3Ko!Taf%d!bkWBbdYBRF|0jFA@rE8`BqE0yki?-zSWP@LwbfpiPyYE^ zo1gxHd!528J?|8<$|1VoA<&W0(xb;Qy2!B#{B{#a>XagsUzp=j=*dSt{xKMv>;r+1 z%EzPpHIjL3WH1+$pie56CozT2VFL`I2uDal@vNskjB4GVI3@!8NNRRQsom`~C7@2F z%s?ya9ZcSFg+Ww-7W1%%JyK|{d?hIzd+CNbhA0*b^239JfkYvi)iv~CO?_9iqSms= zC$RmG9`x7|7{&OG9f>83^x)DNsUfbPl+Y%T8Ps4Jn3JC%Fez@li3T~iun&6YjercK zAO(3bl_BVL|47SGT=)+ek_>kz|ML_MmogGsK*AR7*vFmPrR5uY?d zd_TeB7FSut^|_LZK-o);{6PS$LNJF zgrN&v;KH8s%qKqYdCz%n%Sp=&XrVedkN1c!hXPHgLKixfu6)HkR;r<-*3vO)PP38K zd?XEXC&`(Jg;ARs=Qlf}Le6<~NvWvCDptzUmb&z%D@_JH7Kjs*Lg^+p&8bdv(#M7! zQ>Q=;s!)eY)S^b|gof1M{|f&ByZr3ODE!GNPB2kJ-5D}rH8l!Cw|2F_jE;9;{i;}3 z7FM#36{p{^pgC#D%UjZtt!=#}9RtJAx@P4&JvF9L_sZA4`t`4zYvw|1a*v5N#gS93 zYDW*E!NxlFv5<|dWG746%3Aiao4bc*H@jJT+{3e+4J}GAOWM+!_Oz%?t!h_0*@O@? zFb4&!Y-dZ`+Rj$63fUM_U*JMUQqxlZxd~M{n$3f><0j@XN^)_sT;wYExy*&GbE8Y$ z=~~w&&Bd;CwHw`Wc=sRK1@CsTYmV}U*RJSIN;_2eS_eAJw(yOweCK;5hc0TcucPQv z5G!287S|x-=*Bk&|4iTl8~DHoPOyR(%-{w)_`wj4u!JW};R;*$!WhnQg2UlVg0%M^ zv8AtwM@-@pbJ8E|x$0~F0nKUpmUdF@FL4WWlsl&P#yB3Jjc@Yd?&SE#Ko%x$HTF6h zFtVwzYbt*siOt=aIH#J`3#X{kM3H_o$XM>+20=U&EPMIOscWWKh|DqA^)@L>-e@Fm z2vB6*q_%UH%Sj?rmml-kqJ2*xweM(SWNBN(pk^h*kRx-F+C z9~;351aqN{FuwJzwZsH2uFXeU z41(r)B+o;Lldo|gCvv<9#WVI1j(jWw63-~cDT=`lf@l2~w4g;SkZrMr-6YT(kGtHl z?GHsU|2-+}V75_`jGrV=JH|Gtc9ZX(lzr6U68=CNKbAqTHaNx~>0pKdyL60q*kT^G zKzuLE;SXV0;}mT;pa{u*ic~a<9`gvsIOq`!YTSbw^bm(Qt`UrTT;m>^envQ4Jq}p+ z{u=Om2R|SY3@6caVh@>;x+)%?e6-^ev1kW20%ne1{9+!~xBNcLafxokf)}yyiJP(> ziauZ>>Jhv6+}F>3t{9r_Hqpm7^uB_=i`>i?kan8&Vr}@t@gGT`2bi!0UvMgX&<076 zA(-$9O`ry9um?#n2x>qpbSIiSP!RfD3HE2Drcl z|0wtee^3UQ@CVm$4Q22L!N3M{5DaCY38KITcL02QaS2Q3e}!T$gJ27VKyc^beAGY- z@G=hj@C^OZ4X3~{<}eT1fOfQicH;LY-w+GGP%z9lP;Td57}tJiICsY;K}TT^`Y;Xl z@ofK4e=BeSD=>#q6=^piY3)!Ddoc(mr#e|63}!$Ev2Y1kpaz4`2L3Pzen1Ok@C~UF z2ltQ!_mBl`5C%=a2&d2lQo{&l;197av|Ko6N93fI5|tdI%7m~Sc@Cl6YH|FsWf)ftf&2P^j#|*-73dgV!`(QwI*9|(tM{@8DJ~0^Pa)xQxjz1<+O3`uXhZ5qz4TVJlB9~ut z2xEF^69I4+$MT0xrVw3$24~<0Wbg@)PzPDS2v^`2{$LGLa6NHA2L6BsZ%_x2UTOQh(JxQX>|Ia0e%N2Xl}Le}IFcU znuaM4s=1nlxtj8Tny@JrxEGs%`3Zi}4!DO4z!wbH@D9M24&x9G0A~%tuzSS-oa1nd zGsv6oa1V}Q2*sEru{oX8S)J2a8BAoI+8LXsX`QCoo!c3n;z^zP&;~-3B&+s%C`V4z84H+7uB08d&F%l+vq9&>j|0=4Y`>>)e>Z1Fg z4An3aB03ovN_0k7OLR6F#c&NH`lCP^q!((VLRzFodZb92q(WLSdzKHMprlY5rBXVj zR9dA}iW!BGrC4gBTAHPnv87#FqJ;sbWICp1N~35hrY9PvUb<&$TB2NvqWaLHblRdY zI;VJQr~Xh4exafumTWk|1HNJD6Ijta=k-a1?@i6lL%aWiSS{daJWKtF&sX zygCLq!3D4wtYW|gullP0kOf_k1;~o2rHZOuumxc7tfM-u|I}Ko)_SejnyuRUtf|_q z-ukWJ8m{6xu3@06mRhQ!x~=NEuI$>b?)t9o%Bo!;udRx#V(_WQ+6DJ&6X-gx{t5=4 z8nDO8s>b@M`+5|{TCA?R6tVgb4co9<5vvkw6BA3Z6dQ}N=&&~7t45)#yIKahdaJhT zvH!rUOi_o1%2X&@fBba-F3XPqAZfNUvyD`28-GZ#C{voh67mF%sbo;Y)o40zqw|v{T|9<@Vl^MymBZh z`Nveg^>;Fa6PY3v4e$@y`xFhZz2uPqI03%k>l9_%wQ;yeyrlv!_7COz4`=%ixcdOE zdlTME7j<#H_j|bdyTAXC0N1M(oBOl^47E_Z00nFl4zK|8dlR@zx(q-84~)93o4TdD zx)NZuy(<+Ge8CgE6caqbSG&CB`@7Fphj)n+|0lc@DcrS)8ohS-!YfcaZ(+A|(Ws_l z!{e*HHr&51+rvqb01sdkxT_QwfR9MQTPTblUwac8U;!X7#5b`3LHxsy%D+~8#s6>s za67&S0KQ#Z6_kqr;On$EfdB?9x;K%)M?tlTgMiR6mU$zs0+dH zOS(gB0TWEZMr;$qi>P~NSiOaR&?~+9SATZtF?Q%eGW-^e8$vmp0N(4xJ?yeu+^9Kh z6Y{$hBs_<9coUH#0%zeu>Z<}LJjfDY0k}KFp_~*ii^aCgzv7$4UQ893o4LMR#!_p> zX^g;CySlZD6nxwix*HV^Y!es!%tryiC{zo@uzM61aJB7g6TeFWBv6+~abyizf6*4b z(2KJ9$Dk%$%Ks1$001HR1O*2G{{Soi0002c0+j&(2>$^82^>hUpuvL(6DnNDu%W|; z5F<*QNU@^Dix@Ljbilx%1_=x=c+g1lAO?maUZfQ9@5MqDBo4MJN%NtFgboNk_=g}t z&wm089!M~dfKj70lPV>7;J`lu0s}0aO0}xht5^*}C7LiOL84x#B3MWufm5?YhdOPT z^B~BG7qUY1fMFyC9CuGbR59=c-x>{Z)l?CeZ{dH34<94}f-yo16bweD@W8=?1(yZx z$J*wZXpx4PZYYI(s(O1qUA>nEeyB@7Ta)yG~F$0q%iq z4|e>gfnami6z>|u@o!{7zy@om(7qyJD`*C9s{iPYny zZHmE#od0lPCsktz#bGs^N&9S@hXt7y!u*^uK(!D z&$0f{Q!GEp9{UhI${y>iK++a;4@JWM!+|BxNSca8*J?!UK>G+(?mqnF^N&9Nl-usF z#0LA%J@@1j?z;cH^Ugo&4rGr!`q=YMxb^%~54*UQdBCg_^_TF&5J!w(IusW~@x>Sq z)Xv5nNAylR>AVy2Kj|>^amf$uOVGY7Tl`Qv01C zy$0oDkJ0(m^YcRm7qrbk)kOWw)Co~7F|Dp$t@YMimwB&T^b&oqJ@)u3P}yZ)d(S*; zuZN^icR4$6%Gv$!?Y{9}zaj4!@; zHIJwM&o}>QbNTVeC$IeSl5eQM9V-jM|3*u3voY?>EI^><3FKjgN-=W z7*3Eip%e6U_6Di{us!=Qvq~)r;h#_~{0H5L!^{hy00&6Gi=2WW`-t2n3c?9JxK4F= z`(6Z#wJURF%Us0jn?W|Q1UyLL5CY-GGXxTjfAHcMRuD+;2m-&p>4Iyzz{Lv%GQ)qw z(1wDM+`jsyvVqK_hXo9x5dVjG5g`5p7vrc_L0%ycGW??)Z5W~IUdIsO`OP80s+$_x z;5uD-Zxc*xq)yAdh@g1*Z-5USFNoEM+ACL&Z4yYkT zVw%u+07pu4iGbU-ocl5F# zdc?>tzm||02m}jLAczvK(11E50suP*q(E5k4;HYXnicWrKorWaSYq?0IQ0+A5Gc9} zqRyL>j2t;pcg2E;!yv}up5b2jPl4pHAhjqZK~_k~Z~Q`)taM1|h-WT@IFBFSDu&s{ zDv*7O^;-ks=;nkq4rPtN1pkPhK=5D?DW+pw7OhG~zh;jd3?xl4D2NlIA_ajo;UD(t zVGsne1Z4gr1eZ`inhx@bg=Cbh^FSHeHs>#!=Jd0mrO8geN4nF24|0_3o+U?TMbz5O ziUc7XHn@?#fB#7Jp8YJLHoh^9pAzdEyufNc57G{6G?Fffs?TD?u*%k0clX!iPlFxo2SVk4TzA4~PV;Iq zC_U2RP5-E^dsm5v`b`WUWE@$4X}_)bXg!h_(vlMk_ZEv zlYIXO6G5&33aK39jcOo>Eg7=UfoLPnYEHIR(l}cYp1BesmoVHs=+TZ&%atLCR*l{!E0AAofgpT1wL(<7Px>Z=7W*ut zK;R(BNbxjg#Y%?qxc;LS{%FU;QDa~{l6bWj@tzbNh>$ntBhDU=xX`bujb${I$8C0(&R|k?m><^zF@)&Ww=zWH35FbD{O*PoF4yI=qIw|?mte*{Q-G*p1? zH-H293+X3NBt$ZshB*tSFRlk2-*x)M|g|6ct~V(d9?_83$|dYn2WnujHtIz;O0hbbT++cc?Cf>&d7E&QEEFRjG|G2 zBq1=-NNyx?cF<^y;J7v3qb}!G6<$YH4WT)`bdDc(VKre7K!=W0kuGmkE}S!B6Jd+u zQZyLkj#-5ft0O%67>)#q6<)_Vm3I(vKt>g05xtNQZa5IXfDNl8i>*Wungj`zbqd0; z4-2#p{>52mNDvWu5ppMY!($6e({M@A4xgY>DrFDmL_C4?3@Dk81OJs@7ja#3=RAy1 zY{N4U4>@aM#S5v2j0%AXd}M$H0h9&#l&LXT;}BAB@DG>JSOkHU1#ws;!E^8B2e|hS zLiTb0uuIX!U;h9MrvR39AP}E0M(R`&BeVxB=|}%C2uEiPXi!-tF-Mhk39G~lA?XL& z5K;rdUkT|DU|6_E68r-m)2Pkw%KsSMm%dIR&c-!b^qW8XaEe%PzZx?lL=uD z^NE0@0Sn!$na@5PdLF0S#d z5&JMgJacM}IbZ@|PW5@4ZUj`e$%2gl47~6Lj;RL)x}zj<2YyhM1JO_xfn0h}k^~W> zH%b$H>6tNF5Pfi?3lww+`lSys2+Wp~%|sAYDhx0JL{ds&G{I5bU^ujJW}$;u^WseH zzzckt5$*5{0Xh)-5(>%%Qz7XP-w1Z&kPfz|a7ma}0{_vcG*Oot!82uwbQ%$I92cV5 z38tEw6!^%G0&$cMv2=zG@Kiz)Hc|L-J4$EOUgxYOJjE4h7Rg#8?uhI;s*OHaN3j_tIo-V~rY7FSJ^x zHE}K48Z>I76xW&>;nJ-nVN;;`tL)mY?)t9qdUNqQuk?zbizE<>l&}Awul%~N{@Skq z`>+05uLN7LX=Vwk;RpzOss`Jz4m&C705gfH5#&&@7JIQ6o3R?Zu^dYd|KJYp@US8~ zvS%U;Oi2^Wf*Pe)iGbI#F8i`D8?!Pyvou??HvfCGIGeLNyR$sovp)N?KpV6|JG4BD zKtxNlJjH-Y!4C2etfA4X8j*HTYb|1@R%wT>lY*@eQH#Hblnha|RDrb%!L_o=8e&_j zwsN)@LALA(tq!49tID<&@kbY>wv?(6T3ZllHw_G^o;4A!`7pH%VN+rkuKc+WhMN$j zW_fv=5ccvlKZK2jo4BYawm)Q-2JtoaB1;O94+EpOX~(wM*kqK;QH%zL+>#csuxt3SF1pnb#a2vZ9l@HYy6*VzPM+2+gTSOznpH3?g zNeI5-Rd%nmF9T_*1fjpXc@P}c4q_*}XCresW0!ojIatfT``b%t=cxa{N10_0_mX+N zq&e4`NWpY1i^>q-1v9}!z_;`@D)UB*#=VusS5bHm`|vU03%3evdGSUuV7tILBfzZ0 zNA?i04yU*z5pVMlaz$`AM}2HnsO{m>8{(fuqCM-`6p`B{OB&&ZR*eyh;ZxXK>wANr=m0i@9aln&p} zsjN)W3T@I8LCOO$(%9tE%>RSZDxJzK?aDNLemku^HXYJ)4Ac$L(^Ns!594}e2+LRV z(=~=o!E|{>9UwVP$cWq2p%v9tkvSK2(^%0j^fNjLw5th&jW(4J_=wf2!PIIjY}e#U zRL2i(q%-BB)RVIhv1F@c*e;ngAHOTFG?9i2p$r0{*z8bBPWuh! zFb?~0O!hEBC4>#Xzz*UUF%@VH`M{^tmkuSwjx0K<5Tn+hBa!?v4%1){#M2G$@D1(I z4ea?0_?wpLFire`+0{3u5TicDpexALa;sEIfg3;%sXi#pIsAZw(*T9`Pz=4L4f9Y+ z@F+$0&|9;eSNU|X2bme6GjeNYJ7AP0=FKzlHt|2WnQK?`m0kWS{LeX!sEpa)L+WAuF5Dcul$ zusWVeOOOBw)_|Tr)};Sn+7hE>n7|7Khs!*QOu*3L%fmC!WKLZ43Cd8SB1a1cGzfzb z4w6X_Qlv>*Ha^nHHL>7;I5<$Wz;kdgs0Yyvj9{EXv{w)T3Dr;s(5GXApySo`5A_KL z(A1F za6L5%pQdi#td(uoO50f!It0zMCB22aDt}TIWuM%Txa4)?NCTs2zZQiT2z4x>Il)dZ^dAam(}X#P^doQ3n1W9uXV zL^kJ&M{N;gqrz03*Ai3mEle-$c@IzQ#nfvqVqGh5WIBjvG>3GyU-LDCoiGErHVXzc zV81Lv&8yj%^BLa9MzdMT=JcS2)&SztoKyDyu`e)1Khv;A-v9{=(}aRgIb47Dl)tt6 zAm4--`I9sGLZ|u5Soy1AWF!I8$o{D_9buf`b_tytyy83-3Hntr4Yqd;mjFODA=B67 z`CXIx>?)xW>;X;ND9X?EG&)&dWw}{+0W0~hT|)o~ z^W{q!^WeUJFlFAvnN#OZo;`i$e5a6_t$)`pdHng4pS+|^og&=$RO-~5>AunIiB!!$ zGgQ6ils1siBUt+W-CIcXm(F%%{;6T{uTV^s2phPx>9x*RzI~he^UF8rL3{bA@%r}- z(txjn1`dA6H1OnxQ7KRKO_!7QS&xx%dwBYZF8^`G-NC@c1V- z1b@;cFzvWo2)hZr3eTa9^4id=@*08wp>RT^EU2&;dM`iE{@Fq&M!FhEAcWod}4*4e)bNnerj|%@uB>zc3|G8t8 zcLt-!ATjflGO@+P+k?`kI#g&SO{K~bCo~LN@6)Fw!w;ct{&8_2K1jOaA58uk=O6kM zs^FL)T#WUfSWYaUhlHm2t`AcwgM^=Xg6dBgJ!pl{P&}C#C`pANNpjL-x8=4ZP7j(V zpLY1k;vWUH>lUX_AqwT7RS&Yo%ydh7bi0%SC^4Z{*Zd;1gK%VFx`Bd-i@G=F^~&0b z=vku}Zm6WkS~*tv2Ty|z!DS(Sw57D(gbqcR+iwp_2d!QIIYz>eOIjD97$7QUAV|KL zp^=qKswZcI7@4Ysf67g1f*1!X*dQz@i(!eIld=Yqf9g3%4{8TOW~f$% zlo2>@K62UyF@v;e2qkk2dI!X>JSAKwevb5KBYOHg$Z*34O6Qtz`ab9oY{K5wa?H?G z2*b=3dV8S$B%PhSs|sX2_lDR$bEAFxa@}_ngG#5?(G3cR8*aimah!IbUp{PVlr^3z z*t3tRcF3QRu=dRH=Ds;`a@1qg%m*)@p+(!T?7QvZ_pl**e4`&B^7H4v|L-8f&`Ki3 z5PHZ?Q<)MUbp~UZiGb)O#hX_G#e|j3NMs=Sz>1h4NU8m8$^UZs2$x2*wL$-ta7z=h z&bL6MK@2V=g_N4dJoxcBgVc&1D`^Kk#@4rVqJU@uSAz>1B&K@F@iks(&>)(~AX9_SfF7zU}uK!nkmflzX3BU{oL z2a={=v@0<+8i*%_5eh0DBXIvXMX5eTK2J78laE{@L!4+lYaQf_mR!p}evwOq#3E(` zA<9B#<;Oft2N=g-2DKc=wSOd|7~{Z&F#1+NjU=*~5&!uI$fzR>;LYP1zkp?Ddek;d zqU;}tiDV`J(JrFk&sU_<@TiQOQa6G1T$dIIwx?C{k;*E6+;4x~;@+Mhv!8O4SK(|9m>h9N^&lYdx4 zAm*6HIJ~J!-yLb4mK+E#AtKS3+2WUHOcPhZlum>MGZhA*#yD#+tKQ9vr55bVOjELw z4&@_=EAyzNkT?)~45oTi-BMuVL%w$~wSfj1Z2u^5N>%Q8ii`(|1u!hROkfh_u!IW= zOfZMgGD5U|rmbAajsdxUJcAe3zy?jyR8-?}_9uFc;}T@is)bXUdv>!iXhhH;FK#ZviR&`D`a z%ARD*-xu%L$3NbXA`{YJAQxGGA~tf8mH&JoAt%JcKG89Vxx2<5FF9RawQ}~Fe2^3? zX2p~FEB(F!LjG>V9Fz6$b?KYo3FmKQ_?5~_+FZUV`;Q-C&T^jh>=fD}gve6?5ncIP zw|_Vd5{Eu?p%HE9MJpQ7j!yKV8U1KULweGYZgizJooP-}y3-@J*`_@`YD|;*(xVg&Ys?WMMw^D-N_%GoRXt=fGB8w)`Om zZ%E2}F1|Xa+&q(-d3a!=blr~7a-6a`yq=U_r@Z4HD+Kx>3De)L&%@z}6wS}y!Ko4A zMN&Y|M`1PSvC3ThAhiMe+qq6Q^FXCe_HcVmYNM@W`*S9OXBT4qx_;eB zhr9?Mh-{wa7@s`F)lPBN$N!rug>QW9YBOEAkDmDP%lz2EWqQ*(B!ka?~fm#UPqY5*qgEnZwE5yPqObRPR2##8a2y_a^Xon=R zhBBmvGepBQRKqo7!~ZsP!#9M(IF!RVq{BM2!#l*oJk-NIa)}#@sYt}cOw>fbu!Y4L2&t075nRDdB*jwf!DX_( zf6x$9WW`o=#o9Y38XFJRd&OF`#TE++O1#Bg@n@V5(mThh-23VK@eE_=Wfq2YJQtgFpi+xyi3Y%wh~nKRb{v_=hl18iP0($6ScLScoPtgKUGP zQ)mKj+>f8p)gUtA(cHgvW@Zx4v|}W*jU}-~_UodJ8HbPC zD*yYr3nb9AKx%;NLt?OHg+56;j261%M1YVH?#NIO()9uF9nM@haPA$|oF~Ve7t@@# z*ef5EIUk=n-^f?K>2rQx=KPE1f*R(6E9XLbU%j81dyg|8N@X0%F(38>c@&#Rs?0~q z%|{s;N81`7&c}Pl2%x_VU@3|4ZP*l)u8$2mWN3yX5FAWi{%ZA6}^j^$jD^rFm)3z%!J}cuYz&Rk)$0O#A>`y&2 zl4ZWw_R0d)vla9j&gweV>ITQ^rr7G1%IbP$!A=O?uFvZ3lX*6Mb-!r!pkei}clBsy z^>}CXWl-Exrzbuj3f4cSb?g0NOWPqWkHn3mEQw zoSJ!zM+}Z!2cY0Hfwm@)MiEFekMUX__-58NVtwcJsIA56PWbhX8Ht@W^KK}&o$YE^ zsKc%ubF{r;_e+v#E!)I%HKXjtDPO>;vTB~X!YX;JJBB&FmDEd4~tewir|OE=1$*yor>k1%5o1& z#5XY04k~A39p9+`8h4~c5@c{5)zLZ?kq{Ia9R->=*NY!DXdTtrIkzM_H@|moZKS!| zI{bNh$SXxYAd z93A6Wb9y}P2L0>{%*Aw#YCZsCE`Rm6necVBv-y=)gR2bw;Fp~I4`t_k7cB?GK?|FH z{vu80QS-XQIM+k)bPImEZFIV0ce?9)x)*i2|LOF}uzc8fdenD%JbQYwdwP0#`Um$9 ziu%tP=exuAaXjO=*)drXdA320<(F87TY`6hRY;upjl5HYVOfkzAoj@yp1Al(aWH`-EwEpbe%QbebLlu70~yMV<>~I>{QiWECFzkF z2;W~=6tUi|S(z6#(Z!=^&AU(SkG=LR=TZ5*KI@)eF&A7h?7o z;(iwr(HD{#7g8k`(oGjK{TH%x7jkdrM85hMmEa^h76I(bYpOfFqn1s$NH7_Wo zPv8X@6YOddgkmJPZ%4DJp1&N!e-MjF*P*5qP9DYom74d2&rMJbp;wvHj*WqohSLX( zX9Zp#Uy8I709>@@e7*qlF&VSCqk%WYiL+EujA@O@n` z_p9{ZOzx%2*J>v;fxvWZ?0oc_xl0cg(q4kNKjc^QuT!r#Id(MTUaF-Aa$W^|jk9Hp z$^ZUt;;83P<0`iUi75f(`%1tXV=q{I72y|G+CjlI{4OW*5-%YVt$%IFXqou=F9Ay_ zwG)Ova__o>2`Dump)FVl)xLD-=Z&398m__DHYixmB`}tb@=d-q+v|u2Ml6b@=ZSLz2zW zFsvnV4xYWNwY%=ISTlsymh{h?*Y>PVG$vb-9dvFHlHT%}6&bv-7vZ_1SNCIh592fs z6I>6I5)V_V57Vz6X6zqk{T}9`ALcV27D^r#n;w?>AC~7H&@0vIjcTK-du{#Nz=$!S zuk-Q7?u1iXY7qnCx&Bdm(eKGK9uG<$51Ss3`X7(y9#8fjPv;)(xlw7ZF(Rek^|%-| z-;zkx;H>TE`09Gz)A7cS#frdCuzK`eKl*+S{ji6A!~;5E;gRz?puk;70vchLeH5f8 zhMbF_9?rM?D}i3Z^LXHg8Qk1n-0D#B&sV+=e-?jU?4NUtWC}w9wu@3`hhh1Tx*rFH z)+E0|qsjT4{&G(izQ_=EJ^cG@x>T=3uhQvX*_gN13~-B^*Wj})r>@)QIbk+6JL8o0 zi#^XZ{UGWjes>bi)^yE$gwXXg8kcUBf z%b_$Q4k|8v-Hh6wEYYuadw4h8V=HHRN3;GF6I&bSZu;ks+<=UTskiU`Jj&f)pNmAf zExZx^hPmD=V8-vgYC->{Kv!tlfBN?uG$3Y50e|!gj3j#@39%So$(RsJ2&P#zyTA9+ ze1#6PA_<|VIv*2o_;;@5#;{O3r9h)6$@W2P(f^x9k7G}+2IJz6QH;dHR=zC#fz_}i z=B_xcz~aU=dz$VG{I|Z!J56t+7w_3dglAlk#O&x9?r$H28UCGTA$pI!?cl;%H=Lh6 zhD_+Z`OT&#FamIExW0O4%}iJ&i}|JIc+m%P7sTor+H2w+Q{@$;ypVoYn)E_u9-uU5uMoiN|{jz!Sm{$w{dLW=mr~f zFvCMsqzOc9|#xLVe zOrbtH=X-5Nk2ji>FZFJgC_4ee^`t{2Zf(NDXo+k_eL1kMnCGzAQbonD%e;8X-(R!* z#^j23`q)$(XS_rv)m3A|uyy|}7r+$>iN!SGYegtox#vuuXFJJ$o{iUJ`Q@9uZOUS{ zm-1uRPGS5>VLHqB`(tj8=U5<1(B<{r9z3w*>eABYzrTJaLD6v0mD-dL$nu{T_lfHv zIS;9;VY7G=E1}B#SKIU<*`Ej;}0rYO{SgFa&SKk44_{IdZyG86h&m^)&bcM;2|9O{iV?NWh z((^7L|6(H~aibMaUiXQ*VOK?pUN6#4KcA}CK}Ak|QlpikD2nl!M!LGDzk?pz@pV7N z+jBfQryi`=ch7Wguws4^{o_%I9MlcL0&2iES!z+B#!Q;@ya#Od79fvN9sM)^ z#R`@$P{YK1>%eC+&rPSwW*eUNzm;ww&);nE%(YB5RQdjVZhlcV_w&4=`u)Rm3+(6f zor{KSNY`>p{G9m){>DmOmpI%{!m|nEoh;`L>aKxTjlVq`>z)#%4$99LCsG^hi{<#7 z^vf4#Y8xA>Lik*)pD!&;Ha0f?Q$a8p8^RPqn2Z82ioIAAdZJJ2^oFq~1IcRoY4i35UaKu*is-wV!4%O61KK zoGW5ZdZ0U!s|}H0FyD@*mlulrR%by%X#1Zi2$NVCfz`fkS4*NLl<1X^Mn!1bLzg8; zY=qhj?UCdJ=wO7K^rW0|&N)b>;~O3sn=|QW4av&KCD|UQXpw~t?|UF4yVjZ6=bONhe|zBw;_Zk4(u#@))OB#D)zC5 zZ(6IifC*>_B5^%$KtMe#_kdzoXs(#!t|Lar{D3UPot=BTR3w|a(g{#!%&pQ`4^IZC zv0vPX^Ckkm*b1#y!B1FL_uo}ZrS2P21hrINs>xA{Y|5aqpV0BIs?yrTwOCwPP^hG8 ziPY(Yvan82gUn0jfBG|stQcDGqzo(O{ItpjpR z0HUi}C4Cy6#$!JG)bki;{i4V?nr7sqQV5Kd=QkX!IY`wzyyFkX&|KS1zx@uJ3t1`tN*%Cq8KL z0Ts%qv`K+hZF4wH*`ii&Ss#j#e_?)}iAvlz$D@t!_fSd7!vLx}NRwx`Q$ERIICdVT zmkIelnhmy|s`~}17M_yFXWRsPpo0+l@@Z`KcgKDLvZ_2rlz|Eh-xIm&HGzBq9s11H zWBV}^Xj@MJ<3PuPYBIrEQq*o}S}fx!I9hwi;ATdGciC`dMdLl_!gpAjO&uMqPm3mR z`U{%pKa)F(7~_9W`3m*w3Rscjc|1<>>UuOZ^URhqjb;6jr_~-c-kA7stnlmZ%1TIX z*`WOJb>z(w>1)l}>X1Km3ML=q<<}6CDT~g4KXA*StflJE!XM2uw+;+bW;in&23hLA zb(0q!Ir8p0SK;?xPb_gB#a7R509fR`U%kIz+2tYsu9aefZww=EzAu|(M#|PJFV*x+ zyqT3rTcG&S^Q4Gy7>U3%H41Bvls}FDIOUNns_lwdEPY-veY2+R!g#x$_PPUyq#YUk zlrL|;M+_mCN#GkF-7Qol!T;F;KnQR{03g=A3$AF+)Ql|*%9a9m|8xWhcOWI_4dB7b z7HSa2S>Ux<43*xR!V_j}oJCVd(fC36LNKz!2T|>V=)5!klK=b6y<003@Z zKKm`46cJDL6xQ|x7~f1Q7LrZeY5~! zX@33vGu5FbhA#lyWs}*}N`N(q)dqmk1sM1~1>eS!y2g@{Er2Ia`8y(M0+f?zBr4Iie8zNoqvoQKUQaF213TOV{p$}i_3@`x1n(Zh1hI9!Sw zWCbG>2g>s9-$aRUzjuC%qHB16)&bk@Wg2kpwMAV|tD% z^jO1>v6rU1Gk+^Djr^AFz(Iw_f8}G>z>Su?UB|XV^7|rjGz(wq6#{JLG#F`QP@gS3 z0poxjW1Inb!0)+Z?0|a!^syV>Sg5bZ+Wga;iuxNIW}|8|2eX5@_x7j|e6eyjmYyb% zN#HP%rl)-DHg3(;PT0|Jx&azkoKr@UUZtu`powt|>na{To{8ZoZuhAC=| za;Or0d&|lBU1!4=jAJ>=VU}26rDa#t#;#9krwaSTt;1=r6=%zj#<6@`yc~OcRIF5Kci}NmrUzxwzT$UU11~V%7%c7@63_tCig8_b z-|=%Lj)OG(iwx2@H7Pf@4fnRpN__0NeBDZXeYyPJm-t0-`6rh6f8q+rEeR;*3aly# zY~%`RFA3`73LY&9p5+QzEeYA>dVgB-{*o*7u_RcUd8aL3U$Iz2lFf^=G>AwU&N!z4 z=JsgqasSy9(%d`D%^igmt>CgB={C9x#u*X9iEij#>V(C%5;uM>UBbt)b^^qn&g&(V z>gC19ovM5Ygq1gxhPM1Z@dq5L?dUI;YPXeY?(Zj3I~w?-;Trz9@edA~1Kf$`Dj(>d zrN}#elz*0Nb&yPQ5Nk*Ld%B~w^YeqPLrscfVc3BJazC@Zhd^`R7gp+=$7#{=-MRF) z;lRO+EHHokS=0J6{d)|Oov#Vl4$b2>hb@ydiJcA(I~p_Id$9@oY_sthq)m716YeO}YLA9BwV6jEA~N0`K@6^MbE z8RcMb{XHwOe13csj^Q*C{`{pIOl1fb$A~Y$I4IDAc78#L_wy0EZS*LGHumLl`Om}h zkL%@pJl$NRBn^5Xj=qy(5qV=Kku16>LqYdGv;lVu4rF`!9{ty zXPtk|I$JFt{USIXz&dU#0RC*`ZG%?~9byfXxpXbV)Y2#Q_+Js7S`1I9S9r2t(=>DKJV)~|GskmwtO&= zZ}Ah~LY3=c72l{{9k_1y$P=iQB?hJU3ZP!?dW& z2-YGQ9R|Pe)_fT1+4Kb9#MHpkYDlNhk$8^OAxe@(BYSWdn1`V<6_fk;MZISePOnT^c^wy9Q zBvpJxypJ1|bj)Gr2HG_`7y;SPu1XCj4H8`dF50Ot!FLPm6AaG~}Tp;HJHYBSD$< zP1iH`3wUO?1iBlHf=UJ>l26fjcQnB=U21ig@D8chOPlB<;j};|`VFWg?7Z}~o z*b&`*SaQ~#MBdT9j3OGRFYr-a9Kdek`v~KEY{GkGZdq)+wocLe2*n^6gCdVEQP(p~ zOt0Cn%%L7!cL1D5MaTw5V*?|#xgbg#Aa6##^o}rT-XPJ8(DLdLDnuy^yv-5>vS})V z?v;gr_AeT@BNLGDV?~-b%w6}`>e06F4kcZ`9%=`q+*&lVVyA*ZIGp{TLSfCzygDa( zk9fIA>$jNHg=!QwXeGFJH}STY_Ee&b1SSQMFN1Fn*Krubdo25AZ;2WVwem2|9M40h=CSz!kWsND!dr zWA8;C>{fP)AEoW~hgo=nJ0GgQDuR0w7IW|afN?$mo zkNU9^t$!aiOk171j%0{geyuFRT zZ^;kMQZBVaN@Ygm{Oze|g-O>d>u@(awR&jgDJHz6*Uw8Zz^FSN7j-@AeO~gFd#vDO zew3LsGQl1VEBr9e*WHt(&^r+0j8$;P^g7ZF>A9|19MIvfEBHF~m9PQGpD8CgoJHmQ z8CS;J$P5o*ZRY!p}Y$}=Bw>5WXKNxT* zB}6J&B8$0#N|a@ED>_Qc<4e%f4M&k5{aA?80>A&)Q^(cYs2|<6tURyC)rZi_7L)+tghfy1Q*H2u^GJpFpI={gjU|et6ZNL0y*!}obIuHcGj_v+!=;unDIKsJX}b)&b>1EKPzR6Dd8-=Ed%d*j z2`P^fHy(grN4yLUE)&?4v*Bl2F%A@jyg^QEXk9P`#8@6jymrS`aIafM)go%NqECST zm9VTF8Go6&*X3@6+g!jg9(K;U=@=W{Ju#SiFinCn<(Av(+xvEGy)0$g4c;&_0=ejp z(HP zLfcs0^pE(XwdnrzFBrBX@pSidU6!xtK&v(b(7dANiIvZhNzIo|TUuKZf_?$?>@WAl zPYZWVF7$<=2c!JQfjT)#mK|vetN}G&29x~Gc4z*}c=r}5@ORU~cwnQw41NCK%pkl` z8`_K8_)n(go7@kaUuS`;p$8$|_FLpX+{sE9p4s0$7A+$eV8%KLdUESa=%q%n zlpU_s?w1E#;b$Z`Objt8j#~I!h3tg4y(Pu;H+$Vm@=D2hJotyjL*Dz&=Q*}WXCCVQ zY@V1;-bjk^T>Ex)wHL_E`@IZvC#5II!_Bc5gwSJ3M}X!5sZ*g$_|jlP<$~24POWSm z4faQ}scA>_K?ZXDR)4sB4MJ+1kuMUo@_r52ZRuyG>pdK2d9Szp;cF0M<=?MCvdS~e zIwwk0LK_Br`?(>$jNC#x(HsM_0mp;UU%l1JaC<{Xz0xL}f6T<=D#{dK0_o|=MVCAV z`R0~su71oeCfUgDGtp%I9G`UF`zN4rks2gmU>d_j)6 zUN4%HdXgX?I((*f)z2!fP1gE1d7j_WxmRWP5hl76R zFO~WC6++bYM>{L#Jd->Xaooc>Z~fnCK_VuUL3 zSgXFRiWZeHm+M|oois2QH09BA;*R7M?1=A2Q@zi#gf`xsF8xVDWKy{F?z@gR|02_V zqnnFIPA^!HvTM{8dRokAodni@bMbqyp<+Gq4dwIC`_l9)-lMwOA=Mfeh$V1gl9uVe z1xM8-ucwT=+0{w_dY8d946i*$^2lbOek-Zk?52S(RLudAfR?{yX(cud2arEvZs3uB z?hCk?c=2d{uZM^Ckax~dCiT@$fo1LC3jKN2VgBG#nVC*&z-^y!lFj>XRH5fS}(}yC%TuPeyK=>GHl3 za@Qqnabf53x>4nO43AgDO{GDwK!+ zZ;(={(B{KFj2z~EkC!j3nk?6B1rD*;QKqFF6hNHuCqQhW4hzYza<}KC#2qZyx^xMh{_t75L9+F#yo*tt@@%9)| z^shgk&|Y-(z<0fqje|F74DXR9npu2(hADR2GE2V#8>)J?Bl0Aisq3(Oc?7BJ)vWLb zZ{@9dWAys;??5lBdAG{V!|j*>I~+5Mdj-PKcbPQ|Kp=0j9O1e^5r7OwOd%BrCflZ4 zC{*D!JtvhSLTZ@D4r&$63(4JBf}^fgi_v`$0&S9Qx+n{nusbagWAP4)Vh^OQhC1MS2}7mikFGqWHuz(*ZnL#7%AW1UohPp6R=m$M9&uT zd}&TutS9QqMF@6_jQM0XEE?iTUw74GAHbjl8qqmbI{~Se~nm_7%c}L3Udijnm{WZO%Dkh>n4U2C@ zqidwb9O13R@r0nGd9+-TAljD2w(L^qkWS`xXtZ_#!Uc&^Vnb;W#OQTIg7bZn#r%8| zTCGu7G_&bV)A5*w1vj&7F6{3FC)U+}?tG^hJUl9te+j;{+yL9>gs-xuh> z^kRhnnM3m1FghW?#<@Z>Q_LTdLOt_GJlRusQqOxNwebtJI6T&`$1WALa#@20)63Zr zsBp6Puop1fN_B*+7vHeI>MK3<1q4{_<17$A_oR?(pkrw=%P!}k8D|ku7zWNO4l7+c z8%x}t3T7jxv+?qk+@J*U4Kb@(Dhz__-)yD;LBz^t-Q9P|+B(%qs(`lC5WuA2vhG zJXx*nN*8Zl@`pO4HdO$1Pu1Dp%n&tKRi`5pFABY9 zTKV=vI2+L>zVUuZH?k7I@MjEUp3j0ZdlvE`Ms-BwJjVHR;Bsk0D0Gs4TN?0hue)gP zJmq^pB%q=(pms)^@4`o0W!e9@L7$6>EgReFyiq*4$sE&mczQ<$bBGYkF(`L9pe`Xo zA6$+5JwX(AXcNn6&(4wHdksM)ir|MJVS_tiOAX;qR6HkJ-lW3?oXk^Cdiga<& z=zNsj4+v!#1`+hh(}BrsfkAF{>#iK8ldLU^T{lX`qyS^Ww+g3p2(QA={xq)5?oh6V z#0>?#9`c~SnZP5&qK$r5-{=8u{sATr!?+(tNwTuICOIXRlF>p~w<^fEQ%gozW9(e| zM!G;T9?$q8jQf_%SL{Nc)!5a$*;f;Ctcon;wZGn;afHAD{3TNWVF-E0O&I~CX99eU zZw`*KjEl5n9J3yYOF^E1vsqsPv1q*cXw%4(q@z-qdql{)Q<=NRdkSdP_O3Q#=`T}Y z?c|)jwXnt=@L_Rey)J~jmX>9+#e8R{^yrZsYqKIMdo;x?Mzh~8NtYj!96gR7H$S!p z!XnOb=Oq@g*I8%zU*ie}BU*`JY7*kB2av)dX|`db-=N!$7za+h;Ze~RhkmDJrONCC z=|S-E5Ghr*AT?;Yrk=q1I9O|o?i`Yvdsxv{EJ*4lA!8>*v8v~(oUJ7V#S z16yc_31SjFVm5GZ5{$1C)^vcw;#`|8!1ER)POj@DSa-(ZEMmOopJR>e%eSa(nc*e_R%`)q$UDL_0!#~8+WsR2oD{q(v+1&cEWRm?Z^gG-Zoj*Er6-~s@u74Q6Mzq;m@hPTB6+P=q;2YX z{o)UumzT;9QCC_k9O@rzlzHIv9sbQ9;`fk@GH#;x&>EXUksr1^NNx6k6J}$3M%pN? z3r|&kVFkyMfcp~Sy1&}b2p}+i_li^MJ$xQ~D6PSTkh^6+!ZHPe7ZR0jq>62n<)d#cB7lbem0vqIX_z+s@sG_->@^Jn z*z%8!{Lky&bcmJro8La7c@s9HK4y-oW-IBUpP$qtwQqJB%pb$^a#uuXs_bty!8@1N?0Q0VqxOShJ4V`;A_{Czs*9cUJ{bK@SPFFnQmOEUt?Z%m%OEkN~05 zGy7)!(pyyrfTD&cHELUJ5{lXp+*%OgVm1+BHQH^m)L6ZXKpI^2_~C7G;W|D&$|?lR ztjI3#d*6bvlf}HK?e{Bfdrxh6A?dBJs;`l_FQ8^}!$8M&p}=~f49W7B5(b4@`E6&# z74Znpg9|dEUX=a=735*X<@1+@zV+lr|GPk{VAwMBd;@kda>ontmM;MhnU1?YL9sB# zikPk~slfaf{DwIsUD4{amrju;ItAdoBeyuecHn19>rpYRJWYK97eGK##Jznf;@GAUpO{7v{i@7dIa)yaV;yeUt!u$J$ zKk+8rxXH&{2wi44-6$K~d=}k0of`QF^4Osu@GR%f11FW%@kf=A0aBr9Cc zS}x&$q1#%%rEfA=aum>KXb2&}9C!q*e{J#ZW`l4wj3_nFPUFft^$x`+?|Xw$#sF$cUb&ir$88xXN-`91dTVC4FWLK=ckQoYPrdR8CZ>1lB0j zjTi}SW}*RRKc-h=XGPrSM@R#+NA8PQHh&WWN4eN?jv2?UUX5;j1{d&^BAi%YrQ>MK zQc}eDOV-;mRcH)7YbLn+MIm8N7*V4Ir00sI)nZEO=afVUxI=NOGi;KMwH@DzXfue2 z+=^&kapolxq#4{^=QZnELC7-==6_&m1QYs(fQ9Ae&Zv64LkRhq=A*yNr^qd&hb(0M zTtI($Sjd-KEDBlt{&VsB1HZi7l843;8Dg?dk*Hm6xfeWzk03-4LVDI`OE_m2-fmRC?ZS&#qiDrgF5!mo!g{cnAD1!bO_8Rz`1S&CS%yam-Yko?lm-Ii?raAm_@Qc zM+;#M242AMtBx&QY)yp%OkBkAf4TxAxoo@@fd*l%Hy0Jw1DkUWVD{X7x=l_rMIL6) z>f3+qf2cbCV50xvD4_5|QN+JcWM~wX!WmuY8Pl&b2>Oge;amZJKm)}BA}|Giu_c>t z6JlMYtP1eF2di~#_Kw#^;Qt%+fx5RGQOT}RKo2K&F-Qvbq_DP^%#Y}-wwm4_YQMnJ z}*i&najd%Il{dO-m_P=CDTNWh$J z2hRex)ZZTcC*OMUrSqZXq4Mh6uiT^jyCdDuR(n-U5-{fZ8rbeH1Y@&{fDBDQFIrl# zPDu5foO(JB6A1uO^4@#txOXBV7%6Difx?9YDeM~Ava!NNL+QM)TZ6UnMT$qVM4j6; z!5AeN02!RNC*&z6P980tjs-{$3mYH(sTL+pe%P6(R^%zmqo=GyZYq#`t!kw*K!^r< zvcE=QbyC^jd5YeVx-N!dV*WqID)4C>`u;x{t4_-UKl1UyS!CMBQQ8_x4%m2=hXb`m zz1Vm_@=W!qqTe}^UWdzrbtPk86(g{E*Dc9Ui$Od zYR&jf+89e<)DL(+ydr;dEh&_pJM$i|az^o8>!Uh`vskC%FM|6=XTfCDFF+I-p+T_Z zkFDM$2IXAd7U8Yo6e0at7b)Sju{`BHMnT1T$9$G}=8$j$072Y4(nm5N6eqS3D3nb{#&e zUH*2g{pZ~kZY2A(Ei-wcpSW(_CG7BC4`0?}H`+pmWMIZM|O{AUrmoTT$&<1f&% zx*!D-=Cln32Gea)g+~;7k}Sc@N74xH;?m7H-bP~`8JwRKy3z;t-+C0n98%(WuysXr z$70dT)=A1-B+tg>a27r$eZ1WNI3;2rf1xeLIJm$0>5cEfPKMr(3vD`xcaL^5 z`Iqmz^3IKeyE#r)HowKa-6D1rX2ZVk3CiPN{BEyF#iy5V_Db@ic$`YFFfNjenC`6)pdWyg@hWb)X#A7{a>ol&HWEvb zLumQm))$ih;XXgEDf#emNWtHxfTNP&AK9j2ZL!pMD4msLN)e0_3kO=h4jmT_-AtW> zu8Pww%I=bvpSJRiVzcFrp;AZd2xIHu&;));$7E;mZPIMY@GhjHKclFMjw+|IM$Eo> zI_XC~v60gr$_SO0ZDP{({SxSDCEW@P!Zg8lx)aP^`j@=kzeT4fMaslgYZ_NJ!w*QPBG z`m_?U4V~`a3Ue4TkNIn#*FF@B>spsp8j(xs>;Qf`>l_Xf+6==4+vP#bj|0P!r(&S- zpWRAQgfDH?CN!{DVn++h-|s&^YO2O`Tph|sQEF-R`#nybfG7yq^1o59R}0tQi_knIEv7* znOiG{K#!D$!I1w}6?I|+RR3wbb@CklRW<|4*odV+zEdSG|3OS^8UbSnpH~o`1<^UG zLoS=yl#rLoPaVu8?EG(vJRHfs*AY;~gKh;*Fo=UkkyS>`N?ETzeAW;`N&Gz*8c5x% zg+=TU=d?)ks#GpI&oS^r#7AiR92-l63j=>d5$|4MF2(O-Zv|7J+~SYnsA(5p!wnqR zC0IRzk&OhPy9p*d$F(7VrI46JDb^P%Yn$quwe5qqb-qLR;jqZ*z_fpFBwr+2U?=hy zq?B10eDiC-hM&-?%Hr4Jn~g^>-*gWOzd)grf~^Vz@Uo&g**3?V>AlV7a+sCsxk2xk zZ9H~tRwvJ?>PS9p70~|6xu5QB@LQhb46Ij^f%4Qwjj$C)s%t(gDkfu?iWR3=GP{*T+;uU%(7p_J*R<>YF=jfbX-tM+NS=F=6RJ>B7dp~io> z_YsGkGgZ?6%0tR6Dagp;%x<+T-fZSvbxye@{=)r>;M zbVAFBrtvz`>6a*JCHZATjSty_-E+_)`mwvQxw6vj-G58V=a)_GMQbW{!wvKFSIq+_ zG2)+wmv^PFTE;(Ad6#Ic9GYgd4*srs>a8cYp*CsOhz0!npRb;$UbXGM6bPIvU%jlo z`gtlQ;J2r-cDs1he*OCo!meZO@%HK$21!jA-v4pI;83fP*rAft4zD^vj|=jbDM?%p zY&Eo_HBk~H8ze#3-3;yS$XISw1y}DL78ky_y`UuWEA`&zT0fkvWh>}3dioxYf$B^M z>lo1|)ztK0A|93vJ;O~Ww%I^3-{e-Pfsawt$AOP%y3x?j#;l&p4yh9cHt_>$?^Ut( zm3Jp>^D(AbUdh*HXVi*>XF|{()Uk)gXrVoXS^~`-w-=Pr;CET@x6(=|us`*dLeYr* zH)Bf=l;}T7%c`3R223-hGH|jucOf9+y1y~gqAVeEi-bUl*NkH_O18+#C&uiBM4@0? zXuS!9CtZ!zKP3TKkq8+r9H1$MNJp)^v(`Hp7Zd6oAqE6yDPj+yG57~|+S>%U`PMlp zS;7%*Enq~O+5v$ui6;9?wm?Z{*!i@S3kG2}od;(vo>gaP#T_Ir*iSh(1&DY7n-C{+ zvx;`5U?V7`HP*mm`TP>~L9&(XUB|Z4wC}g@wrsY_KJ{vREIgGcYtrk{L8iaSL~`{c z5azAIB>c&zUXFBGBAS1o^HKNRr|Te|p;fhEGGP>A=?!FTfXj;XAE_$=dob>I5$#*e zly|6Qu$^YMJFjXbJs?RF64L&BZSJ`;|99#fuG*~KroovkZmx{{R9z8o@) za{pH?-X4TFSM^I!`vT!3X+OmtvX1*}4*A6rgL*xZy2aLWGaA~iRPgRTe#H8wTVi14 zLOtY!aP0;}=z>nV$a?r*FMX$KY99G;ksaFX3#$Z~tFq@~%77#I{8qPKsE))LVjfQPl-)12SbN~(- zlhBi}BsH+-hhGOS;IcKPkzB4vNWpFXz(4`)RszBz%95l9<3Tb;NC7L*i+Oe&F%fo2 zVcUTS7-tkcgze^U7~qUVPYrZx#cu<*@urRRtABL}vpFqLy%a>kfIfJbk@Jn#B6U&F zN$XIwBuG&By_Z_dsYDcw@%sn|;|lfN zjWf=CHDj+=Q~JtqAWpy^)C913nF(rB4L-1n#v{`U>5Wp_RUI%^RVt0R>qK!fC3=VG zO2ec}|D@~8q}%4C`}w5D>m&@5B$Q+_oo+%64#wUq&^cI!NGcI$M>>dZi}|(bQkWoVPiQ7X^)%FgfN@Lu zn}zf}f7Y#afAbrz3zV>R)*Gz?9;<*)!Fr!uVn125e0qn^>2{F*%2CIW?o)?kM2~0a zs8NQ@e*Cvo!Szz+9^{AW^bBV@cF!9QHVR+1tqhb0>!SrJld#B#8)mx}vifst-c$&N z7b``SD(n(ck&&hEk@*KBO|dh(^gDB0K=_7;h@_2=D0|j%3WUS%*`fveR7bW^BUq*P z^$Ldcu6suIAn3~!NrA}c&1QDrOfLXLTD^}3W<`8bBQjM3*+AK^jZ1ZOI9#ARgw{~} z=8_;NHgDJZ=OaC0_b~hw9WU$@CkL7g63d*gUGLC&UjY+5FM3E_lReO3_`SWXLK3i` z+AIPgStk@}zD^$W$^-3=KLqo(NhZogJU#m5?T=lg17EIboGC2ZKmHPvZu;6Ge=Zj93tUpMt4B0|n>dd2=|<7HTHi5z5{Y5@CJA4*#4- zUJOVfDsSd;xg{Oa0j&!c@jwefO2j8&&+#Wzb)HzL0pK_z!fQI;6EwAhd8@>hHAv6X zk_Cs23yZfoR`3#^41X#X>x?)z5ZpgU@;`*VS3KMA|Ho}4k{FTLREa%m?=7)+ZK0@L ze6_Wzv{neBRw!!k+KLvXw6*tEtyQAbu3A-Ui`NV=;E{dW= ze^htc!2JiSe`CZnvy-Z}5`Ia_{$F-+f! z73+k+!I0YAow{POH?-MrL>lWDX6g=h1da^wCrTNRkow;__0QY*E|lNGCtPQtv ziyZXdvO2$|G9!s49_l?@=c9RUia8a~O|t}cGK_k|xp$N2lrmV+@C$rZapOBOKk`Qw z5AB6`vO3AQU=)^q6$)leyTMK1dlm3vlFXJjRBzucGNCNwB<(d>Xnae<(>ToGB$gy^ z-5Ip)=>we7-qeTOG@!#MBv_tD)jzWYJ#2VbIxP{=4l^n->aKK9{g2+hCRwVcE{qBe zJb3T%fzRX)Y)+!7Tf+v3NWn5T#VWzdcIi^@2p^RTynGIq8G!*`M7eCf1*iTO#`7Wk z)rXQ2Et=>;qOTQ2BW3Ub(wBm>?mu|_2#jwttLc_rfn{l-e;dg8_A$QY)}e<-$OqBJ z`dBWJEF|q15q*RCQeAd7q5L`+r`{Zc;o#v8HpAG<1L$=mkc_LCBfWK3N?rlQqThL! ze2Tna8cx_L>m`HyyaSIjr@oFxZ0AG_-fP=^`|ju-?5nb5BJy+Mg;1xaW_L6_Tmn{H z^qD*r$X?uD{8mY>-24s-NvToqwhJSPd|a?7pu9^f-661ne@E>{+2QnwLdx&B=WTFF zbFLIDKPZXpkc!m4+hD`{bH99zi~22Z&Qbo}DblW;x9|SMqQ1KI6}Z*;r|IvyKsP!I zmYi~r+=M<|aBLaEC8_gCEsqHfi#bhTAQ(U(^iHAn-()qvVK8skKDX=8fU0sD{Xm>q2N}Jnq;VK z8kA?&M6SnhyTLGNlshF9#wrcfjnW)#$k(go&b@f?`84`|Y+_y_H#WE+QsAwv9xMDrVdst6t zGd2%_BvV}X9)3B>!2LYE$dzWxpSl7@X%UKMRC#0VL8UoZN^#h07RXzp3=6R<^e5)Q zcSE}i$wcQDSBt9tZ55+)&sS_2L0GkY8t0ii?@hVW6k*Ow(3 zDlm(WPgr@rR2)!&KiH9XQNd|A2@A;s;CO(ZIW`25Ei{3&aF)rN6=D*;h}Qq;fu(;qtfLtTs_@mZOpEFjGBpCg zkw6hn02dG_KM|;x31p57-DIo9{*bfsmE9k-t>-Jdx!>6flD}Qm-{$!7qGDCv$TwQ_ z$Age1uq&R}kZSVehoDK1$RlF`up7fySX$y&fuq_WA0Ibx9s43ICjM(VdjiAZe81qg z+E;bVe(vu9i_#o<0t+kf;&pB4kV3(bf40Y3U4p{3S$3$W)m4zSm{j{&B8BAg1UT8I ze6Z4UU5moaNo71?er`_C4aaR>Mch^?E5x zxphMV%EYDlXV+`K$)R00EY~Y58y#~q-Sy0ZZ9CP(#N?>->pTi)PhQ!&S-l($wd9Xm zp{&1PNdDc)XT0TSQJ>K}M&U63`9$6)J4lnN?(n4ZnZyM2-h{k#u7WfVpQQitNa&$i z2s-(NN$lwOTB{)ZZO^W8ruug%wqIcyfLv z=dTp8M9<{k<@>q{{J$lm@|2nO>7A2C(Z5N>ci0-u3^xWC<`ToOyXdp$&-wPYZITn_ zcBciC2+RA6-<#%4*2PS!+BkNMQmcy8)+C@idBW=wY7Owipua?pP2;y4%UKDxP(R=O zJreVz7rDD@mi()5`X^=MrsSs}E%j`xhbO%*x?~|IrV|dFD=_1KwBD0NW`%!3H$kuP zP(qZBWZfT^yT1DBryjpiDiNpNh4vPoPaoAg%v_!NN0^4F{SEr;vLz+v7x6cgR(s2Z ziv0cGF!i%Ao-=I3S3a$;>H!<(&2KZ|z4o zDPk3pTA^eQ8$F=vE291mvl{J$emu#zN(I;VA}a%xu(MS20u zz)D&`DnE*>qGr-Os40?y_OGve!^M{sIC1ZS$r<$v@ra*j&`Z$;DDI>^*@fv((mX2F znYqEEU;%CSulB_;Eba{JY5(QIf;Egw6w0N?#sym0=06QGMIAn2SuHkoBijne*bpqPr9uh%WivQT<`%f&ZBJm zx+CONCW7L&-HGS)Yulrf^T!1)Gd#QV$4hpnJ`2snhb!Ykrvi_bKZX%0IP!v=R{N4T zbqnl6_9HT1smF0R{0k&hKD8JqaJUHC50-uk;&i+WJ`#$5rCaED^=~_4{&O7X{p*8* z<6kQSg@yHxKK|bMIKC-6w>KmpcLmjwK>hsGL&Y7A-mT^V3Y0Z;r&6a6seVlM;uXap z-b!e}b$ee>zc;7b-wppeFFwjCwET6@tR9$-=^6LT?Qgu&ZjLJ-@92?3m^3spX zes?=IR^IJ>X`;H;5ip^6K1y$@4m|f}eUDUf6H5z2?LU@Q7Vb~1Z0^PUv9fi2{lxm-e|>+f9RhwnvAO>ocxvMu z%@>4rP0&6?yT5e*ihkqYq_6q07OvMFu~(%l2$KBSvN(aHj%%`2&0z&VD>qt*FnG;F`%DR1VS zbAov6BgaIGk_WCS>P*`m9gms}(k+d2&fPLBJVM-G-HSbU&vq>j*~rdr1G(iNyMq@} zq05HJ)%IJRKrWol2hZ0pJ)U`0j8?HE)}E?tfYfSANvK8r#0#{zr%Xpn3i*E~k#O z!c?+=ow+i>e`NeWRz1qYgEXHfIXpCSS^{B#GltAz$y53oSApN|#f3eIad~`ICuM@uUK7U4RQ_Q7AZ0}-u2Miq8`AjzR z4|)dtiUI*S=+#w-(*2^mKH}!(;p(gVq5sw%AMWPO5(h6Z{NbQK1@g!fFpRgdtpG^} zr2F**DBTdUqP~wxd1{J}qGKNf{>EfqIZF_uS1iy2BIqv4Yga6j3>Sn?q2tm_#F@iL z@A}gNB-vL9)Uh|gpaB$#sZBvB0;m9fGPETBd}9Z8M^)r1*&r=oX%&nMTp(8Mh4JBY zi;h=-j594UkH$C_`x2Tyy%Iv7TO2oOiGxct7iSQ^(_?HBn!qy9h>H=iO%3oQ4dlkv_hppbE zLIV#rQYEOVLp1$) zYvCZpl&+UaDVsvJOmWQXbUMe5_}^ar5o2`Dp=qk7%fY+Io;!2^0p!=%n<6!_g4KE?PKR2EWQ**Pdg#XYWsjsLO(<{A&~M>pd^4 zT=SRLrMb3}waAk9b_@Gdp5!5-*6Zf=ucF*)nt^X(qK3!nzO3^6=pA}YF9qF@`_?uQ zb0ZX0cG$80_TgLKqoC$?hy9>$?JK~?!F|e(N15L`Hnkr=n^j)Us+Hyc49Kv_+R5-V zpZWB+?{WB__WReT-#!z8zL7u`Co<-_PLPgo6k~@Ih5TF>ZLBYrm72M=L93B}wNH2M zDEZ8TPiLcHSZZ8D)O%jORp1ki1)UJSsj@hmb4a3;p&N$@JmW`DNWOS-nHzbU&KvT} z;Bie~Z_ZZ0fbR0#?Nnli+j&_~qfzXUQa-!8Fum`vfGxsGMS4c~siKOFi9V;*+mx`m z8J>ddx>vJ_w%X*x>m2#>F<0(6FsHeJ{&W)jM;{OQ#d(O?>ATlq2!IHI zH#|S6Wh9zHp`&YYh2m-J{~W7}OPe}RKg@popJVlR?9+~)s*j(2TU`Fz|Mb(JkB`Iu zF0K&!-?sqwRfzVqO9W7bXg%CST#~$kkgPBLh~p8Xn7F;pN>%VNi{)YBo%M20UcKYX zr#HXz8F@9JWgSeihXTJ3^Tjy_PdgOMkfIi2B^sui!qxtN|jFp??Ae$MxC!{#^h)Rn?vMZ{IsE#{)}its-n z%l3{;S0>PhYH3B^bQ-z$Sk#rQ)t({Uep435Wdo<5(mT%aToUw`iPy9rrLTWu1*liI zCFi>?91fF-_#fhVqC?S@zh4pcHm|6k(KCHI!DU_&j6Vm@PJ|(_tGa7kX`0gs9J~Yr z8H3a1kckW8_hZVb_TP7IK92zQFQuf>jt%Xbxy{=L9FWVSIN~{GF#KOE2=eCv@p3kx z@Q|}NbggINA9gVOcX!ICU($u1Kkuj=t!_e2@2b-s)hz#Qe;@u;o%{MQ+VFf*05@>l zKH8)5kt8l6GA=>^nc@rb^#uicb^?5mKr9ldg`^COqq0Y0e32kt9Jvt^tb&BGgXz|h znBY!^JtSi~l2)V(qt{8p(8Xkgg1e!p5>Y8PgPdL@J3Eddv6I@q>$VY&k{8UztAUW| zroZf@^66%G>t@CxZ|!y7)HmN+M>2ltrs0ier$+GsdZ4^GNFwT19*PUlEog}Y@@f$A zxXuU?4PU)Z+NG{Lp*;#(DCKlbnJ+yGSPhoM9!R;pUXO05mY9l$F}9bDy7#V+MrwlwjZF6~K#xdMkBSja3!t4) z+V`sgfb;}@7^L*6>2nlGI34;}Eyxi?sBn>yy04}4F!ggSS}?}2|A9S(lM+zxr0ChC zle>k@YK=^ADLrOi0tf6pWM& zr<7;t(A zv0j(Bxfg@~jn>s|y~Fwfl@4N04`cNZaVbVPb}D_(G7z5ugcV7O7=$48a3%+Fze%tG zXPmzihA?HMY@I_95-kyWkwwV(ha?asQ*dxr4`y;Gn)gkymL6+^9tPKvku{7}0NJvD zAD@Bl--I9kf!s(8Z1G&R9lE(?q`V|#c}9_$1djC!JpLdqn3NG0%=JE97lAWuOUGbf zkssXRNp|XzhEtzyXXV8!bOy@B$UqRts0fAOR}!%2lb|jt>7l*8K;%ejCuw)D(WI7f zHj930gAse@=!ntSTxfho8fKaS$AceR(uzNJrcx%4TDSxe+rEsgsz8PTH>Y_+-p;W_ zdy^l5CitzfOf(4~czma6e77k+-b`w5eLOP@6sKf7b(V5?GP=(zBS6`PjWj-XyZenh zY59yo#4A?9EFVfa{>kxMP>#Ibq|7Y z5+cuv?slKC!>X9W^^l=398ttny!~#Sui#?>w*C@CXKZM57MID6^G3%r6-U*}l+eDG z`V|VH2#&XhjYQyLBL;y{2eG%qQ0a41o?B)yf_K?e-~QvlZBRofogyjvDAxcZ*fX;a zzQA{u=CbcfQqD*PtW0B^B8^Prsd>R}Ft7}8n8?_SOkx1PO9uu|PGbpxDBoBtk|Nj_ zScDxEHLfOS#94x8c)%8~vZkKR#es%Ev6iZsNRYdyKJEY%hW>&vO$-x^WBdpTA5;y~ zvkV98sW;cc_`p9Y$9+%0wD}X?iY7wz%%5kOnYl|LuRvykmMM4=sgj&OlyQASo*=ccAXtWimiD-nGvfQ)VTl4KY&~ zcx>E%oIRAH2QoXuq>_-*z`zg~FaT&|@xvM)X@gu3M6u!KB3K59vBrZ_yx{QLI9%UQq%1n&ovJxPUqoQyA@HK_mHPZ}dJ1y3G zer*|zZ|sZb^c{=84Ne*RhR0dyQO)LBL6XN7BVNyC(X>53TZHH@orom-xc9-69f8vj z>c~Lj(U_0MU<(VSm`VHW$V>{UxY(OyT=DbI;2G|bMDwz zH!KcYLC`?^p!K=Pe28O1%zXmTA(;PIbVWz{eiU-$)M_O{Z{_46^v~;+Gl%O|vvSBs079LPu2!zCoJc90KtU_#WA`ad2xLL` z!39p|Nd!_y0+w(e_SNb1ig01P%Ggi15x9cKEARxMNhu|*$$hpKnp-Ud#tkQq>Bb8 zoHm>|fVD6|TS0BRRQAy-8gZT)StoZolv5kh$(~`qPoZ!_sTwQ zE}d);_mjrr%RRp|Z6&A`k&Gp_Q%`0ocoK#^Ux5*crSTE$tto$6{UsBb%&29exze^~ z-AmijO%vyKi;c%daJ-~2G%4NO!1&2pR z(Sdrgcdvm@9N$$g$9soHTWs;FmB%-F31Dsw&>%24vG}`An8d-Th_iftLY!f6EP@4V zc(74n9j~=TN-b3VF0v{0&2~BtgT+-xbT*~5-g$XIzAn|u$g-8ziiw5cZkyuroXMiV zWaS6=Jjl)6d2itg#A%Tbfy1!O<01$YJdr;j#jCS39 z*-56`2;`q5iwUN!?Qzqqz{y^~QCWfAP2qnDoT(NZKfj-8~~ z=-RL0#ku|Ai^5CCc%}vpf(sNjZ$JOVoWz;M4hdICh+E>&z5r2wYYDX{Wvd*>8jOSJ zLSASb^3)tuBe{KhNfWd%bxR2^0$RE=WnY1}?^B^!EBrQn4r%K!LE+&Ju>6A4BkFwIR4_( zJS-c)zIF6_cU%@UM#c(xc@-ym-}6`h1M;*vzvN@?&445mW2K5Iahu~<{y?mC;JnsJ zw&zLgydNGRO)@}LZ=J43tjV%G`pXT0ksfAEpHz3Ayzg$7WyHzy84@rjFHdVzq9N9Z zorA0>EI#V5!Y)2|e{d^STQX20;v>i}hP^aS)*mAEvM%3)#t<|#e~ELyE9}G>uLK6F zdZy#)z|w@>c_#`97|zYN2BSB~+9jurxkt z*OZ)s6D*VEdeR`70&ALr1=wbN$;8J5o&ne1##~UudVnB0MIJLcROtuNE;w?>xhJWe zXXyt!mF2>@#0s9)qfAfE35A64p=v*;ShXVI{@lP?y;y8YBa8FaST&LGbpNwW1+ zp~L-3$XIr>2hUn#m0Ce=f>^CcfSO*qj_uJ;Cfv%96vhebqUZDBK_SbVnpWWuyx^aR zNxuK|K#mFt7DYgBF7TiSFE=NcUE-O5d%Vn=sD7CJl-?JU-R7e$uwh}MNJM!XGni>? zDR6Ge7>4twJ9~hxD&z!vXTA_L0W)VDN3`C_HKrn#dwxBD2V>5{Oac-_ZiPPSCPgSb zQ@MB8H|Q?|gzH>^pzfdmLVVsKh|@b&8C^qW#$EK}2;aaI-WoTj)X(wE%kXx5C`p;) z+H!;`MWBAx&!+`!XPa1r{qj7Y=~!UYLEJtCF5>?jt9quHZ4sw{Pp%3R%NkKMG<1n) zk2(4h$$pzPRi<+Hr!W%z80Pm&2GfOY-ui6+&$0S|uJ$mBe>_j=>CxWyvA|@J2Jz>J zO~bwZIL(Y?_8plD?UcL!=U8nn8jFzgx;)c$E&5#JGLRJw*iSBU>@1TsJR+B%C zLH>V#AC1S~`H!Xc(6#ULn_v*Vn9tc8JK{}!``2GyClc#}X+Qgov;VA6eUc}VUMrtV zZ%vj2eEP}y=>Ht6&eqq1Po1pCY97qIp=moYdN_9-b`jfj%a>sDoL<~yN$zMp@K#NS zZFDc?R%FJFW7R?6QTFMPXyV|d(%FILy_%-;1%3!j{Yx|fa(MML>0l^<$ShZjy!`X` z-KZEnQSGA1-P+}n75&|V>^nf?dEONdCFY&O5iM_)y+4GX=tKtLWq6cTj6^_Xies3W zWX3TF%ztE%*iqF#2QscG@(;4Gl)_bWDzVnf=n-LECd(0ZBWUl4 zdIyV_8!CWd?JnN47|p1z<<79;Nfd#u4|9;UO@j>iUT?W3J{)&j_MovlNCB1vLcVDH z^C}a_O`XzAK}Ig0Plo}`6u)UCWoeHnm`?K(UL0% zu>g!YqGc1_P8j+kuFpQ=LT39;ay4hRl@+LA%!Th-HW4vpVtXjLa69h$7&JjPCJDQv zKm~BFCwpza<VjzYw^S$Z%fs@SXFup_d5VS_c^KS@3NvWv2X^{3AY zU)O=AgzZA>E<*)zwh>*0YQxERW?Dw^-|NL7=t~9!_GE9G(GNI377dcfrm18=u&ivW z+RA%;s;?}6@icnUol;|?bKNN9+Wrlxb)^P&n)2#X5zrDPvRW|| zLQf7;)Ym2PqNJ{feegXckAc=e1seV#Wa<=ITxx7$Dc1^`;>GfmLNr4UoAM<{PEd|U z+^d&uFDtIM|Bxoh=g^rrmv*a)sr!n>1VvulNq(K$s&XBDTj3C_qY;%vb1EoQ)WwBT z@K4eHibo{14;*Y{<#hf58wpQM6auE-XN>l^NIg%aw2)FUWa4$I`}c#>Oh|usuv`av zru!E>-Ak;Qd@L2)`cs!$5@dhm|B86<^CzW$oYi#sEwVI5p?gPNm?Zve$*P|fI0y&3 z8*fTIwF9)Og3ZU?)o!A45gD~QhEZ8#`zca^TsTd1vM+r&BoGXJ|A3e6MBu^SGMgGdd^0*@x5*ve8zg~96F=aZN(H$iefLCyF4lbOC+8Q43N zdYZ!1scB7R{Hj6*7S+=kZ<}6=J={hgRmLY?uiu5f9yIn+GTrb=L-<~Tl`ku2igR8k zX`qm(vo^ZtS!>UZ(Pq1D#LG(^iZk|E@h zoh0$(j64E)NdL##0LF3_xHGA5!51RH!s(CRT0JyXZb%YqX^!jiMA1z~s+d%Y1ZdO5 z`5P7+t~1fguhl)~@{3nD0@KBMYQ4uBazU@Y7)PghdM@-V2M+Qd*=2aFji zP9)8IBLK5CK}H>aQ$kWD@=;|8_MltWgmLhp&E^UXJw+$EZPz{NG!h`54^9Laq2q?# zU*x>0L3h%GblkC(d%9 z3!Svd-&*DIy#R?8Az-qXrIZv9O-~ACi!tY8PWQ7Oc7o>`#?9qbX26^iR+6!llGj@R z^XtLc$hs<(b~7t!qXC12yVeF^l*~)>$%2_XCeaq5JTh31^#D&ow8F)^1H551ZfXH+ z0=C^JNGL(|MJEa&+b(s+QJM3P4$CORG1wp_#RH+AEsdQDs0hfX-)ERc2oAonFSwwU zntU>|F^#J_=}rl(jOUT~Le*O2z4w-2_w8#Y#K+8uk=FH0srZW6QibTKxWMHid_T!q zRVVE~d3TSWUg_YGq8pg?);e7d-jBaCBQZ!_`}^g!eCG<)gR_FgPhEmKl2NINPJ?YM zt&xvWO3c0$XU~5yeLgcPN;u563|-?Ow(3v<{8=SE))DgcLl$BTm^SwX;Z2F*6~5kA zGaUlA>(66RNyqu`*EdvX6)3fQe<82)1k}WpK5G{}EMvafGJ5cS^8A;-oqKS_-OvA; zHwPyB5WwW^A|1W)*8z=lt{oNw&pIFI(`($)TDwqG4nC<_A(e&gGl(lLDAxTbv{&R$ zKrwN-roVWQXy!;@806Y=ep)ffD(D@-!(VL&bCmF6!!P8d5c3M2mNT334RYf~x{-Uc z$a=)XJ6JKT_W~`8K<(R21`5~z%Irj5_QfTA*$DVecaSuJFbarg(9%qCW+fY7yd3yM zOf6ft2t1Ve*0CQy{3~7LyU^#AD|P&nczLYH8JXFWk3J$GUz0M;@d(9}()yY0`vkGy zgSr90xBceVgA&sIp7a7_f?ls(*=1F*zp7TW^9o4}W=`UfU(8}gW#Br&y|gjk9(0fg zo@<)G4M`p?|7^A=70Vtp>jico$?Relx#9}8q9nGuiwCpwuE;4{5Mozu@wV^((M2Ez^du@^Z&(X8YuUBXc%(L?Vi{G)+w#1l9nPPf1E(V=q1`{qu>taU7 zV(;usPtq5fN!G7On3!UVS(3R}GmBXZxY&|crRSaC)9FoM2e7q`3SS!aFi3SShlI}g zmYvlfTWzIFE(Aph0?N(BRKmr<&COrJEym3wSHh#l&8t(wYr@TE{ex}a`Az-^ops;k zA&BpzmM^wMkaA!IIKbyp@+M3h?1*G9DQUif-TL5?Yv~XfLQroiac#&D+b_`vri)*f zhzn2ah)h2}D3RpgvAazzRlwNNS0Z9SpH8ForFq4{{cD)#*P2VsNPynEz#;IDrH9+A z($fZ`bpTo6%w${q4QHn$)g!;1a46ZMH2p#A)T~ zj4pOuVLHqPIhV|vyc`m>wD2nZ3hPB0le2Dwo2x(LoojM+rhfThZT=3sa35;}d!`4e zUp=NYV+TzWeWq523=QTqh81|cCf#&A7{p4n#ZMSKmu!#fvXQ-1+C|`FeJlXlOM9eC z51gOL(-PM+Bq<+NU(PXJ=9Pqe2L`U21i#X=Unzl%s8$!uG<5Mbkd?d!Y)}K(z+>u5 zq^43-v^UDkpV7SvH0AT9_D*G19D^r}09kWalW8r|QARF~HdS;qQuf`nSkjbeno=zSt9C>uiP{s3*VVDnsp*^j zqu_A4mwF_b5!V8d6qS)sK@3wRhC?ulzcNa!5<`bo8O=lO322@@2n&5+#87DnOZUp$ z2rTlDbBvMu(j`Er^(wuxS|$DAKdhPvxqi16I+!PZ|K|qd3-!oyBwfCVe_5ztqpDzEsPMF^@LH&d!uug^ z`$0M>GmCeQIUqN=D@RVaRLwhEZbw~3_*Nq7wYOH#Gfy2rrvrebf{dh+tW(|B`!04= z-4pp7Poj-*(y5F@>UAPJg^j35>Yi069@$n#?I44z>nH(r*TM~CcTktrI=fjK)jFP?z)E3=Wev*dj_!3&GZb6xUq%tSn~~|!601wzq%{~?Ls=VH z0|nf~0>B+L;3ndK?NDsh3#`x2T_kuxT@XorcBk{YrjtUX3tHR7B+|`M+s!Z1BUalZ zC(^4{+p8neXHwgjHrMCj)Ay*hKS*RCymlbgryJVawxLCa=p4Ex=d|s6*If-zsj*$! zRlj-35^of802sWb_=2RZ9KcS-k6IV;qWmRVu0x(Ur)xBCCdnbsmh;pg-g9o6N zf4pwro(yOAwHr&qi~L4OGRK`^q|o^;O?2LzgdAOm()+Jz7&!WA2RXNgyySBVtVA|( zI+bmFKN8Wk^NRHH9)EPl`>aM!FT1i4+w|~vl_r1$GEfDDY> zcp+*eAsRVvu)oNp)ztEED-B4FHTp5WH%2KsMW?mQB&xkGTGLYKMG5dedN|{VM3VfE zprjxnl8D>@lq8e?KLn+AEE(W(Cb-d63qZxHP_(rgHSm%`QYDlt>Ssa(H$xNxWf5~j zQ2NpFa;0J^3seQnS+<0I0hw=5ddd9kIa*~$X z`FEZ()eg$OJDrJaiUk>WW*;t+TO8WedB6YF1qAU);I}Y!+UzW_HQX6pIVDV;MEl>N z>&6(PoaF9$l?!4Lqt5EMb@@1OJ0jn>S^|=@p-w|BgcjWD?3#{3WNWMoTXX$hj*Wh5 zDPi4uxHkCm&iykd;V4iWkuN{|!sSVnX`ujmfq;qzeE*z41gSTlPj5y7%jE@8-MbO{ zz_*SZl8sjpFRb`|?D2s#R0yQBk<3(9RZ&zF*?Ia-r5R*w{aAc<@crxa;g~lUG z7^(Jk^jea_MkOz)p~eu8#uQwJ1=S#FIsHQT#^2)%+K$761$!wp?$jYm`7u+7E^=ev z{_~U=q}M@qK6<#K3;4Xde={`VRPlZRqE~(qrTzUh(%g7E)AS_;O_3`JDM2qY`Bk#4 zS5h8@ZzSn$jIb%ahp+ceRi#pI4AQ0cLp9R9gZNJv?Q+?p&06>M#dIx2-A*ryNhGjG z{n4eXR-?}PYRs(>v0TtQGRa*X4v}Pd3{zxf_C`*R$`pj|5jI!2(G_M%fpX2ew~uO5 zOV?)p&F!Ycyq4n~NhbNV=J%(|)8~2W*I)(-Rlp$+zKcQ=(4Y=DruXe6BKL0A=mCeC zj4P#wszl#Vxca3pT)V~Fn`%tm=in`c>aF*CjVSTYmj~()fs>;y5U@4{srv=;GamKCkMiF=3zJM2e8khoRkvlXPLX>{(gV$WuM+w1 z1grSbsEfM3@f*ma3T)nlu{xZf&e0G5sQ)`Lnj9~pb(`2RCmxUPxqgGbM}}W&=KbpU zJHEZkM5>;8;4x4B$EJSqWykKYz{;gY{lv_n%3o9Qk9NnC(S{6S$Y_tDsNkL#P@hS1 zscsLxht^}4mG>v*W_$0Csn43a5-(34m*N#=h$?uAPZlG}$;_Q(YzL8G5yO+nryrX; z*4Vg@9fu6eVyy@$P}jl0IY17d^Lpoj{xJbr?M&l$@SF2XR_ql=_vh0P*sT>kf)@BG zOb2NYt1wy&eX3X3K87J%iPm8t8WmG%WpzSj=vPHMxi#t|8^XX{{p!?`u!rDYwpDxy zvdptD%BVEv`uMvFT?=JQx*wuO(3R~rojk{f!zACtQk#ubTE{sgEEP%5Y>5FMB}IE$ zAqElGsbG|OZx{!p4=MIl9UJNL0#F=_B=Lk@Le>+mqJOA|!;#KgKR8>@+yrl8j}C;A z^a|denoRGxD}?SMXxv8b{L~w<8$P`K2RuM;-bt=B7?r})&@C&-r1Sh_l{4j1m*v_l znXMT`1A?rfau9gsOIJ!FLKC%5AjhDOII{wakuGzo=w~s(MC2xNxhqBU5-wVMf=j;U zN|{sD!Xip}w!ni#eCWYUCJBuv`z}gVy{w2DhwNoF>I7;hM!SGk$?5ODjgu1))TEfM6!W3XX+H(EuL#d;ki>xqInlSFem zg!W4Y@ha+a zgLDZ8pywYz3lQD3UCE-!5-;qy>#isW3xJ+7-hE+kTd_Nvz8wiYvfc1||G<;%)3@M$ zb?-xHMAl!<**|*pF`7w98cz^kz;V0-#j@V^nlTYqyJ50zQxTq}pDE`D#PcYSLQ-qQ z+dB+{=JX(lzoR&lBqLaY!aUKf<0S&ZguY2xEJxvNpn{eXAv9^uA>3v0e1l|E)s&H9 zb1t3d!r%cZ2Rw{0S1#{4nE3F60axz7F9CU=RG<{};aoivRqT;Q0q%ahR(8BuORQ`q z9L-178*UID%Nydb()smS=~sn!nr}Q>Eao)03_jKFU6WGZ7hj*J5Rxcb%r?i=u2xc; z#YC}Ad!|p~x%^mg3{-d^R*+C9~SLof= zkj;7}L!)!jV{^@jQ>s1inDwr44(k|1==OG^u*%Nu#1$axKnl@$-0IGw#Vn$#yvBkg z^ikjiXH}$7Y5vzA&D8#1UY*5}x=7%8sdEs8j$j@JbBqQzfTX863$+3Nt+#WrZCZh2 z4CzYNW$q=wyPo;?vTwLNcla^L1LnTZs+x97fy++}r=CBS&qYAqp z$bb50oUf2bPZLHKp>_|p-|+9hgX`1x5vV2IZ!WwSoXLE0hOcD-el+$$kI7JxtH{Xe za+5g$_HGc<9|;UYYdBLdhBj3J9PFU6X1*>5p!H8F!yco~$vB0res>_(i2B`!6TxT7%_xC+#^{!dr!eCUinea6)TV!iUy` zj>-gzL$j4vv~~kle;dM*GhYm5B@Rqck$35T?xdPvNt#qhnnovm2~PT&l{D9yv@n;n zbe6P?PBQxzC|Jx0FG}3XO5O>Eag}guFj2}|!YLzpR2!0S2ugue^8b&ZWW|#y;sLgJ z@^e~gUvkCCdw)*vQOA3i<5K7pQ$12?8(n2svQydGQrYKIInGlN|05{hdW7uIr%DCJ zF|?&Ar^}1XD+_Ju2oH&GeuIhVg~}4o({{`JmF8ap{p9O;XoWWo1iEgX!@G}F;C_#& zn%L8s4dsVmI{L6><_z=r=lp|V9L^bP^BHujVJ0pt38%sRU20siI@^C?_0clWH6=w? z7)KMWIExZ(R|vpGjoG%(7o|!#=|( zlbJQMoQ!`DxsDQO-wLTdATdEQN0Fsc6HP%BYoO;};pZ@@hlJ;dZxMNFfa15f&dIn? z1dd1oA`)!rroi_Os22_>j*CE}rXXSw=rak#v>e1okwxZAWs9e@p{I<_EWzVt@0qZ||@Vx;DCUr4F!1NI? z3)6CHA)g83y21)I zaDw#<<^vCb_x{zAn}IBfa%s6h11B`0u)xAoi265B9&gnZFU->vX2S>jC{YV6wwjov zYR!2BNkD5wpwI(~36dIOCs=9+9`0R9M(WatC?xMnWH8h7qX4xaszV>Zs)_Nn z3eV|A|Jj8jX$E>MI*=xI>u5X1;y^*T^$GQL1NF8>z&V&i zT3HJ?6-^GOj5(tvZ;yDS2#)|{vuZ7SNngzNRwD12f%i&uW&`4}q2Beo(iiJw1r-FIIVTV@1(9Hn=kf z7k`;PZ1Krm(tqY>$JCvV+b4?rpbl%{Hl``)LIQiU;pfDm&)2z+`OZF*sdS2aeHI{v z4v<1I2A$MPo%dqW7*@eDE>H&hE~Xp!DzA&Jqln%%^%t=nAa`b z(JivnEp~ZR@X;fs(j%kN1CWfHJZIdWq*Y$(QMv3;wKP17ys03pbSR>|@W>w8-)n!rz;D6l~!5E;VY)_L1mB?Go$hlFwD%iz^49Dh(E=2YV zk8Pg4YX8#R8-)zOStf~nyw_;#W}D5c^`7$?mT)z>?j6|+9UMv=&G9f<3mvso^ykxc z-lvw0RvcX!9R(Hp&xQ`RGaKT4qLAqE+X0{IdnW5bX@4h5 zfOL$loW(;Z|96;Hc5AO|x)r&6fHG~sh5s&~eTw?2xWg#)?B#o-kicLSp4)d%C!wi{ zRx$arl#<_k<%j%K<2LUNqpqNa#`zP3SWciEg63(xdzLq7f|7J3z-^|WPQKy4jL?ud zyZnrgd!uK2O6uh%#|gI9@g|SM#;DB}xg198Xg;sL4>XHkY|xqw%5U$XQLPtUvech# zx^nHjnyJZOoE}-4s|gyVS^V^IvDJQI?)HP>@AC^pss&yB#p{%Vd%(OlB)*S1Tmp-ZMojoW?6VxBrizYym`7SrM+n z2$USFbe}YT-(I=Q$L=_Q{2Nx;Zvt-Ds|b!C+-g5~9e?nL|G;Jbs61_;7lS7*{9s6} zq(Tvx9bdHly6Mqw`8G?{FYFe#Xl2x4W&C%ooWE6LqsI3EjC`3On>^6w09JALPP=l_ zD4&*igrRUPy!ZMc2%fhUMkoLL=e0X@S9rr4vh3jqLxsZ%8K6fWllAGL9k)!~)W*ER zH{GW;ppW3r$&dZiHc6~DgVnZTB?)1(>y^Z_&2s)N?DCf9>d)uNi7ytfI?wTEV}w*Cq$;R>SNx^g_czgcRgaWk6=c19@_vW@LF0TYM240( z#^Ey3n#xa8em4fAu0K?9R!JAAZ@o%#YN zx~HA`9Az}!lTbDr<(hEVx&m~Cr5+ehyFhQK~hfRHwiA> z02zGUmh#^xhf{fXQorWT4j(oP$1Bs=!Djhk*5l%hVhcn9h@Hm;LJE21WO+lT%!NZ_ z7AvN3a4-im*8iE^f`6Fc!n#Yzypl{kpJQMx ziJ2i@q`7hLM}i?E+I#nH-q(Ng|HJ|QOjV&ibN1|6{pWi0aECv`0cZFwWV?6sX1f-h zuv@}*#H~M+svDyAZ9RhaG3OtC<_Sr-eMF1S9)H-0P@(F$OR%ESDw+nhe^g_O zwct4NO(NeM%E=yi{;5Yf;aUulIOC982t>;s1d*U1a~v+a?P>#QA^L=y=N^9e`H{#R z_Zd=3E1jB+uYD}z@k-(lYzRmFV2jdAoko0UpJ@n6jV~3!G&4?)c9gSD?51Lott##0 zvrj)E$}-D8r4)2FK?hX`|ILCJdPbL82tsi!*4n8DQAFvqR8Au^<+M{zKLs^ZCE=>b z#7Na*O`b|cH4{@-6WsJwS-(tDr$cAOHP_)3b!bhDPIR+YT@!S5*dpMaWtUZ69Ws^M6?f`mA%EI! z2wZ%d8h77hIVwR#k@y<0p<7#f(O-q#CG{a{;$2NxohtaJkB`LZl3jfl?xA7&b;z_W!nX8F!NUvf(4c3&ap7GmD2bhZwA z=!lnJ(s}0;TmJcO|GI=|5=N(-c%kanl!IG$udsV2J5f>(Ca6S=wv~C_r}&w1XP_XO z;f8;hAlu`IPDv<+Jlj=Mt?mOs!2!YX>=qx=Gh~Hn&nvUhVNgq4)`m)xg z7=|v2{~=*?c_t^5IaL%)wPQ|^#5&Rd)aC9UeAq)An9?)fF(e2dQH(;Gr2vjegCNdh zi0%GCK!>1V{{jRtLq%*6g3bM-03`qmM-al0DSRY&Ds!Kl5V4jSDrSF~a@j&)2CTM) zO3wa^<@O2M=9789gbII302)=FH@E^xW#0vjm z4UWJ85_^zL82(X(uaz!_xq1fgJe9+RXe)M4d6P~UV+$)1M2reEU_#y?M0 z%6p?isBs9*BxD@)_y-;?f`~&zuo$|~!zvP@tRo_djtl{yqy+eoSP&$NU09g`Gqy0j zA@U!z|Ipq)W{^UHs9}Q>K+Hd|pfG(XL^Pv=13|9$k2m5QG4B~&4}JOnN!)K!T7LkqWR zmJh+iGvL~?hNZ(n3*p5#hO!#1P>Lt~I7TXfVVQgE)mwcnoA1cjI?yR{X2?w_O{V)R zh5Tp-QDF;BEUOTTlq(@O8I^tB5su%+kRB+Zhdu7`PFo@qEZm%JLS};rl+cd1j-xI$ zyyBQt(Qbhb5fne((H!Sm3%Yp=>{C8UHsIW2nzhLuThbvB1@q~`WkX4I#xde{j3XQ) z#z;8AaSaszBOPFA2Tf>#ld;glzx-QWLv~2grUU>l?TcaVbelSv;>fE#nbuj4|E#ca ztkofJB?y$Q)xU?-Vx;l{^3Pg2H;3Gd$PrFRK0dtUr)ZhX%le5}|Dk4r+%knNW=M6| zEULL$Bq4V!=`!;)O*7-FuiDX#c7V((--*UIg5pk~^D*Hwmkmse?o!tn=8t^bLr^)v z#0F=UKFlHX@rB?3R(cXM;vnmS-M}`RvW?3eL zch!ktKHdT2M)$0l{21>-;*&kcD&)lu8OIL??WJ+>q8iO52rex<+c}$)9-H2Dv*$=^ z9hzF1sOE^R2{K@UG*f<2tk%Yk!Hdwb1at!J$SHysI#9_pA^u>{KkWU`|6)&@T7Ol@ zb{7&0cJrhc@HX40DAJB^3_=*jd&blVl8pEr0~i0e$S~hQ4{?thzz#_!stBSgwb(*X z=uOGFayPZ9VKX7c;DxRg0&{}P%HNl0roe-~5Tx*X%*F}|cYd>wX&Ss*j9JFe$LNrN zCzc>K*Ylq$We-}wIU&4w)F#NgsLT0OR%oISyw-;29%sEHWo0YA3>Z#fFheVkS_mzQ zQO_?D1nxrWH?NzbahADcI$6qzZoe^&duU^zsgq1kAX=be&_eGDfoSAI^$uM(Q)<`1 zgi2{Ka8cv<gf$Vky5>Ckxr8lb3|9&9`*@tfxqMdgf zomzpT1uwYbl~C||BD?@a!$a1tLzzS8Kg?3J7BY_6a5GEBACxtI^7xxlW4!YFyRPc| zu+;aECtYg&z8;L^|LnR-5)pMimd>(v0K?j!kiKh@ns-1xvMD{E_=h0rvq9O1_?QhI z`3c}4B=sY=UTeQobDLrdnd4|QerR9ir~nh3Ed zCOc9+72H7Z1FRQZvUw0R3dsjCTQvMbHyb3vTqzA1%$5s0w+z(4`HLyRD?)-uyV@{2 zCXB)>Ji8biCV_GkNWsF!aKe@Gz(&)-FEm3KJiUa_Excp9|1*3)E+exsbi+BML(_wZ zpP)g$U@036!`^|yIt0W(9JMq|2y+ue1mwUolfy$~#74{!B-AlObi_1)!zEip{!6w= z)I?C>1xS1uwrayoWRq`zjU~&8aTqV%L!ER`IQLmFRV+eS+vCM>fwdz`zgkQ=r@%#!a3h9*gl2TcXN1ORl*VbK#%i?2Ys5xtRES34#%}b+ zZv@A16vuHS$8t2sb416*TC8AX$95czbh;eb6BK)Ronvf@WTcvUSjL6O#(wn2e+0;Y zbjD&Eu7PvMY8i-2P{@U3$cA*thlI$8l*oys$cnT`|AlNu6*LShyeTDo3Vh_qgA~b; zB*`<&L$v@&rz^>oWXYDS7D>EEDGEuKq{*7JNnK$-d-Rrlyvd&Q$)7w4P$ZHc?2-Ri z64GG81ysrUORu72h(06A;X{xhv43oFkv3^-2l{BX?Ac8HvcezAi5?8gg;=nrgch?w zo3NR}EmX}>sY;R1HPg(VBf89Zqz~rk2*+Bm|F@*EL-NHzSxvr(zt$+u**qkJTQJZp zvwvC4?%0XkQx@%G&0%VX%Dl}g)1^xycO|OO~d4f z1v|`{%)0kPu=uRZ_RLQuiOsk=Bqo%_$2B$7NVU{UB}ruww>-tvPW4ol z+!_EaHCz1DQZ-d}+#0bcxfwmxR&~`m)KrI{)K{g|T6IHB9TJpqR6Z%iK*`eVRErq3 z)nO%8b0U?TC>Y;p)I!zMwfG5%@P`{~iU|aiTe+7XE!J#}(^MVKQ4Q0k*wZ^)2>y_V zP5OslChlz*udH1IYQeE|46W0EL9m*kAA!CHMxr8Kbul zpW#c{r+w5=r7J)bxGOb4*q}%kosGMHkUGhTg=2_; zak`iEd4|dIJD-KxyY*9UjS+8UQz;3df7pV%GKsUTs(<*aaDt4~61a1v0)ptAb8WYz zAPB7(x;=0lmZ(j<)!Z~4ScZVig0+&Hs0V7ujM?~w4iN@IoDOqc2Ah*sWW%PZX_kMr zENtD}+jU1-98@pl6KbVc{|S2t-~C`f1X5DZxr%InqM@D<-(tXkrLUhzfWY?a#60Nn(!25f-e_?6%JrQiCs-}}Yi z{MFz6<=_7G-~R>R02bf@Cg1`#-~&eB1Xkb$X5a>P;0K1_2;N^4R8cM5R8|Gorihlf zY>^K3;134j5EkJPCgBn`;S)yT6jtFCX5kig;TMMC7?$A~rr{d4;Ty)`9M<6-#^DwW zlFnU--R;{PX%Xiz;v+`lBv#@jX5uDx;wOgUD3;(I|MFel^kw5V-i!6kmNg!Z19Rg###?T6nD4a?I=16JMpN5`6Vd2i zwabV~y;0%yo=? zFlB!D3H=aWN@isZ|!9m z6%ogvk9Wn5_(2ls_o95}C_UWL`X`mizp}y((KZMldre^A=cIv2x z>Zz9Ms;26zw(6|L>aEu5uIB2m_Uf<(>#-K=vL@@ZHtV!T>$Ohng?Q!0s16>P4c$OE zYM4Osi>prTRvpq~D-lk%VB~g?2f-HXz-HvZKJ3CqY{O>k#dd7PhU~;zsV{R_^3x?&Wsw=7#R)mhR}L?&-E}-aa%=S{5J< zZQdpA*aq+L7Vq%}@60xD$vjrH8Pw@OWMerrMfMHymhbtdZ`3~T`)&-qJq^ohZwaNb z2-Q*i7Vx$B?9*5U_VyRw&<7l(79$(*2cJ)!sD%S>g#I24(?XAt5rtIP@DAtj5BKm8 z2k{XX@e(KT6F2b`NAVR823(po;e+tvh4IlS2018%M9}8hBt(f=g<8;t3YU}9c?L+R zgA^o=4sZb>Z~-J|@+EijCWrDTm+~m5@+r6SD#!9GcL9Px@_(3vaj?@E2kEX|2t7E1 z|9m!9y*|+i|8Wav3(+_OIJgZxzyxRJi_)2cE#ClwaDhGF06+KhfB5q~cZfe1bU;@K zLs#@eXLLkgbb<(UhEQ}wPl!FAgZ!dXycTn)rPH;T235L*FffDQ;kkbpF4^4Yg_!Ve z0CF$+gk!h_hcb!lcvm)<12#wlT-Wtn=k;C3b=pdUium>6$n}5d^<&?4g%AaLV6jcl z>|YQg=X+>Tt%y}`bt~D2xOoSbvyRhVWp4pYXD8@?T@Hc>^StJW3CD)fh6 z*}xF+Xs&v<_j@-Pe7E<1(D#1#cYWvg?)vw7pIUJzXy2VCJZ2q+m~b+3bA@pC|CX^d zdDky|=l6Q|;DD!hdpELy|92y`oQ-l;rAx_PlI>%0zaZvSOsffgojUvh}Y4H z2b&XK5gvA73Nc~_S9x*YMVE(pnI{OE_fZjMk+Ec9gh|T^`QV?2dKx1{jS{AqzeOF9 zd1MLb9i;8F_YDk2!_wELJkEw}; zH{}XU7%)kaB+VOMj;Im+P=r7Dhd)sKOdtqRfCt)O`^e`Bbwf(Db%<(Kh>(Mbxu0mL z7|^fdhe8k^)582vsDsnlqXU5j7YvHQ)t@A}=x*5#fk}e*lEm2ZVq4frNN`YG4c<^ZxJ` z|M4gP@;CqUNB{I!|Mh48_ILmHhyVDO|M{o?`nUi4$N&7-|NZCx{s#zZ0tXT-Xz(Dy zgZ~8nv-j^I#E23n=EL@{jl@P1H*%c#tRu*d076Qf_fObEVW*ZwWV!O!KVARAVS32! z6v>Xk6e-H%Ezd(mb|9wvXD%nwq)L}EZR+$X)TmOYQmtzBD%Px8w{q=@_0m6$W;VW4 z`myTBhxbU@vzL#bJ(Kz-&V9&FpS*`|BRW)i?;byYg8%&u?2jK{|B(3>Gj8noG33aS zCsVF$`7-9rnm2Rq?D;e3(4t3^E^YcW>eQ9D&g;vuEXZm{Tl0 z#K=DtPUV^jKFstCpMr`yDygNKy3r>fJ_Jc3Y--n@qY{Y-=Tdb3LrXXjeN^I9`phK^ z9*4-3t5K&Kdn~faQa6rN`Lr|0Kg>P^El4`<7HdS1(yClj`6&A>xZ#R>>^>d+$0$d$ zURNToRn?>0JdQTX?YQ;YdoRAuE&5P9MM<=bwpH1g-n)9;GmlC1=DRS%4LgjKhwY{N zW}ptW`!L2CYizHzyb<+Kd=rj1(Zw5^d@{-@OB@ll{~lfEZA3Vh{1AyM+k7+5;d%^f zMN42nDwVW+`E?ypA3G;S%`?vsI*qP@8-6(Ai7UQ1SY7fO{s|5(~l>QQC=+`v>vWG6-t;mC)a zQCYJPLvQ>3d&<@bKm1dN&OQ+uiGY&SJDUDe%Rkj5^7?a-;M7rkA?^N<)WCcHJ@{13 zW3@z|z=2d;5;{qay`^;<(IE_jC`6n2O)o`+NC5s}L#Yf5Ddn;VM4oX9VdRQ% z$6&?~v#7YB5Fr40UQbXBRp>xtuJooCNnDy?uyo_;J5JLL_zX z`0a0#Yuv!ZY`FA0u0NJLU5>QQsT0AGZoK;sANo+aN23S*n(H^GnwM(gg>LFJCEnng zH+A7{uI=vU+=*!SxE+D+c*_D`yG+-<Aba>eUmiD>v}1;((0(;E@`nHM=MF3W{YEaCF%*TVod zNrV}^-w+G<#V+v6}Aa1XZx4UEcN#r=$#SwdfOJM94`NK<&Z*Nl^Wi226UqP%xFm?TF~GiG(Y+R5hisTpnQ;ZQ0%C$t10zPc4l=v zGUf5DQzAnV#e_ud4?(+PPE>Y@*gfuxL5jE5JX^d=MDTp?d)w*06~tTT?}uMIbjlK1 zh)CcnLEngL|HYU2ziwVXlLu{NBde6qlU_lj-+WEm+DOrdF+0O5h^(ATT z>tT<1uH>FMsPBF3Su@;!bfP%-J0V2E34+QmN5)QnK0WbPmLisj`5K7G_5VSFe_X(o zuY^AMlZrQvwD2C9*vR%T@Q@3v!27L?NF>8Af0K@%9^;Q!PFBEv{ky-K|ET5?nUF-7 z!auMBW6d7|;?nqq!~$}k{y~HYv|sU{jC)`+eX8KEw)$zy!V@ zLMS&Jwyc7U=1S09ub;kKKPa}@e0+P5aabA7H$mQs0vAq;0V&d4E_TO&;SZdL^V-h0;EMd zIG;@{VMH89J)Dg^^hK`Kn?xkWKh#AQ?%~aB;b-N94L(F5a)kdW(HpWM2HpmG6%nMF z!a1CSFGNHx{6ipkgDb=gg3%ryZsNlHAj?by4T!)$gknVC01W^^NF0DZA>l@>AZ!U8 zL<|BToCBmq!v#KsHxwR3a01wHqAzO90?tDdhC~@|1QMKLPWay%k_8LJMOtyh`02(u z2wpJ$qBZ7=AL@lf-~~k3AQ?Uc5_F>s6k|vzBOL#8E^dQo!If&Lgs9 z|6>eB1UEuNF#^FL{sRs~1OX@%Fs&j<65gJ2*ACW1pcROCgzB&lR1NSq=~%0M8ZqD_X> zLtSPBf83OlEi>pVWoK zaJr^(_J=z}|Ch&DXh=|i z14P7=K13#Pgp1Zvb4p&L45mCRka7q|qaaKL(UK3XMLmF*jU6ePX2p%(BSh$^Q#h$@ zAw`eoLxm)UjOihc@B?q`408=1MC<`MzzjP?WSSPLnv$PHxM@c) zIm1Tu14IzuF2drbE+k0!0zR-*yCy6&zM;|NXjxnjQn;A}RO>(37ScI@B0L1XDuu87 z!`MXx9{vM4z=Vp~MLzVZuhY(VET-T_y$IO2FPe1l~q!B1(idC@$wx|Hl^ki-bl*)JpC0m99ke z?L_=-=dSK@gk8JfO**s#j&g)3T!o6^U&rIL^_DV=rYCSK7<6+F3mQt_CCk+MoaQ;1aD46 z>uSPc1W&L8S1<)%umxu@25+zicQ6Nkum^`Q2#>G`moN#RunDIy3a_vVw=fI8unWg9 z49~C(*Dwv=unp%h4)3rI_b>?y>_n^uyGX=&`mYiH|3D3NM9yl!_N_qn9WWG61;AdO zxn?i)j^ac7FDe3X7EeU=W*-SSu$kG8$F^;sj2#-AaTGI58h>o-wsF{L1sun588?*= zEl@FK0&OO7QrK&PQd!&r6<3((Cq@M!lf@xVL?W|^Qyj7&lgA<}3TqXlB16R^%kEQL zvVBJKbv&|xcrsQL5hphXA%E!pt^h~k02h-4^O0|CtuZWPMP2CeKNxXDBryYT1l~IF zE3?&m?o_+XsA9#kg5bbyDuo}1@gTj1ag6dOwO(;}Ry!;Ww#My7G_E^tMB;+PHuH>J7@|v zlf?MFLjwYpL*Vm`R#rVb=Raq2Y@+i*gHS|&49hfNI`|C?p0iV2G(R)bJD9^g$@4r% zggjr9rcCrh1T!^-(7^Q$Mv+M|D#-bxcS#R8RF)XSG#tHCA)AR(Ca6Lv>Y$wO5xlS$8#l zob^{TwNbCNS-bUH$F*8V^&15egb2+>=mHwGwOqUPTu(J9{k2~Ywp8=AVD~j$PlRD3 zwNcxLULyq>F~wpRwP5qYVPCdbi}gbw|MfVO3tpe{|L&$zQ0_x0Gg9!ucKE?R?13Mo zwrl@GYs2ndjw{(9uamzMp=R|c^H$x^-cWqO5dbjs_Yd3$JH$cZaup+c$*^ z_kT0RDe^HyB(a85fFJ(@)#|i}V+H;6Z4LPJL%aY)yg(9LfQNgy<$m~x&p1`cV-2YI zKj3(6+3VJsHjV%IUmb^uqqs!q|9HJdgewENl8@dz{{WFs1Rq1{(Sg7&ljM?Po-lXr z5ot$B~ z^R;x7V5Sz8g(+da$3_v71 zokj$w^NKL}kcqy-*Cm*1cs5Dq=^YxWFiEcsK6#F(xJ0}<2>AGH#Ue>Sf=O7-b5}zg ztm8jm!@zuv8zlm!{DT^V|3VYRg0uj`DZIf^G{V;K!yZV@)|fj}woI{u#4ivIfju`Z z)IlixLo(EX57hx|FHIOh#P#TbADjXv?7=CR0Tx|CA~?L*@WCg%L41D4lyamk7x_jE z^#*L8oBxBXcSH&N!xTJ(GDL(nLUg^`_9KpfQkLtp_(iu^>}Kpo)35==t~ z{6kWYg)OwoLsUV7)~=KDrl4QD2x{L7kiZ9!Ko~x8Qg{+X^Z-OSe7Ph+6Y%^)K#0_Y z!(vEFs7TBVB*Q=K|3DJ7^E3TJAt*x-T&AX9y+n*fSU?2fut3et02)NZ8$gli6H*p< z%0IL|zuW*$>_OvW0TXyq31;a|Zo|K6qh_p9K)B@OL0tdry)FAk6z{!u9T%nWWg_Z5v zmHnr1>&Aj`xfYaajyBzf?XVRLr(0XWcI-%wEB={zbLY>Ye}v0Xu5XSCY5z0Va2!8# zu^Z;&$Tj=8efy@FEocw6?tQsuBQKaPo%-na@#oj?R@9G%H)~2wBpO7}i8Yq;kqV-D z#N)^}>l)&RACc^t@Sl7d{D&X=?6GgZ4?zr3zv(injwA)k%8kMGG%P71-%vaW!wf~N z(Z(Cy|Jp+&3>(ViA0U7*jiVZB5U?Q>SR=3?*Zffl!i+pLDM~2mni9t=vCQ(UZsvjS z9}`nj@5zF!WYMKDwM7pH3+qmwn&1kWP^u~i zXTPB--DajIL2PZbi%xbzGAgvp4|eY>$SMB82v*Su7_chHGrl0MHE`q}m-<~>w(tgV z=&EOn`-dzVf{cHxqabqwNjuEpirGA`AlP`vF_wXlWxRtK7EE#UZ%FQx+{+k=%YmdA&$KyVz`V1`qkhmqLys)8GGph$SB#84!I7e`ED z9P`7PzK!H2N5H`m)UrMMK+z3WVhb%}krcuk= zK;oheDMULU_z8A2Vjs5P!zI3Pk7roYDcJbLDPm#CcZ6df$tXx9|IF)f zz*!@uorGIJ7=l&D`I0D^1w#Db%06bNCH94tQtot8v(5#Sf3%}XodC&0W%Z9c6eJX( zU?}wlV$q;)NYF#fh|ylR2f>ZN zGC_)+2MtfE8)NEKrDdpf$X!-rxcu-QoB+Wqo`zZt9A4}hRw zko4}vHSS5F&?dWwW%wk%_y|4f@hP%OiN`ixi;!MWgCs9GV=oZRfkab~DAVM9H2w!Q z3Stc{Z<)(o_VSm(9A+_(napK2^O@0{W;L&w&24t`o8jDLjpQcBBRSVZwc4*D8(FJ% zTS3Q`tmJC5mo6f~<^xd3Gu@po3N2r=H8hi zhQv25EeK+@bgoe+;y$~V1zfuCB*1tDqe!~)me_&*}w5Ff(?4&$h0B4SRRf53hu6v&;6Ws*$cU?(+VxD_qkAR& zN&xSpi$ci5=9-yDOE2n~8X}$~jIOZcTo@uo=3zUINFLbX8K{UTwxJrfBGxKrC88^G zk_bH7fpt`c{HlvP)&oP1s3D{R@ABt||B8XD>?h0qA=#4Z0^Mup3NIv-3DQWy;!30G zq7Njl?;omf<9sA0nCDCW;RYMRq=0AqOd|94V+gszFA8GjK7tMYVGiK05Q5axAxf=yA)aDqYZL-2)Z-VJVWK4Cw3zUP{-NjofvHNc2Aw2zpf4k)uOY541^z)4 zEg%Yh5E+~hB_ODI3IenWq7K?XRVb+u;IJV~4Mc|U6}wL68sZN!f)#?H3_gMt{y-6^ zFbwy@LQWwSGh?7cFeCB-h{R(!|2oM=3=ARirW5qAAmD)xL`R=wNQFwO4*o%vG>RiU zYQ{1G639=ABq$JH(2znR6n>=%Am|;w!G~OrBqYNEVQC;U0tPh^ zB+k&kK*G~9h61P$2&s<(B(e)(BK#UcnG}g5C@CXmiA^%W{l+H~TrCqsVHZPb4r~!5 zw$8rh3HLxmw?KqOI>bV@i}^g`T##XIg3PTlq7FOZ4jW=9;laW>Xy#y#oq9zh1tS#V zi4PzFf=)paQ$m7}N+gUa!7>5`pQjqEgBQ@JA&!9-Yylw`a`{qhNNTOt{^24)!pGzx z-NKE5VlX7Gi&D_z%%R981gSoWbKYS( zuwfs%!Jz6P))Jy1dZAi|1NM~T64TN}7}66Dq`x5YEgygaL{Su?QJMb^??n z1|@Y8ghg4;ZXmQI;8G$hv>~Pr?mXohg5!v;fl7nn8iFAc|KS=$f=jRTN@b@*C+=K= z$;Y-YE=$5Gkgg^AvQ2yRN+wNhj5Imd(%nd6LjU18`|Ld{?sjRA1v% zRdrQawN+j9Rbe$&Nwq=Kh7;}7B=EE)q{7z}l2MJUXWWb$sDaCbHO`C`&OV~ed^Pw| zC%;l60UjU$|MHY0G<4BKqC1zB&w55txwTup^;^L;T*Y-<$+cX|l_ktIUDb76*|lBW z^R48af>VQ5?K5JYa}SPl|2!4NdTY5yT=Np9q3 zjzn#w<_J|KDl=&B#^<(nW}^yYGXiHh_G~kvW1nMT+kpkwWb1+f7vxrMD*_}quOV0= z?b6N=|388NMda-`14SNlCC7f}7>{2DXHZltW zA?GJQFPBXqfu??MEf7eto(6Ffchr*R;%v<=2jCxG_ag`~_(IAfmw<+{@(mb)7qsHA zK7v5?gDaqriROS8#^Db>!PQ9eAI5<;@U8^A?iAeSa6rV8_%CeJlow*bsGxC-RH{#8 zHg)+-1VVx*%-1Ah*CqUc6*FRSd#NB;5k~)EcnTs8a8yg2A`{dOYcqlkSQ3c}ViyZy z4p_k-xB?QoE@GLZ56ZA*U!p-m@*ivg>{4PQ4(~p+fpfxFeD!8b-06JX@*@sF0n&!* z|6GE48iE<7Au9*4As%8HvZo=ibtWz5ao&L(XApoxUAM*7h1ZlY}WOp88 z^s>aA4D-N#^T7P6gXjT{)1_=iBF7wfKk`_Qhvp3F(i2}o0RUif#Zziv$&N{aCa;7m zREbYaRxsDImTUR*0<|#d^AqltgFhLRf2Nar0suq~ds#(2K7k4^;UzVpJ*V~`|44M} zGQkjBZfchq5~f*0jak=z8JK0}1|9fTQ^J&sd1QJt82q*&;+E?Q2^ZoP7m5L%yRMf5 z*qdPmb?upHgt;d~u0$7xGD*ThDvcQdRbRU~pIt^yNdi)PB3~($Q=H44fOjO;^V~G? zq5XB65qj6EE*wsCqmAaEK{{e?a7yN3l;Pz_Tw-!rg4JC5rC~azWqPJ*x~6UVrg1u_ zb$X|Hx~F~mr-3@Cg<7UrLZnApVphvFGJA?Zts*Oa%UzB%E4jY-@J7f{OLnsMY$P|BH-#QNXSL zfvNSzuJgJi@OrTMg{@VZBi>ph;u>Xi0U>MQA8J7tK7z6fBC?MLVltOG3fr*pWv>_8 zfJkzA|6vuHDwfOf6c9nRP5Z#o+AV5vGm0ZSmII+Eadbt*67Tu7J^NnhXsJW{Bm}z& zPokhjBo?-3WakqkMmCHaVxTvBVWPV&I=i>a1qn6hMnA%@{dy&4w912amr3G6o`;-Cu70K-E}UWYotNkuSwd$nOj@UsX@gvLKW8PzT0y}?Zvzzq8==| zm7(#$&!WxUd|_}l&YR;g8Yjwebal)D{xag*wDXOyBp=knfa@ zA6+fgLuxD?EigUP879t`g|CBrB@WpsXe2x2)Hj}sxPA}+|BU-HNYZ2{1bqH2BN%8s zRR!oAHgOxg*L}TNVu#KPV%TBgkU!$tPh!_s!a}&WAap?(-rch4P8Vr$6ul%AowA=tGPnIkBvokmz29?1w-ojFL}1v-z0>2h z<2~M7Pomm?jFK7i<4ykLQ9k8WexEa%;+>|0TqC#*=sYeYA8h&NZQ0*&o*p_VLCpH+ zfj;Pke(1LvtzBMkbYkP7!yK5t>7D-Rp+4%Re(I^d>aE`D`yG>a?C6i?O=W&9B&!m& zVeHAi?9Kk{(LU|fe(l-5?cKiYxxPhvJnqT7Bvjz7|CQb?W@PXAzVH41?*TvX1%L1f z|L=+Z@DV@p6@T%q+UV(CWX7aH^yxq@Km?TfA1jG=9+eA-}()oHd)>8tJ_~6_V*=99@p~!y7DuhX)3LW znJ5{UKY*Vh7_wA=K`JAR%BZl6_pt=~^X2z}|JVPR`2U(Ya_#DNRQtm%BYe>-+LPoi zftsgq3X2vJsCoWn?rJg8x8n*?CcgVw1*HMvpTL3tL|iEN?;yd23>!LpD3Bk-i3=rC zyofO)LwoQ3X&T7S;y`*4MfwZr&tJon|44fL|L3ox#+fv0+JqR2V7`C*jzNML>!whf zaPrw3iZrRxrA(VTeF`-y)NI}NH`{;wH-03DnZ&BScUA2@lh`Zv-ioTWR#mAH35gww zqQl;`XBD+6YL^yowW>y`RhwKs*LBYI{o#9^lRqFi=XH{29?$#Zb`J*Auo?=(M0Ign zf@9Ma8GPL@jy!I{f_I(g{T6Qo*s_wd=RL-6yYxi&msCTu?8cNSGX%hmXRnyL z!wC`ZhV_^qPIjl>weL(+Z15ai<>q9lTNV9YL((ATzGUtsV7Q4w(C5Zvw><3DUbSnQ~yv*_QOIFMSWbAf9zeBH5lnPEC*mhr_t2#Fe2H zP^&#q^QX)s4$FEvGnnm={LVNrT35k=9%fi8~e?Oq9t z6dDsG03JfhDZS(}(RrP_XZwM^V;=G4AK7(}O9D~u#AYGd6ZtAXUhX{!)%pE&phOWd zeZIy%D@hJ2kBF4S)n$(?`V&Auj|U6^k%$U+P)lhMQ!Fp5GfWUc;w3Qr?D-T1xE}fn zi5M}5d@6fT@10?ZSedu^G>G+opBkH%pZDdZP8p28 zA`#)wO>Rr)jUy8k^4aGi38JKrJc*7h<4!!=`R@u?KupyLO5vd;a=z07(s|>O!VSa~ zl7S}}i1{^$hTue}Phe^qH-I>dM;DM(N)tva6({Ywt~J{Vp|kM!-YxgA`e3FW-Rh+W z3UUim5D^Xi`Zbc{54YxiRurJ!l$$vS1fu;2S;(&AX@64yye9zx+!SVfYAn1TNijO& z_cSZwIG?n44srnH$B~E>TyVPS!eM=>015>28bmMZFjSl0i-qv%ztycP=ud!BK+c|P@I<4y)Oj8DQ;QHl z!8?Mw-~E?S8SJj24pIKgq~JR@FUr0&@X|&rYqdi}SASB)il$ZMwOVk;l@RhOLX`YO zEfQFDxzm>?P+g?pt|^4D#)?6*>Mi6v(p(bV?6)@j&Y)#aBkBG)o!DKZ#}I}epu;ah z=Qaqu=U8n>-MV3fQrK<&7v=stp-`7p+%l(8+bjBRwNJ3p1(#)oRi#-+txPH99Kqqy zH=hfVT@IvOTB8PJEvO-}D7KoEb_+R=wSPSNJwZC0etusQoiWFzGI6s{++D}q z8&A;LkGlFyE)nC^@+3U$l8mCmU?%F#^4GViKirrP!RWyM!PH;MP;j%@z5yFYVx5q3W+BL+Ac5H?L&)*f&m%c9B_e~>D2_00bxj@^zddu zlFX9LTC&nf)>?|(?3tAj*;OHt`=mhmdYTU@5<)~myj-M7{t)w4g9Oqw2P0uP8F%Im zKOfJ8K=I!-0l>VCbbx~%{tX4OJme|Uizw7PWi9OQcffpZe6AJ+gD~tZV}*r<<-PU% zhql-7+`j}0;zT;3 zeOvTH^KAT1b<0UbWz9#jk)4`8N~%A#15BTGV70~;Q5uvCU)CFEtP&tB0N1;C=7nHo z=$!|CJG=1Zo8Er)2XEhqxBZ?i-h;VA82$!4S=YpOoJegA+(OPfHBFRBE3p~}$)>U0 zWKaujt+}ju=%w7U3HtNd`L4t!Tj)xU}@svuxQKZ;fVMk z_0gzQf&rfRtG(|%DjZiolrcWn_?LArMeQG=C}~3Nx1s5H-s>lAX}gVRq|)D7 zapX3n`^IFuendQbm%2k*Su^=`X+pVTe92g;2aHhJ1rVEDskhyo2|F6U%kWaU3amb^ zvbFq9_2|paUija`qW8&)YnW*o+4d~>sp|RqQOYH0x5s(M!yaX9O~+rgWNeLxEu}4Ft{04RzCo;(5uKqc(*PDK=~+ z(87i*4#v8WhL5$;P(@dQM=Lv1b<(|)p?r-$uFV|tHCU=I`4GaE5Q0sx$oG6%=loC* zzcG2A2lhcnm36Mo|0RH}Jp{W5s!ypd|Md_<#ixEEIUtpGkmzaX&P>p3#dsI8`X#QZ zv!12+%s`V#>iF18p@V8_XbxX?zLmBED&HV@%!t1mNJltTq@x#yODy6S($ixfLt-JW zKNYSt$R&qvV+73P(~HkLUT92mnzb(}kGiTo+ArX+cUYTl4@s301SYjw6pB+644{rD zlL??fg+t*%Rbw>kOx6I$FPwrL<@%jj1rLGWZgN8R==7QV`T0w~e0>sn^oGfmTqvCg zWFAyNk7@-7nbjpd->ix`6)q69EvGr|4oC#$$8c3l64bS`%(&|$u!va&x$Xo0*PV^p z>{b4Wh^saFnc4yQiaHv9zusi*TQWKPxj|pk0arWTn_u1TjxKc{k+Iu4ypduov+cN8 zf>BqA`v9mxM8Z1BtSzIInxK5f%lKttKxGlz5<=rOxkHx;7zb?rssaPC)tJ3jq8jz`0D z9T(rK=`_o$MSG@Vv!>zz=R$!DY|{fuOeOCcVwfBK%)J{)SSKdRMe3u-v^NXN9=!5e z+dQYX@1jdeqt_KK2yOOnzin|bjh#l0K*%!O z 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 L0-&?*{wTwPk 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 Eku4C9ng<1p#UxA^W5g<2D@m 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

x%y0`{`n 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�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¥482VC^-lVwU;6RL>=aoph5t3H5BWuo zo)LV>&y8D<|F;DaX#O+B_dq;c;C*-p)Due2izlQd$0ecp1#~8Lwo#y zOP4+|-@b{Nol6v-{~5gaf;D~n%g39vd+-gn=A3`k=KT6|^Wz=5AOHXUzVgp0{R-@A zz`6u9FhB(xWbnWRO+pYr#T=xt!V3Yk&%XaQL@)t@0voKbUJz4?GGAO#(Uo&dd}*F% zO5&#*TfzZt8d}2f#~Nz*d1f4Jrtxu{aDK5x8-Ko`1<7J~5eArXlEI~zcbfcWpLZPE zhc@BnIffTr1ZwA)f5x%J8h(VaQFh97KfxzZnM!f_7H zaboPnmSX0i@tYm}9P}U1^68A3apnP&nJRgS(V=!~L+BY^#;Ix z8)!3wmf@wH|8|54vz=df(dILMGW7LVV1pHQSYnGc_E=<-Rd!isn|1ctiP))UM8go% z$t!;ViK3KJw1CE+cCI}s#*=(hLk=~%Sw;;w+TaJ0Eb`%l7D%?RXAfFFQ6rIG!a)O$ zGoGQP4KhA?28}sF(MAnD+Ti6?d$z2tqf2;cq!@orv1Ol2Vu9otOn51TnNVoKMAT)> z;isKt##x!td?Mbbolu?$ryWe_4JVXXF!{%vPaxIpIF6Y~=Mq~IdFB&aFtG-cQ+)QU zy>L?IXPQueJBATIA?c+Wg>DRGnt!l?q?S`=WM;ZvAYq1?Pfj^ynonZ+B%f}c$?h9w ze2hC5|7IX5Mx19Z5vI0q){a?R#v6D1amXW=d~(VwxBPOBD0vAi0AUP1uNK z97y)~$ChROIYs(|Gbv^qHRd^`j?yxcn4gN~d54`#+5!2Sa1u%96JhcR=MsBP3FVV_ zVz~s8aZb795_5#&5|~KGJGxmIU4bfc8mjsQ47VpF7b_jXrmC}&_*Ldu?%|A4j=Nu9GJjF z|179ch(rkE7pH*R62k!rYYZ?)kU&~EJ^>10FryF}WJV%R5e{nn&lcn(T^Y@IMl_~T zjca6M8{POu(fvaKAd=%>l+wCtfkY>(lgB<}7dt_GOCGi(*FyZk2S%*w9entNKlTu{ zLhOMIzhFck_87dKfc6N5FhX%lZ2037zc2?QmeGiD9ODw( zOGGhFmN8-Q!xn|W1ZfQCk6(O(8S{vR|CWJ?Tbd&s!nnjZig8U#VS*YSoChZ6|96RB zJfjgN;|DF$=1g9IA|0{lgPtI93R?7n7XHA7H9mm}VT7YepwQ?qLSZC-bfZ0RBxy-a zdQz08RHZ8==|37kkO&mOj$6s2>gpj6fBaE)-wKzwZdWd0pn(r(z(z6Dum?4~BN1+6 z!Y}^O2xcrHlWq9KGNy4F8yW8b1=O&VX2jB;f zsMF)MC-|g#78v)&ofRTkbUkWqtAH8KX?(2Zmc2}{iQ}I`o<4! zJY!}VLqbD#bEXVAHHA_Jh1wHl`nc)-IQB(l+lKx7h|k;o@KBtdveaMBWy zG@K+niFm{hew~IRT;CY4_{1S@@z^jt;|WhVv`l_-l&4(f|0`#C%U%9*Wxezt0U(H| zlyU{s;V0zx;5o&gF|^MFUFbt6deM!3bfM2k8@3Vo!(sk(s7GDuQ>S{>t$uZ^xBLJT zp*cYwMUZyq{6q=odCz(B3~Qv_8rYysH{9M0ZN&ZUbEkXV?SA*S(}o${xXebf{&&C! zUhsn_eBlj$_+vS}?DybFKFraLVn$x_lc#*;Eq{5-4;=BE=X~cq|9Q}dzVP%;7P3Xt z9@M8^^{Z!n>s^ofI*DHPv!{LSZGU^*PlWWyGJEcQ|9jvEU--kv{qBi>eB>uz`O9ZM z;f=p}q(@)+(>MCpn}2=mXJ7lof4<>2i;aq^ok!xQ|Hj(EKYsD6z5LzyM*F`3ce%e` z8{nsZ{m-8c>u+EG`{#fEoe!+lS)Gq_I$sfq49N$U!92+$5(T8Z_hUcyDW-9lKnkqD zahL{dU^?K-F8}L55B$JmK_P&XhrkfP^=J%#kOvcNI*Egm?`Vj6xQC2e!OiNdp>vM* zAc%X|hkN*r)N76$thVM5Lhl$t9~8o%(~WS*K#af%hakDfK#7Bp6pCw!kGMj4!@`n# z5f^hYQ*#_W@qeN(2q*NR3Hkj8Iz- z&iIIY_y#5{h}Hm(@?Z=|A&t(E58hY|#_+b-b3uYYkIrxo4QvQaqm1~ljqb2QT5AsJ z=!{T=IBBc4SfsV>SdPqCMO6%rhR_YabBNZ+#WuXg+~bgz(?-F=xql!%SLzH|2!ve7 zg+TBIf0!1+Km$LxgE}Y#Gf2VKX$?_hjOb_#)*y`?_=F_rtzM}{-|!7S)CbvUhiOcU<5Pkf-EquGmwWhXavBhHiKN8&RB*s zr~@*%23s(LcF6}n2!nl417Ju5EO>`F-~~o#gGM+8YN$;!V1`pL12QloGAM*lpawG7 z12p&rQ2P#)Jc)gr_V1zh01*PJHI}N2q|44*YF#}CVhG$R%Y1)IcI<@XRHh$5&Xg^+}yTp-a#PpfLwpc_M8HoJ4Tdd3dH`{kdZ8g#^-1btx|R6ew%Z zhEOmdk^P`@3I%f@u4DLyLhz;|N~ge~t#QZ)f$A{>%OCw&hEPB*XVNX&>V-?lhlIig z=ky1AQdCIbhfey26Fr7kEi9=Vr@4a9ahNjgv;|%ehp}lVjbQ}2S(y-;#eltC-0i%9 z{Rbe;DcF%6BAthYZGtoC0y21mCD2?1Dugy@f*jZa7N~;|7zE6a8fgRYBjG$TBoJcg#12n)*G}r?;$cH;P1zczXEz$&LfP!K$ zgf)PKWVnW-G6Nb-gxz_D=}d)d0E0Wos_@y`>avG-NUm>qhr6lZ!08c8pptI-7+1B0 zc|cwGM6qa6jrl1Y8VUuvvaLqYPu>zx&owB;^0G!Sn+96dOV~6pn1m3WP5)lSa@G|H!sJtqMP_l(uz|q`2 zV>AxD-JJ-3Fa<4GFGq-mn7IdfC=5N2gF1Lj%TSH*4T4aWf-Oh_MmU2+u!ko2s4-oF zUciDS{|Evz$OlGHf*?qQL`Z^fXo5PR%Ts%Ynx!xgx(3x?23k;=XAp>_yav8YN^MAm zR46lT_#o1-hCMNd48nzUzy(?WWv!K92|I?zwTHe<2$CrV`EjauU@&>$r7tpv_<>Ps zrMH@VT+dww;OK>q`UiwsH>)I#V<3!tKpn@`GG|h-hcE{t=>=RFn>0~p?I06}$On&l zhIVKtZ0H6X>xF-Su5U00T8ITx5o6C#PVo53H2WZPfT(FW=1`~x6%7Y7PGg9UXsKJ{ ze|WS+yJ&dG2YsMpgDex4jhOa$r7B?zc`}EE_`@Vapmh_$(pZ@*>4sIS2XT0Z)nVT= z|4a=T6pu^njL!%SeE<(u3r z1C725MXHXqheL>0=?q%qjP5Xqgte`&yZ-q4(y2rkVm738`KHy01kwtFfu|tpK@%}n?lquHiW!~*wl%b*)d~7YCSrR z%wFHkUYyUi2N@LJ)QgxUOi5Sz!mv<}!8$l73^|;@H-x*6D@+N7yElDnL4~tIh7-8n z7Q|`9?Qh)e*vJwb6l~>QZj~dwID9RT&j=%6?#H%mZLy8a|@e5Il|9CwiA9B^JHX-*rwBW`Y zUvehT-7ZiTaWOf7Z5Ac(5R|L(CeLy$4?T+hl_-ZgA`kO0e~HywIV|6DG*9!<`#tYA zZ#RE)IFEBAS93bA^Zx7dweY^WRB%4;b3fcZ~x$n}zO^7P#18oElv0P>UGVKnzV| zw$Nw}t&R@!KsI`)V}3B~)(DBt0I;KunD=;%VaM)bQwj6Yj$KPbT4yztQ23k1HG7Q3 zkiHhr00~c%jGoT*Nso5;*z8!t`1VlvUPJiR?lzTZj%wF-nV)%@|JSo+5ywu*`A$H` zMW;2=AdJ`0#D7G=Qy_zSM?ueM4AYoHbAOF$#1cq}@gL)gbSMNk*u!ubggBV10rH0t zsxg0f;Z(STJpcxNXoNQi8c5KCJmnH8eW1h zjZiixYJ3l()_+){ai9@ezy@qaogxzku=WgX;H3=AHDaxK-tT?izb>Unhpos0@ye;f zJj@i7!&B&jCcp%KNQ5SUf_OZICYS=d{emo*BqnG8IT(a3|7e0jV18^!2Q`3#Hy8&! zz=9^|SS-*6YA}N!*n@W{gfAe2EMQ?X*aNzR&4Vlmfba+DjjcD|3hjwyCLEtC)6Nvr zBZXRZ`SI`PAn7$4nT%Vxeq(;>YY* zzGJ;&g*tZm)H`O0p2@ug(-tj$@0J~#_f8ll$D7~L|2if3CGXz8e*+ILd^qvq#*ZUU zu6#N3=FXo(k1l;W_3F#V3BMw|UcGt#pb09~O3*NW^8URO*ak|HUnRaY31Mr=l^|yl zRcI5UjTsKMpaek%1Zc3ZhaWrK5dtPlByj}?ZM>Z$iWLEap>XEAZ_sRhA@e!k;piEgp!px{v_g|En@hAOEPcx^T{9| zzSP!CF70E^C&hr3P9neXb4nmUHhE!%QJ|bcGWST|FrW7CZCw|3^VUMlgKBvgp){M)->|T zCC_xq3_sLNN)0BM(89|p#pu=uB&T>6%QL*h!m2;NG!hP_r-+qEDB<*C<}d!x0?9j7 z1;&e+ytHJUv(G{st+dlpTdlR%Vhdb5z=2p?daY;y&3Mo>dle*C)W--5?VJ)r9UNf6 zgc*e-;g1wwB$9(aP_)4e2i;(S1{gD_;X@)#6w)p~OOO#nAO0+%2NP=e(+dk-^pMXy zHMKM1OWqa22Q!0U!$%>@n4ygxr|{7PHFcz-M-$HsQb;iAKvKsug)rmKAc^=x5-!&W zgT^&)^w_PFH2o7LCeL6p%{=Bb(hV=g|4!x4IOZ4z$uhLqg3~DirPI!*{#eG$H)D^( zOeomkl!&Uc72*>wp*&-a+>o@Bmxtp>HBKzHK$6bg;V=`+K9`Jx4K<(q@=G|Fn4`@y zkmRH4IK^CIOE15ynkpo=*y2w(m+V99XXy~tBQ-sqa*8dd$ZC2z^9-JwEx*u$O*kmJ zl&$c?6JNaX$0MISa@+paEphVrGhQp;kvq>l^Nhm+6kl)vN(p96!2%{FsG-Ilh4kQ0 z6;gx}!ZJ;e!3zh)Kw-upN?fuS-NeSTu!3<|$LMVc8iX>2MUl5Q3lS0%n63yc$ ze8|y0z7eBO2!tzj;7KyRp$2Mb|6&bwz{NWX(S|~#XHIBqgB&zL4K%QU5%(Zb(`3T5 ze7vI(ynqBYKGBOtJOe3^=*A^f#jdCnLx+v91}1Eg2y-wZ6jD=5TQDJvQ%vI$Rlx=% zc%h4Y@Wd&8;fFbT0gA$eLRIV-#3{lNL|!C<9ev@)F$!^)anOPmpLoV6PH_oskj^Ld z@XMlju?%611~9e|hCgC=tIP0$RiKDPI6{$#ZXgnDy|_#@B$RHI7Te=RJ!0P zFO{lXB`aI$N>@5>IM5r0Ag1StXtZP=^vDMvf-nP@H9`tYV1Y3D(1Rv)stf*rgBq-X zK=Tzt3ePZKIHbUYnW2GC|5Ct482F$KChXu13&9`lIIKHAx|$n<3%-Ju6o_|coC1uq}gIK?xb!qCjEDj!oRhF3zdjD3(Y zHqW3%G13u>Sny(7!DEJQBom8i@S_^C(#%C&vax)$I3%uJYJ4tEk&9Pc3AJEj4)WxV5R;|Oa_ z%@MnHv?Dj;um;$!`pUP$HLh}%sbLSkI%jXrsJT-IIx0Pf56Ef!eD_En5NDL z_GV)xnytn*wlSub$R*t2jZ23!SnKf?p}fJ$JPTS6#2VDJF!6^$Px~0in3jgiZHZrs z%iIXMmbWlj?mi;O+~wNyV})fdO#Km=f{wSly&-OSBZJ&|^fN?=y(ePn$=u_bx4iwV zuV3=}-MRuezycmHfuYqcVW4L?^>~N%_L`4+@a7$Uc}y(M5Qk;B<{j@qYiKpr4hd_x zvl_l#hy+Vmm*AF)1}!WtHke(TJfko7oN!M^>_t|AW)yBIouuwv95BlPqKq6143^C=p%iL5?dea0I@F>bb*M=d7CKAI9*tf#t6S~rS3m2~1fthBdEy?dxCjdJ71KG;{2s>RliECC2tmvj4H{T_5MxQU?I_p^D^ZE`C*+uybp7KWW1Y-^j`=kE5r={;}iO!?Q|UN`dWt!;QK8`9U!Ygj^ibFi(1HL%N8Lsi+bUfq<7qiIK{qg1y zn>Z!6_`f@T@|VYzPOvrGd!-fzaN{mQxqQ#0B zFKW!l@ge|$13`WqIr3kC0RK`FNXfFL%aIH({Vj%brcUw(Z-s=iEuDTlc>?hSMY!o{~6N;K+I3LB1RKa+c3s zr^#bnb{;P+v0vYACr{Emc36V{_dZ^HOYpeUt6$GD{J-w*-{<)wJdK?+_UG7{1Dw78 z{{RLk;D7`cXyAbe%H~f}3#QZ{So}mN;XnNRcTa`Ad5llTAkX zPLxc#_Rc?7ri4$HFL878PZZ zYU-(|rmE_ythVavtFXrZD(kGY)@tjmxaO+suDtf@>#x8DE9|hu7HjOW$R?}ovdlK? z?6c5DEA6z@R%`9G*k-Hkw%m5>?YH2DEAF`DmTT_0=%%agy6m>=?z`~DEAPDY)@$#* z_~xtczWny<@4o;CEbzbt7i{ps2q&!Y!VEX;@WT*CEb+t?S8Vac7-y{U#vFI-@y8&C zEb_=Cmu&LMD5tFQ$}G1`n#(Z9ydn!R{6n+NHQ%gr&OGDn^Ugo_4D`@K7ajD`L?dl< z(o8Syw9-&F9re>vS55WRQ)g|p)>v=tb=P2XE%w)AhfVg`W~W{D+Gw+_cH3~jy>yc7 zj9GU(cjs;Q-gxu>t#{vm|1G%Rga=;u;D#rT_~M5*uDIijKQ4LXltXU$pa8=%|;T`su2-&id=C$DX*%wAXI??YQTz`|iB=?)&e+2QU2a#IqVs ztS#z$eDTZ|nLNIQG>>{8BH^{*bdhmlF^dP`6D8bvL<4f~Mp$b>X!WO#lg)oev3};Bg7rvy0V8NknYRJPL z`tXN945ASKhe*UC8c~NOBoH~0af~K9@rh83q7OrKCvD2in7^7Q zHrZ4E&P|njjOjj|q zpd9sP2pcLSj(&2J0@ajBr`f7{Dzv1kOein`O41*#^n)_ZXi714(@(ZEr{J{dE@LWE zmew>yJw>JdQbNq8Hno>P?ddI-lGLh(a)S%Cs#T-f&mkG}tH&f>mVUvHCmr#uLHx&A z6PQ4>(on4~gzFJg!a}*a^{#idD_-|nM7`>juYh&oJNUu9sQdy;PU@>m0&7G9A@M+r zWeN9sMA^z(mPeM&tY$a6SdS4`s?+xW&Tma&d?jAI<5xW_=A@H4^+%6&Y8!a)WyFKn^o zCNufTPL48^r|je;TlvaZF0quiOyw?fnHTnWhdoS0+~IoGw`ESVXwj_ZHoN)%&2Wyh zoKMRme%OP)_RCO)=FI0l`?|YHvj(7Na*}1N@vlok~P%GNmILtJsS%}FOhPu&HS~jY$ z6xUdDd)U+-6ShIUZd^~P*54Ls3OD`E6pmvY;!ZZVdyVWTHEGi-?6zRr%|dhc+lK9+ zbqlZ5B(^4YN)E?l#4Al}dZ*Ay#}4?m`Io+?sBlYTq!%}In<|4 zb*Zzw=S#79QkZUN+4MZ;O94B}!%p^h5>%!>AG_Df4jZfk`{`AGNzb{i*0fu_?QEAj z)Wyzn`$bBhumOC5ke(^6zI1_yFY4Jr=6915o?H|)dRL zn}I{MYS{`Ihrz3gXC`D0`Pclf_sPW5RW{r+d{pwr)`q-C!CYi5#%y-Ow`PiTTJt7%a5~ecz`Xivx zHMoBKwf}$b4`KYl-@*AmIOxcS2`TL#|Irkkc{~&TAII6)=Gt7jkGYS?+-HutCCwET znIj}}Plh%nZ$>3AuQ+s;L{kqULf5zjx+3Y&iYO#1ia#~BF;ZGS zwQDEB(-*qF7O%M*Y&~|zdWVj#gk5fTQc{H-4%`bG5Br0L1|wYp06h9u_e`c_>WX>q zk}w;Tuz&d>D%#Lp0t|`AAQn?q+F%{Uwk(|ymuq;>fqASQqExto-2s>|{`AJH*b8zP z+jWex9LB~Ix*loT!G}>7!2D(~xgUYN5rst`VghcZTO5WN`r|^^ao$7W)((l6TyR;m zLAm8tLq%;Fc|Y6armF!%-2dP>1Nn>#Tz6F<86i!WvQ!88>KC@pw`$H4& zs6STd1uk}q`+%C|EU$=!Us;TqRtnN_5u0b#C{r`wJ!6M?8t*O_?YfzqMF& zA-XrJQA>Cd!eg?*tzVyWM1XO2SquB8%HgAg)(fSE9_qwI7~GEf&r{wF9DOM>%HUPe z6~U;k1GMX85$aW;1IxYVi$(D0V*Bc1$7`wff+b;VF?=Dc<*9 zc0~D5Y59luE=e+Xho>JIu9Q>$l@BXaOj}e;l~&BWciI1Q?bVM8y>ae2+J=D6jnuhojJ)hVmh>#jAJsWm*R)sB^Mpg;x*Y&}#qtFk(q?mF9Te#^qlFsmj$mHb8+>CM{L2~wx*GyN)GLkMh_mnu zE4vVE9%tN^<8gh|c}>-&fcb%tbJaEHr=4YGS@tgu%Ifvttsk79 zM%nO3I6t?M_7rRux+gO)^;rDHmD29Z?E#M!`^(PAm(Ba}za1}UvDl1m%D?G;!hNs# z_nr`S#bMUwQ8|gO}e$hJ{$RL1M{Cu?SF5t3(rNhR+S}TC0o}`Tcy2Qm&!_>)yeJawZ390g%`>^ z)^m<6aILG8A1I0GQEUFK*T(gnIadvK93rW)6u1Qrbp6sgl+}i#bv_=|fYI?I3<}au zh01aJ7Fjs*u{j6{8lLO5(VnVmRaq~x86eoeZ|;LVM6%I4qFJn9Km7FmT-d$uUNJc`XD?41r0L zV7)_+>gX<_b-DC*Sj2F<#<<*x@nh_8S4(8)!vNbeYFFIxYoc(E!;6H(Cy$cPv+J5k zZnwgfg?*t+9cK&DEs>J*ly(C(*w_sTAn)_(kU+=Ew>M`9s1)+8^NrV01F%nYQSmNpF+>t`PA;FK*Hc)e>C(A1wpm4pHU!j z46o0KY%Ubg5xx43li8s4Err7RlnSd9=2%vDPA=fzH zSTalR&Aix9y~6tQa$8Ecc=>q=1JZyK=>Z?WdI1&?!ir&Fz_PPodw?9qL-Cx@eiWl` zet!Tbt6vB!LkLSK1D(cUh=mW!7;|h80VuliNMyK&2$??S(4{bt@}ZZL-+IroR-FGx zp~7yRz#14Jy{#Y<3d18hJca_CP&s5MOnXFjuZ2c$|L($(}_GL~s4mxQ>WhZemYK|~EhDiEQ7$!p4 zJy8sP2xuef^)ZDb0m0}R!f}P+deNV$~!$?nwtpWvBu5iA+@sFbo4@+XCz*m2D%0wS>T6f`S|;GxJc{$G*M( z%+6R&l-?;55ux_;a zRa){JYffN$AVWv~yS;qqGKGmTpXqyY_irM=a{*>T1PtF`W2J)RBNC zLo+1LLSMG_v>_NX39x?*>^vyQ8If@!ka7+Vy`%+ICotr5zBxv4w1u!TQkl!B3Uc0GLjc0#+*{`SQATHBR^||vf1`lQ z>o8XoU?_q848bge?hY7bGRa>+FSe%neHd;|nkaMTy4A9^*~a+oifB)`C9NjnHFw0B zD(r1%xa$z3Nh=ZYogsmdypuEP}YJ_Q(&%)&xsyiRyqj~M8Ma-?#y*yV!ts4#HrramWNn-i*(&qN1l zeW@JRh-_aO7(?^F*%Fx$ql_U7F!zu(y+=&vC>&G6OgvPMHse{oASedzanTr5S-w_s z4etF)&hio7<<^sw_NU*S?CV8@|D6fRYd@#2s{E(r|J|fM=e~aiXZK775mB#C@*zI? z5E7akWIXr@0Wt7m^Ua6QImgTE;A^em`2`q0pBV%9ji-P!X($NB8Ir)zK|swJ-(d?T z{+bP8aio6~pR7~}Gr!H}zDfX=GJx(NI0B48Vo4wjCu?;+Gz|fXqkac&%~cYb=o{Da0%=V$J35}AdsZn-GEX`XpB>9jplxnVeM zHP(EN-q6h;D4F4ph1v^>etgZZHjgG@Jw7fUoI_aE>ejcXiM(2M{cyGF>Z;H-{eRJIc0&x4czW<5p_xAbw_cOS54_Da#7F z(Wm~Y`Qb=N>#)Po&zdwQ(Qs5DtGNcv-ke`Xqdul`BNfA|6(YgJKZQ;+U;K4D!~Tj9 zv!;_h+r@Av$1CQV&dx5H9Zpw0m^Gzc{pw$QHFwYXa@9TR#|syas8hfD*~M{+;z9Tr z*=x5-ZoRzbM+>FffJ!+AI3*m=y=ih#>v{p-)KV?C&_S6_w|k$=wcR5oZ*{sy&8KPK zj9E^LyczeqU)v+$;PQU!8T9z?m#C&OEQglH;~!G@aV z#L8rX8eUm=@=wIbRmE05ldI*=yVFWT3VPq!l{Kmw)*GCV=H}Uw>i_Df&|byfKJ?_{ z$HMJ)<{RI(>s{5e{9m8%(f>`-=*Cq&{`>IQ`ek=RX2?%G+ey%B@jYwFfpbRZNvd@F z8;OPI;AsBY`m>&UHA75@pih^d$L_UnhmVJU$yrwZ?ae$G=sKj+ehBy-WJ9omde?)iwt3QIf%C@WZJU&Ahkr70-mzFIJ$`1KD_N=0+nt?Sp=ISQXj;uki`X6C5;N!yOIuTrD#*Q zbX3k$8aQeMJTZ4Q5R#<>YEm{zxH7RIwSo!h%x@`LJq z{`X#HpAQR_+3nMj8zA+T2YJ{YZ;@jGOCItAXtBYv=ow^Cy=f;qMp{~O#0qRAQVO%Y z8=4xvy97@n!GgkcR>8L&m<-! zKlJiBd^V+t2KHuaXnhu+f|$yCdBSXUUO;>3*?}ve?4E>bv9^pftr5iaq#+YnTkC-8 zTf%gBbgp;=eHVYy%l7E5BgY~gWNJQ|tcIrx`Q!tg=TSMKO^f0Q{(ZtD$vMcDaL+UO z0pXd&yoqqZrp1C)Dp-8i`imBJIU_=TfahsSrZ#pj z9}_>Q0;7 zAxM)#$TJ+gi~M2-t{eb|b-GitqOVPPuY1&x1F$Z$qcwC^wYV zBw%LJgK+q%C!mP!#^1| zq-5IV0eR$BahgJO^k_tiFO#yro~W90BTQp@kDw_ zb?(b>_owNMiP^1y@9Q6hq(*%Xf%HWWuuS#k%I;+DHy!rr2lOYnx-BmYzp}NceDF|e zHB+Rji;D%in_1=d!)gzgSZNhf`iHzq5w@1NT*I?GRJZP5ZEYGL&yz-w!CkV{yIz(X zo_;dB>2k%RajROqS^J`l?V8@##)Etzwe&5!s^z{q!@=j@3~>$VW-oum)|g6>FsNy-MPYA;klhWT>Q!%UgP&JV&Nrj<028M>K~)# z{#1bz*3FG#$4ln+8Z8qxo!_Y?q5Vts9~=(dGK!m-oZIglO!yV?E^h9CHh1uj{yk4K zieKWNKOD47+%0++zp6d|?-MR@uihhmFCS5#Qo0s)8DwHlOIM&N0aks2ZKpxf8QmY9n90V-_ z6ix(ViI9gxmO3J92a&Ch$o`qgu|kCI5n)WdoV>kU(!Jaoy*y^Uy!6h=S>h$d`-`cW zQ;*&X*7XW?^a}U&ihS-BUFj9u>lJ4rEwd4CCY#_1_+%53v=d3jha?+LlEaeZACeU6 zNQxaKWT=T`Ij&Jq?A_4|6(%xbrBcF8_5zcb3a{xC8x749720!sX)!>h=4W^xSzn#0 z;7PCP{%u}+_g&KHt1`~EEi95c%19u9WBeu4r}A_4>a4Q+?9HH# z(*2I{;8;#!lv|(mO250Uxs%y|gYCd1!Lm zY)z#Zv3T7_=iIy{|1w?3u#z(s~jpW2#w1qEV_hD*IT!W zB!Uwu;L2%m3>xfW3`)dXc*hT70xe6KtWwOZlF+yYT|M{ND&8!s3|=$q7OTuY1NRUM z^V#e)L@t6`Mxh%QA8oTt#nrR3BWQf^uh}o_h zcdR7+tp%!a9;1uK7#(8N5KLN}%vzlGR;^7aNWEh;C=mj_07o)fsp4pJS$$`R9yIDz(7Wpa@5I0A0}GtU%uc)Vqhx!cm?bzP``YA_z9xd*;Q z00!r$`BQ}>dg|=*nQ2KBu;yQoqw5Is8(jHbnw=Gn5-tk(fic;|j zQF=^Q-v06s(^WLk6py*o+9Z`#GiwICUxU*{r-e?9=@Nmq33leh&$?7_Y!~Rl5Y`Bi zen)=Hhyb?7V{{=<9Vb!63d{2egSa|p#I1B0s>9z@NQl6M{}4)E2AYI&)Y`_nQPZv9 zxNrosVw2Si*7;_nA(l`W~-@=&Sfu{bdTS}@H zmvCxmpaukFkHT=7Go3RZQ^y0(4`H3qn0whS5pO{D2&T1odZi73Z^MQ@p1GN`YOH*+ zxRFXDc6{YHat`32JdQ8B#ERAY4t|dX>m}pd&=g}GaMA*k{&ySJ@6U=xb(@@OX97RP z34k}*L2g|*TLcyj0bd=O77zu~=fx}0pye)*=@9mw!Iw}-dgGV0JMusSPUctw$c^e4 z8x1nDVs>z!To}UY6R$7%Pa#H}J^td%TmgJ^s^f6{!8lH<9%E&74Y>#oCIG{_zP-vx zPlPZ$z;d!!)0TG!DoAy1syWBi=XJTM~z^x&pzpur6>k z8k|6PjdbCBo_-})RK$gV!#HQ7C}61Ohq50JHzV-r=ra8TE<~x2ohM{bXEr{1^tmd1W;aKd1L>BAUNzC`NJjshimbV zYYjiHzx;7y;D_7SAMUF^Ztnl^0Ij0=Ry|*qIf`{xSm8n;4Yzz(eIr->(pUY9S8q40 z2E1IoGq4)?bv0;p_3r*^Fla4=Z!J`IElg|ep2b@D)wKxUwY!Gd6;l~LrRgyZYq2la z;s(~@zpf>$t|jiTC4ttH`PNfp*Hg9DF&69CtLtgL>*v^D!e7=nbvKs}U)dTa5hgUa>d^d_CH%iiPs~UX6H*A!>+<+HMJ^H#) zvAS{aexnk!N#NW3@^7PBYqQoOKw4q5&UdpRa&w{WQ)BVw<2gb*Ve`qrW(z1s=`by? zi}WApXDi>&Hrb!;T0fs#{Oq_{l9{Blf7@{D+bVG;v zGhmCzx791VMbg?LTWs}R-Rk$<8i?E)Oy3$R-g@7#_2K2#@W9r{*R9djt&jU#pFrD` z{jK}!m<#Ck35)H|SGT|TZhwv3o=o4KD&C%M*q)*1#0Iu!zixkD-KNd$Z_k5%E%5zX zl>N1&^=sMU*Yd9qxy_Pqe!W?pd$m@1aXtO+%#*uIukZe>{I$LRX7%H*9?)+p-|rpS z-@97B>7lhW2(N?nIXCM&2UmX{?(-fN|2}#de53le+pFKFxxo$JV60cWN6E|W-!dPQ zS-OTZ89rr33WPj9PkmLJ`87FJUuX%MT9uz6ESD)e6GDK?h#jy=RN;cNb_o8Vc~ewc zYA7DE%YS8;Pi`mACrlzL)cIl9`A=cea=XeNVbYDEh@?;{8odrSjHc?+A34>{QM+(O z9arJsSq`rcSud*{!Uc7A#X#tffCCEuVDtY(q3%^!fjvo?xfyka7s4t88Vtn2-Q^j` zl1JDns^w(pJ%4cLMxE&gTqNOp)ljH&w)D&Q;GHj_mXf>I!oq@ML!Gsem!iT9Xd$k+ zOv5N)i=~}hPFVuFj2FXleO|)^9Co$p?+v;ADnhti5?BwM<&$UP5?t={HQb+{-Dxs( zM<&8)GF&Yw(}Mr67E@$z{$CgI$bjQW(Sz_;EPwqDcJ6B9W&l}{^371%-d&@8G9i*f zq25<+H^lV=G|{GtoNH3dk}7wI)33r<=1)F&r0KL!7adLOsxIuyj2?f?{#H#G!CIaL zwo3$ImT~J6w)m_{F_QDs%9_ca2o>h_d6MgIvK>B43(S=eS*-zkqbirCCbU@+R4X*lTYAN3jgVt-08UX z>4fF!XP472ey3lfPA74vQzfUNDq=n!?0r0aW?XzXe zvlW-KAAV=6QDVqVnyIwFood z^TEGPbobWt=B@v`d#bm;HPdJL z$HbyO&HhiG(Vq^Uahk2;_NyQ4-Wy4>t=iyFJJQ8VwteJ%|`z<~`>GVbV zijfVUE_dNmRsLIP!XO0)Y|t!cma=Y#Jxq`me~7Ubs6sPl8htXh?}uNbE`1Wa$UdIK zn>GTZHx%I)2QRv7Jh0-cJ|vIuW13P{i%b;*oE})|ZTJWA3tbbgcdWd+QSa0&TV8lM zV6&oVFU@I5fuW-p2EKGi1|!}(!5hT5dIZTFXCe7mqkJaxuvP?q`O~>`hdlSi&Ww9g zjI7~z(p#%|Z!FY|4M>+aKD>J4Y12>pH077JnhN!uHm@w_u=3mFPwc9PJWSwEZcBNB zJhsc9)Hw4O^I(QpGU?oz8^A;)XjVPX$OFsCDy@98*F?v9VaAHl#z6h!#RIE2)k_|) zO1^qm*}Ybd+pTx15#n&G0Wk%aFI_oDJBKRtWp-{EMxIj_`Qyc`6vBB)pV=k3U--gJ z#$G;kYU;cgCpMYQDDy(*PCoiYr&FhU#FlChUh7;?W{)vvpN3LvYqpX64Rv{@0BK<} z70%B)Fxhi%YGiih0(+$DyOtAXwt33d6{#}@U<$VZGU2e`rgOCO7rUpvU;58xlke~- zogCP*_)<+RpsPJ(B+GI}!W9W%d@2irzrc-N)ttZwN=)Aoj48T4>|s|}P91PMzyE03 z{dIJF@$(3OWq0M`JhpJx#);!gxen$!CoKkL4~RH-a!q_5Z4E>l5nX( zx=Y2&Lg}SOL5BD;WkUb*bfn+kCE9iGFUohag@1cxo_VUKo?^t$AY2!3`Vav%>*f~< z^6w*&h$I0@3hxQ*bQ7n!-O`Wzmi6I_^tp-mi8hji_^sMdlO9RFl3LYo zN@K{&?C*J=%MYj)sA4>L7g#YEyk>h_&fRz^k!ATo-2#Mnc#o9WpQgc!yL3BvV5T@w zVaSBLJwM%G#mR1*SMe9nBsX4KT1w%)wL^PBagVgD`s4SP!`cfgPo(8d6+YM(v_EVx zkWqAe{K2`sy{JYcZwOV8M+-KnEq>V}bK&0OVfWqklD8*x@?T-ZllwV-z(7{5@bSnk zwdbWD<7G8!6-IA6JTLp&Bdg{yo*RmtJAAn8(Q$ZeAPfsZ{qRCi1z0dzvAT# zmK8q5j6bj3?~yb7^Y~N3?(?d%6FFm`A|-|Up@q}~OB;cW4{2&0)zAcaGbzQfOoxsd zzBlp~=7QWx58GC>l1;@0is?}(f)BLi|$@lcfj>^q^ zPh*{1Hl3mumu&9#*f>2BqseASo-61y=+f+H(0t}`>%7x`_2iq~7yl)mo=4NKiWyC| zpN5<(aa&fr(6}@Z8ue7s>1_%}5b9-n@f#&y^(WJ#zI+)1>VXd1&CZV_TidSX@Hwrv zvEK==eeo4&_F+P&z1jGpl_g>7mS~tl{$u#Tx zS4~J3+VEsKhf3jXff?;BFDmktX6-q*F`26^3l#Px@3Ukk7r6Pz=9$424cm+4%=+c8 zSoN^&ae{CLzAQCzBd*R5vHa)Psw16AvyTzUQdoAoXbjIY_@LpY#QJF%zV$@FQq`+3 zF9aeb`cGg`=dhZ?3d}G3-3^532wnFwD-#-a1*y;Nu)87XnORp0y$q3pgoUeb-tFKt zdA}19;!Oo+dD9!5ZF26Q80|`cA4j>{Ql`M|1{sawW38PnHGWx!O-us`@~- zy@lpOZr0Lz**!Z<`+pNHbV$9mG3DotfCnw1IfYLr3Ya>$4p`E9vt+>kYR}orn=8~H z*b|3L#gE|ONp680njO^~%h90WMQWbK>>bXwS2+peE?bBR4oItT)3$YngpnPw5&U%lbxYk4wx1(mCrWSaU;Pg zshS!jxp$!chliZNUTZz>Nl-NgdcXT9aIa9CEY@EJ)3O;%`vX=6z$Q-Ihpg77L( zB3IhF*ax28C-KW=@V3c$gyddPxuKP~Lr1<9x2;OKi3Gt!a|$5Dn<~_5Dq&1gMf9q$ zle90Gs2G!k`~m6+pj~CJ$|3NGBTE2{RK#MoJ9U#0RXsg!Mi^N(6+|B`FXE}{dXvp0avYy@*c_wl7WTYyZWE4+QgJ3kv z0n%<>hI~M#M1XpTG*fEoob8+{F9zY`Bd?KT4V4S!lN0SN*!>5TN-c+*k=aeW9IU)v z&@G-ar3kdBkrMFxG*Vkb#)tyYLSbalNCZ8JRLQ2vYr4|gpgaORJO?b{uzFJT%`p3x zJjFqt0^m3WWaVHI6IbQRkvh`TDtNLE6+r$zSM&oH$6DoHAds;K6Vee}U z0ZwtooFf;dIhoBf?w_PHj$%sB2GfeZHIMqGLi&=*?-$<|1fD~YA8)+yEN!-)&VFNh z(Q2rS1Iw#f5W&@qH5+3AY;QNMF-NMlacg;KXY9%EgE0GgiCzGpJQGc zd*~AXbTf(By6uVmQKVH2X;n(rq z(s1@p@vrlJ7J(64xy>KVbmD=2w^|17w%mI0H4D)~wrLs44eUU1nGnzSsG0RZ`)X%O z60u6}2U6e>9{^3(DZh?0%f7PZu(V8lrObnVj;+xJ=o@r2?@w%#So0TXaH#_ij z_Ty9QU%4!dk}e~_5cjP~SvQ@o;`t-x1=(3eFEptLqw^56R1D+=JzL)0?tgYOgCX&|2w?|7=*6U}>vP#im{_E@#lTZ@%*BMDr+MH1s-UYq^EF_Lh+KQR` zjbD&i+ICt{-d=k4%Wi%f6dW*pmwI;L_t}M=)w{a|7vPb;za;-#wfJw(?muVLAm6O$ z-VBDr6K}LGa1s8Wv}~F|#*`sm)Zx=g^tdXZtg0$G&8^vde^!*Ad;>R0>qjvqBv zS5cWen2Q;%6K+#92g)vJ+d%{Jt~WT_-mAb|^4v5zty%$33YL~kqahKDMkoiJX?xew z?U}n}*9FV6q-DO|jX1?6F_eM|5r1E{vc03)9s&7ggB&S9qr=qmE3N0@WWyn#qm?Af z^9}mK%ZNf&ccc9b_~J?1nLtCM&ie=|6$WEr8y~pERi$ z4wHobwd*3?DA|P$5Na*E< z(<%gJdu6d0L4WlLE5Qr085$RSr(>jL>6M3SB-bSZhZ7OpTA1sP4!-)C1E7p^Yy?s?q>a52UI{dxfE?{KMUu zF_IkBG%9uoaUJuT!G~%uZ-h2&nl@#gA#YUxlt;uGFRrM%wqN-jde!*3gD#(A&=+UF zh#g{@c;sIv@4s#-n$(a8>Iu~OdN=I6Bp6C`H$_7fNd2HBJ@#43KR#Id&(B9s*UQF}sJ1r?+VUdMDRK zf70>jq#)ZQHhV~B1t=b1sv}L(jwgMu$EZ5^%PVcjxgjB6Urs74g0GXoT1ff$R8963 z`k-`M+}nyq)^WvN1 z1x{98^FnU8drCrp{@kL!epG111LP^lxfh-np_N`W?dVD*vz~+suXrs1Yb9u(!qYX# zd)VkYYlqIk@EnF2cVW+uW6xWpdPG|}NB4V1r^`XT1$1z6I%!c|Lg${Z>5b}BFp`Gz zQkCW14Q`ns9%VfkaY&XJ`vQEcmp|SsH_AjMkmS%{Dg}vDE~2^LQU?mTA&;LjUi^%t zpEm>@`EGx!6Vyu0s+^ILM&73oj2`;4AOXrPO$0m!dZBFPl~y2mnO_VjjW(U0E>qDW z>F}YVp+4k-qN9t_l{?S0ziUYq& zR48{{(%}WF<2wXDi49>+^e&JM3vwzTpw{!o5)PdhmQ?=Mt9Sv30 z#3-85z>C?Yiato?I#Wdk&xu2df62Gn9puIMX~#yg3j5}E#U+iI)W;IA0C2}#>OYJQ z#BP#gl-!dMaFZj;TQwV-w1vq4JTkVWVX%rTlTWRZ_Szkcx>4P7W zOk$>(3z$C$)BHrzaQqBzVeZx9o_Yr`&5pgWflP`b8zs+wQ+Tr@h0D}FwI*Wp_e_nt z$VK!u#m$Rft2UTY6qrmDd$%y9AErvfZuYym9t696m$SMEZ^dY2;FKVRDU)fDl@Y1| z6D!RpcQ%t}-$mJ5;jFC4?()VXaV5V!OfdgAcZUb_77Y_=hod*Tf-6ljj`vT8*El8L zCHy|KcU#}7AV>Wvx; zmApGsnZXv9`2y}t{^vPZeDP6a(6`Pn zjuXfYHh))Sz09Y0EiUT!d@qjQs51T^wL3<*qqFj2-2LsvZ#T4Zt|uHH?5s_`tD+?w z4R=cniD8${Q;0w=TU0NzU?8OzERl^Ou_&}qNNlPjC^Coc7KIEm*=wy)#5 z{pYR)j`j0<#_x#6tqLNlI74Y8_Jg7^TVsRbDeMkI5}8}Ag!48nJEWYK0psuGs1F33r8X&E8ew@VO&!sk4xAX(Ud(p1V~;4CF#fxAzUf)# zZpZtNMvNRz6cd(;34>aZ-Hh`;T+7DCEFUTTqF5_D{XBk2b<}C%a{us}XkZJ=7a_U; z)7dGo!$i|L(AE6hXNN06MPKYM_kSw8O?vQf!aZjD%cMsNhnB&wETmFX{ER24pSL7p z=TXQ&=GE)By~|%t^AE=OmSteKzkUnu<#3s`-i~cSBvCGRY7=;OA@Wxmt)1*s5t5Ks zsYgivv7gfJPEv`wcM7UPT4?W^5TC}Ew$N#`fT`yZg1!R(J%U3w7c(PBKU;EWdY3%0 zQd+;-L#;1NuM}3>xVU2ubGDWjQaOQ-2H`^%>KO5TuYEvUp* zFNt~GKfhe|%c{21ulapfYO~n4o9Xg~$IWjgY#s-_be!?q%<-?$U&M;aiOlY!KDzxG zjSIV8Y!|jsS9tH_0az_*XuTGy15zbdRXazDxIg_8L|@An_%j6*4L>_kypnSvyUGt) znhy6wvf!%zohbO0-^SAx*YLp&x-t*_PD)o}6S37l9^Ra5`@wr-F7wC3p!b_ccj8Oh z(u%{=J7vnfqsM+!1bcb}C3Na^WKx{o4DX*^d5F(x0L&%q*-5L(qBfL3%9BLH=C= z1R*k7YfiVUvvDS3`ANps`jx8OL&2-Pff{iE1N3RdrMS-=@$%5s4VEA3VdJ3CC{Eu*^|<9kKu_DyFE zhmL!qWcD~XjjV20oqn-nQ9SODWHQ+KJz~1Q2Yd(o@`vq8*3* zhO}Z%jMnEx0rzMi6QT_(*i;P|p{seCgtA1KQkpv;$aBx~F(K;@n4fp#O463{kn6dE zi%sN_IW(I^I3sr$CrH-q74D{S4Ybk9QtEKQZp&mTe*^)P%~j3OrfcC7L}rWvZ!0Al zr}F*L>4zVd!Yn9DqJUE~6~oZ1OYybwgH2Y3f4H)c^2_4O1Peyh2N}1pKpyXo0U2a( z#$96oZ>H6tc2l*%^(n8E4g#~5-nR^|Ln)C=gqL=MXKrNq63?W5nuW=5_N8noJ`!a> zpQM@-i8U?xcgIW~>6shDOTN`8KOh(8ob9@|6rbadGwQySV}d{mj1Za3CnRXsugU^= z%KzeqyUZP#Rq(y@3fAYD#ba06e%149hBRp-~DxL3DDTh^?t=>hf1gNZ`EnYPuV(f~j;x|bW?o5I=ohZ!ohjBNBl7& zbJQG*Z@!mA?)$x*(CAgs2&xg5V5pJj&=aUJ}3)(=8dYTy62o!gvOMsl*46JH|_e zt0O}?iJ@6$*?)Kw-0?by$;Ph-d*B_>PG%q`FG7WQ+p@-ZG~3r!qxH z3$JPO?Phy8-4m)yNY^E3IyAHGZY&-$v(g?YCiW}~kaR5cw{)S`16D>fF+M5=MGlE5 z;K=JU^P;OW_ahC~A-tkJ5edPlWNqB3fQ>KB$sa#%%}WU3ox|JTmmua|_sWT=A|lc{7_7BEcAOM;sexJN~=$STX%gndZ=E87@6kRC9H3Zlw}`L1zq zRmh*_VdTD0&m!#dS4p8E$QfgguQt*)NvoMJ!6>}v)gyZ7NR0s2t$&k zn35E!v1Cn#DEq!=nUpm#ma=E;k!6r2l*tydZ&@=%BFnsU-_N@}&pFTgp5x3P{+M%y z^ZWj0KG$ci>j$Rzx$)k-;Mfn3giB}9owrZ@kYDN$)B&9}0Leq`g}yDHpJI3LXSSWG zvZLe+w*u8`yrk|_OIfGzH`z+)c%5>oK2>CB za(+eJ$4lDJOWgg2>S~or_-|>!l*iG(Ws|(xt0QGHt7TvRmVIm|8}Vk6RDHVQw{;4~ zgTnK&m^X5wUHpm*r@Or5KMkpfL`v!u%8V^2`&XZN`dgvz{Mlu%vvGEEVfoHE^V)a4 z&K*=s(Ti*aOsgx3Q_iy0C@fcFsVTg&l8W5=GQ?&6s}ahQkI&22oM#mmRUT4Md92iP zL)?hNjOxY9&8e-&DfTTwQ87kYnDe;wnvl&4C6TxG8mEN5eH8*q3+0$PbUYW)H4y$) zMObH-R*hCwGT`|3OYL&B-B|-w=_0X!7fN}LgNA9J0#s_OM=09%^zf zw^nzBSk8`V7loYRB5rath4K6h{dgkAK7--fo9EcYBDLrF7cfX|pkT)?$8Bbvs`<1% zU}n<1FyD6HzqgXN2e0YQ^Dcon`Stkrw*6%m2nwDt-C~|-CclMch1FR8K54EZy_*RlK#^a62lK_N2TNmYv&P6m>rJ5LarAX?teQ=aE`lPrvB?_D{^Q!W;KH1HtW<&0$=d_nMg7AoOgU_?V`=#>+UKZ>c55QtH2J)t7w@` zZ+RE!ZIXa723|~J@eX4hz<{&xXbc9aHwRzBuw=~7^#YhCNeufx3sV@gfNnB5lzB3A zhKdI*g)*CpvFXimm15Yu%Z)NU3|TuwXF_>bZX(vlUaY2~W=MP-whXYy2hT%r*b43A z9j*FBIr5DBbm8L^o)p^wy}W)69yNrc=s^2On)_-}Jda-c4@|rNlMRlCwv5v-Fu-Ut za<5+8$A4^%OJQCZ3gi$;YtYUU7>{GW>$Wsj&zCVTnq!MrF76e%7JN=O^jW)5PI-R0 z82eeVs_wtbp!v-cpnv>Zb{XSVMp+jVmS4NVg|h3+p+hLRa{~IfH%0!mfvn(RKZp#bfboTmoU*Z&wo}-^y3dfWtYK+u`R(s#w{Ly zHm|@}mw(7jRA5web(<0&Mt_+1sH(Dfswh8+@pQlx-|?7V>fZ}HIGPY0GUXzhVWP%( z=nRI%E{t^q3%xzZrH4h{FhkjePLVNOr%8Mn7ok9##NGickiYhV{3)=zoyQ-@sd{#!HLMzHJ9O4o zfXPbC|5E^Yo--2YoLnK|B`ZV+MT&KYwPNz}{yh?USjH=$`)j?%fivl!tN3VbpY zmEs}9m^bguL!XeKt$8r6I_Q2F9BNyB8{1V+O1|-q31@25O!WoWW6KRr@#u+<6}+{y zGgtv0f_kL6L$54ig5Bm)SLf_z^^W zd(D3`ed}oNv2V}D$wrB$iLD_8 z^qMi(l(b)dGyr%}=b1Gg=}SR`ua!k={X0c+=@>cy4sRX zz9B|sH9U7b%p1rM_VdYUjp_!Cd|MgaXf|++DG_vXT^Ad50c$HAf0K*pZ*Lw?JRWaf zk|r@ucD%f(zN-G zvWdCaU=S}DBsk!pweVpE@q6Zy&@Aly*EO5jYsb`iiP=M~*@I~+VrGWj#^`F$JnxNp z;d^tanfXKE3E9?#GxrQ%w#fa=!>s0sXo%Roi@p^Tu5x$8Tz*0EarYUER%tPqV5wxT zt@es~k7$dYkSCLqYk_i7H2=TqA3-xxtmZ3G!K+5mD{8@(@=9x|_twBKR$rg2JzbVN znO7sVu2-C_hb*Y=>WUVNY_yzgRNUKWoY81+-TbV*($%^V@W$+(z517vt$A(L@ddTj zoXr9+6Z)g@t;OK&gB){Y!Ozhdv-kS62c_ExI!*e)Phg02Gm8p)q4ciyWAWKv?%y>} zx2;R-sGb*%hlZ%C(p4u5eoolXWJ3&R7ESdyr`dO=cO0f;ewm_olr9fz@zqQ_we36z znYPjS!>_N*PXAlwuIxEGi#8SI1oJd5CiQtgdU@pV#zXMmzsXLiBuR zrw3aOIXU**bK6C9wySclOujz2@*A5oduZGCH>yoHFyyMTrRf}AhxeJ*K|busSzo4!n0ZZ8riNr3hkzM*U+4#|LS7Ezatj~X=hj-aneT)8hX} zbgbg;2mfQJYWaATLw}amp{d+t-NWxqK`=&5wb6THvgMgta&B4L6e z5649pJ|=Lh1;f=97rGK;ue2tpKeq4BQg=JqTH%L9pW9!RYw@7cjP&Pwedzu%ifRgdW+Exta# z=JGtwRZeUE`_r5FL8nbi`|$7XXpGaNkXFB=KhuBHQF9?oAPC0q7yku(ILqn%+3>)N z5PDwl&~fLWw2!=Hj0nf0aUoHE=id21%x_-1xYk5xyEqw!%=FoE1>aOu^YmB2#DKt9 z`y`E@`*~if2H?fGfuPj|g8o_F!eFE7AM+_DJQHFm2ETh36K~!-$kW%yi6&bIfvm_vx*hRoa_dRzaVQoL)bfiF3;F|M|%&H~56D*xHJt@cMP#>-snI z*|#Ju3X-&;E`=$k#x8Ht?yV2y3G&yKRMj? z#n`Q)e&)1X+54Y;Zk4Sk(1+v>=$m2VN)DBW)qQ9CAJ%-yDcmUSIrUHe=5Vl;d;R32 zSM*Zs0o>ubw!pH)yUR1DcDKydL~7sZE+_5s8Z0^P{=EDr+GP8^DDs%7@|GU}zN1^~sS{9%VB=&QDst#Y#Z z(mkzh9W(o*FWOAocYO@D(LwAZ$OZ`yjV*kFs=<~_BKw!Uw{PmcUS^a>zi?!_e;qhk zDNr4C*Sz}o@*>y0uNPx29a7tN5(*mh?RPYjDceUa^llu=j_6k?5z2MYKQ8n{XLVj*nn`~S$a|Y>nV%RO0{o_z@i+bTFGhH)?0ywI zgXhGv)X55F`*mqa{lj&K2xuUF;UrA=*~M!f{1=695&oiv z6mvg@M2fzgijg|km~3pv@gi%=;nYFcrx3%>DO?zJ4R^>p+Zjf8!^Qc=L=Y_z$(Gjs1>ZHLrIER@6%xjlAt1XYVZ) z=?t?CnwIV`R!~=@`b*5N<`2JyS4eACtX(ypln|Y#cB?goeNAxnE)d$1xk8`6p6qH* zFO=w7)oBeIdKNuWfUzktxgUQ$<%xaaI3-&3VQFG!8rNHXcUiNL_2FEoMUmtvBVHIk z^7@_f8(HB}bH=aoPNf!@Cze{gi61F*tt+q?b+&AP-YRueDZhBl^@dygt!$pu@`s2u z{hqu;f`ZRG?}{>;?Rd+Vk9Gy=keK_&S>Gs7)yj}Fn|Rc-aY~MIRf5gtU7htI3J(uC zp`!f3xmT7+Ll!j|Tbp?GjR~r%Pi3-Hg|nHpRbu{LjipV6+s0|)Ro9&tz=|_+QT&4w zrsi4opDPsS8~bLUYNR^lqHoRt){6p`4ec$bJb~-h(_i))KQ?bEvB%?Vki0qX>2*K7 z8(}uvs!B~mQN=!0Ak%C4yp8ihmA=D=_x8rpvWGU`J#M$2d6Lu6+Gukw_>bW1){Uq2 z8;I?oPh~cL?7n4xJVWqVbh{6{a-oB%v4=wJ{c!nHWb%?+EJg=zSFn7pGy3#c9oG;M zE&91r^4|St;EpSwOKuY->II)UCD`+yRQa7=@{IMFT4efpyZ6Gas^o|STS@7IPV7C2 z=dZJ?#pV1yT}!LRB*Pz|?HN8(p19PIspT^$e*gPvUa6Tv9A|aZ<2V~*UbQ>Di@y6Y zTsjysc=hg&i=AeJJ}YUtbhxvl1>cv)riOW)Jxl=K8_7D#*=UlrME>2JpK~-|H9OKRaL+;&+?SK4)*32SmO-$@qr0GlFIL z=O=!tyXxw`5x~f+$GZI~?Fw?rg0PN%Q*HR9k)rZ)`h%Bbe?}7LTbGJsgv0R(-`3J) zf?q|_1K9w!P8cIRB5&P$6Sm)vPfMv>Ht_~mW*BOSqy+4j4|9BqQ3qY{2#dVr!TD!m zh{fyuoB1K&{pvi5H;u}yL4-u&%XfBfl>Dm^dQ zL{HTiYIOf<$hL=X9964#*9Noa(A|Y@bsB#80s2D-Yq?+YOhXv<{&%qj;_((S3%)4w z?#WA=EstEt;PQhc&+(S~*S4F+6*+duF%s?p(#^jek-p`xj#t|RkGi_Uet+P!`8{uZ z@w@u$xdBb&_ObDm$-@UpCDsnVuFLuVNG;+XdpaYOM*lW>?ul<*naIyy5o(#dXVBw+ zMZ~r=d*c(&)kdsl?^AiscPndoQe6c0e9VPMi$#MzG5m%cv%ynM_dT~SCAcoo)eZzj zPPU6?ZHLc=>`(_!{=5n~ihQhd*)+ZShneUvWfAhBUGu@Q!`QO>b3v9WQ*vCn#A6IWxCA#u-T;$9fWr8>u@ zkH;i1OnP&uKUB370IMr8Cc`lPjdOfaY<%QC?|lrP-fDa$fq5!x-QNgX z1w?J{Ge)v5ljdG-5>DxOR--Fy+BiWB;K6F&QL9}?iVNydMFGn^=_Epw`$EO<`MC)>X<2WC zFHwGt{SV}29|x!ALGo2~H?dDIua_hRriH;}UoP%NKuU;4>hy;upPZ%aCAr2_XFnH5wxlhF9F;$f;F8|EkXE0c7T1|}CNq7IBOQA^{b1EqM?Eb7 z6y_6`w3OjRT*=U?N`U zAh}2V)fd_HuWQMCevg{ElT;hCIvI3*FUhMU`~E?8qx$Lk%v1x}9N+=!4vnbT=uEH1 z!&F~!{>gzk5_Vj2cVsh&cG*8Z<;v-rKUn>s~}PYw^X5eTBog3{DpmR(M5eV z?X0)^Pv54zD3azn=WV5Dx8!7vD~NuMifl(kJ}Vm&zS2r4)i3#079 zeQ=OC0c0QrvPNU`Vt@+*IhP7*Qz$JWfxB?r=~PG{kvL8T2NKwb3dlhcI3g5LMFEGW z2Xa8ND%PuSu)qCsx=gq)y^9Qv1F+@Ip}O#7bwTAL8Z3?qArjP&&`5tiXa^OUP6Fo< zA-M`DA{k7iv2{S$e9*8J934`Htq!6G;5F0Fi%W%A`ZfRJF%VuBoUzZ8Tv;mAdw7r zV7Mmn0EYE)4b99wS9yX5afc!b1X!eK@HGNx9uEqnvPc2gjA$q$3NZXDs}T)ePi1x6 zLC%ty(F{qa0tA2uolw941xN>$NF)J_$fzAMGeV)#62Ll00V@(1X9tTI1};xwIU+L) zg(4DYtaj_C5&P9^ueg}_Np5%EB0EvjXojrweSiXzo6J&+`;TofkHQp(M;HOhW{Gqb z6B;}n4cZ}q0BC4BuK7L{P=tnRD?swC0l9N1F96#Cg-IO`6C;5ltKeu1c(@OOpn@if zRrsu!IEh4803d)NuLJ-GC}0On69U&UKmn>LpazL7PDG@o0`rX?CS4j#i~wrG0W}#m zNLrd^R634HO94r` z2t41cd5A~4hjwh@L1Hp+E|B?z1Oiei zThzYJdMPIyKoeU<1OOdyt<+vH>KKMYGtCOY(g}knXkMg%wE@_;(V#8@D>nrdM+Izapmr{HN`-=yLfImp zv!rjLb|o^Gi~B5EILhVeq-{+#c`8dDnrXX_Nt?#1iA5ZdK1FTGG8l@3onT>Hf-LfQkP;qtgh%9(KGMpqaG+@lr&H6sD6Q&;?K-6TR**{j|xr7mZ`| zH*J28T6tYtu}svcfn$K*a?|g zjodJF2m;~Yldp+^RKR@`*o*I9PAFeiu#FO5V4=b+foLZ3HCO}@!Z5K0e;ywT^(p@h z3q%7P&`@q-v;ze=wWZ!cflE=C2GA^8*hL{6q5uK3o9?ckV9NYVD3 zOcpdGLSf040-QKxl@CQ&G=p}nz(-^-fCAg3g6P=BE+R^o(65hxK9QePN3$@juNI*{ zSIGTnGOC``oqssM=g+pyxH_mX1PQE+1kTdnUPM%$0@4=OqfTU2u>oGwf?S_L+6p5d z-9;T?z$!xDKN@s7qM;TP@DUCyj{_&*SlM8d2t4u*nxz8=CeTp*XqIafIOid%jRdlJ z495{!il~;?h%Dhi=nWji(vACs26IrLBZ*X4kpi7$z zC_|R)K?3j55cjcd9;C_DVCDc)UX_s>d)y=QwZ9TZ!$s z8rvTl;wqVCo&-_{usKlRN1-6a&>BS?IH$7V*aWmqg!BX0)Nv5!Dds#H$bpD*B(PNx zA=6|QhS%6WfE9ALeUQj%L4iAHQcuAiCnamO#5H>JSlq39yyCs#uki@jB_;aqlyH?O7D(!}r&vt0TKE34J+4_tv()TsxPBPHgAW-km< zU9YcNl;5d)v^+VwVM(^_N|Lf3+Z^{h%CMdP>oIe&eCNoA-Jr^?^~tt&$2GNc=h_IH zzkeO>ZO%78JsD6m->+Qkc@pfB6|wJeztv^(?n+S6uUC!UknhX=8MGyf1ST!$sGC65 zr&Q8$pYY$Sb;fN6A0OP!{JH5d*WTYcyuKsS_Hys{#P_Fn4!Xnpcdq?VpFXgDHoW6L z_4DYp))IHk{dY3-mV*bu{ja`9yxN}q?RVJWHjB*Be7twLMAfFWcAZ{Y%uJwcrb*DS zCz0j^U67zRt-W?k+&R19UCOhwAAVMw%4|&;quzy`h?#zD-(z2|=9t|;iZz_DUGG|3 zxb#b_f6DEP7V?w%^Uj|Sn;%~Ji~C3H{F^Tq+YNqk^L&~7?Zr~*P2WkBu1r@=Z{J&T zVW|$|;e7G&+as^5=lhjklt>NVe0)u{GhX3Y&|G+bN8@_daG7RJpORU_9+#`Bb{llp zj0_reHM<0KfBaQt(0fGY>{i_F*OF7*FK%2_8r_vK(EPJIJUf%HL)B1X`E&E8xs5qr zrRp2yp|brN=nXnuGD`W@o3p}?WzPDfrd+)rGCF7>YoW4t+d#s>tqiuMzjw#EU@Ly~ zopW94?Gi#A)bd`X6jYXwzEC%5S2S{Kpm^vSVd#!}V%_%wuRrx;epO6;Qvo$CmR7-s z2#bmbMqN}~2u#)YT6l@Sn{BkM7-%Tv1Y3?03ks^5fo%5gNWXd;6I@FIuE}sAA zQe2Sc?^+r(RwKvn5&2yE-G{w@Zsbm6fLm3+>fyuM;adUj_1~Wyy1!pc3wYGDaqIA6 z^RL}2E@7{iPrK2%ws-;w9Wb@2jWW8bv{1L;(<9GbiS$6PKDmY?uK}fRfsemv{yln3 zy~G>jJ!GPGyxZ6F^_7QKW;bIU-#$I)$)sDzMbCE~dEEkT#lMc9&PDJBGhUe5iSN=2 z%V58iS5Hs;RtwUD{nyJHPW(4({=R%`+#-pv$ ze{&!o57ye(En!=Rnp$xULPwQV^2nib4z@6xed*A;2m0RPvoQAylruz})#+X6w@3Sz zFd+8WK4X+nlJlyX*s1GrCJuI-ulMy?W&8DmzGJv5GT#25!8p)=f^h%ubgO)JPHmu6;dd8>7!Id#bX-i^LMe1X2NQSerTu-}u=Z4g$ zbQU8oA-)v+=dAM<@eY_9;n69)Cw}i0Mmh~pe78??XLy&Gha0^R?+R-#{u*-b-a{^3 zT$fIzSvzvqcyGg!<21EY%0v%;r^dLw?>Od(1RKKrvK60UJ5y8`Qsx5s0H8bHAz>MQ z^pxb-oWnZ*P3+hIPe*Po?97^x61IIpQDD5ZAAlJHj9$&iHWXkQDBoF6$pN zoTTALU4Ch(jSfq_ea~;1`RWN37aE6>^cR&%wtFiWzjx(InNpjsuKy^NR4UFi#?T9oOg*~q$@acAzrue z(vi8#&5YBfC56deeX>YW^glgBq2uNCl7ghtjuMq4Y-yPeg)XpBe)@={7y5ptR4$}> z?{r6S8>p-Ub{Zo0u+rsCDh4v3>IQ`H=x?O6%I>`^cp>@cDlP;{=~Fw&yXIrW86* z>GED(qW6VA`ZE6C)UxSoB>Y z8Ni~5)}hnvo7Ps}y!*Fa-thC^2D#_#hZ{xz3C1;~f8kh@`t?q8qj2$T^OoG!B1(th zb4mW)1B(p&O}%nXYllfzG;ph6BS~w!c>7ZGc8fmJ*|d#kVRt-b8g{#mgdv}ZzM;_an?G-zSy1k%>Up0lhh803jU zkJgN0vfrjhh%h`4a>cNNBa0R(bM=1?#>I97j4+CFg?SM7;!cq)VvKfn43<8ltB>p^ zi)hrwXsuLz#N?o3{;yyhBX+BK6vJHt>6Fv>Z!iun3u#i_Ulgt}DG>P9``=)k+=Mui z?R?kxoKP7YLUh_wt*4u$Imr0uE;?YS&tp2D{G{2w{1VrKwflY&`6MD% z{rHM$Vr;jR7wz3PWA*5>m43D3&C=Lw<#xRN<3+g9x3{>Bw3GfOEiEtlrT$_3BYrgp z2zmHZ%a{RB0^3U16Ti`&o(t6di&Sy5pico6P6gj42kECgO3Ge2*+1?7KJ#xZH@U@S z`v@O>jzt%Blo2EPmJlVssmrELGLRu*SmiG=b696E@lBFhq_FvXCe9R=YBX5kW**EP zug4*99U{e&hfECu@n_M_IugU+x1Bq=!vQgCATiiD4XiqXVU@ibRuO^eO@%?kDSe+w4D94m76NuqhV4^VTu;7`l#kLEI$LBsjv^#~vYC~1raC@Ig2YC%}Rb`webM~l$GIf{-mdn7|=7~fE;;>g+!r; zV#SYiL2e_NMD^EKv};>XUlxW3SH3T44&*saLH|vynyT5cy&gcE%11jI)(A|}><#X& zaE;Ajf#F2F0!HaAjoHcX`#4?teEM^{C&@IY~4YR$S(qVpvnh5$8G zCIRE-Siu5}Pf=>2s4aSI81NAw;ep&de;!|tGzJ|ib+G_>$hUmaj^WIp*@@P_k5ss@ z)*A?TEiixfzJ|tGc<=@DXe2pyX zy$~}tIc3qod(xYo)aYkI=koR zQ24@pBx25&E^cQ7vAsD*i`%~-I-?i?kOcBcDNr~DV!E{g13~kKXX_6bU+~Em7n(&w zYY9*vAB}l@U^7+sh;V0s0IkP{#!CipTnOXxHLX=cPo^OiX()WUqk{rcLlrpB%S@rL z07w8eB8xE|(XYyUgb(MY!Q*hQt_1k&6~Y|=fRhOK2LJ#>NFEgc#Q{yw%(;v{%RZX} z58x>U<}$`A4*@vS;M{0{4+XBy!SZ*`f=+q}B!HZj{NE@c<7jM*c}*T3QA9*ChNFu# z)EIz`F%T8uLaxwI$5#;Ed|}+3r5M2+G}>gG z$RdOTs^Q@21ZE{POE8IXr(+JlB6M*;Ee7&IGixe9u2Gm2NnnOaN}kHP2mmMd0)40m zMIL4X9#rlO@<%hvlUP2Xp_*tGMgzwIk9>xh` zjUqb$@Klv^^CZL|4KYhXj1f?aj2Q|VIR*$F!y=$12u9~+F%*${8PQBgUc*11r6R_u z2yh8vl7?WPxYbPd@7X~-8b|!)gUS<`OZVa5>8GM?x^$P7Q1f%Ta~CY}U3U(s$iq(5 zHk$F6L>qr;dhn7-ESae)>1|CCV{#{^z&wVH=0>w1GVfT`h3*tsSXpS`-(c^l+%a6! zuB$;EqSIDt%zJ90-aOW3jC_GUtO=x$l_y5C^--D+4DqZPmw$K%LQ-QhGlFGOXUBAd z>lp1KkQWZ(NrYrSxE*bAD~k2@-dtMnWxc@5`U#SHQK^RbH~Qi?U&av_lLsWv+ZVSQ zuBH`c)ZTej-IFo8>%ND!{;-BpmwiQYxB(l5`)HQsOda-iN>8Hc1F9+Env9F|_ zn-_o573|9Hi4#e3cvKx>d6n(;9Dj}}UH0|o-Ph>4*G;lH>y0^EhB*qUwwsJ#oUG5! zgBvvU-2KelkXyNDeRBUD9$EDHWt6e>_0u2CFmRUGYK9Gg`f|DRyoWO35JVxmAviblyx ztCBSTl8p5tZw(v>2gvzXLJ}y=*C;KtDt+r;TAWo{+EiLTS^Dl@DOsSbTBEGis;u6> z?0r^QQ&U;eDLF3($)w>n{cdJ?N)|=jKPQDu~l~~U|D;r<9YgM`DU%8)E`LC(+ zXtMI;UnM}0Yyhp)veRX8&4;`qLqCw=-^s{BGFq^TL$iv@x=O;B3}QDm;LaBMUL|r^ zg%PY4*Q}Pbu09n|E%U1S^oMHs@6~4ys}%%m&dXJ^$W>O;YhNn8s?qpRbMbqP_F)ZH zuvSmAR^Pf-{aF={Ixuqd+>_Nha?sWWS@bLFaYS*lx* ztq1-yQ*k4^TX3XDS(-PRKmCK69<$I~uD5w$t0$@d=}+zCDYW5befL947wnOO@aAjqCc};_z2}A8Ue+>~HWesxM={Wgy*nSF=$t%qeiM@zFtAO-+NDU=wqm z6EpDED_G<0fTjwVW`bO!iOKr}&4vtktcMj`D&zb>6V$upf_zwP8KKhU zpxJ5s+`><_ect-kWSaRF(Ldz!tyih;PwPVK0t^)sMEs&Ogd#8Y$?0F3KtA&AX3BHg zrYiY7XftVlP2JEK>gOB%P7rS#QebZ%L*?m|TPH-Q5t(_)62c%|17wy-JWP|w zV#0t?SOkv9e3b(4j$mW3sW+S;BO*)G94cLb*;s+qP+C85lk12K_rQVzh%G@19=U*a zcK}--C)9}qicom;l#m=ngno1EGJWn}PXKkyp=z-pMw8G74Q3R~4sqbJDTKR%`z#sk zNCI`uF-FHA*E#SS9vO&5O#XM(VEKs6odl{S-o5aFk*5c{QyKXwBoUh!Oad?70tb=& zcA~xNi4c!ZC`Js65y=|nfkshK8KEF|3V4?EDrRD!4F`6o+$sw7?V3VF&_F&k_%;Jm z1VZ;HunZb#ZqK`Zm9 zgK=o&78+Vl9d@UI0x9q|{!ZZ*4!IU^KSj5V2675zTcf}NLcdT}LIKc zT@>&g#KXK$wrRBYH1Y9w+3dhQt0N`8&WE2AIg@<(!pdB>E z5F2ri8|DvSAkwJbB`5vqo?v+8NLkgGCOS10BKiJ)?^vR2`dcq04+0L~x}RG8n%BeL{zgJUit9VoDVd<>q*x=4VU zV8ACth%;%}3IEldhHzvs&d>0@Kd=!Ra*)hggoP2wNh@ny2Sj8KcHqZ%aM2j(1`bY9 zV0ERT5@?`FEP_rN-*sL%0)TN;7y~s&W(c=v3*AzH1ko68dqDM+&xce9jslS|MHFE{wfNCxo+TSiR4$d3Kzk8|8z>@!hZ$HG z5Ay)9&Ep_xpWp$6@o70D#vbDV3E@v=B@&SXbQ&lE4NG-LHq$^+6!<&^l0iZ+NKZcn zoKA)Z5ukM1*NhxwJpdd<0cTJxB3M@6w4hvr*a9iw4onOKl-FWm0hpND6IcYGahL}V%(tT{Z;yn6;TY}YKsTehk_g!tn19rK?S5c z7WA%_l|gykv5CLwQHVUuj1wNVLI4fW;I;s85Dl?M1v}y(W8`encU+Ge!MTKsr*csK zG}Z_Jn+*oMM__w@cQy|LUJXc(!=nN)qdtW6_knD`cDcT%K^)POT~3TEjqQ*EkG&Fl zK!scq#dByOeXxo3RL~-AsZ9txh(#RB&x>fkQhqoTh@04<+*=_)0~HWN9Apm-OU{KP z;!((B)GxVLH~ZHE@C)PU9|MGo9vMIK&iUAWD(7)|)fPSL! zMWi=-=@+Aad-#QE3&5su%6+;AR=JN1Br|)8Fip<=tf#Wr&=}BpFM#IajspUo7cy0Z zXr;WASwel`3W;#cSX3L#X$j#zbMK?Cr-;r&e7w|QLriX#sx{`IbL{f9G>sDh_lXFX zT-Eb=@yD<~W{mZ5Eu}9zF|tV_N`VVhftZz>Ro=6cT<3=!lSM*2I1ZS3PEAQGIFF2P zM6d8GDb>c;DW%J2W~*{e-`M4EuxowlukdT9$BBATE5dN5yZMH50cyT2++1J`39#CPCa|XgFUvS3a7)SGc^`F!Zi;9)|>5>WnSmJNT<&Pn!JR( z=yRISnK;kvGHW{Ep+fJM-b~0;sJ8#1X%Qn(*j==L(PTs>SIaPJfEzq${_}&0!$8LT zX#elldjlsfa*-v|7Yv9q++{m&iS|_9&&D6ZAsE^A1is$=D{L|;C3b8fBw~kA@H%-Yi=())kVPkabwO0; zHXtG@?GdIR14G%D2KT1Wt|apf;DN}H*#2K4!5}dS_Vd2;V8lH=MG1PYSug(7%d-Qv z`bi=C^F@N^%MYZJOpg4nGz*4>7bcmL$Wlq>Lt>rDCTRyCErtD1{Xz34T0ybYGM^L9 z^F%#5^BhMbi{Qfn!$PEbtkRe6z?J8V9LC$@8;RyK&WkTpSHeCfn3!ftb18t>mUDEW z^WY@2rba!pVuHXGU7AC-Q!Zg-)js(`Ya}TN@cbn{AHuRY2(-YAkcMCeF5Eo6o&p?`H|RpO-+G1n;m+v;x`oS-`~zjdTTY2H&qZZy{zn-w^<$gf(Prcl_X78NXfa z_)*0`Ih_9h-z}xO|N1u90@v1f4C^_@mqIr^9wv}3YyM`)SO+=VHcDml7t&VVKDi~uPEgFq))&CYvI=n)RzA5<(^U3VluO9s);N|8iuXOB$ z`MK?|{-7!5jFVoW^Rr+3jS$1>PrrXkBECd*ZOV$C(BJ3ioMP2}_%lKj+SH?yU?j`E z5PRd>N0?3^|8tKU@iz=RV9K&}>`(gO>Fdo-Umoq6>QueBvCwRN@p&9?*Dj~b$&{gr zc?Q2g*W(Mnj$+O}Z4{2-i4|oleS7x#B~$#p-IqO|dbFc!J{z4`ab&uNRzLIaI{y}P z)>-Z~yH@_|9*>+v`zIl)=IdXHP0LxG>JQWvQ<5`pMT#C`N=&4UN4BUhil0raXz}*l zu)H-|YT0$#0599$Yq4}D>*b>UiXzHB#i!g}WkpkbvV<$jqTKmfioUX+QlsgT@Kf&7 zNge8A4M{4Z_09Y?i4l_3D|H6laCxgi3~8!qMI2 zGiA~usnMqb-zIRg!P%gueY)H=z07*ab*Q2Cv+I+(57V9Q++MW_GLO47?*$nvWhb+u zQoI~ZDDl@TR}*Cd2A|!tj{bYbJh3uxv>*3z)G~W#dfR&3K@@S3ZA}l`nIRAHYr*wb^f>4w~x{Wo_CuyO+MK;baE$=W6sIv zz_09f9JA8GIfX1a6gLh+H`XW2&?wfYqjSby<7Bz`4d?vZRO?q6e#VvAF%!9wHa3*r?fq7z#l_S*i##9bZMG`p zdLw;uq{zUh)FSbRXx9xxPs)Sx2U>1c-zLWzy8l$rv(~RyPJU|xJt0SFZEAX`7-}h8 zmK1-!`9SW~#Nd-BwXd|?oz1N$N4xjx>V)I4AD@Ycvp#*_rS-@w{rl7pgQrcSEsvfw ze4pNqe%idO<>CMB`^?|&r>%clJc9pzpQVE?G$u}m(q#Zl=!y#$F!JndCX#{kh%5V@ z!e3}{m+sDUC12=1_sBEODSMGC#z0O(H|Y_fKv4RMU!O&*S6ai=^0^qlfd|@;v%XEO zsP*`L@o9aW^LOfp4%nX>rR|;1JH2}4%D+C#a!@cuLfAB6yo>!Y0ge|h_sfT0O9`$#`%vm z%>1d0X<3&*{2yH1cRX9++dpuz_oyHU5qrDJX0H3gA0@5?8KQb=$+ILPOj$SDr5T zt6w$#A24n+`Psq!j4SD5^&7?xKxMmLF5kXL5^z9O*g$O~=8NdDdJcndiA##q1S?e~ zKB~Lw<9tWLmIhsSN5Mr$JO~yq2xFv%(cg!$DZ1T5wZ7kkr2;YFaaf{79=8gZxAn784s4aJGd`@91(58c(QyDzYq`>>zM?(Ij`on` zZ63oM29iMulcgf0^ChEM>UbEsJ8=amJnunWO?qVYM;dSZq8Uo4pq_9a1=u|lTxlq# zB^<7LO`*{pj95zFXT1Zcp(=UNou2rP~tR1HUhZ2*M!p zwE0xT&Fi{bYP77idK|oZEfaK{6MDFbKRM^=EC#^sD(^aoirJLFh!XM+vb%cIzDj{H zxv825bDhN0y_ADpk$9-ZPwOE#n&kveSEBidSIelfuK*PNTq{Y7wNrJo zJx(7eE4lYLXh8E?f9qZMrf09KnV7+3jJvDsm$mc*cb1zwnhXgT9;kX;UOeM{117D) zdX=;$g8G6cgH|w4aKA=<9j2|a^jIma)eED)%h;kd^ojd^g2j+!(IDBB!F#9s8%~%X z*AlwN1EPUdmb?ScP(xj@2DXgDoU8`=Ja_h$Yi}&2d!7vUKs%n*-Va_iP<}Hg1D6`S z&$n22e=(?T-mKnN|1(bAuC$a`POEkp@u#gyO83o_MDO9ST;Q;b{m^rnk@32bKPRz6 zf|A(oksb_&)udCGv9HFf_P}n0Q@MUCePqvm^vvGqZ#Vg#*XX5L>4vD$w2HKu>F7?$ z=zxxjscIs$;jnSTt z(c$5Frf~+o@jJ5PjN0Qs^KmAJac1vvgMR}wiQ_D#<81Zg?7`!QTEkK;W!A^z5RwTl zrU@wD1h?!2kM;zw`2?TC1i$x$K;(p=?1allexdpak)8?Bo(ZNv6t~GpkRI8y7!u2> zNNL$g{7mm%^GTen!=#+|q7-Kqq;k)s%Jih_uSvDjNp<}2KhqS9Z%R{k z3eGY0^Up)ci5d%waJhpx8Do@w>D0aYDTAJ=`_oeoeoYykP8pF*8#7It@J&CIoi^2; zHZz|#cbIq z92{m|c+WUS&NyYvIG4`2)X%)^nQ@(-dG%|?ZE5DG@^F>OotOFyJDuZiv}e7{XT2R} zeY|IVAI!2w&ia?m25^{Ie~$4`9d1%-?K@sA!(Kz0Fj~kx7a?mw z_|hWm7buD_7Z>Bu5js5*7d#iII?{PKC)8!ZrDYL2JeQ_ga`(+#idbH1hNMvOTnI;P z`1iJ$`nhD;x_93#h^^+5=jTYqO*~YoWmnTN_7Y&J5yDTy0Fv4!LGY9ArM{TMDA)%bv=Z9M30I&6f|S7Jr_vd%95RZB;9_aN%lItZK#1 zU{#&CkZ(TnEpnl?zNY%GRm(4{Z~2z(r@}!GQVTieach>30t~4V<9}Ax_C_ua)GrP? zjK25&>cM2Gx%aBhWYZZzed`p6T>udYY!xUmoD$rFaI&GUv-#T z=po+zH7eL;wac_}$hY!`tVl@MjGpyo{yKGSFS%ZTu-lj zA*sWhKL1y`La_H-ooKZ^aiv+zrku(8g2RTGd6j&5g(zy3gw(n-c$Ko(hGN;K``f~F z&r^W8r4|ojNEiXL8r=@I6pNo{y0v7HTL3;AE!M`~3Bj^Io1;pSiHO94Zs!5AqHLtL zctUP{7YkOi<ujf11O8>UwNkS+j+188UskjYIpEb2d zYb0e@Skg}wwGH(V8^M`%)q;&wZ+i*2{r!;*5w{J4-y6D|cJgN%jHDY6ZZ{4H5vQea zQY0p{uw#p`1H1G2^+cru`a^EBkj@o<{eVLglekW^(BoxMN-O3IqApr95y6L_eCdUB zxNFCbL_+jZLo3MgYCfCiQ9afXF0mCc%G{7EV7Mi5>|$_)zp&9RTQ!|Q5YldXt0j55 zId(;Ea=h3KDBJWavkz2r4EEXdHQe++bM!ad47pt;qItY!?(nU!t~{3fwdHTAMTZw9 zK%9$Sw5ooz&lCPMV2RHhpNnytK}ov9jHqIfL-@Ncacg*F9@(2YvU@x~o+@qog33bu zq8!-D+(Bdq9=|*kNcnznWu@_CCVfbtB~!c?9oQrk;?8X;`uv=Fr7UX4*uY_%Mk|D# zRFIxi8joARVTc_|MNtD|~lxShN{Xw+BT)5@| z%IM;)k{+?D@u$Qwl-fbG=~%kB0!e5L>ev`HgNVZW1x8!pZebC;dJ+0UQ4)Spxc!8k z|A28LmsHT6yIA?@g+Il^RR$N?@+DAO$f-x#sfDj9QA zc&iPmWf;N7iY*Z?R1ec0YxyDTdly#q?l>EyFgXe0AX+R2nMh8eb`?%)jC!UJW$YC8 zsgN!CHiD8o^3?^Y>M8+MT-bCODVZ-dZ47d!x+}PYhBhqReJh;O;xCSiJlv=v(#Nle zk34(?6GcB4{(Lp;M`1Yo0hvrin0;ZimtU0E7JxP^BFyZLnhnxNkC=Au<+GSD<%2D* z3ODNmGWI6I_vn|jAmUKT=#TwKuc}{cWT(agD~F5A)_lASm?wLv-!kiCKk0L& z;ep;co-U0B>k$eOL`{APivUGezd$;t{Jt@}h;+P&^1XJ+ zKBm|rB`QeoZ-?J$s%Tk_ba09WhlSY|Mv|ta`(F_6QAASo$EH+-y;6uIb&3exA|X#f z`Px7f3cmxf(W%vuq>@DU!@{Nw!+HIpOfMo4w&9#Hf^YQBjP(NkEdyrU2qw0pEQ~LS zH^ZEp$|U=dtxjPU{ks$w#4ZmBMGz(Ie(9!TQGxB0Za;~bw@C9-F8&V~r>nMB@Z0oj z=hwC9SL8@u&?i0$WH2ToN{<|21F$@Z7MVlZDMU&NUf7n$`Io;AO$q1Q!sqjaYt^`i zI)zKFrcXGd+*4kvIT8HpN3#2o%48?FkrU#WD@eak00b>a$veV*josgj1q+Qu!N!QJ zQo5e=at9FO_0KjxU~?ZL7qZU2FOJrA3xYH-zlL%Z14$pW_;|h@HcfTO|8BafLe8wW8qP%FXX8jA z9>ea~FQj0jO~$Xcs!rtQ#}!TFV^QeDn^|TY&7($+c47^QLHP2LD)1!A&inBsDeg4! zB&%Ls@T9;f6?s#&+5CCa^o76izI~wNY!{sVB-VcGktz(OvS@V=TcBvo58)Qk+F_-CqIKi3pC>+vQG+MElLvKZyI zlR~6bvWrIfTC$tLK;^J2iu8cA=utz!x&k&rhPEFXuOj_}FE_}upR*XBLsk3JGQ zDidjZ8h9f+hlp2|`{|GyEI02Q8oV?4<8*fCW6(%fsVwQ`WNwtZev|x4@V^`RRV0;~ z0ydI8L}4vfq)lNxQTbM3Bh^4n@mGdbh~n>@=X+kg*Vge*EM1m8#9h*=C%6-kbL1Ptw7C+j-v+pnH9u269#+PwoRoMPI_?z` zy|ZF%*S(V{zwD(+#_`0Rn_Bf&uq5cEI}@vX%8o8h?fP&~;@{t?T9@yMIFD~j^l>QAN9t)5BNvZ##3OXc)FpYmb36vEt=H8F#Erss{;l3ll(*9~ zzYgJ7fl`{1S8P|mwwC!APexUd9ni|dC>KM>#WvURNTUn5bo>k-ct!=UTjvCU5zlR7 zSomI4p@f6DfyIJ7eABPZUlT0_?LAEPCx(*?T_9=E<8hC8``E{gHMzzLqqsSx;#u*n zSN{RyCSuOM-3nkj&kn-cXHoh<-ugs2Td6?&;~#S1v+=^W2fVWB~sQLJ-j!v-}Kqqnwd zn~6BZz2TQ({@u^pqOz}fUPvwoW(Bqqv1k@{2$DJL>BeZX_>JN1U5tT6=0RqlG(%Dc zuYpvosV3b(V%&tjkVk-wo_WN({7l`fAT9|=1%}O|WP&50C<^lXI9j#A^G?VHPvK2B z8+8jNlAJsoSvrRns;5tU$<;}zL{6%@bvV%Ken<81)LYg4-rP0U&+saxB=u6pz7)4o z1q*f|SdR?r8hv`1r0kuk0WH(;&X0vw{?3#(vYRs&~)WJ+YT$7VO_qY<-f^ign{jUJ-Vj z>o&bIz(DGXY!qv!AE{#wBGJDD#X2}PmO>iC|K@%%XjD?Sk4u{NO;AGq<>a{i`uRvv zbBavc37LfEy1Cl59ew#lA9EET*5Ck6>z&edHwhgrV{Ho#^6Qma?TAvk<^du=eFk8m ztbnRc5)*P>Yj(@WT3f3WAn#J?Z_bOWq(bGIOXH#MyI16g*MWgfaPDiVL>XW>q*E_K z?!tsx$Eynyvu_I;#XJk@WX5%p_ef}Bq7`h`Sl_R9v2z`+#scBo zL4}cGl-1EjG3$DqhIeGb?!?)S*>cZa^avR;#LxcT>bvXdnMoK_yn2*X;XSeRcEvWu z5})n(n?8#3dOX?~Y)2IzFzGSYVIIcFInUAI-HOx zDAZ`mw580c_@vF?K@(61&jn{dZIsvslN+{qS3txPZLoN+u{9bGcUNc`6brL}ce*=u zOVrg&*c~9~pV4TGh9F~2tvi`#=%d8&8N#ox*H|J2yCteTC=?^sSX(QIcsSXA!iLvb zv-G;9DjDKb{UTWk^=c$7w6-^>&j&6(;Y?hv5mYj~YcuW#WDvtcDi>cYu+tB&mgdna zpS;fDDW}E1#Xx2grrGy=HB$4e_I+SN7o89R3{-3rclibTWw!ri@i7&gp^PpKa=j8l zGB^I}aR5G?rb}Y}Fv0x*Mq^LjBTb4;wLO7?Z^uX_ysi@u?n{B&dhhaUV&b33Z&>%~ zMTm8yY3OCvSXO(w6F*_%)p)tVZ#{h=FH~dXrT{bL3IgXVK<2 z9_M-gd_rrNoI8@x0||2K4BGB^Dn+EKkte4QPA5tEjT}%@flEc86pc~Ni_9`}ga%$V zQfAB&DsbhYaWyb2g(j1!f3FNVN{%;%B&tgp{8PedM(SEqexpm~L{r}NeQ`pUd~ zSji+%qCp0>eEQUstO_8$!L%X8CjAQkz;48}-0N!-!E|NnT|vw7)0Fw4u15zcjJ1ff zY~)c1tv3O8sXa|)MO0-(I*(>t`qGcTVFtf@CX=%D6iXSEV`CXe$Qdd7RqZt?t2!80 zF|s*fRI31;Qh2d8=hgjr4$V=4vKYm`MRbNHg3b2?@oygF>wmH*#gwqtyAyoPKf=7m ziK@b=(!;2>!njqsz;bM;xgIe$9(f?w_9*_E2vHC5K25E@~Eia6@1jfm$$zP%=&I^|-fvfRq>6B<0 z@@hXS(dOrs9w1Rv%OUYD(GB6%iz?AeDj_K)61m1e@D`vw;xeVgppEx_Z^``;-Ul-! z50-fif0r2U@fw|#7~S$3la?CO@|iG~nxye6#1&`$GD*zSlHg@E(OkIB)%t^rB4d@EXztQzwlW#lv=g%S@)J&kMKR6DSf)k_e|44 zr?*FZItF$ZMv|^UPR);CE<_mwSo}ypbz^qbA^`Q|@Ib;QgrF`Lxo!OH?6zsp1R1VYcsLyt;cg**qQ zt!ZEJtN;bW`76T31yOPpC^f+dor(xU!ALp5z<}I9rMTa&g3&$|(IJ8{Q57*Rw5W^3 zC<4RSq>8vNg7LP7VGZT-y@Kcp(&OROh{dRe&!qZNnPG)yz8$p5oW=IWq-7E7uV@A5 z_;7k^?y(KS53<76(%4M0?mK5GY$tohx-7z3J!9p52$oXVCiXI9x5AZy(OK>~N`hSy zt|*mkl*$Gi?=q@Rb*YQ~2f&(%7)Vb-mxvbUwhBf)E6U8IQy+t)UjU0Tq3T}x>B14} zpdDp7Y%Zm=E+x{FWd$FyMjqnPV=ilqP(mNrIbGRZQ=p$vMbyPHg-F01 zUl>7&RPHD?g-e_eNvEJhi3t^2QRN|&GKazfO{nrHXGYo&c_jm>^P{XsM6!!W2z94y zRVN3Y7GDCe+lQ+!qP8#K94D-*L4@p}PSp}Z_6wNOHFDWOQ*!I6@M0IZ4u=7c5s9S# zQC$shAcbRwVPZ`?hW7J;U5M}bS}e1^WfqagjE6hN?a(B6e1Nrl&GJPfW50Y z7m-Q_O0=I)nfOz=B%?I3rnn#chJ&mR;Nl2k3T2HDO9!y0BL&k%Sf+NtRj}^`wvrcJ zLcAz-Ya+IoPOx=XLk$u?_AoL6;|ITzToh%mB4oQpf~q>fG02vhaL_eCBpuN)GNEGA z#eUaBNKS3LpM*^KHda220&5zs;@R}rZQimJr8mP-mL`VmQ2eE$8^X^?rA z^@>P*2s!aWlNCfbTLZW^0>~;EQRPY=7vE8+!pQQ9-E;fGZH?P&NrEd`cQF>)OIj1P z#C0lM!`QB2jXQs5Z!^LUx)iuTFF}tzFN99AUx~ZAe&W|t%7a%wsubDXQ#^qSWD|Z` z{w&&ra;8q{IHfCgr%+BoN#w!%Nn`%mfH|snZ|t40MItR_o!}vWsL~f`6+mVQAb#D| znAA0uiTO1G7*2YHLyJ>Q0){Ko_Z196)>wwOtneos>v~7{#BCfmp+p zx)C}gL~Y}6NpL4{l8D=@8pl)x-cEkU2fLFUeJq?xsV%HR+_`xBIjbT{nV9fX8oaki zjQCeL*&A01_&hlcWpO^7E1Qsb14e^hc?y>4nVO|~= z$t_J@-H&J;=^{1Z%(%nn!`iiCa6IuSXHr1nY^K(aT8OG-9YHDgYpS=_EUXbJuM(*= zp_DJeB|6|@ZVw9;oFz;v=jBr6I>)KwsoY*Xks3~nw(0L;o{TB!jWHvZdEl%wY!~G& z9Oc9)^IcCUt>$_vQaxw%Sw)Ik$Gyr8l$tv(il-dqdk|N-MWi+eFJXw|d3*%@qYcid z?Dc~r$mKlM6SBEZduuCH&X#&Nt5)$-%G2EkqTf>~Kai^7;3{->Fo*5*z3Dtk(&Am3 zvuBIaMyZW9LyWe9?xkeeddGq~C!(yR93Q4t1xZVtctqeP{Bj~;Id^S&YwkCiB8(^O z{NkP$*3~d?-=o`;+2sG~4&^0`H`6^e`*+X$as9lj>|@{h$2{?7FJ;ZGP9JB<*2mO8 zfe%hs%33wbPM6S}E6JoC8GS2>H(!!{wpssdU-tQV{d1hG4OxQ?og9Lt0RfS-6=<-P zkh7C-uv3?_*KM#jl5=?6;P71T1%Glq~0*)qw9(b183d`6~Ca z@oZ33+H^ifx%{-Mss7c9oZDuD+rHfE^M=>8r#06N?sScA=l3e@fiq(bo)Yr&ci*_8 zte$H(dKt-kKW_AX-e?Kq@_8-qE3ad%eop1x=$9<-pVjDZ=gU#h81S|6se&&}t$a{l zW6-F4@N8r7WMfZ7oe}&v_`ER`Cm%-E6h^1;Y;HW{SRN^WUjP+Q@=d5lT_dWB^SxQr z+ts22If!UN+_g_!7z@}Ne3|E8GtP086!T0}F)FLLaKjvj_mabD^wdsWcz z7$((KB<(9CpDU~<#3Yj`Cbi#Pslbuzn_^R`zNJa{|LQmsXocx#kMbBPW<36u@mw(@ znK$#bV%Dr<22LP5`dhZun0msuoOb)1X#02X6@$Mh=Kd>x6H3Tx1D6s-Z-&vpfLIhzdumosPwTopfp*j{F72;pHk`9<`1=3mE{2?v(BGeu0G?g zK6EvIj#sK;QLYYbuH0;{mQeo8qg<=5T&LSoXQW*JxTRiQS>evzNb)YG6l7yyASeRg zlc@YHUb!hN5R?M=_DQ)pS-H6!_wQSKOY5le_t}>3EB{(Uk!}0RZRaiRIOPtq)($!q z3`;8pqS7hQ+9{#ZCEwbmuF|dB+D+Dq6o||8rXCDJ^@gJQTwD8IUo(WX_F2ID;;;L1 zRr&_+4|EL;G~ORGIa8KPnUPK{N6Z_wK)8Nq*YsRZ@-CT=^6mjQ>6{n~K8zbG2w%oKU(#DzqmCC`H?vood&Y$e|hz zR7@-BNoF$1tgA?K7)+-$GECS`d-34Ez_=%#9but3+Pmaqz0Z{b&q8ihnt{#_%Z+eS z8A=&0_&JVh@yO;3+{?#bpJU{LK$)&jYVk!(^Onq4R-ayBdow;YxJ*@AZ2pe4YW(o5 zJ@m)fwZ8^ttVlP1#?+e5W3D9`s#`#r?ddR>CFS_c!2HeTi1*)nFLs{DI8K!Rq$Cwi zuNZIhVUi~mdFS(Lvch9?=6lPL{c`(u8_f+!;nzY>>L-5Jx%$cC>gR#7uX2^1ZOm3X zZmL=ao|nheha`UlewaF}`Cj|0Af(ZACi=Ph%H_k~eK}HxEZ2(fLql;m05yIPokG;O zIEVT_U>ud%m#UdDWnoC@?P1^l1IAICbTjCSj(0Pf-2dNTT!Kk2t8?XeFS`e>a$NN{ zcby~n*~4mWy=M`k_%6oO`wxHc<+%Pg7&jpFp>kqCSDoZ*4lxHjvnsc~IsqS=H#WQn13>-L*g zV(0{{-_&S% zs8*qYZs0gO7=FAGeED~FB^01WGw=T%N9d5~LS$%xjbwG3!$w2h43>Wvyko}3NR3#m zCo1mE*?lK1n-hv(xt!a0Yhw81SH{m=(D(O})mguCoWK11o$Em=Vt;aPd1KWFIQV1> z9VdlV1GDef;GkHXrm4&IZ0z5W;^IqLX6n6t)_GvtDGtHS@Ny3cavrLU7v$XSl+ z`#Gud?`LDN63Z9ssYcKIKk^GKLDD|s!AywJu(Kn$_?BWbH}uTEufpRfwj$qu2v%W= z>~t1*fA}32?Hkf775)C#_Sco$e}|)xrSVU}1r=DGE;={Xa z#k5NYy7abO7$YY;LVH0ShGB+qSWq#|4v*2}XPM~=10Ggr>;QPBDdRwcB-!Vi9mh?D zuF6?ziZ^%zN|V#C)#;HMYL6@7>^s(l-#bbTuPot{%K5QBDK_Q}2P&W=hs# zi4Z>jSdFkIz0jIZc)Mc2lrk+;^8`vSz}Uh{jD_%#cgo;r)md#Ynx^=X=nG?jl^%lh zT7iUYh(6lK!ifSFrX~9OFo8ZB3xw)LNWuwXUoP@wqVEdusR|8RxP5y2$Lp8q;~)C| z4blbKE&~4a{v&>EG8wz}zf|Ct`g%K)Z?{AR)ek=y29c&0?o~Rf-U#W33VSIOdu_oc zW5*))CJR5fIw>l;m>eC9Wo8%%+D61gQSx$AF|Bq zU+>*T4J~>;PS<*xSJt0E%pK>{tu!1#br)INzlt8e2`##my4mCoB*FHi~<|4Q=@EjNIKoA$ty6-PqKTN-f1KUrZCn` z*YA0^|DLfj%n~_1AQMZ%CY$l1AewbOd}^5ZqcU!W9-CeccVxU~NfCQ&Q-my+$FL4~ zoi(yUOMxvFNA8-p228>4@mA;BkVsfKsigNgl?O6~oJjb5L2>L#Izs2_Ga;YzQ`C3S z*qKND5Xcw&-cu2r>1%e6n9t$z#rf*r<#pkjw@bU^(k&6Ypf`loPc;J)6lcG=K_%pl zQd9Hn`N&2DH2mo?Y>c%K@tgtkhNFz?Jn>shg5cl&qbv;gg;ab_2`=WRdaKF{*{?an zuaXdAIGA*ejYtr6!*Tv$YlHOQHxch;%6tHa6O8WNSftzunjzmwTjJe#qR&Y&l*3uy z=-os{!%3-BzVn0E?d)jx-Q8b149Fs6C12wz^1%2pz1TwQY) zex98*VmRFJ*T~{8x$|%1`EK4{bC>@5oVQ>(Ui**cE}u4>e?QEB9lW2ra&vaxKK{K} z{(@(C;*M;6i%6=9L>`t#-Lek;R4hU{Z;h$3X?&3=%*n)XZR-0)AB^)T9Tqe{^^|&6 ztH3kktBOsbxWBFOh-c1d-tSrHC8qq(;k*63P1W;+L63qr`Tz2^wB-X_-nHf-S%Tad zLZio$IlVs^J$2N7O+b*z*_Q_YE*gwJ-swnE){f5K{ltEEdc5H5-4dSU3$<(P=t}pE zK;ibh>7qaVbvu8&@_jn!z4!958*NlY{z2rqMQ?4=hb;Jspyup=TH9fQn-l6Nqfw=? z@pGb^Yr%2;O6xD775_2RGTSJq6>IW7AiC6fmD^xoP5)9DYUBW!ztGv=HEBT|WD9lW zs-|X1)2qXOozOV%G6|3BA>hf!y5i_FOIW-JWA6Zem2A zpZ@x4*(A~w0D-LEYU1YC>>8b_hcugQib$fd-$3x-ZhUfmR|aa>?ncDPvV zp)CFA&JtV57M-`X0Hg}ZT!6rdih$3MtQA;}0=!*^ovJ`{#33WjpkP-l=nTsmf@DcU zfa3rx*%+`Z4AdbYRJO^QzVBOw08<~3=3qhHDJ;YcAyw$W0yKw<5vUCf@p^1+X zY)Qz#TO=E|ApYy@Z7_p%Bq3V| zpl&1bp41m%Uo6?+d)LrAMTJ0OC}j~6GLaxuF-Aql4XHyTcUD;=ptNUr4+~AZvC6&^ z#@b)VPz9q)gV9h!nf9=>SF1FB2-f8eYE3j~tb<-puV!cUjJJw|GlgUr)|iRrh(NR7 zVp+LhY(`LKH7ukI+Hiqob;WY@V(%DY*bI>@Y)DoGS1_gPyRZ+YhEQP50ZSDcI`oCZ z7D4p^4eE$yY0v|SV?nL-K4;JdaVSS841_n3lCZ!t0J|#|=!)>>cLl3q`R(vOaH3ig z1Fk}|7($QYFyOQQfJwTp0ALbQ52uDa zDC;s8e-;L!GYN5-q%T0StlB`%xUzXAIn>euL(m=BSQa%bV;dGoiDAx$0<*Dq!i2L>)HPM=Hj#wf}n4?Ce9O_tBgZ7blCtJaVV$&P1B2D?G$0Y=zxemghyg&hLCg#wa}C| zQ%6`}1u}wM6xfMnRl@}0)iNg-{=bbs$s!_Y9FhPPk`tC|1e-0A^=u!wj8(EjGW(f= zmXQxau`EMK=A8+CBLKS}lvxrAal$bFhJq^*ChUJ$ma#04yx4ww8l3|fQ)HOi5S)H! z=3XoZ?_KTyG)o-QY2-M;wkFAp8}QWm zkfB3XOzz*iJyRTN38S)v$pm}dx*2KqBIqu-Ahl+6lo-yFFxHY2$UNSOE2Q}Xqq){# zyg)LX*w7KnGLvE;X=s`Q0+viz4Jm?M`H1IvG_%Eo)|&|c9N9uH%`FPm)$Z6$X#Vm;=#f5MoAX0XNLp&X_g4E}Nzg}>p{L^4Yv zSq(9c}fhlc3tKuq?K9mOtg}h?7=pm;#1)xUZpXq5!r+0DUXE6-N-m*5@tMiDjuk`dU_V zTtKO7w^>QJsZTvLSD>r~Sl@0m+bRQIm}1?k0<~6+%;+L!C0`j-(>SNGE|#-5RB;5r z*q%Ec+dd5GHolyPfjF2#3XqU&1p5ahO9YbR!W~zDq>Y3!w!_%ZkQ{5q;GN2|jz6qI zryQ9W<~j^G$eT5L-}e#&&W6Q!&eG-9f|g;RDaBMz0+9pX7b(!nI}!4dLB=U`xD^3z>H}}Nv94}H@4JVcDQP}oDI_ha zzH%wPU~a(sPF#>wkdkYs%_h)4J1|Hg=%Kqecc<{eX!vYqNPadVXpNx60zg_gSZ6rZ za0=N&5Co@)5c_q~uj6(Sq&-BzKaxcrdT4fq`?w!iw$WV`8F4kykzrmZ$%hjUc9P99 zUy+9=eHi^$M#uN%Yts9s6ej*SBsbu$+W?R*9-yz@>UZ?9=ZRBfP^O2-;z)|@Wo)ru z+^6hRK1SX4A})S6n)gVyGAwHWf~^9b@$@nSp_u7_k7rlRFk%&s5PyrWxP7R9OR@e| z`^k-XnV8R4bDf^46vdnj|D2p}Id7ks;nMd7BKDH~zrEv_%wqcK#pa*A&^bv<^Y+ci zyB`0L&?mX@91(n}Y6s1wK;#Y{9bQ!|`1Rxmc^E<18stugWJsORg=o5A66eh2Id69^ z)vE%Ut3rnP{vAc3qZ}Ggj`G!$6d)XOf)Fly8IU42?KuqA6F{q86~mfCn6Ctmp5*=- z*{*XaI)zD*YHnRX4Xymy?3KzK-(^0z%y>D!Xv~^v@S5$*{X)1>MWkiuZVsBP1O0Tp zgs1t6w21Qr?*s;LMtnKD{}8(jLKTm4;a`aEtR?*ep*Y5_D!yHijwZ}Dk?B^6;G;Nx zgkScv5n|_wDOkVMzs~#nPL*7P0GBWyx9Rhtc%Ojr;KO!yU^DitV3g!rwC1zE7>BV7 zo2HxWap7+QF{nAAE8|P*l<3^?U<-i=`M{AK(VEC?lG!t8x?im$NLX_QC%rJr9C#ho zL?m+%Zn{uICKmt0xFO#rkBj+n7VtCM4MRlY-E?J3Vz*s12As%5A0Lz zYQ$jyNo?t_(?vK%@6>fLfMHZc7)a)Cq1|yR69w>yH(ec)b)%5BO`qqb0>KyT7F)MY8lsRKA_9F7t%AB3b4Ue4ox9EHMFHkr0b4 zw!RinAExdCz;26H`3!9cKuDUL2$wUEY$BQ6Q%9jYPyuA{lF=nL9BK>}Zy< zOcp|*uU>!CD=4!jG^7H`VR!@-UsMeQNSvQ=%q#>d9CGZvW%Hb1Ta*pK!H#WG`cm`n z5)%MI2m!b-m8P%RO=Nu#AE5Q+qpKt2t<56D6-GA?1(reE+W<5lk#r5Kz@0F*DVvCs zLeMI~3;Y3o;|bBk-yNW!DK19IQ<^p`4al5lOGRjJkKZGW2?}Gcl3}w$vWX)e*JBwa zk)7su-5&#|o1u_OG=nCZB?-w)88f|iSAF`7qYcT@?#VWfVHBt~mO``l!t~U}twl4MTE5JWN?K3!t2#PFNv zFgPJpm)=kfEB*YgCXsmqAm##a5;R3xXBX%EyT(dep>_9Rgg3iC8iVED#touA(BL8v z^dL0Nd{{hZ44utehVaLMUDV~NR$~7L4w;{+GS~vTT87?B1lzL4^A;#G0U>RP()QWGJz(#A zuA}F?N+8kpV-&x z-|cMmSLh=SWrsgg)y55VJ#pTdJzkh)8H1b_fE2G&G!W*K4LR(lw|jpnnKHM$9EhQfVIYT5#OzRJbq4? zUKd2(>7xQl47R36TCurUR@;_WF#Vfu5^e|;uxkEaVBA7mqH^QjQfuJ9TN;(718jFZ zyLyt!w^zhpAoMotU-MN1tJUjaivRM}O~Wl=jKJZQmbuHi$ba&|e6>cMW0Tis$t(?C zhjw6z6I=wU6NQs0;3_~_kE%%1&LoWhN9*-b_SwzUPMzeLIoFV2J0tBNwPy5GIX+| z*T=&`bt+vG27P0lOfs6^y9R|uhZuox#V)6~adGQ1hpDJMfRrxtcp5-VnJ z;JQvdI2DG|-g81namG0nMM$4_sFRBxu zIY^mIRz5i3u~J)#s2%mXoIA#<(I3^)rCt|a39I9iH1B+7*y~D0)xFcAQ_WtR-}yj) z&u_=IaHQ7AAf#=h+yL_E0$$3Gw+veX1NeucLX1GElN86_~Eyb0>?+8PeC6C%HAz{4vKfFaNuXBXW2%kA_v~p zTKO!#iE3eJmGob%nJF2oH=(i`|3*P`+V#-rf%o*I=ZW5hcO(wzdd5mo9tP`AqB&mi z=YN;+|DEA7Q9oNiPhOAsZx)2oDtS_o+epntCJ*DJUWs%CkE$*gI6l~&v4IEvZCFVP z+-u%9q*)GU6u(@L|2OQrk@yv?a#YPncfD4{WYl^*Dk7nHJVKRpv(gRc3~;~aOBZsn zmb}kCE2bJo;5ET#*iah9Lx;oeXUiDg{9a5By}jCBnYg{hg|>TScR9?)zX#Acbzq^A zev}*R*I|#plPVd9XAdqD3SD%prM^aicMHkXv)PXoS0S|Y1YXNh3R4+>gIRX18Uu*C zKm+bkcT1oFM~^ThJMPgcqFi*LTN+%H9x?bJb%x}aZeGLTATbY(D_-yB(7Lal{h#{U zM&wkf?s&v!c0ozMk@t#)NJT4y?LZ8ERopmXk3?5jo=dO>fVcz+*+UHj8M35BEK@lj z4{@_HIHk#`x%<6PDO@Cu?bi~niFR`>;ek--uXG$jJisVF+u}~8nz6X6vFIbNi$3kL zzE>rpr3>?^NoMcT(hr4ySv>ohWZqEhs3~gC{Yq%yLfbQ|b=QGMS5NbvxJ}YKuVId? ztiAxRiMS9Y{gFB{J#rcbovDuAT_4Bcm$q+wYu<9~RgSlKt=5FEw?0vnvKW!P`W@Kj zTCThzBui>`lvbno`)IXnDE;t{J>P=WQ3^{xXPGGEcL%BPByylS#Z#0#(Lwa-2jiH| zql~iqx+!|Ux_;2qStU=FAA({Aw=X4e(G!!lg8GyXBfpi&j)s>TJg1z5n`jhtm8`q& zUaA-)Kbl`@81;8Tvwa9MoYv7vO`P5D-hJCJuhS9^-~x_??skFYw^PmD%I5n%*wG## zWHvZU6$ORYo7t4o2i#(kUoYBw*oZx<8gNPW{niWn@J@t?!>bGVNW#@*Vdh?Q{o|dw zdsVD!ThFNCKbc}(3~s`+zFG8)FSyH=rQ^XkXC5Qcx^61AO}i6HY|NO({M!IT5F4%T;;>+Q*~J`LNCI*F$F)#&kalz3r%(s2-Ht%nm+$oY zb)V8rKIj8)gLLJ4J(B%JeIeU8ax&#^llGSiJz#8DR?XRXVtq3&2flWt+|NY2^NfXW z9yBVNI=vKB!sBzP$>-XiLCc-E&fee5{E~XH_9cw(nVRO0iWiEHGl_e@UphqxT7{3z zRS0wRYf{Kbrqgcjb#+qSlKL)Cec3Cs>*`+BkZ865EI&2R`KxkcEKZ6F{=9VI|h z7Iy!GE}*4TBp(5mCbWN@ z7*A4&3x~QO?M~eaWeoAY;4+7Q3SWj=7s=GXJdo^FB1jc)bSSHUL4l<$Eqb9tw zZ4(7KJBW8YLEt$XQXKC!0maJ;G+hFh`OC3S&-Nw=8HWy{?F(Rurghq&glZ%IO@?@b zk_|>Qd5>DANkUa~6wAzkZmcVV!OH_%PT!YwUXZT%fYxGAXN631$RWkE6Dq#*L9%#F zbmIHGB92S?UTJ>iBqo_ajlLL?hIocJ(+Cv5HMZyB*io#41P}9|pRRJ;xIkge3-Epi z1Ik)!J&bBG>)lN>30P9sV}`N6Dm7Z&5*qU`U6X3OsW0sYmdLA7MA5FNDfRo1CIrY$ z{@9(I`D03iohXz7wxy|%#udq>fuI*9@1nlr5y#7mrCiYq2dBAHglbfbi2EDo|8Y+@ zI$D=f+xFVgP)N z9g}Q#w}{>H8?j7P-CqNXGM4vE5n)M(vA+!Apeu})#68c?!IH%cr>fdKerOuYv3Eo7 z=X^vF!1(7eJHWxYXfbhgV!g&1>jv9sGaN}{c|drtj*CX7(uB#=gWc%8O|Jx(37dQG zwxqeg&a(>coH>Mplp=!kL7Wtg)%6;CNp+7(<#@a)LD1^d*EV)BE+nc2S&(jtn7jti zh-nb5F|lN+$4L?CZLBiNC}^`+9mHx@g;6K?k+SvEhwBhyX%gpPP}@S97ahd0#)R`# zBu_hV#E1iGQF^M#F#=;QbGV};CX&XTz-*tMGH8`9k$|GEkSwr}v~`R;03W4RNF8EK zmLo~)ZA^VDNpmYn`#Ownn~TiX7~*LI4I~hLmG$g()_<6iJ028{opeKE%&G!yD< zNv<7cP`M3F&jCeY2escr>c8%kXnMbP8{Z*%ezb<48G^Q*iwlOJieRQ{z-Ko3P|k)^ zj69}p<)XEZqG+|Ds!xg1@SyDE;%V)m9kroav0<9F32Z%}s;;67vv4yn;{R?#C6wmo z>B0Xy#qH9B`nic4nk%wi$0iW)bcQSr?WA>wfDj)QdD@{yea=Qp=CKUm^s0ODLlQ@n zRYg?pPE-e>r44*`meL#=5JIqqa8zf0OjmZ}TNrv3X@U+x<2YHY?Wh9sIOJkbbD$<}ZDybL> zR2YS_pt$zqC+l#efZ*w+{?r4x?8Z?eGcMP=u%8dCGSRWAY8} zV0Vg_+;fC;gX z56iF&X_aoI_Y(ZD4ACYI+K_Bms3ed`oG&sD=HQeqX$#ZzJ@68`%q;mqpGXw54T1Cq~uZ(MEa_# zYFl(N?KUQNJopXfv<^3sn!29)Sd`rs5WXK}vKZrgbB+6YD41pkBgZsh*Ruvazx8 z>aidDFr@eooT_80a#nVviu!sF30tfpl}qqLP|u(ZGfT5IYqK|tvpK7?G&?)gP+ljS zQ9z4FD5XXx8(7cNJjkR`YGgUv1F}yGwV_k5(IK=g5vqZMPFckNLZWn?_2ac)3$|e^ zwqr}SVGChnBs~yhMo5dbLEBMpYqV$twA+(FMH{tui?;;>0-ZXc>>#wDHMA+iM-URY z0sFE-T0@gHL(Y=8T$MCQL$qZyL~1*^Xe&y2i@BMrC?L=heCrQ>8%0;!KvBgwfpxe* zluosDx~t1YA5})03%jwK9P>)A5=yldN=0?+N2zY??)}Ru%M8D&kK<7*Uzy5p`FgLg+eVk z%=)x5^V2McnlJMME*vr*fk7k{0vlGUaP88^@oZT%jJvYIWSsyAkuVH^a1KyZVZvZy zW2Oz}5KFY<473%ht;Sc6QWY4dmi`tRg_+fDP0!%8H{W!lGJ* zzz2=+4#!XjZ-9t(u$z5g4Q;>-!0-vrfOYrLj)jm8vG9SXfD3m}2qqZ^dO#TjLo8b& z8NBcg!tjRKk}YV37J&$h#qtZ`Ko!mQUtsnB3?5P;B~fn9H>K~;3*RsfxX8=2K%k&9 zEd=!oB(os4aCeEgl8mud%rYS9Ko!zfTWGO|`Jrxltqm;F4Ft6z6`~!q*JXco481JR ziw#p#3%Z0X8&28^S|D*0mt9iz4-8!eXu$+sumnLN1yC@AQg8)J5DQ5F0hfS)O|S+_ z@CEF61zA9jP_P795C%a|3(Qd3YA_F300nwb1-5VuQZNlAfhr;WApVeni>D2Ia0$JD z2H$XhzfcFy&;@)D3WHD#ZIB7izzc9-X^t@ndq5v-kP6oD34wOZAO~j<0(?*fSbzx}5DG!i z1Wk|xGzSVhpa*J@1Pj;(RA87T5DGT{1})bHK~M-B;EQB{jHkc?dU=jaa0Y0$5)hIP z$h~HX010FE4RLS`|L_LI;Ae242gRTVeSijxzzk?$2(YIIYe8k0zzF`33TW^LJlP2T zz=Hqs-qccIU^r<05O4WF6QPj*7o%YrGYxx|seF33Y_!m5kNDIB&f$QF35}3^S(qlY zFb!Sd-)RL2-xdzMuncI?2+M#cRTv--c?zF!hEQ@Qp`dr|zzfGfAFB2fL4j_dux;j` z>?Wyv=jWRFz!VG8bu4lWNc|0va170f2`^p?pb#Q0JmmZCK@{K`7C_HrndJ5iei280 z6|!a>*9Il<221b;+EC{+Pz7di27KTH{xAg}$OQh71E-(|SP%|5FbE}J24rvtXfOrW zkORzs1!T|!WRMR#&<8;PnS&4nOHk=njND@O3vZC!*wBsx5e{;|5NB`<;Qa-CkPK+> z3CVB`ac~Oi?GL57qh+A~3E1F`pU?-|AnHY3Av4|K-7pQ@$RM9^hyxZ5Y+?&0S&~qA z3e#X2SJDl~5Dq_Kl{2X%KrtVe(1zb|4A$_Pz)3rQkq$L74p;#R|Gkp0Id9hR42!{s zEaJZ=@(;`26{n!=oEH=E25c;{ABI>9Iua99q9BTK3N}6}*w7(+_zAVZhrG}WV8QRR z?@0CfsrdT7tXO0Re{rV}0&2hld|>lmzyYUV22Jn@+mhtjOtJx%?DMSg}yN!nHH`E}zeN)DZ~epy3V3>&Ce&un3e#f%?D%$YTB=G@uyXV9TVk0xE(^l8+oRj+2<+VyML zsVQIvK_SmRdH?Kb{?sO8XL{Z`MI(L=_rHAO2Jsmr?3bB0EMkq*v*#GIQ2S0Hg!8G9 z%v0|YS$kIhXOFgCp~e-Wd&%FRHnhSuI>zr=k}mu#Ud%_$Tt|ECsb?RKI?5-X-Rya4 z9|oNwFrRzwdFQfxemanz2qWC*z>Y9`hZ>Ifd&in_@-gR`Z~oC{8f^Xv=NWVMA@7}b zrlBUBdZ@7`op7wd#wm;TF-Mzr^67?}ciwr%nv9mpY#)C98;6;3lzb+f5lQUO#b>&C zXPjro0m>RLzj?+fjEwwI$#CXr=gNQBG3TFs#+l|F8L7$V#VhA|MjNoM%;y^_xirU| zX{Jf%t=JlM^ifD7m2^@{E4B1e&Mct7f{Qdw!=HC_9u?@dvrD_`%aB2KD>Z*LnQ$hrng|;iCy!Kn*a!X^NaSKm@PV z)}DFh;Z{Ki@6pZMYcr&0+cZB!6C(?s%BR40k+bMPrz_hZ+>ulhC6KnC;W5Z?_gVi-z@8Jw3nYRkhPdFt6Mv)+E|EW>+RZ51Pl-x0=^Z#q`kB7sBQ4{3-AW?Eo^9em~(a<4rz z+ikPfdTXwy<*!DGH4EFcvBfSe?6NUSdo+pH_N;B7Tb6rny6d+4ZoD5q#8?%ABMX7QU3Uv{rkSATu>+jpO{mpSdbo$E2nxm5JEMLcWh zz4rfq{^c%x{j(mnICMY+CQyM3tXBdXh(L5vk9z)_U;=$! z7_=Y&1=uwWlFx%9d|wM)_(B-Y%>u2<4G8~nzx;_XgA?pp4?j4*`k~8*L*yF&2g651 zB%08N=35~OPpCg3>M)5#3sy0TXY3&d zF*rpvvN3~ZjH4XoSjQjQaEp87V;}q2I(EDcBcURrW}IlpI}Q+$ckEx|5UEByE>e<{ zl%yXmc}YyR4+Jxu;TQeE4i*wpaAn*fC6h?NMw)VosEp(sRryLbw(^ykq-8B_nKw?+ zP>eSmr6FPY$Ta?Pl{`$P67zV>M+y^}%B12go%u{?maI0P`kM_4SwL4Zb8BgoB^-yj z!8mqvjmtcwIG?ypZNf2{>tts;U!wsMSYT%IVBr{hiA^X{5sBtZpB0J!nan0Wk(fr5 zU_bNO!74T~oK`$1057=2AWBh$1U#fa-FZ=rW;8P(AOT1JK?2+OO^?@nBRV5kOekuv zq54bcIa~Taik?)3J0xLAQ)s>r*7JEY<>vN8H9lXiFqj35sUCf4$eLPIqf2F~J4vvD zc-ldv*1Ts>!3j>HR*-zS+bTZO*+!){RjgwrYgs$@w2ud36mbERut zo4NuJ%#40E#6(q17uR9h6|R^vs$e@)*ghiGQHr&s2=FS^n(@`IhNWy}EqmE3u7C!b z&Fd#a`HxGe;UDHmQfW^pRN3M>?&4}%y)AFO*_>}FTH+vRR|z58A8hF84fC2x7n zdtUUWSH0_HZ+qSQUiijWzVoGTeeHW+{K^+ID8K;;r0U!t?n4`pfW##Xd|(78SiuWs zaDyHEUPd}0)r_#Zf+!9{?ug8#BG zK;AkagKT_b9OqcaJLYkZef(n}2U*BNCUTLDd}JgiS;WGF{j%2TFtm92bb zDPsf(IKaUQW(MGrLake4CUcq1d}cJKSMr{5cBQ4ecWp&s_A zNYyH0k9fYYUeKmMRkaNvjagX7dQv#Rh@$7&Xi9rkktY0UKxgXEaSE{23^k@ION#3f z3KiHN3@T3l>1miAd!>yoDiJeXP?%Ov*4ySbYlg7me+*&KG{bdRi&#;Un$n1rG5ot=(;Iz|K41`ZVak4SsMG?pxst@65NwE!Dlg@g3yC zOoWmYA=^z{YXHt#w>Hl4#LWZb+R`|>lB6|{Z+vV2DX${$u4>S#wS46>r+LQ%=<;dd ze8$_<`L{Zra@*D1=B9cZ(T#p|vvtO8YrEaji;i@*DgEi2X*$%^Hua=i9W+(fdfdAH z8K+DA>sTKc*{|MkAV?LI5p4&UF%qG+Lugy?NQXsiXO69%d|P0#mbSp+l)cZR?pRAu zKGFerzbA?C*b@1H{4R2wLw@5N*&w$@&iKoZtK`~}e8)F`Esb(Cw(}@qX;~#DJ%h&zzjbAq5 z-@f_1e?DoVFMaAyANy=eKE%53edb%g``0i3zVp#Ov$emG`IFf$GItM!E z?LKstu0H2I=l?nDe=XXpywLMJl;c18qd)l@z^u`~`76Mci@g79KnMIeqaqlw!M&wp zx(qax4ZJ`OR5}d=L8`Mrwdp_){J;@RK@>be6=XrS3BeT{7!wo?5|qIhv_b2e!4ecf z&KLqDfVgsFA)Y}vMv|xq;wcJhqJJW`cY~#NQ@3I>BX8LUpYt_x;va@nzARL@Avgla zQYiy+pmlpWBRscCQYaGgpk2zIej+7qk|}vZrc!e>d($U8dP5!Rsfwx>D@3_H(~`K$oziIv%9Rud6|znaHfOzKX;_i~L9z+`)^4!H_&Vko3s1yFrsgNtRs6 zlq4IK%*YljNw3R6u{)dF>BtxVOvt(c$ZC=}x4Q_7bBc)Mymr97IpK^X*^GRMJI&~b zP}vfo`5Vq~O3kp!eNjBAl$XER%8U5ErQD3L)Qqtln4_%9wJA#v@x7_6J+}PHw-iTH zIZLtBm#bWt%$PW@p zBXGDMK)*tCNTHOFcX&V0gUqpj+NtGqN!KE{A|sU zWIFnENdOH{g&Drjw9ov!&5)$EBfx=&TPta+p9rxxo}5q$t*CAaJqWbkH$; zG&;0U5gkzy%^Ms5f^iEKdjvHsEKwJIQ5Y>58UO+s_rq1kJ|7KI zAstd8Em9*rQZfTRuq(3|WuF>_F%Rt@ESu6PT_7vHQY_6lZBsXWQ#frh%y`lq4Wf4mhi;g~aIi)`mBw!PQ$P(=K^;^=EmT82 zR76cwMO{=zZB$49eN;$|R7sswO085&b<}T|5T(QhSOnD0`BYF1RZ$&PQY}?eJyldq zRaHgR%=iHih%p;lhBK%GIj93$y;WSzRbAaxUhP$1{Z(KMR$(1hVl7rv|6 ztG!yR%~~M)hf^p7&`G)EAh2;*mJLBuF$Ea2OdDUgq^0+I4}+wGG306%X-;y3L5@&0g)@UheH(;zivt zJ6_iRRb1umUh@rIPQi>6a05^wOY7y_Cp=&IonQK`-y!;k(=}cNL0HCQV?=`rg##k8Dj|3{~K}v496i17UIBx2!-=v+>(-(;up?N_ZsYILq*^l`<8hxRcrBNuPnU@3!=3kCC z7WJoB`@?&jW>EVy7Omqu)T3+m=4<9-ZXPu^Y_@WiHd3PIY0jT?W@mDK=TsI;P0ox5 z?uM;oA*6Zcu|bf6>JS7_KH>ymgImsBF}|srNs@g4yuq8euK*W~Lzn~cieRP?e&Lw6z?T635gCuU z3@V%u0$CgyyJ@hX7X?X@%Rr8$#2S@SwKOb9rj{OScC~^!WlU>AsK&H3)V47!Hjb8R zZ;ongLaJ@@YK{gWHFPzdDrlX1#_F|Bp{l;D>?+8iA6s9lgaVn8r(N#o_0A5j>vG zh+x^325Ei+BJwxZo7tU9P!@Q^16?m| zKN*BZ=!s|OgIF+HYPf`S;D>L31Y7WjX~2YVfQgB?gktE0KH!DXIt57opaolSihRI^ zM8JelIfg_Kh6nBi;_ik-_ymh6hC%oR7uk+Wm~L%Igscb!rsxCtfCPf@UjQy}1NU7I z))u_Zpm4Z^gTRDw=!QmsiBo6?e&_~X817H-iEsc3ln94k7zDHU1iB~$kl=+Vxr9V` zhG~e2t_AO62<&vQg#o99LEwcFQIL6{h3+@23uf+W$=e^_ykZO5t|4F zNYI9Vu!TWz@>mFm0>g%z_=d$h@KeH!2l!~e!C>9)IDa^X9w@Ln@P{m5fo0$WNO*@P zC;^7p0}fyWWod*Mi1Bt{f*@!SIe3OJNQ4gDj|mVu*t#&;uwq18O)0KDdNXkb*PlhEtG( zLV)%}panA60!%ROX;%YK*n&7%k0#gyX6WrtzydQsgGHYQZP1k0;e!g0 zgTQVB4uAr|od!l=1`aTTV~B-fDD`xhfhA}Mf53!k=<9UQg9>N^en0~Va1SY9f$iW0 zcBq4!-v={j08lUo7BB-OFM%)chalL2XK;IeV1f`xiEyC8kl%a0_uB-&mIeR0PiTTO z*n=dfgN<(kIe>ye*aI>ck3t9nInaYE*n?>>2a-^OB;W&T=!H}Gf-fkBMo5A|xP&Tb zgJoa_VTc7XkOIf=f@0`~LFfT9co8+&0!TQ@!c2r4nD{+tf;TvYHfVx6poU-I?ilz2 zTX=&efP+C$gFWzkC?JDSK!YlfgKiH6GGGBdV1{G=2#3BOqLKfH2zY=9D0yBM=`pvR zeGrE&C;=&$?k^~TGr;s`Uji1Og*~VM_uvJ9xO5}OJaebiR4{|-T{~R5w|V)5sYy~LR61K-!q_@>h0LHUZ=NkHX3I>FCUP3_ z>h(5>EoN%EU}|^t9X4B6X6WGq<;^KLOrV7S3OCJGl^%WKG8g9qIeu<_TfUcG=24{u;=oXG?SIE%^GrV*`Ml6?*0S6yb#IejX$IxO% z7fd8^i8aTZLdFbx6r;u$kT4StdZ+Rc#1wB}0mmtCbOA>n#dLE_tzW27g&uuC(FUk( zoWaLwO$0H>IK`YHMI+|?Gmn@~ZEKyDU#i*Wd1Dr-KmrjcP~&*zotNHv?ID@oC4;oH zLrzzOfDI&rbdv}+JLqvr1D9yS$2${U@l7G=Jaa>i`8>nH7ykHj3Ir)Zk;5|K)WHmd z%oNg14suw`h(A)4z)T{ESi^|ObzB00$xAH3k1av;0b~%=aL@&WQm_!tkl_+tw9!W+ zowU+RGu^b)PeUEG)KgFWCRy755=o~v`yiQ5JD4zG1~v11v&Ry8sCvpTcP+z68;sDB zgcQs~MhhBE401^*r+k4$eswSsOBGn~f*CDjV6lhXq1ZA_DA0vcY#*4|QkXEO*aF8F zXH?O~DQ!rx2PU7?VoNV?Y%YZyy`0emD75fVMNX`S)9<-=&2|sUKVM`w@?-33p#hlW_C%n}0PB)eQGRQOjfKmrP^SJhg zHvgO=MIrnYLm4lLRP*s3-$3$9_le}A4q1rBAjZOnZ#2SxP-p}{5OWGh>_HpjXu}t# z(S|En;~#RU!ZOweybpr^FoYr;Aqh)pLJ?Z6EJe~9*N&8rcN{|wWZ*?U%)tva)WH^H zkV89ufrdt$0u#SzU>Nw|KVE#o45EVsFB(CHL_|gy5+MU0nDLBfT*3^OfJ7JgzzAMw z?+b%i56rgr4{LlP7R&fVDE82XScKvXZ`fiiFu{vseBu*&xXd{A@CI7!O&FL^Ln1<9 zhOtC$5aEc^)UtHKN1lfO2{_LK3Q(hT+~Xc@QjhYIw2y`?V;b{#2Q{8yjcH8h8SR({ z*-*)iXHe&g;jl)B=FtuFgaaGY7)L(B@r?KJ;~UJt#yB*Rk91hW9O+2MH=cowcTD3M z(fmd`reTg3hGRef^Vr8YrZJ6i%%dUJU}iDWv5#&%;~Oe;WYX9P$#=ptp7NY0J=K&# zteuBW*kGg!^D&MqzJrzFSjITg5i5SY;~CWWhDQAHk7ZaR9O7t)Hm>-LaJ1u!-6-Zf z_%RM)P-8mCq{bP4i4AkG<{9I_Mlo~=%yfJ+9qkyXN-IhYRQ?mC=ICYy_u)-!P*Z%& zc*i)70Zwf&gO~MO>d}Pvj|OnZ0GG_puA5RU&y+TVmy^TH|`2I2p#R*($47^D#8P#%W4UQjIy8HL6|i}2 z;a=Uk)!S+nLT?T0`dA5{^|jSQ*=j3%*wR+*)yR(@iY zYJz2wX2q0QrjfR(lH5)L1~65snkRYiGShjqg*8^P6QA}l%X{4`r}k<~u)bZ>QSh0q z_s-Y8Ycflg_WR%dws%~d-L8VedtWG3HoQp*Era>%*b2+(!V<>tgS{&y%zik;?4_`S zF+5=rk9b=oUT}mLykQ4-*h_~+?YQ)bT?YHMzlQOxVYoIW|FROF`_)d6-D?y9|JTAq z!rFZQ|4W@9Pk6thEOL@_>|Zmv_`)qFF^EyzV8otS#ZDrCQ_W>b8=*J7oLsMrzw73~ zQh2k9HEo37oY*dN7teQwbDZtm=Frl)&w!q@p8uTZK?|DCheoubvzzEWFB;O4E^VRt zds?wvEw!t~E}7(9q^-iZ(~mZ^qa$7FNi(+6miDuPJt6#q*uoz6(P*4c)v}h@%3gLo2VforJT=#7)?~ZZd{t&+JKNgcHn*{DZ1dQ- z+u|Pg)13VeXe&V4n54Fv-<9E}Xf@vQo;SVgZSQ;ITdUdGH^2Ms?|%b4-~u1`!2f~& z>9Q!r#$mo|z8jA3fIB?m5}!E5D{k?NQ{3Fp#g&-}%i6+?0DJ9NA|DZI&1!@^&CS=}KQZ)0@6@o*$hd zPMoYU>t1)X z<2~oI*#KbKl#dEKJ%OJ{O3bI`qH01^{a3F>tjFr+TT9+yYKz)gFpP%4~ID>pOmot z<7z?Q^qAgZeDT9S{_>wc{lPx~a~~kx>Jt0%KJFfPV_X0V-~bX}0UF=|B47e4-~uvW z13I9+%~u5e+`&zr!Y$mF5nKjp;0AJFQrw?;>|WTh8+!Z$@O9t`qF@TD;0m%}3%a2B zX$J+a-#$G_VY%Q9;$RMbpzi74w7E$MssRa-+Yl0A5gOqU+7kt88VydE4T1|2LgBCN zUE%nUS=^H-uzI zO^q#0!#hZ0y!<58q(eC5l2C%vKQJUIQjJ_4$vAuiO8M6;_Tlo_B2|7GE%3tn*upWy zTUJR|S>+-y7FRNs6?_<^KZFA>w1Zc@)jos+E!aW_m4#So)pR7|TE1m$O~(pl#xKOe zPGN#I6ot0Dl~&2sS&E}ts-%!ugD`~ED5)hsz13tUBR@O?Gcdy`Xu~I1145mGFbqjD z(pF@KRXCm{S7l3Vbwel!(=%|*JEW#R*cOkUtVv_?4Cr!aIwbg_~#LFQR5Pg)jNK-pFL70zs4Co6eXK>Z?ag%wdrBu5ql zFW5rmjAvx3P>;h1xbOoe6oNpW z!ZRspmSjmY9pyM!QA(K-W}uWc#EMQ*Cq|uubX0@?d-~EeT*)sqfv@^{X;Wx>NF&kLe&tvR_ip#YCc#4Efj;SqLMaPQ(5>@DOHp<_!D)uLpMZI zI+ZG3mXb_SgTGqCE;X!Fh9Vh7gDr5+5ZPz{DD*<3#sV*3!Ze&hYC^&>T*9?h=qbDdVyFFdO-B*HS7 z!+h<7HXN@#_(Lx&Zz2f8CFCfD7DF-60;pQUB|z>a=w~eS!sYM+HWb1ySVJg;ruv3L zJA^_k*a9YW#N}wi`h0>g6a(+Zf-sn-SU$ribjUX-Fep?`@g6TiIWG4+LoXadC=|mq zTmr2M!!+=MF4#i$2Jkm<&*e}<-*&L${sJUeFD5X9FxUbud;&JaZ4lw-I6$%d2Cz1C za4{SM>W0E;{zKYU=!C|?DOB+PF9gzsIPNL%LNQFv=$?|WEnsFlEQ5T2!ZTd&Gw9_n&_XO|a)nX@ zA2Ut~b22SZF|ATC*WcL<|%|MsNOQD zUNZN@g4f<~?s)B*_Cgxxjugv^0gI+B{K7NSf+zDr2H}$b#I0T$ur*ic_sl3SoPuZ~ zCXG(9=|o1%9z!zQZ4x8qIdg3-gmL`xLM`Yejj9cWnll`GEeV5)HM|4e{KANy3OEY` zGBB{E#w@JaX8HBC$v-`L&7;rqtt3d3xFui7kw^oA`apo%bvgZ#pgULJBIFhd4)L-~FK6P{Z{G@#QE(WYog5#&1tXAuOL5p{~UCuyiOz22Bzz-TX1?Rw!odw>ISV z2K!HH-f)H5f^zdh+7^Rzq^3D1P&demHNf#Q958tkcST}NHwZ&wFT)gPv)3wdV%LI4 z$MHtTZ7&>hEg*8_67AAjaWR)AiK8xN5UnTocxYq>p$@V0;|pg#Wt!!oE1Bh14JGw(Mn!x%3^BE&+rR1750FE5ybYgh0}2t!*% z#ylLb0@Lj{OlKjCjX5arK1?wOYjEY9LjBIEZkjXKnsX@p14l#dPNPvZOhY0(gP>kQ zEC~GnMtnOq$V6?TN~uD^MWtpwSb8W(s(b?#_f*4dYjS9GwS3gVfKz!ofC?>KNI;De zOSAkj)Iu#RW;fJpPQ$sZ@DJC=mFHJ*l*EgenLNzdNOKAh6 zz7KVHa+01fC2IyVh$Sfe!Z%<;HE2W|I{1`CD_N@zqS~@B93PFI?wXeBAzzU#L_9;S zcYFTvVP^9&w0SW|eJuE?De(d$V68obL-M|}vX|0qAElin6r-B^c<(UX_&KV~aVZ^i zGFNCGJMa~)X=acsp+<8WQ+elKW&vAsorZBJIqn1BC^Ik-JE&x2oC4!Su|Mm=h%)5= zEu(KJU_viE{M>TwF<4Z}&*(8QgOcX)<)pE)J7wH1G!EDEH5-3>qOmQw^#0MVl-jNf z>1H*Q@xmmpCJW6tob$5ojY4I$I8aWhGXrRtJ0P`#xi5nN+r2hiLRo4y}8^GhV{JHCky)7_VZW zjuisNOxr11{P;0z)XnEcX1^LuqjicJqi4T<_4>r_=t^Fv=KbSmE7Ukh#qv4)h3Ofl zWBmTb3Uw@&HG|Bk@yjEE@Vq!z}64r=WC|eHy&30>K zOB^J*;cQ(>ER5egtP-CMwuUKIxKOc<{TjFL87*d~ltGI1Y}(Xmr-TVpe2G@5VyA3P zoA_&@EnCbI@p=|+UOQW)LkU|>4brb?&tm;L7K#}ygjX=AY6P2n?D-JH4-cH?7i!+I?HPxbIcA!7s9CNyUSbiZ9cD1$Wf}G)qvjcqrul}K z8*S<3ms5BV&X!-o3Gb9=^ee5GcJfK5nAe^;Xc}x56Q&q#<}t^+Wfm*{=9AaZnlZ;y zLRp3yUO?fk7wsVWq!{;NfhnAD_~Ydm+eV|MNQ8rwvae(aa8U8{!E}eF)Ifb-hRCTCIKygeBq$EL_E7M|XX%3qJ?>y$2 zZ}`*clmP}f@Bjq@h{K1qsToL;60^&f3|dB&W7=ILmj?&f;O-*;51hM8jUwdYH@_Gu?uZ04Cp zm~NIy$HRQ4$=2L?o)OoaaF4;}AOETuhu3_jeCC~WggIuJJWHhih8apzGKZRD-kF9O zMW5-Ws(onwXPR+D|KaS&ZTA?HglXNoo`Zt_ZV%S zF%jc=osPNBcdT(5-j$ibW}kepVdk4U}KsxfDtq=gCR8Ek46n3rn4nU`d36cxA_YQj-E9Dz};ts87p&v&12 ze)&<~$oH|g*SW{Ze4cTHaeUlotkIKmriEFi8*G+&rz8obpPu^aC#>+o3=!P0!w^NZ z=fHN1pR`wonNKGj_MGm9^Jm(z#~NXRu7{d?+X<%^X1ZbjXPM>4U9lr#t5!Ge)s4o!Lp_;X2>rbq!Y(<+7&9}{SI2=7)Qs(VZiA;qZ&aA9?ReZCSh2^9QO%_ z!Ng__pmfe)%)pn&=r%=$j6;j#*cbxqrbVXxBUH>_hOmfbEM%o)S5cEc_8eL zcMK7??BO9jcI%IS4ACDeHV;4E@jimY5cDvFM})nvTNTWQN|*sW5FOHc`#{(wp>?3l z>1$Hj`-jQ&RTV>)WFApVWkph%N(G71WTrfj$tr^Xq3D$|A93qsRqFA{MYhtERjFWx z?&C>ZBIuLJ%up)t6RlzzvzUn_rZl0I%3m^bn81scAzMkuZ3YvUB|#;$eyJ}{GILVV ziX}4Bd7ug=5|xG=r8V0bPgi!+ocEOHJ+0SIfBw@!6tWP86vRCb?J+^5+~gfu`45KK z0vi>yhbC9qNPD>DjwVZFDH+}e4l&+m=$39XiSHDV2 zLAL~GKW}L=!`id0iB;@k6Khq*J{Gc(m26}eG+AI)_Ns~DRm3*0#A!95o;*Nbtq=j-$-S6feY9l@>U);T(8kc!3aU&s5s^1ijNCOa=er6*m}MyRX8 zJ#1*LTVMO$7r&x?Wpy$8*!TVyzyXdBY6+^L)pn1)34(2GD>%!;KG=JF^y`CL`_Xr_ z!@1+-zKl58+$VN#2yKXFNcN3J>qbkV5F_!U+)jMMW-x$X^*71&c z++!c#n82b;&w*RJ)&#?N#z|K4l5>mOA3r&}!xF2C%_>K=zLv>ZhOL&%3uP~V8O&i8 z^O%8*y#jBK$Pvc!krDJ;F7NTpakep;p`2o}R@u8(MzWmwY-0`68PI_i^q>hX;2^7( zwGoEyffl@G8B4g&kxp`QPe~)u~qXssVjy z11GxF3Rbg`N9||Zk~+q1R&%6TePc_n7}K3hYlPq|VLlrB)Q~>5vWuPUW_KFdxUThY zxmE36TTetj&i1vr?OtwM&(&!EhBaJu&1P9=d)nr;HbNDx=w*A_&BhkBx<8Fe~srBKTAT}jxK-&zGzO9*5LadthW{3aEE_6+y^q~md~AR@G{6l3P$o**Uf0^ zCEVi&C$_8`>8$c#AE@O#7y8hN zUi2T=eB$PAw9%Q~W1n03#Z8y`)Tv(eQX>7pnpFC%t=@IgK0VKgjOy6QUUsve9qnl! zyVu#?cDK8;9oRExbPY=1#$I-^Z`b=j!2WLsYu3bpPpqT~UwFeG9`T7+{Nfq^j!#(V zlXSlXB(zaYo#(scjMx1C<~h&gzO&p6`}jtlmINNtpC0w8SN-Z)-}=_?9rm%``8Q1R z_-RCbmg8VVArz;LZv6iDt{49BiC=u(Go8a6EiWM8YDwL#IW=&=LAmnMv?CZpbxhT*eXsG0qx|b zhwDfY7GrVM$W0YnQ5M;b5B>1Y0Pz)X(HDOa82_mkF)tY1E+7B^A^8La2LS&7EC2ui z0MG)J0RRa9009Ub7+}DF0|*T$H1MyX!-o(fN}NcsqQ#3CGiuz(v7^V2ATcI@h~OWB zk`oauKpE0x%Z&~!YJlkBLQRVvUh2%*5ChMLFCdCgp>rb9e=0~cOv;o5)1@GfHq<}@ z#6t-dEKrPT5kZ0n2?R(y;E-(5vuM+*Z8&h?fPV-RE?i5uuHCzM)e`uZV6Vim3A~~_ ziB~{L0b<2|G^}`~L6X<+4^Z%c0}uT3KyhEq zI1)Wt3D-X=RmIUa4i4TyE)Q zJl*#{)&KuL@WbH@4hP9zl|7HW_g+yHDLQ1Oa7bhyn=%eB*_({)E%TVic8rk9$V|mC zvU5J?{r%zl51h;8an5tx&;44gQ}nJyCQ=)!mbDtLV7X*YL!2}3r_OTTttgXu zvWSPP$C7OMqPOjRAIyY^l1NG^UI@y&@JNG zc|7^m{q-ta$$mG*@vqt*;%`0xS?tZ1b=Hx&C4@fyTiC^3nm>H?17z%$`0guOyeF3C zR`fDCN^an$W61ToK*1d)Ue-9;&5f`zB0)z`FJkCrPUQ-5&!P=@uSq%G3|6WAw$(H&U%U&Nnk$ zYRyt0>Tu%9@LJ{rr9WEun!vrz74eQ=)j)VB zL&an9$e(>3T*~lq=IKtDE)RVdOp51LKb;hZqz?60zo}sAZ~chKGX&=8_4#H;vKnl+ zb?W+ZzXMLZ@`!)h!%keS4ZXhlr9SYFNWJc0@-Td>!-Av;VYKl)z+5^_ z0Tw)zs7(%{9`2^T-bZsaty0LAYf>roM(U!p=-*-~xlr~|X6Re+JVgIOv-lf%j^*8l zR_)X0gcuE2(GHQ0nHLB{(p?)AF{BR<@GBj}na39~mKh8R+Z?>L9xq~Q9Uc@9ICzJQ zzpb7!oFo}N9q-hs&pM(oBzsXDkBYp*zBvq+y;$dZGrrFGxqL{buRiJZ_#LiU&Ede3 z;w1FOGfw8rVRb60qABbfbc8q+(jCFsUc#$9`e`hz?ksF3F%MdoECYA?E1%H3uzqksr|Ili z@fROsv+(g@(Z}Ot15>yAYeoz0OMh$LOjO#PjxKa>HJ4B+RH!fCn(Jdbsf#tOa$p`? z90E1pa&>ppu@;^mwK-|Xn5c4=|N0`CE_7tbKAr_V~L{Kk(Sifp3PX3SH|Bu0CE6hRJD8h*tadE(@*&C?p|fa-y1=# zw`aaXo>z{2FDhpOj0|qt>U{lvn04B@V_F-qFt&U$zuC4nXso=wwtTU4+I==r8*)0f z@-9fe+wb|aP_W4=IXh|2<1RvfRoVLO_06)xxwYz?fvn122SCnJ9F4%XA($COA= zS5vWn+F~)lmqrkm==^amd^U(ktdDo$SSQN8x$S83Lpj5GC`ivxNj13zTs&lW; z_*jzhR5D49e|p%WL?WTgWK;O@`DmL{-5YL)B>sFYxbu#d@KtiWJVuiyzOC=(axw&g zUL!L0p|#m}>taNjG}!|)(B$2KIHht;xF;r@+m$R@Nai*-DVKo_i->hOTcdF&XfqFE zsZ|XMX;uh0>16;&>d9^HGIRvn2^u7|(+dw&7!+7W#ic84^jar2SGkz}ve6zGdh9!# z7Wg;{(907TJ1FrXmD!m^KiV*;ShoK!Rev6_7o4M)sQ^@H71DTaE&;OQMsN#XMb!s8{nju3L`_mtun-|;#4e`9PP}D zS;nz?f@)z24O7p!7ZoUl4%(7D%L7>Zi2A-qlmGStS1#GMy@>}A=HxP#JmiIS@{GGk z>d+^*$!QEC88T}kQ3iR3WcdC~X*g^$G@L&F6e?*Bcu=5IZbd#!o%>QCXv({6vO1YtYEy z;2ANX5v+e13YzcozjLjHtKf(_aD^X@3BYcP@Y1^gOh!k(#uFyb;|M4KUE^s_HE5X1 zDUMKZ(PsD>9aRMi-lsuLG9s?(;ITun3?hc=Z3a9cgQ|x>E%zouIU_EsEe^^Q0;i7% z0+7*RC~hJFA*=qtX+U8ChzbcPwuUKV-P7ybO^`H9EEIuQaxxyuh=MnmQUDzuoKWCR zg(bgl4Y&n>*0%xk&B@6Cl!F)wnmUjwfGi3{^)#Jg3hjE$^V%EXAod=ffTFrKhn3M$ zkFCOSBp{0b??FR)^R0hwHe zOpeFXC14;+bhHsfgiF&ZyafYEFo*Q4!lUXaFYy+^X9ecFs$ig{opqlYmEq_4uiW6AlygC>C62~tglna{S!BtbUwvnPC?9kg;t`R=-QuB?@Ye1PRBce))?W(6<(kN^LvO z`0qR$%bLTZnHDi}KSW;d6z$j-qt7#+GkKnaXU*+;ZsF+&cS=tx+E!NL-4;AyVhB;pBO6=vWJ+k2elO{7QG{SCmQpH~u_=}dC|1ZSR%$O+5zd7c(U}t?&1TItyFuraE$<)LeRLr zEp=`$eYsTXaZ!q5EAv(=^RX%O4Jdn)RTj`*7PM3ra#4n6D-TyHkF+U|4k(Y!Du3Hv z9#32<=X(tR(UILkRHWKeqyq%UsTvBX8qTUB0ovnBRg)K0 zc(&>prRq7G>iK}`#jNV3_Udm-)yun;Xs6diFm%JFW-Fj(C#z<+z2^5)&E7=~fvxsX zsrJ~W_9US8EUWgSon)2PUSHG#NO7Oabrg^5K!J7J0Z&W;#;~t-w3l^s?DY)F^^A|} znF8xsvg_G8>e-ET_&?jE%G|%L+`#*|fj_W8FuOsxqe1j*gZO0wg1u4vSAFG8yIrDx zqe6D0Qb(i8*G9F=Mh*5Rr4LS8kDK%Yn+&p>j5?Z3zBZ}(2B0F7H}ezGS-xHXq^Nt2<>okL856~Z>9JKzwtmcD>#kyMVqi;DcFSGmPpOwSjJx+;kCE;J3D4#n z`>ZlfFrU0CK3!v*zgf4x%GA-6O@HPHk4@8iGXRf+>er0Hg`<*GWz&V5W2eCFvA!L0 z!|m6r?NuUiEsryzMl#-=S=5Sj6b8a$L0utDopJsh^ZuQWDD{2DEG7cG7zE;85m`Gm z_`4ZMd5g;Fuc*79IYxY~w5Yv|i67SYWi+tqh>eF>zN%;*WN&vG=$@}=wt3v~4$?g^ z)_M83GwOMF>x-UYpTtPrRp5VZSPNEsHs(E@J4!lw|B zAOiFVnMeZig7DxT0=ymz#_(j^AEGz)g`rd+Jy=*7g0>If8Zd?} z4Qf(>e564$9S@yH!Q!#tI3)ETCcFg;<9HO;!vjl4;ZSkyynlQZjxncv@d@UPqH;r0_t5#a5I}$GCOD@Z0|1mG8q}s($a(=N ze|0bePfFsd{s&_h5}*CA*gd4r(~=%9M)NelI6{pCk{W7uj$5 zm6=0=5u+?Z6J>N%*InRz4QdS5evpm|b`5R8(31S91#8$!@N~n&-jScvrT{91(+MLD zkQJfNh(MXY3in0;ow4LD2)HtVQW-^s!vp`IW()B&cf={L>8MmSX1mNGlxHBywmH^m z$2m0UI}a=YJ^Zp7G)18G#DhH%@F^6i3FAIUpbRPi-J@lgl84x0AQ1%0bdA8*0O%h& zDr;KkQ*+2V9&|JeCX|EH37{S%b=W7cXTkTMSg<#0c$8-N3PT%+P3)=zFJd5$M8KBk z5X=n=PFG1$=7$9#XfO!3V8Ay|b8tTLJtvvXITjXx1vepRGYUYFL0eUNG(Yi>%4(W% z1f&nMdW9SfuL3z|P)#8hT9C9}+w}OaGzloT5iBf@2WD_hosOA^L#<+vH2c_9$wh|J zC*X8*OnMG{i|~`<1m21M)?^NeM?w3L)EL588G7^@uZLj$76V~?O5V^3G{jI`W5EiH3oosq6fLA9bH^OnY7R*W~xB~90PDou!HR5L1h^D zFL9V_0muyluQvy8;lJYWG~Wr-O(>AQPysNjP^}IA-5jj>b8*oe5`qMInS&9u;4&*|3V z(!RfAC3*D&`HbIE7#?ourHR>gN3vRMnPkbjFAro|Y?}g9$zTXn0U4U_dii^YfOmc> zkKypyi^HKM27`+5mxfXjiL9ZXlZ0Q%d{FLCw=9n}0bQDA{y2vRy=f&ZB`oGCkahW~ zjp59rGkd8UxT!9Sh^mU|`Piv8)r9gcR@~G|tnNT9f?TZk;s!w1Ba5sCtJ~SbnlPAM(HKJD_*YgtzGA zA2S*;?q;&7#y5>D_g7|cyCsOW zIcsE_c_QmZhRY9g?L_Nxp#i4Ha|XH@3cKjLjTl>>D1KjV=4DEPI*+Ggt0WoS%VG?hP);W4737;e)Y z_S2ZNhvMiCt)G?*@t!WTQ`0?tzr&wp1&ok_^5Q*7A#QuMip_lg5J?=jbH)KUgN5iH z%^G6ipfWv*fm;Y;EYP0Ovi~8Q79G9)aEoQrq zifQSmSc*4%@g6Vz^8IT5kQUW9xW)O(pVcMDA*8UB)9v<5biPMTa5S@hA5>u@@uYq$ z{rOgMM*6d*=VciVZYKH}=_`f&4W5zqTe-1)pTOCkhtnVyx0X#4$3Ts%GIqM^=eV_J z>!so%CQV=u@3 zVk9i$x;_z>0;aRKKN${b4Fn1AU&Cl-( zE7hv`!LVh4GZU{V@G06}Yu9!=2A=o#Pj2n9^vEGqKKI_AFEJ-uSM?!B>Cr^xH($1` zuK(_SS+Min`UTE8;vlj8@JvD z?9)UToEUsrrw`Egy+asGie!s?3c6(OO?iXovJJQeDRwFTL-X4|^)!=m>TD#viglpI!O2TTpy6W^6Ukn?lyV{aWXU+h8{EieG2rHMPq8^R;a+jQaVoZ*cx$>uPwSka_!a~5;co{n)!RmT!YQfm zeYokJ6pd}>z3=F$*Q_ro>PQ+-)B*dE7FayMN3fF7#pS_53Tv*oJM@ z*C}R9Y5(QBeT!41yf6-`dG(&`pUZUk`|`-$8+q_3R~@JDu|n(71or_~J=ykqiN15i zo^v~r`0vQmKr}>~sx_7tiOLJ)C)|-GAxNe4Meqo~sT0@PQtR0su>R7)Y*;!_5xsA-Vbb zq$p9MLf!)3=)?Jj^yc3yh>k~-zVnUwlth^7>&rJu+U`DFXkQrg z@NMp}-Sb`OSfTWMGpKBLn6}Wlt?L=^xx?A+;AP_AnTX4jNiFP_U7l5g=!^y+-Z`HSVP{;f5SC>6)s%wLA}^}JKw z6FVLG<-d%Wfy8u^&rF$w|I0TR(LZ^Z!stpqKlb$c+rwTJW67k91i@40!w=`8f zb{{&cvQg|#T(9x7{e^60TQpAnTd#ip94(Z+&?DDU)64tvd1%(+@MLq<9oJ#xw$j(C z<-e_p`tA=elfLRHxAK&6dU%?Bo%z!u`w915$5&$d8)2D)<>_zutAR4ELqtr)%CskO zbMD#dK0;QRPR%VXvz_ZV;`LYIiHXvQ7^k$m*@L}vw9lS)@a_+v)hgC-OelCnxgE7F zY0#ArbZuvOv&i5VTP9>&BwZUo$<;8or0QR25W1m-?i|Si)dV}Bpcyn{^SPc|UVpRu= zB_98N9eVP;;_R8__Q9UHS>PAqajUS_s8&2YDe^<*e{JHwRWsIxc8S zHve4Ilj|sVs`G|w?fHL4=SL;mD*R@({?ovQzm-Il9WtTIvDuL0R+66Ao*FO@B#x1a zr{Ljm?z(_??_Z^U_f@5Qdd1X-`nn_+(h+v|iu3u&n0Vl`EMwV#wF2mFrVn=(PlQ@bwY*`9Clgz*tJWfkofaNLD26 z*<#U>Du*K27XeL>jY3EXmZ}L$J%IIHYW1UoCbbFFEydG5`9Q~^Nk1o~{i!ly6noRL zmx;H@M=JG}g9vj;ul{ol+N-QuFTsXB5f)zPeR8b{Xe!S@vQ>)aZBeaTmVLaAef;CS zd_G!P1kIasn!G`Mf~i`xQhk0|eYY$Ha^CjxkoO}Pg+!iIOda$}rp5{V)*{Mvejq5{ zHnxXuBv%N_@VnoyWR0)n`oY68AksC{r!l9AxYABF=+|Z((A>~=w;52>8PJ)Fm7LSo z?(8>;*O492QOz09y6V-d(ozr7(f_SYLZP%Q`|pbCnyctMFex*U8GOL2+m$l#$Wcch zrmM@LW5F?q_%Wd5Sjo;fxJ^G~&pYHGGxSVn$kB4h$#KZpXUHXT$TfB7dC8Dl)6k27 zp_g+*?i)iM$3vbJI20q!3x=b~=?`*^@i51|cEtJm;QS(SZ&GpoCAfelT;KpMXbu;= zfeSgtg;ETo8HdAohr?xtBXou%Er+8Vha+EVyh1`36@jvEBIN3ZiSGu6E$w(c^EE&ma8p$3Q$&|q*49B1r$(|PTbUc{+8FCT9_yhP$1;xh@{ae( zjQ8t|4_J;5I*t$NjOWh92D5;rSiseXaoK$1&BrhEfPH9eE|&#>6ryOqXJkxca0wxN%}+d;+X9xnViE z={ULNGr1i(xsy8i)AH`pK<}{3-R~une>NufjwkmirU;Bv2fSv*VJ07jCl4*B{yI*b z_)MKfPMta4U4nf`!I*rTyL&!2^>1V9`gn>+f#3QjA3G26Nb^G!3{ybaNfyBs&=BrCE=<%^M?R{Pz@ z@?n~-c^bkyX>2+D@XJKPVXEoHJq&rpy8vD*;hA_>KJvcuTMzE*O3m=ndZR3$odaVtW*AjRY;m{r9YVJW2t? zw+S|nr3}r8wyvYJp(pimC|_@a9^;v9S-^6=Aa5~>R|S^(^_Hfe7lJpfU?pZ!xp=dq zm}i1yiW>Chs{j*Bj65lqIyTJBI$CxyM#q4hNN-4?NRl(!$fY1r^2jikMUbFtq>eS| z+Ky&@^HvK>aRiOwA%uBm#PAxBhbTm_u13izP)fgvU^kDDSdHSvlB*hodnrUQkO&lo z2$5AvMN}+*L6o!tXk>>{@D0cYLvG^=6hb7(FNWpa1PK|CKURovc@x39L;2+vP!;hu z#OZ6x>#xR}bDW>)dmu3kgJf>&@zNv|a{?$soK&Fzh=XZVw65sf%(k2p5Z`q&2y9)GkB2&Z63qi=8W21Z)flLL_$E=aOXan8A zue;65znnCej_4h)wc_qUs2^zdgW;0@~EffXtnZ*t;Lv1B&PzBjKs$9 zzRBY^Aoqxk5?MuST1Ri6M_U_&^Atq!v3yq$3=>hHJQ0d!5Tqy;L<(t8&*jEaoke}f zB6&OE&{*KQ;XCm+V5Zf#UdaE6C{D;Q)!{VLC0e4a%^x^J$n@TDCa40L2r+gU-!0Gp z6YI~0^{ z#lkJSd;6yLv$`bhwy?4YvZw#Qd>GMi@T^TtXA(hL7UFMq0GJ zdsZIra83EeKKja){IP2|2c0u@{dbFUfFjBE$p{m!ivktIQn65kT8Hx&fYcySng)>; z8DXHbwQ2WA&NE6iB>98tD7v$^e%9ff3Lx3DD0v8(jd_HzAjQwmAMfk!L_XZXUaTFA z*~9r9NWU4;MKID>FlLJ`TC#)}RbfLS-0*$xgJ^S)_wOth+~KOh&Zr z5QPmE5`vE=NjsqhBvFmh`7GPPAkui1&BWTpqHTpGL$98ynOs3=huwfpIMK%wys~b$+y)5?nnnT3LO?FRmxO{%UTt6Ec&{W zr*shek}XAwm=f`sD-YR`U)**3imv8F6tooi5C0fNy#g$4czIxOK^ap!U5Zz5QPg{=_EUrTV)Upp<%?wtqgq@H=|PGHo#Jhx+MWS=fcZ z1&9FXnf^QEY4j~`Ev$h;y?XIJ0pv#j#}FXt1ZWuw9BP2Joz8G8^oe8fIv~Ko2XxE_ z^a2MA@&`Bc4;ZZuZn_*W`5iFF9I&Jxu$CRLwH~nJ4mcJLIJXbDP7jy`P+Xhu5+UFh zq%O7VFs}=)#L%1H>QEr&P%!;asO(U<^-u(ND9UZX_<8U1d?l5c6bO7IDR3kue?*kl zKay!BMC%pB?9IjA9jv7?zb56uw;n04%yE05<#2?77G0XqN}380CH+rp{60stp4q!1 zDlW%*+Y>z7A3J6Us^i)n4aXD1vpgp}$=9Pkm~qgN?za4zH#8Zqs&x z_+!b%(9wZOAWuT{-GT@y4CRwWiPy|$Vd=iAWld`Gvw)x&AB_kwATqG$l=u)G?Xhwy zRREN1qX;QzpxHc2JUvSS`yV;JQq*y}r7sd#J|jFR7jRjk{FQ(DRZ$8;A)qai5kTgO zd6P4B9+w0XLjpzGfC0#EOb?#4t@)n&g0lL){SDqG;GPWm6!&FYi9i51n@Znf`2_C{ zRI%x;mS5<98vm8YD9Yy3edPKHXedo45cD#^hQTib6ilrex&ru;wXEnC;~h+Lu(VL9c>} zik<~sji%f>n!eS_J2cu;)yIC`EOs6_m8yD9=|u-Jm5gz4<*?UyPc*|)+Y;Pjn?e5N zl+z*LSo>(lxMI)MaIkAsZcm^qU8E}nq=F}VSP+vy41(!q+VR{l*G>0DMtd&Ccp{^H z7eKC21~duMuK+QNpFuCM(Rq8(&bgpRA1Lj4LSF|*JDF#C0AgKQ(z-5P_IdgushFi+ z?hp$5LVqSsU;K^#(&)KXXIjkU!8L%nt)C+L{BXlCV!ixc66EU*53}29^C7uw{bKjT9>2a|3~JGP{voEHuKr1e#K>42R9fpr2oQEP@ygq%tn#QL&dF zZG|I$&I#GnV?u@JApXUqWO&wA$_o4k>kI~4h7<9pgt_y+FBd+e56kuPLk_53?^?+d z*0yK!^Y>R|j`K@9;89QpQf5T|xa6Q{ze!*j!O!qctmL9W#JDXvls7i_e!Sd1ug-%9 zRzh^xhql2^X4cQ%M=`x64j&Ei0Qbn!5m8O`IG)$%5fk#)j12G86L#*$ikKUhw~G9kPFeo^SAP0rQ)RRS+x}Omuk{P#@IrSac`%Hcaj`>O#1xzDRLWvd}yhT9eV1{_Xyl=p74D zKwjUNRG%pGXh{6AB!stLJc3bd_~z_H8HY{O`-j&}ub8YIlKJ?RUql`z$axOj#>oWb z%;>Q%&3PH!o;oY8QI9KFzzGFguY<)NAsZG|?S9^wk~J#E`?^$Z@{DD5>TLGPGJ3Mn75uOU2$Qk`?VvWO%oRR-vz0d>@OH-jKp(C8`J%(VT2qjPiQpyV zzhNQAFH#BWJsh)>p|hQ@jFkHirOmL!xud&EuS)22`|zpvLAPU93nMuH;BQE3S$_>t z-mBd@qULQ@Iii-s9ebNJ&f@!qH!kTny!R%yrKh9{2l~ckhB>7Z5x9CED*i6S`i{h4 z26K1dSjp^F#)?XDg4`5i`JAL_e&6`_ov-j;%EUEu?N!Nt+!4u$m($elopH<~lICHs z<9HW9HB-;o1LE6WE?Y(*yZkxC<}kXt`sJADcd6-&vjg}Lp*WH#_yoFgudi>S7$tC} zuXfd&6uc3^eJZ%7>b;oZQ_=@wjAf8%!n~Vb>!o(aO2x$UlIf^{r)h0+NAPXg|6O%Ldb z8zo1(<`i0Ccl6cTsp3z+JY#dQHV`i|h~TEWw_&OB-iamLuZI>S+ZU~{snCI~A6Kzr~4aQ*0t$N(+ zhQ{2zAOV$ip(+2F#=MhG0kxxwso=xL{Oc*`(weKui zXgcnGQxQ{F`LpF-UiQURxXxS{^QufKW}h`vvJe!8=5|d2Md`z6Q0eSX)2ZL z61w~9<81C>Q<>U7A@c~~xk85KtS{c>E2INlf>O;DcY}p3i-jKu+7&}-(ORrNc(NN; zw>XZ^gjELwKZlw$S2?SS*vx*MZ*CwqS9=7DJXsfB_%zd8#(`j-${^H zHN!GC&xz}rC6aZnU~y2Yr9LrO)bTS4BxB;+;6|qn7bXB`&3QmtJV3U2x-ZiyEls7W zVr~|dOP?EBnrni^UOp4~`eml2rKL;E<5eYTR0?MK__it4 z`e`z_#yf(?_NSI#yF7}FK1d^yhfWh}gcg6(FS2})(%QMDDiJVSx%{`GwQDa}B4}M? z<$R{K`=m=E<^D>_PxeUs9#2}6el~mfw24vbq)wM~-ci-I>e$?5(Df_hf3Tels`k=OUbjNA ztQ}2hw(`&49)sWII3t8gxc(OGXo&`6gv`!)(ps9VbUtn2Wg1C|1UKX^A7)t;>*kiI zjB!+2!~N$XGM+oyF+ZTm(Y)u+eN+G**ZaZ#u>b97VU0cQCrG^|Q9H(NSK@xc6`#UX z|I7s*Y~5?*LPhNPpR}DcpT6n8ybAF3qJ`G4i|r37fH1Z;uRHe- zXd9kLrf-^q6col28=45*i$JilcS6wx%!upIU|mowEybUDm$NDFuc27*eZF@#b3y?= zNWN-IMDTkb8xx$B>Bs57k~=YM&0uw#>j#`QDlzM5d*#LCL-yro9H(dTRxa{hZ*O#E z9??Z}oe^lFk_2z}@wf1Oxd-!XBWH!Wm?#ggQ9sRD=cvI9&IgCVym|U>cB8@UnPS#9 zDSGCAP`LRK`@~qQab8{h8v~>D@h`uHvkbhU6h&&rV^?l-agVGuKWF)+cYo6+iPu|B zfTlE%#ew#fAV{3J1&BjhU&Gf6a6G63TJ@L$XcZq)W76d0Ge* zm&iC7H1UVvkONJ~1Bh@ROjwJRG<|dX9>dHG5AB@`mWPtRdnH7dg+U!q%14V?E?YIDUs30dN=Bh5^3M5YILn2WI*SwHdc%MM_RZ^-A{O(& z_k&f+fJ$nFcqch4oE1OmMRqf_4e3}lFCGHM( za-7+5DNmiVMV%fuf5*^N3s@%r8G`jj!agHMXQqNd%#s7n`~ql@tM}WR>fX6w=O6NRAB4}8)d*L%e5~viuF3*6^$H2} zEhz-`%lkys>JAJRW_=LH0f0~-4$tmSlMhR z(&Aj%;vv#1{-S(l*FQ^F`Hi)bYsRNMk@nKc_8O6nmdcK9kY7dePI_Nh45Y9QKCBwFt4fz-81i_j zVJeCX5goq&vV6#uu{0K4dS{e&U8_X2T<})KO-^kc;W4{$+qXIKS-(dnt0wP18Q-hQ zQW+?JKkyw|d~{w_6)$SHT&1;DH7(~}K~^xEXE@a@It_g`H)J$%yJTk932j%sFh4UI zB9{5v=JQF_VmQ^z(#sKVF?3$_*X5)y-G64Ht6i}#zm2+QIaY)3FNOW6URk1@yZ#fe zWJ_XLzb{v>CK{HrRj7)Zwnd9>=+$i872kZgr{Z6wY+tkKA-;V`{I8Ecay?O7%}3~` zaF(Rkj1KFpc%irnbV*Xorg*UC_oVor`IEwz{35?4dDSCbO|=4<~gOI&Z&Uhhc|Pil$R5`cx;eJ-H}nJ{t<0ELVO`5gpM zz7D94pwO?QFhfw1CPkkjKrVG4PXySn4jhVr#MD8O5YY5GXg-3ftd6P{LETD#oLVU( zYE&Vm>KSAJUKCIeMZ1rHpVq;N2s&^*9bA&0xt^YzD9IpD&mbXrL%#lox+J51J)@cA zO{@BwPbHaL>X|$xnT-zs0+IjDf&7tStf}>^`I2m9^=!40?5*|eJ(3)_dX6bc&V_o; z6-ln`daiv*?$dhGXYzm>c;HgEm>X_!d-GWAYt5Ob$Tr+jm*UlL;5C!tvufabD#h>8 z!0#y~;MX7!DkT`xAeba2l-?keFC|>oAY3aY(s;;RTg8`LBRVA|w$LE9A|<}vAiggp zaoQk3B<B#GNUPw8jcLJ0n%161hSF-=jcWVS>ZgtBL}?9h zlLlNyllfRC$)#9INA0&Jhfl4xx{Qu~la85;u2qxnQyD#%COuCXeZMCCP#J@mCW9my z!}KP@d>Ny%CZk#z=dk9vIk&PFw_0DP zP_O5K#`q!^EykL)AyNFy$<1q!$GWe_6!-Uw6O+RehVu#(u;pc=oVS3`^WtR3SNvap zyqu;L2ejn+lnq=aFQFF1Oqp6=p9*=tYW?oN<0sJS)*<&Qrc&|U$jdVMz}D8l%ln~& ztQFnz!3(XyE2r$4r$OAad}J1U=cl{k7P-@`A%&VTq}L8%<=4xn$HC zWMXsF;H!QHq?TF}85l_>n?aJPI-1OstGtmV&;O{&=;V!QQX;|`Q?Wv4+6)wA)!Q0` z1~eNl850K+HBu8wAZpP}Y23zxcq7pq<5;1{eo00x%ADTp`^s2wCl)Lm&+p!HS*FfG zI-dpsANSc0VkL9>Xz}E7yh^PW+T19B#0DBp0J7F$<$r66%4ku(RAGbwIWn{vp7c6= z^YsZ-7{_&v-}s8Ly{}X{63nJ!?7L&Ezw9a zF`01IfnkB)VTTpp$6dPSJyoTD{y|n(3mD#075uVjb+6~sJ&p&-{F#<&IdEu~IrV3X zUN6<}3tis>=^cvYt1>A&p1-UywHPX(q_O|^ow<9BTWwIMW%)?;hkW`_DS@v6D zEm4JaZM7{IV)xcc;*VD+TcK(@G1s3ry0+hS|IAn0g&S?V1nRIh{pwNsjqCnBrS@l` z`_Bp~lSR2L3;4!oM8OAmNkJN{S3h9xIp9`56zDmWP(PCIIZ{_Y*6%qsQ~zt#^Y^Lx ziA&Fkr~0X1&uOUoSxnEFnL2D=?HB3)Oo`=1t@>qa&t;GL6|U!MO8p;c=4VCydb{U( zU!8cWuF-Tu0fQt7^7Q}qUH+5CTv z&&Jav=ZVmx>&>sN5>L(Y)x$tHl~P^r73(MSKWI;VZc%1dsP|s!z1xFIt9s|p?eB>% ztZJWTM>87U*94>rKdSM8zREXkB|3M%S5Eh^?eII;`rMK3`LrjL49ujGfwJ$9p%-}A znc?*em&E>#^U=)9(I&U2LnR#ydz+J@&%IB^6@9)DA#X_w;E=@Jt*L^5u zW)5X} zytx{}afiVU^LgS#r3|>rBn7ycGhfb(2o$P__x*j-k81qmZL*y!#{2`L9oce~!Xrt! zbjba(?-9eG|DvPxsQg;I#od0SN~K<4O>w zN@28l+FM0k_K-Zq%?!T~QkJSqDg9QiQ{OpXn#&eFf0{>AoUW~#YrPYP{T$J>W!CJ4 z+jgd3q?2=|*IS{|+~Dy{{(O|^-R%sQJo@N#nVXynIl+Ch+xad#fA|HmmolT*S`L4f zW}q_YLF^XW_FL&5OGYysFJ|iXSe)?ARBIef>WGnLuX0?6Z}tbJ`p8d}|(mBGIB0K?H$^o>@N&m(Y3mIfjo! zE*YngLiTv34?TW?gcdTGX`~l97%7IAJ_>;(oI>6xh88(Ov1Sm$i{U41Pg|wtmr%Z8 zhM9Dp!K4>`PbtQlUrzZ)@^*^3q!?y;0fm{i__0QJbOqMtlUkTLMHnSbWyY3vu>a`= z%~L{|=9E~pndcpn{iWrbV@{a{{CA$QB@~ruvYwV{dO3xbUT6uQnOJ_oMwn;*IffT) zez7HX|7B+jTJYi&tLs=dgyBDJ_zG00*mdha*hQ4jw9 zBc3GF#yI{Vx^~P1zV9%{tlIRBZ**g-?`1H?U4Q~a8a5%J~ zC2d@oU#-QJmY_BcHofs5=`is;-ncy!|Kq~>Fb9G)91aV2V@u!o+Bgu5T`5nwffD@B zEZqtI|lG;3yaXKrL?(Cp+U zdS>%*;4=r7@jpO>dgho%ZynK^7ubbWN zcK5sC9dCKhyV$FicABpwADXvToayU)CG)ijSP+B~MVoxoa&syM^O_^0=yMyYO+6zVDK-1q(Vlj-tG(=MHwU`i!YpC6M*o$0sqS3vzL&aVo$r0GP0y*6@@c1q zCig%TKM>E4xd`e&J=sU4bb|OpIX+W7c|7nW|M*H}zETG==Mf`rdBra(C$Yjyt9GI& zM0uW7rC-wObwZcNAFA`QCsj>mZ<9m0p7mn4Y~@Ywci|5oGAOUs;Av!dcaVem%8-Yv z#q}$$%_<$(P|}GloKg$7;~QAZNB4=m?QuAk8r;{0h)s1)nuG%z-(VAbf7Xt4bff&^ zzy`xe6|1@Tm|^qi{yeHL9rmFezz9{eXB^r=8?50Q+To4nAso6vS6J`D-a!F93(iht z9!!R0@XJ(k!W_CG9YAnPdaYD^g2JXQ9RI8#9H0jqT5JD^F9u~$FaVE2Sgp;BgKta$ z5G=tG=%9l>NL+qxNE*SJ-T@N^ArZnMg{p`T!T}SQAra8%85m&@Vj&y`VGnqr7YZR1 zumKVV!EzwwA3WtVc!3r|;b)#l7zSt=Vj&ccfp&!90Zj%3wI{}Of+vJwUB=<3kmh=F zMi^qn(Xinc`ml_aD}2i37Z8N~v}cdrp%|c0Usfk4-hmg2fx-wVNf2xv*6JD7>K78x z8WIp{81NEfhq$a^fU3d%T5SelF&6W}`0xZnPy=e{ArhjX6y~Ob-r>ujMhM^L6b1o& zm|+i?fe&bb56l1)AR!jM;1l|Q7yoAHrk>~&-l2!i%7=g`77F1Mil|Uj22$oh8Xu+GpVGkS<5=2KF)8tV~$r?aGU5eoouyGaB z!4@#VlHjr!28vxDEVd@3Lz2Fum}g?8495o3ZW6^i5AqrZwg^( z_y7_&i-A5tT+!5_e99Dc!f<_o{d$S@7lV=8I6XaU=l%zsKs zl;p6Dj)5P3suzX(0g?CZenMssvl3(hyKB&voEAK(EW%z+*BVXJ}=*i_F@;KI>*qEIYECi+BC z07X(HMN{y^*Z;y)O(G>#a79=Pg-w2qzR1zNi0#*wg;1adPf}%X6a`PvB2<2DR#?Kl zeoeO+#m+iITvY;Ey>(nNtX&ypOSVfrS4Mm4)lH1UGxF>fY4u>KY)9`+E^4VK?x9Z% zR?L7yDUh{a4Fys#)+f@_&tla(01ec}QT zV2!5j*6wC;HfPUn1=W-As*ThNmfno5Wr^0h6c*#$!$#a9&i;Yvm@Y`1Hfp7IYN^)g z(m~NOL}-I8Xt%a#z1Edp_7yu8&|(%`U(M#wHf_}wZ3kpvSC(tH18zl4ZZC~)i{oqY zc9o7+C;yX{Z13b2kxk8h)?+d4Z@Xh`2~TMY*KR-d)AIIl9Vh@KHvqOSMkokC`j%kJ zmNXK#ZGBcd=$2GO)^OW4(8_gO@C<9mwqWHfaX*7~Nf&EjHFXs&XiI~3J#BQpX`mqgQ&dmwL6gd!^Sy zE=NkTmxG(N^0D{*fP-4L@*MD&} zRR2V_UH>#ESOR5P7+)zxRAlzoWH>DzY}f1o*K7^uw#4Rkm?vkg9R}r8s>=j*Q#W&dPV9muSX#x1du4;ESV8VLe-B`Pp9*ucj33xRdx6y@3TQ8R;VdI>B^WIa ze@zeV$I%Fd(UcVj{Yi!O6@#l476j#b>>&=h@~kw*8rG>7aA!5mAr=fu8{%hFL%|l9#}WrwYIxy! z@`V}DaU7Omf1UvwNM@95hm*|VT@=M9u%VcjVT}F(vZMxITE(3@1z%{U0zFERwWmTN z)ulf37^H?76nRM|H64~ACirK0rr{T?VWdUXid^(#!T}P;VH&hV$Xbhk+DTI|xRr7G zIXajC@>c-{;4E6DT4plt;6`prK@03=dyc^j7~u^D;SK!ZYiJ=1%pewG!3?^97WyCz zupkkbfeg$b2l!wIzTgYq@(Z?LnD{^sAfbqI!UZ)&Y6{^J3SmGYK^afM4F7iM7}Nk0 zJ|PwoK^du`ateVR)u4d%AQ2q$b1tEr+-s0;0-ePncYXmf!zYdgD5owF6BOnbK7oB= z0hHbAMU94?r~!P0VHzZg0>4j=BC!`DF%|?OvqHHLnE@L#2_gOG8(dV$7=})N;jGMv zP7U*v%!ptTs21*pc3x*Sm+M}1#{RCfjZT3V*rAYfI=iD|0RDle3E&?RAOUnkmWLXc z{NX2qvTkh2A9!I2_TUQCpbKmP4Zvy#us|!rUcCUp zpb@Cy5>7!G^Z@@JI|KJ&8Yt=)1j%SV!6j=!fKH(s#NiYsRcEZ{6P{sUw2gYGff*n{ z81QnFeu03#=g0+UV=$>2(6B4<6Jv^jbs|%9;0G{4YC~H(bujUd;^${dE0VfTPs_*_ z#9_He3JxnNc7#D9c>%Qit4XO&yZzib@E3po;Q++jPGWT}%9|%K2q-ydy?G%C>R<}g zU<-O74nS)QlHd%?0MoZ%3-}-wmcYM{L9BP+6v*HTk|3~~z!qj;2d3dH?ST{xr5*M_ zB&h*#E+G^`fv(A*7zSag0b36WNe?2^`s!d+;~)`Qrw>j668~03Q3Ux!_JNr1_BEihRs5j&Lg$K$?E!@Ctdm4-IM=be&*mr#8*V9K7AM z2q?-oi53Wkr*fnl)W{kzi0EA#|MmW)3#UH9FD6z_xbf^jjfeh-v4EUiZPoWE#;0@G33ZS43)PSz4AQqb7 z3zDD_ng9!+;I4HZ z3W!vq{U-Jy;kjX8{ArV%tg_R^7XC?jD)at&d|f=6e*d0<9lG2cG$~Hw$Yj=2XVRfw zI)M?p^XCJZW7!)d9yeCqpju|Ybr7JLwW{Vc~ zNTJ?tT^xDiS)VpK-s1~kLiiWa@2(#5LA=Nd9vZd}bw+2Bb*C_)YjPc<>^ZUM@+HwQ z6w;v`F5wfzp`Dn47DN_kw(G+Rh2H=Rk}Z)-7zW3d?pJ6ntyI&SF8uW!pX4P18S!ktZzKG?M|WW&V| zawdHI;6B>Bp<2I=J-hbp+`D`K4&J)dssE}DXp+??SFd0ttA8z5?LE$+Ils2&I^x{k z!sYtcPv3opVH3_t?WAMQIOZ(KV1wqIg#X}!3ktL#f)q-a;DR6}h)rhrO~#*q`6)LK zVgjD{VQ~AQD57uh;Rhp&bGb&Nj40kzU3fa~$YYN_{s?4{LLMXl0YwT>6#`eKhg?@* zg_V7|$dl!@DnB3fDHl`V#7 zC!Klj8Dok={t0NHf(}Y(q1GLlWC8@B*Uo$FK{=(2G=kVCpLWipQl=`=7n(|>{iEro znPRFbXA5C!YN?j4%4(~wvTA6ovd&6tt+r;DfB*s*gg^oh5P(&qO+M;glPpeJWu33C z3Rtu68P@D+F-9xxvers@ZMJjX%KvS*-hK-%p}LOS>#ta)bI-6(7E9@g$Wo~-v(Xw0 zZL}v+Yp;wZ#(S-@{OTEQzyc3UaKT88D*yrto10a-lMx%Gq&HEitiRb}noc_!Z_IJW z9)HZSN*hCHpi25#Y-yb+OMK2?8hn1?l;+*iZ zm`^*@kf}}6X|~yP)Y^0jwbNj>Nwu2Rm{T;xx4rkQyX}fS<5vDAyWfcJrr0%%U(*aX zt$xN$cdZI5yubqj?Cj{eIdK}`SiQBYUg1I`2cp@E?_A2Mmd+f5${uBZ@8}z^eIy3pO-#Wd;PhDx@ zs9f8jL2GnmM^}0xmCu*q8)wjTzejhI zTkGHS7W}lm1wOmA87EeW^V+l<`}AjT8uzhJH2$NV0S|~kf-T@63(y_k)YTrH@Pi!4 zK*l+2@sE2%CLdaP2V&k~7}W4%8K;0vWH4nI5DExW-Lr>EF!LJc?ISYd=!GrBk&k8A zLL2SqMLVoPjb%_{9M1>`FMiRDb_jzP?07~jXn~Dm#G)ACpan0!L6{Pm?;ziBoH?H1 zxcJSc9n%=%Y)S-@aQ{5R9L_S1L|y`%b`VH1`AA1ds4u5PV>U9D-mA zNFehPd{84Ym05^E{PGv+Xha=~L5)E`q7mF|gf_Y-7HeRJAG}CJB2F=lLL{OO-GBoo zVi5{R$l(};D25&&u?$)yq7by`#vbb ziH%d(A{+!lDo*2a%DBpPt~_esKUnzy1O%&Z5yZ(n{LugC^dKi3R;Zg7}V8< zS&Ko7Uwi|jH4Mcsf@_Onh=Upy;e{>Q5sphRBOT08sxWpMQ*%(`6rs53CyG&xUxcC- zyuidU(lLz!g_RdNv;{B1DvWtBgBLdBMJ&`CiZ7l58_x*E6@_8ce3+CPK2?T@Pbx~f zDtXCFE{X#dcn}9T00Bkdhp>7_1~%s89sYoZU%f>4JbSfdv~2tybO;yrVylQjOo zME@ar!3%#1qYu0{m{+)v0M4#jxGCA9GgM*M;o{#d3z8X*T;JmU?vNW?Grv5@jL z(!606(@uZ!iBn|y8QQ3DES3?AO9-PDz0hwjaLSBcgu@ohcm{w^QPoq#LYbkc#y5n~ zjbnu36ce7QIgVk>^@>#()s6*_rxDgw^P(0q{pmA=p^aE*d)2k@DS@BSi;~V88`=m3 zHOyfPYXI56wwMMpxps_z(m*grNyvXv7o-@rfpcq6c^uh7>Mw1~ia?31LV?7WQD;SU`afNvOjVT>m}} ze_(+Hm>6%QCtba8KmroBctHH|Bv6pT1YE%AmYCmT`=6JaMFiCn>pu`)sv} zwBjVBwoiNUJdP`W`5Sk@KRiwW3Q!r>d=>dkxa^H#Xg?RaL@YMopocdcLk(oe0UwId zhBpW!5wSQ%AE?oWOZ4Fxw*CYr&@TsJK*IEmcm^M^Q3qy#3Cyqu;V=(pu>S+ykQY~H zBKu$w?T|FuFb*FP8sSh$_F#eI@D1s(4;gVA6Zj8e@($*ZM4XZjcy}2hg$?a+49w6D z*7gkTfP3kH4Z@%i%fJldFbyR2Z4>rM<4_DP_zbzXUydUV+Q1ssqifwz3>VQ-I{04i zpgznX4AqbhEr?PG!FZ43|}w^{(u^~faq7$=BD z9|BjVQ6k;*97(7@pHdU1@))`SDyOm=^idn+16TQzKbMg|`jczVkw`XC5WaX9T2UXy zF^$i$5Sb)}pi(_Aw2P#qhv$fnbmM%^7kz(7eGp`QgcvRQARlZo8u`EsQ}hn?5I@lP z7|V!0_;VcYQ$6Fr3*x{JuW=XD5D`2RD&ly3&2bQ;k}8nKDfZA2fsqq!WE+D+Km+tC zfU_f`13#a_k-w8j5urF9nT{>#k}^X9|Im(rSba(M8ftMkF_co3;UQ`xC#W$QL1`J0 zQ5UR8Mr&dw384{5$&^URlws18NvS3-!ALXoEQFIRLCGI))Bhxhqc~&Xl|v&qL76&+ zb2MbxHs%;HYWb3F>6U*IlN7)Jav6ONPz3&fF7RkSl5!#evL_aUHob8?y)l9gVwi_1 z5S4TxhG`HW;h2Uw4iG3bdXhFR6E-(8I75>>ev+0y88pn(FD_CxZ%LY^2_$hDmlj|F zc8Qk`6H8gPm;Yidlmd;iNheupn{SgRHS(8ZW0|(OnJr?P!%3Xp!2kwvod3W8t9h4! z=p?YYmcZF6fhnCVlbO|touHYWvss+o>7Cb+oX4q}6aa{lA&6OqarCmCySY5;SvC~o zp7AN4tMZ-oX`e}90soMnswn{$Kmjt46>NcJkTNmz+5a+L<1+t3FTU9?2I`>nd7lv~ zp+J$J24MmHDFGDV1oyCy^$>Eg`Jl%FpYpk&2^yl5d7=6u?i zr7>5FmDl;Fn(3!qgQE``s7NuW zvC^r9Q>dXTsz7n5F{%Mt%Ax1_uJPA0_%0EKU8GRY8*NUy#s;$>*8_qF0Bsr}- z@vX!Yt~vp()0&JuA(1{olIJ?C?>d~fnyVTB0;uY!uh|ZDF&+ELul>re_yVv2E3gAg zumT$%1&go=tFQ~punp_54-2soE3p$xu@!5v7mKkOtFar)u^sEN1#1wA3IhM20jIj9 zdhsykumzXEVWHr%FAK9VE3-38vo&k8H;c15tFt@HvpwsxKMS-$E3`vPv_)&QM~k#c ztF%kYv`y=@PYbn5`w#LOqa+wr}gUaSOL|E4Ot^w|8r|d5gDutG9j2w}0!mfeW~UE4YPAxQA=FiHo?4tGI?6 zvbjpK^}40XxnZD%et%Ux~&Vl zuPeK;OS`jcyS0nEx2wCk%e%YlyS)p%zbm}KOT5Etyv2*W$Gf{Wfu&Y^va1Rk{wlrG zOTE==z1NGq*{i+V%e~#}z26JI;VZu5OTOi6zUPa+>8rl$%f9XFzV8da)oY=+ssUCD zp!X^^Y|4@=d6rt~BDy)5?;@6*$^Vk?sht($sy@lTY8t>hfuNT<6z0g8X9_kByuV#3 zr+A{kLJF@PynG_7t4_cVS)0FI38XF~nj(ssZll5_nm9UYCke{IFRa4wqMmE{zndzW zDifw_la*;osX+R`7yPLnY{axvp;@}21p&Pm%%DH|mkOGrM2ejy8l@|oq$bKX2l~X= zBE-OX#9>@Y$qB*|@Vt~#8aTotyTLpj5})>=nQLq*ZhRkbyh3j58g^XAbo?rM3?IXh zAAXD)fc(cXEINEF8z>^kiEORMLKN%DlYaxQkW3oxYOa%v$&#$eOhL(=oXLJ=$xA`W zJ2A>mQOcWapQ;H0&dZ@|0skVHVm~TW#~d^^uzVsWgCYx|$cU`VeW}Y;V#_De4r`3a zi;OD1+>?XM$BWD=$Gk$lyvNHd$f$zIGUCj249$gXtY1&ir%AK{3wk+^*%!Kl1Dx^lTmP%&zU66!@&J`rMXrsh`K%FvbGQTh^DftjHd8 z%d)&e#JtP7tQAvy9}K<6a*WIu4W%!#%hIeY*9;%o>?)?R(Us!Sr~%TbF~`%K&hZ?| z`-~})%+l0quIucr;cU~Q{L<)5)0NCK_w3KmD#lM?0ZObE^peK>vK|TQ~koVI^^FkT632 z-~H|1{|(>)F8|;IPT&P@;Ol)5F{#SCO5V)z5K#%?5ia2qPT>`9;TMkK8Lr_Q&fy*I z;U5m-Aui%0PU0nQ;wO&cDX!ux&f+bO;W7#10sWu;Fg$2{jG=<#Ij-Y7&f`7q<3A4M zK`!J&PUJ;y*&677zO93< zt%lC6gs$j*j_8Z-==JgFkuK?zPU)3y>6eb_nXc)Z&gq@*>7Nejp?>N5c@RS_qi38S zCgWFEcK>}nT^X)^jF;?Jo`Tl1uGZFg>*YGn@x0UBy4LXX&E)(yv`)_8+Uw7%>+?M9 zH$8Hg%dywjv2k>H*q;_lAWZtgK%?B?(lxk$3D~UjugRe9b4Y!8;UN_`^&%H?B*))ea3`g_}eed^w5BPyE_=8XQg>U$WkNAnN_>0f@jqmu65BZTV`IArim2df%-}knl z3{{^vv2#gkNdZ;`?=5i zqffF1K?47<0we$eB76_|(8O(kOohPw&F}or5Bgb5WcWZ2N*Lx>S2{v$zg0|^oQW|Lob@H?B*uXDL;#WZBZ?OPDcb z&ZJq>=1rVAb?)TZ)8|j1L4^)|#_ZX#LVcF)n-}umK5d~wp(I+>>Q$^+wQjBHl;Xb? zD?m8$_wFA^k@on7BlC~nKDcq^&ZS$|?p?fj_3q`{*Y97zfdvmHT-fko#EBK}<7bZ6 zr)BfZhJ-2=+gpB_HE-tJ+4E=6p+%1-UE1_%)TvdkX5D(V*A-yJy19369@>%n*qX~X z&-ZWO!G#YeUflR`UzsXOd zhO#F4-Fx`)<-Jo9(^Yp}YlrX(hZa_#^qt#k&6Hhy^VN4>e*5)T+HaW&X;P}laJwJ3PIugW?>%?kcNdO8vyke z!221HfC5}#{SH_+|0VEm2z=fICrH5vN|1s7lbq0MWVsv#a31D3Up`7wJ$@kU9p-S0 z^~})@=Si;}FqGbVI>N$yfNvh?YsXVmIIiV~=$7u!rCSVms#HJn+4P zAM=o*6koUx^zkEA6qHT|E4V=iHn2Kgq|pV%NF6egv5a7B&eG;}GiODOMlKr1Cv0(w zZ!BXFyf}q0!cmA*@S`1&2*o`3v5Y|SgBOrU2YI4$ibkB`6xc|FE%-qVJJLd6qG|*t z5Ecqdyn_~rD8?j@(T8IAV;YIzMLwQE3toIe8~OOeCGI$mP$c3Tyr>1ih6lO&S#W^E z6EY?!kf!YIZs%!!F&q;Q_?$cI6N zk-nxJgAum)2Q@-ri)nn~6!m<@DIkH3ci18n%+SU$;Q5Ykd?FN}!007nF%4cUBYnWD zW;VIGO>O=TcwEe>HK)VVo<_5oZH(CRuJ3B5rjDS;|*l!#U~(XpI5&Os-(mYGM8PW8!F7sx} zh!(=EJ@FZDP=gw}@QFQ`;SE@rXd*&!ivKUP;TMenBq+?;hBHtV6M8rUB--$XVidv* zmncTb+R)lAghG^R7{oV@@rE|gVjLkE#~zw6h+phM4Uibb83sYsP;}u7vW~OV zsMHK<;6)=^`vpGqVG4DqMJ#wBj?o4xSkS^6EOj3})a1 z8MXk2O_L!BgGfm@z`SK#hh%0zFlzHI^u%tcAqZ8VMlnKghD79J8m9;X6l^hr!~TM- zP4I^>Ad!S5@L?RZ{=e6kT8f8q{EQGw9(Hn5cu*&yWNxxD*muAOkN*$Z)hL z*eL`yu&*s-$Y0Qc4;*lL2nKNqTRh_za$vzPa-iW)6yppfSOzbO0g4hx!5;p=1d9Ff z4;H_p!TvagCG8Q8STuqInD{~t##(|)Fya`(5XKe)%Yr&|BLsEu#~^O-j5x4>5gY(T zQ#rtgvZP)2yGNA6#|2J_Tga7lAOj>SzlSqyAqaZl#TLw93rxsC4pcYU=|{jmeZ>^S4C!g(QHb8PF)S zf`niAf@fd?HPD7Z_=i)Nfkcobet?56$OnFagc&#mRZ0Ri@P{~%f@6Rr&gzClV21UY ztbO=|92g}?;G)q`Vx^gU6ddFbqR7@jZxJkKnTq zY)~~uNQaa{G&rb&{=$O6N`z1N1u`ImU$~<}AcH!l2crHw^1v8L?7~w7K zl7lZ8gkBhgHuwbIKrJ!Ml?r5*dWoZZX^tmCq(uscV(0@}C`M{Hg>X2AZZM}~l)o4J z1zzw6Y={Nl;DtTf2O<1~qqC#YNfsvr0oPr4jbAyg!V=o1DLqlLW7hizV(&eI5CmF&pKS9m?s?&v8)T6fhw82c@By;WUc_lcT8#qx39K2ZA8b>d-XeqEe9{0E$oX zOwlz;PoQei2SQN~@5Pcy_%8m&hBZm{3MJf`2#y3tf`4Xr3;`Q5cO; zDh;jgbWt#+&+dd#EqhNE^-eq0Q=F>PKK0TdrBXK)R5|@qJ{3|rDw)YKEz79RL;poj zX96ZJoz(WER4gsj8kL#?(x2~CPvbcrO})|ZRHH#%(PaXH2?c^90D_rWmN;P!q^i^i zomE<`)$1VAMzvL4-44;x7e)zFWnmUMQPbxD8(;DY;Mkn z!5v(}EnLGrT*OUW#a&#+ZCuBFT*!@F$(>xvtz65!T+AihxN5utog2 zTHFD?+MN-woFV6ZUg(Wp>78EctzPTBUhK_Y?cHAP?OyNwUhoay>i>leHTi)g!P_*I z8t2i#TWnwVeP0v#jfuNjt0}`q-H{7|U;UL5uyBg7_yG{04NFN21lwN&K41jK5HbYa z9{JD&e&7{pjuil40UlNYwiO7@U=0?-1+I*LI71#;(+wVB5OIo%$Oy6EhyivI_9bB# zeqmi%U{f)e&~4!5g<%|?5E1|ZvG@l7{s9Z14SIQySlv}4K4K*HS5%3Xso5Vtx#1kv zlYamKAD&_!-U!(xVmU%$F7D#PRN`CHjtr^NB=ur5whjQs;&*@}7N$zZ)RtqV)$0jk z?x5r9;MX(eM=+ii3?XB#=~a=z7dws)1Km&Rh+}IRD5$m?7&ZY>l^8s=$=*Q7DR)EsNsp{`T-A=38Kx>WBLWiU*bh~yQf6E|*-cQ^)H3kPN}3+!|q=@e$lSs{M-25PuwaT$kYD28$1tg?AcUydE2 z5tr5U2&X`)X()<(xF>bq<<}XP*|DK+&<2h^8;Cxe@&9=TYlum0_=Rxrhj8EphPs+% zmQIvm%ytllZpi77u!dqt5665Rr)Y;>*ywk7hIF`{y*!=Knd8`@Y4IVLw$z4hplP9o zYGHFPYe)y|WS!s35$6f5 z0>u$3N{LPunzX*_WgeJW9vE{d3S~5xuJ#Si8Xvu!9&r(mcc2E5`_=cDs z2W?;>z)hl<4u^R#slI-O*~ZF{_(7ET2J`@2bHD~(=!SN1Z?hN&tPF>(vA?lhHbmYBmy76 zH42wIg=g@GZa}DX&`N9w2e?iLvCan}XG*}u2K0e%!FF#d>Z6k$hdhdfAIC~&CZz9r$ zc1WSo+H0~&hhB(_OTJZbS5JvhCZcC3hI&HiZ`k$te(|@2Z>~%UJooh#nm?n^2KQcZP{vAZUHMDM5n@AhRt;K?ICsr$4qSy?P)0Vdw0x27ws1B+ZA%{ zl%NK{eai#K%A@-RJm=fM<;rkKa#w#%YadAzKZa>=b-(RO1>ben^lIy%fPYAVk^ct^ zhyn{h0^+3PEykR1s3miNNM<;OU;kK!aZ&bO(1v1QNo=5nV~7Q4?1glo$z?dkpAUzN znno1YJ8S5OP%y-KqK1-!$X}qyofn45JO=F|D4O4=OOUDg;e}t=Hun03i|PfvOTQ{t zF=#9$l1jgMLV6X`BvYq_XCQBu42NETNO2K+Q@5^nKLtd(42!e{QeOsPAoY?kiknLb zDHn!3`~_`zr(!_yD#JWztcIe9g+^QkTKERT7s_Iwg_C{;J~B6ENIzcqd2LwslpuXt z7D}~e$<`lzmPF`JD~ey}1zHFPmxTOfVEm>ZhllieTM!0nIEG%}1=CM_&o>Iw=LKu9 zg`NL}(VM4ZSO&dgN^3~=y#Ir6X6OZ)hwxu0hGXDLUO0XVud-MW2C<(8#J7clHX2ZG z4vfZxSg?kSW(LEP41kz+tQW0i#eV%N_RLlT_+N!ne8M9-;e(@4k zj90H`%Z`~FckI|RVZDwe^jK`%yno}Ck^FV4*TQ;?;4DDKvzlJtV_ir`p z)~;Xwvk*JB1qWR2-T$k(+Md0A;mDZV2m9YVe$RTHVtDLSI9sRq?K=gEXQ*Pan0=xa zsu!0rXlKJVys%3YWogNaM0fOO1#;e>LET_b_=Oep7t!iz52oI=Z0*p+9?GVkzX z%UdBXR3INihW)8C863 z3q{8a7pttZ(psyntK~CJEDh$PV6XdV6N-4f!uHNL*zf|0NWU;sOhM+5T1;5jJZ14Qj!i=inW0t{l5@XM!wfI9jGEkNqjuF*#sq>QF*Vw}quZ^l zQ9!{zDgRXcKoR`Ba}R60`39VD!|h{BH_s#z5+?H;>`yws=)3DQc6|~KCews!)g@%w zg3X9^Gm{)9lbOShcGg&BAtcPS!{JQ7V8Tm2`;5~_FVkRR%QM)}a!NWh{gck(|FHR{ zHO0W!;V+PER3tP06tlR&5`TitpB|fI3!n;(m@GB_@FUD6y(DtXH%8V{*f06ycdmXC zuguSz;j{zjHv|E-97MyLSLDIH)B-3qB@-y&DaR}WpEdeTW7RzGK)fPWu^1Ezwzi~X z%_WOMKOdPF-f2{jncqepbqZ{}BY|K#$Xb3uFR9q#MmdpDSUyz^FzwDR%z#8J-jTbC z?EmEyr>I7XIt4LnB+wdV5}H-;(g4yxEx#3dZDbkkAlB4sXu})2CRe*+Mz8Ymt6&Wa zHuD&VL)M3;SQLX9%g9tqL~^iZF=QFN*xxkRRHo$=Xe0>B5KgkPM9BTZ9PfCBinhfp zXGNtQ|7eF&Y@sh*WCbQg(N9`NWeZ&_ih(Q9T~;g-G_-W*V75@vXuKtnmdT7Okm=kr z((w&4iLgNJ3W-!YaugZCg&Kc6%4h~jlB0BrCj%>&YT(nq?&x&w$U|(8&+X<|df}x9GB{A4xhKh_dLJXm& z7~g2p|MCGLo}5c_7{Uf7miUZ+~$XBK+7|9k|_ce!=UfLR?F(7B7;zpOA-}YEtHfM!&GA$gOrFh&XN$i zCI=xAS&B&HZOCIz33E9_LLAMUd1Y%6UIY$ z;=j`^N*SiKBP|rNmB*}vBvM%m1kdMD;1Ufjz@+e5BBDgQG`Jm7yVWu&kOF36O>12H zM?H2!O|cEfJ&oMQ%FH1ZZT_P^&j^RQo-vjkGsDK~;fP?uL8NpfMJny+R5<@uvmTX5 z#T-tdMmsq2kd@7&9p5;TKWIx0b96(g)2K|@IC+95Zw#-DFmWg`MK`MmV}5mNELd-4;RMJGwy)acDzOXpz~q#$jVWe`6z` zwn#YOmFc!fWr?N&%jN|04a$5&Fw_oAI>Hec+ifl!gZ_s({;c$Gpi7he9^#F`JTY_B z6VTXrw>6L+m~m8NBga~Xnq3_mYL%ya z0wZ0M1X}*`p5MIa-y!0BT;v(==v6XnZF}NiKAE7ed^;lDd(8j8k2tk1J@Gl;df(R` zSF1_A@K@6g5kE-ux=A2$ejhc;e}4JLN4@BW-+A6Ahp?!907 z>3?4Qtf{>4=`Vfr2fx;-C%sdz@A~Yc9`=FX`=}AI5FhAuUIH>7y)ocr*;^0&&}W5K zy@8(otx@l3gG8`b=RKZ1px^)P1L%<+@o`^0t`kKq369{GWDP9ncn{mEt4}jli~@1KV+VZg^e}E z3UAnhYxLnC4hJCON*{hrYY^h&;R+4$hKnKMBIZLlOoJ3EUnBNm_5tD{;@)dy-{kp_ zt&CV^(a;3W$|q{#aEPK3lA^4fBCV`q0}@Lo)=DZ)qAE6EEn?OK;u{cw77mphHK@ik z@gX4+i#_B6ALdYHT_Pg>S@Lf(kLzdlSPSWH+qU1~pWl`Qx5;oxO zp`S-uRsy(&;nm?U;$h_NVNqJ8PF`hJYUNgPUI;bpBjrBkkk;UxeS*kMZU<4W4)VIpQ?8s%OxW@9?$ zV?t)FoMi;+8@;vVOunUJYNkVOre;RwXU0lj{^bKCKpo~I?5{$_J(Woy1>a7yQN zQYUTN=18jL)aa&4I-_%TCQo{&F;?ee5@!P>Km-tgX?o36rY3WSr%}G=Vvgs0(r0~w zB`%5{F00Ah#a5lgIET}Z;V>MCUkFF+oVkMA%D3M}mmQLq9bM1SX=P_K=}As-He8q#mlITI!`@YNl%HrgCbhdg`ZwYN(3p zsFG@_n(C>ds;BOQIqXnnwc06sf;H?zs$Qz2TB@zys-$w(qav!V7HYlqYNd86XEkH3 zDk`KpDz0LxveIg^I%~7WX`CWyaTdUxCdhiC<~Mj@I+#PZdh54>Yq*N*xRPtRn(Miu zYr3lIy0UA#y6d~bYrM+qywYpE+N-@5U8~lc{@4_^-s`^tY`_Zaz!Gf1!fUi1X_79f z64+s$_J%o-!N-VDhfwVERP6u7T5QH*?8a(r$8zk)dThvo?8u62$&&2JnrzCV?8>Ta z%d+gtx@^qC?99q+&C)E$!s=#;Rytfl8zjQS+HA-EL(twV(Hd>hBJI&CZPGHW$_44()3Pm^-jY- zSnu{GZ})od_kwTuif`hJ#Y zZ~yx5{{nCT3-ACFZ~+_e0mH8-)&%`dPW?8p{yy;gW-3QM>$1A(c$O~!kgfu#?`e)H zh+1g~i|`1Oa0#363Ckr=cIB*i=v}5H3d3*=%dkCU@cD9Z09fk__h%up=?weu4+C)! z3vq<1FmRSBjP5WJ5AhN+@n+Vr0^G2*I&7O}Vh?ZT=Q$@9H)rKF@jz;EFn)0tyJi^k z1{sU-6&Ix$_oV*|f8&*sX_=mJ9LsSq*6=?>@%jqnO=_ZUcySS{DIaoi9}6Yu4YD8i zq#+0LKN7MaGqNHha?}(uTqd$3M{*;BF(OZL8AGxq12QI8vSwy-8GAA(i?Sc9aVQ`1 zCttEEb0sRf@+ebs9~W^ox`r87u_H_59y1_P=4C4K^8AHqFAI?`%OW)bb1;u0GFS0N z{<5q*@g1k`Gro@tH#4D;Vn7K|KF*&uqv9U>GB=xFHm73p39~ora=&2S_^gg+VE5x^#@ld8?$v?+x26r z^Vt%NmI^JJ~ib$tRgUN`1o@AYAmwGIb1Vjp&2$2Ao*=RtDhVlOlfsWWfx#(q+E zQ?sOG?{a2)<1}|@IF99J%bRKIGeL(mmUi@CD>e&L;(%K9X`?npqNE$!Vm`}cYdH2; zgE9X#OASCaGxiPhOaGxIuCq$g-(4bff?R1O7IHQhH)xCUbkp-7?`B6QbUg>;G?U{Y z!{~CmaYS2pK&$2#A2UFkcSY}TMpN|Tp?7)@bSbKLYWuW&S9E>bcXBthcy}^)gQI)b zw}0bzfp@cbI&>#@-+UW*Dl_*l6Jl-e_c8akMd!Dz95N|7IB&bP9mDlK;)_39b)_PMxQ3)=n-m97HglTGOq?BqVC2`+W7MIp^dNct>U<(_IQqaAh61$rRoNY zFW;`x5SQ9&PhRSb`{|X!B8&%W2U=>7Ln@BPc#R|KjQ=VZ|ElKQWhxh{jB|00gSr2q zLU~F?>YB^AHU8;t^eTKGxs0!PuabG3E2^H`Y9{I`I`a9Sli8mFI*S)NlH)2jvbaq) z`Jvk+Oq%(R4`WRTW0ZqAi$ggqUV0}&cbS8CvO0Q(6QgM9IG&%mnxFZjf;W((<1F$j zEc&^nOL|OhIbAQd$kKJwVNxp53II(tFo_#wS#-O$E&t;JGWmuvxmF6kGr}DEW4j;9j7m`UoDpc zijR~Gx8Qre zyu@2P!mozI=exvX{KS7ew}gDglYGgW{K=zyzmL4XZ+yp#{J$@J%Da5RL;T7Yyv@se zz}NiA2m7%5wUxhv8eD>~d_vJ1{m~ z=8L}Mi+<>j{^_HB>Z|_hL%!)h{%Wv3>1+N~Ek5UKe&@UX>*HMR+y4LHvqtah{^0k# zyyM|G07sO9FpyfYKXx&jF8>@i|9>iVUMD~FTYnSpec#75<&eQRoZ@pnznKCkaISE8 zilafU=^2Or3}dE%1~v8TwD?2l`VTSvi>N@tyU%aG@xQ2Q0>nRi_5}Vjc+en0f(aKE zM40fP!hr%MHl#RkV#b9SIbw`R@u9+x8!KAWc=4h~jv*1MWLPocN|7o%N<;~=pht!v zC#JLsQDe`JK5Nz_3e={|oJxtpd`VJfP^D2b@;qtrVOFhMxpwvX73|ZVF?DWrIrC^q zs7EyTy;z5y192hy>&5T#|i>SrfiwwzHpj3dxcvZKG@#z zThsqMR>H540>6^YwBoLN4>bf691c6>a5AvJ3I+5kyv80Y&!2ZH zyKKG93>;d=kokblgy~9xuyG#3;4glFKf={BpYp;{yMa%rfnplDsNEOb^TU%zP8h zIOUvExiJZ&6VE)QTuejA)b!CFAhXo-pnM2D6j2pzJTyi-6Mb|`G z$x72qHQn?dP(jPb(5^&E!5CW^Xb$eQg=N_ zQ&K_gRoHz>CG{U+nQfL+XiqJ)S!MHSk6C9qGu9wqhm{rFaNlgTNpa1cQBw1671YhF z@=0eJZNhmcpK-duCY*iR!6uz~uo)+xZ?x&=9n7@Bcb;^f>1I=NrupU_Ype+;oP*2> z=Ur>G*?63ArU7_geE)fe8gu^nrecHa#pYs(t)c&BoPWjvIGmTM`PiCi-m&+ca1KuA z+@OVql3WvqKDt0!Bb#j9T;1I#6h?|U<(YIKp~aR&zWGLuQ}{V$8Eg8mB@}JOxjL3Y zn2)x@iA{A31^ur5Mc<2pPIy3rw5>5^AWzDH4&7 zJtW~9v?xRvq;SAQ1mPInXv8?OaE4f1A|DnK;Rs1sLKB`4g(+0w3K8QM7QPUMF_fVS zaYrTIU5PzKd51qP!2z%F;u~t1!8h6wge>qw4M7OQC6+-wGYsMzZwP`l-jReV_#+5i z@W-{3=npdNpdFZCfi3<4i4yR^9K~n@27hsk5HKPZF$jehchC(?1R)8S2*o^h_=XvD z?HI)%Ll34A3uX+01Bt*!FU-&bVOV1jEI39wLh%nW%wQ0K{7$u zfgbO`lpvO|_{J%^aDzhlV;(b9=t3FVP=`L0giM0yL@8QP z6V|X+sH~JKJF>%Al%RpJu*M#C@C=IV1%(j~@%f_%TQEod zcCgG#j^h$bh{Y!oSAs_H;|w#vhChB0f`2T71^*yl69#GxMwFlr2o1+2Y>|W|7&8nr zXvZ@k!HhO=;1~Y5!VJ2>k68b(02JY{1zBz3gDdRAqIuQpUisSB*o4Hdffa0CO*yIF zwdr>OJA)jkaSCB9!wjeR1sQ&^xOw!V3)<)fBtCJ4SR8{4nE1sRR40Wq6k`y=kU|^$ zAqOcGBXa??#xItzhj#1%3di6_F_ut>e5j!g-PnU4@?pGokYNxA9mm-CV1{hgfeFl5 z#s*K3ghBA54o%QTz0A;uWfUVEh4_UW+R%;=4i>%XRquNFV;uIr7rqw4=+aPW5Z}RN z9>+MvF^*9(Tl7L0wwOmaijmD<2&@>8!-hR<5sR0i?107K#ngCV4qDJ6!Os{65W8`S zQ*?uY%=m{L1&j?t@}j~T_V|S`>|suRgz6W(;KeWg(T-n0Vj1D!1v@}&i*zufY&AZH zA&DrA0JAv0NmlZb{mK$1KN-q!(UAf&x+eSPsxIv?$2z&(4laMW%UqsEJG}g5GQZ=@ zWnL#AxttC(tC`JwJo7reoX}6b8O&Z*Gn&ENXEG-=%7GU2phY;L>;#9DiGIkG8(>(3 zu*+1<+SRkR@-25Qi(2lIw527T>4#X_P@Lupr4?OjQ=b~u@L{y04+7~_zZ%xDmUXEE z0stZT1O*2G{{Soi0002c0+j&(2>$^82^qlX0KtNP2v(YO8FQcjfj9ppSb1P4N|gVA>J(Y?p97T= zWQx4tfvM7e7@kU$-+{@76+rNMV3m#0cV1NPz6!rzlxUu8MkRwZWoRZ{F0(XDP)rmkr(W#%6wlwM4 z^T4|%^Xk+rbmvafDUY^osuBZNfwu|2#eso$)`2x%q$E3)tO^w?kSkBFmbgF?#@VVh z30=BwvlJd=ckp1r1Az|^)c>uU(q~@P*VC(CpWa{qhl&-*pHIKO{rmXy>)+46zyJRL z1}NZw1pYUW0+Cn|0R9AQ~!R69FFU4h{KyhKHA%$|qB%WPLxh4>5Frk*AY$hco zkOl)?z~WL(<(85MQL*Lz^nJDKfL{j~ zgb{f4It^H1PoB=r6grak^lk_z^SL4hRW$bo{49w zcrVqYYJ{hXC+e%7ZvU$3th9Fes(2W_gyKI8Fd&eM|7dVQi!ly6tVmqdSXGV6D(e=G z9zc7QZCAZu?LS_D6;_tSaeJ1x+$xC{3FKB+?po!7nXZ->q}A>}!@A3^K<|>kq6Qj( zaIXdbSimp8|4?A2QQR5zfCCk}8fvVz(weEHmrgnTttntPickJ=UAbTv5 zdkqEk&j1{Rpz_Krx9sxEFvl$O%rw_*^UXNttnYwrbYA1i_g9*7m~Keu5J z)!lbPHN-zH@c%tT3x5ON!r+AeZTJv~4}k&V{~*4&;*2LQ`Q(WMF$4}kWUl$=UGHAG2+>#)cE!|R`~@PqBQ*Pc5FKkzd!`|!sv z|NQjV|GxP5?3CIt6H1L1~6kj^t0YLmEaDoFg zp#JEwj}CT_9v}>12*>xo|6OAo=|EvRM99JxHc)^7{GSSAIKT?#FNWhlAwMekzk8tY z9@qFEJpbTvjUgJ*h~zk85|;>%Bpz{y>3E_Pqew+~L{W-Z%pw+xSj2I35gy~PVi3ic zjvxxLj8_yQ1^@RBcHBcB@>nB0{MW+;-s6BJoS+T!_l^XP&w_Rgq#y@L$U++Okb}(L z01O}>l)d90`O61CBuU9hTC$Ruyrd>G$;nN6vXh|vq$op4%2ArKl&CzVDpSeIRr2GN zuhd^G`3FmS_yWM@5L zY5z}lesh~50jM_ZS=^rR?FsY+K`QbjVddmISgJR(Zdn%eZHIL)a}cgoYA`t+wj4XRLwO4Onn z^``whs#1NLzojxYkbN}YJ?4SPs#-OH-~8uQx60K)+Cv}p2rF3YF%PQVL#Gh6M_AX& z)_QdHt#FO2Tn*{c11KN>G3CcRY{b{T`t`4X4Xj}Qy3>^)u#a<1tYR0-Sp6MUAU$2^ zU?)r2!4zbXc177Z^jg`@diJxR4XtP)i&Lf0w5;|h>r9=>+Sa=EwN4$aY-h{Y%l{g{ zu6W(-UTMqQ-um{pzzwc&hfCbz0@t><&FgNB%iQKV_qouGu5_nMU8x`!rsLSha<4Ow zcWk%1;0>>M$4lPwnwPTI)vR_`(%s#*x4VyQ?>|)gUVr!_ovQV&d<7z3`s&xa{M|2o z={w)=p7+2APOyR(%;3PJH>T?~$zJX2kFxT^zWcE6J1)G>3;QF(!XSeh_JK|edzioW z-6e-pY+rLu_`dVl$BI8JV^}u$#yHNgj(05B?e20QWnGC$>x$h7zw;l(IK?vZ;g4{{ z!WQiaMJ)XBj8HHmAJ2HkF^+MHXZYg`0N4RDp0NyO2;&svu*NBlkq;T4IsY8yAoDYR zL5qJpqsub>hb>O=4S!&R8q0VFFOCroZCC>v&#=a7Y0Be9JNnU(c64{GQ4C=m;~CSK z2APZTjB!Xf9M2fDHAYR1XB6WY*dVfcw>uAhd?N`;Si%Gn!3!2FAqX+JK@j%9f-A5f z5oDM^48Bl-81P~X0l2{>lu&^lOaTHxKtl;Q@QHg=VFyqM!X<)GfmlOe318qq36k-Q z9R%SDB}hanSP+69a6sH4Fas}cpa#9#G}8Fax4!o+-Lit38O&IQFa} ztU(JY|KbRpNH9#T)9RJ`&1A?Fj0NlVD zEC9eM`~ZL?_#+DefI=!7FacmR0RV3pM9vE_05kmD42b|h34pPK0027xXi)jmS(?Qhk4G-F>|p1&+SktZwx?$t*sw;Hi$QlwTcaI6PP;aQ zVGCRQf)~2r1utsB3yT*9vqfHRM9ZFtHv}O7O=trEx)1~dq#_gn2tgvu;DMzlVbmSwV`xr+tz9Ecp#Nrg;Q1~|U!3%A;cpuX^1^+MJ!RUWP)a~d`zxvUi z=290!@DMM?G_*l~PlsI_S{BCN{Z4Sh3*^DsrFgBz47Uaar56ra;BkrI4}M?(9AFLh z^#)GC4dK9F?T|v_AP(V>Lu_ac7Z-p7VGkNd1_AI7W>9+9 z5Ckk>25RsLrw{@Epaz9-2Q9Y)<{)~05CBTx4`d*Ms{hA&u7?H^$N`C<2axc4aexT{ zFazPx1OKpjCHD*w5CXi=0|hV${xA;yKzb!mPOH^wzi!1D6m24NwQXPyr{n1O<=;b+CGVkOT$51jUd84bT8ha0)Hh1=`30kPrg~ zfCj+80y_`}5YPs|fR0$OSxpuKP+)HnH4px942|#(*l-G`Kn?uB3*4{|&rpQ_ux0*m zW~YF6!f1>txsoi&TtQYA1C}QMfOxAGhd>0R%T594qNSxF0bR94=VTKRRH<71r0sb8oCUo*9w z&AFVZMV;{FgS3zc#h_g{p^ zDsg`BNm`_JZ{=s6{Mn!WxgO}5p6dBtX4O>hNrgNGpNxi!;klnHVW0Myp7{Bn6k4Gc zY8C-npRn~Bsvutni7Q>p|nMXCEB7c`l4k4fd61WG+LuJdZRd+ zqdK~yJldl^`lCP^q(VBRL|UXqdZb9|K8my#D8po-`J_-9rBXVjR9dB0dZk#JrCPeB zT-v2x`lVnRreZp#WLlZg4Ar-B-&gbJvJI;e+QsEE3#ivQZEiTbFF3aO47sgydYmMW>3TB(_OshZlUocgJo z8mgWus-QZmrdq0~N~)@Qs;io+too|1I;n4}5DG8>wtB0$nyb3HtGwE)zWS@c8mz)P zti)QZ#(J#CnykvYtjyZ1&ibs-8m-bgt<+kr)_SejnytB7R|>Iu@Aj?W8m{6xuH;&- z=6bH^ny%`)uI$>b?)t9q8n5y?uk>24_Ij`Qny>o0ul(At{`#)~8?fPealjC8%W$v= zo3IMIungO<4*ReW8?h2Qu@qae7JIQ6o3R?Zu^ij69{aH%8?quhvLsuwCVR3do3bi< zutZje8s}kc8nZGxvou??HvfCGIGeLNyR$sovpzefEgMs1H(*3tv_^ZhNSm}uyR=N( zv`+i9P#d*UJGE3>wN`tzSevz4yR}@~wO;$RU>mk#JGM&uhTOTKXq&cbyS8lGwr=~j za2vOBJGXROw|0BCacj2U$(#{&oN_om$eCKzd7RK$ov-L!Vb@+q#kY$4nua@5uei97 zJGqlPk(6t>kc*tJ*q}nCTB&tbn;W=-i@BNWxkg1_nrpeenYpPux~r>HsO7q?i@8g+ zXr>#xj{BOoE4xJHxwjj;rt7-Fi?_sEyvBRHc&oQHrI{4z5BWo3_V7v+DM>9xnjaQX zANCKQSz#VVn?&`Q+W$pi7{z4ICu7%(gpzbrF!oWfBuRR8VPMx{vDsqj%VBLMzeVMw zmh?*guuJzvy_a;8(JO_P^uI>+nFUEI94zzBVI42jSP+F%Z+Fb~sU3#@4tWrqp8zz-Vv4yTX^n2-({ z=?}5^4cga5D$hMWkp_zkf@$c{V?-@ts-kjG`g4_KK9kU$N4c*fia!Z3DiLCARA4Yn{2#~=*Ua0!KA3-d5%)bI(Md<=gv4_xMb z*kI1Z(8Ps6&CJjX%)krcAZX0+3wIXByr6&I@C(K8NN&Ll!g&ne5Xjgk%ZU)l&+rM2 zzzYIrYSiGDLwO3=V9hW}p#aEPGwKg$00nQ51nr;=F^~lJ&_(@CE+x2^?SsJDmi4kObq<1Zt24I{g=X;0Kq$2>$>Fmk+{>CkwPfX8l;59tsJXb=kHkO-du3{VgXydVXiAPjAwWY16s*ieyr zfDLk>2F0)k&oBsl(0v&F)%<`7aR3Qj=G4N_4Sc`{L}?3WeG1dS2T7&}jqnD=5DHyD z3ynaFZ;%L~fOl`f3~fNy&)^5ta0-y{3w4kPa!{v*fDN{Qg3}PjQbE|4U3=&8;pInZ5^o(AR??2Yqk~m=N5ja0#Kn-tUJA z1Ktb%Fb#vC2d7{SkRGA@4(H)6692y7`qtnAp>bwF2B8oH+8_l>kOW|04s`$tEU*lG z7!ELP24|oKRWJ@a7za{74L7g_EWik~5Cl*V2LG@Gi2w&ukhprR)}fFHX#Wrnaj*w! z@D0Ua273?&p}fW8pbc#hes!R55Goa|77lg52VdX^g#HGh@C@zH2ZhiDeIN(gQ0|gV z4T*r{yf6)M@C^}P3_(Z>de8^{;GyCvVf;W1aPSQLpxC@n2XD{@dk_l1@CLtte{diS z?~n|7aNMWR24;W_exU5*Q0#H;p$fX>yl@JAum{T^2VG{&rvTN-kP0im477a-d>{;Z zU<;qX2#v4>sgMk4tk=csDxcI8Sp!a!xvHze4n2=?IQ1iV& z-+}Ch0R9XEo}Gw&;E=Eko;K`gPoLPopZ6y4{6_Gph388k1((nc0PzJIFEano{8Lkp z52k-+tPN^{rIEixOr#Vu_%G2OUT>_C>86GWmS6nl+54ALNX{j5|Nl;58^r4wAH(T3|5nNm z+ofmBAXz&l$B*i;kh&cU^{!p0WBXPDx0g@uJ6eZB*;-vERJwG1_dy?*_tHCUp`LO7 zHE*A`Q_J#c#}2$$EOY+8(fTJATeP`E4n~+c=CFO3Ipvs3^ngT|OZI?-nd|by5Id$e zk(`^PYAb z9h6Ic{`vA9@;WnPrP9rJqF6+7-tow_J12MK@h_ zLu~QI7-y_;+3e^%=~sK@JBiMuz_ce!d!W>_N6q%>mrD^P{dM1P=>pN-H&fDAu6*rr z7%BYjGc-Fj^ZW2um;SLgpM7TC$6-A~hE?2TAs+eE`%X6X#)&C5`Pqe|MXAj`W9Bei zlPkse#6jy?SUZSY3OZ^!5fKNDYR4ak zJaWldwEA5d^Taswh#7C%M9$4F@$*AKzq8KXhd+Mz>&IWE`csM@|NZUvU;Tts59Aeac*-+i0u{Kx z0v->6$zxyyB{)F}M(}~eyI=)1xIqqf(Eo!U1Yrn8I6@MZ(1a&MVe(Yct^*JtMiGca z3}rY&Q^>G}F}z_Ua=1eq_7I0Y)FBXSSQ2`O%7{lqViJ|OL?$-TiBE)L6s0&tDpt{o zSHxl#wYWttcF~Jp1Y;P*I7Tv-(Tr1E$?aUIfC-o)8g7K+8*6BaIR>$gceG<3@wi7l z1~G=5Ajc|JVGBYQ(vXKlWFi&0NJci&k&lFABqcdXN>BtEz>UvLwYE-2mNf)va%ZYh2~})s&MXFe9L_LJm2(8XL(*I#4J6XzB*0PtytW^^WFB`4orHk#E;?AX+8)5H!r$sH) zM4MX4t(LWrbFGJB`&!zL&#t-CnrE9@TEA^CZlooe$M{-X;ud#%#(muLXa~9wF;`v6 z1(9=+>p1Ba*RJvG?2SI_ROJGfC8G6i+x}KJhJDwy=iN|s^VSmes&~ESWr};-yW07t z*S_qnFMi`&UFhB@wEG3Heg(|l^wQVB0X8pvp@-lL?H9c6b@1T|JmBWemcdJ#@Ze&r zU|l8-+t8KzwfzM#xsohf5&xIKu(b=3 zJ0xcA-MG~~ZtH&goj>;FHeWV=iejxdfP3~UIa80k31H=far1u?@P;W$Mx%+ZZs6hj!x2*)p& z!H;?f;}_}R2Q~JBjboH*9K{F+UW!2tYV^Y6<2Xh!iopwOFhdx^7{@-A@rz$;gBHaY zM?RPVo^wAV6#MwbFNDFVpPT#}%+UEV#_@||94Qpm$SzCnHg>X?ee5kUd)nuw61BJ8 z?Qe&B+~wYOeb?RYcgOpPP@G$p9GoTd@JBCL0Es<>q6$#(#~_xWh8}za6sCa!A5Jj{ zKByrGXHdg2g1`rTY=IGpfPy$qkpp2&V-WS=$259y1+uW97NM9yC<+gUGbBL`iFiX2 z3XueD6#wD|)hI?28UYDNgaQh*fWtRNMg~Ys;|ix}!xx^>1~N3E4VaKa5@PWNZ8V`E z{wTy5n8cL1mw)YaGynNPmVWlP-~I2;d;H};e|`6v?*NfyncRCSbiTv1V~{4KJW*5h=D@Dgc7KRZ;-%csD@go06ho_1d#(4IE4~e#1J@zQ}_jc=z|iN z#5d@HL1NgxNC`g1;(1$vx1%Eh$ zT9}6{c!N;r1DFVcHrR)4NCG+7hcnoNLLf>^n20(U1o*K9KInx)IE5bggiy%GHW&*y z2!gT5JzEHZK`4YESO#sV0zS9|r`&@+AcJ2Uhb1_Lcld%tC=7mRhuRytHb??UK!akq z0y5}>H~0i7NQaC$$;4F5#bnIJoVU6PMn6-rIpnT=A&+n{5}|m8ei;WHF^O23xRXeS za0rKg5eIP?H*BzmSW1s-nTLAFhj!?Omxz;bxRh@Qha*Xkq%((bxD;(@hyTtDw`a&r z_IQR`X+~|#hiCYPVoMU+w1;#Uhi>rAaY&DM7=*DX8^`3%?)1*@1W&c`HDLRfv)T-i zA((#A673k7f;kCy%Z^w|6#Q^E`GB{Jfwz$%8Kg+4_`Hv7%b0LW6hWD`Z&(#kNs5FT z&@J(&d3C{?X&F#N?MMbacy(j{e5b+Nx9 z&A&oXP|Zmw`P7^%#nLRr7%N3jE%j0@)z2>#(=jE}GBwjPMbk7@)BiPP(>8U}H-*zU zmD4$;(>k@&JH^vHrPCYbyI=#YLKz3#B+Wr3)Iv4XLq*g?Rn$dg)JApGM}^c#mDEY4 z)JnC~OU2Yo)znSp)K2x(PX*Ob71dECRZ30CJ}u8bT?r5r)KYcTSB2GBmDO3L)mpXH zTgBB})zw|a)C}>YcRJQwO84}*M2qFgGJbcy~5l2RX+{b+9}v|`3;4o*#C;P*oy@bhDB8)r8l$T zo>)3rPMGLfB&kSihO7kPT9oWiHpz5J9uB znHAchC0gXF**|kwD}yS(`dIN1ouY->sFm8+I$9O8*Ubpg5B0QyaZeT%$*E_tfXyJpEnvo%|=ovyY05Vv)pyJOgNzznNZSH6-Gf??2V(NBLG8F$+fBchbeAuYm! zGq8;%JLwE@Gn7~=6)m}yUi{A=>07^*k{@~8%gwf%EuUd+8Ij=`nLXBjQVCPhoMm0s zgz6{xB-`53SVOT}&Mn4jXarFB2L3pVQ(%T(I0p52hySg>gl(t=b~py9xCcm}23|-8 zlb|Z5r7N&K21saxa2SVEcm{Leg>U$Wnac-k2n=cn-7d@rbNB^NfI!ta25X>&M(Blb zumw!ug=#p3viOC*n1)_xkn_ohtqTQS5C#?ehMYTw*_7FLum%@AhGk#|th0q!5QcCt z2b#0aWpKft2nAYDrY3a3XIKVa=nEw*24>KPZ!y}invrlo7GS;GXz_<%Sc6~q20jP} zK3Il2_y2(bmLG>2-IoqYI)Pq0eVFpM)U3z?mVZlHxe;Db;21Rdt&Pl$zOpa!#8 zhGoD6K1hUE=moPN$aqWyJ{SZ^?uBpYhX0=+y80XCjlJ5I`~^rDnF%R`abSdJcmrB+ z3qG(oNLU7x2!~7H11YYMnHXloa$Y5t9{2?yFvhv7Dp^q6il*<#unY!xo-9TORg`H}2++{LvRi22V%DHZ&vF);(5&E9O@ z(rlgW*$s=emJM2>4HN5_mdi!YQo&r-9`KPdmX_HS>ww$@7jSi^oj;42T*=#+mGGol zPiwOib%xw4ZEpuBuJ2CTw;i-dbBQfp+q8w-mO!BlGO8ALapB?a;7JqYp79sA@fx@B z4Z`sp=W!3(aTrIQAMbG$g3KXp*i;Q~ol+U>^hu}mO1Jb%2Lmcl0y+=_ zG3Wv?FatCAf-R8rFEI5}NA*-!^;Ku}R(JJRhxJ&O^;xI&TDSFE$Msy-^h3_GzbdFi?UN00cMc1S+tB6xabQAOlY) zbz~>^ayR#LNB4AB_jPCYc6ax8hxc=b^JV8){YfcENP#GT255+eXz+$;2!t}&17x^| zLpS(?NBD$S_=RWqhIjaf*C_vVrT2klavzrmda#8k*noZC_g3KdXpn_Y$O17agmjoE zH%IxDSNWA^`IdM2muLAQm-!Q-Cklf3ESLD$g`6I_h9^h?XmEs%hX#-5cPi+FGgt$9 zFrLr0yA(fCBVh^H^qoF29$ImF)Vg}6U%w*>m-_zkOzH$pIGt-eF*#_q6d1=(>G-n zde9Q3U!Kp_TqRPLBS{k>?{4z}ac1`r#b10;*{3`yB1*Z3ecC4<5q%*sHeO%>ErU*H6I z;0MO{@Y%?CEpoynWBqR9VJv-p`~;m&(ld%vY{l z{f_1f=gXHnZ?bZA>gtW0J6Y%6-OHDcDO#KJ=7kN^Z)MuJa_7d)S56r*Sj6(eg4Il~ zG<^EXfs>Z4+&ceh>&nTi2bV77mjD0^FmOP@01o5!A#G{T-a9qp_|=@}j};p>fBvM- zl-dxzXSnF4y5?_=CQ+j1te(S$_nbMq{}?J0MT^Lgt+dF}g=d5!diOp@u5SH0_U!qD z$tiX;JNTaYl*y9C>Fqs!-F%&c2i05DPTt_*yQ(t$Ql#U*KF06=KTi7K6OT0N#N&>E z@u-sxH~7@EO*XKQ(wAQ9u%l0Z0RA*tWtU|(PClLe^I2%4mF5pFy!{beCZebY+c?+I zb4@z@+`-BH&ba3bJfwx0Q$FAzLr#W!3R;~! z+ejl#JnLkmOgx1xrjI<_Wb=w%&Fp2NKL4;ZC{7$&hM8s|xY{uC07KQ2OY%^!CJlL@eYpfN{|MB?H?6v=7Pi7HM$L1a4gP)Qx9)mrOc zKGX~XMIrB83*J86Y$Xet`sCA&FS5XMPABET*GVqtTt(KmFd+pGC-T9wl8E*Ct5ZGY zsG?Uk@hEc`fy)RcPd5?jwHGW5>Qm3ZGI{EuW}J-*TB$bW^G-VVL_5wn^q6e2$n>Q1 zj>-SgsvPY-CgUP2JuKhzP8kna;)o!v9MYr?Pp}eB&G$@OWyMJ=y;D`86!J+oXDuDq zJoW73UO)S$xldTgz|+q;?zjUFIsIJaPN4P9LpFQhlr=TnFx7)kIoV{hOg!b_gO50S z%aiFlbjLGzHsHjAk39V8x3{65R)vpl2}-@`om%j=YV^}Ek>J^lZl zx!x&dpMD5t?n-1Tnpm!Y2Aocn4tTTAeNIaE2!;!6kcK9m!309UQOl%-zwwc;gVvhI zlwh(!>fkST9E96iZ1)d({4RwlGz(3xXTtr7Z-ghzPYCH^!~A(rDTz}Y@My9Yisgia zJCxxOlej;N^$%l?+n4}vqQnul&K_$q8o!W|jwv`m2s#jg3%G!blC4gI8|)z(D>lUu zrtu{zY>5ijD90OeYK?9DmhR@L#~sduasPW9$0FAhvke8L4B*nkl5 zK%|qMOp%tnBqlSd$xU*ylb-w}C_^bqP5xt)raUDoQ@P1fs%wZCi%Rm9n&@E`4cB>)D~kX)K=|qsbv{sY=ffaxIixiw*B6RBP>#heO3lQInW7J04X~ zNqwqOb7{{H)ii)NwTbRbI72q(afd0q-dFk9)Uj%bhDalyzsk6Mjty|Svm zGp4nyXRIOi@Y+=wYLzCse4fwe z(~M~YiQ4J$wz$SUE^?Er+~qR2xz2qqbfb&bmXwy4R}HOnv#Z_ha<{wQ{VsUJD_*8j zcdEd(u3#5C-u1G#z3zQ4eB&!$Gi_ApfeX^${8;uNO{#gn59i3`!wlvzi@D5XKC_wAjOI0~xy@{Tvzy}#=Q+!{&UC)Bo%4+6 zJ?pv8eEzea<&5NvJx)!K;6oB1z<~-dy3vk)G^8Uf=}A+%(w4q7rZcVSO>?@_p8hnb zLoMo2le*NVJ~gUSt?E^?y49{W^`HTpyLsfpA58#20Rj+!0`R)mzWz0^gDvb~6T8^P zJ~pzGt?XqpyV=fuHngKH?P*iH+Sa}{wzIA6ZF9TZ-lqR{tb+?0el+3?YB)E#)2;4x zv%B5yemA`1E$?~LyWaM`H@@?&?|t*T-~RqLzymJuffKyo20u8$6E5&@EBP}&ka+Px!=N3-k$v5ot{tlhOMW67|C7kpKFCD^754yLcI@3RH45(>Jxd>CP^(tC% z>t6r**VA+=u#>$rVYgS=%MM4c$0Y4;Kf4>>E_WBUeeQOz`_|WPcdVm*?{CMu-_!n* z&jkMOeTTbC3h#FODPHi0Z#>%{4|%Nve)3vp{M`RPuD^MtL+2=`JJdy1&?)o3H-DS|@$!8T@+GuO&_W4gJoOK6}+)9fY*!x$0xT;N7!c_)#zK)XzJ;jx)dc z&VN4iqc8pGQ@{GwSFz@Ew+~xjA{5^LekeX6{_%sq{NEox`OUBX^|QbH=of$c<1hd7 zzkmMrXaD;@asU0hzyAFHfByX+0Q#Q*-d_L~paBvf0?OY3E+7Lc;QBS71Gb+8PGAH= zpaq&=1!iFXp&tk09|p=__I<`akii}#0t%*JA{4?3wx9~WU<$IJ48kA{)}Rg2;0&_h z4elTh#$XHTU=Idi4d$Q_79k80p%EtG54!)L5*8s6HlYwcAr$tY6i(p|R-qNzAQs}_ z5@sO}ZlM>xAQ**C;vouIBr@V823aLi;v&MB8-~U=goxl- z9_96(D3+oro+2uyqAIQ;E4HF5z9KBfqAboLEuLcbDg}^t2mNH5Y$jz5Gej_-Bqd1NuIVzWj z1;8#LV=i)IH?y4DDSkQ#);a8)Bh zCZs|xBtyo{F?t3;8YDY5Bt=%FMP4LE(#1oLNJJV>Mt&qnhNMW2KHcH~4hPd*q=PqsuHZVes2((vTN@bJSvAZ1UYG?daaEQ6YS!!%4ojeNs1j6*k2!#FV1Ga%G7 zyruDk12cRB5ltmt=A~ZZr7q=Hp`9c*zJovPK@e0!6R5#6yn#570VD7M8Sq0QBtauU zK{D9F4$uN5B*Hi_K^!zfBh>$b48J%jK&U_0WTy2FN8oSB!L z_O--pf|WlALlU%u8La<-KX5}8tY8@ILyX#j54?dbu)ryF0TXCL61)K>=s_%4X%$>S zDC_|wK*5*j=#QqUnyx9E##WFb1%-}KJ6OX$V8b_<%Qy(bG1SO2@WMANLosLrFI0my z^g=i2X)!!QH~a!NPy;V;!!rEBH|#^3R;s05DyEXxKWwCs#_0%gM)O!vt)XZ4B&F~O z&+Lq99G=hl&>^K}Dy+t;tg`8#r9)NOUO|@94uK-!0ae%ista`;P*KUS`s%D6E3zi5 zcgEU%;i^R1kXb0Jv`#CvR_dUESifB5UT!P5cB{88MO9`iV9rENeXF^iE4o4@r*`C4 znIwn3E4;?5yw3kCz1FL}-YdT5tG@0lze?Df4(aubgEn*n!NQcm9xTEptimoV!#1qL zJ}ksWti(?2!TzhKf)$!ptHy3D$HL}>KI^XDlE{uM$(F3io-E3ytjew|%eJh`zAVfV z(#N7_$JVUP-mJ%trxTf$PU5W3{w&bSBa(#xhz*{$rYq7Wt#O0f)G*!Me8C3$fPazw(jR(FYM-!z3A@Uwu3p~ZRf473*9Ye z=tusJ1MBqfEA?)Ocniq9QYkql4CzPlMz92ft9flk>Uyrd_(LZELL{^TCwvSGwXQit zO=p}!A)LZHoWdaV!ZR?!H}HZmU_v*h)V#wt2t(Q?4>Q;THV6YPV8c5+!!hJTF?7Q_@WL@1Lo6&OQoaK%2m?Q~Lot}c z4KqVASVQ*y13yp$GvvcK*lIV}!ZiE>FLVR?OhYX6!aIb6F#P5;v;!}kf<*4a4KG74 z!~!im11;FXJG8?x%(3&n!!d-zF`U9PFheXbLpxvtGYG>oAjSUXDJ@9v1gEkp--IrG z0|1R})C#FTM1mHyLMe2D=5z)>>9Lwj10M*(DF{O!oB|)%0vTLFBAh}PTtXqxLLAWW zAn*bxi~}*7Lm}`1Gn_&qTtXv!#}S)vK4fwzJi{qG>Lr9iCes2Je?lx+Lo9qlF<}2E zH)Jy~&BHIm!an%0IoLuYaB?UJ!#i|C+SM_^?FT_GD90M<4LNSaqHtc3KoB}Pxf=CB5Eu6wHd_pZ? z125=8HU~2Rt+G%5^wqX52ET-0LPO8o@;$VJw2a6uYpp*p10Re7Gw?zoV8bAU0w3%_ z9nbl+@?J-(ElB^hI)?)k zGs7p?f-o$yE!2W0YlAI_L!XYrWPigu{DLCef@~LqZ1aLOOtdB+119{!BR_I6JhETM zLS;*_WRLGpA9pGTwXPyBOcXV8+%i9~3{QaJIu5#xHB!ZLo6VLEoj5X zM6xt@!$b?iH`u~H_%{Oq@+tJfDUhZW?}HTc!uI~dWZS}I2lFWqG?ak|JN&~m@B$)l zHaXiuHsiNMJMx}BY9aSRhf6ap^n!OY!%Q=SaU-{n6YueoZA`F?H$?w~k)MM;Oi7jO za){Ui^iqR4>_a*{1M76OHkd<4e*^bU1ISRher?7$Jj0bMD)4^uEBz)FKZ7;=LpYd& z9FNAIy7D}H!#rri=X8TESMf2p@*mGbIQaQ7U_-x<%x#-PIvC`ihJ#$U12f?HGf+7k zx5G3rLw=b>JK*`8d&{Gn_%pnNHZa3xyn{K+LzGnUpNn}rsQD**@;5MpIs7=RM{tlw z?MhhD@(2b$=)?6i^^&7!QdX}~Mypv2WltVbQ6lB)hREegO|kc+)*7Yl^5pKywewQ^x-~yl<}GGI!j$P(8>H z^a^^sE_>p+WbVF^*`A8P--OxSZ)x~@?bU9<$2-Hzdj-GpP$yo-e#XZXF6CZ4#%H|7 zZ#>6SE;eWbHVAsdk37lO)w~P2J_c3D`742yyvx7*9Vs_HPUIR9l9O-JlHa@{wJx*6 zywCqU?DXY5u44?j4#n(xCoQ?KFA>ilaPI;=)JJ{2%zBSc&+i1$y;~98%I!a}ZP&{! z*vIYNN zi=l@|I~)=O_q$m%P$Zv){erLBO3Cs^|Fnams87k*!;$QMOgf}H^wZk>l6wL>Z`X6b zx1hf2w|_&jK2d8h2YWCG>+{KFQ#ReVRH!t5jYVY#>%h&5vtbfm#jk8s28m&{uik*5kZ(P22`pm~msrk0D2vJehK3%a<`{*1VZ> zXV0HOhZa4WbZOJ4Jp%wRz`y|o12~N1mlJM2d+*eQ+voV5zhO~ImFjfw9ld+C({RZg&KE?Pr5>Uo}FTJsnP6z9znvzwk(!PW`Wyw zqjiiHreeoJDJDH(5aNX$t+4qd7Pe^N z35S;ce)&h3MEn_Kk7+`=gqK2Qv&W+| z|JkRPW0q0SFHF7(Cl+)1E2_m>mcfP>0mlK18eV>(r9-l8sRk-q#^L3eWkNY69T3~$ z1rugK)aJo&mO158C{DJ=98FOv}G^=X|aZ) zXNuy*mT9oDjm~}f?bqLb0S;K;feHUE*x-W^PFUfE8E)9&harww;)yA)*y4*5W-QFs zUgJP5#%#k)H{SedMGH7Pv5B5}?x{1KZ#J^&5<$aZWRO#OX_1fT96DwXOvVYNk4xrZ z<`aG(;iDH`_-Lel^W6W*>9fi6zJ9egRMzp|A-j6k4bus2!J{ zd2X4aZnQUZTaM|l8+|b@-SpE@PhIuZS#RC-*J00iv5m)!ZKK6PPLpJBqUrq{eTtih zPCH>9{vT@gI({pyv>L~rov{D0<{f*mF~=rz>`A9`w4L7KCrdOk=Cz7@6Et8#IlqF*z}dK0@Uw;nC?IFH;j-__3RPTxE)(GK)Qy!w))L#U60! zVif-YMkd-rdjDXe8OOLAekBo$a8ctG_hlA0c2P}gTw@o_=*23=@rr%K6C9by#W&{B zjBv~&)S}o%Mf!1vjdcIyBOw_{NltQxJrq;NWMih>5s@+T@Z?s^1hRBs;~zmWw{->~L2r3uY44wIYR^yW9g8BTGIlbofY9VUZ#CXp#KGwpEaJK-5md8UJ& z^|U8F<@wI7l#`$R^yfbT8c=}_v@z!dq9&8snS3mip$&EDLm?W`hl+%t6}9L^F`7}0 zZuBt*jZHc?$6BGZDp7c>j3S;2o7ll( zaU9qntfy9ao5d~^E}HB}V?sjN_qfs;$?J(?GP@LZhPJP`18r&hDy7hds zTFU;_uaeR1TydLQ-C9(pAWf)a@=*?W3^yH1NyjC?5{h2%V|x7X2Vb9S59eypxrL#{ zUgzQ5eC&0v!yCuw0@xFtoTVeTsq8#11ebQ~rf)%MFGwyc5^Z=^FG-z8-^P)Sf4DQV zrR0fGL9+jq_?FU>eLHPsN7@mduoAuLSYn+N)3^Qd1h|UX%{%lvkHa)^y%#!*gPUlM zoaAJo<8v>Ccbj4rulSq2wX5zHa}VP1qZ5FLge5q^TzZTH4vi>8A5QVyd=vu{Ck#a_ z(qW5m@gpWxkV6v~aSVR&;u7EJMN^LPo)Ur=E~hBODS|eLUreJB--yLAAW@=XEaX9j z2!%F$EDTyCq9BF1gmUsY-F* z24I!|g+#=n3Q2$j6t0j2T2!G6J*YzuumFWn#9IxJsKOQ?;SY{{wImOCP0rGFq^B2O96faZ~imWUvEAz0%DTEG zcpr8wyAPL$)3Z5bGnBX6hpbr0n;2)ZR z1!;bs7Y7xo|~eqj%Ufe$WWJO%+0(!oglAr$!FA9`UA zAmM51gnIU39`+$HY~dYxK^w+_>99dR#v>Mbff_=glw2fQY#~ar;^wBo8o~%HQmrJ~ zftBb+CU68V3ZpK5;Wl`pBw}J#;9^*MNh;TKRW0X^{(4^XBCETkBNiT1%8I>C4DAt%@Y5_0Yne&M+yP7XRm5BPu< zAi?8`;tix@5aIw5-k}lHKt){Q6a1l0_{~!~LIC$cL#8Jj>Y*Fbp(g)!P8+5nF|473 zvcgUtsB!{`3U3F3NJ$dyff|@WFVsRCmceS6;f1uq9-aXk#wQ;t$elXKguJ31L84Ch zA-|Yw8uLdSQevU_VT10+8mgf}UdYKUFv zdroM7=qVg>2^3B8BvZ_zu3;2^%Zuow9`qq5H9JQYZfvBZ~ftC~FHP39~SD z%cFE-?v!aQ7i(YMW3%qai_B<=9&?EXiz5PSvc|z0^h>DhiKu?csP4(Aj_RJwfinvR zjr#J80*hcC%q<0GGRJ6)a$+_6MK!1JH3O!IO42ZW^Ecb7u9}VRT+&}0!!b+II9U@m z9rKKA0vph(8`MgyAPud|%B!v^JG04|q7IK1<2Jn$jUEFw#S=M;6E~SNJi}8p%M&@> z@;qmgJ9am@%cGJ)F(G4(_Oo+)Yl^bx?|-%%Vh1l+^!5l%Y6uMOm~(H^W0o(K8U{ zssN@ji0?(LCLDBBM{%@Aebh(K2S;~wM|)JnT=YnhG)dv&K|eG?&#N)bGdaVvH^;L^ zai<%wAxFc(ns$^+hjd6&MMuLlOt*APuZc&)ff|%_P1#gKMNvN;;~t0-kO*tDgvX0+ zN-1(_#BfT9267CE31;7-oY9|DYKN~F($RbU<PivwMey1P4!e2Fz#R@F^5y6>dqYC;TzTgd-lb-@MOBO>lpXpxjfAr z{NY!ft4{m@Pk?n;*~A~V3s{+Qc(_ns$VVGGB69z-uN|gQD~xI!ra^qd!41>&grdhB zw1KTkX`5^!F#wFB#7h!;LL@#Zsc>gfd4jSUOqsSqBWVJ@q{Ndpg81Tt4im$*_Um8I zg82GI#M)se_KPD(N`N$MCnzh^P&HyD)-jkgMxTv1{GrBfEXRuD9+*LF_Tg_h@j2RI zLssPr_IFs0J8f+j%iTdwsiJdznsVHu=SBd^dJ28ddz zPaAflBZ|S9LO~d?0Z48_zZ|mu{Kgijp&kG3qHr>8VD+LG?4lh+OzD{6>$=cE3SuA3 z@g~$FJ@BtANF_igwsP4NMqAPWdjlG#El!H#9qQonPN50D017Ta3YtI<)SwBNpbwIu z3f=$;ng9!yAQ9pK3Z&o?ERPAQAPhpG3ZS45-e3v#pbBi^3V1=^AdP_L!5=>16G+b$ zZJ`i8;S8L%5zZhZEY>-~bYyVGuAP7CGWkNvsP!q#ZtiSxRnhf5B*a zVH}==8ieFSu5XmyVMBU>MVjR7*kUZc3)F1E4NER-Wa2r_M}u;XEwBYgpyLyO;u|1w z>7Kzuc%djh((CM{KAs~T1Xm@%EOh_wCqTsZB0hl@ipz3ccug_)t~A#l+yrHagC4%& z47MN$$RG=BAqmW&2fly|u3!(|zzoP>5Za&()Zh%>;0uyq3!q>G8(|4Bp$WF&4M3p@ z!r%=2VG5++3Tgt2nzeajArX2G6I>AzFhLj-!Q#|_5ip?+mZlGu#vdSI<=!9>{_PYR zp%;`_eUXtCuFnbgLt1{J7oOqUdc+oNr2oi5Se&FAQjHp@PYgprY?LJ;y9E?nL~Q8> zFmN$~w$S~iVd)Zi*C-+!nBf>O1v-F47ru`xXas|;K|HLX7q9^;JSQdOENp-zR~U^- zU$~eTG=>|{?r2yGph55Siy8ldU<;C95G*hWT$c8-~Gmml3R*Y8CatA7XMJ^r2Rr3mcBO5a!e;i}J7p=qht*Wvn)weF2zzT&62>U=D+(pFaeX)VjIEZlD^^cum1`zg_5=cQ&Kxs zDQ^qAK|H%vH3a{T2|~B~9_pc$*2t5nrWlb1SOLC3QcL8I1j-Ox|{*H6{TKMGD?Ju++v*pWTi zV@g$ry;c8Zw33uP+NC|C42s0H97H)oIiY;oxxL#1O4wB$z_H!i$-UeOGXMhMk_N!q ziJhM^Ju^hz+~s}VI|JR*eE<%?HLg4yK*}a^qqPV|OKOPT3BKSN!`{(-0Px+I`h6b$ zJ*W0F+X<;M2HxN;UfvP@-t+x6*!^7{J{$6L!znZD_rUg$Gk;Wz%u zRh?nmz#IL(Kkx;A@Cm>04gc`BKI#`!k&Hwz-KmFBz{n@|$-T(dJKmO%^{^|ey34k#OVELE-phBH$076^0 zfdmI$>vr&9!G#PPI(!H*qQrv#23DMi@ghZx96Nga2r{I|kt9o+Jc%-;%9Sizx_ti$ zGvz-5GiTBykYE6Zas1}}`)My|zI{ZC66J?9snMlOi{=~JG^*68RI5U*x(_MQe^vQm z{mRs9Sg=yXl5J}CY}cr1)gE;VH?G{dbnDtR+V-yAy?mQKm7Di1-M@XK{ya?JWn zuJt?|)ZRSF^D6s%_wJtM$(Siyw)bxGX3+0ETMlhna_Q0Y-u>HrS@dVjusO@FtQvN1 z-R)ez#@+gM?$ka_+a|txwr|+9S-Uolnz?J|w~td#-MKdIpOycG{(U<1=GWiH2RA?6 zGI{OVe}fPIzO{Jv+UNU}PapRB_x3M0S5I4f=P{=rezo;?T73u(xY>fWk=OsC7I=GPQKP)U0!Wy))2 zzj&tGXuJyxtZl^>UyO0a8gI;T#~xRF>&GIGOmfL4pNw+KDzBWe05-X-BLN}sr0AO! z3=A}34`J<_WZaV6+ z&rW;ow%<;B?3;s*d+)yg4t(&!4^MpY#vhM-^2)DX>GIAi|5E}#NiF~a2~^&9x|nUx z{X6aSh8g(Xd!Nqu+msR|Cq-n0+NS<++!gJiO54Da*=;jBqJXg$Q43zl7^gNL8KTFOnyX@ zo3vym&lr=4Y*23qC}jd>rWp|y>L2fe-#E;Hzw({09k7h$_tLRG^_fGK+#3fk`$tRk zvGSI(k#dyO+%jic^5{!QhJabmm3$^-c_a7v5xRi4zq(HXAdA@ z?kVP?X-v`7ypEwXb{t#U?JAbKo!X0cC>34fj*8Tz&h2@jbKUWphrEmR?k5QNhekCj zfD~kJY~{k&P(RAAqAhK#Lw%LO*wrwc2@a%ayud~kUtsuo2 zUn8b7uqt)1ge|OL4|}nymeQ*KSik}V@WGD8)o(VF*uwU8R)swbuz4kz!3H-tw)XX3 zfeTz^bJkYVe#x%tx>sq{q}t2oOs|Not!;0M+rus3FpgaS0<d4~qw^Qw2f>=kcz z-wWUP%9po4acpB7>wpCSH@uTgZ+p+i)&B~3zyvPvd=HG^1m||Q_g#Pk@@s*2gfLy? zs*!~+jN$f-D8n44RfjL^9t&^y!zUuKiBF8;6svf}AsexD#tGvX%Xr2#t}y~1_236D zzyk6}rMOzNkI)rnFI-tlk=1hKA-g5XSYfhMenJ)}D|yOPt}r4eC&fdeo#YwW%fj4+ogp z%xHcv3up#sd+=iqb>PDuZjI|)>w4F`?zOLf4eVeGd)UM-wy}?m>|`r@+01UXv!AW( zH`JjU{1DPUsF4U<>tWm6?l!c)4eoG@d)(wMx4D&FW;8S4%oH#)2*6bjeWc3_znI1| z?v3w!>wDk)?zg}H4e)>qeBcBxxWNyO@PsRT;S6uM!yk@tW;}xzb)ZGHxw8*zG~yJ@ zSOzmb4)TygeB>lAxyetC@|3Gw;s0R3VJP78c00fV|KLZwN2rEz_#-Ji@43%^4)mZ4 zedt6ly3vo0^rS0&=}d3B)1Uti^{7kz>HY}EC4RA}Yd4}7JDg1%A1toB-S3X~yz71MeDAy8*^>`!G{P3De9b0ubxE>;MdShZznInn$usuWJ8X{s~2P0NZ z!-{3KSFRW^O*8*6U9~YEC0G<#hCs+F?NAy1Fc0a_8W;Bt=}>e25oE;Z8`Dv3<^Vbe zln=h>6V+BeTfs_9=w_0*D(ygu5(XlaUcx-@C}KebEn`3{~!#sU<-_}2as?H z18H%wuyM3-dfiY5kl+u`5C^@$3~@jUknjwr@CMf450Eej?Jy0W5DSU$4cM>;n2-p? za0+oS4X0pnLufJu=951OltC$!MALqL@_yzL3xfa&knjzkkO+Y2c?zdc41<6P?NAJfzzfyD3$~C5wD1n0@RXMz422L1HpvW7GL)IAnVUIa zf(U*{NCF`61L1HF&-WuFI4Az_4=li#?=S^Tzzlt04oMIM{4fX{5DWfb3o(ER{(uQ3 zFbL1^37EhLGw=q8$pVGI3`x)k%uonCF%DA@15L>R|L_dSc?q^~3LyXo`~U?>Fb`(% z2J;{VWY7&c@CIM-1;r2ogAkZK!I|+XpYutdL0OcSsDV+!5411^YJdfAPzYD>22#)m zpYZ<%FWCf_PzY`C53~@LP!I=!xd&N*32mSTzYqpzunfEq3+ed=Rd5RFum@6L3+9lX zw!jZ`#|%&)1-!rqRnQ27PzCOJ3VIL(g>VX2&<2H22bXXO1d0h?a0Xu>2XBxBgCGpH zFb*DypMOs-+qf_bC}i*(Uq&3sn#Xa&Z3! zdH@Aj5C?Uj24BE&U4R8-KnAp64}Dn$QVprFbIqQ1!1rZ)L;uu&;*I_1!f=zWbhBipaxmM z2U!52gAfW;00q1d4w7i90V}ZVbr_$?j#LV3H>d_&5heNX446QhoXVWX&<(!qfyx9jOfDL>qi4}_lJ8%jmV3#u>2aqrh!te$VBuuluMQ9E6z`h%&bpTD4~p>Y2Sh0p~| z00p$52Tc$Q!f*y;a0OUU4BB80w9o}+zz59G2wMONjbH|QkfFu!48ky>N$>^2@C=~< z1yIlnJ)4iD*bTM-1x@e{!k1vkO<2lr*z4L!ifn@U<)OX2-v^^jc^Hp$qQGY2Wqeb@9+g-kPl{{ z2Ir{KUc&<3vr30MFJO91}|y&wg9U<-S| z2#K%+i69K8@CjLP29OX6g-`_r+6SQk2UBng)1bFxa0W?G2WL45BD@D%zz3o54DBEc zywC`|iUoa82>*Erp+E~AN(Nhi2C)zZW?&10zz2Php{{zEU%&|IP`^nmwG1dENr{M3M2drE(`~sa0&@L2)ytM-!T6Ujmr$!APgA{33>p$ z*pLW%5DI!Q2%lgJ?_dpr`3o=E2*pqc8SK5wKntJ12gT40gh>m$zzmGwp1OPti2w<6 z_sHoeeo`8mD^MhFHzZOFDdX_3@8C<}@UO7+59#nq;ZQ!~KuhCr8LV_dt?>!>(5?LJ9sK+b-B3Q^@C`h<&FC1(+~-u^NY4vB596Q> z)#l3D=nv@t(Y-MaCyg2W+#6Y;&aROT;joD2oYKB@(*Npa-;g2ynh)muui`Kr<}i2s zaMIf7t(egblITkneOsTIgg=lDKIXcKc!s|@7hQrp1!Y!Gi6U?p6eec83B*`GaEq3zkC4OpZtS3L>Z z^pe`8J=&^m+FWtJ?x%|+v)P&b+HSQm6n)wlBU~!e+qON1mG=`L2!ihj#bYAHw%A{j z)!UqX+dl&|nEl+Gt=!e^+Nf>aoTb{;-PzHt-K_oH-c8$g#oXj=-oHIp*}dDa-Fq1* z$>Xiwl*L(e)n6!6-|77{_r2YQUEHnPCCRSa{w6;J$(>9s+qf&Uik)<0=N^RrnwyGUOdLE0x+D@!iqT0Z4_hu#Wq*lR-p;n&|#jN?*GD8H)CYtH6v?&fa}=W#CQb57@VZs&K7 z=XtK@d(P*5?&p6F=z%WiYtD!ub)PC|wSM)DgU;xU?&yyW>5(q!lm6$gLgNw^kG3a$ z=Hkxd@DC>q>Y*;`qfY9jZtACw>Zz{ktIq%Gt?uft4(qWl>$6VlwQlRTp3rJSwW=B= z?)>Sv4(!1$?88p%#cu4!4(lz4d}EG$4JZM|o$39@uu4qr)o$&ky6gF=CN_2L-R|w8 zy6mxc7{wh9HYab6{q5QKS6#t?= zF5#(#^gu6O)Q#U@4vSG=^bMZ$M<4&;M8Dxmuk~5a^%VZ}L|@#$zdkYKo` zXYJfy&pS7@Gm$Nact7-Poz>h8=9}|Umv7d#Sl~wQ^-%9tLgn*MzfdQmb#^w@*_mQ~4@B^()i+B%^#XD4OB` z#e%=quc3|7BpxO6IpxDD>Ri~r|AbqOOQfjNtRq$1*fG-N&hDH!;ZHJ)me9VzPF`Ip zC;bz>QPyXz+fXG<<4-GRJuUYS5dQ@K<`Y=(U%q_v(!Db{&)`Fd5hYHfSkdCcecBq? zs#kE{zG;kp?VH$cUcPtj4qmL-ZrsU+4l5E|X|SC+l{76Pe3)>Y%83MdKAb0Wpu~AM z$1PjwM^xEK3j;(pnG*BJB@z{N{BW_)bkY zl3&x=O84(qw|(!R79_YYuTYdi5AGXh?%y(V2@~$K#;e%LgzxsX3sj z#_V0bZnPK@46F0wGg}|AO(U8A&}l;1^ECgHU6XmKS2NVn&D<{OksL`X1$-Wewyp7{IBOooc=W*KV8WG}WQYmCs!*z$VknPj2vv5#CD@w~Cw?KePE)7w-%fo{938xTY_MxR4YnEZK!Dpsvhni!;nTDBTKs9Ha zPSg4AnRH?)1{-0zWCpMQcTS<@G;8wF<{52-Ii;I!MwC=FY8+f99A0RN>>y@r3Fnzl zs=?$JY*0P+O>Lfi=Gbtk(dL+Om^lTTWu6IknmxCDCs=CoG3VHCKAmQnWlkyP6oyVY zm``fF z9T8}TNdu}?2X7+x#iHS7_!ZRZ_ptO;ivqMH_mmtT&tW*S>! z(Wc~QB5NmjYrH*D7>Jp!Pjpa)@%DO9A^wKwY_*wYA#JE(rdU2Hcgi+w!okLOqIWFD z+tSlF*nO(0I(vV!LHGv*5?EkSb0Lgf@L~@HCeR-9;Kwv#5ejQiZ*#QZhdoYVi(?cc z7N_vlFF1IL-*`|PpD0Eso^c6l^nw=0pdK^$F^)@+DtXgLjj#4~3SKPZAKJi#HaJHM z4u*mk?63#_N=~s1ezXGFQ+*X7B=p zp*V&bFL;b83gaK)h=sUHD6Z2TqZjzH2hM)+i;fY`7Pg8-FF3ZZLf-In45pkJ3y8^TcpMo%cR9GTt$s}sPGtTOePLP zvAI!d;~xs-W;eb0O>l-&oZ{SJh7#zIko;ns-ke7_esKwU(asjbNyqSF0Z29Sf*G;6 z)iXT*2+ChFDi#qj31Ok3IU8{+`xG!e>+9KOUz{5(eILfMN^@~CsDNv7cd8H-rZ zE1BQGMjBz6$TfmejkO@&JwM6M&Ly)LE(1?9nNbWeZmt)#^OX=)$O~Mma5o|Q&8g+ z|Ii=^Pw@>#o`N6q`~)`AfwE~_wih6stUVy>vQLBpOz*%%4lkj{dSL^B`!Gi%eC9C! z4tC=b!hl4__SGz2?4uW$SOyDaxk7X3D;8z^M=T(F48mFifuV@SC7k;YHQtgL{@CX@ zPJsz3f-4;++=n8~!OvJAuZ^!&?JjH4Mj&cqnb4i=;jZa0<(-iq)_52#kf%ayJdD47 z;;k@3VVqk|Gmx=3#vI!SoPW?_R~sw_ZQ7BYu1!;4$4I0uaH`>)(c+$pdth)N35kC^ z?~MDTg$Y3_(k97=7p2OhWvF=ySHUSCZ{=~1-l3|b zq(|4dxj6H)%d;}sj$+Z~`O*tDlx-u2HTe%Mg@P90z*~z$QM_N&LY+!g91BkYihooO z$`XuXmyaQ6W<(js%c#!g5FOUj`HN!zNUFZ9L9|2n5zo_8xjosF|7UZrgaLW(cp;x}H#DIV0=H2jR4Mt#ticj_jh=NGWD!whWqqG(A z#5F~0grXRqAm%&x!MPIR5Txy6_v}8=8XPN87}mfBB+$yBdC1a-;+k7}pJly#XnrG+){yVG#Nd6$ZwCk8+1M-V|wlZN}nG7xDG zo_i9TvwyYWiVORvSVN5Eaxy5Xhnkq`%U_?gg_OZ_*6JjWqQ%4iMkBQZXAor_IM^@feFZ0bc+6HwX#-u>ukx0cJyjcA$s75(osEHg95#3VVlQP>E9c zh)m%UL@S+Tz#1l#m}7VhY|xr;5C&~P5{a>f=GY-Rs|L+!l27{wW=OG=P$%Tj9v2aa zO~IOfh!e_c60|CoUeG~o2n_4cz;4L2Q5lDs`i5#amJQs%a6kxc_y+f}hZbCh@*4+9 zk)&>z2kPkzd!Qj|NQWbQlX1`?4kL|HVKPt|2M*Jrr<#>t5S3o2mYD(fLm?R`A zhJVnJXVKQz1xWHo}m2Mc7mI)Sf;4qRp z2HH3VbJ&t_&>?Gxi*L}LrTXZYIL!gf!yl zbTFCa5g4ACsczx0X~>jm>_aAVNM@*p2N{Q3%*h`AgNO|fKxX5CYk;P=39*N}2{mg-2e&NF%s2_M1ka}be1~>yyUr|;xYP{9OiIpFkJ&7u*F*_> z*e1Uu2)`swAjwPSTumamj;4f;@kGkPtIBlvmgX@_zZB5tu*>@dl6^>ss02>JtkBxL zP;z>R3-~_(M1pjCjXd{uRscxu!@yAENLKDzS>A;2$Tg5FlF{!lTiN7>7Qb%x!v61wx2! z;!^qS(ss~>r})y-OwlhTi4J5Bz7$I@P0StZ7UFP-Ed{6e+)^{0%+thEU7Sj>tW!Ge z%`QzntGma)KzzVS9G0MdaYM`-JcgQh-wvqY+V5lr3Y`t)O#IRf-P8sJ=k(p z*A1D~vw%^9@Fs+fSc#q3Rz(3EsMc)#2O2In4O*cc+E>jGDP`G)RiKAxRHAKK zr=3?I_y-)YS#ITrcc6>M{Mo17TCVL{bX8flft0amR0N9Gvh`ZDO(!4EP!!?K&_=gslS{g{)dk9!Z!HZxe zi$twl%e`F8&0NjhT+Z!W&;4A`4PDV4UD7RG(>-0(O^*-65FTA^3;Kr38+}mAV>m}OX zJGny^e3_t-hs?La+ts zh~M;2Xo?#lUVH>_-9L`}K-eDf@VIRH( zNEifO(2#=|hdp=$Ou&Q^UScM0VkdrLD2`$&o?`ZMJMOxzV4!Dcgb@Z}FAiiZ{s%!W zq3Zq0HdEEMH5$WT#A2!kphs_6+gmoyd-eq5&-(TijUXEo|rsZ0$E@UKZbm_y^=*X7vT&1CC&B?&i{iLUFuE^4D5Y-o*Ez*g47w(7>-Xvdxtk@kwnw(99+ zT4jCbo#yG;gip>U>ao^m&lYRhwTQ^Bh&}e`(>CmCrd+;uZPW(nk>2RmHV6tX=SlYJ zz+Ku~G+S^2Zk@bd;?7;wMep%%j&XT)R|ItF z{g!DYH}cx8@aj$R9<}j-1%fdC-4NGm7=Q+{q!0Sf`^P`~j*@)|+#`Md^^c36l9A%P+kn~JPX-tQ7ly38qj&x4< zbX0E$Qio5lj&w_B>b|b^$<|vq?`S}m^wchBTetO`hG}?~?U@#7H>Xm_4(VqebT!ZQ z*C2Juo^2vobE%edW4CQbzv_lw>R<=-h$wWaJpvp!0x1Vx5EaqKjBZkY^?)|@vhnn? z0Qdcgbydf9e4q4C$Mr%{kE)3EcK7sMhjOkc_#O4@Xg#OntX;r_*F;_HZclR>k$7m& z^-dRfPTzEI=L#~pZCSteiH~^2&i9J0e&~;W>7Rb;uYT*le(cYF?caXx?|$$9|9Y}T%7;3GC{Wse;^}{Y_{B>g!GQ(~B0Q)t zA;X0Z8$x_2F(So@7As=Bs4*kQjUGFK{3tRc$&n^YqCBZGCCimATf%%PGiJkoHvg@- zx#GtPB>(Qst7p@my?t`{6iTXeDbuD-pF)i)bt=`WR$@ta&r%&YnMGCSeoAO%OamAesBGuDyKk)R^O!FWejDg&u-l254Zn7tS~L_-s++DUW?o3eLeg3?%%_Y zFMmG$`u6YR&#!+!|Nj2}0~p|YL=k9@T?Q6NlzW}82t2^UPf#}H zbDkREs3)O_Ba&F6i6^3%VuT4I*kXYy!Wg5BGm>Z_2&S>4A!{Cj=$?TODo7)YKMu7Z zk@_Jhq>@WY$l`$qzIfu1Ou98CiB{4_pm$iZ7o>w+ItW4(AXp%#Y54H-&W^A3*q(w; z0{9}4T0Uu>UGYT;<(puxN9Rp`ZV4ZYdH$CmlvV!t=AmBy7TF-6aq?N8i+@tdpp$zN zx@Dq_@~0)I_AzQ`qXSx*siu$``Y5UL&1v4Jt^$f>teN@==Y3+jb)y9vWVqo!9kLl> zmzM_m=afkro9d=;%DL&2whsELt9Lfb?5LDRo9&%N9*eA|QP!$xvdr#jETWCJ>M6K( zCc3S=bk13Bo$O+IM5(ZX7BzZD0mthO|}h_lW+^W5{y z_4XX}&M^!9Z_z>jd^61->zm)bGrM`T)Jx->@YGlT4~=!wSaaPqy!lb^PuLV#5QPO4 zxR7CacFn^kKT&%f_t8YlU3J}eQ3!eDlg==ni=XG=bx#$J^eIMW(zdX9?tFzwv(D^yeI0dt(t>aLZhl9D` z^RURf&b|}aA@JGGQ+#X03ypE-p}XF^^Lv+`rLs_G{=Cl2Tc5r5rpiab17SaK69p-N zzz*fNyFKjj!rRu`KJF8>kMQuj-(gW5&h~!rt^I17Y^~8Ie)*WkY!Eb?4)LQl{2+?` z4k(-2+^;nW+#UrBmN)Dn4uh(So{y#%IIC6vFoYr;A?oJyz3;gt1>Up4%FuVYF1h9z z*f0kHyD^P%>|-3-utz$&ah`vC;~n`(hc&EG6m3|e9rv@eY5SVh_M9L>mf`h-2W= z9*qbEB>J$AQ<&i!!U)Ab_(6?5oB|X7zeofh>cGi-#6cMCD8wG%kO*54(;TM|#wiAI zici!7W;p}b(kKx4l(Y-l9LIDkWD*rEhrmBJF*p@$iC z!INm{ff~kfg(djo7bW1u8*-o_ZOmX0|6ld~b zq*`m+(Sn%6rA;KOR*R}bNiSm_P8Mt{Wn$BrmPQDWq<3VRf^q!zPq@?FO@3L35IkcZ z#}GydPT>zJTp=947(@vF;*gG0)Iqs?^+zmNunaZKU?0C=#tizv4;JhpA3+#IFKkhT z9ke4HG3bLox}jD`u%H|52!b4*A&fJGfD!)q2XeQ-f?oK;!0-4*FGEmXIm{p&f$l** zigAozoFWHOa9M~eZRtzz2a&R6Rf{q0Y0q|ANeOsB0{&6zf5^1A*Wd?mG5JF8Sn?Q2 zD8w@oF%B~D;Tc`H#4<3!k1&`a9DQJGB52WsUNiy=?|4HJj4{ao&4%3jrC4PYgTjcc}P0)is_~F=71i{FM6^AVv5soB4!5@9t0X6)A zi696>8=R~I6s)TM;ZGwx;R)CDixuwhhXV)!rk;4IWtxB#th&|q*l~O2af(Y6!xrse zCofJBj$*{ZAImt!I8MQfpSI%@r#OWzK3RxqE~D7vNW?mS5e}A5V-Uai#vnq$kDZ@l zA0=n!I6_WgTlixi)(FMRzwwV?k}?+jz{DQRVGBMi!yn_|>TYq2vs%YE_0DYC@s76r;~jnvd^--l8g|S>J@YV!Ic(zhI2P~k|M0s% zAg|%#6)&=J{MF|7F^|C;z8&KbV%y@F$H2!i^}qUuIn+K6Dyn_%vY)+_M!ad-<6iCr za7(EhkO1HR-&jL>e|39iV-v#{KeEM_&jHy(K;^F<`K!N4WDO5}w-`V7+TZ?{P#00| zgP-jL7{93-@PGk?z`lmx_})8?`Qn8?{_>B1;J!cq`&)YV{~*Bc>rR053tw>YnESmS z{u$r_vR(bf7y>e2)9l{(@t^PgpZX1-a3$XWyW4L`&%jUOUiW4cg!h;$RM@-VX9$5BlH_0$~se;SdsG5gOqUB4H9L z;Sw@o6FT7&LSYn2;S^F~6X0H|OBC_n-XfN{Ct#fs)~As+hS9|B?^3gRFVVj&vhAtGWTD&itCVk0`@ zBZk92K;k4)VkKJQC1PSGY9bs^TiLVk^4hE5c$d z%Hk~2VlCR@E#hJ>>f$c)VlVpQF9KsQ3ga-Q!#@z?F(P9!D&sOTV>9NW7yg46svrRz zz$cR7`h8w?Ezl!zV>f!^H-cl;NK`nIV>yyg00e+d1i&=%UjSUATkM!Q%HurJV?7#9 zY}sQz>f_;{V?PD}1Rg*ry5K*=<31YXK_a9+c8Mb;WJ4yTKcXW95`aJ=AIF*CMPg+C z+reE%a-@Jj9?Bq(GWJ|u}0R-eb&g9TiWGa)}>DBB~ij1 zVCp4`;U!Mq7K8-lO(3NKD5Xrg1@Y}ATw=?5*bm=DCSkHAU)JRY3FcJBWnX%wXBK8= zPK#)gW@&0BW`ZWDd8ekPR^We7g!Qi`HgL%%@`#BuUPLKLp*(wZk+B!#H$ux1BhZnnj}IYSVJ*9Lq1T$FK7cTV8S>Y!!fi&g%W9z8tIYR#Dzv@hTbPZ`olBu zfy>nzBg`BmBmyQh!ZXBDUO@sRd|fP19Vmo?f4u`AKteHGLLxB3CyeR;B?w(2d_p%| zACl5(o!Th~DrtQ(sRhC#KYRn2UP3I$0VG@kl_o+gKte3IX(2#DD8vFL2;C)o0wiF= zGE`F|&_cbzK`11`GmsU?4FV%jgXi68shaAkf?u8vBu&nwHHAVuecdH|+%&Nhr!qnz zghDR}115MWCY(Ye48%Y9LnurWH^l;`3WF^$!Z9>LA1uQ_3P^m?AF5JowT76gRwPOO z$~eSAEcjf>Jwq{2!!l^YGAsivxZE*N!-xt4F9?G*pxZG>$1&XK%#qSMbptIRS1f45 zoCZj9<{nU*T!Ip2Y58>7|4JIJ84LJf7&)VC!iZ z}y_SYUZrY`mE5ttREF^Zwl;fDJ^O)?QW_pdtmE&pkY4+Ok~N4@r4U*5avV? zNryNs(YThtSj^hW$c%3+76$;8w2Zf^OU{)a63d>2hv8 zLCxbjC&NOgo)+ZQ*pEZfZtdFc?c#3kX3)YWrNd&Q+vslp@Cxtn5^wPuFVgUC!#XDW zZSCl5hE%FGgDL3yv@KeJAss z@B6}U{CZmYGB2OH#XgurFBHQ!R3GL|pMU>N#6py@C(DRel)O# zX4f7Z10U2|t)9X&yy~M}0wg@c%;^EzJ=x0%!zTplGVoFr#c&fl@e{wt3^(b93PT)# zX(-SdA523cTtb!}LsAr7Aut0rB|;Wwl0y<$rC}6`LKmsNpo3lbI9aC~8m#-az8> zmhJ;T90M=#11)?)EMUXTEyFSRYAI(^5YOB%{K7lDQ!h-zJ5@s*Tk5RHR9FvA3o>gc`0FY~lH(4$ambw^vYu;#Ha48k*@n>9efF%-ioFhip% z)-jwyF=)fgF@rUnLf~cfR@=2f6SY6|f*#NUEcF4;K|(K_LLXp4BD`uZ9jh%A9VYNX zAN15pgN{Wl^j%XnJ?C{EUqT_Af*!CECeQ*T3<9pAot0u+VLt;bB?UHk9!B#~WxKXH z=QS!*gO_qKFT_H=W9FnG$^82^<)pU;u#w3>-KhaG}G85F<*QNU@^Dix@L%+{m$`$Bz;R{xe`e zFg%x|XtWy#yo{|u_)~s0&Pbr9W;8tKyfdumAZRoJB-@kwZ z3odJLAjy+JK`LI%xUu8MkUfedX_BE+q6v-)F#1pDK%6lJhOVkpX3CbCQ~Ie!{Hz3`8F zcY)r+ga2onmIMh6E}IUdU|}F#f$vfNL_qW@0pIxZ>)(I1;J*R?6d;fS{1s^6fe0qZ zAAvwURbOnPJ@}bygLx*B0143N(oaM&$e>*oLRb?6>Y?P_KptG6+jl5MrJz&2K_#4U zHN8*+SYkn^!i~@Ub0c&&t{{+*|EwS+bkil79g+eqxt4WTK{*h5a7l@hTmwDu4+Rf! z>42753Zx|hVE!Z2hjs<^A!0AK>1JRC3D}@W2Gwcjop|P{=bn7_>F1w-1}f;Fgcho& zNB{tk(f|Yi_|JVVK`PKuR)J<(XEKFIDM|zg(CMRPeR^R{@zsQ$TT`w0=5DOYh=Fl9 zivI-Na)6;_o^wf3wH=H)bKwWcbpZ)R}Fy!#W>Ui#1BUd^aBw8 z{Lu11Dep%^%QOE_^UMR$;PTA^>8!IrE(_^0&?Ni-!q6z$AQD{vC_Rw8DbyQpy*1Tq zHM&@r8^B=-1ds(k|J) zKYsHq_~3*WZn)t7{Cy8S{QUj5Kx9Mi)IIxz{m$Nl|C4y)e^(CnJp#Rxj@XwEbj?5G zJWiG00;NMwI^&F!&fRx|4tneN%s%@#c?+bs*rWe*&FN0TL(V|P!-Kp_%Fq6f?$1B3 zd`i#{A=(d_uhy9{Xf%_-#Yo-lYb98^T;C)KDRqBwo|`{%}?Ya-Ja6? z`e*IGfdx4X0UE#zf6U__`2d>&0mr}vIdP5-!2hu-*sE%*{ut!ZCw>N?01A$`8hYoj`4}16!b1)RhKL2i5L)ATn zh&7yF*ba!2%DpgiM*PP+=rP5bh)r-Jp-0}7$U@oyZi`@)ob71$xvE@mjQ!){?a*jH zm)P!h3RGbS^_D-#-LH0c93vgQct-~6@E-a=VoFMfk~hu|i~9@P*zV`R5jrx2kbI;h zBS}e=1W+LZEQUV_`M*wj@{?Ebp$sMW$sa0c9;g(h8{fgifp8L(uzXWJ^dXRX)KZmY zF=bsu$;)2)@|VC2rZ9&|%wihzn8?KCwhl9Z1|-9Pv5clPr%6rU)Z?1iyrwT*a=;c= z^PAwTN;1bu&T^XboW-1nJy6NcRuW`um~sQ~5a(s>*;sp>>(K9Kqj ze)uCF`%s}jP^gVMyy2~O^@lx>>ce^1)gB2%;a&$T*aIRJYaZq>9pVoEF+`Ds6|emGEM5tUS3x2$9J)A0JCusZW&bLKrwkpeIe5_v&E=yQ zzj#M1c;Sy{(4rmYpvE(>!HZ+~V-EnB!7^w{jb9w&x4d}AQJ)bDbF^a`&#=ZXn30cO z2*a)aC`K%_@sDs|V;a^dhBnMGj&4{(8}I1hC^^gD{`&X7ZF$Ojf~@P!f-;{P8dC;^t^+yh!*K?>=}hdTF* zK(V^kwEzyZpa;#_agcb!%jktIrjcLMF5?oA5XLcRQ4HfQy3ynK1ur@*kiwed8NV>E zEq?I~W{h_kws=OT5&Ml=$d(@Y(8U>au!b5Zl&u4?$2w1Qmz_0H#2O0HA>p z09ZmJ0sw~|000wR2tXS`5r820qX__jgRrk~iUQ=|6b-n+vdN%?05IYU0Wd=%0MLX) z1Yilth(HNw5rPOPp#n{)Km&Nuh(v6%u=x-hKhjY;BHm*j0q^sL0Zr(JJN)4h&4)RT zK@ANnSQxgbMx$M6+*klN6cs)NE!ZoNc9>clQ2*s6d!JDZTJ)kD+IYq^igAixgrn0i zjcq$#yb3FrzzVhoX;1Buw{O&;3l-o%Awr;pCMe((g8)Df81aTv>>vQAh;|!3A$5L8 z0RVf5LjcG?3k3ur4hEP(BDS6c0DJ=7dw>K0pnwJdV1XJTs6ZlEP=Qkjqa95Mz!ezr z41TC{AK?&2sjYDeUfe^J`v8VE`Y4Q390P3ngt+E6&-u=pV;RV<~aYxDvm)?dK?1} zR=|U;acf$BydlecXNDhgP={0aqYhF>YX3NP0Dx0~0RV5f1OSrYkFWbd>|}315b9un z8z9vjNeBQY&aVe#LqQDzaCdpf2=W39NOcJlFadS&Z-|u+wm=KifN{1^R|)hCselct zm3zNX553fR9{7PE=szU&4(u=v?a&V25DuqD4TSU#?LbloG=eY~IH!`3%?YCpcsmx z*d{!LLPR7;2ZThUB@&+{RI8R(1EoW(g;+%7L%!!~FSv6%7e)WzQPkIIhSdi%a0OQ| zWo8fqB@h7s011A;0wK@_y>MlEKn7QM3`r0JZ-50o00(NY17yGlLC^%hFbFdc0%#x% zSGEUaumfrk2R#4<%Mb@i&;>zo3a5|+Nl*vxFb>S{1~D*sd&Y>%Knwiv41UKCA;u5w zkYN0<3_krsK8(KJjc0b6KQI6=pRF@#u~lv@4(2Rl$#N$?NE6+4@h zU+K^e_Am}3)eR)2iFvk<>;IGv{-A=JlxOCU4)$OU=Adi47Gt}X4hT06{%{5mfCY76 zc)Wx_0e5?arB1E2PNI}wpNNrM*_B>dE|*mk`!EitfC#Ig3un0sXE}W!8IlM$QvPrX zQ!ogP&;^jd5BX(yJ%n&rsYCowSb(Wtx0hD|Igzx8aDypWTIoanPzXV=1%MNfd={1Z z)q%nEm6(~CnprOSu#mct3ZR(^t00;md1JY@PNcI}&p-`!B{r!PlD(8lyd;@b37DcJ zo3-gnc-dhTd77)%X}~E%`V^L%S)9gsocS>ijFVOe#Y}CvYPV@vhW8GZxlP3co5FdS zQ3-JSK$|WxO2qk{$p1N>t+sEWF%jQ`rGj{2yO8mW>xsgzo&mU^j}nyH$)shrxWp8Bbv8mgi?suK`&3J?Nu zma3|{s;t_ouKKF58mqE8tF&6HwtB0$nyb3HtGwE)zWS@c8mz)Pti)QZ#(J#CnykvY ztg2dLkFsw-=z}Uat<+kr)_SejnyuQpt=!tJ-ukWJ8m{6xuH;&-=6bH^ny%`)uI$>b z?)t9q8n5y?uk>24&dO7iQ&9T4ul(At{`#)~8?XX9umoGM279mwo3IMIungO<4*ReW z8?h2Qu@qae7JIQ6o3R?Zu?6*!n#4*d8nPlgvLsuwCVR3do3bjqvMk%OF6*IexlrvH zkTk1KssCiNtdyHrxlXbPpXAiDG#j0ONt?(-n>}lrK#R0{=CjEJpG&K=zqGVOTeMaA zv`CwqPCK>7WVAdRn@mf!So^i@Ih*CgPC6^LV~b8|yS8lGwr=~ja2vOBJGaQ>u}Q^C zc2zm|kU(RzSEMzOe~DBR2{?Dlh(2^wfB9DEN*%lp-@pvo z6%NM`4*U=f-i3POkir<~7l>zIG}#XKz&q)ST+gr!vXf`eBRU6U4ydzSf58u*M^e*p z4A!s@@4yT#{0=7!Qpvt1ja9@4HJf30`b3o@m0KlIGx&)c?T5 z20WmSTonb{0Gc#b{9p!6&;+624}%Z`&+vU)@CE5`2B+{2R}cY+!j35VfP-%L23I1RWW)KVh5DIay2fR=W{+0-~08Q~p z6>?Ar`v3=p5Dt1!2*7X*Um$5;unf;22XZh7`A`UZum{#~3C9-)jWA++FbKAQdA~^& z`(O)i&<3<143MA=YG4c600zR43UL4l2KfnK0}01)34`zrh42l7um_>Qo0<2Y1ChRi zzz3gT4Rw$Rv=9!7zz2;m4v@eHh0qO+zzffy2gz&>z5ES{Fb$Bf2Mt|0rvEgVVJX6G z&_a0-~f3yHwPz?o~X35@)340@mkp>Pa*um_0{4xu2I(Z-5C~Fb+u|4C_f1hD8l>Kn~h+26bQ#r@#p5zz4-J2w^?gMz~NLb41FLB zdvFTs>(hh4nzRrHpYX=X1mTLk*a#(b2eeN7um!(R2w9K}GykvzN|022kOa>_24PSK zpPdAJzy!z81gBsPNze^SummwM4SJ9SGoaO9AltO9PFG=A(@+N~%?QGP24*14b)W`h z@C}%tZr0EXZ&2gTo!Cdz4tv0ja*znr@CKov4ZPr2uFVVs{tjsQewh#(+(BP0D%=_R6{8k9A{SS3e2*p618i^7ZYzq%v?3i#2 z0P5v!3u2vA zy`a;K@XP^e6`ffKm#}q>pbc?==EBf#gTM&KplZWD4~f7FgOCiEsOyO^VCNhP+8*&W zF%NO6(}n&FiI51`&I_~v2aP}tr$FJ@FxXoi3T-eBe&E*T5W8CmRQn+0e1PS3FbJoh z4TInZCEW;dO$}R(4dUDfB25dYfCkv${P)|P#{c9y-LMD1fC-oY>hI3`$=nOakO&!u z)O(JQe9#Ni-V46`h~K~nEI8PW`35Ss^6yXx0I_Tzzh98%<+GPi;X;N9=kY6+$eh1r zkYW|mcIu6sSkoYV^Y^RKF+F;C*^-k;7{Z1vUE2E>Q|3&XHErI+nN#OZo;`j31R7N6 zP@+YR9<3Q5fB^#s2sB9M@7=$I`KZ~#=FeI>f7HgMi)HPfwQ=vJ&0|I@96x@?c=;Qb zHJr9@;o410_p8{xeG7f&LpEj~=%Se7bwx-nCoSt#WhQ|MIo_#&2G@edC_B+ZXN` z{dVCX8)mN|_f#V+oPV%cPB+8;!E7IMzDWqcZ`#QxA9K2~XT1P3ENq^C-kDGvbM~Qz znt$e_Fr5iG!={~Qmib1*4H-hJMjLO$F-IMDAx?&3w|F zXCHs^8FS1gD`cxLwrbnyPWR-j(ErXa<@~ckKKb#pN%n3U$jdq1Yw{i^>BO_lgC4zS zOc|S#=}r&#!PLuvP`z`_8T~r+)PLCW@*h;)^Rm@C5lXYFzFu9((U{Uqb5?$ajp}wpweitrp0po+5Iph30u|o_nlx=rM-CH5Xim?g4jPa@BX@VTmzLmtl{wMLA`aS7tferM4ZiNUCPG%-xrabm<>=WAc|M8h?&gp`wD0_GF)P z77${gU`je^oSAOg=ci#68vp8zf!dH}o^j^cHp{O5>1)5n_IhfeTShx=wby1lCT)d` z>K%IKrh9Hj@2)UeVeiHjZ@>R`bZ(xao!LjCZDRWAtrf4=DCexMI>4a|kDPF=%`V*W zt}RE3)VA9LyYjY2C%tsjYkZqqf8>ctAJ_GfCw6&Wr@eODZ^vDqdFtW4_ukP3K6v4W zC%$;&k4HXv<(Fr^dFP*pK6>e=r@ngYug5-n?YHN?d+)!WKB)i(*cJjUA^{|Q_0eY^ zkoMnqKYjq>KpnsM=a;{J_9H>xlzRqZtAGFh2VejNI6wjx(0~U-U;-7mKn6C@fe(aW z1SL2@3Rcj97sOx&HMl_zc98#p;tLW1Adm}hl+c9Uh(;$mVTu*DkcBUFVGLn7LmA4@ z6gO1iC3J`h9`?|OKLlbBg*Zea7SV`DL}C(^xI`v4(TPulVict~MJiU&idV#97PYuV zE_QK=AZ*G28t@ET^)DvMkOMxpu?}vq(T#0{;~V7|M>@{&jojb{Hny=1a4cgue*|P8 z1vyAU7SfQ1L}VfrxkyGf(vgpZWF#dyNlI4Il9$9}CN;T9PIl6hpL`@3h19Kgl=2<^ zumvCdp%1>a(v`1-Wh`Y0%K*;mbhpH1E_Jy}UiQ+Lzx>JD#2B}Q`GXgG@JBmLxlCp@ z)0xj~CitW|O=?!tn%DotW;V6CO>TD6o8LU1D7ht{h5f@8$YhSk=oKn;w$q*Ogl9bE zIZt}l)1LRlXFm10Pk#2(pZ`>+D8;xJfz1Pzd-za3L$y$bE)<{-g=j=2I#G&N)S?%~ zXht>aPH{p-D#bjfR7RGggfO(EHrr@QRk~7^w$!CBg=tJNDo~G31z`sjsrP`nQ=azJ zr#}U1P=$(<)WwWqIJN0emAX`>Hr1(5g(}O0Y1D}!m2DY|YF4$nRjzi`t3)X(k&YVD zq^1pCUqx$L)w));@^q?kt14M<@(y&-^+e#}-R{D9R}UpDWAk`NsM=M^;nB6PHbs}n zBF0yd)zz;fZEOEzB|BNldNr)_i7Ps7q9-cNNl!?Uho0(zq$H6xNmPnSXALT!B*g?t z_xKW9sPv@Sp0>3}f>LKIM5SAuiL|z=t!bUKCtN|cvd2Yka+QnAsTKpXHXyFHWJ%^Jaw?$M8oln9-z@UOViK1aTVcggW@T2@Uz7k7dpJc5An}YwETaUMU`8Xfv4ldLVi0?1LlEBZi8Ca@ zA7+rlDVG1BjX|*B8KF1@lK4=9Voak1gZRY^LQx1v$e{^XXagu_P>3Z!f)*@DhLU+v zh*+3m$e=({9ON(!DcHgcYKTP}lJEsMoPq_A7{oKGAO$_uK@KZ6aiSHyXh!qottp1C zW+O(C64b#K+?W9<>d^~xRG|c?z(yTnP!D?)0~@E9!7|!$h9*3N1+?%-58m*MAS6K; z1I`C8W^e{xlpqn$n86;3u^%afAsoV(K_8OP2xL!V30TldILyETOnB!VN%#aDj0}ob zcOwXL_y#Xx0Eb`rqY71^(kGHI4*MGECJlvmyyZRbc-Ms9_g<*I@x5<;_uJq926({p z-Dv-U7aS-k9;>9Qx(pUl~PY7f33$KeTa!DkLEsyvPBq$?zd_P$LYV_QyAZVCN|5QK1q0uzJ4hLEL_giD-a2i@2M6Xd~;8>s&Q zl_dxTBZMJ^CJ3Vtmq+;{j(+k3U}&PAK@x4t4xG(hEq@p6ngl(Fdz{U zSOc26{s6@p%AE)~%%d2CxI`$>4{K07qe++$hA^1XhEMcD4W9@!bC3f*a1Aw}g@51! zTWAAefC)%Ag@5>jODKeA(33v!y-R=uNLU7cc!oD91c>;*LO6yWO9V{N17rf2vw1$} zi@tVRLFrqm>XSjYYc5EuyXb1Z&&r2-;H^86k0mKBFySqGppw%NLMAySIysG5`K-@+ zlHtk_+j0_wc#BNhv#84E)QPdF>ODcoH!Ohu3eImtHbj4Q`iW)pctE!1a z0i0U|oW99LT=W}VhVI;<4G{$2@#$;5+Wn{)?bjD|d#%PqrX{5$#w8m@1 z#%#?niG#OzBJJJCjCoTZ%9$(`iMp7hC| z1j?Wk%Aq96qBP2*M9QR8%B5t=rgX}ugvzLt%Bd{K6+=aZvk7nl9$4hcuJlSvWJA@N z#Z+v*RW!@9M9Z{P%e7?7ww$M`980WJMYp8Oy0pu?#LK+Y%X^ARtE9!5*vr5a%)ung z!Zb|jgUf>i%)?~N#&pcbgv`iP8ky+EnPi*B`O3`H%+0hGSyW7eF)qbQEYZXou;I)c zIhfGAE3Lw+iAhb-Oik5XnZG*2)|?pFtO?tED%}K4#OeWBC(f z$rE829Me2a8_^T{;tN|*m0UT_tf~}Z@xfzRm1gllKslDS2^2%QlVVvkWw{$#Ih0%> zmO$wroAgdwbSnNKPA>5q{&AMXv`n1Hhi}NQ)i8&|2!{dPhhm_He0YXo3($Qy25aC4 zY={iyYtHA~k$mWeV@QX6sEhvG!f#-=cVGr=(5mQwj|a(&2EB)GSccRX4uxcf06hk5 zs1>zwjbiZ7Zs@oHr4X82uKB=>)c6W**bgsB4czF4arlN~=#FU!(QsIe{&_=JB*gg*F(PLwaJHYNQ6cxhFI7GX6OYd`vt%VV1z-i zFk09zUU0x-;Du%2u7dE^2joUJ94Nme%SlUwI=HS=ClV`z=U4y)ox(0UYLho z&;vf0hF(A~Oh|-Z2!%M%gZSfxBmD(stx}~*NLw(kQ-Cu63I#o2)>w#A0s948P*F1d z%t>PeOsI!n=z~G9g-IghFIthJLRxrV2;JP3FpkE3i+;Zn1^FHh7Xai z$glcV_06v3J2W<;Azl?d008I zmaMA^4U=Uu+C8n15NQ+{yk1G3yZ|DYVV1{B~ z1`iDfMsFS{+5)ZKyhSFba`K&*YEob4aDiNEe!OUL5 zt=Mvp*3v=V!Yw^98>ERu9QhMQ8Hm;j8=!IGp(;-L#4SrnlJ?}1If)ZFdBR@#7@BcG zlvx%=aTXt(txUcN&)iSM=|gn^o>k^UR_;SMj$>&d9>cQ3Pt0R8)TPAwtG;@y;ekFJ z*{hw%nyeZg#^NjCNoHT>Wn8u=m1$<=Ipwg78Su?YX3m~ve&JarDU0DMdios6DY%Dn zD|W5s&jgp>s;zZqXO3%UcK(ugmgjk<=X$p1d&cK{*5`fZ=YIC*e+KA)7U+Q{=z=!r zgGT6tR_KLh=!U*$v`yuk+5`V7z=Ddl=!?eajMiw2zJf030xZ}9F!+KjxPmLF=#ob1 zlve4LX6cr8>6eD-n3n08rs6^ysoYv``=INgH>7NGbpcd+(ChDR#>Z3;LnbuF> zq`Ol}gfnOZHIVA5rs}G;>Z_LOHK2kNh=M2xf-FFTI*0?QMgy!i>$67dv{vi2X6v?g z>$isMxR&d=rt7-4>$}G5yw>Zz=Ig%p>%Ru^n8+1h%#|6fl~ADv ze-MKxFokH4g-#FyKR^bq;JA?C=4nCfSsIq9B<-cNmFYxmTT$)aD($E|?be3v*w)F{ zMwQx*rPY>gsa)zX=28Cv9njw%P;n6M;Rf#FHtsGShbIUDXlR9Dh=%751Tm-sWT1=w zIPUAl?(Ej??dI<8_U`Wn@9-Ay@xJbGB=7S^@AMwfx~O8~ZtwN33;2F-^``IQj_)dt z@A}s7{pRoQ#_#{WZve;d{wDAO*KWe*ZJWr_aS(?AT@5E?aB*PpaA8>phHJ?6VEBe&*mYJAf++ZK5Vv*^7Xo*{gEM&WS@-sD2lsHt@Nh7PUbuoc=#N7e zcX8ivWpIT+K!#S|aAXJsayW-TAfZ6;245ftSKx#rU-u^nmwxBp-(^C(DFT4a3j`G++Z!m;*M*1U4vx zIiQDB$b@Sc1ZH1(QP6}o_=7(v12*^rHb{9knD%PF_BodYT(AN*xQ4{|_@;OIr@!%W zD26xS_HcyySq}$!00k0q1$an|a^M7CfCpFbhFoYNWLO7s2n2XQ^Q*7%a3}|QKZkTz z_`2^$aaadwAO>Q{hHQX^zTf+J7*J_|c!!6DSICA4cYCPk-kAVnTc?VWZ-+magE{#5 zIZ%Ykp95yUhIhDzdtik-7zb9E1JbAb%2$M)$Adpe0T%%Am=JM6Foj?^1RX$xrN8jS z*Zu$9k9GQpg*V6yb?1FQ&w5|z1Xt+#1|NH0V250A{t_C6uJ3nnX#3$8a&zznWRM3B zwfpYRM{&Rha3BV0hzGr2hj_RJ@?VW?fOumdhKW~)+_!#lH-}{q`QZGAl4plZK>f-G z2v&0p{TU|;(zrR-uFYY?$`G4Bf96OmGe^`PRzadbYxVErKRTHZSt%22T)33tR%Y-tYLo-NN%j_Yak=+SWUPUXtQ37)uc>^RAiC#$J9Z>Bo+ zL*@z`zHms#(hLXhS0``f$`vK+_AT6=w?3Dza_pXW&nXt3uTHtZ&9CqOe@o+-lNT)6NRv%9J-{Pkxh2M0GEOG5oex#7}{uai8EI?Eak;?%hoJ1_>w5DScy3FfK#^$Um|mr`#OWJo+c8rLJk}bdI`Y4vdqE(gnhK?2vZ8ux zPKrhKsH?8x`d^@uQPyFhn;|;lV>p@^sZpw?hz12|Acu$!CZxelb1MD1Ew|nNsqIU? zdOI$;<)RwwhJ=n7Vxk!Sqb#E*);KS{^|tlSARGw6h7~TD@W*K^u4FI41si-Y!U-$9 zFvATy{4m53OFS{f6(9VM#Tje7F~=Os+cC%?LyYdQ9xBQ%vLEFW4r~9^So88W*2Fxs z%r(<|v&}MBQ%yIaxWGXP8(5*pGc9vN4L8_eqYcwdJN-1&QA<5F)m2-4HP%^cy*1Ze zd;K-oVT(OB*=3u3Hri>cy*ArzKTUFFCL1fFq9Emy4zGFZy*J;tX~G2?h6K|$;e{K1 zIO2&bzBuEJJN`K2kxM=~<&|50Ip&#bzB%WeM-Df!>mFOT-TCD6kLjtazB=ozx1LT^ z@6%TvSQ9CJ`-cQsh(H(0u!c6I9}PWdkN4&9h5)qS_U6_u2k!8D3KU@veW=7GGO>wH zY+w=H6~!k~v5Ho_;tDMoI__yuib(t-7{e&WF_N*2W;`Pr)2PNZvayYBd?Os=D91U{ zv5t16qxLZP50sG(hIjlUAOk7LK@zf%hCC!96RF5WDiU;hn^Tva*$~d?hSjnaBTPW$-iq*at3ismopRvX{R6 zB`||2%wZCi%Rm9n&@E`2FX zV=B{?b`x3l;LI`_0DztHw5LA(DNutd)S(i!s75_1Qj@CGr82dtPJJp=qbk*@Qnjj9 zy((6-s@1J>wX0T5Xx(ngk8gxw3tjj^7t*TMwX*-Ut!{lQT;nR&xze?+cD*ZJ^Qzaq z^0lvi{VQMtE7-vjwy=ghEMgO@*u@66reO^qKO!sH$x^nmmc1-yGppIna<;Rc{VZrh zE85YLwzQ@_EoxJ%+SRhQwXS_FY-20i*|rv}Mg(6hbF16k^0v3W{Vi~VE8O7{x46cI zrDMO>KK9)-gyUPE|C}4XdF)Y>FqC9Z*#dD$@D@u zljhYf2dUfMPrf(3=S6RL+3Q>VmUoo=?c{%tE8qbWxWLA>t=-=74tpp#ee+1)a}_Mz z5Vm8%6K*huCH&wFGdRN%2H}Eldfo^_7`Oil#_dfTEZ!1tSj8=N@Qc&;Vcd#$!|Ii> z`aGOt4`Y#@~ z6S~lbJ~W~et>{HFy3vk)G^8Uf=}A+%(w4q7rZcVSO>?@_p8hnbLoMo2le*NPR`WM` zafV~qf)~1I^{ZVC>siaX*0H`dt#NJZT=RO@zScFcdmZdw3%l6FKK8JaZER&Dd)dxz zHnf>7?PpIr+SIlV=F7b&|yy2+kj4t-@ zj}SAm;~xJw$U`pjk(0dSCii%|k2MeMvApFje>u!!F7uhwyyiB)InHygbKhP3Sbj|6 z2m3ci@0}669V8$cjqbnD;F0M=ce)&fuE3w0QR;EDIvlb7My(%R>05{T)xn;1v48!x zVK+MxQ!XO>p1kdDe>>dcF88_9z3xfW;v*5YN4xXA?|%O~-~%sszNh>jpJDsp6R-Hi zGrsYTfBfBrbwO{2=pX(-Jmmi~uldb$zVn`c`eT5YchBto^QJ#N>Qk@!&-YwJRL@}% zqX<5v!_b2Sr2XqxulwEezW2TdBZ6;NQu zLMU9q7c4^)#KJP3fi}#*6(j*aghC9=KpT+Z44^?Z_(Kv%K@!BmJ`_R;m;pafS00WcDVCxso+2uS zMiSP|1!AB-^Z^STLkTc~KU4u0U}7CGLkWaJ30%S@#6Z5-0wl12Fz~@M?7$u*!572= zFYv((v_n3KVk%A}HCCfFUZeKyAuIObVI6K{3=pA<%*v zJcAlE0xh(`DGdL@GrR#NV8R>30wh2JAz~vy2Bbg^BtZtyDn3Rlh6bBiUNkBnXPAyZ zM4$3mUcBXl^u=47U7tS`Bu93nM}8zgY9m5&qY;IW?X4V07)pxm(H^A_h=}4%!O#za zBu&<&P2MCB9wbO4B+@P2>_w0W;T}#7B~ccoQR<=O1<_8DWKWKe8yzK7Mx|6vL z=A~Zl<&>csS~B7HV2s-gCSew)VIC%8CZ=L8CSx|HV?HKiBIa50=iiYNlptisVuPCf7ZsYR0B)&ZbRTe{HL~VaG9}c3mk#+6)g|W+{p9Qcr*l3hbk?D5Ql?Nwr*&Q@c3Puw-ljC#&+lX> zc!sBVhTn7&r`Lr>IF!>jtS5W6r+dC9e8#5_jwgNAr+xCzc9te{k_a+qLxO_Oi`s+f*aI$s4?nCZjjm{hg3s|CXot?|`0Qx-_-Ksg!#+f# zk;?z5jNa&wuBegX5|IvRhC*qQ(&&*&mqiNcgl;L9cInAYCR4rxKX^kRQz zJ*1>H*o`opf;P+pE!e_59K$$J12zbQIXuHR%;`J4Y5#=+FI2-R^nx~=f-uO}-MFaT zSVKA-DL=g5I2;2rm<~0}gE%eJGdx2t9K*`3Ofj?rKa3MUJi|0tgP5WY>a@m_zQZzT z!!r~^IPAkmOhYlGL!^eoJD}<^2*W$jDnE?FGFXE!7%DRq1M^wKI7r_}qS!sztV+HPGsPcB{8uQF*%NM`U0mXhA6mf-LYuI?%&CsHHWC)idxxBiR2! zEDXXR*uo$r!X?B48iWEQ(1IMqf-v+!Bb)*=zyU49f*jbwFYLh}oI)u6LyOj4I`qOP zJVODF!za*!FxbK=%-<)7gDvnWB=7>Ko`Oq0!zWuZBY`q=Plk zLN^ElBrwA%#KJhFSS)@#?*ErbFygaa)cYb?ZqW_YRFzAfA$5}1nX#`!~WltL+Z!#&&syN+v{ zx*H?>!!#s<)z70yCQI)Q;>I+JY_ALaW6B z!!lzpOv5j5?|go%`@XLag)45lA~ZxnE9C7xv;#ee;;!xypcTR(&_XfTYcYhvFT{Z@ zT*4{nLBqxZH55WS@&hD50yA1~J4`Jttne>rg9bAL$IkzQi-7PiB&;nY zEYqUwXz)X{`UBFA!zt84FDP*=7@#d+!Z--8&z`UOif|TRtq4OS{HC!QpHO~=>6i`! z9Fs$}?(eu_14!({`~9jlOv68f!;_dpIP`HlP{T7|DlnRS%f{)>y6EYs>o;Hn`=!G->;pCw z!#Ly;EVqL;$f`CRgCg7VjpA`QMCvU+LmV=Log%YlXhVydL!DAXI}~j=90N7Hg8?pW zo361oZ!-l--WCbb{DQA2)}zNbe78E@3!7Mm?;LyUas1uaAaF7>>oXj9I3Q_1HL&auKNyORjWxzK>30 zNKe0H6LzC07Ik&Ok52z|Q15h7C-hE_G*m}*{OF`fFZBqeA2wKn(kP8qb9Gl|^;T!~ z%ZN2ti?voi4K{>Bf=V@8w>3u!C(2lL68RBLpOTAx>Rh|EUhj1&QgvK=(N*_k?H%U} z$zJUJob4?qjK(PZOcBu`=LX>rWZ#|_ft~F|_F(h1W^?~@N&hw3Ikt@QGnD4iEj_8q zsLYcdY3l4!MVpRbzcx@F=hEfgYzJm@*7i@*Hgg^kVjHJ!B6e;&_GS+^cKS6|#t;l; zOX7Tk;jpKrq(gG*_RyIeZ4YwB2E^HtyU zNp$mp=!H(?g|2oa!>IIywndI8hmY6!U^qk{=#h#Kq%vzn$LNqQX^0PL2vJ}A(6jVG zw1`RRJL~8d1vrlXW@l3-Klp-r>_?iKZDQwvpVVV!Du*$YWs!5?5Z_1cPKWD12gmj zHFU#2m;*KFsgNG2F294+hQl&cvW%_>KLGkCOV;~AZX8l-mKv!)m_sp8!!D0gF>q*& za!`(M`fLt3-CEu-M8Uc0?LV+9IukjKVnZJc0yFXf9|*%9Gy*2Xf*PE{CC~yKoWe5n zK|3A;J;uU5@`4_)`sH!(>ELlMghKy$^4e8L7+J-F(3q!T$!~B_pFwp;k6k`H42r4JzaqS*zC{TkZTd}U60xeYS zDcCAAq{A<4>L+0NCsYIN&N(mK5(IHN#H;3xbE8`F!`!!hszCC_R|5c=LoZwc_eQN1W9%td!?9|^ z+D@(6g5WaaK)N$)${!)TzL?;!#AWuF@OT{#sbEK0?uoPEPul(Y%JLR z!rR|)CEuwC&;BWVuQ~hzHZXs*{{sDeLNC01tit{?aPR#6`^dJ#U<-HPxBpR2Jl%?E zG(-Y43rfGq>;Avwhv>bsP8Zowaetj^+C&ES5egbXf2;T zd->9J>-dq{z<=1@bu;&`TDx|_p1quwuGchkFz4;#*X@_Jo8PGYnifu&$bI?vnZu@Z zpE+y$mi2nNZyvLv)QYuZcC7#1v#k5}y(@Oi+_7Tso*hdVZXd*y2Qyum~msrk0D2vJehK3%a<`{*1VbX-v9v&7&tJXK{0>t z{?7AfYmdKqgZKIK2ln1P)PCn-^Oz4QzoY#4+4IehH&~?pdUxFS5qNKpA487($J?*O zebXiW^NsZPb>G#I@+J=UAK2@Esh{`G5Ab%K=F1bW{yqIs>hAp#@2yk3_5Pg!3{b!U z2`tdS0})J6!38P%EVKg%DDAY=R%`7w!S0dgoeKk-hnjalwCA6B=COxF5>2#CMG#qJ z(Y6*hB=Mhdy7^1Q!!G~K5w{L;drd|eIpdHpAxGS?$Rh*Gj=?3FY|_amp^Q?>DJOGK zG}27FZNv&)OUxtmu)(GqZOANBn=r94Q_VHUT$9XhunFg%8>y_*&O7nUQ_ns5?2|Jq zA(Zeo6S*W(u;-rp3&uqmZPd{g=aJ6ONhz(=(n~STRMWu##d1R23JvVbQ4tk!x7~P4 zRn=8fE%nroSmh1TO=+#w)?0DSRoB7*jWA2U2xYBHz+C;3*infEHrZs6{ZdJZR!wxy z8&j>$TI^y~Qq*Y=Bb8gjyd8{AU`=&}s9zXI65h zE%v$B&~s01oYX*!&eq@_%&ZZKE>+2Lv z{P)xif%ZsiqD4v-Zr)@=s=V-g^C!5$flGWg-(U^vn~_#M%DC+nM~Mca~X(;Je1Bl{lG$AL(F*Il7S%dq9jTkqSpT_JIv+@Z%lfprGA8^1z*> zBO&j=#xcS{Ij~HF8M$GGiL?=^-4xJ*Xko}RrqPaNeCQe2c*rs;_>6b(V;niT4$rJ% zmq_uBh($EwtIw zD1{WM2!}9)fedD7#2HSJ1Snvl4^T)#8>B#nEmT1cPtU$T>hdP!uUinmT?Ji+5(rlumw-XQO;+mH5Q?G z#ynyH!(QA36TE2T9(nPLSg3O=*nsLX_Bf5S3WFB3phh@;!3;=-0~^1<1}20-SX!L( z6utOFEW{@amD!WCo%L*jl9*4LG0`vY@CP)s;7=*G!yj+xLKnzD23r(D7-bRQjkJJ)7S_pU_lLa2*V&s@P-MsLmMVKNFf+8)kO~V6l$==CoUm}NYa8CgNW`v z3h_%gw2}{r-~|Qu(LK<0$34~zJ_j{gL-`{bk$?s?kO2~ZT*421D1;wm zGmbZW0TXo~!y6I-30m;s6k+(nCDgD5Jy?SbT{s0Gk!kS49LIdeICyc4Y5K1^>YYwI@;ncpwBr~4)1fYxK@^I-bsW8TMtl%E4YbVT z8^3slHaz{ge}sb?`3Q$Krjg6Fj-xrtD2i3g@r=3dLmO%)4ml;A>t+9dP`)8qNHySM zjdU>j7}^kqM(pwqO>fr6&35*)4HMcR2QM)4z(>yXp^tk=L~6DnnmLeT4i&v^LmRRf zao!OYOumC>2(-^}mQ%Rl07oZqL(bsJQy#^^jXkOA9(s;4o$1KOKKk)ZPIyM1>AYt; zIq?mD08^jO8K*c8|IT&}_ZRbAP9n`Yc_uC4uRZgRVtlot26cZ2`#-S|eC>^>$rft~Mt z_q(oE4m`30rXKb12-*$QsBSM_=`d>ii9m#+5}E7omACxm@g#P^x9u;5FMNU|!uGD6 z2xwXp8Rk)+deti^@cJyf=f^e~X@P5K*|PoZRrRW^6LI#d_xdWE`ABpA^A#p{rG;Z@9Qzo`m}M-Rk!xEv@_xFyzcFx`D`3{wzS@DGe)Tu0^+G<> zicV&=QfbZjAmi7K6g>`e?0;hY_y7L^&>A>KXi&ub3Xp0-rewY)0q5lY7;yPa+p@<#ryuUOV^139ojgwOr%&)#N3Z}5in2vB=&E@=OPCT~=b1f|7;VC6W718(f0 zbfTv?eq%PcLwf8jYjUHSJmPhTV`?IWb8rq;h=XcMXN9B#RNo`D*)LWcy4hagBN#$kqPa3BA|A>B@|46!jA(7g5dJ|8ipvZ_ zYzsc27tCM}_~0J~;TZlfH#}k=zQMatY!C+F6#9S<79KfO-o@pFHVbrWasDiT3!eSV^0g|4<8tR7^LSe;D0UN^U8$v;|Y(dkG zK^aeh7REt-Zt4&fP#f*?F5%@td_}a-@Mi!10UG{7ioz!qzF-IBpa}{Ajgo)~x_}AZ zfC>0u2^t{@$e;-Z3JaQG3Df`zu;2=+01dE!51=58XaNfJ01C8$Js?swn6fJ_L7Sj! z58fas85PvIC^ zDX)|&EnaCXafuiH0TZx+9e%++OA#AJ{A%3f)z_>RAKHKlc3?9gL z;V2P)p@BT8n)qQFMyWmH>l8x4u9EQ>W=u`(3bR6?gaiwktbrFSj21$n82({S=ix5A z%A9yX7mgtmwBfoA>=~BR7A%dd%7_=LAw8V}Eg5u=exVZOq!_H>EytoPi($mxa;g}y z7=-Gprph`;Li{pxRk8652TxIm3=obi$B(fT2Bz+1dC1Q;k z-XYd3W*k6de2B>!w8nz~<{f%L7yzvp5X+W+0nP?=n#hw;-$^Zi=)qI1T%%K?I>=-D*8p2^7e!*S`6tQ@L zn~vd^@HNoV>eCn$HO`M!akdOM^i@+MXXJq$^nnwb0z}^63e12+pb|ZZM&`<694v+c z+wE)ifuoKhQXrCYgb)xd2M{?YJOD8{x|ZkA2Ry1J>u4wAS|xLEBR!x+Rk5X7a-trT z#6GCvb9hE>!Q(Z4NNxYA<#1F*;EW@5c+PHfws5u4RXNWu%jKyz$gz=pBc^PkQgLitVcT-T8cs;Kk zkatN$uX}%{dcik*^JI95Bzw1aLA*D8{Y8A)w|$@Fddt`IB*SeZLw)VH_}n*t_16Qr zaWAKhXN$M+3eZM61_JHRfW5_P2zYC_ulyPi0mX2EvrkoTmixS9W3bO{9e89Ua9qw$ z`Oalo_IHGf2!8)xPk<*+f(52(% z{$dydNw|o0hkO_KewA2=mss>Txc-`0hFv&{srW*T_=;P`gnhV*xwwnJ*NeRuiouwQ zvAB#`28p+LjGY*a#W;x7_>JMXhs}77)kTZNIF6+lk9YX^l=zP0*pIuIjs;nG`_~&+ zBa1{ZZWMWu8M%=i`H>%)iXeHCDY=p@`I0d?lQnshIk}TP`IA98ltp=zNx76w`IJ#P zl~s9_Sy__>V?%}ExcFd}X}Okd`Id1xmvwoUdAXN;`Imt?n1y+miMg1K`IwP8nU#5& znYo#r`I-NrIhv(;nyI;(pZS#wS&0s}@)j>fq=uurjT51Fq@h=&L)tPxL@=}@HAourJi4Vj`lVs| zqh)%gNd%;A+NE>4+i?1MYdWWYdZ&eYsEN9$jrypOI;oX4uJ!t_0lQsV&#wc!unoIbH1GZnd$AcCQwAGVa4)hYd$K9JvMu|vF*~z0 zd$T#avpxH>K|8cXd$dWrv`zc8Q9HF&d$n&bFg{}d{^0W=Qx1itA`X_Aw^+r%1ncfWP_O!zxZv_Zf7 z`@j3!?(SRqo<{m=H%!jNzX6=?Xg9vw1b1!M!EHA=bJunm+`lc{zsH2ZH=K7lJWc=V z4!}p8#3ek%KYYRoyu}&Z?xxSq(!|9noOfRwP9WUDclT*He8pLu#(_M@g?z|wm&f1k z$dNqBm3+yWyvd#X$)P;TrF_b%yvm_`0ASlM0^lFkd$tF~BT{;2LPSWxdry{nNQz)V;icXMNXsz1MyH*MU9Qg?-qGUGxax9|+*s2_V#yJy8FYsMw)B z+NFKkslD2*{n}ssFR~ojA;j4~C5^E?+{Jy|$-Ugo{oGA`FbE(4*1f%x7~SDL-sOGX z>Al{?UESH8-DT$ctj25Z#$*mqV>meZbREx=5BZ?@TQV?+2Y!!dW<&_S-*1>?5cq|^ zIR5td;N7_5H6G&~-s9!(<5yVZ*A9mdzKH>uYLu6W0Vd+pH|04!;ZL57r&!=?e&jRW z<_~!OYPkN~*yCYd13SKe16eSR{Q&g+cN!2x-feVBBvnd>KWazedB&hCZf~JJKbl@? zM-J;t4s%+YY$^6_B@Xu@FtVkv=`)+`S-b7s{_Q(kq$BR^BimWv{_g+rKJPpGHCCla z^#1Q{&*<0vACmstfu$Xad;ikmx^r9q5}*Hg`|%ZD@^u^WcbmF%Tj+k<@`D>evANUJj zOXi_W&p@W+Ao-Pl`I*1@o&WivKl-JA`l-MAt^fM5Kl`u|8HLBF9Od%2waP?|}e+dL++}QCWAAkAynLUd( zt=hG0+q!)VH?G{dbnDu^i#M;{y?p!b_4llgP@)j?72@U3uj0jw8#{gsIkIHNT>n+P zj37bguN)zIw6(|IyLqHbn?8*?wd&QZTf2S@JGSiEv}@bGjXSsQ-MRTO<1^0QJbT3d z6{;ngxANu8n>&9FJ-YPe6RUI0>{Vmuf1gADBMv^i`0?b+n?H{}z54a++q-`cKfe6= z^y}NFKabxt;6uS1wdK!n_YFv3fd(FkV1f!RIG}Y934s3qgxPIWk7pl+_6~y@ZpdMW z9)1Yof%)w>n16!+C}4;xuE=7GF1}ctgA)A{;RC_!Q(bqW!N_BeKK=;geIo)VoQWs~ ziDZ&WF1ewMGe(#|F#OyT7HFb5h-Hipj+f$bf!IFj=3h9WxDz1 zmS(CMCz@gGW`|o6xF@D> zzK7+LnQ25AcNbnsX{n~3ifXE=uF7hwjT#DEqJ=FQs;jo%ifgXA?#iom2>kl1jf`4o zXx>qp{hJOK!R5;tDIG(b9Tu zyY9XVZ=DM)@NJbC7D^g-`R1#yXPyy-TEC@rMA*It`>U_P00SIv!w!#|uB`t^TPwi| z|EuuA8W)T)zaH0muxSE=yYWAxN&IliDx12%KMOcOFR1pCYF$}o<&zj${P+WrKl{v6 zR?k11g3z zH|KnIV*I>A_C9JC%@0IoHO)^x6Cq8u&1>Um*2H9swzJYcpRG67iZA}>%P~(I?s)r* zbIK{deA7rQr(hEcB>%Jn$uInj6U#gAe6s(HJ+Uxz3MQX~!VDy~@Kekuwpde^ErqmW z+$q*1LJLx%gfjXi%kcBdDWQxr4kVS2GrTsZgtHHm)?bhPdjC8d+;_xD>%D*G3_rav zn4H2(J>v)yODOH=r};6{U}DQD&$MrgF#Pax2{pYOLks8qVkp0u#y*|_31NIEAKDni zFZL0@XMCb^!Z=1FzA=wj#9|!Ju*D~e!H-i+kQu$W#4~tNjD6%Idn|0>hrrY_2RJ}j z;u2M{#N!c61mPEhm_`f|kq91gpcl;GKqLG?iySb+A5#dzI9}I>CSYL?wAjHQo{@x5 zoZ=EYg9Haop^Xyg;TtSS#3hRH1{VKxumrS-g%pl)1~Rmx2XK%AALTGRaVe8mVFA!sC%&loXwZKUM!9$FFto<<5}Iy0W8O zAtTutSvL}8bg5*!X0~fyWZX&-;o4+f+56f%HzTq~`jXU@G9vePfB(UGe9q@Q9-s4h zzh2KL3fjjz03Ad=3j&LP9&KrAW)h9UzW2@P7Ic2ZBpyJ6FuVQG{` zom{kb#Y>(Be9S$n6k?}F{@`w%1N$sZUnW5HfsKqXcLJtIgTcUz2#q>tj%E?P&Bsx7UZiCJ3k>8s!+PVb zBfrONmsBPeXb_t3X(Os5_!^g}ic&mNLh7TRAH~HnayYOjE3y2Xaty?^FqoLpe|C!Y z_)2-EAy*!Nr9$38z{IfU+CuaY?hvtOmyh?R=w39wm&DO8%yZ!cD5$-g;5yn9w!Xndcn9SEVj&nP zGuJ4#zeo6X{N6^7V990^n$rPdvnky7=V8B`X&2#fUBQ{Wc(!XPU4##c%mPG%7|bT@ zH_CEg`qOh9)~&rjzKkrhPt&*Cqu;*KzEK&xzd~4u??EVvIXS8y6UH;t zXi3KC7{uHJ$6Sw(F^rGV8;mj8j4=bp-j8Pyl8gG(PI4{7pIdGR7`=kPx;>hyce&O2$VY5*D%X zg!uS4gZO8I@yVOJN`%8#pImXh8b0Ej{G6HDyEK`OB+xaJcyKU(3t@xCSS~GzDM|6jsFbxQDfSnW zHw}`%@`eXr6c6@EK4_92I}G#vmGZ<#YH3gGKi*WpR*I)j3T`50VlZ{vfXL!PWV$DH zDEWL^D{09(3F|=Eus$F5TkJ=M_?ETFN8aRZ>r^lO^IQop8uL?gBvb!cC%e6W4!D;Z z=0n^HJb!*jLgMK8kLNFDN|_jE8oDMkqj>iP96mes(lFtY^j5IQ=NBC8FE2a3V9QUV zND_Jtm_-38ye{;#+X-ow?6049r(xGpy`HAs=Xw3_AmS`L^F4Ov{`fHaqZ_Q<*kv96 z{YcB8bmge`>G&u-@=OphN+f~B-#bc#tKgEgqEzr?TI58!l>BQ^<#e+*Nnf9*f0cXn z`d<1^?>E1-#M!NR6OJ;7`57*T;)~!jT3gAU?CE{ose44>Ju3Vj@PhTL=sMQ(U#T#u ztAg1sZ`Ph8eq!N0XW*HG>BZ~m#q#hUMG31|c&bX~^lmyp9{v-ZmCFU^Vo`{>$Ge5s z%I!fvx5~^*$k;d%?)15c=oGFJ4i)v zr1?#^R#uz>-Jtt3+~|oxKz;Ulms-%h^hR-s%bMNZh*6C_vC|nGIXEA z*8x}htRzJb5$o8u<&8N~Dq%dtWVg?+D~4VTNTwbm;m;J|4OBSD+G?34=(d%W#-5*a z9fHCB{fU8U+_(CQg>(|(w?RtlBp7Rpc7a@a0T*1X97|YY%MptHgEXMv*HvNuIzi75LV7aci<-GQa;5p1@Hu3O(Il)5f8FV! zYUM3%e_wnW;qmXS8e|u=oA%ZvT14VmS?rrMPIUCNT#|eXQw1u8&qX{xkpY2(uF@d( z!B89*e8UMoLarS^LEACV0W4fZpso`IT?KfLlA$~jP+Sj$goQmAww^1dt4tx?x3GwI zJZzH2fKfshF)lY$Rf1Fzn*}!qXtnJ~_$UQ3i-EQ?_=>bz5hGYPjs0{FCJ_U(I)>a5 zhK`boyGgKFT5TT4EvQOkGw*WrB>$Ql{iPJyh_pzUZ*x{gY$K%<8O z>{SSKC=S+1f%24SNewskt+Z_Zf!g1PBE9STXs{7lbKOYY?QNe`6toiqjkDAmC&9Y( zf(FQr^f|ayt4H5)^%@dxX9N8l0*(I*323R!_zQg%(l&)|Xv4q;sE~0AVg$)CLVeP; zUzBjEaej#6O~ zk05hc_$4*YFkoU=0MyThQ50yHrNQ`piFidL<^qaOKx(})%JBX*7t`^WuSck4&4#;Hd>)mmPRo*xurs76z!9T zHVNZ_^dSdIi23__?DZIz;R;yYO3{AL!-4Njc~nTdCS($GtB%3Y#zMw1kRx4)no~y! zMx%iOt)oItP&Z@=qu9UDi4*q6#VV;G07ln90yxi#(zGYTrcZ- zN1+WQsObW{aIdKW3F*dq^l6Sh44KGenQS19$d0K8-gl`ZPfiDO44_TASUyava2r2{ z0H*ZR?m{y#A4KEmqncw7Q$e)`GW6&nVx7Z1@K$f$2&A}BOKsn$lk#wL5Bd`gdsV9n zZg+gL2w$Ct+_lr_B-VNKLh7jU#{a5Yi0~bNrnm`Y91EWVkR@PK z^|b0d3gn!vOXkD22K;R2_g?l&wdgGPpJ%C?5^0`%DRgwowcv^!s%kp}KCWX`eheY5 zG>oixw0ks?s7*!lrR@LM_h@g=oNdXB9^0eB@&GNlNXXp-$WR=+$p|zL3m5%{5D$C! z>LFwm?U|pDI7g!Di5~Q}KsoeI3eO5bRzo;widI}59d)!K30;V8>wSY=_$ZG3 zd@oeP2=ZXD3G1rTfQNk-glu6af9M3I$&c?OiM-PUjPODI^Wob58p zbpIj*Z}Wg#J9&H}YP8X+NybZyny}wx6K^-eWZob?Vf&MaYBzJr8dj=a>-hYdRJDYE zSR|@R6pqnv^{!&5ZYPioO0k*Wr+ppRr`K@#9JP4kp|dv4l@`!Bvg2mOhvkz&vBuB) zD{Z61Pn&y-ohz%Ks9KGX4dW3=2LAdBnax|-J}ngJPfS}%3VS;hHeEI{g@M)g(EHi$ zG|SqlWKF`2pN;P9G|_!$#44fjCx|@hy3fV1r}Iq|A^1`f?3ziP*|+A~Lf_f^v`J*B zCfDm~-7FGrso5&aV{@d=eW$0W79msh@t|O&FH7TK{Y!>DENK1P zA{r*T52+{XCL8It{eu?S!g4EMq7BeK;?Sn=&k@|@b`mvt1ma=mqd7LO@=P7uJ8X8} z6PdgFIJ6KTJt1=i`XpI9^CcC~`l0Re#0&RtC&b;9lrOZ29g%? zbD1(ca027gK)9R00KM1g$h}OXUTLQ~Q}>?E;0?mXs1LJeez+kdVEKO`|J6u7zpTV<9>7@YMNlX9$mvbX1B{sK?h4ec{^Q<(vNWG|g3XOH_{aL$0gX zf0(7g#l!0Oxu?syrc!LSOgm=ljm;~jo5yL>Z6rumWyOGT0~fqHIi!xH)}v!adz$rC za{O2PGwRdw!tCsxs|P-@Hg#W76E~NB1iJQr{k~;(>pe=)eak*&rZl{=X-*VbD?k4V zDEW550WNikTjvbi=KfK!eC`f1?z0E{I~Lx31YbwS(E-ST=)6`Os5zc_ zxnh+0)Ag&7l+SWwJpETPP-&BxQLIec$D;d?y*651RZQ@$H{n^ITpF zh1F*!x7IGI#me)&w);H!+hwZEvf62JuHGno^e|0yR(=^}bLv`Pf6uGDz3qa_pIg_> z9(Awt(aTM4(|4b}d6026 zH}e@UUpXf7tyssitk+I0qXwCT+?S$rp!`=~w_GnJ2u5*`-!#Z?6^1Er8MNcVrGV(y z#gmt0o||Ttl=i`ok-`nLa#ck$_x*Nn@;*$fQG`g6NfPYFB9W}fs9pW@lV5iSUf(!z zI8z^bRsOQ!ju~5wiIu|rtTMYboj0J9dio-%(c1Ky(UW2FX{$zLa`?Ah3F1B39p8N)cxOMF!CM> zL*B2qiY;yqoTTM?U%GnDRC}Z1s-Oe8S!PD!X(gu_#w27qC!%S3e>#VJ3%w{egl@3-HWF4`w#FeJb~CK$hAXk443Jw0*CqhnHaaj zqmuKvaWcOQrZ@vE9a30+T>F$l7gBok!sy!3qcn@VL62YC@TfF={ub*$9scjEif!P3 zXOz}oN{8y-jfH$We3)k`UjNnHYQ#9dFxvgEOKE}W-~NcwQ+*cXHEiq!l(hJS!8AAU z^W!Lg@niS8$-5yQ4fCdlQyF79DoWWs9YG57hQu4`N$wn!O66e#Q;Xz-sB5wP?gFRgwnB{wV8vMO>COqVa zU9>=8Q4Av6x4Tt|9{PJy|5R`KHcR9{ywv_*$3NSR^zf5b`jVLC*7?&Pzc$S9ETSt% z?o%%}>pg=jGMB$|9BP8~Fj1wSm$Q1)`PWvzdvbljf^J9_@K=5fL$2%JXscKL8-|IM ze&q1$Qd6P!>_u-n%i^HxthV4+Ow`@$$=e3jH`F(at#m{k>1UDybw$N*Cm20)It_zVUBHhDwPplnaBXDq_zFJ2Zt61yB^XzXPE zGV9ADi5o|Tm^kya0@24(Ce4O3#)xF~)d4vwF>N!3^jWU+&uIqL!2?%QyfHE2 zck&>Qoppr%V&e7u^5{h8o0o%cCpj^$GdG;|Z~VPY)b`^O5i8S5-A#HO_>MFn>0)5_ z*F2+Np@939i-||D#oJ3$3aFJ;4dz7UteS)iI%2N3lY{RRid&W$J$ALo{(GlX&+?r` z(K`$J?dc->v*k7$u2${CsUr%et6A@HHp*PjzZ67`ql5g54r)vhMCuDJKe1fk{NWm zaeR*&w_h7}c1Or0S`lWO%&KmOolzKU{-E_C4wALAWbdX*UwG~L)IjDeFN?L>;-_nk zJ^nV3AV2=|l`9vdX8~(1;_|c1=}nVGp8n4Sw3egf8lt(X{9E1Z(pNFfCHI)vhvy48 zhsWdAS!6dlq{#;j=NcOoc~3X%>{cew&c8NfBa*i*HeO&^$}d+#-WpX2gkO0;{<8qv zK3nzt@~q9(m!80(ffa}wu4~{WI`+@a>d?nfI~efXrucU`AFV^INcc{$k=p!+Be!1Z z6m+};qbd$*>{l8g4<@B|9M4t6b++#$9n3ExL`M7Sr{%hAlN{F+t@|WWsyc8^U!ul% zN7Vb};>$)KzSzkal(Fq%3x3c1)zjoW_;mN#;7sPF1Nz<8tG96RJ2LC!=FQ$~J-)g1 ziftN@H+Q@}Yjf{$J<)t{uk*|j8eZF~r8B_WO{lsW)o!rnC4?B(3Ez9o7wW7m65JhW zdbP}kd-2w|O7FD*lLX5}tutgNHqi<~uy8wn;gQM=dRTFSqutHoEMita`gS(`zxF~{ z>&@YCSZ(DA|HE1$syA!DJa6m^AJhDFd=>8TGokOFKUGfeZ~7-C5fq-Jy3Hx?DcYUA z?4ngo1ky7O+8$OeoTZYQIa~ERe|lSa=IUMaYmsJ~w4)81f4cU}`%Jg&GlgQlwg>Qt zrf0pkyb~LN>jF;$`p@Rir z_+nI0suk-+=N~t|uX@#{O0E<;wAjN=FTN?TsW6YY?nMndXldMB3%n4#Bnx?(>z4g< z?EJ~H!1=&Vw>Da$naO+}vu7*I=+_tN*QqA2d^zmT*Jg~jeN;@{E{m|=FnMx)>8zDN zU;Uy>oW{Qo!e*a8HRk-zK4@6Adl0fPseVwaulmJG)_ZUQz_xd7jOL;leF5<2!fD4J z-fVj4=J@7E23X-wWvANew$0IK$?2bV`aiTOgEJsOk2o@ljSgaA0!bR2rc#%F4)s4c z-7D#|JDA%$o~KtG4oK6P$|JgdbyAoqAJ(Lq3N=`bH7A%g*}j(#x@v-xG}+&3a#UzS z9#!P3w5VU=%hsJ3KMw}h>>RE4&5o3_lT_T>fb zE8n$cPqfh|+LM$>VM=5KC6Y&3NANH*{yC^F3vLjvqw-cqwL<55n~oYo!M>oQ{#{4o zL`M^q-*%LS6?CdsyowF1xC7y>4LY;;U35V z6>Ub+HJ7<*p?33*@l8wHn|IxBT7}-UPU4d#I-O$XM^Ot)7#+p2Qs(;)HNjH_G(468F^?kWoF41wGI2dR`}bIH=uaJA>q@+T`CC+xZOP z*9Uip>MZsQUK$&w+ZsC0qr$(Sp*n`b^pTn;T!y(PhA=L&Vv4R}cIb0qUS`7RP2ts8#TSEjd~0h3Z zV`P+{_P*GC#Hf5EJ!YidT`n)Fu`JZ+A+MJZKUId-JwtKc{j{l4ihH8b`J3OVV68|yXw+lku3FLUBKCAA8| z0Mb_zUT7F{lFiQ*k+dZFxU_b`QOfB~Qar|dm-O#ZMH9?^KQi63%>jo|uNPo`e58mF z^&;BhI8^eUy1xnv1iIsr{767o>m*MM(S;KKgaj<2#JPY$4A|`GV7zw*urQFb(wV^1 z7w6doXS_Lga$Hy-$eohtNd$)<#yts)_uK?}I43f{0XmU^ZoD9m!#F?dkK2^EW`VP_ zqsA4FM$y@rqPklP?33kph8?*k$4;(o)pks@83<)gQj^qCfGA<=WCYR_=VBJ&@G=0y zvTzuKbB?y2jaFYFT%L^%pc}+^VWKextRBuWN@TXH%E0^1QI0eMZkE{?8z-(Dt8Tz* zCKml5FisT}t;8E+kB>471S%fJD&b?oz|mUHAU$4C1QsZ-9BXtKV>umtb0b=bM$ih3 zzQP-0jfqx9gAA~7@{}0uKwyH(P=}}mG0Dh%al~zVxOnu|i0-X|-dpe9j+Uue)!AC% z7C%vqYjD$_{QQj+lZWrV9M+z{7VK~3qj*i}l~K0Q49DX-N}biU4J)4=LnVLMpVmH8 zW03`D`coRgNHX#}DOL*{72zDidkB;VM;ejYdx&e@>LkbsZ}rMV z5LtMT`Lf_B;k3X>X11i1IW|F zdIPYiWx(tdAM3dpDebIfF9}px0l3o`N&I^Z0=A^&+~hPc;xJ0w8DxV5+BC7kmDxb9 z55&J_A9y%Q{t!ZKCR{iKp-Lmatn(jF!&3RC)Jbf{&LHK(81<$YKVH_5_*m6Lpt^Ew zc2TSn1L#KqGPWwFH2T42ly(MClESK|9BbXg8otS_h$hHlqQe4#l1(uf$r6InR9rP6rG{ zxUjo{7tFX6d6pdYDlG7ob+Z{!YtvRP-AR~Rq9#4cbJNC~Gn)?+BHUQx%^mHDiOS&| ziF}dpBP;m4%Zn>6FN>c{QyMQ=Gui(BFJ6$hKKd2$j7xN+zBN5=D@snFxq0j550~6i z7gCk}4E9QRK;;9tYoV!Yk-clNy1+r1WA1$yB%WY7yb!s&S^UAZa>=zy-DR3L?*f2{ z#ckm74@D&o%ET?VdV9A9Pq)T!x26=g<{Y<{D!0}Ex9L(xB-jlp`3=W(N0g7?#p~XE z#l1(}z1P&e&)&V?(|sV^eK5s+D93%c%6+86ee{F-*pmB)AMWF)?o_zP$MYT&S3E{e zzfBr2^#+0FS>2abz_TeHpL0Cssyya9JQhB9EG~I0{qR^m^;m&>uAcW?yW+X7?)k;k zbHm>AtEcCG;hvi*KUS|LOCEwE5~J3Agu-(OpH8V$fNBXH3073haz?}0Q&|8*sd=|&{00;D< znHw@e@HCe9ccj4T_2WOYP&;RsZ2m+k3f}MF1D|XG>E4s@37%g4Ge)sOHKF9x7Al2s${rWN%$ z=v}6=I|g`BPhg5CWuk}_r#lhnO^LGz1lnYP+=#csX%9T&%^%go1sV7^ucX!|$ht-Q z+5h~r_r>SG?%xqqzr;Bfd#se6bIfDs7(IN9HWp~ZaM6)tb(>-=0$J`W$J#ry8lyqs zyfNy^amsZ-V`o--VzdRAO%EG4BFSfWf&W43(;x}6E3&Q*O5RQl40H~gHGhnm0qcEy z42HaK-4YX_9BbwrVR8-)eFyS%R5#CpFe=Akm1ePFRM{Yu;e29kdz)+zmnkh_nOWWB+_^E3F`C2SYF zSg!k635Yyuq<%hXgOuoJ%~9Qy@^}bj6VZbPbHN zR^E4^#8~hWW&?pvhcOru5FH*DL1ME9Pb(<#D|-b~5TXAW;X$YqmVv)p?l1aQK%NO( zHVMy057ToKp1q!ZeeoY(2}*Kab5K<07es(pJOrJ{9XcWV@8r$jN#ft`R6I-WZbb7GhJ=9X4?vpieXDX!sc`*I*nbh>;^F`{ z;%ScLDaau1%Z2@oi9Gak=A`^6VWB9e~!w(ff^8bCv(TIj$4p!KjC^joFtqfM& z{`8!Ma-Qf%v1t+5=%#Ndk1tniwLi-a=GmT7b}EVSzwUo28;uDIHz{aHvZ{PMFp!-% z{iA04$5LlBLN;9O=-1cr0<+Zf4NNQ?@TmaRnT;P0LQSEzl;Na*YC~pm?-sv*@dkU!O~IBbfP} z2{p}xjf7tt{kPSB((7tJDocbtbWoj2+A~w0Ym-m8_SO2GiRzAV?3nVN-(GS~RDR~W zcjfQrF1?Gff3x9Xqqm>o*!bhmxcc$$SLKc}-{!Vst2k{cY6dQ5$+(gE8D7zn&n)-q zhRtm%>t`HoWNP0R8Sh#G-M)SkhrQ45v9+P_zI)ZZL;OpC$dn{mLHT?p<3%eu+|3I>FJV2C+ zJ+W3yy%GPp;Qf%bRE(GI`AOT_F{KhcxkS&N0pwk zj!^xS1y_-LzAgQ4?I2kNs-Us=lfQNZ1vv>Yf>)e^NYg`nt zx#5*B^Xs*NT-dBRShUX8$5=Q|vs+)Ljn@EjIYHt5s91tpEusbR;KR?wEZ?Q07TT4f zFVnw|CXIwbZLh|Ev(@O(m(1(!HV|19eK9DN7dl}e+!w#}v;D9Ak7imASM}w=AAR$! z-61m|>_s9piajEM`#tC~k*1_9O3b+Y?|kleySBsimz}OlBfeXIt{%<)GL~$>_!`R{ ziyc4|`!u_u^5e$7P+8KQs!(P@6w{Gkhv(%A5etWp>Hr2^m%J%@3^@Dj&>R8gK}Yj1 ztPE)Ll*b6u(V;>|mUoan*$&?5*h{t!f$+iFArdY|=B+Tyt%?8K{R;a{A46!wlb#FA za`CUb9GH*$WTT*N_cKS*J7P9_C5n-L#$8yjmBN`fTC9op7uF672N9P#kk3?BFY=8v zsa*U~DdA)*BH$gTC;h81+2?IR|59mBHdQV)STF+;RKt0R|6~0A@B)gdVL<2NRlBg0 zhgkltL4ED3FP<;Ni%Po;8982knYkb;aeZsZEb3}nzMz*j8LVYisn0wtVKqTXDs5 zmoYa-`7HX}g1Az-lo3K4k<^CKk#l!|*uRy}-n1=Iogez}v_(FL_O?WA+i*N&PCoZ= zp+x<7XguPtJP9CFstLJ8WpMQJz;>nD0>e~-szN?8yHr>D*2ib}74nvKmuyN05gs%x z|BFIWhDNRvFY^_OF4;*L*?gNw?^Y@$i>z-`CEAMb%(E|9mb*@uJN|j4=fPwC+_}3tO0mLGNc!H0>!;d$#Y$H@ zX`A_PpBlRrt9-Jh?Y3QKTGte-gBPVA9DkeX{NZ2z-f^vw(`B}2?t5s=Ya_Y90(X7e8kEI z0?+{r^)~=OWq!p30Mh|*x z#B-&o(PW=|?uqA;wzu6!;Q=gXubvn*zuy?ikazo9nugaLXJtoJ1aTD&X3}jrPRi~m zZoiT|I@Jk#LB_s}HsknS_BYoyk2wMU=-8|$_WAiM#%B{8RMvYf3b=Y{sj6^u zT#pF8fqiJNxKvLu3%=Y?knB5cz3%Qi#!7xA@0!DQHpAUyHOI zS^vra)x?$_=6jo*YkT9zAI)3Ailj%+WIJXxpGgON+bSUiUs}~-<0c^=F{?1d2^9_B zzLk^v>6f-E>OQ${S2lg+FE?OfrCC=~n6Fa+bm(>Wnw*>9IZgSo-w2a&y=`}s5BqiI z@9Cn_fQH`l+dBXzUI^t0BMc_PT)G3c#WC016x14kDOk2KJ8VU!+g$bE&^WlY5ebqF z#7BWHa=Tj^{Cu^sq=7w?_DNH}$iLKE)D~IO*XQ7F>&&t` zi~PIs2FCfE>4UxEs=Eo8q1iB_LAK9n$u13gJPz2e!*?(nXSI9d_1l4IUsO__xr15)Q=v=~p-n)-P z+uj1+J!Jz~Q_dF|cSOZ^n}!T>yi-hn=kw?r4x49kCVG#q0s?sP+?!tK_Xg8to*0hY zpZoQiP(!$~6PXsW^8R(l?;`U66`~#gUdEtt@zsPfqvy1V4B>>wGIY7I$M;{Rvo;rB ztACSf7r^!A^Fpz5SJ`MGmMfFa`=4CIkm>#IU)i*z619yoEz2Kd!U^fC!u$|@JpAuo zE&wK}F~Y~`&;Oe=_!gvnZkQUU`a838s#sIvU0M*8C7O4vRPWD$X2>NJKx}2;2G;Q7 zi_G7Jk|t%htcE9ExBM>JDI};gX(eaQ{VrA>+cN3dO$k~M!JqedtZvvMmf!um)WGDO zdHV1a!z5646bKT9*RUI-y5Cv1zq?yIY*~4Jjqi6L2&3bO6#9iO6j_w8_*Ih{+N5}) z@ArWE)H|*~^*>dCW99Y-!&b#FxT~1+-0reoM|Mq|%{p=(5HDrAW8EQAnVPL{HhJk@ zZueC@$pEO)dn=VxtXU}HA|mj!s}K8P{{rvEn%d!+6i?k(L^|s7g=S@94!z-aL(%0z z*$dLf*;BRE6j&9GV6^b6n_B7dSXu)h@S^bpOVvKo!NH*^^||i3s*804-no#)NJ$=n z-^2=`*uz0`gGj}>b^`m^7Ir6$Z{hjACtmB{I`*E+=8o!A?y;^RlW8AJFurQR-{a9WS@)Uz?l zyFZOF?c`E@lW*p-iWioZZ_4EeCpn_m&vkC<`7WP<7}FdD-@yr&O(W<2TgyD>H#VT) z*ah*RM)8a*121QMgxg!MXNiXnIBw-FT2?r~N=P6@_^zX|`x>&H^zD48AjMk!2p@G> z`jyrta~Z^!a{!DsCjbqG_pWdNh*5l(NUUgGEE0M6l=TuZ3B|j@6%GbK)&Kw=S{^_q zP!Gy;9-tC~0tADZ0Q=NvK&Unh(4@n85tkS=000Qn@c`DqU7-A-PTt((ZH=iJlgKvm zVn^YXRFkp2oa2-K0E+{1-FeCO;B~%+Qbw~JG8@zzb*7WtFBbUxn}zd3#*t88E_@fh zRXkZaEeX7Kss(YKUFRJQ)RTaWhO`)vOzY7oBoR>DQ7mF4AVeGo6$7krmtX)~ z&JK7X(E?@}S~PPMI$rQl7|6BK2jj;iNx6rDU|1kOfD|Xiy8`ntVB@~@!7ZXqq-F6i zjjID>5_C;2YW2E-y^oPvWFGlL0e;3jI{?NGaEC+Xn26OMt19{C8I!aTe zIc}e7-(zrBI`Hnrn|I8??1Ds=o7Ny4?IIhJDV@p+!!S8f!25T>aulXqJP?LwbH*?k zQ9x&@ED0FqiA^sgnk|pQEQ|(Ur!YlRS_)dT?@4Yv#gWd$)yh9fC?deTyn_`sz?f;5q{!KG& z^F!<)IpzQwrDrwyieB=5L3k?@;+2qzR*!Y=nUwoOjl`h|WL8El_+}u-dqc_fcSO@17(E#Tle9s0O*udb{{SKL=%=v*M#gbQhP)w1toGyOZ!z6}V6tY+V0M#!)VSpA;FNNgzSSi2#$1XeJ4kNa6?v zk7{N~1!nzvd`FyHqeB;Rg92_qv3a4)M{DnoO{&8UZ}=Lh%j#-~{q;HgV_SMwBLT^5 zLV<9rB0XRE&so~3JoVjcv@Mn*X{#3My1HugL9+1RJTiL;snGacp-C`D7OgN3S!8jk zsEh)ex|?P0bXVIlvrp9ICk6490_ppTfZx3@T3=lF$FzvuOr+0dkK2g0VUbp^u}De~ zVsi-LcfI+y1kYa@{KrCdD^n%tc2z=YV&+Q%J-D>ZGEXZgkMP)6y-)4-W8d>>WtlBy z$G(rR43^|xD$Q4YSNQGDT78^v=DWXBdVfe5+jmj+!^}@NOIlcs!mQ0}bd8Hz%G>73 zHA>1i(*mClGdCx2Hzt}7d@CPrsTfstXyHh6n$~H0WjJ-e@>6i-Y-Z(LOXb2`<chl3PWyVDu1%d@ zNS#4e-L2L-WUfgX8svM>Y*kAq~!1 z4X&*X?(+?v#|=1vMxX1Aem0E(A&r4qjlr#rq4SO5$BlS_rd>$Pd?4{00BY8&2ejfUJWc0tq? z8I2DZ+4eeaakqPlMo!G@QAgS#V)*~)Q^t+1?aR^~eWLiytd5l#m$1Y3Z;)_WYsYv@ z$MdL&9_rW*=~#2?1cr9}K5px)YvWYw;e6pag?nG1>(psk6>@S~VoBYqf*KyL z%)ZGJ#G3EB*Q*cQ>JwS*5i7&))!rAA(ojCBKx_H#QM-Wqz2Bqniv{KT)Z0FRT0ewx z>4oM`Pxr}>s)?`{?xQqRwfe{CErZ;T^QuIR%WuL$S3q+sh;<5hc?GdZ2BlLFby(P} zCS;2U4h3WkAwjuFjW*4<%S4wc5-c18!hh}-Ib*5M3*Xa(p;d%faO=9n+ApYORXuwaQ;h9CS zTmbZx1ap51-D1S}DgJ3&{c^XVBP)ne^v87?B%KBU{DU#-yWJRHzV8Fy(%~mmSS}WF zgdNMHW7|K%1^cqswajd|3KvD<4jRhB^>A>lPRju-L4R!^b17^nyM!zdEo zO@&qb`Ot?kJslmizl`BYyqmm<$RM#gq1aB59Kx8mM>sZTG~A9%#A?RaQP~cttga;1 z+!cg5k@b{uULXPOC=jPb)^fuU*2r!m36wy}Bm{tfLNljma5M@u0AMenK||2@^#Ap* z)7UbIP;&sI{{u?q19{Ls=W4>diC`~0EE+j7N&%PP*ozn82_#T54eD$8;i5Oxivn84 zf6l|R(eZPOG$4@zrL2J9Z@^^$#`zo?iiY_R!R@Hd>_yulJMbGi3^bArb;W=iNH7mH z_{|RJD+v^h0rhD@?1<2C8Z?|TyT$5jw`jXV1LDvbu|#+n8Ww^9dsCp6bFfevFrdj8 z9obz%W@8%z#Zo{GnlOJ7XcEsZHwK!iV1>~d&GbFKotYEdn0~=^;r&P9#l~9u!#CcChIu?eb zfTC9rNi?7j1(9Y4N?!!}V?ZK(F1P44h*c^u2?hlH1D4U?;do#I9%wWMJ|%)1i1Xf> zuw)`fE&x@4QI}6-dOwB2E#nPT2F1*jzN6a|ygh1%09*!Z1TWH8;o4`at~JJP6LivwHwsZrFo`#-JV;@Bnq^Q_Po(%VxKhq6#+<$tbpP09!Yi z#g59-24D}TQ&}i9L@b^i3xFC@fpm000+qF@oz(~r>?X5fXuwf2YciD;+3sr?*&U0V z56A!K4`5%XY&s!#LQsUcQ-nXorrXry1kczMpq8rf^lR`m6JRWI+6%|wO@xY{0*7-r z(#aqs_?s&hB3tqiEmyphy;b@j$dwc{O9dut!el_uCcF7u3g{6PW=Y>&Ddak)!ZI{h z#sQ#Q5-A3dbv1DrUv_(HcZ+o~>@F z{_%PStWcwH$p(dLw{PTHqbOC{Qsxg>v0}h(rWzNj5Up>C3Q+@=j2AO%pMDBlo49St zP>Fbj`;^GmI7p0`-TTBS88%w^iuu9RP8hIoiM|OF*e+jU){9SJqju`usY1g4+R?7r ztCzoGw*1Xwt+=Sl-uq5zV|LcuzFxxk_2T7k8KiOZPJPQ4D;&RlzmD+(9$dJ|dHkr^ z;^&XrFPiCW6^b>l*D-(ZY+*Z<^;_kC^TLZCX)yr@B(OjO4@59Q1s7znK?fg%FhU6r z1OR{l1~5Q@07~HJ9uI@c#~**d123O@L=1@^6Zv_EpY%c$F&`CG%%{c`W4uSf^i;gZ z#Tq;0(LbR)?9jsi3(RMqe_ZTw#2#H_a>sjWoYF@oN8D$h)y5l8#qw-~QpPBqEN{vb zT?BAIF@fx`JSfSW(a9-$Y;q?6k2ESvFGW-fN_&$0bIUsyOR~ip`JAW!#&`DdkGnq^ zeN@Xo@8r@XMUPsN#q|F9bDnqXQEQ(ORYH?ewkAY1RaIAIwN+PNg|)y6FU&9i7CiK? z9$nwzRY)OweaF9d{^2#)Vt-9c*k0$+wb^<~`Y_sPg$zpCA*ZcYT5Y$*^+RfX#nnG< zhoqKUbFsZvD0RtAH>h>5J$Ku0$*uO=aMAT|&;y0E$3IR@{gqV~scFxMPn${%2MU6#yWGHidLHWtCTEx#g7o{U_cWWv01i zo3)KO=9_osIoh0izFB8;(_FCOfR8>BV+4&pRbrBoewrve6>PfyVW~@^6lATp=DKUI zK^8ef09Y6{onm?IufMa`X1i^--+t$wxIbJh>5K)Q`lP(|mRe~C{l;49tN%91Zmf&K zxbFrNFWl9=^*+4Srvq;b>aQ=yJaf%A7f|E@NM_+56h|k$bkk2qJ#`U%WxaLRUxz(* z*=MJ{cH3{qJ$K!A=e>8|e+NEz;fE)_c;k;pK6&MJH!y4i4B()XPE3)$dh4&pK6~xA z$KDiQModq2@y92>eDlvoKYjJrXTN>---kbb`RAvB}Cx~ zRhU8+uF!=ogy9Qi7(*J)(1ta{;SF_|LmuwXhdl)14}};+A`a1rMMUBem6${(E>VWM zSOzt$fek8Bu_*rwKnhM*2XZI_99;yXGQe02cZ{)&VkDy()riJ3cF~K!utgl>sEauA z!WMSK;~n*wM?UV+k9`E>9|ajmLJrc9g+$~b6`4pzF4B>WgybV78A(b`(vp?Lx8rg>A_KtQG%N}YN$4w{dhb$&e zaqPoo4~1w%>v1uPR@9;w#b`z~x>1gH)T18-X-GvnQj(U`q$fpbN>#d2mj1I35D0;9 z3ObK%#?qTK#hR|vKu(GF)Tg>)X;6haRH7Eus7FO=QkA+?rZ#n?E^R;w2)Y=AmH;Iq z$%h)S!4Hl-j&olHYgolPRvsT z)vtV2YjkjGl&XTKa3g6$IMkBTz*+9EkA-aiWF|Abk)3#jl6l}WHHEwnDv0L(%*SzPgEoOa7Sk98H z1kwWSH|mNKQKd&z|HzVv{&}cxR2Kb}#Dbc`3oe+G1*1sy99 zSC_rql%1k3127`D)k9}l7jZ8*gqX7G+H?BN$VV1^z_ zAPgMWCka9L#}#()k0hvp7MMsx7@8oE85AN2m$<|X+R+6pgrgC$*ug0hp^blh;tJzv zLYbS8pCo)C5vQ0zEEsW&B)nlKTY$uGygF!dm)qRuE=i$Xd(aZ6K+%gPu1SVN9S1H{Iz^->teyjOh2qHDHV`N-F&Kv#)PRX9V51Ps zh=ml=q35UU;SD<&M-t4CWy~kR9?!TzBbJ~BNc6xQe5isg7;%Y2Fk%Ve@JAw`Fpn_o zArWMFhw$qHe>jC5xP&*bg>I{ZPw0X{K$zC69HK%TkD5TIvOo%qy$l4j*?TSbdbg{S zudB+3Z|H?*kdbcqg>K-7Vi28gXa_J825gvzaOj0;u!k8NhkWp$hAIYX;D>N%5p!6E zaS+0oC5qpS{@?aFTND@0iL=?#;uKE#Q@|6DSlM(rmbO;AAS&d>k6#D|Oa2SVvaYH;* z#Z_cQ%+W)3HVVJ79m~gb3;IJ6Q01(!Jz-na2c63Jv zxyF*Hs#)B|2n5H&aT=$g9En*Ny8*|lX{@F>8cu1Pf6T|I!K$OMk%eT)hIGh>gvf}L z$cd!LinPf8i^Rx`)X0tG$d2^Lj|9n(6v>e!$&xh5lSE02EG~eGDw$e0Y~;hiqD7t%C7XvuLR4m6w9$B%d#}fvqa0ZRLiww%eHjOw}i{Ml*_rK%eu77yTr@9 zOiOKe$)C(dnf#L!D@v@X$-*?u!$i!)RLsR>%*J%g!xRs7+naeD%6g2$I>gM()XdG~ z%+B=8&jiiTyeP?3n!h|Od%(JG6wTFS&DM0y*M!a3l+B|Ov33ZL4iw7MOik6C&EE9Q z-vrM8;1tf`q)nDwE8CpRnAA<&t3V6v$>)U5=;STqbjhh3ncQ5o5R}gCRQ21QPKzm7?YEK2llmdOp$!gH(N{J0!jQOlRz(h^vEQKrlJgDrX-(JMWPeb5H~ zVF-tCFo$nQ2WGQ|dFZ-%(1v1&vvJ@DX6V9hXoqhwhXRdJSE-RS{D*ePv2-9OMIEna zc!nLthGqDNaA=2cn1^pDhIFvPWyl9==!I{12PymqW|#)dv4&y*!X_IBAdJut^N)S# z26J#zbBNU^R1!C>5p7six(Ek;`vyO?)Nm*USsjN}h0(vt2W&Wo0Q`nxeFtpdm2db5 zMa70%c4$3i})wekg=Kc!o&3 z*fU0$SAW2iL1mSB;0->gh-Xj(e!B#J5C%+;jyh=515PMQR$J{X5Yc!oycg*~W)J+OsF z_=jc4KSu>NVXy^IfCM>!1ESkkepMBJEwfd{1Tw$`VQ2)PE7)mZ1eZ{feDtdc!vutA zglE8n7kdY4z=T+c(?VD_JDUk0`^39CS%9^MK`;Yah=ovq1f8(a)`&*`)$&(iPy-n& zgh8+cNZq%lppOi7+z2U;V&H>BD276S1moQUUJwSqJ%&W6gO@$Wsx7O1kTX*| zg+6G6X-EX)ZD71jgg%(D4Bp^9mA=}+E9>#Vz`7s09xr4H}TyZH7x}H_G>XQhJ+uZg+4e1 zUN{AI$X8~#1WmPHF^xtniY;-CKvtaxDICFhum*d;)K7uacko$9-3J$>)GeuCR>=oz zV1{v!uW(SlXJ7}5Si)zJUA>xzX)wWeh_fGDhDA2PJ9X0`BxP$TsBwgqc^HR7&A~Pu z2W9<4awMAD$_F5P2RG%*B@Bm>7>8q+21{+iRejbt142qohat3wVwJU~)6A?RSs!QkFTj!Bbr<{hyW_-+^_UW5^ zMs}(lp!R9jDX8XZoug(J^_MN9b%&OL%$TUvTnQ5D<>6t7F z1rrg`NuNw{5wsSjwPx$KcI&r>>$sNdxu)y7hU;mS&h zkZJto*{1EVEF#PJ$#L0woB7Bv69v25;=9ZtEuR@;2}DM(^}i@AYQy z_IB_0hVS^6@A;;0`VQ~xuJ8QT@BQZQ{`T+x2JiqE@aSfO=wKKTbKAF#r9M{Yv0jEd zvLiVPq&uP`4yq$TvIRP_g<9BzLpX)HumxmD1zM;h57MIzLU9gK@f2tA6?gF#hw&Ge z@ffG^8MpBo$MGB2@f_#z9rtk-zwkbiqai2qA~*6QNAe_B@+D{T45x5CI&wbh@hSiD zDyQ-*xAH8<@-5f$F6Z(u_wq0Ya~MyhU-(4-*Ani{(qF|s(}rc0Aq9sfpaMD=1Yfv@ zl1OWQR+YiLEnp%hDA9B8M8(7y7IM}-ZBlU9V)Nbnm+PtrbxP`V>N7UrfJlgjXy^nn z2n5aer+(4tPY3l-7xhsm^-?$WQ)ioYs3miP>e`{DTKW}UNoI2}2Z9ThRaf;~NA+D_ z8&&7^UkCPJC-qz>c2##LbQ1PtS9VfAVc|yXcKaqjKFvV6F4$R%Em0P$_7v6d0}g0~ zR)B^}$Mism15UVx^4MwORCkQ>kJVZCexZjENtO|02P)NvePD-jIH%U3!}M5|R$t6s z;w5@;D0lJ{r3QF;;%Y-Lb!m}PkOgx<22OAXWFUt!a)n>e zhjhQdMB#-{fX0MROnDFnRlo;nPz7nA`dg?5e9(t*J&GP77N;+se?MV+aQ5WX-)Qe& zJ`b3Eu!TAJgKPMMObCWQ7=&PW2Sb<*Uf>5_@B>^3hQ1etLC6GF@B>Y_21EFRV8{d) zhyp->hR1(=aEAseKn5~Egr$4;%r_PDzydPR=ioGMfA|Dh$OUAeIC_AGKyZhCh=yE< z22%(GZ-5762n2Q*iaJD!T<8S&xVaKVXA7u!Hg^e>M;WdccKrV1{dWhdD@v zxz7Z|FaJ3}{7hhjRM3AR0Ej4np#6hp(4ZwY;H==G_s$-~h!Q7KtZ4Bf#*7*_a_s2w zBgl>U=Iyi9W?sIKDp#_!M{k}#PPt?uyVs7NJ6Yq%b@G$Gh;7qXj~+2nq?*AZB~9PFdrYs=tt)X~u|l>| zUVP`TPlFP+{7tp@?=WKj0006EFrXkn3V!zxM{E;rAL7gq=ke2IXwDxtiZacalZl?F zak!Y#o1=-9XG5Q5{~46Y5I<^c%B1*Vu+?E`mY}ghWa4yTyULd{Z=P|azgT9RQ^)wy zA0%%y_r1dz=v}{=(fV~VMUE)Ek<~xaqX*9w)Vb^DufN9+-z`}2@W0J=3m;tcWJ3xp z*$fy~K5`{TAA=L+!we?EWaJlMf)N%`W``-pm}3EyAQ@#4S%z7L|3s8eFu1UCO(v;a z!wN3J(4$E@xZpxhFopzkjgBeicn2%g1k+B9fAkPVX25CT%_>${@sC3dN;xH!o8?2z z8Bm;ZRF%uU#E&rlo#X;lJ8{Xv2|T&{a6phKDS7-k6H9cbIU7WHHr^C3iin$KmPbL;a`CbR#=G}HuhKwk%nl`h$Wi1nM3WV zsw$MJrbCZEtEx)PHL1R%=RI6-@DFgom7xkAIv|qHt8q?xEV3TW)6O^Hn3Jqk`6S2> zJLxfXD?G@UQ*Ar!ykm|#zQ6+)v?;-J?mbaKyKY74>a*2W`p7%4S@Xav4?g7p2&a7P zF4u2gnOewchMqbGz=x9^R@pcFm>SVMx2E&X#J5sx@jvfmoUX+dbDSr~{20Q4B?bMX zMKr*gFb9f@Q!HazgnWziPtcErYmq<~%ZQm2=+p_NIcGC*BCv83Q z1ml7hfCvJ}9IE_d!Wp%`EiK}SE5116jXVB0$21N;=iKx8%qk|;ytXchw*_>XXuD2rRv5$WIBOn7Q$US~>kcK=YBEvYwI~FpL zj(j8}BPq#A9S^$aYT5jKM%9#RD2IL-NsGO6KtmHn@NYbHGJ7RP`$V zxoEAHw!9@SbE(T++LDul@nrA_=%Gvbh4&3 zhsMioa{3bZP>B}Ytb8Mkf*s1b?He*s|na#0Js;qgdD2210_Iz2+?y1jx`fHp7 z1Eug35JhxWCV?5E576Ebv1DqKpALN}L?bFuaQYK$02Ssri)YY-GRU11{U}I7D$K z-SW1#zWpt5gDc$O61TXx4F)JE_9@|@ zv$(}Beld(=EaMr|c*GNEKnQB#V2dUupaUHhQeu$^NL-@GMm{oWs#wu*1Z1pu7mAs zVcVM6xE?mLi=FIaE4$gues-^&9c^d>d)d>zcD1FQ?M5%CoC+TQ0>YZ+0(xE>oF}PPBD1M|09%sH!Vp5zkAygzxc*KKJu5s zkK7-nUulmF>vxWs*C)UF*1taXN6H!Ido=AT1^zyS5Buzszx?JuKg_njrEWiw;n5HN z>z6A3`P0At_P;;=^RNH?^S}T8|9?-Z-%-4j?|q;2i68nUpaL!+16GLuvL8yhUx?&` z_yM2=ULXc$payOr2X>$beqaVZAOZTAzUhn^#GffC)6N}+3aa4FwIEZxplQh<2-ctt z-XIRE zW}y~tAs2R`7k*(<{a}LSTvSmY3T8$z6azN!!Z#FyHq3)C@Pat-Loxh9G5mu${K7LZ z!!djVF9<_1ghMa%!ZJw9G5mryh#MF#A|p1UBR(P|cHjfL;PaK?3E~xE_=OzwKrh5V zEEK{os6iiqLKFN08EnBDY{5I+fSQHEG33B0>;W?*K^;^h~z#g2CFuo%^#-lvWBM6HBp#lYA*?^xi9)@2qK@+qA3-p38ga9+} z0}EV&93(*#6oNklK@TKBK0HGXpusQrLlQti68u6sBti+ifj?*rJ%*%6jwDHzEjvlqd)LL4=_Uv2*W=t0Uyvp5TwHvR6!ifMi3)r3Mq~%r`hDgCEBQSGAWj3sg|1GB<|e3 zL8&=O=@9PdmX@iRo@w$uVCsn|cNL?~l<1YB&Ud0Ioz|(HR>?mk=;CE1Us0)%y41Ir zgAtj7ppHX3DB_PMs-iBc4F+ieD(IW;=sQ%6JRHwBP(wJF(KmEMH*9LBaw@2LDyMoX zsgCNXno&4#Y8AET3f7dB(o_tZ600853+^UNy(**Ts;~9#YZVF>i7X)(AgEhPZA9lkt1R^yY14^L8 zJA6a9Nee%WLw7LGH(jGqi)Tj)Ol?!#9|NwnFGT zgaf)V&p2=@GjLJ3VFNYggQ2E_12Mx?nbtmVYRWdtGjvBd+=S6YQ#&lfIHbcd^lUmb z5QI7mGf)Gf60F|ttqvNjIcX(xKBzqSLnLTHDF^~Nf-tlLzZSzXw65%8LNC}ZHau-C zd_px$!zoaMEr2a-y@R%vWg1$S?LNaZgu*jS!!qoHFg(LCSeG!I0xxhwEc^m3{DL_! z!!l6ADV)MMtSa9YumNwN-wqGLI%sD21vCgkDYU{liHWzA^=HZTG|>_H<;Ln556If&cp{)0a}!)x&ZD9{2kKtjrff-U?){?dXi zP=gQegCDm4LoYl7Km5Ws2tzD9gDrruFN^~(Si><~0yTiiG2G={-YzdN12de0Fyt}%#)1(4FdZ|4FxWyYbORP1 zFd`>1|0VG1=_n?0j6V!R6qG_K^aBNp?X`ACC=3E!7Q!IV!Y7;p9GpUt-DDl`!Y>R$ zBUr;UK*CEVLS6Pj>dK79$V~CZ77q79JJ3SJ052hX@g)fIGWY{8ystJy&?y|lGK2yz zR0A*gt`4_DebR#cg2Lr# zgEbg&F+guRVA0FAL&!!nGt5IeSVL}PEXp1#Eq{Z|?A*|f!!c09JG@~_e=HOGYy%B2 zHpH;BH1RWV?Kg1jJ3PZObcYkFQa6OGIs9xm1metGNkz-=IH>PYceJ!H%RkKRKTN|h zjI6~bL&m;CO?Ly=9s@gILoZ-M$~JW|jO;Z0vs$n9QZX`ou3+G1h&&{r6B6sYUJ;2H zhF{u)wg#-YQQ>7e3`!uL6Xq%6a7Q;_h|wTnwj!Qs^{XOot7+y#6Cwq7z@BGg>)C5VJt{;#9(xn=FM#ecLPsF zeD`)IoaNQFd7t;K*63~i?XUJG?a&Tzt4p~312%MnHrzLU=eK_EH-GClr)onuOhug1 z#eido;!y{BC%A&Mpn3zLN;YU*C*E8f5QLJpfqO)OSKoqfxOuzvf+eixS%leSxSV7- ziL(obr#M^R_5w%vk@B61q)yB-PKAT_o?`fkTR4N{xNNJqj~}py1FmjsMm{C~TrpB? zeuJu#FFBJpIg@Kcr;bC;u%PqV_~9X*6S>)iWBEzxIEFA&fj1s_dwG^)`7^2Dm;Sh# z^DT=*_>gCYyi&QoX6jTE39;BYp67WwAUB^g8XjtcMS&#mjW|rD`JfXT@Wr42m3f+r zd6~B-gaaSqtvRI|aFDn6ZX@Bi0&D}>%wzgPvN8|&G-1s+Ar(%c5`wm+AkNELwjxgK ze6Op#N_LzhYQApkwjPhI&p2kp>R=Zm(BSK?$E=B-tGveRe4}Qf$7-cF``)(sKxf9_ z=0YS?`$BWN)RHeVG{PzT!zm;}IPgL-978d@ZZ8xA?T!PHbwem5LNRFn?lYW1BNW3? zP}Ni|4L1DlrBZ`7gm3){!!ghTn{~&s?8Bmo`ZQ?6K1@R_tn4W;5Hn~ix_$#Q#Jern zaK*>MG)O$f?1MG1v@NtTEj&YGGlL;RTq2UMHQ2%$_Cmi4L&RW)IsC&i(1JA#;>%l_ zv+q2cH~1L7HHc@TKeWOmmqOwir$b9Q`4)l@^FkuT!X+fa8*n=s6aplCf*vr#US2#e z@PRq(0V7~TA;iKUq(iv9Y)Vj2yoa$h@Ph4X!#4B6823UbOoMA-11)ef&Gy146a!q+ zLN^ri@9NMy*upWG!!yK!Yn_77a`QLLL%C~%b@2l))WS1-0yQE3FXsQkB|HP&Qv)W1 zLNUaa5bLfU$2%Eg!u;C&C*ZCSA1cqs{;uA(Zss--rpsRq0|ZO(J-mtqD}6o;!XMHC zBUCOV6v7#VLLulu=GFm(xZ*cdLm}{k9wY)b41z5b!p~$3%%h z=tAEIur1UA>|${^2m>|<0}u-_;16*CFN6CsLnueI+kOH-@M0IM+qYujXnmqZ>(nuA zr=Ar%6|R@IU%hPc0@W+jr)Rc`F^d)J*~nj?Y{g<`&DN)4)nffBX{*<>ar^$|)VY&q zPoF=51{FG#Xi=j_ktS8Tlxb6^PoYMYI+bcwt4-(egLI1j-#o8C0RRXvz<`1PDele7 zsdnDJGtc~~)!EM9FhQkC^}F|up4xrk{^fhOuUMf_>_R1a#_QRqU%!rhT9(LGH%O4i zb)&`aQ=`U(iV3#&?pr>4|Mm&{_KumYe7ww!bIt42vR|~c(Xxe&7O!^sQil?@45F=2 z)_$F$mb2Y7TjPF>`}fP7Fig(^r(<|5B{SXBZ2fwdZ=SGF%p@MWJ?kconm$jqA*&|dSfS_s|YO6zylFXP{9QmY|z06pUP^huHJb^uAaggt1JLY;OCyT z{%Py2xO(d6oPPQ-=bn1{LM@zd$Qz8Gee9W$9~*D~1a6;w#>+=X)4Iy%#(lgRtu%Y) zd8eHo|9OWU9tUd&uy)4DC!H$C`Aw~N#_=kgd8AYlFt3CR@tr1rdncSO=MhZ0cFdV4 z%YU-OsY!F1tWwSj-{GgieA>zB%YVYLu*=x;87CZm%mM5)2qBGB(n%?;)Y3~a#Y!u# zF8nD&vdl_>o)1F|(Ji<-{ihy&{$UkKdg}3OO&W9BaUUIb9B@a}P`h`*SYP9;&NbLH{sE1eRh^F>7gdvRim zDVCVxi!CP9Vr{fR_cU)wE?MM~hb#xC<`RB38F5B$0(GGD_ zp@Sk=0S?(lc*IV*_R+_EZp_0Eg?;-u35!`OWE_~~l4Nu(Wv>9*Q@y8)IFz8e< zB)Y7#(ps3=xiw$BRKyi;cG+?VwA*yjPfz`H#X(oxb(SNKUG~{&uYK~NHGI2-%n8rO z45d4NdE4L>S2CUBkx%EJOd z&Utc}W^r4F-CLEhA2}Rr3i{@o`oH<78*TOn*?*Ax*T4S(aDUyfhBn^ktq`3{b2CHN z@QAl8dl7DABRiSPDCoZTf#`GL>&e5q7eWz^kc30|o(KQoHn?5LSmy)YPWa&u8J2EZ zNm>^8nzW@eC22@(S&PG3_>FetN=UbwQComBEnN+0MtH-K6T2mtkXdU+sPPd$t{51< zT#;2i+R1>dcrY;Lq*-3n6&8E)D;g^6i+;h$uF!}@AuW+w4{K8uOPEJJ?ooTUYn$al z#XIx;PGLEb$3Dn`3}lc)9B*v@#3dk+h-DB-hW?15C1p4xe}p2EGPFk~D~YUbq~lhC zp~heU^AB@a=^g2KM{KAOj(upu9Ph9OHpcM{YqSF!vLxd>v~eaY#d04M!$v#Ofej`3 z$Z7AGhBA*wo}6^)FXQmjJN)51GI41i=`aUB#=#|P><~3G>c*FF$qzV{s!ZmDt4wRre^CMUQxkAmku#o?dhd)fA1xE;i9DAY1 z9tP2eIvhiWy=cRAs!$!hj#y)tVjrXwT64p2(HL%f*Q_!Lqv2cwr zsL{l5FykT17zZz6!5>>J!?1<@MSg7Y)^X6{7}yx+KLK=#DixHpr8RB74(cgDk`HMK z>r^}F0SztSrJ{VsnP{S1pafKP! zf<&WiRXF%CKSuE47mVP;8}x9BHs~P{iRgniL^{ryrlSt05C$ZeQ3!FhBbcV*?lLaH zjCn-X7K1$nNv84ti+mtw8JG~pIC=pckMQC;w1@>{A;Jv6hT<5<2*qMNGLKVWgBr)! zEJ}29ii{NY8Q%~_IJnD<|1!fIyub)g1~0sLS|Jaa z$P4nL!z!0Mg_bI53cJT%{2^P~>Vq#=AOjhu0Et1IA`wt%f*Gn11T&C<7E-7}A+SJ( zC19cnO&A0j_K*b@93x12&B;3w(FhS2A`z!}WE&FF2dC~K8CFWw71@q@)(+@v(M};cCu4SjDtp#(Dm6iek(oKFCS6Zp>;NTfBo8%JY73~0E+p%=}l960KaPh>$3jrf8Y%=?Qv#G(pYXapIg z02(Qv;S_Z!L?Pmm551BHCnWKQFn%$QX_$kt*l;U0Y%z^_*y0%bxL-bs!HaG{yiLrK zbh^Tk@p)Lot+p_SIW!LOaTMb@({N=?T9prM@ZuZeutq+*`VIAvGAHSH2A8N|4W2JX z9KcCOFEm|@Wu(KdbehH-onsJ@Up5@VaEL9G(GF^Wi5kVU#y)I}4PhKu>hE~Q5V;+9 zxz9cSDBh-=3Jum;^yOqP?Dz*h9I6jhNef9{QD+Q=NyaXgiJwhWn8K|nBunmNhBn$; z40lv{NXwA&{wSpssh6%QzEO@$Tq~PYZ(ezNX(CV{Q4=1vUjCd*0D9=Vew0WmG41Mn{2O zumg#(f{O47VGswYunHkZ2f;0&@~(FXiEgCu3$14c!Eg+}aDuGx4AJmxuuyzf3;KMp z+{o~75~%Rhrw;A#4)KsJ;&2bWh6BMS4FNF_d1eh$NDJAN-fZ6M~(<@vLZ*ug;|cNT=d2qfrD>=e~*<%ik?Cyr%TAm(nI2po^a_)O|wF%k80tAqq-C5YE9*v;qnMtqPi;4+dcg^t=nBWSS z022Cu3EH3#m;ef{01J4b3#1^pz90-PA*mAXm}=x1VCubML8jiI4-(-L)SwVPArT;f z8v0<@#-R{mVH)1x7s3-0Xi6=+K_`;Kty5m8$K_XJZ7Q(?o ziQ^xl10~}GaM|~72RP!WRi^*JTCmsqK?xGdWAuZ@Z52RoTu7D5Z z;0uzV3Zx(m;y?}501Hl`3HU$?^q>lo01KwTxUL}1sz41wVGE$(6d<7qsz4YLuDT5*32Q}Y$3mvff;Or7M4L69?TYM z;UkJc8+rj7J^`zKffsbaQQP4dih<@_j^n6Ju)>2Esv#Wz0EEGMV^{;~N3k_q*J5q1 zl{KTUq3B{5W=l!+p&r_y&6r>h!XUZ6pb7Ti3<^OH-T({Uz~91P5W3(Cpx_P8AP&eN z5yGGiq~HtUpbDlc2&#ZYbS_W=gBBzy9P~^!o?%AY;#S>DTfsJLcOpoyF?WVk zB|9Z6&LJASAsW^}9}bBZ`ivLIAPM$B8~A`1LLyoJ6N2M-;X|#V55DR|mw^_nAyC61 z7QTTRk^td^i93-*NQ?y^b)+3@L|SenE3T+QY)@qHq=n`|8{niHz@$(zgER`Im)@Zp zoaP$_g-$FkGm7a;ssxO7giE@in7-jk3WY6L_Z_IAmgY&)yvQFDC3n}P9#&}{x`9hV z#^=&O96+!U^8st}VU&^yPsDb6vz2Uj&=6a*$vP!1^2Q(ZpR{cq*^jkA+ay#axRG==8Zsj`>I89=SXt@)rf=9h0+a z`*4v#xe8mD4VA1zv~hDJ*^@P>lfzJzWyY2NFqCCE0!O(JANiDhCzWAY7@KemS$UU% zIgw|1nCY&Tz4Z+nDwvNE3_GWnmHCQvO@j0Ot`av35wQjker`Z2|qMN0nidA``F*>6Q1dSaURNy9ji!_3Mf{dYppqqIQ zH9DnLy4$!Fcb@N>ljfRsai(dyrfvGBaXP1UdZ&51r+xaTfjX##dZ>xIsEzulkvgfB zda0SZshv8f_hCZ16@0PSEyAIausW-?daJp*tG)WG!8)wPdaTL1tj+qY(K@Zwdac>I zt=;;q;X1D6damiZuI>7+@tUpwOZ5;tS`;A}N&LYK;((|4ps)@5umvr#`{1w(Td^HG zu^BtEB|EYod$KM2vN1ceHG8u;yR$v}vq3wwMSHXj`>`vVv{5^?ReQBryR}{WwP8E9 zWqY<8o2B@AHL1E=(B&g`t+#ud7cwHafqS@xySRz_xSjU6jeEI?+qZX3xuKi6r8~N* zd%CT=y0QDZwL81Hd%L~6yTSXr#XG#od%VrNywUr-)jPe}d%fMez2W=4yuc0oz!5yb6@0DpZD8BY%xi8k-{bX!ug~f zOtOdb&|#{v!!4Yqy#g2iDI63_Tzx7;_eT6oRGh+F9EU(W#%0_No8%TloKJ4NrgMD7 zC;X{083fW`d@$-UgK z=iJe~denX0-TmF2(c24#pEZYEGWp)|J>T_x-}$}Y{T-8?#oq&7TK+wgZ-w9sKH)F< z^Ax_}|2^RQec&D5k`I33E#7Vz{^B)$<2kJw2=K7d}n>Q!FplO6?q{^?tO1f{;`Z~p4h9_YVb>xW+D#eVHm@PB^( z?Pp%+?}vZ?=Kkcv&C~ zU-*MR`H}znpFe7dfBLE4`SJMotDpO8pZl-h`s>*Jng9L0|M&Gc{d+(6%isL-_~oWw z`T-)`xPb%(nmcHY;5dW{2{IffaN$9P4l#fKaRhRaw`B1VrU zGfuq!h;SsrlN@P&ESa)qIEEr|!c1th9e**Q1G^x_1Nh7{=8k1&4qeLOzl=+gW zR*vTW*|YaA?ANel{{a9HV1NMy0aDPrSJvylef#p+{bx6CUVD1`=Bw-1@7%h0|Jnt7 z*e~6Dg#$b8i#Y7#$$A^-jocWpBu3*oe0VAFq`f=*imrql6-PbZ{&afRX zmJRuGZql`D=fyqyweR4DdH=TU8Mt27#CO|BXZvr;a@U6G800d))10&!$}q zpaeg-aqn_Jk3PNn_3Ycbe-A&t{Q30j+ZPL#{@DBc`}_Y7V1NP+NML~m9_XKUYO&=O zdF3Gp|6zm@PDo*e7G8*9h8k|jVTTkd2%dNjdPri4CZ335iYl(iVv8=q2O@)Sy+~t? zHr|M1jymqhqkrEi5Z-v)eMMxEMjnY|l1eVgWRp%l31yU0PDy2zR$hr^mRfGfWtU!l z31*mLj!9;jVR9EhTK~v6Vp#3G181Ca&PivTcHW6+o_g-dXPSdJWFl0)?SNkw%TsX z|82L?F50L)X_l4d0I;%IR;`%qF-RZoz6)=>^3F?dz4qRVZ@&8O%WuE_{tIxx0uM}Z z!S?de#~!@!;}ux>gi{E@22V_J#TH+TamE^Nd@&z_StHaoi^KRo9%YoaL@hq+jYx*H{E6D&G+7Zx2-qe zeGC4#-G$?Qc;JQ;p0+J-oZ^qjB|-~|H#u( z`y&h=roRq*?6S{J`>&V8;?H)ln)}c0uo8f7S^J#9OvpVRk9_h2zT=NAsYCsb)Wztr z52~hKkA3#qZ_j=A-hZF{JNq;OIeG+?b^bpI0N_@Bo1+1;lwiL4sd`0q<|lc5gz>d2fzqQut)gQU-YJ?2MA7ZgB+xh013FB^ATWu zZjoPD_VGXywn{8Ra-Vu!NER42Y)CX@50T;`L%G;+h3Uy*2Y<*Osp-NGs=FZnOt>8$ zqDP59Y~l-Hc*7rlFn4f5Vq6GtJ`&Oci71TU4Z&ihhV4g&V+`Yw@KdB1|C%w3Vq}sU zqj<(A$;C-%G?N|gh{rq{Novk}+Nv-ZGB&ahj7@r@9uJAgL~^N(U}U5s^*BXvMR7Y= zR3H230mCi^@{yeEq$fWK$}&~ZkBb6ixK)&o@i;5g-NksOBwGn9OWybDO&qA`ydG z%3(6ok=!h&InVi}d@Pel0!Y9t-&sj%Qq!6Z!=h#ngu1<+M3N~4V;C_g)jQAuvJ|DXx=s6aou&`6CG zqAYFclGOQ+0s7;N@O)=16M%qeR+Btm(Ig}1;*WeVFsRYG)jw_p7JuyHAGTtut#CE1 zeb|GjQk`nt2V-Fr@N>thtlxQ|<9Bv`QADjNyk&&-jm6lEs;^ ze1J~r+0zuJiyzoX1SVo}j5eGC655CZCj4=VH;ls{mpFz$K9LB2gu)hy*aN$Y(FR)V zBN3Mf1<2a*21xiL7IFB-APRAbUYw#0=6DAjXyFe`e4-HH|2W1Q8UYDrs9|fL(4Z5~ z>mp$8FN3)Z3ncVVh<_9#4vlEUKf-YdOeDe_{P;v8KEaH2h2j*#cta>Ikq++`!xpp% zMI9J%ihR5S6SfUS9H^nrd_Y1D?ZAc{esKytgd!B){e?dgk%)ZQLchNlhaLuzh-2`9 z5yyapIU0!G9CJvWmIa}DV%g5m<|nlAD+}`&F#}38%OL|08-33q4dJ9ZjgiDT43|2JayW zbB+ZIXwe2T6oUn|I7Te`5QIYPfEw*cf*Jf#h#O!-!nEZ8C~Oe|P$Xgpwt&Plc5sD# z1R)E@SVAlsk%Vb1K@C?hgC1sJi%;A*(cHEWk7fF(?EpC}0*GZ!=gCuh;4)qNm_`ti zz>HOgp&0uJMF|RVh9t1=3OC5dGssW^NZ6JPQt$^eX7CFsRN-mwknkyDz=t*j!5?G@ zLT;IH1xm-@6jvzt9(Ev%8GHc>?Vv>nQg`TXtNcO|Wwa^3$h=Y4;S09t!4|IY3?`_- zA8L>S8j`>;ehi`qaWKa(a!?FR1c4Sk_(eC0|IvsYe1Qz_C`J}`Fb}1NgC7m2h7_8B zi5#2)6D)XxHr~Mp7GMGjXo&ham=S|ebYakqct;Sh0JW5_eDDAHwvXe2fWRXlv*s2+ z3c`}^b(bX{#c+2Mo)K_cOatRf*n#zqyk;E$<)JRj7+1|KLL>KF*44@(I7FP>41LfQ!90+F z33c!WM;BWw77B&12TSk^sUrnnfC;=H4q31a6ek7za11^G3eV64WQJYX0AYhL2uWZL ze1-{y5DJ+V3rTPZ&wvH7a0Ubx1gDS$@x=sA13e8Wg$0s)jkZZ(#5~`J4b77Tp|Avn zzzbav3uq7v;ZOyM@CjrF1);zPOxOr}5DNS71#(~u5Yq&pkOY0u2=j0SVE_qB@Cj|O zb*D85pO6HQ@Q0zW2kr+6mtY28@D64GV|p+SRS*YnAO-L622ikVQ|O8F@qpVgcoHaq zWU&Ag2wLiPfn|{n@sx%ABzS(Rv0ciWDUo#Yu$wn*3g3CPz>K7RPS(p?Es6%zrsVX*+|i&DwCOx0X3PZIb?DXg?X1Q^AIOGRGE$G6_R6_ zF{CnJ(I{%vMl<9?p^0cP8IxfllcwkZ0$>B_kcx^|7H;%YY*Ka z9$ZPF@#sR~_Mw*2m?x^DE6SoRdOh3$pJXAQ|1hI*u>kq0M$YLK`7jRM@D1P44M8fT zLrSDYYNSVsq)DozOUk58>ZDH!rBN!SQ%a>(YNc2Dq~D;7-nmv?=~i+v58;5NV@jp} zK&EGkrfI6CYs#i=Dx_OV7BLzY6i^m3>Hu`Q04`8X^-vG>w2BQQCnX6df@&y)N+*Vj zD2b}5i^`~t>Zp$jsi?9Yqxq%08L5{_D2R%wo64!3>ZytYnqzWG0Sqv$qzVG#!K%e-tet5d*9k{sBu0#(7hmKsxbc-~#C%8strsE~Izp+- zSDN8k8EAx{=t@X*RGw5qo%gyy?YgefBdX|O0dz{O1#1BgumQ~Z55&5k3m8L!(MYYS zn+@Zyaq1Yl*_!A2nEzTK6?-G^TB~YQv90o$w)z`o)SvhHsUC4{*V-IvOAzs~jxJu_^+zH8QK=`IW^)A4NN~i$}BnYO`^Hlm9Ta|G)rL z`wtti|5H8tr!ZO{kg*+$HLsv3u0s2g%Ml-c5gPW97=&RSFj^dD>wr)DwO^YUa_d3O z1D>R5pw-E?cSX;F}Fb{j$stdSLrm0a%LQrAk zm-EmLoBI#rK#M9f7lmXb`;ZRe^A6@9QcXe^vYAV{lt!{?4jb_m)g`-5LYeQ7x=>>e z=Fkq{a+^gm59#m~aH3JKnk4un7Rbva=eb9VVm-MFol+&KBvn*ZOG23=l~2Z-yUMG%yxR`xFb@ZjuLWhlzgfKh^u4)DnHXri?mJncB&ug* z{{fC$wQ-@fl&h^Ovk%%JT-d-1e%VuWLBT^wR)(Q&emM^B&|O1WE7Nca%pg@m$-#WF znS*t>JlYPox(vb~dCU+Ci?tXPOu=ef7YES}$B@A`d>9ifRip*O!f*=j&<>{%4kKI_ zd_lu0Jj2t{4Y7a?#lsJ@U|V#t!FBP&-!R1czzkbQRvfIh7fQope7K7hGDm!ogS8K2 zxx{`+!3>1KTJ;XcpeUE&!zXMQ7t9#^$dC-w8FZmc-#MyCTbldO3&p?>wTHzgv>0Oh z7fM{g(?Sig&~SAj!_}e2%aM^3+YP7i3&pU*dOX8*;fz>JR@x8?=0KKVtWM$J|G9-R z#-lvJd9jPO&$=1{{@Wedf#!x-Edj%*rOY{u3=3$>EM zYO8Ly8o&a4Sz#mr+i}1@u(g$oM72TA(-aKn)Ll4870|6gF5eNDKDx z45u(>^oM@qKn)0q&%e-&4>{1MKnoN355jN^=`hb-EYGsp3)lD$%g_tcfLgS`595Fd zwm@t1JP!LX4$E*1=GY6;*bDZIe&Ik3ztE7VMGgK8V6oT@pRf$rpwjnD{|gaj4#j{C z#o*8&R*Sr#4XDcu!Y~fn&k*Z(Qx5#mBH) zY<>!X?#a`@3z{Aa#lQe&<^~d^T)som_Q4kun$H24A>A0NzM<# zU~J(P4!1lH(%hi#e5MI_`rk5bPj_<;!(8&YdIL{xiLH^zibXZIe zzj^jF{88!re&Y1g|oG+*r!k0Owx+gi`O$y;hycZMa^F^Va!h1 zB1`L+%x|HDg%f5gpRHoNel5fFjNiCVGpF^nC5+a%aX)!s3Z?B^KEl+rF>Ca!S1)Xj zi_r>oD%QJir;zTAMQfR@ebacIs`c!WFn`Q!Aw9KhTuED(Xyq#w3fr+z%wqA1wTzZ6 zTkk?aeMVZ_zkK-^Zs*?J`*-l+59U(}|LK&!fAi)o1TheVhJQci-J4gBqrH7-46iTv z5jL}4tg#ClewGnznplK+W;fStv5FR9czNxZ1b0htoTcC@&6={lc}}omlse`VewaJz zlw*#`XP;y2Iz}5>dV%YgxO#K$oq250W;R+7^l8CfsG%{!lb9JuL0;5?u9sN4*+(T| z%;ANWZvIIJI&AtnM!9Kd;YAk-AzZMSl}xk6Oy!;_3maa}?50GOn5m`3W5^U{oPEeF zW|^Ok0gRVoteWc=W{T@Qvlt->^@qb=v>C^i zdWunvOzr-$<)mW(jm1x-j(J8H|M6HCLfuw`Nhv(kZPVMkP;Jx_vx#u7IG|F$kgeKZ2A9LOzuO4>V*(V*dvHQpAciM59 zpY-No+w6AC;g7ts>2B2N|90A0QC)NLsR!J7+If4Rg$2*Y>3QBs=O2F9ew-q>2f}f^ z#8bsF?z-QO{GEOFNpGUXAD=w(#Ia*La_sD$M|HSA=lt_=)YDt?i5{N_$94K*=*|E-d6losd)MJfhd}BRj^Bwi- z7Cb(6LvjCb-#g49H@*F1cV+uWWUTQvxoIwVIMQ1^(lNW>B~E%{a~t~JQ4iTYE`$Rq z-#lWtyaP6ngKBHX|KC2x!P$9mAMN-_dfw(Vc9^Yr9*o@Gl9!!{M6QF)i(ePL_(jH* z=R69T8rI%J0t@`$A6x4he)NNp@o0yOCB@o2U*8p za&nNa%ueaF|3gFLQ6!VxwCBP?ayik}6QAlyl|L6bJ6AfQuWJoW+vrD6Gv!W|yX-i%DQi9}4nY^+{{(wc0X!7ro-XSSM{^(2Z@R6jn z)MToB=*K)JRjK%dX?WHt9z8C^q)nx27sZI4@OYGKAbn#`4Wd({fps7oIT~5XYR~P6 zwL8%qt6IggzqY1ztj0WR(cnrnw^nsKGPNHwZF<-HI1?fK%PV;5YS+Tz>U~S?NK)gM z)43YWtB0+XBq^&`%!cQx;z0sEKI*lu4t9T+H7sOtde+g(wIFOIEkgvm)|`%3tchi9 zV1XrD|H8KQw$I!xP9vMx(*pLHu(d5=fqRhH4p+IEHOTzxw@m!~3b3aA>TZwg+nc_2 zwa2|{a;qC$C2(?YJK*99c)$e~@OvH1TiZss!n~C*dJX(w@pibuA?`44 z&1zb>p0~K~tuL>V+1Kboc*UYsF^Mf)ViO}c#W+?liF2D_4QH3bBjz!Kcbs4jJDA5w zRRyK%6|H0+Yx)E$*E_9`H zZ0R{y7}J~Pbf;TORleSN4}aCOcHiu2RQov9tM>GvGn;5i5=5gK;OL{*_+_q6TD^j1 zb+66rYhYvg%zs{Ul%4AjJ-%hsdDbat=Vm-TiKO$6Ma>rgy#VEpMdWTi^SBhd*AN>|%`idcRa^zVp5B zcOP7#2xoZ19sY2LM_l6c23I4rZ4e3&L;|wj@~zvL4>f4RA0sDu$xVK8l&4(f|0`#C z%U%9*n8#e^GpBjYZGLl{=UnG57e+(?&IgzOW9LIBdeM!3bfhO;=}WKqB`*FQBxp_C z_TYyZE+MFvWL@i9=X%$@{&ld2UF>5gd)du?cC@Em?Q3Uy+uiA%{&&C!9`JH_`amdPfs7wSqfz&A8~K5WJ|v(aU^08mmfs!2k{Tv=U(@_=Y8*cUkKj^Kls2G ze(`lreB&oy`MyW~@`vwy=tIBx(ck^_segUm1E2WCKxB8c3<7XRS}8(j|9bh&e}43* zzvcX3fBW6vet*1Q{_|%)$?1Q8{O4c)@3((XQ(k|P6FLC2zX6;%_$#>rj6Z%jxdc2w z0yMbZA%yTA`by82rumHG$7 zL%c@&HmU0x@_3rs$w3{|!PBXo2Fk%7+(986LLwx>^(aClOhP4GLM9x-AZ$V-933ch zLUx0jdK-He|zldqXUg!!%r~ zHB`en6hnQxLp#jFKCDAPEW<#YI4_JTraHWVuz)MOGJ;^dsf!$Y|FAcMQ@AX2H%hET zOhh*Za=1;*#O9&5PV~fi^C|JlBer6yP8zA6LPb1MERtfyaWceFswc&gAFsLlr z%C0=iuvAN)tje);%C;2CsC>$IkV{Bp%ea(EyL3yv?8~*pvAgukzsyU)oXf#9Ov2P3 z9Kp*nYf8RMOvr>v$J|S~jLgTJ%Y)cBMx4fn6t^4v$;Hem9LWc|jIGfuO`il!vXn}y z+{qg>P1g)eX_8HiI8B_aOVOMi*2GIw+)bkt%Fvum+>EB+>@eE22ixSy;XKUVyv@|a z%h$}!Xo^n#p(D~HPTh3Q+`P`VY)#hONy(&2+oDdz|BTJ$R8H9B&PY7Zp#;y#^v&Od z&+?p3+H6kaWY6SmPu_G)_gu~Rl+Nlr&M~u3#3WGrG*Iu9PXv8V24znE)QCmnHh%0( z`xvXE3`z|BN}4RPtjx**-B1wK(5KAM5#`W9>(CGd%oN2*5-l+gT~VME(Gpcr7=6(- zv(by3Q5J>KNaRr*bE7Jyb+ZRF-?eZqumt{~!TKt(uPIuR8H+w zPyJL-4OLMcRZ=ZgQ$1BwO;uH0RaR|PSM9w%CFG_Aq4^w^b3IpRJq22LgYzIM64=#(_<&o@RT=2A`X~rB2nR*oSAOkRfBjd04OoF4Sb~i? zOdt`*N(ft()HS+?3iSvxD7R%4MT)Ihi@jKk%~*}ySdQ&jkNsGXIrhP{-dOd%=W*{vRnGP+ndrYv>h+7!rQ!!+we$R(JEZST`s7VTcb5K zaD*?xy{@$7+wj^ox^3L;%G|ZJT*H;I?*QGyJzAoPoNOao8lVBIrGbH9-G4}35|Dv4 z(g%Imh?dp0oK-8tC9ciYTgkm#-(|7hJ*}M`UgAYt;5}aCHQv!pUf0sy@tWD_4c^>! z-ro&g%8D<+#a^4G-tNs@;Y}}}|5e__EwAte+~XZw=+(3G!rNy1u_qf}7JFazHDArG zU&giH{MFz5)n55^FVn@SoT>pFpaC5C2djNuto?_SUD?|0h}$LGpq*d}u3!tkU<(f5 zcHNEyX5AGSf`_b!2gZ)Ey+sT@VH8eb6<*YjghXXDM9B6?Kh5>u62iq-SA)aC?u3{^`Vl2*L4h0wUDA}6) zhao747C_>E7-KL7TPT($DF)GusLNkrto0m9^-QX$l&&`h%9+gLjL2gowPV8EV=WG3 zK^|m6E@Y7$KZJ#>Bpw1B|6t@XZe$v8Vm1=n{h&#I(1>+HHh&-wi3pw>e4OavhkdXI ze@LEwGoDMnWFJB{(lnk(>bHDgzkcHfd$`WhA)S6&CsJM~7rhGa?R8cJT~NaTl5NQB;a2T1sYL@`+ju-oCG)RKSD~25~ zYs2VakiKiY&TG9!HOlE?gEWXR{s$n4=8r4kg6KCmm;s6Khb8y|e|Uo+_y#yAfj1bH z7{G#kkb*1lhdtN#i!1?v5oE zY{H)AQR+87|6qZ7=!R*)0x9qZGk^kXum(ARfOWBj5|9HkXaavwgCx*~5^xz|n1N9E zg&FvVH&}w#2!kN-2TYiOaqx#J2!l^x0e-Lr7Lbu&-~cl~4;cvp`aT5~2#3h%gA#a# zaEO6WQ0^u02ZMQrIw*l+c;V}AaTkAa7%$z^HQ|I9>~wJ02d-tqj;Ve41}PYXPXGmB zr~+Fc18ji=1-Auk-hw`0hAN;1GDwaYU<5S?g&+{t9yoRhi)haZ19I}V1~zO2Wm1Beh7ybDW_%lCbj5> zoWK-*V1{u>hZnJiWB7)5cm`%r4`z4<4s!K*$eoN~hGXy{YM6Cxu!eSEhG__gWxxi? znTBGJn`sCMT19kfuXbxsVHf^IhOluQm-OZmK&6SlSY9VYVn6cOhf*dTlI!IK6y;e) z_tFt%r7*Yn!;zAuRdh!W9}?x#afnQQs*xL;cE5IlFL;CB$ZQ9XA#ekD!14Qt;9FcM z`H87cbRvSoq|ni$rLuT}TP&n6-|>OuCy_UKnV)%@ z|Gzer_m07K;Fc$J&Hb@vL*Jjru*Cgd@r7J|ip04h-I`x|rf+(v;$nnVh`=@oN7s2Z z=J}gE;^9KE2OF_B6|4{|wG8t!r!RZ6KYJPP;+~RWGH&D~&UuHwdI=tfZm4^^zx#i< zd%fR#zVCax&wIbGd%)NGfe3uVKYYYbe8pdU#&3Mbe|*S~e951D%CCIOzkJNke9hl{ z&hLEBUwjFYpBZPWBPa+U2xGT@G?Zp}xgVw4Ob6JHec7LV+OK`vzkS@#ecj)E-tT?i z|9#*Oe&HW};xB&VKYrv-e&t_&=5K!Ie}3qXe(8sO_Yr-y*LEZ>{eb`i95@2F|7U$2 z$KC2Yuqj4+^FM#|Z>||X2)0LJ?iXwvIQ?+bhn=TdLQa4D&wr=SZqpZRfcWfoDRU;x znl^9Z%&BuH&z?Si0u3rO=sbRqPE|Zf|KSJRj|p7g&_(o={hk;jENV!|CU`cHf-D) zdBdJ!Fx6gnF<-<=tnr%fNdlOPvp@kP> zh#rFe_~YDwMrAhNMJtd%!iX15r5|8gne<>Wv3!%yJ`VCzBR~JqSmQYFF!N50|BVw% zH~|*r&pzq=Gh>EJGTEe)PePf~JhT)tjdSv~L;?sufUp7xMVR)NYSvxkqcD4%Ld!e0 zJQI#Byy#L)I>N{)3@_mnVhb(f{PIgtjqJgUEzFG5i!jFw(v2{}|NN8BVUI!@sic!q zTB)U%Vw$O@n{wKzr=Nlvs;DCs#f%zQsL_t28Ce8kMH|^=!Ds?)X#o;`?MLQ8^X&7? zAfZ?T$smJ#GHfD)90SQ7v<$+?C4HQNNhpnAGGrl;^fE{xv?LPBDSOzWM=0s+Gpf1g zqMNR|>$2OfyYIpq@1#ZbLdF|rR8uaiJ|5-IJg}|=0th@TwBVR5UbK%j%zRP^ABkMj z$SJ1?(?}?o>;XwA&ouH$#e)=M&XA$la!Mk5BtpwP&m=MpB!zUtkGwO}T(iwL+KJjX#KmrcPFH$H`zycI7$pHUB0n6QE z9#Y%f{`j}Q_%v`O!E4k5?`OdaVlaamY+ik^gpw2p|4<+)Fklp_hYuBLu09)FAq!jR z!WX*4gDM$d0sr9u7hJ9?*;645d+5U-0?~Lf6vzW8P{bmR@E<7{-~+5zupM?sC*%nt z6{~2)E1G49M5F)*jL5_SJ^+Uc$y{}&#z7uFWLF27qHNZP#W%t+j&kf@2VI56e-sgq zL=Wsy}8QgKDY8*QdI$45dklJf)5jV|M=lsrI>0%4*+TmX+J zrtl=+xWp-_Av5+hs9d~~kw2cH4SzsHUyVASAU`6>TjDa8OPWVIJ^_bfu*P{65m8GD z2m*bahBy2GuJ7V#PZ!lwH|KB(TAJ~M=f1KhOq3A_AV!?}A+ESP5 zTqiq`w~u3>;R|Lkhe?Dvy7v&VB{mqNGIbRnfAHd0jNn5kG}f_3c#RMLxYj=g0nTS& z0-TNL1GMT8igze7o$cHxM>`r91ogrUZ7_q~AmqPcawn52vBBlG63UDC;}>$U1)iu; z2yu$-9mS9XCK^T!jbVaOoErqSeu0TTbmMNd@hDT9>Qtc=MHpd-!x^wq$@uusA16tG zK)9Mol@c)p{Pg2Lj}eOwh2k68f&|A3!HiQBf){WD*(VYai&K2#7lk;*G8mDFaAdS2 zPaP~_3tN+Xyh9FKD1@q-m(`bW6^{wn|7SAE8XtRLRFUuK#yI%FyM4Ul8>&l(>LTQ* zaD?L@;b@2AY_k}{!ZxR2tirK&Ed9D-4jr` zk|ZGDMR0<%oi25&`=8`~h%PDd?LQQd0N;9*04(rJKh0>}^P)GsHBq4!O+tWwyw|r4 zAV6_-_)_)aH^2IYNqbG=TLo~JzJ967efMkN0~=UA68gsg7(9RmKbQanNWgr@OWpz_ zIKvvQu7Y_OVFDZ=0Rq18aXWa&4Wl^4Z(MLa?dXyRA3y;E5UX*Q$(8L5Xg=ek&x0N$ z$Q+Bvkt!ZCk>v-VyIGPhCw6dm|7V;Z`A zSYYB3kN_tiI>v}S0JCwwnKZ9^jXZt`gA8pTLrLMRWKMfp#ul!}0^!4pJ?w$akbuM| zLU9Q`IO`aV7z8y;y|I-23TcA%HMz?z8J`Km3_(lkbvn$FPJf!l%(kpRdJzk3%z6-6 zi^V`ER_%Z$f)}SK+bP5*|89<$JK+kCOFqoehAi~K911dah=>`0i(_0M@K!c?>8&7o z?uZ)WXvaHv_l|aO_8rgo1~1={j&M9<&jU)@!fS4Gv~XD%-=N^GPP*icgSz7w=DDLB zB#;>;sOZf-NG1POn43dA>QK!Gk?QGlWXE^_cP=jjAILxMz-P%)A3NEZLrljW?T!Ed zK&K6$004xVz)>zc-Ro`~=V_HCYj3*(0#Jeh)7$QXAADo*-jcl!!0n)ZvfT4b_{T$@ zEy7eg+Y{gSJ2!sRYZP+iJMVes*pbC1LA=}H4)~$}MmK5X&F5S1dX%_3C8U4*-%0HF zMj{+mx#9fldoT6=|6XMFi?{u#LxOva`ab!;kF!dIk9o^tO8L@{I`9uNd()G6AAxy~ zgbL*S?}PvQKn_3o%WwYkqd)!XUqAcX@Ba70KmPKcKmF@(|NG-V|N7rQ|NHO%|A*f@ z?1RK~oj_b)?G;Q!?1LH%35PhKRy|+@O5g-OAed3$1!7jH{~Nkt6ZQg{pj7i!p5i?pL>R>$^Z_6E;U5BGAPV9j5@I15;vphpA}Zn{ zGGZe-;v+(0Bue5WQeq`q;w55YCTij)a$+ZX;wOS4B=$iu_}JNv-W|SO++oFy%wQ|J z;w!>pEXv|6(qb*z;w|E0F6v?m-pGj^;OQ03JqhD55@RtM<1r#*GAiRTGGjA3<1<2I zG)m(%Qe!n*BQk#9HEQEFa$`4o<2Qn1IEv#qk|Q>{1Pq?WD)Ge z2SD;f|3tP2PH3b`bYwz8#z$J@V~FHsP~=471Ug>WgJc$iEJ!^`SO1*EdpMALT!tx% zo=l!mJ((g)&g6Ccj@Z$pWBp`JnqrReB-r8PQ68mFUWAXukj#|{^Xv*!D& zB-mMIXL6=prsZXxCTXT71udCZuBK_KCThm!Y#t?S+U9MZ#P-z41McRQh0g>6$Oit1 z|7_A`*eRu3ekO6+W^EoOaWdy(9%pGjXK5~{aZ+b(;$?KM=5)Shb9y9nCg*GhA1Y#B z0@7SSN`^Ts!!fXDd%EX)!e@NSXL}aIGn6EHYS2KMXF=kpWBAN3us{e1=zx|$fg0$5 zB4~mt=z5%GZ1T?@6XoFJG=#nyN zlSaymk|#ep>6B7wr@TWSMDxUL-)KZA=&97 z!4D$gX|2-gzhdg61}vqL1gPR_rv59!Dy+f|?5QTKM>Oog3hbnQD#bc1|HE3WsroCx zHqM}0-tavUOLD}XjclX*#;anM$+`y0ZeB)^?8zog%w~jtpzO=eDQ)aes;Vq()a=fV z$2;WI-Kq1IM z5;Q>}TtN_Ytr;uWoIxLuK@g|`1gJp}7(lk_r~$ZXY!rhq*uyd~!!w9eF=zuV z@WStK88lggSxv(;!~!!6t}TeeFVGY-(84od!!s-cJqbiHoWeM~)ihuOqCLc(?dxvr z>zzKtokFeCvTp0PZ0lOBVz4Z5tnTW*uI;NX9K`10a-D)e|c56w{!Y8DITnWQF z?8!6y0xg7tHi!-_oWd~(LzQLI=}ZhW#KJGM1LuCjGK4~vxyL?e!zY9TFPM`!*(bs3 zT8egWq!4VN+AvsnZ0V_@gjz<{mT9)`L0z!`B!B@6Ou--oK@4;Y88iVTEI|n<0T?hs z6YxP0T!In=fZd*{n<7X$M9VY4i7-qFj|ky6Ji{@VgDqS_|Ki$$IlL7%5L`H%LNSa( zH_$>aFm5c+lY2DUF|hD2xCt$c4-cD%e(De*PlgYt>5gW>3|v7E*l!R70TzeA6~sUn z1c4uzff3ii7wo_lD8Lo$fC4PC0pHC&gadn0!!v}_KZMLU(84dM4q}}#;MxKlKZ8Gv z!!Zc1T#bXEIqozZ!#J>{F#JL{P_E^Ajp`usa!}|YH#1}?a+;Ru1Vlgua6kk=fRPsI z1WZ6SHvk7rKm$wwkZS7|ckBKr2)W`@l8nwvB8Ww_Lpv;pfRN6fF*5`mgv{X+$wjj> z!{hV*^J6Howi>jS8uXTW=#MV)L7Oss_=jf1?7c9WJAV~M}y`^ zi}Xl;B}!%_NJ}J1t5HuJq<<{{a6990*{bL4yYp zDqP60p~Hs|BTAe|v7*I`7&B_z*zlmok03*e97$53fPW`Z3P@S&_(x)3QISW1dei{IparKC21W&%Ai)8cR;~WisgQ( zbh5ys7Y1e)xEbV84J1Gm)gbVx)PJV`)pYP+D$c+E2oU)9*RR~$xN}D|z`Lx-0BHv{ zXmGf=@#DyoD{nbiAOe|QA2k1mK>Fap4;m!UKJdXnm;w`c|Nr+uJo%5S1xhICp>y39 z2ZtQ@$&)1HfkOrUsPRKZ|Ns8w_s>uQ8ud|uHf2^Ig8ww-kp-!FL_up0uohBz7#`#u zcM5>F)psC<7vhH^mPq1>9;P^=iYBs%;)*b~7~_jADxg4b1GJRmay<6v_dK>;v|7I6OnmzJcFLQ3hS zmS#Gsrj>5$X{VrK`l+a)a!Tr{rlvZnjlGpLKm$??|3t<=v(`%Mt+wWh>#n-?%ImMb z1`F)4!WK*HvBoBg?6S%>yDME>h#?RcTp(9%wf{tm?N8K7dr%op{4<6Vu$U7zANuP?a~W_KyDa8uMv58;f5D^7~w|1c?|3Zy z6bn>_7~3wa@x}&iQNaK=jx|yN3IK2i$0(<)^2#jhWv_~C&kj`-s52-G-8 zghyUDT~fD`4&ji$)6U~1O)ik&oByNvKarC@Ip>axB=|v|dnC0%?*y(>>4r;fdpd%n zF8c03g)Wlr9z8yK_7-;(+U*|R=a>gyia^f!?A5fFU{G|oI0 z$iN0N&?W|qpgqR%j1oLAdIp&u0IGMr1bXm;APk{$7HE$JitvOe3=7PT#=;i5@P+Yn z9|;XeK?^DXdLhvu2M?IS9{TWyKn$V~|AR=6XYk?|y0C>VmdL~=I#CzAfT9%tL5~1N zu!a}R;XmrOLF@7GC-dmw5XVTyGMe#>XbcHG5^;!BAYv15d?Oq;0mpxA!j5x9#3>M= z2~`||iuh~V6)TvpKkCGyJU>Y~c$xeDQd5siE zDBTx7M$Q9%p&SS%4?@C5u2O&Wz{EI=7PA$$aBKe98b9d4LTYTHiuZ6D4GDQe3?77w z9Q?>V_+i3js;y>TTjV3V$BavagPHdr+dP=bNVDBz9%Q4L=!o{se4LGJ-ejaCvq{R4 zNbr;JjHf*3*^+$ZG9UZc$3M2_|FsAX&1~B=TQ0q4kFDu5hBM=bJ!po{T!M2Sq;y{_ zxj~QEeJ_knYsVrKop&^wZyU!$WFRC)mGZM^QL$qairTBCYQ#>p_TD2R)Jkd5Vb$(b zn<|l5ZMC9RRjpNO)re80RNlP*arapFP`}6S;Sgc z+BBsz$=10bSarv}a3UTzhEb`NYNm4- z))kgm9k%Eq?eJ=xqlH5;THR+|<;9=D)1#tt4961}&8~vr6K?_Cf2KNhVzBCSNRiFT zOm*^3zR%L4Aeow}Z+QswDm5;wahq4!n9lQVl@RKq%G*i_P_o$+MYj0~4r^&&%2XEl zzmuLIHO6yd9u|sxI+W7mM~!gT@Djw0{KYvwW?nF4Vq0i1=6Nm(lA;r<5O!E*A?|UU zRB9DV6!ansikKz;y^`G;ivBO13iN1|V0UyuON@}x<fV zvnDE=##)c0oYhSrMRQN2`sBSxTzNoFEM4S%*EFP*VZ`A&B`%~KIj7H{olTKI!90F5 zWgDZMm?hxD&q5H)On|4?!}N1>)Sz;?R}Q!$U4SjgQ=w0JI!TnwcEt{)7oP@+M@n#& z8k)#*+Gpvlra!5y{ecZQ>^)aLSqipSTxoCQfU+#G(PNE4(T14-VihM-Dw>a%1ObfB z^Ri|2E29wUVOC6lz!5ZHnwkmdS>OOn8N<9Q!HnT_(Nb2JD^(3 zlOuKZhnfpC2!llZDwE}sDqK0(3> zXY367Z1A@}lG;2zUGTY^%%Vux@LsffTVPtb00v_z9MMf6;6vuOj`P5C+*PTfy4B3e zvZhdUW!?oA65JnPD7J+FsH=I6hRz#5ShQO)0nD>I14vRZ50F~w5t*}(Tz{|2+TRNJ ztfvy6adx%92je4B|B&Gh<;s7p|9452ZrfF`E0!BlD#2Gz0@n@iaQ5lPl8W_*l(1sC z-cvu$ZYK;Y+3e)TL|!Q*f-Wk2?9Z`7E(#D!hg7|}*jaPV1sNOXj${y_z<+ko?-kIn6DxroM!154JaTKbQ#R}FoX#Ke!K#A008plFM@t^5=CKMXW1u16Hi59 zC82Dc0a{MO3FM9ptEmi$arI*-)#G_Me8>fgw>1y2DKN1RyMo>vurv0tfn8SR;OnVG|9>h%b>2{45CKmZqgq^j$vxp1PQLQa>ZsU_rq%Louvfm z8H}f7-lNv|C-oLkDf?2Y<9?H6&|%&jG=Bl5h6bulHl=XyN7tQ+fxIM4gAJxA=z0Y6 z;5^)t#8icXEAMgs<5xAmYmIENdK_Ro?}QuOS3v^9|17~f7vW!*7!o%)9s#(7geLsP zBQC>TJKDpXi2RFNxE?qVaPvL4ez39--^ zz+pbKtSNBeDkmRjI0=#qfRHhIbG!!i`xu5YXpZHs-F1WCEqCU8)uk>wcdrj&IhlnwzZM4{@$8d0hLI(aS4*PfN}}Gtc%xE&l@dgm3Une7 z+dkOIB2E>Y2KRsgQ)}t1uX^iyHYYecc{Q&aafm%*yV)DUxybK26>0J$ewlX6RL;HR$-z z=<36fBhFn>wZ^rQF9$`EUmplM-XmQtn~W<1?-;)6D*L{6b<#XYw~;`lXO}HqEnn6$ zxxdf#K_K<(6}@K>F?;ta{&rP-D}pZ^m3&eK7}4CViPu2WERg$^ z;O{;f|x*N~yzkm=gMsE4I%7v<95He~;8xW(33 zc&_n|c4M(?V`+Tj{rim%yBo`=8!P`dK05dRLR6jW*H2h#aLX0 zVUgNN+>_4xPdrrM0|WP2#8Njz;WJuK2V9>H#XlXn|MYG5)6watAO1e2o_qFD``Lu+ zv&r~pQ}>@ucR%|+{cP6a89g=8oUL+m4Zdp!f1Gh?eLCThuf_D#^DkJ7xvSjIYo2ef zpLw!m@ig+q&a^d#*J6C?h1l(Kl>H0Z`ipUF-k!w^$S;O-u1Uh{#qQtdzu5R#6J7uq zUEuDQBDdkczusq#eXb#K8?~sX8av!)(cZR@Vu$_{ct?N}i{tFz&4?HlY6ej2Www(P%EK1K8V z*tgoDz(qUkED{n%eQk6F+aVXr#COas( ziNXp|(3#IHE(jf?N{E;&$Qi@_c#0*(tmT9V3u}VZ6FI|>P%UV2&paH*NO41QW+ONm zh~DE4%GWh`HWhp#3c-_Lp`w8$m5lepf94_g=wCQX>>x2z4n2OhC{fFjCJ2M2jel6i zuM5S}ymAdWFaTJOA@~as8c$@Kw1c+P)Yk(b(@5w{69k80r`4LD8nQKOu zf<{rH+f-?%oo74bO2zgoaZgQ=x2uB*-KYI%o&ghp_fAFhfyDAcp-d3G$i*xzdqe{sulQ z3SpQ$2JP?X*o66hEbx;ziBLO@EX9CzgUbrZ|8X;rD0AOb-G$@p{mGtSWIrk|FT1A9a zP&vW@tWiXGRa5ZkJfs8w86-iH0q^5RJ5NiY?xAcQcVQtk*2Pd(A8YWw8zj_2CYlj;jQ}Y=XsOsF&5D!y}Mk1X~^vYNiG~MX=}6RI&}h zt#sPwjyD#@oe&}w(q}hHM6gf2hV&t)hNd8N#P}(IHLNnMQQ+fWt&dyK=AZF;GI}6} znT0G0vTOp9iEPOT77`H@RSCwD()?4wjiR8%R1fzi7EQz)9>sy3hh!5$ao@R5N1#L+ zYY3Giq!OG=(?0LN9gf0)=~SqH8QU6wH68;Fp}_}fV9v6! zKpJ=x2|e0?kV%mxRPYQbC-+^!U=xH+gyD#=1S&Yp4sv$p=L~6ZudF^70r5v%%WHzk z3cWmT!i136$6&B!B3lU!{DuM7Qo&>Mkg+C+b-)ac2*r?Kk@Q(`&slqk+wiqefA21a zc8IkC!A7UCCpN)yYdE54&cp81u~2YhEG!Di(MshwZh~Cuf{+lLzE|L#Ss$_uRo~IT zKR0YA-V~5AVB&mWAO_rrVNW2f4I`n6p;wb=uqX`2F@Tlfn^~sWh~~}pHqP~S%NksI zKY;|<%|j+J;0XkzxExdigG>Nm$s~rN2-NZ%Y?-=*HRLFETT7;~=849V0JphsVrOX7 z)~2r$m1DUG&fB9f#C7XY8tawv#VR6OHnlK~b4uZeRzbpr5uw`%HZqNsuN@Olg3i%c zi@$U7NWc0-izI2^|e(izi~L zLK!y&=WCAL329h>ZeRszZHma&>=s_}!Q!*qaJDF{uM&cr??$*Y6g8}S2+oq8zzDa#Dl(i%H1L!@h6rsv@0573(=FP_(q_R%T zJ0dGmM=|WiFFq_-Z|a@A6y_RWZ|#5F;dDafJVjid*Kr0fTMUnY9}kT+(3c{<@}9hlB>$GUbI{_r&}5aX_6@aQ;MMBn z5(k$|gqPs%y3{&uBVR{aatG3lBSs~!Zl@-E%SiCxIkmcM2iv#q?6A5_=gO;gv>Y@% z48XEWUP|iw2efR{y+%HO+W?feXL=Jsd#_tclos^USU2@D4sCy!+~NV9wrCd2=_Z_j zrxVU{|9BO-y_{zWvHwZArRd(9A>g=dbzePbcHo}licPs*(kY9!>Re}l6tgS}IWLt8 zpu=PVv^R4)xp4O0S0&rCJt^lpX5V$Idpf_wygyY<*shq23-qiDx{6S6?btqiuP1M> zX!*diC4W#bx_t5}Rwl6aT}Z7>8~!uj$?%xy%uvD^(^dvowA7DPhl3yPh<$k;qvg#v zefg1IuG7lv=Wp*z&5d%?yPmh+dZ6Tcmp`VweG}0_ZYwzpxmfOY6u$hv%z&^JfgP{D zRHBh|F6#V^?B6~0AQ6v~*xfk!b<+@`fAI&KGkt`y)8@a2zc+^==eT~`{%ajG^R(8W zOFzof0l-a=Mxe94O-8rsRN3Te-Mrt*HPm>Ul@m3VnvCHFEXpRFUJ^8Y9$ORTi)WmD zcTf<|3}sV+fSQ-4f>G&B-K^IhBVRe4FfnG`2$Id_5(R21)nAHzn=i>!WT;rk)z>sz z$iEm+u~h6>YPMABV^OtI9+qseQXMllRg;4Tzj?WLhOkoz?p@I(S!~ zzOQO$2szVghlWQD($9Eq88zFRiQv^7F3HrkI#?B1sIA8NOQZ#1c8ViDZkZSFoZMhF5ZN^fx>IGTy<9iD)1Vv z*XwKBU2nV?)VLPZ@w5F}NFPYkEo@k-!!2U$qNaP)7rzeon0x)E4?>p9IvxbK_Ma8J z>3z4zY=f6ylqY3tp?*GH>&WDuH?M!J7eO%d&?{TQpPxTGLyS=3sIlDXQ(yqr^1W>) z-Q`dU0Q-EN@sr#M-w|4M3Ij=%BZ75MnZ<-M;fPAy}mIzeq;{9gri%w_5XcPS+e z=Ncv3kBYv2lj%5owIY7HV(N4!pupqwHo;ojI^Ilp_zXce{EbX~Pxw2fVcm%Lnky%7 zIdIVVoD>B5Mab2aR%B>~Wc;v*UdGN!E8ooC^MiQ*VZE4{n3dNtb14x0*ad=2Z|q{h z+`lqWwnJ~7nQ+~ixe29vfsZCV3(5`!J63uVw)-Fki95rDoia%Pwmk5bXnL<_9sTl5 z{1>m1f3dsU!v-n;{;c$+&;x#0=oo&{ef)Ind|iad#ru2)lkb(H={O9F6v~M03N?LJ zFn71qSq~`9LQk`F6g{bNAdPD^S)VoWV!Pal=4)?C7jP418jCQj{rCR5#2t|Xn^m;% z0hM6D;*Gcqq;M1>4TYbItphaCTW$r(=nQY(TGYk!&xu(o8<=B5)a|ZFHShs* z59T1PdauCB6nwW-P3pXaYW^fwe(_6|!Y@`w`JoLTiNhxTDtEs=l>aO7pQ>-o+?`ml zmAj#ETY77jLB>v|t(rJrP^qcxE&D9T4IuaC;h-?OpWU411;@z_35y@Gn)8x{hN;H- z*sxpaXS^BZogu+;`z(D%9CyhSMVPHWM_cj{*BTTgG^?DamnhCRgJF?G8@&ry?Puu3 zOvFBh-O}GkgSX2Lh>G^J+f8^09Z%stM|WD?pPZ=E++-8afm$n0+eKL`2x$l&=5U)! zaw+f+%a!kBatl%T#-^Ago9wepd&HnbSyRN4Kt@tV75kcO|Jm|>+mwkkAn;kLR=X(P zGw}zvuQ{_spfb*gC5W7udaS@czMq>*V?xJjo}TpDDmN}e!fz!9KqH_fiaXRPdEu?b%!K$ zjCB_;41FUhNrqX|%*6Z=`6d|{jxmh6^65Cf`aWYwOm;x(H!&lwR08UPAsZGo!T6?_ z&1YQDoXIcSq)rw)it~*0la+A+hZ5{m#qZp2qi;#JO5}mpZzlhK<;k90TraZUD9!t| z`-VR90U6UT`q3-rxlsPuABSdV^0}BjCKh@7XZl?#UlBwP7dbAKW~%e|r?K}{pUoyh z*=Kh^(u~5L@D@!c81va%QXIN~VUjrMXLm*7STD)C@VHJdz>gQtDqus-RMIOa^fnI8 zR+*D^w%&Q3cmDeJXfK41N!L|Kqlu*2hKGAE6ofie!CR3Kk=`A4wL@c$K-5L?lYWAv zosWnmm7>`VU{xPL^XJhZLKk!khB%pdjO@Syy`kCqht(XH_=h#qsaZ;-Dz4wwECM#; zP;;a=JY-}^a0!`@Ohj|E(uS+-XYh=?VXh=Bv&10@qUsCpa~_I%9>r0upybf{@!F46 zT;M#QjUu$TI-*mmTpC*ABf`2v=n)RzAVw|7rz~rFEBgLl8T)s;koMrTK?zz%Dr(pzNFWF7)Ks?4~@-0)T2nI_jSpZ1?K<$Qn(unz?wp= zM-yK@-TlqWvTguLm>RUX?f*Dr^^!vO*x=skGrLy-Nm{*V z5dX1ccE8>%Y5j6v{A9=M?-zum4L^f~=`XVf9mD@zX89v8YS0sR#afBexAnua`4fbO z&60QT_9ZTB&K->rPN_8pN$bvYf4>YTAGGx)ZNYy^#}bKip9E*=NAUJ@N%nKA_4Dxd2TxUvv>3Ej>sG(&sd3Tm&h0P$x1Ag0~dA3^G>jLc#(ou8!*1ZWsqC98fWzHnlajB!2Hg@C0}XjlNYK3ee*m6|EdQV zV6$yvwKB7|%7)$>%7EG1KI=r2(h=ylCW()Lo<5$7cD~Y2s`Fk}7L@IYNXK0y^YoB# zCg8L|%mByO{XqlQ96Mf)@zBBfDIF+!NYBFbIrX)FB#-4pv*QWjg2To39M;S0StGK7 z=>Vzl$gXGolAbEkuCQCr1ZtmU!*Y>bPE2N<4@6&xWj&QE4X-hK!~ej(TL&U0XlP;9 zEFd-KB8g*vlwKu;!xe{Uv;G6DR_TH>m{Q#Aev>6YQX%pm{u_$LML! z;uWjG#5I%zC77b{VTT#su@Dbgu$L_Ae4?q?ZjC1jAJT*m$-)PiXV{H&`5od%P#`Z- zgK24|B}0BeV)1Xn*PLg0@AfPNFiMiFNNU0xAu`(^W_n;DR+X7y^Z1lXu-748ABFdB z!h5fR2BGhBNkc79D2BOZbbepsZ}S9w^NbK#mYe1*j40P!X1Vf>hUiq5JKW&1o9gCN zt?CnwlvKt@1=1Xe3pr%jwqSX3UB&}o_H?2mi65eG&f;&L5!ht;)H`$Q&KvE@H)wv8 z)jZIn6V~g9$a6XG$_Vl^&j?-pz|O-tQ!1X!m@6*LG+_{ahb&f|83(sOjZlKdDlU;o z4I|=go51SxK=Vqx2@34Liq}kK`9rFxaceNC#P{^rsY3BkbrmZ{o|bH8q%4bGY^K_@ zwbtm++|7aD0ZPd#jv!udG!HUu!09o##Z~-ubAl0#U}`Am;nI+j1=Nof{XJo$x$wdE z5bxK3(?Egf9r1)gHORGjoN1?pvQ$MC6r|ULZ}!d5{fGAGno+t7aYe{o3IYbAK(1Iw zuy>}>JWg{SZ?cN_nTI$$(>4W(bSto!BHyDAS?oG9G^T)Jg=z7 zz-eNj5n+Rl)VfC1I6T1zui`()6D&Jf?o{HFrmh_7W`?3NeJb&Jh9k;@tlb+Q0_H(C z=RsbW44=amKLq&cqXKAihx%u*KPF@6zC+Ned`k^A_z+^%l<9q#;p5`uj^|9KX420d z;{yzna@O%nmK;Exj;flZeWQm+Itf~?#xm5e|$`Jq=~|9B_TB*gbp5h9DY`kjj_ zOD~W+BedtEy1RNh_lL{w`Iwnc&kEHY+^3`@WUjhPEnFnygbeOiQ={D9#$BZAi%S%Z zKtBw+&z_n2V#ob$b4Kp!%y?AcLhbkQRcqCr?^aKB8-5Ph=~i=wNjwJJ9^dic;+or$ zn%h;M+q*coe|he=-`w8j>;Zo6@UADEX^vJlcdR(~cX00C&$&};&wsz?0DSWttnOd! zy4TbP*Y8gL((B&P%k4^=hZfJX*3GlE&$AEB!>&B=Ho<7K3`lT%XlTnLH>N8h7kEq; zc&{v+@n7JJUO1b%z+b!|P`7ZdeL-+&L1=Q}zvTttg9Q=r4^h4!V$wgvHGW9UE?nqj zRyT+I#?}R#{|Fy)lT=r<4b0HU0-|Dpip$<88iU`%A^8@Sq!(2(ai|e*y6Tlhb^k?; z=ta%UMO5*kR^6g@`=ZX!qVD9P-twaU!J+|p$&hc!NO}pa;j5I7)8x;H&T@Ho*ZbGy zOOPR`>-lSvRc2S>q;dy*MY-I(*y@^?{9dyDwCDTjApMh}4sbI4dHKrEEB-&7qkp<& z{=8cJ({=0IxgKA)*?xCMqQ&G-yMvz?zGW}zW$&T>%R|>(ulQf{U-sktDOGbzoU8=* zACMcGy<7u5*yspFK*D4Rp@+*6JS(Ad>tNw9NkS7V^OT|YW;-df%PZ}ti1ZiyF zYCi>qjs#OYwhxO#{HUNr7w~mrW-JwSeLi!a6Y}U1q4J3Ex_Fz}>_%Ah>X=9Nhsr)n zr}-eO!5fp`DNtHvKgik~e`AEj4GOmId>3Gj52G?RBZ5ni^_N0`c^L-H?o} zG1DqGT^7J{3(BGlWwFM-U~&!tLUu*Z?uHNvmOxOP;rcSq?np7gas+P!fJlZw!l5iN zD1r@@hvDT8NhKH>f};<2r0DDP1CTZiME6b)QFe~#;JhCtigyky)6gwv7D2oa?juKe~eyBWkk z5pN#8y!X3%h@eO1@g)*MVj;evpafcxTUMscDogkj#4{A+%@(0BVZR2AvP5sHL@4l6rn8xa&gH_F$@fUu@#2Mv~>Y*ng(J`Bj*yAE<)C8 zbT%uGa4F_MCubJptbKY)>`oX7bgKgAjlf?r_uP`s`dB%~6DMM7@= z`4zMhoixwlNhHvPA&GNG-Uj*xGWb{$!I=n-N@1ibL25EVF38L%&CDi)-lr=Yp%{Wo z1J09nqeeqiTq^b=fp$G;-t_D`n+U|-9Apm#>moo`s2NtBnZBru8_0~wj988e9A+e= z|HVFLgcd`>YhgfQ=4nMQpx7+t5OdIfSnCe6e};r(#*B~Z6nHcEc*5XU`5#bV%yu{u za$bf&PbP(j91^atBvmOzcN##nS6O0Hlfp`p#0+|4i7XCwgs512_~GB1hmh}Zh)XQU zWd!Ua3c4(tzyP3M`4iUvuD^nBUK9$#DQ*7uW4&GJe)NTN9_#D=f@O=8TaT&;k=T_m zK$g??P_1Chv$C$}o2Zi;piPkhLhAFEFT)idcIKYb4BuGYkr*M0n-wZt-<5oON9?`g zr{6i>I!hOwK0dwr>7iQe#{4~=;SVKB(M#W-$wN55cU9^tPv88j{2dj$G_s?1_LJP? zQ&-y|g$^6no^bDB|JLp;1^rO3ouHs!8osEyb7JV$fDn(~7$dgCoj>`(?yru9^yIk= z`_t%5sZ2m9Z7h`;P;oMgJNz&w>~*@V_`w_2GSCT3CPp9JR&r2!KxdUJQ z{Na7N7kqkxirDbKmGezsA|ZnQHm@)KRR8^8%-+`K@!2N#1K5=*uWUtAXP<(L8eetp z{)@Qk{~)T^CQ#+gzK#&N+X>rQag-uag&a z&XZ=E9}n*&(AGL7h_YWx?D2fzCZ5Dg{xx$3Cp$k&lGC~T`Mq!bcW9eVykvUMuk`wm z0ET|lDp926cVElVYV>;N^5wN!t$YD{ER(%_?PwL7u(s%~Yr*fAM>3UZY}&F__;c~H zkFxm!rK@jg|COx?RB`o>&qK#IR{E7?%hi{~Yp>Rf;$5Y64ttK|9yfBwiw4B&9f`Oz zahlhrG0KyoCGdDTuhK;&Ix>PoeInE+ z@8wMVv0~@KEu9NpKkp}8=w5sL>cXqd?&AwRJ8yMfbbp(Ar}+A4-Eu?YI}1PN$v-33 z$~!EKjkq}fy4F`+PV}K)zyfxUWAMziMCBoYYu`DBXWWW%5pq8ie0|CXrwLF?Vd?pwWaz=#ZlFF`hu^Ush0vab~P^^KUJHsw|w0) zZY?siH*xjG>z2=RqkG%Q&kv+T`k8I6R^ElocKhMnO`-m!M;oe|Gg04?G-sn$T4MAM zXgp9*Y*t}Cdu)a={KtL|?#t|7wde4q+m`xTKkr^k)>^)IqgQLCEa6mZHGfa;}eP(Cx`I+v0Tl^AHh! z-TiS(_&?oknhzAB0Oi85-a<^+=-e9H`@R43L5lw0wI_Z0$D6O{`X@W@3=9|Cr?nn2#();3MO((8Fc!nsI;1PDQq(x=r_yro=|eLevP-+2_;xA*ChlLp zP!JT}@?iEv8by)&5LVdoa9LMI`%~kGsOFZktwb5!MY*xKk1gc~Ju>=xjbll>Efqhk zm;uo!YxI>OzhQp~yIC)6s9E@h9H?N*6G`_d;I0~ZX3hHAddmcPxW)RH)ZN6c=J4&8dPb2nV+QKDyrRRC>CesWZO@YwZ~Dl8`}(oHz5TUf zaKw{uGrR2_z5f(Laq{06xH~$B^e%)KJ^B9gc`@IIHjrZJOZYBm`&nkL{NCvxJSDv2 z)$G3uu@w2)ox+ZuWj&?%PY-O8t;V{m-CUjnS}X!ScJy{V+*aNBW%7@4h5ourrJVg^ z<-#0GVov^<2y~nOr_y=%&^bz=D;_m`k~TDg4l)^X8}Kj4$%)I z{Fk@@c8nbm2!5H)kvqR5fEtn%My3Qk{jsy-a#t5jEBJHlBl@W`-n1?(`L@E682l>9 zDp}=DwZcz1$1aA(F+9PD-TCmoL*X9QyC~&rzH|Q9V!!C0_paabmwA5gy>F%;kNdrR zjp44lKAA6Z+ipIt;Hlohn|nIbFs#vBI2C`;qQd&mUyb50o@MG^;dk=R{J3LSvskLu z{RC@rwySmXaAOC}&Lyf+P`|FH{@C%^`sJ4H&(D+9pN=P#T>a+s?h8IdM@S8x0+rxG z{!?$lDQ|NbI!>_Q)WtB2ADJ187m zVL7k9FX{j3djD)IvgO>hk@=@*=UGU?_N%#*(~dqMCoPSgaXk$> z`+4$dc=?_MKtW6&@WKv3wdV(CU+3U<(k;{0wC>7-g=f#68R{b?CZ!Fu-a0U;2VZVy!^{T0X_Q#^<`?adC*KAU>C#o+* z)$~b-Of?vP4&dAktk}6jj$JCqkv(`>^m@bJKxg{X^MkgQ*PFp9I{Sy?98dpP$8WVs zN1w^Eu-SdRolMu62Pz%*7laC*Fy;ncNXiE;{@2UV{LXKm;mvpK-7W6ZU8bwPh~qt% zymfhH$MCxFt}1#~q;O7m-SNfW&n>;b-8T|{RG1m6!8E^Gnb;W~ z?pc_UY}S$4*IE~p-^L}8(D6O%y~kVTQWp#qzb7q2|k@t1b??L_)Eoos(peoFc=B{V*C%K%rl0pIKs*Bq*7tGQ}(zN>V00(g>E&tSeWz zh57wiobOy^$&s-_j}hv`7)1k$@RCIh(+$jx#7Im6iS%?{At0|?x^M=QB#bPlmZoUl zFU89&*^s7X<*X@PgT5d+mn6Y;y8`?3zg;$2$y|l0Bw;$_v6f5N5A$7&SmMz;8IwYz1LDJ8#mUgMo>21N4aw*q3 zDRS!kkJM^_cI{5~&$LxWazL&7tdz%ct;d#>=RvLKsT2lWhvAg=;;Zu#miCse^S&VM zqfxifbnE-ztb(w(TcPk@KQZ?uP-W1$fatn_WV$pqvksdteZ9Eu`h98Nc;QoPe^mO< zMR#c}jW?)BSkPo$(5!Uua$WG2bjU$n$fOjssdx<34ZOoT>#guYCq zX?>(kKt%j|Z`oS0c7MN*zJJB6X8Qk&&8&~jmx(K`k1LmnualtzM997?*Yc;aZ=|>y zWs)ZAlV)X-m+Of=l+Ec9!vf&*O0%lkX^X~MGU(hcbsWO2nZV$I75(zzzw*aVFR z2HTwJ-;f#HfNz#jvtOX8OC{Q1tsmEBm&@MzK*e>}W?3{Goe^cz^1t;#HcwwHI3yUo{lTX^j@!_!{+S++>yI(lbdclyQ;L3~u{QB%^bT*rrH|jKAm(XMf>@=>)$%QDHrhmw3e*zCwKU^!`;V&*I1EZDs+}V088{a7KxrFAQ`flCU0y>Mr+z|F zt&!-Q{7)+VQoROO?XEG_4##{-A4F~7wCqN^JeDxnU%I(KgBo1b{qq5^%-@xg_)WF>YK2I@#gW?YvQ=d0I<2gN;0`QC#sUPUESM{+&xjt$`z)Pu_lP zIOKSo(7t+yyz1SGGcZZ#gQDe9ja#|bTc?e6kjx@e>BtQuF(giCiY#Y{7NepS_KhT5 zj3xHd6lrL|0kX_SzcPkdL=8Rp8c1OqF;Jk$WdKz(fEpOIvgoEVmLi9xsPY=?WH2l7 z0t0u>2Ocr7SBlQaGb9!L`caJr4Xvk3QR|_|(U=9wYeYVxWnCz056PO;bPX$D;P`vx z3}(*qbmT(@EKE06iVRjBU{Oj02L29Gh<&bjlCD^a)8I8mi3VwkF1`H_>>4hWLB5&j zAd7JuLeAfm>!j!@$d~dzo1%{}><>y(v0Kirm1C;NO?X$}2jN#yThI zunK1BNSvZV^Lm}JX0EXUpb4zwte}fz;3A9$fGRJ}fY(^r3Al2~{Hg8&(woef@P|h{ z=lGP)VO)Yl;=q4sDa^`B9lkG%AVY9;k!efzz##zE%y7g2R*&nRmh zb(_B&jkA$YwwAtca5T0*wtZ(^)BL6Hp_-e#uf>fOi--We5BrA`6rBm2-ih3?d-#(L zhkI#oc`gn4|HjX~S9>-idAXR6lneiDH)egx?(5v{V`=M`V(p_uZ}->H@a>CoBeZLL zh{~{ObW6|kr#E^=452U-O`=>E)_6Ent~CAnaA&mlUVW{p?bSyGSh|J+x>1k+Nq)1M z|0yo;iH7{-#hLd3!FvY|pFC-X)bJ9is|N?yTEwS_KO=NHqI3}ZYIa8xpcvbNT4v37 zh`80z+83u5i?bc>MG}#?Kc@<{u?14l%P~)7g^RLcf-C;G1Zt-I;!2~(#EW$1nflY( z{Qjkt>2+$lQ~sn1??ftfd=*1w2E=ka>%bYuUSHYb;u(!Hw!2{_bFaK5v%d2dp&}g~ zc+#ec{PH`aV?XUg@`sDu7`pX>-+h9Y@%M~3Z_rfeLPZXpj=G(IkWl{U77hNVu2rNN zcl$->odgkraXVr0LiWelQbWhe1rUb!ykOssVBfFOipPAn;+R#=`_h5d&&Iod%$2R( z(7`TC`~yiGop1DCo<-Sv#Kt|;U@iQ4v4~}kwEpYx``1Fgc#kQqxs$<_%VpnLj#BPi z)$W|*w$Z8!nbS-cE^zOI zkPQ;UlxfT&HKAg%z$e4ZN3ok%9E}mpEb6+(GDQo|E4CiKH%3``p`6MLYA6>U02Qml zl}3$~YH&6AI3&gx;UB6*npYN8$GdH-wE_V=DjK5nd7TroW)Cp3))?Jtynag&Ih3ve zlQT#JW-$~BH9*BD?{r!jx(1u8wfB1@W= zL+p|&$f^iaRO$o9TBzoNQw(Cx;>b=mptLRywg*%^A*-;wZadwk zLd4V)8B2H1`XqB;?RL9dLYFaGX`k_I8=`=EJ(v9Zf>O`ii*g0<*JSsufiJVUA~D>@ z&v`n=X?3{NNMn(Cnp7fM;--+uM8AwAo%vh_Ss0VP!?tMvL+co#|1%Mn=1u4J_I$tX z%AyKHWKyJ%#ySJ(U;m`T*nyyLWaZG&X`3K6RlQGR;i%3nIX80WDYHRFmDWRM4Hz9% z&@+Ahm3B<<_8ys24eDmtl6f*X1t65>F7lptjbET&=%xAbj%&b`VUbx@866Ju&o_i4iV--f4<-;$o zmBm=jy?)RU@3B4+X31g~I&bI=U^*4B1I!oo#r)Cl-K($X_fDV@DX;#7EUnkCmF6D| zD^(bz95>i@eEIbERnnKeop1VObH59YX0HprQS&@L*xqQH>lmBW-9ND17JS{^`|tDW z>y{V#3ClU~nz$c}W4*PEpcSJ-Lkon_@wynTx1gaqq&(hE#BnzM;O&YFc=60m{I>EniSnX+TB zHV=mhRpLCC5Y?nW_dc=j5bX-LJU@2B)=*_!a__C$up08c!q?o0cT8XI@K~SQ8Fd`f zJKFd(X2A69w%VuSk6~tC5+6R(7zlnB)G?dP&iRJ2(Pbu*u=J*|Jf5v(`9ZKD$K?t8 zi~nSt94~E}J_v5&S~Jn{%KI%*xFuO6cQp*pv*lbj8S%Q8Zpbc)9Pwr&>f(4J|wC@GVhaO zqh5i5zw^?OsV~y^w&nrdyM7XJ43J zt-dWijp637F1_mS{ovUG<=lVV4ifkWr9X6j&s?@CyvTWN0eFe>gyX0n4MQD?N*+Cfjc2d}2(2M_ezP`Wb|FG8F z^+ne*8&9&{IIdz;Yn*U)^HAs>-I7rky;t%5@2{6*vn`#MA6(lLsn>WKI975D*{298 zjCKE{`uLygwP-G=C|riy8f#yt zgp+BDf_)OK(H6S~>xPKf30B+8)EJ|`LAgeFxv%;s9e2tzLgl93K){~ZQvSaoCWsRo z4o|2N=oS^Z$5eTc%5NgZsmvI!aQURt(d2vcLLy$EqV;WzK4rp3WEN_o7S06c&98>% zVOd0myt)Hqe+kgdAsS>cBiGU@4*Zm-cHK^QV&r0an}of7(+;cGD2}f_)=a6l9~Q{F zDELlxNUp9b&z5&lpkj*tMouW5)eDQw=R1L@#`foj@#3V%pb({}UU|{9MgC!Pi1Wbh zzQXrF=}pudeUq+&>nvE2^6wDUWiQT~J;wZltNaG#<2hmc;Uce(UEb6wb9+H4LW3An zRI(QbHoBVM^%6wvD2*c`aa8|vt^`-VfK6DtVz9Z>lx86pGcAhqmgH@3ujz#Xa}y&( zy6CXpDi^2vgclqeYpOZzl_|}LOSWd1uY7*oOc;Jth?czPZ*Wpdp$oa zhkaQPe%(hVY3ZUu`T5*@!vH008(0;)bLFAJ8QIoQOJ!_Y_On#9*xQkuV+KBbR2%d# zFKWXl<+9CxTF?Glb*i73ic^oVd5a{cWr|vi-%9@OBQi%~7Wfc~H*pf<4RAq={0#+3 zW2)f(o#Zn%${+=pIOioOMXn~46>7L1)yGi6e*eR2j!x%FU>t(}QZr3q;#{Bj2UKqr zWntQ@&XzU}N?~t*vWR|jVXX6=4(%`O(K?w=z6xZ}I?nDdbXl-x73`KXp7VS_T>ff* zrebeD{j+iTqqFs~IT~0d>mUWn?eCfYb%neio%eqZ~)= z{{ihl62Iia1CE6x_c37)L6*fWb}^nL%NojBcAXB3mS)Yz*}@2C7+NSrDcqqCdVHe` zXHWwcOl6KbBq0k|Xo3{N5Q;Xup$b@lLKvVRg*tTM3T;H-49obU-8=#|Q^oFEU}SZsZdGVB}3~ zk(z%Pl^J(!$0=|E*K{CA8@7lhEqVcz4cnp}1cLLMPr(eXR--TJh|eMMdJ6T@f*MC% z#wCvN6L$Y}qZj^oMm5Y~V57Ddk@Xdf&t9BtWiNX(F+LRC(ph7wJ*=HM)*4~#a}IBK z;~eGC2YPtXi)scg#fcbXBYqLhU!bKCwm1ePLctGS6apKu2*)V`T{{i!W79s_Uwla9 zo%Wc+JEKI;N6ayfT=wKVfaVhIuA&-%+T*L~&>!tC=bdo0gG=w|21q!b4u#jQW}{rq z;9h4A6IHey?D)o1!!aM#fan|VFh|X4_YT?3Lw2bFP(HqzkJ^EC9QLUBvgm^`W-p!T zO=pa=lXcE$W7fuZ`<#xIG@j|`qe9i;4v4J7!0EWqI@7VvJi_je>U^ZMVHC^>OXi*t zk!=6&FPx9vUzo18&uS@d8WDl)Gxw6Qy-rEz5`CIPCM(^YI#fDgd^AKR#LrzkO}cxX zu2i7E|GiGgcKYW*zii3!NMV(oI_IiRK8b}6ORm9Ewm_ts)+lIOJDL!DV84%XNb?)L z_xRVn~{L&usYRUKH?V!p~kXuwNK31k;57Oz;G=$N&G5 z2mrM&vkVaHe#Y~R17DOxW_pHaMqA$M+PaAxNV!4M30>IUO4aW|UBrN70TthNuFEjQ*8!BjaYKL~hkPB_65C!oNXU7_jr+E%zd5}jm5QA@O zY@k+|G{F)PVFoaSqud`Trn17@q)CW z9qz7yBIt%5h&!&MfmYG%ro--BqHz?chV%p56li{q2Zvgbo8%{iN+KD3uVj3#w8D5U^<^daK>4Zd%8E}M#`0aNfs2!exLw0qhEaFKWwQ?(863oCBdVvhkKo}C?40?eNz913Wpa=gx;S9V?4#q(a z-k=!Zzzphu45k4Ru7In|;0++D5X7q%3FI3_3eFP2%}ffV^Z*lLVGlH7q}rOP_5fb4{%!fc~EhsRd7@BDusOcL%;TO_j8K$8fmddFVt0bPGBWPh7E(x0WYkv4) z8hT+KFwGj!Y8(u$CxA+jE}@?fn&1nd;IyWo53pbh$e4+q7vZ?x*!S6Ko53n zpRhm*VrvT$!5^9+2;43uaPl24VGuBE5O58yK&lv&wGjU>0UIEp4}QTOAmJTOVGx#~ zT2J9!>_JI^$-tIjPH8GTg~1w@A*Mhf6q@udKB0D2Y*L>;0zc66R=1bIGd^%ppzQRp-WYQ9n`g%9{2k>Q8FK;NOftrMh%m;~SHXK)_Lb z+c!hR!-Ynq811))JcM;!w}0;wcA;%ktI+#wmu9vlHC}Ije&;H(MHXdI_Uhw>AOw%X zA>qEzf(J2!HFzA(&sDZjOK7h@LReQum`(pw2ZZ57K~9*2N!Wy!q=X0LZ)DJaX*eAL zcv)nZKmWl$uZ|w?4_jCV|K21^wlIGX=Nsx`_JR^7a9@7d0p-Pw<>iX)xD&HDhdC8% zP!Ua@1dKm0{$l2fAwy`=h6Z;AXF9M0Syz$c<%^e3>E4(FC;5>bIgl^;jx{+Avp5`< zC=Q)y4*%0r!B6SDh68P-1Q`&J>$nMv5NH^Su{7fdm++No*_Jmsm(39BRyHnDU;q?= z00>}@0W=HwH#1V1m0MYtnYo#TWoiF%WU>&28Ge~IbeM-v(TDY9W|SEOo%x%=8Bm}( zn!mC~sCfWrW0(hcl}qd$K9JvMu|vF*~z0d$T#avlkn-2B8krfIbPMt*JS#gF2MS(n#W?zSxTwUOToO zOtxX$!92~j%_6sPd$)DFw|V=weLJ{;d$@(WxQY9?jXSxKd%2anxtaU9ojbard%C5& zx~coRtvkE1d%Lx}ySe+jy*s?Yd%VTFydA6-Y+I@n15w_Z01!Z~*Lhknl29D;!b5Ma&`;GW~S&G9_X^?c9yywCmo&jFpx z-~1X<009!~-XpU*>NFUtMTO9g2TF zl8+sZC0&x05Jmr(kk@NamZkk{T$$SO<28QcIbP!(BLd;v1{`4I9l*}FFqBX}l(0b?T4m*1 zMO9Y5B4u9YVSeUUMdn++B3r&ybbjY!-sgLM=YyW-Ssv(%KIf0#<$GS|m!9d1-sycl z=B)wfl@jQuUg%@q=7}EXv;OIA{_DX$?8ScU$v*6bzUp_L@(Oy-w9`I*g@aewr4WI5~r+DD~AM_#Q9e@Hx-pwt^fM5Kl`uUu{0TIuP?bZA8a=9!C(@Qel`ee>HEK?g`4H+ecg+Ta zf)qe9bO=!*MTJ%EnLUd(t=hG0+q!)VH?G{dbnBk|XBRDAvwQQ>?dvzN;K79R0=C=t zaN)Iz7dw6oIkM!*ln3v<8qCGktzH{Gj5x7kLVNitn?8*?wd&QZTf2S@JGSiEv;&v6 zhgq`)1{OMl1wD3j?cv0W8$XUbx$@=AoBO?;TY_{6zCVitxZr;YdSw4# zg9%0WQB@Rz^q_nQiVf=bBq038ecmzZv9X{VNY>L{p@YWdGQN|H5Tsj{9b>Zi7v zIxDG}jyh_isoq*Es=3a@D6jwAspUL=W_m1_$|9TPJ6$R}6SL6n^K6*cVhR6kRofEE z&z%VQDpk1~or%y*%p$~OLQdLePG(U?IpuW|{xeQEyc&OmfL4pNw+KDzD6P%PzkRbIdZ& zOtZ-27}##QPsY2!yi$Jjm392J>Q5qP=pjeaN-xcH(@sAPb<|Q%O?A~)UyXIvT5rvD z*Is`OHq&*Ofr&o@&f^a+X4DaO+it%NcieK%O?Ta3*U?5D=pwjtFg$2L0tr8dBy@1^ z_)`Zj`?z->Jd+)yg4t(&!4^MpY#vhOT?6F$|M>{RPo0|$31U^9Z)+=N{ z;i4VBM=}18W^VZ6k57L2=ASSAKmMHZI$lJF!id@E&rg5-_TP_xQ1jvnvarj{q+ z!*3+Gzy(%dz3ctMGumUFKlUIDB*|xj6s(|fGRD4EndNYyNW|*kW5E!LaD2*x7<@pVSD2M3E7#x(z`(Sl4&VLo;gzQ2P8tc#diON)}a+R!Xr7K?vOOcFGk!Mt7BX5aI)?B2C0KCh_ zc%chj_>Bg4q=83fIDjlFU;tuC2=}}f%VS(dSuWz-8czX{H8igTRf zd}LKPl#g@(Ll?rxBr%D3OademAqg0zKjcvlE<%%>{OqSc{|V3zX>*7jwB=m_iqM2A zbfM8SXNAfAX5KTOrQ9ckc+?{#ft3GUBo*nAL^`3fnUqKD0_oY9 zG*X7jbfz=~$v_cV&~Dx(q#-qFN?Ynup#G?&IYTK-k4n^|`UpuiZK_lG=}>e+R2UNd z0S9Q7zaP5QH(cQqgBOthdGvkjb9Yw7t{Y(Mg-@ z6vM9XXmB{Fkz8hkLm10=20xgqjcGjN8QLAknXsXxV-&-A`9Lo<`0%dP;;S`WK z#SLh|hiBa24gN?%82rJEBrL-pP58n)643}aBtZ>~P=gfw(FHlg;&q5)!8lIA0%pLW z3AA8@Em&}haj>8f&!_?~u7HVH1Yr+%pe_@m;o~yfre8^;Td{pLLI&^h#m;z*Vyv3yN_(nBtul$fp$rlNBqRX@s4{SIh-IRkq6Bpa$D#Y+U^3)@8a*I`KWss8e++^Hdr&Sj5Iv7G zY@rw>@bEG0dgwi1q6FjE!wxQ?4Q(Vr3cV=7Db&yef2d&zw#dOAk}wW31i=;;dAHAf z4r(-}B_B!HLlgF(hAEIi4WYO}J8b{4gKnR~AJ2d~AC{qw9-JZ;Gw8()Vj+%V6e0+9 zXu>>>5ri)I;|(!?qdyu^f>5X-2=#zMrOgow7VM!AfldM+{1F5=6e0<2sKPjc5C&!# z`R9y3Y`kBUonJegA{sn%L-9KQfL+grIvYfWtGw!HXEYAqx%Sgh`%@-0eS`;7CnP+n7k0?c*Z3{Fm_Oo;m&PH0@S6j1%DhP1flp~ z^&kcYOwu4xNB{&#fCTv_0Go#Z{pNXBW)X)23B`bWyubp*um`-b3TLnf zSr7)ia0<*20+{d#{166NfM#*`4`kqMNuX=5vk#vjZkP~g%~uSA08ChL2|K_Dr;r5U zfCYR|bCBRzK0fHjvhEJt^1!hKs2UlBQ24~O&&yWPCFbG(nY;tf6wl)K?zz4kG z1CY=MYETb;*9+Fb2T4!}TK5U#Fav`C2TQ;Ud+=eWzzAKy2RkqhO`rx`77L*;1&t5` z%%BEgunbJ_3wmH|JMjNzGk^_#^?`4Qi{*4eZsZXr$WGT#1V~_cM<8YYfB^i~OrK{F z`|u2>@Co1W4~_5-pKuJPpbg=G38zpCzhDlwmS{M}4}qvSr+^9eFb$W$3ksGGryva2 zzzm7N45!ctTPF;(5DwPR2*1D&wh#)mFb~C$2+!~jJXQ$5unz~7iwT)faX56L7Ya&p z3ZWnji4YFWcna7cUzlJE%y0}{77EYMWxtRP{7?*xPz?4!3yCldjSvd|U=A$FiKlQ1 z5OxaFpkIs@3ZD=Pyo08<4KQf)f34*o>oX|N*#QB_Z zco%J`oa6Z+rWtwWaDu=njH{^-FQ^a?AOM#zgI@`o6hxl)8BNTIkmF$-y<`~p37`eC zi~qw^r-}cby6_9vV3n%r5eV=P?)eW7KmeU*W%MZ=^MRZJs-Xh5K4e5tLYJXQw4oy^ zAOreFkcStN_Y0}Xpdx_)2p|Cdri{x-Ecs)jH;SV0Dx^w!q)qCiPYR_`Dy36OrB!OBSBj-sTBHgQZxP~)!T=9Wu%5&?67VUbG^iru z&<)@44dKA1ZwjYzDyMTwr*&$lcZ#QZs;7I(r+wsB-EtZJG`q@uMyF z4c)M&g$k*WDyfr7sg-J}mx`%;N+IT%q6bPfZ$toW0 zO0V^5ulG6?*vd=VdZ4X3lbu0vM2i%yTprNNtIzbrX*3Y8!HbAi>Cd7vNwyf zZb7p3nX^4BvL^HoZe*JV3QScAuplw8G0U+vYqLJZ~Y zEy@4{@edTx6$DEG3m~&JYoXY*CaC0Ju%r?_cOq+xB5W(M#u`NN8fxP45&nT#a62L$ zksv*qP;EQ6Btfw)TLh}vf?d(I2hp_&K>-d>wjG-g=mNJabs%Yrq8ITFH?xc((IbGn z55?LJ#R?$>nl4y^QVWtKva=(R6e9ALF)h{(0|K~661zBZAoo%tX&WFq;<*G;R0@*2 z7*QflMY6qXxgR1s_fitQ8zU;UyQYgI>A+GdbxsLVy<93FuF?*(ySmIgfb>*axCNU47^Ybu`mup*$sY0D1VZfX?wwU*~N=&4v@?b?a=?oU$QI|yeeQq z$amQev0x5&Qdn35f@UnSoO%&cWwD}40li@n^&7cN`)t!N2;pE!{HqP;#SDTx4ZL6t z4E77Xpkc}N4ZOe$-0%yZ@C?F$#l7%gu~3u0@C@iB48i~j&%g}45Dxnw4Ad|U)Zkqp zxeVSC$oxPHM0g6%Fb=|S3wHDteF3j)ny11${i5DUd1UdI3m3HA%$5DK;sVa1RR z%s>k>d0^wr3w4}m6#Ze#uwpx=U-wni+4T(5kkC3EUeBOkP~86x2`vn^U=8S14EA+j z%@q#njL^Lx49|cKyig7HL@f-wpba=yT{MNp@6ZT5 zozvmO9cQzzmr13_Cs0UwvPg&5a~xV#V+b z+EC86T?{Zh4w0q}??7V@_Qd5?3_^wp$I!#Yungu*4e59a_PAX^#*eO2T;o6uIqknw zT@2~C$@)Um<4|1hFb%eV+TAc>+ZENnpba|~#B&SG^v3^A@Nl>-nh?B!;JslG$(+B4 zvcjkEW1I{M@^yo}5DKwi;l~gP)o2a&t>Jr33(9p0EuFyp5YWv?3q3gv|J)6iAjs<@ z49&fD_H9BRh6#r=Yylk#5!sBfz`~zk4WJ-l$6yO7{tMU;-p7F98-5DCfC(!$4;TIk zG0u*_b>v@=o|~nU<*W84X5Dd%4A=5woqSx{^$11(&i8f*5KnQ-sx{n3r^k(r?ci$UX5GL(o{Fo-+l_+ z@DDOM)7jnJ=^&BQ9Ohgt?vzdo_tn1x&5of^)cksOU<<`S zjp*FyQ~uw-oUKe&Z}FRz^Ea62^SC4b&k%!y~0&jjizqV zdmRemU<6Tp`c@* zU=H*M=-yt6csJsjy&3%2m&7YPa4@C})N=Kg@?EuGN+ehFz0#lIa3zC8}SVAg=# z@Dd*j+Q96IhR&y85A6_+4Mtm4PhSEll}?XfDODi>+t%a+XtG)#S4%y>3_Dyr_klsjtTmejrp()>kpFH zFw+n|?`;eT)SzA(`6a@C3EK}4rz9Wf5(133uWsREn3G8c7rr+oULR0PFXv}j8>?3{%nB?bt+t}U%XQ4{KYKdv~T}d zQtS2%60>8r!iAbAELKlm`>375hUr;2Ov`>1^H=fHGG3V2{fqU?7Ohho)CFsBrW0{bStN@ngu5B~PYY+45z~ng1#7R_EPf$obL%)1@m| zkt3;r{F7jzHS5O~7-aG%Paor)d&olG*NqoHk=B5=%h&7Uvzo$e73&rBR4nDsXfdWpYrKH=DwhAxAG5eZza5KJ?AgBJwtju{EA0D7Ucao-dggB#Gi*ZX zE5GHUW6mLAemUl!d{h#qA?%dfj22sj3Fnkv!r4a~47I`TJ7#*RZls{9`6Vc9-m)c@ zSZFcKEnd3mg_c;t;pZ3Srm+RN5Mj#aofDrCk(!Tol<%Y*`8!1zTDJPdM)DNo<(d4b zv4uM7r2B;$TCl;!#hOIoEoK7jk zpLguBC#O&n0aQ>#f8<4+acKF5mS3jf2O<)C*{33Ay1|gkUcTX_mL_QoYC&3f5v!WT}Bv@ih<6Sc32#VSPsSd)?DxSF^Lypdg-N|e=spM zs(ldr>057cWznr#s>{mEXA-P89nki4_+f}6#*8!1@|ovi$3!Dd7xRvB%8Em-%7Zo_4V2$8yXC#hYrtjjs9~zt5&zV%#U|^G~`7HI#0uH)9aKyNNE9_?bmp zZ1h3LM)c)+EUss0v6+e1Xr=$Q{9=2ezdMv=1YKS3unT8==5Ri-hC%L`HhpHBWe0no zci5SEbHt1Gd2`mMPagHpsO@&;bK8&J(YFHvZ%_whiUZ0nYhZgv)RZPW#=OjD zeR~;kSVy(Z-7a?{Bw-0RlaJ1P=4}}pjV?ImF(9l)G9Zw^KS00$QSbw0Qd8M(9s|O% zfvsxt6C(c*lgB+E+AeSROVrGsVGRKau!tv&T%v@SxT7@@ghkZi7P-hpCVp**lAE04 zUWP;_$}e=1V8RkBK_k(ZHBSBPP*=B;4Jh2IY@J88Uc~ zkzJ=wth8S#&Sd>$YZcRxCk z@r^*F^3}H86#PF zO>AcKn)^6qAQ_`gaE4Qy<0NM}&3R6AdJ~+&lvp8qhsfUv(lJ!yhcDAv&u}t`LF9Z> zI{p9oPfmIcpyXs{K@FNgV&dtC$K)6ie(*8I&`_c^jHm=eQ5${S;~u&3;SUG;%Z~;x zqyV+uNKJZDlw$Ls4s)lVe5Xi6Srct1EonX}DbAawRHr*#rwCX2QxZ~4q4Q*D$5bOj zXhQQbAkctCF{)9Hvdp7ArRqn&InJ6^RjXRPYBqtIrn_ zo$O*`DpJf2R;8C!=RY5t*vxj8u#05uWaa5rKKa8>hI}bm@#j&{UX`(m1#M^#o7n%^ zQm(L^#UEBLTie@;v$nAvt#5ycTI4zmuEuQP3y<0ui7u4{AW+0p{aQ_HMi#T*M66|b zt6SNIFt?@kZexmDR`b4gvD`(kU@iOJ-o946k@fC;xtrd~t{1$I)h$T-%UjsecYp$R zFMCa!UGU0Ry~&MCSX+Bq^G>z1=_PH1*IVDi7MQ}B#c+oGn_!>D7rh6z?`8{pVn$LH zu>)lBclXO+7+(giOzYV<8G4%Mf~+wVwIK;KkVD%*)gOB3sKXXanGsv&wh=pWjGg>s zD336#^FSmcV47sfU^&H=N$`c0ykzZ)m&L$6Zj=MtWF_A>%V;)pa%XJ0jG6y~7cL}+ zLz{V58$we9Ol8b;FWT3f5E-y-HX)k{eP~3tdCFD3vY``=I}r-9!iaV>lPmpbgDy8T za(1CnV^{+VRK~}DzKvh?APhjgP1UPrb*o+dYFNiw*0ZK{t!;g4T<2QXyXJMTef?`z zFFF)fKA@_725e*}TiMHIcC(%RY-rc|fZ8bLrspgS9Dn*Bp@!~bMvc*bn0guhAa}XV zeQtE8Tixqsce~yFZg|IA-t(q+z3qK(eCJ!=`%bqlc!xGbHlp0A;&;IfesF{*T;U66 zc*F6X4m}Jt&U2PVFnDn18c;?9|M<3TqLv#uKq3*07&#+IZgP~D9OeHjUwI-_&T^K! z9Og1_`O9Zs@{zw><|?Oo&0}tJlH0uJDHl4>haU8s|9s|2_c_x|esq@?{pm#ixzw9} z^`{%%>R3m*(z)Jss>eL&n5cum=|<&Km_g)GXM5Y-{&u*>UG8(Id)@7Rcf99a?|bKa z-`O7Yr~^LmZx{T|-ClUVCtmK27{nVUlMi!j3?2^sG`I5{(T)FO1wY1U)OyAy?1WzQ zqbGgoO@DgSr(X4|XMO8k|9aTRUiP!6eeG?3`_fbB8&#Z{IaGual;B?Y!zX_6jemUP zCtvxqr^Pbl8fVhz0v4CJGKn(BKDrLv(u<2;Z1Cd)Az1Wcf<>6;77n#Z6W z$Y{XEkif@Coe0F22t1$&gbWOHjGbAq53E29bc_+ijS_5(6O@`1WQ-NGKojIZ67)bB zM8OTLL8-yPovFbcyg?A8K->Vr9{fQb1i~CFLLF?uA*?_nd_f^J!XOo_B zLLJ0HA7sKTM8Yi$!Y(AjFFe8x9K#$m!xwBp1j;}fWWx(g!Zrj!HB7?^oWL;rK|3tN z3#`KkOouG&!zt83KNLgR!k1AZ4QZG@AgBRGj19)fJP`lbJnri%%z+~i%Bi)=L`~d8 zPV7Xr$}LX}MNu3@lcKSYa;-qZL?co~AY#Q!+@i>HA&XnYMijN}>pV~-MP1xQUhG9) z%tc=eMq%7VR~*K4^1n`_J{+h;%IG+K=sshNMroWzYBZ+}t43_hMs4gxWHb%xV?^tl zArg>8TqLtL+D3FtM|CtQnbJi}%&B5*rB*A)+j8(nx~Z$W{Mpm@bl>tini~gvgH6#O$(2^#U_3 zV~pps$fBe$qYN;n?7yR&nb0t%$54#Ocs{I@si%xeuY@e8{7TvC$`g{Y8gq=EIV_C1 z9gN8@uuRLcYA^h$F+S3qxrB_iY>d3r%d^x=qKZY1QAS2INQ7KTZ!^GWtiZl>n>uV5 z1Iiew=|4EbpXI^JzO0-Hyi6mMn#J5qIK#sT?94zE&CJXg&m_&zyvos3&C=w{%cL>1 z+{og4&6`@4bc&`&=Qr+4dT!g{ZJLf&=bAP6{XM@eb5q(Q5(Hc7{$#T zrBMxK(H$+=qrZ23U<%S)El{tyNpSRb0(gUENh)?Nwj>RbUNPVI5Xt zEmmVaR%A_9WnETgZB}P}R%ne@X|2^|I0kJ18)M=$M&$u;Ox4JU)E=YL#LS64XoEiB zgFQf3bxl`xT~~K)S9pC_d5u?komYFUSA4x!ea%;X-B*9@SAhLjfel!K9aw`cScE-T zg-uw7U08>0ScrXCiH%r_omh*lSd4vGKac}Bz}B;@8dF8d7kGh^0Rh)=3=sHIas9X< z+l@+mS(uGknVnghty!DBS)BjPS)JWkp6ywm{aK(5TA>|UqAgmZJzAtqTBTiDrfpiM ztyzEQ206eJ;Do$uo4y)YMsMA=Z}l@=3^Y`OQZ^l1vMpP)JzKO*TSViBZiu+$S31w9vjyLRQ}T**hFEmjbI(#VIJ<`9-d$# zeO_I_VCx%T6o6m%rGX3hGsZAAREyI2;|I^-hxwy2)|Fx^_J_sr2P(GW#hAbKt0%_b zn<(buD&B|rvm1YakNta-EFQQw*_(3vJ}f3UQuSdx&SO2^W3&b0g#ygzT}B-EhpZi7 z#yDa_{$M5!w-Nuo%I#PPY)}6X5hqu_hSQrO6V;ozkg=qkc=NN~E2<3q}g=3(GUPuR_c!oRXV`DyMWKL!Y z?%!ff;RYsH%J11fC5ZN1SsGKCV+x)xP+YG11R7H zM(6`FNP<&?gdS*zK~RGr*n?9Df$`L#$}X@K^|Zl zpaCYf2W$V1K!2!%8Ssa82!|w41AnN3E5L>%2!dMphcjRSOfZKS00n=TfkCJPCLp&r zXaawr=zm~=9r1xJn3fv|1%GG*D6j<<5C?5wfmry25-@{hKsy#V18Qi8JxGFd_y$N| z0f9>d9|(tWNPFumH`w%0a9b+ z`Niovhyi~Xhi?c1pq7FyXo?;Pf^lGmHz)yHn1N65hZ{(QI+*8isOqcUgLhy7Z_xu5 zFbAfNg|Hs$5(tO0=890LfI0w_We5eqR+%912kE#1t4@R+;NKodgnF&k*R3e7ye`s$Uz=6!J@5PpmV;~cR35oughIWVwWiXxQ&<0h>k7XzZUU-S3n3iIg zhvhhkW5|bGd53g35pw_%b7+TW*c>YP1^Z!=a43du_z7${hEvdvafpRw_y-;N1>*lm zU?XpIM}KrPLvpxvW*|uK$artchI0CD^mrDChL9 zdYhS=_A^2vX;(Gbp`>bW9!SFWKFUYEF(a`#yFSV(Vn26uPj_}&Y3P&1XMT*xX749w z1sxLM%{IzitY6wvcYg18f7cUs*H0x!?;60f#(3``Snu_I_Isx=j4UU8->rfAcZ#og zi`PqLe!gx5U}dk2^`>`uXkuu$oy&Rnk&1YTzj&2j`Ev(i&oQt4eCz<8jD`QN4Uunn z^BMN7pL(jVdaJ*Btj~I_ z-+Hd^dawU_un&8&AN!>LhSy|lmez%Bt@I3Db{qito7daWpq+N8d%M4Tyw7{R-+R9A zd%ypCzz=-EAAG_ue8WF{#7}(1Uwp=Ie8+!$$d7!m_LUW9ooyNaU;i$9zTK%DRLyqk|s~0OsR4u%a$%*!i*_%Ce4~QZ{p0U zGv_>h-Riu{XK&ucfBDP-(6^lBYCl)N(i$u+m zJzI7y+qQ1s!i_6;F5S9z@8Zp?cQ4<*e*XdvEO;>C!g1%lQ){v3&!GPjUp$)hSFol~ zqZV~)@E{I_3>`w0NRezle*XB0O`ZDR*s=MHuAaA#wb|KY4degLt$R1`-oAeW4=#K- z@w)l^od(Mo=xfLpkMhzb44!4EMQL2b4x|Pvt)RP(E}HKhElkw-q2G7f-@elPO8c8P zPTMl%sQJa>#r~gqf8E-d_F8cR5?G*t2O^lDf(tTO);oj1q0K&uE$5hX4oRkqE|qO( zU0XoVu#i0Za3$JT7De<6AGYukPAJSw6ACS%9MjDy!dP<(EyC#WOE1r0Qr|Ob*wV`> z=@b*>9<&^DN;tDM7^Rd`Qdy;yS7N!>JpRNI1{r(AXO>UQk%p8~Om&FaT0i^~B10sG z=2cO$bpr_`)g;2lAdNuM$0dmfGYB7{B+|$wh46w2Bl-XNV+|k2e4+=TMGj&MABmi& zSeBb|+Nr0Xf*LAa5q(028ghiW*qDxil_6!-sd>=~Kg>!4ts=q+-ia3R^Gq?H3^E8K zp)k_RCCn7s$R3yUVhbjp{8C6E-#oKVI*s&F2p@$&5)L(u2ouYSsft>zx#yyruDZNM z6bcz{pi1GYuL<~^nbRTh!(|t-`46rA{<8wECCXV8Khz|WNHND05{oUz*z!y)rz8Ri zlg0c3$|=qEK?^_T#Ig({h5T|#AHvKSN+HUiwyw)B!yL2B>-MA#8ew=W?@vbYC!U$Q zPVI4(;03EYrqbzZUG1uwT_J7vlm?WP9FVUz4g~)?`iNE4R5A2K|__g(aaAF zJ>eKl&r$a4v){h^!;OA<;Ta0UA>L#yZvpZkI6tC8y4Egz9eE!C3uwRt-bHTQo8P^_ zR|D}`Bnl3R0tl36f&P)me7lMa+|q|R`62%>gd!ZF^$w>g*2J%SNhw~M+G2qySRfP6 z10Y$_kq&-DPHU8toKYnAnyPK>gC!v$5sPTVv{~zh%9$5N7?_mP-R*%6p@0RbXhr?~ z!vZmUlk8}?7=J8d4}h}PQU1XX8}8#B0QyHbP7yV+s8K#<8wXM32f`!bF^_somu#?M z1}WrBOu<8p&yvy$4n0tO6i9(ZD6mK^Qot8n)Zm=_VGCyUArzP3#UM^$jY2fS8lNZx zGsLxrQ!wKfwkX7mRz|U9v}}*EoFy$ewIz48;SJ zxs~aOhnzi!G3W5AS3m-I6k$AN+uxFSsX7_4yB*-t+;- z%wRxSvyX3_#~#a=M>sygjDMWs6z?$7IGz!TUW~(G&v*tugmDUNSQQ(gBPmzA>Q%lZ zq7Kx6n;`4JvzBTInDhjTP4P)nNdlC1WI>HR-g6v&sOLQaG7Wp|gG1ApaX()jEMW`l zmg5MvtgI@eQq&qN3RvU;7t#OeXZ|Nw=?x_#b!^R9wuTtb#s;(+F)V3ITiAD8NL9gO zoD-$Pl<+|iEc>MFR+5R?o0vAYx;5Bmw_WZ+bQ1kL=o(yIZ4)a=~lg z`?l{kqTAjbrJGjjnwKpNct8T&3*Vk%t~9gBEY>nRkEv~Bz8{=0_wI<_3uAb9Jpm~% znPXx9N+Y=I{f7eBTjKOSfB^25hwS3(kTgES8n40YILhXbGj^ji8F`OE%|>AhXE?}0 zURyqVMOMX@g}l_2sYCw=K;rZ&z##)Bz$X~e;+}3v7?+BLKh6`1XPDy~Z9K*=4kngx zgo7XB_(r{k?B+M4ttZR)0u(~A(%{AOzljtsi3yN^1|%Q>RJO8q&$lIBKq6YS7}O<% z0jyKJK}RM#g}4;vCv&tJ&YIpdy0-KQGrU2UIwKQWL%ig*lEumY0Q8^_d|841LJn~_ z#U3iU(NK646US&oA=q&!TZCeijrhidIBo1>gNjt9618IC2DZr5?bLjBNR#D0soALWCmNgOF4rPVos$eDkR@`h*;q!C_>>JKhaCG)f0?XXfY^L*5fHSq5N{ z1O%YU?KtkMZyf&)ZPbGq-JnH`!yyb?jAI$c(8f1Tp$#;PSs2Ac-DfykZvzJK7#SiY zMeU-ftzxUaX{)5PHA~E@Rn)E>5!8rLt6FMP^+!=u)m}AHyIRC7sug?7n{V%zTvxuF zlQXW9>pahM|8BfupUTaWFx1xVB3p_2$EQ|8pY*7v!=)0Smkw2n^0zL0QtlsO8d^hC ze=BPsd>c74zrSk;dg1kriW30v_+;~w`+9ivSi8pME@Kycf8=Ng@>R;9`11ie<@e7iMoq7Cy zh6~Do>DjUd`E)^pe6~#{)1U!RB7g}^#Yv>%M^lRtsb$bK%0wD%H0>QC?NYwhQ<{pW z3se4Yc8BNBL^Y37-)d}Wh4C5CU1e}(fMw6u!{&#hn1JMBZ<4JNK%vEkP2l-Z9)qU~AT7Fm7m*+LfC zqV3re7TMG6IdT^{3hg;77dh+fxmp&L)$YDvy%|Y0ANjStoBzj3C z!9g@_Ni^3%tZ+%J(m}j#Nxa2DqH{@N&_Qx+NpjZV=F-y5O$VtFeu1gn$YRzVBo!NK*h5~~APIscgMJ9UnoCUoVo+&d-CrL*fxBnaWo z%80h|ijKCE?wu7~Qzt#E6}@>~vW~-wHlxGQHNl3cf@`-&^k*4w=dRqQ)R0%M+^KWA z`<8a4srX)bzBK2uQYWvh@3f)jw0`?=s9yG8xw$cUC$Quj6BpY1Hy;}a#_EHBluuK! zlKXCt9^8E6bF1XxWwF_v8xwlj5B@osvpO5lmgpyz=&RnK6rt#Ntv>R-VOdvV5z=jy zNozfL<2K=j%~FZ6=?$w)K|AF)7E>j5j6GJMQtQ$ZbmOWWzl$ZK5SpjdrDU%qA$RKE9^oaHbuPYRr4LR^AK5xTR2KH-{QZ1)&F{_= zzd@k@FJXiFE{{gct%9kbHq5P1;o!n2A(dqzA*)Z)N?sV31dfz)`gaE^ueLue^X0tp z110pFy38CT{6M?RE^gjWX=wc#+Q>Jb=pJsbS zp<89;W@Vk*`$9Jw+Nha4LY~CDL-)N8)xhh+x7$AGTkltXFg0v@)$?C0@IR=#6-2z2 z=}(Q2d)<5`3K|l#smnD#MLNQHsP@>&ykldJ{`FeNxHT93jeiD|U5;iea|CM5~*W7zzu{)OH>S6}WwH}Z2 zfRJl{>{%GC4Xe%zwycRBZPj{Bx$eyhk<=`JX3lm3rzSu|lZHiejP*kksGX4ZXEgbJ zlbB{}tnsqkhhx7q*{u>;-HmQ0Y^|+V|8uOr`KPzq|1!nIq2JP> z-@N7D=H{lJW-pm~W78EVbp(^zVA*yXG~cbex&8Rsjyl(lZ`PL86kokN&4Wl5BPwu4 z`&CUXh+qfnmL{Wz7W_dwlam(X0|1Kz6?jXNW(Yu^;ZBS4Y@Hv`n8@Y~d!mHK1chVP za&;7oX}IjWRQzb7>nr(TIG=W5uw6eXWku0FAJz52cdJXY z|ADP%Ae1Ebf*6EGaQkv}^`9Wg_MhWKHT~#Kx^EJXV*f!k+}-52H(9sWsTcM*rDk;J z;726H^moL#8&jA52L)WvI@^(iZSLjtQox_D4vg?ovFc>p`lZRFpV#KiUdZ(Kyo?&Q z-!AtNwPec)l386X+n<|T^Qph*NvrC=*?-o?%z5!h;Xm&9gk4ns0WEk+;GeTU8{%Q( zSKN+yd`&=n*HNVII&aoKYJ1D#S&McgRd>5E1v;_O5;2NmfKjv0XmUF-vuH+h{?cR% zwL%3wky=PV){XnBx(wXid5~AK~pP8=!mdjY}L9b)V3l)TPj8;Je1-i zc1p{|%df;C(GR83G}k4&Zp3sUrD)!I*$5QHfzR|f(mm!whN~<0s;g^w*xXfU1l^lt z-MgQoX5G|2e^gueIMm|#OLfGaFmKsg|RxMaPm4IM0Q*j-`mgcnrEtp{Ewc<_|5x~Wi@1(Yb z_vTZIIEzH;D3dzXNu4qzZ50ZaYoR039i2o`dGn~H;&dcJJEd7L>2e=CvDV2zJ!PA# zQWKq0EB&$=vc$A13+w&GP3z?kPkU{pjWhi-(DltOzA(9HUXLisS!1e+mpL7Y|*Ds}l-$F@$dQZizKONYuRM{L$bX?MaX{o>>TCm8Dt2LSk zS3g9CCSo7J5~qcz0dN>n9qVf{{-Uh2i46Ps>D~euxV$Y((oTB#(%AjgR5gcuBIZE~ zCh;%Dmd41tc1f`xr%;?>R}6?u5r8KZ&$Y2+Y76Gxp%G6FoYFJ4KXGRP0smEH7D&XU z$6C761^fp3{fClvkysWg0zZ;lx}`W&*koDL#MaegZSr@bnloPS?}WZ5fyr}Bp}kW6 zBweMutFTwiXm}}6GQz`i)#ct)+ppn$QP%}?qt+6Xx^wt;pX0{(1lz{(%_^NN zPPXddS;t9~PKZ-=P$)x`Ke>R>*v5ooO@D|5;E)S0)C>jYG8+*KXXZ~d5c zTqB^O=@{ArH(^OP22Gv3G236BstOAA)*0Ptlign*xwl=n!|_eIy2wYRJ9J|zbVRCz zl=e@f;NOLMY*;k@@7PUE&M)81wxQEr-9=MOCNn|o`>PUuH|&H-YF`l7q$W+mxam?S z?xrBj)EdrocqxPZ?3%OhFJ?c6{rr6KGlIzQOU`Z8nDvNopSsMnv~=Q3(9O*?)~lQC z3>n$7$N1W7{?7}#EYe~T@p;A<1S z(jyAlEHB%tapCKq&c+O0T=}RT===q7uQsCLP5DbeMSiRQGLSqs(##=_8xX_&JUsiF z?yvmbYxhWDF+Akspl9Fdhn+VbgUr5_CK`M6)r-l}_5W>+P>PoJb)_e?uB~gGye6L% zMV!8mI8FJ=(a=Hj%t;GcF?(Cr{mK#c zI?)KQY1KOEdM}pimhq4Up|B&FNB$9vLuSzsBdn2@7gvXF^K19pfcENOA#d2J0Elux zyKuy|V5VFM%Tv>myEzK}rz~y{D$FW)R)53)XjEA@2OOMUm6!@W?9Y^c!Rl$%;68lm zXx->$)BJp6s^JBj)Po#3>|86~l9Wk4ITCs!m(9na=Ovj#G4qUZSED~&)Vwj2V{he? z>zvo&dCo`2??vFX*Y3G~o2@V0ZI^f0YKZw-IM#<@T%TMgnk)WY{{AWIy4VFw`|EMu z^mC~Tv5*L!okUndpj1t8EQ`u<4aTddcAkt~x+O%|a3_{7A^#}p1LaSj5 zBlr|qvN127s*|a2MAD3Z@PH%{tD5d3%Q;Cc-F7Mx&B(uu3h~k9(^^4R!t!Otv;~t) z(?o^t+xXtRZpl3+_=+hl?RHN1_mVt!g?>>@90*B9x86O^0n4*p2>}Z-14F>~QkF2| zpMvA+7>r@x-aji;p>r@BJ!XWmm~b-ejte$1wR|jBeOYJrUHmFmPFd-_wcHq`S37k$ zT0(DRWR-Jle+(scks+a?W^{EjR^r3RgC^U*5|5T`C109;^yt3&;j!6Yc}X3!52HLU z*BuYEU$`{*-+TF>p>AAbIx(O?Z2@*)=5%+<%=$^i7giH}_?P`V;?F;1+L->Ny=~*o zd-165o&m7_{cS>qt%hM-cN7TqR)$6ld7gh9H8rKdcK4R9dJ#YK&lIOcZxArZLh8l4F zgcb+_kO30Z003Zw`V|!bLI#lOxD9IxIxrAsF`NFHcU?Gyz@0q9+Cse;2rb|7C!gh> z6h55+r-=k9b3Vgos{&o+NOZFoQZANs1g1)_25J~um|@}U?4r^87OKeyh|>FK)a5+-z< zRiL#H6>*|~U~eL!J7VBm#zXA2l-*yw>ji7xUFpw|5=YkjSewcV)_KVzSyv9IK+>_S z4n+EC!;Kup_eo3n;47aV{}EEsL`Oyg!pZbE@yFhaz3BpWws|KzYlQr}<~(ms{eDk< zbY#0U=~$yy(vT&~0eTYIWqywr+5Ok1c6Rh{xhr4ltNO*+;okDXf0Sk`@+AGhI&6RG%2Z|K-aVQ8BR6T}czU{!}nYiuFOUre2#4BJIei z8I@`y|SC2w=L?x`|%Z@!}*-b-nv87?YU+lR8OzuR7U zy`8^5b~e(!!Y8t|DE^{{DKV4cloYPl<1r@9m08wV&_TB{c7!)715^rNMUl z_eqX7g%OBzaFb-wYfoj*5Gm-HPR?NMClGEpZV zKbIriBJas+m^dcwshzE)n-tLFBoAj~`7ibxvjlGVj3BrK*^>c zXV3SHWXOrKBZ?EMdvGb{n06zT#h9+4-|c>w`dh8p&qtMJQC*44pRCmwkrU^R#)@m9 zMGQ3?G2_O{=ycDEgPGT_OcWbMn3EM|in|h#n&K^^N~6Ejjit|wx?U=r&72uaf60g- zDSbtykID?KbQwu)yDq4-#s25c!05Vb$g4Q31%K>{;rXHzdvm=u!I7JqWsQ$bZT5OI ze(t4L7UsbkOWiHZ76x|r*Z>woabk_G)2SV6b48Qj^2brYJL}Zo%kOa@N|4_OO~pzM z@Wv=~M*@e4Jq*D=*_Oxrr6~< z@SyHasMma_x3Ummt<46>I_$vQ&=g&@KJ%ujR!SgX3@TuOX(kcqL%8{`{^-;Zo2p3| zc=i4oKKs`k(?ba}doOX2baMV!b~4lXGCh?h209D?$ZgpJECD(+`=k`XVrsx`5fG(! zG==5#9UVDR_i9jf49JF>+SG7SI1>OcGF;@1hiKDg*J40<(LiRDHl!Fpj^s-0f-S}^ zv{vmizF--Ce6pUUS>TeaKD_e|k>sl7_bAajbeZjIw!TCR)t&o0U7Te~Km`w~c(3!q zD}5HZYV+@sEMf%St%-wVOYQ0J=612_CFn^#aQk2j8_Ad;M8T_2GA;xfc%NoBCnD;l ze0g-#r!68_i(U3XlDEmhu7N~<4Tie)9i42yHm%1MFyO)UD;N=4Kqg-zh=8D$$TnaG z0OA8n9iRY`4onCIQP0z+BP;bV!O$;7Sv27i5G|!v4h)nO&AEWqqS-`1BWA>TH;#KW zvO5w{H72&_?Y&a8gDH-Ah3t2WvUSbB&Hh;}D%@yyQgZEh=|d(}7bt%OJ;~akx8*Kk z|9ZT2;_8#&XXIFqUFwtN>wtOYb(UP0$03cmzEVROefEjHoK=xHpK}_xFQMmpb}CH9 zM(66?FR>t>Tg?@RyALX?Anitq7(tKgfbfDI#wAib=jAf=5r!6!%LfCBEV46XM`^4j z(6x?Hw_}>LXk2$vo*}OTDqOXxJbZvOzwk86hV}wpD5~j;E*KTMLmJd6tZPM?sX7Ku z9A1~R&!+J_>n}>YHap96reuHN@PK!Cr`4MU6G_J~-oAOixO+#&fACH09rMbTh!{ui z!#G>5F8lv*9C({unXH@l0-aMgWc zDsekH>`DDQe-7=F0%HVN$U$!vj_qGsC1&<%j5Ji+J1hQo^1%4I>KMZohq9bTJ;J*=eonfpqWewkNpofI^mSQYh}7l%ml1N;K_%9y!=a6Ya{s|U zk6xy7nb)VV=cswvlMQ|x>FdaHJL=K;2+SQX_U4yB+$2M+COk)u+NRIF2im)Y7^&iQ z&X*B!Cap_s6c-;!!rVJ5X!*a&-->y3O|h`x@L+<+sgjV= zrp337Z2E0;G&9=v&#d?2<#DZNf5a(SmnWb$MwfhUB-~iISt3Pgx4dWqU$jHkPH+=l z$9Q<)t|***c}6CG_Cc;IMm{f$Si&J<(;}fwk+7La#^Xo?dlZvW6pKX^Yfuz>b`)n* z6!%ON&v6tVdo;gNw4g<_5T$Q9JDSr~x?zW&=eyRl@mM-~xhhLD{&FCS2$Y&X1jOjW75N%n7vz zaHFWNN5&;&$0at!C6j03@W*j!?C}{&@tGF!*+KES+3|Tz@o#713y$Lp*%OMD5=t!+ z%7YRrvlFVC5~^nsYK{}?*k9Hwy==62*%b7$D4S-MFAl7P0HLUY6%xBG5_^LZ`?C`V zn-Yg+5=V{`3G7K@N=XwINmD^dGucVAO-a9IlID+-i0sKrO35qbNmr3HU$TYL4dS3w zbmxG$O6HVZrIdY(l*4l6C49wy$t{wNIms&YjXti+#{Y0mV9Lp`%*hPS$KMm zHFDC0`S*3M77Y)bcdrTk_oh%iK@*$N9nGFG~A@3~4MMoO>r#~T7m*K(8 z@`lf4?Xnb~rv=(fi+Y>M@`n^m2FkKnDJkz2I%O$vpT47Cd>4|g2y;_->x)E0$shU_ zzLjx2%25P|$ZBHb!wQQ)9fd5M8t0-?+;;-QXacr2-r5WzNE$!NME zB77MMd96dg=xwurgd`yuDal)Zyy-6&2LDR1x-Ycm=nZ3s;RYq$-tHDtDcjluUq+Z# zlY3#J!dKqu(VtLq{shL>NV*;ZL)slm9v?pIP1i|;k0YS1HSj=PhIii3dS+;+w+F4O z$0)+Ilf*FEu69U*HIf(`NtC=V!vJ2P2g&$_q&9@GDAQypIjjsHx12y3yd!8d7E~Uh z>1&ac?YQT+W6k;KX#g(ev%y#Lc4MC`TG7eq4bQ9{O%4407%*@#LqiLRCe z@2gQ)jAhv6L|M<42&z=m(3S31+yZJb+%5na5g3M0)IQ!0cOyZwiWgv_8>Au-m5qxHsN3Kz=B5bEQyXH>G-yTvj@Q&?GQHtJwd4P z842Xi3C0$vCPjk2);NsvffrHWp?2^J`8gmYypT2guN)B%>jW-0l?WB;9nHPg;Y=9VK~bNUc*CL@lbC7xRu1< zSpe$PWOzmdUge8EotihKgx^6D8A3a?K0{YAwdW4kA zConE4-}ldjToyF7qd^!F$fw;qUXyaNAc}h*!%<*=5?xOLD4%p|L#2A#n=YKB?n!{m zXfjNSt71s-88U#b5f5o3!sp+EL-@eODv(5gMwn6W{UPvP4S0?3zkK3KKW2(*t;`WO_LtZ83{ zhqxi2L?=*d4ei1{><$U2hVMlaXqWkb&rrZbK-cc%fP6Q7_$g=<;O>uv3>1J`QDqnc zBlJSn)=iQ^JGmel#z~+oK;89La5#w}<0?3-5`6FtQi1-|fThcdY^t07T!#EsMkY`W z9;~ne9^`JX2Y@MvLe z*Vl)f?ra|^BTeEZVCTd(XGMtPoHObPqbL5u3?KLf9s z*Zy;87_dHUpWA+_t@ziwiK3e%62DdeV3jKH{78nTQ z*0X%LwZi`mnfi8QTRQh(;fo`L#YaUKvx3<05(SJLfU_X* zjlP7NWVr2yY1cYc?%LB!xmzt8Zh`ssxb>6xLVukl_1_+))f@g8IlrzVG79deDAnGp zpkpO+2O4M|;?X!S>gu>v^KX>|UW05QqGWRImXv6o!!s2_?9y^kT~b&XB>h?FE#WuV zG}#o#H^kd-h!wfeY}u0dya`5$SnW5-X2N@>!i&a#lO10dO(SE{WGhdU^qKRPyyPyl zx9g|>B0{o>9C@>r{|0YM|FQgsFShE<`8)oDRR8JUD$kp_=DhOit$%%6#B+E$zeJ}m z6HU`B=s(1@XZ&ivDP8Bgdp~j($mh|Z>)aQGIiKrykze;zc_sNw_JCIaH7?)PF`4=i z`)Z;nwXgd|aB=EvjGORY#Tx{e1h+!aMMfS()*Pe~4s6K>Xx>8yjYCH`q?!2JF#pi) z>!HWOp%?kkoA=09rv>!Q8@1r&1&QY|ABot0*V5>Au=R`t;ZPV#t9ni0@!@6T51r^R-sr4gs)`KOg%PpcMAtI4M| zyk~V9XZ3bxjS*)}`DZO(&srDG+Q?_^yyu-?&*HsdvuK7H{CPs&`4AZfrg;Ac`L@5| z;lv&?1V0mTF}t1ei=2Nk7jbdo%D9ELUO+O8qZm4~E;qkkZY@w~<4Y1Rc~^tHZ%00i zARp(GPrs7S7svpudqmA>AOnwXHfm8jmf@Ou4Ey~h-Gr+^h7Zrk+- zpY-O?%V1LLQW(!q0MdF`N%K zA5=d4VB3@X@Xw>_$6vyMT#vRa>YRt)>b-vS*Q(KTt_|z1;QB_JtR72yYiwTqxyZx1 zP`dOrV$R-L&x+1Vl0$D27gu=T%#PFGD@nWFJj*?okvD1)pleq9u45(l^7Y?X9k_LF zpAU$xTzS@?EkwSk_TXS|cY2Ls{s`i+Ird)aN#ZqlYjfheHf;ShIce{vXTGr6($trq zJHnk`-$a0UZO?;tSBLWrcz?-zq@+HXZoE_sBo5DyFZAWxk;5-9E{g1=8na!PD_VX6 z#y_a{Tsqchfq7$)+H_PgBfOs>G287YwBLr>=rm}hb*~r*N_PV!^OBW+R_ox^hgBt{ z^*Npt*XncKSJ~-2f;su@e71IRALy$=lM zv6kcWcEcq%Y}Q^VKP)`hh38@Z_qZId^OLnKzw>uO*TQX9g|E4cEqYM;FGJKLc?DImwIEqIOHv(s{oE5dc4alm-HN6{|KOl9Xy zfT^IY`WBOfzqC~dz&S-b1X7k7QNt&YuRZi5I>m(PhvQ4J*|-v%S&c5qX^PAnBX)!Xz zhuxm4%&zyAV}f^f&LW%01nCK#Os2h7LPUA(9|qP-dunKe3%)4Zxt`7;CEyrRm?C&S zK*e+`gam%=ooiT_<$ZqJ$%!?a4hJ;s+-QEI8*<#8YwL^d&3~F!p6RiiVsL5uF;L<; znr)hAtH!~XPv^Cn3-NchbNN#zYJI4^{fN)y(`9HxZ}Vc7Ao18BL99Ob%sHaPQYcPx zD7!PCr;Uisk4Rg`Xh3UeM7le8wVGl$^cCUG^7i0y5{`!g^02xtUz31fHPR5T^;ZhW zjBCew@D*&5;LMWyfQ~)%p<&@F7V0^&jBspP=4zZ<;cbLaNuGDS=f1RNc{73nRf`H$33JOD>zg{o5)TpwR;7lc&@{!1<03o zsR3K96tLw(tfVav^bzPK-fatNLG9WYzg7W|FR72umk*{MI7vvEKpvufJVH+u1tqG-KmrmSKUx%&^wyJqN2FC)kE zwxoqqjG(433e$6^bO~-F117XL)>SU0g|VlOy!<(!=CyA4i(em&Sss@ohkWiEHIEky z>xsG>)24+YQ_|GOMx3@9(m5Od+9}2lUDM;w>E{Ls^ZS^XbR86@4hfWL^xQ@**u(So zMJxCQ##F+W%JiUg<#**P{rLBi4PMEW*a6)wZtaOi#*2B5zBaloEt;Md^6G=E&wFb+ z0dtuz@^52uHmup6v(+9>{ukkClnh%oWk_|C`CHy+G_{#8Ek9M8g7qLf-B7U{d^A;; z)#KqJ|JiaRVCrK&MYhmWu^P*qsxR~0dOlOc)|q_AGdb13!MV<2s&K0DQ;(;Y|7Yv@ z!>LbSfnMHNm0u(Cwb~7Dob2sBv#TWQ*2*W{R;saQ@OUuYGTq}9(D3>3zkun_3&3YV zJu0@lnbWPm^`3=HezrYqoc^+neHOZ^Vs|<<-L~dwaQ7+AXrw6HhoK7tkNnTm5?5#1 z!TR3OS6k5_#hDIxtar=}RePxUOeb5fcdUG?J!9ZZ7ca;sPVd~FdS|){S^UH?_x+=F z{;VdcSf4~^RY%V0nO?=-TJNOKv(j&Z-bz1);lVHqezqU|^8D`Zqhz;%4p)Oh9d+M~ z5>;pLYWcPPhP!*=i9%w5Kfc-BOhJ#9I%g{j0YdbQUUsy)D15Rk=>u9sJU(0K$P3m) z1w4Oy(E6JYXE`9k>ig!qky#Ft{B3iY`n0OXqJuh(i66{A2m;V_8f$+mX#|x7y8YL$f6_n_=0RPKix=V9)@yu905J=$GsW-}7AEG9xP1b^I|`0!!a-GuYS z%$G+8;gFI)Zkx&?_Xhm)Kw;_7l1Fcyt6?v%eT2IZ__?RpaSCl6iDdUV6#HLF)Szl7 zF;G>2b(>O&SGA~N7tveZNYqp7mHrlZ;mEm2G*EQ?&hSN7gmq@ej1%`8O9kf!ummj*{$$EgAlN*z6im(viJ`2*X3B80_Z8#b1+e((FsXP&q z)n5o7?c-tpo}}wN%IX>i6mtEJ%Z|}zoI}STnL6T32-*zq`q8%H;T#%291!p7v7Fsk zpv>CZ?3b?HJdvs8pA}qrvBWMJz8#p+4F8pQVviKazOQhO>6+x&OET327pb&wr=@E|EiFb=BWcb@oYfr@KqGL^n7;gwxy(xyrx&fM+d?XT|71Gdt z`nhL@Ufnguhn?15gw~dbQFNs>Bx2oAnaPHO;N@t+u3A`o>93@3EiLa-6Xu?ppxO788G2_L$%KfzONhNo#MmJ~*60|ErXsdqFpc0?EyEZGRI6DHR&5r|6)}B)8Dwav>IuPyY4%qB!D?B=+7A_Qr7^HArGy^GY6s;y6KRYHdcRe$ z>LMUhu~?T7oC!Plg1Y}2GlC3i)m7g6Y{8ZI;OEP8w@S!4q^qV>T^g6UB&H;4VC9q; zx-OuUs{Y&+{DK`vsrd0J?+0z9pF4=XGQx$-;MD6%y^)oE$N{%8{Uv;-ZZIw+2>iOZ z|HTfoQnN@#Yep~INQz3{$s`y6fp1(#9q*_u+n$U8-D6?cm1m_L7_ z8`4cKj&CLP7c#|XR(?pqcRp~u&0gH!p?xPGb=%PouPz$@;I&w}vQh8Q?Il;H6sL;* zi3|z4S1AzawRa3{FuDr|$wEhji83thct~ma{Ym<_#4Q#2`n#VE#s14E7vIZ@Xp))D z5Q*4f`%yJqygR%=J3=P1j4TR{EXj>5>yE5E7+G~1SvwyNAl;ddG5*;){L63TPq*<} z#=Z4l_wtCw|0ae>twmdcCJTupd)@In5~BxBqldI38~etj#F2k_qyPLy&xVZG^G0`C z1xPRxqEm5>#XY+2?xZ})^;6+EQv%SL0P-h*u>{B~0$m9K+CZT1A;2aH466jj0|FfQ z9dY&hl^frg|n9C(ApJEBKEqV#k$Ujo&I6S8fPqj!)%@C)38W^h_8{PTX6aFg}PTs#UY3fXH=zjUC zv;Q{sejndB)fJ}mj7iIqNvnoQ>z+v)HRJhEPxo{%6{@ah5 z%G8y?)EKcR*D9ZeJ#zcd-7#3}(I9PKWa!yb6<7ccaeY*V2bUQRDA!hU$ijSj9zAHdy>x!kKPPy~Ik`7j+aMVd0TDGdws*1Q#X(&OZh^X-={W40JVt2UjeX z#&FN@;9wD)Z#yo62nt2qt*jcnn`23Eo9-Q(zOighbMIp_b^MEduvszj9a0VsAYhE! z#X5jDH3mSYe6ineJhtEiS`fft$jXdKaHs`16mLOjsM5ClE`7^N^JAjK)W8EAp6H4X|uvJf#XpA7g4*VJHyn&RV)(BT{H~?%;#62%xFh0f^Yuec1fj>}o z^HB2uO^|sc*vHv!z6BRZ!AByoL2+OU6gZR*Kvuv^>2a~|g1e$PCY(ziy zxf0mS8wd;l(v194O$D1H?;xingC=q2cu-gz&OB(&JPsFT@%SkcWZ?>Oh{SrJRzgV2 zeY?!=kx2;+hV)cdUnFTd-LsnBpZ?rUf4@J*2#t+s2i`xn|2P>FfsCobuDVCAq6sk+ z{YLH>gEqu^tI_H-fi`=9BCNoOa@^!KoHBu0EE41z7wg)OHEyD@3yQ^lnY(jy+1j33 z9uL-tW$}&t_1y4RC=zGv4fam98IXTsP69@zSuW;+L-1hZ0?cz)OAnzBlsm%kI_P#k zD6|P1LBM$+ox(`y$C`6vH-J(9*0Otk_qrwY%{r0UzR|PI&p9*1hd`#ifzwHCIPZ(~ zz zgME&1L6LJ2$&%G0Rq?hDQQ`LYZLK)GW+BPM{ZOz}FCu8pJr7}?2k;1)aW5THNm|1S z$5FdxZ}fSs8RA`T;b)~{-9w$r?E#pA9S z@UZ7>z)#mZ>VLnb{gHN@Y^k2OAN!sxO|=zF`jd<`FRB9vy{gKb1-lWcxm>Y1UTeQW zw3eDN^4`|ps{eWnSK@A3xg@1kWY&UP|9u}6TM8J$lN_EhY!9~l)%aN#YCYu^y?vay zeNwu8+W73m1+0Pg`W^o7kqC{G1xCKzDx_(fT9HI!K%%8wuO}o>API~kQHu5`lOxbi zB>FxQY?{RIo5ZL%wVeAWY|=BwqSpD~UZd^~i}}vgCp)ZxKF}U18j=NY<`s*{;~9UGctMiIm+s znOYOpotJB#xfX0SxGE zM|&FJeNDD~E#ZA_#eE%veO>c?y(jznf%^uyeZ#E%+hzNAKJDM_+c%otznA6r_Sb(Q ze^yvW{tjA*CB`yuH%f*v;#A_IvtvP8u2>Dt7}*+X-2z+yWnSg(_T%3NwnqncaJmj^ zc4Ub=@~eBRx?}<S}gvLSa8jW~*iulFFu(SG(R%l%=BZj{yVzd29rr_RIuo;Hq2(rsU4toTk6=S4V@pO7%QE3xj)$~V#PjhBN~ zAKXV9q{{psH}0E%es2w37*@DJdN1_%ajVF*2eB+_p~TDMMb%Q>*pni^xv&P`%`}0J z58RKQudYA)_VVp(3;(;DPODsA7wmG5-%{@`8+d#@3p@KjdBdxUSNx&UGf7$5OT22x z7e!6&ny>lcil6xdo+v@nhXA>mxkns3%kcOcxk3C1qLoejFC|-!`4goFl?0OHXM+Ti zZ*4XSq^O-93*fb&w**u5ID?low;!xCS#TKl*gxbgte;f9gqRr$B)V2O^FIzbxsgq_ zPq-zN4-@S?IN`*NIS`&mi5C*Z#A?zjK~%HVfy6ot_96L_w8B-UV@nh!n<) zwTKjX`qJH2Ik9OPdt~f2^A2aK-}uV>1*zkkXl!4|n=Ru1eK|c9ujzoQY}J&_X!mNIpBJ0zXPQpFD}DX8+d#^|>V;(E54X>f zpXNf&B%2l!RQ@IS;;AOF!nf#49_EV0Gf95fk(c^%F#AHP?PT+_)YpsCGpTkedR1fx zkSi3~NhjWl>|#(kCw;a3;uEWu#uzi!lCAH)Sl@WeJYjnMrK-%pjn|7`e~}x%r*a`TasRHG{NzLH zumc?OTkFQ?J>TNRkN4MpNl!Vy4pW$Y`u>Z;PtVU63cq|bJ{)j}i3a;vD89V*VMO)Y zg(5MEUR`Ms%N4G)WIX=iNy^NzSJo66I>){3*6#=@ubt6h^>ERV(Db=m zn-%Zdl>dDA{4aROAJbO6ZkpQmsWj~9TzUJ;*`*4p&FHV_MMkzzxcSb`=jK&2yuLJg@{|nF@43z4zD~a`e%{a(%PhWM?*23i>d(U`1)sB zo^D*Dj_s*n)|J6Gx_l=yRGhhZS|2$F(B--wU3Mz1$hjkT{ILOJ&<nFa)WyfV zn4%C1TEPJwgj^8 z*HX_#fUH<(7*Kp&R}-!$%5Jsu=BWzFq*oYK)=K*osM@W>C>ikQ>aiyp_VJ7@rrbP; zVmsjL65Xr;8)ZjvF#pm4Iev$z6P950O}hLy7vZy#AKxCf3afu+R_T4Uor4#Dvl|<9 zbuH1AXRr=TS#k#tU+LmynCpwTe8#=6We z5-zgue+>IJetdf&;i@A(`#tS{0OCL$zqYidJuPZetJ>AFwzaN(Eo@^8+Hu_NVj$I- zVo6Fzl$awNzWpt5gDc$O61TXx4F)JE_9tEafn6UIN zQ;a|a^Q1x|{wIS=OiG~TBYOL|F^;2$)*SQr#%ING^HeP4A=4DGOS*7_ce}BCv;({Q zdoq+2O5`b1xt{zrAB-C)We&%ghx=q~gd@le5{-Ijvz-9C z8E64ik95-WX8r8B%6|T{l&wuesC{)*{ktF8JZD@u6labYjjj??B<2i?0Om@^+`reYErjEdeckR zs81cevZVT|fIhaL1&!n_2e>i(@J1jy(Ft}a%VynZ$4dAi3=WRt6U+$zM=`>|jBr0g z8?oq_Elx2GT7-fb!Z?LCXmJX2Q12h%_(qWVF%E3hk00P3M=zeik916fAJ1qpu!A$j6)dO2#2yvJq>eMk00GQMmK&jjg{=<8NV=xKd6xoGTTBM8p+2y zjzJAx=;9l~5O_PNF}-&@;~l+VhBODxU9Hb1B_2uuhA5{xKBEX)v!Pt<`AkT``LY{82`d}0}~ki$Pv$c#QT z0uvwG$GvH0@K5k!8MX+=CqmH+TEv1Gp@>B{Vv&whVB#6a2!%QS?BaNy)8ZYW2*u@v z@s4!l;~TVSM=@;i4NROu7?q#LIPCGxXA}by(+EYme-Vp!nByO_KgKCQMT=(`i}>R> zhA^0M3RHT=Rm*upgU!!L}3^*w_v6obkA12*u&H`qcb6vHoEg7Phc z%hAF&@IpAapfEIGELfj8+*}ThgDubknDxRj*a8yn;6FV7!!(p&5B37O{Q@og0x!hE zFNB;e!~(}@l=gL@gn3o>El|{rlyZb$)s3G?XaRJzgf`fPJ-ovu^uf6CLF>ueC&U5* z3d11Kg3A?xHekak3$Ln0KyF(@Fu&BH$QLMZ&gKb%536azLG6E-XZDA+&aAk2M3f`kKa z%!9+(LpY=ZKZ=JvV4EGKgP0|xd>rIJBqTj1NN&)~LgHJQ<-RW{xvSKU^5jaZC4_1N%Li zjzteX)=$!r8bs}ySwR$#b=)}Mn;q?gKw#xSSj@0h%vMrL#SEJ@DkVW!4^~~vSXp`{(n(5MYUTBWWmeW0Ke{DZ;v`>cBa8J@H=4vZnpja?26e1NQJMssr5T!y zS#dF@aE;kGSVNnE<)pX-Qe|f7bYF#R=4FQe;X(u@XJW)dU}j&Q=2l%wVZpM$Bb>rbK%J3OPao#N$6Ut0ULC597EySs)0rQ+y#!M>78ZPP)0Ulh_f_-Bz~CpaRhh>(LXJSscf1MRFMLTLm1&BFx#!#CJlCWeDKECVx? z+%f#aG8BUV7Q;9!!!iKHMkHb>f*e0+!#qqwi=tpUFa!NC)TBM7=qyw>FvC0~<38+9 zsd*|h97EAr!#ga4i-KwNcw{>;12v>-H^3DAKy}f?86Y|VC%hGIK%=qr0K98-n$JUEgWGiXazQio-GIiKNyQLe1bMK&pVt# zFK9z3s9P~igEm0I4xWM(A|o>#+%Lf57zN+z6@$+$1Jkvu*%}b};KzZ?tAy68q7vpw zl%LkQ1EbMHg|uOn{6Ztx!^MsRBwT_VzyTx_LL1aUEY!i}wMIA0A3x{;?lA&03_`}0 zS@yV}$i+e}FoP{%!Z^VH;xs@)F}xEm(84ktA+8GD=uRUZrbFQo-pJCdz}W&duv@gU zEH8+IFkC{qsT(s4pUFz!$i~7k;^EsdL*+4F1BL=GupSjwL)nd6EGz>Q?qJWIt@R!d zg^|YEhC>hp0Fk<_H)h463aD~mC^)X;MifFH978Pd!6mR;A}~TR$^kFb!4euQHBbX2 zoc0MBldYLeE5Cz|n#*w1YT&VDP1znETfFBnrVd_yCo>o~N-DSQI+Ic*j$TrKDiJ1`!oNZ<aVc3P-7dP6i^F+8N{Pqm>KQiCF51Gbq1 z@2O-v)Pn$Sgf=h->5aoQIAk}_j1LWP#W>caWuApp>!(82GQ5Mi2J17JwdA2Y+qNvp*iF)Vve_JW3ecqI2eu_%4Wk&>@KRB5JJ<3Du6qru~rI;F1a>QkoL zLb+-E0L8G%@v4DUU9x4TRWm~I<3&IeUMe%G>4aI*%vpAGR?aC_k{Yc|BtJHDH^XCI z3SK#Hvo@>$Ge1ISEZ4JBAsAdZhAnsR_p;}`Zf7m8)Wvke3DYBF;ZJ21Xk_8ff#MIs zG4z2VTsw3_Wg69JvJ^%)M`kW3SYY&X5|xWRXGf1TOdV%)SVq@$rcKD1H7bxjzw|wC z4IFE46Mq9gL$N+(MgBGDF>il#UBE-hu*er2Q^R= z^=|JrZ|gRQQl^{5cJ~l>XdideJe60(wL_z}WS1djqeQ={TJr?kfY?TVJQ|5$#}bzX zHmqVcXXQ><4?aSaU4my`o@K?D1HLs&^nfWm2N_gUH}}+8kcnmU*mr*CH+-8#jrF(l zM3wZsx3K*huKo9%Ei-a2IMh(sa?6E8JGW|2woa!+J>&yCD1$qY!}R#=CtLy~bj3eh znwEY{%6$SRz)Y27T8XrTJ$!eq=}(Qt9uH9m&FIfJ3|u{SsX3&BHuRo3@MDcRq@-;B zL^q_vusT-kb!3gfp1cC&b1V>bB>6sgMM9}XmAAt_pkrNlWbCyBjycvww1cvg2CMa= zrbbGaw!=4UdHhf`%(WTJu^L3ZgEqw8XEV5-0}W%h27*R-H$?V?LwAM0hCi5s7W6AP z@B=+?gU0qj9bnoe=z;PfZYaC~B>Y1nQ~?$=!5M@?KJdXHEJGt$-^bX4lL|ySBmy7o zU>$sdFzi7UCPLJa2RarnXj{)UqLdP{5dQ4BVX8G;d%4B`LO581 z6;_`xyqhpUW9o%MDHNP!uI!4~X67tBB}9F&t* zNiQUVSM-4)g+d$1!6yvD8}I=p$id}do;B=x<9;yYIucZ%V;ME=?0$kdM46U{OB&!Y?G;@ey7vfJzdc!ZiHb6bkVv zd;>O6ArjhyBc|Ik2;nm{!ZLsg^gTtSfy%xH4 z48uRntv>w2G*kf?e8Co+f~>E>5`@7QKminB!7l)l8q`4*EJ3C-!5+MUxv+r1T|}yb z8J2{7miz-I=z;wDJlvUVAwYuVHG)6v0V4=Q!gB1>iwKcrhRgl;-egDi%^Kb#vt{5nNT*r{0UsEv#D zY*{Q@)k6If_)A!*ch5fU`?YMJt$em@{fiZfS14NPcs=7c&z`-1FJZ=%Ig@5hn>TUh z)VY&qPoF=51{FG#Xi=j_ktS8Tl;%5saL)Y8H;?MSckSAxGnWqko3$tUE@ebFKf8wO7wy>5F34cgi$4pqbXT{nH zTb6HJdVc$!{R$_H*>q~(^kYW9aK7P(ns)55W*%*L!Dbm@#9@Y+d8*m1C8jXUP{R#5 z?9jsxK@3sE4V{8YxOY&r3M;L+@(L`m$};Pw04{k+t(VyUnyH?8^pS@hee{`XH}LkE z=bh;I@rR!zTiRzIf0SG@N`8*?$HKkOM9MlQcO6vzPNNdiD%9 zSgKg1YEPD;BkqHl1pxr8b>*w#sT-tlk;tn>HzH_QGWYy)9j4 zFHBcBb}74YU6;^($=G|%Jy$q<(`|KFVUyh#-5X8+E!g0L5l&d)g^@y4w-m2>wMAKB zto2qKb8TxTVO3&+kr{8?W3=;* zT=K~&uiSDHpNc9_sU;5FYKybR`0%(n?%VX!QBPg<(=Tt`_19sK-R`~nb`|idD<(X2 z!?#|l)uP_9rkml3A6}c{kxyRvZoc`3d28DLNmKUesjuGp>oJ7dNWZ6^Sn#V0Cs@~+ z?zyKbn2fX+v-FWYvF}z{wW@aZTGRtk^s@Rk8nuk zC2+Ed17{+=n^cA-(vx5XFL*(iXi$QXyC78@s6p(Fkc1_y-rmx|x!X}}a5Az9T13}7 zopH*3X@Zgs#RR2)K*=B1;-Qk}al;=5F^5p{&Pwvpj&2ZeAKyq+I=aD+m!YT~^T-M| z#<7pmD6t#n_{KQWktHUEBOUut)AmxRrk9xU9c)U|rv8x*2tp7uX7nFr9@dWi?T>*k zVO7+QR3sGLC{0O}%6Cw-56sv@kN30x7o3WeLMKt?J0`T`B{7*d+NqFgECk=~#D_S_ z_@fhm07N9*u@ZXp0u$pH2P8fb4qnvaBarw;8_aMFNYLUE$Jj?GiZPB;oFWvb;KwN- z@eW&<5gDAr`dQ zLnFpPnS6Xhj`y<#ExK_ETh!wlC?aDle$kF_j3Xb`kk2WWp`?A7BOLx%#x%l{kA^&> zO#JAEFwAiZUR2{0%y>sQw&V|N^kN>&IK?#b@g7@n=05)zhdrKgitcR1o5ui2I6~12 zYMdfm!q`V>glUVPHj_A+H0n|Rk*cu0ZBIpU?Bw@A_d>1xV|*}i$}pl(ic+}ae(i`u z64aoEEhHfhO;~~)m;i+^U?B@?SV9ui%7-LeK@Uk_LKT=Wh$~1z4@*!(79cSNUihOP z(JT@_3L%Vi&>|7mNJJvupodVjK@N>*#2}{82W>E8ACUOPG2pO_Q2gQ(gO$oR%mJNl z@FEuB=!Gr9@rhp)BNjV_EiF1aOmh_D7v^||IY5F9Oca9}m;ebaVEYVZ`ji*HU`H`{ z!3<11BOKaz21$Amif1t66Sk;DEXIM2ZdfA}D_!X?F2Rg;*y0!A1g>If0o+r3!y)$g z#V@9DiC^G$87oQZe*ql-U=S@eeSdrE=X5947*bV~iGqe8{;}13(4#R;s6rD$aRn>{ z;U92-f-So6k2%yK?_3+pnMuKcp8fq|)E40DJJ9N5_Zj2*7$Iu3P2*?jI!s#81 z)Pb_dR#3u^*H-Z3~PEx89ht_2Tx9w~#fH&Fd zYk3dBP^XF1L%FfDed$=7m*qDO`*;ENZz_5!;Mp1lozqbMe($CtxUgasXu1lTRHUM- zu%gElbtCa%bKLpSpMLeLA6dc*;O*fb|D*0r{I<)DHeUV77uE=FGTfMv1Z7z2WMD)l zU;ZUf?!#EDf*QI)8?fO4Aus~*4+8P80wYiYE6@So0cO@uY|M{ia7ARs#%Flu1KY*? zP>^x||b@fxu)8$rbsm4z3-=of==8fCE>sfrflXLZmq9o2Ci*|8nn@g3nY9_4W!>9HQ| z@gDIpAN6q``LQ4U@gD&)AO#X2+rb~+ASx~qQ78jNzHtB!KpKZp>hy5x_~0de=pr#P zBQ#0NwOqO@+46*B~@}IS+XTv@+Dz1CS`IaX|g75QX};MA@k)B zHE|q%F#!&M0ABGQUU2}(kq_iR$Ub2ynX)OJ@+qM*Dw`4$sIn@p@+z@1E46Yfxw0$0 z(krDhEX8sx$+9fX@+rSEE!A=@*|II&@-5*qF6DAA>9Q{E@-Fc*FZI$cFX0sbwg3%g zuTzMn9tP?sgOUIU;2#h(CmK;W4CD=&GS6b zQ#q|cK}yg_dNT+J04Rl1F%z>I`DRO;L_O#vKOZGOo#a0J6H)?HQ3$j^AH_fslt7^) zK^e3`3DoZz6hgm5LM25(3q?^bbV37EJqC0`7sW#zG(;oxKPOZ~DHKls05m@f#XnIr zKxSt7n3-P z(W(saN`{41gauFUv~=q96zi}X0hL%dMvnm1Pl+W^4HW>pF;Nw@8#xAFzR*zzX;B>& zQBh=34fRs%Fi|!2PcgMn0~J(7Rax}(HZB!)F!6m*Rauy&P&4&aU6oYdXH!2_R$G-N zIyF=el~Nz|R&})*b#-%CHBfyuQis)2YZVh^l~WOQR6Uhco%LA%e-%=9wf&~mT9H*& zV^vv`^$?@ATDkREzpz*zbpzXvZ-UTXB(E^vlmG-^IOTLA&BkpCXmJ22ZSK`x*X9rT zwO{@9Uja5?1@`>#^;!*fU=cQ96-R9pwqYIiVIekRC3a$uFdx_zID_+D1wbbnbHQrD z10PWvMRsIKwkIw`AF4wM1OPY%pk@ETW$hCZKeh_HhGt8aWNo%-a`tBP24#Ix03HAV zT6Sn*R>7u@XOT8(mG&r5HXT$J0iafB{{d%On-!>xtHFMSA4H!9Hw`8n>QWQ z7kRmbeABmm)wg(=S9*&Vecd;E-*@-ocYOz{d9Sy9zZZJtHysN2eAjn?m$!epcYWQL zeizt*(-(Y01AyiCdii&K(f4}gmx8t8fI+x}MR9>6u*m~tRd^323JNS6dmwY`~ zfGK!}8<>Av7>5m*hEceNOPGfFmwwGxg(X;kCwPI67mRq@( ziN=?KIhci6VtLtdig}okxddaPX@y_`D8K>#D1ZSr`5zd70mxBimo}TVd7EFtXNAB4 z7~q+!nI}5dW4Za9(Ya*38Jw$moUPfK4Ywv}Hzwv88S6RK?pX`-`JVInsQ9^`YtNh8 z*#a0q0?2u)3`_Ltmh*N)ZtW;-Hf2aePi^3cq8A!EF4}=M^p6rq`yjei)Fw03hWXH@ zRpeHqL;7qXI)ThcrOjwiWb~rpC?+6igG7jbXxf4l+M%t2qB$CpM0%&whE+~lo<w0a%ItUan3(}AKmtnJpbh$Wd52hx7=E>- zePP?R+qZawH@0KDc*7Th4;X@9n|%fNwr88Rx5a<80=H|MxSRJ?q{Uj6yScGtxrev8 zw*tDY_lT!geX|#WmG^;LySu9!g;7|$!yAdc+j_$rymya{XxgR3+qT{NxRX2lB<8n; zo3^`!xV4+Se_OVbd$!-Zzx{W+&3nK9d$)mmd50Uohx@*Rmw548!5^HzBOJLQ{J&va zc$GW2{TspMTVl*XD(EG&1zH0CNSws~0kvt-DIkFi;@}Nj{Ka8B#$|lQX}rd5{Kj!S z$8~(idA!Gc{KtVj$c22!iM+^P{0#a4-1dbZticS7{K=s_%B6hDsl3Xq{K|{`3?K?* z?V)_UnZ!YW#5Ld_K!B4)$0_!}n9QNW*}To&{LSG!&gFd0>AcSE{Lb+_&-HxI`Ml5l z{LkT>9abX_{3}rWK^W>_p{|7;7=8B`{m~cw(HlJ-B%K{19nvYi(l33|HGR`9J<}x} z&_%t?L4DFM-O(i-)iFKNkvG*hUDY|=)l2=;JAKwYz13G;);qn{XT8#C-PL{lTSlGK z`9TkU!AiWQ%SC&VB|roJnq33Rd?(7e4{X67_H#$EJ=?W?+i~=ez5Uz4J>11zYyH6* z^nmhQ!XJvEA{lwyxt81EJ>KEn-RZsF-(BAEy-oaq4}`(mLDtJBSpx)q;Qv7bER*9sc1##yhAX(VHcRgkcY?0^&7(<2l}!cZlEp-2(xB9E4!tNk9Wg-~v+q z;Nv+*PPyY@KIUa!VI@A%H_*^8K3-;i=Xt*8`89|@-T;@mI*I@UPCn%go&;{QTK^`D@)Jj& z6bT>nbKdG}KN3ryXB;2$uYn6x00mY+1ZY6>b>aYENFM6J7-u3>r}%t+XZpA2P|JmO z>!(%Prz+Ct`sGLa+h_OZ=Js*^@Qtp0E>&HzAN-BgUatRq@W?9WIs3hz{=@$iPf`38 zruTjD_W?rJwIVBM7(_wipTdO<8#-Lb$JRrI{`~RdSJB@-fBEKBoR^Q^zkL4wZOmx# zBSwxREzZOLcv7QEmKFE?%Sck@#GO2Q`uqtrsL-KAiyA$OG-<<^)avYeXV0ETVSE0~ zi)v3{zMLg-f~?pv=f0IPUBbMGbEL?e3t@UpSySW7k|#}8Y*X7Ry#F zYPNp)vv#W3xP9qn`A@$!sl))Z5WO<8dVV~jG+cpYJe zO^Dcpi#2x5V+Q^BBM=iMaKL4X<-<^B4Z#OV6SRc#$qc*GPhlllYMxY#IR+V!lv(x<0SZBtq(n>kV@nBY%ySA0 zgIJSJ7(FaAgB<=`QbHpB#1X{Cbyv|!PMwO53AN(qpt zv4gU__`^adSYRBmS3(|yEkh3;*RtJ0R#=8Go;ldJ{Ir z)P^@CfgjgP1SU>#2{H`g2K@L!9Zms-c`QKCo8TQeHI@qESkjMco{y2ke6~Y`zfJ7|bv4tyC7)KLMQ3o}IV+RGiQV^~*KFT$6o7^0X=5$EI z9&+IYK?I!)XfQ+q2w))zP^V9r$dG-^ju!7=#wltujb4mn9H05cGs1C-UeKp`{3ymL zsPT@^_+voF;8bzKVUFhfBQ~+H#xJmu4uhJ*9?%KLK4{U40lkC&7qMuEHoJ+^l=9_~ z>x*R47IGh2q{ANRc}6JOp^eYL2cW(9hCT6l3V&Wi8KOVRVs9*G1cOPNE@`^MLoL4j9=KIH^SHl4ONQPv^pe*IEt6&dL+8gol{8v074Si zxez5z1fB|s%1J_!k&SF6ura|KKjvcAncxL)9LWh+U;MWq8h{Q7G&lkfkl>I6taF`4+N-}9f|W!{#Zrm?3=ems@?EKH7rajFZg$sq zsqSib9#B!QJ-D0RlM;8nYV9ohFl&{gIkCOkm5O@d8{Yn^SG(|CZ+fp%VD$P|zXldA zeIIN-|rreEjykhyfc*sCwYkxZ@PS9!i2tP@{1O8F2dDJ6y4+(OPtehAW z_ch2S?(2lUJYg==_{(G_vYBrP|7>4C9+Mi#pV# z9!aT3ZR%8`dex_HwW?js>Q~D;*0hGTt!I7fTH|`xy4Ll-+?BKy`x(%HRtSd`A^<`o z`w|aoh@$f`4s2+n8`Q40wXcosY-@Yl-0rrwzYXqii+kMUF1NYQjqY@-d)why>!hs;@;*S`+- zu#27RJH+{S;BDzmZROKrZ@b&y4)?greeQIh^N5$;=Xs5T3l`6?QWP!m9t(c(gfG0| z50Ci7D}M2eZ@l9dZ+54kedpv0{Npc=`OIs6^PKOz=M!(0h#!~YeSi8<0RQ>atA6#Y zZ@ue1A9+f9mhx48z3p$0``qik^PvYe=M zB!?act>^acbkq9;(f=^MLIB@LCvK;^iov1ugOF0bhR%%C4TYQm%C@6wWloYi!GDrej(>D|$(H9yhe|>>>EA|iK zlz;k{X#EFM@9-e$pnykcYN%#v7cmdx01|9A4IZ^W7FMAe-Ov$qh-o4CgbTrd zUC0nfG8U@w4i1Qff>?-x*o1-DhF<7}BhwD)pooiDIV3oH>!)#jn23$oYLI9S+7O6j zScO#h4*S%CTsVajxDa-TBn&wJ60;S81K5IuI1=w*4&e|E-;jvfkcbATfHP={BO`tw zkq*}2f~&}g4X71{I1b;?g5@QQImi<`xIXie4qR{q!bfZiK>-xt01O}$iuMxE@Cp2I z48335%;vj}t3}O{h zr(lB%@(+pFg51Rn??4UKU>{rIao|COjJOZfFd+R{A)l}y1bH5oVjpgni1zUkMA#0Y zFb&5Lg0Zj+PmvGLKpG2DTfIOF{*aFm=|ni0lCk)3PZ5GdD1eFdj^^+Ti?LBpNRI-j zhY_iVPw|ZAa2zFRDJGHsH?as3^Vkun(L2*%l~(wP<)exBbyDvT3fRyNGL?wnv5#HJ zUL!+<2RSlc6pJRYAXeB8)Tl`Hp$*m`m*#L!w4g}f@e*>`l?~FDc9|O@ahDOf4^haJ z`(hK~r<0#3mH!Y9Ao2?Y@((aMS$Ja-3fMd8Fn~%Kk^Eo{7ZR8Juq$8r66_U=9T|{B zc$CI?h+?H%i6M^~r%2Z56FUfe_g8ugA!rOh0Sw>(6z~(~xDNyrHqTHDw7?AU(F?qQ z4gJUrv=9s7c?`5s4E7WY({Ks%u?){p8_?DW!f*`A0V2f^3a0=fy^s&sKnvgS3&-#u zr*KmtVNdyB4wzv73!gv>`D6>&;6?0-Ov?~fVnsk8q74X=Pp1$I*dSKBK?}!F4Ay{D z&yXNJISrU_p3^`gAaM*4LJjyq4H#-59SR&5g&)tro}cgxyzzEO44F3V5ppcy` zLQ+W;J0QXfAR!F4@C>j~3|z)3z%>Wyr2!dpd9?r9QVWvcnJhj4D3lC z^I!|LkW{D8q0JEv%Mc-+Aq?2S3!pF`mTFI+@fngT3<5%>{P7>5@Jc4ZIyNPuyx^bb zDWbms9Hs&P3D{5!vEZWzdLgzzA`D6k&j1Ot`U&6A9zP`;w0fPyVj9O#p-kGLRFn>% za0chHx}wMM zqaS*yzu>C<8C3rH3zC`|H%FYBA$k+mbj0@$%t^2c!JH29r+}9a9{LIXd8nB18<60i z&ngV302?b>rMAEyzfiIHU<;>k3iB`x_5e^ucu%kNq9cU~&ww1Eune?-3BpjZH{lT$ z>kr*fpImhcF^f$784B`o3I@Up&+1k639lgQ8OIQ_J_E9su%JZSpZ=h#%Ww&waINz& zApao$459E2<5~;t8VjLdQ0Wi~w%}CZ2~biMRQYiU*GV7*0x$+esakpp?*IwyR<^y+ zMRIGO2gM6r)S=L!4N65I-7pUSa0&x5AQ&o89V)6NHLj=dmSHQiAd3zB(4jW9wx7@o zOKJ-bw~p-)v}XGYJZZJRP-dApX^@n5is2nU6`JO73I7-hqVcic@UvGc5xoEjI$FCC zG8;XZpuJnMp@5Ot;IfoEv~}-TfV>yM!z4yW)5yzmYO>bA+Tr0f|T%+R)adkPogM3vXC znFDO2cYi-fR~B%v3_-B_$8m*d4z$1zcSN*?@tpu_3+8}SRrIm3aKJ?sRG)ynwD7Cr z;16OInxBA7<3J6cPz}Yvxg7DWTN@7DfC(U(4*pQ4y+Oqeg216LRfy{k)sP6dQJ>Ip z3>F+#A8QTeVhf=_Ss-h*xDgu(3^$UB#IGr}ppcKJfTE)t3(VlGf=mmM`>|UKvg4`? ze>)DxfTNi3USfMt_oNFF;u#s$ak$*yRYz;vH7T^HZ^$;Q=lh!c*4PrWw_Au1i z@D1j=p36WD5NfT~`3?WDr9&;I#h{vEeGH%x4sfli2C^LUpd2H04Cx>Y%diX!Vh%EE z4e#)z>s$=ou%*_(49ma|<}eNKP`b~6RR*%9)zA&apbf>a498#%_TU}i@C@%T4gX*u z#n2AG$P?4YU{B@B^_4G?;$k!;h4YSW#|38cGORhi$A+J*hvA@L0P$_xflLAn8-*09yioG#GJy0o|d5X%q_f}K%ZvrwV@ znbaU4!q5%rkgp-++v`Z+(QTbh*q_r-o~50^bBMZP+TH90LXf=-#gNb$;@Fzav91BF z{&e0UCDB1^-2RIV!2uxD0M-aq*zjuNi5L#kW`}!S;>$w~y|4`PaN63?%+wn;W1XWA z`VO7@3^iU2^1%&HIu2pQ)=~Zs_dVSu(dCh<4P5=&tHBH)ez^In4Ub(6>=38SFb&{3 z<+3Ma#JOhx+e2gU15Q_0qcaf}FtAjuIw65K5lCrxQCoOXfroezv;|ui@#rDQ*%27& zFsSG?%;1wA60}w5W5L;r9)U1uSfBprjgIJ%J~Dn)TZX0o=xdki7ZDbq{(p^b=#yUR zkRF1tH8Nvy5v;E0jxOmovFnDe=#bv(ke=vrX%fSp>x`c0A@PNWxa(m#i;`Y}uoV>| zLF~ZJ>Hdu_f!exl(ag<`H~(=ri#6@1UW>49>e=4tAyFLI(9G(7=!Uov4b@oJ4(j^8 zT0zSZxUTENuI`K8%>Va=txh2^7=!LE?IE#P?>_Lm-s=tz>mg{L=N^`@wdsfG@RUwl zo38DWe$@SHoD{|*+~{;peR@K;J~nnK=Otb*FY_?JUfD%p;gEDmhZs7a^9$zl=kA zB{uq@-}$Xi`YF~{WS07`Z)LH+`aGs|o)7wuzh$&PX1?G0S7!UHuVv>VW~7fJfSPk+ zzh+*B7$TqgWq10Xzk$(TVi$;FVuoeVzx%8YX0{)Ay)XS(hWg2`VpYfeJcj(BKm6A3 z?dOM$JaqEeXZe5r4;GLKU_Qe;fmu8V5ccf<{Ucbgpg@5J4-!oHZ{R|N4<#BzsIcL{ zh6^n!bjZ=+LxvkWPNaA-VMdS`KT>4bQDeoD6DwxqNE74DgE$$I1gX*EPoP1C4kbE| zAGJFB5YF=_Y|p=WFo)jM*>mSej}f)1bXilYORil%MvQs2CQ+6>RpL~uHl#(WQfIye zdJ*kiym|HRmAcvUXV9TV zk0xDOuTi8*1u}ICwewV~p=k;w%Q?1b+;wl~=H1)3U%-ODLN%-l9+$?9fh>>gQG!8! z95Mf z4M0e-L`6Ir&_WnvlySzpxZCHu2j`=4M;?2W5JTZ=>+rt(LR^l-%1{J>1PwG0#V0;! z(a=XKtF#h38<%S8sdrwx@=GwoL`;!%QL5z_=J;ce zL*CdAISPT$C~W!#d1aAXX8C28V}^NVnQNx`W}6)*_zi5Z9gIGA;XSfVz4S%M9AeE; z+E=BKW}4}yqn3JVs;jp8YOJ%?dTXw`_WEnE!xnpNvc*nktA7|AC!KVpZoBNJ--bJC zw(D-&ZgbwYTW+@Vj=S#vxdRtG>%H^F+i=78zFTj=2Y38&r2&6?oOirKn>hRMV=mSj zI{zt7-74=hpM35d-JU<~Dcw)hSttGVeY|^pcG_!yU3J=V&pmeAd%u02+JWc&_Tfoa zz4&}k-+g%GOP76irD%^Gc<2T4{d(V(hh2BV9-zIoN4e|~%Jr>~v+ z-oe}OAqIhuXr3<5)PMh_RM*P>h;%7=0UY2`!goFRrB8g+o85S$87K}&%5u!vFMp26UL*Z!@b#FNrL?-vyyKMKFd@ zj99#249~>H)j05r5=DLv1k5|>`o!Wxl1r&)0*3iqBe))kWs>mbEo8p5DBsZ-Hc^0XqyQ)-5Hm6##5g2q-Q;)2p4CG93y{g<{i!;M77oO`A)7`qK%S6s2ym z00mGPlzDh0sR~(YPASOLcW~sXOr>gXnktm5(g!VB%_(2F`jf1}^s7=;szG?FQ=USl zC|vz2TczsOst#qUI((~F3)EJNa5Xj;15^6O1kH!CQYk@-`V%>MB&ue`pIN6w+N;8Jv`$U!X$!kmg?Oi|MUkpy zZE8gSs?v@i!=q1X8^n>-62v>L4Q|@zid5Lfm9EO|EmUzD)!9L%xKp|<@R&Q?Mrw$Y zPsJY}H8fV{$|tg+VXJL*Xx+tDG^<}N?r=>DUb&8Dy}wOwVa=OZ(73m&?L96~;9D2} zLWC$qyl-=L7+it8L$gCIh*AGx0fmqtv=+6BVkwfm*rK(yxGPDAsVtTdFXYLuaq^gpOqiV1#H1VT+zVa+6ntg> zr7e5yN@v2d6SwSj$$IW^pYiM!Kc_h-d>%BQ3ms@LrI^ry?((4>tSOQPBSy_g ze)<0XyMNq2&UrlUy^nj|=e(bHHqsepCr8?lv7rr)Q zsSY8ZfVSQiWj24l@qaJ2-tjj3;Wm!xH~M_<_Zs{3&p$ODT`)(v0iL=ufdG0&rm&>);Q+@%F7t?ceZgsu0J3-mD)9VgDet!Aw=d;H(w^*QD zH+|{5qmzKSEsR>jef*cneJo(qDmhX*njWS;S#K#+A6l zT_}m?l-Lc{nO=g&ysKNB-I;b%3L^XZD^!!Us6f}SH|ZZHYWl_m<*(VTsjh_&Mw5by zfcEP;;t|7XF~RS|DKDO9#ONDRaJhl~rbSuApNg1}&s+Je9UW9g^PjhYL2fN3|0tPz za)}!6?00-TBd2FcPwP7EcZ13zXLn*k8`kXiBG)44FG-OL4Qms3*iSKt z6zC{^l@0Lw>uY(;q;ZiAzk)T1gtf_s?WYXl_>bOlMsM7SjTkNC|M%%p^p-U_;=fM* zv(z^u zFEMb%6#^^&?P9xwKZ`RNTCIUy?T`%>o17jdx6O#R zZF1zJ<#t^wn{4T`AO9t{TieO{Timdp(RJ9?b9?|3Toh&5M?jyyV3kOOrD~@GbhU^X z(WvC8M3#j+A1BU$>T!%}#rkanw#`|1vqQ01tWHB`0DF5x`a=}W_Kk6~{*BXI%c`JSirM#Jgz3x~wN^fUyAx7 zr%cb>$_Vnzor3Kn^K=0t9fs2# zqF2OYwZm{4T(tTqnphC#HUSt@N3C+2APS17XkD@Jcv%8Y-HWD%NCz{-27oApE83wd zUKE5gTc7}cK*c(&KAu)(0@(Pb@e?@s!rc<{F9>A;tgIN zJQa^1D^UF|t6U<(`?mkw^!g8RN)uGE6TsNqxNlgrEEi4}My0p_wCReIgvYbxCWJc0 z+0>zxq0F%LbndVOi>|l;csw71CYB4kK7$ji!%AgR$C_iBYT~&K(N7j|p+uw2Qvrm7CdMn9V=Uka z>ae)=M5=|PIPFucU@q>)5XNDF&UOLiO2E0AKX}-WqGG}#)-+e1#Oq&rcXHsqgq>RIS0cZkG2(80D z!PAT3#i^@q%tv%cw324-csj&Nrl;M=DR?Hql07jAt`jG@&Xq&ZK{gqO=-q-*1tBB?HlW)`b#J{V&eglO3)mLw}hS6Amxtx+>)&~YAK6|6{#5)^kKPkk8 zj^#oRM2r^Zj?+$yFtud;lokahi8>S0RhDdT^h|@#r|Z8Lf%6LYkx*GG+jjdIVYTt= zx27w%^6#TlW5cFnz2bWOs00yIUN2bk?8~mUDTFNv(74-;s@oR@+F4rH#~tvpIoqO9 zvlH&)OwtgBo95m|ib-B&<|6`Qm-Y*H+o&&-JAY?9FQKw{Wrx92_3<&H*k$~Ag*M(e zY*sjI{dU;yci5SA*xhm1yL2Fc9rww6jtA0?hw6?;ijMDj=AJs+D_t;5US&kB7}|d@ zy!h=%?03AJbtLULk}n+rEKXGXPSi3^G#XB{rcQJYPW1jxz!)b`x)Vcz6JwU`C~nZw_iGsc-K-I=?@5wz$_}SARu9V zHy@T_)Hp!i1syiWt>${m)K$^JRmtB~IcE8Wiz6in?BqJ5uo&p3sZkW#Rb$sxljMqE zanpM0y5N*kq{bYEL<1{a(PXw{wHSvXKDRpsZbp@E#*Hh+GAn}I9o?Un8^Trw!4CKM z-S26P)A;GW^l{6;Q&}Rj%*EWT(%q{R|87mg8tPoB!vB(zzYw0eJCgp2Y*$JRK-sk| zbuCvOa3rtR0i(Ozi|VYm?(YYL7Y-Lw z^Vz;&YIoE3d~4_V?FzldDXnc7&~`lmSw-i*K<78%S1PmGUwW5ql7_(#kZEmZ;X z6n(pk`jFjQC0(t=zuN7B;qQAYyL9V}381f20_ETf#XdKNVO{F5u7;Ff3SUF~a9K^f z`ClML(bw6Kc3^tK(-7;Kx#@4{RVU*&I>55PjguL|+^E}1?(%stv87~Nt8^Ks^bj<4 z)%T-If;NoSc7d)kp~u21!MqNu71raKNN3}PHD91JS;sh@0zKe#3%fMVPFM_SRDT^4 zAh4zmBRi6pg?|550(ncE2|PrmWy9!2zHQLL(vFT@G1ey?&(c-neTpEz>Vx6?YP| z*L!LgH<4YAYM}mEEG{er^t^u3{Cql`vIp~oN1XA^ZzSL95`SY8c+ba!X8){U50Vk^ z=w-FFun6bJC)XVVCv2`xh)v&;px*w~>aN4~;6dV5gm`Ynp1McbLuaPpfA(SmK{p>= zm)6=-8G!KxS2vor$AT&Za&>2qlZXG!)=$iK87JMG57G!oDqh`(swt`0_(83xpr=$l zf`LEDD7R;u-!)=`4NpFb2dw)bsjr@DUye5FWTHGK7TO`;ryV=d2^fY`#*A z*fYor3ScwY%=OM(hlQ9w`Xu%C!@HJ^d-EZ0(mO&E4J_u}TDr94#+r_m5@B6xfVhx* zOF$39?S~b-G$(o9bJ+oj@s;OF0lKmdd&eWIIQ>ktR#=Bqj!0A=FRN8h6{ZS?s$wPL zV1kJzu*66~S7SFu8;YdQg*B`DpOSAil(4)@-`bX74*z9Ul;9vu8x;LtP_$=2#_5{@ zT<|HiIv!n+2Z6H}IRlSOaJuoxDz-DA+r+`mm)4~VbShr7HilSN7_Iljt|J%Dj68&y z>!9^8q}30j@290RAEMC!#g}&kB*{j^bxa{aG%8(a&xHwW(ceI&H4|}A7UUQG==Zhn zbo$UWeZk?s8YT{KIt_}x@3gCpr(I6K4lZMi*W;t;H2st!>NV}@g=iGlsc}Tc35PV; zpoVMHd8}dF(ZT_G0!RtG%l|i+T0t;}$A^P1oI`SZtsIEs5!LiqikTE+Hwb!Q z;3i{uqUsj1k#U(bO1mXclP#EHO&xnK@OLx=BD3UlL=MBqNut6C87&xgGK=tM9D$PK z#Kbw3aw;p_p3EU@T9b2cxiy_%6U{6UDBAr@%&f%ZL*Vt^moknmsS-hA{jZb)mij&% zIc}VGVcVx2^pq4L>j3vTE1<2<1tur z_tR79>01B!mb4o=tHXs_IENbLFB2m^cBRzxQU`J4X8iRr`N{z@%m3q0)1|_1{_XMM zjI6m4>^ku-x;`k z(Rp$H1HVqH6U*Z&NX7(21Uj9;w9KLFeDRm(`0?N6oPZhCn1!>nt<~GLXR%xHtr@bh z8kgtCp{3P-cK_-0hc!oZJhv!eIEGOFdErrHFj=u`9!mnX0!3;FhkY7_YFA9*6Zyia za%YrubJh9WRx{Hl6K8ErdeSi*XcDI{_)zdpXr?nWe+}P# z5&@kgos|F00G3Gz>=rERVr7ypJaT3d!ypb)_{$n--sZYKvo6i^JpN$@w_T5G550DV zoryI#d&izptPZpfCc~=M3cy5HD+B$GvlL!r+kFF(crqfeM?5kr&`92{(ZW!u&yLMl zD5u7i_f;X9=VSR>B_%VB#i)C@*F-M8tk^wvN{B+#Y?6)>j2FA5MN2TkYl0sr;|;L< zZN^f+5!82tz7lD=1tZ%=x+Kgv4j9A+vD!=`5vj`(ALh~5D(jX@o@emb=VqB|a9oO% znN@ zWyrv{_)uGGUXeF7BgTi8uLlVH4-fQI&*Rq~z{m}#PrpIng)OQ-U}FU{i(lT)U0Ag$ z9+{a`&(=-{d{Q*~%yq|)_0JJ?!uN50hDa3kMZ$+S6Rv9y!xoVu1$9d)t-1&HD#Gyx zjz2su2gf0NLkNI#tXth;rUL)Z^|#p$k7kuiQbWgKRRibRRQU8v>equ(Y}StMZKFB{ z*>k`4nne80mpyZ?e~}@eY9qEHMQBxbY{4uIN23;+=bwT)Uq{UKI;Nj(=RXo?JYD{g z_O`o2WS;k=FESWm*!E1IiFkZ+FUce+Y=Sr2zn- zOB$JgOcYzbAl(gD{D7c&>`R(%8k`QX&^GX(z;FyWYatBA0M8 zUkL2u)p~774tIM-2oky8DnKots2$b05&T?hH?1uitk$K@F@nRKiX`997rsiVX5Mg- zPqCR1=KQtZE{m2=b>S7^?)B^5AI9nC8$#PqmJNBCw|vYn{NwT&(V?VHb@<%?dw@wnUAeOwM-lGE_IKUV0!V7R_`pKr}+yI3m}g!#g*+KH=9 zGjKnu*zsrZeFL&Y*9t8u6rRtBYhG*&#!}xZqUM8XF}-SOeT=oNU~fL)I?sqmSc&{~ z$g6k5dpO1A)?1!gn1Sl%a0dF;J7GSFJI3B4*(JB$OWI2q+is3zZ0;sTNp-W4hjm+i z-zvL3D`6J7Ia)}qSgy?{c`wC#?3-w?1A`lkQIKc2l2`HL{Wp>iKY9Q88#!kDF7g)t%0%j{yKE*SzGl{3l?dohv%R3-KI_Gt6JU&6Fi zfe&vuGo?KGK9HbVLqBCj-4YKw6g-(~#Ix(3eC#3-}ZD-)KJ zUDRU!Y4acF1#~Psb??loeKBSugZ~qac)x4B+V@grI`7;2sXGM*XixPFEIjzROLFk2 zXWi=4pLyTAi}@n+Ive9nqY9XAXz2`AX*>``>ND&u)ci_%7UBzK2-(%&VZCo`GgeAE z(p5!onuq=zgFaFG_;_~H_P^~vbp!t@A6C4y5x}zgh0%OX@!NJ4QJw7Z$M7tmz?Ny) zu^IP}8nYd5pNv1_pGs@L{My-h9B?uHbv&f5y~5AoBx0t@;pFF+=&jMGHnYE9ey{8P zSsRodBKy&)=Spsbec-N{`I@M*sR18306G79?q|@C=4-ozh{5we$LY#@_bZSgX2cn& z?2mSdxm{f3ujOr1<#zJd3_*50U?7MeV9E09!zRulQrX|FFO@ zf8pBTzc$Tu|8%D4MZ^E8b*&({UPpapBK>0aVj#G|?9EDSY>3~>A`}QAxS#B( zwtQ_btW%_bhUM|m^j5)f1&+8G1B_TR65jbeJ#bj!$uzUWa$ZZ*c#tpqyIv*sTjSB| zf=TJ_$ytVmXsKpEQUHK9Y%pw&OcT4`ymz^qB0!`!oDHidfN_<{nFdnSJL~D zb@SKdA-eG7gS_m&U0eGL9&*B&(kkl8BFeo zbphOEBlTL}AqW6oy|9*u+odw1RzlEl;i+X7zQCPmwTo!97rt06d_kfHzB3Nx&V+BL zh8LwpHYE5gq=s!{7?Od5fV3ZVxS{+aUzF2-NdlWM?7la@nz>`^@z7yd&-PEfgU$O_ zQ_cF&C3|RxjU99$csP&b%<;P0VKNS@5`qm?&rRRRy$sKLC7+9ak>kakll71*ch)NV zk|s4IhXXAXS~SUZ(>k*FAvt(9$1Xl6_v?$)>((V#xzqV3(Pz0lmd@VpR&4A1`&uaK zTUvaN z(TZxx@!#KNw9Sx7yZunUXJozZX*pV@?CBnn|FnIdSR^Nyf;^!`P%~B>D49w3%2IE!{KrHr_jJ~ zRpWNC7Qd*J#Jjw5{`s_mjra3sZ#>4{v@x&RpY>yXN*vr8MQMo`KYA2TKDB5SK!oDO zyHSZDw8+qWZAmFA9tvLe9KgQbd^NL~ZzfJ)W>v?n=s-_b%8sJdYRiLKHQ`t}HB1c3 z6Rv9n&u@``NAoD1M%vDpBId%`P2{aGf_XIeRxm0!~R@TxtXD?QL zo;uVDd3m->d$YjMmaj1h{Mg1)-vWWH=GB?FwsTfdFKx<#ABEpYXSQ)@xmw(iSK91c zz*-7pO>pe+n?Ggc>vHG+^LXw**7P)wf|HF`#+!3nNv{JZWH8~wvuzR$3nRHZZcmj=Vt`1p) zKrOANBR_;zveJ>pKb9r7z(4n@f@q}8G16FSh19>Yl%llmo34Gqt~{8}xL_*3cbW}f zn$c#8#^$>Y*hqy}sib#O$<(ZGxzUsrzX*v64Ua;+ncGBuz)4OceRoq zK7O2*epHcuEp4+reTpYTjQ^z)f`O8K{v5$9swJL)pm{)nR}kX#%`CTkASMV95<&MI zzdz{_@~THQDi?Q;G65aIZb%3PEtjRIt5TB zw!*Di)oR?!uzGJTCEt5Eo^ngg?`$?t*|!LPZqcwGswl5ylbW^W`_slx#wFwFa^LLq z>v@jjz6jG2^qc^2r#(HV9%&~kUBOz957Jg;zHRzp6DGQeKs_jU=$(@;3dl_F)j!9q zm$|_3(xsoVT>X9N*$1&s(*)guS88z{Ug>S+VvF3j-`x%Kz0;ED;hp+{YwinaQ(POc zBs8}iFFh$)0P_}{e4sn^*>ACiaeAtMn&;zP_MH|IU&Z5(JG?WqPfce@3u*jbA8fA0 z58xbN51Qgu>D)edc-t8IFDk~ks#3eT_1xvs$a8m?Ob)lseK483Zxu^?naKX19y%KX zw$?9M%)Pw2;jygwQwDiQCfmMngWhuW_N3Of4jTYaM5$U;ZtqbCkO?+L)DI9-Q#5rp zw8wahgHrH*UGf2XNDtt$b}kb9-FfTft}S1{$~jg|hC}0k^ZEPntoW&CAzw!FWLF|A z_dgfwg2Z^W+iW%r)17yAK8kFW?%B8Zu3LUt9Oy0ckkXc`EZ4|!dh=rKU~hx8m?F(( zI9`cLsyuzR>+5Wl7C-s7WiRv3+p94$-jg!NQ_C%R0qKjy{VM?)_pxV7BGz$_PM2iZ zrM9Yi2+X5M@H7Do@nHa9LL#ml2EK8?c2A|he6)}NHJ*ZMe&M=bxzo5uBf@#2w4YAJ zy&Ew%&NA`mI`r~w8?r`P! z<&igA;DY{3q*lNcxhspbwSE^f&!L4}F(Xwr_fZnpP5p*c(j;BAsn6f(QTlCtW31 z$$!4wSo>)6K7FaBaOqXs;n>{j8(4ykR}zcEf7T!4y!pSF`pT+q`c{3M)elmj+5O0m z^+5(HM;By)$*!agS{jgaTrrF=K>En|%dO8Z~w&jR20ki5?Dk%qD zSM7F(7h=lgy`ygc1?R-MjzB6RwI`}n`jD)+YL5-yDE9zu9Q_(>r$Xl%1*C@#TM}bYy ze4t^gx*C<7h2rwT*O8BOQiXTSw2sTz1EZyY3Jp4}1*Rl-!#^U2R&?wU z`bkw@bMo`qm)!cLQ6X)S&T^q5IZl(Id^~x14BXlap}}dc+@*`!?=Zf8R1)wgl@j1IH{UX-wCs#DXxC2h@!r`E1<&z%HD1%emc=J3h zH-ClwWq$5>Rr#02@bpmGjQL7nFWfK6DwC$(CHxCEW4yhb02uiX`g@95pjWRr|9W>}x=ml@?mn*|j3XgUQv_E*FKGv#68*w<>%JpO1VOFPPa9$@yw`BSZYY|q6OER{IFgA!N)N!|&vyagTxB(%jemal67g~H_U9iF z6>C2$a1lmkx2pnFat3cd`KR)U=Hk7NWohK-XWYjvE72$-{QpBli(Ld?A+4n z>eTPbR_pH7?|vKA)vMD}t=6M_PklzJ&nHS_rnPUH*uNY#FyG)4MI7kS@82T!Q>zaF ze-Evx4X+Ug`_x8ozyXEm;Vt5*rux{l+Au`@kL>TUYnS6eQT=a!b=E-bUB`* zK5TM1siUs>PJMjdcd#{jrZ;-<%fie_g9hOCa1C+pFnT^xO?{h2eZ5r!t5!r4(Nh@J zJF24&is}6l)$^r6ZS0d8l%!!t19|sj30>O~N=pMq34rmmMO30u+8eJ)8*gJaKan=8 zW43;gw%#_1MWMyKv|(e7V)@iNKH6gW+GH^|G>k~vOKBlMG;b!hNB}emBC&fXq+R7$ z!9R^VIP|7#%k?PqKS%9jNAj_&=1FAi35I-<5_@VJ`_Gen=0iTSWje2JI)6ky&xj>9 zX`Z!eUQ)`unAmg2Cem8dB~4qIF*O6rEvu@9_ZS*^Y29_Gi#CQ)Q!y%xwL}}o!7cNy z>z=D&5>SQBw@zN9JCWyZrLNWe>+NO=k4M_DA3RLosD^uw9Bqi37rxR4D@KfYmKN(N zO7ySPY*>7_pKa;q{il5Bv(|Tid!yj>v9hw8Syyj7d{A2B^QZP|Nb-(NowweftL|M4 zAXZM@&vnS=y}4Kn0}VjVsR~U6ATz^|M6N)$?re!iwNdqfXc`81Pz>R$ng+;jXe$S9 zp$0)kEwil_&;Kz_R=a0c`PqK=9({L56A9qaTBBuTaZ-xm4G;X=o2MK~;*AL282#`F z=a7Huu{d2Hy2q=gh1>^qX$m$0nyLS7al*Z1c{HLJ-x??^+-;7DAu=Bvo{$Cb06HQ> z^L$kmS#x3Z7GFaj)SLEw+CQcLJEKIyPz$4?=%Q>RiLp<%MfVo-*H~U3ygbbVyR3E& z`zTg@PD&0=2aRt7YbS3=Ll&UFHd0V+UU#{odCX>6PLB0?loqYniwF1PIUktE(MnqD z`29H3jRdIEqP9~}eC@oCv-@uLt6k~8^~Wx|Uuib#$^iUte)hoapcNBUfy1NpK>{08 z5RT}+cBFPZ79`tvy1G0VM@91-MP+zBlM;<2{d;W0@W!99VN<$Wcd41g9^S>=51?WG zbM-jl*&j>$kUu)tUH|n`tXpb;&>1Zq5I_b<(E|X09_klV01z2KX5c*y05oGjS0wGa zs)}22P!Xei!>=XnDO?KP#2l1s3k?Gcl$|^9ZFe@z;-g*n5SsR-oNG@$w;%xZ8sM=x z(_LLQSg5KR!)$%?onet-wxk|IOADfm{iV?x@2{x4`46hSXM0|FcLEvMP*+d!BHC51 z0)k;xMW1Y6NLn^rH*DUR`DF;wF zWw=9m%EGsLv#I4$96)#!H4Pn++H%OPX6wHy?&P!1zlFI|cF4}T{)>68?CMBIC6V`W zkH@S8Oj!pS>JQiKE-$mwGXAAGPC=n4>M+9B`$CAYHhMdVPGRm@?#*5~UE2+K5n z29BhKr(}XilyVl?+2a-r1x2|hqv0C3#qA$%nPyfx7Rh%ETUc|j!K*BZ%h6?7AZM2i7N|J-rZYNFDoN4jIt7UF{vada ziN7>&zta51@M)g$(k>&;PHFg4M|dvy-c5LXl77^&n?0y;F)=!uO&iWx`IUY5@I%^M zRxe-mxKi(6{N}Tt-3muD7NQ@IVAFe=<)qg6k3Eg888XFPlN*|~b9q~-g$HSL$KnQ8cm<(hg;BA%_%3HyD`G|U1#BV>?n)U1ZZpk-rjIx1{eKxlBU=vdUzK; zA1v~udYZ%UXjpzn2P{2^9R(}yuv;jkkqMZ7h0eZ1W(6YeVK4lmFMAN)#CxSSP1dwE z1-=7%+pp@r=Q_}BmQc^2aMV`~QSOr>Utv+7{Tvu1{Zmb+U-A?0i1FOv>1eNnsmzRA zrMM+UuOu5bYs*vLk=J3dN9_-?IT4z*pw=dWID~4{GhGJ9nIRgU>qMQqFtSszuJ9cq zO-Gj(@k*QWPFyou;6oKuhncs}yyaTvkvX#_YISt`2beYO=y)cea6n>8ZInrNBLBXL z>Ns#JL@2F6#~8NP#+D*CHeGE7Yw9yzR_mJ(W>zRG(o+U_vDgeP`5t@C{67B+(apuv zCK3#89^)Y%3(i-_h&C|-A;WD&+T`biZlkEDc+bBs;XS8jL?1pbuDlsSwNA|~T!jNj zEwWR2wIre!GWcl)*^K~r333quqF;rg$xQ@sq2*8(+jv03x)u!&D;lcymX_C$4rn!m zxrPt|SXAj>BRY$ajyCw_0r%3LxmWMj@26$-;H0PanVmED*!yxv^P%k-?)el(71Vyc zh2oE5mworb^ra-*3z>hn{y(nj<(zSw1I95}UN}n_hwGl=X>sL(zz=b_r(KK8%Xk`o zIJcM`VwYdE;l&G6FIHQSD8MhXr3-GJs!UvFEX3;yQv>K6R*<@?T?TACnaQGD2(G&@ z6u&l}%Fs@mOUnx-{ZuZ_6&VD%n%E5Y2gGS%1?l^S^lwVy#Kgo88 zjos3PyV1^+L*nuL%m}X#O#)R-xcHU_|*yX_%E>6XLYT>h|YA4reXs zPeG`|41k6DvCb+fD_tLz#YqP%CFuVLuz@Y+-IqfNXq(4*5|_D+ya2Lwd8vXXMbJgx zPG(_bQc$vV5CGJon)os!mrYj;B3HM}~dpD{q0AkdIj~ znYMvkB*m~`675;Kf~Itc>-FkKeX z;?G!7ZANlApQx2N%J_K^pe&aPUfGa*|z}P=+|C2H~-CoF80{4w2v;~IhHy4z&QM=mHNijM$rqF^P#tV zq%3aj5muK+`ldg!w<`2xZh;gKl%%Uu1Fk+OCV#?((Y~nT`als*yJivGw@$;sNbx&} zIuLJEo8|yADYl%7G1IAo=lOYt(gSXAapENR*if2Pc`>-C%0PfI3wsPoCJXRgY-&zu z36X}f1QHHA6=JB0=r7I&$;?;82oE#D$7(gMYXrxvTL=(Q$SaH(`GD}?XAZ<=_VG!o z0jRJ@eDJx@c-BC5DF)2)U;(@c7(_ID=L@lyRU6OZEb_d&wL1xh;JW^4vfN`;n-CrW zCdt27K1dHALPr-mJ<&PMUUG{|5<;`%HX9ME0Afz6NeG`CtP(LV4HmmP>M9M}6H>^Ou zj)!`f9=@6;uEGcF2SNu93oeLj2*}SNoas@?waaxwv!5e514pH*mmB68KgY^U|CPL6 z{)=!o6dut6`&un;IYE9+bebN2dwsd>W%g_8zk%c0Uza<`j9)WrrYAqAFL%QRf6bi? zoHSls?x7$JGxhgU3rFq?#U&x=I0jEUR7v}p84WAqW@kONq=VeShE?Ukvw=v`VG-o_ zx`EmG$ZOJ3x!Lc{M}z0%m`19AqJ%|(n<%z66kXlm@7>VBi@6KZ2_Di&z?l)3u8~i> z%o-1J28pYx`_ zMZP3tG!bV77SE>1q12>hx`-tKPhzRzDB7^tg+LT27sXhIVxB;;oT8vyacuB7 zcB?p!usE*VIG(yV-ibISFXU3D2*Vmw{pO?bAT%r&Em?<_nn25V3Ec=2l7(Y7bf6M2 zj8r1#Rvkud0;6$?xnU)Qn80YmvHD@yTc<)QiCB{ftm!G%oGbo5JpO@Iyrq|rXif;@ zJ#^JANsx1Z4|_rmnaww_``UE75tCL9%OE}F*NGFFS#@8hZ*2dxj6JDOiq*|d~)g|RmBo&+{ z6>%k(z>{+mVW*|>49)S82k{aezK!kTwDRK5-ov83R8nt>r;Z4Hj)%rC+17wybuh_d z>eR3>)>q$P$=?hLwP6gwiQ!%W9CdKqwq}@68?YvyfuObPvi3z zg;_69;2bE^8G<#cs#9Hli3 zp({oL$xz0MeMl{yHioh)K7(Kg5DRl48NmDy3cP-s^#aNgKw!W?SujJO5CHQDiaulk zQiumeA{h$-4DIH?6T&-4mQd6X-7JbO6Ts|;WL&KRdO%q$5cdO+3`jYa5F~>ifjI;L zMh=0xGnu{cptZ?DtQVxE=;cNca0*2qL14Zs$c*S=TFfjZK^b#Z=o*TE69oDsbLI!+ zWvKHvU?hsctq0WZ1oj>RH8_1pbux%|0tY}D%jtoBPD~giv&Rr+y>Xu}$@1?(d*c|e(n znIMcgFz;5uVxs2|&8NU2P)7Y*KPQ$5JZOx-6jj9>0hPw!fwh2ytLM+lCej&)1$(@} zRz2{~gtrs@e5R`XQ^vbUy37Tj5glC%ivAA3!M2KaSDr5t@6NhNnKN*20oV;- z2q4feJ29D#gFg@;R@{t!Rlty;@&p((4MqQen}SHtmkqHb5wtzXMepv50lSNUl)gK+ zkKiZfpza}-ho$C$o1chy;1nJ*9}1M!rEftpgy5NWkU%0UV=kVlQ4~0D4vep29-Yi; z%>!j3%ep67)EILgdKjc3eMv>Y20SPd0JIf%KMSh4ScIe%(IcxM(dGuZPR1kvaIgwU zl4D8OLauDUy^-{N=Af?&kclGC=mkh89!MgT#1lT|Jpk@3KsFHc%VnuWN?^YsU~Uz& zH-Y}3x;|ovDM}D{UjfvMswbI)BAu9koL?kEi&=&RX^X*RN-ldQvt=o5rjr{P&*TXG zL6b%2jby%CM1S9@AtaNw0YLvmkZut`=YglKA){agk6E-*==(B3Y531Es9zLgBZ9!6 zie#K!cxS!|<-QLZegU#(y1ASQN^+vd5EurB=#vD29(kZWTVO#?>0l-(%Dn#2yy;jK z5}0`>0?!HXY9jqI{@_nL1u%WK>8zkOeSc`97us$0+H6xVK`<87@Y}ff&$ll zz9!f*CtPECgv_5fr@TSn4)hCzT6Wy<^KfPQu2klC>H{AGQ zW$=Z8s^R<}OPYD}>X2Y3f@zEl1u}><^`?MBq0q}!=;{tTu6%?OP`6t;85uzhT-#>X**JJmcWd+lkfc$%Nplt(gSIb`?N%)9Ib$S zB`_eenTb_j^F*09@XV=GjyuTL(5$zeNs4yijK?VOPKvuWG*M;dA|ORpB?gZr6hHy|I+m^o7V77_AgNXiJAGm(td&xWH- zd>W^r$FGE@$jiuSE&h)lga5IK%?QDc+*yeT{xN4c_wr}`Ey$v$nTyVtOE~VNC~HXA zdq^1C(+3^?25JAs_va?Gq?S+gZ0wc<>$sM>vb1-a2-Y|)v+sZp@_3LnE=%^lkdn&t z@wb{h8zXjpLK5LJedx^L`~Mvri1wlX3$oI@eI_hD35VAHH>f=%+aDmW&I+#gLsMrQ z7s)QgjU@-NN|a7cu1>JrYhs;&K9_E!&K7z&3oWAdOJMUmXB&T(#)r4E!5Mwom=E5Epnv8 z#JiwmFe{1xNk>3YRZCKHOERP-IsRo?e+KaZ8^M@mc){}R#$~m+Wew6YqB6;)8nR)& zq93!OH^8#X9Rp?sR3ca|p?@!tESH%~Z!(#z3jW$O{oD-QQjp0tJlD-()gxxr zt6>`-5)#|WW8nanmu=%lZ^Ya{q zbKR`s-}v9#bF}o|fkd&yYYn?*NRohwotl4Zk z+a#f_(7n@wy%YWw3IIzY?EwS`)S3j&f*ix^iGfy-y@73Zt-bz^d8okt(RCOBb_GSir%1r&fbk=ET&nU_gPSMiEQ}Aq7(?&3UK$=nz%$L%2gb)1aK+;sWGo63p@X z!zVJ+YZIoj1;tOA5CN%?hAJY_RRc=T0B$^w;6NO=G0~HC!7Xyt8=0Vg4KoFfq-v#q z(tN%l8Ofly6Kls~DI_CC4x~U}u^y+D>H!UA(iS5b0r$!w?664Fuh8)|rfO00W)%py zG1=rVMY`;DUbRlLNTUC9XQXtPQ_71Jtpk$iR?w(H=ku`d3Y5ytzXU0~T^(r>^waj6 z3{2+87d$3?SUlXD)hoUGMkAi*;pT&n4=WtnUp?HithE0fLwC(`+v=Npe}Ud>OTW=@ zQbF^XvRUPD*}o2k6gfm(92FIH6d(K6#(ignDYe!b*ZFUc3ym@v$~+UAqDF~XM~|cu zs`#Tx*R?Rx2G3k(NohU`ZyyaJrKWhV;VKNIVm-*Y!QrjD9p6MfN%7bItC|>*jb!{w z;7oS;%H4Sye}}qz{`GYt3GA{Iz(4za_IE5$z=0Tc@VCFvK(ldYx-O`As{K>W7Yg@K z%n_p?!yf2NP9H`)K}zTH%2QGboQre$X_+PRlV0Vn6?$SPslZZWT)6n#5tE(ye72cp>&?&*3=6xN>Li*Nrc~&(C{5;Y&*5=^Thm)Yu{%Um3$;TSTHht&i_iu8(LTD+si9pPeq`g+l%r=%=Q zYWOp_UfOMXX?kNErp?(&%asP2DB?avJd?mA}Klj>szJN-{o%_ z?_YiMEJR|5#ROss7USQ9r_196MmrY&azC9@@yH8rIlIpL1Dmyx7hoFUS@czk zMI|B6W&12)vOS#vmlKfOyei-kv(b_7j^$n}@t@-A%=bN;G`Qw*=)B71QI>U@2T$Hm zbWKxUt#i%LJpNN5IeSH^QF`NWM5FB4W#{dm2TzU-w~p&U9;IG$o&|a2{Z7NJgW@v* z&k7$EnXS)drdLsK? z&c|NsWe(rnQYW#-u;mN`jqtxYo{iyag*c6fjk2=Fh^;T38j(9c)*2)Cnt+;7`<>!V z=ViW}zujt6DtbaiABJx7ovoEM#a!%lYQ|oktTn}w$v`In9UMW;F@yr@I#FM(L(nS? zQH*dW+UsyF>H;%2oU!As$+*%d+6D3z^EgL~j^Q+aFU(VMU1!FJb=v89a=br$X6R@- zZ;$L$Vg!hM7TR6xOFM6)G-+L+@o-&Xj^RWDT^F_&b-H4!G@+5%i&qruG)C{XV+5J` znZDQQ$vhoSG1V3Thjca{??{JO6J2=z)afhL%HQyeG*EpPmc{dIKlt8c@wI<-1{%j% zPYapeOm%cMR;~ymeh0o3=)JbIOMkm*=UYyk?ftnSOJk*hc<%(& z5vh}LBW5-hjB}8ft>~JOi?)npDLG$QQZ>=wmi~KBj}_~zSGCpAqJ9EIg2AYZ#CuA_ zwm|nLPwRFwBtpjDmvrj!ZRV^$;-+umk;$5L>#~%OKe)BxePFvm5vFJotgXyXo_h| z$q~y+G{-KpC80P}wX+g`O$a+Yv0lqQ*k>^jExERg(p4?E#~ce<=7OWKazFKJEu4fM zr>f#(828fxn1$Il>e?jco+O*qv~pzP6aI`;j~Qc^_-d-?G{e58ItJe@g83T5()Uw6 z%|CO+BTY4Yg)05+g!yVRqAmA8zM>@@o`!9&wW&(1*j+3F zzU$eO?}4D#ucnet^@Oqe%(m=|x+GMa1aUt}y@;bm(Doy$JS))~ACWRa+8a3r1wOxTq;aItsy$_0D4tw8%#x-Y|{+ zT97@UlcPp;yG<+}Ybuy92WeOT%!oEHA{0V-$1fnkk3#$crkLo68LDetCbcEIukFJd z2EhwPWl#la%EFb9zg&cSRiBBYg7w`>lF_@u-Q;g#iaS#SA{s5{!c(DiD-Zqma9da3qEWDNVA|3u=u%d*) z3v;+PAJh=WK5X&WMucM-)|hXPxvZqMN(5lGi0^9~p=U_&g3XfV)jVSQ4Q7P69;bkW zHpX#@Sd0S`v}i|HO#=!49{ZL&Z?3JsINOW(#^S{AhMmrAfsJ2SqZhH@M=uh=Uw*{m z643gFEzI$YeH;T5#i+Q1o?&NxFoVCq^jM*bJBW7lq7cvM1v9qG)(PR(Dp< zwvOWQxKn5J%vwO%zCyM0tZU~yG1YtaPOG7_o@x*1*ypY>cPgcyrLp{4lSS?OYyo2LBr9K5u%_pWgMSCw(wGZ#d7l zxr>;WpFKo>k=7gkGcKlg{pAHWHrUf%^{tPb;T-SdDrs_)Mqg=GBx$(0!EGtmkDpSi z5Beu*zWUe4e&(zXe%_Pc$jn|6`8Dsy^=sey$MXL9(I2+?DSbfO2i6Qv3i(soFlF{% zKJF910VKe(fw{QIqyT(A$uk!8i-RQ~h$e`@34{U(tUwC1zzoE|4ZOe()Ibm9zz-C` z5F|kmG{F%(!4gEl6;#0%Ou-jqK^Szw7^J}&v_Tof!5YlL8`QxbG{ZAQ z!!%UGHDts8Hgv-`gu^(L!#SkGI<&((#KSz)!#(7~K0HG{=!5%uLInIVz(F=DY(S?# zy#i#!Ms!46fgva=MAu2SLISS)d&JDy6wXP9O=OBqd52E?2TyDlTM zBPP4Cz1!ozZ1O)#1VE=q8h%0=x}b-oc^b-~I=icxq@jncb2_Yfib2#xvS6y0!<>Am z2VZcvdr*pf@C9Gc2VX!2ct8ex0Ec|^t6nURxo8Ju0EexDI4{Zve9(n;z=vD7g?NyL zTabqTeb5J?K_`nUDZmmw*CD$8vm;o{M#$NRR4@clxCTQA23#-%P2h)O2rEsXhjDnx zbTEWe2!@y3NlmaxLl_59Fq2HcgmFj(NVo=i@R}!##CG(GcOaD{NCa6~NL`@^sJw(+ z$OUrXhj-uycL)S|@CB{xgier!b6|%+aEGp>hbFm7pQD3w;0Jk7z&+BLTObBl$Oc#- zg}mfTeb5Jc&<1Ic27FkDTPPA{G(f*&yO6ZTk@Tckrlt@D)4Yhz49b5< zg+IWBe=r0A{e#T>15r2xrZ|LP5Ct?~g;YQTQJ{xAME-3NJaKF!gYV_<}5@GGeJ9Q|`V{*($cd5V_`hG1ZYYsiHEGi}MX z#D#QFt8~zWOrVEMz=dnT1qx*Yl>|)#)zDPPgmGX6O-Raz^Ux1vnsIoBZ}f+HkcW48 z5vObmTd0CC(1x5Ln*@`FPRIpwn1_0x2Y3hsav%q@Jco101zG5aK!As?%o`;E9iJ;p zc+iL4T%)!ih9$)ZRfvauP=;FoOuCc?VldBa=u3>W2YUq4&|*xGtj7IBM5`dvGxATr zL7IPP%ZtF8c)AB-OedxYhij;ss%cAlDA#hm%|rdrde{eR=mISW1V7*fViZwbw1;#U zhjDlZC&CqSfQNq-y1H~D@017s@ze)L%}9M1 z#(T&Izy!>H2w26;)Oz*OXJra8jf!ano@#}PZlxS6$vrEXhkKxhe6UA*ti8b@nRHdx zCrlSeNC7~w(M~`ES-^#lB3Vb2$A~SPdT?3}jZ}w{2aJT;dgvLtjFNhAmhQC2MWR`A zor`+7*dyuAf4B!%N?I>+OlXC^Dr^ds)gj4L#KO7KmARd}ku=2VS*A=EO|St+hy-Ye zhQSqsKrjSwz$Z4#M7-skgrdE4WmzVvTUBJo0K8j~1uTb!x_*O-O(jo z(JhkFMcvYUo@99jB@l$bg$7H2hGB??T%ZFk@Plzsr_|-$-u2!8-v!>_72e?`-r_ah z<3--&Ro>-g-sW}Q=Y`(rmEP%P-p?I7WR%2K6r;9H#NinSvI5`mjhgW#-|{uz^Bv#t zRp0ex-|+2*Z+M0$hyp->254x7R;XWShy*eC2yM^?5^CQ77T^IU-~u+_14iHkR^SC@ z;0AW!2ZrDXmf#7d;0m_j3&!9KuHbMuK--x{l!Xd2@hwBb*L*eM6Gq__R^b(9;TCRT zaR3fBhypFh-}=ShRv3g@umW8uVHft{9|qze7UCf$;vzQUBSzvRR^laQ;wE_ya_+0xJjxbG2kmrsY~zAx_@h zYorQLeyKtx<-45+LqO$J)`C`kV-3~OS+?b6X6DYp<$vg6r{HBmPLf~dy??+37tjJg z5L!e)gf-9sM2KT^eVk@C=W~W8&4p%9CdoirR<-!$$hn3muz@l#1aH;>9Z-aEpoesj z<#I;nfEH**Qs-!Hik*0hJ`jvTBc6D6=!b^rWW5LfG)RFmcw-ZI0y^zyS+?Ye_UMlW z>5vxbktXSqHtCZ_>6BLKm1gOdcIlUXXt#)i%sa$D_KH)8i{gRll%83?4FMK#0XDz| ze&%P6hMAp4>ZDfcrDp1;cIu~w>Zq1#kd_b+Bb+VHWysVDNH_yN(1Wl3>Q@o#u_o)X zHtVxS>$FyDv%Z5npl2oM0yek%7+Mz2@t__Upd}?7$Z6!6xj&HtfSj z?8H{=#b)frc5Jl%G(Mn8S7hg`IFfhx2LILU|0SW$_Uz9F?a&tO(I)NE{%mcq25p!I z!U_j%z=mtM25PtlYruxhw(Z--?cCPw-RAB8-uCU^2JYY%?%^ix;x_K%M(*TR?&W6g z=63GqhVJN=?&1zIwlnC~fhT&>?(OF8?)L8Q2Ji3|@9}0B?Y;x!KJW&Y z@CmQw2e)aiAXx>Uob&N5hjB$jaTlNQ zldAD+LO&K~alJ`#7pD~xS3nX6^7wgiX^Qca%JCv^aT@P&CU^2B=RG9{rw{KNUOMu< zVYVIDaUs8Q9&d`I)p99^y(XWb^sdQ zl_!P)-HICBJr`Z8$@Ag08rAjPLg#bPT|Chp8tpDA##0_6F&@F2^kfNipYh#67u`iC zUV>uur_*jvA3H?Xb07M1G469r|McJG^r|~vpy_T=A7i}R^h8J9iqdp{`g2Ps-a;qc zRu^7bH+5V0A!2WI?Uott)^u0D^kolrVn<$BA6;RGbw?ND9&(~epY&`m9wRYcKPO#b zH*{k+c2IwG=8^Pn=k^}r^-(u<;l&;Ogq-V^3dI?R^37ND)%Shp_kKs;d-wN%2M&QJ z_=4AWfbaKwCtrnMc!ZA{7B=|*eRp_?k9go<_=lf(i^umBuK0iN_>Twqj1T#ZC;5^e z-;2k1lRx>1M|qUjc$K&K69##Yhk2K8`J0FNmtT3AANZL+`Hg4!j92&rtaHxYilx8= zq|k%MX8NXg`lpBbsF(Vwr+U0z`l`qJtk?Rj7wb>qHy*|L zh8-w@sgw$OpNS&l*{R0-%-8(Q=lst1{Lcsd&`;^s007BeM9QCL3RnHr7r@p~fIa}m zqSxjAWc}K=eNt)-1AzViLX&;1mOhoa{oogVMQV)#*nNIQ7Rpb$S{(l7cYZI*kOGkG zWfV!V4`I)J{_NNOEkZOF003gEMbyXs?I-{8m!0na{$q?hqu=H6cX8JPmMGU* zJ^n1dtS6A5L4*o>PORu~A1zzYK3R(uE?lTn_P(WE_V3rJXQ!;4iWLhRty8wz&Epm7 z8B3;u2NN!A_%P!C#EKU)ZtQrdQ>aoc+KXs)V8Me4eRid~&|;h!ze3ph*9%IlH(|ov z_!lG;pCr!)y$e$3Qn4&#zL1HPgjXW3kB1X4Zu~g%#@a!DKiTl_PRj%Av8CYougc^r?FF^CzE+3mDlLn5UU&OFwGnw465DW;if`cj(eQ)^a289`RucY`thec^yDq!!_QWHZ(|tf!7s&pE~yQTqYcj3=)5z}J^TDK&_N45G|@#HeKgWZE4?(+O*{QG)KN=4 zHPuyHeKpouYrXZ+-=vD|zw?SKuuL=KThTjdtGzbcZM*$8+;Pi2H{EsHeK+2D>%BMM zef#}4;DHN1IN^mGemLTZE1vh)@-F1E*a3@L_PsSTq;S8PYrZ+>$uZpWQ_z{q5U6n) zTe)zZtG+txtq%wJuwzdiQvjC`X}RmU>%KehKn08KKc$a5uSH?l|4Y7Mjh$JefCW^VHhQLw0#1WCt*RdcBiOq8EhKvBlNt56(;bcQ<0aZ? zhxVqk4{0?{Bp(^!KJsCYeWdUs^H8C);1`Z`K#N)oq0|V;#FD_IFjtQY%nnoNsmG1! zaXkc|5MSs$?@_8DM|4#YqqxKoex!)t)8PmusKqS~h=Re(-|24Gzu>_`8SVhbJHWS) z4^D?w=5Uoc4tB74Q0j$e;Zr--GLCn&;~Vb?M?1zOl5o6nAsyUP3g=;twa~F5`=Fsc z#*vP0jAKms;NwE#_(w$kFCXUU&h_45j&^*|l7wVoAk)FeaQJT@^N^%AR2h!{6}oR# z2YbgnzLAeR)e4h6d}KJ($i-n2vp8O~p#B!3SZ`q7Sx+1ugbK3uf%05YH%t9)!V%OR$p<%;+Gc3b~JP#9|ub=!QK` z@rz=_LKy9^1vAF+3x0%!ps{$>KWGsPe>|fY`4Ffu4B8QXSfdyFc*Z!)5sD4%Wh3JV zMJ(EJ3|pAP7WUx9Tr~0yffnNwwD`qH$8m~o6p$ah&_*v}Q4Cw0LV!2r1v}o6P`_Y< zRmFTNR2OqhFp{fy4nbESp&^KcxZ@u8phrDi<)4w*0uu8$MjtAP2{r8hAryOfLm@&@ zhi5>77vC_)FFwJJH_)OOmk>s9sPaa8ydxH;=*1~Q!Hh;oDn-07O)P$44M^C6AIuPj zLMMsTQxFOg$AC*Qx>1aD99A2rIK?p<@eG(^V;aX82PXQe7h8P7d$zC!GoFDBMhJr+ z#UQ6GZ1LD%#G+AgDGfzx!HZg)q81za1ua(ESEoj`y4KxM=%f-a;2{%2V_ZlS{!t2e zK#NTNsns+F(THMTA`y@{#V7Uv2~2>ABD}CgAsV63P_!cspD4y25-2;&(2#xh1o zox$dV8MY9|GmbG2YNTx%{HTU4w80N-nB#+kz8`1qaAuew4(W;LTqS57{_=A zHS$3XUW{W^@4#~UQSLp5$YC4M@q}E1MsOf!s#$4(59!;J#i9 zyPa@_X%eLdfVT}b2 zP-h9`w9gWVv#(?0fSevX+2I%UwX@w{+3k@A=OGSUP+dshZAi%Pu^<&bYZ3B z_`zqYc^7e(IDk=inphQC>{|%6Lw-5Tl?r5pzdYvu)6_g{O)K$>pVQ-K9uZ}Kg@r7n z$-n(%HJW6a3~&TRmZyxN3Zpuq5WrF=NZ~_h7CfyzWBy3-`m|3``Opt zbapq_3O}N5C$f8OC2u+QajAWipZw(3?}p5;N5qSh-`P8iA49}newbX(gfEfTvQ$WZ z^bZ{3q(46XmG`gZ)Bf{1L6=v_g8<5dHF;G-KlNMNlC6Jfiy~H~} zLLU^09uyZOEJImI+AjT-Wqf6K^wc{X!~IHS}~LbGgt#H7+OiZ!!nEm zGr-Sa_5v+@!$uSvqWlAM(n3F$6hC}JEG$D=Sc8+b12u$0pcI2WEQ39a8Y|htstH3l z(1LEof;Lp7ePg5DP(E1lmfJrjY4Li>vILw4hM?RYsJa zPz%kGn3^8neT1!W+mvFdm6oY3nJAo|s5!vqRJ00qblmoNeAU&s-`~bra~&FI*g{qsi?9GipHj$ z(k7n9sPoO}=tQ2f2~Yx=9q$Dnt(G09b;H1rPbvYMprM=a?(L#wogzN!oO4I+z1Cw5#;kq!>v^(vd4t44lFM5l_(T z66GtzYTUk-9Jl@}zzXaIy~Is6Q~#h`yv|(pz{JPC#42`!$#%mxoQ2AM1IxCo%Dybj zeuK%%EXvBP5=AV|QrW(uO~snS#agRF=;l?y>uNrZN`!>9&|C_Fo6rH!C8-%75n(!r zr_>Umc(#MjX016)t<_fTC|#{KgdY-ehfT0V(K^uk<*eEw$Ieo#c=~L>0pMhg zjXn}D^nzQq9IRx7yYa(2_`^6*!!*d$xBc4-y@NIk97wDR#W}9&iQAE)o2wit6CsHc zPRAUjk#w~Gkh}>Yx80Bgri%FG(Bo)sBOy$ysE{iG;gsIs3AyeIv5E_A8>XtC!aB?S ztu5~&#=fHJ+l~V_oPq)zzyY{xPN0iC_(LuLLL@{2dF2B(w9_E)!AAJQW442n)q|7$ z+B39)8g#)Ygo8gIR5H5`&Qe9b#xLLrPpFATzE*}^iw;xzOEV7*!*gu*l=LL(f* zdoe>?1(F?A(n8eKJ4}OJMb|TU=rQEcH9q2i6@$U?gGBlRGyK9TE(1qB!@G$VMLmOW zDbyy%`im4FfP$EkbxSgff-2JF(d&L*n%7cfgDsp5>&w@RLB`D zK@)VrAS?kCB*GP-#%BN&Mo@$~4#F=K0wkQlApAoc@IfP7!X7-sC7fb76lFEE0Ze^K zgzS?6^TURP!ywNCXB}89q=h!ruu`qlC4^Khs%1Ddf`^V&F?>RLF77(%)Hf`{Rd&NA zq(jP*Rt<;6fMpb!X~WHM)`=ZMvDrc`uxA4w7?1q}EVd(ug~FiVp*Z|QQ;lsAH#1WF zE+19wIEaI3G4b&Z>=Rqg=&%GcR6!VY!4@z=7@PtbG{GLIK@(JgX-a_<41yorM=?zQ zK@gmR8Sp_9v;@lm)I!WMFW7M*7^NA6LL=}&9LN^f|4W z;-Xdy&qH3oB~|uEDqy{3gsc1# zNC?qBY&Mh1pZqn_`5lY|(h>~iLp_*~NJQW2DIAy{Od`#ZCABVxPwD8QU?|x`J=B8= z;Zpm_--UA!f>X<#j3p-g&cDd6}O%sBc`Fn<|^9gPU8k6NB~L5ysBNUX*(*tjD^n z$9SmMdglDDjsNSZdv~121h%remXpj7**dYi=BP_+t|u{9qxx50Yv>sUy?&3hPy6=l z-R>4Uw*LyQ_w262`R%>Ve$%SBk2|^3>NjLNx_1k@QU$j!JFnaSM0lUg^<6~LrXbJR zxxL#v(?yXFb^{+pbGQb)z+dgaizlH`N6tmW*^caRiXOc)ywCw1$v#lhEnUJVZMtW? z_Z+*pCVRK1I(Qdsy{1IJEySz5kVb52ca(&~y_>YqO1Qbws%#LeAUKj#cS;;MkiJ_7 zA!&d!9D(Z~HZTjpr4X$&MA0Mt!$ris8B)_jsRE9k(}U^hF@4jo%Di}CzwJfzysjYLpU%43r&O9^b|JanR+R1JNUb0jl(=lrY$=% zHDD8)b)5w`3Urc;;d)JX(t;6FZ%{taT*%Um66m-J98WNXmBefI28n`e(-u~@O* zU9$GRYTV0i&;CubC2U@} zd9*@JJH;y;txvp^ww+gu7BgG1p3xH4t(Prcr@kChFzlIUpNcM;XS!cbX(SX(8Y!fWe-csS6FwMuW)NO<;b)L{FwsN9 zQwlNXqMUZ>iL-Hj>7^G;V&R3GX?lsJm{0!y;f0rD#^L3iU;g=}7;IvhE0j;3!K*TD ze!=9Ic4(P~No-E}#3*cz`emA*ezE15F2Auwn^1!Mrxsc+iDe&Ntl_1WV#YG(nP+OW zrLS%(vjr6Dx_k#G+yD(!&_M|;)X+l_O;k}sb>q!9;DmdpxOR?9?v&-4doH@yrmOBV ze};)-yM6XqCW$1%P@{_^^jIQ{Lb5pJj5n$vqYyF@>EaD0>X4(3HX!LjJ}CC+!XIHm zz{DS$5VYwfTkJU{lyrpACYEEK5$2d*KKbStNSOJjmv^#a=9f^Oxd|toc&g@a-bA<7Sk0i|5$G~Ri$;Tgl{_*GViTL4XAAS_)XCBD;;c4=T zBDaS#6#ub@q5{9kr=4-~Nyi*}!U=91)!Q*Ab(|>j)1r6AndhGq^J(0k^>NJE zN%Y#=31=U3+CkkwoM;z49e>9EX=k2x@}Zp{-`gVHtphPKho7+8dgmge$uHmh^U+UV zecOYIKCft(1bSWTxV_~!i>rAcDB1n2VZ!>!kLhR8ROylu$VZqH4=y4~C+X-jVL5*&7 zLmP!OUBtogA8@!e}*0nPVK>I7I>I zcSh6TNPj7*8XNZ*nm7ItlcK3*XLwkko#c{f@SD^xff-C;7N?hCxuqwOnM`FalbOu~ zR6alnDccQal%+gnDmUetHI62dp6TXnzA3}a+=hf4bmlqHnND@CGnvp#8l*VGv}&3X zm1fLlYqrTweeRQ={q*NQ59Lnxv5;xRG2J&#VE_f#lWLv<=tChIQHf5Jp8^eIJgIrm zgf3KS_hd~zDH>9dj+CS&HJU}?Ssm-NgB=J}C__2*N|Vl%rZu(cO;>}`;IJ^3|7d9{ z8h}lYss^MuHR@6Sk($(p>XfIkEY3H05rF|Hprb=gO{bKaRjqE7tH@+3B|QUGsZv!_ zRz=MqPJzcfu9dBAb?aN<8dtf_m9BNQ>s|4hSH13)uYL9FUjZ9f!48(Ng*EJ95u4bx z{v(<@^~`YOA=arLU;qR7hgnZk2wvQ-ah>(-XF(fU(TuxWSfv%?15I1^^hK0A((701AL+GpCu& zYeuu0*Boa#&za73w)36woM%1nna_Rp^Pd47Xh9E}(1kYip%I;EMK7Asjdt{-_1pje z)FI2Cp`%y{z~Ba_CXJsF-!BT$2vLuk)TK7{sZpJ3Rj-=Wt#-Aj8S!da&zjb?w)L%X zooikH@0!=WK6R{Z4Qx^~LfF1GcBzYfY-KN-*|2W5vsImlW$>ewD*Xqh5Acso+fOv} z=-;=&9d2=to809#_qoxXZgsDl-R*YwyWt&gdC!~P^|trD@ttpd@0;KK_V>TTZS8I{ zO&;aIMFa?t0BsWhHY99gL3`Otl}3Ex6puK>!y->=7IWhl_xNx=UU7(DT;xo9_{bxE za+H7k;u)8?%fmt(kC*)81f{shF?<$6*d~qIW$1 z<5~wf&>wDhsk1!pk_!9RwXXMxzdhvL1b6qb|sz4v|Z zYtKi;(iJqnH~#TS82kehpOcIIqHe@-@PsEI^8%=TSFxXc?Qef*&Ii;ugfRgDBp?Br zXE^uKpMLePe>UF7%{Xu&{sbVv`myOCsqmkF{qLXu{rCU>0WbgsZ~zIg01fZ}5ikK2 zZ~+;x0UhuGAus|ZZ~`f?0xj?YF;D<|4*|!CH0mMxA^-tI(E2v-HHs%3P%s7mRd5Aa zumxT41z|7-WpD;*um)%F8*uO&Y;Xs85C(Jb2Z1mMh42S^un3Lt2$3)eZ_o&JkOiAi z1)nelqp$_15CyBS3Xu>Cckl|GkPEGl3Y`!PtuP0bunf)c3|;UW(&30kLmxm;1V!*O z5P&o~%`-^JckmDeD?$&$VG73q2g6VW|Ih{TFb@mScl59jvv3aukrDTh5mOKmrEmo$ zaRtBO5Fb$y6EP3N;Se{G6Fu=0KM@fzu_7R`4?7VGqp%|U&<{s(5KA!>1F;8n&=L7C z5^pgTb+Hpq@e5~h5`XapyI~i7krr8S7=sZNJ<$uHPz;-K2`$kGk+B*7PZ0~55g4P< z5-|}MPmvU@Q5Lh21*pzfvawuqPX+vxrhBf6^`W4<{4SBs;Q-pzLV*wn1^FWUcd#Ln85BFkEG8+^0WREgCZ!=!+L?*K{Ju@<4FOPCb^dNIGOY<{9 z(=t)>G*46ZN^|rq=`ugFHBoakQ!_SYlk{p6Gf9&-aq~8Rvom4SG-q=-cQZGS^Yd2o zHIoxLn-e&nQ#F;dHI0)tS2H?~lR8PyF+1Y}S>XW=Gd$UEJh$qY$n!jh<^zL)0~|mx zMPo71Gd|^WKIzjm-0(XcAU_uqK0AW~>hnJVG(g9bFxk@qD8K<2pg;e?Kg*}71hi;~ z=rcNy{U+3_P@_VNh@CJrG&YocI+R0ULm$e46%LdE{F6cdO;CDbDN+tBo+wG_T6B71 z)Z|bPkCbn*Vh+KCBltW;_e>7K3Q9+X%QJK%AA~f)-tI-?2{eMkNS#RM^vFqTZ|9~| zIP%D$fOI&H)JGju=Z0(Pgo~$k)YHJq+M2FR^$1B>)Z}_eH{OR$;nYgsr;S)tPN!#1 z+jLIBXKB{dO2_o=(t%IiR7>kPIQ{P!Y9J9d%PhHTc4`P}!)JWYp7IiAEnQQkh1M5>@#)bx;vir9_ocWffJc%|T_( z(sZ?{{FF$=r>AN(O}+Fp?(+dCz(hGCK`r1Po^>?;>M+3&2>&35fk@>a8b^b&^&_4gA(` z*>-UqcX1ULY#$d6`qpvt)^Y*Yao_fFsIS+{jv z_jO@6c01Q?Teos$_jX&i4%FZj8b*%%p%~PlSH5<5hu3R~_jr*vd6Cz6m3MEMw{em8 z4Vrg)Dff7#_jtWlc&B%Jxwm_VmvOBZdEs_;%hp#4w|d*wSM)Y{-q-DOU{|VOeg6JDc`CQ$PYFAX+~|0yIE1_y7{v z0lFBeZo+GWvkQZ%OM^K$ghhCSN%)cfO8A6J*n?4cg;{uo^NSkH3x?ZEh6U`rXt=(p z!5l)Q(ysOr_+TDl*u8FeyoUI`inxg33yEzwh-a9I=Szv5c)gBziOY)`pcuVcIE%G7 zgTqUOx0t#rqYbj`mKJzKEr4n{qiQ>2f>&b@Y@uX*D~{!Oj_J6L?f8yE%Yc5N4|v!g zKH(CU1&;-JkO{ev4SA6LVHzmSPr_+|#UU6dKmtJEA0$|fwW(^bGm|xWlR3GQJ^7PC zIg~|tlwa>^Z9!=?=W0Iz5`e=xN%@swIhJL4mT9?`GkJ2JK@O@Toc^JVgTVqoV1g&v zGcG^_E|hu z&7n~lBi?zMRXV1Lw4QgFH1|OpY+)6ufkanepvk#2M4+TafT(0jrj2@!SUQ^F**uSW zp)b0oF=-#5N*9zN7&c&_MH;04A*fNHq={Ogn>wZ0S*c+l5rI0B6LSz6(@*jNMAcccO*!G8VD!06>=K3vk=H| z#>cvwkEYYwGo)G_Kh9kq%fgi%*815!9%;6Whfgeu%f{vkrsHGRE zp&e`i8>k^&_#2(DJE9-^y)#@GuwfpAp%<)y+P*;;rr~kIfft^k9d>*$tf3f=AszNX zThieeut6BA#c_^fA08%jZf8#R;YSE;$NLZ)jFcIyK{9&b8?N~orokSbK^rohdWw9L zMti?CC`@z#9Q>KJ>w2h3gTW3U0Bl>rbNgyBK?t38cUuuAmA0p$i&8 z56r+Ef*uV7gB*6mf#;6Aqd)F3f>_H%zzp! z2;}45d`5ehcu1;GzO8>?1!~~sT^cmM`)5dZ=m=)6)s4YCG(11iqYuVjBw`C z?b9ZQMIs;A)C9p44jZ2mjdmRKvBw`2HEo;J@%Ls1KYK4l`uz(yu;9Uj3qzd8@0px` z4Egrm_wAQ1Wx-t3s6ivMLmWtG$ezsP(+eN2umT4ow0i4&?A zq!6_(@mu<@4-0eeW;8mLV_G3z{+6A3vj+>7aV$dhp>>MSn=?uH1vxcnOYuZO^!y8= z#<2SJ?AyD4zmcR#myB1oWcU!VHWn@O_2`pC8@422%@vIZbAvFD{L;k~v@lZtM-a+JJj*dK3^n33k$rop^ZPG#3BVGEHKkW6R{K$%PCcS!a^}|WTDLxztoY0 zaQ^Ty!#w%$1z(Xy9*Ja;h$+UHV-P{6%PrLe!^34X06_z1p8Z3^5fra8wX;@l;e z^umiU;VhE~GyKF7$}#@La>+D|baQPud-bJizWVM9-;#?phA(8i=(0>OKm33L5dUzd zw!LkG@uz>fgpZyxh7X`BHe)_AR1qBm5hRDut--uGds`M}*a1RN5``bSRKsdrx zgnSolp$lL57ykJVRsfvHs2q|&j<^qp61-tWdf3B%C=iB3EFwlSsJv1^#ufyl(!>5i z!ixw10V-^gX;6c)hyZbmT!6OUj*O>)m7nUY6D zM#;H$sB@j{Y^OWl3D0=SbDs39r#l&W;4Weg@9QDV@f zNra^|t*K3Kiqo7Xux^#RC{H_7J#TUpoE1U90yKh7_!)4iOl_)Dp9jeucR_6J2u!LP*1`!yrZ!i%YtoQ*Eh^i3>NNgfWEv#iP>o%jAW0(iUtY<$PG$abo zA(X@$T_4-gi7dbY|5)v6|B(sGV)0aa1?@#@OA*}KR&{_SW?^;vJmBt@w?5?^X}cjA z#ts#V9Eq(cXZu4R`bD}90b30Bk&l>A_lQFO>`2J+7!yN=WM&f#*+sA`#OFHL97)GGz7dXa z$fU)>1+LemJC1OqqaFEp$2aymv%Pw49^H6HKGKmz5ewJAU>mYV)Vt(yL|G%X4Ou(V zk+J6WwzCk)?vgWHxrdnf#cYlUSGtxsi^N1VT9&ijTwJ+)w4)mv>@v&%Ic1BaBON&& z$3Iw%XWdfH#ATN9i{H^?=20%qtbE&hB<6p=_OR6M))EWfUQF&946>m z^icd*Mlbv^XO?OAyD=lFh=;U~NsXfzDZ_3)enE?GkXC2Sv>JN@%nwrnGP}R%#VM%4 z3jno1O26ieIA#C_+p@E}k915UAHpDVhn79<^xl^l!ia?}UTq8J@OQ-P#x-`SO>L4y zn;GBm$23B*k9VM$8rJRDI6h$xejMW)DdWdCumQ6<6Zp^Q#cspJJB@ifgBm%zc6!Zw zM{wgX$;EK;*ETp}^kO`037kedtnrMTiMvDb1uJJ|`Xoio!y2{#q#+F{V|I5JY~Rht zDN^1L@&XcUO9uB1O`ctT6yp@ONO^d_|IM;~cSG1h>{yu)XmfsiZ5-4vl%d0G^A1_9 zA>Vb#GRhqbbgSFp#~u|w64jv_n%CgiU|Po%rDDhKJ!Ok_lzSTdFh?(J(T!rz zqWH9+ML5XC4f@wX%{C6d5DK&~{|&TICZ`Y?!B%dkAQQas3~_RA49E+yU@y>C4D|8~ z&tPt(*A2Tj4ao8f%)ki0_YIvl4bRtq7nlym5DUzJEVRIT1t@;H!VAZs4YUAzyzmPR zQ4Fca3)LVDzt@3G_YT^?2m(P3voRagfDN?33xO6|^7V3bgc#pY2**GT%)kt`Fnj4h zgTinqC0H)zAPlxZ4ae|o>xT)&a176I3`+-xF&Ko}(0tFZ48?#f#n1@bCLb5l3(Rl| zzh?`-U=F{~dKW?s3!)8&C=R_43V|{W=Ee-D=YfUD2$2#C+ZPMGpew{zE^pU#v6q9r z0BkGhDZIcAxVM7iaDSaQ|A&wu4CMxVwJ;8&R}7yJ3-scD5BPbupbcqgFTf^@{U?LA zFb-cBhqPcWzi=$VpbaH>3LQuby|8}Az&3~%5}p~!`CjT@eG*o4;A7Zr@#x&b`1Z}e*aL7VCameur5gW42cm74`peye{i2JZ6 zCE^^;5emQX3qAD@^?(WEAbe{w4ww)Nn7|CYST3I;eaqm1|6mK)a44Z*4or6n)9??z z@(h>q38(N0dsquOcnXYjCZ7Nb_!xYJm=0`mC_m>Akidq_z=pgRBLcCH_;?DGl6}X} zdH$dcsKI*|7!C}G|B@x~3CWjkK6q|1xD27tDP1QFm2)D;P)a3HZpTLppWuT(XOvuN z3)FIfpO9{`@CgOUecylyK#2)qc?#x`4-?1_p|A{{$b)go3$?IAnPr7Bg@yZ|lxC?b z;b1A3A|tq?@|l9_=&o*GBI%qjIe#b z@(WOL2{j3Z$B-MbkPd@+m*y9I!q9!6Pz_913*j(&nn{stVht}zgP6c?;jku(iF?3z z3XlU8|L~Jw_!LZM4VUl>-*5^~Q4HZ=fVRLG&rq14@QLlhef|K8Yyt_r;1vw$lHc$N z;|B`1q9DK){|etg3%ExOQrLQskdJ0UaFA1A+?ZR6XE(^TQ5`i-qvjB$mJ#TbZM5JI zkPsuvDGUZ_lf7ULp!f^=cM6qafYu;=p`Z;Xa%cw;3kJF-w9pRFHw_B1g66P^OqYwF z@D0>}Kwqhz21pHG`J$J=3@!N!f^sN>5(*y3m&L+^#c-tpF%%BU2bpHS;2lyz*fSr)Q3?0da%TN;jNQf~C3Dj^3 z-OvtC884LL9LjKjAK9CP7?VpE3cUbK^Wdb;@ei~x4ltO8y}*~&(0{S;6t;i~-B1n8 zFep#a|7^;M7L7m+;{XcGurazqh=)iE{%8xJ@D18v4HLRQ@-;&+S2(mV51w+V%yE1d z@(J2dCY6W@!jKN1z@u@}3$>7=r?89sK%~Ei2}{BVnz;<)K!e{PY}hb~*bxitK!_gr zhUjXOol+s#&<$<6s_znnFFG!m@Q6N0E!5x}b=SeV#=3D(f2;eZLt@DGFT z{|@_T4bu<~5(qQfcW}I54RLr3*02o6kdI2)4dvH;?U{p4)(geg3(N4e%b-|iw+#9w zrt|Q%&+xTg7&6_^3%$T%n9A)APo6HFM620XM=jrhkql;4Aww<)>;e>Y<{`X4yZ@D zz}L9i@DG~0e!tK^a#;=F2!1744e3d}KWYzgn6}OfOz&U~=76NeC%WqLf5Ko6kN6Dw zHoeQ+w&r(s@4$!cX$#7*qOD3S(59yQ(0;{mb`&>{y^w-4`Fq@u4mntW#jtC@S3M~! z3|dCL&w!0{axX}mw8gbxj2CKNGC~jGFq5}JSsOFGmPdQ>HHF+UiA*(AqsU=HHD_}# zTEoax$&ooUt#hn&bYg?-$VFzPE3-1z95N(h%*(vUG4aeH^M#5-%^g!R>@u%FKye&oh%Vtqjepj53QHGl!hWe8I@3T*%KJ>q90SoM6E=r9&?Cmk z;rz+YOwE=2%s*wvN2Fkn0gjHRp%O893=qg76+m9Y7aBG^mh(6@O*@ct)3#GPnzPe- z)?&MJKDM(tG`-W5W7Ibt)3rl8FrjHR9n-QC)HY4iyd%|8-8DSD|I|n=p%OYeSgq7m zozqXP)m81)Q|%a3?bR;<)@dC#V}`8xk<>J8u~&`NTP@Z~4b+=%@--Q*z~j2kB!%s?NuY45lVZZ zOe>C03lW+04;HWyl{KO36F~6uKClhjvfV%dL?kQ&H2u{!yG=jsgD-0Cw@%w0biA>7aHK(X!Hv|Zc6-P|Kp+}cgshBcXiH4(vGb^A*|v3=arUEX)b z+{Z23MDlLt%~J=Y+sn<~@D1JA9p2?L+v$DX?4#cNZQs9r|J#RG-=aO*7J6Kb*RT@YE{)OAuH?JL<2AJ8PwrVk zPDxF~Q9}?B;WXn}{t%hq4@zZuI1c4uepyD-*OckxVvgo~byye$R8it!spU5q0RoEP z59ZVtNuK6;4ny4RzhtK8e@;Z+s6;{aL6ApOkmV3S00IvI0vg~DqM&tH3+8}M=@q0B zVAaiMUg?`|SP0(c846jD)k!w)5F|kA=Y&JVtm>=I|LUz?NUsj-u`cVgPV2R9>$gtp z#Ek2^&g;Ft>#Yv##*AIP(kjCg3cLc+!LIDf&g{+Z?9UGE(Jt-NPVLoh?bnX&t1dFr zz#(i-T7)i+sfFl3Py-I30U$sEj;;ZsKoOq+X*mY(@h$Lm1@B97aIl+JXzfb(YFZ{=k{K@|ggO(2F z&_C#tZ+y-C(@*{R)cf;v{rZ&s#n1isG-&NK{pv*hyI=iZR{r77`^=yI-!J~?-~I0| z{_Vgvsz2m(_4F4(^$wv3k!}yA0TBP%|K;PiZy!H?_TJ@Vm~UUccMluxvuCfN!+i5D zIgYQa))R@xfyoV+=Le1(CDNctnC*Hg`6z0&0K+8IWsnF}bclO$19m{s2 zOs)i>js%+$W=5Ymr9R9$@7+Jdi0%DTS~00so9(JLoYyXB!?+uz+BB-QGgXEnAu7!{ z)o5IkrBf>;-I%27$5df+wmG>W$=abs8eY9Hb?mF8fuC$Vd^qlnayQ!6o!hEot0Nai z2R^cTb=FFa@2>c+U1G%hzWvg*|121fBS63>Ru7)U`o#9`B?kV^{yf9@rRLv%KmULH z0vzri0Sh$nz{XJ13OE1@REn|2AY8Dx;v78i!g&ZZFhLCkL~O$iDMTDTfb@f$PSCtjk|HV=j)7C|2ZMD`|d-e5KU{|%3$YF2AHC0|?#g)}vkCpJp z2WzbLK^qmb@mg%*TTIXn`Dmn*R(ffs zn|AtXsH2v8YO1TY8smMm$yXUkf4~8VOM?#DJrIn(`fRk*R(tKV8Djg@GNI1rZMxHr zo9(Q1(S_@t`$eoh|G&?6yY9K`Ui)s23l~>$!$lsvaqt*#`Xaa`hy3z~E%#OPm9w^G z?|m-?di0;+Gdo-$H9~#KBM&*+-gen-l`7TYS??A;*{PQvc|DcSo>B0}&xm{5e@6_W;E!aSbMD)B z{!7UbFI;%l=U*QA=*9P5c=>%PfLdbQVelt8_2rIx38dZjaCbgfaVuC1Y~b@Oc)_gw zLT6pWLFv{rw8XqeVEm{@k>dBg_%M)xS}IZk6*4^(Uhp5A@f{5HH^cPB5Ha7;Ar4K* zJRr8tdO`FZ|Kk*5J8dNpA_?@4v?afS;y)r-2tt1v!m ziE|s0cY;T7r7V!a$8wrO*s_r2#XCi7RD9Z{%5Z6_UIJ5^&ZMTQ zJ{3)9ipo|aVO6e3bxnCi$XzhI<25sOvSJDgoa%HHld5S=Yx(kFHWMbq=;O^$trMET zhz`}ZI(nw z3Lk{3!aO{v!PwT*)Oo2(s#B$ERjqnetY%fKTjgq3z4}$KhE=R%C2LvDdRDZiRjq5? zYO4^sH=c!!baOSGE#bote;`D!d*y3i{rXqH23D|xC2V00dsxIKR$Qx4Y$SZ+-h);09N?!zFHUjeA_=CRe%3Wo~nw`&{ToSGv=c?jZDl2?7lZwCAY- z4w@RY7mQX@Vmb^T644E2q*uM`Wp8`k`(F6QSHAP5Z+-21U;O4*zx(BHfBpMk00&sW z114~R4SZk(Cs@G=rbaB@;14yeXS<^9*JvPDk^GUEddQ>0r@$dwjeKMzCt1l$W^$9A z{A4IcS;|J{$1~(GL){Dsv~dL+Vk|5s5w3^BgNQ|T<8@{x}ui5@wugj&8hz?_Xb|I?$`xN;IzA4!3Ul_HVJCr zdWxID1BIjIB|P2}r+CFJ9_e}4cu{X%YAor>@5HQt1R`%0z}=VEjNmop|8w&P%lUyH zf6$m9{0JUG_7QX1u{^IkfBDV#@eh8iJUsp|$j;~X^PA&UuLsF=%P;l@ajw;*d7~bJUHwbc!VnCP~)5u3Vn4yhuq?haj zN=KEK@r-AL;~Cv3J1^Mbk7=Z1AIumBLBhccafIXV#~8;x#=(zp9OD_s5Ii-|TjgR< zaO$Hced$e4CS=b#JonaD-#YjY8gLz0UnkH$!Xbr3G~yJeAj2u35RNx2!5(~|Minr@ zhjgf65PMLAKawB^f3zbBgW$ytPGN>q_@fV7;71#>AcZ&BVh6Oa|3w#K0R?IdA_)6P z1Tz3Fg-|eJ5NKF}8Za@9B#fgFW>`WSLIDLicm_zoge~}lMxe3NOF#u&z^AJ^Z}YT{ zyERy$fs%7HAn^x2hyi~H2mJf9B!B~6-~ciZhIiP3E0_jbU;%5Gh7zELBtQ)38-!;l zfqZC#7u9qbh7ve~%?kw}qy}Lqfk6ld zC@cnZSOPuRhh@No5J-e)fFA}NLozJGU~@oaV?FZ_w=PSJ8lb?$5P^`ZKrv~99q=r3 zV1YjPhbAxsb2tSK2m^lTg&lx`Q22*&2!|3lh9%$wfmnh>|DXmIn1?<12P@2hHt+{C zxB`FBh8y68B&dUbfC4Od2VN)vD6oihhy@nF0)McD7^sGPIE5`pf>)e@aB#jopgD8k z11f|tGYm#y97a_`LmN}WeW?_&QI9ta8aVtn3mg+($bneEgj1-4Ex?8(poL4&20jRa zXDEbIV1Z{yf=g%wCYXmA_=iNmgdW&~UkHI;AcH|DglA9#7WjuNc)=O01xM_LB{&68 zUf97&R_ zn~ZxCTFaM?dp+3u8=#3j_;4tiI~Cd^34iznNZ^HP|FDNp2!&qohgf)qec*+6D6?Mx zv`+{Had?MD2n9?yhMcU1M6d;A;D<}VhGXCZYxsmg=mu*@gks=_P&kF7JcXY;JAS~1 zgp9ji7=&e@gnw^uInbO3gt*L@P&&^l zO}zTE(3FeKG)Ad!GW(qfj@%}+EWbwIHC+O5);7^ z53vuapw9acG~S@3>)DSZ$__BOkL}ct=ya0t|JhCRJWupQJy~0(f8e-e^cNbyf%tqz zmPCwaT#x09CtgXG{e%{2nHK)clOfs9f8tL96;NJEPX%32^fbm!ODHxZx7h2lA;5ta zNDLf!Oy!hJ2JKJ}{ZLFxy$9rl4eFa%`j^02591V*{Ok*xcu^RQQ5l_48m&*d{ZSwdQXw5uA}vxQJyIl1QYBqdAoU9F5z#b+P_Oxit?RKN7=lWkeN#A%Q#qYeI;~SXy;D5RQ$5{NKJ8OK zRnu+=)Nt@32TjRO^O>N@6e79Oe-H&m|HDrX-Jx+X2TH9}OTAP~%~Va@R8H+wPyJL- z4OLMcRZ=ZgQ$1BwO;uH0RaR|PSAA7jja6BlRa&jpQB4PLGECGk)X?&pE?X%0sL=J8 z55#Cu(O^eYS9WbzcYRlOZLRfOrY#eLi&PNZSAOkRyMfYU%$J>U0q;stami1A zO<09p*lh#Y2URLou-A@3Sca`wi@jK2DO7E3J*b*keZ^Ri4Ox->5QpVe4ic|d(NIWj z6;0yJJsDY;jajK{Spq59jkUFo|MeACxCeb$St7}Y(!7ukv5&imo0#YmG>M7wlv$>2 zT5O9siol*K>o#|4Ph|Xo*h5(&IReCZOd*rDNQH=M)CLgiETZ$d&m4zwm^-M2h)b}B zypqj%xIC3}TD!elW6Os@Py=m1NyOj>X6Uw*xD%}7nhgK~;Utp4!P4aP+1C1nJ+K8~ z=mtzkFKhe+!21Mdc!p2tg;3xFTVMuZzyxY&$TnbxP~e4n*u7Y&gJ(DeUidk@on6{p zwM?@GEC_=c+f@RY+GI9MmPmIh=tjyUHFY($ax2Z+yXPmMBW9u zc|AsOV1z;#ghrT#P`HFs zpoMn)hG+N(&!vSz_=oikhhk_1W@rRHP(t~AVHh^a`fY;;n>F86J*%|^or&1*N(>%b z4;pBX`gC0I;D@hlzhfu_UI<-Vc!rAnhf}ZxYxsrHrG?iWgzy#NVqgU4ZG=Lg223ck zP{`jHE@LyMntVuyHo$_T%vSyFwlw@4!>!UoFHLsFA4m)eOkO>X)H6|$WI_=$ zlM)kwkQz%06&a{Ueq~q=7BrdUK+_N4H9J)ZEgIml9n-Npwok0>WETBcQ5h*Ok{Dzj zP-gV*S{dN~vcKXL0tayV~DQ%bA@KH=sGR zb^hfLYFq>!XL+9IN2BB@{WPc&;8t;{VP@I)rDuQ+=#yF6H~!so&Sf6XXA1-1a|3}+ z=4T>7*g{6y@EINmqUik*XpIJF)jZ&6HfKY%=EKDSO)f321A){Mm>;kJN8Qla!G>?> zW1#EZp6H2u|1bxSP~@KA=8f)YXI4#ZI0l-t6-wqNT0`fACN1#L=YLpfltzY#=Fm(N zhCOHmTX+X+c!z1AUu?+5Z^*@V5Qa}EC3AR(Zb*l(-au^-L!WNz7*@?^zyc`v1PDtN zX+BJo1+`H-t$+Dpfho1b_}WnRFwSQPae##BJ%vK}gjyJcOZbIEXy8wPUQD3N zKEMQFxP&@jhL@{u1drcLD~2n`f^`L+(Y$%3tXoq9a2DRlvW_X8Vpu2KPa2v;4ez1j4@Qsw=?gz!^9b;<5(C`gk zn9yiXiy*qoq&d9eOritYomlcEukjnNa;N>V=SU16XYF+MW!P>N!0u;a>F(Dk5i>_+ zCeaaBwsJOCSl*yzI1X4{5b5s1@bz#23P^!}$n$@20AEn=4kPAJNoHtCW@X-~Hc#}C z|HY?*#$lY<;X)g4rhWhiZ~*XlfK1r1cvf^yck8>JwHuRkrndA4pnwNRj7-PvPG9w& z=I*QO1`3bZU9MwSId#PFg{byt{rP8B@AZ(Sq;ih)9|v!29^zIZ@_$HmBBl?ZCAvNd zI@&P^Ly# zdH2^$3xz%y2%_HhP~U4JL4X9v*C*wLLHLAAFo#$$hY1!2xC7l5KLxF};(4%zWjNY- zuXqN{v|gwJEa-!})^=g%a#;`ZR(XJbhn4))Z-P$*%7z4-)B~=p#zugI{!WBM|2Ty= zI0Y)Vc%9cx((Z!n?szR<&usVZIltyQ7xMKec`+vvKG=g(&;v-ggn#%1NH|~E?Sq1s z-fs8@UTB0t@T8p&d!F})Q0M|UXg(WW&l-R9E+6m2K+bZ=8IoXf;+Z+MIaYlsD2V1z`tBC%im!Ndw}AcHH&J~wuCd)rn?M-1eAfy@Vw1ZaQ+ zpnE~vbj7fanh1w_zzTC1h;~Sak*K^9sRs`y3C5rOz*Nn4AUyV@{0VRES&w_TM}g9U z`+uN&r6+fS3W=xfoDRU;xnl^9Z z%&BuH&z?SirW8ofU_N^p8R}96j@1tu7%g6WfkJ9UjS4c}%Lo!E*REc_f(n4p3SGN|A?{4hh%Tj1@ZjYCU;;M8*o ziO^CXw*2Fdh$E6%qKPM>n4*d+ve=@FFTxn3j5E?$qm4J>n4^w6^4Oz~KLQz~kV6h> zjf8H&rJOe6Whhxn0bG($lK&J!#vXEDnWdIna@nPqUxFE?m}8PzrkQ7=nWma+ve~Aa zZ^9X;oO9Ayr=54=nJ1oloFQRi$yLY;Zgn|{5|mO(Y0o>)|1jF9qmM!wsic!qTB)U% zVw$O@n{wKzr=Nlvs;HxqTB@n1qME9ztFqdvtBj^olxRs-_=_&f0p3p3oX!w*9oalax} z$RxG@bcjO6)+!Y5b{~TrvdANoOj4k?vO*|E){3yQNAU)r(3B(1ol(&y9jz15fF-T8&?_xnQpLFG#v8^P|7rwtlpd{TbYeJnozZ$l=kv8j zVJkFtMu{c;&O1lD&GkHRQ@1wS3B@h;+h-%DP(FDlv~%5Ywc|71gC~@j;RP)|Pdjp- zy|+SaYt#riH|P!+WEV7j^r8pvH}hbJetGU< zLwz?rclj84Y{aJMjD|g;Po*`gE9_ znoWsqaD(F87W1bm5>a{Jp-vVR z${5D%6{U(`yrLP?_D96z5p!6a92Q}?$jSY2J%l{uAti~vFiwp*)H-0s6o?g>Nl;yJ zNg8-c2tn|OGEt#)U?NqSky8FKQ5XCpDq(rbRkAXdx&-Acr({c7`m&U%Y^BUtiOW}p z(uB#}<%Hfdt9#sILePrlJnk{C_yqHU|I0*XHo0j`WPTHz-0UVOk7>$VdUKbuOeYV8 ziB56CbDg{#XFN@*O>&l#o$_=gqHY;XbJ|m#=hSCFU%AWWe7?8RHZCf!Z<9$(FlIj zf!h4ZO=HOwiyEh=JVA;oAo7Ejxy&T-0stnS=2YT@R0#l3KmiP3)vIDPt6JTv0=jxt z1puG~;n)WspK8{=2z4;~_y#X-v5a7-3}bR7$x@qo*1NhUq)jM51R&tozxEXZffcM@ z1KZcb7M8Gz^=kuS@C~x26|a(=|Lj7(krbn@052@F$Xq*?5W7Z}Buy(KWxq07oSgO~ zLG(#TnGgWR{-Xi0HGpiX+JFXh6}MMufB|;9+uO=ExCvE*2|;MyG~&#HklZ2v(95^hH4c99H5}zs z_d!NhFnvMXuYN@$y!EPZww9#7k#`<9qwf32E57{wd3x2m@*e4ivvhDxg4FmBI3}6H~1k4EEohDSP+LnKtc@$@asSP+HB+6gCD0jMLKNJi)Z|U7W}Y< zFn+P9cfdOq(+Gt&v=NGDd}Hy?hy^d+!HZa=;}@Z@1@ru|?{LH-7S@QxFJcvSQI0)} zQXjiOr7m@8|AIa2NT<3RyY4se1QP7`)M@W$w)Lg+lI;B)FDiX%{GC0$`J-t_X?~!B z1eV9H%=h|3nO@IW^4_2~g{4P_?{trrpZEhcKmCoqu43vm>*KG#^*Kt+`^(?go!{g* z*lW2O0LVcoKtc+HLKcL88pz!eghDFxfF8iX4X^+d@Le1<0T{f20k#?h93ENa!#I4x zCs>0+JVUxoo-p)6zm3B)K!Pw}LnwrUHhjVgV!|i1!?~q{Hk?8+2*WAZ0%Vy3xQ*T^ zSOYbL0yex@?(yI5p`Y=!)Bf?F08SlCgqBO_pZYZ&0NS5V1)cm=;T5_c`c0t~g5mvT z5-Yd>|8IPkNdR4G(P3qn-HLTg6|jI5>;M|TK@cnf3k1LpD8UXiffUri6tF-Wz(Ed3 z0SClD6DYunQQ`>dSvN2PGkk+Epx!tX1B9G{Hh3F9P{T7ULpRU@GlT;(_(M7@!zmU6 zFNg!YmEu1z!$Ir=>mIRRm=DsO3WcKGUH#|;YI)#i>X)y z0N0ACSZ>{xHBzFA{evaqVvX5@tms)dB2qZYO7kE@QTz=#%2+sxhC1d$J-m=T03-V~ z<2{~58*TtH#$ib;BR&QdP6VS)++l>p)?cw0LMkLB{uM(e(4&Xi{e&e79b91woL}OlZ2m)Fa++$==4W;esEvQHz>r`A^Scoo215(1*B?*n!c=C;Vsv#6Pkea+rVn9%Id7rYOT&H z?g7R6p#*oT;i^{D)y>37wqL8Js{ajRXznVjrm3((XPZ?+Zmd9eIjJ0eYE-@kvlfQL z7^P;|qqSZ}w+2R4YJ;sP={`P(Rz~ZzW`sjwtGBxAMQJOzzU#d9Dq)CgQk27+ZR%EX z%%-X`4(@2|$F_&c_6^HcEN%Li#5&~}&E;yj2gX*c%g)DHijU0lnUyga z(AwC0W*JKU&zapN#|Ew60H>KPElLipmYt@WrCG|JWrD$_(>`qxsan@o?0ews%1)*G zSZo7XY?!2sfWQ%*)*bF&ed+w@RC`2?FMLpC5G+`Q$xsN$=Za8`mQ2-f{LDMDqOg>nX zqgkvPxdnSrF5`l(6-FHposx8wEWyoKiV7Khu?LZzZN|4uK}N|0i&oKQLF;9 z2Q}4 zzi|!Uup8U)8l&+Z$8Zx@u@iT(4HxkZk8usNu^Iod6Z3H#TQMISu?)}g9J{d%+wcx^ zjwZVeV$=<+dh$KY>fwAWb;Rl*+wmz|(0bes#sUs2f3o6qvi-nnR&;VJ!*VNQ4iX>n z$%1VJXO7}zMPj5wI9S6qghM&#gCbZ!clm9)J}JcBKsbo<4#R3YU~@KW^EPvHH+%Cp zgY!45Fh0lwJK#e*umd|_vpS_m09b`U58Oap%k^B-bzR%_UE_6L+rVD)bzkpwUdQ!b_dpN00AahpVGDr^@PH8T zKw~?0VL)TtH6k>zzT$Th<~^WXn+QQfCON;g*(8EFTevJKmy!& z0x0-_2Y8SB_>Tj5kPG>c6M2yv`H>@ek}LU=137{3_W(e7lqWcp69AP{xq@T4f(yWw zFZh;wxtAlrgCoG0kNE1T=1*ia}TY9Bq`lV}nrcXMj^Q~E5 zK;J4vS|{tjl_=C&UB%1F$EA z1N?)9Cxitg1PJ`YhLgaPx;J-GM6|zv2u%BkqqqwE!-r=CvJZQ=KY*~u`l}P{xD&^H zo4c#adb-C10t9TJ8@xgkyg~##$-o1AoeMm`V>pa!xQ1)MKS272hkDGj1l+ye_q|DAz0wzZ;Rk-fzj()Qc*ke^w2Jz_js#a` z<&*L&2#b7L2Lu2i`2+wU-#}H$!`BQ>ve2c664dW?^=|E1`;6Pztv69!axcR z;tE_)Ft2OafrTWPPXrWb;DHDxsNjMOHt67k5JtG*KZ-5Z*g=sEc91}d5$EBDAciR7 zh$JfYfIxYrDBC~$4RoT1{I&Sci4UY0*o!0%mD_F?5Oe`_9wqnTa9Tx$0|rMXi6oK) zSyw|1(_yCqcK={Ug9=x!@Pk-CX!p;SV5+bsLEl9OB6|a&SC&BVsX35aaM`!j0}bGW zqEB@Sl;=Nt_BoKBdj2VBpoH={sG)@dis+(>HhQR|i6&-10gz=_;-#2os_CYjDrG4F z0}w!vs00Wgs!S*epz5k8p+uUi0@eRUn?RHe1OTlD{qw0nrN%mt12Td{A5lFHBxI)^ z4F}{?$9W(^RqBC=o||k|JMDWKpvk6hJ#xFPQWAg=uDAs0_v=5n1)JJQqz-f{WCCTl zp{=(9VDCTn)_ZTh`0nekz5w?dFuw%}3vCa+vF$}Xq;GRrWxY;(;x)2#E%Jj?8J%s}6~^Up%} z47A8dbDVTi8kZpu8XBYVkJD5SrAvd4K=phCoLAZA2b_=P?lBUi@SD;(vo^II@rz_4nihH9qwi zWnhju)^2xxvD#dGq_omvkU_RbWc-u*>Z-TS`s=R84*Tq~*G~KGw?y6&qMFSBx zMloScL~i`?$S1G-@`U-r&p`e}Pf+yI|Kra`&lg0`_W#^t{qywvlf6LThd&VaGTp<^ z`sto&d#1K%_WNAp6jV0vD){eK_zR4g??p z1?WHKS#WuE2mtT~5Sif-#a;y{0KN+G4|Dt@9q&M)3RB3!6}qs6Fnpm5V@Sgp+OUQ= zyrB+r$ip4_u!lhWp%DLh7@`#tq#a01q7s+L#3Ysog-2`$6i@h$6Dn~a>ByoMx0uBx zYOx?yOkp~xIL0gr1d3HeVHyh}#WDWl9dLZ(JK7P)fmHF01i2#~{~^UV(vgqt;G-Y| zNf0h_(TRD4qap=aNJe_ZjVJUTQuN5iB}P#oPGlls49Uq(dh(N?45cVXxy7@XBb4vB z2P6(MfCF&wUPu9<2myczKGx$NxXh(4cgf3M`tp~+45l!LNz7sz^O(p?rZR;oka{@t znaPgUo5cHr3O{hW_%Fu>7^q~h;q(mo5(Td)29v;c1 zAp)QP0=O~&uq=u!@m0%q+;W*HO{q#(%F>p)bfpA=ra)&pqJoB~pZ%n%PAv%0p8E8s zKy@fR4tSRAfv=7P$t5EO(9w^E^n(BhA-*tKkDXfes#wjcR=3L4u6h-6^WeufQt^*f z5M~vtNCh?MK}mGpgC30F=mDI1t5`;LmQ?+!UiZq^zWVjAfDNox-rDhV;_O-B$ zt!!tjRdWAU)3&Ldhh)R)k(?GJr#Rj1K;}_cUFffQ)IbD3-XU3pQdR-~plebzdqikP zlYFNo?Q&Twkm%*39hVry01K$j=aII6=j8`Rvv*pf62-dkjjw#?OW*q1_rCbeuYUJi zU)uWjzW^ptKKMaTd*s8K?@+Bk2Ks~IIwFQ?9YKX@WAGca6R{7Tf&}V6>LS{ z`4nuve{63a^kBv&mW$i-#dR@^0cl-D8r6Y(!j{(k$1?`P4`wLV76Ji=F!-SjYy9IF z;yXnEZeR^;7#SGj2**FValLQYLW(>72b8TGj_6T?7E;y*HvU14e}uyvVy1=(W6Iw) zyZQgkaE`N_=^NlW+xgB&83!+VF%D~3V;sxqML70x+I?uF7{~a=IDWy8XV}6T`55gy ziXmFx?gJaNpvF6du?%}qnvT;rus{fl2wa4C9LG2YH|SxGE2l#j!VpF{R)GsltYVDs zNU?I;>SB&2vl<>9fV*DCD_3~LLk~Yh>Q`K2!XmQz=D7Hfe}H-ayV@Z z&3sfC z_mK`Mv)SRG554FgF7eWvezsvPMm5Z_XGi}c9r?I=ShW$0e_*;1+OS06ZxqVzlPr^9S;G zNoeUZ%Ohwg7#g=DmM(-}#3)mBmU{~qqq_=gCxZEm@U-DCGyjttKY~LwsW&~x*o`3Q zBm!2;%D6&iaN03GiECm2yT#h_fxVsnqX29djo=_`hzMjO z!(=ctBSh-kgRl{SYviONr`Y{xTBgOO6a)(`8%wPd)4(#UEX%#s-GkD_^wr;9_c(c! zJ0(QL?u5Xy2@hXGz*dORANU)=^{^2ui{S?6?NJu3IOZQ>b_Y&+Ke=r?Z49m$nfKoI zSy6O;$j);AD~qo(%i$=?x308x5_J17TdZ+H++dJ`rR!H^AIc~bGdYG54T@w1a3E-Q z%B5v=LBXs5Qv`&Dl`iQIESnWbLx9M`S(&CG7*@dH5ljqlmmeb`g8{Hq1~W%Tb5fo` z%iNhjkSE&yJ&foIn&VKu#BvZL!jWWpE-ZI8>JzJ4&BO1P1^Z!u+2^l0hY8<_8#hRS-DH zpCJqbCiqjUI*i{&K^|n#CV|n945}crgd!j&PBG1Nk4B1_X~&p0nxUo2hTpKM!_fg6 zHd%wYFFx94O?*r9pEQiWWn`ysv`c^ulWp#NXQO9u?J8$yJPC@nb*4~sz5ROWP=Mq( zd2No#y9#XBP(WDgp)EZ4hD&bpRDIS!%Zt;NqI0Q$-ae)fL}Z*LBq2JRu{?WT%5^a} zp`g!jpKRDZ3L&sEf=}(|4cIyIj4o~!P%sdUa;N>LM$<|!*C(_7J$)&e_Y$B2+ofWY zWabrC_iO5a0bvJ@V?Gaf1PRf z`g!Q9qzAij{UCdkcQoX9ouBtq=iaIJ^)ml|OTUB#f_3A2XVpm0YOEFL$ zGRKWKZ+_E0`=;acO&4!N|9OfDv&l;Tg8ZE*q z-At{Pxoa92E9%`$on{*!o;CXOH62ejs!KLKIcp3uZ3=E{3ZH9=JZp;PYmU`u#xXSk z!R1fwo0Hm_ljoXK&zcE*Eg2duej0XOe6_;Lz5suQa3$x)EDZ3@4g1y`9GnhkqL($0 zt#mPEC45;=KG~lzIMjvNHyW6WCN({kF0B90Dv__{t-Vv|T+>BwTkFqPaQU{fu;xJf zCiO~=hWjO!GxqKpA821y=>4n^C?VXJhJo?=^BNUglq9?PEGKUt?uwv}p=0|Ed-hC; zjvr-_@T+P4(w85IIS8UGe!gMPJZ!IgWe0iQiLJ$PyIXwK=jOWYU8G#Lecx!jjf30Z z>Eod;dQjJ-eRqLN%QuahsJw(9k}%j+)_p+EvUGXJK-QRPH{H|rUNO5FwB4+7XJ>=< zx{~&{$3^gTSpOEAGIdlo`RRAO{e`Z@9$H&*r|THassTmK98|KD>2Tvo?3^F2)1-bj z?K9WxT@T_cYarc{(LM*H0yBFJsvPfbb!kBRoLZh<`1hyf^>Lo}zliPr&*x3Fyu-nA zcbGq@f(ZLV1b32Q!vHWAo)Im>>PG}?JcpQ2F0(u$3_fdyVf{hbn0|X9C?4R}PJq`|5;_$SpP=mD8w-8UeImGQPx=bc2-G=L#cpXp$fY4{GLmIzDehbCem$#Fg34q2$S zkBeyLM1O|eQKm##xW*M+q4pOt;!0Elecby|VfL<)#-$28oEN+Oe1Pmn9i77Ffq2U`Ip~>o3 z44MVd(;kBwDnLGD>aaCaZ810p172VSQwUGOqM3dC8K%3KGLqd`lBfGdnU9{+6PzB; zc7d^@o=`lT zQ#`p)+%~)IB=eWSzW8$x0wz5TPVNHJ=0MIz!9lDnE=eU980cL9Lre-oVpqVUQSeFe zP%(g^5d+DjJYVobd^{3&WJ<2Q=z@4$VZsw2kH|xmof4lerp-}sCjnBi3>zt)944eH zFD!}HnP+R%=km#EXt~=GA9!ce^@M=j;O@2rx&T&2vuOHk{|C1sps#`Sl&&X`!6%_` zuxB@u)d%n}0`dTES3#UzAv1XXg%SX{VY)*m@`F!bgww8k^}~QY;m~YMm>(H>y#O*x z1TT?61PpWGH>RIbm*L-7!VoYj+C2dWKO%yIwIJcqBjIGtWGAMG1yFMpC}lMBf!1in zD7Zv-I-3kV7zXz_F%!DL6Yz07aVVe*>Rkb9j2`8wn4@PKIRUKVonS%BFzhH3mV#jJ zB+rTjGrq{rKAbC|0Kl`Opf99+0wydO;1NUwCwOSJV<6wqO!p8h=UUe<01Wa|9&)d{%{vaRKqw2R_~h07vMq5fG56V(`K!h(J{!VIV;m)6a8b zC!@^%#Bg;LNGJvz?hnP1C#Ia%#cnWt90p6&faI^tUQdT@Qdob%uWb&KnXmwGPIQ1z z@qUG_cla`RN_W+!iz(>e0NKoLPgn{9;(7~`0tZu#Ku&248J;YJbEafCxDUZ> zB0JF&dEA>`$@5~Og&Gl4V5^9uk7TBsevi{s3RgzKiB5X;7;t;bP$yLZ<^QOi=g8e$ zdzzKe_K0QJ-_4^RI#tYkFWGI=AL^gRzK?S=H)d{$U|bqK{p7^#GtE>It!Hcvz4_!( z5%E*4(})P~!7c`RFv{|Yz%ruCJmn9qJYx7v@nkA;a+@VXla81qxEPI9CI-k1(@rqQ zhnW?+Oh?P%jiX1?(MJ{0`h5ggAN8-xJQJW+?p{X}J+pueHHFdf8M)wKQvJOoANfg- zV@>rJ4=Lqi(2X@t)iCc~_|wl@Hr}-;`VQAcnDFe}d8a%{GbT ztr!`MR9_y{4$|>#4}!aXJ;QZcMQA;-9bf*Sv&(Wud`R7R_%M+)_fs>5KK)bb`MZkk zy{ZF04{2Q*uqaU%2-8QPi1V?g*IIXaeoB8h4jm~D{&7+va2&cns9vEV~)3xkIAJ?xv)6QXa+~;DB?z%5^FCK*s^sPTSCsser zIAr+9LisqP0RPigSGyBEn+gvz`;=NM_lK{t|DDVmOubynx%Xgg2H&G0uA*u)l*Vqa zqJ`Gq^#cjeTHc$Qw*A?kMF1q$f?~iEk!fkjM%}!*d0ps3$|r5PJ|(LgsvGrI7CQ9G zlW%oJ8{RbmBK$E7Oj?0LGmdy=Yg^A(R2H7*vDK}+!5a;C?nTk7*f`Ire?_504t?~{ zms>pfLh4t7nRfm89u_lMdBL=E>gTA>p-3?yCt2#dY z{;J6_Y`0JKUc}#qU`3c%P;Ixakm#WxkcGB4J&OHeAOp{IGiN11DDv2uIt@SVl0Z|d z&*XRP{JkJ}R;b18nT4U6d)6I~7WeFXacUm9p5-kb`F{Oso&~|1EuKYDAa$>jcyZqE zqMvyrwgZNpTfHCmTsK<2mHx|wG85$%GXQ^d8ZeOM5FXIS;n&L&wo^N#J-1UgWJty0 z$Bs5Gw|p;ed)T(yui^LM?`E4{Ck3SG-wl>%_b0)OGz0p$Jlg{X1miUy4PAz9WN7zn zm-7`9d5nIzGF^aY4liij1tSjACH_oUWqSsFwTvnV`eq+r@MLP~y3ux7!RCkHr6{m= z$V$9KN61>5k@nM#Y|oCT-;3h4L$@m`IzoTG8_*8ho*Oe{-UXaX7G2Vk2)T_Le=6~3 z;6iOfD|E5qd+{-IUT5(sr9~&|tfB0?z|v{8h>_5DX1v|3#|a{6uSKIhF5wB`=R-Cd z`A#Td(KP5oLIgd{iq<9eQiF!k1S5TyOIgjmbqRDVUW}KRA8@0p0t{@~e2ies;~k>E zr0$r}xpMa*4Hb?)CaSHBvsZvx86Ao7u_w-4zsgX|&&N`OdtC+ocoi##mKof{E%Scn zQfG1@rt+Ij@NYL88LCioR9`ni=d~_g(EekrZ>dnkpn>MtSUiEwUD80!gwAANB1^Q0 z?u}u$o)264qgw=t>uRQUQ{&GI6~x>oLx%V-?F-s!y7AAIiA)csn>4e{7;Qm}Bnvjv zA}`s7v(R?wd?7#oM(OoX;gK5hO!dg7)Z&`3J%+oPmdViE1WrjM9tZl97Xl`YKeoY z9b+Ayx;>n?x_c$eYm@bTMLBaML1)E}lKjp~d6P%`b#i)=4PV4^ernd2gpd7aR)1ZDy z%l-VSTb0NKZZmV?UQT)`eL?6xR9v*=3c<#ZHAf)1^)-}^6jp7PP6kRlRTbholspP3} zLUGma#a&?+Ew`QS(ZR`MU55e9KF5Zvy=N&A39ihlL_F+=ZVGp^ir`3d4C0~|FMi9J zl||n7%0)WMbyvlKK@?vZ zg&ZfurPn!<6BGG<6ep^?$|v7tNS(32ea!8CPyJkm`hc#QA}eXwe^{qk+`Emn4ODGMaX|TJOhfYsG^4ukt>v(IQ?O& zD3qPVdjR;Mv?!nIPr>r`c@1b+vavk+goRJD7AY$YOnVMfvr))^CNYMY^4OSu`L}jI zGTJU#RDPYg`Es1f`3hTfXQ_};cbs9RQ2fJ6(5xW%#Q#+RLECjawu?^5*yJ)V*N2KY z?d==>M*;kcN}KAtgGN_k9`j_8soSmqmdNNYyyx@$`sccK7%$2EsjkgAq4?0rPLt7& ztxF|dw}0ym&CD0+T531Ye0*6c`iWmkDmUTj_`O0pLG>GTMp@orbM`fY?@Shc2TO?A zK6RUVlYcBBx!9Uyv1QTDwMd?2zs_%l?O!|kF#F5P3rq?Q`FLk>-!t7}l`HCF#^1V> zn9d^$>OtUm_TpiMQN)kiouN}ri+|q5YkgMGVd;yil`nu*$f44xfFniZOD-^yjMoWY zI~mhT{;$fJhNh~L3WXG`GD{m!wJ=z(WP`AzB# zH?(sGDeGa`@lod+Fz%?_&Ld?#v8s^VGZnqUpU;Xq0qk8pKsa_(ljXY3Khw%;t2Ya0 zC7MEQG?`rt^{;x*GI)gK>3dr*+e>CLeK7ZtWMuDV3m5%tFL5&1$v4~8X)k%>v`ZsV z_flpzPkkxStsQy`)d^%^e~elLc00Z7hO_I5)uFyTZvXSM8+_hv!P_GqsKgr3qJ2&-;bJR|YJ0nKnBCfrmkYprXYs@m(cqfB8 z(0qYV$ZFPI#z-hw3KdHyDO^t}bWM?%N$IJC-C#@5XG>7#c{K@Od$g7=zy=AWO}$h0 zY_S-&P@I9BPmSSC_-uUXlsom5o8{&lo$j?u1)*^^({ZgM)GxwM)7n= z9F^_!JjQ!&(fdf^FvNJPEg)6~=K{IvI2xDth@_R6Lb>N(_s|#@j08Co>0cq9Y1BzL zcHsh$cz-0l2RF{b3mmnKzXw+}3;}s8V=*~#sA9Zlan(J@|7iT5m*Q-=Q=RyWx$*{{ z99LT9fbAgkQOKcSB;J!s)Dq*YkRUrUnt(t-*WZgAwg>ohz6B5-NG3SlM_|a3&dbmB z3Gw;~c*9Y8vo0KHLM|BEEo4S#zl9Hs#wl`BS;YhtBp&n=*lSXfo{6>6z51eu&Jh{s z!cEtEiqjee*^grFw&>@2S_u5YQC&FoEsz}q>rTX5HRHOWVo{Pfs;WTWi>{y!k0Bs2 z#q?1jAjM`}1UJsbDNcpkSWyy3sqU%t@4~5u#61x;p-DUQ7xfr@$Z;;Bod6^nJ;U3+>8Um;y06g=4Jjw>|M@L`J zE~hZm(#GCHsKUEeVta8o3rPHg!cgxak}iokYaQreOqbR}hxs3n_crQy*b^D2oiMC7 z3Vh7X@cz5(wV`JRCXsl`iULQ&C!%Y`?;`j_<0w8}uicHC%Vxn3b*o(o@%Osuo;raZ9^-}Ho5F{CBM|WzC*_1Kyh}5k z&oSPV2y#Z!KLDg^&d2lMho-~h{inwxSV3l6RFWCz*%gODf-=|fj_sKs=H`3GU}q;# zY`FQlB+3VwMMBH!^8YZZU+e4ok9IFi&=;5%ZogeVXUyaJktg@j`+CZ|B%o?=?=>pJ6rkp21{X zR?@qyb15U%gyqvTK}JnTD&`emcgFLdHV?D(^!Ur70G}vU>@42Jm07c|U(HrE%)aTH zt^PXuc4M~Y&+I$;IU>hgt=L?h^4xoax%%644eoP|LH5K4>}TlCw1S>jVzw1p2{+jj zc30*){>*jK&v$XmcZ<#UD9@7&=6i3?_qosa2h9)Q=LfUqhhEKpY?%MlH$VJ!{XMIcOUzh%EEM5FrqR=lNalHOB zGSCSM3^>k7^QvxIAL`YwSL4c7xJr?!lY~h%$P~>AE2lGC>avEg z6VqP8fK8FiYSt5^M$Dy`71&bPrjt?LhqIs71o|sbmOIQxqR_D<_!rh9<2!H3C1Nvh zk!ve8(kY2o;914-!NuUv*tEif_`kN7+Zg60KIczrGCmMfe5aeN8>|A!7i0vK_U2w zmG}@i{Y@{B3xUoOw65#;67&^oQ*5AntDRiEJoeA)h-o{NoZxo>?zr&K6 zj&rfMSUoxfa5_0a&8?r`5V-q;I0eXN-jUiRDW=+kbz^&LO+8=;RKXj2`*lK#z zApN80@8cKo=Ec}Zj87DTE&TVhzcXNeU7x6qa+vxR%1t;ZA|d`x7dQg$6_JokeQ~iE zFizliD8y5I73|9`wVU}5fZ)&{KuxC8D>l;HI2QdT_U*&zIPn|co}?Y zFMd3ZT2lkx+lr@tlx)fPL`639r$vDTdMk3A=)$k3qu_^ddK*cw_b7b?w|fM4a)c!K z_Hn$g%|n+2aOkqh*7IarL%Y@nC;I;TK1vW($Aq&LDE!A7){7;IJ3f%`D>=e{s2O|} zOeVsG1f?_=5G5Q{k7ih3O0-ae)Lr%GDHJ~@;l?kS4e0M+iS&n6uR=$`6R3ih{a`Gz zU_$=RUxbfB-i$}D^VmXX+vY<-nSDVPHnC1{6GZqm=%wfh{IXF&gK4>eQKm7><$Zyu zPUxKZ-$RRgZKEv3VR1!FX8Q(QkJH&+R$dg-%6xqqA}Ew3h^%-8Gr42P#RgR?2q;*a zN{^QWiKTXErA<8~i0{Yxul;9!V0drC9nAJL8kU}Zr2758riDPvz>zPPy_xn)4;_g5 zO5n|yG;45H3_RE_?I3h8)gPqC%JXfKEl5O|Sl8Usv`)Q)vTRS7=29>IB0c!-;{$ zVGW*VjlpM4@n=nPxy^#a=BBf@fwT5+XCJ%B{@&SHiN= zw(~nwW%2y2&CzVrzqzJ=!!;R{n?gc#cm6G7VCdU%+puH$Uq$c$j9m8!{w4KRf@!mNW#7DD>9kC7F+MXu?=3x zENzT2-ooi}8_PENYiuv3&)(uq9Y`9${ag~n}v$?-CiY=s9u z4!tLWw=2t{Rb=ey&0~;4ZAV`OJA)5Ev(ny2GPCtQ-|8OxJd&Mne)N5V@2|KZ3XgCf zuTQj+uqXo0eZ6l>BrH2{kZK@JwZ7bJz_~PC;y+;8i?%%Zm6G#W?Gu4iDgMl zjl~I^CpQotM;L&)gDA28fSHBGVyAwWNC`}sbpEYiMrIQEW1#t@?4)*sfvQoQ>n_5B=xJWU+H}u z(Pj=}ShzQVx^)-jmbbm))-W3?U6a1>ctq#1em6QL?_}tskb1RVnoY~qHktRI)z4(= z$4oS28@}3w$u`dTw8=ItnA;1X-*`Ya-?)6t%XEN$Cc)$^y~Zj;qRUE>IINS=78)|I z+T=R_ou0{c(J*Nux>qB&f1rt}Cl_LoOcvp^e1tmB z=%srWJ~k-+EVJ$-g|GH}`zA=OdeRd0K66sT$h9KS zbQhVDIRTfuaX9AkIXzb_R`(#jU*vp6UTa(QbG<2s&AtBSbr|!X3ADinmDvCbX4NOR zbT*V`+&?V@&OJW+*R&W0c2pe;94T#Fx!JbR6dwn>I9@XVveYjp@O`e|2$$~2Sco%a zIsQ&~+;O~_{!FX!dnwlZ$yRx=fYSKW_`;KwSMfD|KT^3OSerrH)y_E(Wz9^j3+^b* z{UPa2&4bSpBe27fgSGShi8U82Q#vsQA{>%a4AEMNhjISd$dA%KoDdQGck-)^qHXho zRHS|WXD%x0j6xx%=}`WCm+Ra+1nW}R2u}~+EL|{GcF|k=MMKL3^g{0tmeQr2H}`pN zj&~=!`xCJO=Wqy`yN5Yx6gvzrVX(C6feE8i+aWCEoIN=4z7cm*?I4 z&*1ze&rqeIWO;guvx5kK)3o8WYuMC)NtY{>k_`X5gQglxjw5k*Sd9tJutyUw&Qir8{5UMJ%0V^Zuw1^9|maiQ5co;C;fJpbav3kK!SGfs^FQipi;@nuqSnO ze5zes<^Ai=K7}tCuCey;#|mlhQFmA8G$qt0UVjOydtdN7TtahAYUJto`@*Ak3GIW| zBN6-Wi>3|-G`~18`Rs_uflJ^${4WukyYja~@QB_OCATrxJD2}S z8l$g{r)SiciEBxjSXGT@)z!bc79nNkdUfIzS%iTefz?@b9%bNs?7;9~Q19KuX#8Yp zV~xc`BLZ*7LN;c4Ag)t!#T-@HZPG56-%R%@G}f{Y zQ9ZamLc~)l?JD&XmHf!MRK4+i;XfHKw6tA=?(=u*f9_krJZ7SZz?wWU8BZhWxta0C z#>PLs-eO^+lNW5cTK9iB@!XuAyVTU&uXXLwN!HwiIVZY`e!V9;-}Ys{O3T!TYfs+4 zxtk#K?M)Q^8m8<%YiU;l+|@P5wAY1DyFJ-%bTTlp+_rEs-qdl_;1g_VI`jQhg;?`7 z+yA5l7G*XHzmT+zxx8Zrr0%e@L?Unt8B3d|dpVqDn^A0aH5lDh?uZbOc!yB31rEti z!FTCP?gTIzo&zr}IO$6w_L41>gxRN!jU+Gjm}Cu_2edEb2@)A|PeQVrI0dBR6<)Av z6Qj8(3G|{q>2wn4k}HbQ`YbLb@lotpwu>zkzxEiDRCo!K>nuwC@XjLqeaq*Ejk~zu zwxvbK<0cbrFXTmf0-O-Thn0lLUIZjZg~u?=a`!^(Fq+~rG?yvOJ(r3J2@iXV8K$S# z@)h51-w;v#(xF&q6Js)^A>zh}nnp8p?7=vby+I4)7@km87Hv@>h>zqTm&;zN^tlLw zU}QgY75tw0<+kbm{s-0~pB&UQvcDMr&ULD2BbXALc`;7$$PNI5R+9*%$cv(fssbeP zK-L6{XuHR)YKM3;!Bm?eL4|VQ@FYPB2DIpTX|4B6VHDW)6TgOnx%Yn7l!J? zF)5ISHNGXtfNJ#~OTx(7%192#o7G`A<#GGkMeE-?`EUK==x*nZTPJ9dGtx@S??k;q zap=$)e;#LN-wfq1A9!4IP>@ZxzVt^HFsT0nqDSXIVizBIR&)3&imuL$9FIAa-p4$1 zKumO3cjngodHXoxp3MzfK;c6ct((YdowuQ=*lUx|L~u%P^QGq3uKjJ9`0)Elr^ezz z&EF3PSFWuB#kdw0H}*m?4W`U_hs_ix*(^K`0H`{@0%tN{@j%;VGdr z(oDt;t_6FN5~fRQa+H&a&Woc?or{Bal*G_1v2%##B-Ja&vp6GE_!Xb6i8EW1rL(h4 z0BXbO42$W^;q=zU^p0?lM=|Ij9Q>ph90`ZS6+=?t49|-h3gL|9#f&w@AQgQ_`e<(s z+g}{ZzplXVZwu%_?|l0OhaD9Y#O6+hmM6!Y^h6y|`u0=Z)|Mv}_+^!n%Na$E427(h z;3E!qJ6o1KWLGXf6yj1?Ah6LjpF0%1E*KIk@xRSw?B&2!BgE&CJrcvqCQSF6zK?^` zKrduca};RzXHKJRsNh@(4tfb^ae>!d=MxYXo|@wO;>6)NHOi(x$v$P{g(dA3syJa) z0 zaHUtH*kqhwSk+t*x6Ncz##mm$IHPu1f%b;7`ZMJoXzX>$ux9@Ytun@FwaYrw!q+ZJ zzihjl?tSA{UzO|O(jfpPj$`GB=&R5BG|G~6ynu@9XmxgMUgZ!n;a&+lR?5*q9WbV< z2~^A>DcE4=vJ5)d=_X&HQRM&Onn(m%UDOD?RKonF;Hc& z>|%?}ED&w0Yq9H$m8$90K#)|ut|O<>g?AlvepslQkrdg{NH3D&I!V6~81oN}EJI6u zAt_>jRXB8^EH_mppadwpE57iJrt5^Em|J@;P;?n3{uyzOmO4l4cqIz(iVTyn%48bB zbD;Pnjp%eN|8$Skw2>q(mY>`sw>6`4PMMLPL`fdT@}FZ7tU0~S>oy3qq$c)$97$|C zR`wh%7l^)}x2l1hE#6MkY9~nzZ_4pw)u_IOX!~8GRDJDHgXNa||MN2-FeHuX9#y3YIXYgI^Vq=t9%OHY@{1lR zh}f3}u_#`?W%{lO=EZAycR2)vSa|iN53$M=cqErhg8onVh=pi%s-Pci1{unKX0IE#ujkA+f zqm5CTK)LEzgc(VWs*E_N^eC>|$UF3?9_pdWa;x@Y5p;Gk>oyt=o}R5+ipM}X8Einm zp6sx=oDIqM8cD8qE38IRmfYhzOADjtRX&s`n983x!J4vEp3)S^)h*~XV>|dc^qxw@^X|bWDjCs<%g~?6qt?R+j&Z zR5(>`;@y&h#x$3yv6^Tf_DE@xs!|uUCu7UMVAXIySsblgv|i*stqxTjfgt5+lKdD+ zQq`5^akR2Kq=MutX5+DHN|)u9Jw30XQRh9#_3t{PwC^v_jjh{q`rmcD&;>O=YZ=y+ z66RTD$q&>BM9a66ERO`+ zJY@4@_`_#NtST?tPrXrFz%#P>$CD+CkEM#ThW%e(JlBOeLg)^+EUJ7r5_x+S(>E*% z-Q+1d7G=HQg_6%#XPbxB4*@{*u?z@hylT0#2(m2>-9$a_CJiK{C zSyQ?(66y1H>xlc?kI8TSKUZg*SvU-W*Xuvf;^@OVK=U}|nfj$)1&i4bar)NIG?a&yu-CB3EjxlG3(hesM-sQUwd z?gHg*FsRbgH<7<=a3(ntZ_$zqIYqC0d4q!BSgQ1Yp8Q708aC5io7coKO5hmUD2PjQ z-hY4GVq-E8_9EVMw7zl;j@bX~|BDnnUXAi~X?4MJor&r>2y<2Z)HxRA=F`8+$gFkM zaHgG$wUb4L=Dd4LA-SMSRt z?{){}p0}c=m#fxAyx}iUU9yiv-4(xx@TqRh`vyjA-2`fhBC$Z}(^ z_+MFX-wo?=m*EF>$}e36clRIslfSAi&%QgSLtJ8)(6@}iDiN?sPNgVkH1YzglZk~&x2e4D_XQ}{<3>_{VAFwC%^~%!x)u5;s<7t1S)4{{V!NLJA04{t{Gi+r{E@Db zL()XP*9uQQN6QS88-$m^++9;9#k(j$3`Bb2Du@E8TStp2`tv`1_QEq~ZO z{SVETuqn_*Y zy!^VY%(R|o98i%RD~p^}@^7$Q$EI`QWp{wGlRHW{Z0Wz)(zolrjCm@fKjc{dN;%Og zI_P<-^O*m<8gP23NDQ`YW|fse=O8V6XOmQ{JhsOjmpNWBCcRO^^s7zW-886g4 z8o$2wLcB-8fmYC=C(A@!+)1zffw&x?;dNZkw3s(PJ8kCG2A|(R#gO}O2I%BUdc-t~6!naHcjB_KF_HC^p9?n)*^g#Y zJlihR(I+7s@F;4<0*MR{s8L}jY1U&A)rp~+^BRL?Mw=vgO`wjio3$V|!va0rJ$zHT z0rMNHcpq!-Lee$^8Ws{tbV$f^S`%7!)(>cTrMFL>kmSlpB6C<}-D<5el4`;exnz=L z*g6t|Mkbt^@T0Xish4-!-Cw7H_P_F!JR=k~w zrl~0W?vOxuN>~e6ahCaUQJyo3onxKDu+tm6yV<^bRI`0_))X zq2b*U`BG;_X^y#h?d@9vP4U{hV4mi+*SA1;)bh3UqP7CA=AZY3?9@^;GZ}vI;Z8WO zC_BAujeIF~iUg$(e+e(Tg*04ZD!UTey{51s2#ft5fAqqS?mdh32DFJ3Rr9kq#%BOikH8qokCG@ zp<~#0HBJ}$oA^RvUvwZ{@OFkw&LcOo^s^(5;pWTYH^L~^i)BL@UY4as>EgFrGrg@U zEJ_Ts)U$kUzqwQE@wGLJa{o^G!MPX>YyZ90V#;hHe|8N9Ko5dKApk(M6@VT=+kBX| zV4GZ#G*!y=kgxf{E?qo{{pzGd?8*7RQihYF&a43!nxm#ML7k`~o{OIzqXIfH>31Hw z4W|Fe!M1 z@;UOK|BIF^Y1{97O}lr=;oFfllmD(Ysm-r>!~>JU=aFHnl)bhuBO)jMM;{n5T{H|b zqg_BYGfX!OWEPw4fZ^YKhW)TXJ z#XY2&FmU$H)zCM_;Lag)!dM2L$a(1_PL*IRifX9;59h z`xU&J2h2EiMI_zj_&7dWZer+rMO1kHz;nzds*cb2xs>>GSFi4VezOZ(@l2cH6*1AM zq};e7n-K5sIj)N*cwWM}Z5)pxU9WQw)Wqh^B`gACbN9GFx3$+8)ib13zU%P@8^SWpm)f$`in8gPxdy=mq ze1sW13@Km5CHwnNDp-A;Zk3uL4<*akw20T&b37MgaM_-dtRQxKo7usp&T4P{QEj7o zdZHgrs=UD^lI=6E$8b#Vm_Ba1&+M*d!)9)P`P1^eC}N3NW*{-u5;p`NTypf9Y1yus``xzpCG3qy zk*u^vJwjoCf4TB2d6uQ=pOJu{E$toAr*@aK9U_ix4H=^;-DS-7lg4@}vd;;tMLBPl zOH-n9kn~BS*S24#iN;DYi(sQx-B~d>sr5_7oEmHFW~Y^F8Cr!WbQzeV?)7ZX*=4az zJw}QeNHQH|@;x`IV+DW3*X8*xPi4jRGeNtK689bdLT7PBU*CWU&bu!i`+1AxlX81g zu!Z6;+_g&#eC+_-ieu-)oLv9$Dte8*+T-x!pKaFH(B6RA6R}+NmCF(rY)MhLHExqj z>5IDDdTgl#oY*kq(%_@?pSO(tagYC7L1xOrVk+&I)J>FRXqdgs(s)C+fP#mtJdeX! zE_n?02>ie#BS(dqZhPT)io3v$N-NNuX_A1_G%Gg9O|UT!tZXiy>Ya?`nG7*RChbA( zop#v0C+=xbm!Ti@uJV+hT=z5VVRA03@aift)UIJql}?uzoL)8{-W+FgZeQa$DW(|8 zcyKZ~{v!!&IvE-i%BR@nlydbE2ej=-|M?Kpux?>s#p(BHFN4tBjmL4axbzP{3u1Y< z4yc{G^o(E}6*nZ(tK^^>i*kE$eM+0uJ^JC6l2O4gw$95S&(t1U={U2osd&UqQa{he zm3;&Rb-0%nx=bg*FQ4GXU&e;117&8u21jX%u+Dmk2v+Yw#f<1LKM#zPtUej8bci(y z-*>%HEIOoNf4R`IL0q!sMAXpEbu_=rN`XOa3q5E%a?W}v0eros{&$QAQ}bSg7_(*c zi$}m&>e(yVplwrUbq5=<70Kpk;8KmM{L}>8Yo_xBc&OI0U!4rV^htXuDjIer#yS`kZb<<3V5QJ^gj- z^pHcfNBA$n(fi%4tzT>If4J}CaLKBh>sqtHcsdK3WDZmrtUmx zYWefaFNSX(D0Ji}lPvBElOXl}3(VJ7`(Y`6HV@DefBlu?s$XsX-JeI+%?p2i2Y2&1 zRv{kijnr?00_@)Q3;#xkIoB9VN`LwOg{u{0cll;r{@wD-TkZe;>_*YZP;Bo0vh<>7EnzoO&E`vE(4JeLnhT1R_nG2t9w6vS=@`Xc6WtK)`?qP`4g;(tY^ zPPCWlg-W`AdDV(!Nc({$kGPGHmFlpR`FJJslphi0b{nq^D?T154dwl|w-ty|smw}I zG|~*qJWF`;C9vGhIP#^qNz##MFw1@kTY*<4IR$#bZG^E&SidY{BSq*-a4X=y8^Qgj zyZHKbH*Krjk?2d4`BGb+dIdi|-V&D(Qu`iYJ)P)6ZoZbz{)YwK)p=|#59czi=h8uYWvS0l>4M&qy z{=HJ8$yh(j^}RH604-~}Zbh!%Uh2KRYOc;`5%C^WoVwE* zdmj=Xt{21Xc=U4R0)m%4-qRq=(5mTNw}~__iBI_J%sN3>-Q{I#)E9Lz4`rR()T;$M zi@LxbwtdkcmXt@h-QXF4^r-IP*(b;fC>)InL7sj1dHZLL4tW*VIW+g$ai7#C zL}6x9@ydVvMl#oiKD=?oihnr?mD_RV%wkykvGyLHvP|87$^1oO_kQ<6B`)LPhuse( z7^80Kgx>1f$Ncf@F*}Z&+1`EsT;sW8;w_hI~wanWw5>0l4nMJ-OO z(iwJrtA{UxfEyKyWw;rw5BmYYn;Hx8$C^)T&(_8V3~!rIma+UG>S*`iirj!?ujX@k znD(>?8^Q$lMk)Cqqj8+`*Reh_axc-R`7KvbPMk6#Ai16cZ8wF8KP)e)^YeWj3yYdm z@Y+lD=4a-MTEVMTv!!CVrPzCj{TJRV>>Wb<)iho%C{IS?r?V?uktpBR67DKF&i<0K z9vZjB?v;xXYrT@x!=znJG7$So5Kc!fb(@vaEwMMFGC1&^IT>s^BDn`=ijml#*r zBZb%)yE&gou$a?e%}ZbiJr~~?`5gHO*%}j*B~$HzbB9Y2~uOZ|*I!V5rdjOM|{4D}uew zJj9jDz9sj4OE`OWuK-A#ZtlEwA|B@hu~p8z(Ar4fZfi3jU4T4SlqnrkG#&jeT~N{o zuY_*9YJvUF>~tj@cBp`@7@p#2#&suH6&yn0U11!Avrl$$M!#d4)O`&9KLDUWU%#OZ z3ZV&*s7x+_3@)JwssIzt;8jXM7+S;QI3gYLgizd(8my-|tU()&!4}MceIAV&@X{- zbTKKFvZZ*@7Zq#pCM^XGZw24W1&Kl)^g$lrVJqiBAJ}6Ytbrd2;UBPIaOepl_Td}M zA?Rx3mf%CI-eDa4;TuMSJ=#DGsBq8{W;KW+r2qQKGf+aRLMor0L;7;!%sQ%`?jt8~ z!r98KpgxJ9HiL^8YR~$^AZ9}#5CYf?q9Z=3BM6Ek#7s9hO3-w}A8;Zv8IvT&49ymz z1D7&3Wiy1D(jNlvDS=VRQjEz~thrcX(>5(1?%}!K;T~9n;jke$2ue+UfDZMuNBCHUTt1^`i%1 zsgi0vLld-c?rlWE#*ku?Frvn6jJ23XB>!r!&rXOz5@N30Q$S%fMoEa#n#nI@O{~%j z1%;7Y7&NFfE2v zdX#RIiYwI9NyT(b19ZqD#5SjNg{0+5qjE>NRPh2sz7&MJ$h1!F^iG#zz>p0svg$&x z)J>~$M3!Q{=9Iti^iUD?PNB5OUgJg+=D@P_D7Lg6^36Aqf>0BLP7`%gIWZ^;dy)(blce zyaU-Ff=&LRRu$j?4j@;bVp56m%Kw6OTB$WyKNU@l^))U+S((*Y-BeXsA{{JjT*r=-Su7JHD2X)Ug@=7?e$*qHDC30U-`9P^R*rJ!CA;6`XYi&+JRe} z^;DM(L=sOV+C|h*En+2hVkx#_E%stDHe)q*V>z~CJ@#WkHe^M1WJ$JUP4;9_Hf2?I zWm&dmUG`;RHfF^F@Y3{Hdktab!c=uO08lk?8Wtl4p&J_k5{R~FjrM4fHffc1X_>ZZ zo%U&=Hfp7IYN@trt@diMHfyzZYq_>-z4mLtHf+UqY{|B4#kLVHVFscUTt`b>x%D3g zAZOk5XZc|o+~zKJHgENIZ~ytWZwugW0k?1W7H|Vsa1Hlxcb0Jf7I7K(a22-z4EJ#x zw^Su}axFJ<758#AcXKP(Z!>puL04xxH*`UFbSd|98`pF%S9SB2bxHSiVfSdaajw zrT2QZH+#7kd%bsizqfnAcYMXSe8cyA$rpXiH+|W6eYv-N)i-|OcYfVhextX3=~sU7 zcYpP_fAjZ$`4@ooH-HJ)e+yWE5%_==*nq>A10bN$|7>I}1g^ieqkr;@5Sc#ALiHkUgp}2{u*oI|zijO#nsaT7#*onQEiMzOp zzxao_n2E)>hi5p9vsj9GxQx$OjmJ2S&)ALO7>tkM8SV6@zj0S$pbu*OMmf zX`NE)kP$hh3^|b*xse_Dks&#fC3%u5xsomUk})}xHF=XW87DaTlR-I@MR}A-xs**g zlo$DwRXLG$<409uLMr%z2|y~g^k+3IA#gdDb$OS0xtD$Umw`E$bvdtonV5z7n336+ zjX9ayikY4Hng4@%nbk^|r5T#7`I@mgo0WN)|EfiYxtg_EnZp^caJieOIhW0OoYlFQ zhk2db`Iik1I$+s?jbfGwKmew)-iRW<__?3``JZ{KLirP*HPxI5`k)EgKM{JN{aK+K zdY>8Ep&5FjA39_x`l2s-yZ%`{F}kC%OQQL?EA*?nw2Pz}TB8@*M>A9@P}-wi`lb6B zq$ye|_}GGF*`7rLrzJI2{lZYI^{1Cbzku4MtV=4;xhRU05eOgw5(KXq4P_x-`cPDy080eqPdzSl6tBC;i)kKpB1}jjTcP)8$_;$No?KlQe879W%N<-?qa4g5g2T&|%&Yvu zh1|>4T+FAO&CfMGGz_WdArWR-zwsFX7GPm{bgc%uqWLUj^s^-(+Su@#(9;?u`W&zq zdQGq^(5~7f4E>)K{iHuyO)9<6`?Jvvy0`k;q6dASjiR6X+|sq{(sygrOG?uZTA}?j z)aQ)HQoYjs`Xu@@uv`t$(i2H@{kn`zuSdewT!PSR;?{lLGiN>4BfZ!gozsK8*Z+y# z*(+nz1fKg)f0U^OWmi!Pt=sPp|wDVE+4oSp)p9_oog0vwxR``a@l)}JDFq&#EyZQq|XqBHDi zGkBk!QtF@TiTC}XG=P8iQ&~BS-y=FB`f>k||0(#XfBAP`_^Tf^AtPdy)B8!y`@274 z>*@Bx-}ooC{KbD_Z69NEBmLVS{lP!}zkmJb-~8!+{83H)QH?(U!k@r_{00&%Xpmn% zg97s*B)E?uzkLt+*?addW5#{^?D6{uk|M~EBR_g9nJ;3=f-6hqbstQ+n zrHU5iRh=!lCd~);pFNEl>%F@NX#oWW{}@pC_cx;ix^x2={#PI)fQ;?tX}pNdn&iop zCsV78Su(ZDl{a_hY#DTD%%U}y_MADjYRjZgm$vpAHRafuUAHEUdo}CNygT3a-FtTM z(ZF@bK0aKt<#GGw&9!GQU%F?{rft4%{krz;)Us>$&ON;N@8CC=?>>I}dGzYJuRp&& zz5HqL-OI-wzJ7cA`|sy>uitn7^(P>K<_+jyckRfOPjrO+qyJAmcsalTUm00w;e#0& z764+3UGfh*j%fr58G6JaM~WGx$YP5wz9`2(FRln`Wm zkUt)&nP#4e=9yfk$!42w zy1AyBZ_Y_)on*%OC7xaC>82iA`s1L6`sj1dAAVUtSB4sHcvxcp003fRbPYlaLzZ5O zX{MTP%4w&behO-+qK-;xsivNaYO0;?AEan{{9Pazyc3UaKZk*W6wCi2AdCI^T;EiAq*hO zY(^R^%4mm*v2jB?5ib;z*ejiHi5QsgHIZA>g(^bL>ra8-&Nc?s1AJ)^r z3W8X|e;9F+NYs!e34qUxfao7gB;SLicZyFuqZo;x1ud+>2W;@;5~uKoHF)9BOXQ;% zzn}#pE`f<>K;jqwpv5P6Ar5|MqyG=f@JB38p^ZeG;uP3`#4-HA3rzUq8KL;ZIKt70 zQ2gQ>i8ux=Y=O#i3iWZr#2nk=vX4`!G#tgqDKq{tj(|SHl%F_-GN_@_P^2^zws=Q4 z2C(T8=Da{6FMs>%9}pv1L==#002v{`0scYRjP!GXiz-AAgkg(IuwWUGct#1@Fpm)E z;UA2+K|995f-_*_5{yv8KlpHp9b6(5L0HCHp&ElK{38cpfNdxm@sA)d;U7tWf<2PJ z3ph++95HA_4?gjaGj#N@-2Zi(yy!JWqiQZL{&)iu-xA$PRFT z1pGr2n&l*6__2%`G+`d0h=Cr$VU9M;fEGCz#6KFr0^|;&1bl#KAx0UFjAY>oP<@AV z_`rf#{6h`-m;o7{VUIzupju%#1q=RRi+?O531(QrH%?K4Q2r9egbrF!X{gJF`C|`I zctaRs5ri|mnFXz4!T%m+fZTmNqX%Rt20wyu3Df=}2euH0H3q?FGnkaq{+NOqTAYtP z{Nof!cmq3TpoY52`4me~!zE_m4?sVI&r9gWCrS{C2N$-`%wAa{k(ZAe2O|^jq(MD3 z;$s}pfX5gkfRHn*AqLuOAIz}E4akt^Q}Ci1%$UI*k}!yH!~zRUn1?kA0Rc$-qYyoK z@D5_p=YI%88~&gMGm=1te5~k!3@^O!71u+3P?cW%Tw^j6&fK2SqC8$OV|THk|1lg z>)vIDUZXKXS%)PwED=kH#SD(|hBlOF(OdY%mxJ&LJ@6t4eBeVO{P6`j&|)5XfI=gZ zkcd!(V+N4G0vY@;2!9BJ5sdgm7|`&H8=L|Tu?R&XAkl>_>|+avCwRb2ZZgN39%)ku%5Dw394AwA$ z`Opr}@C_oQAo=ck!$yCG&YG5m=W`sf%3?0bb(0; z0E$BP5Bu~WqnI>9X)*@5C`9>^NqI8u6JCghO-7lINfU`mlQbV`l`Nxn+fqYH$^UFJ z_KK0%fWdGIG_Z~uGLQ3!F#?bP8;CKZ_>@RFG8QQ^aLJW*xhTRoUQ$UH1-X%W`IZc0 zm4UgHdl{IIA(#tjmtCnt{V0=hSC;>91eu6;7$}b-vv&f335z0>2-z+1;+dZbn%V-I zqscF#Nt&mLnyIOptI3+J>6)(zo3SaIvq_t^X`81xkc81bf#;OM;vA~!Eu|Tpx9OR0 z^hU&qoXM%2%gLP0>71^an{;80v{Yj^){c;gcX&5}XPJ|9!IuAk02^p#fcGHSV4mlR zp6RKc>&c$&>7MTipYbW5^GToeX`lCrpZTeu`^lf}*$xkamx*RA;m{2l_y0NCfS`$4 zXnOdS&7?z62$mis3O{g`XPFU4a0D0nARD-W3!oA0Fpjg9k22AhLusNXilQm1qASXx zE$X5#3ZpS9qccjQHEN?bDx(l8k!dtT71=Ncd6+>eq(e%iMQWr+ilj-Zq)W=AP3oji z3Z+pRq`{)2(ZE{UDvA7)3fE~e2;iXzkP&`L7hu{%{}iHSil{&1Vo`KPJW5OzWG{(^qmxRh zm1?P%im92Zshf(TA!DWJIH72XGJqPW9*SLr>Q98RsENv|JhQ4$H2;xmR7_LJskLgW zw~DK|s;j&Ds-v`+{urVBa|-der7W`mq>8GXm5;5;tgfmdOxdHeDyhv%tytNsGRBb9 zDWO_gtPj$i8Q}nn@})sJmw)M(7-Nwp8kgrPpueZ0hKfyw%C58|sWUp27kQ|0v22)X zt};4kNBOD^BbUj8rbH>QHrkCX6P+s4po;3QKhv-;bE32gl^*wOq?4z?kP2OTp`t1> z9vZG0;h~yDuIM^Sf@rRRXOfN)EFAHa1<@Rlsv(5AoUeO#>Ij_c~5O$L`CrT07 zD6sUZOC+N-xDy=|akMk*5OdLpM=7rr>$K6cGE4iAj`6QDTmOqLmbH^pu)%UK`7jSI zE0=L$wg+3Z4#6O2OSL027Wq0d_oAvNbEuIh5-~v(bh$EeyR0TVvtFUD6x*vE_o=$@ z56Lj0#fqUW^Pgd=OXJWD(S{983l}#_5hts(w}`Vdkq*|75@O2_x-;ZjKzq$qtv_;AxqYf4mX>MB5@Y?QWoD! zOa7384pF;sF}8x(vttVv9C0rcp$+X&i^kZDzVo%u)Bg?UYYpEJz$cru9*8Y6F}Bxx z3@MSi%X_nG%M>EPAoBo(=5P`-0lpUezb9)sPf->m+>0d~7I{m)3lR?1z=y>kJ;$)U zTMM`*%n@P1i~wA@%b-vcalt2R75`g|g6I(U@(#ZMVN8J~3h}^CiGYQB3(t_a8gT?3 zyE6LVxEb*bjBtd<@DAAEwB``I=75FcfDPe*4e^2v?T`-I5DxEP3(qiv^FR&b5QCvm z40XH@otqBAunhK4$53Ss>5vZX@C`@23}U+v+7Jt8B@D4Z3ug8WI`a+V@D7k04s2}3 z^S}(h(7N`Z4LWGXFld7N@LJbm#?QbDwQvg0@c$27l@5CxxpNT?-vCuzXbvVQf{_~z z8g~kQ{0`}03tct2ys!+IHxB<`4!>{;yLeOGFb}`*RBlX5_BIY#Xb$br4d2iWVaCn# zFb>x64&7i2=}-*sU=H6{S8X z4ej7n#fuHLU=GJH4nJ4R9dXDe>9vhYkyS`ur;u#4;Ktu@5!!6a=Fkn}Fb>oZNRu3G zb=VHAk`CzH4rF}K*Q^a1{aWBW4~M)Ay`a49fC<9z2?>+Z+uSgjyoTv;&^;{|-;h!M z0J(J-4&%@cwD1j`EP`*m&}NLlA?+BMjQ=fu_;|w5P}BekU<}IU@I~El$>{tHw(wfm zAjapr)Zai0=I{U)C2m`eY`aKQ)klXYva4;@#9Hrm?zzof;-=)0_m!ROM zU{J!a57_Vt)Bxe&{Ry_<9Q*+0+s)Pgz|3m)3)uAxvB2M;U=0?X-@T16m~iF#eGHAz z4K3c|!l32ZeG2Jq3t^^iv2fP1Z41Q!QO6+N!obX@u*daB3y}QEwD1fqKHtA^4E$X! z*ihoU{R!;w55@4y5dKn+*ZjuhE6lD$k zZEEn|Mj&cd|8Vp=W&aJ5Zr-gD3q=>+Cbd#PxZ~jv^yZM;DGmzV!BP`J3nOR?!Z6&6 zehSr4b^9Sr3UEd_*-Ai9sN4g1{=jPQmr^$h!9 z4l#dM2AA-H2;Y$K3E|*))DR2yE_2fWfTP=x;Q=G1@FD?x&RQXg8v}{g5=-9BM1*Jr0|adgNOeZES&gH(LsF+51!JfG2BL4wrbJBX73j* zTCr$Zi^VIJFpi%v9c1?J*FTuNK-J_IN?53Wr+9^$Rt%Fco!I`hYh*4~ENsjE9b2}~ z-l<e;7d+Spzi*Yj5>YM+cUWBZFAHCu!| ze_q?`-=|QgF4Jmz`X;Yx{+_vwW$Q05ZCFp`h52jkv2c+?Ju9a38^43J-i2cJER?lp znBLjj+y4tI-cSF4p0d`R-@K0T<%g!$wd$RZ>z7MpalML4!@14XD)s=0)PpLULY2i=droyM?ttkEXlZu05onRLEsC!coa zNoN{u+QG)!dA^xuA84h{wrR8*1$7=AD4|sa9lj^4TYyk@-nyo_xGbr<-{)?Z#TKpMBO{tV8wt@Bf4H z+wUJ#{R2=y0t@^HT8Q&2`L#<*PA43ApAqw)X&TO)>TIo{#+-z)o2DIVz5(|eUfwxZ zn|bv8cAkWz4aaj#0Om&vjTGx|(;ie7hZc zH2y~8c}A^zpKq)wxM*#lmR)0Jtr7U2k;h@(TYI$823et}rH1ka0_H$106W3Qsu)QbxYN%{=tk_-Rd72{09&Y;z5mAfB_a* z2ni{0k$?C~Bf#p2fwVM_dE{q;2N6*AOr@oNsI5R&G0;J@#E<;ha3A}q*#D`9XcgoA zqaHKF4nKx?5KUzYivQS0_HuYd3DU5KR?(6@i165quR(bK`+A1l$@kzJ?*&=2xe-V1X|TCp8p{VB+zPu0@c+) zL?{swPK1Q?VPUEy2t)Yf2ZmErU3@NfkQkz|aPUFZBB_~1j4lK|9$m;Jw>cmwPVu8q z)aOc3%F>j66pbjQDNQw^&z4Hjq*IKdPU%C^mckLII92ITOKMb>ew3t2Rq0KKn$nlv zlb)U=97aQlI7T9paElzHOZ(H28NRe|LM@O@g&Ijx>T!(kG*wy4N*=gn%B>QlD_t4c z)~@oDs71Z0P+!{9rc!gHN2TC8gGxA#1~!Hw-Dp*%`dG+@DxWcpYAih^wLR5w2$~6M_ ztyvXragBT2q}Hdnls#^76W3hmYV|&OtSxN;w@=+>7qXMZuBvo_z6^H6ARz3ZK}lP} z(4Lo}^GWMHS*u<6##g@coiA^#>f7f=SHJsh?sSD4AN~dyx}BmfeGPoz+;SJdt6Ie~ zG7->)#L7M(xX(TAu@KWDSi>9UaEA|UUuNRh!z1=DiA{WBQIYDfm1R{hQUR+7FNC}r z0f7Y6+YuE0!@?LwagTlcV<1~pKcBp>D1&@tBq!Ox`Fv;#Et`z+au5hJUWf!JY-KC| zsvVu#C0u5(mF{fG0YyK3IPqj_&{{O?pnXMI-Hzfg4EabvoW^wd)T@Cj{{xv__VUF%{b^8#TGXQ^ zb*W8#YE-9M)vIQ8t6lwSSjSq{v!?Yy2G`qfXo=Rl=5?=q{cB(cTiC<)b@fVR-8j#A zypo>sK`K2T4g3QHnEpq!^{kP<_(R*<=61Ke{cUiETioL&ce%}dZgi(x-Rov|yWRb6 zc*h%=eMn13_Ynv9$Xnn0=6ApS{cnH=T;T2A2OL(+Pe#8uAyY=er2kQa8rWId)&2(w z4w8w3sPG_tki%Ctvzb%mM&uzU`N&OPa+IH3<^L&X`O011a+tqd<}s)F%xzwCoZnpM zIp_J#ecp4R+x+9FAVV?+{SP!iBIF-udefc$bf`yN>QkqB)vbPYtY=;8TjzS$z5aEu zhaKdXFoOiUYe84RirG`H!NVm^@rlPrh5k849||!DyyLwPd*^%K{r-2r2VU@lCw$=z ze|W?vUh#`(eB&Mec*sZo@sJqUB>8cQK_o)*oA0~kIsbXk|K0PUCw=5cUwYI#J`sb+ zQei8|DhK~y?QHL0#A`s>8dG>7)?Ns9G@iYI2VeNZCw}pbe|&QXQKZOce)FCGeCS7C z+t@|8F8(QdX185Fy03EF50Yn#ikfhqp8qJQ=g|)HGb{b7jv@KckLq@T8vX6}G#o<> z!&2kl{O>2f`aezoQ!AMNQ?tiS(jm(*ewbAYw@Gr$P6nh0FM{1ZVCyeL#N2N*218=SyUo56PA z!Sx$J50t+d6g8{)zan(C`D3k%Nk9m^DE(`~CUilFVnR?0LIWJa9kf6sR2?N8j{!ui z5v-evfiugBy=K!s?R&Uq`X)Tg(iLs~+sp{heW%)=gXs21u&m@+Er z+mt&@oIf-wJv5c4N<`^O96t1`od4RZ)e6K&9FQ!cLnM+zKr}>$+NVZr#A!k+u$qr; zdaX``#7mT`Fxo?~+Nah6LpX{p_S&Zv6T?4N_j0Y)QbwmjMMc^}qCzKWl*5y%!;%6-WK+gwltpHoC}-3~P29yfw8UtXt8#oN zry?Sqnjwu^sT{JP*!u?@I0%RX0^7q!Evqu!qqc*vIQnoyL>owgOtM#WLvMsEf&3Jr zs;M}9NQktqLEI#S1Ve;ONKT5wR+Pj}xky>`$c3aQjdUuGoUSs=1RC(5wzItn+dWd; zvx1CCnVdB38vmfjhx;I(jE{u^0TSrPn}W%kJW8ZYN~K&%MDs4|LrHqX zM}4#p^%Bb2GD@b*N@tP=}gMr*yEC ze7laIfQ1q*m-Gi;v4=gAt+PrMykt>$y2Yci@ zomh&kSc|<_jLle$-B^z8SdaZ!kPTUp9a)ksS(80klucQcU0Ie@S!SRd_F9#1RZAMU z)Poq;8vl5KoJCijjSmu#OBKxzNH~K&*aM?ITBJ={rCnO4ZCa;&TBwa$shwJ?ty-(S zTCB}lt=(F#?OLz>TCfdUu^n5oEnBla+p^^YIZ%TtI=dFDRmQ~Cg*ew5*wliRHWC8J zqTIMs@Q1b%Fu)C5!5v(}EnLGrT*OUW#a&#+ZCuBFT*!@F$(>xvt=!7x2Xi>K0F6go zm|0t`0UXdiou%7zEuoHJSB==QjcAvMY+cuVUD%CX*_~b5tzFx_UEIxG-Q8W@?Oosf zUEmE~;T>M$Enee2UVX|QQo&L(eA~seS%A%1xur4su(04nUhK_Y?cHAP?OyNwUhoZH z@&6rP@X zK4BD2VIQ+#x3#`kVar?X$?2UBp%h{I<+1x!VIAIK9`51CV&MgIUdHsGoh;XKO+&eq zHr|Wh)Ft5@_F*WFVkw^D`N$_Htv*^!$+jzEfhFMh5Xu_1;eBXe`=w$tK4Ub7VhDnv z6`R!;)<-VplocR>4X|M{F5!hBzdR-@xN<^_N>ho-kNl_@7%bsHzD?(>C}ae+F8>A7 zG=5}Aj^s8Y6*h)Pr%VQ9&|)~Ik2&s$4XC&kU|=Vfk4>`*Wb%i1&^A=@2Yx_h>^P8l z&^9XCv|lQaR$d5Xq9aXfvC=3F^@ zP5A&37G-2CAumz>#2WG$oMgW*T=-Y7M0}R;% z!dQ`GP$fu6ghbE~J}8EH_ync94Lu2kZs3RQxCFT<1V%`NWiSVhI0em1gkLCx$2bLT zxP&KBW@qkbk4|G~Zeb7=;22&>z`0}BOl4k}fx-BPHV6ZA=z(9T0}coeYyV&YP{4#~ zNP<{kge0(s9N2?{$bm$#g%Ws%Dv*PJID;fGhd#IhC}@O#V1Z+JgD_}^9O#P*7z}L) z3KsZkPc#72w_=hFvf^leq8>ofoF^44Bfno@h9q7SRn1MF%hfmmnObLQZXoq9? zg%a3;ap=;!UT)@=;JohF3|`9_bIkHu2o#88E{`<72b6M&eP!C-S0!T;)T0oJ1fP?1#a1iI;=cd%_V_*5uJ{+joouq-l z)(FCW8K^aOeXR2?J}`14y_6dr$*D&;vfOhajkf@lJw4h=m;Z zgg58~IWUJhxPfuVf+pYxVVD8A_<~a~19lh$VPJ+VfR9iZ1U)c=e<*|;cm}rah3`&; z9FU4Q2m|&ggi9a;sSa^I?{lWi>*n3-OfKRgc1+N%*^WqY?f_d2VyZ7VG$mY;Rk-0mKp*Vu<=`sd75w#7MB5;eGs61 z;2XbHRX^W#UI(*~W-bg~UlVsb5B_UL$K!As5LAyLC#oASs-ft)b+tkDMj|3qpCDOs zB5E(DDk>&aX?3mitn%yXEA>bSAo^Xwu4@J zY=QVdfqk!dk}r7>zj!Rx;D6BWw$z9rzyTa+flKxHU;jb&tTK6=&-os1uZ}=@&V9<~ zMMEt<2#>#1kY9))Kmk^mk4A5o9wauXk9w(}daAE_tG{}z&w8!jdam#KRl}~3w$fGk zg@LeDjwi3Fln?b}Hr#(er{`@&w`;A}0|4}Reve&R2F<3E1nPk!Yu z*1?Q-j34Q=H|ZIs4_1Kj6|(u{HAS7@e(q1<%Ktyf%TGfO64Ck)1r*(Go9}-0Uw`kX zLz{=jN__RoL)hv4sTF@VTKgGP-S|Na3vsBj^}hBy}5TX^cbUhPDBjL)O z2PamfsdOpRrcR$ijVg62)v8vX&bw$6r_P2we+D}>uprTeWj7A_$Il|thV%06`AV{{jvycrf9@h6U&2$Cu$&o%@n1{0cPFiW+B0it;C~VcUiC_@xUc zm)~7}`$#7)eVX66cBe~+3rG6jKDhqu)&D-MdpGaizJCJ`PIBKoZTyTXY;4b7*T_C~ z1ru1XB6qlRHjv`DMR)J+rrd-?2T|x{dP}t{t{m z_QIJXoPYxoSfGIiBKT2O?VynaB>udETw`4!m(Msq1yvaiFK~pz5ovjN&_fSh)Y(G9 z=)p@jybSWmDSY@bh%LSJLCYz7G{VRpr|{B9AI$udNFBWl0?9IbB+^J6vG8#UWC=nU zrIb@rStU&K_)|<4e0%|+gg51c+(BRc5*gu;(#z5kpdOe1_0Vv9e&U{XvUPFk6%rkirwX@c+YBTN@^ zkm2P*6N;(cPuEaZ!$TatV30xo7}VxMZ9e2Cb|ubv5SGhalE@{H6cS4#2RRzvLC<`G z2_&I}BJ45${Bp`CdhA#TCWjvSk87TS8?LzHlH1fg`&g4j82^}>9GJ~5B$=7B{=*@y z2hnTRKSL=5M7|7}c+fuf{6dR`v`q8OIQUs(jV;eu!{0c?O!Lk(wtza0!nPb^PcgsD z!^|_iOmkPcC!?IQ$}79Y4=;UuL)@2KrD`FDLb+*VQa@-L=K2s z>lhWCyYkC3-~3Cv$BTCA8`gliLYR}V0thRRpwJ3IBTxH5pKG+(U3fX4zWVE{{0{j7 zzgu(flh3L%zV~as5cmsich5ZvB`;}H6Wluh=NYvyBrES@9|IfcKm=jQAKPI}{7wfJ z>BOpfZL60;K%hVUf&YL6$WVy?07yH2Xaf_c$d3dih_$KlV`>m820uU*!|h;AE)U!x z4|}+q&wSzx&-fb!ak3nEsmgb)vX0yC$GV1q00cjPwe3zkoX5Eiu8|95b8!dszWHo zkt#jHGM2J536_en1vrF3F*6I(av-ORf6Oa*imcxvqj(SyI8q^1JV-B(BEEm@p%~_9 z#5W3ojYsi99RHX2M=T)m31Rf15rDb`GeXgaO9%s$(@@MT+v(1CZUjrrz``EF;1481 z&p9{Kko9<$5lBYzAHMKhLzW?oztJKczu*HcsL=;VXaf?E2uCJqA&g7%;u+saL@20{ zBhkDPo+2G-Eca0dDTLylyF}ucB1bP}7B2V4!mPT+{Yq55<_qG^ddZ zZunu;qaH^tsWDARN$S+6?r<*exQ&?dIVRL$&~jRRVnF{vffO8MncN{?GqWN%!7+|G zISEsk(ki&7LN%^(P2XEsN}CGu?w2p+U?Lj=)~_A}tO3>OSUIwjULy9eMoH{k8|&Eh zHM59qJ^$Oy2=W5q<;x%spulDiLIJOOHU$*O#9Hccw*@{nwW^J4*%s4MT}ZA~m(A=# z9I)93D1-tWI0$Y9O3>8;H@HuA9OI&Q!GUmSR$N`kXF2QD6gVJ!?^~;It83jJS~ZEm z@P!Dfx7>_;b|c9n>S9s_*XyD;y(p`zMY2n#puB(vv&COWdV9*>o=PXWWLj2|R+l3d zS10FHFM$gTrNn^BwSt_iFM%oB`tp_`yFG{t-WQ`}Rsc9o3Us)yNzB;X$pNWhLCU|-&Dv%*(wh%GSD3qkdP7u320 zCjUaw28%Lj8K=0^F$NI}s;xN7S_aNkmqE`i;S;Y7Hq(4Hl4Bh!4!79W*PQi#%Nc0qqfP^&)l?Xi)FeimxHLIxts%Kz94QB}CT?dIoo0Ul@m%W_o z4sw8lC?EmCK1c%^U|)IY!?gkXDK@4t4q;Fu6whGBG-7dzZ}37G-#Er6!tsoBJOhrx zut%y}ZSHe7g&&_#!!uNRDlzMGGL`A4y{xBze-Hr2_H9Q!OiM|I;AUVg>}d?^VgJe5Q9-tzaq<3+^rrP_V&TWdwu zO5KJ-JmxYdNdX%N@2f&OkS~Ya-gvn~-XZ}2x&j(70HTX&ykRdq=Q}?f zFg5MgKB)!$9=~ym3?TIi$uZFj>-pEiz9htb^gqCniN(KQ?pIex>U;0|h5uZh&9NUo z@iU@!UDTq+a*zAzGhzS({3G}~Ek5Hi8>7M&#L;y@4{29Q<&EG=U0=pbd3aa1=vS16k;0wZF z49egP(qIkR;0@wn4(i|z@?a18;12>}5DMWC5@8V<;SnNX5+b2J$iZ^d3|48M?lFWE zE(8chU;GW7Meso%ECVn6!WV*J7>eN-l3^K|;TfV~8mi$MvSAy#;r|=LVI0cg9MWMO z+Tk7IVIJz?9`a!y`r#h}Vjl`aESSOAh~6&+#rc7R6^fwuxdpY<*&ayZBvN7}TH+;Q zVkTC+RH1c3qD44w59u0Kh`n6v- zUc@i{0|4xuLa1Chn&Ua5V>+tiI-V?4^^Jkn!5+T%UqV?OHRKJsHf`r|(W zWIzh!KoVp@o?}RTg%U*}H+CZmc%bBsUqnjeMKl#Qo*xyeU;p}H1UN2)*VW%dg5>xm zBrne0LmmVbR-r|BO8Q_@qxhVgdyv zQ4S@*b%dA{B~ZGBf(e>YGGziaAMYz^HpeFxl(nSHqO9qZfR-`6F zj3#mjWy1|;Uo@O?<^^iD=0&{bJD5W|v_m@?Q6cB>SW^xu+gfb|El4Ec>=!WK}YRad7hG>Cu=!epYQS60= z;v95jqZEpOM&{^7ZiJXP8iHEHD~So!_^5g14Sd4qXCgND%l-sln!d8LaL=EYL7;i zavGOHZlC+@C__SI`3PR23YXXs$Zx(IBMibI6vC^*YOKoYtkP<&_JO37Dpa5?8kka z0SN3)bfsAZrvaTD;Hd0Huxze!io|LP&GM>GDA5JT+!w6382;N(+Y3@y@X1elsCW$j`nr~vvgtVaCoL3kv8I-!ixj-);) z`S2!&F6d(dCu=T*`*3TrvJ{t&334g~fi|c`@Mq+D#^b`Ai8h4$NG0Y5smbMyg`(VU znkdXUC;9ZIi!!HO91z*P>(c&1(>A~am_h#?%m542ff=yC7sNplD1jbG0SBN#8|**{ zyulTeKobB!6R> zLl}i`ddP(~EJHh_LowJ9Gkim)M#eS1kLxZD>@p``zE9{9C^G@6XMWCJjOf6IF70Bd z1@GqRx`l!I%AaOwWKcwfctu6bZtRxu=*njXC-CfYs|V{T**%(#u0W28fcgb1M-=Wb zLZ(+HuAwTWkHYMd+Lcodv6m`km?o>Bo+X`bX;2FBZ?Y7W)}LrTYM+{_=1%dFrlk~f zacutZRVpVH#ZIlj-UC0F!$dK|FJx03jl(Id(7?045$7gzl_oJS(`Pa3lM>aiMlRw)Xr?h6 z=14SYklw9E*lbm-vkn=S%$`I$eA-EIb1kjswTYtvQRtJDWt&%B(!^t*RokJ=Zf# z5VcImizdvl!Vc~?lJmqW4nBh%#x_6*Bton)!6{6^4fsI_C_o)#!5$>RC6GZ5WC0vp z0u;aj0Pw*dGsO0)MYUwqDbxZ#*uwWZa)6`*8pVP&@Ioz6a=Q&8#r%Uch%){DLoehs zMRd_J6hkNoLpRt67GpJH;A~J_09A)XW_Gqr)+RKzq;gV`PjJD7txd;>F#Lu=TCIqV0u zy~8tLgFRTcUFbwNEJH;w!*(viIIwGJU&UAat&r-S{w&y{M2#u5?q*V+M2CwGB;@$6@%x+P^raomg7+WZp)7NVEpO~ z*RU^6?Lok|OF$_Xr|e+{?Xj{e5Ua#rCMJ|G=CLxlhIfQqnq}!ysFF9PfIcS5X31|C z+nAGinVWgB0qp;omw5r0L5*`NjzhUcT;o&AIbU*lV`{l`VmXeNM3T>Cl>2#>@41l& zdeBDsomY8Gs5fZ;j0fKE;D$Jn(+-o$shMV}wu)|gnse!fZc~pBn>MqeayIR5abcGF zbOt9zI60;^sa=(DfTlWy#_pxZdZpKM#fCry==!endawKXuLHZTL%_*qdVd~J=~C_o zBWja+@v+nAiTX+ft7wZBI}yeDoKC6$^Qkh!%Yp`|RLc73<|gghx-Xl%xy$l|?x%{H z@Ue?~0%v;_YrD2%;|0{P`dz?5*n7Sc?vUSCysvKgxbUUE>1-D1Z*n%(5V5lN=$t;V zn|k`ZOZ@+DD*SOerIm6emYqrq8&e{l$|27XJZyg-qOEQyTtjk@DgL`9I9C^sCh=ZVereV7X%7>9aV-|55A(ruX+_K@fRS+c_wDv4WtjHT(ybho0)#z# z{{$8kIBy<7g9{D*bNEo;Lx&M1QmiPEU`C7sH)2GHF(XHZ3ICBS`3@yWkrOSl+_=)^ z#fvR9%6#~-&Xp2Pa;-xpUIbp;O++Ip1i_%$Yks4O}{L>cUMgKdybc zZ|>{W_pbMQyZOe~kw-3A4}ZOTp$+1XIMANkaBB~OJc;}<&_d<;XV5_lU6fHF6>Z0% zMuS|GNJlFrGD>`+JhD$KJ+<{JHCC5flf4z%TX6w~7hJ3bW?Erz5ye_-S-~Y3aB*QJ z7;;%L*W7Z^C5IJTMB(LJX{+5<-e{vu7T;s_&6nSO{p}ave+3TM)?jTN7-51FURdFV z8GhK|h#{U>;)*H0*y4;QwwL3MJ;wFmk3Ghv+IhP@8Rc)s^|o7;Q9l1!<(OGsnP!<~ zei`R&bB0;mV9NcuXL7;ynOvfOPS@w8MM;AP4;@+oBd7%%%z&z44IlsoCV&8f2qu`o zYp}l#o9wa878~ud(*`?&w%vXk?zh?gn(nwC;Nb2DLZD#p6fE$Y0uVsh00a_#0O5xf zR!E%j#eZo0@x>JE%$-g%E3_~3<)VD#dR2YvJ89pGSj2Poj&c@8q4-udaRpWXrrvd8@L z?!EsW{P4y9Uiwm3UfvUEG zHLMMwFosb;)dtW&2R;yj5tQHrDOf=W9sq+Gj35Cx$iW1B5CI5C-U9yNfPZw)At3li z;Yi?+77mav{&UFxK*B#2s_-G2GvNasf`ES{fB--|fCY(IL?a#%iAhxA5}DXUCq5C1 zQIz5oskp%bbP$Uj6o3{v_>V1q(TiUEpa2r^5CQlwglT+$2uZjAH@eXwCgh6q9KZky zFn|I7$m1UI=#V}BLjr(gKp+V@NI(jbkbd;zAMw~oJl3&}41gpb8)<<&UhahLE1U{j z$Upx5g9I>y+FnSxDpRs*ReJf~{{~nh5wsFj1vDUG98&+aswrSe>@MV zA`B=|ZQ50@eif`?73)~ZT2_#x^PkUjCqcc)R)R;K5uyKBXdFvuQLZ5MAs>~%AR)R} ziBQy#dIaoV{rZrLa>b4%l;lX6rxc$;Re11UfB+T&{4-FMsn@Sy!-^e?Fl7RdCqoKEumCN|uV*DnU=Z zV(@_B-%GL+UwU})ci;;ZhyNu`i1?q18jd5YP^c5=&Yqb6`NSL1GC`sPL61Ga@PO&l zs8g$6&APSg*RW&DX07mQMXg;MGyu%Ix9{IdcgIcefH-l63m&vxnLPPQ;}8B3M-ctr z0tX5u3~c$ZaNfPZA^!h;fkWVnnl&D$hb#~>WEztNs`w%Q$Nc*%ROH{UKj%Qt7R9HT zKtz!snm|bXLxBYpELB~25M~rtSXf19;e{9ir4LL#lDP>BTzK!A!Y z4iFKDSh*;oiY5wl9YS-}Mi;pMnNjhM|ZSTIitziE*f-kYeO$pMyR$Mn*8W@lU3kKIDZPpL+3+rg^xLM^c)~ z$=euiuzIOLW0e09YpfCNd8a^T{F&=RfA;#1ufYB)Y_P-*YizN|9;+;|yC&;wv&WKw zh7zY?BqkH8W~=SC+>Uk6J^%1ykw4)I#E(Dd7DTSN=JF%1Kkl;o5Ix{Ngf6`Nd|S}B z@?zBQL+pMlaJ}Ldj8MGs3PkS0@b0tEKo94mPd?&0ywJbhW?YdH8x90O#|>S@l|Y01 zGmge6rwmg%@38FhI}@cdP&+hp%Q8YY|08ocJj?u0I||V(G|)A_12fU>@Z2)YMg#p1 z%mg(p(9SJC{m;-68BMj-4h`+K(@-M>^v+icR5Z?I3uH7wGCR$6L0%gzci2yd&9lxu z`>ZlxUsM02chKX!bB9)>vH6h5ReiGe;*3W$@Z$nUWY0g7b6fAe1YM4kJ)8^FIpvje z4z9kSbI$oZ_RORDJpV*~&pf1OG%#=ZNK`rHzQrEX>Z-$J`sWeyF8uJsvyRZ?bweUh z;S(X=`18;&1Ucl<$7y=?*k^CyJMUJsEI9U;RGG z2vo}|sjQ;^{`~j9|3CK&$3Mb1knzC`Hv{+>`T{UA^~vvn5R9M%CrH8F{o@d)=*2%Y z_zzqN#Dg9Dpa?^#i((u?7yK~Z?+o}41cK~v3>?V%DoDc`+VF-rObP)Lf;xrl5PS={ z-P8a00f}&6Y$E!jN9cZMv_`n_g&~WfKxSAv;KiwSIn1IKx5&kd>?0rcz+yhe7({+V ztbhV}*h1z}J2eV~j0EAwA*j(h&9zQk^k4|g^hd5AHnC%7GTcH$Cc^@n?uT!}hBmB$ zyDmENk&wJ$KClssWrTwobSy?O%z+SU9OEDRU>9OL+f zHOyg)WANjW{gNXcS%(d?{iB!spoadQ!3

0usld$2{o4kNhp28=)wM+sw6$L0sY;r#MAEV)6eE zVUQ~y`v65RSZPRV*g_b`h=nc2u?)(c!WQHjh%Qt3k3yJ02dU_1AN-+Bo0CaVu7_iXh9>6)Ij&h%lL{Ls&443a}s{TVRIx3i!8yn4@y} zI2k&Z%G9QYXL7%2$1{Yn&Qm<&hsQWYEW#0rON`?bkWgwq+OZ5;)GmDac!w?8(Frm8j#K~q;vL$s zg&Ub+jfNiM7}of#E5k*N4Elo?!xe}vFu~4K9HSeM_^d6q8b`a@!ylUvh%Wvi)I;>* z5dXjf9>R+URS1N2NlYC=)+UguJk}x9bfD)dm)wO+p&+yffD{Ol1cwN90tjhD1A-tB z4qO5v3jIfA!{x^Mw)Vjgj_^b#XODKUj+6PAMt#F4E(*^#ALan4Fw(J)%DrP8>99xO z<^ikZpMq)FszCS=J6zQaIf z@DIgxfefToh#mxThdKzP4T}566+-dJe?Vf?14%_M(GUmG{-f6asDmGD9X4?>k{QBi zS*r>14RG4|*vL+HSXgIRg3zpKa#Pzogf{JV@Z%IdR%}7o8%>!`Q;PC!NC`qQkfIjk zh#ArIGb+G=w{eyrf>yS?=S}aWWY^Ug!9y~8xNW+{bja`pHx&^gkAXzFb-u*uL=gE9 zUU<1746nDuCr03~PJA`1T}OFhz<@`}6sq2d81DCs$2c) zSkJoFx6bvhd;RNR54+gMPWG~!{p@HD`#;k9jw~M?;8E;~&*x6}x=XOa?Qr|Qb&8Pq z+Wqf<4}A6Jq4$!On9scCH_!Rbd;asF554F| zPx{iE{`9C%z3Nx5`F|W^9EC^v;Rg}{!Q1}!xQ`Qnl_w^{GlY<88b}WQk%QtJ|MRbQ%*w4Q9x6l3Vd;k0355NET$4~z9oB#aO-$4x2Oc37> zQi>JQN4XG2|N7hi{`k+o{`b%S{`>#`02qJ*IDiCLfChMg2$+BhxPT1UfDZV85Ey|H zIDrP3R!i1xaQA!gcVM~KfgbpQy)kXEmx1r+UIS4Nw-Y*sv}f-|bV<>2Ordjff>ScM z6t`1@zSDvkfrB8}gJd#3dDnijr-AOJIPFjmNLUZ@P;e{fZmBalbW=H~bAtoHgBTJ% z{$_>#h7nun5HJIS5cd#PG(hU*ZZAj{ofAI21BQ~LXKM&)L*;{Vs5U`}fqYjG)YLKe zP!B^_5aDBN<|2c)6K@um4-ut?Xp|I$NKtE-5JLatFzmvH2q9>Cwhs|CPVB-DwSz?j zWjp3F5O5?f@zzG5#4d!$5PlYiafEIYQDUZeiQ(c8U$ic2v=8C}XcHzcqIh0vghk|X zJAgQcwkLu@NP;x=4+@}%aQF}8re|@`2Ln-7%wT3uMg{|cYXkv}16Y4`$X&v7k7%kPc_?2F%a|y>JRnrU&0p2dSn9)X)Z)pbfO32LG@O!Kg=-wG7YT zWL5A9m;eRc;AF+H40SL$gU}0uKn9h?NT1M760r~FfChzN3qlnN+8~*b&<&r^2A5zC zgJ27wzz52s4OM^%h2U^+@Co8@iUt31J+9UT%+L*Tun&B|40~`1de95Bxet1<2lxmP zwy*`Kzz=T_3WcBy+5iWTzz=(H3<3EGm+%XNun&cx2jlPzacHJ0uc`T@D765Iqd+XVI>fK zK%(t%3I}#zm;j}o$Or$h2Xr+LMd_!2xu-{J4G8)Vu`olQKn83i5v-F4br7k2&<1rd z4sXB@#h_WP)((B}41*w4!eE-((3&i2cV$_OXcY+38q#Dm>>ttSO_rF2fx6lhpMh6LvE*_4ceHTzW}6| z^$&?a4X*kR@F);*kZO_>r*#mg>nRX>um`c}r_7)R%vA`zPzb+J2XfF2Xn+aJ0GSBk zkA=_&dcX{5a0%5=QE&fn3cOGVZ2+dc;Ej7=k9u$nRUizfz)eC`gQv5lwe|+#ps#Z9 z4tu}{a4-#+us)5TcM#zZjHG7E&_K%;Y#uPjm!x%pKw+Gzzg+oGQS`$ zMQNhnBn;ueNy7hdSCaTS&(KT4U=Bs;N}se0zY(!R{$_|Od@vIAM&n5k7GsEx_`;2t!?tLNjVOyUOflhd zS1`eej;M*o15lt?g=2Wb*Yq_00K^ZoF5&Zw3rE5Qkq`6GVcTdhtaDZrfm4&?M&UC# z2F$^M=fN;qX<`B{I%hQFgN0S75SP=oV#qaE?1DhF63^>LFoqMVlX4ywHFO*igWO02 z^bSxsUk?94o!)7daXzYH+=xjg4JDiGk;Dbmw z+{voE$|I_UzC5oX`I(&;i}gfKbo&d=KVE&J5kq7}7I3 zGeB`>4iudbp*4cp>R15~!UI7Lzu@ry~&gv$vKQgoI?+A zq|Th(*`EE`pdH$xJ=&yQ+NOQlsGZuXz1pnZ+OGZDupQg7J=?Th+qQk%xSiXveOKpzY;1C|+=k?tFfXGWc-S~apQO)4$E#V&i;eZj}ya3%7 zUfvl#do#n~Aim-(4i+L_;3baW!>!>~t>P$$h`;QIR@jGq%&9sqg@)9&aNLN%+~P+5 zU;_^03WwndPU8vD;R*4IX@o@vnuS8T*@ zLnY&B?Boam<)4@cq3}=wp=PIiGY*6B4#kkF{J;x+4hhS!KB4dojy*sN{DfI0vzn?&5L@;SjI<2{Q35~;Kv!D_I}it#AO&R5 z1z}JOAwZ{45DtZK3OnG9Frx==@JZcJ1rTdyPPPPZ01Cy>1^e|6VUX(XuIln#;RcR7 zul~-+41Z>0;|p;H)R1a!_77MPY6Ecv?5aVZWn}~r1h1zLC&Ov2`V0=wT@G)fSC9zH zz-c+as$tW+{{RJ;pawnK2QhGMSHlnYB@ki2u1Bi!@80qdmgMptdyq{oANQ=|wEzi)pg3({3!J6~>EMmz1_f@y1hfzX%7E)L zv;`764(qNs+@uWo&|j{tKu4Buc4J7x|r6a4}) z4RNp!?NAJn3&G{DVdKyZ)}Udpw4$?L|K;@JwvP}@KI14(Z~*bI&_99&4gT9_Z{9wG z`Ti*+$j{zCe*7F3`S?G6qU`t_sGjsNOCw3nBs!n+^u&f5s_A;-L51p_wN*Xm-%jU7LR99i;Y%9Slg z#%hZX*T4t6iX~gnELx#!3u5}`)*#%=tzEx{9b5Kn+O_{}-=>O{*XEpZKTaH5_H0_9 zrU|0v$Qt)@=FOcyhaO$}bf>zv=G+TfIBB&3*d9;)mil<|<;|Z*pI$xo#96QR1Rk2; zXyQMO|3j_1pz?#^w0%=AKmi9Nus{P3B*?eSc!N(n(S|F{yVJs3?WcS$LNG%OH{`HG z53ACR!R&&2kh|g}1TVP{S7fn87hl{kAKyOmhnM$e42#71AnfkDp7?_?NFj$LvdG%7 z(uy;V0E=(C`h2>NAbIMk&`2w<#4<}QnOcymotSiRM-%Ns5x>-^+;2-Y*JQIzBSZ9Z z#=&$vi^mgv%nwb1fONA@KmP>OJnOt1QNB9IgtGt4JgW?}QAZzzG&UsPE7Zvd@jR1J zpcK>Vp}=G$2*XIH1GS)*VW%E;oZW}Yg?_cC9z933%^!PO_0_IbRYlLAj5^gx zritbmCmpfg$%iFWCCjI`UhgfEA$wLz$s>tEwWlk3W&J1LgvDBD;lj-0$E|wLP4L%u zE(Y#iIEOu`$r6v{DawDG)wCy2{$b`6Yhoz|l4W{fW)QL(>EoYR#KEMGYHB$JEN>I! z7u?F8k(nP`2s#BDenJ^%AJnKJaG6AYDdzv5Wr`_=k5lHkgpX-r>4O|T(VaVnslw+28rjJvY`Nx)D zMtYb$f3iO1n^4;Jrx0Os;%6FKj;SM*Wg_P#Bc2B3*dUL^1bHWs72}g5J{rO1A8rcb zgCJp+k*5|$s5}LdmQSwPuAlJ|dN$9QF^7*g*lFY&d-nLOkhTY;We;9x$@`x~mJyo~ zY_x%-k8e)d;}=uqwkoGW_(%tmGc^CF5qlE4GT%1z5Xe7hQ3zf@VjSXw+9|?di+Ajy z9jAE1GkTT?TQK4n!WhROx^}&gG{MpLumwlLO~V`@!@F5AxPEcu{;kpuQjTR#V_C>z($;69DATe zI70D;Sd2tK$N0w}sx~!9gyJ8?7zi^Ou?K4igAW7g!yZ85nnFOr8g+OBCQbpiw_(X2 zws^xEj==~uu!9l*pr1fOk&ZpYfe-l@L_R{%hLqVa7M}=37mF7leq5ptYN$pc7;y?S z#z7c+SjI0J;g3OB!)B16-0J?wAUWxfK0E|ZJHAyrpqy?Q?BIwn2y(K2XhRs7c;93vgfn1=+9vCdvR z!yKOwhClwf55)NuvoY3(S-i7 z%b<91DEjD#sh9}AWllzQ8_LL0_t%r7t_n6Kp-4ltG?S>#BdI5e2!{R@)qS7@LrqQ3 zP2MpQhd|YfEAfXz7$Vb|+K5m#r4vr?q*L(#j2v;*(heP zZPII9`oh-(ZG^3QoeTe1zGTD0+R{#B!jyjYWUC8xwzIJUZD>V1TGE!*w5LUFYE`>h z*0$EQuZ3-FWjkBi*4DPS#cghNyIbD&*0-na?2=~rR$|5VvWfDMl_Wh@{C4Y#uReQ?MWm8l8)L>@l|^2MY? zGM{93#xkZyPK5uQ8hS9yHuHD~kck|rc0?J-d4=wq=v&j`syM$o&MZ&uDqVwo%ODr4 z$CAx8FX(y;JNLN9ks)IbpBjkH$*f09%+ZcI^CKPd>g#1%q7O6ssV4qVSDB@CF(@CF zNDQvj$8c#TUG~=~O|A=ABSMjiL?k2RLb03|V~ajGx;z`n2QoMT4~6-I9C}CxGXCKX zU(EU+b#MpJ3M)xuD6CQCxP>(0af@4ILmID;2BGIckBTrms!e<}WgG0}9LsLU65gy& zHlm3;{396uU_~naVTgi!BQ$f+#6Qr@3WLZe7-Tshx&MGwqKY~x3aJAVkXi5NYy=(# zk;gsw5s3eO{M#U$;Kw;+v69HThDz`VL?HNKYAtO<7sN0K#tA}bdaUCX|A+@T{vqpC3Ajw2$&b^wDi2ZPYOAlGOzJ;-tmj@Vog1j$5C>TGYT{7Vhg(6oBo z5r~M$BOh*gN3IES4pY>c9RCm(ZJbRJ#{TKfq`(J0UV)E)6nm%i$Ob`(0Si*Nh|Z^w z0}R=^F(|{8+Acqc$W-JLIM4eZe_+Gk@!6$Z`)Ip8(M!SjDW?Tm3wMb&EY?SsgR9!(Yt zD{zq$T*!+cai08C#?^-@3?lRDnFsp&5le66VjQxN#XruW@PBloAN;rn!FUa~fVfUL zhl~g`Em4MlAO?KUg?IotUBHNS$UWJ^2SRg^_iGOm`;{)Ul$^>X=6j!5;R$*`KYAF6 zI0Ha~06&93zkm2X@B=?Md%pCWinIzfL8%L$f(TwPzo_~Lc;LR-C=7lWIzRy`pz;>L zxCeUhmY*pJhR_F~ni9!74>0KoVVSlMoU0TOL7*W)&-jNpQ>=wajE;%Fdq9khP{aQh ze7@g;!#I>f-VzJn3y{`3h!w8wkI z$9&YsedNb}v_~Ku3V8I#fh5R+G{}2I2y~g0l{1x=n=~mI#^xJ`ZU~2e_=f+B1Q3kW z$c?;6i^Rxl(1wuIhHK~s>iY?fM9Gv?$(3ZumUPLNgvpqc$(f|dl+=)Jz{#G#$!<7^ zZ|DY}+{vI6%Aq96qBKgP)JTu?NdV~vk#x$ZgvzLt%BiHvsSEzo4m)`XFT>^h-ySx8MQx^F_kJ36t z-bBvi6cn1`ir;KVxjaqOTNa924%9kM<;2eHTn^T8&Q*cVE-Z*CQKk``!}45B?L^P? zgpIL+%SnWtxpWq9nKGHEi2Ah8`^3-u)X)9o&;In!{{+wg70>}C&;m8k14YmTRnP@x z&<1tT2ZhiGmCy;L&l z7lqLnmC+fc(HgbU8^zHa)zKa0(H`~D9|h7N71ALk(jpB~R|#(=s*FGey%hRnz}9Wz#lw(>I0FIF-{m zrBgZm2Q;_@FF~={6wYV)nS_Y1Ko!(MCDcMS)I&woL{-#9Wz)bJXYzT(s9bPI2J zmsFGugH+E=<6l>7%kESEo4MSj@Z?EdrY+1RbUlXVGUMURh2(X)?5vWT0K@}eOAdT#%l$N&D6D{ z7*=YPRSNS~r+7uVLDp|&)@qGMpnx`Q-ByyI%V|AVbB$HWdcSUciY7{l#mLury|3>K z#xtafyR=J+8`YrTm@G4wM!T!#Vl+_{EWzRkT141_P_q9s+t8tyST++w&wyBtjabj9 zGNcIEpU7B^rPz+O*pD?>j)km))vP+CxQs2?iyc^%Ju{ZYS&FSgi-jzM-Oz`%*^>=g zu^3q_qt2o=+MA8ogGE`P-Pn|U+Pp&Ancdl>z1g0P+JJ3HTjfw-L@o*Y4pCbKncKR(jHKfTyp>zq&|9dO+scqBQ2kdVG8K9f zhQw9e#bw;ab==2=+{MM3#+}^AwcN|a+|1Qn#jRYNJ%}LUgF4WI;x*pmMc(99-sNT9 z=5^lZh2H3u-sz>@>b2hM#op}I-tFby?)Bd91>f)$-|;2i@-^S_d=d z7=(yO+xey6`nBKt#ozhGI<&2b{Po}e1>gV{-~lG!0yf|SM&JZi;00#j26o^FhTsU6 z;0bo%B>D$l*qy;;)qhnqXL&K^c!zel2Vw97U%&-wc!!F(hlUkJRdwMPc8U~!1`cQd z!)0Hug)okQ(hmkhOwEmXNCzs=f=-AyL-3n)sEE9<7axYN!f>MxB)>hg<*(>PRNBg@Pq$PNQM+P2`6^rHx3FYu7Ciz1PZC*-*w+5 z(&D`Gi7ti>Z@Gpihyp->hC(J|QwRiExPwdJg%*V4M}}k?iDEk5%Z?)4uhro_?p zQicXP2nH)agcWqYI zZq-`WWb(L6E=U1V_GM@gV_d)k9k_-=^yYa+PjF`D6~p9%faXo!2`Ujlq99eIu&PW* z0YJFsR-l7SKm;8y1bRpZ>ZIq0{!IUS_FZwl;`fy~N81Q0$p}_XkWVw0`osve(%N8f z0YQj_LUsgbKm3FJ_vuf1kb61e;^B8fP_SVnmvF7 zOn8S+CepyMce$gMa7+hfj>BeHPC@45QTBLY?;PI&Sq|+yXiZ&=zM-s z(%uOyK%@{T2h`XHNXUV3*a0=z0qaYGF!+ZcFaugRpeeYuW3YxGfP$%jvwR4LCrAMy zFo6!R0#-n7ht6fqZtnjku;*^;oX%k{q;8J*1U0aREf|?IXoNaIjU_mRD+r@4_=F(% z1u6LJJ8c6#xPnAzgg4mmsmO@EDgf0q2bV7 ztm_7snujWzhj4g@ae%UMxXW;Ox|e8&boh_IWr}(k2U|#ms&?oqZ-*p?B{PcY9=B9K@jc|8LuJjt0_ZzoFO;=a*MEHbP z_=RWqhIjafhxq@9m-vZytzNHyUl)sD=kvVVuS{oReFyntmSc>+=Pv{Ewy^V%S9#_J zXTZATdAHV;m-*)Q?25)`n8)Io*Lluvd7C%+K5vVi7kaeT^Oq-h{t5~uc65R;ho*P> zr+@l?fO@C@?4h^%Wh(j&#`Kuu33=|AeBjB71j=wA`*8RMvoEHO#7S-V$%AP7V*1Ky zsQULAicV*DQ=ALC{}QC=6pgw1zn_Yh*LWL0d4rf~zFY2!(T1-es~iL?BLu>l2pD2n zvztiA%HLnrX&8bzM>E_AoKT1hNxHhY6dl6oSCnsFFWVW0+Cv4(EQ2z;N0t!)QwAZcp&25Ml2*i_nX_=(H;9<{E&DgF(7!rw zLJexOCzKv)|B8hhc&hWSg@)S>+!vddtxp3lnVyVwATJLc!w+o>g>#HHp#0MvHMXqw zOfLluq@XaEgp*c5%U}b^FTK3hnmM)*HO)ZS@bk+v_|YPpExl;-ATO8*CL1rc{A1%k z0@-p3HpKb(BalG~IV6!q8aa`1F(qdcM9l5f(@z*l2a!C~T}0F{6k%uGH~;Vi>%2ukZkes(%nDd?8D@d zwc2_suDR;EYf4GVL=&xkHaF07QC>9VLRDfkPiO;q1CM3a?>gzQ`{;*x} z&V?I(IO2)t+;c_qgc~%mLjzUxP)J*3kDU?iW6e12nDaU4p^HAcIk$C&=s%y2lTOGG zO{!4VvCIDVa`vQ4tJ~Px4%OK=<^B7ly63%+Lcg1>IP%FWzdZ9qGG5%{PeM1j(F+kZ zQRW$GgAn)GWt1I4|9sQsK;wTCe!3j}zCQa+SHym>*TLU@^Yz<*KmPyu_xh5OjYlu^ z^rS?&jASn(gp)|Y26w=MS?wa}+sORrcR2|XFM`I?9|kk1!42Y%ahX$y46%t-~}frL*L<$gFgHr5QDg@=Sie3B9xx7EP^bK z)T4<`WQtAXMxSs|v0_xL;kcAhq z9SBlxQIZmaZFHk|$O6D5R%D4C3C+?dGARFr_+wK3pj$qu7R&nZ z(jQd=jJK|*IXyKCFm8*abznEC(4RYop=#~NU=GSZZPAOjiXXh#kIksY~(#u|AWSf^4qk953)8hcdP zJf<;?acF}?2+POt!XZp*Jn}jVZI5^S$;-N#jT*NhQLGjssBw&gFzt9ozzPC8hP>q+ z-?EN(l?YFc zyn`Q+(855-u@5V)Ej#w$$03=49!%Im534#wYyQy-(lr0<7<=f`AdbFi{M-`6E8< z5X>|h`i|Df^%t^P#y6NT4}m-b6T*W^Mj!xor`3omH# zjIe-A7<*g|FHS+9Pw=Z4-3Uc5_Q4Ec2m?<8>Bcdb(GC6NX|w`~MK~h#AG(OuQNrj& zt4<*pObkS>kT^|a*Aok2_ht zR)}NhM?a^~!%RLA2Uf+0Cagh}FyOGB`e4)`a!p4pK0%bnwuLT&iN!+#WR7kevKOaV z4J5F!s&<4!8?m5pED!}Knt1OMVxmQNiXo70ghN{^T9s{h!H#0!i5;N0Z!MUy8al5A zvel6AdO8#0K@+;rBIVz&DAEpyJynj>n@&bTV~S|}16uU3(z>w4F1aau0s^@*e-thn1+=rCEvXZ0pO~+91+3+hOyo`&i0bBq~p) zY{Z&NOIsw_7C&Daq?vQw$I__gMSZ>Hn}8FWB;Bp@m5Xx35?Qo~SBc`IVPtsiU`IRT zAt;IL+jVCc!da_tLKRwX@xj?z=kN<1TmS@h{$rCMnmwes74hBZU*WhuE9gMY^TL z*mFNT;uHTHm-F2_TcKSU*9;%X`h$|_x5qV@TcQM8q zMQ9dyzt6)O;nOEXT)jPrgzx&?`!7QNTKS0B(D^sx{ak;q{`FS}(K8{+@MBecd;b>F zU!)E;LxZ%cjg7k?eBpAu&DqpM#`FjP`j|+0QNrm9CKZp|K-4sO&q72C+k_KfPz~FV zpT}7Q1sa`2$j#OC%`lOlNI?_(ogfN2ko);q{Ds5(`Ib}xm+K)AJSc-ZfCE0Q3nY93 zCQz8diH#Q(!zuVj{DhMmL7cW^65hQ3gJl6sI*`<#jKe&HL)y67Qhb9#Kunh~A?Abz zL8Sxd?1M1bPF0~?J1B_dClLw2|nA3g;W zf*c*r6+g7YA*CQ9CSu#vo$x_KzPO<386WEnM7~)BeF%ahfP;M$L?M8O*kD2*U_&VE zL2EVFI}}0_`~wrH0WY*e9DIThYDUxS5wlnWA6&&H$U!fJ!X?;(E$~5qeZn3TgD}W} zVa$mz=)ph4f*d5mIG|ydG=)8^#(!YLOvFc|w9HH}!MtsLL+xPL~`s zM<^u1CD?;if@DngK_W~8KV0E;?87)5!zo}?gA4>FOhap6gJAGOa{dP&u|_O(125FW zYRCpH2w0Kz0)=g-Km^h_T*_9+Ml9sXP<2>0x+Q=x114AuBv1-z)Wa{>$X3`0Exf~K zbd6#DC*m0g2LM2FC}#OI=J82{D+QNEM8ZI8}mNh{C#cAk8MZsFLbVqGigDrH!GuQ&j=u1K6Lzh`YFXRi<_yacl0yR*B zob8v}OaoN#gOsiZX7B>9^@uHSjx~e^z%|7XMLca=v=mLeL%O^XQ$a1-v=24;+Zrr|{B zA;t0GQjip??#WDjgO;|3A(}%te8a35F7e<~#S|Ma$?hQfO#y+R^~@7g@M*CTuG8R4 zF4YzGG(}691Ln}wQb2_i5e`u#QwEwY{N|5<#@qPi?Z!H$>jIaG{eu=*f+d85J}gBn zG(tLHVger=19(uQ>%2uM2!yc0nl^}x*F$WG2$Sm_afk8>a9a|L|b6h;bs?xs%9N90auVD88kr{bOB2?ff=*`X4YmC zKmi{}!4wR_4#s?}V)g)nU8h4@%H+|_N+!aVeXddRKmjAf!53U+C1cG@ z#0iDQ2qsYSDYQW>3_^2&$2_bBK|@z4bPX-46=WsSmr)}%jEZZBbCn*0J#>dHJi~zv z1TBaIpvmJekcgK(gb(VKnhgX@(*iG~R!s6jSkOX}F~ecMJPlH zQ=_w2CyxiMGrkRGWPZHV|7l6ho&ZX=Stj3$bl#N_&}l zOle?n!+HqjG%y2{6@z;9$xp??P4QQboD1!MMUO4RGw@?*5XF?*f-vRWq?8@z(8L)61|=7#;Z!Ek!$| z1N^;FlUEUvmu0OUT_kDJ&pb`FrYlJVkJ*4x+vHIEfDrnfxS6-?3eGV*uec;~E$r%$ zJy3@}G%A>H5=Tj0?Ld;cXbajRY(?}@BAxBoChQ^VIBt}9O5E(3FFIJSV7_2WlgnRO zyE#bcgSzU5t2&d(ZaSx%tj;nzsH0#Tt@HITB#Yni;)J@Yqq7`qQmNZbFcufKV&0K2d^JH@v8mJ>zlad-YMgb(_< zvuC@uYs9Ea1nL-o0lYKvLFNK(ySbk`M|3+xe9l6EySOX=C_MRK=b}5k*ZU$K$JM3} zxvG-8cLcIryS)dzz@H&A^iKk=dphuYxchs&Qv`SkJj6TuIP_0j=zGEsM89*yzenam z6v7!K!c18=+|NDT*S+1}z1{x<01OMyIeE|=zyS;Z!+Wgm zyagOoKnWzi;x9hqH@@RPKIBKf6gCg zpFZlRzUrrb2ylR-ke_vkPyi^vKnT9Zzizq^1v`jC8!m6}|2~`j{y2=!@3&#_7eDeR zzw&>B@;CqQe*;M&Kej#pw~!RJnUDFjp*CPY^CJZIYd`lBzw?hj`L`kT7eDhO|M@%r z@TY$pV%zb*zx$Uz{nx+sM}PI-fA#18`$s=Oj2jnDV8Mam5Dpyp?I6L13K2$3IFVpQ ziw!4Yj5v;=!Gj(-Iut0;V7QJYza<=ba-_BUAt-n1TbLNY~6YG^6}fZFJIxoga_wCj9BsE#*Ggrjy#!iWy+8(@B5c|^Wn~Q zGh>!~xpHCCr%w|Wotd>`(ybk@hHZMXVc3>e%g%j!ab(%0MgQi#n|JZz!V~949=o>e z&aLx3AMIJRbkD#s)Al{w_H^T}zjFruI=pJ$*0HBXtvL0+eDmhrjsMRr00npPAdk8GhzylFX(7^l{Y|z06A;gcsy96AtLbVjkFv1Nv?9jsxK@3sE5lJl3 z#1m0WQN$@CIL8tU534rl#Gp1ZWcW*cj;!NwYD(p49mf6#6BU3cYO zH{E#QjrU$^^xd~#Y^M2F-gfQ(y*FKc2VVD|gbg0pV0Z^E_uqB2cmmiK3s z36|Mliibve;dZs@xnY_mCO9pe?Xu=Bit8%c--eN<`DuSuMw;Yw^EH`XcPYNOY>ZtF z`|E*)Zkq0n*9N-mx8=UNU4&DHx9)#_UK`!Cm(F?TvGwNIVRjiWTL0$|3NE1 zNC`lI!38|eFWkG@5m%nm-+3pU)Kj02_0-#XoxaRjKkM?>HOKv*)p1XUcHDL6{dIFn z|GgdGaW@Be;9Zx!opzl67asQCS?Bik(t$@_cIs1?zI*JqPdsHN`s&q(-Fwy3*FVdR4|w#09q!nYJ>X@oeDvAh^$-ZZ`Z2J4 ztNTxW+M&D)BCjs*C|;}hf*;@6rG3vcpZwDIzy1MmfoE}EtKM-z%iU#!B&4DK6xciN zEl+hZj9>5CcRAACMTm8&q3b?)mv=xy00{^kxb*U%dE81sMAFq?7IY+MX$x0byplbz z=qqU*YgYyeW0bf!MlG(9jRZPl6`6&sG;ZmQxgt@vutmmcsS#Rp^kRYj;zus}aZPpP zBZf8?sRw{4T{qDkUaQ70DBc z5|s>c)f1t}A51;6m9@0xEpeGkUG9>XsH%rNmRKhTEMS-punPl>sh=p;#gV;q<};xg zO=(V(nymyTBphT+28eE%)%4~!6;(xWHfURkI;D%sIZkz2l7h!{z&8H@Pj1SRL7`*| zBvmQH7|M{9q~vFOF6hsHf|8$_TMO;Zsg{H)bf5&qkzXL`P``YVq6T%PMH|FQjB1pk z@@XhT<%7}b9n_x>#Ska^Y0>z|$eu0rBtAn4QeQ14EoxBz&mvT%#`LF4ed$hz`qHRQ)v5o9Dz|{z)10m)pEIRuQl&sG`hR^!!G>z2VL#r553+sEqL9lKQyD)z4C*ug7pVs1>0A|-j%L| zWo%&$D_F!Pb{~c1D_$RqS;N}Zuxd$cWBpoKyVfPKo^>o~HIrA&_I0nGO>JFHYudZK zRxP6?t!-<&+O**Iv83heZB?sV#saslx;-p}Dw|i{{v)=Y&FgQ~Qp4RwcCggl$7CgI zUC6dJv)gTLWbcYyy^8m+)Mf2vshi&NM%J(3+gb2-H@xocYyx0_mwDinH}aDXx4x=ne0C{t?5M>>unjAD#f z#3MHGiBX(l6|b1ZEq3vXVH{%_&zQzFw(*T|oMRpDILE@6Mm}(=7HpLG#YA?okz0)9 z87q0kOvbU3dCX%d7dgsFezJ(Mu!E_knE*99P1m4ssM*M>hdT_Iw z_Yh|}&za73w)36woM%1nna_Rp^Pd47Xh9E}(1kYip$q+waqOc)KqiA8_<(3hPnyz| zw)CYjooP*5x({dIL*~HLs?uE|Eex=L1kNm?4%fvN>vZ+2DOm??@S{Te7zcD=ooikH zGwK+6@JASxcsxkF^)3?70Gd5CuFdgp*UfhJiZr*6ICO*7X|eSi639bsZ=2iQ_V%~I z9d2=to809#_qoxXZgs2suDsa8uS1O?5B@`~C`uxO){}32@0;KK_V>R59&mvVoZtmF z_`wmLaD^{i-x1}99H?FEalnBg#;S-2MJWfaFwr| z0R~+F=Er-SG+J(_xjg^&T)U(V;}Q~PJT4;50lr$ID3+0i;lVOd~DV$b^I7E&>j{Bb}Xh{W>jwbBXW0>#w&xH9sGp+Cy^mrLPOz(;|Wu z2%iR!-w;~vagW7bFeQ;BD#{_A7^eA;gw{a8I{e&(}Mh-S2d@mW7kaSDtgs*39G{lHG>K+ioykM#aw z`_w}9(gFp74?+&0RqTQMLd3QTutCc1?CQ@S3<|IKVe@utxeO5goNxC3G%w!pW3_Ax zvtBE;G~)%CD?jXtA5ID9>Iy#?jRj9|>a0)t{^1$^q18_BAB688XaEA0kOKcf0RW&b zFcAOtp&KsY5`@7P>fjVk;ThiG8T_FT(&8CTfp7-l9eTkQK7kMVAQ6sX5NP2aFaZ)` zAso`;4S3-n8sQSKVGlw96R4pN@-P$z;U9_t6BF9xB{ zG$te;8i5ZW!5VC#4;q0N{Gk{^;S!2rVFn=-MobU>;S;E#4*sDGm*ES`5EA;}5}3gs z!r>D#hYxs>xtQS#{~;BRp$>10TWIUizdD zmZ1x>01coZ7E9n1b3hH~gCD*j1kAu5IG_$}p#*H95zL_k!hj!2AP#sT2*SY(y5JaM z01{##7FeJTKH(Yc>PJHI=Wwpb84{6L!EUlb{b6=pEi*299wMiXk$`fgkE1EqkC3+JFiEAvFIX2f6?Y{Nd9; zGA-b;H8ZXoch4^Ia{Dfz9Pa`M{=q*Tqyq1Q7n|up{6QG7Aqcvl7K)G-h;Ro!4PI;^ z43gj-rXe6Br4M$XF4TY`Z9!|Sfe6pwAEq)re}NhQ{-Gf~GCnWC2mYZ4+8_u>Zw3m{ z{peFJUo+?C??))~7~V4pu)qw6uo#YE25cb)j!_tRAqPT%7N{WxilGpg;2A>T8;T(u z$N&nYpbgR?7U19=uQMEkfpC5y2jTz<^k7V5!4{_B7-l3)+|APD~94U*s)Sl|uZ z;~TINl6>$+{|*7?WApAZ9MjJ6`13z;AWQmKn#<>C)1)4VgU*Y@gHKL z2QC4d+JMydAPE>^2|mFZnt%}1;u0_+7QWyOrh!h?;t$F4AIKmP-T)J7@)V$e5AtCN zHWg4OFaA`}B!9#VuE4JN;0it=2}o}b2B8rD_23L>fetHGPwA})`2h>^(I3pf4EUf4 z;E)-5AQYfr4~+32s+A6w4r40+)gmVg$RAQYG(2paQGg;m$A zPXX7WQ1enPXkbzQ(m!ROFCXLp2B1R#16}-KAfACB-sK%qLL1V-9KxX+y20ws0wGq1 zA^71Po}nEC#2l~zFghX}tU(*vp&M9lAehS^K4hwP7Ki zK^zuFGqfQb80{H+2V{@ua>C(qhL&jmcdcOSavw;q796lHkl-JX00?LR2mmxc=%i9U z#2!W~Fg9ayt?e$N z|B?m{_i$gNLfptttqODQk4(V#oK$IfF@$`X_u1mFc4PA-S?Y?0gp^FmqXqcZbFcjk0> zhk3Y%eHiA<@9KaIHg`1CaJcA%@P=8=!+yAlo%o5Nc;VzjP`$BsQF!}Spm5a!2M+fL z{PQmz1OX6$03KC>w=F`@=c3Yhg#8Zvh?R&}a6;DaQI=?`0EW}Tg&pKuVk9lJK^sJNlDi?2C7F^jIg>SclR3GQJ^7PCIg~|t zlu5aiP5G2jIh9p;l`B~rChU!MRP*Y>Z1=d9^J8sU%6U!LE(5p$Pk}$Z7?JH_aqmI^ zU@7f3WOS3*miKsXVL5~UIX8->d77!YnytCt>PeUXR%;qi6b$!;71=`;pcNmveEH~{ z(K(&fd7Xm=|5kT>&6%0y8K2Bgn-!|?1bA@Mf|x%Cmi{4hka?a3nquYSo#zjc2#K8) zdZ8J*p`|68{ntIVS$aieoW~hc20Ei9xS(y$5)XP%96F>$dZZV6iv72Wt&IVHa1pe}9*&^VfB6Fmt^Zp}C5l2hdMPkTB|ZEdXOs@ni5BJO8dIj4tVdMoa%HTd6WT zLOSYqllHa$!+bx*tc!R)mDfTBgtF&Xj1FqI@9%PV??NO=03)h<9SXYd&$cJqwQIMw ztPPOB#HQf)wlka2KnZhVJGt|((aiZT&O2H<@AF<6pBpeOe)^kLtwXF~AHIPBF?R>w z5G;gh3JiC%moz{4RKROjnk0gn_Qk?!Oy69OCmC-hm(N$~2Bk0blFCiw=0Bg8}7p zc+2i|D;F?;cZO(7y!(4IYHhS&m&QvxI((Z^fIE)e$Qnu~W0|}#oO}e&4ssc71cR;{ zdSL`hT%vpYhOMm~mQiRa*L!t$c4g!j7HzvVH+B~zyFVMNHKQAzK^Q)qABK$9=(6HG z%-Z(5){;Y4G~*Y(VZhP*%jb7;L)XF0+%Cf0%+dM)#qPbeW)&Q8zWLfi3N%6zAv%`9 z95B2v!r>Y6VH~jG9lGJJNv|EAVI0gMVA|mnn1LFmL1i~19e8mXNcAFQ z9inC$rXk}!=+-*ufrV9g?)B8>rnDPEl+RavJ#E8uFnV+=Jwm z$7!Eo89p)&mjM%I?H#y2*s;7D%;6h&;TO^YXk_*;?pp9)-SUSJ6Xf>fcL#;DUTa!? zAbzavbwz7z%@)eA9rCsttYIGB1#r7TGd7(Y5%9eOSdf2UuRnwW900B`nnN&QOg-Ng zT8$Zw@f81|7n(FJ#6t7bV84CON>k`Cb1yB8YDD2n2VxMgNvqkIJzhxgO(kjR-*1UHAdWE9@h-n(a zUJxJt3+0hwMvWph()`ElVX;frXq`GmGnB|;ylNFxc8QuTVWGzTJ7sHGES$7reR7J8 z*T{mlVx8RBD^@sup$z_uwJcO9u?1rto4WB5#bpeQ+Isfy7%#I0uU0%I@)TTz25E(2 z*0vbG!jvmpzKl7uX3g{X$@#|5Ucr4ix?u%>N= zxui)g@IPS;X&3W%tZ!dT%LMvkR?}9fSg~v|+-i%NMXZp?F7!9<64j5kdVTr^>6vtk zm^g|pHrJfJwzQzfqR0z6$cmw8`TNEYFKsP@Nl<$Aa!N71EQk|e!`UMLU_S5I)Rr~> zbj1)(w)}F^MT3QM%0ozhbYXP`J@gAE&uC){MOR^SOk1(+qtQQ;1*V=bkYMA_KN4LM&M&=q zePBKFt+jZFWvV-F~qOGzcg~vF^zOX(L1yhV~aJq9iz=91pTroKi{}|R5!$FM4{_j+fzdWhf@&AbbkZi!RfM#~@49 z%Q0!r23%;Wl{GoPg zlU_(HACn=;IF7}^e2fDV2q6wL(sZm|2&f<=35P8}p%nNT#A_${5Jluw9Cpp4YH%bQ z>^>n3$P@z`IBCmKq@%QvFk>*;v6l>A3CmdiBXc==2MQ_EBf#83NJt=3VUFO-%Z#ot zq(f3=^Z}!Hm}4LB*bz2%^pA0LV;=9IMmo~5zH7E49N`$pHP;u8biBhJ-AGe3-w}>) ztPdOGm`69H>A%1*gCFm(kUPiG&RKQ?H2?U9IP%fWXlkP!;~1ww%Q+8jj>8_~0L?hs zVUBckW10GzhiS|a(TDy6o#W6EHo%sTbZEo>9__%!O1{a>eY9hw7&XT{%<&CuR`4CO z8HY*Dp$)4=OI#CM)aB+eaADCs!Tzq zX`$~JM?P}e4r}ynqa&4&X}%E-h!zB(;lL|-7Wn+!G{*G*=I1FDWqPB>zgrf)QLecE70 zK1BPDun7a4;dnoyBJI%ooeEuUH zqGf0e1BwlE)Z?8ydaYHo@eY5)g|?Fa9Z26E%g~X&L!JF>YeDVtje+Jgnl_}Xd*2%) zTI%SQg~??>J{L?ES>PWGuz)c|$KOm81er53O?_Qy4}QdKU;$feoctBD$)08&d|Z*g zL?aM^OhXvX639LlOqt1!#$T1OuxLcHqJ6lM#B0sRhYNG!e+cZsE0(c?VJu_RsF=Pw zwlQjC++G_OX2k;o*zRs@uMZ1M#Ygs+g#ni1(@;iW9(FQ|YiybJs+h&2(J_@B++_IT z%dVlpE5LHd;PzsenSmh*hHZ@E%S714mT~bP!G+--+1Ora4vg+%hTiD;I#QDynXFBt$K#f+6=O31a4Qqm&`5tSHN`mY;Ido%5c`7~EDE{Le-8AZ3%xSz zHuJmF-0(#odvY!s_oU7Lt@Fw(edo6L*tpBmgAr<5ZD<^xA3L^oT z7bNXz&)2vw*K@AReeQIxyNil`!!zsk+*zhN-(`91zWY7!?nS!YVWjoL*WK$xH~Bww zaSc&qrsY4V3<&;F^TMcI5ja=8=RXhn(8mz(?(VbbL;v^FtKRdBFZs#Eo*5&d{qi7? zz~u{~fq!J;P;Xzo?|%>cx!YAjMmK%%kB|K1({<#{Eb;6Ak>AbKzB0B~zV)w{6O|Ds($9h5C8bfe}0BW~N)^_J9|NfgtA(ybx=Zky?PE3fJ%@ zmQi^yM}2Eo5F~JW8OVYyICOO&JoonxjpBkeXoIhG3>{cOa)wcOhHof_aY%=CXoqHag>?vrbhw9ih=*LLhfwH;gGh*hScQdXh+2q< zi^zy%=!i}jhoMjhI(T3|f_|`97z0=knn;A2afJUs4WA$vqezOSXo{zZim9lItH_G2 z=!&lhi?JyGi?c|JwP=gCh>N*MiXmh}r%^7t2#mofjKfHb#b}Jjh>W#(3ZIZZm(e2@ zf_|q!1JPF)H2?$#Xc-KM8AnKOH|UMu=ynm;d*Dcpn#*FECVVmVu3hA%xY3 zfHFc~wUfgRQf}jflu3z__TZ5JSd_Rll>InF{TPz7G?o9D z4mElIlAN(zmT{Cwxlzs{mbQeFC=`2XbV8lzcf|CV9Q$#;pDf2pTxM|W(Zd2m$bn=ZzkUIuRlmwGbx zXx90f;(2N?wrp`1WY>8bO2(b=$#iHoW8r3QE&^z(VQ<}5aZR=lmst=%V1k-yjo4`a z0c|&Zm9YY#DR{=&fUU`YzG;s5!gSy1oODHatNEQ@HY4BJbUHV9*~y*wxuH}xc&v7z zXXbYedUPe4X8Jjzh4-S{mZAq190B+PG*B4V2!udr86=Q`KsupAN~A?ZNcfA zP8pm$;;97Ls^4;z6WMtcNvZa!qA)gUy*N&dYO9}mcgPy6HwmlD%3{5Es%o~FGKpii z3XlXTsC808^4m`VTo8 zp!h-pLRy-2Hl3QPm=D)?cSm8`s-Duh83Lh>x+Qfbd7k5zs=}&{H#cSNI;suJBkgIi zzxkTkDy&%sq3wyW0O_#s>aYWwbBP(S2P<_UyP8C|u+!?Xj;gYoVSy_fCnfu>*e0{9 zwy-nna5$@$ID50Vd1U4}Wjs=}vy^%f%NZxjBT6fE8k?LHJG9PduQV|KfbUokI1nRV z3SVz3oXHs@Wh%BwD?<<(W@n4G`1zdof~Fs5wq+}@aEo|v+qQYTrm>l}Y@3>uGoHXo zIez=Mz8AM)doN1rgJAjsh4BKRV>+g@g8T}om20_|i@820sF7EtTw4R4OBocPcKZdS zMVPs#i@K?+y5^S|iu)psD>`a7j|m$NyZ|A$YrDCNySuBqz0145>$|}Vyu&NJ#Y?=$ zYrM&eyvwV+&C9&c>%7qmz0)hb)l0qCYrWZvz1yq3-OIh->%HL%zT+#t zctO&on)##!(YQ4bIu>9$1tGhckqBlm2>-wb{OiB{3&8&?zyVDEzyoZ+1&qK4tiTD( zzzgia4Gh5#EWr^>!4qu36^y|btic(~!5i$s9Sp)BEW#m7!Xs?LC5*x+timbG!V=sE zXV3?mV}2*6el)V{NN8kEW|@h#6@hxM~uWtti(&q#7*qPPYlIT zEX7ky#Z_#@SB%A3ti@Z*#a-;hUkt`!EXH08#KI73>bSY>`w#C}1215JZk!qKw*sb% zg!Q$QcZ|n*tjBxI$9?R_e+ReD%*(ypf;OTHwN$S(d>M`V0UAYcI&pv;sZ%DH^CzAVktOwGw>BeuW?<>!20 z$GHT`#{YoK`(?UxOc}ad&F75H>3n)NlF9Qr8pOa5TE%+Eo` z&XhQ0t&EukK?7dvxZo^(KuWpL+|Lc|&=0+Q{t(QYgT^#GfOvY$$o!fAP`WFyub7d~ z5G~RpP10TG57?~9+Z=Y65zEG`(Un00b3Df&ZL=dut`_K&bD5I*Xlxd^lMNZo^xBa) zX^;C>(npQd+4s-d9AfZH8C+}3g#or7z|k83wwDqA(&uO>=}D1gW-m6v4?w(WT5TGQ za%88*)hVf9B!*>!Hg5Y6*8P&yb4}O3x76)L_u>%pY1OG4s`Z5EV@(<1od4EdQbwSayPY=-qcVG2wo^%KnA+;4^Z$AS%4DyT^Kvi2d13_ zIbbLuBL(SANc%t$Z@>co00}YBDCzD0NW4%DEU?*ZF6*-{OLrZ#dF?rw5X(I3q;?vh zC_ov&UKl8F=YlO~??48H00~@z2B4q@@36njpa#^?zh>YMa?l5SfZI*L2Xb%#8UD~(r}ho%k`7=K8tCK? z_To)((hlJAEaPMjjWY74!I#ZMt3M_3EJ1^PrBi&l^6#*Q(pbJQ^c9YS1*@Y)32qX$ni87KK8mmP5cMVq9OGr{+pO7HRYZWKq`jQ1)WE z39w1;_HRFa?fmADr|WlG&jm3Amw^K~00bhy3Rpdyl_$2D0xv%@X&-=aa`@awT!7u#7PyEGi{Kt>{$*=s&&-~5r{Lc^l(J%ee zpZkuw^r-*Na1P>75A_&d`?N3npdb30F+?kG{^yVW>979l&;IT2{_hX}@h|`LPyh9A z|M!po`LF-`&;R`o5bXs24kTF6;6a256)t4h(BVUf5hYHfSkdCeiT^Zi{5Q`ZuRZ?W z{jxqPpC*TF+-b6> zPkZz14JKUJ@L|M>6)$Go*zse?ktI*2T-owv%$YTB=G@uyXV9TVk0uQ{-|3qkb%lI4 zZzRXJ|E~G8E3-xon|XEn&5L#($D8}i-`@Ru`0?e>r(fUxef;_L@8{p&|9=3%Q;W6K_NnHd zRc51shL||At36iw;^?pH0<`c#3^UYlLk>Ii@Iw$o6!E_S*)nOKeXM~?t`&ZOi6;2O zBd@IyYqar39COrhM;?3hkw4W4JTb*uWTWdr_gL}iuOFLq@<}M8lyXWccZ_bj*W988 zK^A|=O+Fddo2Nqf$gJ{AG}BabO*Y%y&CHET9LY=rSIp!GnHn?+#`17r86*)~_@U;Vcc>Xhn|$V(W*&3KErym~{%HrBU2TDb)^Ps8CY)zNnP=Z& z0~UB-f(zcyA7P|`B9_$rkJE5qKg)Kq(sb6qmG8x$}&!9SDaQo zAgbP|hyE#x;83pW%uB=R4$Ks#v4MdGqNs zW{TnGonF2fC!KN3`6irWx(VkUbLL?t9DcefrlfZSD#p}jm`M?v@q3+pe){XTe?D7c z*=Mk{9LCZoPZ?=>FW{5#T%wU5aOWj1(v9QH(-+t2%5|^WM?UOvDvd-igU-5N2R-;f z5N^smO=C@`rlApdP>ePNG#*EOK!X>?a5oN24gXBSKO5eJgCXQ$4}BOr!H|$TH>s2V z05x)(;njeJN8Ct@ocMzlQ7bPr{9zTXcttGgjzDBW(SfkD0_Lp{Mhx5t85@{IG^SCF zJ-iacpk|F*{9-m{oCyn+xDgVxhl*?DV;}t}G&vP$OGX0Y@{YJfL;hn0Bv=6m3R%cA zLZ>Yn?9E2b^G8f(Qj=C9oEv*bq<^H)L8Gi#@iYR0AAo=asB~l=|Iw%k>1J2|=u2SI zl9mWQ>Nh*wWG{XBOZiN&VY@5Pfow4wFe)*LEiB+aeqaF*fX9Z8`wcY`fr)O=Qk%U} z)&BmGj=7a&JdN7Ntbln=bf#05>1cx)z9GNf`EQ6Osnao4Xh0a5GB3~c*lsTWF}GNJ z;uwh-Un5S@4$g%m7B{P2F@Et0X8eN|;Rprj)Ok^iqSGIk*g_a|HaMq|i=GG4g(#U= zN|gE}n*RU+G*3B2-SlD)W*bB=7*UKy41yNVz=R%Rh6!6}#2T1r#LM{LGM}b{k{M-c zQ`0z-Mvx&4dT?VPi6}8ba%7o^sHXZy0UF|y-Pn-`NNzY z>Ev&Hr;*tluYi<=Q3{fq0^~;17vrf%JJ}9l zaZmWK1SGn^|7Unkm zVi@<)w<3iNNz;2$5&Oi!|9HTT|50J*#aPHg{voHXx}xmdriI4+hl5dk;vGMEYrR=2 zk*$2?fEl>F#YAr=3c18)>gLHl4)RS-r9n!ns>)bqbDO7xB6uqQisNtVHf z&;DZ^{|JRO+VL-26hnIXvPU{fl8)9vTGq4vP^Or1g(<`fq=kbTV5f$j1Uw+v3Ghko z%6yYh@QfCGIK@990EIw$ztM<)z#$g4z{DPkaS1+P;uk@qb+^5pAx4nl3_extmg&qT zMNU>d!{&4(^8yDr1ho-8A>AG-3Rh5sqY#B)hCy$}-){$8;P{EE8K_$B-F50ZH@7G9M3qYsj-0#T2LchBsqE2tqz`i zT%r+|jHlDM9G82dM*%t4$j%$E^FQY$SG?lxE2-`e*F|tvyu5nd>%PMSzfmQ~l=*II zP5=cE`vC)hXL=LnPBr9EJ{?tJj?zQguV|13&sF5o%{L72>+l>Rzz5p<`SRz0ObUp)Y ztdsyd6_6s`000f#Kn>&w1!%zTi$D9sLLw|eBRoPROhP4GLMCiNCwxLEj6x}#LMU{Y$)iA( z(1`To2;t)h4&*=&1VNsdn-MI-&^w0zIkyCvi@wW108kHU`vg$L3`9X3L_#b?Lp(%8OhiRoL`G~xM|?y`|BOUQoJ2~jL`%FxNIV5Sr~{D@ z2zpvL_;5ju_`u%b2!2?GLP!KvTt!xFMOS=9Sd2wkoJCr!MO(Z@T+BsX+(lmOMPK|y zU<^iK97bX+Mq@liWK2e7T*hTAgtsa%>)1Q_z&L(}M2~mipp;CF^njC>bdQr{Nt7%Tm^_i0|7?$%BXiN*OYz?NA$)sE=XR)A_^hu?3NyC%M)W|QY zWSyw2N~Sc)rS!@BBgu_e6f-fe=zE4wQAbGXNQex`iR6g2Q9M8+xgE*}-r=Q`--0~AU`k4whczonlzbZIa~AYrO0VoM$J|Vm>`9UUxKebFl7JJ`{7jz=O|$e# z)ci>f`aX^r2zhCT$jl4fe9Mh!2j7%T(`*fAAs0%T%g^Ho*BQ&F)XJ%>Ot^$f?rMjt zY{|=n%Ak~{-dw!=!psQjOz9NP;%qy~|Gc2rjI)uuOUm4h-8{{_G)$^9uizxK*(A@7 zK+fe;&ioY4xQxaGQKaJGM!*D*kQ_<)tjw`os?5~P5E09(e4Yi(psC9dvfPbDV?2|n zG7U8|_=wQEbWpyykXhMKi%X`QH)eVEJ$ZosPU-1ZL zPy;kj12G*_GA&axJySGQ12eFw8nI1Zanm#L(4s++3cN9hv{H0rM~bw|i~Nw0_=E!Z zhc6sdLM>E7?Z7v{5hI6FjjQ|J; z)lmi2jS$sO_0&=gRZ~q>jS!qn?Hf$X1Qkd}0sTlU-O~dVm`CLi(@aZX*;EL~i(%!w z;@doA-Mj`URgHjvWqnp>Eml~S4@5yqV0qL=eG+VSl1J^;Xe1ZkcHIqjoz_|ECiK9SeSMYFkgg0;6;m7!ZZa!@Va*&F z$||B$X*{0yFxPCg(8bh`w)8w%BDC^w&Di8l=rj+o{8jjTjT;3F)L4{Li=cD?%l-_{ z-tkP0HOt{VP^Uad{!v$x|KNZ<*n=GifX z03d@9xQPaU)q5C+W3Y$q(FSY?s(%oMXHc|sD2A+khF{>9U+4yGh!>;Nh+<%dbO?uU zI0=$?2F~h+UqG~8=!Tsz6Y{$u*1Xtr{a7t!9UPTG{RGb9L{3|RObks*m{pI_%+CI* zP38nn&^*YdWIRaOp_*mST~%33wawNkPBI}s-pNS0xBwa;NbA$pi3POltj+YGJCPMq z`WTF*LQUYXN)fWw!ZnX7eqaVjcn1SM24Oe_YKSwC)gd?` zx!Thq<$c*3ozcVu;lcHqbY2(6-3=-f z0FzQsygV1ZDGgMZKikl2Axn1T@K0W{D9CBOtQ_=gfO){UrIj_8F(IF@4w z7Xm((Ul<2f|4WBZz=UxaV1)VybKnI=c!p*8hwovVxyrX*F$Y?h1_0)nSXc&r2uc`@ z;xNWKIlW>ij@>4e(H>PxSq5Vru8&q;<)eI21naU3IASE$2qi|>5W(4vsNOhe0y2<- zOQ?b!fCF}Y10{e1C1AN5AcH&DgC*$WJ6K)*WR0)|Wys_$SsiQW1z`w>Ug?E@(1u<(1!iEnaJgM#CK1O1*N8p7VLoUNA!C!6 z01o(v5a0k7h=B^=0C?4C4zTDP;D89&0gwji5D?XGhShmcs&x35cF2cx(3Nf&hj$#4 z^ce?J|0^^?8;5tWhH#h%YA}aI2_Hrqhi-TkY#52P5?qJ&k8&I?MZ#6|XvcJ2ew zlaSX2Fo3HrJ_F#qu9jXv4rFll;<(e5l28>gc}IRI(%Wmav%VlMUX-(LVo7;oZ!1S5 zF=BH4Mux@@MY$!rW>WW+RfN0&2 zUS@68Q*G5@WmQleYY7VB-nm^KR=h>!U?okD*0y2=;NI` z7L$*}E>U_Kq}9ENU;c;V&ebGN&HZRk`s7M#Ef44RYaqtd`&3FU@;=C|?)-pFjC~If z|DJB{Hp@`RY6UQWu}g3DPH*&HZ}&cL_HJ(l0Dya;<=&YS8h%{J#$o1;leRp`>>goE z-AX4t5y$=Ejtx%$<0Z=-Z%nvqk;)P}Th~X1)aS?WLyu)$*&I?*#0U!TyAP;gOA95o9@e;V1 zAg%HIwpq^vVHxl5m*sC7PYWAgaZBRe-u*nN;0bY0PHt8{XNOc!%thjhRQhFEFE>sAl7O*m~2P(M(@=56%=bw~ehF|O_YQ1mQs zkJmm(M86PMcl9#Cv|lrcYz?sKZ{5V(d%VIOv4FLq=9bx5sKQBZ*n_r^U}Zed3D z4|#G?mv%skjenR6NYeAQ7rE>|ZuNi^^B$}N)<*NFOZjeEFWG#8MRzhQi*>o@sbp3lz^?}+aF`Jzv9|K@K9RapK$`rk(ShnM=_9%6nMY@la) zs<-d0@A|KY_%2p@C_imoo_g&7_;7o- zp9jCs`Eox%Ztw|-v~$1Yb*LqJ_Bi^ZcWwx0{J;P>c7{yH%#xRX2f@Ej(GMF{<#T_!SAGA6Ji_=d8%iJgw|zD@ex008fcPhHpul(k?jc0j?p;EJ z?-&x?_pI7Kewi*@5OHDP3K0V}5+oQPWF3D09->UCawW@_E?>f2xlkTWc`;MY%c(Qx zy`4UHzSHUO;mMm1YuYrbbScxOPM<=JDs`&Uc~q}r&8pQY(yb4zdJX#$EY7bx5uWY& zbFI#Y=B`l-$L-%A5+Ma{6u9Ex%%{Ikc;AK}7=4|X`893$M zxqk~!{(0Z>%9fcshyHoGbmpEfN51@zOWuDOGw#(0lCR%?2F^Dj(`5_$_U_-qk1u~d z{rc{^;Lnd=OcpWz#c=T-7hIGOG@nBak9Ajsf?4JJt7fB{knpoRR2p`V5ua@e7V zA9lC}h$E6%qKPM>n4*d+vM3^pFTxn3j5DT)VShK;$OVo&a?!)D= znWU0SB3Ynq{0Q3s*tG& znQ}^kryBg@s09{KK*6Df4w^uqe-hBAs{`yAYXErCTC1(M;+m_jyYkwrufGBttgyq{ zDXXln?)j>ptTGFzpn*dB?4Sq;fPl5v7MiWLh927Op$s?xuDA@4Tduk1qMNR|;)d%j zxZS=xZldH$z<{HUMhfYq`%-#=q!xlZkib6=p!|S9hyFuB%L0J_!atrStU^a3ynypRFYN45&Sz#S zkX`?PAb|w~x%|%pDL-Ix0}zv}0LM~mT(#9#|6`rC)?0Jkwbx&R9k$qGlU=si87H7X z+H03wasqF|9k<+Y3#2jv30R9aK@T9nx6=PO0C=~81O9TNi3+6XqKk*xxIhv#4!Pu! zQ!cr^l{6S%M2+Api)|9nd03Hrt7c6{`x;*diR~eWP;~W!vd`- z5XA=oAH49x6JNaX#NTy5NXq|{cJpdOFOcwjC7^QMgAW9GNM@?=j|#fuEJ6(`yzsrv zLxaj!;0`>n00PYul)#_KA78)y_v4?x{`>RazyJROFn|IaAOQ<#z~T|$AAgdc$^OB- z12k}VcTtt9{!uLf3~=^qsPArqVUL+3T`X%JJJ5}AjlyIGHY zNgIgF{*k_fnTdxx6G->K6vXb$3{)Bb-9Q{rD7)Q_APICL9qVYvJK`~qdfX!)`{>6% z0y2r56%u5GmTVZ}#1)bof=+Z@6q{ zR=TmW<;$2eYu=oB^1zWe>n?rSGH6|tEk)a;$@@EBulTpUd%>|?%MSlci&nhAvRyBv7nt;4 zQnK*F7Suq3w?MZR22!vY50vdiKplWrU7U6&cepcWEKQ%BHZ675tmr}YJ6qiB1`Np0{Q%yDm zgT(!V0S-m}9Pj*EEcTW!V!#_W$a3z*ncI2IWU8R+lc-W2S8F^^^0|J^$ zJwU+&4#4RVjC5)!r5%eDeJKF!}5pc^zB@l45?iu8*ymkbf zbXyG+>}2M31cE>sB>Ru7Y}t2#2G2&jtU=Mr+LoF-{?nhU{i)~5&;KkCMt(_;pls#XDy6-0&@Wc<_bzW@5mufGBZ3^2h5|2we41}|JN!VV|= zFvAcxY;naHQ>^jC982tR#2{b1@y8-}9CF42iIMWk1F7utKwSJ2v&;g;ECv@b&s@gL zH1|C7&o#?j2F*CjjPuPs6XdcPFB6or%{dzsvl9bRU7Q;*{DZaD|77ik5n3COhZ|nx z;e{Imku8uLW4G%zp<}oa_ZS6@QHI@gE5*glX#D@9a?1soF%Z-H5-x_}i1T~6;)w&S zxZ{vNE_vjXPi}eTm|w1Web3sHd*_>g@9K4?nKIZV>DO#cmKi z|M)`>KmPDT4?X_$PLMwW;ZA(<9T9JPLG;{XQ1G?8E`99;r8Cey*wa2eQ?T=c{ZifA z9)9fDm;XIM=AYmF>-_BVk3RqG6TAG$Y2IB$ia7X@Pi(Fhey&uLhB(0fCJfJ2r)R2c4*Kb z{?nigHTb`Oc(8gHtYHgd2*7k$upku7pbh_R=)wsW#DvaEp$L~aM5es(AJ&T^6hlZv z5!%p-24SK{vKI@mn6s~?QsuI5(;~A zGzc9%vdKf@5s`XI-#_x9Ni&i%ldj~G9YtBk2T}5n9%%%JE)hpV`tp~+45l!LNlaq8 zl9H8-r81Yv%w`^HmIbk+`-%g-eT33b?|`K?Jdh?s$45v6%$B$*K;vcH`$2kvk z&T%LO5*+%34YfJWdfM}z_{^t1_nH4XLdf67-=X{se3u(XH$JTeav(rzC1pa(-!DiD99qJs3yhdf||Ae1h}syZEN{;(ks zlRhY>U=6DkPQ0c6uApySEs5VfnXIVpPlFMwy6!{189h!qZrE& zNGx!xQ3@8q1U{JVKX}nafvjO5^?1i+Rk7WYdY3QYZOV9Um_&OB7IoHO0S6NCj~Tp| zAlM*r9QnbEYD`nJ0!g2em(1iQJNd~_j-uPie#B0&l{}rc&jW3 zmj{yJk_u$e=&Q1%Cr#-}TUyFl&a|dunGY6P&!=&$q&?hM$s2F79(YA5s{bJIE)+1I80C_8GkiPw60s?{Oc?U9xbqV<+x^yE!A`prO zP2m)LeriYLIS^*dL%9Rthg~;K?sA)3qWh>XYmtgcgIJTn1#zE7XH5{A*3^1St?6nB zQpt6;n;=rfGraf=T0IL}v;|RvJohk=7z`u}|F{M`|4|5oFkB#T5Xc*<4cvdc;UBz= zLr3H=MoD@^x)%T32L)YM+Jx@*+%S*1%+GCCdHm3SHqW^Z|Iv=A5>LA-9Z0}CJ8&5r zeApg2MhF(!gnuM2P_vi>8h+r$p zhyoM)#vdxRK`Oq{UUL2Jc+WdUDHsl1$M^4Prgh-MvEaZfW$53{v(X1~@Sq#y#`%DI zIIpSq%3J>O+#GvxUcSn*EB@?^M>`mY1~uOi#KZXW zdk+0P_se@+_Wt+455Dk+PyFH=|M!(ls>RaDK^I!)SoxgZR zUH|*w55NETKjOaTn?3j5FZ}q|&;Iu7of*m~JoiBl;|RF_{`k-Txgju+bZPGNfZBUtZHg-l_F5K>+t zB8HO0hD5bgmE?wq!Fg4PhEBn5b|?_ZB!^enhid0STZn@OA&By@Z)7NROc86*R2(}c zd20W77|rEq;g%1G#v%DIKl0T|41#F;pom@df}Y3}Hin1~1|nwYKCEOv%aezB)nElS zYoX|evPe{bn0Q=>ejlL+W&jHOP*cyw2bDAq$M9wZ!DZd>aRPA$vLiU2F$h5MR}dm( z8Rk$w)^`5@Y5!13kkAc?!Api$SodW;)>sg>@J|fFO5^ws%dk|K(1h^Bjq+4v|1fc< z7dzS{4g_J25prEvWDNwN4gc^A|C9)c@K3z(4xzw@PH|iUabKl1ixByR^00m9cZB_y zVAS&u&Zv+700vC(58p5a0-Q3wBah6Ddm z4Jdhy6a)tu_6q~C2i+hCa0G4z0Y{Pe5x>O@)gTa3;FQ{+2Xr?OEJ+a0UPv0z*ZvnI*-^9d?1zrQEd|T4{=ZjeM5I}Fb&A~4}6ep z)}WWvhMWU2lXrz%HYsGM@Sfxe6oX)!1)+>jM-cwGpNlDjjY*M4 zSa27aiT@A=191l^c?Lo73+^QlpYV~$=w7BN5M3Y#BKaVF&<4iIjhB#`7RL_+I%+Iw zYy)v$<0xIjS$J&4kpBb+9CsLU5Q}aJa&7gGVri6WF`Un!2AD7nLiSrd`VX~`aRR|` zA1V+TMxYpXqyJC`*3$=app}R*58@`4YM@-hnPGsblE_$<8JUffL5Y2U33Wh03}*{K z2~-4e4AS)p)S#mU`hy4hnB502!j(yVKn)i347@N7e1N2S`3-|GalHSq2jV#p?4Vc- zf(@Y{W*fSp)&P(M(P)z~4O~Tx0->oD#HkrZV$5(!*oYVhN9QvxAx+bTa& z>WcBkpdR5>FL-)`wMwz(J_frX$f}8z(@NwP72#a(iwtySbrD z5TI)bTJSpNP(rTzy09C&vOBx9Tf4SoYj9+I#&SHz;^f0? z%zRGMaO^~$R81%2EoSt3v5=*$AbU7$c(HyUHlP-Ot$_@5LYY^ee6Y& zC$V0!R9JMeOeJeKmca#PYK>gVGML6n5y=TU$tjgdQVTl1jGcgxBIp;E8>5gCSA&n6Jv5DuZ>I)W(>Q#q$8xTF5at6F#o zy2NoN#8&e33s~e;^I(p|<4_ywii6;I!2HhQcX3x&$avhweY(fW+!WV55bm_jgJ3$< zW|Tef42Wr*O=%EZ)(Fe_29N*+|F8uE!H}>F6#gj?n81-03eOrHevj-C#$3aSNE0m<2Hf5Dkq25n}(qkT&=aCsq*41DZQJr^_&I z^NVq}IRjp03-dq*4(g9xVAOOyeRd4V^?b;Yxu8z%MFX*Drt_%z;Lrr|l(fJCIz13u z@Pa7#595HO|Ih@=$Y=sl3)dVwOxmE;HV84$Xm8L5@&s}Jz@l|s+L%YkU!2#HjL4L% z$Vze0XnR-PpiMD3JCB!URpW{m&qV5966qt-h@^%1CbNj?;>p6n6rfTGj=-du;& z^PJjBt=C4Z-IlD858G~Ln66QqjUqI)NgGu2Fl&w|bU=m0@V($>Wydiqtjky5tG(CW z=h_T@;iin*adh2cTv@J+;ULb))lJV5zRIj!;e8$ADlW%Jjn^f9%qK1?9-iMoF%I3Z z(kq_hU(1cPO%QkO(W-6Y6fWZyuH!~tzrm{EC>G=}KIDs%&)hxBM?U2t8?Ym;NgS@n zHp^^O-sLTf)SQ>)xF~J;9pzqr=5lMt2QKC&OXMkz=5XG)N*-HG4${$AG?!?^p;7co@h$(tG_( zQ~RLFgd%rd?CG#`N$*zcmJZ>hW>TPDPgs;mt^B8`|Xm1b;T3&kUG6hGsklmChkXUfQl6??6&roe@Pz!Jr zT<@7rgU|-lPza3>3c=M2d~giU*4#{?>LlLnTF&U6feEPvJg$3LQRlxCi3Idh-4?Qh4BiLI40Je*D*QqD7D; z9nOQekDoq;Bo)?sn9t-)nl)|S#FtytzEx{ z9b5Kn+O_{}-^QI=_io<3eg6i&Z?tgW#a-`1P8@dRkGv$Bw7gcc&CdTY{rgOJ=Dc^^ zy?b9AUi^6S<;|Z*pI-fXo!w17f9xK!pGtP{4l(JkUS{ z7gVsp0v}8eLIx#tFhUC_ys$zHH`K603O~#cL=HvtFhmnaJh4O+S5&b@5?@RaMiyms zF-99_ys<_cchs>*8h^|X!HLdN=$&>ZdS|}O+M;eVy!88rKahlh=#)@S`3K8Ww#<^t zEw%JAOfbjnlFTp5MDt8F#Y~gUHO+K0PB`amlg>Bm#Pd!)<;;`MJ?-=}P(TOmlh8j4 zMfCqrMFmZi(M1h)G*U<>ZIseSE5-CuP2+T^tcNC3$R6h8v*@xV@dF9J?CP2*KK5RP zHC9Dj170O=SottK4442Z`qGTrPrQ$kh*uGh9a}~-h7ktH{g9o zO}Ai!5348PlTeyxA9mPT=%0Q3d6*@C*RzKnR}T)1pL@jmXC8X*?U&=dh=h(;`lkDJ zq?+m-b|K^xqGzs;Kh6pwesVVIs)y+LN2ZufCVD7;Xert=g<{y|^$2=>+n_Cy8c3IxLRfzr`3+8{=_`{*- z6HiDXoNmoPU;%9J$lXKy=a4`sq#q7>VaQlV9+b3W9|K{>Jz_^fr;q|7__!TCpaKhHqz!NZ zELuaJfhC%t>{|y^*{R-@s?7x86Zr|2O`Z{qe~5w_*PzBT{_zZh;39?pNQFYUD2g#o zgdVu~M><&X5Rvh)eteLE2#eMjteGwl?C?e|O!p5#wlHJ>G!I~0Q96If1&MaFi8K@v z4{7u+Vkn8nS=8|}jX|<*l)0O!+|?w9SP_fbsmVO(aYnrSBX_O>S~^y_N)#3eD_22E z_dHp&hFz{ZSvg9+=0Of~tk56FEC)H*7b^3pQil%N;VyZ?6#wbNTKxaWhdp$dkGK`( ziP9{Iu0q+X1x}Tnv#UEon?;I#Zg~)TTGZX-;*zQ=aw|W+JN>NCGxgq88PtM@4Ez;qsxlwq+SVA7)b**t*Q1xt^I#;^Z zbuObpD_D|K662iaBch3`Px7(K)OhTq(G09Y?8YvzB2R%;EK>hjO`?r&bi=aO=muuH z@es>)*0Y$^EH@Nl*~)s>w3|&V$46Pc7Z zXy+}jY0e80Pi5D=?}cxCr-HJVLd3gb{RdgIC|~~e*T4Tw&ti?&*aY6Eis9WafEB!8 z1~*tL;$$q|r1;(ZA{dnp#&Cu;ykU#(O2T1H9(YeFFAkU3#3#-!eFywu#~Qel(!DTq zl{#Y@*Vx84#&M2yykj2s*vCHxa*%~QWFi;Y$VWzUl9m6w!H}n zSH?04`B4;Lfbt)GV=j~*TS^Pp#Tr>gbDGtRIX!q-lr4tWfk*t0P?$juaKLk(^}J_3 z_u0>X26UhWJ!nD~+R%qabfOi#Xht{M(T|37q$NFRN>|#_m&SCaFa3`*T!)zyA+Sat z!qHQ%+0>^-b-@~jL@~Qq#Mw!8tYtmxSG5bdMJ0HWQVylAc z9?$Txo)GaCk|uJbyHH$dbObYYKGKf({7WbX#5lS`e#n!6xgjK{qrNz9ESN(k<0<#d z%}s*xlPK?48sGR`t|e56RPP}=FA2{bf^_VFdFU}uWl4ly^H8mPa(iMXA8YYG6 z0JOT$r4I6q^YJ5Ew@1je4z8H5{4r+#ve-9X-;$)m>>)qWBem{iCx3k&M&C-yAH#Hy zFWur6$2(w!=2r;%i>Chdd*3O&P>=fAf1X~9 zquDEdbAgHN5MwJO5ejLuU=zRrB*32N1Chf&a>})h+O<+E81YevV=BN2q`(mp20dsb ze6v0V#6DOH7aFU;5EMa^@dxL~z}DHoQENbtau%HWv=M~C7_=1=bfjBjG5w3UxDc-v z+$kCK!5?G~8e}^FK_g)f?kGaXDzhlzL7w8LCe*?$910pF z3meQoQ8U67l&mY%DK13AG<>iId)v_qcoLKMU`IF!RV?7=$( z#6UEOJaogn5ko4Rvz#C?mNU0}nYNx#LP3Vay2zLe!Hj%~b96P4BuMs}2+_h0bBGIvFo$ulhj;KvzetCj;fH?l8kv&GrYu03 z^c|brKb)LKn~;a=xhr#HrYsDKcYp*m-~?XShI!bT`2nh+a>}#}HmDTHBb+X0c?W(d zh91xYQwW4k7zAVxqn*hnk$EPy1WZ~JLMLlW$a_UxnFoImg%kjUVHk#J=!8y?1zFGp zYJi=#`OCo6OjKh=Bq>afe9LC3hkXbJ7Z8L@P&ju~A{CvY!v@nGzgmAfsacF`RfClAEO)ZE9 zRy*$V<%#V>jB8?p6ySkCFa$F#gJ4k89!(NACDiO1 zQV>JO+*qrBjSaq!6_>BWyQhhON0Za4;E7>8d7ntb_&O7)prRETj18fGYl zR44{&fFpX4rDwo~QSC+G3Wt83i@52AX@H1jKrLSV)o188;5vw3?Kz3rEa0*SW}t?v z;8mbNScTPEJY?87b=6j6F6Lm=i6{j@pje2|hR=8gQ2ND2hy{oMg-}o|kU-gg=!Km5 z)w#H$WiW_;Kv|@TMlvdfcKAhRNQG2brGyxWHd2VUeTce6Sur|>PZ)@@umy3D+hur& z=;Q~YHNR(oKZS5vhXCAxKpJy+hF=h)f5_FXb={zN!glZ!XOvTDY|*jBj@UyA;8Kcx zI0pZSXak4fgHPB4qWxWmxYUn;*^fA0#6g_JO$Ml#25YDVh3H!9Vwi|y zxW!)pT!Mhvbl`>Fxdd(4hv(%5$MxHf?b~1Ag<5#q#YLLcb>G+3-<=ptD5~8=1y@+r zIB19oA8jSpRS3-`U4@X_HoK^Q$X_{-5|sGWxM3pFLz-SFhAa9qTQa&{l-q|m27;jl zUd@US2F8bQ++*-GpY%z8um)a`2P_HQ1kMs+_*e+8+r#nOzTMv+)`@P#!H4Biu{}Fh z>Laa8xX8$hUW}W(P_Fa(hNAq4a7er5Mc#K9hxnidqWuRd=GA!^Sipl>sg(((@ZtZw zSX~5U2XiP2V%62gNC$JUA!-0FgUD4Z2I4)w38?H~haggDoKP3FR;b8||Ebu2?L?no zilU4Urihz^%_d}9spg3crU+V+0=J^TT62T9m>Afgy&i()V?Op{hzMi=9%S5o#DqwQ z<<;YxpyGt^No$~DI%3L^37}<*jI3ouYb{o~)5>fu_g71BwGnVEjo3Ym$Ry^@&$vgUOLr~VD*Z1z?nma^>3 zH;VnAg%h~E`sJSMwNUY8b_QthiCs?tjJ`?csa)oUL(8lhmBTBR1O7>30XY9+4(N(@ z7Mer}h=J!JzP=(})SaU~h4@(DnpJJUhLip+ls1VR&S8b{;(g0!r>N4Ks8WiyXl;c` zd0>Zh_*y{@SBS{WzhYX^$O>*+hF6xn+tpfAi*(eU|xz{ zKCihz3FNEfe7G{QpQfXIPzHx!hfgF6rfrB}ec~@hq;}9*rf7_3NQb>- zrs{czmyXV7@JVJ^UZ7|Qh7g~loQro5Bg7UNrD)xR`-fNtAc3uHYDnylc!s;^9BTl) zXRtc5c3pt<4s7A+2=!?Jo(O*!hA8MCl4%I0Rfs+~K!`vbhmhM}s9XOp_FjdM1Bh^1 zJwD#WwFSh{hAu{l93CE8_}!7s-(u+7Q)piX7GZ@rg(~|(sQw3HU1RUf?c)W;HO`Xg z9ABFz?I1Pn?m%ruQ0=s4?W3~^lvv@1SObR$-hZeAqV?X8z<$9riT8{S<`=T_663WB3Kf{q6MD-}V0E zjn2gAQtO!*)Y<-wGvf~w{)gv4;oN?RqD0vV&IbyISxm?aW;haVVWJ052d72ZSP*Z! z#kqF)?|Go`f9P8=`qk=w2wF%7Ti_ORxQIhqOhKzBLCeHivwG*=OjTX~2f8@JTqH>U_wpOcri_paunY z2x?#lZ?s;8_}$Iw#osO0a7YK*mWg5*hi`laa#jfMC03+3lIZM)tYC(D(A>V!7L*v_ zG=E($bQOqsb8VhVIsa&Vd55Bq2bSnHd+3ID7+8PkWzj&600Jz5VrsG=izz3VUJ~bN zQ|GSslu^m{@JVXQrU`4e_0nEdlY0nVmqj?2XJ2;++{KITK+Al*N zs!-{*ISSM-O}X7K&mRHYa$9e!-k)`l*Orvtx&FaN3pUz_Akgoim=8{)cTEi>#Un;PNeP zi1=>!t%vxnvgfSa`mHk?H=Ab`w{LoKEce2jV{@piLSRvwr;b2PF8YVq zA*kSvbCI!T(|59{qnE;Gc7qIt35rMD?nMUtu>-h;Xji^FxVX2-!Q^?n&n>;@Pri5g zPI-ugh#P6l)@zdqegCqggjup=xw}JP)&-1l`-cBq_4IDI)S~Rg+5NJj_}P4j%cqtJ zHy-}#$y>bmhJBc2f+2pN+^oDvyT9UxU}p$!%8SYNd{o?dj1zslPf-d}ctWm;thU03 zXi1Y`2RP{P8vY1tfP^^MVTcI8Iv_83n}_@bh=2c%2^1#qAi;m*{_PXU@87h8{|rhj zC=r`2fuH6HY&Y$lKxMQPKC5`pn!s4cLLH>25nIJ{&+`2XcW|M}oH}>%?CJ9-(4azx z5-n={TX6(3*&?uuL@9K2YP09Iok0JakWxzQ^N+2-#mwIP!*q0{$z!}geG}N( zAf#oy^8RBck(xkl|4xnTIzup8c10ZAE)(bte1w#qU2p60exlgC^%7wENU{%g6EGpx}xA zv6NUxr!dU4@ee2hm2_WEymWSwK>nnJmw~HEG#X|Vxg?P`FcBCFEvFphTPWi^V@`#) z9kk3R?7&2mZ@kPi+Cd}5l8$pV+IS<5IqJA0k39+momJjV=h{El{j;4hVkrB#(e%x_T7+G8*P$B=t2-KfM_5EWHP5+0c4>@Ggc%7vw zP@4Pjq3@R>WQ zHIF?U(>pTBC7XP5jzG>c55E8Z&{%7c{pR}bt^tFm)IB-tY*aTyV)OGqKmY6|Zxy*| z649zDi*i!piN`e5QA<5F)jYu(q)GbJAKWhuTx*DQ#*(6y*T5IJ6?9*S^q6_+-A*P_^D}j zQ#4OU3v{s2pJ(`wY9c>=I_jyb-Xp9+O8z#km2-Ewk9!{4&_W!I_s%}^g-jE+`Q*co zJ-r`f{F!J5O?JDhJO4cNs@jXM!?aEgw{|syEfhPK_DU|Zi#D$(vfNgbCOd-yn^ zl1}S4;h2M(LZRpk|m1fkQ3V;)mmi7AEiluL!w}7 zL;NyD2Mp3puXzLx;=i&Nu+2h&z^#4y+=If;C2>Xh{UP;TY&PfwB|gl#j9L5gXPp4N zf9@n{C~juP>YHI)0TxKw`ZEeqyjAu&8)A`HTeQEAQ3?z2DxA5NH2+N6!?HCahUI>X(B*oR{EKxK7j8MRp2?JWj$@X) za49AAiUNJ@c|!+bDGFfm6LjVaK?~Tx;r;zXf>S^k_7SFlv0^gPMTpoTvkXQ(wpfILgz_+Q4}o>$uKo{+HP!34CE zJjZeyrciZ1pE>^^)2HLH^-vomPInX;2{4`)cb8G1*+yzaECEVkTWCiz#<|dz{rnsz z8()eix_d?&dF&Zfw=vAB4dpPy-J-`6fb+O{C7Ey!QJh_Gum;L;xxN_?9;F)Blvd@l&CEpQV9IlCuo;Py5m-sv(O{Mgv&R6-JoGwhYYD2fubt`;bKDs*At@+0 z2rE)^gAXlU$qfc!89t)7ve3)&+zWl+Xr>PHX?tb0p1ItB6lS_}sWIuS>OxO(kp!x@ z=`HpB`rmz(sD4q63pxpmt{q1+&WmG-Y6=kx1RYR+qayMskV}rS9%dW%oECPHD<8_) zWo*ZdccD2=9_3v`H8$Y!RQGGWI8;bCdf@T=8fQ3uk@;rj%w^g4G%aLbf#Gx}US?BX z{&LL~Hhp&V>UuUU2=X;zazdraY0mO5%`=lD_)mrFjpDGGau{`o&Xe^7N~1m$i2X)I zA(*o7P_`U)ZP#?LdBA-v8)G-8r_r2(^E0$r?9)T;zqY7n8+cVjsyb)pUYr4ID|jUJ zlH;#14|LN{BE;y?n2B~~Zeq$sp@)nP_`h_HW2x!|{?K1#;TruUSiWrtw2UA4JD;P9 zJiIiq+ZbQ;V+Hk|SQHFszZ6_CtIGajUr=W?|I--99|^*5=EOFjLrGJTVaRt+Imikb zRK|A%ltjWb8~Rp4Wt@hx6Y( z`$91W0P%X7z8?N@CM!OW_>nMF?1t&?-P&g~>^RcA=R3W-D>Ht{Nvcop76V#*Oo8__ zGrM=24Iwe1-*}qa*1N+SE-_`td-iI+cUSbY#225&v$uP_P?s46!&A%8K~CR)k)#J2 zLsOAvZ%cn`hf6M$@m|#EfBa+gS#q(h@uI=!weNt$8iYhP12_8VWCeaY2nh_%uiZn z{ZFTPpQU%vLQOZ*KA+Csp`}my>V|yF2O(ClJ_HKvwrX?2CHnL4gwcq@l19d5XF!;w zJ752@PR3R1mCWSd=Xc11PuE5#VViDz_jOZtH>2+bj$V7*|EBzP)mHU*W*N@6{p;rq z$@$A;5AgjD^YHt=U$Xz2Jnnb*-d!F!e!5C#3_m>hboHA({BZBTkn62qBmaIOPN0kr znZHhQi-48Ct{;jF_lp2gzwRa00mQ{OUPaf5|K0Xm9m@SW$6Gh#U^=6JYJxF7t}uek ze&M#JT(B~p88V&CT52x;0MH>pEPa6LpMU%cFeOq0O=5}vT7%=Jz>QPjckAFdO|$c2 z$RBHBINAn60UINOkua3ZH%~!iH^?MyNF88g?j>OF4RS#nFz*JL`Ud5nV)DWgic%OA z*9Kk|j4Udj7F0sKigR4@6zqD3m&Eihar7y!LS6}Dyo7;+ZN~ODfO#b}Y;d@w7TskD zVc9Koz;1agNQsUs00R900O9bKW zk9ztUF8N_nwy$7(9p0p$bhV{?g_}j^OuYDS`SFMO7?=gw$^?1s0=bzBkuYAibYW$? z3`-LcD*{ogN&ekZA^$Sr-Pa;kc4CikzO*ulcg&KNTVj>WQc=u;r!i)|7`U8B5E(l5 zr^uFQtKGm6Ga^`Dy2n-qKL*fjz8-4W)MbreE0_OkT8KG{AS@>$wx63djrW^;&%>hZ zz+xy;j$}g0sBaVH>F^T|Ut6%~rRcOnmCyzDtL58z#rE2L+d5q=DFQeeqQhFd)Tr%k z4arfZx$Rzya+JSmUZ%R`)@hLiiYkLBE{Io z{uM~4=Z3*MMz+x=M$h@x#*H2^OiL@wym!o#Sk2=q%s*A+pcIVKDlF6!72Q}LJXu`| zD$F}s)$gBMzGO97-BGJ&wKS@T>ti*?XEW=3K66h_qKl!4WHYwK5JBx)xT7nz@5%Px z#616lsfntzdlzS8#KtGXX7Q5Mapbv`%dVM!rKSIl8O4Oo#*T3*o4Y%kgG&W+y~6&I z)f&!bHS*l9veK-!;>7@~$8M#Hh`Ph=libC@2d-<Wgv#oS=&#K57+6@xjwd7(8(RNVs+%fiF;$RLS?c?Z4+Zg^L}@P0N^2&X1u==M%eo8u1-#Ca%LTvNr}9g&QpXA~ zkCrpxUvzM5ayAPj#`Z6d3etKsC(k+KzHp|IPbG-PW(>Se6#eyq)3}fqTGq!=_~=x2 zi8y#gnC?MY0%6+`VY{6{2tNNkF`k( zg)v zxkus-hZDHd7X}AmSl#ckN6+_54(oiVI3|fJYW|k%pF8Ce*S`;?9izh;U31erJk&{; zQU_s;jvY_|dD6duNA~MG77pJ3KJ1K1$@N~*zUJwY&fY_WoxMDR6-58EhW{a z7N-3!;QoX>92D#$BL1#loLqOS6V{-oWRTaqjrl6mw0nUE)z?5a+n|&2>Ie2;{e2!( z#>z1nss+HSbIqeb$GfGRtgBd{cpbgId8E7DpoaRp=8kq(x{m&Z-}oyH+-`umDO8>N*xV!k`=fKfA*UI}C_w9+JlZ8g@jK-}mjemYN{?0l=M65_H40=njV4#q?R1tG0 ziUJn6CXQPZriUTl3kyUC}L&indg?bcgF0i4o{(egMh zTdZ74hbi=0k-MpH2+IP16cV1F7S;bI!i+xo<#Hy~q%GFwdXiI#96FUv?!&)s!&RjN zYSMjK9sH!_BZGK4(@nwZyyWYqIX--mi#tQqM=A3AaAOD)VV>g`GXMj9wF~NIV8YLK zIjkjo&8w+qWzRjieMM<`jP_rh!w4uE{)Am~8x6ImoAGFfDe)f&i{B|C88L}ehdzh- z{&_((r^PG%xU~7$h@h%oEOh^MA?(w2&dw}2TAkcptg%Va-uB3we$*If>Q@LP{gFAr zb01BnF@#@?RO;(cBWx#{vo^UK5<^BQ#0>~^e`9LK6tR|9I0o8Uk1&x%@$W~*BSFk> z2E?v0G_RH6nDOz}3bcV^>|`LsJsQM9HXvjj&485W&>W;qz_WTn&)H*n&xjRNw&WsE z%ua)x2A;x}^2}7YjG-VtTm||V5Sw%~T_{Kc664&b>KTf`HWNeSHzjzjuS7R5XR^R) zEf2pg1b6fcTSW06y1P&+i4l~vWvMG_3@PKp{wc8nB?zO)28f)pk#ra=(h7J5k%}xJ z0?%<5o2bN?!57bl5Gmi7Un$_d8DKY1fZ!@ZROK9{2O0R~#Bz|#Lw$1VSOEb6`unXC z!a54ZLu3oX4488C=Y4_J@(}JJS|^3@gAC_&C8`9qS+{;_VPJUsBC+_KtnV;2hZtWB zfDbuP=Y^yf<~Fm~)RjDbHv;lMwZp@qm$cyE@uavC?o3YKsBF^92N%0>lDHR@|O-g=zG) zjUWriC@fD*mJ`F5t+586wvLuq1ITS7KXL1jkQs1HMIa3MJKxAdSmenXfKuBESZD?oromqmIc@vU*QbZSxL1J=~%NWz&@Rv_>oNuVlV5hHIC%Wn$ zlP3rBp;x678O3u`W!8K z+|}uEhguWL_rg>+@#WILky{54jRA-NKnPg}pqN1wA5(t-rKBmO+J{Qgz;s}dw-1{^ z3`Ht5=2;sgdLXZ|Nyj3D2iV_$Xs%_%}(S>-^kO=fb2%2$QFR9q4I@SAl3%u z7xW(k?)E#2hXT-=)-ZG)>JfNL7BEeSG;$SdPC+t`$y@J4 zLNU--1x$8j@p=jm-{HZ9n4DvbsEkRY?VsXIBjOSHf52GT1PA_&7r0^4m*(BMKKD?T z4rG#a9tPdkhcoSC1q$GCON7qCDNh@wMo`W8v1d$MN_@+V@k=H2pM0+akFIn)F!FdS z-{aTkAoSx$jVFXuCJKEi(;k1!G!TXR09)uffe)oJB6jtuGOcCPnRF`+y0e~ZkuiLHi(B=vC*z zhyhLJW40W#-~cldDMXdC$;z}LUM`+OrqI{9-EsuW-~5}e>r#`=DDP|WjSv2jVh*?Q z_ROiw`8*gpiR+9f8ffuJqfc*weD;_gDnyoyw_Mh~wm2?*vaIAC_QEi}3pn_-HP)MH zvCE@ir=Nqn#+*}?9ujtUbyAhm=>OmM@RaZgojxEQrWX6V$2$&=f7&IHVodgZkz$kn zq{J{_!aQyyj_7S2B)=U`S20zQdv=IaS5tSG+|+G$n9?RicZAxxes+Y`3q5pFq?g|yRF)SpVdyvr;@ zM@_j-iL7vEsfi$xTKj*b6ne4|fBwF&klW}w{}u7yL7Qgh7s6H@BveaScoB6<+<)Mf zd5Tl^2qeap(l2AQ3`4C`{A?P49_Mw&b+TsnJpMS-uFeuF`yshl;Tqy(Rz4SkG2}M=Hf?ah<#7VWx3CD9Q431@@xLk2SBgsDfs~Vaw z^_cFzQ3kI%Jy2=r(m#yZrzHiyqZofqx->=Y)(I3aP~82k7eBpWjku|-aV{FH{O~v1 zMslXYpuXO>UPd23zObwakD?;V`*QqEotfb8ePYCav>byxt>4QVp%%`ikE=Y&Wmca! z>C3C2B>T)R4)Lp{(Y674SLo{!%gb=t_YY@{D@4Cp^6Gu8tkVLoZSv zIDM~Wh)(WCMF1t13Vl~fi7p=At?VzmKXRhEN&X>p9h+h6#2WL9V=UuQAl31BK#KQX z1(NAR>8cnn4G`A6vMeL)w#kjDZDbntx922ue zg`U9{Wg|&r&}OEiUV-6>#6w)#>)=!|s&Y{zO0iuhPRwLzdsKTr*aubSx!P^z*Y}OI zF_f2sNN$W#ZCNhC8Uxl+7E6P+A%1}wn^Q40D*h?5-`}?-f(B1ra=8mE@mQ92iL3HB z*PjyoutojVj#;(7gvAY|pq8n*xq#%HN?n*uC_5k!;TI=nJ%Pul8Q{`ZbVD61HiLqt zafN!8lyfx#fN7+lT#iL) z93y9m^2^8!6q90MySNg^pM($3nG~sT`xPmNw`u9bMQA|Zsz=ZvH;D0R_j=xkc!P-XElE{ioNk%uCNg0&)6 z*&zwy`mk9`t2AcF7loJlW|Q=@_%P>VmJNn;fDrg+mp20r{vw&GRtyqSM<``JA7y&*+=Sf>++XDI?JZJbIVZy~ zpT)(Fo7XFazNdqNG}753q?RfsB2WcaV04d=nzdM5kCtw&&g|Aq500ai0@OUD2O+&X~wKBA^ZBENu;F z<=Tj~?@obI8pjNo{KUb&dbRK!9oN#FKJ5MC?e(+wS%s|h7t+YCR9uC%h8$zUNIJN{1)sPTSaXjlg_ns zKUz=kBsUAR>@xgA44I8)xePYa{lMj6kd#af{6^7<%fK^$x9OR45lbo~B;xcTbI)|r zk6uKO)6~*n6=h1<>%gn3-LGQxDKF-J-^csP`89D^;`6iC87P-sq$0sNqcl1mek-DR zed-FAYJXC8myGzQFw_5{!kL?H87O~kPZuV0rqbS@7P=n9u)J(>I3<^l@ZSphg*z%c zlqoqYVF@!1H#_{~o3ZETgHAgpI-7s9oF)OT`OH)zCBJ;~v-*HAk8Nc~x##98jGi!h zx9^NpOf0S9PS016vYzhy5+&i>4s+ZapRmg_V!fLS!`(m?SsHL}YTRHLW1^*aAm%_o zmr2JFRhB&VJDRFwce;NG_h<5%G^&(=XKe~?Y<~FupgR^v~>Fa1TVqbRKQR@VfP z8OEjPeh?KB0F~ckQx3s*V89*-Fo^OuYx2m8cMpY^0#sNbaW7*2dK*PWj74Dxp(2J# z;h19>lySk!+gbK0y69Vb#+Z_F+yso+J?9+71DC3o)v3DIj_~7}CubU{Y?Kp;VoQsY zWYGwTVCTJzj0lZmsf6Pl!2;>vxJMq{dT@@hvRysUp0F)|)tUg$la)-J%W7xG9nMd@ z@0u4)_@6ux)*y~6oPU`gftq0^W8+1|`X9n0ZKHTq*|M!-F?lnP%z^sIDk>NaqRdXbisY0Dc7vD_nt~MwhY<$_&|L=sTfD4;c?= zQEjv^;3$$Xf?25cScL`XX^Bz~1(*oz5d(+j6uL}M5-IPax@VwM!hbJGYO){>)B5j zJGhB0NKcqWpk3LKd_uwOQ3nn!#YPU$G@P)CL|{JZGKUCqnMV^|GjnYtxmsF9F<64m2d;q=mq8H!pa95s;R;% z&ce!PKsCo4m2BbA+6DDG;lQMG&sMO_XWeaO|7-;vmtKsA-pS76w4p`4^&=)GZ`kp4P0(Ir! zT&pGY-g?fm>7Vy^ncyPMyCtvj6Ma#e|JIuHq2On-B9`0rrVM_%O|l(Kq`(~Lzx3!}5$8FWk;rCB zdnGFaK5f7E(}I*FngMa?G3R(=QJokR#u|o^bA?{$efJYsxX`PrwA?DST={0Tm8*LM zu{_Jwy}PhF$^8$@$a*8!`pC~Jtix*Q;=eOPYwS)NYJVHprOl1se>$wdn+r>FBX*z> zyO@zx1DhS?qSZsLt&Wl%d!7|7g$>_@N5(L&RJk3Or!{dVBo~J%b_b^dhjnCzX)#tZ zqvbJfmg))xHr;%V5$!OofbE?+9s&3bxriE@bs_E6s8#b9w)lbw41Vg*@anIr-#LFtsNGJU3`m%yUjOxFcVu z^?j(EE&KG|vApKUtiWA6&}vO$#mLO4Ohnb@qT+0Zx>qP7c!>>wn_KXy;q zZEOao$iyI3B++!hA&S?%yDOPpBqg27zIxday_pyv=rX;`mhs%tU@0E$kjDNkz6m37 zuPT0&KS_5sZCWL%#w68CAw0}KXan_Z!Gy@%1Z{B2?76%rJK#lt5kL*``+n{8%hP?& zF}ub!N#e$ZXC_sKI{SAZTft(MSDp(Z$X0!ZFBB3^fEmCkA-d+7XHMZ$Bl z`4UhlSDKFjfrX}#$}N54URW!@h57bVtllvGlz6wdqWfp%?Z(QxGwPz>K}9<&MgMM! z?t+RhUKQVT7ejB0$<2yM3ri>^i(xdytgFTJJ*CWrrF=alLboOCW@S=^WdgTlJZ9x$ z!Q~3KoY%|MiqR7nZ*;t9UM1hnd$G!AQAH-Q< zS}YF5Y;R+`>;qq}Gv2Q=7T(sB1=p6C)xN#0ZRn|OE3B)bsrwvU*Kbz$A-MiyVf|oF z{cv!@x1NUi+lE=m#;?JR(>;wVG>yM+8__$fjX#2$E+m`oXqrz7n{e)$@V+-;+%;p- zwh&0Q5Z$%VOSRI5v{HX)rMzn;muiE(ZWRb=<1uez4QYA+5ShTME9|i{Mr8elgE6q$`mY7EZ#lj9clT#K!9-;%Cy8 zEY(vHLJMrj`c|{a3*899ctTcEN`KoEv0f}HhA}O!<;r~ zqvqKwZ@XCR0czF^L2eo2kK-3vTT*>kz0{fF963@x54L^eq5au)J&~&Qx1qH3Ik= zM|i2d_o0Gd+zqkIS2aC?eE3z88!q9f9SsZLi60g{<9Ge9pN*nRu$_>j;Zkp>MP55c zK@A4XEQE=<54ctiQ}9c{qPAr;a)`%BX#EZ;b{;SW_o>a5 zQ1$*fjFI`_NSo*<;m_KNeN2bt1i%X3VpI=fjMdS}^tJih3V!>B&P>T;AbAO6N{WOlien-!G8pisCX$@UMB)my@T|x|rf@*?h zO`mN)+QjxIi~j6mNs}9Z3~WF2PDS;7r+K*-|1ho#8YNx&VM)o7Gcff1o)wqF_or(L z&$0`xr(@B5N@2O05eMTyWK@vs0q}}itTe!nxr4r&6$QXSF$tR3*nUB=`m04es`!%X zA8dT;Li~WqEh+wbTaDH)#X=$fnHSSdgLgNr@AYKZM>mG4DHjzL~>=xS(b@drf}wA0>|Ff+RJX z8BPN8w8m9MzxqnT_N0{wD>?TojdiJ3fE^kK*eF z0(}uq@muyY5H$9g2IP7#mB3#z5c5a@58dN09ZDp7X4ab^P&SfECl!2;D_B03$)Zsx zohVo_k;`rFy^Yq_T|#IfaA`C-npqU{r9*D-@r0{qN)(f6WRiq`%UKC{(BDTw#dZbSiPSANSbPXJ9P_p92p1IkHg)5Ls}l0x_nt5UvBtG--;N|RpkJ+uF74Hclz3C= z$Dq5@mX7>?>z`sSmlwkbC0e(~bDrtM1T|aQ#@xIczmIoYS2YSJCno8owi%2~9;H7Y z_4n$EiA76vrbxa2`=d9ch|u*(n(2)9-~FI2bPTdH;YH|`hFbWOJcTbHdF}Sj(>1b& zzWq|iME(WtP6nfK;Yw9-QrL%ZFyd2alRgAr2UogO#IjBl1dJMl0*M1-R6>tWrx796 z-VnynH*@Go1~mV&D!kwcDU}PsogYOE=fp#7&r(%w6WQLGWHHc3UcGW6-zZ-50^xV9 z$<5j1d=;M*&Uzw8Ek^BNRS#!)Ea;ijubj9KB*}pxgmaT}B?edHh?0V9@dk}AW@_Ah5l9;)YOhT*E^mKfI0#pt@+qs7Pk*AtdNgRXv z5_u?ZPEmpVLpB~!Fwc3ETy|dKZYSLG4@fr;$VcWD8+k%tmT?a zo}}ugRi5b{L%tt3*J4$MR-|_(j0;WZJL4VuJA=2wB70nmkNd&98#fc>vw*$_fbhb! z*r^cFH*Q5UR^dec>K0N9Uh>@R1{h8GY?x1p7F{hrHk_8KGsJk3*%<3KPuvCK{<^I| z0&P9rhzN^M4ctu95l)wh(iuvQA-i}FX(C-&6P;#?VLOrwkg`usFWC;#to}`Rjwa@z z$0tqWAFycE-P!E?#UQGf?<)tLZ4ao!pHnY8s*|UwH@9Dfi&S53BT`Y(?DA_{+AnVsvIQQMeuRzWPvT2x`P>&WZ%?kx*pa2Z`}HuW zl8au>$~b1NBi?;h3?v;T_{CFBk)gNLG}6(TpeP3_<(OXP60Dw|a_}`Iv4ERh^xFpF z=sXR#II#Wt$ZGkYXTBbLc{?vVtLhfFB{_CNk`)!c&HwV1)7TmJ0N8N_8z%3jdIb0G zBIkN4hU+uQ_xT7V#@30$q;Rnwy#~3hG7~KhH-Tq6P}@Y;6#Q`*7Dw|S8G7xQF?#bA z(_mhbe_U31=Dp6u z2`E>$er&a5ndmgokSas~CaVSsso=mW#seDV& z>Yd+vt_8B(&%jOcPJTQXbND%1KQ+T9Ab(gPRJ20zu44uk3H&<99R)}kD`RexP?h`% zWH_YX_S!O&+I%!o#U+V^&(WfkrhV~!i{)P7%d4PtQylVx)B}R0VqQGUtz)1o&Rm>I<|| zMMrVM-hVq@jrbA(6Uy5N5Uyyo0jskOU$SYcrVpGy zX1QxZBqBP-zeH;KS^Kri%2cg?hkk{sDa$Ee6_Is2@D0WDnu*o5Ka230o@uzH;&3>R zeJ4I1QuTYs_iZjQc>FY_dF?Db#@erk91jT~14Y=v1G?AHmVbp`aV@u)h-h&X|CO&# zwmN511OjLNzW6}!>xaKL_pDMs!ITC`$wk2&6Cpgju5xaKg>bT6H-0q@peP+XpA?0lk!DVYFUIyTy!#@<*MpWHEe4ms85?kEpJ~UK@>7nA)c6=(8*o z?4GNV3w9ESn&sQ?QrCqzWU3_xGuL%;syIAAH1ABO-uWAwat?H$sur7il>Ly;NT{5! zIu}yB5-S8iR(+m4D^goHBEG=B@O5!maGap3``~^+d7Pu$@Ak0O+3yL(A66(2Ur2R1 z{Eg{lUPX_!7jxOVIt>QHCPdkrd>(lBHYJxn@?L+`;aPr;h^d%(r*bq>(vW~2q`Pq$ z-Ga=eCBe7#@mm5vV&(EBbcMi<3WU3Nc-*tGey+;yrfnrHCE21o^8M9xdi zsa0O~-=v;Jwq-5>zb;|fxgR^Q%Lx7MByl`M)4xeu9$by47{;Q|+~;}!3Z7&o{I#+D zjQ`no!cFB5`BS;eHht40kp|1<8~V$3^YT}uusdj-g+pGRCERK6sC46{e{3D5E4!oS zs{n>eOAp0=uA^e>!-tn~^j1?IV)xUzX*ar6-v2s9?v^8oZ^M&i&9dpo7d~bmk(LD> zFxE&vBS%yD({B?xi4PvSriZM~KQi_-$^4r=4*7v*7;EN(egksglQXSO*Z-$+^6@&< z#PU56EbTF&ZxBgn_k*Po$5%}o2+Y@9XY@Lj&8vNtLBRd%Jg_O{B3tkN>MQF#Q3UcK zOwuT6x#$sR1^sY@24e$oNMM1%BEff}XvR}^N_-RY?Dz1sOYQo-=YRD=vAW19uAMXt z!f^zQHYlOc2*}MI1i}>Y$}!khRJ1i8N_7o=LkZ=^bv71o;08t;=|;~BQrNdTxaS$t zds*OmNg9LvqBlG+mqb`bU159P3YZ?Yj0k{-~q8n zbffT2U_V%(lvNNsZ%A7v{ni2z8ba)r36_nM|7T77APm0A0-JJpp!Q=f*Au}4@xVP_ z_X284VRyf)L}tq9R57SQAUbIt)V@|4E^s=oqI34l$oZwZk>){sZ`|N_4 zm@>FcHMr=CgKhBz$E^52y@-EvVQfwj`Fk-b(dOcNDb@bbosk;pRY40JK{Z1j{ktyf z2@z%f0egWF)csPpPz-c2CW#GdLmvdEiiiw^)R#g^W_YTK^&lmB?GTF28DdQvg3%0! ztf*Axeq7lgIE^CxdqHZSQ7Y0g?YEH>1(n; zg3AIGl<~I^?+y3)r3E@8>OOguzef!11MzKmv{~Bi|yn znkPh{11IDfyws77Z<8mXCb|(}V5`DV6qzu(Zr7+tw3*4|HmidxNB3Olm3+y|_Y#!G zLAgxgP&-4ASOkQ8COo?xQYN8zw9c(KOw8QDvyee-8YoHW2woQe|3230+~5u`AxeW~ z_c)UYA7@W|EBMr(9@u3?1q62{^yf82 z34l-8LEF*Qt;93SF;<&BkeJJlLcIWXTI@{;C(O4`REdnZNu5^BrTPt3?+)Bf$dXad zA?krh;Bw-}*}AfUqynLVB;K-iJ{raqh(h<1k-T>lp8rw$7ARNvcO~L^6^|Db2V+6; zBrDHXav0ftUKF?*J)QCMd|DQTEU3JN#8TeHyR=?cmO2AWC7`Cx0H|&?bVHxbC61#i z)z-y#Tvdv~nek0vO0~Z8bY;bWvefD+@5?0b(;G-Sew6}CZOfv0R%MlwnN+n)>>H zitX_($;<3EYOyfI`!;jvwxS0=MPpPsy{EP;sd7!Srlv#>33b63t?!boHU8uKKDfS6 zxv@#oV>n52yC-q0r>2|BLuskDAg`+Zw&ureLsub9_kOKGPxV*ZhFO<-sJRDluZiTf z%c)C^+C()=?ukzS}#|!9;CLnwLbl9m7YNjO|#`-tqLpcV48N-5A7_lR&R=8{z+;Yb#!sa zQoH_Z$TeOo!AVPZNr$Cwr>AeHC#=H}`_(IJ5#79(>nr3N9PbxEowk!NKAF7_InaFE zf!ubJSkjiWhhz#)WF^09Pe{&mK8R8$NN+MJFrg*6#4G2~&5@TVQLFKYC+OCBRfdw% zi~HUUxeZ9F<5vC9nUvg4=F$#>YHM+Udh`VEx}i)fLa^~}?$NZr6J>ntX~9Y!XDBfh zD)^s*?Cx?NvBd1plOIIBcdyQRN=TL^YWP;FlVnZwV&3Lc)+Bc+w#fK&Og~FwON7?! zwz?~(ex~TA3XY=yW)&p|B+5Dbd7Y`?YA)o&*dR*v>vfQjN$z<_*2<*#gep3Sz4r4% zH{_rh!kP_v#@|Vw+2+p?|2E0>Lqg4TXN*F8|Jxq7RG4>KiO>;$Z$C|N>a4PPblk=3 z0eT$efv$=&vHp*^jcz#=VYRVqQt`yIvD7KhTr&@gf*3KC7)t8F%f_A&kSZiq>_WQVo5f78zifh;5x9TG) zLL&y64zD9ecmr6^0g+ylecvv?%$j7U&06m(``1(}5p-VIx5U`NV3MoBA*n$c;MfmV z-#Fp%C%7fMmR{C%%`DG4Lr#p$SJ2gl*ImxX!JvT|TG1)>m{pECG>K=R> zF@4(%Zkw83T4Qj%0AE9(EqCS5Jb`8PMInb2mVIB2*1q6vd?B61vgJ?5?Z?7_VG|2r zDaZO8xdLZtBcs z@9Yg7<#QzTQF9Js`YYSRSGLqSynbxVw?!=<9C|=qmG|U;xCvT03up<7&{K(|4}dNP z;>dwK>OeTU3ra5*h@lH|Zy`axkd+t!=oqZ`cD}2Z6#zgx3|Cm;c+I0x-*907Or~!* zuy4=bLUiA15gdbE8W!<0RfyLCFWy23*8zwZOT4;E_$Tw)4`AOPOMY)vq{ASDOhDZJ z1)aeK8c(26*?Ypf6)ce(h-7Pqa381R2s=Bez)_2qPPv zCYgGGemR1U6Rpt#eck4uu{J2+VGtKvgG;^Qh&5$!~zX?0LvcD z({B8X;raFNEfgWMOmRFUYLfJgay%8|3dGc#xmz?J9U)3Yw{3y5XIC#USoaAg-C^yBBI_ z!p26a0(kt3`fs)L8c+nqC>*(;-ZIPRb%62qQj`|->?8Ct6%wnp93}(x*8(DBb~>j4 zu8KnO)603OUv}u;H}Om`($2?{rks~vGA5E@eXnS zHpRxTlcS%n8KA$zwprbO-5&iiWmuQjqFP_=j79~oV>7G}aqlvj@9wYd#9V@b!2f?N z2m_byx~aH73WJ20zwiHz1+9&>l&PfQC?wtI7c)hLv#U^8czOfXqdEVJv;UpN8uc2N zWIKhr)n2ZMMXPk7JIhfH2TmQcP^`xq7p3!B{jIv6y+Jj@;|6kLV;Dh(R!lhl(^0#U z!G&LIa+m&M^}Wm1I}uel3m%alI&$X2d(PN!Rdlz7>9JfCjxrI5N3FPJYczvdt7YYOSVwIu4ea?Zl*!A1+maXwSPL9>A4cp@0s4IOiMI zseTTxM@>56YMo-NFbw)bK#(dPx|z~m@-!-*0M_(~o|JrlZ*a=MzmEF)i7AcJbh4A^ zP9AF|Qv`oe^%=SQ+Ix3kHAy(;V*t=1Xx0#A>36iVj-WtU_sfxq|1aMojUu&;lQ~Y0 zhs&tUIk4n8Z6)QZnnvL3JYerr7Wh%2}AThwgp3n1)8S+?cV`|6>^wjBnfdN=SdzNzBriNAqn@8e9 z`UlfDItF~}{8lgddYk`yiQc~2Lm=8OqVeN*L#ghLI zs%^r6qJNoCktdh8u#;Y0S^LL;hl0gSRbT>b0s&M-cK&JT+O0ikl$yH*Hvp>7x#VGZ z$cUDwO&8+Py|eheZRV2Vt?G#2q-}D;r{&W6&!P?ohzU_Cy;tZAjc*kjsR8T;J*8I$ zuLEoW9;OztEJl^$_$Jm?gqL?x+`&>+vBJ890`%Pj(Hn8lp!==&l)-meryB{32JdO@x^y$PuyY0CwtakT zMAnSW-GjcX>uAMM6=k1*sms%?B!8Edxd;ELDw4fDs2Su9Ic)#x9&*(6t1;wn?`NwF z61M0R!Fqu&`1Qa<_NM#ODY1XjhWFLm>8g*K==6&P%5AXB(o-x5F&iBoc5$xxPv+{E z&)1LY=k4JT#Buz88TYUsq*+(T-`k7GEvbtHeb$hXxW$8x9G5TG-OX$o=T z_%v0Bh)M?;{$_CTbE^`ejhEBlozV$L*YQxL%|Qm5mV|%TDrC7-!vVcz^v3nJgcah$ zOpnJ*`h;p!-A+n1DJKm7n*Sr4_X3NGo}@mfQzIeLQ{r3|NU>X(r6b5v;UAf03L)Df zYvCBC-rP@2&@6{jj*lrzdS}Abwi`*t~gkeh&FSXvdJT_s<-b9xA! zkn!*oD<9tVB+$$!LOj?3E4zl-PFepoXL%A|+wW=b!m~H~=MJiK<6r!fhTimY?eW8A zOErnpx!x!;usy=iVBOWzA^=e}5=VU|ipDpmi?B*^aC|0ClFaxhrTQrrq-*y{|J~J= z?)m;n8fp<7kzZYfBZdcn(kL?EXw|42Pt4`Do|o{a)@VAa&j*dkRM8Ko-Es3tVVssZ%06u26zg#JvMxSCq zg%@O4&=JH!QgTO6M}y1rI`fdo`EXB<8f@oUxneV#P(8z{+vVw~h>PX~zZz4@ z$>ouxZ)In=JJNj;S*TrR#$svQ=VygWsMW1jc#z6@RxR_(@`1)z-|DRh28?U;b_|P9 zo6?#R1Hl)2~%z`?|p)%SMrdv5eQ30_kZK znCclBMe$0yN+IL@b4tWo@|S;grg79Y(wP2A5E!NF)a4fJTgluqhDa+=bI}bveNAOKLE`@ zGQS|H(8fQyL5+Wa_aEa(DmB{S-Ky9&xG?rAa%W8A8t-Zz)ZoR4v4IV92$8r7?8Y;g zk&g`LV;Kit>Mw9=+h+*F9N{PiHqudyW$Yux%@qkfl1PnX9Ag~+pvF*3Y>RH-^t1sE zt!=9t-}%-z|5mS+QEc0>-+C0}3qklt2zWsT8~h^%|H#4?mY{?%{G$R&=t2bI@DBwP zWCtAhM+st}hJVc9ABniZ75>49OMl@XJ*c!2+rR=clpqn1`13y^9fCw8;vdx@=0C6- zl6>IR&LN4hu3I|X7TfsOzz%j((ou_VFyj|$4TV}Mdkm}E1FgplMKSjAj(zY$*(0$= zEdKF}Sm+qR2FY?r=#h@{o)#B)$mvK*EZ$Spf*&2lE1Tu}5BhGauTzmKolUuee|-97 z|9Hbe$dH8z*cS>00meZBfYt!;0(h4w0S6KhtQ-8p7XN?%FJ=&dgLJ$gB>=S&0sw}8 z?18iM|G=U-zHyLz1o9u|NCyRlP4k-D{N~JKbD00p3lT44iq8$lCqNO7P&7gt_IO7= z-oXrvTTz?iu*EodVT)SKL#^Wog@sdV5OV(m4?ZwKL5BK|Rs4e+29d+r)hoVLz&o;$ z)o&E(T>u3Kt33Lyb3tN(hCH{yARz$8(YEl9Qw#zCn+5>Ff7xiX@>~f9KL{^kPyt)8 z;2+5VbV2eQ@_$U=2G+3O1VY~If7oLm;AMt25Znz4hEf>RfbTnKv2|ir^!B*Vz3z9f zdz}0J_sETVI>v!kFk9FfI`-%@rqOI+lwPe%&&P>JVhd1IV;TQAa3g-v4O*N+=2|ZI z|7rix*3z%y5CuVhdhP0Nc+;aEaR=qxS!;LmYAW`GTF2_et`r*L^8v1tWSSN2tF2u2H-|Mf}l zpnrw;58(zDj;Dz({B4T)Vb0HdLSZBC)29VGOelR+J_Yarw4_$x;+JFfHmk4mM2iM?l zjc^Bba0z=*2L%BKCiVtcfO+1SY6o!&;AI8^cUs;!4suWk8fZrc(G6)OMI)FG>3|Is z)OyTNdYjmf{`ijonJZ9O5J^;!s6|6q2xj!K3Am_>bH|JIhj(R2kiv*-@^cE|^F#T- zTT?MkWqLqwL2Dzymviww3ySRRB)G9KRK5YS(j&6O1%bzWQjPLS(u#JnVt!35YtSQS$Qk+5l;Ln%Jaxt-kEo!baim*`DtCp70r;@;RUMS)cZKpZJ-d`njL{*`NOTp8y)50y>}sTA&7cpa`0v3L2ls zkPgcTl;eqCo#bfWS)mqsp|#lnpWt|sDU@;e4?ECrIq(l7TA~6?X`lY`Trdq`gf~r+XWJOREorij;SyWwx|Eff9373zVBYN2*+GJa% zI2VLDdv8jCIg<#~VO%a@)$XPowSsVC+??g;bw<^aZs$sdRcv`Dx@l0JB zp>b9aVaiV@OXWS`gIW17b9%X1 z(Zi8a;jQljtf`nl+Xb$DX_C`LtB0Ac*Tqc!!>X8SZ5`zg6eK^V=d3ppic_>e8D$Wd zC0+jTOrY2!%C(i?gRZnnsoa! zYTL$g2N7F*P-#gAsaC341(66CM+=Q0Md7m#!Vt6R{~!$5&<(LLsZ()!q0kFfHGKu4 zv9Yxem@o*|kPn~G2+WWU7-v;YdkU8@4(2)%m=Lqr@U-8c4a>M~QfCmh5Dvod3nKOo zm~aU~>tgf33ymNQ^7ye}7F+-D37^moy+9575L+zwNx$G_D<8 zW($LWaZ)A>jKBzLRUTJ{Vg)e>1|fjjU<=f63fj;OI!0Ij&huBaB zjUaIUkOWNd53#U#NyGvtXAq?)1!$G2DzSRB|BwjZpa+n^Xg*dDjgWu^fmZ&Yum(|S z&oBkF5DM$~4|Q-1Pyn=gu#AZN410hLYH$fz+Xj#TUUnK1wgA6<;9sE-Tk<#v!k~z2 zRYIq*2ikxJpfFr!@mb*@YRhm2a$68dRcYZ+2*MBwmOBU@*o~L~X5|sGhGq?NU=Muo zmE`!h_Itd4=~0CD4{;D%#b6C@fC)eP3H!tge83NVAP4ENddFL}2jNjMD-4zk2j9>K zpK!bfrm=i5eUZC*x*NtV7nxrAy9FV)DfhYt(Fk>r1VI31XAlPCumzh22ch7H1;J?3 zs}kW@2gh5wR51=G*9UFz1{5S}n4osp|G)@!pmr`<6?ASB5ymL0Z?C_4t zumss#2rr{!#SpW1yaj4d3`-CORiIXbumrr21<>0BqSI{ND-!$Qf#I;sdVmdTcg_2h zM0~&t2lmKPVUm0>2yH;Y&&&sf|B#HlFpVgt!_>eBtG7=FCI|ae9@di&*f0psu*}EH z3@`l;%iyUWpI~wD1d-%eLL-$esKTSWpc9$7JOZ2d7X6 z-*9qr5Dw@}4LE!WK|L4yKn;KQ2F^&<#bCKNk_ed44*9?bkN^kc z&-73bRy&pizpwhZH-e@Vo-(*R~rrrx&jN$+eB z(Q^t*2+bEqiu2HHG#d+ZR6{Ix3cs+fXCY!5n^e}|57~`V8O9IP;9uoIir^JR$3R^6 z@Z1#CY~ipBCHM^da7=0IV)-x);jnbi5K7$;JqZq8$^Atb*Ls;9#+&V;_V?McrB$kE zXYJsup|n7xC_nULZAnzF@%E_{)Lj0sTpkrYm-Sf}G~OSXt<&T+vEhA>OS5J3Y%)J)~IQ_cOEe({dEFT_&mJ@#p5CG;^yc&C!+QR$UdJ zHLj_s!F*(T)n7WbUN2P9tCvAq>3{K#WOCXHIAg@sbDffXIhnuT9ri; zE9un*Sy60?RaEL>w6dC7S$IAbQ*^3@9uiPFmVS97#T4n1rK<31N3TBXpwwc)8pYid zcaqgn&K2vX_v`-JsmtzJs)|=y354)Puq<0yw0h~bn(1X6X9oZPv9&_)AP=84N?X-c z7|!h4zV7UfiQKNM`4#}*t_k3SKnQd_xT`BO7r5=-@BaRe+ttrxNTIOy59{y`;IIzh zu<#7u@DBg*5Fhao4_>$a?-qaY$hA=BWk3dWOad>F9|{NsAqf8f2#z4~1!3|iU-Bn! z5GwETEuZo+|IhL(4+xg9@^n^RWxDe`-}65I^FSZ;LO=9GU-U+Q^hlrdO270>-}FxZ z^iUu5QctFPWDbO6g;<~Uu43aLZxH=J4h7K<1|bW+K=!gA3;%HTWpDOuzxHmg_Hf_! zaG&>v*9 zzz*ghsNxW@mp}QMkNKU?`Ihhbp+AM!5Dumv4q2c2s=xZI-}<~q*DS@B0qu8JQ z+J6u3|C6jf`u*S^{^CFWfB*QO|N6iG z{7?S?@$X-+Jp%I`6qxW|zIXp11^8E>z&`*AEnZ9*0Aj*+^%NEoIPcy_k|j-^M42)r zMwTsIzJwW5=1iJ3ZQjJ0Q|C^eJ$?QJ8dT^|qD74!b@?mg!F(3;?Q8fj;>3zIH44P^ zuj9vrD!qOMJ8vFRvSrPlMVnUbTDEQ7zJ<$E>A!gh7210m6{19nHm`E@cyVl8!i5bV zMx0pjV#bXX&#h}WVP1!OsrrRjwdG*PojrdB9a{8g(xor{Dj2z`LdsJ4YMyzuYCF@l z|83vKom=n_%g<5%PU#lAhZvEFVA!pvroj->jUHbI7En8bAPV?{az{*3OwHMyr zbn@lRpGRN5I?L+u?Lk&0NFg?^Y*bd}0}gA2O%;=M-C>Nk|w-va%&1bN(4K|Dj&~ z;RO?0_F3(nUP4jxmq8m5=8{t|Stg-zP?R!MQAZ`UEh?LwEI8M&)XumPliN(8L`6rfB1ZqNxLQY}fnKsN=CWvF|_~)5VsQCw*gjj&%m_8l)rw2Lyk-{Qs zwzVdae|(4q63%!Xhr}Qfg5wiw6C$I{Qs9@XM^yk(|=~T z0vkAPP*R{S{;}l-g9T~>n>4Vx+g`Qca|CkCUOIe^Q z1d5@Wmj78-8({sJQJ5UwU;++-#GOZFlK(;Z5`n4-v>0ocNTNk4KGB2Xgkt#DpoG4u zBMhStM?CQk^R-fG_eKQF#HbarWrji(5=Wpxl50X-i)xACA4VMh#!E&)8RXZX{|O~z zUSjwa3N_SdqLvw^!9)sM2Ki+4hJlTRjI0uwftei#355(S{wd@PW)+7%dg+^E95}rm z&oXjY^Rp1M@m#xds`Y_ze* zILI`QZ{~N2BUI;}v!p>BW zHI5Te_OkLc6a|bm{J7AK-VvdO_=7I{xRE`W^p3pna5dq{$Bt}dksYmOMK}})4#UF_ ze<)}y?Jx&kF7%^>_`^q2Bw-e{xJ9@itxDDtP6}J4rTKvBC1SD2SjK`XfZatfF>;}R z1X7?lcF7)b98Vp&xJN$raVMv;2wqUgs(umYY23378)KqKKQ_{lkA#T{Q*}Kt7IHT8 zK_nzKxk*lHNRkE_B){O38SY3flbu9mDpjc)q_HQIOoNGRO1Zr*DI^@!utqL*xl3O5 z(wDykW-x_0Okx((n8!qBGL^YZW;WBA&xB?)r8!M%R@0i-|HNiCwOLGQg(F~}T*xa& zbV*azaxx%XWjfWl&a@yzh!z3ozF_$hS-y%(7^#w2^tn%d_S2vL1ZY47I#7ZZ)Sw4N zXhIdbP=+?tp$~;=idNL37sY5sHG0rHvLv43RH0TZ(n9cvhn*)yX-eT)5CO4K zkd!3kC@HeSgxph)K@krlRk~B2Y7&rOT$L!BMoN25jx0ItX;PK?$dAHQsIesKAMFdt;&YeU51q8W8`JURU$USWb4d$?#GkW%c7c$iz= z)TKu@!r_X7SVhHJwk$$)(LUZ;D&F1)A@kq|aOIeyc7X34=!2njv)d4cFhw$^884(< zB-n=KgM2#Nj~+$4G|17ED@S5UC>qg?e{_Qu#lXZdc=3-ud?FkI5ymMF{Eu+Z;uO4i zMr}>1+n6ka517~oEd)}i)%YV6jF47yjscQo@QPQgbI2g9q2XgFO&}s{}GE{ocK4U*@rOt@Q-v&gBJcs#4+9x zihNk(7t1=u$29CCkH$!m@~p2&?|aj5B%&L>+e0WIR*ZMhf)UEOgi1YHs_R$C0^dS-JdrmEw{E0#sED^ax(J5HkC%U?2!QD7TEEsWKQH@0p z+DHT>gj|b8jKz2V_=2uP8nj;}V!+2(MmYMQhju8J)S|IRA&wy~NI2vhXGp}SXxs>Y z>;X{!s6!O%=*2UqwU980<39Lsigys(A#Ko9R`yY-eW2(Qr-0L4{tRfA_(N{C=tUgl zaEfA!jThX2wuVJKWz8uiE7m&2GYX*x|1U4*8Fi2YoK7)_LV?yvym*5gmH~-29EuTq z_?LqDuq}J=K_Il2+kinqqpZC3*P($?9OC4=)j4}n0wL3;VlrRsjgcd$b;&V;_>53! zLmSfoR68Eb4`?+-Qru>+-TZu4c3Z?8a^@3_j}Z!N@B$R!=mjmj`J8wCsvDuO)}&}0 z@Q+P{zrSM(c4f^Ba~wl`*Xs0>#&Qg5g!mu+;L|kf@(Zy4!W_RChcMdau76mg7}Xd@ zo$^5qKJn8u;|YhH+eT#uTZYUAF(Uijte!_$qatEVPc$JN|IthLQ7%-3KSQ^|S4cCYp?@4pn!)hn9n+npfPA?8 zGK0w4qMzk|>PR4#)#jnX|kpU#Y0yMw_M8E`8zy)N$26Vs&gun=tzzL+l3beor#J~*HzzyWU z4)nke1i=s#!4Z@|+7k%S<0`092&oFdIaekut|b-34$;5 zLNFA=FeJk>9K$p;Lp3bJ|29O!HH1SqWWzU2rJp@EQXKY4fgvM!<#%g>rRI@iaqxvAOQ<4dU1T>ZewvG}A zdZ-6_c)ou~pnsqToaBde$P=c63m6%Re7J|Wvls7xzIxCHeZa_*2ubThMVk{E^kWHn zm=UVn5q`)?oFt-mq6ZtwJ^QIjk}yb&*d3Py4Sui%Sx}PaLk3qk6txrxclZZautLMI zhfs(Ge+WvDESh}~hg(PpRrm*8fCYijhkCfmB&rAMI}e7S!j?FzcpNRrVF{ALh0vDA@*2nQ3qjhg%iSx`#_ znGtfph=$08|Bp1wqR7c@2$`iE38OJRl6eJ%AOfrf5=gVNQJD_gjARVL-+$c z_y-)#gu4@n`s6cF*ckqlO@+XQD-Z@!#0`D`2Z4|U7#fLAPzYH#2UGY5xpW17=ufz~ z4|~us|BXCTdkK$y;08$$2x)+^a!AS@DNKQAPI@>|4f&vHYtiVN%q#(b6#_sP!V73& z%~c47aJYtRNSA8}kazIRe}I-GWrk~@hICMldmx#2NCsY5um}Y-e&~ZL01577jIqGa zok5n|?6UHocd9Fc^H$1%=QDd`QZ5PzCA~2*Er|QsoU? z{XCXR$#8l~OET1QYC+bhsdo|*8evGRR1W@utqWnId+0IKyQA0BM-a*`=UAeT?A4*f z$aFAM8@dO6V9h3COt+YadI%7qbkjDPkfuQdObg(|X|4 z!EjZhDT$h`hn`JJg+-O04UAHe*m1I0?ZYSBQrdhHD2~k7$6CGxiP8vN+N!nMtHs)^ z)!N*8SpnHg5c(oDl1aq45PBe=cPI(P;Zp@k+nzk9_Gg$A#R*Rg%c1+{(4w!L1Z<3(QOOV=--~!(_m$uIrQiCs-}}Yi{MFz6<=_6*UyP97gm_TG_Q)9#-Nd zHj5uVL3q5~nzPm-&Q^6};w#4D-6-1JrQ(^);KBPu4hu-zwP3GiI_T*0n=4h7YX{P3C zw&rWb=4{sHZRX}~_U3N}=WrJ1aVF<-Hs^Cj=X5@2IZy*QaUo&OTZ;uENT%m{Rt(&9 zr9@W2MIPFKwda2ZXtsc7@-)<*ZK;4p=!8D3@l?U`ln;YuB!Av5|Cx~J7`aD$y68Z{ z=$okM(y*&V>S&>$+L6xaiPq@03Z#!dX)9i7i!SM&Ak~mgT9jsKj#dkqUW<;dTZX1b zGJSv(9AV6(Hfo_(YLlc7qZW*%F6yR+>ZX?Jr>^RLD(a~&EUhN$sHW<# z2J6DI>agx=vPSB$4r;U(YqBouwKgiK_3E%5>U}-yG|K9@PHVQV>%8Xct;TD&2JE&D zY`Ruz<{<39P7%ZA>bZ96zou)o7Hq-Z>%1E@+SFTZMquD!Pasvk1@*?a%IP zB^~Y0M(xx7jM6UcnP_d+PHolpY}uY|&c+DXjtSg`iPn}0|J}B2+7<}k4({G2?bxpE zmk{pZ25!^-?dC>q<93PUX71yrZnk)B=$`KC=56f0Zr~Pe=T`29v233HN1q;AVR$)( zR_}W`vFQ~Gk~@_(C_``@Ba4h{|4{?7w`cm@B%mR14r-#SMUXA z@CJAA2Z!(om+%Rv@Cvu^3&-#b*YFL;@I5$#8ja%6Bj{JzMG`de6G!nBSMe2R@fLUS z7l-i}m+={gK!GR*kBje0wmIEJp7r+eAO9m9&u1OKHXfHVAV=~fpE)5H;z8ZqK|1U@L5CU_Tc2OrU@}lbTGp^e- zr}HIV^Bi|`(KGVhLgPC3^C-RZAf0{UVi7)>1L?6pQZ}J9y^FrtH?%P-w0#6B< zSw+WmM`CozbaXw3^4W8vCV402@DUr5E*)`^D$ev(SEWr4@f0NUPrnF$$ckR*8%Q7% zOlX7hOhaDZTSasC-*7n z7Cu;pXZV^+U-*;17guldPABw;hxZhbGivC9`#`ohfCTui0zN1RIpY;Qn6jVIgDVJ= zHsH6RKy;Kx`twkE27dUKmmGxtrI)8HyS53FKjN&F zqdC|6#Se{jcX$zZ_d^o=&PZLxxBMvy^T&tvEHCqyXOVQ}r1^xBc43{nOX||JKia-rs%Lzy05*ec=y&-#32X?|tMa{^TG2 z<8OZDcmCps{^@`I>X&}&Xa4Kg{_N-e<@f&R?|$(Ae(K-;mG!8zU-_nwe3$>td1!}p zfdBZH|M{o?`nUi4$N&1b$^4i9{RfD20tXT-Xz(DygbEijZ0PVI#E23nQmkn4BF2mw zH*)Og@gvBP1KZ8}XY%B~Uwlxq{FiUvyMK@Z{3}r4AApuRSq7l_57WPP^-RVb6iR2w zf8CZcZR+$X)TmOYI#o&)>dvfMw{q?3^()x0V#ks#YxXSKv})I~ZR_?e+_-SNg^Srz zrPh}*XV$!#Gi*}x_9&LP5JZA(0ob%1sfQ^VAVtawbuGt_w4A2 zeN(S){W|vS+PB|b2^yy8zNG=vM4oyz^P{dA@0K2&JN)?a=hLrm-{j}%D20#qYuaaW z=rwm3d(gQj+kFWtxFCZKI#^bII`Jo7abKMl;Bo`TR^UJSb#@?v4~jSTUSkKl8kEBaS)hxFe4}+T|69v{h!$iA5TDB$D@~*wTc={r93!0?NqJ zJM+jR&pid^6HYk)aQP*e|6Xz_<~Lw+S*Dp^{$tHMM0UuMhxW|V*gSR4iP)WqC4~}^ zZkpt#pIYr%BTGpQYUrCM4QkSyNjmx{q>-YvBuh=UXdHkrvNq*O_w2{vIRD_t4?pd^ z15=we+H<2l{Om&{O#HaC4?pwplTVw3<|-$nf71HTtBk#x&rAE{gQu(SpnI9xNL{>5bIBeeePqdKl}LO&!R2?>k_vnk-BHK-%9!}yz$0M>3%ErHy)-? zDz|A%o|?o7C-Pu>(l;cvlMgn829-`X>6kQ5INcQUOg_hWDa=3A6jRJUy@(pqJ9QCh zYnP<{6RN}iaBHeH|NMmW%s(76M$I=cb;D0L&zK{tOSpa`tE>q>GmWj-YE$Dl^Mr#f zKlT{SOfL*GV^YZ-*7eUb^E{KVJ=k>f?XuNQBQM!yn_VKkCs~TGg_%Yf<4%$M<47s+ z_)Bm*=k{UJC3~L&$3L{lamgo`>|rrW82=+o9fO!V&p4@;gvm0@9McU@w8ZkuKQg|9 zNi4_EV#}+c{=&~M%!C6;F}9q%DnGqUtrRnm{KQK>uA&ysDZDUaOFP1xVv;}9q{KPr zp-h8uH?}-8jxFNQLJKdoD0LDoq5d=W$!B~2J^1nE7w6g)dUc_u>FJd2KXu>u&vFHy z^vSY(n3D)l|Noq_QXiq{!Av7K_K)g?iWj6(th6!pcYj(QW-~*@Ox@FiR6ukI_Eo!krTU?MA%Miu}yOF5yaj}bDtj+kCWG@Om z2{muymrjOp5_mX_9&Rd_p9(R%0mdQ`Cb7jzo<7fj6g)NNd4~tQQNX$6J zFFa-o|JN1c6S#YaKzQ+wgqcHs8jM9RXo0wlnIsmjLy0c17mINW?2FEPCN$-eHfD{{ zNiH(uzSLJJBITk}S;8B$yyUb{nF?12Yezfiax!z+Lm*1)M#!v%n8@|18`dxfUGjFL zx?sZ^=1PY--f<;n+(8zcxCAn;;SXH?1E14K2V#iTOKOZG9qcFxGjeA$bEHEX=@>^3 zr(unf5J{h=`i3^lp^bt~;~PXWN2uPBPwr8)OEUdNxuU7lo$?ec(+uZ3W?}$q<_nur z>eoGF#jSfV^={u#7LjBnr(iMWSWW|$wxZ>yblr+s^xWdD+Ek@z(aKmTVTV305d=VV z|DqFtm;*ANaSwkqEn0SJ6F=zslBWXp%mu7qjmxiwB$mp$ z+SAEWwz4ewskwsskD*?wZTdPYOPE>`hc)$XN5f@17=q4pptH5EeXXh5@zg-oNltcR zRHOd%4|(V#6f6KlB!&@&xI0qaphYvwsD}uQV+;IAqs$Ca4Vn@WK#@741tgXJ?3!_3kL^m zn1Sqvqb%ildB?>O74c??>RI!g(IhJVlaNkAD;V3j%x2aucGJ9FV&yn2^>_z8?hpkn zFu2ZjhQlVvpbLI1nZvWfaAmAJ73!*TG&&#`4w`CKu`**ARjY?A(f0074dsSi>5^L61@IDNv<;|FWr9E$(s4 z2eb1q$EyQC;xeLGn|yK;&u)!XZ8hy3va+hLY_*S)yy_o>?JBNnyB}`xN@d^TR$hCh zFnhBh1=9vHG|F%ZY$HN@>hkxu2K6mBp*qGg_IP5%wZ(x~E3sfEH_B7K9dn}_)}3Xv zQQ-zBez?OV$bd6TD!D3q*t1qsORcgSs=a&|FJsThwKnpWv>TN~+4G==HC9#0X}kj) zFvBOcBD<{jW`Y8a2r@LZ&vPA$niTUIu6x!gBtG`m&y~b_}-+Axh+?Bths`|F1Obta{GrM|G>eIdL-E;^__JrRgO)M0HE?LYk^pgLTp&3pF0NO}UxLkV48cr18m;FO4tWl{@SV`1Z z*ZhMVd6`M@0VXJr99$4B2*V&0f;s4tNq|Bx#6ck_13y#=37W*ze8VY(LQ+6aOk9F6 z97QkKLc+MtI9$UVaKIDb0UMlw4x9lZAc7+3La0o`@R-9Xq+Q?yMci4;Q4Ejh{KGK} zkLhfXOjuA%kl`MJn1V?pAlfBaKImMVbOST&Lp!{mJ8{WAXv5%5|3f}JgEs5~Oznd|IZQY_A|xu? zmh_T691S)=PB+-YG#o=rR0A(!L#RB}Kj4B3P=F3Rffe8ZB3#2Y1O?jJL%Q5dI@!ZB zFhe`gRXQ*OHkbqAObyH^%RYp|F?7lM`Q9$sh{d!+IP3#8JOlWd#4%J7$0SVsF@v8` zBT^w1&A}8r!5aJ^_U&b}(8^%t!?+mB+YwL6i5!~&4bS9N?z}{} zR7;8aHnK$Cm_sAn|4WHUUU|SFQq{?l;g(6vqe%<|M*&nq zv}S9vCRE1eNw6Jr-DaIIoo?o)Y2L#)0E6?S13d^QQze&;y+o-AW|^s(a)M2DDQBr6 zCv>J6*a&90VJ3E7re+caXExMlc4NMLBdu)(ljXxWi~~%ar+Tg@d$y;0vgb#k1a8hJ zedeZnEm?7vmYVG+fA*(;{->H{r+{YXc4Fg6bS5K!=97r0%)Q%lFxgeb1&1tGeO9QQ z#21F%&46wwhu%hk{>Y6e9V3{;RBA<4Ql5&t1P7LXIo}7|piPP9cg)M2fAO?=4X^!DavDsIC>DPXp1b(%|e$A;; zQI5r-w3(F->SSqVmaf*1CPGelsZM}tgRYp$s0^OWgJ6ovpy(#6w8O8&1dT?QNjw!U zu~s{96lxvBJB%u7-AFp9DlWBVJABoC@JXd;SeprIGi?`3@QiNt$zjauo9L?E@kz8q z*L4!Av7U{gmWz)9>C3qxgQC&9{R259gEHieay3FIK*A@~11(AjXsAo0xYVlbLwuG* zBH74T)ku9^&5zncmvAT3!KzYt|J-H*7Aa+;UHD1f;0il&XQyguNod25gp0%2gHArz zRH3BFFjJS55Y_HQXuhFU#vw{{Bt3is9}EH? z%$`j2fj_N;6`lkXm_ZY~!7rpk9CXYR3PY_37_-#Z(a3=SQIFqX0v{ZM#juVZ6~i9H z0xjr4BecWF&=Xvq1TRzrPy|yk#KO^hLN&Z!^dRC%WQ|Ff1IIYb*wD%`FoUc_jNXMp zOu)o9q>KPLj4*IZKH!~wnZpJNP%n0j>s*jF@PaN~k!&f2_-U--mJP?Ygpa-}cy1YK zvV=VRgBqCxIV9CHV1XHU|Ct_{1TR?NKQzJU0?rlu0~7p16=1bUD zV5~{xENd_a)+~$1)WI@9!Y^kikF1tVzTk{16PR zummF|-nMC&f zgE-iNA5G5_KEsb%|3elQ69y?x_D+%#J8k@ZLO4)EI2_Xp3J}KF0yBg{Iy}QA@WV3n z0zcToJ3x{C{6j6A0`S;^GTg5lKT7^WCEGzRqqc;jLaPAx3q4T79>m@r5XBmVLCp5S zAMXJ#bU_zTpzAIJ6tsaAYVaM(31RetKQs^bK7%z-)H6H-FJQwyoS;ACoh@L@)#A$V z5{a2c-8a|*x*d%$6a(9diZ<9n%Gkp%oFB}5126c~7;fA+_+&SH!%MC$U}=LeOalu2 zaxt_C+3rI(e3CH8QukQH`(Z;kU<0<)pS$`_$BaWUoS)jgu{h%|mhOqe>~H_pF;9%< z$hJg1RIWad|H`P*1N(&2PSmrn)(DX-&8qAP-nL7G7A8tGja&jtW60~DJj+&PShkqU zUnQo(q^7noNm3x(n~)2nDwakKG_xp6Te^hqm=&(<+nyR?bIG?9iDd^J^a{X^#!X_$FMOr*(wrHNe6wV9}s zQaeb6Zna)BNF1*;OOvQr3+b#qs!22zw%8Vj^(k0DsDlQHd+ar26KY?h1XzD;8-{Gm z;W3l2|7m@oX=H!4Qcm_)xAbMdbfalDpDMOuOsQLI#hPX{XvcQqi8j@Qb!m^a$j0<~ zsP={t$7b1(y#HIJNZFL(dZHkShSZ3}j8XVatYHsBeGv?x|iv36iZ z*EoQxZj!{Q=7_1Z39eL$o-&J?vWkGwt9(vIvBn0Fa2#{jH+=N9UstyOI%~UCccom3 zJm5oaodnMSR*cz$$LT7t)^F1slC`Lz)DlHH%mZtYl1^g7sn#8@&E31Mid|rApD+}S zDGYBPcALc50cLkln73|u^ryr!Vz}d}G*CKV%f0pr!lsPwNS1x~xQ@!FIa4-iho)%* z|FD1Sgd+d~cm6{ni~}{;k(-!9C=`M z*fx>lHUL+i<<5;s=!2ZB0R^8#93+8BECCdd0Tleh7A(O7cWw|=fdxNs75woP?9CoD z0V6;`I`msO)X6yL!8q_TFEql+u0$KC!AaOcA@IX9v;!Z^Ln0)?lgD|L1Vut7{{`W) zgMj^l6<$y=gaS285XUG`IsoJ1WDFJM-!H@;)}#bVw1d#3-$MjwKN z1p7an!9R4tN$dd`B*GUkf&-uK7VJS6BtjJgdmCgy75u{=uSBj?d#>0K=Oh9zXe;3S z!yCjxA6$a*B*HJe10UE!A@l+46~ZUf`MalIEm-meXOJ~$1IKUG0?cSm zZJxwT+Cu&u1@$Je>Wq#sOwBCWLi@dpKOGYEo{0TF_3@?ZSFEY^_aSjj#C&MLmk7YW0tNmxwHY8lR80Tc)zf-%|4=BE^Xj#ew-4pJ zd;9FQ`^V@DnSA!r@k6_h-@APL1pedq?cct9e&=~SdG}2lekM&0eAoA%zr=d&?W0TA zUtg1C^UafNPhjT2|GK@kH}9?9eDCb#gG}0QKGmxK{iUn7GG4NIQ+LM8I559?r2Pq$ zdy=1Pv;zf3HXhhDak;2VyH5RkwB~umhi2EloqKoh-@%6$KVE#%lfO|OO?q-^)2C5y zQniXzYdx-BRn~haPo6$~^X|C^w$IX04K3HC`%JOS-udk})aF_2pJ(3jtE6#GTCc2? z-dU`}lqCGe!w>`O#-8dTOffL@9DMM+-(>p>!5LeVEj9#e|7>oc^Gf>cM3g=Y?8L`P z+Hpvfemw8Qd59#>$tR(VQpzc*tg=e;22xNxkHTrsDX65XNj?Cs%4(~Bx?1VC`sxWV zpL(MKVTRMMTWZ1JRa z)M}?oroM!4s;bDO@60q~YLZZ%6m0I)Az5wJ)mM+4RMuH(t<~0Bahn(RfcBiWPO=e=;sv=bd@( z*=K1PK2O4T##z|_1O6F6X)(LC8Ks=`=35& z@muoADX-ktXZUzANCyc|#BikNR$M;D#lCoue<1lMk=0pm-SyXDk6rfJX|LV(+i}lb z_uYB#-S^*t4_^4;i7(#xLIU;q92@8AFb0T{pl{sSBPXi$p=XO4du zVgL$Y3EjZ9z0z%kGnTX91u>XG^6Z02bs9)w6vzkyB;Wu97=Q^;;<5;`gnMVoT3I?2 zLl3DWL@}u$h-BC>8ICB2H$<6EcK9J0((r~e#NkkOC?c8^QAA1P5D|yy!zT7Hh*ONA z6|a~?DH73#Mcm>Oe=@WjVo``-)S(rd2%;aZu_jj};~T3OM>7sljYphg8if+aDzZe1 zTGXNqTe3wxQgMt<9Hbi$Iifn!Q6))2|B^`*c#;GVfRZ?A;l3Psl1yrHC3D(jNnFK} zPi}IQofM@^Na;yaowAXv#L2Q+8OxNU(v-5CWi4&V$wtDeR7J`qtbiFzVTRI|x7;Nz zA9>7D4U?F~H0CprWrNn%!|N@{9QQmx|2s-}t0$KX?)1Fa@v&iN#Q>e7++9Ew9Hw@`(( zGaZc>z$6KP5&@(nqco%EHu)J+k&cw4IiYAHG@5{u5MZM$jmhY|b+cHNl%_Sc=}6~+ zl$0cZr~lY!-9qKKjop-}MK$W)|8j~F1gP{MD(&b@YIc&l%~WIAtZGood6TSG4Wc{Q zsy4yuFLWMtJY98?S-XSQDG^CEqs*y<5`X{!Ff}Ct_$lcW5GtwO3>(_;>t6vISiugK zu!S}3VG)~H#V(eyjdko}AsboAPL{Hjwd`dvn_10nmb0Dp>}NmQjdx&&lu13w12&2P z1pH&Q|5$)bsN%pf{lkTLbR)`wc-u4f5RQnJuc7sVLGJC@OoXXGLy zH*`lOLUBV~#N&0N+gunbSBKUm?i9CMMmVIuk~nNud-LNZkfwno?1QF0Vf1l86{Mv zGHjcsWiPLp&22^)n5*mnIZv5eSVqa++?;1U@0nR)dB-Kl%n}Ar04A5@^Pv%)=trd` zCWL-z0PO5IHPOU_@2Yf5EPnmX)L%h0s(192 zP0Je7&w{n4V{&O$|Cd@Py2f=%ZoOkhmze=)R*3}|;8DBn3pOe7M`ct3ZD+GY+9;{^ zNuIruYd1#Q+x9lKwH@wge|y~Gp0>HI-EDMZ8{E-eH@n?k?sz+!+~=nEyS-iSbmLpy z^H!$-wm?b0we^kdfOA{k_TKls{Vi~Q7yRG=UpT@I4sVDzT;UU!xWg^pm}_S{;TmW7 z#Va0hf@eJ6_}=)yr45@>vSTq;rofAY{&b`F;u-B&jDoQ7k7I287<a>%X;s11*v->~po_D-#OM>M`EtzmYve_;Hm8hO2a9>>#blt27~?W@-S>sv3gxJ%kA8shz-F@yyGFu@-;#1y8U&*ygV zgBN=Ey^ewpCzpWWB{9R^NB>a>{2-A1?RWqC;U9nb&!7JFxBva|pMU-Dpa1>$|Nq}F zDWoq6st>sU@Bk4o0Tplo8L$Bz@B!^_F@C}OQUm-_LM`%!?Lgr8QbGex!UJ7GY3xkR za7J?=@B~pX1^-oW1zE5K5l8?5UJd21WAAd zU}9;4sy^faV?GF&vX9GtLoK9F218``EaeH=jC20MJeb5(+JPO?0d7vB2#t^?zy|i1 zunTz!3y&%a|6vMe@E@$uLD+E3wD1?ArwdnN8h!y7Qlbbi03|M91yW*kR^klrtR9vy zP1NvJ>d>g%5Du$QYj*7samq!wut`XR4>?;uC$gFWzVv!1Uj}qx5NN9{nP@|ec&4VgUikO5~c!bIRkx}k2 z57h)V0H+s8fDnnX99yEJ&hZ}(Ag|U@E0(YXIgR7!ge>#|CJrMZ>*6GCqe$|C!HA3Q6Nu(7Td-pYO*EqLLh2`+y3I>e1j~Kq)tvFC6eQZ7NasELnT-;CnE(LS8W^r zK^OiZ6Uy);$WbOBD5FSn8BH<`Re~S1;U6xc7kXh2PT>@o;SKbn5Kdu2K0zS*ARTfJ z6aV^v4+fza_8@W^0TM!?8w8>a0EaD~K@KpX5tu;^PT~> zS$1+33G#y)p%4Cn8c+goII|bH0uz4W7bNo^C?XU-K`s8F8fZZn8i5ZIVHx%z972H~ z%prQ}0@{v2AWq>I;s6sMp%~hLA_@Ve*fL@w6Qz!!4zK|eF5)vC1uHXY6H($WQDPiX z;3UfP2vOnyl<^1^yui#Pcqk01jXP){(Z{ z^Bwtt8hQXLPGJVxARO{R4rU-0=9DdCU=aA>67q8~PXa?|p$dAmHwx!@>|qDCfEnf? z5iqm~%pg2ZA_<5i7D51Ox>Qy`bReryB@*EVpdflmfFUrH1ukMA0Ot&}Asl7^XDaj` z*x?!05=aYSJx{{-t}Z14^B>e89Nr-|p9dv&U>baY4EnQEyAu=h@H@5A6aQ&o1#I}$>42-XID3;1^1O7Hr`e za;^@T;Bj)`AKHKk@G}mu0vk#oXdd=Su#zRTk}JhiC4c~1{{acCwxgbEr8>%6*%MqD z5!g_t5q57&QQ{LA!84h`7LouGJVy>tiVv1x9Ks<9Fo7DX;1dQRA^(ISZ)l+l)ZiH~ zRSsw&bwI%ky5J-{2NUx3B=(@$nwC}~Rt_ijAJ6~`5>vC<_PpXQJ?9Gaz#J-8Kf5j#?3Ni=)FvZWJf3zX zqV*qA0W8512WS9mu~r6fKmb_ErCP#k1)?3p7TDf_8u)@Qtn?ckLV?6rPYB2w#vvb$ zB2U6Wfx;m|{=pnP1W(z6B=U6}tN|%%cC=7}ZpYza{vjN2ta!;|a(xm=%pn}cAuupR zLlAQ@!XfL-0e{DV9n2v#Xe&-jq8${7Zp{JvFhsN#!$i`-NdHgsB(NbG75FZup&e91 zfi-0u1ciX5sDCa^hCL@e%*je9kFd8>V$CM?iRwaVCdhbe5_2Mj1Qj|=h zPO8JzmZWV$RhxeDh1{k{2AGfwc#L_HaznKrYpfpy>MK2=sZiq6{T~ zIK#ZvncK0F-}#z@&y+>eoeSD(HV1z3&`54Lk(alTk3f2>7731doR#XXPNJVxLWu_> z9HxO9NV=p=`lL}hrB!;RS-PcN`lVqyre%7jX}YFu`lfL@r*>U*rN2Iz+QZHFkQa ziMptb`lyjQsg-)ET^c{vvY~rWopE@1^ZA>B0Bh^nk$p-4__@lIF)Mr(nyFGU$hxe} z`mE79t<`$1*}ARW`mNzQuH|~J>AJ4%`mXUhum97!N6fgL%~&?{IMw8p0;v5a4+ zv{}2gUHi3RJGNzewt+8j9GXkTm6w&52J|^4db=gYEXv00B=V-R$;N}Qn6{OBxtY7U zo%^{3#wdPTwNnMUt^2yMJG-@evu#@fEfRTkTNHlan_GgsSE8#=D?K`lprdKK-TS@a zJHBZfvzyJYS6jaEJHPdNzdNS8w@^vs`6Q$k2+aE=3Y;bcfU?(HtOw&p`1`>jJi^`E z!F9yGt6Rb`Ji|3yx&1p6!So*zS-cP2!2el-$^y-`PQn}eLnRoz!RZ^cE0DBZoWeUM z#`{}bw^*|soW{xJhDqDT@%uxkTVmZAHnjUkI6KEjTgiER!^~$$1;~4xAD~Sxq{GHR3Czo`%*&i$Mo%*I zf;5ag#_c@L59LM#f=PiTtmPTwDR2$FaD~S@KZIyvaws*^Io?@7%#FP%};)T@;;;MWfS8Lyd|<*Xfwe zd0f^Xz1J5#*9WFE45ip>`)n#ws{i?rJGR`iTO1_{sAl7YHef@~^CBp3avU1hLcZY_ z#^EsZT#J$2GL8c+(Bm7HfkKYq8+Khago8*0f+bg^+AJhCY=e`Qffkfl4aB>`aVKFpzDE0hC8bdXptuoZu*(QS@tU-Y!<1U2q zHAe0@oWmUWVkSSxIb^ag_8~YpV>jHmGRRuv#Te94*^GB29p=GGB_1VaLoW^lC$Zxn ziXo1P(#?wljf=h}Yw{f^!bpe1m-M{muY;2Srz&9s&P^jPX5P*9JvPW|}%Ds*sLm-5~IIf*Y6$PF#5x3(cUyC9YH2Nhd zzyTh=#9iXD?V&Offggn77}|jvD&!=z;e`W(8t^kPrXdWU0X2KpO4A`B_#quaA?K)J zAIt%LmA)NlpFKQ+8rCC1@&Ox8;UECV7PgP!_kkMHcS5isDfl8OctIPEAs_Jb9U8ZL zF+@{f!y1;s7Hr`#gOnD`fgg$nEz}Yl_#x{)!y5RZ8wv>9G|K9!kH|`%bY~k{03uo`(ziI!>F>8md8^3?u2p;4Y4%@tL z&%#-oH*s9MZque&%m4Q*ok4T<>|xVpFWk6r^9Z)ncJLW3bIZC-JeaRt%zYA@I(-T? zs?@1d+x^1=V2MA22jTpi2Nq@1P`2`&;`sF-wQdn9hWl#upS_X?V^wUIu$#zkh#=FP+}W z*8e?wmk--FkpK8~qeW|6?Znuun%g%m+`fGDCsVzTKfnI{{Pl-5_{%|JIhD^e0sbS3 zL_;8fgj5dvWtFZ=4m%Mn{r7fX+8p|?R zo^{EHE1oFlLB|A$;-OF#LyK-jp7jqVy!A(Hu})cql~!E+<5gG#Hua1!#q<&iP`!py zVsWS1qW{}3w7A%ds@eWi3?{#5$YoI8#i`pe_RPc2GoJ)FBDbf6A`F*@l}L+qm=wbc zisJ~Yp{bwVliCugAK67g?J2acK*|5FT7yF%QE)@jH5qH z9&`#tw%|zZLEZ+4TbDBa<6tUa=`$@%6}eH7 zkiMncJMW}}i8-alSq$4Q3U$z`)}6xZJR|lA@?phXqR}@+eiB-~5=r`bMd36;SyQxx z6aNb}ekWWUEuqBK%O}G8GR`I5StgOE))ZGvIGFH*$vFI+#Y-q8{j>Wtu`vEm$-kWP z4Q`mU(~jT?110-3wz&EXzor(m(TUhRb4rozVDio>vB(&pHrRxc&^++NDU?v^PxDPa zVH?eVQ^;nu6^S$}EC-3mH<-Z-MttNGyDNw-PLvNww8IvVkVqr20i|@vOnb#B1~xDe z8k`;EO!UgB_WAM<|$bk;P4*7+}e(X;La+d&)QBG_e~>&Mvgz1raX;mBa8tcH|miBUxs)5JApUMtRFP zUgjMyF#{~z5=Jjn8L*Y9h9V>C1tvmaopA-IRSyi%Gh|~JTG;0@kwlR#BGV2H-7Q;u zLghbt5g?5@rJDztM$W8qisBvQFfuy~GkW=>8vP8FxZ%w&*fyArh>91n;Adi3wyCCo z;(&pQMTmMqi|U~=9a=1>$?WkCduZq^!a7BO7DEtFga1Cgcm_Lc z*AxvND3Z4mMxumaok?xVE~l`@nU>)*pzH$@6!A`sm~jk#7-UMt&<3_Zwme&4>UK^E zQSpqUAuHKp8mE{NLJm?U6!JqyLuuln;u20}00?Ggi_tOa#Hksb(Q_e0RINUtn^;(n zTilWpFCvABUewHwBk~z9Kw%v=;!-a3;izE`+n+=Vs3uK82}M}iluAa{0t}$6)h>Au z23*o=QR(DU+A$9eawHw^5{G3}qmp!_BOF{T$WH$86ZP2R8|HY&O4{)az9@${f=LHc za7vrRv?Cnd2*;7$v6gq;ur_QN2R3$Mj(JECBZ3LXHw=OegS6nK(RI?9^sK>n35L|Z08;+1PH@oqbi%Afojq$=3Hknb)e#P;P@gmnCIJs(Ex?zst zAY>=qNJoI*VqN2!!zh_SNP-8WUxeiE8$baHasCk+<&5+l=iNtokpx=}iX}9*Ovs0! zi`YVXG=N`=}Yck&L@+Eg1?hHq}$VUK!LuaWU}43ldj9(Xyq zt=b6`tVbATdB^)*vV#KdBokJtvek;3kSA0{65 zu!(KrjWA_0^AX&;YT{k}MRXnzb+VKNC+(U*6x-XbNkk#~$Y~4iNZ!^qxsUtoZI9d8 zV0jn0w=L}>(FQz6YPYw;O>OT!5-iz{C~fx5?srAI-GT!+wDZB(K_Xm#45tsZ_u*Y_ z4-zaXB<#c;uD?Mxxv`Ga-^T6p$b&G&DI*`X(Pq4?0p1uX1w?px;I#~4@Ppc4vB$_U z4)KkTbdc|wjLp*~Ad%+-*`Q7~R!2IIWfzb`Nk51=X#YnWXdj%~8Lzj*|5NaqOa|fh zDAmyUq49Z-8!Y4AHnoq7_I3~5AN=5lKfnk+uJks{}x*vnq_j=b^gXOEcN2c1Lv+34Skg>sNOYx0?=PpLNQdt*Ja*u}2A z(6;XL$?UHw?|}H|Z;yT256Jl%KgjD<-|KvsSp4G0HK_UH{KEGA_w46iA{Qxm0~!7x zPkS2TS#5z=OW@V}iTw0OntlN&fKl;(j+7SrL;rT)r+^E{fDPz?W0!pqD1o=veibMc z!B=C$hZF+HfgQMh0O)}s_<`*gfForj4`>j~*L))Ad{0q=BWQs!=pSU4G*B^k2T^!X za|Dv*H2Rl+79asYXaPb<6`tjSEXaX~HGxaWgiYv#PY8ukD21^ngH;GyR{=mNXJgxk zgh+UVUD$zEn0}6gf(9XeDhP%n_=4wWg>5($foFsAhaf+|gORm^P5}aVxPMP^4-#R7 zZU~5hD2RjDh8V~!TS$nBm{?ON7A>fVj|g})cp&k|B&m>thBrw^kcS5$0U*$co%j!% zs0b3VQGW=Dr-+KFsEWseg&&oHBDIRKDF2JIXo2rna~t(Ya`+E4P=}Xz5Sti^P2q_e zfFQWmhm9k7w5W{B$c%?&h$>fr%_xo2NR2oqiHn7cH)x3sQb~0P75fK_!8nQsag4|q zjn#;b={Swgh=}Uwj_;_9f#-X<$WnFq15n|Kn+O7Vr~x2AjQ@}cP*DgP5*P4jkOvuy z#Bl{#2vP{?kPiuoR&gkl7*2)fi;~n7pZE{`n1^{N0jl;7v>6UK^ zmvJeVb4izVX_t42mwBm|d&!rlut>=`QWT*JT|xs;Q3DcD13=)Bp2#25zzb3k01(gs zlS!GCX_=RanVG4Xo5`7->6xDinxQG0qe+^jX_}{rnyIOp4FCX1Kx56*L}wwJu}Pb= zX`8i)o42W(xyhTm>6^U?oWCiY!AYFMX`IE0oX4r0$;q6{>730;n_Z$Y$@fT$atl+D znA!OcooE4@xQ9C_5h}wW_23U`00A6;p6RKc>&c$&>7MTipYbW5^GToeX`lCrpZTeu z`^lgE>7W0}0U-bZQ1F^AY5$-H`g@GkaR)J&r@)Iia0EEe6xj&`hZ&Bc*pE#Ck{owJ z#c&(Punfz<3?oXSC2FE4ilQm1qASXxE$X5#3ZpS9qccjQHEN?bilaG7qak_>&!jZg zVfMw{d-wLkbDz4*7uH|a3=X!c55vvHw zuI)NB)8wp+GMK5ri#VvLhj|eB7m7F;74qP&{|c}HE3gAAh==+QgSm^6gag!i5ZC$? zIGLe3DG~lkuoY{u7mKkO+aCsdovH8-KOmtMijfU#N&1?T5c;FblLnE3`w)j3MU~G+V8S`4pTb5g=f)z~~S1@Uyk5 zZMv#?zKXS2d;hh`y0uozAzJ&j$XB%m^s7`0wqM(|XsfoQ$g5)8wrNYYS9`W`3%7DX zwOqTlY%8~3OSW@sw|-l;S#Y?Qn>%GrwtLBTjlY6+rSANu(N8k2-_5ecbNE!udkbbo0zh+%W)74!XYfe zBg{X;%CY~zztuXS7yJ)3@Pj5xz)$hBxJJS?Y{NHv!yadY@=6sKoWc3pv|Geccm>!+{8@0#7cZuP&~y_?8H(0#8ynjS6sze?8R6N#$6o7TujDWY{puQ z#$PPPYh1=@JjQ3N#%&zOaQwz@%*J$l$962obv(y&Y{-wC$c=o+i|ojetj64+TrSANr_jGOAfW)v!WoRS;CK)QJh4u31_!Z7tNagt z>Ho^A49l$?%dafUwM@&mJj=Ok%esuqyX?!o49vVN%)dO$!A#7@Y|P1A%*%|-%&g4K z49(9h&CX2C(Ok{bY|Yt>&D(s<-K@>t%+22{&f!eX!aN9SAgL!@!A|i4BZTMjnNsc(HqUt9qrK{4bmYk(j!gMC2i6tjnXNt(ksouGAj`@ zc@Q{&&~KYSEg)P{Gsq*qy>Su?=mgFo@JwjsMkI z-Hdgk$p8&3t|p-eoxv^~gh9xEvOCp5UDeO3)otz8Z~ch9(9cm})0xn}g((pQ-OhL@ z6+D~P2O-ptWYus@*oAG_e<#;cal-tYuz20m__3`%OVvX?*oSS|myOv)!_@?WsQ+NV zKv0;D?as6N58Ju|;V6=st=g;2+L}GrHO<5Hx{KO*5O}?d#MrYsON=1ElX)nfsomPa zE!@Km72^Wi|Io2CfYTXV(6${F2D}0~+Z4b(6$Y_+b}JU=Hq=N_s7Jy`c1ooYVTLGS z5LD-V)OOvLJE)V9ro`>u?;VSY4HZUv5FVSbvwaXRpx4e#0v`~m8$bdEjQ`qdZLIK$ zi~i6^LiG=qN_{BdYd!}RVAm8(@k(!39ud9~T_+K^#^4tY-yaU*kht0L3efZlvUrUH zG=Q%!Km&W--vOPo7fRqb7A#nm5Ga)?{=hjJ0tqF@8+E{Fbzm29;5sPbDg2NKe82~Z zPz-Ir4B@~CC`CupQDvD@2oBvl6?6%Fum^)+3yUNShB21I65?fU=4~k7JB-{YED35eqX=7ZQ;J|Ii1h)E#FL1S1jz|F8oRG3ZUv2LE6NLsyGP#Zv+}0|z|-3OJGo)G#7V;4^1#>Zi_rBfd1TP5-mb4Hcn{0x*u( z(TyQe@diDxbN}GbOkf7%umvShB!>R`(&=;tV?&*$LY3_myio(jhus=)#DW2an5bL20 z7Rrm%&zVwZ}LW?>f62MqCk@XeBTBw5h*V7yC?#-ZNT=79~$J)ryvY! zfC*^O4vEkbYOp&lvJY~=2Yo>4Q1A~x&gjV4${Mr;#1RHe5&s0mU<+z+3TYS6vpN0dEnN4n{uHMC6he)>8ty0&kq+XA z5^tg5aS>WF!4*gbcEkY|l_6Re?kE*u4ny}9>Gk-T+;mP+8T&8}>-zSefAYqijr;4^ z)r!}kJrxo<@1DJ(Gmc}`=WYhrNah`Fy&AtLVfzK-r>_KRgESv2$b1M#Y{utupl|%g z|4nnP=JgHlN9)5W5lqprNWZBZ?OPDcb&g2LYVK18t^HuwI>z}9< z|7ZwZSc66lqY!Zn`G*7H(iaXDB5auR-#e^WuV&@i)$3QVVa1LmTh{DZv}x6@W!u*6 zTexxM&ZS$|?p?fj_3kbEZ=TIwe5~d}sOw*%h{d@TF<J+o?IB980je#>_JaqN>Wf@kk_-RB}ls zn{@I?D5I2eN+_)YFsB_2Ypezws9Q`uQEV!bKQhZS^Gr0;RC7%>+jR3yIOALhr@^NA z$CiIGdCofN8fLR{vUSwe{9F8?{HdNB`0CAL$&DF4*yy;zv94 zTpdq5!shwQo_zSp=N;v!#r0Zjv(HuzwKMg5DJ%65fFS6&N4=qN7Fwdsg|FcucO zAv3jVnn56O=p8$|d8eIc{%Oa~USj#jL8ofG!?XP|=?`o3kV zkb;&R>-06xNv#^>JaAFY*6NdWuhvrZI5sZ;NV&Nr`e~x*m z5Mcg+q!EYU9r|v(^VWN4NYMC4j{pAz!?HkxUZ4SosH}oIV;qja!D_2D?${ws5qc+_ zl)-MKkwkbAnUR0k{wL*2?kohMZvNrr6uA)+M)lFfp2y+6Yq$M&++!spvr--9NlR6c zqVzF7qk9}!?kY#aSz?;~mBLMmyRuj(3>jAH^6)&)&fdZPe@^ z>6k~)iZKmpJ%bbUUYd>! zGb0^!#Ya4_QqL5lct$j)@qFPb-*O(37{qPyABp?N3Vx87I^r=W%2Q(>{rE>fz7I<| zLCOofWJp6k!3vs* z5IuU#CSYa(PH)Uwtuz4=XW<|l~UDdj^fS-7D@<(P9+WKM!|sekC>9^|n` zA~2CUO!$9?(m`!v`B<4SeJ-mq@#2?J4HHTF$lH+>>rpA#wlpgjZe^`n+xS>Ps0he z=N%_NZTtr@6T?bQW)vY&_{T;O0s;#lBomg=hZ$}1I+2}DY$A&VHQYCdLO{Y6VYSmg zP60MOd}0rn=$TL5`qoi0!VG>Br0*7z2~1v1sSAmMQ!QWtrbZPZ$UsO{7s5wg2*wJL^#|Rj_|pS7QMhmL;ryduqn$jUbNor04oB|4@;JXMJuRQeOzXpd` z#Nni5#Cr0R6;#+E5BSFeH0%)Yz8E3K9dV6q{7Z?pF-uuQkX0P;fB+)|$UuGwJ8pbr zB!iNTCYGOyVa(zcQ-A~iNPz=pEX^cmS<6l=r$cshU3Q`;$N|;_*0_`3hk-KF6-oX zOxvqXpllTx<2k4{aa&c)fhl)UgBHbbn>o-+7_6*0(W_?lnYK`ce<~N!!#puiSUH{t zuvpg+dB9|`Y?DveVi2bg4BdP^womk-)1eTC>{|V7XrHMOW-!AZ>MCLWp63A#Xz`_6 zTslpYCl=Oj2%hxtk61MO6Xr<7AeP}}6-Ha$^Dfhp2c$xanrGWkZa}Uhu#h{G2Uf8F z9YQbxi9wvZ5ux~mu}6mqRH>TY6Q{U&ME9^N5|x zwEq$O#xHu&GX=(C9M~|2HK<_=W<0v$JLkEhz}Ajnf-8j*%Y+Dee92TQAOQ;KILVc+ zfPNQ1!Q>IB%;qIfKvPJF!OX`z2HJD5huyr7jx<8fnW~)7SpfuC`qH0{kOq+4T|2B$ zwX|{-GR`BtSkbxI{XX$_q&L5Cmh^;GjDi=SU?EKJI02gOaRQX>A0QnMhW>te%%9m= zWRI{pC;bnjkB0!GC;dMNfDolOzyJ&RXysXydDzo?^ADqS+6#wx+>>7Sr$>DPB9D;P zyIw`HCw{a!Z(imYrsxQwV^o}Pdg$|B_YEjOW+`8M>}MZ6_8wQfQ#?oKzaVjRcK^r# z2C(>l44`!B2)_2+|Nd*6SQUAC4&qZOes;dV{QKX(LlW?h^=m))8$kFYJhQWj#48*T z5WfYC3jTY*@(aN0BR~qozOu6rEGoKG0>AKEzz5{Ne>i{xXaE3^zzRG;3#>haP=Wjd zJq8p%2mC9LzkLL9Jh*f#wT8`wIXe9K!w+L2kQ2gg})XT*94W2C*5O zTKm3-P&|hiLL!_&5&VY$KnV7uygq;fga`#O978fJLo+->G)zM^TthZ&LpOXwIE+I% zoI^USLp!`fJj_Eq+(SO>LqGgOKnz4d97I4gn{(48h{+N_OB_Xd^9KZDj`7VJb%+(J+UKFT{HQk+GeJ3FPK zLR>_MR&>RM2!K$$zIdZWVT87`lR|{Z#a?X1hfqJ2nZRLuMtM6YO;`asLPiu20TkFp z|0}^}ghp?iw_Y&});YR`ph7KF#t7`jp@N8AlC6hm$99w=cATPkghw;F$9rVQdDO>u z+{b==M|#9ZfaJ%B$j5(-2%88ox)W-6gvFi&+cpOQ4v`T@T$)Kdjlia0U$;zSn$(poB zvCPSY7tvpMX1WIu+4q2N^<+{6(sY`01rn211wwy=WiOaBDOR&62whTwOtaj}!8A*()W@_G%(N8Bv20AD9LjwBOSgPUz%oG`hBe8|jbOq~Qu^N`K4T58ITF!i>q;tjY6mO#$h>XZ%JpIfgb+12i~; z_I%IGa8LPsPxpKXx-udnhc{4}1I3&E zOa(?fO@t`W2ThX-KnMuEi3ws!7T-A{9CzLvx58N{=hOP4<{m>iiiy z9h5xnzN0*aRXoPhB+V#|(HYar$ZX59RLspJOv_|UzyHKcM-|M+MAXBqOvx-r#>`Yn zZArj9g$#v=6ZL_AD1TpgvfNb6bWXtZ$;m{^ zL)})i+)2JfOh)C_Z`IbDELTg#R8CdYO4TKzQqfdMO3}>4r-V@%<;m-m&g0xpc&8zjz>SWrXT$cU>P4RR}bA(cTozgRrT0}wH zf^8y``_wS~hgCp`Rn^#k07KRJ8Yw7&9WaABpj+12(hY3@z%j03pqpZ_t$d)9V&DaK zU>F4og=1wRS_p?<5E*7LTGjc5ZU}|Hl_KDR9bwRhQ%ITTN>bpQk6xKSKOG7HwTVI9 zSJTxG8+8b7YtVmaf`5<#AFx|B_?sjEof!xNJvcWr002E;0g@eDK-7*dymD%mz{#Aeu6;qGXP^ohW9^KK8``@oz zB72|~@9+nI_>QZamw*~5iO@Um_=|lwC?xia>6)$%-VYVh1QnnG6c}5GcwMutmF64| ziL;1yrOg!fSL~EdtNm9q<_@>L-^>tE63x*qJ<--QJMZugA||S_bIGqnqA+%kEr!l< z-IOvGC$)Xr`=BT$4dK=WJ%k9&*Z(clj#SL$RMddg)V_?@-jrlajmzW^klqZ+M9s`f z7FSVT*KAEmO#WksU^)Z%xK;MJR#v@_i(y!HWmcxXjw=Aw3jn~GND8r#e3;|!(7Ub( z4@h;_Vm{_CPRvE!TCZ%>Nd?YjE@i`H&Ss8RPgd7+rBrQB=4|dhhj1U(&5TAi;Za^p zY`*4lW>UY?OV1!GC#afU?kK{~~wMAMkzG;W$>M{yst)1kh?P8w>w1r?D zD~{<4Xv&zL>6cZMJ=RliN{*`&D8K$|zz%G|2JCskYOTE%w5G-W)P$J6Mu?c}xwh*Q zequhJ3Cc#8B@G9-9?h42>2qA)g=pW)9&Mjm(w;dw5s+&|mh6SK>5Lw0F(wp%9pj{h zle|8d+pg@|7AN{hY<^YP1EbTRW=^t>W1#+N*v`m&paxygg?WnUMONgP7Ji2u+_kXwcczUn*8hC;icz$2_g{XFc zpLczT_=q3(aCZoapZIwv_`;gc>RS~fPWAG(mOv_972SEK+q3;=YM|akACT&e(JA&>%V^N&wlOSe(sn4 z3jZa2@DKmem%j9Sh|}9W-7~%OH$4Gp|I|kSh#>yecL3sd2rIk)*58lUcK`<9e}MSs zfWg0i1P2x@$bdpZg$X76gZPicM2ZyushEgSV@8S{6J9KM;opT7BSowbA@ZMy3n~M^ zj45+KLIVx|HMpsBC(oWb75r1sASY3rMsqeSTJ&Fn22B$@K$`HuKZZIE^-7d2@32f`u41q%{FE%>w`(7H=~;?3K$ZqUAb|Lz0~IIm#8dJiKGY&bFF zgo7L3d<@yKVabRs^Te#UFz3p2aVAg@`l-^yRG}vL_aFfRst;QKdrLKTK?gc*+yACu zTd%}|y%R$W9+82B--s<3v_LT7TC*BRgd}M)p~}e(tGnDwnSKvtD2sPLRm4`saNB3vli z6rqG`Qd+5{mtvZ!rkbXg5CNZ}2%>|DB_Kd*Db@$$i*F&I>WnoeG!SmfF?6JF#Nlcj zV!G;j6OX^{Xn_RCfgk~tB&5~Qm?n8CQgzO9M^cq4oupDqENy2}RsjJ3A^8La1_1v6 zEC2ui0MG)J0RRa9009Ub_^+VBe+CjJJixG_!-o(fN}NcsqQ#3CGiuz(v7<+b2MdA> zNwVZW0Vho&Ft~ET%7X|N{ChdG;7XbTa_TgBz+g|21rz*BfIw)?f(~T({VjUnB{UfbH8Qg%X{)yJ*OmF%7y@`fs>!lPFW3%sI8^<&e5*zFeSqY4w8|1pkv- z(!&L-B)Rhc9j{fqL95_vgbm3yEqSVU^V-czx2?gs+_`T*xOXo}4I}^t*kA<_MuABW zP~g~tAqh~~LC-lS+k_N;l-fb1g>+hm1_hvy0u6-t-iRcYXyS<|rl?|WL$zp71OGIT zfQ&F6^ngKv#;jx#~FQUVVU2_uY^Jy@eqK;B4PK}-c!5L8&{7v6X+sE7d$ zTN<<;cZqTF)Bt7!6vQEE8y*xu z0Sev!DeJ7X)@tjWqUAbTNdpW(z(2qKidAyI&4j?Q$R>;IQNRK#00GaYbenAjrCKd$ z|M)5_OfMycSV2y~<=sJDan;qW24Mi+R_bB*OWa>a+QK~QNxC6yOw z5OBcT2^uWWP32N-~m%B!l{YKI9aFhCOpks*fBNFS|q(o8Sybkk5jEp^mX zPi=M8SYNGm)?9Dxb=P1!Eymbnmp%4BVic72R9yVS1s7?H(e~VJyKPY2cF&#n-UYq? z?Kj+j%S}?;Xva->-+8CaMHzFC!G+@nIq{F=1yO#Y8%F$t`9EG1lt<@YxDmP+d6bUs z>8NMr#u%Ej{*UVhl`)3wSFOD^R=1Q6!bg#Z0N^zg$^LFbzf*ZBp}bI(2Wd~d$|=BqD1J@oL! z{z3PI6uv?IBgy>8Q@?_|?|=a`N&WUW9t0*3ef-#mJ|?J-{^_G2`>5YO{=tt2cJG5A z#0mfukdWt1FDs%68UO|n!WO#lg(XVII||Z{cEqKIH9SZTLxRH|`tXM`l;IEmhiJpB z^iYRIq@fMpF+-}KeUKLD^f8XSlnSr+M&fVrsIrGMB+ha z7{nP)5sF0YVo0PIk}_`bj#@Mb7fIAa8uF!&Fbre}mv|5Zm{2PzG=TL!@eg_Y!yb@~ zq$DRv$x2%Cl9Cl?m^rkosp)US`i+|_>7d!3gPlM`Hp!)O}Q<+CS90>`7 zkQAFGL8(6<8Oc)`(1QW=AXT!OK&@UCfLcXoOvg%AfX)=5IZdlt*P1$z8grLf0jVzk zF^{(b6O|@uYKijq(WU-FuLv0pR7sLZkrm_}l$7Q^HdqpxvQ?q!e5_GgBRLJWj@To z3#5{S8Nc|)H-144bJ)VXzBNf655kRutl}Ex{fBnRM~_t0!X&XBDQywCPs6H~ru^sv zJF#(0lLU9U%I#icBTV56tMwhU2*)#c_~3#RqYsdHt1(Z(!AAgkK!v~V0~G0%Yl1lJnUJ;;@pVGvAUg2w;o23=Vh3nPcb{~Z4a2V9R4j#He1 z8l!!!LFm!bYy1Nb;aI~zs6mf*;4c-fr3WDY5nzPqY*#^k^kE%K3p1!w80VV@`;LKU z^cf_*`C#KeP9bM5oBGtKR<4(iQAAt7+0`%J2SWFY!4iAA8V8}pC$zzgP#mKhkf8HF zVj*W4PbC;3k;54Ok&1up*dVcGo}}S&+exQ$!z57yBMUMGtR#UX5fC%2r&59tOeL!Y zi3LeExZ!7L+90+_wY=v|@3h+E9iDX~jiF1|VnVPWZ;j-ENn&h!q+=ZUXh(HR!bBd% z*&t-3$2hKm=7KaEz&)OxkRgr20c_mb_YN}$3^Iu6g}bQ*|M&+P?ht?_6yil8fCLL5 zjfovVIs{2*gh59Bj}jQb#RaJX|4ecZe{6fy8)imGs4)(6*tyyD1Ja>T+|A+%5_z;JJyx||(Xu}nz@`hC484bz?dOPai2PFVJBw!A6JC5vY2p0_AteupmNAhd+SsWN2sH(FR5&+=rZ4XN$QYa7N#= zv%*`f?DilPsK6atc@Xx=Gt?1;tLwMV{q9S)iFhc;{~<<%2c(MF_o@Ou$5H5ZxkGY_ zjx=T?nraUQ&cn$pZ6f~h-TPwh|Ni)9Of1E9N%cy_R9D`YfC{*PHg$jD@POg)4d38r z*T4-G_z(4!ffVRx2Z(??mVRzWZLmUo#rGZ)c2*3Sf-1OzsfJq3mp^1aNPagTaSLBZymSZNiIiB0mUxMnn2DOWiJaJp zp7@EN7>c4eilkVIrg(~|n2M^nimcd*uK0?uc!|HIS0TuU3^9nfn2WkdZw3Gfet3p) zk%qU}0|v1J|6q*BxQoiTjLi60hq!(xHG-IxK?_uk8Wcg;m_gc@joi46-e`@@7>?pN zjwB*M??8)tn20(9arK}{_3)1H7?1KekM#JCB}k6=n2-7hZ8e0Bh!~CQNJH(IN%a_y zb@h%1S&;TfO#9f74%v+LU_<^0jkYC?1tAXud2cLrZ*Cn6I{=ib=603S4Se6<`47mO#I-M)i-wJ;bzWuWn<|-928t@2^Ss4SP#Za z^#@@>8I(jhk!Wa<2ljq?a0a2k5B9JJyigEuU=ZPeRLr0TA<pQjIf;radhu7 z4NwpZpYV8E1P9E}1nIR0N5@D?2WECh3#h4dUTF}qfCd}32T&Rkg^*t)H*9<`4QB9* zbNUbCa0UgTbR=PSXEq4G|L_S*$_Kvn2|CJm;eeKK;SY@P1(0VD8-@u?W_S63rz4UD zv9J$s5DJ5E4Bw!51%XsjdUbA++LaXx5Z z5O1&t)KCa=(4^zBL8#eLQ6{STRS2P}Z2!;({{UtT)~~?U2ii5L1tF?~0A|Xj2G+0# zg8-rb&`6S22lvp3K#7F2Wp^m=E@9% zU=N{y2`;vrB=Vg}|D;`fz=;1)2fnqWDRq3dN_p~R29PjcWLB)GN3h2#h{+0!J7}ZE zL}QxDrv_21knje}*#_oy1xWRBzt9D6AaqdRqpGL01@R4dR|nrF@OTEHbN{dh48~2W7YAM%SNzavcjvNwi+6Zhtjno-zo4%{DyMOAvIQ{> z@%9F>U<)rN42i%CwD5R{ho_SlqVE9*;Q+5R7O@liS5q|}vB0l)_YZt3s`ILD1%Y@9 z>a%e%Lxo_X{LlxNAO~86r+8ZkUM8$~R}95!YfGDtOFg_a= z4lJZays!t9|4XR6U=1W@eq>k@YDNv;lMYHZZrI=t_P`9?Fb>1Y7xDEC*Z_3cz+Kkh z4=FZdkHib0;7plY5BYGuCb19fI}RI$U9#(>eMAl6zzpHg4aHzXBqmy+g;cA#Vd};Y za@Gs{fT+K43R3n+#n26MRty>p7sc=n-S7#W_KVmCT`o!$-=Lmq=7*d`X8hp8*UM|p zb#>3Ap5yTh~q7OMsO#H z73}j?*~dy75*J=cNl4Vv%?gGKF#9iFRecZ^M+{(S&%-!714czI#546yvn!H%n{mC0-hy@+J>-SbV|C-7U z6yD-J-sF8iw0sZhqtWWU-t67p?)~2I9pCaj-}GJI_I=;@o!|Ps-~8R*{{7zo9^e8# z-~?Xa20q{gkz(y2a6`$4n{C$PoRmFwcG!cQOkIThj>(=jmCH3lioEEm9*1B)%UxIH zAP(VJeh_gk9O+rk7qL(XeGmiv^bA8v zW5r;M1yKl0@DGFFhe}5V&(H(v$zY*p5GC*i+NEwfw*zo+2~bcp1z`=1_YEwx1Gdlz zeWYEb)>QcZ50Cex1)-_sKJtOs=ri@`vd->VA+8MO1N>lKF@Ocy|L_J#hD^V(cLosz zX{PhE2D?4LvHyUY!KHdw@DEj>b2IP^NM=Q)_6)&=3G@07G2joOkOS?I4^q$s0~`iE zns|pr@?gJ(CjUw(&*Um!=2M~B2Eh!+pnB%|J?dHX|G)yza03P518L@45C0F-U|vw5 zuZ+M8`S1)l{}0`&SO2PC&ea4#5I#*13i_(IpZ5=%Y7bqn4SJwpVZZrUIQBgr>t-KS zPR^1y7z^?q5^_eDP*9}s#sVDbqgzmM*!p62$4LCTcWNLGw7>#>NHqMaZe+Iin6RB) zz(7!N3Sq!Vg&^+__6cEtt=nm@oIm|5==n)*MKZg6> z9sB3+UpH$4u~~a&uA8=L|KfaO7*ga&k|j-^M43|MN|r5MzJwW5=1iJ3ZQjJ0Q|C^e zJ$?Qx$t$J3eC_7_1Mts)fqwyB1}MNZq`Z-X7``L9&mTXL_U!S?H!p0ye_X%vBMSDP zR(tdK?Gp(%B-e-%_nBo#mLJ`{`N;k|$}nBKd}>v`YX?;EV#bXfKZYDx@?^@DE&mhB za9-f9MUN(3+Vp8uhL`?P6=_xGLa!-o1VQ1|D4aaN?0O z|9gjZc0Hp=l`?he5~|dc%8R$Wy)yfC?%lnA2OnO%_v0psHU|xTG?2;1T#!A$0XA})=a80qz2RTFG2uKLoFoL zlq|DOJMY9ZPwtLOjzQ-5dvHCG;$&z}Jr6}R|4~I3<>|Q17$lO-ELYmnBtsd+G*eAC zRWwb8*2GfK068VKR8vnq&{NzZ4fV(gQH3>DS!XRyRZs(Ubt;3X(iCtg~&P+ z!D2r}Hm}`&z3j|+h(fhj+<^S@%i5mZj=o_sfkfqsyekLXt>dzj?I^Opf;`jh26GVdPJ(F|!G3ZE4h?2*eY3FRppIY}s|8ES-#xa|W;4z|nOgAw5_>4+qh?X)G1 zH*5|GZLP=IqYj4pD9M&fl8zWTFAanP>X2*~iEfn~)i3lmM}L*3eX_Qv7?Om^`t|v~ z`6ZSg1Ao%-m@Omtm~4qA;N#ZAHW{OD%O7!-LUVP6QpR(3~X2y`&i3A(d zxLE3jqPiIGp*_4im*b+#Kauo%0qEHM5W>dWnfgbXT_A zGsKk0ut?jhA?b8i60&T}jAuk+8r8T)Hn!1?Z-iqUY~6 zl&3^xDpk2kR<_cWuY_eRWjRYvN>DRiqoAnZL^eqN!v_pWLJ*Shk6;e7n8Xw&GL4zc zV>XkS&s=6Sl{rmkO0$~O|AZzst(nbhc9Wam+-5knIZkhivz+7vCpyiU&U3bto$p*{ zJk>c*cgnM#^n@oq?U~Pe_LHCg+-E@bIZ%JD^B+C1C32MXH83`kJ&(LfS4Oh6t^K2- z7u8xu8G_M`YSf}0<>*H{I#Q9AG^8g5X-Y|o(v_;zq%LLYOItcqnbtI>H-%|VX^PXG z>eQw_<>^m*I#i(+HK<1gYEp@c)TJubs7__-Q=3Xulz356qVi!@wYpWVQc00BY-ma@ zm?V_Q!>niR>XL$JAI~YYm+xsuVkjvq9-hoPSXt|xtlFxujY={VOKV_1m9Bq0%!9#6 z*FB~PLrx)#UJZ$u|2^takE?j@9Z$s6UPTth?wN!y4B?7D6#EawE~I&70WC`CL65a? zP_U6f-jWPg7S8M;fZjkR+En$sI(J ziqwjYA)2@@Ek{`0#bvK$1TMO zC&YS7#Wk*>Kh{1Y9mQ}jJ*XRwVElu+|47F*=qtW=Xm=dAsKq!0JsA)Vh_$`|Es)-U zZHAm97v%WIIoca&%P2<{S>$w{6swGr=tCa-h=((b%aCm3MND*I-*UrzlCknKC95r> zNJe`P|B0}cEA3bs2MW%vE)?bIVBve21Iaj6K?c756H~=rxD9Pn>w5 z%_y9~rS(=5TXXc4|EB3zJ~^qplHPgLgTY>!Y}XMe56ZT@Q#S`Qg~jY#f8WGQTYuuK zlfKp0e7#Fg$2)^PcMqgf+a7&N_oBjH53l^!TGHaNkrSmVeWjh&WF-k%>SacKz0og| zKZzRs62X`s((|7Oy&u>0cG8#L^ruIC>Q%pb)}P)leUA*@z2p~>U*7h&$9?W~zkA;I z|K9h%2Y&E{KYZdB-}uJ|J_s3)^S;Ie8`{u@hBBm$41L4;)xZAqp-=q`btC)I&%X6H z)O{Y6-~8u~5&1^}m1q_uv2j2fzRnzyb8Xf8d4# zL_luHz7Qh`0(8I!gunye(t{!4V`u5)=#&Ji!uF z!4+h|7IeWEguxh;!5O5%8ni(e9Els$!5!qm9V`y}nY%ifpLbv^K9M!%;~u{XiIEG! zCUn9l^a;r;!ms)wwc|IoD;+4*!Y$-N#+X70Lqg6{!Y(AkGBm@R&^IeIiGDl7|2A~P zH^dJrysDgo!#cFXJLDWN%)sVr51{kIKLo@;6vRO!#6mR0Lqx$98nbcZA1yl*f6b$9lBKd&I|l z)W?0~$A0w3e+0;Y6v%-jNP+wZG}sxeC>mF+FxW`NhlEIon+JhG35Hxd|1q)?*gFu7 zG!TxANH_FI{XjdgQp1v9LzmbLvIxBENXam1NiccI`)J9Pq>q`55}RZzu~>{*qr=FX z34jp^po|G7Gzp=sNTMvt@G#2GaY!=K38ZvNpKL{wU?PKAN|%7jRtyWBHhv#yj%rZgCyLu9K>|J3wM#|%!_B*My^ z3A_x=*3`}B%+0`L&cZxSor{UTTTUw>NnIM7$JmRN=uUq*Ebr`%?-U6SBF_W~Pw+TT zlrT@0NKc@6&zOi$_8iaoEDQTAiNnIrov_dKyib|f&zq17!cr59yh4op2Z4Z_ljwy8 z9gqg?g)o6o33X5bnNTpf&?w1J``A#KkT#|Hvh3{1k!YQN(1R02(G*qD6=l&DbbM6 zIei<#ISINKJrvQp90^2S)JdgOPH9xY zSg0p8$v4@~kdV|$1=UcEAw2cVRVmblJk(PV)m3HHI=NIrebhbeREGG}R<+ezU6NPL zo>RR@l&Do)1=e7-4_(E;SpCM5_*G$5)@2P3VhzzMe7s0iRc58uYV8hZ#ZG7)QISa2 zDUmp4p^N6x3K6o_ay8d38q{4iRzoF4p_$fLECgYYo~*e9+mW_LFb&4}hwm~C)cFT$ z7zet+w9!1*f^F4H^-Iv<)dTg_cdZH*sG6M-i4ZIa|2WXsf5-xnxLAYb*mAv80{s+C zC5e-yRfnAmfv}1%KneQk*p_u!DoNL3)mAl#Mc5;>+L7f{lSx*BP20H*)wPvbrj^y2&01w)jpungtD%@`@!P=_+`2}HE#1`( zUDa(})+OE7mEG8--O;sO)P>#Kb=}&<-PzUM|G-5PJlzgGJyy8g+rK-BxKiHbW!~m> z-sgqh=#}2-rQYhb-s{EQ?A6}w<=*b~-tPt9@D<Kyxq$5Cmc&2I3$d!6H85B1U4>93dNa;!Js95{_W8Mb;jkBxb<| z?-Rcbi9YEAKZXDa>4U!M+XxQ%hiM=T|EeroiFyr6`xQ>BHjo{O+ZdQ9wqrD0VJU85 zhSe1wW{|+Khi)Jk7V-z8@P~Qio1A=WN8Rw zsThR-jEO|8tzANbdE*iSEwmsb53-j#c4e7};%vp+W7S*4lm%Zfht<&rBE*Vk=moOC zG;?qqkZ6Z)2!~!sh+kj^X%mKSIEDp{B1--Xe;5a8gNttfSVQ}V{p|>lcn0zbiD|$F zerN}6@Q19iU%VKI-IxaZT?XZ7hhz8#iRgxWz=n4Ko{*?Th6slPf(!f0hi+&GY?v8l z&>McRKe&+LS59FZX5oDUTCp)+|C1Poe-MO5BZ*x;iv9Tqx`BjPc!Ph41vtP2O!x#j zh|qsPo1-a)kgl3vFpF=nn{WAqXE+9C2nT`1jB5CVYIvJ}xCBgV8LkK*UhoH@_%vaN z1;c?0i8zLK;04D)olmfZdMJ!%xCCB!nPs2_b6}cpxQmVuhM=(p!|~;R0Ew)jg>N{8 zSonq666v^R=(*-uQf1r!<>MF5&yZ+^erT|L*k$FwgnbZ(K4^zRIBACPgMZ+IPuPP4 zItKWQ1%c>=U%&)g@Yj5hX|fmxTi}IS_ykqG1Zp^jPpE~m{s&dpxpik|MB^T2(<=b5T8r<1>3HLkVpq!Urkg$bVz_fqp z1#FltUH}Em5NS;NZ0UZ6V!$-Vp-H-K;8^xqypHGqE(vHju+g%wUDg+nh%MtOYsCHs zTF`^p;e$ee>cX<9Vvqx?;4RIbX@NL}%ypwzB~lxB#`IEGW` zVe-CXhyF5#m}NuNYsQ3&XppG+Q;vOThi~ADde)2&M7DpZhG8BDCdUm5OpJ5@<$#`P zz~%B57*}bJz!pcn5L*hdV!^+u8@c@$+x6bH%X+Y>-2fQ*O zb+P9J9S0z8cXMd>!cty#uV#2h;`vcxBYp>KsN~szA%l4#%X*uH6}d- zBKX7|cy{TW|MBMb0rqy&d>C_?S-};WZC%$M}+T+lM;gC@Zr6$_iH}j@B!^$RiftlKG==lst}j&$;+f=i_$$ z)t>ixG9rrKtInDb`i0j@crkjU_j)|mOVLD(MhJkLk5)f6GbW0w5oF?_T|u*K)wzQ$4fqJ=(&V0^_73Eo}_5Hh`P zQF)4CN_K(yn2>n8pIf|7UcL`^rziJPKM9HGm+xuy*7AqDpch4U zaR3Nw_WtqvXK>)YdG_AD@T-_w65_ z|6`%_{Ig}2X`^X_{uO&%XV5Z!^YUp+_pjo=P=t>$>uJjtC~bu89iwJ2Tt0r|PFb^d z%GR+{!n)Dgw=bW+V#|>BGU$5WyJHBd=QKczvptvZixhx=t1Q#%vz5qW_Bj z3%7UU*!1exvv2SIJ^c9c=hJ^$_UuuEYTuEwu1*N;}LHV@oL3JX1_JH7!$&Frg4ci$SIR6ALf@Fw>4f|F--y zPA}FJ_oJ8p?D$V~Y&Q1KCBoREj6uKT_RlZ06!VWTVAl61pn(cHD4~TKdgxO3eTI}; zF}W4sTy@=L&?Pe^cwSP_Xkm~$4%#yiVS;JX$7C7qxJRY`#BoX-y!_HfA})C*N3@zeKlTJ9=5cvy{%QRvQiN&-tjyAD;@~enp{__s5d!AB@ zLCfg2Oeo!S#0!_SV1lNf2Js@!C)XX*qd~M-6N@d>oWcv1i2D04zyS+9Fv0D0sh>+o zfjJH%2E`RAfs@vRU{4A%%1<;s-J{T_A$>LvKi@o)&pV}oxv)Lqz+_E9|Dk3i-am&O zglkVS?bFRX+U#S_H~Ubt3{B5a_EIn56qMX|%XHI?FxqrPP)Xl_nGetTC}~bX<}72) zIMP~kOvxGT6LK*!(O6na3)h4VGYRi0Q#!5{JU88S+kH3Qe;%w~QhqY*uz->psFcM$ z)l-i@HQlrLJsn?{Q9&8`DtbYUiQ~(QzK-)2pfdD*U?F0xw1WM3=0DMOPBdEazY6N>8{2&NJC_=IDf)7yP zp7+2fIPzi2DII%_HI^pBZ+t_B-JqcjX{f^;*3gDa(?&{;^1mSxv4|Zrq7fUIK_oJ< ziB2@)2%{*)DN=EY+G`35zZbZO4US?pDPL1wxRjC@Wl`(H$`jLwM5HK@Ck(729OEd* zInq%oC2UGN*kO=F01jf}lh{(g$P_Vxg(e;JUk9~967wOle^41)LNHjzNm8K1m+(Hmy}cXByz2Doo1fHl*EmWbOwpiLf%0Vj_H$t7_`T4`e~AdkOZLlR7hv? zV@!gWk(kCTMjhx72~%_;5O+9*IAp1hcLb)GJyD3II``3 zWHOn@IL6_>gpfoV?a0qJYBvs;fC*;=*@uYI5u`f^|G^QF7)CUr(TO(P!4~PzOnw%b zj)B0$AT=}yOgFK{uqnjX6b_o1!EAxJVq&M-~~HQB#gcMB5^(0$91f6i8%ZsL#Hv}CqAKvVidze zsw#vq^spB>B%-Go@oIiD)R=Cp=ohh=m&};qoKJ8<2!H?tG@#LnxJH8x7PSRUszH$8 z2yILf0xUt=F%3V_2q{c$FE+*z3tBj*7sUugG5BQ=E1l*aG`h)Qrg4f;eI=slZ|228T7qHNiE&M|Y?QCVG+Chs%grg8j zVMHJPVdI(zV;ON^Mx|2q+^-U(G}!nLQp98sqy8fqyzoO40HKBOhPM^aFhw-PUTr(~FL8{SspHdP9DFtjEi?g<&H(Bhu#0S#g3Ny8?yt)%$lRjEou zhC+b`HSJgr%&<~Tit`3ufFj3$wFh*Ma*A)jwlTlx1}0n+i{E2|JZ;CP3U5Mmjh^0I#>{-f-W}jRjq^yV%y9m1a_eJ z+~3Fcx>T0E_O>74F5ia~nDBeiPHFTyAB{k$8mM}PYI5}=HO zEo1FZuFNr3U#b=5gH(z<^wEw}a6t>Lurf3NVTv-K0S|{jL@)w#6y(d3_VhnJHXCU` z2PROPxBou?R?orc9y#%zg{>Wi*;Mf5)C+NtSj{W}pUQ#o^3D zF$6+eogXxCK_{$%`yB!<3{{{oQ2@4}3+BxLHcC?T9s)9&0tQ_D9TM$z#UhyzewYLh z2B8oR;Sh2~K3u~bP=OWz{{k1R-y59ZDqI8Iy&x4NPHioFvB2-ff&pI{4ruW(1Qv- z#WRjkR1lgk&Lcgh|3~g|j`pQpAKhUw_5?DX(m=3-K)Rb!$fG1-MM6YlIP8P}e8W4S z)o17vL*$c8Y>UqPRZQ5-3q8(RfC=Xu1xCn5FdV}*hzL9W1wELN?jTPOQdm1I#AcwB zVcApdNT2C|#AbNZKqy3m)kN|5q!87kP!46H)PxMiTqg}9KmOhgdf`$C0w7qz={?02 zs6keYgKu=sKuA}6F@qk6$%<^rKQw}Cm<5(}Nou9eMO+8+gu-xO!Z%c;%=|-2e8WA! z#Ga(WKhQ%;&V)7;gFie?EELDlz}ArrNytgqP=o?A*uymR0<(;RZCON0ph>JX1wRah zSZV~*=^asi|7Jbv+iNK0C2AN`XhA8Q1w*s}d&tD{?93j#LrRdx9+222r~zx%NtR$l zJ`_SBgvucBlSuU7FMvrn?2Rz=!Y52ad)Wdel!jg+MJ()^yLelg^g=DngL)YRg``M0 za0IL+#VKgRVN@h}s0fddNI3jR!i0iM(1J@mLs)_)eGa8)>SMo^rlTc=OKb{*fW$If zfqNttNkD>)F`1fRf^p@hN9b6WZ?fcX_Ogi4;+0)=QvN>IpfyaR<$2%8nfF;EC7 z09t(}|EVwDrzHjxCh}+EI6{Y!gK-FGdk|=T@B=ecLp`*_4Gl#{I7de~Bh$drF(49M zYJ@gm2{YKjVekSsP)40BzQslp+XlBScI=5zc7 zJHP|1>OxKj#5QV;4RhX7zJ8fM@%YJR`NvUs18zmqhR>PK!M&t zSk4(`BO4)=XBrepWFla+#d2xI1Uj{3{gh>k1;6_1@(^*IiL@Qo;#-0N6~~EfmFFx zthpMc3g#oaE@e}Q(lN5D@EB~ts)zIp#7d|JD5k8+t}M%@V#=Z-Y$U}@W|JBujt;)2Lq+bRelDP)?4Vf4W6mBe(h|yq;cHU(UdJ}&7b#tEMjP)-LwclOv^tJfNsS9KZq0MeHi> zQVfEU*{<;(FW%If@W?DXzyw|RF7R^fM36 zmaqAqFZ!mh`mQhgwy*oXFZ{-@{LU}^*025EFaFlAL0BatF|YIf1N7F!01Pkz=PmV? z$G9ouqcN`O_QZLd0t7>Fi*8s1S8xQ2CsJIn152=oF|g)luu?2=2tx(ji7*Ct@C0|T z310;Ti>C)?1qY+>21msUudq{ium;Pp4s+WAzc3B2M-EGH4CgQpvj-0U|8NFVuoC+) z37_x{<8Tb~a0?M}2xAJ%+}}Ka2_u9L0T@IV3or79u^3;^PTm?%fQcalfC2z;PYgg8 zyYbq#9Wn-^Q`A!yvys+nQr{?r*m;H$0agQr+#iF^C6Uo$hCGXv!^HW#xg-?2FV|8gNKvO9lNJ)I6Y z-D@5zKmz=3RWuqhe)32O93IQ8K^HVL2XZ?ebi^{WC$mvbJ~Tp0G)0q?QgqY3cGE!) zbXs6^K3kSPf7DQcG)9B;MayhSJ2W6ag+N<08x7S+oAgAlv`C}0N*gj%z_d*_G(_KY zOXKuR12spx^iUJEQPXrqTk=s0wSLHSM|WaS|8z+4bWu-rQin8EFZEAvwPkHIQm-_a zG=dr@Kmu5W-i~og87*4Z=ja?jS$nbUuC-jxHQp>lJIrSS5WpAz0|5v?KhiZ|2R6aj zHIf;G0PHnf$FX29He(NM=>9_j`1L;=_F;qZO~d2d7_B_2|8-Jqc0odgW_LDdZ}#9- z1>+UrO`djsa5j6ewpFCBYPe^u8AOHd=_JJftZGfURPy;m#cWo56 zD6#}{CwFaF!!#^+ZA?RQhvIZ&!*H)`ajR@|r)+SmY<6>Zbz{SK3-@@3B6M3fbemav z6L)hrcX|)Ebho#0%Qt(|w|pD7bq6;!#CLnAw|LjLnay{9%Qt#6H-4vVc5nA}+qZpd zH#Ow9dxJM|W4D>D&3g;DaU=J4vp087!^%oGcTYHVWB73wH*uf%bDy}0mpF8v_;C-n zil?}X2e-$hY)G)gKU6p@4~`IGy&kB7vB_XIZZcXK~Cgoh%8!+4o@cc`E@cCRd&n>U4PH;d1>ifj0s z!?=paIeX9fd*``1oDTij^<*bNZwr85>-JxNY+6XOzjl+@5%N^Cb5FvvMNhIlTlG>< zI!QS?d|`S`*s)SGG9OE_QaD$pGleblvZWw%s;fk*gVgBMbE!jer|)qx$MYQvY&mP)Z$aB1~DwJ#stI035Y_GP*mqf~IcFU*y7}0#gGKI~<_8Fm$T6dFY7qvWhv&fG& zXnVX<NY`1-($OA?g`ad7A+t8`cB^{Pk4O|FJketXKT)RV*|QeuX||1?Y1{=~IR0TgBbRKlN9CJ1xKTKmYYZzx8jw_tymTH$V6*MfQLH_-lXal>hmoKSAJK_^bc= z$A9B>|NL`5`+If!)4%x3|NhrMK>QQPPhi1+1Pu;McyJ-YgboWrjM$K3MS~I*tdVd26Krsvz(4;G3mj@t z1LKd5o7ytIoqKoh-@!kXgN@+w@aNH|SHJ%1d32O&)A9e-@$(Z(Bb|IAUx9eK289)9A`h93kA%BjaAkxWv_C7Eo}$tP=Uju-a? zg72T^?#W~^5Ui7Gfcy%QXQ2|IEYr+0(M(g#HCOymj&6p8&qy}utkcdr@my0%fo>wQ zpnB$6YO#Mn6o`Zi4!z)?0T^x6AOjw|O6N-w0=-FJ^w_Dz1ma+cJ<;LTUx z2d(9W&zuYrOqW&*|H>8Ig9{>;*K^ZNXkCGb-B;p?|C1L^BA>;V;*B}xuHS!?BDm0S z!xdl|K9seidgc`wQE^Yp?=8a$eVMMD~MlW7&oA;?# zpo|f;hinUt|Ko?5f0pq_t4oBj-uUgOD*dLq7n<)M6jV1nD#Zm#;2%lDs{Qtayj?31 zfyOC_1@7@*k8>Y!X8WHisz4Q5s0DmhnTB%mm%ya_>|ZeZM>YO&3xkMYe1J0u5dMLK zkD%`#>I;~1q$ZUCUWIGs=*lM)m_n>@PHoG}nU$zw25hWQAaM9cC{&okwd9RYM1f$z zRA-RDY49lt@E{7S6~cw|z#zn9#tbHtl=&rv7SHINK-6%R>HVV+I`kq`SctI~8YB$V z`^YkgGJ{i`!ivYJN?Ld)kR?D5TTG$GLhATM1$xhi1rc9DXaIyjYLJKm_=ph&g2XB* z(IAO<|ARr=Fu+DIB@V)i;y2d!5lO{j3m*wZD9(_OPgEla#G45h^_WVcgt330`^Oow zAP_zL1BtUNNE8JUgnz)Hj==keEeo=QkHi6o+L2U3us-88&C0_3K7Ds1cTLd}AK|h-Ny*k&dPGN17Fl&%DIQws+LegzMaBM|szr zZdhX<^?OD*%rOpYjO`!KSjsrUk&bU@LmUtl2sW_6wSRmApWk5TKMp96uC0?MR`iDn z|IGo>ms%8m3^ZNYen=D~;2@9!!2uEkkN^P?V5?mvfCt4{rH9$>sSBaWkjNGmn(TvA zaq|(W_Q4Of?jv~(X%1itLbkEcbyA_@2ieFLI;N_Um7XIK+5URUe8@FyW8ueN<64lo z@^7yKIV(i+L07m5bz5T9t5B`B*nebpu-xNeSrHgjfn+mq{{R9K{viWzDvqnQ&8i>8 zT28V$@Jd$m+LaLG+esl%tR~9P+l*T!<8H0A7A>p`{WqB5K1FDs9q!y}2E(R=#Y)<3 zZsw@@L2H^!kgmO|HeHK^*Dj>1>igy~1H;JeewV)6;hch6sk8d-*JH}^*M;6e|Ivb| zHgFhREe>7_1Z^5PDG5LTEpsd1(ejtVo3j~M^6T9SZ&)qMaq8X-5>-+Bz^eZ^f(&Q? zTNDdK00{V|H~;Zq2%AW^?-P!IIow=1*{p^CU>eW@InSBS zb++@J@tkKp@0rhi_Vb?s9cV!hn$U&5vvTM5Tpy3IAcl7Iqaht>Nl%*6mA15==_i=* zLbV_xHt-RUaAtvsS|ATbfQ$d}%?B{W#yNI%S2UX;jAoc`ueNnn*jl+w|0{PPVg3k% zoAO{qwz;f%GWM~Nom`!DSCrAahKC+f1rM=e4>r--z6odf?2P!um+1mG7KGlk!pF>ZG?TmEkDX<)zm0vLvE52=$Do^q z7u{IQN9^PmCCfeaR&snEk&pAyf*&pl7fcjgiP;Ct-~ghlmtYBr{B@?o&)&anDNXC}y)P6i>JBRD2%GZvK7b+q&D?mMPJRrkk9fSd`oImzaJz_sx&AQhj$i$P7KS zcD2Vd$^3TUZtW)Vx|kDmS@=HCjbiMo{O{da11NaOvBanchxy;7_5JaiaE5uAR~Lnx zl7HX2->en1ZUs>eBj+i65=zBcJK2zE&etz{%-x!c1Mn^XG=N+;QlMUSke6(SpH9$C z4}SYtE4q_n+TnFMYn?_`cfinEp~falbLA62A2ZlG&R&C7faBAp8>`291IHR&*eLxH zt9Roe2c{QIGj8*dV@l=cE)>k$=&vWW#?vG`RxYVkuT+n@+`=0|Cr0piD-q*y#y0?x z>D+oT`O$N@W#{JHMVUCTwWwxY%|`o@kM~%<0Db&TBAn>I`0B3#i#$wZ`i*OY&bfm1 z&K|vi+$a7?&D+k{vDtV-r)d*7IpKP+?1)#kvHe87_&g{XwvP zeOGIbN3!}i=1u|c_*+;tpg%uyb3wOu*#eQhgTWDTduZCJ;aL15mMR2CJ({DUn4u8X zQ(IN)5=}=|#Z>q}4MEe^B4kaUKoikS6);96f@%SFNFqx892MJ(rdk_fJVDSmBU~`O zDC!mzV>_Z?1^!UR0qnza?HxG_vC`^=97B0>brC*FD9Afj#)=e|S{SSsO-Dk;P>Xml z25Wp(d!XDi;UhVa*k;)?q`NQXyGQZYVVSwWX+wu%9Z?ClcK$!NyOF%i zSy<7x1Fs_B((g|xeBnO6F#gVR8hk*A_ zF-=y%QqVhdW@iVgi+~Q$v6Gr|9-%dj;6qf3sM2ULlR+-pF$~BBC_+_ zERI;d_>Q5$XcjzcrUntJK&ONyE)ilj{%kZ=V;Y3aQQpaW?MZ*U@ae;Rc||2^RFtfN z`C)La8d4Tm`n>B#1R2GFIA}^@O|h# zl1DILv>1tIWJ9cUU|TeT#kBGW8eJ6st?Cmbfk7OC=E(yrxEVU*MEu2@PSA>Ojlee% zO*2dxT?nI6L@_4CAL^|AReTBp4F8$%$FDmK$lU(G1SsFvn?ScP0AnRg0#|#xjdQ z(2X=iq5{jKN%ccKQ30vxdfb#|Db#Zr!FN@f$8@>yonCR+buNCgZM zkqoIt(E5qVN^<(CeUxfO(?y^x@2qqd;kw+BG$gHp%~(2lHu5zv1;1m8W(0jOmg*gh zk;nx4^E1x!l)9_bj^MA{#cQ@RH89M zEYhb>MKqze|3xXxQu9_s923pd+D1i{aQ5az`MdQtiUGuU=gl+I63>DpxVK7 zUzoa&Gao(|#0BLQX$HX$uF zA;ZsO{y(T7J#;8$4_kojM;88!nMYMP9%~p{iJ`VqJCD-W7cR`A4m~-cQ}R{|DHa=1 zlTo8(D8!UF$<6V8~`!ZaS~%1NqkfImLDM9^efF+*WhioLH~5Kz%G?ddAo zh$9+3)T1GeWCV6zC6Kp?OgVvXm zv31yjK;xrhu?C@+x)zawJCaWNL&S}be3l>#9RitDqtu6}Ej)H*GYD*rhPb!9u zS-whFrlpz;7NQz2D8rJs1$9RL#<$r&Jusobeokr)%nic=hhy`ta>|oSGlohIMci!( z5AUH0F>4hJxNJ<0p6@qObF)ewZ5ql9VHtlQuNW_u0yyVg`O+ylFan(gP}mG#t*Uy_ zFXB8Il^#h!e>k_lkXg4c6s6$%pawsCQAm06uwK3wWtXV8;(HpK`^TwRchjhV8ysqUAo3yvP)1g^@U@vIQI&NA#<(R zm4~t2iusolcVSLJeKAwu2FG?%DG_#ss29w>sx;_Cr>ZqJ()s-!j0tSau!mxaJu9e| zVp)JO6P6Ur$GEUl2xCxscws)xFrK&1iFY{VQ`rh}dl`4pIali;ytxX^Z@`gQALgrh zFta0t3-kqxSk+4nfBkC;K9or<__6n){LYdJwu(#e+Dm?53Gc(|*PWQUHwq`f+_Ls%(! z>R+UV-GAtnU3pCQ2aKbs`Y}p{Is~P0&x85JBbb`>u_*8L)UJv!u>_!=eBA?3&2XGQ z)FBk#F66Nc(c=4P){y4V@R_42UmZ}o2%g^k)XzHS|EZJnZx`Cxt6+-o>O=jA{%68O zE@+8cXAP->k{6)tNnL+WL$g0vmLx~1XY(f^TVPk+R01+jN{yIAtpCAm|A3R|!{F&l zEf8HZD%E2d%-OT@LA08%^F!9mI#AdWCrQna*8s}bbcrYyrN?9ehfl@^@z`!#-sG70 zSLF&Hv-G+ElL4)P`>kmu*^yT)jEdw+DR-hAXfI{e%%s&&H^cM9?WK-mecYR;lb2kN zzs-?$?vow!B>lVmbCmn(@50hV-r;yg#31scajYB5O&(9lr2_5JA4?B`EyOo_+!OF{ zd#=*4uPp-L-i!NKm1p^CJkQv?lkgLmwDDwg5N3bFqJkJPkegK{4R2S0niecI zn|FUCb7}whQ=y9DCQyCvc4H>OfoR$4X#{`z0e8tyhj#*VuW_-%mw(OU&tZlpyVbg~ zFbGR=0|`=XY(BtZOILQwO9kt$4#%>`_+;~b%bJ0AoH^HjI|HNrab4f(etL(yGPnFA ziD@Q}Xkq>k;a#laWQKw$34JbTdx8Jiy>4}9ZSJl1UjFiGgWJN($lg;&SXur!?YJ^U zuXOqqGq4aX70i3C?gvQ_mkHi@w7kM+3zzSGSkLIPpGj0=BpY}`PWlS?U4H&&3g)BC7R~&9rXn6 z#QWLFPd_!-e^;;U9CDLMJNOL-?hV~@B-13B647b9{LRDOdAY0)RL#MBE8U*8*#En_ zcX5A6v$m1Lx;C;$KwG=^w@?eWSDEjAhQ=DaqNtCzM#0s6!jCx-QaBY0IhE=@mBXCE z70y&c&NREvbTDTI3ja(nXCnaTtUi*|Cg{_UbEoceSIoJm!o}N=3nxq#Za25-ec0&u zEWi8?yyq#hmtNlKDyRFZ;Nb|Sa9tj9UEO_Mhq-Q0xM>Nw`Oyzb08jsbU5CRPU(ld8-U&QZnWm&!B)e*$vw~qKP z1(qlz!;Mbm-08+dK6ldj;^hM^x6-V`e$S`SuD@1-p@O8N`OiR=&iXxRV13ten?zdc zK103pSCb2ie+vip-s4$PhM(?1Zd)P7EoR+ra_r{y>q8Ep$IN$E|Nee!)0@0Mak*q2 zn|pT1+!b(h-E|TIdhdtXth5NdXsDbG0SHvBhT@R{F$)N;k)P!1PrE1!p0>FReAk4% zI07MsXQ?txI408c{8Ub$N!~!LN+aY)?Fj=iI?26&emD)h4;HFC){r z&TF`T)a}2=P!@8{zNjn+*p>QI7)X@MSscO~yPfCVJMyO}>gz~V-i_zQ($n_zvp#b% zkMx}i-k7uR+U)l>&z`+1jCKC-;iEHKX6;v^*R>|2PhQuxuI#e{`B>p$fdrQ zOw0cLzYGbBa&x;>rzaCp8&(=6_oZ+Rc4Qf-VZm(-p&i7f&NbyPH}X0(fQ`+9va=H7jOPwdfy4GR2Go>L2*>)>svG0`?hYkBlj=xKWn zKwiar4!$htB`2Hw8b^U=1%KED2Q6eP20KPaAPDO(wO->6sBzvg;XJ3)Z~bnUAkqo9 zUG7fS4qHm#+{!=DNI=UK$1At3Chs8TS%;h%qd1?p8bLbQV(Kq_W?Fv4`ls8!4_rR` z_tWrCCEc8aRrJ4Lr$0X8Pu^%rx6Qs&uM=Cgs#$JZe0NjFF~fK2`f}wtCP94J!y!w2 z{T=6rmbHw-Z><|~HUe+g!-lw9HIT{&S6d}X@)-Z+idQRFtM5ao{PU~L4#dzO+n6s_ zKFu*#9XPX+{hMQaIeM%hwhHjpfErn%rUZ(;y}u9n<9&Z{J04yxivDqfjC;5}mR?xs zmb;IzB1Z;?ZRp+KUH|BQTpY4Wb6Ifn(#k#LZtDi@#=ZLYu~Pp2N10fF52aljBTP!h7AoyRjqJD&E~Q4wb&W&_W-c8v%l z)a>iY?tkH2LemW#6pZzZe_agMs-R7!!MLbeDD#zQ45H#fZo_D@N=o_nET>wslR`I2p`@C_%J&8-k><9nEKPg}s?0aJUgnHGYxT;ktbN4m%B^KS=#^E!_lVz}aNHa}EvuWVLMX=X ziP`uxWbIeSYsaN_S)<4%6UOnuQJn%+-(_4(;sC#Z>zQW=X9=8j6TlvI6#{?)GY-0!JQkA%si`? zlNV;{W8c==>Wmqc(x;|+mAzC{c0?+b%qAPh;i{Z{*zPg?*}41nlbzgO)%U(iKJvtT z?DfyS$HzYV%JZ%vzHa-4+;ED~rFJgva=KZys!9n_OGEyCt%Jz!9P_<0Rk`ViEw@=X zy?NY6_9B{>nvW;Xgdc6w;&G z%9!%0ap{Ka`sZBEfeA>V>ieto&vPsi^8^ZKH_N!Z+0~yTUueqMEzDSmwH%sa1+-;b zG@5Tx#9s~xeNO?V1ctFB1BcWEP~;l7r8MWseTu#0(ILQf(uT_jbr;XrAgVQ%KO4hB z93ipzviT!J|a+d=N{zpl45gYhC0&qzsrKphGD;A^6Xt^A6$KY)# z_U3JTxG#c`b^VH_5{QLSw~n_}d%jNN_`FxBon%-4&*_*s-D9$T67zIqj{|RZZI{4p zhBz*oW%qU{F%P=UT@M(*tSWLv1ZGfp*n(m36NS~IB=1}0UyM7w3YjpQlw=g+&d3x? z-H$~54Mq0*dUcRsN}{zQ15t@U+m{hqi|JTaBSp!7z4r~NKE*{2nCuG$6);CVcroYQ z)4uwolw!}K2zthmDUk?NibXw?#SAFgE0r3_BfHqAwK`0OkF_6*!Fl{6xtC0-5fsr4 zV;2%U%INb{Pi#gn@wtDYU?JWzRwQ3J2%f9flbiQj%)>t&l=u$iO$}0U7<#Iv%(ZZo z2$v0~d>Lfh$tPhhf^E>FZDG}eM$#BBU7;c9N5Wi>0#x!Oa z?|(%%+KA>=x2zxI>Z-4$<&hycCtlkLPfC7IDe+kCI;eFI>emQLOQjcIInw3t(+|U@ zI}40}-44G?V@Rd_;=_C+__W|-FW3HcjNwnu)RBlX*0n#SJU5qJe?KMNg_fJ~%5=qK z|GTHA^4)7z1ZCGXCf%R?B|bMzd1%Srgyn%yHj<85>U)?Z2(HE5?P0gW{9}qn8h$>s zNY%T5vkMI9EE=ce$k#DSgaZdb&V``VKu|j(XpjiHDg?tYf@vGU0t|z3g|TUbJ#q}= zM22x!h4BuD@o$GcMk36yLSb0XZO(%^sVVFr6sHonj13`VlAI}=5oVkbs*Vxr$Oz4< z2(94=o$UxcV59+8q>)CXiDTq5WaNvgNVDO{mk;fGz$h!OD4PciRW{iJs&a9T`tT>k zp_dvxJ_H>~x-doh+cMe*8SPgU9WWdnwEgh+AQ4>1a1CUnBQhF^jHyD#4I>k_kx9Uq z6t0*wjhGC_m@F>jWF$p#Ijr;_PKyr(|8dYOAzZo3H;T00ELaqR!?AVSv7dl(4P2PG zCXKij$GA3R+~?2KJ_PmyI4V_m!RE!`tccitN7nQ(-jS;KvEle{+wqgYglVpX9~ud> zjtO(fgptp2P&|DLxalFpUXm6u#)yhxMJF-BO}RW%?bPh0BypLQ60MI(Fp9QV{TOmkC8;`L zrqw)eFBA`BX=jR+s!eCV(MGMVpYf31R0m{vIK|o_Xq;#uu+}*1k*pv>NX(JW+xi5_ zf7HCmrgraMynY)XCrMK(mR2E5Hhu(B+RDms%IUJkcYMH85}K?yK0Z#*Caj`nP7|~< zAbHIRG4so*8OilJ2R&2Fkx0ojv$9ZpYtmLt{fH3P<%;?#mh0^l+52HHAK6kP@sa2ntSv1e0*szGsUP16h$A}RuCEXlm07Yxp{7U=kBmA4NU}q$R zh?S!A7j=|V0nAFtlstLY>HS3xM6@a0)XI<>OAq6xf4C;1P>;PZj}gI-eNXtI$km`g z^f^UZB#y!+^{3V%YUg76>7sKDo=m(VCtN+VX6pKP#cWSXm0ESfocKaGRE zW5QG3t9s!f&tzO8k(;DGkR#fsYj2-tevI?@3FUi78Wm&EKo#$qDs=tWTX_$sIX=Kmql`DO_6XJ<}(9KaY{!d>GqVm@ZFP^55Ia}iYUdEY|2)cGSrI3DxVo272i4mw7uj_}h|wNI4kHyQxt3Y=c(Q{z zUp9+a5!pYyQ(>&E24Gfk7?CelRW%(&Op%@Z6=C2i0ZfhfB@Kq+)dzz2ims{7HOs2_ zzne>SV=3g`zQDudDY^z30I)@|uzPojpQlh;Pm{$QIiz0MV=P_z-cbg55OyCCzE#X` z8?Ad!jo%)d$vIks=@A({HTpGA&8kevYMno}OFaqAUn2j+2=mB>`m@4FekPM;TiS7D z!j_5Z2Os%~7;|*b&&Bj8!=@TujT3FvSV~zk; zHvmFz(6wc$^Jt4}&9lYRCQNp+5(7kC3k#&*^u{cBX1z7Y%#7~I$5Ooa&M7S$DDs(1 zP{I(?+ck@XJmp~GFKf6o7tZwsJJj-&xi(fUgw>^%1|$K=z%Hm`T8<0Gk~ET@3}8p* zf$&ZF+kP8?XZNMXQoOBzhvK1_f=TYU=xb#>CXNIX=T%$th=VHuP67HP$vp(`kBIYj z@;?!Gt$O483wD^pTC9%&ghgE)3>1V=+X7+;n>z7Khs}9&PUR7Cpry-rku~Id$24)b z`kBs**%un>&vJcvu!fMuG4jQ+E+r0-tx#3fJO&t4p934TD$^p(>aiE6?*;{`e9%mT zMOG`;v`LWro@WAZlRKD}P#8r3S7s{{6Bm4pSbUK4P@0Tqfxd_eXf%ybZ-cn@fW}5>=$J@& zT!8#Ax#9zQejLSk48ZFlXOo4@m5b3C54?_7@i0i@@UQrZ%2?z!$FJy#_1s<4*($;@M?6l+uTUv z(W@slg!!`W-uY@G9n>9+fZwmFdq}<&4J3?3Q@qF@zh)S{X`?0rj4&OKPm@gCs0>GI z>%5I0e#;2hsh!wmq#y+Ve%HjH`6f4TKX;UO%WsdcLdUoOfV;iPyZi}!OF#h0WUA~W zL6FLGbBZXxiJN%r%kxPL;}rf8=+GR7pD;z|s@$7A^3ni@j&Up|kP^TIz^(&)+xtda zH_gj0GC4J!>nNDNM@_yzNx44(HsKD05=g!ylH32GKsp2GpHbGCQFWbBPnglHo6-6< zqq9GwM>=c3KWn5jYvMZlECDn7qHfmg+w9BzSu-Z$$WI=?Egw4 zoloJPPhr9zSOvLjLmc-fZI=LLHN2wN-dC2S3yKTnt_zh33)OWCHQyHM_7^^pE;jHl zHt8(3xGuIOEPkn5?D)3WwZGU+x`g6i>eE>oc)9dLkZgl4kj!7Om4PC6dD8Y4#C13S zGvzZu)bf1Y^5VDU<^AQ~q$_Ctm35t!P1lt_2`f8wD}TSO?C-A}lKwvC|9z_S`=9IY zi-g}-FDp!i${ArlB!qmYNHKtX*Xh~1(X|Ex!jG%O6RV^Ls~|Eoxd56{7ftPkrg?bR z_=skhKr_@)xmS1FfxaF28Klfw9@L=``TVVd5a`N)xUAk#)BewAXDD*v}Ke7E)f??0iva`~Nl z`OPJPzhA^;HWOEWzmfZNFw~Ri`f);R_v_#6(T%#o{dH!Fdku=Hc=sFuipTdL&i$Rc zH;{xA{?I*MvhE|m1{cv}fEntj_d923CkGD`pH!dds!|_w5`8F9#>{C)OD!2eYBe3yoe+UKblGs2O8QCGMv{38z96|6Vf^QTC9N zAA!8|F5Wyuk@YSp!C1aY7d{GDL|_{Q0l_Ge)qnO!1^eU4*lIMdB)85#7Xz>ur{@dq zKIwugI}ssFNqJVB}W?a##f{SF8;~0ZRanPt>Kq$u9s4EXSRu zLIXze*RJR-XY*qbBjwO|);}jVkCnf5q!Q8;bvL-XJ5TOtSa3I@g;U(*YM5oe!z51J z_P5Burz@B{w&zF7Jz*GJj`536FMC6-$i(?1KP}55319-+!wn^ai9m%|_U#6C&9Fnk zcl{a$Xw@u=XTcGddUk_;SN6HuQX-F@Ah_V)NnX6MmBnIH?Z1^y&VwVO(> z@UXvKf3x{24Pf{h;%jqifeJ+TzU{Lgvu}vld2)YaBADOOzP@|UJIGhi>V~)f==R@H zmUtwW>$P_N@z!vHV)Xsl$Qw`Ftj9s4@#d!usC=2EwY|=i?1N2-^R1zgdb&VMj%6m(vgDL25-q^E#IYOIerxjB8JgeTVw z1!g*1a^u~5{$;5pid|=s11_M`xRtiC5<+O%x$v-Hw1S3|0p!QoHuq?Ufv|q8V-}3| zpytl|=Y!}-a{I)TV^vpqtO1j-K`Fcb5Pv#Oi2Zqkh=F6Vs=I-FX#$el`E>l;^mX~Z zc!?`zU1SmQj4dUrWO?aCyZhqXi*&UNC*_z>ObjAk z=KPW%KIGt%z+`fwg!rSr`M0>DcMA>b0v4ZBj33ido}?5x`I3xtSlpx3W*vY}zF1`2 zWcu0XzMi0*4-rNPzuev^J1uZRPNe@9p&;hhZkF`-4()xl@G3lmSG zSzSaSKRV)viU%1JzN4y`UVj}SV0a^_#9i-QPd=RM-z#_R)_MAKae)}91joftA=j^@ z-p?=Jc=UI)$apGd8D6i1vD)QUdXi9+I`DK4{`3neR?+ zj$d7vq8*(Nhy4669?!-43X+rG<5drtnREN}iU2KQ_C&F(kagZb*C z{x?FPfN5!?+|1LYuheDkC|<_nl1F)iGiu^+PiDjC-)>~ju9 zx(X6S8Fi$=DV1Q0YX`vLQp6HUM=Lm9*3+8`7z!_0k^22oro)C>Zgz}dc3RWre^lef zkm07aNN>|pDK*IPYL7c<`>G+_4kW%ukLX2Fq!%)lbICY8@Jx$996aj=VH|4vfxKF&&9S6Q@eyRm4 zsQ~2zEYvVnYng}58T)d~61ypL6E6fW9PI@EE*t|O@du8Ho zk0wc!eB+?ooc_ji^7iSV;8wDa{hlf)r&4)|P|ttCNV&p>RK^aInG_VLQ?xU~^m!tU z-<$r-gHWeRiBNiK<4QzN3Q-vJ6hQ96%9*!#OLs$bZIB$5u0PB6Qd7s@FulUK9DrA# z@sfxu=BshV)Q3R@w-k{rTwPhl{VnaFYoqr>npMh=oDC98HH$b*s|8s2LUCZ-ONG~lMpjb?EHrm7y{eo|ipoKc!slId zEQj=v!@5BYW~>xC#HQcrQ_Px19x3bQ$zKb_$Z2WwJH84q!~Dw;XDyd=-Emt4vxf9svHDU33MQr{nHuHUs-A8ggE%N{pm9|CIl6P4F?Xze|`)Y=O!$EJ^r02ZX!`eRm(m+F|{2wR!Y6pq7NW8E)Llc$NFQ+I2U?8BihtSIfMCTe3AB~uque(cY! zWKJ+wMP;q@BMx?~R?SeBe2Z@sbN!De+w$|m`p0Q+oXKsBsLlLJkE?k> zK>T7PJf)F5q;qqR!sq=zywl`_Y%+qskPf?_jqxe8He7RNgQI(dhiLX`RS^LyXQ3sV}AtUPvi& zrz>#zE#PlZ6Q!(7VD+}<<(>2MA=95t6)m-!Fi_a4bS{VNt^t2ca!%*<&%s;ghJ>y* z8dS|}+t;@rH;;E^tUmv2z9(!T@Y?UX%Idy&KJsEhIM>IwBe09ZImz{3lDmg;BQNbg zv9W&#t`PROrlgLFgx2mMdu+eY1(5O&Ce2Vv6&4JwB%J=HJt+(UQxbgl%~C z3p6Suu#3ceSdVT{AHON980y4{oF`N|Z;QTTvA&dsH$w4oU&yWCbj}uJEhyu-XeS3|Pbzzngg< zyzjuGOg~YGzZFW`zc<0f4Dtv77<2k|{0TZFsH_CwS^|1m07ei+FabCM3sWD83oOB+ zNYNiUn21=Y!))x0Kr?5*P7FB9Pdh zyQ>c5jGpsBFwv#&LLJ2tuT7fsb@YLad>B}P zATV@YE0jP|DG;8)N~I*$$tbSfCmyIQ5w9$nuPjxoEZwOrGp;PVq%60mEPt!4K%%0^ zr~>CxQIb_rmhHt2%^ra(sn1a2Vl)7_Tzw}s{RCVJVb2vw*~yMe6*no9z!6B$9wjIp zpf^K_4^Vh~_VrJIJQtr>IYUhdkkK@M;JAkaj|U0Lt2JLjMF2w=oAOJK;nwUxRX!x! zErE5X98zOYbG#qFIcZNBN_|wYu8*Lp8l=`oP$T7$^#CGCRZc!6mbL=6zJlEu>dH+0 z9bfJnZ8aOwL6)U7HbzBU+8(dlXk2zOod`t|Z@@97LIqHjBpqNRs!BpN5GJX*sjLy9 zt>H*GK#>kNu#t#w{Ay;4$}QsKJ`)7x@x9^$qK(u`Ukp}-t5-k)Y1(S(Dw+g9EQB`j zX=iAx3Kw5z@W#u{hRl+3IGqlz1UDPWBN3*5WZDm8* z%AT;Rj2r_MPqjk5#)sCmdVp@`Dls{a#jR1w4;UeW-I$TT zD&5flL0~R6GqH~$ z<4=yua56~PM>~()IZ(MWLPaK3zLmW+$>d)>c#?%x#&Gh;w4Vs>7>4OS22UHrR_-mjl!QG%nJX1zuv8dvol}s zHP1YK?W%Q4l3u5H25#P0T6X3IE1-opKyusP`;ruZ4PydI7e{IPZR->pldTs^Y5LMv z6E{iS_dFYuJs1+c$6a`vZ2DiXnd9qKK$won{#$+726>|W)5G?E7JrXbrw!S+huE{0 z3}yB`B85kR<)?{b0+iQ@%KPJdQ!Obb?>!|>76pRJm6~!j7Akh3MLj@+V;g4Ii8)pd$t9n3Vkj` zc%3Ncd4bt)a|=8rJyf{fy^&CfGD??(pNk%RUgszLDu_1J)cq_+6yh?u7HwvhB#Tir zWLNh$Te;e)s{HuyRocF0>|g>Xnz8(B48`_7{`q)w(0OriV>DKKlEi}n9)gc?>R4|j zPj79m|Cr%f-mG*#bH96#uqH|WXeXJuQ}`YII9cFx=Mk-Pih{#nd)vP>=ujm8AUTSJbSqe^o<-l@BAP#?w$DUiRZEk(%Br(^l52!hMT{qT+jS zdv6MrM^!VExjmu8#^kg`gUNn?Z?V4PrOY%&gHC{HSi|L@((up55X*Xq_3e=GJ$dYN z$$nfM?)M7qG|E!-M~>afhr(e!=Mk2QY3r75S#Z=tYtYv>!RJJ|tT)Lalf0%4p#Y zRIuJ2b$gJo;@g_b^ux%Bi2Cz!{0Q*ze0sK)8(=#{Lz05Dddki^&{3H`9P5%8^4G%s zB*1FGK2R8$Ld}kky@Lgyg@ZNN*$r^NC~=W|NOqC(f_|~xAi|Kxfx}Kqq5tgZsC(P| zsPv(p<4c+}tV!v1`~^$?mTlWsvgQXyy!U(>Z1=~6VwZ5JGhjw>yeL8IKmN&3WhUGc zJj5`XC4fsq0>5M&LEA!FdBnv;SJJCMWXlq9`}2wNlb?;bCcON3OdLsr!s)X*P~_Af z9T}&pkj{ogZ4XPNWIcgNZZq`!q1y}dFDWqoUoBFn)|!%Hu7q9rJ=-2T{NMvP3OhP1 z{AI1Z#MpdXttcZJydj~awJ@D~&awpDSKJnA8cJ|1dUy9rLq=ifnn*Sw1NoNH*I6f2l8Vfs{;a> z4nKjh=aj8#|33Q9jjgPTy5}B6K34Ivw^-?UO1b~-Q}BfrSMYYtS8^mR0-Dd@%2t|Pt>m#I6xpV-utl0O_*tD`}vVhAzY^ecGf!kyf8rwKd4!#~>Trzd| z<$&Nhhk~%Wb#%659GY5S{g!5(`Gz(ruhTSv!E625*7HuT&Eur3aa%0>c{fJx6J@F> zkpRJOqjfsK%oLeAzP=f++l^Q+I%@k1yLUA@_8&8fNrd->%P^sbxzP$FGz~c4KTh$5rb5a;KN z51CTR_+*YW=sS)H!+06@Bhq5&}&2+J%AtYM$i5OYy zdaLn4mm4?K96FZV_xwVUG`93POeoMAe!!nBerXCd!aUMo#7#{S2H95rg=jp+c>ZlO z#3kknww74ce=Y}2`;9Z*CrM8`8^>rKgDZgSCu~geXbNaJw9x3pl#_<-!GIW`x;Wm> zOvHv5ENdoQwL-_M^u&t3VPb@iLNi&q$RElZGCahjbSMGcpzYH3H&&G&jms~|GEv`E z@Ma>{7GY<4Co#qx_JPz8!?uY%uWa(d)jZKLyhrP8rxNn{UZuOlE>X^PYp=d#!-W~t z+L(hYJM`3=y|@~0UTH~+HF18?1e6@@#1iaD?oY{n9Bvswf0<}(=~GU2bJV&@a1vic z#=gUvKMcLDkIo^!VR2FqV$=?~4dH9qHhVFMIl-WBe*ZnYVk}-Yq!S8O4k-Lmq^Hq& zLFmnRj*9DCmFA%I8*8yxWG$WoFC6iAs*$&)2VnHyN<Q

!TD0wOxWShFk0|i*EHV+}Xp~4BlTgL=^DXj0!m2mzWP<#UgmvyT8mr>v zp(uD!pY(qvtjO5V&6s-HIQ7rqgE>pQ2ftltT%si*rY8;?9oHoZ?vae|eIDQaJibQ~ zEY2A>{wtmcOQOTmrt!f{_u!{nCA$NFaD@`E(WDqC@d_|;r6&OcPTZ1A#IZ{Jy-oTc zt;4Jm<1`TFt;U}{Pl9>bU{&!iQV{Kx82;!tjr^A+k_N)2OFji8m{E@ z(Z;$|q#lT+31V{6w8djT*-3D7BcCx1I7p5}y-m*~LFp=LW_oBoea0 zI0cg9$Sx*ObmKoe~^m?Pt#Jqj!M7!ibwT;R;j zoUe3-MLF3Zp}YsB>5Hip!eYcV4cW^}ki-#qJsB4RK+quay8Q}Psq(FIz(K0uvHCnb z*ux{V6j(~%;6cqhDFqfv26l%!abAFiLUV|OaKe7z{qlQnS6%=@JL4Q1pAAa9+W~jh z8P}rf4M19+>7>d3;&pxx!{M4j?iVf{lXKzYX+;> zCtYGfZr2qa^p#%HmENY6@BAx$b1VJZD+3oQgRd(?>8rw|t0GLRqWr6nxmB_4Rq>dG zs>Iw%p2iBWr)|1vb*6uHc5ZcUdv*Rob>Ve&5&ee}=?`V5A1eGmRONp7(Ei~;>hqDv zg4Zimoj%vWv}QTuh5o3MVQfb0!;7Lxxp-@h#%@i2yKSmz?Xa}fP;TvbtmRm)AZ)~I z_)At6Qp$B$a!xrp6tDIRs;>Lg!qrjw(SR2Zp8d%Wsnk=22xMKvNv%gZXkTBkqEzwG ztXIwt*&Ar8LZ)JTli|;H>C@y-D$l|D(5D)oSw))4=0(g-QbG5EPjUS0u5v*VJar#_ zc%_Crd1Qk$w(AU>GdqdMvy*`*G0O8pO3SMno!&9?)-shvq}TqEt@0-JfB61Ta9x%OQu4pu&qhN5M1h6Yq+x3VnVbwsJ@=di3G3KHPZ<<(Z zvwC`Jqdq*C-72i z5e>I*Cu;1ICeNEsX|*(-uQVtaesk+Yj5jQEn*+?KiHZz>5dG2UEJ|5eckaCaMJoE@ zdV0Wq%G}oH}jpG(9^y!{o?}!~_y&@*h9_R+{ z@h-J@_t~|7uPL3&>!BEzj{4V0ZO}uRkD8}c&-j&QB~ufl*@`=@LT}#tHT*4j0ZbAY zHO-q(j5gt5?CYRJy+ojd1N*M#dlyHFwbDfJU?4@tekGEA3V1)oE!i*!=vuK~W}Hjp zN56@;V$i&W_!9VghOV6K0M4@vcPSbTJt_N>2i<|!JDJ_^mR}a6r2ME zhX{h_^9kR8N#;q+3oC_K{3S;pNnI*}{|E}qBIP5L;5S8&znzZt$bxrniHL=WaZ*UT z%E!8YWYZK6sP6U%EP-8`!Ixs-5L+l> zf%l4&5R~anPr#m~5nkN3+@ktAfa&m-jgkOpkCN5jw9Q>%m+hkn?r7s&bqc!QF zDYwkuo=k@7(Vok78ms)yvj)1q1rw8;$3bNT2EN@BG>}l8nu!uD`}_1|&pDkh_M0XFp^&1qHA5h2~R-Z;XGQis_u! zgRTXi`Fa1sDHeJXIC7Hw_+5e_{g1(bjRx`j0r@~ZS)7rJBeE!wAAhJ+qq(LY{g4dM zmg>TbUX3*{>l%|(21!?_H^d8_LqTP7NRePbKbnJ)Dvglm~3}Z$PqpKr%xY+%xh-wK(2dyyWtbB=+ z-uoX3>&acx+0+VPW^lXYdAH7#L>G8ju)@}~B3<)g#|p!lh`|k(CO+V^l?E^9zjZKE z#bI8xc>*TYRb}O`add^eRtB?t{V%@mGN`RKY}hptLhzu)3BlbdP6EN*DW$m8@KUU3 zfZ)Mtp}4!YKyims93Dz3?oym$B_Hqi&g_{zduGq%_xh2UWY)UZb)84JE3U2FO>xWO zZ^`&RURRZCfp^^<>%ukWo{SsfIcj27j|i*E)0_=C1(@ve227#oH%afS%V2oWrpJcK zN5{pU{T20x&0tExv{>1zliAOQoBBCh9Lk=tJ{dL#zr(_RTPSSL_4aU+rrEj53j|5M zet7y;cl(1A&A$)xOsU)9B{flvOErZ%)qOjk!gs<6cH42KJ3i0^DRB2-p1nvN)O&MV9qJY}8RwB>oLf_N+gF z(YCnLxRoQoW1O7)$Wkn28xTcsN;)_0s7@>)B;mwC%6Jr_Yvm(WVf+UmJ8)k2=et~+ zXmnCqshEJ*pPfI4aVXK1@uPLCV;lKTz}%x9=060A9n%WOB048>eSfxVA_I00r~aIz zyn-z~9GHpyS<^j*2t97W@9_L^!K;rZ!_9Z$7o<5IT|NWzVW`M3UR{C{XR%7>;80-^ zMH+IkbLn7m1)=v6WFoL!u&lMPl2GJqz}Z8kj$*FeZ1OHSE3q*dxp1~j2l_HD`O>UQ z*0PKG#RRvpbyEz*m7d5ImF<;%{*`p-6)EAczDV|;F>@=LRs0}$`QNI(zeH<) z0|3`5tk=BBf5VloJI*%TJFi`m1l(7;y@T4~6mO7rM6SP7g>-K|2|+Ca4{`Hzq3t&X zU9>_Ri{KR}iRhxoovkW88nHrE(UDEW_DJQ*?U&jpOt+8e$D6M!cOMF`J6Z0NM(=v9 z@1^rqzXkstp_v@)x=!z+{Z8l3We?>%kPPMu;omMG`hc1*vdxKJXlqz{`j!HQVqru`Loh3um&VST$6oQ3?*Qa zv9uFdQI4S&uozIpxp4&fEpie#v zd+JPw?Z^z}ytwoEL-36xuCuAlJ&y8Qu3D~@yj{T2Pn=r$>kI!!gmq=;;4U{HW8>`x zzAy|M|II6z06Tkvy3ndSX9XM$IESm3v-;eyEyX!Cbr4l4OMA?rm$Y?SFdy|=~k7D%|05qujs%n~GwLunYT zF!$I`q_p#byaB&DA6B=GznDubp)=95$TgtWw+?pPM`Tg~rbJ_*Qw3CN!|>r86&Bvj zTrC$F$2_Cuy4^hcRnQiTG?1S12cy`(ohPp!{I&~xDEv!??Odj)SpgX%Gf>*t#VGoy zH|6O@R^uJRG&cC0*X4WMGWu#t%?&Qv$XuOWil7*}-8`8Gf?~2b8w4mh#-(0mHRct( zj2;==3#9U_uE$#ryQ5sfD`O%7-ku%++J|rnoNd~daNp* zm?bkwyI>%HeQ9#Ir%5P+9s_e46u1V^E}}1!5rQLAK!H>#dkq1>+sP}<#&##(Lz>LgjDu>Fc+KIJw9zuCc})Q zevC7J5^hIEt(7Ss`ohsV&zg$>Ke*@~!5dt;qc<_qKL z94=LGPVci+`WvN8j z6p^ih1Gnp)nyec4c&vV5F4+{f%B-J3CgE%e+2~Z;SPw|S%F9#&p)Rj|lgKSz!Io*m zqcp}@2e3nYrZITNjlODpCH@W)e7*p4;jIj;DEiOw zg&x{J{w_=23*N?OGHVnzYYlImXqrvu?AQeBlyN2QihtO|ZFVm}DHho)K+!R1?v^r&(zsvwe!uz z+ifexzV->35`nh}*K-D)RhV9;$WMx^2})e3fpAY;b+}63o3cxGh!R&2VvJN(+e`zF zPKDkW^;*%I`3d09uMSP}z~YH+nYhV*L{Vm8_hipl zcRhvA?3BvZTD`|MU?o~=3d`iA%bgp-eclGUy*)*{V2h+nCF`U!19sUoVM#xtnlyI1h#u^pWK0*P1vk#^FIYvdZf&j1wQxE{({+!g1oNTSsKnp zenXze89zqf_6YF=dTnDbijSX6)D7_jos!xz+P^@*O6ijvXtm|Q5iV)G|mXc`talLy3ISD)QVeCwuP!Wg-mejZxI<8C{R zvk%;$NDo6!7QG%f4sf*Fh-R_07Ry&=OG6Pvr&~u$jH^Dru|Lukl;5H;>z$R)qKhc0I8k{P$F) zlR%*}a#5@PUPot@Pu+<5w$2xG+hhh@Lc5N0md({$Zck~cKL&6Bzdzrh${%X={DT%Y zzArW$ZlzjvpH}a9qLIlkEN10Q_FTA+h2sOAZ$b{*U(TNS3;obBj!V3CT;azK^GNxM zB(k>)VGI+i5q?`d6Lt&s#(SzL;dZFraLOf%>qIg1=RH}9A7(V;ND}^tY!O+Z@yUn zn#*z2T`fH*LdyE~=OEKhLoJ)Gq<3GNbjM`DhhZexa_DnPg?%H+70)g_OTrc3sBPxny2iKiJ8qy_X2q2U|$D0<}AJ6SRo_Bx1zQonn**nt#VRkvPBV&g)p zS7?V$G+RtaRmuqg$3-_Mm2x?X7+M4;1Q2XKuTB{z#_$pm9G>UsMYAXyrtHL$-`F*9 zq!K=5>{Dn$m41ZXvDGUQ7fyM8N}H^IJ0qk_l^3s$PlruuVb~}|-sI;l`rqp^v3$zf z69VBrm}(X3cT$hKVWZ$_pAm7Pw=ljJx>r0-I%X0_i#E62fGp+5q zUieYx+C&B`RgFbA2A6#a&cjnXrFa95_jok(cAvofKONUaw11R1UWg9#jchdHKUrY- z)W-PyW9o;NY@<3n@%%_(!~nrLi7=E@{}8lQ0D=$q_@Rg5(Kv=vl;R@oS+8;5DnrZUF?9u!&27C)GZMXhAW!mma~Du8Exzxw zFQK~(p*&xG*gJ<^@WsE2Mbvl4bK|`?PYq^>=2-y2y--TrfXJojSAO9}tKs&_D87P> z53g&W0o0*%gm0uW%I~6Lv_Tfv+$L=uti6B)8N4?rJZnOkN6+u;elNLLRtg1YTASuG z3ypLn+;>bZA#Vuj(iwVEf}9MecutVh)Y0D<<(e6#FX)2iH7EhCI=`0X8?3 zcHLw>`%eAZ9GJut*>1pa2A9sur)}=-_)w4fN15pX&YU;kc@FCfvQ_-L)Rc+H{@4!k zbtm^}iSje28kQ!UxDjihOX*c-5sPlX#GyM^*o#h|X7c{lobBS0m}m&O@8UkX9EiN*HZBBLdh`N_9&raMmg zs=})iF?mad+EqPt8T*NY62CIXrtept_L7S>6r;sxVO``u1_FEu5g$Y}1~5s;5smXs zWkH-s^I|-x2%(>!BE6wp+Je7K-#FJaN!XEs92SBj^c4xlTwCyiCp)Q{4Pqt}U)UMo z$@VT9e0K8a8+g+p!2#Jxo2DpQ%4>t`3e-Mvt8VIZOD6S1k=i#VfJq`m!x}YL; zK>)?o2scQLl!}U5Ka-faJ{yh%Z)=ptDv}EesSpuq8WL#>G8RFFo99KfA&lo4**-Va zG2EvG_(o}i!!-wt6)$JhQ9yC2a2?uW{bm!c55|i15himuX75a3!g!J=;mX|+-XRmu zNt9S+^1=gA*zWVr&8XI*WRFZ-*ebU5fU(goK(ZTYtPXULAFxhMdXE+3Z394hqMRe< zV_fJZuu|bC;ewN4Rvoii5)q;xqy#!#!Uos5Xt?YSF=$MZ3VJLCMIvRJP;ME zwBUDJ+Et!zp0|LB=-`cbVIKR#++TAc@|}4C?b9xgh2XX}qn2>4$uLuwIrUwDcnhv_ zH?G_Q()il^5fx8JTkva0|8$8;p8J@*^(?9E=ci)Ln7L>9)Qd^+67k#?T^@_6yXJA% z3uSoG@e)r9bwE{Vi{&bdkt)$~j^=34V#RM%%m?%8%hFOunUmo>`CELP>nLnmQ0s3L z5qU+ZMkLG~`*D9&z2!exOSm!&Y1{(Tzcj;gEX0<=YH_q|VZs`UcTP5&K)B@G7ssnS&UrL?T&_9>#z3IIri6Bj|!Fj(XNZZDlNBvj?~B^sd>8d9wcvMM;{dNpD8= zxrgG4kJyla!bbqAn#nK-;*zuzkg;V>uuJqU5c$3ep^3(b_jQHY#lmbgL#>h^Yccw( zM4x|QLZw28i+jJ}rTeHy@YrCpnupVoE(>Z-^fl{$)xpAzCwmG^e;tD40*8sI~mR2+KC9FOEQX<`V<*b0(uR8iFDV0uexKU?UEF>UGhtuL!Rw?9E@BE)y&-n z`Hq9C2VWt(caqz7h8sWDskYYAylSY~{S-tO_^?->z8A^)I@aNJYr+A-GkL+q25^mU z_4waoj@4DO3B@6YDR4rYtXV!rVW&Gf&K296SWi;hr=aP{pfNvC0(*%5D-`x1_d@qdg3SxRk1sIotp$Sg zt2+WmHOW0=>MM&|(WP*(*Q5dMTJo5UtLiD?jupfGhp69s6C~Sj8a$HLIp4m~F5Vzr zHI^w}+B>@6T0SRbh!5$SFolq8XOj1S-br|q+`azan+=nMoLy83@nW6pm94rL!O8P& zH<}Y_dVBXPC8zl`Z2MmaR0N~~MPv~v(pgzlkuUz7N!)CLZtC54dz^^Z-FUqqmdPgv z+1rFHH0koTTp2A)70PcN%2uCHhG`5|%Fr{HvJONYKR8#@7wXaSNU!cY&)kt>BTe!Ni0 z`t21tm93ZLP}kGABVo7mQsENeuU^HlB!0EW6SA{VkT*;2Qje9REOGSd9qNK7c2#Ef z_aX?}pX?LOu=|SN6F+ z&Wa3nr9Lhzm&nO0>mi@l7$3(jACJTZ~B&D72Zq(qSSpKhiQ@joyC*g6kq#_x!#o4(aUN^C9{A?&{(NzAPSTz z)`?$wqF=exdES$q*lXO_U=$GqyLciR%iX_J4U`MLt+&aR&%I@rR1VjS(sl=tKthYH zZ-dQ4iF|KM6a7DQ`IpjCYiiw<+ss<|@{s7?w(j^L%|lC~{J&n~<7UQx$sio0^Y2ou zXR5f10f$Bj2XuCUimC21SEHm{0`tFudgxF@w0GYX1Cdhq!~Z~oiGdlu_Y+Zs$^U`q zU6#J8fCi}FxbU2-d`jc<*_^D6K0mNxngdCx*vR`pFe$AO$l<^kFgCsVzbNw!i3fsb z*4$~_@4|8=hRtFOz2!|Z_+{P7q$ECu*4+eyL#d?#>4yW?Nfj8pFIH&cFAKc67GB2`&piCT&4}(d3l~REqRBr(L!<3UXwF)Wt-l6a z6XrmD!}Zo@E6f^QU(^ZeI03(ATW+1w_1LKq^h!s^XB@2dMo}J@x#JOrOL0Cuyw!s_ zVKWn0-hOShaZb#jueT&DfBPgmJSIiR&5GmAM|1DnyP?wJk77S%(@WkFP^f&{`FnmW zbpGn)C^@qKF=2uYz@CI>(7}mw#935a-Z{)Gu7DkMW!8`-$?_9TMrg^a1^aw0wRp+| zX%@n5mRNz3`5A5YKVQt?M>>c?HI@Xxr+3tbP5JPakIMNPdqtbjWDU;wOwSkCrw+>a zIH!r>gcRs*O|VaYB0QHabwUwyx7kRR!MG?zu4vc0S)8HScEf2bJnf+O=?XPMsmRxs znka7*_6(fqkWR;G3ncNMR(RXn%3Y|#!#ETV2_VM1BuUf&W1HGTfM# z8!P?uViRv|mqox^TgzlAlez`}yQ3HWG_#pX>Z>p?Y5IupR-0OODi+REn5kf(kUIhG;Sg?(im;C9N_2N=Pk*GuRSMfYjAFjx+ zHI>S`vgr-SdG||lrR%K1XC;*A4~3H1<4o<4Hd&|ChA{TB)Mgl)xA$h+^P1_6jMoZo zUn4MH*N7N51^?BLDM4+O#_s@6U74a4rf~Fr;_@1ol*sJp%#C^nXqV^k+Qm}rKTsSC zd;Mlk~Mc<#q^Nbjte3n?zG!oB2A0^=pD50NLilrzT{(^Yd%Mj_r z$Yn|Hj##I|bb=k|DWFs0-RxS9kEPud%PFaAk5nuJM2gky47u=8M5;GH``5aMKFLqoP1?+BRRvS=qG+rrrOYu0_}Kbz@airT&(Ce~DtIQ_%j0~& z&mU4JH*C0V2v-bk?*X?GHc%=AN3(}S-O?^rzswPeMspbW!^vB!*{J~Kk+8|InUtnt z86d%ckTy=X9e9(f3ALyA>J{3^rXadY{T2LiW!Vng2s=DA0g+U0AkQnB-NaC2C3+r_@q?Jotea>Gw#lJtZx<@E2TqbiJ)!qw+!H0F4W z=B78i70i8=>R4K*O4LE(Pm``z`W)Jws4@Z)xUR^h{+5X^F?jWR`P;G85 zb#YN^(wt5aE{E_)fN&prLedPoi!tszY_BOu|L6lK+g*szpk5+-nzt-j#g1yCmH&mk zNrCnX?<*oaf0F4IA#FO4>Yt=3lO!)$RviyDPrQ;RL1!%alfa}%8FHWO{uCDMH)1aD=-MR8?)!~ zT~W9vZr+cok=bKYyqh7$Ncca<#&ujm+hX#coK5AuYov30^vnSTqEn)?T!iE-*512t z5Tm~1D(k7PQQqHzM<b${Cl*7_Pf-E#`P_M zeZu>CAc5M4eGi+AlLGqUd;t}#e`H5K07}MxLt+-clB|$+pKDD#;l3hkR@uEYFwqi$ zgj0flIdq7zlk(4LOLIlHU*-1lM`V8T{Z7z+91`ak<|v4bX8%TC=^7~X=5MyeohtPd zH)$>0j_syTg8 z#?$d0xeS57L&V-=Y)O4Fg)W@zs3c+>ZN5U8%Bc(U$ z=wmj~hz?7?;o>83Jnu}zer9m5nX@Z%i8SfK?(9y!&gw8$_Bh- zB1*!@$J2mK)~ihyWkgS+-(l7WXvX|n@Uv(%<=P#jd6+W{J;Hu`Q1~2!Xi^qZEe@gb z3wW*jIYs};bRsiBl)y6f;3rUa`y0l!eK-8(c_W3WpN0Rlrfd3SRQ=xLeQfxa0J#sN zM%Wl7!`uag$z6%eSgCrRQ>8pXlyJMpa(}P-16O$$>|vH`DLBa3tDo@%Yf?LPIlF14W*2cvi~iH1)g!D^ z)DnxQ4g*jC&RPK%)XRUXbC19_SadeW{|N6rQ25X(V0s=w&MHVD0*iDAQ~)6yv?g@b zExVZ4dPH0A!vTgXz%QCOL3z!{ynju3M5Jp3qzPaOTOg1XUlOBRru|WEiK&scpJd$z z&dqXt1EKk3fplbjau&sXZ+dC~!3zrkp!4ZykkC{OVjot9aTR|XZH7TxcX9GvVmL{1 zJ{2dD@lXD%Zs6`ID}+8W!!m;VKIDtv;|23+AHsq9dEB%55Y+->tbBG;J6qprF%-^k z#2O;gmhBZ5NE`~6T2WlW^)ZL?@(!?+K>0KWBp|U`srmdg0B%Vr$OQ_|wB!3@rz_4N z^kAp$y{M@@@_Ph8fW;=d++V8$pzB`bShWy+u;ZTXVNM-Yuql8uLgBMmT+6Fm6adgQ zu{JtQ18wh-$@ZZgAfwwaGmnt1=$B0fs`T3j)MM;rY943M+2n&30Gy>wvAMzy?6rqWm1vG zU~Y!EDywL$8V>eTPkZY1JgDfpBFZ5_A0b=!pIlLRjns5SQ+Ox!sJu?ZyNjZhGWyXY z2el?;z5UUsd-lAr*RevI_4hOy>WMSGvI57RTl{((((<1=c1rR(3hn?ynGdA4hT>LqO1Y|TXC>4#7ovcjqM za@2|M%2#}95Ob|8bq<`ax6DQjD^3sn<=wWhj=fA7m5*1YdzZhn&vsJwIlKkSO%q;T z&H^$8@tT`nT6r>k@Mp}9!K+=}+qh)Na|htvFzv`El1L}E#Ig8SO_iwbTCh{;hUCoc zjSwya&Bn@}FXYk`=T@|l)baDy0AjHW2mTFL_|r4h_9s?rs_3`!XnTLp$=SYVj@d}%07b;0{6Ir56W#dNa}Rkc3@REu;6p5MVvnXZ3y_* zz_&qC)u+I}QAVcPmSk$Mm-?9bqe2YQAkz#G2|>}`dtm}6VZ+IX!|D8^IaQ;d9ud|z z-)pMA5Au(VAAX;&8e8Q5v0OF2%|EeTHSyA=>PfHkYPgc*#ublEtP-5=FH3UGD8dYR3bX^&m*$EQdjjY*C5Zp_z*?UA-OI&wcllH&V9CQjE4%QrwKO(Guc49_h zk1Vfy2)1RIVo{&;Kir|b?+B@yjW(n^Jz$Ge@LW>pi<~kZRmk!DOE^Dp>%MQJ;ArDh zzevNunam@?DpUxoy|~4_G(;-hW07L*4PFVTL%G9f0DbA}JTd=+u*RZ~FB+^>bHaX} zy>?)KBgJcduPLaa{|9fq7DuS=)o$(0nGjrG*NmNi@#?7Up>I>P4(N8msCxX6KBWNG z;2i$pS+{vQS_>Z&!mkx3YK+7^(7;#?YJp2LzSNPdoLEZLRjfs7K7@EtArVr4uIz-R zYOp{pn736fWDms5ws`}vT~amn*X6G)mjn4otvw)}CmM{pRP$JO{`J`JckyZahY~6Q ze#=_!2$Bx8Q8qcoR)n!JpGNDW>O;uTJ@;RVQ$^ZRLJaQmm~sGn*alU<(3r9mUB74~ zSe?I*U7#@F^Q6?QIZNIkB5%;wn4wDEg3+ykY+OX;Lih@&PMLp5F}uzvbP*#S?TAl*s8i`TO{bsQ-7`kZB<|7Z%^JU zi7JyP&1OQR@|Yaef>;FL#7GT+xIe+PBF0+reEqqqf|@Pyb#CL+6j^P zZnmz5IACyXzQU9tjZU?a*O3y-kxli7@8IaO$3?*|(w?*&iPy(I=WRYpnX@5R@6=W$ zJ!F%#z5BvXzj)%>d+YS88S%rj4-CWWHMOsF+D|>5zp|TtH;{b~hv3%x`p|ASdNzf) zzJBUYR^@hJ>g(*rUHUZemz&6wsuR_(ar9-0gI|MWj{~jk;rcv|JN=HwPeZ$0f`45q z-gjSF?P?K+LaC&XQM-1OfV7HtNNe9!Pf7T2{Hs1B({i{%Kfr0CKSo<5GS|0u0XKsh ziCf8_9xSPg>W#@l3Rzf9VNbUgv?Tl;4c!2UjO)OOTeJ^F>wGb$UQrnmnSH2Zsg%Ej ziXeKG3n^wwBpyRQm=XIWZV%W+I^+3QOLjUI_ApNS_bC~Eh3c)I4lYrO(L<}SVeb|V z?O%^z_@_%tHR3R~tkxVMO{S$t{4AmS$sC?6?%&x@wZS)9;2Xi$X9&x)9L2UQ@Fy>f z^cOz>DXp7Ys)V%{RA&=cj0*ST#;DzHGy^%6giW8wf^<=BTW~5xZQf1dtK&Q_UkBfT zB}D#HXXXNK=E}cq!R~)^pES9dwrWA@Uv0M3as|Bd{t9oRZKJKNdVNe*)!n2Q;LRud zC3qG2#H~sBZjk<)#*O=z#BT;hw_1pA3a^iwQ)Is#&wnw(0GjNDN*LTT9+1&rWjp`k zGj`s+=>mZ6VNy799yos$cf+v~rq`L&5T19eXQ1xgW z%V^wFx#1xd2HL+x8A4V59%*ie8@wxI+}7Q0vzOrx+uEB9h)s& zdpF&NUzttHKgJ}=)B}HUCymikeu-E~D8VLk1^*;QmCXUsH>gO{bbZ>>#TX_ZsI2qmV58O#}T`Lk_lst9bTx zSnWOFPgegQ<(lKJfetRk%Z&RApbWgM*RV-}hZLd`2#i#JcbTa8sZ1u;O}-+t(hz~s zLjjCC^ej^_hk9@bo>t;(ML|i7mII!#96fBa@o%CHJRF~#)3^m~s~knfs+ua5WTz7Q zM8s*fCCOebkp&(}C7tXr5YHBCJnEp?%Y~mb zA{@FBcDZe`>8#J)GpF?T=()~EpU1eK$IiUYh3IxF-*cKxZT%+$nZV049pPK+Z~h&0 zpLAZh`}d^d3Mj91{4c^<+Z-qCFPQMr zLKXKE?j`zPgq1kDdqo_xfreZ@U?1U;tK28C(hxymLeSU$i?Ajajn!FjQ-XC6p&fr8 zTF>&ZS~jO4wb{f*V*ABs2VvB zRv8SzsxF@Kq0y8I-P_rEMUwR?2rEHvgT6H7JL4H0>7!I0bt2wBRFkxJWHZ|GIwo@_ z&rIU!7=MTnjG4Zyo-@_yT7zJ%lFFR0A*lB^NG$B?2Nvv;bWDFbetbLs(>ect5Z3bQ z`Nh}uKTLnUZ9SU*<<>)Dw&XD)@ZXYGPqE4i3tw!!p*E!KNSPzOMgcYm(qgs}c=P+e zl_2Z~v(*p+4D-Tj7`cM^8j{XxVJ(t1$b22ele4fMBhqQU5huO8u#o_NFyBOLF#p_4 zHjr!yO*4zk!&0xIC!BgVbmzJiejVj;E%-SHR>#b3hpYca zIR*S_-TCZS7Oiq(?jn-@r) zl#0;jiy0j~rpq}Kx6haVy+~xb`srBv`RbQnxysMJzMsxrNEiaeN44PX;UOWZcKP<8e!}YRsP%aH?zo4{`u=o8XyyKVO3(V=PlznjN81P1$2eIk8a<`Q4UCeMW738F(uyjO8qY2gIA=rHQ0RXmYQIEm|| zD==RbZlzSte2J2WLUK-h-tke_pd;dM^8^T$cqm;544J3Mlw_n5p9~y8nfldVS@b0> z1L~n&8@9@EnMo^KJFKcp`S9fHL@tW{sK0mkni?~qw(3E$)r;orY zQ=CD61;%iywUY1F8N|GvO?b)>rfZO#!oDiELqF%Iq7uZOMH%fZEfk&P(a@NF;mvMQ zXRa5&LDENqnpj0(|t$!qkvGeV4oeYmWo)sWvqoRwLED+05?t&iTu z&8BJn&+1iMZMYnD1rZNSr&nF`&7V{r&1N0LE*HZv2WWm;vJ=7U;en)d6`u2=9eUOV z)9B%MmF{mRl`~(NmC|gM5JiV*l`hr>(_&T9fBa#jN%vpd;F*Xk$Cd@bs7{CIVCjcA z&gI7vR^Y#`^{nLakmJ5%n4Am;==Q=j3TJgp+mIlLWE}|IsEL5c(y<|p)%T) z7?iuiBl!GiW7ubmQf3de$;E1z`@P+>x<78%pDe8F<^k90=JJ?pZxQopO%sWFk>fJjST1Om!iki;IxG-l6FvWCPEZOQ}ElE*kxkhdBQOv@w}7 zK2$k%65LAqE@Ccb?x_A%4idsO)Axr0$&VyW?28@S$-a#>U-R+s!r+e?HVzh zY*x51qik zB$T(8zXV15hrVlc92Xva=}j!B8+IYUomX;XTWATM^DkXK7u2wbenlQkM!}0GbX>yM z>y!cltP`s-JBWQ;1#i5Al3%M?zw~ztLou>4|GkDITtBv7d9D04Z~aV1v7ZnklLsj| zPs6QRNM49qUw2^pA+4ZZ2P~d>;`h}N!+MMq+kD^ki=VB>Qe!hm+DgNrL1k>=;{7mV zO7Uf_Ki|luAf*HI0m-^kv+HR{#(8dKhrfzBky<1-7N$;BWn86B#`4A4-C6_U{Tu4N ziv{NQV^%)w>|A_WWyknO)`R)c_=&?jyhbrszx@TX6v&|Kwdr-lzIJps?$gWJ`-x8R zJ6j*G(8B>pjR_Q8evKZYQ&P$4kk!>h&zmC4vsua*MDsRxWogFeurE+Cmd2j>#3ivS@Ff_kPzMxH z!UMYFt3ZGrC-@q~pa@~;;t>n|4~Sq0pPev4R2{+R69TRR(31ju6&pPNI?*?O6yBiG zpJKM4HAHKCpS=Z%Cyvj*xNk#Fh;0R75dE1>HljOH?CSVf3O!OfeZasTEWwu3q84I< zCTtvr&l8Z+DPh*#k2J|nka|ZCww%BM=6&p2CE?XLmz+aB&_NaP*Q$$?;qSurCloKE z*I(t}2-VcN^nR+%iJAE4UwOPvrerlmsiH&lU)i-)`CiO-@DbZ>5$XwULSJ3sb(^3v zjHhFG7x-F3k+2F-JS@6x%Tlq%Qei8BQMchUPb93?uT~{g934MmT*tw$eHs{hIIF`N zcChC|&}Bi&2bpRQJCG?+|BZ-cA5D1jz5cJ~2t#zugUxr>#fio4H_X8YjZ{1>*+LhB zI6bKogO4oo+*?NcO^RZ{o3Vl;^ax1+h!1e8fbxhP7GzZZ&b&9=bYjoK`-4nRfS}d` zFH;z{xyG@@8f<7Eyj{i`G4&XzeN-S4!76=YM!TN`>X+BvtzF<#*_l0~bJ1k>{ ztII=t$D9JKhO2K>S?=>$`=z*q zLX&BwHZ0;c7;*P1OaCfMOP<&hJL1t*7DS4;nvu9cBe9_uF<}_dXtzY`Dg@RD`4S@V z){9M2>?sERl%#;DEd(Mu^K_v5=@TX5hEyV2aTpe@F>7Wx>p~+dW4Am>7&fR^N#ufs-&k3v7n?Rj ziM&^tN$K%wxalV>81X!)AZ%F>qVi98ujXXeVj8lG)HUAJB`(0Gf~ieFIcX7WOOyz@ z0z#5rLn|1d#*p>)9GhkpJLp0Uf0iI+Lx=)~t+}DekSEUFt1(B(dOM><8HU3M)0S>x zmArtcry_X5u-R>t#hReB-8i6L9Cj?gY!k#XmE-aP16C?qMY3js!HP(|@`fI8f$D22 zH3FzYLKvJ$f;Dhflc+%R$tEjv9z^i*#UG_U29B3bs$mVoGq%AyIfwAu7*Rr%3TGv$ zFIhk~(!@}OJSr%_#t@Tl>PC(2e#t@uGhtd+ewv2O-K}KM3|UB3{&k^ExvqQM1X)Z) zB$_}AVN?oFo1UE;;a)V-KWn%g^kPldCs;$O2*irwn*d)@8Q5yV(|ZjVQpGRUrSeh@ z7;vx!n>7f+a5t%-h*h<#G(PW1BRZ%xK`*vwv!U6gSE{nkl{~)bv)D`4?#7N>i^Yk8;GS9d$lwS#vZ`Kf!k4`SFJS?xCQJ^PRNu; zGe`|Ufvh;&%G4NRblphGS{S}!Fw{2$5;~MZLco1A(o}Agg9qjf)NHPpt2F1}&8D9! zL?l542q7q{Z5(_eI(1m9=aypnGroD>EQ5iV;P+npjxCfsiWEU?f2hjV!L{9wK6V@)A^)zdp1c$#+O`$Om?R7axglvGWU!qfAKFt&Fi6_P^Xa z&mwaYM}s@={+DF~vw>&mmPOz9-_N z{ryHi?dy^oGGbx6wLwKs`Xqd~m;ah7vkz(NP_{ad7tQdJLUUKi-u#(kdR+QiQK2P5 zx;QUYsR;mAv2%bW?VIfHmF7jtpcRQuH^|BhZ~G<`D{J<_6}VHFzQl4&ndW3wDIwr> z^~LoJUnN7iOeJjZ-sn)id;ZmaL&cv_{mQ?H*eXQL17)@9e}tR+3OIX>WQxn%g?b8` zp1*kON^AD3$_~FA{Q0)iJfmx}*KXw25juWHs(D9Ye5iQbF6O3uPQ&lsg=z9~?_nU( z=5M$IX1n(i2@xCg4?OT0bP#$q)%G#t%89g_kMJF<>=jj=DS=WB&%R5}86}zw&l5MQ zUM(0Ujhkp_p~vOi*pHep3n_Y2Pq~X9LM*zpR1d z&yy98$6j2o;*2m|O(dJS-fU$$*W7GpzyEWy^GR9ocGvu8-^A4UVG5bzlIrZ2dFrjk z#Of!M>?eqU5`oDzx8OdoB!;_la;q=g_5O62t5)u;=;?8wNpIE+dKqwf#t&~#w2zfI z=QR?57kP?_NDk>^5(V)%&J%fYc@Fh>+X5#(-luL;e%Uk>s>M9q|7E#7$0CMk22ByY zy)UFCS;M^oK#9WwaiASGC;>u>&ZLhv09=FBfqBOwLE`~>O72jY`KnB4UAT$D>t`o` z;a-}y6P{U@yxE8RuSPB#lo{7UJP&K%LismXr)OwzFz>DtogvkxtCT1*Kv-w+s$Ilm zhzY*j(=)Dp!ukv}phy9yrg&h(Ax>I@MGk`x$k}OxvY-L*oYc%Srvi)&m_7X zJ<*;m6^51gNCFWEc@3q+3yX?q(KF*Erg*|YfdsZAVkzMEWOIKzT0bVmXO6LRh6BGr z1y5KSehtadn}PSX`T}u9hGg}f6aBXAtqT}Uly{Tr+~W%EA5&}XEpV+D#W>NaI3X~k z2AUS^1qDyqm4G}6Z7Uu($*`Y`Q z-+7y$-4i&0pP_vcfQG2x{(Oi(c$jH*5`%UoMCRh$6vO^V>qm-@e+KkyD7MxAh?Kd= zm;0I438WDA6J~cjQdg7p=MhB?a!?`e7*-dbq0JX--+^_?HO*quKKNbm3cVZs8J0f0 z#xzyJ|D#;@9iix{03vX0RaL5!Ji(RNB&MFwlI#8GY>7-W>v>+WF-Byr!f=kYU0F{@ zR&1u!|FTk+$+3G`glr`G(&k+K^)vfXDs3r*lTCc3k2BUW&BGHN7qD7BhqKg(Kh!SLULCo>{pL226 zI_vDUulB{h+-tAz`@EkgQR{o>^?A+9O#zKYO=vgcMJ-xrd=XI5)F*#Yms}MK$!Ay` zvAC$;MHcD#ge`sxxM(1?t5jQ>;Y;_}vWip_a(ObkB>C-tt)L3@-1jPV1WV&tR5f1Z zp(fM3@W`?00b&K-t|hl}bkQ}KuoI_<_}O~0s> z>&vIlfbiO4Rqi4tqNP_P_Ny_KZ#$^?4%BsXGJ+@Hu=6Uh@TNVsj9Q_4P&>2Oj2Zob z_lBUId}{H*gl~T&wS61@bBx;S^BC{0QHzrptRR)dPZ_t^)Gaf8T4G~Ri4 zQK%Ip&;M?)z`tM+*_Tg_w-Lb>vI};_0Q`dI8(;+9@r92Y*dx|O)VD;Fm9Y+^(u?IV zf*;g!0B^K2FQ|fu3?3SwqQA4$~Fv8C?L^%>BUJU1=Q}n7L1{J5|Mh&~FW3q^{0#bS;oMeLr#*1|K=`Whb))+a z;(=~v&Cf%RlfQR9Il_;*S(8W|Dz5(Sa?`2#@JYW!Gz-~lUxFL${yVS>MN;Ky%isoi zl9F8-eW}a?B@LVM>-1g0ibA(wHOvyj(5MYp)prGTkD9-=myVS?R_vH)gWCp5>{a)l zj+3{4KF^6^|4vSnMD?ir+qcACFHCe^e8y6E>3;2>qUge2sW=gZEzr8hW!M68g6S%NE9K(K0xJy|e6N#-R^0P$9>zlW)Poum>Ka7zr;4`7Q}~ zA&l%Q3?hpp^+Pf)gw?Zy>${0M!|uz2i0__+^IU<~lEe8l!Jtb@mO*{ee9@XMZ9-p3 zaX$r#7Hw*Yh`g5yXQC2+4Jl4ARu9ck>h#>Z87N>rY6|s6;|fJk0_z=+(oYdW03yw@ zBHjCB6deM1^8+pDqwLWTeri#Z78!lnC|BO7wl`5!Z=+t&NBitXR_sLi_(l8ef?sCY zyv~Xa*^LfFO9bCX(CMR*Sr9p2^yi2`vO1ADY_UYirR?lyg-ElQg(5Unol{I1}}llLugIKPcV=VG$7zQHdY9N$|}5m2(iiXfA9cuiJjAu-{jx3O%wc^R#0yvOa!?af|Os%7RegV^#{Th z(@h&hli* zU`nRLaOTTBGp}su8}qjT*~b3niovaK!~PnEYRN?~WJN8i8kz@iex(xi&q~}g(P_%mtUTkGlWc!QAz~;0tVq_7^t`If}>6DAnZ~Z4q;`Bw?8prM6^wL*P2mWNkPZ{zKB3Meu<+ zcv?#8hyk4oP;AfRR^ZML0t64{*)71{Jm&JoMin)31H$M zd4$vf5{eQ<^HjujwQln28WR{>z&lD$d09mbkG**UKgW1LPr_k6h1?l|%q79<6}9<@ z=ja7&Vcm7GR>b=m;tuOCE3V=4aM&F$U$&Qs?cNW&uywDAw43$y#ngpjKrlJDy8lIZ znTb%wwG7@dQC^;u=3~8i+Hw)GvVRY3emdJQ?F)Mcuu3z+PEOzZ?oeFzM;`V{#2ddJ zJ`r+GqnIFyqE)FV++(eb=H7o$F4?M3-fB(Bm$P?XGTG)}%~1VQzIw}|`d7gH0#o&V zTlK+G_0e@ThOy>EzUIuL<|3fx>RrusTg~lK&E0hk&hKi8*Gc({$~?ZcpqyIbFSVr0 zwd6OoV5T}sg*s}>I@-WG`kXq(FLlhzb*wja>`e8X3iaHU^*l^<_&V=_OjUv}WRzeK zonn3dFCy@zdTFeHY=^4?;3ivUxxwkQiU}Ds`~-YrYedlBaMmKC{@d!@OM#sWr5!=%q2AXlfSiG3w8s})6^LX z=l|v-oaYjW%4|U5NuMTD40VG8yi@@jVFv!fbBapS?C$aOF3hOk9X&Q)ue%RDIz7=$-PLDJLN#}`1WD{~AMsL$yT*(_7`uNqf? zoO0g-V_-u%(i_T0cr>I~uU?UGjM0+Ej7;6moYs1#>?I^R{=@XqAfO2dv?J5|eu%PV0J7 zXXR0Q_wayhySm{Rcn&BgETx_D=1F0ZX#ccGi%uY_`l&*}yJZZC714iulZj{tiNlit0&M-@lh#zx$>z@%Zb+9rL6%{v@9Ds$v>jU(y%Ejz@aY z8*A>hf6+>BTACRjvibEmXYstB3Nj-)&Y&_*C7gh6${tZjfQYC~Z_@Yk-%L^2rL=Pe zKF)c3*gZ$p6JJFa2ow{EmWiQ@5TWF-=5L$>8>P^_nlrclOqnlgo}uYN2AOaYX=wm& zlXAxteRl|+Q|J6HUlCx&vcRCSK&JWqW^3cC!`uwHJj+HVYKZ3`@ta^|R!yhsccC^SJw#7f}Odu=RAF6A)G;{yl zH^!;Ae}Ly%Ae%~%9e2jVV2F;XtVUX~{C!H)$dd`VMw7oroxgUg2gZ(raT6iW>Ke`+YuLa#m}7$^f1Nx;;#zM*G=GB%xrTqV1~KwvwDAnPSmXAfp}lh^ z<@okhE}Q4yPnDBZ0NJLb4dZ`q+a09_U-oUzrt&w2uHpPga=lQSEmNcK>$+R&om+ZS z(%8%`;cq{6mA9Xy6hG46Hans={jhE2L1U>8af}RPSlPa~-G&tBJ9=!L#h3b9KrG+= z68$i#{S8bZ16Eo8L=GVy6@6~$m0YpE;MF;)$~OhsP{DSa6JoEyPcRe;EA9*Ib4cedDXT zdlrPHh8eap!AU1Jwiq|4tAN5#+tV{C=iq1`#qkl(-x(#5hBagm4rWXhus>mEMr{^$ z*iF)FEGS*_iiYh?rNjFR{cG{DaBCWBxS7B=E@21sX` z6PY)$gX?L9)30Hc*saG^3aCdJTHttCxyn|-)dRJ+jtFu+l4mH5US9C17re`h)G`Xz zYwO_M1V1qce-;I=4Q>MLNM2$o#=w8Eh8NG)%;`nIMut7U4mR(A34dRb8t8-7T?@Lr zh}&_*x%kN2Cq=??;dEt!FZc?9?&Rtx;(lKfE<#fBrrOzj_$*MG=4D*8js z1me&R<`mb4s^$1k)vAO_9w-F7lwD4hu-JTqb8N5vv#>G(T}7#wH{!m-P|6hle*cymTt74F4p^a@3u+lwuy2Gq`MhBv<<(& zDyOw;-P9d*x2oOPuvlGr{p?SuC?;8du%+@CDd2Yb$ND957W?_D{^UK)_B|<-kj>`S z?_?XA`0LJ~Rp*y@UB_TkZI1ow8A<^Ki1nSck$_8ofyBH;O zk9D9n-#i1;e}pp$E*!g43CbL0QWm{2=WI68*W1)dD6Mki=cUC>OZBb+?mSD~w~(A) zlahSo@!kI(&LImnrM@H2ba{=!r-?KS3&>N`o`etm7?LkB`4_DjzSSsgizH;7n)j~` zaORbT2h(tb6!7iMUH>#LZ%gPDD}|$MGV15Gu#ilS#Hf9+ZMfC#ry52fmfak$yxfv3 zf8wen+Z@k<*2ai98W+0@FMjU)oZBh-{9tyUA?ZRY@m?(!>wwZ!f6zEc_x|NVMN?A%h=1R)MA zvYZ+fdcEkJ#PVm_b5QAWR{zbg7_!a8<-D7mr_*mUsdU8i$6M!4|Ih2&iXL<3OY$5e zHG|55hiq?6{dc+uLoXkYy|wY%&`7mm_a}71zNsL0?fAyrs?Ha3y>_A;^zTw*?ESGZ z1*=l`F@=v{A;w}CMWGfcTp_cTm^cDpuW@h z2hV-UkR37EX4h^ofc4Uag=ps&o2=KN(Zd7u`>k5AY(A+OzOnWtzl60%zq?{U$bi?J^ zXGH&*S1%bbf;@^_%BPCp0ULO58?Dtw8m|rsJ1yd=x?M-h8m141&f;Yfsc@;R-0wdM zlTerR-MHc1N=CEP351rj z&fa;apzd7Q)ox-{7#Z`I5P*WeeJ<+7h0Vw-gSc6$ITM}$+9GOUb@j#XQqi26DO)v~ zB-ukhtjdkv&7X1Y+(c{i@ODh)4T>z`xEe}18W+%>D^Jhx{eACXQX-vE^3=qY>EotJ zxoJk6pdg@Zn!tF|e6Hdt8Jp>63r>>QXY9v4`LOBo(?C4jkr*|z+XW;9J$N^9JG z`yi`31W;h-s|nwgH|zaSte{=@+mvimDeUBwZ9b0?D-SK7{2jl|$rt?TU$}EpVGOsR zUCR1DVg-xv$8PlkxT`95RN|HV(e63XR6?L%u zd3X{&B(saBk6epL8@+QoD0^KWPx^|ty7BQEls`(I)h@MhZG6@yBcLE+_K?kU0avFS zhcYShgw0)Z=rMtv9(qUsj?b4)U9~0r%*2fyalI>E@RdiYV-xieJtyN42)03S`eZTk z!2P^SjRimP{Hg`kb$_vY(cw_?iR+K5#Z*!dyC{bic!+itM5&XCXd?2@V4cnN01Ep87E(s<-D6Nj=`W1nyB<#P5EmpU^GL^V( zz|M~JnP89{eeXzQ-xQbL5T1s|=OJvlzJxfcK-ybIzPfP#<8 z;ArWNlmHX;nGCI$l{Jnw$@AQOk8g5ydQZsFSBES$*RK>@d$$=L)o`x?>^QXD@QS6Fl2DAIc;qJ%_)IjzcZ+3AXkbDf@16Tgp!k$clw__i404OO0>M61rR1FTMvFR7%=}iLCN_ouD>lGfBgA)+5STz^zRIX z&7T)&^)Tc}BQ#(dt8_K77I@^RnhUR)NSY z^x7MrdDF?6>$Em;PNivUs@n2-G{v$&Y0 z<(l3tGB)Oa{v;chy-!{~EHi(C23n!(uWPg9n-W?x6Tz*`E^>q~b4km4_A#RMvfXu{ zo@B!=_V?0jEi~^(dUC{LxKMSOhD>kkV;8dtZPHlEvm4RJpmLQQe#w|+&F=ciUdMXo z2ac-!=w6&U)r@trs$S@9y&P6Jww0=}OIDH$_li)y2>$j3Tt-k%ZVNt}B_Ey#zx0K= zjeHe~ZB<4f`m)e19AOHAL|0sL2|9gR-0^BC0L&5Yr9dQWMKr#INLuepz!5?<rYj#dvF!z)_q8yJt9BGCdK@u^Og5ZADQ1a?YCMe676 z0}dwY%;Ezti&Bs<^>DAj5dVU}pvqT`1K5DrfFg~=s{s^v;Mt1CGr&-i>_F&(bYNrD z)zx5_WV)9w$lrem8{$2PnjJzZ3Ir&syI}^9je{wqM2U(ZlnLm&y?`h4@T*>pXOj0f zJiY~S3lBrK4C?{N#T=XNd4jhfV)8y>spV|8t%vU!(L{nHtVP{SbvWyYdk78chd?yax$J6re^K?O?)_hVK#o&L~qAU&)no& zSJ>B$gQU)P-!k$@0A^wD5noj$`HzeGE~$xvW!vg}4XzpugwiIEW?`XTVL-32bMEmQ zYD4c)1LV~NCDA1A<4H3C!|V67$79Wa;24phPYGoc_1T|D-Md>%;z$mOZ{Hh)+u{&o z)F{p?Zm!Wcszy%Y@8aY^H10(7hiDq>cXUD|2I)p5c8q(DL`D@xEQeDJLUA|sjcolO zx@{1;z=+A|QJ4J`&jU2`5A=iF=}cZmeko28fBCntDVFDxNOmKf&pmUPs?_9yM~v|j z{UEH=50IRSajKs&ig%_V%Xk(&10+i^H3kuYK}0y;<}vtf;SsXy5vu*hz-@d9FcAr6 zMw#V5w1%u3{$cE)n=J4t4nc&%tR9d^^Bm<`Rf*dSYCvFGEhG+(%FSj-0p*{ z3$y+YYNf{@@YO7orSeT4p`Ib03L0RHj)Eme8t_JWfu){wu$WaDnm@RQLOv%>hLND> zwOA_s7ottPaAE%;as;+&kM(6Eoi(F_^9JtCv*?!~!XltK%@bv-(OcOpmb`^)Y0*Io}JTW~1vb*iikx3o7WB{$0bsq7hka(9}Xf2$TN8{wN&+k5`wc_*KY~QLl!6Fu%)Npzb#F00NA8Bc#2SP3Q?fj9Z9omDy}Ed`TcGz>gtWSPsoY(&QmS*OwCw zajIt%GW*fpkBAcTdy`?)dVlemCgqFoE=BL6bB@=S%|ayJ*!R zq>Y)_3lNg;Z}gf{Y{aBVPfv=iA0E?sxRh+fa(@K;J`1TySjob&cCPc*i`Fu%N+db0 z(>6+QC|m+ZEqzjS^)s|>k`$K}U30iR>28z!KMGvcPpPEts5445J-Qmz(x4U4%y|V=sd%zPkxXGa=`B)U zw#oG9mqS56k;%B!IC$*cpj&|-t#T^v7^JW!$hlu5yjwWlP;2T_^s8+khZn9Gj>C`Q zXz`}*E0%(!tMFtrkVhS@%0Otx%Y17+knW<1Qd^x=x^GmqW{2T1@1k+pGr81btoA{= z^h2~%M9O7Ev$?dnSwBjtyzO8*d1Ec9A2cXB^jC|%SLkJM9TP8bE`Tc*(1sw z!d0$-d^dzPDfVf$QS6gWdG5ThyJ+ZZ=lTU6x3D~qWQgkty0$wi4wK?d&*rAdTg*GA zr$xw25-l!lrx)@InZF)kmP&O-pPotAE~(v*cq6CdU{k63)=uT$5~9)zfp|~u2$}PcAMPBu&CpVP zP`u2z8pHg$6{4SuG27-YBgLa+k6m-`CV3x&U<1e`p8ZhveJ+qAZj07J{r)ldtl^IJagZyN*ETg7IOiFCq;K(=e_5 zM{<3R2ZK@fi^2!PB?lu-2crWAWAg{&zYe}#98gC+@6kbX;W*Z2zDVqb4ki-@%O1=o z(|wHHpJydaxdjXCW-?#8bqHgog7jCCW# zbFKw!gmFz@Fi`#AIRoPjm`PPP3Zq2@oL*tWA9ZMpx6KyLpJn z97xv6DDwLf8ehj{aq3-3v|`pV@9id%7h>@z*vnwv03~ngaEQp)_UCZ9Ui1bYpMR%f~Q-Ah}*p2*lT`nr+{Cko#VO}xG zmRO#V&{sBJUMjt}hv1v8Hkbc9PzC*xW`$>2X$080(3UEsmLTpk1z&bC`M5MZM_fjHU-twf~0fGWZF<52jlQs zpiQ@ZT7IO1EHF^C25aLdoR-3AgBC^N03~C@`8>9gcdwc)qaH&FHVe*^*#Ao562Uep zeD@-ahw4U7(SPv$4DiGmEEP|TGn4MWfgkH%@__7Wz0~i3w&t{9eAN7w8PL~hK!ng$d>jIJ2Ja>c)07{Hjd00YbA5!;qpfMfV zFfa1lpGFHpU};9fDTX#&AaCrV$h-!;Cfcn47d@tpBg!Vwg#ANaJ&gxvrkA6Aj(Eqf z-~j;LK>uj0F@5aQ-8g@XkE%ZCVBD*81n4zn;g42ijdF}=zb_i6%=3!Wn)WHmteeeV zA}&8t>f@Ik%7XJ_|6C2wDiuNd=yVelB<(+AXhsv1?;h_(t7{aLXiMeMEfTqVwQn9} zVAiLGi#Egp?gY%dEW}(1=)~Q2F&uqp$PPo$!>RSo(7}U$IlnO9yDUiFGLXK~%~5&w zph^g^n7pp~nvNkvd?6uUC#sP-B=EvuyT(jH6a_e7Bh40Tb^oL*$`}HRj&W((>CwDwrmH@ zI@=9wIPF)Zv1ZX9y}`k3ZBq2)+feryIv(j9?~S$4U(#`}vo1KdJ}1)YS1;7&cFcK` zRI`pxvRc=-HL%`Y{D9$*_s4K8W;(Z2D>1I-M zGk#j@EGL>i;mW}e-XWW2E^xwSm&~&N3W8P=Zsd+JxF-glz%yIeW9XM$3KGqJIcx`E z+nkCDGNAALOG2pcsA%E9Z|Uo55#44bc9z*d&JQm0e2@?Ru4<(pki_!5`C2|sP9NDB z+YAdhmf+iJr(P|*`C+DulZvNdn!KgC0j|mKaNEo$%fRNgJ-R;fjeFT4A=mtsbt8-d z#SKg4Y!%J>Z2~oSReYIYWVpx4fHw0Hf%;+oFM=VT#cu@TC$$xXLh|vDeeka~+_<2A zepR8CjaY?yJ?UMbaNF#>*`yHg-#Qpv{8~Yzc||xq2D-QZMWic0ep#d&mqc-v70dlR zQ@G8_m$<1|-bB!}m0VG*A0KNeHo#D5iBVk3&6tpATd)T=(Txijbu!+&ZLL_khI_Yd zy4rHG*JAD_iGY2J)O1YgW=!BMltk&Q3Y7GoxYly7(pLpc^-uDD+_n~AjfG(^*3n1k z6V^pwYMSvDA8*bnM=vwLxuWC3@UNfas1z>k*}1M`(mx8KI{CTNRT7BC*_!dC(C>91 zP4)5y1xsfOJbohm$}suO135UdtNqO+!Iys%Lv~Y2X)_89O7eTfIU({TIY~jpWDgwF zUVrmX6aDh!&&!>R;2WcK1xJ^QZ{X)&u&359XmU1>;r;NUc6isHlAzR6(T@tJhi6SU z3LC|R?Wdz$&>6)aZ{91I{=k2BckGt?%*akf{Eyh5D!U0&-!Q4h;3wEa*{)8Njb?o4 zEpxBpO7?)MG9M_XrCxGTNkEOvo3fC#EHB$@R}Jk00^~oas|?c8{3|yf9mU<-R7?VA z@1rc#*W{*-!bo!=-hza#R3WdNqDaK@OR4c>=AE{m0U^s!Q&D-Ef@-uIR{_L15)sqx zu7}M-P7~WVb3dw!HEp-=lKoks8w5nFoN>~AAp!Q`}03%1Z2g9zqq{m#5PvV{~yx8;PjcgUhM zDpFy2ffk7Sq{o9y%>|kR!(42K7}vu%V!7ujjx(EKCk;$Y#e%_~ zbR3qZvwPD^#H;x9J^!qCe zMMpqmO~}9B)whP=$318^;uN$diTzYf5ov8=u%M&d+(JiLMpY;CygixtBVtLwQ%L$M8VVAX1l~e z&x$LC)R_Q4tk?NFqsot>Gzi`~TeK=Hm(2q6hQnA`la$#9W=zF2rf4-3GbL!voCj;G z4<{m_~=c@8MYd1cz@Kwnmb25`l5C{Y>n;J5hogVJ@;jhuA8Q+f)j{Kks%`U11R$ z_p`)_`6Nqjs*k|P0bLW<%QpPg&H1bgHjHH5_amY)4jIQqs$yKW*4})=^Ji@7^~Z6* z>SOrC0W{mMS!u&{h{~W5SUqsR_5gmNTW^@j6e>4Xk-jVb(SP;X2N}49Z89ya?n6PA z+gOC~OSADYcBt2%Y$`cVxO6)^b=A&&&++-ECnL>3vE5p)u*sT^w;b?p-EJw^M_YbSJHiRu!jmOoBCQ&Zb$nXPg`n*DPNJx8y*)+D3vJJx)>Ozbt>*at5*U%j#K#J2urV=fQSlUdAzrw$! zHyK_|stF!sOy44t!y{ioMbuE>g5WUQiwELI;k1eFVPK|C|EMZvDP0hfvC8 z1EcQmbyGoYjxdy{i#f*`E*CvOWH!9K=&_h2AkR9F%s!7bNNtzn>xj{l83xq++)S-3 zsp(6=BGp8w*HT9QnDP!T!W3(qi-2nlB?g9sf z^EorW)%Mun+~Hf(psZL}hQzWWhN%(`30Qzc z@UV%~lPFsyxj<0;=a+USe%0@M!U*;@PLV{@LB1tkZF~FY{X7>1V)x|~atQmWOjLUE5lrQ**x@chM3O|7rNqfTeo$>ySMt~W69)?{ zjx+8rr^IKFY|udmj8MK0-z!t4_L<66ICLmNA(h8{fK=-a{_GnHzw(!=7fc253#w`B zPX2JOyFlqa2B3)JbHd{-UFvSXi8d?p)i3R4wtrHo?y(=OsOel(WSO3)>27%6ojd9( z_%Xz#7upE-f7!1g+($}0={HbXZ(BO=){oEK4M$`vRyya6l?2^Agp1-aXCoz63NQ4nj!FwegE}8cvNOzWJy`o zZGnq$U$nHN%KDBfHw=IMAueJPaXV0}q>i|K7kgLcZ>?(5Nw2R8AdaU-(_#U*U>F`R z3{Mf3u+Men6=S;!PPXBztW^J!X9{n3F%t%)$?v6+cYmCWDPdOkyLy;8vLiL+%)`EG z3J$}){hBbJTnO8FSG~vX&IqsU_LlBT;O~aY@+F=S6-a6qG#Y*oE{}U2nJJ$FXZ}~S~i|6M9elR5E;4l5jS6KZiM}0p!(KS^Zh0ELxH7g$t=C4@NUbjY7WbngDak9x> ztB#y2ewEjoejXVSAxPmQ z`VFXd{rtLu{a&s8IoKE=(3;8ewtFwT$fULUx9Q9Oh%p3j#fM#Nh7c*a(279kuZqqi zfv$^+t~-J5d$)~Tu!pv?hgGnbr?OXA@T>HHZd;#vWuLxaziDN^jo^Uvfv4RAXGK7E z{_iAad~QM9_B(t)mf(mg4FA30Xtmo&o7-r8<#6x8*huBbe{S2s=ug3kqsobagNb>! z$$h~|+Nw!Lp()m?>3g^BSLMuw;I#7Lq_+F4>f!XG!#NB0ng86j!&x7pg^;QR)5C>l z?u!9JizQWyU|^DrSJox zHBRACPLI_i_e~z*P5z@z;p$E8>TPx5U#1?vRI7iz#tPrNZQJ2TTZu>80Uo;_g!epz z_cN<^>yP%!J@(&u95e|Zv>hFE{!cJ>Uii;1k3ZAZe+Wb{U@{D?NCt`;{!5jYbQzNsY)6$M4tf|5ju-qsR*6eTXLCBAptnrlhAL`es0Nhd_f zzTdlTqU1ZZop&D>G?y6K{r$a2+_CM4b<*?-AucDM!^C_f7q&7y#bxa764PUmS zPs~tkUBnL`j8>&&Z~ZOjgC7T_8V&^caM-84%d}p$1qoO_YGFGa@G^es zC$6%gYRcVp^JpBFH@@P5r?Slwq3NejtM8Yjs~SwhP8TZ+9X2FFDg~iX1U|?e{@$&) z=xu2U$%o$4o_t@GvQw%T0{hgBOj5%hEeEP)f{3BYVfAi!dS!MV8a`exlY1=Lb0V-f z3=R6Js2oz~=}Zg%O4JA=Z!6YJTxb3)3q=sSg&hWJX|k)+y8q7M?mv^vameoaoq2?F^9w zr!EwGl_jnf?eJ!Sk#5&?ENo33i_+Hy=*SxID#B}wP)XkqHFAJQC_J4lsVhxsbHs%? zlWvrncGP2O_l7!>4o$-1NjFbp1Zj+^nsV*17BbnEGnYRlCIcUMD@&&M}jz5m37i_WdDr9NTu~wm&iZ%Ane3O^uSy zYIbVMhJTR=)$|ko;{((t_8%=(?0RD^*sN7JEVLXOg}sQ?7w6$ffdv8q2v|am>@$UW zc8W%laU&;HRP5&9(?8faP{);Xr4363!xNO$yE3kppusp_V!E{fD?*7YoLDb%e#98x z+X>WL=el@`{tO+|Aw7Z3WfS-16$UJ>@KZdd=x^)R*X(FNtfVGa*F{7<)$v?wX`Wx@ z)?c(sU0#j#AMOXsztapT9F3)M z=%+4J%Qk3xe{-SQZI1vSw_434CuvstPA1{Yl@6WU9~(|&O}|e$7D2tm?{0bQvDsKT7;>CyN?KJO1mz)iIk|^r#XvyQX2V71l zZGBae3{nEve>Lcj=^4YYzCx{2rx+E0oK zXLza|hIQf_Bo(33K?Tyv{#ZOI}R4orZ6_k?xf7%K-Zs9&EnHKOJBAQlvK z@?PyjC9vm@f32mb{22cDDVHzewpIhBIE3hL(5`3FonJc_sB0Hgkt@Az^e9VB%xLQ} zQyP9FD#Jqh!KLoJlFF=0&g%tmoMJ)=7F;kQ&lF)Ol+s%Logx)=J&FCgDWZ9?pyWUS zl$CXuA;hLMG{hgywyMn%Lse1Vofn>?Lh3#RKYbOl^ZTdpBa;1yRJFc4`1>eAy1v~P z9eWLhYVlvKV&N{BDIf^a^!=FF@eYdeR}}6$6M|;!N8C4EooaNc#Fs@~sgF>Xw8rUh zK3a1=fIEm`&;G%$1fYL+Mo;3P*E!Jhm@cT7b0;7HN_%lrqYy3?>y+KMi92=4M zV``>>#mx0?5+D^V^*1oiR{*i}vMxqcC1MZEWa(EHF55$g?R-e_(MuHm1H{%C0?rK% zy!^8WV9M z?SzilxQVgu-!0!^e4ECY8UO%I$wNph3+7ld%g|DZ7Au3B~lCdl*Ow`Q^I*XT<(+fSPZU)HH9o@ zzklk~o{R?T3ggB#W8a9Q!+CmDYF}rMjAL`n+YQ5m11LnXHx?KeUTYql%0#>N`2Zfl zK&;Jp+pApwneAwzUf@L+0X~%?Z`%b2UQHXxH`Z0#=H5np23bSl?DesCDMa>H8sE>m z_JDQ9bj)V!YhB34L0D(fyFV1i0^cg0)P;KoUPNM9csLA!!2=AN63Ufe0GuS#yl6QL z4|2H(Bkq39q|!n(yBL;)9AHSJR zpC;PE&6NKa(F+yv;tSWi=0k)NI8R6Os4yaSR-o?WTP3hGC+a-I93sGsxhyUBdVbf~VjR9+E=5jLAh_cCV=4tsMeZo8f^ntA6X)`=fCA;6EK#(0FL0|8_=K@a4~R zw!}B^q%Y&mYk3Z5&9KlvLh?Tvzbnfw70i9Rh6XyC87;ODirgYDs68oW8EEugstn3t zCyw!iDE?tc7(DmS@PY1W$Nf7qLCV7d1Y?A077WIx60R3FuNHRfT{KuH=;=&gow%{%L-rcO^ zpy`A|6_E&?_(J9#UYKhZoP9HSNaPN;GZ^H^Ku$EsaG9dPyl?3JXFUqmcTDjD>`1eM zQv^#qrnn?>q+wa!IK7|eQJHd+V9k2zh#y6V7V$`~;y*nn{;46~c9KzhPwp@A#z#ro zyHDP*tE+N=Z7>c23||L^2!2W-Wc!e$d-;HTpNP;fWIS*&+{BDM`9AqZBy3NhlK8&> zs6bc07dY?1u^p<6r8vh)&J{i57raoUHU)CL8^&TFm>@_#N~aK7^o^dVWIab$~^@mUYu}+ETf*vJR zrbUZlO)>;P54E%j1PF4EnKneB0|8$XF6t0KhSX{zvuR4lO4hPQgoXPMYeD9Ly^;!~ z7^#aJJ6p#&e+opHZXJgp8TUGB6!INZ#NiE<+7Z%Zgaaqi!$fuvfJQ(8nhxsci59|) zzE^rT_eHAZ8dy zLE#_}KXf4xcZdV;2GWLtSoI&m9f&X)B8NUC;gAm5=`;MOjekfIik{7`cDH*IslCH} zufyWn6xz0q)dGjIWhZSfV%Umobw#9&$UdgX-TK=1z8Z0BMveipdH7eoJ}j(l8DdHO z#>BvwEl47&ff4ND_rVZ`a1RIajeiL8!WOPDhQq-P4*#Q&Y>nc2H!@&~ggC+|PO*y5 zmXG*egoT9FNP8=S;1%2W#yDOL_pGChP3cObl+k9UNTDAM zk#@+VfBch&`|6=Zg}Cq0lP=eg7gFOaVkD^!aVw-F{g71;#MY&v=R{hak?HZ;(nt<; zQyN{7O~Y7+TC>MK{PER+tZg4Tob^In+>rUc7`hB;whVvy6MsxmiUpxBSGm1So2YUh z&4%7r(cSB)%zD{Y8wk~aO>c<^yF@W5^w0>BTdxtcAZoRUv=>5)c?9-&*ubhr{znia z{v)0R$zxn?BFH-yM57f}Wg8o=kwj4P5(ClqI6%&jPsA1@F8}s-Q8cSuTl^!cR@8O7 z8B*PU1iaoi78=ByA`F|Jfg#0ZLTE@%5RLl8kp;{&YDWdR!OjIGf z_=g_^QeBAugSY?Cwnh}|^_YCM!Y}QeLl}G$h;M!CSue;Qe}RTjSYyvPS8)J#jueM0 zVdDb9!b6Tb1%X(+BZ~dU)%C5AP!x|1Rh#8YX z#a^ft+Bf+%MF5X>ssO&~1<__N@~-5S?VZ>^QTsq#zWHk|qziH=yiKk?5XF*Rw+;5= zAQV#JL`>8cvsVbq6~ar5h+QCsh(19IaTD%W9uqe8e*Z+Oa7Mg01fTzS!$KVIzl;#S zAbpUE!wV{qMEHTXaVJPYXCI1b&>qRRmuWWfIt#%_*!K^IhZNQ2e*&RRy$3$u0DBa{ zfC@o@#4~fs#S9535U)oNEv0$|(GKXBRS=O6!jMxPQ4H_UdO)#GPxlaj*AdEAYWwz5 z4MBkamvckHcSb>O)5b~zku}T%8tj%4endsuhEeD9Mj8=LMW_&=WquQpG1j&)qmPlG}Xfm*fZZb+d?WJnb^1Y}^; zYcjVo^8kl1gn=DVKm{~cYnWuV$Ac9yV?y?0JO6|@g5`*kD2b6ciI(VyhnR_)XfgHB z4)V3_=oItBIj@6*>6nlD=rjxmigJ}j;%5)~AQ1W> zkOozW(Acmsf8O=5L9Sa3xRs_ zb$uek56dW)a#>a^X_Y!T5Hgt&l2j4eR}eJG5JWc+OSg^=!En9z4{hX?bGeurG!JBn zmGRULJ(+nE5jcg^10&cFJs?TT^$Tt!uO4lzot*_*CumqghSwy;hUU|j!Tn+4$m4$*lOD21IV5YuO3zB!$7 z^qM4Q9e2cbl2?uckprL*5xPm8;{Q2T*13oRm|3qgkCQYI1~`q@072GJnpQ**NJmui zq(#M$M{bpkPR>Srq&5iR5Ka1|RGMTHd6lqji4kuaDrR?4fW}qTCWOYAjLP;7kt#nk2tMG` zJdoH&n`#{)l`)^1L^Tv{{&hU9G)1whs`w){J{E+>^Gl-Tr&XzxWf_~Q25lB|F@S95uNozlf6(3wX_GPur|~X3p6}ha8a#efP!i}zS(kXd#EQE%siSe85YbBAu$up13ui!o?kW&11qq*U z27U0Y_0};TR7eDPtd(~_AV*2I@ITKv5V~g_e<={WB(QWufQ2BiapyI0w>H-Bodav1 zc~naFa}2B52-Cm_t^b#-jgT?xBnJ}65cDLXc8Zm1>V~{vM1_!lr|^zzcnP$yM+;G5 z$t81V6GO$2tO8*RmjDWx`45Wq3-q^qQX3lhdJ0xcM_{*_e`9n75eIzmH2V+=Z!mT6 zR6l`LXmYTw0^zhq!LI`mr(+5fywGgIkgXqv{`Bq)c?!9;;Tg2>#q%=oa39mbQDA7yOV#bzVMq;6zZ!&E2r^$zbDnc|1h+z z0g3oqIrMaDm2@#UdQzJMUJ<6h{Oc3fJ6Q3`y`P3!y=yKEWHjaEV_EZr+2c>w`t@@9Sz`lqGyG~^HnnnVs@_J)AyN*PoR|Bwv>;SLQ^!UrUWHle>7kqHEW3!*R( zaR&)|HV1~l3IcHr1MvqR#>86G!D%)>1`wgN3ULTd+%9vV#Ll*c8!JE^a}TK#2nu1tszeX8t2bAq z#wm0UOaB844M7Ucz{vlg5Bh+{8?5XL|Z1wqLOG=uL{ygsYI_G@o36b#pZ$Nz8* z!SD~%@C@mI3$W!7!7y(4k4gbQ8Fq z0LJx2%nnZvoh^;5BUIULzq1;JWgzk5$l7AtAt2va}R7K&{V2EHC>1n!_=&bkyO21 zLk$(A)nZQl5G~f#Uj5Zz9oAw!)?{7QW_{LZoz`l-)@p4L1Wi3#-D4Ny)n+BtLhZeo z46G6Xq)EKY3K68Gg_uA(*bo8OnmE{qo!E-K*o@uSj{Vq+jhKQxxou?Fd~Gp&4cVH# z*__?kp8eUJ?GT7v5NHS5rhVF|4cf+w*XBu45s?nI6Wg&3+jMiIw)1APo!h#-+q~V| zzWv+49o)h_+{9hn#(mt#o!rX3+|1qFxeeQn#?k*f-5SKG_8{HVo!xYV-P+yVDI3)#QENEo9#4z25Po!w{j~2RM!FJ>O?Tv4jKP^ob4nz2E%Z-~RpI03P51 zKHvmi;0Au+2%g{yzTgbr;12%a5FX(YKH(Hz;TC@37@px8zTp>s)CHlxk=fDoJ>nKq z2f6hSAYRP!P2wz0F|CH*Egs{;1LHDY<7b24Z!JR#;XOZnR#B7@IsT~EhH_ZF<2xSY z7bu8Ef#j!L&_npC4Qk}!meoJr<6Mp8KWODT9&QrxsrEqS5dq~{&Y@gh=JEvQ2wHAZ z{*>TNqG_5DPoqf%3^;Qh5%{QwowhryRnu{!nASWIjicvkX%Xq5N%ZvR693_e7-7wI zZs!-#(hkw+S?M~whNFe<=pncecaD!URKSq#H>HE4o=$^Sv_tkF>4OeC8bLX3Rlulz zgMhOT_+3&sTs0AKGZ!(=HZgAyQR|@L>o=k6EHc4UA?%!G>^4|G$d2q)BoWMxmX5{{ z++Da3Aq>_o5imC~wUq7H&h0E>?cS~s;9fu54iOHEbK_ny*Iw=GjyvuCa_^22J^MV< z4iWfz5%_xV0-^61!S52`?-8Nz0Kf15?h^xF5d41d{SF!mPZ0Os@Nxn16Cv>de?Js2 z8V}zP0&njNk$Cw|@CxzqMX~V}FQjeGqHjLWHoo#-L*p#}^5)|5F#kXEq(aOzfAcYa z@-iykIN$TD!Nw}@^FohGDL&8QH}ps!6-B?LN1yage-!xL^iMzaJ`wd5A#Fou*Hlm4 zR(})Ah~-;9-ZK9XjX;|;N3kCp_AoD^jf16meGvx>xdJf*3b6xma0<$>5b>n-YA?Rm zt@As|^IrH5)btNqVD7SIIA5xScc0GslMnbrD)?#+gj_v_U{CwmZS%e#{1Q=@ znB3Z$Ed0n%Yp$RCFQ256YWqxz`-Br@)L;G9fBo2>{o23%-2dPG-v9mJAO7M${^Vc& z=70X^pZ@B<{_NlW?*IPqAOG?n{;OU5;oT94&-_Tg{QBSd08vlgyGH*E9z>W>;lTq3 z3}RYXXyHVP6)j%Gm{H?KjvYOI1Q}A~NRlN@o-@btVrTf>8?qbG`9Y2Q5(k@7)8|TeC zh`d`9LTw4DdDMK+UdhxjTStZ+TlVa_1OJiU-O4hbzkmDkDfGARV`z)K z6$)R-4bj?_or2uyZ(U|A_zXb#Pop z;}@q<6LxxHd({-RO*1H;=nQ%%wCvh@Mwoy2OK2Z$-Z5xE_x^cqIqxpSFhdPF0?#Ay zHi|?GLH=>)p6m>ohL1u1fn=gjK%q#Ef8xvRH^mZKMxkG*xuhZqCz=kz(Nqe@miA&% zh(B8v3THznpM)~D?5^stBc*!Os6Kq!8ko0n)Pz<^ap^B>J_oX;kMs43>3 zB^Aoip!Qy4hAm;3q0ypa5Td0PgQ}^B8HE%)X#Y-KXo<2>M<0a@!i46jlA{kXx>1XN zTInZDgqqyrpi>SS6G??64Q!zsPh!xP^5QgzmxD~DsLzG`vSuMf4NZvFe?mbMQelTB z)~wZLQcI+045Fu=*X-d3vGRW8$hv&KS(UVZ#=*>->C%x@o`38)HlcUgREV8aJ@OPG z1`*2kpC)-dsI+45#W!EMF2$&xgMuUXGR%hTEur7qZP3f~S)p`tom8ZGF23l*=uVu7 zXVrGL2WXLxMmlMbNcPZVg(UijVD-NFrvDqO6{7mRgt9g$9HU_qT4}Mz9vfNQT6%6D zwbjn2ZG_xzxZSYHrn_#t-I8=6vng}Br02+04e$sBAD3{1R%7{Y#TRG1t#-m}XKszI zjA)^I&dW$KNmC|JWrRHM+}ymMlKiC78%I6$d?|mLByC=Yz24Z{vv^yOm+Cr-9+un3w}t1v`+JE;$asa6;b`K2 zY6kEh{eT4goAeGJ*RzTE5zaWx_(7P-g?`K%8=MWpm~yZIq4yzVdfr1|0^@R-f4n0- z07%w9uv9#X3?m8|SrJBh(Th-RB>#WG`o|{@!aIyiFBuB4Rf9;<8O)^5AfZ5)0%bTu zuV}`B27%z&Bv`rR7z{%GO30|fC&D-^gb{zT$mlL6L^oYzP7|@0`3{n!P%yD0!uZ7# zakP+Fz>0=n1fx?($TyH&5IPF^-$HsMBZK^c4+x3jAYhfhikt#Xz6wbJ4U!%!8iZa5 z5tKrZ7)C-C5-NI33HUJLjbU75H4HmQybiM^i~(s}VUn646M_xIKyr}R+ulKrF(2ln z${slqjuhjUw^ikc8O#{tKb~PoTGmn}u`~(4F4B$zR)il~I>-Tmi5ldrW*-CUW&A*? zkbDTInHMu3m-e9?jj2hQbpJHSFm1U_Zazhq837&U4uVLOysIM>OAX?Dr?WF=BzfJ0 zXFM|!Lo$+NK>2`VMKUQ*e)iLl-$a{p{5ep9icOOB{K(~kW)j2guWfKEXhbEt7ziB{ zp&qFR5L;3@m37pk9|b8cCpuD+3gu-d0cg)&^G<{a%p|Y-NUpG1QkvG3CFIm$NE+H7 zio7G47*S<}{z1RqSTC4G-VF~NgCtu^~- z6LUGzjr1PmJt>^!XnFx7gUks{UQNel(`BZA@Io`zjbwKv>?H7p7bWcY2N?dLhJOe* zA-bJNTqoieZR{migra0({&5U$WQL`7G6GZy(w;a+qVIIRaI!3X1$PXFWTGpUP`B}k zh>0+QjsGfe_8@L$krsEDosETXA+`tweLvC~UXA-k3QkC_`kN42oM@l=wFovofnhEq zMz#1xIb8tiZvy=T8V2DMKM2cPgJi)VO&|kC-bh??!0mYmQBaF4dkGHfjms$N!$m~M z3y6#=KI!w~LFnb%o|*;|yzmQZ$MnaG{3cjB{syDwF=Ji`it8yyJ6Tq~krP%V7B)u+ z)Be$jDuDPO=AGYgqoMJP_*rX7U>XT=a9J?VAw_Q;B~ zysBM}R>de@JVUt*26Ng)PnESRq#g8##$gSj4|=RGMt(m?5h*fWGc-6k(U~!YzVVK3 zH2+D*n$bqo{p8$(2%|Hn@zp8%44i~6pKNC$m02+gp;1{|FI!HAz>G|R}0_=yf~`@kXGiAzbez&nVH%BYssH@x5>KNLhFgtkF6M4Eb|n*hW^WW-Nn1gqkT zMwG-byCJ!=l(m=$2%E%BEU6nJiA7Y1GvLHgEU7EB2!Q&A%{qluRESmVqknM4m0%)P zTnJi(MO$n|T*L@h6e3>q#aSGcUo;3`yv1L%#aBcKU5v$ySVo>`##}^3Vw{L)+z4Kz z2x{~QT0BNw9L84^#vn4rTI9x^z{Xn?m2sR#YrF__M8{cqiE^|Ec2vhYf=7+`#%S!L zVARG@kuFtX2rMMUfb6HA3b%iF!~`IK1Q-BM^N73ww}cosz#yS^xHgD%!~Z1uK}ov8 z*FcOLypc3hv8(vOmI_Ib97%)7mUj@z2I7c$h(U`yoOrd24K z!icP>p|qJ(39;6Q$QncpQX@)hYBsDy%6|xe5WEP0S{bOYx1+R}jF2`hB%u=-BYT@E zp~}nsIYXn1ww9QZ=0MDII?U|w%LY759L!3Rq_tDY%fCd4F`7*FG6|KOl)z-ni;xt> z7yyK{Fu#$i!3+!56v!DW#MhL~ni7Chq|4dFO;%Hg+BAsTB!G;F&HvmKPD1(-0Z4$} z{LRU^P3iy%*7THiam^ikiPDiA=ro-wgR16aCceyw=j2Z5{D|m$3h}fE@|3riFi*zd z!|!a7G^`VCLKu}{thyf)~ zYoLbH_#cG(hx_;k0%Zwoz)%d$l?*)y{ov62Z(!*%~34Pxc_<3=|UqKP0=m|(}UYmE|tCnMp;nrodRq5n@S1(lekm41w8HPE8C^)ynj6DW*h-qU1`r{Ih23NK=*7=To#+ zO%0$)%Sq7;R{d27LCahvpqyEiU9CYr8`WbCF&9J0W_?SQN>-t|LcheN((EY+Sq;s} zo3*^i2J#$n^Qh11RL2mkj(Lo37Bv}!79d8p_RLq}34 zSsNU{aZR;isxX0@RMRO(@`?1kG=upYm@OQh8pF0(4Nplm=rmcOG8k)O*}$&_y-1vPl?gai}M);+-DWzGhP-R%rd;qAbL zNZyZdGV-JV&&`Mcu->^0L7oIUkPtqV=-ww$knd%Q+~Z!1AYYdd-|^6hsI$IaB?D#omiZI+EIh8J=Om zRkj$`i0SxWi}&IPAg0@i3aO7m;!l&54yuTED8VJZ zUiFhGS>xg^F4`y#wb7A)e*giEVB(5kIsbz4;x$%TviUJECW~~?1O_PM&urt7V&go% z+zokSI1US(x&RF@h!yyU3m{~TSeZM-`|J zi3-_9zT>1h;z<6A{3L-3IAu)!hZPV3R-TB3tcd`Ch;~pysRCs#rW;5m<*-0yLpBIQ zZe&fSC%W`q#tX+{BrxMqV$PJ>8*9Qud@iZY-5t!xVp z)H&w5NoRqs;)Y?e>iDhc30t#VS^wFb7(qUW6`zYAix0`(Cv#*00NlLkeCyelY@fL zgRTi7d+CEei4V;tFOXqwH|_}Kuq^rc2S146Fqk_eA?aB8hcC!Pgt+gEz@t^M75d6t zGDHrfUI_Iz2*N(>9>j>!n2&CdE|A-rf;~x*X=J-e=iitQdO{3yIt_Dxq;Q~y>)@3p zd50#UKK#~}5{elc&rRgeg@oAc!A1fgVDBRUf+Tl|2V4$-R;JtijRG7SJ-(ZS#Q8;9Tcyby*f`3@@fA~!SAOJhZbA<5ke@Nq4^;fPv znYzhi#Yt#XCCQ74)eHC8G!PMK!Cpmby3GoRELRf2y4)e-IQl zk8@a0awL!eWXA|kPYfj#mp+GyQ|H@4M~SEeb|n1=NyqemSauos2Ox;^Be--;UkF_P z2VKwhn?M+AU-yx)(Izv9KyvegDEE(0_jh-Ri*a{-_lOCE-qR2iZtwPcM~DTG+lhDp zgvj?@A6c`8`2UEP_=%_ZinsWS$M}rb_>AXSh3I#G&xtf&5>YUS-6nT?rwB_uc!#59 zkiQ9jcX_A)kVpsdkXZOn5A|G2baejpm`{n-n5B{bfqOT2h2Y$Z5TTr3wPsR5kok-Z z_j!h5b(FXFqEFkSpNLOy$*cYOa~46J@Os4+bE1WMlI(`-^C{#3&00#Fuy2dAPE7AP zjU)eu9{>rgcK~z`pNbH`dSh8Cr%dR*3EyBFDs$&EM;sS(`?I{3Pml#!_yk_ChO`&B zoU!~2oaoJl4DtvG5jz=^6x(xR3E6!X9Sq))@K`m0dtpg)4nGN{Zk>wA6-btx(Iu-; z;`@g|UH^racc7v+dw2%uQjRxXG#84Pe@PCe&)D7{s%t<4K%j$8=!8M=1zuIA1|S!=-`DP--w_hm-;wCU+T`?f7#hp6W$1K!&jU$*9feS z{fhvIW&Z{e{FiUsz;4g}O(U3YptXU_s1+QDiQ&I}6*m@qN2_4Nis|zG!!|G+$CLy^ z{_Cc(AT?$LBXYD?P@6%NCH4RgcXa0qbRXpPn9?Sy<>LjnwThnh7Ie~>5i;V zz}~eiIdIy%fe5>Cd?s{bJF#5}7E|i>E!?!aJozbYLVA0tGD(^RZT$nTve!W96(J`sIQ*Y2f&UH<3{`M4N8sSy zUNTwmR6)qvo5Mw4@z<$X%+N#;0_{GuXr=-MV#BGCbOiD8Pj%O+RGmt+EW_MDkg@h4 zgmYaI*MM*F6(E8st+yUQ4syf`hp0{X7K56(^~pcpX*ZrqD87|piAwPjN;Ur&7$J^1 z>Zqe@0|7CR40AE?j{`$GP|$!jUuT=RxJdTrqU(V-~<;x1?h5~UjN0V z_s?#p^_UVbI|=01K*u!r;6kUE6U-e^XaP+t_vJZEG<3w#1|rD-^AB`Yax_?4|0K!Y zDO(Q2=3_fb8W%sKz13EfhkbO(JS?tNP>lplxY$7M5p>yHy~M)KCBUs$CP&oZ)Z0d= z%H_{L9@@$sgr;)j=0L@G_>Gv88hb3V1-*2OTt8Ms0Ryr@8)0HQp%x{R-c|Gsu9Uf` zQib3RRuQljWjIi`a3yAqYs#7XkEsrxTabB|@VXc;fNka-t#73wL=<@9hhHbMuyKYk zp(Ml6H13i5q*4LG3sSNb>xSKFCfTCxTl+xbsFVdQ12RSgaf}$pr$AhgbN|Mk(r-n> zwVV=kiMmDW$us>FqQyP?OjkZ-BJs}svK}`@|HX~%uJT_Shm!(%K<#yL>u3gYi`LtsaKX_GylGJ4X6Al+Cw2~)& zd6wY{9(drA4zC9-m6pxsaqSk|p8bp?KWxs`nXUF*>2)}+A!N=x-yoFrMldmFvT1acZh4y!*+AAhx1%BHu_CZQgh=_Sl+h}=*5p8`w*KwUXs4|8DxL) z+aG(Br4)_4gm(9<)tMlO6pfHXBhDKQ^hl@@{Q;*ZYxCjqC|JQEB5NO^`Uh;ZSCJzS zBx(PU0QsQkJxTdRekyU`&#V|BEN(=LMC1x9Tp)-@=m{E;=tKhXAc}UpV^K=6A{U7$ z$CRWELO7($1_@HdW7$rI@&lqh7^K!DRCN>M1$W;tPmjij^BUJ(d z34q`qnaCzOr#TOLWWokY=tLmau*_4kq8;?Gr!>>4&wUyag4g6HI%Qaq8tKB3x%_7L zb_vjhzH%P?D25PRP=+;7G;ypL2R)t{O@>Y?pB()tNI{CbjZ{e#Ke(P!$~nn#vNWVF zCE`57Q3ejUfD3D2!y#A^4vgA!qc4rnNPjBSp<*+rUm-{;5(<}bYM`8O$s|#us+xJs z!xm4NLK#pQ42<6Mo_&!jSi>sTp(=-w-c(6be>v8*ZvXKgxX^?qg2BLXjH4at_#InS zW7NFzwXeq72Val@gtHQ)2LEvCKQxe72`ILl8aO9U{3_X$@Pi-pxGZMrp~J~?wzHnK z7+^7GQi3Rzv;!gMB%7*Q5`4C`6}iZ3UHg_|$+ot(eI8%_L4$8{1PF#L$T$-Vg2ukZ zR}(9)j*L4O<=z%9IZIJ;H^SW2Oczr`+ojk-HFjt|7f!LGXfiBjt52jzZ|J zMy8|&KSJ$5h8thjHn+a^9f%w6tKYtcupp`Ufl}S;-hUXjmrh-&1{C{`6(~3^yyBwn zbjK0Aa)vZ$p`B+ux{-HuX0J-&u!G|wVPu(Or2iPc9qP8jkrSh3#1Uc~j^2@Cl}t{< z57HfrYgai66J(@3u853R^J6*gxFTWcjE#RbV~&htq%MXK7I|Fa9#?q7uqy~;3+vl0 z|HHSwJnTT4N&>__Fg4eNnn16Nl(h+QQvZx4+ur<^Hly%ZbCYu*KZ@tbMvu-a*|Wvc z{6^IXx`IC>v@8YL#fl`lBCv7GZ=cxGfzY?J_Ve?8Gp*@OZxYZo3GGIQzq@)D;o1vwjq5R@1uHw!XC-UHy+A&_L8(o;63viR)n#yV%CYBbEm;;82GY z)5o^0v!5+(S1KnJG&t$2pJf5@DJ2u>`u{VWJv_U(@Ytg{K2|%h*k%g9W5_t7u)7OF z;d9FyE=G+vLGTSg)NrM9>4sfU=PhoBpk=}ZhYP$7{iRFVlA^m^GT5ua>M^Kc`t28))eBcm6MEC(hTok68)YH*&Tm+PqJ zsKKJo>EghZ+u4F|dAN;b33DjJWgY{6&_8*;5t=isAS>{-Qph*$t?OB~MCbY@3rY|i zz$N7=hcnpIuJ*ON)aMEP?F%T$ZGs@S!EC=f-t#V2U~gpZ8zFOCY{3h`4@B^U$Ijp@ zWO&6VzVMAl{NWex_{cwA@{ngd<^MB}`OQzB^Ox^D=sz!d%agwHrq_JvOON`|pWgGT zcYW(qAA8oX{`Io2{p@W|d)VW?_q_l8?Sa4h;1hrN#@9XabFX~g7eD#TKmPKCzntg& z69$ zT?gtN2!@~t&QdYRfj_)MPzB9Dh#g1NK-?9?wtb+mjUWxypbZX@Kkz~woFEET+-8Wv z)$yHSy$!T1A`!$&uYaP$3Z(VF%hB6K)|Fb|JXz;5$HJ zK`>IO6&Chgp-LH{5qcpTwxJse2pEbXQvDhZ>{em%U2wgj9_}F%I$;=E5fIWLYK++m z@S!0dBHQ_)9KJ?D*x^P1n|y)5n32Gkr36$VA|_^Hs`;VL@!3BZin4{`5dOmplp@`E z-#?JR1|*gywxTQ2njf~CniUifA_1vw1P#1^Bc>uH##bR$V#U0fU-V$moklUfA~GhU zB92A~Q3SJCTR|8Wu*DsH72-gw0104YDz3(6)rv8G+w*VFWxSdEr3o{gU1p+H z{)0_K1Wdx3$;sqKpuj(fz-|>{H>QL=pbBk$6+s+PVXDR%aEw%DQawh*lN?c9US=!C zBJSA4LU5C{{r>J_2IKIV0IFO%N%hzG1ZEhhaj#NH0 zL_wWXfHh+F{X-qrp$v$nYGy=IbjdMt+=KW}?c64G^5I<;#4}!7XwI5a4M9P)01A+u z40LB|O4V{kCwV4f9KK{$D%&j<1QiPBKyYV!vO;5)Cw*rh}zW`y5vSgL_?C+fJtK+RzwT5Cqc+3 zU1-BMbpL~rE-8~Xsgph_lt!tPPAQdEsg+(SmS(AzZYh^`sh55!n1-pCjwzXzshOTB znx?6mu4$FJMQ+XzgX-2p#$<37#DFF!p602sXeO#81t_Y-sJR7^>M5ZXDr?+jGb+V? z5}2Vjs-sE@enOh{Ju0PEDuhI;qDESsa)gmus;4?CriPlPmX@Ge;-{YKfg-ANZp5HQ zsHvhVtdi$+u1{ZH&T^i~c*d%(qM9_tVmpitH>u}pP@yQi<`sdQJ@CT|DTV2%P&j79 zu14z!-sL`67Kj1{PNh`bBm$)kAd8*@S zF#nNu9>IXx>p&FiT#)4+fFGe)#2)<0K=8qhjEEjUYr7_Ft%YQc{$WZm3o=~cTW}8! zaF4fkS!k9SL8RnH6lGC92ca~AzjjA&)TY9otZiXxZ_48ty5L(RRI4u6Kop0I;3P*p z#wYN>$f7LIN?WM@0}#p@qmrTvV(V&*%{Zik?-WF5B<(bGLq1T0#JmHrFatB}15J2j z&u;CiQ7b_dRKym9#BN}NA`Ac6%KJo6LA)#1wykYxk!GqHvt$|Bxh&B(D6jF_uI-lI z0)aK=*J_xo+Yaugy(!35L?8}?#1_^MtU%*7E)6*DL>?~TR&E=rDn-Dg*cNR?NdNAx z6=LHSM3?A;<(94&;wMD}D?yy0;wl^2s>DfopWvDvcf`PA@cZ+#VS>yF~qKYA^cc6{?I2yq;huE~ZMvo$d}Tm<_}aSU~s=L?-Y9;KD^gnhZxk$B0;tc%`oa zOI6&$#p}XdMSwsQkbni?ZxkFB2q58VKt{k;L~b202ZvQ7xM{pCl`Btd*|Hor3`LI3iz0yBh+$R1;f zN`wN(7R15kGCcqDX=Fje_Tc=m1_As7Ij00I#|8WPazT7XbsUB*Y%oAqw6ToMtmf7V zg!4uaKmsVhKPUh+Yw|Vq$Q0MvKU9iEuk?L}Fj9`;TpV;l|AR+^bORi8%dO4QZRAd~ zv`_D;OF!#_96(4T^iLo4LZ$I32qtO_08J~vOe3{aXHy#U@LUXlQy0VlT=P_SH8KY^ z!shEntHuBv07!c^S_jh~gWNvs22-O(01!k11OQhLL?@>;UPlk2{)1(XwQ3vyQO9*& z5B4Uh>OjoxK!m4i2sU9i_8k4}QVX(UPc|2WH9@HE;=;8NQ~x$+TZ}*0f@OE^rrKmm z00000c4w#dtjlm$-?aIEtsZimy0}x44VH zIE=@*jL$fY*SL+}IF9GIj_){+_qdP$c-jaW7L7M)$NvR}8>UU5ppq{+lQ+4OKRJ{~ zxs*>il~=iyUpba%xt4D^mv_0Be>s?kxtNbRnU}elpE;VRxtgyz3I=(h^@u3MHbIa! z3KY3p9Qhmhlb-K6pZB?+|2d!sx}Xm_p%=QLA3CBZx}q;Sqc^&vKRTpGx};A!rB}M8 zUpl5|x~B7aalQ3G(0O2v_eS8khVz7?U)rXpx~i`_tGBwVzq+Ge8mhxOt=GD(@42ko z&#k+NiomY}rk!sDZI?Pi`k6l;?Ho;zH#Ym6IeS58Q?jQM{~XJ-cidRj`9Fwy zLD2S&U@z2_G0VNhURjD!E!{OGdCnEH^f+CP82=T!#|5|#L>Mld1I@c)K4)sgJ0ZQr zz1vP$r1H2AJmuC-)3AF`-Q4Xk=ehd(yW87HVNtykJdMe_m0f)8c+q79>jh-?oV$g$ zPnZ`m99oQ2xjQ^Z*v`G#4jWOt#A%N6{Axwu6(C{U)McE_%UsUyJiUv2p8Z>dw0zT1 zoX#7jQB7IMFm2Ra98=_zJw%*BlN(w%5Ra{m$+v^00R23ohR3ly?u^YfMVZOd(Yif5 zULr-q&3x1Vn%4Jxzvo-TCyP;)2@%$LcyfD1gnY+Ajh`KwnGqV=asAt$2AbiInjOBr zBR=0F`_9!$;TOFpZW6O^eV$cZ^!PoFJpaDs-#p^a1=vITpkaGz&>7=H{@GJL;pa&8 z41@}#Ca@3tTj)L4SGx>9LmQ~UKd6E3?>_JMzVHA3?<0n4@5pL4VnNvb>ubA8(Dr6y zb0|~*2SmU0Pe1inzx7{#^g{sd4?m9#1UHGo1*9hOk3YxF5)}KCGA~y2)W{7w(Z=qB`bL& zWs{mC@|C#QDQBdV+0IMnR`EpFBX2jhy_z&z%c~;}y$zLMi5-a&HGu-@jS@eDnxKJ1 zMoA$*N~SO}qvVUi9bglVedzGpH*E}y{S%frq-N0!bFVhN8F<9_xlwa;>@+|8)U!J> ziZ9YU$|t_v@|sMd{s3%fsCU>>t)2P)5iT`z?3&Od3L9b&K?ieVjU7xvuhp#KmU?U$BA}K&8`>knlYjtD?$mz$WA(P$cTs=s01ZKQDYD^ zQpsY8P^QR%5$V84MU5UBf#eD(KIy`iAixugBo1vk@E>YGS|+uRRKs!3C5N=LEz*=^ z$f7<|($k^6c#M(ABJb>|PWCP`GDf9@6e$xCM370akyymbQB79@l+#Z^eXGf@g5V{Y zF333LiX>9;BZxwdDTIks%;=$sItG~{$}`gxk0Wz78b_jEB;w^CZ7^v_MuwiT1w}+b z^%N*+L#?*L_pHr!BA7B+A*D>U4OiT8$rX20u9EQMi#Nasg^VWnkm`;q?wI0}HAQ3bRQZpi9rvG7xA7eM-=AU20X=uHFm}w}MHyQedqKM1QSmTX3j;qp3Bf7vQ zoH{PqXW9h8u!lVg?qPh=B!~b0|(Aff+(=F?Jqnh{Me! zgKX)Pp^jSWPgiM(hL0x#c_MJ9?%M0GQ(8HztEw8??5v=oN~*P;9EfPLL{kl0#>nyu zDX{U*TW>|}KII=uClc8suJ;bEp?mJxh%ag9=80N~-fP_O$qPJ5@TG0uQ0j zK{rUDLHQExp0wbyXY-9#KRI&9S8qKe*-a`cNk&P+miCV3+59JNJrcYylJ9ytJ`Udr zQKF^i@eJ|AE&u2IA&3B78pfxWpX;4>9;e*DpVsooP4STz$y2BDfz2Tfv})h|_u-G< z{R+@vy0QxG`v`kLVH8v)|AAto4@C=F9MOnVTqL57j8AFGyI-Onm@SBys39t#fkU)5 zIO5U8dOgA3rdIO7ooo+*6cHij-Xg92jZh*v*ue{3_(B=ZkcKt1Aq{)Lf<53#X=FK| zvdS{8lcj6C5o$LbzA%l9#>oy8-F#l!v*6VRwrC{ooSs7x_q^xHrADAyqK@VQ zQ7AUDkwBy;p9Wfyx$L7F4bj9uhKa!y)C89sF=rwRD!!BSr=k{J4D=du8`%h|dGypz zL;wGwA!;VgK1&m7KJ!-@CsJgpwxLZ`@tM>kE{LfP;b~WUm>LI0Ri|-GDjpRyo}faN zZb2=gVnWlN9C5~?YE@@DGzwIYBrjAvh38j!7)Q#K)TD%^4_R5ak#Vlz0yX_dDI;=I zhfH*8BBU%uK$eBF68l=0s;@WEg(m>Ih)V<-C(Bijsvv1G4oY3yVV zp@d<^jD0N0QbH0!wuB^W)`}2GLiX$=``mu_{m1ji{XEY(*SY?>&UL=mKiB!5&-e3r zz28l2SYiZrE&30vE>^s99ktcen}Rig4@`P{FE!CUX-h|>CnVR#JEBbcSIKnnCBeVj zB{~OlY1x==`D3p>?I(X6SEe?a!8^oYk$Ko-NwtQbfBn6hO`r?suC2e_F?UB^O)uO< zzv~MPcrf~h{5Sq)^A>Y};o1-A!|AYQaDv=DiDJsn=#?%pK=r1MibdatPy4lk9a7vq z@c3v9x2QWdfxr)&iw;479acKSP<$?_4|BRNsRkvOJeiX*MKHPaQFGbz{f=%3?{Xyd z5qUak8GhJ;RSj~}_HCWyCksl+Ld+%wG<1T09EjaxZd9NcJpkEVHXwJf zJEiZDgm6qMrcj6%j-x}D#xhnni*S-iGzb@W=$G8jhO0_|N*PauU^f5_9GOEAT8chZ z9~Q7f8qE#?5TiX*i5@Y}DI+WKGA%-2Ea`<*F;0oe+)WhIFBG&Y+jqB)ih+co;kH_% z(~J=+6-ap7$}!Ca3=?4rZ!h}u#OD@;re|Cx0{J@nmJbnurOGN$p*_cWyNNsyaWiWK z%3Sj>bx5M-#Kz>S>BcgVk-#aBN*T+#A3^b%*{M}8ggM9nT8t_2sI>!Ub`jN6!Sk)5dHs63aTmWhy$_x zZz;&wv2dr59xQM*kIz|1UDd2LWTrtMgfdMJ)DYKJb10rtG)dLH7~Q|q|tw* zAWY`v>p93GnoMqBY;sEj7E{4{z4GwwUm*q#N?RiBk02R40!#*6Qh2W_E}NE16R8k} zwT@HXJAW5ZU-2tLOXK*|q^V}E3ol4&)d;Mfk2UAH(*#fyb-`y--iIr0>oapa^Esut zcKpkeml73uUKIQ0&o}Hln5bf2BjZ%P^1NJ`(z;#`y8tlFaeJqoj{cIU#SEYsx%~LK zG+s^-30R%1_xV)-!2y7(v=9o(C@`jrYKb9L4buvzA!RW~wYFqdoDEs+Q1o`b&@fV{ zablfzY;%p5bVa?$vnVbvKzbbWM+~$%-`ly5I6McEZqZl%y}q*RBmKFMk#W-_IWs&n@iD~oTkOHfF@HA ziXV0SZ5Qakkmfo4Y^T%AULEHpucb%+$?4+R47U;>TrNm;izkfg-lZWLv6jE7^r}F= zb-#^-FBjrDua@c12@QNfCK;o@=#b9$B=tzgdaOFxP8BP<|3aq9QKvF%tfeVRV=LvX zviHq(x2E?#>%0=6uuJRL3pcE2Q&#G~R39%SN~1m)+*zrC^kdd*`&=f>G=Q>y*6WAm zUJch%8|7!dp?i^;+AzeK#e)8MzIR#go18{9W}`K;8nqSqZcXF0(u2)r@JPPdyTh52 zjkj~>UF&Z_BZGH7F!$>XH*EkkA#eKcyxizwywpt(VB`yosU<|Ld3W*Udz+&KiKl6O zqVl43NWni@cYAqWtnUtRN8B;jrv9m?{HaddjdjTA>Co;yjZ1D{nxfBr_eWT1&xT*p zc(3n|S{Qz6FtQf$`|EuD_O;2^x*rBe->^j4gGsl?7gCVd%c_GZ-?u-70rc43`X3<^ ze*b=wE|xj{eU;MrMRQNoMr8)i<$pMb`F)x;UoK#?hEfUsX)#M#SC$%}{-pP%I+v}1 zQET5KYIv5w;R;b@C+JzIoknJo)k(c_C+mC;%H)mJeJk)ft)(kjfi}f8Y51jJ_uD0w zDkX9Y4XzrpDlEhcM5#$;b#n-hw~#j)!nV%-g|+w}qaGr4Eo5kooFM<&Swj+ar%2Mn zAWF&naMOXtmw$-{>CpC6MFa*YV+By*7LB3Vxuu&eL?jN0xXdOM0wp9foK8ieC^@~; zGZV~l>v4C7uozjORkFJzo;OXe51~Mz>E;K{Ch`kRG9LS5o>c~00C z;TiY2-FV)CGdGdykY$u9ADUx@;a0)!3);V`IZa5vz`mhYi6x*K)$tcj$D>G0V7>TP?7T(H{)K9uQ zlKLMh=(@4i4g0h>fE-rndfzb6Y9woFzZ9W=V-_G`MGk#cs?JC_j^;d}bR)x(=#GeDkse6d>mxg zEvZ=#kuj3dnCy8||C9qI>?M8kTCA;VeIp;}GkNkmVTk6YAlo-@!>^K0C@I zf+sgxVLiEDYxRA^l=N{5)ND((V!FIg{bKYLXrslg0fob~xvJ~JDkoDqLxvC?f$mT> zl|FyvyW^=UoxCW~iIcluQ8T3>0x6OsW-&q#`FI=y$XgdRRpgi%s3xJSBEe^BOFlRk z!A}o@cy%#ka}2J9Qq~nHlA%YV4GevDXvjh<%#s-5EHrmU3=6QC{KJUnXE-W*@Wx27 zM3cRfIlWV-L}5O03@7vru!w2<8&3xVvQT35F2SK#L6`1(44foE_TqSyS4p$wEf9{f zgT~=q8;Q6bHFp8n;gk&+is{98NGOn5M_YPdzPF2>+mH{TX^0R z&|(O9M3bpxK!YI|m0jt9QyJ?Q%QXn%Djt%8xDBw{saOt}*p41Y6w)1`gZq=eDAOD| zUN;bw7vP0@q@qKqzL8YnnjXP0cb-)~&_mkd6fy0%qU=gcGzV;)K>}R}6d_#^elgGf znnm&V89h+_mbvmjBZ(_Rg=ht7XjG+X$q}Ye*Z+k*zTNZ(dy!ok_Jtkpv|^IAdBcj1 z!8XF`ozP1T$;CE5X#dZ9(Y79q(pr8Q5z{oaTiQ7*hk2PXw^cRl_72RHUAFHk^VMz~ zEbCKGOzO3$R9BCy={~(S8SiuY8!pIsdv1+vcx`Qgni9dTWApiLL}TQlT$=ij=lO0V z@pK8n)jxdMKOOBK2iKt(4o9=F6kj?M)HggH$^5+kg6&qGdRog^CY^uD_sBI{)`+Vv zRfFk$^Madj!^!?RF0*hN_GeAO-zEh9o_Bs9<_90>kC}0!+T!>nJ>Jdy^SAdFT;!Mj z$zwuqe%N_wX1i_a-F(1i#YSRxH_hDMyo7m#*N3$akG`}n1&xId1)T2{elT6uGe7>y z=CNOD{(dbf_IUi=`Coo-t#wcH6H=eHA=SS_Wf7;7nbFMyOs?eb3W4-52e*V?|9!tJ z(l;22isx)AshmekkKm^X& zHHJU#Hmzb5jiM(@M<}Q$>eLV?Y>OKva^EUdklwqj?Pf?_3l_}01D?}}ruF^+!;U?M zfDy4*Nh+M-+`nHqOh`bw#qq!*6@%;k32)>1mtxNd-ICw8+ZT8>*{*-hVw40 zYh8)5o$8IY*J9C;Dq|!<(Jc!#_ngA3r5;|?MFy?<-ag~Znwf4o_0BA~l#d9Qct~it zwc`V%J*_hf?;-1Z1^q!Jb`XAtGHlhKp=;4ANgH(i12*-^d~y^@dBqUoG|imX%fA@R&~X2;;7ltNP6l!n?|K^9>llrc<_`;YQ;PRAjC|WPOP-2CG6Q!&Q#3 z*%TyGEg-Izo{T8=KfdAXW@pYBq55GLA*JGQjzCE!Bz)h0{HrUoriq=HkVEFt7{Wl( zav`L9LFu`<1nXS3o$Gl=xuIRT6s!U;J*zMx@8;;^1B=`=(#1I?qB0k{i_BwG%zv#e z8>N<KnroBfwCuD;&n%*MRdn|%iO1g@6b_0@{l!@5KcONy0Rg0l#Y<)4W|WL~Ju z)=SNNGcNXqJno0IQQRQkcoI&rSuieV$%9ZJ6tqqDA)#3Rl9k5GpR#8$e{atSb4~xH z4$Z?tf&o%YI3_lzpWpZ${y0s_EHjfcO%8r+>@VrU{DYfrdKtQK|1`1iz*Mo zxc`g-FQ!dr5FDVpFi$$R%}LFYM=>skvn(`0Ea@@e6XdEXzTKj=`z`$XTiZC%L*xzA8KWyz}f!u|kqIZdy~MDbbke7W!Q z3!l=enOdqzH(w7}-pD0=E-qK4q(lt0JyVjSW<$K%wJN=QgXv{OgfeS=zcrB{8RMB& z3wrj|xe&^(gkOlvN_cw38hs`O<jdouM}hNfn`;dMEp2Jq^M1ED59w?r6P(7~p|J%)lg zVBePO(JDSV{>BWt58?e$8pma4cEzQ)Vqt+ zt56=)V_oYJ@9GVo*K3~C^Zl+zYBZSk)$j||q4OK26irl3>WohsqJwPfTpBDK-nfp| zG5Wl*AG~k#?v0a=itfo9mlH1MOQl5|_EYhRp3+XfOiE8fP44(u{<{OMx}tWFpzh~@ zZyHw)$bb7}5;Ci55@rIk(;!6UvrVb05qz4ykG=uFW$$W%Y*-NnIh(K6z69f%KUqQV zE;kT%UTwe$d$Y|n-jk)Xn`bk^L1s0_7A#T2H|G|g&o}%5P52vsAA2CFnU25mr z`9SU1uBg|>Le);!+Rozq0eo@y4Pv(}U`@_}Cfgq$A_g2fa{J#GzNzi$>OlTrN#0YG zO=Sp z=x`Al!_2bD5QtZ|Tv9hndi1u03+;}x);5!pIK&wav2NGv0#;d_=GpK;x&MUK=&8R} zV*RzvOsZ>gZzXzyp-IIL?rQcD!aMG3_}$m6KaX#Z*6ahJ+BdM(&q|b&D4D(ZQzD~J zAIVWZ#j%aN4*3nyfot|#_isuG?Kh`7hh| zo*y&yLJ;1kkQ<39HE}~AKkM0-!_nz17?ZGD{ZSAo;|FX8XoSg-a;yPE)g^uVj8M_d zxbYQry_eCFadSIB;IC06{Bf}_(|`iBP19m^*gokS^Q9Y6G&@W$1Iev!Ow^-jAg

_}+Z_&I8e1CV*x*yFS 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%0D`i-f>h6 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