From 710106cda5bcecbce31d923fcc82f08fa159ac08 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Wed, 16 Jul 2003 17:43:06 +0000 Subject: [PATCH] added libtomcrypt-0.89 --- bits.c | 22 +- changes | 8 + crypt.c | 6 +- crypt.pdf | 2177 +++++++++++++++++++++++----------------------- crypt.tex | 2 +- dh.c | 6 +- makefile | 2 +- makefile.msvc | 2 - mpi.c | 653 ++++++++------ mycrypt.h | 4 +- mycrypt_macros.h | 14 +- prime.c | 98 +-- sha1.c | 1 - tommath.h | 17 +- twofish.c | 12 +- 15 files changed, 1509 insertions(+), 1515 deletions(-) diff --git a/bits.c b/bits.c index 19d2f0f..60e3a43 100644 --- a/bits.c +++ b/bits.c @@ -1,6 +1,4 @@ /* portable way to get secure random bits to feed a PRNG */ -#include -#include #include "mycrypt.h" #ifdef DEVRANDOM @@ -11,20 +9,26 @@ static unsigned long rng_nix(unsigned char *buf, unsigned long len, #ifdef NO_FILE return 0; #else - int src; + FILE *f; unsigned long x; #ifdef TRY_URANDOM_FIRST - src = open("/dev/urandom", O_RDONLY); - if (src == -1) + f = fopen("/dev/urandom", "rb"); + if (f == NULL) #endif /* TRY_URANDOM_FIRST */ - src = open("/dev/random", O_RDONLY); + f = fopen("/dev/random", "rb"); - if (src == -1) { + if (f == NULL) { return 0; } - x = (unsigned long)read(src, buf, (size_t)len); - close(src); + /* disable buffering */ + if (setvbuf(f, NULL, _IONBF, 0) != 0) { + fclose(f); + return 0; + } + + x = (unsigned long)fread(buf, 1, (size_t)len, f); + fclose(f); return x; #endif /* NO_FILE */ } diff --git a/changes b/changes index 5f5e4a2..b97b9fb 100644 --- a/changes +++ b/changes @@ -1,3 +1,11 @@ +July 15th, 2003 +v0.89 -- Fix a bug in bits.c which would prevent it from building with msvc + -- Merged in LibTomMath v0.24 [and I used the alloc/free macros this time!] + -- Removed the LTC version of next_prime() and replaced it with a call to the + mp_prime_next_prime() from LibTomMath + -- reverted bits.c to the 0.86 copy since the new one doesn't build in MSVC + or cygwin. + Jul 10th, 2003 v0.88 -- Sped up CAST5 key schedule for MSVC -- added "ulong32" which allows people on 64-bit platforms to force the 32-bit tables in diff --git a/crypt.c b/crypt.c index f3f36dd..1cefc89 100644 --- a/crypt.c +++ b/crypt.c @@ -519,9 +519,9 @@ const char *crypt_build_settings = #if defined(TRY_UNRANDOM_FIRST) " TRY_UNRANDOM_FIRST " #endif -#if defined(SMALL_PRIME_TAB) - " SMALL_PRIME_TAB " -#endif +#if defined(LTC_TEST) + " LTC_TEST " +#endif "\n" "\n\n\n" diff --git a/crypt.pdf b/crypt.pdf index d60aca0..97b8666 100644 --- a/crypt.pdf +++ b/crypt.pdf @@ -459,16 +459,16 @@ endobj << /S /GoTo /D [310 0 R /Fit ] >> endobj 312 0 obj << -/Length 482 +/Length 483 /Filter /FlateDecode >> stream xڍMo0 :@̘h l،^K $r:b2"|IBUӇ kE^Zm /i xdLtBA['QFUIk#z4ZP=s ⶬL/HvY6 -0ؿ\WlKyW@Frn[f20f؂uv>1852$Q8 +0ؿ\WlKyW@Frn[f20f؂uv>1852$Q9 )n@C92(QŷWWRu+ -/mDv'nm;0EfґMV"{ZT +!z"n2u#,`8n%:L)s[`hSC :ZISvMDa.SLO[j6!L"Vq53,c?X t~F~p4:A|Fus%lܟvK Vs缳p}vHcW Iendstream +/mDv'nm;0EfґMV"{ZT +!z"n2u#,`8n%:L)s[`hSC :ZISvMDa.SLO[j6!L"Vq53,c?X t~F~p4:A|Fus%lܟvKnl.c}sC%\]l endstream endobj 310 0 obj << /Type /Page @@ -3507,16 +3507,15 @@ endobj /Filter /FlateDecode >> stream -xR{8Tnسm#]d!\fל2(%Xfjf-iB*ڴT0z -;N7Q]6*uH,:s:^k{wgیA!(Ńe Pdg BEr( -`m@$.hB`<! f -C!>y7ʆ!xk~"`Aq̉ -B b Ae(K+qSn"<1B({_Z,x ^O]0abٚāE]lAs gg7,d! /ZCg < n 7c‰.v0"#|廹}Ϭ`WZ~5Y&jSN7 *>Sf1V&ȊZziTGĈiyެS7?dX6sޮw =^ux3%Ca6lڮ^U_Z+䵤\;% #b(YQO;E3_ -:لȵuNZ`B̤^7XV܁v]:Ԕ|9k*-cȪxudds!݈Q*}kӮe?t̎Hw>sϷ2o<hP{\zx}W6%rڇGcq6*A  ?nXfVC蕞k=RxS1 G(JCЉX1PKw|RSP/( sdOdYMKM4!K/AKe&ߣ n{χ&N=ѳ52*(Mc_r+VZNXQ-)AN{5e= -OARһ*d{cKiEԱK%+'l_.<^!VFU :eKvKgi!}[A%fQG䏞*|TBu.Mzu}[t` |;L'K*Oendstream +xR{8Tnسm#]d%ra9e(Ƚeff2ˌ &M[Jek 3tsmRn΢iy_k?{v8h(@9łxlL42r PB +`@llVD#c07\lt1Y 4>lD[<05Q)+O*vkiw:߰]`4`FRuXqXڑǫ{72$ᨐJ퀷ٞI(fyW6Of^ݵ{DWoɽਟ;jk&'nce +Qe^,?\ Z%RSէVtYbl{Up9YT5s( +Ĭu2z3j̬*@ovw|4Tr;|uUO`Ckr}C!"lHCw횧cdW:|_%oVp? & Һuo.8H,Sؠm٬\[G]@o +&u*L%ɍ&gvtYL띋S^*PiQV':#;쓤Z~E X[|kn@zW5{<8ќ)o%Mi:#Oػ3# Ywi[NW>|q jJ=HO`r8WU-BZs38JHEUsMtG5"2G̷)Yk ͎?TVnj?.i)25ś|o5]w^I9_]@ifL[:ݒ|(hnrZ= OiK q:jήݧeߧ)S| :~CupT! cR^J .fU1G.T,Lαx:z{U@eZ+BΖd?|hW/=nʜw1?8uw2.^ 3@#|g7p]ClIf8oɷfw5/pdM߹\kt3$I} 6gRy]$0]\Uw0㡙}vQҖRP?ZA3s yS +q+FB +ulFEXohlUsUo cŎԎ Rlbi&3H^Sm; k+Xj1ؚ^H{fc&`KnPm\ԽżLΆ,||v`lG=MN =aughYےJNiWҫ>/-.vv%|Jo>W%ܶM~ ;?+L?(Yo^Lv }eժZ2k9 XJN邂fyAU(:Ur~Xm2j0eEՁbOv~+jؑ!b 2)Bf\$u[w +|B"z^=rŽ0P7ҮF{7B߯kHΡ&<] j%UW֩\T!%!A &D vOn*endstream endobj 797 0 obj << /Type /Font @@ -3525,14 +3524,14 @@ endobj /FirstChar 49 /LastChar 51 /Widths 829 0 R -/BaseFont /GEFGAF+CMR5 +/BaseFont /YXYSSM+CMR5 /FontDescriptor 795 0 R >> endobj 795 0 obj << /Ascent 694 /CapHeight 680 /Descent -194 -/FontName /GEFGAF+CMR5 +/FontName /YXYSSM+CMR5 /ItalicAngle 0 /StemV 89 /XHeight 431 @@ -3557,20 +3556,16 @@ endobj >> stream xTgXSih($: -)$DP)41$B( DEЛRAmqY}?ySgWTA"5]C$ -.$2)t jH uഗ#&Qt~ 3PUF8*Ƞ4t  I -o;<sdxdU )$&:Qh7O4G:^&{hy O)@q˦1I29@ Lo[IORdЩ^L 3n$S?w D7 - Gsr$Z^xP|AIrnVvo謞ޡ?viFИ~ aNH /`PE "i>D'ShN - Ba0 Phd}94:$8oEpo O !g ut,5p"PwY 40#X#[UҘ['ؑ}AE'Wr%+HO+y{t:Qթ6 PH ݏF9p#fXzDŔ|))PjR{{^C? fuw/fǓ݅إTǂC_}>I@gg4&|޽x/xOz O9yY ľf\i%0-Ma'cl۞7QT4+_7ŐwX,I(C!NC^2_ԙdcZرrŸ%7~²Y-O)3o Bɷ{ɨѡ/W$PK,!8ǫfB - jmV2 -3b08sOPI\{E#њ(ߘEuf3 O?KJc]H*.4jQ'T*݇q96sٿfݰL5#<wƥI!EK/ȪD&ayBؗIM]aK"[>eV}u'}plqk-l`~Lն"|.%XH¹,,aJDJmu\oWa+ujp4|P}7Ld?^l^z hi,eEO}8HdIȒYݞUtԐJL) (Ft5y`OM]0yΆ >3Y"J[i1nbHuR1VCiڇY?Cm'v!GT *;: -}exʲ'da!Զ7>BlsV g=NjG7ACD7l A:_T(=U21>ZT\-;-: ݕHZc8`镾\-gEڕb0t WjȊee57!2DJޠOZWz[gOd%?Р^;a퍈܆X1TP!P:)䉋SWLP!}¸lC{mI_vm҄=pҚ:^Bp?@.+eM@& -6_;#1f+k4tGqyZ[}/R6*l -|AGƍ3Ο_8؏a'_7Cr)-ͽ$l5A02P |1eyq<Yh$U#wOkp؈x&8!}OPF2RߛVm\;]A<ψXwNƴrݥDm.' ۠M7aTq0ri -x]2 o9p2_*zD"o,d3?V"Ӷa,|}/e$*&tNTR?a45龖1Ӳ5/[;^fHzD(TxW"ġz nnA^q ȻߙH#Ȥ AʞBiׁcgvdRmn^ ,XhZHX>ˆ%aֽv9Y*H݊ZrJ&ȵYU#)8dVm}^*7! R؍wmXeZLǘŹQ>`HteɢR陏){r֨Uxs2u+d{ e6Va7VZA{y"LZ딸`]F-%)ICpʉ_% I* {z#C.FSU;ze?+4׀6W{2e֗9UݻK< ;޸$,%pU~\[@OZ"۰wr $2t* -'FNendstream +)$D()Rd ibH. PCQ" tECQf""m#<;{{|J jx +4dYjHu$355B()1AʠX @jii@a8 1T'g4I%) Ҹd@` Og΂ CHB%ЉJy2;22ϖ7l\; zoQ͌D&$)2?R-LA +Ջc׈Ert'7PCu!SYdg nA:G'|-zf8ڭ9JgY/F!1 B@rϕ dJwPMd  +HJu W3X-7@|;W,~+}GH~_>[ei 5;Dѩ^>AjܪLܼA$C8] +.q%W tWZÊU<*,m>Ph8bKMlѺ| EC^󆕭D;"|7' DNv:ۡP_r>'*ݒ="xA$;Ntcb5%|Q*̙lj%]xܷc\D)}]a-JUBlZaF g 1딙{rH/|d=­gڎ-r( p!Q'x"/-y6}I(Ъ=^F%xi]X X)jQXpxڝr 'ViQp%;ZgH:p/mLS)t4Btz20vS$b xڥMhX `ןB#wY[.-Mh3>7 FWyO(mOž9r.y]dF)E^` I|֪|km2 15]姢7-OFwqzw$ުvߞѱ'8w:7n;nQ垼s4PO>bKcfZ\v?0]V%kO]kFl:UJ/sm{77"me:ָijkfG|4P,O'C2k +^W(L(I~//~?h>D^/h=|H8nV> m7D\N wEYXqTN?~?Qup4|Hs7Lt?^lYz hi,cGO}8HTdIS[kܙUtJԐ dJJ+(Ft5y`uhv- Q}f}ElxҮcbHuR V#iY?Cm'v~#JFT *;9U +}exʲZ'a!|uPzN%͎aʇ +ao>; h^[uNGnQymjl}K9%u;ZRwZ$w.Ѻ+Uv QdM-01>cq2Uk^#5+a@PŻ˲ h='8jnBSEKeA-8V9=>767?HT͸padžgݺc?|O.oS-[{jTp'd0@b_#FG<. ++wO=8kWi}V5US_Y.mStO,H21{zӰЛ×Ysm>i_> endobj 759 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /RRKUDD+CMMI12 +/FontName /WAZCBN+CMMI12 /ItalicAngle -14 /StemV 65 /XHeight 431 @@ -3602,18 +3597,14 @@ endobj /Length1 767 /Length2 1272 /Length3 532 -/Length 1841 +/Length 1842 /Filter /FlateDecode >> stream -x{<V5\񠱄13 SaӮg~1ܒ0EnvlKqNŢ6euVDR,V$v׾~?y?f`ęIpi 8<ށ@8BbH.:ɀH"HbpFyhH( D.L=p( k;7b#212P@!a.0™xpŧ!bfsh6 -__ m(e#GDcй0l ltF7wiFv6IfFrFcbPQzIs:}n&DX(gAr00 d9x<# -8I(Fb+6!px X\nUId"0]x{{nIS `L=M,:?H0n\!l~Bʼn"H, q)a U Np]$WokbLgJ:z0P=4.Q/JD Ã-fO=rWz݉ntQzcsYѩ?H0{+IϾ_|zrbw߅ѷV/ Wtf| 'S,t6B(\ɆP SvnԌT×iS -5=9_Tlk#uO'nrWYW/kFF#O4PRڠ::pCl)er䊶+k -i+i]&A)xUQ;=5xad?Zƚd3dܭΈ恠3y8 f:B޷Q7V&@שlOa^Ĺ<!KAAԱGۢFn+e3&aP/в|>,ƍP~'cD%Yc7+ZkS6fv2^]X.2:M7ӎ ok4P :ŜRwRܜRW{ޔ|4@ҙmtDUyҲsZ 5#GӯK|v`׶焍Jǐb}yØGhJϱ<=ah*Rϗ*:4KiǔV@k0t>|/{2iS>V:x_k2YOoHo9]>u13ăמv)ζ5+c>fhޤWU -ivj* -XI/ mNc ,: DP_h(NGY+)sV~y'F~ Fxpw;E QQ>W]lѸi 5ZJ (5:Ur MgvZ-XCf՗x]`uh[4ah@TP>"5E1H* `de͜:⤅gÂ;'L d ?َ'kj?G{-94%so͋e8z/JlrѺo|Sy)j -'C_Iq}cۏ|>aj:V1)Y[HZR&/?@<~endstream +x{<V5\#ar-`vU??1fd6d%6 f[4rSMeYUk_y_u~?~~>K7qPLH$DyPdJ$x'.P @| jC&ِ$"E (+Nk"+pQ&4DJ<cL L v?$")D0PrpfkH0 Xma~V,@:!@-03$!fsW> Eٯ6`Q|4 F҃ Q~bL)bƸqLGypc:7H[0sf16vGP!BZMDD(g!r01b .+2Nʁ8IL9OHIa$2ŭp#w +)Os k`E!&.Fg@!R̩b\[w$_D$a1mjDAcZuKŃ?~ͬu`UX3#u}C\IjjpcZcȈʼn3#Cs|`<)mJ<'ig# s˜k!Ye X8ҎFY/ ߷x}Z󦧛Ϣ]cp1;=|1\5Swt!͠;9M =j }}8mxRڵDiϪ'jIuECphyC3)mn> jo 4hZ uFь҅䉢J/N\J^uivt/JLN6َ-K.E+z6~S3855t~:뻳 9+Sà41K?0y6M} zؚn;->3Ob({HX3c's[ FVFW;^ʾ3Z}ْA[MҠm#Ӕs5eu1]]T!6:CQ FG6ˏ7jڅ|E;2SX+[oI? 4φxE6uVxvRee{}yʬZ +h]!+2صyQ|6RqlU|0 \=AoFb B9Jp!bm*Ў8#-pe?v5iJl5i[)}RoX%^jQpL:ؒ7PWjrҢ~^2ȐʺƷ_h94U?UY#=R Yx$XSr9+On=U1}\Oʺ[3еo*ګy;d$Gׇ⻭;D7Pn@X8NOˁuS֠yi'Va5d|w-qq>7\ٝ8T6!{|M%qp +'3}g|nK.{ͷֆyPo :u~+Z<7y\<(T)Az6H.?={ЊN8-/J,d?rW- ?ְ ʏ+Irww޸P^d{eKV/l-G-OV<\T[khɩ>^O[;]Gz 6T@\ q~endstream endobj 689 0 obj << /Type /Font @@ -3622,14 +3613,14 @@ endobj /FirstChar 120 /LastChar 120 /Widths 832 0 R -/BaseFont /TFWMSJ+CMMI5 +/BaseFont /GNTXTR+CMMI5 /FontDescriptor 687 0 R >> endobj 687 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /TFWMSJ+CMMI5 +/FontName /GNTXTR+CMMI5 /ItalicAngle -14 /StemV 90 /XHeight 431 @@ -3649,19 +3640,15 @@ endobj /Length1 811 /Length2 750 /Length3 532 -/Length 1330 +/Length 1331 /Filter /FlateDecode >> stream -xR{TU\|$=!,;<iB0sݙuvv! B `I#ҁ$D (O׳US - t <β^RR 9(h%b-O&18THT H4 $FdVl]ixIhա6c⟢mky*tRtQΰлɽo)sv%y=`Ş{-ݢ>qs\ oojmx(2_ʮP/Szw*<;"+9>h>/؜B$Jru𥇒#l5pТE_§-s~Τ%J}q' À+\jn/h*tiID e}ՑA9glS[]tvpřigT\mn1^o5U¥W1^QX +T:-ؘA@Qʲ{-n\@#bDUV[X%-qhhъ|t?}s=Qp$8#(RAH0E)Y2Z"Q- HP$ _,@E7QMddj$5 %Ä́jFCU@Aa@R8l!q. AN`Z3ųOqlXE"Ut/b΂dJ֐^Q52E !MN& oQ'tɨ\LBf B.h #=c- QU6ClIoO"SbP4kydDzs|!2ߪIg-&1 +' QH D"ġ@=c%)-0A:EC ux< 3) + $a s-kK>üNN@$@ErXp D(_:`&b^3{Nxy^IkvQ!V[7vd]pBʝ蒔Cş%m*rRo3(Xbe~p+}egW~JtŞ~qyuv1]뎕 +TY/Wh"O{Ę5=Ǣ·κvU<.=݈d^{fAgEH[_(JO92O~Ie+|knk*<45&&ױa}nݜ7:+vnV@WG[3Tqf;;Ww; DwM{ɕww+]:(8%6!b􂕷ruv+dĿXl,Gvor"-켊Kƾ*~HD1݋qMWQ9[ۆ*j~p- tY[&le#v_~4k빙wSu;8rϭ]A,ua[O=4ͣ㨧ȥdu{(tE]|CrW#Ӹھz˪:^e;M%M"e';z;˰%VxDvcjRwycl02&4GM-4}#"6q4H`Cَ+ú*jK\QՃZ;Y뮼y!]ߑ] ONl[|? LQZKQ:'endstream endobj 568 0 obj << /Type /Font @@ -3670,14 +3657,14 @@ endobj /FirstChar 0 /LastChar 48 /Widths 834 0 R -/BaseFont /UVEEUN+CMSY7 +/BaseFont /ABBRCV+CMSY7 /FontDescriptor 566 0 R >> endobj 566 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /UVEEUN+CMSY7 +/FontName /ABBRCV+CMSY7 /ItalicAngle -14 /StemV 93 /XHeight 431 @@ -3693,21 +3680,24 @@ endobj /Length1 799 /Length2 1216 /Length3 532 -/Length 1800 +/Length 1801 /Filter /FlateDecode >> stream xRkXg -B\T"ۆ{X"*֐@20P. -j -Z -J"7AZQ\ B]bPҟٙ?|=sτ$bY/WЬT 1`@wm@;0&`8B.ABB1@a6Ob',A<xPXkyB𩘏8 gD`I4 Yh4!| !JAbzC҈hXyfQ@``bqT(D 9!B{X!` C]Lߙ!D*Z`%/?MԖCTD0Yʟ’-z5ҿk_ۚjvFܼWSlL8Th4y %IY?IHrٝ O#Z!m.u~cOO9R &mc5өwNnr:9V%>L:Skbɝ}=Uҫ?4U6 Z+:fqI#f۶>)~ikLNѶ>{1b Ê -ʴe[>A5%tbm^^j0I _fElvqVk$DwOK lM8@_]noɆReԭF %%942olQژVsb[%EWUT#Pݰs?}\F5*NJ"&m&\3WKC߈(J8-b:͎s}FGc@эkJ$pN -3~Sd<; GS2fo4{΋HgR$+F{&jww]wŻ>t,ҵw dҤuL/wV}}R,C1534Ia!{!V9 2>2R%.O/3j*Pzݯom6y}KtUG0Knٙ?|=sτ l1YѬi-F4k*`b"y"F]yht!-t#$4 y 8` "\b>crk$%10dM1"(f= I#?b`I4n +P]#$Fr Wq+lPrM'B (R-` 7 CTxB +a@}!lDC>0^aZlOnn/;]h#<{ 2DDhC +̀'B 2ܱ5*#%RM$OBX _oY,3~3>d~俙{Q$J +s\JX/3X ՕǝڮuJ<1NJ4}d G}Tk4U60Z+:fqY#f۶>)~ikL;X[ܣ|ÎcEEeŲFտ$NVҎE҂뱶Fox/_7"{yE,"Q68u85b_ Ļ%N $=.\7~RdCu) +F %59,2ltǎ?ogiczZm]eWSy@w ۦ5UqW{"7voiaz_E>F9PYm?ov3:87(j'i YW}ӷF6uRpΜݒ`_HIp<1۰|ri__@rM՗"\94}ѻ49L۸,Keяn&&b|4վ6fb(}inצI + 9L]&ر(nt*qyzVSA}k;\cr?q%I嵯n|u6($ m7-J3ؿ"OT`*f_ZnmZed9/b[;0["tVg-`O #Ϊΰiy +ߙY9=mV*&SżAC3۝2b.|h=r%4p +iqOvuaU)Ϋ8Ĵ5Bv%8 #شq8u-D/΍間Ԡќէ/%vLΕ2OvǶA1O\ bWc{;D[$u׋){^Mu=Ok?93R`~[vKJi9W'Od-ٳ̕ZcWO_ +{cXbDї7Ћ'^v2MaXDB&afKú;!_!< &$endstream endobj 552 0 obj << /Type /Font @@ -3716,14 +3706,14 @@ endobj /FirstChar 0 /LastChar 1 /Widths 836 0 R -/BaseFont /HIXFLR+CMEX10 +/BaseFont /GCACSL+CMEX10 /FontDescriptor 550 0 R >> endobj 550 0 obj << /Ascent 40 /CapHeight 0 /Descent -600 -/FontName /HIXFLR+CMEX10 +/FontName /GCACSL+CMEX10 /ItalicAngle 0 /StemV 47 /XHeight 431 @@ -3753,7 +3743,7 @@ endobj stream xUX\!@ AC.-8 NwwHpww-{p >==qi~ګZUT`7dN@6[:?ƁFK+2vCm@o@ @x ڹ;-, 9MmJN X Sc@j 9!?pA. 364 `6u,h56s &`I2`fP[; dƮ ߐ2?z?6`Cm윝@%?j2;gV6 -en 3U%gdkS]YNU^Iϔ1IE1 ð8zl@@~TҶP3-8`F<O lkr`lP'#XKPl&723k`faS/{P?!>#Or ء3OcK_#8Pg?.X#AflM`C9K!+`&6?o=`KRC*?o=$?;#[-䀙~4/Y07˿D_ aa0 ۿ av!l^6__p a.!LnMv4<󅖐yrX9agxl s>Ӧ [ޠ Z@ 7)T0*>G:w ^¢!Fs =G,<`HўiF4siSڨ̩}LӮnGEmVKOx8G٪ R{˔p]z.u]A|2)5t\Iaܡ+q_W}BQΡ8(Y_ޤ؎[@,#"嘹)"s?65?ޗNp$}5n2;AU<<ʲMBXn+<$+sGÉߙ/)iN W1s ?>D|ZngCw cN.LoDRT/ޗhKj RyÊZF ۪q V_@K)0F8E >Q,ѤńiZ%g)'XcLos_]\K +en 3U%gdkS]B[CQEϔ1IE1 ð8zl@@~TҶP3-8`F<O lkr`lP'#XKPl&723k`faS/{P?!>#Or ء3OcK_#8Pg?.X#AflM`C9K!+`&6?o=`KRC*?o=$?;#[-䀙~4/Y07˿D_ aa0 ۿ av!l^6__p a.!LnMv4<󅖐yrX9agxl s>Ӧ [ޠ Z@ 7)T0*>G:w ^¢!Fs =G,<`HўiF4siSڨ̩}LӮnGEmVKOx8G٪ R{˔p]z.u]A|2)5t\Iaܡ+q_W}BQΡ8(Y_ޤ؎[@,#"嘹)"s?65?ޗNp$}5n2;AU<<ʲMBXn+<$+sGÉߙ/)iN W1s ?>D|ZngCw cN.LoDRT/ޗhKj RyÊZF ۪q V_@K)0F8E >Q,ѤńiZ%g)'XcLos_]\K b%wzmZN<['jδM~XD^$7'ijZ`OGFW!@nIZ2 `q}9i:)is[\4Qv./^6c_},y#_G6qTk c", }9֧W͖zN6Gʧ0yRLj(^~^e+CS&^8xP烧|Ty8OAHb> |a cut?ѹ2m>&gr33DM¨|Xs $H#;G"Ғ$JIq&3F cJ8JBr+.;7F۱l4!{_^Kpz ^kmOΓoqhF]Jn:mĜ2Vx  OŲm͞A4a[;li9^҉ʚʻ\igcqC7ԿhqP+~ܐjltG$,Ex`Nap>\_u8_;[v>+툖xQc79Ǎw S鋃!!CP7? cfn{//B=yi4jKo#ÕʛC o2L*?rJS=յ<塯vzGZ/V1suA>%: c8MkTfsF(Rxhlnpy5ZZ1"3 {ŕ'S>LVE|=b,r/Y÷Uv:NORQ<ڗ>+>Igyѐc8E#86v҇[aEw\˥Dtɻ'S/u >lNOĐH6|IT1=L<uߧDJ$!6=_RZCh|]1D\#ZTD}ӳō Z_cDs1FӬ~CW*Z!Ht%ң: ͽ7q!hlE3R @@ -3799,7 +3789,7 @@ j"j ;^3/f}W u[: b}O~.H2U5V^?!۶BHt%)\*)h`uix(B_,P존b/kʹ]~ [yW}|W>o<3x|zyLsնs$M*aU<"4ϫqh{rjEt.obvd\VpW N7m3ti~"1̶ڮi U,ּ᷸4+Ur+X.骋ӈїxӗOy  6MK\6qP& ryCfU)G|>U%FUxά=ԙ匧D< Mqh`s=O%}dR>[.4hRNTpN쳇h܂=QH1@|fE^ZבWD"i#v.G~xrv/_rp~' -B@NPck-hendstream +B@NPckGb{endstream endobj 523 0 obj << /Type /Font @@ -3808,14 +3798,14 @@ endobj /FirstChar 34 /LastChar 122 /Widths 838 0 R -/BaseFont /NHPIMK+CMR8 +/BaseFont /BXSKOS+CMR8 /FontDescriptor 521 0 R >> endobj 521 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /NHPIMK+CMR8 +/FontName /BXSKOS+CMR8 /ItalicAngle 0 /StemV 76 /XHeight 431 @@ -3835,17 +3825,20 @@ endobj /Filter /FlateDecode >> stream -xR}<NRL%Mu&{&.l7=5)e3̈́Q)"%tNϟu>s_]}N{t-Ht_КtH wh$ -@ ECVhр4D!<=àYf9!`A" ,2Hz T`HY$`A.s7 ! C|A -ӛc42Pfi-4"Q9 9Х@iF_ͭT6g/_GN b@`O' W;==HiVmX*hSA0)a ɉ"? D5tlnu_sD@,WN?MKgàPH --JϏ?_Z턈t & )h0 CBt - I$GgУC9(@JRLfz~t6'a1i_`iI ו.FFXT J0G Y"!IGQa N4 U+ڙ^,Uҿ:7P<+C-x`Crri836¹Z|88%sf0 5ߞ35ydDzՓXǎ4ϼ̏Fr6[]Js}!2p|[ъ.+҃ Ⅱ+N/ -r^Vgx>5A'j|JQɄIu '̸V3-)hׯژ=1p;j|л&23 -5S,7E{W7ޏ0p -HeQ'dͻ_E+= "kCo|S9;^MB1o삸hZ0FLEKXT}NS-{aގ*"N^,RCANpuYHΓjvojƆ[7Ϻl|C{ !5ޱȺeN!htP` L\);e$/,p?<&Ƿj.LK7{h/s-Me=>dƍUoOT-~+ЪpEGx[Yjw{bӛSl_$}u~8) Gʞdp{rNw+NC%lq_vh`fA,\Pu#[b%WPEsqj%i~TrR"Fz0&u^l55{vrDxCYu_'7^Tyg;g\WM~3@<y.t4\m V)'dmrTH_x)ޘ3Ǯ9Qks<3X1ƔW6 ;酋_uR.I@\SP'Zm );0OXYo95G2𢕪 TPǝ˒ٹV3+/#j`G0.|2wXdI`0uT+pb.4UγB:tsuլ` aFSJ6b Ndo^{JDCgx\:qnh -e?oUP~Vk/4, sާVO[Z5\StvVj[=}H<* o_umցv6p\94r= [hݛa.ot#d,E9h-D%T`Z#XGgXr)y'Lc;r3j})>;|V1?~.L3ֱ^윋5aAYu*@#Q:W(xevu=}ud93< rt1OM' Lrv#~]T,2O-';k>Un[߂_J&.h'WW/|)ZO&jT\BKV;!"DIB@@$0åy%HG408Gc, +cb(0?IzLi91XZ#tz!B7mQ(C#yf0@5w郀`8H=My +wtm Jv{ÛGpelC{H.W.\6 gtnIN s&(ݨ|4+Z۔Hf+׷K^h.hZѐ3S⏖otYR`/ [zfHt`5$G>+e{] q>P{crJ&Lܭc>1TiI@oG~4葹 yMLk"+2/m͎Z3;urCGt{w]UH, _ݚqBHo7~n2e䅅gVqiifbe% &X<^ġԒ/ud((%+U [y&s fiWGiWŽa\2ecjvֶ'USk>pE9VO +x_aeb + YØ[{I>Dz͇D:u͞mj:K_M.-4c5*~YK|oaFJ6b Nhꫠo^w{#"a3 +.De8+BrׂYQ7*(s?OV6AY9V^SĨ.w}K.m9l+5-{>8* o_u}ցv!6pс\4r#[lٛn!o:,ؚd#RiQNVB㸷n-JNbޫ;D{!~)x=kƋń}JƼ +^E:\gڇՔ&!qmJաߗ=2l ;ph (΁# ճ7E4eYx11m +|xi~"HDԓ82ʼn#zBF.Xjwd9/ϼVd8F=ۀȵ$ + X9L=8%zxql]NCMR''w,goإa> ձʾT}".:8Ἴ.U%(`$j_ +őy]~,IvYs /eSbe\kѕW[YK߮:+ږ\3s+wo/%|L@qO^o'WW/x-ZO&ɔկN5ZRXUq &y"xPM񋋹 +{\ddL/HaRIFa40~Y=UOp6 d ? ' T`iFOi endstream endobj 519 0 obj << /Type /Font @@ -3854,14 +3847,14 @@ endobj /FirstChar 49 /LastChar 54 /Widths 839 0 R -/BaseFont /CUKHQF+CMR6 +/BaseFont /ALRGLC+CMR6 /FontDescriptor 517 0 R >> endobj 517 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /CUKHQF+CMR6 +/FontName /ALRGLC+CMR6 /ItalicAngle 0 /StemV 83 /XHeight 431 @@ -3885,44 +3878,60 @@ endobj /Filter /FlateDecode >> stream -xSxڨ6۶ӨAcۚmضض̵W<_+fqƐ'{}pHd 85Ι6؀XP˂aI;jTT==gVO1s?_{z{M8jWnLj-7'lk# y}9rJ+D ]ε]ij!A,D -Hvš!.H q`!P4˗6N(P !d.4LS1jc_xY[?q͗24̢;5\vyĺ%qOZ贞'c-LRS.ɓ -(~֓H02ݰҘLʁv禩Y86T"tJ?1 Śn[Ix~PAJFg Zǡ/?.1 upCR#OPc iYҘDiLe0>fkm:$Sc, v`)WȇRe#&QkY~s(gR $)\x$sδZ ;7+ !F Bu{ TB2ʾn|I;$5#K|{O{ye32'_Xm=noL_MyN/fUV Qֺйxp4]ݩO_ܜ }J(H^Ap$ݐةZb;22h_&(ol?I8\n]M&R(,:~;4r]؎l6R甗+)~!jRфj0AԯU>]5xm{Y>]zMVP;}v+b?y<əzlчLQqG< ПQ% ՗Y3*1< p:H+ \RbtI47)yZu=:eT#Q]"! +6sP7K_Ƥ4Jky!r?br(F0{0QK2;. *LM,Êԧ8t0 -YdʼnddCVEO7ױjΉcS,]s[׺ܥ"i"#hn} H/ ݐxIџ*)Te0DDhqI\C9O:ԃNVy.|Ur~xs :~TbK`ғ[Kgb_ŖV*7ylG(G >smLͼn1k$ Elv)~ \]y73>Y)t9#+0~ӛ=R^nM긂6Pjo8Ok"L MN?>cqNeTfC 6zd],L jll8lx̼N(2&)ߕ#lZxtr'S`%܊4"RF2ymأuZ5YxJ%֮Dj].~#5i^ݶ7+Y,&~56ӫ'<;v=5ttUjZז qe<5 6{4H5I>e]Iز6 -=05d夎+Ʋ-y~Bz= ;/+Y[? ~KbFCuQiv?,+xZ&3]_&8i[ <%|4A>--D0bEւ / -|Oyl,g8,k_7K=(!,b&.;ZbX|1C.*F=dj @JWeE uz367 TSbZ]yrMg7xkx‘ZQL;D$(Vl\0yFnCAGbM8W>d\!~u$qVΔ, - 1Ua$~V4=U n*fI{]+j';)x;]R(xd -T%p=%$!ԑo\M 5!ILBx߫8[eGO_ͤ?ܾVe[U# jNQjm){l׋G҅1%|MP2_L5Lx 3 ,kmcL3!Emx@HPfN 7 ,WE6#W&.h,̒Ɛ7DoS}6m8d~N1m${S;· t7 S!X)Nq~ڶtJd,$n2٪Ea9BEvI6;IqFxîel+f5JD/?Ў[._9u![vj>PqH֭I dU2J;8}B5YD(#mԯBؽޑ$e-uWP l'If{_JaUtaYf|ΫF%5RzrPabLΑ& ]r4]I?'8՟:M_7uLzg &ڔ\{* W'[9&zŲҢ[&7t"Y@i(1S'{Uʆf -5q5V􈚅:" 3⫌qs0&+e:oRiڰ_%}sGzu?i׹)6BWktn7 -jp3_>Q^H! ϻ3KJ5,;~i3&brO=3$ c͎5GE֓Q[iVu&YȤ&Y}\-@IAyL{ZpiӾPb SxO0ѾRb4TAĻgYip2RN2}4ӔQ\)t)H$geQ|~#oH7?ݐiŞ`*$QFZۃ SԆId{E[pXޯ.\C|x¥{19duU;$v Hul\?N<; -`AX3\NSJ'|$v4_n84c C#:/ʛ@>a -fնA&m=\ /YF ?ư+Uo^BF$,V|ΐ*GlcvPݛqm;C7!@|Tlkkʚ6"EZMJKqdv(e­)Q%;sb0pxa14U-V]nI4_:)BFzUFwr/ɆjeG}-(B"2 '@Y>>F_On?#/B`ycےr Ǎc_+oYSC*>bCA;bv+W"yK1CؗVg`q+uUh@W߅WY<Íc:RUƳ6-{>? Tܫ2ea=!N4 ݏ`Ь0ʆD>xv|L s[Xgۨޢ6S+i=S 6*%{) - J\}j 1FGO5XrJhuX0ㄔ"tԼBAԤ/$P}ݨ8#r4dY />طs)m"]0B&`tEDtgiCI9>qWMֱgvhjqK~NKw)"4vG.B2}tF`ȱR )ahgt'iv)rtޤ`u1.MߟTkv5Y:f -8.Ģ[A⬮nk5F V]3'ԗ&kH~8t\uʇ+f6w`>L„I3;SSo_ѽ9WUIe}on+m(U;DZɿNڨFS>|LPz[fB¿VcaQ޴ -w@d9Q~G*"1k?A73i#6mg3L`1IM0UJfYvS7+Zd*qJgE_b<'-mO3]8᷷Nd3<.O 'm&g8-Ɗ3z7HIyny*vg /է@PIӄ|{01v -P*$g[¨MSNy&_qjU\d!aL\5ǎN8pkV#рסq">t! ~%m2xdƑU;_6`in-fAeGUiYGk&blnjeT[]İJuh!əOq&0h- 2?0n`- Ju9\M83eD>Ǭ!/J-+a$PN`c5ogWhh~acM.Ɯu\< -b%sTӨDW)LtQ \,(΃wWqީk8UZvgG" k^w׼~rz`Lr -%"7judsq"]\;vrwwuC̠BeAv"$Hmeߵr sY5K=]Y^,TenB>Gr'=Ln;I㊫SQ?nmx1 Wt|YomJ{ eplǯ%ɭdJwҗrW ICR29<\:1YY1h)=b4.]3/4Bco}oC=~`-h&P{:RmQ7'P8%b<jQ˸8<'R]*z$(rҹ:Uا*Oe4>G{#z'ocQkLX2M{atTbGߡ -D~SF.AW"P?"rl Z&7޳ LpPw> T$9MMj JޖЄp[7ǀfE/d3eLjxZs>Ky~F`g&NBo&9 v[/b5z(~ĔJTFc{72e}f-ۤ3Zbެ^PjA$Ւuˁ2&6$V3Dna4#kR{J. E9 දe\m8CƟuDkOd˟O֯:JՏt]PϮ~8bD p\roZ/ :&AH9sRѬi V>N'gCN2;usjv2`t}]_[5QYN7IXyn1_=KfV͙?>HjVŷOO"o*[ J20g3yBޏ"j-U3J6Nn [OO jE9< #&;(|Lohzsߎ2ݠ<\h %v02&m#N5Qn,T0ֵXʼn =HfSft'BhQO`!cGYT9G_X2Y諦3GEX\erx;RkFL $?Oteu8BXFoX\YGY)Y*B9A,?zjUR<&+ᕠK6`{UV2QHqnOPG|X:(0[ E.S#JJ'>ˁkͣpQb y 7l}g7 vdBqNʤ -٥|@aS<*QmtV/B<x+7pX >̊O輟2lBtćGC8Qi"AW;XCܡO/37_?jc -]g?UVl׹R7GF(̑y g/ 4cx*FIuZHl`MV 8diٶJtSaІH!  9gq~D2U1aEIeSҲƀӺۨCi7s{r?g Z5m ^|0ZRҊ"]Ǵpx3-/,`Р]f,4³d8EoM+4:#&A'Őo˒ ҡ/_}ΔT7"}T#&nyp v@oΓ٘)&|IHYgo %K8-֒-'M&ݻLnjSCZa~dml<)!.U,ɵEwl6$_$MlLr%t>SrX}8X'$PC|)(0m*H<@753:nN5߀+X<08Rhӵڳ'K]Bp[t,N%r:ݸR3Ҕ|[K_yRȈcpa,q+[]ʹ6K%](adr-M SI}/ѳЮЁ3j Et$5$dgQ| $nuIX:X4uHWȠdLM?|7:N'{ut2+fjKgSsGO'.Ag*1DCӞhx>c08(<-')7)sx`Wȟ.}abQv?0Ô_INo5~qz?(]A9-kv9_4U*@AGs!+2SlRNE!}^)zFEA;ۺ)Ott<'ϵ 5ټxy5 Yq|0SUQ:m]6 [JjĐ`4 Yn+zїt@}t"=@0 1-{T"ҩ[iX7#T3.J[&YT[s ,e퉔*5~I?fb e+Y XF%]NJX.Da ܒR ?-r& ^!eĆC.pU~Hx/hiՔ+a úGZ如(}hlH&A KqVzQޑvR n: -OYv26ɱaWV\/8vz_HIʦ~|5~^B6[ -˻N{dcĤrL>̽",>K̚W}ewc/ -фlo1nH+T.s!S]Sc^3"q'5Ѯs(siy!EÔ} -[$`_)눳w<\l`ۢF}1B)oi#`f?䞵4Xl4yZ$~YMЯ\Gq|Ck՚ýo-zHLXX#3`N gGmRsCx+hqSC,pl׮⊇+}ߕU6Խ -\]mqq_%:IBRRRkn;?e<}{aTVь<6~04(I*xv痲U3sxpXb|Z( "u[L/W'anx0ڛ%s-< ?SzRi(~۬?(~᝛Bm*Z^Zs:7d. z|MSjI'vCZ>VoO27I_Q/dԿ#8)eDXfY46 Zʪ,^29<8V T$YE^O5qpaay,/s;zFf=r0:ڕ}^w:^pY6AcA`kl2C-ܘ c}Tbs%&1~`'Zm-`endstream +xUXZ`!݂;;[pw wwtvyyoZ{ #U4Z[913q +I)*r23 L܄L\\LƄ̌Lܬ̬0dB6v&BTu ؙYJ9,9 , LžP`s018M`2&wv@)BJ$!P•` m ߐ䢎zkf=KS tqtJY +nRCSGnwг0522;dj/j05u00!ts+ 2oˀA^D]JY6Y=S+EW_ɱ3u!`gddv7%be`mhjlzvvz0$6Bw&BS+C !@oe !pJ< `ZMB`_X lA6B+GKV=A`3X98 ,Q{=Oo 2,FD7G`chX[ZG&6&wqVZbogo `g +7ـ&v?z@]#S?zu큋76Pϲ}8l@1{?@= ԰z3+T. PS݉8tN@_w +PTo|}';- XO❀$ XOꝀ XOoN;ɿ;NJNz7q멿pvzv.>0w.#\X۽o +.Aobb?@t@E?f@zVV Z@ ?a5@p|m\@pt\ +&f7|vqc'c^lݔLS\x02r0pޗz/)\0s<fIA^"%Ԡ_k:g`b@- +%lתUKSQqC[=D}m95^J#ޜLǫe\R ++Cti8vsZ(V#%:#ǂN{C5,_Z:uSuu R5G5M`4OԞ.T4Z,j[nCsLDK{ +l1D_L/*dtVE +qR^]`<$E9rU<;>ڭ%i-L* ۝t_ra湶ڦS>E99ɐm' ֝ZXra3|٫W-Y6 8m"џk7 EIMN=7DZB!q#R)bT\ d_'VY68<̦W"^_úʯvNO|W6#rΊUד/v +ƔTUtNhVkUyxe +'B՝q ݧG iNA)#--Hebӆ7=˭A +%%ﲇkڑLGt{%/6dP Y*P]􇰙?Sֳ*ӧ-mo:ɥSOicj%W`aw"ͳ:~5:{ 3JɊ [P2KXF%f;NW(i%mo3F(:ZnSzZL4Fcƪ)BE` _cXq=zoNT ,9 T꼝:X9Rٻ~AknZT4IӘ}s=٭A[is }A'>m[Ja83yuRJikLW + %kh:\|WSY|%-=EEvU.3M/2 +ugAl62<&7ݩӯYW 0[5g_' iՂ3lǗ޽6m ) 91tn%nu#ehкmm?)@NT@X29QEmYf]s`m{GcGό{B7=3y0)dˍ)kPN/jTPF_m.t>LHNN$$0ں٥b|Mɷgnٴk$n|: h2{X15mgs';51CFѺIi?g +25ebر bu(:-.(J\-blʱ:wmX q7FY[O^ECNh Tv‰.;.bωxnCDV + FwsH`^n>/k * Ƣ`!'">ȵDkr8,Y;?$Qt΂?E3y \PT|2Oo"C={M5ڜBɪu6rh4uIHO0-409nʍ:vRM50̞ꁓw0q7LgbtB6S7(8#f1JzaEUGhC&d׊BO,En@]?_8/2JhIz yyQ}T3@H OZCJHE&,6(ͷ% I ^pJ/wx8J:@Q rEօs~xawAP^5׳j> y ʉS5IzĿ/kEx9\A9v@x8 {>P7* ܸ7ď"M lklu]{p|/KtoF֝Wc3Gtڮ;=(Zn$(TUyDMyU/~=B^1/3|/(ʃA?vsܝghQZN~8}=-58o?B 4=6O%{'2K%wM2Tc3zHW(6Y"opЧ)4Dk45t碞64eNWVsyVPtZ85,y4ݬѯ%tGhFf31# k@W{8hXʭqO[ +5\yzqN Y42?ߓZ:Q@FW酺ZTT6R+U&muB4ox ¦\lwOV\%s,TS}MB hŸO@I|kΚdD.gѽzEh6z +\ߙ]}LJkUUh5?R%Ά˙^(|Z4Zd.](Sj_r9Y EATa˔_ZѺ 0KAЯA6ƾ&}42iI>fwEf7%MŀY"׆mj5L/ceM*Ԏw4W͂&T*zS_g}6m.!݇+g0(7ɿLjReXPgQ]6ne\'[ vv,#m%;̴#Yʖfrv@N(֤+O6P=qmY NbPg?\ȵ"8 He U;d#Yv:yTC)lʙwvm] #Ҍy(X6Tp"7L9RWZo!K&+tzS&YqDkOa}q${+AĖXtā\C$KW( $9d##K^U#':ʗQZGd?{W|=nD~P²͂^*RP>)hdWYVJ"`#x%vK'vC2ܶF)7C5;}=Aˀ#X]czV>#"&33HHR<3!_d={uO_gEh¯E?ނQ5iM .myjS!c + 8Uʶ_ًxuy/# NU^JosP6j#;k3:,j̒Yߺ,/`o(Ige҃&<ᑭ.+3Y d Ȁ񸣸)~5 bJM!ڕrJ-@/X ; Mԟ x3V(E1_G 7V V T;u(wgl`dSH8U- ¯:s,rΏς?C`zbzR9;iHZP쒁)A)v1rxdc媮yus7dZ{7IQva}C󭶅%)!Wy"pK*9r{4$sC@t=ۮAN9-ݩ՚gpVAv,+s_iHjG$E`GEoHJa104by2 [K$ sV0U0i"4lxb +5bZ>(6X|86䱢3G@r;::j7lYgrTkKC]lLf(B0;"{o0ZMvQ}_gHDjd)湸jn%Z=#\B'9gsd1?b{gÇb.|PD f#nkة +M Jޗen9.0O҂uTnRr_ +{VcA(nM*ߙà \:ou5'pKyIR4C2"d{I&W+;k\xx̏8&ϒl,^>.GA47 7؃,~Jvq>|x #+MݖKB".΢nӁ'(mIH*^u>, +5qZΘi~;F7@2\&kG0刁u۸.jk+=1`Z7ٚ`iŁN򅂕w=$v>I>lpxhԦpf֛n^+Ez]=yc_Ϊ {:gn\.^oS*}PFbWv+s>^(^F*C4({l7ƝZM֣2T(>ȭ5P5 j{ePTxxwu]3 JsZ܂R}čCAp >LPu4bT2CvbJuJ/+5݃k[6w#R'9Fmr3*Sۭl&8 iz9ftG[3)$U6# =<eտ1EW8+i#3jޑ +aO{ukQvH/U[ *[:L:\5h#SpK"mVVCku1 |3)+ q}AoW*ACѨd&~nlXɘ;Uog|+9 qF=5>f "`YS? W]ݢ&?ӹHٮֶ)՛ 9Y)X-Qs: )OD߽1үnv +}n1|mVrI3Ȅ&;o$wsl4^p rY -2EދDN#m[Tz7%T' <;EVd p^ц.%̺q3S\ZIF_!HBZ\1je*z'pi)PbtGշka)'t>vަ y€m_h "8vןvQ~[B/SMfdn% gf%Q3(9kڞF='Ja +|E_jeG)Ow޸N_Ҳ*==Ұ}vͪ*'f;P ~J'P2.mao-L8j)pލ}*oQFfH&8[ͨbr*LĶp1Z&YDʌHm+1cRXY +R fR *pu>Ur%=A`vMWX7qCo͋!lhs೘;xkS[o{IKe8-yHu'U:θ>ChH꒔חaR ڈMᣱy!o~NW~G!kE3?_֖l\/8>"`I((qW\91Rm'Aծz5 Q>z0.P6x*;t:Z  ?y\cn ;H*7Orǻd +^:@9{Sѣo14B".Cha'x&\3ImCz[;iHpsBݛr. 1N>Wnf*.Fˎ!|%C/0L2(nՌsm^j>Jk}uVRm(A~;,EXfnh1xj[=##ԦCY9gK2ױǪR.{:\TXO*AXVjpI=~W)4"D̃۾q:$;1 i?w?$ +#Ȅ??Ȯ_u"Q2I8}]p)Ÿ<.0pȰL[B+~,@  w]?2!G$d>]@ga]ɚ.߻6$4$b.2Ho 8zy{!T^?Ln1Tx8`[*2~[0/ RX:Y,_hXfM }dw wF< Ԏd3J!ObB{ȗ3 M?={&g͟.D0㔷)J;ea<88ʦr5c ET[+fDl[ li~ =shyXF\MW e1AcqxfQ9/?adÑSC$j8|Y:mac7B]/{,NZмluzQC1Q2Hc"QԯdGU{:/,*ʈ.wg6$9z7΃w>em#ԥg0 ac%_rF/eD$Pٲ<ܦW Wj"/}DGaWYbogG #kĹ=BbCl)pyBPR: ]\kx.g)jp B -%P|϶Wdu}ǯNf,$HL2Yڷ]{] t/nh-6ţRuYFg"D΃ /BL{} +(鹀0n#ά/#A$Kj/M|x!: qx.t#5]/r9sciï_q=&QuvSeŶ (s+`螀BpFҀu\=a$dw*d}MJ D'e= m$ +"~  o#l&'G+S\ecVQT6EM+Z_) 80ͻ:F|S's&QH0U|0 1؝/+H+űL 7#Q<tSsDUy,3WmiGgdD?h!?nY$Z+/^ՙ*Pj|.n\b0R%= $<ɓm—T/m-{;&Z\޼_rl-r`۽t8;tPXFbxҘP2a)_wQ~fCgqJܴ';.w\B=%ՃuDN 1Ηd, +Z`=y?.A xSza>s\oT߼esϓq$;g0q_ÆDD/GȞ@;5BC.߁%Qf?eL${ʐ^wS-ւ6l&;#e&0]{|>dZ1E*{0ygrt*֗嚁Z"?{BF fpC$+*K,t}#fɵ4N7LE))-YgO״}=1:6$ '6vD +CB^N*-QVA؞Em]8LCT&aX#L!yj"1!6I:2H_r(8Rɔ.E-?8;  U*3GMqO{ z=@tH^;ڤi=@>^9#AuHl7[e|U / +ڎL%9-˃kG;л7ޣxYXPxQBzT( ~n ϵbOS)YszEv':cyYdCn2TQ-=d +o̟<6dT52dMgNU[oQAG\i /66Т d85MBE|/fOmz#y&'Aܛ?|,&[UdFGGR5p= ũ Hd͕>tBݟ4ͻBe򐦢nX9ZEXQ'˻Cř@"j|AVSZCS0Ggeo3y]ruTL(<#S5%#I|#>VD/Mu+8QޫcD{'p4(S]HnbK QM- (mfRmΕi@fX(YWk2"|)&0-F@V(͙ kKR?]h_M& 4ZHB:ʈ ]x`$.y:'HM:cY|~ D_Zq![NNMQvvF'ˁ + +MN!>~8㌍n u"tN硙JdRm֓c/8v/t0_plyvFQL옛}*KNϷc9't|Y& q'E"qcv+&`b4FC`g> sU6q12g$($ j2K^)ܥpO< +J֤AgVx[zShEquE=wښPu5n~L_D|E(h_s.f7vDQQZ ZPCV ޷){l'Aa]̏]zF&֔NR-ڪVW(rM7#$ScuU4KpoZ6]n JDlW)Gc|sBԨVthx=[ḋ/CK:؂D5zi2U?C[w/HrTntzyE̅U]GBƸJke?%jm:LK 鍝+1eϔwzﶣ~+xrm~0]2K9f3]8&`]vS[rݥdɝ&w J%kL$X%oT`g_4GJ>0cV~ɬF1ƈ>'C#U tRtY]=cP5ɣ4 +O +%qSoR +A区ߔ"GA˚~ȶ[]YG6;jϷ>snj7 }to I6j:lm+,s^ BJm3P`maO_<ϰ+{=AP8 'ezqc_v٨?*;Jve{E ='%(sDrb_? Sq7ˣo~#ޙrwvgn)ľI({ւn0b5Ck(f6\rE5nEs-+QsTsvdF&G7#V"~alϳGNS:5-MK͉oٯ\njN 6!Y|W8\yLRVR,wqD۷,mxIr$;,E Η + Xs%έ%ӫ⺊fQs6GQ/|HRy5ijN8{w.NiK,17o3\ :TkgIB`wI6LLR![oУd؅Wn +RJy)k0ސ d6MM/o8aya0Zl4wuab&z9]2,Z {P!گCG$Mio<#a 籊x+hNMz}!5w%L|6#J5ʹI|UFhDf:h!˜o%?ϲN7z }~S.#oP&j43wvk:[YRem'?-9m  \p#6FΏ~S 9h6rChw םKLAfh./<9W^bJi9]YۂC^U9yac733q9b(d9((R~KjZ $eךhw3&g!99iɠz2Ʊ_GO5B lxQ~E= hҺ%.Z{xa0sATs _xP+V1q]Yȇj8\d=X?UhB5sdCKufTom^TWh U_)Cesd H``гsԳ3_endstream endobj 516 0 obj << /Type /Font @@ -3931,14 +3940,14 @@ endobj /FirstChar 33 /LastChar 125 /Widths 841 0 R -/BaseFont /JHHLYZ+CMTT9 +/BaseFont /REZMVY+CMTT9 /FontDescriptor 514 0 R >> endobj 514 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /JHHLYZ+CMTT9 +/FontName /REZMVY+CMTT9 /ItalicAngle 0 /StemV 74 /XHeight 431 @@ -3958,21 +3967,19 @@ endobj /Filter /FlateDecode >> stream -xRi<Fwhd-2֙ c/ٷd30"K]ެo K"DTd-K,:S|BcR62JUƃ^= r$,KqݔEX~[ZQ97mVUF?7ih;p:e~ -oH=4лe"V6j cxuڡʳQQ37>< y(J9A8RrXv2G -LJۙvD@--vC_0.8e}!Tz͍ή띜&vnude,.+)(? ۊT4_]eW-ܶtt>e6}i  QSF$]~|~5Q9w)PKVD._28_-Pߟ;ϯt/xMnNJ\1ƭ1Xb*_SO?b,sFtl9sׇV%_-hw{ J,xJ\ JH -q ͳ\N#]Z'ѽQAF-l>Nb|Q*՞eEZ JNU8/ؒH lpUK]Dxt ZD(+ - eZGPHiMtQ yP>.s҇bJv W%Ibܗ=4HbܓƼ35k̏8f,k,gQx$DR,żD: +\Etq+tnꙑfpMܶkUQ[ \`rc޼%a⿵Yv܄~eH8<7v^3s ' /$.UU/m2K"/N E^ݮsRsv[o{bMUlS[q'wAO(EK"̓o .2ᧂϛFᖊ?wڙ]I)81/(΄~# Ij4w}M,sw91b|_geV`vo=}taֶP*}6!)'Z{8ڝ3',7?s˻czR5a` S(0Xq,MmG6'n.?VtmK튵|I&u~5,J"ks:'.ht,eL]@ZBU)ӷ mGGT[0.%۽UGV -V/񄹤ɇӿ ̵\fJd`8BѠU?ߏf<1x'];Sݳ`!OFwfGy}(!Bke~ӢլhyA%P"u{tF_}.'HQ1`8vכ XrI:ژ>t" -VrCo;#ޘ~8=mc5R;*T.{&w͍= œ |9;tO4p#l\ h;I8(YwW!(p^u4|Y1vV!'ҠsgnMtr̩g'p</^5s7N+ -dt7ӧٗ2Sw+<~?~c(<̭1|NJ :agJXdTY`#~g^"ij9l9?_:`|5ƴllZrkVEz;U k>|R>۹MjihܩP#  Ri?,Os endstream +xRi<Fw02֙,Cdߒ}<0fc,YRR$M!e9!"KH,LLnOws_s߷>S4ER 0EH%DFƐ +biD +K&PBBdCJJ"4R8,|@K(8"Hc($`D` T:W ^7 QǔL0>8RXYVH8I  ʖ] +#ԏ$%=Gb$.[OtK;ֲFs\cRlM.􊦛h'LC#*R{3%ƏM{7&7Z2.Xǝ6{Լ:svZi[\T(~@cBFB@IɄ/OV/cL6kJ$DkDo+/sh{CGaLhYaٕug 5-lbګ!}l|^0=i}!Pz͝nrپOכN˒mS3ɷQIOdx+J~3wnzOZvDJZ\s%&fz=,*5LH+T]|q^bSaEn^[9Z2n\yǙeU 0Ռz4RF¤c`GRL!LQRdPgbWiO[^ vop$ +>6Bn֨jP*q$ƷmZU[5?p)!\wԲ.||-!^s3^kYϪc"?x6l4O($gDRE 4%y誇 +, QX^V[9CoUp]ȔvMuI1Ȫ;f%v=9]u{XϰLHMeFH9- gΉwhrrp6fO8]UYֱ)(:<q} %Jk]%ԔJ~cƂҌqLə[!_S".l* +$|,Zo2"JIC@VJ4 _+-Ud8Բ  Sֹ}KrcJӼ*# g{$\:B!<}xcDbͨ{JĀS2jfuꭩG&ACY~aUށv-CE*%ݓa+ɺS7<£F](D(w͍SXsoۉ/''$vğr xu?dG*o^HvS ʶk_Ëf2Z]by(a^$ x `RL3'JX#VNL S+p1O!ƝGy2})m k%sO2is(Q͍*q=Ѻ#ۯN In/` *kGkRЇ^J.4~{՜iqgC<гܶ}Aq|a}uvv+R'P:Z" o;]-ʜ$|:3X,h#}dznOdOﮘ$YCP4d^(֝e.weWNaZ w"mcv]kAw.ut**vbRHV;/~ՋKvlEUxn)vv=WZ#9W ;atClUuZȕ<>CHZ6/^d.QyCfQkEc)uηӠbTXHo+oǨX;cEq큄x\6EcA $Dy sՊ4>]d.JbUBAj`bPkcObbܝ> +T1Qb2n8DЅ8֥$]Tÿυ<kdzט|;ufji5ْ7un7bo6+қa {;OKng}L7c>ԭ3\߿STC8(X䟼Dendstream endobj 513 0 obj << /Type /Font @@ -3981,14 +3988,14 @@ endobj /FirstChar 40 /LastChar 57 /Widths 842 0 R -/BaseFont /SDLJAL+CMR7 +/BaseFont /ICEXTB+CMR7 /FontDescriptor 511 0 R >> endobj 511 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /SDLJAL+CMR7 +/FontName /ICEXTB+CMR7 /ItalicAngle 0 /StemV 79 /XHeight 431 @@ -4004,17 +4011,16 @@ endobj /Length1 793 /Length2 782 /Length3 532 -/Length 1354 +/Length 1353 /Filter /FlateDecode >> stream -xRkPWE->@AzE bSҀ,7N (Eh+2H"T[EiPPDyT-*bQ(*-c@?}s=uDzT H!7$2 <ї(CP@Oxx [=BO|)&0Ho %A$ArIad4<-*HBA`"ArFC6VR!bMYI'Z)R8q{dFPTa7*/PH -49 { 8VDTN`dWĝ'p *H`$ C*8ԇ$> -ސ~x4xT0 JLF yFlF4 xo刳I 2EsJӨ#`"Xa:a>v `EsC`Ci#0ss|VJ||5n! }ڿI"E H E#4 If]ٽe7t^y9w|[_޺ߔ?aqg'2w6RTnlJnmǦl -͏=x| -W:QH+ͺ'<7Аiu .YMJ>g~}m숂3;+uJKY;c}-7JTgLL@_㬔Ѻ:L8N%xR1(,yEqτ=+a]ru٧RO&;h_g-̔\t˶k.(I{cdЉVv䋕5~\Vli[X>eJqTCS9"22:,F"_h'ys6KjCq16muOO\ù.7_ͷK5V}eS!] A|ڕr-o-sxe {{]h~Bы35yoӳjޢc4%qؾ|}R__k6y`ٽ/wu~e Gwe/ɭ -z*B<̉gu[UFk?<Ƈpɵ({^8DeQr泵O}M //p Q|I¦$]P]mj&]uDw#L*hs0 ̈RSQ[pt;{r]J9VkqҹXWn;'3Es,d)[0,̠3,}ə([~Uo?1S,o6OOG -_?!!J39yEendstream +xRkPWE->@A"bS𪀊,7N (Eh+2HAD|V4((<SeіnStsHÝ= : +PwP³f ƒ4僱nn(T'T H.70dB" f{;Hੀ cD4pLiF{zl{ҟ-OVa =git6hV͵ټr}W<˾dkk[6Lmp=.*?@vh[K9}s٦eBu}W(׾Hb̨7KiYG^[o1@o_>W_Wk4}y`9<7u>Fwe/ͩx*Bui.Eֶh/~r%¬<{jcQٖI&gˍO>)m49_pxm _wO2%(jS3ר#!W Gʎ<hA̰A5Dͺ}goj_[[itbjM:'BmՁTzQyW5cǛD}fZY>nr VŶoU[KI. B3ǻ?x 'p9V`LOrendstream endobj 509 0 obj << /Type /Font @@ -4023,14 +4029,14 @@ endobj /FirstChar 24 /LastChar 33 /Widths 843 0 R -/BaseFont /QZXKVA+CMSY9 +/BaseFont /QQBZUQ+CMSY9 /FontDescriptor 507 0 R >> endobj 507 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /QZXKVA+CMSY9 +/FontName /QQBZUQ+CMSY9 /ItalicAngle -14 /StemV 87 /XHeight 431 @@ -4050,14 +4056,14 @@ endobj /Filter /FlateDecode >> stream -xR}( X7D7,0eE0yK?!K+M 6-IExR9'+7l}-Uyy\/a!@!X|Mƀ!u] l*ƒ '}sE[Q0C uvonvϋ]y\DS*L+#r <'(iWH`K@bJ)[2OGp0b@L A@/x/ _F6dX='cp%; dKB/^`W: GlLc픸TURI,󢚥0Bb[kNX3ՏwڇqKW(A~@~'Zk,>o؊TZ4ʆzMVo'#*v  GSg -nI+i*δ̺*s~n4֬OB_Q8v:Qn _@Y70Y r@;F_q¤gg˕Fsey3i.;Ux'+6AKq?^67ٚ1U寽Tn6ֲrQ٥,=/SKHL:[t":^yygґ U\;tj3N3e~pY鬦Uih q/lsvewjDuIq$p댡Pz}ӱҝ]l[y֯LmVCmYg|{ȏu|tx5Q>qz.YK5cӈ)UGjS԰CHY`~tLڿ Oy0(|Pla:nendstream +xR}Cs8}:bǫ8-!zDl<1 o2~i\=).MzuR<,m +]sQ+(uF&ŸdUn<=bRiG֙D;母lB~J27oO\Sl:_endstream endobj 506 0 obj << /Type /Font @@ -4066,14 +4072,14 @@ endobj /FirstChar 58 /LastChar 121 /Widths 844 0 R -/BaseFont /LLMVSH+CMMI9 +/BaseFont /OEQOOD+CMMI9 /FontDescriptor 504 0 R >> endobj 504 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /LLMVSH+CMMI9 +/FontName /OEQOOD+CMMI9 /ItalicAngle -14 /StemV 74 /XHeight 431 @@ -4093,14 +4099,21 @@ endobj /Filter /FlateDecode >> stream -xy<Ǔ%M&[ز1֡i 1,̔)c"[$"K*K%Kd9S<ϟu^{}_un%G[I4(BlLBRR214dQ}-8E!uQZ: %Ġ|h"=$O!`1$Cr5"D4&`B$?oPG<O 4A#`i7ޗ@~$a=TBT&UEDd8fKsoH91" -ȁAtؐqx -'𿽙bI X/T BgOa Ǔp/0Vn꿷+g!hΌ,ň3w6BׄBod}:B0@w% H8|i4;C~.g700`? |@m0FWr Wr 2sꦦp>aYЅD-8+S(x+n/!pLJᱠdazuӇ\6zC,V.G9?)&C!''NɠlA+Q3}K:ʋ<]HU娠rƿh?ίfOEq&*WER -K]~2mV|y!# eo~,Ǭi٪PoDe,C^Tjo?c$_53h>fb<Y9ye+u N͹ڴ)5π^5{T4IFcOLB(]򁰽[M׭N#Q|JLSwCE֏Ums+Ϩy=K񓘽jGm"*\/ќpO%^}ώ䦜T>T$U`yϨ.c}9{{}ݵxhIҘ/, -;inKjtO7ضuE{=c%Aɲk)CT'ZBJo4ph})ee~{J%sHx _[LC)ݶ{k &am5r$ %㱷<{}yPO$.cy^}qDmjm#|uFCƅâzz]dw}Ae\t=6fU0=qD6Z̨=181Č*2ó0Royޞ`NGjmzL΀Oŕ}ZqiJL LHMT4;fuIBaJw8&ج洙yE[rv(9zK9ՆI7<$ Qج뿢$Stmί, Jn-*s">PtB;)$"2YVLeg49l_vUr̥6XC45 *}D+Hp0 Et}d,JdniUA"k؁榩kǁ$xy.dli~p띿Kδ`3O5P0O7Ie>-_һ|<Bůh2ћ,iʵ+0;Y췞G`(J807mOtWhڱ6Oqz6?O ?A:u:,VLڵq-jiByxC]#? - P.Uv/>3~{9{{8-ۉl?ۛ00-X9ۥrxw_OeIEMTaA|!_K߅21<VDF+Ov^o84P7}?b7[Ja*mee?6(|x,EL̨M&6K?xC.º ZWMtgw)W0/Ж +׏AB}ut͵v&r$%;.;kQLQâvʾ dsTb&‹e ,ȁJ? endstream +xy<Ǔ%M&[d6fXʖB^c=0f"-ةV*.aȒʒdRl)YT:9|uݟ[b5S 2Bs[3!Ђͩ,H![`04D _@ PH=.H01D_?:jH0 $P8,< 8QpDH4@#PCx-8:M%A>@w+BxUI5gO!)^ SdHhlOCGH$1Ġ-O^zۛ.Vt,3%wH$D:h_qw 2sqC[:h毜=H;3#ͼPa;\ G +y?Ͽ:DQD29X*tp@$ a!gEyWD؀ +LF`؟dp" @$u #TY)}BpB!tUv3'BNLdg2ǃ.GMU.uuLv|Kt7MM!MYzLK2$Q,=9طbIoEx=GyX?6R1˝"ɹy٫ïЙ*4nO ˰nhJ%HNң)ᔐ4-^gHn= =n8=o1Ncbkf>`Yu8.Hw*2<*YvG%^]4r(0-|Oaۆ>苩H][>t7eUmVբ>BnhjڪYܐl&{TrE$48>q,ND)KgRL>t)6xk`TvaOٷVl(#10qE]ky.v_NCW" 3CFlCwQb8t¦mIN!#^b +<چHقёФ'Oi=?$Bª3rsWFL #тUpq}{˾mJ?9&{X*Eg=1QbQx3N=;K%=6fVi{_ET/wo++k=wFB3 +Ow[6#'wi$ș F$8xg}1a~XQidj#mpHhY>3 %): +,x\XzX$~I|; FbG/u3[V-y0Ҕbu^ ! +깵o t}]T?wI_~ʾvESܾw~ջʋP9,s_7[ RDz:K ;[`~Ȥ9 u=->u =#sE?d-ڧތ'꽍s+- nǪ2%:VawozRD'f]6lwcC +Y@vwxHsPN+,9a;!~G6vi`CπW׋ZrY qUttNsɯУQ97{ :J6!^CSAZSL]Wh V7-Kuh>HС<KPJaN||ҥQ3whRw + wX֜vSn5^Fx8 ˋF *XӕjN!f{d[>bAWu,==u' .]VO;7em}Dd͊6]7l:pN 3OR?*,y.< +ړ-Id{ G`?R4>o7u_W{M|!x' }8:yPٴ2Qx>ijd]CBdmw-◵-SO[f h޿W׶a}0 =R2j:KےP yy^**[3׶{8αҢܙGOޥWo+*]TM3]N l4gbUb?"SIE41G%1r״lI~I6 +Qe}+f  +9,p%I-2kU"/}vT8U9r1(ťb"vδ'.s4R4UD{ne":N2 hOV'1f7HK$W_}lGZJqv8~űy2]ѐ1(~5`$eZ=6U,bOO41kr#|  y:>&Ll)hob+~?{+72+=SQE@v\2Kt"is3vY_CgYkeN91˾٭^Ǹྤ3O%B6kwy~ £/)Ţb%oCT#6j(Kդ<]'JbBK6+(f_:@W>N MR8d셤Mݓ)!EdT +sƫ7TL +{-yR{aL;#1="7&Z:JMXq2sq V~.ꃪ^zrQwJyLiW'i)QrAǛD6/aGmWtvviV!eƝL [#H0Dn~%Uѓ+3vhx'w9|#zք\ 2JO(DX?8.4cnPpU^ϏG£pJԇKe |p^i4~;^.p =w{C4v'&ӳy׳7{: 늾@LIw*3aH hCɻP +obҲ؈p)Εkg[~K9,G5Ǚ[/eHIiމۤFFgv?ߦy>evXQ +RQҸ.CsJ@"mƨ,}44!-dL@WG˭r>@+ NzcB;鋑9Lr>,OD6B>*2f ̿X? X*&U endstream endobj 503 0 obj << /Type /Font @@ -4109,14 +4122,14 @@ endobj /FirstChar 97 /LastChar 117 /Widths 845 0 R -/BaseFont /AVJZDD+CMBX9 +/BaseFont /UZNFQU+CMBX9 /FontDescriptor 501 0 R >> endobj 501 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /AVJZDD+CMBX9 +/FontName /UZNFQU+CMBX9 /ItalicAngle 0 /StemV 117 /XHeight 444 @@ -4137,7 +4150,7 @@ endobj >> stream xUXͶ !{݂6и =ww -8kh_FԨz뽚LYQ(` `ebAsM\7K #;GN^D*3A ndfbP0qځs@@W/&-@.U h΄ -0L {D[8K6ws!w $-l `@dVta?K*ܣcd\sj˚f2& 3{K[ $$h r5Xغm,&&!Iא UIapoA=&Vp ߿ 9|8&&^s&N+do=~\S,LV6_`v4q-\[ k/us#pL(f+/G+ < `v5q^= vgW?ups#~"v]7ͺ +0L {D[8K6ws!w $-l `@dVta?K*ܣcd\sj˚f2& 3{K[ $$h r5Xغm!(Mא UIapoA=&Vp ߿ 9|8&&^s&N+do=~\S,LV6_`v4q-\[ k/us#pL(f+/G+ < `v5q^= vgW?ups#~"v]7ͺ 334 # ?^7qK!S?)SCz\OTDi!p=?o_Ț&f6@qx^p2?6oobe7 ? ZXvB /۰`!؆_:W׿l/p 6< ]mx`uad0pNjj؃܀2'_3Jp{|7[& 4C\Yt0 Nm /(lNPD YN-s\rs@B2)y䔐 ûPg׾#C)j{'xg쫡|pkdz \ڒaߨTҜ#9"=>'AO[GЯ^;ta<%?`B7 eWݡR=:++@C=0R+ TsW &0Tpdh&{2(3b7*].fJ*tnn{'~j%0^ P*sgsa@uͫ^G2RLYN"m|gv}HL"^f1Zܚr3c-28kĠٌˮub.j2T ,[פFպz#Ydf_)Ÿ0l9 &C4r/Uky Qn[ @@ -4186,8 +4199,7 @@ _#0 yM& a\#W-nwGł#20a7,jBF콲oKkK'yG~c 3-x@e [ftoZ 8 ̵.[0}ZKmUN1.B5_O,l|ɀr6Q"U3Xlmg;KjY?}!jaS=/cχnj􇃪E)ƳI- ]>c1U%4GtGm?|̊[?`ZWhzkc3l%1i-L?%sh>>!Iin]&8şhvTi(a}H>%.I-^&;Zq?s[i7mie7iv`T 1sP%fc-`(|#ey>6 LW "J<?ot.F`/O)Cac!RQʔ5N9uRFUv܈v+/xGH#ȩgjXPgmDmS!/[^ oʔσi@-`iR2#ɯ_<ԫ"TݏKf9)o:k~*zhzDs6!/^+S[֛|YiJ:roOA9љ'vijҏ= ڮ2h_W{1Դ+?/pf'lK H 4*nl& %BVd*a\sC r*3MwO$ԼVtfbSҀ/o"0QGxi= -ۢ1Ҽa{zL5;E$,HڣxY3Is"Av[=hX{|0!␥^aKQFC(U@g=p}/ &]sL_ڨR]=1QCY]=hX{|0!␥^aKQFC(U@g=p}/ &]sL_ڨR]=1QCY]> endobj 498 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /CISHUF+CMR9 +/FontName /UOUENH+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 @@ -4226,7 +4238,7 @@ stream xUX\ͺKH;ݡi][wwww o&?h_郾QujԀDNN$jm@D VRbb032 "QPفL@&..f "Qm\LMB4tXLVi}%x @h rpXX9 鑘@ -'q+#kņ6KIKZ[Y AFH 2@`7ࢎ2 J_d6Yﮪ:ZVq} S_ Phps+Yope"&.GߋF9}S+%WO1cgdח ?d"V@kCS+c3;@N }pgZ\ 0&#k;Vnз'`h24x V[`AVo'AK?)+#d֗(C؃-X8ڿ`Q[/S[ۛ%`?7[`ol`I;_=~F֎vo`7{9J^.5Xon?Sv2`c9L@o`'7E"o7q'}#<$F +'q+#kņ6KIKZ[Y AFH 2@`7ࢎ2 J_d6Yﮪ:ZVq} S_ Phps+Yope *'&,AߋF9}S+%WO1cgdח ?d"V@kCS+c3;@N }pgZ\ 0&#k;Vnз'`h24x V[`AVo'AK?)+#d֗(C؃-X8ڿ`Q[/S[ۛ%`?7[`ol`I;_=~F֎vo`7{9J^.5Xon?Sv2`c9L@o`'7E"o7q'}#<$F IE.Rov~#]dM`7ȿE.ovQz#]TF`7.ov1 ?(˿{Vs?v@k>Zޞ.&&F_N !//˘B`',eގ&`B_ Vv?O_r V!/[9!3/[`+ Bo AAkw:V3`aodFlejN,Jv_g{\@@9k YB]`w"O2ӭ~ QC֪v`w>:?}!?*zc8㤷A"Yuۆn Rvjm0V=70KZXi~Sө3şCM4B9(D#Ѷ05h#6fuYBu#CBf̋.=/`BoP2>窖j6: 3LbRĆbSe+&Q~)j .{cbQTCni s{R?F+XcFnկLW"1?Z6Sz#%"12Gh=dw-/X,WQ 8sG6=[Y[l:S|480C_R)A#l qfL~"3MrM"/FVh؆Y4%hGdȃ1^֙ܳӁSh҂aúȋ"-{D:AVHFL;4yA>A횵4:"&>8?AeձɫѥvA1z<]r-biҝɄ>V\3T[5ci2ҟ〚ä,IlKKn83|9Ob[̤OhM\[:6yϓxi;|{mף@lGHL3 R8qs T0]Vڝ`#P̶-Pl Gb8Nǣ_XC˲H+i7mC\/b#%vs@ɱwucD / wq#҈O73}ʫkħKŘD-j ;N=l+XR(E`LٞuM~Ν>[npZ E]"±'ǙL?yh@ d~, ri")zڎ&w{\j^V@eI84' JUFOiX_x}}~7P5fP'Ys;y @@ -4281,7 +4293,7 @@ Y 1 vLNJS~%r|,3SdG?,-!yn(5 :!w(gfh؇i|.{JcfɂۄI,='z$I 雉>=vdT#t\&< 6eFoF0  pS(̮#H\<`9JirXo?$= 8,d!J /'{MAs:ݽ_uw#pJl] <]Ku•ED^Wk_5Qb@t!++7ڄ~٭?,_$׺z~PFN`{*g xِm9Ue%7An_bPlD;":f!oj~Q sŬT; U`.ΪCD6b|!.5抬/ " oKJT?15zsp6Ȃ(_z-_T? /'ˮ[W 6v-O/ꯤL' EV*z -Ͼqj lz1Áe9ibj<-P$q6`]1bnbA)$wN,թt(s.{ԐՕl鍳)t P_cP'3ea)=A%fWvuXr+%S3;JQÞH6+~?1o`mogbendstream +Ͼqj lz1Áe9ibj<-P$q6`]1bnbA)$wN,թt(s.{ԐՕl鍳)t P_cP'3ea)=A%fWvuXr+%S3;JQÞH6+~?1o`mogkDendstream endobj 492 0 obj << /Type /Font @@ -4290,14 +4302,14 @@ endobj /FirstChar 33 /LastChar 125 /Widths 847 0 R -/BaseFont /VHXCYP+CMTT10 +/BaseFont /FPHDHZ+CMTT10 /FontDescriptor 490 0 R >> endobj 490 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /VHXCYP+CMTT10 +/FontName /FPHDHZ+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -4317,15 +4329,13 @@ endobj /Filter /FlateDecode >> stream -xV{8T>А[}%a.=5҄(1fsfF3Vb&%hGeRmeIDNcs?$|RlRjv;a"pTݝm/Md5i%ksntmhk1)KJi2D]n@'Gax-ilm܂ߴQ}\H&P5sY)XI%ñ*sC%Ҝ$o<}k6W[Q8.c ~8n+= å3w esDP::_v͘i=E֧;» iilDXn6O-9ť?b@~yŁn^9ﰔ:NcݲylKђu"ci;ck|ֺ=dG2zPb] I)T)'Z(hiI=9gC"ъ? 1h9LOwa3F^xHpۘS7 &lϘn״s'iVL}-톮HSxBɹ5Q$ Ne;qђy$rDi- -N -X1%Zuo:}wy"d]ÉCp!@y|y#:(s\+^ZcEǚj*aϰp&.]J%2m4{#%ڼuuP…Qjsx|u`*aޒ]F-$ʮ70H{z<P[SL-Ÿ#R7{k_і9|ZFzLRWit>3/[Cr!Y*Ni ؽb5m)+9l戓1e\]s1O,%hUtL[J<.>s;^ i>>`7ֽ (|cMBxlyAdX)h=yڻvsT'1\vkʼn}BiT- zcͭ񄂮^=U'UOthA_B7`>ECQrH:endstream +xV{8T>А[}%ankj)hB*1fsa͌fȥr)vMK*œFʤ.;%riYgs2y,bAHD"e"!.OD<! kԇYN]]ǞZTr;|PZ3A7_襢٤hG2٣nP͚:[=Ǧƒ4]4$fA jc׬AգG`1滾7lNfww5Lx6D/';zh ȟhv,}BHwKmX9$%oC힑&Z;ɢiQzT J܆eq76۴3OL8JÌR&^')Y蛥hyR'j$+̶]2⩷)=c [ T]0:83Ku*;o~-OΓb];ԏrY';=2ٞ&=9ř5(f%먟;kbpfom*l+A;)c*0=x.J:y`EROSnE}SYݨ_C-ffj m-~ךcOHS bf?kZͻG'&ҡq]_Zq){!p6nzG +PA1LڲrцNh[DQ!SgI-+JN *X 5ZUo:}gy|z^KD)cرٍu5ОWduU#.tWξsC&Qʛ4jtniq$~4-VquuTe~ b!}F8#l (̥w|t;VSk\WICN8m. Pf7αMVcUds_Ⓖ'G/?LL^u6|C 4xgn[MxoSSBS?hݛ/QH{J}B~D͘Z&mQ$;yjǩ$ԉ2--Zzr"S TpNәuEmc obj/B>T1`T(e[Tƛ{(-<Su8JA|Vj9n|s/[cWٯ5J0!znM,7ؠ͎44 +3:+' +Oɦ[{7RhveI[s n(6$,6iz^y=*+iJ6_JzzȽ x7Sendstream endobj 489 0 obj << /Type /Font @@ -4334,14 +4344,14 @@ endobj /FirstChar 0 /LastChar 112 /Widths 848 0 R -/BaseFont /LIZWSL+CMSY10 +/BaseFont /PYBGGP+CMSY10 /FontDescriptor 487 0 R >> endobj 487 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /LIZWSL+CMSY10 +/FontName /PYBGGP+CMSY10 /ItalicAngle -14 /StemV 85 /XHeight 431 @@ -4367,7 +4377,7 @@ endobj stream xUX\۶q)!?Џ؀ o1'_w&h Wn -t N [צ;,÷jOH A 9п^qC=`xc ތ #?S$OZCpQ7we«pc? k8S ?@x]?[ \kxp ^o']F- d.B(, ԃ]=@r%#w?T?d-~@ k4Z4Ȳ@rTf7%muD9DMFtAT "*U6+d_{t8#f zq3tЏM̐rt9gGoQo4XlC-0lf,1hhe f:4E5 @Z+#5ɸ |#Zw\ rݜ\Tӏtd8vQ vaFbp tq}:QNm4#= *m"#μyuz%22B7ˀڐXTmÝ-%*_!?g,ԒA~]\~&R$~묹Y@v؆ads]ڜ)5^g,䄬Ua^M6B-H +&3.i8m@Nu(C?+x89[:NqKg̀:x`@5 ϩɩl9n9|\| M= wOxT01d{P qq7s&@c.x2bk bZ`>!?Џ؀ o1'_w&h Wn -t N [צ;,÷jOH A 9п^qC=`xc ތ #?S$OZCpQ7we«pc? k8S ?@x]?[ \kxp ^o']F- d.B(, ԃ]=@r%#w?T?d-~@ k4Z4Ȳ@rTf7%muD9DMFtAT "*U6+d_{t8#f zq3tЏM̐rt9gGoQo4XlC-0lf,1hhe f:4E5 @Z+#5ɸ |#Zw\ rݜ\Tӏtd8vQ vaFbp tq}:QNm4#= *m"#μyuz%22B7ˀڐXTmÝ-%*_!?g,ԒA~]\~&R$~묹Y@v؆ads]ڜ)5^g,䄬Ua^M6B-H J4tw֍ۇg$߿[w߿W(j[5psSjhִlC~ʏZqĂ~DOMQb/S ~1M3Q8ĻAxtouUoNzE'd{a> `Ÿ\鶢{` dS3'B6|U8I8ŻZW<*..N) [ p̩8Q%=Pcbbz5Vrֻޟz,m XjhuOh>McqDZkVcZ':i!o֘c zLCL0?~nM%;S3 :f1`~hX( tj'@-:}4yg{of[&4A4tYa:$yZ늧QTs%zT浜 z饔,5ײ^>~ma[}4smrD ;OqiiRBIϷJgo: Dde?[D:#W=mj-5Q0cYx(Jx6.SٹșlQ- $t;`%jtXoͪizO5%+4 @@ -4388,7 +4398,7 @@ u -+6H.ql0z2qvNq~YSQ3m+W@ktV#ӓ?,syk:4oI$(PZ0R|i<̥6Xr=tO.&g4 h)gib4v#Dף^㒈|vDA >*zâ{#ƠyU { g`ʲaw9 5}CՄ1?3ep`k$,EY&_ʪ̤NucrC$ֵI&`$2DU% 5Qsm<+- $%T!$pLk?o9_OGjP~HC99ʅȶ`Z^W(eV02bxU1:|)Y3م2`.PXYzvY<O6 w,^Y}$pFfu& FVcSPg&#eںBCMGd@A; 18El:D:}j>F[9_3 EGL;(X~:j٣/d%PAnt˄^wZt+h{$LB̓ȴVY|K ;\cy%`$&YC7^~ЈK#LmJYqUBUp?~C,p-NOzw!k~NjިY8Ϋ(Y2 J}>kä$W.Hq} @ -+5~[v̵cE!+[ R*qwQ{X7ΆJ/:)7yg^.h>o Ady36]wKM^L<}+*{|pM=Ry[[tꂪa 0P'VتV Pn؊"lPj1C[4;B2ZlC~ֳ@|TFeb=wk~T5 ζgZԞԖ#1'Nj. ̫$Jt_Xl%378Ȁ^$a~=Ɗ=&}N/05MVC];wR mnXȤmUR+6vu 跹Wʼ^OC}vSg<ĺc3YY@}YJ]9֤QYl~=qOzYrSaޞt?Ec݌KO}NPrYfp-'_-r.^Jz#[\5ȑ14$ny4A[1Y ј~5_/B`ԓ%tƛՓ/@>S]R@3s`uy,{IQLrj/S])|11{IaVuPS9v4 pkf/deol2 E֦|Ej^0>!c=i ӫRûd_I86oY0aNkjnK"3diIؖ4Ź' YcKj9%==:죑ᡑUE )@ CH"-$Jh&S+ޠlW{E'8# DG͌t*q*s'"u9l8endstream ++5~[v̵cE!+[ R*qwQ{X7ΆJ/:)7yg^.h>o Ady36]wKM^L<}+*{|pM=Ry[[tꂪa 0P'VتV Pn؊"lPj1C[4;B2ZlC~ֳ@|TFeb=wk~T5 ζgZԞԖ#1'Nj. ̫$Jt_Xl%378Ȁ^$a~=Ɗ=&}N/05MVC];wR mnXȤmUR+6vu 跹Wʼ^OC}vSg<ĺc3YY@}YJ]9֤QYl~=qOzYrSaޞt?Ec݌KO}NPrYfp-'_-r.^Jz#[\5ȑ14$ny4A[1Y ј~5_/B`ԓ%tƛՓ/@>S]R@3s`uy,{IQLrj/S])|11{IaVuPS9v4 pkf/deol2 E֦|Ej^0>!c=i ӫRûd_I86oY0aNkjnK"3diIؖ4Ź' YcKj9%==:죑ᡑUE )@ CH"-$Jh&S+ޠlW{E'8# DG͌t*q*s'"u98endstream endobj 455 0 obj << /Type /Font @@ -4397,14 +4407,14 @@ endobj /FirstChar 12 /LastChar 121 /Widths 850 0 R -/BaseFont /WAIMXY+CMTI10 +/BaseFont /NBOXSX+CMTI10 /FontDescriptor 453 0 R >> endobj 453 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /WAIMXY+CMTI10 +/FontName /NBOXSX+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 @@ -4420,29 +4430,32 @@ endobj /Length1 962 /Length2 3845 /Length3 532 -/Length 4515 +/Length 4516 /Filter /FlateDecode >> stream -xWXS붆7)SRBHKR ^EJHU@`IH@,"+ ;˳9W9s΋1o|KE8>K!J h`0A$QWW4i}첀?! ~8M =i = AB8 X.A6,+. < w '?Nl27][X1Fۈ~>?y~4 m8۪6a_XKiɅfƂ%TZljN[]Y_-yn)U3ÃHߩr*&%\!sAB3[JfE8rʇAe@YN$<?3=sfW+߾~rl13ԣ36nJU}*s)J(gP'3HŬcgsasB?,pXz5ptҶ6OBbb,KW?rtjoj,9>nV>|rv題0EN[ތ$,S 3  oi GdOm  ک[AT:avX1"s-NijP;?|JQ{O.u6à {Y_&kY?n+;TO-'/7ҍ/WO8&1J/_ -˦2UjZ -iRvWvv**U؆g)砳[~S?U&^=e%dN͗""[LLp|o.ٖg5j-9y# t[?]+lKo -q.|`6%1X}ukw)#o% JDrׇ,Ǯ9d)t8rB0X GV4T5]LF1IӞ— ecJ4#"\%w˾;qK %[y8#㑔9}Ai`O"д_);Æ/Nɵ7oQB(E"cNy^ӯ`gbXvĺ-v"Om*2 r?<ܗ>WD>7%->s~B?]Plbhtt4_?ZP<|}b!߼f{p.fʼ}rmb2 r$Tr Њ4)/K- ÖeהlÔ$ېOrZq#=/zSKq;!J6nP.|ZDyg7YGNt0< kmBI_eUֱ|͍SNLɻsiANe8-*):D=8fj\tKLRt5MG=ci7=Ŷ=h-\V2UiAiB9+H)ek,$C\E(JF~]¥%Pkшs'4TIVͶ|Zɻ/ չK}= ܧJߛd]4_@78V"62B%_J~\#Ղ~,[m.6,No[\ꐬ QvlivKHު:UcCuUgKEr; F@fæbK,(c>2/?q[=Zf'+drsIŶmTށnAT#?4cpJ\{k{OagĮhG%Et4qT͒YE<>wqmq'v\Ya44 i6׮6IӋn)͐5 pJr)`XpxMy+k$3ݹceb- OH3Ylg_ɝAO90-INEXUo -7-1EZSŹl3O=*Y,e~f dDy:h3&&lQgr>6u͊=%~dSwo+ وo> |^s=Ͽ¼ﵚC2?CNOvc -q0t@~ВkU@f=uԱc([m5ÜyFԱ{a43d,e]} ]_Afт'$oSyOvQk]ΝK>,!z$)0h|A9[J#jf#JGTE=R*gW, A}?lI9'cP _Bu>jx*H=0'5iJwmŲ+Yɭ%1^ {2D!}ߛIJq *0U11;YܛNQUf29XU+}6L77 cUTq'}KbB&[ Z>۴$~Ž2R/ul7$+;"|SǗÇO h" @e -/endstream +xg<\{e'H”`t! )LFe(Q'J$D I"&JT] +$x&9<'!4 (BUhc L 4PNAEAD"Oui1KFTR3/X}H5kO_TZAlzv-/SÛfzV#"lA |\ +mY>"W\ypE N~ٚ ngk!Xt~#%>|qY~q.UcMd-Iz>-h[ύv*u:oi-w9[ UFn5u9LSp1a,0 +O\o3[=}ɵ*KC;y,$|d̫[u{Ϙ-P\P$TK47vA~#,Pꃷ5KE[K:8..f CGaAԤYtSv9|}XzeDo^(Rsz;Rglլs«Vo +wZtz/꼻p]j;`֠wU=-7mbA; +qjg? :3We ,Ó^cM +S|'0ֱV# ]79ug%Axpw@q?T "mr੅8V(}rCɅsw)=Y?Bt&_͊CZ#M+4թI\S +jvv:uv+d4n6*\d^Uag҆6f?IѳͥP#eGw\& %+ +,,jg虅]&%=n26]s\v@$=G)솕aQOȬ̆+W z$/ѧRGs\Pxz転w~jO"D}+`wI^/~@XIp{顁vP2{å ,![7vǎ2֏V扛D*[;zݝ}5U-ρ~,3NSx/BN ktPNJ(4<,핗uX˓2 ȜH7!n(.g%Gu!NVĸsQ|FzξeÑr H^H\c ){ÆNɵ&nQB)%V㐟Ny]ѯbgbZuºWg,v#Oo*1u +x?::9WB>;- -=s<<ur:]Re[T\:A:pE([ּ㏕Eq-KsRYvrlP/=G]{ix1Fy#q$R-E?,x3z;fI*Ul^|gvQ{Bߙ9oذCR8"ֱTp"5ocB' +9,ds7yeg3K;@d5 pSv])n~""1с +9o;ջHF>BGSS>rtv Q}(: 'G!Z=bvC7 9.^ZЋH8j_xYxkgG5(vp UJ ݺ$#{YgfU;kP .9mM} A[ n'1x@ղ>4I^Kѫ&N͜pLq9O69/×Vf"~k- $_{ȯaN6z!ܯJ2o߾T +56x51x28* "C,aMd*+RSer [ +ltxR>RN+N]}m_Ԩ6|wz{3bzu'Tɶս +ҕO1d^;>&ةR's +dNj$i^Qe80O/Ĵ&T󒮒ccn%7$7/Iw^c0d}3yٗ_Qjo҃e%/\^_Ff8-UsKRB29T-\J%\Yˏd/W" rpi͗]&YMU:9f.=q]q'v]Ya6ә2 i6מ)ӋVCiȐɣ1u p#Jr1pThx] y+g,;cIbmMH39lFOį|N:$lU$"j7:V-r|{61٧CǕ,]2?~f"?t*)P7U=.EK\lķ >ԽZs=Ͽ¼P轚C2<Zh#cp_eSaoNϥ7'"MVI4]ި:`;J rձVَ\KS :Gy'U)7_j3W +JEN&>8r-}s/ D8i O 09QM[дMC Q5%=Z743sm+8:NQjC`+B/>jYS'?CDP(,i3 FɊOWO~7'4-ַ6U:&<-"4*nĚ'1pt$~=/Av›!3$2u Uh +m#K8sUHn0r*xFS$jf)iTajCfFMp,`3u:X' 5R_>Z(?$ˠ6D|3VCp=ٰ8-<b^,׶VY3y <7\'UuKtIH7koktM WJ? >CIOvg +q4tD~ВkS@f͖g6SSa1`z~E"\ӨԔ Und}$B DIf4'Iofxo.)4}r^7*]3m7[kLCw`6I~H͒N/Jue{W;FQ۬ G-ܰF"ezDqA=E#\ *¨ԴH zj=9Xeu$K#0o1W5QuVj^p3dz!L여jSԺr=o]_d~akg۶O 7FŮTeSYVn $I$pDt +-endstream endobj 411 0 obj << /Type /Font @@ -4451,14 +4464,14 @@ endobj /FirstChar 58 /LastChar 121 /Widths 851 0 R -/BaseFont /XJQSTL+CMMI7 +/BaseFont /LTRZFR+CMMI7 /FontDescriptor 409 0 R >> endobj 409 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /XJQSTL+CMMI7 +/FontName /LTRZFR+CMMI7 /ItalicAngle -14 /StemV 81 /XHeight 431 @@ -4478,36 +4491,29 @@ endobj /Filter /FlateDecode >> stream -xUX\۶q.B!Xp*Rw' .Zuy~emF}Y_QiJPVN6NA'N lJEW[[ [A> :(W@A*f.V`g-@x$lm ; 6 NNt-!P 2)@-|Avr~`;&9$j -0Uw?g?e]mmUScb_v.`'=R©AW\Up1%`+'7t, Rfu0IwvI}mm%Y:ڿ P-O0Opqpp>>?6A%`d7?|؟szv>;{s%%=YrXx{{( { -turC]}y~- /b -X4"39St֥ O;5i_ ų&)}aY6H xk dKD=# weESm942,^u W*'=B*7*]\?oRrYTk e<z\ƲR+mZ̃_ Ñde ^7mJPPJnib&=b}yn)y&ǒ4R!oİj?FP*7/"fHiؔ(y ' -Tr"_H4Y8*/0ә ƪ盲9鉵uvC[n\mLx -'E4>}r6Mi!>)@ r5'犉'4b0-M[ZlsB/IZuF\ B˛V9 -~ԜoWNH"4d9BУp:&BW YokNE&_I`a<֥S`֔<_}n Hl)OM*Ndu5`(b[ '$S we2bˈ1; UJbsc7s7D)V쉛A *=}Oآ*lS KO34 \VnRNhCWŬcx֙U8d_Js au Na'KvtX5/,B~'Q6/=9|- 訰-yiwMnDtzfq)b RM6#I;U,24_]?VuLUys.[,Ltg Uay|}Uz`>KKW`5^MXu⥤h7 DfWlMzY\*jd{'@b${)oX -mp# ] 'Y$ $gh;iBGQUl$  97AGH56OIw2 -0/l`KmâN= X&^li!2_D7p귫obź_>wiycW*xS*,dph^j3ԭmig.BצD}h“A`EE/9%{hQA;5{ -'z']ARU)WFo)G 'ۗa+EYV^tdC=9"=_FTs-oGafTP}޽Ꭸ)?h:;^ciL;]%S6[* A"`HC8w~aQ[^r pчAP6|EL9pfPGe,Ҽ{&geX䗨ں'+9Nqg{qzidǗUH2s -U?`L6y1{E ~j\^( P ޣ>gIܐ$L gaHR5^Zqmy| ,e5+sRQYQq|< |>}%{Q7OHQRK3x=c?e"$^d{^.:':w umV]:y `F~ -mN >uSvΛ&[cbKêvt|Ѱ`)_p wI$3ں(o[|n*64}%%r?rzE3V<޾?@ R^̦;/AtC#B3\Co¨p Ǫ310Ւf0%UXɌn̟9QJVx2:JJ@+իG LX!2&_PnqkjeJAb%ܿ){gf=UKP^^'F Y73 m#IeՀ?2Bޠ;׮dk3ugoLDeȜ!%l7}sd5Wh+wHC0Je4w̰%2)dflpvmsӔdo0=pgl.L^ SWO T >''zw%Vj( -x~hQfcKLL@{ -ޅzcKXck8ob:2XICL6z+YD~W --eΚ.iyurPY[ %Ikb`pݟ2k)HEj3eߠC 7>m]}DE#F/l%=׸;ދʿ(ۓLrʄQi )߮+YeS:G{EsJyi_pC-•γRWMHpj(x(d Q&b-@52GƧ94w=E`n} >{`c/\ߟ54+To?C -L6?l/9"n4y`&ҡTldV$Q[ u2C/E?v(~M)HG5J^ I!Gt'D!'׈jX$ZͲokq`"/ CD`A7wxs:g$- N7cBNdOQX;.^æN{xփޤM#%W떸Pu K7[\p^?Dv`625l@`2b> 2s($ِ*ۦ:C|);y3͵S E:υq@n1 P'GL6}'֗ҫq ᙟu6#}q~]ت*1}TNnB4FȮZNB;o8,\cY\-wDE^}Y4udDNњ,s_ "ސߴ*.3<o\d52Nx+D}+\aZ5Wk[εkM&bN59(%P켨FBQbh3eVKOZFUvXZ/4@,kjs29J!J]єQGn[IH.Q!uW &6l`4QZOz&&$ƦX*7BmGGbmwfdz䰩Y zUT>,KE3ztUeIHC Ƕð2}I$7&](gFjic{teRٮ-aFMEЙ\odA,n.|# a߁7CwG,2 -_^IZ/ar3Ǡ'ίaαicY{BoA ~0dFBaSpO:4NyMfe!Dڵ5X[f% -Q{Y-cAF4~~Ӻ%eZ 41^)ҮB#kNH%FbEgk~{ՀRpӀD@5Q,j 8s{q;jC6 2E7k?;\Ά|+~ؐ7YzzKVnl:N!"5v%K,>xc;8Xp!} $GDYWtrtbRm<?l3{d:G] 湜iў~Ҋ`ci('Rһv2WMpbq(by&2 Db>Ѝ'/%tpΧmV]W<hnPK)BXVE=:mz~;WܜW~'6ӭfuwpK J3^eo!Q6hyC=20ƑN{T6J͘PY-5Uc/4+ 5O'BETRx2#"7,):<[ep1ckRrۙT5ǀ~_0'ݱ/ޫ%;1ofL$P$ e3'tɊHczd]{sZBAg^]{TVe~J0΄_?Cڡ%L9S!Wͦ1Q39ZI D E/EOv1X"Nf7dOo`(P/j;X.cfGq,hWTR/)h~Z;rN(YBNX_`"1&+25^%w(pgv^<{tʰ| 2ҝ$Vʖ٣C 4'!b(jJN0g⚙t /B)fu5Yqts]Q^=0_)Ӓqakk;5o -4%~ S^y'"mi:;HutQ|;عgN|4fhZe9< 1egI0]b~?5V Hϱ=@IbYNr- L"!G/p -őE4a~quّak -U׽LlH1"y`yMzIx_xޒjcĭoc06Pg(X eG~i%ȿ - ;F˰TYŷ1R Jn\Z12TchקI(fE7Wt_^T|-FsåI<׭LkڀRL{SdǨbbl%>g= f=om;R] ;2ETa'O;iخʒopZ*D5Y 귶A'v5[;&']nG"ClV>O22A6`ݣh1:u;le%hߗF%4I;{*Ibv)?V6;ո{p &jhbaf/) %4hiq|* QG2Mi#%yf׆H|Ʌg0EעjM * -ZN! oF}4X= -E|nR鼟{Gy `8.myoѧkE ^иSO2[.ϊa Ef&h{dZߤ՞"NvXE1J1*K1Ρ`+xtC?U6atgVK @p@U}#~~Mc+vFh)َ%}py7,CxH+o.';5%XAґEAǙhF|s-}ʋGsvM5>T_Q.`u{]5SCB[hJ,19kmW[+[ -[ú C{H 1-l{Sڼ|o`8+Jx;ՌZ5v(aR7xA$̱E OA8LGƿ~) 5aQILj2C6*\yt8  udf34 -{ȳjo]$GG[2Un WEfi@\M7= D>Ynu{ -Fl^f:V38HTً%I1ɲ gAgV dpҜH 5ӷjXu -' Ӻ+hiK(R0cRM^mNZGJ׬''t*O7Dx /3MVuvDW&~;g"_R吘}e_0k#\Ԙ0m+%GY ayNJAc'u QgNW!!uޱh |p] ,9k9dlE}|= J K`Ajւx](( MZq6[3.-JDQj.bDM}Ԗ'.K| Hl}HaH3r)5Ҕ5I(a :3Bhc$7Sf e0;ķAF ם §&Giy⟒k{' KQNx#}]NhPœF-t"bG4o~\>欿[iEf:]'H <1VBg+,3\ɢ=}xS4EB)O.h]HY3[ַ azi%#] iE,E2I*=$3%3_fT5SZ͆Ou+lW2Genqw^(#+~l@mPĪV 48-[[Jus #E:NBo_: 3-vvDuU1'"^? ;7ߍ^'HoyʡrŶwpQ XFy'=ckuD hx5 bJȂ")i 5%Zm{ -Ҳ|at2O x>omUJ 8spn&=-OՎIacYɌC:mua~#ʾeE9PYwIʬ ㉬cXEE贓[8Zw r‹nlE@5"}ӑTON,kPWkӜ7d4ҞL2oK5K^E -*JF<0iG‘93t~&(dttTW8Ɵ`[ *{l!$-e,^A#[Z딓^LMhD¼Oa -`5X^ƴ֋.L M>X6@:ze@-N$CԯB -iVZwEqm9#{󗸠Xx֜iGk:+jse:K 8FΟl/˦?r :(W@A*f.V`g-@x$lm ; 6 NNt-!P 2)@-|Avr~`;&9$j -0Uw?g?e]mmUScb_v.`'=R©AW\Up1%`+'7t, Rfu0IwvuUmiu :ڿ P-O0Opqpp>>?6A%`dmvyءggs9N9'Nggೳ?\RÛ-y8B] +~<@W''0ߗ7ҁ` {PuJCXLx)23EZQHGh]S/PK CeH?_q}D=FlvLeݛ?pnʛCӸ5dU89Uoa\/غE+j,v4|Gv%}t0 ^x % l_ĔguT([ڸo|]E~{wM6q|iPPE-3Pvdc7^&2@ʐ=Sz I apF?YPQv$UCmז@;PVs +Z;'5S)P@׌\'|_u3yj()Z4#M31 P&O@O]sbq7P&iqXnDWM1;">854<]& +'Lp:s S-iS2+Y叕̘!izDO`qn's|*$lN$\*9~dl!s 8l +E0뀩VDz!VbwfSubk@u~;#{y 62QV 3.C,.Z :1s^H1[Q'p*DTƉXΦ|c7GVI~ZkB }4?t TF3xg ["BFOi~)-g6WTpHxvGT4?aVs齨=[$L% nx֐j"]v1UsW;WpxJ}g 7^3Īd#aMB#.,&!N fҩ*:JFfE}NbUP'8R/cߔr^HqT䵐 ~D}2AB}b.p&m%LB,V.qA8;41MTʺ +}sq7WSF"Žq<.YD5l:Z˽gi=عM4Rrn Uy xu +COdwl#:_Zƙ{ &-c-3gB]P yO\L.m*9ioBO7\ N=p(q_1.s\Px.'Ӹ urdwb})jP9}\gc{=RmWޅ_sH oQG%Z&TJcڭUۻ+=$S恓A25&jNn=RxWITe߷LNSHF2GP' iM2ʳQKF].`,턗Bw +߇u_eI{߿^3{8\k=dB*]+"Q]΋jh-d(9#Qa_e]UoGurK/T8y(.Mut#~d|i֒Yy2Ρ]iRy|u lkCvOCُe$ߪjbBzjl*MQލլr(Զy$x9h,ٖ[{WovNG ZE2T4IG^\杤O9pl; +7Dr,.j%q"{f67OW*URvl4N/=TFry|W?{;t}w"0D-1S؎y z:'/Vqps +o(kOf 8Gi$J㔷$aG> bQpY.z1 }Q,OsbC/ 3HgKꂀ>Q;h&S%!?\߼DLm S<>^Ejގ$ ^icgańo^Loy)v|;s8$siVVM!HD9][% o P"wی2iD3ipj=[\-A3C *4:Yhj+Vt&Y^ z uo`qG= xKZ T3QŢր3=W6d1)#?XTzlHͷW yaFR1 *RqiW4bz(:V՜ "NM@rtOpE;-XJ7} -uі#6תNXLpXAzOa0m9qvL,6rR/%k'sބZ(fG(wmq*bf"Gʠ·*XmHIBnԈC!!Y3&CȒ}Ksx\?%DY8' c~?zA1`dx % 첏-F~dwt]axBH-(SeD Q[%805?d wL{x ,&n+Iik)y\B7|چP oٮuţ տo"~EjyYڣvwh89jCՑi~7Iaxb3j9YwԠ^1Uean7!i촷NaTٌ UR:Q=FB# [St"\TIu/E 3"B~̳Uǣ~5Zjʞ((o֡ğ.~;+^Uxt\+6=875J(a? wcSC3Ɲ.%\+N; =.4D|۵NeUc,BPƀm}1_dSL o?4ZC:b{>-lڨcE0#;#{e|݁@Pz[d%pmF?zyNvaP$Q`na۬q`K2fvDXĜ&{Ke1+URi:iE#Wᄀ:Ke8)tHOnd(UV/c=l"@.SӟUq.> wfCGw g̰| -yJo_l 8=:޺/@3q"ȭ =, c q*~M!IŠ+bVZU8IW?I_:*=-9`ǣ]CZ3t6*/⭏SIS 2Ip:| ߖƎ?C,$^WIŷ{WHHaUϳ۱Pv9/SÞk%ܓn>zjdH+O-,2qr.͏܎PɞXDvaG\Q^lZKfb{/~HPuK^_̶s(*  ݤYg!-ʡ6&I63me ~BP|d VK0h kI吵Q|;#՝0JqikS!M8>Xz}:8RofZtj}Ep@גnh17\oKjsʴ 8N>!*=;K,]}*!Vs֓n&zhZZ߆,U {.S} QJv"-i,,)BTӝeQ/̠~k+{ҹjWlrх&}$2f.){/}D`A F=ګ1]j9{Q^NQ+}`oZAcT?+f'+ceS' `6Q!ffVQob!2k \BG`u$ڔ&=R YǁnxmJw\xZ{-a6؄Яb! {iWLY'f()]^џwaco:w-Hښ]j/']1aLи29YεڝS^Qi\ ee# 5jVVw{_,I >_ԧH%Y |(dyZX/ qm(@n,܊d1V^k2*,7翕}t"؜¿a#B~qт8wJ֋\h9x<].<PVRPRC/|E*gX(¿կwƚtL=)^nҖV(}Vb;ջmDΑ!C[򬸊J[V!PtlfGuMYX !d'x_ˁXT@ϬڼAG1SkNx[nnT0 +7 dP;?&bg01nĈ˜Xҷg gKq͂1ČgroS_$YD`tf77KX};g7[c*[O% FXE_:54-1FY۶~50"11 ;/>]77 &^шzcZͨXc7 /).yGD[4YCa{/K)QpY*oEN_f-X=di8H"J`!˕>J?/ϾPGFq`V>#Q^+-Asн O0Hٹ Ln5c"@$Ou/FWJmyx -/Ԩ^jF݇>$900!7prz1Y#MYF0y^>#fRQGj+FAQ I:o@^޲%Tg^8=R^$ԛ10aWiwIč\QZ)z"xs݈[-(@~>nwA*w- aPl nq'OA%mw2 ߓ1=6VK`^iv P DȊ,(ixRS9Zؾ -kiFhM/3/PT1{o](6[e I ^̀ÿ?fr|TDxq6;8=1z_7싮Y_&_4śq o::U[N;cX}/'vVT#ҷ1I%˲ p{*߾?0=]\CF#iɔA!sTUk"za8ZdDc v}$I9L=Cm jHFgOL{jy ƿ0roKR%Ԏ;uN9hԄLx+VV[kLk袭 NйJ؄je] +bD8M*1f5M@%yWTז3w> E/j vr8W1_qJ1)#kɦh®l#z]L[B:i V,IX WACDM2 WV$~50;)9ő#_@'V| sN-(8!Sû-* j)aE<ȆJRf@sI[$mr1|XZD5璊:zj%/1W3lNb\jx$YϨz,j䆩ӏǦ}R#?#qey=(;49ۏGE#AA@b7DzqrT7>[y3VÎ|7h 6sr3s_íendstream endobj 408 0 obj << /Type /Font @@ -4516,14 +4522,14 @@ endobj /FirstChar 12 /LastChar 121 /Widths 852 0 R -/BaseFont /BZVVKF+CMMI10 +/BaseFont /QNVDQR+CMMI10 /FontDescriptor 406 0 R >> endobj 406 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /BZVVKF+CMMI10 +/FontName /QNVDQR+CMMI10 /ItalicAngle -14 /StemV 72 /XHeight 431 @@ -4539,41 +4545,41 @@ endobj /Length1 1340 /Length2 7721 /Length3 532 -/Length 8558 +/Length 8557 /Filter /FlateDecode >> stream -xUXܶqBm(5h^\[@ N)ݥ)ŋk}yyNrw11 5*)$ qdb -@6 Zdڈ9@^^ @sqÊbP[7{#N"5lbdP0rY01T&` @r;LY0@)` 2`H -GS {)$=fjq0X?BaZ ssI'䣑_=7CYur {,ÜdYG#D0pr# vL&3#8? ֏**<տJF`G57[o>3lF`W V/1m`ׂ`doo0x`S+ -sbu-0culV[#{ dWQ?8n 7vP{;Bm@b.s ha -v9 ѿfo``\<V-y&g='g5$/⁵#Lf ֈ3y&3 L0SW+=LO`z3՟ L0ugk=Lӿ7' * -u`f0Nd瀵? mvN qإ`c}wv=f30A@ Y eB]`gdIm5I,+/@,Ÿrf\D<}2k3єj+C/Y>m@ -]|@ܹbݵ΅.op7E Ś[7ȶ}X ˃3A* )_ius]UeSfPkƷl7 ->!AŪmU/jg(}JY?TRe@Ĕ&C9D -:FW;*oDJB[ՀgZ6EgEs{ZIܭۋ@TkE\qL*MnZiWB2uCW=uT1[5}gBly6PV10N#t2Xtv?ĩ/e&:_ zJՖEH]LƧ\t+dJ9_,բ8.BMv|px;H/PK1*g4*ɊDje?ynjVѥaW?Xٶ\{ψWr!86A`OK_W)?h:mmM'onRnf6;)D.+\h?ToIsRG+ ʼn#5ۍxq9M}TZ} &mִ;h%"B>!迎D\n)c4D,Ҋup~G@g y5MJmɨe9qdC\:wPL.= -mXwz?qr;߷ޠCžVv.~14;׶,-ۯ9V-]J)!Ɩ2V@ ~ɐꯩzYC,1(5WTp )>EDQ, -G#߱reBnhSSȯshn;ED;M;FQ\FR#Djmp 2'NAp"nIqpzPwU 1ȅv.I|' P F ܙ^z^|LR~E" B\a% ceYgownJƯ6l]00(H"vh1/ujg_R!v"' llCH}D -xU;^ЙBlz-soWS%B|K7ѾkF &%Lulߊ[h%jQ4RBAZvwl7u]/ g\1L_×'y uq ~m<ϗ fk;6Ic9i tXG2"EN_pg!>cx 'q1V1ʯ3dޱ=D$+3?~?Kkl`֯\`w`uQ~\&gwN/5'U :ҳar=UOf4T$zľp:NPAiOdFN7瘐n{7!8^^EI4Bߌ"> -C+5}XFH[p̲2 ,bTj0r=Hp[7&<6T& 3?g|>?!/R$QJ=4~JZNN3w;2ɦ) -bOz [L0dCÌAQ?8UֲOShxV-0hHʚ&-7 9]J~q9wL紜:¦ <ȦsxX~j,-k«})7߸iwJ -^F P|3vTRq=pAMQػ+(Sɯ3D#?g6n"gP{XgtȘ A-p::25i[ɽqSY?o/b=ugX-AUtͰF.V8Ñƀaf(xr!]z:^u ]f"9&w E~j 9-uVGwl38 IqH=\J4gvh"[G V8^3) ;,NnQi"wcf3CZjmy<:ũm*kaKӀe*YQPP6{yTJùzReT=9,S爡pDT_N_+! *=2cW'.1 D9#MW%θ --n p5Pr{QGS:'EKf3ej hKh8FnF%kM 3O,hkQj^/}ʻ'bl 1n.*u(-Q{4xZЛ!rױbtg-O\EBe=ˋIF#}$nPﻌZntf1}}"b͵&mŁ:!;u~Ť9 11TJ,#}'ğty[Tߺ]'PZL9xuΡ1M7@hP=Q) #'NZu -q5O4+Ӣ?^q?-)m9.L~z&h}q2LJ}9QST\Đ%'@5lkuBd`'+| sϞB;)d^ɍDעS#k] /W/Vp1Qf(ZeQ5nrH(??jкЗ ۝Ȕ9M=6ǭ/ڧ )mY`lOƐPeD[E(mC"r}דhfЅaA~6^|]:ҴwP }; "E9Xscг_:#U%옏!bbVDy홴PdVM BOr{jM1{s]›P8i {ehJŚ"4 -u7A!/eGv{§ShxMӀ;Dhpg0 \`b _dA$˙I(' _%12{e\4"[6~gKg~+Ůi79^=a'¸o3\ $Ҕl1&l#[M,'ΔLCZ\h6wxr{8}=iس=X| coB73Sb(R0 uE!qht\[P5MUSYꁄB&: (Vӹd#SKX2c71uW<= sz6+Msove'fJVڋ|:sE1_=5x:Ōadh3=,OUC&TtO~1 2%3bۧ~ݠSU~EZ6l^փuHf_bKCcN;]lFu#ɋCPwKIRSˆv Gzy,oCZݪ׺hrgpod.猢Όm^hίY) g8NcGm{ɻR6Ib%87CQG屶G -Mm²rz%څ -޷ʱN|"% kj)IA4ܱ5G u&ƲZ0ARȲq_nzXEzV;&HlXvuN80Sχ.JsIE=QݜqV#R7 -Ҳ!JKyP GezE]>So&b-֏HA -M ~RR.ڇ&p^&zSzr"3. Ȫ[5ᕄ淍 PDUI|\aF%=tY} 4g -,%oP=Hm_-3(^q~^aB Bzv@<,}7-S `BqC,!;%KCIWY>m ӅA\xNN$y0iE:w? .k@qOO܆*B͞s7eJj +4g&A _p6}*B?G@fxPUtG pCxzO[%=U&Q⧰+0X_|7"U  =0%'mFJm4ȔPhfIm{eEَ' 5İWjr-atF1 Hy҅M/G!5EuxVV甌PS关E6Dָk#/Z'ڏkr ̽{rސ1vMte|"DmE/BZ]%,Rb7\Ew**)ҧotby -;CwolѦ@@v'e8=[ת<w-*Z,Ckwe>!U!L<3cƻr.64Z!*Bo'jYƟ.w[$ȷp-F0zU // g_k{s? &zjX^KU+7 vhq!2=فokJ4G{K<{ -ŽUw)C%@>svDcl]9 b߀:M\ (k$VKI9/[c_[Ln0i vWJWQ7bġкf.ncɣ! na?s▽F&CD7IC5VPiЩ ;HVx>fa5[G{t޼o>S:+)*Jꩵ=6qȭi0.H+hJr;~Pv0HF:nԌ?Uo[(|\|>eV^ǓF@Jmo1)c풶t_M]{5`& # rؑ;Q؝PiEPޣ.M;I# ]|D}=#E]pY}J-^u -/J(Sfw@|m -tL|4˯=i3`\KLB'~m5UڒɾKfYХ,+ua"xDB |Zs=80;JG jT)Fx' Pt -7JwgL?ŨǨn{t)$I蒠!/ Y5ץ60zf+k7ˤ1aay"`&N+YalrI",\N||y#UNLV6/Wњ! -xօy"1+jܷs&pdZEo^^b4JA{9-tܼ_nRs9.8m[NsAJ~(ܭ@47+1TZ)5ЌJ˅h]:khR(="8>/{S^\{.s}ttp/]+WGʘhfebè(=Ԓ+#AI0 ?Kxݱ)8"߀V5*I4oR.QASLO˨" /]" V -u4<g,oNY.dTTs^8nucpEB?f),bs -F~k޿lF2whc[ys[&&8z1><͒f{=|^7 ʹی߈R5C7O{"G紊Bpx ꌆ8eDۋb3?~yicqL;t_q8=?n/(V#B3HG8ƣܢ kIn9#w$yxZ,g!rmlמmqsx:N#5cXP);.Z$}Rh mfp[f<1OӮY}WDj[A|g`O߯~^܍,\+x{ ?v/'}YR,H{&o}qew_; PQ֎f6(7&Ȥ%ʁjLB-ǵ+ŮNl@@FPk#{+| daàw;N >u|l|"8la jr,A6=L!5)@pA. 3 `6u,95x6s f +@3IY4Bf s P\`lOmV@m윝@E?K@02;gV6̼,n 3e%;5O#mUYMQZ]wRln=Wgecac +abP3-Zpq1`F\O lkr`YYlN%`P jg̝J# +g0dUNjz`9@V-_tr}sԜ,@V`5:;<8`˿UpXa#ì9\laj 7#ܰE[ Lbg$L$ELO`#S&35 L0uguĠnfv؉ټg-$+ll<:;גܳQ&㵝}Ot$j bsP(mbP vzҗUWv#zca!C ަx3[xֱp&XB|_9q>i 򻩿hdx +zϠvBu'v8xv_B7[i?fx>\N` +I8 DNi1T0Kb^JSltuPQMloPJݦd"?YGb_5長-g{t%YUߴ?IqջڻK?@\?8E/?4gKWͺG{Vv7oJk φ2jƔ= z^&KKYI.k Ƿ^uecpF J<<(Y.Wsu(N bu_N k|Ln*9;w3nr'Qb?9LDfYFvl`J f{9YkW C?iQ0E*dR*-F*_oZ?]|(meaR!Ă#sn1jOAuq2%v~w\d&Tv?eB#έ#nl_[yKJK7!O)T5jYiBIdK:ZA)B(=^I~tƛ} c8I{xþ 滯X+-HDrZHcL.(}n:3\ +tbq)WӤݦjVHֹ[oes%䲞؃۲xIߎ%WN>oPҐ6(Om +]/<>\ܻ}`]Տo4Zg=0x5J=4K\F(6SD{@Taj#h"iSIyZi2]InEQKuN0SԄ!mpؖ#_4uK4i^gX: ]HmpAjd_vF +5{WQ_ߤˠ[sqk/}B-AJ,LZibaXf=s2PFb/ +..qb~-4R`YZ~r[7,G;MdQΙ+Ծb]F Bhi " .> so>t*rٍ\w2`H 1rI_CO0#V= Pe¥9 +pM~Wge*֘V}[UTҨ+3.sY9b.vNC%1`CҤ@PEÍT<_X+(#w?]Dҭp&}'ۻ8Dqah/)c+y6@6da3ETi_׈> ZG7QCJCĖdrgM9/ wm2[H 1@cH3R9Kh4~]&m32sԈ>nr͟"yvDAO )x[MfR\ݲx]l$qSK`IʐPeu*-G2U7.숋)ބyYG@ʬos`H" < bֳYr{Fڴ47#RfI؅k'MRU;4(?&dj 5n.5jTRH3[%~>h8 +79G$rשrlw-OA|EbU= .v ^w>B?MV=/IF>ɑ!n^ 1bخp@pS>ݨhˏ{Ȇt%}*+#a ڣZ +[PĬ +AïMx8@p:j 1LkhW _Db/Lʓ!%B{aNVFe(XR PI|W_gll/இgJɳL~+0@/xM1|4АF?; Wfwqf2O zHxLitGb܅wѫK8qlp6Sjտ = 9~|;X[귋#(]쨈W Cn&|Y9S ɑתޟ48&"Jtĥc^F*B[]w?Qs)O9T>Kꋈc0$IpVPe$8z&Q`eZ;n-0.brߝK+rĸ_' ߬W[7mKlOq4֑ÝpN%4IXrz Ղv .զs8iho_`М},j\ّH!~Y _Jy~||oMmMJ U&r_O=\L"Kp7ۼjxfb.1oYm0}CV@e}3oՊ'Sa~O՛9@'ylquJ*ZzWy,~sD`͋}@~J(_7c1h{4K![ ug2jB`y r+=qE: #Dt2״u- +oBH@!Xbdɲ9 kP!+ 3B3A Q=@.(NQƩn61[PTW'zGr<$ YiƌRKYm^$˙E*m{RXҥ:>6]҇%/9vw\sRBZ\Ʉ $ZtąKퟘ;W?9:nfVv\65G7q6 +-B`IOlY7d#FvufdR=[$ bkFؿ2lbD4afPZDSl~t ʕP-K3e1Rه?ڞ./)X%jDG#mdez6 +b]5D5"krKZ!i*s<[=T̔,]oJy:pdfEGb(p7U/=raKf}峉zCîXJ{qPPoAV|Q(8pҿOb;#+bCUvEՄZPӇIҟ90vQNdN:t4;TMAZ֢(RFѣ}z?t]С)s\}At|yu +7$ *uiyCGjuCdQ^6.;ܘ93~W3Z+E9+NgGFzzFnz{RX.TU}kD?gBS꺜^AɤE&>!P6DP%ۙȐUN4Caaam]h:5Y"B7ԴcXR!LY'͈B- É6'KYL0~#n䴽!ۃg^qu50U겇=aZI%› .L?t#U'̱QɦS7{! -3.Zȯ:sM:fyK窉uLzp1DV,s!*m!C]7< ,;RRYR^mD Udg)y׼1u4qj :g_}Y]R_r,Ar#[CrR`{ ЕfD-{k܆Uo,sG)j%H2Hq{\}$OfEs7wS-h/eJ]ΏJxgd 2qh)s!Kϗ.ZsI 7eݜ.qv'#2wJ߲!ƪ*kEP,GeFe}So(b֟үFZ?]E<-uﻦpFȦNSxg]V;БUk'[+Iu̯aIp*/ ,puwW->Efw%^D:Ҝ*ax\A${̠Rw)Ž@ov@"_\a2[.N'Pђvy9fDŽdrZ备0n Q>Cщ*+r2_aѺ2O$eGv?P0B+ËR 3^F#xqo 5ᚙ]z.vəBހHV v?@)Cw P4M ̀IzE/{J54/,d봴.!4T4!HtO >fWu +3>jq߂o= +Kj$42'ڱerB0j|sxɹ|OTL'Ȗw1#ewt,0.>~J~R*[hpUQM (yÕBq=z-cDwKu' Y|('3]М7/{=I @hЏCJ|ʳTwqd>oOc*hE[o0[,ǘf⸢kV\U}*IY~LH"05 ㏶F3-6#37O3TjPAXq %WH%s#^<[8\APvDG}c ];7~̄pMm\lu1?R/ 9tg`<+޼;1&M&Ǫylcs: ݯ0hgl[qwhe%Ŝ∟e-evHHٸmF>M5nʝg}%EQ'xWuRu +cH챑zlWr3_/E()6Dppiz)Ew_dq'^)I#:ihVJKk]l:l]2<єqs[2f\ޠ +Y% 7bS jc`_J(> endobj 375 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /NULRSR+CMSL10 +/FontName /PSMGTW+CMSL10 /ItalicAngle -9 /StemV 79 /XHeight 431 @@ -4609,7 +4615,7 @@ endobj /Filter /FlateDecode >> stream -xUXݲwwwCi\$;w %<ߜk_p}>!Q5X]յX]uC`u?^gי!:?[ /O )Bp!˿_ l/ 6 B l/:ÿllO |]u/fs+zM~ڛ Z4HL2@JX4*v",A;2T9B@kiלٱ=bŅ5(.Z024Ŷ[~i^|Dk5QW.gb^K,UŞ҄z҉Uk -KN]$gL&D4gxX, mҼE .n(2dFholCI5 -x]}"hΪǫp>{D^0R] /F;b D]'I֡;~ttt+J*|fn5C6OWN~OF͵GTc>]4z̗tp 9#ZZH8_>-:OPEH`$*NY1*vIt``wk_Ҳ9zrU9 x6 !-Mj*qN. M{:v>cޠ?LQs/hJO1\ݒ.إZWPV4&\"qVN+Y|ȫU|| fa%_Dadoז7x=yV5XSuv޴Ѝ&)xBVbjO@GLiAbc\do X`XǰA=ks:<_9j, @@ -4665,7 +4671,7 @@ B j o(QFX&Tz{oE&AYSԾ\Υd!}3}@7j繲G,(c{#ŎFDǍ}kਆ VD6o}]Cz+r7厞Qwm07wb[&V/ҧ8> endobj 338 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /OAAIBB+CMBX10 +/FontName /NPWWAW+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 @@ -4697,57 +4703,48 @@ endobj /Length1 1766 /Length2 10899 /Length3 532 -/Length 11894 +/Length 11895 /Filter /FlateDecode >> stream -xUX\K@wwww=Xpww̼~Ѿ6pתZ[!B/lbgugf`ʋh2Evb@3773@ `aeagC {8Z;DI- m@P cCkك lm PNeh€ 00v,lq$mkj]r::L@& &v)H rY\Znhcav6.@G jÜv605#d$a4Qp66Z;ښO 8]T4uVw4G w3(_1q[c; [Bs  =@"v3329>`jb4'¿.v@#u hoeHf0{؛m8@e30zv3;Huv#ڱsq`?׿2@9foYs 4GF `?c:s.AUCFK'G?PC .@r.@ -RWC =?SC9!!iY[$г,!P ?+lF وԄ_/a` A.B ? al !H/g BB d/p_lx #KD݋t`Y@TL>=Qb Z.#wq_ljzx@cE;c ˔搲4"f-q - Geh65*1Q^":&$.R] =4=Iv4ߞ+U8uW"OO`:AjRB7о%@mL~ k]tx*M|i2n {쁼7QW+SbNɬc}1OyC笛VmZ=]\2\"X]\ TF~=x"{S'vJL{ J U5ٻ lJbkUoS\ʑDQMw4EzͦӱA~81uK=xq h -(K_宽8o*c9k(=d( Yt45"3 . 5TQN 1Eƥ\/d&Aҕ'6)6ҽlklt\U/3Z1)ߒ[ ^d2BOf+<'ZJB1ݟ( D.?#*$9?}M NEq -a3,cC@{E+?-6o\dP!(H)_|㾜72Fe㔲*Biy9}(Oˣ -Iz G?_mxU.Unnݳ&|Gz8 ٢<,3z[Ep.xiU)\a]% /A2'ȶiCj4`]q:7TvZ+D "L~kzHo8-k~cԅZne*#~eCESy̺ެ~hWк2- ͨePfDnuUJ 2D"tcK`Bw>*U2p/K/^_}!ݷ] ؽl繫ԜlG;ύ_GHZĪ[g:Z=)nw,?OXJՠq2HڕUiY5 .D3hR-B9cIy'3A]Am&gp%'A2f<݄R'iYB\=޺0LΚ -ۗP8TAܪ4g9T;u%cI)Q-ez2s2zUd~ vdB<죳48;%`*44ƠqCyz0 27/Gɗ)O$S#cDy( L5UL0zl^=]p^KCsE1?:hG*8Q^ -~t'm D,`Jgs~&;"_0K?i ->;4*^~n'*,_}ӛuX~>P -uyl};R {\,Ě3bhP\$ -9D-&efn$8;soQ9ۄR_!W g7.cu:볮袵 -Oz\t{hPquf!OTgDZVZ8UGģP +hu?4/ʳ?{-_݌ TBW^.sİ_.O 󃆚UD*i_g#l>BSd - o^K#)Hfʿ֗- -:lHLn_R{6<)jP`J"DNYtC]븙e|9B\3qjʨE|SorءdH1\@ltr[Ѥ{/f4]Eb4QyPYK7b9a&FBS7/՞ogHLܙ\ -1ͱbHpK7X3>0ѥCVR5O{FKzn;8TP޻<ۑSo-;3E'@<&T5~I_Yl0;^N)h}c픁#EoFtvjc!|v񕁷^2æ3Z {Nid30x,E1(l_]pB}( -.p5ڶBr}w%`$ W_ǵ)Hw=rw ?[}lJ{oȝ^sY^~gǝ&/ e*f5:Q֚|0FcPbn|ETM@(ܚB6|ρYxV!Gu|ÓL}S=69ݜF;mEVXϿV6XjpzcvLmhP7糉6bBDu*cN-S$KO -[ ctWVi@;u=|BRk-?Ғ6J)Dz%RҼm錈<F2J,HP ~ĊB3˗0 9cXڒkɜ luhњ܆Ի +!Vי/Ԡe4ӅιMW=sP)9RI;:].{%ۚf@͓"f%&7\O ^?0`n#>W&p.h =E *)\K;ĉreiwoC?\u+t&^dS|\:fXjmg5~A3aMTd- -SVLۿt&r|`]V_H2pko#T[`.[N;M2R؂PNJHX_ Ql Q݆̒=F)+n's`(YNԴDvc PJfN}, J:ewEjES/sd]qyp[k{ bsjJ ? GI?c\%14כCl(jf}Д?#;Nc -]DC\.(o5J$ -"#=+!v6ްQN̵ꤌB$ѓ?4)'7U(Il_W`ʔ#B|x_n}յ,J‚=Ykv+-=|H8G(0L H=(ZFyƋp>Ewyv!:\[ /0hr=hz}8̣GݜmGEX oc8\wMBZK[rS1<!PKoX1>[-5%P([;B&J9 -+'*NrW|DOǶ%Je !Zyg)䥧S.<拵 f_i5?#ag3U};P<ʦKSģ'x`j,%N~*O5cDo& $A>mCûq&Kз-PD݆/$$;\)S 0 N؅ļ+tm&ՙ"%&W ܙPeqXa)lO+6FOHTڸA"/Z_FzS[& u6 -DںJ |ϱLw6jܝ7F#ՍȂO0`Uc԰: >~) %E {Y6&?bmqSgT} +RT㞧MJ{fߪDynY0#FeƘ;M9㩠ҔAgS"_AAEC; -1&`WNy{=f_2Q#D{lީJMjzn #$ɊGَStOK&LcV'Cgm^иĤ V]D#Sٞ0r U}ptX`_x\ڛc\>"j_#ǿ8cJ[7-Qc5RN\qs) F[vnK$s5^φN*@[r'ӕs\}£! ?s(<WjZ't~D/])j[lxfA5 fd@= ir|կ_F̂{I}72`U84[:*GGF%s&?NvA}O.z`h/ Eti?iIjM9!8ۏ]WWSP X(u?! s`H)yn)I+in{ rʆ腃Qs؄\?CR_ k:(S a&ܞ+Lo䄮S,H3cy7l&+{kFn(rDXx=ݾbHՎ2ư=jr]ǕnTW?`9סkˡ ;hzE(:YI~8m_ -*5FI]E5Cr/} 6 [م]pySoܲ'8l{)>bKkksbs_)utT˽̀}2/5`3U&c{2>_mC^mB'HjՈ=; sO4S;l FX#8Ni6Ts -gS y>'uVCO,VJeN6t]zVF#E 9HО\M(,qk?8=,t(TM i'ZKn68H%t,bH8tUNn}1zP.q7~wk KKk:7yMG?U WyX$ɘU,gKyܯAsBg+s`k]ΎL+1Y\a : =lxJXet9v×~ꮖ;7({`WD2TgEo#qU1ǑsID:HudJ9ody+Ս%WA\"~ ~-!ml@2 @|%B6l͓S̖HK5 yl8'* xkt@ x`jCQxX Q: -t/i"&:+ʀs/#)!XSӇjAᛋ˙%/;QDVY%`Q7FԱGӶt -Wh`Z٣y3]ӻP:mdɽjnQf +wI-4hcw[ËYc΄lIRbg؏enA<:ui?u.-"˗-b{96j_̿Qqw"bz?k1/r՚HCwu-qw37G٨l>Oov 9':wd6|ol/ ]|^Jl©c#?,m(%ojmH\'+M"c$hbC-p2u~1ISe {4 -eR|(0Dڡ,ⰺh͂Wʐ HDמ֤(rj[ny"; X5uaTH0tq2k9_4q;>B/aDcqZV[e} ;>4jZ:dXjgvӅg?DJ_0{q>/#!)WɆnB^aN*PPսdƔi9X&v^h1Dr' )PM43^/DB8)=#gO2W`# &NUɌn$P~2]UVf.#0鑕UWLԶ\oSiA:b|(C9)׃u_{bp< 'i8{,=Nl7{!,  qxԷM7ɘ֍gqNGV19 ~gϪ-^c?l_A|0pLxPzʻ񪲄y!\Oz}U[k~r+.4DHp\qva  z*UJtҜ^s .ANTO+>C#Z1D?{c4ɴY&@'  -vmv e$\U^^0Kz(ڼ(]|$1eoIfS @43;?VvJJ%l-J=Q7 㨕o4OMQ`&ڂ/Fia?O'VjH3>mL=}h΍]|0iqEN%H9&-3⳹HG`kx/TnZM8$lz:wȬ[[>ɾ b$a(HՍۯⱻ<`sZO6C@x:i)/RQ&ED8yZWf5f "8d2"Uސyvd"!UΑcʀHNhA -zfM_&.Y,0?җoN֚WSix`ubB|ǝ 1d-xP6GWVwt^㪌O[*׾YH;8n~}lwX_䖺02/h-ݯ3Iy=Lpm &ӼH+!R!-ʭJ$w&vnbGU:k/TE?K.!tǂ0g}O% _ aTkwmOym.suR%fk0RCq֌>٠XC:coTML|mh:CF[ !I= 5ՙcc_>btlS 싗zi&{ma@-Y}j3=3U w -(y DQH@|7S;hp -X1wc)*~9ða`٨0$ _YN_X1Qz\y5ۢ:wvgACYكUu+xТfKڲb#PWآʟm`Đˎ'w} -wD2M'<fbow^aW7+<F+=jafk%F*CMƉnD7eS_dhCx6 -;I}:NyWeɴ=Uy?N "{]%V^'kv5HY#׽ ZJ]$ǙS<` vDuW:"Ju:ֈ CÖrѐ!Ňϔ1_>ZbHd쮳 ieaRQܨsd{ρL엍p:eըo!1ϑļ2{B A#p*7jIc'=y"'Bĩ%*v82Kڧ.{v#:e="}`!KuYA00#4Dj>l242yp/"$x%bF 9FK)%Y8ZazZT-pZ&&%E>⧩mK+5x^KPYhXznH Ku#DQu>YXNbZ֣'VSL Z&rTMb@^v -<2 v Cp'ik)Q2޽̽EQdB&Og&z@Mzd<~1lbZh6.ĕD-N߲`#zEڢUk]ReŚDyQ2S.(e~ -?H!M5Gw N8jXϵHZ>'!S켑>b:VHHk]E2E[גD5Vb=\A"Cxrꖖhl}YO9uّ[|EvұN/G·IzF|p<&x,4V~b=aͩjKAmhF|5䓆K"i/SqJ*3$hS}ٙFq)Uz^[ox~&)w$eWc?y٩Y=5IUi^J\i|Uo_ʈ ;&Tt(IFP=ߒ L_+ -[ l Q*nendstream +xUX\Kwwwqw ݃ww'@p ̛k wzUO*&vF@ ;[gzffQyMff& + +QG3DŌ DܙJ$Na-9TКD@"lmM'HN@GW 333GҶv$6qK@G')*IjE;[k)H rY\Znhcav6.@Gy;L9;%#lhma,lkf $a;D؜ 8Z_$d5h~뢢/fà8Z01011A53-;h3@NLbakt'329>B#?d bV;9MV6&F{CG5(FG2; 9O Z;?!.FOݟ7 -tvsl+v\X PGNA֜9͑s0Ze9JTE*!Pbԥԣu(@I! ?RC u?RC u?Ro+!!UH]H]M,-Yh@ey6 A#l_j/ua00LX !Ȇdٰ A6B !h~!Ȇ_lA{/ A6<%"bE:0, Z*&fkZ|i1Ydb?QcGБw;8/6=<@w1ʢ1oeJsHWrhp8s]ţ4O(Їn/NJq omP;oO?n}*̺+OJL''^ތ NMtkzJOhealnh6ZµҮ]u`<&}4P7x=O@~+sɕOӊz1Y'dֱʘ9UwۯVgj?~c+ Dh*VWC;ղinpO4^Hh.+{8CDL *]U6x%v1X7)R&;"AfXҊH ya:%ߞ8zrD4Gor^715jqd 3YJj;H]5=rM̦KB u)$fGP\5vMz +10Slkn\4oD PsVM3K:M`D2;0!i^.ϵ^PJrg סE^WV=YK1G~ ͧиQCk>]&ņZm--p;&c[+9ķVmj±>=مӁي+z7ω](1Ƃұ32=ؗ'=QBwcu_$GSGQ{Aة(NA? q%ylhVJR;)oܗPWH0վ,z*p+?5Gs*ܧ-ġ~/̾Dx`"VĖ^w"mH+N熂NkAdt<}rX-Re-\oP֭CE`Olt*Y7؛UOM[~Z_ƾAuЍ=Xiښ!_Hn r L'WSJ#ee/ vkt!mʛ.ZPtyMG +_h&DufzkG6nOQvo~nzھAk~ z rQDh-@BD`/4r7j m,Cܛa,y!WA.ˍ/:TP7S3#!-Mda(\~勡`/~#l# E3!f ,ٯ6lmQ+â$*F30U0VFl^C- kji0=*n"ZԓA7--QZzItp]P{E^8ꞛ&B5X)+b{yCDh> +<{g-~ u ~>J0S^ȘhrpHf1wUK iO4-xc8A@o%uB@*'yEuL2>Cdљ85e"79P2NOW:-h= +3̮"1px(V1EO^' h.VgbX[paU`pp]W!'* jd#\3(IƇ%h8zfƣ1UN$C__}]ܻOe;+[)_479UJ*09sz;2cuȑn$STϹtN7!/Njy0Ud ֿ^{cTMlإ$QSc.ғ=X8ݕU8u. PN]tb-Zi!NDJ>QhrςIPaXQ(}}ff;!2?p SV[u-M@ P2Zzaş#:Őt f9`z*;dz]*iGed[y]Ĭ`ruTzz# 6* =shVpᔷ<4Քp'~$FǾJ)\ch7Q l)FvƝJ<72bu \PkIDFzVBma^kII'hSN oPb/[پ0 ֯H#B|x_n}յ,J$=z"6W[zBqP +8+aݟR!O)zQW3^e?Ǎ4L?"}2ZCVu4C}q*_`{p0%G197ێ>5Pp4,&×䦠w!c6x6JBްc| [jJPv@,L&XsWtO~ MUp}cTmKe !Zyg)䥧S.<拵 f_i5?#ag3U};P<ʦKSģ'x`j,%N~*O5cDo& $A>mCûq&Kз-PD݆/$$;\ǩ qVZ'c]] HFaB@bdcOb6LgM+_p2ٸe0όs\$*mܠQї /t]g#=-䉂y LoxHDںJ |ϱLw6jܝ7F#ՍȃO0`Uc԰: >~!S@JTs_ ;pi-\mLTl,l1V=OȿU3= pnY0#FeƘ; qUTPiڠ) o"@Qd`ҝiGxMn]qSr'/ u  = +TӦ5Q{ANdţl)%BW~1͓lao6Ocr/h\QJbo.)lkU*CO8:wej.ͱy.n_1| o(lﱚWī/nJCB#-V;`7%`׳p6/tGi1xbl{th U QmKWc!-6Ww3ښzr Ԇ4i9W{/#jf>u*Pk-BJe#[#X9@iJo''LOWa0l}"qџˤM.z+J[ë))SNVCaPfPq׹0yKh<Q4j9eB9lB!n/`Wx@5p) 0 nT^B7rBשjW$ex v| 1"y6畽F#7l9]bwrn" V"bO/G̡1lDgqՁ+1Exur(z.H$"dw +/tvȔ!9-B7nDn}hR?Ľ}Z%\5i1ߍm깯Zͺh~k:^f>ӗd3U8k56+{w!} a: xs2P$P ؞Wᧃc.eWk Zg5sܨ'o UAYOI# +4k% gS y>'uVCO ,VJeN6t]zVFE 9HО\M(,qk?8=,t(TM i'ZKn68@$e@;K?ݦuS##j[_ }\䍟҆΍n^qe)hoqje::/f2n 0(kz%`#JLqtX~f9{NBaO^27V]~e 2}YH]{Lq\RE=11<|6{D4YJu#gUa.׀ _K~G{~(xB"j!L)]f҂IL Qwݷo,V{hhL.<͙,1P-; "a.4pm}w|x1uÙ-i_J -?G_'.퇽nWtEdEl8=Fחaw<#=]^d]@lvVB<~:FEZi{Νe[r8Sn(͎!^Ƒo\XW1V(W:?CѶRfцldZ7CYv,bwX@j?kfs6QS?g$F]oَ<1lKJ齪 : +R랟/37mov'c_vΨ3tTM>U{5NPk+']~-TJf票yЏ*@1.ۏoL@ʱƅD7hqWfuq99YWo9'Aj{oM*k#I hIBh޾]k²ҋ5 F_!4|=IQ@ZDvjEEè!ak.e|?;rdhw/| +^ˆ\C*T|A PUv|h޵tXE̱ u~_0{q>/#!)WɆnB^aN*PPսƀL@3 zh9ZuL3//mmI@C +T͌E |e~ +|ψ3DÝ<.;HSokrG'ߟLcWUKlg" czdwU+j 02>۔4 zfbDN>!Μcx{/h=184Si{ +M=TpW'6@n=w`j J8f<`qŦdLy_泸ZB hg O#+cߘg| ѱ֟Q >DzQdx&<(g=xUY<~Eix w~*c5? a 5Qbx:R7ld/Wi]BJr04x@pƂK{?kB}qD+go46ˤBο?#rCټ'65Ww|8Wc L +'6/g,J-:_>I ~[ңg8Ώe>8=,})}#Rz+['ftu) +D[PSSt>-쇣tT uqM͹+a0͟6(\2GD}F|6 ?l #~`}W=#Sm\ Y]'~]`'ג[L4L QyUI g֗ 3BB%Fک螹 Srɽ p<>C>RQ&ED8yZWf5f "$[q<Dv!DB#!ƒHNhAJzfM_&.Y,0?җoN֚WSix`uEńp;cZlZUl58;U}"wpz$u"/BU6=(,uaeH$3"dbCw'Q0Iõ-\^N"@HmnP*;*o ۹ ^f\*#U_'눮Pj/i.z v V[HZ7:Ü;>uZ0H2.̯VSCߍ=R\>V7>Jc`5 +ƭ%f ?K|AIDZ tB%ިNU˙6t: +KYkCzj3"=Ǿ | iJ}ئ/ VLaڸÀr[t-Rf&V{f"(TΣO 72F#%kJlWoL( sab6cO5~STra2lQ+IGaHxJῑHܦUA< ֪#D¼R(-+E9@j +vtM6ԓH"?na~=)Gs ë'Ѝ5B9cO%m'i)NIT[ _bȋpջVQ 59?,kQ2> _YN_X1Qz\y5ۢ:wvgACYكUu+xТfKڲb#PWآʟm`Đˎ'w}( +wD2M'<fbow^aW7+<'iBWz8׸ JT0ݸ +o>\~ц&  m(0v=tܝN+h˒i?z>}5~2U/ 6D `{h)JF$O>9j<4,-F{?95I3Ux?-`  +t"etw+Ke;-m!C1)U'cYm}Ŝ[ɋ5]g¤棸Q/8/!^uQ Bc# + +ye6' GU o)8ϓ$/ +NzR*Dx O0 SKdU pZ eTOo3]64%FtF[{0uyE(C~겂P)a`GiNQH|d`id:^DPIK6)s0&{RJ$ +pѵGBl5[+3bMfMJ&|OSݧۖVN_%kfѰ܏F2+!#}Ĵ8GO8L䨞!4XĀ}x0oe#RA6fٷAO^R&-2޽̽EQB&Og&z@Mzd<~1lbZh6.ĕD-N߲`#zEڢUk]ReŚDyQ2S.(e~ +?Ȣ!M5Gw N8jXϵHZ>'!S켑>b:VHHk]E2E[גD5Vb=\A"Cxrꖖhl}YO9uّ[|EvұN/#PÊ$=|#Rs>C <t Jsc`u+lTO4{?O{eGz[s2Ϗq?*D72'7mv̊gV|")m0v;^&R|ьq)68wM8i-߶Jլ3$` p ..sΟt}VjԻ{fT@5R4k 9=3HM>Moa739;IhENŗW4_,e|!zxKBiV[!čGWr4.@`[ٱdpF2uh~ͱVy_˖ zⶣݡ1J:Ic3H ꨹Ϧ`ޫCe+76f^o$Bmkm.'9U#Vm)h mHZR&|pPd9e*RO7CL?ؗiRgn;yKZv5󚗝5Ssq́Yqlᕮ˕Ƨ_c"KUM`Ԝ -5 +syendstream endobj 335 0 obj << /Type /Font @@ -4756,14 +4753,14 @@ endobj /FirstChar 12 /LastChar 122 /Widths 855 0 R -/BaseFont /QKWCDE+CMBX12 +/BaseFont /QFKWMD+CMBX12 /FontDescriptor 333 0 R >> endobj 333 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /QKWCDE+CMBX12 +/FontName /QFKWMD+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -4783,7 +4780,7 @@ endobj /Filter /FlateDecode >> stream -xڬstn6NdŶƶm4&iil[v߿7"B/dbgugf`!Sff"ff`b#'q:[ي:xYF/;; 931?8lƆrƆ*vgb!kkbF8+8ffb cgb#-?JRvĜo+ (EL/Mjb Q tCN.bm-ohi6v6.Gb9;J9Z[ ٚYpp(Z8Z;ؚ_ `(-M5WfhN X^f`G~?lL,l͈Y9  =H^&wb;P8XbS;G挦YhYhW3?O8`bd`[01=0j3Dhoe |6Cp*[8 ll D?lQq3:Y:h'|;[hl?a'ςX*a/W`W!؁pvqU.֖8s \ !`R?(q"&X?tC@?tC@?tC@?tQq]0fWC]!`v?̮ٵCX #GCc+mw+?GX3O7@?e^=P/gڿa e+׍T NV!P ha^!/ZhsB_r V!hxaS&4;2(eny Au $ҭ)c4p؁=`7[%_B:33$@8r\ Q?yܑARyFS4X6}ķZ)gbi+r/'d]lT;=_Z~6N5g{%-gZ-!tqf(C%I]V 0Tc01d$mlD "8&SFU}<hCa+h0"GceOΨQ{sz߸1:ϱIV{D/`<`im=tY mTg9MwΟ"uJ*$[%Kꇖ (ۥIGZ>9Slqmւ4,aJJLG?u{EWzKIf#sRf>p 8y xqljq;I9KkN9z&ıY>]5o!([<Izvj{B ^3}xBXjϢѩZJB8!4{nw M Rwd.Yu;0LvTX3e3zW!id`vkD1&ߔu5kS${tta\c Ս6ŊY#c |ɻ\-z5 HmR44#,],CxJ4 )Jt97LWq J`[" )Nj_feBWF!ZJYm=cƸh-MuOmg0zXDB0D)tP_060 qafrsw3WCl f{J(mrL|}XO'D?x<LXb,+㒒2Fvt*Ośf!P?Z ?Ȫ]c}E¶#>e:9}(pO/ne9/NYr~*])vч/uA_7tCN/K8YY-\h#$~/i7ڽMIY;?+Vwy{7ʏz~y㓖.*uk`o֒o,Yw|[!?۵.v-ko -nw~tˁ^ :]vf;Vnt,~$i-T[\tG)*j܏(ܾh7Gg6oWۤv+f'ہUS%e[H$ٳ!E/Lcc#<~ ԛ%/oAӋ-eeiAՓKQYk_޻8k,%[w?%^Kv_ReǼ/ot`istJ)_U,.ɇ*&ȉP|6O.{7~GhҎ~3JaSM8'[xmjFTAb}cnR[j1c^+M6.UpMLہOˣe$lș:7ѣ?ĉMeAY5GD}*~/m@!5`XXTX[?endstream +nw~tˁ^ :]vf;Vnt,~$i-T[\tG)*j܏(ܾh7Gg6oWۤv+f'ہUS%e[H$ٳ!E/Lcc#<~ ԛ%/oAӋ-eeiAՓKQYk_޻8k,%[w?%^Kv_ReǼ/ot`istJ)_U,.ɇ*&ȉP|6O.{7~GhҎ~3JaSM8'[xmjFTAb}cnR[j1c^+M6.UpMLہOˣe$lș:7ѣ?ĉMeAY5GD}*~/m@!5`XXTX endstream endobj 328 0 obj << /Type /Font @@ -4861,14 +4858,14 @@ endobj /FirstChar 11 /LastChar 122 /Widths 856 0 R -/BaseFont /JMZOQZ+CMR10 +/BaseFont /XDWKCK+CMR10 /FontDescriptor 326 0 R >> endobj 326 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /JMZOQZ+CMR10 +/FontName /XDWKCK+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -4894,8 +4891,7 @@ lk 'lC`i 4 @ZBk .F:a?+9:j*W0Nn`@j A37uA2[G0矐=\le -`@o J -rcZ@{ߪ%ͼ'|'Ra0 y2$x X=`Oan.9 +`@o JcZ@{ߪ%ͼ'|'Ra0 y2$x X=`Oan.9 k; ?A p;#7j;$ ;v#"n/0 ; B  /`?2fuH6߈_v !'!&d߄,%ad YE7!&4%䢴~[7uRA_B=EzMHп˃mH?b"b"u@oE A@DDH]ԅŻF>oHV_ɇ$d_uDx$E_5vA'3I*Oޣ@lgvwkCXa4mkBOyJ:k-ӥ-f6ToƿƆbK``@j$ڧDh)ZʞrSbpt+ף_m1smJG#Zq n4$UKe;:htIfA1ɾذOf4(nt繡WzR&DZwqH*v0 %h%w??yj֊rRKWJ}Ԃ: Kq( 9g2ΓLg# Jw(+n\G4MqC:ŰE*Ggg|nOfK|E,wl܇%08B~2 t,{^i?F==ۇWGMk|i+ 镵:|߃9\8:-碎2ݕ]/j' mׄId*E}?zsG$#6%ܦQȆ-rYvQ KIXD9$WL,2Kuѫ'L>N7pidvXsr-_&UW3ki2xE - Rt 36lm}w8|nyB<^woRE;,^sk?@!?0.ɷ"X>>Y Xq\EnݘCAJ߂yEwʐ4^i/&+WۘbUrAUX"*)Q4~I[˹ zɷ|=tbO L(qU?l2S:F{h.p4fenW( VȺ"='S,uu~BU>5U/z6-IOhz4]c:$ljoTװ:c9s|5|N-REN/d}ye= i:.f\, M,lx9çj*! F՚um`ǹ6'us*/tj{es޴/SjiTD!K]Ї1}&xytY5}V@qC/D#s:a6  endstream + Rt 36lm}w8|nyB<^woRE;,^sk?@!?0.ɷ"X>>Y Xq\EnݘCAJ߂yEwʐ4^i/&+WۘbUrAUX"*)Q4~I[˹ zɷ|=tbO L(qU?l2S:F{h.p4fenW( VȺ"='S,uu~BU>5U/z6-IOhz4]c:$ljoTװ:c9s|5|N-REN/d}ye= i:.f\, M,lx9çj*! F՚um`ǹ6'us*/tj{es޴/SjiTD!K]Ї1}&xytY5}V@qC/D#s:aG:endstream endobj 320 0 obj << /Type /Font @@ -4939,14 +4935,14 @@ endobj /FirstChar 44 /LastChar 121 /Widths 857 0 R -/BaseFont /GKNEKC+CMR12 +/BaseFont /MWHUGY+CMR12 /FontDescriptor 318 0 R >> endobj 318 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /GKNEKC+CMR12 +/FontName /MWHUGY+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 @@ -4959,36 +4955,43 @@ endobj [272 326 272 490 490 490 490 490 0 0 490 0 490 0 272 0 0 0 0 0 762 734 693 707 748 0 0 0 0 0 503 761 612 0 0 762 666 0 721 544 707 0 0 0 0 0 0 0 0 0 0 0 0 490 544 435 544 435 0 490 544 272 0 0 272 816 544 490 544 517 381 386 381 544 0 0 0 517 ] endobj 316 0 obj << -/Length1 1124 -/Length2 4488 +/Length1 1141 +/Length2 4662 /Length3 532 -/Length 5228 +/Length 5411 /Filter /FlateDecode >> stream -xy<}Ǒ"ٷcƌ}e}h0ƞ"ke-ٕ%d˚dy꾞?s|?sq8b4N$I@b||jX Ġa8,$#x9,BPøa.8$)}F&8P?Oxn <XopDq3MiHH%;z;zL &4p`w!N7L -esYg[D+C`GTs_H/Fup0vF!IHOM/`(O/v B~YY5_1#3s_ ̈́`+q1qq!?@1H4a! lvD@14G8 $R'Dtah 3 -! H #8@%\ gQW -&)Po"dM7 ۙ "4 7"@7 ,$Xʞ  ~UUo@Lh  -gQ'4U\\JK{a $.ዀS|B]j jd&Vu5lj2Gzѭ!(z"1w{5M9]_LfνJP3%6ɭ7oWFKd\DVUiR( -~  S>OIBF׉L|Ǽ?&J8#S09.G'fH*Ce1/Z^w˨oO,^Q,}+h.W79v%A?}:bFp(scCcL)ᘧoBK&^=ZFdv8jl ŗ-֗fH`j/,=ㅮ(seˆ&]'V  u74󄇎h#Wf_J>P -2xzU<5/[>4I43F*C&rʊ- YBamRuP$aĠ{*70.eZ;c?&&"9@HzG0kTw3Ggf,G4hB6ʷ]xM+Fߠl+ĚX0 -í=_0y̷,ާO]~'ZDWf$[Dtd3^lA x3JG~_SDAn}.{D \2>' wN"(_ z(D0⌡\{2A+P|'ds檼aAzd>1&dJGp|<eGF'naJr;1@goG8mQS1 A:B(N#ezט͙dĽ61ID`Fb=w€# 52&E>rɚj,Q{?jzs-n&[z sK4Z묰%1W QQ`ݷ}ݶVEY8:YWK(yk<*Yf,`p cRX>0mjde^=L3{M9E;)&/P3d;lK,.DU(DD,=[rzV/=ٺC.3ŜY UwR+F]('aW -ܷ;L b;./gB63UBVG'{}t(Z2梎P2!dE*yHo/sAؓ=6VFC,E-~VËj)"#ͭnG5;,0Lx -ԔÞI;IGy{waPU/UY:mFS ո&˾5|ct(4tC_#rJbzYOKX쮋E6^NϜK+n}vpq{^J۔2:°7.>; [:c&O>#_ٲm-PΤ㺜rBĠ"aaُwC< 1R,UNw꽻v+B$C&&2Uy4mZ=,Yf,.fܓ?j,Ɉ;KtagwwF2wSmTK׈2uVLF$${1:_ɔŭr㷏d%<ʾ_qog0gܢ5xRZR}qsߢ)b [?;YjܑAւ/G|tfqJتB/rļ2B݈qRЮHxѨɽֽ6K5$R -Aq/pIYq pj*_vd8=Pi=M=÷7Ы*(v8nSñ?j;[X&kQf_H]D ڧ/hT/1%Éߑ63" ubeoQ>o>"Tph@j~̓ q<d,Cbk95O}Ɍ~wAau5?R}  #bL.N=c6tZ=Ux%UOZg A;>.0onɲP|dX hQ;9bEkHrV{+3+ߨ;R+/1+=&\ڙӏw轎deT.A.TxӴeR3$6>cҬ&nӹ&`^mZ0rn7- =yחn k`]NnmGG8e\o -;Us{D.׃ L]8Q7RnU1YAnNq}rXt{׬)71Ԋ-҅f.]T#AS[NBw<HlT Z{|?+BL6E ݂tNǾ YjR ڨV#ʛ[=U6l>dNkosgrfi!z̔ sM)zb[f b࡛kzʭP*>Ea9DUnYp \*8(8jق+I .@>|c\⽏:M1`җ Ã>ڮWsY@ {ѣ BIo$ף&eP:{Ur䃖 oХ -*)NoT9׾zӟvEa OFfNV\]Erwm&*aVB5˾WF$n1DeL>npF@5MU.U^c&ye +)-=S..C=MYfdQ)% -БyœC^$bӚq_35ŠLt9"Pe2MiXRfd]bN, J%< -b"pan!E'1s؊>{?PٞTuUw;4̟9g924Q($VDBTB7$D)yyAh8@!!X@B^^ H*H)HJS@(w4 ( Ї`nP+E>UWW1G{a8"b? i#Q2 'M +a(wx'Y\ +,sH- qC+} F37}8 sgT qE@Uw]%F "P'#K#a4_44A_1C5qUg_,A#6D߿lK EHB h4ćxIHE#L(4Cp+3*/%KĠ(77oER$Q| ?2@deb " /[2M/ox_H?M1bnQ?J-@|e%$|Bjj(o?))$~2|!8:~@yT(;_,~;͎.p( +1,PpDPף-T ]Kzu=,+2.,,szab^ hn{px>m ZjfEIqӥyEIGz%?$ + t$oE1%ّ˧d$'.bE>-A0J+zi pwdf,o]Q~]`fx3өdjNF{YԮ0*I׾^C2=m-mT7;&tʠ{{y9[c[Hq=jm2'J끲6`єKhW:ak%+%ߕQp'T1,6W@nKjbgj*-. 6} Xgeth>G\`Ev{iOI …ܱcA:#}+K̙|z#/&cnBhS}=NvnFd=Ϋ6t(ME7" +L*7X& Mނ%SGk]`[^ +y,[T +_l+-(q0@r?=K-%[f @ANr! K?uA%1y/9Kg"7k ; ;p ׾JcdEj<S{zD"I +x0vdW$='Ǟ3OzSn1]6HϿ)La$٬NL`қ $!08uAw<Ѵ -;7P!+IHj]vUyPʲAF9fRmula$feG1/+KCE|ֱ1_YM%)tB6tń/r^뀥wW̨egngEo +߳R54DXO~O"#y^DzfYpTޢimfgӜ |9.YшPhBy'73;UrNSr[} + +h$-)GR:oxd\9wE/PjP]R~Xm̚7>H&G1>v}?yZmIHy T16ݬ~ķ`s1i;4GY%!CxLr48yUк(%Ͱx'ơGWeҕx'n ֌rw h'. G/>Z)#C|8 f)9lS)FzsYk"[ngJpI[Fi-+o>f0|.\ +]5o8 $+G}a'D1$9бuS$Lf +HB1@^ +Wp7XTMMH_ ~~7T4k=}a`lK'֕,&, {Pm7T=y ˫*r=-7ŔdvL4[^@ĩTǺ}&PP$([Riȵȣ,~CI"L{sc$ݝТ_@ v˞=eum1UR䫼(E sΛ +YfW11PZ%gTs?NK6JJfo8i8.A @G9YT/ Jߙ|D>qI5SM=caegg6QQ i#It|42랴>q L9$1teP9=xJBTu9wM_rtYcCH.Z1Meg|(Ąr^!&w;WHɹ1țkRjMtD&D8.R-޸qRA8N:k. d_fb"HesYAXlFZB ύ`}U^ siD`H3iGM3Qr޹-qaSS˴h6{kr~Ǧ>ؗǬ4~⊘V_;4]RBT"x WU]ģT%}0[ݪGn|uK,K22ods +HgX+p2+>}^-83T #c+Ғ;b'DfB7T_Ҹٵ]^z?yQY4f?*S]#X'kkl[G[Y~c^5}~mZhtԚ)]aTtb*ges~12gT@5xpI+1˅$G2)|w'I6@-"&/~bt{=Z"d%=wa%7Jؠ1Xm8-bΟUz +scx5~d4ڧD/6vڜy@_uu{S~zN>Ӆ:".m`n6"T;s_[D8jnUY"niGU ósүDYʈN0Ie ]>/KΥۻDGؗWɾ;]3R%$-7eCF_ל +Pg{T1X$VBK" t3p_惩BY?z@pNKxyz+vic&S^zn낃5Ѷߢf{LƵ'2OIAf_Eo mW=s8_P=.bH~m{?{l 3`16QT(v?4̷kj:Dbķ**l-C +]&&Eh)5O%jU>V,np֍xԾs(`*o Ҋo +&WTBn1'MvRUԛD/h^cFe)Ԙî2)3saĦƜͼƳ],<`׹y' +]NUacMݓnK\ͤկ +Iime@mnX ֖Rax^S1g0<XIۺrSC Z/?G +3(@*U)ޛ +VjQs%MA~'fY@G`;G$C9qq`\cLSCN3N=I"@҃ѨDE j^o-,UAuﯵu3o +{ +L'֧~XRVtFiKvÿG?lT̡"ܿܞ&~d+;[^؄1[!3sb_@Ss[R1/&rLiy.JFHY'%Cu2^oaU+3CZUŇ,].Zwm4ͳ,Zc}/iv2l?-6@g%f s1*"j]c\hV\ׯϗRP:>a_>Oqy$iYY_.vH)> endobj 315 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 -/FontName /SCXDKK+CMR17 +/FontName /EHHFCP+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 431 /FontBBox [-33 -250 945 749] /Flags 4 -/CharSet (/parenleft/parenright/comma/period/zero/two/eight/A/C/L/T/V/a/b/e/i/m/n/o/p/r/s/t/y) +/CharSet (/parenleft/parenright/comma/period/zero/two/eight/nine/A/C/L/T/V/a/b/e/i/m/n/o/p/r/s/t/y) /FontFile 316 0 R >> endobj 858 0 obj -[354 354 0 0 250 0 250 0 459 0 459 0 0 0 0 0 459 0 0 0 0 0 0 0 0 693 0 668 0 0 0 0 0 0 0 0 576 0 0 0 0 0 0 0 668 0 693 0 0 0 0 0 0 0 0 0 0 459 511 0 0 406 0 0 0 250 0 0 0 772 511 459 511 0 354 359 354 0 0 0 0 485 ] +[354 354 0 0 250 0 250 0 459 0 459 0 0 0 0 0 459 459 0 0 0 0 0 0 0 693 0 668 0 0 0 0 0 0 0 0 576 0 0 0 0 0 0 0 668 0 693 0 0 0 0 0 0 0 0 0 0 459 511 0 0 406 0 0 0 250 0 0 0 772 511 459 511 0 354 359 354 0 0 0 0 485 ] endobj 321 0 obj << /Type /Pages @@ -5696,7 +5699,7 @@ endobj >> endobj 868 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.10b)/Keywords() -/CreationDate (D:20030710220900) +/CreationDate (D:20030716134300) >> endobj xref 0 869 @@ -5706,869 +5709,869 @@ xref 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n -0000029200 00000 n -0000389083 00000 n +0000029201 00000 n +0000389277 00000 n 0000000054 00000 n 0000000084 00000 n -0000029260 00000 n -0000388974 00000 n +0000029261 00000 n +0000389168 00000 n 0000000131 00000 n 0000000174 00000 n -0000029321 00000 n -0000388900 00000 n +0000029322 00000 n +0000389094 00000 n 0000000227 00000 n 0000000270 00000 n -0000032708 00000 n -0000388826 00000 n +0000032709 00000 n +0000389020 00000 n 0000000323 00000 n 0000000370 00000 n -0000032831 00000 n -0000388703 00000 n +0000032832 00000 n +0000388897 00000 n 0000000418 00000 n 0000000456 00000 n -0000036570 00000 n -0000388642 00000 n +0000036571 00000 n +0000388836 00000 n 0000000509 00000 n 0000000535 00000 n -0000036631 00000 n -0000388556 00000 n +0000036632 00000 n +0000388750 00000 n 0000000583 00000 n 0000000609 00000 n -0000039910 00000 n -0000388470 00000 n +0000039911 00000 n +0000388664 00000 n 0000000657 00000 n 0000000693 00000 n -0000039971 00000 n -0000388384 00000 n +0000039972 00000 n +0000388578 00000 n 0000000741 00000 n 0000000780 00000 n -0000040032 00000 n -0000388298 00000 n +0000040033 00000 n +0000388492 00000 n 0000000828 00000 n 0000000875 00000 n -0000041396 00000 n -0000388225 00000 n +0000041397 00000 n +0000388419 00000 n 0000000923 00000 n 0000000948 00000 n -0000044554 00000 n -0000388101 00000 n +0000044555 00000 n +0000388295 00000 n 0000000994 00000 n 0000001058 00000 n -0000044615 00000 n -0000388027 00000 n +0000044616 00000 n +0000388221 00000 n 0000001106 00000 n 0000001137 00000 n -0000048174 00000 n -0000387940 00000 n +0000048175 00000 n +0000388134 00000 n 0000001185 00000 n 0000001210 00000 n -0000048235 00000 n -0000387853 00000 n +0000048236 00000 n +0000388047 00000 n 0000001258 00000 n 0000001314 00000 n -0000050936 00000 n -0000387766 00000 n +0000050937 00000 n +0000387960 00000 n 0000001362 00000 n 0000001407 00000 n -0000050997 00000 n -0000387692 00000 n +0000050998 00000 n +0000387886 00000 n 0000001455 00000 n 0000001509 00000 n -0000054095 00000 n -0000387566 00000 n +0000054096 00000 n +0000387760 00000 n 0000001555 00000 n 0000001597 00000 n -0000054156 00000 n -0000387492 00000 n +0000054157 00000 n +0000387686 00000 n 0000001645 00000 n 0000001678 00000 n -0000060263 00000 n -0000387405 00000 n +0000060264 00000 n +0000387599 00000 n 0000001726 00000 n 0000001775 00000 n -0000060324 00000 n -0000387281 00000 n +0000060325 00000 n +0000387475 00000 n 0000001823 00000 n 0000001864 00000 n -0000065788 00000 n -0000387220 00000 n +0000065789 00000 n +0000387414 00000 n 0000001917 00000 n 0000001941 00000 n -0000071420 00000 n -0000387108 00000 n +0000071421 00000 n +0000387302 00000 n 0000001989 00000 n 0000002037 00000 n -0000071481 00000 n -0000387032 00000 n +0000071482 00000 n +0000387226 00000 n 0000002090 00000 n 0000002120 00000 n -0000078245 00000 n -0000386941 00000 n +0000078246 00000 n +0000387135 00000 n 0000002174 00000 n 0000002208 00000 n -0000078617 00000 n -0000386863 00000 n +0000078618 00000 n +0000387057 00000 n 0000002262 00000 n 0000002296 00000 n -0000083972 00000 n -0000386732 00000 n +0000083973 00000 n +0000386926 00000 n 0000002343 00000 n 0000002399 00000 n -0000084034 00000 n -0000386653 00000 n +0000084035 00000 n +0000386847 00000 n 0000002448 00000 n 0000002482 00000 n -0000086505 00000 n -0000386521 00000 n +0000086506 00000 n +0000386715 00000 n 0000002531 00000 n 0000002567 00000 n -0000094058 00000 n -0000386456 00000 n +0000094059 00000 n +0000386650 00000 n 0000002621 00000 n 0000002647 00000 n -0000094120 00000 n -0000386377 00000 n +0000094121 00000 n +0000386571 00000 n 0000002696 00000 n 0000002754 00000 n -0000100737 00000 n -0000386245 00000 n +0000100738 00000 n +0000386439 00000 n 0000002801 00000 n 0000002852 00000 n -0000100799 00000 n -0000386127 00000 n +0000100800 00000 n +0000386321 00000 n 0000002901 00000 n 0000002935 00000 n -0000102896 00000 n -0000386048 00000 n +0000102897 00000 n +0000386242 00000 n 0000002989 00000 n 0000003016 00000 n -0000102958 00000 n -0000385969 00000 n +0000102959 00000 n +0000386163 00000 n 0000003070 00000 n 0000003097 00000 n -0000103020 00000 n -0000385876 00000 n +0000103021 00000 n +0000386070 00000 n 0000003146 00000 n 0000003182 00000 n -0000108967 00000 n -0000385758 00000 n +0000108968 00000 n +0000385952 00000 n 0000003231 00000 n 0000003265 00000 n -0000110783 00000 n -0000385693 00000 n +0000110784 00000 n +0000385887 00000 n 0000003319 00000 n 0000003364 00000 n -0000114872 00000 n -0000385561 00000 n +0000114873 00000 n +0000385755 00000 n 0000003411 00000 n 0000003443 00000 n -0000114934 00000 n -0000385482 00000 n +0000114935 00000 n +0000385676 00000 n 0000003492 00000 n 0000003522 00000 n -0000118590 00000 n -0000385389 00000 n +0000118591 00000 n +0000385583 00000 n 0000003571 00000 n 0000003605 00000 n -0000118652 00000 n -0000385296 00000 n +0000118653 00000 n +0000385490 00000 n 0000003654 00000 n 0000003689 00000 n -0000123928 00000 n -0000385217 00000 n +0000123929 00000 n +0000385411 00000 n 0000003738 00000 n 0000003765 00000 n -0000127109 00000 n -0000385085 00000 n +0000127110 00000 n +0000385279 00000 n 0000003812 00000 n 0000003859 00000 n -0000127171 00000 n -0000385006 00000 n +0000127172 00000 n +0000385200 00000 n 0000003908 00000 n 0000003938 00000 n -0000130879 00000 n -0000384874 00000 n +0000130880 00000 n +0000385068 00000 n 0000003987 00000 n 0000004021 00000 n -0000132463 00000 n -0000384795 00000 n +0000132464 00000 n +0000384989 00000 n 0000004075 00000 n 0000004111 00000 n -0000137134 00000 n -0000384716 00000 n +0000137135 00000 n +0000384910 00000 n 0000004165 00000 n 0000004207 00000 n -0000137196 00000 n -0000384623 00000 n +0000137197 00000 n +0000384817 00000 n 0000004256 00000 n 0000004306 00000 n -0000137258 00000 n -0000384544 00000 n +0000137259 00000 n +0000384738 00000 n 0000004355 00000 n 0000004384 00000 n -0000141279 00000 n -0000384412 00000 n +0000141280 00000 n +0000384606 00000 n 0000004431 00000 n 0000004478 00000 n -0000141341 00000 n -0000384333 00000 n +0000141342 00000 n +0000384527 00000 n 0000004527 00000 n 0000004557 00000 n -0000141465 00000 n -0000384240 00000 n +0000141466 00000 n +0000384434 00000 n 0000004606 00000 n 0000004640 00000 n -0000144241 00000 n -0000384147 00000 n +0000144242 00000 n +0000384341 00000 n 0000004689 00000 n 0000004719 00000 n -0000146783 00000 n -0000384068 00000 n +0000146784 00000 n +0000384262 00000 n 0000004768 00000 n 0000004800 00000 n -0000149091 00000 n -0000383936 00000 n +0000149092 00000 n +0000384130 00000 n 0000004847 00000 n 0000004882 00000 n -0000149153 00000 n -0000383857 00000 n +0000149154 00000 n +0000384051 00000 n 0000004931 00000 n 0000004963 00000 n -0000152357 00000 n -0000383778 00000 n +0000152358 00000 n +0000383972 00000 n 0000005012 00000 n 0000005047 00000 n -0000158593 00000 n -0000383685 00000 n +0000158594 00000 n +0000383879 00000 n 0000005095 00000 n 0000005137 00000 n -0000163189 00000 n -0000383553 00000 n +0000163190 00000 n +0000383747 00000 n 0000005185 00000 n 0000005218 00000 n -0000163251 00000 n -0000383474 00000 n +0000163252 00000 n +0000383668 00000 n 0000005268 00000 n 0000005316 00000 n -0000165836 00000 n -0000383356 00000 n +0000165837 00000 n +0000383550 00000 n 0000005366 00000 n 0000005432 00000 n -0000165898 00000 n -0000383277 00000 n +0000165899 00000 n +0000383471 00000 n 0000005487 00000 n 0000005546 00000 n -0000170472 00000 n -0000383198 00000 n +0000170473 00000 n +0000383392 00000 n 0000005601 00000 n 0000005638 00000 n -0000174578 00000 n -0000383066 00000 n +0000174579 00000 n +0000383260 00000 n 0000005686 00000 n 0000005728 00000 n -0000174640 00000 n -0000382987 00000 n +0000174641 00000 n +0000383181 00000 n 0000005778 00000 n 0000005836 00000 n -0000174702 00000 n -0000382894 00000 n +0000174703 00000 n +0000383088 00000 n 0000005886 00000 n 0000005931 00000 n -0000177798 00000 n -0000382801 00000 n +0000177799 00000 n +0000382995 00000 n 0000005981 00000 n 0000006028 00000 n -0000177860 00000 n -0000382669 00000 n +0000177861 00000 n +0000382863 00000 n 0000006078 00000 n 0000006107 00000 n -0000177922 00000 n -0000382590 00000 n +0000177923 00000 n +0000382784 00000 n 0000006162 00000 n 0000006199 00000 n -0000177984 00000 n -0000382511 00000 n +0000177985 00000 n +0000382705 00000 n 0000006254 00000 n 0000006292 00000 n -0000181116 00000 n -0000382432 00000 n +0000181117 00000 n +0000382626 00000 n 0000006342 00000 n 0000006375 00000 n -0000184167 00000 n -0000382314 00000 n +0000184168 00000 n +0000382508 00000 n 0000006423 00000 n 0000006466 00000 n -0000184229 00000 n -0000382235 00000 n +0000184230 00000 n +0000382429 00000 n 0000006516 00000 n 0000006548 00000 n -0000184291 00000 n -0000382142 00000 n +0000184292 00000 n +0000382336 00000 n 0000006598 00000 n 0000006634 00000 n -0000187258 00000 n -0000382063 00000 n +0000187259 00000 n +0000382257 00000 n 0000006684 00000 n 0000006724 00000 n -0000007338 00000 n -0000007574 00000 n +0000007339 00000 n +0000007575 00000 n 0000006776 00000 n -0000007450 00000 n -0000007512 00000 n -0000379606 00000 n -0000374096 00000 n -0000379445 00000 n -0000373514 00000 n -0000364773 00000 n -0000373353 00000 n -0000380115 00000 n -0000008024 00000 n -0000007850 00000 n -0000007659 00000 n -0000007962 00000 n -0000363803 00000 n -0000345874 00000 n -0000363642 00000 n -0000015358 00000 n -0000010066 00000 n -0000008095 00000 n -0000015235 00000 n -0000345083 00000 n -0000332905 00000 n -0000344921 00000 n -0000015297 00000 n -0000010438 00000 n -0000332143 00000 n -0000318482 00000 n -0000331981 00000 n -0000010590 00000 n -0000010744 00000 n -0000010902 00000 n -0000011061 00000 n -0000011215 00000 n -0000011373 00000 n -0000011527 00000 n -0000011681 00000 n -0000011834 00000 n -0000011988 00000 n -0000012141 00000 n -0000012293 00000 n -0000012446 00000 n -0000012600 00000 n -0000012754 00000 n -0000012908 00000 n -0000013061 00000 n -0000013213 00000 n -0000013367 00000 n -0000013520 00000 n -0000013674 00000 n -0000013833 00000 n -0000013987 00000 n -0000014146 00000 n -0000014304 00000 n -0000014463 00000 n -0000014615 00000 n -0000014769 00000 n -0000014922 00000 n -0000015081 00000 n -0000024562 00000 n -0000017869 00000 n -0000015455 00000 n -0000024500 00000 n -0000317953 00000 n -0000309113 00000 n -0000317792 00000 n -0000018313 00000 n -0000018465 00000 n -0000018619 00000 n -0000018778 00000 n -0000018937 00000 n -0000019091 00000 n -0000019243 00000 n -0000019402 00000 n -0000019553 00000 n -0000019706 00000 n -0000019860 00000 n -0000020014 00000 n -0000020168 00000 n -0000020320 00000 n -0000020474 00000 n -0000020628 00000 n -0000020787 00000 n -0000020945 00000 n -0000021098 00000 n -0000021252 00000 n -0000021404 00000 n -0000021558 00000 n -0000021712 00000 n -0000021866 00000 n -0000022020 00000 n -0000022171 00000 n -0000022325 00000 n -0000022479 00000 n -0000308499 00000 n -0000298837 00000 n -0000308337 00000 n -0000298432 00000 n -0000293636 00000 n -0000298271 00000 n -0000022632 00000 n -0000022785 00000 n -0000022939 00000 n -0000023093 00000 n -0000023252 00000 n -0000023412 00000 n -0000023565 00000 n -0000023718 00000 n -0000023871 00000 n -0000024026 00000 n -0000024180 00000 n -0000024340 00000 n -0000026299 00000 n -0000025300 00000 n -0000024685 00000 n -0000026237 00000 n -0000025464 00000 n -0000025619 00000 n -0000025772 00000 n -0000025927 00000 n -0000026082 00000 n -0000026785 00000 n -0000026611 00000 n -0000026396 00000 n -0000026723 00000 n -0000029382 00000 n -0000029026 00000 n -0000026869 00000 n -0000029138 00000 n -0000380232 00000 n -0000033016 00000 n -0000032534 00000 n -0000029466 00000 n -0000032646 00000 n -0000032769 00000 n -0000032892 00000 n -0000032954 00000 n -0000036816 00000 n -0000036396 00000 n -0000033126 00000 n -0000036508 00000 n -0000293012 00000 n -0000283485 00000 n -0000292850 00000 n -0000036692 00000 n -0000036754 00000 n -0000040093 00000 n -0000039736 00000 n -0000036926 00000 n -0000039848 00000 n -0000042261 00000 n -0000041222 00000 n -0000040190 00000 n -0000041334 00000 n -0000041457 00000 n -0000041519 00000 n -0000041581 00000 n -0000041643 00000 n -0000041704 00000 n -0000041766 00000 n -0000041827 00000 n -0000041889 00000 n -0000041951 00000 n -0000042013 00000 n -0000042075 00000 n -0000042137 00000 n -0000042199 00000 n -0000042773 00000 n -0000042599 00000 n -0000042358 00000 n -0000042711 00000 n -0000044676 00000 n -0000044380 00000 n -0000042857 00000 n -0000044492 00000 n -0000281990 00000 n -0000279410 00000 n -0000281829 00000 n -0000278485 00000 n -0000262980 00000 n -0000278323 00000 n -0000380349 00000 n -0000048357 00000 n -0000047826 00000 n -0000044799 00000 n -0000048112 00000 n -0000262193 00000 n -0000249898 00000 n -0000262033 00000 n -0000249588 00000 n -0000245832 00000 n -0000249427 00000 n -0000245470 00000 n -0000243144 00000 n -0000245309 00000 n -0000242883 00000 n -0000241250 00000 n -0000242723 00000 n -0000047958 00000 n -0000240913 00000 n -0000237261 00000 n -0000240754 00000 n -0000236315 00000 n -0000222073 00000 n -0000236154 00000 n -0000220796 00000 n -0000218182 00000 n -0000220637 00000 n -0000048295 00000 n -0000217523 00000 n -0000207232 00000 n -0000217363 00000 n -0000051058 00000 n -0000050762 00000 n -0000048596 00000 n -0000050874 00000 n -0000051625 00000 n -0000051451 00000 n -0000051168 00000 n -0000051563 00000 n -0000054217 00000 n -0000053921 00000 n -0000051709 00000 n -0000054033 00000 n -0000057422 00000 n -0000056569 00000 n -0000054314 00000 n -0000057174 00000 n -0000056717 00000 n -0000056870 00000 n -0000057023 00000 n -0000057236 00000 n -0000057298 00000 n -0000057360 00000 n -0000060385 00000 n -0000060089 00000 n -0000057583 00000 n -0000060201 00000 n -0000205942 00000 n -0000203863 00000 n -0000205783 00000 n -0000380466 00000 n -0000065849 00000 n -0000065614 00000 n -0000060558 00000 n -0000065726 00000 n -0000069006 00000 n -0000068832 00000 n -0000066023 00000 n -0000068944 00000 n -0000071664 00000 n -0000071246 00000 n -0000069142 00000 n -0000071358 00000 n -0000203515 00000 n -0000201907 00000 n -0000203356 00000 n -0000071542 00000 n -0000071604 00000 n -0000074855 00000 n -0000074189 00000 n -0000071851 00000 n -0000074301 00000 n -0000074363 00000 n -0000074424 00000 n -0000074484 00000 n -0000074546 00000 n -0000074607 00000 n -0000074669 00000 n -0000074731 00000 n -0000074793 00000 n -0000078741 00000 n -0000077898 00000 n -0000075016 00000 n -0000078183 00000 n -0000078307 00000 n -0000078369 00000 n -0000078431 00000 n -0000078493 00000 n -0000078555 00000 n -0000078030 00000 n -0000078679 00000 n -0000080813 00000 n -0000080639 00000 n -0000078889 00000 n -0000080751 00000 n -0000380583 00000 n -0000081918 00000 n -0000081744 00000 n -0000080923 00000 n -0000081856 00000 n -0000084158 00000 n -0000083624 00000 n -0000082015 00000 n -0000083910 00000 n -0000083756 00000 n -0000084096 00000 n -0000086567 00000 n -0000086331 00000 n -0000084293 00000 n -0000086443 00000 n -0000088466 00000 n -0000088292 00000 n -0000086703 00000 n -0000088404 00000 n -0000090519 00000 n -0000090345 00000 n -0000088576 00000 n -0000090457 00000 n -0000094182 00000 n -0000093884 00000 n -0000090642 00000 n -0000093996 00000 n -0000380700 00000 n -0000097049 00000 n -0000096875 00000 n -0000094305 00000 n -0000096987 00000 n -0000098225 00000 n -0000098051 00000 n -0000097159 00000 n -0000098163 00000 n -0000098773 00000 n -0000098599 00000 n -0000098322 00000 n -0000098711 00000 n -0000100861 00000 n -0000100563 00000 n -0000098857 00000 n -0000100675 00000 n -0000103082 00000 n -0000102722 00000 n -0000100971 00000 n -0000102834 00000 n -0000105643 00000 n -0000105407 00000 n -0000103205 00000 n -0000105519 00000 n -0000105581 00000 n -0000380817 00000 n -0000109091 00000 n -0000108619 00000 n -0000105766 00000 n -0000108905 00000 n -0000108751 00000 n -0000109029 00000 n -0000110845 00000 n -0000110609 00000 n -0000109265 00000 n -0000110721 00000 n -0000111525 00000 n -0000111351 00000 n -0000110955 00000 n -0000111463 00000 n -0000114996 00000 n -0000114698 00000 n -0000111622 00000 n -0000114810 00000 n -0000118713 00000 n -0000118416 00000 n -0000115131 00000 n -0000118528 00000 n -0000121586 00000 n -0000121412 00000 n -0000118849 00000 n -0000121524 00000 n -0000380934 00000 n -0000123990 00000 n -0000123754 00000 n -0000121709 00000 n -0000123866 00000 n -0000127233 00000 n -0000126935 00000 n -0000124087 00000 n -0000127047 00000 n -0000200028 00000 n -0000197905 00000 n -0000199866 00000 n -0000130941 00000 n -0000130705 00000 n -0000127393 00000 n -0000130817 00000 n -0000132587 00000 n -0000132115 00000 n -0000131103 00000 n -0000132401 00000 n -0000132247 00000 n -0000132525 00000 n -0000133774 00000 n -0000133600 00000 n -0000132735 00000 n -0000133712 00000 n -0000134685 00000 n -0000134511 00000 n -0000133871 00000 n -0000134623 00000 n -0000381051 00000 n -0000137320 00000 n -0000136960 00000 n -0000134782 00000 n -0000137072 00000 n -0000138333 00000 n -0000138159 00000 n -0000137443 00000 n -0000138271 00000 n -0000138857 00000 n -0000138683 00000 n -0000138417 00000 n -0000138795 00000 n -0000141527 00000 n -0000141105 00000 n -0000138941 00000 n -0000141217 00000 n -0000141403 00000 n -0000144303 00000 n -0000144067 00000 n -0000141675 00000 n -0000144179 00000 n -0000146845 00000 n -0000146609 00000 n -0000144426 00000 n -0000146721 00000 n -0000381168 00000 n -0000147393 00000 n -0000147219 00000 n -0000146955 00000 n -0000147331 00000 n -0000149215 00000 n -0000148917 00000 n -0000147477 00000 n -0000149029 00000 n -0000152417 00000 n -0000152183 00000 n -0000149325 00000 n -0000152295 00000 n -0000154968 00000 n -0000154794 00000 n -0000152540 00000 n -0000154906 00000 n -0000155941 00000 n -0000155767 00000 n -0000155078 00000 n -0000155879 00000 n -0000158655 00000 n -0000158419 00000 n -0000156038 00000 n -0000158531 00000 n -0000197575 00000 n -0000194437 00000 n -0000197413 00000 n -0000381285 00000 n -0000161049 00000 n -0000160875 00000 n -0000158829 00000 n -0000160987 00000 n -0000163313 00000 n -0000163015 00000 n -0000161172 00000 n -0000163127 00000 n -0000165960 00000 n -0000165662 00000 n -0000163410 00000 n -0000165774 00000 n -0000170596 00000 n -0000170124 00000 n -0000166083 00000 n -0000170410 00000 n -0000170256 00000 n -0000170534 00000 n -0000172358 00000 n -0000172184 00000 n -0000170795 00000 n -0000172296 00000 n -0000174764 00000 n -0000174404 00000 n -0000172494 00000 n -0000174516 00000 n -0000381402 00000 n -0000178108 00000 n -0000177624 00000 n -0000174861 00000 n -0000177736 00000 n -0000178046 00000 n -0000193201 00000 n -0000190928 00000 n -0000193042 00000 n -0000181178 00000 n -0000180942 00000 n -0000178281 00000 n -0000181054 00000 n -0000181727 00000 n -0000181553 00000 n -0000181300 00000 n -0000181665 00000 n -0000184477 00000 n -0000183993 00000 n -0000181811 00000 n -0000184105 00000 n -0000184353 00000 n -0000184415 00000 n -0000187630 00000 n -0000187084 00000 n -0000184574 00000 n -0000187196 00000 n -0000187320 00000 n -0000187382 00000 n -0000187444 00000 n -0000187506 00000 n -0000187568 00000 n -0000189822 00000 n -0000189525 00000 n -0000187740 00000 n -0000189637 00000 n -0000189699 00000 n -0000189760 00000 n -0000381519 00000 n -0000189919 00000 n -0000193410 00000 n -0000193442 00000 n -0000197779 00000 n -0000200226 00000 n -0000200250 00000 n -0000203739 00000 n -0000206191 00000 n -0000206163 00000 n -0000206286 00000 n -0000217881 00000 n -0000221013 00000 n -0000221055 00000 n -0000236887 00000 n -0000241172 00000 n -0000243099 00000 n -0000245678 00000 n -0000249810 00000 n -0000262609 00000 n -0000279034 00000 n -0000282273 00000 n -0000282537 00000 n -0000293324 00000 n -0000298660 00000 n -0000308799 00000 n -0000318283 00000 n -0000332535 00000 n -0000345500 00000 n -0000364354 00000 n -0000373834 00000 n -0000379883 00000 n +0000007451 00000 n +0000007513 00000 n +0000379793 00000 n +0000374100 00000 n +0000379632 00000 n +0000373518 00000 n +0000364777 00000 n +0000373357 00000 n +0000380309 00000 n +0000008025 00000 n +0000007851 00000 n +0000007660 00000 n +0000007963 00000 n +0000363807 00000 n +0000345878 00000 n +0000363646 00000 n +0000015359 00000 n +0000010067 00000 n +0000008096 00000 n +0000015236 00000 n +0000345087 00000 n +0000332908 00000 n +0000344925 00000 n +0000015298 00000 n +0000010439 00000 n +0000332146 00000 n +0000318485 00000 n +0000331984 00000 n +0000010591 00000 n +0000010745 00000 n +0000010903 00000 n +0000011062 00000 n +0000011216 00000 n +0000011374 00000 n +0000011528 00000 n +0000011682 00000 n +0000011835 00000 n +0000011989 00000 n +0000012142 00000 n +0000012294 00000 n +0000012447 00000 n +0000012601 00000 n +0000012755 00000 n +0000012909 00000 n +0000013062 00000 n +0000013214 00000 n +0000013368 00000 n +0000013521 00000 n +0000013675 00000 n +0000013834 00000 n +0000013988 00000 n +0000014147 00000 n +0000014305 00000 n +0000014464 00000 n +0000014616 00000 n +0000014770 00000 n +0000014923 00000 n +0000015082 00000 n +0000024563 00000 n +0000017870 00000 n +0000015456 00000 n +0000024501 00000 n +0000317956 00000 n +0000309117 00000 n +0000317795 00000 n +0000018314 00000 n +0000018466 00000 n +0000018620 00000 n +0000018779 00000 n +0000018938 00000 n +0000019092 00000 n +0000019244 00000 n +0000019403 00000 n +0000019554 00000 n +0000019707 00000 n +0000019861 00000 n +0000020015 00000 n +0000020169 00000 n +0000020321 00000 n +0000020475 00000 n +0000020629 00000 n +0000020788 00000 n +0000020946 00000 n +0000021099 00000 n +0000021253 00000 n +0000021405 00000 n +0000021559 00000 n +0000021713 00000 n +0000021867 00000 n +0000022021 00000 n +0000022172 00000 n +0000022326 00000 n +0000022480 00000 n +0000308503 00000 n +0000298841 00000 n +0000308341 00000 n +0000298436 00000 n +0000293639 00000 n +0000298275 00000 n +0000022633 00000 n +0000022786 00000 n +0000022940 00000 n +0000023094 00000 n +0000023253 00000 n +0000023413 00000 n +0000023566 00000 n +0000023719 00000 n +0000023872 00000 n +0000024027 00000 n +0000024181 00000 n +0000024341 00000 n +0000026300 00000 n +0000025301 00000 n +0000024686 00000 n +0000026238 00000 n +0000025465 00000 n +0000025620 00000 n +0000025773 00000 n +0000025928 00000 n +0000026083 00000 n +0000026786 00000 n +0000026612 00000 n +0000026397 00000 n +0000026724 00000 n +0000029383 00000 n +0000029027 00000 n +0000026870 00000 n +0000029139 00000 n +0000380426 00000 n +0000033017 00000 n +0000032535 00000 n +0000029467 00000 n +0000032647 00000 n +0000032770 00000 n +0000032893 00000 n +0000032955 00000 n +0000036817 00000 n +0000036397 00000 n +0000033127 00000 n +0000036509 00000 n +0000293015 00000 n +0000283488 00000 n +0000292853 00000 n +0000036693 00000 n +0000036755 00000 n +0000040094 00000 n +0000039737 00000 n +0000036927 00000 n +0000039849 00000 n +0000042262 00000 n +0000041223 00000 n +0000040191 00000 n +0000041335 00000 n +0000041458 00000 n +0000041520 00000 n +0000041582 00000 n +0000041644 00000 n +0000041705 00000 n +0000041767 00000 n +0000041828 00000 n +0000041890 00000 n +0000041952 00000 n +0000042014 00000 n +0000042076 00000 n +0000042138 00000 n +0000042200 00000 n +0000042774 00000 n +0000042600 00000 n +0000042359 00000 n +0000042712 00000 n +0000044677 00000 n +0000044381 00000 n +0000042858 00000 n +0000044493 00000 n +0000281993 00000 n +0000279413 00000 n +0000281832 00000 n +0000278488 00000 n +0000262983 00000 n +0000278326 00000 n +0000380543 00000 n +0000048358 00000 n +0000047827 00000 n +0000044800 00000 n +0000048113 00000 n +0000262196 00000 n +0000249901 00000 n +0000262036 00000 n +0000249591 00000 n +0000245835 00000 n +0000249430 00000 n +0000245473 00000 n +0000243147 00000 n +0000245312 00000 n +0000242886 00000 n +0000241254 00000 n +0000242726 00000 n +0000047959 00000 n +0000240917 00000 n +0000237265 00000 n +0000240758 00000 n +0000236319 00000 n +0000222077 00000 n +0000236158 00000 n +0000220800 00000 n +0000218186 00000 n +0000220641 00000 n +0000048296 00000 n +0000217527 00000 n +0000207236 00000 n +0000217367 00000 n +0000051059 00000 n +0000050763 00000 n +0000048597 00000 n +0000050875 00000 n +0000051626 00000 n +0000051452 00000 n +0000051169 00000 n +0000051564 00000 n +0000054218 00000 n +0000053922 00000 n +0000051710 00000 n +0000054034 00000 n +0000057423 00000 n +0000056570 00000 n +0000054315 00000 n +0000057175 00000 n +0000056718 00000 n +0000056871 00000 n +0000057024 00000 n +0000057237 00000 n +0000057299 00000 n +0000057361 00000 n +0000060386 00000 n +0000060090 00000 n +0000057584 00000 n +0000060202 00000 n +0000205946 00000 n +0000203866 00000 n +0000205787 00000 n +0000380660 00000 n +0000065850 00000 n +0000065615 00000 n +0000060559 00000 n +0000065727 00000 n +0000069007 00000 n +0000068833 00000 n +0000066024 00000 n +0000068945 00000 n +0000071665 00000 n +0000071247 00000 n +0000069143 00000 n +0000071359 00000 n +0000203518 00000 n +0000201909 00000 n +0000203359 00000 n +0000071543 00000 n +0000071605 00000 n +0000074856 00000 n +0000074190 00000 n +0000071852 00000 n +0000074302 00000 n +0000074364 00000 n +0000074425 00000 n +0000074485 00000 n +0000074547 00000 n +0000074608 00000 n +0000074670 00000 n +0000074732 00000 n +0000074794 00000 n +0000078742 00000 n +0000077899 00000 n +0000075017 00000 n +0000078184 00000 n +0000078308 00000 n +0000078370 00000 n +0000078432 00000 n +0000078494 00000 n +0000078556 00000 n +0000078031 00000 n +0000078680 00000 n +0000080814 00000 n +0000080640 00000 n +0000078890 00000 n +0000080752 00000 n +0000380777 00000 n +0000081919 00000 n +0000081745 00000 n +0000080924 00000 n +0000081857 00000 n +0000084159 00000 n +0000083625 00000 n +0000082016 00000 n +0000083911 00000 n +0000083757 00000 n +0000084097 00000 n +0000086568 00000 n +0000086332 00000 n +0000084294 00000 n +0000086444 00000 n +0000088467 00000 n +0000088293 00000 n +0000086704 00000 n +0000088405 00000 n +0000090520 00000 n +0000090346 00000 n +0000088577 00000 n +0000090458 00000 n +0000094183 00000 n +0000093885 00000 n +0000090643 00000 n +0000093997 00000 n +0000380894 00000 n +0000097050 00000 n +0000096876 00000 n +0000094306 00000 n +0000096988 00000 n +0000098226 00000 n +0000098052 00000 n +0000097160 00000 n +0000098164 00000 n +0000098774 00000 n +0000098600 00000 n +0000098323 00000 n +0000098712 00000 n +0000100862 00000 n +0000100564 00000 n +0000098858 00000 n +0000100676 00000 n +0000103083 00000 n +0000102723 00000 n +0000100972 00000 n +0000102835 00000 n +0000105644 00000 n +0000105408 00000 n +0000103206 00000 n +0000105520 00000 n +0000105582 00000 n +0000381011 00000 n +0000109092 00000 n +0000108620 00000 n +0000105767 00000 n +0000108906 00000 n +0000108752 00000 n +0000109030 00000 n +0000110846 00000 n +0000110610 00000 n +0000109266 00000 n +0000110722 00000 n +0000111526 00000 n +0000111352 00000 n +0000110956 00000 n +0000111464 00000 n +0000114997 00000 n +0000114699 00000 n +0000111623 00000 n +0000114811 00000 n +0000118714 00000 n +0000118417 00000 n +0000115132 00000 n +0000118529 00000 n +0000121587 00000 n +0000121413 00000 n +0000118850 00000 n +0000121525 00000 n +0000381128 00000 n +0000123991 00000 n +0000123755 00000 n +0000121710 00000 n +0000123867 00000 n +0000127234 00000 n +0000126936 00000 n +0000124088 00000 n +0000127048 00000 n +0000200030 00000 n +0000197906 00000 n +0000199868 00000 n +0000130942 00000 n +0000130706 00000 n +0000127394 00000 n +0000130818 00000 n +0000132588 00000 n +0000132116 00000 n +0000131104 00000 n +0000132402 00000 n +0000132248 00000 n +0000132526 00000 n +0000133775 00000 n +0000133601 00000 n +0000132736 00000 n +0000133713 00000 n +0000134686 00000 n +0000134512 00000 n +0000133872 00000 n +0000134624 00000 n +0000381245 00000 n +0000137321 00000 n +0000136961 00000 n +0000134783 00000 n +0000137073 00000 n +0000138334 00000 n +0000138160 00000 n +0000137444 00000 n +0000138272 00000 n +0000138858 00000 n +0000138684 00000 n +0000138418 00000 n +0000138796 00000 n +0000141528 00000 n +0000141106 00000 n +0000138942 00000 n +0000141218 00000 n +0000141404 00000 n +0000144304 00000 n +0000144068 00000 n +0000141676 00000 n +0000144180 00000 n +0000146846 00000 n +0000146610 00000 n +0000144427 00000 n +0000146722 00000 n +0000381362 00000 n +0000147394 00000 n +0000147220 00000 n +0000146956 00000 n +0000147332 00000 n +0000149216 00000 n +0000148918 00000 n +0000147478 00000 n +0000149030 00000 n +0000152418 00000 n +0000152184 00000 n +0000149326 00000 n +0000152296 00000 n +0000154969 00000 n +0000154795 00000 n +0000152541 00000 n +0000154907 00000 n +0000155942 00000 n +0000155768 00000 n +0000155079 00000 n +0000155880 00000 n +0000158656 00000 n +0000158420 00000 n +0000156039 00000 n +0000158532 00000 n +0000197576 00000 n +0000194438 00000 n +0000197414 00000 n +0000381479 00000 n +0000161050 00000 n +0000160876 00000 n +0000158830 00000 n +0000160988 00000 n +0000163314 00000 n +0000163016 00000 n +0000161173 00000 n +0000163128 00000 n +0000165961 00000 n +0000165663 00000 n +0000163411 00000 n +0000165775 00000 n +0000170597 00000 n +0000170125 00000 n +0000166084 00000 n +0000170411 00000 n +0000170257 00000 n +0000170535 00000 n +0000172359 00000 n +0000172185 00000 n +0000170796 00000 n +0000172297 00000 n +0000174765 00000 n +0000174405 00000 n +0000172495 00000 n +0000174517 00000 n 0000381596 00000 n -0000381714 00000 n -0000381832 00000 n -0000381909 00000 n -0000381987 00000 n -0000389192 00000 n -0000393426 00000 n -0000393465 00000 n -0000393503 00000 n -0000393730 00000 n +0000178109 00000 n +0000177625 00000 n +0000174862 00000 n +0000177737 00000 n +0000178047 00000 n +0000193202 00000 n +0000190929 00000 n +0000193043 00000 n +0000181179 00000 n +0000180943 00000 n +0000178282 00000 n +0000181055 00000 n +0000181728 00000 n +0000181554 00000 n +0000181301 00000 n +0000181666 00000 n +0000184478 00000 n +0000183994 00000 n +0000181812 00000 n +0000184106 00000 n +0000184354 00000 n +0000184416 00000 n +0000187631 00000 n +0000187085 00000 n +0000184575 00000 n +0000187197 00000 n +0000187321 00000 n +0000187383 00000 n +0000187445 00000 n +0000187507 00000 n +0000187569 00000 n +0000189823 00000 n +0000189526 00000 n +0000187741 00000 n +0000189638 00000 n +0000189700 00000 n +0000189761 00000 n +0000381713 00000 n +0000189920 00000 n +0000193411 00000 n +0000193443 00000 n +0000197780 00000 n +0000200228 00000 n +0000200252 00000 n +0000203742 00000 n +0000206195 00000 n +0000206167 00000 n +0000206290 00000 n +0000217885 00000 n +0000221017 00000 n +0000221059 00000 n +0000236891 00000 n +0000241176 00000 n +0000243102 00000 n +0000245681 00000 n +0000249813 00000 n +0000262612 00000 n +0000279037 00000 n +0000282276 00000 n +0000282540 00000 n +0000293327 00000 n +0000298664 00000 n +0000308803 00000 n +0000318286 00000 n +0000332538 00000 n +0000345504 00000 n +0000364358 00000 n +0000373838 00000 n +0000380075 00000 n +0000381790 00000 n +0000381908 00000 n +0000382026 00000 n +0000382103 00000 n +0000382181 00000 n +0000389386 00000 n +0000393620 00000 n +0000393659 00000 n +0000393697 00000 n +0000393924 00000 n trailer << /Size 869 @@ -6576,5 +6579,5 @@ trailer /Info 868 0 R >> startxref -393885 +394079 %%EOF diff --git a/crypt.tex b/crypt.tex index 0cfeff3..a01cea6 100644 --- a/crypt.tex +++ b/crypt.tex @@ -47,7 +47,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.88} +\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.89} \author{Tom St Denis \\ Algonquin College \\ \\ diff --git a/dh.c b/dh.c index d23632d..1745ef4 100644 --- a/dh.c +++ b/dh.c @@ -14,7 +14,7 @@ static const struct { "2", "1tH+dRFGpEYyVLe4ydZcYyGDpeAxnChz0yk+pNCtkEXwUsOORyguBtx8spUD" "FAjEDS8PutUBTEu2q4USqu19dUbCLj9D2jY7y3871RnSccurMBsMm35ILcyQ" - "rpN0MQKc/" + "rpN0MQKc/" }, #endif #ifdef DH1024 @@ -465,7 +465,7 @@ int dh_shared_secret(dh_key *private_key, dh_key *public_key, } if (mp_read_radix(&p, (char *)sets[private_key->idx].prime, 64) != MP_OKAY) { goto error; } - if (mp_exptmod(&public_key->y, &private_key->x, &p, &tmp) != MP_OKAY) { goto error; } + if (mp_exptmod(&public_key->y, &private_key->x, &p, &tmp) != MP_OKAY) { goto error; } /* enough space for output? */ x = (unsigned long)mp_unsigned_bin_size(&tmp); @@ -473,7 +473,7 @@ int dh_shared_secret(dh_key *private_key, dh_key *public_key, res = CRYPT_BUFFER_OVERFLOW; goto done; } - if (mp_to_unsigned_bin(&tmp, out) != MP_OKAY) { goto error; } + if (mp_to_unsigned_bin(&tmp, out) != MP_OKAY) { goto error; } *outlen = x; res = CRYPT_OK; goto done; diff --git a/makefile b/makefile index a5b2ead..7eb0a78 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ # a build. This is easy to remedy though, for those that have problems. # The version -VERSION=0.88 +VERSION=0.89 #ch1-01-1 # Compiler and Linker Names diff --git a/makefile.msvc b/makefile.msvc index c5ab49c..dde8628 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -1,8 +1,6 @@ #MSVC Makefile [tested with MSVC 6.00 with SP5] # #Tom St Denis - -# note optimizations are turned off because it causes a bug in aes.c that cannot be rectified [right away] CFLAGS = /I. /Ox /DWIN32 /W3 default: library diff --git a/mpi.c b/mpi.c index b92e915..4737ce7 100644 --- a/mpi.c +++ b/mpi.c @@ -217,7 +217,7 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) * that W[ix-1] have the carry cleared (see after the inner loop) */ register mp_digit mu; - mu = MULT(W[ix] & MP_MASK, rho) & MP_MASK; + mu = ((W[ix] & MP_MASK) * rho) & MP_MASK; /* a = a + mu * m * b**i * @@ -246,7 +246,7 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* inner loop */ for (iy = 0; iy < n->used; iy++) { - *_W++ += MULT(mu, *tmpn++); + *_W++ += ((mp_word)mu) * ((mp_word)*tmpn++); } } @@ -254,7 +254,6 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } - { register mp_digit *tmpx; register mp_word *_W, *_W1; @@ -384,7 +383,7 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) pb = MIN (b->used, digs - ix); for (iy = 0; iy < pb; iy++) { - *_W++ += MULT(tmpx, *tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } @@ -407,20 +406,27 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * from N*(N+N*c)==N**2 + c*N**2 to N**2 + N*c where c is the * cost of the shifting. On very small numbers this is slower * but on most cryptographic size numbers it is faster. + * + * In this particular implementation we feed the carries from + * behind which means when the loop terminates we still have one + * last digit to copy */ tmpc = c->dp; for (ix = 1; ix < digs; ix++) { + /* forward the carry from the previous temp */ W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* now extract the previous digit [below the carry] */ *tmpc++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } + /* fetch the last digit */ *tmpc++ = (mp_digit) (W[digs - 1] & ((mp_word) MP_MASK)); - /* clear unused */ + /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpc++ = 0; } } - mp_clamp (c); return MP_OKAY; } @@ -501,7 +507,7 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* compute column products for digits above the minimum */ for (; iy < pb; iy++) { - *_W++ += MULT(tmpx, *tmpy++); + *_W++ += ((mp_word) tmpx) * ((mp_word)*tmpy++); } } } @@ -510,12 +516,15 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) oldused = c->used; c->used = newused; - /* now convert the array W downto what we need */ + /* now convert the array W downto what we need + * + * See comments in bn_fast_s_mp_mul_digs.c + */ for (ix = digs + 1; ix < newused; ix++) { W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); c->dp[ix - 1] = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } - c->dp[(pa + pb + 1) - 1] = (mp_digit) (W[(pa + pb + 1) - 1] & ((mp_word) MP_MASK)); + c->dp[newused - 1] = (mp_digit) (W[newused - 1] & ((mp_word) MP_MASK)); for (; ix < oldused; ix++) { c->dp[ix] = 0; @@ -597,7 +606,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) * for a particular column only once which means that * there is no need todo a double precision addition */ - W2[ix + ix] = MULT(a->dp[ix], a->dp[ix]); + W2[ix + ix] = ((mp_word)a->dp[ix]) * ((mp_word)a->dp[ix]); { register mp_digit tmpx, *tmpy; @@ -615,7 +624,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* inner products */ for (iy = ix + 1; iy < pa; iy++) { - *_W++ += MULT(tmpx, *tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } } @@ -805,19 +814,88 @@ mp_add (mp_int * a, mp_int * b, mp_int * c) int mp_add_d (mp_int * a, mp_digit b, mp_int * c) { - mp_int t; - int res; + int res, ix, oldused; + mp_digit *tmpa, *tmpc, mu; - if ((res = mp_init_size(&t, 1)) != MP_OKAY) { - return res; + /* grow c as required */ + if (c->alloc < a->used + 1) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } } - mp_set (&t, b); - res = mp_add (a, &t, c); - mp_clear (&t); - return res; + /* if a is negative and |a| >= b, call c = |a| - b */ + if (a->sign == MP_NEG && (a->used > 1 || a->dp[0] >= b)) { + /* temporarily fix sign of a */ + a->sign = MP_ZPOS; + + /* c = |a| - b */ + res = mp_sub_d(a, b, c); + + /* fix sign */ + a->sign = c->sign = MP_NEG; + + return res; + } + + + /* old number of used digits in c */ + oldused = c->used; + + /* sign always positive */ + c->sign = MP_ZPOS; + + /* source alias */ + tmpa = a->dp; + + /* destination alias */ + tmpc = c->dp; + + /* if a is positive */ + if (a->sign == MP_ZPOS) { + /* setup size */ + c->used = a->used + 1; + + /* add digit, after this we're propagating + * the carry. + */ + *tmpc = *tmpa++ + b; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + + /* now handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ + mu; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + } + /* set final carry */ + ix++; + *tmpc++ = mu; + + } else { + /* a was negative and |a| < b */ + c->used = 1; + + /* the result is a single digit */ + *tmpc++ = b - a->dp[0]; + + /* setup count so the clearing of oldused + * can fall through correctly + */ + ix = 1; + } + + /* now zero to oldused */ + while (ix++ < oldused) { + *tmpc++ = 0; + } + mp_clamp(c); + + return MP_OKAY; } + /* End: bn_mp_add_d.c */ /* Start: bn_mp_addmod.c */ @@ -958,7 +1036,7 @@ mp_clamp (mp_int * a) * integer arithmetic as well as number theoretic functionality. * * The library is designed directly after the MPI library by - * Michael Fromberger but has been written from scratch with + * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express @@ -973,15 +1051,14 @@ void mp_clear (mp_int * a) { if (a->dp != NULL) { - /* first zero the digits */ memset (a->dp, 0, sizeof (mp_digit) * a->used); /* free ram */ - free (a->dp); + XFREE (a->dp); /* reset members to make debugging easier */ - a->dp = NULL; + a->dp = NULL; a->alloc = a->used = 0; } } @@ -1725,6 +1802,19 @@ mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) */ #include +static int s_is_power_of_two(mp_digit b, int *p) +{ + int x; + + for (x = 1; x < DIGIT_BIT; x++) { + if (b == (((mp_digit)1)<dp[0] & ((1<used)) != MP_OKAY) { return res; } @@ -1877,7 +1992,7 @@ top: /* compute (x mod B**m) + mp * [x/B**m] inline and inplace */ for (i = 0; i < m; i++) { - r = MULT(*tmpx2++, k) + *tmpx1 + mu; + r = ((mp_word)*tmpx2++) * ((mp_word)k) + *tmpx1 + mu; *tmpx1++ = (mp_digit)(r & MP_MASK); mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); } @@ -2476,24 +2591,24 @@ int mp_fwrite(mp_int *a, int radix, FILE *stream) return MP_VAL; } - buf = malloc(len); + buf = XMALLOC(len); if (buf == NULL) { return MP_MEM; } if ((err = mp_toradix(a, buf, radix)) != MP_OKAY) { - free(buf); + XFREE(buf); return err; } for (x = 0; x < len; x++) { if (fputc(buf[x], stream) == EOF) { - free(buf); + XFREE(buf); return MP_VAL; } } - free(buf); + XFREE(buf); return MP_OKAY; } @@ -2532,7 +2647,7 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) return mp_copy (a, c); } if (mp_iszero (a) == 1 && mp_iszero (b) == 1) { - mp_set (c, 1); + mp_zero(c); return MP_OKAY; } @@ -2631,7 +2746,7 @@ mp_grow (mp_int * a, int size) /* ensure there are always at least MP_PREC digits extra on top */ size += (MP_PREC * 2) - (size & (MP_PREC - 1)); - a->dp = OPT_CAST realloc (a->dp, sizeof (mp_digit) * size); + a->dp = OPT_CAST XREALLOC (a->dp, sizeof (mp_digit) * size); if (a->dp == NULL) { return MP_MEM; } @@ -3666,7 +3781,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) for (ix = 0; ix < n->used; ix++) { /* mu = ai * m' mod b */ - mu = MULT(x->dp[ix], rho) & MP_MASK; + mu = ((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK; /* a = a + mu * m * b**i */ { @@ -3683,7 +3798,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Multiply and add in place */ for (iy = 0; iy < n->used; iy++) { - r = MULT(mu, *tmpn++) + + r = ((mp_word)mu) * ((mp_word)*tmpn++) + ((mp_word) u) + ((mp_word) * tmpx); u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); @@ -4039,7 +4154,7 @@ mp_mul_d (mp_int * a, mp_digit b, mp_int * c) u = 0; for (ix = 0; ix < pa; ix++) { /* compute product and carry sum for this term */ - r = ((mp_word) u) + MULT(*tmpa++, b); + r = ((mp_word) u) + ((mp_word)*tmpa++) * ((mp_word)b); /* mask off higher bits to get a single digit */ *tmpc++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -4415,6 +4530,11 @@ mp_prime_fermat (mp_int * a, mp_int * b, int *result) /* default to fail */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* init t */ if ((err = mp_init (&t)) != MP_OKAY) { return err; @@ -4506,7 +4626,7 @@ mp_prime_is_divisible (mp_int * a, int *result) /* performs a variable number of rounds of Miller-Rabin * * Probability of error after t rounds is no more than - * (1/4)^t when 1 <= t <= 256 + * (1/4)^t when 1 <= t <= PRIME_SIZE * * Sets result to 1 if probably prime, 0 otherwise */ @@ -4520,7 +4640,7 @@ mp_prime_is_prime (mp_int * a, int t, int *result) *result = 0; /* valid value of t? */ - if (t < 1 || t > PRIME_SIZE) { + if (t <= 0 || t > PRIME_SIZE) { return MP_VAL; } @@ -4536,6 +4656,8 @@ mp_prime_is_prime (mp_int * a, int t, int *result) if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { return err; } + + /* return if it was trivially divisible */ if (res == 1) { return MP_OKAY; } @@ -4599,6 +4721,11 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) /* default */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* get n1 = a - 1 */ if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { return err; @@ -4611,8 +4738,13 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { goto __N1; } - + + /* count the number of least significant bits + * which are zero + */ s = mp_cnt_lsb(&r); + + /* now divide n - 1 by 2**s */ if ((err = mp_div_2d (&r, s, &r, NULL)) != MP_OKAY) { goto __R; } @@ -4677,40 +4809,152 @@ __N1:mp_clear (&n1); /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ -int mp_prime_next_prime(mp_int *a, int t) +int mp_prime_next_prime(mp_int *a, int t, int bbs_style) { - int err, res; + int err, res, x, y; + mp_digit res_tab[PRIME_SIZE], step, kstep; + mp_int b; - if (mp_iseven(a) == 1) { - /* force odd */ - if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { - return err; + /* ensure t is valid */ + if (t <= 0 || t > PRIME_SIZE) { + return MP_VAL; + } + + /* force positive */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + } + + /* simple algo if a is less than the largest prime in the table */ + if (mp_cmp_d(a, __prime_tab[PRIME_SIZE-1]) == MP_LT) { + /* find which prime it is bigger than */ + for (x = PRIME_SIZE - 2; x >= 0; x--) { + if (mp_cmp_d(a, __prime_tab[x]) != MP_LT) { + if (bbs_style == 1) { + /* ok we found a prime smaller or + * equal [so the next is larger] + * + * however, the prime must be + * congruent to 3 mod 4 + */ + if ((__prime_tab[x + 1] & 3) != 3) { + /* scan upwards for a prime congruent to 3 mod 4 */ + for (y = x + 1; y < PRIME_SIZE; y++) { + if ((__prime_tab[y] & 3) == 3) { + mp_set(a, __prime_tab[y]); + return MP_OKAY; + } + } + } + } else { + mp_set(a, __prime_tab[x + 1]); + return MP_OKAY; + } + } + } + /* at this point a maybe 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + mp_set(a, 2); + return MP_OKAY; + } + /* fall through to the sieve */ + } + + /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ + if (bbs_style == 1) { + kstep = 4; + } else { + kstep = 2; + } + + /* at this point we will use a combination of a sieve and Miller-Rabin */ + + if (bbs_style == 1) { + /* if a mod 4 != 3 subtract the correct value to make it so */ + if ((a->dp[0] & 3) != 3) { + if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { return err; }; } } else { - /* force to next odd number */ - if ((err = mp_add_d(a, 2, a)) != MP_OKAY) { + if (mp_iseven(a) == 1) { + /* force odd */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + return err; + } + } + } + + /* generate the restable */ + for (x = 1; x < PRIME_SIZE; x++) { + if ((err = mp_mod_d(a, __prime_tab[x], res_tab + x)) != MP_OKAY) { return err; } } + /* init temp used for Miller-Rabin Testing */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + for (;;) { + /* skip to the next non-trivially divisible candidate */ + step = 0; + do { + /* y == 1 if any residue was zero [e.g. cannot be prime] */ + y = 0; + + /* increase step to next candidate */ + step += kstep; + + /* compute the new residue without using division */ + for (x = 1; x < PRIME_SIZE; x++) { + /* add the step to each residue */ + res_tab[x] += kstep; + + /* subtract the modulus [instead of using division] */ + if (res_tab[x] >= __prime_tab[x]) { + res_tab[x] -= __prime_tab[x]; + } + + /* set flag if zero */ + if (res_tab[x] == 0) { + y = 1; + } + } + } while (y == 1 && step < ((((mp_digit)1)<= ((((mp_digit)1)<dp[0] |= *b++; a->used += 1; - } else { +#else a->dp[0] = (*b & MP_MASK); a->dp[1] |= ((*b++ >> 7U) & 1); a->used += 2; - } +#endif } mp_clamp (a); return MP_OKAY; @@ -5441,7 +5685,7 @@ int mp_shrink (mp_int * a) { if (a->alloc != a->used) { - if ((a->dp = OPT_CAST realloc (a->dp, sizeof (mp_digit) * a->used)) == NULL) { + if ((a->dp = OPT_CAST XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) { return MP_MEM; } a->alloc = a->used; @@ -5638,20 +5882,65 @@ mp_sub (mp_int * a, mp_int * b, mp_int * c) int mp_sub_d (mp_int * a, mp_digit b, mp_int * c) { - mp_int t; - int res; + mp_digit *tmpa, *tmpc, mu; + int res, ix, oldused; - - if ((res = mp_init (&t)) != MP_OKAY) { - return res; + /* grow c as required */ + if (c->alloc < a->used + 1) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } } - mp_set (&t, b); - res = mp_sub (a, &t, c); - mp_clear (&t); - return res; + /* if a is negative just do an unsigned + * addition [with fudged signs] + */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + res = mp_add_d(a, b, c); + a->sign = c->sign = MP_NEG; + return res; + } + + /* setup regs */ + oldused = c->used; + tmpa = a->dp; + tmpc = c->dp; + + /* if a <= b simply fix the single digit */ + if ((a->used == 1 && a->dp[0] <= b) || a->used == 0) { + *tmpc++ = b - *tmpa; + ix = 1; + + /* negative/1digit */ + c->sign = MP_NEG; + c->used = 1; + } else { + /* positive/size */ + c->sign = MP_ZPOS; + c->used = a->used; + + /* subtract first digit */ + *tmpc = *tmpa++ - b; + mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); + *tmpc++ &= MP_MASK; + + /* handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ - mu; + mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); + *tmpc++ &= MP_MASK; + } + } + + for (; ix < oldused; ix++) { + *tmpc++ = 0; + } + mp_clamp(c); + return MP_OKAY; } + /* End: bn_mp_sub_d.c */ /* Start: bn_mp_submod.c */ @@ -5756,11 +6045,11 @@ mp_to_unsigned_bin (mp_int * a, unsigned char *b) x = 0; while (mp_iszero (&t) == 0) { - if (DIGIT_BIT != 7) { +#ifndef MP_8BIT b[x++] = (unsigned char) (t.dp[0] & 255); - } else { +#else b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); - } +#endif if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { mp_clear (&t); return res; @@ -6452,216 +6741,6 @@ mp_zero (mp_int * a) /* End: bn_mp_zero.c */ -/* Start: bn_mult.c */ -/* LibTomMath, multiple-precision integer library -- Tom St Denis - * - * LibTomMath is library that provides for multiple-precision - * integer arithmetic as well as number theoretic functionality. - * - * The library is designed directly after the MPI library by - * Michael Fromberger but has been written from scratch with - * additional optimizations in place. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org - */ - #include - -/* this file provides a nxn=>2n multiplier based on the - * fact that xy = ((x-y)^2 - (x+y)^2)/4 - * so by having a square table for 0..2^(n+1) - * we can compute (x+y)^2 via table lookup, etc.. - */ - -#ifdef SLOW_MULT - -/* table of x^2 for -510..510 */ -#if defined(MP_8BIT) || defined(MP_16BIT) -static const unsigned long sqr[] = { -65025, 64770, 64516, 64262, 64009, 63756, 63504, 63252, 63001, 62750, 62500, 62250, -62001, 61752, 61504, 61256, 61009, 60762, 60516, 60270, 60025, 59780, 59536, 59292, -59049, 58806, 58564, 58322, 58081, 57840, 57600, 57360, 57121, 56882, 56644, 56406, -56169, 55932, 55696, 55460, 55225, 54990, 54756, 54522, 54289, 54056, 53824, 53592, -53361, 53130, 52900, 52670, 52441, 52212, 51984, 51756, 51529, 51302, 51076, 50850, -50625, 50400, 50176, 49952, 49729, 49506, 49284, 49062, 48841, 48620, 48400, 48180, -47961, 47742, 47524, 47306, 47089, 46872, 46656, 46440, 46225, 46010, 45796, 45582, -45369, 45156, 44944, 44732, 44521, 44310, 44100, 43890, 43681, 43472, 43264, 43056, -42849, 42642, 42436, 42230, 42025, 41820, 41616, 41412, 41209, 41006, 40804, 40602, -40401, 40200, 40000, 39800, 39601, 39402, 39204, 39006, 38809, 38612, 38416, 38220, -38025, 37830, 37636, 37442, 37249, 37056, 36864, 36672, 36481, 36290, 36100, 35910, -35721, 35532, 35344, 35156, 34969, 34782, 34596, 34410, 34225, 34040, 33856, 33672, -33489, 33306, 33124, 32942, 32761, 32580, 32400, 32220, 32041, 31862, 31684, 31506, -31329, 31152, 30976, 30800, 30625, 30450, 30276, 30102, 29929, 29756, 29584, 29412, -29241, 29070, 28900, 28730, 28561, 28392, 28224, 28056, 27889, 27722, 27556, 27390, -27225, 27060, 26896, 26732, 26569, 26406, 26244, 26082, 25921, 25760, 25600, 25440, -25281, 25122, 24964, 24806, 24649, 24492, 24336, 24180, 24025, 23870, 23716, 23562, -23409, 23256, 23104, 22952, 22801, 22650, 22500, 22350, 22201, 22052, 21904, 21756, -21609, 21462, 21316, 21170, 21025, 20880, 20736, 20592, 20449, 20306, 20164, 20022, -19881, 19740, 19600, 19460, 19321, 19182, 19044, 18906, 18769, 18632, 18496, 18360, -18225, 18090, 17956, 17822, 17689, 17556, 17424, 17292, 17161, 17030, 16900, 16770, -16641, 16512, 16384, 16256, 16129, 16002, 15876, 15750, 15625, 15500, 15376, 15252, -15129, 15006, 14884, 14762, 14641, 14520, 14400, 14280, 14161, 14042, 13924, 13806, -13689, 13572, 13456, 13340, 13225, 13110, 12996, 12882, 12769, 12656, 12544, 12432, -12321, 12210, 12100, 11990, 11881, 11772, 11664, 11556, 11449, 11342, 11236, 11130, -11025, 10920, 10816, 10712, 10609, 10506, 10404, 10302, 10201, 10100, 10000, 9900, - 9801, 9702, 9604, 9506, 9409, 9312, 9216, 9120, 9025, 8930, 8836, 8742, - 8649, 8556, 8464, 8372, 8281, 8190, 8100, 8010, 7921, 7832, 7744, 7656, - 7569, 7482, 7396, 7310, 7225, 7140, 7056, 6972, 6889, 6806, 6724, 6642, - 6561, 6480, 6400, 6320, 6241, 6162, 6084, 6006, 5929, 5852, 5776, 5700, - 5625, 5550, 5476, 5402, 5329, 5256, 5184, 5112, 5041, 4970, 4900, 4830, - 4761, 4692, 4624, 4556, 4489, 4422, 4356, 4290, 4225, 4160, 4096, 4032, - 3969, 3906, 3844, 3782, 3721, 3660, 3600, 3540, 3481, 3422, 3364, 3306, - 3249, 3192, 3136, 3080, 3025, 2970, 2916, 2862, 2809, 2756, 2704, 2652, - 2601, 2550, 2500, 2450, 2401, 2352, 2304, 2256, 2209, 2162, 2116, 2070, - 2025, 1980, 1936, 1892, 1849, 1806, 1764, 1722, 1681, 1640, 1600, 1560, - 1521, 1482, 1444, 1406, 1369, 1332, 1296, 1260, 1225, 1190, 1156, 1122, - 1089, 1056, 1024, 992, 961, 930, 900, 870, 841, 812, 784, 756, - 729, 702, 676, 650, 625, 600, 576, 552, 529, 506, 484, 462, - 441, 420, 400, 380, 361, 342, 324, 306, 289, 272, 256, 240, - 225, 210, 196, 182, 169, 156, 144, 132, 121, 110, 100, 90, - 81, 72, 64, 56, 49, 42, 36, 30, 25, 20, 16, 12, - 9, 6, 4, 2, 1, 0, 0, 0, 1, 2, 4, 6, - 9, 12, 16, 20, 25, 30, 36, 42, 49, 56, 64, 72, - 81, 90, 100, 110, 121, 132, 144, 156, 169, 182, 196, 210, - 225, 240, 256, 272, 289, 306, 324, 342, 361, 380, 400, 420, - 441, 462, 484, 506, 529, 552, 576, 600, 625, 650, 676, 702, - 729, 756, 784, 812, 841, 870, 900, 930, 961, 992, 1024, 1056, - 1089, 1122, 1156, 1190, 1225, 1260, 1296, 1332, 1369, 1406, 1444, 1482, - 1521, 1560, 1600, 1640, 1681, 1722, 1764, 1806, 1849, 1892, 1936, 1980, - 2025, 2070, 2116, 2162, 2209, 2256, 2304, 2352, 2401, 2450, 2500, 2550, - 2601, 2652, 2704, 2756, 2809, 2862, 2916, 2970, 3025, 3080, 3136, 3192, - 3249, 3306, 3364, 3422, 3481, 3540, 3600, 3660, 3721, 3782, 3844, 3906, - 3969, 4032, 4096, 4160, 4225, 4290, 4356, 4422, 4489, 4556, 4624, 4692, - 4761, 4830, 4900, 4970, 5041, 5112, 5184, 5256, 5329, 5402, 5476, 5550, - 5625, 5700, 5776, 5852, 5929, 6006, 6084, 6162, 6241, 6320, 6400, 6480, - 6561, 6642, 6724, 6806, 6889, 6972, 7056, 7140, 7225, 7310, 7396, 7482, - 7569, 7656, 7744, 7832, 7921, 8010, 8100, 8190, 8281, 8372, 8464, 8556, - 8649, 8742, 8836, 8930, 9025, 9120, 9216, 9312, 9409, 9506, 9604, 9702, - 9801, 9900, 10000, 10100, 10201, 10302, 10404, 10506, 10609, 10712, 10816, 10920, -11025, 11130, 11236, 11342, 11449, 11556, 11664, 11772, 11881, 11990, 12100, 12210, -12321, 12432, 12544, 12656, 12769, 12882, 12996, 13110, 13225, 13340, 13456, 13572, -13689, 13806, 13924, 14042, 14161, 14280, 14400, 14520, 14641, 14762, 14884, 15006, -15129, 15252, 15376, 15500, 15625, 15750, 15876, 16002, 16129, 16256, 16384, 16512, -16641, 16770, 16900, 17030, 17161, 17292, 17424, 17556, 17689, 17822, 17956, 18090, -18225, 18360, 18496, 18632, 18769, 18906, 19044, 19182, 19321, 19460, 19600, 19740, -19881, 20022, 20164, 20306, 20449, 20592, 20736, 20880, 21025, 21170, 21316, 21462, -21609, 21756, 21904, 22052, 22201, 22350, 22500, 22650, 22801, 22952, 23104, 23256, -23409, 23562, 23716, 23870, 24025, 24180, 24336, 24492, 24649, 24806, 24964, 25122, -25281, 25440, 25600, 25760, 25921, 26082, 26244, 26406, 26569, 26732, 26896, 27060, -27225, 27390, 27556, 27722, 27889, 28056, 28224, 28392, 28561, 28730, 28900, 29070, -29241, 29412, 29584, 29756, 29929, 30102, 30276, 30450, 30625, 30800, 30976, 31152, -31329, 31506, 31684, 31862, 32041, 32220, 32400, 32580, 32761, 32942, 33124, 33306, -33489, 33672, 33856, 34040, 34225, 34410, 34596, 34782, 34969, 35156, 35344, 35532, -35721, 35910, 36100, 36290, 36481, 36672, 36864, 37056, 37249, 37442, 37636, 37830, -38025, 38220, 38416, 38612, 38809, 39006, 39204, 39402, 39601, 39800, 40000, 40200, -40401, 40602, 40804, 41006, 41209, 41412, 41616, 41820, 42025, 42230, 42436, 42642, -42849, 43056, 43264, 43472, 43681, 43890, 44100, 44310, 44521, 44732, 44944, 45156, -45369, 45582, 45796, 46010, 46225, 46440, 46656, 46872, 47089, 47306, 47524, 47742, -47961, 48180, 48400, 48620, 48841, 49062, 49284, 49506, 49729, 49952, 50176, 50400, -50625, 50850, 51076, 51302, 51529, 51756, 51984, 52212, 52441, 52670, 52900, 53130, -53361, 53592, 53824, 54056, 54289, 54522, 54756, 54990, 55225, 55460, 55696, 55932, -56169, 56406, 56644, 56882, 57121, 57360, 57600, 57840, 58081, 58322, 58564, 58806, -59049, 59292, 59536, 59780, 60025, 60270, 60516, 60762, 61009, 61256, 61504, 61752, -62001, 62250, 62500, 62750, 63001, 63252, 63504, 63756, 64009, 64262, 64516, 64770, -65025}; -#endif - -#if defined(MP_8BIT) -/* - 4 add/sub - 2 table lookups - - - 6 operations - - versus - - 8 shifts - 8 ands - 8 jump/zero - 8 adds - -- - 32 operations -*/ -mp_word s_mp_mult(mp_digit a, mp_digit b) -{ - int A, B; - /* since mp_digit < 9-bits a+b may truncate... */ - A = a; B = b; - A += 510; - return (mp_word)(sqr[A+B] - sqr[A-B]); -} -#elif defined(MP_16BIT) -/* - 17 add/sub - 4 shifts - 8 table lookups - 2 ands - -- - 31 operations - - A double/multiply would require - - 16 shifts - 16 ands - 16 jump/zero - 16 adds - -- - 64 operations - */ -mp_word s_mp_mult(mp_digit a, mp_digit b) -{ - mp_digit a1, a2, b1, b2; - a1 = a&255; a2 = a>>8; - b1 = (b&255)+510; b2 = (b>>8)+510; - return (mp_word)( - (sqr[b1+a1] - sqr[b1-a1]) + - ((sqr[b1+a2] + sqr[b2+a1] - (sqr[b1-a2] + sqr[b2-a1]))<<8) + - ((sqr[b2+a2] - sqr[b2-a2])<<16)); -} -#elif defined(MP_28BIT) -/* use a 2-ary sliding window - - 29 shifts - 14 additions - 13 ands - 18 table lookups - -- - 74 operations - - versus 4*28 == 112 via the other method -*/ -mp_word s_mp_mult(mp_digit a, mp_digit b) -{ - mp_digit wnd[4]; - mp_word res; - - /* make window */ - wnd[0] = 0; - wnd[1] = a; - wnd[2] = a<<1; - wnd[3] = (a<<1) + a; - - /* go over the 28 bits of b */ -#define RND(i) res = (res << 2) + ((mp_word)wnd[(b>>(2*i))&3]); - res = wnd[b>>26]; - RND(12); RND(11); RND(10); RND( 9); - RND( 8); RND( 7); RND( 6); RND( 5); - RND( 4); RND( 3); RND( 2); RND( 1); RND(0); - return res; -} -#else -mp_word s_mp_mult(mp_digit a, mp_digit b) -{ - return ((mp_word)a)*((mp_word)b); -} -#endif - -#endif /* SLOW_MULT */ - -/* End: bn_mult.c */ - /* Start: bn_prime_tab.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -7164,7 +7243,7 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = 0; iy < pb; iy++) { /* compute the column as a mp_word */ r = ((mp_word) *tmpt) + - MULT(tmpx, *tmpy++) + + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* the new column is the lower part of the result */ @@ -7246,7 +7325,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = digs - ix; iy < pb; iy++) { /* calculate the double precision result */ - r = ((mp_word) * tmpt) + MULT(tmpx, *tmpy++) + ((mp_word) u); + r = ((mp_word) * tmpt) + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* get the lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -7299,8 +7378,8 @@ s_mp_sqr (mp_int * a, mp_int * b) for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ - r = ((mp_word) t.dp[2*ix]) + - MULT(a->dp[ix], a->dp[ix]); + r = ((mp_word) t.dp[2*ix]) + + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); /* store lower part in result */ t.dp[2*ix] = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -7316,12 +7395,12 @@ s_mp_sqr (mp_int * a, mp_int * b) for (iy = ix + 1; iy < pa; iy++) { /* first calculate the product */ - r = MULT(tmpx, a->dp[iy]); + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); /* now calculate the double precision result, note we use * addition instead of *2 since it's easier to optimize */ - r = ((mp_word) * tmpt) + r + r + ((mp_word) u); + r = ((mp_word) *tmpt) + r + r + ((mp_word) u); /* store lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); diff --git a/mycrypt.h b/mycrypt.h index d99cb17..8f837bb 100644 --- a/mycrypt.h +++ b/mycrypt.h @@ -16,8 +16,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0088 -#define SCRYPT "0.88" +#define CRYPT 0x0089 +#define SCRYPT "0.89" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 diff --git a/mycrypt_macros.h b/mycrypt_macros.h index ba8a9e8..f45ebd1 100644 --- a/mycrypt_macros.h +++ b/mycrypt_macros.h @@ -12,8 +12,6 @@ */ typedef unsigned long ulong32; -extern char *crypt_error; - /* ---- HELPER MACROS ---- */ #ifdef ENDIAN_NEUTRAL @@ -190,13 +188,15 @@ extern char *crypt_error; #ifdef _MSC_VER -# include -# pragma intrinsic(_lrotr,_lrotl) -# define ROR(x,n) _lrotr(x,n) -# define ROL(x,n) _lrotl(x,n) +/* instrinsic rotate */ +#include +#pragma intrinsic(_lrotr,_lrotl) +#define ROR(x,n) _lrotr(x,n) +#define ROL(x,n) _lrotl(x,n) #else +/* rotates the hard way */ #define ROL(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) #define ROR(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) @@ -216,7 +216,7 @@ extern char *crypt_error; #define MIN(x, y) ( ((x)<(y))?(x):(y) ) /* extract a byte portably */ -#if (CHAR_BIT == 8) +#ifdef _MSC_VER #define byte(x, n) ((unsigned char)((x) >> (8 * (n)))) #else #define byte(x, n) (((x) >> (8 * (n))) & 255) diff --git a/prime.c b/prime.c index 20571d6..f7bf0de 100644 --- a/prime.c +++ b/prime.c @@ -12,94 +12,6 @@ int is_prime(mp_int *N, int *result) return CRYPT_MEM; } return CRYPT_OK; -} - -static int next_prime(mp_int *N, mp_digit step) -{ - long x, s, j, total_dist; - int res; - mp_int n1, a, y, r; - mp_digit dist, residues[UPPER_LIMIT]; - - _ARGCHK(N != NULL); - - /* first find the residues */ - for (x = 0; x < (long)UPPER_LIMIT; x++) { - if (mp_mod_d(N, __prime_tab[x], &residues[x]) != MP_OKAY) { - return CRYPT_MEM; - } - } - - /* init variables */ - if (mp_init_multi(&r, &n1, &a, &y, NULL) != MP_OKAY) { - return CRYPT_MEM; - } - - total_dist = 0; -loop: - /* while one of the residues is zero keep looping */ - dist = step; - for (x = 0; (dist < (MP_DIGIT_MAX-step-1)) && (x < (long)UPPER_LIMIT); x++) { - j = (long)residues[x] + (long)dist + total_dist; - if (j % (long)__prime_tab[x] == 0) { - dist += step; x = -1; - } - } - - /* recalc the total distance from where we started */ - total_dist += dist; - - /* add to N */ - if (mp_add_d(N, dist, N) != MP_OKAY) { goto error; } - - /* n1 = N - 1 */ - if (mp_sub_d(N, 1, &n1) != MP_OKAY) { goto error; } - - /* r = N - 1 */ - if (mp_copy(&n1, &r) != MP_OKAY) { goto error; } - - /* find s such that N-1 = (2^s)r */ - s = 0; - while (mp_iseven(&r)) { - ++s; - if (mp_div_2(&r, &r) != MP_OKAY) { - goto error; - } - } - for (x = 0; x < 8; x++) { - /* choose a */ - mp_set(&a, __prime_tab[x]); - - /* compute y = a^r mod n */ - if (mp_exptmod(&a, &r, N, &y) != MP_OKAY) { goto error; } - - /* (y != 1) AND (y != N-1) */ - if ((mp_cmp_d(&y, 1) != 0) && (mp_cmp(&y, &n1) != 0)) { - /* while j <= s-1 and y != n-1 */ - for (j = 1; (j <= (s-1)) && (mp_cmp(&y, &n1) != 0); j++) { - /* y = y^2 mod N */ - if (mp_sqrmod(&y, N, &y) != MP_OKAY) { goto error; } - - /* if y == 1 return false */ - if (mp_cmp_d(&y, 1) == 0) { goto loop; } - } - - /* if y != n-1 return false */ - if (mp_cmp(&y, &n1) != 0) { goto loop; } - } - } - - res = CRYPT_OK; - goto done; -error: - res = CRYPT_MEM; -done: - mp_clear_multi(&a, &y, &n1, &r, NULL); - -#ifdef CLEAN_STACK - zeromem(residues, sizeof(residues)); -#endif - return res; } int rand_prime(mp_int *N, long len, prng_state *prng, int wprng) @@ -111,11 +23,11 @@ int rand_prime(mp_int *N, long len, prng_state *prng, int wprng) /* pass a negative size if you want a prime congruent to 3 mod 4 */ if (len < 0) { - step = 4; + step = 1; ormask = 3; len = -len; } else { - step = 2; + step = 0; ormask = 1; } @@ -150,9 +62,9 @@ int rand_prime(mp_int *N, long len, prng_state *prng, int wprng) return CRYPT_MEM; } - /* add the step size to it while N is not prime */ - if ((err = next_prime(N, step)) != CRYPT_OK) { - return err; + /* Find the next prime after N */ + if (mp_prime_next_prime(N, 8, step) != MP_OKAY) { + return CRYPT_MEM; } #ifdef CLEAN_STACK diff --git a/sha1.c b/sha1.c index 2489f34..85ea876 100644 --- a/sha1.c +++ b/sha1.c @@ -46,7 +46,6 @@ static void sha1_compress(hash_state *md) W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); } - /* compress */ /* round one */ #define FF0(a,b,c,d,e,i) e = (ROL(a, 5) + F0(b,c,d) + e + W[i] + 0x5a827999UL); b = ROL(b, 30); diff --git a/tommath.h b/tommath.h index 7c3158f..e5e166b 100644 --- a/tommath.h +++ b/tommath.h @@ -91,7 +91,7 @@ extern "C" { /* otherwise the bits per digit is calculated automatically from the size of a mp_digit */ #ifndef DIGIT_BIT - #define DIGIT_BIT ((CHAR_BIT * sizeof(mp_digit) - 1)) /* bits per digit */ + #define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */ #endif @@ -126,16 +126,6 @@ extern int KARATSUBA_MUL_CUTOFF, /* define this to use lower memory usage routines (exptmods mostly) */ /* #define MP_LOW_MEM */ -/* have no cpu based mult? */ -/* #define SLOW_MULT */ - -#ifdef SLOW_MULT - #define MULT(x, y) s_mp_mult((x), (y)) - mp_word s_mp_mult(mp_digit, mp_digit); -#else - #define MULT(x, y) (((mp_word)(x)) * ((mp_word)(y))) -#endif - /* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */ #define MP_WARRAY (1 << (sizeof(mp_word) * CHAR_BIT - 2 * DIGIT_BIT + 1)) @@ -411,9 +401,10 @@ int mp_prime_is_prime(mp_int *a, int t, int *result); /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ -int mp_prime_next_prime(mp_int *a, int t); - +int mp_prime_next_prime(mp_int *a, int t, int bbs_style); /* ---> radix conversion <--- */ int mp_count_bits(mp_int *a); diff --git a/twofish.c b/twofish.c index 2e1e937..6f8156e 100644 --- a/twofish.c +++ b/twofish.c @@ -74,7 +74,7 @@ static const unsigned char SBOX[2][256] = { 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0}, { 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, - 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, 0xd6, 0x32, 0xd8, 0xfd, + 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, 0xa0, 0x84, @@ -111,7 +111,7 @@ static const ulong32 mds_tab[4][256] = { 0x36362228UL, 0xd9d97929UL, 0x8181942aUL, 0x6e6ecf2bUL, 0x3131272cUL, 0xdede7c2dUL, 0x8686912eUL, 0x6969ca2fUL, 0x24243c30UL, 0xcbcb6731UL, 0x93938a32UL, 0x7c7cd133UL, 0x23233934UL, 0xcccc6235UL, 0x94948f36UL, 0x7b7bd437UL, 0x2a2a3638UL, 0xc5c56d39UL, 0x9d9d803aUL, 0x7272db3bUL, 0x2d2d333cUL, 0xc2c2683dUL, 0x9a9a853eUL, 0x7575de3fUL, -0x70705040UL, 0x9f9f0b41UL, 0xc7c7e642UL, 0x2828bd43UL, 0x77775544UL, 0x98980e45UL, 0xc0c0e346UL, 0x2f2fb847UL, +0x70705040UL, 0x9f9f0b41UL, 0xc7c7e642UL, 0x2828bd43UL, 0x77775544UL, 0x98980e45UL, 0xc0c0e346UL, 0x2f2fb847UL, 0x7e7e5a48UL, 0x91910149UL, 0xc9c9ec4aUL, 0x2626b74bUL, 0x79795f4cUL, 0x9696044dUL, 0xcecee94eUL, 0x2121b24fUL, 0x6c6c4450UL, 0x83831f51UL, 0xdbdbf252UL, 0x3434a953UL, 0x6b6b4154UL, 0x84841a55UL, 0xdcdcf756UL, 0x3333ac57UL, 0x62624e58UL, 0x8d8d1559UL, 0xd5d5f85aUL, 0x3a3aa35bUL, 0x65654b5cUL, 0x8a8a105dUL, 0xd2d2fd5eUL, 0x3d3da65fUL, @@ -148,7 +148,7 @@ static const ulong32 mds_tab[4][256] = { 0x40507070UL, 0x410b9f9fUL, 0x42e6c7c7UL, 0x43bd2828UL, 0x44557777UL, 0x450e9898UL, 0x46e3c0c0UL, 0x47b82f2fUL, 0x485a7e7eUL, 0x49019191UL, 0x4aecc9c9UL, 0x4bb72626UL, 0x4c5f7979UL, 0x4d049696UL, 0x4ee9ceceUL, 0x4fb22121UL, 0x50446c6cUL, 0x511f8383UL, 0x52f2dbdbUL, 0x53a93434UL, 0x54416b6bUL, 0x551a8484UL, 0x56f7dcdcUL, 0x57ac3333UL, -0x584e6262UL, 0x59158d8dUL, 0x5af8d5d5UL, 0x5ba33a3aUL, 0x5c4b6565UL, 0x5d108a8aUL, 0x5efdd2d2UL, 0x5fa63d3dUL, +0x584e6262UL, 0x59158d8dUL, 0x5af8d5d5UL, 0x5ba33a3aUL, 0x5c4b6565UL, 0x5d108a8aUL, 0x5efdd2d2UL, 0x5fa63d3dUL, 0x60784848UL, 0x6123a7a7UL, 0x62ceffffUL, 0x63951010UL, 0x647d4f4fUL, 0x6526a0a0UL, 0x66cbf8f8UL, 0x67901717UL, 0x68724646UL, 0x6929a9a9UL, 0x6ac4f1f1UL, 0x6b9f1e1eUL, 0x6c774141UL, 0x6d2caeaeUL, 0x6ec1f6f6UL, 0x6f9a1919UL, 0x706c5454UL, 0x7137bbbbUL, 0x72dae3e3UL, 0x73810c0cUL, 0x74695353UL, 0x7532bcbcUL, 0x76dfe4e4UL, 0x77840b0bUL, @@ -185,7 +185,7 @@ static const ulong32 mds_tab[4][256] = { 0x6258624eUL, 0x8d598d15UL, 0xd55ad5f8UL, 0x3a5b3aa3UL, 0x655c654bUL, 0x8a5d8a10UL, 0xd25ed2fdUL, 0x3d5f3da6UL, 0x48604878UL, 0xa761a723UL, 0xff62ffceUL, 0x10631095UL, 0x4f644f7dUL, 0xa065a026UL, 0xf866f8cbUL, 0x17671790UL, 0x46684672UL, 0xa969a929UL, 0xf16af1c4UL, 0x1e6b1e9fUL, 0x416c4177UL, 0xae6dae2cUL, 0xf66ef6c1UL, 0x196f199aUL, -0x5470546cUL, 0xbb71bb37UL, 0xe372e3daUL, 0x0c730c81UL, 0x53745369UL, 0xbc75bc32UL, 0xe476e4dfUL, 0x0b770b84UL, +0x5470546cUL, 0xbb71bb37UL, 0xe372e3daUL, 0x0c730c81UL, 0x53745369UL, 0xbc75bc32UL, 0xe476e4dfUL, 0x0b770b84UL, 0x5a785a66UL, 0xb579b53dUL, 0xed7aedd0UL, 0x027b028bUL, 0x5d7c5d63UL, 0xb27db238UL, 0xea7eead5UL, 0x057f058eUL, 0xe080e0a0UL, 0x0f810ffbUL, 0x57825716UL, 0xb883b84dUL, 0xe784e7a5UL, 0x088508feUL, 0x50865013UL, 0xbf87bf48UL, 0xee88eeaaUL, 0x018901f1UL, 0x598a591cUL, 0xb68bb647UL, 0xe98ce9afUL, 0x068d06f4UL, 0x5e8e5e19UL, 0xb18fb142UL, @@ -222,7 +222,7 @@ static const ulong32 mds_tab[4][256] = { 0x6c54706cUL, 0x37bb7137UL, 0xdae372daUL, 0x810c7381UL, 0x69537469UL, 0x32bc7532UL, 0xdfe476dfUL, 0x840b7784UL, 0x665a7866UL, 0x3db5793dUL, 0xd0ed7ad0UL, 0x8b027b8bUL, 0x635d7c63UL, 0x38b27d38UL, 0xd5ea7ed5UL, 0x8e057f8eUL, 0xa0e080a0UL, 0xfb0f81fbUL, 0x16578216UL, 0x4db8834dUL, 0xa5e784a5UL, 0xfe0885feUL, 0x13508613UL, 0x48bf8748UL, -0xaaee88aaUL, 0xf10189f1UL, 0x1c598a1cUL, 0x47b68b47UL, 0xafe98cafUL, 0xf4068df4UL, 0x195e8e19UL, 0x42b18f42UL, +0xaaee88aaUL, 0xf10189f1UL, 0x1c598a1cUL, 0x47b68b47UL, 0xafe98cafUL, 0xf4068df4UL, 0x195e8e19UL, 0x42b18f42UL, 0xb4fc90b4UL, 0xef1391efUL, 0x024b9202UL, 0x59a49359UL, 0xb1fb94b1UL, 0xea1495eaUL, 0x074c9607UL, 0x5ca3975cUL, 0xbef298beUL, 0xe51d99e5UL, 0x08459a08UL, 0x53aa9b53UL, 0xbbf59cbbUL, 0xe01a9de0UL, 0x0d429e0dUL, 0x56ad9f56UL, 0x88d8a088UL, 0xd337a1d3UL, 0x3e6fa23eUL, 0x6580a365UL, 0x8ddfa48dUL, 0xd630a5d6UL, 0x3b68a63bUL, 0x6087a760UL, @@ -319,7 +319,7 @@ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) P[1] = p; B[1] = b; P[0] = B[0] = 0; - + /* unrolled branchless GF multiplier */ result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1);