From 81e9985e58700e692121185fb1df0d7ae2d4db89 Mon Sep 17 00:00:00 2001 From: ItsMAX0112 Date: Mon, 4 Nov 2024 02:40:02 +0530 Subject: [PATCH] routine push --- lab4/images/1_out.ppm | Bin 243015 -> 0 bytes lab4/src/1.ppm | 962 ++++++++++++++++++ lab4/src/makefile | 43 +- lab4/src/ogSharpener/image_sharpener.cpp | 244 ----- lab4/src/output_part1.ppm | 0 lab4/src/sharedMemory/important.cpp | 12 +- lab4/src/sharedMemory/shared.cpp | 237 ++--- lab4/src/sharpener/image_sharpener.cpp | 192 ++++ .../src/{ogSharpener => sharpener}/libppm.cpp | 0 lab4/src/{ogSharpener => sharpener}/libppm.h | 0 10 files changed, 1308 insertions(+), 382 deletions(-) delete mode 100644 lab4/images/1_out.ppm create mode 100644 lab4/src/1.ppm delete mode 100644 lab4/src/ogSharpener/image_sharpener.cpp create mode 100644 lab4/src/output_part1.ppm create mode 100644 lab4/src/sharpener/image_sharpener.cpp rename lab4/src/{ogSharpener => sharpener}/libppm.cpp (100%) rename lab4/src/{ogSharpener => sharpener}/libppm.h (100%) diff --git a/lab4/images/1_out.ppm b/lab4/images/1_out.ppm deleted file mode 100644 index 586cf1e18ce52059d5704d1276dca01676fec65f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243015 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

fU1LG>Q>0bhM>#4N+nh1r-~0 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∓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 diff --git a/lab4/src/1.ppm b/lab4/src/1.ppm new file mode 100644 index 0000000..517a71e --- /dev/null +++ b/lab4/src/1.ppm @@ -0,0 +1,962 @@ +P6 +# Created by GIMP version 2.10.38 PNM plug-in +450 180 +255 +¬ge|YUmJHX14N&/F+9 ?R".DE<0 9>!H%,I!,:Q"2b4AO!,O")a2:b3;e8=[15I#C G'G'L$/K&.a=GX7@M+9M(:X.FR%BU4QhUi}}ξƿopfj|T\oHMU,2E"@;;<"9 AQ!-K'U(/N%+B B$7=!M%0M#1U&6U'4E"CU&.S$,V).U+/M#'C B"F'= A&W3=N-6D#.C/J#6J5/ &:#55/9$+3@NYνǾ~xnxOIc55n=@Z,6M*D%C&I.D+7 +49 +>@=G#I"'O*1W4:?"= G*L /B#; BK'N'O (L&I#J&H%H (M%.E(L&1Z7>N-4G&/G#/J$3N%5F!36&4'.+(/$&3=BUtھý±DZx~ddQxH!@!5 +07AU28jGMU28S.5S+4U)6K*AI%O!+Q",Z-4T'.D E!I (I (H )K#.Q+6S07E")@&D!(E (K&.T,789#&D3;C5D0'<+(=MPcªzx|u}]X@qF6c4,P M #D =/6 B)86 J-G(:@K"*P+2\9?iIN}X_sNUa7AZ/9^3=^0;Y+5Q&/L(Y+5W*1I%D @=?R*5W/:N)1?#@#F#'A"E#$R'0X48K+.5B%7K2H5#;, 6FO^~ys~zd\BjC2V.&<<K"&H$(34F +I!,D$I,?"8 K *\3;a9AY6N$0X09Y1E.E8;6?)>21APcrź¤Ʀũz|aZGe?2R)#B?L#)E!%:;E&P&2Q%4D)<B!O$.Q(0O'/H#+dAHtOVO'/==I'T)2N#,N#,?01 ?@<J)]3?`8A_7@U-8K&.J'.U26D$%=N$.B!7P"-V';@+?2E*=;0A@F$?C!G%T)2I'9:E!D"B K *U)6Q)2Q)2J"-D)F!)V39I)*A" T*6V-5J&L(E%G/Z3HF'79*=FRbźؿŹyȫévpzkuoyRAa4.c14R'R*V2A +A +J'G$H$L(D G&^0=h:Gc8BX.8B"9G")L%*D!C>E8 =U+7B B =;@R$.]/9Q#-R'0O$.S'4N#-J#(R.2N-4G%3Q(:G+I)R(4C*=,P1AG+9=-:A!M+L+H$N +X*5_4>\3;I!)A!G"):4 9?I#V(2X.8F(@@E#J(N#,T&0S%/P",G%K *N"/F%J!)S.5M)3D"2E1S-G&R$1P"/J&@F"S(1N#,D#K#+Z2:h?ET*.AM$[,4jG&U08R.:L*;I&:U3CE!-=%F$2>.9*G08:&26JQȶ}ĶȹŲ¥yĝvepM]AjD1J"KU(+J$4 +/5 +;=G O (J%I 9 +< =/ 7X/5mFK{RVb8M)J%M)G$G&@!F&W/8X4BQ/@_?TX8GO/:K*3E%2C'3G-6A,1?'4ATZϺŚżƹǹij¥{švdlM_ElC1S'KBD;<A@= DNNFFB1 -O$+pGMpGMpFJ`38Ip=DNUg8@U*3W/8O&.J!)J!)AS%/d6@T%/R#-I%: E$L -J!)U-6X4@N,=O0BJ*9W6?X7@H'2E'1H-4?&*E)5HY`ͽϺɞ̽ͽɷƪß{roP[Bh?-P$< ,AJFCA A ELKBN!H2 CrHL{QUY04Q'+N%Q#d/5^)1R#+O$-C$I!)K"*V-5W,5Y+5X*4S$.[,6M)<H'R$/K 'R*2X2=T0>B!2B!,K(/N)0J$/E!+=$?"&H(5GT\ŵ˶ȝÏϽŮ{plMtR9`;)J"8 4 +DC= 9 < + ? +AA ? ? H> 6 S%(pCHa7;A7 BZ%+b+1W"*N%N#,C%I!)R)1`7?d9BZ,6Q",Q",X&1R$.I&K*J&F J#&M(/T0:Z6DQ,4L%*F#H'C#8C $G%3BLVʴȟ‘̺qmqStV84 7?CC??CKH< F^03]03H"C<BO KM= ?T/6T,4Q)1N%-M"+N *T%/W(2K$K'P ,K*AB@9F#)V0;J"*L"&G?<?P).G"3@JTùͣҺģȲupdmNrP5_<(I%: B6:C9 = LD>E93 +U%%d-2PGA>@M!ND C IQ V$'W%&PNOMP$S 'K"F>D#H (C#H!&Q*/I!HO%&N&'D#I)AQ'+C$,>JZƶϾǟ׿ũƥҺɫ~fhJuP6jD1Z4'K$O(#N&$N%#J; FR #B> J "K!"7 S!$^%+B IE?II@ > C IU#$U!#GQ\$'PKPJK S$,Q$+P%.O&.K"*O$-Q&-O&GHI!J&T&1F!H!A!,:EWźϩȗǣīվεͫrsQZ=yQ8|Q>xN@lA:lA;W.*W*'L= + MQ@ L ;CF['+X#G +QM FP$D9EJFHKO[#$Z!Y"V#HFEO&O *P"-M",I&H$F"ICFGE Q-I#N$B .9AVĿϫȚȤһϳ̪mwUjKhOgTaRSK|OIj=8d40Z'$OSMC +U&: ;`/2b+0MQRLM"T!(IBJMJIENZ$$RY##Z#&A GJ!H!E!M",R'1H'F"F"M"GJJF"K'K%V$/F!27=S}έɛţ־ҾεĢ|k^_|`nY^N}NDzNEsF@j94g2.[#"\!#`%)QMEI\+.NI Z#V!T$N #T#'Q #P!EAR!Z*&L; JPMJ> FL$J&F$O%/U+5M#-J(I'\)2L!GK#Q#-N -K'O (F!239OyշϤɨͶrcadzZdKyP6S&#[/,= = V QHJS-,L$$<HM!CIJFX($H9KO@?KT#'O &N!(R#+Q"*S!*M"DEKJL#CJ!M!@*3:M|Ҹϥ˫àʼumnboM~_BnL3V3U1!Y0,U*$Q!IKA :[)(W*'GFMRS Q!!T+)T1/P-+7>O&"JQ"X'"IMFEPX%$U#$KQ!NDKS )P$P#Q"JR U!#LJEP#P!@!)9@Rΰȥǡô~pe|QySkKmI1Z5#N(]5-W,%G> KOKY&#FA @ Ma/(b0)[,&e:4U3*M,#X8-]9-Y1'T)"EF!JLF= 9> FJDA> CNV#(DHN> + KDH$G#GP""N+2mG0d=.g?5oD=nA;T#9G_'&]'%^(&@ IQ%Q![& c.(_.)b50c>6W5,Y7-a;0^3*b5/d<4Y4,FD@;=G"S,'X1,\65X21L&%A:@>L"Q#AECP'-M$*EQ%$9 )5AwзֳѭȢк}xfamL}T8xM:uI<}QH}QHvE>\)%F LV\&$l64]1([/&X,#NKRW$ _2-h?9_:2[6-_90T)"X-&hA:T2)N-$N-$N0&Q5*W:2dG?nQIpRJjNJiMJ`DAO30<;4 : EAFBK$)I (DQ%&8!&4?wϸմѭ̦ĩ~wgcvSaC]EVEyM@|PGa2*F :9:Ho?;xPHrJBjB8Z+#PX#X'#T)#Z3.`;3hF=lG>^5/Z1+d?9[:5_D;cH?fNDfPEgSJuaX}f^u^ViPLkSQgROdLJU;\95P3/W>9cLFjSMnZSfSL`OGn]VraZaPI^FFaIIZDFWACO6:X9?\6A[1=G&=@C#?"L".P",F;:;OζΫȢÜķxkpjiay[x`ePoQFaC8S2)C!@A$@%C,&ZH>gUIgSHR:0Q3+fE@hKEbIDR>7TA:XF%+B,/O8>E+6B$0:". (3:M͵ҮΦ™´zxrqsewaVbLA]I@gVNl_Wpg^}wkyuiqk]aUIYG=S?8N=6VIAULCTMCMFSIGK@M|ȿɱͨɠƢƢƢ}oujXl`PdXHcWG]OBM?4VI@lcZhdYXXNdhZhl^fhZ`\Pe[QeXP[RKa]T]]Seg\bdYc`W^UP[PN^VTOKJNIFHDAONJVXSW\Vinjsxtejfhnn[_`=io0\eaηŰƴtugdbUVTGFB6DG[^Ueh_ehajohkpjejdY_U`f\jpfioe\bXV\RX^TX^TnsmsyuageOXUQZYFONCIGU[Y`fbV\XW]YmqpcgfPTSSWVGKJMQRTXYDEI349+.58,TQH]ZQpmfoognmh~}x|uvqabZ`aYkldmnfabZgh`|}u~zydieV\X]ca_ecUYXUZVceb`g`RWQZ_Ynpk\]WWVQkhc`]X_ZVnifd\ZaYW`XVf^\oiilffqqzlkn`]ugd}rnvmhsigvljuyxlpvkok`f[QZiap~uzrnbvfYmYF\E-E@&??&4YLDtja~smod^ofazqlwol{spzvm{wn~zq}ypwsjyul}yp|xovqmkgdmifiedOKJ>88D<:LBAE=:IB<\SNk^XaRMq^Xzuunpltphdeafb~b^z^ZrWPb\d^zWQoLFqNHsNHoJDoJDb89Z20\42Z41N'*H"-J#6F8E3G2H/B +%? = ="H/G,:!15 4:E +&?867:"<%<%7"5 E,8 , *)9I}սɲĭ±˺ǶfUKP<3ZC=eNHeQJYD?XC>UB>R?;^JIbOIo\VjWQbOIhUOgTNZGATA;ZEDgSR`LMM9:K57Q8;Y?@eHJmOOxZZdbdbZWZXa^[XRP~NL}MKsB>o>:h51[($]("X#]( U H JOOUPONJ F LM#@ >G R'R +"NIEN%S*C36<CM "FEDBB"B"@!@%C (J+J5=;'FXf譱|frfJVK6=?(04'/#)!!% +' -)B*@V@W^Sci`qxtȽÿ}tsaWQ811 ;G&<?=;H&$K)(D"!Q/-eCA];9R0.cA?nLJkIGpNLkDEpIL}VYgloskp\_{JMOR~LOxDFu>Aq9:f,+[! \ LH + QK PQJ Q G +L +SRTRJ SWSTSPUU#J PS"SIKP E= DA=C +F H H AN"M "ED<49< D ,I8C'@$3WgvόfXgA%4** +, +, *((* ++ +,) -/.) )+0 # '1 *>.8K;EcTWl\]~jkxwmheJCN/*J)"P+%U.'lC=rJBoF@vMGwLFxLI\\``VVQOb`^\TR\Z`^\Z][_bQTZ_\aw@Ei06m05f(+^"$VOOROLRGFI F ON RVL M PN VYU^YH J SNKQRSOF 9> H @ <?A?AAAD +C JKDF!B 9> +!> +!;-3-2+;\jwMGU&469< : > = 6 023 +0,23//68 +2.*&( ( ! $*/ +7 =<:;G!O'%GT(%a4/X+&^/)R&Z-'c4.c2-c0-Z'&V g11d,+i10f.-^&%\$#[#"VPU!`),_&,I=BN R F EEA@F + +I J K RPJG<KOO TTH P \SSVH +PYNG JF KE> +6799A +> +DGJF@?:U QEGD +"9<8)!8+>E G +EI RM ;E +NPH E +C?8 59 6 + '-: + +6;; ?=?6 3 : -?FC@= -&1'2I\`9:> + +3<=C 92561 ,)+.)*.46 32 550 0 + (- +2 2 +61 ++)*//-/57549==;>@?G LK K BAE D?AD D BDDBBBF E>>AE J M IE +I H H H D F GAAIKJL Q +P JBJ G +>;3**1,0/36 1795 5 +:6 4 8256)!+*BE G F H?AE E ABH K CCB@>== +A A > ;<? +B A?KI I G DJP + +P +P[ ^[ W R LM KU N @8,&15 +035 22 +/ 3 51 7=:856!##-8GNdˉB75  02200/.- . / . +2 2 4 6752) +,*' /411:A @< : 7 +0 +-0 2 22587<?>?A?;?=?E H D +C G +H H +B +B +>9859A +A A > =AF L XT PK IOX +Z [de` +[ +VNMLTPA 2.2; 56?>6 89 56 /1% !$ 2(:CJ`ot쫷rtq2,. + #)0 2 /.17852 . -) & %!   +  *. +*,5 +7 2,-/ .*.01048:< ? DH H C B G D C GI +C ? A BB= B B C GB F G M +RS O NP T W U +T Q +NTY [X` ` XZ +` X JCG + MC 34; 528 +A C5, +% !)%###/AJS_ns}ail:9? % +# +,-.-)$" !# &% " !*.102200024;@ E HLI +J P Q M N +N HEHIB? GDF NG +J HJ +N R VWXXZ`h%n)"n( t*{- z+u)~15#2 8%A2v."P +C +E LG7 +6 6 *'%( /# "'A?Lciusʽࢶm}zIXU#-, + + +*-&   +  +  ) +1 7 764455329= > +@ F HK OR NO R N +M P Q PN +SE AJH +M UX_ i,+v98C>H@I?TF^Pl^q`kYkVmWlUjOlRuYvYw\xaVC` D KLE9- -9+($ 1054 ; +7888AG +KM LG +KQ O NNLWW]N N c%&k//y= AF;@3fewĸբwmxz]^bUUW3/.  %!3 . * +) 3P.,nG@wLEVL]OaQgTcQQAz>3n3+h,!r3*q1(m*"s/&z6+C3ZHkY{ivzwlpȚǙѢդyXkᮏȗyңլ֯شЬΧѤǖxmÂl}hm̒zٝٙ}ʊgyVpPrCyCPÃSɃPiBl%6F C +7 +AD- "=Tfږ#" )4 %682. BmE=eRmSzav_t^`MF7q3&a"Zf&j(p,!k%v1"A.E0ZB~eĆmʑvנެ֤˛uРxfdѥvdÔjܪО}֣ޭ鸗綕洓ާÊl}_oVv]hʼnqϖyأ֢{̛pɂb}N|F{Mʌ]ՓaƁZ}6$8F + @ 6 >H8-=ꜷʧOPR0<#-1 5/ .P"|RDmMtKvPiEgFQ4{=${:&r1l-v3#r-m#e q%5(|3$}5&M:L9S=oV̑sːnsN_8m?Sϟoa]̔oʍp̌q٘|ܛ⟅ޛݗ~щqjRU=R:XBZD]GpUfɕnʛq{ϐdNqDVВa͉d:+?E +B 9 4<@!/#:9Kڣʔ,&26 0) 1 18 +a52bNrL{Jn@Y,R'K"O*c>fChEn\^O2&c +] cgZY Z Zq)Q>[C?%c#G(njl١~]{YsU[C^JOAA3B5B6B8E;8-z&y&~+6%G6VA_CqLcܛ{ܟs͓czQ}QWLJd>0?I I9 1?B +L,C|{ο.#+!1 4# +- 5=jD;jSqK~PTk<`1d5pD~T_ƊhŀpgX~2%b [ ^cT [_X W l$}9&{7"s1K5͏v歐қ|vXI14!<-z#b ce_c b +XQj/F3T>\A[:a9nDeϔj̓fdbÐcϒsPFGGG +5 +-=@ 9 $8$IQ8Q4^2p*"k lijs/,UQ鳧Ÿ뻭ϡ˝ОϖxϓqɒsbxQnqÙoИ}e`i')J +H 66 + A3?.po倁y:5 +=8 ; ]%$[DyQZbb}UWiEg0GNV"f0K/Z:b@tQ|Z{\g]^dXm>m>OSd޵ԦʞĨаǣyZwi}qRHr%s$l!dv2/YYqmٙ⢇՘{ޣΕxeȝrĘukʖn֟`U` ZH MQ#J+7"+> +`)$]C{QY^zIuD}LxIY-M&\9iIyQYdϞs߮㶌޳׭ը~߰⯂ϙkRvHzK|MÐe淋–ײŢzկٱϢ঒̍{cRG8E69-aM AAh)]KɈr鬐ᦄ՞ȗnѤzΠ|Șt͙qۤma`!["UQ!S!,D%-F?FfprгtD@I@ F m6/eGRYYNLRQDw=|FNOSƖe֦uتxحzٮyԫsўo͙jZ}P|PvKqEsJːh豊⮆ϟwfėp٧ݫڡcpTw[{a}dt]`HT;u;#g+[^!H)~^ᦄڣ͙qѠu͝wʘs˘m֟lad&]$_#+Q'K&.?07^ikƻhfd,+JE SIBsVY`\NRTĒUĒSLEAOX˝iӥtѣrΠlϥkѩlעpō\|MTǂXxOnGoHϋhޜy㥀ߥ\[՝xݣ~Қu~YYǍgcŠeʔpƐlϛt՟{ȐmqQY9F$N+yV̗xŐf̗k̘qПvԡrآi\p)1e"+g)4N)D)2\[`󦤘`*(@DFV&RNx^]jgRW[͘b٥kץjɛ`YǜgҤrӤv֥|ే߰ӨuӨsЛg̒bՖjڕl}WgB`=[8qPǁ_֒o{]{Vӗr檅פyÐecΞnϟo͝oРrԡvբu㰅汉ަަҜxƐlӟxϝ|Йp٠sӜsԡtեtؠ{_Qq$,j!*a#.:5$*򤚑WC>?L}JGu\YlÖobbŽ_̗eڥsުxئuҢqեw߮کک鸏縎٭٭~Мj՟p}ޚuyUmLnMdCfFzZ˄dЉiÁ^{WÇb魈鸍ݮҨxԬyڲ~׭{֨w֦vբu֡wۥћwќz峎뻕䴌ڨآvߢuΓiÐaǘdњsYIdd R% 604ߚ`JF DD +uD=wXXjÖm^WSW˖d՟q٤xڥ{פyݨ~ܧ{ۨyޫ|۫}٭ഇ䶅ޫ~֜tLJdrQoQsSrQvV͆fؑqҍlʈfʋhbۣ~Úؒ翌巆᱁٤zϚrҜx˖vɗv۫جÙơzƍbёcɌ`]Ɨ_њqTDZ + VK3eijה}wn(*RT)O$GxI?_[gi_VPVʒaןp~宇氄ިzީwxڨs٪v㷆Ř۬dvTnPfIjJyY}\Ʉc|ߚyϏlٝ{˓pϙu溓—ɛȗƓē三פwҚuϙuқ|֡ݪݯҨѪŔsVюaؙmӟmϠhˑi>.OCEK;;Й~ko0)o'(~3G_/Bf<=ybma_đd_{O|PNJ^̑g՞u⯄ۭ߰|٪v߭x洁超šԚlWwTpT_GX>rSuSrNӊiӓpӗs䪅⨃ܢ}ݫ鹓™ǝřᲆ͝oդ{ը׭优٫͛zڥh`‡eʼndɐe͗kăc9#SM=SDAܩ{B7p+$7Fl%7AJ]Gi_}SaŒ`W…Yˎb̑gКnפyة{קwܬ{嶂蹅䴄嶊콓߬}͙iÍa„_|_lScIwXρ]vTԋj֔r֗t⨃ۥѝvݫʣŜ縌ܬ~ޯ䷎鿙ƣƤްќzԞze]__^cwZv2QQPvc\Ǻrb~C1q(1r*5NC sH5l•n^]`‡]ć[̏cіj֠tޫ߯᱃黊轊溉ƙڮ}ѣq̙lǏjȈl{amQqQzTvS׎mْrΌlלzݩܬݭÝԭ̢序㷊뼐뼐㴊쿖ȢǤޮћwϕpŒe‹bʎjʎjǍhËjmUk)R [ d%th߾ѱӱնڿܷđʭ۽ϱhLy31y33g#$Tp<.fǗsaXXYVąYːdҜpݨ|븋”ȚĒ漌’ƖԩvΠnǔgdLJkDŽju\jMeBpPٌn؋m~aЏoݧⲊఊÜӪͣൊثᵈ뼐߰湐›㵑٥ϗrːhÌcɏgѕpΒnʏoƌtdT\ P gr4%yh޹ٴ԰Эϡ×ƱѳҰͨƧŦĥéƬɪģáͦѬմ۸ܹڼ߰ݢѥұݷݯܷȰmJ=r0$l' bl0%iTmc^ZÈ^ąYÄXǍ_ɓeќp귊ƛț庍乌ė縊ϜoƔcɕeŏc†bȇkъt˃jqTa@sSيl؇lcӎoݣ~ᭆ涐ȟǞⵋѤzԥyݮܫ߯뾗ğ䴐ף~ЖqˍfNjfϔlҗoʎiɌpˌ{^TYG n)H4t۹ָձήȰ˯̯ͳѲ͵дϭŤ®Ĭ¢¬ƬƭʰаӬЧϧϣʥɩͩɣĭǭʧėȲưªģ˴W`]nLyR{O|MćXƎ_ѝn⯂뼐䷎഍곌ғj~UāVӐeΊcuTfLlWw]fIgDyV~^}^xXmM{WԚu츑跏ޭ߯뼒ⱈӢyؤ|ݦס{峐ンޫ՞՚z̍lNji˔kϛkҘpΌtvox41BWfPnܹӱɬ®ıƴɱɭţïįĭ¬ɯëǿŵżɿĺs~itxz٨У̣ΟϙʖǘƟɣˑr{ ػϨɗrāf7)ST ~E1}\bpN}VƒWRƉZYȔeҟrⳉ纑쿘ԘssLnG˄Zӎdǃ\nLcIu_ˋrbƌgϕpϔr؝{לzzXkFYᭆ⮇ПwѠx綍綍ڦ~ۧᧁԞxߪⰏН~њ|۠ԕvЕs͘n͛jЙpʆof`i" >`,oϭȱܲѪǦĥĨǨȭʲ˳Dzð®§úɻʬ®ëŨ¥¼Ļµ|ZrtQjnkr{^nm_ooTcfRadbrrl|yu~ԨͨΡǩϭҨͤǡěâȓ|t}µӷĘѯÉdv*N[i,e>}_{YvQUyM}PÊ]̖jӢwᰅユƞ궏‹doGtK…Yȋ_uOqPΐwܟϗ~Őqޱ鹓ӡ~̬ޢ]yTԙwڥР|ݭⲊԣz֧ۧ}ީ筇䪅ިإ̙~ƐxďpdƔ_ƊX}`E:\Br1zƩֿҾѾѽмϽмμ̶Ǩê­ȸǴǸɯ®Ým^sxr;\U$>?Qkl{pRkeCZRQhbIb_?WWC]^E_`Ifd[xvtϖŸĩȣ—ȟĒͶƮkF1MNf+J(iKsQtO{R~RYĎ`ďcҟrޫ糋贌ڥ}^vLyPRNJ^Ƈ^ʉiՕ|Г~˓zԞᭆ괐ۣ⧇Ήhґq볒̖t_ף|ߨۧқt؞x؞y٣۩͚}ÍsƓtbXȋ\z];/M@O:άѸؼθƳİ®v{mXtu_{~qpzgyK_jG^fpuiXY;UVB\[MghWqrزҪȝ¢¥ƞ½÷khM\Cd&M5aChHhDmF~T]Ƒea͗iۥyӝq\zPyP~UɊ^̋aэfŀcYEy6%F1u]ʋhڛxݜ|ܙ|飉҈o`HlRԍqޡtR~Yޤ~ߣ~᪁֜t~֚uКvڨЛ|Čq̙zdRÆYlQx,FW~kռɴũмӶɲűį«|zsg}vXpp5SSDbdr|j}{g|z{e~NfrRhv_rVizI^o>Tb4KYBZffjc~@[b5MWXg;UbIdmXszglXqv?X]>W\?X\5QR2NO.GK8QUڱխΪ˪ǦžƩoeB/ITK:Y;[;[9b=}UZďeaɐcۢuzȎ`sGpEzRW~TX}\\Cu$SeK8lJwWz\~cۏwS*ݑw՘y]Njfכvܡyܞw﯉ڟwȑjף~Ӟ|ʓtҙ|bwJrLM6b FuA6±ɬͳϰϭ̫ʱѷٳմֱֺʫIJDzǯ­ô±ý|v{yz¾ĪSlp"DF.QU\{~oc}~UonZvwfiRqv=[c?[f@\j.HW%AO,HT1OY@^f\z`\y;X`(DO"?M/L^(G[!AV"CV9YhLly[yUs{>\d2QV=\_Fdf@^`:XX4QO>[YݫϤǡ££¤äwðŜ|^Ei'Q e y< K.X9a=xRZđf]Zϕgҕf{Me8i>qJmIS/[:]B@.-">5VIeUZ9P/H(\?ىpaLp/ ~fݚԔx⥆ݢڠz؝u͏hLj_ܛsؚqʓjԟwԞxԙwڗ|ƆcpHcC8)T F {OB۶ӲѶݼݿݽܻںٽڼ״ϫơ}ºĺĻͱğJin@F#JQHkq[zVuxPpoUyo\x_}Mtq9_`5X^/PY#CN-OX<_e>dgCijT{za^6UW!AL8GAS;P"Q5X6e@~VȔlaXƉ\Rn>e9g>b>X8E(72%,#NFk_Ѓq|ZhFjH̃cxrZ:'-B-^HbJZ>sTϓq婄㨀ϐgrJvNΐg՜qӜsїqҔoԊqwWfESO 2F 8KCT!MZ#NW?DEG0VWPtreghr߮֝‰~yzǭuWjM]C?)s0x5>"K,Q/qKÎfeȏdȋ_{Ml>k>d=U4J.H.% {vx)!F6r\概概﯋ݒraFE02 p{&<&:!G*aAƆb{ޟvyQi?ȉ^ٞrϖk̎eȇaoU]=V6A-h=Fs]Pžü¹¹d}z]vso~i{{NbcShmax~lfZvzd}swczFZc\ovhzz8RQ$DC,PPLoqetq]qpOk_OmcQogGfa:XZ(CJ ;D7O[LdpPktMkmRro\}vjg}=VR)FN&FQBR*=/ABP,W^:cg,OQ5WXPpmryxәőzuqt¿~ķñdzrdC_@jND+t.m+G+N.fCY]ȏdƉ]tGe8c7T/?":!7|xuz-":)ZB`ܠ{ڟwҒloMO1Q9A-x +{">)?'J.N/dAҎi͌dqGņ[җkɎbʋbXdJS3S5<,a?^<:{¸ǽ·~jg}upI^_1IM:SXFciJhp>_f,MTC`pUr^zPkv1JQE]ajvJ]Y-F@ =86VQ[{xtjvr]riavof|ybwxXls8LW.>,=OIXkHZhBY_KedQlgaztk}SfdIbiHcn7Wf2E 2CGQ?fkZ^||^|znvx՞}rvtvĿ}uzprQlJ`;U9I3`q$D)dBd_\\dDS7O3H+:r*(nkx'7$B,E.yH(hItT];F#E%M2I4s3J2Q8U7eCnGҏbܙntInjbߨȌjȀgnYP4s7F0@3Y A +jiǾ|o|cx}iogyydm%O[=J'N_0Ue<`n>\g3NW>RYSei`orkx~m}zSif5XR8YRLg`jyzlxjkoovv`yvZf8V^5TWCcbVpmdzxppmSq|,R];B4\^`~~yw|nzpvѥ̠œvymgzxyxnjGfBY3XT:@*~3E)]ApS`BU2Y1a:wR|V۟{챏ÃgYCJ9q3i(;(8-R ? vs¸|Žrmmq}cnrKV\?TW>STMcaw|fvvK]]=RU3LQ1OW7Yc,R]"JVDT&JX3Ua:Xc6QZ;OVH[aTfjhwwy^snKjdWumd~uu}zpxiyx|~h|zCX[,CK6NZTkyTozKfmB`bGdbVolmg@em$MQ>deh|lyrsxݬף̕~wyV6]7kCD(S%Tr>}YČki?F?}<G"hFkKY:|[y[aDP4P6YI"DN#EQ+KX;YdIepMeoD[cEY`Pcj]vrh}xq~wk|vgy~uoz]ooWjpewsxqgh~|o~s[rxJinfAP/Z>iQ\JC56+{/"OB`QwgߒхnkQ[>N2hIȇgՖwՒxaNl\ 9+XMx+#H/0vyr¹zrnss|ÿÿ}pu|vPic[rlx`olYljEXVG[Y`trrzv}|sbuyF[`)BI;C%BJ/MW=ZbMhq\u|byWnvOepUkvUon_srixux~u{w~~fpeerkr}|aorL[`@SYLhk\~jzgx:HU!.>Ҟ{xt|~qX{J)K&d$ Va#j0`AjFP-[qGmHcEB++rogQTx(5&K7t\tZaAtR]LJdv[D0i c 90IDmB%2) ǽi~fyqž»tl~vbz?_TFdZsucvtOcbTjhkys{_pjVicbuqwfxzJ]aAV[@W]=V[Mim[w{d}e}h}g{e{l_wycxyn~~y}{sWaVZe_p||rdvxj||sZilCRW9LRPimp}\ov2BR!4ݘÉstxe`jkl}oe7e,g)Um+pSsQtS]>U)b5a4nAsGe>U4?",7M.iIkJ`iApIpHkD[7-^ M|;5‡yMAcm(c"y< pQiIoO|Y|UwTS9mXc{0+v%$bL39/lq½ìxs~kwuXjji~cwuquTzk8ZL@`Scss~_sr[pq^vxaz~roeut\omPcaJ^\K_]J^\Tgeeut{l}YmlWlm`xzd|~oxs`tuXlm`uzktoj~qy~bldWcaXfgppObh@SWTgkt~dw}NagBV]Nglksy~wWjq0CT#7ޛɑ{p~|~fgmfa~pc8%[# +K6f#s-!wgX?N.țzp^6Z1g;~PRpC_8Q,F!P*e?|W~Z}Xƈcljd{YmE]2T+AmCVN㶣m8&b)iOvWb@V4\FTG||Rgh4RTDfhkhwpD]YTnkvk{SoaYxijw~nxNffJdeD`d>[cTqyfjYnsM`dSfjRghOdeH^\>TRDXVWkiny~zws~|}pVigEXVOcdav{g~n[nr^mplz{~iuqTbcDVZWisj~_uJaiE\bVkpi~x~yfPhr>V`W^,LW;[f٧ϞÔ{s|r}}}Q0Fk+"\ +Tcp[pXfIf~YZ7V3[4c:yLÃSВaʎ\OIKąRɃRrEa5V)M"IX/e@yW]b̜xڨҜvΔoяmuUP4F/J5H5r*^ \ +UPGSJ$HHFx|nzx\nr@Y`(HS"JTNXNU,Y^Iqshtxuc}]zPumAb[C\VarlctjOf^Zupqh=[c9E7J9L$GZ'HY#CR#@N5Q_>ZeOjse|r{|~~v_mpWfk]ptatxasuj||xuOaa.BA%9:8JLOacewwl~~zt_wFbp ?Q>R$G[>_r+J\&CS2@;F5W`?dj?co6Wf7L35M8QgFarC`nXtxvx}N``,AF$EL1RYҘŏxxhV(NU ] X +q<*^.V(d@xSeBW6N*b;pGl@p=vBwB~G͆PԋV|H[)Z,^1[1a6ÂXʍaċ`Ía`Σvڮܭ⫂ۛwuUU9;+3&p%_`bT JH +Q; ! +[aatg|wzgxrEYX)EH(KQ8`h:iq,^e0\]Emmcs}{vhRqiLg^dznt}Lf[1OGDb`ilDbm6E)< 1C!FX)M[-O[.N[B`kJfqXpzm|vj}_w{SkmQiibxvssUjk2JL&@A5MQC[_Ugi[nri~`yRnz+L])?*A)C?Wfh?en>bn1Pb8M%?V8Sh@_s:[lLkpjcro=QP-LO5TWٝÏ}yqsM@5QWVf/W% JZ2iDT/DDg=xKtDrGDN*U^$QW'TY8eh_me[rxbu{sp}iv|dsxgy{qvz|~{lNip@]aRlmj~sr~~rthQooHfhLimOlp^svf{f}Ojs<\i:L.D?V=T@_q;[fGjnLsrJqnUywdg^z~Xw|Dgm&MT'OQHjlm|nnߨҧϢȓ~{|~IJfA9=I +p4J*t?{Yʌg^:P,L&{<Kq9y=s:w=x<}A|?xI +6 %%'ruh{uk}J_dQimXtuRppBb_Eb`_yxwvma~yd}kVxz>`b4W[ChnW~Dmq5ab8dcTvwhb~VnrWlocvzy{z\qvShmKcgOgi]rsh|{syvtd}Hfn6W\Cac[qocvtt~uwsf_}}aerukVqxHfp,P^FVJ]B[(B77OB_qDbmMlqPrsa}fqyn`~|Cef$JK$MO9_b\y}ۛɠ̚Ƌ}xsw~|{~²~h8$g-|C&{D&}F(qVvWaCX;y7n*Bq>v@xD}FGIF{Bs=a.t6k/Ro<_ϟoΛlΛn֛qڤx٤xՠtʏg`=4|(rb YL@=;A,,Xbawlyrvt\vsA`ZCb\]~wuh~rQraY|hw~zts_yxUrp[wxkzdHon9`_Jhfa}b|{WooRjjUmmbz|lwrgy{\knVhjZnoavyd|~TrtGfi=\_@_bNlnbz|pwgx]tzQowAhm6]b=_`Oif[qnq{zssrnkmsyxc{{UnrLioFhq;al4\h*Qb9L$9-B4N_Hbo[v}dnns~ug}Lli6]Z,UW,RUA_glՏ}me_`jw~{rot}|~}|~ww~~~ɿ˰gL1q8e-|D-i,p2mTW@S v,CM!^.g9yGOHrf:RPr@l|bwrw}xcy`vql}wD^Q'N;4^Jc~owomtbGgfFe``}yf}_xuYqqUon[xvb~je~WosH\c;OV9RWGcgVswY}}MstCijFimTvxennTlpA^b5\a9fk;hkAihRpnazvu~xropnnxnnXqnOihJfiStyOqzAgp2Xe)M];M";O;RdTlxd}igh}i~wztlXvtNrp@ik-RX1OYYq{sޠנўǏofUx~Lsz]{yzj[~`nx~{}}~}{{|}}u{{w~ys~t{|}yuw~̸ܜP4P[v72c.&N7`Pt&Tg v(86I"nFStEm8i0e)i+f%z:z;MēY[yMtKɇd~YrP[;U;E/{)h +YSTMGE @ <V-+~lQukDiab}~ZjjXlkqjFfcGF +85-WSWvqt}gzvo|~i}~TnoPmk[yyiedkkpr`x|Pkt>[m"AV*I[?]eXxwh[Uv}Us}]xnpbz|9T]@G"KO4bb?mkV{Wwrg}q}{l{vnwpxjtlxr}p|`zwE_`.JN+HN:W[Trra{\zrLjlWtxA^d+JO5S[Mjpdo\x|Wos[ntew{buyTlnQmpZy{Lqw1V\ CI6W\Yvzm}|hݬܛʐynSzHpxYv}zdLruOrvdu}{y|wuux~}{|~ytuzup{}|yyz}|qmq{í؜U5SE`$iakH6]et*r+k$i 9Z8_:^7^3_/g3`)b+r9h0p;vCl>_6jDZ7@E&@%3z't d SPHH +A8Ko:4ZSqdy_~vuoQgeOecc|ypC]\@B8:2XY\x{etmcrmpzy^ppKceMegWoqglqvrq_wwLhkDbj2Sb66d4(nYiMoY`y6ZV0YUMvrhnloyQbi'BM8G ?Q7N`Sdxiulvoyzq}yo|sy}ueww`rtew{i{^ovUfmXko]rsg|}Urn9XS-ON/UX:`i-S^*QX=eeKjm4SX&DN$BM+IT@\gZu|ebx\t~`{Zw{ij~p~{p`zwOnpGho;]i(IX /?%5 ,?.O`Qq]{PmsA]aRhef}wqs~u~vl|yRba-AJ&=K%BT%H^AX;N,P`Nn{\ya~]y}d}ssLZe!2<ڗȎ{|zm]`wxg^egmrqX*W\EM&W^);+?:N-Na7Td2NZ,GRJ_`dxvvsyVb`8GL.@J%?N&EY-Na6UgD`lOjsWswku|O^e!2:ڜГŎzk`dpiWHu{CpvTbaYT{]cefcT|~:cg1\b>kqEpvNw}LtvW}~`Z~~Wz|Loq[z|kty|yv}|y{}y{{~~̼lSYjN{8(Jh8"~MA!y)p *`i/.y'+o%cYM +I A5Z$`O{^zUlB_Azgɡ`uf_qeºļ½ýý½ia^7_a3[[\^xwHecQoolnbNz{IuvNxvMvpJrjn~}p`tu>U](HS,QaBQ4E+<%`a)IH!A>-IJLhi^z{]wvQlgQlgZnoav{Lel5S^8\h2XcHir\wf|lmd^}`~h}n|}o{{x~}~|utorx{xpXrsJfjC`dPlpYx{_Muw6_a8`bGmnKqrOss<`\8[TXynfypp~l|qc{{Rpr<]b$IR FS)N^-Pc0QZ,NW+MY1Rc0Pe6N73";QMcpcwxpuynfxx]oo`sqr}r^trXljk~zzfOhl̛zxwrodh܎ăwr}wtpqeLtv4\^8`bDmo[aMfj\vwly^xD^u0F3 ;N8RaThohzzzw}l|revnYiiObf3JP:C$BL,KP0MQ7UU:WSJc_auswxfquGbkC^iߪџŏ~~}~}|upqw~pnspkfagx|uo{ԩӇǁz|{~tpoY50$'*)558> +41= =1.839>H d 6'7'B%G']7rFoAf6lKH\cgyy}|n{rgtkRgjG^d(CL )4(45?%GP8[aEgfQome~zzqxY_k0JW/IVާɖ~vq{~{xvzntwx{qijt||~}|yxqpii^QWizĈȌ˚ڒЁxkipvsxqmsY3YZ4[ZW{{srfgtw}{{y~~tt|~z|vt{{yxw{xx`](t. +]jx0$`SFCJ I BC A,$( **. / /0 -**5<<Jr0"G5J3K3S2X3kAyKp?g6tEȈ\iFW( +    "ooyziww_oofxz{{x}wm_|buru_:_o JX#M[CFL:ahSnwdr}v|rjxeve}Vt|FimLmrRou_wykk`yubxpn|`olZeg^nnOgi:XZ%DG:Y\QmqNek9MT(DH#BD/NQEbfMim@_d9Z_D]aaut|zskymymzm{{jw}VelK_fC_cFcg<^_3Y\)V[(W_0[bAclYpvn}z|z{~isuSbgVkpXptYstfuk~|nh{>R[ 7E!.).9,GNUjmwvykvn^qu\qvC\c&BM>I.NYBdmQtz_|fr}}dnwHR^"9G!8Hࡵ{vuy{xwuu|ou{||slox|qtwvvw|z}zjbckrmhqsw}rlmpmtkcocMqoHji`}z~zz{z~tw~{z}|{ztv{|}yx}|{zxojt{|}{zvx|}yѩҧryAN%n# ZW\he^ _^U ][F3 ""!#,(,7;>BEZ =*U;Z=_@g@mCsGqBmfnLRHN4]cJkpZsxh{qtusg\|{[ywTqobvul}n}g|uhwps~lxteopm}}cxyMij1QP9WYA[\4LN.FJ9;79?C1TZ:[d+MV"IP3PVYqsxl{qqi~hy`vseyz_pwR`k8HU;Q\IdkWvyEml/[\LPMT)[dEnt^{nz~y}P^^3GH;SUJdeUonc}|ui{{eyxWjn,CK2<2:=B߮˞{}{ywtuu~wy||~wtuyxpqrnmpx{rvwpqonssrqmflhaotsku~zsw{~lbzk}|snz{x|hOwwOww_rxrjeky{rg[}~\~jt~tc`~~s|~ydKqrGmn_v|w}~vxofʗzಀJc6R2z6h&g hh!n,>(@0{1&r#5/E?y?;[,&@/ +'& (37AN N IIZ r.>#V6lIqLh=c6f8n=uFzPZ}[{^L:- +   4CJvo~yetojyv~|[kj:SP?_^X|uvswvopnxzuqk}Rjv=[f=_kGeoGemKfmUnr[sul~{qnnk`VxyRtuQsucYzAfn5\aDlnSyzY{z[{xc|xorsmd}zc|v_vncrop|zyvr}n{m|yktspz{rg{z_yxJgeD^]CYW?SR;SS*HH$GIFK*OW0U^"HQ KT.PZRouqe{y_wwc}~]wv_xuc{}`w}Ndq:O`'>N6R^Mks\}Nxv2bdLRIT"VakBFuNOfc|ux~zzrwyu|xwucuRjtTozWmxSjrTkqay{jpvttvnYuvGijDgiaiaUtwXz{^\zY~vYxpd}yk{{sun~}m|yjyrousy~z{upz{mrurz|p{}^pp_xu[tqUkiOb`Tc`VljFca?cc4\^7^e9_h)Q[*U^0Va>_fSorQklOhlWswLejLdhVrvKfo4Q_$CU;N.O^@bkNotNxv8dgJT >MFT'TZ/WW.SLE]acuy}wxgwtKa_G__Tlnav{h{_ns`pp`pmQa^JZZSgff}wx}{x~muxitpݜː|voqmnsqownehushky~{|||~~~~}khejbVtvCbd@bc]okSut=`\;^ZLokSsnPpk_zp{}vpimotwk`dipekmkvmjmv{xomrsn^Pw|U{~l}zwodHmu&MT(QUGptgmmf_^[VW=kkIIFH+X[BmsQzOv}SHtw2_b PP*ZZCssHvt5ca,TS:a`RyxclxoRqs7Y[1SU4VX@cePvweeQ(VVIJ:ceaqxy}~}qBei-PTCfhi̮QX?ɠlvEmA^6_BY=P6G(=BK+G-B"h%q&w*6(<.l*o1"SEl`[Os7,t8-~@1t7%o2L4M1D!I!b5p@l?l>i9q@tCsD|Pшe|`^Fl%1    +FrnBts.`_IF0ZVNupfqwhBkg4\^Q)DT2Y:R1A!z08=%H/W@Q9S=ZBJ/N1]={I(s=N+c5g9oCvMrHi>b4b1b8l9p7z@‡[v[@3S/% 4M(/V18P).O"'ONSVKIKJGFB?><;503,07 +1 4 9 2 (%0%,,0+)+6J%,iFLmpl{mx|w|uk}hyn{s~}~{wz{|xtn}au|XtxY{}Uutajc|y`vsf|yorrbrqL^`Uhnnk|apsiwxv|y}u|uv}uy|l{vZllYlp_pw^ovUdkVcihrtjorbdcbb`gssdtsVjhPkf]|w`}OqpDfg=dk7_gIU)Td4^n,Sd!ES-MZ1Wd"HUDO%LS+QT7Y[Aa`EccEgf:]a)OX%PY KRIP%MW?L3C APD`k]rucoksxq~zw|~r{xu~yr|ltvkuw{qx~uz~}qmaܟȈ{xupkdifjme`ZN~Wdjqyw{{z{fUutXz|Y|~PswYb^jmp]{}SptXuyhoeee|{{{~~wxz}}oY=kk4gh8npZiec\^`aefgl`Dqt3`c7cdPttfj}hi\Ajl.Z]0\_>jkJsuFmrOux\`Y{zX|z\_[OvuKrqU|{^X~JpqAghEokKxsIvqM|tGvpR{YMyx@ieCjeWzvlppeOvsAdhGoqHqu>kp2_d6agOx|_ZXbnuuvwptfEdv>N +8G%T^FruSutyʀh^U/&Gd+f|X^6\5]=gCjDmFb:U0U2N,[7\:W7[=T7K.cE`jKhIrTe}]_=S0T0lDxN[[{Ll9n8wAo=xJwNiEM0[(5 +*' !*3 = M\ XMB >@EHHIO MILLGGGC>?<685@ 53 07 +%9 V4*yUGZMg[h^pb{gjR]@b>$H$ 0 .K5(xof~osru{{~~mVnrWlqdy|}up{}{zp||n~}wypVms?\`EgiZagkmosvx|fvuRdf\oungy}_nqgwwyy}v}uvw{~n}xXlkNcfG\aBW\?RXL]d^mr]hj^fhpvv_mn\nn\pn]vra~zf_}{QooIjoHkq:`i8`l6\i=K1=;FBO"HS-RZ=`dKmnVtt^xub{w]xsOmmGhmMrxAik-UW)NVDM7C_;\6e?b?eBc@W1d;WȍcѓlߝzߛxuRV3_:lDlIoG|LTSIOŐ\НpύjdL2!P *.2 ? P\bjri` eeQ HOS Te^P QN +GJN + HAFB=B?B + 7<+"K$o_~zhjXYIQASAgOkM}ZX~W|XjJ{]Cxaxz{`zwUss^||y{mvZaikrx{xzvc=`bFF'QPGqpfjjku~rbtvbuyfydvzewyov}v{xzz|{o|YnoH`dC\a?X]9RWCZ`Xmr`swbqtiwzdvz]qr`vtazv_zug}iZtq]yz[y{RqvBcj9Zc3=.9;C!CM=_hQrw_~nttyw~i~wh~s`}Bea;]^:[`*KT4R\Jch^ppmzq~u]knP]cTaiiv~{x}tyalfbnncnpvwr}qzuyzfnpltv}de_ᕻ{nwz|~rv}~u{zrnppnorkkjc\TJObmqz{w~{s_W}~X~bmbOnqRqsYxzVxyWyzcme_[{z[xvhnpwwxuvyz~ywx|{{xtoptdOww7ee7ijBsw]jqf`c]|~Xwy]|~`dVxwSwwX~W~Y}\{\{vnmfdkojkrxst~xwlwq|wkyi~wo}m{p~lzkyn{m~z~stwmf{mk`}yXvvcjZ~~UxzZ|~Xz|f^SzyW{yenxyx~znkp}x\x|@_dDelXx\yRnD^kRp{9[d=aakbSY=:>#S'O@\JZAlOjI_:\5^4\2X0]7c=_9_9jBnCi:d2~MהgْhvQW1L%i=Z\nAm6Kcȟiϔh֐liXCU"01> ? 8I J N R WZ]^YTVT IEI +I +GU Q DDEDHFC>B@<@=/.%'I"o\uczK;Q&9 ((9A>D M(U/uL6v]}׸ɧŢħwkjwwo[hqQYdjs|z~q_}Ntu:fg*XX0^\Eqp]^]{{gx|yzupk~bu{TgmTgk_rveyzp|wvj}{ZrtMfjC`d?\b9V\>[cNkqYt{\uz_w{_w{VnpTijUkh]spl}tm}qp`xxRkoKdi3LQ1JO7OS?^cart{|x}{}~nWumVsqZxzTqwZu|d{j||vyq}}brrYkm`rtwv~r{x^llSabapsjy~n{grvjsxrz}jouBKRDMThoutvsbdaֈ{xz~|~}x{wuz}pjqsovsillede[Vbjinuz}vjwuf]XVYe[~HjlNmp[z|`fhrqmoqxyg|tyyupwwwvqpu{vooutkkr^WIvyK{L|~W_ka_c`[{z[}|\~}]Vvs[~za_~cWwrIfb_zufgiknortu~u~|{~|x}syn~tl}snunus{sy{{{sk|t}qi|qkd~{`zydf]{yfpb]z~RxyGooNtublw~tmm{~ky|ex|c}~dloa}LmtIkwLm~OnWtfUquB^_s֑v=%%P38' ,9Y)N;gQpScA_9d:`6[1b=a=a>\9c=tHp?Z$X$e4a6V/Q*Z0qBL|J|GP̝eڦtΔlpTT>k("? +",AIJ N EKMJMSQLU ] VLQ +YVTWY[Y SU Z[XWSTX\\K F}]RkZoXtjj-LPS& R% 8> ? @/#$+B]3#vP9}cѯ巪Ɯ{ovi||ollNbiM_ict~j{o}td{NmrBjlBppGuuMyxWWz|IklB``Xppqm|_mpbpsWkl`tumh}Mah?V\KbhWosl~~v~m}}]ptUlrQjqIfl>\d:X`>_h>_h8Y`CaiXu{`y}ZtuNffRfdgzvvtq|y~pi|zbvu^rqYkkWii^vvw~xy{{|}f{r_ypb|yc}~]xb{h|p~ppnlnmmvum|ypru}sm{zmxtN^^IR[dnrqkonz}xy~~vw}{op|~w|yosvnpvnca]Y^eryrv{||}vd[p}xg\XV\]d_Tvx\{}inqqspr|}f{k{{tuiYwu]zxgoqortwsgeoqhabYZR~RM}R~Xh_[_\~Z~|]Z~|X|za|gegqc|PjgZtqc}zdzj}rr~pyv}}z}y|y{vy}vyjzom}rnum~tpwryw}}|{q|h{uj}ywqi}dzxXqn]vshc}zb|ye|moa}ZvzQv|FnpNtw_koqldb|}bwzcvzfx|gz~g|f~roc}~Zy~TvHl|FhtPqze|AWTXlcƺų=) ! >!&0/ %F o<+`JcG_=`:]6^7`@X:[@W:X7iBl?_-PDG U1V2f=}OxE|DƓ^umoUL9d&? )/B RNHP\AL S U X ][Q +Xp'p* a`b^]e_cf^Y ZW`]U Xc k("e"M +X,!շR:JcKn@0o_d/'CK}TRlfT1+/,.; W*%NGaX~OE\6-hKCvrj|~\txE`gPmuUpyWoyaxcz`yQowDioGnsRx{\bTsvJgk3OR4LNShi`uvShiH]`IaaOgiay}czG^f3KU?ZcTp{axj~qm~_pxPcjI`hKcmA\e5Q\/MW-MX(JT%GP1RYAbi`|c}~^stdwu{t|nzvv~~r~zs{p|xwxzw|h{wRg`Wnh\ur[swTlvZp}`tj{~~hlm`eh]iibrqp{}rm~x{jvt[kkIYYKZ]M\aL[` YTX` h +ogTd c ` \ USYb cW +X + +X P QS MZ + b\ +X ^ Y PX +V X +UY +Y +[ +^ VJfVĩشѮdIM^ HKZUZ +SH eWֻXBZ+~K:PCa(471= +]-)`67L(,D#*q`fesvBad6]bAhobdgnjd|_u]o{Zlv[ltcwg{XptUmoekcf]{{c]y}Fah1MX,IW,K]*K^%DX ;N2D-@QHYkK\lBUdDWfEXg8N\6P]9Ua+KV@I"CH.OTB^_Mgfh|{yyxv}lvunyuitplupvx|ovn|~~iyyVpq]uyqoez{bwxUlrOep=Rc8M`9K_O_op~}r{ajqaj{ZfvUbrSalantt~wwuovwenu\gkSadYiicuu{q~R\f;CP5;IDLY?CNDCKBBJ=@IFJUPS\KKSLKIRQOx~~rpoovy{uyvg][YX> dm#ho1v}KT^]RyX$4MGVirudtTdsQazCSj4FZEXgfxnsu_v~Yt}Xu}^{b}WpuVoth{itx[efVb`Ra\Ra\^jfs[_kuIDI`fcuyestaqpUhfK^\N^]VbbnzzbelKKW=-%#6(%TFC}~x{wruyx|pjqy~{qkmrk]PL~=t{0kq%bg"af4sxCLP[[SvxKnpFikHkma~gox}vwtvto~q~xyu[ut>\\)KM-SVDio^lkuiVxzVy{eg]~[{zRyxIopNvv`if^ZRsxOrtOvuSzyV~}NutEklNtwMstU{|KqrGjlQst[z|^z}[wzVrs]yzVpqLfeWoo`vt`vte{yi}e{y`trh{ynfyw`rrZnmXkoav{if}[rz[nuaryetyguxn|}tso}}m{{iwxdrsitvdoqalnfqsftw^mrUfmUhnVpq[txaz~f~f~d||b{xb{wb{xYomZnlfywp}v~x}v{x~s|o{p}p|lxxk{zqe|vlzlyiyvm{{n~~hz|ewydp~du|f|zd}yfzxq}}F4(f]LĽϺqYQ>tePnnpn~xjbWRA>k&!` UF>@=9;EJQ +Y agj n$ehjbXX][X[_ ] ^ _ Z\ ^ XWZXY[ +\ ZVW] ` + ]]`b _ Y[ ac_ _ Y +V_ +fd ^ \d Y<mB2ܚrXc + aAd:.xc3'5C1 jUɶͽ_QXX \XV"X(L2.@ STC:% A,1t|ush{ZnuQisMkuDfo;`fCkkW~khj}zvqq|gtzq|mx~kx~ct{XlsE`g6T\5W`;\e?`iFgpRnyKfmUjogy}|tt~xud||NjkFbeVotnv~sO[[9GJI[_ex~mu{sXls@XbFY_UhngztwRmt>[ce~||tsud{>Uc*?Z$B5 !9%:KBZfA[h-GX2@-;+;7H6OcLbyThVgMl~.O`&6"1=I)QY(QW>C35D`cpztauvK_`DSV@KEMVSimldeg75:%'#1,(7#+-14OTP^[V_VONA9-7&SB:~}~~sruusuuuzt}~tpy|wplu|~{z~sjefjfZTCvz0ei4kn8rt9psBz{H~?mm>jkS{{_Y{|XxwUutTtscjs~||zsrpntyvb}RrqGjlJouTybifttkedZ~~Uwx\~RzzRz|Y]VNz}R{}W_Y{}[\~_TxxAdfIlnY^MoqIhjPnpYrvc{av{Zrtbz|]uwVnnYqq]uu\qrZopd||lavw_tulnh|}`tu\qv[sw`w}`w]qz\pw^qw\ouky|rxs}~jtufpqfprfprfotdosaorcrubtxQdjAX^CZbJfjUnr^w{c{}dyzcywdxvcxsdxw^qocsrm|yw~}}wxswmvozo~{frr_onfzx`{tgz`yuXnk\pofz{g{|cvzavwi~d{qltM2;ukܼ˪ɧζӸçpk[dT\KL6k;%e6&T"H +MI +@9 :63CW'_-$^)%][_dc gk"g"V Z X +TV`e +cb e +d[ ] ^W Z` \ \ _ +]\_ _ `[[__\^d + +b ]XX^ \ +[ + _ ` ^ +ekic _e cDN uj[S^ +VSXC zUC­p_7B 6 +BzpYRP` ` \ \ i-%e*$[& P!2*HMJ3 +2 W8@rxj|YlrH_gFck;\c.QU:`aNutgh}~j~}shttnxyrz}owznu}krzens`nq^ptSkoLhlSpve]{Zx`}]x^sxfxzwuoyxistfquWjpH_eOhojxwGUX);?;NU[oxjvvq|tpawZtm~vuq|nIdm>[cbz~vqtuj^w~9S`3N65/ 1">L'GT;J 1A(8'8 ,>2G%@U5MeFzgvyRekQelMdlG`eVosgpoo~p|grnxzqu~krxbiocmoftw_qsZor]uym]zKhpHdoPktOcjQcgaorjuw_hmSZbIQ\4DQ'=J@Vddyotwdru5DI)0$:EBZf\tstirwnvyusuvl{p^ry=V]+%~~{uqrsfemldhmicdejquv||tupkjd`dc^S{Lt~NyRO|P}TS[hrvlVvsNnkctpmpvvxwe{xPfcNgc^wsh~lmnopsqj}ilkaW}^oyvmfgd_[~W}Py{U~U~Dps5^b;ceQyycpikonh][}~a^||a{|nsnpvyvzwljk`x|d}jb{cojglh~f{|i}~k}gy{dxyg|}g}oppo{{pz{t~vtm{~l{~g{|`xxWstNkoMlqTrzUlr\qvdw{j||m}|m|ymyumxthsonyus~zr}yr}yzynyudts[qoSmlXqu`w}_v|ZsxWtxLtvKsuJpqPrs]zxi|xy͸ԱoOhϪḜ٪pgWUE{=.\$MV Q A@HJGA +> ; 5645 E \8wRq̛z}dUFt.,]R LOSRUV ON P + LLS Z + \ ] d b b ] _ bZ + Z + b a +d e dfh h abd c `]]a +_ dea^ Y +[ +bebe` _ +eb c Z_V IHLP O<Q&}ϮzM8D\U +Su#']`[JA _jn^^-ZH{ZIO*87=< += B%`LNviwzkzpns{wrqo{yoyxwtluz_ikhrtr}lz}etw]osYmtG]h.HU">L1KZ8N[EWaYgpUamOWdFL\;BT/?*;3J\OezPblUho`qxYjq;NT%N>J+LU6UZCacTrr^|z]yzZwuYvrkz~sZjjHSUBJL687'%& + + &9)4LEMAAC:@ :2'+>d9(p\Ǡy\dDI2l&U OO O +NTV U +T PJJQN JQ Z \ ^ WUa fgf] Y +_ \\`bf g c ae +i g c ` ^ \W`b[ W +SV\ e^ _ ^ +^ +_ +[ +] OY ] UTYQ Q =wMAܶ޺~gG OZ Z +VLOLNPiea QD\3`Mtcq?6B 07=*2{lg{}|x}z}{m}}o~vo~ut}|ytgwwYghcnplvxluzlw}cntL]g8JX!8H)=2H)?TEXiRbrP`pP[mNUhBJ_#4F4D1K\3M^-CP6LWK_hVipMahF_fPmu_}g`vGYc8FQLYanw~z{zym{~YkoI]d(CN-;;JAal_{g`xz\uqId]7WT:\]:X`(FQ.<2='JP8^_FnnJsuPy}LruLoqSsr_|zp}~wxqO]`JW]N`dN`dGUX>IM9;6!/<()5!":')M=>J;>B=:JKC[]OgdSobRq[MlUG_FB:!}yqoopqngdorkkdlmlid]Z_^clw{|}dQx}@kq@krMxTVQ|MxGq}CmyJtXVFqwLsx[ittpuvh}c|ykmjie~zd}wjwz\ro>WSE`[Yvr]|wimf`}yksqrhif`\frskc|yhi]}z_f_[Y_c_`jsurpsd~}a~|ph^xwSkk`tsj||orl|{rtul~k~qjaze~^z}jfchlkc{h}ex~m|vtl~h{c{mrurm|wp|xpzp}q{}kvxgwwcwx^vxe}hbxbsz\nrapssz~syys|wlupepl_ki]kkdtti{{hz|RkoTsv\^W|Rw}NuzDmoPrqNnkSpkju˾λzz]`>h;`,\"A +443@??:? 9AI FF + > + /$*iJ8nөݴx^Hh0OR SPRQ UTR +QNNR RRZ S HOY X W U +P] d a +` + _ __ +ZZ]ah f _ `f i e +`\ZUW``Z + W X + +\c_ UX ^ +a _ Z ^ P Q +V[ +YbU P5g^åTG] ] Z _J G I T L V RS +T GU&P@k]\Ni9-5+## iXP~}~z|xdxvg~xkwgswvzu{scwvSccWefZdf\ejipxfmwUam7GV$9L %= %? 6N@Rj@QeCReJUiMUjBMa(9K)@P5Q]#?K6D%=I6LWFZcG^dKfm]zkgIdo!8F)87GT`mupz{pvtoz~qhw|Obi7OY8F -=?P3UaLju[vay{b{wEc[3SNImkTvxGem!?J:C0SUEli\gjv|w|xET[(1,7:LVL`gCT[0=E%(!) I:3WD>R?9O>7PA89v|tmpkgmlilqssodlnnmic^[aemuwtlhmaTyIt{GxQZW{X~WR}Ov{Vw~b^|KkvEhnRw}fpvzym_|xRroXzyghf~jiksxe~PojZytnoqqkd}zf|jknnke`~~chf_~\}\}gmfc`TR~Qyy[~efjnmmgimigjklbxvawtg{yh}xl}pm~skez}g|h}ezcvzdw{h}ja}Yvz^}d\wRjt]qxau|knl~w}ryfkoqhvwftul||dvx||nqzdksgv{ib{^tfxcuw[mmWgg`nouwjrunvyk|vgwt^lmWdjZip^quawuc|xZkrXptKjl9`_9b^Mpj\zr_ypnpĶʲhbDvL3Y+B 70069B + 56: 7; 7A3 +28 + 56 +;]F8jVoշ۷lWB|3$W +KMW V U XYV QONIKSX +V + +RPKNU S QX +WT[ +] Y]] +_`a _`h ldc +lkd + +c +e`\ + Y [ `^`a`g` Y _ ` ]] _ f +VX ]S +RTNR < g]˧[EZ +[ T_U R W [[W V V VZZT m3'hZxfVEU05TH:|~yw{jxe~zh~cvjzksikwfjv^gx`q_z]zxRfgVde^jj[ii\nrXkrK_hEYd.DR)<&;%;P6OcP3B4B,IY'DV1M[Lel`zyRno6S[0A!4!;JH^iZmsbtxdvaxeRt}/U^>J9HEV6W^HekZrtj~czt6QL&FAEiedWuu4RR0NNKigb{y^qu%.J=,MG/MG1b[HuiY|l]i[qTF^<0>>xyrqvtmkqrtsqsqmpntnih]abgjnqg[WZY~[XPL|LvJp}NtLt|ItzPw|_lcJkt:]cKqt`jq|zkZxvQqnSwu`fjoppv}rhqwtonnoohbzd|kkhcced`~~`]|ae^V|Luy>kn:fgBjjTwyckuyqd}zbzzgoomkjnoni|h}xrui|zk~mlji~i~fy}atx_tyZrvJfj?\`DchMjpKfoG_i[nufyk~i|kzn|r{t{i{}k}n}ri{^sx_x|]y}\ovgt|ls{krxkvxewwcwveyzaswK]a=NUM^efx|l~fxx_rpgzvdts]lo\iq^mt]nu_stfz{cwxVliA[R7RCG`Kliwb[Hd;'F;2(*35 +34> + A :? = 2:HB*#+)B"pYGο缩Ǔ{Q8_" L FIHS X V +X [ W S R +R OMNSY SOOKNV + U S TTT\ ] Y[Z[`e e ad jljif aa +dc`U[ a_bfbc_ _ ea_ ed a UY [R V + +ZP O +K`Tȶ۾޾ڴu5+IX]X ^[Yag n'#l%!f!]X YU JS +d*N=fVm]mG:' `N@ķ~r^wtUqr[uMgvRiwWisWfmS`fHYcF\iNmhWqpVim`nqfqs_mn\kpRelOclSgrEXf)>O!6I0GYW\8U]ATb0FS!7E-? #86H:R^OhmA_a;V_*DQ2B&B&5 +4;yvtsturikqtrnnqrtnvoptbekldbdXMy|R~[RzIt}IwK}Gy@ly:_o8^i[_A^bHekMfmNem`qxopi{kz}itxisuu}oz~lw}dqykyeyNirAcl=bjNsye~nxfindjjjvrj~ugrpTem:LVG[fYmv]uw]xsOjaXicUebVddcoop||q}{p|xtz~~{y~xt\vQ>_5%M> 72243 +2 2. )*: =: := = < = &K&uODk\޽E9q']QJI +S S T OIQS HNR Q +NO LKT + PNNJMV T +U TVWa c` c_ Z_ +hic `htlc + `^\^ + +a\ W\ + `X [ `[ Y X +V\ +[\ da +] +PV W MS ]WR C]Qò>5JX _[Y_]ch!afc[Z `_U O +OU _'SEj]fB6tiƟz|w{j||\uzQowFfu2Sb6ZfHipPlmNffE]_AZ^@][Phj]pvhw|druVdgQ^dM[fObiZlvQep6JU'=J0FS5KX,DP5NUCZbThqVimRfeLb_\tt`y}ct{YgpCO[2 % 8-DVLhsPmqRmvNdoCU_@QX7IM*;C0BN9UV>\\OrnZx\{b}c{g}g}jwQh`E^XPkfpwwzczpSngGf`$AE-2#.:E2MVCUWT]XX[PPGB;0*/*" ! # 0"G;+[POYHY`N``^riYn_iwhso}{bkH\@16$CH@Z[Rc]ci]ijZeZTJ;6- 3!E5(ZK8hZ?l_?n_@P;&. +3;;kjtthgeV~Kx~PZdaLArwGw{WorxzrruuyqjdJu{%!$7G+*@(&4!7$I7#aM4^I,O7B%98F"$J&(UKzIxO~YaW?kx2ak8js:ny=v?x1ho'\b1cjL|P=irDov_d]TXTV~\W|Dlt>mwL|]^Ku;grGs|W]~a|PloNnm[{xozvoi~Zws[zua}gotqfVxyHonFnnPvy\{ekhckgcQmnKgh^z{`|}dbih^z{_{|bYwwZxv`~|ba~^~}\|{VxwRtsVy{UwyNmpOnpY{}Ux|=di+TX@hjX~bZy{Zvw_|zb|{c}|d~{e~ZtsPlmSopLigB_]C`\Smlc}zf{^wsbysf|ycwu_sq\qldxv^trNdbNcd^trg{zbvtXppYsrSpnMjhKhfMgfUjk_st_srdvvh{yhxwgwti|xjxf{t_us^st\tx\txKdh>XYLfeYvqi}qtwtzpkm`jkY|zc{j\Xií|Ĭ|ӵʭucYX{J[0wAd.Q> 4.)+22 ((1 2 +,*, ./ +% 7R;-}hysĩհۻ|H=5-R4*˺vP ;D GO K CEGDDT_VP + Q OMQS R +Q S W ]Y W ]\ ] [ a_ ]\\ a ] Z +] WV^ \ + V\ + bY [ ` ^ VXbXX^ _\ TNW [ T T LKU V VZ XM R YS QJVM +9mG<֯yV KS Q +U +VX\P M +\a[\d&` RRS`j(g%_V +URX*@ 3 VB9vmvuqR]_H[bTvwGjp,LY2N\Qdr[itXenM[f-?W 9.F:TeVnxh{q}}q}}hwrjyrj{qizppy~~{ezqbvwRfg4HO1? #: +"</D.IZ3P^6D'CNJelUns>U]!3G(E;/ + 8(=PTdq~xi~BWXPfc~xtdjh[aadmlmwvr~|Ze]grjkxoitl\dYRTG\VHbYHiWMM92;0C%%G+(9!-9#P;(bJ2R8B#;67<@K}@pz8hr@BP KEHH DH ]d !VO P +R R QU +X X QV _Y Y + [ X Z +W _ + \ +ZZ\b ] `b] \ + _ WUdl] ZfiXS``^ ^ XXWU^Z +NPRPRSX NP IS V MS +XT QF> a2(b!LNNJOS O YQU +Y +^X Y i'j'ZQOY e!bf] Sb(sE5kD5G*;(YPA\^SP\ZYnqcQwx%EP 7G?O_LXhERb7GV-I6/K;ViSnwg|m}|vt~mzsk{qk{pl~pw{}zbyq^vxXqu:U\*GU;P'CY3NaA[j1N\0@5B-KU3PX,DP0F$A (C454IHZhu[utG`dcw~xitz7NT/14MJl{kz`~vTsmLg`_vn}amk>GF?HGV_^dnmiusknetzpu}rjpfSVKGE9SK>\PBE3'>';, 8D'#J1*F2)G2!aJ8eL6H,63-30 . +=t{=t{2dmCs}N~SL|@r{Aq}@r};q}=v>w4mv3jq?v}FuDp{9ep6aj@ktCoxBouCrxDqw@krNv~Y]RxFnvT|XxPr~GluKry^lrwqd||e~h~jzn~}qwmb|ya{xayyj|~tqlKjl9]]HllVxyVtvc|e\z|a}~ngPlmC_`EabUqrine`|}dhcTxxJnnMoqWy{ea\~_TvxGik=`bSvxQtvOrt`cTwyPsuQtvMprZ|}QprQqpMkkOljVsq^xw\vuYvt]{ya}YvtLigJdcSni^ytfyc|vcztg~vkykycwudxvj~|eywbvtcwu_sqautavq^snRicPie\uq\uqZpm`vtfwqm|h}xcyv^uogvc~m]xeG__C[]7PUSnuUquTqmZvjOjYgz^pwlW_/eDbD_I§xŮjUMA6h'~Fn/aM +?>:643 +-(+3 ,,+,, +' ##;fK6x]z̪[BU > > yoǹܺߺr\8$5qθ̯~ZJ.A II M +DJ G +BK \]R INR VXS P +X^_eX +W VXWSVW` c +` a ^ b a ] b_ Y a`m^ V`iZ + R\d_ WX ] +Y V _a +W[ +TZZ X W MT +P T T JNX PNKD@BLS R T NLSTU +_U QP V bh"d[ VVbgl)b#a$\#\/zV@iQp`I`XCdcQ\dUbreevNki7TX7?2HUJ[k?Pd(:R&H,I.CAM?^cJbdUaakqo{|}~{}y|ysayyWx}Knr+RW'MX.Sc=]lTozNek1MN4>'8,? 0A5B7A3> +4D 5ECP;]gRnrmg|}.JN.93MZNdq\\`|}j]qr?NQ-0.8:R[Z`ifenim{nt|ovzkqrbTUGNL@KB=J::4 <&6.:XA1^H:m\LgUAaJ:_A6;(*.) # E|Cz@r{RQK{Fv@r{IyEw>r}>r>r}4hs4fo@ryFtGuFr}Eo{Gq}Gr{DpyFr{Ju|Ow]aaX~KqzQwWtMmxCenFkqZ{hmqj~_wwd}hizjzyk{zsmhje}}k}vob|{Jik:\]EiiUwx^z}kkeb~keWstUqrXtu\xyb~mh_|z[wxdneTxxZ|~Xz|]Z|~UwyTvxIkm@bd9_bLruMsvKqrY]RxyNtuNqsGkkPrsKjlPnnPnnSpnYvt`zw_yvXuqXuq^{w^{w[urXro`{ve{gzc|vaxrezsh}vjx_rp_rpcvt_rp^qobusatrexvf{v`wqVmgTmi]vr_xt[tp`vsbuqcxs^sn_vp\vmd~s^xkZufNbcQikLejUquWqrQfaYi\lygnfZSn=nJyVM̭mƨleQz;x8x:o4a-yD[ H C<8= <951-//.4 + ))- #0 T8*s^վѽz|Ѵӹh?-; 7-b]ڿݻ{Q%#"pXNԿ̮ǫzh> 6A DF>I L J R`bYQ W +[ Z WR MN`] ^PUY \ +Z W +[ ] b b \ [ X Y US] _W Z Ua^Z + ] d]TTeaYXa ` ^ + +eedbQ ZZU W V U MMS +P PNRRO IEEINNQMKPPOYH LN +N +U ZYT PS +]a!b$Z[#_'V d3"XD}j}[od8QK)GE*IK@]aOjsD^m2M`8T0I2E"BM0MQ9NOKZWalf}{wuvux~l{TllDfo9^d IM*RZAisSu~]|~Olg8VX:D&6 3&75A$DO)GQ$JU8]fUx~jgohxw:OT,6'*:#9G*9'%9@Hdhp~rXpp8VV)MK/VU,PPBdcYyx\vuKcc3HI(::>LLZfbdqjdqhcoabj[km_stdfgYZXLLC>A32D0%N8+O8*P6'X>/nWGpZL{hYq\KbH;T6,7'$##"By>s{Cu~VN~Cs}nz=my6eo4ck>jsApzFr}MwQyNvNvNyMxRyY_Y{TvQs}FktEiuTp{Tp{LmtLmrYx{elnez{^xuhpmj~|i|zph~hmmpwnayyYwwLlkRts`jrkda~|fda~|fjgdfif\zx^||ghb]PrtQsuTvxSuwNprCeg?ac@ciMptQtxPswUxzX{}SvxNqsMopDfgFhiGgfRppYvt\ywa{ze~zdzZwrTql[xsdzdzc|xc|xb{w_xr^uo[rl\ql]rm_toVfcWgd]mj\li_olgwtgwtk{xdyt]tnUnhVqj\wr`{v`yu_xtautaus[tn`{t]xo^ypXslYrlcwx`xz\x{Yww\uqVdWstbyb_oƩoc_ǥe\Kz8p,o.k4X/n=g1["H ==;66 286.,38 8 0 +,#!7hN=e|ȯǯs^qX9rZ>ʵ׶ŭԸqK@,0&mJHҴ۽ܺˢc7,)$P3-ʪȪ[5*-<BAAGL P \h #dZIP Y Y W +Z ZT + Z \bU Y ] ^Z + \ _]`\ TU RZ + SQY X PR NP YY V + +]^W PY ZUQY[\c lt"$lTZ W PUW P FFHLM BLLLL JIKLJNKILJKTFLO +N +N +Q +R +O NQW `^\Z^n0!]$X%e6$~TDŲŽ[k^5OF4UNBe_RtuEgp3We'KaWT0SY3X^'PR:ce^pp^}nIef+JO -:#21=.OXLiqXpz[wzfzykuzy;LS&1 +!103%8!2'$2=8U]Njn_x|^st]qrPmkDbb7YZ0WV7__6]\GkkOqpTrpOljD]ZCWURb_dsln~slzmZeW[aSln`vwgnoaXVJKB;C52XF8^K=gPBkTDoUFv_OnXJmZKlTHhKCX70>-(!& + 0-OI~N]SQHwr:^.}G#e.TBE A>? +> 9 9 +93.)(&#!,C'nSBxսֿzcsFvT.a?#= 3ze¨ʯټnd1 2 )R,)ŪҸϯnF:.,:̬Ȩ¨{VF.=C@GIJM +V[V KWWZXR R Q HENY OQV +X V +Y [Y + W S MRR X PPS MGLR KQ R + OT + W S OL XWPQQU_ ejiUVTTY +O M IH??I E@BCEEEDEIK +GEIHGO HGIJJGFDFGHW X Y Q P +SU YS Ig>,r]uqUl\GcURqiLnpIku8[I;]J;gQCnYHlUEfQ@[E7Q>/]B;mNIa>:F .0 /8E+*@&%XUTRGv~PLx>jsCksW[SwW{_`_^[z_~dcdd[|\aaacXvKisCakRiqc|cUqtVrufnkhil_~\zxilikowojqqoniheiic}zge~`}yb{hhc|c|f_|wXupVup\{vZxvSqoYwwg\{}Utv[z|^}\{}WvxKjlFegKmoPrtVxzTvxJlmHjkJlmHjiHhgHffGeeNljVsq]zvd~{g}i|dx]xq[vo^yr\uo\sm`up`up]rm\pn^rp\pnWkiVigWjh^mj_nkfupfupgvqgvo]leXg`Qf_SjbVoiWrkUpiWrkYrnVok]sqc|ya{xZysOnhQniNidMfc=ZU2RMBidS{rPl]akSdV8dJCIJhW;56~9w>eF CI J +M OR U T R J @<=?K Y\g ddS QR S +S T +V R +T P LR T M GKN + KGI OL + HKO N IHIKW X RRRU] T P\ V QR\^TU +U WH@N TI J + +J + +K L + L M MR + R + JHOOMR + L GI +O J +@@G D D D QQ S K KU +QM NA:H sN;up|heuh_sqgecgs{}~zy]qeF]WE_Ta}oas\zrpuk{{n}xvMZQJXXTbe9J\%9+332%:/?*=);&@QB^lB`kGem>]`;Z\1OO@^`Xvxdd}Woqavwcwvdwsfvs`lj]hdgngntjkqe`fX]dThj\trejfZa_RPLALC:I<6O?0UC5aN?eRA_I;R<.M:,I6(S73dEBY62D-/ +:I++V88P22PRPEtz8ekGryIqyFnvSxccXx\|ffdc_{b~hnojabc`~edVs{NksJhpWnv`y~[tyLhkUqtimg|}jmiSwwOnpguupvwaXtuf~kf]wta{ihjla~z`{e`zc}kkhfc}`}x^{v[zuUtoOniNmhYvreTrpQomYwu[ywYwuXvtRpnPnlQooRppWuuXvvRppOmmPnnOmmFddKiiKhfUrpUrnYsp^yta|wf{azv[vq[vq^ws]sp]qobvtbuq`so^qo\omYljTgeUhfXkidtqbroeurctnduodumYjbSd\LaZTibXogUnhWpj[tn_vp^uo_sq\urLigGeeHfdWtpTmgKbZ9XP/RLlB,N"H62-)!M34ڽеL()1$v_Qʴδ̴sg5.%fPBªƬ̳vf@ ?M K J DBDI K +K +K +9;G X$g3(w>5G?JCB=y31o)'ZYT O +KMO LP O L Q +Q +K +EK +QQRJ + +FH AFP N EEFQX VV] a ` +c a WgdZXa^Y + W W XN + DM TOOOQQUWW[YQPX X U ZT R + W]UKO [STVZVT T + X ]S JV[Q =Kg<3nby~q|os}sz_uifyw{ZegL[b>OY,AV*B531%='>P4KY/DU4D"]`1ST9WUFcaWoq`uvfxz_oofuretqr{vmsohmibd_\]WJKC;=0GI;]aRqrdzvjjfZ]YMMI>F=4A4,N>1\L=fTF`O?R?1>+D0%L5-R62Q4.I& F9 2 +9H&'S10K)(R}TWQ~FqxOwOu~[chbYw]{_\\ffehnjb]bebf`}RouWtx^}g~f]v{Vrvb~rrllojNtwDej]znrhik]Yxze~ifYvr_zghkm`zTwq`yd}lmjmlazYvra~zb|YxsOnhPoi[xse{QnjMjfVsoYvrWtpVsoSplTqmYvrVsoUrnZwu]zxZvwUqrRnoKhfUrpSpn^{wZtqYto]xs_zu`yuazv]vr\uq_xt`vs`trdwufyugzvfywbus\omZll]ooassdts`poaqn_olbsmevp\meXiaRe_[nhYngTkc[rlczte|vjzbwpTjg:TU4QUB`b_yv`wmUl\PndNohTwqRsl;@>@=96 0,/$ 7+h^CqŢïmmGxT2c:H 7 3/152 )& ;ٽռϵwR?05&YE>ȱȱM> .M1%׽ůoJ +:K I L +FDDEDIO n2*E=XLbTaSSH@9x5/bV UM Q MJJKK FH F CJ + J + J ENNPTI +AG@GO + M J +N L VWR + Q Z\WW[W aXO +L K F +> A 9: 8037 014 7 +9 ; = A GF>>G G D H BC G H C >C LGF G F D >C H B FIO!LQHMEK^4&\Iixz~hznixsYfn1AN/BQ0EV'=T+D 97">'Vb#:H.>4C5Q]Fck?^`4TSGgbSplVolVhhdrrcokfqk`kcqtmlohmnhXWRDD<''79,cfUzxi~xlqk__[OSOCE<3@3+VF9fVIgWJ\J

2:&B.%M60U<5H+#?EC6 >B B :PxMu}Q|XS{PvHmv\~jg\z[wb_Z}ZiibYzV{Ms|Als@luMnwZ{^|d]zPmq\y}ivqkjtyxypsmLsx:]cIgoWv{]|QtxIqsQ{zWY{}[wz\x{decbY|x^|zja~Svr\{uitlazgiZysUonXus\{v^}x^}w^}w`~vc~w_zuWrm]xs`{vZupSniMhcOjea|uYtmTojZtqc}|`zyVpqQklSpn^{y^xwi`{v]xs`{va|u]vrc|xb{w_xtcyvfzxdwubusaqndwsfywbus\om[mm_qqcuucss_on_on^nkbrofwq^ogZkc`qkexr[piSha\smf{vg|wk{cwlNda.GK)FN;9AC C@H + BCL HEM JL +M K QVNLKC= ?8 + +03 +&*0 #$!  !"!$ ) +0 9B6?W'i;$rO`jBdnMrzRwDlv/Zc,[e:isJu~X}bnnmWvqBidLwp]c~b|yXyn[|q]oasgyfzbyaz]zv\zxPsoRuqbc~yavqm~xk|gz`{t_zs_}u^yrZun]vpg~xk|cztg|wlazwVpoOijWus^{y_yxb{xazvazvi|i}g~xYro_yz^w{Vpqawuh}vcwl^mj]mlZjj[jm`rtbtv]qp\pn[onRfeWmjVmgWnfcwndsldqjeurl{`tr[onbusbqndoigqigsqM__9QU1NT5TYDb`Vthc~mcqSshb|{hxxkldlq] C DK U\Y]WM E ? ;75('           !#%-> V$#iB;sWKytv}|wrti~yqzur~m|i~yvZeaMYWeon}w[egHW^?S^%?N$65DAWdI[e5ER.>.A%>T&AV)DU3O[9T])FN#@H-5$8@.KQ>[_UquZop]rsYomZmkgvsmxtkqmjokefaYZUKJE<;6872/0(/0(DG>jl^nq`jm\fiVon\rl\^VIL@4SG;UGXA3K4&V8.H*";, +2=9<"8) YV~T|]aZ|ZzdnmY{Ais=hqDoxMs|SxZvJlu>fn/[d/[f1_n$UfN`!Yh?m}Vzgjbagq|uh_x}c|mkb|a~]|~PqvIjsPqzVyUx|@io%PWIO(U[Alr^lqwoVvqAhcJun]flYzqXynVxj[}mdudwaxazk[ywPpmQtp^~{c{e|vexrlokd|d|a~y^yt]xsi|og~xcztf}w_xtUolIfdQpk[xt_yva{x`yv_xug~iZspPjgWtr[wxXus_yv`wq\qj^nkatrdvvfxzh|}eyx_sr\pnZnmXlj_vp]tn]tldytcvrgwtqqcxyZopXlkYiferkmxpv~dtsNcf:U\5RVA_]QlcVpcWrcdtc|vixq{SQ|9h%tISD E >81.12542&4S8%}gPwó—ŗór\mCsO-W*: 00/16 + 8 + +60((, )16 + %6m¬ªٮzE=:03tSL{yPOJ5'O5(ũĨzjRpǘ~qplw]dMWEH;j* P LJD@DEE F I H +FEGGGGIKHFKP RRP TQK F E A: 1 +-& +   +     + +       +    &9J#Q0)meZl}Xoih}vizp|~rwpglfitp_nkM`^Nb`k~Yb_PZYdnmzwrJX[->F#9F:H3C*FTC[eAU\%7A1<(?M7Q`3O]2MX>W^E]aG`d@Y^-HO4;-HO=Y]KdiYrv[ps`sw]qr\nnguuq{zoxukonikf\^YNOJFEAIJELMHKMHY\Uilahl^dfXghXon\pjZh_PeYK]QEZLA^NAeSGjWIgQCU>.>'B$=<6;E#"B#G$*@" 1[`U{]d]fljcMq}5]i,Vb6^hFktTvQr{FksBmt:iq8fsgi^kksqb}S{sW{bhkbz\}rWwj[{ncvbv^{v`}ygYvtTtqUxtUurZytb}xcztd}zmkc|a{a{[xtUrn^xujj}i|k~dzXsnFc_LkeXwq^{wb|y_yx[uv_{|_{|QmnJhfNnkQtpZzub{^ws]spfzxh|{dxwautcywdzx`vs_ur]qobvthyc|vc|ve~z`yvc{{da}~XtuRnoLddOb^etmuxz}s}eyzTlpLhlVrs^ytZul]ndmxpwqnğbyBbs5mHT'@ >B ;156 + .! .=`K.pPxͿ͙ʓȷmZTsKvW:X2C::B + @ + +9117<>/03-69 -&x_Kؾܺ㷞cVA;?7B7 0; X1"cG2eϭδofnW_IM6v>'b)W TQE +8C@;?F D +B +CF CABDG KLRV XNI PSOIJD7 +.'!     + +   +   +   +     +1 +?+*|zYnsA^\[xtg||qzwt~eurOac%=A5NUA\cB[`H`b\poh{wbvuXnlK`c8PTF^bXmr[pu\ouZkr_pwasw_qscqrlxxkts`ff]b^QVRMOLLLJRRPVXUTVSV[Wdfafibgi^kl^urayr`xm[wjYm_TfXKeUFhVHmZKmXG]F4G0J0!R70Y;=R18O,2L)-G#'K&-=/W}]SyRwUzRt~Wy`\|StEl{:fs3_l6^jHjv]}[}S{XZXYGv+[oZgSc.]mIs^Px:`iHmvV{XzOozGeo:X`7VYKkj\|yjlomfgjhNws>gc7a_7a_ClhX|xb|e|jljdddeef_w\|qasey_}uXup[xt]uwYuvYwuVvsPpmPojTqmYsp[utfb}XvtZzw`}[ywRpnTqo`}yg}npi}\ytKjdLmfWvp[xt]zx[wxWsvWtxQnrXwzQstHlj@gbOtm^~yZwuZrr`yvc|yazwdzxj}iz^uoUld\qldyrf{td{se~x_yvQmnNjmKjlJikQprXvxOihMd^dumruvurvm}|dyz\tx[uv]wvZupmxtnyqzu{yDm4gh2^7 I> > 9 53.&$1 +O:%ueKhÒ˓pd\VX_8V4A 6 36< >>:67;>=4694:77 'bF;ĩɫ㾣yN7> %" +9)bWCs͹ʲԻӻҸhP5E1:+u5+p4,a%TE <621 3 4 6 +7;D +G +HJ GEDC +DG JJCGI=1 1 2*       + +                 +  +$  +OAAm~Jcj,NP?abagpxk}J[c#6= 3:;NU^mtyywdfcSYW]felvwt~owzX`c*kRKbEIF&159D $S,12'RwRwQvHjtEgsDfrBdpKo{PqKpItHvCqEo}W{lf^]efdS5dt]hOZ&WfDoZOz;ckGmvX~TyNpzPqzHip@bdNpq\~cfknkntufZ|X{T}wR{sZxb|ie]|vXxsXz\_`~^~y[~x\}v_}ugyi{^ytVpmXrq[uv^z{VttNnkPpmKkhFdbLig\xy^z{RppEedLnm[}|\~}TvuYyx\zx\{ve}f~a~y^}wWvpRslVvqTrpUssXvxWtxVuzMlqMptGmn5_^%OM8a]SwuXvv[uv]wvc}ze{fyk|lyczp[rhbvmj~sj~smvre~zKgh9WY0TT6ZZNpqe\yuVmeevliylq|nnzppzn\qtLfgMijVtrwuzsrxDl0W]0Z1=02 2 2 )'( +G0 ~mS}ķȸ|ȳrhZyGe6yP2M$*'1:? A998;@C @;469:?8; -]?=ƫ־ֻl? 2T7)v^Fw]ͱѼײx]SzI;j0"WTGN + R@938< +; +8 8 4; ?@FK M M L +K H D > 8 65#  + !       +    +    #YUTqWloD`c-SV&KQ?djB`h`wtg}{AS_'5%&56DOclu|zzzfhgVZY`ffistmxzfquMX^#7@ $.6ACakUtyVtvSmjJc_Lc[Mg^Tmg[rlavon~txx|wp{skxqgvq\lkZjjetw_lrR_eO\eM[dUclYhoS`fP[]Q[ZNWT9>7(-&,/(783<;7=>9BC>PQLpqlyyq|znzjrqt\m^GhYFsdOpYoWziOvbIjT=YC,WB/cJCV9=6!$ ,>L%*3* Ot|KmwRt~IkuBdpDfr=aoDhvBftFm|HvDuCtTjuo\Kx~Q~Y[S:%HDCfbcd|axnmsm~nrnvv~|]sq?YZ:XXBdccmlrunzZZBei~DLpI"B&$* + K1$xcPsüij{tmeXg@qB$X)?537 2.2;C +? +;;?D +C?968:=73$F*'ʴ˶r}cLv^ԲݾǬ٬̓\Tp62PB +=A?FCB 4; ::AH K JHJ S S KG D=8985.%  + +       +    '#       "   +  0&%}}gwtWmkOmk9_bAH4=dg8ag%QZ 9F 9D%JS9X[KefTqo_|wfxhuowtysxsuprrqsn|wt{]tn;UR!B9'HA;\UWvpa|sd|osuutyw~wYol>[Y0RQ*NNDUOpslrh^JH1cuGX1- #( " UF3m·œȽ}tôyijg{UU;a.D17112 ,-4< + 16<@CC +A < +8 : +9:9:0*D/ǪĦɲêåǣy_Nn/&aLBB 37> +@ H +F ;.9? A +@B +H K K ;@ = 6 1 +*    + +  +      + +    YULzwn00(    + !  # +' !$ "   + ) " + ZLLrlvwh}a{Psw+PX*5 /?7RcOerXls;PQ,; +-+ /$/AHP]]ajcfk_cffjkmqprxtpyvmyy`orBTX%:="7<+CG4MQ6NNAWTSha]qhaqgbsi^ri]qhbsidqhcmddlaeogepj`ljWefM\_UdiQ^dR_eSbgM\aFUZGTZOZ\U_^\f^fnc[[OEC7;7+LF8hbTuo_zubuvjzar[{kTxiTsRyV{WwSqMlLmX=S=%<%@(9;<51- +$ ibcrlfgV{Afv4_o-^o%]n$\mckRwV}VaU}|Z|~[}Xy~^b^U~Gqp0^^Dpo^lc[}_eeecSxqIngRuqX{w[~zRvr;]\5WXBhiJtsLxwRzyTxxVxw\|yb|yi|ng}{[suUmqRqsOnpPpoPpmQqn]{{d^z~Urx@_d%FKAE+QT;ceGoqOwyV|}UyyTvwZzyXxwXwyUwyEgi<]dKlqUtyYx{WvyOqrImm;b_4Z[-V\"N[=M 8I#ITCbg`zy]zv_|w]xo^yjlry|}~{|yyzvwovzz}m{Ngc?]S;[P@_WQoeZvjbxkrtyuvuyzsxevpYolWtrNpo;baOd]1"+(ŏzLS, )$  +^WDȤƽĸxe]RNg@j<"G857 <630 *+.1/8ADDA < 95= +> :8C <? vUϬϰظڱmX;4  " +  #$( % !!!!% +$       =84ou{ls}]nxYnsj{zjSuw1V^ 1>#6"=P=SaJ^g0EH.?%9#:'?0;OJQaNR[JMRQVYaggmqpntpirmmywk{{UgkMabDY\AVY!F)!7- +$" jpkmynY}W}Bn{.\k*[j([n"Uh4etK{Lz`}Rv>fr*U^>fnU}S{zZS{{RppPhhYwwU~Jz|Qy{OnqWtx^{Wuwfo`Oyx4`a#QQ4dfJ|}J|}AqqBlkImkYwu_hdLoh;^WFieZ~~bfMpt@ekLszNw}=di 025 +-,3 +2 1427B @ 8; ? 8 +17 N$ kB&jNu޿Ȥ{iYMn91Q?83869? 896:<99= ?; .' ! +   +      -"}sjj[V( +    & ! #(+#1. $%$$+ / '%%      +F!^)/; TIGmhl\cmF\g@\`Rnr]{}og|}nlXtuAce.OT8?/7*GO6OV>SX7JP/FT4E%9)=2?PMYgS]fDMRLRP\`_jlkkmlhnnjtsguu]pnbqncrm^mhXgbYha]mc]j`VcYQ^U]h`_ia^gbirmq|xo{wl{xlvxdnp]giXceUcdUcfXgj\knYhcSb]Sd^M\US_Udj\no_|i|ot{q|nQz]tbzgIiW?vdPxT}ZzXa^{Z|iHvcCfR/F18!8@%3$" iia_{dYyPr~RvCoz.\k,]l3fw/bs/`o9iwApz_V|Blx/[d:ciOuxSzyR{w\_}{]vs`~|T~}=mm=fh@bcSru`_}}lq_Pxxck4Ya7\b@ekElq>dg=`bBdeIhjPnpNmoFeh>]bMksJktAco/P_ :;@>=CB <3 +(0 +# " # ' +$  + +    #     +   SD=xpjWQ?,&YHAwea@1.  +# ( '%+ ( ""! #* %%( + +$    + +  ;P"%3VOG|{yLVX>VZJchA\c5PW:SZ8JT;NUEY`AZ^5TW3RU7V[>[aMimG^dFY_ASW8KY%6F/A0?RHSeWamYclW`eS\Y_ecmqpmqpbhfZeaYhcYifapkfupfuncpi`mf`md^iaXdZcmeekgdjfiokrxvqzwisrcom`jl]giZdeWccWcaYec_kieqo]h`[h_]j`amamuf|mwr|]j]=pcCg}}gnPo]Eo]IwgM}nQ~mQvVxW~[|V\ar]B@)/ @#0 !' ! +a[yUq|Up{QmyIgrEepJlvdgEgiPoqSqqTrrTrrRppOltXvKkx3Tc;N .A6I?R/S_AgpFmtBjlQuuemmndytavojur{rytx{}~}|zytzr}uz{{zz~v~v|x{~~|vuszrf~q\}tOon1TX0^^EokA`Znyiywk  Z\NVqR&I/dN7nZt³ҿиxreU[R`8]6:'( . & !"&/7 +3,6< +22 0)' %%.>%yU1Z׫跖գcX?-13%'$&!   +   + $-06heҸ}z$  + + + % & + !%####$&%!!% * $ +      +& 3 / <,_he\pn]uyG`e*EP3D0B!1@0BL4KQ9WWEceSqsVruc{cx{VhlCRUBP[;IV9FWDOaP\lU_kOZ`JTVMXT[daqwuqwu\ebR]WQ`YQbZalfcnf`kc[f^\f^akcdnfcmemrlfkgikhptsosrfll[dcU_^T^_V`_YcbZea[e][e\^h]al^ioarxjs|ktßȾhsPeW4_P/zjIg~|oetZweOwdS|gTxdLxcHr]>zfA|Tq~cK4"3 I-"6*. +" ]~TrzTqy[vUp{KgrFgpEgq4`k3bl4dpBsNAq}3cm9hrCjy?kv:krEtzNw{[~gWyxddWstJln>io)X`!PV*WZClnYfkd}Zyt^abZHzy(\ZJK"TU8ehNz}OwwHpoJqnTxt]}`\T|~Ajn+TX%NT8agEls?fk:`c:`aEcePnpXtu]yz]{{VuwLoqGmpLttMstRtvRprXqu]uwZrtbwza{|\xy\{~YzFks-T[ FO"HQ8]e=`fJlnTsuTrrTrpWusXvtWt|Tr|=]hAO 1A +/?6H^Y^yth~|fxxol~oxyt~pyt|~y~x}xyuwuyzrwmslypmwov}uxwqrtzvfw]zU{|:gl6ij;he=XS~}ic[P}|gµN|JoBZoʼѼŪǥY|MxE{I~NwQ,K& 8'. +. ("  $,57256 + .5& '3 +K/{cAj׵ЩȘttVz@*R? +5:8: :3 4: 7 . )"/'D:PE)WN-cZ9lfBrnIvqI}xR[cgez]zqT~~bfppXa`KmkVyfwbxmYvjRwmTzpWv[dif{^~ai}|^yz[pwlktve|\ei}az`~q^qdQ`SBF9)%    8jLL_GE(   % +%  $!% "% * & +#& +#!#$! !     !?}oزhicVe^bxvUmq?Wa%:K):N/?O?Q[@X\GecOljWstXpr_twcwxUdg=LO:DN?IUHQbS\m\evYcmP[aKVXKWUZffoyznvxZdcT^]Ud_RaZV`XYcZ^e]biagleingele_f_af`^c_glhnrqcigU^]R[XQ\XYd^\ga_iacjbfl`ho_kp\kpZp̢ǜǝǝƷpXqc@XJ'hU5qP_`kxq|do_ybPmWBlV>fQ4gR3oLv|d^D3N2&T6,?A B+  [~NovSpx]xYtQmxNlvHir7bk0\g-Yd;ivJxBq{9hrCrzBl|5cp4foM|\dn_~idSt{Dir@k{7fv+\j.`iDqtZgi_|wUrnVvsZ|}ZP|{Ctq1cb,^]7ijCsuP}PxxIqpLspUyuX|zV}|S{{Owy@lo IMagOnsUsuUqrYuv`|}b~UrvMjn4U\=F:CBKEN FO3U^Ghm=]\,KEA\U\smfzxl~~qqstrm|ixkwt}|~zzwtsrrrwl~rl|rnysouqpwpozriynlxviY~Lx{8ko4no*UF/QC)I;!F8VK-UL+TN,ic?qkGogCumIwT}ZxSyUivturp~cmXC<)!  +  + +! " + +$%#& +#& + & +!#'%$%%' ( "")#% +# +# 'A}aUpf^WOZaYZoj\rpVotBXeEXgK]iZnu_wyMkiB_]LfeYnoWklOacAPU=LQ5?I7AMDM^\evco}S`iJX[SaaSccXfgeptfquYdhP[]S__Vb`]g^biaflbjmbkneilcdib`e_Y`X[b[dmhhql]faV_ZXbZYcZbj_dlafl`koauxgmppœҨΠ͜͝ʙÓÔ˽v~[`Q0gS8ziMwfJudHd{~gwaJiU=u_HycLeO8cM6xbKx]u\HgM@iMBU7,<O,(K'',   Y|MnuPnvZv[v[w^|\}Ks}3[e)T]ir>jsLx`iEfmOnsRosRnq[tx`|a}QooKik?^a,OS/RV9_b>acCfhSruYwyQnlPie]tn_to^rpl~~h|{g{zawuYroVolWpmZpmYol]rmgzts|y|vwqrnpjni}ri}tpyxz~w}{mzsbskYmlQqn8ba/Za(]c6pqDnjl|y{h+CB.n<^C}?~Aiʹo\~c8R5 gCg3s?|Q&_39$# '23 (&. / )',,'/ >kG7qZϳаxlQg8$=4267 3. ((  &@3#K<)C7WK1voRzuWkfPYU!WB'S=%?)+#   +   +     +  !"!#&'$$& + %   "* , + )&'# % & #, ' +) * " +'0 82 +<gLEXIDGJCP`]Xlkf~`y~XowVjqXqu_|zIgg6RS?YZQfiQdhN`d:IP2@I(4B.:J7BTGRdM[h>LU4CFqZqqqmTjX@m[CpZp][D4A'C)S8'A%U80kMES5+6 D#A/"RwPr{Uv^z`|ckp`?ep7]hEkvCku9ak9ak=eo(RhFV#U`Bsz_s}dKtx7dj&Vb"Qe'Wn+`r:tX^dgosnnW}~MuuOwvT~|Z]\afhkh[~zTxvX||[LruAgjHkoVy{[~ce^Wx}XwzccOqs/UXDF&RUFrs[rtmc{}^vvfc~XtuJilCdiCflCflAdj>agKluDelEbhHdhLejQjoWpwWpwNlnLjlHgj<^`?acJlmJlkTts[xva{z`yvh|{mdvv[omeyw_sr]sqRjjF^`D^_LdfMeeHa^Jc`Ukhh{ur{m~tmsnvire|rh}vn}wzyjyvVkfEad+QR<@?IKT3moOxtkZ _Y?|}h3u[(fvunxPhN+>&?)tR"d2c2i=J(  & )(&''%%(5O/rP5v\{ҨׯϫjhH1A 7 46 +3 *% ( +% !   + + +  +70E=*YL9WH5>/A5OG271+% +  +      ' ( $#% $  -2$")0 9$8#7 9;!4 +" +%"   +  +  +  +"  !#& + """' +"!#( * + &##  !#& +) ( *. * *? 6Z1-~yvGLFALPL^`_wyZswD]aB[_;Y[;Z\6UX+GJ2. .<)"%  +    + + % * +( .(   +   " ! +"  + +  +      " %   ! !$ ! $$   % ' +! )'..    0 H0O"lHHvhg>GB8BLFW^Rjn@\_#?B0LP+JM"EI>C7;>W\`uzVipCT^&3# * /!5 1C3ES2EK3GFDYRMeWdznezs]plbrqcrobnjlwqoxslskorgvxj}~py{moughpcoqfqtisvm|~s|yyvphUbWExlV|ț’ǕĐőɕƓϜ͙ɻ}zóοym`VJZPFl`Tvh[p`xfRZF.UE5SC3aQAjZJmZIS<,P4&X;+T3.<0 <S2)2 ::)JqxJqxTzRzX}JoFjzIm}Hgy=]lIivWwSt}Rt}QwGmvFd?Z&Ui;mxCswGrxSweaX~R{}Ct{'_pOcN^#U`5eiFosVzzk}yfZU}]cejgefdbidZ|~]djaPoq[y{MkmRprWyzOvuQ{yNvxMuwNvxEnr@im3\b&QW9djAmn?oqBtu7ij=kk@hhOnp\uyJnn?bdGjlKnpCfj>ae?bfGjnPswFgl?^c9V\7RY@]cE:MHZ'\dqt]_Ze5W`Gih~{V?1RH/Ӿw]?3F&- R7|d@hmfI9 ) # +  +  D7$|nTyǴ ֽȯsagF7B().&+, +(         +  +   + + + + +   9+(.%"  +)+' + $ +  +  + + +     +       # %''%! +  )X;-t[cZhWbofSaaCRW0CG3KO#:GXR]ocgxephyjtezguȞΟϟ͢ѦҥѠƙ}pqbO\M:{_÷ʼÙěȺ}zlvuVY\?_cHnpZyxcsp]c^KYOCYKB^LBeRDiVEXE4WF6D3+F5-\KAweWo\oVBC&+ +G"U0'P.$B!9L0$`F5Y>-W<+&Ke)Nh(Kg%HdB^7Q>TI\&Wh$Se*Xg0\i8clKv}VOz2]p+ViAo~TGww5abTK^J[L['We7cp>htGryMv|Htw5_o/YiIuc[IrtInw[|aX}@hj'TZ"Qa-ZmBixWyc^{a}_x}D_h-KU%IU&K[(Wi"QaETIS,[c7dj>ipKv}Gty-Z_DIGL/\a3`e1^cFsxKx~Kv}CnuJu|Cnu9fl@msF&DL\d'EM[Y`rdz~yy|ztrQ_P=H@Y_[}nzewŹ³̾ʻɹl{cwjZaSHPD8peSsviez`ysY`^O`dUgsei{kqupntjs{dggO[TBWF<\C-@4$UC9S?6gNGy]RuXHbB3M+!J%A;= J*H+?!E)M2!V3 T1:Q"@Z%?Z8Pl0Je:QAT'RbJXDRIX.Xf:bn>dm;bi6]b3Zi/VeHo~^WHotEgqMn}TxTv;`f KTIY&Qd4YiBclPnvSpxYv|Upyip8cj9fl3`f2Xc2Xc.T_4Zc:`i=bkDirFktLnxXzEepFdo,JU!=H>[c?\b5X^BH397=/RVBei:]a1TX5V[=^c9]]CggBde@bc@_dDbjLiqHemIfnNkqPmsRouOlrIflB^aHfhLjlPnnYvtazw_srWiiZjjP``I[[Uhl[ovVlwOftAXh:XcQW?TYMab]rubz~ez}gzxo~yvp{Njn?Xl6[n!AN-9-6=[Y}wI1'--+Ŷd#)~\ͳеβҶĨybxV1@*B-P@1f[ImʼΚĕ̩~^yO9J &"& (    /-   :,)VHE  2)"2)<5#NH0WU/ff4xw>J^n`yPzpLyUxNuqBP|zGnl9xu@zCql5pk4if/LICD X["OT69 +>@HG)?:$C<*=6$1(2&* + /.' +     + + +           +    +   !      +%""&) +* ) , "# +:nUQ{qplnmZjgf{rl|qyw{{{~zyTh\)85 ,%CRKaqgk{pbre]k\lyh{vrp[iZXbWzv~vthZVH=]OFoes{lyiwvuerewhoqeUXLRj:Pg$@U?OFR"Q[JWHV&LY+O]*OX+PX,QW,P`$IY4YiCitBgo<_e5Wc5Tf>^m?_j,NW>JCV I_$HX+LU3T]CakOmwNjub^:]Y=\^8U[B]fRowGdl>[c:W_9V\=Z`>[a9V\HdhZvyXvxLjjTqoazwdvvdts]klWggWfi^ptXlsOepOesF]oD^mG^l>Tb?R`L^lL^jCUaCUaJ]c[oxi}nhvyeurcztQog9[]+J\EX /;"2?)AKLie~tD+'CB=ѿxQ, R=*b£w׻ϴrPsV*S:YCr_>z\ȷÚڿ̯drN4@ +.)    +  0X=*S33 "- XD;yK>- + "C6-92":3!IE*MK%ca1xuBsl>xO}qAamyiOueLzlOndA{W{sNf^7cZ1bY.VN WP"\X)SO FCCBPS&Z`4X\7UY8ZY=gbLRR:DB+FA+C;&J=*B0"6 , $( $# + +  +       +              +     +   +         $ #- +0 * +' ) & " 5X=6la}rwwyvy{yxybldXd`Ob`/AC  &02GSSVb^DQH7C7NYKbm]amaQ[PMWLeka}}jibZOHB-%"*!"E;>I?=VMH@5/4)#B92[QPf]^rllxtkqu{ydkiTnlWyxdz{iik]UYK>D@AGGKUVS]^^ie^h]hp[msYigNRM9>4(@2'@0!D2$\L=VH=R>3H/(D&G%R,N(BF K%$I'H(D'/& +8E(M.F')EQ3JZ+=QCThDVj4O`$HTAJCL!IS)O\*N\$FR@J"DM*MS(LZ>NCS)MY/QZ/QZ&FS =O=O&FSAK=JCV>T6F;E*LU8Yb:Xb0NX'GR BNAM"HU"GP4=4=CK"HQ+PX6Xa7X_,NW@I+MV/QZ&KS2W_5Zb%JR&NV$LT!IQ(PX'OW1Ya)QY FO&LU4Zc)OX&LU1V^6[c:_g9\b>`i=_h9Zc7U_)JS-PV/WYEonBei7Z^2UY,OS5XZLoqOrtEii=a_>b^(H9"G9H:OB"\Q1ZT0KG$PG*a\IC5?6BLAIQDJQJ>E>6=5AI>_gZzrswhWYKFGB;;9))+,+1BAGDCI65:002?69TKL_WTXSOICE0+/.)-C?@KA?>63G?1!_OBSB8S?47* ?W/#L$8 C6AE(B'3 1 ?!>!: 30KT=T\7HR7DMO]fMaj*EN>E=GM!ESDQ>I>I(KQ'IR'LT#HPAI#EN,MT+LQ*MQ(KO'HM$EJ$CH'FK1NT9V\1NR2OS6SY0OT0OT2SX/PW.OV0NV1RY'JPFK#LP IM&OS8< 58DGBF&MR"GM$IO'JN CG"@H;C+GR1KX(BO1NV<[^2QS5TY=\a?^c/LP6SWMimLhkJcg=[[Fdb>]W2QK5TO6TR7UW@]cB]dA\c3LS3LSAZ_G`eG`eC\aHdh\uyZts5NK0-2IC]tnl}dvx_qs[lsM^f8JV.DR-GV(CT%@Q0>3A)?M0CQ5GU1BR/?O>P^@SbLfuKgr:W[6SQB[XPef2R]3K@,RJ5k`N}r`wjYg\Je]HkeKjfKi_FbX?XM7VK5RE2A0:'H2$P2(P4)* +               +     +  +  + +& + +    !,5 4 . +* & !% + C/&sUMzydsTdyXynp~eslqou{wV`a*7= )51";2)0@4;EMTZW\_EMOAIL7AC0<:0<:/;9'106<=C<J<@K8AF6BB&20/55@KEMZQIVM(3/"&%10.ID@[YLdbU\ZMYYOQPKWVRhic{}ru}naiZJUE>I;COAFRF7A6.8-+037:?EFKTSXWUVZWPmi]|yfskXjbOjaPaZHMD5<2&OC7I;2K81:"1E!W0!I#7 +7-1 D'P4F'U5*V4+;10*?D;NT7IM3BGFUZEX\;PU6OT"=D9B6?#>I%@K,HT$@L!=I$EV?N#@N%BP#?M">L$AQ&CU)FV @O:I=IAM>J=I@L(JS(MU&KTCL?G$GM)JO#DI&HI3UV8Z[1PR)GI,JL7SV>Z]6OT6OT6RV0LP1NT9V\5RX1PU+HP4RZ(IP CI,OU)LR#FL?E5;;A29 &-5>7C"8E4A6@/KO4PS6OT6;%W^3LS-FK7NTAX^KbhNekC\`MegOgg2KH'=:9OLLb__ur_sqUihI]^4IN 7?9B#AK?J6F (66C4KY9O\0CQ#6E!4C.AP1HXFarKkv@bd>\\E]]QdhDdo0TbLZ LY,IQ,LG@^Rnoj;&# oƳ}_;pO$WܻдsVv[,|`1^n˵иг}pZf:-? +')  ! 31 #$(4 @* 7 ]0yK)U+c6Ee6jFjIc2$29 +>c9)}Y?\=)# +  +  + J<1л¨ȭzd* !(8, C7+@4&=/"G7*RB5RB3L<,K>+OC-I:'C6#A4!J=*SC3K:*E/!I3%J2&D, - ! )           +            +    -6 2 +, ) % * + " 0hZ~lnefv[m{dmyelygbldQ[Z.;A% (*!&<,2B?ESHLWTY_TY]FMS>EM(18#*2*196=C)065:@GHMGFL42755?44@')6'+7'.8'05.:8+810;3GSGUcTP\N7C9291BH>]aSrvex}ifjYW[MDJ@EJDTZPek_aiZGRD4>5+6.2=74?9/914>5DEGGFKIHMSQTXRR[TNjdXxqayp_vo]vo_jcSUM@B8.OB9I<3O<5G1&98? ; 2 543C&W;&W8&`@3X6,@= B*<>9KM7KJ2FEASSE1JQ+FO*FQ%CN8C#@N&CQ$@L&@M+ER$>K"OV/6+21@G-:@%282=C4?E9FL4BE-6JI4HGK_`Ma_H^[AWU.FH9< ?D#DK;D!AN7E)EQ?WcCYf5KX 6D.<4B8I,P`8`j;ceBacF^`O`gLmvIkw5cp6^hG^dDc]Pl`utpC.-( |ǵh, % +,&       +           +  )     + + $/ 3 +$! +"$ + 0\GBqsjbt\lyeitckvf^l]S`Y6CI!1 ++ +(07;G;?J;>GDGPGKTFMWDLY-4D$'8#117E28D=AM35A44@11=-/>!0&!/*3<2<=:E?=I=BQJ&>J-CP%=I":F.FR#=J4@4@8C8B9A >F!?G#EO&HR@I8ACK-PV1SU1SU3QQ/KL1MN;WXF7?/MU/MU.65=4=2<(".>%2C,?'4G*6L$7"/?AOZ9GPFS\@MV*7@*4>.8B+3>+3>"+4/8A-6=*59.K7B2@=KMU-Z];baD]aM`gGjpMr{BqyLszcx{WumXvj?+*3#~{q;s=sɱƥoi|HP~QɣvٲdyS>F!&$%& #  ' 4 6>Lq9*g9!K$H M"H5%#9^1sHyQ`5U' oA wGW#;9J h+&Q6V%^5!< "  +/*$~l}fpȯɭ{ď}E6   +    +  / ;!%( ( (+ +2:"%7%E3'3!6#),0  +        +    +     " + +   +   +#$+.&  +! ' '  +<*(\95T=5jdV~xtr`q_bpahse]n\TdZ=JP$->!9 3*)58A+.5'*125>59D9?MBI[7?R#6/+5A1;E*4>(!*'.8&,<-(",6:EILWQZfXdq]hv\oz\zbjvowb^lS]pThwX{ir`jx^bpYbo]_lXbpWaoXQ_NETMCQRLW[MWXEKGGLEVUQ[ZUXUPTOISOFZSIg_Th`Sc]Qpl`tpdkg[c_T^WMaXOf]TdQJ[GF&DN&FQ%@I4>1<&:E,@K/CN0FQ2HS9D4?5@5>5;;A%BF"?C?F?H8A7@!DJ*KP-LO1PR2NR-IM1JO9RW:SX2KP.GL1JO0LO2NQ3QS*HJ(GI-LO$FH?A'HO3:#FL'JP29!?G6>+4*5+6$:E2=(6/>.=)9+7M)A*6P%1K 8%2E5BR2@M?MX@NY,:E'3?-9E2;J09H(7(2;,6?,9?+:?+=A-@F0CJ2FM8KR5HO0AI>IK;DI9@F=FKALR7DL'8B&8D&9G/= ;D)AK3JR4HQ9MV=S^2MV+GR=F9D?JJQ&VX5]\>]_LeiEknGlr@mrPvwh|{PndPpa@-)B1!Xg+T¥{áqahAi?oFlqXW/)$'0& +  + #7 L$E(O~Q4x[1bMlU+d?%K C;0?)tQ1W+sGQ* I g; g:b0 m5(VI _,_(E SY(@3 : D,"  naN}b~QĢr˧wQ}Sŧu`    + + + + #- * )& * 4818!C,$J3-I2,$ 4E''$ +     +       + + !   + $ ^ID=(#  + ','"   + + #* + ) '$ QG>tzn^o_LaR^pbftgVgUO_U:EI#*: 3$4%,6'/27;>*.1'*/-07'+6(.<07I,4G#/'4=6EL0BD**))///>A6CL*7@$19+:??NKZg]sl|{vsuzim\UaMVhPdqS~k{hyjvjq}gbnV]jN_oUJYFAQGN]Z^jjYb_GLEGII-AL5IR;OX1HP#>G#>G#>G ;B <@'CF-IL+GH#BE"AF?D!BG'HM*IL(EI(FH.GN,EL)BI(AH-FM1JQ.GN'@G&DF(FH-KM&EH&EH*LN(JL%HJ"EK=C#FL CI?E%FM8@8@6? $-+5.:-:1?"3C'7&=)@#3L$="9-?+:->H0BL+5)3&6C$2?#1>)5C'5'/"/7%4;$3:%6=)G/9B1:C5>G'.4$.0*66@LL^Ow}yG6,SB.xCpZ[޿ѯƠyaFQ-b@gIoB/?".- #   ! 2 6<MQ,;`2`6ye0oe*sAqM+JOK > H8kIlAS&R)3DKe3OBk4/['P" +H_/ r>&`,!D 8e< zetZA6!K7tK[T\bÙqsV:iO`SB   + +       +  + # 049=!=$I2,K2.* 8>( +             !  +!  + +7$oh!   + &, ( + !%4!a\VLVMI[OTe[Zj`Xh]JWP,68 * ,)0:9AD7AB9B?'0/"%$(&-518B/9C!+7&5UO0G??VNBWPMb[Seg@RV3EI2DFCSP^kaq|ku~|pfcZ+(8+ETMboh^e^OQFWUIdfXdgVX[HVWE^_MfdU\ZMC?30, @<0KI4FFKYZP[]6EH5HL#<@"?C =C5=!C.GL+GK#?C%AE#?C$@D:>:@!@E!@E%DI >F@G*KR AH>E@G >F%BJ$AG3;093?!9E5C!4C#2# "3.A'9+92=5;5JO/BH#)(/(9A$2;,5*3%1!*'0,5+4-6$5=#4<*2 .7+8A&3<'1:-6?,3=*1;*.727=2:=2:<7@?RG6RDejfA1!eT:š{Fj1mšԫmF7:`HnE/2"/ '.#   +  2?> + 7=U1`A$mKe3t[#fPy[)mCNVI9! . iQ7mJ[1mBP#8G +S X&Y%P`.b3!<W*~N*xE2S#4d;'¦k=HBFUNXe^Q`[@LJ"*,"#(,7?BISTBNL=JC$/+!)+=EHKTY@KO1PPKWSLVMV\Pgi^mobfh[ORK+/. $1(S`Vftgq~tp{ubmgQ]QUbQJVH)7* 0%;KA_jbgleb_Xjc[tueklZ]\G]\GdbMb_NVPD?8.30!B?0TQ@\[IXUBYVCRM9^WDSF5YM7O?&?+C-P6%T9.V;4S74V;2I/K0T9([>.P3!T5!^7&f?.BZ\9QQ3LI7MJ9PJ7JF8HGLZZ;IL'9;/DG25:>$AG6?(@J)BG-DL1GR2FQ1EP3GR4HQ1HN,IO2OU5RV:XZ?[\7ST1NL5RP7TP9VTE!+=?.=@1@E,9?(.+3(1,5"/8,5)2#09)6?&3;*7@+8A%/8-6?:AK:AK:>G:=F36=6;?08:*0.?D@iigrllYOP02/')&/32>DD=E:9?%&+")/&5:,.$''9=)7@/;G8BLBPSE+@CALNUTR@MC:REcca>/pTҼOOؾΥ澛kV39 `;(+/'#<G!C&& + 23 541 M* oM'|^,m:|Y#a9g; l<b1i5]28! +K2jOoK{P%h?_,B D Z%])JCY(rB.P +OtD U0\3+A~Yɬ_Oz7yAe:N# #I.%qpzSj{\5*&  + +     + + +    % $ $&& +  + + +     + +  + + # + & % $      +   phȱD0)  !!  jLBa<6..H<#(+#$(,-:CBP\ZJYV?OE*70&2.>HGYcdYcdIUUFRR@KOO]]duofwmdvhnrpum}sXnlJ_`D\`9NS,>B$23$-*6;7=?:HULR]U:G>,<29F=YcZorkmhdmcawtcifS[V@\WA]XBSL:H@5=4+F@0SP?ifUsp]fdOb]GRM7]W?VK7WK3QA'L;V@(ZA-Y=1\?7S73V;0I/F+D)J-M0]A,Z9&[:'HXWBRQDTTFVV=MM5DG8GJ@ORLad/DI6KP/FL7;'@D3MN4NM1IM+CG*BF3KO9NS8MR6KP-BG(@B0HJ=WXE_^B\[ST=RS@UV>ST:PM9OM0HH4LL7OQ8MN=QRD%4622//7554)AC4GK(:<*,()()()!9;)CD.JM/KL$>=!:7'@<(=8&932C=3?=7A@.8:+49.7>)2;-8>&39 /2#273@H>HR4(0;%+718B=AL;=I<>J>@M;=I68D25>8;BNMRhdckc`[RM576/32066@FFGKLDEGOOO[YZHHFCEB;@<.421:9BLM8CE"-/.0/555ECDLNMAJG6C<5E;;H>6@7+2*-/*162JPPDJHHKBopbRL,{`һhjȕ֯ŖzT%+/4 $+*%cC,m~sB1)  2?A2?mL)~^5uR,nImGqI_6U+b8a7\5F" +!4 xR=nMxH"^,U'DGV W +QY- +j>~P,q?X"q9O0`1.1gKnZFIwA[-Q( +$P8.vbtTuO|za" +     +        #  + +  +           +  +  +      !  !  !" # +pXNټuXF$   # + + #F%E )<N0.\NMQUTHVV@@J03:0596;>@FFNTRTXWX\[QVRDJFMXRZg`Vb^S_]P\\S\[KTSKOPQUTfhenslai^ZbUJZWBRQBQT8EM)1< "('/&#,&!/$& 0 .'7&6.= .;* $*6EIUQT[@EK5=@CMLTZVbc]]YPf]TnhXibPe^Kd\G\T?PH3JB/LD1RM:c^JqlVtnTmgMa]@\X;]\>b]?aZ=VM0UE,ZD-_B0_;+Q*R'Z2(S/#<6 +@&[A0aG6jB8_7-6FF3CC5EE8GJ4CF(7:%49-E0HL/GI;SU5MQ/DI+@E1FK5JO7JP5HN.AG!69#;=-EG2LK2LK4LL7OO7LM:OP;PQ?TU>ST:OP?STDXYDXYFZXDXW?TUEZ[J_`K_^N``K^\ASSCUUHZZFZY@TSBVU@TS5IH8NL5KI.DB5KI9OM2HF4JG9OL/EB)=;7JFJZWGVS>MHAPIGVO>MHGXRHXUEXV@SQ)<8#  '#%!%$ $&$-2*3:3>D2@C.>>.>>:HKBMS7@G09@3@@J:=F36=016:9>TPQ`[X\TQLNMFHG<@A>BC=AB<@ARTScedQSPINJHMICIGHQNU_^MWV>HIMOLWUV`\]XXXFLH?LCGTJNZNNUMGMCDG@;=:FLJAFBHIAom`f]C=9@87?44@>2>>8CG2=C(/7#"'!(. + $+"3,)( "*(5('/"%,"'+-335:6BC=FB9YPGd[Ld[Jf^Ki^JaVBUM8SK8XP=]XEniU{v`ztZqlOeaDb^AcbDxsUx\tjOhX?bL7dG7gC5[3'[/&`5,V0%AA$P5$lQ@qVElF;_9.#27&5:%49*9>/>C$38-4*9@#1:2CK5FP"4>#5?+?F$9>1FK/DI(;A#6<&9?+>D->E):A#4;#6:$7;*?B0EH3HI:OPCWXFZ[QefMabI]^DXY?QS?QSASU>PREWWDVVAUTJ^]RfeSfdVfcQb\EVNARJCTLDXOEYPG[RBVM8LCCWNBVM?SJJ^UK^XATNFYSRe_DUM7F?BOFWcY[eZX`S_gXgrbY_Qdl_`h]JTK5<4" + +     $)+6:3AB3CB2B?9HE@LJ5?>2=95@<9B?DJH@FD267015/0543998>89>/05..0=;MYMXbWbh^Z]RHIA&(#%*&(*%==3oiYwTxŮqʖԩg>  L8-RA-oaDŭپcMB +#, /7 +=M+^@P5T1 e@e?jBe<R(T*e;TX;S$B GP],h=X/c0_%d)zF.V3yO'rK"]3[9c-AC +T! e8#_JnĥvV~QRq$,Y:&byWfvc4%  &wo~E>4   + +        +    +       !!! + +"& 4 + "  ) +*!A [4-D49dKNlcfSWZ@GM-4:7?BQY[\aeMPU77?108< (*!# +$ #*#,3+175399:BD7?B49=&*-)+*+-* *.- 3$('(:,  +    $'%'&540@<3XOFfXKdWGfYHk^Kk^Kg\He^KjcPkiT|wakexsVojMokNqpRdp}dtcOfO=fF9d>3W,#S$U) K#< D#S6&mP@nQAb>2R." /6$3:-4#290?F)6?$1:4AJ3?K".:(6C*8E/9*;E(;B(;A$7= 18/607&7>(7>,3&-(,*.26&9=*=A2FG;MO>PR2DF/AC2DF8GJ;JM@ORBQT?NQ;KACPG;G=1=1/;/4>3GODKPIAC@:<;33597:FDGONSHGL@@BFFFKKIHGERNOYWXVVXLMO:>?177:C@BKHBMG=FA@IDAGC@FBCJC:A:291ED@UQN]XULHE3503:2GODS[NZ]RLNA00&($e\KcƲ|ҟ⿙TC '|p˴3  + - '3V*!R,;Q5 lQ$oL&[9 f@W$wN oDmB|R(l?eDf2$C>Pi9"c:g@!qC+[#Kk:a;uHZoBsF%FC MIJtJ1pǧvZ~UwRe3m6}JX47  &xZBz]nJgOE êoîeYM             !!             !   }mͰJ2(  !  . .%@f=7H6@R38G;?A?D6@B*46;EGS[^QV\77A%#&-JOUYacMWVDPNHTR=IG*( %)(.3/;@:?A@CEDHIK@DE?CB7<88=75:3#!,,0+B>9P.+*)9)  + + !$#)++-?>:KF@_XNqaTgUGaP@jYGufSynZvo\to[rq\hrk}vZvqT{wZ~}agoycveSlRCdD9Y3*FLP!J> H$W6'lL=gJ:gE9U3' \ No newline at end of file diff --git a/lab4/src/makefile b/lab4/src/makefile index 18477ba..06148da 100644 --- a/lab4/src/makefile +++ b/lab4/src/makefile @@ -1,29 +1,40 @@ SHMDIR = sharedMemory +SHRPDIR = sharpener +THRDDIR = threads +PIPDIR = pipes +INPUT = 1 -shm_build: $(SHMDIR)/shared.cpp + +build_pipes: $(PIPDIR)/pipes.cpp $(PIPDIR)/important.cpp + g++ -g $(PIPDIR)/pipes.cpp $(PIPDIR)/important.cpp -o $(PIPDIR)/pipes.out + +part2_1: build_pipes + $(PIPDIR)/pipes.out $(INPUT).ppm output_$@.ppm + + +build_shm: $(SHMDIR)/shared.cpp $(SHMDIR)/important.cpp g++ -g $(SHMDIR)/shared.cpp $(SHMDIR)/important.cpp -o $(SHMDIR)/shared.out -shm_run: shm_build - $(SHMDIR)/shared.out ../images/$(INPUT).ppm ../images/$(INPUT)_out.ppm +part2_2: build_shm + $(SHMDIR)/shared.out $(INPUT).ppm output_$@.ppm + + +build_threads: $(THRDDIR)/threads.cpp $(THRDDIR)/important.cpp + g++ -g $(THRDDIR)/threads.cpp $(THRDDIR)/important.cpp -o $(THRDDIR)/threads.out + +part2_3: build_threads + $(THRDDIR)/threads.out $(INPUT).ppm output_$@.ppm # ----- OLD MAKEFILE CMDs ----------------- -build-sharpen: ./a.out +build_sharpen: $(SHRPDIR)/image_sharpener.cpp $(SHRPDIR)/libppm.cpp + g++ -g $(SHRPDIR)/image_sharpener.cpp $(SHRPDIR)/libppm.cpp -o $(SHRPDIR)/sharpen.out -./a.out: image_sharpener.cpp libppm.cpp - g++ -g image_sharpener.cpp libppm.cpp - -run-sharpen: ./a.out - ./a.out ../images/$(INPUT).ppm ../images/$(OUTPUT).ppm - -./coms.out: coms.cpp important.cpp - g++ -g coms.cpp important.cpp -o coms.out - -run-coms: ./coms.out - ./coms.out $(F) +part1: build_sharpen + $(SHRPDIR)/sharpen.out $(INPUT).ppm output_$@.ppm clean: rm a.out coms.out -.PHONY: run-coms clean \ No newline at end of file +.PHONY: clean \ No newline at end of file diff --git a/lab4/src/ogSharpener/image_sharpener.cpp b/lab4/src/ogSharpener/image_sharpener.cpp deleted file mode 100644 index 5263273..0000000 --- a/lab4/src/ogSharpener/image_sharpener.cpp +++ /dev/null @@ -1,244 +0,0 @@ -#include -#include "libppm.h" -#include -#include -#include - -using namespace std; - -struct image_t* S1_smoothen(struct image_t *input_image) -{ - //cout << input_image->width << input_image->height << " " << input_image->image_pixels << endl; - int width = input_image->width; - int height = input_image->height; - - // memory allocation - struct image_t* smoother = new struct image_t; - smoother->height = height; - smoother->width = width; - smoother->image_pixels = new uint8_t**[height]; - for(int i = 0; i < height; i++) - { - smoother->image_pixels[i] = new uint8_t*[width]; - for(int j = 0; j < width; j++) - smoother->image_pixels[i][j] = new uint8_t[3]; - } - - for(int i = 1; i < height-1; i++) - { - for(int j = 1; j < width-1; j++) - { - for(int k = 0; k < 3; k++) - { - //image->image_pixels[i][j][k] = val; - // edge cases - if(i == 0 && j == 0) { // i-1 and j - 1 doesnt exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i][j+1][k] / 9 + input_image->image_pixels[i+1][j][k] / 9 + input_image->image_pixels[i+1][j+1][k] / 9); - - } - else if(i == height - 1 && j == 0) { // i+1 and j-1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j][k] / 9 + input_image->image_pixels[i-1][j+1][k] / 9+ input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i][j+1][k] / 9); - } - - else if(i == 0 && j == width - 1) { // i-1 and j+1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i][j-1][k] / 9 + input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i+1][j-1][k] / 9 + input_image->image_pixels[i+1][j][k] / 9); - } - else if(i == height - 1 && j == width - 1) { // i+1 and j+1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j-1][k] / 9 + input_image->image_pixels[i-1][j][k] / 9 + input_image->image_pixels[i][j-1][k] / 9 + input_image->image_pixels[i][j][k] / 9); - } - else if (i == 0) { // i - 1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i][j-1][k] / 9 + input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i][j+1][k] / 9+ input_image->image_pixels[i+1][j-1][k] / 9+ input_image->image_pixels[i+1][j][k] / 9+ input_image->image_pixels[i+1][j+1][k] / 9); - } - - else if(j == 0) { // j -1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j][k] / 9+ input_image->image_pixels[i-1][j+1][k] / 9+ input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i][j+1][k] / 9+ input_image->image_pixels[i+1][j][k] / 9+ input_image->image_pixels[i+1][j+1][k]/ 9); - } - - else if(i == height - 1) { // i+1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j-1][k] / 9+ input_image->image_pixels[i-1][j][k] / 9+ input_image->image_pixels[i-1][j+1][k] / 9+ input_image->image_pixels[i][j-1][k] / 9+ input_image->image_pixels[i][j][k] / 9+ input_image->image_pixels[i][j+1][k]/ 9); - } - else if(j == width - 1) { // j + 1 does not exist - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j-1][k] / 9+ input_image->image_pixels[i-1][j][k] / 9+ input_image->image_pixels[i][j-1][k] / 9+ input_image->image_pixels[i][j][k]/ 9 + input_image->image_pixels[i+1][j-1][k] / 9+ input_image->image_pixels[i+1][j][k] / 9); - } - else { - smoother->image_pixels[i][j][k] = ( input_image->image_pixels[i-1][j-1][k] / 9 + input_image->image_pixels[i-1][j][k] / 9 + input_image->image_pixels[i-1][j+1][k]/9 + input_image->image_pixels[i][j-1][k]/9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j+1][k] / 9 + input_image->image_pixels[i+1][j-1][k] / 9 + input_image->image_pixels[i+1][j][k] / 9 + input_image->image_pixels[i+1][j+1][k] / 9); - - } - } - } - } - - return smoother; -} - -struct image_t* S2_find_details(struct image_t *input_image, struct image_t *smoothened_image) -{ - // TODO - int width = input_image->width; - int height = input_image->height; - - struct image_t* details = new struct image_t; - details->height = height; - details->width = width; - details->image_pixels = new uint8_t**[height]; - - for(int i = 0; i < height; i++) - { - details->image_pixels[i] = new uint8_t*[width]; - for(int j = 0; j < width; j++) - details->image_pixels[i][j] = new uint8_t[3]; - } - - for(int i = 1; i < height-1; i++) - { - for(int j = 1; j < width-1; j++) - { - for(int k = 0; k < 3; k++) - { - details->image_pixels[i][j][k] = max(0, input_image->image_pixels[i][j][k] - smoothened_image->image_pixels[i][j][k]); - } - } - } - - return details; -} - -struct image_t* Rotate_image(struct image_t *input_image) -{ - // TODO - int width = input_image->width; - int height = input_image->height; - - struct image_t* rotated = new struct image_t; - rotated->height = width; - rotated->width = height; - rotated->image_pixels = new uint8_t**[height]; - - for(int i = 0; i < rotated->height; i++) - { - rotated->image_pixels[i] = new uint8_t*[rotated->width]; - for(int j = 0; j < rotated->width; j++) - rotated->image_pixels[i][j] = new uint8_t[3]; - } - - for(int i = 1; i < rotated->height-1; i++) - { - for(int j = 1; j < rotated->width-1; j++) - { - for(int k = 0; k < 3; k++) - { - rotated->image_pixels[i][j][k] = input_image->image_pixels[j][i][k]; - } - } - } - - return rotated; -} - -struct image_t* S3_sharpen(struct image_t *input_image, struct image_t *details_image) -{ - // TODO - int width = input_image->width; - int height = input_image->height; - - int a = 1; - - struct image_t* sharp = new struct image_t; - sharp->height = height; - sharp->width = width; - sharp->image_pixels = new uint8_t**[height]; - - for(int i = 0; i < height; i++) - { - sharp->image_pixels[i] = new uint8_t*[width]; - for(int j = 0; j < width; j++) - sharp->image_pixels[i][j] = new uint8_t[3]; - } - - for(int i = 1; i < height-1; i++) - { - for(int j = 1; j < width-1; j++) - { - for(int k = 0; k < 3; k++) - { - sharp->image_pixels[i][j][k] = min(255, input_image->image_pixels[i][j][k] + details_image->image_pixels[i][j][k]) * a; - } - } - } - return sharp; //TODO remove this line when adding your code -} - -int main(int argc, char **argv) -{ - if(argc != 3) - { - cout << "usage: ./a.out \n\n"; - exit(0); - } - - auto startread = chrono::high_resolution_clock::now(); - struct image_t *input_image = read_ppm_file(argv[1]); - auto endread = std::chrono::high_resolution_clock::now(); - - auto startsmooth = chrono::high_resolution_clock::now(); - struct image_t *smoothened_image = S1_smoothen(input_image); - auto endsmooth = std::chrono::high_resolution_clock::now(); - - auto startdetail = chrono::high_resolution_clock::now(); - struct image_t *details_image = S2_find_details(input_image, smoothened_image); - auto enddetail = std::chrono::high_resolution_clock::now(); - - auto startsharp = chrono::high_resolution_clock::now(); - struct image_t *sharpened_image = S3_sharpen(input_image, details_image); - auto endsharp = std::chrono::high_resolution_clock::now(); - - struct image_t *rotated_image = Rotate_image(input_image); - - auto startwrite = chrono::high_resolution_clock::now(); - write_ppm_file(argv[2], rotated_image); - auto endwrite = std::chrono::high_resolution_clock::now(); - - chrono::duration readduration = endread - startread; - chrono::duration smoothduration = endsmooth - startsmooth; - chrono::duration detailduration = enddetail - startdetail; - chrono::duration sharpduration = endsharp - startsharp; - chrono::duration writeduration = endwrite - startwrite; - - - ofstream logFile("read_times.txt", std::ios_base::app); - if (logFile.is_open()) { - logFile << argv[1] << " "; - logFile << readduration.count() << endl; - logFile.close(); - } - - logFile.open("smooth_times.txt", std::ios_base::app); - if (logFile.is_open()) { - logFile << argv[1] << " "; - logFile << smoothduration.count() << endl; - logFile.close(); - } - - logFile.open("detail_times.txt", std::ios_base::app); - if (logFile.is_open()) { - logFile << argv[1] << " "; - logFile << detailduration.count() << endl; - logFile.close(); - } - - logFile.open("sharp_times.txt", std::ios_base::app); - if (logFile.is_open()) { - logFile << argv[1] << " "; - logFile << sharpduration.count() << endl; - logFile.close(); - } - - logFile.open("write_times.txt", std::ios_base::app); - if (logFile.is_open()) { - logFile << argv[1] << " "; - logFile << writeduration.count() << endl; - logFile.close(); - } - - return 0; -} diff --git a/lab4/src/output_part1.ppm b/lab4/src/output_part1.ppm new file mode 100644 index 0000000..e69de29 diff --git a/lab4/src/sharedMemory/important.cpp b/lab4/src/sharedMemory/important.cpp index 6ec1182..6727f4e 100644 --- a/lab4/src/sharedMemory/important.cpp +++ b/lab4/src/sharedMemory/important.cpp @@ -77,9 +77,9 @@ float *S2_find_details(struct image_t *input_image, float *smoothened_image) float *details = (float *)malloc(height * width * 3 * sizeof(float)); long ind = 0; - for (int i = 1; i < height - 1; i++) + for (int i = 0; i < height; i++) { - for (int j = 1; j < width - 1; j++) + for (int j = 0; j < width; j++) { for (int k = 0; k < 3; k++) { @@ -98,18 +98,18 @@ float *S3_sharpen(struct image_t *input_image, float *details_image) int width = input_image->width; int height = input_image->height; - float a = 0.8; + float a = 1; float *sharp = (float *)malloc(height * width * 3 * sizeof(float)); long ind = 0; - for (int i = 1; i < height - 1; i++) + for (int i = 0; i < height; i++) { - for (int j = 1; j < width - 1; j++) + for (int j = 0; j < width; j++) { for (int k = 0; k < 3; k++) { - sharp[ind] = min((float)255, (float)input_image->image_pixels[i][j][k] + a * details_image[ind]); + sharp[ind] = min((float)255, (float)input_image->image_pixels[i][j][k] + details_image[ind]); ind++; } } diff --git a/lab4/src/sharedMemory/shared.cpp b/lab4/src/sharedMemory/shared.cpp index 099140b..06780bb 100644 --- a/lab4/src/sharedMemory/shared.cpp +++ b/lab4/src/sharedMemory/shared.cpp @@ -9,195 +9,200 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include using namespace std; -int main(int argc, char *argv[]) { +int main(int argc, char *argv[]) +{ - if(argc != 3) - { - cout << "usage: ./a.out \n\n"; - exit(0); - } + if (argc != 3) + { + cout << "usage: ./a.out \n\n"; + exit(0); + } struct image_t *input_image = read_ppm_file(argv[1]); int height = input_image->height; int width = input_image->width; - struct image_t *sharpened_image = new struct image_t; - sharpened_image->height = height; - sharpened_image->width = width; - sharpened_image->image_pixels = new uint8_t**[sharpened_image->height]; - for(int i = 0; i < sharpened_image->height; i++){ - sharpened_image->image_pixels[i] = new uint8_t*[sharpened_image->width]; - for(int j = 0; j < sharpened_image->width; j++){ - sharpened_image->image_pixels[i][j] = new uint8_t[3]; - } - } - - float *sharp; - const char *shm1_name = "/shm_parent_child"; const char *shm2_name = "/shm_child_grandchild"; const char *sem1_name = "/sem_parent_child"; const char *sem2_name = "/sem_child_grandchild"; - + size_t size = input_image->height * input_image->width * 3 * sizeof(float); // size_t size = 1024; - int reps=1000; + int reps = 1000; // --------------------------------------------------------------------------------- - int shm_fd = shm_open(shm1_name, O_CREAT | O_RDWR, 0666); - if (shm_fd == -1) { - perror("shm_open"); - return 1; - } + // int shm_fd = shm_open(shm1_name, O_CREAT | O_RDWR, 0666); + // if (shm_fd == -1) { + // perror("shm_open"); + // return 1; + // } - // Resize the shared memory object to the desired size - if (ftruncate(shm_fd, size) == -1) { - perror("ftruncate"); - return 1; - } + // // Resize the shared memory object to the desired size + // if (ftruncate(shm_fd, size) == -1) { + // perror("ftruncate"); + // return 1; + // } // Map the shared memory object into the process address space - float *ptr = (float*)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); - if (ptr == MAP_FAILED) { + float *ptr = (float *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (ptr == MAP_FAILED) + { perror("mmap"); return 1; } - // ----------------------------------------------------------------------------------- - int shm2_fd = shm_open(shm2_name, O_CREAT | O_RDWR, 0666); - if (shm2_fd == -1) { - perror("shm_open"); - return 1; - } + // --------------------------------------------------------------------------------- + // int shm2_fd = shm_open(shm2_name, O_CREAT | O_RDWR, 0666); + // if (shm2_fd == -1) { + // perror("shm_open"); + // return 1; + // } - // Resize the shared memory object to the desired size - if (ftruncate(shm2_fd, size) == -1) { - perror("ftruncate"); - return 1; - } + // // Resize the shared memory object to the desired size + // if (ftruncate(shm2_fd, size) == -1) { + // perror("ftruncate"); + // return 1; + // } // Map the shared memory object into the process address space - float *ptr2 = (float*)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm2_fd, 0); - if (ptr2 == MAP_FAILED) { + float *ptr2 = (float *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); + if (ptr2 == MAP_FAILED) + { perror("mmap"); return 1; } - // -------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------- - sem_t *sem_parent_child = sem_open(sem1_name, O_CREAT, 0666, 0); // Initially locked (0) - sem_t *sem_child_grandchild = sem_open(sem2_name, O_CREAT, 0666, 0); // Initially locked (0) + sem_t *sem_parent_child = sem_open(sem1_name, O_CREAT | O_EXCL, 0666, 0); // Initially locked (0) + sem_t *sem_child_grandchild = sem_open(sem2_name, O_CREAT | O_EXCL, 0666, 0); // Initially locked (0) - if (sem_parent_child == SEM_FAILED || sem_child_grandchild == SEM_FAILED) { + if (sem_parent_child == SEM_FAILED || sem_child_grandchild == SEM_FAILED) + { perror("sem_open failed"); exit(EXIT_FAILURE); } + pid_t pid1; + pid1 = fork(); + if (pid1 == -1) + { + perror("fork failed!"); + exit(EXIT_FAILURE); + } - pid_t CHILD; - CHILD = fork(); - if (CHILD == -1) { - perror("fork failed!"); - exit(EXIT_FAILURE); - } + // Process 1 + if (pid1 == 0) + { + for (int i = 0; i < reps; i++) + { - // Parent Process - if(CHILD != 0){ - // Write data to the shared memory - for(int i = 0; i < reps; i++){ - - float* smoothImage = S1_smoothen(input_image); + float *smoothImage = S1_smoothen(input_image); memcpy(ptr, smoothImage, size); sem_post(sem_parent_child); - } - } + return 0; + } - // Child process - else if (CHILD == 0) { /* Child reads from pipe */ - pid_t GRAND_CHILD = fork(); + else + { + pid_t pid2 = fork(); - if (GRAND_CHILD == -1) { - perror("fork failed!"); - exit(EXIT_FAILURE); - } - - // Child Process - if(GRAND_CHILD != 0){ - - for(int i = 0; i < reps; i++){ + if (pid2 == -1) + { + perror("fork failed!"); + exit(EXIT_FAILURE); + } + // Process 2 + if (pid2 == 0) + { + for (int i = 0; i < reps; i++) + { sem_wait(sem_parent_child); float *details = S2_find_details(input_image, ptr); - memcpy(ptr2, details, 1024); + memcpy(ptr2, details, size); sem_post(sem_child_grandchild); // Signal grandchild - } - exit(EXIT_SUCCESS); - } - - // GrandChild Process - else if (GRAND_CHILD == 0) { + return 0; + } + else + { + float *sharp; printf("GC reading...\n"); - for(int i = 0; i < reps; i++){ - + for (int i = 0; i < reps; i++) + { sem_wait(sem_child_grandchild); sharp = S3_sharpen(input_image, ptr2); - } printf("GC reading done...\n"); - exit(EXIT_SUCCESS); - } - } - - wait(NULL); - wait(NULL); - - int ind=0; - for(int i = 0; i < sharpened_image->height; i++){ - for(int j = 0; j < sharpened_image->width; j++){ - for(int k = 0; k < 3; k++){ - sharpened_image->image_pixels[i][j][k] = sharp[ind++]; + struct image_t *sharpened_image = new struct image_t; + sharpened_image->height = height; + sharpened_image->width = width; + sharpened_image->image_pixels = new uint8_t**[sharpened_image->height]; + for (int i = 0; i < sharpened_image->height; i++) + { + sharpened_image->image_pixels[i] = new uint8_t*[sharpened_image->width]; + for (int j = 0; j < sharpened_image->width; j++) + { + sharpened_image->image_pixels[i][j] = new uint8_t[3]; + } } + + int ind = 0; + for (int i = 0; i < sharpened_image->height; i++) + { + for (int j = 0; j < sharpened_image->width; j++) + { + for (int k = 0; k < 3; k++) + { + sharpened_image->image_pixels[i][j][k] = sharp[ind]; + ind++; + } + } + } + printf("Writing output file...\n"); + write_ppm_file(argv[2], sharpened_image); } } - printf("Writing output file...\n"); - write_ppm_file(argv[2], sharpened_image); // Unmap the shared memory object - if (munmap(ptr, size) == -1) { + if (munmap(ptr, size) == -1) + { perror("munmap"); return 1; } // Close the shared memory file descriptor - if (close(shm_fd) == -1) { - perror("close"); - return 1; - } + // if (close(shm_fd) == -1) { + // perror("close"); + // return 1; + // } // Unmap the shared memory object - if (munmap(ptr2, size) == -1) { + if (munmap(ptr2, size) == -1) + { perror("munmap"); return 1; } // Close the shared memory file descriptor - if (close(shm2_fd) == -1) { - perror("close"); - return 1; - } + // if (close(shm2_fd) == -1) { + // perror("close"); + // return 1; + // } - shm_unlink(shm1_name); - shm_unlink(shm2_name); + // shm_unlink(shm1_name); + // shm_unlink(shm2_name); sem_close(sem_parent_child); sem_close(sem_child_grandchild); diff --git a/lab4/src/sharpener/image_sharpener.cpp b/lab4/src/sharpener/image_sharpener.cpp new file mode 100644 index 0000000..331bf9d --- /dev/null +++ b/lab4/src/sharpener/image_sharpener.cpp @@ -0,0 +1,192 @@ +#include +#include "libppm.h" +#include +#include +#include + +using namespace std; + +struct image_t *S1_smoothen(struct image_t *input_image) +{ + // cout << input_image->width << input_image->height << " " << input_image->image_pixels << endl; + int width = input_image->width; + int height = input_image->height; + + // memory allocation + struct image_t *smoother = new struct image_t; + smoother->height = height; + smoother->width = width; + smoother->image_pixels = new uint8_t **[height]; + for (int i = 0; i < height; i++) + { + smoother->image_pixels[i] = new uint8_t *[width]; + for (int j = 0; j < width; j++) + smoother->image_pixels[i][j] = new uint8_t[3]; + } + + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + for (int k = 0; k < 3; k++) + { + // image->image_pixels[i][j][k] = val; + // edge cases + if (i == 0 && j == 0) + { // i-1 and j - 1 doesnt exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9 + input_image->image_pixels[i + 1][j + 1][k] / 9); + } + else if (i == height - 1 && j == 0) + { // i+1 and j-1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i - 1][j + 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9); + } + + else if (i == 0 && j == width - 1) + { // i-1 and j+1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i + 1][j - 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9); + } + else if (i == height - 1 && j == width - 1) + { // i+1 and j+1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j - 1][k] / 9 + input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9); + } + else if (i == 0) + { // i - 1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9 + input_image->image_pixels[i + 1][j - 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9 + input_image->image_pixels[i + 1][j + 1][k] / 9); + } + + else if (j == 0) + { // j -1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i - 1][j + 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9 + input_image->image_pixels[i + 1][j + 1][k] / 9); + } + + else if (i == height - 1) + { // i+1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j - 1][k] / 9 + input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i - 1][j + 1][k] / 9 + input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9); + } + else if (j == width - 1) + { // j + 1 does not exist + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j - 1][k] / 9 + input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i + 1][j - 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9); + } + else + { + smoother->image_pixels[i][j][k] = (input_image->image_pixels[i - 1][j - 1][k] / 9 + input_image->image_pixels[i - 1][j][k] / 9 + input_image->image_pixels[i - 1][j + 1][k] / 9 + input_image->image_pixels[i][j - 1][k] / 9 + input_image->image_pixels[i][j][k] / 9 + input_image->image_pixels[i][j + 1][k] / 9 + input_image->image_pixels[i + 1][j - 1][k] / 9 + input_image->image_pixels[i + 1][j][k] / 9 + input_image->image_pixels[i + 1][j + 1][k] / 9); + } + } + } + } + + return smoother; +} + +struct image_t *S2_find_details(struct image_t *input_image, struct image_t *smoothened_image) +{ + // TODO + int width = input_image->width; + int height = input_image->height; + + struct image_t *details = new struct image_t; + details->height = height; + details->width = width; + details->image_pixels = new uint8_t **[height]; + + for (int i = 0; i < height; i++) + { + details->image_pixels[i] = new uint8_t *[width]; + for (int j = 0; j < width; j++) + details->image_pixels[i][j] = new uint8_t[3]; + } + + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + for (int k = 0; k < 3; k++) + { + details->image_pixels[i][j][k] = max(0, input_image->image_pixels[i][j][k] - smoothened_image->image_pixels[i][j][k]); + } + } + } + + return details; +} + +struct image_t *S3_sharpen(struct image_t *input_image, struct image_t *details_image) +{ + // TODO + int width = input_image->width; + int height = input_image->height; + + int a = 1; + + struct image_t *sharp = new struct image_t; + sharp->height = height; + sharp->width = width; + sharp->image_pixels = new uint8_t **[height]; + + for (int i = 0; i < height; i++) + { + sharp->image_pixels[i] = new uint8_t *[width]; + for (int j = 0; j < width; j++) + sharp->image_pixels[i][j] = new uint8_t[3]; + } + + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + for (int k = 0; k < 3; k++) + { + sharp->image_pixels[i][j][k] = min(255, input_image->image_pixels[i][j][k] + a * details_image->image_pixels[i][j][k]); + } + } + } + return sharp; +} + +void free_image(struct image_t *image) { + int height = image->height; + int width = image->width; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + delete[] image->image_pixels[i][j]; + } + delete[] image->image_pixels[i]; + } + delete[] image->image_pixels; + delete image; +} + + +int main(int argc, char **argv) +{ + if (argc != 3) + { + cout << "usage: ./a.out \n\n"; + exit(0); + } + + auto start = chrono::high_resolution_clock::now(); + struct image_t *input_image = read_ppm_file(argv[1]); + struct image_t *smoothened_image; + struct image_t *details_image; + struct image_t *sharpened_image; + + for (int i = 0; i < 100; i++) { + smoothened_image = S1_smoothen(input_image); + details_image = S2_find_details(input_image, smoothened_image); + sharpened_image = S3_sharpen(input_image, details_image); + + // Free memory to avoid memory leaks + free_image(smoothened_image); + free_image(details_image); + free_image(sharpened_image); + } + + write_ppm_file(argv[2], sharpened_image); + auto end = std::chrono::high_resolution_clock::now(); + + chrono::duration duration = end - start; + cout << "Total time: " << duration.count() << endl; + + return 0; +} \ No newline at end of file diff --git a/lab4/src/ogSharpener/libppm.cpp b/lab4/src/sharpener/libppm.cpp similarity index 100% rename from lab4/src/ogSharpener/libppm.cpp rename to lab4/src/sharpener/libppm.cpp diff --git a/lab4/src/ogSharpener/libppm.h b/lab4/src/sharpener/libppm.h similarity index 100% rename from lab4/src/ogSharpener/libppm.h rename to lab4/src/sharpener/libppm.h