From b86c96ea312b7af7753ae8955b9bb0145890b15f Mon Sep 17 00:00:00 2001 From: Kian Peymani Date: Thu, 14 Mar 2019 12:23:55 +0100 Subject: [PATCH] =?UTF-8?q?Phragm=C3=A9n=20Validator=20Election=20(#1915)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adds first draft phragmen with tuned tests and sr-primitives * fix a few docs and code styles * clean, organize and finish remaining test cases * more and more tests * update edge cases behavior and relavent tests * fix global test issues * updated wasm files * all tests fixed * cleanup * fix some global issues * fix global tests * bump versions * fix typo * first step toward extracting phragmen * Fix most of the grumbles. * fix rest of the grumbles * spaces to tabs * update wasm * Removed nightly feature. * More tests * Fix broken tests. * Bump and update wasm. --- substrate/core/sr-primitives/src/lib.rs | 82 +- .../substrate_test_runtime.compact.wasm | Bin 56845 -> 56878 bytes substrate/node/cli/src/chain_spec.rs | 6 +- substrate/node/executor/src/lib.rs | 24 +- substrate/node/runtime/src/lib.rs | 3 +- .../release/node_runtime.compact.wasm | Bin 879134 -> 875322 bytes substrate/srml/staking/Staking.md | 62 -- substrate/srml/staking/src/lib.rs | 129 ++- substrate/srml/staking/src/mock.rs | 78 +- substrate/srml/staking/src/phragmen.rs | 223 +++++ substrate/srml/staking/src/tests.rs | 923 +++++++++++++----- 11 files changed, 1147 insertions(+), 383 deletions(-) delete mode 100644 substrate/srml/staking/Staking.md create mode 100644 substrate/srml/staking/src/phragmen.rs diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index 953568e57b..d0e9dbc8c0 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -85,7 +85,7 @@ macro_rules! create_runtime_str { #[cfg(feature = "std")] pub use serde::{Serialize, de::DeserializeOwned}; #[cfg(feature = "std")] -use serde_derive::{Serialize, Deserialize}; +pub use serde_derive::{Serialize, Deserialize}; /// Complex storage builder stuff. #[cfg(feature = "std")] @@ -251,6 +251,86 @@ impl From> for Perbill { } } +/// Perquintill is parts-per-quintillion. It stores a value between 0 and 1 in fixed point and +/// provides a means to multiply some other value by that. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[derive(Encode, Decode, Default, Copy, Clone, PartialEq, Eq)] +pub struct Perquintill(u64); + +const QUINTILLION: u64 = 1_000_000_000_000_000_000; + +impl Perquintill { + /// Nothing. + pub fn zero() -> Self { Self(0) } + + /// Everything. + pub fn one() -> Self { Self(QUINTILLION) } + + /// Construct new instance where `x` is in quintillionths. Value equivalent to `x / 1,000,000,000,000,000,000`. + pub fn from_quintillionths(x: u64) -> Self { Self(x.min(QUINTILLION)) } + + /// Construct new instance where `x` is in billionths. Value equivalent to `x / 1,000,000,000`. + pub fn from_billionths(x: u64) -> Self { Self(x.min(1_000_000_000) * 1_000_000_000 ) } + + /// Construct new instance where `x` is in millionths. Value equivalent to `x / 1,000,000`. + pub fn from_millionths(x: u64) -> Self { Self(x.min(1_000_000) * 1000_000_000_000) } + + /// Construct new instance where `x` is denominator and the nominator is 1. + pub fn from_xth(x: u64) -> Self { Self(QUINTILLION / x.min(QUINTILLION)) } + + #[cfg(feature = "std")] + /// Construct new instance whose value is equal to `x` (between 0 and 1). + pub fn from_fraction(x: f64) -> Self { Self((x.max(0.0).min(1.0) * QUINTILLION as f64) as u64) } +} + +impl ::rstd::ops::Deref for Perquintill { + type Target = u64; + + fn deref(&self) -> &u64 { + &self.0 + } +} + +impl ::rstd::ops::Mul for Perquintill +where + N: traits::As +{ + type Output = N; + fn mul(self, b: N) -> Self::Output { + >::sa(b.as_().saturating_mul(self.0) / QUINTILLION) + } +} + +#[cfg(feature = "std")] +impl From for Perquintill { + fn from(x: f64) -> Perquintill { + Perquintill::from_fraction(x) + } +} + +#[cfg(feature = "std")] +impl From for Perquintill { + fn from(x: f32) -> Perquintill { + Perquintill::from_fraction(x as f64) + } +} + +impl codec::CompactAs for Perquintill { + type As = u64; + fn encode_as(&self) -> &u64 { + &self.0 + } + fn decode_from(x: u64) -> Perquintill { + Perquintill(x) + } +} + +impl From> for Perquintill { + fn from(x: codec::Compact) -> Perquintill { + x.0 + } +} + /// Signature verify that can work with any known signature types.. #[derive(Eq, PartialEq, Clone, Encode, Decode)] #[cfg_attr(feature = "std", derive(Debug))] diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index ff8a7a70c368b615d3f6f7a602c91497024ce30b..e844c0124e12a5d874d3edf7f94c0c946c56a7fb 100644 GIT binary patch delta 8013 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 iN+2GLz*{0AjUBx_zdWkO GenesisConfig { bonding_duration: 60 * MINUTES, offline_slash_grace: 4, minimum_validator_count: 4, - stakers: initial_authorities.iter().map(|x| (x.0.clone(), x.1.clone(), STASH)).collect(), + stakers: initial_authorities.iter().map(|x| (x.0.clone(), x.1.clone(), STASH, StakerStatus::Validator)).collect(), invulnerables: initial_authorities.iter().map(|x| x.1.clone()).collect(), }), democracy: Some(DemocracyConfig { @@ -267,7 +267,7 @@ pub fn testnet_genesis( current_offline_slash: 0, current_session_reward: 0, offline_slash_grace: 0, - stakers: initial_authorities.iter().map(|x| (x.0.clone(), x.1.clone(), STASH)).collect(), + stakers: initial_authorities.iter().map(|x| (x.0.clone(), x.1.clone(), STASH, StakerStatus::Validator)).collect(), invulnerables: initial_authorities.iter().map(|x| x.1.clone()).collect(), }), democracy: Some(DemocracyConfig { diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 8e1a2162da..84b2de336e 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -39,7 +39,7 @@ mod tests { use node_primitives::{Hash, BlockNumber, AccountId}; use runtime_primitives::traits::{Header as HeaderT, Hash as HashT}; use runtime_primitives::{generic, generic::Era, ApplyOutcome, ApplyError, ApplyResult, Perbill}; - use {balances, indices, session, system, consensus, timestamp, treasury, contract}; + use {balances, indices, session, system, staking, consensus, timestamp, treasury, contract}; use contract::ContractAddressFor; use system::{EventRecord, Phase}; use node_runtime::{Header, Block, UncheckedExtrinsic, CheckedExtrinsic, Call, Runtime, Balances, @@ -296,7 +296,11 @@ mod tests { staking: Some(StakingConfig { sessions_per_era: 2, current_era: 0, - stakers: vec![(dave(), alice(), 111), (eve(), bob(), 101), (ferdie(), charlie(), 100)], + stakers: vec![ + (dave(), alice(), 111, staking::StakerStatus::Validator), + (eve(), bob(), 100, staking::StakerStatus::Validator), + (ferdie(), charlie(), 100, staking::StakerStatus::Validator) + ], validator_count: 3, minimum_validator_count: 0, bonding_duration: 0, @@ -441,7 +445,13 @@ mod tests { ] ); - let digest = generic::Digest::::default(); + // let mut digest = generic::Digest::::default(); + // digest.push(Log::from(::grandpa::RawLog::AuthoritiesChangeSignal(0, vec![ + // (Keyring::Charlie.to_raw_public().into(), 1), + // (Keyring::Bob.to_raw_public().into(), 1), + // (Keyring::Alice.to_raw_public().into(), 1), + // ]))); + let digest = generic::Digest::::default(); // TODO test this assert_eq!(Header::decode(&mut &block2.0[..]).unwrap().digest, digest); (block1, block2) @@ -574,6 +584,14 @@ mod tests { phase: Phase::Finalization, event: Event::session(session::RawEvent::NewSession(1)) }, + // EventRecord { // TODO: this might be wrong. + // phase: Phase::Finalization, + // event: Event::grandpa(::grandpa::RawEvent::NewAuthorities(vec![ + // (Keyring::Charlie.to_raw_public().into(), 1), + // (Keyring::Bob.to_raw_public().into(), 1), + // (Keyring::Alice.to_raw_public().into(), 1), + // ])), + // }, EventRecord { phase: Phase::Finalization, event: Event::treasury(treasury::RawEvent::Spending(0)) diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index eab07326a0..55293d3e46 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -54,6 +54,7 @@ pub use timestamp::Call as TimestampCall; pub use balances::Call as BalancesCall; pub use runtime_primitives::{Permill, Perbill}; pub use support::StorageValue; +pub use staking::StakerStatus; /// Runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { @@ -61,7 +62,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("substrate-node"), authoring_version: 10, spec_version: 35, - impl_version: 35, + impl_version: 36, apis: RUNTIME_API_VERSIONS, }; diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 29139d149965fbe608d20e0278d20b79e625a03f..f18a1fd01dd5bc82ffa1bdbc2403197d53de8bdd 100644 GIT binary patch delta 251599 zcmdpf37izg*>_j<^z7`;vBO^MvK-yRwcPh|iPEcph!`;@UQs|L;)tS%MI3hyYC#eysEdI%jK+D5&T6W`A3+H$jx$CiYI5qcWPJoH94`EZ}GyiX4$#L zx~^D^Yz{AC_`5i$kKAGumEtih(>o{7duc$qVNE@c1(={Y?eGnRDjxr!G7--=x!gv8Z*9 zo3qf0G1vT_j6`+!_39MBqON{15v#ExY&FTxPhN2RNegGror5M(ziabjqI;JzzSWJN zI{Tz!kH+ASKk4-OC(N|*BF&|CKOvh(*duZg`xo{#wh$33X{Vy1+_oJX|3ri> z?X+Wy2(uCV!&3Z{5_YFZ1zuK0s;YH~z+Yh}@wdjd6UatHXFSx_p;e@O(M5k9(eLd@ zJxWAZ{IMe`^dE@;|J`b9(M7k~Zr%A3Z}dNoWA`XaIVnd164Q?zkwWJGiAou9!Y5Y1 zKju@D=R=T7u>nD7@Q*3P%bc#^BqP#sT-QYnBm}_b6aMEvL6dAN)tWc`uuy|$+g`@* zhT#x{NfZI6c$dU$4U_H{XaNSJg6~i+?CFkh2$vw1lOTeXa;%8uIO&+rq5Y8``FnFXU{w_$XLH@e!=M> z);53RbQd=^caQd*aFguX#IKr8JAU4=a~8}zX6~G0P5@ucowH!hNefT4*2&tU_Y1&z z^G}4B%{kUu-@G_FSlryaKH5v%qE4Qg%t&iP^CwX+cdM-SPg^kCKl%8Xr_P(daOSai zSa|&WldRv$(krE~d=XzRdM>wb7OUkIa=o}s+#xoKwf2qnDtVcFR%{i265GT>;$iWi zctreBJSsMe=fvaUui_c8MLZ^+7Eg)km)JMitL?FS?K$C}Vvq4V8{!N3fw)vQ%S*&^(IPj=d*r?HZuuLrPTVB!kax=4<^6K4xKXST56HXZ z@8m}Lp!`IBDnFJF$%o}5aM%jKWt=rN6t%ZvAtm&l9cR(YYl%zi?iYoBMIV^8^q{Ij^gKHvVkd{6#Lye~hH zU(2uLm-2J@nf#^wEBku;*Y*u|+2cPOa?NdHW52j-*j08sZn>5#T$#Swj+Y>xzS52- zE&tQ2?zj9*I%-+*GRuEs#{*Wn!HWO6xpdQurS?Qu`jM|ZbIJ^SDil*E_05t+g zZ2;eV??WCGUu0^s+26lrSk#Ra_8xJg=-n|$3p;m+wQYo-v&#YQBK(SkQDEh8=SOx7hvlD_tFU)H+L7y zN?K7cQmyMF`pd2NsBL|~E-$WB1)+v4We)5FKjFBFF~n~f72&g@wC6u=_fLj2-R$Es^z? zi1a!eTG>3svXuGJHna+p<-)&dWsBu^Hm}o`+Vf1gZ`l>AffSBZsO4u$2%oz3OgU}e zK^eyt{cJZ=3Z>!OUWuN>1}8iDl~6Gylafid#4peKR)clLs)>zIY9$24>SwK3HF30l zME)nM)IL9wCnY%hU;u=)Ox?Ojb{Xim_Uq>+b4JrJ%AjJJKuUa|0gL=t9^CEQyE*O0 z@^qnx)J<*uk&Kmv4Wy;2KTGx-cKwwYd%8`xgv)A_t8L%B4thr+&~e&XvS+ugN)Ij; z3~sa1g9BLotQMv2I7?0tL)3?7$&17~wPca(4H#}%BnJtpo?0YFc5XvKwzADiuTwqF zmK*TJ*0bdTBzrHGhakCXvHVmFRn0lsFnSmjcL3GD1M~+uIWpCT&Lfw|{)Kd&yF}CZ zCrhN4E*>|Kb@viExNQTUpsc?nM4YK6B`qXTzn+u3@Yk%^WKB+@MV<5O(>JRFmddk7 zF8K-wACVqTY1-Ya`evy-NQ_ViodXm;q?Vi`M~QVC?>t9FMC#lt&|VUvx(uI(@wES`!39-(j(M?7s*pV@%t~5ry^;*SdIz# zn-CR2jbrukhfUG>id_<9%|GFvQGW;5(rUiPwJaXh*8z&QaPc|1{)s?&ALvLp%-7Q$ZcxGQB9drbO7e=IhFatL0r~bmOFmJld}N>{StS;AJY!MHfq? zopa9Oo|fNIqL#cv-XoH(D<%|)BQ zLt4meac%^2IuvO>KD(-uIkTx0~3lxKL!SROi%t;Wp9xqRO8jMSFS~y2AL99 z_Ond~ZgiaWBnIIo#|sXI;I&9}iX6$J$D#+KpDMF%2|v{%tKQRko1avTw*C@+YLB-5 z7ESnAlr_jmrfgF3M36hBiQ6F6b63k@xu|9U;l+`b$a-HxJ zOxFsqx#e}js8aYpiU0E>O+27#uZ3@9o+|x?JhV^7fCXbHdU|?qe!N|JNv3bmKHKY* zjGUevqaM3e&dR+aCnfI^iH&(Qjp0yRtZYb0O&`n^!XHyy*1)o%#bp}D4aH>|$8K?% z#xcarjs^0zRjpnpyY5|t(fs!{Ns9W7CtzxNuUV%7Mw-gu3o+Sy$Pn#{xJpbJDpHK-;FbK#zQDXFsIi zZGc7Vt~N|cU6yB3=^l#S+1k(P-S>hNF7-(k+Jx&fZq7F%_? zQP$K#hnH#Y7gLh;L2ay6r5gMgcw37w7#>oPDJ$k(%unE7eDNVx#AU7e-mPkKFE}q# zwWp=0x^M6nCBZyb(te(U448Q?iCNB#``>(HpRyn$^<-B{(^k)RYSVgIsV;ycd`L6| zcd`MuKr?QQdhn$-$ZcG88_js2n)d!d}qHYNc@ufmNT zoIDAXk3o58%2yUc*V?N(@e3Kx1+AqeW}Jwg90aW+=(vgkZO17Qb`7Q$s!Zrc_?5*V ztJEtYI8ZwvB)yw>V|=@-BV-GdRcHHIfl#q5$+9lGOj`g$Bt9J?EZ7d11Mx0t>aUJ~ zNICG8?@ZI*lx7>yYeKnwOFQSVz;(+~QLCn+I$aAdI4}vjM3N0daPp97WMyHo*uDXZ z+(^qvqcKT|GH*=J8Y+7Tz!@*V{@R>bZ7cv-QR0+I$-e$c!jp-H!0hDe>VId(48i=L zoiL3Ni}iuQ0RBR=q@PlQ*2~(FcZztSoo#t!%p}|hZW-1UP)9|^2%bA7?p8lqFPG*b zE|9jwq4D7_acK1ov-CVU%DTz{FWC*&g^mZ6&|sbGXtoJ72d0aVB6-sh)%^E3hh;Mf zH(vA_ise1%O@BN3fVNBUC1|F8bhGSvP!t-(0nMOEUS^6J={*4r!h8}8MN2sX<-un> z(NcEW3hAyb^Vlfbkvl24+Mdigym((Ba1^#F|*sBcJ@ zzg2DDAgkjoc3@bvL|5J_tD;6(t1h?7CazA7x>Zi@Gnmz}rfM}Tp+2=?S)e}0YQr)` z_4zB2_@$Y4)!5(4?wA|&Ld~q%607wqLs2wrD4#d6?SAN%WG(#UTK$QsXMGRlZ!ZY{^mA0HWn;xq?-MZtRoIf zZkN4!5m~D>^2|gh-DDvYtFhAAs=jl(?1BYd_I7v`x2om0%g#vF-Y$nU0S^`M!ou`k z05Wk=Kg4>Y*{2&MbRTVR_Q}DLi~4P0zQP}leItB!s;av~o;YD4_R-9sQ8fY$9pFT( zYJLuO4$HKOYRaI3N%jZskb~jbwfzm6J>8^w@gK4aJ=Sg->x6V2_8{x@1h76J;;=h4 z5fh!_{!d#r(K2p<_H~m+1^z}`F3X_trzU?R!Vw;yAK~L)O)MPYBVSF-kMO=QU*Y#M zBgBm0LU5rX0`M~0!3>$+aIY*$pwSxh3Qn&V@05KKW!%&R%-9kepk}`Yv-XyAK0t;%f9X7ghwb~|Fn8$))K zQ!FoP1@9g@m7twiD+aCk0c@kvQ|7&jTmT!WWL ztij9J8ZQbNka`s|DVZ*KuMG$~?xM*(5^GTx^Q2j<#N1?hQQ{}&bIxtr)G9ADMreE( zr{B0-;s(^z1N(NXFSPAirw$?>MrNiwz{u`eeRLkkL|WTG?!eaJbt)Vlz)M^Y9!08` z559#&UG#g|CCAw@9POlJCk%H4{;x|Q`d~N4@n2i7Y4mMy3P&ymQmrQ32On#VI`aXz zhFU3@r;y`ErzMBuG4Fapo-Qdm-w<`;l}Ln=q)OI^k@`Pt4WfF?$gN4q5qipR9dAt$ zmym@pXg#4Kv$c=T6^fLZ+~b7?!IeV2(SnVQm8yJ`>{6;VpkCz6dQEnzyzMJ2!MLDp z)v9_1m{Ooa^U5x9O1#O@?t(*;%K`M3tFZx$pdSCS-=h`8xfqQOJqDfwuZ~EJRQGO@ z^|?AXJ}G&QNG#O@pgqIoZGNdiyBEqKZ?I}Z7^|0ZE`gv0G0hASE%tap3pSX}?Inm| z!4#D@)HqF>)eJJGi?D;7W?ns~o328X1x$?(SYFK1?}^rh%o6NG!y>_yn82{S`I)@tq{@>K?H(M>Fo{&56(3U zhz=IpJ{GVv)6LM3QeOz}GSjIhrYDbb?LnyFA%v&IuU+WZp5~XF?v|YD*G^uDfWjr% zgQz_X!lqyCpDg!p0aUP`x}*xXo@ zI6JOKR@u&Tu-&15u{x*6l=t0j2lYD`6D@>xV=8nY>}!bB&UYvM3)cdrw7(2WVR#jx z)bt->tIgDhsb{x)u1s_x6Yfl;^p=5Mv>OJ8jA@a|wes43C{zEPNagxLehX!)b(3m0 zWy&yE!Th9Y$oZO#XH5B>i`3zeDKhJSE>pV@sipVqTBLSDe%L4^KNWR{Y>=i z!T;sclK~sTi;E_=MWJSLR;JRe_`ZujGwKm6=dS`h5T+!A3GtHuKEwQ*{E{Ofik0wx z$1uCaFJbUxEOa8viT95?!!7#d`T9da4p9sbLSuG1yekJ|NG?^@7r;PkpDR z4BkhKIkQ|?;eWIY_??yP>((WEC;F1#2xTmNHfIp-v1KAIHhLLk!y&^r;BU9)!9fmR zsb4-BZZnx45$77BoEy;ekfIIJ&luuyzq6SR4rCR*QB$f-r014?|`e?Wg+XOvGVF?F9Tb#%!t={2PV0CBDu7Mf^izxc&qzZ z+deFBRn&oaDv#TLFt*ZWa0g*?Di-vr{h6YHCt3o_chf|s#1nQ{hrqZ+*MYzmw%eP^Lt4m80sZ%70w&E9!A@jrj9G?(M{{hJe^pyvsdMbv*P}9MlbXNTu0@#!Bf%X+{Ez!6YKj% zZqM0G+;CAhJR&EYgv~n8ST01rUFcFON$ekQdZWaH-`5N)84L@LfS#7ZqTmeu% z8_^tQ`4E|&9Bug4D+Bx>iO8}(byaPZ-%-D-x0h7q%+f^z0###%2Ok?$gi$U{Mn7qP$F4GH3mKo!MO&O;kt!&II+d-MY`B-LPNI#7k zqJSY=q`&lT;7)J$>opk2SF~Wruff=T2PlNJ&?kEyG=-_rD3>_2STuuDwA05K3}zrJ zlkox~f!Wqj^{J>=l1Py=*fz8y{U#idag%FV*S(ruzt-{R-*CrCE35Bvz3N7$Bynzs z3aXq6>ICK&X3}ms{!K$cm1_mXP^~q1S-BeiBooJs8LPOw;WB5GA39u{RfF-g}Wb94bpFZ_5Q#WbyeV#y8W%7WJCDs%WH#IOV$OMbz$WVe-0|Y zvN`RGg*aiU(1<5{w-Koh6YDN5a@TBRgpI*UJIdu-7 z3?Gb^KLGI{y5I~m!C;5jn9HE-9$H^lH_BJ&Rj2*}m6lH z5`!6QfHWITt*VaQpanf5GORlO8Cfxd`&d4A!T>(A0r*hE7wXj#jSHZJwh%0UL?0?1 z#tOrl5gr0H;0?TJ)h52u-c8I(w?@jk9c284?2_wX2!EjagIR*33v5&D;G#7y*tmGb zY@)5uumU#X?G|_fybA5oO10l-@1}Ck%1(tL=T|-}_d$U73(v~!x%V;PiZE8l|0kdJ z)Chb|qgH31M^;O|nFn9RV{5P}w&0$I5c?M)vO`NXQXRNzqKLSqN1VaLG0Gtrsu@c^ zHRdr{j$PdYo|6NSob{aCr|l51!sw3(Y*?E_aGZOmt*i}e-mtdqCIYg?IrS5<=#}V_ zfhqz`3bmNA?#(2wXSKY=ZzgfhqS_-16v!MKGRi%i#q}{Da4#n^a|~$x?|r=~hq~N! zzTx++8_?H=`AWYJlrlcUiB_(s7~I&|$cVNDiUnl8UMnOfCHq@$oLofjMx1`ZoGEQx|Lv~Y( zpO-Pj*w4qN{;)Q780HQ*ZG-J|Emd*;94t1bpfoDw&I=t|q186m@O&xn2gNQgW9%_ovgGjvx&4{5g ze9cdV(QO4d_rGF3k`0Xn0<~aMkA228)(!K|D1P$MykR9jU%{I zba(qc4l3>gGt7U{2e^>qIp763R=#wv`pFA&xc$(>o75j(kbP1+*g2z5TL+jc?i{*k zcRS}|5(CtR0VaW}yr zO>D@28<`3CYWs__u~biyG=xq3aQp6iV_B%RC&EYcK%g+H;RZaNr*F)Z=1XJaaEbhPj0p5j|BaF4S0omauyB1jl+7Rs3$X1!Gwi5;?pzd2qzgy;1V><<1hL#Ps zI#keH!ETjmShskk`ub(ry|PV!5BR~vI*ArFtY1mx;i#`ehT3e#b)-vmy`cMo-I(@# z0rf)pT=$A>sO%tqDU7v}a3sr#I|m@|94YL$&^ZE4MYq3K1EmAbuOVA)fPbo@$#QF& z^yx*6F7(;D)lL6=`<&nZ>k2K+YSF85D16Waph33q?5ls*#p>QyWv|L}F9~)r+e8N- z@EX&lap>#>X}g43JIm2txWLY?uX`KxxfWF;v9i~R6AamLy`1*14pSXwe$@+;81Nfa|MNZZI((#Hp10XS>b9avCHF) zD)Ocrj^)sV`rFdSRjQ*x3!x8*1dephIvD%a4#R61nNh<3d#^7uPH+Yhnd2m0El1n z*aDYp8VG7_8dq5MvtlqZ`BHQ(j@a!T)5*ZsP z6k*!|S=5nl%PGA&9?!!(XOtfgEg^>CZhu==b)XAd13%G2yA|{7z{gmNYh!><`IKsW zM-FYoJmzsn=_8~)4C4HTtmh)TtR(AsLD9ghmw{gC2^RtAXsfH=kr|1!BFTL*LoPbtmW<~l}6fj%|M8ksl z$=B8M@0u9#_x>dZsGk2qC>;)wV`S6J$i97ayPQ)nBzP6o)&G(Qk#Eq+sBVz7V#ETL z;f7tHLD;uG&@;eDJ7*Mb-xYu2zd~A2$%4s(uMi>kUqWkUK=t~2a=!*0E{`n%ud;2| z#UV@@;9Yi2M$#Il&|oOkFj#ibFuDDGd06Tzj*VO4tz$F7(QOdqLZaNPHi?G`}%$($b#2z3hgM5}_Lp1;n{tBUv`AGJ5u?H4Isqq&U*MjpNwbp(l2Tnz;a9Tv~b?(r7 zR~##PAL~&Ds1>3_qg6;ME zL@vjyNvyQPNg+m10|rQ4Q47XWDt8g&8cB2u=g5D*A;-{Z^rtd6-hdKxQ(ztCV*?6| zqr5u?96}C$|5HSD|2Jd7d;?#igE-Qm3_vk!7Kx*xc@EqqUgI1$~))bFyE@0Ka=;D>hl)*@u<(`c?FMee=hgHqdA(iRSo?@)(W*7MKBOS?d3lbW?W`yjD*O=ai;h%?`T(=gnWqy1LLJ zwY(|qf#bK0Im>OJ5^UIFu5BydA)Q*yj+d!G^?#FagBNcGo{nEYd0+XLouZHlEWl(1OxD`>)$RHSY zN_uint*49orRwOz9zwJ_baWTEMc~cWdwOA-^i{pEQ)61I6x7~jHtloIar}tONR>+7 zSq1v)ec+vZdhZJlU~dk4vnQ&@g`F8%(CzX+1v{cUwgj1imtj_6tFJayxHE>ShdW~x z+a;8)7QNNstgpkIR>Sm4(x!l8o!6WA{{nNjI@VvtQ;}o+St?LC*261MR)buBV;LOl zTDiip4!=70shu+G(L&J#y9V9bozcaM{HYDq-?qCp!f_=$te%CZ zPqfgA$Mk_eh)7|iKjF8nL(b zOLMO&I491dr+i4@hC7HI_BeD>$4gM->YIq&r*mOZK}EHPV}ChL@2v7B7&c_-R*M_L zy{Oz!!{uE()1>YC5?p;0e@iWh+Cz4BmmJnCjdGa?Z>kbLgZ{K9NI&?9)MqOE z2y&6B^|~pn?(n&9b1wwnEfZcfcmq0Dj}d>}Z2BUBbPISE=RIoF7csl1=&X8_+GD!& za9D+(;w^u?3l>(q@XrHisMyV|QKyyKUW#=zV$A2)m)bomP$qF4$n8WTl_LnNQax8{ zpMhp)l-ZRyW;CbF?m3uWI(qXSyX{aEyrs&mVzwM@c?hXtL@CV8O4!ns>drFzqrssV zLe9+yEPSO8v2}7QrvOe|mX^(+`cw?KQf-Ud17ekWqZ?20ggvmb5{=GdD1o6ezgGJt z>^`8}DG9qKJp_>B`dx1Bv-fhP681j1GPce5Ea16pYBIt6!b}xrEzDa8YpG%s3re{H z)p!Oet6@E*-SN2S^`c30?M#yz-Pqp5Tz*P{kb`V zQ{Z0XR3_kF)kW}YLFF=J3iY5wfTRvaYepF{!k|Zq4R4yqng`Mslf6l72b{MI0nX(* zz}YYe%-eKB4kH21NImeS>6u?cA8>sKhcqWyY|o6gcL={&T>!%sfr$kw^h1Twj4U>- zrvXG+nn#ez!^tw_Kh3Cy2mRi-$j&xsjJOUU8f1Zk{8Ge}qk5SiWpH_!I;-4nfZDyj z+@6Z$-EzA(lB%@bP!rtO=7uSl4YRO%=q&)VdD(;No3}*wlC8M+JbjB$Gt%~BVub3} z$)4nna4jmQx^igNL6+9LWiHOvWiz^bggU2_eIhEq*U7Fz;#AlltE$(;b+}yf&ez0h z+>v<5>mmbp$d6wai*N_yr>~1I)w5fiaahN`UmdGdz5nD)L4MPpoc>Dv3HPXy!Y+}V@)bZMpf^pvlIQpLF&Uvk~D7p+-P8`5E>*m<`(rrQkI_ zK#L_JU_5grO2+nc`-5x4o1rjC({C=!?b989?WppnoXZ+v~;X_QM9D93m3*QCU1y5L{Lb>)xSclV0>Vq(>{~X=iW(J6BkK znCn^8VNW|#DiGrXZx(AA;+(yV`ztP2vz~Lti(%^O=bV+P z;)d14zdHSe+<3xYo%dxWwuZRWZ}o<>2sQtCXRt(i?ek85rW3b2HB6H)IbFNAKpIv{ znsMCb?hhMEAK-#M<>sxb{|A_Dt~&W2&R8VB`G<394Yzd5^P${xN#F)~vij}|&cdGa za3MjWzg|fgKyXPv{MP(q&KZ$`K$DcPIWIF<)LLdABodwoqz<(37mMdPNjJY zoixtMs;^#h>UK)+@h>~&h4eo7Wzu`&qL-cHWM&c@^kF?W%6pLu^M@kyl%4gj*z$n# zUUNFDZ(eok6U+4Bne7_0%74x2uExCPRMc}@0)7I1{2s#B8s&q`BE{1D6n=ceYt8}Q zWEZD4S4T4SjCf%fG5Ms`0|#1HzwY!Y$9Vl6dP5#`PES$OUUz0BNpk4Htp6-chZ|pa zx>cY^Kk+QR4oV)Tw!Q8gUBarR>3vkw8_wxioBr+%r|+1jf6-#;YYIELv80{A;z;1; z{9c^FvHok2^O9YS2MT!LeU50c1?%8_Ro$D;gr<9S@H%DMfDMNmw>VI@@a94@Ae@!6 z{dG90FZJvMJoJ;-OLgU&&Xg#T0>7?=fBama~7il}q&%sSa>L_x2@A zwc`UvWpU%^QuWqb&T=tTorPO;_{BAEI}@4y<83F??dv5$RrBR%;Um6$e~Ie$j?;{3 z;nsJYr^J5h!hbr))>01OMx;xrASN5lt@zBT8e`;_w@U()U<&2l2qTwTxRBS2bxg=6 zw1Q_|{HI8i1KxFNG*S3OE0cVRR!@7^nS^_q?|IkhNtj=F7lJ%Y)&0wPGQ(i&9 zZU2@9rltBlfvK>uhuul-{ed$aGwA6bIK450Uj2c?>#6_vfze!_eBkWEQH=l4`FUm- z*r$_GQ&>*&Y@A$wUK4Br90_o7f+oG6dhbK$V6$*7hj!DWPzQbFOouAF?jxrM)$NRz zoGSIqN9c5}D*M>E0Lta(OeU!=pEzAgiiB|FCr*9b2qAR3A5)7yaeAl|KXK}IErTz8 z;w+Dy46hdS?Oe6!Q>SMiU@N`9oJa{c6k-|j_il;h7oR%cYa^CN?&w%7FWTW;2BiZg3`np!)CSMYiA6YZ+m%Jy*lvRQm0UR&pfxZyO^zV=a!CF zL%(s-@z&+pGius5PDAQ%OEB-V_pSPt>ZRW}!wVX?{JL|d;}ad~rec6JoVBBG<@{VUW%B09A-UT$a``FWW0DLGNXA&a4HuWdX3_7`w%Tie zJyvW}KN?_v*%Y)^^fg)wzYbd~4_XgeE5+t(zPXJ9?M5{B?m&B~xLKV%$exd2Z%mQU<*kHSIKQj`%f|U`xGMBVq zK(Nl>M2X?-t;R+o-%?;1m^T~=->6Fl+jZYH?S&O+L~O$@(?nEw5jLGZjbag`H}Mp@ zeq;XocnZ%W#oW?y7zlnN2_M6zdQN>l*dCg@=;1uw@?_d0>)*cRfqh;RYnjGF8iSJ2*ufco=P#eM%N)UYqn?Q=Iz;%zhNmJwR!K-cR z*5P*L0qo%kP^#2N%v&!cy*Xlgncg=l^#>6OvPyoxsMH@7mKoGzRHgm|Q?{|w2>cwM z{Hs*eBkjf<8i$=M{5|N}z<=pO<`>lihPBLWFW1t@r%Fkb$BU!@p#klhu&=EEdzZDiL@&KR@aKkz5tq`CN z;UEM%@15J$Y>cBZ$ZxW6pC2C)L>IhaQVb#>bO|A-hm#sM2!s1lu{)+&3V06*9il~- zYe6)f6qQ3WnfitoaYIZ<4merq#ldSVjzci7Xw5FqXZdm&yvQ;CONuss3Z_u4oTtT= zg#~KmqI_YfR`4MNJBMUhUNp2Gxn5UgVZrz7@`bJ6yP$oj^S6o7@*{Ak8y{^`U<3J+ zmjO{O?jWV`qAO?w1Sye=!HOG@_T!RD<9joi7B9ff_)DoXQ!|i=Xr8}GRWrsun$k#K z*BAe5aSBzuR))a37N-1ssYhl+DJ&yVG!vM9>7IMq*g#sC5DMdTb|BZR75^rmIfn3ADM6-E%iHvrKVf0it55LgKb^b zk7Wk>OgJZ(`onZ-b)H(f>R3}%%^qi0Rw;N?FnImqQLT}eNwsX8J=%RG@0`)}nwTdi zl^KWj!Z>iqTI6wyvRf5u6pqf+rCI?+($vQwUIp$lmOn$5uVfftA_BabEJBDygj{st1&1#vN_d+J?tMHOin>x zr9%W1ASsNwhFr%i<{I;3k1=jG?EoNcCmMpEpJn)-!|rGug7~ZI zm+y+l<#Tf5f`5sRg*aW!eP7(!?Z#rC)GrHsQdcfjgFh5M#2WST4@Ga8cGROEh<$ha zi@{h@J@}zGL_Q%@*N?iH&9(j@UKZBWkiaHXdq z0aoc**T3pnZ9*mf@#FY#{6x+${LeIv{~g%+HMI3xA}3@by)2k^_{~WoeXbk9#Yc_u zSZq$f{F|j_-xK%L`oGwT9D*4m{)2F&qMQe%kz9m07-$T6JN&x-l22(yVvUS&KZZME zyAZFDhwh^P6gj9;{M`V5WH0_sC?*z+y8&KB4=4N^J!NP9@4~?w{s2odX#y9ZQF6%y$^%VbDwCiBAJ*m zO!T---Si7UOaoBGH`v?35lvi&jQ@d+LDuaye&4e!j%Xb8mQ3^aQT4aJv%s6-M{>j! zafpk1yn~R1Th03}(yd4jM!E&*_mFNz`hBDznRf_MxPd($cfS|uVMy;ndN?{Q^&5CE zl>q>08Ptm=nvZ?@BitECv}+zTcV`T-4#QP1AnZY4WA6v3xXsp^Oh>xkWyw+Q!Axel z-(xb%{XUb~?jcN$b`NE8jC&Z9W8K4<%#rAggU)1B!!!2C+z<7hq)5fB68w^MtTY<8 z%dh~@H{fKBaqTC%M0*_n=KEV;t^Wz&WT8_T*CtVv(VkKxegzrmXMaBI}terA`avFa* zP7NC$smr-L87PK0C7I%oj`Q*RdS%@IKhDPw>Lxg><9uxV$2p+meEgDc8HaM5k6<*~ z^T@>zAVcVn<4??#5bopr=oE|y5Fh84Ou<-SssPH_Q!osGd7NK51wUHrR~Y~aEGTj; z_YdbF^a}ae%+KPV*}6b;_K|!(3L)VMJz6lU;Q5&dl2qKckt8|H0c!ipF)y1*r7R~Z zEz2s6Bx1rY!Lmc3&d|7f%p?RO)OshnbKGP6+Id;;Bs4M~;GFEIy;J;zx4Y-JRo|fj(;z-AxPlwqYJ_0-mGZZ;sThTpn>}ru;+EZ_)z(be)9X z)jL!7(iOe@2rd5@t)7LR7NN(p(c5D5lnZ)UBGAoJfqu>r7)}lMQ~+uM9aZH!@)}b< z!eiM)FFsJN_#&M7{gET8$%jZKjR<}yD`VRm^Es! zTVxuGc$b*QA`7$LrTlO?KU~2Ue~w==H=j52^UL`8BPad3<$7*ycW zcaoVwh6whlnVrEPNbYKT!cF1h%~4GT5ps>tYBe20B7Ca6gk>}*&N_XP8)+B{XoF$jSx z{&iAe62z*(UCEo6nSg_tfPBoVe;#wn!)33jF9NJJbYKwyfVCaHUW=pK<*yph}xXx;H*HR1|j+Ciid zsK$6A;U*YQ#Bc%_yoh^=u5TK+I5SsYB9w6FuE_`;Tg1;uml9CpP+05;geieCV(0+^ z5)c>%1%Y>Hkgqe0_7v_9IMWM%QPw>&XR>Ez-J?uyVb+~#awliqStd6x>&`a0xmovU zlRGx+9%FK|vhJ}a_k*lE$K;O4x<3pCDg47=9Sp$`8HZ2`3_vBNILoEz{z3d$0=U7% zhrgI`izZP_5D`uyI*12TE2a~yJWhvIgLV7qUYYq2D+x|H$Kwf;AhUrvg2|gtu#%1L z1|KuXRC5m~XM+oJAf1I2q+lIpc6Kz!;&#R`g)x7 zfi6bgAoszxq?w{D*c%idxDwHo|KVSS2MZ@j`$K>MWxymFf|OfA0SA9z4Immw2#WH- zT9m=^bzUjz>uX?27^DmL8kqWZ5XT|8p}06Y>HAdhM^RPW-;gp0^*?XG!f?e8!5G7}2zR++cjNC%p@kep?OH9=~6$g$XboKB? z3mp^Ae5Yb`1ni|z0tRb`l2|Ul$hOAct`D>z;cQkG_bSsb1 z=0luw(tVF^vi!#Ma3$78yEiZYQ;bks6yqF^H5mN zCP5ZzQsLExCFYB+xH7PolXQctkc8G_LcUfI+`U&dVfz9QV8W-CYm8 zfM)^O)fj<)7yeKN1pq1TG@y#^xL7Jo$DtC0%dNHJG+=^MRJD=99D3+gAcnm=>dLpg zKJHGt3xyD#yVmYvrn^LIcUW2WZS5%2U{qVK9)g(l`ho5H`x`I4-|_~4uLt^fGdl>} z&=d2!H`q^lL;N3kL;aLD%)jQRcsCs8(g^?hpCCID;y0@4)%TwG;*ND!-1&~>HTvsV zJ{q>y82?UY$3n!$`7O+j_y5Rb57=1~{C9KA@9Dq9WG~3>ME_}Keg6)2(&RtDWN-fh z7VhJhdz1XjnVsxk!WUEgCz$LDfuHKX$n1Xp^-QMuoxJ`1&scRj?ms&KCi{1Q#RC%~ zxctlb%gK8pae6%I_s8R}%;RaaE~_WF4Q@XOm;W)C#5>X-1V(NEkGlP_ii5NxZ^6_X zK>0)B_J?#aUb(^ToAqWXzsBx4ykU@4%b%0>H~&$$(TFyB@yo6mEShWG-uQALgaHP4 zEsGPLI;CHm2FwP!iCEUSNl3m@|guQ2wv*5PC$f0EgqUsx5SaK*q3Nd$wO-uF!DpIL(tF%{%6N^Np9q-kv7rX-~7VdB&XE-t=h@4(nX$0W( z)Ziq0y0g3nceXo(?hJR}_nw&g1k%4LK!gMNg_d#Zo)@O{M zojf^N=}yiURqD>Cu=6QFVG^H)oqMKpuWjcCBw*tRcVD)@F9Ouvsip(n+J00ANA-Eq^B)g9x!5aqdqs~51s_1U$Lu7|K|w{;+< z4|LE5i<1&PIFLOiBcyo`WG3iw(7X}uo@{K-pfHJgA;8@YR=S6cC_R znPCO3?akKq4hoZ~w+pP8PRP?b*9I$e8vSJ}xFf>9ln$V0!W{iObxv`UR8~xaP zQMn%Ocmg;+C``g*5DwP}1mvO}?z$S@&F#fc_rj+WiT19opVk{p)wlh0Vxr!BI+9-s zY$>>n2PNy{;C?NXnpGMt8>8$w&T7XoRfc0mOu@~v5LWPiUPj$f(=gl)#k2@F)d9y$ zCjip{`T+zT=k~%;*BQ`_P!-7C1gzFIzNYcZY4~#g96yD_V4MMd0J<+?@Ja*jxG4}l zfLjP{&uLgh>>66Q9(12*!b0`$WW599#HlY}mz|P}y8}(v1KBmV)x%K)T@UP_>;BVV zYVB6n`PQlpPLLQq1f>pTQ=QY~MSg)%Oz;?m{ToVwOl^2)4|r4Zl?;$XPGPf^MXiqH zuNwy3p%Glb9l196P8ocIJ#?-R-{6kOZVbAduAV|*Fj=+gS3S%Lw1-Wd_WE}?d@^AJ zZFTdWaMXnF3%3rp{KrkEtoJKJ}!<}!I7nXYl0M>466rOCB zF*NH@oB(c9?tFM;;a#C_pjmJ#)q`*svZi~QUI7TxnD%G7r|6}jdwSpmL8B+4M0a^g zzDsujv-$(?477IAl;qIFXaaVQaDUti#5wSs!a)fra%XEWLMXU=$9HFGD3+Loh;Yx& zx9To7U@V0L5Pnsy+R(JF&(R^DuZ;Ye21Mi*u?bV7L8c9aC>A;QM|l`87Vh~7F5-fZ zH80Ksxl9xR`BUsu5XuX5W%p+xm^f1!j^6zVj69C-q5?qCzWKzo?y^1($PpO4I+tGn z56E7q8wz0vphdZG&qLP%MlT0=F#{>HwBu6lCB=}g2q68rfwVb<^pZTJ;Q!?TsF#JH zx|auqfCgDpnb7Ed4DL`a+)D#!+<6Sl9y1+PEdP*Lhk?=Eekbq}}H5NqS5O)xxlotjCoENg-~_nJC2taG=ngHEvBi`N;&jbn}; z`70=8Yz@O0Vr{^$*R950C{OWbR`HaknTH#(HTvhlL9mE1dK}8^*v0$JW zA9$la9u~4gJmWtl;1E}0eN)5Y%vB<|SN|%p2G!{lM|Gaf(|3NOYd9^jFvWN9jpId> z9*wKDR`?})5bm$wi8$OislXB<6|oSPhUNa%fIGo2js!DYFSs?rqKNxzvXniMl`#rR z1qB94rUt!C^);L4?)R zj}h#*Qn!NJ304tnpffiO3ibf}i-eA$(D4T5MHilUSCabNX9bm43A0N;LW6L|muTP${D?JJ;i5@=0zV=$ZT*Pg z0Ru|_1%wAdtyefhoNh5RuY_51<*iF^`1o$G%Gch{sU-Qw=95_m0%r%mR#$` zMF@y$1;luM75jwJy+Xj3cbN9NB99-Q0YkerS??N**}GPd#q{vA-Y>Ab!cGvO04a|w z@K%$JuM_^6-Y>b=`YUc}Ue7(j+^@0s`MELW(8xXGKtr5QT)(Y$y7>ylqf9c=Z1=*mCQ)U$*{K_5lA-KjPmvhHMnz($Jv20j8o1 zBYH9iO&w0McJ(bofi z91?>tF#10 zbRQVgLU0&p_2cp=i9OAF>_kI`vZ3- zZk+i65pB38g`!m?EdbKwoCVV7+&}0k7YsoPBRK-i>rvc_=liIyQyjLQP`p_IHi5#a zkS$nHK{>!b0?m>Rn!EMtM(-6Jp*xM^^;#`nH;rlLeelvLGoU%l%Xn)Jd_Ju0K~{U2yu?n zJVNSrEybbyQqGT@n#=^koB<5fKNRLdSG1>xQo>3^wTK{`9 zj8FsZv#@`Yg1UB(@Q!q610=1^XJgrchzL3(z(^LNJMN*u0a5S{Xw|a{ z%q2LnVM!tY**YPUeyzbLbJt`uS|TCQSWc#2V|cL&>s|?srYp|Kzs}*K zwE!VSoCzwc4CR}|*0C-+sF4UD3lbR!XpD0NYtu>6Pic< z!jz^1Xkq{30~+aAO_3MiRUmjkvQ_}sXq~GUe7ual{VWY60ni%8DiF~clzX8LDM}*2 zIPZ`qh9pS>4tv%3Ga~+%X6Dqf)H{Tiq*n`Z+4@*PxKKc7QOZpg1opIzO~E(tD_HzF zLx^sJ+#gNg;4%h_%u_m(eqF-Dad+T#>jKzpLPAPwkC|ERr?cvK8JV~b+zk9pHQSh=bUQ$8>YLd0GdeB9Ml{i*$&kfc*+;(zxvmDm z^EA|jA5kCSqxV2dwKNjxx<3$qHM9}oB1G`|tb}(1ZXXf4eXhnZ)>1H1IA_KbKl`O! zEctQJNi{P4CeBAjBE9XWwro;SCo*^>qE68%qs7VB=$8TG%+5g;vEs}k0FSYCh(Jdh zL%pmz%0aAEl60^#<+wRWug|&mM})X=%W(q!zE4TASZ4H^S$uoEaIR1 zy6}O1!A{{rjY^kBy5y3)Z6subzPtn_5wv4?!$p{3{#2qV!f|X|Z5R3xH3#A3@v*^` zD3ot96?~LOyES30(Ax+e0#EeA{YE^xl=7Pp`f)TX=_iDp9GibY@QagwK$w<3p{T3% z#j&9fNC@??Sfq3AEsSB1H7k?!yU?2#Wwa#h8^-q`no_Il5|iWQk?t`juj3iRO3;uL zo&Sh5Q_Xjz4X2=1y8Jg}p&${JAWO78Sz_(UQrey@PJ6N(yKA!i5M*hk1jy1#36Q0g z5+DnXjRn*LS)#3EF>^1msRKU?2tg%3hjYU*s=O>xJN7DpX`m~7#8lY0pDXbCS#Z5! zL1oV0LPgD^R=^EvS@#5;bF*qzS!5#ajfDsw>m83)bu=5vNwwJlAw$7}jD>;)86)?T z=#a6RAPYK1Lpml9-$f@}Ff>Y3Uc4YtwXO0+XI);tqDH+Et$gMFYxzp-4k3;413FwJNm#8@by;Wp`aBMuSZ{7*4i{4f!5aZDCE9!oBZvt~ft40F)dHt4BC%{z!9Zfk6i@VKEHyMLH&BIfD{ zDtsOuM;x$$AZ9xM{1LsQ!amjDRHU<7-^=b*Hw4eP$_q9|HqAWHX7U@~>Sg~x;QZZ` zK6W#1LHb)CdngY1CHmSuab$03U)(qNiP|TQyEuZYV;pF3+-I^RUVKZ*-SKF5A=Gp6 zX#D`#2Z$(l#UfXpJ=z}XmYBU9hl%SKx6>mL?G={{Z_c_F?}VA2hz{wFrEu{_!7pJ2 zou8PDcB$dagYSldv4cyYdEQw)nuzuWApc54Pf51>s{a@)^Bo#$`eMBf?{_)h7AYS3 zTP{w>h+ZHe;CfD~drRcUy`G?f%tuIq%k#Fu$wEM4aYY-)c9r@|OdcxUR7)SS2irG4 zvPu2+A^TwaS!7BdhPUiyb@jvcc|vUT9nVY7X_#D~qB?Q?m8zw@K^$KsHU z$v@g%guUgQ`&IwP?9)ii#-vjTEE3^!Ri}5M)_x{#C70J-sY`#I#L)~#3ZcWkot}1rB zy+=X5N}YDQJ*RsO-y--0HH|1vIZ;Gp@svf*lZR~g;-V0m2Wz?lG-C{TmF@ zR71!AhqgBX(4si=|KIL+-hKy$ffq$N2dZBkm;r`?;S?2lK`s>(Ma27#$*2(zFbDeL z5j4?w`*4m*wWKu(#$E~RW`P{zg zi*yXl!(QYzO1}R{VV|m67?f6OTk?Z}EJ@yP55F3q`zpGghiuwc1>;jfZP$L3Ce(KK zEBvRl%>HBuP`xu~l6Ka52>Lp!Jo5@2;an%n@%!+tM;t^(T?6ZYPYRW=p}7WqQh1qp z_AEuB`1vNXfpd;HfnIsChlvcH zs zD2xu4ZTk5Wg&_f{e|oZTbg(Qr?5V=2;P~X6r^viN+3-~1=s_Os9%AhGVLAW($#0%2 z{Dr(b7Jd<2vuVF)3h&Ja*KWGw+l4WCc-dpm7DhBYK8QH8j~|zxl7)uk zsC96>78;VxITjkSc~$;gB=mb%!ig9NdBhYyvvjJ? z>#L9_tCGg!^9ta*==l6Jp4J_oSBGvpKHpB_Q(VG-x-0qJ@%afY!H7!E6&A{=SCDpN z2jynWJh4+PGrjSPt31aNI*D|x*fGKix;Q+)+rL< zHbZik>3oW$nV&T?ufU|r>LuliC*{kue*8)KQKuhYMvu~wjhpc$N9gFVrpPhJDj>|# z&q0`w1k5KI3fUIFovUj)oNa(+i*wKJUOD&+96ieEZ8$zE?Dx{{M5s3jPGD!FfuqU5 z(IjvTK;Nnlbqod(Ln$b`7M5<@M zBCi!N;W6fNl}GN{oOGX@pD;K?<;li^`novx_GG3piFGJ$qMjEN8d>1P2_-X)NXDWg zvSKJ(lgYa6&n>j3TOyqZa=JB##X)gIr^D<^1$+i5y=bwVYQ$!_`}0`j>ItDxeca=G zrN|R}ypSwEB|ox?E9FplzgJCzg|l-&(4+WVS<7K% z2vfIq8a6D)mhRS024-42iw+Ws%`gkz^SqGw8JhNIt*`3ISEkMIN73sTdm947r_vIJ zK@Kp3r@8TfdxPN4ED5Iw2*HCwvf$MGqc=NXLW-9jclGBeVRPVEeRe^{xX}ACnozH7+vKP zha?9rjGB`z2a>)l`NM(H2q4vbP&9I+>3gzX_og*(*hxaP$v0*GLD7EwC;%Ze3>cE! zT(Oq%jdJq&gQ5ed`q_hh7f157aR*07^6g6xjwD>jIg(Gc%!$tA>54hgm$`hNN%rK} zL!v3p8R-jw2Z|4D~!IqEJbthyyyrn zr_75M`KNMn^8Bcne1Dz+jP&+o)O^e^D{7gFYkSjt+H-%heZIZjaj3n$=Fn&jiPnqK zf~a+7HZ;;|JTU5p2F0o%NX@B@8$~>%&R-CX8j``y6tMen`v#@QlRFkf2dAI7Wuc89 zKxj{vFO1q5f^`d{k)up4RmG2rGwd=3Us-6~dO??E$zK;nV*uKyMFzCWqG$$m@ZLqy zAzU6_1jjltd2>;e^g)l$ERLooOO6EvPFxY~&02;3T1=44Wy!uvqB*qg*d@`OEb7H|n?~$rLaCWYhC%8+L?0p#e^@+)4huJuP?=Ud)@#Ig3MZe+WKRY}^z1TGB zh$sjsGiGUY6q&1+M&rr6eJLclEcyCUM&pc(GT*(znufj^>|siXzX?XZmF%P`aTC!asWkZ|Ejn8C7S z{YpdkJ676oKCv=7U|*|bD*|C3)$*e-ZeV>&lng!&kLLYJ*KttTvgG{Z==}Z3eO%ri zcJ9>|J4dXFMmA>HnH;<-nm~>3T4i+ljaArE%aZ?E70vg(+DwB=YS7ba5J7jeIv}iU zH+()eIrVsh>AK^iQA^N^X6O2W9u}p^e0u%7Hj5Z+^mn-QQegqF(tHket?%cZHyJ}b zG0C4`ICabk;LEb4dO~zKmuF9~G5w=1$0nmrjJilX>O@BP#N@maqf>eMo}QK^ubyaV zbNorh_O3iBx|kRK>!b**mlD&IEI*kV?@#VH8Dd^Elch@6|7#C{N>cBgZkS~i>~JBi>EPM$0u7)vw{8N zX@+YDoNkFHoUX)8m!BT35|VB^Bf1VTcJ`UkN03RI-Z(2-5eAh_OV5es6$f5%n+g29 zg#Vv!P40L%Xp>96zoj@dY5rZ%RIlWQ7eKW^Qn?_yc37r~GIvo*r!$VWRNBH@ z3LC=8<~w{#ch2q~CBxgpNA~$C%okLi42%ZQTktk0eI?n^9zMN?tj*)YA;DLYACC_| z8h&+Ka`PHGKKHi9hD~=*2u}=yQ#J*Y!s~)?+Z~&3=nOXm`|kDwxM$Wi#>wQQamc1q zri5?i!>@$NP1870^@A6MgEp<799m%WdbKPq_2!K5nPECc2;KwluIzta+>oD( z-WimB8f zug?khR^NJFI5*k3v~d*vn9`}6rYsCUlFu4M-v%XPmV~z^Zh2T70#6A_r!Yh|G~Rui ztUDnb-k*sdSqPQSZrSwMVd34vku#47AK@})Y52_+6}6Wc0Tx248YRuLo8*bJK(x-I zY4-z%TDuMNEMd@$uo(HTB^SISD|X0H;eaveV9x42Ce%9F*ZQub!l(Ft$MW#0@TZ&; z!xh;7^U=Wml;qN5=;ihgJ(Ubt5&kte)ejFqoRq9z0eSpvMPn%$zp8O^GG~>4EF?D` z+qhTqja6aSrhi%)_Rr@}aSg0j4`(I6KR)~rRle_paKG^O*EZdCLbyI?R`&+TmNB4C zJSqH~V6wa;+Fzlb)aXR*f zQQJPr4^Iz22FH5m8FuetNe@SCEHgt4obQ%4)^tMVG-I}Fqf93bS!!6 zFAjfP|9)`)Eo;IX!!6GWMsF}|A6gqep-&%iX*lwjo!5It`@Nq9GiBBU{8Qw-L0pSm z^{n)KbpX-yLhqL3%DRioBTM&b`*GjIKX$n!U8|$R2BxRJ2X@v6QSDwph5r2NXn4Iq zxMB_B25A<*@;GCO52(h9*0I5;g75p%LN}p?5z7x~wl$K6=mQT&0DgoHBt= zollHOZoIH}X!{4=hm<@$`ObyW#Jzf#@BN9hwZ}qXYjyqeXE!5CHtKd8M#U}9Yz8AM z8~Mr^tiy|7TeyO^6*(c3>-J(fUpIvzSH4R73OKIBzgfYL!u-Zf7e%K8XC^x@itc1C z;l_)jlY+C7*DsD*2Y&REOc1bBAnlC1B&t6JAbI}12CB<0iQ++D(y8tHWJO)F^M&4# z5C*Tug4hG#W85J##brGGJ^;&R7%mI&&x; zsZXzo+IKDg;u;`axMgiLd_|p5ue-hdc8_B9?v}dj-QFU}%>Pmelk?X`U``||U!WEZB;|Ja$nAToM_`sNC*$YwgZaz?Y zPc&=X6g=ddsk{x>aBrmCrJ@Vo6O9`Op16U#E8M%8i3*n}T)Bw}-^bO3;ia>a|9nq0 zb71c=7p}J?r@aylYHBQ5B);NN&726M;Y?2ruLD(U@{RZQri!%Z|NdTva~H%@8<;z^ zs-6*06gQ_vVD{0*dS{;SJxbo(7RA-mQ?lTgHk^ox?b8;%QY5aACnG%Ad%+v!O5zYX zMz}y+w7nsyA?$P5hpiC%R)TnF#l^!adl7o3i=k2D+em4Ev>fYt=PpB+491EafRUDWFY&5@TG2RP`mXxNfT4jbl5QM3jh z(2xK{TM8?h8{^KpPq|6**#^4ssVg4lQ(_*qPdPU^oZIt9)~)yl>c=?w>1EN_W#^>B z%aOG#C$gcPOyTWCN$m2JO7W6%$YNxGlOvc(&YsP4ifHY|XK7gAIytG}qnOK<%cBXyI$USmgf{432<1QK3#E4^1FF%aD)Z9_2V29#lmuQ+ z_}k7fo@x=sNC-LnWM;xqUz1;d2-zVrvY$%Jv%wQ~kK z01k=%Y&G$Ar@<&!Tw7wtQKqp3Gqo>ap3 zXdd|v_$-_2qeWyQoiK5i zMI)<0s^_p`MS4zL^y_q|WH62A>;|5544!iYPoRm81TZyMLl4w46uqhNG1HO6v{3?m zGOS2b)9@7r+3e;eEHgF!bC;un#;d@k4P$=C$g2;i_~P%TiWFQAA~#Zp~?N7IUGAOPC^KBVAaUC z>7D;Jq6cU8(YE7zr&ksFxsLjA*arLBX;jCdi%nUJYeU<~`p4umAB^G=G=fIrQ&Ib9 zzm^=#UDABEo16U02cwa*&US@+%l)+e_-qY{n=6Vrgp!>7%!!O6%7-A#hq6e`gOSDj zP4V0&cSthjL(wn{%)>qujj^8QsT;19fk1mN^3YYj#LmSWkZU9WSuV!U@kTDL@CEUB z_H56SO{b{R240_6;kaPSt7xY!DBHg@b$73sjx(R#=>WqfElfZQ(N_K89_q0AcM zMQJh{a2KsVyp#N2DwLQL)TyR}9_+U|gd3>>Zy|5gjLwT^Ah~UUh5om+PX*Q0*HH-SOq_5Ms9l=&8hjIix&C zp`!LzOyIZFSs&fQzHMZ1WGH8}3HKbwO98`yR?5@mwbmV@ax~T4C!rjT?<$|isfB~S-b0c-VmkM z^+sZys_%o7+dmSGs!q_N$lb$P_$)ZT+p5R(v#%k>hIu9>s7mYM;ASx>kjGOLJTL=| zfy4E6}bK1j3)Xh11>Yx?E-Z}1wZnxA{NzQSVZgkwxEnCQ14Ua^=(9(((I8;ZS2n^US zFyX_}GX8DfsgBZWHEd%cZp_HrIK}+r&mYCFGYxq+gMX9wH{FyV&8mi_3#m$X^92(u zSKzfh#Aamg?H!DC0R>saN(nU8%x$E`outzQnCw z1E*cH*5xmD@92KOt=-_(UgK7k;22X~VI40N*RlDkYsCZWfY>TtRyEeVau=59^2Heb zZpJ!gwdc2nW!eAb8E)FT@-#O?Z_S_%))|d-)7Md@?#f++`&?I^!!m>GLvuTV>W0BQ&||<1miH-O=nM zUJjujV`9gx;y5eWlw1uw!uZ1l9FXB~6@;)UD*wf@rCb(hM2Hh=Cec*y4(UpjZ|t!Z z*P><~yW#5cOjrB>w=1qK&vJziTzwSuGSkgELN~%h3wFT4S3nUXj>;ExyOkG~zAO%X zoc5;hfz6?>#TWCyPAdykS#rZI(XcA7P?qDj;3nCaTpiB@NV6R5k&<|`9*A}96WT@k zJzQ(p)0kQOTX2d z!j%Ge_Gy~zKjYhb;7Z;;aQVoQ@k|$b{nc7Vr?2+y(rSXViFGy%I07iU43q^o^#j}j zN-)ra5{FX?$%8UbuBQc4DYjcst`A|=)Pkg`HI&Md?MXCjxPQw-pC0WDD7KSztMik= zw?d@K-XpxWQ?5`4ucF|^-f-Ym1Wd&`cx|U%Xd@7~^qL0{$X(f5djebq4=!*5BO2gU zXVFt>^T4gB9(uSH$RdXUmNw5G62>@9gHB-bmv`jw2)pAzbDl!?4y+Y$U>0aG6Tg!n z=vFPqhy!o<{v_;dln18@w^f*;M~ zn;}&h6fL^Ak;wYA?|`=iFbY)~Q7j)|z*10s<=gkfm)i5|1F8gHaE1wlbb_}$z({Y; zuNI^<$SUEX10-mPK}Wjj;rMU(l(V8*a7$O5LOwc#bL;E(61+^Mbr| zHQ*F7;DiPoRn{9grx{~hO@jg(jA#-v{y`~gL-g)Z>UnOHB z@eEiO>r)@ZVXjI|TJ!3M*k4k6=GE&0mh@-&rVXV+8kpuGSpz`nqEtHLAZlDpXhr1n zqNMqbXvAI!{F*LqHqQLyfIC=(bv+CfvcO285xU*#K`=$SRL!DMm(x6MKMdF{vwxaK z`))|?yaV>vNifKACv1j@y<|#0Qtypwd{&>y%Yz^p1^Q>%Mv_3u^l2hshS{KX zb7YVwIp5a2yD@8qSp*uE&O_Zzy%TBKWKgWW_FGwjyS~8NnW4!$uCu2plauP5QA@r{ zO2D0lq6}^|dF;-p_3%BSsNn}4mLgD(qQ(fp$F2-T8HY;+*9A$(UD5vgegywD5i9+$ zNu|18W0stASJZaI#a@$%KWey)R`{_XoZIu~`U|hk!<%>SIj>B7$oF^0o%6(EK9;%3 zG_V%}gXERFqA>$e__Be^gRT8GMvJOlD|H+XHJHnrD$1Si{cwNcqANZdsP$2cz49@O z-q9FeACS(skX_4tkRrmAx3Q}{+zJ123*Bjc6YPKFZBStulaVddWGDc~U@+**bV+hX z{WKQaD`^K)^jRgP-c6{7C@F3PZy36*c;E{T~q|Dby;s4tdtAQvK?tPat z^ygwspCDtpN`d8z6)%$)G&BquZ@%X|UchH{y_}fDJ>x-Wgt?vKJA;>%BqXSj>PBlh z_ZN1%$tkh$gn5)PFrJ{{jCJuepJ}j+eOdEG9k;?=G=fCG>A?soT6M%E5@IcgI73RN zoo)diPCtwFz<1M!h=)4rUEt-kF=)4-YK3|O5@-R)JWyNGyi%|Oj%;w@Z!$2PTn9pw z$a^UW09P7v-;#llmjGctgCJA53fC$C5*cVR7~YhEulgQBY(o5Ir!)R}K`-N|7>qr@ z<23Ug*ujE&d`B7NUUd)tZ zPWD+}`P+#!#2S5PUuG3fsi~!B*oYHNTMx7}J#-}&=^jar~->&>sEFk>p;eaEA$>D&* zB^Q{B$tTr&qkYe-`)b{7SGsIyuk>1%wfoy&W{Z<*H@hjPQ-#J(te567Yx(|nZfCUEjjRFX-`h~Qi`)_7porpAGoNoG`l$*=$?BURU9zNmy&3q4 zZ}%S=oM;u}=C0HN4%~rP$<@jy*)^3mxGlH&p1CuueOZGax~Hze4`vTn!D&L@U^VC8 z=^1+Z5NVi<^EPwAlLwMQc^8%^odyLEJvyHM_FgD?&+-c za7^`0qLT}R{9g(fC+~?8bhe{08JNsU@?ZcS(m{Di#Q~>YV0WUsp2KA|$EjRe0aU!J zP|7K~7_GsK5{h5upo1coVa(I(M2aq67Ly{cDIGB1-XxS({CwUSS6Vy5eURW28nq9l z>tt%5fgrVM!#{rj7{F?C?hio*MY|XHQ=lkI_>=+e55X!y7wPM5pTJ!g&dynX=}2kH zo={gfThwWs_g(i?PKf(jp!ji>hx912Ws>c>`1m*^kJi>7qPs9J?A^9$?XvT zjdemZ9;EEg{etk`dG|{T5Q-umC>vrH`TsIl3wr=BP=?%#3KsA)comhPr7FMUTzj*6 zxGjFLBB2$*=#)Z>VnFq{99BVN65Ia@R6_SF%mcpKt)is|*edo?;Ql4JN=1JjY;eC0 z)?FQw#N%&*bupJ6f!-{0*$znZc7AB-Qe*=o#yYH)Zaq}C02b}@fYEmtvp-OZ=RYOi zeSobl?@9jfrD)$I_(C+AD0{|8#eqdwnj_cfJ_rdCnX%lTYKdN}!6MVAe^Mwvk^C%OLbuUO;|?ND!e1Y7KMbVm{YW8GN4f%bpcj(3jhPDZsZ50s{(BYTyai^M zzKyS^icHe@V6^uMpA_5na@JRs*2C9K)02EolR9io&{mIVHHF*zD+K0j&e5lQB5C{* zt8es@Ci`qjk+gm_n@CNLfErA~d{+I`mujEYcnb%#qB8v!Xzr0Y!v(FHQl1dEK2He! zVb!Qi9@_KM{hJ!dtsXi00_eej$jQ9adwljze*dMYWoX|)l4SIBS$%&x7&oAiXDdPR zW_c1t<%K-TbY4qSD~<6D;!YggoWtW)$z_@5lj|h0ABRrVEv*p@I%*b>XWycO9-Z{_ z)u2Z!r2~emniaXPM`PwzKw+P}!Nap~5>=CAk|0=1)F;_opYaKBc}uEfh)c)~%t;5i zXP!xA_9w?#N_+0{XHub^(blFcLA3S7XOeTiLNKF_3#1F2!BN_8mFl^TmLce2a3Y=fZZW4j@LSnJAm`ZMU zQQPd?Mj`x8Lm!PgNTLC8p^nLgIU9sE?3lWNq8MFcZ@t%b1C+g7o6QDDJC({+7q5;`depRO}3ilM? zCBWuXh9uR8qLIuDWU^}SYB-k{(~s;Tw1h-&uN~%IMB8O;P2Y}xQ->b(>bNlqVT%ir z0S`uv$?UI3P4DUph_~N>Y-y~i+wA+P`Gh?X((e0?b|qim{(8TW3+lAu z|J^N1A{*IsmmgBC_e+dQ-2n%sR~V&fo3oo3;j7H=bfvMJj?%hJ$@W(!Yov2}3|pdQ zsb)wlaHpAh;ZE(vJNXv=s>KFEGAL`0^w!O34AjrvVEJnhyZ zmb)Cv0(O=zE^3}NK+DSP^M_`gbIX&<9*u?`kG|6uF2?ng0`@Fcg{ol-+}Z!P_9ef4 zG#cJs-yUnr3wc1Op0&%~yOx<cNsU5U{Ye3>DAeS{rS@CLC*H4zG!lZx`*0{mx+-b+#Ot!+(eiGEi9{uj)Yx zC9i!W+Rsp10iFdQV%@64y@XYRqbQE|PTA9Q!=-rXL>u{+IO}_kiG<*PgV`!7%c%nU6 zL&XC~fh>D3VgJKEiK=k-1KC$&ynjvE#QPEbEkj>rUsvSH;!pW& zWvDM~i@j2U=utAj3cg}n8$YcRq3l$r&!~PCt>1^2ZL-if(Dl#iP^Y_9P~%m&NM}d6 z_}(mmIKr4bK9ka)3)l(yPgw#Byq@<%~sR{UcX?cl5;K0CR) z@-1FxXVBS_5wqf-B)2^s#REUNkwk4kL_KEL_DkQ2;=R*W*7r5}>(k(PkhFX=n!E1{ zRMfK}o6?L~>5AmyZ${JheUSQgllRy+qp`y`Sp%|frC(vhI+Ev~j)o+qXQILFA{lQU zg>~xe&U~eJL)mDOy)$TFP-5FcWBh_JVH<~0Jsk}ns5bWQ*O=Y*Yt6T!vE?fn2Q9cP zzW_n7g}t5mCTdcpFRId)(n{62%D!0#1gt$*x^J!07pZh~TIoy4m%bH^9QceX8d6_T zuPsBREe7l^Q!T0^me>M$E+DDZZl71 ztm$4l^iu)@)3O{-R;|9oC)8y5HJjYtp&d3*xEh6BOq+r)CC7g|8h3i?R{cp}epNLN zu~_F;tpEq@D3gNb3mG6NRPI{Yt)wp26NH2=_z3TW68(| z%JeqBq1>gxXgiUhNBaHZykK3Ks;Fa_zPGlYK7M5LaQ9*oem5#t=|nz-wJWZh7hJ17y#U4# z<|;>PHe9V41=ppTfYk;%~?np|I!Yy*On`ypKLh9D^@>3Obj#sc~1rf;UFNLvL+j^3dF%MYhfI=;O*7qrtd|QS~`TGvs?!Q4vtPh_~*N0 z-0TSdiIsOCm z)m91>=7r0}Su5*pm!>8pgUVlR13ZpQHgEY`=3Objy%GYH+!3rYvbl>_g9pmf zlfhe~8H1;L0@6ewAe%-XS8a{PjqLye9MD>nP|zHxQO~P(D5v&ecCa5Wbgw0MZ;i^0 zw!fU2wB-9+(WY7DhuxsyLFwjksNbf^Y^S-h+5})G)3wQ6o5*E(aB3*FqF*{f^^)QA zC*65k*~zV~VIqbIw`K*~9!y&1b$Rqt$Mi?eC1*V!4WD*a6Z3S_)~UA*tjtVDP=!`w7S*`4I`B9-GhGAKWc3<=Z6Hvdo_9Q4+*nB1%wb7a(#83`hp=@HN1IU1Z$&`&mLoMC zXbn5!$IdjB;{#uuzV0WXbd-+NdH)&H?DhRy_$sN=x6Yt-{e9hgihVQc9|pgf`eV(W z*`6G;U7(&0o43Sfd0StPYG2O-JGn!e_856b($3oLBkzdMu^YNEdGW{5wD8(zl0iR- z_8I(c0m?dK)s+g#jGshf{}BxI0)%Z&7MLH(qeua8X|go^UMWoO{0SkAdh-`@>p~h0 zEXZqI8v!40<&#%FQ6GecATQ(VxtgN3Ow71i>fJ1}rha*|Lpc0f;Ig0~4b-iaY{s({^cl323zkq(8jq&ujg`f( zYi%_jdR;2(Z|M(RgbDoCf6(w39`t(hVWPvZ7^z;&(U32yx9JiLEF*<6>Kmg+@tdj} z_@Ir`?;x15fE<1Km14QTlp)fGB`wSsiY2n-1zUec_(mkldndeJs!I7aaT{{90heih z=E>M&%aQ`7iMja?>5_lc6G)Dp6#pl6#D9_{^Irfvej}*P3*tY^4vhbTRUQ9#P}wW~ zt1PuQgUbH#-_-fP%RE|7D3JIH*%LC**cx{wVUXji!pgMx>W~wHKM-=X?}pHude?*~ zt~x=gaueVDpl+_^=0jnne|#NQXncK0Gd`@J>hIN}8*~f%*D?XySuH7(_BNQu?sh=X z5dTg^ck1W&fmqcI=KFpFzaqtN2<>nh+V6LG+7P6wk)QX333od;o);h zpbZ>WB98HT5U=v%t{qljk!;}kbt(*F`-H}pxj~O)T)nBx+TZ85MJ@G6-TX2`$YCch zM?*&okKC$xIltcmY^xC5RqV&GDmnAzC_e7>U?sN1Z-b*omgkQwr?ET;1)#+vs~kxt z=z>arbIg)hxGY|!^(94HU!t7{hQPwk68^BP@|RzZIt$FOy5A;)UWtab?b4y%R8!v} zX2IgwB@9AUSf{RyES9$}l z^wYXX4=5l;B!@FdjC|@9idR=gpjgb8V|YGDsl)4UxoX~lz;!+vf?Q)aTs3c|J$kp< zhU}57zg?MTji@M`H?=gl)lwVq)693PXXHk>{&Kfb*XYu<$=81xwFL8%7k(NYb~dm* z9QTQN?f}i!#y+REj7Yul)BLqmVI7D|)9AVn0QQfk0g}oO!o5%Y$7N70(I2%gvGS6v z;IXAHZa4lZU3s$QxhMS+l%3yuQj=bxt=Gw_v=7XDC@Y*LQ^8x_K7C^{=V#c{bp?0( zi9OZj2;yR^DLc|@_MBefO&wBIdSCJ^AHs0erNJ(HOZn0xMRkEKVv}iSXLs@R>{7Y)Jn57t!d$?+$}dN6}2q;;|EJ1NTE3 z%a7Yjk~MHhM|dFQbJ6f0Teg;%j(4 z5uO`<8O^C@X3zaHDhD6h^oL&(7P#ll#lMa|M!<}p{yLf-T$k+qo9GTAyMF06(J8xD z*Rlh*a+n;tBl>BOOUkcCZLM+(R`@I7=a6GE@A+(Aq+0?ojTTn$f>)z<-ni{mK3_;4 zeKm5&XYI~4ef9oezraE_<}I8fhaD5TvBAPQ4yon|?HF9%FAeE9g6m-ZHIP>1Ukmp` zxrSVe0`K-hGWa6|%U|}NK_j8KjQ7K}&EU}G!F=UfAD%GO;w+e5XwncCfzIH|$tk2Y zOE-Z?^?zy6dfV1_+7yQ^8b1kE#T3q0sJ|mqyZi zyUoi!+DFk0=S`qHeOp!6C^3|}U``_?oWG!+Qj0RQQ0QS4TKEV-lzQG2tEf(FZ zFTl3Q8Aa#G-UE=f0wfKCHOtDWJRpL(mI6-s6+oq^qS3+Xw5L-V9k&L(2FQ>$>j?0- zOUii#1c*F@%lultzd5PA9t~^HMz1%zf9Op{Pp+#B-M56v^S_UVoFx?3i2WbC zpd(KhD*_Gm8ZvDZ$Ztvh@;V+vjW&Lo{5sm7V;ei``2)8LRqoPEV6rPYZh?k8Zs{tV zky5iKGD_oID!b8>dD?G~T>Ta{sPAvx|30{CJWU20jwyQPF%$KwH{5@?1Gp1{K81U& zLmZ@}cQWW_editLTi@J>=l?r%iGDz*unV!8{`e|Xv$XZJUWW$giNafxN zNB$vB~Cx%Hw7YMjk{fGZ_7!zMe9;GR#f^W;gzO^6*YV81%@Wx8x-C z1+M*fua?nfR^C-S)|Rd{t-+&Gd;Y$FeRn?JqLP#wwaZ>|e4{KqFt4Ah?g?+xn5G#> zJjU-%I(gE43-m3`)Vazj;n>;AMmjF68puyqqqYPJwW2`^pAF)EQow?^KgK`CX}RfM zh08MowLgnS;sF&GH)CH8#Jn7Y7GJ_R9ZW3Ly(;75y)iF`RLb!_#6#T|n{+5W730~- zd&4V}V;!LOTkc2Vo;q+8FSqQ%$8&ayHD5OumoBuW!OjU+KeNB&f(MI}2yJ>pa>3;d zja9{gf^jm}GM+taArD`Fn( zvv(1JL{ZU4dT3f7+(iP$0g1E_OGM(#Q1Yl4ssgi9#R-OFY|*ZL$jQW`mlle}1glj@ zMU#%z9`QIv$^`*v`DYSCQ{Q8d7#=2k3qj~nu{}SxEFe+Bx2f!up_fVBy&(C;-RPD* z#F{alvr{vF~6^JIfmM$=xn? z`O93n>fB|z#d@Z{P9X=vieqB{2fq_3y~BxI2dqZO_0>fk*X<*KNLGx7kX3;L8tGB-j3SQhX(4!Zpze| zQH#x)nEd5WY!tRvc8|P!Xj)lw+q{NMA+?w}IJx$Ld6AHPdtc9|4`iPkob+qnd|nU+A(+JHpc+ns4=Vk1EB5Uy`e5LhD z8WCXM_#ut5qe)qzOxJujcA;v8FNOXP>ic`3^OfD$fYvMq$#WN7k(7O#6~_DTxjpy& zD5X7`YwhubL5!DrN>+m~_E9OUJu0)i_Mj!CvcNZ~*HdHmq#`xulG*o8(DX7H)rb>r zt8DxUD?9iS(U^S~dqQbjIb8lF}o{*|u;81FuONQ#1LXsdUx+wjc%?ZQ*apL}n03(JWMGaWext z4|VjR5GX1c_9S%+Z(;`fva0hSsOz7`PrXX>xXnT=WMf+%o#t^|eR*ts@1?oy$k+Iz z1)xat$GXw=B|#q#Cv~*7^amz?Qqw^E0zM6E!$Ugmfq6S}mt#t4!Ov+ff3ML0i00Em zQ)Jlzo}<$v%bXFrmurj1inTPxY`TvL7Cn}gtV9yAOU{iICunnH1rx`GyvgJ-WNP$c z@)<2in3B3Ql7O!2Np&n|3}tsx`@_mZhIA%>$7;D~53t&^{xUt5C4)cXv(5_z4X>dx zEngAKuVJ;&mN_pmWZ5kfm~tCUaQHY<;XH*s-h)Mk-KiyDiJ*N8xL^B>#ub!r;U`TS z&jT&VFtVLT26tkwHyF?k(z#5^(o>A>jnp~gCD@cHR!?mADH%(5ld=R}S5_aSwh{C^ z$Z6fQ&|8Epk!4Iw7@o37ngW_npp?y9TDVZ5Gcg2r!RH<@r)WIUWdl;f-buCi(KX?{ zLlo=3O#d?oWuIqzX%CcC3h+#%hl*#JDPY3qE#mxy7S#?B-nDW51D^gAwL@?h)E*0h zf!YiNa{$fnbgZ7?Z}hIn{!WkVOc1=&KxOB;wy}ChJLTHYhcK9{Dee_gTN2=D) zHxTwi9X(jgdejt)wHDRmvyPtiSg%88vscb1I2fiXT=g`(53EW`@iCr(Z5_|7R2$=2^Crg!%yaQ< zCa({~`?yJn+&2kNxEdz_WAYbU$G;m;( z8?~Uh>;}Sgg9TMBlXHWJ{o9%Qug_Y{iNFo!u|44XA-)%Z{Q}%U2b|l^sR3>9Y+2se6^aQ4Rc%kZDpFCgF1jb(bY= zYHoaXF_g4k&>XOMZ4iW*wnLYf1NrKCRy05SbKh~Ph3pT>uTiBJKw3V?wpsj7LVcA3OZ{BrQsHX(^i;Cf=g?2GBz3es ze;OShN&m#TS$pOEDL7_F0UWmu;O1PsPOb&K3To9T*G#M8Q8aJBqUO<1Vldz^=`3o= z)b4USWZIRAw5prI)3o#{Ei(&YOX|#8s&?crHg%e#cG}9LA8-d;&OpsZqgW>H(c%s~ zg1b&?r=K*p)7fz`w4WCoP8TXDflCUc6ps-_=+Cu)|JZ_1!dPK+r<>dzx4O~k8ckG? zx+EM)NsIa7(~e77L2KtztBd{HPP*27hOH)y=QC<*e0MF2bBwX!R^)lC5>YL*&{?RPO9Z`hNmmey_(-&<;opjW57mFC)9 zTQ;W*62C1g&0-k;BQs6wj>jxDnvy=^O^r;!5p29t^1rpxs%_p(gQM~#*CsQ~Z=5md zE%K9@CJd-qX+gb}=GFcjOl3EATCf{CEvVGnX;t0~D}T&O&wVIlm!uxIJg;MCe~U)t zScbMkS5B-dkV{xXgE-9iGc~hL!_XFP^~)zrzM26i^|eh5GOZM#Ieo^fwdrW0e@Y!Q zuzEWt8)i#4uqxe~o(67}H|tI5y^UX+`~gy?xk&}5Z0TVVSm0<2`YpxhqvNowqnbM8 z=ul?BJec=dUS_}?`oO#`7%Dm{#ww^dyV8OjpS(j zUyGYp8ORn(-&_EpjYh*k)(sfN2^fe5Mt3Ab6*FE7o#eE^qc&o`Edo7O7uqpmK)7*C|>) zObTwfr8_=c*^h?t5pIbbR_VYWre3sEZe_D&K^ZpY9KZsJfh;l>Y6Pa#D)uAhOFexl z8S@CAQ9X5ei|P$=Cq!!~AuAh1cj7%}09xPoS1Xa6Eb6yhjipc--%LA+=oY+FW1LmB zYdq;#;PvS=sJxV9%#vQoX15uDvt$ZwP7Ce8Z(*~Nm4{ftNyW=tkK;p0@`Us_F;uFm zu8wxCHK2IzLhmzU$Pc&7Y`3&mDe7NZlX<=reH>pCkVdj^V97mH=pkPjm<+X75+Unq z55vWZO~ofjQG0acDnAH0+IP!Hk`wYQ~n)~hU|ihCj}8wMjpNZXd?R94%(uB zi58IWbrc{v?LmBzCk$mb_>M;gd=JQ{3ox9F&|J-t4YDIlYch#uDwbm=rH_9q}<3$4ebNbe61R$N}HU3F_xX9CskQ zPeRO6j}wtxX3Nlq&tFO6flhDSU)i`cFTCyNmb? zhz38p$enC=Io>pFpNl4^dEM1-8jJ|5Vu@=?Cn6Q*w>U++e zB@au^o$dAZceqwlvZU*80S~15Gr4;XokU4tV}yHWw|iH6?#Wjx-lXUL5xWQf-8rrs ziPx^cS0J{0IWu#ExIMSqBT_EM!+9z5u!r+gUc-Y|2N}G`z00@Z-QF#%VGU3j&20#= z_>v_~EDznPTC(~7VNObahXjXOf0pE2ORY@yDsCa+yP$Z+c_J~fQvFE~el?H3JF*wg zbt{jwQY$6JT9z~)2Ys!+1YBf>!;M7|Xm#&etkea~@;@lBG9_98LV^9JgH7%}n2!tc z#J2)N%5i8JUicY)WelKy5LGXtAuCN~F1QvsyiZQYT3(UbSc41Mv*7}`l0Ab6*nj@X zRPDa73WOiBJBdy^+Wc$kquk5tvbc|0Pl?D~U?ips-D%Ibq0M#){4}m6QZ&k*7s~&k z+~ZsTO@zRb&LYr7*cZ7|y5oynyY0R@o6jmogXA+;EMk}UGSf!HfXo=z9Z{&*i{5n`FnBIoP-N!nT^E$ykCwChOITukcmM?~VU zTWSue@#z?XpFt||E~hVX)n#JYB>H+;I#($4!-%jNAT3;a5 zrd0?owuTcTGQB`@+!{ERw4MNq=80ore$FmuwagLXJUt^kl1f zLY*F=G*$aySWnhBE2uu-0LQ8&f~x`mfXjx^OEd#oH5+O^qk@9)=nNy$H1!qUomD7g zeJizEimB>y6SB7~g-`axSv2jns-_W}uT~72w4@%5Nhx}tr7_a44H6RteBYB=1C=MxO-S>&@0BM|GbsK=9%`9l^U7p! zywKJ|wFXub1FHDOEME^jQ*U}*qhmhm6awX*5mmMZ>gMci9<12JuQoRnlrkm4b`!AAJ!-OGHl>< zj9Vth$1)#Wsxa$<(_b5r+iSGJfar04BuuK@X zly|Dj4^2i<{FS#X!Wk;R`?j= z0By8YY|I_$Z(&%-5=(`RNuH>H$i@`dR->t$&A+!A#hH5B3PE@~cy2P_z{K`ETF>OLQZh34yOuTpDA}PRJ2siZQT2P`8`Vy+cB`dZ%J6-6c`I z(IoPxvX?jW@}~oW;N0}c!#{aoXLJ0Spt3mrtR(y066I?vcje)BnLNy@QSt^F9I?gSvf-WBkX#J&bp@K!_ z2o^N}pFBn`Ir|A16r856Zqk7~XYsP!cUdrZwX9W0w$%uEdYH-ZThY>mS?5Ke2+%N z&nZY&3x_AW=hzeZ+RGvhyGr^XL2sb{UkDooDxNtcG(_)@wH$JtYn-Y}2mCrS4NE zA!9|z(CVNT&T5HUIn)MgZmIVmrA5lP3;D~fEEhBh-GZ^l4PGMbLT+$w6LZcy&(tn+ zv6X|AB-`cD(rhN5jSh$9(_Fp<%I22pcqA|BmQtM>#r)z&eAHMCH5KVCb~|6(t!xXB zzcBu1qlY{&1sFj3+mCI|RmR%_hAi&AI!nL57*uuUcGys0s`3jNIt{nmVdV$)jk|U2A-{FPdPuUY{<%n?x$75}ppHAjGMhtb~_RV6E2_Lx6amchd(B z4_cd^f2GWmA)3h74`A`moVqDxOoi6sW@23V`R7JhA`SOm!)#~g>&B#&WFG~MIMe73s~sB$>;Iv zWM!HaPf@{z8N~tY;0fHRA_loOaA`Er)ydywX+2d`u~z6WWJ@4>%hJwUe&9MjNg7pzd)g`cUh zVxvDd9#C%JIMJp79C90QJVW2C{sRUm>!-?s+rb zH)=PRwB4T9_+PNIrw>}en)RU}ZBq3MOi`%;Fu%&}0iD|CKOVlI;`;tC6 zpu{mTZ#?C{$gZ#@MN1%+GCABLr)KPf@#RubSi&)T~x-AB9wzHo!dk zyjHh+6S>z$mrV^TkHsY`^RUJJ(z=DmyVD*n!RaFcZb!7VKj5mrGSTvDi58Aqxfj>Z zZxAh%HJ6$IPEEY|D#B%a>J0~v6`|5xQsxjJ?;YY0D-KB+b(Za?BLcU>mt>Yu+=7ZU zGBVBZJyuI3F+-u%QBIw1QSq8zMXa~Sr_y2rk$ESqVz7aJ=hRESD@IQY90k^8LDU;5 zTD$Qz)|m1`b}9^q1nrH99Xo{9?Lgz2cy&yZwe$!vFqM$ZZFSoY>I zNhJy(k#I?i;4)-N-?G9WDdUSglwd`=J#P}0(M?C5Zhwo6(aPYaSBC0uRR%X%29I{@ zCzDOvsv!gle;q=A(2~JRnprCD*lV*3MtmED$h+?dA=k`y6e*)@b9J41+Pdk~^Z8>lJ62*_0kVKmy}si4JCybd8$kJ(M4tJ}hD%)C>JXBZ7p{itoD#1zK zsEyK5svr#HSgKt7gE|ZLhi1Y4NSYC!R3p0;>X?wmvSDA44ZF>3*cWBPzGOD+%Vxt8 z^LA@cjR|FosZDTOOzoeU4ZB_D>(6Cx|3cR6zY1o*lp#wjTSpvQK=&INvO8qRzA8iZ zwV>8Qh75WWadLSGD4KviJ__TRLK)V&vPi<(;7g8X@rk}9RH2ng> zFSTi7o7K~dkS0>#{D%Mc$a9}CB@wX^zR!E%c%JQ5u@nOG3>U>}Iq-~tH^ zmd4&zFfd~&1k`>HeHZOUmt*}J-D4RF_;l!wO{aySwXFfX=)t_LyXdv_l8tYB*s(4_ zL#@WF#LI1!9epw%Pqwp-z#6-5b=)N^L9bfacjv1y2&Yx;X8ZRZgAr&xt#rDkKeq&B z9O(UMSx78`yzhD*+?y!EvVBL2N5K4c&Q0`2VmLQhHn2FXn$3qRVwj%~2fBkQoyb0H zDTWJh!ljuFw^ft2`DV1GA0Z6F*lV5 z-(eepvpGr_b#00v19LVZOxzOGYE~5Ph4iIq@)|18S!eDSzp0d0D)O07OZ|9>ga*w& zLvQW5AMliHEft4UeNV92D&xge)h(4Ni>GD}BjkJa55!=!0oR3A1eGpYjFZ29H>YG? z4J&N!Gth7Xb;H36QI>;J;A8&I<-ikshEWnfkNT!*%p-3k(68YFEVGb|0BG+h38~P%4gZRM(l; zT$yYx6&<@JGn9DSfW#moq_|OkA1n||g~utOGlG3lzyk{)L20&Hl5HRiKdh~H+r1pg zTcGBNa4|+fj0={0Ts9ot@hZ)z9uIFnL9?wVY8v(=SoO)Ul=u`l^{FuG)7S@dIvn~8 zSoN9dt8Lx!S=?5&rR{9w!OAop;Jt&mj^|X0@jGGf@2Ygh-Ia0ixs@^Td7K$={=6W5 zH%#b)Nv%1SG*{!9i=-P~{(kFM9FQst(@Efu$!gt*5Nor@@Gt3=o&1YG{c$`IQ+>Sie4V2GxZ=V2aj?H$9)!5ofw-%hOeFRh%KfILGx@8(l9VT$B<&u@nYyz`w)>`U= zc~I84bU{Mc%m!oxTuOY`nqKu!G|qZvSv1W0%>!OkT!a~2unr~DK`ODH4!b18TKhIgafxf;b!02585+b=r3X>+%FyEeRn#k@SCK9qOS)c!<4yR+ zKY3XROhVz*gB>YM_}a>8Zq2!1VZq~@+L8*F93|CVvV2KkSH#q3CB`MEdziAv_tFJ` zg&yMk^t|L^-LDZ4U;`Rbq#CMTO-7(T-2S&G6zaDROWTd|5T-&x1ld>Wn~YEkjbL>J zzw2Z~6)#RWolf{b9-FT|*zX|)YN$NKnDF6z)H-#1-Ut79-78PSV_6kAZ~e#q?Unp` z-47$U6YgCD#qK-wkRtf>4svDvep^8scB2qIC;;_@_v)n(y*+)%L&i3(33PoygTt;4 zG6$vV-#-RQt_~=TZwVBl-c{djXun;CFb%%OXqK*GT%@`|J6zG*E80%$|4q$$$w}|IOW}AHM|(9=*+c37{~?)ETtGJ#h#W>sHFul zqwOg!d3t1VMzs$WL8RyQ1npjD%5jJjOhj;w6uN*V#+3r&jTStoqzZp9dF_RDx# zs9@jlI=`U2){Q<=s;3wa zety1WutO;lBVs-Z5oK(N3zJlEbyL&)zTi+xRgDkfH8MWLa!QErSR?OwIpHYB7+8yK zug+L)Bqlhg#n?@|LIw>~S4>c}`c9=~>cD@0^1YVgi27)-14b8@2bJWM(Z!1igZhKf z#Tmi-lKx|gBZ*r&c1*EC;ycF_*Y2gGlm^Fp$?Y6gHijISl{t9waO$QD_b+w@R1?f74oyxT z*{>h5RlnIWJ`Lgdsba~raP>-J@?=}$%b*o3-?^z!nWe6)A257{w&b0+wd~ovGumZ zq+A}9**`a^7x|1%{~oJ#A0Rg}wBzVw)cAx`0n9Rb0t zGiN^8M>xDK`F(q_YuAQ#jxSCaY||by*-?ufiZaL%W#^7Bwod%!eHGbeA^b-$d+a`2 ze@(Dsd;I6@k*o*qOCB9xJSR9cnKC6Dy6M0P#Upyc?QXhpV)1qj`@~7b(ffoD!vGNi zN9}RM2xQWarky&e*fo3#?Y73E45=6NI{?g0A5Z>iQgKq&oP6)*WC)u!#}Jn0G;|gZ zNPQrHTZI(#p|bqFC4>V!$6UYC@HmpFOpt`41|HTNx?{o)swhX5 zytq@CiG6hvC4~T4eQIxXMTOy^(ba|6(-kHODve7IyZf~tGHN5_WdozQ3VdP=gfxz)8GuZCX=SY-X3_Y7kj(sF~eoU zmOCG-V{apqqps>#s7IMouj)4%zE-`e-~7_p)SSxzl`NcIoRsmI3=>m6V|Bx4Zk}#z z3!c}DZFS5rwsqu;;*uV=HRaU&-mMver`#~BHsyv^E!=S13}ashkLtI(YHyucJi4da zf1e5A-(5$qcifkB%_?34xE`KWEcc0Njq_!8t^``yKX6uopOWB!;sHH%&O4wuf8Z}X zhqgAoa!+!_!NnoTy$2MJqvF3GP#oXBE5{4x;SwX}@c+l&d&gH%rT^o1W^(V$xh*%O z7m}G95)w)hLhqT-r7J=JMX_Q62+CSk<;LDnaaE3D14Tdu#kIr&60t0c4aI_r0tVAz{4%U0M(~Ctwh;Ik$Ppat1Lv^49mA_u6 zUs?R>FCs~V3(~*+Qb#tK=>Fzk>iD^~J^)`lV(XR381S*JcS4@_Jg&gfr0vv+l(3@h5_?|tQw6jrrmriq)?{Y`ktSZ zii);Vg27Wbqy}pp(=DnI#tN_bS@|=L4p{fI(pg!^-~3sr!jtzGrJpjaW#}(Tw$kM` z5!(`iCTqa$VTRfeN0N5Q7yqg(38nT1L$DYc1fzpbh~qGeV&yh|`~l?{r3c@Hqb-Kv zzyj#f5EPKZnvDRLPLL0Q#fn0C&s#lBQKb{<+Esm2Y!b4YSJH7jv|@@&7G4Z$w0(Rv zCQV)Y1An1jugrM-2Q20iH+$5ZrXq=Ym`^@W&xWG)+8bIHUy;Mod1Q;1ExVZw;myNz z99YG#8m1qQ8QM1t(oJbOYPil7;MTqo`fCcNffN}(a3BK7>A@iOZ`Cb+V3cksOSmx_ z$OKf@S;@m|{G%1#yh79YLu2%MyzOzcZt|=nz`30Jz(hUN6*EOA^w~E9v6RT4iSyrV zK;c*IR-C6H-a`lp@xvcDLeB?p-+F{zipyt5K%hBQ4IZoa#Qnmt`Vw4T%QG_hvJeaN zl5wDTr_A5R0i`$d&&KJUm0dh*JPnIqc(fknuZ-7A0Ff`oL#cy~IYBQhB%Jq>gv9B( z_9r;GMD#~?qi%v;%22>2=XDnUYMx%ArGZ&oJ3&9jZ46^8L@S*q>NC;i#S`PdESscP zsJ|$@%Ot%BZH}6xA0@j{z#pBY_b6=;vTsCao)E54jZ$x&X(A3{CQdb&PRA6)_`<1r z6d!e)tRLZid;Mhah+TZ^WW5RP^*RzNsKOT?sh@?50DSgQdWF)P4?Rjh;J!L;ieA>& zg*Xg!XPlS`7vcay8UbOb9KI|ffv|CkUYLa`l8OP82GYGTgPZxjDf$T6#6(;G;IX83 z94!?0PmczO*KscmU>&cRiivFC4lCD=;W{rSybEHu2V}K$%TknFcJ{ z#fMMRx1iMNrjf@>8uX6*`;+t#|MEmV6Ne5Qix;Tyyas(R$~@74DfaQn)AeHfwqUwG z2j9OlU7x9LR`@GN_;UET8F~i5HEV|c69SK;#q=xGyw>sb9nwEE0RdL|z~3nbLQADD%4PUo-962*U*h2ood z#c_HOb_D{_SHLYL;J?ZXuQw*Tfz|+yOyE?*uG_-*F? z*?Q;VO%NnF;4KXfWT<6GJCOzrS;pNfkS-Hv>yz-s3KUf~w``qFLS_^1bD}^AK_RUt z>Q~{_*pu`>$$sC7%j}b($D-#aW4zP(kW)m@foWE#dvG?HSnzyN_0}nE3-HTN(L*_6 zU|V7K!EFLRfof@R{CfF)rwC#-(+rFMe2QQ|9ZuEzqrq{f>b;KnU06s-XC+erK{|Lx zs(WD+2EBCI9Nmk?d~*aLo;XMEjX~ZrM;|5$?s0TjsI%Cf zPqC6-IIIbl0;MdG-uym8@lLmwrlwkBhcFJ$Uo6}Qk1ob(i=a=eWMu+VfoG)urNf-8@Hh&(TY;mX z!@{ccKtT`0;uQo$1tjJp3-}o^J=RvUJrL6uLpCpN2EXz0mCgDr<>qAf`^uZZmL_3yofm6as081^>5JX zx=Vz%`SK;0_Qmk=i2u+m?^Yi4R`%Zl|NAAYHRBoqsNsStMiF4gO@NPebUK}lyz z1)cqw*Ig#0#4(o%Y`OX}eF&8Uyr_VRL)j(S^Y<^)^D>ivfkGvY88jix76?*UR*DpemCAA8xLeONJ;ZfqR zUZKxShSe9>3bdSZr9M7<`Acof7xB%@b*zacG*JG*mEwb6uhgr;+g`v2bh?&oV8B&+ z_vE@4UWGoL$8Whx@2Wh*pT9~!EQ7q*Xk^J6b^*W zUUF!N`uLtD2Y;03_81Nc^qBN~I^5wupYkr(0NQPUhuJAA1Q`d_y7qzKK=Y$(^g->; z)DhR}>B;?Guvtvh#nls60;TmRmd2KquD#jqcaw zdUi4#I^GJ_sqm?{3i-J5R@fi2`CGT5nbaD1-ffVYUS4;bUebZnP-xC1^-|?Mmgq&v z^$Pgz=1(27pAbO zFHsEROTR-e$@reSogVSom%oCW-Vq-kdI$Wy|De|i?uG89Ow9dvfO{z|uiv4MRFuY+ zf)yk*8e3v3^}i_X5icKjcRQ$dUd!UUb*`U~glp~If}zX(NB%Y#m_lo|dFWqT&c0ut z;8nN1AW>)!e{X|c7QQbP`@#?D)dx-2?3U9X($m$1i$+=N%j0)E457E5fAz4Qn-8b1 ziNFIWBXkKni|ROvkz0?zWZBP$KBDhX_P1m{s_P1T(<2(K+2-*$Dcv027)>A1()}@b z`uyo)VSBcD^w^eIi#}XY_O?9txc;=_U$PJELWR3!9$)gLzPuO3%_E&V^bPo1>DZ>Q za9^)^LHK@r5E!ImtaKl7f6EJe##7KFJ$&m^dKnPxi>LIBX;?DSc*!PMSubwXbLlZn zK5Cml#}DwLP5K~Qrf-6-^Z?(rN&hQI?z*R8hTP{6;_3W_r}fhCMuK9Fi}?Jzr}gR* z)jT}9S84NO|E5m?-}~#|U_b!4@YIrH4nC6s zP(!g3{#!bAwzyKdf?GKBRUV_t-jaUx&+qP{o|3*PM|eQ@|K(rysWOW`cgZq9y5@0a}j z6EA@QT*}{hNgvzO5r0lmti8B#Z`kElsnx;z29}eS5*fhXeOa`B#>;wbpSxZ|Q{+n! zP2mcS<@Z1dn zzj;F+kJ%jdCY5Qq@l8xO`uFHtu&|P*|82~PhmXUd&&d!!2WL5>;^jNhvWM^936$~j zpLgnAl3c8B@};}=oZMB*0Z?*XN>3teU-&-v2l<72bmUrgrc1-DzPDTNR-jUZMchT| zvG;O8Y4p3bM>ioip)w(2QJkO&`_|zP7v3V+g;+fN;bwly9w`4Fe%l_sq5-RCaKfh6 zy7Xq$nhh@%EI2|7*`le5JEyM{0AV5;F7?Z#{ub@ki<4n8d@tr1E4_R5&iz8tbh3l&g8khVU2&8blkppfE>5*5gc7CjV&zf(h{%1anT!y`*Ybq{W@bd;429$pZ%sJ%rTeUh zM$39pgIp+Sl*~0G!V=&*C#GQmhLm~Pf)PhKmaU+v^SO#qq8a%9s|d^FD;1+?6r*(x z;hzb}JNRe(@(%1LDDQC01{H$KNTE;w^rhOqGXCV@4uN^v z-9u-$sw0sjNwcwWB@aGrvRVlSZV0IuVx%n?bOJ*r@5hXAgw`@sKmi|T=}6?IrZF>9 zZ-3}w^%P`9@P+ma_la0{bt;3Pj|i}i^%+(->XV4`i-ssSD&lMaK*I`~p*0p(PjKcN zc8K7bj$Nh6W8|39YD_O!UPU>%zQl>xVl9XfTS2!g0JS~>YSR10=cgI@hlZLDu`+-f z{~*mMRWv@k5Dxoax*8!gLOm_T&%}ge?7cs^v&{6bfqSkXrGtg_?j&H>biG<0At{Xv9p*No zjSUSGjih-x7MCE5Pa-guzvHugFvcHts$;|C98+LCp>-0P(?SqA8eN&GngN8RW0}YV z{MXXe-&b3KJ7NY08Iph4n<8X`|)pmM$$uJ3n+nPGM?GjUAoCH3ZI zmqat_jms`sV=1tkBlH5@3D@TdG|v#%EHex|$INC2OHyXGFV5MMGz{VmnwmIwkD&8k z&gii4e?6lH-^L8fL0_KkH+m=C>-==TL5rzidPRJL--t|?GXb#4c@S^_BH3#(LxR1? zX}}vf2`=<#?!;sWrn-Wds+<%^e^5dw1zv-Dy6{RH8|o=2!RzT+Vnziiq;S3e1szyD zCCf_&9=JVl$RUdqm=vHdf}}B|HZ5~I#L6Xa&1%bAu}YIaE;}w@oF*Yj2+>2PK^Ne# zXt9GypA)yFb>k!^OK*UlX=b(*JYo*K$MiG_-++7-K*E68flxI<$O%j*j0D4t;2rAk zum-U#&A%Sd7uv>I2(IZM@YIJ>Ir{-`VMfu&3^QX5j@%@)jmD>e*7SmsAz>>`a9I2Y zTF?wtB+X9+zdCFTl1P%t(+3y^|8jug%S9QgT|vbZ1+9yD?wnH3;Hsp0s+@VQ?9#Q{ z|H(X0t4f(?0d34P7=(a2g#G`Ho6*`}{y4EZqmlA}K@esnb1)$U3B?_Cgno1J3tWlX zbww(`lEyErG>SDJCYjbjVpU>(oGA_AftU;q$4E@NA8g40f2!{%CY`N`YIgJDh0qSL z#(xIZZyYoL%en%TN7w+NCb3C!R{;&2x(XCQ#6u>KA=sVxFM?F~HwR#ROJ&Q4F_0Yn zcZSg&udsA!X3AF?@-e-;}>JszPo*+tG*ZUmXV=Mb7AT1ZtL|HzA&TPyVtYeVM=6sGv&{y-Wv z2vB-#CN(V=n z+2}OgBm^0#RfT2;QBU~gC#KTZBO~9$LLgWYB!67CYp7%e zL>DY`VoKRYMcxV#j|UxBXxoX8_-yFPEVXbK6xK}A%Ee-Go62c@IjOuOb-akf1TVpt zxZ<4hg*iqJPz9=|gB3}8OXxL)?4Y2l-w~1lC!vY<)mo_rWbuGDft%ezPjF;dnv`GI zMGQ3pKfWS=bfmwOUppM5pj84re)a6S^x_@jG=UW(j@1dGW=70d2Cw$lI7nQ16jdBpklXw1IGw1QD+8UX-gFck?}#&w^4F$m&Ha&Ddmd-Eb<%H4u86b zp-(!bt@B?9gwisgSQ57elnZIyrAtr|$fcbxB2dWK;DsFxR@}aI zOQb6V@Ys$C6E@I^~?-;3xA^-k+(ICW?0@?Ky!JQ zA14CPtK%DBaT4hUgG-7x2ovvsIihl5-UbqquOHHUuLs;sZM~ow_0XbEVqCIKAu+Hm zp&ZU9a4Hxy;Zu8tBA9AhJCQIMW+F)vSc#A%)ZSVLlaob<<1<)6WD$276uJUM>LtKk zVWW}mBsqN^A$WV7p4+wHI0?R9tq^zb?%9GE+eK$cS%FW*p<~f>;Gb|vI80v{;-0sq z73}#Ng-rq{pCw6_4pj;Gs0C!~0KqUBrYSht=p|`$IMcff!LNsaCjp}^K-)3A6DEl( z6Jr=F>DLgMWLF7~3t-lceHIP4RvJMz8kBT!krtqBjb@xepeQXM)1#W=#E0(2t9qZy|YOu0ivpc7rv3F4ky zis=YNMz%vVD6xR57xeQix1z@ESwPkbcY~>L)JaP6{(egO-Ez`G-c}(MT@}nveS*0` zJ_|`SBs-(fwTQ9By$^)kN$v;G5s{Olm`QSS6bm>dgoYLrW?woK1MuH~>yrqUVTRC{ zUrbaQejuX(fv?19z2wu`~3iChkr~i3Aez zF+b&n%!Ssa0V5&=QKj*!R#AD5U4?9GbftaSYX4G=--GWl%rt(@D= zaeuH6Ba@XrPgq@zVaP814UY!TEHh5+vd2;F{-7pjoeFFqlmrKWqA#$KIW7c3EO-qF zfunKXfY4a{MC4h77b)EEchW_fQ5q9e(N>fYdv{o$=m<0+!U0f6JIqh?H{^6RB)jVN zQuGd}5`galbvCzQ*3C*536DQ20Z-2OO$mrR9|BawN(rY_yA;@gju8(7^&Z07BCreU zCHu+|Z`s3AWhXt6;zpvB#2HOlo|B{nn1N7yQgjmDcWi)#8HS+R!lU3|fT=Fz-ge=R zkQ0q4Q~A_pvc)dTHWS`T@=$;@jX-MhGb)7m%(;q^cy-ku+1+bZo_l$aEySkK38~JnS?4J>kW` zk+Cql%-^Tv>HrU^&DbJF-Z;&M+Dx7hs#~fYf>WbL;?xfQ#L=6c+ee>n!e0X|(?Sjq zA>PGcn}xesaDF&_30~k10>vW|#i8sIhX5D?*rVf@TWu@XVEH89x%j>;8|_-sKMU~e3NuZZs?B+(rr z6T?nh<~5?yWn=Mf-HcFWJD<~se&j*`z9$5~pRa&7aj>K4LcBWy9O69~7w?J1GDi)7 zcz4($#Jj?Ov9M$#1^7&WFI9l+LKXJ?4gr2>J3^Wfhf{*5$>cl03Ng7ttS5PiBmZmf zp=+2#V#13nsnRc|T8eWbCt-AVARixgh`Yq>IQt|61d2%4o1}%syTwO11@bDIuJXVp+lh| zi-5Qr1hZi1>4KsAA((;iLXW|~3Bw_XT$iUiD(Dg#@g-ob3U_I1O^Ol|7?lQ1QyY)9 zZlMyBXVQ;9IwM+SD2&r}eEICqbp2b4rO3^GNJSo~`o9tj#3G;=05Bv+Bv*2tgc6r5 zF%)SL^`}x$Fr;W8FguE(BQwZ}`x}A+qY#2Zu!HRi%mc_Jmw`iO(5iyN6NNH>-?mB= zOn2B4%^zloSQX)1e6|S7XsVEgC#@}S2uQW27Tv~9u$7ik6eH`}F`mh~c1-GLaO?1h z{@@$ZkVb|oN5vv`x?U=B0D;3oDq$hW`iX@|9gDOr`Hl>Fl2Zg?VSh+BT1R^71JFa^ zlzud6J4m-PU*F5fKN+SxT4P8ZzyV!)vVPMl|F2mQ0$zxY z54m9V-}tRWwh4!45D_~(gG4$Ji4>8-<CU&Wlnu4w9B=NnJxJ6Xl`Tgr^AOJ#k z;?R-;h!Q|h)DyX$Mx2(6<7{NS1)jwhCHUKYCG(C)R60d+t zWCuC3@V0K=9os7#aFyWxwIb(^GSsu#!HFhu?HbdJkcER z2L~AWeEO^2z(J;F1~#?ICdr-CQkN^BZfZQGx8w;C ziZ4<}dIJz_$>5gpL?VL>w)K*UK+IDGLvRdH$KWFSQ#s!;7vq!VL?fZc9(QTVannPk zag-YqJi^g`B9iSvUvhXMELNxGm%!o-$@j=RsmWWiAsrrw{yLtMaxl=|(x`+bn}|=61}R03 zCo#*^m4)>~jJ%lOrqF7^kt9Q<{0FLSCSJfbBba6&!8Ef08Dg4Q$xKr$i$J66cNusv zc&Yf$^V=TU~ih(@mBqO6gu2O-pqOM7;dYRYup)P0Ly-3XzH< znD6aXMrA2VVyAbT+$EXRNI)hI+4Bl7y~nsyxr{%1kI^IS1Pdzm29d`^U2SwWf%DQx z75fA>D7Mp%Q^@4O)dn5@-lo)j)SFz;k*G?R3KCJuSjNc7e8Xy^IP3&ux-ITnZPX+O zHrCu{)PYi`tuYq2E&AZS2BNiF*jmG@gx{bj$B^3^$8SY)FTj2T)1+(>8GkR>#8rIJ zy+-$TzA96_0sh`SMt<0d>2y0rHS+xXjFgaUr*{kQL+=hQPrWO>p9~hAk6dSLQ;e33 z^+uKwO^T&V+@|DbY8mx_u~dnzdTR>=kSFk~qA*A!6Pw^QWP5^y((D!D)MU-BqijYV zj2ua*^hOIQL@fA~ENq9Oe_93sm$ zLo`EgV|eztuUjQ8Ii)d?vNR+y3=xEK;Hu#3J@H~rW@>5(D!*;c{5EmWbHJE-+7b&lA_x6Nf^~PPM1y zx_WRCDrt%&OezYCm0DZulR)cO6~zd!HF2Fr*}UXGqAJW5h(k#0QFI6ZU`AP~6*_YQ z_W&_IgjJ0!sPYq8Rl=kVTU51&3 z`Gca-hJL%hFXFzer;HQJk(((E$U<73U{08SVpXR7;XPmnIpRmK!V5MU1$^lTMlhMP zIQ1NO%2*gWs5nK>ui9t~>YX%}q}x1aSpDSnrF2~pn-*x}g0eV`XKykp!tq=nAPsb4 z>?R{+hvVj`mc#dKHiBSp8?!Z&KflSStVuKiof1O_P@Kdthk#e{)5bEu>(Qr;O7wa6 z(?*4xSL+ZTblPm3fe-j*BW24{a(6!8Y>W;&FwuyzW%o@=EpiY)P5$uyJncxnuhp>H z`MPL``!%kVUC+)V8bH3f-#OCqs5XJ$__Se`kgp7iB^kUV=b_M(Q$pNQ@?oxQF>+j7 zcA?FKq_m@lDFeArQax5b!zxNQ`tJZntrc=IiFq}{kpUN1Khh$gSRg}?i( zQ6AGPos`Aom!;5~D2u--q&Glizw<_bo?gJCB?d>AW?C}Gj&?aM0ua%l88`$e#9jqx z*Tfn%taS0|owV?%L<6uG-S#yb+M?S%IPb(KkskOAc9+l~G99e%DX*9E@@%cv@1i+y zyXR|oSp&eYx#gYEyM4kz8q3pGNDlb(HCSViUCM8 zUf`sc@5#}kJ%HU=sn~s(5%P=kwUd1`N&7wg`lyy2SRn2JL?CpyK+AFS9tm_p_NCf_ z)DNnXKA>s0!?FW@;EPW%lIxo5$z>t&k?$$chyno2BHmP}rRX&m6>5~9Vq>9pF^bd` zX|yfwlp<|tXzLpyla{Ds3;%18TSr+L#3CA{^gy6#N^j>Cjc)rj@xk-I@}`a&?X*Ly zRONw=T299gKNflCT&h7%@OUp@|CrYn$3F;*Ca_awIT8d#Zsj|QwVsEg%g;|^rF>M0 z)?nUyVG4rXb)nedBL=dZ?)l!oA}i325^YYRe_9vGg0&hQzYGaae71%v_$;a3tG`>_D ze|V16bV!_=`PP55F9)xb7#S>pLW}>OhFB#dmy!n#R zh!*Q!Hp)s89MJxRGWYKAh;!-O*L=33m1ed3%Tq7IN%JiK;$>q<$A6~I$@@uj@}`)R z37o%z4W9z)*x$9?$jPe{3|eIJPG!*hUNOp}vq>e~pi){HD4G@OBXDYC(6HeMI@lN9 z%6q+PyiG&ijv;zmdTuv{D~IXGjjv()oW8o#=k!%fANpGQx^ZIhDk!AgJvfsR`-#W{ zL$-uy8>T-}uC03ASg2ggb9NX!e62fU(olVBhfsh1xx?tz_9viZc_GN$LQ}AmU=Yyx zWMV|BT^m`&kAK4`!t7k|hS7xD|NVwxXSvhh2_$AmObLrm32%JU7^7UzA9>R#4Syx6 zUL#!m^alRVH;pRobU0V`)aeDh$6N3MJjO@AWpp`=kh<!7`h6d z`L=NqrHyNS+sJeED|ZJgJ}K@Xb>S4D>wG$Br*URGpA_)7cN*!y^pAHUhMM#2cZ}hg zNn>|!`P_GmZpdV?{2imaI|O&9q$8+dcZoEsAH5^g_bKlh<;g=p=DQre{9PlAaoqc^ zF@nbN<-101t}8>~rNHJ%O)B%IhtGP~NXZS5T)~|8jQOt0PKoS5vHy6_sO*U}xEgJ< zZR75U?{&p&rrINc`}ojZMzuR6R|2K#9vriBB!7Pwn1(P*Dw4;QFh+{`g7=Ni>W}yG zTj;t1+xgx>a|?dGQ0oo&{5f4sJA%9S?XcqI!|^6}exft(bPOo2Tty zli|?DfLX(T>Y(*gR`On%S~)H=GZ6s!>FQP(oOZe8BY&tDQv+A-nfx!AT9uoA!7Fz) z^H(ypPRU^TIa8xOk%d`WzH%n-lclZ7S-OU5GqKMN>5AiB;rp|+-h9q(qj#9!Cj^S1 zq3iDB_wN?8&~cAZ)rOyY_^o@eCxLQQp0`JMhc@mp`n!{O2-~&8USlDIk80QO*S_>+ z@wyLS6Y{2#_U@F6bx$k<9g#linF zW@#GY^?61Iwb&N{)(0-(vrS(!f2_#&yvuG~GIiLkAXBj0n>+gED66?77!Tb!E%0ENTa*>pb}pdu)e9pm$F-%m-tGsFZb~hUj^3v_R`Zj4(#lP3wE|t z#CO}b%t8W&xNvv-;;0UyFHjveTE0J_k=m#)g=L(8XNb@%qrU!Sa$5paY)l}`{b$^e zYyedinm4`SA4h#3WhM1L4pzRq)JMtjekt|kA&XZ|C*M$D=hRNVs}-f?!%n_a6+9kM z?pulrt%0|EQSLigjR`*~yd{)i`JIe2EM+`7F< z@0fh|$i}2^B_Z2yd?d>~qbeG5Uh=;0Ab<7-zP_vf1ohjyct$sWrt%Ok>*k-4^mtP@ zzZJ=VfR`>Oc$m^6EBVFm>V2|zBL5||hG?u6qGrmi$zOR_pRR6O!7Ja>3+X!YJ$)`+ zA9+u&E8m8Kjny6x+-LC1K}i1YxsTd>(@cIAMgP-cCXT_@^dX)3WJat^GYe7dS+;zMSE9a!2n_gcHUIJvV;I$O^J7L$R`XBDVp@UeNVk3sF zPe89-#{cw$F#(Ffb59sU^1MRq5CI|&t2c0)Pt)M+(qnw@RxOjiv<_>PGe0%@#o#8e zG}UpvVye=>_Q?Yal@e(NfT-kkMH(`Qdr1pU@^UOk#a)x)ju68R((FcYj>kCUvxD*m zZIr4+JO!$Rs}-(KR4S?@zp7$)Px=CJXO13wh%bD+*FJPPY+kL)FI8ZqCh zlmH-Kc&&NnXGX6Wz$%arofB)z9yraZkA8AF`>}&Xb9QiL38*m|k&oo92quRcm|%&w zM?eY#Sek4>RLMk@65N*bPa}mO0;%DkXH+ZjmX>M7;l6&bJ-*>Hqd*Dr7eB*->b}p6 zA>_*z{&k!v(=twBCuk4{52mp@V(WAqXqdJb=@vF9Siu1LXcV_joCz0ir7GQ93x52wIE^T~-m0MRy1lpw%(p8p#SQe8#-wP$Nen zy?|gAUM}|;P8;D5qi57gB~6rU^@wld$vnghd`saDvMwrtkD2?zN%v8QkN3cE5miK< zQk+vO1Au~v80%8dz4QoJVhz`NVVhdaqINRH6V?jkn%@mv&r8RDfi>AdAI`0wF zfY)@+lcj3FFRU=Y{sMlH&L@_8a4(J@!XlA42r^B!s@ijC!bH4j#7sXwnn8e3?FH^z zGkiWasz+k+Gi$LPi%z?h(CUtkm3iG{^7JAa1V|kRsra${we-5grzWvM?HV zX+U;^GKWx6e5%rFSkN?3YsgB&fL)NHUugtcn$Es1qzSR`TAo!T=AYm%u#0pP7fX=A zg+4o;SDxoDq#%$QXWBh9x(dhfEFPeMi1`-}KsC(a@#MWyv6n!M6o4mR5e_}_(xFG_ zHl0pFGl!W0*QbSl55-z~aKYDRUr#68LBq&1am+|xZB_)2VjC8%>$;2vOFKk^5C($? z)B1@OZVx?UF`jH9LQ3(BC3($>RKzp9IntR+>rDWK!8e_So;Y4Tp?h!P>1PLM2_|-S zAZ5Ygv9klyp&&)h30wdr>e_PxU2%ExoB(BT{pUFW%H%ZS+`ve@Tyk!}QZ}_baBko+ zCD&D8b!%%49u9tE?g`NDVvum1IgaVahf&(m}G#a|j7 zkSKN8mx#Pv*Yf0-$bg{kzlDFd-?)ITXMF|PypBKgl`#@oxW50&xEt->_CLnu3VPG& zKgLSrs(Rr+Mh!0C{l}P#q9=W0oREuEKcxK>Wa_aW5x$M!TxgK*e*+KAdOrGFqXL(O z-x^2YvhiE`zUA|84J0zc(JJ2?6RCn6Qx_F5QGv%670mk{JaHYr;(KEQzU==4mJ`?W zV}3A>#O1*s;BZ>cJN*b-dp$q$M`JuLD}FRu@xkn$a9PizKf}^T`#&2qaJliC?DpSq~_km-*S1co_+>>u{kw&n*uJ*boH| zNIV|pSs^wb_d!)H6akQ@p}Cc$i8 z?PGR7SRx-LCzh#GYww_1OQ> zgg5a2>i&xFqzWmBUX?=Hc3+xq{z~zp<@P%@i^jcqh4y9VLv`TM=g`Stq|5T>tfl{kEygqSF6}g*te)51tu0sX=8vt?uEy-t-=h)!ync^%zV-;PddwiPy5?+WRuudQJBXD@3AyIr6>5mjXkCfcNPoZ&(?$A+2$H40i(fZtoGb?Jb> z1_+0EPy!B|=i66n%aliX=t^yc1O<(t_f^^;Je_fsHWy&teHDB)0iJiY_A>FnkFVAS z1Ha0aXbtG%;w9SC^mfQK&}MKw{u-^5`kK;m=`~tJuugt0tg6=){@AtJ5OoJmQo2?< z{tshaTgchYi^yLIb}niOd~?yOnMuySQ&D_$qJ!yX_XA<3c_KU2n`Wp-=I?~jN%{%Q ztUy4mBcnDAr{#b!pHrvts|Ev&*72Mn8nMvfL$qTe>p_e{Kf(IjR`LRD7y=|($A286 z{Rx)^Lp5^tUpo}5h3oh|L$%4cd^c1hiSSCDHj>Y;(=1U5Z2n%+txA@dfAEjv zY;7uPx!cz2aru|6&BA3wJrHFbzocF?`(wRUk_RC{@lT&1qz|G32PtTDJ~X=6W0*!# zV%#uo1}I+K-QPcS*G_5dd zxn`r5ho4t()Yjw6DVwxTxGa1c#CgLe(T`U)X=mfr$fv<>#V-?adFE+t8@^hy8JG2Z zS}WEY*YgWnwc~Jkzg4@OIL=?%VK(K-4B}AtE576Y2Y^@?^KEMYU%@SN`NXxri~ITN zwSqi%uhqIL$ME32z}0npz`Yus-Zu4K^zk@;;k{b_@b-(~dB}xi+9?7ow%)5%CCSER z_h}Vim6i8tox>lemYj8;W*uDeulH%Aln42b_W`$i@~-!T4+1Oi2UA$b@3>#PXvCog zlR~YobVz7zaW5JO`=i_V$?F83uUe;diE9BExLx`QSMmv$e`-paz`mfD=@uOHt4)Kp4 z)rx&f|3x-EU!TtC*cRwvowyodf5!a<5q2gn$YOO7F3_JWep3cpCtt~+6Rt&q`~L=*vb z&{0w<1*Jj!Aw-<)cp0_IFDYV_s_Wh&HYn~I=ARd_-06-Z<+gpoKPf$_>C(CK?Q2OM zQpXGXNpd;IliK`w(zghfBaiD{yAff)GL`?d^zO(uD}#lH7Ty~AZP!KQ6?MF}A^C32 z7fEe7-rbuomE~&rSFd?H@x`~Zu<{81rkKqdNg@jSNFc{yWs|1}h845{s0A4mpGSTp z@G&nMgU2Uv8iu^1^&092vSXI8o^Z9jRKkueh87_93BVXl>+Zp?qiFrramS?bQ6}4j zGT4SF{AL3@sDZ-5iw1hA8Hi9Xk6LWGlEyb#Y!EI#TCB(qt66^GXkF#{iMzVGQsdNBA;*am&(52UH=Um^ivU*hEZhwlo@ zF)ul9A8~wf_Dgp-Z*FtX1=xAJ^QQR~>94cbT_@kbn|;Swx~2R;0A0rqz%gpXVQ4?Z zy7E^yus{NkAQQ2?4L}Z5zft&g8(EVofH9ijaKrn0){~rvB_gKd)<^RVH^2z?+VF%CJ#zrY`@ng2JOL6&d8(XNZ z+Dfp_Ynk^V+pPKbeQZmF22kTOEwMu|)|5Ap=7A)9~jLf11c>TSuDp9*sAD z=AX$|r29%jpg|A3XE8XS;O%LC-J5&E(rr^>rZ>zyUR6_kdYScy8SOu!^!1stduegH;uDeHMo&wV%2LxqX#2yxeB&rBr#!DG_xKn^%W4YPsXjZtdkj#h9=tcLf48F9C&5F@M2!az}^#pMu zX_Q0aP(4Df2IeMUZ6JfKSnWWDfGZ%A(hqWKr}l%tyn|(Nr8CRwPpCEcg6Ez!ZRrdZs7lg>b^{8NHR566TMWBZDP%G7TWtc|j!`=$>7Y)YEP@P7@S; zJ%uD0MPUN_2zT`a_F^D-x8T07uA^suH)aP7f7R4#Fg%>gwN^1GAa>sc~)c?`Q;ubUn8!q(0c8m3#00I zBuLimk1$R$4EfCNY~l%^s0t5M20|+;yb z_9@{}#qn}#U*uoHJDCIJNjO4lS$@RvZ93RUi`ccG&E`sEt&LzsE@&&QkVk&q> z57yn))ZL&=M^gtuh+{2g_F%&mWIpI2T*w#pXXPFIVA6CT*H5BrrV^SV#^Rn*kwjS? z^Fda$Xrz$`BQ;d;nUk2=0cxJujaDkKT(R_ktjakyB)O_wR7Iq8P(?r1vhu03Wd%_z zK~|zrD|R`9=>y)N1EL3&3fD~7 zpsh2IoHTVPa)xvB(X)d_LV>0_KTyl8A?|QOlw0Va;RI;EY8=-?ZO0MjySuYqaD0MJ z7q;JRohUVkT+M>-fUkx4{64Hd8;v(av_V0%9e;~xb^cu+*oz^e)I46(mvtEsaLJWM zw-)5;YmZ!g4!P2*Yzny=;Q2(ZKK@x>*4I58D+vdxbjhZV;&%>Y1Nq8+tTgN8Z(E5z zwtJvaz?vEvniQPOU+c#*J6`v79qpuW@%r+w>*T5$@cO|2;Amo20=%~R!?g8q!fQOO z?aw;7$2hs|S`$-OP5c8``3Z7-1l^+8IdmkCf zfLBUFT&{^`*dI#j&PV5!P#ByEoQl%OBj+r!hx|6|LE;Ri3kM<*pLk~g3-kq>@YpS1 z2{2TlA~=)>1p9;S*GnNqm#wOMK8!Og*n0bCuma+%2N4ueW>1$gk&GYm2PA|FO=A?r zPEZU6BDE%l!uFH@Bbt4lpdaA34rHek4^Ki(lG9S&Z3X!Y3$tVpJ8J6CU|qoer|fbT zeH!W+>_x6^A-LA5p?(;E{Z|2;;3xtL_Qe6hpyE-qj|ibN|8#*-X^Oa=HA(PRKacwKKw#qvFU8}y zQr8hTfh(fPf1;EhrIIt=@O3L4=jCE26s?ZL86gV~p2(IV5Ty#=Glb=_PEz8c8f7Re z3b(1IEt1b1$|@QWVL&Vi0Wh>RKLag*t%65dvM$9c#d-vK*2#gdS!#BQGzJI8-(kYV z0K^Y>DkKNUFApDwhwg%6<~s$;9H#G_pO!o{UOkZcXcKNbqZ?nx%8Oh^i8>?Hm{6;t zWUyF%zO;@VuLVs%|GJJHhdf5&cMJHV(vD2%OJhPve@;6xQ3(Hn*pV3&J2Fc})Id+O zbWId#Rz_2nc634nT&U{{^RDy8X&}*?<1}c^rcGhFQcYGw||BQI-o~iNq zdu^6^a*~s@O<-}d)ASFQN_>FM`uX&FX4m<}F3najXEO+FqbslvZUxN__fc;otfMLD zqb_w35c{@(ey7txpa|FE@71%4!?0Cz7;Est`}H^$btT@f9LB2PRop&|(gTOU#73v@0RgcFm1SFlh4|P$lU_A)h?~r-3vKXOZ3rn-rr! z|4|BP5vdkah)68p9wBlxOh_U%Wd*#2SzdnoaF!bbBN&4e@L+%`ctL1@x6VpApoT<0 z=%^pNa!DEsCh13z4c>}iDj#0P;fz2Fd=Vtvqr6#Y9W&qo%Bk?WIZQH$&OmvuYy>g; z$k_HdyPxCoAN)Y5Gng@IjxQa+3K6&>w(^0&O1rDPFA!Or0x05t{1hExMDl^Y;#5FJ z&kzxG=2kvPkH$%xhavL!HtV^4oQ-+JZ~!OCw%wCxG)I&;C)YWIiejJe9&ZEkkI!N$ zn|3l9SVas;PKb+81Pizb{F*KoLH)1+6sr@KGwYe;BK=&B(a9{0+$qM{4-mH>l#Cu) zFer^=E`~u-WrymabG8|NHpDrE@h-k!%UBLA3bw;gNbbd4xhD_^b>M{)-cnTy6bfI(F%8hdRdtUxziGzJRr-J@9U1W5HX;75Q| z7(aaA2H_e7BKj%Q1%c6-8*p1;@5{MC3w`8oVk^WaQtSr!iV3Ws92FTjJqjp+#b#iH zpa=*~L{8xw;++&q$5+;|3chYMWBj-=tm84*zds7$iwMGQjN*PwsEFb5sQ?^2>UM}@jT!75RwfzGF(DVA-&Cu zz9Gm?h9uF(Ij6@6#B$$3+=xA_9uGC5VAfa&r0F1dd+d}G3+BI$VUcoi2A~gL%>ymC z?E?V`MX7x<`!P4Yj$kHpyW!)<9>MbaU=cwu(GCt1C5``JCJLMr@C zsasFi8v*@5#CCyhvjoCtVP!yMd4a+Qjm%zh3)B;zosHah1IDs5punyl3j^FMO}|Od z@A4VM67t4K)i^?eN}7URG6kz~ygN+5O#WgoX0ng=xPa?~gkZK{nh zh#&u+ns*qn@as6CZ5NMcBhkIRgBc=$(G!Pn^q<7SynH50IX{-D5z5Q^<5}@xD$koB zDjzfqHo-CDnbA%Q>n5=DHhV4*f;65LX1nwbR1+*59 z(UUNle|Z`+`A-vBe)!+0*hc=Sga@u8A3BMpoIXo19pR4H;czB`3JNA78WXW4;01UX z6GF7_646h)#O+Q74gpVYn9P&5rV=Tm)TY6Ic*qyx-Dff*X^olBKa!RAoh<Cz~mi0t_77}QK<4{{$C32s*jMvGc z=?cX*c77bWN#f*TjZch>_;JeSI)X{eg-IDjrMkl>m0n2u92xFY1}&c?7wYk1-@pO* zyr72SpLeVXBJwy^z;=X&Qrz-ZToDjV(iXwIWlmf!bXW3ek`@$_f+Jk-69UBG1xK+` zfLLls;Lt$gy+9TVu0|pa^232>sZS=jG}gvciU}4<3&e&Q7(?+k=tTj^S2(ymW*N8@ zjk`i!mrzE8R@4f}nqZtl3&o17V4zUeI!ef!1%+mjSx6VDz5Rv>M0A;#2ne)Pf|2}Z z7VsfcSa-0Ixl>>R#WfCoP2z2NH%AX~tr=2%2n~dYA^nkb5zc>@!e&@K1d!txgreQ3 zXayk*ibfXl`A4%#H+zQbdT`Q{sALyDx0*k4G;64Y4b?s(0jmAvZ&HFw)ruHcGA+%X znozBfPKHz~@`pPHTCuBI2|knsu1%Q)Abv>v+6Pv(5+jegq)oJdkrbyECei7}m9@)z z?8EJwFPX*)J3BcUTu?asA_XWmtR{~P@Pm||+0$SpdwI96!qKU&sqs(EUeC z_TuBePGc+?8jhmrCq)zb4MBtG-+@ND1C6evXd(n&Fk<{nbK8|{Q<~waX0h2#{BJTK zRTwQjKMHTO*$uDp)a`uurn@2r9a|^yC3p;da{+yG0o_eme}NIXnSOd6$$iNRdA)(1 z8lcR$7$PAJA3mLx_UR!RO&exv%hWdQN%szr?wN;_?wOdv4z4r_;+QdXfE>L-x_4%o zj-$6jl9W#sYA6Xe(1>JMI&$~;nXFT%jJRePc?N^4P@hwxGFG?}X`HQM+puz^to$5? zBhDmGmOkW`AVIck{`n1c|kn>?29)Pv* ziU56cpb!I%$XKzreb-7ToZ+HyX|PkkzFofT?!Jr$;UY4uD)d984J_!a+P$Yj&=9s@_ zjM5==;1T43c6da5B8W#QR!tvDP&P@dBy+1*1acuAReIPGi|+h?a2y;+KNl zQAF^O^BepDf@MBEi=|{{N#>S_r6))*)aF0}d4Ysk-b->zKq77{iuvqi_MSpu5&xT9 z2u!q>eBVmcNY3Y6xveMOw>C-=e;JcSPG<&uN}es40J+IrNa#ho1?dXOrD#4AKr$m!%uG2u(Vk{H^)sFNiBL2P;X^Le+VpJO3+Nd& z67QJGYu{!aIH7VD+0+N2@xNw+kDceBaqS3kd@X=TZl%6X=lT%ec~A1C9s)d?q_DmL zv)1fuSIlj+dYH8U9wHQ^&Z5?V*Yq&GP4=A%^6e3RxH@fy`yjO1XpQX|g#>;XW)11m zSkY~aBGf5S*m+14PAa<{2L%7_!q}#eT-ZxXpMR*6-Mh5Rb2@7p) zRi6~66&R^7Vyg+AK-rikaC_K1)n*Se@qmnU5@_NF2(cbxXhkIhAO#o!OfRe+0HP=U zdI|PTz8VqGVAhhYRV7KQ9_6Vmv$nB&%!3_)g;p=K3gm|$aNpC>`!@=`UzDT?>t*&o zAN1Jo{AfS3C)6pcKPj28BD|;-mwGurfLbp-AtG*ATzRleXTd5Mpacgox=4AOT&rT?4WMvq+cih8r9P0@Ccx$ZPV2!i;S>w@yO5PSoG}>Mz)coFNN#u6LhI7S! zUGNCPqO4#hm7+ZDDW%d;>Jz6_r~?&3f6t0eSYIEjSsX1D`k0s8oI*nd^~&_0(!EET z>O|rK6Rk<4!x+{?{9$2t60Gq|ds3q{8G{9|5ffz{iOc@Qjn+}1*D1&_eKbHa75$%9 zuUVbyO{>(_tOh`1x_yB)1LKR$1UN#riDcJ#SQ3p`0ei7^jJ?P@);`IaWv`7{$04Vy zb-c~2*#xH(0HYHDqmuxmlL4bs0H0HBzcmMKorX4{uvkrIwlx=RsPH!d4sm5LPEJW) zpFTV-Mw$FyLek8`UE{Pd2ltPlTpBkSm; zh^ohVa}CRu!81qTGPj9!rYML9p|?{s&;4`-*-$jk!*pN3H#8y0qmA~U)AD?-(vhzW zsF}QaCi5lhHidIp`7~E=D4^|MQWkZ@q^XFp#L@ijlk|@e866%J|}WtZWe07r>mNUl_9V5yZ#;h0>hqfTRr>sDt>ML7UYzcfZG@S{};!tG+4mJZr1 z18o)p-bM8lR#y;mH-Ni4evjhM#JwuDz-Uk>i7ehCnF5Ow0H5>?8`9931e80$rcUw# z(@M#H(r_?-(_cFZ)R7@`?9 zyEH~|KL#oS?iZnH`mZw#Zgaiab#W9OML|;RjJ-KNiZD&ow*4aPdKe@gXzHRRGw@R#Z~+f7__Mt9 zKy5_RXHc-^ujXwAZv7QG=a|M#E?#yk@8@Z;i7NHn;4nb97*NK zO&1>wk9m|?1y>e8Tw_in1sNexG!s3iK##{B zSohn>5NGM|6bRVF!sPv`L6@u=vnPx_eBcRqa$R1|j8JHSt|< zypb8A)}%%;f(!c1=WolO>CbOS_U7g2V(62nd>R@lXE11T~nr z^pQU})Dvio_QeOdoSyRD*BD)Z_qZ%{-#dI6IyFHddIsJDmdFRv7(J8jF&$L@BDycZ zJv#BH$`~FH?L_ZjsNpTTd={RFPJ2k5y^lo6)1@7-kgNh?4?>GSE6yAK6lblA;`n%` z+1IJ+40C~V7spYm!)T0QN}LJu6Y%|l8fwUbtFh)nC^wA^rPFCL^Uc{faz)OB*E|v^ z15~xn#x$KnKhMJiio%R^Jm*tKFI|YYF#@gtUe6CjuPIPM1M2ltM7%kYMndQ$~k!h^)*; zLXXq%MZ+T4&IQraAR6E{rLFy^!B_*KL(Nvv1nh{@%qA40R_0>^A919)>V9ChgRxwAP_mbMJwloRgVHtVI%}R3?x$^>0Clmd_;^tg{J2U0#8T*;E5j- zBZL6%r9?Q0=(Ko)Z;joI160MCXDr~#Pfj0w^5 z1rkRH6cT83nt3i}0SI(1@DKz+S(_yO)(XU|GLIDz%$N+?cj<-02e{j0*4o%|k_P;( zHD?g|0*UE&KPEJzkxm8CL?Mj|RhhG>4v1^<6D0{l80pT4GK$6x4;9gdeJw zWB`b!7LWl^ETmKKa4#Dd?MC}j%V(Ilc&ICz7!+QUSNv}hkZM7@pZt{THFMI5;Q@Zo|c%x0e^RNH4FXlf!z6Z44=Xv3*F35(~D zWqr(PqiHnqG8sk|roBnXLz@0@W3&lk4VNmR&zVg?hADV6Q=kGdYIzrfqdMJ;V7;*# z0cH+<`f2Kktm4m@eIlp$GZ28tDET^O)+-HqH^DIo3J+Hq~EQGgrzqkrzcXvk^Y7zz>n- zgi>G~4{8DY;(gT5z#eS=GVc*%nXwNPbS3UN#eKUD6|f81jZXek;Z_mel#$Sq(gNf- zK&TRpLo=gJtESVc<+O_4P!PLK?hw49TXHFD_Gk)Y-=ml&RbmP6107vS?Gd<~9dq;} z?f0fez(2$ucM4G^17nXy*=fJw>CJ3)WH*)_Wf%WK3ENW%o;ojB3<;7eV9d@CKH**Pr8VW zcKhR|Kyad+HHrec=WG7=i$q0x(*1>e(#6c1>>)btVpgpFqVU+oY;01L#W$+rr_H$$ zFeoHIMDS&#fnUE*&*DE{jI9O=Kl&23FPO9+|B;rdud!uH_&azrk((Y+6lp?U`wD>+ zgFj~hA2#44B9vF`U~j3mV|*{)_G-etP!DI==ZWHV;ti{x&Pm_7jZ)Zdk-7XF~JZ~PawmI+29o^_d(BP5oLo4+-eX~v8WkYsD>X1{!WWFvPmg(*RkjPh+uuzMLD}%G zDF5oaY&*5M@;$aqJ)rP;yV%-pFT9WftIaY-*bRwkaUTJz2Vda!`|R%kmH9d5sN#dv zs2}?S5fgdB2kfHme{2FWcC$sY*0Mm-adG^y-Prgvn}4vI)z-HB)Qa7Dc2~@gh;SN! ztsM65AH~Zm_htX!fB?MHh)pyQb~>8{^22fGXM7gSJeW}J!}ZQRtgK2nKPxC6m_kP6 z=3p$VSE${DcNS~`tTfNeJ>SYjEH3|K536Fd^g-LGD|p>r_*Ng_efI(w5AcS)tRe_U zmf-C6hd;IQC3}%o?g9SdUTlK%bLB(U8R>E=KV(NK8o%H}c6ITd?J3B*(|yDQY~NnT z%m0BqClXnUlaN)h-+ApB0#FHx5! zv&hYO2tE`?05W}J`*<2-;@BI?#AFErk_9HhCXydrA7@cl%)mLD`2cul=|6}jXAO8{QuEF}iZJOqOcHYnfX7Npv47Z8#YH4lchr z7+uq;Y?`(gbd^mw*N^&InVR)!^s>HXV1MaDbJY51H#wU2sBSQv!5WKj4Ny3fT5{7vv0TBGLX zImFcO-lsf&@=s;wn-qIz|S~`mGL&iRg z+V$D~-E>HeXj$7Y81oX^4TU3Jo4=249ES()NHb#yhPmZlTpi~+UMbvHp>qW@C*pyt zXhmvI)TvOnxXzUS4#~AK$Ezw}X*tj!{T^`rYkTN|V0r44m^0HVQ18El4dNKgh;pjT z1!`^7sp@2q5XX8~GOjyhp~7*d$L6<-9Gq+2PtA%uoe@E9P28zI{pygFN39k1RI3hw zpU?{}sLX7zc3FeYOq@zRYk&(DKf*PP?8Pxpn~*GNHHIWQ98?2g=Icn1jcN5Is)RQd z<`0rMWF;o@3wA6w*mZiM!TAPzp8$G!p1xG(11t(1zR+fKNJEw9s-6? zWepNj(#+R1UP>Qdm;_Y8!7DCok0(9cXw0->*`CKUQ-7dS0od(2Hb zoZ0b>W}MJapTH3kmfGH&TcxJ)et}w=a0ZvRSLt^czSYYYgaNgrQ@%N^A=C z5s!f<7=Er>T%R*amzD&!Xr|X+gzY=l2DN!3qD~-U@kaP3+CUO^iy-8#T2Y12MnxA# zi^CX;8a87hfa`?Iqmwx%ZNCD8h^_9wBKnT?d-dHbF_$?(y?<|{8 zr(?E8r{i+nR_vX+L_M(;-*&67wj%NeVpv|QU#_|~`f1)f4?dLRcTV(GXDNi}*sqQ| zFSi=dWMb+SsKmqJ=(XDrzR6cFoR?dxPT2xI_u_5Qktpc#ZP7J=anyC#EQPpEms}rR z*=N&Zl=r>Cy9|tj_{?Vny?_=x7%d{abkOXZZqVVBZ@3|PD#-Qq4bi7c+DW9X2i#Ox zjdPE-g4kC2glnBL3n@=m&Lwz!PdSBroDj+L(p|1|Znt{8cx6`9JJ5|0=q_3R5NF~h z>K^v6^WAG(9#M6-=k4qeGH>5iS($_Ic&}WXl{t8~eXB_qgv{%;-N{$=w>lSA-VNoS z<9PzpLme(YZ`6DDrbeZ36wX7pI$dhBjvYZiSqt-!zdf}aCM4`t^l>&x=r-rRnvZXR zw+XooWQGfGtA*o`6ZcvkMd3}??r_Rg%WaOMzPQa9S9;{MYS!(}c%F4~`|ZvsUf;ak z>E;DToMg)FmR&4^rAu|$4yU`_`h`mGaJo+0_SGXf+=hdVl27DJz_bPi)Ybkydmqke zLDV}KL=g4w9LB)MnaD8L@%zDx9@Sa=$ZC9zoP!`5tMHlUhd{vjt>0IDb~;7#TGP4= zm{cG+N1=I0w`b#ec!ohL9K85Z%GCq8TBX>uNk2VlTyM6Sr&imj8^IH78PvHs{rT^YzEM*;IXw{2Qd?54>g3#p`+-Hy9r?fivCmO5Le1vs zAE)0ga?+ODtWQ9|w#x%QPVXsk>MeWMPt>!e&QXZuT2$urghcYopaE47J?t7_Tir2i z|2^0a?ZghXzuf88lLlp*=c3|26sb*?HaUX9w^(?Ch)PLbU&A$&xJ1=ez%V=qFIWaf z$i!YXwZd6z@3hs^70w^68`bVgXF(6Wd&~d&dT@Du0wW6&=9^5sqv=kUpz{x|at1@% ztgLbv>-eWtPR$S<<$P3V3Wh%0ZxsX$&KU4^H?Z-Q_KFu&eJO}G;Z)E!7%{o9+NmNi zJ*$Dr-D+mFQ)~55YpR`Y*kgKgwQ~YqzE|xqj&gpDQ_;<|9@&E`Scpc5#!*la$~~dR zsTsg8&??Bf8Z9^i$3%A4Dl6T*5?2CQjiGIJVm=B)8HuaYH`h4%7VH4`bau|brMA`? zfXnn+=M-G-t#z7vJWnZI3_O{}T8Yb03U;LkeN+e=3mt`$HIc8dL{U+g^*wk!KspZ! zSRZoLXP(m?@iQGCrJv^Mx~}(}*?9WIb1r}{8BU~_dMJTNNfL-y)&wHW&BNaG2UvQx z>_;C|L+Tva_1h0Vtj~1uw?7cvyq39nDs%J211eSLRF^z@1BECVX_Pg{-oSk`Pu-yI zsdFk~&*D?!Zg#RCJfNPdbNtad5`iIQaf`15jAl-I+Jc;ICF}+O1A!bAhAapdVUG$8 zvNscZ`wyy9>YWkYen1#?;V%ZzqVu$!O%7qC?>|-#)`KsmsWz|qFAv{#fnjmjBH2-Pb0p$P zvxmVE*L*Wyrgd}Xblx38SPy>4BO~YgjKi-}nl!)Z<}ez1yus;>%TW!^Q0lS`&OU1s zqLbNuEc+#d(sbhX>>}V7o{h62fG&R4C%2*pO2K|{u$BGoVsy`OOjTK zjl?u)M&Q>?+Q*tw1dYHKG$$iVh!(gN+5U?-dJa;gr}NOD*EDk+448v)2cOb!kQVm` zd6GLL8bT(u@yd&FsB8Duh00a`Ud~4ix7tvop*e?WvDm&FV;TAgZg0xmYHjW|h7t~S zS&Hy*!TVqbslO|eF68gd+y+@t$~}CgyB*K)q|-V8gJmR0Stu}Avp)PIFG6p;joPyR81qDJT-izQ(g`(1Got-S1^e-?)1#Ke55m=5rOfzJ?tqo z8{V4QeISZz_8GidiMH>m*I1{#(jXwuLk~m{og^W+6<|R{R`C%So^Mltb*B2&2&XEo zeCH+W{|MC30Z*Kguha2M?1B} zM{0n&ceK;vNEr*p=!`wbILCFU1kK!tQ^*m%n+j6|_|gX@piZR@jBy(N(>niya@s*C zQ*xYBUu`-hw%X~Ton7d?5PMl(OJbH6v!Sux`W^cFuJQ7#yM40JJHD+?B_!s z`d^UiJ#<-}VE;I$FGkJKcxO%VJGxK8lZW#6Lnej<-!k4QkC8u3b}kc|V> zT+Xle;an^%3+bUyivbK?!35jp1iQ7(;H;$t49@;>j-PF++kBi;JIV?S&Zx2xc|0ur z2|cRbLql}OBJZ*Mt=I13zA2lB0%6t;HQG||-4`xZVuDkVU3j+%PIt^FrcQ7s)$CW= z1euwBKCZMqK14lhpHdG@(1xkcCOF-)3+OQs(X(c#<0m3O&rEg3M5tbt`u0Q!XG{HN zqSGb9+V8Q{R}-94m4CeB!q8KByz?$}Bj*I?XZc&UWkaf-J;CXjM~MfbU9F;%oU%GEV8E3S+|fT#zLK$Ql&>shW!nqWXBW?{gFv;5alG&w2o-_d>T5PrLLalbkE;( z4U!W1Ch6=MPL**=vN1*MXdVf&RZVw}Iww&B8m48Hb0{E8dw4a~zaNsGM1kDz$Sm{z#(jsto6wdqcsm3ZXN zeK``wAuRGG^I;-WH=XQsRs&CVW;xg0pZTP&KN)k=-KuT|+Wz|tIosOaBb!^Un&EV@ zE>u69;p{|?X)~QyaNzZzSz6IQb(S-f%IeNp&JKJWeu^`k1N#x@d3wLVE zT&J`Bcct!`>&&q~zgiW{bNV%Zp~*Dakf|C)nh_ntIPUk8NFW9mZUfn|a-LIO)FBgz z4FR(qA2I^wzIjesoi*R7Z|Lm$&3b?2s|2b;pVyASlJyL@si{VkyNp?zLbC9-yQA~l^ z=#?KJ#?RyDKqTdYCA|LfPIcvJ&JgQi^~7mT@AmZ+Ymrk_zU|k+1mX1u zK%b;MM(YWQAE~BA&S#j9bUWQy4<^0qbZ9$wsSi$fjyH6v11SHR4r;?kWZ$?=^;+hXma^}8$GE^W+06C(c%%G3?NGCpIfH?%V>Oh^gOj z`h+b%yD3xrVE_DxxL^AW+i&27hT{?$3}T_u%B9&at0S~*v`QN6Acb0?|>U9bAFX-lR4?PQ_hPv*yiyI zF^_Im&U$AX5PIu+jP=dxiSJS(@h04DQqrkWStEO3sJwdI%3d=~RU*_Z| zu%8cdh{Jybo|`hNHeBWmQh&J0S(y?tvS)*POW1axY(mwNKV&zwG=fRQ%|TFpBVeWH7-%dnAB(?|RkeFHYB^akxv+tV3-hh@e3hnux@^k$s>& z4tGf2g!izEkhNeIx%My4z@isfJk27KtiWK4Vdc-o&cO2GNSTVh?#wsmgrgAJ&ok5g zB5FjzX*Abu&oY$*MyA_v6RQnu@4+c0Kf5{WU6A*)omqJUGyB0?veH=t`{@Gr@5*`^ z9F6mr?_^~TDtY!!rc;Yw$8^O~*T2q=$Ri<7!3C#5Ce@99b*ADzb0nmzI=!LQ^yA-v zDb7+qd&4R_QjpNOL5o6cZu2HG<)(pz2jrZdi=w8AnBc4VmL!I3I;@J-lPak%IA zabnk$w;UdMrtb^hcEakHZ(&esf5Btu^~ZT{YvKHpw;^2bRUg0YtnF|d`;T$jUmN<4 zgnDhY&GFyEnHg>A0t_7dUDkm?LAoz=_v=WGea~d&jSfs{G(Z01ER^aVl;gj1e^$cG zneRWzdKb`g*N?K^1#2*y-^cwngJS3R|pM^3M9H4 z7kz_n2cOT|(r3TpeBY*5UH5mLhx)&Z)!h(AD(#R+<7r&GA?*LHHr8vy73Pt@%sk@$ zk>9G?_Z<4a4Gp;+jzE3%J*Xa*`tm)Pfh;xleWyQ`GcR}_2A>7$uJ>US+N%mafIhNU z4f_Bu_o^iyAjw{};{)eu0<_{E&cn3?h(5Py)El@$DufQe4HRzg->QmFoW}esQKSy4b3lhaocxK?ls&oH_zC9Vmb&8;%)<^(TBBMc zZik37LHhm&osktC(*sHSwSz&@+Ip2+td5GfdGKl>=3p#_IOdc9wnbhJ*#2FFOFPtQ zxSl@fbU0o(?^DdP7NmQ9>Re3A|BpU%`q=k8t=`17F*9ewjP76Gs$)LaO9VH5t_lCk z&o$u>ey$1M^9u-*z3G-OoL!c4)6dM$^{?tEP%`EUR8${x&-F1h zX6O$C@c)GVe~P)^#2Up(ad$BAc4ge{UV(`v17y;a+~)s9;nh$5Htzl*!<%g$Uq-fC z+T-iD>hXMcC3tgaf%_7OU!HK6b;d?R76gpwp~twBB5amTC;ltbHz(XyJO7zC(3u%> zX$$5laH%hHn|d3~5FH;T@u4|4h4eAap+Ep^5&qsS$U~odod;o2){TSIxUtAB0e*g1 zXBl1c>Z0jP(0}#YpTRYxSFMhm$-SM{DaRRBM*CO`(`q( zD|gG_9G||v+%45^@xFA6)Q&25rs`bjF0g-UsdbfZmHpdRwX@QFi^D=D#r^o0o?Y!W zS@{QV-)CIagVKGsv-&}eTbs>^FV(mW5UY{S?$Z2cz63N3pJ&ov(AmvC*;Ad6gz9gp z-*tAqM8`%UkoVmS-Rcg$AiZjJ>PfZkdjWX+33id^etu|0KuL`nl62i{z)WrFGn4Ml z3*w_UWAhz}ZdMZPFTwov!Y!bo;7#P44Y1A=11|0hPt<(TUYbRZ6k+iwE$CXpy%D& z0ta>6|MfQYK|hyzz_R{s2mkOL{UNZwqaN+={>9py{_X(xT`RHc+3f1!GKK!pkr(z4 za*wsFbje`1+{)COiDVwst0S4C-s6V2SE1h4QEtag1K0w*a`ONYD5@;k!Is_0kTYlOSC+mE41 za#Hs1hU>RRxLw+3btOl+U5;q?Szv{V%Kygxf1}mm90t@N)$vEW<>@Pqa*qz7!N2x3 z6rcL;nj-_4zH5{_)T%<12N3#k+E+L6Zj2Wi)*;>DtmE8gk$l_)w|g0O!9dZYvd0Ay{9}n=^Gy@nJCdy-KW;{UO8>BC zmqR+=l!?0Y-8a#lQbPL$!`CE@l2-$f_&IK;h#6d<+}S>Gu*lMq4km! z>NoS;Fc{1^#ogM@Gh~fu8*8Wo$GRoy=TC8q$P0#ma2W*w%jUTk{fko5&&_jj9&dAc z@&a%=yckbih>=~hQ`azwYNwxG=ssv!t?H`N++Ww+exE-Ooj$V)w(~wMLNSkM%(?bH zb^apgBhBeA7P&`RDCFLext&8UfSA45o%H{X($tc{#G8655EK7@4q8<|TI?R3|L~jb z6!__zDzwBs1DId6#O*N2xO0iy#d=WvY6*nIgX-WCw;NU^&4TGNLm-F(nW z(qVS$r`GO98bq?cYS$JFLr|ygLX_52WUbyA*otGI$A?Z)ckdO^g>jh9k_8YU9zvub z)<1k+!mG6qXmdReX|<1&)dc*Hu+)I4UvM$?=eJnluxbkHe6sU~7-v8tR9s)EW6&A4~) zEf=Y=8##}ArVxq&dNgXGH9()Xi0ma2N%{jQ_%$XxEOPoVrNNUED@YrXWs|EIq#2PM zXiQA_2%5u2U|r3Nj^Y-MQdzQr!SO=0Y)3hJ@lx4ereMtnZYD8}Fa+hvAS@~}cnC^X&An^Ye5l5j@0hH`=6eaWQZh%mUUVn| z0l!8d+hGt`(uTlN#+Qh4U9Us)rf~mp9@k`ehG8Z(+n#{$tc9&&z+GOllvpmmAeAh^ z2FucuWXa@J$!Hbg|Jh~=;NSWfhK#76^b(8@M#>~{`qntOnMN5>^Xpt3<^r%QKqU+q zI1&?df>(c)%msl-$7(<9F}Po6gbt|nTce)zrRVwc5pWDh&f}Pt+n~lAA4<&AOps}x zW`atB$4Jd6zS1xO0K>^C7bHPPfGZ;x@DUNW(Ug*t*uE)M+Ox?2xq-X}kZa%gGWEmb zL$xVn(fLfU+E+}XTAfHwX0aX~=k-AwXlztb9l2^gx=VI`Cpg)?`1I=(|*q4P$A0{7*p7pI5Ho%v|A&_yb7 zQmC#mA*18LouK7vgtAHCuMlgeg?mOlpR+buqN5#RpZOh0Pfa-~RFU$qT#8LBHrGqB z2~AU+_(qpN7mQwY1ah4PVW~4`}_)g(Q)M?AFXE6Xs5PQF&lB0D@qQ5FiQi z!2CfumPRC`JWXc$<;X#)9FMmRIYS0w9U_6#YXe+q;lc?UR~HcV;V% ze%Hu%27hho`efc|t~7avWZoffOQt}$V)r}Wjx}tYmT7N5Rwrb5!;g*Wp7NzHAm#icyKft($V~xXO2}yCOD4p zU^I*maD-!jH|H(8eBcRbE~AR)8&}Z8x)9Xwn0e4}@W?D;2Bu*G&&pXO-1!IEDSp7l zJRHH(hE$1G=XnLDO&AtJtbrZaMPq3i`^lA~$Ua!5Y|cqvISSJ(KY}zk(hLW3;nZNh z|7tzo<1wcp=d<;rK+iTDX^}=8K^~;qFqEH#p#+Zf%9jaXD51|m%0dvlHpUT=8bJUV zO~J8o4B8GK7lR$V_24FeaTP%26E%ef8-6G-h~cm$y=IgrQ<{15B-RXo7{H(pJpq~M zu^A=iVlp~vJ@}$GckxCuB&nTPUZM64F9@{=lC&>v$^!sD}0LiW#;Mcd~*GA^Ykg7N?d6MP{ zCRqq%9k+tRF@zqM2FSa3D29+Q2-UA7)^Msh3Xz0)Og9csu$mo<3s@fAl zhrob>z5>}kj&Fmmu>{L~bi|36fd##73D&ovE(9y!6eKvDZJ>>~RyY97UILkSryJ`2^cy@E)j|1RJ7sHQEP}BO~(xcf`O= z?U%@10w5xQI|{hr531pg5^l;E^n0jw8eW18?4z07y&N-DpdILx5}q6(NJgmm>Z-k> zHsyd%Kmy|}jgsIJOfVP{1DGr{AOS}F@$|KPLWH+eG129<@Qua=Lz*3yIdR0ycuVah z$ecoBB04t&6XcO=hiB z{7lS7IyNWFVUqZO3o{3I2Yon+bGdl97yMy4#sC#mx7l(3)4Wswz#z*RV+SLZ2OSXI z6+DzoaAe1H1ysjPc}pUJ{&4{(GjNaq`Jo3nv^I8P=pdW-aebCsW(W`M!LZyJUTzqc zF-G43g&k+7=07Zf z(7AKxmdsMo!L5W zUN;1<8#=z0!E4#^H6|sxkhcBjrVz|6Qu@77lA-gO_Zar{Yom+vH8ptzN?0N@&36(n zU6(}1xs3E5=S5$e>LRA6r6 z)9_Q2{1i2tNL-+}<7;$C&^aHV=tIx2L{7Y8I?fAzA?Rf}IWF`Qvwpc5ULV>`2yB^h zkxhpNHBJA&O$Cg_(B=%f|7TP{1JN-}0InRrbp!o7=q3W^jvQRD62S=?TA61yx|l$y z0ofb68}km2m(@x7ll%0<8Acu4nvRRf6#|RDyfRdj()6L;PHxUnk+uasQKxJpB2o$@ zYAYHBc5*;~Z0wQ=YGML*BlLR>f>G6VGDlmwq)V8i#<0$o?AnAV{N0Bxhr2+yvroTsyh@}66IHFb)5Ho`&D2}8jdiq$I zzX}BTUl2>A?h&Pu|6hrvHi1NT(`0l%Q0J}<{n`G5ot}{jHQ98W-ncHreTt8+3r&Vk zO38(xm6rWmD}C|$&@tGIXscgt2wiDEW2sXv3Jpp<4`-SNd!I!tV7jmkYf4W;Q0hDU z$1a#ZAmSkGAc#_BPYqJx?F0#F0EX2=8%@w#T+LO9?^!wSXAu+IV~evaDe5%&G@CO6 z5Q?cJg^BQ=kER&SALGs+q9CLc@V0msOz? zhiNs>)3O9bYBfy1htAHE0CW@JvkG4&l%(zFS_`)*LM%uUXgILJXv2Amk_DFYJjxTy zdcb^q1bm>dy&ACyqU?QI95d`93Ix6klG;XJ{aPFL4DM*P!YHd>>(=pg+u$o0=kWO` zEJOf41*OPy{2YvhIN}XnWYFvdH@+HklJGwSVu)2kFkD*MKwMWy!8A+oWWJwf-p>c< zj<)#wF#e;x8o6L9Od2$Eph?COh%e8l02%BM0jLCAGsYLN-vzB|d$+*}-kEkY9jC&G zh9a4~#@u|ovZoEr!Ct5g3ePog zPBv%-)$j$JnfR^cp--|$NSti|i6m_r_$=B0!0g!_QTSUNHUFW|!<7?|p*L58e((pY zhm*3`a!Vk8gVn5jahcuv$+bz*RmBTL0cKq2$Ru$Nt*UU;=V*cDX6~VcRlmgxW23?2 z*Bt+3wW>~tpQxLj%8je%6QWlNJcQ&x8$yr4vk<*Q__Y%lz>neC5zdjW+?>hsoWmpx zh|8cg>%(Tz2VetZrH=n~&PwK6xmxC}@}R-{xv)9Ns7F?6wN^sx;GG;FA1Iy0{*o5| zYYQ6kr1(HT5l3WCoPm{*dxTY+rWz zL?_Xu=8z=e*!}-L$$i;Lh?VaDx>f|S&``BuG4-$0{~#;2m=+l`F3TWKVQ$bK!3alQ z!AG!ajpk5LUUTd`a4h`H=WGAtfM3Hn*AsKg9Hbz>qB!tt`6?_VTI5%Bm<+E%(vOdK zm*K^wSbyF9_weJCvOYub1Y}}6!B6EA3Ep*l{4`k?5L{#t zyndBepCNcx5L{#k9#)geL{&({?ol;WqFN0s7tP}nvfF=#l+z4S7X34%sJ-Q)tl@Be z??9;x3ihZKm7*3gSGQD(;!`qB?%CdCC#%Veuso%k+-rRNblG%-Cih(B^~^N6*AbfR z#J1^C{?Gi`)7ambcN{P5%j&c{rFfH8La|W|d*J|^2S;AAF!sc2 z_8pMHXCblHCaVC{6QcoP_@}617s(P(cxnd+*V7~r5ULTC}BAXpfoy(0W!1-K{c{~ zbku%fl?-TCMR33YTxq3@j`1veqzOxx$4Mmgs2)DlnAmpALkgg(>{Q+&QB@CZ0=gR( zZEU|)?>9nAaK8%zRd0mEeO`+?s!mjJ5XPB47#QO4pRi&(bU~FI*9PJ@C>RB`bf*TV z8;hd~nSd?NjeS?=z-Dcnb&21Q*mn#pxOZZ=w%v=^O>Os1Pz^+wk3`pNzBsgsJeEkM zPsXm*ISmtCqwh;x8j;!Jm@1T_9@?f_&_`6M#8Ba?xl-hH=XidHH;_cyhvwyD>DU{D zHddlYH+ExtokDGqqFYcxcdZNE0VNUn65tr*%0({BVTfj;x3k((C-M$SKiH%%WcndU z-x=u(V%Hs>zQVwTO%yC2E}D0sY-0Xeb@u`Y(x7bU&P`P&sh4R2&S$v86FTuV|Fqx+ zQ?O2J3f}T>3(kV#a&?gueGh4z=JWtqiTX9m$1eS+Fkr708&^zt`yhR%*u{s!(6!Ex zr8JxUN?a@?kZMDjb69Nsp}FeR19f6>3UL{^R!ZZwzaKoUof)`Tq4hyn6vTqBj7*6X=`wUp>H_DJ)G(KdvGE4bE&{@#+r3JB*b zxm=S%QTUT6Uvf<=VigCU zd;;1wFnNtW4ll%a;J~W~$uxX9Ad5C?(6#|JbrN1a7I4%-LoPg`mFiLu?^m|gGa|D<`m(c7k8+mcmZ+Z$(9lc0& zq8RW`61D2xZX&-}i^M#1CrCp?ji7g7TopEmwI%F4RruBT7Dx-&(Z;yCtwG#gTT2S# z(>8L%b?}|k3HVZiedB6Lqc|z5^EC4D7mZ>rxGTr|DbxQ9-P9D=6Cd&7e!Ru*o6+6H zTFp<-G1c!ZK%|R+wVd;CO*602+@ZUdBM}7w{0TKB1)^5r}xr3m8sZ%<8lD>mN6 zt)}=mQe68jOwTwkb10Z{Vg<0d zdZXj{>Tf+n-&6Bu5gERq_6QMhlg#hE)kp$=+hyEP#I)TS@ zhob0Yhnl0+yD!iWJ2Uqf^evd1XjRek+Y^i~IjPMUWBH9Sl+xDKHD7}s6wDecKjrp?=XM8dFFd^uwf_MqFe4T27PA#Pv*wwlEGL!x=_bzNFuJZB|8zV7LX`sLDc7;zf#WeQ)jWA ztFWWxf}Wx(5|-Yic%9nWQ7{5Y^mD)hA0AIFkcGSw(%eC56h%w#((638^`$g z36N(iSGz?i+;C)QMCXk{Iy7Qf7zKXike^4_9_UM;}cgSvkJ(-8S9G)`AQ8`0gBr0!Q0)*R77fpoE;E0`GwWF6fi^I{`hIR_kKXHN*~d{k$2QCwo4)=cw^QVQg1 zA(ppVc3K751aUDsHn^QnisiKUpxCk5J+o;cec7|RSHg5It&|g~AtF`6tspkl4Ww3V z5Qs&bViql{lNgW(fP~oD!=oaZ@&q?_JXUL$5h+XtyR{`q3f>M^5kb~=3vpcutIl?GF?>+RsC80 zc>v~o6pfaw(I2byM+YDOgeFJTtAjhl;+a?*SXYdaBnj(VX(~3vw(wB*KW&P+VGG zEt{HLS&=+Z9@V1f1Qghj&`A8J)H`|tCRxXDG@T}WUZ7&+L%1O^R1A6SnD}Za1JH8L zCIp!3aOQ%}=m(}MIT{vpc{EHwkyTjkv}D;BZ9>Qv{9XCSs z4gpSe!3a@N2<=jrVJ4Jlg}P&ez_yYYXOjl9IYeZcJdr9{nLLVfAY6E&Ge#jow?|G~ zo180;hjR9NOKWFx_&D6^X6my5L&$MLW+G(KUX+;v-GbY&S4Q>hL?oex7LlWp=Om#B zTWIqsI*ye*nGQVoq?Kkl8O>Eojsm+?$nx>=y_R0ds!7g}3tBKe$SgmKruow6yUVPR%8s zbv;^avV^+(XishoFV! zbf`}hg*o2I5I8e&4XbV=(dsHWgT$zk3rGxHXl3AZ8Sa;RuL; zj|m5+tK`adV(e@u2F!vOtE#lFj3kB_i_S?3LyMV)7AJP@K#a36n#fgVt}3yY0)1_y zNXi;2NdaYSa%nIHn=01=0bWE6^hH-|s+#L#{g=~jYS{9EmgG!Q$Qu){m!3SI81m#g z%*D_TwLxGbm|hbpIa_*xI6wygMu8t5+Ng(&HTx5zQ_q#*w(-l#3Fv476a>% zwnhpti8kcwiZJG?%2A?AQCP0GKyhsY4@<1$1O1aniDE0P7L5|UQ{81N4?^(f5}-QI z<3-Bz$HYfLhn*$2S@Jp*YtzjckdKKUgO*%_QZQ4|72V1f;q2PmI1#e~8^=sJ!*JYr zrN0I!3mJ-w)uY?uoi8;#*i5WYbmc z4X`+AQ+tjP&6sObme9D=TARGyl9yRv)#ogEy~P-sX!dg!DTn$EvjUFI zRy(`GGMteeS8Lg^4gW(xHB*ser*o$YM1@*=tmqQ+Ojo;tI*;0OEXY=ige^F_968{> zX~A59)G+OVSKmTWcUo8y*^U%%UeOu9O*5Vw*bi7knMJOG>@au{Vtlp zjvi54MvFeZv}aEU@^P27TF-VvnC)UsAcKz^G$!5!v8?e47Aw_b)t=~gKkvBk(x@w##RTX1J*Y-j?nL@pw z&`UZLdg*^$=#40JTpOe~hnJ9M3SFBGXzD+Ov&*>bBC#cpMPeaHH~zfrBG3QNiaZ)a z#?#}(&}dutP{rd#L${FpsU`2r;(oGxU_87Ew_(i5!Tsvg@nSR%@#r-s-e2~T`!r2^ z$%g%O*oRXlOsz zEd6MkP&75s%j_}D+Vnq|CV$b+*-vQBp0-#%Zndb>j}!T&u2dJvzXPC3EZFW+KR8YdN<@&*l5@!a(}2Z@`W%U3H>16CFlU%GI)0OCm>|5G2x^T; z4}FMoHbT?6o<300N7U&P#Nhd+nGGl&T;Cn3h#9aYo^?A>=_ZSSP*5hl?1oyaP<*C= zy`V36hd0neSa4Af#~4Vl-=SnJGBq_8ff}r9mu{M_3n;l0amK|U3?mm!6t&T|kz4JV zD7sDwv6Kg`_6~kmJIS#Khw=G2k{lH=6$Ku2uKk)aPvZYm*6LOAVT={O$B<~`VBPUz z^g?z3OTGkZ!+?M#Mr_iE%0B@#Y-GUQi=Z|n`AV#>Ml}*5^3N!ZIWhvwk_R+jg<*n- z$d@xzw&bgt$`SR;<3(+~S&*5f$xOFq5MdgAv+@1HB7Q5G7cXM5WNf#>dwZ zhVk)~5j*{%eu2rcWr?Nel4i?k%Zy0{>M=HP$Z6xLYR(4S+~@=D&>MZi@{bl3PdS^j zt6BIShK*$w#^5W6L^%yUku9*1-fS01rv-YjF|%N?RYov&V%(E6A;cz_ z6V;HI)@3#Zd$0ZqzN0LA6LT6~Z8^&>VR*HVH0OD=U z7D6`@eHau%AErWL%*bWp(vXNM^=IH9nng(wOek3xst?Q0!Mv8P_Y2gE!B2i^ ztwbv$@*V3O(8WSUXK`Sb-ZXBfKnW7_d{lEv4=r80sq1H|jGEbLZ08#LrDI%3B z#ry=B!z7^9F@0E;dKcNui1LQX4YoIw5+$r*d58Tf!rN7d7cnh946x2NbD|6v@@f=u zZaRY^{;>s{wS0^E&9hn+56iJ+&}S{f)RcnLQOXDC?PS#HkQ`W6*X#-1|90F8a_4kR zjgW>jE{lGZVI1E6_Egci44XZ@lK?O$)to=BVJC-{Do+$=H$;FZ@;geICO-lx-$v&r zItk^;GBU~AXv>p{p+YWUododc+`;kZq|tFs z;_yk0ohD8w49nL8E-)+!Y)=!%W({Zmm?pYnIQz)MN@8PIU_y}VVw>!e|PO_ED}&`8tk973eV#Wv=p;+4%KON`~wT-7A)oWrU?Zr zT>W|#lKOh#K6Wg*?J8SdV(Vowt^QtxA~=YJvX=WPZo;;0E$(7hN!Q~CluOA0i{i);k^Jn zH77ndHjh@#n(S3MouxwEHABQ4&AY?EyCv$O8Dba<{qq8>+s&6EQf|zZz=970kJj6? zSA(O5%@kg-2J<^@&AVBHxniaU^L7p9T{Fd$qY`qv4KLTguns4^(ebxon}!AXZQVP+ zXUn^?@b$g60{7?whtARk-m42ddzP3|7L&WO3Uno`0e?e*>ZMtthXLvVlo8XoOY1VK zPtj%Eugf_36fvYOE`NYBVr(~f+yW1cj{m_x^#_df1z1>lESt=-FACHqD>|izVV1+R zkM6c08hoPi=*5p&aE4?L>1qeh7X6P3%b&AaXc8P@5%@_v;)LWwy3Ltf+9d~e-UqQf zF*d%_qGv9ks8rvbEk<;pbgy>V)7i__TT8XUp7ayvb6YI zaRRS%g6p2(`sG~FB|oc~@L)zzf7mOKcI;`QUR^d%lxOqIo_V68Uch?p$WwsE>#X>L zR?K(_XO>J(#5anBx91u5LZ^}akAO{JRK(yKOgp2#|A|HcP747s<2c*>pYib@=Zi9{ zM13${G#K)~&_@1eGzxkx&?xw$M#0hrVl|rsE^p|;Da=D)ZO&zBFCd%q-a1SIII8bL z(Y1?S;;%E`;S=RGFyU_8gyqky_+3_Px20a3Bboyw*I+Y~-I&!__54CHIH+D$wf8EN z(m~)j>iAPdj{<`T`bp&iIWY>Xp8q4@qo;}C%m^a(Dnkrn1GIK=Vl%YhP@7K^b3!GM z)9;)nDl0rJWwxHX5>^M^ozLMCfl@G9s@g@y&nL6MpPL`7I?hGU5HWEWp=yS+%XGwq zCNX@eFie|P!e)effo{^axPnQp7u(XIAI{D~X3!5s;09(GE=;`)h0ls%5>I~;i0$|e zD|U~5qU0BhUI7f$B|Eb{^pH1M3)TCli!vC(%&uuB@d8hdgqD6fK^+X8C#pX$5d#Xt zJo3_XZBvw*yBPE1kUD>{7&tWKU1fuAUhEu~LT`@|FMBi`l=+#!_;txj!qL8bl&{`d zj3J{$4aB6@1N%vmCaMNFk?=MvE;zmoPm3~$qY!Lj9~C1OywcA$U-3J8p= zIr3ym7%X3-_G<4j8rp{~6$597y#0tr4H&WZ2041Ofe{lTVlMVgUQ7qn)c_;fd5~(1 zyvX)Sfk~v8jdA82CWdC=U-SMxu7K9Tc>k-V+UEb?ceUv)Mm&MR^jH-?HEXThgX5R! zEkk+3;hBn)Rx9B40Ob|!wn8J>aw_&=bZ9?HMT9%5Afa_os1QtGe4~do;zp>(WumIK zM9wBc=NL1ooQ^d)+yfuw-qXa|smsK`;*j@(?dJn)i(EZ&T*%>P&oWV_xSH0SSvi}= zHLt8SuFP{3t7Uo_j5pFOtQ9yN6RUO0g;aO;7bR*}e^G>$DlFr2l@C)bb=GoGUlx{8MR%ZYk#u3c-)35#k_DHOpa~G34r?1R&t5IP4W^zt;tzzj&3ocaj17!it?d!{4v6U)&=_y#vt7@)9ZkDMCgmS4OaSk@qU>d95Yt?dAZfRSx9d_34*=m1@1 zQhm5eFTp}pP}OIN?kJm{x?M~*!p1g-!Pabt(31^p0zm!*-64vH{YP!tX4(=$TOh@P zwsi1!X>UxH162cJe3-^mT#GYQyN5~Bu%>B;W`(r{y-Dikv!1Q zEMszWBl>`T2d}e`s#-1l620(_Wp^&E(?=EF9*K%;9(uQAsqTULPz9Z--8ENow-tD2 z=pOEs+bD78r{_G?A}G#Kcv=$$2M!P%lJ-kZ@! zP+A|9R;1oJ8*%fB+cN7fMe3fj1){UJ`As5o9yL3V?P9&AgK8hW;<{C5Qu>jH#q$S%Nu-;O{7g!0r>_7@C*W0VruCc%#E)<7v$4`#X16} za~ijh8O`rdlcw{&+1HcgjZ zBE%~Z<9JWC;;j(0d=!wg<=IN0Q;t6EG{30>51lgNl!K^{lL3s0G zL8voxzj%=-M~aUw66Ye@85^@ne=X*RP}Gx8i|Z|GW_r;x!n3W->f-0b*~eYAnStvt@X&(}A=WqRaO-dc(U0pg zk2s+TUq8Jp_=F09(+A!Vr-0sS_*-HnE_>e+Wwj`2jdbM=C<4B%ck7Z6#vvJ(m+SIgdrN$X z68`YEX4}X+;D|kH^*f>!myg~NJ#g{Y9V1xmlx;_WL+hlsNEU zJXaWiCk!t!45iRSA3atix{wLD~yTfBQ4>Tqye1mWSbZirDaK z)mP%Aytl5xOnhvymfUt9)d~%yf=&R2|(sr5#EW9HQ_Mmla5Ei z14EJV&n9XMw!W*nm&v=#cZ7GBJ(0>0=Y|Q=S*ZNT@YeKa(cCDH<+9Md|HM zc$*z{9|jf zy1Xddo978WSQH+C$1j7&=Hl?o7y~g$_$)we%r7d9c5z_;)_ z6R`#Aab1I748J&j2vWXwBEyyL$3X$_IH$m^?lg7fFQZXqm4(j@!MjOKIUUEO%u-v* z!o#h&+E*1WR1)nV+3q<)adPihFjPg319o~+P>unOWcQc$Q7S?OD+cWR2FIR<2a9LRnqa?lN^<))3f|=CCZJ@-glTGTA)t`{M zUkTC}3q>jJOnqf-C2$wGS-8PzOsJU#uF4~owX^~?!;LVg+3a;9>@{tvyQx1`glnvb zI#?0zudb^MSE;d;;i)Q8g}Wc{?kwJURk%CAyDM-9;_0?cR-aUbkM4)XU&wft+Y@&> z9uby}33nsjHMi9d|L6cud8}Wy7jsi}_#|~|4T>+U3Evf(DBWxP>LP2RdZs3PH%~4iBUrS4Z-({D7$&`#!_#akT(zI0yi!?ruWq z{qUU1lkl3PIl=tt;6x_Mv|hI2G#g?Pt7KgbXG9@E;#hh_$USZ-z+33L)bGg|^v{lC z?GUx_jTg`OXG8P=5X>B@)nMh47adBjf62gpw}vIHg|=2QBUy5?mQ# zRi2vYg_mQ$qDvV>k=52-sC;gYS^t2W2;;akp2Af1w(uVoKl;JFm8kMj zAa;!SrQSpe&=PN=kBxwEo%IuHT{2vk`#BiR`vM2?0RZ)2GMu~QOLk}|OG$2UU~_f- z$C~;_%D%EUW`Zpq9Qt#;R$c!(UH^rw8f$bp-UeIt#)4aR{hdtxg+cv5L_+oI5+0Ij z)*A+MftOD><>HJuESv909<)683GgqA>R=6;kbp%l#~~u5%~!XhCZKK*ZA9u)ZhDsBkf>e-q6q*_hi+~kBvnU%3W;B}^6B}EjJ>!L%&@~(*={|){&`UOHbwgJR zRDp#*vm~~><;Y%~<@Jz_y2l*E?hx97{}my@jcqW~{|1c%+L{bkx5L~-e(DymweXrq z$)-aH+0;hJ&%1UcB)EeZ13W!=^lrlY6Q$6fZTJx$un~ITWg7;)S8O2SRd(msC~5wp zd;04(CCy)Ln2g?lUBi15t2H^^Tli*qZ{rYF?;RVqlfT)rhxd2euRy0KV8mKMj#)k_ zL(fMyET#CXQIooai&A0sw+7jj$Ao)tWTXI{FTA(Fecs#j*MptJhypqtyrntc#Vwhi zSaN|SBu3Y(K*xJin}?83rv+ErMwR<+2DOdjOvCrcpuXb0-;gx&9X^E?ax0~|@Rn)!PRlK?I4;0Ki5Oe97#%h1f<>t-UKPK### zA!sJdi&c2g&D5XKOu$F0q6wv>9&8FHQo39ZnX}r=ks0v+k)9MU5Udvo;7e@opNNM) zv&{!|n_t##eg#nyyjLy%Xzw-dG4%do$$IZ~3+tvD2ld`xS(FYe%x1FxXb$M)s$+VF zho^p?!Ng;{`30+dydx$avoNtTm_V8=f+I07Q36anrZIthIxR5qcz}st5EG9ZOz6)? z#Kal8To0KK#YD091e^XO!TKc$`xM*%E8YHI>-PVKVDBetp0;Ec@3$6g+PdXkyl0qI zz!VPnvs#{L=Y4fouW&r|lMD*(;|(_BS>DguP!MqaeHM(F1_?-&g#;uA5{iL@`!o`e zQ>O(Iuo$WboSza2KQlHUZ23)=FTI;BEZE%wJ=wdJh`3E7;&zRQ?-1}i*o0lg#+}wEiG7ub z%k14{K|=0^n(ggjAKA-3a<|o+o#Y;5{VL?$Ysp&gdr-O!>hwKUBY0Lf@nQOkI-z&C zE_^N|&l;_zEsa86qPlNMqo$pABrUB*R{7OH^7(-F0t%?Llur!D)=E&Iay(GamVkx=jT4v&v4Cx(}+qx*!bQ_yFjO#)$+zKt7PLO3-C1%3laI760u zXUZ~f1>CJx;&~N*XW_RREvZVLJsLZaVN>TCNQfZ!){14Q0Z+ZL@fito@tsbr0tLC6 z10agY^Hjzd&!&R0M=v!+4fN-gD`i46dG(l6v7V8E`Qw-=)l|L}t zFNJL?C3+Bk7vUNna{}&Y^-T`|6r3ov;opbHaOyA4vL>}j6BGp z@KZe$ex`@Q&uzcb`vN6-Uoy{ED9QVp!{JKY=pdGiM|ZaH|{(ot7_ync+%$x-IsquaIE6~rpuQcF4$%G(Nbtuvt_K~omq z3XbY4K+`jE$UI-*iOR;AoB|pRtu(a)0o-NjB-nCLU7)U)$rVRX*YTDVIa4BLB&z{Y zSP$BL3<5iV8$!)FKI#ae=LA9fyjOsq2K!j=)exAGcp#G!5mdMU(yC$JYdG@`?1q5$ zq_rzS?{~qp5y)pPlQ|7IGY%~iP1jmoB)G0n5A+Y0&MZJO_5xh6Ul*;`4Q!D-iihSC zHcRvQ82~|VhAJnTNdm+B-@ttq8AiwXQN;4v#s4y#R+@vY_MNoqL+?{2nSTZGPWIyinYCCCy=kfpNNYr%M~MSZci47t!ER|4KZS~U%Y zwDM8XC@rm0u8~&9fP9=(9(yEdRfvES-v0x`IQ$BQykM2E;qJ^8>oPY>>M39>~Q>z=6}#aA*?lG&Ab8I~3kLC?|*G zfdkCq5`)t%_rIp)i16zc%ys8CNReNdV|Ik*=0&jwy}q$~pFXZUTULnJrmQ&|U(W#tpAA{lkG<|3%9?Y`_<_PHYp~SMTH0hy z?l-VI4e#5gg6B~5tek|68>l`IJzv`LoFm8{zNXFaY*=0?d@xGYA~*^#hz;>M(xW(m z;HN2oT!K09eX4L&xZ9*w0L=2@dLW8pAj0C_xHw<49f74Ojv{$DNw2`tq@C1x5+@W6 zY@f9a*>V1Y>Uno~xO!w%xHNU2jxZpg#j%?MWf)$-O*AxdrqjlLd_6jjxNtOT0W+uy z&t-73Fjg&>cY$n?%a&1;ghm?ZgwI1;`}+dVKOL0F(?0SSUEX#qiDkQ@{hRXy%GD?Q z2Vb_#l6iXn4>SJ{S@HhiW&PLeS*JG__A|3yhoAkR7iKo_w$;Qs`GD9_$TYfG4LReQ z#3_*ubjf+z2w&wyElV7ZlrRL${8rus1p&Yxd4hl`3}Cb#TPO%aRCWinQm>deR3cMB zcV7?_sURM^|D0iE^jAD`^u)KQL@Y((6M49VjHW(8KU#2#a{&Cz4%}%PpC}sejE^l8 z(G(4D_>7(D*$Vnc#AHchIEteF5oSo1HFMXB?1^R*dXCVvqJJh89kR|=*7VL&)<%!RYbv8 zSQJhs&|E(RD}HSM*yl_+qN%uvzSNqw%iP`2%{~BiY zW@h#l3Ltf>%JN!f`L=MfIkLP1S?}&McS#B7%-;)$D%kNY8iIeT506xTM@27M`tl)7y0yB^Q z2FZ_2&b^~`#N@lZ--J|>a(u@DANqGF7IZ5`4{|I9o#%TrF$Oi9NmLhh8WR^n2a4H~ zmNOmVg>xTHBdq^Sz<6&8#;kU0%bAGc<&?q^m|(ESqmgakZXOctIJ^})2f%@M|5!_C z|4fYXy*Y?0sOndSQB!77{jUlqD-yFgB{3(QbfD|2z~WRU5o?JX7?Fz>?vX>I-BP`M zX%suXJ-%T;45yefG!i{2S^TOLvHc=*?a4uO@jnR5oqtl>8-k2o7fD-|>#_JF?8pLqSvIi{EpTEHXI&Pf z7n)cSNw)NI>{+7zu}9LjOHToDmqwEI35jKl=aRzmNU|v+&qv-4>yMkb8i42HadD8B z&x1jX1H^bAQi>P2=K7qbuJez)TB%_*Tbo9>QTIrToM>Lto*dG|YSrxAwNCANh0RBt zc+$zIp4PH;+jd8dJpD{u_$bT>$41UzC&@tu?xT4>L`Ov-WQ~7ZldzoQ2Ekj5$p*8e z7!62V5R71yeg)!loe7pCH52c`R5^X+XG}4;!>ONsPCwd{A(qq68G@u(IuU2cSZAm+ zXbS!eJRg4s;4TlYTcW@~3J8gzX;5<;oFPdD;x)t_2E~$#5{q z^T4ObPlt>70UXkp0yA*Z`S^39Cs~LT#maTFu+yPih_j6OoMq$yyfrrlVR9trHOo`qyB~bTLx`rtv&SEFQo2Fyh*yO_0qWI2x4X1Pf zQiKRg#f%;4TF$wgg0RFbLKx=cilar|%%ET>hZ)A#!Le?Pf6S}k;9Xdts#Aoc(rK4? zd5kz?ut?~PPT_ki&UqIU=7_xzB0a4B%gc+H4yF*XRw)+VK^UxJP$eepbzX2HQ3&6+ zhJu&(vho70_T(@cyrd}bJTjBV8=CUSi?DAp?^60;f|ud4PGS-xG1eL9{C!~TE?g3j z7-zo%X$qATCVGY`Zeem}U`N1PApmE3rj@>U5d4Lep21#8N@_Upl%c*{Dg;aoZbg<> z8rS!VZ&G?z`Vtxw+VD#pEU!%W?DR}*5V*p0u=a|-m!HqSmsPRV@Khve_-2?XhtvvZ zV)g4TE;tRdzXM^MU#kaueI=KaW}(4NT!m2%HsAqaj#!bJD^{egCN*?u6W4Is?^@dX zc_s|^e6CMjhk;e%dfZT#SYV>BJo6Q(`Wro*HIvv3KA;m$SutE~F9YB&sKjo_*vz0%}3sd+d} z&ycjSfwH0IL{Udey@HLh?(l=TI7L!o;XWlbhl)wneljuIcHGE7`l2{sj!%^yV<2AqC8^s=ORM#kOYvM&uYoQ={!VE?nBm}l{ zag~%b!*t^=OU#+&!3ZG{axu=y=dcdmmBDgNoCJqMZh3QNh^jU`)jFcmo;@^>FYp4(9Ppsg&Rv zpHYs26PRi+L78z4T*!>h3Q7w;_`lLj1%wAH%V?gkz}y*v6Ot4BiW|=%zFe%bvxeO+ zY8VA*2?0hm0b&{(LW>H4iR|Zr3gV4(&ZOJ~pSVKiOt#)&58oH`q^GyvELIUh1A&Br zLQ9QO4cT)brj<|`_RZOdD*>kYgT9?f=^-to0c-aK`LJ9e0YzudE;Mf`7(f(sT0JD_o zcdRJl9sME{Dv>NvAfgk2i6XjmZDENH!gLaqI4qSo#f~nr8?o0hn|^dmAZ3rv0J23b z7u{sU&e39Xz`_|N85{Y>KXxE^?bsj@z)4sU8>TqL#PfpDG1U}|j*?+~hG4Z=##c2k zU&LqcoMps&M??n*X<$p_23&~(>B@g72&uCc^)T02mxBHx8-imvAueA%yd;qq$XKWc zje=5-HAp6xVuykA6uLhyd!Q%!5zHSuUnpB7FLE=Mn?+={ESNvs=L}bhHUK-4*~y0r zh+0F|@WQG^qcxag6RHq+_v_OKG)60gsv#{APjY7R_;;G2NrIIXs2Dk-HsuI&lp|_W zE^1SXypacfCPMJyB~4~?VQ_OfRAD{_#>7BNCZ(|$g^yqn)eQeQTJ;2X2o|R*7E{Q< zlr)bK!DB@57}09HWKkF<+DfqIZMwmdI+ais{LPsKzb@|HT9$i?W07FNTSC!&9-H98V?#8)_e zt47pwUEz2mr>5*_g%gPiK_PYaQI*04^ev_KMr9}*MjBNVj zU6|PwE}(BI7)P0O7KO_ZV*!y=6@?RHq=3R5g2nSS7EwP$l|f_Sq}as#6@|-%!m+nV zOCw7pUGSSS3Z8>Ep=D$}N4%mRCPp%JdEJy#eSbaa%RVF_c9M1|vs znCbE!#~k0vptH2uoC?Er7aGdDk)NmouRC#R)Sc!u1Px)UnYMti&puzcBvjS}OdBJ4 zc1^NaK!$jXMKlY@st^fUKvo8HfrW@+0l~-?aJAkXm|+IJwa@Klimg`KS_QOuJq0So zm{w(Bq;OeX7Gp{KAR2mR5nT9|=*@%bZVI0<@YBbb(bJ5o%4>Oj4_2Uvrn6|C9ZQTI zy-eL@a@*1Urt=Vbofa-o#7&0$*6!mRxA3A+u#Ql<4HL`sz+>;>e(;Vio^M4TFmX>G zZmT2j+4p3gYJm!Lf_pMgu`mS=JSz1gLZ^2^?h)Jph^vwX>z4Bv`0zLzn?S-aqPTCK z20jNnFQKIO!OCM#A@*F@d!TPGo6a+c@`{N!bg(gF@+|r%FG?rwtQX##qQj2Y=aAVb zW9*Wh@`wn`EA$34az`zzg23fm+>^-gYbkw>;VBar72+;p<~aLST=cZlTXE6T_O{|$ z&Woa>_=4ytK93yB35Tfj64>YEj9_mp_vND2c(Vi`*25 z;6_|ykSjxB)Sog%&y%c^i@~v1sU76WpBM5Z_9`R>dSYyX1ci{i&CAz44p5{YRl?y*g%FwCH3@;p4bxJ7U_um`uA|kL7<%~WJ*4U@?4%c>DF`O?#X)Wx@LsaUM4;aydtjv=|49 zDE93`;AvJMaE5Xy^?|4%xHS^*d($-}Hw7L9Gg0xv?z(qD9||Ey8(g8?$ABJ+3Ql2P z$u^F}^HOT4Bd?dlE?{se&l-q}Cvn55H}J}3*72VsR*!vQk)iOAKR9GO#s9e)|Cp}u z_-Ft1L($0b!pV+#6;>BKg#~bH{WrLWK z0B5b=gEko8gIk3uZ{C8)kqgI%bmIfAsZL(LKcz|tJk3@;bwE{7SrIE zOvr*wKZ-J9^D^HzXpF;}Os4}j;$H>35EZO znLu?#Reen~GOWHoU_$c%La~$R2UbutFkeEGFfD|TuVp)uCxV3LVF4P8(kvyMulY(8 z&u6HzuY{zVRaOl)f%y%@`U)#a_ES7Fz%-8Wq~tlCRQeoG4Nw+CHkk&ht#~2vZ^0@Y zQ80=29QEKcES@8Q2ndm@h+v9mIB7;ObizL#yYiS3_5(sSxVX+ZDCRFxCT2mf446Jq zgzC#+R@v`GmHn5fvfrV~a=b=;V)Ec4NAe+)1)peX#b`}51GRqUJ<~d|F&mpUFl3lVY?sr9Tk!Lm0jxA(3;Do;^=Tq>x zRWx-GVyFPm-vWew*e{~E{CW5*L%0Q&dAKq(IEFhDgq!oiMilh;xkmrp(myP}d84z$If{-&eL>*oL9eyDs-5H}oEINb+AxJ3k0;R+S#8gULA(WUpj2V?McBk^XT5UP0 zz`0iJZCnU_zBa_`Y>_7O62bdeT4*Co*U+OdTk9LjKCc+OKDazC$q%LR{ zE|mI=v*7l>ksn;-WMkyO&mJXlbJ~&+R+pBBu)4I2XJ1@y=vvM&NEF*cSA_bS_$X3e zCvgK0fUe?!m>b1`nAIWd7)T{<3Zc8PhKFTt_F`f8^exytow$`>FIo#+u{-d#P;!&W zFB(lwtP5dbYCW+-_&Nhm)Z7tDPETwMB`-~E0=}8JlP7RChj@T01Qkr&9df!RwuF)m zkcVH9hb?N&1DD{lA2ZXduO9$o1+Eh>yqQ=vvW-E{~5rc3iT8#=+mrK z&xl%;!lv72S)ra|)f{Hy5@iP;-HFJ1k0%@%$>6OA99oClX8=0>Pbc%3UEi49Nq{yZ^-u?ywjeuQ@_>SHxC<_-mIGAx4ay`Eh0JZ zs2snk&ZIvosJ__1YVe!LLH7?(YHXD`HWz4#(j7 zedL+l{`VEb2*8(_JNAqmi33!f>R=$S56R>>AB2Vq#J%o>i=s_Z?Xb~xAnH;(=R*WX zopys`IJHWbK7)i$7NC>C03594^(F1Z4hh_KQeam?^pZ-BPUWkrRB{Cs2C!EvsECzC zkf~*F%}(aagOOoC|5#j-;rb+~)IJy$96|_YNixIZ2_RD^gG}9nk@=!387UbCa2Ja% znfe-)TwOAsYg90^Dn@^j3`6?I4$mOd$ljKgOa>X8TL|V!Qei;VV#-b>#p4Uv$uNK) zMc4DxR5AloRs)3&fX*rb6-X{X6X2du0vskGz`-yA?5pDv9Ph&6+H1SSFZlaYT;6K( zr8unr3%&y5Zn+$%4x}z(!4->|xmk6Q0kpN?4&!H8{2?2?6f8$_-hrzxObbgoSarjc zZmzs`hePI1(3{1yAUd;_^AY;8>J}bW0pR{(a(B)z?zb~NPC!j?f~h3b3V-R>68a2I zP*nvd7#Ao`(C5Z9GCAP_AUQ!Zz(a#r2~eCw1Sgn(1SgT~oTOkNCifd?VqPq~C}(H{%0%2U1UYjq0<##BbCFZ*X^DD*7UO)ueJ-+@3#K^p z&Ucw*%wVT5%_b(eIh{R_vvMp14v5qu8H7BUygXXRS4XTTW>-fBR8>b5c|aY}?*H$oBNEK6jtr=( zj;I&`bwtJZ|5P1Op{Sfy)$xPu>L_(DLmk->!h$#R{QpiJ-&REuR7VEjuxvmb*H=|X zE){2} zJhM~7R;#T~tiG6b$<*o({)(t~>!Qw-G=q?rlx$Md21Mv^ zhN#E=Z;3jKq<6#qXBRct%OYx_!|hn-)a{8-gg-0lERv2`us=$x*(c91ARqk|QDZvN z*Xm4BGpMRk3l)y0bOSQ>|DveDL^esM2E`asRjY*#XNVe#@ZXCX)&sK^KcfM`_r9K> zq@~$T#klwmL#jHNye&;|Dw-iL&Ia*qHx&opN3K4~deeT?Pev@+XG;b9LQny{WY(JY z!-(@$D1i$oFo+Tt1N;Y{TM@f4urMuVhOk11Z{LNSAJ9?)d`H3lNaKda(SDALPr{9R z#S~V)gL`X!0y+RLi4A#YaX9gmO3d&Uw%}b@gEND;LWmcI=|^+W+Og%uN7B2<2!1I}p>nMa>vXNz6mb)BM5H6; zRlcTbITQo;uz(D5f#a58F5+PUkhdYt5XY6}QmxFY zc1xOb=5Ltg>w@0TzaSdUzvYwI?;(6I8FJ*kDc|rOuz|6sP5UW$%?Ts_SBA&p>@~Yg zoGs@BxadC33X2JGWS^p%<#reot)H4HJn1DS0wWHv*n4nhht-r}j&oHSDaVl!IB7U1 z>|BBS@-`q@oL4q@UYYaWxCiP&vFZfwoD1ao(=>kLH{5p?zW%n;=qB<#UWBB?5;g9E zKJ+zE+67QpZWRZ@W0+)(*p-}iaBzXgHE9;FMbUa!-N1jomT87?Hx?E&!&nVq-!0`t z+8c&*J@Ub6garcISt!5c74fJtUlHdzPcVzpf&uxf=_xrtI1;8H;6GP5M8pJ~5oaD! zSO-a^FY>sR$HF5ixzqr$c^8|2*0Qj(SmSybxW>Jk;CiXzS~7iu$MkZ^^eV;lQa^2H zrN{J*ifKt-MggxWrshY0V~Lj|ysi+0m?QEKm$`vIJ|c#s*_}`428*NKZ7TX9cO-Tb zV&-wW+Yqm;zLv8(osm?8;=jeq$*nRcYgJBGYdN{u%gJpjC!psDPmu~}D)BQ(Dgf4u zdFh9<2GnoUnZ3zpHl^Ju13I|K<90zua=ale`t@m!1;d*?hBr!v?@|n}*BHLjWB6{x zu%s`eP##EZeJULRu63U1@w!R)ORTi$;g4@PA?dYxZf^8*qh-c{i8;hoXiXs*Eo|P{HesxC z&V%7%1A7GUi8M2@$4tVg+UwEl6taHOll4=+te+OLjwGHTkLgqK5cjiTe@XZ`%5oR4 z5qX}1et~j-F$|>L6#h%$l((SvG6nw%LvarivZpTz?-G)N`kmptAYU_h4DHIV-dzs2F}SMXOQ$8VQ+DlOZ0EDJlhZ27`#R7Sc1@gYC2zyx` z`@*Pj!|cb9ZhCRoAhEYpiQxSmRU{cpyKiR{%DYty<$bSE7#)S+>{X@mu81iMpB4vM%*rYB`Y78(z5-P##T46C$fxE~2ATrG_kZ-=7d|(DF6EY+m=uhQ)yj zg0jKJ2^7q?rnuv%GqzL|BP+1NW1Tm-DVe+SQK9+(D~57;LzK&#={teEn>U@Xy;5E# zbS$=!q$!Bq>>dT)e?$sT2?|f^6c8eANwODsR~lhUO`3){aN^PE?a^2%XxyOF;FU%N zmd%Y^*r0%mXWYc~(GJz$<T;YDaLV2*>$^Vq+UtT{Zk z&$K@<+0*+p?0h0hoyGJi3PSeuuzfS^d@dD9^feeHyLz8cp?n*Az*D9#1+w#%(j`e% z>e3gUE`6u&%L8(NXXbY9g2?0F3 ze)ib#tQD!q?$~VXH>Q*=8-3|bd_*R z@m+(X&+L58S1f@OBp{;@9S$EKj#-Q#k**eWBvM*>K#4eWkn(i9h<68FAHmpbAtGJR zSeaw5>$GfG&UF#DXiT(TYH^yZH~0dY;BkrK5tAm1(nvXujKKWh8ma|I8uK&Wm3jSR zm>xz`92`*KqG+sTE(PIlxSN9_z9-5V7Z?MyL0-yk>Gs$x0C)G4Otae9yAAWfjX(>k=Bcd%-Kt z)gqE}lPbGAQ+g1S^S%emPr zquYfq1?C9>Xd>Zt>4b5ZIgNw^dub+b!7UNU$))0UDm2H(CDvoa&)dH@0E&?>Cp*v? z_3!^iBYQ_gU9E;KyQg#5&z|WVVfh#R%mlyg6eI;FyGk-#x^lu zdKssS_)eKSuZZvTiujH+<6iE7CUUn~6me=(M9eN+LR;n!@@L5F+d0}VqP``9m$!#- zQ@9~+%%2FTE^${ExL<5v1!aLOe)PJfFg4f+BD$X9>Q;ycP4E7&J#0QQr#``e^O2&( z;Xz67<*6z!>Z2U$3U8b?@NjeS&G%@t(cabGzJEGKn(Ci*mY_g_ zCKB*Azu{K0nFPEF@pvoA>tj!_Qb}H{I>Jiwve6T*B<}=0$x8C_z>}@y5fZR=!-ZCu zmw-Sf5gzXp5GVa0oQRD>evnSYz7i0lYF@x6KG8GNgE(F!W@?dNPS{>9!DUFF&Pyr9 zh<%9!7fW!F1k)+gh<%|17f3Kof(i?x;|TUb3Cll)5{}sCOV?ydHeyebV4?&QBp5Hj zIDEjKIAf)Aj0B@4I8TCeB`BAmOoCDgMoCa2!8sC~Ex}n5{6m7jOYk=d&XnK`0F1ls z)1~t?2~L&Z6bVL30O^xalnepNi2$WWaDoIVQo2yi1W*%#p%Ora=z>BKK)nc{Y;oR5 zBvdg%-KB3o382t)LA?o*5}+c`g=#@?tOUnM&`W}z5*#f-4+*+U&`pA33AzeU)9xaj zorON}GW>3s3$2-Bn4w5cF1E6{rgJ?GOXcE)7G9rjKh#xFC!sfSZN}N)9EUeS!QY#9 z?*|NZ`Be-}2)9Oy6}1#sny}P@Irb&kR>hG?n4c8*AKiYHn?Oc#on@E{sSD9DxpojD zniU+7SRCR$uSy(z8H&Ftxb>Z0xU2#T21B{Lk5I3DYR7o$*bB}Ma_=2-hRuq%z+du= zO9I>B@CC)jtCLrRoCic&48=#>u>^qg7dK(W0AMv%3;=G#ia{!H4tzwMJCV?>z^@Ay zmWC?uo5q`f*7+ryLOw-;l6Q5r8HFUyT^x^?l#qYyJ4Z+e{$A0x1BNPE$VSLo6s=dX zc|uBl$to$~UNZ=(DanfgDU#zZ42lSo#bDfmfZRV$!2HKS7{q9FaBR58puc}IDj0;n z#vs>ndCQ~iF(@_(aXSbGj$j(a2%V$qp)@lY1b^5M!9X!?&viD3rb2)20)uypZ36U> zCxIVgnK&qg`%q-HSyuOj3LnCIJszS(i9N*a;^K2I2z!X-DC{?Ov_2GSZ*Y`@$X-dJ z8;O{;*avHPzfi<&A$EfA4LR6Ae=CY4GS)3>lUpwZH}w<&JU;|3oppdX6ouI8w>)Z}*czUT9KN-wJdK-k0ZR8@)!y)I6&;Z&2 z79);0Ase_DM`QyF52D8Aa49hYJ8>_^HaTFI6&kmwc)^gSXRkz-3vp`~^2B1h9fA}e z5yQ1^a^L)IY7;9m1oq|N!cRurt$&XvRR#(L#Mwuo-1!8pAyQG>3ny#|`PB)f6=foY zc_52d$fpp4!t|AatXJZY?g>Kv6*zUwle*#~uR?9%PqmFw)FdIl^qPyz!fe9Vz59k} z(~by~$2>@zHw5x>I;6s#mQ1K1-VFu#^KzUJnFMWF*OwNSlPAD!Af(; z)$+>FG>-wch(^0c8;?U^w(kPWM0TP4_<%N>BGc z8j{ofoV)Yq>FCPgpWO6J-B46K2q03kmSJ1@(cDvAup#>RABEL~hnUibL_g*v^(XX}quozo+r*b0KI3He=V6HY z3r=1i;EeW{Y6kl&&R~CyF)ic@1DsyeY~ZA_ENc4UhpBY*HBag?zn!gp?*SiK;)mvJ z-0fNmA!3R~B31p|Lpt$#q~YGMFjZ9hy3b8t=gGE?lBvqg)Tqz&^Y}8 z@(fw*!31)x;Ab8vgQ{P7NN2oeW*Xl2KJ5On7y{B?cfc}K;#WV%oH`V@vj5I}{=t0y zhk2i&YEo(@tI`z^3v!EQKAoJMH92-eA?hn5nQ0azX0fJTMQ^ELoCFl2p2Lbemo@ro z*63?knXgr;&x^D~>hmK>jttRPOsAf&2uZO~pl8&o5%Ao$F?tR@8J=x&&y?TJkos>Y zZua@Tg^clg7q^m~wdC$L@_sv~j@CuQ7!&72(zAz{ZqG7#nATQo1oW8J3mBBy>lC2A z1ob4SD?uGJ1Ad)$d~?J@$I=MN}2#AyGch$t==@VcnH zNG8x%|q7dDyb+qa&(c2jK#YSO)>bzzpB4;FsRi ze2F)e0~4w(%wZV~w;PLyB=wY!8af=_Bv{M z64O5gf=+biDbv&Qlz7}V-C-Oe*GJ=~?S8ujBFcA<85(U_y^Q!7kF<>Nj&Ur$>%l)5 z=Hina{Da}InZQukOkh}SCNM-c@zFY5rOTd2K%DTFUjap@Al}4Xv^83{D{fMVU@d$1 zuE*G8wd!(V8%0jP-(Gmc_e1kfzcnuq&)qxT>SA8wE{o+Cb$j;7oko(D-WeM=MCEWI z=-F^{7bfD{gdMzzu_LNja`~D^jU@iXP51X$epB-jw@J^^)jjIQyCfL$Gjw`jJfKLPF0HSl2$i*OmH51%0 zKHqA1d4gTV{Sok{KVGf0KPn?OchMVfG3CweClrCKWvG&@O0}?iF3+7<5Oz`!l;eb0 zb`}Gz9ocL9C8q*T0>-!DTEBiU}bFqfWmTsh-)xvvGy9^ zUozH^eNOp>5Nt{#{Z`0B+7DN2&=353US2BJ_8RV8Ey4wjfec>bW8)p1kVEAF5bkXu z_wyFvcCPboZp3ZaGJIsEGtoK_HVv1j@yw8W)D&wSTrWPITM#vpW<2EnG{x%Jao($% z-eD&pb?lZ;G`%}q`t5pO;&pPreJR?)y=g(J5J4juFQlfzU7qpE^Y-3P}8o zZ*pI`)Eak`h=O}RWe|edO-5;jlkkks2-5({SR~|*zszdbjTqr1?(joh3dIG5$HhH1 z?64!Lomi6wg2zZw)d}~3%dE!cweIVeStr-La`{dp8AGO*BN@Z}X13MDJ>_z%?h$_0 zk|_=gL#RPe)KGG+3DpL~9z#^r>n^v-%&C>%UvAwR%}b|n(=2Ooeg!0Jik!H|TxB(m zJ-tWBF^6(|)GfctdKP6+G}}5HV90E%B?@NpY^!xG6kU$gCGvEZyKc5M2m%LdZJ{fT z=U77$`9^ZdzaBH--+rTZ2?2$PT!Af ztSBB-X4E4{kb?wv(P5%dGa5=zPd0IJw4yK&7|BtsvBOmUV{LT`G3|z7Z6PF=Hd|6s z_?&TZs5>aYe0BkV78Z%-7=NIJr@I9onFTp#6rvBD;~x8w**s;!l;j~YZs>t+3k?Mn zVrL}9}w)nzq)nvoWJ{a8~ULHPW+QztL zW}kGGSUJ-j{e?LWCA8-Yv$b9&at>g*#B>K8FgG+-s$pOiK_qG=J4^Vod(`9MD`B{| zJQ_aDt?@*-8{#CN2=|I^Hw|m1+wRfuEEzfz0i7QU|J0TNqA~Iso|Us7rM;1U5H}6Q zCg=wmqsyDtXzcFW8ckG|&#?+jbCY|;Tx*TFsj~Ui)>Jy(YpmARx?Iy1iZa7=pNQwT zbbGbQjk_b-n62FF>*vJWS#8WgDNLTB*`%#NBQ;}&8Q+Ndhv5c0*tqXT_EHmEis1HJ zZr88@IiwI0gW&>%t0CUj;0+*eY`g{L`XFzZ zKv|&f>IONnvk;zcq9itOAs-Y!#tfd!`B8BUAPmQrQ5g!Az@}?_U6*fh6rp^>m$^MZ zWH#45e;y3VjGx?%^Q@UdTsaOtqz#64LNgw0nByECi?>20YJy6nmMcZz*cO%lm~UNe znj_p#uCofw5taGZTYXJ)N#*bb)&SF7>NZ?t6}gWuv})u1wS{0+coCerNVrx>@ZKWp zMR;yrY~5xqaYrt}*TwK*LYVWSSQ7eD#3lm60yDnUy>^L}Ob2!e1b&D>&}q5U>QmPv zfZ-uNU@9!%2zNRH5PsiM>tv)8TV^#imsYl0X62ZL*UR)c9&hPWB@bPAJ6Rr*9_d;G z5qp&@5_!+HT7gK;a_cyNAAB4=r+suC$J+`MTz}dy%_urPa>8aHUnd=EqvV`y$|&p4Tq+2tX>JF2R19gkepF5beYMDa=>|}a-C))JpHexd=T?=jWMiXpN;Ym)PRYg%$_X|WFLtlF z$!g(FT509F6|1aCHDA|4Us~*byULoF#jmaF-e~p98c=ujK?1JN60mQzHL>R(DoM%x zPs%B||5`aE_n#;yxPM=8pPj#=HCDeS&nRRW_fh3U-1`^13)fhEvSy*i&DNTl^OpF! zF?$IG(bnB}v-Mln81-+prc|F=Tla-qt;4bsC|G-tfU#@;Og`GWKde0nYi({n2;~b8 z7VyNu0_v`_4*N5?oD96IxqSFw0rvWXD9v01{Fx-{Zm^o<@BQ&HRAw|V6Dp71V6`^Q zyWP?|tg*0*FWg}jg_f^bw$bVZ*D)KdRyEjla;(OQ*y5Y>8@Y2fT6ZC&+a~L_(5F9C zzPHKx+^j$EIt&WmH8_+@K06=pkK)~Zce6Dr^z#pH@-Az1% zPT69mqA(}c>ToE>jTeLp+OeZQlVOGx@jh!S5CY?vDE!y zhjm=L@0JQf#n~UCe4$Wej1QF)L2tu|-)D`;|Av{zxFbHn-F_d&154aj@3Zcx`H(~n zk;=VG-TC)hgL`gPezL-CP)?cF&B`g$TA`dEuyAQ*?FTG;>13_j6kJY}^obKLq*!+39U&v+VqZ>+rd zY3q42fA6oz54wHG&xy}kujuZhp0lnsqwf9BS*O?fhG-a~$0wkWX8h_Vc3I^Jo3qQh zGxYl^xA=LhZD{>3?wq;dHbpyrLBIVjbl?iWW9v}ElXlLY^ z_#hlyad+Rzd55_R3PO>}TbpwP zBB&hnmNmyj_IAH*HLD*r5?EpnSv66ZT|-9Fgm&Cr8F>fVV{WVL^{#bm$lU7gecw8( z?iLJZiU>XA6RXgj-E83 zyu-LLB@@dhjyZ2aNr!&rQ^!?In%rST$&@h_7gg^1!0Kqa{q|dZ+!+U~hLx)hSRHbz ziR3Q$$ZAsg<9F8araSt3>yPTt+y7)Wa~J<$omL&<&p%ivSBG=PkJj-;9i~j1T2b1e zytwfr92Xg73!{IPm@ zfY-jJ`{d77%Dw3q>nOMXFV>lr&;Mc#H{GS@*v&DX9`dX8q*)!8O@FsqREIMHIC+!K zJ$L++^2tT+ow;@gx8irJr90_o>$J)hzgq|L+^=%%Zf>Jrt)dR4B@@fWl$BJJPj$wZ zPdu+;v@>R^Q#!i5bX<9vQ!&XIRqh;H)YCb?yv*S9XY%U4b+%n#O&&d^iWQcJu0r<3Pe5 z?A~wLf7BW{ZOSxfLV4MkiV_OI-C^6sospyeE-%IC*th<(n(EGv*=M?DOXR#?p*_-F zS7>jn{3K@I6stU`xm{{jn^WYXpmIxNdwitwo)-2IW~aZ-w>#XiJG##wVRyDiPAM;$ zI&I2D&WK4B?isD@X%QBz`TTWzgs-qvpJKGoLl>~4zLJ#$ZIu+})k+rtagN?H$z>^ye+@XM2qtGogHHMahK8PQNi_r%YzeI=Ou6R1~)} zVA7OQ)PUp5FZ6tZ+T}i7W_NNcyCA){i|s|#rFTg;d%&_*cF%-L;P~?C72q4`3`V6c zMV0P9aoU8F%PZVuH@m=X*WDh4DVx70*Y~iOxuIV6 zDEINM_M*CqO){=n9njVu(2qkiQRCY4SpDZR)!sr=mXDdiK(rcD?;@!Ux#oa?^Y#a`#>AgUB#FR;sCrvFGf2`Y~xBbt`pL*NNq7Bj%r%oF+ zwPFg2vHiqJW##TgUG2fu=5^&@`zUv2FMC<#(}SUYZtNJlq~m{C&F?+NPP*Mn?3#b6 zt{?86S`1w}@Gs2m?kI+K&)H{nt*#u|{I;ikhRv2jDK9&9Qbl=La`NOUlP)MP>o;a< ziTB!HnDNS2s=CrvCD?M>zKkF85Xb&)bkr~Cr&Azw?zyWv50n;I3Pr<6|}J!yPdWxGN4*{1vU z5c?zStV%!sl~q0L_%>{Q|-dar-#~&&B~95*{9a% zuaF7Lr%aVe|5xc&-g~NjSdHom2o3ADJeBCOb7J+~ht7d^{CbW(xgQEFS@Pbn+^GjI}L1YCrG?pnY?ytl>gMEJMX{1@S!ouf7Z|0VFl*LaNIkszT; zU@_i@;rAT;8Bh5?jdwDXT8n^ITEK3+Ge3RZavU~Oij(o|oBemX$HT4T=7Dey1MpM?aQDEil$YVHa(yN`;5`n% z%AB~-9$&yR8ZMyIF!saaIPqo}pGJKG-{M{6b{lXg9X?;Tmbx+uek@-;p~L*})YQ1q zTzVU^DRCp}y>G1_H|l!tpQa9yP`xY(HH6;~FXH=JybOYxzs|UUxJn{5@NRi@QrQx! z3DKSm1SOdgxD%TD3b;qW{W2hHg@Hu>2Jkn)(*U;uVkfD12148_F?uwHgjCgp(;ZrD z*XY57&bdt%1Cb`6b(ccVOY+XEB zDMKfqDkPDE#9C(|c0Y(wH5FqzttSw67zyDC((03@<$f^Bu9G?fIQwhJD$`QLkThvl zcfg1 zLO>Gk4tPcYk9GQO2!Ji%h1beMK8GaO4b7(NFTeo~Pp?bh7J8l#r;9)?{ zs%*oL4Z?45Gv~_xKF_~POy>9`z&`LB3F^dO1b0Wk#{h=_UW6Y_Z>*+FSovSfCX@k1 z2p9zT1?(L4O>wRer^1h%&j8-xfNKEB;FtJOx+*$nE?<9BEk1#b0_DL#e3uPI-}-++-=dywcVMiHX>L=D4_E~;sD(fc4eTL{I? zU{q7ZO^5SjQ^%y3lXninN;)oR(b#(KlO!*UjVD-5w^u{#R1jl%sz)#*%um-p!^=5{ zuKEciG1xtEh22238G3>20T+sW1VuK-*-ANL5@OxLHuJ7UW~BD9^NAu zjVPKGpTqp=M1Bh-@*I#=vp?v`Oa>yGGTr(x$3~c{bV@qshqxMjWUg?NBVTx#XY6Dm%?TsDUs=2(kHYWDF3VBr}U{NdW5Qo zNGi~^YH_!3)YjhR=RsA{mWW`=72ptRT?Vr1z@z8b`$2O)MH!dN%>kg+8opq{mOR}2u|P!Pv*wPBnG*afgJAhqb1 z#&KgX;A4Q;2xMG;IL5TB7bM8%UU+aoQ=?JbI1{iG@D#uufHYaTh&Tf9G{E|RD&Baw zIiMMW`27Ku%90uOO+E$l>?HMXAP3RucyK2VBlb4jG>ZTl>2H^gX_C7`8XyejLJ)B>_XTB@=g7z`Yx|s*T)}8J02* zWO^8{0a-O`-v`2M=%^|&GPNJL%6iocgtZH}4**xGVV886XWoXTJxJCtzG>q3NPfaQ z8;P3$)j)i?7OpxRm%&d}sA+hoO7giF@3fS~fW3u}VO)y_NLbHd@K6L=0703WIvRln zc&7#X2{}*+9MjYv<&)+Jxa)}Kw>}G7ugs$G-FIi%4N@#<)ejA}63V|yE745$XYrXp zV*uhW$4|&S;QtW(X=_w#^CQBC!cF}o{?0>7_v`qvt}6dUEm8jc z;F0hGl)?og7_dS;fOB^%IpB(ebsDigo?Ge90=PNQQg{y_H68C;^b(Z>q-CSY#8aJV z`xFdNlliE+`2zgZtbepkW{;u{+@1UpL!T#9dHRM|5|e-X0bO-4=_5xBqCKxJ>hW62 z_Kr*y?-g+W4Y+l^bcZ2KuO6G=R_2K)6WgF{Xkz&6K_ClGJqH5rOF&rV@cTfReV^ZZ zWBhA@tID87AZ&bw8@jmy$hEyxXCY8$VpRsRVcY>+#qjn3?ydlCC2*-IeD()$e}h{X z3RO3DYfJ=@?fWxDzNCXM#ua#1!;)f*XO(zcw3kM`9l}os1G4~?^ul;o(n(#1CP7v1 zU?*7hfop4t==hD`uUZb3;3r6!3HClp_7QFXq{UKwfydzP12-QqoJw=72(JPG8gM?# z@vam|g%`t*6B~-)NVr+Q`5cCKB@KO|x*7bHWa>M(CW`KP31k`YGI3k>i zu&#g&0rx>yMrv-n8XHg)Dp9(>MlNlCSZ(iAg>M)Icvm{E;Jt{h8;3yj7FzT!S)%Vm z^m zE)l)nBYvJYWr=5be0jTrO5XD;wrAlVobc@$XE z?&!3BOJ`Dbl7YAc#MID(@#ec*Zm=5&#n3YqK~bsn6kLg@dR3HBMak+>?JQB(BC0a% zO!W|op{ys-RLWaD3DA$v!*I9u6{CfwS6#H!C9+|B40I)M`uzxZZ9lrsd@n7!N_$C00c}&U?Dw@~96Th)LF`!g_XX7b+rZrl{>Qls zZ^Rh%t*&unIJ~X}vb0AV95LZS~k5CW( zsv@iQnD|{Ze7X-}`E@}mK^&sd$kS|Zwx~&@s#h_srE91~ZH;%8nu6CL=epTG5u}=m z>Ltv!UOTg;d=sM6Dk*Zhj3$AU8hA3UZXI=6loOwefuCWvbz<|!`=!jt)iE{~#8_~O zv88Y~5XoRhZGx|g2WL!m9ua9%CTAI{b3ejVhnU1hXaaAzz-_w-J5c-FX24UP4$DVSKtj>3)8@-8A(Y{8XD1oGloktv@J%7xb2fOAYS# zB7QH>>jQrdiOvC}p;BXKmGSlP=i(*htP1pzb1+Cyb-C;*U$cQ@j1Ra!1_6cJ@AFLD ziU96cz*V;3QiMSU>1Rm>F3Rl(ASn?)Xtsb)V}a>%&4onr-E; z7Fr%ijg@uxd>}YLI3AE93IPrSRN{LRZnk;UC5mrEQch_oamUetY7c)tdq(q1cX!UclW*Ts^3CT;FpS zTw_N>%~}9T%7(9cCbN~=1-G8cjlflfzaL>r+erMkfO{=)Rqcp8>x+%JWpE>|s@Ygq z1TyEZ_>7l<(t*FT0`3QatMU`Xod;YLSNhTSTIoaB*N>y|_0m^zZ3|D1p{D^32YeKe zD*$|&<6Y%k5&E&OzqM&Q-jx&|!MkGcCA=#dDjw;541ZhYUvDD6LxAcCC_>BO$DRzI z`FK~&M$hwP&*ymf^+wn(Nai%a=5QZLWIUgPadyzv^P`p#cTllyi$3zO=M}>!$X&h+ zRRRBwSo(<1AF7Jpc^56ZjdvAI!FWHPX)>ax}oy68%4ruqsxjE{u%d{_Cm#Jxg@eeNb{xHj1PQ!C4Ew;9<*HhWP5K z&}b>Y0l-)F34S@o3Gk4s2%-!w)#A_7;xp}+`^&kHBL>JVtTW&~$vyuXyY4Ax;k6Jb zjR4uE>#ZwC1fL)k&YA1}>_tBe|26@Cw$3-fznNUED#5F0mu5=C8*Hak106KL*A0|H zp9;v)VJE;O-~s%Yn;YP!tTqDDXxtA-<$T_AzXOPoN6PpHFB}=<43d>FHdxk+?tsU^ ze>;BEtzY0S0#yF%J^waCWJ{s^H+cRt;Liqm4WQm2!^`*-ezMU=?Oy+aUl$m7H{8lR zjTtKI#CM2r3c?1$&4N(PQU%=1H4|X2mH$1Se^1XJ!1xh<%6t~Q=%t~oOFMX|8l<`w zGlog45CvqSR6sth;AWzu0Xc?Ji7E-Kf*+YtMHggJ`4c}y5vvGYhs)*IfhdY|;6EQ! z*faPU32~u9`7iPOgZQ|VMc^wu_JJ6GFX;9FR7IgR)`uAm8enBBfnyvAcP&wSOPJwR zyZsus3GW~&9tDpEI&Hpki|8Isu*3bvD?Y95q~&(J25We%DW`!PEKsIumzvAnqLCs#*E*U&qf)^G-sO1IS}f@NMG+ywlLt06ZPA z1d!HdGYE1eX1T`vzo+>OAxNL5(Z%p7M508e;7l(WM&qLm0Kd^BXzZyP^*Th=8#1j8 z+3~6`{JbntR|cZq&dm93h#ozjCHh@JS3)JzqQ5Sp3&YzTQPk5A?|RwMe8*}mxw2OEelzz2;dpOv5y zmaoR80iKt@o#%xCOf*KE>?5Cycg}#^2m-8A%6@Hwo5nQnB&oKgfd7DdCtwE+?`ybA z;N~+?qf7T8wBu3jQkiw}-#7(b*c3fg}Bi8xB3yLldnY=(pQ@t6jSZ+jjjKj>xK^ z>FrL~YWHk&BD_@Y`e?XG?VYcE-Hu!BW^K;Y(Aj#Zr=NQ9V1I$0Dh0aglykR(dIqW& z53&i>pTW8V?_)tnsoD@NY^e6m*I}7%H+P#|J356-xV5+0b)zRR-0i>3KC;P08fzzM z(M}d9^MMkb0hAi<7Di;J-Ed!J#H+Q4oXJoRjj-W1*^Y<{fKt;N~0o2-Vf z>H~~Yu>ea2%AG)o-3b(BiF&(Dw%Lu{H@4fh+iR;`FZvJ@cE8+i9~XTbuX%3Qd+g(y z?Bc6OZIVWHvY`6>Jzz(SiQRAS0Xr4KxBk8Mk%zy5h)NkQ)FMt7Mdyyb*N&$!Ns%W0 z_jfWar>fB^>N}vPrWD5mSD6il2XQ|DuF{KH2d67LNS|qhmjGGS>uiL-2Ch=)>TrLq z7FVV(GPqBZ#HxdHY&1DVGN2|of^N0X!vr3cAr8o9UAYw$O_)l*;5=Vk+uzMBhW&8s z66pehsu&Ig!h*Q^{CDKNOuAj*#wYXq=V%aCy4eqbdilFM38Hp=>sl+?G)O@65Jo#530&B|8 zKo}0#AMOss!lM(`r-e>OktxEejEVm*&|tTikJ_~VBK)`z!zY8Gb3Be#0IE5P1$bB0 zR-cww0)ItVE#Z%bUu#L%*b1hV^`VzgOuvh@>O)nwhEWgisx%dR1kv?IbQj!5is+)B zv|o!}kR|$0K&LnqIaMtLbEnAzYka4nXra;SqR|q#_>%y>*3VS^Br#oZsTQ}F7FVU) z9&tHGuO5H4LG%>+Y0*b!iQW^@bt!0F+`ns4$7hK;AdvD%lJfhgziH7cvP93mx>6<2 z*_PzTAtk-!g^9^t@=LO$d@-UcO{UoV=%VCTX^d~m68%aBi&RB5psH^w)X<9H3 zikNx2w7SZj3wJY*8D&1`Bx8C}+xvY(%DC3wJ+wM~Euv5$ZxrUBjnI0Y~UJdR)0#Kn5#m_5l6_)!8Q&X)593joYZUb z;nvzI&mz2mgm)8I}wov$`a8u8Y0;E1E|AZp+8FH6IfGXdMkZ^yvk8_hxVUT(; zUN6D#Qv5E%?{fUu=(0&;b2|gSnfP6SA0NHzv;N~usk1WakKUbm1GuWxiR0mVEjm2( z23ob3MARGf5;WqC>4``8*B5s6-HB?tpZNNcypoNVF&I|1`+;b*ib$G;Bzb74B8y)t!Uos?dDsXG^ z1BgZf=mxIpzu-t*2JS4lz0ydf@3$x)C-=9gx~uBwb0BmI5_AyGDyG8K*kdxn zhms>aHv)&*=JWl5%(~I*%SO?rs8!V ztIp5<0O8*>Wb&~WxT+f;oCfaob!G;>KLl<+iR+uHyz&0p-mn0nvVglWaM?xTgZbr* zqMHS`u9&TX3xgz{Al)Tjqeaupy*H3m*{uo?-X3sIo9dUlTDxT`*+yyfUpLV&l1+GL zI=`l-$mzeGUA68h-ZpNdF-q zcB&Q;2zauUVHojgzZGNI6B5z=GhA?raV_)z^I=ufATAls!T^9dVR+89zVJmg7!fa^^C|8y=NeGZGmRF7WMQjQBOluB^f4B=5~D1 z+r4{^7Iku#sAXtMRGZ~T75Sa6MV*@^>NupT32q)f-@Zf2K*)ni*R3Y!&V_L}w$RoR_Vqfx?h5N z>cYtAsgKB#@rx0i9c%Syl}=aLbF_Rb)Oi8M4@8WEP37P?8w5(R?yN+WsdPrc!c~(GhGV1wfLmZ=MkXmR%&C9e>sOb`uFo2G z3%uOPtFe=C3jEj>uf9Yc|H_4X9NcHY-3KrRcp{)qmiYTGuA1C6@UMV>Pe5je&s}hH zLZDH={}i~JVPS0GYj$kHwLrN1qPQ_0@N>W-!1Dmv3w>+4JZIJgZZ^I5!p+L6GsHf? zsFoY|Hj&~n<&92*oKwhe>NaWD7xp6^Ck~w?Iq)8QdizkN;Z&gG1%czs5 zl%G3hdVU>ZmQNouwPLEGW-VT5){C51USacvx0A;jyXPZmchx>SFJ3doC^E6p<&(OKD#|qe zoZAuz+#-GN%|b{zBta6B0I53r$-a;fL?VG8Xh@nmr>c@RONXR`2*{$iv162SWpP6k zl;}9)xPXj0qod;t>gbG$fQ|zwvZ;XM!u-y?oe-R7{KF@G&sL}E``+(;->>vIld3A6 z9s9vYnv?zAk2H_yS7q)ZY2z#}RB3GCzx_yaN;}C+QB}OFlrm3?Y|cT`-wwHxR)vhJ zqD-7D=3e609WMBw5%bWJD%JI?RAC&cP|A7!r%yKBc%?Iy+gO)T8C5FR$A2SOxzxE%5`R%sT-46evW!%gxI8nd%i?sgzeb3ue*Om0YR5@r z)1S}z{GV$C?QtX)P$o-)^oj3QS=@sjPm+kJ7ISkkU^N}24Fv8iZ622q8N`T963UZzE%FaP%BHpNKH6M7r5fJ8eW)IQt`eEJinOsV zQE|FvxqtZi<^+Go%SajR$dkCtLSQLLlK2$=^agQaD>X_36}l*LS!wNF>A%?$b6O;7 zQIwYC%4JbFb*c}ZXs&NN8#8QK=Jm&V;^I}Oy*TFCEt%`IDy_9;8cAJ5r}-oh$F@Pb zJWHgKBvO{f>DrBc#*=)A;M&z@0*==k*Ufkry?B#b+J0J3z@tvmIFItzb_NIQ z&nXRd;eGHTyKC5**L~q26x`y|M6gzXbWwy^4roV(aU1;26NPC5ehxqmZBc>`t~_^b z7t#Fjleor(%GoSRa!nM+Rl3nXbR6k%`6MAY2Bs9GUlKKl=CrC9 z>)^Tr_nUCjR2KKVlSQ)?N1@HaiW!b=#`2u!ZF}iYvxzt;$QIC6RNIZ%q@E{7;S&1MM=7 zQ&O+w>rzFLft5^rT?@eH!zOPV-praO65Ovydg&q^0-4(v^=`0fvRKv1U7S zTa%=&urjHf9O`Ci$LY-FQK6;NPMgBL{&L#7^TcGo<7rUf`s0Q4OQwisyNbe+Iz*jU zd1R&8y1e&*i>8S2El@45$lf$2T8xUf`CF$52^MAwaB(1^a*H& zH6RXaB^hv`!K9p}O7ncgA9=i3K($ChS3zIWk`ISTvxlX9m6$qh|EElLGtW6yE?0oB z35|&gb-|kYzSI4*-!_{AgB71j8sUp1oM;%fOh88%qA^+i27lu;aSUw7RY_hy#)Jt4 z{=$QnxkVXK^7(Y};}$HZa0V)%ludLT!&B=) zXjc|_Zm5}7mqk=wcF=RilcBITve3p6Y#_TlxHj-J7E;xJI74h|=T(&xL^6$BR^_U^ zBIwnSjA!LlEFnsSbrHYW-#1Mx>%fs+!MadjYnmwE5-jxh&KCnS^q!F|!+f!B$ks~{ znaq}TSuwA-1~u!PG2Ln6$mcwMt6zVt*wk_| z(#A$)ToN+}<=eWCZ|9Vv+!WOPl-!BJxA#UnUPXy5;xbl-%;uTz2wsxc8g8kya%35C zp~H9j2als5LOmQI5bBcZN1j~OeMl>hG6P`*eIpjTO0M>=pCy*IU~AI4)XGw2Srnz$ z_%F^9+gnHnf=(9}5?_V6xz^{i#m-LR97F&w(dEuMp$9+^iEz8(CvY zYM(T56YZ}bE5wwJC5TPMDM~riS$xC(qugLhi#iU1Y8W;F&)eVVuX%;o&@nmb z=WGO4q{N(jSCDjXIn@pA;6psS>lx4UkRj=)pyX<5!(K1vh^$4qrZyoKWR}4x)VuwK zbHuEzOm$LdC>X?0MQQb(VEv-qD8rrzTd-hg`_2UmR_(Z8XxH!#zAH6y60&axVKBU7 z#h#&U#_n3Qe#w#r3kc}JEyENs$Cu(5gi^62Z(_|@p(^=J!CU?h`fdAlbKLmEYLdh0 zJS%NnNb7^Q{?&=ez#tzmvb*@MQXNl9h0yfM!Qz#Z_Pu`oJdtz|4=|WaNhZtWY52Zi z=>c#U2c3%?G^cboH_Nl563fm5XWxnwMH?EkEvuCkWl4X67=Ob1OPYDq)`!j!6FNLXMuHL$-Kn+%1-PAG&lhDEO5VAQ4@G1Y5`66vwSH!uKRC}k9XmT8bo_l||tWTC6M2_)J$YG`?v|N6@blo;uX8bHG%f;i#RzW+G!@)m9e-)8JWHsWT`*BH8{MZs-Z13 z*d&##Kxk)^*nKI8{l0U>l!0y5Y_`yUaHpm+y3AuZcpS%H4mK|G>l700vr=Ro;2PpW zP0BGU$~gK;aE1>aZ_e-oO3ds}Yr$DEmtlBoz@ltn4@TpHNew zdcLeeC*TEyVF^vq>L0r&jI=3~SO7RDVH!pVynhP(d4FndoeGKrwRM3vmf93@LY{;e z3)MHfXYA?lrPsK~TvV6Iw6yYD!IfVBsrmYW&3gCXHtT9htBm7woA4J4DIxd%Iq>WL z*nC6BFbIbrtjiCu6@5E+Tld=OLpyfv!IB)_`NsOmT4HH|?^#w=E;HX5Jko+WS2)1l|1IV!DXYO`=LH@iXZn_^YBg_S|}jj zrcLmblCb*M(L2o8Mae@v?zY`J6PA%Q2It99E^Qe7+x`dj^B^=*nTF5;yoD$N^X~7i z+nJpb6HOI)RVI)O=IMI}#n+5>3=hi_g}0DIK%V+O%W;TU)Cn+8s;d}|2}&3Jy(fw7%91~cwA=D4mgHC4Ez;;X6oGOQIW(f~E_rZ<#389T1ys^s-4XK{Ylhyr=ltD2c_Z zCBDgH3JGx$KG7JRfx`D%A@?D?&EKY9jFmMe)y!@3i(q+ubZ(dFwbP17Nb#Cn5>-)_{a4`c zS_<4C(vl2#V7WCf8T~R?*?VHQ{ITB7C61V}DGc2FH=y1f&(5)8VkaW{Fq_B}Su2m| zk>Ir6(YwdO9&_xfD9_^v7o?ulM}ysdT_%pZDZ^cJr77?wpe{xy1jS>4KRpv=M`Kx3 z4voP*%g~u$1tZ;y{I4>xw8Qg&dZdO$PLOB6CT8kedYy~a9fFMF?o3QdVriC-2fKPl zAI!z#4r)fJoFzpL5L)?fphewl*B4?<8~%W*$qL8-9Nj$;?CBl+eu3g(PzGk5B`6Uz zaQ-B5GrUq9ThDvDEvpLNipNKpkF0x&T_)Xw{TuhQY>1oYosb3C=cvc0gS7`vfn_5r z^ArgeNvz;XJ;SrP!6g68GO-p8&g&#HH&hhhs`xF}GVF=|+6CeWf87c^2UHb4f<@Nz z@<9IY0{_r*k+fmwTtYXY_WsdbzyE)JfA;_R{kg!;ULh8As*s?A%w`$+hBf~@LAmTT zm>S)uXZRcu3?tFC>m|!S1pX^4MBXVuH*^UaCd6}3)c*w4fq^eU;4opN6Bd?Z$^RJm z=?j_A7Zv~*q$t-q9NXF#vhq*egJCODNzJ2(B{04D zJ7%R=jJU+8O|6P4Y|LQsLg06-6mh2}E0|H(KRA>$1TJqZ?ykwy3+%{n&m%-r7AI(=p907*p%{jDUVyqwu#qiQD?J#bSJ?*1H5C zc9yGX6Xb7i9Hg^hb(AiXs5Dm4rz(Gkzi6>|zJp(cvJIKdlwy*E?>zXTPS=67Tq!kj zD9^5HoKYKz${)H^v|2pO)KtY}aC|Dl)&4uDh^t!o<@hZT!U!V^RK3P;ex;ZroZjg>DwWxx;47or~$8b(z9 zk{K&)b-kZ^syMR)BjV+-G;tsJkGX+Wt4)|50)`dN8<3Jv)=jCB8yhR?qx<_1G6g>o zPFYB>B<5ZI!B^qgC))8GWVz&?z~){*=QJ_cqR9fmRu;C#TgLgj{e5f2%oe?<6iI=R zk0FmPevkjoX{>SSz&MHPiEU?Q<%y)G+|}poL))!{zh{pZt~y-e5MwP`hiA&_s@ge zj}JE5-Jg2jXSXz1hpVk0^0%ENKGI2WVNvaMw;_aeXE!&N_gYz(KGB>!UIOPCZ5KF2 zQV?agG`21Bm#zYghF6J`TD9g(@r{#IRvoM$fh_AANBXI7D+25_#cGEGIIpY?Y*BfPy$Vcj|u{zfP7aXBvp9soRuyHm0tq=WEnEz$UWQR`k!7`dic^yYFfo z^^(H}QL<0(y>!e8!Dsf~HRjmhZol&sF*De=_t`Pir+l_CVfmh2dil$>YsC-AU zpou~+OhU~5wn6LSY^r@%Bw8efBV!G{UL3jV zFn+1AvOaozulE3oh0eOqWvsgvP^%aaZqQYgR2Vz!jr-S zrnY4FG|u(+tf1a>J7%N^H7&yRunD$vc5lP4L+rHav>=@D?sZvWW_`7RnR$koee~`( z?jEt*p^P-U47{OA;f--sy8Ha&r;B+Qnn?ubPq8#(%xe7)e&0GVXJDxJ*>$diyE)t+ z%mi6`!tvKYmHN(8OTA4a`f4o#D4=2$6bcsscmM14O(JF#w?uKJnE$7CSoM{=ibX!d@Z^fs(Cdw zXil*4-;SLK+I*YmbC(kb1~Jcj)-^tZQ?zjsV6DWd`%dGO?kRrBnc|36-Pwy+KprD2 z8qxpKdjj6U4zp9&PoSPsKPCNQGO(jjhHT~jwRg@O zf8=^xDIG;7BIR?)9^6a)8v)r{YN`xZQ?g)G6|;bS3DLiQ^!QP1U#J(0vZGTPcBFim zz^T9I*S!|%34JM|Fe}IpN}f{RZ&-ip2Acd&oh25xBHHO_0#*z$3k3bZFL{kv+oo(r zwW&>E#s1Rj-y7X#K?^I)f}&7s$c)y}5B<93BJKP&CHqk$sojBrqq`p+XKXkxb>};+ z8}F3z{688uJ>E3f_(VNCyrd9FEaw00{@kG-3m#$wz_1{w`o|5~YxX|zyXFy{dX1!l zxuT!f4xKk6MlqshQ45Qo&f(Bi7#>O1+fMz^!yVf?5XfE`VWQnC*=M)#*Y z`7&{Gn+^bF5wI$0Oj6<>>Rm;fHzM0{-gpy)Y4~uXD@faQZ%os}1FcevZ}4*_evCMw zgR26WF^+Cj-GybWvBnEaYx|CjiKl9wK3x2wk^VOU@5*@WbE0d1PuN$lCSbcfVRxGgI*-V4|QyZYUecZ3xAQrV? z@0yO5O^7dEQ2oZ=yg@AQAj{!OfIKCJUXpvFv9lNVKYOiM)1k-|iA6Wp+d>khpKP4e zebUUK-Pj>r*w{8)+giA)WE`s=(Hh0rd#XDTGutK2IckT5Va1q8Pjmf@@nY5t!e;0q zJGcdBk*g`;70w>)&9Jkhtezof>(eGLSg>PcOC41yFUu`TnxGh#=C?g^jc$^)$yax{ z=o^^d^?oixI1}x6rxR#mSpDAbJh$#r(G4Py*qep>!Sp}d@OPgp!VZ?IirF@$>drXF zpQD(Pmc3%iJ_1w^+d5E>IYPI5zA@s1L1O0Iji^rgsgkZQa-8iHDs_LLsGmPb!2MvO zC_01y{sy|bDDWVY^nX~(?zKxcp-GW0pbl(U*9{b9|H#yLkKVb7-7b`MvNsKZI?f8? zKQ(R|q+JFQgbH{A!z$`P_UDG*IVc9(^rLV)@V*j;K?V6s!#_MIHn-UW#gx)%p?pia z`7bp5jpvEE9Zr>Wg%acqR&JSH-nX#pRQkuxqy0xY2U`JH+MOo7qHpT~=vdXJBY|Y9 zkY>3Gxx<_L{JuwHjaF_gNu_8nx8ojE=Og9_#`OcC-(gtzsvVPZcPoicg!CUsk& z#2=uo(0%i__xZEOiur9-l2Q2aa3{!N7`~&=`>`T!qfix;p}T7gqpEyopMPL1t$`Zu z>#m+fs8Ym}tNPCGB_i8H4)-T&90`ah-3xsDLNSL-v1_ zIB{&J-jop*?9i%tEB5a7eM|jahe6~%TGEk^5_SN^SUnlNpi;UU{I|+_yHjcFMSxz_ zu0UDd*!QB7+X~s)RRHxF*h@eZ@A8*b;?xcV1>-2q>X*yH(CzJ8-&2Q28qw(xf`l(> zB`j$^g!B{D`x>6Dj(Vk{Eab0)w zO7cYWm`PAHbW>WZE*xi-`Mwp4HmvV%!8ozr0#;Hz7$yw@y0Y)>^Ov41)*E(KMf5)* zb|t&qQuDsPR(HorX*Un;7~Het4G_Bb_Z`kYmd(9gEFb7=cK_hYde7nqNB@L`)PH`c zul3@oqZ?js_We#wpgY5sAr>6VnJpRC+|t+W-M26Vs9w0M5iL>rYPb5$j(rfCd|gCZ;jm+bX;i<7qR-d-@BO* zV)$0t5=@{uk9~7{-^y;U$Nzk@IJ(7-Df-^XX#8-D$l?=z(H2Tb%m&AL^B)cHTIkC= z{5!XZ9yuKK}IJiHRpc;>%**y delta 260711 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%0ABQ%;wpQ$ZI?qBZJpvY)#Q%bomj?mRWK zBHYi0tjIeg*6v~ue|<7>7yEkOIvIPk%u#ZUiPPLE;mCuI^Wd=E))>eLNj>`n3&`2`|$s3*IU z^!qSQkcha&iICGzEq`Aogx@3dWeUE_jlK+Ujmdx-0hj|^EI399{sC^@lvsoyAK;o( z@D?x+AjcG)UxK?3j`t)u2e{ZsYt#ON0WQ{!Edp(TYfk~x0BV4X2=4%aGr$ca)*Au7 z1PD$Z9S*2~{3JOFXxRYwed)dr{q!Zlfqj;7r#E@>@WI6*wS2oQPy9dD&I3@cqWb@P zclVXOyPLf9ytFrW(?be1p_7fI5qbiWkU*joeMC$`M4D`9k>2qliUw2yYG|TCX`zTx z1(7016A@8Rs-jZ9e0B(*9ZJza#HS|(*H$j5>roUaSD_h`iZ4$AZO!GX1cy8q z+M@t9q_bneOOftT1M6}To2DWvQp=YF0Q(Kf4vb>#!sybVyfXSGzekq^s9KT*8Hv-* z_;X+-2WLtjXzx~oZ4oPnT-Xwz4OFCJ)y`Tn+ctACU6qrLY~%?pYvRH>Y@SPyr?>RU z6uy+o2-jNEDA`G(C)My8uT5Lq)Y`P z?QW=lS6SBXhWXp2?XJz=eWBese|Jc`i~QYU_JjMoh3$$|QH2MRNIdCdP@c~)Hz`=G z7~UrOPuNZaC!{mls;g0=-a!weN8PAU(f0kURHJnwJC<>^GF{psaIsTAiV<1*is_N=vzipalSl$DJ&C~7Xye!G_-!8$ef@&PrTGn zuCU|XLs}}*UK8DsF5z2?7V06oaz+y(srNM=gJVokAHv}L6)CQ2Q z#6%fs6C~;bi>ys>7rmel+wv2a9oa{N`la#hQ~x_7rLsv=seDUDh7;yfGP{GZu&l;r z7Eek2M2406o-MD>R5uHAs`U0L`fFAiiA+>Dbv;STe}HA@<;VDeSP<)R(6WNWwc=5t zGT?_&GaXfDSmt9s9R+-4$JN?a2VBj4(5Ns2qfELC`wx!BgC}Jm)%^qz>rrYLO_S$?l@>^_082cI0BTxF|HJF$h|E)36&g;T;@MJ_ue{d185Da%z-IGV=!nB z!{T)1vrtAF;7`Mj8VOL~eIw!>-9$#wc6RxvqOHo!(bj0`iI#FJ+J*sbGUI~Zm7HZ$ zGP9u+`;uQ8eAf*xHL^K57467BrGYBHdL~on$@qTaC2yxsyJ$n$x8i~x&8Z-r$u@;~ z8;y%@O9Fem+ya~F3it(%DY~ttlQ_3!qC$VtZaYP}1#bHpZ1D-$Pv~~gs+&}|+r}i0 z4a*bR;Y>J#&PLyYI7PQ57^H}7@f~?rnXD?&TeiVC+KN~9Mmvp*>~>arf$MPujRtdy zx$>&>=$z8%4tJ9rmfhZNa{ys8bSXW(xOe#~|Fh#~qAU$qm6;%5t7Y1v;pHEJ2%(vk zhGu>jY{X}!C!~sQyBWo{!rrF3+*WSK<>g?xAD`+(0K9BcsbInxiwvx1ks;E|sq+0a zi@$}W7sCtt=F3CM!zyk^8h~>E>fUpq&L85Xc3lwuXTTDNcg zP+C7&t?$uU*&bG>mJaVs^z_t3DShFSl~Qv(@tdQdBCS;D(1Oepzu3`IN$Ft4YFPH| z(GlfLw6uKZ8F!_kFJTuRS-wZNUq(uoF-}Fx%f)C#`Pk^Fa*t?bdEKe}_7zOTqsup) z!tGa4N5|CdxQdP~-^%++bQ}if@#T9}=7e%O`daxB-JV!}T9*pO<*K0kq3%x#%5Uj< zGS+Q$N>F}T52unLTrHgzlpoV|bx{6>-hVwP_l!7{;0Jm*BPf4IKb{$sU)1$18Odh{ zqhv$?uPZ;%G4SIKREhxuZ^c36EbH_I^hfS4J6Y-Y`Pc|iAh%+t= z+$GE;hZJUNnmN4u_cNrO^fZpAlT23?X2`g2-HDOs2()kcyJt~maCrinjw+koQs$5V zYk&ssOH$BW+)~u9^1ZjaFLH=qy!;T(62KiWu*5oE`7K|^Wa>CfUk)iTHy`K@=gT9} zmdro~y7su|`{`j4rM~E3T1k~3^q)xw2ky%=iX(KfmZo$6WuC0n5pEe4JSSglPRG9> z!@X@ns^FH>QP(DrmnC;8+#>WB{T5)RF=J@QOe6EYEbPE76Ba8CQWEHArr9Y@pUT$* zk#YFPwfslb32!Z65y+)9&i<@4hyN8TiH|sL=gRByeUc1nyL8{ZzHSLTGgz z9rCTvL>IK~T4)pI2p=YNo|{#^H#zIgNmk!Us?XjRDGS&YELKIa?stgr{}0)u`~2lTBTdXu?IyS10shaKD-^L#x?73(gilTnL0QYh35QBW6Q*~8w9e?ehk-W};1AEm~% z2cb&Fr12xWX?*D%?*q1U#Vac;WHeGgBQv)vyz;{RRsFyd3~F@| z#T~R|q*}-WDfHCW+Q+^@|M+URD)gzbiQ%{tn{>i>507!U#O~@b4wqy<0pmh=Pr1Po z{p z)1&)R%#Ze|uZBc@SxtyKSG-r(7khSnVTSg%WaWL^Hbn7#-lgO<%ocX*T6i`;m2W)9 z!>}bF%*s2qwJ68QI4uvQ%5NqB-YEcQ%Aulloo1{LpHj`@gU)WsjO%k0hIXMvf1B)Y z&z7U&hnh02bE}7$n!g7ZPG*+8SXu~DRfTpkr!fP{%Jp@#*51Zc{aqO?#mQ&ni?*yJ z)`E>>IJo1_G-p2h`L9Hm`;GBTXnH%GTkYCNd$&(WkuG=aqSQtxywH7c5&AOs`ZBB` z)sj|tPZ938?rA*y*Q9p{02#f? zN(Okq3g&)xv8?-*s#xCP?*zDpzZ0yRHs-{VxkC9JA8C{J$5B%Ly=8C~HGlKf_y;!EbV>i=)ySqY0lAAP!z4&wY{f8fjcj*&m32Qve`9p2 zu=|nO<}ysDFa$$X8N}E{5_iF@_lewnV{)PXF=Gt>x<9m zg>i@ZFxmD%mEOs!0|JuUcMPvOGN^`Q786;U0rKrrWbaiJPJ!c^lHIad-lSuf&rA+4 zw<^{Ea=bVXQ&`ZBmWDmMv>eTqC(j-b*n6v)kG>bs5xiSbI+@tQ8*+{$ZtJxCU)mOn zlXgu2t(u^)md~K%nj{#;CT4tK4mIP(awYMmaVV7L$$W!1Ol?e*z0`1Mndzx?sb6_=b%R2)x(R+KR*~IL|7R z%%i}=^x{M@YeRc-i8lpI z?!OzbD)v*71w}s#kl|>3Ff9|^9860`Ki4vG^b4(8-4b9t-6}Y4)1TW>m08iafjO1eKGI>|<%1M-qqb6m8f!{)5DPbTI>>Yukda?BY3zn% z6u>{~ZX|XiMHNWCIUMf{-1R`$;D)%XOkR0`7PDj8N+YmoGGIIn#)k8+C;v#`8{tLp z|CLj2M5&F<)y9@-K@qi8f2>}efCV7BrfD6WiXcWeBB+uRMNVI$JW z{2+*aDQ|S8T8F<<$t`Bjr`@f>p3cm~_HZ}RY?G`Ko_o0A&W-~dE@)_M_-qm{=wW4P z7!{=5Fou(1>)g%3>e47T`t-H@%u-{T{?AfLZLACU;Obx{+qN~5u=LMBB2e$`0_v{} z)L#c$tsjp2Q%-!ZQ@P{(JXInXqzVbQu@%OoD}z1UrQss#U;|IHDD)cOwXSnN7kCwe zZ(Ij_8k)@-s&(l^ehIokek&g@z*W%|Q3uZ^VUU;O;Xok0(;>$u#-$E1ret?w zj8t|O;|e|PkmII0IW~=t6=d=Z!iV8$O_L&|l_;$?z)|p4sSOL26>7;7Jd`3_f*tZf zbX&j+C0Mt>pI#E@D>~VaSxsv7z66_<-+S$Dk)f^S81aISF{ob4P4W8!GHn%U1&t2c zZ|>Eg8EgqDBIeP41WCh@0l7}1QOsL@LS6?89+Vp1Ss{fDd@yRQW&!Y5VkRC-$?sN6 zu0fGnxg;8*z(!mYW-(->hrs#xgnhX*vWU)rlaqvCr5(NqAlStwBUT`g)A64^YN zKnLJw;@Wb&zw%eX54g_#RE1cbq=2R>iu)`G>CtE*?fi6v&~S5h8V=!ldYV8^O{Fw} z;WsHkPbL3B;TLpx68zSw4c~t0f-!C#9V6KG`HF{uRGNa zGBRL&VR;<3ZaE>oaY$xl=EHL~#7_^&OdPj{+GL>+21>w-npFg-c$mt@(0f>i4>ymN z#5)enjHy5;ek|!YX`A?I(s#P7p9URLlS)ZCAUmI)ohBoN6%LN@hYc$}twh$9*&I-w z(`-E;xrd&U%r%zQBteYwv0$md8EI)2>N8}G=3a(qbCJOe*0SKGIxD_<8;8R(?5Ohc zVcUDaOcJ`>9M2z?DbW-3MOyyUHGxZnf%#0SS&9K6ImCCxx?@9_LSCX02$JI>Sb@O! z+tIRx{Vnq<(NG1LIwlH-*{Wif?Jbo@w1=SWjHJPZ$~{6y##9q0t5;Dq7d@Vha%=U0 z@tj=Fc-56hB#H~enIGrMJrxn*nPGH$$zeFB>z2gZlrmEbOC;)tL<_036rWVe^hHin@0 zM?7V{fQeK!0h3JC1T3l-uo4eBkvHx;Jkz_*1d&^i;#1g$1j z_Mr({sY=pK3EE-*XF(&<&jjsb=@;imWCr!mDb_sYmWZYcMbcFHigP!_JB-M%uqxMS zWRcKWMVY6hRhddMZr3O}Tz7b%#Tc8Z5`{RSEyGQl7jB$}a%ELuB+9ZY1?#V*Pc3l` zk-SKQfnjb$hB0DD|SM2uYMC z;pIXwJz^5Z_y!8i=n&(tA)3T&^h7YBk$pY^|FpeM|8|H!`eE*@^j}_&Z@4u#YUG&ot*dZtDbnp`ZnW7h zp)UU0tal}5<0pTVd*q_??(Y+C_;GGSeCE2`7TWQG1_@fepDrtR58scF*Oef~GL~;| zoNojtQ!jhHWMSampgg()_Qw#q4wNJnoWq3_y=U;nune;@z&x4PVryjZER^bw#@G zF@E7H*fpx5wNkNB==$P}*sAAMihxPo;bR{@9Gc^;@zzSPng zkG%>%{J8IXclmx?sw)6}3TwNsAb$M%+?RsB@eM!84dB=mgq(j&GopSPE6Qzi*j%AQ zBXP+p^#B7^Nn4Xj9Q8F+V&4w`kW6Jp@c?W#azf4*N|9B$C}HOQ%GxRY@KI{Hs$0I& z^;^LnD}2xL_!-9B1GZqXC6Ne96ypJ5`|3nDjmM za;RNdtw2hk=Nv3(COv|Sh~ODO!jr9q%`Pr*EU}o^w80>uIFPiiz-5sYB5;H#8U|^bM_$2-Q$GxQe-X)#iwZ z@bAd+kF5gH$ST!)I_#1f)fehXR3A0FxX6u2sGg~#`p6a0NT@!@$UX|PXR2h+iV4TL zjKP=56t0Q;{xmnI($kIZO2zIGw8$gqpihCIu`8mn-6LotBE|>ZlxqZAS0w^mPL)@! z3R*}f0T#sn>`9Two-q>vrEi*2Mq@SFBn2{DB_w0jjlqtw3~@dJr(!F+SydV6;4f3o z?Cj!5I>D3_V|;e;i+JKnvx^M)mzr{}QuV5?X$VyJ#TW&m0>! z;RQhOO*f!)m`J)-c3sXfBPXrRxYr{&X)UDw*lyTgbhU2uUAoL|yB~zddS>bvgbBmz zqCma=T+7Th8A@}gh~~A?$ilbcSANO?i+r50=4QUO@!+`1niHz5$)r-OIRuiRkQV7l ztT}OZ@gRccy+W#I%?T@_3DCkgbK*vvIo4&W+L6tzdlknb+tSocg)8HWf0o-GgWT+g zZd7EZ1EPjHhz^1(RTX(~O+~iW2}@>$>Gzt7Y^}=5Mk;cw>)%=h&qF6UEk*-P`^2l( z=U9dT3>#B=x=CWfUSP4RbL1n`s6rxxx>4m|4t-)&S)7Pesja3OVX&?vi(3&n>Ic}a zBgyzbp=ImG(XveP---b0tvIPPiFm+-EXBkklx^tsp{yXU58+GcLrK4Y)cUuL zfI4inLl-Woj(`C9xf*$!>d4DJX}M{daQq@oK-rYgH?0cMhV1dz+YZ9cR#0c7Yn>4V zl(G59K+T8n25nYGN(vVK(MLbZ?uI zY1F_C=Ga?lR1e-*G%>qg>9f;hWpufjsSAybb7PrLo)+J5OKy~ANH0E_8x{AwCD+_0 z!+UKsS)XhGO=MPB%YLbbXaG3M6)ue*xh=P4^2Ok|?e<*Hq5cc7??VA7U!r^y<+FuL z>Raekep_F@hw9&s@(d?67H@ze)$n6Rq0*(z;9Q!wCr&qd*wyz9r7?Regu zxn(wF^@Vo*`R59ASx4q4Vn{UGNJa+ateJ2L#F&30sfw|m^;86|Ndtv+7K7_<(si?o zb5L_l?c;6kfq~^m2xMevxyfA58&a%%3`4iAs;oeIDuk3mZf_x|y_S<<_erUd+5j=S z+_G|oWPd`cW6I8!H7n0VNSZ+^*(Pmz80du;In>TH<>Hn*pNq^X%u?Au>!uY>w8`08 z#*OAmvNwB)PxY^Z018V{2!l!uNHOSWM1)}wx%UYqBv7+KB8qIQXF>UREF!JcG%cqy zEk`RNFeo3(ONF@Fu5Av9(A_c2X7nriL!YVY5(_Sf-R>nXy1az;_RJ;j}3eYC3BK{4EDPnckE9TRZ= z#M;sXsqq6;R8pel^$ErTL4k0?37+=E8S;aOH_($AE#5(ME%SPs;}z8wd+jP_Y_UD| zq`lC*pcS5F!mF7srwVFKy9e$;yqCrJmS5$ztY{vAwdG|iBj~ZnC0o;Z&CoT2Rq~9< zR^S%;bNN8mtm2SzBP-@X*9D32{r zOHJyH!y!hdiWSf~vsfyxN=KRal3(Y>GA)B~4cR3(&!DB~JU2!hw~koF5065s&YjSqj}Yid70|v7Q#Fwi?x(Y zjjY%Cxn@ZZhY%OzckavGsh`&0pNqzb?LQQMexx`)M~pW28YfHq8|iIF*3j3+Z&JFa z&nbjTV@8xNuZ^Pza&23nkiG8F#6|-|ZG=-jGUyPxlm>Uw+EeEdanLIqBM9UJjjwtj zw>R6f`bs`1FP$B*@03d^d6i|)0*`}|M+v;J$}0rie-#uyuV-Q(Q^Y z(f~6(-ut24xO#l|ta%HC5gYFLE-U?YsE&Xv9E$SM{E)aC4NEc$je4_-Q+Scl9Gc@T zw>6d`<{obs5*ygch+m5Z3Cv^#EWX*1>+r8??koAViF75qu7uxob<_d@YU3oUiXk22 zH0$E2e8voQC1Btv$7Bbs*}?)DY2Im^5wJ@P*d=*>AaJxvK6{OGA2K)ydW}@RG$ULx zp+H|TdW}m~rb;@?fL0h$)Jj%rn!T`K;0sELBYhA*_*ibMURlF?$?(o$sD-&3<8+Ly z2sx6?szU*bBpHY4aJbcYxM1v=FJ$62EQWe=UI(yki!9ZOGO@<#z))FriQ6OY^;nL?cI6CQ9@Gj{OL~eLPNStyu{?`+^Z90)Vn&zT!qoZUj zk{3Xf@8Jl&%n%2Cxxg3_AN6Ez5@1}FW`gPBA3j;DVXJ}0VSc93pLH(2xklggkHr=Vn02WEA=I=*9-T*uPR7iZ`soa+NhUoS*(7M7cfwlr~ zR^b%Ao++hnXlTqA`}Q9=#El=Hcl}Fq-OgkRgSDm2+A>r5ON@rwMPBpINJ-3dWnCEm z$l9X9jDK#|8O4>1R1Cpi5fmNX@^a$SaMN*?yIpWmx2+&0STK;}0F2sMH&f1Xv_#-$ zGk!y%=YOA@IYzQ|00v7|4G-@YmYP`nEFhx1Y`pUcl7Y6x{(RI+|U8DmsvBhJOnIVV(<)U_f1nQgm~uYmO$V zvx_?cF_UR>0?aP57ipebG`q-tpR^3``OJ-_3FBVRFsbLE&}Flo?#KqT!V`= znUy7c;Pm2mWfVuKzyoWuS+7jh0a6z%B(a#Go_>oE8iBzygY%*&qxi4{?nT08UpH4q zLtnSE>~$`jW<)jS5MAeXKd}_Q{7i1(XZuRGH}LzORTDiZd`ED20}V$7BR#wP8n7w$ z)YcA+n`uXvu*(9vf8b<}&JEmW6~W9eX2ZF?>3KZw54lN|{;uEb;0Sy z$6QX;@l}DZKBpawhk3p_B;hNf*i=}2b@&W?0mfG=)LRYy)peLds+{!&an|Q*oTa_$ zVyu?-8fPu_oYni;-07G%-+DGTa_)Cv9(PQ8bgY|C=><_1O7j&E*zCemF;K~3&p5|$ zij`al$GW4B7HC)S{xcC`h1V{xt)-Hlrj>p@RKD+Kr>SG zT&_euK4MQ33Z(01gqH^HL~&4C96gV_(}XrSel?tKmN{R$z?>zQRUwlIAFjn8wdZBb2?!`<0M0{np4#WgbYgJe35T`Ov5-SM-EyK=c$F^n9~PC^By z((a64If)o%^M+4n6lYQ8$y7;d5v%fw1Q%C|+fE9OLLe7nR#zsZ)ZIel5_HPEHaB6$ zFd_5b+f?p^nZ-FsEs;%7|iO{ zOcVH^pgqen2AR5F$ZdcXEKbFxMk(>?ezxgL`x)>Tx<#H%(G)43PLGfOW3ETR=TKt< zHe4HD^2glfm0^5M@VBZtfl8E@4tvsg_pj7{O@NpD+myH_aHC9tnC)fkbUExK?;$v1 zs!urXjN+H{sPbAdJJO9vT-lCbVT}uyi^cpZfLlYQS+_Nng6}Jg$3z}Nc%?E(W^pAz zexJ{Nz%J8S(yTv3(@DVF;$vRQZ84EF7ZT<+g@fCqOGvsxnDI!$?_2#@y?yef+)&Be zyD#M??af5S%iFbpYU^)|ZR4S{wiSuq*VCEv#9crG1EeLwl$Gett;!!`p~)X|7_a>zQn2-n^ptNC{KU&%&h`Js z%ehe zBZ9Z1*C%}1D$o6MZY)E^&412qZ;n43IOG5RIX7l>13Qh_9nqn?<*HApZPLNq51Plj zy^@>GX0h{M$qnFg^(!nEX`%XnI%U`vO$54o;NSxO3xL(xiFa~6N{?;>q{57cGM!wG&dEVjd1!<4>_)D%w|E!5OK9ZF7;owo9 zOZ}O6`CmxWh$?GxtmS<#{?=b|Q+8s*7GNwAyUzo2ZEhZ;*dl_?y_WF4odqg_c31%8 ze~+Fog7FtjFJ2kRqUrIEEQD=$_VAaE}k1GF9P{)i^~6JI^U3-fT`&OxD+ zQ|{%3w)Sp(fkQC`X%;3Vn#cWofFt?(5s+g(3qkJXfRRS`fcQ=;;LoZL8MV` z{t7JhDwQ%eE7^!j+4#`cb2|oY@s+P@thShMHDRW(T0I^)q`4EM{F_Tm46MoCwI+Ml z^M#*iC4AA_Ra-Ne_FU1sgDc)*eABiVex(UXd_3##x#KEr=5uj>Gv>-z*BJqs6U{FE zNQRL2o@NDsY#gf~Yc!Qz^&j|9u04^E>8L8Bfvo#4A`loizE8W_d-y@HoL;uM*Mg%N zkOLYzN&~%%<|)Z6H8>nZd3SQ!N}Q60u;NX!`~QRO2UdSi6v`R@$W;#OgHx1`8$|7( zbNQ_66P=dUht#)&J2f4#Sy&SdNyclE&NkhyAeZ*M;ts&N&`+eQY^$p`=(F*WZ{!Bd z&RAc67g)#P;gs8tZ{9*f=ser~&^FgdEua&bF=*Y`xOYG1QR-GNuizNF1nTo_iN@{u>HI$P-MTb!~e^tJChYU}4Rh zxv?!7cdW>mv0q`y`1fz-CJvW;yZvcUD>C~7o`UE!dhI{GsBj#9ipRZ`+p|~J{W+nz zXFzcKR&Lk2!SIQ!yvf8bzn$AjE{^J|Od;O&om`)ZJw#qxA!RKA5?zpXXZR>u zGpjG)dxf=T-P!4tpzgGHa$7fL9ZBR%*?7Y{x&1~CaC3|E3j68X%S@2$JKchKzPrf2 z+x}hq?wj`ASKiGXnt(DP&iyk-4kSTg>%i2uFAH0&y!UpCiU$=A-e^r}yUm!Zb=+okZ2#}vb|aeIP1F&p%K#O?C)10+_fY*F z3!o>isC%{8J8YxHx1N*Clf}Y3A3Hu?P`KCnK|D=!$#9~`8f*PdYkly4a$E15b-z^W z7#bRYH?V9GK;Q;Lk1@gi3dK&4ZtFq%et?`{NWEgCspO6=N8o(tB3=6nZhsV zAzntiCob9eROBmeU)W(IR-F*v_8|sq@A&Z#b7MTMpQ+LMG3#irkF29lTSs^QD7P}< z=C-ZNcfrJy0xdP9%Xf0G0a0EBF}Lo6jikKkl78W+py`qw!+~Ljz59$R1X0F!{5Ll# z!QW7Y5RHY~s-3&!mT=o@lX2f5>>bv0MpL|b5N_7f_m%i!mdG2Oh|H|q8`>2T0s$Fkb0W0qrt=ssaB{P5*sQ1eKx*53ej^O~F=_9g52rL8V9*>8KiU@b z$ElDkS}jU8rB=vMt))1!9wy&4Sx-;^XXnE~918AxGqKh<$abWi!+^Dm!b5n<_)FGb z6y3o~t%-AyJoMH{3wA-3Ye_ofLfZ8_mwp_@?l0oX{&^#Sg)0W}PKEHsig^h)sfrLN zchD3R6Ut-+T9#3-Njcg`%UaH!evmy?>8-9;TG67 zEsO257__!{agVSKJ#<7dY~7F6B^t20dWJW*%Jo^oRe^JuQmhX%TSJc0{su+=JWJab zCYDoA+7AR(!G2>OGY5_J2sdjA%W2eqwmuGFv%!9FlOZhk@O(8o-}Dn-S@(DOd%Ai1 z4mD*VZDw7`BsUt-k20Me!VI?12y;JW4YE*W;^+vR(Fi$Q!8+nJwi3AJpBy&r$n5?as#lYsHtcC4-2WPtIK>uhiz@m+C87*IA*^7BdHRkd@MrPs*CD{-C5V<#@PiMEh=0*H9JJ6whrA(PgfcVz zl-Il#iI{iEW~lAgX*b+zw}aKNm6&8}NmHu2Z;u_nedN-x9k*7rIsR{-a7^E1H`eCs z6f3jZZ9xSsaqv*CU;KQZuyA0n+DGKFEy@cMGmtKW}unZ_nV;^=l`G*Kow*`hB(ym-Y#kufKgxcvS<}L-z^yE%5Qp zi^4BaY}7&FcFpnmZ)c~bFMT8a?c3QgnFlx{@SwxOYtn08k8_8In^Wobhlk&=bAcy( z*tmCac|81!;Zea?)?fNXbY*bW`n!(^7iXw@#FxX%f?(qMJC=n}Iyg6eaYgu*-L6LVK<`SqmgBlrJ4ZT*^~!jH1SdGVTK z!nb#O_q0y+zJ6M#dS9+S`g)(OKKgneuRc=mL#M^h9vilfzopui|Kg|BNB_mT>LXwL zVD-aN{Oi}&?|nk}XgatcE>*(Mf!)(8;aV;eR)wES-~4)f!K&~u zPLF+W6_i@B-klWoN<+9UPl5lgi+!jz!GLo~MWJ z@a@)T82c_c13tJe{>>TTDlU7U8E(eq^|Qkr;`L{SI>YnzGs8df)gxzx|KMrE+4dC$ zR`9g=oNyiV=y7iN9WLw64UZ4bTR--^@T5#|ar~nT!zo-|x{z7c#c}gR;TSGk_{#!+ zImKUo>@Sb|%ZL6l`eOTFZ+|(~U#|3*2mIxoi^Jam+I^SM!nN_=F9|12G6Xi@I4sJ< zQR;S1fM(A}o*?>$b?jVVJ`_a7GC{8TCEooT;gD%6;I>E=qx*13me&w3m??8gI_@U> z)<5_kYOiqI)s>2W_>FKsPDCA)yz3|&_ld(Poqo}mswO@t4lBKn=ZjU)xueDPZ^Yr_ zncO>P-j(7Pj)Z;qTjBoA@0`WsHZ7CZkNOY57rz%y&P>1gwYyX9X!6IC5379AY1H$eKP$OfC$CR`-5;jwjxRS` zyc{lHOK(#xv;I$4g?(sf{d;S}OVhbpHS53m!|>oBSh@Z`KMG$;_o_$1hKBZ*qvL;E z8(t0XUwU2m&0s~m)%D@c!SeXE>%+~{?_C-XyCK|($Avfe$8&E8=NEKfdBn1ChJ(r1 zzkNe^bTDZg@pnU0`LlnX?ztHm10D%DCUhh>$MLVgzasy(=HGA~9r{8lUOX|lNzd3XdLeAeJ(#I|Z15Bn>POv5YdScwqe2P2r9K1K0X+a3g6v*t{Hnl+X8@!qSXV zV`Exksc{e(`zEIshZg2(?%_8h=u9J|fcU)i%+d~sANy$-_3KqD z*qb|FuuqqQQ-2mlTlMAV7FqMQW!tyXzxMF}?i$QhrOj~OY1Qhh+26OffBXQ|^cz(B zL|d1AdqcVu+;%-2Gc;bXKHNHv=zDz4`f%U)T;27*nY;h$?iAg9;b!jM(B0#@TlDjA zhpn{TYM=o+p1ZzwH-S5!X=);O9x+7cCGAgA`+ei*e;yV%OxCcoSDgL@3as|@bvr+-Cd;Tho9dDa5-GAs$pJ zvS5H+orpaXhlYqebO?X^#v{Oe$!%dYeu~TcWN7+4J=IMSb({E8QtDZ8h_XY$1SFw~ zmoLiq(T(hP&jxYp?;1z9Od-ou@|g_zruf$129x41+#XIEP+~~4B}DB#sO=al#n;{* zE+yPDFHM5xnL^VZcFalBM2e?|ME8e7L!Ms;f6?EA_=XK(pGrvV8b;zjBn#u)OK&jw zQ1cm`XFGx=6taUjcD8L*9!S>ZH`$LFy@mOfir&`Ffao2~Ro>N~e+F)==wE^QU8X|z z9hCb=dq@@bi}v6UnJnuDb|Jhg?GLU?L%g`h{b7rMdO<+Fm;hyY(o)eM1=JtNANf)} zR9fi-s=eKoZgV@|@lS&4WrOO^2GuJ9=r8)i+T7;RUpqn7+e6hWfeH)>IHu7ZP{nID zgkvicZHCOYr05T-N;7MPu4moEwWVj-kL`(U&Z7p`L10`gv;Dr;m8Iu6&XNC~(~2?Q zv%A9h!X~4C(0WTA&iVt<uBTxQo1WDK|+;a>Sy~>gVV=!*U%`=zJHf5SA0)u%@}s=EJ&$rdu?q@#o@I zci~WajsaEeAbOmt2nKv(j{QR9>gptU!ns6_elR_C`Psw*alf*J4(30hg*d8NdMo*( z4bbUnk(L99epQ#=MG`g(8;vwIz#1V?qbJRC!4a-`F9Ngp ziWEr31Vrz81dQV*X}8J)3aZ4jOv5nT^Oii<$P!I4(8Hc?z9^l8G6K?37WDAPD~BKvD(bTy>Oxp{ldv4;e@v}*d}?Lj5OG? zY{P&@CUx*>R@9gz9xy5`yQedi;76m9wtI1|d329L&wrW5Wp{6yWY@n+bD{6!Drn}~kHI!a2uXR=>EirR>No5s)ZSlVqCJsXsVBGJHQ z_YHl#Fi%RHl#=cK(tMj&NDzfyQ&L9;l2TZw=V}^dj2p$4z4j;vOxmL2<$aV#rAMR5 zJCY~vl1K`Bvx(|7&D_jj(de{MnC*@1Q`9GpctJ)1wT+JvKo7!vL7ma zD=jCXP$#6CDM;2i1OY^#&+^oTdRj@B&<3hBr-gR=HJ9JaC0KE}BO)TGSe7^b$O?k2 zQ`$+*Csb7~e&d<2|8~_L$-eE#9kFz8}#!XaE$b>h(H+=ZwC}cHXL`0Ew)9sDPl?h7A zkY+knG#NSJm2l+LDVFn+vT_?tNwob=f=TJOXkjPnox(ppW_y1?FhanYnFN&ZZ^v>| zyyv}P`N#*V`_B$C4 zY)?buu&)%2^JIXsVMaSL`n|IGn_3weJ*^M2I`T(du^Efh3cIW8Oorn9;fVObUxmdZ zNzd=Ch3d9eB^U10d!i_ns$C36nY!L9pZ~04|7!2~%!<w1p6sOz$s@>*8D@wO- zNVzu35#JLKhEr%*V+n)+B4pc~Uo&p%T zIdGBAQ|RG4D~OG5hV%93g1`;s7)1$0nHps-7l0(tvX(cOImKLD#_CCDF6-3{ zP+tJ1FPZ^=7zsuNl4kcZm5=BSpdoHhS*N%!1)eVnB}WRHFZ0J>*1hO-+j%4=b~?7?tIh1E)+hGwlAby8f2ol8^QBH%m74TuhQ{iDUMU$lhh z&++f`{5u3J4=x=#y*QYHW_7bzH90-Y<{OMG8J&61W%wQ72MJVn{h&L@Ox^BA-9hn) zhr%(l~_0or7ijh;x8+01?}J(*^WK6*;s z_VO^fJxqhzEPi z&l+KuXt>xFOmmqU9c;)>fox9*GBye61BCTrjsxI$KA7LMi-6P(@$x6betSz6(fPBB zEGKz`5JS`q!o?EIWRdA$D6klrJeYA8DJa2)(5+^n+L z<&SXv_QFL*Lx~mM-z`=H*d-z-`rfQ?-ijs%yTxXNQ(aaq(B-*|xae~R;C-mQI!tQd zeUtEHSr%_;VNMuG2F|G(I00tGsOaqs(rtQM)XqC7{ySK;5d~*TO(WyM@uR;9`yLKd zCjH46DFlgt?5PG2lS2;DpvQF1<=fo=Hh#(rrH&bY9|RC=SxmVBewh5cks&}9lozMQ z_wnwJggejj-Pn{3+Q;?k#s=-xjSU)~cv5r!J-gVPJ?m}G|1TzIFZD|>$)af>iWHj- zo6#IU95`hrCrk9kjLl??g(pJ+VSrRgRvIG%tJd>TJk>cx%pfDsTD&pZHC8a9N5dSW z%@**6pNI|5jD`V~VT?RKM*c?e;AjZRSTEDnjrQV%F^w;6l&Un7h8Eh(Z;;(nKxior z+cFWfnpNEBtzvc&W6NUy$t>ni)hzDg&0-=B&`^1o(CJfH#UQI@_VpGr`-n%Ym=V6Z zSjptkX#YernFK{bR~IvxxBoXYxw&d4$3yqcmn#1sEMr5MpExiTVx;zbWR@{PRh@%u zj3Q*JQir8Pz&l&U@)WsGVHrQe_+GV)wb2>=`FO)P1zVMa3|b+UWxVSrTE;umz@{zZ z0L!^KUjAq}qG1{X$!Bcrj@LaJHdPp?Y~-Ha-N@bIdf3Q4gMnwJM($Y}xo4wRcH`e1 z*CX0pa#pn=0zY!6l98KuE7=g}7G9Md4Ns{CP0sx5G-#$< z&erCY%-GaEHs;o3ZET86?lY}NHlC6=66prE`^6p&Mm~dRi!#rXH4CQsv6-n;QUP~a z&uki&$EId7`NEjY%4Q1*>R9r2`m~>H2#*WKx@?c$sUXev@}}lom@g2XGGgSoad}QR zSGE^w2GuB-B^rJE?{i2p_@1JS%ZJDvQyqN|lm63diOr$>dKlX8P_!T0)w9uIQhkSM zU?+!{Uht&h_fQSLL%zi6>b$9Wqz=<)ykxH;K09s9W!68t_+j7<>t;CC>*>V-w0M|} z$J9Rv2Pvepty3h&hM!;`1_SX0&baI1B~OK;_Y$b8uVY9e{-C1=$zn%yqQb{giVN7pzN^&IbB$ZxOAKA!h{qc(6H!31G1aFW%DC9)>em-vPP^Lc=0=4iPGG{2Hl zkLO+l2Z3{D#M>mTLKdA8#CEnB#kBz=8j~Gc5-GF!U%DL2e0zN%_8dz9>`nx_>hplWzYs&xBM)x4@|s?IwQ zO+|96&Y+9W>Jv;L{9ME*Ux55{;NtmVX{++?WTif=1#8@)$R$X zIQi3b+}_{eoai5V?-}R~v8OF#q|1Gyw`AJCtt=Gp$h3bKtDgU5qJJ_4i2ju>N2tglQ88OL!>Yw9aw3j0He`!Y6}F_5)z#_you?Q7tnZUn z?7mYgU$m6*+fFaC&{2rq>(tv53DW(yI{TlF&i+@O)tv8r_3i`p_(S#hBlUO{c}lIb zCuQjD$(eGA&Z0x6PA~o`hqTC%@N_Klv_o#d&#p@g*xZcj!yqm$;v)`X7yO z11t2(mhkk3ds~6*)OY+#FV^+l?mP9}y1wJ|;tMKeLMj>`O@~imGgCs{Q;CqYDc)%r zy16<-H@}Xl7gbKLcJ>T)_RLIqIGr7lciT@dJ}+FJr8;W0t^k*3XQ-MC?bWK!Rn@}f zd8+XI47j{Nja;ZkE~-|4v8ul$QyxL}rM%l=ItvEKe?09)VmM#;V>soI=ekE0=Mfd2 z4WwVUkdoL^3Zl;L>1rL)-%m0Q_j)hU3|*{4z3#?5WSrQ@i^>Kvj!@L_+sTXCt7;x5 zUetF2bE8gs$CLx{ittK@+U-LOZ`F@#albeynvWIwYrs&>o9qDBLbjN+=gj$T&-Q46BiBl{#7QcvmC<7_HHd1PPbMARv2)n% zV~2}PR6#kcxU@vM+L}>iY69y%*eaB8`|&67E4cj=6~!Qyb^EX6{5&nrHGx_7kj-MC z^SUr`EHoun>C}WgW|itJXdDYW*K}b<^N@Mgj7;syeyZ9KD+dEIKW_zp<}T;Yz6oN@ zFjs^$Gm?o@(sE0NxFrF+>fZBxXc^$w<_=UAo&8;Nr=_t?bgnYny7B3IM^8H3CQ0vh z+*I#AxpVP|&*b}51RUJzac`^M;xiV#!O3ha1&{&yS#{?>zwsUP>$Qd=L%*~tb~-Z~ z^1m5?c};GTp<#0YXd5{);_eRg3&7@f&bUto47NijYIu}b*-ngEz~1u(ZpO^w$imkV zIIG-5Z<+goL~q$_t?Tp9S@hax+2{?OmeoXWSxxkqL?n{8HB4Y*HMy5MiQW-n*yVY5 zgj-HSUi6l?yA|%sEBJHda{hd2Bhk|)4c4crODJ9DR7q*MGG*e6XLpA-hEmIMmNWLyxV$QGN3};M z1>8sqIjEH$M5=Kdz2Rl@(A&KL0 zs@rf4zepO7l{6kBY5eM@r4e7krls+;ziyyo4!^)MQ8E3{5GHy(bu*3lr5auNfb!1b2_sxmT|2cOY#@D&{gzl)B8-(WdWiB|a`$uc4igf9XarreJLu&m@?_+dn=De-?n2RfndB3Z_RZ%7HlXs~+tJ<%`pVJW_)abqkBj|^k z?#|A)xE6`45=wOC;BD>j);e(|P+ZU;uHW_b*9+`-;DEf+RPp!QK|Jg;`PPbo$oP@~ zd4$V(*JCaL6LUUqV6vjbe}04!nEIgxX2%dSA%U`fh}q1btRG`)P*x1goIyz??W{56 zl2OK1M#jk4?>t)ne?V#tr`zq-4N_4HS9H>W|97MktCoz~LZRXAe}Yszl1BP^q~cHj z%5ITbGNd+lAazu2=(fO^Q7x@9u(ztPP;(^$l0rp?WFpf-bI6_rR+_0BKB{ts4$%~| zCcf0Ss;sNC5iuVy`WlRN^@H4lroLbpGdp?|b`hwZs>6Lkb(N&PH#b$Ee$Yweo$70n zBy?L}Qr#Pys!l)XsNiaK6@xEVFe&N;A1bw@yZ_i!efpuB?pDXuyh08Wx+%^{!kbr6 zRdScFfIB}w-^z&T{qf!kt4T<`9GisvfXpt8&N6VDTyIv&OljBF*`&&56bpqtYn3x% zz$x8SPWv0xex+)MAG#n|+*_kR{xdykrMWZx^#dVdH3S=en+qK}feB>N<1GNH(k)co z0Cm-;01A`0d!Y0~J=GJUPn2z0BS``kkamx%Zh-opfT~TFJ|1H>OWFuy71U^#iINwY z4%^HmJ^>CB=2HXLM8d)q@Q0Lr6Ux5BKx44OC!S@vY^ZqV!~OE9>;3*GGvCZ&Swpcq zTSkM9ut>n)xEYjxH-nWiIb-kI;3$UktLeZsbS3NT)oy+^oj86zj!7Axy5|S|;0LY> zvz@AzN*6}e1e3{80yB=xPmLN(haUnghqOyR69lvtzLLk!Mgqi@QQrOB_g74#mlYqd zWj|}Uy$%DBR5rBEe{xb>AGn{vBfk%1$6}(w6J3{0fA}ZJ?74`ruA)DCuJvMNNvMr3Ayj{4tMQ)&(->e+0vMnv3xR<~G0mw` z2WBf=TDKb*f5At$l<`=AFh;3*EPOJ3ph=BBm{JJ>@yVo0OG>>gppn%_4Ot z*TI3i1UPI){v;xhC%uJG{CG_Snhb(ws`rpsqY{D&2$v*i#|bg4MC7NZvN#I6OG$)W zCZtlVH$O!>I3Lv7=oN3Gew%w_gH$>bqmnKB7T^`c@n~{=B)R@3xjvj+A4;wdCf5g&>;1{~zU2Dr#KoqHl_?VhCPn(o>?`lWVH zZde-f@0FN~C{rt=#9VlV?fz!&iD9w(^`Iht@rBI5_|+FOE%s+zb>(4G*DC5XC^X}sKitTWgUYNBY#Bt@(NjJYm zH&4$ZVP{hCbT!r}cbsa~z5BXv#ds~x6N^Kp5H+WlKMauE*BD26$n@{+lRd}T7#*5V!J!^ zMN74Gr@{ev=R<;#=!&950zLT+wK6CD8nR)82kVev{gL#%M-2F^B*0T*OnWIY!JrR4 z8>Z52zNAf;kAxR`s2EEe#hLEPoz(__!q>23?X~gvsy83u}3%L5f z;PP?d5*C8-)POug30J?LQLDy(5a#_%yw8;Uz{-dARz(xGrkGLbgG`mf@G%0Phu=bN zAvNALYgy}SCe+Fp{cZ+s{}%*VED>_`A-d) zM)zK=P^0r72!pI4{*yR$ph!qJz4*22ieaZ!LKYJZV7!$8S$Q?%{#*yzt55`8h*zv%Ei!sv%>BlnS{arV$Xsg>t0WweWMC34N$-TL`dYJqdX6tL6ZuP*CozPE^vSRXICf)GgyL+qMxVr-wcTdudU&Xz)AS{o1@8Hcz0d1JZ zvCM$HU5XwhD$Ij>HsBJNnU8)!^d_6`qFcBo>iAY}h1T1oG)^|#_Y{lUXo+sm2ySXh z!TxtBJZFPe`0qsbM|Wv~|8Cak*nX;TonKbNb?#NT&aX0RTcZFi-cDD=7aYHpazlhu znkVa;-fdDL+kr4C4(yPHZGp(ubNnni;?@jdqApcoJaD&Vyi#V&FSP)^!l;+JsowiCCkAPuoA(5?!Cs zYOJT!4WiVIqSQ}BshdQppNddF%j^NA)>kQYvncg*{c4n=x$6^3^;FHK18IBHl!_mo zlpj&K){{b%xGteY(|4b8TSLr!|$#_#AfiUA)wK&HZQTeBuj7B zt?fz&M*gc4xw*#E;fGZ^tgWNN_Yyk%s3!h2te4-n!BQQz5tz4s!upv33cc){Dh&m; zf01^vhx1b4O!4gDtmwuAs=FGX-|Px#%3YSg`7ICUx2te|vkuO0Bye6{gOi5!@)w<~ zG!M|9m~>TAEYD>NtFiF=7$NNusBM@%#q=wIc4t`|UXPw@D3%^QM?iLrvKJ))p6>y? zxC-DobpT$N0C-6PU`2|W2K+a|BM%)P@Nl-i@P#h0ihQBkxImGtJCCN}hFYZNQf?FD z6(y0xt+M3kiL%PNbt?U6uJ}Ib-Vej4bnesFlRlm9`*cRNPp8!NX?4=4GiyjE>d{^T zHn+a4z_w=mu)uo`6v|+E*TenAZs8_0(#Y{OA&U^w_k7l8Ga&wJj3jFOC*6q}s}jgR zu)^-7D&+sMXRls9O53UAq_MAp?i=vm2x406_<)Chr#&^e{m?4%g=*B`J?1I9M(TTY zShu|*y0zR(Q`zIxEy95RQLFF`2?Zef_ix#IPbmH32l0P&?(RFDK4F?G_QrMy#*q-D_z~ z>c3F^YbJdfJZcljSAC}{iB0`#dTCXZfS_tp|G5TFV&C(X_26%{9yGeY)(SN`|AAnB zE$v=IeIst!jL(O%9J86QFXBJ;)QjTfR&%rQw+{ z%|E3R4;1H|c(gWSRKrm`oNz79b&a z60#6N5(puHvOGayKxLDM8n^*M5(ts7b^w70NZ10%7DR-wh=5yo&*uY0jeAg3d~Wzu z_eQ)uuD=qK7Gx#*V-EqDuwX4}_*eT- z>EQONzfkGP^7kBa6jKj3R=6m14$_TPgv197)0o{YEAKSc>e-~DKqtK*Mb%>6fH47f zsHMC8vvm2Pf2J-!@KZB3CUgwfBw2f%op#d#B^z?elB%qMfpUh?(inwut>o|BEYB5XD&t7lGhJ#&J?pbD zLH%hmuZ8s;ZcFN^GQ5TOsM_iEN1O!xu)CbBjU%iHJO_n+AGD_b%rNVwSH)2QLTXk= z2B;k%6>br~ys|ET_0HP0eX$LF)e_bV{$iW&`FLFay5Yr%HhK)vU(AcV&YFpfFv!}c zO8=0TAUwTbi?@QpOtg*+gg6>jzepb|EKgN=Ay0NMq}r$uy-;LdTS&DQ!YQRU=K%Lq z3MPC3Rt}0QMK2Ub*OlT5>9dzYSUBjp5MC51rEf(k{q|A{%LH9Zsj>~yi-TE~vY^Pr zjrI(vFQo0Mwx1=aeY|TSMI2FWDSC4-ySU0r8QKX-MJcS5^$dz$bnl=NYAXtP%ob9t zz^wyCZwOjf0m=vqii@H>kqcZz7o4&t!f<-K3(kjn!k0q!!$F(ZXrV(nlek%f{- zOC9Fl{r#&m8ED767)QgfMmZ9!UexfQO!Jlf?qJgkF+b3R->*ZqU(a$=wc~qoCR9}{ z`Bt;^QKj>s$%~<$MGQC`6KNP+Xubx2O9OC;^2z%HPnMq_#80GMSI6Jwu}P5f==s#_aOXR5+#@ z3|GWjd5|yVc^fZ8d6}rp$FI+_s&pk7W}y*V&aR!Hz64)xfW1QQf-+ zvlz>y!dh@;J?8;}Q5R@&(jK5_pUT}BC)yEopY4!A>TWoZ1A1^hUeHyF=kcfygQUTC*%B{||L(S;oGjISWa ze|vXw#NVT5a@33NP2^Qw7jr_J2Ei-KP5*7RL|sif6wG- ziLV07^z8q0a=bI`kgnvY7v0GbmY$Gf%F^*9sUXLf%E|Eu)@Q>nS{_NyyI_otIU@!Z zHQbd}4?C4Bk&TdXD#W{6;k2h*AEA*%HW6` zl9r9wbqJEOB|WCQK(|}3Qkg>T#K8o8iPj|z#pAC6(=Yab>7Ef?1k-oy9n*T%9n%Qd zE|?zq?wIZw(Z%^{zXnfvgLrNBpyx?itZqY)%v+Xc{1T#OWYXx@TMDk=9*o#`;~qWJbkCTsKr}!& zMB_bJ$vyO@JEkoKSAw$ISXVIe7jv(%VYyN z)-Y@Fk}F(Sib8L46mGB$#- zG)^zp6>H!wkJAgm_Yh%XY&>ahUG;T`*A3_zu=m3@(uDWn_?TsN%f`QJ2!lD8Uu_5j z1$1JkJdcI?WvIIe@w;vOW$qD2%8B4XM<~`k;$e5+#XaI7o0_^uJkp(7b|lo|J~xk9 zY9Y9td8CY79!<#Qi}A9)&OL%dXnS^#IFhw+M=2kuV*~Gno?w=@!x4Bpd_jR-9#jyB zhZF?jVMT#?M1dh5Rh*X{X;7QT6x8O6N^&I~)9GQrA>ihtccslfCOI#cRgf|lgS#u* zd~f$Q-co+6QboY$KtD-m1a+36%UeCSm*T5_XSuTx?Eu z=O@(Lb8u=7Y43sPN&R0U`ePl@A8Uzz;ky$3jFjj_?lTq9q6@iOR(W{*dVSrnsxRSl zf(h%@y1LOzj&|+p61j_1wM%QH&~F;Ji-D^YXW~l&cOjjU5OYc3t^+lWtKvSd)(-Cb zr6i;jKK=gSv|FIE#RDly1PfMn+HcEeXHoq03oZsR#1}%4=G!Hbfc16@cC$?>d&$&jX%0w;WY1XR>nND#pfu@HU5Te`I~T)RZ!%c ziNy{*8K9rTsS(jFK3{HSg|?7!A%C@l1qTS+GZj8=I@Z+2Dn*W~s)k{%w;Ke?C#rkj zR(}TF(|uPxsp>vf`?QNF-Bgb)UMUs(%+X}lvdF>GpBC$~3bLTx`|o>G{dx-N$n$p{ zGwOczC)%p!*;aB=w|NT!2)S9*aH@MOx6ZOec?tINQ#C8+t-4f;pUS9XGPK9MwzS6_ zb!&YR7a8}4X=HobqH8M_g10@h)z+ofgxq%+dSorObS@V&Bjj=s+I^R}CpY;;$`nD^ z&ehFU*jiufJEWqX~->id=-O7Gch$F*6YnB8;PQyIYY#_fj zbpN+^4!=*pRH1_M9<}v3(Aj=nq{*R0k{ukmO_gpTa|D`ZHkt#w%#r`2t)X3#KY&-4J}pzSb~p1wW#5=1itb;mV%G; zGWgQ{g76{>U-^DPUtzDu~irsE!ZdI4?mrh#H z&_`W$v!B0}`~K3K>9AWRDr_uZ-rcHhv zI1Ge|naly6w!CcA`U`AgQis`u@>oOuQqEwaS95?ji7z&!jskXN{qNS;RpbJh3VnZJ zm{0U39YFcqQjV!96~gHOh&2VD!QsL#klQlc(tC?rcfZXySNQYg4WizJ_tBc_q&2wN z*l}Bh7Hqd=-so$IWqw01xB9~C_{4+j1{E)*C1TSXL7$D)9}1;FXf8_?0-C|IQ<*zU zwX5wnB)HT|OLoy%M=>yCC}$3sv|~J9TQP*Psv}=RsVhJx7|G*NUJ7O)j>CS^MGYUd zSU-o&fjU;A7v}d~b}*4HV$BM{f|L_2U^Y5i0zOGq#MD&%N;4EmU}svkB@?N>Or+kCC+Qj-Z=(x|0T^8r zq77cm(I?Sbd#Wf=9WUVk;b>i`y(00k3+twhw6XRFIY&gzDOWl7iKEiQ%-s>-=r~G@1Y^LN#izaYU%D1e1~s+g5`+1&37)r%)ona zOJa4G^sE-j|LB=t+d=q8wgxVBkCnpnx9kgCnpm{|XcZ#*X0&pq(i72`L}+0OA+^N( zh92$=&@$S*X=Ui2v>(n;boDAbQ3_Z{ZXp7{eC`ndd_9erH>%kG+l z%YiY*75O+5tW=lACGgl<@_&*ihz4 zzp=w6`n%raBE@E#=xwjvi{A0tO|(Yh_(BEezlb?NCc4;HD5SMM>eeNiD6G?v(N~0U zSuaVjLGy)6)A_<>e&Jp(+NfE>9;j_Ev3r&X-0=LySFr`UH11WBspdSU|qv$OQW+=S&Y zJ7IbEK!Y>s^HQKeQTzV&?XZo?IeL1MoW|)qH$dmQOS`)i*oWhp-FATNVSu!|$8+$x zrFm|(wa)yQ5z?NFkUi-LS)r_Z86je_KdKlaE6h*q5P3ZvBIyWOp%L;E&%AEIa3kb( zwlAAsdgd1l5iUPxh;aE?_aQ>6*bW}wz zXzEvK;C&(c7+n$NKC(>6Z|Nu8=!A! z!?U!7(dCemYC#qKRq^q=0&6&q%m!sh*_0Vuj%(wN4(T~yAYj?kyn0!Bpp)^D4A~q2 z){9tw>&%oquK9ZQAS3tQCd>zwkk56B$r=any)6OE>3Z#wxdBp&ZcH~|d{!GUZVIg5 zzIsGEbZ&t_v_oerzMaxSK9}tHxRt2vV&%E$HnuGZ7+?7^v zw<@?tLVQU*6;SrC60tj3#BL+vQc+3l>I}DXxtnZ`OyuqxrM);zsLQuUey(!|$gRl^ z5Gbab;8hw{X!d{TPqqHklzf60H{_C`$Yi~DrmnVESXJN9r*Ch+I_qW1HU^BrXS=R! zXFz=SqPhje(WG_{VvPlC6vFL=fVZVc#1b4Y3SloP*_M>o7B3sZ`s+g0Hv-W7O`-E! zLg%g&oi7WW{}yN$SUoE;rM(JyQ|w{0Lg)J^t*3k^q#-b%u`i@a+Q`<80D%dcBLncP zOdxidY^PLw{XH1%$Wj$WdtZi?B+fU(dISjg_bvz+7JXX?_>WEmd`AdSDCYlEi(e5I zUKJL;D=d63MZjx9!1n`f->b(@poDKYq% zCqTbQ(}pTId3lWMp?usu#P!XAd^SsP^b7_JP)F~U5kMIIptI@PO=$yM?^c61f~XI7ek42+n`r4d=fQ&i8aytlgy+=f6~SzY@;h z5D32(2)_}|Co6FJZ&mx7c>Ys+|FYT#^i;b;x1wUlzdWR_v3H77VqqgbcE=5e)tyk( zdBzqS6}?p!AXtZHtq;>&dA71U3|*?Jz-5{MY}9<--Or+f3V-lPpPVOqbH%q|WIA1%UHP7ghVMd3x#q|Qhr$yrt3unJoV z7?gC2Pgn0)LXn(FP?EE$UNJ(5c%qX88^7yu4j^YWaJ<8UhU$1oW8E-Ok{B?F-} zKW)9ANF`tpj?p zm)q5LTYh=$Jr_=WA|*)optT*s@z+z!c>$R=-S)KP>o-%&xt7XC+oiH;4DFCZGt^A0 zN<0R1^oe`Yb6wF4-{Gx^jJ@HB^J%rZK!UcW-ZiTY*OfsC0Y zG?}Kt^H=PYvR-Es3CvDn;p;n|AuYb}$m*uJ>Fm0w_`}evmXgHE7m;-;|B-B&A6F-m zWDAn-fb@7Ao^a%ILqH0$&b;Ns+=WUl;ht#Qpa%WH7bmdDuhE@09kFjpdy*3BQdO=W z1dERMq32w+a_`fvDoxaTMqP*TQ9&557D^_>whgt;^rd#_U|J>u{KCiXy`0&k)9wvhzv@{gt_qODxX_w^@z1($o zwO1R@o?SB`{?1Rm$^M>S@96b2Z;H=NJnI+UqsetlJamuu(fTjeWvh$c1pz-Vj+X@g z;@ubj_mW^JzJrC4OTdj^*z9$%iIDzhM#?-kO=6k@t}2q4!Lkz|O)`E<@BpVSZiXWh ztXGAY>hz^e$U$lq2~c5`ODMvh`F=CspTTgf);e8AyF~oL0}h^=QmLgP^ail1k~cPv zj00G2fQ~7%t=JwOY~QGoGo}M)=iswO+;(y@CkNzC2zdtL1VHy*Q^K_Rw7ru6-OH`@ z;*$>xR$#}K@|TCFVh1i5&}txgcaAuF{!GnjdAmR)H)h!mL>3nHw7(PeC8XLUJHxC^ z>$ORI%KSS`Nx8`aABO8=U`aaI;cOx3w+SVp(dk;&Dw7~pROKeV zNrKv^gwhw)N{BzcEEu@7KFNd4(UK$*t2~9_gc_Nq2xQDT#B#JKSmuU|QlZS8$#9JJ zx0eNDiWXClN2V|uUu%7BA6gR{v=39^%y!t=rvnpmwGYo>PP3S^PhaQBjz;_R22U13 z`}9+uYzyoYk+@AGwZ;FsJop^!VaVaZgPX^wVJ1+b{ zFf#DQ$DcbMFwflN@9$;e=r7rR@l%`p1>E2N8Gn2{`7?e?dVfjj{)jYb!WEsbFD$$N z4|i{i>$};XP5$MZ{o5zp{)EJQBKjH7Aw9PCrZRN^o4?Y&zLR`A#$4%t$Lo7nO%N7? z3%uf}OkvV#d4F_fM?Y3qy(2w3Tk;Jfq1Jc;BuNMv2MNzl=c`OY4<)W{GSOr`RkJKQ zEh34HefY~+A}iXn<_EQ zOkoDJ)^8h&*QGzvtJi91ra)XtztEVjzA|OB6q=jv$H8?hR3gm* zHmN1P@Z{=2@j3W;G`dnn%sEc~i*LBjKd4qb(t#8IkUYaP1-rzfajG+_3L9R0CX;JM zDI1@udni6I_V4xobbI{E*uSLlzT0+U(4lo}{EnO#pTEU#t$l0DGa0#po@yH2s(3%KU3FZZt<@eLNtHVyHIs*?kcb;;2{F8 zo4xp*Tl{lITn_i!M~9555;4sZ%e1v_-fDr{x%J(F>(>Kt@h@-nTjCFX&fo4|?ZtJs z`py5hDA-#qA1~fWLvunMfjznRxf3{-9ojek#1e81my^-QkbuyMdvDdBG|sju7HA zcKCyu3L?vC{w_c*ymjZ(+&-sUt~=vHw)xAwL*mbF^GB%PpV;P)&8d}zw-|C37rA}o z-;t?7)WFoGqwt>@80OMD{o#FuDLoYb8H#ffEPXAwOl(komZu`ZZ{<+?R@o{(g z2* zmIN~`ne|t59H<_-f9IXra%C zNf*8?OkeQ0Kd_H5ttT)I$88BtiJR{C5BA#Q6Yuv&0bQRj`7_}nJMZ`ZEw4;rq4#_y z%<0Gkb*YA9D?R85e^UOGq$-Esq;%XMg!815nlJc=G?vv}m7BNigfIA>H#0u*L4V(2 zTNCzJc;~XGGlhL~6PdcExA6lH`X584j(o@;<9YGH5BU?kAU^vcf4q=#%R~M=;QrY| z{#B#q!j{-U?i$Wg-#X)OU)!#80dh?SJtqe;uYcHI(fIHqPiLauFff}p{_Dg35)tj9 zNBohxc0A(G*YyjJ`0KKII<{mjZwqQ^;8+>tuhoj|V*MNB*XJ;u%l-QyQP`R!DO>@BiDg{#fdJ z`DuUu<_E>54a|VSP}QEv>A5{q_JEqg#BfSH^%;LZ|IT~j)1L7cHU9Nsplm9KvZo4~ zo`sCQbx(ZZv;J^ze!TTre^}$s^koHNdirwIbN<;qWNnI{dd}~|5P$hOf6nwyq?Z^% z8E@Fz?dRf!U-9>CNQ9*JI?z9TUO@QW`W1iRgf9JKympj67I#ohb@GVTTAD!!q9cdq z_0zBTZ#E>zNQ(N=^ZulAWEWoWM}zD+U-kFz{a5L8eQXgqj|tLKFVOq9eATaQ?pCeX zNVBc9pcRK^B$n0rUj8b;Uw%8~^iRqW@MC+Z@xw3p?G0ZRx=T49dBLy1b^=>HyF(ja zF3)M=CtvVK_E6}pFZ#0^wsx(4L|pe0%K)8?h@+S2@=SctOa8=$hn0Qc-k?o#zW9>= z;;MhHN8h#g{}5j~E|}Pm46Q8WPM3dWTu{+Z?~G&WhQ8YzG@(xH-y96@^1(^X!RT64 zGGwgDFd(jO4kiwtZ>k-O&+1|d33(@V>~0P!dIkk>40TLv3C?WjmUC$QO{NV-Mo)1K zJ2&V7A@SV@29uC^zdJK%jjLw`OKK&Ik*SLss^TwvDrky7IV+e$hR0_GCv!2ggH=0T zn-kog^}ZHgI6rvV+a4dWAow7!zOW$pS1v6JgX#YDxMMC1j+UM6iG{%(GQgd*C^*IQ z|8(7sZypkS+4t7QXFOW9CVu|Gs;>;cL-CrK-kM)UX2Tb%_8ZOQ!c^YNVzRh{D9 z825R&Y8b`0JzTXPmy;f@daeF*_dyD%a|rR<;zJ*)YJ;(U`jM)9Iq7VBq-vxX>sKGC zYWDsdzsVz?=N_$UF@!aV0QU+|dcl`a9yU?Wp<$wGCKw>(xgbBqw^7l`+4RiwhxP6?8_89YurJy_)3x8swi2QLL9wp#Ph2A?^u zU)YV3>lg5mM5}cQ-3ey|U~9*wGlFp{>5(&o1GqpkH*&%FF(kg@tYD$LH*xQ?gEfgs z0>VQv3(*P5HEhS@X9t6PfAg8~zkec_PWG3t>17o0X~+HN1|L<)!_TvnbkHY*G4a;( zf+l|}3O?7Sl7`qH(B879_g&SAy7^z{1*7|0-s$}T-!BXn% zINutKc)wJA*ZYFtLu5bug5W_eH(nS-@spnpYT~8EphfRLSqz3%x5+&kYJTThYZ>}d zQJolP*96C^;1kzS#Gd#oYl6c_?SEmg&XuHr>s@5=a@a+|0{4`Ums}iF$4^~k0VlmB zuD{rpN>=+)Cag6V1M7Y9u8Zy0!`IrcPhJ~*f<(3Kx=VsFGaUKcSz{4Izc@6dukfm!bRwNeO)jTlUlF!^fz2&J9m*w?FypWZ+TLHwf)!EhD$&W2z%CC$DxxS5yVzZBF3@!u{DPEk20Uq+|y@#C%e z?7;Zzmj!+3mLFUe{6cj-zcDzF(G*-Bc%JfRHwDXhy>e49Uav3Q1l?2qO`9mOEq-E? z1^7psg8j)fOz}v`bns^a86NNWOz<(~9dHG0ZHs4KVe=k$MXqr z3`MM6GQ9tIb?{leyy}|ZkcyX8y!_QQ!3_Yr?%H6b3jF@H*0}lK*V_IWaa}NDv>R%J z4{lhfkv5FEG?u(&T0$KU_pn62I;Ht7*99{Nxes>Xu0McH6qu!(nZdG!=@-|ro&Z_k zaZw##v4Iia90x;GYkLd=?~Bjp@*e56Z+DvdO&m1Ur1Tp1*%ItSk+ZhgaeUPljPB= zgB_L$XXMsWk-al)r|88i8L+hem?_xh6KhwrlVKJTCi3+Gnc8^yWkEkt*%z+2Ovk$c zDg(;a8-m5Uo_B*If?IT@1E0Skn38fnjHaKooG*y9Qs6irMfJZiI6ldYaUkLl*8_{0In3rJS6h%0Xj+SG)dH#yLM!DoS({H&XTLGkRHgEpx8qc>YV za?j1dJmr1!=3tSo``;2Q({H)QDF}B*jbL3Y*GRmCxJ?ppp%*Ecw%)3hT;CKAz8| zlCA3#wl;S8Kt(r0{G#aFvt0l7kQNQL>h={R{*!O-WXZU&6}WGQH}wq%m6zPsHyj4c zi~EMh`JeaVyZeSWdk@5m`h_3x@9^R~`h{Z}-@1~fYu@FWzI;eHCVsnL*ic@~%>!-I zr}Yn`#^*PZU;bk*|Br@*1LIHk@1B21MwZ4JtqgiC!7J5yH2K5X;&tby_-p;C_vf-V z$?2|y@)7Z{0b&30dJ~i%J0NTsQkkFcFb9cjg7`N%4uxXu;I13hYd@l`3FjD|dUaZ} zDrc;>-}|gx7AUEim9NXlt@D;D(sdBo;M+4S8Cv)YHSx@I!#<5K-%Fd4G{^{C=Hv4Q zhQrF+l;HBIf#7oURpi(7u^g9Oh$G3r|DbSuWgTui+z%;Ip{0@oHUASHF4#{mpC=L#%cO?Zz&6xO|Az?3yifDS{ zYj;5V73gT|0TXu*VL)}E!UUi%^b3bJeou{-+hK`NhIebUMo^KMIrvUMX>2X8((P;2 zktX-Mt7V5SWY5X_xLeoAlczWK%3Q&vk-5(FHtZ|uL#nne^}}zff1xHCK+b^$6Adc# zC6ervXb7t=Lksz+2`AQJ^!{*bF^WbMiqS}&%Vg}}j3Q!YH6{p>|N0WgC+VRjr?T9kkG!T+NJ<)P1NQp zV)s7S_+9p8;dd6L+j?LnbK`mKft){KnUzNMtGi~u(!@~mxW4eO|Ez@CX2FVLs zTN6Z+>tq zILQ={z%xMj7U|3P{ zUcxWRwr7&5S^^5%aO$W&hnFZ%`Kp$c7W_6dsldkYR{KVd8f=o~QbQeFa?upKt}|E* z#_AR=x<>m_=M?!L@Ki$%-%Qpf7M?O7;-!({uvJq{fH_SG`*AnP-c7Sb&9FtWG@-Rw z!0(XYBHdSfXlUD_(Sk`xRdjPj@y4wQ*>n&#NET!25R}3%Bf$o-1 z%mMCpcc!E03bn#mkeU50IZHMRW z6^6ZQ$n1-&$VVVa_0FBT(l62xOzSj%H!c8X;xyPH*S2YJNT3)njR`zgjk0O}X5EVB z;qzff?jFydV_L;2G*)n#>p=5ti+l*%$F%?JC>%6{FvA(s1|uo-!;OI9(+IYDW3Ot? z{N&NXw2b=HnXg`Z)EfMe&n=m6KN=sH4-csFsA)|${`e@ghXYrKwRL62_xR3yI0q5- zdOmFLUt;PIG+U(^Oi^n*dsMg&MyHNZ;aDlnxgi2q4Bl#Bbq-J#CbPMFz4-o7;Y6=B z{^6)_9_wq4&;4G4x{}XH`|HL|K0TVV+%t(H)5|F`_?-oE6ioJfRiA^GYza3sno$_} zW|pv)pJg5MKo#g?q+@&pSSo@fa`Rx@utJUc6!)T(SFCxg-7*-lzCt{7OxU;a7u~qw z@BskP1I(w7p))h_rZM5T#oNI%%l$0+%B7K8+vjvKT_e6!S3gFztD5c%_;0FGXelw^ z3ipVqV?#5~;wD^ze>;W0QXL^`O2y5R3QVoKYz+!m?4UT?c*&Loaum2(@zUYpfPu4m zZjEZmr?tR=Z7s9Ff9F3)U{;(R7n(u$!BA-yJgql7tLO{M5NE{)j0>BLGmgB8t;`a6 z;it|H=@s@=%L%YGK6hLwyV(unLfJ819T!espqcYq8R&bqLXFQB0c;M{sM#7=IWrry zm3$^<7y7GgY2``TB>dOJ{=vzFX)sHx%=!$6UN~l40rmnN-gc{o7 z*)8Gdp`d`CImp-pMF3x3Y6mT9ILRCouWkvOW}IZQ+w#5S^LmoH#2h5PFxwmi-cGms z_Gi-)LUqX96)X~-qb@qA&diR#)e;V7YPqK+9LYIA@;_kUXkMKnAj5cJojAw#(hP{J ziDq*R;1ro?4mF4?v+1Z{eW0WQ3A^qc&e!f;!J~3$vNkubr_Zbg(r&z>uuE4)bCdq# zb{@A+bEN6P=xplD#az+L84 z#O0`nhqwFD5$&_16@2{`&fQ1q{L_^vY)7@ne;*$XnWZ7lNd?*Hc$#uTpCFJ2R8=demgUt~9$B|RkmSo3q28)&%ihS3oumv~BVxzNT-EVqJ75H$j4)%8(F0Napc_at~N# zqzl1}GI_vSBP){{ZoA^`iJ|G+l}=1^JZVxmJekxAQKDRM_6NJM05w9kQ;X`)(ozGe zx2VO!~IFgUuu&v>6F?+_#%NE| zK%Glttfy&6rw8oDVBZWPc#k?WFazUrCxLr*meZR10z;u0i>3~{bezFzB<=Bq`-V|*-*#q_ z{3h_5YBeXj9-Dhm14y^+A{*wSU~IR~5-1`EtVQ`~+9()cD@1p*h;(0(_*n!Qd$!u^9`oo%ZV>Pm%<`WKw%a{(=f!+$=SR zxp%1|t~^C^LHx1f!(sL25VPDYGs~d#!{fvDV`hB_xy9xVQ6dcB@cHhTFrpN7HPDgk`c7vI)i!xXPOVJ&Cf8? zxhLV+4Qpu!k0OGZ+)(9K3uJM#zcTsGK{$;kRpXxaU&+_|FK=p!rWv0YUZ}bjGFpw} zq~H>NPe3f2?m!lxaF)Vipw?BIfZNqE-O*F#)q?03Non# z8imCtOb-VSabK-;7-$LJv?9x+1@V>B8JT*$SA5~aO#gM_t6KQVT6|T5rs^_$?WSCY zgC}(9Glw9}TXvP6Kv&kG3!;#HYnmyFXaY^5Ww`?DCvs!TafN%f-Q8VmPM z4`LLddHI=A?Um29fH7e=RJo@qD?rzj<$1q}ofk9Bv=st*h2hbX7hg>ygG#rCM)p#X zYf4I56I8`!FF*Nwn8s8J-mE}2w&e4H6P9y+ezNcZgb-^A!}-|1_O&$WTPf-?uHn5x>9cw60Z3nZo-DH8GI$xY&k!9`s zX?@~CSVh^J2NW`t357JmVGM+k&JHGFO8u)G39ghd*)Dk6a%-F z;MO$Ac2F=q*kW}x=?12Z1KVkXS!I`ToEGA^vHIWg=o7fHGXO2KMVwsXcy%gRNxP6L z>~hFOo|z{_2a8l+L+V6x{5koyj_6{Kr$mL5QhG*5eys<`;2PLz7f@Pl^^lJIC3?Yi zP*uen1jstQX^+2kK-gTg#P3QX&|xX3ly$x((4K9%RnYm8Bc>cCFk4D_CqF&0K=rT3 zrlZd@8J_uc14>@$nNKf8iz+=^jY(p>h%t(O2pHxT8;I~kfLCFvFl)Sn^Oq4WMa|k} zp)6DUm4KpF^ zM&O$>B{h@2?ua&fZbYLcs&ma}QYhRM7r5HYfGa8!0c@fv#y^@B_8S5a$^6z(cUuBa z(M*gRXNSXs$>+{TRxNK#T^HQBOB2S(=G`h@hOxL<@ zhU?G^TRXDRRA~ar0SqMVVJThL-PLG~%971bT_N^p|FB-P(QBftsc>xFO-;eSlDup; zwmG$;q{_@uXLZ&We|b)LcyS|b;K*l>#S9S6^;#l;7~QbOFj!XzE2pcJc0x8qx@XC* zM%UFHBxi0@Bqx6k7-0pD>4s2-2N3(KuEDqm)`;}%F?O!epKC>t*U=&Rz|YR%X|LU} zphzbm*4u2EdD$ch2k;&dyQKoL?;o#QgiVK7d;4yPE!8K)PUE!BEsCYWJOD(>U}jm~ z!9wE$!j~loVecXPWN~Vja_ESyS#SwqTx0F{(9{VXdHYD*ZW7H2=j5r46#n0$xMtXv&#*YVVj*Vow%)4U8CGq8{`aK_z0S1Hfb)#bzFh zrEO*&6(!Zw@xXk|)mg>W&t%1{HF z=`=#6h+(wTHE!a3Em!&dP-^1!BlW-vo7^LwA$T@oY%pV{tGrIdben`DC~?9WR@YK= z34Cl{!Hha3bO=j#uY1w8l^GGt=?qz~U?Iv2H?`t=GQrVHk{TghEs1@pxCPe*tVd=v z!IMBfrHe#vlSFpXcv49WU(UYXq?m>*9zNlX;anNdS4`IEpD1$hLag$uj zYVY}WN|Lc}a(yH9R4U!{{9TW!{+xL28$OXcHZkSR5U zbpjoQj=bcb;|^)pxpu7;5ULq@cfw%_K5AN?rVoGhh@|b7Fk}pAoyPKoQ`-0rR`WKy z7sdH>T_e-UJ8JqGYih>tPP&#dVo8<99P#n~=H=|-IT3=BP6Hx3jkxIiW$B!V{0`c% z1Z{KX*+=ZoTVI7)0KfFe91U>??L+CqMGEWhpcO2?qgm+i>{cM?e+Q4|C=3p`V<=T0 zD|$MqK#;F3C0^pP3hWw}$gB$Ylrm$MZRy1#O4rh=_??L?DEjBBWvgrR>I76d!Q)lU7x+MZXpNOK&TDPAc z@$?4$U46b{xXS8EtE^#g0y-;3LTAa#?KjkHAhNi+>{36S4avkNwEoE|3a(nAi?!yA z!Tge7(cUXxf)u?HF{Oxm(_3X^&PlQB5mbEtjBT&1nRE9>w<6eTq7)XM`0Fzn5%TMv zUDNxz9yMrl=fxurWjUyf)r71vGUZJ!;(xOo8|3ibUr6JO*pw~1Ui#1c$dhROiJg71 zMB?c+Ls^6WC&b~!kx4|FHLozW;TXnqg!L6o@GI8nPqSYZ7hAUqn}y@<$-*pEx-I^t z6psaC6$4Ci{l{QMaaPY(tsTmmyPu_IBFKH;yI5Iwd+Uh)yLzpH%JKMfZ*|1w7oNV% zbNL}C2{J1K)WdL-Y&Bo-PKR+vbq41)OIr3~-GhiiB04d* zq-w|3RP7LLI<@1A9zxtUrOqz2*tw`$(HXwR%~{ogUL}d{(yr(D2xb7OY-i}%r5;UH zw~IGYZVj#AQ*$FcWBo-1@rPDJt8KzN7bXdM`{(pwyJx;F-pJQDIjGDnRns$rxqX!H z(p6lwykmc-OxQv}xtqfBbhBq}N;s&lTZPMSi!(TL&1XGxbA07eY~eR}=5rpf@IS2O zR_K^q<}Tua{6PwmWkha@XW543yt&7DVSQ5ra}QtCI#ilFJ#()UqVJ)4ji%{A94`&~ zA9I6vx0AF^^d-emn^g}bp_8Om>v1Hb27Odg!krmHXzpC`RG#bOc$wDj`A7?m)?rDL zUO~+wvtgSM3pux`ovNu+t+Z0nfcz|zx-7V&a=jBROiJEyU-3>9eYr}s0O;j@R%Im# zyRbEk_0T;mpWUaAD*LBje8KW?_@M5cB+=+bCTABVov{hE9s6Yqu5rm=kqwLCk*Dp6 z!zv*rqD}ZP*|Aji+S>V0U5RtIDYYhOj0g#>rD>7l;c9%Rk_t2ER8wsmAyzqQZ|hW` zxfNDw!8}(d`}AHVNiYe8PIQu}DhZXLYm)dvqGpIs+(IAU$h7j6w-dqL%*S>tz5I3} zxzoY*Vw#}A_4M2E9}f@5;5yfIMA+1Hw-@6hhQGQ^>%yEna>^IAtG3NcjM= zg85~2kQ2;K15r(%Wv}2Qra}H3UcL#U zC^A@zvcNpWQ;JY@$SnM%Oo`koU4c`~x-yfY(=0`>q|Y~;P$Rv)JEQ)pXP)oj+htwJ z+6fAc5!(llpD5q;*7arddp-19FLFT3w1H7ApU3a^w?~D8vvQTYIj&z7HdTpoomA=< z&si1rI<0$+qL24hqqQkgBlgbjP5g>yp6lMkehgt>gE(nQ7qR%>>rOputxk>_gSfLQBZjCqNg*3-o&d$y~KHTK>Tu5O;fo#T&5Ynk6XMit=XY4IGOWvW}r11 zl$9|oNjfmO!XT}UVgEWYQWx9zLd$Df8P=(`?XHIP4y$iUKrO@+;?%x*=0p2i4sv|O z?BHaCb3VJwa+0kOsZ%pfwR3&f2U(L@ozLd%hhc@Jo91qf$atH7!e68 z3D!XuTa0GFSmO{Niy8{LkEb0Qj{F!VH=blHaDC~UlTOE>XK22P7}ms`a>Hd|GAEj6 zY`j^|RJH(pma?rXdx2KYM2TD&=Ko?&EcLql9d>;%98&Ubn4b&G+}u1ITnY;sW^n3l zQrq0LEoRvPo|Qdv=Xa1;3eB|(+J&qIC7AsPPN_oeJabA<7_Nk`>D>VAeMnN700g*r z>j!|^`Z%Glua$L>-GOVgQUL%boz7Wke4t)XA4F0jEUs-F(OUE21bL^s$-SH)mvoqA zEtwrVtZprj89hFbK5~C&dVjk4sFVC&zj)>c!_gC;^dzStL89;yvcjCC)e)Sc0I!|M-Amu7R}intK_11sXNCRa%Z>|sYhN`@ zx-s5*T$nGy!7VMMAJbq;XXA+cZ{bIEb>PD}M{9XVu3k4XDu*J>?6!##`gwNyCKCMf z%*KhN19%uzXrl-8Z4=)b>?b-)ApZ98;lO%c>tF|~5|?&wRcz(d1}Xn3FMjg)u(dKf zJ52}04JU-XJwG0PLO6n$dQ1YCnHF|uPNzQl)o~Nrq1riPkDAyT0&*SN!?UcD*iWlF zA_S9jP1b@Z`>rD9h9H?fK@|nx>M8LSiU`Z19prTEp6dwjNM%R@A-IYG#rnwKka%_T zvD;roZ}XMrJPwc~5*n0gd4N3E!lsnbBiOj1vcclMuEDRRF;Hl*K;N2;zk6a> zXZ_$)s4ZHB0+(5%NueF!Wzz37oXYC81m=dI^?uCcc0xwr1;yniTZ7x;(M9bk42o`{ zxfed2iMDcW;-(;Ka&xK@*_YIeA{s8WDiTrjIUN87ii**#sz4*8d@G&}p+&k74=Qfc z;f}W}BfuB3XGNd)3MRTEO)wo16B+lC+;r*11cY@94HE!B{XbZ;pM1CFURJHn&>;~^Zz7Vso)kIUE%)ahbym$?RA}h~g3W zn&-Z6*YPgBqwjN+RrCW-rM#w7tvaF~>JIMMZlc{DmPR1MqzD>+OnK2yG+ut{wXfkn z&V}*Xi_y>Zb@U4rWU28#t#Q(B)}=wOc?ABYIDelxu3S|`9fDc5OoZxo#aqm-)%i%) z(rR9fe{xDVZf;^pg_31T6>v1J%#vCF4~Qi&;TxC9B7#i$$tydQG&x>!YB=0`H9qas zaOh(8o${}BQPcK3%?j4#CkyKh2b#$kbXmh|IFR0Bn_ecZ&n}ay`(;Y8>!f<%_LX?o zso|gjGQ|eeBmF144PQO8AwN0(+o>#0l+~40Ra0zL2bd{IRR>5%v}hO1wjvR(+yPCx zhNp#DB~oG9$w_6^?cVAy3J+lv$@TzBvcqJ)vqc@dW7|0+Y=A{XxLWMDtem%=UevCus~I$EK7!#ZZZu9T1jwXncrvFq1Q4#ia ziw=9d?fI$kjUNxE^_l7hkrw$Fwo_^Bk3Sxc8`}yh8mbhM04!LvFoO0FB=PhJ=Q&h7 zHrSfil3^^GV3d*TIWhf9Y%@V0arRs^hu!?fEfd~9ur?>jr3M6o|SJ3I)rW#l>G zfI~}x3YsNX!*o)FSuLZ*MNMc6jVYhB1>4ECYODxz13-kkY~P$6|zej+@u#kD>K5;5xZJXR)L z0b(i?kn`imKM{^?ugqTACVj!cwPp{ja1nFS=;NHY~j}%;c%3vSpn)@kAZ4#`PZ;{k@jj6sCNu}x%Uz-cGSQ^w2W@q7OUv4 z>Nli?{)+M8hTE@Pg?2VU9I!Xy+<9R%a&Cnn1CUKu14!a00U$0~QI`liHh9eQX`lTX zt}zzuC#yoN>LGgYJ7Gyr+z-DLPr+l~Vu^ZN^jo;PG?V=6;x)X{Zd|)hVprG^vGR|= z=jOkp|NUN1n$Izv`2%G{f7ArzPtpqi>=oO+=q(zbiT=WjIQnmokTZYP1d9`vM{~k5 zZGT%6ns+q!StCNzylQZVPFU`*6PBmyfaO-5uRKiWE87{`Ivt6;-e#sw+zq_K25v6( z3$@W@OeS@_az@81XQJY71konlGVHaQzpwa-1WM9cubqwWpdgHXt*pP*pWk@Ov_5wmm~(hzjzJ_!0?WDrV`)qqE)Wj zwTntqOXfiBWjYF7dyBeOI*O$+u1s3VhTra~pQ?=9wfR$4UHQVN!a*ZMMrKvJjl^t; ztq|;=5sQ|r`BnV$PleG@Z+I)w|9|BzYs$BCgqCC2k~(;FtTH57w+*jQYt5!4X3vjS zksqfIWzl{EOTTuWKDR`%@o}FHC(fG-HHmnwA4=-g-*XEqM^SkTS*{v2!;V0-E{mIr z5r_ttMB}Ahny@-7DdQR7r*(DMGzKeQ*Kc0B9aXM0$u-J4`(x}u?c{#xq@Dqgu3^~t z$zstqfU*=l!a>kxyV`vSoe6~`hM(w+!ccULc3F4ZA>Kk}V&>-;+EBOc*x_X6`oV>E zNwOVK_4pk;hi|6uh8Ct`0i&4Ea1N9;)wG*4rezfTQUp*Kk$WLN@O)-2?eQ_^ zhllJ-9~^?U#2HCgX0GWL{%RiEmvx$*JK->T_XEcX>Gv&9cea1dA zY2)EnuMKCH>qbl0hI#K>JI-1gF7-OUeDRX-8gE8?+`4c-Z&!THy6`5#o=jOE9@n+F zo7ab9(c!+bKKwpWcZOaX4voLOA#5De37X>zfn(5t#xjw%3pLth9>2LEY;m9Eu`JKJ zG&FNMN$IB_8RQY0(JzKJUL$K+1ZE5_7|L}3KgDrW499wYisu*zmpg;_cjr|PFB&U9 zFi#Vi8O{b{7pL}h+3gp8pb$R;KrXLgfPN|-&?;O$*?M;SS{3r?{LX(#)^Y=sYo0B6 zS6WnVDH++I=vtXfa3Lz~WQ+m{uPnhzT>U+OmxNL51aDV-;tgTHWrApzBS%;KUf|eG zRknI)$YDUpPQaieB3wVzzBt^7aXUqkvB7H~e2b#{{tk+Ux$oZ^dUu$~O@~}1(UXhm%E2;^;LPi=eYm>}gSZ+!(@ozWcgO#?YvdiB`d+;I6 ztuvW5QAQpAe%l7aaky9GT-#*Zp>62v-P>kWXG;s(94b$pj8j19p`BQ|H}DZbTtP@a z(>@8CQb>l}hP{(d(J#EDzLW8)lDx5r?uEd~`cL;C!HI155u?axN| znaF(c!qs_*OrynAn_xAq&alB9*9XsZ8K_-a(qjWs;JIqZ6?2%nx$l__lHiu_4K*4m zB7t`&gU*p}z<<|~Pebj<*DkM0s$BPa1taRQegB9AduU}*46aML|A@h*=*#(7b@qz4 zAB&`#-0L!S&;v;oVVWS0v6GfuCZ>91mgMV-v6NS0itB>0zYCCoB|y4kO!dF74(ndK zWskdv>!7(T2AW?v6-?GhNDFE`-vk%wT{Roby7HuAmxGe<08aT+75lJk+)WI;y-a<=XbbE+F}N7YWg|scpV3vhAXitu8-YlzT%#69 z2wGBH6<>I5*iTCi|3Hqun;5NjY*^tyEPs@n3fwor0;3ha?1-x+AQlNwki$WdH+oUz zOL%$@EJqyYXAh%gc8<%G0ug&!O}DbWe$4l7nD z!Cjh{_E=BsA#EjBacV1JYgtcf;Pkd3jBu}h+}=gU)o(K(a3m`19{vxt?f3+C9$n*S zi(L^~hBG_bb4kw<(TIP zBnJ}WQp)pXeQ z!?t=vgXx^r$a{;!y~TaixvcxZer$={j!I|J_FYbgjVHXLBR{(09c>+xyyJF6OOS9W zhhxn}O(*(BmrjcxVaBAzD5skmixt%snz72TM?+_i;@ch~BxH<`;U(#~>6xrRqnGD%G_?h zo%M7uYlk*VpnhRZASv&Z4a?R@EGFozcp-`)zYuK|LHmgszQH+atSKE zN&3}6UhxKaM^`e?tq3T~tt3G#v2@ai6)GC^IbxxX!Mn1*3{)G{$%X z%2em*MGZ4`e-4#-{2Pf`*4y5`D{}$UGr1VeG{Ls~NEvEpS`3U<x_Ce3M_zVwQ5FW9QhQZi0?;Gd4Z@EmR7vNDIKD;3@q=2QrfCg z+OiH~+}njH)$VQ%E)VYRF`_X=?$&Z4uW(+6=u&-@k`!?_iAx3Tj4H4RGGe@mr?q>_ zOCc~U3E8o#bu|wVM-?&!V@7@CwERA~e=pMm?0JY3E(X5aFFaMLkvI~Bz%|w^5Uws~ z>;$B}>0j?AHxeoGZel|!En=hEHQsT8lveX)<6lDxs?%sn*h3mJ#IZrhZ*1~Tlvv)F zU0OoZZrpTuR~h7rZR|+f@fFS9<#mdUvFtD{8kTsG8&+!I-7vN!KB!M}U*dz?PVv!9 zo|5M5BCc4xeAg*2lSc`r<89 z3eCgM~Us!^8Oj8}r9Tcp>rSGzcmtLr9~^mQ>)X9x0# z#xUar!-f(4SUY!nGky_TgW&=2>OK=Q$=Q>h>B}SAyxiH7p6=JD_q|O&H~^pFgl2|| zZz?c?QIKK4S}|LPQ>uGrmPXi968feYEPhGtm-{1qAadlLrB!&Tdxla)f^ZZ| zBCr&euAQa{Ppgqp*HoLq%ky4SKBH$-vjRIamFv0J3KDt|o{1+@JfGQjFD2+@bUwL_ zqSRHp*}1KLc<$HGHx;sCg;_*YNil<0qK6MT+=R zAxlWP1JH*&(?rPhtSMGSUNDDtZK0hSLA(JKT$xpBn#_5Z51q}^_VutywwHlz; zm`Q@z4o=IjmDDC}HjQm$*{Nw3qq4(ZxderH&{kr<0!TE{Ox2|d@Wt;bvZchDToOf& zPZ_cn5R{EF3nji~%anZG?Q3w*g=n}LgNBzW058uo+?^Q}W$C@FnSL%HAwt!$=(lF( z=>%;y`w@EDOkdc90LhvWr_qq<&e3-a*~mgd(dD9aN7@#eRKJ)e!Wp5eg%dC>JVY7l zS4)*XLcUsP?28e*gSBvDbql2|X&}@;e%UR7Q7;eU<^G_Xd+8LOnXVQR;%S2J&k@r3Hy)j0 z{B|=7mBP&4P~65_bc%vGXrb~+QL3TV+f#zN2F_+_|JZw!LvN*r9@gIjEbZcs$`^_ zY>x!MIx|jacO7O$h3%+u4cK1CvQwu-QC;S#uSz%QVznzmd7b1bh}}vkbkEORgPW@Hk9?Vpp^q zPEsgxkU~v#6u(vcj;5Sr_>D4SqGNF_7@>81*QUjyjbo{w7}hC~*~T8K(e0T-D^p#> z#?ByPEZ5tw81;l0>xho!a=18dzC|SDv5}7Vk__fBduO;?YVUACGRrzzAeP7wA7;7b z)9Aa5lqfI@)d!4yx_lv^rJTY(0$Rc(>?1IJz=c-hP_vBqLgzorEa<>d<_LBQ>21O* zG)Rspaf_phFpGH*E9#ap!AhPika_s^O2Z$;B`$G~BOLcQiU#N#JGS#CxP&50Un%;q z+E2RVTxkC+Z|Y!VSa8~xmUs=V8&PDi`)-I^Sw|DA81>~zG;_T9K$>J0+B?V(CbOtv zAeUnn;Qw=sIYK>p%pwj(<^G)fQ9zY7M={#7+s%p#Xwi{OAjX@F2K%Cg%Eqj?XpScP zJU7&jV%q@2+KNgyx-6A+gK$K52&;O85H3NZk8*u1etA^0KSyJCRmvNR_@F6@y2QH} z-6{yLBnMWN$Id&-v`n*wu|?C)I*!sbWD=z>O(rQvX%1p2V&pV`9_dU&7Sa)@|0+o$%=%v&m~cK@KA*X@sd-#B?PK&w(ce zrUl{4QiGV|QJn1x8;p*jx>fv+t^=5aWGIz->AKTEI@?x?L*1+l`-{d)-nKpZphHh| z9C_2`W*JCs;w5TxQ?;yXaaI`opwO2U`tt6M;CdFNS#z9AVB%(HW?A|}I8yfF;T^&& z!WCphqw36jbFkRaTn*~E=2){pk&xi}b_Qnl$$iU*mmH-O-Z8WgzjF(#?Z}t#poiwd z1=QEpk69c~1lCq_V5R-~7ocnz)?op1l(sVZm zws&3Fv&Uts=bhj$t?V5yE!-{a$%O?bdpv-VFddQ*zilP_*F%F2L=&FlcbX8Ds1r^JH z3MN<;<$2T{R8|MWqN}dDu3>i#m=*)Bpe~B2{J!T@_YE@xvd{bc-ap=t4jpcFg;OWj zsZ$6BM7Z9ypYv{FjqaEF_dVPuQr5A6r~x!hLXts^i^7h3x7mpyMM(kX(LnyY zIC#b%NqN!$NVK@Lp8_3=&;T$^Xgtmx;##7L5&~MOBHaY$kiZ5!yx(ypG-H8%3@xYd zv0aeZTXp9odp})BSl02jxmKzzq9A9V1Wf^!%t^B44I{VmBp0e7)?o$hxq zN2PXJQEreoR?PtEf?#Lkk5(7p#vygD65^5G;td`k=jdlJ4#b(_d@4e8|31pXel~uo zRVsn9TX+R)_P}5agW$D>w<%nFhBsfp-IJ5hW2^4&WA!Pq>G(K2KO}kw6>UYI%2}la4iS8@62(VoVji<=S(PLC*i!(dDts_R;z{> zUK@u~H9PY$%yYmX&V_Qez@6-z=LVr@A(XSH7ZlsayXr8tN+`lp%P1y}q9KtZ>L<&A zbTj^;fPRRn`+T}rw@5{YWq&S_n;c?cyI$a_cXcoO+cN>yRp|&SKj^}Z2glOSG&!B4 zY2ziiuW(AlJHLE8z7U`i@1w>1tR9f(f>|Aq*KTXG=OkDi-TSQ0KEs|1j^L7%bnR(O z_dRfTW*dNglJ9nK?RoS(i=O#p7uPf#^dkxbP`a&28kL zAW?iiA0*NB7g9qY$58;uDx$DnQj5eQgMh=ZaY#bWpX*d4_&X`~f7OVIlCCS}*fU9= z6O_OMj_V1T*&wlV$<(SN>j=tMojqqfy(RQ#qW}f!0FH8)RTP56b^@Ub-jn61tO zCTLL-W5A@sJ`YM!1@DKQh71|bG|%)?BPWMHcUiMfw$EW4W2u~^Zt z%Ms5`bA&$)YImeJ#m;%tS`N(&i&Hc0-g6u*jqoH^Qm?S)4w*VV~D5%UO zZ8o8g-~|!Q1`PmWil_nva6gNt4r^AZQ7w{oRg1qOhXw`FE2`63xS{LHG$%@r`!g7t zs=z+KglLLLO{Pya1o<;k0 z!NS(XH+=CZuz_6?AO5zRliG%n85JwfS z`Fd0Xz0ad32c{*+$idtY+o_cDT^s?>g_6Lm=Op%^Bi;dN5(#MC%*EWatp##yK#tuFk`gMm266Hw<+C{34tB7@H#M*)WLwDJOv1>D^z*_5nXLZ zG9qA;fd19T%7F0f2L|oxpz`tnrhjE83PKL3BS3aYtLs6IY-7ySV;*;-7oQ>pSiqiX zn@E5I_niXfOa>;YU6A$VlMubY+z0+_FjNK}0uG29kw%TRFnWm#{Cwc#97ce(RPbnK zLd=Y6JZ6M#H*~-hgQ680I+ih><<5VMO+uPIll`Y1LEaapph7>OgESPZ7{XDZ2IZAW znu_)Ej`xk?q&-VBuvMvft8p&2>fF5*dx9R<f^-B!cJ+rb|g=l7)KQQ1yU zQh_ijV1=XQ<`0Z~lzRIE<3e1H_|RB~%bpL7TeQ*g#*d5v+D`fMM@DtoN9ufSY_MTN z+dE%7NERv1*Y5GLF$nu@raYyWWYbVmwrt4ZJB=cF&By3)K(0ec{Vq*@@Ubx}u`Q_n z6Jr9l1)cwi@h5F~yZcY0kA~_pkAPD%C>xKkiseJwkR<9;`P4S!pt84A!f(Ut%PamP z`m*IwX?<#(g^!>A%!nrMNBZ_N!$JGceQHcewEMx8W=^%ihIc&6xL>W8V;sD>F7WW9 z^61Zu`TMRm|8rwTzp*yyr`pA~W$PEy9hTQ3$eR)b`cwsaq|lPL>F*VJ-{;0bS>8F- z!rcnyp~;UvH^$X;-suFsz>Xw3!3tZQgdz$#`3s|TDw5I)Y~7+jE3stITfREN$=~0nT;n<+AO@Y1(kP;%KX&J^f4L z(8M0G_8I>&R?+nT_?1zf7X&(G5G^3#8}es>X2R%N(+;Cg(I|A7I}1XgQDB4`;GBMy zyl98f=yxZW+8rN(z3wmqqdR}yVGKo+K;WEWT4D$xb7W=<^@F24kaR2D1LqwSQ(-y zXM~`|#zMZhNJ!#_CX`@Bgeo)TRbOMx;6Zu+*G3C2?|yCcOQ)d)cri32OTRJ3G>=YV zL~f@|tmvstdBT#4Jp4c0FKPT=*f06JZ;g@Kp!UzdHO3Rh?O85L1s#VMlv8(sUED19 zY`3b*{@m^k2w<7o!{jY0FCnAOQ|(E-&raqy?@tir#OQ{6XG}~moNK-_8q2)n4E*{$ zM#J@i(Y*Z~^Di*J0y*RR)U;WD*v(Ar#_x>@NgEp7T&0h@9#cV2)y`&*QTh#ejFKAy zqpaA?9Bsw!R7UBw@&0b(h(x~!{{UXFB8h~rTrV&D!B_&IX?s$?Z`i|(e*7L|aN_$b z_ZXwHK2eOC+kgL2`S(4>9DG0aN27N#;4b>nD2HUb`A6eat@n*T8E1mv=KX{T3dr`K zjKkGaFWK-jHPb%+XUM2TJ6G&A`gLyS`Mt&hZP25`#p61fYxyKpAbSKw7?PzZD6TB` zj>7PPWX5BfV01^*yM zfiPyPV#5KI8Hji+7vT5uDnryyOQ=|jG>vzg2IfSyssK0&G9FV(i`O<#$`fAJrMn!ZvVXd$%U-$zyNq7MIRcLgL&tX3EV*M; zC=URh^-d^X&RZ|?<)2515%Q~afTXwFoi1hq#M3jxX@Kt28A56h%tI$zE$vrliPfH1 zE)@tQ0hJsU5p`OJ{8dB@!AFsuW<~p!G=01#C+{^aY4;SZcs==#qDby77MA=?Pcbs( z#RUZ-Gm?W0YGhj7MD`T2*58;TNO3965kqF3m9Ap+PNs6-YDl6VY~tPYNK%E<3-##fWKJ&TqFjdFa3+f9Q0*Pv6z5TUlfb;Q@V6% z3ABhSG0DE76%q#cz3`u2v`Sq0amb>lmt$`|xFafRF(uDO z#ZJ`ucqPwF+UvrWRaN3|DED&}mz!QKdJo^me5QlawoM~2Jue(mqQej?bz^BU&u1!P7Q5vPR5C7k7SZ7RpUEXsSUL_QH@G z<0Hmw+iqr3LlkHatCA zFV0il&5>vQS(tKkgSY}OhJ7tcjog2xg++}b1HW9|`Ip9g?%(q; zyz*Q@Y@k+uNq2%Ww~6`9tW_YSQ=0@a%!N&2Fk1S3ljxUV9Q&mO+MU#iaX8JQBn|I8 zw3lv)D3@D{g)j{$en?$#Rx|SnG@K*fZ^lG4NWDdjs#LR!en#Ly<$i8LKe3vFHr{5+ z*(OhK5v6^&;HxOug9h_g6lw+ixF&Knl9j4AX&q)%8>-y|nzC_SZOR8*ME=1x_923+ zlYA0GpzZ`HZvJ;7+ma@8#z$jHhG!h~DV){669kTsHL) zHMo34mu)hwFL-u?9MM-41F?_oE6!Bt@jZImn|k}B?qpEq9{2mOFJRFi5AKJF{9c~c zPsC8kwtnL8Jx7Dvk-@KqLxYi9`ZG89uD_UuSprKQtSa9M{{XwvKh}`9PN!Y(jC*$v z02wsM*9UOdei(rM2IS_?Xuby$0?OYG6k{y7Q{WX5a>@YA)As|x(Hms$ATfqiyXk{~ zZrkLtLCiEZ;4Ny{H3-!PWc6UaOdZT%xMMIZrbgK@7|bCcw+g#BKvU zOOfg0AkHrujr1k`M~f3t_J+~oQpogzF=C>oy(wpp6}7&Rq^BB5q`;8b+sS5YA1lbp z-!T@ae**GYyv_kz$K2t8^GVkRJXP7Rz*CiVstl^~*m3a+GPnX;gBtN)ntWiKh;>#k z2agv}hvdfbpaEU}V?4%ivm7!(RF`=`uQ&u%jVfZgEXs5x#%!41+(z#VJyX~4i_U^U`}DhGeZ$Boy|@v z58?iDPPI(@WFrSj;5TJl-*7mi(ldvP5eJhort^{R2w(G!$YMK#Brli(rcwQzkgC)K zPcLVp9yv)kkaH(Z5@+D@(j;+2&1gbERVq6SS~lxpRiBSb@T10NhOYV;>G`RWnkAnjZE;}K#;Ry>!e`s9ow#X-rRczt^E zNKw)!p?oLVtnP-7pH`=Ab@Q`KpDIRYt$CyK*vsXwr;2bl?L0WOTUa%9E?UUOJ#v(D3P69jSr0Cqs6dp!M*rs(IfeTRZDn!9y?mp zcZM1o*w>KSM^6)@^$FboC&f*i1W`NNvr&`2c^*K956Q$4Z?7GTiGGwoO14V^oe~L} zi5!ygM0%4rce=O+r2E5km>^l#beR-Ju&_u&D?vH;c+s5o8kNaPZlzTI_K0r42o4`Q zK}@Pl>T$>$M5NPT3Hjnxl4Wrl{8QuY8lUUjjww6Z{LnM0U&8lb{@rl4qX;Zuzae{v^>a zC$)JlDJP#Sa^}6YH&bSVl?UWi zvsrAuF4>ckJ>i7LCCgi&$3nQAybwlLhn%-iysmY$w_YqP zEoY{!BmT3^fijG6%jhiosEO^<7m4v&8r{+|c#kpd55&Z1P5ZHZ=VI}smbQb~k`6cK z1@f^=#V!3dz`8~>yIPN<{J~kQ9Bq4fBrW8_f69*^_>WL^{`Rt5@*A>V@~G@t`Xt-`M4r7wq%4tmvS8B^ zF(j)~QOp+eu55VC`YaWF;vTp5xl6^H+9aBk!|9kflP=kbNx}O`G+7kwojh51Kddd9 ziTAkV_~pHT$qu>VD)Bbvu)A6h8D04skSpY z%!(g$dXNRziuusIuDn)E1wVf8T3Cdb4mfyeMG0;zM-E>B|B{#WZ{EMGOnK1?R@Pox z!7Q!dI`NtIvDB^?CCC2wu;+dwHQ7rGjFptTH8()n|I~k!elilp;%lv5hzx(7mv2y( zJb3Vb0RBK3tSiCVTX4NNPQM4r%k^SW9H#Q<8^mxwshN-iauFyUy3FCVy^;CF1}F| z$g@`pE16?@tBE_v&>G;7F00pw-ieud`zdp% z_L4mH*w9J&Z{GTJz=c_3LoZ(p-!E+EIgyv;d&h>R@9Ve2r-vL_w%P2V{Z2M)HV5Rb zgSVE}vQ#!*vcL7nt@47+=CKv`-TZW*ttk+o&|u*%LNXzDRcx+}z-MiNd*97+$7XY` zj_Zj}n^ntqRnXm$foH^@Ksly(FE}@FaUZ{zIU9Y!CCjU^aHx+&tT3`|l1%njb^pGWxi+Y; zF7TJNviVMU?KFAno$$qyiC5IA-p{DsJd9JbYL6`OsRs823-^Ib{{r^|Zzx4Xnm`WmhMoV!I~DEGz0(7FXi*Zw@W7M;%I zPBSoyhC$B@0`gr}p_7R4(-%C8$JcE=Y5$UJSr6x4s%85%k==vr+IZkWcDB9nAdld) z2O;(Xa@s@Ub6i?Ch&yrlWP^B*w8LlrOS}t$yz{@s23=dxe&nN~AP62kXCpYqw)QVK zig7yVwEq)ga1htCo)j;T|8H=Im{V}|V$Gr?of`g(m_YJQpwePpKKVt6;7cnH*Z=B; z->P+o8#eR016)A1{BE=8?^(@@bsoPB?VtQxI=)vgbXtMk3e^ON zYTaN!rmZ)i6p|CcRZY<%3ITbis(-7Ne7q;RER|;+63UD4K0mc0WOI#hw-)uYh`tTl zwVuhlavXT%X!k3*scQ8bG;;IR>B}?+4!2r;DKefx8$ak7Q4zGzsVU3#969qDQ5p-8 z9s)~)vW@W_AH507988TCF4={brhWpWOIPp618bl->GU_U3)oD7PQrJc8R!H|<_XRLLA4o-%PeR#NLWfaNg zKQcjJ^(88=d5&F^>`Z>|Ibqd=2-M2SiV5MI4H#A}05yQ8ffq-%%5b)=|dBGpSd4yd38Kj@**L?4fB6DDvdyXMf&ylWfEdmYcM4tnpffB69c(Z9v%p9SQ zw1ZhzVBny^Lxzr!$8X_5I=e+tK4W&!4IV~oI0#H}z^$E-Y~LcP7Uap*8z zmP*F6^ltF1vK5UmJ!X06#ApRNg>m7do4W~I10Hh@`XyY&?CKo=x7}laz6r;(e=BmU zZo)G+M!`BBu61d#*So@r(P|pVgqFa_ca6T&E%*V`O9l&M!b0K_@SHP})A}JDK@NaC z$(#Vpe}KM@`Tz(1Cb;|`VU>rW?!KtC^$!qDy`r_X1Oj}%5UmVk4TQxx+0JS$1ft{H zy1+A;Re|`CjEV!CtbPe~e&S(YDBr#U@|0iZA?9C2li6e-?N?s*M0b-kwTwlJkm32U1b*0?&B9w)I31Sv6N*SWSL>p1ak5MHjLtgK{U@$l^ zn3!6QOcp3Wp=b}U`(7+Y@?Zco(kqenF#)}3b~4#h`vL??ky41v$DNJ#BZ>9}NgOrY z80N7DktQu)VgES|jTh-KQVfXZaG9n=4s!@*@L$B`EZl5L4iOS;Ltqzh4|g9Cg;AfJ zY*fo&iuae^#KEM=BbV#hGq`Ug3$+Afh;}Kvg<5bY?qvAV9o@n@FTX2GszfMx#kGO$Br`FxN#0S~%li9~-p+7H3vX9Cq5JXEi(>wVAxp!xyJfvF7&#Ss_6 zD9$+uAO?IbgM3ZigcCXt03hXgy7(w9njw}4#Ai_u@*e{Gz$F8eN45BU43hzCkQjKf zpddw*x3sXV@DLJ$Aw^ICF^M94y@$ApA__x(@EUY;Pvyyp(b6;r2y)g?Y6_Ugdt*o< zC>2Qe@S0*5-DJ$}jM13Nroaa*J7}ty;c2XIE+laH7@12LnZp>_3b%=i!wWB%53FS5 zM9v)i?Bv+FK+X&t;RWjWWfk7SY*3T(oxgA-38E}|RT~+!EPg8(E%;(eKpoXoD!c{}r z>#+&ijK2;J)j+-|SBP>2xPxJkF&tNr7LjL&&@fDBI52<%--#Df01J5W(j?`LUJ=Q` z5eG8?3PNomGk!8Aqp2Us`CCLzIJIzZ6h;yxs+^R!PLjK{>OEmBmDR@x& zKqpiM_KaSuY71Tfh1t7ZirV}}u0F6F_9J9io{@HdQT!dXR@= zh%9|u)VC6QSek5(UKJOU0T=N`zy$Q1tAU>F4T&o4M^9j;y1e0SvE=x;#nf$|yAYL9 zKo88Q*T}3Y;z?BI{Ci&srvZQDeWnU8@K4?tA7LKQ}~pJifnsh*fbJg zsAtI|2bpKxXT^)Ma@Ls z|5Lf^Yp_0ae0dAb&*V)$2t@~MK?g~&;)DYt0LV)s0I**o01&K40LwASYKjuR4i7Q8 zrzA084te=mb5 z2btN?thi4MVvCiGz;|r7u?c3`S#Xk3)MffFp(U?XB;%#>CMAtm$qRTbD`%rWjDo&J z%)o~k;R720bf1SGhe4g9OIYIgYS<7q~#;HDTKa(orYYSG4l-y2^3iv+QQPI^q zlG0)I`!q*N}U+3wyXnIv^4c z|Dm>Yp%Z8ho(Qx70Yx1U_m({VOZYWEl8e6-vrcU$Zx~@cYZOS|i_@@;11FjP17RPF z5_4mrs`1&=>c#zGp&HF60N}GCRzdf21|mwX~}+#d1SR_hbgM~^>3^+{JM5;P~zfezI%qB`R* zUdT^A5vTR{S?2$-Vi(I%x?CE;Pnr2CbPM^$Q;xYzI9k9ZQ~WG}5V=`0$eK{IOwK$^ zZx*c`WMis&CU{FHyeuTt>CS`IofaBH%z5YD#d}SNiBT|DVYGz0g1Si^>i~9mPS0N) z1$7)lQO+V75=H@<&jyUlBmMQR#IYU?!H&IVH}D}+Y92Jz0L@y zF~adwvH9wRDwvb7;s{^2T5DnTjOH#qqg1Z=jQtuE10RF7M*NHAuqPi`E``{`>34!A zVuxb=P|!)mtAk=s{lxZrlAtU(ArmNJUl(K8*NIKv2kT2^99QSr(K#_%I&F)x1BDlq zNSma((H05XB>g&GjR$;^@6e^8UIa0{r1!!bfIHHyQ)-27jarj*YZ7#%3Sc)guOGXwCyT}}-77F8&P78$~ za9Z9Bld=tV)lFpvE72*-jtyjG#8Ii6TB%0(;J}EWE6DG*i`sFX=!c5nDF#pxJhcI; zw6~}Y+2cu;6cr&MG_V8lL&W?jW#QyhWg-25m4*EqAqQ$I7xlsVpSMVj#1ll#`&uEv z1Syl`0A0d8pyzG-mjI5r=quF>{7qge+_(Fe)b-?LaGC;Iet=sDRrp@qg{jK}312LG zI(qmn*@?7P2%jwKz`{kkS~viq676>q!mRnXd5ZD@inhv_?@>|E@kq%R2E-d#za_$o z#{GUQ>!4_nm;-0W%4ZjGM?hdb7)(YPy|vJ1eIPvSd7l>A{gas~1r(hR1t|dxk}PWU zY{{}fgv}r?*&+IPD;$cM0S`b(0{jrmSFH4hh-yhVWDLO}TeyRshW3fR@RtK}gN{c) z{7CtR*^U#ll-$>mD&M)@l9vROule4nc)qw|L`KSvjk>PTtRaE+k5^a6S{ ziRJwZ;AreXC2vB!)sk2vu1#VNups1qD~=ogh~q{IYIvBCKn;BKIw%5*xlMuByp@l* z?fDU1aCFyTV%jR&P4cXC%` zk{clwa5uwA;W5|2arWuJanV|M1*WlfDf=4&ZV^o?US+Ru-Me?M^&9VXx>B@ZhE27)gU=B)UQz2y$yuW{XOlzf%x}S^daCv`S*+m_(Dh?Qv>tQVWpqIn-T-_5pT9*K@|9vKp$ngC! zdEe+a{sSgoJ~31jWJ_`V60}ko_+}`)kcaEx;t!S6MgfL7J<=I(Qc% zv>3tc1L;Cor=`>*G2|Yxuxw7k%%Z?bfEQ*k!st;XY4swZjCnO0b_AN3Wm~L?SuWQ9 zc|BigVk{gjVu+}b`8&0(0#1o))shH$1Dhhg1WrE?M>KGVhgw38rLKVcbrEY|4Fp%> zB1x;T;BusJgO4Os>73*R@&LNlX?>jK9I0^7tYC*X1;S*akZM2D^rc=;6`#S~0}gtX z^D-xT<)I>=-^rmTPuRkn{V0m6XCjIUOF(SWCnBgiJ{N^YDviQB$WeK&S#?!Px^LRk zr|RG`Ha|UUKp6u-92Iv3D>O(x8@c0qkq3~dWhw$zd`+vUCD9>(p0#k&o0C>v8BY|9 z8H0FR_FVGlg1_^^yyogi(~GaVIFX6HHhBwlfD?O&!Fii#eGa0>e?^PfffCYU8=&Tr zdYTkBmJya;eIzJR1Vu+4#kiFsZqW?}B#BmtRN}n}JcFD?gUX%8h!2ObA`j{?v1eZ1 zL)A_x1|F{nm8IcZavxK;f+@fJC@%6P1vS{7l;!bMnY z963!Jt&@LhpV(tIkd;4(`qE@xUJ41~7A^n}P~2Z0^@F$; z@~IX=sgo!ouM)iqCX1qE9^aM5qJ>I+GWxbfi){5wkhma~YB>iG> z@dwG&o%jnW0f$a{KB^i>FeU!r$nvCGcHF}ck?4T~-YU<71qsi>Jm9_rQS8|&w2A;h ziClRB_c`2qViry`&%l8o^~@hQ(Ukc^d}p7_q)-YlR+6MtCCsQIkMpQRPC8t5KosRU zr8N#6rYEGQ_vUT6>`PHt+C`iuAwl~=KZ-wCh|>NnXl^RS^QoIXrZ`wnT2T(2RokS(XoHp{w}dY`&e08YYHsZxXC=XF)ge`Kvjy97bW%uamY z1(*vphE}}o3w~GZlg;Mj?E%wIHb;V|-FmXQD63OZ_jD5*%-Rn-#S~iB`g_rhOurk_ zJV+Oy4~tk0;fyyUv-y6MuRr=d%oi>fZ2 zb~@5bXc_XVGt56}ne9ilnYmgtX~RL{HYLww`_*&IX z*fXNS^pX0=AVQC^g~i<)z>zONAYp?ckHr!x2_zfI8!0J)0qme0YV@8sc;bBrTuR;k zu+{q^#-A@nR$jy%dY`Ify!uGA5u`-Cey7afNbUg|?A!w!U`u^4IPETPgc0eb_^wtj zbeBJZ?Ly=gE2U_`T0J8>5QzV1-b%k_$*Eh+kq)xk(mnw{(-Yh?`@` z7PHP&nV#gwTg)Mv(O&Vq`43HdQSN!cEYsg!C5!)L_R_DvQ;zzRxlvzto1FEM*&utr zXy(y_`=XhXyY9B9ahj0^!yQaHI3I5Rx9*THy=0D}&$3@On{!{?iCj|9dTiu(J{PJ_ zz{M{+Uo_|GZ`?^0w${CIC)L4eNg__6o$D0XxvqMdT=6$|sfu^pyRV9O+}nQC%jT&% zwiIo8#caVItAD*>9~jRM#rutdnMXPfb?kaS#w8>kC-$*7X-G8T z{{`hI=bE)ydmaH{mXPCt*;dH{GbJ6uE$4&m0&>Vg)0Qh2m~}}B4zK`=F#{f6UbyZ- zHFBU_@mjD{PQJnvGW$I9T!3xORc3))b)MN1{lDa5GfzHyo|)t4;q1N|`R#e;IsT`M z&Now%rg@$G!};d;EDuOYfsAm>(fWsq25d%A6oZ;rHb-_i9w>9dpQfEl|Qc=1?c}SaPpidbK$ZwLu`s?CZ>e zq76C|4W2uvVK`_R$mTXVd71eJhMjpGqzlB+HRkc!FEsI`1WvvCTk|--9H$>mbOp)* zcjc&S&0nGBm#;NzlE_T{glDu{wcI?Rg0{#Y;A%)+(3DN=jPO0$M`;>}%&pTCpWtTf+3sZ(y` zNn3WKIa>RL$}wr@_(lBr^4jP5Li-DEGG}YI%B?qaQ)C&v0( zPVOyc9Y8Q6r2<;ZJq!QNOMJBH07)cM#gT<4p&m~&8P>#e4n>%$MAjKeJf z%W&e|Gq;)(wCiN%Dzh?cwMt|eBn-QGy&SR1Y}7Ys^2}9$@uPC}Dzo=55c#%M7?mau zzC9sLAT5%mi9G9eC}siq@NMSF+E}^ccC*muTKP-WMxxPcXQoqDU)r2VfDD zBkwR9wD;t^JIv8JNu&2~<#TtK^^}U_Yn1bc;qQL!l+$?FY8HwQtWNF7JF8g|YHQ3f z)nmainpqGAlwusDOS3Ns=|@n}+%?_Suz8I+&liGT$zgYzb$wxL2HlRp{b_%BFRUd2800jXgSL1CSNJGs}aNRbcNrwiibJ&K&H6jN}@jy9Y9^4$|tz-*I)J z`^>6N)nQAxU)}NdnTPc7b}#ERZxQT<&b|*SBOt32dZb|fJNKF8!2CV;nH3Hn>k4N8 z)-h;jwL0e2hBb`mFg?qm_nVJ4CP63Z*58TT?5RcmPqO?0^KY;*zkk4do@~y|51Ju`Q2r2C6&Xf0+rkTZqmE3dUxfY zlD@?%0F}Gp16A%)GZ=)jrdu&Nc~U4(-uJ3G3@iRn^$mDfG)E&?vBMO42^=ffz6J4& z?frbt9dFU)Jg%I8Pu)?R5H*1d@1e)OLRbn>9Ho6IlKXMZ8r2D#2XzKH0hr3;qN$?2 zRN1VgvT%TLSu$!=S&GZLWT^$=^O|WROiZkea#m6FkNS>fGio7-uW+_s$VT{(z`5rb z5m7P5a3CX~Q%jKv;FrItWwS~R8&(c|WMGBc$TY~a7NSE*mSIvOwQ|m1%zi5TIN*d? zIiWNy+|M+eUV;M+uwa82DkPW+5{%&o!-i;rAE(8Hp|4=%AZ-t(21zo3kr-qKJ~rv& zjC4E0PRBcZOlBH6x6mWp0iV^K9QnFwl)}A0Z=p9*k8uYdkGiwdKwOb%%^>#U$K_q~jw(MRM^O!LU4XtGOO{tbJfULO=Ze1M_maMn)r3?-3tD`)-t{ zd}tyaZu^xVVl#vO{W|%_kIakdI_6_oeGkgTADd&5L}ts!=3Uy3_Bo%J$k5zde)CUr z4HBlT+-5f8^2crFTomp5sd*AK7mC+&x55V$a34XiAuwkyG^PiTq7p?5J~L}^8Tpxc z2rgHDM&Gw@`V7Jt6}1587@X zfy<)pP{$sU-)x5H`(K&UaXIHJ^8z{X2Y~Cr zm*km0nAKTdL*0WQVsK;htA8*L#>ZQKFvnr^wR@m34w9?)n8)dtyd;0xV@|Ck6^*2z zody)3X@W1eE*K%zo=<@cUhI*$#6;A|J`SJD|dFK7=c9kvmPw zh56M^zyl`Xmmym&`P!t6w9kEwOdkQ+@D2ZR&o@wUAC_-@V_u1uv%WR2)dKAZn4hBI z5gC@F@|0b$YB@(7%Lq%~}^FMA-Q^F47iKwVjocmiVaCrLsBt0ly} zzx*UgXdq~e-mTi+K4_}-lm?)mcC>Y3U$7gvwTRP#e-PId%*eoNvw^7e0Q@DNJ3|n?MVpPy-iH1YIh@Oe*VPWU-Y1SW5^nzooQe0LZ zW8I<&*?g=uOrCw7Wy*7owF+usQ4(AC+o9E$(xHANl!3n>{w)3rB4dZXXewpx*cy~G8?|4_nUg{Si-GWtxgj~FFgypR z%x8rILJw-DWrV;f<9+8r(I{ZGfcw%NmInz=v~CxsC1Q?w5qt-6*bv~=dO*R^ODvRnrf8FPRg6>c8y;%4^&z0GWk(xKSJ{%KdV+LYR{)^)m_3o(nS)FEZn zAW3xXqgh^7!ypsQn(~kvteS4do12cpem!zzgLMVSet$ zp!+=K4U}tcv&!Vm>#gickQy>foJOrn(Q?pE3 z%05PpuKmLFUVVc#*w2C4xnDgf*%0^a6tYED!&9J>OPCIlMYXif6J&!P6G?u3ERX2C zI-=fUB8y~Xg;gz2UTNhW97YLVQ--&g5d}(I$&3JVi@d5&!oRT_o4s zX;sL#R$AG;4c9zBavgK|jX|J0xP1p4-R{BjqdH|b3DTkE=qeJyWZ!5_noSFNfgmFD zfG<>d6IjUfjAOAZ3KC!lokK??ySuPJfl{?jIO8N5uvbfv_Ts3)V&15CdGX%S3-m5u zZoS>A)N*9)8f$)jZv_9{eh<|}wcM@1mMb4xV-=yu5^1%DDVFvwgktB&{5!4Qwc!B) z31LO+U)R$W9<`0Zfq`4;K9^y0UC_oZb6IthRSU+n=uWFpo`U=SJ+XyjK5;Q}p@Dqt zNCG(PbbuP;-Js*G0uCjY`B;}(tMy`;b(b|XgdOq(n}{sG*(%QII#g4Bv)bwhCK$UJ zBU7VtF~Fpe33>G$R=KRY#TuaiH_~HFW`?`{`wp6oa?Hl@`<;zY=h;Z(*^rBFwrXU@@2vrH#vN9E zT4Gk@-*2_5HS@+*n22KmkQXr#rrdFd)hkRLC!ibh*Q=}sUoiSkBu_BvWFtZ_KDWvm zt%YUUZPq}@$1m@;YI^nnm!X``ukWVL+gj$aa@H2BD9g)3m_%WAzNtf)xt{`qQY^!k z$1J;Nz+2g?r1{&3AmMaXkCz`ZxgI(Bb}OxuU78~|-ETRAv1Nfjk0Sd(9op(p!P5M8 z6A=Rxh_RWu8F`)ID@$*+TD3Ge3fVq;^kDYJvRqYAY>S1-y2( zRnsTlHym7qQFiWI8l9AxN`ii;n8v!rM2%@IBMl!aJ`zor%cV6qd?elwxur3=5qj>E z+%$Q@osgU9L}RT(Lq2%{W=vipg}fM&ATQyO7wy6KxQ52OCj{n9^o88$cUc4de8@@D zrv!kd*z6JV#k;H%hu`x<2VwrJkk=WL;R=Dl1p^ij%N&$3m}X_Dyk)J`3pq#6T+6EARcoyyj~;=H9_}Ah zk8-(m-;91_gR_`-K!V^8DnYWl$C~DUV_&U(csw3%5-<9f>A!f2>h|{I;$Z@ z8MX+t9x{*3jM_e4(-LiFWkxjJy;D`)>fhl=XjCyK6HBJxLK!2|-Pcs_Hmkw(&NwKJ zPl(3a4?cy-bq+QMg!*)ybqsu2?(ZPs6hh@BA(WPp4?+dlZ~vWDlEqyFo?NN71{_=A z+82N)a@r>0nw<-|)Rpr^@3U&F*>yvRq`QdO%0{`4AjfMvN-8=wLX!4XF;i10J$Xf} zsRI%d=G}c(;Ss6|4OIjwxCkB#MqAsqoyY@P#*p|+a#Oe)f%WvuCmJCk#fQPvfXaha zXrAk;jB2kVU8%{I9e=b0$>c8lz5RZxrYz3=P$h+Tdh80S9wtiezTcV&3nMI#f54g% zBUs^goaG3ZV6!jOnF*B92PrM1D1`sgaj-LD^>Hk*O}h^9qrEm-NJnHMkr6ttTx#ev zE&PiGb|DUYM#EZ0HmbyHS_L$q0onfA>fN5rLT*D)t$sc>8qV4*Y^9F#&%*VCdr$?5Ih%DK7__VfP;p7d|9U)lUbL zgho!WBgh^FYur1=Ij#wCE6`FfvCOPl2mykSx&vJDkQ^{Lm2=~TF7}`cfE|{ zzK{V~%hwJ^YROg4SZUo-`4i7rwJ{_tAg2{&E#U1_JT_>n4jKXiXpTc0gu;pu4f1B$ z#;@QxH0nWszq>?f1JHv(ti0_MeXk(aMZoCV)r33@ad!H6Uypyw3g@Q*7Tqu<5|1Es zm?|7jrXZdMHx6+I6(*FD(A!@t^E6@vqmf3;SZ~1hGe9vIP^ORR`G7$qjWB`fhKtC+ zBupQKBIO}$6WP>= zI5Y}qvo&y9J&Dtn5U16MT2PFrMTu=}7cM5HThD-ZJ>E{3+mWScB!)g5hJ^xO$}2c= z#ukJ8nPD}0Km>ktRRM=C6NgY9T2+ARr-SE1nNXKKY)4~(-qlWGk=~=P?}>n^0@_86*DRC6y>*UB(sP|Im)~Kv%H!It;xrQiPr%!P!v;RR!)mHR2rip^z@#V8R~kLrs&ucI z)#E|#T=yocgYkF-r8Ly#-*u4oUIXPl!pkP|+9UMB;ro?0p18<$`vGqN9YQwrV>x^P zxuny{>o;0s<;35?fxyzJOhz8F3X*LqBH&>@0n=Jnk#9GE>+VO-OQ?C*JjQmz`p2wM zNi9{UC{sfox9mK>6?j~kF{87QA~k&p-jl+XyOmS7Y=X-s(6qyjiL9y zXE1WsRXqKModFp*G6Fj)#sb;hKPxapXU-@{M2J8)NkaLg+s+CHJh@w5|D_9ngo>!K~?HuLMB4zKUTf0KrgeCyQaX^Rd3{p z&5{*Dgd?AJ_6%e^Y1IshYmQ(yzJNE~hm^CVC#~`U9hIRE+o2G9Mes)0@PhxrDlVr3 zyVKowROtvPA}@7}0rmi`ePwu=o-En^ zq*WQ?qb~3nsg`==M{r%INRa~h;UHHiJD;s#+af9KI22teI_OJi0-b`6UKF91b|p0t z1@FQ=zIh;_vIHUOl!l9ScIK^6`Ixst^6(w0li9;FC zev$mgQ&vONGrmY^;|()i6&BgM!)iEqpXGWh;Ssm6TA}L@!mt!0ebs?-^Par1!!gH}m|{>bp+D)Q$c4|Ks8gHPDRVBgCY}+yjtpU%yQA$AyEp$c z1&UBf)Ls~cTiWi8*Ldo^5Kij4sp}U;C?blG6rWs7pIl6Lbke)_zC8I^YjHXv{aL*O zeC1cqT9r+sQW>P%&r{8zwsjKj5eWBeCESVGDB+%~8Sv*eu!!%O4K5S`ZXr5Bd3O!= z?p9@cqCV1%s1LJU;*0uJLFPM^VAD5t7P{~)6m7Aps(Qp#%E-5@yg#c&^VxpF38b1+ z;)a}D#r3@-r+kdXDv+H^K7cN)Z_^fd3V2a_F?fSTOyV*vnzue$+FA-LKiw{sd$(A5 z^KxNf0C6aA!o71(2caw=kO9Zizm@IKfG2p1LQVrnPNywh=!{~NdBlX+wFw*|?*lw8 z;6+HaLRYLH^uQ;yxtj7B77SBeL5# zAuk&~Z0HfL(FZDRRjG$=@KC@?h!FI!Jc$2tpkhbXw;ESO`?52m%qYzv!3WmBXLK7s@qQJ?r(pB+T#6;c(ZsP4#+G8 zgop)@&)Q=F@i`$DpgDbL^g9r=(#I~f8`pDW8uLd?0)2&_k|*0voe{k#PrzK^Zcc525n7U4+eX>YZ;X0#KeqfMyGE za~zSb>~~a(kP&aD($uuT#}}5%pRw}0)$u%Di7=?K=w6rrMa;$nR38s{`zl@uK*g;~ zp7_3Yzo`T@{%1-FaMt};5hgjV^MGvdoa}2-y|debZnzU>VOBHbD^FPI$vlVk=V;ED%zO{6dbrp9*g?#p5`Cc4r|hh$IB`&AujylFQfD)%vxoz6 zTK3sJ?}SAkngmSwm&5g*k`TYBKfdeC$OwiI=}%ftj8+55Xo$9q;e##!PhvW-+!^!x z6K{H0L8^rz6;xz7Al+`U2e`F!+ni>*1!D*}^#p19FF4X}rfp7lK;^=g6dHaIOA)$V z??3QjM6}5b#KyJ3%hRMB8ntcFrsTrjL%eWuS!6Rj@WMzplw8=Lm2`yGSg~Vv^Bvx9vR#IHQ zV0=(BLb|I4)(yRRZvYGFc4J(H2FHW~4X6=py%__3@QgLvJ$W`jZ_Ysc4U!vPv2uUG zyZQl&v>He%2=f+Ag5JsL!Ovumg4~IZ#GgUx#7Mm7IN8**!jr*lk6E-`PxS00Q%8zl z3#^t6)<(h}&@^TR0s%@+quorV8*ooc`N0j?%@b&|S3MxeR0TS}O2;t!;IA)p_&BNA zEo4YFD0*r|d1}jUX={iDARbG=oEkuL_yPBQJe_|N>-=1j=BKYcXd#Gj;KJxYyARYT zXAl?*Sr7*5h4^ZKanc0Qh1kn<_fbX612Bg845LT1N(PCH+92A|^`4O!TNn`*ob` z?99tA;}c@N@8ik`F$pD49B^}fqV2sbM4$%;AdV!uPZ6uq_9907q0*2(cxf3&WVBTQd0?wsw%o&2)SerA{ zZFYwFGlR$=XSl07Bfy;xb_<-5ZjR%+B~Gi`Gv-&(0j(i zdo%%wbPjPp4LB3s@y?;{1K@}9 z<*tr7N4t}qY3P_vUKmh5Gy!D}^s`GNA89UpFYbNNKpZSl0qt_h7Z=2F%$rR1Vq3t_4RB>M187#bF;iCbOq~tTUaoqL6be{-&p+ zXBOZ)xy?Bam)O=on{zyFb}VXhP5^bEh=AxBfa6T`epYMHaav)201PJqezV<+os$9B zLJad1fGp(NIFqQ*LGB$V&0XZ2>Mn3jb5C|oCs>?8aA6`_C zpN-KHkmtt;y5|78=K{J50NwKd-SY{$zXEhGAn0BQ=w9TeIlo5F7NUn2<8P6j%q}shN%dYoy{kVIph=U8eD=nwJ0gpwzV6qF!rGp?{{Kuz4CW?TJ*_2== zf_Y#Ip(hvz?&CefJ+YAhALB|9Y5|fT=@}OMM#N)Mys;SuEVeMF4};t&v+uADm($*~ z$^-=?ZIsvEVdZf!PJ`Tpx0)&c{-)K7Vl*Ct#XuoM_tO>nA-QEAruza}{uV-rI%y&% zul#Gpa>b_9Xg5_wiT@v!-ZNzJ>x?<;sQOBDwq@R%j%BR;3mPm?Obk0v>}EVL#Kb zuO=f(FG{L%ycAU8s9h-!{hL)9tF)`)zmcwn8j>qz^)0nhdW9O2D)sbr%!ykI8Z9Tk zT)8(%XtbQ5Q|Yx*PJGaBvfPc))`0j=P{aMs6a3v{AnZvELcMKHHQ--GPA<~?qBZ!@ z=>?Lmb!}w8E_5nEvQYrJsI}Iq1Bv$rj1R)^75FQ|y{?qU3d9omZy`FvaYB)sb3!AI zsU~^n&#G;b_`zJVrNQ9CT-%id4;_~{;OK3%En1Ja(bTs^ZBd;50hijix2^IMKo8_} zwQKOI3gQXK0cR4E0{kOrt(s!&y_q7H37Tq*!w0B=S7@inu1_h2Mw;ygx%eMeQ4E!| z*wyi$$<2mJs_n**Mt`B&wlrVpyht zAOlM%vn$Asudtzv;(h{b5!^38SIY2TH4OW*^>*DNoM_t{{);@M0m4rQjn9O&Y*!FB zDM$ILxppSZn_mzAeSvoWXan>`RqpAFxlb8!%RIyC!=U*~pw**)VV$>s^QkK}Sw)a~i$cc_2zsHWD)z@m8jD zwMnhiQ!CRkJ6J&UXzzm+furXH1H1z-i(FFpW&=O3uX0 zkUo;`n&wc!S?5!Xd0&%SiKl8$D;;X*L~4K#O(@Sdi?cD$ z6hRc5K>I~${-yJw6^o&!ahcd23pD@~b}?a%ZeKhB{xIAxU?~sw$^jj=a|MJFh0f)Z zP%`Wj$7iYxC>ImrEW{TlEr9J`99;;p1lKS{r7VOS31SJVypASd)-1Fap%}Gt31TB) z6ahBmTwX*?Bca$Ldzog>hIB!nFk}SZ83=EI*PbZczFN!D0~(-4cuT;yqQbylufY6dNrZ03B~dyROZSTf?fU&lBB0qxsiNo{ z`p{?ZF_yg$MfLVoEV{t-bo*SA9Si&hbo)GdK0opND|)^l@q8gYUzB)0gPu=GJh#y^ zay|M2z8<>YB^t@17!xQ_upri`6S?RhS1`DGFhmF=($Dz*0CF1n>HwHcr;Qo3-W*RHe*^Ho! zqzi$<;C;YOpfck+3@1e*E&SYIpGF>C@Keg>ZA1}H765%LvRhp2%`reDE%wPoBKVko zC)a;{8|9}8a-kpIq;`Sc;-7j05Z$Z4TIBHn<>DTeD52 z3?MCpuhE8XV{YfF{nZ2{(5#NKAle4I{~Xlbe-a4ySg-*q7d2>`q7BW7@SwjvYdj50 zU586WWCB>6n-4 zc0DK(^ObHN8zZ-LH)91*4#kkMQ-H{VzG~+2>ZsJ<0kT}2ibti4kg}of;-hRp%&FHY z5`H|=__N1qV(}NLOohZNK8TN!=o8QJQ6gFsq-r;muyA9dT|_Sy;T2}1k%kN|I1%GC zFiuPsc{VVHbQ%oVDg67K7;qb*)o0IP7yyBQZ~YPK763;5hO!j^jp%>04&t^2|Zy&+!6K_&{bnW0e$oO3=mo?N9<- zTBI7Fe@eGx3G<>)WVeRS#U0SN@78w&o?_s)RR5914kRO8Zk-b@jFHnMKu#0tN`=>z zGA|Yenclc7d3dH^ps!x0u56@R)fJe`kv*DSMs<|4 z1S{#g3_TbNF2crJdrmZ1C9nJ3x+z;lky9Z!EP{w1mqWg=s>=2o>n(r%g*9gi0g6b^ z!$5Xk@h*B)6@j0ef=Hl1AkdFO$kmGJe&Yk>!0pzY0baF%eOHTiDcc(oLU3p&G|tEc z^6l-`c)!=wFN&Y>BGiL)|I;ox{7Y*NA`7QH1>#6-xR>uw5as&Sx*YPIF{%dpuQ|dX z;VJyLuBFjt{K$QS-)eUa9i@QJ^bi&{d1v_b9dEuoO6 zT_ZdCghr#)mQO+jvPVz|0bUgew%7Cx^%p31{2-jciEC_dXtIWKuMWZP*Pz@vB(z<7 zTfR3mR7`mvRy>=YFJFD%$d>l7(Batje%7$iueAr;zZe#}Tt{Yt`3HxN#N|0$vetvP zbn;BWQ-|~mH6ufRz)v5K4E58N%OW>)Jf6;XLr3BAk{fD5CZr!-{Pv)1X$_6S<-AsY zc~5I-cWBjpn*(lnq)Fa8D%7gICO;b$Dy9DT+wk+{pGS!i^6b%}FgkV7=uiw5{4hFn zA^NspOlYj8y(OO*8=Bu|!_S1i%>W-bKAilKhd@P2ijXWygfV=$Xq;2;gYkK#qpiV6!c}&hbpdZ*m#dD${>XpH8E1uuXD`=K8%Tq^ zd)VNHNpOz0nq=V|D??wU%bGdX9Q`(=kUQQQuP@Qtw_aqKS{4>&ZExFi9dtnw)sH6$Y4(I@_AsKJ&crO6$ng7@fQ6s%Ll$zWe-7 ziM{yl;zzu<-~Ls-b${I8z1ixObH88az3KRqS7tfz_5#b%en=f*Qy5HwHaJKAC0Dgs z$s+}Q?{}ml)BH~{;&5jYo7H9GK#cgaD}1&|Hk$I{LIPw zmssPFluoSD5bI=T(MCd)Sxk!-@J74Zcv-c}iXsclxLw%( z|MgM~hr&oxhO=pxwVApf`_6hT%S&wK7di2Jt3Fv!bYz4mo7KbLTXo$4Cp93mc(+Am z2k*9CrRvjvu>K?nI-1=6qcu)8rG=X0EP{R)It36G#T4Tal_%`A8Znd0_9A?LgM45w zMz}$~yw|GDz`6tLsP12uZeFQ{Mra#WLe%NSYge8Z>ZJ`|c^f37v2thV>hdL*rr_P) zOT0(G_Pa}5d5ac0-^089NqDEZ_rA^}u0U$^KI!fyOZdsgQ;Uz2w5kcboU4b5MInP= zeUDIKj+gVKC0S?SFZ+inNq}#=I z;dGdrYXI_wV5nEt)=Plcw8|Jq>@pb(hB7Xg%Vt7Z32SWb+ zf3&>`d=y3Y2i`rCqdVP61_A*RLb@k+LP)s7r5Wx+1qHc8kRu4;K0SWQ;4UhwC@4sI zpyCOlA}Tm|1GFw&{l8GnrW*H~ydrRjJ&z4ZGx~Hmda2iE#4M%giW54cBv7^^&FI-x z30VKRhoZG-boD&O_=@6*bWAr^>98@LHjH!sqEt^ejk$EG0y_IBu z!F1!Pj=P9(ijm287D^(~R>n&3K_*rilhiu@eV z`iX@JjlKi z!tkCCr^}pvG{0Yl6$rNsErVvGf-Oc+ui^AU6sH9^wY;TKlbgq1ZVa{<>!#xz2*Pj} z1Ys|>GI2Db39_Z(w-6KdsMeC5<+(G3P3*4Y`ZF##AJb&cXbQfWqcDn@b+bggT^zmfzjnV)GK*CHd%h;^?GbfYKtEGy&_{VHLx+o z#-_j4z-mf(1N))GXa^xHFEv)?ih?euF*kMhq2*AmDD9q7V}>M4j3%RGMUN9C7!p&; zj0;fQcgw(HA2Z600e{4&S>?tFw1=H`cVhrW6rjj764f-Q^;T@y&)zuAvh>iuXBiZ?cD#XCQk4H$P~bAX%09;`6j zDjZ^fWkqCBjzlE3tkDBxV&|{~V%|E3eP3am`Pb@XX{F)jXNp22Tb$g^j(V`@j9XVK zjWO)mGNTDQT!L|*;Bby$Ll$-~1haV4ZMA_-t1|j#DT*l#^7Tj+tf;>1%_^g{emT2z zxK-QCGZl339Q(UT%A6F|J87s3rsc%~@S3H=y#_5gJ8^>lo_^{&2R_&!08+{NcWU*TvJX7TFy zS6vxCF?0u?@E_`kqCzalyvN{OEC@sM2H2A?nC+@#RM4o~!RuEvl#Wst!jvtaq{EDA zpp4BLYgFTgMn0i(-&o^ze2+N8*pPMWMsA&@QO&H|7%|5g5#6eD3}lF1G52hYyl|$0 z=Pth4$i5m6qwgu!egYwiOqc*Gt`&7iG~@^Ud}09aregDiFR+n)ah6eb2F*?TLaQ*P z$92bYozGsP2pGBh=q{@uxgWsw2VU|fDyYsWLNH|*Z;pg8rFZy(z%3M)e2`xfz=_5Z zy*oQR(fGH17khq^F|mrDr3<~h20PKRump(84A6tENJC!$L_J&B$jO*J+RRo?HU`0Y zbFxv8&o8X(?LQSY?h7r&m7*XWTcVE8#6puPMgij0OfmA2=}A+JD)`QwVif8puxqEl z0JhkUDVQI;q)Dd`YPeT57_D>mp|E&r z$QQWPD|O(F$de65mX22T(o{^?Y+=35Haf#uaJF#}7#z zM$4+E#8jO3;pbiWJq99z7T62)<-Vn~bdrWD4>V=Nrx{PCz}Qb`EgOwWRzKYc0sY^m z^UStS$F$ZK*1XZU5bunvZZu9yWI9z2F`YQanNIWz&z4AFhS5*=eew_+HPdiPw?E{~ zg6!DleJq!dBNDRyA$H?TqjmFD%c;eX*iai+SFATR~Ugtv}4pn`QJW z+fNj6tld7{ zA7*cjGRoL*PvU);J#6Y2V^Z$xH=xl#?j4-Mp^-iG$&A2@?42>j*yDwrGS+Z24*GN- zDc7YwHtaS7*V0{Jq~{&06@U_20sMLS0wb?EFB~4{0ae(I?+YEk{njtBUoS9r)^6eT zd=%WFTCx#%Er%d3zK_!Bemv(+_K~Re$l(i(W_tN%UkKM|`s%rE-*L-R8ej4Ahn|+7 zq*Md<`PjTEzLMJA9@INw8`>jd;WV%O^b$ac?7M|64I9maGFFpRuoG>CFCT&yj#$Kt zgpFH#AKb#mE;Tl%<0dcM-*pSizR370{eJR%a|<*6W(@Fsb4%pZzhSmje}HZKJM>Q- z`|a=WZf290VJdfXWYaR^mvneHuHZWA-4#Y#{k}-n6~?JP*sy1jG z^V+z*cO`@&jn%9|&ELoRuR?3Rj$N<{`sq5hZWRPd5N+VPQqXP(HHhS9ws#d_X23j# zZMed~lf+lU+E{&s(JZp|Dr38jus@&Mj5R#B%hzCneKR|-#;CHe=ayfytp~1WJFkJ3 zypDCh210%v)0t72oTkgKNuKb(B4PSkjF$v@qK+9AIoI*WZ_NLz!WR{@L9A z1RgK*_nFbtcl283UTd`S-K4V~*BYfYUQ^|r94wrJUMC01I6~rjgnFI5*hL9HmXf-& ztFAR#q6C|+#rW?8_V%^Lc^$TM8HY7YLXQKVQtFT36P^IjETs=1^yHo`zs?xh>;0yF zA8tUmxOt=Vg_8jF9J~p`Eag@*1eMOMEtOAWiD2Aol7GDsQZ2u!*BgZ`2(1N?}tS5U#8hN+e$*0@=WMy1; zCu27lJyMBIgT1m2H*J4@gORCHlCsWlaS3thIt*Xiu>tE~foOOu0vb+Z8`l{{un+gF zfa!U+8)a%yhun@S~ zF?VC1NQrkyrOAnYZy_K%xNOaZ5KzZSOh?B#_YR{~r&!1N1+F;>m6K-R5vT*;=XV1K z(5+&9O9&KoQjy2+FpBkzH(uC*9sJvbajbCd^P=GOAV4E238MjpKyS4^*>shE^bAYwj~5?6L6~HamTbkzar- zp5{1Xa8W!W&;d%^gxV)`1Iq07wtei{Ek;RhGpCxKfeq@JC)4&2*jm}AWe#DlZb7TY zo$6cA-ZVBiVze=(jxgCt_Zz{c8ORxf5w|l5P+zx;UC5T+4<_|z*WYinw))eNYuy<( zFtb0~dB4%TJezLgq&}e8|;G8bA>CLn0jciUA*|fn7 z*=To+(=T-5kjxr8$i8~es7~MF4|c<;B38Q9C}Ah#Ki_}$u!UQVZu*yO^H!raHZ6D2 zE+ePqe!2MfA2gy+(CNc_t+wU40P9bvm3F^0DL4GqcdLye(F@1^+7{d@0~kJ9YQv&@p^NsQnAM^wexM73Iiw5q>U2*~ zvvEpT#tPwdCEqRJVcbj@+Y5{;6H^38cXgtOl|E+7f)-ixm~kss(7HZuv`>ZkJul0j z!>-(I7?EYWjM1qm?%U5|LUuD7yc&=e*fD4+7_87T2!p!(Yj-?Nh{dUqGJ{+CC$7tI`gzx3UR-g!+ z$nM-@oY~QGJ3>cnl~i zvh71ChBV;!zHA)uK}_%c7Y3Sj?C`&gYf%f!Uqzo^$2PwTL!gfBebsnS-yB)C&$vX# zWR~^1QA4V@=j%pG-^Dtg)QC)f-8db1B2Vr&>U=r-IU(rMh>&KS4iH&u~J3b3CJqMtbU z2lS77*Qjnu6d)5^jv-#XrQ`Q*ny;Rn{}wdSJMS9v!fE&Rb}n%O_b#(;OZ8>IRusFE z_zoMo;gZI_V$TST5n;YQfej=OzuT#rF`)8TKr{vs7cXK2QmhRCHjSALukTG4?A{PuYTIh(eX0Y)Oc=2F+6Y_@slUfov{UqZSy>iDDG6vGzTg`rg&cA?)UZHWTgi$inK z&0#1%l!x#BStJRiEktPAV%$nSAHlz2N|f6F!Ml-GVC+JB@HxVR_i=;}WlUxF){*YS zdG}uO_ud1v)3A+f_peWp9yyrKS6=oD-}B(|A+kZo(d;~^gw!=j*v=1hb%T6ANvVVepXrysM+N!T;f`~mj(&+Cy zdW88$8J*HreaT_HMj8El>%U~nMj0mrc5oOOk>b@=)^@0|OuwJqKNLp&1MK;sMv-sR zb?op^BcEJ*nDIz-ZUoaSV(LWH%z?V;&A<_5I_hlWD061$C=Q0fUc`+&mKz8S#i3#xFo)q9aC5LQ(=1fyHiuE? z=7x4-t&SgXetA8vCJQYMW3kk6^PwIv&yItUy4wcdh1BC}{0dS)TsHA*Uv=1Vy+a6k z2$u}oly*2oVkr)zk3g)`kzgcIHwx5^26baV-B?g}2Ay#p2Xf8?Ipaaj1dwwUku#CV znFMkshn9zN@Or6^Q`b69S>u={DDe1DnB~_p(WES#6KpdN*M~vAdpm<26E_mLe3EDo ze0Wh}Fm0`OA*yb<<6>#jErQbohg)6ODR%~r;D=6w<<5W+@D8BUcQ{&twi4Zp*-NDD zK~9C!jhs@azcYXqjBu0?ckK?O&+bksIX#^Ua!zo{$?1#rPbY*V!jseJ)JHwdaHKBk z!OqVe{6$pV8H5eKL3a?kA`O&Mc{B$ln1ObQs>h~bJVs&q=lI;O~;0lwv$ZPps{%uvXFuSQ5^b zh>XHPBD4!7?8r!F5t(~%B@fdMu7 zD4EkK9}T9OBnii2;Xn#dso2!-T0jr^=OW5$)MGaBxiTtFqHfC}I^ruTPACAC7(`JW z36{xZBv3@{v8jr2q|nmRtObLnHp+fHBMj% z6hlov=rgn_YAZ#=g5rF)Qb0-7pwXl*4hCs-NsSOiqg%>cM{|q(_1LquBa8t9B$O}t zkYX{h9iM9$gdvCmL<&SA)x)bR$k%jrlrD2YBhH{hnNnU3ypG#%KDBF}U*HvAri~DU z@pbD;2j_$`K#3@D5eiIaR`RLML63PwhC!UbYm`%vgT3sWQr@bFQYv(eQjCXazeYEd z15S5OIi)x`IN}T#oSsn__IUIHEDZMq59ldb;KKk0@DmY^$B%^a6HuV22Q)Vxip)ZQ zwunN7@=PJMUE39k5rNpG(i={8Bc=pgIvLd$j@cN-Jc5hj2Kyr)Tw;P04(>3~+(98! zSdjMsML2*##|7z1JPW)76KTI4)lZBelBr%5)&lD>jG>kRT06-ifg@qGy;|Z-*C-Gr zuLBIu5D!LYLDBo9P{$AONeET=0wB_#44}dm0Fl!v03OQ~paWMNgk>QAp#nL8C_I-H z9NdJ8C7G=ye!1XAHKetIn4^t_!lG^vpTSb{l%mV?ab7|is;OyImnCK#J^xnAg zfM5JU1bW#D%tbg($6;IrRZ&e67kN$c+_9M6#w|g{C1H_siC4SC*l6u~T&6n^$l^h^ zRk3WTdZ{2lRpPdRl0gNuA&x@v&%j*_1&)g=yuc_JLcFO!D^{b7qymK!;Q-hl1PMBA zC=mK98V-z|>9rCKEF&HvisPclN<3fyh!|0vh&l=ga*~xqB6AlPIG`q=|0y+!R^W7o z&|1g@T|^rork;ZIx=NTRiNMeXDS1RVh**g_A=-(iqW;tg1aStwYKAPHQvzU+?)3t% zP&UM(LwaGDktm#G5jPu(yu#rA6p>Ys^B=sW-XRYjl@1b2(b}9!lmqn+yg*sPTQN{U z%tU-jPcuL+NJB=P*Wn=bK1nn=B2$f%?DJMuM{1&!AJN9{zK-NOm7BQkY0glgZ)?ex z<<@H_=TtISyEonJ5+13NKYHGz*A^@!*xH7=?^63cLq~8A05EtRsNhXVH*+H(Ua6`eI&P zC@@zA6hzE}p4VWbxabf4ftP(w(DgY5E}!%-K&qgCx^y>viBmZg;zTM8G66$-D9&6% zZt+x2Xx;j!G$7%3-iPjihu&sHAl(_`hH;FWT)U|l8sSu(PlQm9(+;MpuR{1)JUmQDI2edXl}?N%<4|N+2C9 zxH&R?UeF)HT?{E?meG_|CRT73U;?tqVkebcygmdsEfhvrxbbY9Q<(=SFkl>u$2DdI zQ=Kr9>S*O8ihDJ1gyus?qHsJAz*GSwhwEQ5{&+YJM5d|A%p z+yo^)HM$1U!zKYX-ftmOKpefli#2LYxN`whAQ-ygHb)$tK`%gJ1S_8^6eluhR{*SN z&B0WkA`^LBBsh&h8}SiHl43Z-E=L@^!^`AUpb#dsG$2S1Eols93M^UBvs4-I}l=i3CLXH1(qmmIH-IuHp9st;n)Zw+#@7= zpl)&2%qvM2c;p149_)>!+lHwKS-|Bql^!RXv@Nk6iy=I;7VBsgcw|fX>M)d&afwk* zv#1aJk*}~?&sA!AVDmZ}^b|fR7cy)>|+|UbHFk`GIu2fNAeNzOr zY>ZwUK=qpgP<;J11B6REuM-k7)NgYDkE!2W0FSNT7J#bN3qpldIQXKGU>L$nf{fkb zo;cemTOi~o`OS80>WO)YaGyhHH~&^kVu#j)9Tw)24Hz%jkd2mW<8Dl9HdKckH)#~e zP=GY8g)5z?etEmfbS=oAOJWTy2J*vxcXVaA4$9+Sw2kvIC8a*5?xQsf)+tqpx{uc2 zaq6C`9)pl9FjLkqJXH6&9-Fd=dGdW=s(U=qq>;4-5#-w`F!OFfM{L3gZM%#&2q9&&Chpf z&Pm|WP>n!G-5sSyCIS_95>wX)51L676W!}UI7u}UCP*KhQBNZUi?&bHgn18)H`O>a z&%wipU=QZBan_Ysg$32-7^|XrAX_?lq~ShduAfO0H+PyMTN@yZcrrke!9(+qlrzQ2 zp*QJrBva5DfsT45n;c?F*hbd4;}~d&5AXmRJP;PhY^G=YWI4Is*D*}t=x`%DF-0ck zOrZi2Cdm|GMr8piz64XkoGWB1@M2|hu26CEKvkwFO_V9k={^}uS;hMC52)8hm2esL zJk7ahABCXqRgVbaq6~iW5L|u6#ge3p+ibRUc+YB+>9(Uv@5gr={^^CMmRNWSK!X@q zcp8X>r+TbA;V#>3TH^`ORkuw-4#fMQ=Jv?Jb-!483PZwa<*5)0PZn<0eR+L!;fbEU z(6R7@nHJH2__`C!UvI&wFn+-aS@eK~LVZn7r0Yd3=>)7Rod}As-0FrvQEyPxhbZcc zjQfF>{=hx}u?OOhauLRiQy>qdSBu@8aCgkz1-p|PghA$O z#2lPc>1i4Pz~wPjaR3{mY6+mR!Cox%V8NyuH%elH2)Fy8C#!`A*XjsQTX-;OCOjz^ zCeYU~03pzra4Ph2CW8>2BX)Z@xdUU%Rw2Ar#76|Ki~g+}sRmrEX~42C~bqGI4Xvk@nREoInqN!p~c4Vn8Gs*>jx-en5w@LMXdnSgIKM?t%hjzN}-9o zXjzG>V~Plp1iSc}ieN{KI>L*KgK$%4JYK=Wut(W(c*kjUDrp(5h9gj9tPE5uge8%& zWW1tj7!ATh)BqU_c)^;Wime15rI=D;O975nAY~t|wsLrs+9J{Bc#~03=}~}HJX{jy z(ec;FpaP)YXojhh_=_dG4zffN)1P8bQ5ei|Z8^`JL~MVKn%}Fm@Sm-*@-!#wmcwbg~!mWr6;{bT-wC5`Q|G#WgH!GDUd8cYlp z69G`=E@Y`K|8_xa5=x7Bpo0W07Gv=~oJ#Aj738VLbZsR*@H_zjzb*eCD@K5H;r|!W z|1OLmQGTe@>S$Y5G?oa3nyytq=s3Mi0P zs7NKwWRgs)&s2||HjL_@I9lUKl-P!WJ46^w2SbqfO0$PWHlaA$jz^Nnzf>?WOb&`b z{Rny@YV)O>HrSF9Yc0r)D%!U2C{5PkYEFb?mU~eoJTD1@& z!87Zqa+&y#D|v;1S4bad;K-vr_^OlQ6puvmYNKr%icq>Sp`x7}QK3Q$iL#HI3u1b~ zlS1L~q|m#&xX_!rh7=ZZBNYF8ZGz-Y7e%LKPKaH5F<(rN)#y|#2uBfZNP=9EoD`!c z#zQzdYTJn!3)F<7#sW1V+3keE3apiWmqO#wdz32pEPbNrYlOu2Yob91;#W*Cl|!!&Q|K5&;7q zuCY9r6crz^bIm}UC%QyzK74^XARSgr3uYuTSPrM10brC@e8fcoi?MPU=0L8pT9dXS zS#Vv+12Z&fQj1oCO#V)Z4rx5q9V7Pv}Tc0 z4gm{8H#!$|($djs^oG#(c5$c|>urK3}55 z0|J1kLQ12U!(0;vohZcNG%Kk@=6r#kHXcxFl)1#or)f82QrhU212LR33)QC*CPYFY zC`U>j5e^~-Asa+HHoT!#@U?gcvox*60zDB=tM-nAb_QmlaEL`SKhQD$`Y4Cc5kZW+ z!UP?UQHaDf3cO-{UZsN?s<%Fm#>M3ic!9HsYg^zFxq1~CYVjVyXY#p#z8E} zAKn;97jRi8B~Kx)BXoyDO0*MSFK_RymvgGZPK;`z8$6L&(2y`jId}mSGlF;~16mp} z(OF}`99<5rmlqKl^c-r3M%nN^S!JPIH7mD@rLa|<6NVm}X_y*%bS}(`8L%v?#-suoqF9*eZ>PoDa zL;sQw6!Xj6#e%sP#nAwKjTX#zcnjvDS3j{4RgKk6=LBwNoha=z5n4|SEOhGQp&^>m zD8wrbylbR&EnzCa{uiA+kkV*@zrR5pjDP|ejfML}lktub$Y?0cALQV1;pri}Fm$2= z=@O+fUp*m-&Q$cLiJg9Ay$RHX&Iyo@a30dS{FA0V%aLdxz3<_YBIrqGAVd=hAZRCI zUyhu2;(&VeK5>8$_FzhYGBf2Mizt)gc!LG+Bs}3PL56~QPWOOQxYV6MeF2e8RQDi* z(&fZ@4a$XPL&cO+#dxLUku9gEa{}h`oHBPH8nRppr&s(IVwguQHiTo*!smtyXu=k4MscWF@yT2{Q%bYAZ)NJaG>f}RoEe9lVC@zy9L)1` z53V_-?yxZnA4xgh{Xv4btaaNUZ zr6UlFp2AZ1(W00Eh&RJSc>)2}%4t!|i$m$TUC%Q{41Vh*UhvfrjaH{JP-F{|ZJ9y7 zW)IVx-7?OPr;MBo6;B4oGZ%}(8KHp^J=P#Y(dLciX1)w9bIzctV=wm%YJP5p6%ZbFKrZ@|>u}bg1POnOKh)ag2vQj_vR(Oc%`ZgdkeZfmlDcJSGsc zdH;kmfh{PreD#w124sfOdOVhdbnt`k<=`t(x|2b#rb09vZv~#{r5=tJPQ2|C!7PZF z2gV{6*B}&y)@J=7zW$yfB@|2avBC*x0Q+CDtQ0Gw07Ja80gaY41q-EA-E)B-;u+w% zV@*GeS4NOtUGxNiUJ=EjZW9$Fu;l=vU~3YMeFV(`NV&9zxvJ)cr6SNW6D{kJ@&oti zo-4cvM{6`$kS(sJxws+o=+d_UUU1q`B8SojNt(NG}lj_zQw z$V{lQY%I3ML|axF_@Al>ceKiy0vr=>95nP)3a_&q1jg4=6F^Y^(W*c-WdWpA6A*Bn z!gENdB`I_n5IXv96lKB+xb8MXdCU-BJQw_j%rwXHHtve|FbXh4C6~5dY)OEFk`@4O zjDfK;LR*hjpJ7-Xmogs3EReL)60`yBH7ULx$hKbUjsBh!2zOVJ{h0;i<16IfUQ_UWW-w zyLRBg2nWiRhX^p_8el%cB<+mk-aa4NStWKnKt<_pDw3sAE8xnTYcfwr=l~V<*03$Y zC^$sb3rN8PE!02dlfv5(u7U+i{2?8WKk)4akThjO7O;y_9rWudR4Uqen`|q4EZiHEK=%g8d1-nC0f}628ANuN2Yi% z{ivl3LkfDCxAmjr^zs z^BP!`bg~}eV91y32MNRZmw4JeHYnP{Pb?r^A=4l^{4pG)X?XLCCma1eSVOdlP7BX| z&^L_`qa9UV*h%Bhc~H-H#H(ArE{{_3Q43#}N6E>PL)MIUY5w{zl;gwRtt9eJEgsK1 zvAlkZ63;ufy!};iBOl_O0eeoIWj^|kV5BN*|8WDqHl0(FKW=d&S)agE|; zcF~FcJa+qGB=x>q9l@m%-uI*v{5|Jr!aM;D&g zd}r*`Z)IP8XXF;#xX-(28`n9&X1-Q>@x5vvEB@Y~JI8xum~nTGKleRu{?M53DDENC z*hxomr8lnByy&RWmfX!pjmfx4r0Ea15M&EG;Rjq7wuR030nb=$Ve5Y|ULg_|{Albd ziNN4?mHpTM^iw&f?|y0&+`8lw3(YQ9A0jjzU$eU0=Y z=!#d_qMwa(LG~9v8>I!=u8yk-TG3&x6meU)flVTK?7<4%v5&R?#mFi6C*2`#;CW?i zjY$dg#a}BM#uh!2^6)-3@fX}Gv6)@^3+_zo%{KjF%t-G;vkiOpvDUvD6-^Hyb*MEF zjmvPUyV%Qac``kR-SnH0#^(NNWUE&b{Nq>LPNlI;zZ#XlpKxiW8F#ytm$2(^xQ``1 zM|SaVMlC58T+u?xmz;wTXCkX*lq|OLH={ZG^f#l0Le4doS&SOnR%>3WqjI+EW_#a} zJ?t~M74iZk?KqcRMX$hO{d^`}CV7j`r22l*XHtFt=rgIlYy4(U+$lZNZ*J5x4&u2B z^w%big}$)47hssvvl*8 zKal3T40F1ECCf3*g(vn2wW5m?=p|7FF9 z$1;It3+tI>u7tBE3ni(GbjmjS=}lt-Nq3r2@kKic0KY$0Q((#H4`Ux6|^CIsd4>tah2i9>sb7c8hY7_G|kZ@NMv-j_kkb^6(i*w9# zLo~YbM1wl(|3Ng~&N0uyh2Ez(GwZ<7E1Q{>t)fL!F7zfH*O$H0%zRUdEnTjxC}Ewx zp@g4pZq9?)cFQ&2hFG*{Va{mNmt=`XP@)eOuLHnf@WB|gu8yp4VJ`J$UGiUO0D9zM zRSMmb(k{FQo3vF{c%@guSyAhbQ#h>N<|tcgMHaxHe)yCna#nUt$F4v zS?m)v20OLTY=@v-`DV|opO)^@LiE^y$Phto{q&qtkJhH)&wBG$B+OMqDdEyWvjv_k ziCkA`=JK~n?sv==eg8m!Yv%iIy@=iDnx9gS0r*VzZP1*8z{nXzP%>FRZQUVW4H5ah zFwktn9xOHs6%EG@6r1HxxTz)P^sLoH0UmDf=)0iAY^O#&xdIy@aS>LD={Aio3dYzO z?Ea}{Ufdf<)ulZCDW&ESkH8$ZuB$nQ-BZS?WKGM>pAs_#Qwr#@X+OWnS5;(8!_?y@DK{~Gejpej8r|G}43)-5W5EWCa%~v!3v$VH(s02~o zWc}Nj=Rpv6v@=UvDQ{{yp}PBZE?*vqI~XKEBL&r)_g$MJFxK`%t!h4 zvLGAlvVK}^3S92Dr&6*GY(hu#4oaKWNz~nIoy=c+SL^K6&gT6s4tz{^*kDqcr^5eO zf}*F)uJ2-guJY}XF8_d7miu=2NiCxzEB8Gu20N4hDpRC<7aI%uWlo?5U{A0@S6{?d z)R`T!?x4D*BQf!^$9}3ad-)KldpGlPBI%iK&`j^LbIveFv(4Sj;sSPOeGiQc3(@vg zic2Sb)b=jDlO67Ek|i;%hgq(Q%Jn_WQoP)=vxoVieju`;r+HWpd_m1EN&%)5(R5nJ z3CxQpn0<9E()2{Lr7rWOaRcS$<%@$zJl_HJ=2g1Bwyzoga*Y|{`PPQaZeDfJp>xid z&`#<}E)1D;<@609b9{as8aWTb9mr%M5wfL2SuL^GtSWA9F@l zd_JuXqz*Sw}|{UPs^qSUL&tpfIOU$ZE7HR(6zr9Mq~$bw{32+JoAp4A zf-5qopLvEK3`bk0%)c9Go|lxY$i_itcik)EZo12GITdy}mVspve;I6^lOp84gvQjF zcpPN?P_xpvbz5Z5P?PBi&1CMW=02OGjBeP*h|Z!GpP!nFL8qV1JMMJQK#tAE3QxytxQyzaMXQ@&po^ zK~zBqS6^>tCr&VH(ErYvV2<}CW(8=caN)6FO8Ubrh}m@gH) z{}6wS#qTx70}pW(i;+o%w(lW!?o1dpb&;bp%@cGWk*@`&`z;VMdbT;#%+NyD^0(aB zoD0oR*2+&~>6d@Xp19DQjdVLxd@WetC1$RwNv13@i}df<@+FY>@7RM&%re|z`_>Zk zO1+XbhRthqZS7K6h2KSHEHy{ziI40xRUX-clBG45xG}#sM8E4{Qo-@_1xG+H!6cYJ z1b|{Zqzt>oLzSWRkIUq=EWs~;!(z=Ntm12oa_iXGuZ==BVz|{Itj;s+c=}jGm+g^= zfXADAc>148Ja0^Y@(ZCUNOv@|xp#9t9{Mp=hQp04^K#e4SA@1&tB+nr%;0Qjd>sjX8n4FbsbXISkk z_r0W0<8kyg-l=&UZ6!Fr=1qEeu!>zc&N`?0N66hl5%GXSs3%P^;flwPn0cmE2#!^p zX&u!+V!`p&buGj*4s^*O<`hD0DJouZ_=x>$ymgq3d@C)KeN-6kTpGXH7h-SylyWlr z`YlY5Vq^;|y8RL}hgBU&i<7G%2hzsCn7QLX+J%s-qPNqk;0%2`trFsO{@ZC2^vbor zq~x)0-cD!vp6wx#4kif<;n&_E}c7 zD$qBbh1D93J$aVZuKEK~r$=ac3oAJoRbx`i(E_5I$JRjVl*GIqO^LC*iPntMc@iwp zi6Ajomgm44pqXkiIdHeMNF@=?rK6cVI6jR(vvQsunI1 zaw@GWSer@KaQSW&E}}%9Itx#-YSkh>Jju!@LvfNd#kWAApaO)ngcS!k`t zt(ZS9v=)$e_F}6%d{e4!(`50ErDACp>Cyk`f!lrPfN1D~D;zPv!VEVm!dKz5=}9s^ zPe}8RShVKG6Sn{Pa7iqgQa~i?90_gAeGB6%v~;N+zyqkf+rz0g!4+RUrrePSe`bP4 zKrT+ng;H?xFWNE8sGiC&FMch&y=MeG#p!}dsPqCz7FCw0% zPQ!jXj1V(v_njyb(&3&DT;WX{2+|$ABdYo8+XzB132V-9Y}&Iz&s1YY8gIPdRc5B! zRt}z$ht&yjMyyQS2Tb>&;$dW)mekWQmjqxwEg9gF;!GEhh5Hd8@)UWcx%A99h7mYC zC#LQp(n4);T}9W>(_1XWP@3TqUtp~VOQ9)d*8M!I&iBdZY~gvAddu?V2Evc5;E{4r|fUy}D zS)piPr-Z<#5C}Y}f3xayJOur4yD9EY!QeD7kBvqE!msQhVRvI#N3Z_C>k#(nK)&QiwU>VQkiDgz9kbJbv>I0|pVyi2{CS7cefP;dx zWG`QAJ&Es?mssI~*H`qWd+5_WYvAP-d^CmggcaJeD_GT~REtXzA9+Q{_ z8QY{+ka4f{3Nr4HUXXF)6|8ZERm_H7YNfLg|FGs{y{m-2bp`BsYjzS?B|GObt8dbP zua6fn=kjAy?7ZBX-DCNcaZJ2OdIj}ANP-0QUrH~i|1YOLIemdEtiA=W%E%(^9_dBe zr>|i1uCVHp7U92FSnIRaN-_|6)s@7EO1AS#>*u5?zFld}|Kr>$+2&PNZc+q4A1`3= zRez=&mF%^vjzgNc`Z!sRI$ppX#|!ux0e_~H!`2)p%bSiDaA?i3vcWk%?V3MV{I9RE z3Nm(oj#+5DGZ;8GlDF0>*Kt{HA7(W|FK%X5EnN|PkXb$9Ex6VyGs&EGtb8{UH*4py zv#+)8Lr9D3tUG*r4@I81&iYhuzIHhVvTtjAAiM8Ud}H8K!ydoEn&dlph`H;mnfji{ zmFr+z(yi&$zoz9!PP@qpr>0kG)=hq28tbvu-(suKydlW$d?-| z%f?G7zdQ(iyP0*~YE|Ui2kSg^0e@;oqwZJ_+{fl^wSwuJ5rBCgaKkD}8f))Xs~Asa zeY+Jpd^78|4Rqfd8N1DTQP0?d+jnITn$w-)@c0-a*l5{D>)I z+}F$Whph&Lo&B(NukZb9SneZMrSIrr7JeqJqTTW%w4A4FR%_6RE389zV^J}b3frVL z5f8(riN;4ykLWrcM{++ha@gi4EWAV!Ir&NJTQaWt?6j^eK6se&L{}16?{~?f<8LbI zmaX;v_2%`L@A&?)qf^%Ivf6@<>Rnc4tvtR@|$mf z0uNLb@DWa^fX&}!b@Q$Niru@*YK6RZ{p&sbf_ee$2yUB0hx6YwK<3OL-4p0VmIaW^t&dZgl63#&~j z?Ec*t3#G7Ec3U}UA0O_9i0IoQ1Md(jV!-;hFiuG*Zj%GnDVX==znb}r7A%}x zQ`dE3r;c4ZcI`T`>*Og@rnH~ZsZ)n8le=}P?KHVlT|@1}i5(gy*G_8RzJ`S+*e%(H z1IO|QB=pwVDeqgOSnWGjn7#duHJ07?j@2&G^*`3hI@^87s*P+sXg#AR(zD_{t2hz% z5@4+2eXAsL$NSbHgKcSVSF@|y+l2*_CeEBVdvb%baLycO=A3ijItv{qrxwTj~x0bRW-?M58r!1O3efHT-!?_KU7cHDVXLd~jPpG!Cd2P*y z08F3N&~E+$HtrI zd~4N||5?_vtnaL`kqf`KZqCe3r2gR7R_n+kY4*&NTJ0~A!j{-}`zGDbonA~pu+A2z{FHkUuUGklk&6a#;jmTOwe~~k*VaoJ{ z6N%aEmG7*3BCS*H$$F&JvP+LexwN_cJUcVjZpH4i?T&0u3%f^~5%U`+E?6}GJZIRP zg~J;bEC3?sl!kK`4rw^A|D5^k3)^1Ap8VD-`|}+9wWWP$0^yPGGVPpWB+{Q}2ahRs zSvDH*u6%nSHbz+8*x+otqrISE;e;6t=M7&pWzLYurq*_q9(kw0{!EWNnQgzAGUR`1 zVhiR^u9-P~(qw3+nguhbPsaaq<}YL`ZM%8DS<|ODJ$pH*Ag}$B^A~H}Yr`v=*{_?? zR={o^VRvBLbL}>4anQadd%>bf3l`3wxUivm_M9mV8oRR69^}(BR*-LB&C=W19dbsX zkt|p^an@X?@AN6B&z*v}Z0?&@0UOy4e0n|CzB+-`?2;CCf7T^vmu3%|Jq6`j;Pjil zXx8wCg)nODW^8T{@8$GtVYg=QyoK&)bW8h`zgWL$A+3yI^XJT+v!G!Lvx@AJw0^w7 zvvx&x=VK~#S1Y`-Q<7(|%^f*sVZ)Tr+`04TEN+<6clv^f{4>g+tW_Mp{- z^*AkZh&`!I}2_{xNGs}#~=LyU`M+6)K**{(2ykhTL-`H`L3A} z;At>{qoo1X0&XST5>3NdY5XW+DgMgvSB^hycGU9x0j)LMIfzUdpNc=q_&c8TAaDBy%s!mq}62mFL#EtPkWxXgpC8XcXtQZjs@lBHOb7p`y6e$-KfRiB6uNq;b zujtnW-?Dm+;#(4RM@VpV17M_1xcYgcbu7XI3j$gZ4*+}T2eef0`%=Wo@xG6j(U>F| zoe9`rFI_RdC4o_VRQ}^3?589+1>cs3C|O3s!P?;nmz=p1epm573;!_qTi8N&`oTQ| z{?hgM7=@4T;gSxb-wLo*W=8%at+}4*M#xv)CYmI{*W+8tf^=Cz+FRjIW3QZP=kVkk zmE_x#B;SbWnS|T>#gYpxrzGE-B>6TZmy$~uJj!|6{Yu(TlB9h+A?-CY*wBC2xt#1H zN?PsqV@v(dySlXt{(4Kf*OvA#7h0w1^wVB+eN}3 z_TU!+P8_%aE^&4QkW>5@;3tm$3>TZ~we#>tTDMEMxyV=skUc{IX8}GC?q^VmB!7}} z8E*k#MEDlOYXx^NT2Vkp~dwH*jk%Tk*@sgh!(?VSL}?$fwPNZXVWdB5YOJ(MJ^T@d3IB|l!;Z<3^KkvuI|yeiE`LUgKRRws6o(=2-~ODvQkRIHMc0hXK{MMB@?Ly zT#}rZf&pz1+-u>I`kLZk@`MDN5Yq2*0EWYT2kuz7b#6dA9qtuyhr&GocNpBZK+qhn zOc#Qm1~Ry&mCqqaF(qPZ@b@@~Cle{JjhL;8rh`9x1_IXMV;tP0a0kPc5qcMjgg3*j zR^WT!Cqk2DND6i(G9-(Ie)B^ydGGmTygZC}5=NqAKSjO{tdfHD&3*BaZ3vbc_YTCB z9cQzIu(k>QyAfCRcAetF!2grt0GjqNB1`=>A|Y&Mf`2FCN}*hs5Vj)0|Igx>iLwXZ z)JrT3<3o(cG0&((kS54!fXU`H7~dqI^c#wAQkE9n6FCHWZdOds$@D*fK&fs%#OG?;p*W0QEpsni(o52)Tn#@}w{NsSEZuH^Q%gUqZ2+^)7z4o_ zNG@`u2DiQ{eyDH+ei{jVKuwx|U*8v$-G5zeV@uldQ;J*`bb3|0_B!tOs zkwEvrFU5xZ4=Z@X`w*zs$)N=QGl(p!=$nKvds|Fi3GwTQD~T^o2%DMU{{V5D$T{?7 z2vmt!mk{||h2pIVarY#|^;HWN6G0y&#Qhn5RTlEAQU9QV{}LnH55-6RPlp&AKft%N zI3L5vMY4BJt!S<1Abd2iz6@7#?-YDX?(9TM=fX_g$MMXYaY`o91c=`NxKs%;!w&65 zhL^#m=J*lZa=5Z5$U>TW`01w-9F~Yb2IWIUxb{B2r2xtBivXj+t3-G+{C&On6Y(v% zq1tDSfJ@Hwn=e`xB~b_nYqA6v)rk3lf5V-QNPWBvDZv-0Q;A3tw6mRvpNII=1Q)`U zttA;pzXlHC%uuAGPWWcHh5Rca133`5770coY$;q?^JoiqgyP4i_6^u7GbMj;0h_bU zTh_22lQpktt??}dJnD9g*-D9NixFip6x;?`eDK4Y^`$#>b~?D7S6 zUbrXXeBUjgh2WM@0{jRU4Mw&B-W#q8?+E{V!22Y?$z&=4{A9SV*NH)pn(hR^#{xbL z?k>2b(hyFaqR5aeV>LlN{GAZ76z-2*#eD6HUBr4&IsByHmwE0%xOwoeKsXh|_2OLs zml%0Z=YTc=t_6QC+*m%ypUmQ!h)@rA1YGI>>fpA98;giqNbr*pcm&)gBT$V;qpF7h zCs&12{3U=>e$uS23wIZjGSsaR+oc^|mjK^;f?)XqNHZao{`25(3xCduVimRQVxfB1 zV!$CA**JtrNp_x)4Gf9!3zsW^D-n^{(+Ibi2W#5x_?EJ`9C4-kqTr42OEp6Nt%yse zH2o6eZdc;gjuCiZa)c9{1Nvgd?nyC zoOeCAs-h^P9K@CNxOYc<9VW(2>5V#)k+q$_ zkJ#uPGgn*wLEJpVmG=1W$3+|60g4TeQ|j`;8_H6`^|NB7Y7gYH9@O|%fXl8#8h?a# zh!UUt*DZ=Q8I4_bnQig{gPiwJVdiMsgB5=~wx62~f%2gwp z!f$|T0bEt_cW3QZ+eKligc6n0n|(zwpMXnN&lPY6qseKZsX!a{{CGV#pK6RFI zMx`zMWKJxFOEVwq;Zo=LC`wW7_4L{&0Ln~?{~1qETli&vGJSxMysr?SCRPW)AA~Da z{6hHK!B6!j1!Uu>n3kx0CLVWPK?2}bAdo7>{+Ly*vD<_<0VdV^K*UEU8vUJ>kp6ze zP4zi~fvGi_4m%sfeX z>Ig;|{ePk)J(wiv8wp8sr^c3?)wD;Gq25uSw!{`U}9j6|SbEn0Rkw5>b^OMbo#ta;(YNnkc=0_iddora!9ND2x1WcA(;^_of zwLql89ahLK>CQ?*)8I%WUUVp)OVc zM)HyYmlhc(!mXmn_>~V0WJfb1K&PR6;|re)d0J5<3-K-6m8{nu;D9=z=gmQKoA@3j z?J|7JG}1i^JrikFk@ZOC2DM7^V@c9paCWQ` zDPP|E#tdqeTlUS3deYubv=k*g(KeFsMB50cv`dG_#*O_5AT7uKZ1(Lq!a0Co z%I^xqPx1T%*{0j=9u-#sBx{n&A%BDAhvyFA7&EU|qMyV*y~EDePZ1%vAw;U6p)7c( zT~$C8tNu12illHjYosV6)o^@2pkNur9-t^=6QVq%9R{ zCaK~0eonzMnO%k`?ClM<%~S0~SQhhbwELvKgU@U>7@wJ+<5RYZfov=leU2#lFAA=? zY|}<$M}sZ(mjYu|7JVW6ilUsOhU42-qMXYH-(}~A&rgW*e+hoo1inBCyHNS2&m{?d z+2u%ZOU0C4DuGyQ)-K`&4F4?#(;i1$>fNhRXsVhk&_Gh*E(M%sTP1vr2TzQ@)q~4; zGz_EkU!N{|g*GEa%ianY$?C3=nCYR0BLg;i0bd~^4Jsu3E)QOh;TBmBXTco^SB&%U zfuA}Q+x|wZN1?F9aljU&7n3qz*KR~s^>$+9hY(px|G_^%{CE^GW@-@^42b>`@jivP zrmU_%ioAy+d#L^>?rVrE1@b6}fclF5R3d&ryf7h^V>|+=ez_6hZNSM!Is}&#qx4Hx z4$tLSFECn+0jY{42SR{JJL{zVQKCfo#{nRfmmFxmfCOZw41*hlD=D83e+d2u;nG}y z%v8$CI>2P6s!Ys%GnNOUXsh7YNvq4>8$d|XO22CnD8I?S1Adi_2M|}XIPpx>evX(@ ziQfl^E6tI_xCg@tk=45UBq7tIN?ge$+0!c%++3JjVOT!~`OA1RTvnBw_YTXC>&J+d zmjiIAt;+<{;ipk@C%ByzxI}aqrK9SQ)euI;6t55ds2XG+mnah+{IqBrm-RMxoY?Im z+qj$;Z~!NPQa7<|0Zg(MLE5A6XUEK@@{goaNB8+wtTjsUcplNIWlKL#PI&N3oH{)6 zVGLIw0oTXCQ;0OL!1V^vVNIPLcMimh&oKC9rj%JG<|5=I@#uuG#JK8I`rHJ(>!W^8 zu3OL~2jzg@76ht#?r1_rWr!OcL%tnPV9Nx59paKEpr3;N<-5F5prd$a(sE0HZlj`XwP~l(rZVASJ&l5({jY1Ovz6#P}OwxP=N@+8T>Ky+fVL?`jN!tNwRThYW zARmxzd_P9=?j%WjC1g8(fh$fOFTw7w~#vwUyzvB%cBA$%v`F5KmCyOByP!5{r7F=?Y72q5j02A6ux zRg(hRVz_F&6XBl(IITT2gL?|x_a=(j^lfmdO4Rr?GQAk^TDarjR=_Pd3#Q&8d|Zu> z`EXMZFd8oXPDCkWsb->tk}DLp41Q_okpJ6;SlpxdCY{_H>8aZzZqaWv{HMdc7cR{$ z8;Ex%mA3&ORB9P<4g3?~r(X_clq3=4_vUc9j!+xx_V;51Ns=Tj<|17}CVp8EWP0*?d&vVBiPw z{ioy(lJK9}t(}Xw;1Y?F_$5YGyD-_KP)xPUdk2K%d+AlUx0YyY6lvG&l4rf&mVS22c?@ zs3_0&1jX`vsQ3iM&_P53LO@gyf%iExJG(b)eE>nsw zV&tJ)?*Yp8?W8LyT;30VY3EK%;(j;PV*lrzrn1Y1ls#ie+1=I+)*aG`zG0UPDZD3z zOa1ocAq_t;q-=w-C8ix3i5&j&&I34bmu36sUmH?*K7||oBONm&Z}yP;V=1dpgZc~& zaUMHZel zUBtcm?5ZQ*>Vi&F+i9;46^Gf5;;PU^+2GCGpUC}ot_mHL>1D&^{oXwI0P=Tq7Td2( zpWjuqcLi6qoMrl8{l3E3-a>)W!u*OxN=bj1?}}-^k*iX~WdkWAQz3)$zHE@BVHssh z`fWYmm2WhI>$0Zu1NHl^>F+@QRPEqu?W*9AaugX@L-oB}LXY|icaVB8!mP$j_Z60p(RGqqux(`yf*^?`Vo6l79aJzO<^)afJ7FIpB=?KPce;u6U zQY=-Ga)Dl;YV%ALRdXP=Q&pZ?s?xIR8&p-6u)J?RkGHpssl`oI%O1Z<)e>B( z=K5zU-)zl2K9#ydMdwZG{yWhr@v&-Ct#-4f*}RK>RL|aN&kr9q`s`M@>JDveP8l^% zz|BpyRqN_gqjs~Nn#O(cZ%6(`Yuw#bT}{G@5C7}$@mx%L3+cym-FCshhU_mP{bQsn ztF%9V>Z97al)r_fE6B6s{G8|5`TUT=K0hQw8RS>aEB+zhDcrB+{;S+C=K4XdCva_U zSovKJ=?4!zR2vTBFRkgM_JMG&g)X_rE-+b=W$tZR8tV z@8w=W(wSU8!1WTY$_|g|^jbq83kPpwfIWWAdNrLa_Y*Th*5H&8XTH_U4J^4VIRA4P`Q;drP9@B z)87Y`p}PMxW%CW$y#6XfeKt20{s{%ulzok>0%be6PUPBpRpBWpXJ7_@ALM=x*Q>ay zk>12r>7(y*RU>_nt6GBXn33JM8dtXtJDh7@!rCZxuBMpT%>S$s|pmPc^bGo94$8}@ZF)Y|@x zt3owpfu5qku)mP5sK0-FyeRhw_p0$H`s;1OpsJ;LlzioP{gJC0$ab!3#}6(4B;{4d zZzg}1;@N)07d0Z@@ReW72foV#4j_HMYYQiTHdlprhBo+8e}m;ry`OT-^038R)xb`o zH);vW`{mpp#C`se3m??pu3xvM_~DJGZ=}c6eOlgo)GxF@4)5zCV;Thy021^406B-)b2)hF@rIUoAR% z+k1LDyQ9^jy<+WiCR?(FQD@sS$--4e`@Dok-GfQ zZ#9?4`(7kcFY~-C6Q-EfROE<;;n`Lgh7{m+2CnT)UpLsfk#hO(v_l$JVx^gFx_0Wh zhGU8uWdrp8h}O_dOfSrQ5kyWXoLG){RP)+Qk*0R!FfOv=Al+|&-r~@iw6$gHd-+di z_xgzIn!w0nKcV}PZ$_CN?0?Q+_wy0%B|rP9);2m6Sr}wS;`6QrI~4NIk7@_kvnUKb z-o+3Zp2Hk_2Rd@cquRuM_zn2>Eb3TC`^>x6d#ooQ$cC z0^3V{$4#AhwtVIZEvUzCV6dohkO`*GbLV_eZhl;wEU((G83%+BqLKJs7O;+ik<4wh zx2soAwC5Aney-^56zM$K_k=dJ?)bhNn!Jc22+Y`xGNV`CeW=dQ!XK+InUL^v^z^|o z61ouEPUZ^X^J)s!$u;%Bj*~2k4I@Y#GYwtqV!7jWP001{X`}0Eslp&if+P(iQ`mO* zK)Z+RlXR|M-=P-E2|Pcv{J^(eFN=}Q9vO|(r_1Y}=fxK|FrjZ(!@B-5{=AR`$`I2_RO~duka^at~5w*;S*uj}W5r(M85Kv zwz(eDNiTAdTZ_?n_MxY#j*P$Q3C*fUalUM^Kzcn9I!pW8Tloa-nUO0TH;yeUN&Gl+ zmdOjB(x%tVjDB05%_>Bx6&r^gnJ=cC)}l|T+d=GFR^(Wg8<>t49=@nt=|;_QL~64$ z4aZk%%RE9xZ)$Vvwkz07krfEraO_wt?^8l%%T>qgR?{9zlPI)(+eouCKp3O<$#-_w zr#7tAb}hBxLnqjAnT%ulHV3)c!vltApC zB)i7y=hR|^FtKfPi7CP`_D@#HYo}qIO7q38qd$=s(|3fNEhpZ;S$=4&e&)mkO+$8u zZ2Fd|vfRWo{8KK*YmrD|VaAzbuo2?u0~hD5%hsB{XWdN_%!id^S)4_IZ=QZ>o;hW8)T1nF zqMq)H%nXyjiW5XN7SwDELGY}q2V|tlsx~cWSqV-Aruf(Cch}_7^gs|K+ ziYdF27t=9#Id*S-OwF;7gwzpPYI%W^#qIg@$>YcBqw1N5>5R-EP0~0uB5M_|s%q6c zCT!?DTg^%4`TQ>w%$YC@5nWj{d)WlNR?AYyP7)89Kx9KJzO2Zb*U(4EA2jrl>>>{- zMAx})6gw#3!4i5MAqdb)VQiwZVmnE%P}SGU&hh%li9H?Xs!7Q#+d*l?uE$G>{3sQJ zWk%K54Za_y9*bhQM(Sp~V@un&;hMH5GS|%Ll5nzY^_>;D=byBx@{vDko9c<_g9K7+ zfaN-@@|tDxgoZvvKEAg;t{yrxiJeYkB*Czgjq2})eoy1CSqkKNoYD&0%|$) zs9dSvv`pW-#?pr=0?qbk4SauXp<=L!P8`sx8GAwOrR&Zg*i_cU(w=!X%M$pRh%?^| zvh{;%V?o2Q5qmEJgZQTF8{vjy2DQSpQn0PS^$e_5XuDx-yJqK-V!QwB589+g96OdT zLKF02TC7$V;HLcrZJIoNslKpg_y8Us%Pc&@MX!BGu6#lBYp&-4!JWgjTWM ztSb`W2WNeuBIhh)8J=6FpI2iaI8KZfHDWgtMs~L36~43TmZ!91?D$|C3w^T5lPiC( zjho&c^M=X*mf9wQ$_5t*#rX^5@h9v1$cqoxYYpKhCbr%- z`M>QN{skbda&~9r(6{cnB29n{8Tc105Po=}-0>Lid|x*b%N)g)k6A+!g<)c!`<51& zFMHS^0}#ZFvpW38Gri3fdCv)YG$ss!5YvPu1Rwy^F05?oN0p){8nn4m`jRPyWvLb`0w4mWS zAxb*5OpAAwnU1)MH!j}%G&}q^PicoX5})}7z}c2>VeXTw`BxEn?%_|<&p7j(B(_sK zU}7;d*YHl)r+L#(=%tYx*p|Vh`0+=|I{QAOEpCW71q?73CN6?u+t*gs7cJiKjJB{5 z25LG)4D!M}#nDI0+!hdZL-=Nftzh_wR~9+fRhG-`&uaU~4bN(m>rUX}`>nrlbXSHJ+Nfu)WQsw%v#??aa`SV5 z=)iRh3_$3+W{NHnH&o=^&uIrXP(+c1)}yb6iFvz`H$`9g9Isz`-}Bm-M(Boy@5PZF z*+3-IzNuVv1>(n~PMErWY*-1J6M!izU+h<^KYc+vZ;TUUAWS!ove0Mx#LX3!KbN-L zliTzsZACo+IJ46oR+IS(l8;y9jl*o+ll%4<3+Hrv#KXya4jx2QSe7+*ZtJ=~U zj;wDYL?wOqiSSr)|N@YpW?*6YSA;eJ$ z*h8t22q3-n)ykqGcg<^BeSBo#G2rRiAXr?S;I7Ky3wRloJYkkT5qD${x&1Y*)*6O( zXrTZ^koumH-mQ9N)Z7?<1fA$APdRYDR*^@(uH8@v*+hOM0EL<5CuZ_>-gNc4c2*-n z+2e)c^#rL28v91Y&pR?%y@RX0Gh_P!5^x87Jh|A$c)0geoWg&2@Gsi#wG_`G!Cess zkW)C$H*egE7XbYuy4Bvboj42<`UHYO$lPyLr16G!a1BF4nislR=Hh%L_sZAy(5Kac z5DekR3P^w+P3u4MMXEtZur#URx{8=E(r@Q0P)`gKteCJ-6P70w-zg-w=A?+CLYQQL zUxV)!OKoL-WJ6G}o>^dq(f2Bgi%B>CrZo_26Vk@?GrE+dX7GK)`fu8{8j2(~ec_=t znIb>?&-~dn=m=Cq%sv3HJ6`sKqNk`hId-njad-3MvD7CIP10 zUo_&n4qFR1#mv}vrubpeh?C;`qJ~TlTann}NAk5dH6TW0r4~aAnIJ5F@PM56mNu`3 zT8@S5Gbx<}q#3?r0pjQu8=Bal8_LE6y{I<4^^PDvdK~K;tBt!-5(pRt4&W^Bj=xwb!+DV$Zs$ zXN?l6*a($Lih(0Bi2V<;Qq?djMSziSK)e_bYtYG6xC+vdwB{_N|Pd4pH5rQEvu~m#i__92H zr0&(j6rT)oGD}(B(ET&$t2PodmN%90APa377%&aEe6Prp_hcr6h>a>>n1CgSSMaL* z_FnpN%!C)SIWr|wKHSj`**;ERRtu1RwYZ)Kf0IV`Ycd(7hYcJa7{tu>15keydaqZS zJdRr6IWSUYm}Uxh1?FGm?R)A;EoEc^JxRxS?XDTWQQ#d52yIzlcF=|AI^JLN1GYL+y|rs^U=e$szuT2>u^GFshI%& z;S)x|g;i-z)#C;R9}mevGoZb2TQ92i4paqzqt_xgO@#6hEXTdL3QIN6@S)T2VLjiq z48vw4SRR3z;F4;0Q<3|o>4!9g0K&023iq0>YhPMDzp02jU0+@okbNn3QFx&by>MA| zV^fKHrt6Cvh$5aGHjj0Q@yjl+9$OUY+h5-+cOx1w|FBCo;)LT&f3K(}14S0%ngO{` zNqFv_6NxLUOH}5J8Qp}c&Jyhk(sZK$a9tq41kNJ7ps>xW`pZf80DW{F>k1bGHpP@% zwx3>ImAAhM90q`h!~$zz!7%0iHPxIAZCEIE;v#`1@CQ97{z&zka@#Jz1YR zHS6wN-`-Koh(N*8ebh6PD%|vj>H=xLh3}U8t_p|%FVOdB&csV^WWLCqB)dlHV{tdE z49Xo6iXG0x-Bgv=PuBegEEo#i522798&o8#%jD<-^?i#r6ZR533a)~pbA0#a>ide^ z&XM}K1{>PPT+(ui50ge8M-uY7XtPOm*T;{>U54XEO@yC7lE@q{tNZH5*3sa$hb;tT zfJ_bNma1H`pYGNPhQRxxS}e!MoAf{VZ_+>YZ_>9`*4$u#&N50M60pQ@} zU7WQ~SLLV!u?%oX1}Fijgs*HF)@Q1RJAVsPaKTc2(owFD?-wb15hfrT^Ny;f-U_cmuIioBpR2a!x9ZK!N!eA&nV)7W<6#9xvN4SfbYm`hmCCrk%tnK{Xqx7@Yc`0-z<){YUq zn3~>*Xmj!9tJPHlA-5?5p_vJx0ZVV%{3iejC&^var3+5q7<{mFnfk*&AR-rSZriDE zvoO}(a-OZ9Tw@{=$b15K5fQ1#`&yBV#>WVHL72iPgIT}cUz%OQP!$A9T{wbo$jH&B zRPK?R9er};n{un8&!~J$-tXu$Yv^>~7M>4|dJ=o$-YttqOsV|GmQ^G6u6%pT`6K33 zzO&^^BlfL)cgsT~W>mf>zvSxECVsyXh~N`d(XPg-gaK>p1))KKjpKt^s8!^ zYMfPE4+ur5W%md2g4y~kR3mfBZUcPAD(}APLfJQ)waRxCdJzi^I!TQU8U&vqa>>4_LAOqA2)yFWp&%{NMx%qNtq7-p=IfHyFH zT0OML&BtIN!ou)iiQv28u6|ZMqR7q1fX54I0K5r6b%AUAm+YCVx7REuv{hIgXo@az zqn{TNM~C4*m4&ty0`vY`j++NiGw_;Js9C_{d$wskDBnL%@2SNQqxgl81lTW($1miz zd3dWTP>&1FHpCeruK3Hm?YKhmsxY#6s5WwXSf6u&!`+NBR*+INc6*+<1!)<~(dgTArL8KdOdKB6yhSq1je_NgZ ze-7!q^OAL)JsZ2l1s5=(P>gt!Q6yp?1Q9#Gt1gyX+w=qX?m4HYSKynj0d(UsD_Sun z)*s?(O={C;)k3&uVh*4q6^JyW-^*v(^n)Qm@>jsCdawmP${dxaygzH3yzLPE;4-MC z788#VrW>{&YA}UKc}z87*I*D}1vzg*zzUZpeOx8al*i2{)`mw5T(VLEISK6f6YOZ! z+sSG9GIW}aLMR88Dorf|8OffM7cS842BymZC_t{GMu6f^RhQ>=TV7Mbw%o77S=3)@L|7mw!(T=jnb(x8V;-^ zkcogDaK>}_;N_@=`d$sfvnC{`0Q&M@$NU3ItC;eQX(vq*%E@4xW6p)3mm>4|GN0g+ znl>WVxF0BEpOXZT4u7n!QRd+Qsd>89@GQ9a1g*#{5wcHTs5bHYz)i>?<$(~df!hiH zRBiSuY)D7nhO;M}0mCd_lv5Y!r=U)NB!VCYNISw0-Yzd+1nL0f5h{bsCNzeTabBw4 zc&ly>I;BuQC=bIhIhi1`z<#-UhMc;;zPG$;fBNZKD%6U$$W(a5NdH`QShQ<224$m2YHE}jNh5E_Q4nHkw(@G3f3(dUKIx4=5e&jt9{DVujk z_3$EBDNJ?DzzjJC!|>sG1LL)-3V!WdBVxz`doiKt!1P{c#tS}Fg)uB7$u}@%%F-m3 z`4@za+}VZB2W1j4^8%s~c$y-3L*6wXqmO>g2t=AuU|?Od@UQaA3zc7za0)556iNX3 zi1csOE;)S>25Zc6eR%_MVOuHn6yh_x#^32jSD<*=ydM~HwFCsw9nM?DZ_*EP%YGnC zMC~B$;1lqD-jW*vJS+!;1R4c10u>C?{73b$;(>FH&?h%sFJ{F<*c%QMrLp&R^~ix- zt(Z?{41W&XMf?#z#rkLUxTYfcq^g(@Y&S#{EP`po?-Y2yo?zN+3=<(+73wkGEz)ZU z1E)sN9mp9+4U+fdtM6l7krNv-39v*s3_5#r%aU9oihdAPNEJy51I>)P;=-20i(J(O zq&~(A@Ei~@fXuNjYU!2HF@zi+I}&Hk2h(5>@g`X-;=>oWtSNF&Jc=noTjO6bry)j| zSnee)Ym40PABC5Py@{aw*b^u#4sl)D(pBWnI$A%p!O0BV*+7Nf5fdl6tYv+XyY*;& zQG>k{A&v<^m(u}>ae2#zB6rj=I>9Q=5&+pzzQnRP6>vq1Ty>1Tnnh7=0uDC1E`(^j zvc)Mzdh1^L9!P)2{%6y0^ajo@yQ(G3bEmIo+h8is>D;I|X!MTiI4p|E*_|-Dx@CS| zY`=|NU`x@yPNb`I$B+=QBIwk4CYKvK|z_>X-{OD#WV7mL*$8`?K+I2*(J$(B7ieYd(ed-tgpEx$=c zeiUzO|1E$@9c8?=r8Zc!|CruwE&CS0A?K~n#wSutE4BvON(1nMYFTLG_LlslPYwJ9 zNy*VHNEVO2ep+69if+`^@hzA=d|micAjM}|^5X?cA*LBJjSJ7Vu#C^j+fUUGnAp>+ z*a_B~^9WEAKE@x-cn8vY(5d=<6FBLb=bK;%Vtg^$QE*P+bE@)e@V1}AZi8q61keq4 z$|p~Sk>_XuOfOa&eMlhD{Cvw&`IFuC{bX>OK6)|US%SJl0ST9=z4?Wf*-gVfJU`r- zGXz~xO4kr#=md@@LCK@i#TVtNr|AoDzD$l%A)lmkLM8c9i?u*?R<;`YWOXPF;OHuj zlh{IJd|7TgO+VlmW$!~4R~>wV-wVIeGJ+Gu1bn}me@VK|xvOO)DT=wdyGUB!^|h8g z+S@m#9cT4+*k5niy}f { Idle, Validator, Nominator(Vec), } + /// A destination account for payment. #[derive(PartialEq, Eq, Copy, Clone, Encode, Decode)] #[cfg_attr(feature = "std", derive(Debug))] @@ -159,7 +166,7 @@ pub struct Exposure { pub others: Vec>, } -type BalanceOf = <::Currency as ArithmeticType>::Type; +type BalanceOf = <::Currency as ArithmeticType>::Type; pub trait Trait: system::Trait + session::Trait { /// The staking balance. @@ -230,7 +237,7 @@ decl_storage! { // // Every era change, this will be appended with the trie root of the contents of `Stakers`, and the oldest // entry removed down to a specific number of entries (probably around 90 for a 3 month history). -// pub HistoricalStakers get(historical_stakers): map T::BlockNumber => Option; + // pub HistoricalStakers get(historical_stakers): map T::BlockNumber => Option; /// The current era index. pub CurrentEra get(current_era) config(): T::BlockNumber; @@ -253,7 +260,7 @@ decl_storage! { /// /// This is used to derive rewards and punishments. pub SlotStake get(slot_stake) build(|config: &GenesisConfig| { - config.stakers.iter().map(|&(_, _, value)| value).min().unwrap_or_default() + config.stakers.iter().map(|&(_, _, value, _)| value).min().unwrap_or_default() }): BalanceOf; /// The number of times a given validator has been reported offline. This gets decremented by one each era that passes. @@ -266,14 +273,31 @@ decl_storage! { pub RecentlyOffline get(recently_offline): Vec<(T::AccountId, T::BlockNumber, u32)>; } add_extra_genesis { - config(stakers): Vec<(T::AccountId, T::AccountId, BalanceOf)>; + config(stakers): Vec<(T::AccountId, T::AccountId, BalanceOf, StakerStatus)>; build(|storage: &mut primitives::StorageOverlay, _: &mut primitives::ChildrenStorageOverlay, config: &GenesisConfig| { with_storage(storage, || { - for &(ref stash, ref controller, balance) in &config.stakers { - assert!(T::Currency::free_balance(&stash) >= balance); - let _ = >::bond(T::Origin::from(Some(stash.clone()).into()), T::Lookup::unlookup(controller.clone()), balance, RewardDestination::Staked); - let _ = >::validate(T::Origin::from(Some(controller.clone()).into()), Default::default()); + for &(ref stash, ref controller, balance, ref status) in &config.stakers { + let _ = >::bond( + T::Origin::from(Some(stash.clone()).into()), + T::Lookup::unlookup(controller.clone()), + balance, + RewardDestination::Staked + ); + let _ = match status { + StakerStatus::Validator => { + >::validate( + T::Origin::from(Some(controller.clone()).into()), + Default::default() + ) + }, StakerStatus::Nominator(votes) => { + >::nominate( + T::Origin::from(Some(controller.clone()).into()), + votes.iter().map(|l| {T::Lookup::unlookup(l.clone())}).collect() + ) + }, _ => Ok(()) + }; } + >::select_validators(); }); }); @@ -512,14 +536,13 @@ impl Module { fn slash_validator(v: &T::AccountId, slash: BalanceOf) { // The exposure (backing stake) information of the validator to be slashed. let exposure = Self::stakers(v); - // The amount we are actually going to slash (can't be bigger than thair total exposure) + // The amount we are actually going to slash (can't be bigger than their total exposure) let slash = slash.min(exposure.total); // The amount we'll slash from the validator's stash directly. let own_slash = exposure.own.min(slash); let own_slash = own_slash - T::Currency::slash(v, own_slash).unwrap_or_default(); // The amount remaining that we can't slash from the validator, that must be taken from the nominators. let rest_slash = slash - own_slash; - if !rest_slash.is_zero() { // The total to be slashed from the nominators. let total = exposure.total - exposure.own; @@ -640,56 +663,27 @@ impl Module { /// @returns the new SlotStake value. fn select_validators() -> BalanceOf { // Map of (would-be) validator account to amount of stake backing it. + + let rounds = || >::get() as usize; + let validators = || >::enumerate(); + let nominators = || >::enumerate(); + let stash_of = |w| Self::stash_balance(&w); + let min_validator_count = Self::minimum_validator_count() as usize; + let elected_candidates = phragmen::elect::( + rounds, + validators, + nominators, + stash_of, + min_validator_count + ); - // First, we pull all validators, together with their stash balance into a Vec (cpu=O(V), mem=O(V)) - let mut candidates = >::enumerate() - .map(|(who, _)| { - let stash_balance = Self::stash_balance(&who); - (who, Exposure { total: stash_balance, own: stash_balance, others: vec![] }) - }) - .collect::>)>>(); - // Second, we sort by accountid (cpu=O(V.log(V))) - candidates.sort_unstable_by_key(|i| i.0.clone()); - // Third, iterate through nominators and add their balance to the first validator in their approval - // list. cpu=O(N.log(V)) - for (who, nominees) in >::enumerate() { - // For this trivial nominator mapping, we just assume that nominators always - // have themselves assigned to the first validator in their list. - if nominees.is_empty() { - // Not possible, but we protect against it anyway. - continue; - } - if let Ok(index) = candidates.binary_search_by(|i| i.0.cmp(&nominees[0])) { - let stash_balance = Self::stash_balance(&who); - candidates[index].1.total += stash_balance; - candidates[index].1.others.push(IndividualExposure { who, value: stash_balance }); - } - } - - // Get the new staker set by sorting by total backing stake and truncating. - // cpu=O(V.log(s)) average, O(V.s) worst. - let count = Self::validator_count() as usize; - let candidates = if candidates.len() <= count { - candidates.sort_unstable_by(|a, b| b.1.total.cmp(&a.1.total)); - candidates - } else { - candidates.into_iter().fold(vec![], |mut winners: Vec<(T::AccountId, Exposure>)>, entry| { - if let Err(insert_point) = winners.binary_search_by_key(&entry.1.total, |i| i.1.total) { - if winners.len() < count { - winners.insert(insert_point, entry) - } else { - if insert_point > 0 { - // Big enough to be considered: insert at beginning and swap up to relevant point. - winners[0] = entry; - for i in 0..(insert_point - 1) { - winners.swap(i, i + 1) - } - } - } - } - winners - }) - }; + // Figure out the minimum stake behind a slot. + let slot_stake = elected_candidates + .iter() + .min_by_key(|c| c.exposure.total) + .map(|c| c.exposure.total) + .unwrap_or_default(); + >::put(&slot_stake); // Clear Stakers and reduce their slash_count. for v in >::validators().iter() { @@ -700,19 +694,16 @@ impl Module { } } - // Figure out the minimum stake behind a slot. - let slot_stake = candidates.last().map(|i| i.1.total).unwrap_or_default(); - >::put(&slot_stake); - // Populate Stakers. - for (who, exposure) in &candidates { - >::insert(who, exposure); + for candidate in &elected_candidates { + >::insert(candidate.who.clone(), candidate.exposure.clone()); } + // Set the new validator set. >::set_validators( - &candidates.into_iter().map(|i| i.0).collect::>() + &elected_candidates.into_iter().map(|i| i.who).collect::>() ); - + slot_stake } diff --git a/substrate/srml/staking/src/mock.rs b/substrate/srml/staking/src/mock.rs index 2934022a07..6a76f350ef 100644 --- a/substrate/srml/staking/src/mock.rs +++ b/substrate/srml/staking/src/mock.rs @@ -23,7 +23,10 @@ use primitives::testing::{Digest, DigestItem, Header, UintAuthorityId, ConvertUi use substrate_primitives::{H256, Blake2Hasher}; use runtime_io; use srml_support::impl_outer_origin; -use crate::{GenesisConfig, Module, Trait}; +use crate::{GenesisConfig, Module, Trait, StakerStatus}; + +// The AccountId alias in this test module. +pub type AccountIdType = u64; impl_outer_origin!{ pub enum Origin for Test {} @@ -44,7 +47,7 @@ impl system::Trait for Test { type Hash = H256; type Hashing = ::primitives::traits::BlakeTwo256; type Digest = Digest; - type AccountId = u64; + type AccountId = AccountIdType; type Lookup = IdentityLookup; type Header = Header; type Event = (); @@ -78,17 +81,25 @@ pub struct ExtBuilder { current_era: u64, monied: bool, reward: u64, + validator_pool: bool, + nominate: bool, + validator_count: u32, + minimum_validator_count: u32, } impl Default for ExtBuilder { fn default() -> Self { Self { existential_deposit: 0, - session_length: 3, - sessions_per_era: 3, + session_length: 1, + sessions_per_era: 1, current_era: 0, monied: true, reward: 10, + validator_pool: false, + nominate: true, + validator_count: 2, + minimum_validator_count: 0, } } } @@ -118,6 +129,24 @@ impl ExtBuilder { self.reward = reward; self } + pub fn validator_pool(mut self, validator_pool: bool) -> Self { + // NOTE: this should only be set to true with monied = false. + self.validator_pool = validator_pool; + self + } + pub fn nominate(mut self, nominate: bool) -> Self { + // NOTE: this only sets a dummy nominator for tests that want 10 and 20 (default validators) to be chosen by default. + self.nominate = nominate; + self + } + pub fn validator_count(mut self, count: u32) -> Self { + self.validator_count = count; + self + } + pub fn minimum_validator_count(mut self, count: u32) -> Self { + self.minimum_validator_count = count; + self + } pub fn build(self) -> runtime_io::TestExternalities { let (mut t, mut c) = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if self.existential_deposit > 0 { @@ -131,7 +160,8 @@ impl ExtBuilder { }.assimilate_storage(&mut t, &mut c); let _ = session::GenesisConfig::{ session_length: self.session_length, - validators: vec![10, 20], + // NOTE: if config.nominate == false then 100 is also selected in the initial round. + validators: if self.validator_pool { vec![10, 20, 30, 40] } else { vec![10, 20] }, keys: vec![], }.assimilate_storage(&mut t, &mut c); let _ = balances::GenesisConfig::{ @@ -145,13 +175,23 @@ impl ExtBuilder { (10, balance_factor), (11, balance_factor * 1000), (20, balance_factor), - (21, balance_factor * 2000) + (21, balance_factor * 2000), + (100, 2000 * balance_factor), + (101, 2000 * balance_factor), ] } else { - vec![(1, 10 * balance_factor), (2, 20 * balance_factor), (3, 300 * balance_factor), (4, 400 * balance_factor)] + vec![ + (1, 10 * balance_factor), (2, 20 * balance_factor), + (3, 300 * balance_factor), (4, 400 * balance_factor) + ] } } else { - vec![(10, balance_factor), (11, balance_factor * 1000), (20, balance_factor), (21, balance_factor * 2000)] + vec![ + (10, balance_factor), (11, balance_factor * 10), + (20, balance_factor), (21, balance_factor * 20), + (30, balance_factor), (31, balance_factor * 30), + (40, balance_factor), (41, balance_factor * 40) + ] }, existential_deposit: self.existential_deposit, transfer_fee: 0, @@ -161,9 +201,25 @@ impl ExtBuilder { let _ = GenesisConfig::{ sessions_per_era: self.sessions_per_era, current_era: self.current_era, - stakers: vec![(11, 10, balance_factor * 1000), (21, 20, balance_factor * 2000)], - validator_count: 2, - minimum_validator_count: 0, + stakers: if self.validator_pool { + vec![ + (11, 10, balance_factor * 1000, StakerStatus::::Validator), + (21, 20, balance_factor * 2000, StakerStatus::::Validator), + (31, 30, balance_factor * 3000, if self.validator_pool { StakerStatus::::Validator } else { StakerStatus::::Idle }), + (41, 40, balance_factor * 4000, if self.validator_pool { StakerStatus::::Validator } else { StakerStatus::::Idle }), + // nominator + (101, 100, balance_factor * 500, if self.nominate { StakerStatus::::Nominator(vec![10, 20]) } else { StakerStatus::::Nominator(vec![]) }) + ] + } else { + vec![ + (11, 10, balance_factor * 1000, StakerStatus::::Validator), + (21, 20, balance_factor * 2000, StakerStatus::::Validator), + // nominator + (101, 100, balance_factor * 500, if self.nominate { StakerStatus::::Nominator(vec![10, 20]) } else { StakerStatus::::Nominator(vec![]) }) + ] + }, + validator_count: self.validator_count, + minimum_validator_count: self.minimum_validator_count, bonding_duration: self.sessions_per_era * self.session_length * 3, session_reward: Perbill::from_millionths((1000000 * self.reward / balance_factor) as u32), offline_slash: if self.monied { Perbill::from_percent(40) } else { Perbill::zero() }, diff --git a/substrate/srml/staking/src/phragmen.rs b/substrate/srml/staking/src/phragmen.rs new file mode 100644 index 0000000000..bdaed1fee9 --- /dev/null +++ b/substrate/srml/staking/src/phragmen.rs @@ -0,0 +1,223 @@ +// Copyright 2017-2019 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Rust implementation of the Phragmén election algorithm. + +use rstd::{prelude::*}; +use primitives::Perquintill; +use primitives::traits::{Zero, As}; +use parity_codec::{HasCompact, Encode, Decode}; +use crate::{Exposure, BalanceOf, Trait, ValidatorPrefs, IndividualExposure}; + +// Wrapper around validation candidates some metadata. +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug))] +pub struct Candidate { + // The validator's account + pub who: AccountId, + // Exposure struct, holding info about the value that the validator has in stake. + pub exposure: Exposure, + // Accumulator of the stake of this candidate based on received votes. + approval_stake: Balance, + // Intermediary value used to sort candidates. + // See Phragmén reference implementation. + pub score: Perquintill, +} + +// Wrapper around the nomination info of a single nominator for a group of validators. +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug))] +pub struct Nominations { + // The nominator's account. + who: AccountId, + // List of validators proposed by this nominator. + nominees: Vec>, + // the stake amount proposed by the nominator as a part of the vote. + // Same as `nom.budget` in Phragmén reference. + stake: Balance, + // Incremented each time a nominee that this nominator voted for has been elected. + load: Perquintill, +} + +// Wrapper around a nominator vote and the load of that vote. +// Referred to as 'edge' in the Phragmén reference implementation. +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug))] +pub struct Vote { + // Account being voted for + who: AccountId, + // Load of this vote. + load: Perquintill, + // Final backing stake of this vote. + backing_stake: Balance +} + +/// Perform election based on Phragmén algorithm. +/// +/// Reference implementation: https://github.com/w3f/consensus +/// +/// @returns a vector of elected candidates +pub fn elect( + get_rounds: FR, + get_validators: FV, + get_nominators: FN, + stash_of: FS, + minimum_validator_count: usize, + ) -> Vec>> where + FR: Fn() -> usize, + FV: Fn() -> Box>) + >>, + FN: Fn() -> Box) + >>, + FS: Fn(T::AccountId) -> BalanceOf, +{ + let rounds = get_rounds(); + let mut elected_candidates = vec![]; + + // 1- Pre-process candidates and place them in a container + let mut candidates = get_validators().map(|(who, _)| { + let stash_balance = stash_of(who.clone()); + Candidate { + who, + approval_stake: BalanceOf::::zero(), + score: Perquintill::zero(), + exposure: Exposure { total: stash_balance, own: stash_balance, others: vec![] }, + } + }).collect::>>>(); + + // Just to be used when we are below minimum validator count + let original_candidates = candidates.clone(); + + // 2- Collect the nominators with the associated votes. + // Also collect approval stake along the way. + let mut nominations = get_nominators().map(|(who, nominees)| { + let nominator_stake = stash_of(who.clone()); + for n in &nominees { + candidates.iter_mut().filter(|i| i.who == *n).for_each(|c| { + c.approval_stake += nominator_stake; + }); + } + + Nominations { + who, + nominees: nominees.into_iter() + .map(|n| Vote {who: n, load: Perquintill::zero(), backing_stake: BalanceOf::::zero()}) + .collect::>>>(), + stake: nominator_stake, + load : Perquintill::zero(), + } + }).collect::>>>(); + + // 3- optimization: + // Candidates who have 0 stake => have no votes or all null-votes. Kick them out not. + let mut candidates = candidates.into_iter().filter(|c| c.approval_stake > BalanceOf::::zero()) + .collect::>>>(); + + // 4- If we have more candidates then needed, run Phragmén. + if candidates.len() > rounds { + // Main election loop + for _round in 0..rounds { + // Loop 1: initialize score + for nominaotion in &nominations { + for vote in &nominaotion.nominees { + let candidate = &vote.who; + if let Some(c) = candidates.iter_mut().find(|i| i.who == *candidate) { + let approval_stake = c.approval_stake; + c.score = Perquintill::from_xth(approval_stake.as_()); + } + } + } + // Loop 2: increment score. + for nominaotion in &nominations { + for vote in &nominaotion.nominees { + let candidate = &vote.who; + if let Some(c) = candidates.iter_mut().find(|i| i.who == *candidate) { + let approval_stake = c.approval_stake; + let temp = + nominaotion.stake.as_() + * *nominaotion.load + / approval_stake.as_(); + c.score = Perquintill::from_quintillionths(*c.score + temp); + } + } + } + + // Find the best + let (winner_index, _) = candidates.iter().enumerate().min_by_key(|&(_i, c)| *c.score) + .expect("candidates length is checked to be >0; qed"); + + // loop 3: update nominator and vote load + let winner = candidates.remove(winner_index); + for n in &mut nominations { + for v in &mut n.nominees { + if v.who == winner.who { + v.load = + Perquintill::from_quintillionths( + *winner.score + - *n.load + ); + n.load = winner.score; + } + } + } + + elected_candidates.push(winner); + + } // end of all rounds + + // 4.1- Update backing stake of candidates and nominators + for n in &mut nominations { + for v in &mut n.nominees { + // if the target of this vote is among the winners, otherwise let go. + if let Some(c) = elected_candidates.iter_mut().find(|c| c.who == v.who) { + v.backing_stake = as As>::sa( + n.stake.as_() + * *v.load + / *n.load + ); + c.exposure.total += v.backing_stake; + // Update IndividualExposure of those who nominated and their vote won + c.exposure.others.push( + IndividualExposure {who: n.who.clone(), value: v.backing_stake } + ); + } + } + } + } else { + if candidates.len() > minimum_validator_count { + // if we don't have enough candidates, just choose all that have some vote. + elected_candidates = candidates; + // `Exposure.others` still needs an update + for n in &mut nominations { + for v in &mut n.nominees { + if let Some(c) = elected_candidates.iter_mut().find(|c| c.who == v.who) { + c.exposure.total += n.stake; + c.exposure.others.push( + IndividualExposure {who: n.who.clone(), value: n.stake } + ); + } + } + } + } else { + // if we have less than minimum, use the previous validator set. + elected_candidates = original_candidates; + } + } + + elected_candidates +} \ No newline at end of file diff --git a/substrate/srml/staking/src/tests.rs b/substrate/srml/staking/src/tests.rs index c3be7609b0..7921d7f313 100644 --- a/substrate/srml/staking/src/tests.rs +++ b/substrate/srml/staking/src/tests.rs @@ -20,6 +20,8 @@ use super::*; use runtime_io::with_externalities; +use phragmen; +use primitives::Perquintill; use srml_support::{assert_ok, assert_noop, EnumerableStorageMap}; use mock::{Balances, Session, Staking, System, Timestamp, Test, ExtBuilder, Origin}; use srml_support::traits::Currency; @@ -27,9 +29,8 @@ use srml_support::traits::Currency; #[test] fn basic_setup_works() { // Verifies initial conditions of mock - // TODO: Verify this check is comprehensive - // - Session Per Era, Session Reward - with_externalities(&mut ExtBuilder::default().build(), + with_externalities(&mut ExtBuilder::default() + .build(), || { assert_eq!(Staking::bonded(&11), Some(10)); // Account 11 is stashed and locked, and account 10 is the controller assert_eq!(Staking::bonded(&21), Some(20)); // Account 21 is stashed and locked, and account 20 is the controller @@ -48,13 +49,33 @@ fn basic_setup_works() { (10, ValidatorPrefs { unstake_threshold: 3, validator_payment: 0 }) ]); + // Account 100 is the default nominator + assert_eq!(Staking::ledger(100), Some(StakingLedger { stash: 101, total: 500, active: 500, unlocking: vec![] })); + assert_eq!(Staking::nominators(100), vec![10, 20]); + // Account 10 is exposed by 100 * balance_factor from their own stash in account 11 - assert_eq!(Staking::stakers(10), Exposure { total: 1000, own: 1000, others: vec![] }); - assert_eq!(Staking::stakers(20), Exposure { total: 2000, own: 2000, others: vec![] }); + assert_eq!(Staking::stakers(10), Exposure { total: 1500, own: 1000, others: vec![ IndividualExposure { who: 100, value: 500 }] }); + assert_eq!(Staking::stakers(20), Exposure { total: 2500, own: 2000, others: vec![ IndividualExposure { who: 100, value: 500 }] }); + + // The number of validators required. + assert_eq!(Staking::validator_count(), 2); + + // Initial Era and session + assert_eq!(Staking::current_era(), 0); + assert_eq!(Session::current_index(), 0); + + // initial rewards + assert_eq!(Staking::current_session_reward(), 10); + + // initial slot_stake + assert_eq!(Staking::slot_stake(), 1500); + + // initial slash_count of validators + assert_eq!(Staking::slash_count(&10), 0); + assert_eq!(Staking::slash_count(&20), 0); }); } - #[test] fn no_offline_should_work() { // Test the staking module works when no validators are offline @@ -83,7 +104,7 @@ fn invulnerability_should_work() { assert_ok!(Staking::set_invulnerables(vec![10])); // Give account 10 some funds Balances::set_free_balance(&10, 70); - // There is no slash grade period + // There is no slash grace -- slash immediately. assert_eq!(Staking::offline_slash_grace(), 0); // Account 10 has not been slashed assert_eq!(Staking::slash_count(&10), 0); @@ -101,6 +122,7 @@ fn invulnerability_should_work() { assert_eq!(Balances::free_balance(&10), 70); assert!(>::exists(&10)); // New era not being forced + // NOTE: new era is always forced once slashing happens -> new validators need to be chosen. assert!(Staking::forcing_new_era().is_none()); }); } @@ -176,16 +198,98 @@ fn offline_grace_should_delay_slashing() { } +#[test] +fn max_unstake_threshold_works() { + // Tests that max_unstake_threshold gets used when prefs.unstake_threshold is large + with_externalities(&mut ExtBuilder::default().build(), || { + const MAX_UNSTAKE_THRESHOLD: u32 = 10; + // Two users with maximum possible balance + Balances::set_free_balance(&10, u64::max_value()); + Balances::set_free_balance(&20, u64::max_value()); + + // Give them full exposer as a staker + >::insert(&10, Exposure { total: u64::max_value(), own: u64::max_value(), others: vec![]}); + >::insert(&20, Exposure { total: u64::max_value(), own: u64::max_value(), others: vec![]}); + + // Check things are initialized correctly + assert_eq!(Balances::free_balance(&10), u64::max_value()); + assert_eq!(Balances::free_balance(&20), u64::max_value()); + assert_eq!(Balances::free_balance(&10), Balances::free_balance(&20)); + assert_eq!(Staking::offline_slash_grace(), 0); + assert_eq!(Staking::current_offline_slash(), 20); + // Account 10 will have max unstake_threshold + assert_ok!(Staking::validate(Origin::signed(10), ValidatorPrefs { + unstake_threshold: MAX_UNSTAKE_THRESHOLD, + validator_payment: 0, + })); + // Account 20 could not set their unstake_threshold past 10 + assert_noop!(Staking::validate(Origin::signed(20), ValidatorPrefs { + unstake_threshold: 11, + validator_payment: 0}), + "unstake threshold too large" + ); + // Give Account 20 unstake_threshold 11 anyway, should still be limited to 10 + >::insert(20, ValidatorPrefs { + unstake_threshold: 11, + validator_payment: 0, + }); + + // Make slot_stake really large, as to not affect punishment curve + >::put(u64::max_value()); + // Confirm `slot_stake` is greater than exponential punishment, else math below will be different + assert!(Staking::slot_stake() > 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); + + // Report each user 1 more than the max_unstake_threshold + Staking::on_offline_validator(10, MAX_UNSTAKE_THRESHOLD as usize + 1); + Staking::on_offline_validator(20, MAX_UNSTAKE_THRESHOLD as usize + 1); + + // Show that each balance only gets reduced by 2^max_unstake_threshold + assert_eq!(Balances::free_balance(&10), u64::max_value() - 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); + assert_eq!(Balances::free_balance(&20), u64::max_value() - 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); + }); +} + +#[test] +fn slashing_does_not_cause_underflow() { + // Tests that slashing more than a user has does not underflow + with_externalities(&mut ExtBuilder::default().build(), || { + // One user with less than `max_value` will test underflow does not occur + Balances::set_free_balance(&10, 1); + + // Verify initial conditions + assert_eq!(Balances::free_balance(&10), 1); + assert_eq!(Staking::offline_slash_grace(), 0); + + // Set validator preference so that 2^unstake_threshold would cause overflow (greater than 64) + >::insert(10, ValidatorPrefs { + unstake_threshold: 10, + validator_payment: 0, + }); + + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + + // Should not panic + Staking::on_offline_validator(10, 100); + // Confirm that underflow has not occurred, and account balance is set to zero + assert_eq!(Balances::free_balance(&10), 0); + }); +} + + #[test] fn rewards_should_work() { - // should check that: - // 1) rewards get recorded per session - // 2) rewards get paid per Era - // 3) (bonus) Check that nominators are also rewarded - with_externalities(&mut ExtBuilder::default().build(), + // should check that: + // * rewards get recorded per session + // * rewards get paid per Era + // * Check that nominators are also rewarded + with_externalities(&mut ExtBuilder::default() + .session_length(3) + .sessions_per_era(3) + .build(), || { let delay = 2; - // this test is only in the scope of one era. Since this variable changes + // this test is only in the scope of one era. Since this variable changes // at the last block/new era, we'll save it. let session_reward = 10; @@ -202,17 +306,17 @@ fn rewards_should_work() { assert_eq!(Staking::current_session_reward(), 10); // check the balance of a validator accounts. - assert_eq!(Balances::total_balance(&10), 1); + assert_eq!(Balances::total_balance(&10), 1); // and the nominator (to-be) - assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&2), 20); // add a dummy nominator. // NOTE: this nominator is being added 'manually'. a Further test (nomination_and_reward..) will add it via '.nominate()' >::insert(&10, Exposure { own: 500, // equal division indicates that the reward will be equally divided among validator and nominator. total: 1000, - others: vec![IndividualExposure {who: 2, value: 500 }] - }); + others: vec![IndividualExposure {who: 2, value: 500 }] + }); >::insert(&2, RewardDestination::Controller); @@ -220,7 +324,7 @@ fn rewards_should_work() { // Block 3 => Session 1 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5); // on time. - Session::check_rotate_session(System::block_number()); // QUESTIONS: why this matters ? + Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 1); @@ -228,7 +332,7 @@ fn rewards_should_work() { assert_eq!(Staking::current_session_reward(), session_reward); assert_eq!(Staking::current_era_reward(), session_reward); - block = 6; // Block 6 => Session 2 => Era 0 + block = 6; // Block 6 => Session 2 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5 + delay); // a little late. Session::check_rotate_session(System::block_number()); @@ -255,9 +359,13 @@ fn rewards_should_work() { #[test] fn multi_era_reward_should_work() { // should check that: - // The value of current_session_reward is set at the end of each era, based on - // slot_stake and session_reward. Check and verify this. - with_externalities(&mut ExtBuilder::default().build(), + // The value of current_session_reward is set at the end of each era, based on + // slot_stake and session_reward. Check and verify this. + with_externalities(&mut ExtBuilder::default() + .session_length(3) + .sessions_per_era(3) + .nominate(false) + .build(), || { let delay = 0; let session_reward = 10; @@ -275,7 +383,7 @@ fn multi_era_reward_should_work() { // Block 3 => Session 1 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5); // on time. - Session::check_rotate_session(System::block_number()); // QUESTIONS: why this matters ? + Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 1); @@ -283,7 +391,7 @@ fn multi_era_reward_should_work() { assert_eq!(Staking::current_session_reward(), session_reward); assert_eq!(Staking::current_era_reward(), session_reward); - block = 6; // Block 6 => Session 2 => Era 0 + block = 6; // Block 6 => Session 2 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5 + delay); // a little late. Session::check_rotate_session(System::block_number()); @@ -315,6 +423,7 @@ fn multi_era_reward_should_work() { // intermediate test. assert_eq!(Staking::current_era_reward(), 2*new_session_reward); + // new era is triggered here. block=18;System::set_block_number(block);Timestamp::set_timestamp(block*5);Session::check_rotate_session(System::block_number()); // pay time @@ -324,24 +433,33 @@ fn multi_era_reward_should_work() { #[test] fn staking_should_work() { - // should test: + // should test: // * new validators can be added to the default set - // * new ones will be chosen per era (+ based on phragmen) - // * either one can unlock the stash and back-down from being a validator. - with_externalities(&mut ExtBuilder::default().session_length(1).build(), || { + // * new ones will be chosen per era + // * either one can unlock the stash and back-down from being a validator via `chill`ing. + with_externalities(&mut ExtBuilder::default() + .sessions_per_era(3) + .nominate(false) + .build(), + || { assert_eq!(Staking::era_length(), 3); - assert_eq!(Staking::validator_count(), 2); // remember + compare this along with the test. assert_eq!(Session::validators(), vec![20, 10]); assert_ok!(Staking::set_bonding_duration(2)); assert_eq!(Staking::bonding_duration(), 2); - // --- Block 1: + // put some money in account that we'll use. + for i in 1..5 { Balances::set_free_balance(&i, 1000); } + + // bond one account pair and state interest in nomination. + // this is needed to keep 10 and 20 in the validator list with phragmen + assert_ok!(Staking::bond(Origin::signed(1), 2, 500, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![20, 4])); + + // --- Block 1: System::set_block_number(1); - // give the man some coins - Balances::set_free_balance(&3, 3000); - // initial stakers: vec![(11, 10, balance_factor * 100), (21, 20, balance_factor * 200)], - // account 3 controlled by 4. + + // add a new candidate for being a validator. account 3 controlled by 4. assert_ok!(Staking::bond(Origin::signed(3), 4, 1500, RewardDestination::Controller)); // balance of 3 = 3000, stashed = 1500 Session::check_rotate_session(System::block_number()); @@ -350,11 +468,11 @@ fn staking_should_work() { assert_eq!(Session::validators(), vec![20, 10]); - // --- Block 2: + // --- Block 2: System::set_block_number(2); - // Explicitly state the desire to validate for all of them. + // Explicitly state the desire to validate // note that the controller account will state interest as representative of the stash-controller pair. - assert_ok!(Staking::validate(Origin::signed(4), ValidatorPrefs { unstake_threshold: 3, validator_payment: 0 })); + assert_ok!(Staking::validate(Origin::signed(4), ValidatorPrefs::default())); Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 0); @@ -362,12 +480,11 @@ fn staking_should_work() { assert_eq!(Session::validators(), vec![20, 10]); - // --- Block 3: the validators will now change. + // --- Block 3: the validators will now change. System::set_block_number(3); Session::check_rotate_session(System::block_number()); - // TODO: the assertion in the section should be changed to something in sync with how phragmen works. - // for now just check that some arbitrary "two validators" have been chosen. + // 2 only voted for 4 and 20 assert_eq!(Session::validators().len(), 2); assert_eq!(Session::validators(), vec![4, 20]); assert_eq!(Staking::current_era(), 1); @@ -377,7 +494,13 @@ fn staking_should_work() { System::set_block_number(4); // unlock the entire stashed value. + // Note that this will ne be enough to remove 4 as a validator candidate! Staking::unbond(Origin::signed(4), Staking::ledger(&4).unwrap().active).unwrap(); + // explicit chill indicated that 4 no longer wants to be a validator. + Staking::chill(Origin::signed(4)).unwrap(); + + // nominator votes for 10 + assert_ok!(Staking::nominate(Origin::signed(2), vec![20, 10])); Session::check_rotate_session(System::block_number()); // nothing should be changed so far. @@ -385,101 +508,189 @@ fn staking_should_work() { assert_eq!(Staking::current_era(), 1); - // --- Block 5: nothing. 4 is still there. + // --- Block 5: nothing. 4 is still there. System::set_block_number(5); Session::check_rotate_session(System::block_number()); - assert_eq!(Session::validators(), vec![4, 20]); + assert_eq!(Session::validators(), vec![4, 20]); assert_eq!(Staking::current_era(), 1); - // --- Block 6: 4 will be not be a validator as it has nothing in stash. + // --- Block 6: 4 will not be a validator. System::set_block_number(6); Session::check_rotate_session(System::block_number()); - assert_eq!(Session::validators().contains(&4), false); + assert_eq!(Staking::current_era(), 2); + assert_eq!(Session::validators().contains(&4), false); + assert_eq!(Session::validators(), vec![20, 10]); }); } +#[test] +fn less_than_needed_candidates_works() { + // Test the situation where the number of validators are less than `ValidatorCount` but more than + // The expected behavior is to choose all the candidates that have some vote. + with_externalities(&mut ExtBuilder::default() + .minimum_validator_count(1) + .validator_count(3) + .nominate(false) + .validator_pool(true) + .build(), + || { + assert_eq!(Staking::era_length(), 1); + assert_eq!(Staking::validator_count(), 3); + + assert_eq!(Staking::minimum_validator_count(), 1); + assert_eq!(Staking::validator_count(), 3); + + // initial validators + assert_eq!(Session::validators(), vec![40, 30, 20, 10]); + + // only one nominator will exist and it will + assert_ok!(Staking::bond(Origin::signed(1), 2, 500, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 20])); + + // 10 and 20 are now valid candidates. + // trigger era + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 1); + + // both validators will be chosen again. NO election algorithm is even executed. + assert_eq!(Session::validators(), vec![20, 10]); + + // But the exposure is updated in a simple way. Each nominators vote is applied + assert_eq!(Staking::stakers(10).others.iter().map(|e| e.who).collect::>>(), vec![2]); + assert_eq!(Staking::stakers(20).others.iter().map(|e| e.who).collect::>>(), vec![2]); + }); +} + +#[test] +fn no_candidate_emergency_condition() { + // Test the situation where the number of validators are less than `ValidatorCount` and less than + // The expected behavior is to choose all candidates from the previous era. + with_externalities(&mut ExtBuilder::default() + .minimum_validator_count(1) + .validator_count(3) + .nominate(false) + .validator_pool(true) + .build(), + || { + assert_eq!(Staking::era_length(), 1); + assert_eq!(Staking::validator_count(), 3); + + assert_eq!(Staking::minimum_validator_count(), 1); + assert_eq!(Staking::validator_count(), 3); + + // initial validators + assert_eq!(Session::validators(), vec![40, 30, 20, 10]); + + // trigger era + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 1); + + // No one nominates => no one has a proper vote => no change + assert_eq!(Session::validators(), vec![40, 30, 20, 10]); + }); +} #[test] fn nominating_and_rewards_should_work() { - // TODO: This should be rewritten and tested with the Phragmen algorithm // For now it tests a functionality which somehow overlaps with other tests: // the fact that the nominator is rewarded properly. + // + // PHRAGMEN OUTPUT: running this test with the reference impl gives: + // + // Votes [('2', 500, ['10', '20', '30']), ('4', 500, ['10', '20', '40'])] + // Sequential Phragmén gives + // 10 is elected with stake 500.0 and score 0.001 + // 20 is elected with stake 500.0 and score 0.002 + // + // 2 has load 0.002 and supported + // 10 with stake 250.0 20 with stake 250.0 30 with stake 0.0 + // 4 has load 0.002 and supported + // 10 with stake 250.0 20 with stake 250.0 40 with stake 0.0 + with_externalities(&mut ExtBuilder::default() - .session_length(1).sessions_per_era(1).build(), + .nominate(false) + .validator_pool(true) + .build(), || { - let session_reward = 10; - let initial_balance = 1000; - assert_eq!(Staking::era_length(), 1); - assert_eq!(Staking::validator_count(), 2); - assert_eq!(Staking::bonding_duration(), 3); - assert_eq!(Session::validators(), vec![20, 10]); + // initial validators + assert_eq!(Session::validators(), vec![40, 30, 20, 10]); // Set payee to controller assert_ok!(Staking::set_payee(Origin::signed(10), RewardDestination::Controller)); assert_ok!(Staking::set_payee(Origin::signed(20), RewardDestination::Controller)); // default reward for the first session. + let session_reward = 10; assert_eq!(Staking::current_session_reward(), session_reward); // give the man some money + let initial_balance = 1000; for i in 1..5 { Balances::set_free_balance(&i, initial_balance); } Balances::set_free_balance(&10, initial_balance); Balances::set_free_balance(&20, initial_balance); - - System::set_block_number(1); // record their balances. for i in 1..5 { assert_eq!(Balances::total_balance(&i), initial_balance); } - // bond two account pairs and state interest in nomination. - // NOTE: in the current naive version only the first vote matters and will be chosen anyhow. - - // 2 will nominate for 10, 10 has 1000 in stash, 500 will be 1/3 of the total 1500 + // 2 will nominate for 10, 20, 30 assert_ok!(Staking::bond(Origin::signed(1), 2, 500, RewardDestination::Controller)); - assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 20])); - // 4 will nominate for 20, 20 has 2000 in stash, 500 will be 1/5 of the total 2500 + assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 20, 30])); + // 4 will nominate for 10, 20, 40 assert_ok!(Staking::bond(Origin::signed(3), 4, 500, RewardDestination::Stash)); - assert_ok!(Staking::nominate(Origin::signed(4), vec![20, 10])); + assert_ok!(Staking::nominate(Origin::signed(4), vec![10, 20, 40])); - + System::set_block_number(1); Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 1); - // validators will not change, since selection currently is actually not dependent on nomination and votes, only stake. + // 10 and 20 have more votes, they will be chosen by phragmen. assert_eq!(Session::validators(), vec![20, 10]); - // avalidators must have already received some rewards. + // validators must have already received some rewards. assert_eq!(Balances::total_balance(&10), initial_balance + session_reward); assert_eq!(Balances::total_balance(&20), initial_balance + session_reward); + + // ------ check the staked value of all parties. + // total expo of 10, with 500 coming from nominators (externals), according to phragmen. + assert_eq!(Staking::stakers(10).own, 1000); + assert_eq!(Staking::stakers(10).total, 1000 + 500); + // 2 and 4 supported 10, each with stake 250, according to phragmen. + assert_eq!(Staking::stakers(10).others.iter().map(|e| e.value).collect::>>(), vec![250, 250]); + assert_eq!(Staking::stakers(10).others.iter().map(|e| e.who).collect::>>(), vec![4, 2]); + // total expo of 20, with 500 coming from nominators (externals), according to phragmen. + assert_eq!(Staking::stakers(20).own, 2000); + assert_eq!(Staking::stakers(20).total, 2000 + 500); + // 2 and 4 supported 20, each with stake 250, according to phragmen. + assert_eq!(Staking::stakers(20).others.iter().map(|e| e.value).collect::>>(), vec![250, 250]); + assert_eq!(Staking::stakers(20).others.iter().map(|e| e.who).collect::>>(), vec![4, 2]); System::set_block_number(2); // next session reward. let new_session_reward = Staking::session_reward() * Staking::slot_stake(); // nothing else will happen, era ends and rewards are paid again, - // it is expected that nominators will also be paid. + // it is expected that nominators will also be paid. See below Session::check_rotate_session(System::block_number()); + // Nominator 2: has [250/1500 ~ 1/6 from 10] + [250/2500 ~ 1/10 from 20]'s reward. ==> 1/6 + 1/10 + assert_eq!(Balances::total_balance(&2), initial_balance + (new_session_reward/6 + new_session_reward/10)); + // The Associated validator will get the other 4/6 --> 1500(total) minus 1/6(250) by each nominator -> 6/6 - 1/6 - 1/6 + assert_eq!(Balances::total_balance(&10), initial_balance + session_reward + 4*new_session_reward/6) ; - // Nominator 2: staked 1/3 of the total, gets 1/3 of the reward, chose controller as destination - assert_eq!(Balances::total_balance(&2), initial_balance + new_session_reward/3); - // The Associated validator will get the other 2/3 - assert_eq!(Balances::total_balance(&10), initial_balance + session_reward + 2*new_session_reward/3); - - // Nominator 4: staked 1/5 of the total, gets 1/5 of the reward, chose stash as destination - // This means that the reward will go to 3, which is bonded as the stash of 4. - assert_eq!(Balances::total_balance(&3), initial_balance + new_session_reward/5); - // The Associated validator will get the other 4/5 - assert_eq!(Balances::total_balance(&20), initial_balance + session_reward + 4*new_session_reward/5); + // Nominator 4: has [250/1500 ~ 1/6 from 10] + [250/2500 ~ 1/10 from 20]'s reward. ==> 1/6 + 1/10 + // This nominator chose stash as the reward destination. This means that the reward will go to 3, which is bonded as the stash of 4. + assert_eq!(Balances::total_balance(&3), initial_balance + (new_session_reward/6 + new_session_reward/10)); + // The Associated validator will get the other 8/10 --> 2500(total) minus 1/10(250) by each nominator -> 10/10 - 1/10 - 1/10 + assert_eq!(Balances::total_balance(&20), initial_balance + session_reward + 8*new_session_reward/10); }); } #[test] fn nominators_also_get_slashed() { // A nominator should be slashed if the validator they nominated is slashed - with_externalities(&mut ExtBuilder::default() - .session_length(1).sessions_per_era(1).build(), - || { + with_externalities(&mut ExtBuilder::default().nominate(false).build(), || { assert_eq!(Staking::era_length(), 1); assert_eq!(Staking::validator_count(), 2); // slash happens immediately. @@ -508,13 +719,14 @@ fn nominators_also_get_slashed() { // 10 goes offline Staking::on_offline_validator(10, 4); - let slash_value = Staking::current_offline_slash()*8; + let slash_value = 2_u64.pow(3) * Staking::current_offline_slash(); let expo = Staking::stakers(10); let actual_slash = expo.own.min(slash_value); let nominator_actual_slash = nominator_stake.min(expo.total - actual_slash); // initial + first era reward + slash assert_eq!(Balances::total_balance(&10), initial_balance + 10 - actual_slash); assert_eq!(Balances::total_balance(&2), initial_balance - nominator_actual_slash); + // Because slashing happened. assert!(Staking::forcing_new_era().is_some()); }); } @@ -527,7 +739,8 @@ fn double_staking_should_fail() { // * an account already bonded as stash cannot nominate. // * an account already bonded as controller can nominate. with_externalities(&mut ExtBuilder::default() - .session_length(1).sessions_per_era(2).build(), + .sessions_per_era(2) + .build(), || { let arbitrary_value = 5; System::set_block_number(1); @@ -547,10 +760,9 @@ fn double_staking_should_fail() { #[test] fn session_and_eras_work() { with_externalities(&mut ExtBuilder::default() - .session_length(1) .sessions_per_era(2) .reward(10) - .build(), + .build(), || { assert_eq!(Staking::era_length(), 2); assert_eq!(Staking::sessions_per_era(), 2); @@ -626,7 +838,7 @@ fn cannot_transfer_staked_balance() { // Confirm account 11 has some free balance assert_eq!(Balances::free_balance(&11), 1000); // Confirm account 11 (via controller 10) is totally staked - assert_eq!(Staking::stakers(&10).total, 1000); + assert_eq!(Staking::stakers(&10).total, 1000 + 500); // Confirm account 11 cannot transfer as a result assert_noop!(Balances::transfer(Origin::signed(11), 20, 1), "account liquidity restrictions prevent withdrawal"); @@ -646,7 +858,7 @@ fn cannot_reserve_staked_balance() { // Confirm account 11 has some free balance assert_eq!(Balances::free_balance(&11), 1000); // Confirm account 11 (via controller 10) is totally staked - assert_eq!(Staking::stakers(&10).total, 1000); + assert_eq!(Staking::stakers(&10).total, 1000 + 500); // Confirm account 11 cannot transfer as a result assert_noop!(Balances::reserve(&11, 1), "account liquidity restrictions prevent withdrawal"); @@ -657,96 +869,16 @@ fn cannot_reserve_staked_balance() { }); } -#[test] -fn max_unstake_threshold_works() { - // Tests that max_unstake_threshold gets used when prefs.unstake_threshold is large - with_externalities(&mut ExtBuilder::default().build(), || { - const MAX_UNSTAKE_THRESHOLD: u32 = 10; - // Two users with maximum possible balance - Balances::set_free_balance(&10, u64::max_value()); - Balances::set_free_balance(&20, u64::max_value()); - - // Give them full exposer as a staker - >::insert(&10, Exposure { total: u64::max_value(), own: u64::max_value(), others: vec![]}); - >::insert(&20, Exposure { total: u64::max_value(), own: u64::max_value(), others: vec![]}); - - // Check things are initialized correctly - assert_eq!(Balances::free_balance(&10), u64::max_value()); - assert_eq!(Balances::free_balance(&20), u64::max_value()); - assert_eq!(Balances::free_balance(&10), Balances::free_balance(&20)); - assert_eq!(Staking::offline_slash_grace(), 0); - assert_eq!(Staking::current_offline_slash(), 20); - // Account 10 will have max unstake_threshold - assert_ok!(Staking::validate(Origin::signed(10), ValidatorPrefs { - unstake_threshold: MAX_UNSTAKE_THRESHOLD, - validator_payment: 0, - })); - // Account 20 could not set their unstake_threshold past 10 - assert_noop!(Staking::validate(Origin::signed(20), ValidatorPrefs { - unstake_threshold: 11, - validator_payment: 0}), - "unstake threshold too large" - ); - // Give Account 20 unstake_threshold 11 anyway, should still be limited to 10 - >::insert(20, ValidatorPrefs { - unstake_threshold: 11, - validator_payment: 0, - }); - - // Make slot_stake really large, as to not affect punishment curve - >::put(u64::max_value()); - // Confirm `slot_stake` is greater than exponential punishment, else math below will be different - assert!(Staking::slot_stake() > 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); - - // Report each user 1 more than the max_unstake_threshold - Staking::on_offline_validator(10, MAX_UNSTAKE_THRESHOLD as usize + 1); - Staking::on_offline_validator(20, MAX_UNSTAKE_THRESHOLD as usize + 1); - - // Show that each balance only gets reduced by 2^max_unstake_threshold - assert_eq!(Balances::free_balance(&10), u64::max_value() - 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); - assert_eq!(Balances::free_balance(&20), u64::max_value() - 2_u64.pow(MAX_UNSTAKE_THRESHOLD) * 20); - }); -} - -#[test] -fn slashing_does_not_cause_underflow() { - // Tests that slashing more than a user has does not underflow - with_externalities(&mut ExtBuilder::default().build(), || { - // One user with less than `max_value` will test underflow does not occur - Balances::set_free_balance(&10, 1); - - // Verify initial conditions - assert_eq!(Balances::free_balance(&10), 1); - assert_eq!(Staking::offline_slash_grace(), 0); - - // Set validator preference so that 2^unstake_threshold would cause overflow (greater than 64) - >::insert(10, ValidatorPrefs { - unstake_threshold: 10, - validator_payment: 0, - }); - - // Should not panic - Staking::on_offline_validator(10, 100); - // Confirm that underflow has not occurred, and account balance is set to zero - assert_eq!(Balances::free_balance(&10), 0); - }); -} - - #[test] fn reward_destination_works() { // Rewards go to the correct destination as determined in Payee - with_externalities(&mut ExtBuilder::default() - .sessions_per_era(1) - .session_length(1) - .build(), - || { + with_externalities(&mut ExtBuilder::default().build(), || { // Check that account 10 is a validator assert!(>::exists(10)); // Check the balance of the validator account - assert_eq!(Balances::free_balance(&10), 1); + assert_eq!(Balances::free_balance(&10), 1); // Check the balance of the stash account - assert_eq!(Balances::free_balance(&11), 1000); + assert_eq!(Balances::free_balance(&11), 1000); // Check these two accounts are bonded assert_eq!(Staking::bonded(&11), Some(10)); // Check how much is at stake @@ -763,10 +895,12 @@ fn reward_destination_works() { assert_eq!(Staking::payee(&10), RewardDestination::Staked); // Check current session reward is 10 assert_eq!(current_session_reward, 10); - // Check that reward went to the stash account - assert_eq!(Balances::free_balance(&11), 1000 + 10); + // Check that reward went to the stash account of validator + // 1/3 of the reward is for the nominator. + let validator_reward = (10. * (2./3.)) as u64; // = 6 + assert_eq!(Balances::free_balance(&11), 1000 + validator_reward); // Check that amount at stake increased accordingly - assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000 + 10, active: 1000 + 10, unlocking: vec![] })); + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000 + 6, active: 1000 + 6, unlocking: vec![] })); // Update current session reward current_session_reward = Staking::current_session_reward(); @@ -781,15 +915,18 @@ fn reward_destination_works() { // Check that RewardDestination is Stash assert_eq!(Staking::payee(&10), RewardDestination::Stash); // Check that reward went to the stash account - assert_eq!(Balances::free_balance(&11), 1010 + current_session_reward); + let new_validator_reward = ((1000 + 6) as f64 / ( (1000 + 6) + (500 + 4) ) as f64) * current_session_reward as f64; + assert_eq!(Balances::free_balance(&11), 1000 + validator_reward + new_validator_reward as u64); // Check that amount at stake is not increased - assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1010, active: 1010, unlocking: vec![] })); - // Update current session reward - current_session_reward = Staking::current_session_reward(); + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1006, active: 1006, unlocking: vec![] })); //Change RewardDestination to Controller >::insert(&10, RewardDestination::Controller); + // Check controller balance + assert_eq!(Balances::free_balance(&10), 1); + + // Move forward the system for payment System::set_block_number(3); Timestamp::set_timestamp(15); @@ -798,20 +935,22 @@ fn reward_destination_works() { // Check that RewardDestination is Controller assert_eq!(Staking::payee(&10), RewardDestination::Controller); // Check that reward went to the controller account - assert_eq!(Balances::free_balance(&10), 1 + current_session_reward); + let reward_of = |w| Staking::stakers(w).own * Staking::current_session_reward() / Staking::stakers(w).total; + assert_eq!(Balances::free_balance(&10), 1 + reward_of(&10)); // Check that amount at stake is not increased - assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1010, active: 1010, unlocking: vec![] })); - + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1006, active: 1006, unlocking: vec![] })); }); - } #[test] fn validator_payment_prefs_work() { // Test that validator preferences are correctly honored - // Note: unstake threshold is being directly tested in slashing tests. + // Note: unstake threshold is being directly tested in slashing tests. // This test will focus on validator payment. - with_externalities(&mut ExtBuilder::default().build(), + with_externalities(&mut ExtBuilder::default() + .session_length(3) + .sessions_per_era(3) + .build(), || { let session_reward = 10; let validator_cut = 5; @@ -826,31 +965,31 @@ fn validator_payment_prefs_work() { assert_eq!(Staking::current_session_reward(), session_reward); // check the balance of a validator accounts. - assert_eq!(Balances::total_balance(&10), 1); + assert_eq!(Balances::total_balance(&10), 1); // check the balance of a validator's stash accounts. - assert_eq!(Balances::total_balance(&11), validator_initial_balance); + assert_eq!(Balances::total_balance(&11), validator_initial_balance); // and the nominator (to-be) - assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&2), 20); // add a dummy nominator. // NOTE: this nominator is being added 'manually', use '.nominate()' to do it realistically. >::insert(&10, Exposure { own: 500, // equal division indicates that the reward will be equally divided among validator and nominator. total: 1000, - others: vec![IndividualExposure {who: 2, value: 500 }] + others: vec![IndividualExposure {who: 2, value: 500 }] }); >::insert(&2, RewardDestination::Controller); - >::insert(&10, ValidatorPrefs { - unstake_threshold: 3, - validator_payment: validator_cut + >::insert(&10, ValidatorPrefs { + unstake_threshold: 3, + validator_payment: validator_cut }); - // ------------ Fast forward + // ------------ Fast forward let mut block = 3; // Block 3 => Session 1 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5); // on time. - Session::check_rotate_session(System::block_number()); + Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 1); @@ -858,7 +997,7 @@ fn validator_payment_prefs_work() { assert_eq!(Staking::current_session_reward(), session_reward); assert_eq!(Staking::current_era_reward(), session_reward); - block = 6; // Block 6 => Session 2 => Era 0 + block = 6; // Block 6 => Session 2 => Era 0 System::set_block_number(block); Timestamp::set_timestamp(block*5); // a little late. Session::check_rotate_session(System::block_number()); @@ -870,7 +1009,7 @@ fn validator_payment_prefs_work() { block = 9; // Block 9 => Session 3 => Era 1 System::set_block_number(block); - Timestamp::set_timestamp(block*5); + Timestamp::set_timestamp(block*5); Session::check_rotate_session(System::block_number()); assert_eq!(Staking::current_era(), 1); assert_eq!(Session::current_index(), 3); @@ -884,22 +1023,14 @@ fn validator_payment_prefs_work() { // Rest of the reward will be shared and paid to the nominator in stake. assert_eq!(Balances::total_balance(&2), 20 + shared_cut/2); }); -} -#[test] -fn staking_ledger_grows_and_shrinks() { - // TODO: Show that staking ledger grows with new events - // TODO: Show that staking ledger shrinks when user is removed -} - -#[test] -fn consolidate_unlocked_works() { - // TODO: Figure out what it does and then test it } #[test] fn bond_extra_works() { // Tests that extra `free_balance` in the stash can be added to stake + // NOTE: this tests only verifies `StakingLedger` for correct updates. + // See `bond_extra_and_withdraw_unbonded_works` for more details and updates on `Exposure`. with_externalities(&mut ExtBuilder::default().build(), || { // Check that account 10 is a validator @@ -928,34 +1059,112 @@ fn bond_extra_works() { } #[test] -fn withdraw_unbonded_works() { - // TODO: Learn what it is and test it -} +fn bond_extra_and_withdraw_unbonded_works() { + // * Should test + // * Given an account being bonded [and chosen as a validator](not mandatory) + // * It can add extra funds to the bonded account. + // * it can unbond a portion of its funds from the stash account. + // * Once the unbonding period is done, it can actually take the funds out of the stash. + with_externalities(&mut ExtBuilder::default() + .reward(10) // it is the default, just for verbosity + .nominate(false) + .build(), + || { + // Set payee to controller. avoids confusion + assert_ok!(Staking::set_payee(Origin::signed(10), RewardDestination::Controller)); -#[test] -fn reporting_misbehaviors_work() { - // TODO: Does this code exist? -} + // Set unbonding era (bonding_duration) to 2 + assert_ok!(Staking::set_bonding_duration(2)); -#[test] -fn correct_number_of_validators_are_chosen() { - // TODO: Check that number is at least minimum, and at most what is set - // TODO: Test emergency conditions? -} + // Give account 11 some large free balance greater than total + Balances::set_free_balance(&11, 1000000); + // Check the balance of the stash account + assert_eq!(Balances::free_balance(&11), 1000000); + // Initial config should be correct + assert_eq!(Staking::sessions_per_era(), 1); + assert_eq!(Staking::current_era(), 0); + assert_eq!(Session::current_index(), 0); + + assert_eq!(Staking::current_session_reward(), 10); + + // check the balance of a validator accounts. + assert_eq!(Balances::total_balance(&10), 1); + + // confirm that 10 is a normal validator and gets paid at the end of the era. + System::set_block_number(1); + Timestamp::set_timestamp(5); + Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 1); + assert_eq!(Session::current_index(), 1); + + // NOTE: despite having .nominate() in extBuilder, 20 doesn't have a share since + // rewards are paid before election in new_era() + assert_eq!(Balances::total_balance(&10), 1 + 10); + + // Initial state of 10 + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000, active: 1000, unlocking: vec![] })); + assert_eq!(Staking::stakers(&10), Exposure { total: 1000, own: 1000, others: vec![] }); + + + // deposit the extra 100 units + Staking::bond_extra(Origin::signed(10), 100).unwrap(); + + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000 + 100, active: 1000 + 100, unlocking: vec![] })); + // Exposure is a snapshot! only updated after the next era update. + assert_ne!(Staking::stakers(&10), Exposure { total: 1000 + 100, own: 1000 + 100, others: vec![] }); + + // trigger next era. + System::set_block_number(2);Timestamp::set_timestamp(10);Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 2); + assert_eq!(Session::current_index(), 2); + + // ledger should be the same. + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000 + 100, active: 1000 + 100, unlocking: vec![] })); + // Exposure is now updated. + assert_eq!(Staking::stakers(&10), Exposure { total: 1000 + 100, own: 1000 + 100, others: vec![] }); + // Note that by this point 10 also have received more rewards, but we don't care now. + // assert_eq!(Balances::total_balance(&10), 1 + 10 + MORE_REWARD); + + // Unbond almost all of the funds in stash. + Staking::unbond(Origin::signed(10), 1000).unwrap(); + assert_eq!(Staking::ledger(&10), Some(StakingLedger { + stash: 11, total: 1000 + 100, active: 100, unlocking: vec![UnlockChunk{ value: 1000, era: 2 + 2}] })); + + // Attempting to free the balances now will fail. 2 eras need to pass. + Staking::withdraw_unbonded(Origin::signed(10)).unwrap(); + assert_eq!(Staking::ledger(&10), Some(StakingLedger { + stash: 11, total: 1000 + 100, active: 100, unlocking: vec![UnlockChunk{ value: 1000, era: 2 + 2}] })); + + // trigger next era. + System::set_block_number(3);Timestamp::set_timestamp(15);Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 3); + assert_eq!(Session::current_index(), 3); + + // nothing yet + Staking::withdraw_unbonded(Origin::signed(10)).unwrap(); + assert_eq!(Staking::ledger(&10), Some(StakingLedger { + stash: 11, total: 1000 + 100, active: 100, unlocking: vec![UnlockChunk{ value: 1000, era: 2 + 2}] })); + + // trigger next era. + System::set_block_number(4);Timestamp::set_timestamp(20);Session::check_rotate_session(System::block_number()); + assert_eq!(Staking::current_era(), 4); + assert_eq!(Session::current_index(), 4); + + Staking::withdraw_unbonded(Origin::signed(10)).unwrap(); + // Now the value is free and the staking ledger is updated. + assert_eq!(Staking::ledger(&10), Some(StakingLedger { + stash: 11, total: 100, active: 100, unlocking: vec![] })); + }) +} #[test] fn slot_stake_is_least_staked_validator_and_limits_maximum_punishment() { - // TODO: Complete this test! // Test that slot_stake is determined by the least staked validator // Test that slot_stake is the maximum punishment that can happen to a validator // Note that rewardDestination is the stash account by default // Note that unlike reward slash will affect free_balance, not the stash account. - with_externalities(&mut ExtBuilder::default() - .session_length(1) - .sessions_per_era(1) - .build(), - || { + with_externalities(&mut ExtBuilder::default().nominate(false).build(), || { // Confirm validator count is 2 assert_eq!(Staking::validator_count(), 2); // Confirm account 10 and 20 are validators @@ -981,7 +1190,7 @@ fn slot_stake_is_least_staked_validator_and_limits_maximum_punishment() { assert_eq!(Staking::stakers(&20).total, 69); >::insert(&20, StakingLedger { stash: 22, total: 69, active: 69, unlocking: vec![] }); - // New era --> rewards are paid --> stakes are changed + // New era --> rewards are paid --> stakes are changed System::set_block_number(1); Timestamp::set_timestamp(5); Session::check_rotate_session(System::block_number()); @@ -991,7 +1200,7 @@ fn slot_stake_is_least_staked_validator_and_limits_maximum_punishment() { assert_eq!(Staking::stakers(&10).total, 1000 + 10); assert_eq!(Staking::stakers(&20).total, 69 + 10); - // -- Note that rewards are going drectly to stash, not as free balance. + // -- Note that rewards are going directly to stash, not as free balance. assert_eq!(Balances::free_balance(&10), 1000); assert_eq!(Balances::free_balance(&20), 1000); @@ -1008,7 +1217,6 @@ fn slot_stake_is_least_staked_validator_and_limits_maximum_punishment() { }); } - #[test] fn on_free_balance_zero_stash_removes_validator() { // Tests that validator storage items are cleaned up when stash is empty @@ -1020,9 +1228,9 @@ fn on_free_balance_zero_stash_removes_validator() { // Check that account 10 is a validator assert!(>::exists(10)); // Check the balance of the validator account - assert_eq!(Balances::free_balance(&10), 256); + assert_eq!(Balances::free_balance(&10), 256); // Check the balance of the stash account - assert_eq!(Balances::free_balance(&11), 256000); + assert_eq!(Balances::free_balance(&11), 256000); // Check these two accounts are bonded assert_eq!(Staking::bonded(&11), Some(10)); @@ -1041,10 +1249,10 @@ fn on_free_balance_zero_stash_removes_validator() { // Reduce free_balance of controller to 0 Balances::set_free_balance(&10, 0); // Check total balance of account 10 - assert_eq!(Balances::total_balance(&10), 0); + assert_eq!(Balances::total_balance(&10), 0); // Check the balance of the stash account has not been touched - assert_eq!(Balances::free_balance(&11), 256000); + assert_eq!(Balances::free_balance(&11), 256000); // Check these two accounts are still bonded assert_eq!(Staking::bonded(&11), Some(10)); @@ -1057,7 +1265,7 @@ fn on_free_balance_zero_stash_removes_validator() { // Reduce free_balance of stash to 0 Balances::set_free_balance(&11, 0); // Check total balance of stash - assert_eq!(Balances::total_balance(&11), 0); + assert_eq!(Balances::total_balance(&11), 0); // Check storage items do not exist assert!(!>::exists(&10)); @@ -1082,9 +1290,9 @@ fn on_free_balance_zero_stash_removes_nominator() { // Check that account 10 is a nominator assert!(>::exists(10)); // Check the balance of the nominator account - assert_eq!(Balances::free_balance(&10), 256); + assert_eq!(Balances::free_balance(&10), 256); // Check the balance of the stash account - assert_eq!(Balances::free_balance(&11), 256000); + assert_eq!(Balances::free_balance(&11), 256000); // Check these two accounts are bonded assert_eq!(Staking::bonded(&11), Some(10)); @@ -1100,10 +1308,10 @@ fn on_free_balance_zero_stash_removes_nominator() { // Reduce free_balance of controller to 0 Balances::set_free_balance(&10, 0); // Check total balance of account 10 - assert_eq!(Balances::total_balance(&10), 0); + assert_eq!(Balances::total_balance(&10), 0); // Check the balance of the stash account has not been touched - assert_eq!(Balances::free_balance(&11), 256000); + assert_eq!(Balances::free_balance(&11), 256000); // Check these two accounts are still bonded assert_eq!(Staking::bonded(&11), Some(10)); @@ -1115,7 +1323,7 @@ fn on_free_balance_zero_stash_removes_nominator() { // Reduce free_balance of stash to 0 Balances::set_free_balance(&11, 0); // Check total balance of stash - assert_eq!(Balances::total_balance(&11), 0); + assert_eq!(Balances::total_balance(&11), 0); // Check storage items do not exist assert!(!>::exists(&10)); @@ -1125,4 +1333,253 @@ fn on_free_balance_zero_stash_removes_nominator() { assert!(!>::exists(&10)); assert!(!>::exists(&11)); }); -} \ No newline at end of file +} + +#[test] +fn phragmen_poc_works() { + // Tests the POC test of the phragmen, mentioned in the paper and reference implementation. + // Initial votes: + // vote_list = [ + // ("A", 10.0, ["X", "Y"]), + // ("B", 20.0, ["X", "Z"]), + // ("C", 30.0, ["Y", "Z"]) + // ] + // + // Sequential Phragmén gives + // Z is elected with stake 35.0 and score 0.02 + // Y is elected with stake 25.0 and score 0.04 + // + // A has load 0.04 and supported + // X with stake 0.0 Y with stake 10.0 + // B has load 0.02 and supported + // X with stake 0.0 Z with stake 20.0 + // C has load 0.04 and supported + // Y with stake 15.0 Z with stake 15.0 + // + // NOTE: doesn't X/Y/Z's stash value make a difference here in phragmen? + with_externalities(&mut ExtBuilder::default() + .nominate(false) + .build(), + || { + // initial setup of 10 and 20, both validators. + assert_eq!(Session::validators(), vec![20, 10]); + + assert_eq!(Staking::ledger(&10), Some(StakingLedger { stash: 11, total: 1000, active: 1000, unlocking: vec![] })); + assert_eq!(Staking::ledger(&20), Some(StakingLedger { stash: 21, total: 2000, active: 2000, unlocking: vec![] })); + + assert_eq!(Staking::validators(10), ValidatorPrefs::default()); + assert_eq!(Staking::validators(20), ValidatorPrefs::default()); + + assert_eq!(Balances::free_balance(10), 1); + assert_eq!(Balances::free_balance(20), 1); + + // no one is a nominator + assert_eq!(>::enumerate().count(), 0 as usize); + + // Bond [30, 31] as the third validator + assert_ok!(Staking::bond(Origin::signed(31), 30, 1000, RewardDestination::default())); + assert_ok!(Staking::validate(Origin::signed(30), ValidatorPrefs::default())); + + // bond [2,1](A), [4,3](B), [6,5](C) as the 3 nominators + // Give all of them some balance to be able to bond properly. + for i in &[1, 3, 5] { Balances::set_free_balance(i, 50); } + // Linking names to the above test: + // 10 => X + // 20 => Y + // 30 => Z + assert_ok!(Staking::bond(Origin::signed(1), 2, 10, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 20])); + + assert_ok!(Staking::bond(Origin::signed(3), 4, 20, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(4), vec![10, 30])); + + assert_ok!(Staking::bond(Origin::signed(5), 6, 30, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(6), vec![20, 30])); + + // New era => election algorithm will trigger + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + + // Z and Y are chosen + assert_eq!(Session::validators(), vec![30, 20]); + + // with stake 35 and 25 respectively + + // This is only because 30 has been bonded on the fly, exposures are stored at the very end of the era. + // 35 is the point, not 'own' Exposure. + assert_eq!(Staking::stakers(30).own, 0); + assert_eq!(Staking::stakers(30).total, 0 + 35); + // same as above. +25 is the point + assert_eq!(Staking::stakers(20).own, 2010); + assert_eq!(Staking::stakers(20).total, 2010 + 25); + + // 30(Z) was supported by B-4 and C-6 with stake 20 and 15 respectively. + assert_eq!(Staking::stakers(30).others.iter().map(|e| e.value).collect::>>(), vec![15, 20]); + assert_eq!(Staking::stakers(30).others.iter().map(|e| e.who).collect::>>(), vec![6, 4]); + + // 20(Y) was supported by A-2 and C-6 with stake 10 and 15 respectively. + assert_eq!(Staking::stakers(20).others.iter().map(|e| e.value).collect::>>(), vec![15, 10]); + assert_eq!(Staking::stakers(20).others.iter().map(|e| e.who).collect::>>(), vec![6, 2]); + }); +} + +#[test] +fn phragmen_election_works() { + // tests the encapsulated phragmen::elect function. + with_externalities(&mut ExtBuilder::default().nominate(false).build(), || { + // initial setup of 10 and 20, both validators + assert_eq!(Session::validators(), vec![20, 10]); + + // no one is a nominator + assert_eq!(>::enumerate().count(), 0 as usize); + + // Bond [30, 31] as the third validator + assert_ok!(Staking::bond(Origin::signed(31), 30, 1000, RewardDestination::default())); + assert_ok!(Staking::validate(Origin::signed(30), ValidatorPrefs::default())); + + // bond [2,1](A), [4,3](B), as 2 nominators + // Give all of them some balance to be able to bond properly. + for i in &[1, 3] { Balances::set_free_balance(i, 50); } + assert_ok!(Staking::bond(Origin::signed(1), 2, 5, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 20])); + + assert_ok!(Staking::bond(Origin::signed(3), 4, 45, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(4), vec![10, 30])); + + let rounds = || 2 as usize; + let validators = || >::enumerate(); + let nominators = || >::enumerate(); + let stash_of = |w| Staking::stash_balance(&w); + let min_validator_count = Staking::minimum_validator_count() as usize; + + let winners = phragmen::elect::( + rounds, + validators, + nominators, + stash_of, + min_validator_count + ); + + // 10 and 30 must be the winners + assert_eq!(winners.iter().map(|w| w.who).collect::>>(), vec![10, 30]); + + let winner_10 = winners.iter().filter(|w| w.who == 10).nth(0).unwrap(); + let winner_30 = winners.iter().filter(|w| w.who == 30).nth(0).unwrap(); + + // python implementation output: + /* + 10 is elected with stake 26.31578947368421 and score 0.02 + 30 is elected with stake 23.684210526315788 and score 0.042222222222222223 + + 2 has load 0.02 and supported + 10 with stake 5.0 20 with stake 0.0 + 4 has load 0.042222222222222223 and supported + 10 with stake 21.31578947368421 30 with stake 23.684210526315788 + */ + + assert_eq!(winner_10.exposure.total, 1000 + 26); + assert_eq!(winner_10.score, Perquintill::from_fraction(0.02)); + assert_eq!(winner_10.exposure.others[0].value, 21); + assert_eq!(winner_10.exposure.others[1].value, 5); + + assert_eq!(winner_30.exposure.total, 23); + assert_eq!(winner_30.score, Perquintill::from_quintillionths(42222222222222222)); + assert_eq!(winner_30.exposure.others[0].value, 23); + }) +} + +#[test] +fn switching_roles() { + // Show: It should be possible to switch between roles (nominator, validator, idle) with minimal overhead. + with_externalities(&mut ExtBuilder::default() + .nominate(false) + .sessions_per_era(3) + .build(), + || { + assert_eq!(Session::validators(), vec![20, 10]); + + // put some money in account that we'll use. + for i in 1..7 { Balances::set_free_balance(&i, 5000); } + + // add 2 nominators + assert_ok!(Staking::bond(Origin::signed(1), 2, 2000, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![10, 6])); + + assert_ok!(Staking::bond(Origin::signed(3), 4, 500, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(4), vec![20, 2])); + + // add a new validator candidate + assert_ok!(Staking::bond(Origin::signed(5), 6, 1500, RewardDestination::Controller)); + assert_ok!(Staking::validate(Origin::signed(6), ValidatorPrefs::default())); + + // new block + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + + // no change + assert_eq!(Session::validators(), vec![20, 10]); + + // new block + System::set_block_number(2); + Session::check_rotate_session(System::block_number()); + + // no change + assert_eq!(Session::validators(), vec![20, 10]); + + // new block --> ne era --> new validators + System::set_block_number(3); + Session::check_rotate_session(System::block_number()); + + // with current nominators 10 and 4 have the most stake + assert_eq!(Session::validators(), vec![6, 10]); + + // 2 decides to be a validator. Consequences: + // 6 will not be chosen in the next round (no votes) + // 2 itself will be chosen + 20 who now has the higher votes + // 10 wil have no votes. + assert_ok!(Staking::validate(Origin::signed(2), ValidatorPrefs::default())); + + System::set_block_number(4); + Session::check_rotate_session(System::block_number()); + assert_eq!(Session::validators(), vec![6, 10]); + + System::set_block_number(5); + Session::check_rotate_session(System::block_number()); + assert_eq!(Session::validators(), vec![6, 10]); + + // ne era + System::set_block_number(6); + Session::check_rotate_session(System::block_number()); + assert_eq!(Session::validators(), vec![2, 20]); + }); +} + +#[test] +fn wrong_vote_is_null() { + with_externalities(&mut ExtBuilder::default() + .session_length(1) + .sessions_per_era(1) + .nominate(false) + .validator_pool(true) + .build(), + || { + // from the first era onward, only two will be chosen + assert_eq!(Session::validators(), vec![40, 30, 20, 10]); + + // put some money in account that we'll use. + for i in 1..3 { Balances::set_free_balance(&i, 5000); } + + // add 1 nominators + assert_ok!(Staking::bond(Origin::signed(1), 2, 2000, RewardDestination::default())); + assert_ok!(Staking::nominate(Origin::signed(2), vec![ + 10, 20, // good votes + 1, 2, 15, 1000, 25 // crap votes. No effect. + ])); + + // new block + System::set_block_number(1); + Session::check_rotate_session(System::block_number()); + + assert_eq!(Session::validators(), vec![20, 10]); + }); +}