From ad1ccc2b8c05faacc9c51f47bd47917b9c5d66bd Mon Sep 17 00:00:00 2001 From: David Watts Date: Wed, 20 May 2026 13:36:47 -0700 Subject: [PATCH 1/2] Add API benchmark suite --- .env.benchmark.example | 5 + .gitignore | 1 + apps/api/package.json | 2 +- benchmarks/README.md | 38 ++ benchmarks/endpoints.mjs | 186 +++++++ benchmarks/results/full-latest.json | 651 ++++++++++++++++++++++++ benchmarks/results/full-latest.md | 34 ++ benchmarks/results/smoke-latest.json | 651 ++++++++++++++++++++++++ benchmarks/results/smoke-latest.md | 34 ++ benchmarks/run-benchmarks.mjs | 264 ++++++++++ benchmarks/thresholds.json | 14 + benchmarks/verify-endpoint-coverage.mjs | 33 ++ package.json | 3 + 13 files changed, 1915 insertions(+), 1 deletion(-) create mode 100644 .env.benchmark.example create mode 100644 benchmarks/README.md create mode 100644 benchmarks/endpoints.mjs create mode 100644 benchmarks/results/full-latest.json create mode 100644 benchmarks/results/full-latest.md create mode 100644 benchmarks/results/smoke-latest.json create mode 100644 benchmarks/results/smoke-latest.md create mode 100644 benchmarks/run-benchmarks.mjs create mode 100644 benchmarks/thresholds.json create mode 100644 benchmarks/verify-endpoint-coverage.mjs diff --git a/.env.benchmark.example b/.env.benchmark.example new file mode 100644 index 000000000..6377e1660 --- /dev/null +++ b/.env.benchmark.example @@ -0,0 +1,5 @@ +BENCHMARK_TARGET_URL=http://127.0.0.1:4000 +BENCHMARK_ADMIN_TOKEN= +BENCHMARK_CONCURRENCY=2 +BENCHMARK_REQUESTS_PER_ENDPOINT=8 +BENCHMARK_OUTPUT_DIR=benchmarks/results diff --git a/.gitignore b/.gitignore index 1e3ce10dd..e02a5dc48 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ node_modules dist .env .env.* +!.env.benchmark.example coverage *.log diff --git a/apps/api/package.json b/apps/api/package.json index 25fa0e90e..d32d03beb 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "node src/server.js", "start": "node src/server.js", - "test": "node --test src/tests" + "test": "node --test src/tests/*.js" }, "dependencies": { "cors": "^2.8.5", diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 000000000..b5f582152 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,38 @@ +# API Benchmarks + +This benchmark suite covers every currently mounted API endpoint in `apps/api/src/app.js`, plus `/health`. + +## Commands + +```sh +npm run benchmark +npm run benchmark:smoke +npm run benchmark:coverage +``` + +By default the runner starts the Express app in-process on a random loopback port. To run against an already running local or staging server, set `BENCHMARK_TARGET_URL`. + +## Configuration + +Copy `.env.benchmark.example` into your shell environment or CI secret configuration and adjust values as needed: + +- `BENCHMARK_TARGET_URL`: optional target base URL. If unset, the runner starts the local app. +- `BENCHMARK_ADMIN_TOKEN`: optional bearer token for protected admin routes. If unset for local runs, the runner creates a short-lived benchmark token. +- `BENCHMARK_CONCURRENCY`: parallel requests per endpoint. +- `BENCHMARK_REQUESTS_PER_ENDPOINT`: measured requests per endpoint. +- `BENCHMARK_OUTPUT_DIR`: output directory for JSON and Markdown reports. + +Thresholds live in `benchmarks/thresholds.json`. `npm run benchmark:smoke` is the low-concurrency gate command intended for CI, while local full runs provide broader baseline data. + +`npm run benchmark:coverage` checks the benchmark endpoint inventory against the API route mounts in `apps/api/src/app.js`. + +## Output + +Each run writes: + +- `benchmarks/results/full-latest.json` +- `benchmarks/results/full-latest.md` +- `benchmarks/results/smoke-latest.json` +- `benchmarks/results/smoke-latest.md` + +Reports include p50, p95, p99 latency, p99 time to first byte, requests per second, peak requests per second, and error rate for each endpoint. diff --git a/benchmarks/endpoints.mjs b/benchmarks/endpoints.mjs new file mode 100644 index 000000000..9f0a8ae69 --- /dev/null +++ b/benchmarks/endpoints.mjs @@ -0,0 +1,186 @@ +export const benchmarkEndpoints = [ + { + name: "health", + method: "GET", + path: "/health", + expectedStatus: 200 + }, + { + name: "auth-register", + method: "POST", + path: "/api/auth/register", + expectedStatus: 201, + json: ({ iteration }) => ({ + email: `benchmark-user-${Date.now()}-${iteration}@example.com`, + password: "benchmark-pass-123", + role: "freelancer" + }) + }, + { + name: "auth-login", + method: "POST", + path: "/api/auth/login", + expectedStatus: 200, + json: { + email: "benchmark-user@example.com", + password: "benchmark-pass-123" + } + }, + { + name: "auth-oauth-callback", + method: "GET", + path: "/api/auth/oauth/benchmark/callback", + expectedStatus: 200 + }, + { + name: "auth-refresh", + method: "POST", + path: "/api/auth/refresh", + expectedStatus: 200 + }, + { + name: "users-list", + method: "GET", + path: "/api/users", + expectedStatus: 200 + }, + { + name: "users-create", + method: "POST", + path: "/api/users", + expectedStatus: 201, + json: ({ iteration }) => ({ + email: `benchmark-client-${iteration}@example.com`, + name: "Benchmark Client", + role: "client" + }) + }, + { + name: "jobs-list", + method: "GET", + path: "/api/jobs", + expectedStatus: 200 + }, + { + name: "jobs-create", + method: "POST", + path: "/api/jobs", + expectedStatus: 201, + json: { + title: "Benchmark API implementation", + description: "Create a benchmark suite with realistic local payloads.", + budgetMin: 500, + budgetMax: 1500, + categoryId: "software-development", + skills: ["node", "express", "benchmarking"] + } + }, + { + name: "proposals-list", + method: "GET", + path: "/api/proposals", + expectedStatus: 200 + }, + { + name: "proposals-create", + method: "POST", + path: "/api/proposals", + expectedStatus: 201, + json: { + jobId: "job_benchmark", + freelancerId: "usr_benchmark", + coverLetter: "I can deliver a reproducible API benchmark suite.", + price: 950, + timelineDays: 5 + } + }, + { + name: "payments-create", + method: "POST", + path: "/api/payments", + expectedStatus: 201, + json: { + amount: 95000, + currency: "usd", + jobId: "job_benchmark" + } + }, + { + name: "reviews-list", + method: "GET", + path: "/api/reviews", + expectedStatus: 200 + }, + { + name: "reviews-create", + method: "POST", + path: "/api/reviews", + expectedStatus: 201, + json: { + jobId: "job_benchmark", + reviewerId: "usr_client", + revieweeId: "usr_freelancer", + rating: 5, + comment: "Fast delivery and clear reporting." + } + }, + { + name: "messages-list", + method: "GET", + path: "/api/messages", + expectedStatus: 200 + }, + { + name: "messages-create", + method: "POST", + path: "/api/messages", + expectedStatus: 201, + json: { + fromUserId: "usr_client", + toUserId: "usr_freelancer", + body: "Can you share the latest benchmark report?" + } + }, + { + name: "notifications-list", + method: "GET", + path: "/api/notifications", + expectedStatus: 200 + }, + { + name: "notifications-create", + method: "POST", + path: "/api/notifications", + expectedStatus: 201, + json: { + userId: "usr_client", + type: "proposal_received", + message: "A freelancer submitted a proposal." + } + }, + { + name: "uploads-create", + method: "POST", + path: "/api/uploads", + expectedStatus: 201, + multipart: { + fieldName: "file", + filename: "benchmark-profile.txt", + type: "text/plain", + body: "Synthetic benchmark upload payload for API route coverage." + } + }, + { + name: "search", + method: "GET", + path: "/api/search?q=benchmark", + expectedStatus: 200 + }, + { + name: "admin-metrics", + method: "GET", + path: "/api/admin/metrics", + expectedStatus: 200, + auth: true + } +]; diff --git a/benchmarks/results/full-latest.json b/benchmarks/results/full-latest.json new file mode 100644 index 000000000..5eed1522f --- /dev/null +++ b/benchmarks/results/full-latest.json @@ -0,0 +1,651 @@ +{ + "mode": "full", + "target": "http://127.0.0.1:51582", + "generatedAt": "2026-05-20T20:29:40.993Z", + "configuration": { + "concurrency": 2, + "requestsPerEndpoint": 8, + "thresholdsFile": "benchmarks/thresholds.json" + }, + "summary": { + "endpointCount": 21, + "totalRequests": 168, + "totalErrors": 0, + "errorRate": 0, + "maxP99LatencyMs": 13.01, + "maxP99TtfbMs": 12.74, + "passed": true + }, + "results": [ + { + "name": "health", + "method": "GET", + "path": "/health", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 390.66, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 4.74, + "p50": 1.87, + "p95": 13.01, + "p99": 13.01 + }, + "ttfbMs": { + "mean": 4.58, + "p50": 1.72, + "p95": 12.74, + "p99": 12.74 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-register", + "method": "POST", + "path": "/api/auth/register", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 574.19, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 3.34, + "p50": 1.37, + "p95": 8.73, + "p99": 8.73 + }, + "ttfbMs": { + "mean": 3.29, + "p50": 1.34, + "p95": 8.55, + "p99": 8.55 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-login", + "method": "POST", + "path": "/api/auth/login", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1491.7, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 1.3, + "p50": 1.32, + "p95": 1.64, + "p99": 1.64 + }, + "ttfbMs": { + "mean": 1.26, + "p50": 1.29, + "p95": 1.58, + "p99": 1.58 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-oauth-callback", + "method": "GET", + "path": "/api/auth/oauth/benchmark/callback", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3102.73, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.61, + "p50": 0.53, + "p95": 0.9, + "p99": 0.9 + }, + "ttfbMs": { + "mean": 0.58, + "p50": 0.5, + "p95": 0.86, + "p99": 0.86 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-refresh", + "method": "POST", + "path": "/api/auth/refresh", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3310.46, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.59, + "p50": 0.55, + "p95": 0.75, + "p99": 0.75 + }, + "ttfbMs": { + "mean": 0.56, + "p50": 0.53, + "p95": 0.72, + "p99": 0.72 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "users-list", + "method": "GET", + "path": "/api/users", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3269.87, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.58, + "p50": 0.47, + "p95": 0.91, + "p99": 0.91 + }, + "ttfbMs": { + "mean": 0.54, + "p50": 0.44, + "p95": 0.89, + "p99": 0.89 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "users-create", + "method": "POST", + "path": "/api/users", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 2616.98, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.73, + "p50": 0.62, + "p95": 1.14, + "p99": 1.14 + }, + "ttfbMs": { + "mean": 0.7, + "p50": 0.6, + "p95": 1.12, + "p99": 1.12 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "jobs-list", + "method": "GET", + "path": "/api/jobs", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3787.51, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.51, + "p50": 0.5, + "p95": 0.57, + "p99": 0.57 + }, + "ttfbMs": { + "mean": 0.48, + "p50": 0.47, + "p95": 0.55, + "p99": 0.55 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "jobs-create", + "method": "POST", + "path": "/api/jobs", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 2067.54, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.95, + "p50": 0.78, + "p95": 1.57, + "p99": 1.57 + }, + "ttfbMs": { + "mean": 0.92, + "p50": 0.75, + "p95": 1.54, + "p99": 1.54 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "proposals-list", + "method": "GET", + "path": "/api/proposals", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 4142.3, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.47, + "p50": 0.46, + "p95": 0.55, + "p99": 0.55 + }, + "ttfbMs": { + "mean": 0.44, + "p50": 0.43, + "p95": 0.53, + "p99": 0.53 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "proposals-create", + "method": "POST", + "path": "/api/proposals", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3359.05, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.58, + "p50": 0.57, + "p95": 0.7, + "p99": 0.7 + }, + "ttfbMs": { + "mean": 0.55, + "p50": 0.54, + "p95": 0.67, + "p99": 0.67 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "payments-create", + "method": "POST", + "path": "/api/payments", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3376.24, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.58, + "p50": 0.57, + "p95": 0.67, + "p99": 0.67 + }, + "ttfbMs": { + "mean": 0.55, + "p50": 0.55, + "p95": 0.64, + "p99": 0.64 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "reviews-list", + "method": "GET", + "path": "/api/reviews", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3575.88, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.53, + "p50": 0.46, + "p95": 0.75, + "p99": 0.75 + }, + "ttfbMs": { + "mean": 0.5, + "p50": 0.44, + "p95": 0.72, + "p99": 0.72 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "reviews-create", + "method": "POST", + "path": "/api/reviews", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 2460.75, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.79, + "p50": 0.59, + "p95": 1.44, + "p99": 1.44 + }, + "ttfbMs": { + "mean": 0.76, + "p50": 0.57, + "p95": 1.35, + "p99": 1.35 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "messages-list", + "method": "GET", + "path": "/api/messages", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 4278.26, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.45, + "p50": 0.45, + "p95": 0.54, + "p99": 0.54 + }, + "ttfbMs": { + "mean": 0.43, + "p50": 0.42, + "p95": 0.51, + "p99": 0.51 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "messages-create", + "method": "POST", + "path": "/api/messages", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1984.31, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.99, + "p50": 0.77, + "p95": 1.73, + "p99": 1.73 + }, + "ttfbMs": { + "mean": 0.96, + "p50": 0.74, + "p95": 1.7, + "p99": 1.7 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "notifications-list", + "method": "GET", + "path": "/api/notifications", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 4168.84, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.46, + "p50": 0.44, + "p95": 0.57, + "p99": 0.57 + }, + "ttfbMs": { + "mean": 0.44, + "p50": 0.41, + "p95": 0.55, + "p99": 0.55 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "notifications-create", + "method": "POST", + "path": "/api/notifications", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3563.67, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.54, + "p50": 0.53, + "p95": 0.66, + "p99": 0.66 + }, + "ttfbMs": { + "mean": 0.52, + "p50": 0.51, + "p95": 0.64, + "p99": 0.64 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "uploads-create", + "method": "POST", + "path": "/api/uploads", + "expectedStatus": 201, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 939.32, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 2.05, + "p50": 1.17, + "p95": 4.86, + "p99": 4.86 + }, + "ttfbMs": { + "mean": 2.02, + "p50": 1.15, + "p95": 4.83, + "p99": 4.83 + }, + "threshold": { + "p99LatencyMs": 1500, + "p99TtfbMs": 1500, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "search", + "method": "GET", + "path": "/api/search?q=benchmark", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3003.28, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.65, + "p50": 0.53, + "p95": 1.05, + "p99": 1.05 + }, + "ttfbMs": { + "mean": 0.61, + "p50": 0.5, + "p95": 1.03, + "p99": 1.03 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "admin-metrics", + "method": "GET", + "path": "/api/admin/metrics", + "expectedStatus": 200, + "requests": 8, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 3019.67, + "peakRequestsPerSecond": 2000, + "latencyMs": { + "mean": 0.64, + "p50": 0.52, + "p95": 1.02, + "p99": 1.02 + }, + "ttfbMs": { + "mean": 0.62, + "p50": 0.5, + "p95": 1, + "p99": 1 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + } + ] +} diff --git a/benchmarks/results/full-latest.md b/benchmarks/results/full-latest.md new file mode 100644 index 000000000..5e61b0e53 --- /dev/null +++ b/benchmarks/results/full-latest.md @@ -0,0 +1,34 @@ +# API Benchmark Report + +- Mode: full +- Target: http://127.0.0.1:51582 +- Generated: 2026-05-20T20:29:40.993Z +- Endpoints: 21 +- Requests: 168 +- Error rate: 0.00% +- Max p99 latency: 13.01 ms +- Max p99 TTFB: 12.74 ms + +| Gate | Method | Path | Requests | Error rate | p50 ms | p95 ms | p99 ms | p99 TTFB ms | RPS | +| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| pass | GET | /health | 8 | 0.00% | 1.87 | 13.01 | 13.01 | 12.74 | 390.66 | +| pass | POST | /api/auth/register | 8 | 0.00% | 1.37 | 8.73 | 8.73 | 8.55 | 574.19 | +| pass | POST | /api/auth/login | 8 | 0.00% | 1.32 | 1.64 | 1.64 | 1.58 | 1491.7 | +| pass | GET | /api/auth/oauth/benchmark/callback | 8 | 0.00% | 0.53 | 0.9 | 0.9 | 0.86 | 3102.73 | +| pass | POST | /api/auth/refresh | 8 | 0.00% | 0.55 | 0.75 | 0.75 | 0.72 | 3310.46 | +| pass | GET | /api/users | 8 | 0.00% | 0.47 | 0.91 | 0.91 | 0.89 | 3269.87 | +| pass | POST | /api/users | 8 | 0.00% | 0.62 | 1.14 | 1.14 | 1.12 | 2616.98 | +| pass | GET | /api/jobs | 8 | 0.00% | 0.5 | 0.57 | 0.57 | 0.55 | 3787.51 | +| pass | POST | /api/jobs | 8 | 0.00% | 0.78 | 1.57 | 1.57 | 1.54 | 2067.54 | +| pass | GET | /api/proposals | 8 | 0.00% | 0.46 | 0.55 | 0.55 | 0.53 | 4142.3 | +| pass | POST | /api/proposals | 8 | 0.00% | 0.57 | 0.7 | 0.7 | 0.67 | 3359.05 | +| pass | POST | /api/payments | 8 | 0.00% | 0.57 | 0.67 | 0.67 | 0.64 | 3376.24 | +| pass | GET | /api/reviews | 8 | 0.00% | 0.46 | 0.75 | 0.75 | 0.72 | 3575.88 | +| pass | POST | /api/reviews | 8 | 0.00% | 0.59 | 1.44 | 1.44 | 1.35 | 2460.75 | +| pass | GET | /api/messages | 8 | 0.00% | 0.45 | 0.54 | 0.54 | 0.51 | 4278.26 | +| pass | POST | /api/messages | 8 | 0.00% | 0.77 | 1.73 | 1.73 | 1.7 | 1984.31 | +| pass | GET | /api/notifications | 8 | 0.00% | 0.44 | 0.57 | 0.57 | 0.55 | 4168.84 | +| pass | POST | /api/notifications | 8 | 0.00% | 0.53 | 0.66 | 0.66 | 0.64 | 3563.67 | +| pass | POST | /api/uploads | 8 | 0.00% | 1.17 | 4.86 | 4.86 | 4.83 | 939.32 | +| pass | GET | /api/search?q=benchmark | 8 | 0.00% | 0.53 | 1.05 | 1.05 | 1.03 | 3003.28 | +| pass | GET | /api/admin/metrics | 8 | 0.00% | 0.52 | 1.02 | 1.02 | 1 | 3019.67 | diff --git a/benchmarks/results/smoke-latest.json b/benchmarks/results/smoke-latest.json new file mode 100644 index 000000000..f1b88bd52 --- /dev/null +++ b/benchmarks/results/smoke-latest.json @@ -0,0 +1,651 @@ +{ + "mode": "smoke", + "target": "http://127.0.0.1:51574", + "generatedAt": "2026-05-20T20:29:37.611Z", + "configuration": { + "concurrency": 1, + "requestsPerEndpoint": 1, + "thresholdsFile": "benchmarks/thresholds.json" + }, + "summary": { + "endpointCount": 21, + "totalRequests": 21, + "totalErrors": 0, + "errorRate": 0, + "maxP99LatencyMs": 16.6, + "maxP99TtfbMs": 15.2, + "passed": true + }, + "results": [ + { + "name": "health", + "method": "GET", + "path": "/health", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 60.01, + "peakRequestsPerSecond": 60.24, + "latencyMs": { + "mean": 16.6, + "p50": 16.6, + "p95": 16.6, + "p99": 16.6 + }, + "ttfbMs": { + "mean": 15.2, + "p50": 15.2, + "p95": 15.2, + "p99": 15.2 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-register", + "method": "POST", + "path": "/api/auth/register", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 128.67, + "peakRequestsPerSecond": 129.03, + "latencyMs": { + "mean": 7.75, + "p50": 7.75, + "p95": 7.75, + "p99": 7.75 + }, + "ttfbMs": { + "mean": 7.56, + "p50": 7.56, + "p95": 7.56, + "p99": 7.56 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-login", + "method": "POST", + "path": "/api/auth/login", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 355.91, + "peakRequestsPerSecond": 357.14, + "latencyMs": { + "mean": 2.8, + "p50": 2.8, + "p95": 2.8, + "p99": 2.8 + }, + "ttfbMs": { + "mean": 2.67, + "p50": 2.67, + "p95": 2.67, + "p99": 2.67 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-oauth-callback", + "method": "GET", + "path": "/api/auth/oauth/benchmark/callback", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 820.32, + "peakRequestsPerSecond": 826.45, + "latencyMs": { + "mean": 1.21, + "p50": 1.21, + "p95": 1.21, + "p99": 1.21 + }, + "ttfbMs": { + "mean": 1.14, + "p50": 1.14, + "p95": 1.14, + "p99": 1.14 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "auth-refresh", + "method": "POST", + "path": "/api/auth/refresh", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 465.13, + "peakRequestsPerSecond": 467.29, + "latencyMs": { + "mean": 2.14, + "p50": 2.14, + "p95": 2.14, + "p99": 2.14 + }, + "ttfbMs": { + "mean": 1.77, + "p50": 1.77, + "p95": 1.77, + "p99": 1.77 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "users-list", + "method": "GET", + "path": "/api/users", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 670.37, + "peakRequestsPerSecond": 675.68, + "latencyMs": { + "mean": 1.48, + "p50": 1.48, + "p95": 1.48, + "p99": 1.48 + }, + "ttfbMs": { + "mean": 1.07, + "p50": 1.07, + "p95": 1.07, + "p99": 1.07 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "users-create", + "method": "POST", + "path": "/api/users", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 381.49, + "peakRequestsPerSecond": 384.62, + "latencyMs": { + "mean": 2.6, + "p50": 2.6, + "p95": 2.6, + "p99": 2.6 + }, + "ttfbMs": { + "mean": 2.04, + "p50": 2.04, + "p95": 2.04, + "p99": 2.04 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "jobs-list", + "method": "GET", + "path": "/api/jobs", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 915.61, + "peakRequestsPerSecond": 925.93, + "latencyMs": { + "mean": 1.08, + "p50": 1.08, + "p95": 1.08, + "p99": 1.08 + }, + "ttfbMs": { + "mean": 0.98, + "p50": 0.98, + "p95": 0.98, + "p99": 0.98 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "jobs-create", + "method": "POST", + "path": "/api/jobs", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 262.83, + "peakRequestsPerSecond": 263.16, + "latencyMs": { + "mean": 3.8, + "p50": 3.8, + "p95": 3.8, + "p99": 3.8 + }, + "ttfbMs": { + "mean": 3.6, + "p50": 3.6, + "p95": 3.6, + "p99": 3.6 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "proposals-list", + "method": "GET", + "path": "/api/proposals", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 443.45, + "peakRequestsPerSecond": 446.43, + "latencyMs": { + "mean": 2.24, + "p50": 2.24, + "p95": 2.24, + "p99": 2.24 + }, + "ttfbMs": { + "mean": 2.17, + "p50": 2.17, + "p95": 2.17, + "p99": 2.17 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "proposals-create", + "method": "POST", + "path": "/api/proposals", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 782.98, + "peakRequestsPerSecond": 787.4, + "latencyMs": { + "mean": 1.27, + "p50": 1.27, + "p95": 1.27, + "p99": 1.27 + }, + "ttfbMs": { + "mean": 1.22, + "p50": 1.22, + "p95": 1.22, + "p99": 1.22 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "payments-create", + "method": "POST", + "path": "/api/payments", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.74, + "p50": 0.74, + "p95": 0.74, + "p99": 0.74 + }, + "ttfbMs": { + "mean": 0.69, + "p50": 0.69, + "p95": 0.69, + "p99": 0.69 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "reviews-list", + "method": "GET", + "path": "/api/reviews", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.49, + "p50": 0.49, + "p95": 0.49, + "p99": 0.49 + }, + "ttfbMs": { + "mean": 0.46, + "p50": 0.46, + "p95": 0.46, + "p99": 0.46 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "reviews-create", + "method": "POST", + "path": "/api/reviews", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.62, + "p50": 0.62, + "p95": 0.62, + "p99": 0.62 + }, + "ttfbMs": { + "mean": 0.59, + "p50": 0.59, + "p95": 0.59, + "p99": 0.59 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "messages-list", + "method": "GET", + "path": "/api/messages", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.32, + "p50": 0.32, + "p95": 0.32, + "p99": 0.32 + }, + "ttfbMs": { + "mean": 0.29, + "p50": 0.29, + "p95": 0.29, + "p99": 0.29 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "messages-create", + "method": "POST", + "path": "/api/messages", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.71, + "p50": 0.71, + "p95": 0.71, + "p99": 0.71 + }, + "ttfbMs": { + "mean": 0.67, + "p50": 0.67, + "p95": 0.67, + "p99": 0.67 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "notifications-list", + "method": "GET", + "path": "/api/notifications", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.41, + "p50": 0.41, + "p95": 0.41, + "p99": 0.41 + }, + "ttfbMs": { + "mean": 0.38, + "p50": 0.38, + "p95": 0.38, + "p99": 0.38 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "notifications-create", + "method": "POST", + "path": "/api/notifications", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 979.19, + "peakRequestsPerSecond": 980.39, + "latencyMs": { + "mean": 1.02, + "p50": 1.02, + "p95": 1.02, + "p99": 1.02 + }, + "ttfbMs": { + "mean": 0.98, + "p50": 0.98, + "p95": 0.98, + "p99": 0.98 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "uploads-create", + "method": "POST", + "path": "/api/uploads", + "expectedStatus": 201, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 188.74, + "peakRequestsPerSecond": 189.04, + "latencyMs": { + "mean": 5.29, + "p50": 5.29, + "p95": 5.29, + "p99": 5.29 + }, + "ttfbMs": { + "mean": 5.24, + "p50": 5.24, + "p95": 5.24, + "p99": 5.24 + }, + "threshold": { + "p99LatencyMs": 1500, + "p99TtfbMs": 1500, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "search", + "method": "GET", + "path": "/api/search?q=benchmark", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.87, + "p50": 0.87, + "p95": 0.87, + "p99": 0.87 + }, + "ttfbMs": { + "mean": 0.83, + "p50": 0.83, + "p95": 0.83, + "p99": 0.83 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + }, + { + "name": "admin-metrics", + "method": "GET", + "path": "/api/admin/metrics", + "expectedStatus": 200, + "requests": 1, + "errors": 0, + "errorRate": 0, + "requestsPerSecond": 1000, + "peakRequestsPerSecond": 1000, + "latencyMs": { + "mean": 0.87, + "p50": 0.87, + "p95": 0.87, + "p99": 0.87 + }, + "ttfbMs": { + "mean": 0.84, + "p50": 0.84, + "p95": 0.84, + "p99": 0.84 + }, + "threshold": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "passedThresholds": true, + "failures": [] + } + ] +} diff --git a/benchmarks/results/smoke-latest.md b/benchmarks/results/smoke-latest.md new file mode 100644 index 000000000..a6d891437 --- /dev/null +++ b/benchmarks/results/smoke-latest.md @@ -0,0 +1,34 @@ +# API Benchmark Report + +- Mode: smoke +- Target: http://127.0.0.1:51574 +- Generated: 2026-05-20T20:29:37.611Z +- Endpoints: 21 +- Requests: 21 +- Error rate: 0.00% +- Max p99 latency: 16.6 ms +- Max p99 TTFB: 15.2 ms + +| Gate | Method | Path | Requests | Error rate | p50 ms | p95 ms | p99 ms | p99 TTFB ms | RPS | +| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| pass | GET | /health | 1 | 0.00% | 16.6 | 16.6 | 16.6 | 15.2 | 60.01 | +| pass | POST | /api/auth/register | 1 | 0.00% | 7.75 | 7.75 | 7.75 | 7.56 | 128.67 | +| pass | POST | /api/auth/login | 1 | 0.00% | 2.8 | 2.8 | 2.8 | 2.67 | 355.91 | +| pass | GET | /api/auth/oauth/benchmark/callback | 1 | 0.00% | 1.21 | 1.21 | 1.21 | 1.14 | 820.32 | +| pass | POST | /api/auth/refresh | 1 | 0.00% | 2.14 | 2.14 | 2.14 | 1.77 | 465.13 | +| pass | GET | /api/users | 1 | 0.00% | 1.48 | 1.48 | 1.48 | 1.07 | 670.37 | +| pass | POST | /api/users | 1 | 0.00% | 2.6 | 2.6 | 2.6 | 2.04 | 381.49 | +| pass | GET | /api/jobs | 1 | 0.00% | 1.08 | 1.08 | 1.08 | 0.98 | 915.61 | +| pass | POST | /api/jobs | 1 | 0.00% | 3.8 | 3.8 | 3.8 | 3.6 | 262.83 | +| pass | GET | /api/proposals | 1 | 0.00% | 2.24 | 2.24 | 2.24 | 2.17 | 443.45 | +| pass | POST | /api/proposals | 1 | 0.00% | 1.27 | 1.27 | 1.27 | 1.22 | 782.98 | +| pass | POST | /api/payments | 1 | 0.00% | 0.74 | 0.74 | 0.74 | 0.69 | 1000 | +| pass | GET | /api/reviews | 1 | 0.00% | 0.49 | 0.49 | 0.49 | 0.46 | 1000 | +| pass | POST | /api/reviews | 1 | 0.00% | 0.62 | 0.62 | 0.62 | 0.59 | 1000 | +| pass | GET | /api/messages | 1 | 0.00% | 0.32 | 0.32 | 0.32 | 0.29 | 1000 | +| pass | POST | /api/messages | 1 | 0.00% | 0.71 | 0.71 | 0.71 | 0.67 | 1000 | +| pass | GET | /api/notifications | 1 | 0.00% | 0.41 | 0.41 | 0.41 | 0.38 | 1000 | +| pass | POST | /api/notifications | 1 | 0.00% | 1.02 | 1.02 | 1.02 | 0.98 | 979.19 | +| pass | POST | /api/uploads | 1 | 0.00% | 5.29 | 5.29 | 5.29 | 5.24 | 188.74 | +| pass | GET | /api/search?q=benchmark | 1 | 0.00% | 0.87 | 0.87 | 0.87 | 0.83 | 1000 | +| pass | GET | /api/admin/metrics | 1 | 0.00% | 0.87 | 0.87 | 0.87 | 0.84 | 1000 | diff --git a/benchmarks/run-benchmarks.mjs b/benchmarks/run-benchmarks.mjs new file mode 100644 index 000000000..f3d5a428a --- /dev/null +++ b/benchmarks/run-benchmarks.mjs @@ -0,0 +1,264 @@ +import { mkdir, readFile, writeFile } from "node:fs/promises"; +import { createServer } from "node:http"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { benchmarkEndpoints } from "./endpoints.mjs"; + +const rootDir = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const args = new Set(process.argv.slice(2)); +const isSmoke = args.has("--smoke"); +const outputDir = resolve(rootDir, process.env.BENCHMARK_OUTPUT_DIR ?? "benchmarks/results"); +const concurrency = Number(process.env.BENCHMARK_CONCURRENCY ?? (isSmoke ? 1 : 2)); +const requestsPerEndpoint = Number(process.env.BENCHMARK_REQUESTS_PER_ENDPOINT ?? (isSmoke ? 1 : 8)); + +const thresholds = JSON.parse( + await readFile(resolve(rootDir, "benchmarks/thresholds.json"), "utf8") +); + +function percentile(values, rank) { + if (values.length === 0) return 0; + const sorted = [...values].sort((a, b) => a - b); + const index = Math.ceil((rank / 100) * sorted.length) - 1; + return Number(sorted[Math.max(0, Math.min(index, sorted.length - 1))].toFixed(2)); +} + +function mean(values) { + if (values.length === 0) return 0; + return Number((values.reduce((sum, value) => sum + value, 0) / values.length).toFixed(2)); +} + +function routeKey(endpoint) { + return `${endpoint.method} ${endpoint.path.split("?")[0]}`; +} + +function resolveThreshold(endpoint) { + return { + ...thresholds.defaults, + ...(thresholds.routes?.[routeKey(endpoint)] ?? {}) + }; +} + +async function createLocalTarget() { + if (process.env.BENCHMARK_TARGET_URL) { + return { + baseUrl: process.env.BENCHMARK_TARGET_URL.replace(/\/$/, ""), + close: async () => {} + }; + } + + process.env.NODE_ENV ??= "benchmark"; + const [{ createApp }, { signAccessToken }] = await Promise.all([ + import("../apps/api/src/app.js"), + import("../apps/api/src/utils/jwt.js") + ]); + + if (!process.env.BENCHMARK_ADMIN_TOKEN) { + process.env.BENCHMARK_ADMIN_TOKEN = signAccessToken({ + sub: "benchmark-admin", + role: "admin" + }); + } + + const server = createServer(createApp()); + await new Promise((resolveListen) => server.listen(0, "127.0.0.1", resolveListen)); + const { port } = server.address(); + + return { + baseUrl: `http://127.0.0.1:${port}`, + close: () => new Promise((resolveClose, rejectClose) => { + server.close((error) => error ? rejectClose(error) : resolveClose()); + }) + }; +} + +function buildRequest(endpoint, iteration) { + const headers = {}; + const request = { + method: endpoint.method, + headers + }; + + if (endpoint.auth) { + headers.authorization = `Bearer ${process.env.BENCHMARK_ADMIN_TOKEN ?? ""}`; + } + + if (endpoint.json) { + headers["content-type"] = "application/json"; + const payload = typeof endpoint.json === "function" + ? endpoint.json({ iteration }) + : endpoint.json; + request.body = JSON.stringify(payload); + } + + if (endpoint.multipart) { + const form = new FormData(); + form.append( + endpoint.multipart.fieldName, + new Blob([endpoint.multipart.body], { type: endpoint.multipart.type }), + endpoint.multipart.filename + ); + request.body = form; + } + + return request; +} + +async function runOne(baseUrl, endpoint, iteration) { + const startedAt = performance.now(); + let headersAt = startedAt; + let status = 0; + let ok = false; + let error = null; + + try { + const response = await fetch(`${baseUrl}${endpoint.path}`, buildRequest(endpoint, iteration)); + headersAt = performance.now(); + status = response.status; + await response.arrayBuffer(); + ok = status === endpoint.expectedStatus; + } catch (requestError) { + error = requestError instanceof Error ? requestError.message : String(requestError); + } + + const endedAt = performance.now(); + return { + ok, + status, + error, + latencyMs: Number((endedAt - startedAt).toFixed(2)), + ttfbMs: Number((headersAt - startedAt).toFixed(2)) + }; +} + +async function runEndpoint(baseUrl, endpoint) { + const measurements = []; + let nextIteration = 0; + const startedAt = performance.now(); + + async function worker() { + while (nextIteration < requestsPerEndpoint) { + const iteration = nextIteration; + nextIteration += 1; + measurements.push(await runOne(baseUrl, endpoint, iteration)); + } + } + + await Promise.all(Array.from({ length: Math.min(concurrency, requestsPerEndpoint) }, worker)); + + const durationSeconds = Math.max((performance.now() - startedAt) / 1000, 0.001); + const latencies = measurements.map((sample) => sample.latencyMs); + const ttfbs = measurements.map((sample) => sample.ttfbMs); + const errors = measurements.filter((sample) => !sample.ok); + const threshold = resolveThreshold(endpoint); + + const result = { + name: endpoint.name, + method: endpoint.method, + path: endpoint.path, + expectedStatus: endpoint.expectedStatus, + requests: measurements.length, + errors: errors.length, + errorRate: Number((errors.length / measurements.length).toFixed(4)), + requestsPerSecond: Number((measurements.length / durationSeconds).toFixed(2)), + peakRequestsPerSecond: Number((concurrency / Math.max(Math.min(...latencies) / 1000, 0.001)).toFixed(2)), + latencyMs: { + mean: mean(latencies), + p50: percentile(latencies, 50), + p95: percentile(latencies, 95), + p99: percentile(latencies, 99) + }, + ttfbMs: { + mean: mean(ttfbs), + p50: percentile(ttfbs, 50), + p95: percentile(ttfbs, 95), + p99: percentile(ttfbs, 99) + }, + threshold, + passedThresholds: + errors.length / measurements.length <= threshold.errorRate && + percentile(latencies, 99) <= threshold.p99LatencyMs && + percentile(ttfbs, 99) <= threshold.p99TtfbMs, + failures: errors.slice(0, 3) + }; + + return result; +} + +function markdownReport(report) { + const rows = report.results.map((result) => [ + result.passedThresholds ? "pass" : "fail", + result.method, + result.path, + result.requests, + `${(result.errorRate * 100).toFixed(2)}%`, + result.latencyMs.p50, + result.latencyMs.p95, + result.latencyMs.p99, + result.ttfbMs.p99, + result.requestsPerSecond + ]); + + return [ + "# API Benchmark Report", + "", + `- Mode: ${report.mode}`, + `- Target: ${report.target}`, + `- Generated: ${report.generatedAt}`, + `- Endpoints: ${report.summary.endpointCount}`, + `- Requests: ${report.summary.totalRequests}`, + `- Error rate: ${(report.summary.errorRate * 100).toFixed(2)}%`, + `- Max p99 latency: ${report.summary.maxP99LatencyMs} ms`, + `- Max p99 TTFB: ${report.summary.maxP99TtfbMs} ms`, + "", + "| Gate | Method | Path | Requests | Error rate | p50 ms | p95 ms | p99 ms | p99 TTFB ms | RPS |", + "| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |", + ...rows.map((row) => `| ${row.join(" | ")} |`), + "" + ].join("\n"); +} + +const target = await createLocalTarget(); + +try { + const results = []; + for (const endpoint of benchmarkEndpoints) { + results.push(await runEndpoint(target.baseUrl, endpoint)); + } + + const totalRequests = results.reduce((sum, result) => sum + result.requests, 0); + const totalErrors = results.reduce((sum, result) => sum + result.errors, 0); + const report = { + mode: isSmoke ? "smoke" : "full", + target: target.baseUrl, + generatedAt: new Date().toISOString(), + configuration: { + concurrency, + requestsPerEndpoint, + thresholdsFile: "benchmarks/thresholds.json" + }, + summary: { + endpointCount: results.length, + totalRequests, + totalErrors, + errorRate: Number((totalErrors / totalRequests).toFixed(4)), + maxP99LatencyMs: Math.max(...results.map((result) => result.latencyMs.p99)), + maxP99TtfbMs: Math.max(...results.map((result) => result.ttfbMs.p99)), + passed: results.every((result) => result.passedThresholds) + }, + results + }; + + await mkdir(outputDir, { recursive: true }); + const suffix = isSmoke ? "smoke" : "full"; + const jsonPath = resolve(outputDir, `${suffix}-latest.json`); + const markdownPath = resolve(outputDir, `${suffix}-latest.md`); + await writeFile(jsonPath, `${JSON.stringify(report, null, 2)}\n`); + await writeFile(markdownPath, markdownReport(report)); + + console.log(markdownReport(report)); + if (!report.summary.passed) { + process.exitCode = 1; + } +} finally { + await target.close(); +} diff --git a/benchmarks/thresholds.json b/benchmarks/thresholds.json new file mode 100644 index 000000000..846d68f4c --- /dev/null +++ b/benchmarks/thresholds.json @@ -0,0 +1,14 @@ +{ + "defaults": { + "p99LatencyMs": 1000, + "p99TtfbMs": 1000, + "errorRate": 0 + }, + "routes": { + "POST /api/uploads": { + "p99LatencyMs": 1500, + "p99TtfbMs": 1500, + "errorRate": 0 + } + } +} diff --git a/benchmarks/verify-endpoint-coverage.mjs b/benchmarks/verify-endpoint-coverage.mjs new file mode 100644 index 000000000..ecafa457e --- /dev/null +++ b/benchmarks/verify-endpoint-coverage.mjs @@ -0,0 +1,33 @@ +import assert from "node:assert/strict"; +import { readFile } from "node:fs/promises"; +import { resolve } from "node:path"; +import { benchmarkEndpoints } from "./endpoints.mjs"; + +const rootDir = resolve(import.meta.dirname, ".."); +const appSource = await readFile(resolve(rootDir, "apps/api/src/app.js"), "utf8"); + +const mountedApiPrefixes = [...appSource.matchAll(/app\.use\("([^"]+)"/g)] + .map((match) => match[1]) + .filter((path) => path.startsWith("/api/")); + +const endpointPaths = benchmarkEndpoints.map((endpoint) => endpoint.path.split("?")[0]); + +for (const prefix of mountedApiPrefixes) { + assert( + endpointPaths.some((path) => path === prefix || path.startsWith(`${prefix}/`)), + `Missing benchmark endpoint for mounted API prefix ${prefix}` + ); +} + +assert( + endpointPaths.includes("/health"), + "Missing benchmark endpoint for /health" +); + +const duplicateKeys = benchmarkEndpoints + .map((endpoint) => `${endpoint.method} ${endpoint.path}`) + .filter((key, index, all) => all.indexOf(key) !== index); + +assert.deepEqual(duplicateKeys, [], "Benchmark endpoint list contains duplicate method/path entries"); + +console.log(`Verified benchmark coverage for ${mountedApiPrefixes.length} API route prefixes and /health.`); diff --git a/package.json b/package.json index 675e6e69d..ea26655ab 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ ], "scripts": { "build": "echo \"Run package-specific builds (e.g. npm run build -w apps/web)\"", + "benchmark": "node benchmarks/run-benchmarks.mjs", + "benchmark:coverage": "node benchmarks/verify-endpoint-coverage.mjs", + "benchmark:smoke": "node benchmarks/run-benchmarks.mjs --smoke", "lint": "echo \"No root lint configured\"", "test": "npm run test -w apps/api" } From 73bc0c51a267d34cdf99e6aac8d4cc23df400301 Mon Sep 17 00:00:00 2001 From: David Watts Date: Wed, 20 May 2026 18:49:39 -0700 Subject: [PATCH 2/2] Add API benchmark demo video --- demos/api-benchmark-demo.mp4 | Bin 0 -> 166867 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/api-benchmark-demo.mp4 diff --git a/demos/api-benchmark-demo.mp4 b/demos/api-benchmark-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..04c3de3c16dcff85d3667b489ccfb99a250a405e GIT binary patch literal 166867 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

|v>gKM1Sa1o!~q=*Z&wCzknlishqp;KS_p zVzQeh&XR?$Gj}Ks(yK$UzzW1w8>aX9;jj(;VN*@L8?H0)UXT=*Pbp&g_XI$VtA@DHe)fgD(LxYIJSGJI06@aorxza)1FR>-2}1ByxD!MOj#$I2Sa?sO zIdcaEUHH$X0Bv0mhjS6dR#eWv{fI(h;uCQ-C47B*Uvkl7*5b#%5o9bA=5^U2k`T+g z&;5`=-a?NI%BcLobtC-D0zcFI%dANVCVvFB(A)e4z{=qxNZy=^X&;Ehozlei_A>p3 zPnzK09chN~jZm>uDk^_o^3pVOdxAURk-W>J94;lCdWogw2j&#s*fN7$iJgPbW%;mN z!acwl#C8^7Pi=kjKbqD^-eS|7<^%%7>jCTdRQ|>R6RsI&S~-w2enB%l{O+@IR0MwH z@wD7%UoOiH{ZVVnTJayz`I_uT!9R6d;?bjEKBWKmu{s7lv18K>T5bMQTUj@tVSC*(s3M~o2pB1l8g(rTn}gdPH9k6Wk&_x-=~AE=(#M8WDEs_d zAl;Ak5~jI)Y;!5Kx&~2JrKjO=_bKM@RZwZdJ0X!9g!q(bxYRMiOUhA5%&QF@^I5v7 z#YZ9joufPqt>&3NyEKh#D1Uzz&t?^Y}Gv z5(!~-2KhR&N8G zf>!HQFS^pLpMBRrVU9a$bdJfHtF-<|yp)(2xul5mqOq2sqFe&!{II6{=i5Y+vqu*l zgW~~x9Un?m`DeOKX&*Zf>QK^9*TrExmq2pOKiBxg2CKXKv(9!An4xYh=-+CEBQY2@ zxdVr}JnZqdJ;Qd`xALyp&cOiHu@gb2f?j)}gc zQ%2XkPE-wg-@?odo#edio9si?E^rL*=AW2lQmZ3p0`tZZq_!yx%x@i?E3KaZNFKdF z6{=5-#SAO&6;N@W^t+jYcWrp%)fsf+T0c$S7*)YU19KF?Ox~ADn0PPk&o$N7c-EWz zop$<4#C?+#VS1izLni@X?;bFxSZNoU~6Og4qQ zaGwxAy1W?0@wodBGwVSISW#qGwWs@1ZpPk(A2$R?9ph`fv?Mxh5_p?ApbJ$?(b7Kl zUvK2_ktb~CG-Pt*J)u0EVtpvB1mI3UYdZ11ZL&?NK}F33kTp@wAGnVBqaZZ{0ln3g zvl87SG#P;3-#8_ey!$6bKJYwXht{F{T~9mTcH+iR53z;E`;=Sq0gKS5tryC~V)%hX zA`&#So;xI1dF+!XE1TqjV!9T{w-vh<)IAgR!pbcMx&C;U@exse2ni~>>{qTGgHml9! zO}Ww$9q*FUF41O|6HN2RUH>X=qm2H=vJix>Y*xCdE=l3-UNb_F`#zheY9HP(PZ`r= zpg47Fd~M%IvUhb@Fx$n%QFEL0#Qn0~wx)Nt#{?2jRRZq5B$ z5#YNtI($EkyME|Ku70#FUp3k-Yp+*7w!A9<6a*BnKib zDgASDHi~zw5$3;%kZ+>s;0t-BKdC(Hjle0D1DLj#&R$5k?y`DNbUCacyKa^KS`7iL zAR2BbFP_rxW*yY+-OrK$s};7HNSSp-h1i*n)Rq1%f`;R>ds&yj1Z{MBY=+{F#r$8_ z_u`Kiq=63m$G%E~*=kyHDjfL11%hbfFdmGTOLRZ5RD+GTNBiGBCF~OR5+l!s^Z=xHWY_>k?IeB>j(CsOz&_{6=A^Gzh~UCJzQQrQzC z@lSo!KIoJ65*`IU{h*z67{Rf({HQy7u3pza14gi^#{nwa1MSHTNOXLHfoFJXjZe@I zS2pN7|M^lBOcY!TD8vT_13lG~3eb({WM{o_bo0&s-lmgqHr&8xC1wH%spIE9M;wgL z&A!9ELgcC&OIAfK>j)B*OU#6XKjYu?+JrS}Mmk5hQkmh=<}9H9=NUO79wb=d%d_7l z^Ssj!)MJDcpZ`=8J$ms5d=ikX)ZMYUCQULe&XXK?CP&cuzI`%1wLtX)L=vY;>IzHFhKGn->k(v_=3z4%>DwQZGI5;!%gQix2yV2DN~%30IBmVqg9dw&J>h}4 zh$e!pB+IkX9}|pQ5Y$bGXzPJ82w!QRUKGTo&!47#%6q6%ebj(lQ zaK*(aG7Ux1V=d>ARadkK#iWJnsrph3a9UV7Sl1dH7#aRZf9grM+y`cRuQwywQ|i>5 zkaV=UPw{Tj{sN1wV*1E=1UCeFl7$#Rb93A#Wq>zwfh1(vbmS0MaE2dCV6?q=4T|T5~g!yF3$b zT%BYdFp}d1M_&J`(3`s`UpfvX+yr1vD_;oTDRBRNx6oo_0BUwQxuM-)o|yFh6?w@ZXd#z{z^-3muH_juE{T6l9flpKfLq|3RG zhgN+R`7d_JOufmE5|($gPd&8jfgPMH2XhT~AZFVA=LcQAcU&_GQEbh#0T(YbW=`bo z+e>aunu6m#;clZb=q(l8NME8$0Wrw#=V*41j&>8+Vm{(K(318D5jZO>cY_go(G-gy zgilZ4M9*p0Q)Az6+;4_rLkYtTjMhQ$6Rh$M$n%r*oCku@pPdzH(_0%KTCwNg9McC; z&w!y0xVMJ|H1S~4$N0a|jpoLfJFgS8Fqur|#2L4?HDw&ldQMg*Ady?LFM9WWzFV5g9G9I9?7Hg z>WgAHA>EzCG=kmFR1EKK%om^HDNFi;b4LU82$cukv|f&ZwSki!N^e?oVgJL6>Ung6 zgN^Y%Xa`PS7ePJ>vl`)c__BTFN4h3V_xP3nVAMiO@FQy69vTYL_yBkA%Nk&}Nsjd* zk^^@PXhgm(*$-6vWG5U{SWQa1Y-b31poD$>lJuIK#%E+&9i2-N%h1m+a0%=bo7z-W zu4kYM|DxHN_Ye3Dv5~RknzCUe*#j4B>q%J;=nXO|8k+9O&_m+asC9fBs-F;}Z+52F z-C5jUh^V0Dp2PJdBW98AOgMXBg&&q=`^XMyT+HOzCUn8sLFfXn$Lw>b>4g1PMAz(i zO9l5QBz%}<4f&+f%}d`;>LI{@q!9VREF7zpinq0+j~ zcz;pc@K|Fio99mvvAn_^k<9Y8c@w8hq1GGJ*J&p3R-Je6jre6?eVBOx_ZZ$uW0;1S zs!55fD0V{I2NdBReSu^L!i+^O^KimS%N1uy&;jwVAfuk=>X=C zhPTS~Te~XjBGd$zY|y=2$qa8Yk#28-Dup3s;D}*Qe1-4=JNY+J}jU7hYpA;$oXbA9Dc3jgI5~RAfsnYYB z(hv<07eO+D)k)gV^vK2a{$?40ZN=q~3H`b+z?M5l#-AV}98JY(zmzJ+!xs|5*D;qr zbL+YIzRyi!?Wrk*g}9W4etFxM(ga_WG-Gp&h=+XPi7UoTrS$GTTAoN(6nj}4$bw7z z*D>%4c1TKgC`rjP2V=FYeKS}k>4kW@1~I^K&;vMl5&8}k^`p-SGZwHqTDN^SbiqRE3Ep$HRcmku z7Dwt>Y|IDgaj{)!)<6W;S`>F~HHPs(y=i{cc^=SHJ{_lbo|H*nVT6Y*_GT$ro$Axq zYB`zK@HQ<7AiJ3JWi_6wn*(%d*0#y;>v{g05r!hZfI5@0%vQY}0$VjYEta(=Wi%o} zy|^&y{*7T`2h1C2&OgEcmi$yHsHZx+$@)(K8}2txDkSwKtT{6{@Ayazm0|=;fDx@c zMg4H;e8B;^f9f-Mt{H*ixF26=`*me-`|+CtuF4D04Z*;=InuPJAH)qH7B@0cJ07UO zA$H7F;A>9uF1~$FE+rf!6P0B6XLvz^6jK!jc_FLsU754HFlgF7Lf$hRZ&RVHLRceD zx*ZrFEnpsL%2>DVDe$Qc6?>gb!5ku@)I)9IL|WrqfFq`oFdAv`m_gDoBGOongaZYV zP5Jy=pk7bKPZZh0b;(W{`M?h-$FI(|iifZ)kvI9F_h5a%myz>dbsD>Mmm2@xlv;b^ zL~pd{-!KL9<#HS+fclqgdG&kJiNb+_haJ~xPt2_~VW(f1e|@ggn+P_UNu6|b7(?V- zaszYgc2?wwFwAHf%e6n#$f<;<-#T|+Rsep);~PC4O<~wsf9oL$c+3vXB9WDw=Q+=O z7h!_cp(Neo-t81aUylkD0{+XfqG7wcI(?KC7->c^;;QSt(Zr-oHy2j4p9Z=aeecZj z*x-lWNI(G7U zn+QwEC{TO0AOl7 z_7Yyprr24g)4msaUgFiDDFe<7`c0OY$JlwVV8&;Kz2beuUPE2OYN65NayACuO9$_L z5cKoKFj4ue8O!04hmETg-2mL9pq;j0nNO`leKx8ML||4p$mhOCvVabx{IiEe4@duA z0knN)+jHGW)-!@Wv8GA%kb)!ARbow+NHN%1<4Zr5C=<@z#&`6~)wr|fWSUboTU z8ho*$x~=J|O|)>=K0I#trZ-}vvH#5)B2VqSElgzwU&KMAog1^J8ei);9QNm@@+h1O zrI;r1`mEK)aC++2{6*cT38{GDae)l*N2YUrnZPjxkPLt{!FVOth>D;YW1fgW@m`&o zzQrG*9@8a9C7kfmMte@IAXE+p-h3Ls;_(MTpR{VI|8w%}rK^6#cu3Awjq#ubpe4!s^HSC_wkKZRAm4E`zqhSXjHd8(Sjy2 zM4B&Lr`Uf<9p9f%eH>?g~Dl_yXyp6Z3yx9Q&Imukj zqoH;;5uwiuy9HkSt{lL#7mRZ~282mRpfr}k;Ku(G&)3Q^6&JAHmtw+l4>X6cuSS&Yt{mdk-~Y1w_*vh-Xy+2n zjd|Ubz|rD7?t569*QJtDT)zx9<7p&c+LAk%#32Oe=Y$L@lX#^|KZPPYY)K{t+ELuO zpp_2Yzcyz?vo#8f^#EENOAxD@6U(PpTTvV6PiqxGRcwhc+aG@^-$I40knFvW;}HK6 zCwna}#m^90L;R)xB=9lenx+AsI!p9ek1{)Fv@X$88#7JZ) z1VJ+pAi5*DhpSX+*MN6V3jtn-2no#$T6dliE4!Maz?JeYZRjP&&piw^_4U{6|VaXS}fQ zHnx+=)~n_5Eq1Y5K0-@@yjDAE%hWVDAH*0aMl02vrTpz<4lt{cEH#5>(Zqt+B=es? zXzhRt8(ei6k`eWQa1RH*8HL3qGlLP}0009300RI30{{b2l^+sKCUUi8&D6fxt4LXA zv$@aJR})_ueZ8UoX1@>!D4b6bL}kl8Pqg?LB=WTQl`d{vC_lS(S5Hbjka~BU7n!KM z5Q{&}Rb+!-2SYdzM+eb>5zP?V;=b;UpAF4l%Cke*Bz}3FFF8EO0(H-0_QmE=GxS;z z5!muQWVk!&t#7#&G_Vb)Ul=~eZSinM8yhVK_;Jux!g1p&Nh#JSo}Zo4VGDC)>PcDt z0uI`sB2**{iop7&>FOYdS=W1!=rsyr7b8{arOucR+@>{Blw+#tlWi>;t8aq1w7Yjb z@3In?)KZp&YTM}W6Zr^)>NJEOd>wc2WpMDE-Y#;e9r6|&%#M(Sr|u4pbQqrBmZQCN zqGt1qdslzR_WKgu3Q~2N%!xF7dY7|34|JJW%RO7|Q(v?cG$j>jvFk(`MuI^^=LvIR zb^mdKjCR*85=Fy2&)-Ns9*<_y_`%*>fnpJD?Nb6=kQ6o_zT2Vd5QUnpDq(v^sfbJL>m%p-FS(3wJhqpO0&x>}hN1xMg^<;UGH3k1J(AZx~Q zaff^qb?@Fb#E-kioz_{9=0@##X$b6{m2 z5wvLbt5Ny&dSZ#1-url!4J(DQv7=_N1jJH>T!gv zkyc@=`&4*gDXX9?H8wIzG>A6cx3(~Z4qj*VVqWm{|A$AQg;>N$bbi-Mu4e_ zE#gs=z^8{BYQ%pnou(v9@?fg0?h&*TJI0U`j(zTV$%Nt&v>6Rm9fQhQPPL7R7rux3 z6y9l0CQQsP7AvU&L%2WkBX1d!AJiCpJ04uQv#RHMl#9c|i$+a#Y^pGa5#psC zqAYKXinT+aG`5RL#ycV*T=4O<1il4q3*OaL7HuGWJo{^Y!|+JHwc<_lIpgZsTfd}Q zpEH6`@0jD2UbCbOkuuft66c%+?t5YbQejkxPv`J9Z$;X3;{^POkzt!M7f|MZE_*mJ z6G-K9{=x*+?)Lin_|r}3p8*x)v?16@6>)=h1S10(K27|qMf_47IE`unQ+k8h3oQBa z-c!c~Q$(qWogEG7>O5g7wq1O}x9BQBs^$t87#q7Bb2RQK#1w%+gujSPWAK+;0vyun+gTu^p9KVU#lbNsUj35{fJl0`mKl3h+SWd4RMo3axVlk#nsA} z=!$WQcPGEj)4*#{1x*XIMp9%64DXb+W#!#jdLi~h4e4V6*pT#21k|HB?Gtg@Jbdwe z3`tzAtChAO%11nQiD`04mxuYt2+6I;ZO#b1;krR3hvo0>|l z)fq5<5f@iUu8xfsM5>p5M|T}S0W5N@;=@1a@uQgY)??!~l3QQPJYTYe7Ua9JeGA(Zv@dBuT$d<{tS#Q7}$U%SY^6gL_lHX`$C>ijqHQGdNhKV+8br)DYyfGGam}~ z)1P7E+RY>mth*5F*NPi$RS!*mmdfk@$s%LBAXkoD6>JAbvJYSYsCZ1n^)LVgj44?v z;wbl6#z@=4@9W|G>;3Kk zakrEgMgHDk!oR+bC*vIk5P^WX&X1!U(W1Y*U}8=nMy@Fw2$1_3M}>g5A&D``hG9^0 zeHd*axHi#tL;T}RYS_^!hdsN$hLcdEf`j{rxQrm`Key6+$;d6LRixf(iDJbOa=FpN z@`?XkXone?H!_R9cGpj;6Jszz7t#GwuFO?ce-BzV&tk3KiPMWrwK)8w#*~EhO8dON zXoDw#vwH7)AEMl70MgUT|4)4lU7qMZ2+(&lT+Dxdm2<5&o!2|D zK&`T>w>HmCZEP=eE_0s~QJV4*VxCY4{X`hnDpKaR3)>rTkS|^2FHQkhee*}`-AY(p z2Zn+S_^?Wd_LQS%V6jQGYvp6mx7qXFIw+k++4OMtS%3&k-OOFA)d!*QL42bO5_N~74 z2@HhNJ7<$&%exEV!je)&&kBOluts#9VrO)6m2aZ7dzaLV7zk*?`|=&Y6s@dMYt*Z`WrUgdXH`uLcr(=Y;3U}@ip zM3*i8bCZ8zF;C#!()~6y*moN6QeNz=C0C%xc~IaAo^2!CETkgPw;2Ar0QDpJl9H(Y zxpw_Ug?tJ*{8qFJ=q!D=Bt}3EBMnP*kS5FsV9rOb#N28 za}O=zQ`%Mo)1PnY-M^$Y8ZKaXkX+7;avyLciK3yI@)*IfM@>K?(kE|SA{p*N)p}$S z%~JFZc;^1VmzoPXC=!sx2tj z(Y^6fZ5hakt&qcGHj%X_Iv630*Y2y{%`L(n%b;d^f z@=83l^{Fqd=vkMrj2+IWOoxo3co(vvkiBXxL9Ew4twV#i<(6KSI_cUe~%q`@R)m=bYLF*OfIbzmJ(yB}DPNjhY{dKh4x#^Vll)SaCImcaOIB!v= zKdoqM-++z606w^GkFK#syp`U4=k*a0Q2!n@FCyem7xPie3|Ldg`GIeR;S`L7%~R9$ z&F8Kli{cdo&4XDbcZU1052-3p->HNK)Rvqqo+Ck4b%yK#!Bv!&Eg$A*1$DI=qTekj zVz~9Zj!tB_qMo)Ga5Xh}Fy5A_Dqn$8_jvA0UEc!e`WzRef`#YfP=UEBqO~G?(#~++ zmBB{dzyW63uoYtxi}hS)20R~CT>)OzPihKbx6nb7uUr=|YR$%>^Tdx6O1JrEQy2>G zx|*cc3SPn0T&3xmbfPNwIXZh2fL@af`SBKS2!J05eGl2y3}RDLn8X!%l=WP1#rV1f zjf`W>R6crxa_6u>*MxYJ!d?o=FrzLPvgOg0x==cPCO47)Zs5HK9^V=8axdOtR2qA7 z5qbd5$rmNeYhCpUZdOg!9DP5#ZQL{!3~fITDa~q8C~hL7T?o^yAelG`aL*vFq!Ymv zg6yO=D7LSUK3Wc>A9-d1-p~gXHF`BRzAVHW|M3706;DIcfE+4IuHi)?GGXx;av&U# z?%eH=R%1M9;)F?+m2D}sc=owa;1Y)Cv7G2hi%aXi7t8ogjt zf{N(y+>an@r%G{aWRBlkT3dK!qtoBGxmH$(6JMIKk-ARDd_7Yu?#Y=YmaR!J;!%zv zKp!I?a=o;3gf1I*S7JwB3%l!_O;2JAI}?lkHk;PT)_3yp!viMRP&!Nkr!g~2^6GBV z6$pM%x<7JIk?vB(;(J{@%slhx#~j<}dt?Dx zDd$?ogia{YT>&)a+P*oQ44JO2Ba-wgw;XUaeJhu@^ofs_Su5S1!j@C8uhshB4_rd> zob9%mPzRcnA(=Sey;##`TFRD>uX7OMCG}fc@vj@Igf*L}DLtWkq@`QlC_c|5E{jA>Dh> zD|i3`UZK&n=+>p3Mf*cYn0RkrIGM586lcu&PF& z9*^%3N@p%Hf_Fzo2ihp=*roce&66YMn}gU^3{?RQaYu|0zsIESf`occW5|z=@qF^u z_gL8MX8n3tBRzp;VM%-b3n}|bPUF%biF_h(_BBO-<QSe5*DPU6TLrZ2uAJ_R)bL+6L8(Sb%gd)w#XScsuW z%gHzZx&wdwk`?-|!G7T=i_e_ClHU3BEl{35rUM~j%;~KqUu{DyR zXoT>0l=yFvcE@TGyIGkAcdr)3Psr$Rb$cjx0X>lpG57^|oQ~x2WjUOrreQT(tYy~P z*#S~sSgITiRRh(Y$y~}^kb4EKC5eu;)B^NSjM33inD%`pUv|v!A%HhAUt#093E8ig z@L6QW=2zDfNDMHQFaV*KP}ijud!PNzJBx5B08x`NYt;2wzEk7ehJFMVy}1G`GO)W3%TnlPKkpcAEUD36f(ax z@=Zycf5j6-&>@)^r~Q2UU0?+L@gO}1-Qmbh2KnP|0e~VbvzNB%pi$+wfhkD=yWlLTJ2o&T&D5=9z z_jG01+4y)pI%a{YS^AmW#sl}B&z$}hY#d+Q$A?6oE^5;}aGrL&Zn=uEHl)j>Rf|wW z6!KW*A*OC2j*C%HCOsx?iXPYm_CNZ;hBxd|N6B?FBmje1t9CRR!tE5=xj_gSmsK0YS7Kn2foyq(Zw*@yxi0ze|U9&7LR%r<2jo{+ruT~kAP+2Me z|D94x><*Xkok2OF!@|wD;n+=eBwdIi&)hq%zC;?i(h=VQ9i@?sqcAmzOks%=9PnHw5x&zo{qsi_Vp)2~QhozT=UFde z9niz9E{@hUI-27?_!>C{Oj$mxIQZb*7?!>$pW}&quNLd9#g-z|M?4Q)J6gc62m{3b z)0N&K0GK<`$yQE5<%sUk>jC3Dd&IkM@2nTI-zso5z z3nuR7qwk59`+XY1W%+$o+hmHAkAOL@1n4oj`QTZ-p8{#`>dLQtKm$QQ4V{4zso-0& zEnLCU$c*zZ19>VAe2$e3M%OTXQ9PvXJD6K-`xgkDpKX)*=hD$ZzEcD56+CeVYb~b0 zy=JB}(0^-X^oGM4D!S7akosVG$2)*b$xd#IoN??3Xy`@PrT9Yi#1TLpNzPq?%uC|ZGKpcWUNLnUu4AcWf* zah_jQDO#rKvt|dUBZS~e>Ej3c#kjUX&b86=)UPIZqUEjaV~Mf z#d=mlUk@aVe3cYIS$0P zI5Q6hnDo<1M^K!2VAqbMeSG2!cAZIaxEaXBBUBBishZ8XRw_ouuh)V(D`{+U@fu0@ zs$YXdspJyx8gyMP3+2UrX`E=-?Bj#-_eUe0m+c`1 zO>uM^WtjSr;t7XK#l;uMClZ@717+t$%*2UtMC1(>8xF)k=Cyb<9|<(y_?Q@LyCo0` ziiOpMq(!~KMb=>-AnnYd6&L!VMo#zjumP07nMbpERR8v0Jrn*E!&Sv)$>>xldF{so zsU;7Fm8p*;Bi?-LubIcXv#wgX|HGy?O7kjy*)q3SA)d9}aN~|lIirsA40yRTI`q&TMXw&Bd3_q1*DtS< zCjLBh4Jj0AI86PoOK~2~Vz1bCI6UX#cV*bWk1+=z324&4>pHJ3gI}FMXG8o~j+y{0 zeBANJS6{UE@>T9hVuOc1LyqpKCYOgjTIE|I8T*#}%HU;wUN{^S0aSJAG)s8>d5#ot)qDNo8;Pnf!bzqoTJNGSZwNSO#eo^2!zNw}p^y{@M*)~?>=1w-r(d1m>uI#?M)Efi5O@VS~{vY87r*GlO z0lsUms-uNwTGc0&$o%?nAnrAU?|Iv0ypo+XqZpsEvDiK^okbg|EaLU`XbE?*KxspN zlljxC#*@r>vJ#+|e?tJyw~1Gr|BE@}{{?8oPi3O-4ndMf7rut}roK6Yv{h`PsYhRx zC-FwSv#J}m)(-6)wy-nLsF37m#@Fv@O!}Gzmj2|!>_?h+@g)q^67*5OK|GBYPhJsp zT?7g&f^e)j2K1)0Mqcf!e9Y&r&{CDEO?=9U+;ah3Vt;Ikl+bXmknZj)+~yLe0w;~_ z6bhVt3@_xle?0}~DDZtNFuBa#wQZ!ST*Ije?2lQroBO2$6H5@uV8^f;b|sy%xc}9A zv4Wpln>#-YZWliF%6@x=gIa<=Bho&t;~~5TXN7u#%No>frJ@HxoM&rv za{w_I-Cl={pPyNcpCmcsNBf7XRKu6{e~4QHOO-ZZnUr`oU*cF5i7Dl3CVX;`95HBQ*J@5nS{ve!v~|k2*SKD_Dk?o zK_mxxBR{zLgQs8#z$f&N3&AihW)uDEcLND)&EK{=-Ap05<^L1OWDDaISDg=iVWj92tl~GuZnnndM+qjyBZ+3 zNID_DpIFD}{#C6jZ<+|jqesAU<1lTWo`kx7*Z2DVAT8vJ0LoxXNAQT{$A1#Ld z%+JVk4pB{991!VuJ#|^S4|KuPh$@TAUaPnSgW|<$Wn_TR6=ZY}EI*SRcjP)L3wOyt z^}*i$$f@COXR9h`FOsMO4M4v{*J|SF4FG+al4N7D4I*2=o8i7mz57-=Ul!aV)px;f zMeal-zmm2FQA22>*BhIVKECOk=$7jR@Q)FTD;Qw$SlcR1;90Yb!q<;~Mn2XoEEoNg zCUHg`($|^lyAv6nk}rp(Z~bMkK}DJD_^nf!C4oWNSEU4m7Bc0##XuL!AbZ>80zxL$ z;=KNhO4X5j@2~(A9HHl`${@yyCpL}a%xDw&BsM#gP#y)8@3$d+r*Q2}7{S4iC2w1TS82iv)Zz+uj3hrJjkc z<4U3Wkh-m@M#$WT?5-G-*4?n>`&OC5t#Nvhf)?#c|B&2O5t3W-!8YJR+!Vs$gw`d+ zKvzhg9L~VWXVqCd#;e5}VQYpU$HO#$Z3M1JOaKALvkY!Z{r|IK+>$fqtMotBBk3fO zi?F|)Zb0wY2WI_Ui%>=5q7=e{^f4G68uc1;*-KWT;ZS>Rt$r2d0dhJmJm)`72I?RM2atDXXD5we08;}j_5i5*+w}aS1>ACpSG`x8c?Mv^ z%nK*-U)bSe#~8}o>o0^)AmyS3r~l?~EwqxywP zUz9>BVw<3Ge1%-uzdLe`3=x&^p(v80H^DC0F1>8>PD%OrRR~%awpGM?zTBh(+}tkW z0Uu5iBQ>bgUPM7Ad&88h2+j;;J$dn!KMR&%aFmDRTzo>wS%9sYHc|emd@J7t52xYO zf->15keMGolHf|tSI-3p*ICE~;*xd&Uf?H~wUKmiiE}o$X;GdHi~?rHj+=$}C$+Gt zmi43Kg4vcsQ$0heOLN+finP4vM1g}5F&|W^Pr_qfvckTSE|ciHftEi*mrTZ-vp-+i z6ZtbxbMZLI*u;2)=pK6XImOwCrLBzx*V7y2btUAL;Ziy&Q!2cfOEX-)4P{t0VC6gZ zi^rSGW5>G(eXtBpc4XL4H#RKt+93RZp}S#gP}iA=hN^|`y5jhQqo~Qq+e4k~F0_RF znc|W12rM<2 z(#<)qXkUi^NuN{xoM@5Pg{1dujRiMGcyxE(Fd(?@YOjn9K40Nl9C+(reK}Ise+Z|= z50pCDwt*$v`+xrCnE6V{%nMUoNP=KyaA){6(2V*ilj4QY2gfE8sLV+f@p$(Rpws#r zLj8i8l0e3CvU^2e{V1SHgF?hb_b})Ky6y>@`a3#46;zi2tg$y&*FLOl7fr>!_pJrJ zgdA+z-cpVUpkoB2!m69d4o1N~r|l6OwI{^&PeepFA)>E_m(C-u?w;Db^7j8}jgkZ! z5oGtY-4{ynt@Xmp+N(p^0la{G=;b*89!-cAaUXZ?iGC|WrNhNP>v6e^2=GLZ z&f|B{ux7t)8?RZ#?aDcrryt|l%&5;XQ)VZO`Drm2yRU)Aq#vm|Q8p4z2;IK_^{+!B zZuxI8_3eYIlCn4J9(^7+xd9D6luSgK+OVWa>7)gCbdMTI@lx~fw@Y)@G zyAISpbEKExxVCa$kaUYkjehi#%6*2@dT%8>*_UV8R1AX60IQv!a&lICUo?%Mgmkx# z)`KS^%Hx8J4y_wY$+R&vYDx~D7+}?!Lw3Y`WXZ0SS?Eg~xk~CSfMLf3W0EW*qudoE zOum4_gKKp?;axy6y{6<>u1%)Mw^83-zXK*(;AM@tm+U4ta0m#^g};khL1pM+_tsqI z1o|ywiDiOcz>Gaclv0Fu=ppm8dzcZgk_CXYjfEHH`t+xH-bX4&N}mLO0$_o(iKqfV zZADt=6U~KDHjs8U4DQc?r3kO_BMP3!@(g2V;UZs9hD)~*8JVCjikS`x=;(sDR zh!=)!#4vHKvPeL`lE`SI^>=Yo35**dmBKgouAvW3j$im)3>1TEbM3(#a-5vN)aXu! zyFcLvNwnLmHC&BI3)fN~=lEQHfy^{aeu^LGohaqMJbbGqC%}x2Rpa5h7@8r1InUqL6aHA#wEUSD|b8<4N-jzcVq4Ie^~$3sT_z%VhAt3pPG+Ha`I-k85dW zSNhP~I|a(IqV|3`Ie{5+vGK(ltT1>*zVjYon^)0akLqeBuD34$#Xi=;AHqhSxv_wv z-?Ca=>MF#PsQVqWK;yVcz(%~nfxm_dMEO{A=?M&zt7QG`K}`nd|G*jl50Zb*9LR7P znKP23w!ghy+wx6B$B5%{ia!7aqypAw>!la zKdWPyzv_btQchXA;v_mumOYe2gsR8Ni(2^UKClrWS|YRQDG?$d?RPGNbK)t1mkn6l z3^CzT6ZEHI2j$~S{X?1o<6u#*?lCyLTPgQ}buKjTRdnEyt;TVtK8~{`QbSjr3Ff(3pZce9Wp{-hf;eK2t#k6<7nU9kY%Dz= zO|KsPYRUaU4JncI^WpJ9E05fZlfkQc7iUcK_sc1u(-KjE_%8S>=Kc%^uH$^2&_AW9 zqTZ*Qmf14&_!zMmDgdWH8~`ap9*pn^+@y>ugc|urkJ@J|Jf`OsApD$21G^}r-9lUf zf%qIgl35y;Ee9!x-=tZ-D3#*jmqh%V{dyId4pUY3P@jye^cf?y@902ygFYCEeOt7w zE_C0V0Z&pbXOBe0@DGH3CW!z@LZs^xD_Y9AR|su+ccR;lm%Lr{wDs&E9$54$-g9)q zTzrO})HIe=k*ik#0A?tQIw%-@`+#M{MTe)%_%WKh1;?OGu?Y1|OX|KO$aHgsC#BMz zA{&oBEsSO!=0NMCXS@Yz=RBI3i z70V1`S#{sp@TAz-iCiCtP7M>TNHVS=5e-{!71Yj2?G8eqKA%7wZUCd}(aV&u>ks|w zg%y3y56u|uI)yeb>2uVi2#iviH~(4!gyQu8b3DDziN@!p-*ffO`8T}Z(v3o1PT^|b z|CF7jDw9@m{S>ht7JZ@c)H@h>MujG@KsvEa9r$!3GTNfoJtsJMshz?ZEW8?E>Y>(y z+>82#4yS4j(`0KjMhEe=7Nf7Y-JClA()9_k`PbxAy-+5(+Q ziVm8gkm<`uKxht#d@y$pnGJ4`Yg2sj;hnc?%yB1>en{b^Z(|Ijd(J`;+H_mbbv`fI zXhy{1fg!hYYDYu)fRpmG*8g}S=$A7&g=RkzPt&dhE4gtOJmQJ7*!Qzf#xn&}lSg|0 zq2BZ~uY^Cz#xEem+&PwoPMRJy4|t1A@5N#Vtj`5eqYT3AJN`b$D=2iSw5w}T3&3{0 z^i>?{+7ROi1qRz<8>|2KX%70}x%C`AssjG|yuTWZI>f*j@3*dl8}nLnYt`~U_+{Kp z1xo|_4zAo{ZpC@;YTh%hWoU8!qdz`Eteg@f}nbdH>613aV;X_lbE(|UV5^Ide;vz%no zDyL@_eQ-W2%t@D{NM6tOQ(XD8f$_|9CQ@f4fF6VdT02=uT(alIxY=;)`WfO@|AGil z0^if#NOf)Ey%QL9Dn#q@UIJO-Js{$O!+;vw&7Y}2tzGBT#m3YVSO;1%W$e<9bK*go z6m*ku*hkGJ8Gj<`b*nxq%4va8sr0TVqXCP;PQm)KsQh0kulh-pjATtS8mZ#`-P<3BqSoDs26wyBItV-2*o`LZ2C7uc!9@&JNzu!qB#k})x^U}X~Fo0 zfq4m=F-G+IbaFIGF;CQD)g0z5nN~tB(4M*T^Vcm`?h!5Y^GU%YWJ>#VYzMwF#GVzn zc6q!PUNoxH4lc2PbT>c_kKs3v4L=m+qyVa#1&vgyftW)+C*~GlM*{@j%41zk$F`j`qZ~YFQnvaSRfF7)eGp{JNK15Qgn;DGZjIaL*9Po z=37gxyQsDAGDB#v{)5{{qGMIYg2PKhesqt(?W2Vjohk1NeM897+zt%W*A96%QpAwO z*CyY$*a`vN;{8Q^kXer!@3_6-8beOHiF_iZ7#2$lhA@QuyQZI(nc|s1|9FmKi;%3& zRT&OjFx4qy7+4fEf4ux1Gd8FjOm7ewlc#m)EV?}CpWPa%2s93!-TGXW}On2MD>kY|u z4P6um(0>SjC|%n@wbY2&dtF+z7@f!nH%dFoE2Tq?|AHC*Jkwn$dM9S?3TWB)3wZc* z_c7}Cb4w$jhyL1yNnl_32(bdg8Gx&1?V7>a{#0)e_Ai4`cd84RECfmMS-Pq1K zVac;p{1y5nquy*QX7vWm070|RUW?bUb4tw<;PfWG7|-BmB9(@}38@-&nR(NY%Z2gb zO{=oFh(D<_1AHwC1Bq0iSwY8&+O77sS@CuW__`^3@Vvs`f{t=*Hb~+Kc*7tGj;F0a zg!8SumMaY-lK{msIe3%Y@+M`}HClxj{_ekLk4EbZ2NQ$<{)Wt&0Lq^K zF75gm0vrr;9pFeVnp1|GET0K^36`;7W^1cH5L0q8CaPHQo>yZx-dc7X`ILM36gi49 z^|_>X7e{@p_CHPNmF%H_z%_NQ=0> z6+Q6OrJoObg!ng<8ckRu$E?O_lZzJeVFngKWPR2~>gokp>PtBX&FO_o+9p2PaTkOf z5CD|KS8TJOMdv)`)Azsb;XwVvw#~aq?>}!H4z>y$H;&NX?>VQvW!WnFueIdsY)>hGqre)G?qd5^fBgVFZ-LVS9h<9rRNXB zzJdkZv9ZA24Up=|j-tf-@C7CX`*THxFGlvF-WOYmdmYO(o{#n;`m`c90N@oBp19aI zx&>Ip4$&03BOmrC0Iq?!Wt&PoXIu0%QDHZ&YiRsk1hKnq5uhDM-U9;c@<_)w^ue%C zBXQX;*q20}^cyj2AT`{%oM*LTQVlRQH5Nyaf8dvlQ|F}~7`*o2QjlPjx$2{h7Z}!t z^TZ8awxZ=j%J1381DC)&6j60vG&gH~TtUwE))HHRHrVoe-L3tIeM)RWXevrDO5cs9 zfeET6eDRgZ*&;v7-aTmzM-&?fw%b`G-T zJS=d`7X$NARz{hAkZ>JMB=w(Lc(`ty^$hZyR*tr5kO|)US9%XIHQVa3;ABgA( z4JjRFK2(cFs3sV{=GHQ{fz11A14Q=)Vf{QF-6r@!BwX93TrVU$z^BJ%{k zcp0j}Pa+<%_{QM<5Z+y4VIvjeo>Q4H)nQ8ApR9c4O{Rr@;nsw(0_)( zqRt8RBA1o1cm&uXRbHOYyonHbAkDo77Ls>LM(3bg5F-NPqn`*>{YzbU44iP{OZBDU zcLnC@P=aLF4lFx+Ut3PP<7h zmP_FWp0glmmt|t=9iBBLD00#=1@%8Lsc&-#F#h*(W z!84xc>un8sNNM*f)DA~#XMKh4ONsaeFnbRDmyV%qy@1Pnj{V|xLCI2ZUnC*AtfbOSt~>2)=#&bu-Iy z`{ieNv?_6jNW^S79&}^L{A$U$`LRjtseC6j{*(|4?DPbbe!#O(Vy3P4u~NbWVuIm^~RHAP!)bFDU>J(g_^j^ zDPe;06*2y`vZ@;JFGG{xQvji_W$d7lXCugcDI~3{(%s@o>-R{FMC^5P#Ri)3wGisR zX#pJ@Mv@x{Q;fO&w(Jb_5KroeAc^kBc?v-?xk6dZ#pjJRXI{BT>9as;t zqjh20YBNT~Kwc>?2d4@?Lbq$}%E=!_Q0Utrg*)*Qu-$~%I)>=^(+;I{!hATdV35j5 zT}Fhs6V2rTdMkoLrEe#F4~Qwb<&;^GF&mj7n&FB5{nzay?SHV_5$Y9H0#Gc27KTQm zQD#c<V+6vk!j1fg(?c`5BxGu|8?u4TuS_^makkr)--= z<1GD&%UxW_2h93&hon=Q?C{7j^BJDU*u%nZ_c9BQE6U)07Q|Q*^K_o@rF~8 zuTQgbr+Lq%ZBAmqi6AszA<%002_;2Iw_hm685}dOU``U#Dc|(dkedYR?{Pv`2O)B0 zgm1R3b7oE&)ynRmAfKdY`QRdAD~75#1}T<9loJ6pXpZ)$iAZEDV+GchEk% z$?}laeDw=YMAxLG1q^mrsZt?|(ZgRx0K)~~b%=RXmwwq~DPnT`$;!1b9(Rt71>2crumayK(JP5sNg zUYN9N^I~l2dgWU>m=efdzi^B0&1iIaX%>3^h}@mzA2SMCAaN=8!rC-(h%-=n7seCr zGKroh|K5gZZUCkhmcCpZtNz&TbdNje%)u@6xkZ(D51GDxU3$9;CJ2LER&+$|Ow1jzQLgbD#JpP-$jbREgMw`rw-?{D=h`|r@enUS9`{`9n#kF#Ry zmJ(fkf+a^|@p4j$*Tm|%J$HqFu*mvd>$8_~G1q`?Xx~WOpb1lGq>=@cppJHPdXktq zU-9(-S@|D1yk|v6m0P0T8!|;={6eBPqV26DaZ7)i2A`q(V2n|uU8Ii6y0^jko(q(BvmPDC=Mb)#or`PfjW)o5#nV&fjJMVI^ zD|tPeTXVO9S-wD`d(*GT443-}$EA3>B=I$yr>Y37!FICHm#xYt8A&;MzCO&P-@9vH z-(}<9-ZEx8ddEqb_OEM#UI{SU;R0f*8lq6P6{PlqCha&T3y~?=1y|Iup$Ae!8O=A- zlKZC>Nb@fd(Gyozp@_fNA7LgkvB{PEEbW>Q+27aPKkS0Z16wMG>Nku|IL>omWJ)%u ziG#NQ-Bg-9feWrTRTIuR0er-6*mP^A4Tq*kYtHKaetI z_OOrGpO$hX?PMx%$wuUgZxYAilW2ogSbIg$W+3Zy_jq0pr%f#wx~q~abs7fM)SBby znvk)>XZHE_TU{>lwCXplHrKLEcNG%_hjla7t+xeN)af22E)-Zp(>Y&18zYm*&k@SK zVcE~bAG>1U+K?Uc)qcSH;$jkpn@}?xfiBC&|pg;&%V4N$JhPhA3t-_JQEZ*{}EX1tuYy%Hk(h87ZzYAyr0kcFQ7(-S`2vZIFuVh*CyP$WwoYUl7?WlBmfDLWBk_I; zv!i|D=`K-WM`5g1NH08G|8OGZExwK33Q26OSu=;esEeh!^!rBpIv(CefpDk6Wlt(b^r^&%fXmG zVI3!5EdAwWP6k+`N1*luWg%i1ubEXBc6MTp_>+&e_GWqU7T}g~NWsQWfTFfJ_E!SB zWN5mz=Y~~#?w~Yjube3R926h>J!%C^TaY2Mr3#}#tJN&sY4oJ5XNhWWY8uHVzJ{T4 z+bQcguF<0bA<<&MGBk2ae_+zk(v0*u9S}CbGEP%e4T@^v9nDt}Nh`eV8@fkZ_c-)x zBY0){0J!uLN1px>!@eB2>c^t~MFR4t3t@bBgAG64!+J}yUm)cB|DT;kpeGlQ{ojwQ z+=8Kqu`HnnJ=&g4kjgCQh@@bq;vE2D7Yd4Y)H~}kr7VFny`W-Th(11U^!(j;9tDi; z=#;{+5(F6V_hN#O^Ne_|nt!svlcHryIu1Rw(lK(7!=KImLw9MeMj6}-n_&7w7W8+2 z^50ClSFnI@-*hfryC@^$ajb z<{{zU7eb-(Mb(v3z~5`o(FSAu>c9c|YDPwg;{hu0>*ujs^~K64WI0Fep$Q)0t?aGu zKI}8EyGMuR>wE&1ULX4Jr)%G~m#@$1y*zoG-ja$FF|-6_%QL1DrzBVC3>~lR0Xo<` zJ>M?!ja(_F94b|2ONLQ{XaM15!1`wkDUlQTeVE^y*4>0YHRiYoqBZIY zd=N8qL=D$r4M&UWLYYrBh~}SbcPk#&X=X91tTMZ_bBL;&NanY|-RAG%Xu3btu>ItF zy0MSIP1^;VBjPM%#y(p4>}zN5>vgjxgD@TFw=aG^kK6c3CZsr_Ox zlyL`Y;l-JjG-bhKOY$x*K&>iYUe|G^byN)S3H)pY7;fPKe9-*!V11kwwslK9VHi>& zp^L0HwcTA|$d2z}MC@m`F!RwO`Jh}*kah>-T;!%tJd^MIg&;y+VQLIs*6zFYJU{m& zVKRBeQdmXRYg(Iy*lhY?2_@CI@0i{XuAtpzDnMRwtv3v*Z{E+dPn2LAL7O-k3djG- zhdRJ8FWCe!$IlGzF@afn>|ZKJhDy|k5or&@@%dg5jRNa_ZVb0^SyzFqJpG+y?x=vi zr^w2xqk+fNiVlvW6zC=6kV%d>p9&2kVcahu=-;S=EK-8?4D})2ioUXXh?oj-`jAO^ zrLsnNWcPtqzj00SJ{QV3u%U5x_UcO5IGnb)=6Yaq^A>#{lM0!$2KJ&&_h@rze)05Z z86zRx7J=8Wd+C8K-zyB)n;sZM2}uq?M#7g$m-QaiXsi&SNlOzgOqM(c|I=a6XM!(@ zH@u$CnoH?4#FI+1!X#^oqkB-@L4Xx?zdPq=w&0G#wu9L+9Pa&CA6nsvz!|%?982%q zrHB>it%v{s0{{wu$LIm?u{@Q5Yb6WR*y093Xb_30o?H;J*x@PPF+czFnp^yH)rg=r z)meIhp{YG$9>zppD&}GT|J(ok>#9y0t9s&L`TPNJ*etC2KBSB+q%uWl@~JDy)bl&) z@{ESTXMn{R9Zp(sJd?k$x~dnv>d^yKgX;lE4|Ao%&vf~ykfLVx$=Pb$wv@ac!0>Pp zBzxS)tDy6AM&W|a%Z~4I)2Ef*0-~t_lx9qDw(NTym)@$c3*f69c;3*`o;)J3(c#)l zu!Vgz_Ox09%FVtdVF1P=|J$u(gxey)qEF8#@lvA>8)S5~vFJ-uEhsP@ca;ZTd&I+G zkWblbwsYxs>gw&f{NqOpiezm+lZRWaFO7RuEtQb5PCr_2p@X5k_GhD*Zg6E9qBQVxtS%f}dQB zZiiv0>F~nC;)-#Sx&Ysc^d^V!D#xw`kgqtAxiMTP%*(JDjZTej{o?FMy zpM5X>FGElr?fo7|0A?blY#dL7{)$lkBCD)m(V_lq*e9eKCI5#QveLHb5ktQr=iavp zJ@!M$Y0b@`6kKNM9fTK?-5;`fTc+ao4F)+8bA_4$NDT{joJ3t2LbNe20O_kyPv=EMGkym_njnHbl*8O{TCvoWyLUIlHW^IL!D^ zvO%#}qB=#0@*-X)NPR(`14;1J^oLL3rQRvX(E?=`>spB12v&YL7Gi0S#szRcqw<9N z_dljtpgp^fppQqp%g#r~aZx`?*liusePJivfq$ty4Z4hUTEOmUp@Y((bX{YnL}v}a zmeN?E$aXN?Mlj;V86!3@e16NzR-2C;fK| zwAMK0jL0Sq>0|W`ihMh`@Qsld&l)qAfli2k=B3H4O?9cLr2@)2^4a3jWH!S=lpk_0 zCe$1&xdyY?{$%BgnN`o$4Fi@^+_16#-ufE-9=I<}jr6&LfdALNZ}TA~h`D>xq`gIthWa2YjT!Y~@WTtNIL3ic z!qJn>&!7FkMOFnvv@DLB=yzNtr!J_jCN+eBDf;31#@L9nk%ATU1c{RicZ z*;xC6Y5I^Q$ctEm9jsdAwFR>$wk&;yK%JcVm01-9nQpz+tw@v>X4=)TtqXrsWK$&n z-rHg?3SJH3??Oz=p$NLUKS(AGWwdT|j({qZDBFQwNn-@j9!-hmoOlpW9pW7SZamrh zzzJMrGZ0|XfD&1J^qO<-66aw%CGWMXP+$kZ+@QZGnObTDkn3O(FF{|%j99fIU3qW^ z)8=SLQg_yWm`lo=b0Enubwe%CstEfdImiRe0mU52e>NtZ7~UZnQ^eqms8W%}QubCt zGbiRPs@L+2q0%|$Im?-xI2VXlcssdUhz!r!phKQ~X}tjsyM%ANOiriG6EH}mo`p@O zDczt+{bbpq8lImyZFq8pPXSvA*O`r2}l~KS7 zJKw*?em5E~h{~T=RXxRmenu^`Kfyf-j-QXnoI+S^?}*muV6&x^=7Pb+Uc=$-y>(Pw zy|y>Jad#;0?(W5{P>Q>|JDcL}4lV9b9Ew|UZ*hvd6faubc{gp(z2`gQ-1|M}ykp$= z{?Uw`m1Jcm`DLzTW@e7Hc4Voo9Y~;>J7G!A*7iU57qF+6NXQ(G2T83h+ms$336ZV* z;PBS<+T}Y9lQN8}w1rEUWt|z^>`X@@y!@D|Z?3u3oJ~-V!zuObne}sb0@eFn}=c&3Ym5E zwMH)cLejY<1ww0`2{y9<@U0^f6#9QKvokP!hOeg#>R_bbsBex%iaD;t%GoX;VxoHzvTkYY=@xOUODZKj z_s+*7{0X+mf<=5OQ!_foDV_fhoFR!zxJt7C`yJv=7f`$mwtBL`6|iFfb9o5}GUzcXIL>L_C;_K~bia0KdXs2R$}9K% zxKMVAw1UqrF}`t-l{`c4VR01jp@*2Zi(cwg(al4Hz|J-p4@wVV+k^_m$3mS!L92RW zoZ!zw58t_mxW7Qex{BJR%X^k6MR{QL>Gd*BVi%&1`-2rxzHtV9snBsMOuYv7i26hi zr8=+NKGl??+wg-UYVtS|Gp{HQ5(c+kAgAb3$TaXGH|#xU*k?K6Aj2l?y9Md0iI5it zP%FcCUNWY~Qd`hLuen)?I1tOHV?NItyZX9wThc(BA|~e!`&i24eD>HK+q<9DJ_|kO z?l#46a~j4_8Wjh}L!vf!UxYtM`%b`v0r4$cpq;|uTiZ4*JJWl*sb*gM_#O7x^l3y? zbLizVyePu6)yJJw{=-yRBn~pusU3#KHD+#qRgWh##YawEb-i4lf^RVn?P$RpttL;z zQN88x?9xiPV--5aL8DqU?(4=A;xKbNGuIEbf;)L9Mf{*)=C74OgtY!2T`U&1YVW?VY=4J~?p00Yu&MU;Z+4z1>jkI?}Z`|t|9Y~=)P z68c9%VxPhTCu1}#>~hN{U21Pg6c3_uDJjnEx6&vh`wnM4kbXt1Wph~;9F@CnKnwL` z4{FMJ+(T=;%|73qDAMk@^^^n@X-3kyfdyZV3HT^|f7*J1M5OQh@H?^N;;Sem$8xF1 zZ|OGI*j(h3!mju5i)OtP>v(;A3&^s1nfxQZFURq_fp+o0Hj zQ?Gei)w&%PfHN)OF7<=O{BFIMq#JKER9<&|bsaTR%70f&h4n{R3n3XZo5Tq9!}2O3 z4-@g-7&NN6&OqnL8|D^id2f6Qx4TXuA6=I~AOddA-ZbI>pCT3=CR?ZAJR3ilp%(rS z9sWX`5@&i{+(L+63582l_(Q$$Q%K}kH>DK1Hkk&0q1i`h$aE=G72QuE=J8*A;G*CI zva;W~RcR@!W(pT-Q%BCH!FU@7$#t`|5!6j1f78EcD-(N9Q*o`Lq*NkZeyuZgp;oEjl(TUA|dw#s~rY+?wzuLD#dBZQ0+}1K< zx4?cxQUz+YA^utoz$3m{bES#7_Rd(b-oBvzW#q7bgEm*)e3yF`2|iocb~~IEyvc17 z6Vi`2Q`TI(R~+AGBNQ&q(}@p81R`B-ETHJ>!AbQ()Jh(++>*IZMT zODVDZ7W=C(;o+}zYLdO;?<=)%?YKjdqhNL4t3PgD%5$P6x_&E>`F3mfL8!B4pY+`0 z7UTY7=wVY^UG^d$T!tW$V5qVSi}4AoP?e0E_Q)vLhLy>z_4FqPDe2gb{?MB{v~3KV zXpMWyx$Az6veXbY;S`Ej0+W(1f*;6(Ca10}z!a;}V+Hw0X$J{XZHzBL+g}0lqAf2N zi1kKCO6%0e)YdA!0@zHWyv)J8(f6S*p?vrKkKZ6nRLbV!96^_KTE9|IR~-)1VW<*= z)jQOb6!T%*9>@`qzJNWttOM1_Kn*=O_Bwl6erwNRg1V!sB z`$jtBDM_ync@bZ^Nz*Z~61`Z;Az%A+Pk*Qd+1^1Ru}~9~Mo0L_j}=2mwLia@=>!B)Ri%M$3DxsE7UU&+|tDTj)y6LJlsJ7hrOHKE)y^Mh~8N zdJ#c?M|{)323L7ue$A$waQ2QB%j?q3Io;-@@>Ie_O%5ByCE$m#;WQ0#<&g(Y8Ne%@ zFNQV6G4?B_yUeRWx$ukV7yO}vu@3^4)}LN&9ojREV<22azy6_WlB*3mFLwWC6(w{Q zwmF(*8ma_>xy?~VPX*9SKw-?%-~UbIWkQTFjEN_+a&X>^lC^k~u5SwT4$l`GU(8~c z!b*l67yhY;>*;W!3Mn~oM9A1)DewaUgB`KNeg+HFK(+~qH`piadOL3t7vx-bsT}23 zO3*4vfu05*Zi>SSX4FRfc*)^rQ0#Nn(Y{j9j@r6?9Ye1slMu1xNKQ+3_Q>uUc`ap}XbqkW>QVk48OoY4G5U5|+@%~p1B=LauKxws)y`Cr zQ2I#LfD3Tx+(2?!yCC(vU&`NDzk|4K0_ib507i2g)n9v!j|{=4mz$;94Gog$bqdMM z7A^hLh1XaB0`kj^dT3g`v}jC%n~nFHa3a(y@510b#^u(u9_u#c6G!bQ!z-?Q*nlB9$Md4&wGC5MGg|4ha8yFO z)iK)DJ<6ztZ^w#^h`95T%HrNw@~q;WU8ZMp5`XZ5#?Zv9sd(zu_TK41>c*A!>uvKC zQZdmHqWR?L(Vp%&74x}HJ8OQw~1d$}u;O(n$$pPCDK-;S1uWL#~V@K{gr&mY?9f zUzG{OJC{)(jXTyo88B&p-9x78r3v|z#IaR3EqkdQSWXB0gu`n4y4V=U-RD#$ZQ5Ep zW_1&jx`B#n+)l%?wj3d0;mFm}apGRqhs4yIA9Q>S1J^CqlP4n0ETh^LmG4U(26u~y zO;I+4ne>HQm>;s@L27Pk*mvZ+6L~W9;`s!;_bWOw81SE$R)bN7q9l&HZY6kEzvSwu zD`p%YWw~~JVB(@>or!T+P?m&{U3)03>Ua!m8&N^AP!NqcB90O4pg@mA)^(;)LF-aE zVyQBqu+0ueQf^81oL@0PSi!LDgCD;)+M%W}zuUUitJ5D=(h?gE5^VJ5yF;3CgW2m` ziQOuAl!A1b zE<(zIv*D+y@D2854!$M73`fJ%y0c#GjMox;Rc~F7nuuu?1`QV?KI=L53D>4TT-c+0 z@ZM~9USqyDLY6ko^F_;_m2!r*xMxirCNQ-R3K>3M&|cqrA5j%%ht|SkLSZ+yP`?Bi ze41Y1w#Zr;#(vz*k8}2M4X<%Uc~qUmSZls^F$b+WgR<+9f>X^WkRc`SyP$(ka7|w2 z=JkQBYG62T2H(lMe*?o#mC$W155mSLn&J;t>fS-3&=bw=uv<)JFDU&G zOD!#PqnY5SF2h$cndwayKX(qaIR|LTT{*(v?HpJnv!<@A4?Ekza)ym*_-bL>i076V zX={)Btp3oH=C+aC*UylDqhaKQF`qxXSODH?Gh83yxuSzcB#i5`_|!)tWHzNNzKL&) zMu*@f9Q|5Rh(jVSZKTbH_onX20RV{l0b`!Hgu8}dLrT!o?Dp=(lf@&9zK&um(fVFp zRCx8Mp)QNO!CM)a9xHD|U5%O8w~S#lDqC<5l~u1hrl zsScOYD@C2^)8jrL!uUG`s)&P^>8!IF#9me51oDwKIA)gB7s5W44*44#uDy4tr*NEB zb5ddvX(w)0q^}MpNtB&HWKQE|=aFZq6glnxTF!600;NLFAMTqV?lIP@A&e>CZ-lV@ z!XZVE1kFoz`tGP~DiBFqL~z4>0#aU|vD9_A5Zk&#*IK|S9;?AdtW7#?*gUV^zQxdD zNluaY#+NHoESmcU2>;~G#fsgMN?o=Bgagmkyg1-rgPAu?nGrtz!7>j#zJCf1wGoq| zgfEHq3(09$m3|lO`?Y{kz02`|p>+%4dkCz7EoG#;_&zCo zmrYDiI0)C=(R{zIT(jVZ`ncs6iE^%szpfMq>c=A#J zb>wX5c~815P0e3(zqYP7g=wLrfRba!Z`cyDY3E$06M9!t(H)h(eKM^+P3*If|72iU zbFClZiz3`b;4{d3^X1&#ITU4$nntSSc+!vrp+62O!F;igBbBEi%wQxO+NHS3Nr*Bw z^T*l1BGRpV9YhPYv!2}?#yF7Uq~K5>9T^UeyS7w>TCG#JD%>#btuVTjSi)ObES~io z+@$M7W?1Ap&JN}-=un4mI>|B+m=f3P$le+~E&S#i(Y}fLIs44E3r3s1VJ$+bqx2{e z8kZkF+^0$_l)(3L1j}f_YQvOU7aWW3__DsB0ZOQPE)0sH)wA!Z1dlQ$xylm3NNhVa z-JK|!u&a|cW$OC@*SFp<3Zb>mb-)~Kh*T?ed`QfA@h#&emArjnnD+QOa5jZE$ory+(@@~oiO(m3r?1`^YD{$VubO9Ya4? zz-7D#14q$ID$-d-WJ%SdsS2iWNqE6%Wixux`gk=OnzL_;QZ(e-0kd+W$U(d{=?%k8 zW3Xwux563ILZt)}WQO46xhq*+umCi@d&%w^ZAB}H6kIHNh7n|Y&0e6E>lNR}&TX&> zEVDFAfSz73P=vBS#>R2yYKsAnU)xUL;?k(|Fp4);5JeVdcaB-ut@vQ^}V zPo&xl{Q01x=Lqq1%#g_FI~u%>r{03gtN<1*5W5=oz?XT2$`x0RfP(zlj4E4-m6nZs z3ZgS&uRF7QPVv7VlDNG-N&O*Y2X06ZU_9+d_(4RtsI1mdW-md*%8BlKXam_SS-0Wk zn7@nEjgsMR>le)C43P$cpm0?cpwxm~OPL?}vf8`_l5%H`p} zeu5>e)1w6oOTtIb?-}WIrZ>z>@%?U##1a;dY>PQ${4}AFd^<~N$|?pA)3p#|G-(sr z%3ZV$$|p|T)ws&~=Wfeu_j7iODCj4(XcDzMBkiffybf4EqrR8*$#u?&&Uic5*g~Yn z6YqMY?ujIGV7DCFo=8-G@C5>}qY(TupC&&(88o1EO3t%;@Smm|;L%V!=#L!2asg#M zmK{t!2~dlL-ekMO!qmChiPG8W&O4%w-Y-;WS+mHmNb4VX!t+zVps)&jt9(2> zlU~M8Ax4WJ9&b~m9;TOy2L1&?u9|`XHOQIHH&klQ+Cq7nYa_IPGW!f?DS>^It^pFg zn<|qRqCOQEVPAq{L_U&9-!t%{@VjOwM<=-XtDvNatN5lL!^MvC(8jJ|Rv(ud$Ql8L zYraj3)yVXq7w*~dnw_{`5x+-`bA$XA9?Vtu)?Dm!Fkt6WLcj3DH>p>7EA$0UaqHl z4xh%5%j}uSB*)(2Rad%vhG!zJh_@)Y<+1jf%y@C%;RD3I=f+A1m;i&J;TxOb-hHAh z$y|Xx^;hNk6!_qBvIB2EqD$K)sW$=c^pBD0rh!u%EWX`Gq?Y zI<-0yaCdkN9D6AH8*ggR&;%Sy0{m~fr}T#%ma?erEL37X#_*?)xFvRraG_3fylQe0 z2;!>E(vt4|(U-1jzQ}Sc_#T2}tYOT@P;7RIY`*-G{|Wh~TtU9OJmk${J!@$jm31`l zlEf+J2xb6o)j`-B7sO&aun?^}_^7SMwCP>;o`wE;j>55r54P)b|8Vb5xPAu z6(TU5?scGZ6W!lOityfjgt-?&rNBVdKrvY@*Zon z*KKoBy|3{pnagWSi$+rh!U>r4*bHsrpl=;2~*~^V&y|eh;HQ7R@gYRq}B1)TQOlhjwHK~_s2cogn zXS>OrC=tC%5(rVqm98-3o55@CqG|5x69edZ%d#z6DfN7l8wR|QCop;?hT!z*0h+1$ zFHAb^bh{Lr_l$SmGMJHUqT4s!T+%Xz#z#7if$vjH!XGwp%Yu8tOZce;?0tE$OYts$ z534H3o!)xmk+njBy%AGsYN^;(&)EV&5(c7`` z!GIzLlEJjQswHXVefNyy0><=2nZ}L*f}6giZ3pEh#kv(%tM5cF4bhOlAIpJV*$195 z4G{~U>nxxsXp0Nu01OLAJtp+fSJPdxm4_nShd6%l`;<<;cw<_N8Esn=+>^e~j{JW7 zp23h;o$6`xG&2X)s9(08d(QJE>u{(H+5;`(gI=CP0V$4HfajIQTF^Upv#ziXHrVyM zL1UUSGkxSHef2ryk(I}#`J}W?IQ%f4;ouBo7;jfj>2aDuu{(mTto1kzd}iJvVKDB( z$eBc+d`e*0MWHcT2ys1j;m1eh+S?y%6%YIB^wM;@)bW>(dIc8*2kYWP4CK~jnl8F< zC_|{>3yMlJ_(eb(xd(go5%;Pg*Fi%^oB)n^q|W_A#7VH0jYV8s!A-t7FPKf{dme$8 zZ~Ts^N$60by^`maFK_o&u`Q1mCN-Ow#f+x|6m{-DMJv2MMrT71a_v^Bhmd=7mH93^ zf=zwZ31V-16A5F5BIKUs+brRk|Kuadz3RA}wfe@~j!9V1ofjnmiUg)#nxCNXd}lXXR`PF^LMc%e-nP z)ao4i6JBT=%f!U{U^S1q>#iLYa`60&zR5VPLNg`rB*JQQ^un2j|B z%LPuQ(wlL`0h%m@A4$a%T(XM>VH=>biiI`g-3oT7aGmQWbd|}V5fRQYB=2^Hl^L|z zv*J+6*kfN*e1T?i;jM{o0OP%eMwS)DMv@%bAC$&;HDA+M`Ea>_He2e6VbqL1c`iI1 zm#oT#i3OWG1?v_>(Cwzq&&)Wl-1Du_hPajS~Ot&RoW z*zztwzPTa>al($=cGXrJH24aPSs|KNteeWvu=bcyT zOzO-eCrZ*3w_CASEsQm)8!WOpa-~FW?bpq+c(t8))%@MPJ{P-zkO~!%@PP8knMixp z7@n?4zr~qeF9w1*iRoG)$!dAGS;`8sH8wAVI@}X z+;3O$+smVQ)au4*CO0mq(g(w*zg+Mr>hfB#-}9o|QYXV3?sHEm^<)ulFooZVs8&Cl#!;k{-62wz(VL zmcsVIt)C4;EizrOBv=|ISktiTPQ4etH`F~^k-0D9Y>vuKNS*ob6}&h5B+g`3vQx+$E4EKRI0M+G*MqX9^+pQ)+4k!of@X3KGiS-0 zb5uKfh(`0`j4Oq8Bk{N0Ejlinjeua&cnhI~_vc^c%f(!Ap?O8k@*3guT@!pnz?txJ zWNT@~&Kp{5w3o}8&=aVv3UOf>Y4PnA?dqv}il(q2{6+E_WZ9c^(>X*4 zoSOWK+oAWKFBK0oSfH`S*Nr@>o83qdEM-&0ZQ8W4aD%$L$(nL|-+v@L8|4hebWMj5 zJkDHs-_N8Ezpuv$eO%~MGgceZ63mlP$O~bw1=P5wt9QwwWqDzy2G^B8Bm^DF572hw)qj7F z23usRqE?_9%*r0b|49$VM&gTIPw> zY9zmPXo0|g(HqJVc*Thl)a1FudWPzgjMb0nQYCsrU_Y8G*t zrmRi<)tqU+9IRY)d66V%S3!1y*64c8o*?SGQ#Jyfq%bU(ms|j@DLTDm!bc{ZERl^T zM%@r`_#~>H6<#5C#l|c!J2ZU`j8NUsT}R$E>_~9DDB1@tLpFXbbbOhCny6fr;zvyf z|HQqvOo7dUNkYf2xeZ6jw-093S#Inzs?b|*Y-FMY0(f2`Y@hwQu=a*IT-w&l}S_gkknJG~(Tv|L7ue zJ1FmWGf}xv!niw-b(MLK_Qc>JUw?@?h)0*J$h7r;=*=>h)!aJ5wBNxCX1sUv%t?G# zCiMCu44#bNDGqowkrmg}g2}5Rm9=cCuWo{f4CqTCf0VvDOf45)3;a;0ZanavaVdx~3a7{1FcW z!+Ge-heWvLSybHh#Ip;Gsl!JygxoR8^MfWl!HISsA)YLVI!Tf+g$=vGSbMT_h{N|Y zCoZ)sy@oRH{4j>3vY*n^Nw=VKJ<0UHYoi6VTZA>?h{hioXki_wcH2GpHnY$C=zjIJ z`EBhEAm$vX*3SdCOx1lYXNvKHCns&r^-U0MJR>xCOQ2W{$}%xo*vUjjt{0IQzG{ds zS?`YZOVTzq{Cr^v*<sV9Nl>Kjd6;PhbO0N%(?eL?}dz^nDW9C3%%`CW`*)nhh ze)iJS9fINpWKT?0oz!~q72WPj&hUM)K$mrQhtlBP;%eOJVn+NSARNTa`pFRHK}XSR z5lx9YWuCVpH@SY+Q3)}j^ja_unYPQw%zH#aSpreeL#!kwQX^F9eL>Lf&^doE_)278 zzQg0VU(;a*B!6imQmn;^uecVKL7Zpd$o6-A3e(8b9E|o83w=vEgpg}-!HL@33!N%)Jk~!Z4X$|iePkN&U(P>dzA*+JkMQ8r z3d|7EI0swiEHZhFY#d!~($0u;o?7%@E;f~RrX1-q1y@HHd^`pVQ)f3Xf2WPrQY72V ztk6`R<`coq8b%rKdc3Zw8!#*?QsG}vkDHDkoIQQ#y;0d$<`RaQtY^DmVGtxP*)dhE zn;tQhfT$&DzU7<|L8jLE%`>F>c7P%sPk}_&5F)LYk{_!Q&M_3_R_lwDkJgu};g}eP z5r0KCN{ucn`l&cNO%L}0s6u00{JU8(1jhu3jy;b)H{zJ#pl>o zk8>)j7%%tQIFNYB$@1Y1p~#kZJHDZ>=)M!Ad&2_yvz}gN-W0HH)gs*ydLzb%ejekB_z%{ki$SYL-+AO<@y%T&TFx`wUAWX`C^wMCdGNX!%_c$u&F1UHr68#*v`}cxESEe&2=J>br(?bA5D^J*CqA~>0W&9%X^ka%=kJoG zmL8cxeek-oJrOo{2n%hFv95+9QuWD2f_9O2f0)6)KhW=eMI35K7^Id-e5)(eA`u7o zeyCBdQ#0YSNf8)c;JfHApA+6P(+V?_5mS6kRGB89pvh?ujSMm2WO^}23}0Rr`4 z3>kKnvq?mzHuyfM>7Ijz3_Pd;&)w$$K*YVBSA3AMR@SLA;L*Qlu4Z}O%d#m!ppUUy zaX@=8?=L|)5O~AIbIqA$w}5g$b))hYMoR1(^X=%kKWi`hsZxnw-6I8Yz$ZhkdBSQh z0)KgIA-T-#JDDG8fvP8`xjmn2MFyN|U2iFEPAvCitRxk=E@MA4ip} zG}L*OsW{&z>wfOg3eDDoMf!jSTh(M5Tpgk<1%IBo-tWw-lC0%h{bjkw-2%KoyyF17 zBHNg!{smI*jLx2JPDpsDUcz^ZE2eiO;%X%>Z0v7&zZtXE&O)y@yMT`}^Pmabt|x6< zl5c%nSmZf#IUVm$f604QAVh3Oo2D1P_SJ$=i&vbAlRBpq!fidrbf3^Pq-u`D!<->G zBoA9?nQLlWDUeafPC?=@w}&_P^LDLXwb5w)dUNDDo#DgTVTOL=@KK8&s)>TfwP#1N z(|hUwM~F$TX%9oj3A*+lPYly|Jz7gWu_EjygZ2E<=nmD=cfxcSs9X#pfd>VITKD%f zGjNsOF=;mOn|g5t!INsJ4lB^Nx;=5^HH-zJP3|L%*F-Icg0A_~ecsx{m%Wr8FN>jD zQR+sjV~hGVTC@qTtPD6Bn&cTU5i{#mGVn4d<9!>GF|&@8wO&KWm{V`@7eL+b5)aRG z!t z3k>+J0I2m$kt!(c>*#BOBU#k;J)?o$pQ5w#wQ`lrWN(kLQ+4LAYR_M~5~oa=5Kn~O zi&)nRb@o*XRGX-^NjV0aedl72J}|r?gd!iHiHvkZ#dmti6CG7O6Kjv9>`|;Jw#->@ zl^U&N38gTqLZOY3Ysm43%}+P{arKX`$%&%d{5YQi&XUu?DdlfFa)CHyosX#ZF07(qG1sCHFr7IQTPbqk(jB#x9^_h= zlYIQ5bY&HprQA^9;06L>!r`AKF8f>aY&r0Yn1yn@KTBv`ygKfy+8ru$ZnvM_+-v9$ zc!WWRU(3!e#3e9cX{zt9eIqwOdQ;i~_hmGDH3mZvak| zoMgDdgl7JAl$P1!$Dtem%OLDJ`OVRe^%A8(BSBH9P5G(E1C@Nl5VBYZIh?3A;%tU5 zuzy;I9I>{ka?XixzHKalsbZpNbcXV6FXnf zf89RU?&Ro;n3MCbxE>h=Z*dMf2fv8q9}+}KGvcnk1E)_O5ipMEILjh-B8MB zH_N5Xq4K)1D~ic5B9M6Ft<5N9%(}qjk+*rfvE(ZEX9h0hKczJ~hOKOPQ+?L%~zQa}>gGUI(L@zCWa^$e!x_j9Fn!3e5 z&c-;hbUgvGGZvqxe{eY8b|bTUFW^M}E1uNuI8Ltmv^t@C1tC$Sz*1aB{#)thvyf#w zHKyFaJ}{i-A^JyZY6nuklYza^>fjM8%gPD1T)L~@2?uN?sZ08k`L)Ghc40H8x;eVE^F9u^sh z-k8e?hWAnEWR~%lITY|H3yOJDdna0pWN^}+=1d!I+u87OBVMKb?UKTg4m#s5!zq-L z6#$*31u`=89FdkZj{%^I)`}eAbsT)01EC9PytjFOFnuQdJ?9k0OGB66whPp*K3J9^ zP_*OuYa;06TgWa2${TWLTfcLORTG8V@SfNw$z6l-AP9ds-4ugww7Y0r*RN<)l^?vE zX#nIp{;)GmQYTAYjQ~U^Uh;Vb^v>Fks4b#RT+S{MMXR~0ZB*-^Cg{MjjIDk*kvhTa z2LPDkKVndAL#5JGJ+}+`jUWR6h&iuFK-6p^X%^DOA{ME#u%Kg(pJ(S!3IOsuR31M9 zn|ccfam>Hn`ou=&S+{OZl$U2#}I)NCSIgA!Q(fFJZO%4H!rFK%(_)KxJE3^>gz0NA)Az8?VW zLp;U--B1-~2WFzxjXn z*YJ}(k2aC?wZDe{7yq+}{x$r+=dZwD!~cu_Swepe|8Mz2@z?PGmOrBZ7XH6qJUaht z`T1M^{0r*lwO&Bd|CIJ92HH85fLila~0G4B#2&fFmcw+RIw<8$Iw)XaK zL8WYL-&&Y}!oPD6y8r-J6#xwI{QFP$|4D#u|3g~%KPmrN3>*MJ?*=*uMF)>Y)qeN(6($X z?aV+C%(u2bEB$-e6ehp&2uz$zpJ|@mb3USrlMTtQI9h=-(8vZ9?{Wq@|LuW1(^MP2 zHGbaFKD)oK^XCny=Wc^6X+Ql>3M^R=Jr^qzD=!l(3k!*jrI8yO7spTHUl*Jw(4Ycv zgQOaR1B>i|4+P*^@MtN_&l_H$Z2Um!?+1mYTi0iZ4RH-^YMAFi*Ti=#RiIy->E zXCTiW(+KGFi_2h^^nhm%0N^+Se?9?F^qB@s55&^vIOx9f^OJdY&o`dS-+_#PC&vFl z52o|$KIlpP%!mIS{w@8Sd@lF1K2Z24{}(_0@aGpFo`=Vu@$qMV{E-j8=D{EN_=^vJ zX|HhC1(dY0-Px^nZC&E5IaL|1Cxh@fa^kCzkBjD#; z{F{#a9708b@;rX$fr4k<`LPqEjTe9twIJ^U@`51$4&*gJUJT?#Kwbsp6@SP1K_L^! zKW_{8K>knq4?q5lhyUI4fe`>kxe1aFv7q@1vgiPw<-_wckp81LC3^cX}h0hKon*l5!Z|GtIGz5j3wx&NrP!vG=_f{g1Wy#6V q!Qt7E^B<1E@|P)!q6BFFTp@vp;m^X)l>$KK8Z(f&hWpuC^M3##z2?pU literal 0 HcmV?d00001