From bf08ac12e0ee9407fa8abd341a8b4c04f41039de Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Sun, 28 Jan 2024 21:22:45 -0600 Subject: [PATCH 01/10] Implement NIP-40 (event expiration) --- src/noose/sqlite.rs | 76 ++++++++++++++++++++++++++------------------- src/utils/config.rs | 2 +- 2 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/noose/sqlite.rs b/src/noose/sqlite.rs index 189dff5..f352349 100644 --- a/src/noose/sqlite.rs +++ b/src/noose/sqlite.rs @@ -844,6 +844,12 @@ impl NostrSqlite { let event = row.clone().to_event(); + if event.is_expired() { + return Err(Error::internal_with_message( + "Event has expired. Ignoring...", + )); + } + Ok(event) }) .await @@ -1059,7 +1065,9 @@ impl NostrSqlite { let mut event_vec: Vec = vec![]; while let Ok(Some(row)) = rows.next() { let event = EventRow::from(row).to_event(); - event_vec.push(event); + if !event.is_expired() { + event_vec.push(event); + } } Ok(event_vec) @@ -1134,8 +1142,6 @@ impl NostrSqlite { let Ok(query_result) = connection .interact(move |conn| { let (sql, values) = sql_statement - .clear_selects() - .column(EventsTable::EventId) .order_by(EventsTable::CreatedAt, sq_order.to_owned()) .build_rusqlite(SqliteQueryBuilder); @@ -1144,9 +1150,10 @@ impl NostrSqlite { let mut event_vec: Vec = vec![]; while let Ok(Some(row)) = rows.next() { - let event_id_string: String = row.get(0).unwrap(); - let event_id = EventId::from_str(&event_id_string).unwrap(); - event_vec.push(event_id); + let event = EventRow::from(row).to_event(); + if !event.is_expired() { + event_vec.push(event.id); + } } Ok(event_vec) @@ -1176,35 +1183,39 @@ impl NostrSqlite { coordinate.kind, coordinate.pubkey, coordinate.identifier ) }; - + let Ok(query_result) = connection - .interact(move |conn: &mut rusqlite::Connection| -> Result { - let (sql, value) = Query::select() - .from(EventsTable::Table) - .columns([EventsTable::EventId, EventsTable::CreatedAt]) - .left_join( - TagsTable::Table, - sea_query::Expr::col((TagsTable::Table, TagsTable::EventId)) - .equals((EventsTable::Table, EventsTable::EventId)), - ) - .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Tag)).eq("a")) - .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Value)).eq(ident)) - .and_where( - sea_query::Expr::col((EventsTable::Table, EventsTable::CreatedAt)) - .gte(timestamp.as_i64()), - ) - .limit(1) - .build_rusqlite(SqliteQueryBuilder); + .interact( + move |conn: &mut rusqlite::Connection| -> Result { + let (sql, value) = Query::select() + .from(EventsTable::Table) + .columns([EventsTable::EventId, EventsTable::CreatedAt]) + .left_join( + TagsTable::Table, + sea_query::Expr::col((TagsTable::Table, TagsTable::EventId)) + .equals((EventsTable::Table, EventsTable::EventId)), + ) + .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Tag)).eq("a")) + .and_where( + sea_query::Expr::col((TagsTable::Table, TagsTable::Value)).eq(ident), + ) + .and_where( + sea_query::Expr::col((EventsTable::Table, EventsTable::CreatedAt)) + .gte(timestamp.as_i64()), + ) + .limit(1) + .build_rusqlite(SqliteQueryBuilder); - let mut stmt = conn.prepare(sql.as_str()).unwrap(); - let mut rows = stmt.query(&*value.as_params()).unwrap(); + let mut stmt = conn.prepare(sql.as_str()).unwrap(); + let mut rows = stmt.query(&*value.as_params()).unwrap(); - if let Ok(Some(record)) = rows.next() { - return Ok(false) - } + if let Ok(Some(record)) = rows.next() { + return Ok(false); + } - Ok(true) - }) + Ok(true) + }, + ) .await else { return Err(Error::internal_with_message( @@ -1272,7 +1283,8 @@ impl NostrDatabase for NostrSqlite { coordinate: &Coordinate, timestamp: Timestamp, ) -> Result { - self.has_coordinate_been_deleted(coordinate, timestamp).await + self.has_coordinate_been_deleted(coordinate, timestamp) + .await } /// Set [`EventId`] as seen by relay diff --git a/src/utils/config.rs b/src/utils/config.rs index 3349957..78ed854 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -43,7 +43,7 @@ impl Config { "contact": "klink@zhitno.st", "name": "zhitno.st", "description": "Very *special* nostr relay", - "supported_nips": [ 1, 9, 11, 12, 15, 16, 20, 22, 28, 33, 45 ], + "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", "version": "0.1.0" }) From 645d12507755f514ac70d4e4f3689ce62f5e6831 Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Sun, 28 Jan 2024 22:53:29 -0600 Subject: [PATCH 02/10] Use real config for RID NIP-11 --- src/relay/handler.rs | 14 ++++---------- src/relay/routes.rs | 14 +++++--------- src/utils/config.rs | 2 +- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/relay/handler.rs b/src/relay/handler.rs index 4295254..ea59ea2 100644 --- a/src/relay/handler.rs +++ b/src/relay/handler.rs @@ -11,18 +11,12 @@ pub async fn ws_handler( Ok(ws.on_upgrade(move |socket| ws::client_connection(socket, context, real_client_ip))) } -pub async fn relay_config(header: String) -> Result { +pub async fn relay_config(header: String, context: Context) -> Result { if header != "application/nostr+json" { Err(warp::reject::not_found()) } else { - let res = serde_json::json!({ - "contact": "klink@zhitno.st", - "name": "zhitno.st", - "description": "Very *special* nostr relay", - "supported_nips": [ 1, 9, 11, 12, 15, 16, 20, 22, 28, 33 ], - "software": "git+https://git.zhitno.st/Klink/sneedstr.git", - "version": "0.1.0" - }); - Ok(warp::reply::json(&res)) + let config = context.config.get_relay_config_json(); + + Ok(warp::reply::json(&config)) } } diff --git a/src/relay/routes.rs b/src/relay/routes.rs index d30cfae..c1159ca 100644 --- a/src/relay/routes.rs +++ b/src/relay/routes.rs @@ -12,19 +12,15 @@ pub fn routes(context: Context) -> impl Filter impl Filter + Clone { // let real_client_ip = warp::header::optional::("X-Real-IP"); let real_client_ip = warp::addr::remote(); - let accept_application_json_header = warp::header::header("Accept"); let cors = warp::cors().allow_any_origin(); - warp::path::end().and( - accept_application_json_header - .and_then(handler::relay_config) - .with(&cors) - .or(warp::ws() - .and(with_context(context)) + let relay_information_document_path = warp::path::end().and(warp::header::header("Accept").and(with_context(context.clone())).and_then(handler::relay_config)).with(&cors); + let nostr_relay_path = warp::path::end().and(warp::ws().and(with_context(context.clone())) .and(real_client_ip) .and_then(handler::ws_handler) - .with(&cors)), - ) + .with(&cors)); + + relay_information_document_path.or(nostr_relay_path) } fn static_files() -> impl Filter + Clone { diff --git a/src/utils/config.rs b/src/utils/config.rs index 78ed854..9644b99 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -45,7 +45,7 @@ impl Config { "description": "Very *special* nostr relay", "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", - "version": "0.1.0" + "version": "0.1.1" }) } } From e1306608ef47a16b647cf3c2a21856dcd657454b Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Tue, 30 Jan 2024 08:25:00 -0600 Subject: [PATCH 03/10] Remove sailfish for now --- Cargo.lock | 92 -------------------- Cargo.toml | 1 - templates/index.html | 66 -------------- templates/index.stpl | 70 --------------- templates/static/android-chrome-192x192.png | Bin 44282 -> 0 bytes templates/static/android-chrome-512x512.png | Bin 240867 -> 0 bytes templates/static/apple-touch-icon.png | Bin 39929 -> 0 bytes templates/static/favicon-16x16.png | Bin 777 -> 0 bytes templates/static/favicon-32x32.png | Bin 2290 -> 0 bytes templates/static/favicon.ico | Bin 15406 -> 0 bytes templates/static/site.webmanifest | 1 - 11 files changed, 230 deletions(-) delete mode 100644 templates/index.html delete mode 100644 templates/index.stpl delete mode 100644 templates/static/android-chrome-192x192.png delete mode 100644 templates/static/android-chrome-512x512.png delete mode 100644 templates/static/apple-touch-icon.png delete mode 100644 templates/static/favicon-16x16.png delete mode 100644 templates/static/favicon-32x32.png delete mode 100644 templates/static/favicon.ico delete mode 100644 templates/static/site.webmanifest diff --git a/Cargo.lock b/Cargo.lock index 22f571c..2c8df2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -497,18 +497,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "filetime" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.3.5", - "windows-sys", -] - [[package]] name = "flate2" version = "1.0.28" @@ -761,15 +749,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys", -] - [[package]] name = "http" version = "0.2.9" @@ -957,12 +936,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" -[[package]] -name = "itoap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8" - [[package]] name = "js-sys" version = "0.3.64" @@ -1591,44 +1564,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" -[[package]] -name = "sailfish" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a03fcade08eb837d7ba0d8f775f1fe6cddb00d413de0c655ab2b93e821a0eb" -dependencies = [ - "itoap", - "ryu", - "sailfish-macros", - "version_check", -] - -[[package]] -name = "sailfish-compiler" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cf1deecb07747a1f7ab55745edcc406875db007602b037af5fcf59f40dd2005" -dependencies = [ - "filetime", - "home", - "memchr", - "proc-macro2", - "quote", - "serde", - "syn 2.0.28", - "toml", -] - -[[package]] -name = "sailfish-macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e5946289d6daa26cde6ffb06678d7a8ba276ec6a7a55d36f64b35e7f644d22" -dependencies = [ - "proc-macro2", - "sailfish-compiler", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -1741,15 +1676,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1833,7 +1759,6 @@ dependencies = [ "rusqlite", "rusqlite_migration", "rustls 0.21.6", - "sailfish", "sea-query", "sea-query-rusqlite", "serde", @@ -2062,26 +1987,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - [[package]] name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -2090,8 +2000,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.0.0", - "serde", - "serde_spanned", "toml_datetime", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 159f4d4..42ed8ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,6 @@ rusqlite_migration = "1.0.2" nostr = "0.27.0" nostr-database = "0.27.0" regex = "1.9.5" -sailfish = "0.7.0" sea-query = { version = "0.30.4", features = ["backend-sqlite", "thread-safe"] } sea-query-rusqlite = { version="0", features = [ "with-chrono", diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index f7ada7e..0000000 --- a/templates/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - Registration - - -
-

Create new user

-
-

Sign Up

-
- - - -
-
- - - -
- -
-
- - - diff --git a/templates/index.stpl b/templates/index.stpl deleted file mode 100644 index d044eaa..0000000 --- a/templates/index.stpl +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - Registration - - -
-

Create new user

-
-

Sign Up

-
- - - -
-
- - - -
- -
-
- - - diff --git a/templates/static/android-chrome-192x192.png b/templates/static/android-chrome-192x192.png deleted file mode 100644 index b87bdf7452b73244c0b22a8f244c20a84666dbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44282 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

i=xj$&sfu}yQ9wOhV3 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 diff --git a/templates/static/android-chrome-512x512.png b/templates/static/android-chrome-512x512.png deleted file mode 100644 index 407a54902fed135f51a1de029caa48b3c32c392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240867 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelaj8FnGE+hE&Au`FnER+UTNd z|L0FWS8~g5`i%&Vi^~L>*gQ-!E;uY|71(}&wSZSaIp(CO)0P*1844v$UIdseXl3yz zdC~CHB*FT!>#gVe_Z6={|E*Z*`7P`Iv-5Rx&zjy(>X9&1npdH8tm6L9m*@Z9IbZwj zVIrsk0IraE|pQhXYy!Za^J^#AL=5>$%ZjB9({{8;4zy04k-`CfDT|NKLyZ8Uz zJ&w3ue$RI9?`zxleck!~Yw-QApKb4dw&kz1`~7CK|Gxjf_x~^4QyqTq-TJfdfA4$$ z`^o=5^Z$R|p}zC==56oxADbjI_jUdC(lzxZA9KymHd^oVQ}sVSdGohlyOX!xzu&vC z{^g`RY47W5-_7^`JbV1-m)HN+y^gQ?(J23;@%WD2>XE(2jK>2E{htIuwmKIhrK^S9&f zpG~Y^Zzmo6_~t*E$K78(PU}_kzWz-={>P2|x9?pIzrQtjcdx#r^|ZWCJCA+n&98a< z@#c)|&)N6CZ}qQxd%gbcUYVP*&$F4YmE@Lv{kp#XZ{fP%*Y;cQ{~TF=_kN+og!gOg z%m2PwU-o;R&Hk^q_kW$iU&sGH%zf)^iJMv9fAbv=ldo}+{(ArCEl;z@NvB^5$GuSg zpOSu^|59i1%f0_=?%a7R^UYl5m9W^?m2baJzkPq}`(Nwkru^9&|9flx=kF!l<}Z%V zkgiYud%?aq?)R@{^HWymn%zw=-kALG@!k141rp0POg|R5`)20#UFUzi`0z{nzFFHl z^Zm!TxwD;po~XZ6+MD`(ZhHS#_Wq+w)(M`sI+h+*e^>e5-}V2$?w9))kn^VE{}JzR z-(LFvd*WXw&6sh)*YDVu*Zcpyp3l6dFPCBM#}-e6a|avu3o|7ws5NucEa7BSe_@lH z*%V}w{?_=Z3j1QCg*^-3GhI0qKVN3~`CEJaHZp!mW(%nPde!2ZGtM+Mc)t8B z$+&~Xb3t@N@*O6x`>Y4O83b4x%{E=IN%iqKFC}7au>Iuajn7v6&f33CK>YJ}F-C_E zHv-R1irdAnuycFa`sR!OS=H{pl(`Vw6ndNCh=sVq?AN?EWZDnENw1f-|GlSW`?p=o z>Sca9voPGetbb|xoxk7re!EopOCW@$pPw=7`jJ6P&mA+MV*Ao;UIFv6JH& z9iDJ!8ur;SA3n;TyNutH^LD(!{RKN&6z;CE|IGa>d3}@JrKtV)IT;Q9zgb&0F)m^6 zuSe!5kDL>nV)yW^nzM(?b@v0`<@You3vEg{FZb_+{7+?m>5ul7FV~-c7k$%u+qd&& zUn}1#{*Ue1@vVf@;rgMSuf5Ob2>5ya5%5r9&)c+g-}1xkCu=TVJ*HBziSuf2ez)U> zgtyOsnM*i*x*_+&SP|D`O zHTSpri~@gHtc(;GeocB9$5hP8(58}bpW)Qb{In;(RT)n1KgMP7QuC)>2qVKZ?hP;5 zPbkLu*8I9`x3{i`A*ErfxWn~lXSpWZ-aQ#}`MVH9m6<=!+in2{M=MK#dC`nJ7`})x z-gvVh`-bWQ0h2Q)&pPNa?vT7QiM@E=x2^?i@9HuJd|kMmd&SA)$HJyFJ#13H9mO<3 z=gBRGop#$l)ph8Uykoj2wCEgn3X>K??4!B4Wibm*91F=fW4@p!%&~?0Wu4)%m^(e? zoDBA9{wdG=|E#WDuv;i}IWfKH*Ss4x#^UP;D zSt_w$QzLr>!y|sdhIOu+jC3NeSZ&yuac;xUFCv?L%5VQmyZ&suVbKif2}Zk0a_3!o zsK>a&-%{)EMOm>wXI5sHdnW5_H{7_}o8cal(!q0kUId37Z4_W&*dRJ->iW8C_wr6g zGrXVoE3LiOU;kOw?K|ICPHg9JC}O;1m&(TBaR0h}Ry+TT=guq(es6dAyD^oaA<5=M z=lehF-rq`U_U@XUAMuI#{{KxbUwiLY@TbX^*L`&UHqH0MB!ReZ_0Nk>Zqzv*v-$7U z_}Ud&mj7Hi7?SSDe0Uz4v{SP1Tj}}tGWUN@Si1cFlimML-cvO?F;!vO-*j=KkSBBN zw|+^BTynl3`6Cl!O?QF$@le6+?~)Jqh&Ft=VtBGG=TB10`x9$bmmIrzBg8^LOqAjD zp|6RRE3)t0-!XZ6{Y{aisWB&XCQZ?cI<#p2n?=>X%7xi~t-K%06wuftJ$H5Qlapqb z>c4-p-FfKX*Yo?-+k5uy-_BIPX}R-=^|y-_+h+yH_Z$Ad;{W$b`rRcZRgC?Mb}1@O zStt>7pLx~4|F72nd-dD&z`NCJS>DZJIdxKyW6dk660SQ9>^pwvFlesvJXjMP)qI%i zcXU|yU*_|6YquI0WIt`}`835SIQN*^>&?G6IG=M~>EOM8m7FhM(v|x>n_jc7IVYWO z#q`L*kD@@-Yb^lfA`|yW?F#_q0TR!(&{<$}u;ol~=y8ou< z|NpN4|Ni^Giu23cpRDBF72U8~bbj{wt?JF8rZ>8lJm{6U!xj2`cfGbo_^}Tx>+bN( zKEFyNXXVb~n}M}lS8C7q@2+EJJoDm*@qQD3Et!;%uN9~5Le8sbeN_%#quc2>|K^I1 zih5^@AHR>cYViKme*KM-O-u3C`}dm)ubc2oC%pgbAg!7ydS)>-}CQj{J*E|z6bSF!b;Z^pIvO5yfwcv`{UiebF=5!{hc}g z=gjjG;sv|-Ha&gXW9|Ghs&Uh6;RO$bIP#A*n)ceg%{Kd}=IZ|q zVQEXR=tm@1Fr70k$l+(a@kxd$@$bfLM$HAcOvP1BJu%~JlsBH*cv4Q9zeqKB;q`T) z6AkRx-dHppIFNc_lYy#ou@pzbl&0@j-=F(`HbUw$+niXr38k~0CHD!1>{^=td7*Bt zTKT7fJ?o6qz4lqVA3Ld-f9%%Jk|!3`0z3BWE~?L`t{dOx81m3y?tZRe@>OAKe{hh z>21tqh?GuYPiuOz&0ntNEtAF~&*#59`L#5>Z>+b!GX2P+^RoAoSa0w4cG=3_;;pcz z^Sa;j8|w|(o)s+dkC-l#vb)%YZ+flQygUx48 zHsd10wd>YuZ(hwB^7%sgnYo{H{$IbA&-!HEe#Qqv3=VmAvmUE5bUcn$J#u^gx1OhI zC(d)6jQ!*}e_F=0oa@h28MI8B)HXQ($Y)42-@5wAzT^P0XYYlW{>_!!$H5rj8pGgH z7uuaNcRIt2+pDV&+_;MEi>`z^i z+h27!EMcz*tp2+_L@P40?~JL>#6P8TY?mD77i18Py8d~wug7$TKkv53%{%iW$p6&d z=vB?zNu^M}b#C%%y>qcl3nnFSGJIHay`<9k(bm<{8uMBIdo$#zHY_fmyRW>? z!fL{<@5*_nR$h0@u7Cb{=KqN4UpTJDDOmeINE*?Ebb%E_TIh-m>PjJi2L-{aTN4jZV|?t+U@Xt`=If z*6Cnm|A)NU-UepTCA>zh97}Hd+P$#i@o1}=(l`A`{(;Ane*1f@pHIF?TfBPWVtgPcbn*UF!Jb^wW|=J zw>TuYQ6cvIJ_VKqJ2`K^vX2gs6%!Y~zx#M{I?&;S2(zMjos!{&4cjt-wqlaicF zSNyvwsBrV^47COU1`F0N`xnd={;q#8kMlc|mD|px`=lq>v8*xTV0 zkCvR=x%Br{@t{qg183jZqQxDslQHnX2FtwF;&a^Vx65!_%x7Ks?&i*02d2vjY<_3T z&(CcCer|&O>h-ew8&sOB-8%9cB7aYIWqf^CGB*1DZ`=F7PyYXP|Nra1yB@E#kYKNV z5MFz!^zmu2sOkT|-v9CS`_$dKzcugP@A;PIv;C3q1BG^`8?V~eTer=a#D9UY#^S>F z^lz_b6f(s#oK*X=oiVnp%^~N(&d>W;Qr^aM)@-&G)p-5ix{e`xkGS^q3He_SmrlDY zAU3u6T=cJ9lJg$Fj63RoG^{kZ!SCA#6PdN^<$rIKudcbYxTTl(pwQ!$P80QX+OK>U zDhTDP2)GdGbZq^D&+lUV!KZ)Nn)$B##71cMBbgtfA`^%$A?68W!$>;yW_y5{Ezvg@Ry}h@eY_EU5-Tvn@ z^Lx6|Ti^ZPeZNXPI^qBIegCuP*Ss#@_q8vg=ILGK*;-E?iQjez@@n`VzfIv;E^CNP zRSwe|Hg-J))`ZhHrvGGEnVP`B?_jNd`t5GBUo7`d9(Y;KFr9&6sqV(RJ?ZcFd-Ggd zU?F+D+ULY;@76p0xm;W)ue+EX>$_R+z(2S9$eUZMJ8zwxu=;&zf>m-yt+{?g@prR{ zt7OX0ew!8%t1fW*l;9lh4dw|Y_RF(tm_#1G`*Uu8c1UxNqeFyS&B4z%zn5_KT=K4Z z@}bs0&M0*`huWOT&wcWqj49>4o8C8i*Iupv8_T4{?N#<`ef+_-uS5IR?c06s z4#TX|54QW9oNvXJGHLGKyFKA)93S)#I?lS}{9j*j|E~>47Vq_DNa^8dNbuc1y+K)T z!-KR_z1hrHm>!ioF-$1FIe8~n`D2uei9vY zSw_FEY+V`4`>oG!P1d-vL2ZMQ$+bg?M}O(x77DOYpI`IRN8r6M-@#>e<(x*gGuNwb z+1h%dgY}P5qy*U~n`~Rc-|BwFvp8x+dfBxb5w=(tKZrbiC!)TCRQvSDD z@8vtSqa|BA4?X%gH{bJ7G|Pbray2|DU(6-?J55lEmw;%XwhW>+>JZ z3MamG?0mBP{G%JcmopeF^kzu;!Wp$Z*UiIIqWJms2BS^;lGTiA-)i~K`0;N4Y&Sa> z1_qJz5VOY)TX+A@JEkPeZeZTP$mS5!y2!A6uTgig{jbILzh0awVsK9oU`Sz%JbB4# z3PYr|QQKO9f~ZuTMpNcB_p=#zc6^(l;uFr9Q~I2E?gG?tIH*@R;}Ot<1H`;g1=lF@~uczxo%KcPgd2oyUcTG2g3BQ(B(=DNfThSYwq@*|ND9Ucy zef$5`{L^xG^&c~C+ATBv-pPwUSc6z*_?}GKQqFvpsp9P&h8o7;pIg37`CYz`dET)r z6{**(?Z1|L?~o42`=8U@zwzUjJ&ivl1wM1Cu5`6 zH)mNT-Pn49=TB5q6U&Zya?;O*B<%d(dwBi|6LYgjWU#%*HIL<>jN;;BuJ#2F)D$)} z<_VUBs`g)f+ve;!Phz5<0MCzA_MgwxAG*ACzWdbNIFaQ_%?t|uLeh4JI`|+3)ZD*j2df{r>N}_5c0ZTE3%-lObB*eBRU5 zEUG*jZK?dzKF?ZyuJ)ZK1K*}|%qdpWjITH7oTxfdD&{C}kzdWdL5o3}MUQc(D8uVl zb3`W;DxBv0wTE%tH-?@!$-EiHFK%V5iFW!tBd||&win+5h3L1!!Pn#-Ev#9yrHw)=^`Qf=|=Y(2&w5v&ZAZqsfU|NSKSuloYi7H0hsF*tNz|^2h9r8=_N!-ChJH zHF_-ddayccr)Yz9z1RI;PtI=;;C#97Lo44`f4Lu%_HAD@wML8iS<=V6`|lU&|9iaa zORL89_rJoEgBcxKSf6{aH_fZzxOB^Wzt_3lHf;HMu5CQ?n0BT-a%Oq3`Tp-WcONgh z|8-wa~V#a2>zc=Uq zy*WL3|9K6=JaIFP+3qZNO>anVVD)Hg&Mea}Sm^ORuk)4BvtO_FY?Y}ke%EkrwNUN5 zmTT#MHLmCX-0`~XP3`{kjMax4{)F#4c2Z(KW9r{i63qIIQVPq~vu5#KsGPk@O5A;_ z>#qOn4&F4`)No-&QAnt?)yB+JW+$Vx0GWtqx(X%t++5GkEjzd8bVO*|EPaPwowf7U zXmYWH@87z(L~r&w*-w=^C+pbtzZ-1do!KU~_p1G&jY}MUhHlGSxw!6@#Fef2tS_P&g##Er>OKrF>IpcJwrk)1smt^o z_ek#Sx$y40x5f>d%24**eYtOh9{=*#wOl^sO7ZQfWr8bszideDJT>WnH%IEFFZIV) zFUj-!bbf0+%Z`6KZ!a`H*#EDT^NN~G_g<~$v#r0w+rMnT$|${TyV3-{M7Of~k827m zcluhn?)lLlWZQJiPeu4)eo?v2T@RlV1Y%PkG6J)I>{(LXD`c1d&2hLxWQ-19KU2V6WeZjZWM-E?- z|F=-S&L-=2%@ms}_p57ueYu-IcgFdWjwc6mI%lnlPhKuvSNQSa<@x_!&ad-lFsM5y zzuEKWjN8+sSnb*F*LoeWTC(HTBw53CY?p0$mwcX+;pp z&-U=>T698|zhGi%9IGBPR^XAFKHy;JuNob zWeUrSh`+bA?-#Avxzt=?-(&CTCmI#Di%z?JZ)<(1_L3s+1$S5HHijKdO1-GIC-Bs= z`CnQYRA%@3t(thAqoHzt@=lfmKTb^l_x-*qLs?R}Z#}o)f$z7#qKKGXLe) z^GE9~7Is~HzWdeJ)1Q9iF#S0-Jzh@x|GV{j>K`ZEf0(t&exBMdul|yK)qi4Imp<;5 zT=?8rTfAwne%h{Ye_!hVd!%1?%~x}szwoJvtbQ}EO{)9%K#{k`$x16NUOwYN&dQ=^xrVSb+fZvRtd@Ya|#S1!vwGUY|@ z?rqm^Y@c*shSc}84@Q@61*b+H*wf;0ZOz+fKb%<{7@~xBFq+@ZY4HB1Yt4N?CODy@ zn?WZsDSLIjLkmkqjA&x<+J93ngyt}G=sXV0t6tl7Wm~-8nz?7o^gNUUWbfO`F{Hk& zVAR_=%^~pv(?laJ>+Me(Rc7di3b?Rob{4#`FW&r5akY2fSNEGH7JDBGZI*I-v*mM>9Gxh_zq) z$2#HJ#l_1U%q$ZUi@tt8%K!Q1PgRDJ9ik0aqn``DS7nf$ZZLzNh4WbM)nwzCiX-87 zxBvb2T_{MRMWrSuSV~8bU4`N0!C%`{Pxs|+Rd|zf_z$C>&G58M*`5O_CuiPWH%)VV!>R^bD5YYsF^R=bL%+dmYG;niyHXgK>9p^tGqA zf87!<;dF~$yF>ExT81U@4HdQi_jCU2-uLBGcDa7PZXVn0y;{QQ{oj2HzqB(vdH&|e zrt`e3YTEz4llYdeu=hu~aEmv?nb73PH68{xjtMa|#vj;c<@Ds95(CHL-}k3ZjF(rg zz8K3=!0GULBd6o%R*e(KLR%(0=Hc#H+%>jl}a!l{9s%kQgj;pozeiS0Q?bWX8u9R;%K9AaXuB`8B zR5AVeQ~S>1)ze@8lwo|Zdty_&Z0+l(Zzt&2CGB}%`@2__!En0mp&P%1<;(nU9Nm3f z&4KM=y16EErTaF|oB%KBhTYXcYz97(r%Y#`Wq7b#Gv7G&OmJlGX5+4i<*^TvkDT0p zKJ$9K@M4i|*+Hj_P8Y0iYFL}|l1a&SiFp5ti=5Bzn4Vh~e$r#TgvsGu4Ets$oe`c} zy0*9SWUBAmnQ=1Nf1*En+Mk`7bu@PK<2xsAq|NX+u&KnXrGw+km$o+>l^Jf7w-h|R z|CDvfMmv_NvlCY~C?tB@SZ;j4E|3*2aKmT+wp@`%K3Xvj%QxmTOlBHTe%yYH!4Ni80KQ3-z^Pn_zoyYR|WgH@@un zbfG!<#ED;jU-^H#ZlkgH+H@VS0QaCD&-bNCGQQZn?ebo&sc(EH?7KQ^>R+MmbDk}~ ztYhyq%&UpMxIy3ZLdyT9C&#rIIND#|=tFALqCwv@K;tJqxc{?r)|YEl=9(UbxG(JdeI#wf&;tzbpIpzn`=I z>?P6aoh`TATsu!Zc6H!(kYG9J6LBgyEx!3>+`(8jy~8285$$^zW_;MRWu3R6M9$wB zw|}mj4L-TeY^{bZsto6u{+M=zR=CZ&<8|d)#+t`7CcG1zB9;7?K|Uw9I z-Sq#rc-5XMytj9>$JFHPn>sPOy;h0g&E)f&ygz-5Wa!ffnYHDe?=)4-pRaitPHtQB z@tmRcviKWf3$4 z^P4tDsPMhrv_ebODPbm)+^SV(`O&&{*Wy2|cyVEW`J4RIf{*`__-8Ahx7}~Jx=dx> zm-zkD8CEc;-{!CR&%bx|zq)VlHeP!ce|7EaZ{N$L9!LyG6I z^4_B6cWIMl{`uWV{Uf*g;fj}>m#;ma#?ol!%yVJN#d%ZnQ!QR*l^!k(wGmjJJ>eL) z2E*f~rJo|7zxz9#VZy>}^NQbo_x8SHTcO%=Lhkp@mWA)nJ0x@7JIpMG8Z$0;@Y{L9;W zLK8Q-T(j(-=N+UHb+W%>hB-@2^rIU|T)#ISX)E}&)w+I??6>37FRh$pZ|$Ze*8kv7 zG|L0EiuhlbtflKXTi<_Qm+RVj_lkS+#)Ic2-cPz(oA0oxOOk)*|9AKQ?tWj-7qQ{< zr#_jZzs^jHX5nOU2ngQv`qsRO?=QzSuqk@HYe~>K;1j9aT7BkKWI)0S=?A;cJ+P2g z7HAQlv-?%`4kJ^LSXxuCiv;+Kbi^XE8me!8xW%v`!l{(=XtXGUPStb=o$oI`C$l(+9<(^w#<2V}w?^;HsJF(K zDsn^8RJ>o=)SIyB+pX-0U)Il3vR2`gdG_(i{6-g9r560_VK}klEbFE_TaE0!D|&4! ztF9kPyB2L~$TwU3>~kT;BMNu9G(J3I+i`T3w+QRs*h{Shw)@RmH#8 z{P#VORen9$df)$#_WzFmF28ENZ?}8v{4U*`W#6{#%BahCWqqg6a+hED=asY<*~}eF zR6B0H=oInn$vW~V_4%}hyA?_NjXVEtjsM*nUb}yH{(biicJcRn-{vtbWB+&iM$gvd zj?Ld~ZSFB|=vlMB{DOFbh1B8~dlYV{Gb|HPoottS+FW7X!IJr#l8z~#UNt}Ue!gIX zx0nx?>YauyXD+p^D=m2POmg>AliSPBge1f+J^f5VU_!deOOwCve&n+{fgOA|fBy3Nma_Kz-`XPS zGq2ihjwS5bp0fW_Uj6F#XBn8@=3^_1`;R!2pUiRhWee)R;4&LMa7i_)t;`fe! zsx{}m4#>|sfA*5@>KxW*dXgW@A3rVj-jJC5e9c|;^(lvh`D^mERlaU#T=#F1;6Jes zZ!WKx`>s{CAiH_Dkj4GIPcHoWyZF%8O$#rky}jkNUDd+-*|yw+>-<$jH@>-%WIOjB z!=GvAW9=7T-hE{1J@W&~tGs8uD3~n%eraRr2eF?|^=B)HNbg~HvGKCk<^E#(+q3_h zsY00S=9xd$cErzMP`QwLvq{c5XxW6Dg-&m>y`@AZF4St5aG5U|(-$_MvtIK2*^c+~ z7#V&t9J&5gM3RL)qE(aCaFyB*rVG*Mu76xxVqjH!J?&R^OvEEz1COTZ9!oZto;bFB z_NHkJSL~c)8JO$NuTqFsoM`x_Vsfzjm*XE(tZ&u2F--HZQ`UH?G^F{x)JL)?a z?l8Qlt2@EY%EGvPqe*%E?|swnPpi0D*?Xq)erK6L%-hl$;g)Xm?Ma(Oo6^7C|GFuK zrR7Y=L$<}YkM-?;Jxyh$*C7Y*?YHMYwZC!KB9v?1#87YBW13|GyxaXYzxw<${xn6#Zbc!!U(*g;JJ)y7 z_T}EkH?Ir*T<8C;<9Y4W+V2WUkB%JM{G@&1`A3Jv)fhOp2``$HD$pR+k)*ZB?ezrC z$xb=1D!Um<=8B)U(Kd{2`(wzYP+{7}<8+g!*f}kx{mco8={7MRD%}_)MA&@o8o#dd zO#RXku&et|L5g&eoeRS});qicO%J4Ml1=Jm^JAX*UUQJ&^kCgVEqfORmfqJ9tHp2b zH{DyClX}~)TuaIPbfj~9)5(iw9=Q$^e{u;hF+LY%xbf4NX~TlwhD-&a;w!uOX<#N|r%&>BC>4^ZpAkPPn=zb}jFw;+b)qbQyQ3eu`E! za{IO4u6#c?i``F4>nG2dL~dX2U$8v(^P(j=|D^RV+_zjkSJlJ&#ynO5t7ZSc^f64R z%zZWKmi50UE>z~In72Kb_UUvJ&%Z14yM-O`{URUM%{bKnO-6LMn56db%jM7WH(%G^#d6_n&qDwGx;eZTqZF7Ja)jJEUpw!?6tw-4n0R=Z&8(qPsG=`zzy$6MOSRP25jzUf}eN zS0Y<^J5#~i_EU><1)wlV0tW$JT=9yy(m*WrZchQKA(DGbA?Zt^Mi37%t z(l0mZuwI_H{%UxO3(rbf&xWPfee10LhaJ5x@$JtfRV&wwNr{sKjdGn%n%%g#*}vlc z4V}m@-}T<+I0gN#t>5$Ted+&6PqlvRT(ZS(cUb9y_p3||+UF%c6=L}PqHFK|Kd1Nq z$(_w6|DKU!$&@2mIkI1FO1+r({(Wq5=%j#S;wfP#Oc@eX9+-1DE-KqNW6D!j1?~gC zAGO~K(!Jo$wuO<&xb)uV!wr9|HY{LRA+GYyn%Bo8_cYhUd3)mpA}^@;=dP*CKX#(i zF#dpwL+*qvZk5OPzh#a)mU~v#35$ zJ1P9**B-`yYz@!EBkvY{zI8s#f~CXThT+j>o)x|2Q;()DmsZeg;1c*d!P8$O;?jlt zP4&B28lJs=<;?c3&hcrQ?Hkz+wc@LMzk3+=D7YU#-%we4J?5s%alVkfW|vEII9IL7 zJ^A2QcS0fO;aA^1O+S*ET`Q#+?s`i8t>9~!H<7<%XHMI5&27h~B$n{52Lkulh9W5Z(J zH(#1w8~MMzEPud(X`Sk=4S+&`4{bM-t^<0 z+3zMkUH_LMxVVh*9aC5AO@8~zpOP2lj^3^}JGgd#ob>BotBEU&I&YPb6eCt<}jN|42Q~_3)i=n|Jw6!+a`PNZ|9#x zR^Q@cl8!3cyzl#50fvozcdv#guQ_|S;FqO9#otA>#p(9J$Fsi&^7b=uxM^PRUs~{? zHoS6f96R$nwq-sc>Y9sxzxH5#z?R_U#IQlP;lP94>$iP>E--!XzEqRx7w-HsOzSIK z&%VN&LCi;QVdUbKXSq-GW_unuTk&rLi$i_H#-+`_LbD$6obTEHdO8C`mdjc*8Rm6O zGJACx^4uobfg z&L?+y-u3nW|Ip8>cCdc#_hc3ZMbmH9woM-j-c3(%R{yo5uIPQf-cO~X+T-PKm1l0_ znd2vRCOoY8ME{+2{_4d^4Zb4c!Dl}Hdi|*9@v{YH6K|Y3yE zZkN9;mN@qK&Nju%OYd7RJg>#T!P*qI`{k;iIl(8H%8VF}MLVrJf9!s3&#hh8^jfd< zABeio-LQ2d!;Z)Ih4veo$8TMJM&re)oRo*p-Wz>*=49Ewxn7V-!DH6?U#uB+jSCXA z7&vvL7ciXPx^ds_gzdj}ey(Qx)K|{j^zXY|-7n&wdn>>A`1T(Oo;l3# z(^gK?x#9EuU5)ML=~rVn<^KO8dqZgr2SdUd-X}60v(BG0JwMx4f2FI_=CgnAvUyM1 z&cyI|SDa9&{L4+pb;AEy-_P-KtDDZy6Q7h4H&Jifm7nYGW^vj?*RDEYqs&mUyPD%h z?ylf@VjjQmG+fzgemShO>3>e|p7YZf<|MzqE~gha%RP6q>E|`4lq8L&+2tQyxvebz z?4ud_QGeM4;oIC76uy1mu#ubPp^=bVB13di_NVvBwM<+I3L6?8Z(n_K&-eJ&U1~S~ zylB2VMdqp16Wxt>yV@t!9Dmys|2LLx<~jrYbK8qz58U4-A#vC6oLZ=4M&rKMjCpMV zx5Wb{E&ac>b!-0o?N8?Hi#B%>(@Wg_DeoD(M0xz7tKY3u*&iQR$GYZZnRd`Gh8MTn z%BC^I{@%m4_|n0PQ_ePA-1|>RMs!K+egFIWn8m*xj}wS^UDLsFX@|n3p6x&&-zh6<6@H)H=bUr=k$nc4eIuGN44m%PPK*5<`Vzx=({;x5RDgRjn}uh`E;79PKVB38|5qJ2WAAbB%D|Ftb6+TRQG{d^;JIq{_**5%4FeE^y8PC z81^@3&er`?ZOV52ifcMqXXY4m^fp(!p`yw@?i?*uYx{L~4{ZCf^4CVg1)pmIHcju- z**bwUa<}NUbx#+s5-;EPgZ+>4b7Q00w|l?E>QB7&?acb$A!}#3haS7S)ZuLXO)Z!J0DDW4`S4wG2~q8Q=T;Wvy*VsDHHGFvj8MzW0Cko#$QHn-aVEad24r>uP36 z@swA`gZLT*7#KGFJo2x1r(sICQRRUREDWCYDHZy&@7KNGT;6ivj>`RQ{3iJfzx_BE zs)bp8-}z^K{@M%q6%&)cmNNf2&T&Asr-M&&-doRzLwiIUKQJGdY& zwm%NsYjoe7S!~aA28DZfl{Gk<{@g8EerBfM<>^_H(YqM?&P@~HdazZ!Bi5#NnnP_5 z!;9aMPqR1Ie(Kgg*|BFvw_Uksz^1~FXYc%W$=aJ*@UdBMn#ttuGyC)>?)E&XkI&eN?kH$L9I z@SMbnRkkS$-(R!d{hjSW`kN{5Bsd-fyqe~Fui;cgxLUom{jy49v4(e5l4XyB<|T2P z&nV+xu<(D$l3NMMFHS|z-pV|u{O-(oc~hMY)~x?K^LaYU1M5hpU5r_r4xg^K`N+SR zHQV|<$K`S_20aN={b}(pZvU}Y4)-<_}#=G5{x@GUHjJbA#CG=W6>-RCMCb+@M|b*p6PJFUf1Zg^DtH7Ws{T8f=tjyvV!QAN;bNWx;Q;=996%S0DcRxO@J-%gTTCItzNcTK9&( zX`c6Bd11_)=^~SYgFN5=7Log@pLp|ql90}c`&re(C;5dKRQ*Wcdz|KB6+Olq3%=_ZhZ$`y zJI6R(B=>-cBF}EK-_^3U=W978>~3GYdfu0riMG*)>$j=xds{3Zc~+<)T}9>Z>5#15 z`!_f17TRae=hF!<_+cHEeW>JhdfLXPeYeAtUN+4woOIRyFBAXs>ksn(pO-1(WJvJ- zckKO9Uyg`SkAM&V%MN%U@<2-#w>#I+n>p zzoYS~3*#dH85bme@wRB^e^;0jZvJfDV_+M51 zd?DTHwr$9pDf?GTDP6A*VA@c(c}C6Gsj{Sd^WxXMH!S0j~iho=j z9=xCQ;GFI0758W5TkZd=+Wmb6$EAYDH|5&-Pwt+5K$&@ioo$ret>5~Jt{T5ZygzH( zKM9qdugtLjNB908Gd-EUm^i+U_LoIGNyht`$;wy^T#(V_kG&Ps%mpp{ORM>htF0RhW@%G&%BY% zYkRD+LFGb@cH{K#E4xyv++@xkZ(7Myc5^esm9N}c{0X(SAJ3&tn=Kie^h4+Ip3jl? zIbt)`|7%d4RQvpBgy7=Y2TS+s(M;y7|G?zsAw` z>wez2x0tD8!G=~n4g1gIG zs+!Myb96tpcFFZU6{{aj&GbHI?l5uV<7=+w2@%u7cY1Bl*;;*OwS#+n`5SMp6X!Ao zN?x z>+8B}C#HJ8n=P=Zkg@NKd194V&dVb)2hXSMWjPQL{;Z$%!}fFguO2(6ZhgP2nfJ0* zwbu`hwBvW%SvI?G^4N2!*s3l0<#nOUzf;!vHaG}BzQMo~aZicC_Sqyuvki6=n^Tp& zo}Is@aJ_QMj_vir*Gi?oH0Eu(?Rwha*OZm9?avcVrrQQqs=D5Lo$s*c;CWl=E4`VG z>&qrG_-#vmaVuT4Ti=V}9@n|+6UEPL@4tPY?O^&R*0ktvyIB_e-m6x%`8jLGXRYL& zExNl4&n=TW*1y1P-Wzd7WA;tQyczNqe5p0Rx>iqY!aKQXstl=JCpR_ruCsSzF!-r0 zEgdtd==o2!>sQx1Xb0r{_WEP?W8K+(tS`2*PuM5Sq`>`pUdeOMd4El9le70b&6YAR z-s5fYOioRQBi><-C`jeQ3t+P`ZF^$6sw; z)yH;SY$bEo$7Wx-mi7LZ$MuB!>oSE50-rukKlo6W`M7}~L*EY7i?@nn>t~;Nm+8aN zEnblGKm2~l(|fz0ZEIX!HqSDFZM{jQaZh?r>^J^`aJ$gSvmM`8{Elv`yS@EhocyWk z+jUhXfA)o0R^~|kc~xHjb@KZEudd7QTDw*?CEK6j{aPP^#(-I`;}p6N)T*;6?6ha; zir%MudaqpIl77|?d&`<{rLlkC=PmVXUCO`1_FoS7UtZh1`TE>;{n}qkk6*v`OP|q! z?Z&-WrX8wJc^R(9&7QAn6aVv5xZL_5Z{wdR{G2D)z(4WEvq^K`?TJbH=JWsCl^e4s z&Qq#POnn>2bl}^i&c8y^CngnhI&51Tlv$a`*--sG_=CT?kjb|$mrwh@wjckq@5a+t z{?gXhXD@tTcq6s$+nsVRh7hLR;(~Wp-OUq;+Z(&6N#)L~u;bgAcC>KJOkO`NLV)35 z$??*UTZ@nV?7?Y3aT9ZQD83m>cUURT^* zc7J!l?R~$JHr)Llc5Da3q|M9Y&qU0$otb^Q-})vuqtE2U*{P-b)cMoyrq|ZyT|U_z z^ILzmmcxwu(Tkk=tnz)hlisXLZkoA@b#H#X`GI(+2i8fN!3=yQTq#vO7oKhGOMEfs z=eg-dF~=>dthUP4<(eg3=BrEI{!%RCu6W~=iN$$O|L$JGUNFgZ=7zdcd-6H|2n7`B zJXpW>Zcpg_*YVGu3%;p;pUVD&?2RJC9QK0O_!Z-nE6`L zPGrgK=3_hm?PiP!NZQT)KsLF#H@Gb7{!1^R0_If-m*#j$ZPW5j`_aL0|7QXJ--BY` zPHlg8e}5z64zH+K_kPM(ptuZ0h?LtZ`8}9N`?h?flFw+ZA{hWdFW7>FDN3 zF~@>`pWn1EC89Z@A~s)W+J>00n>%aYAL7*zzc5X6zbnHw-q{lkT-kQ1x>WgXllh=0 z7~A|$iACY}O;rv5+B-Zm>jYKIv}fd`rf^;ry1;rhxBhD*2e(9Qd&&k*1+FdS|K5}r z=4@_Yb!xbMV>$x|N6Ms^F%A1?_P=J_`diQOvfYJ%g|Ew5l^EXqUfc6dlJUZKFhHUkEj?#_7Sh@HKux2g z_2)g7{MC+UTmO~)k)A&7h>qiC!IIU=LMD&XoA3X&jj!IW@^$xnE%vRG{a)|h|Mu|W zWMA1@8?RF$JLS{sY(}%zn<|ci z4YM1KQW(#<*lM58aF&;TbD~Dp#BG}Ls+5>^@4jERx{fk&8yK*gC+}+eRX>|S$02de z$?e`&C6%dLQa-gSGDPI%-fk{p44t-3+I*sI@iDV&a;fj7eg2-6w4D2xVbA+H8~!yq z&tzZJF2F3aZ7V}GXZ8Qe7{7qWC(Ksba?d#7^*zTRI`ZqpzOZ@hj1`)5zx!*(HarpD zRA01y&$`ka#?{IBbL-QVHyvo#Vn{Jx|Av{-WS^==$)_ zudNsKJ>zbwDA%|LFdXAJ$hP?W&C{p<+^ye~bMj)?@f-UW)O_rCyXorQy5BbqH&{>Y z`Fj3p_;KBn8%c7GXawSSZ__`)-ZpTzFzBI_GC@7tW6Trvn2$M z9p!kr+ux`3br_pSf;PKe<^WI^17eSL2ulU04a8Ba!6{@z~q`)-u*T!{;-N)da*!D-`aPRdf&wV-nYK?ll1)`z31OD?#Ql)-QCi&c5U2tu7)+H z?@BHwFM93p&Fl$#@4@Jw4Tm=K_n&%3U5O~{0?A^ytz zH}@mL#k2hzGILK@$gbA?f9dG0g&Xx415Proh)w35oHz07y3mbP^AGL`ySMB74YTUl zpanJieiS{ISFG=5P`RAE`2J~&x2zG>yZ-Hbt9R=B8@Hu`Rnc zv~WLoFDL)4`N8C+c3IDF&EF@;YLON9bCtrEf9YxQ^LajNeO$Nw&h~E+^LOXW45>S&e1=g z^#6ZS?l6B*${{&*LEhfYzxPhMy10UA(WLo&hUN_$-PDyAHrTCaOLd?nnU(}wBh=`;(6ttylEUgz7i z@z*{UABFlCuT$qtKd?d9(fGDgLzcIE|7ZR0+v6VydhGkUdw$L1+57(o=^EYX`TI9{ zpZ<08W$*5C-KphgmcKmjW7x|d>-6iZ8Fq3Ws4cblzh83Grni#}Q=fW2crl-^{PKe^ z+e_isFC5(LUoEg{c}n{2W4p7j$ueL1d-ng?^XGnl+xnX?By{uIW9fEb`){8!X4+Bw zYP-Xp=p%KlDVrK~Vh?XUdUD-IyXxQ4dnRz0*(-Bo>zl`Uuw0(Z(!1aEc*#PO_h;uB z^x3bH)7aQ8$RA%5>y~ro@80Zp+3Ra^h4qR(j+b-l)oLs}{Nhhtd=g8&>b~puH}59lq@58aM~2c zUDf)IJKk^FAK90%=h$AhjI%+RucazBF}d~e1Tehaww>>X-Ro+@xV{R``P(f1p6$47 z&bYt^zztkN+{a>#5 z8|+0eXAdQv_GxE!SHv(;;pPK4#%QrOADO+ee3vJ`!%oS{_F2MA+VWSvif+4 z+x7Z;Q)BM`l}i2p;Gvq)xtZ$U)Vo`jpSm%RWx@A!QJsi`|EDqBu@!o@-~XT_&E@ytz>Dm{? z$Qb!M-*0hrNSo`~nWy%g|BQL-&$JusFz;bmP&gyvyoLUPWn1)} z7!2Orn&Mj5!4MApG#?6ox3vm`hk{VSc4AF!%E^0v^S-OC%-%{Etc zXi&MacyYA%iWV>Z9_r7Uzob3V+x9=N0>HK3^o{cg`Nx zudDRU6+YWK{(m)Z-F(3byaMO1g-n;xVH8kN)imIIwqg73mK`%L)O8%YY-;q*R$ubv z)IB-U73F(X5B}oQeiPAdELdZ=zj0Q)vdk}Wg&Ps~w{v}Ph=AC44{Y&{)kwT%jwV&7{u*S*_aed*_8&4#~!pEKNBtmiw!$2lS3+`5lb&UZExuRpyd zZBuFhbC_LW{o8kP4dsXSX&?Xo-|B$f#DasVr){T9`Ll`P;FjcQqj&j#pB{*aoIEk` zZFig1ch_kQQ??4u)n2U1u%O&{(zXcFK*kuS+MQh`TeUF%s9^~c<^trT=0e3!b$%W zi@$LGD60$g%PNmw#OPuFyhq<}s?D`O>)uM8uRFz)`r-UEh8L?6q9gflZoaplWx=NU z(_*JS=AU%P6K!?hP%oMMUx5AQPA`SK%k|BsubVPCe_L$y_Lg(}H>@4*aUGb{tICkm z$s5nqAd>6(D~Y8xW>M~&g1q|Q3D0kATHeKAbl>#Uk7ti166R+eqLsT%+0$D|(b z1p93)1-Y*`=6v17y{DSh@^fy!`2U@vH(_mEVd@(zW=$u3UAB zKjn(|kLe66c68|0Y~MC(_ODx}-=`KAPWro6{_@$r!pX^HGkNZ9-Y?1!anN4>rRTnA z!S#52|6Q+dU$ez~TKw-@{55>%>i%A@`+IlJKAruxcJb3#er>n-*e9}YwTeg9 zL#-yzbaR=5HH*68&3X(|Sy357X&cIN9_CwkNuQWBgfLlFv zj_kX0d7A#QYR*(o>%6HO=@4d9tRt*a{M<6@m^!yd+4;-`Jd6|8)0#+s+Tx`~O<^e?2hO zzV@vgA7iBIvVD4rlXxTJ@4TAa!l-z?i7ifuvJa` zu7d8S2inHF?P3E&0f{!txJ;*-#V@OL_GfW z@@~FXX&y|M7hJ8k5Ky>wiAK zToc*4_rd-9Ny*PcZwLk+fAv1lc7|$0yZ`=>%@bDStUgo!@#DrTUspW%`|a_L77?-f zU;O_c+W*Ok^qIWw%Y=kD7Uq=KC8F~hHeHgs`tv!%i>1D7yHcmU`}#WnZu#b^?;;uQ zdnTwDu{a*Ko&A$}Gq+uXbjHtlKF9Ptw0SQzf9fwZnxYnPRDoe*&4y2F8>4kA1Bi?nr1`S4dp-KKAqM{Xfr~(@Rb^ zYDG>QT06&+mC0`&ceCeVcZ_Vag|!*)9g< zHq%T}7H_>>nlH#uyqI_9QeMaG#rzAZct4o^wYV>1Yt;AoM&h}8?XdFB$3jJ^DchX> z_byiLF_Q|bnv(kFNA~NDYCna19y%Upl9N93t?Jvgt-W(~W0?vVuYZ4|xbu^s#G|;~ zC+45!w^iob-RRBM5uw~9r21AjQ>5nSs%pW&`z(2tRq@&XR6vkF!VF>h}pB ze6{C|-~HN6-M^-{s{cQ=VaF}gQ@HeTwL5UddS zX+3X&7HiX+ujNHwIkkVB>FYkH-*@l*_4xcf**3ESqN`Nn|E^GaTP<_M?(J;zmPvo^ z|C)RMKFf`b1q;^17i}}#v2B&czRh#X|Lw5&sc>UDLkZ&oKMwoiov*c;8jrDjUAKSs zja_M{?{MyIXm&WUN&*a?ey#aj~>)l3S!aAZTiXTj!*$BfrbU9Ek-L`$IOg;n%@ zW3HL2J7Z>E|G6vAJ7c%-mg3#>bQIzl?*C*GsZC38Xl1lb-o)cvusv^S%u=1Jdp(XG z{t@@}-i)dH%$eW6cXycaolD2TM!6*V-L#3KS6Dtdmszj!GE&jS4Xn6I6#`mkcty-psi!^?4e@#NEedUE=@qfO!uqF9Z9BEa8LI+4JNV{7>2vS3i5+b|!^n z^LcabTUZ#}{d!mEGTWM~+YfAhy8Zay_3KyU#{8P@ShHr)BSFRUBC99aC^O9ed}_M> zHNn@Hi_Yv#Yu;D<=0~2<9@Y9PW|38XwbN(T_KEBlSaRU$-P5l3Y`wndOqhIlUQcXt zUY$)|<@6uB_#^959_p+5ur%0YYl}CeMsP61uZ?AV#dN>!eraS%il>Z{=7$)kZ7%Uk z9ZVIXpYA@!@cG*JUGw^{9OJ!rzUh}*N-ulfh2v?*ve)l^QuX%L%z4w^d{}+=v+~2p z`aKo3w|`9dzaf{!XwQU>3pe-f|911XufqDhhdDk!4BmP~qSvt}`j5inzF_NoK?c#l zzxju{KY0GQal)9XU^>I3hmL)5@sIx=_&0s&zIOZlI)7b1)P0_<|J%3j`Q19(UDf^! z|Nh#&u90fF8(bsHK=+n_c601&RG&Wd~O9Z%_-e{@z?P@$;#td z%)whe8~uD|ysM+j)3mUhcjx00h331-Oy=LVy;U^*I+aIehNFgVk;lP{5>oq1*R6|X z@L-EPVQdg>c`ae>{<3@{?Uz3jr>?bNSo`jIM)r-}ERScs-Tpbk{JD30|9}0Znk@^? ztXsfm^P+vtO=rp5y1DV~HTzHhTPmWvJKDjk{n`Vr11A&xy=!fnerEr?WikE29ieB+ z)%BUne+z85%5S|Sd!Hlwo1Zt8i?%8+UN!g0iz=0J?`^+)_!!-8pZjXt-hZUbx5zxr z?#j-!J|BXU&D8rDzARGyKaHV;M_|9H8pE;tEybSq=iX+|*qhhjG(~WuY_f{Fwcv({ zlh)nbdihwYe(U3sOItba-s%t9c`7yg(My4q@8@~nxGpCq{k8C|>(vWCLN~JTe|{v) zIq^uw`uARMR+Th$o{3aaaXc;l;NWJhK9)S@$FG+E%VQN%eDj&@!ED8RR<}jlDyHPD zT6FS~+@y7z+aKIKue&-%F}>RM{~O~R5B=Wf8|Qre_2ZLT#@*eI-_E(QbpBj_Z|g^G z@yFN7e$JA+Kl#gb-{)JGJ2BZ`3pcZLmFQXf`ckgd{}`vwCtvqx)_(dF*MEJldtFjR z?RLX`^;`++6M{<(Hwc{howMN7pY2bs?9}b#mYZ_1fyHj=0-hpoz1e}^x9^)K8l8Uo z>)~~wzoIupv>Lq%jWAN{t~S3d@+KCz2?cCan#xw-Yr;RhBx3tZMs;5<|R z{CSwcJj;za4I887Um4fF|B>x~EuyX5c*{9$;aiG(Bp+<5Zp`F7u=~^H_tU-Bek`<` z+I7otz4V4Z2hKOeS;YozQ_Wdg%yT_Cr%APP;%e0}k6Y*FJER=GJx{nG&(+7XXzrJ_ z2{ZS;ou!zxCwuPg8TzdzE>> z+Md|mSNEo0*OiR;A20N2!{+PaGj}|zZGF|slCu79G?T!|UYQxp{&@@$jeCFpuwhcU z?OkSfD*WE$d7nehor;^iZ?o~i-a5I|>(||9ob=ls?YF%B$%HAY>YK9uu^Jt8c;FtU z>SI*;c;W@y&CieenB7~x>VXggr`KD>+qa*sow0${>czjK%GGO+Ozd^Mt6aCl`0BEC zrF-XozFoKLg^kRXIogTExz{7DIvC4S@w;4m`V| zX6-cR(%)0{jJxZ~-u{+MShu&V&b#VmV)Na-|AiQ=YS*ytdn31B|C*;93s2|7wU>=& zubK0%w>5Q>?sL=UhW|Sb<~gV?UJ$)C?QPfJirWvuIOH1NeBHXA?;!m z_P?}iS-Lan{j-pxU2kLRtEV_WKN`?mzS_7W(TJ1h*M!Qv0+Z>_N;_vhT`wE|_I*u# z4?~ImBmEn1{$ATRk%iGMbV0Uw^Np5MlNNN|dGqt!U7or65|dT?+U57}`|!e9w82{b z`n}sf=kY4@9OLO{arKORt9!3RR!J#R^u?sok4I}ixSA$#HgY{-^Io#_W7N6D?WzpN z)b{EA-2FH%{?+@r>>q_bmb|~!XcwY%v~Atb8mH&3j_)}behWKa`mU#2_v^C#-^=~+ z%pxte(+)h4v~*p1CjId>msj}q>&6^kX)j|5D@h51za{du+JdFMcC+WG zOzPk)NPW25vHW<&5TyBJ+(3-k}2Z1d(Cu%$@SU{yHl>(ycG&~?DM^2zK-z3-Hh4H z&o-+(NM>1J_{qLv^Nqszxjy25R&HG5o0s4iCv`t<_Q^F`)$)gTvnc!wx8L6M=<6Y- zZ+TiRx2=!wX6HEfR)}HIySVETi(UL#9b^ROr)=vM_xe|IV0!HCkN!5GmfXQmHuk#%Xcn|LV;<>-y;n$OypS*tY3)F4x{c`lf#JN+Kmstkz3|AsmpP{bL?y;eU~`yeeK+_|F7%+uAl$sbp20#`Gflv-nQzm3NQI`{r|7{ z|4-KcnY#behTfVdY#|PBF78VSkiBs1-xB?TyRROGai2JGZtca@o31q${tm+XACUGC4f!)Yls{q;Xvk9K%m-&%jPXu7)Lt^Z1n zo@NT?uB!+aIH+mtc2{Cux3#{C@k6xYi}%kqTAuj+s^5NX{+IG!-?^txTCh%4+v(=k zpLzQ>ipJKy{h7`fyMLAS6W{f{{;m&%Cj1i7&bnTq_tMb*Ua&*C_+wqenBN~|EmhXn za((by^Ty`W*2hoJzuV6_Tl{Qi@U54|a}tXu`5cc;f4S#63InxI>-XikZTS1G z{JRVYbQ{AsWJlV6M?ZrZSi)on3+%_eaqVA)l^(Dl=Nr+wMY z_r>nPo^|mTzfbafT)Nih`MK`bdB4v;3o!VQv-`|rL-qC2kMbV8o|DDJRNlNrwd**4 z$sW5^i}yBJ+n=m!e3*9r#F5SW?!Qia;w>J!@!w1Pzsu+UIsX5L{QdoDJIdyrt)0E* z->3M0r|18 z{o3bWC4KCPsmA=dF^r?HmV;t7CF*{){+utMFs;$Nl@l?$5pb zey;fW?W-09B?SMfX8Is(|513p?X}=|`KOa7nma6&XS?R>HD~U9BW{6+ZCbyD&xF0~ zaj10jEH`ePz1H@0P3n(pty1pCUwNDDJN7tL@>q$aRM@!#4Odc^^_;5YxpqYIHLsV~ zgBx~_3+L+0Jg1X?W&ZXpYaQ?Jw|8UEtGK80QmEnefoUxQ4bNDz-`zUBBl~_~f3qFK zyRSd5tcz!Vm47hg8Pl0puV+3EWBcB5w=}{2&f&!UzWZ*z)sxWKsIfqNhdkqpt#|ev zl!&YjGkm#=eR2ICo9FNKr5P*yl~4RT?euq+ypTiOw~sw6>v>E5?f?J%|G$&=|BnCv z;m9JeEnEEEM(uz3e|qgsZ|ejcdz?<_TOafn-k~nWB%gJ5TotEed6ovzF#4>#k#X^eLVe&mD^wGq}z5a zl@0keJ4BmyyF8lLJv}0SONE+_K${UuZL^%-ycyVU>6wCQ;GJ>iD=KWEPW$@4(XMRo?u z)46(a2jZKZI2t0Z7rGpapBA@U^VGja*2?GGbBc`@r890doAqN#hi;_taud}DygG9~ z$5&pTVZlE^EMQB0XTzqdPqxY$*BSQw)wB%N)>AMv*d6wLyVN};rCXpCxeUAbb{#ld zv5wg|gzw=+?*qlZ`2)&06Y4jKMMkkdI`EBM#Nd~;f>(T9&}YTtQx;qPiY@vmb#0yg z4%TlDm!D5tvH$z;xVXE&qN0K$ZRcN9Ojo zEt?-ZnoMAL-?P&9V-oX{NxSXd3mw>}tQM;kzWMaAh9xbkFK^Uo*MEP~{ghAo&W#&e z@6X+R^|0}#8$X}iuSh&+wfsrmy`yWgr~i(<(>(v{ZttGmox3)c=Y4eFU#rBh`u*&J zW%u8#tGo3_J8Yji!~X~Jf11DVXANjC7mk)qRpGq&!1uwrbi)mH-#6|}PgrAif zvb&v^pIiJ+QfipUSR|nTc>`y_hUFI0Mz1z+3kv!_`wp)~w3VUbwK*2dsn+YCwEj$9 zqxMQl!Tq&OY@BT_TQe(DsA$*srQgNp-d-}zF>7-3JyYE_=Y8K9K79HS@-&O3gJ+e- z)^tmD4vueMUJ4srdTzBiA@fZ6WkYm{(4{Ax1YbhRCdL0-Rj5- zamDv@Dvh7iUOcB)uAu(rOWwbYJ6G>(cqioXZClHq?e(uy>*6?ko~QV}ESvjJs9~*) z4bx5SgB9!lUpM`>o#TM9d>z}IzLOC@+c&NK7*Tw#?1sTkCC-Uzc6<+5azFprcgteE zYn{JI+^w(u`=ht3Mq33xyv?%UcZkSl>mNmobI*NWJ89ic2A&Us_MhMW`Xj7ie*K$> zr-c;rq!Zu6=cT(8ny{wefnw&VSeH@CC;ud~Z%O7yM$y1{H! z*2a^Lzozl1`p=HmHI4r%mA`N5xe4988@67ZAwPBJ^{3PLZ~pMzk#&EQR_r^8&;{AW zzu()jBr;ch-u`KiDEGB}N1FO#Yp*|7WjU*UJHEO?<$W$w$gv~)!Z;31-KqVaxx#Pl zoQp2+)Otm~G_?iQf7h6}^i65d19pum%-fY7*6nVWo?;flzU|M%=C8KOhcwJTs6S_$ zu{xnG`;1XTiKE~5g#Xsx-bJ%VZ4Pt7~w_&bpn&X5IX=tFSawCie`DBJK=W(>jUQp zH+EWIpUz;j>C*N4Y!ON~X2?DH*?Q%M4SNi$sYIj1$pU@G2|pDL79>IcCA_so&Y2q}x9$ z{m8y@g?+!LvWxh9J2!?C@$yEG-oC$A|29**tw3UDsb9>eOEObaPoCOm?lRT6psoLF z_Pgy#HQLj}|LgsWXA+Rhf2vxWv(+vB<@N54ti``K>Gn&`dhczK7dms#Y=L!t?}dEs zA3pKqMn&&}`d|J3F53UnQI43lg;(pNU0vpj()M4v$tAYT(-)qUS?~O&zltJb$`0>QkR=6%z4Xri!RKl;+wVc^a_m(W}n)GwO$jrmDG%PhB|%Q zI8WMPR~{!r*pG#m_6dn>+wrL^XSG(eVj$~{pL_P-ySh`?G_F#*`t##ftMYz^Pihhx z?CcZfNxZmo_Rq;LZ!Ev_GsYzEXK`rA+_U}B#jkUs4669g={x?cJy~3LAno`5x0OB@ zOy!jrJX~u(=r{B+#4yCyR|+&tU-RR1eC79?{9?g_hX2L)?0U9Vwc+b(+4=wefqE?d z(;4&Xq-+{c%j&dnbL>X8b9@Sn+Mik!>5NG9~=8tle{? zaXG`R%}k%(xmQg1V?M8?;>Wkw-Rtk&j?g!*`gn0W2ZPPziOa+jcsFljD)?Iec6qh! zx9NN9Zzs>vzxnako}9oBe{U>%csu^P?mXMgC)3To=;*yEHSj#T!tQ~&{Dc-=#uc%t zpY0OUa}OV0D-hpQ#QbmCSLy1nXYsDBF0Q68ob8qu9hTQ~ zeDOPs;l^Y`WxjX6!Ka4XB^NXuXYJ6-yP$b%8OO2Av$CHL%~*T$o={dUbK!wK**uz2&rjYbS@ZsM*ipl4(mM9yQ_e3t z$S>HiO5E#Ie}d6(MLk9bJH{1ulQaJw*89r6W!?I_cbN-}XL0Z8-MXzx{=jBihWZGm z1ivZK@}f(xtC#9%+BQANo;EN4&8(8Y`9(?xD{frPR?W;kQE_ug*Ua~;1pYj~wfl(b zqHwi;H%#vMui5v{>B;qd?^8JoJ09~&Y!^EA@4gblGiEiZ^*t9Jx5hozJ@IBw&irZ4 zq5k^w82+`d-?y(iIaMGfyMALP=h>~DycYSf?rt}p|NfhzKYPjs*&X+y%Dkta`lEe* z5>w}`X?JF?f97Pcuk-p}J;#Rl=?oE%g!*^oePqjAEBnN&=|<^^X0C(1(+eE$-1%{R z<8GH*8|U&%KhpgiQ~l!$cp=$)MuUf^HS{C`n=b8I&=6X3FIk_LN7A5iifZ=Ob7@U` zW?fN9S~|ts?EY_^$@eF9*KMqRohB3bb5`S5i75+iRpcGm*OPrb;f~tIkIV{2cYC5I z8G8~nf{zj2x+`guln+DctK?Qz6b8d zPu!pSHL~qlRB?6lF{YxH)aj1X-q>9BS9$Er^5E3{@5er*|9><8@00w$YxjSx`2K6^ z&zrV=C(mrz{N&%MSF>`@-{$ztx+_LLhT+Y=H`V2D+ZC_Hiu3%e{I1b$cWpX<0m z#~=L-y8ZgM>b={aUvn?|lXjH%0aIJU|Bc5p=D)odIdhu8^7&7Sa=x=1*#0M4;C+6C zHsh{;iIby?L_(y`v#sz}NMzpo$$8t3ZOSv77Ct(;b^X!L=MI`gZZe#}nke3*JJICW zzjyoItlW5Se)Rs9+~fJmib78JR0X`Azq@^8#p~J1WhcreA7Ae`%ebO%#Y&;8(<|?# zSpU7Z^L51E{8q+$SIg_8%>oNw%S}CUe7B<>;nJEbi#HwVyKA_DOJ2IK9w-58VpSGJtrnEqgMLltw2_;s76^QZUR zuV)C@@cTlL-*>I&zi!X5V{H97wSRZ!|1Pdq zU^rB*iw|;-mouOi--3p5j`V!k1)$C*Ugv4&)_tF`I1Wx+PFWI>&)4ae8t-JAC+I_d6? z2M={S%g^1asmguxN5!^upV{v>cZ3)ktLO9GSW}~InG$-|b6)H;0qL{en?6i`XF5Nc zanG*TyH~MAXYrkEESM1ZRC{;Tk+t?bj2n112+!N3#HTs;VPXcio0>oecaKqIn=XSg zL(}#K7q+(%$u1m|-a4~5?AByUzVk6BlfC0qo67Obz*u?x`+srHHUY~8ScVpPJz5eg| z|6iLKrd*6=D&TZ3iw^h;8g#SgaOe-&YifS7^!@f{cPy_iDZi~==fG13CRq}wvWC$YYH{Xa5wyJ5+lARg&7z8rlOy{uMJ*`gns?D1$Ev523^2!Xi+kKRoF3e{5 zA1~1G>yGM_?PX86 z{oP5E^QbCM`T0{q4Elwe_}gN0e@{DH_V4;X{l>cwUhMK_V5ohrDz2sYCqiLgOTdI%oU*{(W=GF1AO@ zJ%W$a`WhTNDG{_HT~l(u(5lXmxNYx>)qgmvp18F~^?$5#(7dG;lQ*k=Ng1R8l;)Fc~s^|gtV)YPvltKYbG`bv%O*ZB@y(m!xf|G?&L{}tk#8NMA) z|JGY^YUl50Mvq>er-t{}>p#A^)#vf8oz)G`BmeKat{WL~AksFr`a`Ykn~A!6zJ1kk z7PFbh`u*MSdGG(ubDzGK?YrH!8#Bsn zS$+RwZ4X1uxovUg%%3>FbM5<6^#0?j%p#j={$r0`E1#^4eDq@eb+7kx*4ut&_hkID zvUlx_bvBcl-?j4pdsla4LG=XNBW_o-w57!J&n{fbtXkH2A~`SaiSp_tOCK}ceE#M8 zubTgd@5dR}7aq>evu;0-IiGLc-#bT~1>XN^`rOMuH~eJiQ?bcEj29)zds;cDShWc# zW~Ydn%awhWdU95E&HY;Wr1L^5bsA;MmF-Ga=k)t_++z+{-fz0)X6L?}rVC%ad1rKo zA^c~&^|hc^GaT5iS$4g)QNGmAcv^;WVXxpE2Jgvp@B7MqKi++hi=)S9gLujB7$$`c z>*u_?yKU+MxyTc*^L0-g==DuVDdA~nEZ$|uI^Q(nt={F=5{uVL31xoHx_WD6|K9xO z{<`_L&r*8MUpw(V#$ora&l1spImBjfTw83f%<%nq0oR7>ncI7%4Zhzo-fOp7g2Ca} zuGGJ(cHZY^eNJb*6USAyS=P+xdStl^6f~ zug+MJGIjlW_j~Sg;q$chgVs)(-ZQ`2>+#aF?SAq17k^N!-d()=^Y0nEe=a?ee%;P` z8_R=-kNxWeUhmz1{xU;8>y7B5K8DxLd-&hXx?g;Q$7X&cQ-bFCp!;i$*8J5u`F`KC z?8$83{@$yPj~Ch+s{S_jXhE%;fXV#pb)h!X->7+CH$C@my2Zi6{HbrcTWj0{e6BaG z>#?-u{HJwH{t&mQK*iOqCtuco+vS;_Yqsr}zgz{+`SQrHPa1VIg=g$ZS+Vc^?%(DA zj@U`oZd%UlFW&JqnsGsLRgDc>h3LNfoI8#cP3Pgbzl6)`G*_^Lmv`q4|F?S5!LNi2 zc&{wUU0}4c>CN308-;5mH5Xklz4c}1xt59?u|+DJA(p57=Iy(?-d=bgTm9TpMj!d6 zuJ_V^rkNz3mds#LI2?HI_Wk&JZHIm3U&0SmzdoLB$9BTuc-rz`)%(?c{`&n*UWtJ_ zs`qZyGzaa9y5$Z3u9cR*s}=9Lvt56i)4aTZSoX<`>t$ES-271WH#_yuVWEb1|F{4D zcHfSpVg9s#6V~OiJ^<|*w~Jt`NVE4owtjzY55oucAB#Q-Ph4}iKlH=98+PtW@f;3E zQsSNeY+TMDSG4Edm--)%+3UC+sYufKF^!Nqv*0kivP~rU0d&Oz5ZIbd!qR2YyRd9@xS-8I4l)QvtMOm zd+Fxs&2h~y+Bq5urQ5q^C3x_keAu}~mEoIduFdVj=ZimhRsI!XV9~XlFW7L)ZAVsi zvu%^o$%+Xtu0PGTx=|4l@6EL<|E;sb{gx=FIP2|~ia3uf-~YvX{})T94QJFJinrLV zD!!hjrVQuG zwb6nbb1v>=x2`V@<4fcXaaeZv?u6zySK2nl#@>DJ%`i*&$x3n6t=E2kU0?s#ao@k& z^}qA^n}0p7|I=?j@9n)w%X5B7cKpAu#31o~TE$z7&{exw8f>Cx3UJ7oePw!dPFKU0 zJLkO7hxF^Z3u^>UURQ1SUGs0>X`7jP2dfByf^e@;e*ThD$Atyo>%uzXV5->K^}k3Ww!t`kd;Gc!6;%3NIkUanO? zO7zDfmItS9%eDW#K5vqo>DJTtKecDuSm}1yFw{?DP?2Riacg&Rw(-r=dhT)6Rm=RZ z9$VWsiC^%%eD-zzDV&?ma}>N?!C+$Nc#S{s;9rw{<-f!?ZT@{GrzTkP=JyjN zK5V}G(tq9i*=gcE?_I>1lgI2s?-s1zck}JH?W+H4_Gj-tAJpWs?Vp)k$I%Vzi|_9L z`+o7fB$r=}*4>eP`A6SwWMOzBRq>x&i!?%{~t}R|Ns8~-{gHcX)pi2tN)z;@9gp2 zLPlzAyBa!0a#ntJUQnKT=!12i=6lmq#S!}$1O)Dv-c0%U?D#W@f`m_7H>P}^SvPOu zx%BI`e#gQmyj$u}H}8k^{*S%KyL-xbH|#t6F)i@@!S|^?<@^i+dzYs4tH0Y5U+`{s ztqA}B+40IX{x{;TbCuh8GsKDc*jfDXkDnIuO|zjtl)+3O=dia!naueUYL^~xGCX}; zQq_EJ?)lwEj;qNvnCHKU-mCZU)xVnMpIdArA3#{~$(=(V<7QeW+?xw2k(POqY~f0$3cK-rFv8Wp&Qy z;^?UByFcgr``N{5QzYjWvK@nsBRX#`!`d}sgP zf8W2Zseb=lRsVry@wYR^zi*aDK8?D*Yu*3QYf+pG4`yzW6WviN+rm$CjTUNY zJY)ZAV1H?ER%KI{Rb27cuN!AEFuZm7saddc`RVq|rR|>%{|rh#6zbN?;4sh1lIh4x zMo+s{|F7Twu(#-T^|YndbMA8r$ao(Q<+eHP#k%}-Tz2?TJ9dVQ{;>7C4$hHEVY$vC zw8b~Sz2tHEx6WS^)TP8j{~hkX6WkeQx5m=)+R80D{_5Ih za<*k#*)qr-d+ab%`hitktklT{OOBb6tDHXWlRYotw=2d?I6=iE$e>$>)j^Br^|Te1 z30vBqZ#B~JZ(HBAo2kLlVS>rFck64OYIlF%^W0XJg@NtG_8#uoUi-U`<-SMUd2aXp zX8rr*$TVB=ab7ts|z zqZOyllRkC2aI*L_5uvXuUG6Mhr`7jl`Oa@WEIa@B+_h$9usQAKQ2*Jy{<7|}({JM3 z8`);eVrTfZN$^7OyiZeFS2MUhP(5B2&&c4+z;(d)b0FiKu(iqdK^J;*rA+pezgoGx zY^F>6`s%x{%kCL{S-eQP_u-0~gLA)!bX09%IjYta%5b4Pd3J?gYT$G6{jV9LcAnXG zYD$*G)xy)3$+0*29e3*e_!1Pt;1DZi)>QWMYI^X_!1-=dKY8jGm)8GYv#>4X*_2F= zsOh%nck|pTk8PZ6BoXPkyLY|%-o0&eLcU-9{WJR3s+6ci_*1KuG3_f4iES*j@6-^EE$9-yr-kFdeTukbZJxYSv^#0ZV-d-PF^J((@n3^Zb@{yfKbz{#>PHLK` zuy^;puj{(o?Y=DZu6n1V#2k0zg=`^^7Ehq{mKoMj8Ei$uh|rMPg8uZ z{+ZNw8|@kIEz^?MvcImoBb#G^mioaQrZbid2Xli|r(lNVYF7gE<2tx^o( z^>}4yx1Wz;hRsZeiREWkF8sG;M)1o^>63LrH}tG^X!_mPUGjLA*R~haDz5E|5rncmTOHJiD`c;Sj>C`;osXJIE98B4v zr*S*MBjc9y&!}l!cV!AhPjg6I;hgDN|8vh%Z{b_c_Ak~m_2fHFcyG0mMPgh1xk;%t z=PaMkk^B7rOuF4>8&<>HlbWu45`5FbEcf$-yWaHpveR32rrwJ7Z}84valb|Re8~$- z#>ol7ETO3Zk`|Mf8QD9A*IYVU=Vbi5=)zR~sCf;?o?Jb&Xs!&)*Z2Sby`P(=Vbjq1 z&V|**FG%-S2$Lwsl1C5a9xvv;QE;VWy_Rgq8m^eB{Tsbr8*W+p-D#H|V|Mk&!^`V; zFf+Wmf3o7zdFTAH7mrr@*WP+0b$!<}BehKFU`g({Eeqz%uHENrDPTGObg04r zb|yyKxgYqtR-EEKzUW<9t2SQxf2D_!W9%6~Rb zk?CFVHYPWv-g}-*VQuYp(^LOo%d*9c-x7(P=aZPo-!I4?1{)??7>Zh7r^WVN?x#@8&7giTmX=T>= zrAv-Z-81=6e4~D^?VslKEonQx>;M0xFKbZy>+<|}?DuS*8TP+CH7llzW$_i|`dicX zGBPwN++A3D)#2&#Iq~1LSxY}TX-!~Z&|a{@^w*Zle(^H*864bySWEaHd#Yx>^W>vU z|N38#X0gX-OI}*=Zp%L2>`YZn04i{ zI`C}!mNms5%8mxy^-KP&KEFQVhVGPSMJHcLo@_Z0GbuazN0{Je`>)pfO8I`Rxh`yS z;Qi^JviHuFe)2e=C;yVyAY?Mb0fD}q%|XA@oRI@>gF#TlG0X-_J4}K6m)mZyAx;oSuAbd+icvwZSwQa zPwvDXmnrt~XA-HL!Q#kRvP!7u*s??G7#v*Elq>El^UZy;XsaN@0%5Jhjt30tp8_LJ z>@X_j3gB${bbT$;$5jm<=YAL-`aeI1itcqPzXH$pLBs{Q$QE{Q3%Ri-p%q-}+$t?Gw;pjwn zxtoj*PZ$50%e49O@|-=vqFc7i+-=9iz!lPX;?C~KZ!!!!a+R z+hZAq1BVaW@&@#VG_t31Ezk)LSn+Xoi991irT^Twd#*Bg)q4HaW_YmkeC@luK)d@) zj8bQgBu;v^{P^l+#<$%S8Rngp5K3Lp7!#{@;f^JDIq+1rz<&Y5jPe5|Ckiphn;PXTstMFZJ)AuDcp>1tGC@Te1s2;9!VkkGPPe!-Vk{hGv&U)R^~{l84_QE`()#rK2!bp^|t zyVf?(+~y{I+Ry*;iLSZQ)s?nupZP5gD;K>I*;aD#?%U5b*4H!IYi2Snj>>%_^lu@5 z?Fz<*$I=h7tcBklU^ZZ4*rk}e{ZF=a26yi67l*p7_R1_~;a_YkEcE9&W6-zCEq!wT zW^yz3Ou2MQW_I84e}A6a@2|K#``(qq=~~i!c0mVk+3ySd@`2~PVf+V)zkbZ_4bSEr z*E}*cdv4rDnTy*pK89L4$#Oh-C!6z`J?ff7(KmP2`R#nF{i+NPtd5CuUES$)GxNcY zSsWYAY<|`d@^kXr@-=P@3a8~xDrYV`$b7#dOVuPmeuvJTBWZ`7+h%-akO=b1U)9zg z=lFcnXB|ef^Ir9pK8ssli%!To$u0F`uENqbhA&({=Os+p_EOXD@6p;uKdGgcjCd2@ z?f$&(f%?H?OS>`k)|QL?saI6QPkHcjG4-T>nR10w zk!jf;mblKY&3jL-iTU4N|D#>+M2CA=V&+WkQ%lb{#mtzVoxAU)Z~m?wzwf@^w&U>J zcUM}YVqYag#IXn)v9I6zZ<{eHGd!5H>dUtG zT+6?>Sd{fGz3mWQ=gF#m|FvfDKa1~fmUhZ^>ywk_ZV^8HsYTfD#cJgrYg?x{+<*Rh z#^tb2%yM5>xR)L{BhlBxct81#QGDy`iX|J?Wm`Nx!mxmPK)CO?}2L<0tB!9 zoP4sWXML`h0;lYX?h7Z_?SCB9Tdn!~+xGo`ADM06d3ICom8bDrKV|=3S94)%b;KdF zew%ffC$E26b$szNi9q?cVjn*5>x#BLGDC4YulR-Zm(d3+cm2-PHoAJY?TgH3z3*3S zPcg2`3|V#giw{SMWb!=spNHB*kKdo$*r{A4Nr zyYPUJq410q9t;yaOG+1c)&x##o~*ZO&4uSLTg3cDFKF|wVah3D|GdsyP9xaBK&fC_ zxMY`|S4ynI6z|`Pak33t#DW_$B}4ezm@cKKR@DE_wJpB3xOPGA`-==m3-Z~oZJ zF6Xs9tL!y%6CXpswDYfCmHW*tI;GjY|L^VnZx`HrV)d)?#lm*IcLnX%Iw#ss1QbNg zIH&s3Z|1H;6TQFWPH}xNv$`_!Q}C-9TK;p@n=Ev*Uo2z4F*Sqf6$`^v?WG&jIwsn2 z2E5t6T4dAvEvGlMbRIbq-y8LHp`3eNu;15$p!IQCj+2uQf7dwPWA=7bWOma z_u_TV+&%r96y_Xxxc$MAIw|2Zb``o)gS6IW9SmXE;M?RQp7Y#;@tO4$_n6>1-o5|;On#zi2w`_O4W0}vLZL#cIXk3B$wj~E;{3G;#`z-k2 zXZQ2T)4aqz?_1V+De6Z2JAU`{Cy#~(t~;AHztegld|+jWRlctx%c&cSK0XaITO$=2 zuu|Zu^WBA2ydoby?JG`{{yY2Xe7T0xq6`7^@AtOeyyeSxz7u+wNw&x_f|d_HSEcQ@?_ITE$-tHHJ}6{o?OD`G ztz6;1SInh0Rc*L@d!ph)nfjM&-H&bxIrCx$3&VwZWlJuV_Fd9*Z2xq8LhGr$pZNcl zZq_KBd_aqFT5j0>K=H?EJDSqBet4^WU+wS9hwIsL{h7`PFtC11Vqyqj7ER0zH5cm@ zc$;B*LS)zWqDcolloa2Ex5magSnm9}zm37A>0}3&!L7**&PvN#A1?9RvUGvLN?l1e zHIscQGVQO8oTlkJYYI%dnAoLNV8+OB*XGD}PS!cq?{>a^ax;mK;Z0z`^!S+nZRQbo zp6Zpq?1*2s+eAU(dTjdRN&Ih?+bnwUqAS+bIiyy^81-yF@3`#fu&gyw=` zp^)v<51jqz;BfbaoB6Aq4CZ?t@=kXOZB_PP&&- zJSs3^-yB_q+K`rAW^=i(p8oVWt??Z9-oNce{rGri{@76F(FkP+uz}w8(=_m7qJG*2f z=lzV`wU?3c1p6oEEqzlrnyS2Vv#CmXz31YBDg3LP)_iV$zI5lq=)JIkDecYA?xDpjrJ&^xt#I>4LBRy_efj#$WKXZ`V}054+@8 zPH(W6x_dM3c{69aPd@5U?#tP@KiXe?cJ5B8(1w))VN-sEBz$U3=-Kz|cT~Sdh467L2VsU)0V}-q zPiZVsI9r(N#9is{R&J!ZL5oAMWn{*izrWLtbh1Avum4{D+s)$U^i>B+ zQ<)g_e)g}Gm3o+ND{NWUm$)lIzx<|{_uPhF1*=Mz#y2~5PI9}RS^6-n^2+nt#U~G5 zx2yQL{{OG_-Jn)Q?O`3=^IH0oreD78V0-27mu)7Wj+yWK*i^>MFpaC;>&=vJA7(G? zE74y4V2j^W|Cr}<|E}9||5Qn8TtIunai4;x6aOT7ICSS-(XX6Re#XU}O-Qf$b@csP z!m{p_oS}6ORFmrj*gP*RygJ8H^JQi6ov%F3hr9K6Rveuiz`HM`YS)9;HAQFs`n_LS z?E35GeoKb+GS4i3rEvsGaU8lNu_WjAvWM=LT2JpptbcX>ihh&ysYSI+0?EI(ocwil zp;plgx7sTHH}e@Lep{aR?YkL2%WsAy4VMmWb-1pi_Q-?nq1}oTeOLL?=fo|Ua%k=* zA%+lde^o=N@9%dXN@e&`k($GasP z_>I=|#NJkJ^0u;;Tgf6RtoFIx{?Eg_zu)TKsWK?o%X+u)Rtx-_BVF)%8pD&e0MjD@ z>X+V`GAOjFzPFslz!39z*ZMGqqbd=TzePP>*&saO06&M>v`WUV5DhKimv3jJ$nQ9| z#F0^m&EbOO$sA`^2F?Qa11q*&F8sdh)cpKYVhUmR#J4OdSg!N?YUOsBZ=V-W%h_hm zkPxoT|Ld&?gTv`}b#wT(A7(TWF|EJ~aAteX<8Bys-kw{6?sN~iCfI8$z4P2BkvpO1VDT&Ker*!}SL zO6hMYmFt)c+TJA^YIW;

u{g?>uein)apJ-=5$0!B^rPv)F|`e!{u!rdR%<)%`rj#|H3|GBe#b<>x5 z$K?0uGd!66`UCfSBeyD-jKypLx$8gqST0yNm7$@0$2?1=J=eeI&73A$VXP!P2G!|KxOy6+emt}>nYw(L>qrjUP0JPR0Woa7iz#=ZNu{I%Zg z_~UaoUi2;7ef#b@ecmJ73%D=;G$=|<-?=hkjq}m>ds&#GN}>d+&aFDIh_5w(NowN1 zsr(t%scadyJ~6zx$(|5y>6%w=U1(@OeWqU|GsB;I@BiMr#QeZ`>wQs%3wcu}F)X+g zwc(9Sz|8ZE3G+1XJEVq2A{pFUV)&=GSrupxFfALb6*m7o7e1-q|X>nhq7KND^ zgjHxSR3aot1zF-mW^}0PHnohX+0CSoyYgB z(>fU%eywyry>yqt979I`X|0*lZ>e|=yLJSV+!pE(4XnVGsvYj@T{JiG# zUZw`Ug4=OIAJWnmpVutVmD7o3P-IVADPY!UacT+Qu?K#+l{(k#r>(aPdg-~T?zZ6qqIUJ4v^!75?=6&Tbc;GuZ1Pa@h0~e&N9-MCY~n;;oZxkh5#%Li6` z4&9j*ag6!uCL7Uh2|A+or5C@)ur9dhF1c>i=}%YmZ|-~5C_Y7USK*(`=FiRn5xh$4 zme)P}$)&N$cK5$W`u~!i?wGL3U`vy$g-^zXjoDJG9j@6vVhCfMJ8e=}6_=%GE06yo z_V+tX_^&9fy0Ytm-I21Sz~z%CeyR!Yj#ay|C|>bI3x}$~dn*B(=LxB6JQ>%0TF0f! ze&Bmf^LZ|bH{Z>U+NOTam!5xemfO#VtUq3~+g~zE-?>4&nlo2ltVUF*fuTI`b?z&% zhpOGPWvezHoyc!jRM>v_{e~SM7ESwe(}^WwmL+3k(ze~4&+_J)D>S()T`XUFx;MVc z_VT@_Osi|cQcv4X4lLc<>m+nj?a|)#bzfKS7FfSUiu1(j?K@PYpZ(Zbc3bn~i~E1h z?$c`e7iafq->2+p*+I*gbbnT7{%vhtw`e;L>lCJidcvo6I{y8@|2{)A_UVD%{kiyqn?%ysX5-}gN?`r4d7R$9*ISGIqgV9=fZWL5aiSC4kzzkTb}&c6923vzDF0U9ZvDUq9iC^cuyy-3*R({cPdU}_OVU2&3ga5=i9XtJwy%PLj_vJuo zKev3z&vN7a8cmsuhCAd1zX3;qO`~Lqr-EZaF_pN>N zefHIvOk0faOkrM7w0`;2r3>P@4x9`QU|s)RGo0=E-)pgpd?yGh$9_-TH0j6FP3wIP z&y{6-_A1=+@ZR^G<>%RV9OTWr@q2nr%vulI7-a^7tmTupRC$DCggR<|3H_(^=N)gx zf;R`08tShxG}xs{Ebe=`l$D{!GOuuNr4&c(3t#CwDrX-E_Z_c0svUQ+(P8O#HHHI! z+&{_}9ucgSejsw;YEww(?6djOrn44!e=UfJn|t2dA)=@vU|QXSjZyb@?Od?%h?@QT z`v1SHBbMaJZR2FfhzS%s)i%|sLD}pNlDi^<5|t7`AdOO@~t<+f!%GHy$8b`4!`HwdEq(FL(6k9>)*Dg?U}tW;kKQTgm%M2 z$zGP!Mg`YdTrOYVgv?#KJbJ_8oVUlWt1&EaJ@371|JJHYv6EdUdxpL<+U~K_C^yZQ zONfPGjjJz{g+OPYPg_CJ(sqV^#_N^y4tjDY-EPS{!*I!W`z*1nD5j`CQ!?ilDXA2P zF-$lgxj$|apUN@`yC$2d&tKH9+o^MD$1m3BbMO0c*`$8F*k4mp80X!yJEr%c_@nec zGol$fnWJNVw%^@a=Xu-k!-cYfbBk{a?Uc^F&AdqY-b$Oj94n8kHoBp*X2*O_eZQEs zt+@$HZR1(3vgZhvy_tL=k3$8Th@9p~g+FK_{7y;Y!(4nHh@@ z-}w{p^EKD?U+xa?uJaY2+9hE=iNTWRg*$6b@cVt|7#H}kUOHhN%-C@L{KwB3J*EzK z6a#M>JThgmo1HSZ^{tIUo&&dtIu0==l)kWSRG)>vhvO9 z=#}1!Eg1q{H|)Qp<-@w~e0rt^NX}5{JhZibdwI} znp5YDLKj_fuGH>dlISY=OmM}KDU3DJ{^mE&u^jUI{&IcWnXHKIrzUeTNT~0*dBwHb zO>E~emC{@C$6J1FIk3{Z_VDH@nU~~>&A#&gT`l+F&F(K#?AJCI?VYwq+y0_B+6cn7U~#<1D;Up(W1)Y~olb}amM`|qo_yEg3hye;T^!Hg^X#=R{9o91avxE5K! zb(c$RxAeB72N}~pv|qFLEDX65jk-y*Xuzc^%Rc%t|X}>rB!hyMGE-|f6 z{`eVZM;NYUP zTD|h8Ez`qOTrHU_PA{{c)8H8=U}^ZF_tRE8^XqD&^ThP#Ox9k1%M)Sm!gK3B6 z6kXV1b4pNPx+258mx)a;ZxrmAAt^k)d_{KwL$QM^ukEWps}w?9ZN-@y^wh3h^a~S~ zytGLFmHqR%4hxwWDud<;GwjfBJbp|1(M1p0x6PA3+aKnx@~pW2A%oSSXXCFZgK5@< zY8(sa#h$Oe_c^SH!Dmymrc1&iIjyM-oo_U*JdqY%lvjN!u=BFQl)apai+1dZXBTOj zX~|Xm!B6eD!vPVKKl)rwGmQ&4_;f4Srx$7Xx8~P}#MNczN^ZWWnrt1kK-)zq@#;y_ zqMfQ-@8cL^jCWl3{4{%w#r&5IDOL|$OjZai)_ZwgDnp3*{`Yy`&7N-Ddeg=J?dmxv z!fzjE5pF2x-H~h2wHT7-dQsLZPXSlZKe^=PjUhVPpRQTRgkMzp-o_@sm zz5c+XsN8a!BIRqGHY`qki*qkkO?__s@#4;q%uPJ48>iPZCtJpA#bygVsNYuhN5__7 zapAJ~V{TvXaeR1H@lJ%{$2^7j4T+P)J~J)-vT6F>HTi$FCFE0U)%QMCoOitX$h`mM zdmhXF{&RW4$>(#Yb0%E&3XVH?{mR-;!D*@0ul8&|GjERd+0`Kernl=^v?}_G40AU8 z`Ty?yzr5DHTK#=b0{1cS1}MytJ=ExNGn{vk)aP}c8K>BPH`#<$E-$}cwcGLXf!_9> z)M^du)BcNlUSFB$Sz>x};>VM7)}E>tH8>zpN+8m#25 zDmOKiudUzp!T8CFb7koc^MozJ`Nj87uG<~=_+Sfl#guF{vi4|d-B_JOZp z?YkT56%TA34jhjPQt)1Q&i4JCwJg(k85Ugn|0!pi%R2YPs@{uEFr>|#!&DR=9I#FI z_<_#U%CF_26E28EUEaT!k-<~`_Qi?0i$ysbBbt49L`$~*Sk1t|@a0CHcV5cLGn424 zd9si94P&@n1_#3yo{(Fd$A10rkxpL85z2E%nvr3iKeza-8^?2Vb5mm$Yp(Ut_+81& z@Jsc?HBn9e6**e|&t+Ep34f_M!T-DFW9|v+@0l46yccv>U-Rn60qGvrYyb2A9Lq2H z_wLZPqmN&Q?c!vZbpPjkGtFR`?>YMK`!>CMSo!^^hxU0p2mMn^eKq~v7#Lp9dT#fj zk-vmL!dL5$Cj-NBg@51j|CibO7Jpg!D@m4N!T(dqy|$^Vx0IgQZIj`kWj`R=RE56THweD)!w8gcH|Aicwp5U%9Q*M$-gfh2JzR35AuzPZi z8Vn9~3*_5(Gt|6V#XIlzbW4VajH&;BzMY@EgO4NRS3VQNr>(_7-0Vjkp4lrnG&{aF zx*c)*^^JvhA|9VR7%^q#>$2c8^LCXSu43EEp7heu_vb{hwE6Luw_PtTxg)jNcK4a3 zPIH(U82**-|9#i?UHtRkY77&^>`IN#f9!g|ctK)S@-|_H1*dPVEq%FuQ@rZ2?VF-i z!+ABn_A)rg9?5^<`};a0!@Nc|&-Nv?Ul}gA-AdV=6Yg`S=LIH zpH7y~n(%v<0E17Wl25;)X`{x52iDUUR>ZRE&q^}TIR16bwy8d0$zGC|Jf`$}N0raX z)4sLfwWg%ovVaGff-1b(Jy|LYZ`r@!`QqsKVA3R)eyxs>J$=Gk{=N#|e@pnWN8hPm zyIVKrE}ju8Z~5is`il+cRdX%*b~3te+xjWxWc=GKUB_asz#f(vx##Tq9Q@8(XS`Lo z((t=hU5JjQ-5py>+h0#H#!P&#zZvxS9*PB z+7iRCy>gp9*QAgeYFanTCm))_Z?l_^p`xHit~q2yL|2b{-7|&**|)qp1ZS*cXqd~e zuv?mOnqJ zE8m{Kzbl8|`pt%Ue~xp`KDEuxUh1rE?}l^wQ~lOew@=?1Gqt$Q`QyH;p*mUyx;3xf z9I83BdgA=u?hA8%7&9@XRafA7zclfw9pg~4L^hIR7)e;n7(t9>1<|1|dQinVQ9 zR&~$&^`idRnoyrFclUmcEnEIC;NjJe>-F9Ug0k?Pf^&u|<=QM65?-AA`|suUhY8Pi zEM!>6%wb%<;GFtig)>WcX*u6qkP|pPpsh{k`la7*>_p!scve?Tvy-xWUfVlys=$Hn z_&<;CnoOHrvVu#4t61BIZ8e{V`^Jqw+nF4`tbMSUQL_Dd?4bk8+a1ybMVll(C+}!1 zQ<$L59MylQ_22_b-O7t5=XWkEUfT4jxv0o8Q7i7(yMrR%g3}gA2up3Q=g?+r;5@G| zbHTyScOT_<88~)I?zmH)%&FTxk^R84)lYb4ZcyY>Xs~~$S#hnBL8Ri!;@LkJxt)*C zxOS=bUG@CBvIBMOIgQM$|E!*#Dh_4%SySsjPipG&0*}TyhmY0XZ=ZkTPfLo1&|wA} z?cZ`!<}|D=Jixnu>z`Nlw&&d9o{d&=BEneN4&oQf5wf8P{?Y|gTaq&^Be$~TApcRl^msWcg zr)GVh|3!A``AcTgc9fph70I1eZx{kh^NXK7!*nO4okY_yMwZ}TB-dku5lWE0~qVuKK_~cAW^t5c|6onZ+Lc zZP(0GFT3@I-Mbv{OmeS$TltRs4#nr3sjHXs%$49Wa;|7nb~ zOcn&KFcj@v>o6&Ea;5eypNFC9U158@EG459C+l6VxqnV7eGS6_MnOx)CRh>%TBFf+U+;P zlHoz|rFGv9-}hsizuK#iMI}Q#uAzUstq=o4rPA$PmxWe-p0w@uz0zB++S%nQUBU&{ zMM!eiuM1@ecp3P6`GE=YPyXxJXNLVYXJ?4}G- zLVsoZzC0;^-6-MZzkcfq|M`^L&o$-g2_?TqGbV+bb__U+3{eGI}mOp7AHRZOJ-`mn_03zOGx+rS>#Z^phEJYVmGA2%tHVScB&Gck<6vr0d68Fm43=OxfFX`zraZWg}Y@4;Mw4J%r zi%s_1`qDU*tzrKzJWGu))vp; z-v9aTJ=G%VfVR?5hqv#)FMspz@cWAPrxOo;ow;T|)4o8SVpm3A$@|K2GK_D185%zR zKH+Y+DP!K=cQ0?0h%v}9JUgM-E_3NTlftvzo`nYNyr)B14T7||A|Ky9!+m_IUHo*$ z^ObEi{Qn*vkQci5WN9haRwkxrH1&P?y~nun^_Tzq z$Zne@^zg;pRS~NMC)UI~FTZ~x=hkb7_p3IU{GOw5;PueRdLZH>4RR$bB-&`#R;Kx#I!_&B+=oPus0LzFKeEKjpt$U;jK` zU&qh*W0PLiRPCwD3RdwfxHPGA?i-^m8Eyg&&5|XrPCsp~ZQ2pD_G;$xtTS_d6-6Fd zCcyC4K$GK;WcMPwy6X}?tQLA3C&-011lU~{_+#YJ#Q}fVg>251r-AK#kYMpqaXA5)!#iOLd+YF zW%X?M4sqYKE>M0%m++g#Qr?Gam)Iz)k|u=9b+!YWMDYX2s#}){^dO@eg~%C zmcOjyzA>&A4>#NMNG80Dqh`88MFGQvL!rBvQf_{3Y~JAUWcBMs?qXS5ifjHYw|S~r zdwqZ4iG*{?(@HkpRd($Q@?dtTOwQPRYW}N(2cntQFLRyqFgQhRCunhMwUuqJ@c$(Y z4^Alezj2uUPqF)%6UWRMa~KXdpIRZ$I;ZpWg_Tti6ALAo4BFlH1>Us0etGhf8!8M1 zIx)U2>=CmJ_+Bk8m1}q+d9H#%g!6`s{O#v=t~-ghWE{!kVq7wD_C0P!hQ||Z4p!_~ z6C3Mw_uSHue|MJGINs5Ca`!vq1_oAr{jAzqJ`1`p@l|rPO;u^~Wtvs`vbO)p(_LQ! zw!J&DWyYBmK51e$60;xP&CxG?-m=*L=k6+z89qPlo~j;P)x9jLLd!sO@BYmACiUM7 zt{*N_6!@I{$6meW-uf>x3*Wk&-lzR{uEUzC&wM`ko1gxnl^dVGjrZR<)@b%wA+6Tx zcXs;Ocl6%hD=T+|Q7b&}^wSmp+jDMvd!$(DWP~}Iw4IBX>QypxvBBGv2wj!mv7$Ml z5tZ_)AAeonzwdqDvEPz>8)~aq>TKT5NU>v>_C7xXCD&H1u#BmyTCuxtxAsL1f6FM_W0qxe{g;0%UY9akV)B;)4x?K4 zN^aj6Ux(ULna`qZ-`UxIdO3H+J<(fX(|uRjPh;qiVF+~7(idIB73Z?}s4j!Yk!K3a z0#-BWB`+ztWy@M&{(6dG_HrY(H!YWw9&F#qI3>O9h1a#@nFo{^CUk65dcegnsZezt z&!(ju-*aBBo*?w*Lyc~{l!aiB;&O(W#gb9q@6=}SEoxOuIWhmow{o3*w}e=JPFPWT z^62z6CwhFD;-Wa2-ra8DD7?GYW&N{#w-}gCI8B%1GP4y`N|Jh_vgYl|KZctkf;%^= zOyUii5hDA+jVXJ5x)+xSLjmto{~ZnQ*==7qb}yFu_aSrop=l=8Z`<|m+6piHR9mHY z?QFj<)9!Ee@k|Uh4CYzwd!IaC&dRXu#V%GRqyD8#w_Yg4{m+@bQs7n1>cu7=kYJzvdmE?6*9ZeUkpl==IdHZJqaD zc)b>m_^`){uQl(5#o;TTvZ@*`p9m;V`JY|Anvv&zME>)wz6=K#7aDRITIn+cH2#i} zZMfKSMRoo=L&>J+uJ)#C({lp?cYRUhoGiBg_WxBiuUXbH90=ezuRqg%O3T~F`%aoE zeGl1pDS62PA%-5E=wC)m3|tL11Jr`s^T*}yKlmG6h&zfJ!v83I`U%vrFxS0QPQ+X4UcN9GxA z>75$RkZ@^^0z*FM>_vBe95a8lnzio6otv*ksX>J-~^nUkx<>)sza%DLWp;rxb~Z3jFUul!=+?opn7$3T3A z{KIwG_rCQs%z66MHZ{2P;PTd&pNkm|6tiyHUwTKg*(mbjC9}fl4d>a7dS08}Ps!7J zQhG|MzCHF|1mh&GuIHZ)EZ+I)(t#kikGa)TuAVYIZ~bw>;)y*MSEu#NN!M_fb*aA` z5X=`=d)T=08c*sQZ-xn$F<&D4x4bR4TvBm8vtkJJ06kT{how@RxZA`}vpi?r}0qSYC4TQ*8gjdCUx3V`X=^|MPuk zyWwbcw4vq`Ua$F~{0;IB-rJ`BcaPh!)3Ryz{JVPmxeH=n8_b`}%n+IWbwilL`mgI^ zyr$QD-N7MtW@V5($A%T*`Akm@%T^j^b#PCZsK`E5>;7Va2G3isofwoEmM@R-mXli= ztHxfI|9Hv;b$^bc1?=x%Z#27eu3R?$+c{4MWrZuNt}{RUaiO1u;nn@6b{5ZOB$qvB z=u_LHf6?QvwdRYI8tW6b>QhBkA9+q^6Wdi-u4{kFJNv$o#`JRIyhEn9rc19)=~>do zQY6awUa;JgA+h7&x6k|DI%>q0d~^-&sn!nM$iy{u*MSvj7cYr_*8VZS>@|~+;p@l% z#b+%o|1R_xy*bU{818EF{r7R*Fka!g7au)R5t@5bh-Kr3oN`u%*;8~+Hm;eSe*C~} z(}kC2?q*~>#5kSt=;m`(Ma#c$nw5UwLa)BJ&P3k0 zwEmp_z2tp=e68P3kd<5Ao_jau#hYs>++OpKgib3x^n7vhGV`g%QvF#EKl6NYVC4|F z7d11m|H-YxlAismZd7u`RX>)#f8%+U@2f|5rGnNJyK&Dbn(@59=83X6XqVCSq8t{V zO+6+GA={qq{Gi8hbnT2x?o+4sw6LgOm45bqmP$nOuXnxc^$LphY!AF*d|GDPYxp(b zt@!@C#s_>K-*G>h;yQ_`vP~uIm;2t8_Gf2qe*Y&dz3+hJ`JMW03_kM=>-JxNubAN1_3d-zy44N5hCgo4I9+teuX#4}g9NqQBB$u^`sI;5_w!$$_?&#l z?zGS>E~`|6Fg*Frntw({o#%mPQ>=*~a(z>-cc?8k^jUrPhgB&jgGpE{Ye2YauGhDa`Wa`}A9svQ**_t5orULL zr`bkF0&KlZeVlhnHE!{J-2eK|d%wC@%VwEGzVyEe^y|BZG@iw~_bsd7yPwx%T(r4jZQ56Evyyg|h6``K?<#F&VOV4& z=~ljlXQ@#UgGvrlUrGpj#W`k%+LFHk)9!Jz3cQVAXZWSnbVGEFTHsaB$z7!;Cq0@D zGcBr{(S5e)-u-E(cb2~Mb7r{a{aY`Gr(@BR0#U!qyB$yKsBf8Y&7X zOofijW>I+Gu`B-ew$p!)xZ7_l*;_jAZe!}Xog6L3a(81+Y|sDAoWc3$Jp%*B!;lF< zwlW{yE{$ZJP%?`-rdUp7opIiqpX;s5mtV8`sDqi~*KU%1h_>9V?b~So7!f z?_)8$v#UQbyy0b7;PXUwn$Ci+pjF)F+jiJRUEA9EKa+ox6hDV|RH^#e^Piq z_}yxA7Sp^ZZhITLUnQ<%P$+h~;;MPLO74%GjIJc$E&BYwL)+G$2u58Pzda5FI5Thwvd5KA-Kb$JB+KBV*pRoi*loxNZJf0AsyFrWPI8^^`+>wn*lUUYGLSRb1l z=enskyNhzWJ{AR6G);cVm+cw0Mtk4WwRtyLAIzKauB7Y16m^B>u>SLNmf9>=aAUe~ z@~rLM$sag=FWvv>#`Lenmovp5bPF8a#m~+X`_fBy_4cWypsm9nR~)xnrtTlQ!RY$F z`By%jH$408Z8rY_H3o;@cR4g#pU9lOrg=t7*)3IrV{f}q%Fk5|Q_bG+GVJ($_uamV z3xfQwnlAZPeqmX5-RO2u@4TIr222cXbDl9Y{Pk{Ddbz6b$ea{;?lNni$1A?o3NtwP z-CL}CGu1Edb=37J%jlzZeZOY^+5YDFl+68QC9rZZpC8^u526 zQ^jr_{m(925#YXx?_AO9J7xku1vgai-a6SaCHQXU)w@rt7dP9?@X+kp)xBDC_Eg4f zj+sW8@~5L&B(~a2?hxUK-LaLkdy)5gp7#4GKJz5Z^L7RM+va}!we7GJXn)4{{vwtC z3*SWt9AC_(a;vLK_iX>3e?Cj%o$ZRZEhjEH+?sFmrrNWAV$+JJ`M+XcR%bFY z{ASp})gZ&rXSeRl>HAC}=KQyp6qqqK`2KATkNMX2^!KOf`}e5-yO_2&H}bfLqSA(+ zk6o;{?RdLW`tqio7kB*(X_z0}Spn|WeS&b^-GZa;a)4DNH8Q<%P_R^JD0 znv&h{?3klgPpL^rob;l-x9`5&X7TIA;@@{Z_kW-6r8X_K@6_5avKNnU773}S^1o^r znRho}1yg3->N7vj&9K@(eO}wi%~7#`)UE}p{}2B;=U3~#s~=B)T*Pxb>0Xr7f+?Y= z-OW?_rn?!ZzU)0IP?B3;wbaCdb=9RbSNkn?DSl0zFQs1At~&hu4``tNx`>x0MyuHHErd^K9?om=`2DoT9qt_gAsf9PGy)3L&8=Jgh9 z_Bs0sbx%uk7Hqc5v}ZnRe4+cB%B?N@)8ZQ)|D8J-sV=eQGVfHe(`Eg{;&XJ7OKYyZ0Ra{Ead?N_4(zm~D?ob}+!%q@GXUvE1%BbenQ zN6eiUM~V(J&uX}RS8jQ~=X75N2bXy!lkE3>-hEZ%H8G-8$9LSxmYU8#Vp@org>z(IfH}3QuYN*k8b_* z_4=znmrr@AMzXHuYW%hJ z!_DXQU+!?sc#-;~GIjBnCUL{K7sh%2&)2>yp37HRc0%pe${P!Xi+`Le-&cG-I`O3X z{@A){HBq{scm9n1J(*4VbMKq#W9Qb+eV!uv^{JcV)cGX~%UAD{DmX|X8$+c`^Im}gd z?Dff*t^l9k&wcy9o`Hek zpGIrC-RGHiy}lVU?fI~?DO+9a#Xcs6Gix9B+waqMc_RFWGuNE)(!8hlZ=G=qUGsbS z{JXuk&GtCWoUtW_ap$3L%Q+dAY<6(4JT<3redIg#2aWcDoQ+nNJz0w`q zf1GGlPI?@D#C3kf^}U~}kEL3F|M#funXUYH% z@9Wy972_AUICjf=V`rJzS;?-_msM@WnN~0)WIIi2y+19??@QJ5-S@Uu#GkfvQ|O(R zdREg$G}AvUD~$2&-q&~E-HLhU{>AorwV1i^&Pd;rCp-@eG872u>{plKX}y@Rw{qL` z(*HZ$Ej2ofg+8oXb9>(oriS<1MWr=-H=T;~j{RAF#QOhK8;0G|4GYg|980%(EV-9| zHUq=?-9OLxTeB>f`s?I2C)R$E<5AMfSQwrgZM^tHdG-X(BYSQ>zZYxpRMt7KYO33z zvXFJ3tMphFD6Rc$FWMCs{OiQY4hA7n+e0&B*!|uuna?yY(E9pG_lnsY_@w_nSh^_o zS@zWlS2^C~FcnO_zq`G3R=*^Z!@Wd@jJ?%q4%aN1=A5cnQ(rE5N1C7E?|RS2ub=$n zXbAcF%vf@piTWC*OL9)R$N0aS&baKF9}zntAYAv#w;U!0&aRi`yo?9DUrpm%75AY@ ze9fGWbxxwHeG>}B-@HwgYTg}j`g-}~1cSzG4OeR+y~qDK1wPg870{|UUw+LvkkjRi z%y;4Mz2Rw>6jK+kku{iJ93l7C;pGhFfa?pT-d)(WPE79Udf^YE8y89hzN!&m+F~2{ zcZ!4iZ6@2S#`7gT3;@SpJpvsecoby-k;(GW+?+hu}_`q^R`&5KN`PK@-`c@ zOP1e(O>#}sjqQ= z%Ftl3w)gCW4clG_clKESeQ>a0nT-1BP42=A-gJLnq7_=-Z{zU#)w=WXw`3T$*`&oW zG0gk6Ww|b&^_vY_85%Y^HqPkXv-0n3krQfGpY5FHJf3sj?)MwJ^0k|zRx3+==BYV0 z$y{V%@j;^pdrdro9Q#FrcnwePt~)*X!pWW=Z<0+lCZu!JKIwX>eCoj&u4zxgQn#LD zcKE%nus8dQ;i7nzUmIUFKCSDC3=QCX5aic$EY-9B#)b}2@1HLhUg2c85tg}XkNY;G z=Tl0zaPF!wN?3k(it-ZngV~|)!Y%~;Tr1TQ`tK0?D}COhZ~Cvxn=R0ocW5y z;p#m}zas4(=NYX^*q(PM__)%~I0m!yjH)uWx8^bXF74-H2;vA1RE-dt@>?(Q!ml;F z4<$u6oUF3ZKDgzdt3xRRtCAeklTEWMTi&|a7)|hT-@nTGr042Q?K_S3op^t-Wg=(n z;yEm9Bi9r&c=0o=unip(tM!Wt*FMs4QlhT*#f}3WGWUQ@=XKr9K zw|<-XKY0GHEBiEkp3b~gC$g!yQuwUCEXB$1?s>`PQ-`wn z@3;H!drg|YrNmFOn`J@dJ&yxL_J^lwb(g%nE->}WCL8l}j5-XfD#eeUuN1AgbLV*6 z&OMwAA7uV?$T)~?y3>Ee-v8B_$A*)x7bjnv`gX}3_sBn-0zMh<-sZiZA?)y5m_cLt zPQU7hYvtY__sG_sa)v)3en!T*YOSqYlYYeh4z&%v$F32{mmK(XdsT1#VfIM*_t|?c zvEOeOd$p)$pOpDa-vxi9ls?pH{r$8575A~ZW*HWHP zjr$s_rHmi$IxQK~6wc_-)DX4reAkv29)4H6E`$_B#akZSJ1yh-kM7cw4ay7;HrMSg z-|mj{Z06iRFyXS-IRnhZy;DZnJGx?Ebj%;--_OUT)p1jlQWJeNxNNP`zP( z<*}LF+xL9c?ar^=tXn^)jQ!4%12;G?Y!J#z+ruC!cKge}eQXS0vMZ$$qLU)+Z*TL; zWnkFH&LE)d&+ov>^snvt*OuH@_m}#b~-!T8X z>e{4D&f2~=r^~f1k-r|ScdB~IVw=Q&+zdOmX|}9L5S+6WGj^?F+@|@& z$&S5v>f(tvC;eVmzBhZjLGJ5i-(Oc;G`}Cnxqh;Lh2eCglu3-r3=1}yHtwFk=H>yD zux*xpRhNU}HU8HwJH>t5K3(wozm*!A`78`EmJ8;se!MU|T7aQHbyH2~g{`r#tPeYW z{j!gXp{AZCXyI;?&GBtFpMUwhO`t(ITKuP)c(d3}mKMg(i;bSn65Ao{vT#1vb(Os` z8vn|7w(1EdYY9bMw{1B&!~W~DYX_o!DtQQVxGvi@=b013l=i3lw^rY|HuGl9rAy)q zmnsNWSUjwCYdKkJ9J2bt!|!*D>`$*{P-r~2V$WQrhJBkuHeV?0mM^)`$h$CpN5%Ku z_qSTC#iw6=oHOw*u<;el$4j??##{q=tyU6?I*t2L5!^Wts)kYHT@lS}TxiwPH_1)u1guzBnMhU(Aw5pnz8cg6`jUY`5pD3v24 z7VM#06hII_tSwJ8-q!p{KX*>@!(?Ra;6d^fKS~kKqi~3?*UZUCn9^ zD_?)(zp-ET{f$REY?e#k`omZkyg$$CU-@|!TZSDgOY%AGLb|pb{1L`$erD%}ONSc# zY^F1G{%1|y;w?TaY)$EDgQ#P(1q$a@6zdsFf_8Mjj=ZU}IN4Hu_WuW>3di;{S)^@x zS=)A*A#zs9^xb!sKA&80N_yQbm;bL>=3Sfq<<61~?o7(9GTMwC`-Sq&K5E_f%)@0J+rrcfia#^3O z$IfHbHLJyI?uVva2o&GUyER_qMHalcr<|U`kGOOnt-x98R_P_VxoKvpFIhxJCt{y#E{b^Qd z%B8xw@;9g5>w9kh|EDYi2a|`?34Ufp=8S{S-*;tbF)S$Fm7DOTD?rADy*u5v&BL5u zc46{Mri*_sZ9hKO?4e+{D1Nc8=Tg2F`Sw5OmT{0 z=gb|4FE>wn9L_3J!*G7V7x`Zo+P}Tc3;owO+2(Nm|L}!{YokA3=4+1eUpkZPM&;Uo zvqf{Ko3czeA0U2e(qCnZI~^_|({;~B&Q=z;E4nDF_i-5`gGY_b$M+{rc(;Z;@82{# zy@nf5r52=|z(DVe!h zFRydneQE2*?Sd?uQq=; zwe$Jh-4#!@<8Q`p3T+5yxS(-8I>qwC70}|Cqqgra-Z?j?#G=u3_TJn%HuV+3>dSx6 zwqa0-u6v>^AGha4tA3W4@Ncs<^899YZFOpl*XA;;ew50`FsFV}z*!mnXQe;5m09jp zfo5&L|GEBa`u9m}Q{|!_Mf`6`exN;dcXG&7h3j)~XWmIT_~?@SR_paEd3HXt*}l%I zUyGq3{r|7^|98E2n%0=CR;I}}{EyzxZwo^aa-Tl&jc81x=KiFE2&*WukS^7fJ49&Uz!V;^+w zxf!zh!e5F0-hYmHgYUZQ0uHPUQBMSVj(whP`1MuLYB`1(0n-KMt~}rU?h8YJ*^#BP z?<&+MJ(XfPzjxAHgDVTUb(|U61T=z|&VKz(cEh`CnLgZyO#UA<3v55`?3Hrs?p>FS zuctOolw%0jUoofRm<;P(UrisD2)&yN|8g=cNNh`4)wHT>8J9=q%+&%yXSw*?7#tWE z2EFi{o2xwc``-7p-QV}U-)mdBPH*;|CyY1pqu5+$RxoY2#b^KLgWeAPT^|<7$(K%A zZaT@tTmOJszvI=-p$bxAjtcu<`sPP{T0N~t?4g|FJ}!oUA8(fbe{tMq*Y1S+YjO;X z2e{)u9C|4Cv()CB7{h_%oD5p^Zv~F)Fa|H(U)=sS-{0b4%hAeQ<5et=&ONkraP8=; zm1LN#;nLgjB=)((u8y6@W*oZw&iKIAiS3G0R~~DA8>aZ%hxM8$14B{FJNEpw!T*#Q z9Hd`LH?-IC-FR_)4@=64WucC<_p~rI&?&br|+S2e9We~VmqeotUX)n z!*Z$Za|OSpgY*Xxjd*Q-9o|i0%ijvJWW14VTJdLPx%e!@?-S)Om>B=N?9h_FBmbU* z?0v2O7ebo?_zO>cdv)~M4pYrZWkLG;C)X7-I6SsG82R)*S3|WdXnRZ9a;KFH3!>hb z+~8Z;5$qVaqA-7I{H_zPT9(&L*VCwBjbQYsqLL%Osw1NS{}U#JrN%IHjy%#jo;wkt-fXSW;OINlH;o-5(|Ah2iM<$5cz z2v=2ujq6VyiL$xk&f#)J+exm{MQEzkG245$_Q-DO++n<$d0+X%?^WfV3vO>&Ul;x+ z)os#?ue106oZWrTH9ah@K@V}0Eru4VZ@ynMi=-nw7oqlfq#xwSf z$Nui=5X+1F^ikw;Y*dZ#ulghTHc5rct?y=jlz(dRV*WOEhFzOugc%GT?ayuC3D0@l zEWJ%wI+ArlJ7e#QmViihhHqj5A*?QIrW>ml{4M_A-}iQf{k)q8_cY7@WOhm7JnS9H zA$4r=n!unK(|{XNQsrg`-c2eKn4);;mVfNw(1YPpNvv^yUxmNt5<2>S*7ZGUPbX^0 zzy5tndx|IfN!`M4$ISN?vfHdF@pzy&BR+hYVqCA#t@VLN_FUWGCBFHyA1kYDCHr}G zhQ`W6&*Dz-Ox1iZ;UCWUEU)3)Wi#$M6I-SHqwYT8y6FEa?)Yjc7s=)3r|(aV?n$kU zd%tPVvU7$@d?ahv3rsiOwr}zJ3cc`yXDd_g?hUP6_1&?bO_BNCOUDJWQVW_`D|Mdt zm28e<2;eetNx8zcr_3M>bD-MPw#S9Gm45f3fPg+-CTU^HA zl#qSsL0NSD4nJ0gEwZO)&i#60k4wRf&ERCn^0WIH8~c#6tK{W* zMg|ds`PSQ#oBA`d&-3s3l;wBUUz$Oo=H%ImgNFJq-mdslmC49Z+@4!zmmD2nLwz@xbg7;n5Ql7%tu;*=V{_W?LQ`18gul%%RVn}BkPqiDIDX^H^Mh}DdabuGZ!bB%+{pJtEecY4xfsbL9k;}US$x$zNZFqWg*Z2LOv!rd8-;pfy3RTb8 zb20zb&JT;YtrafU`t4rL>St|~qWfT>?bX|pxJ-K$PKh#n=+VA-rFP4Dsfc0*2j&UC zu7)>R-CC6ww7;motStZYl-1_5%sCmRy#J>Eb-~H2-V7IJ6qIva-`S~FtRpC8_+i-- z$1N)zUNTI*kfk82+@50?p zOnRA-xAWgdzp8s~EuJ%}^=}<3!v*1IN4%0s87vvqn5_giJ@DfHb?!&l`Kx_Wm*s*^ zIA~9sxA$+Zy52d9&pmcx6=G+8NAx|Na^(CbM|%$En2r8+O*ICGosvc&4!6Z#&MwZD{hOh$?bB!b?Z&>1 z7q|ViQDr|rbzvfF|ITaj-|f35R9D%%do^WGZS#IAwfp;976ujH-*@uo2_^s2Qb?Js z*lc(G_8pVuXR6E@8TL5ZF|Yj^V152K-^ScLCJ{Ho%2d0rub29ESE$TiI{9A6Q;qwd z`qV?7$#}m%FT)VpQfj(3>6={cX>_icLcroq4F&*R!p&yO$ds$9#& zpti$(?<3BNJCEhIgAT;qdS{7qLD~+bpQkx*>u&W-Tz@sq*!*GTixVn8kEs8v`}l49 z{=Mr<4*bn;dM?B8BC+F}Uen9K{;DgFw(%bL6VAqPVg9}aKW=ggD17+L!jL|%GVT1{ z2KJab>vS896{V4j1zs{se%KRTJ}pFY3Hyd`TdNo({Cg#*#%NvI%gXS4PO;zps}t%L zZON{kZNsolT%Tcg<|bCtT35Z`xP9}Dbf&s|i`>3-p3hzmCRJyKtIQLg>N+!2FsP+2 z6Yu+Obs=lhvB%d|e-B=4bUT%!VMF&r&V65xak6Rs)%xJSzM*E4k;zk~uh|zY*L`uf z^osq!_trE_>%DQ`-Du(Etg9xZro~2;1}!=8xIX#7UVC1KC0|dQ?LTtk-mNm@ z$0CkuwqY+%R4vxwTYS=Av>~EsPEdP5I~!Bb)IA&BPDd=d&&F^lPOgeWYm4T#(cnzp@xBB4y%LSfnDeKePhr_I9aQ>=EJJ+y{oDxT>2DwUG9g2rNfPm z+R?7TST+^v3^{1>;U8>Zd-OAt-N|?6wpMLet)4wk6J5qHr@Wzxa zQO}u6FXajSv$%D`C3EsumJ^op*DkK#btcqpO+&)FOaDw}OqpM$vpT0?f8ebeiQryI z#)iTQQGwcvo5Ef$JsA4DnQi)?iMu+sG51_yeQ9+5qkruppNEl8ZiTKdy87q@h z*Ml`0pI?#e>77=n&w5iRBxHenZ?aS%U*OnhL*9>%hY<%bZkKR(tjw_3I$4yyfbRp=N@&WbfdlfDO z7JV@{cA31;U3ia?vamkmflq&zHDpinn0w{xc5RVgM>M8hcAH|x^zO%F|A?9$I~R8@ zEcOIxv zk!kHm8_JhHl)Cf3!eCwb-PgKx7PjBxc^Uo`cqQ39nc)1ZvyfqJ>HJz=28M18!)Gt{ zZ(F)VXTQpqNpV|B-!{sBaJg8Qah8ig^tT6Nz_ic$ha0a2@;3Q0DA-P0Ty|)(%G$zf zES^hc(sRs%tmy7}teBzUXJ|RgmAC$L zPZ%>cuq|neOS}1eQ@Zn_Q@76~dP%PR^PcV2l)vjgh1h>Qb3$l6Tk5)`f<0^PGiMoH zEnNS2@%R31O8M?`1-EB@I<+rye(kE{>6^Cq&8=N4xB1HctB*JHGF;&c;cr;}$@9ss ztcK^>PJ)F`7=G=S{@Af@_31lzcU06#>d(L9vupaB1*gOWm=tAiurMf@9dvg+z*A!v ze{o6S6c+u=sjn0-?A`2>G>h+u2iszQ*%03@c?E^ZrBiNP*rGA#{*J3zLes7H=Gxb! zpWZa@GlNI{z2BY;2QFPT(-b&ee3DP$!R-4#(r!opU&}qMB=*v@@NX;&C#h`XWC+kp zKE_unv(0(Z^iEIZ*BSBE3_U;PzrT7cCZC_!d;0AytDS}X`swQzl=er=I?>nmzV7?(>51O23{(uwpKZ#$%}WynZtKrSrDlL2Y3S3IW%1*Iv{}Skd4!D?;tl zwHC|FRpFiQcYT)s8_UixMfcT|SE`%p*8b<(wd$WtZ|=73OzZMA{Ni^0iT^e0!-@Qi zsb2(hbY9xa&X^*$|I4Cy*@iHFhL-S^!IC}C5+WR{7_^)gf4q9ssW~P(-ulh8{#{Qd zyJuR=J@Y9`Y%kX##)Y|CX8yWkZsW`lu}t9Xw+$Cv>O9mu83JPcc68QEFJe*j_CL8L zrsH+YVcu)EZ-_8`F-}pK+?N!xXZh>--)6N;Q4|;5AGXdXnDM3>1A|j}6Z4Fed8c+9 zb6m+TrNipV$dK|+{sO~|`bnO5Cha(vf2eNilwvl zOgi_?l;Oth)CLBIW1lWK^S@PW@Re(j`=UVwD&r-ESH(l+^cm|H>wc|B>&aar>-m_AA&X-{)fD$%zOjqlYh?FoHyEDL;y6%! zH2ulmhriUCcl6Eoyt3!?|5x5$JFQ%Py|H>WBl(vd!#pL^B1=_;3yYRA84I7?blr9C zMwwHK1x*}|OyatmTE^3(S0gI)bf&n2tOj#T+sjXhMmyUkz22wHC~=@?=atmjQl?LK z&zUDg>T8_*rsX1ZP`&n5L#5H2ha9c_JOP5`sTHTn#bOxQ@ zv&{aBBf|kBl~V#dlbAR71;p=b)vvqosB?$?NzNAyi`R-D``qv}$d+Mt%XQm#h5dPN z89zOl{ARXO@WRb2_q_cc9{VTaR)hJmr@Hxdrym)o&)Ilq)vx2tJ#S+#N4}gR8M-sQ0L^%8@+Ie z{1y`s7P4@D?#fTP)6ebvV?2MQ*aD_4pXQV*EM|DC<#g_h!pezndpiABf0)8No1ww5 z_|D%sSrNr1UnHXb$LxNV5m3BkTC!B!wVloNCKr};o|>`CL~8ZyU8mfCU0?e)^QO@! z*O|x5eP1OfYuw_PTRHvHoY$JC->mNvwRNlu^7UEwW&Nk~RvPCE@|i5wtyj6~yUEb` znCEY=_fOX6bbndR7CSfmg0%q zE^EA1w=yymcnCyaGRo8OwcdU7^2`G<>}O*Cd9C&=oh`!tR^j)|t>;zVd?;MG0q@9huz*4h*`pGzl28IXjx^`Omn`J)ey?v2vytw)|gS`r` zuOh=s&hw{s*UZ1|7o#$*W6|T;_CFf-O-iXa!Yp^=V92@+KR&#akK1z9*7_Ew00RU6 z#!F1Bn=?fj9(PRjyYI10_|I}y+vDDgH!hG#`WN+IRG^=sVVd}%-UlS zq<^UsJ#lTN%o?M_bIArwQc)8wOxa<-{P)K7jPki zZyUpwz_73e&$*wp9?z7EKXrCaC(BAshMIT>qvZ^%n^=#iF%-;~EM76i+*3T&{%iI_ zt?!HiKRw^8&9mX%&b6&}`KiYtv#Q*`+~bfFW_U4k%m2l-IhTY(ZF%O3RT!xEyInO8 zZM>a#+SC8XC6C#Y{?(ZM+&!Od#igrfr?M=W5YkZM!FYQ6X`VSM%1vvT8BW<!Z{i z7d5C7s<5+V_;c>t35yu#h>vsi{=aHk$vls1_O8I7>1+%$f)y?aXWVR`^(CU!e^J7z zgr*n159gf@6LHh*(9C}FYD$`N;~Jr_wvTIi)>~_>>PhK=+YC+b>+-!fu70qwU`P5U z{%cE$Tk^xtez4zt*Y@Q{{}=A2yPw-9Jos|iFMiLLrTVc<%~L;Wt=7v>Pu-Ne?%mUx zI+h7H_g&-7{7`q`h? z^rTnT^WAuULq%YNu4I`fgMz|~qRo|uU+q&l_Qsu|VUxM$hF6RN4j1ml1SZVqU97oW zn_&gp8m`UN3``6W^Zu@{d03kfXnWu_LxbEDOV)RPd}F6S-npG&!Rh5MS;9(HQ#l-h ziADGSP6^>!v5FUWSMW?=PW!)e8mE+9a<#0=)J=I(B2CfP zPko8B(`LB#_VR?Lu%&Z-_Uc`WoLO(exqvaZl`TT~>r5#o54GEiDo<->YD)%u>v?SX zw#8iJL}dEht)*d=-Mzm9E7l7?uvy&wA@2LG@a+tq79uPi2fm9kERd;~RLm(*_rCso zwfOt`|C+%oIM3g-VMwS{Nj@&L;c#AM_q^#1k5cwMjC}O_QMZ1Kp5>%%H~*g#-e|(% z;1Fh+z$5VGwtt9tP1+P{v*X_$amHtI?F6#z!1_rqwo9%yZe#d&C>M(DA z^ej;+2F71qIu}1hnorx(U$@~rQ~SS=*R?E48vOH)7$15$G2%bFd`$s+z~aSm+PvF7 zz89%`xHIr?>Aw(G<4*<`#LgKeY`354dhY*TMh2A$OeMAoE2Da@*}FeK^K#=o76vJm zD%aIaMV$ucCH4Jh^)WD{Dsl@mtoa=9g7HKs>pa1L5T{<@x6IvGB1P_FtZpcqbpQVZSx8qu)-VN@C&ui3X>?e^xQLuWqUFIAiznw=M2ZzZd2n zTEPA3~e<%+Fl>#eczKV{%GEL-8* zJ3qPC%x9ZWz0lzMMClXXpXfjOvvZ=<)0^(U($38|aBG6})6AMxI=QQ>0;D*n{Wx~{ zu*GM+)PQx0g-o33#0 zMak+{i!{sY7~PlihJ~Tc_)FOuW(K=p-L8`Vy$lRnJOwuJF$gHfM`;K%D0uer&uh58=iAoq z`hTY^y|2qKVa@tI>o5yhHp*MqNZuTzbzx%#T)NR~Z`leX^|1uwai~mhWPrkR= z`L^Uo=QQqugGv9j^VWWfsH;21@SuGD&oygfh15T=@3k*^)h@Qa;;8nn;|u4X-p9|# zF#F4v4T<746%4PA3rIJ~Kh;-A$WA%7E&r0U$I_3?#h-VC@7c8bBxkZlcG!u?m^%z! z&mP>JU1YN>^8au7l7#x0#;DUPK4%IaSn>DfmwgYeHdjU*^SHLZ&7Jk8a(~QQeWtk; z|ApuOII?ePiLP?5@O@u_!&?Oz9_&i&v&@hFW_~+M`pdhj^~b)L257Vw8u@4HsWaRQ zH9ugj%x(Ad@ulF42Xu?Vx@YaXc&wQ(CtB&a->R7F-Z`_s{0o})_WFd7%xs4jm0{!%6!AXom2k$4zsv2b6t8S=+x0S>mBGgU_La5Lj18WW zO^jS`GV+7o@nkSDFgEfQD}3QOp`kTxmdcFtj$2-_g*skln_B26ace4rf^lW0_T-b_ zR!^9Gz=$>VnySmqX>*wv_DU7YHJr&-VC%W1)fyhiNxyyJClvT9 zOu5BCXhoIjtCrg=3>n(zbsQZurY|+%x-yr6;c5TVvc%voTf|d~f`XT62>)6&A!0eh zs)lE_FAjck*u%J3_}DA!SO-6cl+S67(XY2wFSA~-?&4&X-NOD>8?_DioTD=HZ%V#g z{+6-gn(@4g;cGd37HUg=U0-umyPSt%MmXs1fZu7}JGm4Zm(-^8*InC^uIKbE{&at# zd%#Y4`>q}qXFusD|6gzOopeL+eSX~MTk}G8)>luv!@;;HHH_8AqX z*7lgfn<=BpFypgM&x`cxkblaphKrgXtddH9x%ZCo_voh5*~+nT{`Z`8)1Q@3HIMpq z;;0~l$ISN@-;aFYWC+;SCUSj!MXUBY28Mf%YOh%v@`V|mXc_&Q7tQ-xbpem?KOZN5 z{q0{C>h_s$S?E7yrX2IrIf|mELbnI-y$@$l;9t>Q{h}nwi|a0Hs@~c)f7boGtl?j~ zQ^!^+PZM&o=qN` zofpa8nz4LGW~+0L%7zZV2TT)#KK5U0{d6vd!@(_5Y5%eehb4TAPE4>W`P~z<#BbKD zB_6jqn{|@!<|=V8%;C@~SLZ|B0aClfy=uliq@6h^KxFbC}t* zs{d!(+a`Xi6-RID@7nP;y`b*@zgOY=cUdg2)V2F{u|H4u_3G6Mpgcb__q*Mld1|4X zc0FpA|MTEc=<&T-?hFTN86v#nr!#u(4oOPcI{#GBIZlqSf~6DE?})5x5`KP3H?Odp z&*Fx{t2M^w-c-A7C}&AN-!<`9!2HrC7CyPoXUR54>OU=U$2%y<%We%IXn-?m5ndTk@a=`qD!^ZlIb zHQ631*46RL=ZNzNo?5LKxo6TT9tMWHy9yc1f+T*u0AjeW1iWrN03 z_ka2PTWVjW%;I~;`Pqbm)BmIXRh@KS?W1wu#^Ux?CI--otmVxr!J}!k94PN2djhj@v)+y=w&D-ACIiqK7;eF1DavZPPSEzAyP0=*}Z)KI! zu(&Q{iPqz){kwkTM)x1|zt@`gb_;KPz_u;nEuMcBF8!&nn)Ww*f*1R#ueI|I>iYfM zHRH$I-BYxit9aE^HcqHwaqi3P^X1wjGSB9;?b?s8Cf!#{_@yXs|E6oMi+#+NnHkGm zmp{0rc4v0(Od)QT<$24!_-UUa~ZnCuR<*kaoZkp@6`gz`4mx+?6kNE!i za{u0~z3b1rfAW+1d;eo!`IlhH?R`mcXFXSVHZU-}IId>3xVJ$>q3Qc`o9C8yQ|Is0 zU%XF8^fJqYXTPR0^nMHDXIL%G(l+HIx9*w`_5UBr>#e)iqLA>sUAW;k=iMyp%fG?} zv%a3~^|xnOz17)Hkx}%ie?-gsEexhn*ETkOo`1xV#oF62a?(upRlUE$)}O6pdR4rw z|2eDvIl(8)^-9lrJN&i92;UqbDAVlHj9d9v&E+t;7fu4~F?bKKaYzIV5rdycHs zYOUB8SsfAl9$z`qf3Ny;fqS7k!#ae=GCeRf3n`Y=2Nt<*ZRlL@=G^<+FA8r z_n&+@&3TtUFWh*_^jNs;<;I(z=l}n+kLN=0e35^49_(AMoOEdW`1i%51qz}Yd=}3> zncBSXajn&w0MGS~XBRz*QxdzS^l70VhjLYr;F3q_0ak~y3*BRSZi@s|$1hqI`lh%| z=ZCJug8fPX>pt6arFa|W7;b*2VD#W~^0L*Zuay+O3^H2xo<-GXg7=-C)v8U?J1g3c zIJ}y$@5{*zEt6MjuRF%`QglPF&3uM6ehqUT?2QZY`E0_#BycVB;6&E^X?r|&GBy6s zu-0dqWOsSmwTU)gm+IH9{Cs0xz$rD|UG4`jmc`uQufB2Eio-+oDa)(eKIY08Xa3%W zl1(#`qcYjo-C4iwGH>9Y1@(KRBMdY&PakHwJAM9K4Wnanb`Br^Km7l-{crW@R<4RY zZ-f{e{^zEPPDyQ;$J&rRZ*7CSHDgv{&EMDY@iyOgo_|{+87b}AzL%Au*knokheM*X z)Vm5RKnoZ?epoDb?|4JD{f!Op>hIoAVF=K$=6`mj~By-HuV8e?OWb z;P&!KWi^);IGxkny|BCfX4rGC^PECLA3~;APrWXeGv)8ah-)i+7y=q+B&NPvqL;ei zUQ>+O4c=o(OZtj*g6x#pjaUxtH91%MTl@N1c>$IjW(Jdxqi4)J#Pu7(R9Jk?_nnH| zvXJ{|qqvMk;g%hWi#RMNtDSK?QBlCeaPRz#_MR2&N|J46A9icMVPm+HegB|O%WUTG zsWD0}qI(z?@W0x!S(fL8;j(R;(@uR`qLX~8w~^PegCTUnU8T$gOzWH8K8a4$VTfpB zT6Tf8dHvIT`^(G|^!9JrS0}`9!PdrCAo=Iy)^my$+LQCW<~){iNMPA;!=SzFz>Aa{ z!trUkd+sfe|C_P9$(QxtY;g`8)K;JT+a0?r!G1zma(Tf ze~+tvgT`@H@m)$4>vjc%wA5uYI*7cUB6#Dt{L;QlS52F}U9JS*eU%oY)>wUKqu_^E0zI2Up`NZ~MpD9fC`KhKw!+pN3Y9Cd8ly3cEW&3>N1 z#Cyg2e*}NsB~SIQi-Wfpd2N$_xf|5dQE1T3`+0`3p+4_j?YXq$P05|oVQMy-7ISYu zcaZy4$;7bf&Hvy3f8Vcmx+|t}|1o32`c_@3>6f|K_}Cx7zFIEh@={iYbIgq!7bL8UKV|t$Y|kk+w_~mD zr|N_m8lFE4+}8c#eJSm@)gtM&^8d}>|DQZ-rQ}!jM9}>U&j;^ivO6o5 zt1q7-@k?}F!P2@9=T556y>s_nRqmHrXSQB`ZU5)uwK$F*=ER2Ici-35p1$Mv|5>ZW zg9FS~21z~kUsw8nO|iT4Z%3l_j_wZ*%l!jqn7Zxt-4T0gPQ%3`;urHZSL%kR`{!gm zc-{Z+cKvJbV-IS-Mf`YIuAj5TI-y|$TB3XJMiD8`RjQ(z8aQO zp$~Gcq!+3AKKqgXb@LOQEgv0zPJZ(9|DTKUy6f(m{bfu!l&-Pp{kEOfK~v&xAK8Cz zyZyP@g7YoKE8A>39`{-2RhH~3&Qj-!XE;A&<)5Ev-cO{0=LfSCe{T3b^<-OVb<>NK z1%cZuc}{8R20fisl*sbw%dx2X&>2!CY6|HR&fm*-t@*qEa{i}^OMJa@dyOgzCeFU9 zaEGNq!(FwHr!_rf-^}MNH3BuNxeLQh89wjp?2KESQ_}jY)9S0&hx)Gt{l~%s9v`bZ zdHPh{?*q0|ZNG1GYK%Vp;HvMRq{uYt$QNF4JV;DedS; zbTEqYJoGsB^!u=XPaI!dPcH5e*>-8e^y_P+L}pLkWHcwQR&?8``S;sQ7p(2n_-XfE z>j;Z=-}I*+=L)OO+~BvOlxa#eM~S-Tmp|{m@4FrI#4xYIO)MuKMw|BCU&M6;X{gwPEtIL8gsX3XA}|c`fr=Xmv8H;h%*2GbMER{pX%Ljch?1;KdxX|{Bu_(!vQDl zBfDVKc+t9=p($9me;to=oYVU&;y?eGlr5QA zSbD9?eRcZpHT4-Scb?pO(_j30PTwczS9)w;m%ZM~v>8U+^=GdvwveJVd2EP*A zo~!XYurj#I6{g${zxOTKJ94vAOsE{5WoZPx#h`3zcr$L%g0Ilxb&J zpeMEJlI_2b{qI{d1O9B`K44()64x4Tab|hc$=6If-h9>;`uD7j#f|CSKi%WExP*M2 zCVYQx`+TQ4H^T<*hU+nW4W6q&tNX!MQH4csT$L34@z=D&3%|W$OjsQs9+P|b-e0-$ zc$+Uv+Q02PdpZA`ZqJFMQFRq6;@Q!sL?``Q@odE& zBggE?hwig5)NFg`V>`DY&M9lnV$hwUvOX94PI+6N|9xWd3UQ6QXGJZ3R_Ze}#58@; z2!F8s)44l53=0$=RLE+Zs89KEclETZdBO}!{-nIUTGL~)fQ3DD-levAProQ!5y*bZ zTba0?;lS@n^S*8Vr1ChDk%5od=<)r@Gjx&`S}Vp%gzoqhdA_mb@m-!;F;A`kT@!Ye z>&rDrF*Q6?*fMkTm&n(1>N0F^o1cGdb~8|1@NLDF4e1wVe?6Zc<)rc_ap9{=>lGQc zvpI=#>f2Vl_e%Rzq|!9`=2jM$JCgiMY`?F4rCMO8wc%4SD?`&%5f#o?TAOo(XI$T= z+g_g2CHnBw&C~X``|N77!~bd2=$HnWJIzUMyg9Ff`<>z1jPuTNMM=>W?K&1_<#U%$ zV@=s0v_Zk{&qDt4?rA(F?@Hx2eK!z~yrQ0bugA4cVfWlU4Bs-PKMB2YQeLaX_4^95 z|37U;hR>}34{qP{Ki3*g@=O)Kt!J?(F!`ST*Kf;k z+PS;##$n_0`KGKNW;|J4T{>&^FWvk~Z)@gAbH)=JfonVe zGr!xvquRPX!7p*swN;{9dgniH;Jq)*rRq7=ibKt|f6ciZXa00v!#Tz0EdPdhKT%1( zd`a%)ao>gn77Gbun{%^R-Uz)q6wSCl*x>cV{+bkj1>f&mPc7Q@V|DB9=>iAlurD~i z_vTSUMg~#)1GnesI4`V<$?q{UmL?J#;JziCNf4pcVEw(==yH0 z=bNg9mFpGdbxZ1Qi!lkDF(`i}Vk=ekKD&d>^0;yB{qLZ0kn4;Fh7RFd4_#dIZOaqi zb&nV3c^5Ab&=Bm`%f9zgW_`%4y%mSIq{pXDWjVdZk9C&U?Y{^4CfPZBaVgp59a6K) zU8ec*l6bYn1-uCi3JQlMwl`<4%Z|QYF;Q9J@~550Q`PyM|JUA9jygWs$zxZsd~IUT z<)`nN);FC#|Fu@NV|mU)Ed>^lp1{|7k~ah{%u%@VtK{5<7Zy+Zcl@n2&&L=ct@Zn|Y*+sd+itbt_)AZo5Qz)r&sf)=*(X-A&a<)DoF8{eE{w1w@|0Pa-hh0U>JFm9e=HyEf&Z2W5Jz@^x2Z{BeMUzzj%Cmo=v-f zNhH^=<*r4ci{&jDcC#|+^#?HkGH`a%zE-a=^E!tuB_{BDOm`ZPnoewd_}9 zx}47Ya!tFRq5qj7;NKgj4>wX<<^Jw^9s7P$#R+HmT^8SNB>!%75y?8V`H1)V__iZ% zT_w^Fo|eyZt&uxD-+9fO^nK@hx$kW|wx{UZMCmR*2iRHw-Ys*#zSz7==$@F-jOgz+ z{s+(hk^JtOR_MpvHGk8QwjC1eHvIZ~KeXz2+Oy}}> zPrk`6+$$aGq{N)8cqhe3{`!Z6*h{sCmL2B*5zn~l(i7`-p(j_|NQjCJ*_HZ3=TY+m zPKBTu+)hOXT*32}yUu;QF<+}j+)2&j$>$&Q@3LO6$&Wm$c`;OPT1v|qt)=`o=b1eI z<-<|fbV>E-=9GIid3p^}mu_e?oY0A%H%Uw7-}z(p{$Hz)w&wEN zCuB_Sp7-tKgJo~Dxj&vUJ|FYve6Zg;2k&F{9~y3pMD7X+2#+arwNLE*VcWfH_YJ89 zHcuXWeSK4`BADSo)*jpA3H3_1wk_HJCWn1?@KR&ZWY?E1iUNnU%2*7W8sAsAYo>6l ziJFnq9iw$pH9u_nukY)2uA8p;&XOVIRCHy;F}a3X;r&H21`G|8zrO0;d90P^?Z+bt zzMqzB-~RW-E|-(>O~#&@Kt_h-6I&nMS(9aGGVic-!68odFD+KvxL#!%pX~nq{70oU zgTv2YfmeGzpNp^fx z6Mi!9>1SZbz1YXIzUXn}0@r=*I}6q?u5f2?I33(wliKLVS!tw~d%9s}g!03pPd#s+ zf9`qRxnk?OFFh|fC-^nV*r|6+TxgtjzBs5sMRra=>s0Py>E;|}hR_`;5l8Hvo0bNK zG%o+%`aEdo`#sZEeBb~7d;9L}X-kZ={yx`c&DpNBg6*b=`KiAD^1nYn|1#^HMrq4U z$L*2!G0zVi6Mkd+?CbaX|KI;A%*(HPJo~S4!lN+P$5(bSl>Vt(_t=NQp#1!@_u=3D zJ)6%-KXzFuwB7CHre5olm4~q{;Bxy9w7_`Z?|6memLXaw{6_zTe%e& z8B{Y~Chwb(@7*N)-|fT$F7@^%3yYJD6`X=Cw!3S*xVHALIfbf(JV#!?&g{ zVqoyAFudXKzoXqwJ0&)F@%LYQZrST(eEa#i-6uft>Tk0~KVG3d)>jN0+D>@BFcrFW zvptuA;kBeIm&3mY?DjYQ*E|(_yCtvEEP-F)LHGTwQCl}%E>1jQl6)pK?4p}ifll$$ z-c4$Z460{-=0x&{#6JdJ5 zsOhjZ=BM1lFx@QihTB1#ns+&W;YzuqESk1!{uh=F7BjDuY`o3BmLb{8&&$1KVu+I0 z6T5X+of#ZEEnoM2-+TPcvQPWoSQ(TZ|J$c{d_KbgSCwQ(b6c$_4%27$>Jh6R-B;6C zva{#Wb4z}Qe{oY)lNTjD%#Qm#>*)RZFUfy{jDBr2GoH9yPvO`hGlv&k%9CY&OfKJ9 z%+Ef7=j!&3dpp)W*!TbMwuo8L+rwRQx@X${R$<#@-7r`Fdd%i}>4^9}-Gv7iKG}I{ zf6cy~3Ebgpkkdd2meYRwzhT7y^_uE&1= z>orw>;wjH!-Kv{|KEAO zmx1Ay#gg3DUm~YmYVG@QxmoVZ0=sEDOCNo|&2V7%{lD*~UH>#a*6hIctE_X2Hy?91 zbePBJPQ?Ywybh}DQ4gx#Ll;I?<8@r zOMBW_7{0_NYutUV>2KtI#yEwi_5yzjtNvleDh4fv1I-UE?!L5~X$hCZ4Dpl=_u>y9 z`4+ub@h*?&<@s3?ICo4|U)2=;akc-e_opgE^LQCccA8J!{;blJfAOd0V{48zitT4h zK9z54db6!Ky?&>^)VH7i{@(xpSB~ic)8;>+Zgw$=Q#noR+8F{C>^!=#Ou_#5nviM# z=D*{4FL?B_c=8)9m5!BD*Sjl-nr!?fb@=A9pjXK^Hu#=zb^71aoB6i$P0=1EhKU7Q zfA+*Bo-Ey&@T;@;=G`MjCtp0DV(k#NZ$|!|IrSI&g#O(TogaNi zuW!lQxYe6_^H)EzOxQOifBt06V}4>*ihPe|*=lZSRM?j+&iq%Mt+r&fb%VBSV!zR< zL*;&sIj@pg1aLAJ_4X z&FQNqyfB^m?o{!ygIl*8l$mhEo2g)ZtNiVMHVPeeJ6<2$u<-Yvub0XqZ-~_Fb5jg> z#umB$YC0EXM ziT$mUUi8gUOUz1nW5ux(Pjx33_D|+vbg?ngeSg)}z9=z&6IX^k;{gqCV_Uvm(Q^Ra-hD)ZWeks~FY*u72J7qT2plV)r4? z-!0$az-Pvgt}3BT_V?E3crz?Gexve>`Df27?P4)OamDhFH(lsY-n#e6X_k*w$9Y5y)MhcY&pJddjj{{Cs^$FCm_$p3pNU&e8!xn%j0O)tB=xAe7M{dYZ9 zvoMv(dVda;C0ubjVSr3K&L4e!b>UHd;*x^ZG$+nfAQg;34jXFj|7 z?#NHUniI}vcQzhbq}g0OId1m{h6Mtz%*tdQAIE&$yUVdTL9`pE&hfGdvntQ?`|3zzQhW+!byOz~#E;!|j zblpMc&o9C{h4k4SrWSHCt!i$u5$lpQJ-kBIwk|XEXZX|oQRaasy54We^8Jx|TlT8P z%hM;EclD<4<&SiJ$J+IOvHahR^)4rFTxOE34A@-T%lm8D8`c>NOlu}g|5Fys!0>jN zQz+-k_Cz-MCdqJKA77$zO(jeaA>@WE%Q{rR_S?@Z>&F;!gbjw@MQ z{le8U>hqr0LKk(D6=kFsI||NLY?evzy)|KijkmZ3v(J*r-=lpLiy2Z<)Hg6S^dyE( z4=mk$qwV|}OQx@NzXEL;npo~!4Lx{i`<-bgT$X$9k22=ao zCHD0XGftmlZ+>VMNLG5r+_G;fT4!kFAjoj?7E}E1Q&YRk_y3OFyGnlJbFLfPIBy(fW4Q1>SM1TnvwP1Au62L- zDF6Kv>j(edAAi5?i0bnb75}cKA7j0}2b9^ToZS23Pw&;ia{ptmw|3P_ zGptB>=+Kqnt5@3p?O)REW#97ue_J1WF)6ctb!cDAq+Oc*k_-z(H+RmTJZ&YaA^IE4UbMI`2D`EcbcF(U;5T@AI1RdEZ@zhF?6o zar>VapYrZsZ_2+w?Cz_3jhY*)O{N8MG<@?ES+?ncMw);8lU^Rp9)^Zv>r2^#wsUHn z4VKXS5_m(u_uj>t!`)w^^F5zF-sArBm8s+;Ny)8MDOawqQ+5vhYvORxiuv^P$o0n* zeGE>jn2T;c;V+PAEg5v8^ThKdqF%QJdit2tWz4J#dsoTol)=5%ZVW-c?m)rTEEV=Nt++zP@Ki~{?l)Xx6#ozXQ5uquq!8&Z)RSd(QsWUo}7^t%UJ!^LKa?AFU@{0|7Z2UtV3gx?a?=c>Dm=`|rWI5Na5Vxycw_OhJ(w%5& z`}vHq7{BF5#l1GBT=!;i#qZuE`}TH&&Z+tDS!W&o==+t|=U_nLj1txbi%JZ=c76JO z?4RGe$Xm&^ySN+Q)HRfuuE<%vtLyo^g+aa#_&FF>FibjgamCwpKi010O}%@^c-Pmv z*F^MRD!y0fuh{mfTEysTmAN`Ys?Q;XTrKX)7fz_S99F4ee_LApe!BVT8T-yZ{~faE zPZ;kWndQ4YAFr-jbJp~M+^xWMGhE_c&Sp!ja?slQ_s-}3sCm6|YWJqb+i>67DSGM7 zE-QbgHF}>{G9R#4I_uKO)G&2-PEZOb0}H!A%+ocdtG;RR0R5Lf>Nh{HoaU!&_JDu2TCZQ~&2< zZ8%f=8-}!^<(|8Af-BB&p6TVkf3&}JcJAE6v$+{8dM8@iemo*94mv#{tn<*m>L>oqms;-bqR#N3N~hLA`PBS^Qyy};v&v%seb9d>Bw}xArt<6Hd1dZm z@f?%t&V_s0w>5b^(R#r+>v8(?t?Qbt^mm@Sd_a0@wC+6?^<8UrpUJ;xU%dR+t?a~* zYjsr#KjZYB&hOP~U1<~J!#}Y>!_ndH(P>A#TW4P@J>~7_Xxb;~{Hon#!X@dAoDaBo zSe0hVhch;8GWi{Ed(4(|0=H4N>EkD9=avQeF?F7Du~;N$y=wK0->eL?MY^VGT%V9^PzL{@}OSo+DwC4x0tEh%IRe{5=$t;$tai&<}e?dfsse6@pL zZG~si&KrO38}7=Gb*^GCV{AxSu(|MNwMg%!SP?=MT$zv2AVVxIMMksbTzE_HpF zE~XpCKaDSU{^uFTzg7Gee0zrdPV0_)pItBAPSkDu@M@aQ$<2B@pFBFMs#`rjrCGu=%-t=D^V@E?Ic;NN5E7~8 zbNI~g;a15yNAYQ_3}+%|^d)cSs@Tq;aGRB5LtWsZh=(m49MTyZzkc+I)(C!(x2TYn z;RCqTik|T=#uy?7+&oRfXjd<1T+~?YYG^ z>=o_|2`o3BrMNS7*2ozhetYA{gS%QMq+0n`rF(eq`20yEt7!FI4f*3iZ(q#}`SZ>6 zYjmIS@#S`_OWs@ZT|US9q+M=8poMbf{co!pBc7&5y_YH|mTTZ*2wGmKfBw$#NQROl z=T^Pg8Nu{wTKLZJmLprWW`;Oep0wMb#v0c6XrABQcr6>ph7;=S%S&y$PUdhihGcVD z^=!Mi#A%)IxvyczjV7wCH_Q&1etFqPYscA63@XPWe@%LR#V~{+z*b^rg|b5M#W%-T zL!Ymf7rENapj)2t!M#cRA%oDgXAI|M7!I`h%Q2Y#d-?nAtgUWh-%p-RIxO74I$eL; zw8(!mm6LwX-+TLg?fdHJH(y?@y}gdl=0(Fi#Xi=OPbbyO1txqJpv1&5f&GGLn&sIIcHj4NGi-?OnQEEh8(2G`#eAFSq@U}yZWeE~ zVq!SM{O8x*_i_0Iq@mXQ`>Q=mN##5_L z%JG>CwWe3RXA7BZ9Py#_UvS*F&2dq73_o3zf1dj+!F+yY_Vlvsb52vQ$Ijb+H|C3T zY{>7)zb@8HShs#wqs#tDYBlcBQWvf!hx}~c>Ud7@{_D&eEDS|Gf8x0%-&UXWjw?!5 zo1FSgU$*tby(PbGCSUoX$F3u|^ZJkaf9t$&Gg=GsEfTwBpy{_gFU{~!4ino9u_SA; zUy500IE!lhoNCwW{h3!H{yXCJBMD!LzYUgdh7vD0H>tkk(B08ywm>xF{H`0{X1*5j z*>yX%z{s67g-L1caT)vlCoTTnV@-S0)!#MkiALF-FAaVfzJ23H z`Kn0H54pQ9u~xG(?9MXLyR}+H-BhYSFrZ=F1gi**1zSP@#JHWTViSD zca{lr_Bj45m%My_@r~=-{r`Dczx;F~xi2<6z`Ad8-1$n!dy$3xpH9hF{AU-F|9|9o zwFFDuS}}#9RN?ba4=?ns;(6$JtuIm4NknD4T=5yhyPvMV-j>-nnLpUCgq1g9)+^2n zZ9o10tk-*3|J>*OoV>pi+q+*+oPN5dCsi)sdxxJ_MRd^8lcnpnhMbVvSt-VMeQ8~C zUeLqI#?KN9E)+{2kXF^r;>i|RGRGjj`+n85e^a;@1tu|NFd6dd|9U6$dB11tx#u1G ze#d>=H2td#gSyAlhrY)?i^glT~uSV;8X6WfX zcZjkUd-3?3K;3FjgNP3t&c9CmumAVF{+_?`;Lb}$-E2?ZYo}9N$}dU zONwVVD}(mGdz;=COg4JcmFu;s=3Mc-%WKn5hgHXaJ#gixic5#n!P}1iPCb3A;=4y) z%IfPcOI6EP%Rfo}d>HlIS}5w~H_txq&iX%TMRB?5efP~<8TK5{{$n#qpUHCa-j8#h zaObCo*9p&!SpKS4wAZ{PbQSxKcCE#y((XG7v_C98VAv|TaH{7@t%U7Gx7u^%-d?P^ z8OFqLyy;)d@~=}~2)v$NLFg%W6?W5opBXInm}6FEq1}l>tr^|@p3Qm&S-DS*AtJM>2oMu zeH9Z!oi}T=VC>w4^Wp}@r6QMSGBXr&I@>8XO8q@`^l*CS(sajc3(1D}LJTTK^O+fJ zrhi~7tmXT+@Qki!$g|Xx-`m(P9Q<^=^f%~?g?vF7Llp*v=Nh6?e-j-)%&99WD4uV- z>Mb7wM?lT;Xy&y)@@xMw=Jrh&-NyIkL9=exm*a1(cUYgd`)%0WZvSV>KJEjqDH3b8 zZGZV$EnBBGCF)zTlMUkmj}O19qY{-F4tzXW!SJfDbK;~Q@A()?qP^0m{CBteG*K?@ z(CIDCiD$*j-b}wX;p80l1eetp%iHgKyCC=3ec`3!dzl#CC8{5peecUMzAT+f%=u~+En0~e} zg1_syFfAww*tu8pJbS@XJBRNpBBll_Gb}iB&3VkLq=NB zqaU)7M`wKPv$o&)kCmaSW7qMlTYF6|g%>-lo6qX7JlBIeiY2Q^L6-UN1w+FSGQQvc>NF za(onvDL#AkZy%o{m)}ysM+vXr$N4uV}aI!H_tB|wTMhNHx*fs(46+c z@}B%8){krgVh)w-7`HGnY}vHu*)%qW{XeFte}B8`T~*=U*|q!5GBYfAb|Y@8;bYU5 zjy)?)WG~hWYcOaq`*9RbeA7{WPQ^O*mCfZE{a^8Ge=k}8IpSw<>wBAzkssdu%}hA6 zcJ;5?<=!m}U+lF0uVz1yexomWG5<`DjQXqj&!&6S*SYWiS1$S5&*1X|(J7M#uCaX)be6JkuPcbzF*|5{|J?k8#ds=X zxKjd?+@hS$>&N4hF6boK%71CzHaDbLV2;eMbH<;4R#{Y-y$u%aUBZ7$CX{V8!-1n( zhgYp&Rr%6cXTZjNNkw7xmrJSkQ75*|bz;z-_cl_azGYqXM1dnYQx_kab-eJ>axI%5 zJ>7Gw@Bevb{yjyzGHs=Tw`_ycf3dHxH%7!?dEnkLajk#SgFyHDi;uI<+|C@m??|t0 zVRrq=us-pBj+^BeCeF`|>tHuathlk|`d)eUn%m9KOMZO#%~F5vWS&$(+**}o4J(<} zT+$a!KlXQvLfstC24_a2g8gAjXP4|+>EIxh&N0ct@*cw{ABLH-J(Dz!&C1AL^VvnS z)gmayvi`OWlT1bH)PDCjCw+g;zi`c=FQ2_Y`}Tzi>UX@89v>BtzvFnu!|~n!yxQ6~ zQ~bU4CI4IyE}H#^?Zl)rUb;*URvYWCojFnE|KY*^l_uLF|5!iysB(XY|LZt`^;hSJ z=Os%u-pnasbmlS>++Vwqf$RE=57U{C<+2@q zvGKvLlBqjNY%^Bx`2Ay9lld9(b=8l4e_74u)BaSoZO2B|3x^xFi89^t=4hz=lz(LVY#Rn^k;hM@?k=0){w0*d z$vWnl%K3@!8_gg5dZzejfnvP*BP%_*wZ2Tn(hM6ME?l1XYs*pP=-#gPzNeOK+d1n$ zBLl;Z4Z*Ftbu(G*nIc3Lme)k(g~#ac?Or|KwDW3z`x%u3ugu~vs$aXO%gB&nK6$~@ z$R9K8Q-Y-`LK`2wa$k4yxoMmKZ%zgypGo(w2?|`ktbO2RRl=r63;S=g2PZBzW|-W@ z?_TnF_m@*@`Y&!erU{81YYvG0vvb|FqRdE+^{3jF+C-~8`yKu=e6rBgy>b0_Vxo^% zG0ahrTXo5x+ur)kgPz;jrMFh>KV7j%L^OEUpFk5Eb5XPFs?7@?{EY41sb{j;CUk|7 z#Pve?za}R?EMs7ZvEgKRabJz$!qjV1T$BV>F~vI^d9swdR+Zrp*RnlJh0j;}dvP*s z2w8OcZ8_7x zuhdWSU9)VM9?i`ujj9SVo1bsL>S|xZ{yHW`^*J9NusNKIxbt{Lb;;>B6As^+c&K*a z8y1GS>JCSIJwLtbPK{ps=TL#UID^CeC+$*Bf($AdOSo&!r7ve!xO*l=r?}~Et9Z1f8Mt%%gfGR{yyvA!R(ZuUn{j49=sBp_v^C#-^=%|vozmy z+qRXHq2N3t`@7c2@ zORxQ(b|gLy-Kn5;V3i`n{I|s==YwZW-C_GN?1#hqemxy$^SjCypS4Ro4xSyb=J`o! z_u{^n#-&UjSOQ)=x!}wn9lh9Er0#^u6!Xwq-yVvk$mieRTa(dzOJqP?i~N* zKP!X6aqH)tD{HoUuFU!6`>->6@}FMq{ePy$2~Ik^(n5Ms)s(F0+YAn@#w~L#oW#wo zt-Wm26Y{j9#ji0k&FJTz)z0?ae!u2})r_h3+Zh?0=6&Dy-L{&SJ4@=ptM>gF(&b;x zDmO(l7(9Ao7r}PBB3^j1< z+Lod>F=^K?$Bj14_Uz8HC6|{S%IN-g>dQglOP9b5MIjQ@v9qoo~l z&W9*E{|xR(d9hHVdht&7fDZ3@laJo<*O}oVu5({;NyhJ7@x8f)FON(kupsu3GxMPjrnSzgEgdm3NH;K17{Dlkh@#P@7Szo5T2;JW_0Y^P|}2OGC(%#1ld@6SsqmJs3J|39?b-*KGvDMxer zv~{0${<~NbAAb4cmGn84RkL>s|2`+PHgf*nPa2Pm=DnEW{!VXwG*jC8wKl667w(Z! z-TG8!miV!9HP!O2^)TS@pr^U|C-eLWJdJAJ2#INSLCVL zW=+VNvb^zDx`|WVIp$=O*v&9I80p zB${)gM;X3`z@PRN4%7sLg+$B$Swaa+ks`p$-?d64VnU|J^$^xtf`Pj-E$^EmJP1& zL08#FezQ|Pp74U<*QXwD{e3xwCsTNLI$W19S+iWP=k~U}TnszrH93CY^Za7By6s2L z?%iAVp8asue+$d8b3ZOmlU~QnkP@VLn?Y1>>b1q^Z!NR7 z7#Kd3IWjZkH2+!8z~H%k)sM;k<<9TdUKar^AG-hg&`jM4_p|RgX}#L}_wD&{+>^u^neJ#?{Qvj; z`}EziUq7;&>o_kt5q#}tr~1D$k4{+2-RwVn%)0FMH1^Gzd&3@V<7K!o?NsykUB2s? z%GUXJ&;599j!M^DM{(Z0f9|prJ+%+p{$TOCrBAEksv@TS6wsZxzV$#=&<7E@pnCKyUuo*=^kp+`^bXa4>n)>UyxSnmF& z1@ABAmu?KWR{Cenrru)^3BGqS&xWy>!C|#hYuVE2U(Oj`{jbfiLaw#yFQe+Q zo}#4ftPBf|sk@)QyOw=H-)^RfF_W8|_IW?tm3il%n(XsuN$o*AsoeDoYIZAL`ms;_ zg<0jbJ#)Ih?|E*k?H~LtdtJb!1DsVs{r@b_SLX4XF8#Dz)-U*p>8tf_F5h;xzg(7^ ztHR85?S^Es#n)f2r@t#o4UpA8o__!Nj^AID!j9j4zGK;&WpB%ZJ3nm6bN{nlnqk6q zh1Ve=`<~k@b6n`-!7yRLy#HHg{FIk$u35{L9R4I&Q0{uqCcF95|GxQr?^%2@o7MNp zj<=127WP+MsC;Bz+F|6|oXy9u;>J$@f+@co9$$Mcq;kUi+~kKRmz1BHnwQ|`I{SxQ zRMC4Gh6S~UW&ZHbEuZ6O$;EiXP*}w1UO=qDOC`fH!=MRrXFYE3S|=G0b;DvNQZ;^`ufC>ufq7!?ZFNS0>x);snceb4_L)GU)v|qGGfpMl6=RyP?`O?S zEAb-tox#_(BzUy=NY7?)Q2M~a5T#=zy?o=uxBidhubLK|F)cod%Qoc@ZVk_*1F(>*;j)UPR1N&hBeHSUdR17B);ZU z>2r%a1y<|~6Bw%`zwRhp%b5^n{-k#2;*6c$?owfOl^>ex(h84Brk6~&&wl^w{q`f* zU!F*u*ZOAVmvjH#i84IdSIxWa$wI5;TjHHJoJvkzYEsx8`^ozIXUV9SvVIDowgRW* z_p)qx85W&2UEtH%Z@ZUUI21q2Tj68uetgn%spVIh8FVYm{<`H|i%mUO`OHC4*=Wh6 zO|rF%ciZn}x3qhivCe&I{43_$i|7B@&&=?E(O|Q5+Tp85S+q{LIPk=%PUi~yZo~3P z>f$Uezw5P1a)CnkUlulW?AkWBM7Ls{;?H;0XOBM5ULvx3^}K)mA``g}F6nxgmDzQ~ zc9ESkf6F|sUlYXkrFZ5FUFy5Nu}b%g&zG6kd#5bx+RXLQk|Dw480*S_iE4k&{RlXa zqL%&h^1hP$OD3@9+p$M&;_W<@A+z%JqZ5_e*YA7(`=L?b+v4z=JV(~u{97OUzrWCB zANVzY=Z0(LoLk=XUs8?v@q4}Hf}Q_g9A}pQvEZoi{2wi4cU}kH)$Mrje%-^&=motG z7$2zSu2Q)F<>t=IQN_GVE{K(E`tU-$TdcqPfR1j>uZ_G4S9Y#jn!hpNI}<}*hGXin zM7{$ngrYw^&AOLl?sM!c`pVYhc zx8^qOXq|5O>F>v%PxriEFS$|Xxz&EbAcc)zBhS}dd!+dG49Bg1VYgTFU2q6{GrR21 zjr~u=k6jb>n5?alwm05V?AiP!5nAStI4yoWaNe!{W?TEcZQ7!C#%c|35C409SS;P{ z)tP#(?L7k{q!W?P0H&))~jmV{q6zrFGh*XQn;@U&E*88Xhm5E}pAuudRL6 z`;}Mnk9ScIbs}R zIJ5ZK`@77S#2Bi-&5WL6ANlx-;`_(1qd%9u>y?kR*v5JO!L{!WQ+~_b<`c`@cp^sN zs#3_rnE!iIop?Fx=KudAzDwcHne=}fxs$rS?|6JDJ(MBf$;~aUZF3d3zue6v_p#%$ z7=KPei`_R_S$4TCZd!~7JR0(6xj)xwJj}uHVXo8E^6jRM&$DbVKKq}^u;5c_U-gmu zpYGksxBjt*f#Kcm(#3D5M=zW^eb0}hdmRK8&fi(nk;~w~Sk=G#e(lFA%Wbz-Gq2F& zw4W@0;lbr&mY17+l2xB7CYtGlPD-+T{=j(t&*eu2+vP9*Ov#+Pjrs7bGm6{WoL6u8 z!+6$qnxB2u(F4W@gBIvC~dyN*F^(<*rXPZM9!{ zR2V*1UJaNPy}p>iLA);ZGLyi*>#sZc48B}^X5eG7uVj3Jb8H8m9JtY`A0*n8_h0e$7EL=xlmDQCZ3s}CGdM(;z z$#9@{qTi>EMoD?$lZy@?tuJOc;PFEJZ;|0j9y7)U-*^9a{jf^js#EBHt*KGNwd;~= zK;XXXJMSiDhWT2T-da0dM(a>!Mu^;LovU3Qz{?!7sgGg4;U*p`!gUpww&m-J=R=^Z_MQsx32 zIm`_2ew&?}_*+4>=X`-c)c-HeZWmrXH-5mfC{pcGS(!A`iWU0y)|^5sg-nXsD&#!g zJ!5EyF<7)kUYsG}5~B@=k;uR2cHei($sc9yjGp-MrQ9tRhDq@PW+{J)r&&zBSR!bo zCOZGjjFRntZ_Dmlv)^BA^UMqJe;!>DK47?kli>`bM^$LdCZ3lYa@&-GKU_{K-2eM- ze&MyqbX~tETefAdKYzPg=s{KWQj@|;2iA^0U0dUm&VTZ1xs&JVI89c_7P=ah&L+RD zm0?B5aWjV^hJb*TZ`^X38D=<7GOPb=UjJE)oqA*S+a zc=X3r=HF^2-M*U_natEJyGwv=mC4Osb_a9qO0|dw{`t|dmI3Szm8C5z?nQ0?oZ{C+ z>wM;Fc*yK;^7Q}rz3=~aci*or~?bGJLQuPVEa>>k?iZ7h+PjNNr+t ziO|BD7I?7t`4nHa?#JbJuRfoh_}Fe; zsQj$w2Wl^c91fSV{Pw2*ZFO!ezf{Vl*#5=8u54i3|NY~($+xOjin2<^e@e)EU>!I^ zuf->>q44CEC)OR8`a^S@w!iPsZMxBDk=Z$Kj)CB;rnO4m->xQajGA-eMmO_~i6WO` zjxW&t?fF}W<4)#c318bShgX#zxl*yNy85kt?&>28J+Fmr>q$L3@x=Leic4*OIsXql zrNbarp*3k@>3l`z$n4)Y`MKjUd(ZkeKc7F%7hTxj(BRawF@Wz!r+>|( zM^l3RB5&{4@wjk%^WjhPMY4+*m408kFsaH0 z=4|8I@P7Tp37Z*K>~o7~dU8Zqe$$yJaf?2x1?2DjX>(&|o%eeYl}iCtpZ1+ybYE$1 z`JX+!3ruWQQq zj$Z7}mSPBa8Tst?zGdOUQpV<53-+|V4q0)6i7TaWiLt}qnfpJj*6n}#?)0CjYW)ig zjaG%5<|hAsG=1L=tr`~D!r#j7CO7K7m)Dnn47UFoyw^x6j{DdCZ(0l%ha;39%=`PS z{@9i0`%mhpEOtHrY1c%i)m^90uT-9*_;TAj8{4NLI*b=SDd?Any$B3c58cb5Z>|s@xvP&|;#n9@JsH>C<<0)*Z1)j~jOQS)4!5B@7Ve3yw?lPUsXNz{7l!=StXV;RgQiCV=vTma>8PZ&vQ1&FfusY-oEeW z+N06u(OkcN$tMuTN%5_XE3>)n1B(}89lOi*NhC`Rvwr@L>D8=PXw~zGr24 zviIfOTT2957odvpHQU1Hy3=6pM09Cm6y zbJxl+yPei+xX+0wv^Ur-FxbJC>Qf~B{)vvw`=94uKeV-3p(4KS;?^nmO4e%JU*%|! zo+!QD?9cR1CZbbcC-E`Nc$l|C$Z~<>scQcv*l@O@8rROJL%3jw^kuI#w^5FU(;# z{phl<{ zkzrmCdcd>k`@ZXjx!sR${ta=sbC6wb3!g*QYjbgi3-{FY5A-uJ#FSiY?e5mwlQA=U z!%=1jFO~;f3?G`r_at1O%CK}Yr_ZTg%X@dzF5VAeD0ty`T5FQ{c9vb?TZOe5neGau zt-czvG=KKh{pZ$OOXTEwd=THnzH46bxn%M5xwYS-CT_m?Lzv}(VQ6Ge#aRiH?8(3T z^5WQ1xlN8daC|s<_u)qWE4&Nr_ZS^%P(KjtKL1CHx}Kl)-z{-owa1OQ8D@NDSmJcv zY>NEM9n<#rKe_LrXZinG&&nGg?(PeYdv+Wh9*x9Ct zxBYwhs(Pa^!`A|q+mb6C@5k+8as8@xuPo~%baYmWT2bmUd# zn|yZbMbQ&azHZcy^9~e=`G3U8_)f6+_c$Ads7*U!EwA?dOqKsHzVE|PwkW;GKcMV7 zkMY31vODs5{u6(guAOk|qPzUn#?yzRV!ubr@44x8PnRL#PVv3jvxGPFF3)k#)>*&a zCU84r&|kjqh71kYx5+RtFk~|`d^jY&uRxn&MS|Mzj2e^Q(J#ZD8T!_htOlcK^o2@a&nIEwgvz&7#S(O#g0)uX58DXn8(Spk?E=TYU-)tPjH0 zU);RM&tK_*l`YE&`#si2{!C9zpYAr%NM-V@$lW!|=KEK^3KrwHeYw!O%Q-O0I=;mu z^L)|XU0QBz%D~n^wb3g7?WH@%nR%(JWv&V)-><+K( zOK)}UpT%<~T&vd6x$02phj07$Ep9%exp1wH@A^HeZ+uV8+BVJ7_w&}cp=fqzGTf0ilGLNo4u(ZP~Zi6La_f-5lMSP_}FEaZoH&quK*FeJ`Sb$;yA)iO zp1+e>VH{`6@Wr%r-DAOmmj~B-PHz+1v9I~+^gT~hYo!(BB^owXNsBZZc>H^@fO+Z( zEycV4g+f>-F*I;Kj$HY~)vhM}64Uv1!>szE!lhRqY!3OO@^9vm=MQDn`Y+gX9Ioz- zyf|I%-hvHo)?MbY&a02~r_G!-Avihd<*}3dmOVKA-gQcq*Q*xAIWHHtDtBGL?^Y6dCd2DuEH6z2~vJ(%|w8fid z9XVRQ@3m}qea`cJ(bxaB+sDWqGx~mrdBXZ=`5SlQd@U~N-QF$tcgE&la@hwaq|X0t zG|#L0nL1-|XxFEM9*v)34yOK_|MASJ^`Z<6efK{0m6tGVIQ#3lBm;vpLj}V&#s(Hk zE=ShNs&`8gWuKpAWzfiIP`{?%@U1`YU)Q$wf8M7rYu(;;C-O!6+M?fwT^6hC*UOGt zv-A4mjHX*3Cp6fshph!rkq?PFb^ZF*-yWBK_ul`}d(`l_%;rt+o;x%w*id~|ieG8= zB==XfCs?1TUw`oFxxeIf=e&9GHix%pRP#t2JJuMv|3~-!9Tu-vEdI55`n-u>1!mPO zFLFG$WX-eh6Vp%Ct=>`ka5wMeccGP>_Ua55n%=tk=|9+dX4mthdn4VC8L*$9ruNMK z!`)5$P6XwBT(xUSKdb&@6ZVt0?>6N*X!Y~^@w;A9e3{Ilpj#jN>5JzC4UT|^+zciX zri-rj)~@x77P#tJ>fTbaf&a^Du_iC(Ma&FZjGt7U)J}i3N}QLc!mvTPiIsI4_g$6d zFHC0`89E;Py>mRlRj)RXkHH~UXORIT!}rd4e|V4H|J{3gonp|frT_O_ztmB=f#v)o zt8$i(6R}4^BR}_)G^WM}3q1S&C3>0M*69lF2c{<9ea1MU(e8%Uo4>B7CtPFQ>ig6B z|DxPq2Lq4o|FwGmt^R*Y*Ea|s-+l6x=gpAy-uwrGKIrM1=vs)f{bbm)?$^6=vHYCp zqI>@TegEF@US`&3!R-Ix3inTZSVmw?{q|Ww;W{pgg_4FMQv*!m#t9mp(mXVqn!i z_5Z1U{m)0A#4a7meamR0%wTX@<}EveFlSN3^<8PjHTSHa3+~uesq=95@B9D%buYL7 z`*N?)vlENMp2yx?{652Ap4n7LE>)UpZ-)$ zFVkatPclysKKNO|Wtv;)$&Y*wwX#-o1TEEJlG)i}^z4zHkM7G`b}hn|QtK~2T~RPC zEbQkg)(Bk<3DG6FliWi;Ei$`x;r67rjaQ1J`{lUQH!(GIoqPFOG(6_w_CJBSJs%}E zpSS6>RAgc{tYZ_VM#_`@buXiT^&`Q~uzNi2ppPS-IRH>+|zsjX%hL>~Jr6KV#nJiQm0bS2iB0 z;Q1P&8k~8m^vaux!_xN*WaqRdMMP~}96nuCW`arU$_cLaKPTJY++O{N_W>)z3KK7e z0}_{-!qR^4;hGWZuw`N5PQUG6zaFmg#Vy?kw+bwr?`Y%2AzsFnZxgn`fP7xv$yNZ-1B?1Ur+vL&A{N7Y`$T!+9<`?dv z>ur0UN1*YP#K{YPmR(w|U%F8>XifL29RFm8ZwEQo{}eD%x!yRXQf``1beD#ZQm~50 ziqEs=aWV2=FZgu>v=i*`Q~UIbziexLtFHV!x%29-#q~`7t(o7t3v0iwj(;21uzh=q z`C$#&(0tD>8PU3fTu0W{oI32E`S?$3-1E6*(_E9i&g}5GRqM-9y35~5;{4IN^$x|# z$G*ny++Mojjkj@;pckJC#zquH|svt zHJN=oG&RFfV4C&OjNtrEE|a}CZL~%AaW+)h>=2JV*8TV2h1svGIkx9IzKQO?J>#YF z`&W(!>%LpKpSb>YnYbhCx}GyJd!CpcymaF6G|R%jIt+K~O3dyiSngD2n2@JE^X7~| zCWgBrYWrSXdvLd6OB{=Oe_#KF-CkREx8It7n=y5U<@7DLzcDD@Vcy)q);oED$#aH= z?v8H@C$F3LsCc!Q z%q7aOpk<}(c?*8~M<0%^XMLqpY$2Ua_>UdapRR(<{GdrZobxAv?F z>m-vkTn9`K?EP@mgW-9^e}86%6YQUi?;Jh6Q&gk=&Vz`G>sx<(i;I(!t^FmreEWs- zk-CK&B;|AO7E7tMv&U9EWZmoMHh(oQYs)hRhB%IG!E)ty3Rk;a-DQ_u|J>mK2g3#Z z23CgmbKlpbGq2trKUHJ>+p7KQ_cRwjTpa(SHU5R%`osMD|MG3GU}AU|_%fs5hs?35 za!LEo3+VibO8z5e8~kzEpQ~Hv7OA~dcX+Vdr|GovJ<07=OHS?1Gc?a%v~VKdsc4T0 z*M+96m#@$9NSd1L;O7$jBzE1_Km5I$-sR4m^kqu;1-HA)_dS}$!f@&-U(&5RQSa^r zG?uKWhHA0F}I5WTidMQxq&vw0uYroJ*`aG1|x#K3ue!Mk-+0?H!R`qsD8%4@R@J!iiQ7|sN1eox619x?PFL3%J9#x z?`&oo6>v*;Fy|pHss_C*~<-RjlF)XmN-u|+5g9RhQ7+r)o8s{8+V$JV_M@5Mh| zoxQV4S%_hY;|iN4b7TH9gxtNMc0~0+L*1$R-;>V2iI!8Big4N~_dfg6J&h%653UG3 zKh65tzR!`&OcEVh*~h2->Uw?2A-H`7_fE6p$vbXTw(1o#C}ieWi!!_ryvf3F#aU|Q zN#S$c_rC@(rZcMSTEV?9>gUvnl0Lgcgcx4TdnmV#F=KsbXS>-bweo+y} znfJ%)_M`tkNm7a#za~Y$Qz%j6ytd}bu87RbuDRw&*Id4X168F8&>H(l3C2dqkHr5c}Dvb^Xic2bG(cB7(%M9$#i(dukDGc>3sB( zom<|jq~&f*ef+;u)5WL9RzxG zSKqwc+s0ra{^+HD{jEoF-}i*yF1o`fo_yBNHD*`!&XX(5=a$Ev*FX7T8SB(9cT^g@ z?_ED&@$<=KasR4ElYjY5o~R&q_Am!a&$S)rmDwMCU0?6~Je^kX7N|Z zHc52yRUgg3+XinAloo%v>U_xbLXdVy)v0VX*R&Pt6ZijJbIoDtUB|PR8CN~O5iZ2M zlEeM0!K5t~r~f|Cl-nL-V?Fi1#_rj#-<2%4*7wVFnj_1k(s@w7r~TIZY^O4Bj;hJ* z4I8)0y-jEr*&(}No9UtQJkGV|97_b{7*vGpJ~CXfl=>+9d2VaNwz;eU*LUl=KHvUq zXNtVrrbXX4_bF^?Zq+)G?)^AB?(?j3uho97of4odfA#;fIF&9%{TpUg_sdq@)Bpcz zeMxJ%3-iep$g~ zOy9M$G*ta=h|ve#c@y~SJ{cFVyPc8T%U7}qT? z_uc1nFW~DOMW)-0`z{>cu%&IH&0;(61=DJ8Gcv4Mv}E-mzC#tZ6Bp)8Ueztd*mUT# zK#P>~%HMx7HygRQ&hebU#V}(6i$U18+nP6~J2`!yEPO*!S?lx1`t)TH7B{E;cH8NH zzVW2Gz&0j^7imfC@1EV3*|M|1_pQI$%n#A20mVW;cyB3-Oq+J_b@*1kNp-hbCag<~ zd5|M%q-{5~p3CO8U*kjLlDV8UA>XvVPHZ|=R&!3x``d=L6AuGhPG67i3=v{36rQZP z&vL)7x@jW^J z&ibcbH+ljXOpPmgf8@FJe_^>I_4U%_8Q;zK|9m@7;KZ!=^G@v2FXLvgc+}UfU-xo) z-OBvtqt4O1ZChe8>!leAdaLD2ycq&)o6eLs@x7m{$K-X}wQl*IY3rB-Gjr?>`OFv@ zZkaP~KK))(Ug7!CB_+wfe%2gzk2$|rR3WVP{E&7W&gsy4O^#S9Jw8*J_; zax(SVJUTH?v+mVO{``{}?s|DEM4zc~2Uxwiks84BCzs*CSGQ`ND*g?ZxD7r%_#pe4 z$0F@7Cqvm|#s#r00?QfSEfomRI>Qqj%IGIwmi+VfJURUzzmnyD-&piib4?(>n^uTps`zv4i}zxjKgZSB_I`gZfQe`}fcF)_SL z-*dwBSyQl4q_@h{Sto6SetorOt^Yp9PyMYX^W~?ttD|Li{0O;y$fKj>@#ez7@2{m6 zymdPx#_-|p>i@-smps)=3$FO{=InV;ysAi+u|bbL`8n@@?hi|!sxcg};Qef{-_+$r z)YqGl)k~zO2d+s!^8Swv_@T`gcj@od+23F-55g8$t~ z_n5i$Yz6P^i0ksZmehH$&VLZi5b*WjHGu}s+FjeSCQUtczIF8^!HtCsu5$YvmK$|n z+F|y6CS%r|=+l-{eOMW6K!=+!)eAE`h&n8CthtCOG9+w!(8BWTq2B8f=ZHQuy0^E5 zA%#OdUOeL4Lcg3ghI6%lcXoU0@7_|)bYh;I;wfLIj_M5@efIx;T=i@AomO?Ow|K^F zr%=9=Pt=YS{53o8#L6Hl5?BAWR9js4_#veS`#)V>ucNo`$E2gxvqgR8T)&>j$Z(yT zX@w+%z#(NPiw6s~)#kh{HD+{3-WFP1niC~6+lgVFy>ki2<-KhT5$OyKcjvH0{5<(% z+vn8_Jf$*4`x_i~H9VESwqvU{!$jH1nlCnubZmI{nuX!Vl!*B%`j0p-G~Lx@_;Igvj(Wj?N0DzUlFxA^RIBJeePG7V za6OD+!l%o*4N)7mg!3-B)3!En*_n+=3l*Jp<11DBi_OKAGEbJzW@yNsTQ~Fhl<&sR zrDiMhGkkw)c4$iYt7WI++uW~2Hysn?-(a?Idio=dFIRipt`+D0td~k!yzj%F+WHUd z^#zNCmn}Hi_aexEZ?V&*wYLQ?luQ!*em&Pq^kV6D*PO)+u-q&D)`?imNeYfXjA{j87I4_9Y#C?1b*jElWd_iS$6rfvJK+9@^a&LGD$)M>=Tg}H|MveL+n418uKshd z@WfA}LjRqPFQfhHmYj25&uAdKj%j{hnP0O%N5b}n_f1HQFv-PHXi0yl-&YhDG< z-&MBgvBpc|$zf$0S9m!iLud4`G;+r|Ov*d{aN2(REzvP-m@_jtY>R_o3S^XVZl?@TEV;>zYBkFu6A|ZW)|PNUyI>E6t9$D zwMzYB?f)-N+?C=I2nxhUZ5!o@O8T zQBz^SyGyERasAKg<>4wTumAh}Ta6*$=Xn_p$8B+$dpY`gU;o%FlqbbsoW1jWVz>CV zZQsM=Ht$)@(7+bDM(ezf#s;%uBTv4h6jrr^FI=h^cvQc*-kC8yS0rlT$(*?_)!EK6 zE<3tw)j6@w=q(F_jO`b4%}7}w*mR4VVZ~#2OU|Z>^@kQPF=S4CCv%+RuD}hE$p^d^ zT6A8O745_^%Kk!_D>c)_s!uKlf>TJw(st-s#Xd$G?Yy_ z9aSyr@MncB!x!#Z2ZYziG8~XTSL-bOUiI){f442^a-Gcf-*=whdy~Q8e5e$MX1o#m zaTbGLd=r-KQdXEYi|<3})@76BW!+gBc6@(-Wy+hv?|bw0qk9h>{S<%qblBQV^&s(U zsmzYC>sust+}ro}ue<#=Ikp?D3<-Z)m`<=JR4{=O9{d!x! zthwc$KJCAo)R=GZ{jPPI#QUb;-BGnVc7_67OFsL*myhezJ^a}JdMeXY-*b;w#IH=* zlCZs!Ata^P$YK5Ru>9Qhr>1i;1nv87b}Dl{Cj-mU&_v^PXBc;DG91{$xc6?~^qsd^ z7*-v>x<`<)Z(cKIP99Bb-34w;hl}b z;rVu|heM{D=SDMKs$$uBW9zZf;9O>g3;(#|e;itr`~1ziKNF=hx7;XM%58DZ?)RIx zkNrQd{GP;QF1jHvN$0_zd9Pnryx#m=pjNb^?pxK=gM1Bv3=CdU`V7}M@=kd3cm0+K z9nT<{$-9+3OS;(^{wcQ{`23M2=Jqy`i8`zt7K^WPZ4lY;c+XCT1zb_b=iXZp(zBg~ zp+PNT#reu}#bpc)f(`3ym+&9kcKI+{{>z}N(V?~xfBH84Ka*~E*?-sJ=)=1jj%WQS zU}4}``NYiOo#n<#W4Yfqj_bWEdTzbGkKJxVF1w4QP*LE4?-QPjD9OB)dUa}v>cp2- zf3GaJ+xnya|9tW9xyx2x7h~A)`#>a4FW7S^kI38vOh6*;5JqufR z?7Nb3&{}GK{hQ?a>$@Y$5A`@PoK8tQHRb;X+5XxrcC9Pfh3B3*>`l1yGd-`Io8ifA zE%_}wCayg4ZoBH-aE63SI&Z(NEn;PO%f?WVrBj?NB=>eE|Mc2<+>9Iyum0RhW6uwk z{m;XA<)_om!^^AItV-|wwxg}w=AhV0VV00zyOvE+{B6OlpudXg4*TYS&7X}_<`!!+ zaUJ}z=KAHbV^>mzKJ%{fRux=y{@j|1$1=x0^u+((^X}VBqexMe+WG0pMKRF}QjNbW zPK%s(C%wkaA$f*lTfhuU&c&~yOJ~m)PW->aoH2xzF*DQIdY!N08JQiEoi-eie3&!+ z(XFao4?7sA9amz~h_&t}C@kDH(CpQ{;sj$HIWt0(5iHr*KyjCrPgKD)K_w%@kt z3{DFTg!ni)uI({W<;+>KfzSHQw!LOd3JvxZZLc2)PoAeW_nF<}Pwn$R%&=KBmB;RB zx_|7SBeM02qN8PH#Q2?kgN)e^7+%S3Rem3Nso&D`-;()JTgimT^WzrU^XKR9~n{^Z-& ztiQeAoST1idE&?QPTr<%@r;R+rBCKh-!|dW&$GAN9vysSS8=-VhUv22aHbC)>zLo> zMX#UApShmnaqhv8YiMP2G{x3;j%b>Yu$AKB95nSDXx(pBvc-eVIPFN;2zk}_BEB#Xi|juU6< zGPWmQ_n4h;d;H76uS?jKZEr>0zWdrzR{y+h<^#jH=SNa(=V|-09IKgrPyhMWZ|CRg zU2^L_np`Hp0<245SaN+QvJr! z`R}?|7-nucX1jC!&Zw4at!B#tlXZ9+o?CXTO86>Q^6(e_fy)5&)IgX?kalFgjR{L|6;cqPm zkrNjL6?>HyM{siAOP(F7rTN00Dbu!HukT;KGxdbKexu%h(fsvZKi9Eme@nl( ze!gdsueDCcA(u7Q&wfu}(=*?zHQ(6H=$+<kDdt>E)U0~nN)NpiPSPZ*z@}k3QX9XRQc3GL?6f^TmbnJ82krHZWHvUYy+4r#M*n$6{_q^k8OG|#S+*Ye!b+P+bX2Y>R?s}T7yhpCh zeaiCNL3}q?B#9AX85k58JY5_^ww&9}$S`&PsqM!Sf*4m{nCsA?zG8vC zRyjihJ7a0%g>U~arN_S8vXe=?aL(d0O3aU3Pds0*)0sIvBk|Y2?A{81RsKrYooD)c3z?^0VP2G4w(ZIKykKjm*rtuRjwncBJXPi#IX!M3Vix@|BJJ|@Y{k%Lwr@zl1sk-o=5_9N@1DES+vK(%gF#WDn(cEZhNe|q3VXuU&bb_a$2EJB z?T>%4Zw2Ojo~2N<&h6diQ#NPTGc>jK-Tv-ZzAHHX3zNe0>L-jV7#1k`JTrT~TdZ!? zV{g_;35VV<^yfNow}L_Ez1QDw*-?9@&0$z0^UGCc+T{BhQ-8lJ-(PJzkNbSS<{YP| zc9Zk0GVFdVkgGo2RF`vlf!z|-%}=wRFrJw4wRdv(scMl;JHN49<_O=L6P31Igu!C% z+o|jfIa;i9YV^p23uV!NZcqQeKXkgA*ozaF zS$l00FAF%FE0<0FtGkzB!|N#BKWsiHLlwU`?s$EOTQ7oxH*(l$*W zn%i2tf>{s$=J4@icHWZX&(iYI(s4E05{5v_I7hc>=bl#16rbeK{QKwHQ;)Btf3e)I zgVIB-JR!6|Ha>4qhYPv zYRYQCIpvGpllR4*voF<1uUP4%(c1EHXN{am%X5cE_20|uuYW%y-0b#Y!Hj1*o2=^Q zYuj(EJF%qxRPek@j%-cbarc)5Xun@Fbt=7XH$1|4DiU>%l&OYiXh@ zl;v9QvohR{xx|&n8ZWxz(^iM0AC#^iE^qOwxEFoz)3klXs*FpxlzvCNTz5N0(bq|~ zR=wZ#{6dqU6RP#U>-T;Bf9Kcgrdy>4f9Pe$scd66I{!y;gS(gE@nku{5{36{=Up!u z@G@oE&N4oBqzD%Aake?|xP5YKu;w_~V$4&QdRcY*2sMy!Ot#BISJjEvq zUf(XYd^Nd9x!(AhPkl!8X)E0;TOPfhwW7#Xb=6k=y+RBpj6WrvON_n$?!<=pHQ~jJ zUli-xT>r9I?!h_p?9{{8`|H>LX<8?EVD*Mzd5%@Jb+P`%n_{G9tGxL2yz08hmPKkk zuMd2`vj2D7-&f(^V;Qs#%&N>jR<+AzmG>n9rZc|Lp%0&a-7-JZEG#=~-%$iABR*s$9% zOOzQlWQw!ZCj5zrld<}I(!Xv~zOAyDZm!#wIm`@_PEHjM%v71@9@5HNc-Oaj+x%$` zT6)J{*7P5%EoNX4)3jumJ?T=>yoI8BRy|mmEK;Enuv5I?;5Hw=n~l%7*6%6Li>>Hg zz-ASg(B5LzB{4B%yYj)zs9@yx)-PTQLwd1e* z&|H1h_t&|-rxfRJ=VVy%q3X=uinT&4H9KT;|9mUov-fgZ=8ZM&JZ|Zc1+tG9*E2+w zv3MM2Vfto#Jmz}-UDK(CS;wF6*ctx7B5U@06Ss%V#vdL^?p2x@V!_0~X<_*9gI~ei zU%Y=4)b_d_HA;))P5CwNR}Krq%h__TquA5+8656D*j+s7Z@Zr6e}j^k#TT~!+qeGc zg#46%J4cda4GYSGrdv&ZxNXl~28MUuO`0xqV${$2UH_NE%&>)-qoA>0Y+|>rO{FTm9O)FDOafbFXe%wZ-E*6T=(z+@#F7x}Q(G+3r+*od4?KjMw>f{Erph+&rzf z`G$P!A2a>~aZ{qWO#Yq!_#;|WhI5M<=hcZyKK++&HTC!8i!)z;<*R67V6Lyskg#9m zPg@uV`+|UzoHJfm=dN#B!Q#16!szwBbDGx^_b!O}$dF>!cKzCOBk>Ome`~*Op1+rw zK}F%LozwN0)tVc&e%TTCk3E7R&SFjHzo(ozvn#fJyS_(gkB&y&n);{HN^Y^lnKz!F zcrlQ1=RM`?pX~o$w*M-$C;r!^>AwuNRmNoWS4-M=&Hp2PP4R(-ZQpE%hU~*fjCp4L z5@LzDFO;CUrsSt+IL~XX5QYa;jrpETHJ>KWzf&ysBKng1t`}zW9~W1;gjX^B+VXCz z-)hFFm-{&xHkh6H8FcQ+Z?(vElhproi%Uv?+5dk8LmDmc1+#B z)#z{E57T#-<2u*PQ42rLt^EB@TV}OXaXIL|9+f3F*ALzoo$#`2jo6huN4HoFQIpg z&#Pe8-q$7T^vN=?o|R+a}BSDe4Q zaE3a+NVfRBwA)H0=`vsTSACiEFY_m-*^G9+V_o76_Zb=Oa~?dHtgATTU+s6TZTrtv zGwd=?{PgO@+U8@|ST9`iTN?HC=!s-5UpIyWJHPKNtxf1vTOMS0^ppkPzw$FVXL}0Af@d!-?mM>0==Ro?<#XRJwa-q~WpPkc*mtEi zO!v<&htA1i+}v(#4iauB*u&ZkiVc(BDLLM?w~RcNF{efD`Q|n0+9C@#TwHWoLip{D z6)GY3U(4&&&D7Vu@00X+=g*x=yH+hINj})}Z(7e>ANwGkn(3#^k2CAqsI=awk9t|` zHS_0|Ukb?wn-83fKjIVI*e90vEkBPjmznviU2M~Zw&&MbjX$wGF}~EQs=Ip9ss*c< zTJ&U==TwWCygjf#$93@??Z|uIif4QOYIu3Yfi?SicvhKw(T7L>zSldfUsHA^(EY34 z3pF{-e}b~YAH3Xu+p;q(P!}^(C|uI>s(ed31G7LbS3~OdCv@zHF_(9$)Vqe>kT5&4T)r-}WyW`J+ImMQz!q&$@+;`LpS#s2&^6VuqZ_ z$5&ors(X4t-nl4L?uyrhBX2y9G`sI=%Kn&Q^v=Kb$I4n8mENDL{;rs3oT{|vR_Y4| zmOBqWSnI6Y^Xb$%VTKL9a$NP74?Ea@*m6Le;mDil&`sZ_+AXVDYjkdj-E;4m@8@KG zID2yT#P$PqXOj8!!1FDyNeg-ugPR*X3|Wy`ZI00^VQshEz7;nK9c$w z$+?eX+7->wlMX$LySeVVg8T%@Imrz9A(n=d zq^~}nojt>J!lwDpQ=~&3`zq|$o5wf4eo$NDz|@etXLbU+)zw(uFs zQLy$l<8Faj+h#5CUT&Aq!ceqGMB>82sOegpcdf8^FW30}{Qp1aZRfR{y2fwY`M*-{ zZzA6db;-*S(kkCS?0lbmzi8H7ndW|x&mJ4Dye?5*HdRm7jY;FZ|AU<(|6YgQ`jNNZ z;b^+{l#1g^Pm6iK*u%R(mElDC=BKN|BeIz!%wI*O&%Ns3y!y|k-oD!`dH2r$FJ?$E z;lJR`?aDAgu3=)q{Kf6}XV2xW7mjjynOs}<=dt|z^S6526KnVCJfE@V=lq{D=SSKs z3XNZKf&X=eHm64x08Qgv?zhwTD|F7)R z6`Tw)`@hba$<kg}H<{A0CUw3S_L+WHkgGu|N85x!{I$6jqSh|OkVaA8) z*LQQ2xGrU9P@JIOFI+Z%>1~}$qVu~15BVqq&38&)mY zJVkfQiQLv=MF#Z@X@(2DXN*@}O-c%lmAM{M>#HBx9X-AFzf$PE)u;CuHS(M&Rj9mE zIj#Ds-%iz`DGx_I^&pBPrx8uiOkBwP|#?Li$wyk2^ z^^C>nemKJhmO}6BHTH`+6Ege{Nr{+z`FExf6Y!5c=Qh31Fy#CpQ)IJB(U0EFqU&$ArT~Myp_*~}s=Uw8- zpXPi#w@xx;Ny*-$j10ROHZkY)dU1=Fa8JCexj_1a#QdIfwks`W?(lKi;47%~wpXWV z)rAtt(>d&0y~0y|o_49y6Jfe~bdjn4!9P0f}M zJ*~sG1>O8G_y6@4_qxlM)ce{$xzAYk;LfrGsY+}7C-rWa=eGWC#JQNsO#Ovn52J6( zX@1z#_H%_8bFs30Z&F2_dVTJq?`FTQRJ;CC$WK}(zQswaf#LbXV?n%Y)j|V*EN5;w zsq9gx^Q&9E!S?=}ziNMyzP;P_Pjzj{+HeL%g$24Te|N68-#*nkPLADX`H$S>bIcn$ zmwkG}A)xVML&yCe%goEJ7r%W!fibY}?$?`q4`y-|8pi!xAII0nA% zq~9Cdj%w6Ap7q51_vYI_pIha&Cq_b`xL3*)S-#&Sp?>7W)(b@?fzsbMJrM?(nh%PnZExr%PGzllUwwafc>ERN z4Zatj{WO|?(DYp=(!q0=rtm$Nay_Vv&1{+cJs(Npb{mnS8DpRuL%mUGGZiYoS( z9OZ{s-DWr-WbxL#>&KjVZ7hsAho9&$XNUAKxZ3rbt`MsH^H~1=_U>6T)~-A8)1P6& z=c!yZlg~_A{!3z+&AL5x(R|lD9zOpITJ^GH9n%awZl&|fnHW;0*FLp%Wc~8;*D^*) z9?$FgZaT$>BJLcWc>W#>Lq*$pALb5ANma?&HYaMOqMun_IJd8?C+9q4KxD?%OwO4$ z4-|Z71-;Db%-)!J^RxBbri(%h9|G338YtBErLW-$SJ$z>t|HWNYRR{BANKk+oM&Hd zVBPP{aA2>T*pc_UGOQ+V-FAX&t!K~FgGJwu#tDmeX(KF*xX*ka?Z4@SNs7E4y{S-!m}0S^szP@(TAE!Dcg#9C&r+7jE&CWhQ;kx?3mj9d#PfC9#94Xi0D`q&eswuXrc{MWe614Mx=B>E(CzlahDE8r zSHxY}lYV7;Zd`-i|H=voiq2WI%qnH-$vMy@4k?e$ew#43;~VFeg4dzKZ9al zi8AzLOg6bypKz7)&G}tq??Z5rQ$3c)GB7FY+wW)I$ z6xQDD`s5N|$#A|{Z6CkT;(7Zux>?`{YJ|hDt6?l)E)lyT<&*#tk21q zKlx{lJyv?2^r^UMx!#V6><>Q2|M>H0>-yT<{=2!}w-)csY5uSI((`1zP>)-5<$~{d zj16z4FRf(I6g}+G+4EwvE{nq1m&)8<+y$8=7#l<;{QtoJ|3Wd-z8l{*tk>RB)D`oQ zVNG9b@27?W8OX~t{0n1CkS-ZEc>M@Cp9lT`CaLrnzsHK(W{~-aXa*KJ4a|{$ING%v{S$# z>SyS?2Sw*MGiPyZU~16v|6!XM^8R|zvi?^SL+jP5DzkFFN91!dJ}7H%+qTpx?On(& zP6m&J_VAbLyB4>dyL@=%#y!jUZ*MjV?|=QW*|odqO^^4y4__h~(K;fr<8Y$wN9z2adLH0Zf=TiKW4?u~uUcmLk_wHB`x%~-?!FSoW?ORXQ%Kb~`IIuWudipxu_&eQ8c{vh(i@O``)-#J- zvu@|E6T%D%GXH+`|KBnFc5IaK>GW%NB%ZIf?7zN^@my=ioAQ09Z`%l`GR?31vRM9Y z^w~3KZ<@*7ny`N7^Hr(GR|RkR_q&!iWZ{!*{XgUQBKAqNPAHQ5 z^mFBmA9l8SFEc%>u78xZs8qDSb?()VX8S*fkMhrAdKj?i*P{*d{$(||>!)phAjK>9 zzvcM%SmpL@&TBqooLRfpO1#a~cgGrq12@cma>^X^Q4M^Z@aDw>lYh0n`(&2p-euaB zU{`ocuS!Ak|3u}fZc2Y*p87_8{Zu5?a+Cde?vexHJNblp!}r*5NS6G(_^ctt%;F!f> z(O|JqDM6q{Mj`Nkf#l4W%kKZZ8G3)$?r*lCrTOKP1>QuhzW(<9-q7XeHk`kA-&XEc zno`0(p&6Gxcs}fAimdz>__>#%VUeTIw~rPNWTY3=U1m2_u`8~Bna-mW@~4?4Ddm#j zfsEpU{dd%7T23`n6g-*{@ zD#vwB=gehX{7(O4`-uzNZ-3i))p7l{U;lQ$zc_1cwqkCfo!pb_EN9J@YaHTXWq4(4 zb}{`?O{(MMtrs{Vw&ZV>3w+?NFoD&ezBo!@!4p32TYC>Mz1vrR_xr2G$7k=$mSbV? z+4C#BO1-s_V~6$2Ba`o3*>`YKURUz6ryLG1)<4?1q}5%U;q#HImpXzOE_$~v$raA? zy5FSAxS?tb>!wH39$q>7b=KpHU-vNlUc=z9XG4C!8^eJ+-i+PVs>}@*>X#ni<2nZ2LamhWC<< z%m!Mltf_5UjNFb5*9`w34!FUgaOTBseZvj=>Uuc;{Hd1TA!&4Y+Psqt3sM%ndHwlS z&3e0(#*0xoJ(`Cs_E%KO3NLsZ8qId&gnT5!FNTI^^Gug|To81Zc{qP_OyujH9=5im zLfd=p%cn0>mh{;2*!YMLql4dREzUVR*ceI}w3gL3ez1Eu|NG2m4!;-LseM=I|D|3v zYui3494qdT`=!tUaj0~41z0B5Jt+nlYJR<{3R#A?d!G*op_`t1mxr%wSl1=ErY|RX*WAgjW7O zfB($xYiV+Ai|qb|GcfGc?hBqN5q15)9)p5Z$jkfhXQsLPFdS_%n7EFQ;ejNB{xm5s z<6xdNF#!X9h679!Oeg*@7t78F6KkksJfJ!~=FzPEO^K;~vO+-I4)0uMvMwS&?9b=hC5_y2z*#=xzZxZXP6YE7TRxF zcuV9%QGB;r@tVh%{PY->?|yJ8bnQ%w|9|9uTHDpxHy^Cn`(wj3-|rvurXC5uzr+0_ z?=KdC$D8{Tf=kx^T&#aW@>y&B2jP3CYiqpTaY+bqD|k7R!zVDqE zyk^1dJwJ=3qvS6w_xKw;A@Yuas)FH>kVpAT?fC!NtyWbqdVJ!FWciYIMeajul4m^K zXLmq()}zV6lJ=ih`d7Pb&Cj@9lKgz_^YX(YPd?qc)^%`#tOLW0Z%)fjZro@8@5iZ5 z)&-Wv$uA^1Taxcp`D{JE@Ar;lH_JEj8K|#G>X~13_{pB&5AN9}DL0F_4>noF`d|E* z!kh4FnbNm2RbH43Aelv9)>L zsh*`cjnO^R=Z^Bf=S+GWX79q+T)n>Un<;z#4n~Rn;bCXmS(oZ)-CA_!Yjn?cnVJ&^ zRLS$lE{i<% z3z~grwPnZ|&n-+GA}(@E|8p~NsJJ{0XqY+0;nA%nUpmD<)E(7%u}4ItRrA2bln*QS zpWwT=N&Ap*fyR7O+0wZaxpj8ch%S5Rx#8@REz8dQG0_uP(B$w-?^o(?h6a;(HcjJg zR!V2RX0O`Px%K1Ye8Ux<%Y;*Tek?L`XL7$kk3(l#;h83NJ7YI%TiV42FP_5EeXp4rKHYRwUvt_&Z|7BA#uUy1U)S7n@0Ranu6lBJ zOxN7)vwnBOu<`Q)oddee42Em>iF*qu=Pa0R$Z(*_VKIwSl%OI1kIQmGv0vBj{JyZ$ zQy}>6qsZur)>C`G-@1KS=_J#KujbcVn&w7uGdL`3wNX#rGV{5^nThYOn)z&EVW@g( zWq3uV^8e-ef4BU)&~6uUxAOR0zACxeCm;RHeQe7A#U(JD{GEIv>HgnurjEbG)-ykv zk#WqMYlab1i5tTfg@csl*{Kt;!iU; z9F#UuIHDlD`^*VL4ej4wW=i<(V5xIC@~i$$!n`wf0uOo?axUv+aQOG@M&ECq*$#?= zhbFT!q-X{<^7vmim=M6k@G80Q+4b*Ue-l2Q{Oi73=jXrDde4A`oz>)Q*hZH`|o zM4t-CM4s-bUh5Ig#vpU&=Dj0FcK%=e?fc@|lhwylxBq*zOXugR(5?0&3jPca9vzM4 zc6gU;GWncwe4xjNeJ_|KZ)@9lUx-hiqxrS3aNhrkpI2+^>P}v;vz2@IR7PV4g*4`Z zpY!+c-G3|Xb*_!-gi^*CM;FH&Kc=DGP%-iIxnr?W$J=ha?3&iz$J&t9TYkTG`~Gq< zh7Sjr`G4KyIWAYdX1%N-KTE{=^ro{s_vbD+_{O-u{mGOU$zAm(4K8}OBN-g-TxN2X z^muXi(u2j>5vSVUbu!(3sk)|6F5WY7iuB~Y%~SWDE2}*4lY_}VieZ8Mz5X*(ljK-; z=)9b?@n-7vCfPOjzV&ZQNyu1Gr<#ST%@J!bnGj>AKQHuNsZVtGG`{;SOa`_S(66iTrI?)5g9LH*`GN#=njWlpMc%JACGNC z^D_2Su1{eQxErVI%+1sD^Iqljxp(jMT+QTRn84+EL4M~G8}04kDU)hVj(pb+yW&14 zZ&S_WS4+!+ln$o+I6ZY?bHkeX>uXp1IMulzK0i>le9Btxo39MkmwKy(Mp`p|l=MlF z5=|~;2r!+==^OAdWNkgO>GoMuUnr;P{`|UrE!%#^1r?=?4XHUZ%uZPeSnNo7`KylW zz9PH)qyO#V4$_-r9^L*h`G)$lNY|+aGygsKCI6%9-|hW>qhp!s*u)vs>hGAe%T#%k zK44_OrP(XJJR}*P<7BQ-Qf0E@ilX1LAF(XUIO&-J0qf#4guKf0WUHRVAzQs46T;Bfh zQQDl=ojiAik4yf(x81KY#`2ibW!L*{dS6endYrp#e(dV?>HA9i8~nbgD=Hp2mlk?6 zL1|4S_q)!OvsFL1-b!H8U=jT^uh%RpY;Mu3m3f>F8X3vQ>(UxK8jdOzzO#I8=IAla z{LYWUzY9bz|63BP@TTlusyjc!l2>tSbITzW21Ab?EW=1$&Nu z%6V!svH6LS?(x5ju?LqY%QSE;&Rn}7xZyRZWwL9A@2X{9vJDj{@1DAqU}^RCOZm>F z6AP0bMx>4&Xmk(&?v30}SEq}(!vV<(rJ&0}cz z<7N0kf3}9ini;buwAmRuzZ3q`%(2EW_sG!`Z&R2~zV)5yBz1O=zXcCtYlqg>jYnow z`V~tk`~AN4xYF$D&Gh+imt9lrjd;Ce>%!Vs%Y=RRom87$A`x{q;nmrgOOt*v9NRNn ziJ4(VzV57i_^51W_SKpFISMq2MnDR;B za6f}XcGpdbvx5Ka)&4*FWzN8$a6nb6Mnx7%Ve%pC-rXa_L zo&GxXup zTgJfPlF%pmpgaCoQt46A@GF%s4$8kPp2*;^cmCRY41w>y-Jae5$C;l^Meo4ob(bO~ zYkzOBp5N1W{%+arv!)-O?|<;~ z?Zu;|mUrI?UYxDFr9b!nS{Or)9D0-f{AYwp$X*9JYBo>8w8QYSU5q1-=~k8x5Y zt6NPyCj$>B2dCS|O&oVp7$amE7;fzP`|b7`r^l98{qx?+>B|~3gqi+Z6t-fk*K5&#YZ$Vabj%I}JxUL5T5tJD zYF5o^Mv)gS+vtOMk-9d7ORkbLP|Ne`&&ZW4(1ix`&1niBBIh{ zHtR4f5d6xRC~27UI@J}>!Mzw}xD?ziIa9;@z4_-Q;n z{C4jCxmQc?-`ZOD;+gsP|Hm4SUgDkZ=Q^8NMuOe0Ue;FY*`ehX?sLxbDd*SxI-|Yy ziNDRmBd@-1|5sZte}AFk?^z~{yCpZQ=VX|m(Es;hwejDq`mDd{rHoG$4&2duR$sLK z;tc&=ADp~r?^#pqEzY2DM<>*Bhg}Ef0+UaM$K~Fd+S;sGzwyb`ZwZ~x4{%rbmB>7g zxTPMZoyD}qq)PMc!cV*BZFq22_ie}P#dGZ{k9R#Ok`|uxwkG|$^W=>a=F2m`+5BnU z!YYH0vXOCLBPSeVXoyjN#Q11?!!A4Sh64@Xc4wF{G5q4P_)yF~>z4T=MWIiHd{h1W zZu7C6w|;N4yT0j{=#~S{IvJX$CbTW}JyEML|FE%HUE6XCkH^lMGYMqU4`{3)v?e^W3*p?|cD&+O-?=&hO8<9lUwb z%ENv6r5`8p{&~Z|#LOu1Mf#wS_R^1in!Q>-9~f^?yLB&fA7@TT82`W6E}7Vrec4R^ zFSr<0Tq?e6_PXwLiB@i#bFIal^y{(Z+0U7RH);LxT^@h(OZ;-yZF-MHT-5W15yX#|LnN2%w*TR$wo{Gs=vc&m9Ko3=A`L+jj>1Nk8-Fymca<&FMY!%5G&|y;uGI zuI8;NzeS%bGd1k^nC^OUW?tLBchSf1_0HL(nl|_S86VXrTQgm|f9_?HQWbA}VR+74 zY{^8;3vE7IGwxj}K5+ciMk!wB*UZsgQWuu3F-^9EPmubeld%=qyc zh6QI=pMROvD<;X<&>-ma(QkFC|5SUX>r*-xS5guRGDE`Au3JwxowxgK!Er#=oLv1=#Jr zrLnW$oDb>p!cmDW?Gb||V^gMY)|2j8A zgKx*lsrO6fJTYiq$!u!)e}3t;$h?33hce_C6jqzDnpiB*uv=*SPHj#ud`CNo!Oblb_5TyU(b;Q5!c^y^QViV20j z`-KkNR9bwhk&A7P%gO6u+zbrUCF06v^D;8byS}?}UVYcb5C2TFMXy(!I%>(pVBxx6 z&vW0r>*xMo+rIDZM-lt~KhM{kpT^hORjfVX&_27LPbTkmnDWc?i1-)j$CEX08V6g1 zoLu95k!z`y){(Ujs$`fXewyDp9@UcCwWCk7JH$)-jdio?`}I62n;*QA{;jjeJ9&oC zkJdE{g#yIoujdQ0Jn?GU>#+ak_lsJKD-^$aZ#ntv|#r=0#i0c38nM#Y^E!SrFurd09 z@V+p;Kh2-6pJF=Tndib|+`c)2VTOH2#`W0pwSJaAMb=B1ZE0-RVel7cSYS9!Vu!@; z7gpQ>xpU4WJY!^7ls)fa;ngXn$Ak(>AM-V2ioD!YS$Iv`Qq}LkY};R6t8aY|v!1&4 zypwq@=M0W#lOBkleXwY;0ne@dOzg?a4$t_YIKlV9{31~qR~w~1pdxWu*1XaTrIL`Sqm(k%#{GVk%`)d@L8djPF30urna8PUDyCl$i`iMYhJoA%Q zOE-qgVS6%|)jZm#Y!dJ-*rHm{VE=*9So5RoGZmlyiIE>|CkyJg$p2k1e`#0ctL&7H zi5oJ!D`(zO_6>M1n%Kedo5khcl;CC48h%_^K54)olrQPMSpHGJPQ9b} z#Cx3u&%e()@PDmrQAuTSmC{W{?Vy);e7GePE5xLpFHp&1Vqp8xS0^leak*^v{z84O z+24YmoqtsNLDq|T@=+yMgWVxT|7YlD%sG^NMB~AvE1^se0)PDaZ)weF?)iAqDaWO* ziBSw{yVk$2`k<>>vMoyq=V;YWH|K8z|de5I)l&UTtxDXgNg|vc z42{2!oLHP7z;VJw-P>JcL)G+o=NX*U>{t{UEkvSTGD|LHbzzQ7daBZI|IVWO-MxF} zlV{8+qt!{UCtm3+2IIl+!mib=c9D+Ro&mlqI_eV*QS zO#j0n+xVLCLhCeW`2g|x3%Ym7L*&!7izj5Q`{Tg zy8E@>>WK7k7PqSRH>~V`y?7ia(H0@Xa?N;NVD`UL+2?6L2|ESB${IA;I?YVwmsz^QA zy57(o)N+ircG0Z<()cemdy3A}O`8sUUh>pk)ryJX?EYW!kH45)UfX+V54N#!Qbdcw}fZG3ctjzuI7Y z>m-kMR^QBsC+$56s!IE98b32IG;+->sQG+TCd*DSMd`n?gTxb_v;7PVk2K4+a1{RO zW%-;?#KJJ4>PtbfRk+HNjs$OMhuLRmrYkq9xo^DY827a^*R1Ur(}b-PY~Igw`(j?q zr=i^2Vd?PVvp<8w^MEHiukZRGcj{@;uZQQX-`|<7cKmbFGgaLMF6xDHU;b4xIBbd9 zQj*y-d(WTKXOI8;dA|PMr**&m?|-&4*Y6W+xWWE{^E7{5*`K$!R_i8YU(>vtHK(3M za3)vAf0o9ps*U273TO1%3>g{@xPM-L?!e}4HPaYtBQ3I$w>Jq*{c5^!_BunGD27in z#M~SY@_-pb#%l-G_rTz1|8h*{)TQyrW^w;kF zzjwb9WBwy;^6o&=^1t4nubXe=F!)tI@7uXu|LT}!j2JYwDr<{uS-2(fuDbB1V<#2; zLlj+acHOFp|Gz+XZjgrK)bCYy@@q?G91MSU_RRi@KNG~{Uj}EZM5@Z^1PB}tc@!VG z;5*~XN=63PTQkCsDZSo$=lQGtA8iZ`YnGha^SD~{$>Vz*3?emaO0V8}@vkOgCNo1R z1FuZT$|<($`_(#H{%fy_w`}2w<5|>ixL~T{mP)txoiAKZL~-~!O?=_{DJXGLMq>;I zS1NBx)0IbQyk>eiR~Wn#mZk-4-LGjJP^WEs-~CPPXF*1<6t`NQ-SZ8v>|ax{W!)>c zRTACZt}d2Ow#@WBuG)0)@xPuQRDD;>m{GH(U$sH_tH<#}cl4~T{p+niEU{^7%cRTVvqG6pa~Esg zPrh~_$@*1E-1F;uo+VuW^OAi}%Hq`X886gbznbqzFJ*A>yDZDZ5ZJtYz2#Y5;|o6Z z+0qO)X|K)iimXg{)hHD&kly?xC(+RnKiD+6>In08dEF*ER0 zC~?dbxh5kYT-AQ&+$u{U-2)Tj-Tqx$F5_}f+Hu{r4PXA9IiAicv2@#}ZRc&BmmltO z|8|mLpZhz-4>Q&6I;SeAxi!{$#isgyl6~LJ(C|^yVE+4!OdIC?i9cnvr?pT!H=ri0 zCg|wzE9_ryzic|(pyV9JuJU9vzlW60k%e>WI8EQp?V7Z8yQ}={rfViUt-QjS=6qLr zv2szHJ(rV=$~zHVQ`yv6pK~r(o(SFk>FSBRFA4K1Topz4hZ_XMcV75*FOjuim9?e* zb$VFKqepIhrSIt5+0qOaq8ruW6z48j;v%4i>c3o&dgTuW_kN1 z)UG%1{mu0EwX1~vtxm2n+1AF!RPtu$t&>aVC^JlQdwDA%SSsTDNzn!-M*$5_~Lm{#ZwhAUweA&3-CV0+2&%v-s zvz5`M*Hh!p_7dYtr65C=fBU{%@{V@c z8Nc7JkKcMFCO#r2jde%jHeJ|S0EQ|2$7GqE8v_Goecf=Ff4$l5lFPFSZ~R;H`AxQf zL%rO_S50qT&(7Pk^4AJRfues`*9X-;ej(iZz7*fmN;25&W;F-pYGwYQO*BLQ1FqsK%lK*+a z{Z7*Ly={yPd3vifh0-5B`y=8Uz{C(09U0fo!0`IR+xIoM&(~gP^#4DZ;Xurp8r?f{ z{C~@23$do||NAZb^WV)5(<|k7rSxm<*e-g*l4Cb#hs@&S$caysCe*}#=>PwtUp7wp zh|a=!(sIlUOF09iyPkl6bD9Y$L>!ic@ zTv0$m!g1M)P3K)CUfQtjO{4eAz&VL2Wj7GMcl#+m@B@|Nkv)Q`pPAc}(s--M#sxCjZ4UR2Uo{DrLU9Xrd<`DE48~0gg4j zj13mwCUIIbA6xUVmy=;>QQ;1u=e0i37VV~w*RE|bp2@&q%lF`<7=vh8kiAm>)Xd0# z3GX^5zWc-Lu#jm9YkM^3%iFgWr~Ez^x`|=RJK4==`p(`C{`$R=ks))=jslir-kEz& zc(IO@AM`b4ZZWTQ@c$kB$%g4W#{%&=_5Xg#3ZCLlZ1XyMx^k|nc!ROTWf!l1 zWny}AAqUuc>R0FF#w7U6`f-Be&uM8L<13{M36CbNP@bgD!(x8m@?BO227!u}e;sZ1 zf4^Mbdx9%GULbltH$&Cr)2mYcwVd>YYX}M1v7q-h4b+A9uHRX*}U|{_6IJ)jl`~I5$zwfV~ zHhXEq{Ux$l`rnQI97%}#&?I~7aZ9N6k>BSt3w>AKf3c`bt^D2TS@kRdXEMtebs~f2 zt24=;yykvQjr+%pGSP$4Vo#QSJjcZFsW`cT;oqsM$ybw3O_%?3)OhReRkOJwUtM0d zE$+v}jU|EZDRB%3=A0@&^MCW{mai2b7P4zk=9a6O`_lCMZ7T)?d6R>G{y#I{fAi_m zHNhKMm-6f?N?0IczWdP}uSmZl&n)|t*2tr+Pv(WsnfheMafTy@YmWIW73kIaqr3Hs z@vDE%2lh0a`)t!#RdYP8{eTF^3J1aaKWs0a%;0hPA1uH=#YRlk*6i=+SwD{7I=$b2 zr$|-J%-Xk7+OuCzjkJ&W;qqPDFhnt!^TfCJB@yo1K0J|VX5HGoeXm&0k3GklXYG1> zHu(8$_0KigHCdtz1*bHZ@8}e{by{tkMuJz#3X_#5Ua;iN)MmBJod02V#@zH@5^4I% zyqPKcH!-YvANk;Q>h$<`b+u;trjNbD=exDCK3K^9`c>_ed$o_H`B#@2ZZ;IpV_3B3 zyzTQjulS6A3+Hb*aOUf-Mf)wz2k&XGOkHn$J-^~`V%-V;>N#HZEdL5C56)!MIigXw z^JkUszse14ABuV=%}~!4{Mo_W_Kd}(g4Zs`HRd$`EXKsN1%@xY-}k6*kkj)W+kg! z+5A#MHM3@xwEdR$k^^e&_I^9pY~B&y8GNDeKaR>liGUig31*EK2L z(cas%Xtu$B`LY{{^PYa&u=CNU&>~Ka2@zbJpQ21=zO>YSqt(J1tNqU5d&LHQ28CHR z#R9R(Kh9rihmVM6-Ryxf;zkg=PvFA-Hj0{(u)Bi?rH+bxMVb8^pJYCv&mgn!J zDJAD4Bg4Td>@o!n>C8Dh zdL}=S^GvbeVUXBwaw=$weQol+^?#pjzV*|AHkVak_)wbLca^-`^- zu})}xc553$KnAlogRA+1t@}dMF2?`s;jqan7gA$7J+ba_b(lDV%R`Rle}_`zH$?pj z5BYwpaF6P1M|p-7t*d)yYbE*KGk2ZDXZb~7z4QB*v2*l1M6I|L4qp|xeO~R?p12)h zGaf7V+g$3_*Nye+3SRp)`1QQiEPIyKOyHIMSo{3ngG(o~oo}yEKNS1yk4}y;!-Qob z_vIyX;~ww(ZNfiu9t+c#-&ZOwv0So`WZY0NulO9hEpzjsjIT@o-kBqL(Q0P4!-37# zZ+8TL1;YqvaM1J3b^=S(@^b&2@iDCb_xAq3wZ|FOFf-iMHAyY-I=2nBz)m@mkLYssS8h8 z5IN(y#I&Pn)0`dbGc^9MTD@*dSE2Ye)h)@pof#T_3mh}35N$p5=l#^);pxIJIjuvB`c=4Zk3vnRILn*7u8IUz8Eok1f!D)jQFUuohD$y1NX z&Rl*i`s$4*!oAt63sb}$Udmncbv5(G%G^+?dcs9H4$#%ixiU$NT^JN)k zoM&~|%g4}=AsFu9oxW0Qaf-?orn!^kG)_;`Vfy*y=)N^gaoh|H3P!eZ3ugW0_z)4P zW9-r)`7mC~Rl?j~#e^y0MEucGhuba+?!}5z-l*!$jg_pZw|i+)NRJ!4S3aP|tp z>u1tVW!UXV?Arav^H0$|iH6R$fbuLYj!mYDW(wYaRAw%!YM;X3+Q)g~{rOgpXImL~ zd~;*nZEs5m?e>1$w9i6pW)y=#R_2?ThUseSY$y00keoRERmu@38LmT`nQtS1Ougp+ z{lyV8tuM95n3&&hxO5`p>yHNSTM^5OGZ&c(&z$G{*7ENq@yUnp9b0lvLeOH)ueN8N z22#a8J~;PpYhC2=U%PkX@7TAOuS+B)$h{A`Gofjgk@IBLiT5k(|JgD(?U38#=EgP2 zA?%mv(t}giPFWrBDTZ&;BsclnJz`gLUaHK!cwWvhp@~yMv3tL)RdV0*ezq6uWWU=M z|1`eK^kI{2d>X?7JAKvYu*df=GA;NV)M1@*S7+hp5Ai|XlGb_*n}QcuZt|SB;auna zj(f{~yq|nRd%lpb`ag@gtQWRE*ixJKLxf$8lVQWOBNr20-!Cq|=J(a-&yxesES^`z z`!`uA7ldc65h*yT>zUZESKrTgLfUC(I}`J{6+EpU`j2h)H(_dsvDBQsg5%V}TGnXG zPhqhEY^f|A-#%Zj{~LZacAD~DK8BP{{*LvQyq_{T7&f(Pob%Ym;KHz=Nqo_LMK&de z35`yDTIWlRGJ>amw#it3b3rx}!xjHq3Th92$^Tif>%k%JRrS07-nW_HAGOE$pIrPK z35E;S#~2uX%i1{vs9t<-9a+XGUK~Apk}iY9y$d3XFYQ>aBdhi$>+L4#E9$-;pHD=k zJIY>9;bEBK^J8M&ov(?1*q^P|%H0#q6X9O4ntxHZjoe>d27%T(Hip<=YZ>P_9C#}B zzHz1O+dMIbhTCmlEzX_$x8Tp`#r@YBQ)>ST-!cO@f(#?{O3<+W3OOqp;id!ukR2ZM$3p+?i}?%9nFhfmxVnR33T;@10iyDtk@&Qi8vaMWxHNHdB5ptdW%;ehhm*}`WX zwk$PivG~iQ!Dk`-PRZYSB_qT073sZ2b6FE^Jh{TTj;XXOA^bAag>|tx+Bz>nt{uq8 zynNGqu?|Bv6T_lX?R}QnKEHJD&yP*o>DR`ha-Nyt*CxJ20sVhZe3_HZF7jW#{J(qY zV_x&Brxr%6cc!Zc|BGT{xG8j?X2H*55nWZEr7Q}6Y?qeTYVXdeJ<(*}RK=+=KYH=v z7u&-pOkz0jSbLU}eeX0I!_Mo*$_xqx)1OzzF*r!327Su#mt?-lJ85R#oBH@O?G;Z= z4$qq+mA*di|KZoG`J-*w&V5+%+Op(k;q2@3-}Fn|R4f}Cm{wH&+nl|i#v!(_-iqIIQoid!g48w14~uJ9hMxm#pFv@0Z*Ejr_XOzjoEH>-B%Hi?KX$o~3kQ#+%i3=3d(vQWzY% zDAyZ`!MHEr85xu=%b1!kYW%F57h^Jzlnf~}zf(+_cNHaL>a!|-J%!*TElUbOG3e zUfAKyuwcqZAw~wq#qxh&xc^O1U|{IF=hf}laovjhfCziuK9A~kk@k!XoMnwsk%u;Z zaPh4>!Fr)7?Xlp8r5V52*Cg)zm~c?-9K&|&FFKNMJ{qlJKH%-hXH1g`Sw-`!hjuX})M|GXg@65C|Nna)W5oIiZ6=9DTce%CxFwDq z?zg$-=FqKpvD~4_c$FH%s`DD?^z($2(pmj7f@fPzK78Z;ludKruaeZAKD+*o zzg=eX!$Zs7Ri8FcYb`2a+r8d3c~WeuwZ%5`w~yuD#lG1WzTx%9+x|aSRO_&2Y|~z| zO18v(W(d<&E4BA&x>r|+a_^Sr)m_KJpk@*r7WqquX{O(e466ej=Yw+JRbDI3`8o4) z#otHI?bq9VJn3H{8Gns;I{SA9mxN2EvghK`Yg2{g6&&KuEL_?|As0EV6nkym;xSUk5XD@2#uMo4;CnUihOe^L3K8?q15aLiaq! zpUahDpXXKm?YKB2VvExK74J7MicIuBb~kdp@j5-b*Lyqq_urfH)#Bs-V4jYo*zUDy z?9)s#pPlgUU!A$hWP$6>E2U+}Ric;VnXxx!?G2SQK5hJLaWdnEjB5GjMO?}2_NnnQ z#`D(&eQ^?2mY;WksmD2eYkF?i^VSu+ozjz7ZyX3v3%$s|z{02}rD?NyVXCN2%GA|$ z_q|eter%nwfGde-&3T!AZ-;IcliG8Yhbx(%tT^?f`rT&z4<`~OcmDnJ{S`yQjW)i? z8Jzor?tc9yW4Yhff3d`|X8tragWVrKlnK{K&a%JH&fL&<|LB|qlQ}cWANQJDY@XGy zb4vLf28P$#3<0aQgjVerD0jIx>v7F~zdJ$#602t$Zu|F{i6KMs?3>AD^ZxjTtvtK< zp|o+{m$Q9)!}l{YEc$R=%CMi~|K4x6R{Kfv6k6ZimMx&yJKu5+D}&1c)e8ropPE|g zwQya^!aT{J5)2nUYuTv@XRZ{Oux4J(v-_FPPqHxZ+kHs*+UZ}jXxFbvfKKX31^yVet-n*543g9z zZ|1-8>xIyRUdOF(3t#k}?o#k)mlfmZo-j+MDb(1@%c3}Edw;7!*yQqzS2l|$-TSlF z&}hElG|l5GsRw2<=01zRb^6OuZ|>JR3~@{gwYjEA|0>E=KB&l${dVy^n^pUc9!Ow0 zb^EDgsEO1f4nF6dmxBTfy3aB(Op~0{Bv~wRGBDqA)vZrA!x-1GGpy-slX7%PiTE0G z#VK>E(u3nF2d<>3GTw+#IkkKZYsp-$Ra>$%)c*F}G@tq7_Vw?%R|@J+rqACk-_Nak zk+F&W(er(?^Y`6sd|>{LX!!p}{YjZ_?sqAJ?_{JV^-1wn)*MUV}vl?Ah zHXoaJ_W#8A6&w6dACR7Y(B+^<>%2)#60Fj1rUYfp2AUIc2XXaPa|7+$y z>o%PFEve+C;9vhXrm33pX0txeXiS-SYD*jUyBFK{EWK4ZJ$8@5mBsyKjCW0Pr|B}h zwc}atevN4dH-pmsY|$-k?l0cg%&F{&?ED?NN7c@~e(|IBLTx+YSOu1lB*hi={L{kY z8-C?~o4ln)^K7oH?B+#@%fct@eG$sIswV!F*QsJD#@uJgf9@7CMx4AGs`XIYS9{jQ zVt=zZv`4obwmz88@muGE*ZE$<$3Jx$&ZXT-`+81ehs~i1uT2sX z*)vL(&kttWf1WAe-U{y7&sn=t3N;1iJ@a2TG7`GhN}&e_S4)|84Z`zG?o>3SNs1>Q~&tCtT0#(`heQm^wY{_?`PZ z_WaUeD6Q_TF;FpO6e|73Exswhf$jUU0}Xd>tl|6=5y>R=VoB&atX29e1^Yfz16=QzoiqNbavOjt_w8?a_BXleT?ODrCnx;O+WX8zhN94 z3=8f&QdCM3n)lu2)x7-|xfd9CoQW=7b$-i9FR4c39ABT=Y%?4O(OzW1^hYo~tSZ1Ovib=B=n zmNJ*bxvd>PcZ*%G39s%c4GfcA$B_Ad&El*HDbqu08249}^?j5*%6sH~sl_ygLrm7C z=kLWD>;9DfvENK>{wK#NGm_OhGHe5?m0sEG{C8yn^$P)UIVZjF)b3A2cepw$0Res2a;~C6&u+UFin@Pp?IPF`N}>aCu^F z=fT(J^jrM%NuF$9#)hDU8Rl*$zJ0ClVSM(_wLy?IbLC${27$GlM)LRmb>CifzV==5 z)$skluDacRD<@~d#xTR4^`Fqk`a_)R7R=K-EwUvFc~lc;9S=x4Q2FMODc=m~Y^ML> z?+efBMJOt*=swjYp}9ZZaannqgTa!(PiN{`85E9wwtZjQ&mPyu$j~br^)x_1$Fwj< za8BxU_dm0rm#*-M>9@(>{`bxEtFGd)A%E{Q`EO+CiDhUIxB1U{^`!dznA}Y-)%>j( zBwqXfu?=6)yZ`IS6?*^I`u_H3V+e>>VmR>jWEIzk&2g(<9RK^_)S3rJB$lqp;ZW$h zzVqrs(A7m+GykRDy5e2w&{{7dGsDs0p2H>)m$Qi+3@^55`ZA;mG937Q|NFmJX5JGY zmTcbV{YHS78Ah#6V) z>Yji5bpKY#W)3IL^L7ti_p9*C%r<#?{_kbgt4pWHy(-i<$Vg@Kxt6&kuf_G<=Kq=f zCyKQG+J4`8zI0h|SJCtXZ!a(T{Nr)VwgmIY!cChFO6&}8tY)$^%I#|G^#910d1KzK zD-3M5;=dQv^+&dq$QK6~t$eo8=lx~R9M_Z`QO>=B+zh4P?|+{6J>>h{=*v~ly~G$I zCkn7-{6CU)tq-~Mu)^KWJbhl?5v z4C$^mH^mwj?t60opE?u6ft_4tfmhtuF&-1+XTB5>dHuzrGmbYSex>XzVo0z%5^A)w z@tfnqLgt6T6a1Yj+m?Fv^Z3=-{xqIa6jr0Rn}LVnPVINwx~!Y$>py-DT=ZB$h-q;} z{qu?d^J?kOuNfJFzp_RJU)sT%aH2-vyun!Yx{F$-&b+Q0KUUu2wM_ce#jrGP`Yrio zKj&>?Sn+LtcJO48>C+6?Z)06>+|^NJ=2lD3&N=5qG}l&(iOdRSk#y;Lw!UPE-P`-m zEp|FEFu1tCza!H)n|bS}YEf0a%SCQyRU6}yW(f6MN_uQ-wdlC`gVlIxy$;MLLEh<%$*=bT~MaDjm#_u=d%^}8cJTnluUed_+l$UJ1l z<0Kv?PoWz%^L1laGc%|hSW=+zHR6o+C*`G^JRcm_sBcud6GzC3*TjMkU4Ro6_V&c2Z`A=02f zAbWS=qgumT_0ygoUzC)dnfzj2X4@>*!fPLnF`V(3bw7mXKtc7Ay=zXIn%z(Soc&?d z=c%6RkR%#4$v(*iI0uWQj_&{9yCp!`{PK1);*u`5wQqnqx)b};lSNhpcSthZlH+-J59cO;JlvM9dUfa@66@Dd{OU9bVWQG3G`s)qk=xuxbI9^o2@RjT!H5 zoV*;*&ai9q_Y!sn<9Cbi-S%Q=xXcj$=aIPe1D(*K?%rO;2Av6BQoH|LPI|ZTuZ}>} zY2QtMrm!sjHlsx{_h8KW-S4dY`=1=y_VTjPb8Vfex*BrLiBSfX&l(u)RBL|DGfcZ* z#Af@M@z%S$k=?0hxLPJv8#e9SV;6a&hf$c*H#5retk=^EmFXv+YaP_a>P;t^bE^6=Vp3B;&B#(>izf|RNz5UvRZO3#N?i4?r z8eTQWQ&97{rUV1@j({Jk3>yx`FmNn=+-JY-R&l@WTJ5b@i^CiwSl_&7VptH@@MIy= z^T#o%t%blx}4q85+^H|22MW;9Z>dus3!3qohByJ28tUSqo ztbB@+%KnM|a~+mW*)oSsl<|Om-f!3S+zE489a1(;(`5*@{(5pNgN-CZ16L+P!z5OP z{rNh)I&53ZCKNwjo)*7BJVkQ#)|O6zceiUIAHToc^YnJA{iLqa<*vz-f0ZBRHUIJB zni)gGLjj-D>WAd*KNoMWUl;x8i0~(yGn?Cz#TtTo1bOtbZU`k5uJhj0eqWhEdvElE z-fu@=KdSg)J1a){LC3+isQ+(@b$3oll4acK&B&0#+{4Il%%O+pX+wO*v{{$$*S7t> z^OE~*+JT!zogtD1Vd4x74`$#0vrInX$p7U!2Am8Y5B5LoUBCL<{rYZJ# z94^sG(}+`Th}F_DF^`A^6uN2M_693WLat3ZgBkj zY1ioQcf5HH6bL-9V%WgPV8E=(-N4ZBXN~ijL*|LXEE?0p+Y^^GYz>l{&(c_v@9d-( z&2X&gqKLi1L;u{ePybD~sRzZjR7yVP+I-P%f|B=qu4y^@|9-oAkX`=GvpXkzj5s=S zeP)-YZ}!U2TVybO!*lb0sp2VRYg2kPxv!iF*eO4+S#-*Iod*)n1sDVh7R3L#{M-BO z1+n+%85*h?88~jOJdwM3LK%an@c+Y%w)$HZoHagYwfR5@+_M_gxPV3_fM z>BrgpI^)oEh20D+4BzY@OuhO#?z@$DX7nXShRc!Ov8<2xOEV~Rw6ELxkg0<~L9XuU zmb8igKb~sP+s$y{)8ap^eAD#f-))Kr)4iy&Wvc)4Qf>z6?gyHAEf$Z}CUg4zZ2c8| zv9ly>_L>$4<3;7h?K3+zuzdLcRb%>#r7qdN(+*hr%${Lk$-H+xpTo)thxeRWU-Ey3 zf7JPu`(I|HZQfP;`t;}cyWc`4IGy)r?|iD$uy6lsv12}KR^LB=bKV&ShoucCnI1?* zi!(Cp)#dJ4$$L5Z+?1Jh8Fq_4OkXfH(sb6py#O&Gx9=77M+Z9qq3i zCwMO2^?se>EVe_ts;BH1<$om{wugOLqiaLSX7PO=TIFu`Zdl^ab>Omu(St{^$)DxJ zXBM756ZdH)cg9qoi%V}X+>*O|B2$~I;+OX71|!8!@Bj2J=>5nRG{xxZv$|9UCGkV8 z;&BnR54qzv97;dDvdpgRH+yVe*0TSX{cN}1%Kd&<>gj1FQ)$L)+n0Sl#$ccq;}>Rl z?f%A!z_o9_#-@}`-naXG-S4n`+h1$l?3cYXb9a3%@?u-Bz>67w?{6+_{G~U=Yv+1V z9jjx^HhgO}g;ZS==9NFYto3x{=u{PmZ>cBNZ;JAV|<_|;mP4ekN0`> zYPvKp(Vx@vwXyyOyS~pQO(ns!a#@BM?LO8y+de<2VMwrQ_^^_PAx+S3=YPo!&vcqL zemuv`@QLkMR9ofrz3v6#|I_Ui6byc6+iy({j{O`W6xHoBjpu=sn|qb~#5*#dPkla@ z@aDoa$F{sCIX2Jwdr7KsD^vUKPpp-{JYf;H%DYsGPlb<-8F5R+y3DfL_g1lMCw1 z3=ZWC3~K^1zBpe`?!THj;{vB<*Xe1xZy6eRxQgdaGG%1=(%oQjCuI%q15sYfI8_IZ zTIQndHZ6Vi3ql=_*#A7a_Nx7#!|Z$hnP?{5J-b@! z^yQ^8;o&OBp8q=@%}{jfaR~4KbtiMn7%rR%vg50Gx0&bKF)iO)FE%p-9GAQG_A*cU zTUR#0WS+!027&j>*KhLp5I4gr)bOlV_}#MGx%ZyFaWc4KXCczUx-43!COxX`NZ9$h zZN~*_UPs?A@-6C|8vbtg16Bip8A9(_=g3sOSa|hx+&822X{XHlPC1sbp5bCpky+aD zq5R6D7s(}pQy3bqX+;GuTJTmnorPiI`;&Wbri1o?DzNGKf=V%lh71PXYGH5oqf7#f z4)^#g&wP$zh^SuU_e`rSY7Q$yg}}>iw?ozER!myDMlYYiVeQ=C`ww-ldi8u3Q$zOt z%G}bkrq{RJ)LycYpON94#LUb&s-M~GKd=YSJOw z?j@2>G{WnYrNqP={60ssGo*=zm)+N3C52ZQ^&u zJ0>!Eaej2(&eYNqitQGMk2o!KO1!9g!>D-b0X~J)6DG2{6IU}cnAFGCUF@|#Atm~L zie`L++Aan!y(ZI*3@!``i8lSL4h#)5Rz96}uk@Amy^D+t$;;ob<74=7RKM<_7{iNH z9)^M+{GU1I&iT|Ayed8S=zWbMx7T^>3;hCz_w$z}bodNY4}XD;n(pSaWhoBnQw7uuiK>rB)X zZ=5+V%rKJcLGXhHyGlv@2l=TS9h{m?p^YY73R9jbyjAp@F@fX0Aom8Xx%>_Jb0r%1 z=T)y`Wxi+a#+`ka-8Pp|A}&GezU|EGGbDFE*J${s=X+I5ekJ#W=&G(r206p{nddIH z^_kzVDb{Cc*&j74TjtON&RM^`#8xl-dR8szEwAA(ogS~Z?zv$bSqx%NB?il=#RW4g zw*9##NAj_YIX{Qd1K)=dep!c0YVMZrf35KQTl~M>(d;6YbMA*SF^W_v8cfj0uW&lU zbn0>UXT`KB&x4&bjiVZORn+r*di*^`(znLvuTunf!N-;Vj#~DMG4E@y*ZdmbSXp`R zxQX-Eog&N%N4@?`Jm1N^Ap4_^wg>;HCcIC-gI9Kd&|#bxx0U+%?@AkIB(<8XSo6kDsH~Y`gt_yQ|Ani$USd1oxZhZ zqEG$IZz&&dmfx?neOqd@&gzE|*OL?7xBvUk&Am|T+*vQ&-25ha-n@!Me0A4ZYrEOE zd=}l*wTYYAK=Ad4CkhcKb1r@knRb@l{>Q=4u9T_&8Pgby&uTKC3YKAFP%^l6>B%uh zH*TiM3Evjnn>kn{V_;+_Ka^D(9eV*t@CT3HE$jpD;DP6kvCVj$jf|cKB`C zzwb!F_ub>a-_?-l)6nyA zst`lR%9vHohWZQ_{>=I6UVn#);lRCB%Uph>#N3rz$H(CC`8bn9;GvfPF8SJD5Xe|NrL{-ZOK@mp=ItJkyopFBTAI69_YQesFrtgU2`XXoE-*fQ&~ z)}mt}ObiCv0q6GrIlVt5yyoZWVAD_D!dBZjpa1+@F2~R_m+glL6NAAX*0yD-g-y>4 z3MbdKghgNa_L=QmN2J>Jn)?%8R*5kPn4X)&5VBE+X@Hl-3)*lU?cxl%(MuyL#j0dW?cQ2i^nbko`$FcOi-RHYkx82T(Wo9^Cem%zhr~$XF z(u1d5C-fSH7*2eyzZx2DX}eo>kzpV_>p zIT-$IU_8yLc;MjH#UZbzyNWK>U}ShT>$09C!~Fk$p09pi|Nr+~%Sd*HT`HTd#WMVF zW@tFya#7evGSTJa>0n(AuDA2wFF2ZGbXvnQ&x5ny;_%Wv|9|Yhv_BNAt~R~DEB@D&DBEu< zmM$|>U;VF~f#GW4g7|;y85tKnf4Sn%M2Uukeam~l>io@LdeV(iHHpDQexlvi|NC|c z{jyEF%K7Dk+*Zltl0~dOk0TSfZ+A{gyfEXef)E$i0h^=?@po?A(Y~yDfBGUGR+$6| zAGtGrb)6Lz{kK%@FPV2OTpa)J)AT$xRdy-kRGWQ9!hURQwLBWa_e>V7=-)0|to!7- zT7Cc3NAF+X{PKP0`luT}W?pYjR}vEWG`nZ{9NUG4r%k5vd(T=YZ;<;d%iQ%d7u6v;B>zJ-)CE^zm?~!=a~ly#TDNBrk>P#rfjc6d-*rK zvbFJkAeg8BXU%=n`+s!8Z@=>pbI3a_Im>qQV?XPtsQVY^tvjmd^#9NK|8EWk%N*Rh zl2LOi`}@r`D`L5(FL?WQ`}?}9j_d2T9#61P-el`iVj9+V=_=F4ww|PdOBbw*9|T|d zq$0!mE8*EDEe$mXshatj@iv|bO3VzJu05Ww*MD^FwTqT=u$lK-{Ht60t~1^!+5D>i-;4fLZ|8rHvHx{v>rFM4PNB_cxWQ z7{+tOg7aT4K5O^$^7ZHf8tXQ*r?lsT;aXWZ$ ztH15v`XFKX>h=55R*4kc(|fId?*L0%=7eL}oX2bqGre8$UV*_t^NO+M_I+k^*V{2P zd}m@f;dQcPe}UunfZ#x*2CUOdDt#y|bWH_NF zuu!ZnT(|LtTys;TJHvu4hji{dQsItlVro6Mb?4TdDkYE7=htMK#>|#5Y|+qAZ#bY8 zZptXNH`laoo5m8>s9UqH7jx~Zsm_W1-!Ik}$+0QLQG$u#+@CYcL+z(GoZ(?uz#p>a zT!;^&Q?&WD*jal8{_UNn+4LZMR*c!t>CdiS*J^ct{{3rjD{siF*%_MayRR+S5?ABC zOTOvf6856(X%FaK}b3nFX<@ZzC>sIVbu)9+I zw#CY|gnw(hbpLOg`L`Snuja4Xx|?~0dB7v~S_TE9Qvg}^g=fg@Ipf+c-M%ki z>c=bP`z{y1Gp(Pjuy-pv!-joK40WF-&+lPsQ0KYG`0vF3fZLAfnlaZ($S4E8p?boc}4%?PsuFM{i*fjeF}r& z2ZMYy#)hxDr=m@{S~@m8IO~v+Ik4!Lf;ISGx6fZ8-F6()Z$d{#v|6{L3#Jem}qI2h%3zxKz!i z2&P}_!Y1d%Fn|u{Il&a**_~X+*zWbZxz1#sq8-EJ)VYfe39{BK`M-yM?~cgH7Zr8m z&%4c2&Sp8j@bL9}pYMGSvH$asck$B6;p-L%CFDxouX>%kYWw`6qOEVsZkw%t;4^jB z|0}9jrb_Kf(`%^IW#D-4YgU_9dhBI-i1nTf_V@l<_LW?(x_TwE>@yRCCTmUIugmkx z!n;^f=Pz~7c8c%FJjm2wy=MKVdpcae5-cbghxzDEF zyU@2>&}3VpQnPIGhnZ~0e$B6!H{N*GZ1?5QYw}yBO?|2)yx-1v?~{LD4BPhAZDjn| z8$9>@t?cz{?S7v05Bq-mpx&pysYm90=YBs~x@F&t!>3ped8*HS!t|TT`}JX!{R=~X ztp2+q_Q3N)jW1rXSxk`Y;Ft0~Fq_Z*PO`>}+v2(g0^3;>5;gagaK}8V{&jBZ>s{G# z67r(243;yo6z~dkytt;ihVNvFp18yOr71mfGy2~+Uo#H0IIeJbN7~GX?!Bv3Y>LDh zek{H>b^b{niDhdngleq6;?lG zm(Sd`H}mnfBfAz$Xg!^Ny+PqRbH`RbtEjT7?;&Ci%a%_OeRA+VAA{M-0>%QZbnb6T z1-Wdlns;`5`;scgAn^Q1>rzI|I|_5AfBd?>{w|}#Ui)P)?d^77+9X^cAM{L$`@n^m z4|fFO&%It|yXnTcM-N`zzRhIt$a2!bd;itKTpZUL{p6lAO-E*9T>roGRhN&2NF}f_ zIPr5OP4thP9H!+vV`fO^A|<9Pe_t~k*phI{A;IUsT4si1<12q{&xgx1%s6`JlKXRK zTP7PtmUa7ny*hQOU^jPz-O016j*(f-_gT(}uHCnf_3XTgN1bX1zORxq>;1l{TW{66 zjoW_OAFSbD67^zdtpDrHpI=;@^8H4!KRcuKjD(%XALTJH&SCcF;R|c7_{zvo^KZ%r zw-4`=SB5q;=$;MdeZVk7$4owb`P>vn3FdvO3}$Q$DVCT1eC*SFa6jVECRSf2%kSEk z+mB6Qba=O3Xa1e%O{WiByjy<%F+;Dz}TpF}k8J2r+zU*v7yR_i55}9;Swz%#?l4SQ*yr_nX!F z?`E{n97%>Jr7;_`TEp*Mu@p}>^x4eN@M2ZMTa)yixohqiUI^4vzI#08M2J4CYsvBS zmHHW9ne2=9AK!ZJQ}rpP1zB~U7JgB@m%}UY@cYw1e#VB#t@Y_UG|zuMxt)QBdxqwg zfA(jYCd4xA&1?{!?r^4BJoxNpll5tL%ulPf$!F&KB=mgM{#7G7_pEX7LBC$Esgi&8 zJU(*AL$BmaKADE?Dtq;B$wD{#-CC1h&0I0{w5(Wbea>!`2b)jY-P^y6p<&yd+N|PF z@BjbvW@kw8>0xAu>|c1hHg|1bNa=)QCgF<(Q6hlPFH8qBWJ2QS?P1AIU z{8(VP&C{ge&DEO{k_=NSMDA<8_5b4{#;}yb@8jwqu?D$wXKcCu3MEf0=tz^#wVJ7? zY~1}`!|?N*G$U<>j`sx*CJ5B2Jt-@cYLdI%v2$;kUL89_!x@i_IZtOSm>V9jdaoVB zg>*I9YX5(K_e(Jdc$EJ8`Mf%edv?@E?n_BaAErN?a(2lK-HU&|-zeQ~HSHLSzS=Kd z-R{Txe!pA0Zr3NR^KaFYYF->F-~Z8Vnr&hehd0CZ)w*-}1sbdwCO9=bnyzah;LY$} ziiu%=?St*_)D&j$dNX7;{*Id4z`Qm>;O)~b2MieuQuxG$dknn-6FcpG@GvYpvz2#) z2J7FWKTmT_{1H2U{m%2O3JeY04KJz~7)%3Hbbeps;g$bv|6Vos?FZ#P4u%COj2TXQ z!Y(s4IJqk-=rA}lIMls8uB+Dae{rZVO9$(Nm3$1_?$=dsXZWyl7lXp3V3uQNTz$OH zzMl1Xi%R(q8D<7msfj|uj16mks@~gifGc2)(j=)Rj9rf$Z5@(TgI6%6cy*|`@4b|F zMZz#PDBj`Xrd{=6zF9m1DF^MpZNGOrN^#TXGYpJ%r|$(bg$F-4uVwIDG^4gBw__oX zSBF#7;x#s1YxHdGUsv(%wPrr&(QWkFi{nfG`snowmc0C!!=uub+u68UKQQ2UdAe1Q z^abzw{>BCWG&g*^ z_xs)IeZS|v-{JkhQTyBCiUy+-+jca$F-(#?us1^V-mhzm_wG3F%x@R+_p<8rkm-^O z7z7eR7jP*bs;T{)?^f=>cJ7aF8G~Ne^?lzG^4}*~Zeko%HD9x3|Ln|nT5}KA%-5+3}phal4v(?Y7Yi^X;FNKB~2TyJvIyp$pHC z&#%~1?Cr^@xz%z0tIL1a+*y}e_TYPZ{PP7*cobfi`=qA-d-A;9{()YIo80@}Pg8ex zPAy$1|08(H_ES9SNgOY=@K83wW{%cUl(CG^O|Ww>%(WW^S>#n&N<>PeZj7&eXrPhkM>vEv*TR1U0BEYjlp!Gl@mv3Tvif0gs2&tK!`KFun|vuYNna~S`#JI529{%2@E`O+2s_CDAD zMVlu42o_-p`qIY0kn6O2j#uUU##43-3(8(A1#sIkw*(y!dGSj4pQ%RmCx!zvKB??d z{>IACP@NaYAi#gITTDIQT0~FiuN#BF)0NLOb}_Op`|0~dmtjG=F++!fV}rsaEu(p5 z6A#wtZ4f^G$0C8nUU2`auV?#N*nExKtpq$ZRJ(7-{1X4)!?xBzeIDb@Ba68GV;KVM zW-K|+9?>TM`2IPoe|LiF^6Iz`d`J{ae*aqfriAj9V&_}3$rsgD%ybQJp4^(1vACbH z$&gofcEQ#6`zrN%r7yo^xBI|o@8dd6KQeHUYV$Vl64wO^O(Kd_Hxk=Jf4|w>pPz8O zZug(!RY6KTuU5zZ&C2Ff;N9@v>G$(XCmS}g6g>O0dCd(W(T955r5Lxgn{^zRWUXMd z$HJURCPH%qi$L-RuG0cHZs{<}8RqdHoAUTfe%lM>b5j`-`(EiYGTc*~uT|SC*0AyK z75D9tH!s#Ye>s}3eKzIXP5ubR9W&M&GBE5&?(MVvb|Z_wd;N>YN0*k)6K9a(Z!Lzc z1-NkR>-G5fTF}KaE*t&V7~kD~;w<+G>(^&CYXynS&tW)V9r-?YFb+rP?dH zJQrv?HqK;we1E2$5ktX+EJFjnp4kffe$;R>WZW;_uM>7Esx$p#!TfK{Tk2EFOBz4c z{+a#Xy(*|jK6m4LF^P{qBN@0BUEnqHPfH3ha8%iK<71d`X3e`2jb9EK(+@8Exk7<) zZlOui|4(kOlHY9%m>?Vxy!mGLk0lO{Tjj-_q=VnT*$&#B=q$Zp%gVNA*7xVv=0zT^ zUd7O`uP*i3w3kzV{hE{0`GNfl)2gjIH-8XU?kGM|_e7pYbiV%a51aC%=9eu_b;)In zO5;!9JP_0KVeh+LuVXGukiBq|eTgXB=l#!hcehz?ta*DpaHYF!q;2`{=T%F7sfO)l z$Yuz&G<^K})J(>j{|B1+XRs#j+|3iB-cl$aHrzM8Rdt!? z*NfRDk>3~_-dub0ne#Zq!G(V>vNJ5XYMW)^D0)Et?ic0w%~2VuA>wfdZYjK3alhcs z$K#>a(eHL`IlQnk>-vgJ(00}HwZCuQFXMK26E4qip?X`*wP{yprq6wuZDTXfbTh*T zyO!LOtOnW)77q?E-(@;5Ym%76`a9nz**ubaHu?EN_iv0{>tlpB+A=oisH^&4<*RP} zHsSOg?aQ?#nJce3+VDlNey>>GQZLgSlNwPh!|;Hqqg8)X<@DJlAKGgKt2Wm7_1~KL z=9FQGB2T_eLxaWxWv7$EjF-Dwg+FCB6*6AQXVX~rYNY`y!vfa;`$ZE@?Mtl-{?)4H z-{UB4A7%VY!eNg0%-cu4h&nuXNk6ifccyvax6EhzH*;3zMl)>Sd06}`e&v=Y6TaO& zKH#hTC4!1IAU*$Ew zbK%#glz;O%rrp{)B{`ZyE-UlwwVVe@p^(g!idi9i3#UYOlE^Yz5`*GX3EYo2P$vgB+!x$G)4+dWI`2b=$Y ziR|ZJ!Fc$HD;x8hu)&ID+#^|_d{;eHrKzm zT>Nx>^6XjuoKpU=_p1 za3GRZ{?`NhuhJCCe6 zQ+^%a^?7?zT>wXj!ujN~Ix(x=TVtXa$5 z!1ux6nVX@h+!E!Sh|G6h-U2}rzdHP@iPLCU!1+M(-_DcUJZ~2~yCO2RBO{7M%Csci zp!L$)z}w=^Z#Oe!T$t4}O;Y5K$*luyBX(@lO>_;;Rrbm#cacR5SgSRAY`oU#q``u_KQef`(R^8a^; z{@XIQxuGaC&CH^N`L9Av;)31pw^f(^n0@cYyTcatMT}d1A3eWuM#H3~%NG8AsC7&w zL)@DoHFoQ?DT~%hR`9UQX6ajbMgQN$>HGgYy*gXxm5jlU*YWpLzp||>RB+&YXeV%? zX(`(j{aCMhIV0Y($gRKSc8BM0*~QGlYOK#N)yMxcXiEFihi)Dg?+0qH_J4GIc9Z62x8lY=%|D2YqIQQ909KxqgJ4g#M969Aw z)p<&Ao0G+qi%+ZhgFZV@jHu+f7GU!tWG$|y>fr$e3mWGRR8%J z@;qZXxYpk=M|S;5b)WDsLEG~ZlIuBI-g`dpl3F$+Ga37i3H({}`Qmo(O8wGJ z@!xk{uiWp=RAeU>dH=3@##YHIX`YX@f3}*Q6T000x7kmr;q~n2LH0Ygt1L+ReStr_ z|K|VG@&Af;_n$g+KYdZH%{)g%`A6E{jQ>Bmm~VJ&(~i6Dk_<=cuChn^G8{#exE(M0mpZWCf95mH?#d{%6p5w%|9Z{zv zU!LjT#iV~f{r#&8&ire)ZB?F=EE(_XCAJ`0j3M&Ik%G+^PW@4P-(Sh-u#BCvfx}Iy z)-lW0qbaA2GVkV(X&jyWioO^mp zF6q~O>^_&g{F(h##s$1B*Y^E>^O|wVX|q?BF>794n8n6;%ISr6|lGDE`Q-sxfL5mvelM|Hy)8K&?ZI`w7F+C`H}FSh$1g;8xAY9&MNAfYNq@5nU9luzxokprsokQVl`#xkn!}DnBxJc{2ESoiJMTrBiQtTKPS>Zb>b>c{ z>o#g!jr3!WUi`g(#-0QQ>vuaAi_d-d<6_OzpC@>%jbkMIw`d%75S@3FMXuRxv76XI zAI>L7_jxc2cPzc1lyH;DfTbxV>oxb5Bps^>9sA-kw*I*I=j8PC{XQ&*ZfM=y`GDo$ zj?RLK@;*gp43CF+Pn)HB&gXFVnd$F88s^+8ka~LP*!NZMUG;Y!IHy(3))uz=*R|qZ z|F3PmU-HnoVbQhD!e={01Cm*y;n#Vn%_EhHbiaFiKdn6Rji8ocP_}Am0z!dqf_J#dv_glHiA!m3G z*oi%86`K+LP4VrCE}pfT1^y*dUm9N867!=-T4S2-rMW3)pYpjFzWl71nJ{y8vcUYl z#HE4rbmtyZTRW|9T2q>m!VIAeFF$ayx)sc4J9*>`7sHH*7M`zb_y0VbzpJhP!Si^v zcME&38cmtfZp;61?cD0!3@LB^eEW0GaK89w-&UPR3>Pl^VsMzBtzcY}nc5|J@|wED zhL(LD;qPN)83bCVzcAq9+9$oa>BB!C?q9Qc-4Dq3d@}N$_*nkIM6-pau5Z%g?Z2wN zTFqyr#N5BC)}>t7vNvo~&E%(UleMpLF-%AgW)kfcR{XG7I&Y1}{8M%UpF16Pv#>?T zOFUb*`(4!BqD!~;KG7H3EM51**}i85oBiokzu)h!zmmG>f#Vu){o0p(Vd@ViWJwpZ zKd1_Dxbnd6B_l(We63q|(i8JVn!U!K?c-;w1(b_1Ecnjzmi^YlawC_2kN*Fuk6WA= z#&BTs?3*?F-|pBRs(<@)YB4jz+xAFC1};Idweo)+u=Cw9K43n(GQIM`5yn;Pw_jG} zxBN2U-er~RVhj;m7W5@DwgfMJbSrzmp?LJ&hpN^g%jaC0v%DcS&5wa$|IsPuRkOF7 zKi|n zn^-^Re7ktreN~17HI+9bSKEXOah$ohhJm3$LYJXP+jXI^a%A%EnUT{Ebol(4_~0tr z{eur4SFP7%Sm43;PSJ#)MN?XKfzR%q(xj!QrY+KAsQ9xnYVzWOQ-Wd{?sMy}dxY8C z68W(3n)TASY;Fhd`cPRH(~VqL-k%g>U}ShF>~Tcs!;i)Nl~cZ3iglQkP1$tjx`EZ* z>IeVWE4G+3$*cX@y1w>q%`NdO&t+zm*|T{>3YT+7v6wkcm~!~<>`e#vuzNe~S!Prd zCd@D;WBKQK3uO5j87`)D{#$%(**4et7ZlT-=HyB;Z04$G6yFlIMt?_w+{Q|6*5|w* zb$^+%Fg%hwZqyaZ-LPV>)a|&8ZOGMOxNviB z`JIO|x$HNu>8j|Bj3~dGeEroDVgFC3YWEbkvN9dhPBSk#ZhQ0m1-ltH!f}$4D2=YywCRGfpW5i%+ajW3EeAmYtK)U zXo+E1o!mD2scrIi4X*Mx`}W;GuETJ~o~4&Hq2Ac?8zaM3`)5oVtW%GfJylv@o1wR> z@)!fdd5shP3=P{v0~Ys8+o9NU?D(_w=b0RCGn_oFJEQwVl}Y5i!_`kWum63Qo#Dbi zPNAs4+$4wYSx-`84Ez~5(^q)E+A+(Nl_8h+zraU--KuXUPvce!H#~T^dr7HF!?DV5 zOE{7?9?){&O!8AcBIJRteQp_t8Gg70=xm&^$d)%_lG2Yq;x_m1a?h=u z9#oTjrYxl(Qn>$AlZ5))G;hbwec|E^8TwO1gkG@qer0;>_?f98w(RCjrR)8x=k2{3 zc6ITx*mKMbN90)or=lp3`_3kTc7#x19`O4fAWVWv6ELpps^IyR+c_zli z*Cv{>&0Ai-AfLlJTEghF^yd%h@_%o!Gd-2_nSUhAFJ7`+QG%J_4Et+VXE%$JF0+nn zwn@Ks_z=5|v#ulA!%Sg!#fT z))HNYnOX@QfecIulH9LdPAQ3UOLpI>RGn{8y!g9)PALO}?fSZ}j&ZZ5{ZHmpuzoOE zyyjBTruVDOj1n3=|0^;}-CW+^CbBjC2Y2q9+?$N+>+in4D|_hZW^G;fsK1%5j{b_? zYqL%MPG>26J$b8TLAST!3DaFR%Y7bn25fTZ-535bfb~yOsUlyp+&o90qk{QXhrTDr z?kf8y(Ez%u!%;@4v6MkHvS!m#<=qSgw*|CI<}iw!t5;A?cyY?H;f(kLm1X;0{uFy) z>TqDcIn(mGL%imHHdx(XC7O0%#(mw&1B?;n_lvhLUAXTcv)0at=O^Tq9-J^_$l9Kw z*m0`;o7bG}=l*3s30qUH{7}D9SGBcv)s~`*Q*|D`>VLP8SLCkF{RO5wFYcAu@Kmc> z)j{q_HBE@O6GpiuQRY-fMltuudgFX{Zh{!>eaCpGoPYU{el z^JmwHUlTg>f6Dr$T#u8Lm)kxolazkla49V6JkKP7f8jSgC+vMWQIm~Rkcs9(^`u{StZn`*S~3+=Hb|y*Khyw$FBh0H3e+{7VU`& zW^kAtadbxht!X|X|GmPRH2(bDKjlTn+)jqYEDTGQoVJyJ?wnri5%@9azyhv?y+HyG z1Q-NPEogrC+d$!N=QioZ! ztu|^>X6Ukj$TeYR)2#ed|1{fIv`$z2cG!1T!|H3BM2(al{o;0cWqmRDPfwHmyWf3I z7bDhO6JuB)Yw}%t{hmv&U)z6}fA{c$V=dx&i!QG@aPAzN*u@&p&vTy75@!f7>3S4+ zicfNL!9<~bvtM~Of5zoJ=iP{-n{9)ATpIt+bWS$8Z9 zzc+Vk);-l(;l0xRj1#`C({S@O;pZ^SU``Qd(4V9kKR0-Z?fgoo&D;)wm$VWN{7%Vw zIyYIbVGl#HSVJkp0`H@nBN!Cy{Jtyc=B8UK=5a8bdBv14cPh8;uf)4w>%SKHGCEw# zSme1QU-?z_yt86F2aJ|4o?HL#XPs7@$@7mfW-vC0^@l9NJP!L1SIZO>kEUOsj6@)kyhTNfC3FW#RK zy8T|2^!Kw&4C{;U^BIf4j1KOe-Q6L@ z!%+0dO)i(|!ZC-27p}LG=d(JPtoeQ3?sv}m4a=hhf~PgG6d3*#{^Ks75H@FHwr?y$ zzwM_T>mUBUSH5ljmX*Sy(N^9}HLk+O2WXqVwnUuzhyB@o@DSyH7Hr zbANyMpgiYX=*|Ah z4yrxij=`ai?o>@voaj5ovkaov+$YPvKdeB&twmJc;fzXp)dEo z@7umL=i@v>1_oW31e4ksAGvP5c-$^|;8p&!*&oxa3giMgm}2(a`z5!dYTH-g?yHNI zZ7IFKM9BHz?iuXg?hCrhJ^W}cbzR{9w4Sa{-5LKYEOVo7pKy%{+m|mjp>63SMeSx? zNwwZP$FJ>36Ir2iZ{>=A66^xT>`C>DOG8W;|9V~&3h4j)HiYR(yOqXDzw8rdroS(W zTd1_=>WZe{KX!|pSePWFQ^LvM(fox`+WE*5mB#b;KmG5vO#gpZg26$-sF8s|Y5U9v z=UTqVA9=cctuI4^!1Dh|UQ?Kl8g;cfhpy7-sn~vMbGxV|} zvnE%Ei!*ere0}$W**CreTnr2X5%n$!j{H6HXT=mst_0?9G}`^!Lg9mL&KH5_I_!pN z)AjaWmMd1dC(P-=z~E5zxYvBw?Cx|G?jx&jrB7mIP;@qU&B!iyA)2`%{Wt>y!}-e| z&OPq&VhpWQES_)$*qv_lx}g4tXThgi&heLbnO|9d=D5kVOE-;8^XKmPYH``|ny>!E zd?RfphJX6n%b!T)c7*+~cW`W%`O4Uk^GJODB%5o0RxOw-vPtt_`MaIZe`PiZN^;w7 zei6Aqi`Vh{lp516iO`!DJrcZng%~a@6OA~*z~Hh}K~>#P*)3D&97Dn!-pg8rhu#P^ zte6opL-6ZbV+I3FYnAoav=|x$M7J!O_4zV3x(pR>Yews91H_?;_j=ZWXY2{5_-XRD&8*gU!oAXBVlI zwcZR1&d;BHd+w)+<_s$5BJZeN(DadB=zqm5N-+0?soL7&Ln^zZa_j5`|A$<({!-c= z)isARWby(7PWC;=N)~eleda#9?QfnAv+xEJ%e^|!er*4nIYW1vmc)wyA8(WChlNE% z`#-3uHFV89<1V5l$e{3NZe!)P3y1B*wEp}(Isf0vXfF@$Kbun7Yu;wZudXXSzJ5;R z;;VeIQQVPC2Kw*Q84GSl&1Ko1XZl(3neIY0JH>kwXXePqrqmt3pUj}Zblv0eul-xR zE96U@ubo(K_f@lhP5iEdlMa3~wtwela7*Fevm?TOC7pi)Glvz`#&p$8<%A;lURB z3d_$sjh23xswQ@{%TmFjzj&mMff@^)b8EWsG^80+~d8enu z|Ce2&rT2arb$?iEZ~lrW^>Od~i$AMRPWrXP^=^OUMzu$`N*^qZn7!xy3#I^New&!- zHhKT^ycD({xf{VfW3%}FA4l`dl4BQd=s17ciKSNKo>JbgjM@)%YK%IL-~Stbe;4?D zTI$~SE`CKpe6t!(9Sl0)vew})rx*v<9E5m_P^E#@=DKI z+v9a~>hit8(w#SgHi$^gZdS|Ev?^OM^#B)(sK*2MH@}N*&!_LZzUSWWndfVM{w;ZH zdCdBm_4Ar}zjyLquZ_L`y5hE7ZpyMVzfu_%oOWagxV^eW!S?hFt=cf&_R^n^#P>_= z{Fia?kKDlw%~j>B3#J^>`1#9@38_uV!d1KjPzK(xO`1g1lbJLaI%!@B4!`1?<@0Yu^I6mDp zcS4f(97YC*y?aD`56KpsUc0?z+vazr*SEiqviTL*&(|CNS);M-$}Dy32me0)xH4n) z#YJk)DQn-nF5(xddTh7;_1EUg8CJVpex1F>dRN`8=J^&K5v45Gf*k=}J4hx5lQh>~ChB$o@sO zzdRQ_>bH67?(`ttwUCS9g8yTS8{%iU-%YCdKZpB3iM?Zk)NU^SX$Khvj-P4_W@z~R zB=Jn<)a FHGJ4>G)o~yTNLxa>RO^S;%m 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

y6h9LK&s2 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%0Dsx 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

SNEED!

")); index .or(nip05_get(context.clone())) - .or(account_create(context.clone())) + // .or(account_create(context.clone())) + .with(&cors) +} + +fn well_known() -> impl Filter + Clone { + warp::get().and(warp::path(".well-known")) +} + +fn nostr_well_known() -> impl Filter + Clone { + well_known().and(warp::path("nostr.json")) } pub fn nip05_get(context: Context) -> impl Filter + Clone { - warp::get() - .and(warp::path(".well-known")) - .and(warp::path("nostr.json")) + nostr_well_known() .and(validate_query_filter::()) - .and(with_context(context)) + .and(with_context(context.clone())) .and_then(get_user) } -pub fn account_create( - context: Context, -) -> impl Filter + Clone { - warp::path("account") - .and(warp::post()) - .and(validate_body_filter::()) - .and(with_context(context)) - .and_then(create_account) -} +// pub fn account_create( +// context: Context, +// ) -> impl Filter + Clone { +// warp::path("account") +// .and(warp::post()) +// .and(validate_body_filter::()) +// .and(with_context(context)) +// .and_then(create_account) +// } -pub fn account_get( - context: Context, -) -> impl Filter + Clone { - warp::path("account") - .and(warp::get()) - .and(validate_body_filter::()) - .and(with_context(context)) - .and_then(get_account) -} +// pub fn account_get( +// context: Context, +// ) -> impl Filter + Clone { +// warp::path("account") +// .and(warp::get()) +// .and(validate_body_filter::()) +// .and(with_context(context)) +// .and_then(get_account) +// } // pub fn account_update( // context: Context, diff --git a/src/utils/config.rs b/src/utils/config.rs index 9644b99..889ea3c 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -43,7 +43,7 @@ impl Config { "contact": "klink@zhitno.st", "name": "zhitno.st", "description": "Very *special* nostr relay", - "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45 ], + "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45, 50 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", "version": "0.1.1" }) diff --git a/src/utils/error.rs b/src/utils/error.rs index c801287..5812651 100644 --- a/src/utils/error.rs +++ b/src/utils/error.rs @@ -8,13 +8,13 @@ use std::{ use validator::ValidationErrors; use warp::{http::StatusCode, reject::Reject}; +const VERSION: &str = env!("CARGO_PKG_VERSION"); + #[derive(Clone, Debug, Deserialize, Serialize, PartialEq)] pub struct Error { pub code: u16, pub message: String, - /// Sneedstr version. - #[serde(skip_serializing_if = "Option::is_none")] - pub sneedstr_version: Option, + pub sneedstr_version: String, } impl StdError for Error { @@ -32,7 +32,7 @@ impl Error { Self { code: code.as_u16(), message, - sneedstr_version: None, + sneedstr_version: VERSION.to_string(), } } @@ -54,12 +54,11 @@ impl Error { Self::new(StatusCode::BAD_REQUEST, message) } - pub fn not_found(resource: &str, identifier: S, service_version: u16) -> Self { + pub fn not_found(resource: &str, identifier: S) -> Self { Self::new( StatusCode::NOT_FOUND, format!("{} not found by {}", resource, identifier), ) - .sneedstr_version(service_version) } pub fn invalid_param(name: &str, value: S) -> Self { @@ -77,11 +76,6 @@ impl Error { pub fn status_code(&self) -> StatusCode { StatusCode::from_u16(self.code).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR) } - - pub fn sneedstr_version(mut self, service_version: u16) -> Self { - self.sneedstr_version = Some(service_version); - self - } } impl fmt::Display for Error { @@ -116,28 +110,36 @@ mod tests { #[test] fn test_to_string() { let err = Error::new(StatusCode::BAD_REQUEST, "invalid address".to_owned()); - assert_eq!(err.to_string(), "400 Bad Request: invalid address") + assert_eq!( + err.to_string(), + "Error { code: 400, message: 'invalid address', sneedstr_version: \"0.1.1\" }" + ) } #[test] fn test_from_anyhow_error_as_internal_error() { let err = Error::from(anyhow::format_err!("hello")); - assert_eq!(err.to_string(), "500 Internal Server Error: hello") + assert_eq!( + err.to_string(), + "Error { code: 500, message: 'hello', sneedstr_version: \"0.1.1\" }" + ) } #[test] fn test_to_string_with_sneedstr_version() { - let err = - Error::new(StatusCode::BAD_REQUEST, "invalid address".to_owned()).sneedstr_version(123); + let err = Error::new(StatusCode::BAD_REQUEST, "invalid address".to_owned()); assert_eq!( err.to_string(), - "400 Bad Request: invalid address\ndiem ledger version: 123" + "Error { code: 400, message: 'invalid address', sneedstr_version: \"0.1.1\" }" ) } #[test] fn test_internal_error() { let err = Error::internal(anyhow::format_err!("hello")); - assert_eq!(err.to_string(), "500 Internal Server Error: hello") + assert_eq!( + err.to_string(), + "Error { code: 500, message: 'hello', sneedstr_version: \"0.1.1\" }" + ) } } From f7b74bd22c4180eceac887df572c5e4ffeb8a54d Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Thu, 8 Feb 2024 19:19:03 -0600 Subject: [PATCH 05/10] Implemented feature: - NIP-42 Can be enabled in nix module or as environment variable 'CONFIG_ENABLE_AUTH' - NIP-05 Still WIP, but building up slowly --- flake.nix | 2 - modules/sneedstr.nix | 6 + src/bussy/mod.rs | 44 +- src/noose/db.rs | 41 +- src/noose/migrations/1706575155557_nip05.sql | 9 + .../1707327016995_nip42_profile.sql | 27 + src/noose/migrations/mod.rs | 2 + src/noose/mod.rs | 1 + src/noose/sqlite.rs | 573 +++++++++++------- src/noose/sqlite_tables.rs | 322 ++++++++++ src/relay/ws.rs | 107 +++- src/usernames/dto/mod.rs | 23 +- src/usernames/filter.rs | 4 - src/usernames/handler.rs | 38 +- src/usernames/routes.rs | 26 +- src/usernames/validators.rs | 16 +- src/utils/config.rs | 12 +- src/utils/structs.rs | 42 ++ 18 files changed, 1001 insertions(+), 294 deletions(-) create mode 100644 src/noose/migrations/1706575155557_nip05.sql create mode 100644 src/noose/migrations/1707327016995_nip42_profile.sql create mode 100644 src/noose/sqlite_tables.rs diff --git a/flake.nix b/flake.nix index ded426f..a0fed6d 100644 --- a/flake.nix +++ b/flake.nix @@ -13,7 +13,6 @@ naersk' = pkgs.callPackage naersk { }; wwwPath = "www"; - templatesPath = "templates"; in rec { # For `nix build` & `nix run`: @@ -25,7 +24,6 @@ mkdir -p $out/templates mkdir -p $out/www cp -r ${wwwPath} $out/ - cp -r ${templatesPath} $out/ ''; }; diff --git a/modules/sneedstr.nix b/modules/sneedstr.nix index 4d901f5..57e9d27 100644 --- a/modules/sneedstr.nix +++ b/modules/sneedstr.nix @@ -21,6 +21,11 @@ in { 'npub' of the administrator account. Must be defined! ''; }; + enableAuth = mkOption { + type = type.bool; + default = false; + description = "Require NIP-42 Authentication for REQ and EVENT"; + }; sslEnable = mkEnableOption "Whether to enable ACME SSL for nginx proxy"; hostAddress = mkOption { type = types.nullOr types.str; @@ -64,6 +69,7 @@ in { environment = { DATABASE_URL = "${DB_PATH}/sneedstr.db"; ADMIN_PUBKEY = cfg.adminPubkey; + CONFIG_ENABLE_AUTH = cfg.enableAuth; }; startLimitBurst = 1; startLimitIntervalSec = 10; diff --git a/src/bussy/mod.rs b/src/bussy/mod.rs index 358670e..b5f899e 100644 --- a/src/bussy/mod.rs +++ b/src/bussy/mod.rs @@ -1,10 +1,10 @@ use crate::{ noose::sled::BanInfo, noose::user::{User, UserRow, Nip05Profile}, - utils::{error::Error, structs::Subscription}, + utils::{error::Error, structs::Subscription}, usernames::dto::UserBody, }; use nostr::secp256k1::XOnlyPublicKey; -use std::{collections::HashMap, fmt::Debug}; +use std::{collections::{HashMap, BTreeSet}, fmt::Debug}; use tokio::sync::{broadcast, Mutex}; pub mod channels { @@ -18,22 +18,21 @@ pub mod channels { #[derive(Debug, Clone, PartialEq)] pub enum Command { // DbRequest + // --- Req DbReqWriteEvent(/* client_id */ uuid::Uuid, Box), DbReqFindEvent(/* client_id*/ uuid::Uuid, Subscription), DbReqDeleteEvents(/* client_id*/ uuid::Uuid, Box), DbReqEventCounts(/* client_id*/ uuid::Uuid, Subscription), - // Old messages DbReqInsertUser(UserRow), DbReqCreateAccount(XOnlyPublicKey, String, String), DbReqGetAccount(String), DbReqClear, // NIP-05 related messages - DbReqGetUser(String), - DbResUser(Nip05Profile), - - - // DbResponse + DbReqGetNIP05(String), + DbReqCreateNIP05(UserBody), + // --- Res + DbResNIP05(Nip05Profile), DbResRelayMessages( /* client_id*/ uuid::Uuid, /* Vec */ Vec, @@ -43,24 +42,47 @@ pub enum Command { DbResOkWithStatus(/* client_id */ uuid::Uuid, nostr::RelayMessage), DbResAccount, // TODO: Add Account DTO as a param DbResEventCounts(/* client_id */ uuid::Uuid, nostr::RelayMessage), + + // Noose Profile + // --- Req + DbReqGetProfile(XOnlyPublicKey), + DbReqAddContact(/* profile_pub_key */ XOnlyPublicKey, /* contact_pub_key*/ XOnlyPublicKey), + DbReqRemoveContact(/* profile_pub_key */ XOnlyPublicKey, /* contact_pub_key*/ XOnlyPublicKey), + DbReqGetContactPubkeys(XOnlyPublicKey), + DbReqGetContacts(XOnlyPublicKey), + // --- Res + DbResGetProfile(nostr_database::Profile), + DbResGetContactPubkeys(Vec), + DbResGetContacts(BTreeSet), + // Event Pipeline + // --- Req PipelineReqEvent(/* client_id */ uuid::Uuid, Box), + // --- Res PipelineResRelayMessageOk(/* client_id */ uuid::Uuid, nostr::RelayMessage), PipelineResStreamOutEvent(Box), PipelineResOk, - // Subscription Errors - ClientSubscriptionError(/* error message */ String), + // Sled + // --- Req SledReqBanUser(Box), SledReqBanInfo(/* pubkey */ String), SledReqUnbanUser(/* pubkey */ String), SledReqGetBans, + // --- Res SledResBan(Option), SledResBans(Vec), - SledResSuccess(bool), + SledResSuccess(bool), + // Other + ServiceRegistrationRequired(/* client_id */ uuid::Uuid, nostr::RelayMessage), Str(String), ServiceError(Error), + + // Subscription Errors + ClientSubscriptionError(/* error message */ String), + + // --- Noop Noop, } diff --git a/src/noose/db.rs b/src/noose/db.rs index 29ee2dd..fe48413 100644 --- a/src/noose/db.rs +++ b/src/noose/db.rs @@ -1,21 +1,58 @@ use crate::{ bussy::PubSub, + usernames::dto::UserBody, utils::{error::Error, structs::Subscription}, }; -use nostr::{Event, RelayMessage}; -use std::sync::Arc; +use nostr::{secp256k1::XOnlyPublicKey, Event, RelayMessage}; +use nostr_database::Profile; +use std::{collections::BTreeSet, sync::Arc}; use super::user::Nip05Profile; +/// Handle core nostr events pub trait Noose: Send + Sync { + /// Start event listener async fn start(&mut self, pubsub: Arc) -> Result<(), Error>; + /// Save event in the Database async fn write_event(&self, event: Box) -> Result; + /// Find events by subscription async fn find_event(&self, subscription: Subscription) -> Result, Error>; + /// Get event counts by subscription async fn counts(&self, subscription: Subscription) -> Result; + /// Get NIP-05 of the registered User by 'username' async fn get_nip05(&self, username: String) -> Result; + + /// Create new NIP-05 for the User + async fn create_nip05(&self, user: UserBody) -> Result<(), Error>; + + /// Get Profile by public key + async fn profile(&self, public_key: XOnlyPublicKey) -> Result; + + /// Add new contact to Profile + async fn add_contact( + &self, + profile_public_key: XOnlyPublicKey, + contact_public_key: XOnlyPublicKey, + ) -> Result<(), Error>; + + /// Remove contact from the Profile + async fn remove_contact( + &self, + profile_public_key: XOnlyPublicKey, + contact_public_key: XOnlyPublicKey, + ) -> Result<(), Error>; + + /// Get Profile contats (pubkeys) + async fn contacts_public_keys( + &self, + public_key: XOnlyPublicKey, + ) -> Result, Error>; + + /// Get Profie contacts list + async fn contacts(&self, public_key: XOnlyPublicKey) -> Result, Error>; } diff --git a/src/noose/migrations/1706575155557_nip05.sql b/src/noose/migrations/1706575155557_nip05.sql new file mode 100644 index 0000000..cb0314e --- /dev/null +++ b/src/noose/migrations/1706575155557_nip05.sql @@ -0,0 +1,9 @@ +CREATE TABLE nip05 ( + pubkey TEXT PRIMARY KEY, + username TEXT NOT NULL UNIQUE, + relays TEXT, + joined_at INTEGER NOT NULL +); + +CREATE INDEX idx_nip05_pubkey ON nip05 (pubkey); +CREATE INDEX idx_nip05_username ON nip05 (username); diff --git a/src/noose/migrations/1707327016995_nip42_profile.sql b/src/noose/migrations/1707327016995_nip42_profile.sql new file mode 100644 index 0000000..8a857d2 --- /dev/null +++ b/src/noose/migrations/1707327016995_nip42_profile.sql @@ -0,0 +1,27 @@ +CREATE TABLE profiles ( + pubkey TEXT PRIMARY KEY +); + +CREATE INDEX idx_profiles_pubkey ON profiles (pubkey); + +create TABLE contacts ( + profile TEXT REFERENCES profiles(pubkey) ON DELETE CASCADE, + contact TEXT REFERENCES profiles(pubkey) ON DELETE CASCADE +); + +CREATE TABLE metadata ( + pubkey TEXT REFERENCES profiles(pubkey) ON DELETE CASCADE, + name TEXT, + display_name TEXT, + about TEXT, + website TEXT, + picture TEXT, + banner TEXT, + nip05 TEXT, + lud06 TEXT, + lud16 TEXT, + custom TEXT +); + +CREATE INDEX idx_metadata_profiles_pubkey ON metadata (pubkey); + diff --git a/src/noose/migrations/mod.rs b/src/noose/migrations/mod.rs index 8247991..de317ca 100644 --- a/src/noose/migrations/mod.rs +++ b/src/noose/migrations/mod.rs @@ -12,6 +12,7 @@ impl MigrationRunner { let m_users = include_str!("./1697410294265_users.sql"); let m_unattached_media = include_str!("./1697410480767_unattached_media.sql"); let m_nip05 = include_str!("./1706575155557_nip05.sql"); + let m_nip42 = include_str!("./1707327016995_nip42_profile.sql"); let migrations = Migrations::new(vec![ M::up(m_create_events), @@ -21,6 +22,7 @@ impl MigrationRunner { M::up(m_users), M::up(m_unattached_media), M::up(m_nip05), + M::up(m_nip42), ]); match migrations.to_latest(connection) { diff --git a/src/noose/mod.rs b/src/noose/mod.rs index 8c260c0..cf386db 100644 --- a/src/noose/mod.rs +++ b/src/noose/mod.rs @@ -7,6 +7,7 @@ mod migrations; pub mod pipeline; pub mod sled; mod sqlite; +mod sqlite_tables; pub mod user; pub fn start(context: Context) { diff --git a/src/noose/sqlite.rs b/src/noose/sqlite.rs index ca114c0..77e037c 100644 --- a/src/noose/sqlite.rs +++ b/src/noose/sqlite.rs @@ -5,176 +5,23 @@ use super::{ }; use crate::{ bussy::{channels, Command, Message, PubSub}, + usernames::dto::UserBody, utils::{config::Config as ServiceConfig, error::Error, structs::Subscription}, }; use async_trait::async_trait; use deadpool_sqlite::{Config, Object, Pool, Runtime}; use nostr::{ - nips::nip01::Coordinate, Event, EventId, Filter, RelayMessage, TagKind, Timestamp, Url, + nips::nip01::Coordinate, secp256k1::XOnlyPublicKey, Event, EventId, Filter, JsonUtil, + RelayMessage, TagKind, Timestamp, Url, }; use nostr_database::{Backend, DatabaseOptions, NostrDatabase, Order}; -use rusqlite::Row; + use sea_query::{extension::sqlite::SqliteExpr, Order as SqOrder, Query, SqliteQueryBuilder}; use sea_query_rusqlite::RusqliteBinder; use std::sync::Arc; use std::{collections::HashSet, str::FromStr}; -#[derive(Debug, Clone)] -struct EventRow { - id: String, - pubkey: String, - created_at: i64, - kind: i64, - tags: String, - sig: String, - content: String, -} - -impl From<&Row<'_>> for EventRow { - fn from(row: &Row) -> Self { - let id: String = row.get("id").unwrap(); - let pubkey: String = row.get("pubkey").unwrap(); - let created_at: i64 = row.get("created_at").unwrap(); - let kind: i64 = row.get("kind").unwrap(); - let tags: String = row.get("tags").unwrap(); - let sig: String = row.get("sig").unwrap(); - let content: String = row.get("content").unwrap(); - - Self { - id, - pubkey, - created_at, - kind, - tags, - sig, - content, - } - } -} - -impl From<&EventRow> for Event { - fn from(row: &EventRow) -> Self { - row.to_event() - } -} - -impl EventRow { - pub fn to_event(&self) -> Event { - let tags: Vec> = serde_json::from_str(&self.tags).unwrap(); - - let event_json = serde_json::json!( - { - "id": self.id, - "content": self.content, - "created_at": self.created_at, - "kind": self.kind, - "pubkey": self.pubkey, - "sig": self.sig, - "tags": tags - } - ); - - Event::from_value(event_json).unwrap() - } -} - -enum EventsTable { - Table, - EventId, - Kind, - Pubkey, - Content, - CreatedAt, - Tags, - Sig, -} - -impl sea_query::Iden for EventsTable { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!( - s, - "{}", - match self { - Self::Table => "events", - Self::EventId => "id", - Self::Kind => "kind", - Self::Pubkey => "pubkey", - Self::Content => "content", - Self::CreatedAt => "created_at", - Self::Tags => "tags", - Self::Sig => "sig", - } - ) - .unwrap() - } -} - -enum EventsFTSTable { - Table, - EventId, - Content, -} - -impl sea_query::Iden for EventsFTSTable { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!( - s, - "{}", - match self { - Self::Table => "events_fts", - Self::EventId => "id", - Self::Content => "content", - } - ) - .unwrap() - } -} - -enum TagsTable { - Table, - Tag, - Value, - EventId, -} - -impl sea_query::Iden for TagsTable { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!( - s, - "{}", - match self { - Self::Table => "tags", - Self::Tag => "tag", - Self::Value => "value", - Self::EventId => "event_id", - } - ) - .unwrap() - } -} - -enum EventSeenByRelaysTable { - Table, - Id, - EventId, - RelayURL, -} - -impl sea_query::Iden for EventSeenByRelaysTable { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!( - s, - "{}", - match self { - Self::Table => "event_seen_by_relays", - Self::Id => "id", - Self::EventId => "event_id", - Self::RelayURL => "relay_url", - } - ) - .unwrap() - } -} +use crate::noose::sqlite_tables::*; #[derive(Debug)] pub struct NostrSqlite { @@ -494,86 +341,159 @@ impl NostrSqlite { return Ok(false); } - } else { - log::debug!("inserting new event in events"); - // Insert into Events table - let (sql, values) = Query::insert() - .into_table(EventsTable::Table) - .columns([ - EventsTable::EventId, - EventsTable::Content, - EventsTable::Kind, - EventsTable::Pubkey, - EventsTable::CreatedAt, - EventsTable::Tags, - EventsTable::Sig, - ]) - .values_panic([ - id.clone().into(), - content.clone().into(), - kind.into(), - pubkey.into(), - created_at.into(), - tags.into(), - sig.into(), - ]) - .build_rusqlite(SqliteQueryBuilder); - if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) { - log::error!("Error inserting event into 'events' table: {}", err); + match tx.commit() { + Ok(_) => return Ok(true), + Err(err) => { + log::error!("Error during transaction commit: {}", err); + return Ok(false); + } + } + } + + if event.kind() == nostr::Kind::Metadata { + // Try to delete old profile first + let (sql, value) = Query::delete() + .from_table(ProfilesTable::Table) + .and_where(sea_query::Expr::col(ProfilesTable::Pubkey).eq(pubkey.clone())) + .build_rusqlite(SqliteQueryBuilder); + + if let Err(err) = tx.execute(sql.as_str(), &*value.as_params()) { tx.rollback().unwrap(); + log::debug!("Failed to delete old Profile record: {}", err); return Ok(false); - }; - - // Insert into EventsFTS table - log::debug!("inserting new event into eventsFTS"); - let (sql, values) = Query::insert() - .into_table(EventsFTSTable::Table) - .columns([EventsFTSTable::EventId, EventsFTSTable::Content]) - .values_panic([id.clone().into(), content.into()]) + } + + let (sql, value) = Query::insert() + .into_table(ProfilesTable::Table) + .columns([ProfilesTable::Pubkey]) + .values_panic([pubkey.clone().into()]) .build_rusqlite(SqliteQueryBuilder); - if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) { - log::error!("Error inserting event into 'eventsFTS' table: {}", err); + if let Err(err) = tx.execute(sql.as_str(), &*value.as_params()) { tx.rollback().unwrap(); - + + log::debug!("Failed to store Profile"); return Ok(false); } - // Insert into Tags table - log::debug!("inserting new event into tags"); - for tag in event.tags.clone() { - if Self::tag_is_indexable(&tag) { - let tag = tag.to_vec(); - if tag.len() >= 2 { - let tag_name = &tag[0]; - let tag_value = &tag[1]; - if tag_name.len() == 1 { - let (sql, values) = Query::insert() - .into_table(TagsTable::Table) - .columns([ - TagsTable::Tag, - TagsTable::Value, - TagsTable::EventId, - ]) - .values_panic([ - tag_name.into(), - tag_value.into(), - id.clone().into(), - ]) - .build_rusqlite(SqliteQueryBuilder); + let Ok(metadata) = nostr::Metadata::from_json(content.clone()) else { + log::debug!("Failed to parse metadata"); + return Err(Error::bad_request( + "Unable to parse metadata from 'content'", + )); + }; - if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) - { - log::error!( - "Error inserting event into 'tags' table: {}", - err - ); - tx.rollback().unwrap(); + let metadata_custom_fields = serde_json::to_string(&metadata.custom); - return Ok(false); - } + let (sql, value) = Query::insert() + .into_table(MetadataTable::Table) + .columns([ + MetadataTable::Pubkey, + MetadataTable::Name, + MetadataTable::DisplayName, + MetadataTable::About, + MetadataTable::Website, + MetadataTable::Picture, + MetadataTable::Banner, + MetadataTable::Nip05, + MetadataTable::Lud06, + MetadataTable::Lud16, + MetadataTable::Custom, + ]) + .values_panic([ + pubkey.clone().into(), + metadata.name.unwrap_or_default().into(), + metadata.display_name.unwrap_or_default().into(), + metadata.about.unwrap_or_default().into(), + metadata.website.unwrap_or_default().into(), + metadata.picture.unwrap_or_default().into(), + metadata.banner.unwrap_or_default().into(), + metadata.nip05.unwrap_or_default().into(), + metadata.lud06.unwrap_or_default().into(), + metadata.lud16.unwrap_or_default().into(), + metadata_custom_fields.unwrap_or_default().into(), + ]) + .build_rusqlite(SqliteQueryBuilder); + + if let Err(err) = tx.execute(sql.as_str(), &*value.as_params()) { + tx.rollback().unwrap(); + + log::debug!("Failed to store Metadata: {}", err); + return Ok(false); + } + } + log::debug!("inserting new event in events"); + // Insert into Events table + let (sql, values) = Query::insert() + .into_table(EventsTable::Table) + .columns([ + EventsTable::EventId, + EventsTable::Content, + EventsTable::Kind, + EventsTable::Pubkey, + EventsTable::CreatedAt, + EventsTable::Tags, + EventsTable::Sig, + ]) + .values_panic([ + id.clone().into(), + content.clone().into(), + kind.into(), + pubkey.into(), + created_at.into(), + tags.into(), + sig.into(), + ]) + .build_rusqlite(SqliteQueryBuilder); + + if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) { + log::error!("Error inserting event into 'events' table: {}", err); + tx.rollback().unwrap(); + + return Ok(false); + }; + + // Insert into EventsFTS table + log::debug!("inserting new event into eventsFTS"); + let (sql, values) = Query::insert() + .into_table(EventsFTSTable::Table) + .columns([EventsFTSTable::EventId, EventsFTSTable::Content]) + .values_panic([id.clone().into(), content.into()]) + .build_rusqlite(SqliteQueryBuilder); + + if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) { + log::error!("Error inserting event into 'eventsFTS' table: {}", err); + tx.rollback().unwrap(); + + return Ok(false); + } + + // Insert into Tags table + log::debug!("inserting new event into tags"); + for tag in event.tags.clone() { + if Self::tag_is_indexable(&tag) { + let tag = tag.to_vec(); + if tag.len() >= 2 { + let tag_name = &tag[0]; + let tag_value = &tag[1]; + if tag_name.len() == 1 { + let (sql, values) = Query::insert() + .into_table(TagsTable::Table) + .columns([TagsTable::Tag, TagsTable::Value, TagsTable::EventId]) + .values_panic([ + tag_name.into(), + tag_value.into(), + id.clone().into(), + ]) + .build_rusqlite(SqliteQueryBuilder); + + if let Err(err) = tx.execute(sql.as_str(), &*values.as_params()) { + log::error!("Error inserting event into 'tags' table: {}", err); + tx.rollback().unwrap(); + + return Ok(false); } } } @@ -1265,6 +1185,105 @@ impl NostrSqlite { query_result } + + async fn get_profile( + &self, + public_key: XOnlyPublicKey, + ) -> Result { + let pk = public_key.to_string(); + + let Ok(connection) = self.get_connection().await else { + return Err(Error::internal_with_message("Unable to get DB connection")); + }; + + let Ok(query_result) = connection + .interact( + move |conn: &mut rusqlite::Connection| -> Result { + let (sql, value) = Query::select() + .from(MetadataTable::Table) + .columns([ + MetadataTable::Pubkey, + MetadataTable::Name, + MetadataTable::DisplayName, + MetadataTable::About, + MetadataTable::Website, + MetadataTable::Picture, + MetadataTable::Banner, + MetadataTable::Nip05, + MetadataTable::Lud06, + MetadataTable::Lud16, + MetadataTable::Custom, + ]) + .and_where(sea_query::Expr::col(MetadataTable::Pubkey).eq(&pk)) + .limit(1) + .build_rusqlite(SqliteQueryBuilder); + + let Ok(res) = conn.query_row(sql.as_str(), &*value.as_params(), |row| { + let profile_row: ProfileRow = row.into(); + let profile = nostr_database::Profile::from(&profile_row); + + Ok(profile) + }) else { + return Err(Error::not_found("user", pk)); + }; + + Ok(res) + }, + ) + .await + else { + return Err(Error::internal_with_message( + "Failed to execute query 'get_profile'", + )); + }; + + query_result + } + + async fn create_nip05_profile(&self, user: UserBody) -> Result<(), Error> { + let Ok(connection) = self.get_connection().await else { + return Err(Error::internal_with_message("Unable to get DB connection")); + }; + + let Ok(query_result) = connection + .interact( + move |conn: &mut rusqlite::Connection| -> Result<(), Error> { + let (sql, values) = Query::insert() + .into_table(Nip05Table::Table) + .columns([ + Nip05Table::Username, + Nip05Table::Pubkey, + Nip05Table::Relays, + Nip05Table::JoinedAt, + ]) + .values_panic([ + user.name.clone().into(), + user.get_pubkey().into(), + serde_json::to_string(&user.relays).unwrap().into(), + nostr::Timestamp::now().as_i64().into(), + ]) + .build_rusqlite(SqliteQueryBuilder); + + match conn.execute(sql.as_str(), &*values.as_params()) { + Ok(_) => Ok(()), + Err(e) => { + if e.to_string().contains("nip05.pubkey") { + return Err(Error::invalid_request_body("pubkey already taken")); + } + Err(Error::invalid_request_body("name already taken")) + } + } + }, + ) + .await + else { + return Err(Error::internal_with_message( + "Failed to execute query 'get_nip05_profile'", + )); + }; + + query_result + } } impl From for Error { @@ -1417,10 +1436,43 @@ impl Noose for NostrSqlite { } } // NIP-05 - Command::DbReqGetUser(username) => match self.get_nip05(username).await { - Ok(user) => Command::DbResUser(user), + Command::DbReqGetNIP05(username) => match self.get_nip05(username).await { + Ok(user) => Command::DbResNIP05(user), Err(e) => Command::ServiceError(e), }, + Command::DbReqCreateNIP05(user) => match self.create_nip05(user).await { + Ok(_) => Command::DbResOk, + Err(e) => Command::ServiceError(e), + }, + // NIP-42 + Command::DbReqGetProfile(pubkey) => match self.profile(pubkey).await { + Ok(profile) => Command::DbResGetProfile(profile), + Err(e) => Command::ServiceError(e), + }, + Command::DbReqAddContact(profile_pub_key, contact_pub_key) => { + match self.add_contact(profile_pub_key, contact_pub_key).await { + Ok(_) => Command::DbResOk, + Err(e) => Command::ServiceError(e), + } + } + Command::DbReqRemoveContact(profile_pub_key, contact_pub_key) => { + match self.remove_contact(profile_pub_key, contact_pub_key).await { + Ok(_) => Command::DbResOk, + Err(e) => Command::ServiceError(e), + } + } + Command::DbReqGetContactPubkeys(profile_pub_key) => { + match self.contacts_public_keys(profile_pub_key).await { + Ok(contact_pubkeys) => Command::DbResGetContactPubkeys(contact_pubkeys), + Err(e) => Command::ServiceError(e), + } + } + Command::DbReqGetContacts(profile_pub_key) => { + match self.contacts(profile_pub_key).await { + Ok(contacts) => Command::DbResGetContacts(contacts), + Err(e) => Command::ServiceError(e), + } + } _ => Command::Noop, }; if command != Command::Noop { @@ -1489,11 +1541,53 @@ impl Noose for NostrSqlite { async fn get_nip05(&self, username: String) -> Result { self.get_nip05_profile(username).await } + + async fn create_nip05(&self, user: UserBody) -> Result<(), Error> { + self.create_nip05_profile(user).await + } + + async fn profile( + &self, + public_key: nostr::prelude::XOnlyPublicKey, + ) -> Result { + self.get_profile(public_key).await + } + + async fn add_contact( + &self, + profile_public_key: nostr::prelude::XOnlyPublicKey, + contact_public_key: nostr::prelude::XOnlyPublicKey, + ) -> Result<(), Error> { + todo!() + } + + async fn remove_contact( + &self, + profile_public_key: nostr::prelude::XOnlyPublicKey, + contact_public_key: nostr::prelude::XOnlyPublicKey, + ) -> Result<(), Error> { + todo!() + } + + async fn contacts_public_keys( + &self, + public_key: nostr::prelude::XOnlyPublicKey, + ) -> Result, Error> { + todo!() + } + + async fn contacts( + &self, + public_key: nostr::prelude::XOnlyPublicKey, + ) -> Result, Error> { + todo!() + } } #[cfg(test)] mod tests { use crate::noose::sqlite::*; + use nostr::key::FromSkStr; use nostr::EventBuilder; #[tokio::test] @@ -1718,6 +1812,29 @@ mod tests { assert_eq!(result.len(), 1) } + #[tokio::test] + async fn save_metadata_event() { + let config = Arc::new(ServiceConfig::new()); + let db = NostrSqlite::new(config).await; + let secret_key = "nsec1g24e83hwj5gxl0hqxx9wllwcg9rrxthssv0mrxf4dv3lt8dc29yqrxf09p"; + let keys = nostr::Keys::from_sk_str(secret_key).unwrap(); + // Insert + let metadata = nostr::Metadata::new() + .name("Chuck") + .custom_field("feed", "seed"); + let event = nostr::EventBuilder::metadata(&metadata) + .to_event(&keys) + .unwrap(); + + let result = db.save_event(&event).await.unwrap(); + + // Find profile by pk + let pubkey = keys.public_key(); + let res = db.get_profile(pubkey).await.unwrap(); + + assert_eq!(res.name(), "Sneed"); + } + #[tokio::test] async fn save_event_with_a_tag() { let config = Arc::new(ServiceConfig::new()); diff --git a/src/noose/sqlite_tables.rs b/src/noose/sqlite_tables.rs new file mode 100644 index 0000000..94b46f5 --- /dev/null +++ b/src/noose/sqlite_tables.rs @@ -0,0 +1,322 @@ +use std::collections::HashMap; + +use nostr::{key::FromPkStr, Event, Metadata}; +use nostr_database::Profile; +use rusqlite::Row; + +#[derive(Debug, Clone)] +pub struct EventRow { + pub id: String, + pub pubkey: String, + pub created_at: i64, + pub kind: i64, + pub tags: String, + pub sig: String, + pub content: String, +} + +impl From<&Row<'_>> for EventRow { + fn from(row: &Row) -> Self { + let id: String = row.get("id").unwrap(); + let pubkey: String = row.get("pubkey").unwrap(); + let created_at: i64 = row.get("created_at").unwrap(); + let kind: i64 = row.get("kind").unwrap(); + let tags: String = row.get("tags").unwrap(); + let sig: String = row.get("sig").unwrap(); + let content: String = row.get("content").unwrap(); + + Self { + id, + pubkey, + created_at, + kind, + tags, + sig, + content, + } + } +} + +impl From<&EventRow> for Event { + fn from(row: &EventRow) -> Self { + row.to_event() + } +} + +impl EventRow { + pub fn to_event(&self) -> Event { + let tags: Vec> = serde_json::from_str(&self.tags).unwrap(); + + let event_json = serde_json::json!( + { + "id": self.id, + "content": self.content, + "created_at": self.created_at, + "kind": self.kind, + "pubkey": self.pubkey, + "sig": self.sig, + "tags": tags + } + ); + + Event::from_value(event_json).unwrap() + } +} + +pub enum EventsTable { + Table, + EventId, + Kind, + Pubkey, + Content, + CreatedAt, + Tags, + Sig, +} + +impl sea_query::Iden for EventsTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "events", + Self::EventId => "id", + Self::Kind => "kind", + Self::Pubkey => "pubkey", + Self::Content => "content", + Self::CreatedAt => "created_at", + Self::Tags => "tags", + Self::Sig => "sig", + } + ) + .unwrap() + } +} + +pub enum EventsFTSTable { + Table, + EventId, + Content, +} + +impl sea_query::Iden for EventsFTSTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "events_fts", + Self::EventId => "id", + Self::Content => "content", + } + ) + .unwrap() + } +} + +pub enum TagsTable { + Table, + Tag, + Value, + EventId, +} + +impl sea_query::Iden for TagsTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "tags", + Self::Tag => "tag", + Self::Value => "value", + Self::EventId => "event_id", + } + ) + .unwrap() + } +} + +pub enum EventSeenByRelaysTable { + Table, + Id, + EventId, + RelayURL, +} + +impl sea_query::Iden for EventSeenByRelaysTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "event_seen_by_relays", + Self::Id => "id", + Self::EventId => "event_id", + Self::RelayURL => "relay_url", + } + ) + .unwrap() + } +} + +pub enum ProfilesTable { + Table, + Pubkey, +} + +impl sea_query::Iden for ProfilesTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "profiles", + Self::Pubkey => "pubkey", + } + ) + .unwrap() + } +} + +pub enum ContactsTable { + Table, + Profile, + Contact, +} + +impl sea_query::Iden for ContactsTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "contacts", + Self::Profile => "profile", + Self::Contact => "contact", + } + ) + .unwrap() + } +} + +pub enum MetadataTable { + Table, + Pubkey, + Name, + DisplayName, + About, + Website, + Picture, + Banner, + Nip05, + Lud06, + Lud16, + Custom, +} + +impl sea_query::Iden for MetadataTable { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "metadata", + Self::Pubkey => "pubkey", + Self::Name => "name", + Self::DisplayName => "display_name", + Self::About => "about", + Self::Website => "website", + Self::Picture => "picture", + Self::Banner => "banner", + Self::Nip05 => "nip05", + Self::Lud06 => "lud06", + Self::Lud16 => "lud16", + Self::Custom => "custom", + } + ) + .unwrap() + } +} + +#[derive(Debug, Clone)] +pub struct ProfileRow { + pubkey: String, + // metadata + name: Option, + display_name: Option, + about: Option, + website: Option, + picture: Option, + banner: Option, + nip05: Option, + lud06: Option, + lud16: Option, + custom: Option, +} + +impl From<&Row<'_>> for ProfileRow { + fn from(row: &Row) -> Self { + let pubkey: String = row.get("pubkey").unwrap(); + let name: Option = row.get("name").unwrap_or_default(); + let display_name: Option = row.get("display_name").unwrap_or_default(); + let about = row.get("about").unwrap_or_default(); + let website: Option = row.get("website").unwrap_or_default(); + let picture: Option = row.get("picture").unwrap_or_default(); + let banner: Option = row.get("banner").unwrap_or_default(); + let nip05: Option = row.get("nip05").unwrap_or_default(); + let lud06: Option = row.get("lud06").unwrap_or_default(); + let lud16: Option = row.get("lud16").unwrap_or_default(); + let custom: Option = row.get("custom").unwrap_or_default(); + + Self { + pubkey, + name, + display_name, + about, + website, + picture, + banner, + nip05, + lud06, + lud16, + custom, + } + } +} + +impl From<&ProfileRow> for Profile { + fn from(row: &ProfileRow) -> Self { + let row = row.to_owned(); + // let f = nostr::EventBuilder::metadata( // Why am I creating this methods in Noose? Just store Kind 0 on a relay and think that the user is registered on the relay ffs + let keys = nostr::Keys::from_pk_str(&row.pubkey).unwrap(); + + let custom_fields: HashMap = match row.custom { + Some(fields_str) => { + let fields: HashMap = + serde_json::from_str(&fields_str).unwrap_or(HashMap::new()); + fields + } + None => { + let f: HashMap = HashMap::new(); + f + } + }; + + let metadata = Metadata { + name: row.name, + display_name: row.display_name, + about: row.about, + website: row.website, + picture: row.picture, + banner: row.banner, + nip05: row.nip05, + lud06: row.lud06, + lud16: row.lud16, + custom: custom_fields, + }; + + nostr_database::Profile::new(keys.public_key(), metadata) + } +} diff --git a/src/relay/ws.rs b/src/relay/ws.rs index 30cd88a..cdcb0da 100644 --- a/src/relay/ws.rs +++ b/src/relay/ws.rs @@ -94,6 +94,17 @@ pub async fn client_connection( } } }, + crate::bussy::Command::ServiceRegistrationRequired(client_id, relay_message) => { + if client.client_id == client_id { + if let Some(sender) = &client.client_connection { + if !sender.is_closed() { + log::info!("[Relay] client needs to be authenticated to make request: {}", relay_message.as_json()); + sender.send(Ok(Message::text(relay_message.as_json()))).unwrap(); + } + + } + } + }, _ => () } @@ -101,13 +112,6 @@ pub async fn client_connection( Some(message) = client_receiver.next() => { match message { Ok(message) => { - // ws_sender - // .send(message) - // .unwrap_or_else(|e| { - // log::error!("websocket send error: {}", e); - // }) - // .await; - match ws_sender.send(message).await { Ok(_) => (), Err(e) => { @@ -194,7 +198,7 @@ async fn socket_on_message(context: &Context, client: &mut Client, msg: Message) } }; - log::info!( + log::debug!( "[client {} - {}] message: {}", client.ip(), client.client_id, @@ -213,21 +217,63 @@ fn send(client: &Client, message: Message) { async fn handle_msg(context: &Context, client: &mut Client, client_message: ClientMessage) { match client_message { - ClientMessage::Event(event) => handle_event(context, client, event).await, + ClientMessage::Event(event) => { + if context.config.auth_required() + && event.kind() != nostr::Kind::Metadata + && !client.authenticated + { + request_auth(context, client).await; + return; + } + handle_event(context, client, event).await + } ClientMessage::Req { subscription_id, filters, - } => handle_req(context, client, subscription_id, filters).await, + } => { + if context.config.auth_required() && !client.authenticated { + request_auth(context, client).await; + return; + } + handle_req(context, client, subscription_id, filters).await + } ClientMessage::Count { subscription_id, filters, - } => handle_count(context, client, subscription_id, filters).await, + } => { + if context.config.auth_required() && !client.authenticated { + request_auth(context, client).await; + return; + } + handle_count(context, client, subscription_id, filters).await + } ClientMessage::Close(subscription_id) => handle_close(client, subscription_id).await, - ClientMessage::Auth(event) => handle_auth(client, event).await, - _ => (), + ClientMessage::Auth(event) => handle_auth(context, client, event).await, + // Unhandled messages + _ => unhandled_message(context, client).await, } } +async fn request_auth(context: &Context, client: &mut Client) { + let challenge = uuid::Uuid::new_v4().to_string(); + client.set_challenge(challenge.clone()); + + let auth_message = nostr::RelayMessage::auth(challenge); + context + .pubsub + .publish( + channels::MSG_RELAY, + crate::bussy::Message { + source: channels::MSG_RELAY, + content: crate::bussy::Command::ServiceRegistrationRequired( + client.client_id, + auth_message, + ), + }, + ) + .await; +} + async fn handle_event(context: &Context, client: &Client, event: Box) { log::debug!("handle_event is processing new event"); @@ -328,14 +374,35 @@ async fn handle_count( } async fn handle_close(client: &mut Client, subscription_id: SubscriptionId) { - // context.pubsub.send(new nostr event) then handle possible errors client.unsubscribe(subscription_id); - - // let message = Message::text("CLOSE not implemented"); - // send(client, message); } -async fn handle_auth(client: &Client, event: Box) { - let message = Message::text("AUTH not implemented"); - send(client, message); +async fn handle_auth(context: &Context, client: &mut Client, event: Box) { + client.authenticate(&event); + let client_status = format!("Client authenticated: {}", client.authenticated); + let message = nostr::RelayMessage::notice(client_status); + context + .pubsub + .publish( + channels::MSG_RELAY, + crate::bussy::Message { + source: channels::MSG_RELAY, + content: crate::bussy::Command::DbResOkWithStatus(client.client_id, message), + }, + ) + .await; +} + +async fn unhandled_message(context: &Context, client: &Client) { + let message = nostr::RelayMessage::notice("Unsupported Message"); + context + .pubsub + .publish( + channels::MSG_RELAY, + crate::bussy::Message { + source: channels::MSG_RELAY, + content: crate::bussy::Command::DbResOkWithStatus(client.client_id, message), + }, + ) + .await } diff --git a/src/usernames/dto/mod.rs b/src/usernames/dto/mod.rs index 166b658..9b7d1a2 100644 --- a/src/usernames/dto/mod.rs +++ b/src/usernames/dto/mod.rs @@ -1,9 +1,7 @@ -use std::collections::HashMap; - -use crate::usernames::validators::validate_pubkey; +use crate::usernames::validators::{validate_pubkey, validate_relays}; use crate::utils::error::Error; +use nostr::key::XOnlyPublicKey; use nostr::prelude::*; -use nostr::{key::XOnlyPublicKey, Keys}; use regex::Regex; use serde::{Deserialize, Serialize}; use validator::Validate; @@ -12,27 +10,22 @@ lazy_static! { static ref VALID_CHARACTERS: Regex = Regex::new(r"^[a-zA-Z0-9\_]+$").unwrap(); } -#[derive(Serialize, Deserialize, Debug, Validate)] +#[derive(Serialize, Deserialize, Debug, Validate, PartialEq, Clone)] pub struct UserBody { #[validate(length(min = 1), regex = "VALID_CHARACTERS")] pub name: String, #[validate(custom(function = "validate_pubkey"))] - pub pubkey: String, + pubkey: String, + #[validate(custom(function = "validate_relays"))] + pub relays: Vec } impl UserBody { - pub fn get_pubkey(&self) -> XOnlyPublicKey { - let keys = Keys::from_pk_str(&self.pubkey).unwrap(); - - keys.public_key() + pub fn get_pubkey(&self) -> String { + nostr::Keys::from_pk_str(&self.pubkey).unwrap().public_key().to_string() } } -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct Nip05 { - names: HashMap, -} - #[derive(Serialize, Deserialize, Debug, Validate, Clone)] pub struct UserQuery { #[validate(length(min = 1))] diff --git a/src/usernames/filter.rs b/src/usernames/filter.rs index b74c5a8..c4e6864 100644 --- a/src/usernames/filter.rs +++ b/src/usernames/filter.rs @@ -2,10 +2,6 @@ use crate::utils::error::Error; use validator::Validate; use warp::{Filter, Rejection}; -pub fn with_client_ip() {} - -pub fn with_user_body() {} - pub fn validate_body_filter( ) -> impl Filter + Copy { warp::body::json::().and_then(|query: T| async move { diff --git a/src/usernames/handler.rs b/src/usernames/handler.rs index 193d8c3..a229aca 100644 --- a/src/usernames/handler.rs +++ b/src/usernames/handler.rs @@ -6,6 +6,8 @@ use crate::utils::structs::Context; use serde_json::json; use warp::{Rejection, Reply}; +use super::dto::UserBody; + pub async fn get_account( // account: Result, account: Account, @@ -47,7 +49,7 @@ pub async fn get_account( pub async fn get_user(user_query: UserQuery, context: Context) -> Result { let mut subscriber = context.pubsub.subscribe(channels::MSG_NIP05).await; - let command = Command::DbReqGetUser(user_query.name); + let command = Command::DbReqGetNIP05(user_query.name); context .pubsub .publish( @@ -61,7 +63,7 @@ pub async fn get_user(user_query: UserQuery, context: Context) -> Result { + Command::DbResNIP05(profile) => { let response = serde_json::to_value(profile).unwrap(); Ok(warp::reply::json(&response)) } @@ -76,3 +78,35 @@ pub async fn get_user(user_query: UserQuery, context: Context) -> Result Result { + let mut subscriber = context.pubsub.subscribe(channels::MSG_NIP05).await; + + let command = Command::DbReqCreateNIP05(user_body); + context + .pubsub + .publish( + channels::MSG_NOOSE, + Message { + source: channels::MSG_NIP05, + content: command, + }, + ) + .await; + + if let Ok(message) = subscriber.recv().await { + match message.content { + Command::DbResOk => { + Ok(warp::http::StatusCode::CREATED) + } + Command::ServiceError(e) => Err(warp::reject::custom(e)), + _ => Err(warp::reject::custom(Error::internal_with_message( + "Unhandeled message type", + ))), + } + } else { + Err(warp::reject::custom(Error::internal_with_message( + "Unhandeled message type", + ))) + } +} diff --git a/src/usernames/routes.rs b/src/usernames/routes.rs index 0861a2e..ecc435e 100644 --- a/src/usernames/routes.rs +++ b/src/usernames/routes.rs @@ -1,9 +1,9 @@ use crate::noose::user::User; // use super::accounts::create_account; -use super::dto::{Account, UserQuery}; +use super::dto::{Account, UserBody, UserQuery}; use super::filter::{validate_body_filter, validate_query_filter}; -use super::handler::{get_account, get_user}; +use super::handler::{create_user, get_account, get_user}; use crate::utils::filter::with_context; use crate::utils::structs::Context; use warp::{Filter, Rejection, Reply}; @@ -14,25 +14,37 @@ pub fn routes(context: Context) -> impl Filter impl Filter + Clone { - warp::get().and(warp::path(".well-known")) +fn well_known(warp_method: M) -> impl Filter + Clone +where + M: (Filter) + Copy, +{ + warp_method.and(warp::path(".well-known")) } fn nostr_well_known() -> impl Filter + Clone { - well_known().and(warp::path("nostr.json")) + well_known(warp::get()).and(warp::path("nostr.json")) } -pub fn nip05_get(context: Context) -> impl Filter + Clone { +fn nip05_get(context: Context) -> impl Filter + Clone { nostr_well_known() .and(validate_query_filter::()) .and(with_context(context.clone())) .and_then(get_user) } +fn nip05_create(context: Context) -> impl Filter + Clone { + well_known(warp::post()) + .and(warp::path("nostr.json")) + .and(warp::body::content_length_limit(1024)) + .and(validate_body_filter::()) + .and(with_context(context.clone())) + .and_then(create_user) +} + // pub fn account_create( // context: Context, // ) -> impl Filter + Clone { diff --git a/src/usernames/validators.rs b/src/usernames/validators.rs index 48f6cb9..b6dbcb7 100644 --- a/src/usernames/validators.rs +++ b/src/usernames/validators.rs @@ -1,7 +1,7 @@ use super::dto::AccountPubkey; use crate::utils::error::Error; use nostr::prelude::FromPkStr; -use validator::{Validate, ValidationError}; +use validator::{Validate, ValidationError, validate_url}; pub async fn validate_account_pubkey_query( account_pubkey: AccountPubkey, @@ -25,6 +25,18 @@ pub fn validate_pubkey(value: &str) -> Result<(), ValidationError> { match nostr::Keys::from_pk_str(value) { Ok(_) => Ok(()), - Err(_) => Err(ValidationError::new("Unable to parse pk_str")), + Err(_) => Err(ValidationError::new("Failed to parse pubkey")), } } + +pub fn validate_relays(relays: &Vec) -> Result<(), ValidationError> { + if relays.is_empty() { + return Ok(()) + } + + if relays.iter().all(validate_url) { + return Ok(()) + } + + Err(ValidationError::new("Relays have wrong url format")) +} diff --git a/src/utils/config.rs b/src/utils/config.rs index 889ea3c..f3d3d22 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -6,6 +6,7 @@ use nostr::{key::FromPkStr, secp256k1::XOnlyPublicKey}; pub struct Config { admin_pubkey: XOnlyPublicKey, db_path: PathBuf, + auth_required: bool, } impl Default for Config { @@ -23,13 +24,22 @@ impl Config { .public_key(); let db_path = std::env::var("DATABASE_URL").map(PathBuf::from).unwrap(); + let auth_required: bool = std::env::var("CONFIG_ENABLE_AUTH") + .unwrap_or("false".to_string()) + .parse() + .unwrap(); Self { admin_pubkey, db_path, + auth_required, } } + pub fn auth_required(&self) -> bool { + self.auth_required + } + pub fn get_admin_pubkey(&self) -> &XOnlyPublicKey { &self.admin_pubkey } @@ -43,7 +53,7 @@ impl Config { "contact": "klink@zhitno.st", "name": "zhitno.st", "description": "Very *special* nostr relay", - "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45, 50 ], + "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 42, 45, 50 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", "version": "0.1.1" }) diff --git a/src/utils/structs.rs b/src/utils/structs.rs index e2b91a2..cd90fdb 100644 --- a/src/utils/structs.rs +++ b/src/utils/structs.rs @@ -4,6 +4,7 @@ use crate::PubSub; use nostr::{Event, Filter, SubscriptionId}; use std::collections::HashMap; +use std::str::FromStr; use std::sync::Arc; use tokio::sync::mpsc; use uuid::Uuid; @@ -50,6 +51,8 @@ pub struct Client { pub client_id: Uuid, pub client_connection: Option>>, pub subscriptions: HashMap, + pub authenticated: bool, // NIP-42 + challlenge: Option, // NIP-42 max_subs: usize, } @@ -60,6 +63,8 @@ impl Client { client_id: Uuid::new_v4(), client_connection: None, subscriptions: HashMap::new(), + authenticated: false, + challlenge: None, max_subs: MAX_SUBSCRIPTIONS, } } @@ -68,6 +73,43 @@ impl Client { &self.client_ip_addr } + pub fn set_challenge(&mut self, challenge: String) { + self.challlenge = Some(challenge); + } + + pub fn authenticate(&mut self, event: &nostr::Event) { + if self.challlenge.is_none() { + return; + } + + let challenge_tag = nostr::Tag::Challenge(self.challlenge.clone().unwrap()); + let relay_tag = nostr::Tag::Relay(nostr::UncheckedUrl::from_str("ws://0.0.0.0:8080").unwrap()); // TODO: Use relay address from env variable + if let Ok(()) = event.verify() { + log::debug!("event is valid"); + if event.kind.as_u32() == 22242 && event.created_at() > nostr::Timestamp::from(nostr::Timestamp::now().as_u64() - 600) { + log::debug!("kind is correct and timestamp is good"); + let mut challenge_matched = false; + let mut relay_matched = false; + event.tags().iter().for_each(|tag| { + if tag == &challenge_tag { + challenge_matched = true; + log::debug!("challenge matched"); + } + + if tag == &relay_tag { + relay_matched = true; + log::debug!("relay matched"); + } + }); + + if challenge_matched && relay_matched { + log::debug!("client now authenticated"); + self.authenticated = true; + } + } + } + } + pub fn subscribe(&mut self, subscription: Subscription) -> Result<(), Error> { let k = subscription.get_id(); let sub_id_len = k.len(); From d06206bb24ca223b8586c679832ff758153e79e5 Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Tue, 13 Feb 2024 09:53:41 -0600 Subject: [PATCH 06/10] Finished NIP42 implementation --- flake.nix | 2 ++ modules/sneedstr.nix | 9 +++++ src/bussy/mod.rs | 3 +- src/noose/pipeline.rs | 2 +- src/noose/sqlite.rs | 3 +- src/relay/ws.rs | 84 ++++++++++++++++++++++++++++++++++++++----- src/utils/config.rs | 11 ++++-- src/utils/structs.rs | 4 +-- 8 files changed, 101 insertions(+), 17 deletions(-) diff --git a/flake.nix b/flake.nix index a0fed6d..80ce26b 100644 --- a/flake.nix +++ b/flake.nix @@ -50,6 +50,8 @@ env = { DATABASE_URL = "/tmp/sqlite.db"; ADMIN_PUBKEY = "npub1m2w0ckmkgj4wtvl8muwjynh56j3qd4nddca4exdg4mdrkepvfnhsmusy54"; + CONFIG_ENABLE_AUTH = "false"; + CONFIG_RELAY_URL = "ws://0.0.0.0:8080"; RUST_BACKTRACE = 1; RUST_LOG = "debug"; }; diff --git a/modules/sneedstr.nix b/modules/sneedstr.nix index 57e9d27..ded77a1 100644 --- a/modules/sneedstr.nix +++ b/modules/sneedstr.nix @@ -41,6 +41,10 @@ in { Local nixos-container ip address ''; }; + relayUrl = mkOption { + type = types.str; + description = "Relay URL that will be used for NIP-42 AUTH validation"; + }; }; config = mkIf cfg.enable { @@ -70,6 +74,7 @@ in { DATABASE_URL = "${DB_PATH}/sneedstr.db"; ADMIN_PUBKEY = cfg.adminPubkey; CONFIG_ENABLE_AUTH = cfg.enableAuth; + CONFIG_RELAY_URL = cfg.relayUrl; }; startLimitBurst = 1; startLimitIntervalSec = 10; @@ -117,6 +122,10 @@ in { proxyWebsockets = true; # needed if you need to use WebSocket recommendedProxySettings = true; }; + locations."/register" = { + proxyPass = "http://${cfg.localAddress}:8085"; + recommendedProxySettings = true; + }; }; }; }; diff --git a/src/bussy/mod.rs b/src/bussy/mod.rs index b5f899e..147d5d9 100644 --- a/src/bussy/mod.rs +++ b/src/bussy/mod.rs @@ -10,6 +10,7 @@ use tokio::sync::{broadcast, Mutex}; pub mod channels { pub static MSG_NOOSE: &str = "MSG_NOOSE"; pub static MSG_NIP05: &str = "MSG_NIP05"; + pub static MSG_AUTH: &str = "MSG_AUTH"; pub static MSG_RELAY: &str = "MSG_RELAY"; pub static MSG_PIPELINE: &str = "MSG_PIPELINE"; pub static MSG_SLED: &str = "MSG_SLED"; @@ -111,7 +112,7 @@ impl PubSub { } pub async fn subscribe(&self, topic: &str) -> broadcast::Receiver { - let (tx, _rx) = broadcast::channel(32); // 32 is the channel capacity + let (tx, _rx) = broadcast::channel(256); // 256 is the channel capacity let mut subscribers = self.subscribers.lock().await; subscribers .entry(topic.to_string()) diff --git a/src/noose/pipeline.rs b/src/noose/pipeline.rs index 0b0e189..b3c24c6 100644 --- a/src/noose/pipeline.rs +++ b/src/noose/pipeline.rs @@ -22,7 +22,7 @@ impl Pipeline { let channel; let command = match message.content { Command::PipelineReqEvent(client_id, event) => { - match self.handle_event(client_id, event.clone()).await { + match self.handle_event(client_id, event).await { Ok(_) => { log::info!("[Pipeline] handle_event completed"); channel = message.source; diff --git a/src/noose/sqlite.rs b/src/noose/sqlite.rs index 77e037c..821faed 100644 --- a/src/noose/sqlite.rs +++ b/src/noose/sqlite.rs @@ -1487,7 +1487,7 @@ impl Noose for NostrSqlite { message, channel ); - + pubsub.publish(channel, message).await; } } @@ -1496,7 +1496,6 @@ impl Noose for NostrSqlite { } async fn write_event(&self, event: Box) -> Result { - // TODO: Maybe do event validation and admin deletions here match self.save_event(&event).await { Ok(status) => { let relay_message = nostr::RelayMessage::ok(event.id, status, ""); diff --git a/src/relay/ws.rs b/src/relay/ws.rs index cdcb0da..3c103cc 100644 --- a/src/relay/ws.rs +++ b/src/relay/ws.rs @@ -215,36 +215,60 @@ fn send(client: &Client, message: Message) { } } +fn needs_auth(context: &Context, client: &Client, event: Option<&Event>) -> bool { + if !context.config.auth_required() { + return false; + } + + if event.is_some() { + let event = event.unwrap(); + let admin_pk = context.config.get_admin_pubkey(); + if event.pubkey == *admin_pk { + return false; + } + + if event.kind() == nostr::Kind::Metadata { + return false; + } + } + + if !client.authenticated { + return true; + } + + false +} + async fn handle_msg(context: &Context, client: &mut Client, client_message: ClientMessage) { match client_message { ClientMessage::Event(event) => { - if context.config.auth_required() - && event.kind() != nostr::Kind::Metadata - && !client.authenticated - { + if needs_auth(context, client, Some(&event)) { request_auth(context, client).await; return; } + handle_event(context, client, event).await } ClientMessage::Req { subscription_id, filters, } => { - if context.config.auth_required() && !client.authenticated { + if needs_auth(context, client, None) { request_auth(context, client).await; return; } + handle_req(context, client, subscription_id, filters).await } ClientMessage::Count { subscription_id, filters, } => { - if context.config.auth_required() && !client.authenticated { + if needs_auth(context, client, None) { request_auth(context, client).await; return; } + handle_count(context, client, subscription_id, filters).await } ClientMessage::Close(subscription_id) => handle_close(client, subscription_id).await, @@ -378,9 +402,51 @@ async fn handle_close(client: &mut Client, subscription_id: SubscriptionId) { } async fn handle_auth(context: &Context, client: &mut Client, event: Box) { - client.authenticate(&event); - let client_status = format!("Client authenticated: {}", client.authenticated); - let message = nostr::RelayMessage::notice(client_status); + let mut subscriber = context.pubsub.subscribe(channels::MSG_AUTH).await; + context + .pubsub + .publish( + channels::MSG_NOOSE, + crate::bussy::Message { + source: channels::MSG_AUTH, + content: crate::bussy::Command::DbReqGetProfile(event.pubkey), + }, + ) + .await; + + let mut message = nostr::RelayMessage::ok( + event.id, + client.authenticated, + "auth-required: User not registered", + ); + + let Ok(result) = subscriber.recv().await else { + context + .pubsub + .publish( + channels::MSG_RELAY, + crate::bussy::Message { + source: channels::MSG_RELAY, + content: crate::bussy::Command::DbResOkWithStatus(client.client_id, message), + }, + ) + .await; + return; + }; + + if let crate::bussy::Command::DbResGetProfile(profile) = result.content { + client.authenticate(context.config.get_relay_url(), &event); + + let client_status = format!("Client authenticated: {}", client.authenticated); + let status_message = if client.authenticated { + "" + } else { + "auth-required: we only accept events from registered users" + }; + + message = nostr::RelayMessage::ok(event.id, client.authenticated, status_message); + }; + context .pubsub .publish( diff --git a/src/utils/config.rs b/src/utils/config.rs index f3d3d22..ea25463 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::{path::PathBuf, str::FromStr}; use nostr::{key::FromPkStr, secp256k1::XOnlyPublicKey}; @@ -7,6 +7,7 @@ pub struct Config { admin_pubkey: XOnlyPublicKey, db_path: PathBuf, auth_required: bool, + relay_url: nostr::UncheckedUrl, } impl Default for Config { @@ -28,11 +29,13 @@ impl Config { .unwrap_or("false".to_string()) .parse() .unwrap(); + let relay_url = nostr::UncheckedUrl::from_str(&std::env::var("CONFIG_RELAY_URL").unwrap()).unwrap(); Self { admin_pubkey, db_path, auth_required, + relay_url, } } @@ -48,12 +51,16 @@ impl Config { self.db_path.clone() } + pub fn get_relay_url(&self) -> nostr::UncheckedUrl { + self.relay_url.clone() + } + pub fn get_relay_config_json(&self) -> serde_json::Value { serde_json::json!({ "contact": "klink@zhitno.st", "name": "zhitno.st", "description": "Very *special* nostr relay", - "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 42, 45, 50 ], + "supported_nips": [ 1, 2, 4, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 42, 45, 50 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", "version": "0.1.1" }) diff --git a/src/utils/structs.rs b/src/utils/structs.rs index cd90fdb..48863d3 100644 --- a/src/utils/structs.rs +++ b/src/utils/structs.rs @@ -77,13 +77,13 @@ impl Client { self.challlenge = Some(challenge); } - pub fn authenticate(&mut self, event: &nostr::Event) { + pub fn authenticate(&mut self, relay_url: nostr::UncheckedUrl, event: &nostr::Event) { if self.challlenge.is_none() { return; } let challenge_tag = nostr::Tag::Challenge(self.challlenge.clone().unwrap()); - let relay_tag = nostr::Tag::Relay(nostr::UncheckedUrl::from_str("ws://0.0.0.0:8080").unwrap()); // TODO: Use relay address from env variable + let relay_tag = nostr::Tag::Relay(relay_url); if let Ok(()) = event.verify() { log::debug!("event is valid"); if event.kind.as_u32() == 22242 && event.created_at() > nostr::Timestamp::from(nostr::Timestamp::now().as_u64() - 600) { From b6dcf619955f8c82fe0ae30093bbb84fa8ddca6c Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Mon, 19 Feb 2024 10:47:49 -0600 Subject: [PATCH 07/10] Increase channel capacity --- src/bussy/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bussy/mod.rs b/src/bussy/mod.rs index 147d5d9..738293d 100644 --- a/src/bussy/mod.rs +++ b/src/bussy/mod.rs @@ -112,7 +112,7 @@ impl PubSub { } pub async fn subscribe(&self, topic: &str) -> broadcast::Receiver { - let (tx, _rx) = broadcast::channel(256); // 256 is the channel capacity + let (tx, _rx) = broadcast::channel(20_000); // 20000 is the channel capacity let mut subscribers = self.subscribers.lock().await; subscribers .entry(topic.to_string()) From 5944414d152cb68b8bb63c6035655ed5af2b7cf3 Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Mon, 19 Feb 2024 10:53:45 -0600 Subject: [PATCH 08/10] Fix typo --- modules/sneedstr.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sneedstr.nix b/modules/sneedstr.nix index ded77a1..7cd3b6a 100644 --- a/modules/sneedstr.nix +++ b/modules/sneedstr.nix @@ -22,7 +22,7 @@ in { ''; }; enableAuth = mkOption { - type = type.bool; + type = types.bool; default = false; description = "Require NIP-42 Authentication for REQ and EVENT"; }; From 1f7270dabf7146ce828e568f9bdc99b23311db6d Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Mon, 19 Feb 2024 10:56:32 -0600 Subject: [PATCH 09/10] Convert bool to string --- modules/sneedstr.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sneedstr.nix b/modules/sneedstr.nix index 7cd3b6a..be8843a 100644 --- a/modules/sneedstr.nix +++ b/modules/sneedstr.nix @@ -73,7 +73,7 @@ in { environment = { DATABASE_URL = "${DB_PATH}/sneedstr.db"; ADMIN_PUBKEY = cfg.adminPubkey; - CONFIG_ENABLE_AUTH = cfg.enableAuth; + CONFIG_ENABLE_AUTH = "${cfg.enableAuth}"; CONFIG_RELAY_URL = cfg.relayUrl; }; startLimitBurst = 1; From e40a4645a373223cd9550f5937310cc681b49df0 Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Mon, 19 Feb 2024 11:02:19 -0600 Subject: [PATCH 10/10] Convert bool to string --- modules/sneedstr.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sneedstr.nix b/modules/sneedstr.nix index be8843a..1768b09 100644 --- a/modules/sneedstr.nix +++ b/modules/sneedstr.nix @@ -73,7 +73,7 @@ in { environment = { DATABASE_URL = "${DB_PATH}/sneedstr.db"; ADMIN_PUBKEY = cfg.adminPubkey; - CONFIG_ENABLE_AUTH = "${cfg.enableAuth}"; + CONFIG_ENABLE_AUTH = boolToString cfg.enableAuth; CONFIG_RELAY_URL = cfg.relayUrl; }; startLimitBurst = 1;

G-_pHPyvVOF{8;VZwXJ2dj1yuio}T-~qb${?_KkurZKQqkL@xuQ}Wt|J(@gFK9+aaji#9` z6SN;~3|{Y(7!d93GkaHnnBv;}+RxFY@6Fru=l)syFns^Ns~s~LJ`1^U{dSiBGog!L zK1OENmy4&Kc4)LuX=eO?|NrlLbN_jBm+UHNzjR1^_m89P##v%lZhFa`JfnW6GJD5w zmOV9fZj3CSCDZ3zQQZo2kb2)qae2%# z)D~-5JSVqtUFi8=t5`%0w(k7;Vdk~1jAxm51gKw7eK@POaS3Okw9dE``%i=YUGz&SNOuT z%UM2_^WRjvU5pDNAFMpvNLjfraj!CMUTVJQ%e|fE z%e`bfx@{Kkv)FH9GFejo*Ms(1tN;C+|NrNP<43<`CH_5Tek@n8qp4*1H!=3-<@=5& zZhawEuu-O)WkI3Zr5CO_+rPS-m|VZ)e>*>X^`(<_t378--}7YY)T;wO8@9YX z)2_z4WkuZV8)9cNxz~$vEo#Y4@hUcbdaG(jE#rr<`l{85$GJGwa-*1LpSPH;6QQt3 zv4Vy9T1V(-A0y7BT$WPT`jMGLN_XnvyOy zcUFv@Z{)GHq6+`C7`CmS-x_Q&d#|S4i=#|eyd)2ARSdb{(RQoynvSskW2yShjw@rQ zy7}I_;~8vM7MJ~8y>#Ol`;a3KO4nEBruVJ<7%5(HU-_N+hM+koC%&)y{@b>h{jY-4 z##Y-0ul8@@S?jy3bD3#hphEFkrG^8R$x^#3^Ep}Xl;6(XE?>6Fbv?&x@3>E!9vaV& zWUT7n)#kb>g;{8Ch4;r4r)Jv^j2VrlO@%g(XW8A$UT<5yb$3Xj@~eZkOPV&B9yZD< zxEl4RL0DtP^oF+d4&Z`(Kuc@UhbxW&>QV!duqPUyw@)W;Y(`u^DmtJxFr?Xxx zdu8F#*~LsrURuhfo;f>0H#IHz`aXtlu7#>wRD#XS?x`ovObT||b3gmRzH<>N=?B)Bu3XgX_agBdK{P<@;X89{$~Dzwh?h|Ff!EUi|yMzn)Y;sHn&=YuX4+j z?X4kvxeUAKZuGcovS4l?2iGzIixm&TB~19sdM2$=n_9L)k!5qxEVa^=bN}B+-}gUI zRefW{mnp$n(+Zegu6Ww^a6!?f2dAp9l*PnU-&(nx_xQABcC5TJH(y^+m?Uv~N|?=q z24?H_$64%e?$0{A=kd}Fk?Y?**u?UDZgri1O3g3h-WTL8Ss*JIa(%wj>OC2reeFVCup4lY4CQ5=; z^?#nozuCW6ggKhDe^c6;@hR+J`qIr0nGE-)$oolZo?LlSlx6>BnRmHe#+j1V1_#fW zPMLe?z~6?Mp|TY}$~Z!rt2w*xK9BpJSG;Ry8o%N9^%|dj_WW{Mw*7VJ;V|!|WqG~uk2^!ZJ!qxz_&aUF zeO4EnxW=TZ>zrX|rC{wRACYft8+BM+A5KfEnE%x?b!FM~V`&~cf6Mdfc1)F%Pgx{1 zpEc}R(G3IBUw3W>mo!xC9QOMx>6M=KEH6W6>v=xE2dm${<&b4#n_?jPQ>N_*LrMF` zRWXYs>kF^%=AFJTq;b`&wzjIfujAsc*Ogy+(k^3i=h?RHdAZY8JBVD9@vx3hoPRs+ z(8b`h`s^3x&tp8hPsV4>j_r4Y3@+(EFlXah@W^3Oi+@UrSQDr7kbxVZ9a)WJc=lWvG*3CWjJPf0KIbYRuXc=Y#z)hz$EImla_?mY zx4v9=Vdn(~%kSSV7e-(HH#vCrG$VDp8UqFw<@1NEEqAni3t6IOFFAJ;f7q77qYtls zyXKu<6lTXTi=R^_bVu)lWlP0R9e%RWl4H;L+Gg*(vR;+&ifcSZK?6XNU!IU z`3@_*rtx zLvvQ2Z@;bI*}i`%Gihnt-nyrC_n+H+m(-h){PuB~NJQ{AQ^occR_=Xf`M0We+^LbkJ;@bM)sY7UlP{0{@nMp7!j(hxn{Vrh(iCC)|7Du$p&5$bmCL zD^nva44+t6pGbAr*p?%=@B80b0h-0P7rc`-zi{nw&YgX~--S!Ptvf9GZTF)Uj$N~L z&hGmp)%Hi9%cc43o?Mt` zxYWM>+h${{V|#;?lpR=Ceih`VOYilEythWb%{rJQrguR$z&Rpjad3vp;Zr-fZf5T`oH6Aj%OsC?Gv%XLrJpOT z-h0X9=EgT}zwX@P72)qUke-TMQk4=m?wW_xu1v{sE7LvNefsl*%S(sfQp6n$EA zdVRLO&9XBmeI@5E6}6RmDN=Xt8Pn6X?Yr;R-Vut(Ww#AHE%frouj~8l?tGfIU8?T; z@6Fl9XUciyf1dCEvbE*sy3(~)3R|Y{Ts!TV>WxWUDSxAPs4J+s2~D}VKI`F;J4VOW z6wC-;bU~wJ=9~ME{ba0?50y16+*30{O6z}GTgWbb zes6Xb%kda~xp=E5$+iBF@%xZy-v2M>|9hEZC|O~VH7osChro03{U4StVo9!o>d89Hyvws|@rrug#heUVCTBA=JsSK z@5#ASxpelwK6iY|p@rfNY4rj|Z!TPj64#x$PkBr|Jr_D%cS|5&f=l}MTu{=k@<)6e?r@#38gA5VqvDw3W5@y4u)cj|JT zTpy^$z2TmFVBX8={^C1Met%&1_}8=Sl-YANedc?8Sl3wk=-SQtJDZm+W&C2YNxXOE zHU5>lD`(hPzdRrnI>Ths9P`hsp87Odzt8?Kk;%%kdF5XLgF^{#_RYM1d1FDE(AUjt zA`LiLjY5LmD|r2$ddL5HfB587cSVhh5B8*6UJ`Vdv5eWACRTlYsoUWhakuk3v%D9o zb+7-nP5xy>WS&iA$Rnmplw z|0<=3oPxOL)zT{hR%rgQRgFJ&*z`=!#JOqg96{SEQiT{^hG$>4aIWKZklA{&^3?wQ zD_j)joSxiWXY&6|#=#0(&u;}MoB8Zkd|p}nh{+)NzO_uK!}jFTH!P~RSyQGo_t@xo z`qi$!o73+!x%S6G{@NA(OW%fCKNbnx&!G8QT0dG)DlY!VBXO%#QL9UypRcC9I?~qt zrhfX$y;E8zZLs&Zc)0lR?fc)p8S+^B-pSeix9qU9+_wi4t3o3C<}R3<&bqwUGI#ry zMbnc*Q+J-rzWk{u_PmCXV5pt@v)$d?tVcQ8511xBQjvcTwyQ=HE z%PfpnN-cQj$#0RLyYBFrXD7F&tYx%)x-vd%zBgZg^_$0SvDuU7i0r!3Q8RzXi^4gl zJbLez&f4b6aHAoDb&>Lox9?v($vmC8-(~bm#tqit@73F58dWBISwv+vcx%g zsZmV&@ukI^1rye4)bF)t^i#c9V$mEawr8U6KE_h6hVvU@Odo8riw!%TX~GQoECHI zb#E)ouw1@#y0kxYQ*cC(^tqVbhSq$))^`Ql zf8TjtRy|8ege~A(l73Io1ikp+SGpJOm>0eVofUo~UTFuinP`^^*8Q zquN3Y%w-o1X?)GXi1y7#@k3Tfy1O2v)!rj*|4kvtz( zG>bFj^{<*!Cj}N9WO*6g_Pb)*q4kfJ%DnS0$oFzst$Nwy_q|gV4ViM&7jBnHdH>mD z`IRl1Ou0)QB%}wPG4u2GQndc!Y+A5s+GNvAOATw?-nnl-yPH{E;&^pz)8gd#+MMHk zpWhUOtt@zSP0(HL;?49mf3qLDNi0jh!I!+mX8JDa_GjfLUxMd-n!@;M;}tK>0u{c> zJ2KZJ<9|KS(TZ;giErb_no%si!sbiwT?Ni^(K?wN_+8?kGrQiF7$NRq}Dg* z(G zvucfL7ykae{{Q#23v1WSOxZU3c`@(LJ2%DV`8(PF?o2QYo{+nLPxOL~8+kgTJw*eU zqBwm`>KR)i3j@}N@B1V=SGkXMfp36~)3PgfpWkTXd8t-#IjXDkkKe=Px^F-DovXgY z`CGwsca-h#dG~n}wzP#U{^a1hzg0z|;{D<09LKj@x_)X~+uSgN>KoNrv#wn5G~Z-g z;U>#*i}QD-?HtJf#&xO^(`VT;?iIYi8rU@Xm%#GWyNW*#F-`fq;^A%UYgGrUryIBZ zjC)oY+}EYZxHe$H!v72XI2@e0mtCpI(`y#C`FybMUD#aK^5@p~cOKYd_1uj?hcS2N z1%`7>?fVjfXE9xikPQ>od$McERp$+Ey0-7Uj`n1|f8r&PA5<1#qn0HiA!{SL@U4hA z*CZ}aN001ziMvCl$%S8QP+|gi2-z=ME zYkh;EGAp$;Ewb_g)3~PAoshVCJR`~bvGhH~f zisk#}`M-124L{zjOZv*^9wJdxs&>9^n=jYmsNkg!-ZxpS)cG0^d|q*%X48}6pxx;^ z{1_MisS^{{E;>79(-fP^wNqzpJv8O?9no1!IwyEvnkK^Wt~{_I^=U(Z-p4>0r7gu} zLbqm~4GUT!BcSV@mCKs0oI7K#!U5rws72GmV!jubnkD(`FJ7y5Zm(})gj3ZT^O#S8 zt^5wVEf-B;=F?rURy(0BO7f)OoGT9>G_SjNr*^s3Zvm4}cdy;<;j7tqN$~u)M;~mT zN1lJBeA~@MxOGRuj>B{LUd#GyU*}u1Cr+1F?8MiKhx_+#2>n&Tcd6wzUvUNVMUIexl`#y?qD!Cc=`^Lu0o;isMmYy#SR6{yF zr4&C*TXy*EuCxZB>^6Si;0-Gq*PbZ4EU{R^reC@K;rw@z2W<;1wlUn;uEe`Ca=O#R zgn;5D-@F8Ju6Sy0_`=!u=yi5B%Q@*IoGE*%E-m`!RL#IDI9Qi ze}0)~iC=xbb()<2gSBf9XkGf~f4;`8RW*F|ft~a0%ClzOJo!E3+*YqCamIc$TB)*P&l zD}1@Wrqbs2#GDVel6SN`op(4lzx?&qPgQIm%cmX)`M$B|t!3#wp4%e*Hz%pwj1O@7 zxqWN-{eQ9N+)lMxz4~$fkO60b)sO7-!#KNEMMMce~nDHYd_qIcU+m*_Hjy#>J*mJmu%k;+%$Oq&T+b0>B_5S zQU&V`jV8=Z3*DT%vT}{|?`IRIetXDYzr;Dxb^`A{p-D{A+UqY~;ZkF+KeM`Tt#7oQ zq5lb)uu8%59f#*{pXn}KwCbw6-KU8&&dD?Ge!uTGuX~u@$)$RwnL5_~(aa@WeUB#_ z=Wd?H_9sR1T0Mud=7+!?!Pjyk^% zwiaM=Zq7AL-x*G`-(GR5;NK(ETji8HF}wYHruNl!Z?)e)+_&|=%<^?vJL@W+t#ALn z_kZo)>&L#HK6K|pn|X!-bD)nUd+o2Djr&{z%U((Dt<~TEe#Y}@|7v#rwd_Sar#IQxS+>(sL^4dGYXEN7nG z=6{yiW=l|M`I@tOZx8RRSGU(PmyGIj{qDbY>vslyhUz?qg ztz$b;xBptdPi?T`&fd9?6aU4Ek&56uL9GotoV2XFVez;Sv+K!_O`4lJ46- z8%NeBYT(xv2Q7^Q^+jtuu<-m+yMF z=khw!srCJKZGC&+c&tf(dUD0tRlb))zDPJqY-jbT(rA!*vhK>1ANTXQm;C=4e}COt z*?$|w&uh(@zW2@3cF=Z$RLii{B^urP7WMyZx4+yjf3#cHXJ(;DLELNA%(cG$Ckh2; zeA#`&rgRP;{QJsb_vw#mTz0Y*TlH>DH=cpTx8{CUnlO>hm;nSeg6Q zY^K;gZ}vs(U5w4mLOk;?85nOen2_q2V@qo@J9VCUAof#hrE2wTlED$Pam7WU;X27 z)#cCMoL7X${@*$4r_1filGdlW`~UJSRec}U_muazh4E}-vja<{1f-=*v&~kCV%09jHpnRXAB!eR;dEn2)}ynV;QRA5OK#2~1xs z{1=LgcHXHy^E`^*P%TX4%)a%h1*$oISB2NHDmO_e8tC8J^yBQ5OTIp}%fAFz)|XUO zpPV`&YVYT~fMzfKITo5bk6ymUpm=kyYtHARh0k*L+MdZ;|;wck$!=FBh$|o27%yWINt< zzq%8fWzFC>b(dpdmXgSu``zvHq^Sp?Y90w-7&SH8a!qQh- z8L!h@d{KPTHiu`A76~pn&8INOB=792)!#GN7VutTDp_h|wee!<9F}_FnQek|&IYgF zbx~M<^PP>tUYA2FE8eV`;P*>eVoB^dFU~nT4lOBqAvG>?Ae|S3O>6*3N3UlN?E!D3r zEL!wjb%S!i@wbPhO{Di8YkV;Ms)*ioJ;uA|j;L(fdtuvo^O=+0+?JF+EAr{$X1~8j zw5pleQ`m}|tJjD(sMVd>WqteAgY<|Mr{`|*VA|B!o4RV3z{Up(KbHAi-gt(oYr~EA zuP!J)+NQ-FWO321{@e1csST6WzMM$;?mjFmy+c^zc~3n;;X*RuJWy`s{M7|{eLDD#d!Bt$XThc|LWN@oO&8N zrC#5@^XwY)>PeR#N$|}0y{hGo%W}8SpuT^Lv}RA%`gAR3?x$H+_a1g{eX{&#c60N; ziyI%jKf(B4Vuk*#58X^rn{Tk?GU@Docz!)wb%l2g*Q?DnZlBLGS-xdqpYKl6iMxD0mdAPUe+o|@7Yn$hr&iS-B#}N`E;v z?Wo~lhA6$8ayjyE4L-g9e6IQZ+Ub`*th;BH^zcDXzm&O_&BK=ea}Gq$-Tw1XpW6ia zNzbZ}emwrkaQEqzRjc!-?lykyt)|$K^yOPhRpjNP7gT=<%{tsQd1KvDn^#+OU!L0W z^svX?8^w#yR{doEoUnDJd~og6D7O_at_$v1JvV7@o(!|!OsnO~pX~p3HUCQbBDZL( z?JY}`&0NphDR;T*ap<3GsB!bHm>bEhSo6?lv*r1&cWck}z6nUP-l%M2eZZhK_u;)C zGV@N}%Qmy-=}vNSpKKQRdtXTPy1EyNdztR;*!EXp#q>I-ev`!APj#X`xh|HyJMry` z+?C7~C+sD{6F%=cld5NZ=aYZlRXO`xTeenJKQWDs^3HQpuRSWi`Ek|OuOib+W=`H* z7-hO9|NiA8GmBO=M`icl>i0`dxOtBILVtXpEmud!OQ9rX-7Rya8v_4NJbBE;ZB{0u zq1Z+}6YmWH`x2g2-TM8oD{yo0ikQoGPX7w_SukYOUj02IXG_&JEtToPCpe${u{&G1 zj`8ddlhOw%%=?mCzaO{z_VJbRg>6e^gMT$l-nPW$N_(Brlw&*oWv^}e={VQo!RrUk z>+Y@G^Vr9r_U*RB(>vOp7@bp`f6Sfn&7T>|{5VVw-{P1t<-WzcyjPhf=XOcuZj?6* zeSZGsVjG3eH9IqORW1iM>uyc?H{)v6&Q*@_%IjyXV4o_nH1}xFt(eloxlgp7T<)D+ zl`XPDaL=D)dn;-Crph_Fvod|-tpn%w%sF${KJMm%8HX~&uawGUoqr|1b(f7vu^r2- zTZxvpXQ&A<7;OG_GRo?jlTPTPo1x5)w&(n|?z?GW?R{S}z^-|JR*Yko2jAJ9vvx@C zT+{UIP2}a(p3%|ux=*F=|9JM$-tL3^;X|SEk}x9c#{FeY`!h;)AoCP0a2; zoQ4X$f)}P7eIt+4{P(>)!na?&4InNE#z2-w~>W0`t(+SRM4AGR*L^}~m8FVj!?)rVa#TvghX+Us1+o4R98`dqFx`~kD^}8*rzLi?EA(v^>wj!`LN4WZl<)JP#a0n_CYLCiu3O;OJMY##GtLaV;!9Vh zx##e{*mhucoASHzBL$mxfz3Q?ADJBo^fgClq$RJ z;&@i@!FMgGhe z3Np&XvJQ6NT-Uqhv&NpqszNDEeG_CqW?1dq`Cv)xj%jC)pX~f`#B+YsWup}SNxKgo z=(8ztl@&U($3IGW$5I_>#)?cs;R{Qi@7t(W$zpPAl5T5$+;KhY%cqQ|H@FGh`#tZm zdTz|}d+#*d6s>~ ztI&z_WrTm-v^)9lg`t!4>ejar)=P>-ow8;zFlLuKfRU ztJD(C!=HH$GTeP6wtWqg+deJ-sYLWHxQ9==^fWzj zN$%e_yVAaNy0Lz~wte5$+w&HvJnXS4Z@gL8eO#dAeD7C@)&$m!b^cL{m1g{A=UaQy z>--JJkfYDn{i&EUr}=DQ!ZS6M9aF9T&wJIO^jEuMc4(h3->~!fk4-B1>z-)E zN9S+N)&0CH-uLqTjGp=C3*6le`X@77h*(q@KXq-}TW@FkZ476loa3xoPwtlG4tu)c zW#5CxRlk}=zkG|eIvy*xa_QuN7uPMaXLour-LZSIVeZ`N_lld04&J(@9ad_6;a{i# zi${95@3V}u4{5(PG{xMT{(f(g%$14zdNxmtDzmuh!8$3s>i(swj8(>u&+fWxX1e8j zaqT6+^-qt4_9?VUKg)i8DpSq;u`+Afr^=Q3sWKG@829e@w)eg5zGCYMzU*%sqLzPe zU^3l!w@>V2bjv3p4$sP>o)yls64$Q%DjM@%L$Bt}?*7@U_kpk`O8iF zWR~k?C-tp-`g5M4_qjcn9;{C0v_6%1{6>ZKg;4FE7xsnSv&p=};+ysD+8V*GNXsJS z(i7K<3W5T{n5`IhUEJ{K>XN8imEH$WrR)5Bw&|WEZ-7E@@T!*>~?O}U>cc~X6P*unEb8}{6{OAwag+i6l7wt*q7;vw()`sO}1L*{Ey zy)ylrKN?sA*f~BP*${c-5n*h zWeLa1pHHfG8cAw?lUJL)hw-10t?$zZUL_gsylQKw%+hi^-RCr?VwTf%rOD0jP5FMf zO>50w^ZC+pg`MrD{cEm;dCZ*Ape9pz zsxszIt?)S;Q@3oJr-XAz^1N^Ve#-~kzG1iJe5awO*6nGN)xF=&eY@@5PK)M@)5Y`u z&WUS$)ZMz{$Yg!iyEEgayq35TUM#cgK#k+o=|=?_W(5l$`<2V{!hX)@_FLKSS-+kM z{-ojmaji|)7;K-% zU1yv;Rot;F(Jr3h$zRTASAOi79`|G3`38OUK#R(*zfKwFmxR1}@3EiH`b}Tylux<0 zr%al5nC9&Q!d*|KItk#rlf>qTg=kSG;+A)2Q4= zcba(WuFLlC19g`0_UvBSSF+yUuj12=pHGA?c$(kv_&Y!Qs^#w4d9xU5muklsR#de9 z*>)?f)NJYQf5G9&XP#YLaigNI^WQekGwV3(Gme@@8NT)2J8Bmcc$)eKKtwLtFSpAw+Amz$csI6t^KD%x4?~G?P)(l z&TcC7Ti~$pU(T(f|H^$b_kOPHx;)RI?Tg5s)iGbScwc#6%bNXe{jrN#*8;qjFHpZ9 zv+ZW~4Y4;j&(~aAb^5jJWScb`Zk84PlmBYc#E|jo$isVbKFjBl}i`y z?SDS+-(%yd&z@#YGOq)luZ#bD;o%8(nVY8;uoi9l=5oG5f9fKc@Z}%oR!VzHA547r z#{T%irP54O4;d|4`een{YoBC4RL`BU;$Vy4hULt&W`-Nx`=6Os$kwy*Oy)cL%3`Kp z6P)>8>K?MW8pb>MR@?V2$CoVVVdGe^#CKb(o#Sf8v~P2wEq87yUww*or{j9oJ9)cv zSFQKbIHl9{)J(y}$F0`w@y%-xX`VM3hev%I4p= zA?t;9%tx-R=T8VfUwe?}>r0L7!hK)Q=5Hbw6nF_NYx;-*GTyY~{=BFIkf=oaHEV;gbXFl=G7R0y%`PTvFTiGAeUfp!H$J z_0@A@+^+hb-I;%k4m5TfVXV$UCetpWdo#}7q)bBOFwuG*W`!jjfdp?^d4}Q+H z+UaSzAkx3~Rq*oE2<4{<)B0s5T$MQ}VP<-2VSK?Qb^ld=ZSUFSO}{;@>~z8N!|!8) z-vX1(UFq63WVyza84A@7a1 z|1G<{U1r^~&GVh-CG9@H zED}+7b=bW=Y}T(%|B6E!oG;Fj5x+f6%+*2vFZ;KfbzW;%&Ht{jW|x8U&o{Sz=T)1{ zp81EZHTLtl^c}`uWlzg6o=r2B(Rot*BJUOR-7Wk-tM6F%uYPf&J^iIp_`ip2$oS57C|2aIgM9bN1SV zrwK7VPi7g~Zrg5gxaQlduU+%~X0OPx&0Mf8=<<{P^C{+wuU|WI=KU$py!0Knsyv=b zI5S!tubvaBoqJUBX(->9#~r`rE&cZS zuuAR=Z?YBhE|zzqTjRgHs^}HGaAX1hij#{Zdsz2zbM<(i`lx^Y|8=XA->Zwm7dOoN zvP7M)I<{v0#42B#TU#!LS?!&A_|=lg*675ofBP2i{_(wnBg1ra&FS7XwiUXS?X7A1 zDtO&4ZA9 z(laE>C5et z-?&(HCQqOF=xx^aXDm~kRUgJ|47Ss+?DP(sd#pFX&2OL4%(8cWhUd{>xupk|lJ z*VW#^hga^7z1pwC+dO}=^+C@l&7N@kFRx4+i|_wjGi_T^$Nxj-ffg6zJ`{bscA|D_ z=Urpt&Z{v+!I{io57s{@IJd;~@u6FV*^fn3o(ta5n!YRfH2lQXm5HYQ6zO}`aY9q>$&yBUT%^t2r{i> z|Kcevpfzbj%|)?IBA+Kzi#jpQTABT4MXFhgVe2p_0CA!Z3O)z?wbARQVoWn-) zx6aSb(toC#5ysxi{_sVB;>(tp*7H`a0o>;1;h#(I`$d^sA9#PAt(eL5*)&dWsd;=d z*3yD|8|1nD8s=MnvncqJnsDLLCr{Rcj6VO?aDK0w*KKz2W2VBnpX#%_KEDr&zHPUv z-{r8$WBr_9VWzw1G9CED7@t8`&a_y z{MbKF%@&w^JMA62)BnHnHT#d7np)Qh2j2@gvMueYyuyOM_0vx5imJQBqaMw&*yPQ9*{d!kd6{bb*1i5Gk3=KU^SJpER2rm(5!x+x9pK1&i;N&Yzd`NxGT`xy4e zk2+=P3#{wDvDUxru6(pS#NPV9@xn(tE~x!c+E#bq z;(2lHBTrAoeE;|TYE#23MPKd%#g?aTZOm93^?#wnkp*8ToLZ$YNl)*1sKIuJf=N2& z=^CeJPVc$>Nn!G|JE?QM3>GfrOgHUL_tlnIcTKkQUf1i)Pny&HR31LpE@hfL^=Wn4 z?)qcK^Db&nUb`iFZyrmA6_@UYuHJR)OGARwJo*nld!lXe>yMVh=J;cQ?zT$~)D*nU zG0EF&@J;x4#sLO5ze^vVpZpno_`}}G%zPep(cRah>aJaUe0hKTmDiQ$tMl?3Z_f_C zwqHB+oS}5&zwE2V{>z{4WRL$l;o-!~ox419E95lSRSN0u-~8rvr0A;TS607grB|Qp z%3S+qg6XndePJ!n3%Bub*G~V(b#Ad3%hAJ{JRHj&l&-h>!`#Yo=Z5_QMwul}PtDV3 zJ$)Vb{(D=0?(bQ_Cz>}semW=9Y>9fDHt)&BEPu{gES|Mn-fFEfbBS5UYs)UCgw%OP z*EfHe|900Ijm3&3H{`1?I;?1)yY0%EmnRko&YbpE@~lVk-Ll(n+Ye{2z8QVzkC?89 z%$3ctPcvV*fO<&wbs0D#_Xvx~=zpo43>6{%?<;;oo=V`>orwxaVBxKb-xk z^~FW;ZvOSRLbH|ESFU}h{8IAk&)VFI&s&z;uD#5^M!A;nd#km+tktQ{0oC`6+ZjF> zpPXNGGjmmc$~*_ZxtZDhCq?2Kp6&S~svj@yJ#ALu`qjm6HuuDIvQKTC{rW`z(z0)t zdp2`!@4fr<;OwUIx`dXeJ;t9G*!|gf{(zjbN#-+C<(GHA9p-F4dg#Q?6PuV|YXP3V zUsJAp$RKz@+^b-1tt`RkU-Jt7S|-dt_t5Qt8+WF!(1n!;FUV!A5B5KpDS1<;PHpb- zyah7sXXX{x?01%3eoZQ?OTRq&$NCp-6X%vht*8%bP`$rd?iWwy+Nuq!7q_YyslA=W`IVXQpxK{6C-&b`Z(AM`{dH$-ahC6-wiWsj7XEn9?KAFCr zZ|Bra0w!((s z=DZnmU#I(Rd~tfZ^S2jK4;hv}{b?fh{AK^%6{r2IdpBoEGtNp;_EEZZdZzvXpW3|A z)%I^CH~5)oRT)N2{TTD1Z?4fr#`0tKGp1=}s$F(`Xl>d(P49K~-7N(xbAP2YRLw1V zr5SsE{+}P}#uwH_&H1%&YI*O2`A3TM9^WZFZ+d#pWbsdv=l`jw$a9srv@^-3({F?M ziAz~4=dv1CYTHcj@r?h%o4Q#(AxPlX!3d2lK5vDO`=2)TTV|8FO(FI<=Y?tO13Dz1 zyY9I5{oC^S(LdB}D&m9tb_Orwa1ERB{q&Bt4BM0EM8*_Z)cNy==B6pHh{!Ut+b#d` zeKy zTo?cU*7fI-u1SwtzS#Zy*njm~TJkix&0PUXTVA|B{pbH1@nnt*8&m$OXx}lvb*;y2 zN334z+DSjdxo3U9TYmrE;TF5tZK2C2uHcxs$j-QSQCLj%=UEfaOlD%)B36HgDVL>^ z`|6Yl(`sK-8>Y_ZEP8##Z=wCF%m>aj+s|~0HT+>)aA)g&Yu!mcB|@cUtkJWNXS|5% z>=Wx@>FN3|Cm{dl!j`Q!c0}@8pTGa|!|pG6Q$GFJdiUS-j&{$2NXmTlGo7)JpZ4MXgeofUZQ!l6x`^U4;J;N_ZAbeTL zg$3HXW<@`coc3_d(&TgTnV#S7?@^7&Ts<%1;nGZz66rv;ea@$h*PVVI*KbzI>NSV| zjN?-wp@(nZumZWB3QojX47ShGm9 zjM2AC5q^gxZZ0sdV7sWMwj=1HhJa7>@4biCwyHk=ebq(@s4uMWE(<^?})S$8V{KNzLMZdVW@b_?EG}4caa=ZN15RK zG`0z@tGRefntz`x+8wVu|5okxj}AUNK5Mv4Hp+2W-?x49<>?1PW^D2Mw%D#&?eg3y zL6~|=AuHj>i35WUjXa8nX z^ZZ#8zBbtYS39%$+SLzI!-U?=5jpT_rFw42WTV@sG#P8$U7BZX4ODN`4860h%r%QU zyjD-c*k^j8?d$B_#(BP#SsyG*!Jlc z84fO6YO&C4OXX$hdp8bE2SGoD6OJDa%oAH>%AuF3b@n>w4BKXjaw(5naSv1 z-@>4{ey#9^EM0*s(|46$VUz1f$b082$$9hcvv1pHtGhDvJGF$h{eQNNr-%8@?39&} zf<93}j>d1Mh5g9hdi%e+{nwKZ`=(lUJc_jXzomX=%#_^xr2$@rJu0EQK5RK*p}D5^ zRK8?JhC}-CrN`fyEIttO^z+{t?=0N}S?Z6inEGyMo7X`PucY=hyjfHKe%ropZJ+XQ zhPxI`yuPu|I$X zH(JKg@S4lySqfKVZXLXG_qp0p4~1o%+t-w2OnP@See<-rziv1#SsS1(RA1Fv>6_vE zCY>dYv8w;>_Z2?7oU6arUb0G*|8jimy6U;-yahFEUQdZSaB8D)_GIr+zL4hZ@3-^! zcW0y@*IaCBY`4lzr%!cPV*LfNwR@yuvzO+#IW@*z)PGj2!DF>nlJ9Bd&Gx%x{Oh*| zupjd)=bHWg?w>o2Ub<(?Z->6y9J4~Y=kV2ArBR#1pYeZAnsI?mhrL>Cfl>4R)sicw zUoF`Xz4M!78N=p(j^Y>OO7`68sya0LrO6hF;9E0o)fRxdRQ&GuzIQxa#s2O-hkSqV z<>y_gjx(2$}&%OGYYRA5^Q^&HFTEIZyiE zwk@|#ESaUjuAPt<5UsT#`m(sz?RDWjJ~myQf@&`v1WC%(0NS)y2;QF%M)4Hb4>b|Z`QHJBzKiRIe6YbDuwpy3{ME0NBzRh9v2F)kd`7SBbT5#`u#l(cN!?RM4Y9@=TpOdnguKeN^n+Vsb z2H^uIe*gP4eZS4}6;<}eTYL(iKbg7TvMw`oll+@zRe_&t+)P&_$S+s*soRq?{krOh zuUDlmn6BQe`q}WymZi)EB3g~c&v+Kz(pWm>yX{V)sF_Aq`b&HQvNxYvvuMrDkm<+V z7E3Q$DEBX~^{vJa{o~z&hobn*?)^)aixt)nb@%zOJX@^y%2BaHTaI3|o~@^|Twuf0 z&g9rfhqD&GeX3V}({6^x!icgorW)n0DRUy<&V9Qu#(uR$(C?pnRG&VmK4X6CitdSN zeH)UMd{c_r-k%Uk5j1?Rvgzg7%FA);zN?qLm{^Y;h+0jY;~}|7PZC#XYadF!l4g?dQ{HF5WN>}&z0#`a$iBb6-CJ0)_?}IAzHHgu6+CPn!n?2h^44A<%6!7b z%VRazu`dWvdGj*TaM(I30vo3AX<=gCq%O;dGGwuGX@sDBk`{S$D zS-QA2Z)qxLzto%8}EISX?h41j#Q>FZRinZj))aeUtw-z#+ zE#Ix~t@o}cXF|Kbq^IYCbq)7kMA#*J`kRG@U7yBtRkQNlv~&3@r-r_rb!wlSWB;7= zblzx-f=A0vGOjy2V{6cwv{N6Zr&{e;d35GByKkY#uVj6gf91T)S4+P=Yy2`Jd4FCr ztvy?ocqD=I;YCK7wI3QE+h5pixpmU4razB=?I}DqsWE-0z{hYOgM`5DB@@mrxX{wB z7MV3|DZ`Ry+vm;*HPOsayQoPyL;*rrw=(k70`}YyX|)WhYZ^3a4+1S#|E~={ZwWHKr?k+kE|I9OIed z3rRY*%~}bK7mhXD+V|lW+x;mg+eIIK@C$29kH2NN$??Xn2gdV%mdsuFW20ta{gXxQ zaepuPx!bP$#%S67nM2)uhJ|U9|L>9qn*JMBHLPgg*RVxFcS3I2oxAbPMpswZe!Y8b z3!nDfW8&J6j&yMapI*Dn|KTI+sULF`<3BWsmo(LTIhAd@bc*-hnet2g)&@%_{Z{={ zJZD1Awz!ox=d=p#nKqc5uF(%I{P5-ki~W@*;i&lF1#0#Zna59d`##wHHrzVlzu(R~ z#r?L+BTstHzTPS^eSPiI)qC^aZ@KLET7yB#s!~B~POq5t&3&)RHr~23;cJ~veA1-@ ztgJl8Y+m0KOD@_qXU0sk>?OWDN>g5L3HD#T*mmE=D2eQef9K7*;pn0g0|mKSeWwN#P!Tg`gE(^>+;SE33p#|q1TaaXJ0tT<)3=*bWLts5J{K1g>nRPkyE zPxsAy!ZzJ3uwz!lhVOqb?@P&AG_Q1a+8POt9f8Nz249+X>-6gt&2k%LXI^2}{2y!S zqkct&Ie44&vMFJb85^Vjoz!iYzN+{2_J;P`CfzTKPYV66V*DLEweRFj!_NyQJT@+T zQ~0g;&e@gQZzhZx_F5iN;9QzB)*pBTH){#$GwvM6uQcf^a)lK_1OKTQO z-(8Y!epA?`QPTH**5Q+&1F>bhlE3mNyT%vkTg%RkDEw)ht=gmDdU|u`+25yv{;v8q z@A1(mm*S@~?eP3q^i9%p)|67O1DTf7#G)52k$-T&ZTk!Et^1M{G*^UWD6yv(kB zzhZniYMN`#H`lGF9-oO1VM#e<^4jE2=jEcip;`P-l>2OwZWLPuoh_hcG+zgce=N@dSo6!KT?+&rhZTfe+N`t4Tr zj>EF=0~+@D&A%{vR`s5A78CsjpLtsnFI>5`SHD#C#{PZZw*Nl(z20Dce{DwNuLsTR z?e;7*o0Q`lJ$vr^8181y+i%N{8s1WtW7(4M>{m(NUt7(tTeJ5E@n!M|7c$)aB$82Y z{#-d&wPxPm34V#(@_q|%Mc6GVxpC6F>S6laoh(b!!n-#094=cbEwgx9vW`LN&B&;p zEeySuVvcP3*BKYeMNfBNOsi0wE%z#CO@oP>^S2cnuJn5So}kzDOfB#3`Z7NE)lFgzs%Z2SuaEjQzu}5b7KF$ZU4V|yOhG3nSPS{FSoZmnjyI-t?|3~*0s8; z13OxJrsTc8^v7K8+sX;gexE+|_u2OS@1AdPJ@mKF#;9-3jP@1xzg+pUrFZ7a1%16@ zo~&uH!HJez&*pRa1aDX!-_(-dNa%H(#H znC)8h)xPsfQ|Lmkhm-oH)j}pr3Qp9jUbIB&>rt zd3IQCO@iBjWx6X&QtvqP%(&^ch*iDz)slzLr&`Sa$-H*vYF>-5Bir0B_{x3I*t___ zIsG)xP8Oe{5c`d76Hm@v#<0}WbJr_ZHnk}}mA60ds}!D5D0e?J`s2J9b_>VEP4Q86 ztLkrhw0&VX_4cE-K+yl|d;gVAeIArPKU~j3-=X&A>A1X#+qdssVvqfFYxT68g)2*K zau2<^5xRR;v_F@ZuXdV@^V%JJ@=rbFH?99V_ebrye7Dzb8ytM+*NIhHP20Y5n$21F zpbx75i_H8rpXYnc*xXjM#)P}-gg0lX)YKzi8|5_nW4w-E=J4XXwn=ZTWX2Dch_aYN zC##Y(mA2h(THP0=0EEqskOIw6j~nc>6$yg^jdz~<+_@z^qd_@_o*@d-pjwDGP8_mtPbpOUsg7d+qU} zW$cSjDz9(Oe3TvcdRA%D)kaa@h};K<(z>oVdaHamXTM%aZ0mbN?|C=&t+{TsDX`+> zq2lbzZgF2&?@a&a6tV68zBwm;ZBO=1>IqyNIQdtUtKcyKS6bVrEmLq zV)i%{-wtW2S$}Hfx8)OFb9`IUcTr#)znk;*#EIU#`&T{Qp}F+$jA=d3FPpvcboy_; zukh1{lTi~tHOtrS=Q#Uh!B@wR$zsXPl|n&_blwDc%@A6(kmn|C4R2zVlfw_a=vWnf-O%>+fw}z6);J;cUI>+y2yS#xsfA-hRrQuPITyCujc` z<;4;)>L-N7_n6<=zDyunzo*Yxoi{+)>VhY$(3_KUa~rhdt0pn`8ssX^es(b1_|%4H z6>RF8lv0$M|r}g__ZvT_a59Rr! zza-rLbYc5Sl-~8ROi7WEq-^-WlFZF3`d3op3 zpUuV=BJA%hly2q695{7(+v?iC9MA7QQ8UkUuy(UM&gg&eqxq{JyEoUF?^(+C_)kfr z)G3!5S>E&Ws?@`yG^IWAVv9Mhuk2j9|3~-kuiuhael`8+wsTXhr|l0r&6YbiUN2S9 zKDBk@mM z^So^+yZYF{89w5v%LHyn)}*^FsFB}b{qpjHRoPqQY+qb{(v~{;&X;>u?g9noe-1sV zuI1}$-=*C!qflmPt^V%!1wU)Q>#FCSPkbI*{_4k`b9ZJv_VU>9!}P$>O67OHpF~WU zj=!4{?DzV8Y0DC}+3AXsx__rdrCx5xbG;}k&$p)c@cW>L7IVB7`+jrWrYO5JCqH|C zQBLQh4bLX673`2c{PE_u27?Fw^}il>TIIYF-t#W__mT-*7aC?=lBx)MoDt-vCHiYl z)y1-;4}IJbMhEZzDyVnU+0kD8H!gLV=;r>jhq4{jYD+j}@_e2fRQ4Bo?tk6pbNWK{ zdb1bqg~xh4KFs@?ocrjMJnfVic+F1UH4(CNK5u4eGMyuZ{lbp#pMI$>`29SH7j<>s{CP-uuwVFJnLF=jr+WhA%H&xxW8h!Sch$QZyLnhV5w#`#ZZm z{nXl}!rpyz9Q^v`{G0xGwxH~-DG|3rs{iMCzSGH=Aa}OLtES24-Jky^W#xvyb)QBa zxNr8NQKBcPCqXmU^78=}9z*HJ*TPmVX_Ux4+H!3P=f^V{1(UrLwGK)Mp4;M^F>6K$ zH+u+Q&H}f^7nXEN?6=MMx@4K}6^RvFcQg4izp=Q!_u2M;*RA(u+_#_oyz<)dH8ZQ% z{oZAtc8zDd!u-9zs+#N1y?t@j?(X+jORcRB{$KPq{ds^*aoTPD^iz2@HjHPE|I26E zX3DeQCr9n&pY5zK=Eu%#ev-a_SIz&)3;*VsAKF(Pc{G02yH&;icE`C?yjpL5Q8x8v zw{zZ&bGWq-cvKd(J;r0)8eqx^q*`T30Zm*jHU zEj?kiWWl?Fx$EjbMen_ww&r@#i6blCc+W^xnbcMDkKf+D*vUw!a;Ix&b^NSW>CdyS z<#29KUK%lX=9&40jaT_J6T(&*r_NjN_v*&a7d7pgjVm-yZ7LK=kD15P%Ec2<6nKE! z=1=xM?cS65_Z#;yZ~M46{MzEnW|e(D2j6~wXSwMH%Z>979@^Y{%CO?t=i637-*aSZ znDf))^&ISN{(QLq*E;(xcQkwa&5ku6X8QHrmoC2k)GoM>b&aI%o(VP!qd$COS)iW~ z|1Z?6XS-;@llgN#Zm<9S`g;9+v$~J<5$oM+vwY|6`u1SowJkrA?|+@vUS9YA``TTp z+7q}h^owkEnEfj;<^IO`WfN3oT*M;T-pH@1y!`*C{o3n$!X!@y)~D{R{BnNNJGZR; z?VFfi*;_7%%U-+YHB-fT<>J3e+KxXz&FPzKm7My+?s`&vOUbWWZ=3u1-!?wJ{qCpC z${zNF3-eB|+Qeu--|eY}qtvyZnLA&bbx!HH-<>#n)4qF#|0J$2o_~KXbIB=1hMtCt zb*ZIE-&kIju8QBgNhWoBFwD?oG}UOnYv+ZDN?a=H%9pLs1Mx zPk+a6d(;*Fr||J^a2l;q}+o#oJusuKW0vZM-}^EbjOE|6BL}`e0w5s{3~9 zDgT0>yRUDPu>av4$y4|CQB*^oSl;}Q`UDrpn%(|ygD2NM3;F-T-QFs*X-B0 zmIr>@BP#q%?eX@#Z{PCY-#g9ygq&5}pR4LIyn3wp3g4eucd!4S7`WiNo=>_@RmPu- zJ_i`AT4&E>6)_S%!0<+5-OU;6*L*trYPmeSO;FC^w9_%16Kwcj{4TfO9XprLqDK9~ za*@YhwsU?r{{P4Lbp4+jiw{nJA7g!W-{&fB|mUMh3lv(5IO zKgfp{Ed4jL=YL=Mp5!owvsP02^*{5Y=kNc^HEsIJJvVF`ABf7l|Ja>)w7>R^dRq1t z9VyA_k5jY78_UcEcFiN8~4?9z|&+o#StQW>LAi@!cPa{IcJ%=!NlpXXn1@1CjB5WyX>lWWGFjn8l1JNJ><7Nw}J&jOWL`aNjrm0cOK8@J!5NP{hin1lRno5pNR*q zmfmvQIKyOa&998J0hQ1C|9t4T`EzI1gp#LK>%SzJ?X9_dYs$Yr!PC;`KDXakw(%4< z%Q^NF@9Y2nPIvjVO(4_z&XgUjn_CXe%id($k&;xD`{`NaukEjAZ+*Kd)%{!b%hatA zdrs=4ZoM)$(KEjEmd^3H`Qnb&%kD|4MAgsS|LNiWzYk|7&0?JW{^#ZU#{a(P|GT6g zH+}u-eTAvpHf``R(!Xq8y?Xz}^Ri2dOjV>$Fs`0G?apOcp3K$Cb9z|4PZjR&DVJxz zz;$fb-12vPi!U}5l{@^rJcF^|_L<%DPiDvaF?cG^O}4T=&UL3od;jc}rW2NW?u=1C zE~Rji{r}mmp*QoN@OI7h_N~&%pZr{R>c7Qvavw!!epc%+{np7#?BBNb0r&fpagEn^Db2g@XgKrhZMlh#MdzGNBH!-!{*m`S-lL;`OhU>W0A~o4-BCKY6XDQdj@o z<+$Tk=d;2Y-&wiyeR=EmY{rABZ#LS@**K#-V1{swRI`*!@y-5k-7^Fk@~$&U?4Epg z_IZ~BnJVATm(IAgne9*Xf|J?)f4>Fn+NH)VFu8AiqCEqH^aM{A$B_H`s@yNi1{8G5 zWNS})e>1|)yKQB4U#i)?-PevyS#A_~W=pFOV{^q zLGu63(?#`S`v0G(+yC^~Xk@J)eYW*x)HFS&zI`hhZ5(2BrrWQd`m2)d7DG zn}+{MUHw09_q3W5JbUXmm5Fc^Ki|dD>iM|#|15#2rE8Y2506P};QjHX-0uDJkX3>f z#s9XnJn`0hJDLCI+FW)u{=5G|mY=bj@YwE5lyr4%ui0b9h}mtEQ`y&?%sR5=-FC&0 zGmjpzMMr7w5_}u>LWbe^fissfV{h$OyAm^5a}i^-{`uLDE19jLCuAxIbK3Bxo&QzU zaIR(H4vs?0Sq}~QuXiolSm&YG9hSELZQLQnzaQouy>x$T3_4fI(RVkL+o?k!p$NuN!`4vB&nx2VI7NF_ z`nJ+v^@b&38~gcJ=^RKi-L>yYo9pMF!mo2DZ&b;|uZ45TKg;%!6Zf3h_ zQ~z84aZ%3y?{?enEc(CIO?b1(ZT+?4@vTGw)+;vadio6fBc_y zz3%heXEtjWnMu{WoKvcAUV|Ar3H9rV2nLFH@+`7?ktHV}N?a~)zOV(^L)&7;9S7=<7 zwnp`MRaDo$We2Y@_(=OtSDyTBu>!;0Jcem$Yo!W|m@TKT+`!3~u76lkwWi|7Hd7l} z?<8)%v^hm(a~fod^opF-az)>yO#6N1`AoLh`~QARg`O=djBM3hdE);5PhVyx&D!3& zFOBiD>+AIqyBYtt?*AgLzIm~Ym(NZg_6Z3e;#T}qsds7N5yrv_qK}4 z)ha$WPnA!*s~5Q2Z{_jeoyjR_Pn8*;Xq;fmy{Gj52ba+2Z65Pxzg+6+TlX%$E|1B* zetqrT?PsJar`fgjZ_A3|I)7$onf%1XjWdO%cm6AD3{O9oW9@L_>`ul5hO78`)jlqr zd7|c-#eq2s*t*uKFg%G$vwhli!qD#jD$}j4m%4Af&?x>hrnhe^1-~d~L`MOHYp$zXubz6QpXUo6IDU)Qj zYlv$&@u=;l?YCK`(}mA})6V2}*vN1@ecj1fSN@k=+q$pl*7~ZatL5T;oPHnqd3C&H zs^3K88Jp7I$hI1MUuj)D*ZWXMi?Dm<&x^0@l zyIbG3F|6L_uXa)^;>4P>|7V7JXz71m7JsTJ`L*o{`+Z_xISn?u9?M^&@afRO>(6?B z+kf7Bznb-^r}(m;yK~>REvtDfu&@+0nM-iYcoTkeMM zpSE@4_bC_eWvA@Fc7^5P(WEys%Klxk|FyDm@sap-=N}p8M{v(^_sfiC;9bME=ErQw zgwEHKE$_|~6_{JUHst?wds~Ov%s6HyNRTDNnfbj+Ct6NS z=?M6Fjm1)Unpw8MlPTLH)VR5qT|RUssC>J_cL(=Zsv1xIoUHetYBy+*%bc0LZ zk7n-|eS6C9ZK=^ZzmDAo-`{8Kx876h!1efshEf>+lHhZDCfEHutH1X8X1%{B-^HC5 zn{|=rP zY(GBC&E33Bsk@^fm@hsm%U{0#^`x6+{aSUFwaPZ{-_KS1of5)2zb@~TVh#V(dUK0U zd;i{@QeT#3oM&u0Aw_$W&hx8pEWh$)Y>%9O(rM~}{c{?#g9P{OaHySm_>MWllzq4M z=W~C}nRI*Zqf6@~-x{~$-o&b>@1kd}x+jwS%4YJS ztgtJ3$+zZluC~_xdWc)!rsi|h|Ha2yjwrrj3^>r^d;Z_=r|0Vv?^T?X{?|Ek~d@2xz0@AtdcuKl)>eMk8oE32L_laHUh`j8RR?=R(T`{tf# zWUw?(JF?tV>P2v8-BZi!MSF2DJI*Nxxb?mkx9`!|pc6$&T6aYwpWYICmfo$KsHQ!)9k7< z_16!UJXu_MzB=Wt;Ewq}9$NYv-rLJiX}J2^=jZZUR>!9b7Gd0WC zSN)pJ@}<*J@7xC7d=eDjF{?eL1`b)?94dbvsBjG z_I8rljxV8Nk52|2Kl$$jEjAeT~cKu^%zY$w-!d|%I!o0F~hF^no^h1-MtcaAV zj+y&ENAU=Uvh#JuEeEo08D+1ZTEB;RMPS#o>|!2k(Ov@I<4g5n;*O0 z3(oPKxqP+ZbsKAoyhBet?*EXs-^R4F@}EelZd-Blnm-SAMp}Q`s&i7~Szmj@zg=H8 zSujSLUGb4R8~^0Sk%^lQpQ@ERk{0a@_VwOfTZ@eJ?9zTE-<{ zTx;AOcWeFA(+xfx>ArVEr~Tr5^X&Vvs~gVnzTiIa`9J5CW%I7zugQD1H@0sH=Vz^l ztJ->Bd=`3NYv%|2w)rm!0`IPu*cs z@GTY}-<)OcGbY|#aDD$xt#`uO^8X)o?=RcQa#|`~>|XT!U)Kt)7llN2?cg+h`epO% zrGin~{`<;h)ivf!T%_BuoN42RrH%p%-nTukS^mD^+dA$4lod>dSSW{+~wtHOGJo+%aOx4`}w$-eTeVevT-x02U>!9I*V_y}c z&(!88Z!ed=%;)VF@l@-$VSI|@(Vg2m>$c^|3U%$7#Q(lC^TwvlDw?0~|G!;tep>i= zd7qK%vXgatp8D5Ze_ZNO=EV5eJlLM;&9)Ufg$2hKOSBqKPj1=I+R@3$9-O?~eOdka z{|ly;_mynsp6}f^+kWk#wYkg9go^sUYb=V{wrSSecJ}N4Iks)xul%_|EoTm6-yMMo zJqNy@IV>Z))T@16am@Ta&4x9t_Gfl1KfxEVEs5>Mlgf!NOt190&W>$2{eD~GonpM* zl`TKx_*0jQ2fr&lY`nkXxa7*@JM4@VdNPM@On&cvtvaOaSIX&$q7pyflryAC1${5p zV#rb0!!lVi;pdlIwXe0SH=niNagU+u_N`xwQg5yEiDqJ$z9~CrlIMJB`KSZayLl&V z$)CcObY{tmnB)-l)ky)rdAD^>`h9lU>r>44PCk3Scdp+n$#kN~;cN4^&K7-K$5?m2`|J|=pRMNEml}NK9o0Ag|rg!#F`=%-C zx0jxq%llv%>zu^Pmh&6*XCKm6xOsKEZkN%7rd==JbFMPi=Ds2@*RDX9n`_3~%iju0 z_Wgf7b=U7J%k50SAiQ<&0BaO_%FV8LQaT+5Z?nPyE>{8Lc+wK;xo=J{)Ij&dg{_ay*|qEjO*)_LxEk z8(Z*<>|3cbtB!x|*cq4CQ7Orr*U9zShhgjd#eXk(t_B=XO>z7G1Thrpy3E^`cVQ>-;B{1W3<$a$m*k zV}$$pLnl&h{q5dc%$sfeJw4$m3)cgtNnGX&7_aUW-k~+8eeO!TH|q}0JHKV?QjZUb zO?(Cd2Tp!^wS42;|L1ID_dVFo$Y){vy`iF(s)ws+w(8MfV>xIAX=ZP}X%q3xHYs`Z={cYpH^4x16WZ~IikqO)6Ltk#@W zRsLR9JxjoUDa$RjDO2XBvvXhCDYC=Ruy(>#_uZdtw`d$-o-=vodvhPHdaYdd2RpYn zO1GUbwK`_pz2ZnhdL#-M7)tPkFP2 zN#W#*9@SgiCnK^LyL;d4(B33_e7PUXF0;208+92hPiSpb?eRW3X-ku`ctgV369U$g z!gt3USmocSIsfgnRrSA5#DZ03VivpB7()<@X)-q zZM^T#oay>ES#gHtE$dC&FQ{<0d|WyqLhx(R+`jia_bpDbHoi2oVMm4slQC;`LGL!oE#@xxx-InkD?%eb5D;KQn{`_`b$^E$> zgN36u+a5jlbIb8v%EBVMCbTg#*iU%S@bZetK8awK8!Z=kZX8HG$GQ06io_eAc&=z9 z&aU!eTcCd8DAV6LALmSexqQR-;z{+}t~fp2^uG7n2IOWg8%mU&YoDE z(`-HC{5-i+S1(RC@G2Ae_ip={rx^>a9hsH)aJ)|0&E~#YU||L0HfH@ZN&j@y_xX14 z<$u1csg~EaX;+Q*`z-+*n2u$r%?#WkJLRSo^8^+%UL~GX4~x zQ&*}w$7uz>w;R0w#Wa^KW{bJ4|9#cemkVNCpDd|=@?NtpI!bH?(+{7>mDOpdO=mCX zX;gm7s`H7};%&l8+5DqyVJ!!0Gg#lf*6c|>7#KbE;Kou*jwJ`ZHMXelH~whFz+56V z=TOz9^37)Qde^tb-*`5;^YFi1(}q=%JO3WCdCkKxd*|(X<_FujL@pKYire{4PVn~P z{<9v+cfRIZRs6jydA4ikyss1Fc8g{nm!Dhrs+v*VOQd_@+Ph#IeCj>FEb;Ylek4bsc!0Y+|^p$#LlEz7IcVpVahczEOUNElet(J3cop zDt~)A^Df`4)5{%Q=FOXF6r`TJjSAhZ^Id#vLkj&-d!0p>+sWMJlxVhPQ!7RR8&X01hUWzo^db04;z0#2HEHgizJjv30@85@S?>Bzm^0%|* zOXj)Hv$HRzzSeKBXZ8%+%J^n?^%vCz$!>p@Zm@1sQ+K&C)1)gcm)Gm&lf#o%)bIA~ zd%5_ev-OJP=mxol%G)+2&!1a4KYBa)qpazk*lx4mr;b)I7VQ>{ky)TRCv4U7Gqu;F zWv}*M&|GhoAh6#sc%EuNnXk6hG0p{=W(B4SzhX`=zT5Zih}p(>qU~F%FQpV2tu8*i z=5@Tj%lg>6@;~*O9TIodoZ&M*J1O0MiOk!UnV*;5sdE$7dHSx*jIs2tyI-N@BH5jd zW>47;y3F>HI>Yi| z_(J^$bIZ~@rZGLU>$%NyZSH+Z&NVe>pF}&}FVlP{lAwF7`R#_lcPCXU-U%ID{N(4| zgGS$vmMJowyrX~re$k6<#mPG)IGmy*1Z(G3r&`TYWG#w)KFxi1~Tkmd&_id$ww=#ZSM!;`8TxN+#UBo}Axo_UhU+KWnKe zycH=7IuV<67ndn=CtS1p^w4RiUu5~3jqG;2-di2@zG;2o$c9&!yVzc=nYT|pepAlQ zEk}c&#msM>ALYjuHLiLPa^kC%;d2ev3&xo>pQhAuEu1-b>w*m4 zCwXhCt!A7s{I|sOrR90mU4O6Ha&`u6jc<3^akj(Z-OS79xa5}i{a(sA*Fa~p`=?u} zhunO%X8y0~_c=G^`rg-nr=>TqyY2hV?ZUhuyVSsdQ%;t%rZmi2nt8f?#m@1|l!XJyx`YUH?eG5Gw?`G3JzZo%T}Y1eMz0Vf+*w6y zrnN2v7TwCGhH}Bq@^*XDxGMRto_WqggSMGN$;s}1eZRMdWHUH8g=iXWA@K0J`$+=ur8}B22 zmJ##JmRj}jocr-G#W&S7+bm!QuMWpk@7UX>FCTDcn+I>N%;&y-{gr)~cIo3~PyTId z*f1sgwtU$AZ4E0|>u_q{?>h0kY<)#*6Yt5ATkqzXZ+Ld>UdR2ZZyzi?xa_g%y!GBU z-mVUkN`0v!$)l;)@Ye6B)7$L%UJjC1Pi}3w^)94ut7gc*m%rzWbv|9dVx?btG4af1 zzH&XEIS(cqF-fN?^D|uB$L4q1_`H}#^42u}n_@g(AEn>SJ2{o%#g&s6Or~$Rdr-~% zt;JON=E*DXie2ee%GAI4t7QJJua)0TJbiXE{JQca=0@dxv9j55O;bcYRd*k{)4=EO zY0aJVC=G=tk}VhZCCxs^wseipZmY9q=^Jh&WSI3mh)|sCZ>YKOeBDLGryIS_t)8Er z{Q2D*v+ucgYx2!h?(++c99TONAY;e1C=+C=frSlnLcIWLo zz2`%r^pRh?BPGoI=EvJUXr8n6W#9R0UC!SRaH(aM?bW|?c=dtHc3Qy~6cU}J1rA)u zv~@Z(qi*@bKTFf>9sAM^H_B=ld2R_mUKYi@g5y<5^A07dP4aI~n$DT!=NWdbE!b>QklDUZ`7oQo(i}_6Yo}iBwsVqsa<{8>!h&Kr8!GGUCLX={kzt}y*9;F84f6Nz4~vN4SbULV^2wH_CMLF5B~~hvJx^>pQ)xE)Y;*8Rk><-;QbF*YBDi0S`?V8lA_;63}k}?H>1KT$E2VTm^_@Goc=fIOAET`tAR=oI{R9rlHZBAa^zH161 zT$yQ`XXf6yd-Le8Us6JyDskm|oLpU5wPpF*KNgqrUYmXN#hW)N(ktuKBxGc+=!kI( zPngi&-rk|7_bB2HkH@3S3el-krcLE4_bWJGD!yG?`~O$R`uhEDi~iViPoF-0#(y*Y zknn)e$kqs*wr%OTI!~Vbuy|!F_b%dHbBy-nQWvLQmqUT;mW9kXqgJPN)?k%*>c&rb1gTX2`I+vc{aya9w@X?9nAjN0#rcuF1j*fpZGQ>cA>%+K|oaD9b83<$HzgbDMK#uYNmMUA+DN-?{H=(zmaP-+zzKN=J-) z&YU?<-n@FnB`z+$^V$B*n>X*dTw1pKZpHEUKjY??mX{w++bnth$1Hxk|DR+wMD3Qj zpOTVtBh-TXkv(^MZHP_tGcM1uLDz5VsgSF@&8vn6dcI*}J)WNiFa z>x9mn$N;x9OmAPcOfbyYdN^c{CbOot z_Td$Qiyu6GoSbp8DYSaCWyEiD#~U0is@B%G*Ik)?UO#@{k(Za38|L0JIn2H;W@l4J zx$=W2Z$7lwR)0_W)56KY!y^*#{oOt1-jaAti>mtF0z1y64Om5{e~^eK3LPFBXcjOX+;UEwmlxIG=k&(A5EnudN$ zYs?Z#ZJZyuE&qPri~}-tTn%skZP(x5(!X9`&2LV}`~CLaea~ep^wp%&{pKFZ@8o6M zF#U|6xOjWw;kJeQ_Q@SRdNg8F3g@qHZ*M>T%Ez#3XOkd<*WRprGuGhWkL|TT1pD&t z*}M0`txH|Ax92HYSV-KP7gwQPW8o)b-*|6tRpQrMrWN1bNS;{Z;pr*3pM#65sn=;; z_oKL0BaXu?yUX4hNdy>g2;g-tQ~LI8-Sn^@UtYIA6g(^_DXD38{_alh!u|7G{vA0G zxoCG&Lr_n`CH46WR&C_I&v}u`v%{zi1=*sSmlYIQyG3pJ#i>Aw69^Zchbcd3pK59~TxnOL)%W=j0VF{%~xc z2>Fw?9izNbobns7kW8ZM>*zAJRLgihWbE9@SKJ_qrV)AFomYI`HZW|omxOnN0 z>r1^~ynflZ#a_qtz1_P_)67%Ze?QWHdE!J&|D#1tg&u4R-m|l^DJFi?Npxk{v2&MT z!`~I_))jKR*IXa7c8*TSB2G*FxF3~VZhbPE{{lioTWx>-?2t2L^7QmP_AG1FRP8W< z2A?^0rL*?2+WklnSr@mrYl5Pp$fmuXZM^H__7=@(kW66A5#JUVT`j#s?8C#iclqn; z_AQcB7mYjpFEAverCj6Xouz-|4GI*5o~v5lNaB6*SN)@sdt z(~~YJ)PHRM_1gS_x2aO6!-iVR@;7((F~7_Xd;H*Fvxur~rR#!vX))3!!d%Rim6dMx2PC~$KNP&wqbct_yCB3M)zanR zo14Xgc7Jj|b;s{g`1Wr9^y!Z;E%iFt^?la6qJ5!rd(!7;XJ;7Li7h_fvn=KHg*!C{&hGtku0K1C zJbfl>+83Pb=4;)B#lQ)(XKVA$J7&K;>0ArXqP1&%b57oJ-z(lb zYn7Bsu&B)6hwTy`CD{?Crlt!QEn=EFb!ta%?@|8$7X9t~@<~U2D;uVs63N_e@iW8J zq}+X4?(J=z{04vX!(7=8UOZsAXy;DJ$r|ssZ`tC(VV9Bj)>F%mgM&vwy<2TRhjV4+ zOpRpqg=f$5Z%{~WoRYmcU|rv~JojWJhL9a$4!MWVo_+Q8_4Pov)al$I6-Rb+$cV6* zmxnW+$lUSo81Kyq-NLtLvWnG)x+u&tFt-$(H*em0Q`Nq6Gv*Y$zP9!ebI-5;Tc4yE z{JA*m%hfCFbt*m~|3iAWYl^qD@wR>q6`vJ7%W$%l`r8ST0T-{gZu!R8`ogA@XY1Zy zjjeOM84S4pUzQC{z2Z0HerS03;&tozI5|0mrrlxPcy^~|YQf7X-^15NJvDGVZ*$?^ zwZ5i3HaFD`EhEpIv0IuN$*||#b?V9LC(U_$A(+oUFc5 zZ335wevJAK-RISQx635OD_RzR?4E4r@B2ksMyO}S35~8?O9&lTowBPS{FKB{uoyhQwwD1Ao_N3qwq=&kT5f_Rv?2LQ%V2; diff --git a/templates/static/favicon.ico b/templates/static/favicon.ico deleted file mode 100644 index 896232f2173f99f95ddda168532334235e73a768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 diff --git a/templates/static/site.webmanifest b/templates/static/site.webmanifest deleted file mode 100644 index 45dc8a2..0000000 --- a/templates/static/site.webmanifest +++ /dev/null @@ -1 +0,0 @@ -{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file From 377da44eedc621a1d1ac4c05913f883fff822331 Mon Sep 17 00:00:00 2001 From: Tony Klink Date: Tue, 30 Jan 2024 11:43:03 -0600 Subject: [PATCH 04/10] Add support for querying NIP-05 on /.well-known/nostr.json?name=username --- src/bussy/mod.rs | 9 ++- src/noose/db.rs | 4 ++ src/noose/migrations/mod.rs | 4 +- src/noose/sqlite.rs | 106 ++++++++++++++++++++++++------- src/noose/user.rs | 120 +++++++++++++++++++++++++++++++++--- src/relay/routes.rs | 19 +++--- src/usernames/dto/mod.rs | 2 +- src/usernames/handler.rs | 19 ++---- src/usernames/mod.rs | 2 +- src/usernames/routes.rs | 56 +++++++++-------- src/utils/config.rs | 2 +- src/utils/error.rs | 36 ++++++----- 12 files changed, 278 insertions(+), 101 deletions(-) diff --git a/src/bussy/mod.rs b/src/bussy/mod.rs index e39ce40..358670e 100644 --- a/src/bussy/mod.rs +++ b/src/bussy/mod.rs @@ -1,6 +1,6 @@ use crate::{ noose::sled::BanInfo, - noose::user::{User, UserRow}, + noose::user::{User, UserRow, Nip05Profile}, utils::{error::Error, structs::Subscription}, }; use nostr::secp256k1::XOnlyPublicKey; @@ -25,10 +25,14 @@ pub enum Command { // Old messages DbReqInsertUser(UserRow), - DbReqGetUser(User), DbReqCreateAccount(XOnlyPublicKey, String, String), DbReqGetAccount(String), DbReqClear, + // NIP-05 related messages + DbReqGetUser(String), + DbResUser(Nip05Profile), + + // DbResponse DbResRelayMessages( /* client_id*/ uuid::Uuid, @@ -38,7 +42,6 @@ pub enum Command { DbResOk, DbResOkWithStatus(/* client_id */ uuid::Uuid, nostr::RelayMessage), DbResAccount, // TODO: Add Account DTO as a param - DbResUser(UserRow), DbResEventCounts(/* client_id */ uuid::Uuid, nostr::RelayMessage), // Event Pipeline PipelineReqEvent(/* client_id */ uuid::Uuid, Box), diff --git a/src/noose/db.rs b/src/noose/db.rs index cb56a8a..29ee2dd 100644 --- a/src/noose/db.rs +++ b/src/noose/db.rs @@ -6,6 +6,8 @@ use crate::{ use nostr::{Event, RelayMessage}; use std::sync::Arc; +use super::user::Nip05Profile; + pub trait Noose: Send + Sync { async fn start(&mut self, pubsub: Arc) -> Result<(), Error>; @@ -14,4 +16,6 @@ pub trait Noose: Send + Sync { async fn find_event(&self, subscription: Subscription) -> Result, Error>; async fn counts(&self, subscription: Subscription) -> Result; + + async fn get_nip05(&self, username: String) -> Result; } diff --git a/src/noose/migrations/mod.rs b/src/noose/migrations/mod.rs index b9c7fdd..8247991 100644 --- a/src/noose/migrations/mod.rs +++ b/src/noose/migrations/mod.rs @@ -11,7 +11,7 @@ impl MigrationRunner { let m_events_fts = include_str!("./1697410223576_events_fts.sql"); let m_users = include_str!("./1697410294265_users.sql"); let m_unattached_media = include_str!("./1697410480767_unattached_media.sql"); - let m_pragma = include_str!("./1697410424624_pragma.sql"); + let m_nip05 = include_str!("./1706575155557_nip05.sql"); let migrations = Migrations::new(vec![ M::up(m_create_events), @@ -20,7 +20,7 @@ impl MigrationRunner { M::up(m_events_fts), M::up(m_users), M::up(m_unattached_media), - M::up(m_pragma), + M::up(m_nip05), ]); match migrations.to_latest(connection) { diff --git a/src/noose/sqlite.rs b/src/noose/sqlite.rs index f352349..ca114c0 100644 --- a/src/noose/sqlite.rs +++ b/src/noose/sqlite.rs @@ -1,4 +1,8 @@ -use super::{db::Noose, migrations::MigrationRunner}; +use super::{ + db::Noose, + migrations::MigrationRunner, + user::{Nip05Profile, Nip05Table, UserRow}, +}; use crate::{ bussy::{channels, Command, Message, PubSub}, utils::{config::Config as ServiceConfig, error::Error, structs::Subscription}, @@ -149,27 +153,6 @@ impl sea_query::Iden for TagsTable { } } -// enum DeletedCoordinatesTable { -// Table, -// Coordinate, -// CreatedAt, -// } - -// impl sea_query::Iden for DeletedCoordinatesTable { -// fn unquoted(&self, s: &mut dyn std::fmt::Write) { -// write!( -// s, -// "{}", -// match self { -// Self::Table => "deleted_coordinates", -// Self::Coordinate => "coordinate", -// Self::CreatedAt => "created_at", -// } -// ) -// .unwrap() -// } -// } - enum EventSeenByRelaysTable { Table, Id, @@ -212,7 +195,22 @@ impl NostrSqlite { async fn run_migrations(pool: &Pool) -> bool { let connection = pool.get().await.unwrap(); - connection.interact(MigrationRunner::up).await.unwrap() + connection.interact(MigrationRunner::up).await.unwrap(); + connection + .interact(|conn| { + conn.pragma_update(None, "encoding", "UTF-8").unwrap(); + conn.pragma_update(None, "journal_mode", "WAL").unwrap(); + conn.pragma_update(None, "foreign_keys", "ON").unwrap(); + conn.pragma_update(None, "auto_vacuum", "FULL").unwrap(); + conn.pragma_update(None, "journal_size_limit", "32768") + .unwrap(); + conn.pragma_update(None, "mmap_size", "17179869184") + .unwrap(); + }) + .await + .unwrap(); + + true } async fn get_connection(&self) -> Result { @@ -1225,6 +1223,48 @@ impl NostrSqlite { query_result } + + async fn get_nip05_profile(&self, username: String) -> Result { + let Ok(connection) = self.get_connection().await else { + return Err(Error::internal_with_message("Unable to get DB connection")); + }; + + let Ok(query_result) = connection + .interact( + move |conn: &mut rusqlite::Connection| -> Result { + let (sql, value) = Query::select() + .from(Nip05Table::Table) + .columns([ + Nip05Table::Pubkey, + Nip05Table::Username, + Nip05Table::Relays, + Nip05Table::JoinedAt, + ]) + .and_where(sea_query::Expr::col(Nip05Table::Username).eq(&username)) + .limit(1) + .build_rusqlite(SqliteQueryBuilder); + + let Ok(res) = conn.query_row(sql.as_str(), &*value.as_params(), |row| { + let nip05_row: UserRow = row.into(); + let nip05 = Nip05Profile::from(nip05_row); + + Ok(nip05) + }) else { + return Err(Error::not_found("user", username)); + }; + + Ok(res) + }, + ) + .await + else { + return Err(Error::internal_with_message( + "Failed to execute query 'get_nip05_profile'", + )); + }; + + query_result + } } impl From for Error { @@ -1351,6 +1391,7 @@ impl Noose for NostrSqlite { while let Ok(message) = subscriber.recv().await { log::info!("[Noose] received message: {:?}", message); let command = match message.content { + // Relay Events Command::DbReqWriteEvent(client_id, event) => match self.write_event(event).await { Ok(status) => Command::DbResOkWithStatus(client_id, status), Err(e) => Command::ServiceError(e), @@ -1375,6 +1416,11 @@ impl Noose for NostrSqlite { Err(e) => Command::ServiceError(e), } } + // NIP-05 + Command::DbReqGetUser(username) => match self.get_nip05(username).await { + Ok(user) => Command::DbResUser(user), + Err(e) => Command::ServiceError(e), + }, _ => Command::Noop, }; if command != Command::Noop { @@ -1439,6 +1485,10 @@ impl Noose for NostrSqlite { Err(err) => Err(Error::internal_with_message(err.to_string())), } } + + async fn get_nip05(&self, username: String) -> Result { + self.get_nip05_profile(username).await + } } #[cfg(test)] @@ -1708,4 +1758,14 @@ mod tests { dbg!(res); } + + // #[tokio::test] + // async fn get_nip05() { + // let config = Arc::new(ServiceConfig::new()); + // let db = NostrSqlite::new(config).await; + + // let res = db.get_nip05("test".to_string()).await.unwrap(); + + // dbg!(serde_json::to_value(res).unwrap().to_string()); + // } } diff --git a/src/noose/user.rs b/src/noose/user.rs index fe31020..d778b22 100644 --- a/src/noose/user.rs +++ b/src/noose/user.rs @@ -1,27 +1,103 @@ -use chrono::Utc; use regex::Regex; +use rusqlite::Row; use serde::{Deserialize, Serialize}; +use std::collections::HashMap; use validator::{Validate, ValidationError}; lazy_static! { static ref VALID_CHARACTERS: Regex = Regex::new(r"^[a-zA-Z0-9\_]+$").unwrap(); } -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Validate)] +pub enum Nip05Table { + Table, + Pubkey, + Username, + Relays, + JoinedAt, +} + +impl sea_query::Iden for Nip05Table { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!( + s, + "{}", + match self { + Self::Table => "nip05", + Self::Pubkey => "pubkey", + Self::Username => "username", + Self::Relays => "relays", + Self::JoinedAt => "joined_at", + } + ) + .unwrap() + } +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct UserRow { pub pubkey: String, pub username: String, - inserted_at: i64, - admin: bool, + relays: Vec, + joined_at: i64, } impl UserRow { - pub fn new(pubkey: String, username: String, admin: bool) -> Self { + pub fn new(pubkey: String, username: String, relays: Vec) -> Self { Self { pubkey, username, - inserted_at: Utc::now().timestamp(), - admin, + relays, + joined_at: nostr::Timestamp::now().as_i64(), + } + } +} + +impl From<&Row<'_>> for UserRow { + fn from(row: &Row) -> Self { + let pubkey: String = row.get("pubkey").unwrap(); + let username: String = row.get("username").unwrap(); + let relays_raw: String = row.get("relays").unwrap_or_default(); + let joined_at: i64 = row.get("joined_at").unwrap(); + + let relays: Vec = match serde_json::from_str(&relays_raw) { + Ok(val) => val, + Err(_) => vec![], + }; + + Self { + pubkey, + username, + relays, + joined_at, + } + } +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] +pub struct Nip05Profile { + names: HashMap, + #[serde(skip_serializing_if = "Option::is_none")] + relays: Option>>, +} + +impl From for Nip05Profile { + fn from(value: UserRow) -> Self { + let mut name: HashMap = HashMap::new(); + name.insert(value.username, value.pubkey.clone()); + + let relay = match value.relays.is_empty() { + true => None, + false => { + let mut relay: HashMap> = HashMap::new(); + relay.insert(value.pubkey.clone(), value.relays); + + Some(relay) + } + }; + + Self { + names: name, + relays: relay, } } } @@ -41,3 +117,33 @@ pub fn validate_pubkey(value: &str) -> Result<(), ValidationError> { Err(_) => Err(ValidationError::new("Unable to parse pubkey")), } } + +#[cfg(test)] +mod tests { + use super::{Nip05Profile, UserRow}; + + #[test] + fn make_nip05() { + let user_row = UserRow::new( + "npub1m2w0ckmkgj4wtvl8muwjynh56j3qd4nddca4exdg4mdrkepvfnhsmusy54".to_string(), + "test_user".to_string(), + vec![], + ); + + let nip05 = Nip05Profile::from(user_row); + + dbg!(&nip05); + dbg!(serde_json::to_string(&nip05).unwrap()); + } + + #[test] + fn parse_relay_vec() { + let relays_raw = ""; + let relays: Vec = match serde_json::from_str(relays_raw) { + Ok(val) => val, + Err(_) => vec![], + }; + + dbg!(relays); + } +} diff --git a/src/relay/routes.rs b/src/relay/routes.rs index c1159ca..1607b2a 100644 --- a/src/relay/routes.rs +++ b/src/relay/routes.rs @@ -6,19 +6,24 @@ use warp::{Filter, Rejection, Reply}; pub fn routes(context: Context) -> impl Filter + Clone { let cors = warp::cors().allow_any_origin(); - static_files().or(index(context)).with(cors) + static_files().or(index(context)).with(&cors) } fn index(context: Context) -> impl Filter + Clone { // let real_client_ip = warp::header::optional::("X-Real-IP"); let real_client_ip = warp::addr::remote(); - let cors = warp::cors().allow_any_origin(); - let relay_information_document_path = warp::path::end().and(warp::header::header("Accept").and(with_context(context.clone())).and_then(handler::relay_config)).with(&cors); - let nostr_relay_path = warp::path::end().and(warp::ws().and(with_context(context.clone())) - .and(real_client_ip) - .and_then(handler::ws_handler) - .with(&cors)); + let relay_information_document_path = warp::path::end().and( + warp::header::header("Accept") + .and(with_context(context.clone())) + .and_then(handler::relay_config), + ); + let nostr_relay_path = warp::path::end().and( + warp::ws() + .and(with_context(context.clone())) + .and(real_client_ip) + .and_then(handler::ws_handler), + ); relay_information_document_path.or(nostr_relay_path) } diff --git a/src/usernames/dto/mod.rs b/src/usernames/dto/mod.rs index eb8bc55..166b658 100644 --- a/src/usernames/dto/mod.rs +++ b/src/usernames/dto/mod.rs @@ -36,7 +36,7 @@ pub struct Nip05 { #[derive(Serialize, Deserialize, Debug, Validate, Clone)] pub struct UserQuery { #[validate(length(min = 1))] - pub user: String, + pub name: String, } #[derive(Serialize, Deserialize, Debug, Clone, Validate)] diff --git a/src/usernames/handler.rs b/src/usernames/handler.rs index b281d2e..193d8c3 100644 --- a/src/usernames/handler.rs +++ b/src/usernames/handler.rs @@ -45,14 +45,9 @@ pub async fn get_account( } pub async fn get_user(user_query: UserQuery, context: Context) -> Result { - let name = user_query.user; let mut subscriber = context.pubsub.subscribe(channels::MSG_NIP05).await; - let user = User { - name: Some(name), - pubkey: None, - }; - let command = Command::DbReqGetUser(user); + let command = Command::DbReqGetUser(user_query.name); context .pubsub .publish( @@ -65,18 +60,12 @@ pub async fn get_user(user_query: UserQuery, context: Context) -> Result { - response = json!({ - "names": { - user.username: user.pubkey - }, - "relays": {} - }); + Command::DbResUser(profile) => { + let response = serde_json::to_value(profile).unwrap(); Ok(warp::reply::json(&response)) } - Command::ServiceError(e) => Ok(warp::reply::json(&response)), + Command::ServiceError(e) => Err(warp::reject::custom(e)), _ => Err(warp::reject::custom(Error::internal_with_message( "Unhandeled message type", ))), diff --git a/src/usernames/mod.rs b/src/usernames/mod.rs index 379fd9b..d692e03 100644 --- a/src/usernames/mod.rs +++ b/src/usernames/mod.rs @@ -1,4 +1,4 @@ -mod accounts; +// mod accounts; pub mod dto; mod filter; mod handler; diff --git a/src/usernames/routes.rs b/src/usernames/routes.rs index 96d8ad3..0861a2e 100644 --- a/src/usernames/routes.rs +++ b/src/usernames/routes.rs @@ -1,6 +1,6 @@ use crate::noose::user::User; -use super::accounts::create_account; +// use super::accounts::create_account; use super::dto::{Account, UserQuery}; use super::filter::{validate_body_filter, validate_query_filter}; use super::handler::{get_account, get_user}; @@ -9,41 +9,49 @@ use crate::utils::structs::Context; use warp::{Filter, Rejection, Reply}; pub fn routes(context: Context) -> impl Filter + Clone { + let cors = warp::cors().allow_any_origin(); let index = warp::path::end().map(|| warp::reply::html("