From 6c10713e18b69839e6f08cd11c47772b800817de Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 5 Sep 2025 14:45:32 -0400 Subject: [PATCH] v0.2.1 - Nip-40 implemented --- README.md | 75 +----- admin_spec.md | 387 +++++++++++++++++++++++++++++ c-relay-x86_64 | Bin 320448 -> 0 bytes db/c_nostr_relay.db | Bin 110592 -> 135168 bytes db/c_nostr_relay.db-shm | Bin 32768 -> 32768 bytes db/c_nostr_relay.db-wal | Bin 3864592 -> 4140632 bytes relay.log | 86 ++----- relay.pid | 2 +- src/main.c | 205 ++++++++++++++- tests/40_nip_test.sh | 539 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 1159 insertions(+), 135 deletions(-) create mode 100644 admin_spec.md delete mode 100755 c-relay-x86_64 create mode 100755 tests/40_nip_test.sh diff --git a/README.md b/README.md index e3d1ded..9f8d6da 100644 --- a/README.md +++ b/README.md @@ -14,76 +14,9 @@ Do NOT modify the formatting, add emojis, or change the text. Keep the simple fo - [x] NIP-13: Proof of Work - [x] NIP-15: End of Stored Events Notice - [x] NIP-20: Command Results -- [ ] NIP-22: Event `created_at` Limits -- [ ] NIP-25: Reactions -- [ ] NIP-26: Delegated Event Signing -- [ ] NIP-28: Public Chat -- [ ] NIP-33: Parameterized Replaceable Events -- [ ] NIP-40: Expiration Timestamp +- [x] NIP-33: Parameterized Replaceable Events +- [x] NIP-40: Expiration Timestamp - [ ] NIP-42: Authentication of clients to relays -- [ ] NIP-45: Counting results. [experimental](#count) -- [ ] NIP-50: Keywords filter. [experimental](#search) +- [ ] NIP-45: Counting results. +- [ ] NIP-50: Keywords filter. - [ ] NIP-70: Protected Events - -## NIP-13: Proof of Work Configuration - -The relay supports NIP-13 Proof of Work validation with configurable settings. PoW validation helps prevent spam and ensures computational commitment from event publishers. - -### Environment Variables - -Configure PoW validation using these environment variables: - -- `RELAY_POW_ENABLED` - Enable/disable PoW validation (default: `1`) - - `1`, `true`, or `yes` to enable - - `0`, `false`, or `no` to disable - -- `RELAY_MIN_POW_DIFFICULTY` - Minimum required difficulty (default: `0`) - - Range: `0-64` (reasonable bounds) - - `0` = no minimum requirement (events without PoW are accepted) - - Higher values require more computational work - -- `RELAY_POW_MODE` - Validation mode (default: `basic`) - - `basic` - Basic PoW validation - - `full` - Full validation with nonce tag requirements - - `strict` - Strict anti-spam mode with committed target validation - - `disabled` - Disable PoW validation entirely - -### Examples - -```bash -# Basic setup - accept events with or without PoW -export RELAY_POW_ENABLED=1 -export RELAY_MIN_POW_DIFFICULTY=0 -export RELAY_POW_MODE=basic - -# Anti-spam setup - require minimum difficulty 16 -export RELAY_POW_ENABLED=1 -export RELAY_MIN_POW_DIFFICULTY=16 -export RELAY_POW_MODE=strict - -# Disable PoW validation completely -export RELAY_POW_ENABLED=0 -``` - -### Behavior - -- **min_difficulty=0**: Events without PoW are accepted; events with PoW are validated -- **min_difficulty>0**: All events must have valid PoW meeting minimum difficulty -- **strict mode**: Additional validation prevents difficulty commitment gaming -- **NIP-11 integration**: PoW configuration is advertised via relay information document - -### Testing - -Run the comprehensive PoW test suite: - -```bash -./tests/13_nip_test.sh -``` - -The test suite validates: -- NIP-11 PoW support advertisement -- Event acceptance without PoW (when min_difficulty=0) -- Event validation with valid PoW -- Configuration via environment variables -- NIP-13 reference event validation - diff --git a/admin_spec.md b/admin_spec.md new file mode 100644 index 0000000..b774c0c --- /dev/null +++ b/admin_spec.md @@ -0,0 +1,387 @@ +# Ginxsom Admin System - Comprehensive Specification + +## Overview + +The Ginxsom admin system provides both programmatic (API-based) and interactive (web-based) administration capabilities for the Ginxsom Blossom server. The system is designed around Nostr-based authentication and supports multiple administration workflows including first-run setup, ongoing configuration management, and operational monitoring. + +## Architecture Components + +### 1. Configuration System +- **File-based configuration**: Signed Nostr events stored as JSON files following XDG Base Directory specification +- **Database configuration**: Key-value pairs stored in SQLite for runtime configuration +- **Interactive setup**: Command-line wizard for initial server configuration +- **Manual setup**: Scripts for generating signed configuration events + +### 2. Authentication & Authorization +- **Nostr-based auth**: All admin operations require valid Nostr event signatures +- **Admin pubkey verification**: Only configured admin public keys can perform admin operations +- **Event validation**: Full cryptographic verification of Nostr events including structure, signature, and expiration +- **Method-specific authorization**: Different event types for different operations (upload, admin, delete, etc.) + +### 3. API System +- **RESTful endpoints**: `/api/*` routes for programmatic administration +- **Command-line testing**: Complete test suite using `nak` and `curl` +- **JSON responses**: Structured data for all admin operations +- **CORS support**: Cross-origin requests for web admin interface + +### 4. Web Interface (Future) +- **Single-page application**: Self-contained HTML file with inline CSS/JS +- **Real-time monitoring**: Statistics and system health dashboards +- **Configuration management**: GUI for server settings +- **File management**: Browse and manage uploaded blobs + +## Configuration System Architecture + +### File-based Configuration (Priority 1) + +**Location**: Follows XDG Base Directory Specification +- `$XDG_CONFIG_HOME/ginxsom/ginxsom_config_event.json` +- Falls back to `$HOME/.config/ginxsom/ginxsom_config_event.json` + +**Format**: Signed Nostr event containing server configuration +```json +{ + "kind": 33333, + "created_at": 1704067200, + "tags": [ + ["server_privkey", "server_private_key_hex"], + ["cdn_origin", "https://cdn.example.com"], + ["max_file_size", "104857600"], + ["nip94_enabled", "true"] + ], + "content": "Ginxsom server configuration", + "pubkey": "admin_public_key_hex", + "id": "event_id_hash", + "sig": "event_signature" +} +``` + +**Loading Process**: +1. Check for file-based config at XDG location +2. Validate Nostr event structure and signature +3. Extract configuration from event tags +4. Apply settings to server (database storage) +5. Fall back to database-only config if file missing/invalid + +### Database Configuration (Priority 2) + +**Table**: `server_config` +```sql +CREATE TABLE server_config ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + description TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +**Key Configuration Items**: +- `admin_pubkey`: Authorized admin public key +- `admin_enabled`: Enable/disable admin interface +- `cdn_origin`: Base URL for blob access +- `max_file_size`: Maximum upload size in bytes +- `nip94_enabled`: Enable NIP-94 metadata emission +- `auth_rules_enabled`: Enable authentication rules system + +### Setup Workflows + +#### Interactive Setup (Command Line) +```bash +# First-run detection +if [[ ! -f "$XDG_CONFIG_HOME/ginxsom/ginxsom_config_event.json" ]]; then + echo "=== Ginxsom First-Time Setup Required ===" + echo "1. Run interactive setup wizard" + echo "2. Exit and create config manually" + read -p "Choice (1/2): " choice + + if [[ "$choice" == "1" ]]; then + ./scripts/setup.sh + else + echo "Manual setup: Run ./scripts/generate_config.sh" + exit 1 + fi +fi +``` + +#### Manual Setup (Script-based) +```bash +# Generate configuration event +./scripts/generate_config.sh --admin-key \ + --server-key \ + --cdn-origin "https://cdn.example.com" \ + --output "$XDG_CONFIG_HOME/ginxsom/ginxsom_config_event.json" +``` + +### C Implementation Functions + +#### Configuration Loading +```c +// Get XDG-compliant config file path +int get_config_file_path(char* path, size_t path_size); + +// Load and validate config event from file +int load_server_config(const char* config_path); + +// Extract config from validated event and apply to server +int apply_config_from_event(cJSON* event); + +// Interactive setup runner for first-run +int run_interactive_setup(const char* config_path); +``` + +#### Security Features +- Server private key stored only in memory (never in database) +- Config file must be signed Nostr event +- Full cryptographic validation of config events +- Admin pubkey verification for all operations + +## Admin API Specification + +### Authentication Model + +All admin API endpoints (except `/api/health`) require Nostr authentication: + +**Authorization Header Format**: +``` +Authorization: Nostr +``` + +**Required Event Structure**: +```json +{ + "kind": 24242, + "created_at": 1704067200, + "tags": [ + ["t", "GET"], + ["expiration", "1704070800"] + ], + "content": "admin_request", + "pubkey": "admin_public_key", + "id": "event_id", + "sig": "event_signature" +} +``` + +### API Endpoints + +#### GET /api/health +**Purpose**: System health check (no authentication required) +**Response**: +```json +{ + "status": "success", + "data": { + "database": "connected", + "blob_directory": "accessible", + "server_time": 1704067200, + "uptime": 3600, + "disk_usage": { + "total_bytes": 1073741824, + "used_bytes": 536870912, + "available_bytes": 536870912, + "usage_percent": 50.0 + } + } +} +``` + +#### GET /api/stats +**Purpose**: Server statistics and metrics +**Authentication**: Required (admin pubkey) +**Response**: +```json +{ + "status": "success", + "data": { + "total_files": 1234, + "total_bytes": 104857600, + "total_size_mb": 100.0, + "unique_uploaders": 56, + "first_upload": 1693929600, + "last_upload": 1704067200, + "avg_file_size": 85049, + "file_types": { + "image/png": 45, + "image/jpeg": 32, + "application/pdf": 12, + "other": 8 + } + } +} +``` + +#### GET /api/config +**Purpose**: Retrieve current server configuration +**Authentication**: Required (admin pubkey) +**Response**: +```json +{ + "status": "success", + "data": { + "cdn_origin": "http://localhost:9001", + "max_file_size": "104857600", + "nip94_enabled": "true", + "auth_rules_enabled": "false", + "auth_cache_ttl": "300" + } +} +``` + +#### PUT /api/config +**Purpose**: Update server configuration +**Authentication**: Required (admin pubkey) +**Request Body**: +```json +{ + "max_file_size": "209715200", + "nip94_enabled": "true", + "cdn_origin": "https://cdn.example.com" +} +``` +**Response**: +```json +{ + "status": "success", + "message": "Configuration updated successfully", + "updated_keys": ["max_file_size", "cdn_origin"] +} +``` + +#### GET /api/files +**Purpose**: List recent files with pagination +**Authentication**: Required (admin pubkey) +**Parameters**: +- `limit` (default: 50): Number of files to return +- `offset` (default: 0): Pagination offset +**Response**: +```json +{ + "status": "success", + "data": { + "files": [ + { + "sha256": "b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553", + "size": 184292, + "type": "application/pdf", + "uploaded_at": 1725105921, + "uploader_pubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "filename": "document.pdf", + "url": "http://localhost:9001/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf" + } + ], + "total": 1234, + "limit": 50, + "offset": 0 + } +} +``` + +## Implementation Status + +### ✅ Completed Components +1. **Database-based configuration loading** - Implemented in main.c +2. **Admin API authentication system** - Implemented in admin_api.c +3. **Nostr event validation** - Full cryptographic verification +4. **Admin pubkey verification** - Database-backed authorization +5. **Basic API endpoints** - Health, stats, config, files + +### ✅ Recently Completed Components +1. **File-based configuration system** - Fully implemented in main.c with XDG compliance +2. **Interactive setup wizard** - Complete shell script with guided setup process (`scripts/setup.sh`) +3. **Manual config generation** - Full-featured command-line config generator (`scripts/generate_config.sh`) +4. **Testing infrastructure** - Comprehensive admin API test suite (`scripts/test_admin.sh`) +5. **Documentation system** - Complete setup and usage documentation (`scripts/README.md`) + +### 📋 Planned Components +1. **Web admin interface** - Single-page HTML application +2. **Enhanced monitoring** - Real-time statistics dashboard +3. **Bulk operations** - Multi-file management APIs +4. **Configuration validation** - Advanced config checking +5. **Audit logging** - Admin action tracking + +## Setup Instructions + +### 1. Enable Admin Interface +```bash +# Configure admin pubkey and enable interface +sqlite3 db/ginxsom.db << EOF +INSERT OR REPLACE INTO server_config (key, value, description) VALUES + ('admin_pubkey', 'your_admin_public_key_here', 'Authorized admin public key'), + ('admin_enabled', 'true', 'Enable admin interface'); +EOF +``` + +### 2. Test API Access +```bash +# Generate admin authentication event +ADMIN_PRIVKEY="your_admin_private_key" +EVENT=$(nak event -k 24242 -c "admin_request" \ + --tag t="GET" \ + --tag expiration="$(date -d '+1 hour' +%s)" \ + --sec "$ADMIN_PRIVKEY") + +# Test admin API +AUTH_HEADER="Nostr $(echo "$EVENT" | base64 -w 0)" +curl -H "Authorization: $AUTH_HEADER" http://localhost:9001/api/stats +``` + +### 3. Configure File-based Setup (Future) +```bash +# Create XDG config directory +mkdir -p "$XDG_CONFIG_HOME/ginxsom" + +# Generate signed config event +./scripts/generate_config.sh \ + --admin-key "your_admin_pubkey" \ + --server-key "generated_server_privkey" \ + --output "$XDG_CONFIG_HOME/ginxsom/ginxsom_config_event.json" +``` + +## Security Considerations + +### Authentication Security +- **Event expiration**: All admin events must include expiration timestamps +- **Signature validation**: Full secp256k1 cryptographic verification +- **Replay protection**: Event IDs tracked to prevent reuse +- **Admin key rotation**: Support for updating admin pubkeys + +### Configuration Security +- **File permissions**: Config files should be readable only by server user +- **Private key handling**: Server private keys never stored in database +- **Config validation**: All configuration changes validated before application +- **Backup verification**: Config events cryptographically verifiable + +### Operational Security +- **Access logging**: All admin operations logged with timestamps +- **Rate limiting**: API endpoints protected against abuse +- **Input validation**: All user input sanitized and validated +- **Database security**: Prepared statements prevent SQL injection + +## Future Enhancements + +### 1. Web Admin Interface +- Self-contained HTML file with inline CSS/JavaScript +- Real-time monitoring dashboards +- Visual configuration management +- File upload/management interface + +### 2. Advanced Monitoring +- Performance metrics collection +- Alert system for critical events +- Historical data trending +- Resource usage tracking + +### 3. Multi-admin Support +- Multiple authorized admin pubkeys +- Role-based permissions (read-only vs full admin) +- Admin action audit trails +- Delegation capabilities + +### 4. Integration Features +- Nostr relay integration for admin events +- Webhook notifications for admin actions +- External authentication providers +- API key management for programmatic access + +This specification represents the current understanding and planned development of the Ginxsom admin system, focusing on security, usability, and maintainability. diff --git a/c-relay-x86_64 b/c-relay-x86_64 deleted file mode 100755 index 2b58d2c7a00ee2401fec98e1f1aac74c1a239743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320448 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�gTv9?rDI zx6qCwao6yLIRnB>1_UKV`V@sxumUJxCAIunSA=2z}-i&~<`gBKH4P?u5*~}>G5VMI0 zR#ROg?llp|RE>#@NOL_(J4tG;kD?_*x}2HL%{fp9RBAH=SJ+@354b{T_Fsy^YHc03 z!HexdlQr(ByccQVMhn7_hEf|sCe{G|{j^$>jLd*(8kn?06w4R}g9C=ONMJI%7A=4u z?}K4xtbx|r9Jm$@vVXXKtNS!-e z46HUWc>+Dug^QbDV!$__DGIt4$>lsb=Zw>jYopDcogy>C3WNy?VK|>|1{ng32DLG# z<%1;GHV?r>Fkm__uD{gAvP_ULT?}M9ftaa9q*1cSvszPVYH8?JLpI&PARcrGOIpH? z;~R*SZf~*%B7iX6w6m5ujElf2QEqXWdn6t?=L!QsM;LdC#cG;p$p~{4D-jb~cGHr9 zHfgtQvV_TSifP(nEn`1UrUukzv1a28Yqe;ZCMlpz-Wcp*n&w5si(2kM_j*Qm4vA*CNEin6xUHoEe;q3>TL*S zkmr{5RZa;oco9jWnl+Ysd!5WcgRAOa7s|b!%^M7g7sK9cwzsOy zCGF2Y>(Q2Y5E?j!DKMN{=0}sO&!XO$X*vY3uq=_=*%fFjZ-C@6*>)am8i&PP(zcrF z)wdvVd0h|9)C}7oYT*LU?p+8#C!wbpo!DU=kLTJ;$kzU&6uar6&^kWt&xRae4GFka zIheJfoM}nD8E(9Bhw+@7uht^}BF)@I^K%h1PLmnz3_c{9)6>?(0G-j19ZIa!zC}XS z&=hoT0=m~Ofpz|9+}1EboaW}@uq9k`PuncTjvu-hZ60MdH*!J73$pFMl?) z(X}ODqXuxpZ4~+Bu>xzw%3zNq<{n2HJyRH4yv6=<&Ek-?Zfy2rJ!3JA(1tL`8{Ug) zZ+MNc@#ZZ~RP#f3Tx?_dVrt(S%wk(*!88SVvCU2wQ_qwEh*Dr+iMNCSp0&+{x5T;~ zMiPS&ie9$FX2(mYaefvZTbOmW&c4J{;3bqHKc@SHvaDe+QiGGd~cPbi?)P$7^YkVdPX$v;sq0O3KRCt`Sbxtj1 z^}w`>Se926%%n5Lvdz}QV=ZV+_R>G=Ftq3fo=h+0F_>`#7c&rZVGwQzEvBLxta2I< znLNWkFlpcgZF7yYq=o6UQE2LFL&y}!2IQ#^o{Ys-Y=Qs8l+D|*@!|l*C zyY)bOrvN(=7bAuC0<2v4^ntyf1sOgYs9>5EAabS}R;iGCOjxG0eMHt96o*gQ8zF>U3f z!QKhQJ!=U;^^GQJglyuteBjq=0VNR8;Vvxeru#RbK3RdaFdeToxTf0BLdxPH(@Wx^ zB!UFEMe8_q-h#!|L!4gfu~fALgVKmIn4mKgB!bjJ?#3f1_9Q)S@A)?YTWw*au{-{T zOFWWgi9d$jhQ4@&chuu{z>vm(&xEzfc*3SCOhRdl#)Q=q2Lt zx73-VACdL_c$T8D1iQtq1dIKsQY{#$(GielRmjmLGg0k|IZ@r{R*qOaXM|>uq3znT zfc4e{(@l?cLHn82-pM5b_LuRq1eE~IfD9*MEiBH~c;q1C(GsZc1QSj=Gr*Ib2g0Ns z+8w@-L2eT6jdG7xVG@IVP79i{_1rLIMZ{(>Xy=w1)28jNeTITENu+GT?V)|TX)ODu zZnTA##%#t8C;>Mjx_7V8I`H0PYb=T87DTI;aIL^gEVa#yB$A&JPg>tkqFs|k(13wd zF_WUjB!if)x|67iDQqkqnqRl#2A0@08x029P|`$5(k+o=*4w4a2;}1$W+lOV6U1#R zC2b(k$2&YW2Q3j)1z74-lHF_PZH@aPUn6bbqI<%#cHfUi?{la7rv3oA{tjHp|oz+!>efz~qA;m5M zruBWY>%aD3WC6;#+wLG%CL!*&(+0649^LIkt=*+&UDP(su|#sys-4LQ1%%@2(&LVe z@j)YY@R1di6-Aci>kUa%FB5r5Hx4JWR4ms?R@jqS>w{Jbthm_&vTV-#R%bH)B(qDG zTFJJMK1OC+5;C8VU7Q9Zd(SC|7__=T##7HG>CIS*VHsf(W?i1LXO*9i+JsnlHZz*Q zBsq3GrUern3=u)QVtU5YI7n<^T`#naLJPSRA!TZ~MH4ZF4wD&|eUOC)ZdUgx4x_bJ zVCNBl+g+u$t=y?>C()tl=Do3Z$<8QPqX_dIRT0{%)k7q%$k zUjMXsm>^gx82~V;J@e|;oPlWwI>v9bLrLm@eiR@=|E2U()EMK$I@e3a!Z) zT7-?H){dQNIWk2N!_t&stJh2$bZOP5Q_*VObe}PK3Bx$6A7;487cCXN8PghrQy5e1 z$6A!OpqH{ip6Rsx>`Xw4BQ-HE&BOSav<7ZQmky!Qrme-K5#4s110r#QZ}Lqh4z%-( zv@MiiSVoYi=97~Vs4+0XN*lCxfN7safyiT9w{j*CvN!53oz|B|pEjF)+{a+TC~XHv zECyB{S&ZlFPqZ_)XUPR}oG(YQOoM6D8vip=1}4L-=i85-XRvk*2w+Roq?6;T6s67c ztPY{yH90=C1Y4a`z|d{1{{s?YO^@D$xUxwVpwvxv`N>0{jF33y4t{h_@8=i@^Q*MU zG%sE6v{=AI0n^R;q2=FR;l!|~*sK-RfTClC+~9oMsLwTV)uS5lbX!R<)0}PP4byH~ zBgf3T#dR*MwCjWq+a;B}+I&o&LmI2;8xKuH6b7?1KFzsLna8=5P z#T>$=i}A+JirAFGo#$aDV*(R|qYO*XijmXJ&W(j>vse=C#U3+>D&umKv88gZ$vy*F zBmrE*bx@NmP%Pj zwN)z|XzXS>8PEK~5}x%xzXeT`111Oc4wjMUGO$~dCa{%jmSqz&ZGjfLHN`X{lphKc zrk(ZT3w6#f0^QswPLp8S6uTCVRy>UPZ0@=X-{9GiGYW#) zu9Xp3f`RUtv4vXy^ebSljzL#uRG|hybCgfoS-oHqi?v2XpQ+G*%?Usn`68e>Fcq^e z@DPceAwjR8I57DtUVX%7b@F7Qua(J*bN2snvE`OuwN$6_vnX`+!Sx0MuAayyF$Gj2A@kVszb zTQQi7H&#{&r!D~ZRC<4gokcqUNa4Ae5T?x#&1UO2fJTBDPh0!sf}FZj6__?(wZ35n zEsXwQk3s=47wc}Av}6lL%fYa)31%$@x9M!}otn2S4H>h+jxj+?Y09Kl#tutlP&;jy zV`nF1hRx+riENPqxPoT2(yFkDMuuaPNh(Z&G`U zDFY}Rqb){Y+7ts)q*>N}Ia&a0ry|Rmuj$$7V@}V6c1jdv%per~E*p2dTv^W8nZA`} z!4}DwO}aI%Y?6rqZ7R!j<wp!>~@BW&4C!*#E&LjRH#;(+j9c1^}m|^YKaR2Ox_~ zY-BZ;Z&RYbhs}&pD1gG?IIsO|AFq)kt0_$XcnQbMEVOBwjhu6|%uxEm?f=%T|*i4H4h;odhNYjacGfkdxjl zSD+1GWxI~jfi6fo#HAhn!1Ud%@iyAA2hUELa_x?HvD{4=5Um|(B34vSB5#sGVK%W@ zi-EK;@n(k2!ka9C)G=GL=9{HLa@%CPmKaGh5J61{eRHJ61FV98D ziHUEX^>OC(2UE9wXV;_JZhL+CVLLxQ{KoBGyJpP+(dROMx#r;)X8z^-4@a+g>&@YF zCaj$H;7518wCa+_u6=mN$hupap1yA2ux!CWrzS@K&zKc&-4Orj1(}&IeqQ##Yd_hr z;I4T)t$6j~&l+$3L+ytr%spo9phNB))9~21n~vT0^R=5t6mEDc@X>>hpL^;2JBe{t{&Q!gBF&xiw_IAFnqefJpq z!GW7j`=Vj=@qf7Es%v-IVZyxEYkq!7ReC_=rrVn){c^zK#lY8&yyb;^cYXN!q4RDon_Cn+V(+WpyX+6M znx>DqY5Fy9+;#tk@inJC@vA!q?s?=>-zs}^=1*Uloqn^XY0i`D=Ktv4+h6``Vr=~v zw|{i{hv#3OS#&~&${`^L+*d@iEj*e@cWZy?J#KFrnZg}a?HZRV<>C!TcjDW{$ms;=QcU|oH5@se0WJdr$;vm@EYrskHVCF2e` zbo^n5A2H#`gAVTArSt#RYCHERJZjB$p7%T+OZf-wH*;O`leXMexCj>Y$Nko}+$%fr zt;r2-xeexiTU#!O`-VH(a+P-f-nQJmaM3T@a(($%=QhASVep~0+%o7r+LrqQuK!hA zZr1jmw*@9)>0@oVRc3#@E%zGqHn-)r!9`EBNJ?jog{|;Uu_xmt5{**b3Jf2lFl=T>lN;v)l#m z{0o9>;Uc)nxKA!OWH8SO@?Id^urKcp!Yyzk4DQE2fNk8L_Y>hpIQkoe8^wEta6P;U zZa9eNz^!o5uB3~9415?I1Sh~CoCQnZB6A-@c(?&>fUR&742~tgumrvjOQE+L&x1qY zMmQR7fu*n&Rv8Z_zi@pC>3}8Ua=C4AIUG0ycQ_1ggr%?*E`Z)4ysHm`a1|VMDBlr) zTi`}>AJ03Oa1neTZh*svl214ZmL5iUxE!v6Ti_-*=DLgY?1Cu<}U$8ArGQu7+FTO|Wz#@x$eC8{7g*_;+=eAH_SKuw+s$ zw;8s=!F$mjkEYyV>oJrQ+zL0qMWv({E{Ctc_3(YT5qf*$9}b2d-<%i;gK!cog{Qzp zFa}q{Rd54b54XTO;a0fWI3<@W+J|_`X@_tSEP-3$8kppt{%wV;;U{n-EDG}csrZM3 zrqPaI5LUv~GkFf&ay;qUm;BDn<(lClxE5|bh4A|kPj1GdiRK3sG<>4L#(z6Y^C z?r;(e*3gb%C9H>A;VQU3OgX{T5!wMPsinN(MmTsFNV6dL{4L8Di=tZdqxE`*D zrHkpW=Dvh-9Zr54$Oqhz;6B_6?=<%$5 zpl?ym2NG@--_?MFE+u}r0d9homyxf7C|@`j23PYwF)aNyeQUrD=$gRUZ- z(EboB?yt|%6TCjngZk_-uz!*LGxg?96ZY<9Y$A)ao&F{vJuAlX{F2u)cJ<{VFlcIE z$jlv!n~Iiu$L>Dyz(a>o!+!V$aKaDUawX=VKZ`fRuM+oG3$H&*&MJNre%h9sR=~yN zz@SwHM7^@GED&7Lw=mvkKwwB&V9?}1(bQu8@lU+m&+n95+H#j!Jovx7U~*u{WrdRi z!Atv24vbvYuPjiqa=Y@tgcbd#1u6@#AchGzl?6uP1+N4lw&}$M<=mLs<3LxJRM^)0b7mG>-jl>t#dto0Yp*IWC=)31teh^!eHHH2|N0rz z0?P{u59|FQ(~Ap7^a)&CP!U*NP%wpyGCVIM{&$Ig-Q8`uS9^)S!pf?=Q(0~8TX=-U zk6X9Gnq1rz*w&Xw`^^hn+;3)Jb-&8M*1iR2<9Hg5X?GKcnFHjqfI^(b^XsY8FMiRM zyIOVIdtJFQoEF&Hr*PlipI>Hm66AL;@yxovEq4&t-ps(Dl?9ap9Q*V6(U3JNX_+*@!; zU}M3VSQZQj1i9_E^y7-H(_K$^)A1N;+@JNodvP0$TaCHQvHX_@hO8(gsSWfK9#Td* z6yr9S;Y; z20zl4Yv`rj%xLf9uH76TXe}tL>%HBW$nf(|eB(E@)YI0KoJ`(;-zxl$HNVpXgF@Ufxw0Ae zSTF9axL?qV`!?Lyb#t#GoVt zDefjMrakubGtWNf#*2F5oyGiPzT)j@uOW)K{83sd{pGkWEp`Ha*Ap&7xOoV=Ftm?V1%>z1%-lF+vaOu^8<-3IPWLY_px!!L>WIxw1Df|4iiYWrZ`_%hr{T%frmT`fn7z(y!NN9%p$7^D7@fJKNfp zo8Dd~$S<}3Stg@9+P~G>H+wCSnZ<=wR#r26^ow>q>=vH0nK^m|ZMS<__0VBj`xb2N zHQCdPM-zM-aXtNcTkg;8<#fEs+_{0R{R&T_b87%*6!PW9NG?`=*_OKwyH{c3ZNYa< za9EqL%3QRrEqAc`YY&;(QJ$9nwqEn^G#kG^ts%ZGJgdf@#ou&(H{mwAjdh|zEcEdn z&v0_t)meF<)cSJot;G84C&abY%lWbxdpW-%+QOthx!gavw)ngBS5ql`g`~U~&CafA zP1B3fn|1Bv&3J-V63-{Z<;Ktv+wx-lKmpjh#KCM0Pbesg^iyKnPO)yn*y9B>$@cSj> zh?SFc1qS(*=shD>^g}!EQ&>#$Ol@qJ$K}O^0dvD&yW1?P!O1#X>nbf~jlkNXi<5cJ zDx3GL?2C@GqTf{FEZE#F%4x+mUT-99cwjE~9@nNjbm(C#O^;n+dVN8x+mojkPwnPX zUX1=*g!p}iXsnG4VZH1N;?3(x!*CmoThR`=++?n;|E(%$u<<5HYW-5e*}_)guLOU8 zHGlk#=2wr~o`GEMYIB%v{fBZ`QE0*`>9-0L*6GDA5hhdC;(rzXzh`ohGU?IYJNKzY z1%K+bPca)RGMR!V*G)5Fr0~<~vHrJ-^}3_6+nbED&7aEy$%3Ey8iL=GCl@Ku; z%O8CVJ!(ba%7Rn#PQLtOJ$KR&)`=`0r>{62oIbdsZ^5~yugrLinnMwv*`cqPqG_@9 zU0Jw_wqoh7B%V8or?Y+(#;s&%E@yJw{;VvTaf{)`GNscsXHXVHxLl2UChzXXnOQc> zxO=y7ueq0d7T;#>Ez94dY%M->Z^iwBZtj-OZMd(({Y|dz&ve3ptX0?Vp3B{B4hi(% z;{!#r0)y%;0TyO7_lx%EnvYW4%5giw!tmTUp2u@}3hpu7XPG-~@luu~@-nT4ilIxR zsaF)w$zS5l(z}{)7xWU}O}O9kzlg7uaGQFGZyWCK|A+Be{gfaO`|g?Z=W5i?iUM1~ z@z=y=ac?B|s<3y@bEG}b$92hb5U&>yu99%8EFA5Lr3{mWr(#YkJ}yvX<#`i+?#Iu6 zQl29T*Gjk-3D;n8JDGsoU0FCQ5Io249@K&xnT=DI7P6|a%Jlh_=<_87Wjq5- zl{@~h#WMo-i1r@l=W7;mT})h^+r}c?*5J0kJ&QlftL<5Cz-@??AAe-iyBN3o56I<4 zm;>YJ@zj=0uuZO9&%G_&W7^*SXR_&j+&AN%usI>};h*Tp%u4ze276zNaC5f{h+-gn zpzpG$Tx#)A-ksy?SU1rev$F6bdQvZQuo*Tj>~%W@MZXt!=4_AnQ;%n#^XJoRY%i9* z>iPdpzF70U+tx&w=k%uITVHsK_%^Udy)W0+7giQn=}x5*i@X?4eW|dG++W$tx+>p#&kbzrb2=L?Rj`a*43-GC^@GBINlYHrsz7}izN!lX^|J%XP@sNtU=i{1 zXMJE5&)RlOE_aVPOb=A1sU=(du|9AU_tqVo%Z;;ptVdQ!j%~z!6Ylx`73B7dxV7ST zh52>*$TTK4$FTlaZ+nq@mF2nIp%y29L4NPzwhXtfWx|+XWum#@K+Xzm!_PVk)M+kQiq*~^ zEUVDEj+4dAkF-YN##WP)7j~7iGbCp%I+Is+R$&`)46?TD=JZI^&g&Ndun3Fgn-g1C*x4H4r0$}z{| zR*GA~Tsr!MTbu47Crb-v^(G~4>{&)U^~7_b;?elVnAyITR8la9emS+%Xf{n_PkTr8 z`^RSDx`ntH)~)Ua%~t=ga~*f$o*z3bPj<#*18#*T5BRgR6a@)?TrT&d?o3lTXH$7z5w7~j41$X-ccl#JxR%~^;ny`K6aNbE_d!(at z8`;vQ@SNV;h+DU{ytWeGot3%Vsa)G%DZfvG7;`y;0lq@7=(%QA#u|ba$Vv$|VPE72 zarCkB>RmS}DLjqDby@P8TFh3ti)9kQmJ!Fud7PQz+S*Ys`pr$jS%D4v7TnS;p0Z+V zhxZfy6~bTlRdwddYG$CdPvL{4r2F{T-jDk3N4cEDS)zX$kH)_Z1%*yb@i(f`N>NQ{ICV z-e8^XGlBSu7(mvYt~q#bb;0OXz`{kB>SW?B_JOMZLk51ifjb?@cp>ch%! z4e_-u%;la^eCj_=Cq>rkY{E1)kqb|-@Ywo@0mHydGW)Vg0a;D7nZ98xE7Gd2OLD&OH<5rH_U48tt{FDA(ZY%4n{z=)H9NR*CcZSiy|8;y6U{S$ed(~IU+}iq{!_mtl z($mT7KS`U-M6!YDC@qTu)5`*-rULg=gV-nvlEw`2R@U-wOmOY%C)T)r>5s)I{pC2X z#m~UHT<#g=qjNcTZUd_e3eUB^-K`Bc`BzFjt;Dm2b8&nA(|F1Q8~PM{;&;W)P04Lj z63f?rUzfmtw**Q)@Z;P1zR#8-6LyUM;-vxKzE<|{i`R=ci?@rv6dw^ci_eL#h^^u~ z;z!~q;+JB-?fvJ!Kfvce*>@3#iu;Nq#j)Zc;*nyRI9;4AR*4J58gYr35?jRO;`u6{ zm9pP4*iYvw*^^Gm_Pn_4SBT#e*NZoZw}^L&_lX}A`|%Dv%;zCvd~VeJ$HiyFUyHvJ zTgA7<55!N!FU3NY^8j%tai|y+_t?dM{z%!!isQwj#4>TFI9EJXTqM?u$-Mhce*Dd{ zpChgmFBPv8uMxjD+7EY~>^F%&6Ymgja1(jY`-SWeiN6w`6rUG=E4GSz4D+9}_l`c_ zk^5Hh@8Yoi{QEiCw^Ka^#KGbo;(p>Nah!O#c(lkyvFoSDizkYwi#6h6F(EdJXNl*F z-x9A7*NUf%_n-59*?%P7EZ!#mLVQqsRD4=|L3~AgO?*pyU;K->O`Q2h8!-8I>0~b) z=%;6ZxU;zG9pB&8Z~7c6_nbu~9rrJWu?lc$s*W zxK6xYyji?MyhprWd{}%!d{%r>{GIrQ_>TC2_^J50*k=d79Q%tqh`We;i2I2n#L?pO zJNw}ek-ceG-+qMblf*J{syIuWE1oQ#Ax6ZQc&6Aao-3{pFA^^ouM)2juM=++exZxKJ$aEDjO(5#Ju=m)i*0M~mac3F5KhRPlJR zN<2+GL#z{HVp?nw&kW9_2ja)#XJSt5Fa2Z( zaTjq9aX)dCI8HoLJXWj_j}xoJ`C^S&FUG};*dm@Mt`sj3zb$@O{Jwa-c(Zt$c#rs? z_^9}V_^kM%_^Q|{zAe5d{zd#u^rW9`Ck_+`i$lerI9xnXJVcxz9xF~!`E9PvbP zffyEJVn$phUMOBFenA_27KTo_!yj;9WTqj;H z-YniG-X%UDJ|aFTJ}dr4{Db(8_>uUj_@&q?`A~eIFDLp+A1@Mj6bFmDi~EWr#WCXH z;t_lK@f{_5sW?rXEuJWzAx6Xou~9r%yg*zfUMa2>e<1!?{F!*C_)GB-@k#MH@n!M% z;-AF##E-?#!~)IJwigG9-w^i_hl``dL&c-S$>I!gu6UAoh8Py3Vp7bC%ft)BRpJ`) z8u5DZW^se~3-J;0N%1-HH)5;!uJ{*mo0t>(f5UGFJBWkDy~KUR1H`f7Vd5llideU| zAKwhwXNxC_r-_TiIHC|b zdFg1mA0kc=%fuPtT=6uqMvRJaF)J<;FAy&guN1#0{!qM0{CVE4^0-U(2gF~APl+#x zuZnMo?}}T+zlmRpee-fr+*uqd?js%`jusCSj~1thH%srFA^RNhM6sXdou|uQBQ6$` zVzYRzc#(LS_+4?G_(Sn0;?Ko<#0SO4#b?Er#ovp65>;sUY*Km~WKWAr#S5ixo-6xB;w9p0@jK!=@jCG)@n_$%EZE(5e^GLvzw80=8{+Qbe&R^6L_9(~Ml2Vn ziBMPES@7?Abv~yw)kCfow#1SLA+JGL%dHsPvhXjvTqi*h%br161R6J8`6weZuix-KP zidTwPi`R)aia!(Y5Pu;)C_XA~7Pp8miLZ*S;=AHU;@`wC#R84X{ly)`UBsc{KH_k3 zjCiPcql#jEfm@sd%1vq4-Vl7OfLpF8dns8u3TsdFq!p$^L`k ze*5{k?01PTE4~GiI}gbH5%E&B=O<*}k`E`oCjLo$U;J2{tnv7d`}oiQOzv%BKh19j zh&zgrF~0x7vJVya6-S6qDW79yKU6$QoGeZgj~7o6PZk%5HDXjePVFWod$V}9xI(;0 zTqRy1UM>DWyivSWyhFTC+$jD^d`66D9xzwy?=Q;zx8fhgcf?}xL-B87o7h+S|3GoD zxQDo(I7%ER9w{CpP8E+APZAf15iura#bx3J;w9o0;`hWKia!xIh*zmR?vcIJ9XR5= zs_dJ^=fs!A--~||KM+3=zZ479Ubhzqi9^J_#9`vPL;UtSTJ~|`5#ljog*Zc;EuJJU z5Ua&{F(#fVHi{o>d_70@3&d}Umy6#KuN9}LU;j|{o5c;{UE=)(e!d=%{SomoaX_Je z{~6g|5?>Wx7vC1&6F(OJE`A{vXg*RTmW}n}-$C|W#GztP94;Ox9xP4}j}Kuse61^nWsizyicR7&afNuXc$v6HTqj;9ZdE`0vFx{qcZ&Ckm%ZWdpFJe|Ch=+U z*W#;UtN17J1MySwOR->Izg%yXzSdv%+m-MAC1(c8{T=O_?j-v*wYwp*&(Zj@kL(AC z2Z<%(1aXs|bByfe;&Ec7c%t|_`9EFuJ0+LHvM&~sVzYRzc%gWSc!hYic%ArT@n-RM z@gDIst?%70`y=Ax;?YO=<@&7bFNwbw-xS{yKNh!%IkBJ0d!V?BxVyN&I8q!V#tQuB zkC**uak4l=tQ1cXPZz^tR6J8`6wehe6fY645JM`T@5=st@doi`@j|tq+ho5-d_cUw zeWb$k9+7>s_?-B%_y_SV@qKZz(($qE{}8?X{qpHA?kMgmzMyesFWHBSqr`*7BgA9G za`8BEj(C!Ih8PhW#I)Efo+GXhFA>*>t5j~+$bOypQ}ImYdxPwEi@y{f5g!+~h`$kE z7vB*-5I+__6FseK6^T2DM@nw&BKz**zTyb+r2@Ym#>#%EI6*vGoGQ*1PZCcTYsAG` zm#ddODK?Aeh%3a4#owx3Tq^sO;??4H;!Wbu#k<7D%(#plGA#qA|`Uz2^l^y0T< zzg7FSf0q42@t{BX^8c^0|3fU0yd5C!Bo58XVR5)PMm$73T%06M5hrNBe1`02Nxz;g zdzH9A{9db{zR3y~l6##P7cW%1Ov~OPo+n-`UM_w|TqmBQ_^+4!XW|{=ed43ylj2os zuP?~{s@N*NBYq@)BGxJ2Z5n4jlY36wPW82exR>^2=QpK zLOf19K|EDFLyU+^#H83Lo+Yjjza?HFt`)Bpe=OcCUOd3>r?<;~pSV)_dPMdo#plIW z#6O7dh#!it9_q*YsqCMNebkSO#GS<5#J$A>#L;4jc!W4foGeZg=ZIC}d@&?`Px-2o zJuWtiZ)$v4Ci@EUTjFZ*Dsi27op^(Ii+HGPdrc@Cmt!5iPObO@g#A97#0_cX>qA|zId^?T3jox7jG1QF5V+P zB>qZ#R(x4}U3^P?U;L~1x#*4Z%jHn@+kUd|Anqa#755QGiU*5Fh)0W)`}pxrmVJge zS3Fe=iBT~nHj8JA=ZhDMmy74B9tUb4>br8kR{W8;T5@ww<@+YN-zwfA))x8cUM>0d z3%Nfeo~d>1O|m~FHfq1@dD&mu-jC<|T37mw++P>p65kj9Dt;~&sQ+y*?j#NogW?Er ztaz9>|1Ez!nk4%aafUco?5FjvQ)FK#){6Wh;NG@il2&KihU3A%ez?ISsW_vCC*j-Z>N2xlV$&<+Q%^Y+bsKmvhS~Y zFOmH)@g@12B>NO`hB!y85>FEsiFIOJ+^F<4%Kow9KU?%al*ebpwejt7t5^;ifj5tM{A@SMH75^Z&;wj=8Vpv=vCdDRknRuQ!MDxds zWWQ9rQoLGRFWw;DBHkw6Bi=7QEN&K`6JHd6E50tiCB83yEPgKbIoR*_+lv8l7jdY# zx46GJO57|tKUVhf;zY4joG#85tHcFjwOB94#jJRic)obCc&WHX{GPa8yh*%Oyi@#z z_>lOR_>B0x_=?yn{*Sm-+$Oe(eM|iE{8;s0Ec;Gki{$2RvhOMGC*Gj*4kKkBBaRm* zilyRIah6ymo+j?0b=*a=*NO?TQ9N6`K)h7EO1wt=k@yqwHt}BZA@OnXY4O+Mt75Ad z)4IdEvVSE0Rs2l!R4&_zJBTr@k9+(c)p^B(YqaC02>2i3`PuxI{ctY!a7= z=ZoJIFBiWfeqX#^ykF}iH_JX}JHOqGko>$|?!OQp6dx5gi_eKKim!@qh;NJUi+>R- zq(}cv_AkYgw657#`$gM}0dW^`sJOQ{OdKVah=+?$D8EO^UMfx(XNxC_^Tm)D6_a9C zJWE_IUL>v(zb#%RUL*ccyh*%Oyj#3q+$3%mpBG;dUl;!*o~ZWvq3oZE^X2}f>_@5H z7iyhhdvTDstGKr~LL4m~B2E;`#A)Izu~IxqTp)(UCE}UlQt@2zLUHv#zkR+ddA~~T z-xj|sUMv1c{E2v*c(?dV@e%P!@m8JR+9LbQ;_KpD;z-HSKg<4+xK8E#ciF!X3$_lXaSPl#K@m&D(RZ-{$K9_%MQ_h{AsK+S93k-rbcpNW4H+r)l{ z`R!()xU)D!+(#TPjuK16!^LC7DdG%qu6T;LP^=Rh#FW@5J-tQtbHoe9OT{(fI`Mk( z7I8bxn{Jo=KJgLp3GsRHH{xsJAI1L>KN3F`KNqho_RFu&;Xbz)%Ln`RL9*{A?kVmk zju1zSG!nw~qZ7B3_=&{~NJ=i`6Zh!CUe*W8rZ_A^7`_TUEyEgX6 z=Qz9kDVP_0z)zoV@|_U-CLMqF4K(|c)&5yF_xH++KJ)ISeDBr%^7&f(uy4f1}j zN^y~x6qk#u#r5I_aih3JY!$bP-W#6#8zctB60uaQ6c>p}ak;o!TrX}AH;P-tR&lH7 z{ZY>sgJOwTDprb%#H6@fTrI8_H;5a>En=&%|S? zMsbVSDsC0MxAc55D3*w&Vx_o9Op43J)#7?_gSb)LBDRWKMek4k^Z%bVi#8Vg*B)Uq z<6_B!?veJ9L!O=Q_vZG8cYN2aWj>eZ1K3B_{$Kpdr)}DlDHDSuPpr=J?|KKvjT<|D zY{{5$S!W%0&LM}4Eg3&b&hDS!@(b0MO{Mzu%(u_*(;fV?Pp!Q4$jqA`dtN`Uj|)8S z$CLOjlX)?LzHeTtE6nJkzB4KG(MA1C>R0vc$G>6i?L36Bpx^Vm9f#BCqW-t>b-~en z``-;tEZWUJOEfSL0&?kAQMbJ)v_{*?D{i>J`rX8})mrT@61%P7pE$;Wc@(Ej#0F|TL>qiO%c zx3?IIicV)}>wko^3@W-dh-HGa3@JL74^s9&(piE8YWH`%t1#S6 z0yXY46kQ{M{%$QIJ6tP)VQ!)lKu-ybar;yO=$(5T?408MUJIaa&RqazxI)j0ET4I$IIOYi16^x*n9vhTmkQdk8`&{+P~aQod67v zJquu!TTTIE(_aPI8h2?afbn@dP_oV)9R@HV|9t?P+`oDOm?+KJ>ej%!;Yl8Y;68U5 zKEsnE@T>8tyR-vu7v;!pXly}fESFc=J28$&S%SvZow)v%V_)!mN(IxP#z^( zwj8aJEeGU!w0@i8_m?TwXHw0$}AhP$sPfDRIH zjc65cS*`F35z&q|^Cd&TU6GdSeoDrT@NQZ{N7(0O0P^FEbm6YW;x4T~mbmT{a86p0 zEJvLxmbNi`6ejOf)7? zxtemO=f){Nx{n_}AZW&NjEMFCRrD0*7+G11FtEiF+2;U}^&5EO`8lhZKZp@6UXXJg z@;S4>lI3;=qA+J05Y6LGcd#{&hi7ph`~h*9*(#mVvwlKEWEIIlv19`(AJ2Z!{Q&Il zEcB!7hn<^{H{2n806Y@e1HdwJ?!iCV0S+P~n#~;dT{9pJr z=MUoektfij8aHnSTn2Jce&i*Hdk+zvQ$`#=@|qL331OMjfjEBT)ev_w`e)8S;`os_ zlDHpe-6Z1pkvD@mwq4#C%>BXKV&*bv0bkJ_En{vCa~+sl&m7&F#~vT0JM!*f?r-M! zgXz(1eB?dHTodMAXRZr#A24?ubNiS(iMem_k#!;cQk+GXm2^a#h@29aE#%gCC}SBbN0A07=EDI&%7p-WYnL6kNbR5uyW$w?!$i@_1R~4 z`mkwa-GY3*#|ro2U*p%&O3|;7i&9GE08Dndb4=N*DmN1_tjzix19Jz8L%S3^Rv-5&I0)&odR|#x8+V^DHy}CX~gE zXmk9lT>)Go&oSdf#%lV4BII*l3c-0{pZm))K%SXKFM)d|=qtPS1I{*WimEJunRyY@ zW=YmmG*+T0_6G9Nckt1cgT{}@gyjc+zfO*>YKV>gf|8Qg%kh%mMB_LM-N(_p5>2un zM1kR6gjyvkBJ^s)t?q@-X7Qo0qttyH;hkt6;|N#bM$xSkEnKRqGNJ<@rsM(SD-xyg zrIh(ChUY|sjN7ElEsX(`)q55|LWwDtVoHsywcUVgXiEVb;rB#-e*7y6I31%yenA%V zhT8{mmR}fU6uItSz~mQ6AmWD5H}mUDAk7^LrTN7Y$Z)?xljfI18Hw=W+4z@rS4W^q z?TaBZ=O8{BkAxqieNS*xHm+4S!e864zkFw#7-P zkP!Vbv^(OwK3Hms%Q4Z1#aPtP6|?Z^iH%q*N5q>D9yPMo;a}l=I}RCH`Cu+w5MP3P zbOkPR|xTj%~C_LBwk_GM{ z4Aq5;-3D-CT*UzK;UkEC3^~ZkxX40rK-cLcVO6EpFiVYS9zLT*_-MQZ6HN456lc92 zg7nok=j5EmET>@Q*EQgpCk=G2%GlYp(c3H>`&Z zF*}QtMW~!5awh-Vo+;`SH!w)Mi!s3$bsHQ=eD9%n~uX|ql_#AkhhCNJt8Yk_>U4L+nF`y!+K$Q;~-Pw9^OT|&1aFJ6IqL*$jPl8>QJ zS>ku}YFqq5Ux^Il9kCnU42c)uj<9$-pP$2Ep(|cOhxEi`gk40u3b#g$cI_hL1i!-6c5gue_iBsT(_F`*y!#G*|jFm!L zF&&ic#KUlAYjJX+VYCrbP^;16HyGGl%)rpmLc9j~RpN8BWlPZ$HEboCg1(b@2GKK0 zEQhNHi+k8A;(ghrYG8R(tO9RHbVtaA#oee~V{sk=CrA7YKjw?4Yw^Bk(H6RfiaT4- zzfU62EOBcF{re4SH%P35-xJ~&jEt@*k==0#dRocCUQaF zSHv;GbP!qaQb+M4WLAp~SZR$FQ=oU8D2ETni+(7bAkGGUqWA!TKS^vrezI5&&rA`g zqb^g$$*9YTVg@9iBrbygr-}7_45N!^0zY&WOHjvd;%(HfySNzfFN~4OZ z5k8KX1(&}jjZhqJ)#2)7kqCQIV@=|JG3 zw7kTIRn;ZU-KTx_k`@8>lB)dYCHp(QLEFw_<>T&dgh5Fs2_)LgoMx2tjL{dRZUrKy zWPnQ(E8K=?x{^VXs>;Y2O^qB9 zNaey?2097fdCiWtwbW%|NSUDo1w3mX0#m1p`m-aJdJ;(Gp1(hCPN-HPy zISasG1x$%eL9Z)4&WtXG=`&*VN9k}=I%HmK3`T;|af)(b>~lnF=|lxBj(uJQXsUvi z$NoUCDxGddJD@(RVz;xO&owh=!zXKET%DGluAnPo*Pw5eE>d<~6?=-%xe8hry8yvg zdWnKI#2hqQ=^9m^O|ephXX%v++8WD2IF?>(=5~hF_w|{#;51{s+3Z3ne>Bz)gHq`Y z%CPORFA)Hxn-$wDvHEQQZ81yMVMy5-n?`5es>*i7_M)jvZ&%9q#V#xbbgzQGh}}a+ zKWK(qqe2H_sGU*zu!4S!EyvJP`lzbjk@#;d4C4i5iebiY$DI9&f?QL6Mfxq}+qfCO z4UPVxQl2p5e`E02t)Nmf{uCVlv6;dBeT5nS3Qe?6nNnrOA4foZt|+U``17d4HwvmT z<8OoSpyKNfDRAKTif@=1e;Rc-q$tOj@w|S9@tau|K`2i#3cAXS z*C0R|D=F*D_#HJE(x7Ok8LutJp_AqH0N*Y%-WB08(aP%$XrCFs98qwR<&6b&z>I$mpUtpj zjQ?oHe?d&lR+b$>i(wi#!;%ecSn&@#;jQ}$a;^AR(08`d9=GDVFhDO=P{NA8jHWtY zL8Vr_4JMz96jWiwyQ9TcTP2gAy~>JThWK1($+oSw;%gBh8?( zzid%u!>ssr434*|vN2Zt0EV|aRM`|OJ`&4@yOh2eR=g{^{yhqsXT?vghc2R^g;w0g z(EXrQa1v};ZpCXc7(HTTH-LewtoSk@A6JxX0HGb8v=TFbTxZ4GqoZ!O%I5&uWW}3> z5am{cE7h%5{0v0T%L=;Pik}7#er>tjNZyCz5)PbEj@7kiA^@LmFwbcAta&Fu!xU5}rA;DZSgIMIql5jCZgM0^Sehs5~%=B1Mr zG&B~b>!vCrhsD?$rL%=>jxk2grE~~gP{Ko)DP@yg2bFinLT%ZU%;I9mb6>_lST@`3 z2*7n8LUGyLtYHA+F3&&8PIngqNVw&Q&ayKlP}=6?nMT>d#1a%#xNNPmbLG$ijWyrt2QqjtXLq-jIu3ENK!we(JvM4uiHSD)x6FFIoO)*P2tw!6x@aS)- zfAnnPxIxZ21G#orVceh_8yr6aeM)#3IHrk-u;3Lj0bSsAaTt^Rn~AUB$QEYeQOIs- zCe|UATA7JNDLSf|a4@*7F%xfM&|hmNE&|sTW+KwWFs?KcHd^#5GqE1M@M<%$veq!J zF%#!Q$+c!;7KVa#W@1Kn!??~&G{Zo&-c0nyEOEV=C~tx8ZYEwRF^n6`#0_Yw8_mQ| zXrqm0;#HWt$xLiRhuCZ;=D}}=&BWaZk6+Bh2_X5^Ogz<=qjo|-<`Gzi%KvT}?b7|a ze#p)w#&UiVrLfl&`;fQ9CfH|-VUQ@q3&1<#M+A9D+=M0!i)&$%D~g(PXLKSyBjR*? zMnz>uE(p&;*G(6nlye8u7Q8XB4oc!;bziRWXTTj<;!Q}-7DG|*98n)$t0(FqbaTZw znAGw_l;I*u&@}mi_ZSMqZn&mUoD020Vs2&cM1Q&Dx*w% z2TRIDQ~120D8i)HNNj^U8;j9snkHfm8n{Bt4sqX*jTWvHmw~I9xTgozT4EX;{@-yo)AlBUZNIu4@{ay`8ubHEl1(L1PE;28Pa#;`~OKki-Yj z(n(we%R7s|(Cl5rk_zq^?m{DU6Q!`ZyC_BE^$>kfiyHAcd|oSBfWD`=4cdDNw}D~w z787BAAF%@(`wIRrbwBYErpEqaCZr7zn^B8_qB){+khl}}3>JM+$06c4_<5+91N)B? zucLIBxEr<&7h}emKrGz!vCX0CGw+1Q)oOvoB{eV;uFOCSg{wA&p0sv z9vCl1!%GuH0qQ$Z3_(Cn65qhK$)X-wWQzD2dZ&sOu=7N5KSsKf#75XKO>o69-Kaks zG4^i+g6zzb)EfCuAMRnan}QxS0yO3A$H6t?473FfGGMbQnj-2fu^(Qw#T)Q|Big`* zkl;_ng~c+|(G|ZpWHk1M2TDa()Tl=MSc4f$7#LfY8zr|Q5Ua}ixz9m%o0F#*W&Lvw zqMZ$w%bK!*a_n*4-3Z9C!Sc~Vyv@AR<{M>0vm7`e(PsAaxklMA36#3M(Cf=al@++e4645w6Z0B0KyO- zK$$5Tz~`1&i&n73M6{Gp%#Er-{~_~(=t4%~el)7#COV-XGk8p0|*eWnyS=mXLxCcT@&|df6mBt@~++f~w5+VDapVH_;FA*ZmM0vNg{tfxL9PM!t?gu}u-z8=hUN zDTiMUXKYV1+rLr^vTCV*xv1!h2JEB&r=k&JpmXFE zShPG;u>y_QMe;uzsu%({b(Lhb;fiG@W|0U7)LOUVO2kBWS#q9Ru>|$(p#ZO9IIOEl z`v^K$MJk4)wzU#i6R9|e?%q=Z>mn6DKwU2hY>HIW!kpd`*cz!A2%wJy?u%4(NMI6@ zq92V^>_M&i$&yE-6(iA-{bkAas2Vz`v*#dG{BIjeFL*YGnC`1l@xcYp1NQ7GygGot zl3f6c%;Vgt=trFN40D)n&NVdvhU@06raMPSz;!dwXU*d!kmg5IAOZoK+_kLWY6)yL zvX-$Pa~oX?WXU&(n_=d9m)5#xuo14WHwk&eUD^%6hI+#U^6v8pJo5&rr^=nms&A4& zJNFruY?eT^TZC9Mx5!RewpK$0Ivm}ZR0JDt8mL#pS3gpAyeG2Rzs*>b=sVHrP+ zDBYaj47II%J&&EKGmAJF8o95Qf+JmVjP^Og%o)*iu;pHaxM*;|GO2no3FMh8=L@;c zFmflszYXp)CBaQeg8d{QPnf$RV{nW1SYYMb=0l|5&}ZcDhC$8SNxq#vRz2SwJUEP{ zbVED+bK>QRZSE78Y)aE@le~Wr%?~U?&Y>DM~rD?}w@T^=fopS=QN++fSBlcl-ob{MbwEQ4sL~|WD=RU+|ED=kP{Bja- z_&0JFVUmdL$}adD4!kp!FZUTt=dr1#l=)m8%WxPQYnUO?pAaoqa?Igw5`^ZrF2z*S zMB42lj-=hn!P3jb8BtDaxy=xH_IXwYo1h^{Rb>X$pq;8zLyja`Hsk=v4$BWIX1@!N z58I90lY4@Gf}%ewNgp6cgL@hrrwFc35^!A@4p3Fpf~rzI!EDtD=h<{&~Uv&~#aK}(i>f=rkfedLFcy9ps(nW+elOC@Lm z2O7Cc@fo{0Q#Qst5+vI_%qBH*TcZoMnx@oWN`kL|4IhRIBmYx$)mBeP%Wh(kGU_Wh zEA~-#1G@U@6p==LHKf_wGC2=?!XnBE&xRt^8}eVJy>H0iJj`+~evJI)sHQbpcJ(+g zDi+8(#K>P!hW_)FENjd%UX3$ypMX1Y4M$e1AJKKyk};k8Ar_V~BO(bVkwAs>g%~tr zf2eM7md|J8_RRwNjVwuhX&riU7ocxZS|0Jy$~qa-GR}Ab%gAj&2_557!e_od)s&J- z;&^evh|<*Dt{lR$RKvN=U|(I!W|AuZfiU)gAIKr41cf5mv1S$GB8jLM%UwD8a#3Vl=j!S?O03PtO{YvarmpyfcSSAM_~u3sx7E zUrO`%gkHH&S|j~9XnGCG-;rL*ZPN!vUu(u#-ET=O4bESW@xJo$Tm%au99UKFpFLoo zlY(>WurYL&%D<(!*2GGu%V{tFHgwX;7bHW!I)(?E0DHe=IMK)IF=GnW8+M5bnx!nG zT{?1>_66IEQrJ~Ko6({_TI9uu9I%hRzin=K5;H`0e^l{B{0uK7VNx*Ckg`WfT)`=5 zepK2(k2O3#_`g#lffQ--BqpeD zk;9*v%uy@<-ijpVv_$1@w-n%p$@L=5AJh|?9br)Rwv&0v76+~S@aZ`^Wj;*cY%P+MIKj+8SQxWHFU)Ws`bO(i4r-CfseW2?81DaJ2{kwYIstrn|6y=H(i z{9E-8+u0wmMJc)->(?cb#(WrQuU&Ia;qA~h565V7#NHH<2T}ZHX&G(jaJ7A)c0e-M zOgh9cZjPjn1E;+bRNX<|l`O1@&tfNY++*=?jqMC33u`tS0x%SKH2bvam7tgZxt@=VC22INW&lwBT^K zux`}3MpLWC+}%rA#FMZqAQ_D*M=Gv;(Ty$lZ_^xM)*8-XO*r}DR3ezn4xOiqtz@nt zD$l>0z0Bj_K-r;xhq=G`we(p;lEn{Mbm&^Lu$H{R9Yb1a0?1=W?`ZT_s+Z` z?(N2+fKL$$??K^UFnPS^z1u5g;ZhWw!@~V2EMVbdg@&=$YszKc1{7Su!e$sZs&H)V zJ%Z_fpI1T79VmE_h22s37ecP+Tr7`2^D1BN2Y)cMxKH}rYs%320faoo^=9N@u=ko% zKmj!7A{Dpnr>cC4Yy=#lK$y1&!oKsWNXWo$g;ew#M)jY)R{KF`POQ4N3-)ae0^t|0 z9Xm&}6VE!?_|@wwkI+JGwNM@kSUokc48ZeXlPm5^{U)%6=;CQ8-lK};erlA)^AzA` zjbDOkdSXDFH6y^BfaPqo#n5@S#y3PmRx5mD?WS|D5>-vzzY7d!MSxH97?IkCuYcSLv^ z!gZfv8CI6Ih5PYuf<&JEU;_jK|D48}h-V%&7@jb!d$st@a8V&5gaym+Inr!xIM3@s zZrc4S7GJH!aKp#Hr)tpJhtLJ>h>WXosMKhr!r`2(Som8Gd>(1dh&%%YbCEngM)4vt zj#dM{h`8_Tp@&CgyxjtLGjSgvj1r2D4>X=2juB84X~r=65b(Q5h4Z0oIL2e_-=mS1 zGGu{1h&1KI{>suOpy!|Gl_2mUGBiVA6G+xGs!Mr5(nXd^|6HWe zj62_>M)5=1LBo_fV*!HOTLP})NEPEe5Bjo^>M`C+BGrudR)E<_(|>*fy;lpsbq=5! zL|PmMvt95c0tRp&Bs&AZXknTn2 zEL9{*`PyO{4d)^~&)8SeGPLH$5YNi`4pc&d3`1FYZzMdaC6`a_oU zrY`nF2h}yK5{+aKZqUCNhg8%SOWNL%N`D)o^~+a(T3>IgH3OgtK2@Cvz2Ab)QJ1 zeALOl5L92mwl9$EB>?_HhF@i~=L5)!;yE9ZQ>e$(&8j=71qTLAIUVC@YJ|#<@$4IQ z+nDB9H8l3nrZbvaL#5wIhG=}}M{&<9iD#go!cMtX$d!s;C96=guwl>BEXjs#r3-@% zYrUkGPE>wRQi);h(s=sw-6S5$J-hXOQ~AjHAwYB_mFV)XG?5e1YAH!oO-fnk6ByPV zS`4l3h@}Ool+{&+^SCYyS{>o&^}AjGnaP}g^zyb>?@5S}BU!U3R>MegB%r@Qz8J2z3 zB;&I0T#ziH!e(01KP>xBPkJZRQB$kMZ4V9AVwRZ%$@JAy#Q$*`&qMSD8qd*YyvB0~ zyQ~iHoTTyoUV>;TgcwSG{n$vXWc&iVlmHB6#XpD_CV87%8-?d1^ zYcyefO?WW~z0VLD<0Fkoct42lLu$#OzCjb4MmbzHAyUsC3+%Hfeg?@N3}7cRZzA;| zMaFbsJ_YnKQs(IZtedn54hM6fOS{9lTjLuZR5-S#>^HE>S`uKoNi)$`uWLL6ZXnovh;`NO;vtzm^j2N6CetSxKf_0jxvj8UpJ9@Sg4+NQUKe^S;G{U}OU? z<~jz8jgUVd$t`^}h5%My{{mglLE!$|#QO$-ZLzr;MV@?+w5glwEB%Fx1Z?&>(`R!> zRNrgBeafp)`~*@qH$wHjmis}-uK|RSvVQ?veXloG6~%=rs1^!=*a`ZzS%_ zFqUWv_ch=Ti8}++(g=ks&oGPzNZz1w-1k+uu7InE>y6QIvL|mVoep>oaoisXG5ZxBqJ=E<|t-6(jE47}eq-K)nH_}_qkBaU~MPWJev zPNNk@XnwQO>ypLgc`h&HOaVL&sqjMxZZ;5wyp?vgCvTMT>!?ducmRbz4M5?0*gGup z>QlqDD7YFaofG-pdYgdR0Ho)7^&SSboV;%Z$rdCzc|VQJlLR<HwF1qME3`7v=4=}fAeA~tTm;e^B_R(b_uHNR8b*?7iW+@jHBP$nom_i%a zu%Ca<3QfduTgz4}lYCuZ8h#E9F8|K(G8aLdtlVChznk^p%H%LIhX}B8Hr7xk*HMZI8aL}^>c+<=?E`( z1C?F_s)Z1{fO;+ha3L})2`mP14Ki0DW!?-R^Im*7tF%b*j%phjh1g$STF@~o+cP;^Nu|q^O8uO# zw9?DGz*o8lV)<=fsq|-Lej-4n79QakNX}LNq_jHO$WrO1q*6cUD{bLr{>N9E39&IG zskA9FO$bnFH8LHLoCp6&>6BEZ+mlNDoUgRX%bYh9qUqj#5Zi}(=-$c5Oe8?1bCH>i z`;S-IrAA=X|AYz05CtrAr|8TII50#pjg!nE7sWc9NZy|Ns{gcv0sY+{-O8uO#w7-|$dl*EsrX>(tA4w|h zh)jC|tSN72^+s|={*zLpZhYXNG$pCj&-qGwc$ts+N=HHL@zleb&Ov4t0V-XL%sEKT zng678XI-1}3DP=EYbJA5hWfk6^TrQ{Xg*E41Y$2jlIuvH#ZI#L>qtCV8bTJ1)i;BD zGp)H_Ye*fdJMPybFbB%gx^?8!n!0YRenn#}!_WC{8R(_&q&l|66HxUSl61?v$h=K} zZutzEeMrt;E$En0SC!fp2a-ztoIgQ~^SnMIw9=m-_6H=X)WZ@fj3kvNkjX`I{`@DU zYf_cg=y}vK{G7isXyAEQ`bwKXESFvKBnsexHXc;uL<;Ud3JxiYK5x+uR)ThUmLXm>;`o%LyH>aWe+wkRXHaGt_7wk_y5P%5*(@A< z466r?!9c2Wxw=LAyIyMqhy5$4vVe>ug^D!MMUO*wLk;++aSOm1nx?BPA6=ZL0fy{o z2-9I`ovrbFbTK!8|4`$3?sq{QKGalelHH_Q1JrQ8A_{hsUb>h%U#pX04GOS*rt$11 zqXYEXKBMrA5YFsoBa&wtvt4gK?MfadcJ}8@`dd*Z6oPg9}{^_%gGu;e+ zqYlH`9Pfpue6yh(tu~{4HInyEOKgH%c?40Mhy5>c{9e~0CF=#?o<{Qc^{%TGj_*qQ zlsJB|Yn#G_5^y(?$M1JNrf^LFHz00U19TLH8vwW$l6$o_`?8i9V5!I7N~ZeJ^Bck(>sa*`Mg;(-pjL*ez}7mNu3< z+1f9ae66mv=HNHjurPGWpQh#Q7mmDX<>{|)2B%FXOKLD!To@w%3kV@)9zMOy&Ai3e^a*6`rEqHc6&b!=OlnHUxEDooZr02}O;}f7 z>o0u_Yn8Tz4=ta9WaUW1dQs!)lJ_+pF0pn7@ZV`X++y7saFv5FrX0HP;Q-!uVeyaE zDs1#WqtO(^@YtSkoQiwCf2;tha5XbFR&(GY z1=QW*=1+mmQr$BU_!Kp;jrJh(J^`u=6=G$E(E^VgkQa(nzMwhaod|T!7zX1L@P0t2@N#hs8yte{)Xb@|EJQbt3aeeH(4#_c&>U46!lhPHA=x}6Lcm9x+pp@&ij3R70 zkmP}`PlngRfD9XiF(l&}jc@rcL~mG6@q1azESjZ=@5ctX-t>%&Pf1nqIt_fin2 zx%Lp!7D@VL2r`2R&@YpbnTX{0R;2jlm=E%I9#O`?24CaCCUnLQ_K1_waD3+Tr7NFg zoB`Rhk-Y0F@ESHZpWDPM0bfoWpLqPB==i>$+lgz1@$Ywq`v~y+#7(Wl^#eD1Kg1sb z{5?|fvi8afY~SSH(vv{=H)cBA?dyThNPXCcBzF>~SIYfd8Q@|hc?;+^EdW;>V7Kkn z`{P9X$sGhAE65$h4o$=*^Gu(JgOT%Ypu`W*P(6*T zg{!S94e)Dk_azNVeKHejuZiSJxwi(mQr@dLf)^o<)5TmVAJzgFL($j(TgEh5bFuaa zjI^c&I2x-GxvM%YfbX5e`=j{Tx|FN^3CU8!+N1GY?VnkP5B;I>{3f53)B!#Y2}bW#e_5-?qG_?Cu7GlJBJUB8`b0@Ju2eeGG- zI}O8x9GMoNH=T(jN2V)~xs(7$rl*j30?BEung3yiyf8UT%L!tBQr(?U_okcviLdT; z2z-qiI71#l<}(6RmtBkpDoD-+N2yZ_k-!Au*>|R@^Eqte38;J5^~Rk7p&WP1Ag~lk zs_TqQH36y{jLbkJ=OL}mA9v;ak8#)Wry`Zdy8mIV)xSU`FFN?_mf`2h;B@}I=X$@; z4u0!pA~cOhlIH_Hp-8e||0w_PF!5`$aPFB4^4T*W^3tpuLAn7+2i7h<30g+C zFdkcZ-n*1b*FOxR2a%-f-$dqh0(AX;WIjf6KGw{>>t#z@?sDJrG7HDQ5^y|LJnELb z&ukff&Ubv=^XATkE;{}<==lXnI^HJ~NtS@)r;vq?50zj=jO6@$^rZhkj$aI8LVy3y zI$&#Z9WW72c>?PI%BE9_A-4!gI)z{DZ%2Sm8I8^tRu_n-4pqrXb8=dcih zwg=qwfv0M1(;@F9Dqv?@h78|}Ew$Z%%=Jjlc+LEOYa5%?X1&-(jUwFbo(d(Hn#0v?}XriSM`bdEJi&W-F zlKJHT^Pd6cPXf#hX89`ssW~^v{JkdPcg8zuB5HPYkD}R=QknhVnKi6>nuyE`0?eH> zo@Q2hUOyQzjlP%w>buU& zIS6$2|GN<6cOc1yzE5Tw6F`Q+c09@0=lLeg=a8JAwWR-Zu=VWt5#1c<`kK1#X)cv$}B;t3bkaTwSORlAX7$2^S8Ap#r*oKj?voD;O5V8UynCgC2gVwFh)`Lz1TXEOwFwXNK|*+qDK{p=l?8d=!#% zKx;@fE#*l4DSr`Vgbr(JwUMKRGxUM7Wz5B{rPlRc^sPD#;^!bqt9&w%WWcG4{DW1G z_*PvA@|8%=3N7^?top0Ys>?LBw8{$WZo$#eht%Oi{v|_sF;U)0oQ+a-Cs7zJZo&@# zK-lHuzI}XA1pc1Uy~W(X=bG94e$|0+Ik%y=!zni))#H)-ci~Lp_5t3DB#*X#3}^Fb z+gdw?C)+=TeIH$epin<>kQsAnHrP zxw_}3OL8m+PX{5l!y&cxJpn|ckV5k{A@^@aXtkCv_chmRfUEv_;K#JWea+n(%~k)^ z63ypUa?YvS*E|v6y-V|AU-L$Q_w7{Px_!+aO~if80nLkj&CeRmeNFlqDipNdlL?caXZxR|!-T|q+bx*n*Ya-Tnisr>Gr&^;~-<7Gnb-SFt0p1Oo7rUG> z0p4d*dFysLCkJ?UY2FTob+JZsGyUIG-sCmM(AAnqZiTEy+C`ivyC5`VqdfYXa!GR1 zM7*gv)9Rz?`39ruik_!a^6e1G2LjwahlXlOIlE5K0B6_GMs0!YF)eOE&$uEiALlP` ztn~7$w)`_U@J^?^uX{x}!7elx0XPk*9$wbBPDT2y0B=N+H(sw(xVHhnN*r&zu2(n< z?1zctZQ1J;ZXj?yk-Yh>u!dK-^8n95s>ip;-k@;10q-Im`@@Y2_Y>f6h~rl?Zw+Vh z25tRvn2RJk*zIBYs?D*0`yt6b{jloOw*lUWB>VK^s!wBKvV@)b3Dv2MhS+<6q>w+5 zeKiIqd7k${I76T3Es@*GzD-T#Duch9{bAVadKN~0PN=ou?|~#I)Un8%K!6kKEM#UP zIWsl0KcUK-`Nuq8yC^vb%Tq+3(K2p^)?H!mF>2)$bq?h6#}4J{veyPQk!t>2>`LORuibXl6$xV8e=7MjkOEj38#;TqvRfLGo)`slCzS}B9bir ztb{$>5VFvy$3XrFjj}40Q&Wvf`Ns2%UwyxaGBmZcFyuD~j~}h;w5dE8TMjjxiWWmb zu4eI{F#~6$e|#Rc5EV+SY4ArHUJg4?(YPN_@-7T}3rW3up;`+t4L?_3O*I~w)lpe z3+aoHWCeW|`+r#c3SJ4)wMdAaH}zP^t=6j$r()-*Idflt==)Tny2a;CB_)OJ?QP>a8feNf&ZicsME9upZWUzJDj3AYniDU{ z(hu3m*+o;(A@3+ov3AW8oM9iQOO8YBzR|o`#GDXdFwa#@PY?RzOk)_Ckob`%)-AUM zEavL+jJD2eeW~pC@4u1 zvlZ?vz^5S!>+C~duO;>3Lba(?xq5JEZ|W{ zavfZg8rZceh%ZL*awHkp0~GFI!1o~)|ER6IUdQXf>Wd*9FhXJGf$^la|46}<{O$Gv zfkBLceTJrEU_Ytp{J;(^)`hZ-FVKJr*gv&5f&n{U;~20-XgOJdVYBtqjX2_-P-2ubIjhr19qdf1SVr)6@9P|gh+Fs-;l zGg`o@h6u|ykk4yi0>Hf#`3a&8e8-{;ZV_(Gk=y|FABYR1Z!>{c6olfMV|bE-FQ$|y zt^;(DX=FHf$`bPSphO-imO@A|l3b1YWVX=&WH@nsgJfKdR)eGik~36GN?nZx9&dSe z%@@jYw9zC@t@a;HHFPKZXbioeyJ37Cl6&hlrHTWADF4h2{DvE6kOMgT25KZ!52cm- zlF37w+B7~vy}u7RTj3+QsW=TJb4b}dQeNaM>u-VMpq1VlG4?)3}}tFL0@ zfTl7x@O@m~FP(91G$aorpMd8cLh|0p$Au7u+XeUo;z~N^#gD) zO$dwinoPy(G)UN9>=&K|*{6k^Hz}JZGABar6eM{fa}F{K3GhVbGGs1Baz4?_N1w=8 z2uHb#!08O~cmV7s`;2_%?lW43pF`ltzXc)Z#0#N^PS^q+HzCRH;uDG_OFhkkL1`pe z=#U3MzKy2+tWEo0hsdW?p}%#x@&q42U0I?$VH&I8iOHe#dwe@~K;WxL@;#$I8NQsR z8bj*+9L4*Q&|;L8NR9$qL3C0mz2Pcdr~iQHcO==cJ{hh(C|S8AV?DC5e$Pa59@JJH zRS&e~c3mQCAierdvIc&xrFPNGQ2PD81tFKY0)Q#(sM7;{umFjW0B;EgHMQ`CDzP73#^fTnGe#_k+3|uRmXCA z1qLpNlLOmhpX+e8b_I$@`o(W0i%s4Bzu9}p`Qi(2$Hvr z$I_0Ro_`1Y6LHx^SQR?*Ax|X?FGcb$!=&<_BafTM13sR(hoSO&hp+lFE&#j~sRLg> z_LGxM8|<~4&h9YJIOOE;8lt^+-PvAiko>IRZOGn^RB!s+X~toN`wZ}IB<~C?=bMBi zUlgY-{4J|u{H~C!;Yd|aWA>$5-K|buRh_!qoJ5MctqQJyh{i}#-R%n332=KP`D#mF zJYHapYHe}6-jFX3dXEFi5G2|Ad@|5zd;BE;4thI~g=4`fAfJxp6lkL0Sa9^KEq~JS zZ-lBfwHzOuVH)C(bnqxa-qW)q*YGV<`cwjYQlt1KO&8XVNvzh6c_zg%+v^;Y#&&pC z!OiIZ=TyFo$Bw=@E1B~JKkaz(Om!J*wggEI06w|+A9DZ5kv}qdH4^>`zlYx*xlG&l zQHp)L>+F+pvPZ%9g7a=9*>HOmZad&7k>v8NT#p(if1k?O<#=DLMk{dn_5n!VBN-Qx zKADZ*T$5+CACQcV^*u=bjpXb*W@Gv5HH_bX1>47(uc7PFJ|(DAvW?8aa&4EbJ1B zw2zJorNc*slAH*)=>f$w?u9?EbDY}C;V4e-p_bU!AW47vWVZ1l$S~NqB^mu$43Z)w z=V2`=HTY9@8U5>m|2a*qCP%*XYign2GyGhJ4)GQt=U%Gg#pMoA)ecEsT<(KRF9N){ zJQ|r1NX}_mkiNLAUikyx(bwFq$hS?e*F+}1H=y+5j7M%wUrb znt9ML7Rh66Cazfr`;0TJ({iWn9Y(Ip9tFngzp2)7Cxk+Gz z*)>%}kru(u+$ktRcV=2zqiNWgCk1K5+Er)c(%%SlXKT17;$8X$nuy=VT@hfuF2L-6 z7Z>OCS7;KRMQ_t2i=o#KVB%lZcm~0d0R8>|zLOqNNdJ2PUmL(@A{tek8lgcNFV`>i zry#^RXUjV*F=0pqgI6I;{NQa7o{~87Qp=`#DxP;>oZ%n7g1-)H1ish5k6NYNh2FJ+ zos#ocjqVF(G6yfozkZHabX9U|U#f>5wYB%T>?D`pl`)NFfJ=7e@1W!$k~2;#N$tx1 zR3V3dUp~6$$(mYr<6^4{(9hHleDyx3>G7!dSgouCf`g1$`^^qeoq`Yyn0UY)GK-vQpn5}mBT zJ3enHo~J4=jcBg{J|7&R1bOy%KCLxK7t>KQ>-0?2Xgcb$R6V~Xc^3tEZ>i(GB*6Px zDsSB*!aFn(Z`%BsO0-WaP|f{@KGLwB4QR{0Ch3uP1KO%3I_Z%|la~G(&~|Dn(TzcE ziPwE?xe4V%+P5KY|7$)+hXBW$sT@mFI9~NRMh7^IYgwbD=?j7!o0A+10vv5p zIp(BryyEM)CcrT*m1A^}qd}76;Q+@qsT}^JY1uOSUiNi-5a4(vm1B5N$G(?*j$Z>D zf248@OyPLZ=g8H4o$b*a<5a*`-BUR9Po^49hX6-_x>Jza|AAE;q@5kdEiz|&j%xO| z_1I=^kiSy&kw$Zl5B(AZGWDnI_Ml1>W zZbqStOk*qxzY$JbJmr(`W^`I1!^C$p<|30rfbV9kM5Y2sNm!yKSjKEf_*OVuden#};y#~wzgNE1xs+|x8bJ?LoavKnlPgVcQj)QgU$ZVc*?LF%ai>f4T{t_1bGAoY>} z_4`Ltw*>X2LF(%Q)b@s>YS|9dTLaXgyEP!^{P#4#i=TreE6%7!?f2s|;H{lCxVjLa zUgT5HI2JXuT9IrehO%$-sn0nE^{NLz-6%l)zE6GrF{q7Upsoo}+c&Vvu>0y`QI7@n z_yBclpL)wNsIBdwJ|{pu%%^@tQ)Ahxi}~}RXZppjC57SW+OX~j(5&-mcBRrh7od64 zr}-w8=A(cq-}*HFNzw$G2O(`84p1jB5=y6JCC6?}y&d1P{N@JU$;fw;`H{!*H*Y4${BWcF z1dIyiN+rk4*@RP?!fc7DBt^M=5&BBeOFqeZBuADU-x~VUp6-U{8A2Xgrpm zqbvLQCcm;ZLOwGqPoS+(+?|z`_3NYSM^EzW)DPc-6!LaW)eA(hZYK))I6IAXJ4uxAnvJq}jwn_Z7s$GuC31a`&-2dJRYeG7 z;~4Elyzv}W+o>-y*@z1MnH%!%!g(_vM80S@WQF=-hUttX--7%i-YO5Om4KHJ$H$T{ z+WZL!<3Yf8A<4HEzi!J$-4A#Vao>XO4TTFM3ee}(TZ`XRxTb*1iQ}6y-%>c<3+Y4L z>liq8D%>2vrx2GD$14F9?sC8v5yu$VWy`?Y2KY|m7?Ypa^6BIr!0#fZF{Jk?TpB}q zzsh@z(l2cJtMO@Vup~nA*s}jtdd2}BNgPA_JB3>ecmZ**Ar`+^xElelBaW|k|54fV z65ywi>haRTAw_ot@Q$C?fuK?!s@-JnOcAm=_(6*z)Nvf7Ee0 zlE(`Vzbo9o052hq_a6SXWoOy~_(tL`U>mEbdl~RENX6+bO(5~M1^J05$2Wt}MbAhR z@?Ay;QSc3t{MA#R*fjiHnr2HA^-lt)d>s1+$d4d7`C9hTk7GkEbpe+dP8SVuz{46^ z-C4xfB$_M3cvW*FM00sPAA@#(jpxSmkpOjL=Ub@ZVZG+w?R>@5wjwhJ`TGK}pF2P&uU$1!rqn`Y52Tiy zLN;ke(`XFRCNSf8V27c2D3aY5z)WOLAOLUJm#hE&s1zBDmK zI}LrIgQiv%vJuB6E%bBf1M)9Vc%M)m8?g~ol_SYU?1oGi0&K*g$P7kOZ+BR!rCCM? zgxhZ0>yCJl5+;LYBAFNlXCreK0ZLef%mql!8JhXgLptUs{D?MO=6Wl3xOoF4^W+n#efcv$y$LH{-dP})Ic zz9B$qeESIM(M}Adts}$_Y?$2V~kI zIWPSG6t77twhEdl8+ep>Gjwn$(r-Db`>H{U0MRR{ME>y+-gy!r`Yx5I?wbw614LPO zq^PSqM?5J&)G?K)?wbu~1&Ai364iZ;@c~W5JNgS05x#iJTkfyu5>6_YX?9LF?+5U= zYCJ|j>$3pR0sL73`sM-rHxCZ@u3zwXfHh5;BF z<&}-Cc4J=I7=noJgOtsmbKGioYiD290`NUCoy*Xo9<n>0Wt{!eE!-DnI=fi`qpU{PwBC5QYx8+mIb+1U%9g*$ZglM|@RZc%4O>-kxn0EQF}m`{ zPcF8(ickd?`yAI6V=rdEm@HUn7fO!KJL=;r2=?}zk56-iS{ zd8vFJ)X7to?LR0a+nKKg9bv5Q8c@CXaclrjuxngp%@;|(blnCYaJPPf-I#tkh?;zkBz<*)EiYc>!8tr( z$bK3PdxAZTbVC65LXy53r+l>p@FFDXt4S%onyh@a6{TB{tc}_b`f9^{+E+FIx350Z z^mNAyieC9D^}8O{p#a^#HJx-DFHY2b!NrPt$`O>80~c_+B)?3M`lW+Vj;53Dt*-&; z-i8`b?!CMo4omE+u#zg&Kb$H2dcSrX3hA~NQ28g3q}w_vw|xuvDdw9lM^dz`^WuiRxYUh^Hx)ia*quiQ_5YBoW> zBZ0j$L9MlTWE12&^7h(ykl)5KMpN>gCa&-k$nV1=D?CxJ@LR|qz#}U>C1r)DniW0; zKZ=DX^LgyOS-RCJ$e(~GQfrXo1RsM)lQmlYPWl>gE65t16@vf7gTLdm;qNr?T#zD6 zo0~!2#!6e$y#`L!;9-;D8bn?T_0aa&Jw&2rsW{T*25yAy>E?!4dva*C-5Dk$i&y*$ zXq2ZT#XqB_!5{m3I&wVIS=TK`^j01cq zOF%@w)^J(m7>SRTPlSaVkucrS#P-UF{OyE!PY~s~OYqvO9x024(RGnLqCYu{#?SQ; z`K3(xyU;r$@(Y=hv%WeOjzUCK>*Oqk1%D8cKZH$ubXfF(h1o)D9tx* zgu_33$M(Cx!Hj!uip(OS-Qc-1@Z|9iJZy?A=HHLojr@1;$SKY*TL;E3htvF=Nk4%}?bk5Yyc6$6 zE5@4NFs)iZ$G_S-6#wfJpbkx|J3*IsG|c3zKVz-lx6P|n^Uh%()S#B(pz zR;EUQCJVhW7&0x1h`i6bqX<@NL?WA6)1byHJ+6KfKy`+zFT*TP*XhYwy;E>yK2k)P zmNhOD2Otsi(hPrvHWrb;tB#R5_yqJ}f7>h+e>rG6EiIIYsa48*-QTvC(n-kTAJyGy zkLMrNm6vVqw!3+>DzULBS`yeh{BnykCvPdu1Dtl}SF6ZG2rEhv$jz4no$ zn|1tR1?tVQbA^ih!w-5P=h*T$%Vi6DoOJ)II`It@c)y2&iElE>O2+pQk!KA5Ca&+1%8=ZmkiZ8wfZ13l|Jb}shqWvcF^RI`$g7n|f&HRT8C5_#Oi-*6$ zd@@dML6Y~7b(@oI=I4LtvI@5_y*4M?y3KWLGnp{6z+Jk{WP1(aWSq%%D=^XHOxA6V z=U>bn=&NNgNEyPcy;K`YTOf3@2m^m4l zO-KwdQ-;j9k+_PPT4eSj@l$5jAoCIuzhkBYng2oJBW4DWnOcm$P>&~P3o?t5I0;W= zrNLz_mTSpM0SlVON*0{BZ?BUa>Jq3(|J%f&{vB2(Yfv*%c+r&lft zRraP=Hk(QgcZpwVsZF7BgMw8^3u~LH_&RnZ|Jggf|7+|5T2r0i%oaRiXWfOwEqG># z*#N+%hrq-?hYj&Bl>RrKoJWv3d=YjIo*7Rw1F%C0_Fu>>L1{6boR^VlN8$`-{({U_ zB+kP#;~&UCCRy)3h?mxa_J> z`Lm{+=d($_ocx0r(CeYf?J1QwpMBR~SkH!xVCppJsr~;e>x$piW9_c^+EMxDV`E zhQ!2&v4#&JGau`B44#~)kf}hToS7Gq=|G~LnKzL+7l|aE$n6Gs4t-DR(80OL!v=`* z<=J2|k!MXgH`(7p<=F>;68{0-0cPIhCz*1>n=)$_4gBS%qtm1nJTgw_0#tk-INn60 zuR!L0B<>;7t3pWkoBj>Gf+LvD5Ym^1kVu4(_K~1}GtXeR+aU3)M=wYY*d^Gh-2|YeqbQTPDi5F z;1c<%DJSQgX3DYF>LF9^Z863p%pa*f)l_j2FEC9EJ%V$q1_MNP|5j+cHd9VK?g+}& z^&xnlPW0%WHWj2ooA|yTPQ0vjD(Ug-;>r6T6wAPf5K&L+%%t@zPOcO(=;4JOK z(7YcAjpu~$cs?jsi%hvE#kl=v(c|nl6-x}A2B1%JcB0||OzU1eIX^_^MI@f%JkK}a zM6Mj5oaZp6zRCb`XMM>4QLNl#%ELR$z0;^P${P34aOUN3Cff)W{#>|KNLQ}VNb~WI zM%~`=tH-gE>A#IW4VdA{p&wU*#EHz%pGzRohi5kZI{ZDe^KTh*NI$A5QEXpC1M1ju>!F_Dt7;AMBuVVJ0vyhuZ zfQMomk@0XA68`w6QGFpEc}>9s$*?X52qHC?axg|~t^>%o@u*%iQ0gt9&;=#jgZ8{M z%RSpb%PkWJ2gp5mRFeVGcPepP@`5eAeq_%BOWOzn&EnPOcR!JCtO5OH6+HzU z{u>o9po`z(ndR)pUi?&7f7w9g0cv&zDzN*u$PWm65RUarz&w^waL$vcWq9vBbn*@! zx%G2M84$xGw|*ugF`fm-neM&&a{86$;eV~XPaeTpvkrieXBdDp z%wRpg1?~QV3ZHg81|nhs3G4eA+4m6{(rz^nX~rY88$hC;8HP%?B5@%ewaqmCPqgbd zwDbSO4sRQHjU#@_qu?zW+08&yuJc`qakk+RDtb*a{3ae1ahuYgf2j3mrW|@D zGTD^(qx@M@E=HO7!$*c{-`BO=FpW}qe5f+}X+a^VjGIdOjK}Co%neQPPWKjE+uC93 zDfhoD^-yO|`>PWCS&=P9o!w#@kO~`2hZ`^f+prir`o7mu^I!DV2kYjnPs8A$%3;8@5$qxb;%Elkl}W2!~z^_q+* zz3nDLoY&}vna=0o{3FwVIGKoaLihU5H(sV2_qMZ<>d zm2;C{`jpE?zLj9P2Mv%`pJ!f#J^N3+w_kMhx4nbcpq+D3bssjt-FTeKkU4F$PXZM3rfF>C+7)deu>1rcxFA1 zOq&^gqaNMrVv`q8@n3*=63>h`kof?$#jJS~nZKg+P1YPlhC%*OtoaZbYbk79)I@%5 zdgZ?Q2UI8b+xei;epBwnMz)|$*#v>AV77{a=p#)xt#EE#+gQg=-0*i;>i~{z-kF6n%A6xs@ z-%|9K*DzvvsksJ&7hP>OHKPA|JR*5LpbQ^;vH^$wx|0Y~^0ooIm1wArJwW_&eOeQ5j&lKe3?7h>V_5&z zT}G_w;H>-I+)urJmjS38j~Lt@ScY{xz|hy*1S7Y^0P-a~YRC-ea|`xv@Do;`#Mcdg zu#OP;W>aEYUdrQ~JKci5-(v)tFdNbPARZy`H<0)mGbHd%BzE9Ydre0pa?Z!8RP|sZ zmX{i@NnrihEqIoLlB&0&+aKW(s(OGK!-0S8xJZ~oU zG8(*uM<(_UBtB$@6U$f*`G!Y%bpKDB)BjgbE(l@A`m5@tJi`9m&E4mXpNA20@yPf` zBQcv9j(-XgC*e^uOh+RUc30|_^k5^FmzrV-`wKVs3ooE+61D=}F2f^)^#C)5HSq}B z3eXrH@FBP4Y5v5PVZx8Qxx3jfxnwhdHsX=VY)9f7%y2Thk=Thx4VuRPiJ0%D&dX~S zvAoowW?oOYxfw5-dEJf?Zp9<>@&Gf2HSy;4C_sOO$1uz`e_me7Td;@R+|3+=bNnM3 zyo^WY_}@tUgBi}ztpL;DQQ!T%1$!&t5?*QWU?YBNzM0s=Ztj?u&^50(6rkHYJR%3Y zCipXCpg*oR*aV{-I0hg`6N5(#2B~r&iK;YZ%0SzDjUrYW)tZPw!UPg8UK*Ya19}UmLBh>Z4GOSww2Ay0^FjDvH z0J#E>`h)4or!Ln1EmI~mlx^~Tf4sfu=-iC#C)p8M=w@{CT|B}A5oDGi?!bT0 zmGaMd1vLBBZs6j@15P&(5$kb)Zpg^p{<4|FJLu$Zcw`Q$3JE@(!+0d}@u;L}{GaA< zWZE1=?|O|RmY4E2Cf3U>p09A=+_79L@>}J-_kT{YyHvU!1CyYmc&%SFnAxr?J)j&jWYYtb9GA2C) zn#!VYLT?-J2*I`?@pWcMup5xrg-79nymb7Z2sZjP4d*SoMC`ngUF%<{?aP=XtbGUi zy$z4Bwg(cmvawac+Ft05{T={`X06y1 zD(^JqB*Zzocd?^=3heeMaIt|T1#Z%iBT>NphJoX}EO)b+ix$DWDRhA;0V49x-m&O4 zEG=&ey^dx59iCj?6w2idpaY;{FJPPRh*_?fSh{QY0aFjz=KwsjK@k^0d zgy+AtFk=VuzM|&QLr|`&+4fXq@da1F7wkO-_{6C?4{@74P4G4xu ze*C8Zi9BZb<3C3rF%6Hpz;tAO=}1(mx22+|n$foTqj{-uX0#GJ^IdPWV)SOibETD>wjI3~cVFe1a>Hq& z*rw4@+GHwhKXrs5Q$5&%3gK~#zYmYN+8(&$gHJZ#PzWbr{v!MS1n^h!s4GqHVc8cr zPvQXIVN?}1;Z6gsC87Q~!{baDLfIze;TN|v-{OEY=03$>ALG&CYy*gJwn=$7!mxYM z!*N_KB6WCFjR8uO~s#=yuW)aO$B zGJ=IyzfLokerXiO*0<3`gH*kXXBaMkb0}0U15UwY6NmTK!4f*6!|@# z@+Lar0s4*TUv(2tLgoUrJmN2?IS-i{lrG1Ua~U%INSsNqYmm7LV0CYy=2~R7 zqx5ou-H6OxNZdiN+mQJlzz!kU?Z~`<(%<39=GEAvM;ZBS-3^%Ck%Hf(nN-05R|*<#*?pLGugooHS{?AHXbUc@jt z_oCtybaVoq$Z-aOfxvH~R&RWCmgxl7J?ae*weFo7NRQ%nn;Pm}b&kpKMMt8;IPdAs z`LAN|NV!3pubzG)T_DDd*Y;sE&{|k+s>#GwB-7-0ZRKzfkVtJo`FK;#_gWX~a+jS< zAB$}e>cPNU?jFMta#nti$?yf$b9L)X{G^UqiO8=_HSZ=|Z3cz1jXV`@yW$ z75TRgoId+WRQTao4LlGU6{U%1a29HQ#4=BS2A8*ixmE6MpOb760fPa_B zxrXObrEut68zwWP+&BZKRYau2keh!>`U3Pxasw`MlPTw$Q#(z$tQ`aOkt+=$_=l$N z3bne*bk6dpf^zqIQ?89eN~qnY#0$>aJ7)Y1Goplg2(!5tPc9`?E+y04+YB`2A~4j_ zxRY-oU67@@_Q!^KalPPegs7@fWjCDE!mlsSj`QnFv(Lhpv;BedW}Jrvf7A1LfaY#N zX5CluaY453<5olE*_Ru5@tp5BwGrzDwEVH1eK+tO@gfAGYsa;!|8JHasVUREh2%}+DPoMKS0cO3c-C`+2Zg>`!ck3-5& ztcQ%{L;9bF#9}aRC z^ScLYd?a?T_ajhMjh+|dk-*+pkT@St=%=T?XqwWZyabIX1ry-I0aI>%dP)zi?*N$^ z^dtZ59aG;&|GWcq7s_tIBbR$VK;kdV@TaGyz~UQ+C-mD=_k~8b(1SPfbEe$6T@72@AJ2~Wl#uL>1 zvVr7nsnlH^Ozq_hF`sF=$x?r6hkgK={vN9EDp=uV_^vY`5BnfgEzWhQItfV4!;^ap zGT8(kG{7)%6*@m8`)t4#5mr7IUa3CFqB?=8c6VR z?g>>Mo>GasroT3ov_nrcmFQnR6DntK=Yl?wZKjai-R}2<*L_WS_&nTFT_I?V5Uviy z%MhTzvz#xfZO60xJ{Ny^3r}6v&QbFhoH%D5{?E6T^PMuBPFZzhcjlB9*7PNk1BLbR z?$*uLa=u4rGu|^j~*-=(XJ8+KQq-jE^LC$djc4N%gG7`rgD+NV`dhC-xhFpSU z(~l2fiGYk60mu9!WI_eNBbtu?_&N5elVqM4Yu2QSyy8j3e!_{;WTH?Bqv59x4H(D~ zfK8_Lbm(ZiX#yKfNttK_#Gh*06+-&MM%$zhp$^Zpot)95HDy^)i1$wOSbN&Uvt@An zZAeaSnop+?X%PUIDUQ~Zz*ZTJ)_VMzML>EksC7ghs89?$W)>^GfsfQQw9SfQRo2}fz7T7dRzv`wYcbz(M1^*c>+`9vix{|Ma;q#3frBKf;!jWM8iwM z#}Hz&2~d7A`Q4y(N_bX9?yO1SNi77j!}z8+y+vV>%xqDHor0_&wb)|}!GTDfN}hqL z;XFB;5}zqB8x|~)wZs~gri_lajQn|zKDkJ!R9NI3C!LfF8U0NHMp&APWq4N0QgDLU znPZ(gsd!Rv4)^$ig+&lH6%*_*pH^!A;T|j+Q<0ZlWUmK)Rcz-irrsHl?mm*TIC@X5 zz`U)RFh&p~VU%ixE5KPrzt0pAg9ddcK#n2aF7#1){i7sMy{1b9++2iBhL;+0?U^}w zqn*PKJ-lf`u00myZ8Urv#l2vNBM@X|ATIFwnvlRqI8GihrXzr3OM%6SAjXP)6lF1f zFnhEfTo&hxSme>8fj#gs>-D8nGO*E?eIkg=&_syM0Xyqv>6_;aEhBIf$loxW=vu!U z!|0l1=gN||2^EYmAfeiQXd|ffwusBNFjGbFR|^dsqz1A_ceu`z7*I_CM}R2j!)8!c z)M|jlvu*pIIobR|#?l3c=YYJ{QFv&o!j`hWjOQzO?!ZH9;yFAB3CR5l{#}Jdcv|p8 z?875tj)nRX9cI~QvurCqoGX~xg^!GvnBobox}6_)@#B7$J;{&P`EigRHvAlC6h7R1 zd_<<>;}D(&L>BU+3?ET;m05w5(}Ist?fl^H3yeCKWtT9;*xRTd@?$SQ=+KV(BR@Xm z$G`azb?|{7)WJ{w<74zfrmFbS#E&!haV9>p2Jn%64zrix!`aU4cbK|~sUI`-3w&5= zqLmr(-T-%Aw{4{+sEKa2nt806*f2-UENNEC-KwH4YTRp7zH1*qVv!V#YgS{1kh?^U zm+EMd6z4aqTwOdaTs*c}W$R*ef>s7P=;Z&W_$zsp2a8o^i^@e`S(R#Pvzk1lPV7+G zZl@ZHvRq)LoU^0*ik0m;S1^xx@+vV$XTvs9Wb|HHyZj-wpi<2pLeUr1Y=9oM zOU=Fzxkc(ILLRYHh@i#$RUxOTJ3-@l)z<=Da~ewT-CQ&@0zIpg!Y5?=u?d14B&}5ziK5`u#POB5y?%@%BNcOv(^;?@C2=DIB^J9^vaW;dkPnrt!JR-x^>pmw_uDA#=~ zZ<{K(6*3Du)g4s1(H|Cn$;C#?bSDXL=2kUfA<=ia#|p;hfx$%lyy0!J%t}d(2Y`*; z1%hsje8F~`-RO3R3$RnMngv-?>AvCaccZ&^L9QeZ>VA@>m6nd!n9<*-!K1$iAzYlx z>;p1pl?>#%zfhU^kP2PEBQGNYPJatOzvJX**aZHeYolzGvww4Cw6Ymxfc&OwyL*Y* zcw0?&?VZZbXYrdhel#pP&W+xmpT|A*H8t7E*+V!8HBK{2vmqtIp%<$uC!^|A@+$Yp zA`u^%?v?COO}SM~UWL*s+0lo!s42`X6498oS{=3=xy7c%O&Pci<~$}ibEOXe$!zE6 zz}o@d`!)|1qX0;t1j`RBIGmF?lt(e-WTL>?m{gOuNoj|OChVQ9rgvw2rAs~G+;_e$ z!uwHc8(D5`>>>1x@o%=Qj&y0QRbg z?e52noC&rYJ%GQf272QVm?SM*zIHb0rLc#tdcVUN9qZDjY zQqBx<;CV_{(0LV%1t-?#t zw$mVXoZL!a63-Jkgk5v08NHgDHQyPGOy_Dl4_TZ(aZc_Oh*LVKHi4z4()$BgQcb3P zkvXIjSnDbXb=Ub3h?BCPNXz|zK;1Xpy&@Ex-M|b)I((a~@4p8;njheLpaN$G0Dm&* zDn#-*06E6_Qx?X&h_FourIYItUMG=xL^J`3cs<84BQS% z+m}Xa8{MNDzi1kND#X-fTeJ0M`PabCebIfo>|!D9z7f0HsX?AGT@4Mx<9`H?CxXVW zAnD|DiP6+{Zp89p{-c~%Hg}kPcLSCh6mE8&KmyD0r?a8rC@nW@X?eFAhj4{7x_(nK zYIq61ei;^>l#Syqg41PZ3Gj0`;WkV$5v!&!TCIn$=-D$w}jd2Cnn0 z44>=V8Vvtb+VFtBLx#UT7(U=qZ~5Ol#J&MjrhT95M&IznV{|*zI1S~AJHehY@NbRN zV<#bXI&D?%!0ueKmx4eO;}08cXLjUBF4PguKM&c5nrgk9_X|?8gfK~O5qz!<@X>0K zYiyQO^dR<)^G|px%dn)Ipa4N9tyq^?kqmp4n#`{%HJ)Ek>COqs!j9r*wb;El1iN?@ znyt{bbuqjkz|ufy@vLp>B&9_9ODQ?bYqi>IMYd3Dz;%n1I(($)?vOYT0wG;A>@M0QZ|f3@z=rQ^61~VdBR~r(MR7Sz`og zi!`{-Z_vzb2jNJkZh^G8S{p>?LJw>zMrSQ~SlC=7-og@R0tCi6EC7i8DL^T6(E^H| ztbHQp3qa%Cd;et)O&9A#)sf|V?Of>0xm=GkBeOvi*ZF!thJb>)-3>03KkW4n&e;pj z+LqC*#yfAF!`(C`$;~uBO25F{Oty2Y4OLs6vTLfz@z*PyS7g{Q`T0fN>}2kf^~iFU z(kEBWzAbj1y9Wr~4d%m(nEB4xmCF8dVPUfx>m-qMvake54oOm-;=)qdZ$>9MZRY_i zx<`G<{Rc9c(R}r#0burFp3pkydq}rx3w&rN(k+IIoXpAzlolw8J|<;$E#{o*UJ>28 z-RavO-RedQ-Dov_PSthB>{kojC~ca|57k00*@x1*a&MU6I|}~^k-(*%PgGD#nG+!e-ZJ&4YkenP0a)a zZazM<-2!}Ox&0)H(wol3Z}DrwO)x>WZF1!9M1008)z%`wBA6?+HM9r{u4vG z&coonVfJ8(QQo0uJ3ApT=YCO5zm8Fnio62ZwNqNu+ywHA#DYC$k2(s$7dKj^<^%E8 zW;L}^%`a9{i)D?RvGB$)>gkZF&fH=|mTWhsj&q&TAwUQFsd%rda-Hwl2T_{&hN=p) z+~b<%!fSrINMq;hz0thTieG;&V8*-AnOH`M9M^#vlodT*jlTdW+-In_UmaDcjukSE zr(Gb6-?1O)O>NdH`K#wq8!P9dNU?jbCgeqFlIYV2OmYnHY#@mO!HULN&a)91O|-dg zJ;+)~I=IQe{`V7vH8a zxiX9i`gte9j$G%z0!&7fiP_HW7#M!1s3PsmXy1WKIUBwO#Et7@H*+1D#3S-nr;74_ z4a&zTwL(>$g->^NKA~sW_*>$TbIl0mI1f6;-oUg&UOQ^8K`=yU@wd&z`vYqQJq#*U z0TpVrjWm2+Y*)~5mg{`SYxri+a0gb*G@O~zP>Xaloas8dyoRp@4YkQT!iak1^oZZ} z8vY?@2nFelc$({sOCsx$=Cp69=sn2Yi~WGo7Bz{Ct3|~;BW!M!%}MKr_VQs{)nthn z(J2o?4cVy1#@F)UO@!$5wxx%LMgG%=v#qjHwTpftr3!2X9)%f4%n=06+^bZzSY#i1F$9!enyJO*#~UgmgLF8+ zt(Qxg?Hm-ikgQn{)C<{Xrq+tPw9Lh{}w9O{)7jZj7fm<~tu)61y((#v>0FjAR) z8zM#saR967z$$Mppu9trYh@Xf`gbFbq9YmEUI2&F=?OCs+#p zgkI5WxT0D}zmo_HX<)xyY)bHv?A1#zqQ~(p&bx-~R?la{c7@LdUqab1+<>6dzhC=q zNPfCy2<_hwXdl=YUVG{#CD%DfA1We-61Qx|C}M=F8FwP02;3*K7#>T;LFPL zG>d0)0^4)3cv5q*P9F@Cx|Cu8t5Af{c`+ClMz3_-AVx=kUciG!7{Q~OgD#yXJ@oDt z^qv&-esT`&S!Z8H^N857?(BV-|J@@EK))3L_m8Fry;xdmKgol5?*;>$-JwqZu~HC24nlHba!LC6gqWa`z9mbddZt{~%9I}fm8j40V|2eu z>{AYt2)Rp%luN8qdUu`M8FG|{-yq4D5~UHFkb#sl8>s;M^V@k} z+0l+65xfznai=OrX#_H)l;5kQ+__Rpo!3E`=wzOzAUM3iX6Of8_HL$~hkxp5H%Aux z+9acQG!+Lgift7AfUs}{34SfnOn!7>TT%Bal7NFlmM1wH|^!utB5;d;-*pc2x zNcnyf$GWD`3u-?x$(3HeA($NPd?1)mh2NOoi#wzz@ekl~v}|f3yel1ygOT@b=PRIo zjr$wnLIm^hEzy=6h23oDkCvQ=-FSW>m(+Pg0>)@q<2pZ)Ao3{Z$wXzcxS5=dowOI- z(V4ZKmn}Ib&7`jdyAA3&hw51ecVs$WNysv~&cAVf<~loItq&7$bE4d7tThsjmMOP1 z_15=-7J8;QGOOJdA_ZwVKzlC7 zxg=YBnp-i>*Mo6J+R9if=b()8_05$@9LhNVa_M~1UZoNOLGxi0E>wBA46#V%9fO)R zh$`l(yk<4=dX?9Sf{g+?wo^svB3*29*n3IP5<+vVlh~txgn`Dpm?>MS*TP#qKf z4S0Tqn&aMXMx}-kZ|WN=4{UD_sxkb6Oy?KQMY+rD3H*?Hdyic55D7k{rdO&$MhaR) zV-@aFhhK=?A`vUOt5u;sdX@vgW_3)ZI*P%CDzQZwyI>5K_e8k-ouJJmHO1LnsO-{0 zCg$u>_N0Sqm5DgbRjb1O`QHm9B(#rGR2y>BoXw15O)nOG>#W;}L&Ynpzd=`OX=hyX zE(x`ODSC?q37)1i!kFK}OBq*TD+{hTtpl29zCBvBi`#ON>UY-wE)%ABe;AACe50eU z)*+(ip)fvB*0ys@F}lO(?H$r#3PuG1M$L=_ayQIIjBl*7icM#CG&3f*O0G%ZRGmg} z8p@zTfHIF!fpT=aLHcm_&p2PBk%<{=DHr)MPe*YYEcC`M-wRz4kdG2 zRUUHVTU4H|hwM7aQiN|u5%;bq|d0@;aSGaGxk7~d497_?5}-MG-B+}pLy zmP?>!mBTM;<%ul#~ zIlX|0)0^N{kXJdk**KH!)E(?h?a$9*uSn!_mm0;5HdkAWu$B!IT|?aiG4Osr6*x~Q=dyzI%zK?)_D;5z2_S-&&hRoeKYcXOh5K25>9P9iwXTP+$_AF7Nu5$z8 zIGN7A=-#cEq&*R*p7(Bv%!T_+eQ_7!Y6xft-Hm9r!R!OK zbzzK^2XT|fbzT_>LMx^B0nmWs-Hi}-n$tb2`2h;XqyleGAjejT`9Ib0_9BU=PH0h6 zHE&b+PBxH>BxG_ZA}6|zE@gDJI&?XDSuE^1({T7n{O(Xo^cVPig5hG`S%KePg%;Nc zGtRt7&0x@UwQ+)5R3&;nk_}<;<1546%1_GJj6D1W9+uc*$YflkvuG}*>vSoRVqQB8 z+S%Dkr-udlmWcY2%4|}H4RBmJVBO`NqcTDh8It1yd}ZPW5hpoimpb%9rHAQaokfJow7lX@?7>iCR-yycL-Fq3vrU4796TRSe z)0s5E++qiJ==6sFsrXhW;}QZV@Ktn#2~uEub?ep}g4`uK3US4zv=}qE(p+z5qmY;^JEGkpU;_X_APK z0sa-sZvglX!s9S~%Md&qbomI5@`yWbg>dnT>9;O}@Oi|-?J?)ofC?kZ0ve67i~nWW zTet2Ka^33FROFfKTzyD%oXiBnZKi)?JMa52#vi)s5IXU;^VjqW{OL}qc-gOzML<_K zV4X-GBxAbQfB7)Y%}HY(UTC0f=O5NioDDiZIs_+0X!V#nCai&P)OG;Y67pQLQVj@$ z`$ss#T5Z%nogHUlGf!#qs8Ay_u(TK-H(;qfk6*2F+mT-kvk4g=Z{J)ieM<>45XJBday09 zA8ltc?pR8qqf$yToXLn3p(KN6Eh2ExM7h_3T4sMbxU9*3U?1NjvMzIln!$T*gHW$| zY6|1dRe5R>yLG?JPYL|u{7kG$wA57yIkHl7KkblA_d_8Yt0TBl$S=yBOGO|}j4Yg> za{7>u-h;SI4$j9XensV+s3t~^nt)Qhv(1$QFyo}=?_$e8aeI@(WcpT>OA%Tn{ygsA zPF$mku0z3mGsuW@aW9iGK7wG9F(7%qlB>t~q<4-t#^t%TmY5$192cJ(EZeyuH@Z)U zB>vbdMZocEkW;R6=imrzlp;YnpQlGbI?)Ksc5)${#yNeA^5TpWMYsYm5oVSsBk%4h z%0MU{&Nsi)tIs#z%WLUNR$ek)0jk}W@AE#2-_}P>LiO)eH*dBI|ks0ihu^o`&?cO94!plrJR}1gcszB{u$O}yBP?8O~>UDK>u2|#J z=IvhkD7IMTG7#dL#7`=J!fn8m%tVUB!evT_n9waVax)7H`8>9>oXQ6tv0SmfRjB-_ zw@fJRx(EZ z2ij5`&DyF87NTI0To9Uxn@p%&oz&Y7uCC_2t%A>wJlO<%o-sq*)>ka(py*k2IR#xF zE%9%so$yhfou&ae=7MW*zq9?@`GkAly%# zIqZHa$HGN;LG30FwW)~77}RbyViQF#p&vSUyf=RY`*W+M*)ET0xVZL;X?CL!Z4&ZB zf;sXM5d_E|O*ix5F2>cdEvjf0x>}@;MVIqIy5q36*jU(?)0q-)7NR59F&8PXm#%Z2 z*T?R4#qo2#U2pxb^w<9#^!%CYzx05)iJiLsj|#HX2SYsXo$Tx#yGIcIb)VdX2EuozA-qW9 zgtPU$_8A`dx!6!COaALVdx)HgHNOX4!0hLmPygICzu%)B7WkKD#t#K+en0w2TXR+7 z?Us8yYGG9$GHrh;)SB-+;!*2fO)Y>tZ2CHOt14QUvgC3~oxbF_uHh~DFU*oZI(Bcf zS@XL*yl1=4V`l8T`{cqaD7f!4D2Ukq4Ci);Y)H9Q+UxHH;y-Ysqcr(Yc>@S2elwu2 zh5-lpHX=Apat*F;<$$<<+j7SGT2iiI97kio+RA_*|oHyNSEK>|?F z9?P||7z&G_E$J$kw?Un$@KabrH(0;mM&7hK`!(cL-9WCYh_%xDGXy z;f%#%0T$Aif_p%t9XCy~Y0I{V(7`d)VYL4tTv3-p+kTDUpXuHta>29H$HJrFe6U8N zwwak-Y2=pJe*3_K&ffD$Yuu>!t%@k$bV1GQTKhZS8CLVAsrlxxn!lKutB2LRZECg; zt9j4Ve0^BWK~r;iY7GSVh2u2V{}Zf{Sm!|dW7Fv3)J9mf2gXr2V3GLp5N_`vNiw3h zfKNXsK8IoN6T{4QK1~}IJM$`o(O-iqW1d}&VQD3xJuV7JWceVzw8`*{4^Gyf;{0r! zR;s`0VUQBi{%3e~6zqyn1PofURyX-mW1}qRQPb!b(g+iJ6pge9a=LJxfv>X~|5!VQ z+w{G0o*Zly1yq2qA0ek>*Lb%TZwComJm%x4Ejrh^3Dbc&H4}c8vxX7%ncE5r=U`tT ziaeM-=YAkyzS=z}(r=j4pG>BR8o)ZcaNNdNZ~h*9-3G%6 zH^Wz{BVgBkfP%>SJh7z;5TT?cF$uJ$AvATqI<^hDH6kUZG;^vjE)xH{z}+rA zKSnI%eJ@HC@^cWv&8VAipGC`Y+G)rzI)afarkEcO*T0jL5?xbuH zT?V`z!Y{tF<^0{MREMLUPQHUTZ(*T4x`o#eUJJSpTtffM@@DD~w!Z-bfX81=Af!+0 z23fvRJqa;H>_v$kW4vj4Jlf3kS&J@G$L+wHE*9p*bunC+oIWJss#yn^!TV%K0uGrX z9P7+y6NF=Eg3V=5+te3yhcm$_r6`?wu_|qYd4H;odCdmrHlrau<=Hr?nTzlFa}mbd zDSgeuX`uT6qisoq(r{VYZEnT@^4{z`fO=!e$>cVPJcC#q>nPMNfUY^}dSn;LvC>TU z1;KSD?%SM*>Y2RHOyrN(n9{04>)B|%5T&zQc(;7EwuWF{pk$BxVRSohj?8ps(=sCO z%*1-JliAp~Y_=G!E7(jteU^R!rN`j=Br%LeIsdbs9CDI#QND>te6rp%l!j1ojO$#S zZ-1y}UkQt5CazfT{ZJ!kgdb?Rur#q!ee%obIgU}ucb12Nlq7J=pYu2YRm zGUe#=lq7PC)N&-}yPYz~1erjA_VE9Ay|-!1ZSR?QF*DD`>}G>EVd5(1#`dSR%#=T@jVGB5Ke<7*{XN&^m=fpzZJuBu* zHUM}upTRYRsBm{yjd6NtPz}m?k(jeXyvFR{nwRUm9P|;Wkd*KmE^Fl2_dv-& za{YR}jo!yPd-GvU^I{`>+n|F02_trh1H{M;Ik0na_~|->qPE@+nuOeouyG8;X`MM2 z198|TBf=Z$4O?3K7heIEBK>WrU?(p#WbMK5FsDU7{zR4p$fM%%e4DpIMmcw_FWzfj z0DU4~n?*nNmyS{wgFk61?({3Xn;lP?nmha&)8x0N;nYx17;Kgf}fo4ncWZi{|Z1ZDj&gCM@L7vh|X z^IIg;UllEkE_z&6@N$3t9yLG0rV^`^o7CKN7Dieqc-GuVpeZ8H9 z^3jDbVB)Oqu4Me!SX*EBU{7z1Me*L&wcYV{tF5~=k?88!9E)#=_arKSky5p?_R$b%r`tp*p*ovmc^5)pml7_|@evY|%RYR<_q`G=ZNoiHAuD-Uk zyrChsym3Xf6^r$^wjXclK9jATiB#C-jg57&r4`lXvC`TVb=BpK6}2^1_r^plk!(%I zW4(PzV$|K$yWSGehQ^Y{riNI3`RTFxlA2}Zv6|Y(SVKu;MZ?mHk|ovU?43g|sfd*{ zH7>W>`g+^qt=*XKAg9_o(A^bJBx4%~K!w;q{H$32KwRepuT}LGjYOrUv7)94y#kq7 z$3Q$j5KqL`4tAvCURzgQ)6h^Y;N{JYM5?KxzPtehs90HoeyYk_tPSyj1juJqSFS3L zRn|6?gCc7OySkHIy|JEnPh0f61mRMVWB*VozXAJRGTge>-uCV|R=7LPt<8Nfh}DJ!=u4ouHQBnhH4(SE`#NJX0+^Rb z)Ga6tt($Deilx|qHRZ7tC5@%a(|2f7IfO%F#ftLUrbbJ~?&(h@*oxB|8@;6jFgU8B zVR?C()dTF?yE?Gn%)nUOt^^h_X1HXauRCsabalrQn^D{&8^G!xT+0p6xAsg!m_*mv z@$mF}u}^xF9qE%ODHUqp+tFu4XisZmz12$z6x-0+Js3}&Jh`Q$thTOEc*ab%a#fXuC$^%zu_V@fd}(SE z!}UV?R2~D1546U5x_aVCuxi5UX&qQ^uxL%_mByBg#RgA^wYIkpoMiPU*I{byv7W(X zd{b*O$xS)f4*AlTfbi|=i6uA1`rA^6uP-kxuUJ_gtE;V9X7DYkYw}YoMwwSuBebrkZ9$`m(u?3)?|##1JxGVe-&V)#=eq)0sJ`VK)jRuHlP(y7ZT(@t6y)2SVe7Y zV^_Q0DjKPg;XBPN#}V40dB@ag$qAsgQw5U?=)0rq>{W2`BoyAgr)S+OS6` zUPMD#9qmToV`KxJwj>@C1zb~AQI-m0xW=rWRb5t1T~$(+M!oL7w)LUK5GLcEpqwqM zXsD}gsL0G~i9Ns%xo6b1L9+s$?uZmv)3L znMx_m=LwmVwLTv2Z|&~d05yP3);Fj{e?toml5(*%<_m`5k_8sV=}E-;I$~7TT@V-{ zrQH^Xc!suyI8K1iC?#MY`4$>jttZhbluY&|p`gQiCtVH9Ekxm%qKIX|X*5Cft=6_riVfju;kxqrrM2}dV#XGr?$vs@qExr) z@7w6{eM$#h@>I*gNN=(AxSe}wrS@^#fbO-Oh&FSV6F-rC7Rzyx-7R-&ER|W>HgLmeHh^b(l?HBvFA4?JH_ti-d)q{W zume~{1Dj)O`_iQkY~bb=*;|kRf4RyA1t-lFP-_ASYnKND@;rMWd^b&WmtCCvKT zy1*QaX;V{1^?jz&Wfif8#&UbR|~!hc0#&=PjdISCfB8QKy)Fns;ez%x{lVK zuI|lPkOX8p^*xNj)&Z?pkWCTI@Q`3w$%gAhr`Q6uuEVAP=d|_p zKnZXUBwGhM;hCiHOECL}`jxR%LnXX{>&ur_G{7%0!aX2{Htxd~VIb&a)mN>8?F3Qf z^M%Kh#;=7<18qIfw*gzY9fpQa$hPDrusy9=sKbgnc#389VqFiLfQSx|1Hx$jf|FoR z!|fX2FNdR~qc4RKm%uGq2JT!{(qb85i-v<}c@hYi(z9{IeDBVvKsrENXM?Hda?|HC z+KN`KwxHlALBskJhB4m>gHN=26J&A-kyL-SyoXJYiy}2H}bHnU2Nsp2H5*F zhB`VpUJANmpu?pthxqZfI&2c!n5GkBbYtI#ERe<)FmJrIcd$Q9GSBH2i%2g*^YM++ zFT{KsNR_tAD=SKZdD2)Ed+zqmkr4_5T z@xz8_voM!-%3o8GeESt>usXNV;~_+k7^8b1vX#iDWRN)X-9@;1=7AfaYaQSk!^b)*g~ zduK^)89e47+Tw8%A|d^)Fj+S&u=)nNI=gy3waLZyfM68&gSR_+QWlE=AsX)0B`_76 z>I2b7+flDqW34HzZyt_QY6&EWWGwe_n?>dRm(AeFM|SJbXVDa^DLB{f)p z>XwvRBdC1GT;dq9-qxN}Z+02ndaGZQ14OCV%I$rFv>H79Af6+{o%jvhZpN~K`mCbC z(2NDwl7lKIY`xNk@eTBlK?e)7UQ9^*5llZgLH!f9+LpzW+G<-VF12w%z@M63>Fll@ zgc%))6}`2v1|40UGU*i7G3r4n1X_}u&I;t}*YQkL^N#|P-@MgV`nU+2wTS8kO z^G_JAQ%h@Wt18MKMgk)rB zJmcmw?i{9l1xQ|B1L7NBQMk~k6$yqwu857ApiurS_XDz6EZf-9ve4+>23S#BRy={?q$FNM@v9&$y~Xr&b=#tUg4 z?c30h-js}qIYEw=L5EonBb)ExNGLR9A|78KYa7%aqo?=FD(az-s{QC_EZ)0;K3qer z30AB~3WoiRpXsxpbX`-9aEmspE8uvRz@LJ_s)H)N+-{KoJBAlymu7|D6?6&);v2%6 zEA7M~l}2RxhAQ|_DPeFL7dV4S6Jgpuij^)esfTT&L(mA4QTAYB>6;#24qRE7cWJ#; z^Bl_Kgj8g}rAsRiuD~pDTmwTpR$B!-Jw;*Zi6j2R-A8?fedCMveu&kSJq=uW@`T|S z3azdtU#0*EYozICaB}Tws9)+R!!zjER0MgXK}* zQU?KC3pW+4S#F4a&M-t-~w8M-#NhxL*08WO*bgO{7FiOt zLpoq>NWx!9&2(Q8w{tZS{1-M|5z4 z*6^%iXU7Nn=$Lu7i3Fr{Fgjhj&|-iFNe9a($fU-!1BUv zPy->}Skkl5SBbcNn0iCTAqUo25o)q@wN>J?WUaw(A?8Fiv2v2bqh-_ zhS{MX@sCpd4yq_))bp4u*`1glJ2r-mjf)Ch{p(;@%88AZoz2HLrQ?W036Fx-?x*rSmGK@Q>@5G~-ru^hn5W`Jr(NI+&5HW^{dV00bH@vTjLX4sp=U)oBe zueKY(W`k`!F%nkQXG9@E;0c#nFKA55%vaATTWAEw*ow*edlwjnv3=8$N=R9R!El#@ z(b1Itz_-SFOVw!Wai9j*EEQNpho^Cy>Xy}meXWiTtjfA{)!-c-C6chi6G`xs(SN)} zfKzQ;(CC3V5Jc|0 zp_YVl(5VFmqdrh`+!M6z%(-3+u;#jn*1?R~;2?+giwP^maM;M;ofgS;jPDq}_(4W*oj=#%N>O@6&6Z7OlcmBygfn zFkr31g5?Do&e4~gBtR(wKM>pqtao%^C~QU|5G+S2hI@nf zxe(5Cjmwso)(M}6q$SqX1O^f9uWOL=F{`b!%RfrxuE8}gY_af#Ge)Dsn>{Sn!z^GZ zqe? zo4%CI3_4cFD(ccJN=g~6kSj2T^I#ZBfDi5{^n*S((fuJr0q1oYSW~XR;dn~!1R*k@ z4L2HbLgaLDCNc*REHDq1{;CFyfip@Stnk@WxQQnLOBzb+E0)lPPKndjH#3}5Tf=Z7 z!ggs_ZM*}pFk|81rU{0JC(`9|REPkGO_wg0*l8f1g!nvQGjU6(QwGb$3t=cAG5pkY znDW$NE>R3A+a(CH@VqH7|Kgi)gvBUEAc_rX%Le-q*8pc&vA%8`gXp6V9Awd@_N`gO z2w5)m#71M{%nV-lB7!A`R$ZbRb0A*I5zEF>r)Ro*6|j1sS01e+YW;#dw2 znmMZzeWFz(44>GDmQTp;F0WgTOBD66=e0QmE|lT+|89eMmZh-;1MXUZcOcOJLM5p2LI z2q(c{KtyRoQlXK#svFbM(^NwM*fv3VtfciL4iA=A1f-70;wBcNNDRyBiJQ|wb4fN$ z4?rH_x}d62#MF%withxrnZ>O{*^)K$Fl~z;A#Z-t%8NX4L5!N zFennC?Q3J%lA??e&cao&6vnBk71NSO3`R_wTc|j`lH*)qdSianm9+3yo0tf2mCfOL zUw^El-CTs`l`u$Etsn!0JfAAgo4Rm9`flj$ZO-0Jj-o6o>Wn(GAXye6BTqX35jDuGVU}Fa}5pqywCXzT<9LZ!E77Q}` zknC)3KFiU(1y>YHjYuF)6WUt)P3SQkYHq-_ce&4-GWn*O;MPn^MM%Uo)!~djEZAk2 zq|XBv^w8NzpRxm7ck1W@F{9q*sgl~3^j8mcPl#(kOwMA?|y~!#PTJ4DrifxRqrKAT( ziQG!>WhD=9u}9h=f6wG?B%I^N2ih13O^-J5{^?q`=*F$`kVX&7 z4DQQ{Qrt9hg-0LeT^*%dkfkQOwmvgR{er0?;pjmry&D}QCVvjcHqTBRowxDFe>FPh?I}1?xb?itH5WjdMKj1sMIt4P^_i z$-`T=eBqiFuMqD5mmd%)1jF|9g^As+BhLQ#0ZHkyq?$s(M7&LiH=J;MSD#8R0mFqw zs1F1la7WYP3L_N8H@l$dv~CcqrM0_1^1jonX+EIj$Ki+v{p)k%^w^o zonDc8!9vI1{F{eXD~=&>ryate2l3w&sipaVk}FmFY2s?*MYbLz;k8Q<0j|e!oe2tR zK@$*2OB3&6u((W1V&>F@$BE|Z0nHds4W~{N7jk&QB9jfe1&$K)g%8k!>-(*}xbO}0 z85i_GRyh#hAxi)+XdtSiUxP_`jRH)X{u+hwN!T0b?dHECGFo9(ZUNQ6S zA`AwD2xdEtr4%YrQ0W7qRKXzpU>IS9+oJjf&6J*ma&;?eG0gw#>`TC-Dzdh3cURwZ z0)(*0Di{_KL_%0Z7*PYrriko=iZ-22lLV4<>`p)&(TvV0?%;}R;*R5n8#*o+x6#oV zMIC4KbBjA8j)SA);Qqg->YTdwc9QwN=kG^zZ@qQu)Tyddr%r7bI*zIp2fk|~t`pGx zs_G=Pdwno-uZhT3n-y2hhFw>hs`&dZ9fVHjTol4lH#^fs;c2dkVG4hA1(PWyDP@wT zSKZ+}&pUF#yru2N6n3q!Rf(Mmb6``e3htZ8p%glzNvAXQ!5O`lNv+EFT6M$v3qYrJ zd1)?JVfiqEU6ddx&Ey^4J$6J6foGJd%qUvp33Uh3Z(Wz~-ndm)kC5 z@cAs9d2P(#qA8pVKAs98%r+GnLb}*Q(#zo;?TA#yE3k@dD#hM6kh!8nn6VX{u+O8< z63?E$w0OppDaGT)l}s!tEgnv%-#1-d&q(zq4ljGt?PeJCT%VP8 zNO_YCN7&8%WxC~u-Do;?&nGN=O=-qGoCac1tg}JqyKoTe7;NdwnI9WB8zR#Vy+da@ ze9TObq0`1492oO#1bHv*Z3Ijpwuy1KMQbkETz#U5O4QLt@4UJ5bB-nQlOH+Ord@a1*13j;i}j(&CvjqI=xIn8Yj#6IXl$UT`|`SRCKqO%(HL&G0vTLyFHO}w}sS=&XWa4Lz2|0 zv93)z*{(aGvDtHQsAvgR&~f&QZ%@Um$ehxlPjg5ZQ#q<2yy}{f$kBEsVj{Q#hX%)7?G)0s#^R@<4%kaVF>t z`B=~~cteBPKou=n69-ct>{HC0jrE0@@#V)Zg1@?0cRU`CX8m#*>lw{lVJKx{tFoB(b^WrnRm%RZ*SL_aI<*s*`b|f)%F2U({V- zbG7q=(^I(3$6NQjT&EWcw083meA;yJ_ayTL0Qo#du%&p0ucGI(kd@$c{RCsa>NsmF4v~+QidsC9W=CS;f*^?uAv7 z0V^vx^6I(>G%hap$^Ab}Tg(w08B?&nSIG39(vBO-Gw+t7(;-K2M@=Yrtm3vDa3uzXU>;IG8zK{xPCr(_Jq?E~YV> z_~@A%9NkQEENwfKB%QHU>DtuThSVC|sjMDb(-5!3j!R-}a*SD}q!XQE8?%|Qn3UEu zR;0$lZ;elyI0kNB<0)e*>l(+FSK}PLpTq=es>{b#CX?;y$Bh$SfmH1YiSbzT0SL_= z6SG83$7yl(I>@XJ-vYt^L6GkFqDKWm$Z1z*bC?98#wN=**WGu*{=>j`&AA~T5N=lIhA#9Yk!E#a=*mzbCn}?4 zz^)8!4Exf7(L<4!B0=P($j5#p+>EluF6L5p4`+)g9OrWMDu|5y(bR=4W9iWbP)=`D zX73@Pg=)wRAycDBI+3FX7eu;zDoMjmY!Tz#3nGX6@dV?@s@RV=bV7fYM?c9=e+A?H z3L;y7@a22ANB@S!sg>MuM@d0qXsioEH-|zCsPH=&A5#$d=O@A`;^F%iL>_Mw93@*f z*93YLM4ta%aOL6n#NPrx{YIuQQU$H3esHizxRk<>O%UZo)aFg6HmeA}olnB;=ES4X zGPXDnPVhkmkwe}WAwWNa3p2DJvfNKEcptxTpudpm(Hu>Fdcjc`k3U4;&Gf?yB95g; z;RQ!?c$H;3$AA0l?wMwUSI#nM*RoGSp=Iim&{birU+SvxBVoXggl|#6Z&CLugzi-j zQ|Mv!8iig{yP^o~ihdnM=OfZehC@(plb{wLi4eA4aVLIXTp z_-tWlS%*UUq+1nQqE>0KmNY}G2g3+I2(iEefR=2DmdpSTtCtigUV>Z(*cJUD3gCz6 zvy|-;>0KRW>jQlf#L@BMsGk*5KMP5ayTgF*4u29R+{go5%d^nb)C$zpa|%??QBAGD zA4swglAxwmpr-D~gFr}gN8VHU0G`Ufv8w@Y?D|qS055gh-OT{IQD*?C!ZhHMv;C`2 z^3|b5YW4M@(244L)3S?5@*QEoJE&z(H1aMo@}3BJ-&BZuljJ?o$h*kMd!n=~IDF?m zo`>ki^RzUJ{x3BekZHMEt=n@s3$t7cgMtCj^|xHw6MzUEl7ip|`tg`InPj{=fX(A=9PDl%N?)9wd!; zFtm#-GFow0=*JM?A4AYk;Nh<$2LC$JL^{x<&QZY6QCCpt3iS|a#6wa1i>M3Li_!Z? zBknVO2fV&>HqsN6>-Gq1#3SAC{Zp_jyo@!%i01a4Au{$wL-zfN z+Ws~CBYvS1brIeFvGM(3iZ?~>h!|76dZtNtP(kDrYg%FL1TQX#RQOG+W_5^%cT3SyC1kViF@BHk*x^iMdwrN zexuGpGkH>dZ)s>Ci(MVkigcHHfO2?1Jpz}esiGjVlKD0(qptmO zaMFXNk5hO&{@uPwp~c8LmS#4E&?Wl0&)D>u?=(#Y{ErqNfC?Khk*h2AHsdkF&kJ&$ z380)j{KGbRu{>0>JFLi99(S;972R?Na=DS;92=wMI3A6DX|zo`gBG>ck`$pQ77fxZ zI_O}$f1!Sh&Iyk)_7#_JBtFFciD{PR0ImugxTf$u9am_T6IGkH{i<0-M`Db_c>gWy zes^7HKLB}&sVfx9K}D*o{s31i@W`MMg+3NHWE4Wa1*YjIE>rj-$QUX^fA+HtOa_*GNvCBi8X1z%>u@6^9Z1^;C~_0PmIKl&;nY(ZTa25NbCU7X_IruEVtz_ z>29Op%#7Ya-q4QFbH>|N&xP(GU*?|JqcOxj8hb1Tv%IufJr;W&IPv%We7uIj@fg}l zmZa72g2(b)=-wEBdx_T);RRgt@@$P^=;PG~D%s~Lvgc13UKl5y3*8?Ba6j={D7=7c zUZ(GeVD7(d3G<*`c|%}yhm6PD_(^#CF#L?d<0Bd=JS%L|jy_y!XMd#F|3HvVJsNLE zuf*F$>SpR)H>4n8}^N)}sAB$0EZ{!|@$6wV;QO=R*+`g7bOEZmTwCc0S4SH&;o<{-n9G7`I z?hs3V2>NAP|Rt=T5K*sN!FWyhHNeiGfBe?a9`Q z*S2qtuBTXwpk{Eti-TS9&p>}?iluvr#kB>Bc|qN&`g5whf=H`BmBmdeFQ`-9%xZQR zrYYY_Ua+BpkMnnR^vY@6G`$NVEB(1x+~nc~buN{hYPgB@f;q9vXlz~1l{lmzGTmA$ zKMp2=pdOLeb1HZ~lWjpjW^t3s3+hx?d8tP;`z zR(~psn^aytd!ZuBjj3iI`1{}>}U#-zY}`e~-e@=2**HjA5Fyr7oteNHv7AhOAy z%Hk%K7u2aHb63KW%)dXDPJw!`xJl&&b*i_e+nQJ}m^(_4v2a_)8OF-#g)yqvWnoy( z%ffGViEQ4xTD{rjY?@nQ$U3|0^}RK8eeW;!0m&EpJk!U-Jk#gLc`g=V0&`6Fi1AWVZSxv2GT*Y#*ZbgcQ=c6)mh9;Bb{{h=8$u(|tv1;%*yl}a z)Gqa)+XV}Io7P;WhK}2}Sv~2#Piq+O;~&lr;Lpci%hxHI3O+9Y!RG~AdQ#Z%J$R~! zqX&Tlku#e1+d~bCwXHdO&1B z43Sq@T#u_$pgr)>n;9)MBZL>^`Gx?>>4wpAk}z@7_^?&FmM za076QyI$p=8HTPrAA2K)$G50hJa%?}vIvhSi>O*J3uwvnw$XH3w~=3VYiv7t zV|RDI7GA5mw&`HWzmNu`4R(l5X3(;jz8j6Wu`a zPPdC`>VI+J)rAP%TL>{%K+J2qn>?=Vep`1Wy{-Eus?$wH*A#*3z9RgSs&VyN(FYXz zwg@E=BjRqbRiyRnFxY@^yP-kE4|E?15*z@62MTs|^$6Z?Pw-^d%e#35v5C?OI*YC3 z>b(~GB;TVrDM+!6+WCRJr#$c4{lQZ7L>Irp#lQ9fSIB+OC09?gcMA`eZ2lZV1-}_; zi{P;(`WsDy268X>g-{Ge>cRJgBb)cE)=lcZZKJwilA*dh1`%|dx(;_`<>-!fJ^Xp< z8QmC$=Q7P2b;I73IIJq?pW(!chsTOXU}?D*D!*564+*f*E^BNYbHytr-NHp(#B!m@NJh+NrbN~Uds;05^& zQZ~v{V00o=aX(C!+U|?m?mOG7?3q&}CPtMV+ioj+rH#>*y_wccz`K^=jw)N?aw?{y z$`;bzTK!|2nd`8E$P!yiT6V{kxE!u}N;k~cgs6KV9cC0md9u#1Tv;(Bj<}vCm1h;h zB2;7{?QI(4OXdn6BG4Fu7X}+c;O?fRwcHeALdOyB(>RFbyBl&vlsIgy&NPrD8f$g8iTq#c|lMVWZ2vpZ7CPS_7+$(D3$IWtzAJK)NhVk|B8kmT0 zY0-577G2TPxwm>ofDFV7k=JO2lYW$wFL?neUcnHip}<=aaM83O_XulBv>IMZeV%x@ zr`iZ@$`X?8MHbfyX3E6$Qi~5nRs$#NK7gX##yEyS@bv|`7!prQUdQPruRW{vk{4QU z5Sv1DhI4XTPvZU$3MQniU|Hsh4XHbFxk_A)PV|IM^z0SX2_fx;8iSv3Hgg?|r6SAK zkE5}pdNs{bMmBF;L+bP(CmpH*D3kz!tuzpRG0A8VmZ|o&d4S%B2Ntj2IKFjw+ z4?Y&>Whdy1KxF%u(m(d575yD%Fcd-LBf)@NXwo@Ek(iFzNG!2|)_lPe1S}*L*=~oH5InGu2z(3|5}x0CHd{ZgYbgM5!~IgK zM;cCmKm|dhojkx`lzRLlu>{~KcwkQx4OGs~<&=WRPnI4HAUI~Ho-;}nEkCzytYOc4 z=_}zft*n5XRB<&g@m(FdiPq_E3OzylHaN2oLISt2RFcgvh&=os7E!IcAmR%mli2=D zxSw8e(Y6M#JJY5wBnwm67g>}oq}PQ@VGfqQ4u6o6S99CsYx@&h%R#K9NePHs(+H8~ z7%1a0e=Fi-a>E6LxW zxUK&-c(XbS`>Ou%7wQIB0WbdV(SQ5Hwi@Kc{n#?@4k5b#o_5!MAAX$nnH~?HLj`V& z{1^fFV`Mv(`$hE=J^m1V)u?uC)+i$je1UUqk4E)d-1-6*F{>ffoDj^(1lyqB0>EN? zz+~9htonwFP4t2X_BAQqT|Lr}DQ5&EeJi{db2YS3Z1RByhZVlrN(x&gc<%aAlIgMN zS}zq&Is0(WRzcE-m_ENCvc*sD!##S)bBD)&vMm|p@!=l5G?;n1n}$mn2f|_uJdb+K zd7+Eh6kZ&C*Esd-^n~LtlCxP!3bPVH)@O8A@b)69v z(VG29!hWHwr+cFNn9sxV)4WO;IKv!^Pnvn$2)#&z2Clirg)0`NOf9;9v(*W88u_(B zo7J4VLjK@8p{vpPY_ul}HVrKUGNK0^jz5Q=N!Io*591v?W6yBx1Tp|l>=h2SK$bT|G@G|uJWO~EKwA$u9kqD+uUQX%9omChwY2CP z9`$^*=KSN4@$s4(E&A)wZd%;f9o|Fg5@=Chy4h&0*~g=@O*%A{P8XMSXetuOJ>JTN zDsB482-&P=-y8M?{i3b438)H3&%mD#t>QW4wzAp36aa zp{4)w)rjCZH4%=rYGvwFPIMx(D&oIg+gxh)BErM{j1C$+i7q3>3w*B{y^rB@nD;u-iLeiy8KiH z_5G!lMxY8t;9vD!rv9bAH|KEie9L-LI*E^d5PI~WCbBk7p^N$K+{Mv*$g8*~`W78k zL!S<_OW{6c^D+L(PZ2s@d%N1M==mG>H+gu9R3z9Qn?Nt*9t^gBjlM&!%R6u~5W3%e z46ch!;^qyIl2C_Mzb7x^qsW)^xYm8bJGcYhlP#$}ma{PeD|UaRl^$P5FQUC;!wRHF zSyIjQ8!P~BT&He`+#S&`AK-`{z33%Dk|mH}ky78#>NSz$LBw`9*j+ME_uG7>2U1C@plQq11^}=Bz|%4-bWfp?~6P@8vqYP9)y`v4@Uk$Zu39f zbLecuIe8c6A#`EhZ4|mK52qdVQpTZN%>Dd6CTdmnFpSqnVrS6s>juxfS_TpO{w`*w;9lBg!`~NP*3Tlhn4@2i}=S_oN`jD`bhUkL|=+A>mOUr1%}}aa<7FVGhj^ zk$ak@=m*X1cNuNdHpT8UYmA!WeoLYBVUx)?Y@$?eP`{dou|YH$|X)H$~2+8UDHIDn;m3>Q4xo3|HCYS`SM+tvERtgR`3I`S8o$M9sY{ zNN@ylxFvii4NUTLueBsJAV&{CKf5mc0L}hh5C4D%2xI+AOj)2SWaGMVunS_faVld# zIrE|04~L$Iinoi=Iz(~wLR@!oDsnWzwS|Lo0xIE;KBIctn;}c%nJ=S_eLA9*XfRvKDXWCI^7X$Slk^J*N(&? z&~s?=bBq>hGGCB;u*6%Z=5#*4tYvKNB4zJ`viGS#X(}qs_*Z#9Oa&3~&-G~acsC!# znNPGRc;($xxVuC5Q>DRQC#LRKmN)#z)_EQD66du19-3hT!9qkSR&Dknr^PNW%9*AF+fTraA(~@Q5VpK&QeY z0i{|Ysbq~{qm>BdDzoL9bR}l$HfRdgY)PqL`%Uo|tTaywrhOlruTiUOO~Gn^Bg-ys z!ct)-TK0uh;?$QYGYN8G++SH@%5Lak_|p`^9-`LV@L?b$` zNU5v;VycgeLzi*qxGZ!tN$UN4^hcoyj#`XLU;M18bMnZR*LYbF9|a1@&;po5^$XC}^Mjw4M2Y~~=H zUx3;2g1q;j#c^>oMZYMg2x1g1L(a>N$J_BInCwqT*z6&6**`QfhLawk>9L6p{%i_w zrbSP;PzXi-nzC*>n%sBU0%ljbGEE`6YS( zp$#N1V40=pK?Urwiv<7HeU}ztnB;s*GAMEymJSD9M?L#)7yD3V!PmXgQf#IrN^I_& zlZU7Ft3x^#aZoJ@SJPNpbZ33+tBkU=7_r5QMm9DdKtkUjl79Z@*O9n5|RT-1W zB~)xj3O>>%=}*;iN9a*qJ&%TdrW!mix;bjdQNH6Xsg~zJ$u(W9FCI~g5rs{##gh1Bn|MFSdEjJlnEW>}f$nKmRK1cv54B6u`tW>eCR{Z! z-jiGQ9}!l2z;pE|VbUzHQTo7HD+ZXj5HXa@^1>?K*tCujTym(^a0oXZWe5VEIGSB z+5B~n!CDD!Fo)jvuKv01Ua4!npK&9Z=C?v`V(m%e?l2p#IUI%s0Ix!b#4Qa{&{=?c zLzp$MP)~>7qSeK_aC;e#bMz{@$<1-6+EjXtrUth5me5Vc*2Y#!q}I<6YScYTAO~L@ z*ttv8{Uq9tTK;zl?!oSxFD#i|YZFr;Qm5k2ze5+1_G?9)Wupsm=(})$Eu;J0w}yps zMk39~DL6KW8E*JHgO10iA4HM>&PRe!IYO$OeB6UP9a=sf>JNRL$UKH32sM>pV3G~8 zS|-E6fO?yiAD63vme8=@6l5zWy41&$!O&z3~48w^VY{%z`gH>wa<#?l);Ln|UvMDOs6IBcGE81K{(>>vW_3 z^*o(9obKG8`?Zyo?rry<08!Vh#oOAwB=z19u1_q$^@*oR-=0<$$oJJ#(mQYc@RU6pWxes~~;H^fRS?(Vh#juKeVrTzg1V0pK7*4l6>{<6UM`Tz`N>Fy zvm#qRld^!`hkNwM{Z{6WvhTJ0{kW0Jl9{qU!l|&}-_M_m5BG9`RDWiAtaH^{dOwa_ z0zqB&u3Q%EAvD`|0hz^3Dle#04d+ylt<2_y8t~x(*$!d)!|~}De=Zg`xp+aHOQV-d zy}$K+cp#UJOpg!I?6Oj!EEYGpctM@Z&72BX9gF9|vi zA!I53Ttz3@0z+*6&qism+f7|{&~DmOxH9}(x`q2&b+PWh7pvU}+I4G6;CkuI@Txa{ zkvMJ=$8};1xjJneDPodhk8;18(Bh4DuITN{rCbveNeS~LY z;MytmqKW-sO63ca#Ex5Oa~XtOUJQRuBN*D@1;%OP7|LRUep3Om+n5Yv$;!{Ad--u0 zODv(bo3XJhJiIr`Z6OE2W~85u#f6Op%#hT;>G)W@4f=;9lFGe=36*miI<~E%vqK+{ zrz>G6tYQgXgmCcfr}u4%e7F(C2S60pvFUms81sTT8??I8`Hzbu0s56!Fa}`s8!#9u zIe0%kPOANe0U0*j1cu}Gyd*3ROF}&%_&vE`zYm>fChhHsrb6YWK1yELqlUA^|rlJE=kcmbESbaIi{qg@9v)}2MM7{V_xbXFc8&(lz*(=;6x6PV5`oX77}RM4rK z4ogE!=XXRZt(4kx{9aFU>1#eK@By8t*{P$};udrNXcOoea{pn-VAv@1piwLEw&Enb zowNpTTSM=naiHS(={9SZat(^GW(}E{t)bVcjb6uUeE1jSG{ovTmm>N2f(5{n*tr5I zN1qaaUOyjeZqg|RqbOlWF zcd>q^U(7Uq+)VBL#(rj$Z$F$IF+{kpxy^QNxV(Z7@%L63gNaO!vj`h4J#3KRIE&z& zk!MYDpBy5TSq!a_TlM;Rqet~8^ zFW^gfk<-qgZ}#0p?&wYGA!-*bkXvgL;^;d*s1V+U?<$C_+ij#COr9Y{dzWr%+BL@? zEQMakq2r2M!n8LmEb`hpg&>F18NF?ldXdGy68N)r=Yw)6vpC+HhITQ|7Fint;U?;?Wg>E|fT z272{0vxgpTku41xd@SzU$P`RD1;&Lg7^Ay!Y!5TxjZ6s!=2*Hkj@x48=ms6@MqiVH z^(n+1azmj1x@CnTtzLZ?gN7M10rV5hI)s||i_YkWz^o4$3pE%!0dJZf8VdR)WCO~X zFAm*#ADCgunu2)_LTwK!(c)3c-*7DYS?=!cK@>1sZZMTTG z|CFO^C`a1f91CeZ2h&%gF-{eZ(z$A?YB+qCJXO{OmZvH+(9sDT!q;Hz+7 z($T2o(R%HT2vO4@6k8zqxwsju-<7jJ`0uZCnt`_&M;hiw&O=V~jx~W}7yEPak{*Pd z4w?c}JB0|56A1k|`Eof3O?METJ2+wn-ewRzMoiEz6p{*hnx~f1F@4mNF(&5ra)#E-HjG2gPpEy}JVeDOw!c9cy;4a>$Tci8f_5W+a z>gK$2V@|ZzLQjX(pWJ)%oaiDYS+)hs=g_#&WxTLb)r??qNp0VE9^vN zDN_lI+i+6tw;cWj!$jMu&>aO|@aH8Jw5?GFRqDfx%AxEKLj1xW7 zE>|>%u;hjNZqa%R6{&+)2gCCb&hUbQa!%LB4xDJ3C&0=Xg*#0*fQN_lVx-JY+Zq|3&4a4Rcp+gK1tcuCUBYtGlftS{4O#C*d-C~79JW+z>Yb>Zr&P`iHDe*NBiCLGxziY(-yKWYBP$QHDohjeA+YI}(wq6+$} z5ny&EpNq#uXVs%e`|vF`ewa$tsO+zts0Vcy$TPaA^nOnCE;ixt$W?4qPIwSRv++aJ z0VPg!)DTgceN^#5subl3K>IsU&lay&r*2S9q4QCVH?T>iuU5~;B_-6^UoF&6_1{CSYg&f z4Tp$#kCSjz4H%+EjKTHR4$+xV>G48)d%n7};IW=g^jr%KQe!X7SGN^B1XM1jQxA%u zkIR*E3Ws|+QMoCuoMGy~u}<{%iNZKf&77wyw};iA!q1^}*B&epuIhq>KTVQwKXo;F98mUI28oX~NK*HfpRBmwV67*O5jYiTblEf7102>ag zysoOpzG^U;$r1}Avwc+Gn>)aUsw0k2(-%9@&6XHEyQsopP;3ilTZuyz6p-fok$(ZGybdl0XJi)H4s2qIOk%`lx+} zz$Z9Npb@HMf)ka`!RaPds!LDRcd#0IfI8@~{}KnY`0e4sr&4Xi=K|Fy>bWR3I{p$> z??yj_^HDra2#VDaEs)v|tPTP(%yaNLasp@DWE#9&kM@^N7hbSd7zyO#w#xZ+7&m9h z*I772NbU%!W_(u`e#K0IMyL^`u$D(kxR2@wU6F57Vy2)5PE@~`g+{X^XN53|eUqoY z&wD-Qvq!LdI_ zuLg98h1RH>qhF#(%PcYvUqHPM$c+~HDuj#2mjZgxLNA2yxyH{>?#pKj^9}F=a4{kJ zszqE?fPQ`W9HEG+p-bS@&6RLh)vd1@H@!VH2@QCZQ1w?Wp%>9uCtIY4+7~q%2t(QA z%lM>RUEohnK3X{BsR7XTCvCVubt!V9-akFys9qbx_?G|25hqWMZf$-%lqdhL!98Hv z`Hyl@&X??-d35=B4I$0+! zXP90-Z9g;5;OA)i0Zt3cS#MxxGxI6Vsh?|schoMoG5@B|nE^j;XM9@@{utwXa`0Dy zll*h|_6~yj_pZkKID1d!3Sc~npspW2lE*L(`4FFdoIN@8rNBFqe=_rFWBpGuqZy1Z zm}ex3ar-V{eC4qQKY{5h8E<8r=Uz^o;0p}>{Y-y4<4p?6QZvv=x)`3@S@STj4-K5`W;2{V39%>j&Gq5vR z<9!|HSIoG~M0D2QXKVW2&Xy{sXFl}ks9lzV-f?<4ZJaNK=vSrrK#Ly@@;O=K{hi{+ zgZMeXdzz$yzbzWaxKM2BVFt(E-wFLQOyAmI=xdq2v`5GM|HAaecNu!#s&GCKe3-%O z&BKX8-+PjMt~Ee^=3flF2lcNU{h1*2ry2TzOkc*hbG^YIVm!|Hwxc%W~&l#^oMk1Y!CW!9G#_v{oB> z(c58+x8&4ADdRi2g6A1F&Md}d?`Ra`%Qemc-=kLeoNDrw_Byo_`U{y}jvvltUe_|d ziS7)n?PQwq7l04tcmLyKrgzRVeA1k62m?V!&U{`c{8x8^pDuhpGYrOZGoQuyCT-! zBCS_GfM4J2g#K&hzwKnh{})Ujglwm_CSv%>_;n@YrFR?r z1=hD)I^pv$)5|r&kC^|T7~k`(;qxN%iS+5Xem-XUrkru#(ft~Bey8EHuX#BAI_d9+ zccPyMGM}O2qwek|kl z>^}@+d|4-as+qoZjp6ec(@(?z-BEwp*a@F&I>C2zg1^!U-llPkgI$a~Vz)z`$g>+l zQomd9xe%RjIa`Vx&7IV*26{KZ}^=!8DW^z!k`CrmOY!+0ypDf9G87%$7|FLyJ( zEyrFx!nho}JCFIlB=kJKi=KR_aW16q@fFkW;eI6L>Z1K9=*dfl@!Oncf5uDMpS*_@`u>|f2MKH%=h?_>Gu>F zdbl6@*GtcTi=3T2j}ti$WW0_2C8?jI7+)~R@WGh|{X1T89`7zNuv5#poSG89_=8Pjr#+ybMd1mssmhObl`AlDQpP~Q3Je)0z zZ%Z3M{H}W$FMiqJe`fj@7;nw#j~@f4`E2ey@n1~8Ge`e_()0tJ<-BetRS|)~M^w9C zvBt5!oo575EYIPLH}N<~>%8<^&iG2UpQ4}jo$x=O>FasDVvAwpG0|Hx8jEkz4&z{jLX&f1k=wJ`kZlR8RO2q zh7WHKIAizexc;k|Ue4&1F#krz%U&>i*sM60GcKP={lr8&4{Mwg`yPK|`eL?w(y#x{ zc>NH=K>Fj4jF&!c@Nc-?yLTdgNhf%j#xXwfJm^H0X({6^jKdAqzcs*%ur8N7eywBr zotGJTo?-ec7;lRhe4%+b_c8AL$pHLWHfJZ}+s-xk2@%8SAB>mf*nuAzZ{>Brah&fU z?avoEa*k8lYg8wG{?tzJrOc=PY$Hz@%hSO49&WECobP#zujKWg-!gt3<3(JbVxMa2V%(IOC-+nEDhuHc#l;&J;6!LgPNc`L&Me<%F{6 z=Q_sa+`gN^^z_R~1}9j`;my3jbr%PutXoXw8ZT*ljS`t@?gi8+! zpcga$k&Nf=_YLc$y{0mK5swQCna|OTUb!#aC6=G^8>m^@&VFNvV@so2qMw*Cra0RjF)FTur(% znAEVVkhGQYigE`esm$6`CZ1`mtE;Z7bShFcDdedcXXEAT z##5YRy0)Hbu>uv%&w`fkFTq$Zb)V86Umg5s>?QJQch*6A)YQ@ok}*u z5mk#~S3`qL(s+G?)hwM0;T4VbC8&;U11hK<1>(|HrPFJ&oEpl|n39^-3yzpF_3=}j@_})@!9i^ojz?|{McEu7SCJ~Uovg_ zyqT0jx7;dlUsE=F-rVUk;^RvuluYcPt2^0~YoI(6;^ozKXxcjT6Vl1}3~jF#CDw_c zsk&skBIUq1CD+6gpsm868fqt9|A}(EYXc%JnQBNRtL8#4XQ2-ttJT!WHdLe=8>~p< zOAco0x!EO|##C-=NZ*YcbH~y3UArPJ z);()c3jGR2N};Zj4eRSuQ0SWUI`lQDrTvn0*s;=0fVmn?fG zb#h}WE5x%?4b#XzP-WQiPEV(6JZ4mS%WYLA6*Pk#lxfmLPJ9fcTD2ZEo56opa;n*E zb!8oFnUO8yXyXGrpCHY1;wgHS@-<{km(A%7@inRS^@-|?)IU{oRRw}jVYU~IS=e}H zQ-yYM;&YFMsi{CuY|N%AI3}4{Uk{5BtU#&`Df5iQTpZMuX`y9gh&Z`UXJn&1;xOl# zM6v+}ur8G`#zF>!`08xBPKqVH+Lq&#bY0E*czt6z=T?gmBP~Xtd_C+d88+BqQj1d( zWZPk>PE7^sm2HX{(5WX-MYHas4Qf(#0dmuypfILfQeu|C7)1`4PA7fEN}o!S$Y=}F z@oFs)wRc^zwmy&(xf;xAZkDh-HEC#r=2pKxz|EvYdl*hydASX^=fNU6 zwW(Uzx{edhq+wt|Lk5*ukwvv?gQ5E>kIC^0bdpSZeY^HTiD8nd#0~3G3D}zo(IoEh z+~Hu)$Bm0uH8j-QE|;sqw#kF_XM7#*`8;Mq&TJ=!6ESt2MEPsj*Qw_uxCwN{*#X9y zG>jw_>00O(x7Z?MM~Qk_bz(sprWn2xmnKVR zZgRf^1xULlrt*MZC5V4qd#l4qew9-n_8{U2T42ZFwqVyBd$R z6)8Q0LFF3K6@iK&|JrDTbym5AnN`V2Qx2IDx29$d7sd2dU0>c{Vx%vxuAeX-x{VT~ z;`ND!D(WRkU-ud(#(M#IY}2)q2U}UMjc_}`0&@m9t7KMl2088En#`>?57*t2>A~Gc z-mxCMvV7tNm4L@b?F9-z42PiE@(VxsICp# zOp|zVs=>6(oKy`8%Pf7GKex^po1jjh!ThxsXlc?VTmQDfrF!b&oxop=uSKyicEOAo zV^IY)!dS1(5L{-M>`Jr}kr+=yda12Iv`lRl{`mhgl|i4W&Zd)7ro^*w1nXAWwmigg z5CYio)`2Zx9K{X+p{+$IM{2nVp1q1x>@_fk}p*h=>&m z7{EG=uniP5x6a_5&AfAr5f5ZmQfjGHt7;mvRY53SpW_|m>Of$)((@zs;{trR(xn>a z8U3Xy=zt9NQ1@WlJ51^$WvbP#L1jeS*)zb@~uC`wssTR!?#i>hU zegK~ps|;LYcHs1l(0;*Y)ua>LP5kiu#u{<;O#v30*}d^T19hm!CXfd}!)tC<^T}dq zLOOp(HVw->by$B0v>D4EFtkR!O)~@rtYlSnO@%FS`|%o`jHV98FJQU_q=}eQ)Kzq7 zXCYHVdQGZMk1c)^6R)Vw!U)%42?K_~lvDGf&TX{X*Ttbk#)Mfd>Zk%>I~p2ubk8|FE)Cj7ZKq2W>T1Iq+lc)bVaU9Wb`th*M?K#wRKoTtE)~Lb8C8UyD2+{ zL0Sg%P1%EgKViw2lN`{PXzriQ*g91ncyX9 zziGChQ2}USc@|?FIj5X69NuJO4f%{@H!7-Et*S=2VZDR$238ztjwg$g9af(BP|Vm2 z##~fAt8Sp>H)*B0b(&t<*$(HqlN>XYB$KFmQa<#EKy8pN%Y4)CrHBy0Ra!7;O!~w? z_0Z(Q_6$=l%w(ystOt5wCorMQ@w0e}6A-Jz3Ib0(l$$D8W)}KTD4Hp(OO?X~T0>(9 zbq}-d;Oi;uBm^?SGHEBXEAix{X1LZ-3auQAy$KX6h;?s*>I2tv8LcRw-e_Uf2(G=B zr7-XrEW48hio=5?Prcp38P7M(96`KXYO!^h>V}jydgzvonL5*QY=cZLylB}@KfFmU zdwZs;3HIiBD5x3kwDi`3ksqOrfF7P$tiaX*7GjnhLz56*>4sxO>)cDI*K_erhxT`} zx#*&E^lC8b34UClk&JlW)WI9F?Xm>?=34mNSv^J3>&+c-;3b@TOn|vgsDoljI=w26 z|JJ25GRLAJk0x>*b^(Xm1Z!<}-eE)(GaZjt!WbGGLF=egAstqSt#~Z6VEI|kIkmqE zrIbl1*I8f;Wm9C5i_ySbi2MfH`!PO{F&zF480KX?Fi3?RBAVIhp;a%?8QpR%oSx-qt zs=Toh$;=#ugSxLsRC#$OwN?mgs_Rnnj_Q>bA#p&faJU~r% z>Vm(yIqBv8v^s{Bv65-^TgNb0Vk5F=+kEl|KQL&N4{)U7TK?Wt@P@ zNOdRavF)pW)%Z(EB>hO<@0RB$d{4|!8y@mb&y(^0&p!DJd9zxc+n8A7mwe<&_qBfV zrElf*@@(Stx$-mYT!AyJ16#V7t51n`Lr!Q_Z^zz)3lK{sk^iQ6*A>>bA^fAZt zGgtp5ojkYYq%Y%i@@)HG^8bBKdie^0JU{=`$RmFxUkN{vlV0wX$WzYY3Vn_^&a<3e z+F$O=$+PVQNok(N!JzYJgsJ`{z1)kH=Vi8GO~Ty#-^xjU%5=j?p2J6&bn;j9Pr_8) zbXJSIt-U9|XSLyzOD|!0eu=a=dTrCoz5KoZ$MioUEtOyLxA%_MaE+89()TO&z0+#} z5>pk~^m2dr4wJr^+2nCLkz4fO4&eU$<(_fzT_z#_tDl_O>wm(h7ZUr^+w-y8O!`ua z^!dne=DP`tSL#;Pkom zx9m%ke)jB+(~BH*?3vzk(_cpy>G7lQ2l#)IPM&n!T;Bb3iK!<2qf7m0d)jk4Nx$zU zCjAsSXvl1G^P(_!kw8YvuQTcEiw#U>Sn2BR=yoop2WF4<< zC0WaH>|AHp_pg4;bPop<=$ZJn4Socws(VgV{dLZ%b51?x)N77c8&vRWs~1T_P%>LG zeSMjG1tF8k4C4PD{EvRdkjO>~PUXePLZh82o!I1+8vX3^1y+lJob^7`>y6m)Pxx**t zW*6s##o7Cg&k1esPA!v*^dLSt{gykn4*MSy<{uV_>#ovz z-KXI9veLM;LX#wf!w<|Ieo&Z-J)d6?rY4$OSO8CqR*^USA(Qmtvj{l zW$Lh(rl*50d)1`|U9CJ>uPytv#CsX_*8huU9y@hnL0F|LXd!w@7^es|PY6iVg(=9U z5H>;xhG@Fgk$Q!Fs5ufx=I)<8eSA?6;}xQgg|&+|U1ekg3WEQsMonm(uhxb500k%q zeXc+yL}MI{mk?DkRd1|%jp{`@HMzIW&{?iM-RwVwFu1Xg$D7mM|3}W#Upy4F3}1`XNfqJ31%e#F!&vb%E|eoOb#}D+Xr>_{zbeqzi?{qR=NJ69kIWsPgYe&f^29^Ya7I*4&Iv1P_62%L zIONj{GeP|eM}!N|O5r0v*?e%FiW!Ep_$(xMPe8Tm-d&tqII_-j`LRQzLsw3PXgN!i zEU&Fp=*oF|k*<=Z>w&e=%R!TF7^`NTn@1|y=N18>iHcWUtv4WHV9-|yof#e+r0AkJ z?IUveQaQh4Vq)mZp{J_!>41J6B3+LqL!No<{M;kK=vDkTgxOQYQyAF8i$V3R#swPX z@QKq4i&Oij1yUEB+S+m>D4u=o(Wxc6e6DeR3RzhiQ8X#Ek^ z_f_hkE#delGV%T=9>fr+x(7o(J{XhFgFgEnjMa&!L8lXqgET=7S^zS(ooo$n@x;j^ z5JWV-1q8I(sl&zN^AF803X&*_m*rx9WMU$_eju1R9WXShRF}P4y_Fn}#6OsYTMxn+ zl8K=|*Tv??U=*GrOKWY@Pw-%E#buLCOmj9T%2!gn#c6GLaAbaBLrbL9J{TaaOvx?e zN37B8<$m8{sk+aEqgDx&M};X0AIy3&?C|`;k-67FA9Q-NrP-!}&j+J6{l=mE$Q)|f zyFo3ju?Xrayh2^A_dC=Wd&mZMdM%$HnMLJ0+bd^%tF+z@svg>?>bAFI6|*OCR`vO5 zx-vL8VvJ^=ZLhV(nn8v6jVf%t7^|yQI86ugtb)t=_8Qu|G`LX>truf8#0q`*9?HQo z9nI4AT3Vbjun~RsN{lkgPM_)@9JzBed$FBdz%KzLxs3>hGg@>047qIj%|DdQkBp9H zpAYQkfJ*SYFQgS%%RyPoh`mNaV>W}IWad*1#!jG7m{B@)o<1X>q`G`AFhascZD`ms zIw14#n!QwY1f~}vOH6>Pa2^KUH6&wW5Lq^n2^JYspg6~@_&|>_vyqu&m`yIO2vet* ztIxFZK{Nfq*oa!#?IuzGLFzZE(PtbSI=FSP&hmRn0R@aG}cz>wPVsC=jwsE z9t}lPDNmj`i*EX(9FXzf#a!)M_hfaIT=K1om_^Y(5KUU04UK7^xNj`4(j{^UE`vj> zPf<7E%i{EbzQK`uMmJLb0ozxk;BSB6QQx$M`R4unS6Frr|4shy_^%AVn42xm_kB9+ z2JfW5yG3Aqxm>=Cf4RPix%KkJoJd?*S4EE+n&w%qK{e6QspyG@qS=})63Xa?T2MNhL8SC=$XF_2Mo*>!Bm zF-6_9May&yTRs26RclR(N!@JV9y0+9mE62umimrF&%(y##P#9+>=nPqHRN*&_pFJp?8D~Z(dlKu& z_}R1Q+|qir6av2c_3P!kb26G@DGoY9CEHU?)p2x{iV~qjLc5mb3N5EJz13;O$I~RmLWM- z55V3MPCO@r`6q;VLKb|sW|~dbX)Zs_uBM0(Pg4qH3;c=(g*4o}pS0 zI%+AJ>QUlYmMOWKDZ7v~2pZKbL$h=lB5TX42@;;}>WWA$4&t@)t*=1!S-L6{$3~-dl^BvNnqWgoQB)l{IKO{#&HZ76bAbPY{+L{X)-BSQ5P z+a$Io0eFak3J6_8QlNj(cBoo(kSL}LA(9+SK86LJ(+migsT(GQMTN4rECbTzxvGr` z&Z8!%VXC;nQ3wF94kWa`Bzug-Eytx$bdqi=8Uz{&NhO{s8mfoR=(=g>mW8@)TR~5V zC8@3|Iv&(l4*);YmDX2GO|yw8OR8vl5MEKU3=eA5FfECC6!U>y9a(epG9)3d6&u1+1yvdmDBRgoCF0_AU+x(z*ya?Pcf!dV53ietjGAei7WE)I<; zsWz>D1}4!~U+WJ|Tv{*RgBfd&bLk6F~9suWP#FL>v!6{6C8enY9 z%wT(zNFwwNCN>AGqp6lF_5l68F{k5=<7`!A{I2muXjtKN9l`KW1&tpZCw6VEfoG9Y zT3M|j`cB861%qHRR83i?I&n23dBg_1m_0?)lVFQ^E|61gLvc*W({;~7Z*9+NoT zF);FAi5?(6*m>fWV6xhfG)1>ui9#P+#Bm7>3`;Z!P^B8I8z=#d+SHQ?tW?ayvVnIz z*qsnkd<5+m9lYf*hF1y92n!adq{4u4AQ3VXXr1aR6q0D^ibEuPgcuH{3eQO3==-Fd zr(32+p1iWPFKN-}1nS9^(R3Xq6f=@E(^e(u78f>V#9FFx3zB2s598uPE49G#v*j#}qdUF`F=N z+@g7G{d6|L?6zY;Tk8Zqg@NvXmzg@0!AEe7Y?=8H#3L{wU`T-Xh(TeEIkt;AP1nR; z%%-3GyUt^RW|+1Mbqp;m${2hP6N?Ee*di|TB%r0i+sxsBm1STeGDKBTCD(yjuA7c% znlii)Qv&CBP%N;>MD&%-NHEbcH$q4ZO@f(kn|K%YxdrPQ2uLs}z?g=9{gHs?-nARQ zcHWF%w-t)`y>H+rGDD9J{Z#&U^Rwl-;T`;)13yvvz+kQXJonzg>C(3bzd7`Iey#BO z!mkbg^x&@+pDX%)Qa4}Jd;>fZh z?)Rx^vOx{QMa00g4I9Rsq8pfG5g^2@2KxsNAzTaCKQM}AL;?{wWS%9C+JQ=amvAadlv z{fF7*hz^0-rFw>;GM`^_Y(Ki=AutN3)iXR3@ePHlo`tBHp-QmbWp6U*k>-f#y=q9F zgvnWh^@xB6^)SDB7DA^w+9Mhc0zQBOkt-MlM2&vkD7EZ23;6hrqY>H?XdV$EZ z3X2+1D|i~{BgioG8m<_kqoV2}7-~%fZ9&uz&LnFp0;KTP5Q2driGfEW;hs5`EUG%3 zd=?)zWm~b)Xpv$Z;Spiv$HTT@EnNrWBC0xBGzDgU@^sl>xDm(<>5y~SQ0+ANo|;E2sufx#PCVc z+wD^UiZ-H2mW}o*2v|!x%rhIND1w5BV_1%7TZr<2i$KD(nY)D`mT5UUEJ1|5cllHd z^Z*VTY-o=~x(VVT9(Y8t5p#p<0>=;*wTv*SfsiyXQqXw?5iB^#aGzykr%wfO5)&~@ z@EyD&(Xd_Ey?u!Dy&$b{Kq9Hpjm{EdB?T-3XD59-kU1&+ugJXsPg{~k7f7<|?*v!Es7(|5s z5LH1Gm?~f(0x8hoJ;XLMj$R;AF zOx#tp)_}ziHXI4sqL^&>p*WynJ&cd2sc_CE=w{1e89<7lpl%}E3C6b+U4g;{RtywV zv3CTxKs^!-kwVjj(eEHi4pjgc5rNh{7pfY15FtblQD+(LaAd475rT$+4HZjwxBFC} z5Fh{)x*y6Ao=4zxBV3Ou!-3v0FeDHwj5&k>?j1ZyLgAQD#OI+(q-{PGq+JOM3IuCO zlwdwWILfna{P9GL2qF$LQ=<-=0X>Mw8+=Pof-Ztf%7UC*16)jC0nviG#F7_NjSfas z_ZX@gaFTQnBoVE%6h#5!B2eY%2m~OK0IjddTYM@KmTRC$MDPs!D9jqFty$nxYB>yJ z$i9bF1&?6_Wd#CY4a6KF3W#}&hQ#|+H2AYv4uZ}Gr-O}UFf$Z0CPC_AnZhH8lVLIf z*FdL3jQ}8~TEM+Bu_aaId@9|p>Xm&e-7Zy?d@9|p!4!Nd-3F9~d@9{8J>-2V-A2y` zgC40aEC7m`0mhO7UWep42!7fUi%?1~<~7Er2pCXs3XBFDi>k1*u)u>gE#11=r_ya; zdBCUAZB(i62&}_Gw{eh`|Ife3ukm+s@8!;NBjw*OKVP0JeXI0=QoS@Y{DtA49zMf; zad=1Zlf~zXhYSC`@N0+$92oli&`%9*L)74{`Psp54*u$3ZE$+vFAz*fe^LZe1X2W2 z1iC}OpC@buYxI(a_`3yn0E^XFo5eB|e0dMn78Y5lh)_Sl@dWJ5ArcYcEE-s{A_yy+ zSOpLK|8A)S{(rYr0{_2TDuMssEtSCk@0Lp7|949z@c+A|68Qh!QVIP3Zm9(RKfwk9 z_#i3*R}MT14PgM;f@cVK1KuoF{t;wx;2B~A8D8_lIW~Blz(>-tFGvae|8Cn7`2XEf z3H<+V*YX1YzgsGS|KBZ@(EsmpH(}uaciWc0|L>Mc;Qx0^CGh{dr4so6-BJns|8A)S z{(rYr0{_2TDuMssEtSCk@0Lp7|949z@c+A|68Qh!QVIP3Zm9(Rf45Wu|G!%*f&bqv zmB9b+mP+9NcS|Mk|GT9U`2XEf@%?{(e}?}n{vY_S^DpzC;y=Lu3jfpmd-&)0H}M`% z_{aH2_>=rY`~&=9{?)w2tNfk(e*S6x_520?FZti$|CIkD{^R_I_+Q}vHUDG$|HePt zoza_qIz=EwAVnZWAVnZWAVnZWAVnZWAVnZWAVuK2i9oKukUhYD?PtHH*{><~Ym)ui z$A0Z)ziwy0CfKiW_G=IOC9q$+2l}(wfnEOZo&N9J2K)Q6Ytk5ddMo=i8Wh|T{25_I zJJ_%7LBY1*&sJ8nh5h1#0xtMdW`7p;l-QF(P?Qh;3UOWZ$jU*$)5ju-f8Ugq!Sk01i@TE4=6jz162{|)>V z{vGi4e+dzQpX7g*{{;Vsh#P#2{~P`rJiAgL{Yeo>5l9h85l9h85l9h85l9h85l9h8 z5l9jEb`cor&t=cQIP>WPVdA;{QDQnuOofTJO-6}*L1Oaw-Z1gt?O|g3M3fk33AQu5KHflrFX^BJ7ekF`2LA(>@M)J*t1(>>Cv|LZfVPp#NOQzOK)#`Z(Cb_ zYwX=Eu{7WI9@myHm-}~ToA;}hVxKI;(nD>Z%D3eQSw410C~o&l&>e`;>MQn-6~d7Y z{Qsp4|5|Fq65$J@8|ylCk4LF zUFH6o`+Gje{}lhbJdg7Lck^fXbNpNRf6o6Z|IzOVx2Bb(2&4$42&4$42&4$42&4$4 z2&4$42&4#n&mvIB6~Yz#DD~X_W@@^bnu=0yn{1}`g(ZnS9~4;ap!1Tk`S7xv}75FTDKttx@XaX!AMN_FL&) zBjFoZ-;YvX+TMKr<6oWpI+F5ucf$93g5oErO0!h0Q&_j{zso19Ewtzz99@nYyCg>rNJ4}??~+qJJ{uob-w-AGg2Sg z*)viv+}1Nv=f-+Q>hW89M(X5fuSmiE?is0FBfTO8`@d(TzO=n(q&~Z?XQX~_YtKl% zZ%fZey_@e9DfnMKBW0C)M(RSTXQZ|idPZt+sAr_qe9uTt5B7=_oabJVx_V}yXQVQH z^USO*bbI$-bN~Oq6PcmgxzF=2V2%G^`PWN7U3zTz^6*_nQoObBTw!+T@45Gs-+*2I z#j;fTuce!Yf3x_N;?EU+f9RKoF62L#{}=fa`Jus&4!&Vf8F*>neIS^ zkHG!V(}k|X4+nZfW`A$UO!tP&RBy;k_J+*9-jLbb8#1@|hRj57$czVMx(zGr=}l{d z-jLaS6r!2Uc56Zn?CKGnojsy++XLuVU)TM@tyJNtcNuHBwKrr&d)2L5dPQiYHyzv2 z8#3E_)vay4BDA$P9oy0yGJLPP#r29%xi^Gx-&=1GD)gp3Yf`>fga&&zNQP#JhN8*_cK&aBpf5M^bk3!9XSKT0sMeMr zxMZ(ZU7=oGKDR_?8pK|r!a}XySQS?361gPQo%8e}5uUC#&I`v*omdbWIEz_w%30@Sov7&wuS7t%E7y6oC|h6oC|h6oC|h6oC|h6oC|h6oC|h z6oC|ho+H5Z@5#2J3H|JDz*zXezyB``0yo<>$+! zysh+w(z{DbrLp0chd(m>uHn}X&lJB@{AkfEa)nJ#mvm^u|q?-+>lS~;@VQ9TJb;k3M9pYf^;^b z!)VRi%V>>enhonnYpGVJE_?m>p<-ro_t?>9)d;^-8kbgR=XxjDBi5Di@J`0@MCJQm z&8WpHzm{6F=1gY(?qX(Q_t;#s?p5m02RCO`l>#0{UQn8BLNj0mT zx~uI?ver0XTWxi>`R3(8YnZj~a%)`L-wlFb!6*mM{Ba)dcB^I*)k%}_TC8)7F~kln zo;7@?G@5|6y%=w9lPSf-2u|u9>XNRl>(s2)p|04A9qVec>M8Kvsl943voqc=vb5Bp zCQ)Ipjg2;Ym3XaHk1tC;;Yqoz6K%p74RP*-EX6r=DK{hDi1g)- z-Pset_p9E2$EIa3cYLNtQt#J1b+ApOHWI$v{DE&@;uSNJ_@L7LZI!mmW^<4)4^DsA z<=AiXt&sJS~JJc0>v146LIri(?d;4bO zxL=&O0Xgo6H1!+f#msD|AXeByK)r$aq2f=G(XxY~UZXOuesFS6TkqTCI_&+`+6lq$ zeJ>Qi)f(0)YBRfUKmlB>9oy9l1rSudf9GZuz}4FE+j^q_f|{qs+GKG91#q=Cf9toa z01QQutYFFyD;;gCbOQx&wRU;%mhZL#2%0=O(#DpZ6~NWn?9Cm7aVzr1NVt{gA*NRIuQr-s`^Y9l$W%on?mV;FS4<8w8r6yNKfFx@wj z>yj4mgAtVfev-W#50oP%51JfU9lIhFUNjed;2#d z$4`iTHz3DPK$@O7l4TS5*l0GF%Wh^OZ?*N=vm6NA2bX{MY?=SB8GQL)2H*ep2P_DX z{-g+`2&4$42&4$42&4$42&4$42&4$42&4$42z(DAFp}+8vh_8)c_^SlpF$wNer$VR z|4i0TSM1dqaUD``)H$^LmO_Wu+4=v>mhYi{rAi_o~)|6n1K#D+$K#D+$K#D+$K#D+$K#D+$K#D+$!1ojaW&RtP zE!odyO25T_qSPqu9sbbp+2UUotHu7pNa1&ej^!5yUp2sGKbL(zdta6v8AyNH5a7Qt zSURI+GdMp^pQ*oosoJ0w9Ji_Y`ATBT#YNg!tvdCJ)TwmK!#53%95|4D)W6R$Bvhxb zU!ypr-jyxv^|_!CKu^Jd~*6NcWlXzC`$Gn{Q=EucZ(z%5^NwT zCuv{%8DXj@;0G5_&Mz#^9i2NVJbZHgq1ls<3J=abD$JfKQlAJsaSo&{1L%htz8tHr7E_z__Ts#rMj{)m4Fy%9riya z%s(s;*IlLcx=$h48pG~fNRki^KQMRrL18NPe11WgnhdX&BE1d)1`|U9CJ>uPytv#CsX_*8huU`Zsj0(iOB2y(H{{Pod@s z0g1XW<<(Y&un|HqMANN~)GO>m&5<}VcmM3^cGw zq|mlU&eP>Y69oU$VaI*Q?+o$2GY)oug1fdFKo&7$f_yB)7@~G@Wevl0S5O0M-%JE8 zGR5ij1AKn$p3$K<6(FeR&e7HLWZ7M!6^zajaVWcJHQZ(uz!-_j$@!y94mNz-2X*%T zMZ7b=aBA-4qJT?T0}}qDM;@445EkYhxx+8>?+OtP36rsECyV#Z9i3nB-##*Td=A2Y z|H%^%MZ+0UIXNe+tl1anC48LG3o}9e3r7TYs4jfuCz}thQ!&GE7N3RW?g^+?-Mfo( z3rE&@Ed5G`kklI69P3SGhdvvid#T@S2{UJjac!&o)z+&ogrKDP)6O;o(< zDz2faQ!wbOgw6~P4pMYcoc0m9e5st@F)=Z8<mmN?dOgWBgV;dh*2ShlTqd z4ST?}>E&ak{Eo@Vq4h^t--A=G;rJ&q@%|?s#1N>u2SYwS7?aO~KKmYw)rqG;rxT5X zG(iqp05Z0nYz=Sm#K|KNL^Qqy1hm?z!^PwC56v$Mk|>Io?8t?VaPr;nq9h49UdMpX*}tV=xL&k)^e^=_h!ww&I3YKu4OhIZ?in;w?^V z!-FI96B}A0t@gnHX=O@oAwOb`W-s^q7E9HACLFa&pgjC5lYB7i#jwNk3rFT&2Yt}# z&6Z}H3O*l<+VmTT@*{JoW$y;Hw8kQ+tMCeSwchVgW9%Ut*y*)=eqYJ617!5@%JPpQbB=gCoXh_SyDYTdWyWnBSP*IV`d{W$1s~*ToI;DFIS&w<%4GWgRv2{u-i?d{>xM1jIL>l7PB}5>m)*uOuW2I8f&Zc+A(3*=m+L{G!#vxJbC6Uy5f&=K*oO;bG2{Xlhsvn$+s$E7Df9& zG--7?#eQ8$?Biqi-B21o80-AMiW%nR2u_}dRBc8EE$<>EUte0CvI zJe2>rd}ZK016y)$?*E&9()X#p)7d}FE^xnEdRy^hZ7y$`-2j2h{kP>u?wQG6o=obt z*h!2ElTm*VVufR!wO#BD|6@%>8hbF+JmkUL8DCxh&{%%t5E`*(<3_;aYj4A?uiOTF zs$&!4{$r);PXCizG2Nm8BO5osuf4qqqp#cq|05k65fDS|mxo95BS*FPAS40Ov ze8;Am1haQ?aawIUv8np&OL!p7&^mC)QVk~qC3XAOBgpNh{ zBTygyh=#QMDB<-;vDS2?<$p3pDo_b6!RbV_Nh^4{joDe~r5Tk(oc?&zu#0sqFcoKU z3o|)K6a5pS&-#s8q2vM!FuU1t48@5YBah<$evUI@7V^uqjWPS5$% z8@RjoD;BV;lp9>JxN>-Re#fChLvPv1;!ebAz$Q*CyVNU7wR0Plhw|Y^<2HJy6`1me zBn~UAodB5T6dPn?@&BM8WGfbS4?obH1A}~LqdyU!_M>$XcOWW>p?2#*|E~NF z%NlxXosD9m0<6aAMUmGHEwv z&}I<%x+BsG*ZMOLGZ@z&*qI-jQ-4%T7HP;jOx5l@#A?JU_X9RyqrxP7OFT_7Z9uWv`U+uvw&>ZO=V+oLE1soN*H%Ex zF>J-rOx;3drfQfHkknjHwM(InZD zC0nK@lM`9CsHMrOr%H+~DKh$~=@>!PB1HBiP4PBY-{Z@JVSS1R#@1DtI5yZrM~5U? zG&R$a6h$Q(zKDY;hN%$)qX|?!%{3HT)D;z6L|wAU@q2uEAgoW4J=Pt|ajBzv68J%L z9S`HE63-M3)e~K?5ZK7FY%1EeLTrs#lIp6W<6+b{*S|B%xv)Ojb|e*0*;JDhBC3*P zh_Wd`2~b6Ko-9BjjHM<`SY>mY*?S|SQrqUP%ykE$dsppus?0G7*4RN8;Frv0j3`!O1*si9k(A%5km&e%o|6{{@GQ;m1e&?_>yl40g z!<7H?@`w3P^S{Y`iu;Z7FPGm}`lZr)`G3MMac|(BEI(SFFFjH^%D;6uKb36L)%+hD@ot)UI%fbpKd-X`i(!=aazWtj0FYvoBnVn_i{im_- zs=l{V;XTdvMqe!b>T604v0nSsf)hKhYRli<%m>@q?`q3i&BiepL^GK+5?M)4X0=lP z&Y*65N3j~uD9smr1mt8^>eN}WQ{kQ0^!JWyN@kip3J^HhmOs$U2MFwM%TG5O=OZwc z%uXh<(!OMNZ@kmD$1@YV`e(267P~tY?z#q!o!6Ay*6eTq&{$jk z)@D8cXtXVVOS5r4KqJZQ&55kEBbnVE$7EYPv$gr6kHAgI?3PZQ7wtTUf4-hD{<%gP$^AX4=vxAAOG?2{Z;+^h~XZm*b&lWZgcKH5(=@&Enf8zf= z|4aP4_;vmQzsMir_whXU4emd4zs>zy?mgU_;rlz>aZclQaryFpD}T29vGV)NKU#ja z?3GWH&GMddvGmo_pOijc`bGY0{1^E@;9ul_hW}yyDZau#z)L(vpL>b>H1{FyXSpBY zmbpi`d%0#d54z zY88vI;yYW#cf^WkTEz!r#Rpo&`(wq^t>URz@noxbU#xg9*Y&<+A1E672nb-9*Gs-+$!D?E8gBJ-WDs~+A6*&R=lNE%*Tqk zR&hC2Txt~$$BK)s;zF!=s8yVg6%V$G2V%v!R&jrx$=7X zQu$w(e*%8}^W0Xhz-7u`FaLG<^W{G&f2#c3<&T#CpYs3B>D&x=J2%Gt3ip2QUttHp zk8p40{#R~|TS9!`G43_o1Kd5_Z*U*vKFL4CAK~xjWqz6$_z|At2e^OWzRG5l9h85l9h8 z5l9h85l9h85l9jE{zG7>KbJlK;>QA_eY7jC~+i891apM zE#4O;W~0QtQR1E`@#-jXC`!C4O57bK?urstlrW=&5hhOQQ9_FnYLrmIL{5$pQj`#* z#GO&%jwmq`B@RZ315sjsl$eeZQ&D0vO6-dgd&5Nk?NMSPNL>Bkc$lc|i4sDT*c~Ny zMTwnJ;_z>5A~mH)K-`{iFR|7!VX%kL^bk39mlGAW-b&y|hxba|{?E`6)?mC|37K3)3v zr4N+eU;2sCJ4=^K^%BLog89U;~GnrByEBaq7eSkY#nkmomYo%}Tcb1>$Uo8JVH`24pQbH*LDFP`1DFP`1 zDFP`1DFP`1DFWX=2+ZX!m$Th|kp$;c>Gta(%088Dzx1KxQ|b1r9EJm2y8MEMqEDsU zuU#nkRJ#2#g(06xw_lNv_o;OI#Rr2vm2SVzV8Ex+?Uxkfd@9|3^+3N*rQ0tQ=sN;w zEOh%d0lxpwoyhQi&i^`Y?0Yls@kjY7zJPQ3pWyy4?uT(#--+)Z1(mimMIc2WMIc2W zMIc2WMIc2WMIc2WMIc4sJA}aXzmI^s{^RoXAD6EGc=-B{i`Rc#xc=jz>p#w4|MB4U z9}israqjw$`>+3a6Zijf{FRJ<_g-)dAG?o_-OKlv{tbQK;Q!`3#5-vT|L;t6|KFMD{=YNP{eO=|_y0XsE*hD9ZZ^aHTzT8jC-RRCd}jE?+-%>c zvu@V?K?eOh*|(z6_qogE%jI0(#N2xMVy@f0PlTwRW9qu*X}YCTMR9F|N<=ecs$l<+ zW-G2PX{KTzqv*2h*pg$4x@n7+=@_<(dmpVeiMZ}6t=EaYL}yz`fj&i-8^Y7o#(BY= z!8gK+iXv&MYe}vyx)xQaPAy4sB!#+$t7|5{rPgv?(-2+T)m4XzmP!>#^i<7uZOM`q zk7|}Do2DgGPp6)(qFqGSsq7L;HP2LZO_gk-NuDa39zF*GRF(}{OnnDZfU(*0^AJn-LGFS-<|7rn^+G3zp$`} zuAHYA=_*;8ixMH&GeZ4*ZEeXFmTL{crb4|@TcxgmFYUZYmN6PjmpsK%Oe%T!LSWT# z9oLj3#ZX)#ina*EMPiGNVpxjgS%xl3vT0MxunkjXXiGYV!f+f%1pFe9l}zGj8g&du z^-Pm^U=NoObQDoH@a?>k?8v%nsE+8Gl!!KUF$fXb&0YjpU%0Zh!1-7g#%9;cmk;N< z-NDuau(zzzb8Aav^^*cwb-R}IZ{G{x3s%~Va#HWf+L9nV$3?$l9K%~cKE zb{)?%RLi0UwG>VDC~+*ylw8e}T}T=Pjp~-6S-MO-!3U~VE>1PaG7=lC7%> zbc-lSng+c@sbPVpMr2V$n#fc$JZM!%xj}uy6wzAH7k?;L*Pxx45_)`nc`#H$f!6PK zA7l@PU^+1b*VFov=sJ$3s-^<fKhQwm=**RJjTVL zF(uWe_0ME7**E!Ge`w;;difsAubXEpwGG8FB~RBq4_Zl=4G)GACRU582GKR@Is_x5$qt4}k}O9fx?*Cg)@;ils)lKT zI>d$ku`wJll{`iBU|(5UYy@I`31{B*(?bE`g|V6SawXU8rtcmgKG=EUl?*~`-82;4 zawQ6VY!SyLFfc69AV8IBux_9PG-^{%Ca_X556cGL@nClvx{i;i#1I|4zA?u258_c;7b%#o-q}j~sgj1m~)$ghz%zSDSmx7H&({Z43OmVXivkCLYEt<#H zPiGU%-tE5k?#JYlf7f|Tpp{MAg*t{77G;wVPr)qd+KNS79o0fhgSUaT?s}SGiiRPo ziYmDd%yQjyMAMW_YMK&-eKq?;{@(ATkNksK*Oje1lBxvL z0=!(y#Kb{lPggWiQ;FnCI_7qZWgxM-D(fb!U>aMOPF@hOvZMS}_&7d$#@Z-*#r( zm@08xxaX4P!dh^2+0;};G9=lCLNMV|Vm7mNo64Hw!2pL!Kpa3ukpv@}I3C#Fl~uT+ z1Qxpvi^B8ZP#GfCBt?cPf-r@LD1qt7wxPltH{jGlTwp=kDl-6Om28%Qzb#er(uwuc z+Y_pU8Kp!+M8k9;QH}&*g4$!Vv!Z)|LbX(cCln7ZoeXv8$i$TifyBWXQ7qlGGV1%818sKxw!{F6Nq78{^t9OKxw>Zu~42QH-| z^}zHnY#_Tb0t_xlzz;$s4s}3p!yhG*LBUoEUM8ji5nvpDBSEf>oX(fB>&sgM-VQ^J z0MeBZ{UHeaQR3+YzJq7m_~VJTWg=)Ns~RjQu(jd2hzG$C@FY`2+zwGZ@Ke{J#xMU~ zVhFD1blObUc$zEAM1uwr33P-EE5lSJI5P11VbX~bMexycpqmuYLgYm<;b(eqTHsUa z24+WDvuxxI_7O#;7)wl}hU=T$jv-2zdMT6^w3B5Z)CB=TF9~cN>jp;w^CtkW-5dZO zx;>8SA~Hu|?ZX04z}-;h4%{nSG7uA$Tvv1$xG;w?`YIR-JcK?{gpkl`9f)@u+kL4J za}~Zlw+FT(Toh;;2NRL&L0iiroD`@&*HTqc0iQrGO3)_+%FuN^m$KJTCc}kM5D!+s zOE6R{*_AxS)?kl2Hh~HwiU>0l0b~iPQJ1im_yE&O*lhOmqf)PolagO|b- zK;+Pn9lUE{28FeY^(zw|DB|N-0fJo&XOu;qTnkgGW>eT?x&jUDQ4cE<@SaS=)`{rY zCL)H41|p{Q^CAuVf5hC zV&<|;%(m3VeCur1bjRHJ6uIPaL>Xh#fjuAhiGy3vsy!?LmeW85ql!1g~ARHPP{~01Dd|3ljt` zpn-)w$&ws|bg+0z5PF25!=iT)F+>noV?KT_492TV%>OTBAI)&@EDsO=Lh;1VpA7t2 z&g}aU6s14iAh53Pj+BPAUcM=Z&?nYg4TzD;tXFtirfqvLhhQ$jdB6Z$9)45{%TtIZ zgM}0sD_$^fDLx6ONipFVX|Sv;ld+P4B^pGdZ38i9Q-lo+&jZUX2zO(F9=?;PF&o&F z37FHwV%Yf?_kAQ(8h!}8wa$;&xA1W75zlgLs=IL26xp^EgTR9G6f6ZZ4?=Tb>|wE) zz*#e~0Oz$C zH26UhQ{m8{2;u5y&ax(6*}E&y3E8oSuyT1Ohe)N3hd{ZZJDe!&ev9} zZ@?m^OP6S)T3hyr2W5!m7abML@Te@fSq2u}(Mp8*;KyqeF=?y|yKsCJ$hj;bkcky{ zn8%LdLE-8ML>L%N70b&ot`TZ=M5qJ=id?LifduA9EGV0Znn*T<=O$uZ0nFnf1k2{Z z3v3lKzHt2bnus^gDAL70f6xCBX2gra;pT<|`b=Y$IE~PHnm;0VtF?>5oWBjkz9hI+ z1aMZ_o{*r!z7_uR$FA(%8I2QL_CJ?19H=P|1K@gW^9BMH24e#S&c2FhJfbORp{yEU zUShfy7>osvR7I4qn?aLduXH_5ABx85h(8_}rE4607TSQ1h2=CEOU62Cg$szu*>QJq`O2s+fZgVg*jQsGkPd{m*;1NDO$dXFeJt2G!7NMc1c1>2cOSA1 z?Fjo&$7(WMeR!6h>F73;5Jt;^Uc%tOMw4ym15s2EwS(aX`NLtM6%;rvL68nw~zP>F;U}gymRsmcTR5WoCgIi!jyv9=|ZNr90-+NEF9;H8A|mcm1l+J90`t~FFvmu`T5&A4oUH`B|HAspSQIIEaJ_sXhfpZh zM8q3m72|`NslmL3NlR4OhCaY<9z+1K_lI#GxC5b58(K`#97N!uyCD)?v;Mh+d3kLx zEWtgtAz_-uf+#En%y2S#hE+}McY!Jrbq|XM9(FE)H=xfXVj+mcmH<_@Gs7@2#bOys zgg*vlraM!T@FUr`Khp;}31Hw#u?4p4OfY?3)of71TNkYrWjBA-_ zFIY^y29W>S`k7l}R!=3@?MU_j^2fu;yQ8pST_5fb^aEDnHC7q+K0sqjk__(&F;Ej6 zg@p-dewaT7wp}lGVMPn;0$63%fScT^HfPB7O|LkBxgGcoO!T zjtCdZFedQleJhA4a(soKDf4hw7u)^CrU@T(7#2-*M-%9Fs|0$0?#b(+i+zQb4toY1 z2D=5?$Z~Z{CMvc9+2B2dFR)1wP7UCIUy7iGjfv7k;1;u}W5AciN;IXai3t?bD%-$_ zMI~&+fZ6C6i1x}Li%kI7{pu+!%ngfJ#4G`E&{RA$AyqkAQLOVS;M+m6)~Y*|IL z+=Z5bWs9Y5w8DmkLtqEM@rC5EKn&&^Y~xU57Zx0rXVFF*E_B!W;-#sCzSz(mMI6Or zYb*{Tx7cmPG#Ox10jq^gKQ3E8gdqdVSwy2{f-t#=SRwygkFez`uN@K$>4}WC%UBj;(o+*B* z_|c+SC^w|`IHH~MOQbJ_nddo{bBeQmaw`QyynPs|oGdv=eV8p`E{ zn6Orssu!z`<`)$@tCVdRJ@dw5p)h`-y6o1+?<$;;&K_iW|5fCrV&PfVtwr{K=H6mv zX7^}jD3{6j1TU^FHL4Z=vn{eqwK{d#>&Nb4ua6yS*5C29Psd;Ac4ckF1h-fQ2DS32QOzUcaRsCmZ|HBY^&n3;&zyb2#=IR<01zw>vq zH^=6h^|rqmueDxXcCdS{fE^~-gD$GN81L@XU2T;Hu40GIULLfDS*@2_Ft@)OuQqt* zkMwxAqMXEO(q!BgV-Cg^*f}45DX!CmY1Z)B(rCie_F}xbO|}#hV=}3Cs0$`WdtIky zwGMT~UhG&`lk-l2i%;!UiRJ(LG@t!~M?aQ%Z zMsgffy1%W`cG+xJdU>yh)fp77AY{wS*j{Um!-o6<*?iVL+K#uz%P5s7rF*6$~2%IpgSL+ST4;6oc^tHR8 zsD^rt%DDQ$$vtho@2mi>)=mh1?|Y#DuGX+eu{N{&1{A>6+Ob`|Pyj*I`*&_u0bH#e zzpXb4AgFn2tW6d-PyknJ^S6Gx3c$eGJ}a2W!%9cnD&0Tk@jzj2p{|%*hYA37ZSPQ5?8WOUfS|6u+cu#9t}csPH?IJ$E<>7@ zCvR%�GL)IkCm>L{H?nf|@Hc{Ef(QKf=!S4=!3 zIj+p+I@A?=@%nP?*R{8QGjjZd*mnbR`~;-wi6d~EXJNu;bGhthCh}HWpFPWgz2QUp>2QUp>2QUp>2 zQUrc55O~eJ@2H<v@M$Y%+H$pGvE=rp${_Oo;>SYZ{s-CuBTv^W%heSr=H!M|-@+Z8^8+&eQW*2jwMwuYh|L++ zD|B897sOuv`1u!J{`lov4i9JU#44Zm>ohEk5WM_x{(sL*L|w^bI(}m2{#Mv)W7wJ$AtM~tp@DKHbD^po^@CBZg}Q6U zr#0YMt$Xnnj{Tp!uPwsSImq|YB3u72Wgf_IKVLpx+EM&);cY|G;8zFUm3wvH%h|W! z!6tv!?>-Q1O*+c9yW_ezoIbX2;?ZK*rOtVGMV8S=cYlHkjk`034{NIBf6WCKX)shU3I0_C~ol z94kW{dw||^iH%+UCKqq5v9?NM;0a!BRS1+2+W^bfkZ}13P7&bvfr`Bj*dYxzVCQjh zZH0f>3rAdWv>w~tu?-0uuyJBar7G^r(Q$@GH?dg`=f!0li@^;DfRB9yo3Ln zK4Y9__e`H}-@g93sR+w?#Z2Ys>d9rQ~xy(d-+a~qZW#Jr-IZ$@1Vzq`tt{V$;71m4!IO; zG_ZSU-*&A+^<|C8KJb+U++w+k9hulQ39X1zhqmqFAUPT-i@3cKw=x;Hn*wJVodUx+RF6vqmntT0z;xZ?pg+2Me~KMt}?<0iF$fnyukii#Um zL`jtu?1;ydg%e&jE(OIE9@sv}Zg9Z44%{Dxt;x6#3m}72ECqWZv8UGbFt2(zhKpka zxS$nB0dNcncM#xKK4>u;rzODtCbo{_>I*0mTq=u0xNH+5A=p_C)ynwtZR?ABBlK`U z>rf6S6)}{IwQ;CK#szh_Bo?ELZJ4OggDBxn4eT1lK}L)#t|(zFfxV}=yisJ;ncbr| zdHh5NzVc*tCs{53zL_2S@NZT!)KWdcY9)IL_PQgb9uZVP3}2;4C(U zOk!rkSv<^cxVQ&X6chU88rw(5j%ew+#r~Q;Q%)XVS8tDC^^XfevEzIc?q!8y!ZkWj z!?;KRQpGOqV@Ir@24D|(Cd3B!M&YO!&cHB!U~?&xwI0CwU}spvT zjoAlx&#*&WU^Sfm0cS#faSjV|;^N9yT(bx125#(bIouQqSrVCmSiOL4duQ0#5z7QO zvLl_?M2;hTI53Q9n%WpWC@{>lIJpCB5yw3sme|g$;!r4bohHFu9bPE;?4z%IkQyg-`ZhDwbc+PIB!FFv0r;Bkr2~n`USY&tNHMtQt zO~#mU`?@+Fp&BqFt^mf(l1z9_oDgRhdazsNU@?J9aqh;!sUjG>Y{o~sFpFcaG7J(- z{kReUCQ}cXaRXFCW(3cH32~Ylck19Es=_7)*pATV1hxy53_C%KyJXoEj+1UGZoPr6 zsNp(Z7q?kqSGEIY#$^fEyp22Ldr5Gpk=+V}L%g`&(UD{e z1`N&y;h2ZdjN8{A+Y`ZdYQ20I%!nTxDZ}+wxC|0@mF0qqag_sR7M$dfah`x({D=!` zp^vfm8_bHkojhD1pkaeJ<{@0aijyPQi|;r%m7;-+%rrPIPl64BjpCS}VBX=_9&XAF ztOMMsMG1HU{lL`Nus;_v<9uVXE@S>lzs7%PPt;w2s|` ziNi%O_@FFt+YTmkiX`rZb#Q9~yX}mf)y2$-5hA!n3|ss`-bnBxJKSLzj3s5!SCISu zetl7hzzydeG!|&F8)MnUz%Yt1PXPrHEys{!y0&3huq%H3g8&Ndlz>5mi+TKmnRfR) zxzTy*Yb4#mIUn$eF5!ePcJIT0z)d>vcokfChQqzMwGzyP(Zq=~OEYoRA53!vb0)j+ zPXX#UWMR2B4itb9aaktRCU^m;;#yIdN-#<>rL!aD>^w2#kANJ!E~XoBa0Lc=T+$^t LSuIiD_mTe}{1Wzy delta 94 zcmZozz|ru4ZGto_GXn#I^h5=FM&^wP3-}j3P+0Uq01a*Wz$mbpalwCiM&8AY9|S;n SGvfnhhs`Vx{>Y=Lg>V7u0VweR diff --git a/db/c_nostr_relay.db-shm b/db/c_nostr_relay.db-shm index c7a42c3e84fb8a98039cb2e2fc20e80636104733..0b1a67242d8c72ac5d2be4cea3d135239801d696 100644 GIT binary patch literal 32768 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 diff --git a/db/c_nostr_relay.db-wal b/db/c_nostr_relay.db-wal index b10bb0a9c129dde71c021251dc105dd85d59b6d1..02a34c86b4483a27cae312703deae522b61c7f81 100644 GIT binary patch delta 81744 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 SwIiC)kt5KNRo2=$uKy1-s8Wak delta 9801 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 diff --git a/relay.log b/relay.log index a9003d0..6168b99 100644 --- a/relay.log +++ b/relay.log @@ -3,6 +3,8 @@ [SUCCESS] Relay information initialized with default values [INFO] Initializing NIP-13 Proof of Work configuration [INFO] PoW Configuration: enabled=true, min_difficulty=0, validation_flags=0x1, mode=full +[INFO] Initializing NIP-40 Expiration Timestamp configuration +[INFO] Expiration Configuration: enabled=true, strict_mode=true, filter_responses=true, grace_period=300 seconds [INFO] Starting relay server... [INFO] Starting libwebsockets-based Nostr relay server... [SUCCESS] WebSocket relay started on ws://127.0.0.1:8888 @@ -21,37 +23,14 @@ [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=10, target=8, nonce=1839 [SUCCESS] Event stored in database [SUCCESS] Event validated and stored successfully [INFO] WebSocket connection closed -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] WebSocket connection closed [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=21, target=20, nonce=776797 -[SUCCESS] Event stored in database -[SUCCESS] Event validated and stored successfully +[WARNING] Event rejected: expired timestamp [INFO] WebSocket connection closed -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation @@ -61,37 +40,9 @@ [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=8, target=8, nonce=385 [SUCCESS] Event stored in database [SUCCESS] Event validated and stored successfully [INFO] WebSocket connection closed -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] Received WebSocket message -[INFO] WebSocket connection closed -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=21, target=20, nonce=776797 -[WARNING] Event already exists in database -[SUCCESS] Event validated and stored successfully -[INFO] WebSocket connection closed -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully -[INFO] HTTP request received -[INFO] Handling NIP-11 relay information request -[SUCCESS] NIP-11 relay information served successfully [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation @@ -101,17 +52,32 @@ [INFO] WebSocket connection established [INFO] Received WebSocket message [INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=8, target=8, nonce=1669 +[WARNING] Event rejected: expired timestamp +[INFO] WebSocket connection closed +[INFO] WebSocket connection established +[INFO] Received WebSocket message +[INFO] Handling REQ message for persistent subscription +[INFO] Added subscription 'filter_test' (total: 1) +[INFO] Executing SQL: SELECT id, pubkey, created_at, kind, content, sig, tags FROM events WHERE 1=1 AND kind IN (1) ORDER BY created_at DESC LIMIT 10 +[INFO] Query returned 10 rows +[INFO] Total events sent: 10 +[INFO] Received WebSocket message +[INFO] Removed subscription 'filter_test' (total: 0) +[INFO] Closed subscription: filter_test +[INFO] WebSocket connection closed +[WARNING] Subscription 'a' not found for removal +[INFO] WebSocket connection established +[INFO] Received WebSocket message +[INFO] Handling EVENT message with full NIP-01 validation +[SUCCESS] Event stored in database +[SUCCESS] Event validated and stored successfully +[INFO] WebSocket connection closed +[INFO] WebSocket connection established +[INFO] Received WebSocket message +[INFO] Handling EVENT message with full NIP-01 validation [SUCCESS] Event stored in database [SUCCESS] Event validated and stored successfully [INFO] WebSocket connection closed [INFO] HTTP request received [INFO] Handling NIP-11 relay information request [SUCCESS] NIP-11 relay information served successfully -[INFO] WebSocket connection established -[INFO] Received WebSocket message -[INFO] Handling EVENT message with full NIP-01 validation -[INFO] PoW validated: difficulty=21, target=20, nonce=776797 -[WARNING] Event already exists in database -[SUCCESS] Event validated and stored successfully -[INFO] WebSocket connection closed diff --git a/relay.pid b/relay.pid index 34db337..62dfa5e 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -736301 +743964 diff --git a/src/main.c b/src/main.c index 1d3b7f7..758215a 100644 --- a/src/main.c +++ b/src/main.c @@ -97,6 +97,24 @@ static struct pow_config g_pow_config = { .anti_spam_mode = 0 // Basic validation by default }; +// NIP-40 Expiration configuration structure +struct expiration_config { + int enabled; // 0 = disabled, 1 = enabled + int strict_mode; // 1 = reject expired events on submission + int filter_responses; // 1 = filter expired events from responses + int delete_expired; // 1 = delete expired events from DB (future feature) + long grace_period; // Grace period in seconds for clock skew +}; + +// Global expiration configuration instance +static struct expiration_config g_expiration_config = { + .enabled = 1, // Enable expiration handling by default + .strict_mode = 1, // Reject expired events on submission by default + .filter_responses = 1, // Filter expired events from responses by default + .delete_expired = 0, // Don't delete by default (keep for audit) + .grace_period = 300 // 5 minutes grace period for clock skew +}; + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// @@ -217,6 +235,12 @@ int handle_nip11_http_request(struct lws* wsi, const char* accept_header); void init_pow_config(); int validate_event_pow(cJSON* event, char* error_message, size_t error_size); +// Forward declarations for NIP-40 expiration handling +void init_expiration_config(); +long extract_expiration_timestamp(cJSON* tags); +int is_event_expired(cJSON* event, time_t current_time); +int validate_event_expiration(cJSON* event, char* error_message, size_t error_size); + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// @@ -651,6 +675,19 @@ int broadcast_event_to_subscriptions(cJSON* event) { return 0; } + // Check if event is expired and should not be broadcast (NIP-40) + if (g_expiration_config.enabled && g_expiration_config.filter_responses) { + time_t current_time = time(NULL); + if (is_event_expired(event, current_time)) { + char debug_msg[256]; + cJSON* event_id_obj = cJSON_GetObjectItem(event, "id"); + const char* event_id = event_id_obj ? cJSON_GetStringValue(event_id_obj) : "unknown"; + snprintf(debug_msg, sizeof(debug_msg), "Skipping broadcast of expired event: %.16s", event_id); + log_info(debug_msg); + return 0; // Don't broadcast expired events + } + } + int broadcasts = 0; pthread_mutex_lock(&g_subscription_manager.subscriptions_lock); @@ -1268,6 +1305,7 @@ void init_relay_info() { cJSON_AddItemToArray(g_relay_info.supported_nips, cJSON_CreateNumber(13)); // NIP-13: Proof of Work cJSON_AddItemToArray(g_relay_info.supported_nips, cJSON_CreateNumber(15)); // NIP-15: EOSE cJSON_AddItemToArray(g_relay_info.supported_nips, cJSON_CreateNumber(20)); // NIP-20: Command results + cJSON_AddItemToArray(g_relay_info.supported_nips, cJSON_CreateNumber(40)); // NIP-40: Expiration Timestamp } // Initialize server limitations @@ -1757,6 +1795,145 @@ int validate_event_pow(cJSON* event, char* error_message, size_t error_size) { return 0; // Success } +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +// NIP-40 EXPIRATION TIMESTAMP HANDLING +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +// Initialize expiration configuration with environment variables and defaults +void init_expiration_config() { + log_info("Initializing NIP-40 Expiration Timestamp configuration"); + + // Check environment variables for configuration + const char* exp_enabled_env = getenv("RELAY_EXPIRATION_ENABLED"); + if (exp_enabled_env) { + g_expiration_config.enabled = (strcmp(exp_enabled_env, "1") == 0 || + strcmp(exp_enabled_env, "true") == 0 || + strcmp(exp_enabled_env, "yes") == 0); + } + + const char* exp_strict_env = getenv("RELAY_EXPIRATION_STRICT"); + if (exp_strict_env) { + g_expiration_config.strict_mode = (strcmp(exp_strict_env, "1") == 0 || + strcmp(exp_strict_env, "true") == 0 || + strcmp(exp_strict_env, "yes") == 0); + } + + const char* exp_filter_env = getenv("RELAY_EXPIRATION_FILTER"); + if (exp_filter_env) { + g_expiration_config.filter_responses = (strcmp(exp_filter_env, "1") == 0 || + strcmp(exp_filter_env, "true") == 0 || + strcmp(exp_filter_env, "yes") == 0); + } + + const char* exp_delete_env = getenv("RELAY_EXPIRATION_DELETE"); + if (exp_delete_env) { + g_expiration_config.delete_expired = (strcmp(exp_delete_env, "1") == 0 || + strcmp(exp_delete_env, "true") == 0 || + strcmp(exp_delete_env, "yes") == 0); + } + + const char* exp_grace_env = getenv("RELAY_EXPIRATION_GRACE_PERIOD"); + if (exp_grace_env) { + long grace_period = atol(exp_grace_env); + if (grace_period >= 0 && grace_period <= 86400) { // Max 24 hours + g_expiration_config.grace_period = grace_period; + } + } + + // Log final configuration + char config_msg[512]; + snprintf(config_msg, sizeof(config_msg), + "Expiration Configuration: enabled=%s, strict_mode=%s, filter_responses=%s, grace_period=%ld seconds", + g_expiration_config.enabled ? "true" : "false", + g_expiration_config.strict_mode ? "true" : "false", + g_expiration_config.filter_responses ? "true" : "false", + g_expiration_config.grace_period); + log_info(config_msg); +} + +// Extract expiration timestamp from event tags +long extract_expiration_timestamp(cJSON* tags) { + if (!tags || !cJSON_IsArray(tags)) { + return 0; // No expiration + } + + cJSON* tag = NULL; + cJSON_ArrayForEach(tag, tags) { + if (cJSON_IsArray(tag) && cJSON_GetArraySize(tag) >= 2) { + cJSON* tag_name = cJSON_GetArrayItem(tag, 0); + cJSON* tag_value = cJSON_GetArrayItem(tag, 1); + + if (cJSON_IsString(tag_name) && cJSON_IsString(tag_value)) { + const char* name = cJSON_GetStringValue(tag_name); + const char* value = cJSON_GetStringValue(tag_value); + + if (name && value && strcmp(name, "expiration") == 0) { + long expiration_ts = atol(value); + if (expiration_ts > 0) { + return expiration_ts; + } + } + } + } + } + + return 0; // No valid expiration tag found +} + +// Check if event is currently expired +int is_event_expired(cJSON* event, time_t current_time) { + if (!event) { + return 0; // Invalid event, not expired + } + + cJSON* tags = cJSON_GetObjectItem(event, "tags"); + long expiration_ts = extract_expiration_timestamp(tags); + + if (expiration_ts == 0) { + return 0; // No expiration timestamp, not expired + } + + // Check if current time exceeds expiration + grace period + return (current_time > (expiration_ts + g_expiration_config.grace_period)); +} + +// Validate event expiration according to NIP-40 +int validate_event_expiration(cJSON* event, char* error_message, size_t error_size) { + if (!g_expiration_config.enabled) { + return 0; // Expiration validation disabled + } + + if (!event) { + snprintf(error_message, error_size, "expiration: null event"); + return -1; + } + + // Check if event is expired + time_t current_time = time(NULL); + if (is_event_expired(event, current_time)) { + if (g_expiration_config.strict_mode) { + cJSON* tags = cJSON_GetObjectItem(event, "tags"); + long expiration_ts = extract_expiration_timestamp(tags); + + snprintf(error_message, error_size, + "invalid: event expired (expiration=%ld, current=%ld, grace=%ld)", + expiration_ts, (long)current_time, g_expiration_config.grace_period); + log_warning("Event rejected: expired timestamp"); + return -1; + } else { + // In non-strict mode, log but allow expired events + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), + "Accepting expired event (strict_mode disabled)"); + log_info(debug_msg); + } + } + + return 0; // Success +} + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // DATABASE FUNCTIONS @@ -2165,6 +2342,9 @@ int handle_req_message(const char* sub_id, cJSON* filters, struct lws *wsi, stru char* sql_ptr = sql + strlen(sql); int remaining = sizeof(sql) - strlen(sql); + // Note: Expiration filtering will be done at application level + // after retrieving events to ensure compatibility with all SQLite versions + // Handle kinds filter cJSON* kinds = cJSON_GetObjectItem(filter, "kinds"); if (kinds && cJSON_IsArray(kinds)) { @@ -2293,6 +2473,16 @@ int handle_req_message(const char* sub_id, cJSON* filters, struct lws *wsi, stru } cJSON_AddItemToObject(event, "tags", tags); + // Check expiration filtering (NIP-40) at application level + if (g_expiration_config.enabled && g_expiration_config.filter_responses) { + time_t current_time = time(NULL); + if (is_event_expired(event, current_time)) { + // Skip this expired event + cJSON_Delete(event); + continue; + } + } + // Send EVENT message cJSON* event_msg = cJSON_CreateArray(); cJSON_AddItemToArray(event_msg, cJSON_CreateString("EVENT")); @@ -2388,14 +2578,20 @@ int handle_event_message(cJSON* event, char* error_message, size_t error_size) { return pow_result; // PoW validation failed, error message already set } - // Step 4: Complete event validation (combines structure + signature + additional checks) + // Step 4: Validate expiration timestamp (NIP-40) if enabled + int expiration_result = validate_event_expiration(event, error_message, error_size); + if (expiration_result != 0) { + return expiration_result; // Expiration validation failed, error message already set + } + + // Step 5: Complete event validation (combines structure + signature + additional checks) int validation_result = nostr_validate_event(event); if (validation_result != NOSTR_SUCCESS) { snprintf(error_message, error_size, "invalid: complete event validation failed"); return validation_result; } - // Step 5: Check for special event types and handle accordingly + // Step 6: Check for special event types and handle accordingly cJSON* kind_obj = cJSON_GetObjectItem(event, "kind"); cJSON* pubkey_obj = cJSON_GetObjectItem(event, "pubkey"); cJSON* created_at_obj = cJSON_GetObjectItem(event, "created_at"); @@ -2435,7 +2631,7 @@ int handle_event_message(cJSON* event, char* error_message, size_t error_size) { } } - // Step 6: Store event in database + // Step 7: Store event in database if (store_event(event) == 0) { error_message[0] = '\0'; // Success - empty error message log_success("Event validated and stored successfully"); @@ -2805,6 +3001,9 @@ int main(int argc, char* argv[]) { // Initialize NIP-13 PoW configuration init_pow_config(); + // Initialize NIP-40 expiration configuration + init_expiration_config(); + log_info("Starting relay server..."); // Start WebSocket Nostr relay server diff --git a/tests/40_nip_test.sh b/tests/40_nip_test.sh new file mode 100755 index 0000000..464bf4f --- /dev/null +++ b/tests/40_nip_test.sh @@ -0,0 +1,539 @@ +#!/bin/bash + +# NIP-40 Expiration Timestamp Test Suite for C Nostr Relay +# Tests expiration timestamp handling in the relay's event processing pipeline + +set -e # Exit on error + +# Color constants +RED='\033[31m' +GREEN='\033[32m' +YELLOW='\033[33m' +BLUE='\033[34m' +BOLD='\033[1m' +RESET='\033[0m' + +# Test configuration +RELAY_URL="ws://127.0.0.1:8888" +HTTP_URL="http://127.0.0.1:8888" +TEST_COUNT=0 +PASSED_COUNT=0 +FAILED_COUNT=0 + +# Test results tracking +declare -a TEST_RESULTS=() + +print_info() { + echo -e "${BLUE}[INFO]${RESET} $1" +} + +print_success() { + echo -e "${GREEN}${BOLD}[SUCCESS]${RESET} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${RESET} $1" +} + +print_error() { + echo -e "${RED}${BOLD}[ERROR]${RESET} $1" +} + +print_test_header() { + TEST_COUNT=$((TEST_COUNT + 1)) + echo "" + echo -e "${BOLD}=== TEST $TEST_COUNT: $1 ===${RESET}" +} + +record_test_result() { + local test_name="$1" + local result="$2" + local details="$3" + + TEST_RESULTS+=("$test_name|$result|$details") + + if [ "$result" = "PASS" ]; then + PASSED_COUNT=$((PASSED_COUNT + 1)) + print_success "PASS: $test_name" + else + FAILED_COUNT=$((FAILED_COUNT + 1)) + print_error "FAIL: $test_name" + if [ -n "$details" ]; then + echo " Details: $details" + fi + fi +} + +# Check if relay is running +check_relay_running() { + print_info "Checking if relay is running..." + + if ! curl -s -H "Accept: application/nostr+json" "$HTTP_URL/" >/dev/null 2>&1; then + print_error "Relay is not running or not accessible at $HTTP_URL" + print_info "Please start the relay with: ./make_and_restart_relay.sh" + exit 1 + fi + + print_success "Relay is running and accessible" +} + +# Test NIP-11 relay information includes NIP-40 +test_nip11_expiration_support() { + print_test_header "NIP-11 Expiration Support Advertisement" + + print_info "Fetching relay information..." + RELAY_INFO=$(curl -s -H "Accept: application/nostr+json" "$HTTP_URL/") + + echo "Relay Info Response:" + echo "$RELAY_INFO" | jq '.' + echo "" + + # Check if NIP-40 is in supported_nips + if echo "$RELAY_INFO" | jq -e '.supported_nips | index(40)' >/dev/null 2>&1; then + print_success "✓ NIP-40 found in supported_nips array" + NIP40_SUPPORTED=true + else + print_error "✗ NIP-40 not found in supported_nips array" + NIP40_SUPPORTED=false + fi + + if [ "$NIP40_SUPPORTED" = true ]; then + record_test_result "NIP-11 Expiration Support Advertisement" "PASS" "NIP-40 advertised in relay info" + return 0 + else + record_test_result "NIP-11 Expiration Support Advertisement" "FAIL" "NIP-40 not advertised" + return 1 + fi +} + +# Helper function to create event with expiration tag +create_event_with_expiration() { + local content="$1" + local expiration_timestamp="$2" + local private_key="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + + if ! command -v nak &> /dev/null; then + echo "" + return 1 + fi + + # Create event with expiration tag + nak event --sec "$private_key" -c "$content" -t "expiration=$expiration_timestamp" --ts $(date +%s) +} + +# Helper function to send event and check response +send_event_and_check() { + local event_json="$1" + local expected_result="$2" # "accept" or "reject" + local description="$3" + + if [ -z "$event_json" ]; then + return 1 + fi + + # Create EVENT message + local event_message="[\"EVENT\",$event_json]" + + # Send to relay + if command -v websocat &> /dev/null; then + local response=$(echo "$event_message" | timeout 5s websocat "$RELAY_URL" 2>&1 || echo "Connection failed") + + print_info "Relay response: $response" + + if [[ "$response" == *"Connection failed"* ]]; then + print_error "✗ Failed to connect to relay" + return 1 + elif [[ "$expected_result" == "accept" && "$response" == *"true"* ]]; then + print_success "✓ $description accepted as expected" + return 0 + elif [[ "$expected_result" == "reject" && "$response" == *"false"* ]]; then + print_success "✓ $description rejected as expected" + return 0 + elif [[ "$expected_result" == "accept" && "$response" == *"false"* ]]; then + print_error "✗ $description unexpectedly rejected: $response" + return 1 + elif [[ "$expected_result" == "reject" && "$response" == *"true"* ]]; then + print_error "✗ $description unexpectedly accepted: $response" + return 1 + else + print_warning "? Unclear response for $description: $response" + return 1 + fi + else + print_error "websocat not found - required for testing" + return 1 + fi +} + +# Test event without expiration tag +test_event_without_expiration() { + print_test_header "Event Submission Without Expiration Tag" + + if ! command -v nak &> /dev/null; then + print_warning "nak command not found - skipping expiration tests" + record_test_result "Event Submission Without Expiration Tag" "SKIP" "nak not available" + return 0 + fi + + print_info "Creating event without expiration tag..." + + local private_key="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + local event_json=$(nak event --sec "$private_key" -c "Test event without expiration" --ts $(date +%s)) + + print_info "Generated event:" + echo "$event_json" | jq '.' + echo "" + + if send_event_and_check "$event_json" "accept" "Event without expiration tag"; then + record_test_result "Event Submission Without Expiration Tag" "PASS" "Non-expiring event accepted" + return 0 + else + record_test_result "Event Submission Without Expiration Tag" "FAIL" "Non-expiring event handling failed" + return 1 + fi +} + +# Test event with future expiration (should be accepted) +test_event_with_future_expiration() { + print_test_header "Event Submission With Future Expiration" + + if ! command -v nak &> /dev/null; then + record_test_result "Event Submission With Future Expiration" "SKIP" "nak not available" + return 0 + fi + + print_info "Creating event with future expiration (1 hour from now)..." + + local future_timestamp=$(($(date +%s) + 3600)) # 1 hour from now + local event_json=$(create_event_with_expiration "Test event expiring in 1 hour" "$future_timestamp") + + if [ -z "$event_json" ]; then + record_test_result "Event Submission With Future Expiration" "FAIL" "Failed to create event" + return 1 + fi + + print_info "Generated event (expires at $future_timestamp):" + echo "$event_json" | jq '.' + echo "" + + if send_event_and_check "$event_json" "accept" "Event with future expiration"; then + record_test_result "Event Submission With Future Expiration" "PASS" "Future-expiring event accepted" + return 0 + else + record_test_result "Event Submission With Future Expiration" "FAIL" "Future-expiring event rejected" + return 1 + fi +} + +# Test event with past expiration (should be rejected in strict mode) +test_event_with_past_expiration() { + print_test_header "Event Submission With Past Expiration" + + if ! command -v nak &> /dev/null; then + record_test_result "Event Submission With Past Expiration" "SKIP" "nak not available" + return 0 + fi + + print_info "Creating event with past expiration (1 hour ago)..." + + local past_timestamp=$(($(date +%s) - 3600)) # 1 hour ago + local event_json=$(create_event_with_expiration "Test event expired 1 hour ago" "$past_timestamp") + + if [ -z "$event_json" ]; then + record_test_result "Event Submission With Past Expiration" "FAIL" "Failed to create event" + return 1 + fi + + print_info "Generated event (expired at $past_timestamp):" + echo "$event_json" | jq '.' + echo "" + + # In strict mode (default), this should be rejected + if send_event_and_check "$event_json" "reject" "Event with past expiration"; then + record_test_result "Event Submission With Past Expiration" "PASS" "Expired event correctly rejected in strict mode" + return 0 + else + record_test_result "Event Submission With Past Expiration" "FAIL" "Expired event handling failed" + return 1 + fi +} + +# Test event with expiration within grace period +test_event_within_grace_period() { + print_test_header "Event Submission Within Grace Period" + + if ! command -v nak &> /dev/null; then + record_test_result "Event Submission Within Grace Period" "SKIP" "nak not available" + return 0 + fi + + print_info "Creating event with expiration within grace period (2 minutes ago, grace period is 5 minutes)..." + + local grace_timestamp=$(($(date +%s) - 120)) # 2 minutes ago (within 5 minute grace period) + local event_json=$(create_event_with_expiration "Test event within grace period" "$grace_timestamp") + + if [ -z "$event_json" ]; then + record_test_result "Event Submission Within Grace Period" "FAIL" "Failed to create event" + return 1 + fi + + print_info "Generated event (expired at $grace_timestamp, within grace period):" + echo "$event_json" | jq '.' + echo "" + + # Should be accepted due to grace period + if send_event_and_check "$event_json" "accept" "Event within grace period"; then + record_test_result "Event Submission Within Grace Period" "PASS" "Event within grace period accepted" + return 0 + else + record_test_result "Event Submission Within Grace Period" "FAIL" "Grace period handling failed" + return 1 + fi +} + +# Test event filtering in subscriptions +test_expiration_filtering_in_subscriptions() { + print_test_header "Expiration Filtering in Subscriptions" + + if ! command -v nak &> /dev/null || ! command -v websocat &> /dev/null; then + record_test_result "Expiration Filtering in Subscriptions" "SKIP" "Required tools not available" + return 0 + fi + + print_info "Setting up test events for subscription filtering..." + + # First, create a few events with different expiration times + local private_key="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + + # Event 1: No expiration (should be returned) + local event1=$(nak event --sec "$private_key" -c "Event without expiration for filtering test" --ts $(date +%s)) + + # Event 2: Future expiration (should be returned) + local future_timestamp=$(($(date +%s) + 1800)) # 30 minutes from now + local event2=$(create_event_with_expiration "Event with future expiration for filtering test" "$future_timestamp") + + # Event 3: Past expiration (should NOT be returned if filtering is enabled) + local past_timestamp=$(($(date +%s) - 3600)) # 1 hour ago + local event3=$(create_event_with_expiration "Event with past expiration for filtering test" "$past_timestamp") + + print_info "Publishing test events..." + + # Note: We expect event3 to be rejected on submission in strict mode, + # so we'll create it with a slightly more recent expiration that might get through + local recent_past=$(($(date +%s) - 600)) # 10 minutes ago (outside grace period) + local event3_recent=$(create_event_with_expiration "Recently expired event for filtering test" "$recent_past") + + # Try to submit all events (some may be rejected) + echo "[\"EVENT\",$event1]" | timeout 3s websocat "$RELAY_URL" >/dev/null 2>&1 || true + echo "[\"EVENT\",$event2]" | timeout 3s websocat "$RELAY_URL" >/dev/null 2>&1 || true + echo "[\"EVENT\",$event3_recent]" | timeout 3s websocat "$RELAY_URL" >/dev/null 2>&1 || true + + sleep 2 # Let events settle + + print_info "Testing subscription filtering..." + + # Create subscription for recent events + local req_message='["REQ","filter_test",{"kinds":[1],"limit":10}]' + local response=$(echo -e "$req_message\n[\"CLOSE\",\"filter_test\"]" | timeout 5s websocat "$RELAY_URL" 2>/dev/null || echo "") + + print_info "Subscription response:" + echo "$response" + echo "" + + # Count events that contain our test content + local no_exp_count=0 + local future_exp_count=0 + local past_exp_count=0 + + if echo "$response" | grep -q "Event without expiration for filtering test"; then + no_exp_count=1 + print_success "✓ Event without expiration found in subscription results" + fi + + if echo "$response" | grep -q "Event with future expiration for filtering test"; then + future_exp_count=1 + print_success "✓ Event with future expiration found in subscription results" + fi + + if echo "$response" | grep -q "Recently expired event for filtering test"; then + past_exp_count=1 + print_warning "✗ Recently expired event found in subscription results (should be filtered)" + else + print_success "✓ Recently expired event properly filtered from subscription results" + fi + + # Evaluate results + local expected_events=$((no_exp_count + future_exp_count)) + if [ $expected_events -ge 1 ] && [ $past_exp_count -eq 0 ]; then + record_test_result "Expiration Filtering in Subscriptions" "PASS" "Expired events properly filtered from subscriptions" + return 0 + else + record_test_result "Expiration Filtering in Subscriptions" "FAIL" "Expiration filtering not working properly in subscriptions" + return 1 + fi +} + +# Test malformed expiration tags +test_malformed_expiration_tags() { + print_test_header "Handling of Malformed Expiration Tags" + + if ! command -v nak &> /dev/null; then + record_test_result "Handling of Malformed Expiration Tags" "SKIP" "nak not available" + return 0 + fi + + print_info "Testing events with malformed expiration tags..." + + local private_key="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + + # Test 1: Non-numeric expiration value + local event1=$(nak event --sec "$private_key" -c "Event with non-numeric expiration" -t "expiration=not_a_number" --ts $(date +%s)) + + # Test 2: Empty expiration value + local event2=$(nak event --sec "$private_key" -c "Event with empty expiration" -t "expiration=" --ts $(date +%s)) + + print_info "Testing non-numeric expiration value..." + if send_event_and_check "$event1" "accept" "Event with non-numeric expiration (should be treated as no expiration)"; then + print_success "✓ Non-numeric expiration handled gracefully" + malformed_test1=true + else + malformed_test1=false + fi + + print_info "Testing empty expiration value..." + if send_event_and_check "$event2" "accept" "Event with empty expiration (should be treated as no expiration)"; then + print_success "✓ Empty expiration handled gracefully" + malformed_test2=true + else + malformed_test2=false + fi + + if [ "$malformed_test1" = true ] && [ "$malformed_test2" = true ]; then + record_test_result "Handling of Malformed Expiration Tags" "PASS" "Malformed expiration tags handled gracefully" + return 0 + else + record_test_result "Handling of Malformed Expiration Tags" "FAIL" "Malformed expiration tag handling failed" + return 1 + fi +} + +# Test configuration via environment variables +test_expiration_configuration() { + print_test_header "Expiration Configuration Via Environment Variables" + + print_info "Testing expiration configuration from relay logs..." + + if [ -f "relay.log" ]; then + print_info "Current configuration from logs:" + grep "Expiration Configuration:" relay.log | tail -1 || print_warning "No expiration configuration found in logs" + else + print_warning "No relay.log found" + fi + + # The relay should be running with default configuration + print_info "Default configuration should be:" + print_info " enabled=true" + print_info " strict_mode=true (rejects expired events on submission)" + print_info " filter_responses=true (filters expired events from responses)" + print_info " grace_period=300 seconds (5 minutes)" + + # Test current behavior matches expected default configuration + print_info "Configuration test based on observed behavior:" + + # Check if NIP-40 is advertised (indicates enabled=true) + if curl -s -H "Accept: application/nostr+json" "$HTTP_URL/" | jq -e '.supported_nips | index(40)' >/dev/null 2>&1; then + print_success "✓ NIP-40 support advertised (enabled=true)" + config_test=true + else + print_error "✗ NIP-40 not advertised (may be disabled)" + config_test=false + fi + + if [ "$config_test" = true ]; then + record_test_result "Expiration Configuration Via Environment Variables" "PASS" "Expiration configuration is accessible and working" + return 0 + else + record_test_result "Expiration Configuration Via Environment Variables" "FAIL" "Expiration configuration issues detected" + return 1 + fi +} + +# Print test summary +print_test_summary() { + echo "" + echo -e "${BOLD}=== TEST SUMMARY ===${RESET}" + echo "Total tests run: $TEST_COUNT" + echo -e "${GREEN}Passed: $PASSED_COUNT${RESET}" + echo -e "${RED}Failed: $FAILED_COUNT${RESET}" + + if [ $FAILED_COUNT -gt 0 ]; then + echo "" + echo -e "${RED}${BOLD}Failed tests:${RESET}" + for result in "${TEST_RESULTS[@]}"; do + IFS='|' read -r name status details <<< "$result" + if [ "$status" = "FAIL" ]; then + echo -e " ${RED}✗ $name${RESET}" + if [ -n "$details" ]; then + echo " $details" + fi + fi + done + fi + + echo "" + if [ $FAILED_COUNT -eq 0 ]; then + echo -e "${GREEN}${BOLD}🎉 ALL TESTS PASSED!${RESET}" + echo -e "${GREEN}✅ NIP-40 Expiration Timestamp support is working correctly in the relay${RESET}" + return 0 + else + echo -e "${RED}${BOLD}❌ SOME TESTS FAILED${RESET}" + echo "Please review the output above and check relay logs for more details." + return 1 + fi +} + +# Main test execution +main() { + echo -e "${BOLD}=== NIP-40 Expiration Timestamp Relay Test Suite ===${RESET}" + echo "Testing NIP-40 Expiration Timestamp support in the C Nostr Relay" + echo "Relay URL: $RELAY_URL" + echo "" + + # Check prerequisites + if ! command -v curl &> /dev/null; then + print_error "curl is required but not installed" + exit 1 + fi + + if ! command -v jq &> /dev/null; then + print_error "jq is required but not installed" + exit 1 + fi + + if ! command -v websocat &> /dev/null; then + print_warning "websocat not found - WebSocket tests will be skipped" + fi + + if ! command -v nak &> /dev/null; then + print_warning "nak not found - Event generation tests will be skipped" + print_info "Install with: go install github.com/fiatjaf/nak@latest" + fi + + # Run tests + check_relay_running + test_nip11_expiration_support + test_event_without_expiration + test_event_with_future_expiration + test_event_with_past_expiration + test_event_within_grace_period + test_expiration_filtering_in_subscriptions + test_malformed_expiration_tags + test_expiration_configuration + + # Print summary + print_test_summary + exit $? +} + +# Run main function +main "$@" \ No newline at end of file