sprng2.0/ 40700 764 764 0 7034410053 11305 5ustar chwangchwangsprng2.0/CHANGES.TEXT100600 764 764 5732 6736173532 13211 0ustar chwangchwang Changes in Version 2.0 ---------------------- Using the previous version of SPRNG, a user can use only one of the SPRNG generators in one run of the program. The objective of the new version is to combine the current random number generators (RNGs) into a single library so that a user can use all of them in a single program at a same time. The user now is able to and needs to specify the type of RNG when a random number stream is initialized. We add one integer argument rng_type to the front of the argument list of the function init_sprng. int *init_sprng(int rng_type, int stream_number, int nstreams, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer streamnum, integer nstreams, integer seed, integer param) User can sprcify one of the follows for rng_type: SPRNG_LFG SPRNG_LCG SPRNG_LCG64 SPRNG_CMRG SPRNG_MLFG SPRNG_PMLCG The following macros are added to sprng.h and sprng_f.h: #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 For simple interface, a user can only have one random number stream at one time since he doesn't specify stream ID. The default generator is "SPRNG_LFG". User still can change RNG at runtime by calling init_sprng: int *init_sprng(int rng_type, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer seed, integer param) Changes in Version 1.0 ---------------------- Changes to version 0.5 1. Fortran stream_number in calls to init_sprng now starts from 0 instead of from 1. ****** VERY IMPORTANT ****** -------------- 2. A parallel Multiplicative Lagged Fibonacci Generator (mlfg) has been implemented. 3. Default parameter to init_sprng is called SPRNG_DEFAULT instead of DEFAULT. 4. Several functions inlined, to improve speed. 5. Directory 'include' contains the headers, and 'lib' the SPRNG libraries, instead of using 'SRC' and '.' respectively. If you have untarred SPRNG into a location where an old version is present, please remove your old interface.h, sprng.h, and sprng_f.h files in SRC and either make links to those in the 'include' directory, or copy them to SRC. 6. SRC/make.GENERIC helps in installation on new machines. 7. 'pack_sprng' now returns the state of a stream in a machine independent format that can be unpacked with 'unpack_sprng' (except for pmlcg, which still stores numbers in a machine dependent format). It may be incompatible with data stored in the beta version's format. 8. lcg64 and cmrg use larger primes as addends. So the random number sequences will now be different from those in Version 0.5. Changes to Version 1.0 Beta --------------------------- 1. Fixed a memory leak bug in mlfg. sprng2.0/DOCS/ 40700 764 764 0 6736173533 12056 5ustar chwangchwangsprng2.0/DOCS/README100700 764 764 4371 6736173532 13042 0ustar chwangchwang--------------------------------------------------------------------------- Single Library Version of SPRNG --------------------------------------------------------------------------- SPRNG provides both FORTRAN and C (also C++) interfaces for the use of the parallel random number generators. The new version has all the generators in one library. A complete new documentation is not available yet. Please consult the old documentations and the interface changes listed below. Old doc: Old documentation is available at the following URL: http://www.ncsa.uiuc.edu/Apps/CMP/RNG/RNG-home.html sprng.html.tar too contains similar documentation. Please execute: zcat tar xvf sprng.html.tar.Z | tar xvof - and read the file toc.html in the www directory with your web browser. SPRNG interface changes: Using the previous version of SPRNG, a user can use only one of the SPRNG generators in one run of the program. The objective of the new version is to combine the current random number generators (RNGs) into a single library so that a user can use all of them in a single program at a same time. The user now is able to and needs to specify the type of RNG when a random number stream is initialized. We add one integer argument rng_type to the front of the argument list of the function init_sprng. int *init_sprng(int rng_type, int stream_number, int nstreams, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer streamnum, integer nstreams, integer seed, integer param) User can sprcify one of the follows for rng_type: SPRNG_LFG SPRNG_LCG SPRNG_LCG64 SPRNG_CMRG SPRNG_MLFG SPRNG_PMLCG The following macros are added to sprng.h and sprng_f.h: #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 For simple interface, a user can only have one random number stream at one time since he doesn't specify stream ID. The default generator is "SPRNG_LFG". User still can change RNG at runtime by calling init_sprng: int *init_sprng(int rng_type, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer seed, integer param) sprng2.0/DOCS/sprng.html.tar.Z100600 764 764 4255743 6736173533 15275 0ustar chwangchwangw@*\ȰÇaH!4h1â7n(I `بQc㌍2b"5 ɳOu #"0sмY3'0H*<ҨIRjʵπw^@a 4tڰʶmI/ftIH&e԰Qe2lĘF4f̸ -*R\6JUȠCnZ>L CGi:i))P890lˆ  QS7-q 'uڈ)#đ2n;4bSlٴۣYZ}bސB̙1oQ^"`Ɓpi# 1b)h >X v(:D k biHIDCEHmőEvpęQ<фmF<$uH+ `eonWFuWeQln`$ѠU^I<.ZBcOXVQB*)V#amD٩rw'ǚzZ HFpGojcq[n䩩B!W.@Es:Ff{VNG'ܚxp*d ix~ H ޞe1-if:Go+U0j !EFH1Yi13qG EDN9֥'*20KLšںiYFq"P0NXQ A'ɡ2HL LPKErO\ ͱZ#PpEyL [[u*hKsi;ֳ@ך '&!Dxic͡'8 wГquq"C Gn1(Q.>0:Q٨+:>wDP^g4(CI'NqD- !EY7 nP) dg9u N|<,RH7Jn / ;<-a`BL*'̐\+A&QRUُQSP'5/ ZmEcBl%z hA0[J/#@HL٩S*7phFY#H]Br@00KJV 04I d 0tdb,EY [: f B) N f(%x<Ax|o8</,v%tӞ$v!Xt'=N<SPt3ͤ'00f w:CWA=9w 3|B8T@zA7Y#eMSNPQħk- <*P5]5p΀y! Ap`5#(SD: 4={J JwC^9aZӚr8MvpjW /q]BA/ jTP9euA\ ڄɁ-Cq$x LXk;P ŧTbM, 1xucuS&w <̔:q?|L{8 CQ`5*< 5A 2Wp*6 Bpjz3Uxq<"B'VH(xI0q 3Ooqp]{zi /p,8ԡ_/q*`Hܒe&b?.t,dk'gE d *N&!;‚:`S6*p;3 D 3sd: D 4JNr\.! ~ә>"&7٘^`&6P#N ܄e5 摰j60e0C{ZQA ^I|Ĭ; H1NF^oJFT1 _bCv4~9` _qEя'-pcr0#`q鶛nncup0*[ iդx`ֵ'oRm!s0ۦ>Nu9pl\u){;LS4ޖ<ꎧÐptXE|=u4iEw$xy~S)Ղp2FwuU,xTy B}!6y Gc&(0/p/9P.Ք1TI[ȧT b+(,Xh,&jH[AQP@D݄Vb?|"6؃r'm ϘKmvUv@,k2~&X}P&eyt`webbX"rWqcZh__xg;(d(HLC8} Xi)T Pwxwi|%d}"YYG*k PL&,.Y+Yv'Gy~"[^yU"`i-("&;l7t8xA d^8vUUOyluܡؚOh&L>mmÒ`W5{Vi}bWS &bif +z/ ZpM18dFV "Vv'icw2}/pBPga@fb[`zK#!l1 a3l|1L†4@י;d9l.KV]*6@!.@4 gJ{4p^2TYXZe9 ;ZB<0M†<WgR#,wj.!7*llzY#j868K87 8Ы *j7 37ݤ 8E(/ʬ1+!J5`Z⊮2쪮vw8uV+ vڰ ;/P)!ۋ<ҁ&(n+%˲ZCHVV9 MZ\:-\*Jjlڦ5G꧝zZ="Q1 Tz:\ 0ڨ#p11K[j70Jt۷J20˰1q#jwM|W*Yظz* ʩCzݔkۮ+K˰k [V3Kjۻƻ ':t0ۊ6*. Kkr$ӫ*Yeö JHꥱ[ꫦݔ  .B@pr ~PJ(c g89g28PR8Wuk2'-kZ{hxӖ! |~Y̥{0'OQJV; =sʝ; DNn2ao=, X5`zh^&c) 6vn~䚍~I@%A ~&UZkV{/pfALP=wAa,\k~.%XvBF`G`1^yI|mJqɾ#:ξ@.m"'5RP3 Pk-`(@um@& ؿ`W!`:;NNƦd$~@O;pbZ. P ' V~>1L^̀#]kBDPd.Yo,(L7&.d^ P\D%XRBGig sfBɛT5!dA!yfr7TtM(hDXX=yT<n;M]M`ꨮE UjmRw88-E ={Fq\?~&aq2al,&TLjyFyF\~^^ !?P RjH:/BSX_kuMpMsap_8b9_]d]ybh0cv5p|7-3 %̀{qfa@ &ߒ 0i'yx@gS^!+*F40Q #pYL>Li젙ߋ{D @@_@|=@؀ϜxcpUقn p܂r ؛o5ȠCm0  yu3PqU: w}@2H_|lgA9%i= 'ߥ/NpY!|гHP?קP0ZBm(?QC%?ԁ$:A'th| )z>}tJ2> mi"IHq[94RHJFWmEIVR$D3 y4!4E=,(Ia$(z4>Z&a'x1mFvlhiuH;%D: :Z@A(H\Z=i;MG}>6Xt:,RnJr9MSD6eN||-̩m8yL֋]ܖ]6SLyE4]bjjtZ664w6A&8sE\ɮN 3Khj6 )r SjY02m tԩ:[D-u%O:`T/Ҩ*S}Bh`SP9=U6ib@ե0A:N:A]bj팦T5ΰcTC2.OݪcvV>dnPF:4O tD.'.*[tb'ӂ5VM%ï~1'kLswsa&9ɚ2JMTw9TBJٔ[frVr$,lGBZnćUɢ}]Ci]5-lW1/2U03@YZosCEպSEYd <ndwaF&)ϫeŮT{ӺVS(DŽ0U9$L̈^j3Uf_Efs.W =k5aX3wfazBXf_ބ5-esb<:@TmQ)8Xع9ܙs_nM+ϪŽL @sFGFndj<`ݵv'T@wg沲v4"[I6|8ww.p`%4@` ^rKSW=2'f;o9)Kvfl0%1 T/ *\ޟ3.l`wҫte*|7aa$ ޝ3nս)]{Y( űP0Shܘ;sk͹;wGٮ3va7};vEjY nMK/Y|*L {YԿ- k,#P>~ 1`)KZ\G4w(oH{FR)L++fP9lo%*8` t-%P%{[-[D!̀ N}X_6ޓw#[)0M*4 {-fzaA[p d8`6T@8 a.\6aCМn),^y ?6uf?[yKHy@k]E4=ռp.EfdU\`LZk%'<Mf?Yɼx }2˩|)dmb,рjbL3 7XfUR`JK"Lq3],j'¸*޴D\Av6gIoB:7z_%-O@uQ6iuc1VTTg&ZfŌn{fM:-șEjiAu5[hӫ?S[]30Oe9^nj:j_9GK=)O3jϑRPKcl|iZS#(iAEnz 1$LEz%+rvOk 1c}uf<h,sߦkmgby)C<;-1 Sl{mXaz,V?s6Ю,G.Є pWEnIa+5L}o3EViTA3Ҡ?(yKYD5ұ ƻ$6Si@N .EfHCņי\"68b :x]l*>K*cnKk0>n]rqRqs]Q 7>8Y㾚1NXaWPyE]nД\[nws_+:ICF@Y@:+@^uz+g\XDMF*$)v0D 5\V x >;v~Q(c`PDh$eN k N>x9gDゲ-"ͧF?/AZxU$8a0}Ҥs7`Cܟm5v ̊ef'=tOc4Vtjª;7rDg0{րwp4leGtz;'[ JV-SIOv͚sR8}9<ݟ9 Hp=g7.DzKAz'w+zPo?DUpֺpCnZ>ԧ0kMϻi y9o͞,s/K>/ vq>L;f੝sv2]퓎vi^C_p:ukp.Jëa $ɍ)- N3uB{o; <>3qgkS(N7apnۙﺽw;TO:^ګ{B3{o'}s2w5Ɨ{sfui1'%~ӓ.Џ( \#P\ǝ}2MvZj<!< !Ji#JYު=;Sƚ uP%/s T씸\[+Fq,Z;yNb6kI wI01 ^ r^V_5\b90b?i~9qF27< % D;jFKz|b$'P='<1D.I)bC|жZ2{'C;y~:&@dI>-fRC=; 'gw)O3 籗 {[5 <)`k` $0ڽ}az( J"_z9yca>h5ebdwyS `~p>;(ou; JY3Tyޮ x9(zG/a@TlݴI!S/7*樌 up~  8s$&  X 'V^{yV8ÿw>?oчBtC{5pY^_Tں=UK+?k~voVW+J\ch!?,s=֏ /_CP\Or`#ofƃO-z?S|XLl? ?+Ŀ?wiT 'T pF~~ 2-/ P\(Mtx-"!/~M) @2~ns4b ~D Hހ_A% € AL4j hrKʃJQx~b ~:`&d(lPz j -5݁GCX2؁fJI=  v<}Xg`8!Uj &6~_xm& * zM+x G,HЂ (c ~킆.  `+A)` `"$m|#^C $ ZC&!2ACW'O55Ej 8' AcͼyЂ̔yQ\݃' M Z JŪ- ;(n&!ZGrޭ5Ϸ@u~ӜC79RsDuߘ&9MCZu2ߔpu.NT7VVnuȶ TqZOemZя@-tV_\Ԁ/#qi0c Pwݿ\LM^/`78qR_!rHK׏WC>R,c{Mր0(Q3_0s uW)V*Fr)ڌfJM}-}$]EMbx# "P>Q*T w5mX 砃~/yB*FcVP᥃.OqbL>R*!26e6IGH*١,;!t'[`wVrzX΁Fyh, !.r:7NHa} 8V&hYb| 8A2IvHDhRrdb:!)!Ԉ,(Gʑ"< R!> ~v(!ʐx!f\caОhu{IZw%NaXZ".xyL PP bb{H&N W8o"`P6'q &b*j%(ϡ?   G+)ƈ) &Ш  ;50+BD 3aEA+y`0387aWD/1]KHD"Th% %>Eb *^e&'s'rzϸX(G"(>hQyV."80ˆabh. P + v֢m+NKPj&,j8Whnq,eH ӢV&}Xx݁"u^ 7Qx]%_`SC3Ub- =ݓqaK+]c7U)Po9ۭ@rYkЂ@^V(0BH$)`6WQy(a(gZ0. BFs4 "@5\k š 4 F6eb]S:&OdְCyq0kH:VtX::cĎ8#;ꎵ#;Ύ#;8<*#<ގc<ԣ(<ӣ< OΝ2uǴ0ƒv0spTy`L c(`jW'A@#x0VD>Dda&td¤cHGZpL:L܅@dz1 WP:hvs#td}KD5L HsVC= /0]18ѤH Yۤ&h N0(0kDtݤBOY7D0ؤSL:VsL:T2EՍz0p@aɆs#y1&9W@n ·AP)|qs vT7QxύF L:LGJ3鈏i#M:؉cSM:vM04/9(TzsG4*Iؑn G"|L=#6AZ0W9 \LqH,k1k8; 낀@V$/@B;gz䶐qdFC?FeD B@5s]SH~$AMb3)N 䤃=`\M> N:'ANs"Q>@Gr8:ړ $qP;W`< Q sK $`zjdP:TRl[A^p@ ك/tdaiBVD?V@KA@EґdJ)UV1!eT%8UjcU) 1DGT16HaB UKPyy5$T`MA,NT-ͣV; omXPy -A)U%LO@29<N%qQ=Gt@ #'I>ÁP9kXciZʒdVi:JԖ@5݀bX 5Z4(&%3AcSBpYe]j'p#}PSx7dem^FI@F9k$e@$~Y>%_RPvf0`zU@d!jt^ꗖe7WՐz>:kJK;AZi`vg SI39X{w[5M6#h9E#G|V֖$MlZMK'~TU`9z؏x1&ɀG %>v"j5xAPBL|1O fAL|쭙efJc@Igv7ę6gDR@P^6hRyfzf9fh晊fV杙gFs;Wӓ3hNS)jJLj&r RrfhfykjCyj>&S3hY A՚fhꙢ&Il^l*&yk:C m@歹&ll2mƚ92cY T tDtRL͕*QECZ5.kU_InpB9S>89dVP!iQ@z J&D1ԐPw3Nf9,@88{L qLXxXfݔ=5p_ XX LIЉZrmtޘs`I5%9ҤiwڢV7ZoڬpryCj^֌DA4h miZ +r'f5EuMu)ŝAGPr(@^r[|IHi&3(w,5P .D;ZvDsս"RvfO٘)XՍ8sݞ/CBvPf(Opw AFRԐ/q Av2TZC aݤGx ai4ܑd9C0&;TYdMymNb%|=&vM"lgSQڌr=wyvw{ymNb| XdQ`!#y9r.\zrcN mȠm9( h( ɞ]k!P8{ct&G(R#ccf2Xal$iu"n=&sM3Wu Ixј\hMKSJmՕڗu&=e9qgxsT 9M^'8P䈜,zUčR0 Q!w5Mȵ̰pL14(TGp65d* V]8`̍L2GC8k( Tl +J*lGYzbn[L14"XF4()P1.Jv@aq&E|hK$ǭW2(ؘd@S?qzYMH`h)c>]GL ޫPRMI5T^r s,HAX{@%$zd1%#:V7@֣A6 VսDL8jKd7RE^bRAYbg::1UiNQa߉ |%XʔO)UTHTTx;?(PEe))i͞ 6${iYda8|˜F /ܡ P3jb,3`tDDXeʋ VF TRhyCz6dvPhvICzm*-3x@r&ig٦P.Q>Aơcނqj: i:ӓg걦Sot*F-3ɛX32nJ*)kZd){Gon:")}qLii'/*RYFMsꜾ8ȩ'N:y@.LmC*mwC\o )vڨC4} އZnݩʗ|੉ʋf wZŧhGE)ovx@.𩑚K$H*ZiX3L*ڜzDY:!_aA|r|&σzDi P)-3^$Rڂ@MIC@qjO* J5F.gƛdCp;xi\lXk@ 6e˜U:¥gO=L<9̘B8`@MN:p*Va``h5k2D:i#buz|Rʁ*9j81ΥИ)**q=h)KUz j|֪# 檭b ].(լ&Px\a*8j.j'*)X4=A.3:i=걫Mhz(ǧ ,95Y8+Ach3ͺZ=&B~>P fꔺ dNG+4ɬ+VTkz<+0"WkgVTkz\mʥ`4ޥs7vZ阆-Jʮ*ٳ(Yvv*J+{K7k94mkҥJ0+xRM۽y%jǺ#+$+:*B'ai4 ˺&:°fZ*bLl6˪]7f:IkvLQLҰZ0~9,E#zĢi(i†1k+nqz6l*iS+j|diZҨr,z J,H$%LYk4{]RvuΘ-(+i*8MK5mN޴ NV(fQ&;MG`4SόRpTJU۫TSZI9U-M3NX*LTbaUfkV{~]-Z>VO6PN#136Ns48Nfy-MU-3fc-2-Y;ؒ-Y{3& vskz`Hv4_S۫j 4 ۫qyƝ*֌k֌|,L.M vepJ 844M0hdcffOh2yn noښef˧ yn/iviv5n:u , P7;'4Tdj !LzR<z?T!Rk,P爴/}j TfuNW`>ϯ /N$b0Jݻ> ոS__rfomE˴ =TxA:зϪBioSҾ/f/l To[H|kcf4/ܦ"FFr\ ӯrWLlj9:1o ppZĿnl? p1B\ @{M%s;z)0l,l,p cBWC&A,30뵫k* %*^` a œĘD zH.>!6r.50o 3dGբ5 n=  y,(8 CZ@M[+(nܨ0.ӿQdv>X@t&â> %6g6kq SkƲjxp|p BE \~voTj/@0E.OU~I0}oi <"/` cU 9 Qj0Xaı9TC'LI#m qΎL\MU8ITþuII bHa3hz_N5]g$KaCW$uʘu&%̏ LR$PwRdqH%7w֡nUPe 0 f9GN {(!? sW{yl "kzp u%SfO& 7y;H"'Fñ]n<ǣ Irљ0."K/:&#Ț 2) 0@2 A̲%"STF.Zb&\l'!0B;e|&j2&#i'JE'xl'-M ɥpⅨpCAqX54k()2d)#*0~xʊ Kqc*A,&-f|SUtVۮ ~fLBkG'FqL+`͇\GwެGGkӀt L \\ҝ19Ss& s'RқBӕ>C!M& ;J 43'?3Jҵ4k(ұ3KWJ+KWNE Ҭ0GB4H K\t/ES6kLsLf4;>Khs=tp+G|4?Ζ+77!!2N4<=P{sP4dzPJC-K?ba& 'WH{Ջ4X]clBor5TAKZ ЪwWg5;B;z,t B04]=C J7:s=^.I(\uB<Eb}$[ԌbԥUO_cdsTNe-F'21%Y <tX%Ңht8A|b7̅ꓟ] c [[]AN˩"2@Pj1]vhߣ QvffOT7N5O=l8ZIbNfb\̂u3dU[a.McW3t5fZ U4tM6n=Ef-%FCx4Z35,TӀ3UD!wӵ8G#SE [м5;a_5[iTtdx/p⻚0z11kɸ0.'x`Hȸdtt7s@`߂)E89M{۴8J E>.KR(!A.!( /riޣaz({jOO+ Bǐ`xOŅRҬ+yG0eA^6 pO_C؀9 KN0}JrB8G :b79B- O>e}c4G`Jp"yh0!A7p=hyZ)2Bn(-ʨҕt߬Z)\^{FJ9V~,[1 Z.O \b`DEFbQ>*b"E߈s mLy.P(MJO& (&H hJޓC~#0J P}#!dk]21,8BqΒG$S .GVx) x橹HTC@G*JN}o5Êb9 P\0Qq [i"zYnW$5E~JG*9r+A|Jl$:ľG!82BT߮0{<8< _ Uh% I6q,~W*ʐD*h3 :%l ,$^m`Awbih /nNT\k +]>AB= Q1< C+Jxsd棹Tkrn9tG혹fΙ_J^)`N/l$CJ82 .-:..@P--%@  @} B DV#wH>-G׎lFj`p_  鞮4ҎyE: 3$^@H:Sq$`aL-9] dzx8.D@$ (P5"CDG(| R;}S#$6B)Jbഗ7@4.;w>@|ʳ#K@Χ+hνOJ978;RF+K?u6d>d{(d_;/="d> §Py ?Oia{?OFJP+@; 2SNm@г0)ir09G~i שׂJO>YΉ`{0*P: 6H` Y $Jǎ!\/f0$XH:W Yk؃BË^pbzyLΧ-{pB + P</!y^?";`; -ߪz< tȏ4,9==c , 2s t|Rp6"VOy|NNLj.A*3o%0oPQh: RaP?+P=?܎p$繱KCl@H H< ͫ::ޫ2?P5C)b!˺FO?-P}I}Ba/9F- A,pHxG@˺r3Bv77O|Ő|A0$NdY5=TKY9Od]JҺWwbKe=ٻH{}ExBPqS=fJ.?p X@t)2܃N=Vu<#X:X .QA$S- 2)CV+(-+}/ 6{|~i8 <,@ V&l@8CK`^>JJPSDz¦&@ϕޥ_0V=E!їS@fz}2[p,zHw-mX]!nU?Ä\@ͻ[ I+9k:b@:*rM:e;gJk>HĠhO*02 º#J6"-}1QaZ"#)CN^ h.7V\Gv¸🄟p*_gc6M֐$gZFx[@>1֯kQx냯cT oƠ@T^.hH@6otE;2":QP5I[A+;G~. B ;47 {Qy^U{F T-ۃҒz> -ay[}ξOb; 樂*(@γҴ4?cAq)g7G (E>SGC#ߏ^4b8>8D `;~#><[1ON6{=GT d&WlJB'k>#<:)JJ=cf+_~r嘼/wJb,sS@?Γ([NwǞ=99ֵGJOD w韦?uObEO7p䍋/? 45@T*vAD?St^ (-DZ?^5 {d:rN\8:W+7+a߳E+-@:O2O@эĽ^ `-y= QW%fz>ߝr*9ڥ$ /=ja ԙ@.7P={{ -BF F f |MFvzTw! sw]#k$ ;s/ CH4!DRL=`K#^Q 5|AJ eKEՓ 8^wCq`7 M~("Rxyҁe<,b`(Ujo9( 3 n2b`}]GYiΡL' vCC ~tH-f}#7Rt>1볤iDݿ0$+_m ݄h=D-b ť !+z7Y\ Pd ܂'R ,do7~` w [ p@K'|@ͅF*>Q"pa Mv@] uM-9@ D@c)L  e{7 s@\.9@T@A*@00ZE S@oo $Ӂvr_An0x\3`/mW9pWC pB;М@'شFoy;!p(1+@y)(l 򄆠P SBU@0 <'# "/_hp6&PV@8  pP*PP#X{`6Pr0>% 3f? r]. B0!x <AAC!HH 0#R{qՋD .CW 3z`U$`;حp@BP '&A3(r%z Xr ;(A`GhML+db(֠`/^I 3I б!k01L _ iQT) CCF|4TH G1/=Ts8 '82ùY1#xn { 4 ~"CM2tx: aAҍCƵ#+,hZQ}e0ȂՈ@y(d  ũC-ݵ@= ` (M '򐱠-ǽCё}`AxgA ($bYǽCrC/< ]±16aX=7!w`^8 H| y b5sxE$m|X1 m.x[8*]A<,$$Ru`SW>tanΓ@ar1otJ;"y xA{Ç~2k! < B%!@a4FQDFqɕxa  . M,`FE*A; H]!zT̐X G (Y)! ,`P4o@r<"~y} %HE W#p .T ^8|y?&*P u8/?X[dA% U l :@48M0p@ l fA5x D[m]NE R B7qSM$doĥ]NT' Dn7B15P!E(E0!<#T9\ERQB+׊Gň"\qhS+b~b%X$*@B TL+:_A"MY'j }(T,SEbaZ0ՊEqW-^]E[,-FɢRhYD.%bgOll{;D@ B@P.J ̈́KBP%h$ 1_&8 +@T7wM!j8)6B803L,^:Hd |in=+$`!pXxS1]B BM i>d/bjqR- tD6:DAFq!A2 .u#`@ t$~`uK$$$ fD]hL`FJWfTy,pE:)K,=d=qb3 OnT(E1cqhn2<M `?`=i)HV5Bz#9qJj|D [Fpa~OVV0llFA1`k =1ָ207ieX=rN@ckrI܋qB$e3(>,a(ͺH <` h ;Շaw:6(HݮqIqd*F`Q8 C] >I m5zi1u.AE!1 1fa yE"hKӘ5Ícc`98`#2D<*7-\sh~(Cp]?&a bƝ. zyQ!Z=Dڎ {Y#bPMXۍHw[0_8BBw*g]0,p nl86 #T}G(zhrn!O'qUD`0#" d~N'yxdwȆăew#F;!`G4POG8`9Zax?=XiHBy(q, ER0p* ȏ0#Ѓ穐Е SO4fOCꡪmB1R7@yhQQr7RyW# ѼlDw?DO^32`#+bdxx BֱO{IȬУmCCd;, C CnT:0{ ' :"$-4 ɊšaRl*!>'vagA@zm0a4Ro!REH G‘"p9FoTǷь(r:NFF!OEqTNJ+)_wrd8 S150%="W;GuUql(*-  .!hC cc' 7V@uQJq2j&Cv3T %O_o(QhDN|'&NEǑT!ΐu#͌(c $fU"UǾ+2IX #I EGF /rIkER F§ #Vl6Z]k5A q"SF,a*ӅYg [0g9DJ FM4+3$0)pDDցx<6LR$`tlT6$ ]ÝAlD/3 vdW9JG [GXmP#&/$W+Yu]dΏ0*X]2@1(d?&ľɉ6$c=`# aJc!r?ݴ($\Ah;THkI8d҈HGi<A"7d!ot0 W$  *}| w#RE HK%ђɈ`6 FIWdU퀖4 ')£n`iN:2H i8I$gt-%!(;"ÀQ@$M)qų 6:@C#%} 2?C:ZHb A6R40oG]2QR=(OmI$'i4(r$Qr>1X ;%@Rp8-0R&%O(B9.$(\X1J9  ₄cq(EAHr(2I鑬YCrd(JlJ t)ƃ&Ҵz iT%e( V 9JLeRc|%cP0T*NZ#ӱ00,OJzT~3Ў(;L2PS vU*=IOd52樋$ۖȜmF*/ǍKqr#|;+z cxHTj"4A.pcE-Gģrp1%`I%( 5  4u*#B26t+sQ)HKuPrIr/I2X$$F`4Ru:^$34ǎd2|QLe/@PlT=?He.nm< (eL`#(mb~+ϖKAHCtB#!-,^.G1ytaԖH"G09}g/H6en9[x0D\.dž`!CyD( dХ!ScH.$d$_1 vb])w=J%0T.sK%$sNɨ4*R2`>$&s,].wnI%9tlc /[KrIZ$ϘK%8e$PT/_f(RȽb3KrNP1);X.spDX/NUZF_&}cT*ׅƥ Ɯr H;:T a;WT&L7ӹЬF5L%R3G&2t٩Vb*yRB Ɓ4b6bN/\1ٖj&)L1)Ղ-6[&e#Ǽc2ŁC1LQ$@eU,d2S2醬f2Fɜe/^M坲i|5ɚB bPkr2aZ5莖jr(#')T2Zp8ӄb1=`Ie\H091_x>,G(zaP3T6MAձiq[0J#xxp%٤6x%—G&%}|)\W@ oy<7 qH-d C ah'JeZk#3/OLEYsi>3KoHd4+cCKSńieʊ$M3Ifv#e j" QTj-~KS4.˭@5(QF ˕Z͔a#J\D2ae1+1RtIlI.kG̹s)R8qOgS'9]9Q&[&$ٞw2f|Syq-70m |~2{#Fr2h~5Jf/V’&0YƄT1)c5#/9Q 003ƽ  @!ixLWBhoA0)~3V)l`l 6(c(e0 8Ml#Ry:͕0M7L %qy 1ѧW$[61 F DK_ adH4@pFlD%(򇝮kepi\\;l)5B+cFse k)|Mgӵy;і#"f>!R i9&Љbr/ӍEJ喳ɿGҗFO%,(dwR+IG%W?Tb8%NWsNM'T3Ej8S3!Ȅ\:=7NSfSv`њ|Mf'HTpNT*Ղ֌\"9tM.eSs|=?XDr-e=merJ)9B4wN#ǜfL:!/0W$_dN|pgyi| sΗA9wI~K%2L6ū߆%[Q2>_ϵ't&#E #"UK[M\_n@H7Rˮ1g`y^?6#Ys<3\F)Ts$jWS3YTL.g[ĝ$\PiZ( 4ó J942>L'/p2( 3R-b@; aiL`C&bC`6ӞOtp4IiR2i$v1x:SH^񉱬`$C3lLbZ`=?.fD#΂/"=q{ =ԓ F"rRl{At|#pnt(u8HۃK tD@E ƻhd8XC|c>6`siJ8rLӎp1?39(qj O>tA(S) kn=+uO#4{0gy{f){й3׬,C?Pg3G&2~JZ'-& ΢Ă̹t>OC/ P{@nЁD%HQ=7EwomYF6 n˓a@V07=Ε,OfSTܥ EeSY^>! w JάO!N$6^r}BFlq'(9RMPK dE 3h;s':z"5,tY ]zBمPbdoCLbh6tv.=LQd2iQ')I k&CᢞgA9SE P:4@q1w7@'(Q&l6N`[@ZOb y(0h ʴ8lJfH~F;gD>?3F*.0yu{EKNׁ_-6l~ @e0(ښoG;AA|Seh|{EeReB qH P%9{NH¨@C&Fw荏S;y$zFV(3֠l ԝջez3$c.HRse35j٤"?(@ 26Ph8Ԍ/04A> @RI 2GQh5:@|}㨎!̉&5( i'&f)<aOmr?B@&sd: 8x@ dn 0Or F9]!\RT\B&!>fGrR3pP_Q*cUqCE*0'$s&qa?8ȗcH۸d6aO5,6.*If&t)k*8F$s8H<ҋɚv<['Qyoln6e/Bc'ptD΃VJ|^I9N5,VJ:ѤZQyT9zqR14BɆ%1dx*bǧ%UI| (eeA29[G&)]RF_+cԡ(1ɱ? eI<(Y/cS J]<*T!X< ,k&*Qy4EH2#L |2Q^|>FJHe I soyMGѡ}:|?1BhsG((S?&K̨~.;t;oG$RH<\ H > 5D 'aaCA VFPI5,5*A^F[:airyqP!g %U pB@҂dB#[T.$ 2@H#"DEx ;MR"=kO$C&@F*Ќ%gSX@-7I[Ԓc,LE>S"QvtZJJH65MuJKG/JNF*'s))SuwHcA#gGHJilN$ݔZArl$D(YdcfW{OgE\)Whadm̩$4Ig& ~,ր'Pjo9ѽhAA9zJ$Y6$r*d2d% x#%}rZKV<.f:$~ɗ!X@9$w9;L )W2ʊdJ&넕2ټLn&ɌIDa2/ȇ&OdSq5ylMz_|FYW 4 yߪ@Jo$ܰ+dB@1FRn+ "Y653W+]4 ̵"R0Fҝah%Vף9'$'k{ʞmB6t=T's GO,$"?Thr݂҂<]R?.{f$48ihZuCg7'@;>*9"L3@G_,줉g;y #}9+y9`TPc6&cDOTǥQ$ӣ:BO'cl+ @Y9\'eyA)ep ] e! 5,Ɣ!N#)T3PTu.ۤm6erW)5)bҫ j41"u%@;q C`r&F* J `F Ks}O h.wt*RUq6|ZjU*m M6 ` `nڣ|fz~-pVAu^ %O:\ ")3`4`iUq*YT\)2KDruX|Cj;[f,LP ? LjD&4kLq?5ڽm*EL&)K!5}vD kk') q&4|*Y7 9 $aQ@^5zN ȕR52@Urm"R= :(D[95:APs+%{e`UP$ c2!@G-(k$`I޳s* q a9.૮,+4wL8-/$O*}j!ޗ,ax))ah>:Op‘x~vҵj[&Ȃ HP:&"vpnZdjrHMZ+e2bX5ȧ(* x"("bsڧ-'(:nP+mX_!OFn`n.Wgג1_GQYPl#6m/oS=D:6|: &?[.j>NJObSoA1 DV6@דA'2"%ؗiM*l6`dK2%= P',sxPٚ$- Ղmѳ;ձ-{vUzje> SWz^GU, '2P&% Ztq'/i7qv9sv_RrP|9M'զ\#th9+ہajB zPex E4c٭$3>:H['YQHk5K@A$/UGJ!RVi8\vz53!aeW@9ٌ(GP5;"$惱\tva N< {Uvrhla<'9KqgӬ(NՊڰvY9 NȹOǀdYb @XQȎnAT'VVmx><靝'V]I51ϜT3U+UͮeZ㫶3.3@X/u "H]@<S?Bl#n )'"[#|=(#@FgsFv[[g0ҍZĮ7~K˺pOg2 Ķ"c[ +0)|߃Θ([E LͣnYuϞmؔln0GzkOeuq \k]Y|bHğM=ٻ e{b83[.5hP+w#k!P%|ZhEQV͙G;oõRki/,%mVڧV|W$*lYAojﭹiFڐ]z%vu.iP4J mRfg;ziLxz%Pί.;GY+6xQOgT"52#(&ԯ;~?mg";Nb$ejtk%t{c]`E ]J>F-Й@GҵBTS UW%% ,=Ca)(ޣt>is4) ( 'w!I5-@QU92+K&׋ջ G4TXU `7Fjo~]P@;?\o)B[eE_:@{8tIF}꺑7Mh;=A=BpS.^%vRոف1; =#>#^<)Ƀ]nAS+O/h zNAՏf?c+E"7]7Usy&k7y.az;BPR'rHzܪ*.FFoU3/s_A׹k}\u*ή<2Jw2^",iXt{<ȀIxl;08aK-D>~o_m'!>=|pl۸h^MEYݖqxv(Qm _E{~ PkhkU o{1=A=#z蹌lwM/ 5}B7a֜+5oH\&h46#UCmn4X=oo!a;lP=^Qv4;$Qچw]K?+m7K[tiEP-֐HkWui앞E6ݽG,#eH9Iu}WK(} HG R"5xRQxF~~T[ \HoRD=Ǒ*<v*J53z .HP ЮUjIz] ;Jˤ[Z!w&e7«Qs-2,}+P>'.}iJa J̺W78ǫچ ׵+eyۙF +}o n7|B 0ŰJiJ,UJX{&4zNWԬ7J+ہ阥Bfo!ZMSqX\:l`[I>M]JTAufia1@&:a{AV7CZ_{=N ī\zRaD2!'mRgCR-h6;MrUtB8WK}636\R)9:b̒T$_[flI.hq!3)NĒ}b^2BEFXJeRXS1إoRrFNUJ*UVi5@,JX+T+ͼ'\CX`񹩑-y/Mz@f RC)N{˜fIr]F{ߛGV|#N놟3Є.ŭ|[KCmAFZb|cx +h#ҋ6H Jxkgbd+H,\vz5*bb['LlQS@)uzlj鄱5FHJelBx`6 Snx"OԊ-pZИ&NSa"1qZE3Ҿi22^N(iz9,N8S)w:4NsdSߡZ^Sw 5-JMWvӉqpQxZ̚OUƷS 5l<N)v9#TtZ=oɋ󔋀7%Mň!cqpXD (q!Ԙ1&2N74rZ2%( ci4s:rNۉc4]#}SҸu*4'Esk;u;x{cQf:})ތ79cΘy:)NTcO{=}1|_p1}zUO?ǐ1A7nرX4?^A.Fꗀa ABк )^S"nP거+dVЃ&ha1Z-,2^ ӷXTNkݫ+Zw:T+"^5T/2A}&CAZ=6Ը `,GHNeN6<`-Eswt<`$/Sy pHy'd+PF˧a2 fBȹ-9'|ki4Lu6r2稡Zl g0l-9{=ηٚ`zI- _PV E$A[豂=]X@zNi9USg IF}Ψv߸*`r0<#USX.pXM q eX8wxYɓT0$'م,\Z!_[,pJYW-l 'ʅT0*;-Fuaϻ!dsjTkJv.P}AOell؁k1AT +z3z( tofS1n3Ueg\`rsbH >bއA3oIUg̼3L 7&^%!Y1SM4W8U*-pumH}-侫)1xUn}? &D7רX_C+Z/oaKMNd[EH1^2;n`N9S'q :"@aZBF{pqt  v>"⁸qD$|K"+ (;t О 2W^w{uz7+U*e߮ o[vJ0ύd(iZQMf屓YG08lώ- yJ+@^&u"\79U! `+x98y$A-bOy0q $ڤܒ E[=Q2g>O}s) ~e)eFoB%hY(:XdFc.5:~FeF72!y;FW#>r ` ͭTCxe=/Gc&x"0H^HOX(tkHM2" 8<|?Dՠ5m,v!B@6tH/eѡUT |tOJRv6;cVhr~\"fy'z=gJR"!Ǖ!uĈuA桑Wʓǂ Zp @=Zu=8rA06zwWis4}VG?Ս]wtGW|8;:󺏦Gcheg+wޣngIzFMoѲdzg@fM[G\a72G_}Ӡt,FNѩj-+pMKѱkt&$ӣ)L薛 lz;m?[^A b^ 5Kit h$W=;!oʐ6$&-5*Τ5iAzI eXb@H1% =[c /1af.Dqez;.is8cl<50Mkc"TqLV4/o:SrNѽ2'Z8R#O1c:f>*MJӶF}:/'?cZQsL/?2y`V6[6bQBH5N#@3er:K-cf/Әe05X;m4dt{e F#s+!5KX2OF^`1(lTwS4+;. `<ըjz3>e*f@En@4/QKsqk93%5㬹C]kޚ?̈aZnZ_oX`k1^UdF/ijT-=Ujd.ԭ.z}6[/xLҍ2G_ iE^CfnT grsJN(C+* r ?bU$cy`7x1%љsn*oW g&xU4Q :gy} R|K_eWZUm,PӦgD%ͨȊ`u>Am֊aEP'$֡SyR UjIKŬAHߒ)8 pys0ƚcMBXk#DI5)h-ܰd N du{Nn^Y{ٖu'L$T~aV8^ܠrKYI#0 oj"{1s .Ye{=tϺ&~>Pъ jh="Z$᠔cuM V^Pp_+ &W3.փfXݸvB匏kA r]!qTMaz:("]Rc{n٭bUvuA– ]1+<5A90(asR!$S}RWm…2]Wr[߲1yʔb+9&z!]PGfUF~hK\'wE]dl{/֘ 6 , .vM5AUK/\iXʲMPY[ Yd[uPH:eyXYd{  wf#:F=K%9hv-DYQ@tFuJ-H3b 7;rGBQJ6*p2{Ҳ[Fg޸m2?[G'L:MipŞgm#$Њ/,k%vk2CQ#%p_Sc]۔:F%6,fB7WmRr\#3",0۴<-:_70A\L) 1Z($]}9ebX9IVU٧rr͝\fj7687 %1MFO*;7 ^vV{Jaao.<ւ7m,Xsi#k@mpTj]t763y] n~lmm՞VhE^V>jWڻ{hD8ʓZR_v3}.Z0y6Jslٙbxsn5Y @ɳh!SAh[6:4-Z괽W3!A[37f&,U^\׶.6ڶ[m Wn[-܎~m(q;k=ɷMKpF H+Immq)|vJJ7nMóxl;mͭ@݁7f?Y ^34WBumZsXHyq|@9onMYqܤ#"o|ba6m=HoY1{ ƝǛmvZrݛ g8|3C.˖uvJ7<.iG(L?.sO!'M qbܴg V99D^T ݖnX.b7c7HrGhU22rEyJn)b&s`TAy,Vϸ6eT-c<% tV'JTxv_n:y\ٮ!/rmV'$&:C%='bbgA]U2;Eb7 mb;NCÈ=FvgJ  & TARlox57r}jyE*] }iTO7j{+& %o+jk:7r) .Zn7kzmx_x L*c/ȼg/8+muIJ{aFk?V8o7*~yo^q-BʦOBQˌ@KbW\+@WLmo3ӫf{O8h`? rSGRЉwf7C&x IP 9oT7 V P ~_tU^#@_`Zh|APwkGoT{5oLu ~꾠ےtEA6ߊ˗_:_ 0x3狇}d3b׊LL BȊP/wL `F}xto/Vz &+v߻ VO71tFvv!NհҽXC6v% gj_oۯ.:f~ou[bCo /xLz$ǫ–ٜKZ/m &u-_WUDWM m9MN"AK `c ltFEuQSl; 1 0ץ-Pg]2m#X;uK A 'ߠesB d &ڊFݚԥbm &~S$] 2qOY; n٭hW÷zmn/陲Qr$n6zQ7C|4ҝ<*A1-W6;GB7?]\Ӆ;[c& 7qiD< /~>d2gL:v񭻻r%-a&1g= Ո[9o%7. uk] /.\3IJJGJ xխHҲT`l#I:~w7D(s_O0K'0'^h-GAq7}c5adxH\Jn8T0~?JǼS2/J uLa5RP1K,*%{Éa䨙nX>zlb0 1'އ[ļRxO,Y- "o*'5#GE+(~6g#bm)j)F:z5z`NSL{USz]B8&/{+OQ{qaC-\G*ɍ8 {!f1a̢0j19l66fsG$-ԅ㍢x(%1c-wJ_R먩/+u{mJ4nstS33A(~?ԥ scBX5NQf׸D=69bQ*9ZL.QiZZFUKII% X ѧW^ ܩNUg@Q2Aˌ?u!j *XTǪDz@U/wrWc Vo;j>ZYgVVK(Bsxz>*eZif~lQ**BNjUj>H2 cCgw*#cr!FB].v] <ȫ?"F}Csؿq9*×]TRg't`8X'M+8f{-6WI+2ӚV5oߡiDnSLo ,=抯"gʧ5,2jޛZ[Wj4k-pZ#գ:l!oF3Ep95] Tj#Un_MȦ#uk+:BA`7 DcZx7m +/º$t1Ie,|e.5V}k˹zݒѵtٴI6VIvL/x]%u&O]TwTP)d ^CYڷ^X,/*Iez^fVY Dx֏xp}^B?F:4i WYɮRNBv!`Ƃ6*T"$G糘jhK^kujuaYk~kwMvۢd:[tofZE?B"Gj}n[q=~3nMBHFWu+K(~Tzڪo~j,{JkdѨf{uAxdAJ)l餱@1k >l`D[ԙMʓ2ld f;ޓCv|֮D"]@[ mOa R"Z.ΞSIl8FC?:v]~qdtm+LK~֤CXCZkn-F^5}+pJdW6Luea/D.Ejp8> ? wefi{Bno=V_J5R-WA:L_am-5%{+;-5I.T{a~p$AjeMgnruJPv2NKY/Kv1A"3nG70eD K8U\,c^Ƶw0?ؔx[uaHXyBЄͦBa+q-qⷷuNafضE1}~ݽp0^c~ n:0rt@|5;|t&~>ˆ$kn7kWML͉ꭈ|ٜkb٪ؐ+ +ٝcv-F8h_ ఴ=%K.va!5`Wg^5DvqX8tkb8w@vб0;v05[Z}B+[9dQ!:fpaZ!u,)n VǺ33g,٣=;%W_D\C>{f) \d8Y׹UЎ97I d  ZK=j澿9ۋT$ɕTl*}6gux ݗ@w7D|$پlgvL˶lOѳ|:|VWd,t܊S'"@a.| SYQk8݆=7eȫdq(+'\ٱcΖЍܤx9!t=g &w:: >z;Л>4 Ǣf?\ƚu7i1HiW ٜ$F]m-M8. q[`)J]:gkzG{N:g=ԕx$:.k)Zv}־c,@9`{Fjyo3Lեsy?XyՄSzeUC4?dkYjN;68u!pπ`R/c*Jp&/w~e5ϪQ )Z9騊U>}=k.Ec8ô[oĝM.kinZ6;k7#qO=$ӓZ4VZC,) pe{<;)כm97W٦0C\vX]ܕjtmocZtm?Se9[!,jwqo^m wfۺ{ۑtX$8Ikg|ExQixۃv-6^vDqcy[9N&vY{^ ߮cg3Y};Ky~ FhMV4{-ߌwc~3yC}Y]s#Rtp]W< s=C;]%݉>=eTZr{>`&~܃!Z}o{QN| |;chFy~:mzMwi(h nPo썔3!M-{ohVA1Ӗh>T# Aie )nO;@柿e.r7A}'}s[O[<$xq_Կ"|W wrc{޼I o-݅-\t qvSL5Gho[7a+|R g;۽\^}  aMw", ٣vc)*Τx}v..{v$u׃}'t %[~ougUc93a/ǝqwx܇ qb;EUkh=._)"{3< wFjqVq%,m S=1Ji yE5%= W} q8ۍ$ps]/Icvޭw3><q>kw5xra[ԩC4ؕl]C䝙uz&w׹¡vuAl5vu՚\^SmJey:g\$Bm< ZrmrgλvJ)bT[& ^gbպ/ ]U|1͑zOeTeѶ]TzsCjRۖ{Lϵ?k3ϊ@w$mFTuNh\[J;t@ݤyj3RYF:-wg*[[EAt:]^04HUyweOlv̷u F"fRw;Uzu߳N$J|[%WZkcw.Dr=RFJ[i1:AzS^2,.>,D?/$K)@?Ft=vQ}oN*9C -/v!2jiupWpC-l˭V|r=W| ?J;Db/qF*=BP`8 [芳95%yn ľdF5I1K홈2o=l>d߱H\Ux/qhALwMBx%vubG5pE@x~y{|"|[~u`ޯI>ÿZ i2RE}yx|`8s/ݎbQnzW]Uo{%ti">fpPu^w@`/NN>\}7J`Un,wL c'y*a5s{Q p~ RgO{:15ulX. i$kWAC")փ`^cuZl2x;uG0Rfu^S>{[l`YWJf;KM&fϳy/ ^jQZg״z8T O +9Ezx* _ Ow,<|U3qZeԝ>e#hpS\ɠe Dŏ`;,?4֓waw6t*`9p/}OSw㫶ƧrÝtRw^ULJV^Ǘ)wT/`﯆QeF[_S%ހA+5;B6b:wx~/>RҦpR+9UTM}ؕ>{:^;^8^0%¥žqp^4q77yyr052i-Kv.n\.Ǜ dR^8n gv})Uo ~nV )ÿx _R~߬? uxܧۡwnKxTzpGףߟv}=L .ٸy. `{Xߚ~> _vi%rCiwnФlzSZQw7e%rU嬫ӛv&XQ ijorr. srϓө)}rI)oz rl$-RǵTY" e`d~J+_\8+'3ˤi#\y|,GhBVQX=}fducdV Ոfh5hVsP#@|_.G( mL1)xsxzcFp.nFC"! -e]Ghr`x(m|asKekzl[mYbW]C@h;) PUn*^#?l WPtC,]"gJvkjsw=jjduT4LsdsXw:vkgOui.v+{F.sspYUs>mZ1VeWw0V;{v7I:Ikywye2IZ\O;JSHJvoz$GCԁw{hd>bb HgU = IesZ"iƁ0-ӁkoTpZN]bR^-zE_ZDq)bpI3ejG߁!GaN HBJvM 8ACk\\0D_C>cI|{li2W,wCW]#]Lwm] eFdfOWK\.GF7X .:hhge@a; -:$*.T J\*tv ;{+.$(}*8<7DDI{@ ~0 o:qsuwZ9* ~u:.\Xc`XIdm`{Z{Wx?zs|_TOb2e!i[aG`CHdKHU9HJt;si/iwKuv|{}_?p}fk^KlpMiRH`oBvnYRWs`2t[^kZl[ x~KTUlc]'NzX:rBK+RblEPyKJ fe@s}!`/Ix̀u X<Ru^|aqih9Qz|phqb B)sBYz =8O 5 d>nnPJA Z{mRa DIyGz rn\ f^a2*_s`LbBu\Kru(dh tvnTU+}EGXuky,߃DjRtt\UiK!zx[ND\ybB郺IP|bsMvxMv@|"4OQ ~uN/%Hj|}q]r~|QSIAUu_u ue~nFVNvJmMH6!y[xKx|sdCQւRG^ Q)PqoekpQ2}dMDVfndUcLGVr}xdj+P|1{ PZ- D@n9}xzx,OY]sDp|5v-Yv`3y܄݄{n_iF]}bp ɀC΄)k Dj5"JGYvjlW> :~ZBFS KdfXVN0#' ɀfdlRLkwoeYRyuyy]^ ggxIUl[FCy(olT*sN$R}nnKtF&xyNzh~VVgكu xZuUTv}ttpy{CInOMRknфG?t#qoydFVHs:=tzBCE"!guGҁko,J] ?F Ht>>G"R]#Zw/MiQD$ TiGqtfmi2LhIMi gYtohTOQww JFIWFhNtW5v)OP:e] y>\Mf\{}-3BWwk%q5vwRyT_\ex_22 ddIKbNQhs|ЁW] kM JH;U Ӄi#7iFU"|Y}Fj<քWfK)Y؂K iqetD> m6H<%MW>CR3P$v")9)քOV,cQakBGUg[P5 5* IX3o ehjxKSuMXl ]P\fd+ilDSD~xh+/[BsggIyzlu|fhw gP|}(kTmfE+EfE hFv CViH smH}lK3r$9$6\UO: wjFTM僮~b2kZ; ms!ZXRK XS|ctg#c>KubT@4;Yt1vZ x|pu =DICa؀$PyUyfDVftaDfY(l PPliJfd4bEh9s|TyDnTFdՃa^y)Cj:Rc]G}BX&(uzu{~DnTxdih?HWmx/JvEP[oԀGp} I@sdtpTqŁRyK^NL|G'@܆{GvJ)XK*_ hs }XbdEla†VHJllzXu{| XuBb~g5lq\7WOFyAny{k~XlHE@hhG8>N`T r#lsytuqJĂn%[gPlf6dOh~] r#j!ˇL_#dNԆZ:=yGxnGW=wm M oi EU;^XMt,# @ R^pOhus$dIGeh$ cDzX8tZ+}eoHVDkwkg%Ճu4uW~_isKNTX(gPyR|u.#~yhI[ Po,lR~JhDlI[Dax>gFG.fHLaq|)J RaY_G9R}_FR_a;vY*QR3UTsT, bH^|_wFiID;q Ճ'?V-'~MICw-&I1 W_\e)FWf XB ] W)Pvn%.{CWʈFW]^d^`K_|G ?$NG9$%; J5d<@و_UNeDUdYUsxOP9$NQ3|cbaeEBu5o! i nba#M ~ҀF|pw hc]'NC>YqR}iU hP\aNJ2PD"-&;Ei{du؄.L>cN6&x@ KjG`Pg0H {HYvgT{8t~8` e Xvy_MzgwD:4GSVRUoH')kGVIvh^ zgxtȆxoV9%zv*C)yiF jrw@Ia_*_YuiKqy߃NO3au[nnStEC{_PkGLw<GDFT&];~K,nTIHCg%],DŽCQm5z-&sN> lVdr~^yahWGC{wXryyXb~\s_VPdv]{a"_=E FoTX~vFW{H~=؈  on|@Id^G2Wuk N6TppT0ނ 6MPdi K>RUTd_*i%ij!-XUi iGVdYKdnFFa.GHhAhgNPw3~[odyxƒ:#eQXXuk=disPZbDDjEڅYG-JiTi>&8}e 倗nldHT IdV]VKuex }i|iu^UO"N`qp ^BO\hrpa>|^URCJP[Qc^ Vk|hRM7P?,#Fo8GSH`G;HPWԈH{WJR__JE%- +ou{QuXIq{ov")#@g;WyGgm3ggy#d\yO>k__NVXsIkKIFVgsqsk%G!pa/IQsZVzs]Vs`VscVs#kskd h2 k xN|@pOkMEdrICd_F 7odxim\]XÅ\eghY Haej2r4bfsjScvjfsgNAV!JWv$HVikUI[MV+ksVVsk2skstI8bV#lksiV?ViDnIF6MI犊ZVsN%ZFRftTZMY Y{Q\;e^fs'Qb`!r1wuUBa[jEr+S: 39G 79ŌCBjWfjRjA׌ÌY#2Jfq.c~#\fcˌ%, Lf/r*9 ݌=cZߌU/-a /*^._C6/\NP< Hfp+QK_N*UoHH)P.upv^.(qi Vpl k,{?99GHIJ )<5`gONTi9*]<9:ek8{ 6A KGc>'|Gv[]K lDЇiWtBЉt|qmD*4H;Ow%D+ЉsBK eiFK{.]!z(&Dɍi_9J6\(ei,C9];_7 k:]X0_W^7ˍu;/; h9֍Gi_ٍpݍ3zߍR &U')J*RRz_<' 0tRÍ~.W0T荓\2gACRR 獇4N rRlW0T!f<1*a\y5SRz hOWR? ^.*&_n{yPPtblW?[YC8Ef({%&6y]n ~\-`Tx ZVp'b%[:NQz0TtXEO,[C_d. bdr fACHp+yn\qXMZLw>? OD F3_D;i<2<):C򇟍E`iZK*fKK' )s7$f@x(Gh %f,C.+1@9 0+荬h9MMĎZ+ǎKfWv͎ Qw>Mxӎ ֎LdَR 1Z᎑MJ쎣 H_Q#E%7.|ʎ~.{}O|'PPcDO|M]])C\ύ.*k;ZzQ_/iiW=MÍŎ5Ȏ`8`4*ю Fac׎f%㌭PprDT댰cjBjb-B3!r r FjEjrF')g9%5XL%Ս*U`NPDkFsn悦M{M*I@5zs{Llu{O<nUpF iUDI[tV N`7$8K ]R剩}g]e>k0nߏ MNELHRoT &A_CQيEUx9}o01eʃׅY z |;M1JʍfOPZdn7E*fp]][{k^o{]_w=[ &[n]*52"DA]؏fhO.g"'d>4W$C#`0I ;uN`{:B[c% '5?A"pi:Zi LS;tz~F-9YaNI[)MOR- ]bq8T ='9'*nMqSrNftY4v\1~.QM3:W=Zdn@ ;F/ [>0E"K.bVFY/]. W )O)`G|$݅cOC\~^ PL}tg^6t`.qoG`.Fm%`.'GJ|1:u^#{$n^ؐp2ǔj^y^HR.d>*7]ٔIOBr*`.Nܒ+Qߒ1z1U--I.T[k͇8D `.*D'Z#m ~7uz:'(!K Ôe #~Fs M`.Mdd>\:MF#42ƄZ' _+`.UD K]B4 ;)IDM` d_AC\bώ:6^' ƒ$I ~iɇQvLdb"A!^ Ga^DygD  }kvKzaᒖ` "P%C(ϒ,] '[aT=@*|4+i3;oƎ>HACZEye=4DA6 DF/j;AE@jrFL>Sr\f.S*GXr'I.B._axce?BhIj^lokT sϒ9fy=y}e>]Ny7sCߗ{uJ`@I1eHfCm<sD򏣔X0䗂]Iٖy5{^ T̖ 4ZJPnML $ @w H7K .2a%D+ )ޖۗ#`.H-UWX:$,a&ihx[5hQV"0T/ !O>` <"_oa _ ΎDLb+a/0T<-5m~.%Aŕ]%Cr1 B3>K<Yv CoWE "'oLݖ/9TqNW*-ZU\^x2Jzzc~<Hltmops$ vؖ;%C1 ' L5CÕ"F;ʕ@9uxKD, 0$ȌFf c@r!zDFH>Jj*QM)_I%m :XIWv׀y$[s:% k#ȖoXsh9[@]^"hY{Te2]a4ewgwN`)CF6ЎL䏍ÖԅK gOIm 󖪎eO[׍ zȍ ̍g΍4ZlԍX*ڍ܍؍/ZZ&u:{yg9=<Ȓݒ.U$Ƙ&\H|ShΘfG,W՘{?)IG:On=[̕ˎ`hkx GfIiڎbK%ō]<&IsCei9 ә9}~ ]V90gZnəGΙ_x♻ҙ-יh􎋗ݙK,ԃ+02~PD4*/昖]t:ٓRSLSs<DBreiIw`1&}UxzX}a}k~FmT&qww_8LfwEDc]C iLsQntp–sŖuJۖM~  p疲tdl7p0y!eč]Ѝ iӚٍۍ_\r Vˍ0鍋yV'ؙۚ͒ђ>+֒IhlВMØfW"W YmșMʙojɎZnW"Қ$9'ߙ*B\H@sM#+..`1b;5zu ݚ !/Qǒ |.Vڙ%:Ę_WAY jӆL6mv kqՙ̘̒2*8w(Y˕=v}ڛ4JOjzHdQ9[6I%;CGgDs5ő> w|gu+]-UcLPP?&e.ęDpj:l~zkRay֝D t2 I񙮝͐U;VM^ $ MƝHȝOđa OiEr<{ 8*1H? 5P:NW›TvGɏ{Л$;"`l[:\h**LKY^y@_r M _phEV܉X# 0(7y9B@bi}Q\ƖPWoTj9VzܖZ*Ŏ4vq k!gOHQ̚6jǍ֚ˍ MΙLdKߚ,'G_ 40H)% @d@Qu ӚœܑȓtzәH0tdRS2$ Z {'6U^#edd˙蚘Йm s3̙;u9N9< Ϝ?ۛfMęFɚ_<!!/ȍHQ 3\~ݏFgxHňq/DbWv<]ȍ̜,WD^70J(|N]BY8R)9ŞFUG\ `e,PNKPi9D`{GP7$1G1MOKH\/ԁDzdWPPӚMbO%TSe3zHY_AG0UžC#Ş="]{1?Qa(n{0T_gOYP4)hy_{0~ҞԞdH2:n#&p"PM(1ۑǓ-I]vO_^]`bd.3˓򕲟GR"|CQKF_3J_xH\pg`Gݞ4$t<*\,ǜ,EQ|o:yS[ W=#oGdv(QFg C= '۟+KߞpgiXG* Ld  `GEƙbPeh+ܟl"{%D3gD}}9S8"O:&(>*ތK.Sd U<4UzGQUQCR<*? lBb9;]MIKvNMUP{~:nPV{ ">ܛT"mbjfAo5`lʠoqSu"e=2helׅBEٓ|{)e}YvȖWY[Y ͍^lJtÚ`G"ufȚ40=J|z2J К듵ƍ՚隬TÙ蚸S:&ѓ[t]˞͞<Ϟʝ̝՞Rמ~0;ܞeYcݑ.D {H$ZyԒ4+siv|x# wř؎eS14+ېNxʎ F F)jmKl7x].ڝr>̎h C].cx񙊛JH.0p{z&5dyNpj%M>@t#`2DF2ZL&NcTfhJK3zK=]_aEġgi lqo|ؓtF WXv,S[>bIț;C2W6' Ld0lWȓb!2\CaS3z蟟]¡ z7N.2ѓ2p𑹟,PŸRğƟɟ&p˟]'; f{i}kB衷^ rZR{&aki術.hqJ6ۙ;=9~d(4o}^#]Íޟ=PBh@]yv&c|;̙-9&捱"$us™W\_/1_wݞ􎘢͟>u嘣vᎩ۝s[HdS5a[I X+Xi>T} +,ES.y }UPg2m#HLL$N[ZWJH ֛`"ms5]T䛙.盦ؕNNHm uJ 5 ]HiWC#⚀el,*2R(D|[ `ϔoʔD.3z&;.աVZZnơ.H0)6o͞.oJQ%7eC؞Fј3z7윜h+!ߘM8.os|%7?uJ ќϕ ԜG_ڜŢRx{.Z~.ӘƜnМ٣Еmoۜhg9^.`˜0̕XЕ(ܣCu~wD+ؕ~./Z3%7y=hAE+C^.ˡ4c@9ӡY֡.6I>8!ТqԡFDR15.<$FD^{1.d Tq~JKң裳"XգĘ(CV,8@].?9C#8.&gO>DlnUDsuoӣ[˜f1GᘷNpߢroGPiڣ՜ߣgS.f飤М`Iۢޢ]m,JK 0O.fW£gZڣ : ܜޜYqԕP ]+זM6뜙.w^.ԣ `LJdSf& :A:E-6 "<N(SŠ t_y*zdW*e{]LJCpRz\oHMyWb1H2VV_ySN)yD]`.Fzyd]уINFp=dK}ayunnTTjegFҠ8vsuO/zxzN$ȥoT>Nj{r喞gN@[ Ri͚ΚN$#Ɠښ @]؍$t8A1:'O0 ]Gz i _'yyI_M<^zuG)ĠT(Gq菊bwi~+~Տ>3ߥ5^.Ėݥ;斦 uWIJvRz10TfCbt8EZtoHZu}WWŘ9'}H"+1[Hnp2!Y阆^㢜RfꢰW]u`wCnޡ0qrN d cgD͢t`t*'}g AEjcF:\dFn MCBh#NJQRfdCȦɦbhΠn{EɥH>ՠvH٠V Ҧݠ"~⠖ۦݦ.|ׅTeZ`ڥcᦆ7VL楉襾ꦟmJt򦰘m dfۥcؚ!/B* 욙kަ#񚿞4y65~&9XiOSdrQ QPPuoNQ!EhU&ʞƦ%s61crVnWV|aZ?w,{ɢ~r̢z[MٙS}9sm՟*xbf桸IaLFQ njECB_D3wBIDK}M_CSU7Y4CV:aęd_agA $_6$:j7j7?*Ōrt<wFy&{ }o"DR 4jӛS.+qJX̛zTr7̟2y=Vd?BkĨ?}*ǥإʥЧTΦwڠ{Ԧߠ֦ڦtܦ+̧|Ӡwޖ祠֧٧o`b{z*c[㧐b˚ɧnPZx}"%[Ѣ-W1<3Ğ57$^ 5qJkLIy~G*B/Z8ܨ6,Í ͞26dh;y T5wKN^LdSe=dXpWEĢYƢʙmctPxfzU HÍ]<yZTϙ򢧢y}%.|!OGԙL4/19P^nNXZm8_ZՙuqFH܎ĩKie@6P墑xSũ*b ȩrA;tb@^˨ގةΤ+q&Tnpt|#hw> DMGlO;b)=lnqwǛ񩄨J`Ԩ$ PyO>@XSäͤ+)DǤH~G*"ZتQܪ; T?{檾[,몿@:MFpȤ(|[{@H.ƪ0 kQ%ɜM EnKF0x-16.~.D!:AK >i D9i{ێݎK\o"8Iw8; _(өKގ\5bdˤ(<Ĝ5`y7yڤ,ܤ! Zʜ355I}PLCfc\9SP? A:CDBŠƨ3X+o̘Ѩ0[C]~AldFW kGk{gD^`heZ_뫾tF>⛢ }_]-kIխMJ]NՔ8nŔɔӔ kOΔo֔=ݔeU ┦ժlC1 z&l /qc-| АH4h(OX,t137 9x/>m\h7=ʯM) DWY bb-iVAa! cg(8;lϣC9Zͪ+{?*i֣yأ)@>BQ6DƣwmIKx-eǯ0Q2ΜObAfkh{ӭkleLƭȭ+~pЭrStVt u_;LJ)X 6Ҕ̔,є”*ؔڔqDߪӒȪ Ԫ}gv<(L󔮯MXޯׯ,fE`!ʯ%P<ϯ*үRԯ֯0|د4¯^9P'P=f?+PG+ЯDGﯝ5p $ [^cE ̣ : V~H{>ow 9 -CEd$Z&/k*Zk!.0^26}dα=Ge"a5HbAd[LU(WҕNOceace7Ojꕿm*ʱsZ'3D5|J|E,ڱMm|ױ5Z8crj?B%"L  (A51VT3Z`w=ȗbʗJ̗gvїqhm՗sGٗv%x PR4w.i _|טh:`KyyCSQxХ֏0xf֭׭Xxf͖;hGhCHі~OtIC?&wݭ߭ޖOw㖇flﭺb!Q1󥙇X,/ L TQH-3G0H%tqsL¬+rcdѲ,24P[=v?PŲRP`˲}β"J-MT'Kf;[G|[#TD ;u@IFIhdEc0=pnTׇudTAT~^yyWI;^LmVKok0v9G]`Biw`[oJϧiI oXUT[lmh W$wld>]USaER̄1pMC9HNvdTf%|_, aRͩFC$Jfle,l}S"jkc#!S9r^$ScdB<~JBBHcD3H%zxNDL v& =HbHzwS:KBJB cD-f򏗫c#grH1Tri iU6 W 6u AlH" fEurʴicU[jC );pR kmCh䏀 k#rQ2kLbk 6BMKb-<tk*gwvQRa `gE` Ciz?OOgwE]DRXqIAS:f|l|MD: D: pD: 0]FaTCr`uKδxI|G~~bX^Y]mwllr`[QZ) PʴJkF bmy\K l,G浗Zʃ*OʴNa^FͰX^^lx.yUsуK֪aЗڵϴJ<[ܲhkxK_X4{n>ZqONNҵZ'Zƒ6[ |p4;pOL$xZXf ):eS\SuF&B%IZJ(3*D/r B7-C=3HT_aKBfTSW,Y.A01[D35jorm=rV@-oVW8VaI*-h{TaXfXs+P-)^$ a`U`qV)_!wA S6I)G~GGC;Y`g/ggcg D;rNג |H 9.:=K4 D ! b 8e:8D:e:1> T;2^GM  a 19 ]. ;MpBwgQcµAĵH\@i+uLȵfqzH˵`ѵs_)yD: D[w絒km>J}]=pST=*xAMʴ(t8Gi= RRo+yuy{P] ={ +صOYŲeY[^!=wn$`P'_)X+i]-I"`2bBODG P$KcM Uշd&շڷu?&+AcHeF^sn[dh7sZ[r s#ݷr>'wDyCE {yXf 3V{?eFE:I:E <ַnjzSfzx+]\_/c<¶g>}H.gʶggo h) lNY϶Ѷ`hwi ,_|N-PGWNayv23gɣl v $-:' m ?nB1@~ 1;\9|325 Fd \ |zM3p j9 ~z˙.g0m.±!z|0T& *B696!MS L8-k? !8Aظ@sGd :"- U/FB=\ZEdYĦbx~fYq8\+e[uWMR!ctVgiJA0 IiȵQJmex}ZR[;dv&ZzEL[wP02kڭwd[MlX-IH]Jjs "A=hyM5hSfT/FEybYo[wkTmaRډb;WePO[nkp 3 f_9p<Cnk2R Hn۵dH{x CۘloWagCQF|S(}FRZ,ٛɷ봁eͷAзFHsWTSٷ۷Sǹq߷U=v cD}mJDkئعoRƹPйҹ E KiFE<i>:s 깊f7L/)wSffRF";YgnGV9[<8R Զkֶ@eDĶJfqOoO̶ 6SAbXZL^ etIifhKrCqdv;-,gøbgŸǸ̸иoDC"| %m ո)}ٸ V7$@s :<| 9iXǢJ\-ga;Cdɸf˸4͸9l7YpsNxڸ7? #8c鸮!/JNsph$WUyVDTq׃YIHSRdcRŷ/!Cӷy̹Q׷AS2˹-޷H^$Xڹ]ٹZԹgi*/߹yU`,Ϲ_cdEr1;- +ocqLJ#irx}p.@fS7Y:b}AC0Ŷ褓N3.rQ18dgjFl[DJp]~g`Ig)F ;d *9ʸϸN! #Ը(<-˷5{d ="d@} p9E1XCN˺_rfqtFtQOӺ NesٺϵW/JN'_Oi.RigqAoA]QjJIݵP_-% l )krpuy|ZR~9@]뺭mboʃAT0H=GZ`\]E`sHodf\jzM]o =~,}e/oZ|oz ONIƉo@BQZRVv(zԺ}^ ȧϚnN=Sl{@eDG?SOzfuqgk[]Nn$' )+.h0"[·\ķCi.Y1@0ùEŹI\cLLRkRU^\[r]BYascjl\⹢ιüTA wrx{^I "$8S? ,3U>N$;η8d4 &>HzVPtzgT4WYZknKsOiQ4?8Nd  >+9; g ?8쒿^DK»\ŻC5Vhk9[nӸr_bgO?+:jd !жquVȺNq^FtPdP׺͵е`|[gXCz;~^P{{{iy<k=_Xbٰ5|ve9p62- FJ~f)~W̰dyadpAC\RUp9X;'ko\ ﺤ*yOiGI>IS[dFO\i N8"/b tF^i & VnY9apbaz@Z}$FM!*h٫޽N6ZJ_kPc?gP65}8\:Ʒ5=Zʴ7Dнez{zv J B{sDҷ?r\SMO乺SmVȼʼ׹ּӹɼݹԼ˾¾ľUTpx~񼅻Yf P8Np ؼdη¹4W W=i yhQ t[iNT'iErCGWc(+'ů؏ӷs p"N`&DNgO*<䱼7y297E pA9jN :? 8H`:LL"B$0&cO,.##:2.6A,:+{>* : 9FKh 7 7=S+:ḟW컗 yzgqFfcQ]ε}-u\w{.XCz9亡.9Uk4#q%N$/)PCvMF UZPb^[ibH{J bh-y Lj3P! |fa(l ud>η`jTz4uذƏLpTPizCGFа7(Nkݽ_ÊR`{GWvŽ (t-VPBϷԷJkcO¼Oļ)Ƽ̾ȾֹCϼξjоfGӾټ?ۼnپ۾6v`YH޼\b򼆻N(澋E^hh% hXZ:˶L6$wC)+IY/NPwɪ˪73PI֩ܪgfTwIdFuKMKm]MW3Ph婙6g\sAqQRKaooHu+XȷΩcdeeU;[fT|?{F#R$R z.xRq ~QFEηNþ>þ@VBbXչ̼ μܹϾNQQžǼ`2XFH:MͼbE"Ge[w_Np5}΅z A AöZR3"7wBWgZtR9¯UHlLw{eWϻmt#&H^vb0T֪h¡Ҹջm¥@sթχcD{^ Ϩש vNLG0O\Ou±Ƹfȸ{¹;\ql¦٪q®sª_w¯˜š}Y¥׸_cܸˆש² —m *ێ¨4绽YºRźmtbFkO3p}xPu a}F>baL^*aPJ̿BcaڿW Wu|] ^osN=G5(9AV;&ZrNaWia}#VF3P} VCbwrvO}l p翕xgk-_p>1xw*fm0Oۻ<sMYnI'ZfTW=}e#o>0o$QӋ]oms-P{G4Ifkr#agYCG^-)I[Lk* RR(H N©'k؄r]_bk'p T'zd "q P4TLɹ=Ծs־żܼ_ZʾHb޹L] Rƾ‡HpGƋSH RZ| Rln#Mtny| D6 F RqnN.D*pL-M$R+QMx´NY¶ˆº*<0z363J)\nfhFMȅ]FQtBj|ZQg/txGrEdgPoͼn; r|~l¦L0e⾠Ƣ*ŀɼÅ׼-'u)  B Ɵh0z%y{]~T3 jIkIdeB[N 4hK6v~dɭG.T2ŗK,.O  dyfhcSZkuw:E=ăK:_B} =v`9Iǁ JodķCjp Ǻ,ŴBADI1//j1${~7?Ek[vXT7Ʒê^5F/&DZ= z:FMpׅD]U_H)kl_teZ&UoťU@h3 뵎$bTдknPڥIZ_`řcDe2{l׾ǾϼpgjsŁJdÿ}‘Ƃŭòo]1PŨoÀôhŘ}ī$gD"ZiƎ]0ÚŜŞZ*<γ)jl0ļmٻ J.]e:;| J.G‘;7J. F  v Ft!5_iOgsU #ʨaecNQ>RmV`X۽fK\SL[|p*ۋ%I͎U*UcX p '- %Lt7$Hㅢ)iEZXEn+}h<șU*{KU~$ۏMPt\rbl?uVS3 /ymS9KUn%ڈVgN.AY SahTQ*DIHȯpxdVWa0iaup (_N62DhD?q0mDJWG }PY UJ_i:=r Zd2hQXqPPD[>TZBq͛nuV[yYH k"}lr-)ƿ/!çLLuw3SnK.HW/;&oN>A1hD&IKƻVoWOhSViɄjgPNt8\GYhu)l)S< }\nP\2OH:[G)s)߰?ϫ㊀֫x[)ˏT Jv,lH:N6V1cu) wh<.{KȟNɃP aGHfY)ɰunZcn]>rN },fm^|' d,_ _ȼa|x<ȫH jo)KzRVFWH =K7  IxDZmGjȝvv||KʴпP>q wOS&$$~NeȞIHXȃQevɦDIȎūUUl 9ILCja;M`1ɋ{zWq 'bVaȐtdI[)q;zxșU;?Iɪlɍ_ѷ6bŽվNj~/V!mƩj "$2ƫƵú{~$7 @RƲĵĹMh@V-$PΫ}I[*!ZjbHmft*8}axL,ʐK_Ҹ  j 8-Xn2ZGn.s*   B6YZ);%CWSɲ=. -`Ӓ H ű2}yIiOYi#+eʅ`Mj } fY TdAW\q[*@]@]Fd׵g|(ӿpyxJW}!iruLSA$TfWeB3yOжfmh}tqLԈygl{YXCQq Rt&X-&v1g[LvVPR QɅ*qOÓdxoO9{Ȇo+V@Iɶ6bgɌF2 zs -Mwx`GˊdOɔ~ɞxɰ(QȪqhˠI}@IOGVSR˜ɲ. ު `&(0g_R\PƖŷɈLJ8ڼTɊfʊ&v6xĻ0½T ĄMsɹˠ/ʰŬ˸-¯ʱ ʿƂE˦AC5E”\¦pR26S^@#C]Gz+),Ws:,DWY]H98!3$ŵǔ-N+4f%99>r@BSDEA= ƨIZƛXѨcp*whha8O?F3¦髅(C<ԠG1çN$X'%Z6gǷǎDoΧęͥږX" 䧹әOњ/c36ԠDm> ꍚ.Iי[:;]в¾͙I11J3tW"p.s,2ЩWx4LNyl|"&~ge6ʲIϲ+YªL6dR7͎P$<-A âq 6235*>8Jf̶rS̥z̄;̰ĬG̘QzwØ̔Ϡ񨬧 ĭffޠئ݅đTӭԭ̠mbx̕5ͫpZͧ̕bḧ̵Jا#|'-. ͖78ލ󧥙G)@E@( UTCQrZK;]QGX̲$̓)` d Ǭޱߩ&;>˩ *'dEG8k6K5MڬښNߟz輓̩mTs"ͮr DFfHě[̧ڗ1(id:bͼy;dRd?ͼܛ?ޛ;6IrUu\Υv֥Y(K8ٓ)1fͺ΀pZ}ť;9]&3ݤy£<ȣ kŤޣsUr ^'OœnҜĤלr֜ܜ(<ߜ Τ~Ҥ΄ΓNΒP.ؤyί.Bθ|ઁ8#b5p)#˙ \ѳŕϯ|MӜ$ ڜϛ ϥ#^.(?O.٤꜅DA)049 9;>ΩjΘΤƗ>΢ΐ˛Λ!₸ݪhכΠα̛chܠ˭y ;s={Ϻyvq6ohWͦtbM]¯K#C%ty'Aߍ͔'χ2Gͪ@E0B+ķEXC[媳dO+ƅTmVÜXŜZ5\CSbφNϟ)siݜ!$϶&Օ)гz7υTWۤAτWN'QĪ=BEJIYB!ݣнţ œaУC6j}χ5͗΅g !><όƌ&O͓:xGC0>ıͭ+~^ ˽%`r ,{I̼Ǧ­+6u~π̀σ![車Ϩj`ucяeѤw={I8OG_Ҩ6NeCjgZRƮ(גF$]~ԑӃ`Ӕ cNߢ gҮ#%I`(ny ,vşr02uAM9|d=ٟRGԇPې9Xӎѡm^@ՓEվGբ{Şj(UӤӴoG!տa͔Ӳ/Ѹӊպ)ӾF&Y06Mx&@΍*RbӽiR~*PuՀYܝ% ܡDӢӢD@ ݢ̐Ӫ <vͥҵFKպ@Ŭ JӻӭgZN]K1d3}7҅ =peYf@ϛ0{3KWaDS TK#ԆZ]]T  -T|0X=UG{x9԰ςtJylp5(k!wATz}pѐM֫t{1{]+Ξֶ[R֋UC[.ʪ)UY^.CԚ ι%7)]v-7ciՔC͠-T ѣZ,HT NЩ*lT0V +ZjJVۣesT(q%7P " k,O.^.ԐocԷe#'Q69+=/Apž.y:D&\8)>pZ@v_F3X6? 9ֺ"pgѩЦͭϐFԃqijϹv>AּϼΜѰΦ͓LNngTs!-obX?ZySֶ*zf֓${˔'mϣpytw>{ִ(ϞP׽Butx+ϏH➕ ywӱ9FNDԴ>%7Ԭ©ЯEFУҥַ ЪRI|L5NՃMJ`רF׻y;ѻ=fDX.J՜bʤfN}.юo^.Ե֌;0뎳J4׉թJq5ب1 ܕֺ֏իS XTfָտӲUW~.l_RU_קfld']Ф^jh!ldǣp׿nֈfWfү-VYÒع7E-ةG+C.eѠV8sw Yb}ӁxZ p^ў@ Ԏ Ԑע7o͠(_C\+ǨDQG9Ŏ4܎mh~CC\HOO )P)ٱY0ܱ٫ ܱxW+_pW؝ع"ٮՅ~hBjBlB)kBmBC633҅]?=H F{"ԍj ԍBAFِOI3}5nJ:MҸ??4 C٪+iJ:2%'"w%gh!}I0FJ"giڮ˄˯) 4b/o#i@(6̬@.}̞gD9QIxpڊ ]y!NW=oNc\niL, CGU1(jÇ׃ R?C2JBڬ+ծe*ٽKrpu^ў֬T [Fqs9^$<DhՉ=fɋ>;_!-ɸ9АQ tkwKb= Paۑ(QdkOГ =J|kNձN`&_H̊Ԭ=oٝFԒKJ9@ڭP8[DifxЉF TiO&Wۦ=ï-H%ѱw<C0<4 ȍ ғɂdǮcˮai܊̟gcfW՟`ʮ̮ήVoXoۓ ޓx H߮擭𓙑6쮹=4! us&l bBeb4 cwԬܑڮr{t۸ܲȻӖ- ҬYY7EZљj։?BٱوC(Ԃ/A=A4ȫ/ ٜvܾso٨VcU-Þ^kHBҨٝXQMsQJȾLNȡ ?ȘGG _Va Q̀Hוy_߽pgB6 u Oby7=75ĥƥLȠ6Iֿ\.}F݅Uuzy`>Lַ !@ڣڔ[53ܰW] C7@ 4,*ڷa/p1ڢ ڄ5]8+槻U0ҁ3͉F?Iy#@ǞLܨ~rѓݧW r P8<ˍA8hFړ IK C/GMaGݭTcʺڵW&;Ʈ SNk%bܖq"ҽM^s9̟ڼАiڀjݶܣU6 ۺ b˪Ξہ&ۮݶ3lDL4)< 7l0ۼ33f5$ݍ;lM]A)gOEۦ2ϸ(J@ CL> ڱS۳8ԙlݪ޼ΙSԹְ݊ݍԿ>݉ DӒJWY qhRacf۵77kݬo۸Ks\9ʎ;ʴ7seۭ}ӚB ͥ8۬Ծ,_X6\Σ߂@fSbZ߄: ad4ޮΟ޺!yu)X.Dԣ.֛&L۠LޣxۯDod ޡCv|A2pNӼ.y ӽ;[ۡ*$=H6V.F ۳.>[nWh/c/]L KiGV.<[>[pѓۘ'%۝q=۽bx] Г"Ϯ)n?7ߩ!ߖ CXqd\4Ʉ ]لFUb{G]ɮ`ߗ)hWܽՓݐeݓܴH.  *ޝӃzF0{ע3j ں.F F^Ş b kO =6|Iۏ;uCx.ȡ.?Qeڋ)͞۩0l՞6|׉HpHw]C.#ˍw֢Z'1)ӀRyܧb$+_߬^/1b5U9oHQ ߍϏߔfϽݳݹ{K!߮i,ݕŞ&߼t)a,嬾7AܴwpIyL9YPSLGZ܊\ܩΐ߉Sܢlou֮mܼܿ܋c"(#ߋM7~z}xwcD9iӆd܊fUۈבr`خg{0<˚5LEo🷔egtL=mzkw_નR?QR1w|[o#3z d{v(y`z订~ξ *j" N"Fఘ'J*Nb]dyp{% 3p5D7P|:,<ᘬ0@zܔ0Ʌ:2ҫj]fܐFHݚ7ٿ܂Y.ggz ѦIg׊Ҽ\X8Zy35I[gK\ []Rٯ`Eܕ{,ɯKTm q"pzۢe>*) ]ܕ!Sn1> vq.x߉]C\ߏyƳԒWۉߟ.(Q£3fYL<* ^.l5q \}Mб;kmꭵͪ-7 Ȳ`lkr㏰.=FFUI{d9H ȣ4ށz CЉO.[ܚ]`؏㓕( rtvx̱'+{ܛla) ! JdM `DU.4Jvp'ǷaȼY6܂[Cϱ+J|㎯㞐㙞aiʱ㡕Aᦡz[_ҐWqV&QL Gs-0Tш66"::4\f֛ᙥ.I M=Cgv{t%@:%u׿"Ħ>a䤞JIy|~̂Q>ԉ]ԆD{ߐەKKsQԚ ~(vbh ^H/\ 03XҥԾQM|ܭPL/16٥=ϏW ZSf\C^_~@"oJ&2;$K`\XRedX($ |䱦ᑟoIVL´ԥM]ŧ٥ubO˧Rԃ宧̌Gв5+rxθ ͌:݂?u蓣  "Jy`( +Q,Ԭ-/6uNxߡ[ͣ|N8Бձ.iQﲳ1?ΟCq΃dFο4zXmƦpة57t9U䦩X߀_!a~@D6Nr-yْA2CfM/d䁴gԠkE p}\#o.y2{ߚ8ǭEGԀ-K2M4̌w喐šݧ(abIΤݥݭ~gem#qDN)k Yͪ\䚥Qƿ IyxክMӀ:Y ωGhľHԕ WxħإCzO[SВWާʚ$%H(vͣ}k7ββ( ;Зд: ݯߝeFd啧8 F唇熄-KMӁS4uИ3}6[խ9Ԏ剟撨goͳm̹\r娢SHͦ$4-}HLW{ B`G7Ǚ]-sigӺ]ҩ{缌3䥗-@9VD|YH JLCٲPgg9i]yv䮦Kn咧 pF>:vZv(y xBDֿ΃G޻`Pطe'N' ȣdg*6zʳ+9 mٳ мN^ҳBKۣ\p⊝m׿%Uזqa֯ⰳRoo 瑷`G?ųIΙ?nc_h!cBLP"rӪ? KbF_Y pUrVDD@YKkYؖMc#˙"{Ȝ^T 9GR)D V?Xl]0Mbdo׽s׽UHo#iiCX˯4I蔱ܕ^oN8Px U4W W\c\ɢfWв֬(l謤^.VwM^ؚw]i|膛 hSRDS3#XM澨aѢ]+W_h9ߺl䭥C-twwzz׫~yɭ6׈晚|]Ѷ?KÂg;dӍѭ.GаѤѥGPh詨!,ŰJjփ؂5cF'ϻ/ф N.M)شэZ觛Pe4.QF;c%'_M灴FzʛzajTf`ocCӦnϣ o}xեR{s烯ΏϞc fJJ4ϝo֗ψ؍υ߱-x֬5F>Kh ͪ9I?IڇBy HvyiAR/13JzäY舥l;bَx?ZвЊعr-pxez$ 膺mwz*krqאֽ R齁|C7٬F)ϏE衎T3L͏TiqR-]c_CcZRS|ޝd#̜<<+ Hax|XuP[7a㫱YdF)fvlǵ\Dx̞gVݐ ڈ]Ш75Jql+H( nW̨v`^UDmՏst:N.cCyIf 7Y緛觫O?jeMGꉴWU JLPDNꑢ_dwK{|sӇZK ]pg<ܰMD eeg꫱il깁vwزWѧ.6I5͜;5з@FӺؕF̽PRGW%")pmcM] :cTNR8W#h6RZJO(cpJ ó uHD2 -o414?KRyZ2kA\ۗrpKqJP@qBEЉgǓשa# > dϲXJCO*aEaRqؓ ɢYNx<*Ky eJRbTzĦ&QfW1şӜquQD٪ꉧ&KPAR!`oٕ(t/Q%B_,b!d`V̳UWS=pn贜EhcDcT֥ro丨G5]xz<|.Z}\뀴C:I廠d g역蘪h?eCU~§zwd|{Ζ몲ޣ +$%Z[© ҿݵY\^nm,\S?5+h?4ACifK.eZښc z༬to/K-ڻhYCIye S?ܰ)?Җ@יgޝyDMW1CۨOX,oT9Vb=lvx=帖X݆Z\Ql̵zWybȬ+wٚ-݊ڡ͕ ΙݛBΥHץ/됨3έyί;շH!<z H'z[JvA,t`нMjUQ 粼d&pΞWILkfЁ1<縨qDX?ǨECE+ai28h"ԁ*%mOPĊíqQTĚ͡~bGŲ딮Ȭ /]1ѓ~`[<\$ `M-7y9yI!FH<5<Ex(b%04낎M љ4']()@A>"1/;tSv9U~AhCJŰ1Ce$ևnACf(ߨJW$'oK>^nw^gҭ֍p Q}ꚲV\uxmzҜ҃)xԱ(/ԑ2ժΕӍn9Ų ="M JafZ<CQ龜JD/͑^1Ib#\ >U4> PI? ~y ۖaPeՇ ј$*kH08-H Bܘ\=|@GCg9LĄnNntæXŬΑ37K֜hYPȯNfl6죯V]/ ȳ(d "e3-_{# 4K G환>@y~.녎m?ݕD쳄?zR#nϘgcuC#gj|~ghU{fRGO λҶ HָO%.<:튛ϼ *q/14鱪D.sE_qBخYNد#,0DE#ИxJ.<40ױ*B *M4jΑ8+.xֻi>/'Pf1USWBZ \EXZ$p†TP*SVU&XAԂa3ĥ{: 2u%K$od5;8=?$%>rn3G)L ̤ CMw(Kez-~3 6t"06}'E4A >n9]жCK \Ou&T<+ZH¤J^5gR57҆͂ԌVI; \_aMGKt3{Mm 4۠ joT.דJ9v!ޛ")U׻|󠣺س읕 .$| Х]!٧WįҘxXz[1 Wػpjϯ!< oNҥM,ؕt<鸍/C!k 6XؘHKةU֐Ѷ peݺf}ꊏLJmH%ʧ~ |w|`|pIE ɏ>P"K bJad\ӟ+J]hi#7$cM^]n}"UtYsK )r:+eq- r}P~gqT=QǃxK8!AyDNQHWsss}mф{|իR=Evbn#|VOJUY@IGelW ТCq$xXOd%=K|eƤ)~gyD'InF Ȗyu#ʻ˸m>{r+&thE6PᨎLS2j3XcMT!jrf=}ŒSAr&fDrUjrzjofS~r]jPr9jjwnj(cXYrSEjvjdE{EMjrg"RTcٛ|=)NH a)=>٣Zk mjoTcTjufTBjzr|=Frf#.TfGT`+lH:*ZBfcW=oyHoT9gu(e3w|.0B?Sp8:=NĻRd$f|]MGBCr;4Z;kL4 [Y{Jz*x*Q*wm;'#xm~Vu Z{JT<<XhV'g4)g-/BdgXy*Ip PV0l(]gf%9[f("\7a:j  nh2 yf=-$1} e:9} J'Nyg $e`_lp͈TTwgCI ՃUUO㆕Y_g5Z%k]m1wULxKb/JvmH={ggFtKg2m&Mc9TSoDOf @5f<$POdtCH0_t+$ ff~g' yGr R bMGgINQMeH'~hx{<9R%]nN%PLK^u®|ismJ˦~ZgTZuQKJnۘ5N Ѹyevhvm vxՇ@4x̴CZ idB K>&X|z/0`M3^`XC0tn{PŲDg_ A{ƖF@bn zl=Pubk"CIrNTD;^: .R:#qTfLmC mrNV.T !chqk=>XS+-gO[:G HHt Q+ymmi lIoRqW/ ɛbGli$Pg+guzC%zun MiIaݎc]+|xF  ^4vpYfWM;'Vro+0T0dh&^\xٵFWYYlpSg$%v/>W|WY7}hѦw/JXtnf'B0`wYW^F M^cQV/J~:Z*FXrUZ`FdT)J Zb%Xw%  m]j׿'rWaCKgO(T=EY!% hi_+OBgIo XyNCcY䴦DoerPQ:UffMMnw̱Ճ-ͫ@LC"H6 J;R=QŶ .WRKK)%=;C0`>F[ni M{xߋg iCYtH9HdFBMg[m%0`,Y'ڈu"mUXؿ Mby/Jm[ m {J^YFfA19]E/M"G>ge]7ocG7 Ub-FݴRWR*xs:e7aM CwGZwGE|bbuX|(3r.z|"lON~hiOPJNFXC`}KM%'Z*q9O:zC[Pk{bjfćl1uڪlyt+i[Q8tRulo"bnP~hT`ZXo?L+oU"GqcGthIWg2Q\LCaf;z'B3wAJ?נIgxGk /DrsAJaB p=6NQL9Ym.vA=[ JVe)Cc]KumF?Lm' )+g-/i24i ib;;R>_ BL\qHm[|S'UO+xh-0d/m426Nkl:C]x>bPI#>]LJjys+$ uU Xg fQO\g ]dѦnpJ| zKF[)qas8[,>No:K }N'{ :IH*; J ul7")g_І K&4gdmBy(ɒj[~T3KG JW: VurLY_Mdum 5lyogX\ie_cɼ\%Ӵ\B2c$xǛBHGy&fipHbi^bA_s&VjceoXhg%iH| ADOggakrf$j#fEre irMJrVlSjVRfjO=f[cQS\r7^r0Lje>Qj=c.D%E(c5]rf\JS<3>@/`%\7IsBHPorr_cE@jCjf[rEAU2xK%*cό0Ҍ8e68X: U2xKBz*O i1'[ er PNADh  px> #7x>  px> #7 >:mpx>:7x>:mpx>:7 *) -pC 7C -pC 7 *)pC70=>6pC) %pԷ 7Է mpԷ 7 :pԷ  70 pԷ  ) ;Am  : 7 :pԷ  ) ;Am  : 7 :pԷ  ) ;Am  : 7 :pԷ  FO7) ;Amp;A7 :pԷ  70-mpԷ  ) ;Am  : 7;Amp;A7 ;Am  ;A7 ;Amp;A7 ;Am  : 7 ;Am  ;A7 ;Am  ;, 7 :  #88+=} (n-;Am d9i '8d9  d9o 18k:} (nK-:-m0<, g8v :0v #8O8 } (n- =-mp =i 7 = p =o 7E3(-9719EAmp   #7x>  pj}W>#7w j3(n. >:m :7x>:mpj} 7w k: m(-9) *) - i 7C -pj} <7w k:  m(-Uh) *) X>7Cpj}= 7w k:?(-¯. % 廓 7Է mpj} 7w k:(}m) : 延: 7Է  pj} )"v (-=. :pԷ  ) ;Amp;A7 ;Am  : 7;AmpԷ  ) :  : 7Է  pԷ  ff = :92< M^$y&P:Xj | !n ? qkM99- 9 w ?]ؕ*,g/p{7,q9v6>6p,q9l9 7,gv6>6p{l9 7{v6>6p,gl9 7S θp踌 9 H ;-pH A6#7S ;-p踌 7踌 mpS A6#799<}mj Hʁ 7j l-j 8j D 79 9mj 7@ l-j  D g82L0!*!8p8cH 9m0v=}9g82H 9m0!*p8 n9G g &ؕ*j p < g79l9p9G q97u 94Q8mpG ] 9mp"97ʛ!6j ` i&7z >ip 8> 7 *Bp * g8;i m09;i g8l/0l #'8+ 9  *9 '8"F=F "F= #7  = :92< M^$y&P9<9>^?Hff = :92< M^$y&P*ո@ pH k7C  }9mpո 7  = :92< M^$y&P D}" 9 I }" 9 " I }" " =*9e ?]ؕ*D a m 5\~# \Tճ. =b-m -d+}#@|E-E0|m d+7< ^?Hff = :92< M^$y&P*ո@ 8U2xK8x'MdDco-X}9\чF'F;a_ ,_0I8`(hlG@ix|parl:tJZvzxpzn|N~+-C@ ~H!#96? I  VF!}*bC|AmTxi\:.[v8eL<Hf&$L%L<UfN7!3%vJ3WSzLsi:\hP K5U,-nj>fTlzkve!TWs] Jv6 W+E)8]mfWk@<WYm]M= b&7/]'WdX3g#^ ,J'<[%_e [~z)hkQVE&[A1wDA?mbZ# '8(;ZihyQwTB8R8w!c.M!X!aWfedihlp)tix|*j&6F*VjfVjҙdG]S P%5R2J*Vԩ[˘uhYS.sֹeOݺW `5b!3o;Ylc7 hQ]-lfVκvZ9KkBgj;]ls xѳ]/|V޺w` lCpK78lH4C8N"lCTN/8=P_8r9F.('A+1N(;_@ 2/r#) .x<(;c#^*[<\Bh3_qO`9L3:RO59:\2Sl +6J .5`$X#%PSJ H0yKB ! G"paB drDDI`3C!9/@2=&0C6Mp" JBp"t8 Ƒ&"q @'{4rP4Ix <8C V&3 T0L @9xA7@)81 v+4@ \8R )3-"APIQ B }@4 iP ^j@5@*<"0*-TC'(C6 %" UX!k lCUd 9TbyH$b|X kA8z1C :jC : -Ch+pedz,@рVKІ44a 6 -(QbmhOHE?X2,Bp5Z 6"+0UpE.QС {F:Lp]\ .0)6ЍF9\Q_l xa Xa{B h @t >c _btԣ 7 \;яe..w">\adCxP yx E=0" `>{?`pLF 1,(p`Ё `(p@XXPCĕD46pdAQ`x.:2eXC08QȠ= a2PXbTь:bΠ PVxb"]0r6cu@Ơd#7;PpM B70Wh>0;Jh#vb@v [X! p~/ va4a Z P l8E3=.wa:p 6v>G܂h;}xθ/ьwa ` <¸3a#/1JрbL V `T` MHC D!C=R 4m 9f 4Xh" gtЅ @X˜H -C :|b`N@V C` )vDzF),С0D Ph`xB̑ W!QxzF0a^|C C'Q k `>.pO W@ 4pG%syX!005xtk7:*}Gяx/W`xE-J x E!.ܸG)fTBca=! G<6 t)@%a{uBP0 %pP ` @@X&`p >-p@5{pfp ?@ 0@`C`q@pw ">p Q\`s0T00 ~Pp@-0` hp@ p @p>x0. Pp>0 ~` 0 pWpvP0Y p `"8pQ2 w@ kXTS0p)0 KI= 0 M0 `@ pP 6yc z@ V H` xx` i0 s9pN vIp {@ `  ) w @Pi ƀ Y `t) @G 0` p T PiP 9P  ` X   q i  ) p yНx@ 0 0Pp 9 ֐r 0 0ǠD@V y p    @Y @;ɑ{ )$i(,0)4i8:ɓ> BIFJɔN RIVZɕ^ bIflp)@vzɗ~ Iɘ Iə Iɚ Iɛ IƉɜ I։y priape0/s0vp;[{K06 0@4201p7PK;10`502`1@{0;ۻ[s@a  a0hk [ap͛+;؛ڻ˽%P0-dbP- . %PC etr A@LB @hPKhpn0.%@i@lP prpKin@k;/ 89p 1:@71Lo0uetePdF`t0evP$<a?CLP ?}l`N CaD QwC|L"ˉ34  0mI@\<l %r0 @m^Z]> >i-D -aP6 `n0v\6d\\q@9^L jn#.̣ye<bl\tPd;U?oWSP]]MWFD.n"u4r'ol0[gODa6s~Lfh7Mo|_wy tw/-v;^ie?{ePMy]?u nMo$ P*=P06noK=q @/,=ȿ7 ;c}M 7`. c_U;쀞ky&J.CiЭ@7mm-ݿ@ L'b@xmF.on~㬚"~->6ceV }FfYy{v`i6l_` @K0O=8] `D6ּ  ϫAc{&0 \,h_yP@AXʳq2&xl 8qp ״ )1VHbL/IF>eKpD6؝SPД^6 `_-jL&C,B:p _+l_2Bv#_3p p. i.Du,1Uȴ5_Āce }hvd/p 홇 9%b@3r}+!a-Cl%5 s]8ю_d^bF#rXt|?z k,@ #i!2B Y"1C =LQFħ+$đ1A$38R/d R?HzLDrJVI!ԒL6: %{,TB+ L:G Hd|47@H#ԓAM:F)Y#%}LPvH. "aQ#)($DIv'$2PBJO))y䚴OGY&䙼RMJ6Y*{H}D H_Jay*wSyYEUr8V-  PKk9þ8ܖΈ\Ap ey[2'e[Rr.ėZ0%/H\7ˀ0f<_KX_ b&>).5Ęck-A dv̓i1KS\q8j|,3ķ2Qfͼ"cL92Aɔ\8eM34J31͢9^L|U3`z̬y5eޓcvM2\`\^Lt6EA3gͰ6EۜlM7Idy]Mo03D -K,f4(3fMy6̙lZN2fD0sBΖ9/gSm̢91䜨[| ; t>NYp23uC;`n"NY8gTc0l+wHZI'W$ytVJY=dK2WI)> &Kp21@5Le2Gi>UdPD9>3e|2 ^bķ-gHԟsN[>g$Tj%OwO 7c|1x>K8ItzӄnLĩ8;W.ӆL0uh (TOB?̗@4&QYCcjNPqhaVxE(FTԊ*Q1DgEĖ8_;0-*.}rTdG˨tac@*Eۨ$Wt E(!ţq*Ry.e$ 0R LN71r<Ʀ> NH GXgD_\,5c#ߧIF\!$^\$6%d7)K3ߞᬛe _a(Mj{Usa9,S?* ; 'X2NݢKDYjGSl'5wWcZm[1pU.ޜp_&}k -`ˆf/c^Ԭ>b,`N̎3_Ɯf23kϭ 1 +͔Y43b xU`F͝\ZiXPƶ6ۜy`ͭ7fܒes 98ck=/@nLovv̮Tc;fl3a&σ7 i y43`ς>fl]\te F1? :͠!368)dJq OƸ]a{…u֥rvx}d=c\o5%3:j9K[Whf{elQNHz5G.aj'/nIZ-M4#6ӀLM2͞%j8)sdv:}tcOc03._Qʴ:IoG=x#ὛM#/u&ězl~ !(QshI4ͩZ{iutNӵzlA/%լo0}ugYid=65z'.X[됙5޶ԚWP. :FBrnmΫ&SY˩9t7ZBe -&@YD e>XstE]pa_讫3mgeFݑjoOt^כ3z:EYVNډo]{b~D.KsX͢TfIt6\11~R${T;gc{)4a̽\lM˾)*fFmH/번q;r4]rhɇ/RR^FFaWC2_:JlVe&_M|1ny3w7ZkfJÛ-Wvw-!ٖ26KA",b pܛ_i3U,ӊo,{}k{ mh>rl.a"tjӼZw_\1oG`bi^5ǒ\ 5^ng9F(U\ѿ ׫-Yn%o\8v s 4K ymmr#jl(_KJ9~q LoZ4`½ϸ7k+s uP˺,x\5*kU9y\ r]Wwl:vl0:vȿujn{vFtZ nj+|WǼ!L~Ot.CkͥܗcM`%q3v.ψp=ьZ(KG+=7z)~ p@Sj5Fo ooq2@ `l +*hGvzɐ (+aM":CU8W${F@m;ܐtZ4}ó"WzKtE.E,]E0"J]Fu.<]0"^)/]^Krmu_~{UWZ_}v_+ 0RvPk`}I0 0d`샅0NX _00FJkث:`r`1 vɊKbd ǕB|mbl6΁0Kck8vc3G6bIoMȪ{ `̒mL6 =Yn e-ֲ[fze2oBuLڹc Z3#cQ3u Y7[g$ͦQ3@G|og67?X5Sv-e-BchK4I6L ,VhZS:%m`S;j0 ԶHj-6=Y{k%5Hk,Ю5_I%/Fxbq6EٸebmIX[+m-Ɵx)Xsm E%WNnc6lM+76[qn3йې>[gڦlV@|oǭ'8`}8zق n FF<؅Sw}GLm;~ 11+HxҞm /#r[)9ݝ5Ks M-GsyC1%1g\@sLL-?7&"Sv0140g. ݗD䮓tɏw M|WG{s /7bH΄?NدJ1OфBavo+aAhCቆ] p=UA)!SjlUauz [Nh aF)h@NOOEބ\EX:I!Wʅ_!jI,%R,=T8,1KT4 Sd=O˶OS9e9yb?e9WU}0VixN2[[dr!e: a3;d:d'Y4d+HF5h :!l0V'T== ˦:YR3b8Q)6Me89uVTl\awއ%&umY*[ȥ@YkբGaP"*' %:P U8Pŕ;HTvE#QuUQA"XDP/x$ZTEyQV`%Z?bNZ_8U&Pdԓ&^wTgFQV}&jVmb'Qs"'bRTgHSHW8U(Q (>cJSJTg)~)T-uKyYR2%Sbn/5ZST4NmSh'ʊ!kyվOahO*S"(,"[;u,S6\(HSv!"7_H>M`V!hT"h!b+`pJba3LX#pUQTmBYዱS51UQTTUKWU\!"Ø/UW8VUsTUS\lUc1U# VVU_X@c1V#b/jьd%]YV\ŕ(Y(Zj%]V"d[Vk4VQ#h4VWcu\IW[o\ WUи5JV_hX6zmg]IWoE^ymU]yVo#T7Zmu3FWb[_Wb{7VԆBLc=7W}#h8&cE!)b]v"΋*]#\4.a"(x& XT[ZchRX2gVD֢;~XcRXe֓i=Yt֒Ue5YdeAYZde1YQfYZV(fUYl֘=jZcU>YcgX#h YV>jZX?.Z3hAZXi]UhZsU@RZUjiZVZd@N*UABZVk%[Aʆ!$TBl9[–lI[/$Bʆ/$TC&[7d^er\ؖ֬EFvZk~ H}h:Var"Khf6- \Qhj] Lo/V$_-ڋC摵\i&9km8ֆu&Gk7i\9;F/aOHENFfF†-A]&"FҎcdO6ShĎzX/Bc$xQcxJ_$!JZ^|(xLנyf*yiW,50^zuZLbL&bȤ5Ma%|`٤0._7 LW"M:_df~jW N$4N嫝_W~miNb?)O}>@9`CA`ޤC MBΗU`'`$ F{`!GNr'I`Ԙփa G?o`/%ѴRa}L83ٔ(9XaYe~džya 9.uh#ע8J[qe4V“LyVe%[^X])&4͕֪͔x]٪/Db#?Y?bYa)b91cyA3Ƌ1ceM:c1vafX8acʡdZ%eZzc>Zb$ֺXft8řce3y[]xo9=c3o%>YcrY1sy\oߖ[:dw)AmeFV3v9^k.qx3JZ%q^ {يJSp}i_daQ.V%`z&) ?!lIYTy"VUTYו@`2t#9aaa16qYA6bqYpybb%&)ei٠Vj֔e`GΘ6$c~kJڍSBbY^fYydEadnMIfzdeY^fUfyeYfzvefkiYmVf:fY3yffitghpfʘYno/ygy&_FMg}Feg+imM虞i혉&_vh:fzfgY^mM혙&hfiʘ!Yhyj2&$ִjBh؄jš&Ӆjb9JeT‘dokv#h˛q"l6zlVٙWִmWڎmzFfYi&FjlnzhZ8AjfnVj&Ȝ&7dKNN'oM翉Abگi/ijpj'tqj9Lg9ᑥZqM!'SiL1grM5'٪jqkd鬑=gsn[A'1گ֭jM't&QUj㚴Ʈ[Dr2_'n]E6k5Ynm$"*#wdW`^MdlRkRd9P;TBxܩwHa!҇9 }$t l֡k(R4]rW&lr[UsӁ*'IVR6{C}o 5*_yr նRV[4ÅRQ[4U~'A%PF}Me.VR. &R..U2N R%V$~KU0yfLHmڟ%)QI".җFzlK4(n^F?U\({:\E${Ut{g2%?'yo۝E=Ѡ5-S H 9 zXpE(t6.Z[g0<=8 kM EZhvWcZVZzzc0' geu5K[J}c9Vn ׇnØ2.ަVnIns[Y֪.h%10h@z4ٟKzas˵d-]S5؜նTV =\\:͑9T=sE>7s?tA)tFD,Xt`F!C @Gсt"IguCJGtKC]M7t92ڍ:mTT3jPfi tK (ub94u]]jHuz]r0nKVu (*uҺ\BKVuvicuK"-/܋]uTfz8ig v b/ 2ڍ0/CB|w90 Sy0 bGڱz(Lm/,=@6LC1HvhRovs 1q2l5]t wXwTiJ nwwU2y RC{`z'߱w{ߝ.c20w A3^5Lx30xxӸ3̅'i3 `x4MC(LB/!7A5x x jCx獍'4 x_'DyG8xEAIVXC5-֔5U^#5ALM'5wIb96dY6K^y6$M7 %5yK^kz̥G6(%7I R3jTz tM7AP႞w؀7[xzGЀ52L0CzNx^Wބs{H.XU{ހ8ٞ 7R{0E#6穹{鞻w/j{b#{ޚ3 !<:ߞS:b_F!:@||Îwh|NG~|֗`58WQ|jA< c| m 'l17}:<|7o۳\5>qkG~ 򭈠]> 鷷~Mk*>ꇷ~1O>3C_,#?y6Og3 +eh<K ?k:Ϙ~Ph@`Ǻ:@`?f j@ ?0;+I?!3@7Pz^D EdA14:n A;`$䏐' GAS묚A 2AlFAZ >B_ Jzgƣ*3P~^B *ΰ)% ! yhBȐ# fx$( ݧ uWW)9@jLF `>%2F)@ `hC$И^7 ^DF HeL%k B44M *4` w@QCG8 Z:Z;1'<EZ>A ?!'@qx ab!Tflhombk^&Y2쯹HNfU`޲!xb(aJ)+ʎF%,lI*`), lβl-[$5Ill a ^Ӭ&aK&>y,I4|h,fq2ӢxT0RC^I&%AMU{y&M3$I!M~'$àJˤ'K;DVL mٴ5m2nlk~&?-GMCQkv(#db -MI *RRyZ{I+^OZ ~\V]mFe$m^+CRHVQJXKD=#ZQE:-DٶyUnn]mF}QG] x܂j"r[OQ\xRÈR-/umQ㭞ݢbx9G!Rb8ֺa/-W&Ÿh۸a^K)~M].фYTT*~m0uKRn) Qn,z:SO(7E{ʵT6|ԇk2|NEaB{/ՊAƸ+ָDBw6Kنl2يeRH"Fc%9ʝ캈Ro먕m8&h#^E0.UÈ檶=sn^TUwn!B\ɵyz&U~nXzdD;TvK2&WUh.{}Ac[[1jc_⾌!hKA].UyU2 cV(º-0V7VQC Ӱ\A㰫ުVmfBn[ͧ4NZaˮ ZyX}KVKQ۹\r&쪻+ZɻC0ԬVHK*Nnƺ^;5 D[-2++"IOF&-Ka-ؕx;³8Xnxc=+闑XfأgkA#2fY SFhT띡YW/ZZ(U+T/ hrcٛA ?uJr/[XwՉ&woYoe-L7KV6fI/d9CCZ.D B2]"dq&BG e[]VZe/Z/e¾NޭJ{RKՖ[j*-׾vlbv-=Qo r+:[#A\OFٶT)Ҳ!6 ?sE;ZJůH[:kKeT"kNϯ)vl Bd9>aE[ři;K$ y^1LC' |բ :sfDkX& O ߿"~AXFd`F0 L'p M./"79Rp`~: lZ0 3 l M~Q dziÕamom1PW< `0bQ+pYvqX7o0\f+$lfyi[CD.p!l  ¨+~d@Җ·0*<Ӫ¹px ½0%| 3-< \1Y0 HVp.Z/l*`fY/*mlabK~1fVHj}1fœ wEPLjVfwhIĩ+B32杖iD| {E1iW*o1Efb. C'5PwĆ`v'>)q Fp괿N9(ɩC@q[_E1 jjK?SSlMK1R߿R1Q|j<ǥuF1XŠX7]Olhq-<ӊDרAhVD'\F1_hgu5-&2@M(cXsN1U"No:wf ͦ&Ӆp4,NKeUl`Wj*:P!OֆWNDK.!u+-R8A4Jh R2L:6mƘ-ŴUYej̱[1v D8j'RlK[f]em[lǑhZmqzrQ}gW(}\="wU<\oUS֌TYۃl:YD;8ZW4h]DiZW4fZW稅0Rvװk gM7 c4<0ol^9m Y؆\_)p[׸uur=\7׆qoך<;,a9Œ=˘lϞ,Mbw8/[ВKюn[&/oglLnl8\\ǵ: ymh|eеuY'v5gHm%Fzʵqk{B!Nuj2ƶ~Hg9ngK-MEڛ~1mqrk"q]Ts+ZNgim Ҹm5|[jp j3'NdsWmڊ"5.ꭁN G)ے";ݚmH㪊TB+nR v˸".ΊFv8QvڸB}'{5OvE=U1nb}qvMkᵛ=^SU[I&uiLQm%fcٓmtmR# [ 边cm r4q¹[r܇.[s77[ ;Uøs/hpEw VOw¹ObUwy3.[L.wֺlu{>nΨb|g[x-o~UwgWwa^[؃+fWxKfWxw {`{mnиy#B`8z;7_=fsĽe]ƭUX/pO7s`X vifX6+<Ƽ#Iʵ.}Yl'[ҋƼLE:Y~[~ޙ֛Ƽ[׻1X[NUfYb/HȥweʏڏpۛAZZu/߻ƼR uoJ^8ZZ/ۂ/ yʵOL7K[tʐkMGt?c@vm1 ^NP-'M$` |Y}{o- ]Sl~wGo:cxk|{l76*)7+G6e-xXVX8m]w-7⵷\y]j6͆ޑvLP0;S]M3e*nVJc,|Z/- -. ⿸"bl402 #㱘2> 3㹸3_p09eXFefix?̍8M<˘*r^f#J콥;f;6;./]Vx>0i9MA}*Ŷ㴘 lE䎚/?L-En\1oN˨ZN1H^HIgJ. Vkvas\x=9vMnKNwְy];q{d×iu|g l@bR{EɇZQ+2S\z&ulL^ńpry;9ȚͤP6hL Z5mHǂ^o9a.K~9T1^KnY~zm9vo֘{.7~inS^ѧf^98Z7d9m j~UC&Owu^Q .Ti5 Ǹ*Cg|Հ<5{twbK*fc;Eۭ&!r(w!'x9Ğ&\/LjyƖ#֜A.om'T\9i%cMr9, e1F *l}rfT5aes)ކ.ͣ(():)o4O4vV9ڥleE)<5i)oXK*St*ktLSѽTʞHl~ZLl)z̽r+cQ5S8kc㲝ϡ,mezF2R4NM2i/c/-k.}\L/`..[34 ː{N 7G{Իt{S6c9|ʹY0k;n:AW&NηY:q0|K3D;^.;˅j<?/Aa?^`_M {aTDDNyE '&>S?o۾IC[11)I.~?<2SˮLy{4_J+r|ᮭ{n0X<|>c˻ȻZ6;?L!::=1| +%L{} Kѯ=쾼}nɺp?ғ. pF.|<] = p==??ŸjT{Ju{{'>;hfN>N]h2?#[(;_E/o7{ʍJ|#ǟCRc>R;U;Ϟ>KG; /3nK(/BR_0U;f>P E|K}B;[I}[kw;7#9>^ λ<5<G|~~=i_ο'frO cѽU7=C<9o}ƾ^{ǣG/ r.{/ȋr|"Jw|%k4U%_?.|s֫wsPui|^W8}, 1Vbˇ}Jō?>󐿲/ͼ8W4_ͧ>2ط.O{Ļ̟E_gO'>($B|@fM:E:O>r/2G.D= w߸/ګ:+ENr[kW?.3ߛp-6ߞg' z9>) 6^|þ힫W|"Q=Q=[{ d_"ߣu?"Nܫ|^$ 2@ lOC*{?ސS܋rz@7|-8<` i.z?_ xKf)L@eǍE~oNWkb:f_|)O[%Ld>E`]U߾ ħ ,zI#% ,?`xj G@*`x8m"` q@0w `\s>p< C1@@0Tf)`h(NU@=@ P{8dF`p `1 o` \. 0\PG@Z! jp  |  dK a@`]B8(m@`hR @ 0@H0<6=p>4 $ V@'  7hlX@@P; p4HZO X<܀W^ OD@ (XE@8@(R\@ pD"k u:  `4@5/ $N(<```t}@PM00NJ  _aAY@ HT< `(- * h-` tnW7@8D;+ xDqv 0p@ \@ \ F@`HT7k@@ PE2.r-` f& n/ ppDvx@8@<\< .t~.# ۀ] m/$@@ 2 0P"  (X0r <~ p&O"@ PbE 0dA# @:w2` 0)P&z@= 1I04 S @>  -# fG@XՊ%00*4@4`@ 6 I@Apthd 8)!@ @(|-z4`h4@ `0pP@!@<X@ dJQR/  X#R'@ 8f)*p P94 0t&( NL]@,V`+ & H R XF]@ P,"`Rx[X0@ p,f+p^&S`@``J"`N@- Phx}X@.` X  i2@!X<@  D0LmX@ P4i6 ,p X\h`"`XLjԀF@`$FwJ5Ph.U -0 Xvn` ~]hGb` |+-XY&; e)Pp.@`L.&63 v|@* 8kpX(vX HT;@l0L @< @pTg.@0X]<xz<@}{6S!<pu `Be+X @ǀlP`p/֡PF 8/d Dl/` JYP `@ pPB  (5`>  p0f@Nxr;0[2)  HMd\/\l3  $b,@`h(+ ALp )HD&@ dbI 3ZP X3` @,.t ` L3@% XLqX@@04f0 `] 8B݀% @b%dL)`, w6@ @:ec@ p@/  h{.`ppx xtB@~ 0 LN  za@ Pp8fX(0.z+ 0p$m%`  , qŀ/`#Pp?e.@p8mY`P$P D /@ ,T7@r{q@:1+ P>A st {:n@ pxz~A+ \z@?xo=p ^@~BFx P^? .!5`z.Fr@ <M!a^x#xdN7Pz78 8>l?@  0*8*hQ;@x|T(   y7`<v *@0D?/cp0IT` hQ#M(7O"pl} @>7:@h%p$@@=kp@p`P~  TA90(@ 5X` p j&@`Dr)  8BQ@HC@ `8 @`XG#ߑyd=G#ɁdA \H6$ɉ""yHB6oGI$O)ɕdK%I$o9ɝdO'J%IɥdS)JV%YɭdW+KfʒgɴZ-K%wɼ^/ L& b1LN&+f3 M&Kj5&gdnrM~dq8\N6'`:YNf'dxrYO' NJP(tS"rauu)aihB$<4L֒ %/e _TG[[-R@U -G R@. r_`88.K G@?.|x.!R@.-y{@.Kd>.˻eB8[- @ @@8!0`x@ z20pi 8(>  :rP@ X@8`p > @a85+ p !   CNA`0<@uTc`! ȗ, %, X <WX:@_6)Ρ)@v0@"?@@@@Q J$1 XE 0T@ `n/vA% 0A&`pNe!(@P@"@0 h%[ pxր "q( p& nDk4 xE . N@u>` v> ppr̀P'L,@(` f@8d0V' ,@0hZ@$``i ,:--@U D^0 D/ +0XPIx%`@`F @9 p (`4  #@1 Tpp^lGjl@p xp1P 51J>X(6-:`phh?0D7Cm"@h=@@HS5 HN @y`(, H H  Lk=@1qD(Y"0P`YP@$@$D32 P@- Ev|@XD1`X(1CK "X4.a,k$0 eTrf@SP @$ FV*b$,P)LFx@ X"!`tx|0'`< 0؀T. @`8D>*Tq@KVڀrG\PB$ 0 `8# p @2p `45Z bG@<` 8DE4@av8 @1H(` }p2~x0}29` E  0.1* \7@q P:'J1@c,n8- A8O6@%hD\ z@4 `XX i@<$@,` F@)qN.(>!FXҀc`0@H}H@  x h`@@Q,&@3px I%@ H$ ,@$ ( @(p0@@h`hTP`,8\<@ 0`u$"P` @ og   @~@9 oJ A( (\ ) `uwpA{j 8@F`[:04" @, \BF+2 pP;d TAs! hÀ @8Mxp W.@0"6@ &[70@@00€D,\CGPD!>`p(cy1  \   (X"@)`h@^0!` V3@IA tg$- D@qf< @+ P   2@? PJI@ P@*C 82p Hb) <:" p 0Dk.` (` <G& 0`V(J`4+0,q~x1`Q\;`&@D'|m&P0 @9 0$V!+ L#c Hi` x ƛm U ` b@@@ @@p@ [@@"t 4 p*p {PHf `4pL*p0@ |P 7@ ` @H*,9` `\zTwCR3 h\An TH:mG,pxD@=["@ H@D;OW)@84 @0 RX*@@a`C8 ,E @`L<' 88N& K(@V1YH * @ P4-" 0tw  * Q 0fpy] D0PÈ@.*'W`E((Hd [Z 0Hd"s0 @n1`  j+@h#  Hf`@2 p 4: 9@XDR] YX4$@.08 b4H"F`n8,apŪq|M @ lPb#.@(4-$`/X09@J@ (hX ` ppPHd``h@&s` -U,D:d%t}@@@<1p[ Q@1Pw"hӀf<  Zp ?` +(|8 &&q"85D@ @  Sڢ P@tE@,`,q~ @0tr@B 0H|0@p \̟  p|ld0  ` H`P\P= 0ǀS@P s}`H8$H0pdPp\$ P,tPeBC:Q@D a!@0@@' <G-Lq 8a@o߀` hT 0 dQ@@4"X1 0( 50 /p`=i E4Gr^@  tKp/#pp 5@XtB@:0 ?@p `#ãFs 6b[ 3HPAp"~ 2 ` Pw@  8P";|@ XO!`8#!@ Tl=,8Q_-` ,` =Q@) P@BO ( dD=w`@(K?@}2): 1') TD`FuP*u@@ @ xCe= p Wb`90"o`k\T @ `8pM8@ Tr4p@HGC&-*PD2@080Q  0@! `0@X"LE`iX:0@ 0 L@R@?z1Q4Dg)@` xq `@((H ( @>H NR>q $7 p*C.=1RQ@ nU@b@t1p`X`l+L+  `4&0dݩ9p dP> Yp\&``nJPc|&<8D jxPt  0 @$2@ P-P 2@ (`H,4 @ P3d@! ` 88T:`PLπi y(`A77'H$&(SHyLZ\f<>00 )rb1`T^(0ipC8@ xQ 2`V@"PP\ ZPZZ%N@$hNbA.nq  ??R0@` x R ]` @ֽt8@@0 _*@0H. ` yWxc @ D(@ \n8 ˀp y "(Tƀ@P^5'@9`` f^!Bp t $ $9!{B 0h"J< P `J@9114 xF@@ G9! `HXeH|$( pH kE!@  4@b d@Q 0 ` 2'`((݀t`lG,P@ dЀ= 0@$Q* DJQ@ĐV;#ɀ8$9gx `P008$z H`he`P_Xux`@.h@P@*-ɑp~H $eJ pi(@`_z@<`/)bb` U XĀC'4SK)*.LZ0q@Ed'@>8 8@3C4`NmLRW\4P(|'ewh+ ^Dz Y @ jt@)0$ C@|$( `2  p7@zV w  @ P>P 0@T).!P$^W%\KC `  dJ @G $@`%ac \PPS@h ` t" 4uJu@0<5Z! P(@`d)I  pXI#X\H) 8$*H&pHJd?@0tUS`R?TXD%` P|J6 _xX@) E@ \ 0@ :@spFa0 O'hXz@P 8@ppr @saW0MLlw 4ji/ C "mz B H{)(@  @@ @$&E81 0x`C8pJS- @.P` xL+3 x9 hU%$@ p?@` 8&  rԀe` p( |x;HD  @[ ` pZ ``u` pc@P HDw#  q2 0 dj@T53 @_ yQ 0/E4 (A @P8%@PFP@7`pP8@1pL,$K)<Z^@` H4 5@" ue $m @ ` L2D@@dF`@ (G@! 4@8`l\)M@`,&``D$Q \(`D=eu@@(y@`FtY 8U  Y' }Xd{Hd=1 /yXL %04&6P [ `ъ ,,`8T@ PD &O'>{ P7S@0@'|" Z`idN>@u+K7 00ڔ P TX`P[e&tp(Z+` Sq4*`p@<{6E xFR\=jBn6 j 3QF`D2@0X/4 `\K^|)@pH !3 xn lTe iP!`` x"'ֵWa, 4[̀  pLyx(@`(X'4~ UD@, 0 0UtQPTpa@ (@02@>  U@zC[@RX!1@ P~ƀM@U* \%`( @v`nq;(>M 1 L` Xz~ L A@+  )$qK5` HWM+ @3I`v`il2b 0>  P/ J. Tx@@ P<`QpZrÀ ` RF 86@X`DMj:HN?$ 2t7@&,Hy@Q(f4!@ G( a!e8f' U !p? \6 & `"] @Q  =Au  ; &`@FRp|@P@ P@y `PIX*t  Po0xhĴcH@[ 8 >z0XQ:A $@-4` ` fP Bh h  (Z9( XPDM P @pL  P0a*+b `56B,!  @2@("0)`+00` 0O$$` HF@15LJl^M@P.%@v`^ m@Zd[## $2Wq0XRP!P@c  H.b #>mÞ8hk@> 1 RA@ H.V@61 "KH@aphB# h~)@`0T!b  @2@ Hx[@ 0؀.@x@l8 @Edz0-6@ pp@?Rl(Y]CXX K 'h\@,0Xx.p!P17H+*Е<Fh n!-W$%M.@ `Zh(R@pk @ p@lDHBI  h j @,9S  &JX@ xBt_2@!@\ER3xp A@"  jv-@+ ؐm @ pȀ' Hrp!@ @8@`)`i-7`; L:! @*Gp2@/`XX-@'  pBL,p0  U@?(*h0_X PD99 H 2 8/`ȣ30Ҟ,@hPi-"@uM&( d6'`BCQU X1@ 2Q8   \`0K1)w8`Ԁ+0H-  / @"` P Q)&H"sp(>raI@b? F (L 6q`DT1Pa7fa8T7 01;cE@(p&9B@\@ h9w0dY A@-`|0DW,L ,$ ?@@f:8@hJ@Ѐ0(̀9 X4u(@l,@@ B w@ @0 @ P1R@UX70@,Je) PPt  XT[!D p@ k-_L{Q[+@$ `h0(55{<J,L/`6T@@@@  nWuKn #d_ɽO& @P"FD!0 T>` 0G4P@(`@,h,h@ @0ea&\RA@ . V<(5P Th@Pt*Kqp@1(B Pc`p*f@%JE@@ F @%@ { ><0)@0H0p (bwSv  r448ڢ!@ p @ dS @@ b{D) @( hb +A2y}k pp'8 @,*0 h0B)=`Pph2؀v  l $h`m<0Hb`4!04uL X؀' ,@@;Zp@ :Qv@, Hd\K ET@j  X*k-d 4 aPQ<`GSoʬ` v4=J @ p ȗZjN `.,thhp !|`XxQ@0AB@ĘH`@ 0*  ִe@ 8{B%' 8*-@ T[+P0`h0@|q `"{& B ` Xr6a)@`z @$@ (9 f1>dr (C%`pB# ! $C5G D4 >/9 "  hMr *\B 6Њd@̎: @E8VT9`@XΪ!PU\/ H"5o0,L0NE/  `|A9 hV@H06DH кXŀi rL`Xn4[<,psN`l#@ ph$` @D{wpa>}R=3,0 8l 7`T20?2u`4M;@`Fj P Car plT̀lF2-x0+N @`܇sQ3@@ 4,$g7%@VN Sy@ @$2L+"%7o`, H+E0[N@: \D% C p 0^5Ӳ`X/K iU! #(1&`4)CC pf5` @`l?&W9 00J/ih&. D  G84 0,o  0`t](@8RLa(BW@  hNS; "XBzb &0R39p< ;(LgnT( &Ne 0Pv"'` y0ӑ\8 8 x@u(0@2 =@P4hx@@Tw3 \N`Rt ` Zx00@A !7@ -JóR0L^@*B`a  Xx`P rd-+VcN9 :(@((0`( ϳ,@  .9.X0  x^7  2 `H@^!IUDfg t+&$5@! 08$@*% `ptSzq  @,`6JiHTh@> lQ@`0@4h淀`,z rt7--`4.Z@*Z.?$T@`" \X'$' `?@(h@2 oH v&U8% V6< hZH R` 8iPlJ` P3V p6865@ 0(|H9&@U#< h @! Q@`T @fV@!=j lUo4 @*P Н9?Vk 9C@d+@3h.Y0 X`g FL^K@2@.: P7Q>G @`` i=AlS@N ttj!0 xLJ4@MPf9P#V K@QC"n"C 8Ij56wiEb@` (XU3KK@) R XL*@Ԁ،!  RA@P `,]@ :l*{@8 J ` DPv}2 @PDOdW80D[F , X"^Q. `f.@ 8Cb@% 2A.qx>17x؀:6 0 ``DHf `G lm4,/aB/@x$)}aB@@p5J.@ : Ĥ  T5@W"x@r`J }~ 6T:C\7-mP K=@ `T6pj`.M$3@-`p rBE@0 X..,\8SRx V^< EUz\UV* t/aWC8  5 (+!@dkT +L4w`pFbf@`<bG:@ <8@P+@M00l=@@C) 8[ `_rtP6T$X i0fhL `!1 H\>0@x30ʖe#@B]ZE&-$LFoJ:0@Lf(ek/0^֐0XV”*.C@R$h4#I0,]PP\]@2?v?:-@pJ6 p~D 7`N @x}g݀G)``84I9[9 m f038ईpP>y41p/`IR^  47!(q܆P1@u@!PD8j-@ @`\!kAg< @ p*.d& J. Bހ4@(@z :A7$@ `qqA@Z*L PzY8 4 u0:'yLęg#(&28%Jy@ qc pr*PDgpxj@00x2j2@(qF\;0y*r @ 8%@i4&+*"P^ T0 p B!mcysn`@" 0%H@a< H @ XTN3` 0os~0<K/p+'|b#K dd@ @%m1m$VZwZ'6w8L 1 \ X. p^1?df+6 ' vEP9wTf.k@-4J  XJ2`  lQr(̀|0:[@E6@}O@(B@ 4"h'`TH8@&DbEӏq S T(pЀ@ @PqKiFQr[F" ^j:@ռPEw =a`@U'E+wZ( * P6*Z k( %MdP@ڞD4>''>sl5@X<"` L!@: D)5Zr@GVI(6ak@` @dc@ `8g U( (O@>`-kp lPۉ @߾>p xIK3!@,4@*PXRրD-@Kq*  l @.hT p!&<px.@ ``NÀ@1 n@*w8ƀ ԰p%(< x~r3˒;xgF *Dr4  J5 x| |+@8 H :Z:` hI[@PwñQ8,1@ Lt@2`@ zUP]@$ )|@/P*'G_> K@a但o HOCt_M@0 s4Ye -VD2 0.,$ dκ h@`6`M1 u<`Be-I 8H(3h*8k&.=H|c@,h]0_MPZ@ @ **  ۢ@ haUpztP3@!@ t.wL XBG^i Lmds `p ـP .6 ծ8@}  Th@#Vr@< $x^"T4}d@ 0 L4c$J P ඀.e8@g,, -1#Y@,1#XZ.b <:@hp 3"陷h'WʌL8 R>Y}t@`0Ԁ<$&@0hZB@@5 @#Qp@$!Pȅ61@<hm0bJO"`!$( [hlqW@4zYU\;@X=˫h L8 p$')n6zP4* Zr1 -!, VQ)` 3`6o$`eL@8pQSTB@ pH@lNF 5`tA!hJU0 0܀@@6 "H@  'k 4Tg𲩘,ZQ@! @/j ^ x8` @ Mnj. 0!y~$PPAC:h X>w`00ƏpF t"g7l>l"nJ dPt@`4W)`p28 P @" @@*|P@h0B)MJ t Y@&0xTPu7)@ p8 &@3Eh"L$@h*$4"=cu`%WK 5c(F-|R zVX)@4@Pxpf+;H@H @@EPp7 Pu?R@R0t6F/ o0/! |NZ xDZB 0xNL`@@@`H ,P:d p+:A H$1x B_@@ p%) (pXN@P,g4@@  &K~wQL!P}W@M@  M,< 8@d  :T Ʉ^:`@(xO"@ p# Pn@|rӄwG qAQ b@<&NnT*&yR@  p7h4aZ1 p"<l(P"ـ71B0t" 4ɫ @>  `(,v``i@X8@YtPGZ/@ @UHtw'v0]9a@ `@Kx fu p}Mݯ)X_hb ɶ Z' !t ! Sb̝[6B (tJ@ \Po )"3 jt} Bdp@7 L 40䇂%"L.S얡( 9cqI01 pb@ @x/i&`um`4pO|[Z-$0JBq8 E<WpT#@1@~1Xp $/*`8ڧS" @ ( F#ov@;`T0 b@. ), H0K'J b> PB QDL p WBCPXV@,h/(x.B`s ""`08*+"p"*`#*a@7 `0}c `x'M@=Pv ? Z 00C hYh\5Ῡ@ P>A Z}EM9lo@X X/tT(@_d6nPq5T9 :*@13cE) _a( @(˟až`Peb7`x0<[h+` hC4@z8G h&@4OS6 =( d@7@@<@ K(@EA.) Xjud@ @8k,G:9 )(: <r\,P" `Wf4&6{z# nNdO:T@ƶ (Wm[:m@ {ĀgH.HP͚&kDG `5^| Pw~P%7Z^ꘕQ7 p\Y cXH@ljVw-H?W!@=O=niY `qc\b@@/@A xg' ̰sR"hZY؀@ $kP,G(cmWZ\E|Tn X%A@9PpY*   j@2@T S c7BBQ}rE&U yALb SfKwqy{7@S0dv'i9Al)[W_}rt%A<`$0Ynhg ulp|KnL0g\vLmRp`'X%ao/hI7N=OQUFEsBqblguLU-@xdT1 rb0=|IV{C olr0ft](bQ !^Z5}saWZwXl* R BCfM~mHkOFl&QvOc v$SUCk"tO+%Hc fJ3lJ!:M\mRC bS/C]Sah.`sNA<k AfcY A)L(YAg LL\SdaAta>*Kp?e>lv\HD8Ivo(){L{Ecs}*md>Uh@  z~8G8 xTRd{K+D[w!i6jsGG C tr;:V:CDR4X[=DEbPh<1v/vmWa Zf/1r|N{L| p {DMPh7VMTy SG[l0ClVnuA*]S{diud&FN6uBT *hiF&" Uq~flcV_ Q+Zyo Y.yMC!aqVc"HN4e5eFMjRl;HRuAQHpk(D^nBX{I7/y&5&WyM_eXB2YOm`|0_ah#^Bz\`J`3~fVI_q%oMP =$grSaruEh!X }*WDc(KJg eX{FHk[wa2OU Al4LXFX0fJvia fEbrlXB(Y]r'<Xm f1GkpKvFfiT:JO#IY#9yo@NDl#jiw^St$  jjadb/>rH0Z[i_>[_T&HJM?Cm@xytxtLLK= T1p|&3'eR LDF$i ymG~y w.c P$}O4}LDU?DR!@p,]AAD<__ PQeaH>!Aahn*y_+;p'xI凜v cZ Dad8] b`sWIVFh>V)AuZmGY,X6zb&~ nQ V'uQnI4a]O RcngMx y4n` byX%p*h)Ja1T(DMa]QbqLwZM5cPG Y_VGMBB08g[|AM?N_3=XtBQ< Tye B6fh*L8w2Hu+Y{}/~UpAc0TUDKC|PqA]-W_zinF2kXXCpJBOSzx{0B%3(O\R9d!8lzg"UAAv GVeb0FcdE%b:>AAMP8dWmG[c`nHdQZuQv {e}(z {i-k ts|b.d/[EpIZHtn{HބPqEDQqEKupjzYsABUWm*Ka6lfB/Pqfa8`9ZIPlB{@^TDF+yWAhK5u@ub |oNw6( {A]B`Vn[`T|# |Xu+-JM [NL!cjlWPOFX}8>B D ]p@Wm _qֆ@1b S`IF:dP}zErp X(+A8gMWq )@xT}rXcNPI ZKN~.NjAOB;AICZZ:tMU c3c[8DF+$@ :2^Fa$1܃w+BM g&trg*8 p`bl{AVl_uD PK9G<fyZX5x PU  $Qf{U ~pWd>y{G ŇuvfMf 6N*O/5Q#Eh VM Y%wpX&~;L8BF.oJleK~JL~ rLbeZBat|qE[`i 膝][B k8uJM}TdixvhK8ejAC&X) i9xd#lJNKGZmH!\ YGhdJXo HZO; f0.1_wcUiP-r(H@2:aYX׆JB.\7VUCw gSVxQ$jEbL: HildiXNoYڌ@@C[H8(])St>sGkPFPr^UZb D&E=x>diB% [HNPJNV{;V\DyajvSfrQLiP[z<jTwzrHs:k'D![GX, sXQGm/ ')3p L]JUG i4,x]%#QZa/'o]L]\tpA_r~2?#GnzQu 5.vd }/ S!{'GdS89izcGMjM`{JKvKOmKa@; bjr#ozrD(Ox0EGdsyg 9[OeVTYVqN#B#[yMg,-1XSAp Ce@mI` :wqTxejum'MPdfMk 6䅔Qhoq[D 3V:^[hFx bp UT\R|`ǂb=EF8qzCZzUr ='y5| GQ@mZv6\9SCUMVrUu|F&Y.ul`qZnvpmI"y ;]&&%/_{QYR,n ꀮ[yhXa-p\VWkFK8ZjAX ZdQ)kЏo$*HROO9Sf0[q!FwAہA jh  MtmZVb]NYk]A3\fcjdb8DHOb`v (jX/j?]IBseK+s3Y3~5hCH_t!\[g^ tu1Ui@h@`LDAM90V"YcWWA\gnCY= `[*xy p)OPb[}wU{mmTonM\tCMr5:DQ(WN.*T68wBu/tk[u8A K=M0 OSL{bEY0Gsq^nH7wO,Op9h8[3xjM&ՐIyV 9lMuH)!ۃpHք#e:w2M^@IA^NZHK\ $^bkyB _5$qKa4_KA4ATuIYWZ:{[HhRQRSilMr_BdC> lJu)ESAkzW :d |b i|)EtJQ  Z h@\Vq_Y`&GYm0:SaH6OoNX^ چ]`R*HOddRDdPPT`18O8<amw58dTmju mKItS)`qZe]w2`N{ u +Upq|0VA0)Bkyl !Ikmkr PXy zaNS* PB`!\`Y HM IV HrbXoMYEFZrf 5n/x D Wo~L~K>Lp(5*iX VIZ]ypg@cuf!q{O,j+| oQy>LXax(D1jGhEA{B]zpAQmR@n7Bw`eZ |Yh5Ћt[K[8oTk)"z*nZ(OWZ2^~isHPIr֊i|}c9]| uZJzmc1_*gXxNjbc8eAvbbLsXZRwy;_ {b%K~nHAc2}Qbg߃ЇA/'v\2y\NM7.Fj Ewpڀ|XPWCreE%GYA1xYX\/OA T" GTy\>|-QBjThN6p#W|ugc_gkfJA<cjB"MNyyC E$.d[=4PPjD"t8]UcDNH{N~M J?~ ^"UV~2fs \uZ`J.A5Z YyL]DWj M$RN;MuR U,WBfvIy`coN\pgpH> }J#t^#T,c[pN/9M8 ScqGR~= Z8lokE_R3|=s g\)vQ>,hc '6*E`uIECc# +%H_{z$^dcQMAT1)ASFJZDdEjJ} |Iul/@*2t q~YVxBQyv#UT |tB@d]%Fiatp`0HI%1NU6ruYC Mc$SB[j94E T˄{ IiSVx %o7B={vy~HlTM3 Bu;@>-NQlDOA[1`Y[?X 5da{gRw(VY`(S CsmB2r"v [~ m\+E0D<`7O v`> f+S;qNLxEb|`SEL?NTo^o`'z9$ydhR j4nkF*^SOtBQ7G[O9Lm|dqdgX9R@P%-8QgL-{aw7HYNoX`Lk(0wsNUcNrNdya*B#yEJ!-"U)<Fr$lNYg/v/W@X GSJhQ?"JkADTB`U+Ch/ <[leTD֍|1^'.sPScx %Ua HB!VGMbohÎxqHM#L!jaMk WPEeohN!MGo_iHD3o{qRFF f( mF{g{X߅A |h'#z]lkI3sUr] bcl}x3Y & !|p4fRrhJoT"y?#f]EY/iEaRAL ,|}]#x/ݙDgAjKpN\X~ fs "z tE`XQ:jmqPDgs! }2on~r`@e]d HoZu`U8F,j_!1o-w9ubDB` \1^xb _A E6bv/.N&Q_!sgXd|X^<[Qm"T4eLP? a JGHdD4&^le^=clC} x]G; C;Tx|?;b\S\ZbOW"WkMn_xxk/)SnjTpPilT'a)hjxwNmXh]<euL1. _XM lZwDwr`WPZvp W8wsSCZkkf{'Lq/_tC5wlAYO LQ xy* $wDXRX3%}6+d;r1Ea GJR6Vbpw{f72!TA >((r9$oF~QEQtF@-u4; YNLsXG$Ze-JjV"DOu3FA3kQ%E X$()6 /EXFy\H_`%OCÈ1Scycz|)Y SGkG+܇O\L`Oa.`N :6Ny*#'15whc:c%F6eZB/K]hRBXfw?a :fTzmW-E&Sm]X6X @v:J.a"b$*H Y 7Ub(JmU iiJHpyXUpUeZi" xzw [;CFffUWm# ?HVOi?oTfLYB%m >q0]]15˕pD'xl cff.f{-V֒L2a |]hf<mUA{8 D-eFdyZb$ ^&}#6em=^MY QYP:E[1q6FGMyNbzv ]UX]Mk-Ć-A8~ށ5#q!L"g,NM6<ej5RMS R$J[vRCQnfDVs ma#) !g|q}T8bLmt<4RN^t:mwi-~D j a<>G04V#V3W; Qc;x]vZ@3S_s'׆Ko`Po91jb=y{ Op#n2cdpS"L`ahnLK2*kfBnCd%z s#baTkr5iB˚b1 iM8]itdrTTUAJ4HO[1L|ZcDDq3DZMقOZ+l֒@ QJYcWyuŃd1lboB}XulmPN"1|62 ۔e*mYLnCXuv5UDB =2ZLx?=gmYE @VrR{^Ng~+t Sb]uG !o_xre/KMv=FQyX s^YtT gd@w.sXceFz>m X2udU.]Np#x_xRhOozrNZopdL MFkaoD+xI6x6];9g4lYo\ރ:>VZCBby#?{rR8ȃ4< 6QU,VuA\Rf~ 7ܐA2~.F@mL1(YN?0bUm-g;,{}RK,)Q6rwCC TUJ.OZS\odEC?\\R_ # @kOnke~ @M]y^Dt*?w JJ4WuR:a>^D)CK$tՖ tݗDHnL6>Axul#(2T!RW5Vd({_FByL!~j PV3Z|#zeG_Bx[^aLEq <-3MwV[YKeރq"Q`C&3jޗI lK2pRy^j#n)FMb,?VHB(|b FBabGܐ*n8| KcppcYsgb_LFJGpd.or8#|L [@H-THp*a+Zu}<KM Ơ,DNsJÒWH3& d#j0hCgjWoF?YqwcMBh(^y_# e^00F-gddH4x8tt0\   M# EQk"Lg+;~L[_O & B0`r^͊/2q\Ydrau^cK-t=~\t3DEBG^T9j6Sc_p'^|!-h_xz|Q&rk8w+ZCO1bkn~L'i%iGWlhJ[ QDDICu`3Mrt'6Q62[`\be2@N&[cٖDoG#1u:H.dn\qn2 L,Y^#yZ2GM_gt@My cSGH%{k\W@a)LJz`Q&a8{de,bd'FDawoJS`挵iDTYVRhdygyI {BQR" hZJFsv{{jE%T/-PW}T}cJT\aNOUzZ`>T%T(L MKXzEW%Y[^j l_MPc%R^oSTJBsS>CSy3ILCCdDfPqh1Ŋ~)FY/t{B6iW^BAE_xH+lJ $%VVD`q<|*&IFIXh7x!|p8Cf52++c2vJyMD"iM0tYB,LD bߞ L8 uMB10Pi'G#UXUe eXnTe5; Lq g| 剋%i5Bya~UHSlOleyUX AMj}H:CC>P NWg!Q Z }bS/:foviH>RM0sP[lwk*UQK8[Hhx#rڄweӌ/p,ihѓ[lH%}%jQb.YEv/rk WW^igJ'E?PLئ uCŕ0y Ae[B)ldY*Gp+}2pznu&E v>q-3YDxG(oLtku ;G\PT -qQ|ZmM@`:cEE[Oc _XAkPf~ ^\֚arO6|Zc:*pYqueMw :`+{k_0FPyx~o @Z^bGЂdg|Hn&0j!6 _rU?{T@l@aRIzJ~FS'65-:qWw ^^TMF<JЍYoL`{Gv^C8VQ` p{U|K eًZruOC^IO'ms^3I[wstנ YL{ "ce]k`3Xv|yv/NESgLu ЗlB@Sw[*2y42_yIJL,|RQ[O|HvbOQKd9]_ʦc!FQaD P&s]Q%zO[b~Llp856KBTleTTKFXI)YYkTpdJmrK~`tWX+[L 3y =9pYM $`9~![9eL.JtAdBa0sw(}XpG@selemwxUF{L0}a<cF!of`l|7\s 6wcT[I+_'fL6wA9"CfAhٔ SzsQ^ "]ZE]uEU riLM4|b?\_{;VtfNDdjOPylC9!y BoB BZg7l { "f ,ET#^zzHD<hFZ_h{GndzpΗF3^J7K@VfTC|^ ڕ<gIWF b6][yj f@s3`/5a,hNeΠg]PSMNe4A!:L-IjHPIBb .!w Odoc2&2  7cRm1tU[v`Vp@)L&FB E wz5_~[{} pBt4Hx4zhzBYIc1j*M4t@5 y LHAG}r' 3Hi;T2ktDWmUS8+TUn%[t@E'E[(FJVBkU\CBkPEdq\oՖ"rOjCv b?+h5D"#,}J|7`gJ3\)~ .aO k[M#Yޟ&e+B SWD;R|XUndPH J -Mktu g Xc*Jyyw|5uPC s T X-Oftr R&t7/O jXc.dZBTX5Ɍ@^ (Z4B`|#Rckπ8ySfT= ~KFc)}&NK"V܇5\_W 'jK/IU""7xYDwTggp!2GQK8Le|R"싆nhSB ixEVbi=8~KwJDK\~ EMW"a~{[yQjVlX\C 4 r!V >Bm[8a|_UJbZ^a< sZO2\xbvdNX,nPz%@3UE(\T,JMB"u ^aO~KbII؅6R6 ZjibTWr6] K[qO1&&E~#TR/x]dh,E եC_]f"Ir.cEt/ukJ[pNm^1eB1H _plBVV)]E8h8wxM#eSVgl b `K fd7 | J|v`![Vw}ARS/\F}qL`c`BnC$R~DClxvGWnd@7E`l|njnw[Fozs}a V-~?/o.+;mjr?B L ir`N+i'c?Mǎ+r$?hipjr ~TZIA+*zyoSd$K0<IvOt|YtbNFcEvmqQ<{xQ2^XNG1bPIr3Ԛ`JJo (hf E j]Ojbf\>[wyp,`LJ^xC+/l{j5X)xD\$'k3UY VbSch:g$gpkő-vg~G\Wo"a}x )VikLwd0w qu. $3]=L?F 3XCz8\ck׌bj Zb]ZV\zNbB OT `n;kR^֎ْ&K1aYCp^ܕ}8juqevmWSl*<_wlj-XiO#?@Oh@J97s=q`ǃUr |Fu/,Azc D'N.Uq{my8nW?IChBVMTkoZd ҉)!CǎvWe\UVCi<r5ET(7vA$D?^gBL{QbymSd Z]u'J=HO4bZLz\AD1e#X[l %cBz\cQMA}c -hKbk:<Sf3iyDcw"[6y@B9ar]lVOu.jIaXfw<u +%X,@B3]OCGKCZ=|Ft_$R?GơBdx4=xBnfw4P0@crBg6~:o \^{)?j=1c>k.b vF_Feki&?A_(ro"8vpbu5]7}(5ᯎh)EDnK vx5z}C9(hA?fe\Tv\vtFd}դva^,n:#l:H^E@9VRPK+1nJ;GukK1XelmEQ>e0I3\OnM$ ]uA6fl2`lXbFkaAgrc+ ѩKP.̂_XLvybYO LPy,E_\ AR(J5.n fAN|vPe{ZP*G^jy>LJP}F*|qw-j FnI5beP* PqPL_Ax,$\rv6 2P9bYX(^oN7ZUYhJLksWyHQSHuWDez!^ Gpv]8 kN4_MqRFgTb 5TYF+GRP^a f'_u:gAe1ےp^az+LWdrRtnn(LA@\qDS_L r4h@LIveWgI9SKTEUذ@v}t5b%iuGEEjVnT eBO-jW:u2XS<Ot90s tYG2g} TRhLy^DGMpu[U]ZPROaOkq lK(\+l`262_iڙrQ\U"iWApC-o\6_F^7'NRH/tjX R$mQfBE,#"ǢOz~ZxC5Iz Sby'fV iS{g=Tq!D!NTtxuLt@ZS3Xm:>D[r 1EiXyXIlDj^ LC[[##t8 aOA~>N՟{NynK;qTyH}o|$؄NcfB-bNm`nb F*iAXjEܙdk@A6ATNxU#3rrrU ihKOCp|PMPUFɰmmeey0ZKuLoDgp[KR ykgy͈\__ÝpQye n29; \cSV \OW9;|ZXZe1Mb1m8Kt7o{A1ytYق/0ď bL%$8`Kk_vX`xdƄ&UlAISA(Z uCbrqY R ^J+T^\^^J/lGh1Xc<6 XIHx-[V-oIZ5)wrWOjViV$M)ye19>W4wY_SOWF ]LpPLEQUX!wamWpKEME85QObUsX|j)L > P8!I<6 LA]K:O}Kı8\0@e0K K|}K ~K I K ts)OKKLL$w ; Lı|ıKG~A]&L(LA{ ͐{L,L )ѩ>L%A] ı?Ly$wA]BB8$w(K0K |0c2eѩ,L?IW]0?gLO@e@e_~K tA^\aG~0iaKKK MK?NrcQdN9?|r0DM[ JQBL1N@@N  JA] @XK K)LhGd _з~K_KvBK~KMI>ODgLxw a{뷻\c@w|ҷK'L *~K 8KBBLJ[(w@Kg(K OJ"cҷBY{)Է KNK@ 9͐Boy)LQQ@(K ͷ ^h M L{Ky[@c\^B0J@@7h 0(=W)L0r?L\L@͐͐K@yY'LO[< S}Kxw,RL}Kҷ VJB@ѩfK  HAM;ӷsia>gj`f0,LtNͷ ıΐO|&LKyr\_(B1X[gL>M!\׸xwNK̷ٷ ,LB 3,Lڷ}KıyKeO~K@e'L@p@LȸN[<Bpdm~KLUT,L@eѩ(HAh_` dK[L L~K_F(6wN{-HAjdKGK)Pt XTKs|B {>L @LcdhN,Lya[tS|iaK]cSrcKM uFìu{QKgRKK ͐KKZ%"Ga𷼷KBrJ˷K2e?^}KM>L_| ggvѩʷܷ0ƸKkN'L`JO&`B/ A]@L&UݸOyUBĸa_G~}K̸@:xwiaQ K͐0؂K gL-ia ڷҷ_tӋRιL}KFm7'Lٷڷ!ʷ.۸终XEML~KC߷K&LVXXT)`gBYwѩVθhV{R{{JKҸ3ͷ@g ӷ:+(<@eHd{:*׺sZWFEjiaU |Oxw$wK3a,LyEV)ygLL8fK?B8#pºgƸJ{rcM@LqjdӷY|ķFڹZJlyҷemW󺃻F=V|ƸKκiaBǻaA]ƹU'g:u>L%XKO=θkYE3súqc|O8'G@_xTBͼg|عBgLUºD⹙廅$\vQ &L`W3`WBmypjıE:HAhغAKK"4˹*b}A]|;sr ˸ҷ@+HI@e48a6"h#K|cE snҷ>L) +Hx|[K'B膂^I(d䉌[qFAsh4ѩ^\D}K2Oy ֺP jd˹fqrc3º׺.ifq h䉟D=KIK[4K8ոKY4K[a>&ϻ|O .Q >LȸYw7q0_HQW-s,jdhay?q aFM gLзӷp||9|T0?:g(L@^ߺB꺧BM1K`(̸)LYPld&&KIy`WøKgӋW\ gLlZoҼHA}ѹ'LcY;ͻڹhº(L?LE̹8:'LǺf?ݸ+׺BI|úPQ7KeF]zyƹ0ǽTyuNwN4׻{DNtB޻-$f>K0yAf̷ʷ[KT48Y˷%_LJMָ~Kҷ~Kg wY K'E󷽼>wZ {oETF&󽣸rcĽpø|hK:KB0"|o6縤󺼷NAKcKKNYU;޻K)9y ո|ca؂[θ@L~K[ErҼ˸pX dz%VVٿGqc=(L|Bwǿ _\+BKi|0|OٻxKo>vѹ黃 E!|MjIhJá=ͻm ʽDͻ=cc6@eV* N}a.zY\07{.D^oG~K׺䷻}V} rɻY";_׺YWyJ }/ͻ׹RI+,'yK񸐽I.9J ʹ}KP"ҾK@iaK B8&L3AWwؿ=!" apf6} .G[ \K-r],0gKŹHGKֻKҼP뺔!G۷俻jG۸'3ji"\gL?L'bB[K YǾu"sJJM޻( ,e!2U=C\}K:oѹF͐7B+5dMߺnGNj|!g&0f;M俲޿ M&=ۺ'sӷTDpC ȺMTu?L¾Hw]Z @Gκ^Y5@I[v+𺴿kKfyG~ʷ VJ8;H2ɼ'LIջո'Lyʽ]K1zPz <bQͷ3 ͻB&ķfŽ['b͐jd pϻ)@eJ`9y p"T ݽRFYCyg2erxc3@t Ku\f۸T̼$ͺ5K>KTZ¡ҷ!и!0/<s̸ Kk_q7ϻ񺪺(꽼KKӾY'b4$+xw¢Ҿ4@IHw񸬷 XOlXYKSVJc1X( OB˹aUPݸ¾޸-:k_@*XK#rN/*IAÿD Rb?K#IABk>Lr8){YƷw$K_"YjdYh*KҼҾa0Z~t\B(Mk>ifķK͸Ľ?L^"׺E1,­VX BOU|pB B+Y6 ɼJ Erٷ+W^uIrg kık󺸾BR/K}LmsYҹN־ZR!K VJKrp‡ ˹˹&GJC$w^KK0[}JDV0j\;(L$wKzº-4O;. 42̻(b"Nӷ˷¸KGèEϼHA8orC(LdQ!B,L(D^gɹk R "'*p ѩW;ěM$wֹ`繙KUpxIη*͐ErƽW~K+_:w\g}JĹhPKZt79rзsh͐D[HAG- ޻Xnֻ_G\X@eQÀ`WJbķ_:鿧J؂_y= Eq;˸B󷦸(L)~%uaoWOKɸG}©KK#߻Vfz۷(Ls۾sl|rXuDqQKVF͐RenVEF>L?REŽ?Z@;KڷKoI͐>躋0` K:#cAXֹ/~Kɸ=Aз#?LxK'L (E.lIKTvjLںI4"x2Bٸ 'K|,b|K x! ?(,LE ?lķ~Z[|UM^|׺ ϸƸf޿Fto'L/l̷:CĺIJPҹoԻ4̹θ=|xw\tԿ)ÂQ؂Y n Q\*ϻ‚6jg@7^zsLGẅı J:0c4I(ê)LlEKvIL{K\“C=0VUV> ڸ6Ľ [AKB=M$w»\KVJǽ½B%緆JU0/l’}͐K%{-8K"ıĵ}+sc#K_A]Fy;]Kr> xo@׸sT|W#ƪLŜiHġ~#ɿ>Xͽb*JrQ8_We€ѹ”0ѩfs[ +Iʽ@bKK Ʒe/c<]ɼӾô ޾XfkN> /4θJ.nkK@ıһT&L O86w$ƫK6g BBlTob !꺎`Jw |_ͻ޻ջi%elX|M{< P:j/@~¼K|=y2e_λ%>-Q1j۽ToZr OCٺbʺBȳH! f۹dڻhYŒ ^q"hNKĽ4gBLWÅ 8{@[1tzCr.׸kg!|[Q0Z 򺧺 û鸩#HJaǗrUǜK:˷Lu3d!VKrNeRKTռ -)ŷY&ֺqCBŗ _{ÀgwK}Kp䷀``]šзT̸LP0ɹƹhpx5mdU տKG>4 ep]"ǫV"6$KE×һO mWk4/\̿ZƷ<0rǸ?²ո *VÅ 輼K~eȫ\QXӷ@b/ںu gLN9xh/Y?lnGUY _t<׺ʟʽ؂zM5bKK"5 4wQ^;K7ǡ׿K 1p޽A7IKͷRpxKjd7|-V.G۹' {켖ou/ú EL/ȭ↓ kǂ7G+˾T ׸^2Qw ©wĶyBŽ (ª73/(K ñŽK0=^;IɆKgL+ټ'-{̿Q"׻FȺ}-fřYY[M [iƀ~Klɛ^;hn8xw(4ʄrQ@=@e฻%pxtڷ@IIQbÕѺXȚ E&WIm;̸#ú/·ǕıRk(#庯?-çB~Vܷ4B\B=˒K&׺ǯFڻic!f}KcNǫAPɿVhRUYA%] |:T˸a-Žb(LVOɹ,LX 뷨Xµ?LQ̸Ҽ>L^ vyE<gj:EڻDŽKB+h(K2A]ǝ.ݸ€g؂^œQG^q_ŗ)Lxʦ-ZԺ 7 |̷eһRi/F+Úū}ɛ 򿆿cjS&xw˷6¬ʓ5Y#71oҷ)LmNS̽/J:麅^n}KŽKF)SE2۽ͷ6w=|0N#ƣA]Ʒη?Hz"Ȕ„Ơ "׺?lK+{Xe2įkL8i!9T»K:|Ks{WKȎPa!BcAYݸyEN(szĹ'bnÅA|OYXBTҸHȌ$wHArQ Gڸ}˹0座^z^ۺ,[iͷcŶȺºȿ}KjT6)oƀ>ȟ(d߹*+$ &L!Ÿc|[J yȽL}/%K:ˆڻXZκ=j&(ӺIǃ Ҽ0wx}K˷,X eз'L4gsغXKv[4 4?о+pd }a!ԿO|線NķbվjBZ˸K꺑KX ѹpdÜ @L˛KVOѩ}csDA?L8#Ṇ9sLd|%̸ҹ=r$G\DzRˮ(R'>ª)Ҹq Ľ94wǑ7/0B&áazϸqia7^7Eɀgʜ=ٺ6ʦDE+Lǒ +mF|ia .YHKK}ڿ.`PpdK5 $T߼[JNMtKRڹV6)1[w͚hq*Էo̤膨BQٸRƈKU[ɹO}ú`>.uthLbRǟO&=ErFQQ񺼹HKXSlEK@uwc<ͩ .týtN8ƸѹIx<ƖHwٷ4PIDK‰4ݾ"Mvӷ@ƹbV}K9K-:DZ׺KZ,}U;rcWK T͔ʾ׹Bą AUBY_LǙ๫lsbF]޹5Aͼ)?L8]njc;gLϻ!iݹ*۸i)%]YHwzĈvckY(P2ɹ! 3aʼnྎ`WӾ 0_& ˷ߺd VqcG~ق&mQoRm2Xĕؿgɚ0Lķ[."뺛4 IȿǽǝX˃ |_)AºǰOȼKŃV'm{ϸbϠбк=:ˆ'r:AN™”K-͂„!1:tK&P1G~|YnWcfG >[|# LuG~e7rc8ʬZ&LB*WĿrcKKѴdĸ3ѻƸ ޾-Ľ@>w p!QH'K eϱKQƚ`Cʽ̴К&L̷a꺝4͹}KE_t bHK) ˛ƕFcx'IQ¾iz~.Ȕ[0Txƅ d1LgBǜƸmS7iJs/GƯ#-ųZG~7YHoyIæܻ )o<@eGjؿđb 9rEpVfȬpYeͻ\[K=Fr!L~6Ź*ƹ{X-ѷifغ2ĄXηz!̲ń jWĪNּ| Zʩ“OXۺU0^gU}Kis==*6[>LS:.ifTɼ޷ \3nNȹcP\/lpx˾/ҲY_Ĩ˷_\ ^@LK$P®ûn;‡ĩF'ټ.6YTŦÉ)Laņr gKYr+Ӫ WWdz ,bķӺCR(Lʗ0Ŋ `_YZӺFhB 콨xپYߺO؂|_tK[׾/K!bAFI(ȼB]!/-ӋAHĀ,L0ʂgp 'M ¹ ū$FhɼƸعͻlL͓¯FeCgTKOۺ3ƒ [ѺKFZœȧBº亹hƔHƏ$wqOßqoXaԩɭȭ3c{πG$OvFѩC'zʐQ5콆K R;@I( EppiQgizdRQ 8CӋκWҽK4>Wӻ\LϷR=jȼ]u#ٹ}Y’vƦJ?LfobƸ7׽"ɺŅ?(j뼹!ɸXؽBaԙۺ Շ {ĶljUq'̨0Ni.Dž|OQHAKҼXЌ*{c¾ upp?Sg๾{fwƽϻ˸ձ5lݹJ5pd‰‚Ҥ뺊ütսlO ηjX-$И7]҄ $wBǑ:FκZ%@fEٸ˂MG<˲~Ī\*฼2yξLnYEy3rGUտ}Pd:ҷ: O4l˽Q|Y= CEʿhǠ+WݸG}Ǯ5[u_K*ǔҷ˸8ѩ]"ńe<4tt ҈ _1{oҽ̹BRS eηΑɿҼJg 2ƷhF͡D/з²J5̉!Ĥ='ay̵绖ūϸ=~'@]ObּK"h3zBɑֆ=/ O~/Kžy7ՀuʷVJrعѣP 󻑸bĿoAf׸fҒ,ď |ļK1?17KrcoiœϷD|̧dDJ{7 ̺?۾ҍz_ĵQҾzK՜ˡ&ćƹ`׸ 8a58 ~TFȻJK͐4WCԂgɼ A;oyEn%K@)0MMl@̂׀F3%RȰǷ0ʎA K縓IҪ gϽ?ϰЛ0+S`빥_]N%q{o/`WӸz ҤalZ>0gdǘ4-YuΞ˻ӽ sSp7YHxE˷u’ !?ХP?&վáԼ*9;`fF$A]؂sX:mBʹ( Xh:^50ԷLVϺl{o9ԳRlѝǷ҃\"6,Ŧ漢RC@KAQH }×KTĜ>WНT̼`>sjI\>YHhyɸ@:բ(Lú⻴tN踳=NKʑ¾ظVIֿ؏/׻8㹍 _6~շt޿ Tѩ2Y0=BĽKՅ%tҎ!ƤSâ۷KK.Ľ֜k.ſҷ˼}O:fIŌ)SXңʒ·5UŹ2/ASƔu'ԺYϷ)SvKlMrRo@ٯ ôGk3۸y`/ /dzPKل )R%Qaj҂Vи?gXЛBҕtF*r©Bc Yֈ2CZ)Lnѧ#L"] K,˿޹ÔTΊͻKrQ8;؂3b|Vb2.ש&L"&ɸR-:қCK|"fO˽dC3Ʉ{KQ=ƅKKR'ӯn¡cђK۸oɚ#Ƣl>רߺMKaѡtYĩԷ3ʩN^}ne$&ϸۺxV- yK /)2\iVUоKqy=ʞBλƉ[pm'bʰMDICTȻڻǻ0 ld3qhs҄ט!I2¾N:l$ǓzO]ÖՓɹK:ŪgOzɼQ^޻lL;p)X{A,˾Vr6L49bAJȤ˾U׹J,ԼKz4mV΃*zAΧęeD=Mft2#ǃ~bԥ\~K'KNӪq5ǿyc44 =wvكNǭűşƇ=ŹjTt]AɝÛM  +{ Ž|xĽ)ȼ_Npd=tK Ʒg+o&5hԷRрȲeMº µW&650K&LĝT@пMϵWjүDpƹlXuW[rpF̶y_̻!tNgېɵlٷҰVʬ0˞͎bYK黁\\F&=eNjTRhMJՃĂovewQ>́ĕ;p:΅Б!2:1հMKػpt|QB/ JAՈ?LĽƸGԖыiagҸXŝBmẙr=cwط+cӾƷnlĆB{z?@2ɷ\dch1,LոİʑºƖ9{^Ş&"1Xvʔ~ӺgI]ϺLvb*K3VT̙ݸvDp-·=θL80_ۻ!gj_ƊdeבLǔòl }$LT|7ɮ)5sǯLU̹Q=е9ϋ5ڷrg_0H+ziaۺrQ&ں:tz аL khL9}Ũ?OJT’'Ȉ{ʽ.@#KFjƙKK:˸)LNĝ溌 0;f"&_Yҝ0+庻a `֚=*Էæ^.2ͽT,1äBKdB}I;,ķз+~`ѧ Ăht Z9Ңbۗi!|$C<X0Ŏ䷎Qƹ{-M "P΢ýJ Ϲ ƽӼԴ h/QԷىГ7I652عϲ̓Zؒ$@Lû_츋̽֙:|MO`ۑK7ʼgָĜxٵƑrՅQ֍5عǞ W^s+AšW|ɼoHƦ:a`ҀMTNcۢ9ҾY%N𻔽{5t{KfpŠHA=˿X94d*+&/DﻜL5̩˅'LOf׺ Ľ:Å@]$G#A]Dn+!ϋÓѹK=%ķTf ʎ,'ƹӷAvҜѬI{a޻Ґȶ3>Ly 9/٥]a'LO 8dSIȼן3ăȅʲ/߼#湛Mľ*ط:ŊۅK }_۸S uUĢKvK$oF+Sj8)£,ָ*K}=wQе4(L]ʼzxݿy؝M$ו8xͶnLG14*$bx۷ wXLUum>9ώ[X٭iEޔкyϻ؟Glih߂>cۥu%X?O:Ҳջ:.BËkԹ#Elc߼ ZшK !kGà0bӾ@ellƸū*޿yE|i|Y)"Λ1Ƹ0΀g :_aKͻ:FUsp׆1')L،KKt|OotЪBWɿFaԏˆ8ɒ{=tиη+άɑ{ޅ,?4$wPP؆ 4}Ѻ7 kޘaf6Ăͻ%ּ:\.Ϫ݉ qcUθK  ؛̸,Ni);ƸLlRÔJ#S½jŰr4ʸaeP-ڛvƞĿdϨs:O7rcuĿ4خd.1l|–ڏ)RT໯/Đm{i޺LڼVц_޷Eܔͻ/ͷe)ƒʾΌ\o1e}4D~ķK_ąWo4 biܯժBb)޹#J.Z)!޷;>L"ը ŵܻ50qΡ3҈›`~(ɣRLڛ~Lϵ_쿙KPʚ4º:Ľw}ѿvOD|U`WȒ?۪,Lݷ'8jȼW%qV (!ҷeR|ԋѩa<0@ξH0Q'LGœmdG[ăs7PÝ(Lg!'9̿G}K0KDÞ׸Fп_K[i[!IոȜ_iON?Ūn;Ykи'A]cUA׽W Gb| *ˆK‹uoC:F'вˀȽf;GUUݸaW󾫺# Wԅ jd~wɍdGͦăr@oJһ-ti2Z.8ǂ"DŽ{z_Y̌ _gu_Yika`߇ ڙ@zT}Oπͷs}WM?CtyE뺲y_LҸٞ6wƏ;.I׺8<7ح?%$ _/0ö@ $ެZ0]\ۮȷC7ۡĥT|U)V'{i!Y!{‘h̥عܼfWҹ 6ݸح;ʠ0y.҇ E¹YғM%gGc,džK)tiy( Ⱦ͇Ĥǔlr ȉſ(Lj:ȸj|Oiǰ:Í7fzɦ֋>AģPgOY$ _Q5%y`ԞètohM캋%]gL~À9hK幩Bg;V{r⹼zҼ;{ɏ'NIv؊O sV̻Kn;e¯F͸pʺMVиƸ&{3PcX>~t$W᡾w1pa2eҪ8 ʄZ-ŷ廲e̽1S)לTWp׌KjЇ4˸_Ӿ&ο Վlwxw1*\'2w'Tӹ|bb5>$՟FM=ʱ8nrzrQɺ Ŷ̉ع:kēƹ՛:@YH;Ϝ:ú\ۧhpߜǶAܯ.QYL@qZߺKmż5` QNXOt.~5|ם`׸sבr[׺K@lOj̿aӽ8׽Wº;1|ɲ:^ؽά4\-?жdx7뺛Ɗ'Ĺ:GrILv{oy 1?b͋{Ƕ3UR '18UElң~|OʉYNzPSB[ _zx6fQ@ʰZb?࠿۸,yɹ;ܹ6؅Mn:ż<ˬFTx0NgŲ*K/oyϾLͨ4@GKdqcʶId-fᖹC<̱ǷNvuAź TԀn"Dp dzeDևўݞ/l(ݿf'EgUEzP̸}KA] )ihЅom˹eEЎ٢θOTFXJO܅5,JVďHs=ˀ-ɹPm "Ҿ`Wpܾ!mˌ-YfMKfo#W`W[SҼ;kbUCMӜ˽[ԷƄ۲yfιtrи(֣\h9^¨mF[֙•ԷKg?{oGNg ɜڼ6Iܷ۷L1ʣU5d aΐݽLt_󺌺MDpʽ-ԤU>VKЫ!2ᾼV:K ѹoob꼨:༺se͐zȿKkeFN䤹̼K:1 r3(ۻļCD}d+ĽeF13mln@w<ΫͻOirY%F%>oЎ˚pߺUKƁM^Ԙ޷0YlK- 鏾ᬾ1:rȐ^ S`WKvwҸTΊN#aחn)Ȉ͐ZfMPwT>p8G47շn[~Y*vbgT%:SzA\"lRT݂6rt㪼)RaVU ׻J=>BD+h ˞ҢpߒmlNK(K ƔZ+>̭߮m(g'κ!O͙l~sc߰z+L۠pȨw͓@Oc߬#׿<ѓeIŻͺydɸ{oif?ʷ[XĒe9ޫ qc̹̀qNypJW21Jt3xʷӺ:<``mx EҽWА=TMٞ뺓F$wʏPVi#0G~܏KE!D|ظezgκVz ǭǢƫ'`Aλ s'=c߿?#zFد>Ϭ〼cmD%,T2Ծ2eݽFGeׅ2ˁ$Gj0CUTKdTև ˹2q Ɯyh1Xia+aljƊK/oQ uuG- H­ոwEeDʥ%{#PΤom08pd~ۦ˽eOЛƎƆћhg!KEr5Ԧ·ftdY9a޴|+ָ_ĩIDD1o(ԾEȷ{ḚBFĕ/ϖ>b đúM.㠸܌˂J˅_æ޷U@ @# żK]D _Nj# $DŽKsp4ڹtޡ~ˈ6C¸B: "D rȠ蜼?LiǷoEr@Ĩ6Ď[V»⢼ Aa׸WMʿ1Òeͻ%)]̽~ g|ϸ᡾oWݎwt ý)?ㇺg@ȸ#ݨ !|c1[ښ+зjõЮЙɯb݁K7FA>bA(rct޾`J=˪pDsxw|ѹ1èmSeX_Gү>="WaԯL^-7*:dkىG,gʏ fë zDzϏwto &&nƂťߧX˾Ǟ>LP;Ka]UѪ^ ̞ԿaĸzӀ: mFmybɺ ¥ (![:4HםʐRhdޔX㹺zr¹Sgz$aXt'ݨr^O ֜ǩ5lGֺ 8kϓ${aƷ f-T: ^c"|쀻MWiTӥ2@զ{ýq۹cMɥ ḅ埽ԼbyŦ&ʕs>MlMIĉ@ڏ鋾A׈irQ)hEX]ʆ4 ׭xZ=K{oG<ʁЅ>^橼\$mFُPLjd漭c {逷_0Ͻ QZȀUؔmjS Εũc]@)ܤ$J^xࣿ)sxraԂ2!d"{L̔HɍP_”fb:ǃ5լ~˸ϳ#Ȝ﹭oBvԐȫؽո򷭷K$]\tpɓ-b@3,uB"ƍdcLi"և_՜5Ȥs1H.[1H_'}3K ܯʾzg0~Ʉߺ xPDz=cM$>꡸`n@L;XZƫȧB,D\Bì)\}˫罨Jjpcɹ޷?睺bWҼILAʭɌõ4ftقRĸ|ە˛JȖuҊj5˹ɿKxx7ʮГC.݋BWFPSł5kWdߕ۽xmdNKI҆Sěe1TQbȀIч%d)L$7#/-]%Oe݅PV$؄zCrQD|ۻໟ؍waκۻɄOifBWn ʿ`۷ﵷ|w2ɖζ"BTD5mnFsЅkȅԏ县x, *m2e[dעкp؄Y@ yFKQw>LȣLKԷ~И>ۇ Ĵ{V̼K9~A+`O&=nBƭҸ[Uw͛2H6mMdڽRgHAF}e"̝)ѩ?OҾ.ڝިye=߉iDt%6ͷ&O?ılq楺ڻΌ/ӦcAߺWԿ*՜M#J =cEn T꿹ջNΞʧ НpwAܣџO潁ֲbP[黊|~K Ȫ)Ȏ5һ6ɮA@ĵCi±kڤoYX!з.ŒX350OvufhUX/K;GZB%4۷,=ָ&=#0νQhV)cxyojǸˢ7_a $w._E1چKÑ_}Qrȷ,|膦zwS(X?//S.\[طMOOcT⢻Iƫc+့4X,LLƹ.#ʷm_<2k ƞȢyrř%X!g2Vv2 @¹8fKǸO,86˅Cù䅺9?F̾繸 Ŭ}t*7־r~_tX˽[i_$g%F؉Ľ\Hwg}ђ΍_1ǽ}X?*еC˽`Ʉ_t|K-2`@٬̷.WjQč rs|O$LL=mϐZ淝BӉU܅لݹcO?χKE"yW;YrjϾ,gȽ #h;ۼ(Ԓ^İ կᠻt ȼ2?|zi4ؿlG|8yK.jAV7[wv-yWaYWŠغʹ#T Ǹ,FT\<Oz1y[/Ruu佫3@L oq;y޽Ml|{T_H+տKgy?O?æs9Ī5_N'Q*n KAs$ńͻw}(L84$躷VYy- ɩL9C>3~ Ǐ|iBͺ fªUunG$b!׸jdt=Ƅ.sgmP1Eҷ1ߐ,|o AI˷ZϷ^ǽtáMɪANϸꪷȺd$ս>w_jMoŏ2Y#TM1'IĔG)Uq@m ݾYſ%@i̸Ψ;V⼩\f\2#>D$^'f;k-$]rjChgbŇu 1>ϷҖOԪ_Հ}9"o9ο ꄻ^_| HA\vMGʾN?eF=ٽݹ!Ľ㙷PgʌʍAܫ ^ƴ Mӎlt+6c׺rc5ƛO͏p2įw҂(g|Y4E帢攸kn܊K ÙכM@Z63r#ƉӬ!{X?lOcxѩJS4~ hl SAF#Ӿmƶӷ8Z>KX OAĒҳ?fՋRGvr&}Ĵϲċ-Kثѣ+P'쐹P|\xZ e#d"޴ʛLv|2Y﫹DL,əm rIG1‚|˜5ȿ@ ˺+qcRrɪ½PZ4*}Ds1 NJ>r\)眾&&)G\!޿^MRѬʧWVΈX(¢%؂Gܼ7 f CϽuƅG媺+!̰~KV9ϩz{oPjs[΁}-cŹrM?QɄ{;;j[ܾЋEe'ƉU?$.ڨɮ,3?̮(7lf0GÍ$O`MˇY4͈iUXnɺ5op[X_âՄbIq4 BΤք~q {=˓ĽTaTK%aؽ Dɖ%r&Ɋŵƶfg yࡾn{Ҵֲ)W+ЃĬӛݧ%ř»X* Ez0_عٹMh"yz_ʼnο-޼Jº`ҿ§1F|le8Z:Ԋb9ř䌻F̐$n鎾Īĸ>+庒l܃ʀ#є|:ю=M$4K(H K(1۾&َ}3Ѽ_09g4֤6nv7AKp5m+A=Ủ'/롸::ݼ۸ǽ;ޓcg9*KKݕeon퀼Ž:K äB _N/{HBɆıđqѿ]XƖ$kͮRjj󹺪јSх {ʾ}_ׅKjՒ,=gI u(ƣ󮻖\GXxϖK }`NOϧBzPU1³;\NAE:ύޒK{H"y0C16(B<KZ;RyKy鿺ߺGdZtҚ[2̸ջ-Ҹ!L9&޿࿼FϨp׃s5KIo֥/ǏoMHνw"k||ss 6]ne('t:&؂ŁÁw Ĩ'S <>ɘEi QŲB$ڈ<"ٵ-{bɊK*齖cE|߳y}~3f-NQԗHǞm YɗJlиӕFYiخYyfӾ6ݠ4}a`Ž|Oƞ`I6]J~Ď,귴Ŝ:Y7׸}␷]̺#rԮ ͉dcŜ͔ͶbpΩLG=n$܏ܕ։ǔ }f۟`1vn檼7l*߱JɅs8tݿmhK-)­&~4ἔՖݱnU1ȓy49fpQѶ/79ƽժһgL}s̻^jû\H̿ŦGKvwШV <>wʑ q*[ǟvйkpջXݹgkKuTc%jGaTۗӞ6"=v?G7 t!'txȑEGEcnź-9P˼lﻳD3=TÅwxӈ,JWԵ .fќOp|ËЅPʺϳO0ՈᄏRگۺDJi7\?trc`wzϗ/X3ړ#⯹nz/ާIE'ݻ(xw̮[v0Θ׸SɼZ岸%3ۻLúš`X~OP h?ߎ|Qɻ߿%ЁΞmܹzɸ41,al֩솹 ޼šފK.xҷdل͂|>LS ўή YLasʞm̶ҹ,yĿg y%G )#赽c =˷3?9$vaP$ŔWd*ԗe]jzɖ>x'tÑ'p琽(뻒M:𚻺߅]7](甼η&L[D_E4봿qZKN]hoӺ?)ğk8ttǬ@(%/ĔAP4'jنtǹ:VGع6ĞӔ|Acyɇ{-CiK4ؿ Ep/Ÿ0غm]r+Ќ1 $fO\SVI>xHزÕZsmO6A pÒT*~̙"$=ֱƂGnʨ 4]\_*ڋmUNt聹TWϻZVǴB۬ෲq̊_gL[Ō;yaԘI[ͷK'Le!I=υ GϺzLI=lnE@lŶ•ߐl޻xw_̹ څUKMUyƬȼi ϾH: gXʤ߃܄k44@Ɗ 㼹!X1HۆMwaµû޿@3KwZ྿t:X|lgmFXIrƪf~)hUA~TRq|yNҸCB.¥ ߋ wĵܪU #(ڮáMPlhǤL܀aUl,Ep϶ݾȩ_9N9Z>yz؈㯹]!LvL$ɶ֑,oĞ{jCܘD=2ґT0׸|Øܨ$_l^KdmAXe5ߕ[R`2ɼlû ѽT՚Ҋä#5b"'eNԤ@z޵ݷ}:Qm&ƬΎuFc<ōӫ͛ljȸ /ǐ)˾\}/庽NhSȠή/@&Lj@Ϸ)IGōԀ $ DTDcKٜB|ʁN5:Qʷ"sa~qچк 1嚻]POўRF9U=ž}Pb DwδKsӣףt8K %:cҮAO ;b^ ׀: f㫹}˹NºqŸ#8ګv#̼ 8~ʺAr;KZ»ǥ\ŢVq迻/jIĹ-¼ynh_޾֭V(E,/1<ȞX)QpƬT?ǽ9췝$slՔ7Qb O8Di'BSDM|ĈcϏӒ?<dFeu HۿHKc#BMܸT!eÇMGܤ̷´vYnʺȂ+ujYgb7q~5ԝڼ3xӯ ~aļ.͊K/"ҦjtAuJ!IME `W^̿~f3q;EP0̷=' z$Â@LErWQR'0's@.c?逾xW#޾[_r!乳kif˛MK W\膨^x\¤:rt} Rφã%̿qUmĿnʗ(v _Տj<K0 U3zӎҺ'~켐Ⱦ<1ú25lLS[[Qͦv""j7T ʒ1M⡾[¯c񷸐x hpBXПtи:QXRͫBdTӿx hʫ:ƱdV½>>X/KKËOfՋ䛼w [i jWgL:JGS1ːì]&ݲ1/ #V}pQˉgLFEyȺкVƶb`go>᭹=`dxQ3řQ[޾K!G 'lxʥ:ĿKŠ&܏[=ì|O?½}2uĢETW̸Mfɶys=μ]nզ)L;L{{ȼn ɻ{-8(~teJݻaA+Ӣ7ΞJpٷ ڿޡ7L{>}|zgL"+$eRzP9ϤPðc4tt+tΔ!OԾ}-cĻJA]XTׄ{dMoB[?˜XОٿʂ:KŚ=yuKyɺSmPڿz cAhбőe}1XгP:̑Ѐ,"ˠl׆ɺ,5ŷ y|hev4a)ckmY\7@[ ͻ-̼﹨:3ErҰɿN܋񸃸ȼDΒʐٸYodF͝UGśռЛ3տ¾{R en'ḺH#V쵼ϷO[xς@rF-X޷RŤ)$7pI|ܗߙQ#ȝ]-4罶:ܡ ۾KݷqL΅\FkdƭȼDΒʐٸYodF͝UGśռЛ3տ¾{R en'ḺH#V쵼ϷO[xς@rF-X޷RŤ)$7pI|ܗߙQ#ȝ]-4罶:ܡ ۾KݷqL΅\Fkd#LG= TKݶXK@ >_K@  :eK&;a @2@:tK@ yK@-ȻKKKKKKFK@KKKMKKKKKKKGKBKK̵KKKsæ K𦷴DTgib_zxΨEr3KK'L~д]PxYZM9lC}jS? ?O̢%Ep6R[PpX?mQm*rcEr$C"LCLF.lM LUeq`g&AkUΎC@LEEv_`"#TBT]Xt@rE ֬gr</U: `c_YAڕb3d(u[PdsXd0)iadjajWrOj\O/TDW b˅< whlnYS`lG; LC$ʷW]IP!sFNJhSN%8nR>f(%ͬiM' BrAz8$hlEUVQ%vF]pKV O駹+||:>m5yAI{x`rTw"c$cYj!asA-^bH E gEH&KRuja n[N LuzaVJy`w|F^rNLWJjeFӳhDg[RԂrQTg{ACNXhbL`+{pbQXYXsv$lP/X3[+1G;#MՋƞV\ d^foJY LM.VdfQ7_CrϣV!hL\BECRlJiYS9L^SA+ Lg3揚g-4ITPrDJbhydA~ GXf(͌04u1)_jT3\ =;QaN0eKWt5k`ԬQX&x3M寕BX]q_7\ڈL^po.aWQ氩c—dhfhG^|OG}94S`s>xtIqXz6M\K(ik9sjizQ}z@q[6mdJh`KPi#jwfx<{ Z"]w) U|\έoz*/qlS_^qPޖ? VV\pYKpsa:"LW NL~ k[qYfD>;KMG{nb |l !8EKg>Nzsfopj NanaFjSnW@4kU|B[f n@XbGbwA1QѲ @fUd4'Ypm#IEy_jiaLlKr+Hm[PqezӋffWml0doFֲ i=YhNJ M@_Q|?Z[(ehTV5l|dAAtF?u,`llMoGLoJ=/G KaOFDj[l(as_HN:Nx^XCu6%^W0v iPe,q~/[1XS5bdDfI7 HtǢq_\?aR.BJnrs7O<G; \s/ҕ@+#r|Dc YEx(L;[J3- )FwX~N_z^9yI!8U{0Hg0nB@f[&hCs#ށ0KCٜQ vt[V*<&SvdrSN_Qpv'T9ij Ee;SݗoCHᓬb\tmԕhspy6pר,pSsKFGDC;ZM_]pESw^3?<7j.ɵWE[<#f6s,{ O]e@7_,vD8hD?w NXT1,f~ib#ew V1Bkn WT MsQRN uoWa:hbrBED\gsWt QdaVD5rB2%Cgc4}EFSr`ΩvKix HHx+;fOj3OFAXd.P Zxzk.}yҏzqjM=DCR`VWAܦbJEsju|-(IJ}xl jCrT1RDv5=v%+|eN Xҍ PxC SnkWnL&[GOSR;dErˁ/D Tn< ]ɭGHcM"Q,-wfQsKR "a M-a?JkN} F{v K=夡,a2<>@ԋdE9V9kL]Jѧ!xH} WhqKkO=bS] f(&S{xw3IMV8xk)CNYj l%QhFG[`jLy4\+2Ic@ x&_ %]\I)UnoJ2c/FzaI)vS`S aVIkha6r&F TE_RT:++p 1( _g9Ol_L#v3QEhY@ \xl fM3B< }kO'q2 NP$Dw](2=oVubxN%#Q`mVC!MU7j$R+VOE92RMkZMyE",E+jNQ]NY#Tm jS[}b `=Eq|O@M'\u Z-dc[X@eYW"s$\cuNT 'ZDZbKua6'@*Qo"GqT0MNYV]PlFFH+f f WUCUV\=Sepj= g{>11C[gk@aXb֗hUd9S\_F'sNBc j^Uxp8vWYHe.p<kR |l7\B8gsPM&UU"M;DUx"Q'}EF0>i];B]Y]6d.d$ns~qڬvZl*)Sí] [X/!JW:_UWWJUT TY8N^~3hBXpzKV J E3[Uipg FzϣGr+{vdtr]b nu~:}Tn'QiO{l^E`uvLZodj`"bzW!\)\%erT"CyUhPE&hzF#o9ljy`fqMa zOj2U&vaPo(q;nWJ!qHP_W^VTl;g`gzn'vJc1z2m>\OT;eKr) El1RL U\Tu|*nNCgiulgXAr24q=oB$Gw8]U_R:eExervrBHkoXHv AmEqpRTXMFLrRi6+TOW;wDBb2\c=N~#!ȠK} gaA$@ vF<^D!!\5A( DÀ*7(8b 2Q  P`P.$2Aу 5 1"Р-`,T@Jp02K\K&(P4C\ MZsdrX2A "у>&{tıT!*|J3 ER$P"<:6"#HCZ0@``A q  $@ 0L(0h `H7d@)Cj$,a8 P,6 p`E*!X `bxP0@ `(h@u@@,#,<)= :` `p# 7tȸ:bP8/?aPwPGp l Dlc(d EE0^=@ ,0uD8JxD"ā$R0FPaA1 ,4D58p"@@ vh` ^1 4AVF HnfE A(AW_| ()Z ?l Ր.BƠ:aXD" )$N<0 KP ) 6P~ @`  + 0 Ѐ P> PP@ 0 p%0 iAe I0@@ƀo EQ 6 PPp'PSCo( 0 #| vp<0| ̀|p 4 >` GP` PE  Kp 05P аN.P ΰW@ m>` ~d UDhp @ @@ 0 ?a_ ` 4@e@ F4@3``y 0 I  p   N`R x^\A O` P , E$0` Π  `V@ @ j @`,0 M (p!@  @ &hM@ [`A`5@ B9` 0F@ H `CЙ 1@ 5P( ;PP ԂMPS 0}@ PC@P #@ `  Ue 0 F P" 00 a m@`tPŀ H` a @ π:P }@   p` @%\ ` 04 : I  ;  w@Ѐ@0ٶ8  )@  / 6f@Pfs 0 e 6Π @ )`@f0; p Bp@H@ A x  5"gR@m  0@p @  ҀPPP @`@@0bPp" @@ 0 >  Ġ-p0}p N i@```: 0*0 =\/`t C@  :` bk@à mTdP&P@g $D` P 0IpT  cr A eE@ - H 0`Ap  P hu1: @ B@  0,@A 3@P 0h    xP @P  0mp`c `  @ A0 Q`@&0 p 0 FY r0 $` } DI i0` #@ | `Pj P @9@PP GP` ^ <u@ |*]ϠV   @PP )0$! u^ +QPQ I  @ $09P P -*@  Zp pgP` p P PkP <v &p  P 09P J)Rp 'b ;! Y0W pv` 0 P5 p GP ɰ*dP@`H0Pu   a` 0 pY p Pd p Ԁc` V @ ,ѐ ΀ `/0pԠ ` 3@) P@ - U h Nh Qu0 d Wp@ F0<Up  Ap|jPx ŀ0V` b @uZ`@$0 np&M )0%X p % 0 8`G @s>@ b A ͸f L`, 0R0"A -x@>PF ,` `/P P IY"@ o0 _   !y Pp}I0"P P Mg@A$+@ 8`]@b (T0 b; *!89` Ā0A6p - @j ]`* %P Q @ p$ @  kp a G` 0  4 / p@0 u) ,@ @1; 8P ` }g @ ti @ܐ ` t , P,pp  Pj'(Jp 0d` 0p  0 7pKW Up @ @ i pd R -p I D p  ِ@@P`&Ő`.@`qf@( 42p < ;G<4 20 Gx[ ZW/ p5 p& LU@0h@k@0(, *@-,C@eJ`E $"qP82`s@B@n0 @L ր:PP 2 (pF2@  A`(+ = ڄ/ZԀ'P(p $\A2g>h@$` hh<@H "Pk @@d%4`dIAy`r 0+L1xD @`58^DϦ! >@ph'Hf "X x>`rx @h€ r*6 A(@ |Gl!U4 @P0z#X iPP`(4 A$`0s`p@&0D ܭ@BA ܀"2HI\ <8 C Ku @@ H1 !+D@L !# @J`DH8X 4r @T[`|!X@@' d@ }.0 P >4A0|> ; ࿦(@@@pbA*`6;`V`" 1d+> P}0@  hATH `'0T@ @` 'AB0 R`mDf pd;: K=X$QZ":Z A(j 11 46P38Q  &SD3\0 *C D1f@2H)H@7 2Z@`4d@3,$ P(@(zA1  3Y&x̢hQp  h_@ B3 `p2 6a @(dL@:@` A 8D D A 5|,jp%hP _0XD4p P :# 86H@p 68 pQA1 VA>P X4 ,x !O`4g T 0!H"?|? S wK0@h#M ;0 q)h:0!  @` ZV@ A `@ ` {^H  & A"@ĀT6iK '`XV @(`Ă. ":(*$v @p40 p} Y@@0<@``*`x' Hj?pD{>H(L3et*kjpA>(Y . A+h ` B0h ' ]RTp*8@`pA4@ > ~ A`V`X0@h'= '2h`D\0 8 :`D 9] p&8 L@;xAIL1HG$ ` bx@ HF #@P\"xe  0d  LpA(_ ;B X0t"x6-ā`th`4p!BN81=@Za Y2 `|` |@.8B$+@ ``k @Zm lP"%H (`%ЂqP@!m̀> @@ G 0!@ z0@K> `zBF= |w@AH" 0HN@nAap? @*;^ !0A%P0 H0@DCt@ 4r0t Xd0 @10B@c&fV4 ` `D~I #@SL Ѝr@ dC A#P' $?8*GP<π!3; j D @%` H @02 4I  @ F 0 Y  y  sZP@ p5V< % 0@(V:H HS@ "y @R`A`X5 0R`Kd6 `c 0A$ `k`@\P`~@4Lb ڀPH [NK hM` K25D @*Y (~Z|@ERpA1@T0U8P~ 82 "@>hT=--@0E9l^@ x~$?@3p[8 ';hc 3  ?(q&`  I|4P1@ @UN:e $ 0R g@d P@&`]H"A  l0<(\v(O  P)` 4`a'X4P)xS )l:* P@n@BhA4Hv,K#)hN<!xtL\E|HVȃ<&0 8P!& ;1 xJ@ <HpvdpD@0  IPG8* @ >C$w 3Ġ8h =`Xd-L@XF2@qpAXaLB0`?p V6(^ t^ 1&p08Zznlmbzk^@|` ЀH @@,A],BbX z]P@ i 1=H/ /A%-6U ʀQ@/( 4+hl+L`)Aƀ &Yy8,/ q:t pJp v &P3Ai&Ј,$+ &:* R+e1T @ &@@\,W,g*`Xpe Fp*$5xT R7F0 P= Oā%PA L9p #` R;@Ch(J` N4T]@)D XK+3E%@ !@$p+ `T ( SJ0 M A`t |@\th g .`Ab b`oXp a$LN :8 `@Qp <#6 " @&xǶăXΪ`#2@ @:?@0h>-a`߼%tHb p(KPA!`0 HZ!`n@ T0` 0+ , JeȠ|,ҦN 6{. @m4 .)`x(` 6pf`@&Y0 d4|@2 5pe܃dwu P .+dwP5 c8@ P:v>h`D K#0k+`xho` > 6p@J$Z  \^p *n  @TQx ^?@` 0`dl vN`3@d@C ߐ p`@ =@"X`/b`hZ(р\E` l@ $. & @m0 #b ? A@iCc۽G@  `l,p`:N h`jj0NP -`$ P J@40 )X =l BQaЂ  rO(p   dP! PQ@0@PD10 A   Qpe`PHd2#"A` 9Ԁ$ <BI DIhC`#K/ A ml B  dx.Lxb1xh 0@ HRA(  2FD P - ЁLz"QЀ*K0tF0(jw* Ag p @PB`jlp@ZY&@  *"@n@kS<Gm`~h g2*F @` @ @@ PȀ%d @!`'7  P v 9@D 2uP $p #@< @XA 0 t *_@ x  > P@X6@G@x X @9bA@ "@@@L ^1PC J$P@;,X( (Ѐ4A8\0 Z$`2 0p"\@n)  }i H@ZQYp @)g H]- ?@0w(a|ԁr 4Q!JlC[@`94?@pB`(PB0:xH@ DI @ ]@ *@(03@)@ @2`7e ;@D R @8 HduU 7;c@KS$.fE+0}0U=P\@&A/P@>@ 09@0H@@ l T $NPlP|l!Up@@dAq@<Y!ǎh5 "@T@@"P(O@ :(\ p) %3@@)$p"J"@V \&.8P @Px8=@D5>݄:' (XHXa2 :rl@P@P@T ĀɀMU#xЀ2I?| `PxlY,(Q" B8A@D%4; M`X (`B!i  z0` `# ,Q0Pg'"$A#U&"P (0qG pq@.tkwK4x@ "*ZA=@  @`Ҁ`> @c@%1@%@8w`S$8L 0p_ET ̂@p x@)PT$ Psp =?@ d @u} @S7 (0@%1d;  `@lc \@2 l@ 7r00/kP6B!| BH!&@ # !!V LY@<8 p($ +!R P$6 @.Ch@4JC@.@4L|!Vr(`t0  ]ƀ- L @*` T8n( (8p( 8L€ 0 |$`W-@? &0܅%Hʀ0b "@7"   @ @p@/`P 8 Y(0! @cW&<Lh ݣ.(0X`@D"8 &$ @"O} k@p (Y>p@@R >- (8  ."-0q[,00 @@(` P!+0-0-@h= F@ F$5Cw r |E3P "P`_@5 4;|q\@ f>p4^P 6 L@lv@w'-ѼY\$p ;\X /2  @+(` @  $QRPDP5   \ \=@!@d@#.i)H`,3@PL+$1PXT{0PH@1` xFW"sP@,p M6) O583q8@P<.pd 0J8;yD'Ȗ@3&  @@s [ d"P,>4@9\ PB\ +@` @"!\./AUFdY\CH^ V@ P0XVb 0 t*Z 4E8P8 @ a %@20 5vo8 H~4r.$)`L2P%:,pn؇@ `h4Pl@ C@ it @D&bP LI Lb00@Yd<Hр?@  x |# e@!h@@ z#(la!Z 7@&@y D< A@ )t>TX?bp@%"CRO )0+P ,`68l~@  @8  _ hx lU$]*.hi@(@F@?T[@0T0T.@ P-3@ p З)@<$ 8E `TK}@ iBp=i@1^ L%"0TC@  4pR6gA>4fp<@ *$x B Dl@ $0 E0  Ā<@3 A@ T,@uV2 H-@\V@ j@ |@PP3C) %@(,)@4 $Bre@+h)20-1 `P A4@t%PJ Zf'@ @;u ?_, ,0"D$%0 Z@"P86@0' .81/<@4P,-I\`=0p*P #@(,I*9ZVWP Z'6р"gh @ 0z:t" o X01.(P ( t@ 0mP! ?00 ;PS&:PƘ  #P` 7` [+ ; p>0T@pw J 0\0D8@f(-A+4-\~ d\ = d 0v  @: 9 F Nc%$*4 S4 @ "P LV@pK@`20 5ppXD,@5&@Hp(U \#@4HP099ðTc8I5@iҷHP@4o @<I@*PX:Δ{0 NXPD,bDSX  @!`<@; 0p 3J>̥݉:% 3 FB H, /0 K@PP  @, H>8 4!@* ` @@ 8 0-:0& +0N@}P@|&@&sVP*@6p |:>PTQ-P1@I+PXt&<02` dT:@@ Ѐ' @p  @&P2(Ez8GP. =48T 00 DZ 0JI@/0@8 }=)5.}~TӀ1PU hP+& $P(733-0X J†h p ` ,3@381&@ $ lBն.%pLQpd @4 T qP<A T@)@@,ĆT:ѥ@ @ o@<DY9|'`Te%P @;uE%@5P[{XJE4@T//   =@- @-€ 0-T 0`+2N0d t9+P^$ %@?`XZ@`Av@[ bD$:  Pd5'3 f cP X9,@t ^*P$@,f ,qp|- "0*Bڗ@I`j d`at)@n@qh`lPt Hg4u@;dT@;" @X@0SҀ"X  @?!ftL@!Ǖ2 fe9 fc )pH@6pCi :+ T@5""p}@oU!Pw8`@4= $ ЁH@<  `  :[ > p" ڝ p05$@$< Ү) 4W6 @$6I`#` T-` d6P ݠ& p@(H5;;p8 @[g@h)`d"f0 `!@!0U2T x@"@0@0 #$ p#Gx$ׂ& @R{>KPYm@f9D,0 (oVxZ+PTWWB@d@"{p TQ@ ȱ(pi 2@LhP@s])@ it @Ս?@E 2`U@P)@»f/$"G@)G@; R)D4}@ʼn ¢"0D@5>W@gPNɀIBp0`!1$03aa@Jwp53| @M]Ep *nl@Հ04TQV@/h@P/ %@$`X0@C+N| =60|#O@h (t%   F l !лS@%`PT@9 "9@dD h0 ܀ HO?`%$@@ 4詩@ ,Dj&M9@+ 6c |3l@ L7:@, lxH < "  n =J-p L,@0}p8C,?KF h-P'&@4z@V@; Z, /<@i8 0@"eV. U@@3D(@@]@ % pڐX p X '`&@z@0D 6 @9hP%@+@p L.,r@F[80! y@a0!@P <0I d| @+ ʀ%? 0@ r+5!Àm.;@Qi2+ 0 7< 1px *N8 8 @ 0?O& <PJЋ`3G O 0$1p<$A@4 @X8Ar % ObɀY PC HK, @0 `  FI@!hn@ 1@pH 35(p+ @5@!{b4@W0}Ԁ `.%-xe@ '0:@"0h=*  ('_qH3 I#h*@T/ @@ސ(<0<6a K@6P4A$@dZ%P m'p]r|*0fk=@мJz/ L`@&0 x;@`0@ @r]MU p+gMM2#xۆdl!p0x+`   @8 \o0iC\.<y+-,(q?p /@rb" t}5 ~0!@8D> @<7@ h.6)pNM>i P$ƀ;@5 h@5@xT@.: €@.?@ t29@ @2dJ4@ @ @=V (C@: 7p U@*4~ ×|`T |  f @.4`a `P@+@gt X  p<h @ )Pz@4PcOP*s \ D 6 h-:p@Hyg PtH@ 86Жd&*@@)$"pf ,4`@,9  $*@4B=dӪ@!p @   d T- "@3&q"LW@0 pK=`j@`hP  `Y <,( @Tn p 8.P" H", -0 !r! < 8?-&01;T6@ 3`/pPy@& @@@E6p!ɀQ{7M=*5w/hB"ph|@ Hk*p 4 J'80``,@ +.0D z@0b`! 5Է]4Iy\Z@@@9ZG7h$@@ύu?30 Tx2` y/=! @49؀ z|$(U$@d=0+L; (%  1+b!@&yp@ H@s_P Ԁ$$k)P0  p@q8P,;_) Y%Twp!Q%G= (@D JDh$0@g!M@pj @9  pI֬'&=0P0).n11;?ab @ LxO4# טo7! m@ $ɀ`tX"€ S)p7d!#LOӀ4 $e6뀫~c@X4Pf%n]_N_;_|5n% e DMPXp D_$ 0`$pI:@.@# uT0 Lܱp$3PRp/ LvŀPh_@?0\ <@8 q<wH! m@?x= @ 4/pD*iiR@ 0J"p p+OP@+LC@=U" @'@(CJx e&$P@=b1 4@ $_@P*5Q4,#Sb1@ Bs,Y`zY5 pp@ =d%0@3@ @@ )6P bQ5D4 Ȁp@40 B5tiePs%D paT 5 -@d5*4P$88 1@:Ӛ@%4 @"D2 @0T*P"?yp@` tP d@Y `H-0$@0pt{L@? ܗm`Q 6P @+dMp=$PAmTD`Ndx5u -H;*k6 = VQQ9Nj@D(*.(o' @T(2. K8@ p ` *3;@'|@Rsp(RY&lX MV'0H:@ @|<-Qu 1]pj9T`L(p*; zn-@e~@\m=V0 |d@0 P.\nT-y`4 YN8ƀ)` 45 \TR P@ @|!*0%`' 4/ Ҁ!|Nc74@{]< ,#׀G:L-@<pK4g,٢9!Jp@DD @43 @L \QSm=PYz@(  4 TPf|.Ln0!@ ̎h@1I6pT@` +gNz u P+"$ 4P%`kĀ*Ш%p` D.h @V p Fa)L@:<@P@ X,d~?rR@Fɗ@ ``@80;p a0pY3@,`^T79Wb 853wZ@: @P \i@[gL?\ͣpo@p؉ $%<kP0x p@ h@-|a4@o0& UuV H+@#ǀ &9tC>@ T~P:$@,ީ)@ \@s,l@=P0\V@@N7P L@Dv9Ł6dm@ > a[ 4 `y@R@x|`8 +\@#ǀ4P d*O@>` ^5pD4؞J@$pFl@?17PD4 +<M> ƃ@ `1!?@ lx00_@.@0C@CTO9 P$856`Y2`.Phd@Ijg P@ ژ$@X$55* $5FT @ N!p $q9n P{> qt@/ ((SM< Xs$ H65VF^T9P ^CJI$`"&޳[P 7  7 > *`'O8v7p | pN 082 T; (@,TDBF@ lg06.H  9@ X@8^@  l] Px/,t@!K*@p 0< X)AP 4AC7 5@8VpG&@T~f@<@`[H!0{ @`$.=n zo,7  b6tD1hp_ |Q! plv,,&@;@0$xktMK p: L  sœJ5'6@(lH<*@0Vҟ@pt1nD< HR 1QTYN!`{ldhlMe@8HxP@ (GDF@,0[OhjX6@000*3`  E&W pZJ+ @  Q!@ @xHl@6 Sn#$Ħ ~yN -ae XBlEI@ )  X%P@  hQ :1`*% CR@0h k@/@xHCd@(pD@+Aw:% kL  30`gx/8hRB Rfq!(`nY-ABd:<Zp+t:3Q#@[c¥FxC PH@ 2pbl1<O ~{H_` S\G (\/ / Qf@tX>F i`|򀳏sll[Sxљ @fi>,I@F"0VOw=?s\&aJàh>R P <.J@7 ((> :@ @ /{:` Yp@|@ P7Pptڀ D a@]%` aK $ lZ* 8:%0ˌ jT0  X!E>)JUMP68j@@ * @6t" @P 3<@@$î: O؂v>h4`i~ գ}U@ ` hI&`` #<?s8IN@\@VBj(" P pU!#@h1up 4 B]8d@F`mY@iJ0Z! [DP@X$6@QH?D`` ft@@b(H4a8@|Q@ b8@ @8 @ߤ u(fQx  >H7-!$ 0sSS_H@8y@_``$1`+D Ha P:6ںg 1V3sp'l@,`~)@ P n@ Pn<$ 2DuM1]Th8P ( c x$Lj`zhg@!`KQ>R 9`"*"~l p]ނz,0 PRj7P$q>;@p'jN:`<MI<p UlJ@`82 ! [1h@/a t#qd?V*CC ). ı-e3GY@@d]( @ $pppB?@$g xD{ƀR9(@,xppT2 h`Tf%`, _@h%@bR_E  U@ e>0C\R  / 9`, `ZtʤN6#h*0 04-5F!@5C 趄J zX%d! #@$5lҜ. >8nP|@ P 0 0@ tH#@ Tgz&R`ZlnqI;[q Y,p4Pr@.`dDtC`]4`f/#pdqw pP`'[d&d*[ nF jCI< DX)-ԁZpR8O^h ])H0 8lW? I\O0 cW`ɶh K6K  %ic80D7 n/x@9L>q͋@T.v `[$&x@ b`pzJf,[ގ*dPpʴ8` ,bX00M@(д$ "@ò `0 5P8s!'/ 4@r` ;T̃3 "cSv>5uX;Ik5HZ@3 .m&)x {XVbA,Rd$5x2SCXT*' p0@KK &Bn#@ T8A0d p} W;ԉJ!` vgP D.Պ;$` Xb5#TdϬ~7ÀY*% H\>ـy@# ,2d0b@t(;Жi!x44w4/RҪl& 5` pPz@4 ii,S# 0 5@ ` HX @>" `) \@ui)03[v0~0 `8b00D.gYo{u``PX7F!@?%jD:-@y<<>O *QdT$P'rT~D<w@!H HEJRɃ QPG" @vx@-)PP @6 x#|=s +9da@2=r pzTRLF@cKp@ ݨUzfӹ%dpflv?P!R& 7 ^.E} |~0<:rqtg)@򔼀i\  N@(Ƿ[4Q 692T= nY 4v 4cOr ŋ+@hox0e1X; V0n.  ad1(?-@0@`1HfmmZ0 dE@ b:/$+Db6mj.@P5+D OCi 0L+&|еD%4&@  AR.Gد\G ,' ?[ą L!@z'J ( `bSl( PD8cD"z 6@# ڎ.@Fa0\@D:lHF @51`B;`XE!2@ێmѻ9$tp€$ x@6 Mk {!Vh/'aeaFB[@+ ^(Ɲ < (w&V$@z ٩sh0) p0f5sp9S` 0a 4˃[%Z@ %8mo@`[<YJ)5 lY((@"]@ X($ Jj Z2 Gc@@|+Z;(;>CĝHP5>V&#@-[v?ʭ<X:MJM׫2{0 Y`/3 & 5 @c;@jPP^b=`@j0XR V{@j=$ 5@SCXpDp3 E@ c)0*r  %?zT@$@ yl(&p{x_C7 [g=7@^e  ` vY-@(7` \gB/@.f.iZG@`ff<s0 7C<$l;h,='^3 #ҨPzE{c3l,ltXBK^XwBS p@0Pwr@ @ tB @0D20Q?* `'4DtEn+,&kIp8>:Eb E> R 1wgpPL p"R5 ԁBv@(l|@ _(d|L{[cXr 6A8ZpKs D4d xn;K`` .X@`vKhY7Ds@-@@LiI &|s Y0 &ށaZ3x?"Ah~NGvNcW/UdC `1*@2Egx(9@ `ta!̣A?5pA0t![GaV"V'` nD vd=M;@:8j@p0eY$ 37xNR>K@ ` ` (u Y:6 "pl^@80&&@$ @P~ M@ 6ƀ @׫ІD^ j@0x sr@ P#(" M4N& H4FR@ pPǛ,X*+X>t`J Z (t.5DY `LD# 0 !8@XGzHLT[& :$mZ]!@ ;ryT%PS@: {uqQ+rRygJ@ 5 Hc@`5M:vB%*pa\`z@ (@42ã" pK [>:QC \>+p`TCH![@ aF1tix!M񀙎 UZ@,@3@PCq w=y~.Āe @X` % @ PzHkP1@J,L =Q`t]@@@l.`f$*C@ dUE& NI) I%|$/@ (k# p0CpdFKn $0b?,Ukj@:e6K bP! D2M# @`[IqP4{ ,P' Tg!)@0 Ь<Lp/:]xUb@kRԃ@%5h6QPrr YGq@MibE"L 5x2"s|,~2Ѐ`*cXh1R?@Pڔ{N @$+  6K_  "  N G`RnE;lFD @h\ \F0jrDOjJ&HHLlP P("_bM@& 3ILPb@!p(X9) Dh0#` NX;Ri@(f9y`bj{π:=Xډ8^Pd@0Nꀨ 0 x$~ T@@0|0I/ l7/<`B# qpˀ `'M&g x< `Hpi,@`qTv-'na.]YF] 2J@&t \Kn@>GF ȞZ[n?#B~w` ]iV*# {rrqj' "o͇*'" `,)` @Pbr; @1!VL* f.0\$w"`0 8$ހgJ08Fyn@#xYd-p6U; 5 `5<➡d0Ά Hn41퀰S `lnW'@l$ .b" `J pTpL`VBA5e$?YD17YV<a>@\@ X"Ug%1@0T ' CM$@PkPql6+6PC\3 xr&$@>8`;l@GR (0U%;P@EU+0 9Q4l8 @n@# H:s!Y0WcPWI/  8`& w Rh@@Ȥ(TȰF@*  R PZ0 OMNTlmU($/ Hn }cXc F@@3J~6kyxcjR x@F.  ^( x\ĀbEk,xZCġ`* @2@ L=@"EHWE P p9k'>C.2  Z!=J%;؀H@ `p|%'@"'\HVH: 0$hĒwg:@Q|@ P̉PB HP4tBV0Yɢ@Ɏ pe_|D @p2p%f@6h@'P QB  eKй } `pk( ~,`@p Ⱥ-5%kP`@@ˀ4@FMZ .ŀ%` Pqr"%@@P8Jf)D*@e6Cpr@: :M=@Z 4c LXe0%4:PFւI " ]f@1 Hi@yഠz/p@8 4=NBJ(`` :` 0r3pu!.+7P8/,p=X5pM{H4 qyX@ D=6  H\6E?dUã<<$>P^2+2/(`(<Q)&PMR'\d[c: >h_"U=m8FpI 2V@" e\h%@V7$̀^5qR0A H4Oy7C)AєWĖ)#*{sߴ|fkE Pf*0@P8~r=9ߦBl%04  TJ(WP@U82ag XoP hn<@IQQ-@6@ `LB@ t  \ fP @# -n-l XNZ^ ye? @i`"9f@^`^C@ Q+n!&Qmi{x/`" W *Q gd& t B#"Q( 0ԪLC< p GmTЀG 4 4@#0B0h d*l P,tq@q xXZ&>2ֲ XV`: iVJX@Q$b[27@5u` c΀- HfT `` 7r0fo@}!(*j 1`S(T@l21Y ^  v @.u#0@Ӆ $`b! P%@ FGxj pZ x@`Τy'?͠X- P5#kOE5Jp3@'aX Op`$\,c)p&tc&ऋ]^بb!`= PD/ PP'B, @|PRs!PhGC:Tѣd,kEE4Al@(`GmT?wt@ 80f& .gX&" j'$(H@0}\Tne ȰT]K FZG@ PC B2t1=1@  .v wI x`[,@P^% Wz1@ H4bV݀WV28"" @0`Xo^5Jy}@kȁlD|!nH^ -X&gB#8a5,fH@K 8T#p HtE@ @PX#D``} fЀdH3/@Hr `!ai:kL(|@ y3`_x݀oFq 7*@S%yDc ,vM;~!NcC]80t6PԺᵓ À @@ P2q \-&Db+uj n1X@( 0Xm1;YmI0`ΰ nTDʆ:\jcAM(; wڗK@CG6>RB@FBr44uC 2ΔP L U)ZiBFКL3bFF0c6nnPz&u-k@"`@@XrIJI @ 92dK`<|'hdH("؀oҴ L( C<Wv:8p F)!E.&'d39BLz6<gsu;Zgϳy,x^<䀧g Y,x;eSUgֳ\)? h`yz6;C d4>k?#h|\u:Ss)hkυ^9w&z1yL@cf9Qu^; Vgs;͡g3y@K 9gZ\@ Άgs,6q S060>BQ\4Lw6CIZg y`VCΡgsnC 'u?%t'Z @ sg3: @ϐh/Z VEѯh:\:ΐg4:luEc-> B#ыhZ4uBW! |tyGn: Z0댈F_3|wAhvt>V` }{GAw-h_39B7}hsٙ:ϡ$^@tL`;;qt:~=3n4: kg_t->Џ4NxIgoZk:Y ݃xL馦͖6F_L3PhD ^Jgtt["=yI#Kt5Sh`&I7Uht] CKӎas8l{>Ђy6/νg4N*K=br:5O/?DHtsc$=Lh3alx<#Аg :{υ?={.;?ΘsVܕ5{ŦLQ>LvidZMƒ<nd4:ߟ)яgRtZhHۤSҞgT(z-HXtYuF;` ,xQץUӁh ̋6`m h4PhtY ]i`}@{VS'5VtY@Sɳՙ*K'sѤ+4y=MA _g48#оh;MHetYELҖhet`MwGU\4pJ!h3]Z5͘KSFTsF϶ ] ic vRUi Az;]@?bRI[ϗ4<%4@[/(IBW'ܴzIΰs7HKUkg3 H-Ԃiz;-ԙϘgA:2]6K'Udzj%͒FXiasZHw<3@&?/yоG X`rEjr!T`7505[sb;5(h-X;\y͠mxjAͤNqJ^itOJ`lԑB^M&e5KVM>s#D뱴lZI]>YGI釵#=L#i3_.Kϫυu3Fgm9, QҕFW@MشIZBIXth:ݯ=cVi tH~Ac4n:z͒&MiASt`C1Io ϐZzL0<'iycUKҡ3hNHws*:u u^Lӣ 0h7쬿ζk> \E js$zYc5uzcRsцg -y&a7ѽ :<~ZWՃgf6,>5ybkE1Ϫ4;:h-FIIϊj1:%MEMkuC]ÖF;.~*z,]v6>Mؓt&SS4#}ݾ_ˣ#4zfI>Uk5Z,MVςgs-m6#l&ӚmFDw<{T# h~]iu`X-Josϓ0Z}~L{kOty ]&`Gӏg 4+LNN+)Ղ-6fK稅ͬl 4zqjsY#.X[UFk9 !-vfNCRC>]NHFF[#6f=;_iV\YݮJΦBvӞ2 Cm 9_3 ]&E˯ $:16 SQ&qTk6}~_o7fkV=AGksf^zݧNHkUFv! Uk u&ӲPS/оM>U kQ:yVa)ْk"u mO ϵjuY:zmbk4YHF])ץT;xV+* /Mleks%=ŶYA!tۄP{[l(^ko#jIM6VױdzGk  Ff#Bj:6Y^hKhtX;]vko׹itڠ=Jۙz=ֆ_}4zܫfYS_v!_˴!iY\["m:\v:OPhJ{UeimZn:.fkۡV4Lz6gIv"[MnQ1uMuJڶyEӨ0';<]&fOmIvW7mu@,ҖlǮWצj%7Z0~=k՚t>[vfeKq`Oz lhKkw^.fZ{iS=pU8'mnI{aAk4:Om*n[]=c͑_:TMbKhQ6-b7.-[CMo7R6Z]öC֡>u8mfgNuw)1j!-=Y-عnQD/cYܴ:̦M=D̏`wAjZu=Cw?uzv{bg_E0_O9mz&ݲvײUjcX-l6>3 952{'NBj5J}&Q#iz~v;Ξmvs{l]fGEjhw]7͖&T;z;;/k]=wЈhW IC |MAn4{έyϱNhvz\ء_P}VTϲo:}e״Z6&;wVT+s{m˨IڣmwN&G/WjJ[imc;Kּ2bG_7>umnd[t!.d+CnUvwn#Z_ An{!]/Jt#6HdzJm\@fm)7Y}&|_.5 }e9ҁhw`#}Yp7ޙ=~HIm6,gkͽw[IEh!5zPY;OSw'>\$z;ضk)7z,Eöٕ銴/yVe۬mۓAu`ͰCۏl_~g]šnH7~@{oʾ: m-&׭Uڪ$xS}?мnsD;Wmxvsէ7NMwsXl5b{+SgG Gc٣-7z&}wؾɶuؼa'O5 t7m~|[۲tߚSrk[ْi\Y3OnS5<|-=#o^w\ rߐ~퉆BGCq}= _߿qӓ>M߼ij[~zھ7 zNpݦj6DZuMOJo{oR7 NA>켴u{ݍ5Z-v=%=l{vINVﷹ{6 ϓ]!."-fF޾f㳍">up{áui,v4f}9餵>BWڄ]VWEuBz^xGmM|~}{p8x۰]x#] .Ӯ[moKWnv[^.a[ӛ53Un8[zz`<5ۥj4zp9C5|i`N)|Kk6*hSa0Z6>W+up\_g&Y W~u. -fI7ޢou.޻k뼴0lz {wb\ r5wú׬֌@Ʒn4}Z=.#4޷OZL ԙmsA<7]N@0".U_v5;5nfV8c"fjץu+9M>"gE^i vvb&-Sϧ;z~o ܧ.wZ|'\Slߖ-mY͏wq6.yYiYlv/%ZjsVqz"'Qﲓk7E^.K 9Ի .ǨUܹг)MӾA7Ҽ]6Z{ֵm=vP<]lQ'ݢw~Q2p7?R3axޛys͞n{wyonUZTgx-`m)rƵ_<@_o  &^w:&=sρi !ϘpxmUIS衵p 扯er_0.ފJ+5B}&w-.ږv? F| 0jk}s}ڦjI4d|M'Ѽŭq[x O^Ij9\ΰVFn=mNlZWŕtbK=֦t6B"-~O`6o&;Q!jY-Ocr~[[~woq8^{ -/=y-;M [qQ_:oKXnܴع u}kAMmy;7ҤgxȺ}>Mz֕_o&AiǺ8#: 'ShSM.: }MVh(< ~܎g}io1<>~+x \]+*o8<,~얐Mo7zȭ;Ϟó9zw V E-ogy==.6q6j'Msy\MJ#ŏcNEgvXl8|.VKC56ݼ4KCj;m!P ei}i]__kVT׭UHyR,m)9>-jO?ջj:kv>;?Om@G"m] 4\.auf<\Mơ6wI@^Rq8\0GsM7͜knfcst;:ԻI=ӳS萷]r=svwng6ݵ{POcЙܳk9^WCτwZ8u?wwBo y_-&USyj0sRpͶjNvvӨ .&7~?}j-ok"q:z]NU9]z=_}V֚X't#w) o햮7=x]}, N'iӥqO:I[ ~ӳsR<~ od{Sz{?7>Q O36sznYݼv7euy̼d>fcѫ;>C ݐ^g}هg3kF?jhqf;NA{4ǔ{ uRvδl_m8ۨ] sguvu%ivZs.;ÙZq:3܎Ce-7EG7yiWw#ל(|Ͻn6\ŕrfL#/B̷7{~&y_ҽᶐZDn@1j|:1sC hv-nwzWޘ|mEjdO܋~_K?8z&tێr+7"Onpw==VOcUr=u؛>WWַ?G}ϛ :]?oKr!k]q)5ۿm~=9X\NBaf_{b\=֖`WwnްVOsShz<:n|vqؽܮ.Kls;x>jw9v!OICVv4V/#u`zΨ6cuEo*d obkǽkcԻx>-dq6Lvۿw.mb_s7znR&?r[-wyw]7~_E?t7ҝv^܈mۻ^ש)p:z^[űX?mܿNf[Hata5wx rNUDm8v4S=?s4?:^W{=dv.+/ؓ kݸg!|MU; ;z*/u:v"6;d?ެzݚkCW>z.ȳclt1"nMpv5w<@]"=m'4Y}oNcuVzÝ:Swv }_ӕku1}m rKSllu$y'l ;K7g&wO`9>ݞOժw >CGbv{NnsWmw4~TM7iD`v#GK7^ol% j'iK͋аon[d{s/@4pn' r4&ga@n5N=e%i{άoid-&l S^#m@>#[mR<{Vsrs8!Aו7ԁHOwԫu6 ߥq}liv6a]mx#Ul;zG:#1/ym2O=[|z dmׁr v}>mvJ;7&'߃w#yC~&pww9>F_|߼7+;p7awf)}"p;]z]U/ihڸޑȷXt` 6s*}?7L6Z2k+y}p?[Ɵx|:)}7XysB=!_iG̣:o5}A?6Se|ݎQ֏s}D?@C+ҹ; ߴgg]_ַoOw^]2 wO[Cn'8.K3 &i {ԙ._@#l|=+l>'Or6ٚN$mK[5\o\vft[{.q;pz>6vSOCeF'W3ltۿy#=a{GLlW;`7k5هZxZ=Sjǹps8tZOqd "|O ޱvFUгe-+@)q5ܒ}ͽ|jd.FAv8 oRyLwnGIOoF\q_ƯϏ/bi;X>>jߔoW-><'vنԷl <}WݛZ=xpڮ 7bg.{}>J{v5`>ͧOCj,?bozy~6^nx޾S7I{Hw}r!u<KBwA?7[kfy}|7w d>no&oGxJ=^ _AGr߼^~ Vt_vzUcp5w3uDOp#ߴpc>I3'oY ﻪ"=UM۝Tᄊ׭t7^э1oC+:70+gGǵuthn7Σ7>Nw<> 'gՋ[2:}+u=>վV{Mt0..Ļ7}g_t#}<n6k{9]?ox~N _ׁ;&Oqfx*~_ pfRO:?rs{Hzeޅ..W}|2{P=mbrֺ 5;7-ocliyw~iSv?='n{|>:OImtY:LƎcy[?IKqu?y;[9//dɫ>i7Yם,]i'Mxվ!,Q?ڋyý #sb:g$-ۋ}uoͻYa{j=fԺ=t[?n6YΕdƟZk1Z6nnXCl=)}/kBj=JZ2]@_XY /U$v\7T=Hp˷S?n~}>zNP3ҮuOjЏ_ﲧs|i> tG=Imo1vD>v;|_m/H?zVOkc=nT5n(u=ݦ{v_n?7'6VgZ_tJAj#qCn:uo&۬n\U ݱt!N{ 5Rwp'x7A}ZoSp#7^&(g?Y8;c/N6W^~.ȷg8ɞwȵdkts(ߗx?,I6FynsHPRGD_w>ΏrWٛkZ?Rעqx&}Wa4J\}7;ܹ5Ѹٚ?raOr/ym +ֽJꬨ䯷Eh{4]zmCMgc5^q/K緣"&}T^ܣ#<%?ُ{hu-ފnKi~}{Gy?z{z{Oodn[ umnh{sz hlx}$mXszv:o1}{r~/w~zt8l{~ll6kz pihtoil~wsHsr`|Jz*yu isvNuhptovylti~tuht n~zistwRpl+vrl|Hupi|pf}t| }u{~r{y4z|rtgjxmopqj?yyqhNyt/w\&iesrukrwlhkJz}~oqSv ln{[l.qjw+xRolo}Viok|ttkm~Awd~i|Sr|Nm|oyt wV~u^tlnfrshty|k} knt"rNw„qE{x/irvjy~{rle/lquy|Ynq5u2qqtymkzyo}u~x{~ySg2BiO~~ss{|{gMz ~glq|R}~brV|D~t:qjrYz hhy8wqr@jqk|}i*mn!vzm{-kujajnv{qt~vxukw-~`sUqZ{8:yR~fx=srŀ{ q6}gDw-u?ql*mWw"{;~$j}|oq wb~jx{CDzviztunsrAp끎ieyMtholyayimbiNh#~xm7z}-xtxqtgu|~R|sxxg}jKnz1m~kzQ~mrymx'|uhnmxzv9mlxjkuxrk&vkyO|o r=y~evl}r{,q`v~{gws 3corqvcln~@omxjunhSlShh~sOz~xi i{ssr'||stxnw'ijukfrOv||ruhmonskp{onaj|j{}s\}}nx1mn~mh}}+lw|t~x{{w^yys~llہgy6~jqn'pdki}q#mvUz$wv pHq-xfGm~|xyyrhtzRzvsixqqq~sktr hCiz|oButyRqz{m=shV{oYrBuX}k^tFHxv-q q6q{~{r'}mjJkzx{ÂxyTo7hml|삈uoo(pm@z|ր@~0p=kmT|Nt@nomthstsyPqnSgp1x.v1jm{jwknq{3xZqnz{{z{9|l~uRz$|zs Mpozqnw |tzirswjnn-rx~~{uqj-ssmgsbhp{l4rxv'iq:qkl~xh7xg v=tuus?sk?s,irz{rm|kq|uqo}}Vv" Rx$ob|ls~f6sohw aj0}-kpqrTMl`ozClqwMlzj-lg8|olp.~}yYqmq~}z}z{vxhv%yXkxqmlpz]qprhot{Dpg:*|Pqbx#mInsPvs {$m6jwy}xo4t8u qY ~ kturJq}mlt)y{tnXt.h${ wGuz{o_~~n^t~g*waybxgZqSh CskmgKi%tHi,K EhOeigUqtvy+y{eqwÁiisvonbr]}nqwm|Rxu'o|"x-kmt҂GyTo|jk3ustz}f|,pLwDlL ~zyliRr~xRpv,}gw}%|4oہkypxDmtkp~+|igwx~OlywiW}sXx:t+l4mk|wx7Rnot|q|xkrXuz{|sLu{w*{mbpm[Ov|p]vcztWnt"oOmx hn ~&vm}$jkIhxymxF}uP}LkiՃMs9sy}{yÀq{hu*o~jEso6s⁸|[t9wc}w{syނGG}~nApjPhǁF}j}z{cuRzGmkf}Jkxzmu/iv:oq{hvN"o+/isto|y8pCn~{mhajh=z/uz}Cbw h|]p}Ropqo'sVmnwuios6qj}nzHy䁴wwP qㅟtXnw~Xnv5}6k{lj|p}l.t.zn@ztjz~(nuEhxUwp{AwnmxBkG|]kk}:n=}nmwl{/{|JvibgjXrpx!{PgXtjk*naj i#j kB|R~Fn׆z@womdqiEun hIwkxwNqcttmʆׅgngÄWg?7i?s3u\jntwWx~oFwgkx}ۃxE~R~GzhvR{MpUgj8uy9hgp|pʇTwxltLkFYygFrplmzf-rJkxr}zjWnCE@ukq%rӁ}v=zisX{TorrynLrnm4ommtUq1x|Q-k iYrtXr؂ksvEjx*wo3o߂jriiȄut_inJmuwWzi*y_kKrmUx5UUgeiLktzjzx7w~R~}p s|,plg)xoR/valXkEtnf~t~ml#mjz{_}jzkV|lhtxAyu{3jr{'~q5rHtwjly}ykwSzskԆxwlj.&xp{ yІCyA*y|k{iqDu{r-/i!w|On[x kpp}biHyonu5svmk#nm|C|su |rttwm tl*nxS~τiĀ~smw9xqPzbhti|xjvbqxjrs%~-kryuBsTo|prօVx~qmY}1m*yw#njw&}olgricnlr_jm{k~jz?skShjg~"v2~m3oDj{kmDw%zv~ƃqpwՈ?qp}т~il!x3wӅ0n|+|lq_ktrt}yy~sBjl*Jz{Ax9m~dih{xvbr:qP~w#vs rڇ&~j=s:|pxsPg-xhtUNoE-wzi scnlkjzv={dkws~h$o}_gpRqyCylpt-kՈgLJ{Mmv~h+~mt=tgj5rYt_usxʇxxxJ}ztweiq|9vgpvhkzЄi&mE}ʇsp~y1m_ktLlyw@|w{Jk+kiOnk܄9ls?q~px$v}wxt&il|@n@zJ,PgMz sE~smNoψlP~rvktIuxz܉nMszgk}x}z*^~ƃ{}*sjDq;l>yi_u7iȂm--r=yNHy;k{t}lphylA-yBinrWhtÀn|,wjj13ācopjH~hq{omomgsn[lF~Y:~O}qρSwzj4v{+l}ىcn&lLR~1uIY;km4i+lzrDžy|zzxy0{wᇞ舖vpxr}j(g؁'A%rwg}j%4{xvJF+lFt hgׇ.ri6slQ{pσ+|Fj݆>wdx>opx{oiNmm iLpi~sO"vhnvủrLj}sDpÀEzkn*mr~Pqƒx{ZwNhtis}~fouc!kzti|;ŁgǂÃ~)x$jurt[ur!.~j/{n:q|nm{y,wlzanzXvrUy}tvU|fdkRnpkU$~lzBizb:o}ZrRmBUg5q|zx}fX[~n {Tnf|.llgntuuzÃmmoXl~0nہ./wJ~Sv.nz@yhvډn}~`_kQMjك,|t}zRrj{|>tn{ɅSgwpi~sdLsqgEg {|%wud~x,M;||nl^zuvz8o"u~)#mJɅznNK||w|q kj$kzdyrugi=rskπ(i_gqzs%rn#mRoB&z[l`ZgjvsRo\dk$il|\yyf~…osit}(tgEp>{{j{ wx ol&{ nj|qLw:njہsDs qwU%r?s܆~{jLro"otzo#rKw}j}9l{qo~nWSytk2F|mrRirO}kmuA{w~cnGyGm y/?kr| kie|yNoh*wG}@yriމr(u|o i֋x~z3q*owSmrMކNqX}|h*yÉn{x΁fq|!t7~qR~Zvrn"otgs {7;tg ApiMwqwjK|.s@ljOpyzڈ-uLw@vIx灌gYrxtPz~φ]Avqn~BuXl yk}7hoL}x}on|t~ ~+~u~ƀnDmgvs qnچUzz3pw+u yaY|xipwajxGYlJ uq~3p~x͉cx~vs>< hHquq}"rquh|o0~}oFzIh*wHlzmӀs}Ї-y8ˋ{xoq}s{Cvirrgꂊ~dxF'swlw^(iZwSwin{plpxv},pćnlk}:Yx[nsfk.@z|i{xҋ|}iTojweqυq<|:-xk}lj{rvxoQuslw@n/x{{ Fwowlʇ:qx=yq m{^i~wnj<?KAssLWmS{uTs{31ustwCoe|j}alokuotb@xcljy|bs\vsho vl܍ngrvvi}Sv&v6~VGgwvx‟joo|Lxu {.yhČiuj،Pdxw?qRrIk̓Fofrt}t@yt7pj3x5sntNiK {"rȇ$q;g}iuvs1~-w}zvij{gvFxubipύe{ȉ'i.n"rlTo]nv6k$mօ {j}uixv-~lnSwo|*uils݅{`r)~9i}Qvs}>t]oO}2wmlsur*|hqvAwrjrBin dzDp~}Allzr@yrry|svuu{(iixzY>WhDm'|χ&sct lڄStX}urjtȂuߋhozCtOqFn|wk/{_4o%tkl{{OvskN~ollz~smhvtjjj{s_zl׃kz}mmsm=1xfli/zɅo|\j|m-kˎBi7r^ ʍm r[ls6_n[m",~TyCC~}ci :|Պ$mrw~|fvm1xgsox~=yfn~lvІEj-q,vmHqm3It0u}njy "2X^ir tuRqr{snxhtm+hnu|l%Mmhׂ2/ny̎ j{fkUmkl'~rNy}lhC}u{G,i[t>{DwOq~{1kjb"vrhV>ovx|j }L{0pۊ hslm凁^vszp$gwlvuVs8ފVW|@ц򀫈ͅHSgք9h>or󃘅o}qlpunHzuJ=~xgqytu8/usLrhًkn{S~1{wgVyp`ugWy|oZn.t kvwm%҄"vhqJk/&sqBRp i k#zz{tpq{Xq|Wg}h"wn>u t3gZl‹}8lp sbs4o&v%y}Bq%yXu|!rUm7|ԍCoJrlt{1~ɂ$ċLoq~Wgei͇Vz}u:e~s6qρo5}Rr_m4| zbpur@nm?xqqy4s_|~oohnnx:ZöΏ؉ h8{"oY|udvvrmZOq~li{h.|ry^tnJ+)[}}_kIw"y[n(t[~CqV~0{y{alXl䈊v yt9h:'9DsSlvzjːQq2z~Yr|Znk}dkxw.eostk4kl愩ygkˈbhk?qpgx菞puiz zrink,thj{#|ct]|Ӄ3Tsc퀀ln~Cn5Ɍq=zbp^iQoot}[U{axv+y'sprxv鎮~r} rgxpwxnjuϊ{rsǁӆш@|9h*AwlTohk{~,wwgGy3jtq4otw *orBi{uKwЀhq₯xuwm3nW~QJvpBv|1@Sz{}S^lrfpZq҂sSxktwua{vFho)l hzo&n*n]oaynjuG{lh7ixqB{hlyt|ݏIwswj?s o7z/~zjӍv+kwnhX,J}gRRnmzx7w_yn9qڐm2V|sKtwjx`{ċvsN v@{>q8`~܃F}膦a|~b{x̊À*w3uy&uƍ'Mmduy'|{oegL}qlIh]ZwqExtg7{rwdy x4|3r~)J{zgyzQd=riowh1+olzI}:ߌze}܌kÀ[}'{~s{]o[o="o~HKxx_JSx@n`rlюBꉧo}{w(jN_bo"K<ڐi~lQy nnysK: k}}}NqMÀ$o ~pV~>l M~[nh puy&l9xqR~{iŊjPcYHsᑪ݋lω~zeux6k{lym|Iw5%slkm}(xߒ3qlgoti҂^t|vo~vwt}{Mmڅ6xzr˃ۏPjLng}&vLlsGmq4wjCA~ uvlǁa׎0x{ ktgm%mkmyUgVirj}~oj( ht(juVkqhep}mnևݎpw~pj7hKlxHtt~e{̄Ov){snDЅ;`w̍ߒr@.w/w%jA}UzݏU~g*o kr~mOhE1$j@t$~ԀI}lx>o&uoPh4~1jGy l8lNp D{i:|~{[~ҁNsctX~DmoڋŠx{r@zxApMlVt-4$n *mP}Nos^im ttz,wimGTv*oސ0U'wsmixKt{hkv'u//~8pyo{ri9v꒡> oىY֌oi)Zwzjqu}nxMÎEqpώxsr }=~ {҇|r1woNJpzDp)iezڇut|sɏRǁa8wZ${,{s9dvjsttLt=s}wh}1uk9hs{us&dgnm&l~oJSr&zz({Lrᒡ}ohÈdvrusqڋ h6jVdNhm(pk…Cq|Ɗrw@zdÃrsTjm{h}r,{il}Ԉzqki$xp&iXrsj}}>u…t}s{.xp,Sv_ߔNos&y{gtxsyɊ/nsv?vsC2.pJpyHGyuA|^j yq|݊OdvYzbiq]tJ ?vz|(o|40p#qSqhvȂsw&zV|iuq|Py|Fxqqux6sltzqsI{x6wSxxUYUgł^ޅK듙|~ZplntLl' Ov ib}Ǔj~ ni~s(!kk7wsBĕV|zBrPqfw>x&&lȏ{Qz}zbxh|sm1j_)pt!zpwNxn{ q/iw tajeXuSyCn&n_kWmZq~i09mR~rOn?s,TMsB~gm~$jI҂FuRqoЁ+wvtHti9yx|`}dԄmt kyU׎u~oӍ"z逼r t’r O͎< jÔ&y oOו6~|hm׆nszQhMb}{^:opNy1}jktxEt1GsNhzNyupXmrrx~nu $~SwJtZJ[V|'{w+$*mT}*|-rhU~ԍyenފg}jm}{pnv\{7#Pp=fqtރlm-xg }ІtHߕ퉥g yq)[|uَnajsltiڋQpRpwztw}ohjft͒SxmŏwT{w({ciғrtngm hӕ*J~po}s\w{zNp3y~}kxj*uqkEj\|mxvIh't{Bu_xxvOu{snp<$j`4o)x|v2eiogtf~iox'i |oRm\yD)i{pF(yz!(qrUxG}o7h_m|xVz J|dQw~q=w$oZsmˎh`ugsz{=-w}^ yܔy?~pЈ4!~un{@y,ԇi{wVnq@̓sw {p t k{X}D:p)w,iUfoXMm~}ar3mijxg"{ӓ; jlpr) noowmt:9zʌ-rxAkӖ~vލKk҅Mr}brsk1q}*mnSq{. ~bmo4m{lwq}iHXp3uiiޅX/qnpr7,ikڃKz9eiY|sא0?sMtj{]qsslk{ݓUzYbiwqz_~nVn•fZ~ovC/v,i}~esZqs}4aV|5q(i~ٖ~k~~sjw1k}giėci}qOn{ktm΍s^tD$ݒKtwzsn^iyliV~jՕzy$q6y{ iim͋֗Zwfx4䙨rgss=x-ykyl*u$j|'݈  ~Z/w46܃|Bi?sikOr!!wБ=wlfe9vlq<)isv՘miFʇ}gjDxoMyiz)kB`mSޅ{:o~ZOwkzu{tpj+s㘊n~sؒz1xuhx~&f׍gO}hsv҂׀ڈn|o~ڔjj~scXޔywS||||^}Mlڐwo ypj ky|1Q(ion~B}jmhzprNjpw}lq,7irtw9+|~ToocĜy6q^ՙ qx o|u|ye}A.wogkĒi.Hqjߑvzo{r ~|k%tkwi/iڐi}dwggl$3YwZys6k|w;sē)itȘ`p֙e;Y|xMplxÚwdkӝP|{L~,~Ԅ=vostgwgro/~}ʕvskIwlctrnuC&zY&u6vinj{cquGƄonŝ Knn0C~y菁hweQ!y|{Co՜{j|mpjUzjoxxr6sprqWxԜ&sf>oŃzu|| Fw|;rZqlnHjh jŋrŋBsm`қ%k{vNh~6xigT7hӞg̃cijz͐򊠉 g+}Wtܜ$jmrv{tH$obtrok#k#mj܈vbA~0xfytTNqBv܈oproxӉpz4s {\{3h}>ou{n tp||u푵~{r{%rَmʒOp(@|ݏRqFnmbg߇k|ؐ[gk, Ɲˏ *m?Zkl mz{P(ilBi Hur}xlk l3_څGElhQv*ynL}mnSuŠIv~Guk{쉿ꗵjY՛nyy}m}Έ* 6U_lnM s[bv#Yh'iAf|x;Y7kh}lvukhi}j:s(~.js rԍm8bv" ypؓ.)oQs~i{wsui>}[{"llНq Ԅ9lwnyy[~ \ qjMl9Q\ |OpF{%lx|oru$85>}-~`w~Q}6vJlԊ%shT{t{1݄hg7{<|{Yԗ}v_oyÚđĚGuwyxrǁȆ}sm|eprn̑f}jw2{Zzy|xX}h&uw il1™ᅜ:{[T;5~~bRm gl(nHi6jtz{9ixyx|i}inD^n*iƙV~h t ΕlhX͌'lwtЏQw>{ol#mBޚ{r&!vI_$mmNq=D Vn up}e,h&uꂖjrGힳy@Q}7}Nh!XnjSlu tbxLOq_wajx$4sl bq5ib Hn∫*vm{%akUs߄G ~x7kf9lr>y(1m ~4-By0p}z.nakvܑbh,sm{py̠uZi0rpŘXx܈7oq jljd\~]pp}eqҌuՐtl~{q̊goˑƕ 쒵 z؈NsڐȂKς~{[nJ7wrӂ`}g{>T}̊avhw{Z ؞nɕОʘlf:Zk|nwn:z'نHwhȃ|}qvjx}w<z&u~Wm.l)uk錒u }cV ܀AuLlrn#lќolwCy8~eq&:~ρlT{~mxk<}lvgipwƉfIr-x-uovpp{6Πswl~ pra}k{@o~Z~-kDm5݌ xUzrrǔhngux2zyО}mՈYÆh|qZwS_YBRiw-mdvxsyA-^so™/{uiwXxܕ,훅q.n}w]Մ؊}x:sot7fcmq5uzoD/ss×]oQZ|rDr Qu`vu?s|Ùρ{cmHlm~}okxPJ~ڇCn➭xȈvVzmck{ h~5<nntztÀ6Pyi_iOnҡ|܎NyΠޙ}smi=u|nVÓc-uބgwWwgos̀V~7w~sʗkFuƘApeݠ.Ϡ"omqjys~nΑ|mwWXnգ7:*+Ҕ3Eʗ^yr8pؘl &Afu`YrkxӤևsUzyi]st⤔sYmCyrPl}…hў4V˕ߚto&l>txypu||rh٥ vHq: Dp)O%mazkom`BBu&uʊ~[ikn\u 3GL̊^8zbrr-xQnf~Xn9lyxmà\mjzrnÀ_o'nFf~(jy rGtR}7Oli bpu'ixm{̙Њtfo)/{wlyKf6souNz=m ~Ԙwh݇X{pt}yyk$oh/hϘ6g|zDwΗXWÆ}*{9v{j> %r*nЗ܃oY~ qsAp#$uCnV}=zߙEj놉b.tk[6Rii צR~:qpw>…(i-+ m{o}r.t%t z2l4m9܃ʤgH̐ |; ֠U:owoš٤mo=sWmtK5Wbcm{aftobrg|/䦥Ӌzyئ%mEh4r|"]nQ q5~cl#mvobpǃ۞VprzJViMi\{;yͦz"tčOIw Pgmҙodixx}˖9l}d׊iV~sn8 r߅eruhkߖaHAys*m{\zi(Ċ4wJu3?k y8Ow,tuSgjZpzy}tBNy7}jpr{oŠRzUqڋC[*m+s܃inWČˠulj"rYwp͖Jk C}Lkx˝Њ,iv*cmt{lliƥoq3poToҖl[ms!tIpo ZwF=y碇GˎF⚒zϜ%suqinKצn*ox'1tof#k-rmrɚMsS#oèisTdϟzt}}zm#0|~vs&z1Xr.oiN{KNcmyϛ[t?ևxrtt~tg d qS}q|u܋w(D죓iqflm&q|{p-uxkuz+-)i6%jMMԄub)W$mk{&td[ks(Ύs%{դ},Yؒ䨪w{ow89sߕRljQpndk0X>t=,k{ =tjyMk^tfaqn̙{tƍC@󕨆lvp}?UzF~{yuklTuO8u0lq's2~=wk|luhTi t]Yhozxzry8.ln`}Ň3l6} 5Nsށ pqrGuJbfu#ӒApfOXnأsϪi}h!ui{Hqhtǖ^Ȏf$*|6ju&Co;|g7Uq;>~(jvu]ǎ~(Qzs젘l}xVi^VnYln1SwlmXlsSTbp6B~tigpόEw٪ϑHҩwR&vst|x|{b jcPx3}pq6klyJ{ԃ(Eċ0nP'|\y5I+|}dFf{rtPrk(o9şzFh~jkhgoÎbp|+|¦oie'iOWg;nq| k${xqkPrn{頞(w |&}lXy[mh p[5ΚYtga[g"$2ncwm~kuեNXtH Rm"ȈEp{j>ө0n z3as#msvЦ!ul֪hUwg2uNjAvyjudBi{nypghNTހooy-X|igtiohBj)zߡ2xgh遟jĆcmĎd_l䢶{p&f iО{Ȃǁ׆xuji6vQuݔўf͢ VuҨ,mw/ ǞpݩØ+ncoknUw%t/&{+?\~FS m3pzvڨ\S{tŨnoy>zT{lnOqo(؍kyvNhXڇ2Ytiыtxh~t@r|n}5y ўnToXr]~ZkXks~oor^r-i/r9dmlwmsi,8u]u.h|8~he՞9tgqz2~ٟtӥއ&tks"vBXu(jp"rՕmxSҒmm{x֛K1y j GZtIu&ztsAw'sv"ԓՖayvO}Tsnو}pUzOr{ixFue9lnzUqsfa[Zwei*@ܚw{r~vpօ;+|{pmk΂QxtrK\tߘhgop{k~K pwuxguFѢsxդC]Ʃ{hū'֩,Y̚@n;k(*'w,of7=N4l{EͩHubgyItWujuznxp=njo?quuB̏{r{r@1mSxϓ juԩ磪BlglRrS&nsyx'0<|͂˪֤g2~q٪c&q'{O8y2vkU{in[sK[ vR:&shxl[pΛ:bvRpÎw1 jYNv6v~d sUDoޛ|t /w焇ituWơhi3wl[gҔ򘝘 {ouRyLlx}|ρ BkmɝChơ׆z|}BZ]sQ|erin&uy@nբBVJzUh}BkլklN"vnlj} s|&>oǩos|ilܘs ~*mhՐLtFsn.SApw7i,UG"ד.Vit6̜,>tyvaj^×Sg||Ƌ>(Ϫx 3v{mk-rt~ +|rx)yį jpoaHғses {RA0zҔGNݏȬ&WmLsO}rȫiHiYs4J{Bh UzX yn Fƣx{jNP)m̖Ml<("ݛtwëqtzuwGs{1ujޛX}{񭴭prl k8WrhvsNt* jXx{O~_9Uzyx=Mo.n=nȫ2y{Groʋwmq_gvJlmy65ފ `Ȗcp8wh}VnLkBÀ sHs!/~}ǯ{ίKp}sObvިx쬹 Ѧ}q>uhsnȂBsjp{k􅢩^& |o>Xx{vZgPtwoI}qok4.tx}uxȋ+ϋ:k%1pu#=yps=Rr7 }v &<8#mjj~j塛:ov~go˥xԧq5jMsuvPgf#rl} qfkہu*짵fl'zMϔkixNq:[t1*i~ws}Nvi$NhۅjrooЂWہiuM|,lly|԰x1(3xtajxRr'ԍ>r:)i'ڐpeij{oyɄxĬ-&~nUhnnn0HWZ|k娿tByr焬o_~ǨԅV~rdvnnԒpCz.8'6ejwtsdž4o;sۂBSwY~v{6 5/|Ju*K Cwm1ԉ)o-闾Mu5>ɅSxj螮oj 5Alؚ@Bim${ajj sR<hv“N=tv𖑨k'i|RۡZ;+y4h>Jv3r>}j=x¬}zO[k|멐ե&ycܭw2")78n']klnBҧ笠rnho Y|^y}=qh |M& i'0pi?qv}BjkEh_ r-gw4s}Ȫ"/nos}monpgs kʬq|rc^Ũ'it70ݨU{:4otwyc~yy{҈sQ- xpiOg}~uv#Űi珪i tg İ}{>lvО[m⃍8B{ϴ+GuwhG{rlr{~oNŏX}~\{ tʚ_yk>o vaiu>첏oр9h Wum#Dgo~y쐍Úy8iLpfux-~gy֫,#ʅF2uf[T,w p)[&ri}T,HqƧ}Fuyg}{ qnj {q`{rp rxAӚʲ'snnsA}qp) ˥nHqSwz:|1~7i{2 $鞌ǧٝx js RQGyhQ}5}5M j6s$3Yr0 zFyӄ*y\Guy%"푏yv 5g-xgs؜_1oi|ґ{dzrhۓ:|{=&RrwњVg7wn{U Swk s7w2}"soHm᠓PWnWAF}p :yozzXt4{}jtiwsq\o iTNqkgٞurn.䒫uűX so zȚ9Vӎ:ӥuxqlĝrɲ,{]yEypyl:ՈͲ!bwM|`Y8{smYrC1x],H}Ԅe}{jd,yĄ35ަәz|q"rB{]qXrk|.~m}k̊G{Zqڅ;'D ٌ-'-:n?y0-wDzXrm^~bwzo3pۆ|xߜ2bwg,u*ogu|4R{:q tvXq߫nYDwhltuhq xטۅ`tgsq]ܞtt䥍⅄uoX5$vy-~WiyvV|LZkԙuwr{ti"g[Wr\6vד{Aڛlq$؜WDܴMtӷkSqydfo*w~ϪmSv/|wnpsvܤiCuh}n[=֓֕jL_uv3xǏslݙ8r/x}.xVLBw=]{(̑;8@gR{񐱖D!t֊jx]C{n֦Lkih;cȫ$|dk\ygsvYѮ|hgdsաH!)Quj@\_wP3$KepхCywդP-/wjtV|<[)nӤ>twGUyݲƸhqY`[r~iqwƃާhǗ=rh#~Y]{ɗo7hljIw reݳ7toho1]׷qŗcɨmW;n|MxuzZ{wOqlԌțS?UY~XvŪ~Ҹ||_jnesmCoLlު$s_$@k뱯kwmx߯HzL:|tvϬQ|_t~qzavŴϦ/𘢑&uOzƈJyX7w`Qu{qy[Sd&pwtި;|pIه'pr)xmsV|=ȴuכӑ~qګr$ߟtdآTMU{[lz}Dޅ ΋x×ocŵPzrNp冀yܸyxgЗuyNPڐ㴳7,wѯْܮ2jVÃߔ {?tSppnm_gϮϡ 2XմzCsem,{B*rzml@姜T`6Ëq~q9rMhUq3Hi|o|tz-yInOJUFwh}RrZoOpRz_U{ʢߏkߠ~v7hBMj*w{hF%:i ,iXtۏT{w;CefɮVojkXtpUn~Shp4s XSmBԯ t+3PO{KwynlC磢\uvɍ{jNvڊm.n_knѴ{#u)DJk3y[SFrօJmpkx,cAyדtK=發q+Cz[yzԐ7vaI3pgszUgh:2 x yЩ intocGa55zrXk2mRYζ{gѦ=Jΐks*ȫ.pzj>uFuΘRwE|JNZ썢(qơ~~#si@"n7hDmMiK{P؝%jv ~o4(~ lǙzd:|e@bpeۧvņbpƅ9vۯ{8Kxͥ{m\Ͱ׭IJͯ=Ĥ*Mi kie|j|!w>ڱ̪556q~lNy|wOizul{ Jirx(oܸvn/{{pqmf}1q k\yɻbCJ=``ƨY=s7w"zDmQv频2Xn0GrϒyiN[Mɠn)pj>~ގJ~=+=:wT,Ƥ}  kv^*|rM3~nvuzm1Ijs}p`wSVgBlzX*񄻱"M͠#+A.~⪺ ޛEȫm񦵜oHu:qڈxݦqݮl:ΙبըjyRJzyz+y9Ov䕰OK>Ej~*t]dp tnmEzmzxҫu3)T|nMwv|ՔxNyfҝy9hÜs+6gWXbwshJ|{뽜utkǗj1[s׉ɁzidMlbp kCxu˅=1zrSukxԖ'גg{T˷7op쀋4Uuzǐfy8kt^lkwe|vިG ĉ)yZ{8k}&mXW;]okہ~|Rqxʰ|񝣝6=ywԗ=z亩{pOvn:p{t[ t}vT24Xj*Xў뀲ط }~pܦ*|cҺЛrnmnw~^}qغȌǸk}CLμxjx t}˽pnB~t.ޛ'ŋRqspJ\Rz6v=yV5ٞ8j3K!Rz۾ileփ}*oin{k쏥~$$mxs։*ݯk}{41;uԛ~yEt~zىm}g| ypq@o˙:2oڒ΀(~ެFwᒰѕ0r|0q󐄷{ݲs?Wn l~qlvgwgnsE:VҏA7 pCv ~ { ukԌDwٟƍحli-oui3~MnkIў rӤ lU{g?uOOڂqؗx%aEyiy8Cݟ֏,rw&ͮNЎK|LtԺn[kloGy.p'pxh͓i]T2rͣyzSukufnqctZq ѠJ=njp{ht񦦈ODph˼[kIۍmFGm{lkEtҡbxy.X~Pu^청|bxB5zaF} ,_/P֭ k҂o̊UȔŃ"rcomrl8`pw{Po+fŎy|\{yyrۦ1noq~氻No.NQ+ErylislF1du,pƙOn_Jvu4|wO}fޫxEhI|6z{]qԄ jЪt]lyskUUFDǣC[tI¶ι65lё}:op}qu؏w[kC&ZmɃq2{^r⹃3oXnvl߶MXx{}Xr톎mn}  y2kgHNÚߖUOe`[ltwٰٗgoe8iR}{wРͅh4żtkYcqoyȗh]֘XoT|rxleq6#lyÌrI<,}pz!8rw]׎NtBz۽uJy s8 ~ҝҳvw kfh+Q}Xr-}q~igw2=tǼ9l;pQ:|[time,1Lm7sNpCƙ}ydM(W pcd^nhDo mlحB {̼ɧ&lڛ}zlV͍rCx}e|CoZk"J|ӄ ڋyشEnE hMki}E \)mdYYɴkp~j}]r؅9ۼ}3w n{"nsajryK}zD|󎖶0rKZrHkrL~~L:~"dmwo{oȯ, *_㤭òZv׵mxRi_kpЕ&yFRpɣPzBuph"ƍsEogg >ua4o%\Xq|WmғhK~f"j̜n2t)h}WЗܸ3krŏt9fAg 01zc~|jgBҔ۰?uw$j~|:5vhr{Ӣ0n&yoCq(c*?|Nl&8lohotےo@[mkg~ڽV瀔{`/1Xq7ұ|1atE0nˈ.qxF}k| o]jܠjU™˩g3ΠuJv;vÝ7k}1u\{gu#zrYwk*v@եNh Aޓ]{\y:3uə>|g,iyog{ےBϺT%aญn{=4o?slԫGvٸuCxFu)coV3puk$ Ǘ j߳x:xÒ+w.Lt_~􆜽?d˚Nؒ9Jz|{(˷4sśayׯ/@yi8hyHBy}eՈxVi?m.Ö+h7w?kǁ1v>y ċn Ҋ-k`惏*mkY+{ĽBz]Gy2ZwjnƔ*IPw-?ЩprXI?N%tý сnH֊{vJgzw7g0pмrDpMhԍssCoܣ@nx>ɭtr֩@{yih=z >VƵ\Q JPv&t~wШ3ᎉme̒nJ[β!X#rԺUutRBϞys<„ߥ|/|mxM>tF&2رǥ0nsEtʗCYZ# Uluj jz8}s_r-|:i{%>ђgMxyi媸̦7$:>v/}qtq§il3hw[ariђfW ntiR/pm񢄿٘4rړmk긡ܟezjqySu,||Hvl"ݏal'˞H>m*|OĮKwUmz 9lK y_Iafk+(q~Wȷ?z)ǁR{W֭;:j(*nxmp,C߾"vӰ'Qǰvv=zt>d` ulR~`6kqrv~ ~%4#gg8pQ&$21SalqFds2_w17Ɛy`ytOvòèϰl ~eMPXfԌÎ}lAZ%Ӡ ۅoTٺ˺M¿ms}|}o~£v VmQw-[]bpȲ1~׫tap۶‡|?ő֧`S{jisJMԝmq{Rcl4?$ն&~z2=s 4mlƺ3vjvpr/?fU:ғ Jxy6s?qL?qcMRAeBsj삯q zwKNùv;qz@ ~ārr88˳3Ϩ7C1)No'В~9$ڰm J|qDv ݃W_ߔ|n[}FΎsUqۚ/ϵl茮~p񃦈NoDtgՐRrg}㫵1ulrV0U$zu}uekyiKђ=AvlԧGGqrJ͖s$xAjw DzCEÆ!mo}1jůmtAϠt~aŶu k}K|溪Ĺ  Blʑ&ZꣂXnɴϻ,X}c{֧I">?g:%ŷhӴ3yjv!2Uęm,hvvUϒw|}|x^U!1mӪ~̥񈎗cthOqƻu%С|Ց_ѴW{YzpÈ&lj 0л:sÿsr:Cv(#~BUqht$þjw|g’r|f {׉1ǀsήpy|h;d*ۄu}[}޻:Nni.L4sw@М(jbƐZti6jrWȵiHqyArCFm5*r@+8t\{zBB߈HuVo(mz0׈iݿDsPDw/Gő`W pTrIwClדL{n{h5~E^hȈWwҽ$cls}roʬÌSuȳćYn\v[}BqeenR~pł|Xuý:o󩴒zڐj"m^Cߕ4msGtjesPzRiĸQuci$t3@r>p:Rm|g6qفCh׷pzzpڞV|[tƋ~_l0yjVg]{rQnt}<[Ɏ0iN,ntDyr\vۧsvTYrh&Q(1xօr^1m񙜂tw=Gݤ;O@]^Jz }󺪓Fڅ֫io:rHwٟq\v ӍQ$~Ѵrzrn$~}(~k^ttm}Mлmt dMAw,FGi~:xgoK|ݗs{t}b8oht~٠e}:Ls ||Ys(JlٟÐq;&u#ҳrxm.Koҧہ *Æ{mSu*Dh~N/ocwXʧi_xun+ťbBފ|~mا+dv8ŭezۧrSpa~xth< =v"듨=rCʽPD?qѺ2eq(ъ* p ޲,Xw鍊z׋'˷^ϕ9mCc_xTr2ť=|1ü՘%mޢiy6qnkfxOՈ#Fu}{s럏gwRXkȡy˿mױP⒘xvx֞xzOi܈{<{p;_sѴtw zM_+ig 68;!oVgt,}aDMszVg}e7}㵄f]o1o2}Ҽǜl\ӓǻk0;oIꕌ}p"YJz_A5ݛcxgms쭏 p6svWmdk-r«v}8K@ju-wpd7Ӵpu3Ƚ°lky9~[ =wmG-{}p\{6ѠԌ\eqҔie28| sQ/ixm[}8lxIi0h&yjˊwm["=mʵyithtY$ƕ{WUz?sf~|Շ?ÀD~tzPʀw?6\)ʂ#ozѡh/}B:&s֍)--vA:]kvrinċ3s̾jqFu ^fp ƗN8p G sħ@zwѢpuRŽyǜ}ö9h38/ڿn˸42ɾfѫ:|ݦ̙*yR#2ASuoUcq%;#~rq@"oqa,@͜nˎA50[uM~߸}%g ߣ`&.^͢<ʜgog1C爭gVn ʖZIGkHNvդMMaCLr<^rnwj{IѨoև1:s)ߖs mRpʜ꒼rŠj& #kr[|%sjInm4w 3hroE&jwd\|[̊}wס>xה?Cnu+LzҳXAŮLlk쑌nw6stMYs$ƯyItʕ}[o}{Қ…^b@W{xw{zSΑprp{0rh>M}v]xqzߤݏCXR:x'}}o^8p yad֭7hܜyΠ l8􇅭rVz`J™v@6Ju{rK͏"sipoȈ Σ 2ćLah9ϜÎϵ{hڡ`ңwf1ȄrQ xL!ÝyrtV8uΙDxvM5Qhy[kr$Dh+Pk&͘˓ p4m&}Au/DώiDC "Х mtח!<{ѢoZ-djcñ|ڳ μ"p_~?Řx?%b?hn*Â}ѹBN8uHPʱ뙇q}ph'}gո=twS j|Ѡ6ŕnġkߛk‡Xyw䛁'6 ɴHҷԗt5O~|}8|Awߞ򐺄 tlj ݹ.pwdnxqm,>XnX}ŏڛli{7prh~Ծڐp.hv?{_qЇi5k˷>9p nyhSyi1@npo% јbzКZqyLimӸn;g=gffsp-gific-rgg%f g8ffgf4ffff@f*Bffff* Df9PQfftff3gfgf9gf]gRabcR\8y-Adobe-C+/4 ++$gtor: TBHM.MghwvfHMIg.qCWitHxz| gc&phsgioQgex1J/) h"N]2DoEmenbHdgFtsxlv%1]++ѯѱtP_cfsColvѺGya!?gB1Y:G[BlIk:?g(n_Bou0gxxgѯ4++Esg+++5_њ!qyтWs d1tXry4th rfh"5/4 ҕJ2e e0n o-c&uC 4;% O0|Zf}25$f4l73a6%9b;74x@{(ch3ҤM7/ѯ9pY.ty-s_HMjtg. frԔ]f4SO3 ?ҝPD[=)`jcmmuP"JiblԳl]%aN4 [kdԺԼ/4ԙZ/ԮԱ jԹԴԯԸԴ[ҾYA1go s |Zk,g.g43 uѬӭ4g\ MK?ooc/subo9g-gActSd^Ԁӄ )Ղ҄1%uM=ԼJn cӟUrcU/4H rFչ10I3Ձ+9ՎE^;2Pga4HӶүԄհSҁ3UICg^ңҗ zհnի҇|cFuwԍoե/43ffcҷԵҔhՃӫeavCg`ծPճRS%.g/Z4PPh%B_89  <ҋd!0tB  "MԎ0gdѯfh"fd5++.8gxѦ f փA7 B^?g%Obtx0Ԗр/1 'K[lԡkrFӍIK* 7 Jgmg4aL 9/ JּJ8Jy=nһP 7!%UbHeԕJfm/4ӡrc/,mPp֟km)i֢[l0cJ{/4~c&vր/xvփ}m{qs++р\ eRfѻҟ Լњ4ֿzo=IFҰJ{9JW<ԋgnԟ /46M PJc w N0-8(fPҦ83Ps *6)4) m29mּaL9Jm N)/4 fN7/(ר&&B)#m0.׻24J*B9&8JWM0d[ce]gm`ֶgftZFx[|aL>{׃k׆״}׉ֶ/gvIM/4zgא/4טr+[מ׈gסגס׀ֳnׅף J׋׬ I=֒׷yEg׺ײJֻׁ2׫R׍[6ׁVmJU_׶ODSׄ֠Y׎oע&+l_ק׵\4b׍Pׂ  -? 78/֛!h[64,fB!9Z;+IM@Լ&4m!\^$O> 007J !NPbR3%U%WS8,5 (-`$4u*Iu{jfn]!5979Cx؍C׌jf6I6q4lRJjfUؔ-3 -Pט؟ן*-f3&ب&p"ئq֩hjׯ׽تI`׽31H8$؁|׻5P׼wׂWL>9֤0ֶM؇؇׿؊׀؂oKq`֛ؓg]؛ؓ ֶs؝9(ؼئh"٭ ֮ص-ب׭ h"ٿرٴ9٣ؖP׿ؾ#1ٱIֽ֣إ,K>0D؂q2ל׬O ؿPALBYWٿDf532)^Td5r'2?g10UP0U>7 "؂Iwr4x&'JJ3Ӌg}քkfזfZ׍٦јّ78ٌ7٠Hמ֤Bqf;%qٯB0U0)B*,57&4qٹٰn6ҿBٺm٨&qFf/5 )fJg8F֥IgFPzB)ؓ9Mw׹+פւסڂ6׶&IM ֏ ڍן*B2أ0U%Q0ڶB!+ O1ڼJ,f؀/փA9'BּHlDJ{@F8QIFUDSZascٶfhSd5=f/h5r hPZPry4ֶgg&wPنK7Չh5һ2+؃+Mh"Y؁ڼJPeٕP֋fiP*Y׾]#EN5)E>Ѩ&>Ԥպ EԳ bPBaLQi,i8]P5 9dר& {n))Pfh bdfڨ&iiڊيְ٣ւdh5 cghU։^؃A :o(fLg9aLZde g V|ڊW31642:8=5?>>ۊ׹_ևه\U exٔrZE#vaM׶]gԁԧ_ԛ!|Cv,v0|`KiNnVڛ!S-c/1 4(] :LZHM*CGHM l+s Moۅۅ 0%'֓ѕP-֚ۯfۋgCWc&iHr H ֦#xц-O&^ m' ۼ,j"<؄ן*f%-ۄ<& )R-U/W֨&9CA7B;<<(ѮfѲfum&gp7dܿf;^f2fBffFfIѼff*xfgTVц4gg[8_<*+,feDBZ/$FsbmIպo=rҬҪN.h3%0yFHuh֎bfgkָ4}of܃}:uC%Gݎz  gbDсݥ҈!f*%4ҍ**$/'ђ47&l{F=)f.0xlE#Qݽ8K:l1P JTAX=)ڎbfJX QM"h@9BdZD%6j1܁G]+rVt݈Go݉i}XݍGSݒ݌LfQ݁eݟ*U|MP݉Gq{ݍݡOݎbݥ݃ݧݖ .Qݦݟݨ ڣnI݄ݠݹmݬR݁ԕW ܙݴ\ݝBݐPݔ݃ApݮݷݰkD%d.ׂ^s`7Pݿ"݅p < B79pپޛvoILnxm՟ .%[ҟ YӛҨrgu[a(Cg.fӏB# XMnk_{>fg2SҍXG[a-A~1rz8g_RdҢ=ӕScOf10C8gYL[! ճ ԽIPec&Jr0+rjޚ!ӦYӎQcvg10c'Թ*L{.v޽I܊.wbӅ܇'ԜfYsTp@P"`ނcޝޚiޅ(vޯ4HfCgf0ъaރޘޮhވޟHpr Ydc&HYIӓ҃ ޹ޑr޲'Ԑ 0GJފށީomt A@ei޾dޛޅްH֏Ղъu޽ެ޿fޯް>7(PgakBS/ސxzJ} ӵѰԝޫޭފEӼJChHkӎӒeAߴ ފ+Sqުޗ9ߦvCgӦLMD`-Yզ*YԠYcPӟ ҼZ֊/@ъ[ gnފIlJscmP"mѳ q҂oopitԼvpdދ7dҐ߈cӘՁߘՑg#6Ԟ f< o-gmqӮcmAP/޳ 7^ORaG[`*gզь ԹӠRTECgG[nPph%ۀ/@-gn WߗHY-Rߦg6[ߍYߺߦ,Ԅ%PfRQT-բYSAR܃ j߲T0ޓ%c!eH֭Ӹ. [r]Ӟ[aeқӃѠ7gG,~ Y'їg|Zgzu7mT.P(^O]d-UԅߙVdъ)(}_.ngZҲJ3ԩػMr3mo_[Ҟ6`ދ'cfPшcjӰҜ߈ߊT|֣ *ߋYnԃ ;a֦~HMM*gHGeշӶZ[n-`A|޿_,1{|޺kՆPkUumGcmo*Ҿnlxo ӡuլn=c[L STTg!C|Z p1ӆt,Ҋߢ"իӦѡ#YfA5ԽӍѿ|zL Dk'H8gP`tbѹ.߉M+1prdi%SՀ/'YXޝvދZh%0 ߠ/ުdNE^' ֡ޣ޼ӥߩޛahrO/rަѶӹސռޜf'ԡoCU?yqߵ|vh<|Zޱӡ?+Ex-g|Fc(3g|Z 4ޅԹދA1@cB-Hw(`f55.Hրg7oW5z"E ,I|nmԹuդԽ տ!(VwKN+0Rm!-z7g >y.Yng;tzPԚu6TZyP'W.A՘zհfө Ҁ/ya7G[d"Յ՛0fAվӱm{s7H<P-Uf29;]Pߦn:ԛMA.CrӡdҺԄ} bh:ӶoC0w/ 35!4mlW2-߄ܬS70Mބ.)ާecSLԱW޾ѕJvf߰ Ffc&)MgH֦{Uv! ѱܟߚ߃Ӹu&}pB"g?fӼLޞUܳR/:m]B1U-}O.L[m]U]F IMuyX*-%?CCgIzOgh1n{vmߨRdnP-igan^Opc`gߝҩZԔPU.YH2&nҭuR޸=ҔPߋc25-F>1<ѕީo=r' a [өqҕJԠҪӬҮӢlT#6oEիߑ{/rIhYx. KYYT+HWCH*ӾB\0.0'v۽Ie՘Bj6c,ܯc@ҀO|sx`=W܂Ӭ߲{!X-ccҸlSҰҩߦ5H J. 5wHMZFxҫ'F\P';gfѮѼZs\ q ֕ڧ[]7t=xm8gޓSq$NҒG[l|fvޥ ߎPPҷfԳ)ߦԨlpG[sk}1k\d& ҍ-ѢS.?9P3L/YP=hYff7Q.ޕ3gޖLxHMh%JP eaSP1բS1Դ߮ҍէ_ԍ{{w Jާҝ = SGeI/OKGJ=JsUM?YLuG!w=e[]7T'_:gma\c?p5g^bGN=Ni0Ѹ7g~Oiސ;m}f>тg Ҝ';+|;5c4 G RP*tҩP"XW3Ԡ_^ާed^ާyޤ?E߬]݀d`ydYHo 0SO`ҢZӡ޴p^ނӴP"5UuxohAwק}=)P"Y ]޻|!hvG[p߀Rf ޥ-oA< ^C:ҍ7A2gIhGo M')dWf߀D ],ߓ=]UђI!&ҍ%GRKeҴծ\dpԴv8'҃҉ޓՔe)HsB/4Md/#7cf]߁Ca?|Z߀//.!Ӏ/T)TҖӫՂRs_߼hl'MJվ ߫Ն߄ߘHѓԞ1nҸB9g/ uҡ!?Vo=,YIҍ'!FCG޽2ICOQS p߶  pCY[ Dh|ZZ 17g S֎Ҕ+;TJCc"q!&JA+-|Z(*\C 77gxTP>u'nH hSZ 1HcHV[^KբԤ7\ߎb& ZcӝӦjXRޖҰьY/=^+PP)f.?eEg U ӈ܍+ޝ:O҂7ftfd,ѽIhHP\m8?ӓ!Xm*dB?m!m$AӯDռӼJ[,Ө&2Ӽc!c7Gղ 8c ee>UR r*+J;B1bc/4$\tsB D|ZFH`9K\2 y.sa!VxS7mZ>qn g)f]-Zd_$TfjYD .>4*W"5qXr8g=ԡ,֙ߎR4|'&kP\dsءߡءդfPm {4Bڮ>iifBc۝8 _c  _*i#% >HsBգռUT-gH9IҖ^O&?R1Nh"MOQa%6[~n&WՐէ2MҮ{]>3B1{ӧC Җ7]gANg{*oz> է"߰0PmLް-gMJm%ߍ70ӧbGo{sҟհ}f3$ԸѰ$ѰcժӰdgudէtd{ӕJ> 'U)H~S|Z%ݮh} պ?P"-E ;R8gaKYU7g SI=yc&i_=* /4f+ךޞߔՍ# I|Z]ӕ 7޻\ '/9&3ܯzJѴg1OsNKU WVնҋg]19MՆ !֝P"v{9P_׀!-fp݇(V=)@s!FMڴYh"%g֣fD4P ҇aҼJ,԰ۏ ٖ֚ٙڜ/4ߐZlڌiҫ#ҽv ePֶ/4ٻwԧ2Ҫ\!6 ۓ>B\ۺy4 [d !#f (*!MJgIM13'75)Y)HDN 9&;Q\W02\8:cKe!ٴVGm oK`]|XF L'ww׮j~;#{oTٿH6gZ=+x'َ4l_Ib H -M ?*,$2 4ִd-<XԐPwg@q[nH==C+d%3Ԅ\!YޚN6FIMjN)K"[USQ\YI]5_&[bhwJKPikm!p,rs GzJ;~o=݄RX9Ҏސ/4OC%h"ۛT{oRqs'P'xH|2RVgݞ]WԏaGѓ=֩i֚UnM!4AղѻX*m=WߡҴ(ޓ= O)ׂٙ]( mZԎy-9sՓfBehٶ/>8>֨&՛ҁQԫٳ ү4'6+9$զfB;IG2eһ537#ե G(P,JARCTE#:-~Ѥ\a ]$ dٓ״ק[|x1`beG KL>)?ւS8Z ۹֑iIMObV}~x^PBUfң"nqܲ[ںݦ/0_3adL>J/>ؼJpFWi9ٜDf[Jg[;hko!u,/ZzyJ)QcsٗIt׊ אپ a ;N8/40U1֍*&ԫ gPvڿٵ NP"/d5!Hf7&Es N#T[]\]`dݣFc~N454v 5)81<>gW~wۉ3JJ'(ptѴN/kխLg&ر !(|)g1Pyd[כCa٫3IM۶ћӹYڣ'%dүBe)o٪n7!=RҤ eeeӧ_xfg4ҍշ!rZ&rx1ӯsa rZ`֮Bގ{YfIM^ڼ- "|>"Ҫ.3:փ(/vѧҴծҪ1] /JbK4N6PR Oغ@;to59L ֟|Gӏ.mfpMswR A[>:SA1P"( 5!%&)-[Ҕ/r=n;*r,Q@vCmCv{MӅc/4)mؒ`R wf7}A&wׂr׼g[=>уA>uC63h׸PDUGKf9sIMxy<\ xl}wٷb0}(B}-Ht Oxj!d %8 O59x/dWCH6B;60?CY-F.I=3flP[ VK\"hHbJ>ffi|6n֝6FܟӝM.-:LgiL>#N=  // " 4 42rs ֝F|֫_\*OsݥUf֥ ޡѭx-ֆ ڶf؛_IMaSeWh"iydn%q]t ڃּj%o}L>f1ڽ[ ҫүzr! E܄%ZX-!pܰQx1Jրf%UCڂ 1x] afpJLBQTRcVuZjm٨Ӻh"d4w\&n2Tsgvy){>) ډ= *g_|'"w/'+{)׻ڽg׿FFfJ*B.b &>ff]1H܊qn٘-LWffgg``lmfw\Q-QTf ׼^)#y%|eWX7C:H"[ :_Zھ֕2Zl`p@mWMx "C#I1-12M!:WGf&]e| s y"gLT >W0׵o#/M6K.;QEV}R96 U$+"^`9ckfl!kLXwqvxWr1Q7v@2P(NYvٸq 7ھُfps/j= [ YKc,. ~fB/=!%: *I38}55& C><GPOq7H^t:BfEUMJrAEO|@ڠ.Vce BRԝ "%($|*1W3Mw9 DG>A1Ty_ߪ8K=MX=M]GW@ug\QpbZ_brtZhOmo2&/|_Ո,,qfG *bR6 K@:ic,\ 2O=+[#-fUkR&Q%YtuAz]%J]NKCDe8tdD&n;s0 >vHf,YJuVWq/<5.]( Jdk> LkX\ Oi=H [ 6Fe.-A'8f #[\~\[4,)e h%'X:ccC:db &$-N&&IQT/U6r Y$c aYiRm Of\g{jF_`:lRRSժgT!9i<(4)=vny/=`f:.*jqJo_~1 ;,2,C N_2j 0m zadw<2~AoB QJv"0"Z v< qGT+A&DH1Zl'7m=6HB4CbT47l &R7C6iD- SOwV(SErb+If}p{"tAB D=wD#~ `d;Vy+N9wX+b0( ky9CN!]53+bo~;P4a8; (+`yJ/M]~}{<D-L5|wR )5Y gMOIspR<vQdw>D xPx~7 NE1E.N> eP F<DNG4$)Pt{(gwn%4Ka!WV! 0G DgUT9mc0JEM16ycUR:<)mBwM)L#fUKNV_Z2\&M@g#' U.%5 #R V8 PDE5(guaNd0+IL.$:+(Us_TI4c GgHPN?FfQ>}h#NT>4,E$,GluwQ`3ID~B ?O8oKS:;vSu *UeR?|UJlT<}\j@?  Q]*V//co(0<Wu] 14:~^W.U#6|1SfF9EH>q3a 5e? 0\Nmg4=Og+BS$K )sXYa >vKLO'x"^Ozw^7~S|oL+g ;y7z^=>( 8FKZC #!%?V]jm0;^*cE-!Twju/]e[kt,bukcFf+>-/|z2 lzi};C , mz&+5]WG;w `k[&j txP1w5ZV^b i;B\P8Yf_Lm!Q!SmE#q)W| XH@.Z4:uC''5%]^/{N5*q3&>Mf nbe+Nr 5}wC2^ z[`h!' !T?_9~0G;1Q/HA'+DW;_;jqH+7NlbH2bv)S{&_gtU8$n7o/9` wG^Kw}Px^74>W'> omD73s8Z#dM?.Jz06ai E/_(;e:+VK@(?6~>Vt/~ N>S%@%Z5ww2/8rG~3u=XyQ~Qo<p,SkX /sAyX5.W+>)CYT~43SZLxx L8K Va.6 [^RIHD$xz08= LZNTf;Bl\6k;jiC'qHl k,1[8j(*Uk'WivNf1E ;v;W.!)(zh#Ih_#` FIg^` 4L)!)),-2Lyb &8CynHM6]*EH`_r( =I{ (Y)A++y J ^V2,TF4#:{.ZKZ3(<22<] < *o$.!\S&K,BLaZ8a3%/,CF<9_Su#L|eVd:\D\"X'Zb^!]D\ d|WLIlBSf\I(m|`YkYu<[ =?7fN}\8J-`w,lA#'>8, [GG2LAP[t!< ^L,L.\l+^=,[lY9X:`Y"o<<PX0K|X?5: RC^q'?j{#SnW QL8'kJc @PCFL+%kDP%g* 1] *33)|eN^g9? V6@ \I;D'Z-g,Jv]_j(_\W=vx 2^||:\},~Mo]m_),U]%)$ge S= <W43pa*o)Fm`-{)[L,6()D]M[Ud-qb:d]NkrY_LC ]#(5-:_XWh) J^I~l> dH1>j^~Ew&AQ3$$^&~( E> d'M,O!/x>AX.cB; `H4l);4^h<OJN.2<[ r=]n;`'>feN>^NB^. =- 1\L\ }?]`~|>s]I ]& / 9Z.F|\j:} 2 #O p+3RwN~^ 0-. ,n" +Ez^4R3Z L> n" ^!(dg .,nN5_>L'?m9K8H:G@Q.0 )**,HdO5^B-6Lje+?&!>em*2 TZVB>^CO17__(O_D1?Q( Vdo!/}r?D=n#{OAV*sR_~ a7B.4/"?hz_`hId__Q3f];(+A sW5y=cPi` \"XmnBDJQ2yxzz IX5\l\xdWeEf3n;g 5i4.Z]vp+jzHSe.B-~r'>\D'k/C!# :RkU8I2Xa)ex[V/,#Ҹs)#`z4^%)<R")'[Ff, (cG8t;E<C/M*]ZMJJ~XjXPKFK GrOpK x1Oa,;_(O_D1?Q( Vdo!/}r?D=n#{OAV*sR_~۝p\;l1O?R U܆f1'**egi11 iGM+|<ҎeRh._ofIPf\ o-*5z".&OLiLeiG/Ҏe<gdgv[JSbgGD#ӒӒ"30kD; D:kD#TTFkDUXfT7D-iGi A;R=CEER\ Rh.ۑ)Ҧ</i\ iGOCKQ~Cc1\ iGP\ 5{jѾQ7}`dRh.HP"f\ H5%'b.LߢiGP\ iG\ iG%8M+H2M+A^%RHDv-tp\;l7Q"gt<M+/H2\ ^G\ iG>= ҫL<ӳ;ӍPܴUWf{Ր4ގӎ.Rh.^| gs,eҢۜ4ި(,<g.z޴UWސftdgN>=HM5^0A|ZzzҸhUѮۇ.gvH-iGP\ iG%8M+H2M+A^%RHDs-g"gp\;l7 &S"g<M+/H2\ -iGP\ iG> &S"gK UѴ$U|Z0>*!UWf{ qL߰f,3ߍ@Eޜg |b.dJi>CgsiGP\ iG%8M+H2M+A^%RHDg| op\;l7| o+Cg<M+/H2\ ^G\ iG>HFH6Eұ߳| Rh.F܇r|Z^0 jѲѿ-iGP\ iG%8M+H2M+A^%RHDv-g| op\;l7Q"g| o+<M+/H2\ ^G\ iG>Q"gg| o+f|Rh.Ӵܶ~-iGP\ iG%8M+H2M+A^%RHD.)gRrfp\;l7ջcP1fIRh.s<M+/H2\ iGP\ iG8efO!xtjѧ'rb.dF9ރHP">siGw*^</OCKQ~Cc1\ ------iGHR\ iGpiGXJl`<;lM+A^%RHDg| op\;l7| o+Cg<M+/H2\ ^G\ iG>HFH6Eұ߳| Rh.F܇r|Z^0 jѲѿ-iGP\ ۇIp\;l1g=?R Ux!F*$1'**egi11 iGM+|<ҎeRh._ofIPf\ o-*5z".&OLiLeiG/Ҏe<gdgv[JSbgGD#ӒӒ"30kD; D:kD#TTFkDUXfT7DiGi\ <A^%RHDs-g"gp\;l7 &S"g>ѵw</i\ N((<A^%RHwsp\;l7gs<\ шѺ<A^%RH"mӧ_c֜p\;l7ջc֜<\ iGP\ iGHR\ iGP\ iGOCKQ~Cc1\ iGi A;R=CEER\ Rh.>I> </i\ -iG\ -iG%8\ <ROh.8f}ZbUWRh.M/ROh.\ iGP\ iG;>I8g. vI.<SA>,7gg</SA\ vsVdҨ(3iG"\ iG"\ iGK/>\[қ8g</K/\ iGP\ -iG%8M+ROh.6ch.xgя></ROh.\ iGP\ iG>цzRh.evyHM<SA>,7gg</SAtUѴ5{} ;Ӣ<"M+"\ ^&\w*^<;\ <SA6R3/SA\ UѴZK Rh.L߰fZKutO zB15-. vsGӍhr'jb. >|<2iv ߹:O^<;\ <SAGXAL </SA\ UѴ3.2+|ZdRT"N0{ҵh-.F(Rh.L߰fiG;\ <SA></SA\ UѴch.ђZn߳fB."$jѾܿg)n'|ZCf%gq|(f {gp:a/;guga!g#g%g'geӱfRh.7Rh.{5\<g\ !X қBkGO!Q>jђ܊<;\ <SA>c1/SA\ UѴM7֜{g|>CgS105%'b.siG;\ <SA>qb</SA\ ch.105%'qLߜP"lѝ)տ.7a!yZn^<;\ <SA>0ֵ</SA\ ch.{gDҮў|ZeiG/X\ iGP\ -iG%8M+ROh.VG Rh.^qL߰f</ROh.\ iGP\ -iG\ x'|Rh.L߰fHMߨ(3rէ_0 ߺ{g|>CgS105%'b.s gq <K/>-.CHOu </K/M+"\ iGP> <SA>-.CHOu </SA\ q["ԵxiGP\ iGcՔ`^M'CON+- :RލS3^M'P g:RލT3)iG^OR`^G\ fp1ҡ|ZRh.*Ґ.k ѾѰ/fHMJސeSX ZdD,.ќ|S3+|Z)d ߊ[w/y|CON+-8r5iGP\ iGcՔ`^:RލCON+- g:RލS3^M'P g:RލT3)iG^OR`^G\ -^<SA>-</SA\ !|ZP"DiLߜf|^؍fӯ*Ҥ ҽ|q <SA6RCҼ.CON+X</SA> @rޕ"F1g>qyB1| Zn| ZnL1҇gfHM B1dRT"NZnDq>F`} g޽d"# +''-gX'#,ѶߩT--iGP>2kSRh.{8lѸg GP<A^HRHDgsp\;#t3>r1A T3, <A^%RHDgsp\;#&f7k ON+- /f< <A^%RHDgsp\;#,27 M O< <A^HRHDgsp\;#0ۨ:63," Iz0<\ <A^HRHDgsp\;#k=r-eӪ63=2!Xe<\ H5Nܿ,{8޷'lѸ6֖+'<A^HRHDgsp\;#hp7k<\ <A^HRHDgsp\;#n7SUs\ f'|ZIn'W<HRHDgsp\;#u>L0ux<>gE|P<A^HRHD-qp\;l7-q<\ 6mRh.+'KӆO0iGP\ -VߚWyHM ;Ӝz!lkAqHEiGK/>-</K/\ !|Z |޵юH vsiGP\ Zn~2әֵB>GiGSA>-.</SAM+$NR>g</$NR$-PPܼw߿{1Խz.fGPJiҖ*!- /s#/| E^y- / ޳f.>|<A^HRHD-qp\;l7-q<\ -?܍f-iGP\ -8^7aHMRh.Lߜ)|Z|<SA>qb</SA\ }- vs GPSqL߰fHMz޺ J|b.'|ZԆ{շJ|b. 6֖^ҪҕJ)|Z|A1z<SA>,7gg</SA\ vs^G\ -iG%8M+ROh.>-gk|5^iL߰f</ROh.\ iGP\ -iG\ <+Rh.Le{8lѸtHM? <A^%RHD,7gf7<\ { qLe{8C+ v\g޺r5{5!|Z| vS<SA>,7gg</SA>"\ iG"\ iGK/>.mf8g</K/M+"\ iG"\ *4P"5߃d| ch.Lߜ ")sGP" ? ]AM>_dE`/EM>#+S^g]AM> /EM!Rh.{86֖ZӪҕJ\giGA^%RHDA1u8(*Vga!g#g%g'g7a!g#go"tФ7bؔi :s\PAyr*R89J6iܜA 6i #'M9O\cQ"DRyqN9 Ƅq54m"FzC.iF9pʔ!C 7f ƌe1 v!󆢛:m{}O »iXˊ, -0p3[o`cvi+  yqԬ]|:r;ɾoz/DCd1YzHLM0@@I3bp` hP F2A ,`2@8̡a0 s@0"0 @4C8AJH*V#AM@Ñە s#m RiZDlxL"l(Sh1rrd7 `BNv}1~b b8lT#/bKa3je" VJ(Xi-$HAIFhtRE;v ^)F n H.?6!FA@ 0.5c7&h*SPȍk[C0UWLZ Bx a@t rN2oI%)QJd' `r^ F6BF,A p`2' OJӸO8h1  92@BG̔AB!)X= mS86T N)ܠ,7 C2Kiϋ7 ql@m2&/9$T]-F 9 c4MN q#`ӆ'*yDA4L㔍pֳFkm Pц3z&ڼPdBG4e.BlJ,VhLQ JoA|iinHm~V?Mqդ1>`Ξcm=o7}B>.]F|^O=TjɑGٌA!fMBiQOy6!Rf;Y8b)`yp tzR]zH>!U=?%C;w]ߐ ;F5U(Ԇ7Lsis 3SG`ܐ!*gvs\87!P6RFezOf]ue6ZbH@f}dgl?ƀt0fgqkbo1fU2 n\r!~'fZy-&z `u 5!ݗ S(ThRl1hTT1 6#ׄGWVRZ @Lmu_ S`>i )!ڨ.07yn wg`)v apnpoVB:qnwh/NzBzUbyqJ8]6Q5q #YBnxSťz 8y{hyzY`my^8֢Ҧ&U9e[A:eTab"}GS:8LnAѩMR?q Q5&59A]OpG9y~e`1eReeqts@i"%'nDKYъ{nsבy鈌IH&E)1 䚭qg`4ʮ!G9lPW6Ye>}A6hE Yz( 8;!˰ "$yoA',.Y 暓lד%?@Hw,˖ޚnyA Q"a421i7ҩߪLWzJf۶iKqC0ng\Shw3nRNv5x9x)f}طF)'٧e˶kC+0۔q+#vR=ש:M"Z6+vf%SP+SU}קF6f1G1+=7YiPKw{mUhAz!S {;ghvqgMvI}\d-AgP6q]` P@Fȼ5yc-z2[N׻#ezP"*PC?1_e+*m9=9$9s4úRVd-4M5.8]9.b; pO3r:;3@+C֟=MZm"p5Y0<_46˄X^?67fRuPb7}C48Q8@8#Ӧ׫3q +>:M1 9Rـ}DLF5=J_SO%պM?Wמڑ/s/n+@VUA'tABAD0PMC6B*B.D]C4] C+z?z%P.[^8Knr.T1h_}a^)wn:^JxnB2\7x?.*(_.`fq$H?bAN.!:CQzDߩL>>vw~yj|/A+_0h1Ih76aoNX:1X1 ~u4qR !7uyQf1&@蜯{"!KT0gRܙuUuŲd zOоT~ AUOܟJЉ&D9\LD.^4/q!?hnՂgPݺN-ex`Ay> mܼ=nX r م*U%r#>_V1 ^{zN9bUJm*auf:pU2N86u ĀyX7M݌) o**02<5P(G:tCx?Ajz.7JCs( I4FƙHkML3W'G1p#Y8B͖<[ m~cgGhc^H&J%h!MrB %+!82$r8CqnOjm!i "͎܈!F:7(!8)P֨!UƐeC1^y ݚ `!b QomMVH 3 ŭEoBT)e\1-ŵ8@[`pl`̄Ld5 'xs9N|I0$.X\$$0.8MF' %UFWK^ '$C9\䰉6)qq&';އˁ9{ {()͉k Xh-2gq:sk"5f (va Շ,G|>CP$ MF- ̚be-#$~Zʒ7%G7Ņ8(xE\E!}RIRO T a\FFT:'rJ Rt ن͗dX:*Z`\*}N `C ąKW+RӘ %"@HL C)̖JM"F ԿiRSZ]H 8 tyPa"-T2ؠ9Ÿ@/8.x> 42+}ʌ ?zAJV G P9^dHK\gV)PvI1&0&3=4r&k{TU9kO(@uQrJ?T"0<½t3v6{qLb<58BK0b>̫ Rz|Mb{/L|9CkQ`\E!;y/Z%/<%,!9jZO})d)Lu~|Q4Nz\B1pcD^CH$!G㍪2 OZ0ōD2DCnH a6GE$6) UcȠDV;J09thC]Bh+45TM̈Bm{T7ᰱýC0nh  CwxMMXQa@\^5Ђ( B nK̡0XX&BL6x;EXQoJ0E&AU 3 HţHCb YqR"I$E8J[+"n E."!4#±X&G_|4q2 FPya$qĥ]%q2U˘vgL%]SYA-(Lgk qt NX8ldwDW ˏSXF/!F?>ӑ'Rn(-*A7 l<0tRk&"\@h#yn m1Wɠl<, <,,+oKt&ROgqr"C@}SP.!P֧l>o"Ȕ6k-Х⟇Y\ aE/D"/=Sj2u^j PRCyfC TEezS@P%Q&ؔHcp­t)6$9+PF0uPX+HAPVzY dJbv8sAah*L!CdB12G i)*Q^0%(.*/ &>b(6J2LRJ}!>X_&Z9X-kbձ*Yk$iYg=~V߀ڛƆjUP\JwawSVU'UX (-Sv&kU}NDyF;-9"KR 6^  r8#y ˂\ BXPi}aY]NJ^wV ,4&RAȲݡv)PEK 7Ȥ(BT52:WuJ' 4@PM<6RQ`v NeFt>k .GKp%oo@](twkBd\N,2(+Wf]ƫ.)$I`O%3 a73ݙ]KOHy\rE\WTS&/&Sd3p+H;Y:@o!qHzJ0:) 2\ E6 DT:TDilDܲ3/nM- [NWdJ2>UC Z4duۋ vѸ "ITӿj*a txy8nBл i.mWLúxn: &o٭\0.8>&4o`WBl„{b{`%λ{Wrz];Hd 3j*ry M / 7Q 'PH-@'"|  |2./%y` LGʜ# 2cQ  `_h%3bKPH(<)fnx a)PzQ-ȋ1Єџ ε;r dJ8il31tal<.Ԋ6QVYas ֣TkbS2 ,bE Xè@Ebh%m@V $>ow'1F[T 3M( JTS¥.^W6I@.6,6ad2TBR q[[Np &!gg Bq`//3W,g# %e 7 0(rTu3Scz_1Ƨ0`o0 >:A#bLH{j6V+usNP~5y^ܐ # ԣMƂ(` eAZbi"m-4DzE?̐u΋SVMӭrP60 :C6]4') BwS ò:>=6UZBiKDvORo2ݩ*2Zy ss:0K݋&[bPU9,ZL!?꼣_:j:/0fP! i1ȸ?IBCf9M}*R-:)3@꣩l]zM xg1ק|Zu΀U4s&d  9eԐt N<ħy 3Oa%L6!ʢMOMt j@Z(+b(DZMLw˰1qS BO^*y~M(L" N\9uY}P:Cmyq> <3Jn-xk !8l2b#F8 >뵔q SpZzkf:B,جt  0Ӏe֙4&Ͻ|37)425ۭ;1hzj:urc(cq驈Mz1#Bn6 Vd Q(-ɚ`BD PlGKp%x4+y$_15KlHFRbE FeN)ɵչZufl 2'ٜ߶ε'cN"؟/Յ>%˱zV臮/xHN2 1È0@AaxJ4^3'fj(xu[K6n>4n xu7U(7$I`8v\OqCi;X(v" 3Цp +l&4* g+/7, -?nƥ%E@̍j];9MG9a OfftB ʪ;.@EߥJoy!K5Ը x\3s{s4ܾTHxTcq2"ЏC82n cB5PS/?k#G<~QF@ Mn4 ?!J[l+-!BHbP /Ept@ waR}C[͉epHpR2p=;qѺeÉ^6u٤?o`yK (* 1NѤfrlnYbbx tr. ɤm*vOzf@(뭴 !&;gO t.P-w]87Y/#Ce+2e8XI$c4۔fRMgqBoz(jsZ4 VuE6"Ü+͝l*mT;W%l3L L'|tMDhPS?aw.;ZMbFLЗl^%w ˺#fjgBH̀]KU]3wEh_ySmls%$BǮͺ!T=䭊H#x|TR*@oـLAO[ɮUFƐ;8CvJ@e2`k3/ߔ IGdD2U HQ+[Mk/+q4 5Ot$-X": ,+lα9:mVa +lGG. e<<s@*P坧mu)0?{O"m4TR;ɋ[ټ0'ޝ ns7UWtrwRxIO&1%g,>[/8yH h5l]4_+))QY!3з炱2gl5Y=Iyذ1d˭5CtQ M(љ{ێ/wͺOcg)DNs3_6.0Cp֙JJB~5'ד9o!F@kNnmm{<ߙ?_ls[zb ׏yM]_}+":DX D`Y3ỦUdl\ϓ|֋}}=$m_lz9k'e9{4*\zm S:#c@&lomR 7Y#yڛ!ܕ'^~!+ZlwWA4LydtV`vAfuYc~^X&E#K0@'z_- K_S9b\=ҦM PUcHBV`E'UcK @[0 #d1*,lb4!'[to)ɢnCtp2]NY7s 2UډԟI&XWcW8)E'CMa~# tD懑y@`(<$N:) v) QF ]E37CT?uz(PtEwu*tAt5ԽBKCqtJKwBQ8 C6I7BP+N:DHT+@u RuvIQ!OA5TSQ y׎كV t4waL6U =CWR]j*D"8|#ERY&5yIiR,Ud+KIv0ewJ7LHRBaSׅvZcD%SuKE/w0$aT!-vы]]Kw:fT8rMD=NPoMwONu>/y`띔}wԄ ޑ5h:!= 6/Ўkxxd5FEi xAk@^3BT>9:<pE>c)csw0څP!g(ϩRZaT1%ӇTcT]a^>NVlqY;RC l8VVeX(n(wm7`BU8JAn"ghl9W'|ǝGv" $xO,*BQJmFbqBz`p,"kR 䒜Qq[v /OpmՁhxY @nu/MCG>02^5#2 _01⁂AI}Q֢@H(\/"X nf|.bȉ3s)ɂx츉ȥx\ 78H\y5•?!xJm,$ Eo0"z҂a)K(A'Esdg HYdAhǦچl)Y̬O+GH]-APh%|ac+&"Y(2:Ss,`꽈hb =NWqNTGz9OMUiq+~Oc%]B.W4K!q{"EtI_A .'&>l*a0I b)?U'pbű&xI!fOtf_3 Hu_if+ů0TۘrBpMH-Ǹ\AN 3E%cRȕJq>;A{,=1DB} ,Lb 9-K\drf"Oޏs c:e#B#.8$% Pg=d aKN'njX"G#"rRophtI,\4F~R`1+ ԎZh$eY0ٵ#9}cit5-AAjfΙD}2!,9Gt$YqpsD%QmY썳u!#h:W¡Y,ʗF7R_TC񢲡l4Dy"2{9~U: B^VFjN0*P\-nIM1!x xa PbQ\ZM`8+#4bX-JIA?zCtU\}fFr"`cB&2e|r$d>dG kKs!!07pQAqlh)]hhd^˻8l8A}&iScBP}da,sV])@/naY3/eGED ˄\m(TI_֨0PLERiqTGm`ED ?n@Y7/ O:(^_@&~!^oDt}3bk 8Rt؋htmM \RU-$F E G: ?lILjKIQSՓ ,)Oc?`)AufFPSz2eF 1Q6XH'@ )qT@ "")Nq0U+OSZ%FG)]6H5%WCO @QOB(He"TVx;3@m* P7 _f嫤Xŝ*R, 9 lo GV5CnfGi:ƌet~b͡錬-A@ŕB*ITd^%@ =$IW)&V(@ `$%)p%*tIǗ%Ħ0%X)V`M#ZxrE'.O@`(A`/,|K."jvH'49<}H~ބ3):e7mi2)}DɗNۙe\ߋguc)/v kv.m$Z@. fdn+F^J^+ȉB.$"Fk+Z7֠eXJ<E_W*P:JY@DUTCb_.IbYYU&|نhLH%E:ƀ[c!5h`RZuh;uyK)G$ qk\VԽŀW2[^Ag,P'/"؄`%¡hdAT"[M!d Z[')5+qkي&Ff2lR)rбPq>c%&{)G&ZVf%]iWrm%@V&t<_&3(vl(PlWr)gU_©\! c9D(=[0)xg6$W/beFj mfTMP)M['_@]Af |OK (#ϛ dfqA>JH>*A`|4̴D!Q^0mvB F U@܃UN1 agkA!):_&DI^%^IyUrzA+ߐtqOчΨ"+dtIGNHgz掴Γ L+]]&2R҅W$ nj'v NpA;zKWe Hsa ;$CM G7"f٠[ʙ({i(mi̇y3Mʣ-Tc(&/O4%Au6SZ!¢aUy$Zi|t;'A(t% adRp]g^Yz\W]]6 Yk'c"q9' o¦gXqL'" d%eIF6bzh c.g''`E443hFYfD,@#N14Ԃ. bc麙QJeZz%C 4^Z6dMplSp"/Hl)Y)d]aΥxdb^ F'mps" J|@ed u[ړ@&{)C8@ee;eu Rs:NʶT$Tw@NgStڜa&_) 0PL `1  d|7  3@ L@ X WB A8z' 3t>jr7i1Oh^ F*[dX4'c'e+Mp)EZ~'rTGq"P?;R^pl?vQh@s(lq0*WHYzW}a9\G kx9;2ɍ 6]%I*r2IPxWPb|Ad%"^둬wF= =qmqd`͡XG[nݛ(ǖ?ЛljB&Z̡Jp%jǑ_%kkҾٳfd,li zeOb+ v^A,R$%~=iN[*!5/d] *}c廙PR^dL/dbS(+#4iZNe!d 1DUȧ ADʀw Т^mtqkd>%/*`rHZ!t& 6 dN<]{H*!.I!`zj ^1+X U`ɧ!hbNQ}ٺA}xuKtdɔ6h '(hW.4 27PcB 6tg4)P`[ >Pm $Ge5z9xuC:LwCI$Q9]=6`A(%Pb0N`EL=,)EX Uh1 GDa6s;EIՙ =4QItJwN !66- 5¦t-O? 66SXńL(v6MHv bI @BA+FXZvT*I"Sd'p6 / @@ e<@p l,  n@p & @4w< p@ @u/@@ t @8 n6P  tP@i@4k n ? L@48P-"-@ Gl! @8, 6 EH@/PB?@T6p E,@ @=2r@<8O- pڬ9O+Om:+R$M+@*ծ`; L-++R-%p P,PQ;0@D4-ȴM LU$ ,'B@@o`0]JT  j-"@ KDؚ?@4KĶO "G[2-<@ ,-j- \< @:>00Kخ: y@<Ҷ@_;@<$ ,</`-Pm1[-0s+zN--@60@2->0 `N@ %` :@ "k+ <JDKR.r.+..+һ. /k" /B/kb/"/k*/¼2/k:/ϛ@KH:PKZXz`KhpKڽxK:1Vovo;o@ƾ, B'+E4R,$5քMyC섉Im46@$k 7~cNR1p@$0 ,Ԁ { 0.@ti@0 3@@ \+l2@ 0L'@,p p(@X` Ȁ`W!` 10 TX( `@6 5p2 >`( d@*ڀ.J"(p)?p@ 6 p}7 @/2x<dN*h+> ;@ |p !0 (@(0 #> @3@%'`,4 @$@,VX3 f6@ ( <P$ oFo{fo#o{+oƼ3o{;oCo{&KoFSo{f[oco{koƽso{{oo{&o; 4 9PP@* @P1`p6r:``@-p @@. H"p `@ P z`D*` @lۀ"i, @.\w%`(@; [#/\l@*2 |t1 '0 x?9@fpl?@0   @ 0W 80 @ |͂"` .2P̑@`D P PX4 / *r|"/0} ȃ0lȉɏ0, SH%$kNr'%T(|%Zr*%`+<&fr-&l.&’/;' vr1'}(24NJ ( DH=4$eޠ7alA0-EG!;uK&kBF*mʮ,q+qA| 0xZ&  ߀p 0t@; xz2Ā8 Xp 0&:<@" H/@ < 5$@lN >l_x!d< @f Qp L-`)` >p\8d@>p `j` hZ@ pH ؀"@$ @* dk,v8` `x/p #"a, (! ,c@:,%$m +*`xk'`|%+@QGV@+@8@ 440t. @4 H@ @ $@" JL9 %0Լ@"P;"ҳ0,ȅȋ0ɑ\ 'ɘ0 ?ɞ Wɤ0| #~2|ɮ ɴ0| ɺ 't0\'xW+Ф3l(?Ј2j0L0aA 7lK+ JuʝuW$ӘReBg,  ۭz΂⭓c,zk-|+Z}@ KJ2.,;@Hr{fnᆸ#n⪸,.θ5;< Nkµc.ʴQ.0VWn^r^*en j.κpй/py.9R.J lb"r ꊺκ+亻/.MDSm;pn@[ Dǀ#p,$<b @ (4@> L"  ! Xhs P " P d/` l1u%Հ*9 4`@Y@(*Z# t;n@1 9$D H-&P .@ s[/,@ @80  7 8%@3@+`@ t]%@Ρ@28%o@,&0 p!|& T5 DF# ,1 l@5 '8%@ K*Px<@.Xu@` {  |8P,` q>S |@ -@) @7@Lo@x@dc` tG@!@(Pu $P  "5  `º/p}nnn-{Do# o#n C[pp{ wpGd0}_= tw=r'wʽr-s5͝s] sB7= Ht3]@R7mucZ7ub7mvjwvpMwxw݀Mxވx;ސMy7ysޞ7-zަ7z޺ {޴{޼ | ķ|+̷ bt$Apָd6AkU/0Aٸ BQD;B.t:.5[7tpƲl-{治l/l1{&l3Fl5{fl7͆l9{Φl;Ƴl=ܳ>@[ BK_C-Ekb-GтvI{Ҵ6ҾH` vOCmQ[a+LS J.Ukv6WJ`X f-ZϦn-\Ͷt]c_6`[bmbcؐm DvfvJvhdmj>SvlZٶ-n"o Omq"-sBtKZѬr-m+ل-6gm{Ʒmhnf' nNڐkic.,i".KٟevKj6.L{j=.Cn{Jڷ[_=gnʵιllG{n6k".+8N nS lnIxMxm5^WS*%W Xo3aa:0<Ѝ 郲e 0# iá7AE9!) U $~C㣲-챧#c-\GkYC쑲hB8W8nA] )kE'{lɎ8TL]cbvZLEFla&!Mw8pх],V!f0m""BoZMi@L@qt0ɢX$AH8C@"DT/iG#.^$ʨQn,<0WI殹s(Ψ:x w;B@I }i.;_pm {JBn$ ; _ 07mI?/7w D,04 :BS^3<<xϸ?G!c﨏d{"_ŸB3oC4|^ `XP<dNH<2<.<XSy"k >hɓa"/'(ZƣS|%!_ W _ ﹓{bCF(Qs ʧ!IRɻ|NɛdZ"a|XGkˏ<3ʓ(>\@T*Rwb_TN#OJ<X|7ȇ|_=/#|$dt0M_kdd,X{[a#1r{:3{ ;]HF`Q<8u@_R& JгXDANӿMGGO>}pRI/J$NCOdVTB !HR3Y?q3|2Ԑ ]9JʨB `Gt+`@PO%< 6Bt# 6OL{b]F^*1_O: O`o֥]APPb?%0 Dt T"f/l=]Eh/e@  AGab7F|G# AutvAB.g<^Bq׳6WBa>*w}$#Pꐵ~wGW;Aޛ=^L9jܫƟ2d ~ g<\@$*`,DP, :A\;R@*?Z aa)垊[+1/\%˶J*K`H>;S0?gP? I#Wp3x> E%RW@mrn H@Psxds!gF 릧1ApOV p(q_Wt/ĈIA;*BTMN<;~iTQa~lIH0%wu%D) 0 lɳAlt/?8W/$/[Lvȕ;P<ȑ0%Y WE/X`C_[N&AA>XPP> ( 8hJ 43"L0%D x(Їh4lE@olP^L~0 \±~"FDFk oTƣi K5y/HGXD_hKcHGi!Ir`@U h2a'Olb5 CNaF0p-B d<@bt 46 Ja@Sn|v=_O #Y H> NF #!l 9ŠCV@&Q4q50rA}j#rp, C`t .`#Z א#P\߀@w+ň kQ Fz%'0)~A?uGڕV`P*P&j glGW {5.ZCH1NE1 K@RU8}PK`@4v.{W%0qHmC` %*U-yz_='h}Nwm .‘+ZX2B0Ї9x2Q34B;ϔa8UE&pb ` ]C]$Y>  FAp Af/?IUg2Ԁ)B>?mlDŽg<%gܡZ0\PPFCŚ2ːS8Pgx"J2,0s-XY!/(HB{ A\!:->HQ!=$@OG&!PI*'h 0-G/[gjUPP韧/wB }AK "=bL -FA0ϬGkk@bH;6^14|i(4@& P$@Щh-:U1]8'ETaF`ML )Hՠgc 1(4~SA3G 2gA ;t9.RNB`Un zy@@/C`xY@ ާT`~ /w"G% ݷDZ(:5An H3L2]C@d(/sd(C {*HQD#PLCApU^6u'6]G 't`4]#j\yFJMIj_?+0oS VC&0F([}7_o Ϳ x "`# į+(<*z 6,x$a<)sd(wkpx)xcպo' a@#( &N4BO`Khd ;q yS2,h@*"n؇!Ƒ(9o n-G "%B(Q!~K k4awW]$0#"QQp>ABFl b81"))!$J ?g.qh 1A!xB 'ruaM})@0@0{  M }5ah teHˆ!$7U|"D( Tׅ6xU D DBgPU()LQaYP<6z@ӓl+,-J7`#uXE 1Cd'@ Qh%՗, H@6`8; aƃ 8 ԯ|@~C5`@?p$V8QV7 4B; ǵو@>!ʏQ SdϰOS0-H'`#{gV<* Yɹ*z+LB!6X8tb! `8[o 3GK 9$)@C@d M{ ,ɀus(P Vr(H|ݾOmH JB zL&S 0?"!<_(PǃA*<3, MfSi|8$[g*bvꁄC(`KX NAM P_IiiaQx4|B^XperY<@yJA0q!XX !x!( *p0MB%A4\'[&c`;8 x@pnP(hP,Bo0Q(Iѐ G7D5I~ ĴCV xtODP S IMAÀq~-'} B,a@+ `ORN( \L-Xx ZzW,)d:b4ZEce1hh^iC&2#}@SA3L"Їbuig(9 \ #:aH YBpH!#"N,)O`j@Q/4(M%@"@aPt;b/(1D_G#q^DA0!D%R3*~„[Š•.5X׿$baH,|!K8J`P1FDEW`3)FźbZX Џ)Qr6Tپ ]X5:(= }d,k;(ѭ ^RbMh\C1v3 ֘-&_tF I'҉ d?)OGJ,. D[KeTlb]ŃdeZ0J_b5HI|j@`j}cb5!@ɕ84/</Øaց|"JAO@<~E@ʨH.*bor"@ }0_l.8 :6i&"0G}E͢;+9 Q<\.a#`1r8JfP,<2AJD2nbFIc\JaAdl20VAIC t1 e p`3fV HfDrs@7>Q\%;D|]҄~> HAZ %cubBQ$37o!B-2Ԃǂ6*>!Yn*TA%q"`T&|/eqO,)1M`T*DO/ B@21 s9s%#pϰpNM_ #+4!qnLP" h&rEwcQ+:*2h͂![XK4ҏE&D(rLc- yCG8?`Z1t|,2zF !f }`:HyE02kK2:l!/ӱnL,hRa~O"A娯 H`9\^bq0dlaƒMPW`)E@:)Lb'm~<0hT ''3I' Z(d <'Y;$hSN*Vޓf"U0r,tI 3ɐ` 0'a@ae% xL G%¢4=[{! (j﹇֑5e-F&@1{kG< 7ܽJà$ ?0{:kG9'-CHMRb> x1|la '4 ЄcA#g8TVN#$|` VKAyozha M}@kG'@>Bʃ[(@T`3y )L#c63%1NF&`GNܑ x%!Ax%*IYX%YN0/<#kHd5O&|HLrp fڄ?Ptz*`e:rXYB+ߑWeeFY7#AArGkqp/Al(6)AT#gʪB`]8* ^C к@+px>r@H{b|I,naU.%$LA>T2g(q(|% 3-]0EQdiya0 ?LT ,b.$fsy=܅eIŴb.L-fyb"0gb1uiLf1skL|ϷOSte4 13vM&G9\U%{ƬVU֕LxzU$ %֔{C=\-B EJeG;\.y* 6}ɿdB L^r1hL=ڎdrC<\&Ifg3I#M>$'I^ 4HMz#ɛf* M6lUn7M.;~I7ݯ8I@2J9Y%xZ*ɂd:9N`$R`լ7t' Ilazr=29P~4|?ҮWLD'nM$3YDJ^wYPPz WO0P".+]鵡t(?LPl;(STBcJ 4veL&e GS{TʯA21i)h9ړl6=1%9ݫRԔ,%m-@ o\7нL)ڽ6r])-t%tI̤6Yd6ulL{^Ryڌ E6 |d/qc]^B 8e*-u̲Ĝ6&4^Ab^e &̕-ԇ LCb> BBiL4^?# o Eچ<حÇF#$ <"4 g9j @$ݛsa&L(z=(c'*0Ij=h,/%wLQ>K-0,["ut"Oe?)`:C (242QP h$v=t..L2Dzb_ <dO+j֔XA091NRgGfXPc;C $X4THb5CI~4uph>Cj@*6 HE:y$:AP'ԮD`,@ ! 2z|D`]@ 8هvyiХc '*J'Ɛ8x| `xIΨ!Ю%egv&`q ,^ Bgw$>+=E"hRb$"l)3}) 臥LjM*85U.~d'@8q223C͉KMJ\ $>pod ;?Vg*,hjhmPAGM»J(I?>2оy"( (<"9qZ聾) ,Uҹ#n6'V/CCX4_;ts P‰|>)!zPYI NtKa`tZ {.(j}?_v|Oa-n ѡA"~oZhÑKP51Lsj>ۣs0bD h80iO1̠M%@ J`W8UFN6uNx)O{91( *m&CӠk6IS݌n6ks9P>ŇQ``~`]b5'Jؗp(ۇ&4 %Bp1mN F0~c`AĊm`8;dOe=0Dp4&-ƒGQx5w֡IJ3<cf4bL`NЉ`.#M` t0 C%"q<X#+4+Jh4$niA'9 h}nA^~R ~s@]2ƚ7Jآ__q,.?dЗ@%i؃NFGQgl@3wbi$f "p/T]"PYC-QxOg!"4@TCR I֏E$ ~=2_~at`dR//: p=E>\ ɨ$7=*/$RM;/f -^&{HOj %SzCf8T?@*С[J(s\}ܐ < Ш5UzeďXK8= Ek0y>`=N XI#BrTD,@ B}D_,Qb \ϥM! tI&.(LG {h"/ +x%H@Axwms 6 (3%y3;)Ä'I1 5RэDrQO[HdB#NKѻp!ʑGj;:MEISz^X# ,.¢/ Dj4>J(g4s^p2~W:HTt|I (?8fc6 DP vx[B""d R~Qiu( QFHh`-" 1ӭj1;ĒPFYгSTX># x@)CLb #=RJDԤrhXf>a0y.Lv)*3g cj sTXn4QA"<~E94ԠpiO Ĕ`jp Qܩ4$<f/Qo'ҌcXE)ezM<)pE0 h JS h& EBqUb#aԯ"[EUQ͡o^J%hH"cCCMgAuE'WӇ\E *!7XF\ d>xj?@,{Ȋ , C$Oxh Zo?o PL&k7ebfmHf:IwdN9@gYdb&S Q~2#Tb0h3:A+:~ڙ4·Dh%L@̞ɓ,dER4~f{#`(v͵$ASfT" 4 M ].ishn4c|P`Y$Lb4oUkRG1 4c+ɒᤙDNVԖ Ӥ4iM59i&I$P7 M9w%2İt657˦TS)/4+Kuj=&aZ$0}Mf[O'ks^]s4k6)rկI l5 Di8HlB(Q%慒:9@&Ie2l P~hsY4-Hx &إShc/:ט Mlss9ԣQN'͝EKLSk{{j*15ZTͦ/m"\" ȩ̃t*r3gNE7Tf0S@%?YJvH"Z|yDEłQ8HĤHqpgje4D <1R3tCo8Rp>$6AAJlIU@Њ)f %3T:#-)#ʡs5nYg {VЪ&8HU6 Re#=$ޔFPL<bS#\T>xŋ  I:S!SkhRZ G_8iQjL_b*ѠK1TcWj[ѠVphH;ةtZ8'؃ƨF52ya! Dz+Yymi(4@UByF*h#l@*m{R>}(s)`A!hVrr@9Sݨ3;aAf!z$&2OL#(dT'w2UbSl>5g2"jp])ݭ xL质 Vκbߊh[Qր+uຩ* 0{ pzWO,;ʻ¸ 4뜵~lT|olXìK,~S™Zղ,K嗵icZ_;gV,͏i=J,G;K8kP)]A 1ELxX4J$2Q§I&fV3C`A4ҮqW~H6ԙYZW*w%_JCoǽ9(~=ݳU:bP^ߙ>"z*sfz*&"5GU3쀯ݫad{}Jz7Wf[jX5U51iXu~4I*I3CXž%Ѥ: &%ʪji&կWQ3c9,2NOMDz9I[%j/ Pu`McV^= ]Kx`,'`l^`CXt5끭XWv]]l`)*&PjAp=*6Wln _/=$ $aM@uwiA(_2XYf*H+M bXo{wXtiʯaV7,6}¦ST6B.U"~Y::%Y唋>v`a^lPE Sɀ\a3#[*& p-^($0$ylY}KU*Y m$Y9hVdfYbZVlT"AA|Jkr,'==G9e nؐM0d9̃+ziA$U crӷTOX_k)+p}ҩ Nb(p@IVV[;fA@`m'(i70vl0$DS¤}Vz~,uJ,a*b2L!琕2>^\BC(C Њ.-ȥ(IIjsC+I^TD zQ;bTϙ4գҢUh͛2Zj#s ɬT)XKf&<5LTxukBo?.eӌ)*iJd9Հb#eE` pwRS-?*e*8->A ѮЧiXf".?6*h fݼ)uwCCK"C)HHi8>nZp{HmS,s: ƾiQ-[jJU/hTկdOEvU"=k Q+^a׸$V&|]>4rU$E3*hRj9dH3S+} rj(MO-g_ M.VIU+duTվ&Q՟&:_iJIqznj^ X?t$ekoGdbYnVimoZ˞\W?tMn]['ŵXXooo$'EZĦ،׎W[Z6)`ݫ[_uB.Tk7GMbnJ:,kŭJmGvkaؚrǰ2\6]<ٮ{ԧ-1V>l BVm:/0yd lM-7gem ťdi{=pJ|+e'Td/?݇o˲k;rY՗RgDb-.ڳD2DBBPr# K+h(nL#$rRo)0n/4 hn ifS H&.$)ԎBmN|>!l O僦C2%1pr |JnvTc^ b_!30t80? ڼ/TOqWonp/F-@i`.}tbCrgRF'4[ĵcOUn'kKP"%fѺ[k6'Ku;Nn&ط*OSb6{*~J*dIe>-Q6"n/O 6$ڏz6B[Yww݃o&v:M"%^wCO+ mf[@X-Z, )ҁ?<& m$—%@t& `J9-D"OF` `hnBn@ۯ>nt,9Δ 4e} {~f0]t!Ru+L,&Zr mP0H2(rMl­4CBK) &Lپ_.8H uQ?$ԫ 0yn #Ԩ;ZvQ-}hڹ,E/<*dO+) @;$io֟Í]jJ΍ͯtvKЬ`1r_p PYA@"P|𗆛<)l8[ n[z6'݆r}[h9sld˾l|I $tˀBo]m6Bݷ>tzww[.[sB=P@r.pK+R]vEM iA "~Rm9`!>U&j ` G ~ t+ O4i@ ,k ̂\Q @ q@ hq&وCFU"LaB-Dܺh= ."Ӥ:N]oWmAȻ$躚w[{c̭5C@D>Bھ?Ts}'+"œNTg@{]E#͎A_ J;}~ZP]–W Lyv}5av=pk @I#Mu^ev{UNް%{-/˻C Ԃy 19̋<%j޺͛Wyt&VƪiR-&ϯUWfum5EIMҪWk2{/U&Keu~/c%kn X0P՛`Zkpͽh|X*e'ڽp@(Z`Rku{+ymy5^=g65lVʃ ?.SOX-y WT|6췷ZS^/gea*[8lweK}{;zXx؀+ީLnH΂]`Sq6 {5Y(P3l%tm¨L%oܳE&bWՖ/fto5lk-J?hXhvKdfj8? aŋ@\y Z%#7Yze&$(ǰv na80T1>LI\Q(-c<} ]`V+  &NW< Rԭ IB JųtCg1.J?R4qX,5Wn`quY1bj(8/+w6\_`DKtLv}[a v;Uܕޔ5Q>i՜/ivSY~avwKTLٲMYkmJfJH<=dceKuor+N}TKQI#h0x JRYs,I}?u# .)HX!~~E0p@ (Xއ'c;xF@E>!@6/Z73v)uiƢmIDQm hPaHKJ]m].0*޵h7 g<p Cch۝ $֒g' 7f qQ6GhtmShQ0 ja7ӪO}o|#q`e\̝2Iu4l/yOpU)BB(iUWW&҆uf7ݪ4/]{WeVj9/'CS`Ly Z; jauU}&CF/h;~fl^uJ[c0s^bA<FFEī > WWo6z1avL]zǚ qwuk!NbU % ^!~k߫jۈ[^$Lq$Ŀ612)lԖa:Ք#ް{l7 XvNIR lKY2A"b+ Uj7L\Gf`nSĴ36M̴]3Y?䫈74k+  >aAq ̲$bq˾%/sC^"$:$-1G@U @xFᦋP_x t&; ԇgAK!(O]ġ")D&% -,wг:TV1z k!Fy`l*r{?@ȯ^>kZZx;Ba ڞDqmz|xl^eL%F8W2,h3{ b¬Iߘ#c/~E((Ext*{dw@_g5i^Yj1juE#$pU2 "V--Da"<4!4y'3xA; "Vh2 E0uR` lM7S WKS֬"LKc.+ݧ06*9 S4Z.Օђyc.H䏲HF ҧ6t4rB30W{VxӮwa^W&F!EK՗]~Lm>yAkRB U+RCH Uh5̨ K!vImq|LnkD9|s_SkRlYEj1di35:d0ʼ*!2٫ͭ.kk̥s,GC<`{ &7 B .l{8CFZ639ګΑߟR8{H6𑱛?)7 $&T=r$HRRx($% $Klġd~5b%9h>@ Dt`ьX:/NvJ3X56/cU%̯}25p;mb*lSG2UKP5&S8]`ۣ-d^aҒd.LJJFu 9?nP+0 Fu? 䊈хըC @֞cCy <`Y&*SY̑|T2bf@Z1Ɇ/mΗt8 ʠ~^ Wd:rjwoɛ羢{_* hU}QA/mu}`4yZ&F~Q7k#(0NEŰq0VA+q & M6DQSnabqE-pKmc8@T a<X pa9Rv/)E/\䞬`5 ?dQ:C ҥ'Zr:rg}fD!BXeA/@ړԊف!?QBEH6T.=Jl!w2"M4h@t!*|2<dTy*cn`|ܜ32hraqH7SꂃJx\ dW\Euuǡ9da7u%Tx!HgQRI_RjL̹]\LEܒ8Á+1Z>'n2q1Yv 4D0QM۠IV30j J)pq[8 ZBFaL̞7Lba"q:et o ƥвUE$`9 W3~KCI'Ztɢ`oCGEh{j+<:PQ3x$!l,7M8aFd}3ibѸttFÆ R5 ãݣ0P#{L\`o ұ3#Sx_M(=;gB"Lg 6 em1͎|M@]{Ҁ{*p%L2"_ۈIA I\cssZDsiW̍қcCC#4)p6xmΐ0EsKEuQT{rDĆZוsV*lr/Y'XP @/v}ʤ)AmF ڦ~Y}ѓIҎ8#1*kfp$M6p+!P(hLr_2Sn`;k<犟8[t;;ؘEG$K?l/n F$sJZ7A,P #DzU^Lド'KvEʖ7}Iq4JsȀ^ c#Py٠7 8ŴhZPcsZ ,e\89CY@'K2#m`1$y9-Fre0O%nLi;5]F6)`MyA37-=C_>XtߩF d`8sH*.>&ӄ@XV4 #UIЌP1(hjNyIK 2(C4!e`#r.%,m բq5/+%pά(G/<Gz&Z"qٻ/zm鑴CE~)+%*@ ^&J6g I8O a ^0-f@u[ ȅAbtI!0&gъ@&n*_Z{f %Y,}b0&(/\3/ɫl+sL jXs{4'C̮HQ*8i>4DBGμI3S55g"7;̓fFc &5<͎dq. i66OMsfͱYFHEȚߋFeSb\y kFeS kx<[rς]sEUkV|Ras(LwQlt.SwMm8Z2E:ڬkts<5mFrLYc֘fﺘbN}YkEc5/O9Z۵\VWkìa5̫57AIFyae׎zadjRe6#sQje/f3̼ǑKg1wg\W%Y5hf+y;7˾kr\iF$ތuri6ZӬ;!kFzFV[y&em29͗mgTZ3A׋k(VJ%Kج _&u-lN-|dFym 1\:9lbuوabi暴NlB9.&cpbk274Q#r%Bj^I;{ĨFewqM&,J ʮoմœ?Q-Ec,ns2lu)ONV".yUqY ?2:@ļJƺ:!c\87% @P &aSrؖ3,c (bCSb&#k%&P{>7ҫtX:WL;  rι6#-zM9)bQʷ2Naves!p\ ~Xc ِ0`ka:e2e PnoTdWx6BZb"y=щ#8Í2:jX!-\-͏5[u d6#:LlhCvqC&8EDѹwJxnIa!:E">yP3|tK0LP羸QRKr,ܞ #LbP6L9z%;#6[0JT;hRF *S mG$>mC HCeD,(UUhj E ӧPnϧ[֌~,ϊUfX|Ld).H)X<˙$bXN)k\t{Nfi.+?eateVySjPuX"O³-&< ˽Pc]0>pޔ)^' s*HQj֮4& Cjc ބPϺc-{-ީޔri'#}K柚g+aO撃mNjNO|F 6ryaO.Bn^9Dw$sLwg;Wk! 82Pq,+.€hX؈SnwIn憆?G73:|aD;SW"#ɖH-@n{(3m_ X #Q!|pA:.H-aRE2|3hVudiGn7javzW}lƕKsץط^u3Jf@e6ԦBq#pc&\:ej??NkWT@05K#~3aD-Sv=/ʹwiDMHAHᄝ&涟V BN잃#/pBj&;zl CY"~ܒXa2MID'J4j]#F&e4tF9eTΕw?Zڔ%MHL֟_U9QMJ\ฃH>@LD zЋm.N5Gm|$X'J(0!4V1M'ɝhPDb )AX.;0ōDGs\ucs;]);no[ Xn.VƐw"0TgJ <7 ۊ{3b7 oûf4r)ިC{"q@W8t/"kxE>&~Gn4d֒H(& M x͍)JFb/Q:R~2ըhDi0eBKTaiqրIΤgxu\[Fr lTfd"VŽۡu;f=إfvec{ݛÑ֤ v@|-H4zf#1EOV߬Dle¿lMp 8N%K׎@8`&&7P[ڎ}cS2bn ݭ[c˚5 ˷V.cZ᢫S+\5\i{HlxQ< C|$(Jeb16ti{gؤBO|)nK~vaulx]lgNڵLf$UW5N o:7c1}pz-anRW9}^C֤𵩶B._c[uwXV n1ߐ0>Hf|ǼO6+ X7KUɜE2Uq Kk^]o,M3;{liEIGFW1[WL6B ~QTx}33⇻\+B755ENQMXTi&?[ EsC[[B%8%fɬ}7>CM%;.5ӸMqdN0UnVè@dTS<[\h4 'VxG}sX{8c-.SglY7dZ#w=}P \D Fn9L \ru^Pég\m^Q"ᔿpP۟^gb+;%U ʜb :%FjQ莡Oc$kֻMpIq˕dn8Tꆚ‘=  ,vG*qQ8)܁ƍvxc^gǺGs amgUcIke+C e(Z8 ӂ[fqޤ\wݜgs#omEpx%N9PE@rSc]ix!7O5c `+;?ƣ?bȟT#eyHA`B5;  )-P!R+r:@\ 9]qfUijVRE^1ݚ/y;>PݓqP% 0&KxΟw zhJ-:J?%cmt .z E %0I6r$i;reN;|Y uLQAWq8L?A!хHt˷lDדu[x/[,Tt3 7b1X-;xqܠl, uĨGvJ .S5$| A;r΄h Xn~Iբx ?һ'y Z._ Ψ={!$om8^ld9|>11hv)"@o\ W}#1rlheyA=M&Yݿ;\9T<2/νkR|iOaŒխ_k.nBzX%Cp=ec\Z{>"Ϯ5 q)wK߼}`wA,4e I HJ=L܏}:'&p9zF *"Ti6jh/8n#b-A4Y qeQϹ+̫1%8E A (/z֝3€g0G;jg蕈d8q* pFe[]>9oy9&N.e.2ZyP6'֧{͙sX3t=wP;ѭCqUHji[=*9,ϟ@t;|Hwx5һNIn4vMRfґ{C0H@fޣS6K3Ie :tlg@)1$Gٵ:Z"d}~KOַxS"l Qm)|*3aR\υ%~jUq?I ˱UxuHcy#/z0>˨pC=2tPHR|18f%߳l_WmX 7|YeF1^|fxru& u&8fC׈g<` ;TĄP6t1rZj{FFu(7AhB>Q31(t҇W` 1HРSz۝q %Y:H_c,Ug؟WVrOҐ鋪#DQy~SީL' 07 0`_|Y&SH7t1hpAkzK`,LpYQC@U~v 3+ߵ5i[{I`5ٸf'*Y֞7u\C|aӴsP8>װfRҘVk)߰vMs\^/+~/<ņZ8 k#rc*l}Q yB\ڿ_#0:*ﭓWqVXp\OI8gWDžy79GyE^٪Q$@^#wnԚq6[y21^ۗ%ܸ۵A ɒ,8OB:xi\yVe^G3q5煍'FfW/]2 l-rMqlv-`ȓbKo?ޯO{M1rޥ=2Q*l+w:/mf#iOWu1 ^'4m ;.${YͲy墾'pcMLuAL#8@+P|W/g!R򅕏՘LD&w-U|'?pf d| 6c@9Yb~Dap.RtVC_/3|b>2nB1o>*>zɇD >yDoDq)EBQ1a5p :tG(Q}84p1zgf7٥'`ZH}h`WR |n>@<~?; Z[%?p#hzFz#1bUNOxG&5U '>p&V.v~&?.ѸV=2=<03(]գoGh~JEьΝW tpO,9}I{x>8z?o7k%{H1 f(A}1„G1guLӟcY`eW(w307E"كeJc`*w<}=}ֿc P'`@?`ZUiPbQ[8Du;{Bx#:cLw)B$/|{( AgK p>8@t)w*D0 hh_ћ/F C 2 ܖG4n$ߣo5 1}?ϝ΂"lRJ@CX%#xȚa ӆ i;U,&qfDК&юo|&!c, ig 0$J0Qg=f[2Xy@$vT50z>B@@Є\JO AF~F)tJ.v N TÑQ?ՠG j`xoR30B֨16?sL jэ1J@%ȱLv60DG ɂ -K1#Ӻ [T(KbHO0 )Љ;beCw,A ePQ4 *aH84ab DaԠej ,ι/l0+ sz74B9-&Z}A- Xx~yp)@􉆁m휔n8_?dD@A@>s]o !;@ CXyTPq5 8M"IP`*k?nf%U]Yx )}#!>)>OXcQx)WRL$Є_5!~&T PsVp'c Y~i#|E( BL>r"oźq4 +K~('__ʧ]AjpVH .H%?oŸqPlpAUPo܏i z~V\x?T cŗ@h1 6" @04v=o7&İb1|+uwMtݦ %J>ʰ+/GA E) A>T8 u@Ugh9âãbq p^Q}}3ߎK `C{ +*@6^ m jCĐy MtC)c,)F$HF8\ ġ ^{{2ߖ9L r~A ?<&:$F5 u`An감Zp7={6WQ=+y ߡ$<[÷]?ח*k0_Y%xqk`/{h*^o$$,}HX8CgNz/W1n[ /@ 90ĮANAA\:ax[zC◟_d!"v=*ڿ.oRC39!>D<G"& qnPd"QDt.~G&ݴF*nT@}fػp-DLr0/}B>"3mdu•$Qx9|R{O ' ^dDϐ_C[[hX @HŨ%1Ď4~Hh va$b")?+ ~̢Z/>;_y{OoN܌BԉĀ=WR'G.|"?O 1bb/|-._N/"DCX84P7Qo#|h(#tLNSwk9Ŕ~(8KϢ7+O"/UsF7K1 QɆ'_'fEhE/>)lEoEMoaFIGZDvEv<={}E\?WEE}#\?@~ED~EE!_D GE bE~7I9Q?_DD#EOE}my{g~eq?~ EF%ERFv*EEo}C _caF~/|wVB[hy|'pE )p [cc}EEqES?hBE.ER~EE~*=pNEDET>VV*}p>Q| F F { {@J+RCF 2|F3a!F} %FB|b$|v~6ABB|>rpeeDE6ux}|@@F{\tEF6eJFSl_E|@~|i|WF@XFp}oU{F{%bFzvM>xkF_FoFTsFyxF>ˀpdiFFĀtO|||n|f|fhoi{@jBQFOF?}FFRFFFjE-Fp%vFE?|FiAiFFF39FFFR$FFsRKwCvFj)FFSEF;qEy?FjEFCFpuaF6~~FMGF?'a FF q~|fOW+Gs{G? G#cwC GRGEA]Hf{3o_tR'" 2y$o)GXsny2o9'vO x;GEERF>G@G&dlpwHGz1wxQGE(x#ftt0|CE`G]$h|dGB*gG>nBwnGzrGQE?!wG?zGss][D3E bAGoGwuVswꀔGBD'm +CG?iGyE? G9Fxt|~G-iWL>GaG3"L3Ssx=ABG s{G1GZjC^LZqcHWy]eNWyVackycyMc||=G.0I{P?e|G1;4N;-"TS 3IceerZ&z'z8SUW+zLt*q2zX^*q';6z8z2fk;z,qkqam^xUDzWdkoUkKzf$daUaQz+d&fqAMqkXz6dy8da^qUT#gK!QMIq8fqZbzqEdl lCE{a!qFhzqacMqZbnzqlUfrz lvzOxz#XbqZU,Xzl_fbl!bzl^hf^2Krb#Vyzyrbz-lvk\y*kzfqurzyqyzzf@XKKlzuKb= qyrTlvozdzfQkCrR]+zAg-zzKnyzfyzBryy~JRNIrXVzKb[XQMkeGml-Lf!0"?e0tO=S`#uT(~MтjK Zg!?SoD{),(Ne_TQn:,al{~|JwczuowhwYsMsl6wu_\U[|r^mX r#Wb\#ՂR6'p*,CQxepo~`mlPTs <\`n\P{o@wuJ5gt\=v<u5ceqOxn|pepycaoJ7yQwNXr&qe)' _ Z cSQ8AY,bPnldpV,s;sN&+i3w%V8cP]{^}8[MtuW?]),@a&_(D8 mm\hVrR#esvyjTlsdP1YQx} &wX]c cMqNayxky={Lc}keVWXqyuky g#w}p~n[? wc]VIXzt8wOs;Ux5tKexO&/w'7GgVmpiQ&)O )J$Yyp[>,R$zz ceq7;)]Uc.?q=qdiU 8:z,!?zZAza&dEzZfqf-qf#dakOzU4%fk.d8)fq5daq/f\z@aamLLzXrLkK]DddzwzcMB;%`ELXIPdjzlDflpzbqIf=SfMMyzi^lhdlqblqltqrdq?X\yqf+l$ke9r%r+kWwM=by)qTXq1yyTz,Vyd_?VLhXnIz Uyikz=kyyzN\[U1"|bjL]LO =qLLUrd D@>_Q^ #C"[h#Dk2G.Il;5{x TLCn<%U ?*>I$H CDgyAQ,(ZqWqapy;nV9%H}\@?3a>qZ ECv?<;K@DkHڄ܄zބ`QMz1^ AY~f7IIPNI{#C = qJk}pc9\v&oimgo% LKM!N#rb (z wZe `JkX^0(; 7qkdh^@z$kf&)d+Wq!d-kԁq2Uq,dfU8:xW>q]zAUpNazJczkezM˅NTUWqMtzq_Wd^cqe^cXfj[fgnizr^Zo lq"ldKdzUt~dvq6[CM}ykz=q@X.?zzLkNkyuq6[t*Kn?mB_zVK9! ƂSellplBq[TM+DdjjKTfdlK+]Lhy0=UddNp{zuvh,OYG)${]n&k pQ)mN]w!+"DX(sHQ&]mSmnpYK 4`ozrCcPR6&8bZS)vL5Q_R~( ,OFy/^,eam%n1 (#~Tyd;POM/ji !:vWN iytn isfh?v>epYSu 3h_(|?SRLmb - vgm$,S[T'.(_S(nqSo w;W#lD%҆Ou8$g$oym%rWTaRh낚NHphAN/ /jKCO$jeT[9tB ;wxz'jUHy#B &vtr2 O%YdS b n' %&EMct\s}*Vte\bt= ct"PQ.O$-tRP\F# on V X1wwwYiItlxjNR)XQd〗$O'YPlg-Ye JTlYX~vej\R{bJ)R('N*aetuww(38yqpnwP>((/o PpVY g,D#mng4 *>hZ++=n t'd$?vK0a7'&Y.e0e$P'q\R aB_)@o(Pm WZavsXxes=ss-҇evwN o~Nk niA~Qrb TIuz vvy}>o"@\cr4 r] tGRS#p6iNs( sy% Rv &revCA(TpnKNa@ypOX􇐄oVT,Bn' QY@G`l%eO0o(y_PpJ$kigxRSjnQMQ%  Yh~+ZNEd-0p \2@E(N*P;dT*mv\*~w" x9j#r#"C^FTjȇJv(jQZ+<%` #>i^$S1uh[rn3aIx^sfhk- FV_m!O†$2($SmwIoLr3?b-md0Jt0ub2_Y_o *rn*r9Fio *{iB}|MiMmp dp]6?CLkI<$s w3m3?;KvuhoosJxi0{3=O$jro8oo#To^y#h{ &dN {npwcBQEmDFCG'N&)oKuBpO,pls).4odfBei;P -NqvX0PpjTXqJvnoJQ2h$E0Po)R'pQjvdg( pjQbpv)%WnP! 4*aiupWZ\%\Ol h4Qj #wG Nc,Sip$Ns{Vp4^Uerw10ۃu0(%wYXVn[\etV*g0(VxN v%w`ʈS5|AA|OMub*r̃P*ރCse$$] %oR&TˈGMlcQZN $|a(|PPNl+>9[j 2%gkiQn=pM}r2tP;q_KyvMdžiwnQ(in yA_pNs_(%%h{$|g((g %",f!Zpyz aykr' [NXtXxkxdIl%_~MfX 2zeqPfzR]D |qy@X&$)6ɂ-qX$>QPUHLqځU]=ށRqe6ec]e灅k:d.ktXd#T=0ce @;!4,=Y_ ; 6M!!q%(a(Hz*{^ f2"fRz7U9 =[zIȅ@U3 6mHqN^ ؅VqkzLZbq^d`f`dhe}zakq^pkMmpdvq4KfofV[yzkpbiXgdzՊyIl{zϊ$r^dy,q0r@X+Kˊ)s".VK'cK4R?K..%F=Յͅ,_Lr|b8?= JeVdemtc'mr } (Ch4W\QQP !XgT}"ņ 5`C L@mEBq  j ^)Si1sg hJ=QF$ 6$NOPQmG6m fx^ YsZN^~vs] vS& ]n YYpc(h!yF5m-pJPVq~{}|\tt$} eA'ijV er ZX pPRJ][R[ p#/xxwvWOOh(?UGO2p -vjm  f4C R$Q2)S#džw"6 9pTM\TRtIT!nPjʋ"8Rxt{ L= 3N} jNx&XxA +X(Y swC/p䂖h\ zSg_1U/~\C wljj)RsQNWFRX )C H5jOve_sWiw `voqsk*Y(GF{#U]xrpكPxXpgrpvAeWfl;:f̍TTLB_Ǎ( }lzbNr;8 #čMEwgmB n'eKiZ+\gstnchGagvQW'%] {hZ`!gwXWReXiTmk^:s^"lnhu ij\g_gjmg)wxa&uo-Nej6,Co~>S Z,hx`eT@ pE )``+v%X{Sun؎hC e9tk<ݍL߁zk@UqyD[F]OMOtBmOf`["8]ÎUO}ȎLN̎@"RjюWP\Ԏ@׎ ێݎ)-4l0 %&qa@;\^JIE!LInINIpI dqqCzd*+/Za0dÅ:q^UɅY,?WrBeSh%X8vqbz}~QeR~$R:/q l\TdJfZl7L"bl@]fqqlEdf$bƊBq*?Kypy Gzيd`rfXeOlVhk6[wfKyBQu zfXr*zIȂ΍CwyJ򊓎 yb'LXTsvsaDFQ`!rNR\֋qjJ$ Is\+YV=sPS#&tcG%. ;h+vu6g ecgmpV''փ[neW9RVjPehw!':#% $ "q2o^&}\\aӆg\i䆁L` ]doW` ܎%E1@o' psim\׃Tt_2[p1OD$1E _nzp9cbW/VnsPuX}S`'er%YgusZ̓l2nl_Tv\hTxJg ?j`!o= IR'+\p2vn'OY*m&^3WGG##)l kVa6$ pIieӎ[TA.E0, !A:o NzEe>rohE*_Fr)'gfEuGced@9go]Kg5jhhih:$etGByes-jP hQ?hۋ'uPHKˆ%xPna \ble$WAP>NuYaC&X)*+\xXR@VvCww 7[4jŎL'hi LR*h m1N9P ($ wjo&F\G2pivcoZډ^j$emmAA.x\Oxg!`jD^k܍]SVÃXkE[q^qIYQPgN @P=)@BrJ@VP(Zg#X6>yGkc P^6;K*qraU8 DqXzZM^ ` fe/gk4mkg2d^Ņv;dZWP"aqЅMLȈnDfizX3q߅Ofⅵ䅜q^m.XjUzqINJy*dyӊފaqWnzЏ`(Nb䊊k)z',kKP H[_dʂd6q9ȏDq aӏ͍f>TLk"LFq|t;{bdaKtNF&Ep9`(N} 2a;}WTS_"O`$ Y!Xg3S bw`}-a|xhh7pO p_X X~kGWgO/|a"g}>9p'> >{GcwK#i 9Py P`]/ #q %Ni}n`i+\xQQ nt\ ]\ j\br @j)Ngi ]4QN&BnS + (/&nY,ṀEɈْc ]SL "O\hyx͋wd+q `Ojx#ڋxkvaOO7]Nrh *vT"m'+1osWQmʼn O'TnދA Վ"^>Wy;oS#rn$]oE`oߒ|Ym(u'QOom0lWAAemv5j+A ] $A Bt扝lS&Ny[@e0t R^>TPezxMy&%A}`y$7ߋ]y.&M.j& QX*RPbr(4ATJWeJ{MfTn\T` Y0/\~["  āNNx YNUJTŐ*}ShRRTyPZ QQ]Sswtt]6"S4Ji$ȐNRVuv%YRj'i$a )W!ajIpt'$$PQo P$T]!;]f g,e}Wy j(1p `sj#R5W_ k,atV^XpqE1`[3:"P;Kepa"x QWChV%SKTJ ZB2x_)MNZ]q' ܆ OS-B\* \1 + ~>O"vXP| eYyYOA PA#JI/XT"xOY`|;Wcא-Q(0i/|N+T> op^Azh#e j)3h8*WReRPN{o NGPgoN #[R<#ʒV6gfO Sj S| =a1u}| f<|<&=C}< XMTQ mni#\txA X}S#㒽h4teˉmIH Lw'TH\fYj )X$ewFX*"wV[YE` V& js{J]C>w$┫NUYA VE|C(Ox P`X`#e ڔjYA˒A1U+m#[z]2WTp `X zraђh +?$NXL1UY+(A '9;XW )?:5QnzdOjkZx'xs;p Ov'4^5mG#%]X7Ex$mv+uHm(I]'i&P`۔i%$pr Xg;uMXWKT3$u` igJ//>jG<[&Sr`Cnh0wQ||j8t>n"P/\x)&\=]~^f yoAt/ y_m#)tEtVa+wLp_R QT} Sb%q 1ɐU#x҃|,ji8Oi&5&쉈fN(hΓNQyu#kx)q _tO w &;$q [vt;>"hݔb3;h##vy ċnqא, _RE? >Zt3N+]Öe %Y.B)oL'Q)GS h^NQ)V+\yДCOۂ4Ŗ,T]Q$Jj/ ֋3'6M<>mgV\#^-WR_S,S"h郗6Q&x*cx0 |I~WDvǖԗcm ٗz +pp\#ygC| (ioʗEl{m>"՗B #%Y?z CH$[`xsA׆o\*'&>"$o`rNa~Qo?vC omDHmMАS QEʆ^K##fmg)'n!o d,S1aw+ *$Z'E6 I_]xU u[[WČn#a؋p W $t0aA 8N z풉b]rq[l#bWoqa"WQkwgp\dm̆wsuB'&nxppSoV I dԌ*y txVw7yrMQZ4)ʒd~W'iL  B/`4$}*$G#h􃷑%(] ՉrR"cf h j f1`lh$usvPT"mDs`jno 2 5` NQ(Òn)NRp 2o%LrC=hlVo.m0J ,A_`J^ot0VjoˆB_zY~N umXu " mZmi S&:$mјi\k4m+qA d&jrR|nI=h鎹zt_\ `QGTnǗtRS"Y% * 1oVGpj} jSN?{Avc)?j"?~8<\.a2~G%]Ah󔿇=!=u|Ff[mR Q=!=]”P.+'ٖe>;+VQm@jy Ow7גJ]%  I[z$9&$ eq^Ass#XQ+w$;tuX@*K d(.G \Z\ey;h&h]$tS%Vr`x mw p% JT1G![mo͔y h8\CS?jʙmQ +#b}iəZwhS((5钄>NylS<ʙЙYeܙ&Ig' &AA Th#xe yz˙dYp ilxT^eGC g>e6 `uU}$jMBCd&Y`+W@TS5% YS)ORpt.\,ib}LrVKKpO,ъd& ȏ)؊_nڊr!^V z=z<fX@|dI[KHōُlEҏˍ*uS8fkэS LUiXWqi.":PLWߍ5ke[akȃHHȏ24s6'eMg:rq/rzBqF[CE_dlRɍ|7Ѝ/@X=qj ^IL+ȑLtdOaQeHMI0FWԑ֑kf#dۑfqkkVXkq鑕kkwU~NCݚ^!˂^;Ed(*XZMI l :aI兝edqzkdDuz@X*Xk͊zR^?Hlbk!U9lz/6[2l"Lb9ԊtqǏ_QVebK>q#p}|ckN[؏ᚨhlʏf͏\f^fKKfbyV+NVr7_1"Pӂ/  *%yi;`eg?  $ kˇF`bB`@&\_e@ 3/~ejLrjjJjLr mkP|bK]Lv}_L8qyKz#͛KLXcVXcdԛ˚V[kK;Ă0X[> XLvL%L _z^Lru]Ld[if[XLdzX͛ak C_^EIk~qddamLnk`LKfLqk#KWVN]cލ?⍔"k]q:dۏ=%\͛KC(_Zz_Nrϛ;[Il_gLdOD,Fđ-*q42 MΑG_^ da f[ؑ]$ FzoJz⑸q3摫Z6o;;t!2f_QP{ ] $k}|v-O蜃b`!(Ic)~ev?}[w ='\Ic0mnuPrtrf>tl^wEs[Y 2K wwYL$T *4c>$fZrD`pYGnۇ'&^c &\|]6h>%MBO$$6N :X(`Qnxpc`xBKF ($>hn'ok1Lbet'4WbcXinKݛ0 vja-6\E\NOc'RRt[RPԕwx"%& -ptTCv QL_`W PyY *]$-uz)sk[=V pQTevBJJZJT|?J|J>?JJOJxKY% KJJ(2H&JBJ$JJOHJHJ 1NH'KJJk EJJJv!iJ}JJwKJɈP~J rIf[yʛI̛NrXҠzmkLNrLuLLفAoZF>5LL:;.?W^(4zc^\Б4ґ%ZV8KK 3 u%ɑ0+BYu%+̑8^W A& W09aA.54-00[!G614..22M1rLg6Cwv/1blS\tnf"VH6v,-O \'zW#. 554G'W)DGi  +[Ak7@M)\l|\*2/ v8[@,t* >;*Z^d2 )+H0V.kI1a 7-:0?A:4.H(h!zU$7)5.BT5 <=/4;V';*"H+W#@Y- >H; ^90>@-^^.(/vk)"@)@.-kk$RrP;[o x8DH)M"LD%&8(WHY ; +528=g.E101PVK4"Qy 5q4L5=kUb"I-+^p8L &yy2W+w[oUbw\]a_)gtC4h *:Z顱?5=HcFnOgS d*Z@8 QaoB^ĢJ 12aQ118p.@~f( `'ZNqi.f3ur@# b|RrUuRgTG6gHg(x%yg81 iyFy H%JTt4X7JdU0|''m5mOv^n~O^>[=xCGELIJEQQ15VXY*5 %_ceE}j22bUbK +7n4f1a)gy.q+d1^fbjXL$XBX68c)9IYi`2Y)Bä4/[C5LG*JcW6N!95n<5>XU Ĥ/4 16GIbK91jK2Ȣr1X1-royb.F8yf5MjQt>Ik4ze=86f/hVBGx9'fXF)y'Y%jjj*[i"H[|k|Z*+MJ4 j|<vs _lo#^1;X80 :|1 +Z1<-;ޤ/4*.J̤KJ|58^Uؤ5ڤ,@OΥߤI,2-,;Jfe -lINPR3UW~[.`Lqe H"?$`8*J{\vSUM95"7r5WxEBC5xhyfFfY)'#:+H4{[3 .LPߡ/0㥊9ȤA;ʤI1ΤW+PԤ*cT5zVWܤZ2 FbLbĢb 1ZF%8!9 4*K >1wX,LvbH2U^}lyv8x\7%krM%¤ kIWb kÑK|ZWhIݥ5  6 D<$FLqTVXZ\^cegikmoqsufwy{})wtášǡɡˡ͡ϡѡӡաס١"ۡݡߡ!/52  2\ke9;gI T[2T  %d1 "$&(*,.02468:/0:hjlnprtvxz|~qH¡ġơȡʡ̡ΡСҡԡϡxڡLܡޡ案ͥ롅2c ;@\I*zRJK"H#04K "奂*ajah"lnprtvxz|~MT5@§CħFǧIʧLͧPЧSUWէק[]ۧ`ާbfiloru֡ء}W Cx8VUKK22>!`U)4dU"$m\:O \6 jp{}{{*}}#N{@)l{&9^'&{f>'\:Ic1[22èwQ_ 3ʨ6̨Ψ{`Ҩ4ʨͨ٨[:b5 ר䨼b֨n*ɨᨺ(m@8*/\E1q0ިĨϨ.RoI o<?Ũsɨ{WFϨosZGԨ 㨻duި{*?N:vR-}ب&ب8?>@䨬/F(1¨O1Ǩ˨VQ`Өը/ڨѨB,Cc訢6]0稢]08:E'  c <C%بSp "*j1*S,.35rY4/"fo\"XN{; )lmf~,<΄Wx=C. dn6uU t`4CgFSK \@H=\m,%ʉ%'-)1\,&m}|ix;̈́5E QmW dCf65/+Rv43'd"I9 3\5EHs%tt*婘Iid3\Hm 1w@{bx%OǤp4x"Ug\g5@(%wC6tB; 7OyDtt@@ sg9l(Mr#6oqFMiCh hbyRzg>!j}c]xE&QSxp{tʪbΪѪ8'ԪAڪƪt{̪᪶ҪժJSYD%S$ZopxE\ŪܪǪ@(};=-?WN@x.F}\% xx RfTIX (H%@HP5g*ߪnO(m7w`5`>N֥֥֩U΄>;HZy]j_ 3BϪ@8("O{ܡXUmAm媡 6tBtgwey;m@k~oӪf&zEu+NXUjn79τe@~$)ͩ9oˈP;>W? dO멐vF2  mzD>: X(KX$'ثwëūǫ/@Pk=3bc@ hYj3z;\i?G@﫩j*BlN;S$=  j@f;P!p% > 2r$"$&$+KWHRK d! C2f6tt%<JViXytn\: r -5 h) Rw%wtY(x%EP$u{}>n3 ayT|6 \x$Z~jͪWLCdp~C  (PS! ZFwA1|W&j2=z m\ɬ˪άĬǬ¬⬳ЬRiԬ'T֬"\Paڬݬl䬭ެˬì묠  y=X̬mȬyʬͬѬ _sL۪(*>q*&R'ɪ K *wx'TVW{*s;3>*T qAxD)$GY(IKL<8P0Sm?Xx6[]FňbtdW<yH&1<BDA6RlyU+5$ɪ8ӫիU5\SfQ"H,1eJk+R t:0UIf>{:-UM{']2uVK6ti|c)5[2}ƭɭ ˭m@ϭ3ӭ­# ٭τ Lܭޭg=d=>;54WF9[ǭK2#C=ҭ=CڭḽK$dөD[7F*z*쭳)g_gE yB'8.խ ȭ# r*;4CGԭít350(*.*Cí ';P'1حTL߭g_k.- %FC=WlZt*^cIt*_k,խ0(f!ۭC[k'o .q*d4{*d)*-/dBDuGI tYyjE% 0ívʭ-+sFb@''O%VnE(+t{<խ DqE #1̮zVJDe>ҭ=+خڮV'g>Эிʮ魾"W=/ޮѭɮí'ήۮ5Į}pR$ʮX.?ҭ8F*㮝 ݭ>+a+֮2xon`>Ů*֮Qf>حQ& bWdg>XUbFӮ;7(;>r6Ȯ>׭Aٮ9HV*?Ѯǩp}GC8Ϯ]Үҭ[r*;խ,EhGt}pĮyB2MC gi:V'uLxZI\kíbFnU4RW=S$ I*?Es$`F'q+Ǯ.M譺o܃cA+i]l[ vWjn4VR b[m`ҭ!ծQ%Tc˯~.Я.?p[Įg>2Ȯᯄ%I*x*#$ï ௪9CA"~c@bFխJ篧Ԯ S ït*կJYFY í% ȯ cXЯ#,${խ=pU5֯YpU1}bKrvF.O{I"tY_ 详n$Q?}Zpwadsg> G1Qïx*W#Lدhͯܯϯt'g PíðesNװ.1#L򭮯ڰ[*ܰteHO GWనr*ï*?ү`sw*Я_k?*KU{xdx?а?Į*hIQƯ*߰jխP 3ߪW d^@P_ #/[hwRIZn  < h3NI @+%$}\'*|;[ w~@\qy땅*lMV*On1)i89'mStZz{*o bPvw*4wfpOE~@= m=BOo +D61p,b,,3%O/z9Dn~KLP;'a#4S$:}>PDptt9}<>WAHP FH|K"mMdQSWxP rW(MYx[] nPa!Kf9LfaUn(.zps.?uXw)c{V ru L8x5w*'s2N>KI!U#W4f3IAv,&Y< ·0N}vb}$Iq/{}[jbp]v!=*801A;>1.5ժS5=E1=Al~=;G\^!=KWH>{ Ψ?e}/; $R <;{:m+q`(V4mp}rt|&y|>;c}$M)(b)${npr5tW;xI{~tctr;V`1e0oq"s_ugz#*^s$y߲IJFXDzDsbspϲ Ҳ{u#& m-۲|3=m_=<=DAD]+4N,)*E,ڲMbۈRenW" +m@e[gI/L[nbP7L~WČv!Y ;^H_ 9^|Zlܲj²lփu($w|βX$Ӳ^)}GhKk_nPurϞp]в kFHi>z*gwҲ],_/dʳ.Գತ[唳lon̲ ɳ Osʣ糹ҳ02KtQsݳ=xҲ*^C=γ賁1TpnyV>+**zгJs``s__ ʳ9 +jC)ٲ-r;JڃfnB߳E$]L/WMc),쳆®%+; "_*Dbd}pV]_dzmY@BtDFHQnMO_U=?#5ZRC=_hC0G;]Y3gCjjoϳCauNrW[oV]okbonT[$O4G;;*q鳤GsccyhcLbȳ!& jƴɴ\/pV:weWV8S:u |C(j,2I|iͳr޴Hkms@ʴճ̴u w18ʲ\w~Ҳ;cTݴ.[sɊba5c"5gȴӳWvFXbP˃S7V4 ";0xܴzو;eB>c9 s^ ,AY³k=s #(B,Zr t$tu=I+-ntA%0(tu6Ҳ0ôb^iõVL]Twg4#LtutbִU۵jYMxLMYuu }*3LHSW9&YAa`el&+ŵ򌄝joNUAFI(*ĵ{BlBLpmul#iPi˴L]<>r:*?P=8Kl"s鵿NFXL]ȵîKM;Usk2\-5cplԴox4zstrrJ$F',?A ,6c6ϴlnҲQl||brSxrbsfI:d,b_j)1/AYTuA"䲯V~WhI\ ī=dmݵcPtس c`yҲ?ǶPVbVY A")(Զfl\sAv:mX$^Y=̶*lNYݶ"@eINCG*RxVV5\N]Y9g^Bky]|[V݈X:{@#nfR$tn`N20mᵷw;εo=a^jĶƶǴ"BD[_\GsW:7AgrmP͵UڵT.ȶfߵT0\˵l+n޶%D+n+ײ`!p[7fnr`߶s-ܵն[xq ٳ$ЃiU= >D)_eEtɵbFl;`"]~ﳀдwa 0wʶPJecW~W9𶡷 +@)y({*ƷFX_EstMYHзL1۷aPtr"Ϸ÷Ҳ̳=T)IwDxzn+) VŲf{MY:$(Uو6a[ж6yWonX]nl@Sie4{ f1{B[J: )r GAg;1;c$;c8#1epNyPCG4JVL"%=x+C *@P )yOb+[\]E (!fVʣ_liyx%Mo); lVYܯ\mPLa{$mHo O2mNgY@ #dE*2{ < POE&*0?p B~xsxd'pq\xA$) \Rxg`JruE>no Jhl&\Jc &9ǰ퐤ȹubx$ mxx_$xޟ"kxvxv.(H_<6HS_dc5ROvG`e&p)e.}xvGkoRx'}DwFR<IXKtMqdTӵdo) X[Ѱ έgbre:djnpxSovy {}H t LvGQ$ɨVYt*jfiNuw79Ov?rA/C⨬C *ͺ*v$\&]\lͮ\U_ɺƺȺa˺olvGt~/wJS$ІUXZ\cκhϺxӺۺߺ (кV ~a"ɺ%κ̺7sѺ/2޺KPO$'ͳ=?S󺄉,'ź!)#ʺ&,o.6 ܺ W Y: +{W>(67Ei8kJ)Lκpv-S1h z6)溣i%4im+AALA{nm+`@d$hǺHK'8PRhTx4z9@y1{1ǹ'H4m6S{:ջA{@LO?FPR s)\!=e) ՙ \(;[^ G+) afiCG5 F<1m+ t-ve(~{}ʣ 5$#)+CG6( XG$?m+%BYgUu'y:½ݮWǽqü=)t@`ͼeԽ^֨׽-ijgo:@պ׺BMOѻ36m}E4&E +bĶ}!樾ͽE躼T^@kؽ <ƽ[ NϾ1Ѿ35+Ӷ' GrHJvLUֺٺҾ6[ؾ0UٽnWx+ν&cԾeR:\E]9)WcGX-rKxzd[i^-/ۼZ47w #ŷc,t5L (tlRCV*3[J6pZib;Q=:'Tl2޽IKtNP :j oľ޻BUco{G\8aPAu]ujں:Ծ{|{ktѵ}%m+ɿ+im+۾WEJ̾_Ŀdվf뵄alʯZN8p(nYs\}!<9|Ͷ*r]Mȿʿi ksz*oqssvx¿y ƿ-߾G+%ڿľz#\w^<B P`b||𼸺8:ٷ'&HĮ̽:)"{Է*cطշbCͶh꾯_^XӾ;ǿ'D߾vQD˿G^޻ JwLB߿^:ۨf˾Va Yp:^շ`>zm*ɯE-龋뾍2zmzT<@EܾȾ1lWz=\& bFƾqÿnb־SDc/1 o\Q¶ۿX| H[HciceoX0ع;.S{-/оѽc[ܡô2žP)(ɯM=p ʻ3*1<}z'a;93Q׾tcc+ɽ@X4^6_Os溫" ⶫ^%{:ͶnT.V. ` b;P=I~{jпҿ@L2EEgW7o9Fع6촬3.ɵt^\B :$Ps> EIZ{h,Ie4ȿh+@-|'[})㿡 \jwV!Gսӵ9Q1Y7 Pq9; %@+*U?GAI‹L€~P$<u§^٨pª˾¡ 콙-ݰĽ3[Ÿu\^Q|TF]›_¤ &ӵd( f7mp2cP'Ύ滰i1ѿ)9AAl9M§{ڵyưH|;|>$iC! ?l:q4$4&NjdU­+ 5¬_ Š?(`s*ik0{!xhݰ”\| ( }¯={?"&\4 @Nm+h=~Ǿ&uD)ÍN"G@5Z7ÖCgÞعNëm*EAî”`s~DW9Ç®^%?%t µ4J3A.@Pշh{~¼*øf7G×'4V )[fKTÀdE[%f-(G]§dccw~#P콐@h (å^W2sð&6^;y³x. ٵn2ɵ#`¿¢"$οյԿص$G?–A éă:2F&J8IԨ騯1K,4ľ*74č.<-K68)¹{D2ĕ+A*ę;2LĖ\z1d;¸,ps-ϸW(Ҹݰ0tÊ漘Yغ󫞻˾5. _Ĭſï%ؾ(J,5*/M¹3ď@ȹ;H޿Eݿĕn*9FğĚUĠĤPęSKQW)~[OU^ČÉz+gi/kԸ0öqrd82;ME;RפbU8Z^f`  98d..0.5H> 4t\[]f]_"gn9:J=tBv VCT5' gîø&4RĿĎĝđĝ7Ēė=ĚIBĢG7NĬĒOU>ĿTĭ&X[T!ŷ!h׾θij_ܹ,1o o5}Īac$|$4 5  &-1p2?4ʢ01HJ1xޢb4d4`F5k42;1"j 6^|-N-218Ohn4xw-{13 Y)PzPzԡe {Y+M)cZtLB1LJ{=:]nM}#7)&'~FȢ%<G:+Rƥ;3HmG<AD%@)SsN0 [T]Z~Xnm&R^;V"3b]b kB|/^9Z Z_Y8/~:7)TJG\v&m85#8-Ԧu= qA=Vz<Z"/TIIa,]3e{KkƷ]w~!j%oQ2Xm &K\,sTU 8)((HKXCp0I88#BiD)@Z)PN4]BV^V#^Vt|cMh1Y%x$rZM]⢸YU @"^#0/<!ViI!$l5CYr4l'[Jf]+5e/t!BJi. l'lyyEmv'Ϣ{F.EVY_ +;9@!6/8ŜKJ=K /Jh\qK0{~"LcV_1 >Yg7l|%l3-v3NTVq<s*ƾ_0u)Bp /J3;.TkH4@Ƚ8{;>Qv6) {:C1!:ǧ:WE~"~P2 _^F;@Gcj'Uzq#rołvɽ1gwX~x/j-I =?J Ų6u0wo)2W 4w }QZwU[ qcB=0x<0F 1 WjS*?"̦1}|b![S b ]Dg|X2U/M6djHf 2fYsȯhB 32AYVB>,8vGo ZfS%c1(W dbɇ.}+gC1_/C@NJ=Y^g hh3=-]TpkYez y1Ex.^swk^DsIz%KN0Y'Z4Y0HhUF$0 a07j/ k8{= ˆxe0uc6*,0g&No>;1UM?Ug=@!^45;7@&'f)`>$T92242 t3%/}yhEO?F :/#Ow̕hH_:L4&s%W~z'4L\=fkS>'5tAmJ-1`^d|B*vmH{lM6^P7m| o> w+ 1.m0CMCKFZ'8':;\"yx8oL\_RP/!`4o 1|<g-;ˠ !#%')7,.02468:<>@BDFIKMOQlSUWY[]U_kbbdfhjln̾3qsuwy{}̳́̃̇̉\̎̐:̖̘̜̞̠̔̚2hlkG={dIw0%5R "$| `79κ2Hk 1ŖX)ţ1ޢ7isEbmU{Ǯl5[~0ŴH8g 5hD31y94i :JZjzv<J(*;K[he~, ;| C1\U,`\{45 v+^z 9yO/:_g,L( uIbV4J"NBnT#FD*dG}?I7gii&7&AL4y=>>%R ȚZI 5@v).^|Zqr6/[u-)31]M Qn Hf~P!k`3"fzdS:& l+B7Kcx3@.a}C"3wҚ:&='-_P]5.a\4>#`J0- 8'X\u/zs 50#A*j1D/1Oq:-lh7=F3/{4,Z*L%z@A20b$iGʾE1lA rD.W9NVu|Xz` Q{r@?PCRj\JWӸ/lzu [Xnɉ*T ӵA/FTmaE3J'{Q|l3h`mW c]5- +[68Wv{/O%mncEzV_K]4Hs1[n v{TwC_ 7-}% A.x8 c7}JaOJ.W9J:EXcYM;dnU;JY/d gI5vrPYe :33o|X3/\uG`Bz$Fqt6E:Xs%[K(4[ 5:%X5PmRX8Dž5I]hPR ԫC/99f: &"{gM4yxg=7wM]W4MlZ=1vp}s>}FB4t,]m {w;A<>B1m00QV9mA~Ǧ|CQO-m~:s xgE;4 jP->6y^6y\90'vy=H5]&9T; z.{i7zQg{7xK}]ksu9qeknRǍN2Z h{jԖg+UcI3|+>-?foΆQFUaA)O- s/TKS-nK'~ 0d]z;|i4xG[Nqnygpb`sɣfOu}g~]'8{Գ~5go;o~+V袥~1HwVNm{'M7K=aW8&t/7ϖQQF8+maJ}4CxtԐ$}0]t~Kdn֙c(-ʄH eʼn}hn18Za{>rWc,DvXH9Љ,71V0їk$}#ˇ1x;ѸPjXU1%v eHu =w!-w8henPK׉{ю͎[x(}34?qfW E1.O16)Qz)&5I7s)dR|H:X3i8tWãQ5_C09Cry{/} )V*4r$=)IiK?7PT)R3Іfo=Օόt^әC647iDI7Ԧ|yeƜ9@,5*2h7׈ׂؑ4  "$&(*",.02468:0@BDFHJحMOQ}SUWY[]_acegikm؏oqsuw؏y{}؁؃؅؇؉i؍؏ؙؑؓؕؗ؛؝yءyإاة؂hũu΍ D[ uŨ2wy| -Ĕ-? -$  `9qBV 0,TRł;RU Z "I$&(*,.02468:<>@BDFHJhLNPًRTVXZ\^`bdfhjmo3Krtvxٚz|4فكه/0׉טٜٚ؈ب ؋ضն#%')+ب-ز/1ؾ3579؀;=?ACEGIKPRTV؎\^ج`bd،\prFtvxz|~؀؂؄؆؈؊،؎ؘؐؔؖ؜{cHتhőV ģ585$/ڧ2k{4 -;㤿#- -X) Jl.|/lhxVAgQ<OԳ5~! C[>+H}HUfC@EP3 wT5!#%')+-/13579;=?ACEGIٚKMOQSUٕWYw[]_acegٮǍlnpْuwy{}ٚڂلنويٌ٤ڏ٧ڒ٪ڔ٭ڗhdײڟٵڢٸڤٻڽ ؿګڮڱڳ!ڹٻNZ ۊx +;qPۓq"7!cq!I$۞2&eU(*82.!1ۅ, -7r2sjGMBj>Jw<a936ʈ-LfJB/J q U^"]}/lx#a #V5IrXƒQ(YSIzZűo k3;ۣۄڧۇڪۊڬikُڱsٳ۵ۖڷۙڀٺ۝ڼ۠ھۣڎ٦ڑ٩ګڕٮۙ۞ٴڡٷڹڥټڧ۪٬گڲڵٷںڽڿXe |2y525hum)zVU;p&ڏ,-8# f*  ڃ"016 -4 1?h\X%QlYjq=)=e˥Ō̥^`bdfhjlܿnprtv܅xz|~ܲ܂܄܆܈܊܌wܐܒܔܖܘܚ4ܡܣܥܧܩܲάܮ;*2܃ڥۅڨۈګیڼܰۑڿܔڶۘ~ܜڞڽۢڍ٥ڐ٨ړ٬ږܰ۝ٳڠٶڣٺڦڭڰڴܾL 4 ۝ۉ }qP?c#ݖmMg )"܋2$܅=Iӑ V/ۦ21ޤ,I;DQ)l'U!~o \Clh=D㐗pxoC$"=12/\E+.wufmצ5(y'$c$Zb1-:+KC|{L;ېq٪ݴەڗڸۯݻ۟v/ܴܸۛپݩڼz5  cqPs qB (tĹW%k'ۢq)4*ā8<:>f -jQ+ |$7! ,&mV,s5 8!7"}!j¤YEn[C _kѽ6g78ɵg^'wwXXGD=bN̄(֧Tv9eAWAi5+:EB8'ԇX1̙{w ;&}έ .R*2ܽޡڋܵۺݯܿڸ  ޑ551he!;J(f1234 .07=g$# -2@Bݍ\NKm\EW=|B؇e(g˴-/0OQSUWY[߅]_acegikemoqsuwy{}X$߂ߘ߆߈ߊߌߎߐߒߔߖߘߚߜߞߠߢߤߦߨߣ߮4 ߵ߷L߻߽߿Q/0߲ܷ۹ޱ 4   |ex* ܡ01( -:.--2QΘޢ6VOh݈L|)0ŰřǍ! N ӫ0{}`h_!w1(XCۈ"/E|1j2yE\::8Iźi7E{r -.|\I/ X|ѽ1 >9"I?^>^ g!m 5$ɦ K4x2 2xb+qD Llǥ>Y_\r42>\. IӡZliL|24!<-TVNUƭU(GAj*8 dW'k<PVq xW*Nb(%\xd5ko#_^vw3f<u:C~ﴬkuŶYWMQr9vD[;8_;z_A=|3ԷQJ՚jjH` X{5h p0aާavA|408Q1i.`d1ǣKc:89-5cFVPdI@ўdBٖ9N>ޢe[a~[cejX`kk g)1jwy hg)f.8j)C"0L*sH~J* jj^12k3J+C jtʦ,pl`.뢵L|bmGnm+f:[Rǹ;n2o IœR= 21qCBhv s%r0r؜F6\ ;cs1+<o L4Ctx7#]GN uR{uWWR\bkR_oDn77pv z9mN87xA>jyO5AO-߆:7;2 Ok7o=}W_?i|>qӿg/"M E,4!v\?>EI-!12_ H 9'3:* ƶ40t 1f <mUsBIWD#>zk E%Od~|,cE3>;J&E<ܜB;c#qJ| H-'Ffƥ$#X^rfd(I -Y Q6Sh/Cs((,4#Ve\[B &&%`sL2L)Iv`wO8XG(c5jF!86(Bgy8|Rhр :."%AEI uKTz{~<Iz\x@Ci*]JPf')7iǪP3/=o1AiQ2yzS*֬R7k6TFW Y.2&A[͵rkZйJ`d_xlx5`ƀUhqSYVm^6N(+URܮRT`s~[FD!KaILkhEnVn-07sNzx~VP*_~[U.Lyk~W24|:w/Dŀ ']0o7xTDmJF -['@͍32_a, =$&rAqKԔ ,07e X؅1VH^A0T2D602 Z$kn'J3~td2eoz JIZmj&m~5 oKY##HiX;9Ql$?.)q7T3բv{MyzѩHt X7Ձl ohow7OHe[x 6j۳qռ"JnewD9rH&4|8}ssp  }ɗ4]|w2&-*E2'V}U4/w/؇ɏ`M1uN'+ҋ<|ZG-hQ%//*@f7vb+_^wc~WQ> ~+Q'%NŤ}/z-SSz[$Wc^6qW\ʦM1+?Q16!ˀw=Xɼw[ XА3*RVz*HMʷS79N>"'.?2n~HX"!F5Q~b{hWY[]_)a(cH^Fg!0 5km,HU 4lJD-'Fx5|GBV/d -.5(~Qj҉m@/@5D6d+өx7HgǦ<1a82qJt/7#%^G5"ǨF2(7VxfH%%Wc&+܍*[M*7#2wR,E4P GdXdi b h6=g@C,gi x)$)a38++Cx7<7f:2Heh&YU|̒J-Nhʕs>}/|?]4D4p.t CnxyB=e\)B= Yy,|fu/ مSw&5[5 Ǚ1H4:ǀٕ9Ȳy}8$U7k ma).R/}x$$Y1eIƲO3ȹhcK#) 2i8 . z*I5 znʇ!y 'Z&O!jj*8H(r.j0{A:`#1EV Jzj ɤMS:~bYY /bhcUCTUk*9bؔP ](O;1j+T7[ZEjX9uxf ;P*H$ 2QGQh*3VnDe *uRz\ٝFT py:R4u"O*^cegikmoqsuxz|hHě~TC  "$&(*,.02468:F=?ACEGIKL-NPRTVXZ5]_acegikmoqsBuwy{}i ʵW^;;P. 0Μ+0.?ݏi,ʒGl(][vzRk&N̥ fhjlnprWwy#~,.O4I-LQgBi Vރ%')+-/13579;<ɓDFHJLQSW\\^`bdfhjlnprUtvxz|~ۓ(f|(W0, ] ;^." yq"xiuMT(MhZ'*KT5  "$*2)+03{}%7(:+?A2DF8H;K>NAQETHWK[P_aUdXg[j^mbdrfuwlyo{q~ux|#<>BOߩ 5@;s0 u*2[0 #"%'ij.\Im^%usjX}-8`/]ҖM(xff7Y Wz|~Ŏ*2  &",.)2!4-&8);-40B396G:J=M@PCRFUFXIN\LR`TcWfZi]l`npe\^jxnp}svy{}!r|@~Mی-5k0$;V ĵ/18HyƯ+!q4KYxƮ6Y# Z_sͣ\KdN*20%d( %-/t "/9*<3/@1C 79I75<$@(+EJY03MSbR; V?X[hF`cfNjm Uq%u\)y`c03k9oq?vCF{HLޡQW;R/λW9z!fcf.0̋I"Ιw}I*55Uxl#1;۞/0!+5.'=8">&B,/2^P9T= @BtE_bJgOkRn!VY&v]*zbgj5:p>twDy|ۋP" $,z D[q!5aU-9ݗ1.?*682k<>@C)w\ Q? ǘY*|8 ,jh".7N<z[ Mcafpf'>E1($;ȩΫz=/026E!;#?'*D|Z1K6Q: U> AZCHeLhPlSo"Wt[(x_,fi7;=s@uBEz}P޿ccǑD[&(5k<-Q7}*I=\B <FkBM/ZK Um6tG_ Yq7S $qb˶5!X&V'2DG7kq)Ke9?X :cU;,ZX~sq<rB~,Oo38*2JXO8S< WYdGaIdKMiQTp#rZ'w^+{ye16lxG |ߗߙm_" ޥ$-7./F 1 cn61h64)|}Nc43/0#eh !#&(d*,.02E357T9;=?ACEGIK(MOQSUWY[]_ac?egi/0k5n\suc]ezg}msw}z4nܚ1;;:Gʫk~;+ޡ I| -`ռΕ#%/?O&'g>Ơ^1EƶNPqťYƳjqʖ$Iǣ3d /S11p/Md) uB.t1JfUxYW*`%u,2SQnK^K{R0Uu cʹ,5QӯʣFʴhtj\b2kRp1yJly"{>x6ae3%_6Xs$$_ fuzjp!2Q+uʠHQҋUHHpGF]F裤+Qڠ-F[x,\cZe_rn̹K&*n1%Mg & G(aXEШH̲1Rb ̛ ;VuPߥ!1c +YzF;̰>0-*u+6|n!j/pk328;bې F?3Lq͌qoqd-яLr&@r*. s2Ls6; t2WDBeF7?; aPJL-3{m_#3vjm̂`ՙF(1Yw1T/8|v918hB2`!B*9{Lۻ _{T?]y{Ե'7;Qzr.-cs|L in{F\Y$>W4?֛W@׳4Xr)~$T%l`Iq>T##ҋzPփ+D$5ӲLNE*q 4UDz8*!8ΰҡy0h; ͛P1 @R3,?>H). Jh!/,4I C#:8*(5ǞU6EJJXj"o0K?4'1-I.ID/1^X& 6%QilT7QwA2E6U'RF;mpؖg>CՠH_ zq4 m g$`# 5peLNyWTϳ&eK=iYQЎRz3GMshNt!Rs(,Z(=UӠZy809lc,bՖJaEؒrNL'7>SEeG 1z2/lԯai`s$t]/o]6`%\D.f4ar3,tGhUn[>JzCkơA/8`B{ISR5p` ;YClm0Giƙ(KyTy\ 0yd~f4jnyn3-ʄ#fA^|<Q_KIC% W/+5mBR{1>uJQ̭ wR?壯zzN(ml2X4bwv<vvtpk_t;xA]o{wTD6ɢ}7:s Z?{؊E/vWdY;SdU!1l0&F?S9ZE3)y|aP|55:+#=I~].vzT7c_̜W([20XV7a>27_17!7kGA8m1M1,Z<Q3{^qnw|FmW<>=wZ4en>h[g8Q?=f?j P<'3Y6GtVЮVشfǐ7?i7]lw=vv7vҁfl0 wu/&bfwn1gdHI!r2G{?3#_^b"fK+>tS'n;ɦpu\uq*\=W\ǡKR$5\4Vʔu FYsRǵTDxƆ*^9 K{ǸA3mt1Fenl5wxכԄ;ۋhvA3h؆ch6*)F,jS#5! 5.K/4Aho҈_Jg4N1Hy|-|PJ<~~ B sI0~,4 75) -'٢U1s;ޖDhzߑ ǹ7;/T1]w6*~Od17L8u4u&N5yHws܀5`Wԉ ޤ7XCp=Xra* ]!#%')+8-/13579;=T?ACEGIKNPRTVXZ.]_aceg0jlnprt vxcz|~p6zlqʜsؼo&P6 /L|.?>'.0'/Ɂ 7f^~6+ӥynhE"I(8ГqX.JT5ى ޤ7XCp=Xra* ]!#%')+8-/13579;=T?ACEGIKNPRTVXZ.]_aceg0jlnprt vxcz|~p6zlo\şؼo&Z@lŭL;%4xX󡅢1RlV/UYH9n\\ذ }5e4hpI%V /Z+[l)\?ɋsTzZkcSaBE6taũ7wh( uY6G-x`E4 i?j|A7B8}p3 ZT,D KH9| 5fȊY -g /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$~XOo7y2lȫؼo&Z;04r;?_Cv1v -#ʢx^Š)c)+r`+J 20CdY+Knj<%TO&[-s(3DSޣ\d_/S4wXv19I(Ⱥ7pTg CE?;:j89j"|u#.J["{?ƁDƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&Zܶj6 ww< 8󡅢b_ -#H9*r?Jy"$Jשf\S*2`+J 20CdY+Knj<%TO&[-s(3DSޣ\d_/S4wXv19I(Ⱥ7pTg CE?;:j89j"|u#.J["{?ƁDƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&Z2ġ04/z40+Y,[Z^ 1 -Y@`(Ҟ>u-,g܉x(7FG=F+fA9,`ܵHX&q5nXԙԋz -s(3DSޣ\d_/S4wXv19I(Ⱥ7pTg CE?;:j89j"|u#.J["{?ƁDƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&ZĎ,04BY,_C.1. -1|=a3hZ1Mv I ^qvՑ4%0tE'|>IZ;!L+=& QoM-7sxE(F9HiA9H/YyE*j9@ɨ:1\<B; ʙ;xѵtLߪ˷n>|o9(/0DƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&Zj6 BIw+Y,[Z^ $$".R\2#2'BXf6Q^nZvV\"5 y(**2 QoM-7sxE(F9HiA9H/YyE*j9@ɨ:1\<B; ʙ;xѵtLߪ˷n>|o9(/0DƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&ZbF04mbP,_C ޅ1  -)ي^3#7Ҍ3vXUEeD c~(/0vV\"5 y(**2 QoM-7sxE(F9HiA9H/YyE*j9@ɨ:1\<B; ʙ;xѵtLߪ˷n>|o9(/0DƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&Z@Wlŭ,za,8󡅢515 -HŢ_15Ja*pLMCiM|z'/s8]nƭW/j4E'cX$LwHD|1yţ^/0A9H/YyE*j9@ɨ:1\<B; ʙ;xѵtLߪ˷n>|o9(/0DƵĥN*2Qg /JHnbaV@LBrsP)Ot-Fg:SR-z*sjoo8?.l1eL\N5=$~%'w .J$\Q7y2lȫؼo&ZĆ*04mw,>`*\ȰÇ#JH#I& %E2D> d#H0pP8&5ZlA' *hN01~QȈj-gh؁sDutdq"Y(isuoEɪkAK0p-">&@$!6tdH#I4yeJ+YtQ 8$UE+,pWd"Rɑ *00O.GNȹlȖi0|LjѡaD <8‹/v̛;|O||/|;^ h"0"L! l 1P3lQM*Q'( 1D1$ ,HpN#8"-E1.t@;!:T3X 5 011$BI8МF>1TPF5KhBNpM/N,RC$?%(r s2 +$B"waQ/3iaW|@6T 4 3l C 7P D 1 5 4 1a áktI}q0LXg=cGPHI(K]L0H*'Т">"1 @)G0 ~?D!G aL&!H%;aӰpD>͈1 أ\R$p:mr8qS'bxA-a0)H)v\APH9PE2Ƞ@* S:$ 4q `  L x45 E`A d@؆)# @C& DtX? cB ~-\ n"'B ߘ'^,0f ](CЇB4(Fp`z$G:⑏$$" IJb$%*Y KZ⒗$&2 Mjb$': Ozⓟ%(B Qb %)JY S┧@%*R Ub`%+Z+Wկ5b+YYViUZVq\ZWy ʗ$`ѯ+0<,b\ gE0tc!;Lfe0h ,[` ~nMhD3@=-jXZՎ(E0|HJr`%hFabF uK$6A Gp8A Lԃ^P `Uƈ- ,Bl` )E(/ h C6֑Gl`0[^Uz^|[_~_ \` V`?)\a _9a!I\b)VB<"D( x4z HGJҒ(MJWR ԥ/iLe:SԦ7iNuSԧ?jP:TըGEjRT6թOjT:UVժWjVzd ,aXR-iQZ.q\R/y^ $PM `CoJL%B91l'c(b 3f3'=퉳+ТLsϠ&f) ݲOrЀFѴ}tmaF 1%D(Ca`iD:A?ъU(Cθ? &SUծ~5c-YӺֶp+]W1yГ=q{̇>}?  @2Ё -A rЃ ! MBЅ0! mCЇ@"D%2щP",rhF4n[Gq{\"B%r( \|+%K_Ut^~"fd.y4t17yB9Β%Y# B2(ϳ̙ j!](Ҕ惖hgVr9NWaGJ 0h e b` Ps P<`@80   p5 `/ = $@ y0 % ]aZ` p9 `P 0 pL@] 4L_ R6*0 p K0ư`" }0` @ C @GP w yVp r ` W m0 L@? `O ؐ vW@lP p Jڠk `02c@'Őr0w  0˰ .P 0ǀ ` SPhYĀ@" Ph@qS` WD  W@ {0* 0 pf0  4` P  `+ 0 *pc6 0 c> <0dPV@^` N r@ :N ֐IP``XZqfXTP j p pW؁#X'+؂/3X7;؃?CXGK؄OSXW[؅_cXgk؆osXw{؇X؈x8x8x8xɸ8xٸ8x鸎8x9y 9y!9%y)-195y9=A9EGKٔOSYWu8M;FO^gx %3dcNdhV6d$epWe1@wBHFJȄNRHVZȅ^bHfjȆnrHvzȇ~HȈHȉHȊHȋHƈȌHֈȍH戎ȎHȏI /Kɑ "I&*ɒ. 2I6:ɓ> BIFJ9S耕Zڤc4=vTd:2fw#Oe5CeT2Oʾ@Feg1d5xx 0jQj6*#`R` Z ,% PZ:P X@ d: {v0q;9y9yɹ9yٹ9y鹞9y:z *IkLOˡRU+X[[^adgKj{mpۣs v;yk|ˤ+[륓K{ۦ ;k˧+[Kiʼ*Zڪ+u1@zcu lKdtd+xA2'v˚q3O QwUsPܭ<x, lggm@ 7@ P30 Q0 7`6p a` ]` " N 2P <` r`i@T\` x|qk. *k-036+9[ ,NGx|Fzњ ` @X@ 9  0 M  )` u10 0 :pPO:@ UP@ j}t- {}WՃ,/258K;{>AD G;KNQTWKZ{]`ۢc f;ikloˣru+x[{~뤄SVY\_Jbzehڹk n:qjtwʺz}*Z껌\꼞Jzڽzd 1[gP11O;evuYCw .50 jnys   wz0@ v g@40@ .`|Y@ p ` *@vpl0p ,p 0 J  g P54@ Ѐ(`p0g В` @0@% 3 pPI v`s :W[ h@{ 8@+ T P0 u 9>  ~< n`0K} `  \` B`@pGA U Pa w 6`sp PZY >@N@ $ TcP/  dP ~&( j` )J@ l@y LFXX R0 4PЃ &A+`|f0 4xy`LLj+8`u`&. ~ @8 |C A$ЃK $($@\+)hp*x X A1@]J zP=h6H  Nf p`m 6( O=`U_A7(<` nܻ|7xԃÃI0$>` @`A adCy L3rF6Ag0`dC0 t 4(qD2HZʀp)5%dT4i@e O8@Hv&\ܔ4y@O>cl Ȇ Xy2L PГ3 18 (`+'0  >%@P.d<āvi<ȓ(GJ l  (A%Pz@ht XD`,-X`xl0N x30z@mp _s]͉6ۦA_~13a.̞7@<UZL) :S#SeڷԦvw<KA4qytE9w. kx/Mw2 @p5(OL .E@_ ؁a@dF ~@% <ap-`Tb0D58P`$)ŀ $ bPPA@  R$(hqp t  }A|  2X1E04`=! ` d6`u@H8h@Sx`pk .@ TJ '=xvn; p " 8<tB68D@ 1H%H,ԣvA PX l2:` :Pa`I@ RA$|@ > ~l pDu` w1#H QL=F \mn`N @"ZS<y`Z*(p(` lL :5`x" `x'-p@ \Zh@{ A+K@Dz:.7TwpP@:]-L A`8h;jxwU |5 W q^|Eu<~r;`E@2X a%,0naC-'6Ů;^l5clE&%dS^,e]av̖3fl}qv;glvChm}vVKi7mvR{jSm6Z{ksa[lm]>h;mͶV tonm=vݶwom6~o-7.܆;nĝf܍q?n%w\rWn}1wܛswnAwݣtn}QwVݫu%_7ݲ{vmݹ[w$Ȼ{;x M`6Nj\Ðq:Xw2@ӌ!M+DЮsbtן+Q>G`Ep?I"%4R*H)F3f0SQV !U3.ñ6I!M$L*JŹ@4FܘFȄ#',>K2N 0$LKI()%,vKNH&$4Mҏ&$AJI% OV9( %(RQ2ʞ1 L`OU)]erT a`Q,UnNid%]+}%pbK`,]e\ 9T>ˇl1ZfKg%)9\KŪYec@JRH9^t3`> "%)P~``(VL 8h3dZUDXk[q>Ӗ~Θ:s3Nhj&`*f֠ j޳)2ʁ+ͰL6M-ʖ'[qnBҼ9I-F^|V98i7z2[D̪rJ X7gdT%Tѹn˕b֩ lQW)3um1|g` yƩA#Ey$H L dX@`(:z` D5X30 2kj@gP 44@2@T h O؀NAX/0Zj  ` 2`< p4w1ͨY]<6nfbeI2,s]Nz̾<3f'5ΟT0lO)lU:W*s0f珲qv9iu<+1>bܩw[,gb&'3"φ9'LsF@=l@. t9`m+` 0>8#  ʀ$n @;(_@h9*X 5@9;O J,` 8`{AI`+2@"@ 0x 0(5"P@4 v@Xklm*ˀU4F٨rQ<A#H,)gLxڲ=2ǵƷI5LԈs9P^klM*a1W֘/gu:M M6zXSP2u7YbfhŽ:!k L(r%+CKWav˃j Xy8!ޠC? 2A+{ `p@.SVV2XX" w`q 20p@ S@\ ܂#0 ā- 3`A5 "@ F.t (}A*ƀ 5P A5@؀C$L ` ,}Xi80A+T ,"X en A: ȇB0:A7,` I+P ^U؀>hH0/(Рt`Ѐ,0nЀB`+ 7 #U3<i2| h3 ff)}`d A+pQ(DP0߁@(@L` @@bP @+(Q 9H 0F A-B`Ё[ h%(`L`>HXĀ4|+ p . ]c  r H;d ?`E$V-+eڗF`\@'2s;: jؽV}V5j^e7yNj8zc+7}5@w`=5@Dfp)v4z@x  $M `W < #`A=8t %X 4 h`4 p@$1@jAsP 2@6ؠ`fAH n A P܀" Ҁ2@T Qj.H P!e `@ X"Ǡ ؂ 7pp.xV \A#{L@:Q` ;` 0pj [@BA p<,(``Q* 02 @# LARl (*H*0JA3`a`f:Dg`#ـH ` \<0+qN2-` ;@W ' @Ԁ7 A*CF`c `z4ݦtny:vܢ3֩QJ1uUPNT7usu]:-[;#!>ĺC4 wd9 @0pWvsǞ^~vN ;bo;vȮ$;e]svE;i7]ve;m]v܅;q7]3wݥ;u]sw;y7]w;}]<#x<cx =<$ģx]<4x}zG-@ =w X T@ @(]6@Zpi@=@ `ud5 å@lɳ ) hP;@*0`tu@;0tm @' t'A0 B |_l0x'^x/^7x7^]=yC^w%yK^EyMW]yYuy_^yeޙym^ys^wy{^z^w%z^Ez^wez^7|zިWzުz0z^U߱-{PGtߴV=ݦ&e{Pm6j8 ߴ-S 1 B{Tg{qg&,py30 u `% 6+ &,@kVPp@0ѥ |9@@ j @+lp <`sA~t]l0U[`c`xk`Ɓs`x{`Z X">$X Z`& ' ) + ΂-`  / q_1H!w29}4~ ~ܠ7g:x_<у=(郦_?@!~NEa !H(5;IxtӟW ̎Q8;_s +6!yV-/⹷j@!&3DH!x$ RS H"DS{9D@6P'#Pv'p$=X&Lo ;P #DW0do* \@<@^0{@c de]f p!hbZ b hj  pHځH~` !*#B %h b ' )h + ‚ -h ס.w8 r1X%x3=Ѡ&0 ~ ~` 2~WF~ g'v~ ~?_@A8)_CAE]a6{1G1Ԟucηw:ňӸw# tSR#R X{Ebxx$qƽ"0!rC% @ Xe5pa,ˀ'Q P 0h@  |@ @ +@2xV@pl@ x2-@@ ` p 4VBtPe5Pw> !:b@ @@0@ v@*`L@& T(P ʀ,0  @.P& >:,WQ^5$"s+>¢tX,Vb./ >w }` }РG ~` "~ݠ6~ wJ~`b~7z~`~~@_BX1CI_E Fhu 174uj)a/طWLqH3"<3=bv2bA -|n$u {ջ;{!zow#ur]w #@)yp  A @10 ă0dR@d X. z@^ Lt" tހ>lF0@3`@ .P,Q)@2p Fp $P#P` @& )*${ ` h!@$"? <po% $@0,p&@ bp ?N?p@pȀ/,%n TN"8x@0p:@`  @ `O@p 0 0 :@#0X@1@ %P%6`/L l9@   TxG~.d( .y /6#!h!! 0 b'" iW2"fY \Ʉ2"MH#bG6"/2272@٫ZY1 iF2oPȌKY#%`oJ1xP n 4w 0F>edFlFƑԑwdGz !H*#@$%iIb$'I$)iJ$+ ,IKڒ.K0IL*$2L2$4)M5Mn7N9N;ēd=yOd?OeAyP %CPB%EiQb%GQ"%IiR*%KR”2%MiS:%OS@PITHR 0N%T)URUb@ҋ /FXA:c)!!oˆH">]Wĕ$0%GHXQ#jc;#e1E"eYBQHDj ASIdXG-M %`x$20ʀ hi`!  P J(@PFmr|4tG|i]b!H.#IN%In'J;zJd+Jƒd-yK撻d/Kd1yLn2L>$iMbڤ:Mz8IN:N&IOړ>O@IPeP>DYQ^FQ~!HYR)JR1LYSޔ9NSAPYTIRT>QT9T. H ڋ$(A xABI!zc0rd&]1>i Ե'b cF]cd cCJcY3< i25aS+#h3NjDJe0h d#XX+ @*7p Q$l\0 @@@ P08L p L2XL:L  =0T%x!>p op |뇖ƥyiX6fzYmf^nY_%_n $5nfYo2惹o0 @  @1P' x:h@x; ӈp#/@ (U @ے"@| G,@\E< @7`h<@(r 8t@)p0L @3@0 @PT_" `B@)]6 |I l5@&P Pd08D@<@HR  %p . _  ր-0DF0 \:(+`Pl܀.P l -P`@ 6AK@ {pi@`@.0 HF#*9 3 u@ |p>l=`4pZ*@> q-MT` 08> \:H; ! 8 ؀, 8&+,o@< b \#`HB ws@u*8 9bR7 /JG%`&ډh(:h*nƢ.Pޢ.ڋ0Z2ڌ>4Z^6ڍh8:h:h<:֣h>h@:iB6NEbiG#iIz+iK:1LZ7iN?iP:\F)R2N)T*RV)V\)b)Yjj)[~p\Jڥx^ʗ`Jb 0)d*R)fr)h*)j)l*Ҧ)n)p*q.sNunݩju. 6@RǃN3X ZegvNI 4M(x茦h86)&֑"1 >@h@Tj&@Ā$plZ#`   x$@p,@ `1 h5 0ـ dp @4* ; )D8 0P 3e!T=@ `\8)P`@&@p 2 4A @ P9@5!  @Ƕ\ V dY5P ) +' ɩ9P&!l d@7@` t`-pnp d3@#PHNnihiQ00!XpE^Dr nE")Gꑂ")I*|ު*)K¤2)Mj:)OB)Q&KiSFSiUzf[iWciYzki[ƥsi]z{i_iaz&icFf6P૟ih:#kΦm@oiÊ*̩s* WzqS!2~nQwuR]zA̚4ͬ5=s$2f'$ Z57U0dW(s:P"C)@vw ր%@0`@0|7< $@p I=y2 [ @>@?<ȧ/Dlvk:k꺺k:f䮻k: Zk6k:Vkvk:kk:֯kk;lREE]rFLªڪ(i%* {G) ˬΰϪ +jE,ĞKĶQlJZ n+[ ʱĕ"ܱ+6@7g֐},:: >:O{lDȚ3l#xuRh$;3uVh8W :EL%f(^frv(J `hFQ 4~" aژP% dP b @LRh"Hoz2L Df2 K`@P0EK L@j r ` G2@.+P=."M@)@5@;݀ I$=l p@PS p[X @@= p82@ 2P [.$ 3 k6 $#pl ʹt| k 0.+R?j ꊺꪺ3º.k⺺.̱..KUOn>@톻.:P@n;ֻ._ g@)g|a)ce+kd6eui"K+Gr'@ܐL8`2]9@ @"P ;'4@P \@x/ @@@! DB $.p4< Wp6l7 pp;l 000@?c@\ B?D\_F!H\wA(J0LL8N@P,GqR7OqT<WWqVw_qX<gqZ+[u]|{#q`<Ƈqb7Əqd<rт{q&h+i 6pm@  |D"`i Hv? @0 L0 h%@P @+8X ^& h9` `X |  \^@@ h ؁u>l& 4P 0 `5n!p @p@(P ~@+ @* ) 7ˀ5; #@NU]_<pv@/`?k 4@00W|>c' $@$'0 ! D&?00f8,"pHpT P}0:H `0@ `Fh80k3(B6 @d@"`G XY@ c<MPT@x@)`@1\@ H !% ր 8l `'@'@7΀p `p@`dM&X)P ^“@& :qp@!\8W)` `a+ jpq@ / H#\n0@ W;@+1p@ U2 8( @"4*8\d0d 7 r@0<L)d8@ 0S1$S@p4< p E0p \--@h+hln+0 4;܀* ta7]0 H@?p $3 Ӆ% 08 PV 8@ ;@@(0< x@: @4P7/}@+p x. <N> {9 x@ 0 ;< m?`,?@# <?P lw.|# L@8zD 1@(@?T@P .@d'>=6  H 1yg-P/0 \) @9@9@6@ @*#@h @`@ `D ཋ@%0(!@@&Pɽ>%@ @&p}*PPt~/  "E 0/@` @ A@:m,0p1

r@;0 L=`<@00~@@@;4@=\+F7@0P8-_. s@\\)l ɀ Z#( 5~n  .< tf Ҁ1$8!Л =:px:/)4p`)ptR#p٭4 ݀:pt@0 u+=0@8   l; ~@ +2;-`|d@ pn@ @ @ ]T- 4 o7 H;h$C@& `M@5pr dÀ/pVՀ@8Ilˀ; ^=  # (_?p @;-ZC#h/P;0À+?p Ikc "? ||pԀ L543y @ 2@P-A@$@9  Հ;_@` _-pU(`N-  @  30h p pl1 ( p@=0̦s!p = qp@PnH5 Pe%U{!LG@ ` 'p8I%m2@- dhp >  = `\@xu#i"` ظ"@t@" @(0ߤէ86 P@!--寜3>/Hk[">ol$C ǫ|<9<%@";$/S<&h'ʋ=@bo{E&{^ }B{x^iﴗ[^{^mﶗ=o0+{=﹇ 5{ս^vo|^y7[{^}ラ{_[5| _—l:|߈w ~P?Og~8>ߎ~h?#/k3~SS'Aa~?Rwn3Lxj0tV,#Q="`bR ymQaP0"pZr<%zf @ `0Hlz;@`S@BhI:6`XGv?]'U}?c/c}?iڗ}nW}tw >os" 8"8 UP?Ưh#?`oS]~B_-u~N_0G$a~I?. ODb|TƗ~b? _oWS!~o?#g|,, ʔ PVjB}GTdN@"I8\e@:4A Xύ&>,>`WF B%X@&U@=@4] ` hvV 0`(hR=|BD(|!P2TD<@( jr@.` :U"@P S$Xm=*L=`8 E - hN"$D@# dJ^@/ h8jl'``hK.@/ x8 hZTY`pF0PU<` 0h4H8H's@f1@AX$ @ p * "4ӀM@(R@4 P@ze@(uv& {fIn[À$ @ ` ?h1, -H'@$pT%@"zl\;  x5 *;lP:: . $耼; R7|3v@< T*nB@ 8z&6  <6{@<` X>^8'bM^g^ H^( a0[$ڟc2 R-Af3 A jd r\?@6Hq o Ar9@A vPzA <T݃Ac|>hA@h D*BBh!j9BDh"DY!PFH#u sj[-z Br]HP ݅Bya6 je-_;cg|tH<-X [0&\.RBfC>7hj(0DH@ @4;ׯ+  .Xj`C<BD 4 hu@{<=e<@Pp(S @!!d9D(`0y@%jAXxcߠ@b41PLti=  H4H' ^* o<%A'`H\? L$2H q :Wb@* b|ҊL@.+FHx~CXjH=*9xzr+` \]B  h?tS`D 8dth,C|(H$$ DE"#ёI$RD&QI$@Q")єJT%]HX,%uD_"0Q &Df3MLHykb6qM&r91Nl'zb8O'Ł xPL(& ŇbDqj(b5E"HQ8i()+)JR|)g5nM1)A?PxTL*.OŨTxU*nw]ů= 8V,+FΊiŵb:V+t?=s?ԟ懯ߏ1 ?ou@[O7 `pd KDi@4|H&Y@` ؔH*@jZN:DzQ<V6'|- ` I!J=| nql* \t@>P @h / Py(peI @OhXLi"` 8d@`@hlf >FiˀT pXZ΀[>`x< @` xpzoY` '"Bhh,`0@XV@` Zg)@(@HƁW$`pD>FY@ @ P8`BP} /9\UT7O;`P`&#WK&"js% Pj%=p$de}N `, Ҁ+8@ #K+@*N#'Wl$L ` \hr<0 P8V{?@Ѱ |:j \2lg\dZ]-@X .3Q ` z96Ph2(GtOri\d!i#q`HBK$DCpy@\5FP M@ pih] o>I[$dBi8`]H tc p4-a $`m@0hT5v!  ݀9a4L@q? H$RɀZ= # 2@~ C# 2lA^1d A A!d\B6!ڀ(PBf!]jA"$C!ѐjH6YC!<< D" D"D&Kd" D>Qd)\E"_Yd yEv_d00,F#ed3FN#l6,f#ӑv;29G#9}+ H$ I @Br!ِ|HF$'I q%Iڵ30> $iI R;"QPXDYQ&2 R,Hd 4$t$ p0X9>` PP_T@`` lTF  #G@*z* ۲"c `'YH?o@R>q4(i3LBI)LM  kRI X 1HRA M(H$   i$RɃA!DH#$R )|NB!TH+$R ɅB!e3dr ن|C!͓vH<D"HCdD:"!HJ% Dr"(RI4E"U)j,(m\.F #c$2 n(Hj5Fz#+&Jt:鎄G#H|>H $jA!D0$I$E" +I@I)`R"^>(!2jI*^dr̀xpw$nr'%D8l:lP@ Za8'`HRY> 8W` pHP\*3JR U*MJU%U U*eAĮY24S|IQXi,V Ie%Y)V&$7Mv+qq\LW2'ٕLH'r:YWb'1d<ɯO+=iDX'Ie}2bX'/ˍcY Y"G J%2e頄P,'ʘ2CitF,?;KϲD)8Q-UFeFQ6-mPK%ՒGQn-3$%u-fbşə*eI򈥤]@`(Il/@= @Pp#i@2 !|+e@ <%n p P1 XՎ\P 8$l!7!L@@ Xh|;@):U0 'C pHD^@@ kH0"m{ :"@ 4kl@  `4# Hd"Y6@:@`X4.1(  v$\mpVрa pީ:Jy=$1Sl)"@V&'@pL4 $`8X,0 p X}&@1`` NKk'& {"@p' L@. & 84(@@,:k@h<€*pPl.{% 0(1_ (V- <=@ X`cl0|hF4}͊E3h>!͑fI\i4_1L i4w=͟fPs(j5K@SԌjN5WN@Vsj5ǚ9<ଙ\k5oS@\sY׼k{;ffGl6Ef؄lJ6)M̦fل6EM&jsdmB\ئlim6Mo)$n|#F/:A[.o$7m[:HL-aS$) @Rm @|S@%@Pu/26˪LT` 2c#( TZfZܫ0`o[.@tqZb3Sq8#? 琳yLr.9'gsYr[.39,s9Ӝg5gs97fxN=' t:NDeL<:#Jtv:?Qgԙ\u:_Y'$yu:7{&DSIѴhb45L)$i4Q*MKsӔi4m8Mf j 5FMRԄjJ5VMWVSIjܝj&YӬ45ٚnM\i5O<O掮Tx2<felv6?fil6sflsY|-O1~6x$<ք⇏F@扒lo t'Bi4= O"pehЂ H ]p 0iG@ @x6`*@c$tG+<8:M  h h!LP p` i|V>y>?SI4r"9JN&)rZ9ZN.Is9͜hN5' s9휹=gt:Eg)tZ:NM' <:INTu:iN\S6;˟N\v?Yb;Ns*,;ugݩkF@Nzޙwn@')m7J& x@+OƳźYyhm Z4  p?@F48RFN6B9@[y ^L`o:GK*`[Z#p%tx<PIxրQN `52@-`@,!@ rb*SVQ-e6@V@7d(S }>CqyNi( ~fCNHg7T e~CsSjlf?y(3$ ;ϟN'?Tlv?OjSv?Pp'i=w&@hE9wV@/|羓xD&ѶJtux@#-P' 9xvHm VZ @,7`(ѐ*2@pmJ+ ҏ%@" OT47  04Wo+%ct`^K@(@2^&D  8ȀW ҉Ju!č]@@ cPS2p$%(À2(W%0y8Zb/H,|d H$@3@%!Q nTu4Ѕ] ``HgJ@>Тp:3` n}@Ƽ@n^@+ L=Y"x|$v =  ^ \f6-1@7 hdOԀQ?@'[ezTC18EVwp3@ pd X'Dsx@@@ȵ&@x 8Py)o  lH+  @< PbD @ 퀇W`@ x%4W 4. _R=Lb L D@)EJGSitU hJcZ4WؕJ3`鰴Xz,]$K!RC@Y-VKRm)[ .KQRt].KR|_/ L )Ta0uBLS)b1՘rL=Ȕdj2ELYi4f*3n9$δg3 MGh@ti4m"e ?@0`O$UA$T*I{CU"3y ` @DYa&)Em3l- 0"q6j\˒AdU4 0ĨYRJЫX {uA^*XA &BWXɀKa X V*aU/ kB bmzv<%bETX]X+ G>,2ߩHP畁p' [>OUSmb@ibB-[@Q b1PP"4 pB{=BZkL%AE@3@68ng1P hE  0^}f Dbv`Ux]~IT0V(Jqq @6U: ,Fl3&`-pN@(\F@/Tz@y:$! '@4` |' PELrF @# )``?w Z*=3s,  ep`B2L}OZ P(27C- 0t<#P.@0 #q  (Ivp pteo- @(n40hP\ـG@@ 8 ,զ< i@- /a%d Rc0` Fpm20 PP@i@1@vh0@'ecX4TdMIBЀ+@!@ HsրR)@hXs4(6t6Kl=k7@irp7h6` nW.0^=7p\,gD`D DvT *d D7 LPZ@1 `D \C@3 `ր ` 88Ȃ prbEryBdn@(%5 ,@Km `&815@ DZ {5%q@;` Ӏ&`֔ < @PĚX/V9|# ,$%TLL"83x5@t35 @VW& HPEa@6*@ PH.n% b @@T9` %eH @ J[7P;9 ' ]@P v70 p)Xm  <x~ `(hNb@?r O`<@IԯW+UJ_W++%`elJ*  `G%,C˂u`e4X,V**mKuCBϠ~`dZlM['qmgW Pu`4j 0^ h1@Ox*-D  ht ` pnm2o@HL> i `h}! hq<pBO0@+$r@Pu0y Gq2)KS ٱܜ}^ @@QPmħ@;5y<I6lc{l>vKxcقA6!4dىlE"vd?]H${Mɮd[/,@LV 0ds;ٞO6(;-eK٦S6*;^eMY٭lW+ee˲gٴZ-ewټ^/flbv1h2leV6}jhfo@1 ` j J`)X 6`E$X, 7`w9R;8 V%4e0E("?&@fgfFzV4`@:yA zxi #2D5p &K`T (F٨i4d `DJRNP,."@# ri$C@\S@)`%p`DLdR@:0H|LM":ତ 4ʀ[ >6*^5@ X@(T3S0XjN@PlU"p8L56@p:.2 f)`xjS\; ph<U^H%\8i!"X`11@pP1!.Oe= L-S) ReVY+VV+zebYY-eܲpY,].eYb`0kE2dƬ/1 (bm.kEgiVZ; `RkYجv6뭽͆ku) p-E8L] OM|sN.S-@5  1` %>0]V`:A!kD>6!rhA" "$x = [S ! tFA@U:k`eYYGYN%Qx9mwբoMTmU}oeZmvp`wX;Pk9Zv45FkSl5nko-nV\ ux%zl]{u4<VJٶ=Unu`&0Imݥ }H1" f H { ʚ0/@*,:A@$ `Ft010f&@ v%\n@,p)^ 1 &G{` BR5@ p 8$rQ-Ѐ(+mis H@:q 8J``ˀJ@- `h [)݁ 8.76`t@IqZ=Y:< xK2  |M=8N3q@DPHG% n!J]@-jL8`` CvU{ 0 d @)  y Js88 PJ40F?H@6  DBI@%H@` t x`ZX(H4 Y2.d nVOP`d=`4t0&3V 3 a@` xCT`8ՕN+  H\r?[;u M 1P`h^>  ۀ3 ( 9GtL.|΀(0T.'p1)( D|$ Dzw@# r |+\ cp`F k l @H,A,@ €O! Hi`P,NOf,:IgS6 H0K%"! P(Py0U@@F 0x:@mhv@`TJ!@JTM@ pi"?`4*'ϗ@ xH*U+ `0H6O}@` 0 0X P]|@@h@: !0n[wY8@` (fێ/@8X|i+60,X{6@ Pr%0dZx#@P H V@-  jJX 0P  `2E`p@/ plfӀ p,`>$P 8^% ` <8.@%0xl/ Fg FC\@=@ƀb@ `Sb^ `F-H9~+%| _+,Ɨ|I&_ʗ|i6AW}D_/e:}#P_ԗkj}Qk]߯ow;(}iߵo}y޷ ~ _įuB~%;ʯ<_/ ~Y$W ~_/ G_ pn_Lr_/Uݿ_/`0V3ܯPg7pL6U ,ۀq:w[G$ OW,.` 6|c28 \Xo8|@0`\>'Gp$x<G0`N  I`ntd:=,yu&+A wq`ukS(Tf KYJc`O(3|$c2h5 H D'0g4B3XJ6#'(@@$ ?hH=,) DA(KL&~r"_U< Ò@Sb >`7K i9<&Ċ1`p!(+i2")"&Dl)XJ" uD4LFJ@$GG(1̇iCbqf%faK)Y3 @$qщLIḅ L"!f3Hǀ<& ! H7~I0W2G1E@fb8MDSXb)b@`#Gd*'T-_U/10!yv_1E&|ֻ?p]D>*~O Ũj1@NR rЄ4(d$"DI8vE@V+t8IX*'ɻ^lWa` I<@`d 8Ik?&lH6$=\@9XWw,Ό;@&Pʰ֒1@$! :ŀ3K  jQ=3 b$%0"aI ϐ+b$#@Z%!HI*٘I#lbDp)Y0$$ j,7A$= 5.JO38lLŌ" 3:=%2`HaO6&bEIdЎ;@ V['b1PS$d$"u,7`JR:H8'<>G< w0>PK N,IXLl4|Kj%EI0ȓdl Ef}3x qm 9܇'dsg 5 'cՄBx+ɑZﱙ ^% ˯E@2 <4U.+ VC}@6`Y4].@S!j t@-``RZԸh|U'j䠛 p\W6` `;2 @ Php. 3׀"-)PdD5`':@P 0[s`X=ɊVj-Hf$.b iRsl48& #;f@ q)(Bj$@p"`,t Yh[pd; P|7 lx!7LH<%< ;8v0pH{+XV*+ϡ*W,Vv;qt]HO2\1LgCJ8 hJgHg#Y}-|BV$+XS!n=x:MtW$|6U1L, C@#@XW Xp&t͆XP@r@ P(̀}  l&Q;ʿ{!S,` 8ܑN NC@4`D@#k@  @VD@.@P P:` %0GKT` )8R& @ &@ ~mCB@@ـR x ^qH o Ay9#Hd?*derByOs(C-Eb`Q)CJ\F \6@ۋ 7H=`38)GRZ43Pf@;  \t4 P1@N7c~^9"Ȍ1ۘPl7 7 ՙ_fb ^pG>l] ` 3]fy,PƬyA s P2p3 fL\f7 u0D2$@$~H @($TT@`=! mf@G3OCH3 1+#s4͐汐 `fM3 jV5Jͧf$@yj~5ǚg͵[sq[8 `l1`/eni4SB6լjv2fY3y"n2 4@hk6;!v`\oF63<!b0fl4;ͅf9Ѭa4HҌm$@qr)%7p(I!s @rv1?|f3J@ fa4Ag2Ylt~P[yPpP#gѩ8Ș *9 (4f>!@9ng `,;e̮fu.$u,͘f"@q&ACy x(&a  d ѮYh f%39\:#VyV_`}gs`<=Sk4{y t<,uf6ϔ곅q| Z%3<}:殳 P48@1yXph{~Ca6̬=.fL}@)&@=eV 3`zn]t?v<4L@Og&ƌ<^P\ =מo ,}@WK M {B@dE/4Y zVb6ỳBá_sy E >Y=C.t0>g3v}.:¸UF4:@Owp0(ANhf:LfDӞѐh.)sf?6h0 Ek}htym:;;TsN=ϠYN"Zm~DА33 ]9_i2`,Dђg/99GI4@ |hR;z G#{3=<_Og>;D_b)s8ɬh1ۡAx:-Eǡтh3!@DB88h[: M~Cˣ)іh3&Z͉H/Ph4. }GϣSUt+EC дuPz].J)Ѿh30@%:ry J=h|F6mz(-Go;r@hRaq#;oQcaXWsyl֣C! K@f` *OŜ, |%q*{xJl*@ 4_` gȹΤpXw. p0xxnpHVgFp x   ֨P)Q8 p jQ! Igҹh)z뜓C[=iO4PzP[ ҔhZ)fJâβhZ*͍P ^tӼF{Ԏh2ZmvFϨ}jit[ZHu"tz묗Cch*qGa ԡltd|0 +YP^;b^쵸aq7|ļLg Fh4@ nn0@e@ pBLpN\}abr`h>W!KvAk,5Lţ(8 Pͳ LX @=@a^/ @UWuvpi9X(0Aף5|1e<X`:V}48]X= 2s ]5pWVcDYmkVSiiuZ qVcx5_NWcճj),+` 1 juWyVjz5]VOz[mX6W5ºpt\_@uĚWMvWezWk5ɺ[ X9I̬5k5:YDjju\-X{OjZic.|աĺ]ݵ.YV0z_ Z&kV`=fX!ښ]n[˫p뼴:k Z߭_kuؚ꺲^Zѭ袳@ 0Z?1oj[oEjul\-_& t֟k5Ztu&]ϭ!phm\'aH6k ]zq>] o֪uxzJs۳b ])Y5q.YG Hu `Lngfn_5kt6\|Y5Z 46Ե4vk{o-V`ϯ|]V4_֨답zu-^e胁px׻PԂ͸Fa_%kuu=^7l 6 {zî^kڃʹG 4ęl0Uﯡk v:qݻ`3b(Z~ʹ$K2v;Ncl5Ӛaxck9 m6`]c"@NmHx86cM~bkCl*ɞZS؃l'v^cֲku a֢l46)~ /yve6ޚdž]3y&\{ٟlA6,-f߱5 m{v'؁lJﺒ=ʶfk3/`eYu3s g >lC5۔&6#)z&eKs30rFdLo6 -g mt" 7u ڼl8/gmѶd۱ٵv`ph!mH,>a_/Z'cǴ#3JtIFi+<~fٔ&Mۤ=iײkw]NhUme5m|Tb[ִk'@FPaFk{kjvQۭ}fZPٮ Fh v ; \5mr^[kYګlS[]؎lDz+lv640Ui 0h~lS l6Xۜ׶l%Am6=z=m׶Gf# [l۳ٟ^{Ҿbplun;-Ֆl<6<{ }=rLmgvq Vk[۔ml6l}~D3+[}ggV.h@ocm}mnPlv>[^YoG6q{Ԧd' npU#ڇm6;=ֆ]7l[}>igm$]Fn#۾m7pi}(m"n{e͏F[:n {]qc"t7ۥ-oSkܼv)ۡ6[3 3zkifLۨmV7[]u/s {"]hfqE TZnbv{~mgm>7?`iRwl桅*94;νV@\ t{ v lj{p.u fg\8VL'tS; 4uÈ@ްM3Stj*OSԁ2P>T'լfG5nx?-rL0zͩTAjRz]^Us۶j6 |0RG h\m;6WބѪw6`s wۼm&{gրꢁÚz>﬷ۻz˪J M~Y!pw|epo7%Z]v3aNk]|Cޅ{Vwsah1R`{ O߄o÷nMw3Pmt}[kԷ^|טGs-|޸mfk縳ݰTvM6~%k{|?53;]=|1ߩo7=~}wd(M~߾5o9}v~3M~ۿ;vfk~?wgZi$p7Wݽol;t6аpڷ~wn6bdA}FGo9{~mb/i.v | ^~,pt6ڍ]3x _ow;~~6#ۑ;ķgZsR{׿e&Ox ςov@{v'p8|lNx*o /lv;;|g É4p#8 ײٲe6N?߻p7 ~SIpp\hǸ?Qw7 'iSVm۶`6mQ8;{x|ݭ WjZ1 Ge?!pIx4 I덶Y!υS4[ מk׵1ph*\/{v` /ĉJ8r77$8GN5-k~xf;?÷MqŷJ].mQ۪mv )Ý8n' ol7Z&^nk[xI_?ś+s)\#6%8c = FRonF\)nGk\q{{Ƌgq/ό@D8m[, _ůXwa|2^_/q}8>MBm.VG{{߸h^ O)n0|5noq;\5qx-wwY}pxx|]^=qw|ҜWcn;[q8*Gi򶸁:w+wu;w03gEw~\-W}6Qr 8Jȯ)r<;nuax>|ǍVu Lp ?#W۲nov||IՖȟk!p99n˼БrOoL Ŵ 15Եatu2ͦLd3 t7@h2>!Ԁ˖C! ~8@,@z`P8l 08%`D `(6z  rCN ȫHCM@%UQXl3@q 8,63"L:%<@"\ ]ā?;@ rjɀc@\H4w1(ڤtP d@#P8Qt>@/ f'}XGO`@2>,?wq\X''gbF<(msǹFmXStgybZ1 NLy`l2p<ކs'PMd)O(z鸜3MD9Du&@ XL:P4K@,`0n@O2J@ \-gF@1 R@@@ 4^O<@`䳔0hQ,  T 0D|0j ( 0Ns9@jN5WXͱZck6hs9 m6v]|o sq80C.|HnY-Zs?`t*qYwaun4>A[Կs,cn2טIfu; DzymH2G3Tf+39e2b t̜f>Ϭ̣8Y\g3{f(,h&4{4gj s?㫳fnYLj65ͮfylkn5Qgx3\uq>:_ζt3.,ң/yo5悳YpN7;ӹh:<]\lFLWg3h8]o6t:2Ng8Ey Oc5 z*x^6"g3LU9Xflzyli}?j3繵yv7ۥӳ5mM/9p:J]Mg+3/p9"R_:#13Q=<\Qvuu:oG#3Zt3YV h@?CЫg8\0xg.:<@ iP 5 1)*i+i v?Mu$=x?+E7=eT buzD Wl7@ T3+b뷺fnK#mu `dfgƭ e̥gnZ yCcDۇzڼ[GȮe)CS]։tl^ϰ>fCu$lFWBZT<+(ub4`W-KϻfЀ~q{=`ǰ^ 3{SY'F ~u;rLv6φjZ$[ًՠw -Y'7Th[z.UO(ojZh4 Ǝ:7=v?sWiK(;a}ޖ>3Ƴg+ .ivuԺ}Zֹa$s:m.:W.h@Lc2-̒j7@|̾Qάgv+:f:` `o+B׳y>W/-Gb7N{vE̟jlyP $@^t_]|Ω/V#df;ٹN`/UHZRi0e;׳z>mc Oa ${Y^pvY?֎Wg]<D9fz:NήW!dfҳfIhhvĀԮq78t_XoE/V0o;u}@C[g'~SsW/n,s[ƿ-j|440"CuiI}i:^2 4 uoۿhlڮuK;}iz/C]wTuk>[ox#2~fvCaTԋ0R[Mu;g] i(ۣD:5a>l7ohh}Lo};ʬvvvN;fWq4^u"m'FsI:}~Dwks{c=.p@l{蝲Nusqw;dsY uC]_j~{Eߡh6q1Vg6qnz_zwmD;0hy̆jҺelgٷfht=}ccG.@鹵~0`Eډn.9wqвz܀B_׵̂vDFz5x/}>[WϱwѺ%Ǽ#֩+hu4Ո]&F[%vK<7 ^X߭ת[?x=L߻/ς%us]FmSlj]XDOe;%Nd_Go xݰCQ2w=pDx.||=S[7u]ܮе/Bwݺ7S?(PXpTסh"m`_4}v]]L=wQx<.2]p}h;ѽ_=\G{qf{LP TapF7;q\z,o~/++QO?ݕn~)[2va9~cG֭xWd=Ãt< ϩE w4+Z{+=u|YoC,H;Y]ֹGcI3VmVM ~Bj{^v 6;~/?wxPN+Nfsv$|}n/VHu >Qݢtj8Ů7v^{&<B~5ovI&^i`Vإ[lȺn~͖7{bLϻKAVEW0%(\_lHeM ?N!=R )gxx鞎{ i*=ߠ-jG4[>nhC3=~5}8h|{T/@13:##LPycz\ӳ{yzѺӼ çwMϽ5?_afh9@$m Z߾z v@~ҕ;YE.kMn|>K܏z>o0l;(n8m?0o{}W=u:ŽN֫R:@cgfwN}m?Ûnwo=lе3;όwĻ+RXܽz.z/DxxCjbtL#؅{ɂfzΰ? w7`c[ؕ L{lW?zȷ|b~zI ldz޽0?Nr͢wĹS͘ǫsy>>/O皍f|A~ !g8{o͓1l _G_&}ky-gֻV3 H%>~RHh3<~w?0;~>\<ξ [z~{h/zgH x{ꌱ; fh^mO=K%z ;~Pc֢:l垤ٙ(v=|@!NًNzs v8֪k;o{kI`3x}CZnoWG׵z';7C^z-kH5LK+CR_{o'u;^ T4!v?~jdT% ROw ~,zϱ?=uP>_gt s}^|m'ұIϧST~zgk/>_t/ 3;ސI>1Zǎ_> _;L}^r\Əg}8b/{(\~XO_ywS9P}z sOpFn7?dx {ΰg`߻t~>7^|Ư+G5rP Oէa8ӆ__65>8-Ki<| gk=n Ww {zov@]tv3i}Ԯ.CKYٽ>ڍgc<^t? xm>'wS ;-_귽>O'|=xWG+?&31:u// 2=^_,Zz`~✜'<h=:-П(( /s:~}֫Ηh;u:!-x?|z޽waֳ~ 1xEcدuLzO<X? &3=ng^Ev)G1/{ ?]b֯U>z>[%޼o+z"|^.!ʻ{z1G8O~JPkgqtY\Vmt pMH.%wn$v7KGp9z=Sw+g`Rc-]:\K4|:jPo[`{iYyn7}Qss]~՟LWw<1H6oEudU1 OuNǻsDǨ39tsYݧdN9g~qUR7Ae==>uUk~zϙV/@YSuqUϪ)d4jDT/2C-QfFZLHF+tZ=ݣ^ow_J?}3|?jP783UO~_w[:oo}?dԃ:߻TofkÌv`/xytH{씦RJEuƴn g0HHϘ8f$}7=t?.2gүYNJwwK13*|f^[.3,gL@<ӻͩm?翗c!&¬lOa 3Leio2'f 3ߘ8ko~c^/#:?QO:O~'uB~~lL0V}?juh~!i#icuptL6g?jJhfE'jOhh+j8jh~~u_@(egKhNi!h|i%}~v~g`muCouqu su)fdhzungf/Hg{iz2ls~of&;=uXw~kmXlh7juil{ljhh5f"6~{gx~tG~2pUT{Mf@E|y~Z{y\{yUO~c{d{$g}{wNxjjPv}Livrvs#xUfLfxOzD|~y+yyvx.fJt y{L}uy[{~5s0f{7|zxy{|{g|uZf{z}{vej}vjGfSgvrhvAxw=UOf-4m9a{c{u?Y+|^z]}W}nru<}[}fz Oz{owwGxmXxz}N~aAoc$}>{x}fwwx-}4fgzTw7jWlI)yxyg,w7|^wwDowlhX~+m{b|{u| }0v|jhfx~}~~i  hti/%ЀwKӀfwՀ+hrt%4y倧1f뀳u/js=onx{wfpU~ ymo․4 >L})vfshzd_jZy-TGyt?LsaoAr1fOf<tt whGftNf[UftgftafcfthfCjf#fxfff*hP|[g~~~fuf)uY-/6t܁Qf/䁵~~ցfxbhuvP|ygUu~~~^qf-L?j+i>p-i j/iripMCh.1Mh(jOiRh5k75uS)+y*`hhhhLJgy.fP~&>@N EG~Kr"zuQw`ftsY[4cPuvW}awgt|\{fvxB}wTWwhEkwKyHo? qw\wvu*hhh)vljlnp9) DPfuBfFXx9y#va? hLzuLFozv}>ziyUf:{BzBx wap)wu>a>x}}%{Qzwuz{ĀCz}|gsVw9~&yOx|{x5u~w~Vzv퀴ixesdugxyh;{1 }N{ V߀W{y U>f&vwۀހyCQgcM~yvug3ywSySghSg?3}vvrnTW~}zpymixvx,hg}wLhxUNhmw,wӂq~>zj\u{{n.hxj~jvuy܀fy=_|grxv{<~pw{}whhkyL~wOpKh 6}i}y'xm}>wXwn2og~xJ{hMgkiwgy4u,wlv1hIm_v }vl oxu5~dg]zkl|}ph:uf Jkp jAx5l|xgh{ki|wvnu(1>jz3zˀuwv~K؂gq{Uuy~txvgte~%~,w0h}uhx"gi ukwymvi\?3z(22z3h}uJ/xM`g3y}a|#w)y"|g/O|+}Rzg{uz?W~C?R%gDW.fYGf[$ivfzxx=}.hwfe|m^if}hMjm||k~fxfettTkxt#foQQ@$0I+fltJf}ffh.ih1i6s=Lf;titZfÁtȁʁtÁ΁ftс9Ӂ+jN{ځށtg&-=kc~f~y<t+fh<yhuunZ u\Cu^&+amihjEn$+9s?j*h%:0h~piOzn68p:N} SnhfuiH2H~JpuLBOP>@ j j hVOɄ`fo]o]ĄvjBjjxfmx]+n%PDy|n}U}$xDyEyy}@{̓?xmuʄt"qRG߄\yu؀=U~\fx^ihU yf~XzsyhA(fH6Jy>7x h݀s$y _{Vy*^x|U0h]u Xwlwx|; NvB%f Gfgxoyh~{gh}x{u{f7wz2llfh^{R{0P2"y~ yw{h5fvUgwȃ}68~w{w?p{YwljHol?Zfw xK{Y~w:fvg$|4uOyEq.]z(ׁ>yg"}lg_fg{Cfwvw|-ӅxwhͅႦzƀ~<{>}fԄw"QhovSzv`ax&xWgg@vvҀ~F|f.~fth4x%8<uwwsx2o {iw }yfym0wsqestC35y7JwBwg~{|<|vU~QwaGh9gg}qwÀovg}f#ryDydwÆxhvqf\t&|xfz g.qTy?|PvX׃~e.hrRvrwguz:xKyjSAzz\ x_wivEFu?IB~8h[l(n!vjuuzek~fwSyI^}KnDyd}U"Q 1fR(uR#6z92|M~5|x8Avki;u>HoC@x{M| O|^r}MO>}h~\Xy|~f^*jEvxcy_yujhl[.,moy r|TW zKy"j%G')y-+#Vc d.+otr68:>jhjAiEGtKNV1āƁlfVXZЁs Ձȇq eM~l#5*tN{+|/~UO؁ ہ,򁒄 gcu[5ҁ "juu v&j3ׇ,j3"duoӁ)hx:{'uiFᆥ~GjĄ9guɄ=nǘMtфu)gj ?i eyuڄ|uHg;m_{uM-hj3xfFi=vuduqgnnf t7M|ydgc9u2feu~fuRjz{vvfmzv~Ug0lu}}yxv"ufhzuyc~uu}{uwvBzIpxF~i8vixx4fWVj~wPj.h؈h,wp{{T~Xv{6{cz~|mSh;}%)xjg^w+jv|aw omizÆu_f4=~z1yx{Ղj9JBx=JawɈfw%=eU!wG6l{y/|n~co}nDyx}xˈt9?R{A݁k/\9UO}ɀujzh }hj}fyu8 ynf|w{-`xz~"}!Avzv%}Uzohh }ojI{iYaw~Ki,wx1vgw@iu]vv!bwy{؄uHi{ ~,~}Syb|Dj>|}o~7jvj ovrf-g ygdr}a}f<}Qxuz{}'4uR~\N~PjpEx_bwud|ujv%j u?ghyȈr4xh%ىTxr@vvD|ThЂn~f߇aw |zhh{\hyk΀Ȃ\9GwN{Oy|yh4fvuu w79\bj13iCzz%y`(҂ 02gDiS7~gj} w9|8h]h |p3uEg(ɈÉDv}jhxCz"{${Yv}y|{g0~uvf|BfɈ\z;܅}|p|O ̆]0h׉|w|tw߉0ip~YjF;u +=/iulG=^qyaqfDyp|܄Vii~@uhh~G3EqU@(~,~fjF{Zfj0lfjv>yEGd눥{y6ukQ;rhqto,\Vaf#eiK|t~t8\"o17/f<?f$j})j`j tI.ftPxfTǁÁẂtzf\"'t|ugvqmf}y{+hjJwc|rx|/~Z}guvxPiyKtn`hb`R6xp#㋽zw`|z6v,mۊLhzy|e} l|nhzd1gmGQ}Z. )mho/yt~6|u4jphzH`Qq,m?t ~luEg(ńwUfmawmg/uKf+Y-/,2SvÃuvh8zhugtBfՂfzuywpڀ~Pf+vY{Fk96-gf j vQ􊬇6GozU '-u5TgW /"}BfxmDMxhhpgry9wx|[guBf͋3:z%}j9 } ogh};$C$xp?Uvnwz!v݇Ekj 3hjv8hR>|Cv{|󊈊v bjjvhXfvhhNN{䊠Hg] f| szew8~C5fw~n Hz8hvvvxww0zrgŇvLJ>ylhzp<>y"kZTarV%3\TJs6\ o*t-t?f5j,w`i;J?LAtQEtŁtHJȁ OrahiI.*h[f]rT,ZfdQ~pI6t&^wtKX|}~Wgg~%u%jJ)CMbhAjjvOz8h|wk\fxxpwg76Gi?jߋcCg:?BU4jy(܄vkpE`$gB+hjzwÇ{Sz3lxvoyډ_x\iXxOpw~fiyjy{zwxxlvx䂔} o9x^!u) Rn kftg~+>jB Ԍscw {TW>Bw{zhLi8h~z0hlD|,wUzx|1WSg>x1rxgՂ{Ggx`iu}w숯gvaw~ iR~v /~ly#F~8u vՂHw4x<|}|uԍ%y*?fSz|{|7|xHw/w{Gg^xfY~u؂SgՂ0hSgK<}uz+w)vl5~u}g1~lvxgyJkn_ĂHzwy{muxR~}Âv3y@~wP=njnrl# rrhzȉ]vԇ{0}y[.-70Qiy"xY#9oyxFIc"-\y& bjR~gx|5gB|iЈ|֍|z%}?fyh|wŃuxUAfXg7j{vgux^xBw?fefzvwDwj݂?fu+hxvvwd$~=vv҈Əxvd|tv|n:l|ErfzGrhz&$xpzpj>PB>yzz8>ȉl|rdzE?fSvU~v4uzwߌōhwrxzuĆw>v{vXj،~Y{ZwP~}{khx?f5i{˅myWVOyuh|tcw5u>un{_|{w}{}j>a}vv}hvwzuw?fxyxxySgPh=oŎ9|!}>ލ~jv o)EgfEg{Qw<{|vz>f0iLawFz`gՋ |{-}f4{iw{ vuȃgx oaUw>g4lǏ{Ӄ(j{rl|yxU|v}?fbCP{ a4ӌ^{k;x>ykvtmu.h .2zE3x%zwuv[@.uuJwYzwkWzvq|w#{x-z|b|Fy&jvw~|‹#ꃟ?fʐj{4vӈ|pvuыl{w#vh3x"v|ujSc>|ԅ`wg 6{ D͆K)|0|)|3|5|rxwvz7v1EH DNxoOyu|Shq{>5|{yowVwfXznTWR~}}gy-fwdpwze|vow?puBv$whIywxvCEybuuywz/y>zSv~~xw:|.hZxBzJψˈwyy}ZyW5wՀ$zhMxw}'v^xa3ThGw7|9N\z5v&z{đw+u{vYw8#`||j#/}|},wvwЏw|e؏gxJv!H4u[둾vEu|6wވ!}vyi{w{؏yxޏ_}8}Snhzeh{̉uR~>g@"w1[SwuGrUy?fehqLy}Տ"|wD5*}uJvj!׊jz(k>jFov|WJxl{w7|ɑzyG4uVXr؏ {4u_Nf"g}3z{fя*}@a|ȍv.x>uݏ6}rz$x|z_}A ˂,zuuz*jf|v4uw{g\hCQ|BzuLhh>ڌ:v+yÎhӈx{7ׂvwD;v}АV~@w͋ڏd{cfAツu}yzYvʏh8~_yfzl]~cfhއ|vf{ zawv{va؏uww{'yvUgkhӈƃ|2oXw ~CvhAzkyՈ|l{/xیMwkUw~Rz#v5lu0 vgvz~?{zS|^x䃆j铼vij!~{{[zugȐ:i h`Cy]MkINĄg-h%΄DRu}AjGf hDŽE&Qف4q-j9;=!@}B'E svMӁZ~nfjiZtu6wy>"<&Du)o+ */S~Io2NOJ7<:uAX(QWBVyX}O}Nh%4V|NÎXgYzKh;l_nxl;6Im煗d(7"VyYˆvuY~mgz[݆{l#G~ˀ~?{vxv_fivzow"v~|wmw>~\xzvv}z֓}u>0ӌ+o܄Sg}zhpRu\y^yX}lrZ}Fy?~A~"vSFxwxވ~~`SYSg_g4fĒ6{V~f8ٍ&x{~Oyxy|xmiF }wN zx{yx.hw xލ6{i>w{z{|ozsiڍ"wCvuQvgx4hz˂%AgxnvmihhQqOp&j}uW|Kv}‘~fyyvǕrWlVwy"iTWwUwzMFu5ԅwIx ij|W~֖>vxlrs>BzU6y}xw{l~}}x`={օ͕v awy&Q(cBwxAox{L|UÓhwa:"w_wk~{֊aw˂(Ɋ>3zPnRxzSf҇gepruB8XwR~ՖזyÀX~˂jьfLx-}}-xSudfz܉}Ė'hhPF}a|y΋~̉ /}nl[Eg^8~|wmB}awR~vjvJ{x~%wsm׀NeaMHe-b{yqmzOS~rTx{}?f}{rw'z4uD:v}fLЌI׌k}OyCGwćyx}f%S̑Yłu)g(˂u{xV~'x\5d`~ꐺvHyh$u{J4u~{xjمvEmqmE?g|y8kZlFrv7XzJ-jhϐh\zDhsC((9fWl m<}ffRX{h΍{Iuvxݐ̓Pvutgw7wlvgo{gvEHs[.Nxp |BY"h%˗'fmg ka j\g\igg\me&uuRu oM{}ThlfhuxYjvuv4u{vjE|ihvՇnǃ0hΗƑwhߒ8'{n{Ug)Ɨp*tc i6׌ۗ4Gob&wjڗˑ~V }W8fxzvLhć'vv^vezx˂OQzDyɘ}x{ԅ€טw٘4uԗ&jv|~@zg%p0ljvvowv3hyvozq!{ z&gw>˂Hc}.!:vˉ}ivxRhv}ih xBژ%>b4u~ݘtxz㘱|xxx}}m!v}df,wĖ%5kiz|ےuM"9||օbuExwzx iB_vИ,mTw nX~avQwmh(ވv˂H{+Dfh-ifR킪92zCovo4fژvވߗu}㗜|}Go_ꔍgkz(*T}@ijXxu\Ė7|똊V wevbq 7R9>fJvĖؐf݉|5wBf˃{ev|gzhwz술znoGvyxԉwcwwgxv4z|:ʔ|v}&b|'<Ցu˕Y'jv_|y"̏}jv՘{~~g(cPSl♸j@晄󔀍75?lܙߙVC[FC 5H3:b 5RBYD] #uL33')h+$3cJh'tI@۔Fޔ!9!)Db\}G`]5LDI/f$Z-n`㚨7ۙSUkYwK#12ߚ?j i9%&g0 ~t|2\?+eP UUKgul ʚ,uiuʉjY{IkiĖݓ|x0hu~fІxȑwh>w>S{Nd,i{@ÎNrv:{zhuywEwC;fڐ}fǂK|ď:~u뒧(zEœx|h;敹`p`wi~Eg~Ufx^n{j9 {ݓuwGkjhu͖Nx8~ᕬaw&wh~~s Nybjsz|zAw}u!7+0 qÛv+qȗWٛ2vPw3w֖9ԋ"'Sgg̖x*vzhuguCzxw{ӕg{7d|o6vu{IFiǛHuzv<*Ml-oUgKhF >ymT^t hhW5itbIjNۋ}og/ߛԅ/F+hgkx[x8څ=k߅-ko1k<ؙ`BegAs䙵tvx>VSg)iБfu6g/_Ra.fZk$#w9m\w\yg+vkhz@㊧uXwgÅ!whwwuw!тi>ejBW9cK}Xlw~Oj>>}EAfj؅9ʒfcm 4kT WtmvuLi{E֖`y rxx7jzÎ{i˜ɜjykxv}sv|awz;AMvUy0kJQwψtvvgzyzz|pwi7cI& vh wdh)y3XfË˂(}!oyw7jwI84fo ޛ kz-xɗZN{wqu}|(vGw(ew9vN_ņgKmS S+hy;xnxu~w8w"`쉞gH}Swu wxm}}xU>fIyopkՂQC. 䛶V2L })mfofЛ .՛n72ٛ5WSgBl?w5~g\ȖiYbyx퀋#w2wwu˂ǝyʔw*urxĝ v\wj@H囷87sQXw=|\+ߝ0XBQyqyooDQTKf2u퀻iwWߍvehhۘKxwXf}vΝ1~u2w8zz"v)v"ʑwg/wf{w'/ˋ\0}bF֝~f,}0u1y9o2>gwqpuvRXm Gop=SgSg􌥃EkƕƊ⍰gm>c3M~K"ɒ_}phzd&pm0ћ2ԛ9:R\k.hjge 9tfwGL薁˚mw{v|;7F֗Í!*,q}c{I*қOۜyy)ۛEzRhzVvjawShxvv}7{ zZh x6,zuuG.v͌f邯rf;+2{f!?fyOxvӜa՜ml|y2|iyڙQnpᜯsGuUg#u wY|vƕJZvŜQl(x4hbw{|#ymiݒL v6:u1 w˝j9vAgxqvxEvchaUgizfgWli8hxLx΃Ҟ?}%w҃En̈zzrxzqwliw|)vbjjevyuwej!Au9ÙjK}h}g`uuxUKfxgx=Wz|ўzw!<Ð.~v=0hTÎxYPhmvV~Ŏ@xww4uß@ Ɵrȟ 朸}z:ul6>xn\4Aojzwh/Āw؂7zutb~4u{xizY5~ i} )|چ mxuTvESeezekG #;}siCvyސv:͖-hh%w{v.rэɖR5zvlC>bUygx.!ӃrjVnH .hGY}x6zu9Vg<x\ioxUuÎVSgfzcu{vigk=ng)Z7py؛8ń~fUHy } TW}x ih͋Kjwlv|?ҕvhqvM~K:wQ jm{wv|⍘hQS~uWljdfv~fpllEgtzHwwhwjZfŏyxŠ{{׆Xy׏φIyy~z hHLyLu~Kku=|_q܏X$xtzwx!{g$rtzɉ򆝉v5m`w)+ԐDz|uyᠹw{hhh&vle;0h&頯hǏW#mG i0hBLujxfum.zw֕Ctzu }NZfw-EAvFv5{qjvЕǏAq\Pw˂(nŜ)yiufewxwĆiуO\~uOpzȀ񛿖3@j׌v w4fjnSgR1uCxNu#{'&y?8u|}zc3ohh\,wf"8hg̟ϟPo4fg?fSo̝uww9MՍw<~x С뇝j{]օbykza|OK.zMΏ|wv}֑M~ɞ} vuߍru[yIfMfk{urx}nwhw\TWݓȍ{}hhț|sjv)vȡUg[%eyw˂g{v(wu1g awAo|f9vlivT<ġ[Az~}`dawСwNѡvg^xwր/~.(jjX䂧.gm#wvGo'zɡgvz y >"A?3hAxyh8x ==n_Sxv͟-CxUywņI}kyv({_w x }}~i[ iC|wwwa xe|gPi/{ޖ%0goqPvOvyyax .~{ڈٌ٢v˂Kvk5ޘ|C#h>@0hP(Ljh;nhjwԡuwxxĠk@xzÐNf¢Ţ{o8w"k|2 !Z/\Վ׎E!ĚƚȚPyʀov͚]8ДM펣ՔԚה֚t́ۚ 65q} oݚ%^Ly nYݚ/\Jl6i}vJ"t~6t~ffx3h{!yzs6"t$s&bu=u* ?j:y1fum̈́azfg(:@hYPA?Hg?B"&x2f{vg|ƣA<$gPљuAϣ;; x0yECif1hfxUL,wfGf٣p>R:k4j1x܄`@yofɣɣyụ~fJңB"̀6"]zRK_f mZfkz磵̀>jvCxxȆ>wCQ]mhzjm~C{[lQjXw(gcw_v~xgzţtg|S}(ҊңԣoFrLңΣ[.֞uzYңf(jwݞ^uStxxU-y`?fr:ڣxxUv+h&8Cj:;$)-i6oIT£̒wrg2vg[}5f7Σ]zdk^w⢧wu'V(}6i9YaJ7zR4)B)3-+j p£Ӓ1g|d}z2f7Wңjnbfң.Cfh=z.]zNu(nwCOdfjvKu{ւ#h>UW-[>J#ig_njM]rf7rf8,q݄zw>zˣD$gF褒}rx]zfgnwEqvĤBfMwҗCeأC_gxUGxhxUxCڤ 6(6{j1M6o `1|hꤣvgx}7DңExUZ @j{hhhwgikmzgjE;Ɔihujz&V~>xjj{I-=hd~y0}Ay-.{:jȆnuk+vJ7)9:R#R|_pwU|g@+{ңH|MңѣhuuCYQj]zTxU!zyBYzx]z@G^ggTCH|K|apguxgsRA磼v Li%jwSugj(gxYjYuPgn|m|p|p$g ɔ|}gx]z iy~uФ}u7w3hiM :%M?3`]A£w|ǣ~f} qv ~zߓ}=xUץmڥ3:)\-9 *Eˣta;}v(vGfR9*p\˥6Ӥ8hSCgSvuۣ]huX~Iymw%4xi܋0izSIv4o?30"Y-:}'g=}gq 륰v1}ny'iPnhl.vQӀANHmu~o7f |kʔhb}_C(A v,lđ|cDוR}M6O;]zyyw]zyC\jAg>]zVuugx^ȍy{~{|{{ʔ/#}u-]z/]Hv iң[.?jj tSOSyz y!uI2xg|ljShj7v]va̦*צԣ£]EkI| N$gO.Xٝgvt]^ywi)k0hzM-ވ}.fGxEl~\x+|tcfB)%`ʼn ǣ{OxUnPi7Ӗg؄ԈrnuӤ*ӢѦ\>p(AhʞfMn٦9>@5 .zOL]vz |:f!*o9ݕk} J?mwݦ͙u8HGolhi3ffgvjOS~n*&9qu}ߦx"疽y.lib>j9-wm9r~؏uym*"`uh| u]ylrxQevv;ff&CuwWjuuh#x{u~fw~IuBh]~"pk~$g+QBYggzwYxgMfdfx=3s{vxhUoJog17ރkCE&_n vg2u_nnɥ98V~}uT/KoȓwwzPͧҢnЧihrxS30l5—Aw-"FwգBo>u|yh"z䧘-?36hAo_gaiǞ&8Eg`|醄6_ʣ7~ax h {{w{w|hƧ!}Ƥ93(إ B)/"iZ)t/7B Cw|{}u$Oymp~?p3h-Ċ0ej:`]090ㆭ4ܨOvƥm o6h3Pyjywhw_vhzf_vvswEQUר1gʇy$g]znw|8 wvrxbvfOnliEDCfyey]|7jwHx5ܥߥe8Y&&{|*L $gtZ#0iF)}rx%ylbqhn&>]}]@$gިv@Ez}jy j}(n9wpgh#z~Yvg\^~fGqlx.wxJgyw;{(yԕ3јJxUgxAʏf7ܥ&+?3/"Bt>]o.brƦ+ gz;m\iAy>uY|/ȩ秡1"/p4ۨ0נabSw$~xwvWV'jfvx/"ܥ%?3 47ʥK5zYjtۣgzjVwާxU!)"ѣ+7ww ?9-O 2~π}m NԆңZw6hʦ ͦCéOwhhHyGxyhjNcgMw"A[x%yjڛsz\>Ӫͣrg_z疗x|3Jjԥ |ͨ<4oea2-%m⥁6m4~3٪xmmw>pmIlAuk3C{Y"GϪɣf^8PSf$jvjv |̨K UJ'Q3SfuKI4ѩ~f/]zI%tmk^ixiYV4WgZ8ag7jDg\:؏luu!w}y(xoũUW,%2V;$B̪&Ъ Q~fĥ 1hmj!|D| z0Ӥ {9fk꣙杜jؠݠ @evͫC;C?q3 PxN}tŅhҤ磒$Ϩ4AjX'ϫȣҩ`]z桩9wxIFʠ)G8z iy(ۥ@3V~ϫ7 oxungo@mB,wF gIӦwLNȪhQ,jrt{*fcjGҎ@03Fs45K M/գ4uimS1єCZȁGڔ_ܔyf_ܚ-4~vwg~c}ڬ}}`S|Jxu z|zQf*}܌e|])vФZ\vsGu]{9k+iNvˉvvh{Ǝ ~4uփ=vvygO|/։u> x0i<}ɉ|z։ >_vOy.xA|#(nOyBwN u>h,ggx.zQu*hUO~yvzȭS曬KXN|Qv؂<%zj[~M~n ~|wK|zwOyD_x+[zzpj +yBYxxuwOym-v]O!)(0hm>ŬT#F H*#َZԬ ֬2`y3j^jHT>V;ӔY[BDٚHMNf^]1~4NIOc 隿2 u\f u#225 _>ۮ6Jbh{iD4O6OpAn~Gw~gSЪ6vyV/.hҗv.hkx=/5kQF;gxmxlujL+ty:z!zČ,ozj|ję2oOzuj'j9TQ &9jWujВcMt.ף{L_n9Ayh?jESu.hDg`vz禰g&w_nEHKi _nߘ}uXwzgyɣxfJ7>tf/Thy{=vژOyh"iul&E,wYmii$:Mzgń{Z~ ݙuƆ{Bzj2wt ,l#ɣ%'*,*o.Hf0cu2w0h5|yj.o:1o3o>jAyCjFHJ!L g RQƆh~XEؤv ǝ/h}j~uXlS,{w|v`w[1eSgddm؂{=e{x7օחu铎MfzxUuֆ@B~'z砌tԠivvhhwn̈&zٍ׊wl퀏i0}ku{v{vawxH:vw}*w{Jwjvv~ Ҥ}{J3>ˏuBxqz#o6x|x{xgԅwu>ǰSg=awذEç|󙔏UӃb|ŰWҊzmx}vH#x{jwUvfk]vvvטوj|10zJ4{v,wÞ~gxvڡjN4͋,hBh簅|vH5wAI@xQ}8x/{Y\h8wsH9v,ۃXvdxzx{-jffwEg/YpBzkˤ\|휑jk vv}zҍYulj{`yw~Sg}iႩz ϋzy_vDuаT{@jfZwcehjvv-y7&umgEЙ0>y1vq;\f9< fʘSʢIYy.ؑv(D{8Ս!uc`gx*zҝ}4ziv7hpo@z.Ōzxjfh@f{!x,zHF|w"ZY£eyu46OƮ|yltvp`hHgɣwtvz뤬f)|Ahx'i93-f`shkN{"gg%ЪoPxvʤW1wq 6v~ۆmݖژ͙ԈGoZuj-CQ2ǘhژ݂\Go*۫jq&($ghjlj:~ }\v{9܇|~f n-ݓɨgxUyx{Uz~{$Տ\NJxhD: iygxkyhęo򖔂DIyK,0ly u̝Ozɤ=yxЅ籯h&_ .{{˳TγE= }tW yL𝌕>BmRkyo,xv)~%qv̀ ~|W. \9qzu4x(ngi@5 kbxzlThު"yѕ챹z~k~pwsx|{@ڍz"gN {I~@~ږmjx/GG8ۂv!鈎wP8yDoJg֑iv1y!/(l՗wmx>xw&gxg"z$|ݴ]ua|C;zha7uTKOʀ<{}voyօkylUw~r;vɰPw`gjx}u5hڝ~{vj|4ux5!{{wvƧ}ŋwKzw {awzȎ4uxuXP}Wπ[|{ v,uN޲A{exv|vxwPqL&yDž†}pvoVv;υoSh~ęo-|bᝋy {ى.Ӄ̰qgzZvixv@ÎS×a+vu¤T+xФv}볈jyW|*z.g}jgfz6I㞪fpӌ y$yzŋ!v%4Qԭvjurxwusˌ鶉vg2H;ߍЉ}Qܢ{٘Աȶs~Ir9exy'WΖ/ :"j#Gq7ٙ;YZޱϦvu ɍ휜ƧA畍!}1Z6g-A39"+;.0s!jfTߍܢuqwq$Ѷ?5^isx&񶃳~fրrѭo߲K%4EgeKгOf-}4V\Bz{H'?zxB5xx˅y|7zڡ@w |gwy9f-zuv |{L4f7/{"~w^3zÐ.h8NuNvv¨M~lޑv5`BYgjّ'rOzTg~*}HEzgm}vv%%y܄2-ȇOk{pƴ$Kîx,9ɴq2ʹ9ϴծٮzشgADFQu0ȇj}9HtV1?jYgnxB["t%f'Į)*Ȯ{//f)4~7;9Of?*?CBE&bhMRM)x0 #G~0M &J 0h@z ԔSt-Ռ*Ǘ9!"ʮ_fa(c9+Ŵ`h 1l֮9Դtf[1u&b3 |{ڮ;Og\Qk鴆۸IgڴCW{Lc aQuBgzhRX* -Pv}gBfƀwwΈ)z8 Nwۋ|zԉ x{r wUgz|֍l*zxf ~~ ØDNJlwӏTh|gv{j}ӈ٘s:gn|h|_I0hָhbSgůϱҊ>2A:w}7|@zVFz<ָuxjvd uBOA~nTwf_uuҲvfͮy8~bj)| f͋uxZx{ڱJE\5=IUъUGq-yilvRǙ7¶Xf̀6j5.h!4ogQ;vpnb(v}0aC{cymfoXϢwS0UWY1liZ0{&,2 TQs/9.'o W<^-8943o.gʹǸesȇkԹD5ʸ6-ٹy]9F9x9D𻋚~KF.̘wj#Ф04fh{w5 cPzّ{8\Mf6Œw|lhآy)wp{óRywt0zvg4|A@[zy /~ﲭ||:@|uuLf|JbdUXlh Z˰ }8~P/,0ؼnxw8|5~cu}F}|qעTv~6v }jγ|2v@ga{Hu>Xw{{LNψވ]^unγw\xRuΡ7jsx%Eýڬyx퀧gI̍͘x^g'{{wurx ߻TxdwW65ȓ8zxBi~jvP$zWl|uNgPgih&gCzThu~wU_|Ŗҽ8h5NÒwx% C}xRzϘ̉dzyNxxw¼yw2Oy(>kuDxr{wӉwU $_xzfww͓62Tawqm8jÙ}³xV{Iu8DgwzzYxwǼآ$Dù|ȀZzv}yjіً۫d2wvs~wy"g/kg!v)Euky$8h·3$y2vz`?^~vы41tB6xΛav"yWV!i=>Ղq >sy'v٥XThzǼڼUIvD-@HBw2€OyBfzgxbvkykՂ#xfCSg'57HF{w0׼2H}p>/ႳyMźcCkDGSggJ ?x(}}ڍȃ/Jxmg#vf! zxoyNð:gVAx}׼%{̡wmí8h#g=i̿Evw%HŶۼۘ&hwtmHwD iG^ujxߍސP~˺ӛκкu(=V>*pUhˤ FFk!4VWنU°!{â|y oph#|ivy'ujwB|z|w20AfϾ5"iw<#|Kz^ mUgָ{{8.Zߘ9g |D:Uy#o ĖkxȰ~zpNKhy2g{ۋ4ADvR`ivo6g5v8/󢸂~bԖo,ъv孤su׈hj8Ζw %ቜ鉸pg}?޶Ҍ.Hii wMɀõxuXr{zuwkys凱ly{xˍsbxTBfLjȽ"hE|}>9gn oxw Vv&wf;g!x\z't; *:8hLTvh6x㽼wih4þ\{j)}<i}{jKmhYrMfovJuzʷM 6)vvOpgȢ{ 'ļOwz\Vwz#s2Jhmi5TPvUfOp#y-yhŀ[}K{zwvy?wC|E?fDxމdfXy|#yآtdfʵfxgggxkۍrv(D|dgzv{(DEgg{uye-xc[f)ܲHz.ٞ'9+Zw*'|wjDžg}xlwʷ'|#2vqןa6:{˰m9B̂If2LY yn}™$[@חke|aNx[|Y{aXOz;ŠvN^^ }c5eˏ\-{#{gٰyUQr-y2w{:օ#:fՠ~Oc*x{2vM̐RMҾׅ@rIsxj弋؉*yi}|by )y᷽Qh@ix{7FmiCCv`. ߺ 4eu8܈ؗFv0bl֊§uBzy~x)!¸mH4v$zAJxy*hIu}zݘw7x~_Qr}á{o=՜nuxG€ԅa~9hh5N24zD:K,|v6ټw.ːѲE:Ng:`~=H,`ȕ*vuɼ߼Qru x(QΉ̕' Ѥۘ/z||ph³wǓu~v¾sugvR5lU`wĽӃy佅`%(UQref>!ukr<`tAqx ~}(Qry?Îbrx D8»zp Sgp Kø·򭏁v4 a‡}'٫{ 3*ވO$yڋ.h0|T}M}vތېKp¢w߿^||uܵ".M9Yvwەl|+a<}u3syp?hi^{`ujrǵWl-yQnu-($c+vu)zGwNvvhyxo\,wgfFxu⾭j‘lȍHzuʵϓẕȡ TҠ!VϏBhyxmh !ԅ$zs 0Vvl~{!mz Oy9miI>w+ĨuPfYvl0h)zrxxdavpH o5{]{ˍwLk2ąċ|FwnxBfUu"H-y|{ |8|\4įhƎ*mԅ}חiRJhUvx&v|ĥ}|;vl_Oó7B u#yӐ7QwyT!njc[ëĞxHz*Ky(Î>w6|B[ʙ񐝅-q£~mĹϹ˴)+,ĸJ24ֹ8\θ۹fuoO}޸>K])ҸԸBIqY7fܮ'bιƹ@fʻZл̬hj1%Ϭ?OӬȔ9߬BidgК񎶹 **}-®](l͹fgȇ <Ũ6 p͸;ϸ/.ߪ9QH*/~g]''f4*߹04 UŘŃ:RR?YͪzX1Y#\BûDՍeya|AfxxӉExN@{P'Wo  IfSźh#>ydfAaӘJ%'h=hfAfsuGwihT%%񂇄NchsPuhu݅ƦMH7|vEi2jf ]讝l|# ƟMin"!hkƫahĄƪW}Y%BL ƳÄ%8+<ޅ#Ef焐8Ɨ=DIP&sHŐ һ ԻZfSŜ掮 廫֔뻯N ù"@ň˹xܮ26׹`qۺEd1 k;}=x悹ݺ杧(% Ak0wz6ZͷwN/GHuXi;;ljoj UҺР0B×D}\[|oĚ>Xwpʼ8ֿ.{` WiuY Uvvalvաw?ǎQ3Ċ YStZxe9擻/kyNf`w!KŖþ0-i3zĿUgp)vC(xݿvv`2zp˂⇼||ۘąsi͞ۋ=$uz_wǾkw|0ŖljPvBz;w^vjpL~ z{͂_wlNxh_vތyg,_}+;{li i8~2io^xlħivOyogˤ7{IP׊قpăghu nH""GwawON|Una9ƔƔnMh@„%Ɣȹ@/N PƖ Ŧ8 nŹ ŔƓf;vŨpŌȰӹ ˸Ŧ=;ƍ>ȮƑį#hƚ&VȹƱ4Żs%fȽƠ>yňVJtvO i8$OJ?klKÚ׻lMf.ouNKs {/h8uxO }.SCS%mm}ggQ^g fS76OfNf;q|gEɣv ɥu !Ɂw&$ /Ƀg 76?fBf.L G.=1ɵuuDFt`IK0N4-PRɪ 5HV?3 \ɜ^ɣE=cXe h&jXHl2pɟȜƕȗk ,#Ȗtt,8g[&Ⱥsl n+ep׻ٻNjxʬšʉRlh/iRg~UJ ,%2ȣĪjvw?UDy-Nb?f.uRu ffg$ͬOuRtw\xx +xo{xo52H{2H5 ' 0n1 w A{˥o{"t% 'm,m{,.-km22H6 /b˟5{+@8N:pB4>9Ho{/Rq52HVRhT9p=t6Y= qs#q82H,[l6pliQ{y-oT.blE"iz/˒ 2`˵a9˩j2E˷Jp2O{R4:-q2X˖dUˡˢʈv ocʭ ʬʬu-ʿV 8hh@ˣj.hrj@h x.zK-o>֖guxjL>ʬf=6oǩVH*Cjfuˈv˿2΃*0p//#fv}2Pf7B&ļfmMdfkfu̸t.[.D̉UkGyu^ijqc@JvwOy3 nι@P\Π8)\P"\x̚~kvh#y̲* .y0*Ak1Xe1 :̐u? 7̃J M*Iap/E:apuɷhvu̲ˎmj7Y[z]ΣQhh̾cfΝTWj_2rvp΋wr'\Γf^flΊ \̒j{e8~i΀k`䈈Ϋjh5wv΂`: kZtϗΓxnd*g\ix@uhhf"/"ix/̶sVywU:Sqmi[vwtxTlemq͠)v́uLvfΓ̓1MfjvxfmgΦ?fkK̴uh0hYmez Δqo^gγΧzԅMSJkxny1ϕu5#9YX(N+8;I!$0hup,7/ωUxjv\|҆Y+HHϣ͹)Kͷ ._Idͦu> @)Ώ\͆w|̸fӦ ߺ2+xjzjt jLxjj ]vfNۥg3Ϡ.0 PfϊfЊ/  œyǩ 5IȐ [~Хuu&L(*Уf,tJ 13-%"Еh9uώ] -Щ0fD5$ЧUOM8L.N9-вRT!СV7.BQO4?rb2e߶e%9)7- 0 ЃЋ%ASlUFI]K]y--LcЋt)\bj97| +[?Еhsύ БЫLIУ/ЪЍЍuXЏ)UO\^ЖРrCЛxji'|+_ЧQжЫf#{;]=$иr.YоВU>q*xЃ/\R4n- Ю1hs1йtuйNM? уo  ќЏu!ѵB%СУw P1J7Z0>2ѢxмZ\Д j#dM@ѢQ-VЃt[XњZѽ&+$3 6ѵa 14m)Vr2i &4R4:ЫLe-;$?lё+ЎBQm?Ьk゙ЭUѰМlcn|vAh܆ÍׯNo 2zfw]hhrj*s>xw %ԋ,_v\+}fmi\vv™hhg+ҙ'{ӂvx@+-}f2ÃրjQ\ͧӊ }fpv϶yxuMfyxs̼N}y{ę.}fi,@,6peb,3¨lsӦtҕӈ10F |~|/y!lG] )wkdyouʫk3r?fg 4 y?faQv&o(o-7ϯ~j;ү*8ojv;ojuBojEo˂ALojNol{k}[Qbp]v+`Z*CQ&yOsk=s#lZp=OSgiX݋Tk=oQrKse}kjZxd_hvy mkj)fq9keyskl{ o6h{(b)$ԛyxԺjzԤ}݋g|큤?mcٛYkԑ$cf0ԑy|~ԢԤف6Eoyl2Y7^~jԭe;ںnjcmKhiLԛԸ{ԼԹk)tԧg6yIkԻfS_wԟԻԥ-,4Əmg+k[̭sՁՃ u vckՙaOiպԡkO#f%"<ԯԱ/,/+,36l8I + ->@+ճj-m?3KMգ!ꌿpwQ>@jԛS;_Imy|8^_b Tyb^-hԷԝԹN 7 ՙq[ ߺwAԱ3ac5ՈPՊĮuǃ->ռՓԱkՅdԙչаo\n-DF?6J2կ՛eՉ۶,spBrDn(xyԿԆձf.όEչձ^LԲղĮԤ йՔrރ^k?3)^`հI賊Ҭ}r{nj1ՄԜ*lQy3/&rz|JCՂyL?6/0'5Iռ^՚՝p^<;H*ըձay7->֤X:,֏LNtPRTVWYTCQ\}`ԩj=/}˥p eۈCjFw0SԀ\sGv*3rԥofu~giux49Մ&+峣fԮko[/-O(z2mՇքΌ`դү-KhjH֞LOo.UOm-rզ|Lj,l,F:||#؇oPTqJMJr=ց׹,$ӿAYCr"6*=cV9byw_j%ו`׫-ޝ֕Ԩ#Q XBٞFGG|Pس9דlpؔTUy=(FՌFOnkם]-rG1Kw$/\qTـiKـ+h`ټ{|(_ժLװ-;J2r؆&׉جCt:Fиq|ث'5='DL׻)Pcx.Jٷ+֫و٨~=ք:mWX$| ןj P> Z6WDao>ճeL}-xpԆ+̶q\֋[t]nԒf8JᲞq`S;X׎.8`pH)ٌCQ4ڛyS;yhS+~Ds$WgjpL5mr&p(+h_(V(l)Y);S_h;/j4ڛyB"U%ڄQAohLyU$7U2vi;zh5#Tԙ=ZBve*{o˃gotف`ƖyLطר58K_٥ըH=}l=BR)kdTb 7)AUaS|Sff!پѹ{٘rPfw·fʭhjF+Jž(Կ*?.εgzf ͅgg&DX(ܧ]gJM Q XUoܷΐX$#=˭5)p0zK{-8aӀ;$udܶQf&h2:l(nGtA /"jGݯgHLG`{ٕTPefX p{` n MFV^PiܡgeڱڂS;j~fcڂݓu@f{s>#ڳ '[hjx+,@PF_֘u݀`j/$( ͼ=E-ACFBn }gX>=Gv6݄xD$ ݂R iEPh>peuX^lePڸݯݩݲ.fPi*ީxme {%6d}wԖfܝ$ݏ^M+޻\D3dUގ^{dؔfp o(\?fYPس S?'CEޮ5dݘILKiFOmݵpݾ.݋0܉ݬܵ9ݑaݓ=yޣBݛDN&JxzR݈݅އ݊ ϡюގݑ=ܓcݷHg}ޮk݁Tܔ݄~فw݀ݢކjJՇT2[ݏޏܰށGeݴJCL޸ޞݺ޳܃$Մݾܥވݨ޶Ռ7ݐ?ܼݲޗEݹޜޞ*j׽܉Z\ܛޔz|~K{k{j UyWg`ݯ ߱rޚߚܻ߄Ե $r'ޭI ߖ1ߜޛPwkx4˳vYރ[]׀jaUeCO;lr vLIK߂V&߆VlѫB DjGߵ߷n5qK&/;!=Gެ_ݮ&bޕHߙހ߈߄Տڍߦw߼ @ߔߐCߝE/kߜ46ߠ*{3ދޔAߕ߭ޯܱ߂ߘ޳ߞHݮ߾޹Ztާާ0ܓ|~߮߀ߛ2߄ߴlݶoDz(6֤v#x6(ߗ*ߖGޕݚߙmD߾imߣz{.߾ߵc]}-ߙF3pK@<߿x{{hܾAxPޥ"$1߬#RܠݤVOQpީ Q߰[UapXCc[?fb֗_hjuڱoNPsS)7i.܀jܨ^iܥ!Ω0JLM< EtjUg6?3j+bn }*A9˅rvޅF/ށ߇!\Sf^9 ;UmA*C,slߝߩ$&-&+߫D ߰ߣu{',x~ߺ 4ޢUfث>ߊߍBE3Wf؂y v> =%ߖ)G1Ki ߓ)ݚMކތ ߴ-ߝ8ج7Έ$<Ҽ˜+,.tpvΪ߹߻7߸"/`9lѺ6߁H2 K!وaX h(ܦD>ؒ [?^Ko(%n%pz@-E((LQh6$k̤y|8}aX j4xM0ե=yhI:GJLbܹRGa'+Ba~cGּ>,ߊ\I!QS%eXJ}q݊Mkuo; ?ݍFx0Oޖݧ--^}jNhgݕJCPۙz| չߝ߂&./1ߠO{٪rٌ26(ACK J F❱۫"/)<4e߯L˲R5'_ . aX_՟5:SҀHV*QS܏}U?L jUg.ˍUfleSU˘mnXot̔fM;_ˢx*u*i~LUҋ݁uRw]r{ 3K%yh<m&ct+ކ> @ FW|SNb;=*݆܋%J8Y: C(^gҰ9vg NXPiSURX^_hX\c}mi\^/8+mL5hSlk|~h khvx޺:,5#/8 v F"Ivw%s+*݂smaYGd %ݤ݅Nݱj۠8Ֆu^sxfvnӇ6Qzl|֪+v#2Hv泡v$;*}4D^e`gWk|tj9݃wNݽգn z(D>!:ˢ)Nqg}^jt]Qjq,X y(d6hoqUfx䆎xMei9\#Tz%54{NjUg9>˞ˀS Aq)?av7! 9RBj}OI.OjJ^*"\Mxr.hl|ݧ@fCsnu4o1\/˓>pfx(|#ׯ|q673&>p[̇Y-ݠׯ]]J˚d|5pa8`T!aX?3nAC;\_xLqΚzAhyxr)tZifݥP݂]تGuIw eW04˝`˟53Q 72H 4l{ 2Hj˺ w$v.܉v 7ތ9pCGڝ/BCf"JLD݇Z ysڬ?f˃ԁl0C(@($ &Ծ˗ڷh[XP3 @,dcJ20=apA/4t ]f"g9NYJScVc71 >YY|6'WU3NTVq<ZD*pMxu0Bb$ /^3`.&kXA'8{;>16^9Y{:<JˣL:>=:ZoAP2+00 ^_RF;@GcHUzq#ros1g.$:\X~xH^3I RHd4JPE6,*0wo)JMw }XZwU[ McB=K"a+F 07 7jXSR4_9EE<5I68.b![7bE9]wg|_22$MQ06d(Hf DhYsO12'_YVDxt`s)vGo ;A`fS%c&)Zc"D4=mS8R`9]Y9r I@&}&$>`f/\]H^~X'Ȅ)g9y7tF ?yU:6e=gM/rWDxDO'6v<1[1ocF\!_Lb)=zL 9O&A[")qSR ^7 9~CfO/:_S[gUH(SDb4JJ?.4nT#FD*dR)#l }FEi&7&LEQUy>>:%9/I-59T+H @|($rT[u-(:} 7]e Q)n ~P!>`8`3U)J8fzx.:Fzk M)r5`<7-g;-%DOMq!7DX58 .Ek]^D{6rG:'Sbm{IOM^z|5]]BN56qltv'2t0':X[V}G3#mW>8F7!u%xL(EiH6/;% }PeAqO&i460s=>d2`LpHdP,{0WV)fB4 j-\_iQ&dzW=+VM8<s|>?5'=?4:/(yP<4n;AK>6z0L:#og:p1%% O N_ ^E`tQM_E(C1?jj%2FnfJH&/A)8-&l~|8XFAMcਸ਼OX 6pkDFshz8#?w %E"8&f'-P]9fxa\Kc>R._V`J09_8=Ld\u@zs 50#A*y48q: /_76,>7F%FSM"S*Lt=Hz@VE2$OIX.1$iG>`8:bHA D;9=V["|Md#`A`r@c:XP R#X[\\BTt_1y<VT [XE*T>%,FTvaE$J'{Q)|M[;3]*`4W|:c]5.-c*Y[6udf;vbOe4%gcz}"V8gB]Z^H0wC_ 7{t$C _REQ-}%?n;.x8Uc}VJaDD$SNW:EXD#c0M;cs$JJNk/d gt I5&sv:r NY# &W>oU8X3/*;O\GBz$F6*qF t#'y:X T%.9| hH[ :[PmRyX4%5I]hPC9\:&"{gEM4">46;=;wwffNq5=+$^O*c}s_?ut_mq4F+0w/<>4m4/x=S97mA~W(S [$M'`-m~6qJ guLE; !^%Wy"t^4h'v]y=HZ? &.T; z.=_i7v6xK}RsksxBu[[9qekU=N2&2 N7{jgHWmBsI*.(Zs| -?+f ^76aAm7;'6NOKG-].~;'~XnDW]Sz |4xW5[NqLdd 1b`+(DG'):U}I~H18b)b~Sc)5o;o~+lS`e1[@mpE{wdV@'M7Kfa] 8&Z7*@H5Rmag^J]HlJ+)OcMnt Ei}Uh]T~Kd5neB\( Du!261KGH %}!'6vW/X!>rscxDvX UlqZ$[iV=H0=k$}1xx\APWA)%R=4\ De?HuJ=.!_ 8Qf GP7W{Je{ s)yx(3Q(?qycEl4.@D6)Qz&5]1@)i!de8uudnW<8tW8sP^Q5}8UU9CI\L{b= OW*Z r$f)MR\K<-*PTk#R} @o ML .t^;Dy]&=5yt<9:+HJu;C.uY!t4fZ yZڱjh6h[s3"F2eFu ri 3O#eG:dn9Bj>Jw<"a9i36D4DB^JXBMJB7 q$U^S]}lx#j$wJ &!e]4L.>SQt"O rb;$fp=$ALtwO({V4 2Np8\E,W=ϙ3|=IY?) Yyea5ʡi NQD4w-d04GvfL-4. VsLi·O}0F4`?h,_!(J=(-;C05(/41Q.d(;x4{#[[+#(d7k|mJU,AM(_}= >R^".^>^ !e/>3ME ix2 2[b+:3 6qDY)LlarS>6\r42>;. I ֆ3I |69e!T.N U(GAUXmj/\dW6VsM~J*0HL])2kJN:P> \j[O+%9`y$.sb> ^mf:[GBV8n\Hob) I~8=G1'1qr+B s%)R9v5J0[HCiDysA}Q6 O:I5;r2/k:.7*:o=}W s_`f7,8u7i%|KBp^g/"M Ec4jHm NG/>6=iA =aB H B4xBO8(B T3  0t 8fD PsBoMD#>Dg8 #)%?~|Uc_d; iF$)<D-B;c*qJ| H-3`MFj`$#X8^rd(IlE Q6ShC*)#(-#V=%eFV[BW&$s#L2fO')8I E`wO(=.GkE(/jF!8zZDBg_8|R('= $v@oDAkE: uzTT_7c<@'ePtHi* s.h3`~tP 1 ozO8D[JiB IB2mt7&mK~5 o7Y##HJ iX5 l$$q[iv{MP3t X7M;lA i<$$oEOYe[L'x 66Ju9qP":Jn#S D)rMc$|.W},sX.pS_$6][_]|wȜ#*DERj=_}U['K1;9:t0+9'LO?1|ZGm-aeTY/-~v$+_^w c~?f> ~+/ K%z-G_Sz[$.WcM^fD6I W\lYX ]]9?Q0=6BI 6==d6:!Nf^ XCF3Ag*R}$x*4,MS79WS7'@^TnFX~_"!5]cSHCc[Y[>],_? "Iikm[oI+HU 4=1l2NWem91r\x5|XG`)V,0iC{-.w#D Ym@ _r.L5D& d+#<x@JH8~<a8RJt$[/DiXGcX^x-5"I*.2T_VN=s)W5W*M*7#vPwRb. )'8gPt7Q$ Xdi bTahX6=;%fu<'t&9in  x63DK)Y<(Ldv+Cx<fetjB&YC\[.IYWN[Nh=s>KWvu]D4.u@pt C1Yk yB=,;eSWv9B= GyT6xBw|fuWvYCSwr-$^4i_ Q+[HA5_\vQd} |+F84$Uk26,H)T4|9#^xZY8 VeIT/ K.n'DhK1 Yig A*6:m5 zH(BA 'XE)O!j jjH(>= .j4A`pE)XT.WP7BX S:~OBYYpXbBBC>k*9b  koY N(OyjnY'<[ W9Y9bgu2;Ps]*H$1 cG)_Qh /(SI3VA4De@09uL_FT p :HuoJ\+"Omv;V}c al/ s=ڷyy9#,c;mLeMfWj[v4`QNG,X;IY|ac.M-?[PI>"35y cq"xiuMTzMh[Z'*l/y_dCq=ڷ:bI:b\;#Im^%=jfX8s!.`&((-:]b5%`vWDc! D(F4; }c-yy X;#+!qKY=JeHY#T^ZChIV+`J;{}clT4nBwKakc +mWNqMgH^7`Z7[: U&X;{,}c- KwKaU 2@k(}R' yUYk4Z;{,}c0VC# s=ڷUU 0H &~{kPTW\`AgcY4/g,j)7N5<]$PE MF_aHpD8RaS0;=\=(9:Q /-e;3 }cu:6O s=ڷvr3e HR$}H*I A=x9'ZB/fZeg^ UmAJ\[^Yq'47N^*X$q4G9l_H6dXjsldDG7kq+.N)-X+ :=U̩,rg!~VqrQ L,Oo]eUڈyd_i s=ڷFb /$ b':}V%Z;{,}cklCd]nB  [Q  0&j6\QdqF:9e:-tY;w{,}c%Z s=ڷ L;r3e L;PRP$j6URh9)axVn9C#tRy",0OX3C '7JhU(&u7]QDZ]9 L;:Dk)#,g?+QI|Ubjlnps!s"#! 4"- ,%-[S;,*-q^q$T)(s_Mes+rUuB.H1?eOYWuk*q(,%)MnK]^K{R0UuH|/c,S5Q `p64exF>LQ8t65\bBkRpK%yJG3<N8yBhc"{7x?%*ae53%V$R/AC> k= uDzOgp!C ZQ+S''HA3Zih+7Hd`):^Fy0]FTs;OX.ZFX[x,\HZ9_.:}R#&A n'i9#gc&sh Z(dHXv1RLIn2 :WVuQ 1JSk+UFM9$_"!-Nk*Xu .+6&s&`81n!jXFpk=M96;Wb F?M}U3Lqqq rEZ&\_K.s7dQ27s+l\6;qA (U~(d3NF?; fCS=7YF>m_ 0jPG3ZvjR$ehwTs\;EYFܪ'`w8c$?*C':h42`m.*BM!.;^:,Y^ey{E(O;T_c9s|HD_<nFvdY>%%tWW@^61b4V$5T8Y%`I+ P #DzP2+D$5)$2Z"߅ P*r= UDz +5a!QGg8lOdsy&h;@BQ1( @R*A9?HC&O)8!/,4IY: l$*(5U-.;Jrj:T"o0K? '1MaI8W|DX&(O y8'%Qi`37QwA3eeU)s'RF;iB+gCS_8zq4t^mCBJt_>n.O\z,5'<eSS`l=+;%46|92I'>$)`#[TeBLNyC*T4rK@H5) +7 XStGMsfNp!R,Z#[(Mf/<[ZyROzJEh86_0FlJ@KRabN$X}L\M'7>/ePp/1[vAd0z2G/*Y^ap(rB$t\A]Ct`\D._fl^\N)tGU:<[>L;_5/UCk,dflL{MS0W0;}$R5 ;YEDm0GfIS0(l.TY'=:s7dyd~-4wWjnL7yB:}l&->M9^-<Qs7en4(C yM/+X!EB-Re{u$X`GyAS3tR7y39_5mlpB\6b#v[\pr_keF_te-DD])/:Di)?#=Ie+_vzsBT=YkeAaZHn9K!Iw|FmWG_> .w~en,ugzs^^Mf?Dj P34Yet1th%dBiB7]K6==R# 2|+9f^.PUS>u&b-wn1 dH+v>tDG{X=#C)_rMb?_fK-DUr+F>478?)v":uKbg*MuV\>WfKRH8^WuNY 15xN^dc95`vmt/\OgFe:5wx[ _)"hv]A8Wc hq6i*Q,!3`Ի%fK/zlh!B5o_t`I 4YbHBD!$'*-).05g) G<; U1f'w2ZdXlZ S4)\pTX]w6Qe*^+y.d-L[>uR9Z/9w5`yW}Sc{ac6j s=ڷ22[Qp><t>v>fy>^b~>U!yn_[">'<(qbQ5$X.q7Lnc{_o=anBG$L$VUAEnzW+]HhI-D.+.?2-d^;>+0/c/9*ZMBV8saN/w8( uY6G;*x`E{XY Dz8|I9C(#}rzZN)DvKM`~Be`^n.SyN5f_ -%) --/13579svy| $~U c{_ӛD. s=ڷ0I0-#Hjx)c)JYLz(`l_HhJ se%1dQy^Kj\K%&[,(e Dy_GSSvk[Y9I(@@7pFpS+)[ 1=j8I9jW~e/B.["{N,#-e,(- (*c{Vc /\,4nB4 H#8ri@I @Y dH >giWLY3%y6"$#;V'EAѣH*]ʴӧPJJիXjUi6gfpq&hƀ  {\sc;o_0d̵1Fa4f؀7F 6HK2:s脑3@2lъ9S^A =0Ċd(,Y%ՉŁm8YKD'b:hڒSTZa&H@ 4N"ejT/NBXH؃H\Î-42У(Cv VUX4eV^xP]}_}` f 0=h$fqgUi)TZBa1[mI EaFiᄔ00h =8rhTs[$Ivx=34` [Ӌ>$A^4(DBC 0CG'9&IXc@Ns +`B,0O.8 prp$7s&p24Ld S ryHr9 1d! S6`K*jP &d0\p1H"! `Q {b0 s p88P: HA$ _PB2:Ia+FB.#P2zNpX< }< F#@SJ݁(ڐaֱ# r(`!D, JxP ,ihF@qC05y0n6$ qG>Zx8 lL&L$vWrqB(B2rq\H( * z#IHh0Ё $A>`i,kPWرe:6L ~4qe 'jh op ؄?< <`f>7`(0,@<@ B!B0`:b b$+/Q#H c7,Rck]r׭]F{_@H)H- .^勜5ShFAK7Z!8E: J 0h e b` Ps ^`@80   p5 `/ = $@ y0 % ]aZ` p9 `P 0 pL@] 4L_ R6*0 p K0ư`" }0` @ C @GP w yVp r ` W m0 L@? `O ؐ vW@l ;נ]+ i`ɠf 0c@'Őr0w  0˰ .P 0ǀ ` SP^YĀ@" Ph@qS` WD  W@ {0* 0 pf0 -`  ~` pb*r v-0`ހc:0# I@pU`d J6@ O ` Ie` f ~ X I`0p@Z0 e  Wqi2vw!'r7WqT$7GX?^?`@sx+(p  <` wpP]`K@ x#%p 3TC{i&ZV6VZ>xuj~%W50OV!jkVk[JX+xx<*F ` Z T 5 @zgBu*Fi'"jla5$>v5DQ}PAoVqX%: @AzF|JYlt&T PG e0S/pv`-< p 2P <` r`i@n\` <=h[SiP󥨺"FĪJw1R 2m׫N7yj:7Y2FF@6꬚ ` @X@ 9  0 M  )` u10 0 :pPO]@ UP@ j|a-0/|K=Qa:wdx#0@6'+C"kƲ#s}+F0,sƊ;y t&E "Pzg #`d b`pd@Kp d{ rl` p B0(cpl0p ,p 0 J  g P54@ Ѐ(`Е0g 0` @0@% 3 pPI v`v :W[ h@{ 8@+ T P0 u 9>  ~< n`0K} `  \` B`@pGA U Pa w 6`sp PZY  mk0  *@ pU( 6@_ UdP ? 8` V p  6_M0$@eP Ӡ0 @ y0 {Pp0 0@@ h` 8`_p  pp 0P$ pQ  bŀ @ 2 P or@ A1iP O )  ̰ {@. {ڀ $= pP %0 ?VV.p`D3p#wjDP&FEP@ #9RaE@Qqsq`yQ$0R L1 W$`P10 Ja` fjc@pF ] ;x|M`a08p``-@0` A  WM0` ` 1p`-Q$0 `@-8P73R^$UnUN€`.'` {{cnb#W1 n k6/~ူ5@~3`y  k.Cp@0`w.<@q0Q1x0x]@YPPaPY̎E-qaPp/F ajQH1FE1ZQ?5 oiAt%K3@s{Uِr6 5x[x?1o !fudRe 0ؐ, pV` & g j zC@2` P 0TP@^ _@ %@P 0` 70 w`.p `(8``P G6@ ` 0 '@ z ZY&DĐ3 k,Ll  -Mm \-HidJmjql%sJ5G!'tځ>8 xq@܂,AN;#@ԃm @ Q PV f , A `g@ pv `up'``tY ?X`@+@w p  .`0]<Nz=`%v@Dp4A/x`l%m` p3*%`@@bK0 2XG@ A#@0>@ !pؠ\et40),t#H@@@% |@,@ d  6` b FA`@ z` ܂   ? xP1Q <Ptk$- DzQN Z ԁ6(6$9$@ )`VՖ<@ t] nt X N4xA>0>t^@7@=f_@ *E!Dac{lc?$@ l |D,(*BFi7N[j[\6Bm FN6қc ;Vsssn #J@$ Rvꭻ}70WvGʁ,`oa0 }p` pN 8w,hp,N%7`0p'H A8\ `81v >W90 r 0raa`1\S̑0/]3O7\p9瞜tYStP'te:z]u*wRݪku:Zgpt;f&8v!ٱ^QvmK,MܑcН ;﬜@}; <`rWPxGՍG*KTm,Uu ȱ34c %Tfg:FY{c < B:IA*9%8Q t@!H@bP 2 @Z( `(1MЄK P@ip6l| ̠0,9 .a? D;[(@>(SHjPaL0 -(X ``΀$@A V dDP90` X @>( iEf&Di@ ,U x~oU_~ F" u O,\t)$F! O 3 Ԭ)O%tҥ0V`cr7x}gĂL ?0bG p /1\ .9-' le   `E=0X8e` yr~~Lq` "H hP (*%Ғ (h| 1i4p * |P P62  d&X @,p&A:(`N8 < VFـpC^J`(N @4R @?`6h̀ 4#4 4v xYx -AH  f @H<wn(0D0N0   ] Jpd ʀ0Q40BX DS ZZAUPA* 4q jR@.A #`dA* x  XE@=Hdp@(( Gf,@.`ـh,@v$Tԃ٠;OJ5T@P 8.T炨Z7`®ѣ-pk#v\@9`x"3p LA=Pm 쀪gA*o4T -x]_ 0`: &@f* Tœnm')'!H+ 6s3FỳWHA@ \ f)(4DE At\OAL Syp@*;@ H b+p`dA;H` ` ` ;ă{n5 ɞk `@j` cq8 /iPN@8%, A&@`P ` C.Xl÷R`NP m4 :A/΀ ?Pp`h, (A7 HS`d=W.0 "`C*o  :ؠĀm1xq8!&D dL\'WᏳ_P rQJf@ĝC 5 7Rx4(l*`uGw`~aM&`vP ^|d002Epx@VMSe h{ΊKaNf͙vυA$ÂR"$Y9 $h uP5`TEYNA PC ܥ"8`@"Y A  a0@. Ђ`x2` 4/ nPsl!@ n0hVz@@!8etp0! Yp@ t01v ؀ 2` 0@-@LtrN`& >XJ?gA'zoWg聖;Y) z % \i! ֭&Ƴjh@po$CYB<8` z L`(`db "@1 ) QҌ xY` \ P@ p A3@-`A{Pt @ ` p pA!}) sp0a Tr$g`EX dej XL-` ~ H"lVs\`D Ҁ`, 6p0)6 h v |AX̀86/N@A:: T!x@ Z O`#p>^+:Ѓr tJ.8$ !)f9 v 3e9 u=zL)hCY d(9mq}w֕!ܜ L@i d@,́*.A Px\= 1``(v@%X PJB6pꛐs)w'V~ 5.Ta;p5_pZҀ[mpr  <0v]. JA,gx]k=' W{9 %V@>'ll ځ4w#f8?g\~I7&dsN @%P P@"5P XB:@,E *@ ~0 .A @@Z/h܀+"h` %h}hF z7< 7`_<p C/ Tph'>20#eP\(NZp 8 eZp`&5 (mt '@J`ɀ IA $ @%L J:]@pP@5 0@0@p(7ȀT;`h @,Ȁ^bH@ U1 t @r]P 6/ZP($m9z8#X@,` '@3P#'x Ub48`̀AxŠ*@= { .4{B4'` J?`@( p>B 2:x A@!@h:(`5 d'p& %A78b k BP-2pS8h ! Aub *9 $(%Rx}b$:B=g5v(T?9+eQ@D\kʣ&(\>>  R& HCׁ#@̀Xz$h3D?p:\Ti1Z PT`܁ @4hn@Ѐ6 v  p ܁"0w!R`.`r @dA8 \  G=G0`nk0 42V A #87{$$ >l L " n:H4.58wAƞn x*gA wFgF1hFhDCY)\k'ϽN}G$6,km Ws?=[Ao qR@ OQrdeSЕ!`6e@ ,\@,` X p= + @ TSe@P $@,' ,@ S-T0K@ g88~j 8pRXTR6^ $.R6;ѿ)Htx tD 'y C:@YtutHt$J!GKPlq!~tqB uE]D&\@*X $U $ RJ($\@`,.3P&5Puu8h@= 08 0@I K#-`w&# HW@7 t@0.8)0 %PZ&03}@ 8N(N0@"p 3` +P  * @L) `?t, pK@ H#`P@%"@3`R@ AJ tBc.\0@: t=P@ ` tP@),h@4 "(u%`p@ &@Y2@Zd1"-W7 Lp(@ i P:dW0,4 VHp +0f`D @TP*P5C'P vp x 8X @09`:8|\pw@;P @0 dT$/ƀ377X@ E ! `!@9p eUN"p& a `@4<0@@ Tw'c@P(10 hb.Lp $mtPd3" d $&`   @ptv7ە &8z00B1"2R@.pN(()(@p h.=` # 0O (j J@*p08I| d~` wu M>U>|! ʗ|"T@F$xQfDBWG(f DaT"@6 @. S:90xۀ(6 X@8+p& n@&0;M007Ie^@0Pp @xs"P ( `T >Yf2Y`dP@.T 0LW@ p @@ ,H 6 `{&( 2 d`@Yu4 d׀lptf# @:0 GlY1Py `P}"5_@i 2 h 2P [.$~3 k6 toAPh) 0f@  |D"`i Hv1 @0 L0 h%@P @+8X K`&@ h9` `X | @3\^@@ h cu>l& 4P 0 `5n!p p@(P ~@+ @* ) 7ˀ5; #@{]_<pu@/`M2k +@00W`G@3 }@,_ D&0Hf8,'"H@wT R0:H `0@ `Fh80pĘ3(A6 @d@"`G Y@L@`T#dy@9$ހ

#H,0:no# M\< > XW'h h Pi@%@]# s@? ؀G. @ @`G9H8 5<e Ԓ?0| @%H#`:@('.3@ d @[6 P`'(E@ 0\ '8 09P Q$>DE@ \@@VDh0E cǀ @P43 T0 9 3&U2`0 x{<4N)-,E*@$  0+% U0; P(R"P<@-hST|$D316 Pt ) \@ HQ'P$08"`u@&  N)|ut@.PV/@F@5F@{ P'@9`R1 zP%Hh@ ̀@!PY@Pr D@ @4Y@ PS/`=0 y@< @0N*8 # = h&`n'0,:0l-d'E ;@C `r@` HU  (H%@tB*`@]: B0 EZ/Pn)2@44 @h8 D@1`;R\@6p$7d?_=@<t<8Ps@H; &Ly8 @p = <@:0\C3P G+0 (B(@8I|ˀ; ^= : # (_?p @;-\EC#h/P;0À+?p >_ "? ||pԀ L543y @ @q~ Tm= Xµߚ 0P:pl* 0 Wc6^ /0( 0 @  7pgL@ p M1 @7o(0hB:! \xl%Pr tE\X qpf"@|W!@-PH@ T@ ;ضJ&|"0\;pX|@!;"6%p$bYP8(@yp p*@'$L C@8C}+8PR`% Βj`GVw! `o4Z"@\eh"`L0PBP*N&p@5#0HM@- p@%6A` )pl# `/6H@#XM 0D@!A)\FOsr\9)&dw5¨՚ % )C>P F9$Tl[` l@+\mp)JyC@20 @ lH@ .T9 :&@0w)%LˀaOG1[09VDw9FAt@qj ,@0( @4`)zU8@ }(@ǀ }@@HJ*iFiƭ_{Or|CjL/`C0=/lH,ABPQh@0 @S X6\qY!t@0 r@`  fD&/P @ {@ PD`h uA$[@P`6" FPqb2Hv( !9,$B1kaQZȐ %Fd﫯@({3P & @ ` ÀM%FkQ P!@Lۂ1h ( @9` Up% @` s @{* VKp"p k@H<@4@; ,@ 0 &a0 d%" @485px h6 p# <4@x@.}t  j*0VJ<0 o) `}"0*T) LHpY̓@@,0$@T 40` X p f4 0("@ D@9q.@OhK[J0RZf1b0^_ H & T@8 -El>`@@2@WPV2 * @ P? lH5  @7?@l@ 0@Tp@C%@8@/0 0@6 \& . ,@(T# ر;!^|20AO"$2 |PI,GpC5| F C.@\ۀ+ V)+@ xt "@ i tT `q- Tˇp8@8`I6@+LUD%`G%@B p*d 0~Z&@.  e@> \@(>ÀK-p 8O30@ 8 *@ P 6+pܭ1xF|>8$ 7 H,v(v"` <+0@Dw=0р00 @  Nʅ-b )#tr,@-` |,A@(@d@  -P,w0î @!0 @ dd@˞|̀ r0 T# 0: ^d0X}` 0Xc@(. @4 Y"@|3  \ ! U@ 0x>Px7* ,L -"@ @{7hqE' #  `@8 } Yu x?P3 HI?P<0~tJ@x | pH7p2d9/`h ;pqG˯k?ݑe>0I@x8@3WUpTb*@,R-@- lm=ss: !$Pļ+,P꼵z %\{<@fo"@TGztU!!@O.@2 H |P$4W*,R D1 p9@/7|@,u@ ` w4(@1\Gmz `@ `,P ڀ*!  @ L> LΪ,PY:Z@80&@`@3{@)2 p]9 X3p @<@.8 <ဍ@? /P'`@0h1@!,0 `xO@0@ )@ @$ d+ f;ÌY Kt`gP! @ :;X! dL 8c z,xdJ(R @p j P X= |4?@`4> h'+t@ P 86#<-@"0 X5@f՜H"3Ia]!FyFKAzN ϡ ,pj@jpa j8`_p b@+0>P `@2 8S @2<΀@ 5 PPV@  @ !p Q/t6 ,lBuyΉ@';  S&O: dl5@'@_@*@0 @ p@#@7L̀ eVJs@<*@= ?a!pJ@`dv@|> & Y@r[R @`  @P<pW@. d& ' 3 P,*R D3@: h+P!@ ,΀ l>4;%P"@UAcUAHJ..(!Pd2b4 @b( \ҾM%@7 t/@ @ ` \`f.X  bi D`G{k;BE@0C9nsjy(A PY@pH*!"X@ $/0,@*P @2+!  $-=ll @pTwv 8L`{9y`wb@;+ ΫgT|6v@ a 5@ dpd@x@# 2Prptض Lړԣ#ޅ&0ZO& @ 50 @".N50 "`t0d)by@@ "zr *ڀ: - ;N=lEd:]\Jί@P?'C{PH? h*}k%@t-@n[ @`0-@B-ATр# 0Xq [@6Q7@:P  >4\ t0 X!P ' @KU>jUF s  U׀ h "@0 9PЃ728|*}TȆ,1K@"^.ӏ7 4@3ހ+ @7xx@>@Pe@:0em&9\\)' ` ,0-+@@qDG(6@DXB "P{f@@   I>hnI8i#F o)KH@3@> BM` 4@(aX@*@ @>t{C0" Tc-!mME)<k@ @=H= l8QR#W.0jC b@ Q?pR0f_R1 8@r9P ?L 3 ?J,Z `=@ m$, |}4 d<D &3 n@Pq@ ` "@b P7&$@#p 4o`a [ pv:ߢ?Jݨ^NoA?WT>ĥdꔯ#0}kS\"LKL`6ok L?L  @v7 S@䢓 0bduc@ K@\$8e c@G;3_0nC  NnC@k `E (8&37r =P!9= `=; 8&cc00.=607`[78n 0|zS$ ,_&p0Cl@pY3 0`;86CZ/_ώr/MD/0֎Xo_<@ 9?bL S[8 Q'8ƀ[`4N`X@0kTc_} KSX/ 0F p56s/;DOS+K0NQ<|S0\p@\P SQe1@A8#d7=4\ZADRRps DdNW4G1m|[@>4@OOr='Au9qk/\$Tv<>!@ ZVlX"% n?e_J)@ ZSh" ` @,@-T@2pz@Mw@NcCXЀH7@@T9!_'*0[@ @2 D2 ,Ptl%iL%qa21 ?@!+x@0PA=@@d@' @i38 3<,1P"@b5 B 0P0@0'l@L @ d> Hs`J3&_N @,d7!@ X9 @p%?0)@M" PI@;+ e7@  ?@7`55#(qZPC.@4P D5@/0@ Td1 ߀1 m ɀ(d4P ( D40)> 0  RV@2i>P{@@)p ~& 9 {@1l: T7\`5 p-y`|1@<d@t?p xh= ŀp  K @/pXp2@Ow d pX* LI@ T' p4|@8 X:.-p@,`hzWQcAdfn@(%( ,@i `&915@ DZ q@;` Ӏ&p< @PqX/9%|# @RnnZ%2 PhHj<ArISx  H D+@Px$"0 ` HHlE ` (8m 7``_@Q (R[ 0XkL@$@ t%-]qV`yрq (f;pj8 P?6xB0 <,)#$ P"R-Pd&#@ 3‰MBab`63G[j0!&b@ 0LK}Ok `l>rb|m @0s4R(5ڜ @1<F')08qIFEI0L4z@ 0 N3b4 ǁi)@j ="H  p^5T@i"d $lg~MS(kZJvfq1 ? tAYA@8=NZ dh36 XF3 |&'@w^T$ PXtH@<Na4b `M . ݀X 00@1(,%P? @hiM4 @<pHR["`P?ڀ4P, tgp#@$Z@ V\nm$`l a[ѿd?W/`p,|ʀ' 4f# ?CC9@  ;`D6s\` O``3z K5Xx$_I@%@$XJY@ phd.͡OP pP6!@7 0 1] LhU x@K c @@h$ 8S!$u/p TN}׀; 0..(!G ZjS@`[(πc@@@":!y~L t\^h@: nBl8Tdz; @ <d= ^@`M>`ar-@0$0 0ŀ-@,9 @ L@A O$p$`=@'@ WpC\ @H108(> 0 hCck\; 4/"8'dR5R j$@-`Y6b:cX@Y. X&: FE@/ ` hkK#Pd 0yh C'@xK@#` r,y@ PP"]( P6}7f2d" >Ej)7 .T29 <i5,`l@@ tQX t6.v0 tHl®@<d]1@ .m@` )W8@ `=@P @PV@ ` ph9@5 % x|"Zt,`(Fe/@ @,,Cbc^|f!; |e &eL2,<@-x0/0)@|` P$n,)v rm`-;Dx6#~v9T 9c#99j [VO'yl(ou6hm`L ڀrch hc d@dp;p&@nx &ɡ_@6z ua `bc^Ur @ˑգ9l8Gb/',!Ѻ`v7HGdG£`r|.^cC+:N9ݎ1\v;M2|Xv9Y#D:ٍ hs$MԎLnl2 _q,ٜ0׎&úA;L֎ XtLonǴc#0pcCz8V֍1 7I )Ǧc } <8+P}| ; pFW2}t |U@wN{lU]ʀ4/*@=Ս@L Gt Ć *< ` zY=xo*L1;H'Do gy|`AFG@n ={8~ p i$T `;08@l!3BZ%lG@t#j$;j^oуv=;d B28'{ @ p 1B@QB!DbC@!B*`ݸd7qF_:9b#q`zd'2`?2ǚ8tn#Fr(oyȧѺA Fz_qGdl.9XNh 2\߸;K̑ Æ D!j nH8 ,[˖uCȦzJkGɂWxH_#9#Āɀ@ YsH3@q $A'*,=65 20xq$_|dCA0iI^|IcBrh,6%:G@R+ <('G{#-@c DlF%/fatP: 8*p!&HKO56AfQ @7l@@IhB. _tC%\Z, 8v@s =*\04m6 \$d*@pˌeE[@/0(fj<p ;:@P 0[@4``fh>j-Hf$.`: il4eG @|&YF3 YZ!&n @LZ@&RPh0\ fp(> l |pYDH, 4\ Ӌ9(&z&=.\s   T4I@r AKC qxF' @ VL| f AY(*y$jI[2 |Kjr@Yx &Ĉ+[*pP!0,X)@g(t瀠 XP@r@ r̀}  l&yet2X@=p MP(d@8$ < `uJ) .X @ Z=.?i, =Y% ڰ hYH@ -4)@\ kE t8yk=u+dJ~.# 0xt|@ 0  EaQh03$ 6ˡHwtm7QV'j'[pAs:ќ kPP" @h0@B! 0Z/@@Mc[2ĈS˪r,[ >Ӳv] [&@ PVKhluPS2p(0@Y 0wk7@BK (6\l" `(F+@kY\VVyRL0dKeܒd,/E `yIHܽ7E]^ |.f9,&i^tPޖT@{ɽ]ƗeR(o9r~Y_/՗pi)$_E 0xc^3_~'/LQ0yL}\_r4@_'L xL/̭` ۛ%0^iNL#S/L@rz)<YP pP_-B} /Gz< 0i˻ @AYI"Sx,8K$@g8IPZGe Z=3& 2Snp`~9 ԗl::@2h< liu@>-aX& a@ eLT2/L*&qe2ILT*d0-@-$RB2{L8@0s(f3f33l Ϥf_\fb25=@93Dg2ՙOU&!„l0L0<Ӗ˴g2_;0SI`3.f3 |x4j!M5s͜ ReC>s)$d,o,ȼY2%IϔI0a-B͠f $k-GVvE0_<(Ztk5L%/10GO o6e jbK:@stiH`b-7a6@ tla&M ʜd?M/x01kI'@ Xc6r"s af6e岲3MLxXmz6A9x)7^ $f Z wׄWDnY3@sl62VK$dUЖ,e j)bfn nymwqSya&6M7@s38i2&Rr(d"8 tU@).~&3|o.CM9x3 PcP p23CϔY[*7{ 'ߒx8=S+&@h Ph6MRʼnݜx07@hRb/ieItl|MDk5ˠܲ cb0՗C0 F/XSnt.5kMH& Ȝj:2̫SNv\3j0 50u^:EΫfչȤjYuvN R`-osc8n6fr4 6'RRؙYΚe=!9u&llg(.Mt06ٝMwhsI\^;-3Lf˩p ;N eyϞ'j>cO%>^N1l~R>vO%y{>g=~eϳ_B0M٦C=\Oh$0w>IiOS@J-%Sxx@-[;<@E'Pg t1_af3ye;('` J}=  \z7,g>y8#eIĜL hYl1Aλ+iáP;3@pxKM6r7eSny$AoPFYl^-ߍ'cG ll, 4{oU3%}IxK¥y4.eS;\Bm)/\aBpOMh3Ya8]PYfog8-M3@ vIT(HLa_h<HhhCeph0rL4,;1! -yh=t :0֡Pz(90C/;(D|!:|CF!z&D%F&K! Cˡesi)\D١&6#DCPhy DUі<(*uJSjLh9pVEO4#tD?eHtJN?PѕC,J]ZE!Yћ yWtBƢAѲ(]t!M='ѧ(At&:VEWѢVt/,|Ԣ%#;t(j-E#h)]E=uљhd&:݉f67w4sJ6FӢP3$Ee(C.NDnhFP(a47{"FߢQT%}D%zQ 0HdQt$Z>2Q(ct=BFrx Q(}4FT;jFMg, p$N6){:Z }dj?Rv( UG')y`HRZT) 넏Hwt5=VFR(7s"H 4RƁ4; HO@/P$G;5%iiG$mH6ͨixI@`VIW$ơ7z#mHPRi_t P\IiR(I:=>I(i 3Ćn0(F40* œrH6R>;J}QLȝR*#ՍG>)t8zI-;5D!IAgO rEVK#@@*IǞLM'J?C(+IRVi}Dj*EEɣt:*5>KCRi)A#-GE(4C:*m"pX Eݜ0-mzJ45J=K-H̦d /픺GxDZ0s;WfQt7(K7Rq0HRx_ݗУS(](} KJiʴ^*}b6L6Sd:*KoRf0fuvKnɴK3-\#tQ 2LkcggJ4Mӗt)Tfj$>M;Rit^Z5^L3ڴi6LǦrSij*%LGRTj02Si3n:5}M'R` Z8lFNߦ1i4ZJ7IţC&~9|Nt:=yF_STv2EoYSm)ӴQ7}(\)g#Us/K ĝbI%ityj5 dIRitnJ0垞NG74h*5՞M\z؉OwSbrPIYr_. Ke-q@.%K^hrs 2XNdhlJ n:CǟMA&` XCAJЪg 5Oѡ˟,s%pUG*@0aIŧ D"6%UP(ի2 jԀ*MRS92g'*WU4^JQԎ*>Vm_n0MhfX:V!ն:|zO G/ϪLuW]VIӍe*PbFUluZV#U)jzYb@aPa5J]I7U\UVs9NW甆*rR[US ht_WӫUVj{lCGgUZW-WAܪ`H#+O *^XUjv5_W*94*aVX 몆YaM2X @R!*\űJ3+V+{aNIi*bMX%T8t4Y) =z=]XՉxN\~C7)kc]VVTK44(k:g&XϬj h XUUъ* J'VBUǚdnWӮhtWh>ZDӪJi(K1RVMzh]Yݫ*iUxf5ZͫV:kuL YRuiŒ*W)T_@UYHk`՚k&L Sk3JkնFT]ջt,M A+*lU^YѭjVikz ݣYTVH jeE}VyPn[WMV[iWԊfXV+*GuO-x+۪quN< m*n[IRUߊOUM[ ׆#srS8SkzgX]i5j-r\ծs9M\ֱ'`qmHSS* zq52]Vk՚Z]ͮצkZt-vOU^ŵzmź\ VZpS&5v}RCKL$*wun][]|k_4}:yV^IkT~դO߮֗k5Is^ShE]UY㵷mN[]Խ+Jym^ծ*Wм^iWk 0vfZ]yU u JeV5zM^/־(U*~žWW+D ,QܫuJsmR\k5:%Hs9ckd"_j&Jv廎_W+׵{:2KzT,f^ӯT&jvzͿB_ϯV#Iu*`dREcV,zmRT ,U-6XcJXk vx~x(,kSځm>SM+j|E`0@6 m`ɰVXrjȵڂ`W +<𺺤aݰNX >3-bXW PՃ 욃]I U!v]RTQl[5~T?!9(f@;lM:`-՗*&t z=%y'>V#AE>M hy#$`LK"j)f-]˯erl0[RЖPn) -]˽%Y5pyT*UPj.4zRU;>ХtiD]:UWK%v]nK%2)9K5U y|^1)׹Df;ˌ,{/9K҄ib8N 3y "0"K6)ɖd+Q&SIbd*0 y4.329L%b1I&Ӊ lfU"3ɚ\^L0f%"[s4f6g3͚MLgfl&ݳ/p,c5HM_wf}N|k՜;W tsYe&h w_n/KgR3ʉ5O Z >hM2V|^Ԡ*(׉zd't%G+4kfhi6g3nPtLy]Z92 LEp*fbg+](4@ \SwY.(3)rn # ~a@a3Xf0AJNΦ2t\6Dn38U~ AʻiKTHݝk d=ۭak۹MiVZĭ`˵-^*Pΰy3ݚp'K` Nm[vm&0٪=Zn|{Zm(J+Sb75M gtJko[Ka hL.7fX|j.e N)-r, -)g$W l6jM!ֹTjAU9izm @,{[Lm@sU|E;I[Ge niMyK=Ϫ}֭`t4n}/vk6 Leև{4v8W\/Sr,0H=6 eŅ{bicw-4iV9N7@䶜lt&PJ ԞCU=fDܺ[]A7ղ hP.{yZ2T\]9! ԪJa ;Oym jgymr3*N"n6OLٹ܁֬D66@ņedXa^/m2< Tm 6l'"˨-hf k_ m{}6>\JyD8ݶfH pqZ'P'q\oS^/f&ֈ-q"n[n6K-sd_4ϼn`/k4t׷˫5rqU 'w:*2m~ڿn_o0r9 ljU Q}Km-ѡݙUׇ90#S9Tzq|e <}j/gddK.6)<.`ͦ  \|\;K{ܾs\JpY}m.M-ɖK> ܁Sނ4a{Ow( s`=g_Xl*}k˭nyGE-%`gutpͣ-O7\;`o#W5 |qa5X-UHs)/G:bpv8.e!/I =aL ve%Pmf5 l~dyӺK8\ lzk_fR剚nGP鮷5\lF={An߷ދxײ9QL -R#ߒW0bt(7\JC[he{tHݬpx 5庆UZp+Xަ=P.niK)0l4uj8&]q e;]8mrrOÌ_6 p[Epr ;'0D? 32xY!Eo0O07J0MK7x›paW-fT4Cgvf˥MZ6 xNadYn[v/ř2#%w&)n0Mݶ.[a?b1gHluNyϴ*w<o}۞0h@Yl W朸 Mo+LghMxk\kӳMlll4Ydsv4coO:t^I͸Ը',A1B;>y7>-XjMԍŝ%Z%VGfh1 Jۍ8ѹmFBuVOO+ptjZǀ*UB7E6j<{NB+PK(L!zYs;K\26860$8Se, ͎EcQ˴e˵Z-ŖdKo,8V*LcuQrBk cKxlS c%rtY<]cUd,Av\I]. Y&@Iݜsrv$d,Eji^bdŗPϞ)}/5$٦lד}d9'`,R dLlsIr1:Р3ɱ*V`P,)}0u9I4bf6K&3bZ1SScqZ6 !eјj̸,n.[c1{YlWs?L[,XfƿYpiL8>gYı}Vq4&ͶLnjLp>(kܘ$3aw&q3[6$EIc1tV:{ФhƻclvƵ1.pm:ƽdq(3KJ&9T1Y5;9tV-+Y,۝:%ODf 5SZm2jw`&?hU̖'3U,l>Ic 5y;^'aww<=~*g2WrV ۽m>N C t]a/ M9grٻ*߁KwDʏe2_0WF_A7nE>j[T6r˛̫%I+떃Xe.e*cf<;nĊ.'w\ؕA .`X+&&8>espذ ;g-6Vփ~^KTno?paUoV8cj mhyvdaf*'RrܬYBac4֏=AsPP@<A z|=.fI[ZDO[lx>B.yuC!7?sX13viٴvRcWKq6̍-[Ζ`f mi@~acO3'@Bd\(TuZb 2?փȶ.% E!.U  9"[lY{'f2򱓈Tɪ)N3ܓ,UuRdQ*"MZlb8kvɆXQ@lDb"eXYh+KGޑ_g=Z֏tۘd8.H1AOԀKƎYLw,4*g,M`r9kJfCUpch#OCgPeX,6%g Ǿ1794Koiw,)/%fhX7Wq"Mw3Yo^8/6MDZ4Jd1on%)aJ>%6(699+ϱ,P(^rvҤ9?A0lM)S=Wʭ-)kI)PLIS v/-]2{|7g3d x1+6af@]-S [C-w٬uiQ1 9Bc9?.XmXո+Ơm^[;{El1sUpqϴͳy=ASt/&پ=aNtSEMu-ìMpӿT`>Dײl`C1Mc}r@qrs' b~A_rZc1;r̉1!!=F.3B/i!3%4|\d!= K`l LBЧ$.{bl2׏cc/s[Znf. 1ofto@"Uiyfyقgp.dl B"%\ȲIs ̼,2c͡fYY|ji6PyԌ-5)Lt\9;67fljbdo@YP-aby,aW7y+;G:ŲxdowV>4rYm]M$ н4Znv*/f-iǙn%ӢA%1.loEYǭ-ڝ.Ʒus\4E gyo:7@ PxrƙM3O e4=m&S 50z@[N9gdtгŷ(KOd`oZq@=,G>'8 m: evFm7Wd-ۙvVz2r|Ă)Ӗ音ӞRÔuջb@ԙw[^i:,}h$v"ߝ hњ,`:Nb;dKYY9ϯhs {;h;1"hn3nnЩ%9~P]-uV]i>~7 NsDj uy Mz.CitԳZ6DÌ˦a.n_\00o ؕKh WUf"M#zf)-aN-T "0/n`L P? ϵM歚>@gG R&VUYģK3o[v[&ܲnY5nJ`oU[.hP=h\a_ PPNhOâh'\7VI/9@xÁ\|hfie@X\5 ]ӥy? MagÛ\Y/kz D|u/|6 ?NU/f@'}{e50d {o?o}qz!*[4E$nV_p+$xy^ѡl 6glE.sYDa;ngݜ4zs"LzXV]|6-k}BKw l2-/Auq58} Grl.wH{j>vZC,n zYj@ X܆ =eVi#ӺC[juzˠWЦ[ VyZJ;p9q6-HI)WНZrX`uzXo\6ɚ`4#;!nNh5gS[΅lt7cχЗ[&|7@Lnˆٺlp$:K-Cax-k,37z0R%K/G'}qϨ#t+_}n~w+^.7+\7hv-9濶tf*ލaۛvR'ߘ/G^1qP屌sIcփژ7?hNz̓1.isL!Hk$3)qŀȢ1 KUs'C~-+J+Umly,=@N\ii-MgvKc#ȶ < ۥxi},A64DȁA0B^!8[2R1}i#15"٥1\Qu]ePsf{3L/?Ӵ'ZEl}]0̟lـ;fvlE&_3S7=4#Geȿi6rpZ\6vd4#;pYl.mNei5s=֧7h:n4I dyiJ^%"vX댣73kjppoߢۦ䇳1yCo=Hjr3󚒬qOí%?M[[*g {@K9Nj~EVȢjvk.YuF˨g{g F;@jdQCIZZM&Pf ׄn oSԝ6hT-e\7-Zs}ZĬjcTYcEjѦsVCpc=$x$CvnK&MjY!dbes?([M_LT+j;f ~"lDgZ <{MQsf&àΦqجN!/nxM a;Xs|f#eɭLUSsh]zNx;n0*ӌiMc՟+=Mwp瘏i3oxa\C6eu~afZu2nxM gljۙfVھ\Of7w u.pYΊBzOCğZ ԓܲ3r7!\%q[!(`Zi{Z7{zޡ^7xs}l/o^>4[m52pLwO NNbO}_H & |brʺ^}z1LK5VXyNACQ=-]uj~&[ xxoQ~ }8xwxUo7bK$Nok3gqƔ=^f[j0{A/Js݄h0Ŏy]ݠ܆~yȾ/~ xm~=&q+=SBl񊾄b5)i9xbJ#c;ma_OJDmC].+Df6T[+@r@x$w69ھmDgxT0qWx!7gȽPόGj8wZ]asw?0qاy .T0"mYPw:g_og${{.FU=صԒ}> -lsw!\NCyN_6,=?Ixc8MP^~_Nլ)a-Bk7Mf3ps SW#ԉ/& ց~\Md;zq,ni}5Z63M")o^`;xWȏ\Q!Ep|莝?m]ɞ6WD*٢v"8dh򯚯^S4yM̪[:zsm {D}Si-.ly2b0ot r;<[?tM;3{1 \9ӆtִ{-q^iӤ}6Pz\ԞIm1S[I[ކ[aO((޸ :ص@?>f͒ڳvY{ܕƦffz8fFKv?K .l#d4Cl~lK%xcکlI*[oi<$+ M(8֜/i)ZkkMwͶvp;a lΉćmQMtn/Ms9]ݞ6_UlUܐNesO7od7! /Z\2W8Wƽn6zB[w}1np9~5n9#!珁7ۼ=%3mɭ4d_^@q%]V ZկsmCI!q[#f +t5`f6-j}[M6QRg O8N7uوxD;;MuS=dc6xV5;S΀6 t!wm=V7l 9oi.Ǟ ^Ur|lbBkty(tMwV$7uXtwV~Mt?:ϣpĭ L 0MࢋPlN/'G kx /NP(6&ymd-'qr2.#g1t ?a`:z/'G:킹2` O?uC6b喡fy}.kIedy)+Vsյ԰O9=EӚero;nnM6L,7]ߛÑS|p/7͈5vn{'@r幞+Kxs^<-?<.Oz yF9/^ g_ypnGܸs h\N(Kq_GqqgCցDzc+=;uq]k>@ǟ-?yRnkjkxtIǝ X!Wg`nfQ,ϕdW*n߆~/N ri{?ݮ` ;q7L2[Z2yiOT{j|#v. #sL|ĥj1ܹ@_*."rMm>5i#erl{.@o:y؝ ?kD x$|"a#h؉[Naqr7=I_Ӊg.AU = [բر :+#=ZkvxxŇvAnQEs㞙 Zgx{K+}G'JĹMJ1N&ᄋ. ;]EWkjib1]j[LpT^7C:yO, \/za/E5(=h--f{8^ثk]=ޛ+K0[:o/vƭ}ϸ] 9ڡ[|^[,yavyS%=~dcL۸_VS o`MB9k(yglwyX 4y՗Knq&0[5 {Wi^ gߖ~Î0n0\4;J0ܰawifO)oۛbߗWq_ߕ\-;Xd4D6ص0Z:TӾb7w>ijCALi l;b Ӌ^Dl0`,ߥalbfCq8*9h7VsˏwYU<DWs!!W< V,b_nP٨ٿlK߷7SrDx<kwuPM8`bky> Vùg& xeYmCņ]{ \ߵBź[)*ԝ XVM^e.[lwLf»FZ{\淖^۝vmVM^YC[m Ƣ^ٻi~z!=V:gsb; {źQFj5nkݪ*^T+g W^ؽ5[Sކn{}tOzOS`v۸;hdzoT/H3[@빃wZ{;ki9'=yBTGx;+-^ؓQ0ZUl"8/Ffvi]s3ݡ\ų][5Ԇ9{[e,iUjZ8nQZ_uq`bW|J빼ܪyn xN Wmqo=Y-;d#0=;lJ[ v\ƎֱÝ!v0q3spAn p} pwNϦwϊ/ff=V`>; <#P{ctn";j H:<+j? -(~оS'KK2-6bTwho v54pen};lgv|򖶬n򝳷#vGmxc%:jQm*ɳd-N턶ƥp$v zryۃ>kæ$zUp"ލ}kF /gtVxf}-]βyOHsa`%sބtEڙ& _."g/\XrKpRS˨g+Jw{[1d Ww?|w;cGqlrszݜ tfsvo ԦMí^c}Vbʼ-cU3oIחn03^Јv;@}x/1).hoy2._P^ׂwhMaqtOW_utbpTޫn ~`;=ܾݎ+jMt~.P09*`M-~ ^طyf(owk-u`i6nWtP͝?K^槶pXNw k6l#.CZsoCǂK-t5>L }b9,Ku(Oq3 tNM(LCӓmye;jkm\s 2Z3Z=mo^{zxU6/ms޶66wmڰ>#͏Ӌlc-Ƅc%VB2:}Y_$_suĸ] ~9p ܤ2]7qW׿]hQaa:>y_JyuS6n?:ǜԹ};wzl|{:?-Un(F ?;anxTneE5xgxub즫;lLtoP

D9+ X 2@ `` ^#P[G(O3p @< L+`U08@0!`@3 (0@,`4,@$d Pp#;&H;@ `@" qi*@ @ ]@0 0@ ` \@.р.Ђ]>p +@2p pj ,0 t6 D-@7 4!t@/p 0@70@@N {@ Uo981``  hB@ @* 7,I@7p@9L6$|@2w l` ; h @&.@/ \78ڀ?81d9<  I8 ܀ p@'0p>0^9b"@)@ 3`  M$n@Y* 70@# @4 m9P-1:h%@ @:Dt@ @/" ; )9P(y#\Z `,,=/ ,L-p x@%x^U"$@f:_4*!@7 @ 7p@: (z f@/ @ex+ ̀08@(PTـ#@": `7܀` |o@<3: pd0 d@/k,w08X 9 \l5 [:0<|@7%9(@tP H^@<)@*! &/ C@Q)<@+4N<a  l+ R:vp|g dz% ;Q6 t< |l(9@  > @=<@< <*;|@` ,/Q4$+p x=?`؀1$?0<,( @)@,,> @0 @u $ @`@( @X@$@@$8<@@$  1 L y.@ dT:.>` |P $* <* U)P @4` t&` : 4@=t@p8m@"pހ/0@)T^l' L@ @p (8*@@ 4 , sS"p ~@?Pŀ-ր#й0Dr;D0 C# e@?P@8@ <9 D?z'Pu@8;l@@ @3PL53> $/0K@)1 ۀ3  @ #=, lQ@/P ܀80 9@/  @p;{5 # @f  @+ H#4Ā=(+ 0@ @+d9$72`2؊2 PZ K< &`kπp 9@ z% M8lbP @?@NPPT ["U( n P4$@P L3Pt\ ` 0P 4 P@)pk@*@ .ŀ 0 p}@..@W@Q@1`p@ d@,@   PS4qk@ U- @ p  ],!P: Q14N@T7` dW@` \f; p@1 ,P ^$t@P  \$ 7` [@t)Ly.Ҁ1Q"`x $@ |`#`X PhZ)P <)x@= lp`kکgp'Drm@2cX99Dfxn:Pi+<E* t@-p@I ,*X= n&U>p77p=s O@+bL'p @0T; ]@ 4P xP<*up# \ ̀8X? ;@&(us \ p @. ˀa*O@/ T0  _G0p aPB@<@X@q!@,I#@sP@h @ N#F6 (:d\Pp@-i|@' q 8 ``93VA@> <o@@tӀ% ֶ\$H'd0 @1f H p!<@4 `$0,R1@,036 (V" h $XR H @? `J#<@.@L,Pp' #8@G@P8ATRP $7 1Px@!ݦ/`2 \=PR ` )@mx5'Y5y&&@@ 8@8 @d X@4P < Sp0./ $;@x xl (@.Еd& (0@ @<z,p6 0 0`@ۤ`Tu@p@ M^Pe,) Z2:XP 3p@{`tUdaY@0Pa |?@ D0j:P KD#@=Pe@1x20f ``Q 0tO/@i 0@lVR7@ D E=@ +N0e$ ;#Pt5` xqt 0 ETJX (@.` ۀP +  hl(p ׀4XU) 5L=-pH x '6^;6@Э,8y@2`xN@80 w@! @4p#,p @!`2 @ 0pfdf?wj;P{ F< 8Lf@4R@8rBti<^.PX# @p`Jb| $px2$П1@ j9@3& f0& Y 04l%@ͦ:6 ' ph /0 @> $& Lh Q@X \0 0U: Po(` 9$6 F=@3P,@3 1HZ(d5`Ae@ '-<@/ 6 DL> E'@ D{6@@ } Ɉ3pT͇<;` D@7 h#@]@6o#Ч l6* p, , hd\@& L@2`"`@? 9 Pʀ-0/ X' 7 #0 j2 P'/lBiTPx %P}>@0 &k@63@ _ 6B,pf3phjc< o$0*0 @= @`! )CI<@/q4=3`@eN? ? @ 0 }@$ L9@ 1p % 4p@3(H@p L'o ŀ#d@/@π= 6ƀP TW|:p@ @= @ H/ , l@/lZ@w H$ \@/p@90 b-p> 8 #J Y@ ڀ l<40  + 1.@.`(+0P@.LÀ @' 40@pB  @"H l LA50 P  p/Xt@bA@ |7 LN d/ d@':06 ,C57Ph\$'@LM@ jS r@ d@*>* F<U+ T@ 69+ 6+0o Cp@R-9@_@ p l@P-@l5. -Z8Op@&P 1q `lc l1@`!J@g+ @igp 3 Z-`@UW@0pG?0 ̘KC1P  ;4Oh ,;@@ .   0 a/0 ) / $6 \d@ , 1` }%pHyS@@' %@ 9  p6 RE9<@ \@ @"    p Cj &'t X/ @(6`ѹ  `@  s@0"7pls$ @ #K ;L@2 -"3pP@46 4T@@0ˀ0 @"0;/@@DFD*/-1 j@# @0 ! , p*41:Tn@T 0M@ Th= c <*P;@ 0@2\% 0O0  @ @Z4@ pA.0 Ā PE! XKK7 7@{@ . xd@T\&lL < (Ӏ-PH'pp @B>(0 1PH/>DR3{I``@T*40 P,u4R@8@@~) <#) ̖%`  *P4tQ @ @% \ 74HĶ-_H@! 4.-1090 :>T@7U\+p H$@ X.}*3H;l=R@0  T@ Y  @2@.6>` lɀ* p.0tg OTg@#@l+b@|Op. | PZp?P T 6P@1MXpP (9@ <Pp@P '0,pXD0@4T}@=`p @̧ 0 d`/4T؀D׭$0M@?p 0@?3$F@ do@+ @$d@` @2Zh pLn 0,|@- Lul,@h+0xQ@LL(@9ƺ@&@T@-TmcW0] J~8 hR@ P2 \@: m̀P $@# E,s xX pE YԂ+X' 𔺀47&6P D%@7pLi ̀ 8@4q@7d. + jDP%6PN|8F t[@B @!X1' S,7J%4 P@`2@ LEV `@/0 t ) @$0~@( d+$*88%b3` js@= '[k@ ] $w6 3 1@*P =P`@@9:, D,` x( 51 40 N@@ Ta Ԁ&5ϑ@)@@ A8P(@ ,.S)pt `p,)0( `l@=8q)@dc!  7  _(0`=@0S |?|; .@|!0ɀ `n9p(b@.Ԁ vKQ`\? ဲ@p ;` pF@Y1 (PD#!#@R?@,S2+(a$*@=ޛ9%'gQ p %1s%f^k)0(@20eCa`tn-@1P`%V(0\@2@ \|@*,.1 ;0 T1PPAࠥS65 t@1@- d@: 9 p6T-T,!:=6p[S 9.) 8q@$@T1  TY ~`=:>5@D)('f`  p@ph͙@2 _ ``* <60 D~0X+l=(@ .Y# S@ 70ծP @50 5֡* @1 f50 ΀ @p@a="Q5୲@9@o,e@= G8@ R ;P m@6xc @p _`t( -g,pk $`Xb/P &@9 o:l brH)$@3|V} 0p S+pHS"Pk"P\N\بH@0  ) $b#+h)@ c- D'P@)(l<@H&1 Y'ˀ І q@0 \n ppQ0 ?7p T:4!0hR@=p!p& Jr@FF bt5P*RVY 70 HӇ P }(TB X̀4VYdQP>` 7`xypa7 (@+ oIj)=`. y/Ptu֦ fvl@<P` 'pPeG8 @ D7 ,@% >`P9!V@<.`$=UZ(9 [@&  T(&=p%p p@Ua@,^)0P 0u'@,^r!o@:@t܀pS@ ,GOy+,@*`B)` /`7x0@Q$L=@"X8) @`:P^*@h&+@Y8 ,J `1x@#4 $& `p5( V T/P̀=w+@T0@= h@0m<pW@  xk@pG$4 Q@+?@3pJ/`1`?p| Pd: ! "D@_):0. `H,@ %THU0  k-@י?@q }  @ Ϩ4p 08[7:`Ue 1:@) -@ ׀6@ Ҁ;Dr@T g0 @=t@,pM#:0)ށ) ,6<P{9Ъ`:` # 4 <94`˶@0 HWs@ >@! T+0 [1FS3`|E - 30&q& @L@`8@2PVl@ `)0@^$@ f, :0 @ ""JyP3 ra@*` @DS: tN?, \$/@;L*,"#@d^[$P` p $P.@hyEۀ Hp0P@<U20< P, g$\` @: h@p @,  P T)P I @ !y@ ([l^ 9= $L\L r2@|р&0"$) .hXz@> XL@D T1PrTp׺. @ L& 2 0͗PG@ 0, ܱR HL*0DQ'  " $# \=@X@. 0)  ,x! 4 iCi:\@2й _ += (}#@*p @+T\` ـow ˀZ\D` &@kp ր% H $ p@-PKJ 04:8ɯ/ Xtb`|@`* k8.\̀ y 8\!s98h 0TV@8` XA7@d;\Ix ȓ@ 7|Pŀą۶+PT@  (Vg 4Z- @WC{5W\ X9y`0 %#:HP_Pvx@`pE70'@; [Fm&$tv`@vf@/X@<2$p0@ hR7` 8*Krv P]0;,hKB:r\Tr @U"fP x" 'cjF7 lVO$ql$ Sx~ZI` &"[k 8@  [4@x5?Np 8W!P h8T+^/; ` 0|[ `0]:RUvFLg6pi][0  Ҁ a $>[1@;xJl _@ P=b x/,s)j*|`m@>0?@@X$B ,-5t x}(š@ PJv:1 p\yP@/Ъb P}@|)44 (xJр :<L  O5 x^<0;@ m&p./  HY- x:$9/ 8qG0<1  ( p^ˀ{@*`h  8zM 4D]@8~f@9 @@l@8 @0x@.$60tŀo0 pPTuX9&8>߀&@7@ Hd:Jhr՘6 4m~( |yQ`D8>-4  h~@pf 0%8fX'@Z/M@ԊpTY"@m@$6'DCav] \3  <jpW@$8=Lb&eY쭥? `PXj@0 0t`.wP2` l@g@: lFP`Lra q`DFc& hd~G@)P m!;@ p$@;0Nrŀ1@0T @Ppx8 `BK܀  0`99- @R3@ >@`,X'H]l@@P lO ` ˚Ю1 , )@ p2-+e 8t&v@8Pm9]%`@\3x{~/x_5K N{  t:ƀ&#F@"v pd$@ Tʀ]@@ Hs,(8@Ӄ z@ (0{  @P$ HRpg"P @P"b3k;@ P `Tp` `N4@'#W`1 F6E HL+!` 0 p`rܰ @@PRYl@ `hO(QxB~{8 HT*@@Pl/x b @*`  Oݯp*T1۳$j EM*_ P0>/lj63)@L: HVCP pT0fu% 4@'  0`Pi=Rti: X;!0$$!\g?D5@+ P. >S+@X$`f( ]D?PDZb:ae #hl3 ,Z6 jph@kd;@ m{@  P.@ JD& : ;FHd #.E5@0,B<uv2Op@1@ D pAõI@pt3Kh Dilhs%DxZ56 .`0.p4 pv3X(Bb8@ @ ; T+s&`Ui8Y@0(@O@+X4L.2x,/,(* b2}:X@4  ,>7JMpP,7 HhV+  xr~v5+f/j(zMNpxT0e 0a" ]-` 5A%!) *"5#Om6@U`m>2nW Pk`A T$ P@' fB( ` ~\?Hc@ a+"W`ɀĂX "@dx #z1`~$CH<[Z"@~Anm" A l$ ǃsA%`W@ ,r@ 8V©0z lx y1lO d` - =H00H%Z!fP90$5Z 1@[AS& C!c| <8@ )C!yhG 0p!1CR< H:z=(pA Gbd,s0!a-jKF'م/F\ qx=qO1cHaT,L'D ݪ\AZ ANp3$ sAq3?r A( sH$2)!i2qP), !I P ! \B2!1wD+QdK 8CDR5r%g!, C)Cv> Cd $cI yh#q+ 1<^DGqB`C6ېx<r,B45dL ȕKrDHG:#z$<͒`r0ILxB@!d`x_=TchH>N Ts0 QPtGLA @H~TD Gc r\@GbA" LE;bځbrAI / HF +fīH_(@ E+lpAZ\!TbqH Lx[ɐNf m$tr|A iط#nҐ`M5vyVxxN œ3HdA=dOj+#" d,F2R O~ȀsrxP'JXd<*6V_Av&E$> LU0/ ( #Â2I_xHWDIF*)R;Gt FyQA v  P@' ; +}481lAa' 8F%2IlP*.2V)Q#єJNM9S K@a4i<8nqeTyQ*J.K颬V) JKe  |2bR+vPP'j 0I*@ a9&SPX8 W7c|A2+!g墲Q RB*ek@c1 i%^9T, bSy d5EuATd1J婲R"4GA /1 }v\[+ۏ:KQIQ@-}1I%"! - KE%r^)h7-$ I|-K%}ٶ\Qw D%L6@3Jh `3A`4 .^P>"\d3C[no%@dD~ 690E3sHyR`w &$i8T* 'L;okg}71ezL/hbKL H3@39dH%xdRNƐ@8#ޘjM$ pr5@벭y@B2؉5"ƬE#țL,9>/N!DQn= 8y$y>S|Kg!I6 fb1>IgA`X??M@P#PAAߔB"6%a7B 4 pd^?NEXsr`!H 8%v{6ƹ`9p{z0 fhcE8.73aZpl:G TC|(ޟ{yx :Z9`6"gr-_ `9ys2hpy+#OʠeBB+BTY`ab 1Lca,l ;(rV$A-n)d2 3Ƃ%\vZP:h9 Y4eQ͠f*y1*"@II8; chY {3:.sFgrBePLВ*o(dnIDiHAi9LdDA  0Z$ Gd |ZbĀo{r2mP`@Np fbdQ&f”\B $ɓ{HFs0I F`飴 f"BF"* O&"!?"<=aBQQ]Hڇp@%@ LZ"e`Ed LAܑɡd|,Ð*p#$8@A} )$VNʧP)=@TBl "t=Z" d Fa!XFo@t {Qx >xs7Sh"<?i4- ErHCBCvp`)Z| GoQoȅ2p$o@Q@!v52U\EّT+9 F |% ~C {(8${E% l(5Gr{\,sH:-URE=V]Ћ'}Q_4 |Fhx4M VAmd4ji^Gá~ @r=d4CK(QA*Y|/̈da#t=zC!bIr9,zTE'G$>dytKCK0i4/YG'"G{Iߤh12 $ % OzPJ<4 فet Lz7*H2&33k1#EtCpx m $$ PN4hzt4B@ Jaoλq#*u8zcFB9>+=t"p'= tJen q.^G'WF*J(+:NP~/ @cH#[R4@Iw?SJKGv̠+|-|mT,UK1KoxTM^QʀJd!̥ۇviRexR@_:ȇ(6@F {6R:b`-YZ+҆M K]Se^NlRe,v&=IS8B L4SʹV3uLq 4el# ˲hixz*aXlQ=tf Ԛ65qJn[j:4 wә!hj$ڦnJdžrjf/4MYu5xAoj0͚<\[3 K3S)2m:dܔQ 薣 7]4n,E^L[iT>0N )AuZ4_͍۠vJ7HOk4x~CS@lj=@ϦBӶQ:=("S#eZ&`&S)Z Z*Gt\Z?.ЧmhaX1 Nu pN}STtj<Mu8}BO!yAL iU|J>m?P%ԣByjL#̐+t$'2MU&H9HV (<:tf!) 0#z0BP,#zUhKT UDy͑LH؉VΟ38V)k:GjU*̊vG~ W0B gQi$x`UŪ""RfuffU UPi&;i8?L 冒LUa(l)UC!c7=]wjf`/5 y `Pt: "Hc8F:!LMG)Ga T2 <PX1 U CGҜh%Dj6@LO4ʆZ6dMK,YY n YLVVj5ȚnG{C̪dYYjVhjuVEkWO$$+  " W ᛱyP9\B#q#]6YӬO @eYKLV'AժgZ VVX+ԡIg |VXݑ|D7Z{qV,롵תh$^n` h}Z4`me+eM>_d Cg[[ʆlBrmM&T 5 1lU[ u*O4H*kMAHWsv됵):o5\Q 0H$fdG g]\J!RG)H\Bj@9L\Ҏ5jKAIHU|#33O[~7-?` X}-v*}ivPgM v Nu@ U*r7*hfcj vjEyл$ӮVTJr*t +S "`w X}E H#8N˂/(z*>0KOVk yx&^m׃54X&m\Az(huzE 0]߮W+z1-ū!rx^ծWZ@X +?"Pu, m[".ɑku}=.X_׻{ah^(B G_^Rcȴ+;j9u`ѓXI;=^}n+u@&@ -16]k+A;P6430W5[xbم5*J_ 5ٺnݶ AY)ZRPVQpc JGSa/ ?$,t%*@H-S &`=WՅx5P+a(!&Z`g=\`˄Vaa [؝ {Ú&-dؗpYNa20kx~@/dEM Xb|q@O]wXtfuL.>"/ư(vke 䄉Edzc}0pKgcHY'e <?_u 3$ kDb PԿ#>Ԃh"@hwc$N Ȅ{zL UNa!|XvKbgX14[(&6UJrO50_i%YuK?A"Q5G$L%͌cj}5f c6E xq H'P4fͣl&V̪@Ԛl1U&u XgUXɲ$NJ{a&@ aj XA-{cm&/+`|%be_0VgVX[KE.˖ͱ*~ t[ =H&)N@`ei"Zm>A Zx:^SQ4 @Yݬ,ZՌn0cZ! UUH1ͶeKj c5pn_S9`3hZ(uփiu?lgC2хmxkRm[QrT8˂_YkK\`s `GXT& M>\V!dgIVdvٓllֽ0fy 6Ɔ8בlcor%TR\4C ܐE}U) DdZ JE¨ R.Ҳ!#5HH=˨8TG:zF@ye؍FQk4}0(-Lm} %ⳓHn&tYGQs4:ڧ"GHH:=GSbG$JAYBU)oHXbe[WeD5^x%tXM`RUDndeGIUBنjPQ*T;=Lz 52F-N#Xp1K`o)ASVH")htNPšTvi !3xCK]#\hGb-8tQ{D%Hkw׆$@HD!GuSK\Cu@9HёH#pZ|I*C0PmycdX0>"EmBș>z&4UHMǏ$!oa fsA>!n8li] C(PHT%`(g:q9`[XlidRpd$'I&bG;@j qs`B+BJvhWn$GmPgʷ= 1d+\8XD\)%0[L"@U>t-*4" 'Br!Ers"Qjo 8H@~ ()$52پ%ߪplQGp!À򛺃0H.ˎp)Kf$Zl`0Qnxd \UOM 7{;N|CT*`/kb/Y6zܖ1B4f_5$Nɓ4,py_2.:ZLkqϸu܀I5\+FŅ>A!F5C\H. @0ݍfa`49WT ߀qT5$+Ew\,.ǽq:PnTJl6Ѹ\P)0U`QH _=PVaq%y]wa2UE_\ADFr\=.֏ksY217%nCM\T f6ƃy@Sxzs\J8ג+ tӹ]_BrVB <}מg .\]./=tܭȥr}FQnqyF]1YL5\@3M2t]wr8]Nw&s$]unds-t*gW78/;AaߑS5rn2W'uud<u`t \.9׭Սl^uչ4dkiruW\V.A_piͽ%.&v9'Юc/ yFv]nWw`~bH-a,sù;]nT`L$B s5q')H($6\|wY]eRȋ]vo'!W$t(7s˷^viݧtry۹\Veyw][# TknSs\vn:;}Tyw^x`<Xك$u;v\7o@+e&Ezew٭zz \R;7+uz.-K%o @ @.AxZrzjO9;%uRpedDjL98`{^d{}Ru5]n2-q5 uM~׶[֟ڟn:u[ 2S7rr"sTU2o'풗UT`z3` CyT/cߊ7˶ya E3 _Ex @R|_V+W\=WrÕ3ʥekߡ`Zw^s;^/7ke.dk@4jn}H3 4Z!g`Kס(N} Zv @mHWj` dXw+gdcHXUC1GeNz $Pk?A& Ou@X\&  rB` `< ͩ d9 )0]4ha Zߌ>0ђ!@3.D`T  〩f_V.wT. rzQelvx4" E\@mFp7ҝ*Z\A6WU<Êbű_x0+B1u 0`$ %Kp'xGK `0AG`.ڗJ1i:cK;>-{ښh4lgjKw@t"ᖰ@!Xj4^Ղ # v}sm`<1-sy^V0M 9vŸ`ځO%uú6JAì `?q\.<hэ}+]nC)R2e2 U$?:H H!_Y/aۑA0H5!W_ү4*& ?L700ׅ鶄_ >c&hb9aT2 C)O{X8Na!) k7޾)VY`aЇ& G(a`q4 &?bv`X~hsFk\0#D\+'L`053B:`8dB4 Ii Gu|]op5osbXvX'+ˊfEZ}EpK3czb1x%lu 3Ýcp3L'f>I<5Z\pX5VwMR Ա 5f_ZᲮ+6 kpYqO9L}|<0Qc)Dh+ՐoJVVI!搙-wKn9= %ax('>*)vR A l #_m9\ |& #4&;c5s+JFmG%xsçpq;N(6}'=w1 Q b"΋98oFF^8m|yL1g` 0~\f7@L/h?[8m6XKy,?(Ǐ7+0Vxx0}  Dd\SfBVP4W,C imPg+5(-vtM{U\8Zϴ%@mq6롳ZXq.K/A\ AWmܬ߁7EW<7lt|?2p@ }W [GH eS@ 眆уz.H `<T3%~NX>h3D‚91?p| X a`)ae لJ⼉#nB!.{ >*+e3$N JsJBC@-&Ł^HGc%g0 fq^9@w:*@Ȑ5DReNtCtff4igG`phXa kB@ 00?gLFl Ǧ@$+Hm>_.iF'?I0Ip hrDg&Aê(74 u` b9>kApV` Тa {t#mXG9&@nFwbL/ ^?Ċ ?Y~P5r!(X4 C$]F =ycҠJ -Ҳ0*FCY>5|"ҭ8oJ,P,bnqq6:=b(w rQ9@Z"@/T:iBX5畕jgQ`2}8Yih@"`x0fBr>GCz ܢ=' I`f/tJZ4>3@kJO:?8zn,BA!UF]hwqLܝ3_ nVePbHCZD ܡ6QO\4)F5Oah,m#Tb5-JCE8TV+xzl .)ؐ{`C ;v9`bm%8ic 9P(mt@@!ޘ"G0V Dϩt|`a(* ҎSK8N_ a!AlICQ4xxhZ H2 6YgI45I3Ôzp KC^TZT0Va|a-)h-TuҪS|( c0/vJW x3# FP FN:faJQ*\#j@jE8Bt3'V.` 0PV6 Lc3V{wS  t ACaF256ΩCh!1iQ3z? 'x]柒| T U2LB2g*k`8t%'ͧk} Lܲy\Pk6wqͼUk3(c.`z/ƻkM53=2߁޴_AP¨t\P1~Y%ΣB8Hlxx[uO&$8>)SUv$b!|CQ-dZaH"4wTFO+fk@@M9;Ѥ҃#s9S 꺲?H- 4:A먦Z*n5Z?֐C'~Ɍ2@C!ևF`ՙH@G- 묆`d;%fD0xOVgB Y^-":4.rgQ !~, kt;eEOdڽ#]hVi9 Nf(l`=pd/8Ӎ7bQh^wt^ d7+s1 JS#L`[A|Zy1U\4cyQ\1LF&Lepmט"*)Ξ"hkԘ4Abt l !E r Ys$U c AW 4-8 k2T`^03$υC'<' lD[:Q{h\a*.f3:^+7OXs4`V:ٝhKs̸Ls n`dT)p62S}/W*ړb"--- pOVL-9umHhҞ!܈(⃮O77gyG+<3BP>/,9N4ڕ>h(lm3l׶2@G6cЍ)Z0(Gk+m^xȰ`lǀF0 e`?X_FJbeh? S}a^cgԂv!nHYM$s\Om4xQîr[X,{r{`0{M.sh4{nsp8{Mssprng2.0/DOCS/1100644 764 764 2767 6736173533 12264 0ustar chwangchwang The new SPRNG Using the previous version of SPRNG, a user can use only one of the SPRNG generators in one run of the program. The objective of the new version is to combine the current random number generators (RNGs) into a single library so that a user can use all of them in a single program at a same time. Changes to the user interface The user now is able to and needs to specify the type of RNG when a random number stream is initialized. We add one integer argument rng_type to the front of the argument list of the function init_sprng. int *init_sprng(int rng_type, int stream_number, int nstreams, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer streamnum, integer nstreams, integer seed, integer param) User can sprcify one of the follows for rng_type: SPRNG_LFG SPRNG_LCG SPRNG_LCG64 SPRNG_CMRG SPRNG_MLFG SPRNG_PMLCG The following macros are added to sprng.h and sprng_f.h: #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 For simple interface, a user can only have one random number stream at one time since he doesn't specify stream ID. The default generator is "SPRNG_LFG". User still can change RNG at runtime by calling init_sprng: int *init_sprng(int rng_type, int seed, int rng_parameter) SPRNG_POINTER init_sprng(integer rng_type, integer seed, integer param) sprng2.0/DOCS/new_sprng.ps.Z100644 764 764 205501 6736173533 15006 0ustar chwangchwang%B@"7bʴ%)9:@kRC#'4t@ȑ㤔0dҌ D=ŘGv ھĶ'jPUmąiS(uŅSۧR֓)CDVΓ2Kݔe'K]Dh=oW[7N6B9An|TRB]U)qޕ5 ]Y)kDr4!IEf1SR' grV&6xA{`.,eTrJE}u#]ROc=]7Ns\]&4D#O}0q?~usoSzbT_V_217n'eW{ +sUuuWg0/W ('FeRDŽ0-+d ‚<7K<=>z&qDTLw@tg$&B p4N/K2s4]1&n(m'opr!p{Tbx؂.(cF^s!oB|3aUD:GBh.X2[3"~GD)c*~7m5 xC'U{EMM.{0.Ӌ.t2;)~TzH$ãn'oЎRebhU_C).3).d2%|ByO=Y\vcs+C{%A!B#)!1i$!&17"#$8{0tM2?#;V3ZCn #B/\C'6 i֑Vb1@CaΉk\i5r;ewvrٛrI=)yifayr♗ W&T|)Ol>Ϲ)q@ۉKH$)tPpm1stJ2ut2R7JRJ5("n%9ғIT~K"'l'QRL\AR0="Un桘Hz+XaI't1A4K>VJ* &[([_8FLm3XKx8p7%KI'F>3 ,6 7DHDJ+3z1%&DvJB{-IU)s^{`hD4C+ бi KYH0˴}²]K%5BR+Vtk)#`y!{F% @29{?{ukkG{&iմB2rqbJG'NKsu.N#q2J=;0Ac:c`&tiTpЇ"&M?AMɇpra0='4C]'v`' ziyQ $EUy80y7Py3%tO' x`.5 LSod0{kƢ,Y}G)}+6Kb{) IZ"  B$PA&A9[!$Il$LC s>Lsp;,2ULca<sZS5fŪ7np("Y`CM"K;EU6U!kЭ퇭JBS)2&F )O5/?יy(ő+h>,AAO$c`1 ŠMr 0/#KV߱EHqV np5 &%yd++“-,<9P8HQ34Qe#W0aYqtVQkR! `a A '1FlJg<&3E9nC`FEFP74hnA qC3PA 9"2![ >0~DA秞8>>)~09s|456 1P278uN"3@|>nAFE09{NFpH3 F@^|;59e~}Wn5 mzQ>&}nD^^30Ninkb^3 .C^onCP o擲yN.ێ芞 ne_|^Ak%OHf~nAPx>.Jmz4 n뒏E`ꚯt~N/Re/D4:oNh/! ~?!~JF0!>4"q./!%?_ qEE4>ˏm^lN{ޜs&ҫsᕹ1D^N-@yf7G+}B`: tC]I3~ ;_1|C$ jo>' I-AS[0@DsW hta~뒞;浇ȃ`SGP>:{{M mʠ|tiN;&q: ._ y?b7jΫ y{wFa3n=4'f@o 8 Š }7ğ20€!X|o @G COž"`zoL@7lv6&BްM4B{8`Rgz̓u@yJ],fNJu^[soXW(by! @tގ?r =磘Kuo-e"ݦskQ݇dݞLPq% [0MgLݹs{KP b=Ҝ3x.*EVߚw/O<ևVas2`j=v$wE/hJ8!"⋸vB;9I_xEuN@[;wp7&DL#CXCnunT3G8+ds%^i@wuFs=Z2ODxiy5.¢â[qջV(1A9dLz,€Xء.qDDb]XnxJso !uT]AB9`"X Į,~k(Cdn:"``cmn3;bwb(,sn9(삎t8 +l^x}=5ux9BXܹ3xHDߑɒ*b4R1`F a5$j.nG޸ xL,ټW^2uoeD4!Ô(N[{Fzq 1Ǜ {f6Ihߑwq۩E9$8L{*OgIcGd*ۡSuN "l(ssxTK2E ͫenE3Wb&Tv;:B)]yTs.2n;hyV))1 |1AZ  w1F: #$ofsO0 "A)8_ZW0 <a۫nM%ߌtŵg%{:- ˘rQe|m:iT%6Ls2o6<8#z2/ⱹ$#vKO'saȺX?: 9e:x;/*S&pG8gg`w  DayN3mcL4tEqA6$*:stv8>+=?ܔLmq0QswjG!ㅄyf=O9w=oP:F=_4o=0 !tb`3g^AG|Bv 4 V:t/0@;È_"AU"[2ǕH"gvQO:x)#tSMf;6im<{}9Wܘ4ӑhdv5ܩ67ڡTN:"5do;7H]y_GR8絓(=B"ᛳb=LG$k:X )Lv2JG utU:b̓nn)r 6 RHX}I3b -.]{SqA?3:Zz +{UG'%_9:[yθLK-EAˋ`Q^>7m~-),U >*7Uu:ښ m=9B !yOWUSKtK{w-tTuRdoB`! y}r@QXb ?e{Z; ԉ9zGzEpqbMbB3x sT{G@&e}FY;)&;QJP--U}0fBWz$%/h}L72UTV5h)N>JTWD|ΉR4*Hcb?|j(qbMG㶝afY8, o͟x*1uLZ-tlPDc{tڳ Bӊj?u~5 էd{t&D+pRFWFi4>NN\ rءʁ>+L/VD[)CPʍ+5cQ t ;d=|ڕT im;N ;ee-=0o 潪Iլh14fSHW;,k1N@kxįJbeuūZGݦ'8/KcS9KvLTqQ7ہ6>&ve;urAZa+;tzyLe@4t?.Ybփ oF^g+`6}9`-1>"*ɗ}}~5Od?{ר{\k}sLU: /-7K=y[mC>gWfh vzˎhb!D>=Q-vҐ^+eE06Rց @etFSro0YF;_Xguٺ6wH ī|BTsseq:Gu,FG<$YW)>C.FAh^S$7 UJ4 \x'D) K}g@K:M {&+r*h5d4S!,Cq:z6g-rˉH2)9T9sGQGJ'E^7.:{xO_òsW Ѓ>/X%$xTiA'j&11Zqʴ߀,Q僂-E ^U,[ `@N5q52@Zâ65W:PM=K}t@C c,#tz/d57FRѼ`gc Ꮧf/ Q*2̦s2BUvW= P""n UKf1zssѰE)da]vSRn+)9@!<7RgA!H{S' J^޺ zΥ6L  5O xuRq^(9]Wt s뮋]3x ed[ba-YQȡaxK8j 0P!"q,̡zÎ#7?}z;ԀNܥE$̈́љ jcn LjcNywpJ?"0}]/݁A>_YcI JywSX"ݔnN,r$b/XEK$rNJI*/.Pc7f.A:o*b֊H7q^ph>>ua>kA%dOB: ]D59 yc[Ll~5l{8wa:zJJ+ShZYF&J˜YNYI1U2 bu#ce&hNqN/8Cp J6.E a ƹ{tX._ GeM8$vk4)o .` 9[dWZD蚫b zNV*{Zȗ^hgpZc5SU}cql>vJUsusw*J41mdBu0Ki.P/dOWVwDs)Y(giޅߏFd>'%ҫ? AJ5/(ɹ@ Ku+"C&y4b+4 ӎJh{t)=Z{*NW{q fܧ:})q\cG $No=46%svYK6odfpq|o#*Es/gS=sW͹:< zbM{ݱZcw&Ew''sW1bx_vpWB]Z0u̮8Mqlcj~\ZhbV1z['aWK?G~{vno.{V:j|?k@xEШ (,='5,-BmE7y`mU\luoV8XԜ'w8><]켙0[mD>ҞA|C&O}MAHN/\r"#=?s?L|C d ? &\PrӼ+T'̠rt`B>@\Cf(EKpewf@.om28y5e G{qqn^S{h ֢2#-ⳅ p8".|ɯG@qN[Pܡ)A>a xyV [˵)y%f,mDdG|dO\g*3dvAg\d,y8ien=xFo@2-K[`"x8I8oPxZu+N=yO;Xp %vYf\KqT{;y2S p{tt7$}ҫ,a̲I<lV#̙$\x gKp\WWˎ,${}Ҁ62W/ CrV_p-kvف&J\>G縥ȂiVӜJ4|@hHlp#ux "^6ɸr< dx<1W-P&3: 87Քǔ׽gwx `}uiXZ1 ˼:+cx9 z]23͟ ŇזS2{[8ºq%K)@ʓt_cMdqV`$w;ç֌IV;EmQk_Poyk U4f<plH̄b g ;hLn~dTr>(vبmFv&}<_ݟG9w:CI艾:`NM_rn݇jU !!Q!菶SD07=ٟ}M݇<cwICP(p%T%>_ ??6V c!A_WUI?$}jЦ(5TO+q%^adґQ&9-]Xzp~ٓ9Okh'VR}] ӭ^ ]G$4XJmQ3DDuYs*d]T=%dyC_֖IZh=wx/UfPȷ:Iu)In_;Y#&%bm}EOx=NeE+lvVY6TCf v`pgVY!#)IϺÔ})$7t\`. Ѡ7?^Ы9c6}ю*D#Rΰ!=TvQJ3(I:^1|R; ׃GqFޞC ( w$Uk}\80p}K2>hTm -ŃYs8z'gٔTIJv_4Gnj|9ԀdڭveEyUKD6TN`]>sJRhZ ΁8Id@W1]eJ8/`AĹ/QE!t]`vTf5T>T&?vx8:YW')cP`4ShvٝSHNe9G׆U%;W tVjxgHF̞ed -sU(;-\ kAvx`;XXxԄnB:d9ES<;5DLՋ݆^#FA-:1nhEKƹLH9Ysu^pguG9D3;_F%\SdSgb:@]NY^OvE[eOR n:[H(;QI_e2֌4:^O >}dxa`X8y(׭9T;{ӳddK SHP9x>Ԡ}dn5>P8I=bQRQ6rHa@T]a:І!9)PyBOHMEeQỦg8]K͈ΌxdY;N¶}5%!R-`CPOY58Q%r!>}e$F<׮W0 ܇[~8W!=C` \f-b^7/yNU$2@.R[%JD'aK(qouO4A%s"<4w\9d]aDSu?1wd2mYVNI|ݓx={`'9~-A]Dch>rNjS*R$@Gԭ'M DA@DNЏX,?ϓ@GV0YD@:"PPxk#ibdT*2{qnƕ*;6NcIn-cIGd$Hbs'Z9Ngoڠ7CvS5\s!8IkeP0.?EXAD5PGI]d69;Qf4$͇햣3yw[w_m9KQR4X%rJ٠W!vN\JT^11fDx]D$d(\M=(MTCPDί5\:^JeLuMDh#9z&(R]L&ђ/!8M1!_SR3iqm|$BNӌI(yxƤt,mU~dRAXuKڧI9#Cj=9G;1@$s!M06%EݯMO%]HkqohCmLJNvL6F8AN@XwqNRmUyE[t>l hqRGYYre 6%cP*&`=(!CQ_!JNJovvTx}pfNdy^iX?H}=`5fd\bxXE<P.9sM`5\?D7?8, O=Ng4QƎmx31.%e: 9a:IB-E^D֕CWc ]x[MAUOʅ VzdJt\ywmwSw7c\J??gpa@) ѕ`5=qUPnNo[2)XHYV2E!}=F =#L똈Gڳ$hZF58&>}I 4D:!ؑ%p&XHe#36P{c&eؕ]@ C&JS;0"񝄙n;'7d}UCSh:9}#f@JVZue+cqj \Y91_=wDtԩ]RPˊ%QNErM>QZ3Xq:`'e%}V<(:d)NJQѐ%}\Mw>0E$WfiCӓQ/¤dUstMW()kW:NXABI;X{Aw|^W-;M:P~=ǠTNP`5cyt;T8QuHf^-tV"^cNtˁ{)bFftq8u$ZUĠ"E0~&u$=z޳;Gmr[*E-5ʼnK鎘mXnID& ~GnF8+x N \b#hgVt-Qnd'%T:֚:Pj4^γ OG$aG[-=3U{gPu7wbEMUn/DtyyzY'-=gaH][DqΗcbjC{i 'l%@9恦5'tsv}M ]6#qO:b?T᚜yo}DݹyTl9egw;:t\A!oIс:_XTw9{ _R@X|eff0ya,fLfS hW簖kIpb eBnUN jhI$ Wۣ't)OjjF\)a`AfbaTeduD!|n\)Ag4/*QOX%m.A0Yݕ%-S:^O\Ww@ |EVPr|)Ub2ŖM[R@R h]%ІRSTPMeCw`a_'%mjGN$tE\UfafI\]utaHh8 jPl&o:}fvRDqv&9McD&DR4jBhucÏ<5$eS!g=h#Ayysu"GW|ImuJ3P$B9l&PsR٫ㄯC]*qB(*_Ʌ qߓdB. +D6|>$F`\!&Vǐ2 UsBA WB KM'+x}WH65?2Ҹtnm#c:F>x`WTQړ,fGIQIjRX$*S[E:Vfʕ#'AU?L?T6.EdHM~3T6<҄3gʅ=oZD=e*V-F[!]IÏ̈́M|%#R<cEaRHR#=K'z!AW4U"`dM\gT!MJ`wIDUzIN+ ˴$oЭ]66.#cErtQ$$vVA;f98];~ +U<=Ir1J=B]( @ XϴE`eӸ v`+ajD:wh+$JFex(UQ ROy9B?P_U_0rgLE;qT@1DHPNcv_Ho2Y:JvRpjS[V$,ԡtтsHdRSIlhLݭE_ DkZUZ㴘k|'~"a,jFś Ax#'U$ DeflaJG_D|\ ΪȦD۹NJ>^;2' 鈙G7Pcs^:#~*JFE16IBN_)֫MZ E!z' L(rr)m;]auLlVyN=w58.vOThPe~BN$^$नN&:=V*;V([+WzݠtG᧓ky.8bSӪQ0(+tohU;Wly?VܹϲD-%.;X'SΣEz`vċ*j3n@ĩEhhu8VbZܻ3L3**ֲ`⪅ BMO?DZ6Sw%{Z8G^="橉H,~as JZMHVǬR? w=,JŽyQPeVGZ%ogp;s,s-s= >QJf}pSIFҗu.NǸJoW88JOE[ĸE% 76d]%cp;GΒk7yb[4R`\a?%y@?~4BmZ'cFR)+OgTl3(nGah$HyM#Eu<"}bӶsJ>.m(UZ4ReN*"'wohPrh;Y; t[|%|{ݒGD';,c zԖ{ScJzQzͶLZ:jzh V$풝;V1 EfY'4U:0*U"5 |`c:ZLBp* Z)C6mmf+KkGbͲb8(Nم1ᙶFլg*Rh%}~Ёpd|ѩP9tNR,ZK9m+.1{TlQ Qߚͮ:`]azZݴkK*>,XQ?(R |!u.Qq9)BE{T+Ė Y[aV\酻h(EJ=|S}hn&O;^'f]aa`IWIQp+Zcv`3dbě ڞ,>gq骄ϑlz4!c l쌪|N6y84:adSʺN,#THO/9O@lydKImudt[& ^-T MJiV}=Q+@eD#ײ;eR<vQħ>KʻrnDFP(1VC^v[dV@d4)H=g`[4ٺT=PZU+nHmLZm5Em: Z 9dd!bأIЁImQ*ƓYU6LxYliʏ^qP{?i(6*|9jM[iu|NѺ8H:-їw{#*[rKʮD^ N16ݹ27; +I#@;Ff |:RŴz;PֵL(m:̞2{!VlQ: Sz ջ+v If1g%(_B,ʙ oW(.K%kϓ?|^`TMmtPq?ute)b:s$*)@p"! J9D< JkIݰ;٭9a_bxY:]\B04f QE_y%y8g_Udf%QS < OOZVTiO"WMJP5NcIɐ#a<1PFᴕw%q3uD%F +\i]Ցb9d?m^D1fQE#c[O>YSXSER;znYb3R˚R)kH|'@%{)_,Vh{NJ40`7}Z 9`fWbh4{2Əxxza@5#_QDeυ뜓M)ʏax-C][NH.{HeG|eWkS8cRfV`Y9]|ĵ 5|\%ce'@]ii6ZTrA9-tA'^=mIqOa{P*RZ.`t/T3iLp)_\T(^qQ(108ɭRdt)Y )yNT ]O.LEdXr{8,t["*W"yY>o*ZJؐM{`[TB`tTLk2c%fg0%S崞@Nu$#[ITIcJkIeAC!uN Y$U 9W#*M{&5eMPYai>'ժki||X|:ddT6b>U;-qbf qRoaD2ZR3-XETt]Ѽ '==48q6+r{jR7Z]Q-FM^L;^Jx-{SkF苊$Xov2Z#43@fZ\RfWdf!B£ R5UA:}̦$?TĒ|nSxr!es=[ϊpk80u:>.usiSVGh1UJ[Nffhy@Ԫ7b<tniJ5!Q-Fn oL&Lƾ^ſ8`rf^O&ZW %cZEmSGEF aC''rv;cOzBUʂuL_=:iQj :Ua;tj+ O ]T1_Ukr;:RY3[ ɒ>ia7S2.d&ygר\2 "=5ln0dfkѲ%zUB_@s¦'|(qQ %RzirD$ɖ x~(չ-Z>SVߝidlFnȻAKѱ{.!=;Y@̥IH\E [=\25mK/%e qqn#Yed;3cRD t:mZCuXњmKuA~ŋ~]uZzĉ0/&$|}Z\"RF vf<)GyZhO/uX؅X2_ϐ9U<\3>5!WlLS}18I_ᵺ@qo:\(5fJoNuCC f\;d9 |b?c0~P[^ݜ~u#zJOO뾗OÆQ4wQb]L_e Jx.Y@uy::tRǥ|5E4e_ GY ݬjߔzFXrdl7jL+PK֘vґTBݰz[lmp{Cr♭ |7 54HqO+sjgPvI&u1Cjc¥6wѥ-2ts\sI/XF\xR}DtY?h~V~CccQ["<1Ch(F5>+wALդSJ 1YeŘ} `vugwX%]>ThDv BDfqzo0cyRcؑq]9*Jy꒱,O K-l;~? BE!@XT!AR#1J>/D ASQM:C0iCJj YS$;u@?֥cjPSxATU'Yw;']ݦ*U"JA(G7}|N%wOwTcxQcGJ5)@PY+!OvL ="rOFkV oKDeоZHfJ?ΣC)C3Ֆвj چy|/:,"oE`ܸWl:)Sp&؈B{4jtpeL=Y됽%]`5s͂UV8}lgX_ `#I*ٜcg*Qn5Ҏ:'ic$~MC؀խT8!X48L-8לAlRT7 D[\b`mټuSt.UݛJrVZ,]SEfX'o fB߃U)?P {3L$6U@w<])wIo!J};uvlMf:j]'IsTũ)VEuLw1:%:+qf|7nDͳx7? 5-7+o8IV5X])cqU=hNX? -9E=8G_x䘁UBW켓4HFxU% ugfŭ:bAX5/)NWum_ΘFfQ?N3]ҁ)㎖0E$լ}mvCEkEΓTѠ }Q<;% ΒdAV)erRɟx7|Fūf#^0MހW-z!e:sseFaP)E?嬳byoֵXm;aamcZcVl|C2?ݦi!]?e+#BCCf.0T,T]V蕏tyc,`R&7wQXy#ѥƤ;UpRT7QߴdV#}TN;bpH]ʅ"5ޝeD+_$b' =)P' gCRýS;rdѵ3y:YvI6zeyV@Ʈ o:N)P lEZ׎CD l@E>O r+<1% dAc:ꅕ {֎K=b)va1|R}>F@euц[/ʬIF5zŏ]YeHMD:܁Q$F-cD{hgh5ǟ ef644o@'/u5tZmqeUmN;NmI yBQm93:{7뮋Q7𑣝^"ΗD=wh?|56ᰒ+r>|J 0GuaE CУI-F?]xf>|gu1zoԣllSmj?:bXI@GOW'l$F?rnDnCO 1@CVs1Y]lU4Mx7-]TECXBƘJqtv"8[<+4&y 3x4Vc|TpUi?ڿڨnIX>\W5KLֈ4%lyI$r,ytZtڟ)[C>}Sg bM$=wSL#w? =+(_7F#/b/MFo$W7k+ʦ8L6Dut㑲W2<?3]b%ҽbా11{TpӖHuQNTVC֔!AYJ!R2$g݌c{H+"šc:-mԚOwmҽэgW?ԯ鈯tmjb$<14dchih5NN )I{匿$U*܂V (󏶓m~D/OJ|Y'w$[SdY4Kꨉ-HDJ>;GjkXϕ3(g1359ƕhZfli_޳j;lйfDU>r-?fZ<]JO@cEd$ɡ/ү;_KRUg;D@~²K:~#52lb W7(6HdrCYGeV5 #]ٶϾI<(^+lj1(+OoUCV 2` A^, R! $"T7YP*-MCjr$,fHd̔C&59.^- FŷD}/2BFط\<Zqv. cff4dfLU;S%TsJprېJH:^\ Wʃ@+Ka %= f1 ph]\r1i.Af8Mp"9eṰPR.8;Ocs]f`C@'h*ȎXѮ6$2[^ sFrP08%\q$=4pdmO{C^EP̓ R9a!Ks紻(h!ǒT|Pz_/`Y؂nM`/N jV5; `Ib1 D@Ah3^⯲v [$l&%X$uE>  ) Ss؟ryMH$"z(.;젻GE0Zd5dF "L L+} #1F1GtR/tT$L#\2h|Fv4.fGN\!r?2cI51&JѤ!،DYAƀZ.f9M4F/Zk,~ak+rYJq(8!D<4Y9ȞOpTVƿ@*eq @@XBsq"ZXCHIHVI &5c0xT Is1xuA`8sf|j%QŻWwд$W-0u74Dqxc )WƗtƈ?3*Ր 5ڙs?nmDK]t!†1cVSa4G.Du!hrX]sGpsHl[HnZ B)=",b R.!DzĴiStV3Dі"DVO€|-=67IRM6V'hP{}lM!)4frcĔ <Έ$$<<.zksB@I<,l2Faݰ.V}Y"7;ht4'ddc4\ach@H!yAe(p.M 0WPMH?`Ϫ&R0KR<'!H%v+_Ǔ4?"6ihB[4Jgd/˝Bt!DdLjMbL3S\#ʆyyO3L|Ī6aE@J i!sI ǻ9Qr Y Q%@!aD˔S;'yf4X(JgYA:4.ЬYc*<>4%BDL侃2xȅ;8oNB0`-)"3xu5AO$!qXi<&K5Tl*AV:d}3I rr"K]VJ Zq@*(t]ܝwꐬW=Dh$ΔGIdH,C+╲ r:6i"];$aG%mxuE{H9GdѩH&=YݠfjScEM! Y@}Kr%,rG̑_>/9]I)=kHpCXyLkeyhڳ̀(fe*%*<(`ӲWpF\ Ϊr~S! 6 I"P(Hz?sf bX9l~-Չ#Yx$߇v($XrnOIvt<:k$/*yBb&ٗaC!y {)s'*;~!ã, |2b$F"POށ0EؚCY6<,F>'I?&v?Dx9HdRa&IWp6폄 Dᇸlc1A#:G1P-MKg8%E1c 5 6Ϣ($ zT&ޑcpoF2s.Ƥ/fSñDC!EF2 $cQ樂EԘ/Y.jbdg0ɇo,P"?~1' LRvdBM3 hut8n:D, i32:|x=6.ߘa Y/r,ї$Ϥ%mEQ&- /OBy<\1w2=P1d8`;[JG5uMfĐ luNBS8;R}OQ sЎķC}QD&׸+1;>NV ٞ|)Huy+vFQ%5SNĕfSLށMSL#`~0=|`1AVAA^|4U雖pHrgHi6aȦ٠ch&%[դqAu\:G `魈'55 KNTE?wQG$u G,FGJFԣ3zH{`] 6@wjl̟EnS;.$357)`Gez&6%ƒ{rriPchD^m&pBd/)${z>d9$/B3iDfɒtD:!_Ӳ'qTTzž G^J="[G'WڱQiF+@Lpv%`QG mLK,[tqĔFԅO vt&JŘ 9w+RZ+'e`;hJw@&b8eQy:";XIT)IB i:$ "(s*&$ɤ)j<< L0K|(_"C&!8O$Jeezd =!Id)xpJ;4 (qmZԅM< CRi |wMh@GFeF"6ًh+"l%r1MNsOJ9Gr;FJlJVQz -kxg&CD&ligu$_{3 U5 J6 G$`| ̙ yOC4ѫ8D10\;"fs9bQN>zR~Fu6HvA9IA/ք%- RĖCr" ϒJIx"R+Jx;YQe $h)6Icj+]mtZ|* K bgo'Mb,r%1I'͙:$7(8v=LɢaU*iĜTB c`Bf)RS";6LȁY{O)匧FNsiK:Kvb,XU(p=q&Q)aI?3dI\8ISd ?["~b-> yWtz>tڤ̡|L.w&;! 3Cf_NSAFY$LbK]UνRuQ qBMA&xq1[IBA+4'#M%Ҝ{ğ3XbD]"V.TH"iBCIů#dk}t<è5iT<>MP2(AYJQ@ j5 Ň4 |/"'% F^6+ACiy',f!(~%˕zؚ~!KȞc$B D-g 35m8aR>TW4d Lh`ΐA/a ҀոA# >D"gʵ$3 Z{NnN?j%G@tIPcEa (;a6duMY*26so2- Md)TL=“:*וK~o]􎤑T<ؚ >tWb;4Ln$2?dK }MuI,6Y'g*;T>7&ۭ-oJ$AzP$F歅c+mb'ʚa I1͚@I 3Fɪ c:hfK$˰D ym!BIl^!~%+{Ù*IYJD])ޜd{vDi.%B>۰*q]A`y>.M=>&=A/|ּIbvH 7 \aUzMf#!"U$i [yiF=ᩎtقTMfGli0]HNW vQ"҂<>`0['seK9II118nG)][~,c ɞX;K-HiI8yp;TʨXwqlG:㖃4 Pc;ˢh6J:0'8)`υRȞ!v'1OBSmY%c~@T, ddFO YXy$j0HQM"#Y4E?kL OG$;ꔦ"#鴩%%VICwe&KR~0Mӎ'IQl`<71OCi2Jx2瞘LСKJjOHFi=˞cL2lt;B^I耵IR+.ˊ!l' 5k&ipb "qO9J҇5ۢ#{?&ril>?RĆ6M YIGun|Ɗ .a> ȌH,b_qL&?|Az -kD-M'+Lm@>KM L&FFP$gE= 9þ2Vh x }38F J1'(Un>hXHwRP 8 ݆J1T:-7J gIVm.BR.e = >ɟD<&zP2Ei|!iBX19wHƊ6-%#3Y0ZdڣBU  zDH]`=YAƍFnhd=r萣p9L2 4OaxuO=<nќE7XK^Qe8X:yt:#ʄ$D#LpfXjZ63,'Ù'*j²6] (P|v\*\"J%Hm;sSLGNug߹:Ne#%Dynuؚ=0ҳRXR1Tn/: A!irEKl3_.Dl(\܉%d62a蒛_%֔(9oe$P tad Z?\Y`HnT."dN ሎ&WAQ =BC*P,B@8Q/ u35L}pNJQk=SnEA+5& qi]_XyQwD~'y|KDHMxnQ~6y2ƃ'eAV%bAӱ͟bQC,^q֖ zН2,eB0QLd׵lӈ9*nLzSjJ9{ ?PmTL~DȄYsQ\9?ڠNZ7/'m^c̨X ZK)D.s"BۨAyh*HA^t'ϣs|eѣo"fBG,koO& 62U3W1\ 6<ќ(thZ4%P_Ʈ8Dqo45:!=t: αY.da]oiv><:PNhld6+5G2gqE'JT=m˾~NGfVD+*Q{1@HzM}0P8nڸ U/#cݓ#z&2;0Y:NtIp2)e6S!9$@LGƌOvUfr' ^R:dū+-[@zЦMU;ag)Ick=f: ٛF4?J|ӘWtXEʪQ2yY^=菲Q dWF-g6n)Hڏm4dyXGlFiAU=$3#*yp ehHB§h-x iEnݭv9qH?S\59>V*sWr*)* ňfRk.l %QPۋx\&X\TXR{z@Ae_Nj"!z|&c.9hM3435[VuQ@íe@1|M/jeI?XaLn:Qqׯ"v2}ݼKH9/@Ԩ+1T2r?/MP8~ݵr(֙$HZ ( @l!/ z88 qb  @hV#tځ[.LHKN$safĒ#ɳYUuyV# uy)e 1F Z6ī0*lNRF2-6w=G\&~-YQf{UkEO9Tq"\a2q)Q֖7 `DZr@gY#퀡Y9Wi? Atvl [K{EB)wWYi*@SYA+( hd_)Wm$=JD`aXa&w"uO$"MV_dD$31Tbzp2N%:bnJm.R$2~0FZK5o_d sxwB~PA=K֕'Ó \wǎ AzE[ݭ|sRLOЦtqba{j_= 㦪2c:FRRybB3t:ڕpP8;J e" tnr)J>Uhᗢ(kEo|mQu׍UME9 T!y I$V2Ɲ(¡Μ]C:,ِg YK`*ƧӥD(!lm%Cdh.+}V($FB@J]3?hCuZm Obb)Je&pSJ/[+Gm{I [$MnUD pqzIC T!6SοHK&mGXNjT;ɇSWY}8CdxEA)"vSK^c6E,mA+RⴱrǣnL>ceDP*vŋj/i,:x=GM ߌa'QB?⛙' `)r8gѕNEo\+9FѹLJQղIbNiةRldH0=Xò;:=nE%ՐpH-|d$f$.|Sا-?1ò+3&Din vD`MJL]N䬃Iʖ㾣X%YjMFOℳ &K")b/R%^N5sT\$ӛaeOja(fnhk14.Ӳ4Ff$j {sb!3v(ODuSB6r9b zQ] .jӐ zGás ?bvMmد& ?`GJa]{'=IqQ ˱(Stf$+ƈZnGh' mH?kuY"9e+C$@ +zJUNMG傈!emJ\ݡ~ H{ =3w8if1ʹ ݄;X"!贷jP-DH >وC/y:.hHmR[cvSBOj9bG$ȋHRvz.,GnanARew)m'oϺQfZ Jb8mjZ(mzZ}Ͳ$l 2r>nmu<*qzJs|a}#I+ ;FSM2~H>E~T5c}h[ mÌ혬esIɭ獤 r2B2 Hv4-N:CSF6v)fꐝ>5"+J}YK{ԩo Sju@j'Z,f"<"4"<@w$R٤ x̬ejN3:Q+N0eT]mF"/6_Q(y/lcF `PD}3 v8_!l2GuUO6L!;1C.kgmkrp5qhktg';PYYi@Q3$mFU+j›:LePF slޣ(zG@G,Ƙ Վ؝6vg9XL)+i% c,2z%dn%Lc 3{^0:`"D u1ḣs-\nw4I~ubƞ + # U1G]@~lo7!򌫨¢-CrTq[6fyj#_%d#vnz)]ry y#3<)#xžt]/_o+#_\7deo%끗YꘈGK@aa/s*Mvy#=(]Q; 7 BUɛJV<}4S"Pf q(ĶIFm!hT,fX'bE#Mfje"_X2VTXޖo5י)=,>UrqJ,:|JRT8ƿ]h:՟Q`{jZJW9f -3 Y7F͘Z2nqYGz*)ȃ ]D+VDb坣a2DhUT1=$&']@caf|*P i4})Q@IFxaem3g##Fsؐ!XITyӴC7ڹyxBd]dfyHi#dp&{n&QP'ק&&z+B>O1T B:M/\:zT/RVk@dXzTO쪲݉gz`\#p1*"F/YdoٓjK`B qxK$$%6@k@0¸ h SuAF/( o]oA96 sA@{?):<()4 X ( Rf/@ 8 9U"|``i@÷ #|/ ༐R A}p` oH&@8]HP @ |`ߗ/C|[Aۗ(@H|vߡD p ޱQ08]>o%S"z#_7%(($x- |_$)]d`q)a[M}spp|lb |~o"N :ogCP"|8DdXm|529 [E:@ ePb{@|?(G mR(!%Z Ø 2pv}n_M( _:|+@f50 @@ (Qoח1%~pG}-~"G7|Yo 0z~ow}wۨFC("PMk|_wz_/Ja k @ q7?}Fo'Eu@wKp $kR[DXˤ }w_oFߔ {/ck ftD_#X 2}`Lpw@D}x_߯KA_/V(_ޯ4z /E5ྯ@Cui[o+8оw/@ ~`X Nv oj`}~}:_?u߯o.M+?T\4w~(=xlH <RAd`]wV(OE8XT~I97qNWeB_0)l(" aZpW" Ʒ 0(|_` ``&0 R?8}_ 0ܷ; 4m/A8|20\] _/<Q`kv'_oL΁wÁ@ #<@T/0xv˜g%<`}?߉@ }0xᡯ1-g82 ܽ_7{:7,N}[«YxF> nO|o 3#+ ÁE9^}x /kX! ]Tx!\o`=*"P~}Im0;\7'7Kc@}%a;L!ɾK? L|Y EV{p "L^1>F%6k|w -!F<>G|㋰w}ѾD_8DB߆(l;8HU~cլL xRL}_(0WCߐ4X<% W6<FLp@Z*Mnp x ߉/ϗ1Eӆ[@W\ l~Sa/G`#%z$!a;L|^ }u)q] 'Z}P&X'_pw{\J`/,,v ~ n+*Ia=1<5y@}`H(DŌpF X-07aL]B`q= b2}_$@ L T05Y\ /b@(Gއ<8y_1Pu08X_L "^0Rlx=Wwe@W`#G/txW< tw{f&1C8  "5~&8c=@x U)0:ߖ`!,_7 0}ǫ7l/F׈c}_αWml N6](Ail0A V_˜J,XŒAǥpSl, Abq)|* o +N'ykI0k 3:~q2_!߱@I' _p;F_HxO $&h ǸSܦ/ep3nQhYb8@Ŷ$n}5㔯U]HQUXl\:"ra԰l%"ˏ/E@'% byM@6?01ۀwÿxd(v,L@*8;LEDŽ 9˘K=^ct Q483 }/u g_y>T~׿ҟ@)M_FCfOU"A,Ão߷&ȒAd Aú_J #ra︷z~aj1%1` Q3acqFx# &a82\/V':,2w)Pj|X 3 k|%pw9PF6 OXJ 5p0bENsYq(d  seh1X9LzZ}S9W/cqx"p6v ׿}_q7}(C cX{(Nhp9 &i W~M$ !vr9#aoUyP@_8<-Ƨc0ܖ`<&9o~mmd0]F){-Œ194CzeS1U]|k‰y V_C8}sk qð N@L~: <|_n1Ye.;T\չ 3VOf\qx,,9~Tb358a‰1H̸ּU5[vb]x]b"ۜ F0X^w>0?=-`. 6S`/]e &I`ձN>a3rXl8{a%19%Sf9+??<+ry"`&0rg`q83j>z`y`n/}`9ri0WL χ`k*x|?0âe^hjL@.΂h1/JΨmZo/F;1i M|ˠ/q̸\YF;%r<.ס#a(q@0#ǃ.a{q׸,Eb㚄y##_ ?1,iDwpf!4.:Ov8҈P9DA{Τz4$Z&PIE &_/zL0xQ2R w|:R|pk @ s=Z<0dyL)ߋ*9dsSrs4 2\A,:Ǖiwokڱ>.8WѶi2H 0/e`4R>c] /Sw ]7m@m.|]8iȲ(3LV<1kOp3o!0 FJ rgi0J,aӚe`,_ ~ק /ڗ:4E߃04Ez i^/n|/>Ki9A̞F#/xPL|#p s=`t^#Aɵ_K(5^ijeb)=pj8򗺾 7@]Tѱ8ôg0i#|Veo\@,+) `5!c=goǠ軩dNebTc~Ό0m&y;ߢ!s0;`7&u|ǯqYt./1u Ka i3|9" /`q[M) pud$U=pUʋjKOd>S'1We 7e"lU3|o C. io2#$P^ y 3F Od`g,QF$'V_flpToW> ob vۃ ߞpTbpY:YCd@cU}nz_3R@;Fp[k=v{Ng5nMHgS.d3Y|q8#4Tlm[Ϧj8sҠk~m$!N\W͗epp\ 52:̓=F\[!ӊigs6^*pk@!]d_t:X#ozh %cLrvZ҇gaz줶 #oeuǘvL)X})ʧ d }9s:I Oir:?XǗ(95-TUL0ҿi=X?0i .,mE,N;Rh} ڢB_wH%Ӱ_Lr۪Tj2n^636:2b=MSfvqKLEk q]5->6Ql_\E L ;q-f ¤WuQ!=_32f|C u^F-#٠sR\F3٧fqv@xv_em/m%Xubp)8BtC25<|{gY\ZNcpm5yø+/5*cvΞƒXB a_/^y 0yn6E{]MU}Ȯf@ \##,7Y6Qtls AQap.;lff'32kNu)[mOTeu 6(_'sw .Qʋ Y<_S;+Tm5s}keeo^gvl qL:Z#?7nrkY L +ms[M3/ūc* !i}ߍuaS{ht8p&x8ഞX ?ۚcrŻ#Y@~!۾F]ºp!YB& ~ЄktrH *PkqFx|Iȴq6h+k#ZT~F:jo]x<[_Ջѯx!eKL% &hkv^8=dCg;X@_wSY0Й]ʢ ɰfx08&[}io @"Az3b_[1 ->wwܘߍ5b j~5\oRv"}h6mx) HˁiV~^2$LlyMǝְ|F>+ L_0|8EYÌ܈KGz{mN ϼQ1wF,^ȢaTT>T+[BtM(_/!(lf@K_ tB@0c_kE 3M-Kc0<K|@bym.CP3Հk 8Ca't׻ ~+Ch;z2mE''x : }^0FRѪ*]/06?\N3pZ @ٓnsZm:눿L#W׼d`ʴ͈e&`ζ,9pEQT `k p3b {;0zpj3" /i{ N>%߳/danߙͿYjn6Wtl ˏw&$~Nόr0`f.'g0{LS]Z&cQ"q ϊEn1ݧc9;9} HgVc2όB'@i2\4bG1mQ\5M/V- YE0ct ބgAb9$z,A¹Όhz NB ˏ1|wWY\^#EgK[M{Ȫ0j½+V@Y Nծmͬ9\=ˣoG c,!@ח=`iԯhhIp8':%g(y^-(H poK&,e39 mדkɻ_p G$,淵 Po:SAށFnj<(w/+&Fv،',rM9 S 77sS&ζbIgo(GmN;ImE>#"1ڮm6E[M4V%oưe4X!f^$Dc9#W)) vE' Ewöb mduoCo< erDr|_'raMވN/-h߂`TCʃׅr r &?s2 *ǘϣhxdYe*NT0!"6Uˋ%dnjO~{dCۀļ:-e[uCamoHηY1ټqԪ!=GSSGYssҳ'fFgY$N((w+4}Nd \X.gs0)P`Pf*@ ^qC`& 7y[ju\pB3! n;|QY|7a\x}o:}pA\q9`Q^=n8[،2O`Q1ڗ 'n!Fw ֖@G`bn33BѹP4ܗ@?w|T]{]k+5WLR)aˍs2pזa8]ijp),~TSAaR``,Cbl9P4קAHpyf iO0̴v󗺍(u OBK~*; YmhLt7 vo ?'~r4$Pg)%?#& 8 mP ZSE"i!DJuN}wS H~aQTnՍ< "oCi. j V7ճ( zX]8g6d B߰J̓@Bߠ0|_ ВX Vg(Gs3 B5r`XJ ^ `!  B!fW+PkֵE #c8+^0txW/@c" #Ы4~QW<!X}7$,aη@@@߽V@/p8L3PtW04 7úb=> ^놖|;.3@9Ѐh@xSC@Pba<}P  *#>ҰbO& ψ{d@~30;b!@#ر |MvA=ɠdCA'H&f-.e'WٍlၙFfwav*;JG030Nv<}I`eg iv%{݀!hwyD=hov;*Ae?-yvB;$0gٙ2vP}^,XڗkQ̾jϴ_ّj\ :fW; $;Ծ= |iv8UT;ٽvL.g׵a0h]lyF~h׵ڗvm{1]]^k7v̀NoO vg;=.n+]m7qv}}־mٱ{=^p JIx}qg?;nkg Zv^q7˛AvpcIR]ҁmE;=N 7=.wR]ޞsǹv5}.tW<>w{ro_ݯbAk}vnoJзH'7z]}ѶhPS]iƬg@ 2;ou@(gy m2AB# wÃ@Wx'@ epH"<|{CUy+S{zn@ޕvLpVpl7Zݍ;{ ̋5̐)7dPv{c0ޯ>y`{WXޕ/}QpoAu! {}|=8cB@TOBQ^,Ցя]F!0K3.Tx8 Wٓ/h(dONAÑt/+ 8ll#ıQ-v@]wHaH Gf601.C Q$iЈO㌞]E4 Q񄚷IO<|'LFT%#X~>-F'CuNG^ 21}볌wM2!(U d`%缱Op54LIngඨ*Do)O@Jh H@aMH[ V}4AP l(o,p| 7 u<xxz|`RWG_8cP #/FA^༘! 'xsɻ=x<>~U T8?~&W ("0{  VPgp;A)qDVF~c|I+ʻT]{*Jy hNYѓs!8G{2OL0&ʳǂƼ<1ϕgɗ?|Ƙ|?&/w7y<\-KE|nky8>6_7E|n>ϲLbH8O7yA3zwΓ3 ǔe8 ~|?S5[A W30hHz=SMz=F?|+=~?_w>z}^J/Y?gz$=ZߌmrzA=^Lo[` 4={^)n'}~RO'kM}[Eݧł<~G jχ+W[1ީ #< f_/~Q}J?7,0eM_pze>JG)@BT=^f2[_Yocz$}ݚqFCz(<[yl~=@TjoϏ++j%O?+o=2{E}^Rlj̎8c#{f=d_5i|zPb; {ɀc_uy}Ϟd׻{L^KczoKWx;,xb9X3vc䉰WS us}ZM{=JnX=7z:^Y`o2ܞp0st=Q>?/o `[{ A^lq2c{|uloR7!y}Kϴ[)u}f^q<{}>p?GzU=qo~ {<~bGg?W{G|g?rDR{O;p@g24, |>M٠CU!~о,Ox`>ud7&z*DO߇8wiÁwη&yn>a? < M?>y|B{{P>a9/O$y~ydÏD|J*̀,G"$>c^ܛ#ѹ~f pnX@y|}{o5i;{d}_{/Ɵ9E5f=~羏#HhQ}ȃf#D#"<@G+!߃/WgQm^X_x-D>7G.BzV>7ȏcOB~._L>6~b>ۮխ|(67AgGusѹ\O=6'O_{r8.SKk>=:~|j~k//{|ν:Ͽջ|eAϚwݫ|>Ko~gW*|tF_y_7kooCj{>2__[LhoS}>F_~HkoԷ#9Nߍcc{7_RĠ >W1O_3"{C]=zy#gD|XEGso%{QA?/' ]f Cv}^go>]%4jC>!_wq>3x1q^kGO}8Lޏ\"Ӿڇ<8Dξ5&p;6*aS&8{ڷYCcG@7/d'ك!C1񾒟҇W ~Yso fL0@ᾹODi}~u?/@t}zbw0@?g)}Q(/էQ}~O=$8>@|>Pf!+uy#0eBmvŵgP~"m [A}>?1G>~BʯG?wzhS ߪcl{}C8]$ ?Wc_ku_k uK;+Qlvtmt'})]OuE~,Gԏշ.@@n~яl@ͿoSl[}v! ~([3?WwGרX?nVOL[?p_џg"{?o.L?hذ^?1}LRA7SCqLtO2i1M e[~>Fw<}?#Ϟ??yŽwk<ܽVj_soϭ{U?:^}x?C3@g>[W3|?xﳸ_\S?7z߾돯;{˽_ ^֎/ηuk>Cfo\?OTzʿ^_|?q6ۿ^%%=^o_ΟG/uw?I__ר{k{KfzN}]P|May{uV5 _#~ y {gH|yYy#|L|=u J`Qmh|D|X|4|Z|y7|y}y`ly)wyi|E|y5|[|:<=U F/bm`41|j|F|& |LK|r{O"xz@|n*eVyXI[9]a(unt0jit{lmn_Kj8z_c# g}_n-bJsltj__cbfRtmnzLlrfb{af-e|n dVfʁ။jx_UumlT_Ł)uaӁmQslE_Yqh%rsK`sb_aGm_+l!_x_A_8pciV{lHat a?anjmxxpta Bfyg'_0c pdc`#c4edn_feiЁe)f cj=r,ngHcjbI`qclrjmhpt}_Btpln.)eI:ijSnnib`JblaWmbgi5lv`_dfFmm _5 :j2q;j5qc%enHom i9kaNaqQbDhlqne oJekao\buiszd>uBKoUpDkĂeSlGsal}epm2itKmہtsmcq`bg_$paYm6iel`gMte!aq5% *``j-koB`nnp`tTd*qw._le:`pepi΂Tc'eqqJqvh'Ndfbi#_oLj0Piags`_pdjms-fsEhJkascSlKdnIsjeZegfsmTmiςojwskje.aYfe4 pm$Snur4l'__ln__gaqo5f_diBqbobmkjT`On1ib߃iGgqu`m(uHiLq`ǁ_f,bi aldlo eu7hrpxeupdeb?t{k5dlffj^s(u5oba-"lDc>Dh4ng jgbhJkd,q_cm`pbnsV_Mc1k1`hg5qp"e,b_qmu9t/e΃#ocaԃg Qj.nF{ksd;|5hd tj[nkpl,o$ddm$lf_gclms?o nq5`E_f_l=l._-pfbe!_5`:hshem+ufKrqakkՃf"cze j=xm܄h_bZ!{_BrOcObaa?bzk߄udct:hoddgaigvs1k_s_Btc c4`oaftZlo kjcb_moTd2aAgadbEmdftf 끭`"dG_ n&ud=cuV_(_X0ctp)ejrlj_p_oe!jMrZ`K`u_biBta)_i-h*noghtXl؁em%qkp`}d$ecl惵LrrEaiso[eBmcQjwr|Kf7nj)_gjlmc- k `q^E_GTqz_r1b`jrbnKkwt_fdfpnVetWofbb9_l`i uXgn{AaggeNbd" u_2frIhVmp~a9eK`.}gje[muqi_eb^l4`)nt gjg„tooBf*it~t~ajtnftށSJ Pclpqiki<1tI=a d(u dtrmi1s؃)K` u\e%nm6Vikdptph qk(rkoegmjlNf tlamoZl phs{nosZht0a aobAmbdd.j0I`ocdjaqagz_Qr ap)kbjjd_>8s\`HafbQt_h(JBmYs`'l> j2l&Heka5jodqbk-tm;<ta dX`kC(b_Fq2 eTr#qhFh_ tnt9`taigp%ob)_)oCpl{pbp=p`toilaklpin >o_SvduEjCPUec `oplNo}bj.DfdڄLgkian!.aLudE_CHhb>l_vl1sۉfމ?b`jS fc8p`.o)q`b.݉É ai%edpe#q"neHoԇXo0tfrgc3cɉKf*Le܁rpa%oa`b[eKl.aPhlVbVe5db>_t+B_Sf_OmVntqjnetec3cׇ-ueuԈimsV_bj |-lb0a"d7mہwdtₗs 5 qksxnV_cI2b2r;mj!2bTd4a3-d4le`].كD_l0abaf>favtGvo2NOeab4dau dˁi_`^`]GearFaD_n*cgnnSe&rsEb+dl>fsppkYicng]etplt}e;jbMf`)9`b d"_L`5u`_qDciƊϊ=keVh_ ut j灡6CgujɁ nŊFv`eomz/%K`e%`h vdgq2fkh& 9_bo;bgn!rhmQek$4_a(/*ًڋۋ܋݋ڋ)qhߋۋًfg*Flk׋fgNBh t>kmo o)xsfe?c_؋c_ԉ΁jc3`l`keq_3Y_\ p;w`$l0fgnA E_u2bubuu6_+_@V_aψ"_ȇ9_aM_uQp jff? f)B/dE-bg`9_Lf: sclcs hxzuȋ -lha_/_ĆWT_ q(M>nT_!Zrk1ed4}_Wct̓aLtfgmaK "TkAhQ)/`N] nf7nɉbdAhhn`:{a/ Jcect_Ga܃bdWgk___qhns.l!`jpd>bqmDsh$jG` lq{o3cg9mnf9Sl`a@` y__f_ÌЌgHieofǐ|bKaYq{`kg5aOgpwtlca{dpsd7loqX؈nTe<"lHsgmo8 hm#YtpR`)_eC_2fs"nfYd)eicf"v`LawNbC_phb d`I`nb`mod bnf!j&de>fHtxg!a#!utdJmgq{`,eeY=gcj.ދ鋑ɌGhe#ae<o9hgrmKHa$be7BX=k`!p_"fbeYqcjnъ=pm} _ip= Ѝm̍Ս u `hȍ_$ˍōXqNgFٍmčsXq؅|Ѝ^k0yˆԍXqʅuUtrs"υϊpHaUsmhp<jpd__VDdLh _Gsr _EdI!b _"b)_p }$f{'_w}_fghg thdOjjoQmse?k_"q xd[no`b. 1 mkhD`"IeɋHcQsnri†l.ac@n"Fg@"V_ac.uce]oph1bEe qOpKcS@{cqȌLoqcTi_{apWWga@B/yg}{Tq5xu}fs`Pftt(eod3a_ao_P;g5g:P`Ձo_t5qga_Wld oro{oo}_ss`pl+Dcp#q)a$ Cipbezph_sppN]pɎ|Fc`p._ph`qfpo_Ujk}_y4uu8rD_wORE-(fppDcp_wp_\qq._nj q^'pfg( q\qpu_q{BAmh_*_q5stpi~_pqhl#s@hhJr ln,0pqO<K_ʍ;V_=_Å5sq__[ _Ȇse\m?8pN˅csv:{qu,ufsw,V_ʅ{t~s{p{nf=fȎhhiHlJ)pRh.6`<|Ydxa}n~2UIgizhw gB`|z3vbb%a!zExVrWgFaEφh5bʍyp=`ΏӆcqnP10֏Rr}z*4Cφ_ďq?8pneφڍhd u_ޏk]Khb䏤揟ap7k _Qk<3`WtqzkMn2co,9rŏۆ@a >}߆3?Q8pBm!l_hOMrI!h`% btBl{qcu_CًjrBajyYL%ai._|pKh{Y9OE_rŏKkj`ENՏiXnZ[aohra"se叚q(%/`4`~yei=[! uCR%qŏFnʐяGdxwru_"mhS "We܏&CkRgd5pʍ9he}S>p{ːhC֐k_HT_T_lDh֋؅_&񏲏1^ُ.hEXc݌ufd*ily]~xeXlc;5OADx:G{ÐeA֐iԏ(Mkܐ]ۏ\i`bL$j5s- 1a {At=Vdkalʏkb|Uwp`HqOʏÏ͏ofyrːOY̏$`{ߐDcET{cᏳrkTpDcf5ڏ8xeՂt ~5OYqDNÐ eҏg~qfPvfA.a s# ga T)_Fsp0cs΄cs'gq1iUW'=pWghLh&dctq7p#guM__ޑk_qs,]aMb_n]_ይ_]p|1_Yad,mzq_<ዛjُ TDasԋ(}bheDa%a) ==s{b||`pq7:_<>tSc@Dppp t(<O8p cHujn5Pf,h`a jnC[hqrpj[8peZeFeGtIq!r ዸr%aዠr_P苃qዋ)hʍV_}yhefkf }XqE}4hseg`_o_\x_h^%Bnh)_NsLz(}=c=c>~ґԑ__֑Tؑfܑzq&\pcph3cφho!dWggrhCkt~gqrqe/p Bm@q?ݑ a_e]IC.aD|_^Uǒaߏ#pjfr_je]񒓒g %dВ%O~ג4_ڒܒnfgbcBp!sJUL\I6p鐪p#p 9 ^p.tikheOwk-[rIh_؃Fa#R'2@&>A_k;%W6LD`_GCّjiipebfS7jgl-jhϏ] h^k%^B_bُ `10g/ !p~x@l1_~苪đ_ђ)_s+j}_~tJӑE)_jۑiDkrrnj_djOrt]nH`dsi钦_a6,*j<_ȅcs%pmwF lyaڋd``'MV,8pzhe}ȒhƓz!|̓ϓ%7poLZ_ hXp$C`jyx_ዪLhdђjfݒmVgyr$h hVdSt6siيh%cp*ihӒ͐)qfrœ@:Fl拨_>8_~aዅ዇e"ٓ&oސӍ]E__=ccSrn"8b&Qd*Acqtdn h h htitis֋hyk/_ً?`|+>e>&c*ބ#9N!n#;jd,d𐆓’?`7Ն,\ԑ_;fgS`pfWg!shT8GFaxn6pa*sdvؔhrʍXd2roI8(p؃e^__?) ُ_8pYmؒ(KݑXvQdݑ3gal6khAZyrGkB`ҔG*`ˑl0}@͒ ёf8{_G,4guP_/`ȓs蔨_&q"e+v'Ճ)_,S_Гlg`j_k80?~__rit hU?`mE:Eْrے`UtICsi} gd(h0"]p&wbn'$]aۍ`zed1ha}03he7/yݍXqr n ܍`q./rn⍾ `_q[Odc% (  ?:T?r sprng2.0/EXAMPLES/ 40700 764 764 0 7034410053 12523 5ustar chwangchwangsprng2.0/EXAMPLES/2streams_mpi.c100600 764 764 6212 6736173533 15415 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates use of shared and non-shared streams____ */ /* Each process has two streams. One stream is common to all the */ /* processes. The other stream is different on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, commNum, nstreams, *stream, *commonStream; double rn; int i, myid, nprocs; int gtype; /*--- */ /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /****************** Initialization values *******************************/ streamnum = myid; /*This stream is different on each process*/ commNum = nprocs; /* This stream is common to all processes */ nstreams = nprocs + 1; /* extra stream is common to all processes*/ /*********************** Initialize streams *****************************/ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ /* This stream is different on each process */ stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: Print information about new stream\n", myid); print_sprng(stream); /* This stream is identical on each process */ commonStream = init_sprng(gtype,commNum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: This stream is identical on all processes\n", myid); print_sprng(commonStream); /*********************** print random numbers ***************************/ for (i=0;i<2;i++) /* random numbers from distinct stream */ { rn = sprng(stream); /* generate double precision random number*/ printf("Process %d, random number (distinct stream) %d: %f\n", myid, i+1, rn); } for (i=0;i<2;i++) /* random number from common stream */ { rn = sprng(commonStream); /*generate double precision random number */ printf("Process %d, random number (shared stream) %d: %f\n", myid, i+1, rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(commonStream); MPI_Finalize(); /* terminate MPI */ } sprng2.0/EXAMPLES/gen_types_header100644 764 764 441 6736173533 16062 0ustar chwangchwang/* This file is created by Makefile in SRC and incorporated in examples */ /* with the purpose of displaying generators names and corresponding */ /* numerals. */ printf("Evailable generators; use corresponding numeral:\n"); sprng2.0/EXAMPLES/2streamsf_mpi.F100600 764 764 4425 6741217274 15527 0ustar chwangchwangC C Demonstrates use of shared and non-shared streams C Each process has two streams. One stream is common to all the C processes. The other stream is different on each processor. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program twostreamsf_mpi implicit none #include #include "sprng_f.h" integer streamnum,commNum, nstreams, seed SPRNG_POINTER stream, commonStream real*8 rn integer i integer myid, nprocs, ierror integer junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid !This stream is different on each proces commNum = nprocs !This stream is common to all processes nstreams = nprocs +1 !extra stream is common to all processes seed = 985456376 C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C This stream is different on each process stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 44) myid 44 format("Process", i2, ": Print information about new stream") junk = print_sprng(stream) C This stream is identical on each process commonStream = init_sprng(gtype,commNum,nstreams, & seed,SPRNG_DEFAULT) write (6, 55) myid 55 format ("Process", i2, & ": This stream is identical on all processes") junk = print_sprng(commonStream) do 100 i = 1, 2 rn = sprng(stream) write(6, 66) myid, i, rn 100 continue do 200 i = 1, 2 rn = sprng(commonStream) write(6, 77) myid, i, rn 200 continue 66 format("Process", i2, & ", random number (distinct stream)",i2,": ", f8.6) 77 format("Process", i2, ", random number (shared stream)", & i2,": ", f8.6) junk = free_sprng(stream) junk = free_sprng(commonStream) call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/checkpoint-simple.c100600 764 764 5405 6736173533 16431 0ustar chwangchwang/****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, size; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ init_sprng(gtype,SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); if(fp == NULL) { fprintf(stderr,"Could not open file %s for reading\nCheck path or permissions\n", infile); exit(1); } fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); unpack_sprng(buffer); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(); /* generate a double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); free(bytes); /* free memory needed to store stream state */ } sprng2.0/EXAMPLES/checkpoint.c100600 764 764 6351 6736173533 15143 0ustar chwangchwang/****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int *stream, i, size, nstreams, streamnum; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; int j; int rng_type_ary[] = {SPRNG_LFG, SPRNG_LCG, SPRNG_LCG64, SPRNG_CMRG,\ SPRNG_MLFG, SPRNG_PMLCG}; int gtype; /*--- */ /****************** Initialization values *********************************/ streamnum = 0; nstreams = 1; /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ stream = init_sprng(gtype, \ streamnum,nstreams,SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); printf("Before unpack\n"); stream = unpack_sprng(buffer); printf("After unpack\n"); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(stream); /* generate double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(stream,&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); /*************************** free memory **********************************/ free(bytes); /* free memory needed to store stream state */ free_sprng(stream); /* free memory used to store stream state */ /*}*/ } sprng2.0/EXAMPLES/checkpointf-simple.F100600 764 764 4722 6736173533 16543 0ustar chwangchwangC C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C program checkpointf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, size SPRNG_POINTER stream real*8 rn character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(gtype,seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1):' do 100 i = 1, 5 rn = sprng() write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) end sprng2.0/EXAMPLES/checkpointf.F100600 764 764 5446 6741122105 15241 0ustar chwangchwangC/* new_spring version 5/25/99 Chris S. List of changes: 1 of 1 */ C/* adding readin in of a generator type */ C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program checkpointf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, size, junk character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1): ' do 100 i = 1, 5 rn = sprng(stream) write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(stream, buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) junk = free_sprng(stream) end sprng2.0/EXAMPLES/convert.c100600 764 764 3414 6736173533 14471 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates converting code to SPRNG____ */ /* The original random number call is to 'myrandom'. We change it to call */ /* SPRNG by defining a macro. */ /* The lines between the '#ifdef CONVERT' and the '#else' are the newly added lines. Those lines between the '#else' and the '#endif' are theoriginal lines that need to be deleted. */ /***************************************************************************/ #include #define CONVERT /* used to set on the macro 'myrandom --> sprng' */ #ifdef CONVERT #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define myrandom sprng /* we define this macro to make SPRNG calls*/ #endif #define SEED 985456376 double myrandom(); main() { int seed, i; double rn; int gtype; /*--- */ #ifdef CONVERT /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /************************** Initialization *******************************/ /******* We add the following optional initialization lines **************/ init_sprng(gtype,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Print information about random number stream:\n"); print_sprng(); #else /* Old initialization lines*/ #endif /*********************** print random numbers ****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = myrandom(); /* generate double precision random number */ printf("%f\n", rn); } } sprng2.0/EXAMPLES/convertf.F100600 764 764 2360 6736173533 14601 0ustar chwangchwangC ____Demonstrates converting code to SPRNG____ C C The original random number call is to 'myrandom'. We change it to C call SPRNG by defining a macro. C C The lines between the '#ifdef CONVERT' and the '#else' are the C newly added lines. Those lines between the '#else' and the '#endif' C are theoriginal lines that need to be deleted. program sprngf_simple implicit none #define CONVERT #ifdef CONVERT #define SIMPLE_SPRNG #include "sprng_f.h" #define myrandom sprng SPRNG_POINTER junkPtr #else external myrandom real*8 myrandom #endif real*8 rn integer seed, irn, i, junk C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- seed = 985456376 #ifdef CONVERT C initialization junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() #else C Old initialization lines #endif print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = myrandom() print *,i, rn 100 continue end sprng2.0/EXAMPLES/displaybytes.c100600 764 764 167 6736173533 15507 0ustar chwangchwang#include main() { int c; while( (c=getchar())!=EOF ) printf("%x ",c); putchar('\n'); } sprng2.0/EXAMPLES/fsprng-simple_mpi.c100600 764 764 3614 6736173533 16446 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, myid; float rn; int gtype; /*--- */ /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /*********************** Initialize streams *****************************/ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ init_sprng(gtype,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /*********************** print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /*generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/genf_types_header100644 764 764 450 6736173533 16230 0ustar chwangchwangC/* This file is created by Makefile in SRC and incorporated in examples */ C/* with the purpose of displaying generators names and corresponding */ C/* numerals. */ print *, 'Evailable generators; use corresponding numeral:' sprng2.0/EXAMPLES/fsprng_mpi.c100600 764 764 4541 6736173533 15157 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; float rn; int i, myid, nprocs; int gtype; /*--- */ /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************* Initialization ********************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/fsprngf-simple_mpi.F100600 764 764 2526 6736173533 16560 0ustar chwangchwangC C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C program fsprngf_simple_mpi implicit none #define SIMPLE_SPRNG ! simple interface */ #define USE_MPI ! use MPI to find number of processes */ #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" SPRNG_POINTER stream real*4 rn integer i, seed, myid, ierror, junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C stream = init_sprng(gtype,seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/fsprngf_mpi.F100600 764 764 3013 6736173533 15261 0ustar chwangchwangC C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program fsprngf_mpi implicit none #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*4 rn integer i, myid, nprocs, ierror, junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/invalid_ID.c100600 764 764 3545 6736173533 15020 0ustar chwangchwang/****************************************************************************/ /* ___Demonstrates invalid ID handling in inteface with pointer checking___ */ /* This prorgam prints a few random numbers, frees the stream, and then */ /* tries to use the stream again. */ /****************************************************************************/ #include #ifndef CHECK_POINTERS #define CHECK_POINTERS /* do not uncomment this line */ #endif #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int i; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /**************************** Initialize *********************************/ streamnum = 0; nstreams = 1; stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream */ printf("Print information about random number stream:\n"); print_sprng(stream); /*********************** print random numbers *****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n", rn); } /**************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ /********************** Try using freed stream ****************************/ fprintf(stderr,"Expect a SPRNG error message on the use of an invalid stream ID\n"); rn = sprng(stream); printf("sprng returns %f on being given an invalid stream ID\n", rn); } sprng2.0/EXAMPLES/invalid_IDf.F100600 764 764 2466 6736173533 15132 0ustar chwangchwangC C Demonstrates invalid ID handling in inteface with pointer checking C This prorgam prints a few random numbers, frees the stream, and then C tries to use the stream again. C C do not uncomment the following line #ifndef CHECK_POINTERS #define CHECK_POINTERS #endif program invalid_IDf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 double precision numbers [0,1): ' do 100 i = 1, 3 rn = sprng(stream) print *, rn 100 continue junk = free_sprng(stream) print *, ' Expect a SPRNG error message on the use' print *, ' of an invalid stream ID ' rn = sprng(stream) print *, ' sprng returns ', rn, & ' on being given an invalid stream ID' end sprng2.0/EXAMPLES/make.test100600 764 764 552 6736173533 14443 0ustar chwangchwangSHELL = /bin/sh include ../make.CHOICES SRCDIR = ../SRC include $(SRCDIR)/make.$(PLAT) .SUFFIXES : .SUFFIXES : .f .F .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) -I../SRC -DCONVERT $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #.F.f: # $(CPP) -WF,-I$(SRCDIR) -WF,-DCONVERT $*.F # @if [ -f F$*.f ] ; then \ # mv F$*.f $*.f ;\ # fi sprng2.0/EXAMPLES/message-simple_mpi.c100600 764 764 7124 6736173533 16573 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid, len, nprocs; MPI_Status status; char *packed; int gtype; /*--- */ /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ if (myid==0) /*********** process 0 sends stream to process 1 ***********/ { init_sprng(gtype,SEED,SPRNG_DEFAULT); /*initialize stream */ printf("\n\nProcess %d: Print information about stream:\n",myid); print_sprng(); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(&packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ printf(" Process 0 sends stream to process 1\n"); } else if(myid == 1) /****** process 1 receives stream from process 0 *****/ { init_sprng(gtype,SEED,SPRNG_DEFAULT); /*initialize stream */ MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } } MPI_Finalize(); /* terminate MPI */ } sprng2.0/EXAMPLES/message_mpi.c100600 764 764 7510 6736173533 15303 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs, len; MPI_Status status; char *packed; int gtype; /*--- */ /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ if (myid==0) /*********** process 0 sends stream to process 1 **********/ { streamnum = 0; nstreams = 1; stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT);/*initialize stream*/ printf("\n\nProcess %d: Print information about stream:\n",myid); print_sprng(stream); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(stream, &packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ nstreams = free_sprng(stream); printf(" Process 0 sends stream to process 1\n"); printf(" %d generators now exist on process 0\n", nstreams); } else if(myid == 1) /***** process 1 receives stream from process 0 ******/ { MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ stream = unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } free_sprng(stream); /* free memory used to store stream state */ } MPI_Finalize(); /* terminate MPI */ } sprng2.0/EXAMPLES/messagef-simple_mpi.F100600 764 764 5426 6736173533 16707 0ustar chwangchwangC C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. program messagef_simple_mpi implicit none #define SIMPLE_SPRNG #include #include "sprng_f.h" integer seed,i,myid, nprocs, ierror, len, junk integer status(MPI_STATUS_SIZE) SPRNG_POINTER junkPtr real*8 rn integer packed(MAX_PACKED_LENGTH) C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- seed = 985456376 if (myid .eq. 0) then junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng() write(6, "('Process',i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len, 1, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) call MPI_SEND(packed, len, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) print*, 'Process 0 sends stream to process 1' elseif (myid .eq. 1) then junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) call MPI_RECV(len, 1, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) call MPI_RECV(packed, len, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD, status, ierror) junkPtr = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng() write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue endif call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/messagef_mpi.F100600 764 764 6110 6741122140 15367 0ustar chwangchwangC C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program messagef_mpi implicit none #include #include "sprng_f.h" integer seed,i,myid, nprocs, len, junk integer streamnum, nstreams, ierror SPRNG_POINTER stream real*8 rn integer status(MPI_STATUS_SIZE) integer packed(MAX_PACKED_LENGTH) C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- if (myid .eq. 0) then streamnum = 0 ! process 0 sends stream to process 1 nstreams = 1 seed = 985456376 C stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng(stream) write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(stream, packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len,1,MPI_INTEGER,1,0,MPI_COMM_WORLD,ierror) call MPI_SEND(packed,len,MPI_INTEGER,1,0, & MPI_COMM_WORLD,ierror) nstreams = free_sprng(stream) print*, 'Process 0 sends stream to process 1' write(6,"(i2,' generators now exist on process 0')")nstreams elseif (myid .eq. 1) then call MPI_RECV(len,1,MPI_INTEGER,0,MPI_ANY_TAG,MPI_COMM_WORLD, & status, ierror) call MPI_RECV(packed,len,MPI_INTEGER,0,MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) stream = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6, 250) myid 250 format('Process',i2,': Print information about stream:') junk = print_sprng(stream) print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue junk = free_sprng(stream) endif call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/myrandom.c100600 764 764 207 6736173533 14614 0ustar chwangchwang#include #include double myrandom_() /* remove _ before C compilation */ { return (double) rand()/RAND_MAX; } sprng2.0/EXAMPLES/pi-simple.c100600 764 764 10713 6736173533 14730 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates SPRNG use for Monte Carlo integration____ */ /* Compute pi using Monte Carlo integration. Random points are generated */ /* in a square of size 2. The value of pi is estimated as four times the */ /* the proportion of samples that fall within a circle of unit radius. */ /***************************************************************************/ #include #include #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 int gtype; /*--- */ main(argc,argv) int argc; char *argv[]; { int in, n, in_old, n_old; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); initialize_function(&n, &in_old, &n_old, filename); /* read args & initialize */ in = count_in_circle(n); /* count samples in circle */ in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); save_state(filename, in, n); /* check-point final state */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i #include #include #include "mpi.h" #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* MPI version of SPRNG */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 #define RECV_STREAM_TAG 1 int gtype; /*--- */ main(argc,argv) int argc; char *argv[]; { int in, i, seed, n, my_n, in_old, n_old, nprocs, myid, temp; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; /*************************** Initialization ******************************/ MPI_Init(&argc,&argv); /* Initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD,&nprocs); /* Find number of processes */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* Find rank of process */ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); initialize_function(&n, &in_old, &n_old, filename); /* read args & initialize */ my_n = n/nprocs; /* number of samples for this process */ if(myid < n%nprocs) my_n++; /******************** Count number of samples in circle ******************/ temp = count_in_circle(my_n); /* count samples in circle */ /* sum # in circle over all processes */ MPI_Reduce(&temp, &in, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); /*************************** Determine Pi ********************************/ if(myid == 0) { in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); } /*************************** Save final state ****************************/ save_state(filename,in,n); /* save final state of computation*/ MPI_Finalize(); /* Terminate MPI */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { int i, seed; double rn; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); seed = make_sprng_seed(); /* make new seed each time program is run */ init_sprng(gtype,seed,SPRNG_DEFAULT); /* initialize stream */ printf(" Printing information about new stream\n"); print_sprng(); printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n", rn); } } sprng2.0/EXAMPLES/seed-simple_mpi.c100600 764 764 3775 6736173533 16077 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int seed; double rn; int myid, i; int gtype; /*--- */ /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ seed = make_sprng_seed(); /* make new seed each time program is run */ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcasting gen type */ /* Seed should be the same on all processes */ printf("\n\nProcess %d: seed = %16d\n", myid, seed); init_sprng(gtype,seed,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/seed.c100600 764 764 3324 6736173533 13731 0ustar chwangchwang/****************************************************************************/ /* ____Demonstrates the use make_sprng_seed____ */ /* 'make_sprng_seed' is used to produce a new seed each time the program is */ /* run. Then a few random numbers are printed. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ main() { int streamnum, nstreams, seed, *stream, i; double rn; int j; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /* int rng_type_ary[] = {SPRNG_LFG, SPRNG_LCG, SPRNG_LCG64, SPRNG_CMRG,\ SPRNG_MLFG, SPRNG_PMLCG}; for(j = 0; j < 6; j++){ */ /************************** Initialization *******************************/ streamnum = 0; nstreams = 1; seed = make_sprng_seed(); /* make new seed each time program is run */ stream = init_sprng(gtype, \ streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf(" Printing information about new stream\n"); print_sprng(stream); /************************ print random numbers ***************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("%f\n", rn); } free_sprng(stream); /* free memory used to store stream state */ /* } */ } sprng2.0/EXAMPLES/seed_mpi.c100600 764 764 4604 6736173533 14600 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int streamnum, nstreams, seed, *stream, i, myid, nprocs; double rn; int gtype; /*--- */ /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ seed = make_sprng_seed(); /* make new seed each time program is run */ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /* Seed should be the same on all processes */ printf("Process %d: seed = %16d\n", myid, seed); stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf("\n\nProcess %d: Print information about stream:\n",myid); print_sprng(stream); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/seedf.F100600 764 764 2227 6736173533 14043 0ustar chwangchwangC C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue junk = free_sprng(stream) end sprng2.0/EXAMPLES/seedf-simple.F100600 764 764 1641 6736173533 15331 0ustar chwangchwangC C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C program seedf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, junk SPRNG_POINTER junkPtr real*8 rn C--- integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end sprng2.0/EXAMPLES/seedf-simple_mpi.F100600 764 764 3040 6736173533 16171 0ustar chwangchwangC C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C program seedf_simple_mpi implicit none #define SIMPLE_SPRNG #define USE_MPI 1 #include #include "sprng_f.h" integer seed, i, myid, ierror, junk SPRNG_POINTER junkPtr real*8 rn C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = make_sprng_seed() !produce a new seed each time program is run C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/seedf_mpi.F100600 764 764 3267 6736173533 14715 0ustar chwangchwangC C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf_mpi implicit none #define USE_MPI 1 #include #include "sprng_f.h" integer streamnum, nstreams, seed, i SPRNG_POINTER stream real*8 rn integer myid, nprocs, ierror, junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = make_sprng_seed() !produce a new seed each time program is run C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) junk = free_sprng(stream) call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/simple-simple.c100600 764 764 1521 6736173533 15566 0ustar chwangchwang/****************************************************************************/ /* ____Demonstrates the use of sprng without initialization____ */ /* A few double precision random numbers are generated, without the user */ /* explicitly initializing the streams. SPRNG automatically initializes a */ /* stream with default seed and parameter the first time 'sprng' is called. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { double rn; int i; printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } } sprng2.0/EXAMPLES/simplef-simple.F100600 764 764 1150 6736173533 15675 0ustar chwangchwangC C ____Demonstrates the use of sprng without initialization____ */ C A few double precision random numbers are generated, without the user */ C explicitly initializing the streams. SPRNG automatically initializes a */ C stream with default seed and parameter the first time 'sprng' is called. */ C program simplef_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer i real*8 rn print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end sprng2.0/EXAMPLES/spawn.c100600 764 764 5003 6736173533 14135 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of spawn_sprng____ */ /* A random number stream is initialized and a few random numbers are */ /* printed. Then two streams are spawned and a few numbers from one of them*/ /* is printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream, **new; double rn; int i, irn, nspawned; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about stream:\n"); print_sprng(stream); /*********************** print random numbers ***************************/ printf(" Printing 2 random numbers in [0,1):\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number*/ printf("%f\n", rn); } /**************************** spawn streams *****************************/ printf(" Spawned two streams\n"); nspawned = 2; nspawned = spawn_sprng(stream,2,&new); /* spawn 2 streams */ if(nspawned != 2) { fprintf(stderr,"Error: only %d streams spawned\n", nspawned); exit(1); } printf(" Information on first spawned stream:\n"); print_sprng(new[0]); printf(" Information on second spawned stream:\n"); print_sprng(new[1]); printf(" Printing 2 random numbers from second spawned stream:\n"); for (i=0;i<2;i++) { rn = sprng(new[1]); /* generate a random number */ printf("%f\n", rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(new[0]); /* free memory used to store stream state */ free_sprng(new[1]); /* free memory used to store stream state */ free(new); } sprng2.0/EXAMPLES/spawnf.F100600 764 764 3522 6736173533 14252 0ustar chwangchwangC C ____Demonstrates the use of spawn_sprng____ C A random number stream is initialized and a few random numbers are C printed. Then two streams are spawned and a few numbers from one of them C is printed C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprng_spawnf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk integer i, nspawned SPRNG_POINTER stream, new(2) real*8 rn C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about stream:' junk = print_sprng(stream) print *, 'Printing 2 random numbers in [0,1):' do 100 i = 1, 2 rn = sprng(stream) write(*, "(f8.6)") rn 100 continue C spawn streams print*, 'Spawned two streams' nspawned = 2 nspawned = spawn_sprng(stream, 2, new(1)) if (nspawned .ne. 2) then write(*, "('Error: only ',i3, ' streams spawned')") nspawned call exit(1) endif print *, 'Information on first spawned stream:' junk = print_sprng(new(1)) print *, 'Information on second spawned stream:' junk = print_sprng(new(2)) print *, 'Printing 2 random numbers from second spawned stream:' do 200 i = 1, 2 rn = sprng(new(2)) write(*, "(f8.6)") rn 200 continue C free memory junk = free_sprng(stream) junk = free_sprng(new(1)) junk = free_sprng(new(2)) end sprng2.0/EXAMPLES/sprng-simple.c100600 764 764 2612 6736173533 15430 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int seed, i, irn; double rn; /************************** Initialization *******************************/ init_sprng(DEFAULT_RNG_TYPE,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about new stream:\n"); print_sprng(); /*********************** print random numbers ****************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } /*********************** print random integers ***************************/ printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(); /* generate an integer random number */ printf("%16d\n",irn); } } sprng2.0/EXAMPLES/sprng-simple_mpi.C100600 764 764 3355 6736173533 16242 0ustar chwangchwang/***************************************************************************/ /* Demonstrates sprng use in C++ with MPI */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include // MPI header file #define SIMPLE_SPRNG // simple interface #define USE_MPI // use MPI to find number of processes #include "sprng.h" // SPRNG header file #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; int gtype; /*--- */ /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); /*--- broadcast gen type */ init_sprng(gtype,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/sprng-simple_mpi.c100600 764 764 3507 6736173533 16301 0ustar chwangchwang/***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; int gtype; /*--- */ /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); init_sprng(gtype,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("\n\nProcess %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/sprng.C100600 764 764 2646 6736173533 14110 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of sprng in C++____ */ /* A random number stream is initialized and a few random double precision */ /* numbers are printed. */ /***************************************************************************/ #include #include #include #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int irn; int i; int gtype; /*---*/ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /*---*/ /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ cout << " Print information about new stream:\n"; print_sprng(stream); /*********************** print random numbers ***************************/ cout << " Printing 3 random numbers in [0,1):\n"; for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ cout << rn << "\n"; } free_sprng(stream); /* free memory used to store stream state */ } sprng2.0/EXAMPLES/sprng.c100600 764 764 4321 6736173533 14140 0ustar chwangchwang/***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 struct rngen { int rng_type; } main() { int streamnum, nstreams, *stream; double rn; int irn; int i, j; int gtype; /*--- */ /*--- reading in a generator type */ #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); /*--- int rng_type_ary[] = {SPRNG_LFG, SPRNG_LCG, SPRNG_LCG64, SPRNG_CMRG,\ SPRNG_MLFG, SPRNG_PMLCG}; for(j = 0; j < 7; j++){ */ /****************** Initialization values ****************************/ streamnum = 0; nstreams = 1; stream = init_sprng(gtype, \ streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("\n --------------------------------------------------------\n"); printf(" Print information about new stream:\n"); print_sprng(stream); printf("rng_type is %d\n",((struct rngen *)stream)->rng_type); /*********************** print random numbers ************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n",rn); } printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(stream);/* generate an integer random number */ printf("%16d\n",irn); } printf("rng_type is %d\n",((struct rngen *)stream)->rng_type); /*************************** free memory *****************************/ free_sprng(stream); /* free memory used to store stream state */ /*--- } */ } sprng2.0/EXAMPLES/tip100600 764 764 1161 6736173533 13361 0ustar chwangchwangManual Compililing Serial examples: gcc -o sprngMY sprng.c -L../lib -lsprng -lm -I../include -lgmp -I. g77 -o sprngfMY sprngf.F -L../lib -lsprng -lm -I../include -lgmp -I. MPI examples (MPICH inplementation of MPI): mpicc -o sprng_mpiMy sprng_mpi.c -L../lib -lsprng -lm -I../include -lgmp -I. mpif77 -o sprngf_mpiMy sprngf_mpi.F -L../lib -lsprng -lm -I../include -lgmp -I. Only mpif77 requiries explicit "-I.". mpiCC -o sprngC_mpiMy sprngC_mpi.C -L../lib -lsprng -lm -I../include -lgmp -I. Running parallel examples (MPICH implementation of MPI): mpirun -np 4 executable_file where 4 is for four nodes (simulated) sprng2.0/EXAMPLES/sprng_mpi.c100600 764 764 4261 6736173533 15010 0ustar chwangchwang/***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs; int gtype; /*--- */ /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ /*--- node 0 is reading in a generator type */ if(myid == 0) { #include "gen_types_menu.h" printf("Type in a generator type (integers: 0,1,2,3,4,5): "); scanf("%d", >ype); } MPI_Bcast(>ype,1,MPI_INT,0,MPI_COMM_WORLD ); stream = init_sprng(gtype,streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("\n\nProcess %d, print information about stream:\n", myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } sprng2.0/EXAMPLES/sprngf-simple.F100600 764 764 2033 6736173533 15536 0ustar chwangchwangC C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C program sprngf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, irn, i, junk C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- seed = 985456376 C initialization junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng() write(*,"(i16)") irn 200 continue end sprng2.0/EXAMPLES/sprngf-simple_mpi.F100600 764 764 2370 6736173533 16407 0ustar chwangchwangC C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C program sprngf_mpi implicit none #define SIMPLE_SPRNG ! simple interface #define USE_MPI ! use MPI to find number of processes #include #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, i, myid, ierror,junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C junkPtr = init_sprng(gtype,seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/sprngf.F100600 764 764 2367 6736173533 14261 0ustar chwangchwangC C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer irn, i, junk C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(gtype, streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng(stream) write(*,"(i16)") irn 200 continue junk = free_sprng(stream) end sprng2.0/EXAMPLES/sprngf_mpi.F100600 764 764 2665 6741124417 15120 0ustar chwangchwangC C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf_mpi implicit none #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, myid, nprocs, ierror, junk C--- integer gtype C--- call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C--- node 0 is reading in a generator type if (myid .eq. 0) then #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype endif call MPI_BCAST(gtype,1, MPI_INTEGER,0,MPI_COMM_WORLD,ierror) C--- C stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end sprng2.0/EXAMPLES/subroutinef.F100600 764 764 2072 6736173533 15320 0ustar chwangchwangC C Demonstrates the use of sprng in subroutines program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk SPRNG_POINTER stream C--- reading in a generator type integer gtype #include "genf_types_menu.h" print *,'Type in a generator type (integers: 0,1,2,3,4,5): ' read *, gtype C--- streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) call sub1(stream) junk = free_sprng(stream) end C --- print random numbers in subroutine --- subroutine sub1(stream) #include "sprng_f.h" SPRNG_POINTER stream real *8 rn print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = sprng(stream) write(*, "(i6, 2H , f19.16)") i, rn 100 continue return end sprng2.0/EXAMPLES/Changes_in_EXAMPLES100644 764 764 4337 6741222263 16130 0ustar chwangchwang 'include' directory: sprng_f.h 1. added '#define DEFAULT_RNG_TYPE SPRNG_LFG' since this declaration was in the file 'interface.h' only, where it was unaccessible for Fortran codes at preprocessing time. Should, by symmetry, such declaration be moved from 'interface.h' to 'sprng.h'? 'SRC' directory: simple_mpi.c 1-6 added lines: #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 timing.c 'EXAMPLES' directory: C programs, simple, no MPI: checkpoint-simpleN.c 1. add DEFAULT_RNG_TYPE to init_sprng convertN.c 1. added #define CONVERT to get complilable code 2. added one argument, DEFAULT_RNG_TYPE, to init_sprng pi-simpleN.c 1. changed 'initialize' to 'initialize_function' because of conflicts, the same name, with libpmlcg.o 2. added one argument, DEFAULT_RNG_TYPE, to init_sprng seed-simpleN.c 1. added one argument, DEFAULT_RNG_TYPE, to init_sprng sprng-simpleN.c 1. added one argument, DEFAULT_RNG_TYPE, to init_sprng simple-simple.c no changes Fortran programs, simple, no MPI: checkpointf-simple.F 1.added one argument, DEFAULT_RNG_TYPE, to init_sprng convertf.F 1. added #define CONVERT to get complilable code 2. added one argument, DEFAULT_RNG_TYPE, to init_sprng pif-simple.F 1. changed 'initialize' to 'initialize_function' because of conflicts with the same name, in libpmlcg.o 2. added one argument, DEFAULT_RNG_TYPE, to init_sprng seedf-simple.F 1. added one argument, DEFAULT_RNG_TYPE, to init_sprng sprngf-simple.F 1. added one argument, DEFAULT_RNG_TYPE, to init_sprng simplef-simple.F no changes -------------------------------------------------- June 8 Chris S. A Fortran compiler on C90 (magnolia) failes when line s are to long: stream = init_sprng(gtype,streamnum,nstreams,seed,SPRNG_DEFAULT) Had to move the above slightly to the left in the following source files: checkpointf.F messagef_mpi.F 2streamsf_mpi.F ( broke commonstream into two line using &) sprng2.0/EXAMPLES/Makefile100600 764 764 22023 6736670723 14325 0ustar chwangchwang############################################################################ # This is a sample make file to compile some example programs # # We have set variables giving information on the archiver, the C compiler # and the FORTRAN compiler for certain machines in files make.xxx, where xxx # is the machine name, set using the PLAT variable in ../make.CHOICES. # # Then typing the command below => results in the following being created # make => Same as: make serial. # make serial => Single processor examples. # # make mpi => Examples using MPI # # make all => Single processor and MPI examples. # # # Object files created during the compilation process can be deleted # by typing # make clean # # Set 'LIBDIR' to the directory where the SPRNG libraries are. # Set 'INCDIR' to the directory where the SPRNG include files are. # We have already set these correctly, unless whoever installed the libraries # changed the locations. ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) SRCDIR = ../SRC INCDIR = ../include # use 'lfg' to get Lagged Fibonacci, 'lcg' to get Linear Congruential, etc. SPRNGLIB=sprng ########################################################################## EX = sprng seed checkpoint invalid_ID sprng-simple simple-simple seed-simple \ checkpoint-simple spawn sprngf seedf checkpointf invalid_IDf \ spawnf sprngf-simple simplef-simple seedf-simple checkpointf-simple \ pi-simple pif-simple MPIEX = sprng_mpi fsprng_mpi 2streams_mpi seed_mpi message_mpi \ sprng-simple_mpi fsprng-simple_mpi seed-simple_mpi message-simple_mpi \ sprngf_mpi fsprngf_mpi seedf_mpi messagef_mpi 2streamsf_mpi \ sprngf-simple_mpi fsprngf-simple_mpi seedf-simple_mpi \ messagef-simple_mpi pi-simple_mpi include $(SRCDIR)/make.$(PLAT) serial : $(EX) all: $(EX) $(MPIEX) mpi : $(MPIEX) simple-simple : simple-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o simple-simple simple-simple.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprng : sprng.c $(LIBDIR)/libsprng.a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o sprng sprng.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprng-simple : sprng-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o sprng-simple sprng-simple.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprng-simple_mpi : sprng-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o sprng-simple_mpi sprng-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) sprng_mpi : sprng_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o sprng_mpi sprng_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) fsprng_mpi : fsprng_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o fsprng_mpi fsprng_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) fsprng-simple_mpi : fsprng-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o fsprng-simple_mpi fsprng-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) 2streams_mpi : 2streams_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o 2streams_mpi 2streams_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) seed : seed.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o seed seed.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) seed-simple : seed-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o seed-simple seed-simple.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) seed_mpi : seed_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o seed_mpi seed_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) seed-simple_mpi : seed-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o seed-simple_mpi seed-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) checkpoint : checkpoint.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o checkpoint checkpoint.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) checkpoint-simple : checkpoint-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o checkpoint-simple checkpoint-simple.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) message_mpi : message_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o message_mpi message_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) message-simple_mpi : message-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o message-simple_mpi message-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) pi-simple : pi-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o pi-simple pi-simple.c -L$(LIBDIR) -l$(SPRNGLIB) -lm $(GMPLIB) pi-simple_mpi : pi-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o pi-simple_mpi pi-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) -lm $(GMPLIB) spawn : spawn.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -DCHECK_POINTERS -I$(INCDIR) -o spawn spawn.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) invalid_ID : invalid_ID.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -DCHECK_POINTERS -I$(INCDIR) -o invalid_ID invalid_ID.c -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprngf : sprngf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o sprngf sprngf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprngf_mpi : sprngf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o sprngf_mpi sprngf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) fsprngf_mpi : fsprngf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o fsprngf_mpi fsprngf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) seedf : seedf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o seedf seedf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) seedf_mpi : seedf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o seedf_mpi seedf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) checkpointf : checkpointf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o checkpointf checkpointf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(CMDDIR) $(CMDLIB) $(GMPLIB) messagef_mpi : messagef_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o messagef_mpi messagef_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) 2streamsf_mpi : 2streamsf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o 2streamsf_mpi 2streamsf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) invalid_IDf : invalid_IDf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o invalid_IDf invalid_IDf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) spawnf : spawnf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o spawnf spawnf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) simplef-simple : simplef-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o simplef-simple simplef-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprngf-simple : sprngf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o sprngf-simple sprngf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) sprngf-simple_mpi : sprngf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o sprngf-simple_mpi sprngf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) fsprngf-simple_mpi : fsprngf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o fsprngf-simple_mpi fsprngf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) seedf-simple : seedf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o seedf-simple seedf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(GMPLIB) seedf-simple_mpi : seedf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o seedf-simple_mpi seedf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) checkpointf-simple : checkpointf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o checkpointf-simple checkpointf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(CMDDIR) $(CMDLIB) $(GMPLIB) messagef-simple_mpi : messagef-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o messagef-simple_mpi messagef-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) $(GMPLIB) pif-simple : pif-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o pif-simple pif-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) -lm $(GMPLIB) .SUFFIXES : .SUFFIXES : .f .F .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) -I$(INCDIR) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi clean : rm -f *.o realclean : rm -f *.o $(EX) $(MPIEX) *~ *.i core a.out sprng2.0/EXAMPLES/README100600 764 764 5257 6736173533 13534 0ustar chwangchwang ___ Example programs to demonstrate SPRNG use ___ This directory contains some example programs to demonstrate the use of the SPRNG library. Fortran program file names end in ".F" and C program names end in ".c". Some programs are sequential, while other require MPI calls. The latter file names have the suffix "_mpi" before the ".c" or ".F" extension. Besides, the FORTRAN programs have an "f" suffix just before the "_mpi" or ".F".In the listing below, we give the base name for each program. (The '.C' extension is used for a couple of C++ examples.) For example, "sprng" will be associated with a file called "sprng.c" which demonstrates the default interface in C and a corresponding executable called "sprng", a file called "sprngf.F" which demonstrates the default interface in FORTRAN with a corresponding executable "sprngf". The corresponding files for the simple interface have a "-simple" suffix, namely:"sprng-simple.c", "sprng-simple", "sprngf-simple.F" and "sprngf-simple". Separate programs are not available for the interface with pointer checking. This interface is demonstrated by defining the macro "CHECK_POINTERS" before including the SPRNG header file, in the default interface examples. We have commented out a line that defines this macro in each file. Please uncomment this line in order to invoke this interface. Examples are provided for each interface, unless stated otherwise. The file 'Makefile' has the directives to compile these programs. "make" or "make serial" builds only the sequential programs. "make mpi" build only the programs that use MPI. "make all" builds all programs. 1. sprng: Demonstrates the use of sprng and isprng. 2. sprng_mpi: Demonstrates sprng use with one stream per process. 3. fsprng_mpi: Demonstrates use of the single precision generator. 4. seed: Demonstrates the use make_sprng_seed. 5. seed_mpi: Demonstrates the use of make_seed with MPI. 6. checkpoint: Demonstrates check-pointing to store the state of a stream. 7. message_mpi: Demonstrates passing a stream to another process. 8. 2streams_mpi: Demonstrates use of multiple streams on each process. Not available for the simple interface. 9. invalid_ID: Demonstrates invalid ID handling in the interface with pointer checking. It is not available in the other interfaces. 10. simple: Demonstrates SPRNG calls without initialization in the simple interface alone. 11. pi: A simple Monte Carlo application to calculate the value of pi. Not available for the default interface. Please look at http://www.ncsa.uiuc.edu/Apps/SPRNG/www/examples.html for further details. sprng2.0/EXAMPLES/store100664 764 764 56724 6736173533 13772 0ustar chwangchwang])h00Prime modulus LCGF{?:'Hgum`(4 @%@tB@ @%@ȣ@h@ @4@|@@@QA@ @AX@%@@H@v @P@.@< @83@J@h@ @`@@h@Y@Lv @P+@LL v @$PP>@;3.2360000000000002h@@S @S h@P/@ / S @v @Df2 $I@`@@.@@@@?@I@8AX@( v @DShz @.8$ L@v @B@L@B@ @L@ȣ@h@ @6H@|@@@@ @AX@L@@H@v @v @i@D@v @\+@XX v @'\\>@:5.1930396E-02 @Lb?**SZa- IT%b?v @PE 2 +& @   (b.D0X@v @@v @s@sv @@@2@@2t| d d TnXE ltE*? lmsb?ѳ@B@~@ѳ@ȣ@h@Y@@ B@@@ȣ@h@@G@'`@@.@@@l@@G@\AX@@L@H@v @ @v @`l@`_v @`_O@@xLv @`C 1@Kb@ȣ@H@ H@````s_˵@v @8@82v @,@822r!S@`x@@]28>2t3.2360000000000002@@ȣ@@@ 4 @$@@@#_r @ @@O@@0@@Ĥ@@0@$@@v @@v @zd@v @@v @@v @,O-01,@nXv @@,} @zzzz˵@v @8 @81v @8@811v @%@@?v @8?8?tT@8@?v @8 @?۶@8@?v @8@8 v @@8 s{d] 8=^ @v @8$ύ@87$4fV]sprng2.0/EXAMPLES/sprngD100775 764 764 372176 6741443251 14111 0ustar chwangchwangELF44 (444ԀԀYY\\8\8T$  K K/lib/ld-linux.so.2%9-1*0 $2"6& ! 5/%(3. 78 #,)4'+   K%dJ;hA01 G|0"Nl"S,$Z(b\j܊rL9{t5 S o\~lco <j܉̊d̋F{"<-L=J&U܋Bf\rz*l>KP\<h'|$LJ,,)L!LL!  0K"K.__gmon_start__libgmp.so.2_DYNAMIC_GLOBAL_OFFSET_TABLE__init_finimallocfreeprintffprintfmpz_mulmpz_addmpz_initmpz_setmpz_clearmpq_get_denmpq_get_nummpq_initmpz_negmpq_set_denmpq_set_nummpz_submpz_absmpz_add_uimpz_cmpmpz_cmp_uimpz_mul_uimpz_init_set_uimpz_fdiv_qmpz_sub_uimpz_fdiv_q_2expmpz_init_setmpz_get_uimpz_init_set_strmpz_set_strmpz_modmpz_pow_uimpz_powmatexitlibc.so.6__libc_init_firstexit_IO_stderr_memcpymemsetstrcpyscanftimeclocklocaltime_environ__environenviron_start_etext_edata__bss_start_endKK)L2pJtJ,xJ%|JJ JJJJ*JJJJJJ JJ JJJJ'J0J+J.J"J&J-J#JJJ$JJ!JJ JK(K/K K K KKUS[ût;]]5hJ%lJ%pJh%tJh%xJh%|Jh%Jh %Jh(%Jh0%Jh8p%Jh@`%JhHP%JhP@%JhX0%Jh` %Jhh%Jhp%Jhx%Jh%Jh%Jh%Jh%Jh%Jh%Jh%Jhp%Jh`%JhP%Jh@%Jh0%Jh %Jh%Jh%Jh%Jh%Jh%Jh%Jh%Kh %Kh(%Kh0% Kh8p%Kh@`%KhHP%KhP@1tRX~^DLPPRVh0X:PPUS`J=`JtЃ;u]ÍvUÐUVShLh~hhhhhh EPh*jh޼:jjuh- hiV6hh{1ۃV$h^C~hK1ۃVzPh3 C~6hVEe[^ÐUUvBvBwuuuu R`8ÐRhhKX1UEP8UEP8UEPx8UEuuu P8ÍvUEP8UEu P8ÐUEP 9US]EPjSZU vBvBwES91]ÐUEP89USUvBvBwuu jjR`8ЉÃRhhK1ۃ u1$vP9t R8ЉP98L]ÉUS=P9uKjjjjj`8ЉÃt(P9tR8ЃP98Lu P9P8Ћ]ÉUS=P9uKjjjjj`8ЉÃt(P9tR8ЃP98Lu 0P9P8Ћ]ÉUS=P9uKjjjjj`8ЉÃt(P9tR8ЃP98Lu 4P9Px8Ћ]ÉUP9tuR8É1US]EPjS U vBvBwES9ЉÃv1ۅu1#P9t R8ЉP98L]ÉUP9uh<hK1ËR89ÉUEP 9ÉUS]3{tP8v]ÉUEP8ÉUXzÉUSEU M vCvCwQRjjS`8ЉÃShhK1ۃ u1$vP9t R8ЉP98L]ÉUWVSEU M]u8 6vGvGwVSQRW`8WhhKp1e[^_ÉUWVSEU M]u8 6vGvGwVSQRW`8ЉÃvWhhK1ۃ Sz؍e[^_ÍvUVSE] uE uP3R8ЉÃ19}MB9|tuQ؍e[^UWVS]u }3yu1AE uP6R8ЉÃ19}MvB9|tu؍e[^_ÍvUDÉUEP8ÉUS]3ytP8v]ÉU\ÉUEP8ÉUS]3xtP8 vh]ÐUtÉUEPx8ÉUS]3VxtPx8 vl]ÐUSEE PR8ЉÃUtPRu u؋]US]3wu15E PR8ЉÃEtSPu 8 u=؋]ÉUSMP9u1QR8ЃËEtSPu u؋]ÍvUS]EPjSyU vBvBwES91]ÐUS]EPjSyU vBvBwES9ЉÃv1SLw؋]ÐUS]EPjS6yU vBvBwES9ЉÃv1ۅu1#P9t R8ЉP98L]ÉUEP89ÉUP9uh<hK1ËR89ÉUS]3utP89v1]ÐUSU1۹Ѓ Iy؋]ÉUuu uhthK]ÍvUWVS}u ]19} v8 08t)‰ @9|1e[^_ÐUWVS}u}(EhhhhthKT99E |Pu hhK} |M9M |(hKhhEhthK1vv#hahhhthK_1=9uX99hh(j(tà u1M C{ u CPj/nM KMKs %5mC5+CX9C$ {uK1vS>؃FSRB9|9؍e[^_U4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%AQ Ѝe[^_Uu ]EÉU4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%AP $Ie[^_ÍvUWVSEE} (E hhhhthK&hhu uVpE u E1} Z19} G]hhj(p‰ tċuv r GuFFBP ~-5T9RhhKv3Vо Pu FEpr3vVjkjE@$B$uv r E@Bu62E@ %5mBuv +r zuJz ~ REQF؃E QRB9E|߃G9} E @uFFE 9Eu}t'19} ~ u4pƒ`G9} E e[^_ÍvUVSME ]E1҉44tB~M D!B~1҉DB~e[^U WVS}vDKy1ۍv1ɉu TA~C~߻Uv D"C~19]~DuC9]e[^_ÍvUlWVS1}$}X9v1}8 8u@|1u1)‰F~1uhhK$TԠTEE E E EEE" EB vEEEz EEE EESvEE EEAEEEN EvEE ErE EEE EvEEE{E EEE E< vEE EGE3EEEE VEE E2E EEEE@VhhKv}WGǁ} %Eԉׁ} U܋}WЅ}%)‰U}W y%)‰Uċ}WЅ}%)‰UEuЍ}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|u}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|EЍME1҉<<|B~M D!B~1҉DB~E EЋ}GE E؉Ge[^_Uuu 99UWVS]{0҉Ѓ(hhPZiƉu Vj3ksV{0҉U֋CEK KMVjjEEPkփ$Vjs 5kVjs&kVjskփ$VjskVjs j֋K$QUC$@ ‰UK$ U[$]S C ‰UVjjuj֋EM )‰ M 1e[^_ÐUE@ ÐU WVSuuhh2j(hà u1SjujEU࿑91t FO)ȃ thuh hK1,C0EuuVjjujEusUE ‰SC Pju,jECPjujE(CPjujECPjuiEC PjuiE$ujjujM΁u% EUЃ MUC vh7hKSn1X9C$9؍e[^_ÐUS]hhcs ss hh]ÐU4WVSEEE`E-EEZEE11EEEŰM#t vEЍB!u]EЃ EŰ}#Wt vEЍB!uuEЃ mMyEMMEME}E̍B!uM̉M̺ +UܸE}WEЍB!uM1M̋ẼM E}}؋M#9t E̍B!u}̉}EMQM؋}#Tt vEЍB!uM1M̋ẼM ƃEAM܃(}Ge[^_U WVSUR$U}w WUO_(9]+]<u؉>EH9}-MMuEu3}؉CEH9|ۋMuDE9}B9|}@HMԋ@EЋEEE3EEuE/7uuVJVD}ԋɋ}ЉEH9})uuEu3}ЉCEH9|ۋMuDE9}B9|E}} MM̍uuȋ}}E9}SM Mu}M@EuB}MD@t!hnhdh\hLhKu}D%?DUx$vC@tMD%?JyE]K9]}uP}MG}9|ux}@ EM̋E3EEuE/7uȉUuu>u>!uȉUaEM3uCUB9|֋}DM̋9}v @9|u@x}@EM̋E3EEuE/7uȉUuu>u>#vuȉUEM3uCUB9|֋}DM̋9}v @9|EEu9u tNE}9}M9M t7uNu~uu}MtO}M}OXuu Nu}}M MEE9J9U}"uXЋ}<tEE9E|}Eju6u~$}ċ^ NMFV(9|)44}  HyEHJyUJ44}Hy uNMq}GEM9M|EM2}uuvEpvMu Mq$uY y}AQ(9|)  u<#ET#U ‹}Wuu# 5$!w}EKHe[^_U0WVS11ɋE#UE}t E vEEEEEt= }ء$Eԉ֍4U1QR,$}E Em<$ZYm#]#uԋ}}ЋM UЉU#M؉ME#EԉEЉE}#MU#WU}ut_M΋UщMU1QR,$1QR,$}E Em<$ZYmU}}E!E}!}E܃}? ء !E $U!ʉUE} W !!Oe[^_UtWVSU0Uh|h>] ]S@Eh|h?S@Eă}Eu 9u}ȍ<}]ĉ]h|hEj<@u }8B,h|hKuk@B(h|hL]ȍRL@B$Z0U4Q4ur}]Z8urBBz$tz(u11EE܋} 9}-]ċ uQuur$VuVr(q :M:U# M#$UE}9}kE#]]#UU}uuċ}z$}URWbE,(UډUU1QR,$(1ډQR,$}] ]m<$ZYmUUU(E# Eu#5$u}UW !5$!w7}ċ]Z$]URSUUS5 !3=$!{]]M ЉEɉM# M#$EEEЋu9u}ċB( :]H :9sAHuċR(}:R( !R(5$!rE}} ]K]u܉uE9u}č<}]؋ű}ċR(U] Quur$u~uuuEu9u}T= }$]J(u}J(TTR(]!uR(}!DG}]9| :M:U# M#$UEu9ukE=#}}#UU}u]ur$uURVE=,(UUU1ډQR,$5(1QR,$}] ]m<$ZYmUUU(E# Eu#5$u}UW !5$!w7}]Z$]URSUUS5 !3=$!{]]M ЉEɉM# M#$EEEЋu9u}B( :]H :9sAHuR(}:R( !R(5$!rEE܋}9} tOE؋]9]Lu9u t8}O}؅~}}؋]؋ủ|K]؅uԋ]̉suX} O}U+UU]č]vEEMI9M}(uR(}<u|tEE9M|}!E]9]U+UUuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5 !4ʋJ,R$=$!|E]9]EM}"uu}܋]č<}vEuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5 !4ʋJ,R$=$!|E]9]EMEče[^_ÍvUWVS}uhhK赴:9E |Pu hhK蕴} |9} |Wju h}hKr1Uve vhhKM10Eh|h]KP6 M @9}vDB9|uPE5/7PVjut0Pm^(uSSB 9;s{t:MM N~ h|hNPC6Fh|hNP&6‰V ~tu1)vF$V F(BFN0ɉVF0HBe[^_ÉU WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$}] ]m<$ZYm_,TO,W$ʋO,W$ !ʋO,W$$!\_,G$T1QR,$ɋ1QR,$e[^_U WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$ }] ]m<$ZYm_,TO,W$ʋO,W$ !ʋO,W$$!\O,W$De[^_ÉUu]EÉUWVSu} E h hK^(vSv8vu 6vEuM1v0SS>1 9u ]h|ho@PP3‹Ph|hp@P13‹P xtP t@$P @(BBR0҉P@0HBF9u y} =:}M9}t&19u ~vM43F9u E e[^_ÐUVSu19^~F 4YC9^~~vBv :V1 ::e[^ÍvU WVSEEP00ۋx։uT2Uh|hu1Ɖu uE 1rVjM1#4֋EpVMy҉UVjEp3փ VjMq 3VjEp3VjMq3փ$VjEp,3VjMq03VjEp4z3փ$VjMq8e3֋EX(H0IM 19}/CEERjjEPUh3UG9}ҋE4ƋMY$A0E19}.CEERjjEPU 3UG9}ҋM4΋ME )ʉЍe[^_ÉU WVSh|hj]jH }ƋIE4uU)lj}U9U0L]}t ~gEEE9E}!50LE]<@LtC]9|u!}~ M1]EU @EE9EU9U~Ruh&hK譀Ee[^_ÐUWVS1E19}2v@LE}u EvE9A9|у}u4@LGC~e[^_ÉUWVSE}uh&hK1}}uh'hK1EUD=#U]VRSu QE= Juo1E19}2v@LE}u EvE9A9|у}u4@LGC~=4L J}_v!hM'hKE_1U}EVEE?}'ƋeE4uU])lj}U9U4L]}DvgEEE9E}"54LE]14@LtC]9|u }~ M1]EU @EE9EU9U~Ruh'hK~Ee[^_ÐUWVS]Sv~SP~QЋyQ ЋyƋY A ËQUY 11Ƌ=J)1щ1ƍA1щ J1΁e[^_ÐUEu1ÉP|uu uh'hK|1ÉÐUUu1ÉЃEJt 9t@uRh/(hK|1ÐUS]u1G؃ EJytQ9tуyuSh/(hKi|1BAR~؋]ÐUWVSut;hO(jhjÅt3 JD C\ 1e[^_ÐUWVS}] u19}v)Ѝ 2B9|؍e[^_ÍvUWVSu19] ~4}<}19U~E)Ѝ E2B9UuC9] ͋EE e[^_ÉUWVS}u ]19}9 ‰A9|e[^_UWVS19} ~6]u19M~v1 ‰A9MuG9} ыEE e[^_ÉUWVS}] u19}v)Ѝ 2B9|؍e[^_ÍvUWVSu19] ~4}<}19U~E)Ѝ E2B9UuC9] ͋EE e[^_ÉUWVS}u ]19}9 ‰A9|e[^_UWVS19} ~6]u19M~v1 ‰A9MuG9} ыEE e[^_ÐUSTJ=TJtЃ;u]ÍvUÐUS[+9{]]Evailable generators; use corresponding numeral: lfg --- 0 lcg --- 1 lcg64 --- 2 cmrg --- 3 mlfg --- 4 pmlcg --- 5 Type in a generator type (integers: 0,1,2,3,4,5): %d -------------------------------------------------------- Print information about new stream: rng_type is %d Printing 3 random numbers in [0,1): %f Printing 3 random integers in [0,2^31): %16d Error: in init_rng, invalid generator type: %d. WARNING: No generator initialized so far %s from %s: %s WARNINGinit_rngTotal_gen <= 0. Default value of 1 used for total_genWARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. multiplier not valid. Using Default paramlcg.c0048 bit Linear Congruential Generator with Prime Addendp> maximum number of independent streams: %d Independence of streams cannot be guranteed. WARNING: advance_seed: multiplier not acceptable. WARNING: advance_seed parameters for multiplier %d not available ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters not acceptable. %s seed = %d, stream_number = %d parameter = %d ] 7 ?a ad S_N_i%s from %s: %s WARNINGsi_doublegenerator has branched maximum number of times; independence of generators no longer guaranteed==lfg.c00Additive Lagged Fibonacci Generatorinit_rngTotal_gen <= 0. Default value of 1 used for total_genWARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. Parameter not valid. Using Default paramchanging global L value! Independence of streams is not guaranteedchanging global seed value! Independence of streams is not guaranteedspawn_rngNspawned <= 0. Default value of 1 used for nspawnedERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. unpack_rngdifferent global seed value! Independence of streams is not guaranteed %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. lcg64.c0064 bit Linear Congruential Generator with Prime Addend>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d  7 ?a ad S_N_i]?8ZWARNING: si_double -- RNG has branched maximum number of times. Independence of generators no longer guaranteed =mlfg.c00Multiplicative Lagged Fibonacci Generator=WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. =;=WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. cmrg.c00Combined multiple recursive generator>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d 235711133141611513311321101715372286728091293027097804800000000100000000000000000000000pmlcg.cWARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. 00Prime modulus LCGACACWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d memory allocation failure in file: %s at line number: %d ERROR: Invalid generator ID %p checkid.cȻ8L 4PT4D\\\lPԸh$,\(D4 4(P@u{meD  B 8 u 9 "_.'Uino,?16_.'Uino,?16@qo]QE;!aUI7_S51)#weG-)#C! wqYC;+{k_MKEA#{smgO73-skeaYO){eK53)]C% g+wqQG?5 ymiO'sqkUS5/ok]E/)!uiWI- }wq_[;)# }woe/ sig][C3wmgaOG1 {qc_YW/-!yso[UIE1-+sa[A)kS93{[WE9! _YUM#o_GA3! yuW=' ysaSIG%5/smI7-+%qYG51+#ucY iga]K?+YSOCwkKEA;-!ߴߴߴߴߴߴߴyߴoߴQߴ=ߴ1ߴ-ߴ!ߴߴ޴޴޴޴޴s޴m޴k޴G޴7޴޴ ޴޴ݴݴݴݴݴ}ݴiݴeݴMݴܴܴܴܴܴܴܴyܴuܴ[ܴOܴIܴ9ܴ%ܴ!ܴܴ ܴܴܴ۴۴۴۴۴۴w۴q۴g۴a۴O۴C۴A۴/۴#۴۴ ۴ڴڴڴڴڴڴڴQڴGڴ5ڴ3ڴ'ڴڴڴ ڴڴٴٴٴٴٴٴٴٴٴٴٴsٴaٴ9ٴ3ٴٴٴٴششششششششsش[شSشAش%ششش ش״״״״w״e״]״S״M״G״E״9״'״״״ ״״ִִִִִִִmִaִWִUִ1ִ'ִִմմմմմwմsմeմUմ;մ+մմԴԴԴԴԴԴԴԴԴԴԴԴ}ԴkԴMԴ3Դ'ԴӴӴӴӴӴӴsӴoӴ=Ӵ-Ӵ!ӴӴҴҴҴҴҴҴҴkҴeҴ+ҴҴҴҴѴѴѴѴѴѴѴ}ѴwѴ]ѴYѴMѴAѴ/Ѵ'Ѵ#ѴѴѴѴдддддддUдIд?д+д'ддд дϴϴϴϴϴϴϴϴϴϴϴϴϴϴsϴeϴaϴ_ϴUϴ#ϴϴϴϴδδδδδδδδ{δ]δQδKδ9δ5δ#δ!δδδδʹʹʹʹʹʹʹʹʹuʹmʹcʹ]ʹOʹ=ʹʹ̴̴̴̴̴̴̴̴}̴a̴S̴5̴/̴%̴̴̴ ̴̴˴˴˴˴˴˴˴˴˴i˴Y˴S˴K˴A˴-˴)˴˴˴˴ʴʴʴʴʴʴʴyʴiʴOʴ=ʴ7ʴ1ʴ-ʴʴɴɴɴɴɴɴɴɴkɴ[ɴUɴ)ɴɴ ɴȴȴȴȴwȴoȴQȴEȴ)ȴȴǴǴǴǴǴǴǴǴǴǴmǴiǴgǴcǴKǴIǴ+Ǵ'ǴǴƴƴƴƴƴƴqƴgƴ_ƴYƴAƴ탴DedziFDz5IEȱ3G ˰猰L;ѯgPҮRԭ˓SSӬiTիW֪X]۩9[Aiݨ`_!ߧi`!Ӥ)dk&ͦ]h) ͪk)sk -qr)3ݴ)u5'Ѹww9 G~>o˂;C7ŝ'GȜъL ΛM ͚Pҙ[UY٘[KZٗM[ݖG_+qޕ៕b#A gC'g㨓QjK, Gn1km_v 7Ay{:?~>DyǍeH 9̌oPԋW=Eيo\]މ{^ Eѡ=c%Eǩj5,-mn/;vc77~>mƒm/Fwuʂ5cN 9Ӂ)3Xڀ \OM)a%!~;~i~k,~}}p}k3}|s|x|;|{?{ {@{{ezzGzz yyMyy+x=xUxxKw%w_w="wvvgv(vuuu[mu0uttvtq9tsgs=sAssrLJr7Ir rqquQqq9pp3ZpApo٠oaoy$onnln.nmUmqtm6mll/{l?llkkIk%kjj;SjjiAiq_i=!iohhkh.hg/gougA7gfsf5fuDffueeMeedCdXddc{cccy'cbbobk1bcaa]ya':a`˽``C``__KS__^'^a]^!^]]h]]+]I\\s\7\ [[[C[[ZZUNZZYY]Y!YXŦXjX,XWWtW58WcVVVCFVVUUQUUTT]T3 ToSSihS,SR3RwR9RQOQwQHQ QPoPUPP=OOfO*ONN}rN6N!MMŁMEM M]L%LRLGLKK+dK'K#J!JAvJ9JIIoIIIq IHHsWHHG'GhGA-GF]FCxF>>L>>==;a=&=_<!<q<5<;;];{J;[;y::[:":9s9Wp94988[85I887×7\7"7c6 6r686k555I5/ 54)4[4 4%3ì3q363-2'2˅2J2w2E11_1%1030uy0?0]0q//V//..l.1.)---_H- - ,,^,$,+E+t+;;++;*Ϗ*%U**)[)l)2)(ſ(S(L((''d'-'Q&3&&E&G &Y% % `%y&%Q$Ͳ$x$@$O$#)#1Y# #""t";"="!G!KV!)!S ݫ s 9  eVtS<X %wo@ǖ_)'CY~;E ']e-1N? mC4CmW SQzC !f./ʼniRux> gISg%1+_}X!;~]IM%o:o g c / G } c Y Y$ o m P  C ?~ ;J  Kw C  }kt@Q s@YuBuGxF={;O{[K\, o_@_Ès\/%Y\56}-oa9gM7/{]YQ;95/K?1+!}sgA)okYWMA3-yigW=M1{qiWE'{yU3- wm_YMA= }ua]1 wSC;%iecAcWEseq]QE5/)W9+)uYQ3 siQI?wqgeC=;wq]MA-]3ymeOMGA3#!WO31'wmkSOI;51oie)C yUM%#qWSE3! u!  g7 }_GE'iWI=97-m;1+_smE7'wkaUMA/)}eSyc%qaMqc?OC973kC5 uo{uWK!  }_SOG+ M/#ɿsi=ѾžYM%׽qY-ɼoI?1+ݻ[M7 {]AٹչǹmaI+ ٸ׸˸Ǹs_YAݷ˷÷wcY? ɶǶyoU7ߵӵŵya[=/ ۴ϴke]WS5/)߳óWECѲ}seY;#۱wiMG- ɰo[ѯaG;+ŮE;9ǭsoI=1' ٬Ŭ}sMA;){ui_WSM-۪Ϫgc][=3%ѩ1+#}ocKA;5)'٧iK31ͦsSC ݥۥťwcE95' Ǥsg-+'mgOIGA;עϢ}QK93 ߡ͡{sKICge[Y=1%uS-ݭTsH1洣M{ߴ]ܴYIٴ%ִҴ\ϴ˴ȴYŴ´ﲾZ jG˪s #͠wWaɖ]h]i'i[-r"|xwurn1nkh#dga^ZjWTPeMJFaYC@<9S96ߵ2a/,ɵ(c% "oha`A ^;k!wlqg鳭üg߳ܳسgճ#ҳγk˳ȳ-ij iK 3hmGʦo˜q{В}K(9Ԉ+~{3xmtqcEnjgHd`՘]DZVUS[;PLaI:FB ?%:<8c5829.ь+/($9!)6UIGߔ I 'C;e{FŖ岥Aⲱ޲1۲Aز3ԲѲPβSʲIDzIIJmFq鶲ᑳ}? 䬲ό;1;ࢲwi-՘U~7(ێ˅G3cބ,~Yzsw0tp7mk-j fWcK-`\Y?VSRKOi?LHuEBBU>c;J84?1G.*'D$c EGYU ; gia!hqﱋ)tAᱥgޱ3۱ױlԱ_ѱͱAmʱ DZñ;;6ֹ}xi&ѯ{ ,ե넢E:ۛ)[/ᑱцU5 ㇱA}zGws[paNmYi?fOc_ߤ\TYVR]OLH=^E] Bs>^;g84d1Y.ջ*/e'$+ fog  ?h )[Sa򰭹\C䰁hᰭްڰeװ԰mа{nͰʰưyð;*oۼm-زɂ3{ר9螰:o┰ AoM=})Mz[vϦsmRplCiSfQb_]\ YUbROݺKgH3EyAj> ;7Ah4i1-g* '#)b 1[Z i TqE\ f5;m]ݯiگAׯ;ӯYrЯ ͯɯcƯ*ïiӿO,sٵ#6㫯A?󔞯AML1O탯5H}myv-Msoפl1PiYe˰baZ_[X_TURNTK[ HDIjA >_:57.40)-6*a _FMY: cF'?DǢK䮛ஙݮ[Sڮ'֮ӮqJЮ̮ɮZƮîMZ Kcj#ɫj¡r}˗zk&ՍA,#փ7:}5y%v:solHie}bK_[X]aURNY_KqHDZA>:`7M4y0l-*&ev# Y- 7+0 ŇG9OËaE/>Iݭ Nڭ֭Eӭ7WЭͭ9ɭVƭí1`;gӿgY fY×u $ύu]ȃ)sI}ysv!so~l=/ieb;_ [X7UQ)N8KGDGA=G:K730J-1)&T# fu/i hMu{)k+I/ݬ@ڬ֬;ӬLЬu̬GɬPƬ¬͜QwݬW[벡d laԍ5&S҃_z/}yv1so)l+ieYbCC_m[ XM7UQNS;KG[DGA=:I7q40qX-*&i[# \ɴ_aa h)x'Sv%E+ݫ-9ګ֫ӫ1?Ы̫Sɫ[4ƫ«G[[7d? yi Ǎcv&/҃v}y|v'sYoal/2i;ecbM6_[?X78U#QNLKEGDRA=:T7e3c0eZ-S*5&e# C'jSI{" 1.#:?ǎuD)窿IݪIڪC֪}ӪQRЪͪkɪYcƪy êWĿek% 5ϵtyȫzɡw|+qޗщ2፪RɲK]}Yz3vcsp+l`iS fbOl_\sXWmURNxK_-HDyA;>G:7]I40g-J*&[#SS 3h'i _ s}+yc:F5AyݩwکUש]ԩЩbͩ} ʩ+ƩgcéelOjY!Ψu1ɕCq󔩹R YM%}Wzw sZpSmiudfuc_sf\MYQUlRYOK)|H9!EA>S-;w7]4 11o-*:'#ۚ D#Jc% _ gc 35jvY%訫zᨧ,ި[ڨ ר_0Ԩ[Ш ͨ/ʨƨUè5ܼe:䲨ՑDRGXwkćx'G}Mz/wosp3m%iQf;c_S\yAYwURFOKH SEoBS>ej;3849{1(.*['%3$ 1<y7J [ qPo9g~0]=Y6姹5ާ7ۧ קԧ@ѧ ͧqʧ]Iǧçu_ lgǬp!]ԢA+?☧ۈK7>ㄧ󌁧8~%zwsKtpmMNj=gwcZ`I]IY7`VSO1dL I=E nB?;8:51.C+-'$F!yVqd _ z':ߗFwI{ަݧۦ{RئԦѦAYΦ˦ǦAfĦǽ{,ճ/q/ᩦ󐦦7C矦LS몈X~e{xthqnojyg-!do`U]3ZSVSuS-O? Y!Ƿqkߥܥwإtե ҥΥI˥S.ȥĥ2#ấ<찥ϤPyY-^ +[g {l][̅_1{ǔxo@uq!nJkYgKdVa^yZ^WTP}fMoJFpC%@<'9A262?/N,)%f"oCgMu$ W3EI3X꤯yfܤ/q٤֤ҤrϤ%"̤Ȥ}Ť,¤׾у-ߴD大Jkc񾓤'hqˉsi||'yuMr,ok?h0eai^>[iWyTRQN3J_GD@x=):63Y70,m)?&"JPk `C!h?95磱㣣iAݣ٣֣ZӣMУ[̣)Yɣƣ7£b Afî x"ˤuz1暣G@쐣їGC-A|ۡyCvyr!oNlh_e[fbU_[!xX-UQ!N/1KGCDaLA>ר:U7 4S0o-"*& {#C. W{0F ٔ-DI?mUc`碭eq᢫ݢ}oڢ-$עӢТa;͢oɢYƢVâ/5Y5᫲[' 缨m͞ouY̊as! ΀)}G4zvݕs>pslIi[fU c;_`\ Y[UfRiOcKhHEAK{>,;7Ñ4;1-3*B'# Nߪ3^ l {Cv+];M8Q5]1_.S+'t$$!yq6SK= CmU' t#A5ޝ۝7؝ԝѝMΝʝǝm\ĝcpM"qԳCg3ߩ琦q:k3H_3U]c~w{I'xtq;nej gId5`]9ZZi WS-wPM1IkF&C?<{F9-52iX/ ,(e%"l)qS' |}(ۊQ{;)84a1EL.[*'G$ /[Uv/ u"; =Ogq⚗ޚzۚ)ؚԚoњo=ΚʚqǚTĚMdsdzv0u۩GTgݱ`kˆv'~{:}7=Q409-b*''#)~ {/Fm +] m iC81ɤZ˻olޘ%ۘטuԘ;јw͘ʘ;Yǘ-ĘkĶz4͜QXcE1i' ̋5灘y~R{xݶtcqnjg*ds`]AZ3VSyhPM3IiwF.Ce?:E7A40-\*'E#p I7u' J QydCuU@ǟS1喭nޖ/*ۖזԖ/і͖ ʖOǖÖ+Mf#ɶ{3謖Vd ҕq<狖EYO~U]{ xtpq#nj+g7>d`q]EJZSVQSiPiMIF,C?/< K9;52`/u,(ey%'"E?Gɪ]` =y+@Q՟'M yi ܕٕ9֕ҕoϕY̕ɕŕx•C,㻕c?Z; ['s!U֚7吕{T۲GjG}yv?suo lWicfbAp_"\XUFRsNKYHEmA3|>:;7ۗ4kH17-9*X';$Ǽ f[5~/ q C%A[%z&C_;<ǤޔQ۔ؔ-Ԕ#hєΔʔ {ǔ1,Ĕ@붔\1ĩt%/ן E`on#~{'9xt?qKnKjgQbda]kZ/#WSP;MEIFIOC@#IJs]mA#ꓛ9Bܓ!ٓi֓ӓ#ϓu̓i,ɓœ“MCoEmЮA{)礓IõkkɍW2փ[@}y[vbsplgi=fb_i\K Y}U|R4OKHEEAe>f;)84m1@.*K'L$- o -4 S HCs#E)蒷W\ ߒ߾ےtؒu!ՒђΒ8˒ǒĒEkS^y5%Qݦ%BUTaq $Ѕ;{kx=Pu]rnglkhgd1a;^mZgWdTQWMeJ_1G;CU@SE=9W6Ma30W,)1&"Yk?t" ۋ9?%]YaM䑭ݑ/ڑ֑ӑNБ̑ɑIkƑ3Ñѿe9@gQ`}Ψw+מ=Y] yƇws(})z{=wsp9em? jgfce@`M\IYYV SQOwuL.I}EϚBK?<8p52'.k~+ =('$!Pc_ y ,C3cLgu=jyc鐇/搏ϖߐQܐSؐ/ՐgiҐ ϐː/ȐO.Ő}Ks]yΪ5o9YMr'=剐EiQ |iyv-r?oIlIheeb_m[AX7UQcN{FKG'DaAW>3:mw7#.4S0-S*'#K} Y-ON j a53_}AWg`sOޏ .ۏ-׏cԏIяyΏӵʏkǏ ďGGG6C춏磳}Y=m؟=;Q ˆ=x-(o~{3KxuOqknkg{d2a]ZXWT7P3iMJFӅC6@<39S[63;/p, )%"[@CTg #aGc]a;0]]Lݎ5ڎ֎aӎ Ў?̎osɎ+'ƎoŽ󔿎Dkc_}ȫ{1u衎훞eS ῔s Ί󈇎'@ɪ}`zwis}p1mifkUc `\ oYVRyO:LHEW^B{?e;u8u451.M+'$i!_A] l {{Y@_3Y ugs1⍧ߍq>܍؍Սjҍύ{ˍsȍ0ōuHu e'Ѫ 7e젍#G_t}$yډ;N|pyv3rm~o;l heYb_[qX(U?QۑNY?KCGDbA>1:7:40-+X* '#9~ :ESb 3 65O9oo%5ތZیk،Ԍ{ь8ΌWʌnjUČټs̳2㩌坦R hՒ[EC'bK{o~x3uUq;n Qk? hd ta!^ZWBT3PkMYJGGCmv@5=956_3M 0,u)(&"H[m" Q@3\C9Qx) }狟L݋mڋ׋aӋgЋ9<͋OɋƋ[Ëmļ3z%+ٲኯCD#d=՛k3呋AZ}C҄_1~zw?tpkmkj1gc}`H]3YVgS_PLŅI9FqBo?Vs;kK84/1c.+'}u$M#!Sч+:YSa  }<kb 쉥H剟≛f߉ ܉؉Չu<҉UΉ#ˉPȉ ʼn7FYGkӪ/<9i^kʓO8m቉eL|nye-v{roBlheY_b_[aX9UQQcN\K)HD%}A7>u:?7N4I0-q*'# :w`g u Aaf5ٚgOU3ވyۈq8؈ԈшYΈˈiLj}ĈA9콈\Ȱ2 T] !5eY)E‚ir%)|mxՎuUGraokwhq'ea^R[?X'T'lQ+NJ G_D}A;=:-87g3{0g]-) *&{#2 '%IFv )) !;Iî^uÅ6ᇓRއmۇ/ׇqԇ-ч͇ʇA;LJÇ!^Ŷ傳8I꬇ק%c͟6e蕇'\ԈŎI{vxE4u=q1nPkhidAa=6^wZ)WgTQMwJ MGD@t=5):!6+3_?0,Dz)En&&# O{x- #iM o,񆑓E䆇na&ކچ׆VԆц͆ʆ>džAÆgi!նCIOj(㟆]H鲒dψ+2~{_xuqyn0kg)dTa^ZW2ToPMRJaGqCp@?(=996I30,]y)u4&"[eQk4/ 1d;~g6y􅡨c\녓Cg݅ څpׅ(ԅ)ЅɘͅTʅGDž=Åu55ๅ񜶅#Mp+ޢm?sr3)ߋ'K/~k{E'xt!q]UnkygSsd]!a][ZAW;SP%oMQ&JIF_C{W@% =!9x623=/,K_)_&"Չw6sW p!+%eJWWy,mkM ?݄Eڄ<ׄ[ӄЄ9^̈́ʄ;ƄÄB})je"د׋>-ii(ܘюGS=d7Íc~9{wtQWqQnjg6d`]XZWSPHM IFsC,@+<9)P6_3 /i,A$)%"JC7{5 GQp-o?CA-f;$a݃Zڃ׃7ӃЃI1̓cɃ7ƃQà w¼{;1۲3?SAyM-=_؎5Ei7n~w'{wwtWq n+jug *d`]}LZWS#nP(MIF:CC?<[9'62/<, (%a"%CwE2!U\ )3}6SY]i킓ꂙ?炑ig݂"ڂւӂgLЂ͂ ɂxƂ/Â뿂R Am:eIΛCsg_ׄ玁E~zQwIdtW"qm͔jHgd`k] -ZVKS`PMIFG,(7%d">KϡSY U]xi2-qXs|-'59T݁ځց-ӁiKЁ1́ɁukƁ%!Á)ؿݠQ= [Ȳ}49Qk()ٛGͶu ㄁ͣZ~= {wErtO(q)mjJg? d`~]#AZVS3lPM#IF CC?ٷ}:}v7}54}q0}9-}Wc*}'}#}NJ }MF}q}}q}(}/ } }CF}}|w|0|||;Z||| |aG|||i|k>||-|%c| |-||'P|A||r|7-|||m`|%|EҠ|߂|C|||is|)|M||?h||[||y|Jv|s|!o|l|G5i|=e|Yb|#c_|\|X|_U|Y=R|SN|K|eH|#E|A|>|E;|7|4|u1|1.|*|'|b$|!|||L| || |U@ ||A|d| "{{ɗ{wN{{{v{0{{ǰ{s{.{{_{V{ {3{ou{!/{{{\{G {˱{E{K{{ä{'x{/{{{r{+&{]{ř{V{ {ŀ{?x}{ezz׫zez zezYzRz ~zzzwzG@tzpzYmzljz/gzcz`zuM]zZzVzQvSz96PzLz׭IzcFzCzu?z7,z)z%z|"z7zz zjz?$zz zGzazѿzyy[7yyy^y{y_yy Uy yysy3>y?y9ygy[,yymyjy#yyyHyy3yqy/yyyGYy-yƕyyC=yyպyyy3y~yg{yObxyuyqynyEkygy5dyray[.^yZyWyXTy QyMycJy;GySCy@yz=y::y6y3yk0y(-y)y&y;W#y% y#ysy-Kyy y-x y3 y#yy+dxxSxx;Kxxxtx0x}x xwSxxx}xAxxxaqx0xxxU`xSxذxᖭxMxxˣxo~x4x)xGx)]x]x׌xxOx)xyxAz|xG2yxuxrx[oxlxChxÏexFbx_x[x {Xx8UxaQxNx}kKx1!HxDxkAxJ>x;x7x{4x51x-xe*xp'x.$xg x5xax#xxxN x xxxkQxwwwFw#w=ww8wwwYiw'wwWwPwwww}wu=;uyO8uu 5u1u.u<+u'uW$up!uw2uu}uoiu=uA uu u7Wu5u%u tFtt?tqte0t'tmtjt+ttٗtWt tctnt:tmtt%wt2ttt9gt tttSt tȞttaGtttsyt;tt1t3lt&~tgztwtWtt=qtImtjtEgt/dt`t]tyFZtWtSt-sPt/MtIt߮FtqCt1@ts;sy7s4s\1sQ.s*sA's]N$s !ssŁs9:sssqx s: s+ssws6rMr r`r-%rcrUrarrrrCYrrr r1=rrr]ur 2rrrarArٮrrCWr%r١r;rMr rU̔rr9rr#r!|r;9rm}rzrbwrtrpr'mriWjr grcrDž`r'L]rGZr7Vr}Sr5PrLrIr/jFr Cr=?rWq:q7q {4qU71qS-q*qh'q7,$qk qqjq/qq۰ql q!( qqqbqpwppOpGpp~p?pppswp6ppMpmip,pp;pnpe6pp硸p}]pYpۮp+pPppΡpQp1Fpqp͔ppJpp܇ppQp[~p zpwpNtpU qpmpjpk7gpcp`pq]pk,Zp=Vp Sp^PpMpIpEFpKCp@p{oQ\;o)8o4oA1oiH.oY+o'oCx$o3!ooono]-oGo oq o2ooomnC$n=n{n^nnn/nXnninonHn nnnC=nn%n)sn/nnenun0nnOnkjn-nOnٰnwvn6nnMnivn+nn%nm~n#{nwnitnXqnnnyjnߑgn}Sdn an]n+ZnTWnTnmPnMnYPJn GnkCn@ny==n 9n6nt3ne+0n ,n)nKi&n)#nn]nmZnn#nnU n nnςnAme mmmFmmmm @m!mm+mBmCmmm:mmm]zm 4m?mmsm93memٯm1rm 2mYm몝mbm'mmGmZmmцmUm)Sm}msymvmPsmpmlm!imIJfmE cm_m\m=EYmVmRmOm{GLmI ImaEm%Bm+T?m%m+!mmym>mm]mAnm. mmǰmnm)lllql3llelml&l/llllI%l?lQlO\l?ll5lVllݹll^l'lllXlIlПlIlQl+lʒl1lLllʅlgl>l{lxlulFrlolklw{hl54el=aly^ln[l'XlTl9QlhNl$KlGl}DlKbAlO">l+:l7lc4lQ1l-l*l]'l$l l-lUl?lllL l l=llPl kkkEkkk~kA@kkkQkxk9kk?k k@kCkkok=kkk5~k=k5kckxk7kKkẞkk5kkknk',k_kٰk1mk9,~kzk˩wkahtk"qk}mkϡjk!dgk"dkU`kA]kcZkWk-Sk}Pk\MkJk;FkYCkX@k}=ke9kW6ka^3kO#0k,kw)kb&k#k!kkpkI%kikkm k2 kkŬk9lj-jjj]yj14jgj)jmj8jSjijtjq7jWjj׆jBjj=js}j>jjj}jAjKjçj|jFjjj~j:jj{jwj7jjj z}j5zjvjysjkrpj1mjUijfjscj:`j\j9YjzVj1SjOjsLjuIji3FjYBj?j[}jjAi iJi ii{iAiSiiS~iHiU iiGi5Oi?iii9?i!ieƽi5i_Bi?ii|ii9iii}i@iiciWwi7i_iĉi1i=Fii|iyyi:virioimli2iieibi]{_i1\iXiUiwRi3OiKiHi!wEi-5Bi>i;i{8i65i1i.i+i-E(i-%i!iaia?iiiiEiM iiτiIKi1hhhYEhh-hM|h>hhhňhGh hh=hMh]hhhyYh/hйhhMhhʬhᆩhHhkhA͟hh%Rhh+ڒhhbhih؅hh{Yh9|hqxhuhYrhoh1kh-hh ]eh bh^hY[hfXh%UhQhNhlKh++HhDhAhw>h5;h7h4h%r1h..h*h3'hg$he$!h]hhnh}&hh hj h6hshhtg8g}gg~g#bbbbLb#b5b bM b boba{LaaaaXa-a-aa1_ay a3aaja?'aa=a}awGaa̾aՌaEVa+aرa휮a?ZaAa-ߤa}a`aO.aaasa8aaa7aMag ~auzaѓwa[ta qa7majahga+da1`a]a?uZa:WaTa/PaMa]Ja$GaCaa@ah=a,:a6aϲ3a9s0a=-aI*a&a#aaR aia?aaaa%aC a apa96a`)`kz`C````Q`o```[````j`)``5`m`K2`i`շ`}`>`U`i``UQ`u`ݞ``s`:```z`=`C`Ɓ`3~`G{` x`t`%q`Tn`k`g`d`\a` ^`/Z`W`eT`.Q`MM`wJ`w{G`EED`A`S=`):`K7` 4`O0`7-`\*`;'`o#` `uk`2``O`_`H ` ``É`M` _A_1_O__i_s_;b___ _j_'__Ŭ_s_9_?___[N__յ_͔_]__}__9l_e1___a_{_A_ _׋__d_)_w~_{_%mx_9u_[q_Cn_3|k_@h_e_a_^_R[_X_T_oQ_KlN_?)K_G_D_mA_1>_:_7_ņ4_J1_3 ._U*_'_T$_}!_s__=h_.__ _! _A___~^A@^%^1^K^P^^s^9^i^u1^^^C^E^?^c^^1T^^׼^^Wb^)^?^^uu^/<^^ɟ^C^O^ ^GҒ^;^\^g"^^3^q^5|^5x^Iu^ur^=8o^ k^h^e^Ob^_^;[^7X^5rU^2R^N^CK^ouH^e@E^B^/>^;^E\8^5^1^.^i+^_4(^{$^!^|^9^^S^ӑ^GW^ ^U^5^{^=]]a]]}a]]]]ko]e0]W]]#]_T]O]+]]_]!]M]թ]n]-]]]}]c>]I]ã]g]cK]m ]Ж]]Q^]+%]]]w]8]|]y]v]As]p]l]i]%cf]C%c]A_]\]sY]:V]S]IO]L]OI]wF]B]ɒ?]V<]]9]5]2]=s/]?5,](]%]5y"]=?]7]]]F]] ]W]'M]Y ]\\]\\\9\Ww\?\\\\K\\%\I\[\\\۳\w\?\\÷\댴\M\9\ڪ\3\oa\$\\\v\C@\\+ˍ\\%U\\ր\}\bz\&w\Ss\p\ m\#Jj\g\c\`\-l]\A.Z\AV\S\xP\K@M\J\F\oC\3P@\ =\9\6\{n3\+0\,\)\Ո&\M#\W \w\{\k\2\\ \ \N\\9[W[S[[[w[l[3[5[i[[!M[ [[Q[_[ [O[7[|[?[[ʸ[7[ES[1[׫[[][[[E['[]z[E[G[?Ɏ[3[U[[܁[ ~[_d{[1x[t[q[xn[yEk[h[d[a[Y^[[[W[T[UnQ[e8N[J[G[~D[=A[=[:[Չ7[UO4[1[9-[1*[ar'[D$[; ![[U[X["[[' [{ [C[-[[їZu^ZM%ZZZ;uZAZYZZӋZyMZZZZomZ2ZZZ~Z{CZ]ZܹZZUbZw1ZZsZe|Z-?ZyZOɜZZPZZ-ݏZoZ[sZ@Za Z[Z|ZYyZvZrZoZplZ[-iZeZbZݎ_ZT\Z-YZUZRZkOZw/LZHZEZՏBZX?Z=YYY|Y%HYYYsYsY?9YYKYY#MY{Y?Y-YgYE.YYŷYY9TYYYYYCY_ YʚYYWYYY5Y'lY-YY}YzYGwYtYpYumY`jYy'gYYcY`Yw]YE?ZY{WYSYPYSMYJYFYCY}n@Y<=Y9Y6Y 3YU0Y"-Y)Y&YUu#Y37 YOYiYY)\Y$YW Y Y xY'BYmY[XX]cX*XXwXXELX?XCXAXqX>X-XXyXMUX XXAXkX/XXSƲX厯XZXXX3X~XKX%XsޕXXiX#3X}XžXɊXYX|XxXuXlrXa0oXQkXhXeXSbX_X[XXXsUX5RXNXKX-HX#AEXkBX>X{;Xc8X+5X1X.Xk{+X>(X%X!XQXYXw(XXXuXP XXXXtWk=WWWkWkW6WWWדW3[WWWMWbW1WW{WUWCQWWWᵷW}WFW WЪW9W `WU#WMWWtW5WWKWMWAMW WkـW}WkzW;.wWsWѼpWmW!HjWgWcW՘`WI^]W%ZWGVW3SW|PWAMWmJWFWCW\@W%=W9W6W3WP0W9-W)W&W i#W1 WWW WWSW W W WxW@WVVV]V$VVV~VFVV]V!VeV;-VV3VqVQVV VVwVBVW VmӲV7VaV,V1VV/VDV VԕVVugV)VVkV{V@V |VExVuVZrVw!oVkV;hVueVIAbVE _VW[VXVjUV2RVNVmKV]HVOEVBV>Vɥ;Vt8Vw85Vq2V.Vy+Vl(V 4%VO!VV1VYTVWVoVVd VE7V VV[UKgU+UUUrU/UUU5U]aU](UUmUoULU[UMU#UoU3UeU÷UsU;IUU'תUߝUgU+0UQU_ÚU팗UsUU?UcލU琢UrU:UC U}}UўzU]wUo#tUpU;mUyjUS:S]7Sk4S[X1S'#.S*SDz'S}$SN!SSS SpSG8SSSU SՑSgWS SR1R|R DRRRRRKR RRR~RcLRRRRIsR6RR7ƽRRaRc(R]RDzRvR6R?RYʠR嗝RQfR2RRKRReURRORKR{}Rc@zR_wRsRMpR7amRY%jRqfRQcR9`R;^]R(ZReVRSR PR{RMR]JRFRCR;u@Ro>=Rk:R6Rc3Re0R9-R)R&R#R]O RRQRRoR9R R RMRogR0RQQQTQQQCQkQ9Q Q%Q=QZQU'Q'QQQRQQCQ饼QoQ>QGQw֯QQqQw:QIQyПQQceQ(QQ!Q5QALQ{QQ}Q|QP?PѨP[PqjP8P P=՘PQPfP(PmPP}PLPP7{P{xPruP:rPoPkPߕhPdePK1bP^P[PXPkcUP# RP}NPIKPבHPe^EP/0BP>P;P8PT5P#2P.P+P-y(PS?%P"PPPkuP9PiPKP PgP2P5POOXO 0OOOOnOeOIQ;Oy$8OU4O]1O.OY+O}(Oo$O!O}OCOOMOOUrO@ O OOßOmNkN:Nŝ7Nk4Ni41N-N*N'NY_$N.!N9NNN{`N0N NG N7N=cN/NMmMMisM BM MMUMrM?8M MMߙMknM]J JպJKJ7mJ@JJJJJ}SJ+JJJJ RJ JYJJJ]J_*~JzJ7wJtJoqJ);nJkJgJdJyaJ_G^J[J{WJ/TJO|QJ;LNJ=KJ}GJ7DJ3AJ#_>J0;J8J4Jw1Jp.J9+J(J$J!J rJ;J)JSJ?JpJ. JJJՠJqlI>IIII qI>I1IIIkIS8II;IcIbI;5I9II_I[qIEIK IܴI)Ic~IPIIIgIIoXI(IgIőI+I+aIs(IIIˁI~Id{I/xItIqInI[kI%hIdIaIa^I7k[I!6XIUIQIcNIgKIQHII'EIwAIy>I;I'Y8I})5I1I.I_+IZ(I)%I!IIAIZI$IMII; ISI{ II;HqHVH#HHHHu]H-HHsHݘHiHK8HHHHmHE;E}r8EqH5E2Ea.Ee+E9(EU%EU$"EEEEbE5EE E5EKkE:EiDCDYDODWD DYDEDDqkDUDDD1DDIZD.D)DעDD{D7GDD DDDeDW0DDD|DsyDwBvDsDoDlDiDifD;cD`D\DUYDmVDgASDoPDsLD_IDFDOsCD<@D =D9D6Do3DF0D-D)D&D#DYM DDDDmD3YD% DS D'DD bD0C CC#CrCKHC{C C-CC^CQ4C;CCCCaXC)C-CCCCCVC +CCϰCɠC vC!CC C۠CwC{CKCCC揄C}CKCQCC}CzCrwCBtC/ qCmC7jCɃgCRdC$aC]CIZCӕWCiTC1QCeNCJC#GCwDCQAC >C:C7C4Cwc1C=5.Cw*Cc'C$C}!C[QCCCCoC!qC= C CC5CytBCBBgBBB\B9*BBB+BtB;BBBBBBhB;B!B߾BSBBOBI,BB;ԫBB|BMB/BSB븘BBGXB-BB5шBOBcvB>BI|B3xBջuBMrB{YoBc,lBiBeB?bBz_BS\Bu$YBMUBWRBOB^LB0IBFBBB?B{A=AؠAAoAMSA"A+AȍA5AkjA >A'AW}A˶zAwAYtA1qAnA3jAYgAydAATaA(^AZAWATA{QA)KNA"KAGADAAAj>A3;A}8A+4As1Au.AT+A)(Ao$A!AAtAOA%AOAA{ AqA;FA1A@@}@h@a@@U@@@k@}]@$@@}@@n@A@@@@@)q@F@ @w@'@ѐ@_@<@ @w@ߴ@@_@O5@@ޏ@϶@5@Y@{,@u@w|@y@v@ics@:p@M m@i@f@}c@T`@#,]@Z@V@/S@uP@iPM@;J@=F@C@Q@@q=@<:@e7@3@k0@-@\*@-'@$@5 @@t@AH@ @}@ @ @a@ >@a@_?g?S}?cR?#?q???n?H?????w?K?$????1i?A?????i?=??E?+ž?U?Uj?3B???Ë?ݗ?q?[E?U?{? x?1u?qr?Eo?(l?h?e?b? u_?E\?OY?UU?R?O?dL?o@I?uF?B???K>>>Mg>>> >>>m~>P> >>> >]w>C>c>C>>>u>P>>>3ĭ>Ś>ks>H> >W>ɚ>>)o>mF>>{>Ç>>`>}7~>7{>w>t>q>Vn>*k> g>Od>ia> s^> K[> "X>WT>Q>ϤN>qK>BH>E>'A>Y>>;>]8>:5>-2>+.>/+>m(>'^%>98">>_>>i>m>q@> >>>>f= <=u==]==k=C=====r=L====ɚ=~=EL="==9ǹ==Cp=J=1==Ħ==u=yJ={==Ó==Wa= 8===)=}=]gz=3w= t=p=m=j=#ig=:d= a=m]= Z='W=lT=7EQ=gN=)J=G=7D=oA=E>=;=7=ѵ4=1=e`.=5+= (=$==!==f=<==== =o=B=]=<<:::ȉ::go:D:}:y:Ov:s:Ayp:Qm:!'j:g:qc:`:]: \Z:y3W:'S:kP:M:gJ:/_G:3D: A: =:Y::ї7:r4:cH1:!.:*:':$:p!:H:::-:G:cz:AP :a':::ͬ99Q9_19/9 9 99ab959A9M9Y9 9r9I9/99}9s99\929/ 9߲9A99Qr9/D9993͜999QR9 9S9҉99k9X90}9z9v9 s9p9mm9>j9 g9c9 `9]9GZ9SZW9.T9P9M9QJ9G9dD9M6A9>9:9)79+4919;U.91+9(9 $97!99q9F9 99_9 99sk9E9I8888Ym8I8]%8+8888kc8=888-8ӧ8~8V8#(88u߼88c8f8788c8Ħ88kq8H8c8}8Γ8ͧ881V8/88ހ8i}8z8lw8ENt8-q8n8j8g8d8ca8;^8[8W8aT8%Q8vN8GK8 H8%D8WA8>8i;81k88OA5828!.8+8Q(8{%8H"8Y$8]88y88j8D 8) 8887Wp7H7s!77Q7g7 7Y7K.7 7!77/7k7:7_77w7_77]7!67M7]7ɰ77m7R7+7+7+77ՙ7!o7K7u#77҇7]77__~77{7x7wt7q7An7a|k7eQh7W1e7a b7^7=[7!~X7XU7/R7 O7K7H7E7cB715';5i8545#15!.5|+5Y(5 1%5"5555a5>55 555˰55{`4G844444|4ob4=4544Y4E44Wb4=4i4I444/4SS4*4C444Ӝ4{4mO4$434۝444Uv4)T4U+4 445DŽ44t~4J{4Q"x4?t4q4!n4׏k4Gkh4Be4c#b4_4[4X4U43wR4QO4(L4AI4ME4B4?4l<4A94 6424/4,4A{)47T&4:#4 444_4-~4\4; 4 4s4443/h3H3!3c3333/_383'3333Ð3k3KA3S%333Ű3w3j3H3 -3y 33ʨ3ˤ3~3V3-333’33{3T39333|3y3ǒv3es3Cp3m3i3f3c3Ӕ`3g]3cIZ3I+W3T3gP3ǻM3J3oG3 ED3!A3=3G:373߀43qY13;.3+3}'3i$3!3 3h3]I3}3C3]3 33c3;F322U2G2?2Kx2Q2,2 22m2٬2?2`2@2222s2m2b2D222׳22Ո2e2C2'212%۝22+2́2c2/A222ф22~2b{2;x2u2Wq2n2k2gh2je2Ab2_2c[2_X2U2R2YhO2>L2I2E2;B2%?2<292^6263202,2#)2&2 #2f 2G2"2222[ 2iz 2_2e82211%11Um1L1G*111/11Y}1mT1151 1A1q1_11]1@1!11ڵ1511G~1kT131+11Ҝ1a11l1)D1191q݆1W1u1z}1Vz1a1w1At1Ep1m1j1Cg1?_d1Aa1/!^1[1W1'T1iQ1+uN1_PK1/H1 E1A1>1-;1-81qb51UC21$/1G,1(1%1"1j1AH1&11c11 1y 1V1G1-"10000c0K0)000_00̓0f0a@000000-o0QE0 (0 00Ʊ0I0o0f0E0%000Θ0a00f0AE0'0A00_0|0vy05Xv0;s0p0_l0i0;f0c0d`0<]0Z0cV0#S0P0ŖM0yyJ0YG07D05A0=0:070ə40z10Y.0{7+0s(0$0!00߈0Gi0F0*0 0 0000p/K/1///!/Ż/!/v/!U/4///'///q`/3=////S///%_/@/7#/'/ܧ/{//_/;=////]ǎ/!//q/]S/8/|/_x/gu/r/əo/Uwl/Xi/:f/c/_/;\/kY/}V/IlS/MP/7M/1J/iF/C/G@/ =/h:/WJ7/y$4/#1/-/*/Q'/$/9\!/AC/C+///// /t/mW/?/.{..Q.K.7u.O.}-. ....ō.r.}W.5... ...1w.)X.8...ޭ...ׄ.ee.D./'.{ .mߔ.ȑ...n.R.E'..{.x.Cu.Ir.qo.UPl.3i. f.b._./\.=Y.lV.1TS.S5P.M.I.!F.YC.@.r=.F:.7.4.s0.-.*.ϐ'.Sp$.R!.3..)..w.).h .kN.70.c.-!---|-U-?---1--]--j-J-Q---I---i-y-\-B-3%-y ---{--e-C---ٔ---r-EQ-W.- -~-{-x-u-ir-3Oo-95l-i-e-b-]_-!\-3Y-QcV-CS-]&P-#M-I-F-C-I@-#t=-aT:-+7-Y4-0---=*- '-f$-?F!-*--)-i-˨--s -\->--- ,,,,-,x,W,q,,A,,c,9,[,3w,)W,:, $,Q,,,,,e,SH,!,,,ɪ,,ɔ,n,gH,', ,#,YΑ,ѱ,,x,MY,4,g,{,}x,;u,ӕr,3qo,Vl,1i,f,Kb,'_,\,3Y,V,[ZS, ;P,Y M,I,aF,C,@,}~=,`:,C7,$4, 1,m-,*,m',k$,I!,j,/L,;3,,-,, ,,u,{f,I+4+'+++++z+a+7@+}++/+G++ߌ+o+S+ 3+5+_+޽+{++{+Yd+J+)+i+{+eϡ+K++]n+T+3;+ + +O+…++3+}f|+Ey+I,v+s+o+l+i+f+gc+)L`+/]+_Z+?W+?S+kP+M+J+ikG+'MD+ ,A+>+M:+7+A4+1+y.+`++C(+(%+' "++?++ߘ+}+}h+SJ +a/ +c++*y**߄*1g*W*+9**O** *}*5*f*Q*/****u* *ˆ*n*U*3***ܫ*彨*7*%*Ic*D*&*_**Ǐ***o*P*6*k}* y*Gv*s*p*/m*vj*Zg*>d*o%a* ^*Z*W*qT*Q*gsN*RK*y4H*A E*3 B*>*;*58*5*?{2*_/*E,*e*)*% &*"**i*O*=*i*%B*/ * ****))m)MQ)5))9)c)-)[))o)Q){8)){)7)))#){)a)iF)')') )֬))Y))un)mL)k,))1)א)))~)b)/C);%~) {)w)Et)q)ɫn)ُk)!{h)de)9Nb)._)m\)EX)U)R)oO)фL)eI)HF)m*C)@)3<)9)6)3)50)io-)T*)c9')"$)K !))))))u)T )q8))U)(C(%(A(;(}i(P(6("(;((((͚(ˊ(r(X(A("( (O(ٽ(º(({(?g(OK(6(/(+(ۡ(Þ(((r(W(w-(((kޅ(ʂ(_(m|(K{y(dv(-Es(,p(m(j(f(c(`(](suZ(CWW((\;({D8((5(w2(y.(+(((%("(h(T( ?(=(((=(A ( (((g(K'-6''' ''M'U''Ci'P'S0'M''i'')'#'w'`'F'W/'''ݲ'ȯ'M''t'e'F'$' ''Փ' 'ݧ'S'v']'<'S&~'m{'w't'q'ժn'k'xh'ee'Kb'k3_'\'}X'U'kR''O'9L'I'tF'i]C'?@'&=' :'6'3'0'/-'*'Ax''aa$'J!'.'m'''''ח 'i}'I_'sG'c)&c&&&&'&&G&n&\&=&-"&&e&&Q&Ǡ&&=o&1X&B&0&q&#&&α&&&}&{k&YR&4&3!& &&ْ&cƏ&&&y{&Z&oE&/}& z&; w&s&p&Ym&j&ag&od&Qa&9^&$[&X&T&}Q&N&ѠK&H&nE&IMB&1?&<& 9&5&2&/&],&)&}&&me#&O &7&&S&&& &c &ӊ&r&X&?%.%%Q%%%W%%%#|%e%MI%'-%%%%%[%;%%wm%OT%>%Q$%% %ح%ż%%G%{%k%=L%1%q%y%=%1Ӌ%%%ׇ%Sp%m\|%Ay%#.v%s%o%al%ii%f%Ic%`%;]%qjZ%WW%_CT% )Q%}N%WJ%WG%AD%A%ו>%e;%5i8%R5%>2%o,/%,%k(%}%%K"%%%S%g% V%>%$ %e %s%%3%Y$O$W$Ql$}R$A$/$$?$$y$w$$$$f$A;$&$$$տ$$]$$Wu$Ya$L$=/$_!$W$$[ޝ$Mʚ$i$$ |$9f$}R$E$+$[$${$Qx$u$ݰr$o$/l$3hi$Jf$3c$#`$W ]$Y$V$7S$P$M$J$mG$ND$$;$7$4$e1$Q.$?+$k($1}%$`"$Q$<$e$a$k$$U $ $ $v$f$cV#G#%4#'"#m##c###a##ay#g#{Q#;#3'##s#/#_#Cÿ####y#[b#L#<#O####ޠ#oĝ#ߥ#O##i#R#G?#,###e~#{#x#u#r#o# l#Wni#cf#Pc#9`##+]#Z#V#S#qP#5M#J#~G#pD#]A#SG>#4;#/)8#s5#2#q.#{+#(#Ѷ%#S"#A#-#r#b#?#0# # #!###9"" |"l" Z"?D"+%"g """"" ""z"u`"L"75"C&""?"" ۹"˶""""z"om"S"s:"5'""""Ց"Ď"Ӫ" "5"z"c"I|"8y"I+v"s"wo"kl"Mi"f"c"`"]"wZ"kdW"KT"+8Q"N"3K"3G"qD"A"q>";"ّ8"W}5"i2"?U/"{D,"0)"&" #";""]""""? "o "k^"H"7";! !!!w!]!!!~!9i!9X!E!6!$!u!!=!!!!!!n!{^![H!e3!=$!!!!ҡ!뻞!Ϩ!!僕!s!\!Q!4!$!_!!|!y!v!s!p!}m!qj! kg!Yd!Fa!#2^![!q X!T!Q!9N![K!qH!œE!)B!x?!bE'4B"? <952/ ,)&# q\QF3+ mѓwh^K<)Q q}mk٨'v-dwUC2  Ӝș˹{) xdmXIRUH~3{"xuqqnQkShմeb_y\oqYfVOSAP+8M5%JGu D@=:G7k41.+~(t%m]"VY>[*%  [ ӂ}i)bQQ=5I!E o?kKrSfPi>s.!3ؤʡ Ğ邒{t]RN}@1}{%zUw}tp%mjgda^[kXKU]pRo_OMLg@I?1FK&C@=_9U63#0-ݾ*U'ǧ$!!'ukj!TWMy@4 , 'q3eO}qdZV=)2%] 5;cؼ͹~k\wMF7/"s7o|iyvGsp;myj%gdzac^`[VXNUI8R=(O L!IEB?<9ߺ6S3C0Ǎ-*r'^$R!)P@6* !wc u=U[˒7Aob\SF<.%Oc)ؼ̹¶ѵ-}nc5[Om@?=e+ | y}vspm'j)g͓da{{^v[fX^ULRBOW9Lw+IaF5C@{<%93630-k*='Q$!w}n\]R N D560U%c WmwqWߦ[G{vmGgiVP[AQ5C+! Kޞ؛ҘE͕ E%雉Gwr}fz\w3Nt9Bq]:n2k(h5ebO_ \Y5URO%LIYFC@ӽ=i:7}41.x+s(j%h"w]UKD6%1/$ a !io%)5moxgsaYPaJ=1+W!1  C ڟϜ)˙ ;ב/?;z~u{mnxauM\rKoDlm;i1f_(c`]7ZWYTPMJOGD#A>w;852 /,)c&#U I{nnib TFA59S,9'1Q5 u)rmj5^?]GXRGKD?E6E,$Q)]|y%vKspmjg)da+^{[3XͥU-ROYL7IxFYtCAt@kp=`:W7!U4L1M.gJ+A(=%7"E1c+&  ! uuS˧sEKyosohefb_\TLJ'GK>/#&")~|oxu rolIifc`?]IZ9WTQNaKaHEBQ?<q967w3x0w-Gl*+k'^$yY!5X}W7RN/Q+LM B <<1 ,%I# +)uȽyź·ak빥QE=ɗ{i]~{xǕumroql/iNJf3cǃ`]]Z{WTQӉNK%H|Ei{B!{?!v<!y9Gp6i3%c0Cb-^*b';[$3X!VUaKYF)>#=7 %< 3[0+a&#!   %  o5is7Y-UސIލ߇mۄށ~{;xurol+if!cǻ`ù])ZqWTQNKHmEB?<963;0C-*ɝ'$!ma5u A ]ٓ331͊'aق1mٍ)=ߍ݊K?u|]zy{~-~{{v |za{|Gyv7s)pOmjgMdфa9^7[XUR?OLIۏFC@Ý=/:ѕ741՞.+ (%9"  iݤ#9k  Qמ!ߦϯ5)97%{ÿ ʼ͹˶!ȳY˰ǭIê'-ǤWӡ_Ҟ%ӛ1٘EӕҒ#ԏЌ׉݆[}zwtq%n/k!hIe]b_]5Z W/TQ NwKH3EB?<9I$6(37)0+-]+*O)')$,!-':<A>>?D F sN7JoIImKIKSUi[o]u]]dh%tmpsw})G[ 㒵#ACǔ!ɑ9͎ ȋˈӅ؂|9yav}s7p[mj'g=dbo_]\Q$Y$Vq%Sq*P=5M6J?G-?DHAG>aS;W8`5-h2Mc/j,s)Kz&%# Ϗ q=7 Cը5Iy;Q/k ]Oq# O-U4s67BIJKR1[WaOi)n'tY{}wo=Úm|'ymvspmjGgdaK^[\? YV#S P(M%J(G7Di@AK>M;T8!Z5qe2s/1r,{)+&# ?} E mw}/CG # "*/:kCG}LS[yeOs3z~5EseŦΣ)Ҡ=ܝ-sMQ)#c+MB}DzGw7QtXq+an'mkAwheb3_\)YV+SPMJ9GaDAU? <596&3E70=-oH*%E'K$R!kdjoc~~I  91AKc1U)y7AMRqdIp{c/ƭϪS٧AY$6kBK[7jr;~Q~{ٓxurIolcisfcC`}][3X"U7/RDOLLNI;RF`Ci@cy=):}741.a+(%Q"UQw)8;=7M eUufkvsϒ-c[m_? /4H Wiw#QIʲaܯ ; -A[El|+U﵀s}szwt/qn lWi? fW0c?;`G]YZ}iW{TQN٬KHEB?<O9 7w4,1%B.O+Od(/t% "o_  $4D Z 3i )t W / ' C I ! _ % 8 =F W Uh u [ ] ϲ U i / 3@ S /h v ق ) ժ S ˃ ݀ } z x 'u 4r Ao Kl \i [qf zc ` ٜ] Z W gT Q N L e'I /F HC X@ i= |: 7 g4 }1 w. + ( % #  3( ; eJ [ i } )      / i= P [ o C K 5 + ! 6 kF Z Al O| W  İ ;֭  + A V l 道 Ƈ ؄   k| 4y Gv CWs mp m ߍj ug Wd a w^ [ Y V /S {EP eXM rJ +G D A > ; k8 E5 G3 %0 <- L* b' |$ 9! k  y  %   S, I q^ Uo  3 o 1 # 4 cG _ u ם o w 5  + A S k ? q Ө  Ӭ E  $ U> Y m  dz ͌  3 g ?) @~ ^{ vx {u r Io el i 5f d a 0^ F[ q\X qU +R -O 'L sI _F iD A 5> G; ^8 r5 2 / , ) & $ ! 8 R h } % 7  y  5/ K i g  1 A E Y / ;F eX s  պ I e * s@ 9W r ; ç gŲ k  0 I s` 1s  岘 ˕  -6 {T m Y ~ { Mx su s 0p Hm cj +yg d ëa ^ =[ X V c7S wSP nM ݄J סG D KA > E< (9 EE6 9d3 0 - !* ' /$ " + A ^  ) ) ] Q 3 1 kH i 9 a  3 U o A  * GL g E   iݿ 5 ; \ ew K Ҩ S & a; SU t Y Ŷ ֎ a  6 ?T q ݎ} 9z w t r o :l \i {f Kc ` Q] Z wX 3U QR pO ML I F ]C A y2> gP; j8 ю5 2 u/ , Y * /' P$ j! m  9 C O /, E f Ɉ   O ?W`5wKY=`̈́I$Df[EѼ39e[è'W>cɧ;̑?<+]!U}ozx=u_rol ifd++a)J^i[X%UERO$MCJdGDWAQ>;946T30Ǧ-?*' %5"q_?e% m*Q zk9E5SZx11X} 6\ScQG=]`ڲ$S]}Şš#k;gc=m׍i&Myv'y|y=wAtjqnYkhf2c]`]ZWOU+RWOu~LIFC]AuC>!k;852I04-1Z*a'$C!;1YUzM s MHGrŘF;h[-?HuQy Bm+% _;ee?@ejaɪ!Ouk!͙(KOx;ֈA0`}zMw[uMr{ol}ig1d?daQ^#[X}VHS%vPMJG(EGYB?<99 7D4kz1.+7)S3&1b#Ő Yu9#aT_   3Fk|ͫ2 g .}WݳIt7CoA% y<KhѵU/2e'ͧ!5kYCљu7h+ы3eW}{,x;gurGo1m6jog!dCa _E\wYVSo Q?N wKH1ECI@م=:7!5qX2/,){/'g$s!A ;QwL {$b9c%4n ??L]0f';!XCK:tU= VUά:vO"['IՓ @?{1Q/ag{}z#xS^ur'ocmKj݁gda58_5u\KYwV*TgQN%Kc&IaF]Cc@>!\;853R0-O*(aJ%"3qJ--?@}   Ae7@ӄ RӓYUёkOߐi?ZW $Af'+l<~7'<-ɞgR3#ۓd_U.ni}F{xus#YpMmj +hseb`[L]ZIW!UhROL@JyGDBs`?c<927ez4S1/uP,י)&-$sx! PC-3-~ 1 Z?߉ oZ٨w=G{i]]Lw7c%U#co; `e[W٥)K;/-חy,}͏j+e{K}Vz}w)tKr˙ol3Dj{gMdcCb_\?ZWTAROLIJGDoSB?<U:75[2y/-]*'%ug"9s#0  9--@Xm'wG?kO9oG .Xvָ5K]{"ieJ{ uuՖ<EjЉ6-`!|a+zwtgr#o9mjhreb C`m]3[XUYSPY,NÙKSI5sFCJAa>$<9-7p41P/Q,/*'%g"doFU*{# wMbWPg>)ٖ%gk~SsKpIjgfd_b+kqqoÅe ەӨ3D˕U1n Uo9Q\}gzuxv+s=qnUglj g9eb{m`o ^ϩ[EJYWV#T%ROnM%KHudF DAe?=׾:p87%653'15B/A,[*3s(3&]#۶!|EY eGm( + qcG1 K"2BRbrŠҊ"2BRbr‹ҋ"2BRbr  0h 3 dJXD,u<dd'<6Xj Pn4Ok*,- ./!0-1:2E3Q4\5i:=>?@BETWY.8BP^ m!|4,[ F|G_GH$DDDDDD&D0D :D DND!ND"XD0iD3~D4D5D6D:D;D=D>D;DADBDDDEDBDGDKDO@!@ (@/@4dsprng.c/home/sprng/sprng2.0/EXAMPLES/gcc2_compiled.int:t1=r1;-2147483648;2147483647;char:t2=r2;0;127;long int:t3=r1;-2147483648;2147483647;unsigned int:t4=r1;0;-1;long unsigned int:t5=r1;0;-1;long long int:t6=r1;01000000000000000000000;0777777777777777777777;long long unsigned int:t7=r1;0000000000000;01777777777777777777777;short int:t8=r1;-32768;32767;short unsigned int:t9=r1;0;65535;signed char:t10=r1;-128;127;unsigned char:t11=r1;0;255;float:t12=r1;4;0;double:t13=r1;8;0;long double:t14=r1;12;0;complex int:t15=s8real:1,0,32;imag:1,32,32;;complex float:t16=r16;4;0;complex double:t17=r17;8;0;complex long double:t18=r18;12;0;void:t19=19__u_char:t11__u_short:t9__u_int:t4__u_long:t5__u_quad_t:t7__quad_t:t6__qaddr_t:t20=*6__dev_t:t7__uid_t:t4__gid_t:t4__ino_t:t5__mode_t:t4__nlink_t:t4__off_t:t3__loff_t:t6__pid_t:t1__ssize_t:t1__fsid_t:t21=s8__val:22=ar1;0;1;1,0,64;;__daddr_t:t1__caddr_t:t23=*2__time_t:t3__swblk_t:t3__clock_t:t3__fd_mask:t5__fd_set:t24=s128fds_bits:25=ar1;0;31;5,0,1024;;__key_t:t1__ipc_pid_t:t9size_t:t4wint_t:t4_G_int16_t:t8_G_int32_t:t1_G_uint16_t:t9_G_uint32_t:t4__gnuc_va_list:t26=*19_IO_lock_t:t19_IO_marker:T27=s12_next:28=*27,0,32;_sbuf:29=*30=xs_IO_FILE:,32,32;\_pos:1,64,32;;_IO_FILE:T30=s76_flags:1,0,32;_IO_read_ptr:23,32,32;\_IO_read_end:23,64,32;_IO_read_base:23,96,32;\_IO_write_base:23,128,32;_IO_write_ptr:23,160,32;\_IO_write_end:23,192,32;_IO_buf_base:23,224,32;\_IO_buf_end:23,256,32;_IO_save_base:23,288,32;_IO_backup_base:23,320,32;\_IO_save_end:23,352,32;_markers:28,384,32;_chain:29,416,32;\_fileno:1,448,32;_blksize:1,480,32;_offset:3,512,32;\_cur_column:9,544,16;_unused:2,560,8;_shortbuf:31=ar1;0;0;2,568,8;\_lock:32=*19,576,32;;_IO_FILE:t30_IO_cookie_io_functions_t:t33=s16read:34=*35=f1,0,32;\write:36=*37=f1,32,32;seek:38=*39=f3,64,32;\close:40=*41=f1,96,32;;_IO_cookie_file:T42=s100file:30,0,608;vtable:43=*19,608,32;\cookie:26,640,32;io_functions:33,672,128;;FILE:t30fpos_t:t3rngen:T44=s4rng_type:1,0,32;;main:F44gen_types_menu.hstream:r45=*1rn:r13irn:r1i:r1gtype:1GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.301.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.stab.stabstr.comment.noteԀ#) hh139 ,,B 44K DDX T ,Z̉ _ e00kLL s\8\yTJT\J\dJd K KМ 8<thhhD c  Ԁh,4D̉  0 L \8 TJ\JdJ KKh Ќ   & <XJI( TTJ b`J 0  Ќ oЌ \J T`8 TJ    L T T  Ķ  Ȼ :  h   (  :  ) 2 =  G PTp Z `}  _  <: f \ n s LxL}L,L t V 0L    J 4L  J       Xq 4 tr #܉.'5n GP ^. rG  S : 89 &,$9 L U ЖW & $  W  2 <j& K/D  A7 N  ``~ p(  \) 8 9 0D d  X  t8 P2 L 43  &\-KP9 FT9 V9 ae rd  lc2 |0"8: 2 8   P: - G | Ď &L!/8 >h M Z8 i9 y  D D:  Y D L] \2 [ : $ # 3@3 ChIh@ UԸ dqo} 0 \5 \  : \  x8 (2 P3 R 0$ (̊0܊8l F QT8 [f3 tȻL D ~8  : (z t p  , 9 lR %V 5O DR R b g9 r8M P  3  \ X9p @L@G L  f L: V  |p $ P9 / K; ̓X H ,)R <hY + h  m ؎ v  / LJ  9 H:  d? \ > 9 Tz D  P ! n 3 \8 > 0m D 3 V  e H n 01 t : D   l> 0 |$  9  h  U 5 { *+  9 8 F   X / g lU v 4 D  V ̋F K _ (3 dJ   ܋B J@   ' d2 $m C :  T t\ oh p s `8  4   9 $  , < T) * Pn Б.  \8  | & V 6 ^ F L9O  ] 9 n  | 9  r \ L  ^ 8L h3  l" 9 initfini.cgcc2_compiled.crtstuff.c__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__sprng.clcg.cequiv.36lfg.cadvance_reginitializeget_node_index_rnglcg64.ctemp.26mlfg.cMASK64MINUS1ONEINT_MOD_MASKINT_MASKINTX2_MASKSEED_MASKget_fillsi_doublepow3cmrg.cpmlcg.cinita.72r.73result.78overflow.79primes_32.cinitiallized.26num_prime.27primes_64.cmakeseed.ctemp4.2memory.ccheckid.cstore.cfinit_rng_ptr__lcg_get_rn_fltinit_prime_32mpz_add_uistrcpyget_rn_dbl_simplempz_powmfget_rn_flt__fprint_rng_simple__funpack_rng__mpq_get_den_mymallocprint_rng_tblmpz_get_uiprintflcg64_MAX_STREAMSprint_rngmlfg_free_rngfunpack_rng_ptr__bit_reversefind_Mlcg_pack_rnggetprime_64mpz_abs_DYNAMICfget_rn_dbl_sim__lfg_pack_rngfget_rn_int_sim__init_rng_simplelcg64_get_seed_rnglcg_spawn_rngspawn_rng_tblkval_etextfree_rel_primeplusfget_seed_rng__prim_eltget_rn_dblload_intcmrg_get_rn_intmpz_fdiv_q_2explcg64_print_rnglfg_validmemcpy_IO_stderr_get_seed_rnglcg_MAX_STREAMSstore_longload_uint64arrayfmake_new_seed__mpq_set_dengetprime_32malloccmrg_NGENSfget_rn_int_ptr__pack_rng_tbllfg_init_rnglinear_findfree_mp_arraypmlcg_init_rngpmlcg_get_rn_fltrel_primefree_rng_environget_rn_flt_tbllcg_unpack_rngfprint_rng__lfg_get_rn_dbllfg_MAX_STREAMSfget_rn_flt_sim__lcg64_get_rn_fltMAX_STREAMSpmlcg_spawn_rngdivisibleiterate__environcmrg_get_rn_dblmpq_initlcg64_get_rn_intdeleteIDmlfg_NGENSlcg64_unpack_rngmlfg_get_rn_intpmlcg_print_rng_initload_uint64lfg_unpack_rngmpz_init_setmpq_set_numlcg64_get_rn_dblmlfg_validlfg_free_rnginit_factorscmrg_PARAMLISTlcg_get_seed_rngget_rn_dbl_tblfprintfffree_rng_ptr__mlfg_print_rngload_longarraypack_rng_simplempz_cmpmpz_addcmrg_init_rngany_divideload_longmpz_mul_uilfg_print_rnglcg64_init_rngfpack_rng__mpz_negget_rn_int_tblmpz_sublcg64_NGENSfunpack_rng_simple__mu_evalfinit_rng_sim___startmlfg_unpack_rng__libc_init_firstunpack_rng_tbladdIDfpack_rng_ptr__mlfg_spawn_rngload_intarraymlfg_get_rn_dbldecrmultiplierfpack_rng_simple__mlfg_pack_rnglcg_print_rngjoinlcg64_spawn_rngmultsprimesunpack_rngffree_rng__mlfg_get_rn_fltguess_mu_inverseprime_list_32prime_list_64advance_seeddefaultgen__bss_startfspawn_rng__localtimememsetpmlcg_pack_rngmainpack_rngmult_reducefprint_rng_ptr__timelcg_init_rnglcg64_PARAMLISTNGENSlcg_free_rngstrxncmpmpz_set_strpmlcg_get_rn_dbllfg_NGENSunpack_rng_simpleerrprintfget_rn_dbl__get_rn_int_simpledata_startminusfget_rn_flt_ptr__lfg_get_rn_fltinit_rng_finicmrg_MAX_STREAMScheckIDlfg_get_rn_intcmrg_get_rn_fltatexitinit_rel_primescanfmpz_modlvalfget_rn_int__get_rn_intcmrg_spawn_rngcmrg_free_rngmpz_clearmpz_fdiv_qmpz_pow_uimake_new_seedfree_rng_tblcmrg_get_seed_rngpmlcg_free_rnglcg64_free_rnglcg_get_rn_intmlfg_get_seed_rngstore_intarraympz_init_set_ui_edatalcg64_pack_rngcmrg_print_rng_GLOBAL_OFFSET_TABLE__endmultmpz_init_set_strchecklistlfg_get_seed_rngmpz_cmp_uifspawn_rng_ptr__mlfg_MAX_STREAMSmpz_setmpq_get_numfind_denominit_rng_tblexitpmlcg_get_seed_rngcmrg_pack_rnglcg_NGENSMuincrclockmpz_sub_uipmlcg_get_rn_intpmlcg_unpack_rngget_rn_flt_simpleprint_rng_simple__data_startget_rn_fltstore_longarraycmrg_unpack_rngmpz_initlfg_spawn_rngget_seed_rng_tblmlfg_init_rnggseedinit_prime_64mpz_mullcg_get_rn_dblfinit_rng__junkfget_rn_dbl_ptr__spawn_rngfree__gmon_start__store_intsprng2.0/Makefile100700 764 764 2370 6736173542 13070 0ustar chwangchwang############################################################################ # # Then typing the command below => results in the following being created # make => all # make src => SPRNG library, libsprng, and checksprng, timesprng # make examples => SPRNG examples # make tests => Tests of quality of random streams # # Object files created during the compilation process can be deleted finally # by typing # make clean # # Object files, executables, and the libraries can be deleted by typing # make realclean ############################################################################ SHELL = /bin/sh include make.CHOICES LIBDIR = $(LIB_REL_DIR) SRCDIR = SRC DIRS = SRC EXAMPLES TESTS lib include $(SRCDIR)/make.$(PLAT) all : src examples tests src : (cd SRC; $(MAKE) ; cd ..) examples : (cd EXAMPLES; $(MAKE); cd ..) tests : (cd TESTS; $(MAKE) ; cd ..) #--------------------------------------------------------------------------- clean : @for l in $(DIRS) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) clean ; \ cd .. ; \ done realclean : @for l in $(DIRS) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) realclean ; \ cd .. ; \ done @rm -f core *~ check* tim* *.data gen* sprng2.0/README100700 764 764 5116 6736173542 12311 0ustar chwangchwang---------------------------------------------------------------------------- !! See README in DOCS directory for interface changes !! ---------------------------------------------------------------------------- SPRNG: Scalable Parallel Random Number Generator libraries ---------------------------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed */ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ IMPORTANT: Please read CHANGES.TEXT for the history of changes since the last release of SPRNG. The SPRNG libraries of generators produce good quality random numbers, and are also fast. They have been subjected to some of the largest random number tests, with around 10^13 RNs per test. Languages: C, C++, FORTRAN Platforms: Cray T3E, IBM SP2, SGI Power Challenge Array, Origin 2000, CONVEX Exemplar, SUN workstations, Intel, HP workstations Generators: Modified Additive Lagged Fibonacci, Multiplicative Lagged Fibonacci, Combined Multiple Recursive generator, three types of Linear Congruential. Directory structure: SRC: SPRNG source code. EXAMPLES: Example program that demonstrate the use of the SPRNG. TESTS: Test suite to verify the quality of sequential and parallel random number generators. DOCS: Detailed documentation. For more up-to-date information: http://www.ncsa.uiuc.edu/Apps/SPRNG/www/toc.html include: Header files for the user to include. lib: The SPRNG libraries will go in here when SPRNG is built. Building the library: To build the library, examples and tests, please edit the make.CHOICES file to select the type of platform you are working on. Then type: make To build the library alone, please type: make SRC In case of errors, please edit the SRC/make.XXX file for your platform. After the make is completed, please type: checksprng This checks each generator to verify that the library works as expected. Please see documentation for details. sprng2.0/SRC/ 40700 764 764 0 7034410053 11734 5ustar chwangchwangsprng2.0/SRC/.insertlib100600 764 764 0 6736173542 13756 0ustar chwangchwangsprng2.0/SRC/.template.c100700 764 764 27103 6736173542 14135 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* A PARALLEL RANDOM NUMBER GENERATION SYSTEM IN SPRNG FORMAT */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /* */ /* Note: Data stored by 'pack_rng' is NOT in a machine independent */ /* format. For that, please take a look at some SPRNG examples */ /* (lcg/lcg.c, lfg/lfg.c, etc). */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 13 Apr 1998 */ #include #include #include #include #include "memory.h" #include "interface.h" /*** Change this to the type of generator you are implementing ***/ #define GENTYPE "Sample Generator" #define NPARAMS 1 /*** number of valid parameters ***/ int MAX_STREAMS = (1<<19); /*** Maximum number of independent streams ***/ struct rngen { char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; int spawn_offset; /*** declare other variables here ***/ double x; /* please remove this in your implementation */ }; int NGENS=0; /* number of random streams in current process */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) /* check if memory allocated for data structure */ return NULL; /* Initiallize data structure variables */ genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed & 0x7fffffff; /* Only 31 LSB of seed considered */ genptr->parameter = param; genptr->spawn_offset = total_gen; /*** Change the next line depending on your generators data needs ***/ genptr->narrays = 0; /* number of arrays needed by your generator */ if(genptr->narrays > 0) { genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; } else { genptr->array_sizes = NULL; genptr->arrays = NULL; } /*** Change the next line depending on your generators data needs ***/ /* initiallize ...array_sizes to the sizes of the arrays */ for(i=0; inarrays; i++) { genptr->arrays[i] = (int *) mymalloc(genptr->array_sizes[i]*sizeof(int)); if(genptr->arrays[i] == NULL) /* check if memory allocated for data structure */ return NULL; } /*** Add initialization statements for your data in the arrays and other variables you have defined ***/ genptr->x = 0.1; /* Please remove this statement in your implementation */ NGENS++; /* NGENS = # of streams */ return (int *) genptr; } /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; /*** Use the data in the structure genptr to update your state. Replace the statements below by those that return a double precision number in [0,1). ***/ if(genptr->x>0.85) /* the statements below are here just for */ genptr->x = 0.0; /* testing purposes. Please _do_ remove */ else /* them in your implementation. */ genptr->x += 0.1; return genptr->x; } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer in [0,2^31), then please replace the statement below with your scheme. */ return (int) (get_rn_dbl(igenptr)*0x80000000); } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } for(i=0; istream_number + tempptr->spawn_offset*(i+1); if(gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ seed = (tempptr->init_seed)^gennum; else seed = tempptr->init_seed; /* Initialize a stream. This stream has incorrect spawning information. But we will correct it below. */ genptr[i] = (struct rngen *) init_rng(gennum, gennum+1, seed, tempptr->parameter); if(genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } genptr[i]->spawn_offset = (nspawned+1)*tempptr->spawn_offset; } tempptr->spawn_offset *= (nspawned+1); *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { char *temp_buffer; int size, i; struct rngen *q; int pos; q = (struct rngen *) genptr; size = sizeof(struct rngen) + q->narrays*sizeof(int) + strlen(q->gentype)+1; for(i=0; inarrays; i++) size += q->array_sizes[i]*sizeof(int); temp_buffer = (char *) mymalloc(size); /* allocate memory */ if(temp_buffer == NULL) { *buffer = NULL; return 0; } memcpy(temp_buffer,q,sizeof(struct rngen)); pos = sizeof(struct rngen); strcpy(temp_buffer+pos,q->gentype); pos += strlen(q->gentype)+1; if(q->narrays > 0) { memcpy(temp_buffer+pos,q->array_sizes,q->narrays*sizeof(int)); pos += q->narrays*sizeof(int); for(i=0; inarrays; i++) { memcpy(temp_buffer+pos,q->arrays[i],q->array_sizes[i]*sizeof(int)); pos += q->array_sizes[i]*sizeof(int); } } assert(pos == size); *buffer = temp_buffer; return size; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; int i; int pos; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; memcpy(q,packed,sizeof(struct rngen)); pos = sizeof(struct rngen); if(strcmp(packed+pos,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed+pos, GENTYPE); return NULL; } else q->gentype = GENTYPE; pos += strlen(q->gentype)+1; if(q->narrays > 0) { q->array_sizes = (int *) mymalloc(q->narrays*sizeof(int)); q->arrays = (int **) mymalloc(q->narrays*sizeof(int *)); if(q->array_sizes == NULL || q->arrays == NULL) return NULL; memcpy(q->array_sizes,packed+pos,q->narrays*sizeof(int)); pos += q->narrays*sizeof(int); for(i=0; inarrays; i++) { q->arrays[i] = (int *) mymalloc(q->array_sizes[i]*sizeof(int)); if(q->arrays[i] == NULL) return NULL; memcpy(q->arrays[i],packed+pos,q->array_sizes[i]*sizeof(int)); pos += q->array_sizes[i]*sizeof(int); } } else /* narrays == 0 */ { q->array_sizes = NULL; q->arrays = NULL; } NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } #include "../simple_.h" #include "../fwrap_.h" sprng2.0/SRC/Makefile100600 764 764 20104 6736173542 13531 0ustar chwangchwang############################################################################ # # Then typing the command below => results in the following being created # make => libsprng.a # Timing and checking executibles. # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) CHKDIR = .. ############################################################################## ####### The following is the only line in this file that you may modify ###### # The default generator #RNGDEFAULT = lfg LIBLIST = lfg lcg lcg64 cmrg mlfg pmlcg ############################################################################## include make.$(PLAT) #--------------------------------------------------------------------------- # Jump point to sprng #--------------------------------------------------------------------------- all : (cd sprng; $(MAKE) ) (p=0 ; \ for l in $(LIBLIST) ; do \ ./insertmenu "printf(\042" $$l $$p "\134\156\042);" ../EXAMPLES/gen_types_header ../EXAMPLES/gen_types_menu.h ; \ ./insertmenu "print *, \047" $$l $$p "\047" ../EXAMPLES/genf_types_header ../EXAMPLES/genf_types_menu.h ; \ p=$$(($$p+1)) ; \ done ) #--------------------------------------------------------------------------- # Create files that all generators need #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = primes_32.o primes_64.o \ fwrap_mpi.o cputime.o makeseed.o store.o\ simple_mpi.o memory.o communicate.o checkid.o sprng_common : $(SPRNG_COMMON_DEPEND) primes_32.o : primes_32.h primes_32.c $(CC) -c $(CFLAGS) primes_32.c primes_64.o : primes_64.h primes_64.c $(CC) -c $(CFLAGS) primes_64.c fwrap_mpi.o : fwrap.h fwrap_mpi.c $(CC) -c $(CFLAGS) $(FFXN) fwrap_mpi.c cputime.o : cputime.c fwrap.h $(CC) -c $(CFLAGS) $(FFXN) cputime.c makeseed.o : makeseed.c $(CC) -c $(CFLAGS) makeseed.c simple_mpi.o : simple_mpi.c memory.h interface.h $(CC) -c $(CFLAGS) simple_mpi.c memory.o : memory.c $(CC) -c $(CFLAGS) memory.c communicate.o : communicate.c memory.h $(CC) -c $(CFLAGS) communicate.c checkid.o : checkid.c memory.h $(CC) -c $(CFLAGS) checkid.c store.o : store.c store.h $(CC) -c $(CFLAGS) store.c #--------------------------------------------------------------------------- # Create executables to time the generator #--------------------------------------------------------------------------- timesprng_exec : timesprng_c_exec timesprng_f_exec @chmod u+x $(CHKDIR)/timesprng timesprng_c_exec : $(CHKDIR)/timingc$(TIMESPRNG_LIB) (p=0 ; \ for l in $(LIBLIST) ; do \ ./inserttimecheck $$l $(CHKDIR)/timesprng "Timing C interface:" timingc$(TIMESPRNG_LIB) $(CHKDIR)/timingc$(TIMESPRNG_LIB) $$p ; \ p=$$(($$p+1)) ; \ done; ) timesprng_f_exec : $(CHKDIR)/timingf$(TIMESPRNG_LIB) (p=0 ; \ for l in $(LIBLIST) ; do \ ./inserttimecheck $$l $(CHKDIR)/timesprng "Timing FORTRAN interface:" timingf$(TIMESPRNG_LIB) $(CHKDIR)/timingf$(TIMESPRNG_LIB) $$p ; \ p=$$(($$p+1)) ; \ done; ) $(CHKDIR)/timingc$(TIMESPRNG_LIB) : timing.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/timingc$(TIMESPRNG_LIB) timing.o -L$(LIBDIR) -l$(TIMESPRNG_LIB) $(GMPLIB) $(CHKDIR)/timingf$(TIMESPRNG_LIB) : timingf.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/timingf$(TIMESPRNG_LIB) timingf.o -L$(LIBDIR) -l$(TIMESPRNG_LIB) $(GMPLIB) timing.o : timing.c cputime.o $(CC) -c $(CFLAGS) timing.c drand : drand.c cputime.h cputime.o $(CC) $(CFLAGS) -o drand drand.c cputime.o timingf.o : timingf.$(FSUFFIX) $(F77) -c $(FFLAGS) timingf.$(FSUFFIX) #$(LIBDIR)/lib$(TIMESPRNG_LIB).a : $(TIMESPRNG_LIB)/$(TIMESPRNG_LIB).c # (cd $(TIMESPRNG_LIB); $(MAKE) $(TIMESPRNG_LIB)) #--------------------------------------------------------------------------- # Create executables to check whether the generator is ported correctly #--------------------------------------------------------------------------- checksprng_exec : checksprng_c_exec checksprng_f_exec @chmod u+x $(CHKDIR)/checksprng checksprng_c_exec : $(CHKDIR)/check.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) (p=0 ; \ for l in $(LIBLIST) ; do \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking Default C interface:" check.c$(CHECKSPRNG_LIB) $(CHKDIR)/check.c$(CHECKSPRNG_LIB) $$p ; \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking Simple C interface:" check_sim.c$(CHECKSPRNG_LIB) $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) $$p ; \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking C interface with pointer checking:" check_ptr.c$(CHECKSPRNG_LIB) $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) $$p ; \ p=$$(($$p+1)) ; \ done; ) checksprng_f_exec : $(CHKDIR)/check.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) (p=0 ; \ for l in $(LIBLIST) ; do \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking Default FORTRAN interface:" check.f$(CHECKSPRNG_LIB) $(CHKDIR)/check.f$(CHECKSPRNG_LIB) $$p ; \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking Simple FORTRAN interface:" check_sim.f$(CHECKSPRNG_LIB) $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) $$p ; \ ./insertcheck $$l $(CHKDIR)/checksprng "Checking FORTRAN interface with pointer checking:" check_ptr.f$(CHECKSPRNG_LIB) $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) $$p ; \ p=$$(($$p+1)) ; \ done; ) $(CHKDIR)/check.c$(CHECKSPRNG_LIB) : check_gen.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check.c$(CHECKSPRNG_LIB) check_gen.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) : check_gen_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) check_gen_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) : check_gen_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) check_gen_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check.f$(CHECKSPRNG_LIB) : check_genf.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check.f$(CHECKSPRNG_LIB) check_genf.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) : check_genf_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) check_genf_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) : check_genf_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) check_genf_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) #$(LIBDIR)/lib$(CHECKSPRNG_LIB).a : $(CHECKSPRNG_LIB)/$(CHECKSPRNG_LIB).c (cd $(CHECKSPRNG_LIB); $(MAKE) $(CHECKSPRNG_LIB)) check_gen.o : check_gen.c sprng.h $(CC) -c $(CFLAGS) check_gen.c check_gen_simple.o : check_gen_simple.c sprng.h $(CC) -c $(CFLAGS) check_gen_simple.c check_gen_ptr.o : check_gen_ptr.c sprng.h $(CC) -c $(CFLAGS) check_gen_ptr.c check_genf.o : check_genf.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf.$(FSUFFIX) check_genf_simple.o : check_genf_simple.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_simple.$(FSUFFIX) check_genf_ptr.o : check_genf_ptr.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_ptr.$(FSUFFIX) .SUFFIXES : .SUFFIXES : .f .F #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $(SRCDIR) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- clean : rm -f *.o *.i @for l in $(LIBLIST) sprng; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) clean ; \ cd .. ; \ done realclean : rm -f *.o *.f *~ *.i core a.out rm -f ../EXAMPLES/gen_types_menu.h ../EXAMPLES/genf_types_menu.h @for l in $(LIBLIST) sprng; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) realclean ; \ cd .. ; \ rm -f $(CHKDIR)/$$l.data; \ done sprng2.0/SRC/README100600 764 764 2212 6736173542 12731 0ustar chwangchwang SPRNG Libraries --------------- (http://www.ncsa.uiuc.edu/Apps/CMP/RNG/www/install.html) (http://www.ncsa.uiuc.edu/Apps/CMP/RNG/www/makefile.html) This directory contains the source code for the SPRNG libraries, and certain other test executables. Select the platform and installation directory, as explained in ../make.CHOICES. Please read ../README too. Next, typing the command below => results in the following being created: make => Fortran and C libraries for all the generators, Timing executables, test executables make lfg => Modified Additive Lagged Fibonacci Generator make mlfg => Multiplicative Lagged Fibonacci Generator make lcg => 48 bit Linear Congruential Generator make lcg64 => 64 bit Linear Congruential Generator make pmlcg => Prime Modulus Linear Congruential Generator (Requires GMP library) make cmrg => Combined Multiple Recursive Generator Object files created during the compilation process can be deleted finally by typing make clean sprng2.0/SRC/insertmenu100744 764 764 377 6741200470 14153 0ustar chwangchwangif ! [ -f $6 ] then cat $5 > $6 fi s=`grep -c "$2 --- $3" $6` if [ $s = "0" ] then echo -e " $1 $2 --- $3 $4" >> $6 # on some systems use echo without '-e' # uncomment the next line # echo " $1 $2 --- $3 $4" >> $6 fi sprng2.0/SRC/timing.c100600 764 764 3716 6736173542 13516 0ustar chwangchwang/*--- Chris S.: June 10, 1999 */ /*--- reads in a generator type as an integer */ /*---adding 'int gentype' and read in + error handling */ /*--- generator numeral range is fix-set to 0-5 ? */ /*--- should 5 be change to some variable MAX_GEN_NUMBER ? */ #include #include #include "cputime.h" #include "interface.h" #define TIMING_TRIAL_SIZE 1000000 #define PARAM 0 main() { int i; int *gen; double temp1, temp2, temp3, temp4; double temp_mult = TIMING_TRIAL_SIZE/1.0e6; /*--- */ int gentype; scanf("%d\n", &gentype); if((gentype < 0) || (gentype > 5)) /*--- range to be adjusted if needed */ { printf("\nGenerator numeral out of range.\n\t...Exiting\n"); exit(1); } /*--- */ gen = init_rng(gentype,0,1,0,PARAM); /*--- Printing generator and stream information */ /* print_rng(gen); */ temp1 = cputime(); for(i=0; i %8.4f MRS\n", temp2-temp1, temp_mult/(temp2-temp1)); printf("\tFloat generator:\t Time = %7.3f seconds => %8.4f MRS\n", temp3-temp2, temp_mult/(temp3-temp2)); printf("\tDouble generator:\t Time = %7.3f seconds => %8.4f MRS\n", temp4-temp3, temp_mult/(temp4-temp3)); putchar('\n'); } sprng2.0/SRC/check_genf.F100644 764 764 21522 6736173542 14271 0ustar chwangchwangC--- 8 June 1999 Chris S. modified to read a file with the first argument C--- being a generator type C--- added 'integer gentype' C--- added 'Reading in a generator type' and 'read *, gentype' C--- added 'gtype' and 'integer gtype' to 'check_gen' and 'check_errors' #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 program test_generator implicit none #include "sprng_f.h" integer check_gen integer check_errors integer result, temp integer seed1, seed2 integer gentype result = YES C -- Checking make_sprng_seed ... seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'ERROR: make_sprng_seed does not return unique seeds' result = NO end if C--- Reading in a generator type read *, gentype C -- Check generator with correct parameters -- temp = check_gen(gentype) if(temp .ne. YES) then result = NO end if C -- Check if generator meets specifications in handling errors -- temp = check_errors(gentype) if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_gen(gtype) implicit none #include "sprng_f.h" integer gtype SPRNG_POINTER gen1, gen2, gen3, gen4 SPRNG_POINTER gen5(1), newgen1(2), newgen2(2) SPRNG_POINTER tmpGen integer tempi1, tempi2 real tempf1, tempf2 real*8 tempd1, tempd2 integer i, correct, result integer temp integer ngens, seed integer nsp integer size character s(MAX_PACKED_LENGTH) ngens = 3 seed = 985456376 gen1 = init_sprng(gtype,0,ngens,seed,PARAM) gen2 = init_sprng(gtype,1,ngens,seed,PARAM) gen3 = init_sprng(gtype,2,ngens,seed,PARAM) result = YES correct = YES C -- Check arithmetic for integer, float and double -- do 100 i = 1,500 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'ERROR: Integer generator produces incorrect stream.' else C print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,500 tempf1 = fget_rn_flt(gen1) read *, tempf2 if ( abs(tempf2-tempf1) .ge. 1.e-6) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'FAILED: Float generator produces incorrect stream.' else C print *, 'PASSED: Float generator passed reproducibility test.' endif correct = YES do 300 i = 1,500 tempd1 = fget_rn_dbl(gen1) read *, tempd2 if ( abs(tempd2-tempd1) .ge. 1.e-14) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'FAILED: Double generator produces incorrect stream.' else c print *, 'PASSED: Double generator passed reproducibility test.' endif C ---- check spawning ---- nsp = 0 temp = spawn_sprng(gen2,2, newgen1(1)) nsp = nsp + temp tmpGen = newgen1(2) temp = spawn_sprng(tmpGen,2,newgen2(1)) nsp = nsp + temp if (nsp .ne. 4) then result = NO print *, 'FAILED: Generator was unable to spawn.' end if correct = YES tmpGen = newgen2(2) do 400 i = 1,50 read *, tempi2 tempi1 = isprng(tmpGen) if(tempi2 .ne. tempi1) then result = NO correct = NO end if 400 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect after spawning.' print *, 'Probably an error in spawning the generators.' else C print *, 'PASSED: Generator spawns correctly.' endif C -- Pack and unpack generator -- size = pack_sprng(newgen2(2), s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: Generator was unable to pack.' end if gen4 = unpack_sprng(s(1)) if (gen4 .eq. 0) then print *, 'Generator was unable to unpack ' end if correct = YES do 500 i = 1,50 read *, tempi2 tempi1 = isprng(gen4) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'FAILED: Incorrect after packing and unpacking.' else C print *, 'PASSED: Generator packs and unpacks correctly.' end if correct = YES temp = spawn_sprng(gen4,1,gen5(1)) do 600 i=1, 50 read *, tempi2 tempi1 = isprng(gen5(1)) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 600 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect stream after pack/unpack.' else C print *, 'PASSED: Generator packs/unpacks .' end if C -- Free generators -- nsp = free_sprng(gen1) nsp = free_sprng(gen2) nsp = free_sprng(gen3) if(nsp .ne. 6) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 6.' end if nsp = free_sprng(gen4) nsp = free_sprng(gen5(1)) nsp = free_sprng(newgen1(1)) nsp = free_sprng(newgen1(2)) nsp = free_sprng(newgen2(1)) nsp = free_sprng(newgen2(2)) if(nsp .ne. 0) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 0.' end if check_gen = result return end C -- Check if generator meets specifications in handling errors -- integer function check_errors(gtype) implicit none #include "sprng_f.h" integer gtype SPRNG_POINTER gen1, gen2(1) integer i integer tempi integer tempi1, tempi2 integer correct, result integer seed, nsp character s(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES C -- checking incorrect ngens in init_sprng -- print *, 'Expect SPRNG WARNING: ngens <= 0.' gen1 = init_sprng(gtype,0,0,seed,PARAM) do 100 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. 0) then print *, 'FAILED: Generator does not produce expected stream' print *, ' ... when ngens = 0.' else c print *, 'PASSED: Generator OK when ngens = 0.' end if C -- check if only one stream had been produced -- nsp = free_sprng(gen1) if(nsp .ne. 0) then result = 0 print *, 'FAILED: Generator produces more than 1 stream' print *, ' ... when ngens = 0.' else c print *, 'PASSED: Generator OK when ngens = 0.' endif C -- checking invalid range for gennum -- correct = YES print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(gtype,-1,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(gtype,2,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif if(correct .eq. NO) then print *, 'FAILED: Generator wrong with wrong gennum.' else c print *, 'PASSED: Generator OK when gennum is incorrect.' endif C-- Invalid parameter-- correct = YES print *, 'Expect SPRNG WARNING: Invalid parameter' gen1 = init_sprng(gtype,0,1,seed,2**30) do 200 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue C-- Check spawn with invalid ngens -- print *, 'Expect SPRNG WARNING: nspawned <= 0.' nsp = spawn_sprng(gen1, 0, gen2(1)) tempi = free_sprng(gen1) if (nsp .ne. 1) then result = NO print *, 'FAILED: Spawn returned', nsp print *, ' instead of 1 when nspawned = 0.' endif C -- check spawned stream -- do 300 i = 1,50 tempi2 = isprng(gen2(1)) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 300 continue tempi = free_sprng(gen2(1)) if(correct .eq. NO) then print *, 'FAILED: Incorrect when nspawned = 0.' else c print *, 'PASSED: Generator OK when nspawned = 0.' endif C -- Unpack invalid string -- do 400 i = 1, MAX_PACKED_LENGTH s(i) = '0' 400 continue c print *, 'Expect SPRNG ERROR: packed string invalid' gen1 = unpack_sprng(s) if (gen1 .ne. NULL) then result = NO print *, 'FAILED: Generator unpacks invalid string' c else c print *, 'PASSED: Detected invalid string while unpacking' endif check_errors = result return end sprng2.0/SRC/check_genf_ptr.F100600 764 764 26561 6736173542 15156 0ustar chwangchwangC--- 8 June 1999 Chris S. modified to read a file with the first argument C--- being a generator type C--- added 'integer gentype' C--- added 'Reading in a generator type' and 'read *, gentype' C--- added 'gtype' and 'integer gtype' to 'check_gen' and 'check_errors' C--- section 'Unpack invalid string' has been commented C--- it creates an error #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 #define CHECK_POINTERS program test_ptr_generator implicit none #include "sprng_f.h" integer check_gen_ptr integer check_errors_ptr integer result, temp integer seed1, seed2 integer gentype result = YES C -- Checking make_sprng_seed ... seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'FAILED: make_sprng_seed returns same seeds' result = NO end if C--- Reading in a generator type read *, gentype C -- Check generator with correct parameters -- temp = check_gen_ptr(gentype) if(temp .ne. YES) then result = NO end if C -- Check if generator meets specifications in handling errors -- temp = check_errors_ptr(gentype) if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_gen_ptr(gtype) implicit none #include "sprng_f.h" integer gtype SPRNG_POINTER gen1, gen2, gen3, gen4 SPRNG_POINTER gen5(1), newgen1(2), newgen2(2) SPRNG_POINTER tmpGen integer tempi1, tempi2 real tempf1, tempf2 real*8 tempd1, tempd2 integer i, correct, result integer temp integer ngens, seed integer nsp integer size character s(MAX_PACKED_LENGTH) ngens = 3 seed = 985456376 gen1 = init_sprng(gtype,0,ngens,seed,PARAM) gen2 = init_sprng(gtype,1,ngens,seed,PARAM) gen3 = init_sprng(gtype,2,ngens,seed,PARAM) result = YES correct = YES C -- Check arithmetic for integer, float and double -- do 100 i = 1,500 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'FAILED: Integer generator incorrect.' else c print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,500 tempf1 = fget_rn_flt_ptr(gen1) read *, tempf2 if ( abs(tempf2-tempf1) .ge. 1.e-6) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'FAILED: Float generator incorrect.' else c print *, 'PASSED: Float generator passed the reproducibility test.' endif correct = YES do 300 i = 1,500 tempd1 = sprng(gen1) read *, tempd2 if ( abs(tempd2-tempd1) .ge. 1.e-14) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'FAILED: Double generator incorrect stream.' else c print *, 'PASSED: Double generator passed the reproducibility test.' endif C ---- check spawning ---- nsp = 0 temp = spawn_sprng(gen2,2, newgen1(1)) nsp = nsp + temp tmpGen = newgen1(2) temp = spawn_sprng(tmpGen,2,newgen2(1)) nsp = nsp + temp if (nsp .ne. 4) then result = NO print *, 'FAILED: Generator was unable to spawn.' end if correct = YES tmpGen = newgen2(2) do 400 i = 1,50 read *, tempi2 tempi1 = isprng(tmpGen) if(tempi2 .ne. tempi1) then result = NO correct = NO end if 400 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect after spawning.' print *, 'Probable error in spawning the generators.' else c print *, 'PASSED: Generator spawns correctly.' endif C -- Pack and unpack generator -- size = pack_sprng(newgen2(2), s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: Generator was unable to pack.' end if gen4 = unpack_sprng(s(1)) correct = YES do 500 i = 1,50 read *, tempi2 tempi1 = isprng(gen4) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'FAILED: Incorrect stream produced after pack/unpack.' print *, 'Probable error in packing/unpacking the generators.' else c print *, 'PASSED: Generator packs and unpacks correctly.' end if correct = YES temp = spawn_sprng(gen4,1,gen5(1)) do 600 i=1, 50 read *, tempi2 tempi1 = isprng(gen5(1)) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 600 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect stream after pack/unpack.' print *, 'Probably an error in packing/unpacking the generators.' else c print *, 'PASSED: Generator packs/unpacks spawning info.' end if C -- Free generators -- nsp = free_sprng(gen1) nsp = free_sprng(gen2) nsp = free_sprng(gen3) if(nsp .ne. 6) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 6.' end if nsp = free_sprng(gen4) nsp = free_sprng(gen5(1)) nsp = free_sprng(newgen1(1)) nsp = free_sprng(newgen1(2)) nsp = free_sprng(newgen2(1)) nsp = free_sprng(newgen2(2)) if(nsp .ne. 0) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 0.' end if check_gen_ptr = result return end C -- Check if generator meets specifications in handling errors -- integer function check_errors_ptr(gtype) implicit none #include "sprng_f.h" integer gtype SPRNG_POINTER gen1, gen2(1), genNULL integer i, tempi, tempi1, tempi2 real*8 tempd1 integer correct, result, seed, nsp character s(MAX_PACKED_LENGTH), s2(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES C -- checking incorrect nges in init_sprng -- c print *, 'Expect SPRNG WARNING: ngens <= 0.' gen1 = init_sprng(gtype,0,0,seed,PARAM) do 100 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. 0) then print *, 'FAILED: Generator does not produce expected stream' print *, ' ... when ngens <= 0.' else c print *, 'PASSED: Generator OK when ngens <= 0.' end if C -- check if only one stream had been produced -- nsp = free_sprng(gen1) if(nsp .ne. 0) then result = 0 print *, 'FAILED: Generator produces more than 1 stream' print *, ' ... when ngens = 0.' else c print *, 'PASSED: Generator OK when ngens = 0.' endif C -- checking invalid range for gennum -- correct = YES c print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(gtype,-1,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif c print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(gtype,2,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif if(correct .eq. NO) then print *, 'FAILED: Generator wrong with wrong gennum.' else c print *, 'PASSED: Generator OK with worng gennum.' endif C-- Invalid parameter-- correct = YES c print *, 'Expect SPRNG WARNING: Invalid parameter' gen1 = init_sprng(gtype,0,1,seed,2**30) do 200 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue C-- Check spawn with invalid nspawned -- c print *, 'Expect SPRNG WARNING: nspawned <= 0.' nsp = spawn_sprng(gen1, 0, gen2(1)) tempi = free_sprng(gen1) if (nsp .ne. 1) then result = NO print *, 'FAILED: Spawn returned', nsp, ' instead of 1' print *, ' ... when nspawned was 0.' endif C -- check spawned stream -- do 300 i = 1,50 tempi2 = isprng(gen2(1)) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 300 continue tempi = free_sprng(gen2(1)) if(correct .eq. NO) then print *, 'FAILED: Generator wrong when nspawned = -1.' else c print *, 'PASSED: Generator OK when nspawned = 0.' endif C -- Try using freed stream -- if (isprng(gen2(1)) .ne. -1) then result = NO print *, 'FAILED: isprng accepts freed stream.' else c print *, 'PASSED: isprng detects freed stream.' endif C -- Unpack invalid string -- do 400 i = 1, MAX_PACKED_LENGTH s(i) = '0' 400 continue c memset(s,0,MAX_PACKED_LENGTH) print *, 'Expect SPRNG ERROR: packed string invalid' gen1 = unpack_sprng(s) if (gen1 .ne. NULL) then result = NO print *, 'FAILED: Generator unpacks invalid string' else C print *, 'PASSED: Generator detected invalid string while unpacking' endif C -- Invalid ID s -- c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempd1 = sprng(tempi1) if (tempd1 .ne. -1.0) then result = NO print *, 'FAILED: sprng accepts invalid stream ID.' else c print *, 'PASSED: sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' genNULL = 0 tempd1 = sprng(genNULL) if (tempd1 .ne. -1.0) then result = NO print *, 'FAILED: sprng accepts NULL stream ID.' else c print *, 'PASSED: sprng handles NULL stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempd1 = isprng(tempi1) if (tempd1 .ne. -1) then result = NO print *, 'FAILED: isprng accepts invalid stream ID.' else c print *, 'PASSED: isprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = pack_sprng(tempi1, s2(1)) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: pack() accepts invalid stream ID.' else c print *, 'PASSED: pack() handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = free_sprng(tempi1) if (tempi1 .ne. -1) then result = NO print *, 'FAILED: free_sprng accepts invalid stream ID.' else c print *, 'PASSED: free_sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = spawn_sprng(tempi1, 1, gen2) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: spawn_sprng accepts invalid stream ID.' else c print *, 'PASSED: spawn_sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = print_sprng(tempi1) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: print_sprng accepts invalid stream ID.' else c print *, 'PASSED: print_sprng handles invalid stream ID correctly.' endif check_errors_ptr = result return end sprng2.0/SRC/check_genf_simple.F100600 764 764 11735 6736173542 15637 0ustar chwangchwangC--- 8 June 1999 Chris S. modified to read a file with the first argument C--- being a generator type C--- added 'integer gentype' C--- added 'Reading in a generator type' and 'read *, gentype' C--- added 'gtype' and 'integer gtype' to 'check_gen' and 'check_errors' #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 #define SIMPLE_SPRNG program test_simple_generator implicit none #include "sprng_f.h" integer check_simple_gen integer check_simple_errors integer result, temp integer seed1, seed2 integer gentype result = YES seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'ERROR: make_sprng_seed does not return unique seeds' result = NO end if C--- Reading in a generator type read *, gentype temp = check_simple_gen(gentype) if(temp .ne. YES) then result = NO end if temp = check_simple_errors() if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_simple_gen(gtype) implicit none #include "sprng_f.h" integer gtype SPRNG_POINTER gen integer tempi1, tempi2, seed, size, dblmult real tempf1 real*8 tempd1 integer i, correct, result, fltmult character s(MAX_PACKED_LENGTH) correct = YES result = YES seed = 985456376 fltmult = 2**20 dblmult = 2**30 gen = init_sprng(gtype,seed,PARAM) if (gen .eq. NULL) then result = NO print *, ' FAILED: SPRNG unable to initialize the generator.' endif C -- check default generator do 100 i = 1,200 tempi2 = isprng() read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'ERROR: Integer generator incorrect.' else c print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,50 tempf1 = fget_rn_flt_sim() tempd1 = tempf1 read *, tempi1 tempi1 = tempi1 / (2**11) tempi2 = tempd1 * fltmult if ( abs(tempi1-tempi2) .gt. 1) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'ERROR: Float generator incorrect.' else c print *, 'PASSED: Float generator passed reproducibility test.' endif correct = YES do 300 i = 1,50 tempd1 = sprng() read *, tempi2 tempi1 = tempd1 * dblmult if ( abs(tempi2/2-tempi1) .gt. 1) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'ERROR: Double generator incorrect stream.' else c print *, 'PASSED: Double generator passed reproducibility test.' endif C -- Pack and unpack generator -- size = pack_sprng(s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: SPRNG was unable to pack the generator.' end if do 400 i = 1,100 tempi1 = isprng() 400 continue gen = unpack_sprng(s(1)) if (gen .eq. NULL) then result = NO print *, 'FAILED: SPRNG was unable to unpack the generator.' endif correct = YES do 500 i = 1,100 read *, tempi2 tempi1 = isprng() if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'ERROR: Incorrect stream produced after pack/unpack.' else c print *, 'PASSED: Generator packs and unpacks correctly.' end if check_simple_gen = result return end integer function check_simple_errors() C -- Check if generator meets specifications in handling errors -- implicit none #include "sprng_f.h" SPRNG_POINTER gen1 integer i, tempi1, tempi2, correct, result, seed character s(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES do 100 i = 1, MAX_PACKED_LENGTH s(i) = '0' 100 continue print *, ' Expect SPRNG ERROR: packed string invalid.' gen1 = unpack_sprng(s(1)) if (gen1 .ne. NULL) then print *, 'FAILED: Generator unpacks invalid string.' else c print *, 'PASSED: Generator detected invalid string while unpacking.' endif correct = YES do 200 i = 1,50 tempi2 = isprng() read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue if(correct .eq. 0) then print *, 'FAILED: Original stream not maintained ' print *, ' ... when unpacked stream is invalid.' else c print *, 'PASSED: Generator OK with invalid unpacked stream.' end if check_simple_errors = result return end sprng2.0/SRC/checkid.c100600 764 764 3510 6736173542 13611 0ustar chwangchwang#include #include #include "memory.h" #define CHECK_MASK 0x1c /* Assumes exactly last two bits are 0 ... */ /* ... If not, change checklist dimension */ typedef struct checkidstruct { int *ID; struct checkidstruct *next; } Checklisttype; Checklisttype checklist[(CHECK_MASK>>2)+1] = {{NULL,NULL},{NULL,NULL},{NULL,NULL},{NULL,NULL}}; #ifdef __STDC__ int *checkID( int *ptr) #else int *checkID(ptr) int *ptr; #endif { int bucket; Checklisttype *next; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; next = checklist[bucket].next; while(next != NULL) { if(next->ID == ptr) { return (int *) ptr; } else { next = next->next; } } fprintf(stderr,"ERROR: Invalid generator ID %p\n", ptr); return NULL; } #ifdef __STDC__ int *deleteID( int *ptr) #else int *deleteID(ptr) int *ptr; #endif { int bucket; Checklisttype *next, *temp; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; next = &checklist[bucket]; while(next->next != NULL) if(next->next->ID == ptr) { temp = next->next; next->next = next->next->next; free(temp); return (int *) ptr; } else { next = next->next; } fprintf(stderr,"ERROR: Invalid generator ID %p\n", ptr); return NULL; } #ifdef __STDC__ int *addID( int *ptr) #else int *addID(ptr) int *ptr; #endif { int bucket; Checklisttype *next, *temp; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; temp = (Checklisttype *) mymalloc(sizeof(Checklisttype)); if(temp == NULL) return NULL; temp->ID = (int *) ptr; temp->next = checklist[bucket].next; checklist[bucket].next = temp; return (int *) ptr; } sprng2.0/SRC/cmrg/ 40700 764 764 0 7034410053 12664 5ustar chwangchwangsprng2.0/SRC/cmrg/Makefile100600 764 764 1555 6736173542 14452 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => cmrg.o object # make cmrg.o => cmrg.o object # # Object files created during the compilation process can be deleted finally # by typing # make clean # make realclean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : cmrg.o cmrg.o : $(SRCDIR)/interface.h cmrg.c cmrg.h $(SRCDIR)/memory.h \ $(SRCDIR)/primes_64.h $(SRCDIR)/multiply.h \ $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) cmrg.c -I$(SRCDIR) clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out sprng2.0/SRC/cmrg/cmrg.c100600 764 764 45565 6736173542 14137 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* Parallel Combined Multiple Recursive Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: This generator combines the 64 bit LCG (lcg64) with a 32 bit */ /* multiple recursive generator. */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 1.0, created 25 May 1998 */ #include #include #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "cmrg.h" #include "primes_64.h" #include "store.h" #define init_rng cmrg_init_rng #define get_rn_int cmrg_get_rn_int #define get_rn_flt cmrg_get_rn_flt #define get_rn_dbl cmrg_get_rn_dbl #define spawn_rng cmrg_spawn_rng #define get_seed_rng cmrg_get_seed_rng #define free_rng cmrg_free_rng #define pack_rng cmrg_pack_rng #define unpack_rng cmrg_unpack_rng #define print_rng cmrg_print_rng #define MAX_STREAMS cmrg_MAX_STREAMS #define NGENS cmrg_NGENS #define PARAMLIST cmrg_PARAMLIST #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Combined multiple recursive generator" int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #endif unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, {0xe78b6955U,0x2c6fe96eU}, {0x31a53f85U,0x369dea0fU}}; /*** Change this to the type of generator you are implementing ***/ struct rngen { int rng_type; char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; int spawn_offset; /*** declare other variables here ***/ unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; unsigned LONG64 s0, s1, s2, s3, s4; #else /* No 64 bit type available, so use array of floats */ double state[3], multiplier[3];/* simulate 64 bit arithmetic */ int s0, s1, s2, s3, s4; #endif }; /*************************************************************************/ /* You should not need to look at the next few lines! */ #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU #define TWO_M22 2.384185791015625e-07 /* 2^(-22) */ #define TWO_P22 4194304 /* 2^(22) */ #define TWO_M20 9.5367431640625e-07 /* 2^(-20) */ #define TWO_P20 1048576 /* 2^(20) */ #define TWO_M42 2.273736754432321e-13 /* 2^(-42) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ /* */ /************************************************************************/ int NGENS=0; /* number of random streams in current process */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int param) #else int *init_rng(rng_type,gennum,total_gen,seed,param) int rng_type,gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i; double tempdbl; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) /* check if memory allocated for data structure */ return NULL; /* Initiallize data structure variables */ genptr->rng_type = rng_type; genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed & 0x7fffffff; /* Only 31 LSB of seed considered */ genptr->parameter = param; genptr->spawn_offset = total_gen; /*** Change the next line depending on your generators data needs ***/ genptr->narrays = 0; /* number of arrays needed by your generator */ if(genptr->narrays > 0) { genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; } else { genptr->array_sizes = NULL; genptr->arrays = NULL; } /*** Change the next line depending on your generators data needs ***/ /* initiallize ...array_sizes to the sizes of the arrays */ for(i=0; inarrays; i++) { genptr->arrays[i] = (int *) mymalloc(genptr->array_sizes[i]*sizeof(int)); if(genptr->arrays[i] == NULL) /* check if memory allocated for data structure */ return NULL; } /*** Add initialization statements for your data in the arrays and other variables you have defined ***/ getprime_64(1,&genptr->prime,gennum); #ifdef LONG64 genptr->multiplier = ((unsigned LONG64) PARAMLIST[param][1])<<32 | ((unsigned LONG64) PARAMLIST[param][0]); genptr->state = ( ((unsigned LONG64) INIT_SEED1)<<32 | INIT_SEED0) ^(((unsigned LONG64) seed<<33)|gennum); #else genptr->multiplier[0] = (double) (PARAMLIST[param][0]&0x3fffff); genptr->multiplier[1] = (double) (PARAMLIST[param][0]>>22 | (PARAMLIST[param][1]&0xfff)<<10); genptr->multiplier[2] = (double) (PARAMLIST[param][1]>>12); genptr->state[0] = (double) ((INIT_SEED0^gennum)&0x3fffff); genptr->state[1] = (double) ((INIT_SEED0^gennum)>>22 | ((INIT_SEED1 ^ (unsigned)seed<<1)&0xfff)<<10); genptr->state[2] = (double) ((INIT_SEED1 ^ (unsigned)seed<<1)>>12); #endif genptr->s0 = genptr->s1 = genptr->s2 = genptr->s3 = genptr->s4 = /*0xfffffff*/ 0x1; for(i=0; i<127*genptr->stream_number; i++) tempdbl = get_rn_dbl((int *) genptr); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } #ifdef LONG64 #define advance_state(genptr) genptr->state = genptr->state*genptr->multiplier + genptr->prime; #else #define advance_state(genptr) {double t0, t1, t2, t3, st0, st1, st2;\ t0 = genptr->state[0]*genptr->multiplier[0] + genptr->prime;\ t1 = (double) (int) (t0*TWO_M22); \ st0 = t0 - TWO_P22*t1; \ assert( (int) st0 == st0); \ t1 += genptr->state[1]*genptr->multiplier[0] + \ genptr->state[0]*genptr->multiplier[1]; \ t2 = (double) (int) (t1*TWO_M22); \ st1 = t1 - TWO_P22*t2; \ assert( (int) st1 == st1); \ t2 += genptr->state[2]*genptr->multiplier[0] + \ genptr->state[1]*genptr->multiplier[1] + \ genptr->state[0]*genptr->multiplier[2];\ t3 = (double) (int) (t2*TWO_M20); \ st2 = t2 - TWO_P20*t3; \ assert( (int) st2 == st2); \ genptr->state[0] = st0; \ genptr->state[1] = st1; \ genptr->state[2] = st2;} #endif #define m1 2147483647 #define a0 107374182 #define a4 104480 #define q0 20 #define q4 20554 #define r0 7 #define r4 1727 #ifdef LONG64 #define advance_cmrg(genptr) {unsigned LONG64 p;\ advance_state(genptr);\ p = a0*genptr->s0 + a4*genptr->s4;\ p = (p>>31) + (p&0x7fffffff);\ if(p&0x80000000) p = (p+1)&0x7fffffff;\ genptr->s4=genptr->s3; genptr->s3=genptr->s2;genptr->s2=genptr->s1;genptr->s1=genptr->s0;genptr->s0=p;} #else #define advance_cmrg(genptr) {int h, p0, p4;\ advance_state(genptr);\ h=genptr->s4/q4;p4=a4*(genptr->s4-h*q4)-h*r4;\ genptr->s4=genptr->s3;genptr->s3=genptr->s2;genptr->s2=genptr->s1;genptr->s1=genptr->s0;\ h=genptr->s0/q0; p0=a0*(genptr->s0-h*q0)-h*r0;\ if(p0<0) p0+=m1; if(p4>0)p4-=m1;\ genptr->s0=p0+p4; if(genptr->s0<0) genptr->s0+=m1;} #endif /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 #ifdef _LONG_LONG #define EXPO 0x3ff0000000000000ULL #define MULT_MASK 0xffffffffffffffffULL #else #define EXPO 0x3ff0000000000000UL #define MULT_MASK 0xffffffffffffffffUL #endif static double dtemp[1] = {0.0}; advance_cmrg(genptr); #if defined(CONVEX) || defined(O2K) || defined(SGI) || defined(GENERIC) *((unsigned LONG64 *) dtemp) = (((genptr->state+(genptr->s0<<32))&MULT_MASK)>>12) | EXPO; return *dtemp - (double) 1.0; #else return ((genptr->state+(genptr->s0<<32))&MULT_MASK)*TWO_M64; #endif #else /* 32 bit machine */ #define EXPO 0x3ff00000 #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2, tempi, tempi2; static double temp[1] = {0.0}; advance_cmrg(genptr); ist0 = genptr->state[0]; ist1 = genptr->state[1]; ist2 = genptr->state[2]; tempi2 = ist2<<12 | ist1>>10; tempi = (genptr->s0+tempi2)&0xffffffff; /* add modulo 2^64 */ ist1 = (ist1&0x3ff) | (tempi&0xfff)<<10; ist2 = tempi>>12; #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) /*IEEE mantissa is 52 bits. */ ((unsigned int *)temp)[LSB] = (ist1<<10 | ist0>>12); ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else return ist2*TWO_M20 + ist1*TWO_M42 + ist0*TWO_M64; #endif #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { #ifdef LONG64 struct rngen *genptr = (struct rngen *) igenptr; advance_cmrg(genptr); return ((genptr->state+(genptr->s0<<32))&MULT_MASK)>>33; #else return (int) (get_rn_dbl(igenptr)*0x80000000U); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } #undef m1 #undef a0 #undef a4 #undef q0 #undef q4 #undef r0 #undef r4 /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } for(i=0; istream_number + tempptr->spawn_offset*(i+1); if(gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ seed = (tempptr->init_seed)^gennum; else seed = tempptr->init_seed; /* Initialize a stream. This stream has incorrect spawning information. But we will correct it below. */ genptr[i] = (struct rngen *) init_rng(tempptr->rng_type,gennum, gennum+1, seed, tempptr->parameter); if(genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } genptr[i]->spawn_offset = (nspawned+1)*tempptr->spawn_offset; } tempptr->spawn_offset *= (nspawned+1); *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; struct rngen *q; q = (struct rngen *) genptr; size = 4 + 64 + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ if(p == NULL) { *buffer = NULL; return 0; } p += store_int(q->rng_type,4,p); strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->narrays,4,p); p += store_int(q->spawn_offset,4,p); p += store_int(q->prime,4,p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(q->state,8,p); p += store_long64(q->multiplier,8,p); p += store_long64(q->s0,4,p); p += store_long64(q->s1,4,p); p += store_long64(q->s2,4,p); p += store_long64(q->s3,4,p); p += store_long64(q->s4,4,p); #else /* No 64 bit type available */ m[0] = q->state[2]; temp = q->state[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->state[1]; temp = q->state[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); m[0] = q->multiplier[2]; temp = q->multiplier[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->multiplier[1]; temp = q->multiplier[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); p += store_int(*(unsigned int *)&q->s0,4,p); p += store_int(*(unsigned int *)&q->s1,4,p); p += store_int(*(unsigned int *)&q->s2,4,p); p += store_int(*(unsigned int *)&q->s3,4,p); p += store_int(*(unsigned int *)&q->s4,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned int i, m[2]; unsigned char *p; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; p += load_int(p,4,(unsigned int *)&q->rng_type); if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->narrays); p += load_int(p,4,(unsigned int *)&q->spawn_offset); p += load_int(p,4,&q->prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&q->state); p += load_long64(p,8,&q->multiplier); p += load_long64(p,4,&q->s0); p += load_long64(p,4,&q->s1); p += load_long64(p,4,&q->s2); p += load_long64(p,4,&q->s3); p += load_long64(p,4,&q->s4); #else /* No 64 bit type available */ p += load_intarray(p,2,4,m); q->state[0] = (double) (m[1]&0x3fffff); q->state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->state[2] = (double) (m[0]>>12); p += load_intarray(p,2,4,m); q->multiplier[0] = (double) (m[1]&0x3fffff); q->multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->multiplier[2] = (double) (m[0]>>12); p += load_int(p,4,(unsigned int *)&q->s0); p += load_int(p,4,(unsigned int *)&q->s1); p += load_int(p,4,(unsigned int *)&q->s2); p += load_int(p,4,(unsigned int *)&q->s3); p += load_int(p,4,(unsigned int *)&q->s4); #endif q->array_sizes = NULL; q->arrays = NULL; NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } sprng2.0/SRC/cmrg/cmrg.data100600 764 764 51574 6736173542 14623 0ustar chwangchwang182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 47349973 1892523924 830859568 1958786195 730610682 1859619350 716349708 994881505 1884877912 1014954219 1691786504 1025151363 657210055 791586676 1099037714 1868448777 1692347972 1460416070 595330613 748221135 348311646 1037378259 1597344249 803812994 2036799421 1312821219 1301591250 1019830737 78225855 928335293 2036469592 1289499649 1233844866 1148336379 495817327 1005356803 1825265598 1647052241 197712002 1183890214 1183405739 396353740 1762658558 644798733 1242980094 739317667 1487939406 1822630565 1271548451 1108961696 706040167 39656472 1833393062 1401650593 1642806011 550918089 305060038 1188062354 497316276 243394525 2108733603 46387459 1110105413 824149788 400843049 1658526252 269995852 1378516169 26637038 410372319 1003963543 928708029 1896000499 921315445 1641410062 790644144 1946856559 1252325370 1327457963 1407813879 280843573 1492139874 526490823 1244389354 1249778725 2099608387 488175297 1995719452 511616748 722210213 1901401238 242610881 1855662872 139292528 278402137 641928149 1820348178 1438722282 541157614 928148494 1016879601 1770886984 54147044 1341445208 1331900133 767087122 1399346935 773551166 155211299 1692424100 1464472933 563769229 62598784 467239664 1678040064 1019236288 354363047 1253487521 1200905665 1912278799 1769631816 396747658 1746229099 1954232935 2082671973 2102953123 847425252 218133881 657189250 430720043 1295389412 162734913 456535515 1176299256 273458607 417509155 16451185 1111619082 128329567 478197924 1900908566 1342284455 1092129147 665825799 2050891282 1488633220 599254084 1302804920 848570997 710567194 907332439 734663498 477936282 919104274 251781459 2051314905 1353615826 6681001 1632393464 932464398 1312042154 1506855584 1888461214 1253882575 871439364 1654529287 1943324377 472207523 1505090104 230681282 838565205 1857140297 801482745 2106484442 1303305732 2002628225 540747303 1159890840 35918202 470729892 1363869116 1251102272 309340609 614591529 769011708 1837326594 220428087 1051692163 408568808 455575628 1196649666 1730441854 616019756 1021201297 762561673 65063158 1571145132 155420776 1155919183 485858392 1822576979 2081420940 1265175884 9482277 1450216829 758345602 2103723639 1819350853 997915729 848007280 1786468060 1288236387 1267476189 311176800 398920139 1111772872 814818918 1028762672 183483289 971674797 698933437 987041171 1869579462 698033803 2071603499 295335252 681030022 280110957 302891909 2139470671 1246680071 1471011666 1686677251 1344747207 1960063221 1792286990 1818480207 1098873574 1216111524 538932864 1881607000 1966552622 1056870988 2102406969 663490056 847410935 116576065 2017958629 1524957120 917454901 2072802312 498800140 1366589578 619734046 2009394450 1543240155 1367939463 1822687838 1305732997 1249020343 1522712532 721340992 101397054 1038131058 1137553601 865695486 489228372 1407731978 454917256 398580385 1067295970 37500789 1613886540 386618226 2140888043 1735934621 1928442217 1227130727 432985582 1470155642 719546349 396453971 93733051 262660602 731309538 1857302980 2017344593 1015895977 358999679 1310363859 106406778 2514994 1472008026 1641070229 782799159 1758738910 802701469 631291884 1355220806 1424954654 233949258 625556574 1253918264 1599042057 1141344276 1900908835 1976223819 1620156844 1207509819 1817009576 2084732474 432189261 959658269 538618415 2141452345 2105712356 1340601934 2115194356 1049947155 1258874930 531177503 2133900012 1294618897 550347315 735686984 843503640 349796213 194627279 1557683812 2055248858 1370538723 1544699072 1550152269 192089195 307091590 96291152 739578706 207640831 453993963 114239791 640484774 1127151763 1326888538 411009848 1902930192 452366 874957959 743356685 816693878 1803839239 2027211820 323478587 1984357861 581463215 267228064 540473485 1724562208 127791453 1421641282 1251300303 1818515446 228361347 682586589 1760468478 2064648405 1230707479 57303563 637734771 1654262525 688848088 1045175708 1906910024 570884749 1905407811 1637356937 659228482 1524700782 528293629 1668770424 209281767 1801749637 1853994139 1570228407 1111746269 653975114 1346015334 1107003000 1513824319 1233802201 552342046 1711074366 2099082827 351874407 337480501 1825705334 1694618140 1827328899 30351041 837364191 1659133281 203628599 713311514 1503396533 682808507 2144364161 809575332 1222432116 194117867 825997351 1796294773 2084282802 1463126747 1738250532 1835031468 268722855 915603680 271591373 1744063938 1704455313 1270173671 1571915868 2042499272 1286163519 704577726 1717543017 626055368 868827564 799266579 344073070 69842515 1071479410 657082754 1156759897 1453007773 587694234 1697988423 757582925 513728237 1841666695 1284247162 2018340631 821219249 975586551 921872572 78917840 329913347 695689677 874011045 57484672 1903562060 0.658053 0.551562 0.187979 0.296808 0.281578 0.495918 0.589155 0.444410 0.474906 0.947758 0.678619 0.742282 0.107869 0.695372 0.017141 0.684191 0.615959 0.907197 0.811641 0.567254 0.919333 0.251522 0.732350 0.578711 0.270919 0.841895 0.029191 0.571808 0.357838 0.806187 0.492810 0.536877 0.927150 0.103794 0.999571 0.595667 0.918043 0.921010 0.418058 0.200784 0.680036 0.418310 0.665767 0.827004 0.310969 0.531677 0.310919 0.871498 0.418994 0.200844 0.288546 0.351842 0.611276 0.184181 0.218455 0.512269 0.547331 0.446513 0.799836 0.953656 0.469603 0.043103 0.804592 0.876802 0.300922 0.453802 0.871024 0.225266 0.415419 0.108719 0.590979 0.308942 0.209010 0.899214 0.067707 0.959648 0.406665 0.375892 0.829870 0.879680 0.206808 0.205592 0.153801 0.269261 0.730770 0.628327 0.611945 0.726853 0.788385 0.884034 0.655384 0.402954 0.713928 0.880302 0.068064 0.426456 0.293817 0.770129 0.014841 0.823801 0.601296 0.267259 0.523306 0.980761 0.271122 0.977653 0.856411 0.973257 0.832885 0.687788 0.151196 0.068025 0.523974 0.953646 0.621026 0.575944 0.187315 0.085724 0.196532 0.088853 0.882005 0.027115 0.301636 0.670582 0.442524 0.611885 0.681702 0.231514 0.692427 0.477104 0.752114 0.064560 0.108388 0.555047 0.843860 0.258027 0.548985 0.490017 0.730367 0.110219 0.831523 0.222111 0.467836 0.538988 0.338782 0.027390 0.346037 0.648227 0.011531 0.263487 0.192151 0.770453 0.327679 0.448611 0.169603 0.697369 0.611394 0.370577 0.364708 0.910594 0.197139 0.364577 0.732722 0.970462 0.316994 0.072490 0.018489 0.061600 0.042531 0.042124 0.632121 0.842862 0.685714 0.835012 0.404959 0.568147 0.790333 0.104050 0.222796 0.196431 0.120275 0.457400 0.958947 0.537154 0.838261 0.271123 0.756870 0.477165 0.625975 0.709342 0.806743 0.476370 0.899730 0.104167 0.306832 0.639532 0.088187 0.128113 0.904924 0.507116 0.411623 0.995729 0.802248 0.508999 0.290632 0.713522 0.771114 0.265364 0.413915 0.357169 0.471262 0.629659 0.904696 0.147741 0.924396 0.348667 0.110431 0.694352 0.160959 0.584291 0.399835 0.365847 0.227062 0.841882 0.350164 0.130917 0.092353 0.406939 0.713375 0.585630 0.678936 0.802821 0.820506 0.243635 0.906170 0.428904 0.641224 0.117921 0.210803 0.554729 0.096298 0.558565 0.162572 0.229089 0.651344 0.460036 0.463095 0.777302 0.443677 0.724354 0.458565 0.985047 0.466396 0.533349 0.298385 0.185995 0.158069 0.620151 0.203814 0.174955 0.037054 0.852719 0.023587 0.247030 0.685208 0.245352 0.817773 0.006480 0.188090 0.270050 0.577729 0.882310 0.168735 0.378238 0.515741 0.994265 0.967962 0.048054 0.598882 0.752816 0.128891 0.166629 0.902532 0.726653 0.831347 0.297708 0.482643 0.966783 0.877701 0.406139 0.651495 0.921146 0.624596 0.799276 0.687792 0.913154 0.503190 0.896580 0.071161 0.049132 0.372497 0.456986 0.831101 0.871751 0.495536 0.070349 0.021704 0.793937 0.572580 0.985856 0.172615 0.328538 0.036474 0.803347 0.162663 0.382813 0.711287 0.873470 0.085700 0.947703 0.369537 0.548384 0.578175 0.543133 0.333789 0.429731 0.764324 0.407350 0.719884 0.670294 0.023340 0.965245 0.225108 0.316811 0.014528 0.601312 0.006482 0.005821 0.208699 0.149236 0.198171 0.245730 0.392691 0.617020 0.904927 0.180749 0.058925 0.409909 0.045301 0.877272 0.294694 0.396249 0.583618 0.411113 0.181879 0.977374 0.609643 0.035555 0.539014 0.456022 0.809574 0.489663 0.286867 0.491479 0.203980 0.116796 0.713897 0.416914 0.634037 0.327607 0.006672 0.407987 0.980996 0.187672 0.948941 0.790931 0.291913 0.523832 0.397293 0.715613 0.029392 0.309920 0.043752 0.797669 0.528476 0.788722 0.178633 0.472087 0.812741 0.054275 0.123817 0.966846 0.738374 0.153095 0.456845 0.518555 0.386978 0.384208 0.733861 0.178603 0.885935 0.921258 0.450690 0.722681 0.673350 0.102154 0.052656 0.862952 0.455682 0.973709 0.156546 0.174499 0.260213 0.177915 0.706033 0.547907 0.384722 0.474936 0.361979 0.617647 0.829847 0.230345 0.559533 0.893224 0.380194 0.141300 0.593726 0.978763 0.758809 0.247903 0.631714 0.787780 0.208752 0.262317 0.636291 0.002386 0.737085 0.294047 0.344499 0.641598 0.805961 0.748011 0.555050 0.080118 0.705917 0.324879 0.349041 0.632671 0.798716 0.931858 0.443806 0.874538 0.693772 0.590838 0.063412 0.778477 0.525573 0.330186 0.585378 0.816047 0.631065 0.959695 0.716192 0.842090 0.184413 0.895659 0.148406 0.327512 0.286159 0.772856 0.550395 0.459390 0.467594 0.951874 0.751457 0.648331 0.207181 0.525039 0.463172 0.545387 0.760511 0.014017 0.821159 0.423283 0.606584 0.431038 0.749859 0.132122 0.837798 0.198380 0.697724 0.408195 0.650110 0.627824 0.409741 0.156608 0.376994 0.083867 0.686850 0.899871 0.57872702600771 0.63960826504228 0.68915563967026 0.65996939934417 0.69120413374132 0.78633383843826 0.74561054805038 0.29392799625156 0.51026933865115 0.67904779801236 0.16885252050191 0.21347519759846 0.55277444925741 0.69185153219520 0.94503317044625 0.98447286845073 0.34995507567350 0.02729067531159 0.70309691332646 0.99774321717031 0.94982980887752 0.10054968186078 0.70587781066997 0.54584639097166 0.63097382737274 0.79754500875727 0.63346445057816 0.45576045229815 0.08291754717446 0.77147499226177 0.70783204277544 0.54755455981837 0.41627080623438 0.06000462959153 0.59127736221172 0.28614076663483 0.09523612991561 0.23976490096962 0.51972705389818 0.49310761990590 0.70544921551895 0.79246334299701 0.08698281441285 0.53462365335892 0.62614924107497 0.69511922748824 0.51999274946842 0.76986152073819 0.37627974916005 0.96860296908990 0.96407900124404 0.85264254052003 0.38447666122292 0.14588028902542 0.82304116938263 0.66817389334312 0.55653547386238 0.06572857251342 0.75796262563541 0.95811869743735 0.30165548264877 0.13662439006478 0.33859860467378 0.65323757982787 0.67070104374408 0.29234884203203 0.64989132573669 0.79973325087359 0.64306616802467 0.23695985023257 0.14218655434438 0.10311851932187 0.09973359354232 0.81111095243303 0.07877745572902 0.75560229784612 0.32035326064509 0.54271218456187 0.87525201871625 0.70478228695783 0.30501787447234 0.79201587647001 0.16088275401213 0.78427938464329 0.35546646231470 0.23318718699527 0.33792129877488 0.02185497262856 0.86529088041045 0.97474083074739 0.19001017699512 0.71032319300219 0.83671330190797 0.42289370153530 0.64354867202761 0.97163044040309 0.08130936433333 0.70717174009388 0.19962352263661 0.99650510219045 0.05141423577815 0.95862220837834 0.80824489729501 0.89535590540748 0.12785007446798 0.10959888147636 0.25852978369929 0.86231747829558 0.44981454155620 0.02387896981428 0.47874742683981 0.52182488711139 0.19815425518774 0.23639488067296 0.97514378043681 0.73141579922791 0.91010422070964 0.39722938820629 0.09158847829843 0.06633032390813 0.81166049933315 0.80716991886919 0.17402198573231 0.98933792948868 0.73300373693573 0.76267220123587 0.61304743505464 0.35584498983110 0.63157911043844 0.25561192062955 0.85864861479594 0.19193905480824 0.56343026059153 0.81396684382578 0.11784330734473 0.42453077193893 0.98730690437333 0.35933933601888 0.20618030481857 0.89925618185677 0.25812135754304 0.17317790309989 0.39185745426451 0.35906716423741 0.72398818844147 0.48515561295292 0.61148597735814 0.13756924039483 0.40071879762388 0.85042972122989 0.30474580313456 0.13639024442558 0.37653592844945 0.36585714972637 0.37995199895844 0.98381594453786 0.54515316880698 0.89244531945546 0.59252554767640 0.22861214512570 0.30895158290386 0.43610615606170 0.09897384198914 0.87899867960702 0.87164466003429 0.92081696080544 0.64028600631617 0.87413363550144 0.78356925418909 0.62520544499795 0.50252235414704 0.35267719551957 0.15935602681275 0.40466632607065 0.26913778835739 0.85465761345125 0.91359045751559 0.07115176515934 0.60419919614288 0.29837487689990 0.58866232187980 0.19714071676866 0.94709731243982 0.20847175535337 0.06216227891176 0.36745794329362 0.21089397598549 0.00412432332176 0.39830329950584 0.92698683386990 0.49612509028362 0.69957325312098 0.08493266203149 0.70218049948218 0.67089898265797 0.40495903396562 0.02560713540830 0.39977929067641 0.92722439105617 0.07369912771778 0.38296538115291 0.57180888789433 0.09085498762590 0.26669054040097 0.26716097178335 0.95433102924118 0.81938595314950 0.67660048650670 0.24348370761987 0.63955339734398 0.21812349961553 0.16802074302222 0.19033442137901 0.06637808307326 0.61238728952883 0.84832672461885 0.72466452164169 0.75943081032991 0.40288152182081 0.85870930160378 0.35845082307547 0.19540957506043 0.87988247552761 0.05460998966687 0.43814601105733 0.30391782559603 0.69773601926933 0.53246960751309 0.63977820583038 0.92816903315120 0.89537190428725 0.76050893395201 0.36174107418226 0.71366940126156 0.77440869821488 0.31838543635164 0.74586572845682 0.54746381982354 0.66718342106422 0.92109859724489 0.37585445168771 0.88740750921349 0.04665605407635 0.60428537970756 0.12607298019740 0.98392302450681 0.11095187370387 0.61383945287541 0.67816042095278 0.54430188363520 0.65531569659775 0.55412400862747 0.89497450768689 0.41968806083365 0.77338582096814 0.19266770651408 0.15992619864679 0.79940307316739 0.70018306849570 0.03907156278345 0.57262712236924 0.83122326911150 0.72038618350672 0.03503314412538 0.06031594430466 0.95722680642355 0.37046969353609 0.62617745776160 0.10302374924185 0.46143558900623 0.08538653733711 0.71177421470723 0.98435439959771 0.95196793417853 0.12606893434201 0.50577329001614 0.61898865320312 0.70644426532299 0.25192395437102 0.01518579784338 0.49462008812595 0.83233698617315 0.67240400840934 0.31589323134496 0.57852967990937 0.71988478351389 0.75610152513500 0.93379968539543 0.29342972699412 0.81692602943861 0.59623954354940 0.02542024932715 0.87310362599951 0.95744287473668 0.21607305015721 0.43116220146262 0.32229426181953 0.18115695863707 0.41272349877165 0.28868737930962 0.67923083881466 0.75983847572258 0.13881850262422 0.75734265548867 0.74651919392746 0.72815148139930 0.59506402178590 0.03078200776727 0.98588480138724 0.60514765545803 0.64825078391465 0.77609087097397 0.65982492261588 0.81355686408307 0.14034825916430 0.52903203251270 0.75957122131485 0.88050247764618 0.92079690402944 0.83640962233274 0.80565203732745 0.12591547886832 0.72147091849891 0.77364159036706 0.47554284356672 0.45829239095771 0.45078675497092 0.72686549848240 0.04631211685926 0.51835310842316 0.97540230053203 0.19245880939690 0.53310738565772 0.09777934751641 0.63977403838612 0.27358184278134 0.26826709372644 0.73891357368193 0.17854209052775 0.77713558584537 0.55356999945036 0.08371766048608 0.90135310298080 0.93530083640941 0.60959605089032 0.38588098686963 0.75504308099048 0.69122538789436 0.81824935650866 0.00260500334004 0.89532690463126 0.12566174491845 0.43576929434879 0.82159575377363 0.74957574718014 0.67554578624458 0.43179094306958 0.57359672744172 0.40602339045833 0.97586442212773 0.91626407581120 0.49474612042082 0.34113138672805 0.57848236328009 0.73577304995269 0.49365176399495 0.37059468958936 0.70220773480340 0.38254840153144 0.37739490199863 0.42137853651429 0.31004992223201 0.98946539952398 0.54602106890265 0.41411084452476 0.74872200331283 0.06130920369726 0.47799840308820 0.71011151730951 0.74202379906960 0.48395065668459 0.83284504464475 0.00979017397261 0.86628636049553 0.87066581427800 0.11329312636083 0.87318563616090 0.58694368404998 0.11034809356021 0.78599372958078 0.56519975969143 0.89850643040061 0.49814628426455 0.37913046121212 0.79328044902880 0.39155169504797 0.86932417457119 0.40951651810132 0.57930364292327 0.22736472486939 0.63332717701910 0.61659537942882 0.81132944818748 0.88563519223492 0.03810429635829 0.65322662002683 0.61092010045675 0.96172329836651 0.29461144681230 0.96735325787644 0.42443829088060 0.29382587458752 0.86740999915673 0.55995045210799 0.29692056502944 0.66481353854400 0.76226445758234 0.15518079118971 0.95152086917150 0.16373687715460 0.31323152914635 0.84561429563710 0.72611805589512 0.42058058819984 0.21645285841141 0.82571393365204 0.44471181345121 0.70073917241458 0.67566983060072 0.55094695908106 0.51830515185838 0.67696328943363 0.33534530045741 0.32692741339707 0.43960568690701 0.72538076717360 0.71191600727471 0.40228541369243 0.25537736460940 0.55086304724633 0.19227133935383 0.32700924977744 0.23400693903722 0.50150802225296 0.86159914353185 0.68208390613566 0.85304094012854 0.36163163177110 0.02747159740485 0.02476099725258 0.40784415502731 0.30896397859881 0.43723813384159 0.86097527955126 0.19040858061591 0.62991754954355 0.40597028245868 0.87610978586730 0.01695488648838 0.79356267756460 0.47083874970652 0.61347703854432 0.68566034169507 0.69442421130864 0.55365308215130 0.64030126750035 0.13713035939842 0.05979300928748 0.61556904616336 0.59987423221360 0.56472677136001 0.24648169729288 0.57089746528911 0.20403538173565 0.29514210556975 0.05681143362751 0.18225580655517 0.51065163889187 0.04411964612121 0.28445223218054 0.02801315806450 0.22629379375630 0.88341584391547 0.79571113277195 0.22637037505492 0.93965537677790 0.52028827737293 0.69393084051914 0.04227016160473 0.73304506267842 0.77050078313178 0.03002381517796 0.46980996423891 0.04770708625613 0.45895281467201 0.77642417720459 0.69989314110809 0.41739228723726 0.00128043208545 0.96469940991764 835614087 1287290571 1564766039 304704185 1774165154 70727300 1320520476 1590403527 351322547 301736453 633801215 1953730905 1166424433 1077116052 1252126899 1278547983 80675490 22698981 1773437191 368531641 1387729442 576010412 573490890 1738345371 125179025 1109242584 304445817 1209410410 1892190454 1058524404 1623908133 529285618 1939507201 1110843849 416770838 1241982568 89521622 499865715 1862474926 571405775 1258773055 347158051 2078839531 1913993865 611767209 1300752222 1395253678 680010138 166582059 2010616074 1993925613 2116070362 371870295 1244911239 2037300598 206367479 851692855 1650287842 139418325 1550889197 659381844 738216933 1497690900 1441507288 1441054165 852273377 1582480776 1210167469 2134346057 1361257535 819933710 1906947033 306148144 550919470 727628327 2132834593 314817393 349433337 1554410658 408970032 777252135 1259555305 532660655 456496940 415964679 273309439 1386848673 305016848 706351210 1424266651 1974937742 496447902 876744978 1980155768 1626279545 1653014322 1655275566 1121591667 840032553 1828367448 591323025 797224514 414717538 2074575814 836905725 1348125540 1953040429 285688975 1946526550 1758551528 682059336 1571100808 934872562 689668957 807258583 1142264774 917327791 2062835488 837995389 572190818 1385268609 148635639 100576780 1049168955 2071753382 635843264 1935012889 898143408 1421890241 1095753641 1802001833 1957841769 793987359 266727562 1832969092 367666082 841265165 897486930 2028104229 1660451396 1456594993 661061275 727094865 892484700 274466554 1753757996 763564758 1441572689 1088431730 1468892641 182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 1877508010 366385584 1934173720 1178994858 1386446991 1431633836 1694496562 982423889 773365212 405306722 1280891382 1952280882 828215770 757408465 1146028204 1723593626 1027250789 1421943571 15696760 1937951033 872456604 1423919865 2108743444 1434391778 1423601705 1121344724 2035365303 54265179 698388977 1094134192 60792674 600539484 412180606 1324269307 865670597 701180872 1911421216 724675296 1058662019 61415479 1796941581 1490686861 56318643 417547141 1335747007 1664701401 399601952 525499862 862519976 1613064011 sprng2.0/SRC/cmrg/cmrg.h100600 764 764 1445 6736173542 14111 0ustar chwangchwang #ifndef _cmrg_h #define _cmrg_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int cmrg_get_rn_int ANSI_ARGS((int *igenptr)); float cmrg_get_rn_flt ANSI_ARGS((int *igenptr)); double cmrg_get_rn_dbl ANSI_ARGS((int *igenptr)); int *cmrg_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int cmrg_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int cmrg_get_seed_rng ANSI_ARGS((int *genptr)); int cmrg_free_rng ANSI_ARGS((int *genptr)); int cmrg_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *cmrg_unpack_rng ANSI_ARGS(( char *packed)); int cmrg_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/communicate.c100600 764 764 1674 6736173542 14534 0ustar chwangchwang#ifdef SPRNG_MPI #include #endif #include #include "interface.h" #ifdef __STDC__ void get_proc_info_mpi(int *myid, int *nprocs) #else void get_proc_info_mpi(myid, nprocs) int *myid, *nprocs; #endif { #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, myid); MPI_Comm_size(MPI_COMM_WORLD, nprocs); #else *myid = 0; *nprocs = 1; #endif } #ifdef __STDC__ int make_new_seed_mpi(void) #else int make_new_seed_mpi() #endif { #ifdef SPRNG_MPI unsigned int temp2; int myid, nprocs; MPI_Comm newcomm; MPI_Comm_dup(MPI_COMM_WORLD, &newcomm); /* create a temporary communicator */ MPI_Comm_rank(newcomm, &myid); MPI_Comm_size(newcomm, &nprocs); if(myid == 0) temp2 = make_new_seed(); MPI_Bcast(&temp2,1,MPI_UNSIGNED,0,newcomm); MPI_Comm_free(&newcomm); return temp2; #else return make_new_seed(); #endif } #if 0 main() { printf("%u\n", make_new_seed()); printf("%u\n", make_new_seed()); } #endif sprng2.0/SRC/cputime.c100600 764 764 1355 6736173542 13672 0ustar chwangchwang#include #include #include #include "fwrap.h" #ifdef __STDC__ double cputime(void) #else double cputime() #endif { double current_time; #ifdef RUSAGE_SELF struct rusage temp; getrusage(RUSAGE_SELF, &temp); current_time = (temp.ru_utime.tv_sec + temp.ru_stime.tv_sec + 1.0e-6*(temp.ru_utime.tv_usec + temp.ru_stime.tv_usec)); #elif defined(CLOCKS_PER_SEC) current_time = clock()/((double) CLOCKS_PER_SEC); #else fprintf(stderr,"\nERROR: Timing routines not available\n\n"); current_time = 0.0; #endif return (current_time); } #ifdef __STDC__ double FNAMEOF_fcpu_t(void) #else double FNAMEOF_fcpu_t() #endif { return cputime(); } sprng2.0/SRC/cputime.h100600 764 764 114 6736173542 13647 0ustar chwangchwang#ifdef __STDC__ double cputime(void); #else double cputime(); #endif sprng2.0/SRC/drand.c100600 764 764 1533 6736173542 13312 0ustar chwangchwang#include #include #include "cputime.h" #define TIMING_TRIAL_SIZE 1000000 main() { int i; double temp1, temp2, rn; double temp_mult = TIMING_TRIAL_SIZE/1.0e6; temp1 = cputime(); for(i=0; i %8.4f MRS\n", temp2-temp1, temp_mult/(temp2-temp1)); putchar('\n'); } sprng2.0/SRC/fwrap.h100600 764 764 11640 6736173542 13366 0ustar chwangchwang#ifndef _fwrap_h #define _fwrap_h /************************************************************************/ /************************************************************************/ /* Inter-language Naming Convention Problem Solution */ /* */ /* Note that with different compilers you may find that */ /* the linker fails to find certain modules due to the naming */ /* conventions implicit in particular compilers. Here the */ /* solution was to look at the object code produced by the FORTRAN */ /* compiler and modify this wrapper code so that the C routines */ /* compiled with the same routine names as produced in the FORTRAN */ /* program. */ /* */ /************************************************************************/ /************************************************************************/ /* Turn funcName (which must be all lower-case) into something callable from FORTRAN, typically by appending one or more underscores. */ #if defined(Add__) #define FORTRAN_CALLABLE(funcName) funcName ## __ #elif defined(NoChange) #define FORTRAN_CALLABLE(funcName) funcName #elif defined(Add_) #define FORTRAN_CALLABLE(funcName) funcName ## _ #endif #ifdef UpCase #define FNAMEOF_finit_rng FINIT_RNG #define FNAMEOF_fspawn_rng FSPAWN_RNG #define FNAMEOF_fget_rn_int FGET_RN_INT #define FNAMEOF_fget_rn_flt FGET_RN_FLT #define FNAMEOF_fget_rn_dbl FGET_RN_DBL #define FNAMEOF_fmake_new_seed FMAKE_NEW_SEED #define FNAMEOF_fseed_mpi FSEED_MPI #define FNAMEOF_ffree_rng FFREE_RNG #define FNAMEOF_fget_seed_rng FGET_SEED_RNG #define FNAMEOF_fpack_rng FPACK_RNG #define FNAMEOF_funpack_rng FUNPACK_RNG #define FNAMEOF_fprint_rng FPRINT_RNG #define FNAMEOF_finit_rng_sim FINIT_RNG_SIM #define FNAMEOF_fget_rn_int_sim FGET_RN_INT_SIM #define FNAMEOF_fget_rn_flt_sim FGET_RN_FLT_SIM #define FNAMEOF_fget_rn_dbl_sim FGET_RN_DBL_SIM #define FNAMEOF_finit_rng_simmpi FINIT_RNG_SIMMPI #define FNAMEOF_fget_rn_int_simmpi FGET_RN_INT_SIMMPI #define FNAMEOF_fget_rn_flt_simmpi FGET_RN_FLT_SIMMPI #define FNAMEOF_fget_rn_dbl_simmpi FGET_RN_DBL_SIMMPI #define FNAMEOF_fpack_rng_simple FPACK_RNG_SIMPLE #define FNAMEOF_funpack_rng_simple FUNPACK_RNG_SIMPLE #define FNAMEOF_fprint_rng_simple FPRINT_RNG_SIMPLE #define FNAMEOF_finit_rng_ptr FINIT_RNG_PTR #define FNAMEOF_fget_rn_int_ptr FGET_RN_INT_PTR #define FNAMEOF_fget_rn_flt_ptr FGET_RN_FLT_PTR #define FNAMEOF_fget_rn_dbl_ptr FGET_RN_DBL_PTR #define FNAMEOF_fpack_rng_ptr FPACK_RNG_PTR #define FNAMEOF_funpack_rng_ptr FUNPACK_RNG_PTR #define FNAMEOF_fprint_rng_ptr FPRINT_RNG_PTR #define FNAMEOF_ffree_rng_ptr FFREE_RNG_PTR #define FNAMEOF_fspawn_rng_ptr FSPAWN_RNG_PTR #define FNAMEOF_fcpu_t FCPU_T #else #define FNAMEOF_ffree_rng FORTRAN_CALLABLE(ffree_rng) #define FNAMEOF_fmake_new_seed FORTRAN_CALLABLE(fmake_new_seed) #define FNAMEOF_fseed_mpi FORTRAN_CALLABLE(fseed_mpi) #define FNAMEOF_finit_rng FORTRAN_CALLABLE(finit_rng) #define FNAMEOF_fspawn_rng FORTRAN_CALLABLE(fspawn_rng) #define FNAMEOF_fget_rn_int FORTRAN_CALLABLE(fget_rn_int) #define FNAMEOF_fget_rn_flt FORTRAN_CALLABLE(fget_rn_flt) #define FNAMEOF_fget_rn_dbl FORTRAN_CALLABLE(fget_rn_dbl) #define FNAMEOF_fget_seed_rng FORTRAN_CALLABLE(fget_seed_rng) #define FNAMEOF_fpack_rng FORTRAN_CALLABLE(fpack_rng) #define FNAMEOF_funpack_rng FORTRAN_CALLABLE(funpack_rng) #define FNAMEOF_fprint_rng FORTRAN_CALLABLE(fprint_rng) #define FNAMEOF_finit_rng_sim FORTRAN_CALLABLE(finit_rng_sim) #define FNAMEOF_fget_rn_int_sim FORTRAN_CALLABLE(fget_rn_int_sim) #define FNAMEOF_fget_rn_flt_sim FORTRAN_CALLABLE(fget_rn_flt_sim) #define FNAMEOF_fget_rn_dbl_sim FORTRAN_CALLABLE(fget_rn_dbl_sim) #define FNAMEOF_finit_rng_simmpi FORTRAN_CALLABLE(finit_rng_simmpi) #define FNAMEOF_fget_rn_int_simmpi FORTRAN_CALLABLE(fget_rn_int_simmpi) #define FNAMEOF_fget_rn_flt_simmpi FORTRAN_CALLABLE(fget_rn_flt_simmpi) #define FNAMEOF_fget_rn_dbl_simmpi FORTRAN_CALLABLE(fget_rn_dbl_simmpi) #define FNAMEOF_fpack_rng_simple FORTRAN_CALLABLE(fpack_rng_simple) #define FNAMEOF_funpack_rng_simple FORTRAN_CALLABLE(funpack_rng_simple) #define FNAMEOF_fprint_rng_simple FORTRAN_CALLABLE(fprint_rng_simple) #define FNAMEOF_finit_rng_ptr FORTRAN_CALLABLE(finit_rng_ptr) #define FNAMEOF_fget_rn_int_ptr FORTRAN_CALLABLE(fget_rn_int_ptr) #define FNAMEOF_fget_rn_flt_ptr FORTRAN_CALLABLE(fget_rn_flt_ptr) #define FNAMEOF_fget_rn_dbl_ptr FORTRAN_CALLABLE(fget_rn_dbl_ptr) #define FNAMEOF_fpack_rng_ptr FORTRAN_CALLABLE(fpack_rng_ptr) #define FNAMEOF_funpack_rng_ptr FORTRAN_CALLABLE(funpack_rng_ptr) #define FNAMEOF_fprint_rng_ptr FORTRAN_CALLABLE(fprint_rng_ptr) #define FNAMEOF_ffree_rng_ptr FORTRAN_CALLABLE(ffree_rng_ptr) #define FNAMEOF_fspawn_rng_ptr FORTRAN_CALLABLE(fspawn_rng_ptr) #define FNAMEOF_fcpu_t FORTRAN_CALLABLE(fcpu_t) #endif #endif sprng2.0/SRC/fwrap_.h100600 764 764 15532 6736173542 13531 0ustar chwangchwang#include "fwrap.h" /************************************************************************/ /************************************************************************/ /* */ /* This package of C wrappers is intended to be called from a */ /* FORTRAN program. The main purpose of the package is to mediate */ /* between the call-by-address and call-by-value conventions in */ /* the two languages. In most cases, the arguments of the C */ /* routines and the wrappers are the same. */ /* */ /* The wrappers should be treated as FORTRAN function calls. */ /* */ /* Note: This code is a header file to facilitte inlining. */ /************************************************************************/ /************************************************************************/ #ifdef __STDC__ int FNAMEOF_fget_seed_rng(int **genptr) #else int FNAMEOF_fget_seed_rng(genptr) int **genptr; #endif { return get_seed_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_ffree_rng_ptr(int **genptr) #else int FNAMEOF_ffree_rng_ptr(genptr) int **genptr; #endif { if (deleteID(*genptr) == NULL) return -1; return free_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_ffree_rng(int **genptr) #else int FNAMEOF_ffree_rng(genptr) int **genptr; #endif { return free_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_fmake_new_seed(void) #else int FNAMEOF_fmake_new_seed() #endif { return make_new_seed(); } #ifdef __STDC__ int * FNAMEOF_finit_rng_sim(int *rng_type, int *seed, int *mult) #else int * FNAMEOF_finit_rng_sim(rng_type, seed,mult) int *rng_type, *mult,*seed; #endif { return init_rng_simple(*rng_type, *seed, *mult); } #ifdef __STDC__ int * FNAMEOF_finit_rng(int *rng_type, int *gennum, int *total_gen, int *seed, int *length) #else int * FNAMEOF_finit_rng(rng_type, gennum, total_gen, seed, length) int *rng_type, *gennum, *length, *seed, *total_gen; #endif { return init_rng(*rng_type, *gennum, *total_gen, *seed, *length); } #ifdef __STDC__ int * FNAMEOF_finit_rng_ptr(int *rng_type, int *gennum, int *total_gen, int *seed, int *length) #else int * FNAMEOF_finit_rng_ptr(rng_type, gennum, total_gen, seed, length) int *rng_type, *gennum, *length, *seed, *total_gen; #endif { int *tmpGen; tmpGen = init_rng(*rng_type, *gennum, *total_gen, *seed, *length); addID(tmpGen); return tmpGen; } #ifdef __STDC__ int FNAMEOF_fspawn_rng(int **genptr, int *nspawned, int **newGen, int checkid) #else int FNAMEOF_fspawn_rng(genptr, nspawned, newGen, checkid) int **genptr, *nspawned, **newGen, checkid; #endif { int i, **tmpGen, n; n = spawn_rng(*genptr, *nspawned, &tmpGen, checkid); for (i=0; i< n; i++) newGen[i] = tmpGen[i]; if(n != 0) free( tmpGen); return n; } #ifdef __STDC__ int FNAMEOF_fspawn_rng_ptr(int **genptr, int *nspawned, int **newGen, int checkid) #else int FNAMEOF_fspawn_rng_ptr(genptr, nspawned, newGen, checkid) int **genptr, *nspawned, **newGen, checkid; #endif { int i, **tmpGen, n; if (checkID(*genptr) == NULL) return 0; n = spawn_rng(*genptr, *nspawned, &tmpGen, checkid); for (i=0; i< n; i++) newGen[i] = tmpGen[i]; if(n != 0) free( tmpGen); return n; } #ifdef __STDC__ int FNAMEOF_fget_rn_int_sim(void) #else int FNAMEOF_fget_rn_int_sim() #endif { return get_rn_int_simple(); } #ifdef __STDC__ int FNAMEOF_fget_rn_int(int **genptr) #else int FNAMEOF_fget_rn_int(genptr) int **genptr; #endif { return get_rn_int(*genptr); } #ifdef __STDC__ int FNAMEOF_fget_rn_int_ptr(int **genptr) #else int FNAMEOF_fget_rn_int_ptr(genptr) int **genptr; #endif { if (checkID(*genptr)==NULL) return -1; return get_rn_int(*genptr); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_sim(void) #else float FNAMEOF_fget_rn_flt_sim() #endif { return get_rn_flt_simple(); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt(int **genptr) #else float FNAMEOF_fget_rn_flt(genptr) int **genptr; #endif { return get_rn_flt(*genptr); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_ptr(int **genptr) #else float FNAMEOF_fget_rn_flt_ptr(genptr) int **genptr; #endif { if (checkID(*genptr)==NULL) return -1.0; return get_rn_flt(*genptr); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_sim(void) #else double FNAMEOF_fget_rn_dbl_sim() #endif { return get_rn_dbl_simple(); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl(int **genptr) #else double FNAMEOF_fget_rn_dbl(genptr) int **genptr; #endif { return get_rn_dbl(*genptr); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_ptr(int **genptr) #else double FNAMEOF_fget_rn_dbl_ptr(genptr) int **genptr; #endif { if ( checkID(*genptr)==NULL) return -1.0; return get_rn_dbl(*genptr); } #ifdef __STDC__ int FNAMEOF_fpack_rng( int **genptr, char *buffer) #else int FNAMEOF_fpack_rng(genptr, buffer) int **genptr; char *buffer; #endif { int size; char *temp; size = pack_rng(*genptr, &temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int FNAMEOF_fpack_rng_ptr( int **genptr, char *buffer) #else int FNAMEOF_fpack_rng_ptr(genptr, buffer) int **genptr; char *buffer; #endif { int size; char *temp; if( checkID(*genptr)==NULL) return 0; size = pack_rng(*genptr, &temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int FNAMEOF_fpack_rng_simple(char *buffer) #else int FNAMEOF_fpack_rng_simple(buffer) char *buffer; #endif { int size; char *temp; size = pack_rng_simple(&temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int * FNAMEOF_funpack_rng( char *buffer) #else int * FNAMEOF_funpack_rng(buffer) char *buffer; #endif { return unpack_rng(buffer); } #ifdef __STDC__ int * FNAMEOF_funpack_rng_ptr( char *buffer) #else int * FNAMEOF_funpack_rng_ptr(buffer) char *buffer; #endif { int *tmpGen; tmpGen = unpack_rng(buffer); addID(tmpGen); return tmpGen; } #ifdef __STDC__ int * FNAMEOF_funpack_rng_simple( char *buffer) #else int * FNAMEOF_funpack_rng_simple(buffer) char *buffer; #endif { return unpack_rng_simple(buffer); } /* 11/15/96 J.J.: split into two cases: general print_rng, and print_rng_ptr #ifdef __STDC__ int FNAMEOF_fprint_rng( int **genptr,int checkid) #else int FNAMEOF_fprint_rng(genptr, checkid) int **genptr, checkid; #endif { if(checkid != 0) if(checkID(*genptr) == NULL) return 0; return print_rng(*genptr); } */ #ifdef __STDC__ int FNAMEOF_fprint_rng( int **genptr) #else int FNAMEOF_fprint_rng(genptr) int **genptr; #endif { return print_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_fprint_rng_simple(void) #else int FNAMEOF_fprint_rng_simple() #endif { return print_rng_simple(); } #ifdef __STDC__ int FNAMEOF_fprint_rng_ptr( int **genptr) #else int FNAMEOF_fprint_rng_ptr(genptr) int **genptr; #endif { if(checkID(*genptr) == NULL) return 0; return print_rng(*genptr); } sprng2.0/SRC/fwrap_mpi.c100600 764 764 3710 6736173542 14205 0ustar chwangchwang #include "fwrap.h" #include "interface.h" #include "memory.h" #include #include #include /************************************************************************/ /************************************************************************/ /* */ /* This package of C wrappers is intended to be called from a */ /* FORTRAN program. The main purpose of the package is to mediate */ /* between the call-by-address and call-by-value conventions in */ /* the two languages. In most cases, the arguments of the C */ /* routines and the wrappers are the same. There are two */ /* exceptions to this. The trivial exception is that the C number */ /* scheme of 0 thru N-1 is automatically converted to the FORTRAN */ /* scheme of 1 thru N, so when referring to a particular generator */ /* the FORTRAN user should number as is natural to that language. */ /* */ /* */ /* The wrappers should be treated as FORTRAN function calls. */ /* */ /************************************************************************/ /************************************************************************/ #ifdef __STDC__ int FNAMEOF_fseed_mpi(void) #else int FNAMEOF_fseed_mpi() #endif { #ifdef SPRNG_MPI return make_new_seed_mpi(); #else return -1; #endif } #ifdef SPRNG_MPI #ifdef __STDC__ int * FNAMEOF_finit_rng_simmpi(int *rng_type, int *seed, int *mult) #else int * FNAMEOF_finit_rng_simmpi(rng_type,seed,mult) int *rng_type,*mult,*seed; #endif { return init_rng_simple_mpi(*rng_type,*seed, *mult); } #ifdef __STDC__ int FNAMEOF_fget_rn_int_simmpi(void) #else int FNAMEOF_fget_rn_int_simmpi() #endif { return get_rn_int_simple_mpi(); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_simmpi(void) #else float FNAMEOF_fget_rn_flt_simmpi() #endif { return get_rn_flt_simple_mpi(); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_simmpi(void) #else double FNAMEOF_fget_rn_dbl_simmpi() #endif { return get_rn_dbl_simple_mpi(); } #endif sprng2.0/SRC/insertlib100700 764 764 352 6736173542 13753 0ustar chwangchwangif [ -f $5 ] then if [ -f $2 ] then s=`grep -c "$1: $3" $2` else cat .insertlib > $2 s=`grep -c "$1: $3" $2` fi s=`grep -c "$1: $3" $2` if [ $s = "0" ] then echo echo >> $2 echo echo $1: $3 >> $2 echo ./$4 >> $2 fi fisprng2.0/SRC/interface.h100600 764 764 3013 6736173542 14162 0ustar chwangchwang #ifndef _interface_h_ #define _interface_h_ #define DEFAULT_RNG_TYPE SPRNG_LFG #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int get_rn_int ANSI_ARGS((int *igenptr)); float get_rn_flt ANSI_ARGS((int *igenptr)); double get_rn_dbl ANSI_ARGS((int *igenptr)); int *init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int make_new_seed ANSI_ARGS((void)); int make_new_seed_mpi ANSI_ARGS((void)); int get_seed_rng ANSI_ARGS((int *genptr)); int free_rng ANSI_ARGS((int *genptr)); int pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *unpack_rng ANSI_ARGS(( char *packed)); int print_rng ANSI_ARGS(( int *igen)); int *checkID ANSI_ARGS(( int *igen)); int *addID ANSI_ARGS(( int *igen)); int *deleteID ANSI_ARGS(( int *igen)); int *init_rng_simple ANSI_ARGS((int rng_type, int seed, int mult)); int *init_rng_simple_mpi ANSI_ARGS((int rng_type, int seed, int mult)); int get_rn_int_simple ANSI_ARGS((void)); int get_rn_int_simple_mpi ANSI_ARGS((void)); float get_rn_flt_simple ANSI_ARGS((void)); float get_rn_flt_simple_mpi ANSI_ARGS((void)); double get_rn_dbl_simple ANSI_ARGS((void)); double get_rn_dbl_simple_mpi ANSI_ARGS((void)); int pack_rng_simple ANSI_ARGS((char **buffer)); int *unpack_rng_simple ANSI_ARGS(( char *packed)); int print_rng_simple ANSI_ARGS((void)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/sprng/ 40700 764 764 0 7034410053 13065 5ustar chwangchwangsprng2.0/SRC/sprng/sprng.c100600 764 764 15527 6736173542 14534 0ustar chwangchwang/*************************************************************************/ /* SPRNG single library version */ /* sprng.c, Wrapper file for rngs */ /* */ /* Author: Mike H. Zhou, */ /* University of Southern Mississippi */ /* E-Mail: Mike.Zhou@usm.edu */ /* Date: April, 1999 */ /* */ /* Disclaimer: We expressly disclaim any and all warranties, expressed */ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* We cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ #include #include #include #include "memory.h" #include "sprng.h" #include "interface.h" #include "lfg/lfg.h" #include "lcg/lcg.h" #include "lcg64/lcg64.h" #include "cmrg/cmrg.h" #include "mlfg/mlfg.h" #ifdef USE_PMLCG #include "pmlcg/pmlcg.h" #endif #define NDEBUG #include #define VERSION "00" #define GENTYPE VERSION "SPRNG Wrapper" /* * This struct is used to retrieve "rng_type" from the rng specific * "struct rngen". RNGs have different definations for "struct rngen", * however, its first field must be the integer "rng_type" */ struct rngen { int rng_type; }; /* * The function tables, the order of the RNG functions in each table * must conform to that of the macro definations in sprng.h and * sprng_f.h, * #define SPRNG_LFG 0 * #define SPRNG_LCG 1 * #define SPRNG_LCG64 2 * #define SPRNG_CMRG 3 * #define SPRNG_MLFG 4 * #define SPRNG_PMLCG 5 */ int *(*init_rng_tbl[])(int rng_type,int gennum,int total_gen,int seed,int mult)\ = { lfg_init_rng, \ lcg_init_rng, \ lcg64_init_rng, \ cmrg_init_rng,\ mlfg_init_rng #ifdef USE_PMLCG , pmlcg_init_rng #endif }; double (*get_rn_dbl_tbl[])(int *igenptr)\ ={ lfg_get_rn_dbl, \ lcg_get_rn_dbl, \ lcg64_get_rn_dbl, \ cmrg_get_rn_dbl,\ mlfg_get_rn_dbl #ifdef USE_PMLCG , pmlcg_get_rn_dbl #endif }; int (*get_rn_int_tbl[])(int *igenptr)\ ={ lfg_get_rn_int, \ lcg_get_rn_int, \ lcg64_get_rn_int, \ cmrg_get_rn_int,\ mlfg_get_rn_int #ifdef USE_PMLCG , pmlcg_get_rn_int #endif }; float (*get_rn_flt_tbl[])(int *igenptr)\ ={ lfg_get_rn_flt, \ lcg_get_rn_flt, \ lcg64_get_rn_flt, \ cmrg_get_rn_flt,\ mlfg_get_rn_flt #ifdef USE_PMLCG , pmlcg_get_rn_flt #endif }; int (*spawn_rng_tbl[])(int *igenptr, int nspawned, int ***newgens, int checkid)\ ={ lfg_spawn_rng, \ lcg_spawn_rng, \ lcg64_spawn_rng, \ cmrg_spawn_rng,\ mlfg_spawn_rng #ifdef USE_PMLCG , pmlcg_spawn_rng #endif }; int (*free_rng_tbl[])(int *genptr)\ ={ lfg_free_rng, \ lcg_free_rng, \ lcg64_free_rng, \ cmrg_free_rng,\ mlfg_free_rng #ifdef USE_PMLCG , pmlcg_free_rng #endif }; int (*pack_rng_tbl[])( int *genptr, char **buffer)\ ={ lfg_pack_rng, \ lcg_pack_rng, \ lcg64_pack_rng, \ cmrg_pack_rng,\ mlfg_pack_rng #ifdef USE_PMLCG , pmlcg_pack_rng #endif }; int *(*unpack_rng_tbl[])( char *packed)\ ={ lfg_unpack_rng, \ lcg_unpack_rng, \ lcg64_unpack_rng, \ cmrg_unpack_rng,\ mlfg_unpack_rng #ifdef USE_PMLCG , pmlcg_unpack_rng #endif }; int (*get_seed_rng_tbl[])(int *gen)\ ={ lfg_get_seed_rng, \ lcg_get_seed_rng, \ lcg64_get_seed_rng, \ cmrg_get_seed_rng,\ mlfg_get_seed_rng #ifdef USE_PMLCG , pmlcg_get_seed_rng #endif }; int (*print_rng_tbl[])( int *igen)\ ={ lfg_print_rng, \ lcg_print_rng, \ lcg64_print_rng, \ cmrg_print_rng,\ mlfg_print_rng #ifdef USE_PMLCG , pmlcg_print_rng #endif }; #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int mult) #else int *init_rng(rng_type,gennum,total_gen,seed,mult) int rng_type,gennum,mult,seed,total_gen; #endif { if (rng_type==SPRNG_LFG || \ rng_type==SPRNG_LCG || \ rng_type==SPRNG_LCG64 ||\ rng_type==SPRNG_CMRG || \ rng_type==SPRNG_MLFG #ifdef USE_PMLCG || rng_type==SPRNG_PMLCG #endif ) { return init_rng_tbl[rng_type](rng_type,gennum,total_gen,seed,mult); }else{ fprintf(stderr, \ "Error: in init_rng, invalid generator type: %d.\n", rng_type); return NULL; } } #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen * tmpgen = (struct rngen *)igenptr; return get_rn_int_tbl[tmpgen->rng_type](igenptr); } #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { return get_rn_flt_tbl[((struct rngen *)igenptr)->rng_type](igenptr); } /* get_rn_float */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { return get_rn_dbl_tbl[((struct rngen *)igenptr)->rng_type](igenptr); } /* get_rn_dbl */ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { return spawn_rng_tbl[((struct rngen *)igenptr)->rng_type]\ (igenptr,nspawned,newgens,checkid); } #ifdef __STDC__ int free_rng(int *genptr) #else int free_rng(genptr) int *genptr; #endif { return free_rng_tbl[((struct rngen *)genptr)->rng_type](genptr); } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { return pack_rng_tbl[((struct rngen *)genptr)->rng_type](genptr,buffer); } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return get_seed_rng_tbl[((struct rngen *)gen)->rng_type](gen); } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { int rng_type; load_int(packed,4,(unsigned int *)&rng_type); if (rng_type==SPRNG_LFG || \ rng_type==SPRNG_LCG || \ rng_type==SPRNG_LCG64 ||\ rng_type==SPRNG_CMRG || \ rng_type==SPRNG_MLFG #ifdef USE_PMLCG || rng_type==SPRNG_PMLCG #endif ){ return unpack_rng_tbl[rng_type](packed); } else { return NULL; } } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { return print_rng_tbl[((struct rngen *)igen)->rng_type](igen); } #include "../simple_.h" #include "../fwrap_.h" sprng2.0/SRC/sprng/Makefile100600 764 764 5574 6736173542 14660 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make sprng => Library for the Linear Congruential Generator # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. GENLIST = lfg lcg lcg64 cmrg mlfg pmlcg include $(SRCDIR)/make.$(PLAT) all : sprng timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/primes_32.o $(SRCDIR)/primes_64.o \ $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o \ $(SRCDIR)/checkid.o $(SRCDIR)/store.o sprng : (cd ..; $(MAKE) sprng_common) @for g in $(GENLIST) ; do \ (cd ../$$g; $(MAKE) ) ; \ done rm -f $(LIBDIR)/libsprng.a $(MAKE) $(LIBDIR)/libsprng.a $(LIBDIR)/libsprng.a : sprng.o \ $(SRCDIR)/lcg/lcg.o $(SRCDIR)/lfg/lfg.o \ $(SRCDIR)/lcg64/lcg64.o \ $(SRCDIR)/mlfg/mlfg.o $(SRCDIR)/cmrg/cmrg.o \ $(SRCDIR)/pmlcg/pmlcg.o \ $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/libsprng.a sprng.o \ $(SRCDIR)/lcg/lcg.o $(SRCDIR)/lfg/lfg.o \ $(SRCDIR)/lcg64/lcg64.o \ $(SRCDIR)/mlfg/mlfg.o $(SRCDIR)/cmrg/cmrg.o \ $(SRCDIR)/pmlcg/pmlcg.o \ $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/libsprng.a sprng.o : $(SRCDIR)/interface.h sprng.c $(SRCDIR)/memory.h \ $(SRCDIR)/multiply.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) sprng.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=sprng) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=sprng) #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F sprng2.0/SRC/sprng/READMEver2.CHANGES100600 764 764 647 6736173542 15722 0ustar chwangchwang3 June 1999: Chris S. In Makefile, line 'all' commented with # checksprng and timesprng. ------------------------------------------------------------------------------- 7 June 1999: Chris S. In Makefile, removed the line with 'cp' from 'checksprng' section. No file 'sprng.data'. There are such files for each generator individually. -------------------------------------------------------------------------------- sprng2.0/SRC/lcg/ 40700 764 764 0 7034410053 12501 5ustar chwangchwangsprng2.0/SRC/lcg/Makefile100600 764 764 1545 6736173542 14266 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => lcg.o object # make lcg.o => lcg.o object # # Object files created during the compilation process can be deleted finally # by typing # make clean # make realclean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lcg.o lcg.o : $(SRCDIR)/interface.h lcg.c lcg.h $(SRCDIR)/memory.h \ $(SRCDIR)/primes_32.h $(SRCDIR)/multiply.h \ $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) lcg.c -I$(SRCDIR) clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out sprng2.0/SRC/lcg/lcg.c100600 764 764 54055 6736173542 13563 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* Parallel 48 bit Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 13 April 1998 */ #include #include #include #include "memory.h" #include "primes_32.h" #include "interface.h" #include "lcg.h" #include #define NDEBUG #include #include "store.h" #define init_rng lcg_init_rng #define get_rn_int lcg_get_rn_int #define get_rn_flt lcg_get_rn_flt #define get_rn_dbl lcg_get_rn_dbl #define spawn_rng lcg_spawn_rng #define get_seed_rng lcg_get_seed_rng #define free_rng lcg_free_rng #define print_rng lcg_print_rng #define pack_rng lcg_pack_rng #define unpack_rng lcg_unpack_rng #define MAX_STREAMS lcg_MAX_STREAMS #define NGENS lcg_NGENS #define VERSION "00" #define GENTYPE VERSION "48 bit Linear Congruential Generator with Prime Addend" #if LONG_MAX > 2147483647L /* 32 bit integer */ #if LONG_MAX > 35184372088831L /* 46 bit integer */ #if LONG_MAX >= 9223372036854775807L /* 64 bit integer */ #define LONG_SPRNG #define LONG64 long #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #define INIT_SEED 0x2bc68cfe166dL #define MSB_SET 0x3ff0000000000000L #define LSB48 0xffffffffffffL #define AN1 0xdadf0ac00001L #define AN2 0xfefd7a400001L #define AN3 0x6417b5c00001L #define AN4 0xcf9f72c00001L #define AN5 0xbdf07b400001L #define AN6 0xf33747c00001L #define AN7 0xcbe632c00001L #define PMULT1 0xa42c22700000L #define PMULT2 0xfa858cb00000L #define PMULT3 0xd0c4ef00000L #define PMULT4 0xc3cc8e300000L #define PMULT5 0x11bdbe700000L #define PMULT6 0xb0f0e9f00000L #define PMULT7 0x6407de700000L #define MULT1 0x2875a2e7b175L /* 44485709377909 */ #define MULT2 0x5deece66dL /* 1575931494 */ #define MULT3 0x3eac44605265L /* 68909602460261 */ #define MULT4 0x275b38eb4bbdL /* 4327250451645 */ #define MULT5 0x1ee1429cc9f5L /* 33952834046453 */ #define MULT6 0x739a9cb08605L /* 127107890972165 */ #define MULT7 0x3228d7cc25f5L /* 55151000561141 */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #define INIT_SEED 0x2bc68cfe166dLL #define MSB_SET 0x3ff0000000000000LL #define LSB48 0xffffffffffffLL #define AN1 0xdadf0ac00001LL #define AN2 0xfefd7a400001LL #define AN3 0x6417b5c00001LL #define AN4 0xcf9f72c00001LL #define AN5 0xbdf07b400001LL #define AN6 0xf33747c00001LL #define AN7 0xcbe632c00001LL #define PMULT1 0xa42c22700000LL #define PMULT2 0xfa858cb00000LL #define PMULT3 0xd0c4ef00000LL #define PMULT4 0x11bdbe700000LL #define PMULT5 0xc3cc8e300000LL #define PMULT6 0xb0f0e9f00000LL #define PMULT7 0x6407de700000LL #define MULT1 0x2875a2e7b175LL #define MULT2 0x5deece66dLL #define MULT3 0x3eac44605265LL #define MULT4 0x1ee1429cc9f5LL #define MULT5 0x275b38eb4bbdLL #define MULT6 0x739a9cb08605LL #define MULT7 0x3228d7cc25f5LL #endif #define TWO_M24 5.96046447753906234e-8 #define TWO_M48 3.5527136788005008323e-15 #include "multiply.h" #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) #define LCGRUNUP 29 int MAX_STREAMS = 1<<19; #ifndef TOOMANY #define TOOMANY "generator has branched maximum number of times;\nindependence of streams cannot be guranteed\n" #endif #ifdef LONG64 struct rngen { int rng_type; unsigned LONG64 seed; int init_seed; int prime; int prime_position; int prime_next; char *gentype; int parameter; unsigned LONG64 multiplier; }; unsigned LONG64 mults[] = {MULT1,MULT2,MULT3,MULT4,MULT5,MULT6,MULT7}; unsigned LONG64 multiplier=0; #else struct rngen { int rng_type; int seed[2]; int init_seed; int prime; int prime_position; int prime_next; char *gentype; int parameter; int *multiplier; }; int mults[][4] = {{0x175,0xe7b,0x5a2,0x287},{0x66d,0xece,0x5de,0x000}, {0x265,0x605,0xc44,0x3ea},{0x9f5,0x9cc,0x142,0x1ee}, {0xbbd,0xeb4,0xb38,0x275},{0x605,0xb08,0xa9c,0x739}, {0x5f5,0xcc2,0x8d7,0x322}}; int *multiplier=NULL; #endif #define NPARAMS 7 int NGENS=0; void plus ANSI_ARGS((int *a, int *b, int *c)); void mult ANSI_ARGS((int *a, int *b, int *c, int size)); void advance_seed ANSI_ARGS((struct rngen *gen)); double get_rn_dbl ANSI_ARGS((int *gen)); #ifdef __STDC__ int bit_reverse(int n) #else int bit_reverse(n) int n; #endif { int i=31, rev=0; for(i=30; i>=0; i--) { rev |= (n&1)<>= 1; } return rev; } #ifdef __STDC__ void errprint(char *level, char *routine, char *error) #else void errprint(level, routine, error) char *level,*routine,*error; #endif { #ifdef CRAY #pragma _CRI guard 63 #endif fprintf(stderr,"%s from %s: %s\n",level,routine,error); #ifdef CRAY #pragma _CRI endguard 63 #endif } #ifdef __STDC__ int strxncmp(char *s1, char *s2, int n) #else int strxncmp(s1, s2, n) char *s1, *s2; int n; #endif { int i; for(i=0; i= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { errprint("ERROR","init_rng","gennum out of range. "); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (mult < 0 || mult >= NPARAMS) { errprint("WARNING","init_rng","multiplier not valid. Using Default param"); mult = 0; } #ifdef LONG64 if(multiplier == 0) multiplier = mults[mult]; /* else if(multiplier != mults[mult]) fprintf(stderr,"WARNING: init_rng_d: Proposed multiplier does not agree with current multiplier.\n\t Independence of streams is not guaranteed\n");*/ #else if(multiplier == NULL) multiplier = mults[mult]; /*else if(strxncmp((char *) multiplier,(char *) mults[mult],4*sizeof(int)) != 0) fprintf(stderr,"WARNING: init_rng_d: Proposed multiplier does not agree with current multiplier.\n\t Independence of streams is not guaranteed\n");*/ #endif genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) return NULL; genptr->rng_type = rng_type; genptr->gentype = GENTYPE; genptr->init_seed = seed; getprime_32(1, &(genptr->prime), gennum); genptr->prime_position = gennum; genptr->prime_next = total_gen; genptr->parameter = mult; #ifdef LONG64 genptr->seed = INIT_SEED; /* initialize generator */ genptr->seed ^= ((unsigned LONG64) seed)<<16; genptr->multiplier = mults[mult]; if (genptr->prime == 0) genptr->seed |= 1; #else genptr->seed[1] = 16651885^((seed<<16)&(0xff0000));/* initialize generator */ genptr->seed[0] = 2868876^((seed>>8)&(0xffffff)); genptr->multiplier = mults[mult]; if (genptr->prime == 0) genptr->seed[1] |= 1; #endif for(i=0; iprime_position); i++) get_rn_dbl( (int *) genptr); NGENS++; return (int *) genptr; } /* On machines with 32 bit integers, */ /* the Cray's 48 bit integer math is duplicated by breaking the problem into*/ /* steps. The algorithm is linear congruential. M is the multiplier and S*/ /* is the current seed. The 31 High order bits out of the 48 bits are returned*/ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 multiply(genptr); return ((unsigned LONG64) genptr->seed) >> 17; #else int s[4], res[4]; multiply(genptr,genptr->multiplier,s,res); return (genptr->seed[0]<<7) | ((unsigned int) genptr->seed[1] >> 17) ; #endif } #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { return (float) get_rn_dbl(igenptr); } /* get_rn_float */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 double temp[1]; unsigned LONG64 *ltemp; temp[0] = 0.0; multiply(genptr); /* Add defined(O2K) || defined(SGI) if optimization level is -O2 or lower */ #if defined(CONVEX) || defined(GENERIC) ltemp = (unsigned LONG64 *) temp; *ltemp = (genptr->seed<<4) | MSB_SET; return temp[0] - (double) 1.0; #else return genptr->seed*3.5527136788005008e-15; #endif #else static double equiv[1]; #define iran ((int *)equiv) #define ran (equiv) int expo, s[4], res[4]; multiply(genptr,genptr->multiplier,s,res); #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) expo = 1072693248; /*IEEE mantissa is 52 bits. We have only 48 bits, so we shift our result 4*/ /* bits left. 32-(24+4) = 4 bits are still blank in the lower word, so we*/ /* grab the low 4 bits of seedhi to fill these. */ iran[LSB] = genptr->seed[1] << 4 | genptr->seed[0] << 28; /* place the remaining (24-4)=20 bits of seedhi in bits 20-0 of ran. */ /* Expo occupies bits 30-20. Bit 31 (sign) is always zero. */ iran[MSB] = expo | genptr->seed[0] >> 4; return (*ran - (double) 1.0); #else return genptr->seed[0]*TWO_M24 + genptr->seed[1]*TWO_M48; #endif #undef ran #undef iran #endif } /* get_rn_dbl */ /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* check if nspawned is valid */ { nspawned = 1; errprint("WARNING","spawn_rng","nspawned <= 0. Default value of 1 used for nspawned"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) { *newgens = NULL; return 0; } for(i=0; iinit_seed = tempptr->init_seed; genptr[i]->prime_position = tempptr->prime_position + tempptr->prime_next*(i+1); if(genptr[i]->prime_position > MAXPRIMEOFFSET) { fprintf(stderr,"WARNING - spawn_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", genptr[i]->prime_position, MAX_STREAMS); genptr[i]->prime_position %= MAXPRIMEOFFSET; } genptr[i]->prime_next = (nspawned+1)*tempptr->prime_next; getprime_32(1, &(genptr[i]->prime), genptr[i]->prime_position); genptr[i]->multiplier = tempptr->multiplier; genptr[i]->parameter = tempptr->parameter; genptr[i]->gentype = tempptr->gentype; genptr[i]->rng_type = tempptr->rng_type; #ifdef LONG64 genptr[i]->seed = INIT_SEED; /* initialize generator */ genptr[i]->seed ^= ((unsigned LONG64) tempptr->init_seed)<<16; if (genptr[i]->prime == 0) genptr[i]->seed |= 1; #else genptr[i]->seed[1] = 16651885^((tempptr->init_seed<<16)&(0xff0000)); genptr[i]->seed[0] = 2868876^((tempptr->init_seed>>8)&(0xffffff)); if (genptr[i]->prime == 0) genptr[i]->seed[1] |= 1; #endif if(genptr[i]->prime_position > MAXPRIMEOFFSET) advance_seed(genptr[i]); /* advance lcg 10^6 steps from initial seed */ for(j=0; jprime_position); j++) get_rn_dbl( (int *) genptr[i]); } tempptr->prime_next = (nspawned+1)*tempptr->prime_next; NGENS += nspawned; *newgens = (int **) genptr; if(checkid != 0) for(i=0; i>12; temp[i-1] &= 4095; } for(i=0; i<4 ; i++) result[i] = temp[i]; } /*multiply two 4 digit numbers in base 2^12 and return 'size' lowest order */ /* digits*/ #ifdef __STDC__ void mult(int *a, int *b, int *c, int size) #else void mult(a,b,c,size) int *a, *b, *c, size; #endif { int temp[8]; int i, j; for(i=0; i<8; i++) temp[i] = 0; for(i=0; i<4; i++) for(j=0; j<4; j++) temp[i+j] += a[i]*b[j]; for(i=1; i<8; i++) { temp[i] += temp[i-1]>>12; temp[i-1] &= 4095; } for(i=0; imultiplier == mults[i]) { found = 1; break; } if(found == 0) { fprintf(stderr,"WARNING: advance_seed: multiplier not acceptable.\n"); return ; } /* a^n, n = 10^6 and pmult = (a^n-1)/(a-1), n = 10^6 */ switch(i) { case 0 : an = AN1; pmult = PMULT1; break; case 1 : an = AN2; pmult = PMULT2; break; case 2 : an = AN3; pmult = PMULT3; break; case 3 : an = AN4; pmult = PMULT4; break; case 4 : an = AN5; pmult = PMULT5; break; case 5 : an = AN6; pmult = PMULT6; break; case 6 : an = AN7; pmult = PMULT7; break; default: fprintf(stderr,"WARNING: advance_seed parameters for multiplier %d not available\n", i); return; } gen->seed = gen->seed*an + pmult*gen->prime; gen->seed &= LSB48; #else int an[4], pmult[4], x0, x1, temp[4],temp2[4], i, found; for(i=0, found=0; imultiplier, (char *) (mults[i]), 4*sizeof(int)) == 0) { found = 1; break; } if(found == 0) { fprintf(stderr,"WARNING: advance_seed: multiplier not acceptable.\n"); return ; } /* a^n, n = 10^6 and pmult = (a^n-1)/(a-1), n = 10^6 */ switch(i) { case 0 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0xf0a; an[3] = 0xdad; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0xc22; pmult[3] = 0xa42; break; case 1 : an[0] = 0x001; an[1] = 0x400; an[2] = 0xd7a; an[3] = 0xfef; pmult[0] = 0x000; pmult[1] = 0xb00; pmult[2] = 0x58c; pmult[3] = 0xfa8; break; case 2 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x7b5; an[3] = 0x641; pmult[0] = 0x000; pmult[1] = 0xf00; pmult[2] = 0xc4e; pmult[3] = 0x0d0; break; case 3 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0xf72; an[3] = 0xcf9; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0xdbe; pmult[3] = 0x11b; break; case 4 : an[0] = 0x001; an[1] = 0x400; an[2] = 0x07b; an[3] = 0xbdf; pmult[0] = 0x000; pmult[1] = 0x300; pmult[2] = 0xc8e; pmult[3] = 0xc3c; break; case 5 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x747; an[3] = 0xf33; pmult[0] = 0x000; pmult[1] = 0xf00; pmult[2] = 0x0e9; pmult[3] = 0xb0f; break; case 6 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x632; an[3] = 0xcbe; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0x7de; pmult[3] = 0x640; break; default: fprintf(stderr,"WARNING: advance_seed parameters for multiplier %d not available\n", i); return; } x0 = gen->seed[0]; x1 = gen->seed[1]; temp[0] = x1&4095; temp[1] = (x1>>12)&4095; temp[2] = x0&4095; /* seed */ temp[3] = (x0>>12)&4095; temp2[0] = gen->prime%(1<<12); temp2[1] = (gen->prime>>12)%(1<<12); temp2[2] = (gen->prime>>24)%(1<<12); temp2[3] = 0; /* prime */ mult(temp,an,temp,4); mult(temp2,pmult,temp2,4); plus(temp,temp2,temp); gen->seed[1] = (temp[1]<<12) + temp[0]; gen->seed[0] = (temp[3]<<12) + temp[2]; #endif } #ifdef __STDC__ int free_rng(int *genptr) #else int free_rng(genptr) int *genptr; #endif { struct rngen *q; q = (struct rngen *) genptr; free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; unsigned int size, m[2], i; struct rngen *q; q = (struct rngen *) genptr; size = 6*4 /*sizeof(int)*/ + 2*8/*sizeof(unsigned LONG64)*/ + strlen(q->gentype)+1; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ initp = p = (unsigned char *) mymalloc(size); if(p == NULL) { *buffer = NULL; return 0; } p += store_int(q->rng_type,4,p); strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; #ifdef LONG64 p += store_long64(q->seed,8,p); p += store_int(q->init_seed,4,p); p += store_int(q->prime,4,p); p += store_int(q->prime_position,4,p); p += store_int(q->prime_next,4,p); p += store_int(q->parameter,4,p); p += store_long64(q->multiplier,8,p); #else m[0] = q->seed[0]>>8;m[1] = q->seed[0]<<24 | q->seed[1]; p += store_intarray(m,2,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->prime,4,p); p += store_int(q->prime_position,4,p); p += store_int(q->prime_next,4,p); p += store_int(q->parameter,4,p); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ m[1] = q->multiplier[2]&0xff; m[1] <<= 24; m[1] |= q->multiplier[1]<<12; m[1] |= q->multiplier[0]; m[0] = (q->multiplier[3]<<4) | (q->multiplier[2]>>8); p += store_intarray(m,2,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned char *p; unsigned int m[4], m2[2], i; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; p += load_int(p,4,(unsigned int *)&q->rng_type); if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; #ifdef LONG64 p += load_long64(p,8,&q->seed); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->prime); p += load_int(p,4,(unsigned int *)&q->prime_position); p += load_int(p,4,(unsigned int *)&q->prime_next); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_long64(p,8,&q->multiplier); #else p += load_intarray(p,2,4,m2); q->seed[1] = m2[1]&0xffffff; q->seed[0] = m2[1]>>24 | m2[0]<<8; p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->prime); p += load_int(p,4,(unsigned int *)&q->prime_position); p += load_int(p,4,(unsigned int *)&q->prime_next); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_intarray(p,2,4,m2); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ m[0] = m2[1]&0xfff; m[1] = (m2[1]&0xfff000)>>12; m[2] = (m2[1]&0xff000000)>>24 | (m2[0]&0xf)<<8; m[3] = (m2[0]&0xfff0)>>4; #endif if(q->parameter < 0 || q->parameter >= NPARAMS) { fprintf(stderr,"ERROR: Unpacked parameters not acceptable.\n"); free(q); return NULL; } q->multiplier = mults[q->parameter]; NGENS++; return (int *) q; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->prime_position, gen->parameter); return 1; } sprng2.0/SRC/lcg/lcg.data100700 764 764 51624 6736173542 14252 0ustar chwangchwang1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 1236934759 451777959 1414458583 587582881 1408116822 780292690 902570703 732313726 2001226958 222298815 1540134799 2015917594 1600199985 507514722 1804287800 1960913714 34790911 577208861 1893068035 1952168852 377654882 1126073337 481125185 794885381 1057584933 1447166915 803008961 1060264974 1358079232 1833783170 1563489420 1394863267 1993347153 1549093588 705750285 1452064946 497914919 879021094 176230287 2019278470 1643919033 989432528 726753057 1784680729 941008182 648734732 149033431 895429687 1763190009 306691284 1523353454 474431116 80321559 282474137 2135276617 168545164 335852373 79211741 2023318233 1927481151 494629751 732707247 973598043 210595305 1286807541 1531035395 1073691134 1710092694 1569943818 2058871535 1148515167 710932353 361738023 916221120 1601902448 1892237154 1334153672 2033536248 341472952 591441556 341189536 1799715368 83123702 371710242 1297567281 1479519399 1380187170 1789133488 1449725627 94430000 770799311 811348292 488093324 179206743 1550057198 1462029298 2082797752 1737457897 1090361327 1320034147 1282664228 716100384 428516163 1984037443 84435197 2023974595 1859166783 956150664 217109641 1669730842 216727646 2107632797 1189713496 2113927116 1999247328 2144862571 1421045716 69902745 1523581649 702662725 785606458 1590866928 783297128 1073931185 236987107 633341039 297920200 1712384016 1115793917 1580318009 142860579 1969534765 721069208 1889736494 318589503 1432767392 1976999198 722277645 1872451411 1645022752 2114921758 2081655141 1618794316 1277931174 1208098691 314544500 1767051888 721640314 1355665956 175607521 1714849371 1799950367 1081327798 581732946 1275555944 1566610969 1084338975 2115422443 126711916 1827910040 1276160296 423050918 1239887327 320394247 170646924 1342793613 1364814167 1070829164 663116399 776008147 697304175 1740234173 116130091 351830734 742701576 1356090115 1945323399 2000339157 1130782953 1514387812 1144998981 825011187 1252135619 1521916946 1199457556 2058891144 1006186898 438316560 1090430950 1195882174 1346018656 1029121503 64344477 1800367591 2032323686 303972101 157633570 719764145 1509283727 1031787387 2029008338 2037667144 2029514072 1295425268 390638676 843664457 379321621 553166343 1522891975 937106850 2130037904 230562620 252361562 670756421 290720269 1634532338 1427915831 768592584 2101365931 545980203 672106458 1465629406 568218919 731533367 283272385 1724862893 891371774 443707196 1239363712 1019561229 770490860 253587873 1256878638 378500512 1129958354 1197653080 628961341 1139323338 39422711 638792200 742855592 1149394319 708236456 524267287 1423835784 887294281 173909053 312577427 1759327235 1640161605 1824102006 361089789 1355030432 2053423165 239580485 2069776885 1093011960 808881837 1938114024 228166079 1470976200 1227454742 1788128112 778571186 1618606180 2039637775 1034080160 646418046 785996937 1658649924 1537926194 1172762457 832390797 1087329360 1284222582 1843056904 2027096819 879390324 165211991 260668617 665301085 1484478004 1280104888 1510850843 860127708 1771220943 1956178238 326318701 566218404 473196444 770886507 838558115 1212152095 1032259392 863595809 1710332546 2088982362 1937382346 1137680007 1066753017 2105919197 1378154156 1047338826 1915513933 341128666 1071838105 1821132094 1493437219 1857078207 760237369 245485407 585548647 1881832232 1755474631 2069223221 1815445273 630327090 633893002 1818243735 960845556 80684587 1496104237 1356330953 1304459259 1315240873 112582142 634729985 1081039076 2096874483 10839043 34952267 350247261 1944373982 51176438 906356932 1606337850 854910964 732252959 2005875267 1261376893 564929040 935498510 311361113 1410672963 214793288 1908784692 546129328 664932489 1101549125 1974527840 1781590226 331997916 885320177 1681722900 733357894 1898904540 63484041 1508321733 361335574 260495278 865736980 851045872 797606575 2120067391 494111278 1560512789 1455194914 625517683 1124878654 394954901 1253237962 334222890 816390410 2014505829 1143671881 831996976 1126351266 201084334 91345390 629665538 824064955 1196685126 1572632948 904671098 355752280 163673862 585821223 814205529 670496229 823809289 1402488675 1243280307 1007146912 1980319172 441463159 291527731 1160440945 149891071 1888667369 24199755 12987420 1054341039 493244950 1367564605 1073463760 1827389362 1777164083 321091586 14122777 856388713 1664163506 2082996757 507968054 892043567 158033922 1887083554 1898191303 827962038 1660489392 224620167 349974495 991037502 1042062316 35182534 261236347 1920325044 1161485928 131494092 1365286733 164006 463348382 143222040 737757427 1852375585 225592684 706017482 547949447 1359296363 787690268 321975948 1713704594 755755930 1628488897 499949401 181598811 1857578000 1400262143 731092520 920598175 896408023 0.666551 0.621556 0.318551 0.990514 0.701296 0.388824 0.174647 0.561276 0.679550 0.804865 0.290286 0.234919 0.733417 0.950939 0.146278 0.202764 0.097724 0.157808 0.102785 0.627753 0.197040 0.000145 0.857481 0.848108 0.033915 0.181840 0.593291 0.535873 0.628871 0.059161 0.759953 0.048481 0.176654 0.104791 0.796072 0.893795 0.412338 0.254155 0.922159 0.795978 0.209243 0.295208 0.556261 0.932856 0.333062 0.966098 0.823473 0.725102 0.868571 0.867195 0.465907 0.631756 0.822799 0.033161 0.893151 0.361405 0.638345 0.858702 0.843227 0.188191 0.559840 0.042883 0.614248 0.689145 0.363362 0.279327 0.057079 0.544694 0.651493 0.244032 0.734244 0.496368 0.644735 0.143001 0.110992 0.391442 0.963131 0.005584 0.377095 0.298604 0.730455 0.326548 0.044662 0.114689 0.278399 0.553901 0.635602 0.141356 0.751410 0.726913 0.385590 0.861625 0.876559 0.929197 0.538395 0.236879 0.569985 0.727966 0.589624 0.250878 0.795546 0.718574 0.132561 0.202238 0.206618 0.432099 0.146460 0.272503 0.513203 0.145356 0.800807 0.633411 0.789137 0.462441 0.794714 0.592210 0.024246 0.523191 0.841300 0.874245 0.230512 0.398352 0.090970 0.801744 0.316912 0.918319 0.778690 0.119322 0.382580 0.069908 0.408294 0.140701 0.060834 0.104651 0.846553 0.426335 0.236591 0.006483 0.301963 0.854731 0.906569 0.543726 0.584392 0.806334 0.845897 0.310067 0.073761 0.650985 0.167316 0.175353 0.526515 0.309234 0.031842 0.105822 0.290966 0.663787 0.804727 0.264695 0.525563 0.927246 0.600920 0.510464 0.972213 0.951927 0.573338 0.417766 0.350099 0.200418 0.749492 0.753380 0.139736 0.813624 0.892006 0.149762 0.823647 0.626248 0.561867 0.685994 0.456029 0.126086 0.505866 0.069377 0.931702 0.349338 0.018264 0.421707 0.712783 0.493768 0.278668 0.827205 0.013707 0.137367 0.721199 0.261861 0.021006 0.222807 0.513007 0.467529 0.378632 0.336147 0.622054 0.382460 0.663535 0.028765 0.034777 0.720290 0.435748 0.339312 0.384093 0.982022 0.714716 0.930730 0.898356 0.073698 0.716358 0.107234 0.653931 0.722728 0.706804 0.986934 0.970339 0.177955 0.977677 0.425000 0.430444 0.335147 0.828738 0.385487 0.832290 0.246726 0.926731 0.900823 0.918368 0.201140 0.380193 0.918451 0.406846 0.645483 0.980080 0.174054 0.733303 0.580131 0.472418 0.038371 0.456603 0.784556 0.884344 0.425932 0.085609 0.900784 0.267128 0.523557 0.631610 0.769671 0.962950 0.066549 0.612647 0.203182 0.375820 0.261770 0.048896 0.003981 0.226176 0.407973 0.852077 0.385974 0.404140 0.801655 0.476313 0.083050 0.584536 0.226282 0.953404 0.388520 0.019517 0.117125 0.063135 0.877960 0.939680 0.364269 0.110731 0.819894 0.345077 0.482081 0.211162 0.661675 0.992463 0.931856 0.366621 0.834724 0.938883 0.461217 0.612760 0.500012 0.204477 0.222773 0.885281 0.250144 0.104894 0.787346 0.696069 0.901012 0.477286 0.183851 0.522696 0.998744 0.800541 0.316546 0.712783 0.895237 0.772802 0.147264 0.532159 0.019233 0.955670 0.329601 0.480250 0.304467 0.088619 0.566375 0.535570 0.599619 0.598620 0.181592 0.347245 0.947481 0.923867 0.682318 0.464164 0.007035 0.797525 0.691142 0.291664 0.929076 0.624017 0.391263 0.026797 0.963940 0.068488 0.706741 0.178478 0.962183 0.777294 0.081306 0.399673 0.162254 0.577071 0.989695 0.107682 0.882894 0.150752 0.863209 0.248379 0.545067 0.165598 0.911650 0.464545 0.134439 0.500770 0.430737 0.891340 0.529912 0.976080 0.479310 0.748403 0.018606 0.970637 0.754123 0.393298 0.698154 0.207126 0.869837 0.501276 0.941800 0.697089 0.934191 0.638173 0.731912 0.342999 0.987594 0.684023 0.717910 0.688073 0.824974 0.972624 0.542998 0.024040 0.536274 0.655320 0.231360 0.005729 0.469151 0.834913 0.607687 0.589985 0.740112 0.497654 0.411177 0.791450 0.983426 0.888130 0.496752 0.221258 0.143777 0.804593 0.520631 0.704130 0.280000 0.562603 0.471981 0.528112 0.872698 0.195013 0.226940 0.908079 0.915519 0.579299 0.808531 0.393571 0.343948 0.752546 0.781775 0.843811 0.420469 0.974265 0.196782 0.863406 0.682490 0.302376 0.915736 0.642800 0.679701 0.373649 0.177935 0.894951 0.018478 0.932663 0.728689 0.206511 0.308822 0.779592 0.074456 0.826358 0.418439 0.444205 0.942827 0.660428 0.501480 0.919263 0.289535 0.508941 0.436578 0.469577 0.376498 0.115477 0.509041 0.282552 0.169082 0.157588 0.162101 0.841866 0.394345 0.422185 0.756983 0.328445 0.845339 0.117744 0.184318 0.413222 0.392978 0.887082 0.601323 0.975818 0.613061 0.922293 0.099478 0.924820 0.091377 0.736288 0.883689 0.411405 0.427276 0.217707 0.041660 0.712436 0.511440 0.457918 0.755139 0.445928 0.055986 0.376158 0.234689 0.995726 0.056529 0.032836 0.706645 0.128866 0.271734 0.878815 0.732971 0.24439589714294 0.02460828192258 0.47251767648351 0.36815388833876 0.09308219838651 0.22284275471320 0.85536976547220 0.34625905696713 0.64082497994713 0.22750141684434 0.02315561673536 0.41841392396106 0.14252785684421 0.78816422657355 0.49589046230880 0.22678216479177 0.96631945030455 0.12902456323107 0.86686771845178 0.88429089697886 0.91948051212101 0.28854740281495 0.41339807612692 0.73680480678233 0.32704805752087 0.06220489033666 0.15376963017926 0.20106265208404 0.09225896114891 0.40381456412025 0.42912267552565 0.01059168901982 0.00581819415905 0.63950631123324 0.73286514119486 0.65420433335206 0.39011063895309 0.52586107048266 0.67719722949445 0.07689483803073 0.37722489930667 0.42994578744719 0.01513386542226 0.22845288338175 0.97895241497947 0.06658860233467 0.38160322818828 0.51648167338262 0.25632017892084 0.34319415355358 0.99887611986697 0.45146134803813 0.11989012935156 0.43371464526829 0.14548641326100 0.39387019545307 0.26481753582891 0.93321639336983 0.61530449952355 0.53712721531383 0.78193410538451 0.48808736873719 0.11151571345993 0.62333598563756 0.79396378946299 0.01271723688907 0.21155133820827 0.00770245432492 0.89107006218471 0.30297098663145 0.90176316868470 0.00640415376198 0.91957745290659 0.55461888459388 0.17869093227009 0.00406635795645 0.18983703866293 0.95885262511542 0.82663731321372 0.91143780496533 0.18237012233132 0.84800860329099 0.45405509163323 0.68006573017371 0.25480612778914 0.92665766061951 0.46470717630111 0.95558303581827 0.48553452140186 0.27345487510769 0.88005027012438 0.41960039651451 0.07384600741717 0.31784642837625 0.35880874584750 0.09522890694310 0.48170003072735 0.86630171879036 0.18586421453774 0.11415545377830 0.72080344150736 0.91170113939158 0.24863042834757 0.23328927690089 0.72272371993728 0.04651173994602 0.67387975939094 0.39375511242764 0.08221911307517 0.40819778124166 0.96602872581763 0.81001181961132 0.52840208745997 0.50983940436722 0.53929308182502 0.51583642271780 0.28894133769414 0.79919371558615 0.85663003790628 0.85866798507077 0.99405590058188 0.29757696608118 0.12936341860158 0.58431461306987 0.48499239388106 0.10124762278828 0.35982918489133 0.67837610063448 0.80205771586580 0.49082641926358 0.35790093465022 0.89513520670326 0.82678439419162 0.95022438153255 0.17909993476606 0.60345824762827 0.52873884750596 0.81021178065782 0.93102912011941 0.48488152004308 0.14777380835467 0.72092340883064 0.30558750511795 0.33212998555543 0.94572973869842 0.64315694664017 0.01193778038385 0.39552958391798 0.54688593727313 0.90430492330607 0.02025769800300 0.91697043366451 0.40365487860458 0.66831530657162 0.45527237096159 0.76121596606425 0.26353282421975 0.45047453214830 0.89343201351885 0.81551865714353 0.75622059498622 0.30044823157695 0.77598511679384 0.57190741095159 0.58779027705582 0.66742247962695 0.72534277527969 0.35149074270634 0.43410124008989 0.63901049539163 0.58290304284080 0.87413465044637 0.22129186280092 0.05359983255660 0.32739698849615 0.54551038583658 0.21064647485909 0.46991162141731 0.30394773044646 0.23047617632787 0.45263992338197 0.13674981560301 0.03114233886335 0.53889424945514 0.91529954405212 0.14238308762634 0.65787130142557 0.47725120317319 0.74062584888942 0.99199844682120 0.83048342796013 0.75493179127644 0.84573362234383 0.82159225845609 0.48655281932594 0.19390448762639 0.80929403216912 0.61904456131610 0.11250102836262 0.51924769461936 0.90608049898941 0.70260485033361 0.25232898481918 0.82783910756763 0.15087611607755 0.77137524841642 0.01328182917540 0.09423347493841 0.55624305612830 0.26250867497131 0.72651268967287 0.10497674219775 0.90586433222892 0.14976866525226 0.54747083018312 0.97218327184071 0.49615018330633 0.52497234207425 0.14818268125752 0.19909843155404 0.44398491756193 0.09793212712726 0.80381323032594 0.81766727385441 0.62892995829432 0.61522354059965 0.41650727704127 0.13204223147276 0.60557478255468 0.06995931257567 0.67375734370179 0.65182466071427 0.24834411178114 0.59339245520937 0.69529475602551 0.03210761751410 0.47985679241545 0.17737635849523 0.78624476379866 0.72965638542987 0.57844398101938 0.67037681205570 0.15514274157454 0.18953992886518 0.79485121007779 0.06788255824629 0.55911868415992 0.07604655590221 0.75727534500186 0.43284598554152 0.45648857759242 0.31574158073659 0.47315303732798 0.23847731310788 0.54613597118594 0.81713961335432 0.10157672124697 0.63271253519494 0.98604238750006 0.03688021126837 0.66854717789276 0.64250092498132 0.55837327227501 0.27084894234132 0.01578289177104 0.43136047929954 0.79951419296581 0.43283736646078 0.64042553381587 0.11320275573207 0.36987213000679 0.24367098460586 0.21626261332582 0.73013054942046 0.69522615684253 0.36896476414561 0.14621233395108 0.69578621606034 0.17967276057131 0.12062736654427 0.03058665447929 0.36602360746718 0.84613070226434 0.46088861551369 0.63649618090018 0.45546598429111 0.39594084214678 0.13105598754926 0.40173948961777 0.50529434443350 0.95193494735617 0.76162592021413 0.42330949022384 0.71090879297428 0.73269634642914 0.62512045399466 0.87855516744759 0.52756831745546 0.93846158250924 0.66555008854101 0.15898818325361 0.93051505868545 0.06570813401674 0.30430568112788 0.30627505907441 0.05932631932765 0.82805600467555 0.08526668172303 0.41128668233306 0.72333456791806 0.98142272185296 0.11381592263574 0.14499237823827 0.58806101211877 0.53277921063458 0.67523349883186 0.84991544481626 0.45699536945734 0.47135031843020 0.92568992514926 0.33886555378254 0.26712169402682 0.98130563868524 0.74998267632478 0.57041045965177 0.04186096112702 0.77413590995817 0.21859634245299 0.43534972193487 0.10622400611475 0.18087483571626 0.57507590373718 0.37323631788009 0.33371679629904 0.94859786819961 0.69367098166460 0.21131279347830 0.73381232306704 0.53732551410815 0.89544729654060 0.38926665587290 0.42662307305714 0.37332123817671 0.15540589115033 0.40176973839061 0.31492350960792 0.00917025041978 0.90856190468196 0.29727795764212 0.83315670640492 0.01194755145121 0.03249873744183 0.24708591803008 0.01191166172188 0.45584876531274 0.38884127281952 0.51483489004686 0.18110132140889 0.95810769818134 0.61571935592018 0.47586748244572 0.58535438931699 0.85572741166673 0.32508090577125 0.16093753222647 0.59373004266724 0.47999907865880 0.44824879753255 0.02337403789019 0.34867213447174 0.91609218533882 0.24410793019124 0.28704304808785 0.36516179299495 0.52191294252875 0.31859463130722 0.24915597711345 0.71245295690602 0.97531226052005 0.36170068098977 0.85256653817500 0.89285775171573 0.38857251139614 0.97708469993264 0.66273605251527 0.98318615581681 0.00653073914220 0.82581537851266 0.18170799474903 0.08616056045166 0.13794716802132 0.02408996316591 0.19252195973485 0.91606903471927 0.97266899128804 0.59743849999547 0.18044447140683 0.63286480180086 0.03926268280815 0.40152550133668 0.84075388675544 0.76276205343381 0.75421065105810 0.95090688630828 0.41576876606631 0.57514321379413 0.31523213578773 0.55882718871174 0.15615817110233 0.20242854885981 0.37416101984710 0.16831106250664 0.26374810364656 0.62173904052089 0.28108687980085 0.66049998398610 0.32609539521221 0.59810614367651 0.27875731648323 0.75162068820422 0.71871849227095 0.50517085681524 0.91779157808227 0.15448222266626 0.84135843755195 0.48041789961189 0.99793490118325 0.38144449128294 0.12292261432124 0.48078214239269 0.87288203695004 0.62896873361105 0.61939318456515 0.02684220941992 0.60623428777672 0.91286047595608 0.02414130117096 0.75880381832824 0.86966924180287 0.14998403949589 0.18558179602439 0.57722135920704 0.03276344615237 0.91652563370008 0.59836082792607 0.26118389626630 0.52410769212877 0.19289533846605 0.00734560386732 0.90489963024831 0.42800958437972 0.64729782307055 0.58526045200112 0.60177432825325 0.61843081872799 0.85820340174438 0.35219191209484 0.04784274693395 0.48572428745920 0.85287592191827 0.47629680685891 0.60155108258318 0.96171095385352 0.29534795945940 0.09844615280937 0.99530141498692 0.83978557715376 0.52148779302067 0.76840394974191 0.96987940854738 0.07980601247211 0.14791258445910 0.76627804097143 0.42304263159206 0.40887014485512 0.51042904164445 0.45082004972348 0.00842219047832 0.12070973034911 0.37951252137630 0.65674755795251 0.97388338657751 0.84594869693792 0.99627898105499 0.52829388990703 0.32612522897868 0.53612699216009 0.04179734571106 0.38796378146259 0.29022231128897 0.06504703955463 0.84289365948820 0.30091654510132 0.59179922472601 0.30615047033245 0.40439877519579 0.30006676693014 0.12147576929751 0.16439521732469 0.29479923960034 132160837 1590045634 572998684 535426631 2035021558 1321766978 841786435 1834117734 1601058066 936071460 1539773974 229258807 719095824 1544468387 1804878971 34684357 1783446270 1532162905 1925035341 8079570 1312817337 528383937 1468141516 163740485 1469305353 589471769 1985412317 821821692 1787012760 2021049256 1588435774 460861185 2110206672 977863766 9986444 1507965978 1538438290 1005146555 1053829161 646714044 1476966607 1839086198 1388246287 1284447835 1369613320 2132649460 1747583856 1513051679 1979754401 556871827 1739678026 1688413939 1394060829 1702706210 142761158 1256931065 674474044 867378882 573234061 1384750171 1516143856 615152170 559322603 1321967997 2119171639 642925896 960761817 662032530 1180189916 562246214 231606765 223096967 215971078 282348262 1994327067 59817310 1423285692 470793544 401034344 142714327 1672152378 1059214094 1079702382 1099135114 687748138 1472179416 724820168 1901576788 637350339 1322693674 987046235 2028404777 39926461 146085297 1448569219 1763518026 1372593455 1086191068 689677594 864181970 793280037 1582421121 1303331892 1733881858 1601374588 1976647084 1737338874 393027171 1870227560 546837173 479531248 1722597854 1454092851 1267955816 647201799 206573599 1725749666 1759629210 613583319 1638414161 793928791 1849232578 767774679 578103762 466603864 1720078141 1811066286 984276091 1949431478 1231554087 1244363951 1821758866 649655890 570724569 662114154 1775929942 193927618 1008593164 109752166 753183021 1114739033 1002407056 130426611 61017716 1354482251 152976560 1196588324 444776939 2040014839 2094704943 1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 2129106294 324246799 209545887 1393979611 1102645140 1149182893 1690984822 694903242 1122073028 343423450 1316159802 772506814 1997653610 2044311118 2110665040 1093392335 708209004 563020986 312610139 1608756074 2092806467 1662256380 67241153 919071422 759636339 697031486 689172620 722296326 434563154 1619655405 220131752 1586356401 618703430 571250324 2081180044 2057397612 1856455758 61177494 904511287 1264222733 2037090296 1107712199 1751548563 1346313567 586306227 1693907690 1259266103 1659418823 724222593 1292407299 sprng2.0/SRC/lcg/lcg.h100600 764 764 1434 6736173542 13541 0ustar chwangchwang #ifndef _lcg_h #define _lcg_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int lcg_get_rn_int ANSI_ARGS((int *igenptr)); float lcg_get_rn_flt ANSI_ARGS((int *igenptr)); double lcg_get_rn_dbl ANSI_ARGS((int *igenptr)); int *lcg_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int lcg_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int lcg_get_seed_rng ANSI_ARGS((int *genptr)); int lcg_free_rng ANSI_ARGS((int *genptr)); int lcg_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *lcg_unpack_rng ANSI_ARGS(( char *packed)); int lcg_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/lcg/READMEver2.CHANGES100644 764 764 260 6736173542 15335 0ustar chwangchwang7 June 1999; Chris S. Makefile: 1. in 'all ;' added 'checksprng' 2. added section 'checksprng'. ---------------------------------------------------------------------------- sprng2.0/SRC/lfg/ 40700 764 764 0 7034410053 12504 5ustar chwangchwangsprng2.0/SRC/lfg/Makefile100600 764 764 1506 6736173543 14267 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => lfg.o object # make lfg.o => lfg.o object # # Object files created during the compilation process can be deleted finally # by typing # make clean # make realclean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lfg.o lfg.o : $(SRCDIR)/interface.h lfg.c lfg.h $(SRCDIR)/multiply.h $(SRCDIR)/memory.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) lfg.c -I$(SRCDIR) clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out sprng2.0/SRC/lfg/lfg.c100600 764 764 75705 6736173543 13577 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* Parallel Modified Additive Lagged Fibonacci Generator */ /* */ /* Modified by: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Based on the Implementation by: */ /* Steven A. Cuccaro and Daniel V. Pryor, */ /* IDA/Center for Computing Sciences (CCS) */ /* E-Mail: cuccaro@super.org pryor@super.org */ /* */ /* Copyright 1996 September 3, United States Government as Represented */ /* by the Director, National Security Agency. All rights reserved. */ /* */ /* Disclaimer 1: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /* */ /* Disclaimer 2: CCS expressly disclaims any and all warranties, expressed */ /* or implied, concerning the enclosed software. This software was */ /* developed at CCS for use in internal research. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* CCS cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* This version has been modified to use two integer-based additive */ /* lagged-Fibonacci generators to produce integer, float and double */ /* values. The lagged-Fibonacci generators each have 31 bits of */ /* precision (after the bit fixed by the canonical form of the */ /* generator is removed), 31-bit values are generated by XORing */ /* the values after one has been shifted left one bit. The floating */ /* point value is formed by dividing the integer by 1.e+32 (the */ /* lsb's will be dropped from the mantissa to make room for the */ /* exponent), and two of these integer values in sequence are used */ /* to get the necessary precision for the double value. */ /* */ /* This method has the advantage that the generators pass fairly */ /* strict randomness tests, including the Birthday Spacings test */ /* that additive lagged-Fibonacci generators are well known to */ /* fail. The disadvantage is the additional time needed to do the */ /* division explicitly, which was avoided in previous versions. */ /* (As the division is by powers of 2, the user might well consider */ /* making machine-specific versions of this code to insert the bits */ /* into the appropriate places and avoid the problem entirely.) */ /*************************************************************************/ #include #include #include #include #include #define NDEBUG #include #include "interface.h" #include "lfg.h" #include "memory.h" #include "store.h" #define init_rng lfg_init_rng #define get_rn_int lfg_get_rn_int #define get_rn_flt lfg_get_rn_flt #define get_rn_dbl lfg_get_rn_dbl #define spawn_rng lfg_spawn_rng #define get_seed_rng lfg_get_seed_rng #define free_rng lfg_free_rng #define pack_rng lfg_pack_rng #define unpack_rng lfg_unpack_rng #define print_rng lfg_print_rng #define MAX_STREAMS lfg_MAX_STREAMS #define NGENS lfg_NGENS #define valid lfg_valid /*#define PRINT_GEN*/ /* BITS_IN_INT_GEN is the log_2 of the modulus of the generator */ /* for portability this is set to 32, but can be modified; */ /* if modified, make sure INT_MOD_MASK can still be calculated */ #define BITS_IN_INT_GEN 32 /* INT_MOD_MASK is used to perform modular arithmetic - specifying */ /* this value compensates for different sized words on */ /* different architectures */ /* FLT_MULT is used in converting to float and double values; the */ /* odd form is due to a compiler glitch on our CM-5, which */ /* caused (0.5/(unsigned)(1<<31)) to be negative. */ #if (BITS_IN_INT_GEN==32) #define INT_MOD_MASK 0xffffffff #define FLT_MULT (0.25/(unsigned)(1<<30)) #else #define INT_MOD_MASK ((unsigned)(1<>1) /* MAX_BIT_INT is the largest bit position allowed in the index */ /* of the node - it equals BITS_IN_INT_GEN - 2 */ #define MAX_BIT_INT (BITS_IN_INT_GEN-2) /* INTX2_MASK is used in calculation of the node numbers */ #define INTX2_MASK ((1<=0;i--) { new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); temp >>= 1; } for (i=28;i<32;i++) { temp = bitcnt(reg_fill[0]&(mask<>(32-i))); new_fill[0] |= (1&temp)<=0;i--) { if (b[i]&(1<hptr; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); new_val = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; /* skip an element in the sequence */ if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); *hp = (--hptr < 0) ? lval-1 : hptr; return (new_val>>1); } #ifdef __STDC__ float get_rn_flt(int *genptr) #else float get_rn_flt(genptr) int *genptr; #endif /* returns value put into new position */ { unsigned long new_val; /* this cannot be unsigned int due to a bug in the SGI compiler */ unsigned *r0,*r1; int hptr,lptr,*hp = &((struct rngen *)genptr)->hptr; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); new_val = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; /* skip an element in the sequence */ if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); *hp = (--hptr<0) ? lval-1 : hptr; return (new_val*FLT_MULT); } #ifdef __STDC__ double get_rn_dbl(int *genptr) #else double get_rn_dbl(genptr) int *genptr; #endif /* returns value put into new position */ { unsigned *r0,*r1; unsigned long temp1,temp2; /* Due to a bug in the SGI compiler, this should not be unsigned int */ int hptr,lptr,*hp = &((struct rngen *)genptr)->hptr; double new_val; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); temp1 = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); temp2 = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); *hp = (--hptr < 0) ? lval-1 : hptr; new_val = ((unsigned int) temp2*(double)FLT_MULT + (unsigned int) temp1)*FLT_MULT; return (new_val); } /*************************************************************************/ /*************************************************************************/ /* INITIALIZE: starts the whole thing going */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ static int **initialize(int rng_type, int ngen, int param, unsigned seed, unsigned *nstart, unsigned initseed) #else static int **initialize(rng_type, ngen,param, seed,nstart, initseed) int rng_type, ngen, param; unsigned *nstart, seed, initseed; #endif { int i,j,k,l,*order, length; struct rngen **q; unsigned *nindex; length = valid[param].L; /* allocate memory for node number and fill of each generator */ order = (int *) mymalloc(ngen*sizeof(int)); q = (struct rngen **) mymalloc(ngen*sizeof(struct rngen *)); if (q == NULL || order == NULL) return NULL; for (i=0;irng_type = rng_type; q[i]->hptr = length - 1; q[i]->si = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); q[i]->r0 = (unsigned *) mymalloc(length*sizeof(unsigned)); q[i]->r1 = (unsigned *) mymalloc(length*sizeof(unsigned)); q[i]->lval = length; q[i]->kval = valid[param].K; q[i]->param = param; q[i]->seed = seed; q[i]->init_seed = initseed; q[i]->gentype = GENTYPE; if (q[i]->r1 == NULL || q[i]->r0 == NULL || q[i]->si == NULL) return NULL; } /* specify register fills and node number arrays */ /* do fills in tree fashion so that all fills branch from index */ /* contained in nstart array */ q[0]->stream_number = nstart[0]; si_double(q[0]->si,nstart,length); get_fill(q[0]->si,q[0]->r0,param,seed); q[0]->si[0]++; get_fill(q[0]->si,q[0]->r1,param,seed); i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0;ksi; q[i]->stream_number = nindex[0]; si_double(nindex,nindex, length); for (j=0;jsi[j] = nindex[j]; get_fill(q[i]->si,q[i]->r0,param,seed); q[i]->si[0]++; get_fill(q[i]->si,q[i]->r1,param,seed); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1;k>0;k--) { order[2*k+1] = l+k; order[2*k] = order[k]; } order[1] = l; } free(order); for (i=ngen-1;i>=0;i--) { k = 0; for (j=1;jsi[j]) k = 1; if (!k) break; for (j=0;j=0) { for (j=0;j<4*length;j++) get_rn_int((int *)(q[i])); i--; } return((int **)q); } /*************************************************************************/ /*************************************************************************/ /* INIT_RNG's: user interface to start things off */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int param) #else int *init_rng(int rng_type,gennum,total_gen,seed,param) int rng_type,gennum,param,seed,total_gen; #endif { int doexit=0,i,k, length; int **p=NULL, *rng; unsigned *nstart=NULL,*si; /* gives back one generator (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ /* check values of gennum and total_gen */ if (total_gen <= 0) /* check if total_gen is valid */ { total_gen = 1; errprint("WARNING","init_rng","Total_gen <= 0. Default value of 1 used for total_gen"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { errprint("ERROR","init_rng","gennum out of range. "); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (param < 0 || param >= NPARAMS) { errprint("WARNING","init_rng","Parameter not valid. Using Default param"); param = 0; } /* check whether generators have previously been defined */ /* guard against access while defining generator parameters for */ /* the 1st time */ length = valid[param].L; /* determine parameters */ k = valid[param].K; if (!lval) { lval = length; /* determine parameters */ kval = k; gseed = seed^GS0; } else { if (lval != length) doexit++; if( seed != (gseed^GS0) ) doexit += 2; if (doexit) { if (doexit&1) errprint("WARNING","init_rng","changing global L value! Independence of streams is not guaranteed"); if (doexit&2) errprint("WARNING","init_rng","changing global seed value! Independence of streams is not guaranteed"); } } /* define the starting vector for the initial node */ nstart = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); if (nstart == NULL) return NULL; nstart[0] = gennum; for (i=1;istream_number = gennum; /* update si array to allow for future spawning of generators */ si = ((struct rngen *)(p[0]))->si; while (si[0] < total_gen && !si[1]) si_double(si,si,length); NGENS++; free(nstart); rng = p[0]; ((struct rngen *)rng)->rng_type = rng_type; free(p); return rng; } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *genptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(genptr,nspawned,newgens, checkid) int *genptr,nspawned, ***newgens, checkid; #endif { int **q=NULL, i; unsigned *p; struct rngen *temp; if (nspawned <= 0) /* check if nspawned is valid */ { nspawned = 1; errprint("WARNING","spawn_rng","Nspawned <= 0. Default value of 1 used for nspawned"); } temp = (struct rngen *) genptr; p = temp->si; q = initialize(temp->rng_type,nspawned,temp->param,temp->seed,p,temp->init_seed); if (q == NULL) { *newgens = NULL; return 0; } si_double(p,p,temp->lval); NGENS += nspawned; *newgens = (int **) q; if(checkid != 0) for(i=0; ihptr); } #ifdef __STDC__ static int *get_fill_rng( int *genptr) #else static int *get_fill_rng(genptr) int *genptr; #endif { int i,*p; unsigned *pp; struct rngen *temp; temp = (struct rngen *) genptr; p = (int *) mymalloc(2*(temp->lval)*sizeof(int)); if(p == NULL) return NULL; pp = ((struct rngen *)genptr)->r0; for (i=0;ir1; for (i=0;ilval;i++) p[temp->lval+i] = pp[i]; return(p); } #ifdef __STDC__ static int *get_next_index_rng( int *genptr) #else static int *get_next_index_rng(genptr) int *genptr; #endif { int i,*p, lval; unsigned *pp; lval = ((struct rngen *) genptr)->lval; pp = ((struct rngen *)genptr)->si; p = (int *) mymalloc((lval-1)*sizeof(int)); if(p == NULL) return NULL; for (i=0;i>= 1; if (a[i+1]&1) a[i] ^= (1<>= 1; } #ifdef __STDC__ static int *get_node_index_rng( int *genptr) #else static int *get_node_index_rng(genptr) int *genptr; #endif { int *p, length; length = ( (struct rngen *) genptr)->lval; p = get_next_index_rng(genptr); if(p == NULL) return NULL; while (!(p[0]&1)) si_halve(p,length); si_halve(p, length); return(p); } /*************************************************************************/ /*************************************************************************/ /* MESSAGE PASSING ROUTINES */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { int i, size; struct rngen *q; unsigned char *p, *initp; q = (struct rngen *)genptr; size = 4 + (3*(q->lval)+5)*4 + strlen(q->gentype)+1; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ initp = p = (unsigned char *) mymalloc(size); if(p == NULL) { *buffer = NULL; return 0; } p += store_int(q->rng_type,4,p); strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->lval,4,p); p += store_int(q->kval,4,p); p += store_int(q->seed,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->stream_number,4,p); p += store_intarray(q->si,q->lval-1,4,p); p += store_intarray(q->r0,q->lval,4,p); p += store_intarray(q->r1,q->lval,4,p); p += store_int(q->hptr,4,p); *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *p) #else int *unpack_rng(p) char *p; #endif { int doexit=0,i, found, length, k, param; struct rngen *q; unsigned seed, lag1, lag2; unsigned char *packed; int rng_type; packed = (unsigned char *) p; packed += load_int(packed,4,&rng_type); if(strcmp((char *)packed,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed, GENTYPE); return NULL; } packed += strlen(GENTYPE)+1; packed += load_int(packed,4,&lag1); packed += load_int(packed,4,&lag2); packed += load_int(packed,4,&seed); /* check values of parameters for consistency */ for(i=found=0; irng_type = rng_type; q->gentype = GENTYPE; q->si = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); q->r0 = (unsigned *) mymalloc(length*sizeof(unsigned)); q->r1 = (unsigned *) mymalloc(length*sizeof(unsigned)); if (q->r1 == NULL || q->si == NULL || q->r0 == NULL) return NULL; q->lval = length; q->kval = k; q->seed = seed; q->param = param; packed += load_int(packed,4,(unsigned int *)&q->init_seed); packed += load_int(packed,4,(unsigned int *)&q->stream_number); packed += load_intarray(packed,length-1,4,q->si); packed += load_intarray(packed,length,4,q->r0); packed += load_intarray(packed,length,4,q->r1); packed += load_int(packed,4,(unsigned int *)&q->hptr); NGENS++; return (int *) q; } /*************************************************************************/ /*************************************************************************/ /* FREE_RNG: remove memory for a generator */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int free_rng(int *genptr) #else int free_rng(genptr) int *genptr; #endif { struct rngen *q; q = (struct rngen *)genptr; free(q->si); free(q->r0); free(q->r1); free(q); NGENS--; return NGENS; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; gen = (struct rngen *) igen; printf("\n%s\n", GENTYPE+2); printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->param); return 1; } sprng2.0/SRC/lfg/lfg.data100700 764 764 51613 6736173543 14257 0ustar chwangchwang1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 58511471 4920091 1267083368 1504572630 473211957 1164337523 2122077619 9943750 829975784 20529118 937050748 218796243 1743373140 786293299 327041861 1270020614 1187738722 793821325 2060527126 1317974913 1074814491 122614888 508339938 2126426459 842358804 865240170 1908934382 1157089863 813650806 234483167 1414062741 1597549919 1778499375 165819196 933340266 681775915 1413208197 639160951 2115095984 1733872182 277394530 481475234 1983416492 531535858 94678105 2066018822 960695378 1277923970 1051814172 452714453 15042504 1996092391 1658280332 71310038 585584617 602712293 1020720263 1289487756 1474553381 2106438679 1902579254 968037622 1157788792 55031502 2030200509 240437508 228490906 969284932 1169324779 1446572751 728612287 151857310 1507778490 935624766 734721362 1194860398 1543890419 140383648 1444281557 2058960911 614018438 881114235 1470925415 1548789527 1385366568 885386763 1190362585 1119709186 679841602 56737667 247522177 101442423 480937025 1953567667 988645479 1310980899 1343566472 616470030 819936764 721927168 146386523 1867101336 2071461643 1593379669 860102917 1097276065 1769005418 1549048981 1268997475 1619394697 1125370564 884053840 2015221480 2065526019 888745304 166903379 188167058 1736367055 1623463168 1485050365 976162994 420526107 1542913900 721166733 881398264 1714523617 1889513419 1344160269 1255016395 627987561 21591261 519043414 685541256 1060541062 868170468 485270694 1184716625 986110697 532592353 102633571 1654583512 738826165 1278644877 946225194 1623543880 304331045 1851699228 1775881931 940197627 746126970 1759367059 328787674 1781017777 978865887 1192077844 737500000 2128880159 290329567 82681427 593729904 268298730 197038387 586865942 895807934 1239101459 1764017066 958055325 1337339538 425030454 1221817411 151083160 626789827 117906390 877557298 1275869094 1185039087 1103197870 2041549242 1458944131 1692988757 1547876195 678479328 1908068798 952789768 2006916588 2089943787 1719284627 2112755131 1588822892 440206677 380051274 1572148369 86985674 926485915 1371229902 1576387163 1757211363 1474334283 42103110 584921816 1458740353 887677761 2050826394 1297339035 115750084 2094636830 2006190686 106452916 318861409 1594733971 924984322 411693427 1329768461 1206309272 1716488864 471467079 1651979349 1449841852 331734861 1290482465 1170542781 333234374 762004337 1246768193 189578868 169357010 1108656811 1088460846 1883043441 1211019540 745457656 165340631 622233637 1449293017 387288879 1362722696 1184815041 1055317754 1793316746 1244417125 601717933 378622289 734762163 2029627568 748097588 341248706 1413865659 662254447 1351102380 929143950 1230533167 396428647 36742287 40344178 1884294169 1106814751 1215901008 2003540268 1709328838 1501017479 1608768013 758955583 261071626 552163574 1634701815 1606947279 385855901 1208065625 1626472290 95894232 705001674 952061060 1129903048 1582273265 639064650 1267106570 1760257316 1809683941 1118291201 695783365 1802442646 1443477646 756170901 1901893812 830384608 837690960 996852867 1512624106 868215664 983500660 461762284 1365332318 877883261 1214788565 557694252 1992978984 1103518964 1351456169 386595182 810980970 683831232 1994220412 397178948 494978713 1413596588 1178699687 812139654 406840253 1309610403 40151582 1753951914 236161097 1662584346 2047905846 666271096 1894404850 1822181353 942406980 834989517 1475295835 398627529 330096131 564247207 2024788629 657142256 1094842623 1630474369 1730003838 551182878 159256206 1426752795 1784240003 1090949850 1433244670 1518617691 132761082 2074940010 2007319433 445595023 961141277 1660013175 835652268 2005625245 1346854011 1616908730 1114396747 1357585748 650346531 1104395683 1423131831 1325935734 1074447958 220160956 595759073 194940716 991995627 582242260 2117906732 238275028 2046826480 931962587 1802263611 383638402 990973716 1656631870 264137560 1862034548 1937004353 796337072 1403297605 260824582 2105812360 1864781054 645907547 1485629558 663707181 52211510 879582911 645893598 1460171647 537007786 1068021317 1575693224 1050663592 1719268982 1257384781 2108881320 770206655 296413422 398655254 1793156379 1387275167 716507647 754246205 1528963411 1290042324 924380666 370662528 1099132851 1712844525 1746402752 2082925859 1554766039 1155091510 1875611912 1950041091 798675665 1992865574 338726457 1300509330 161915346 486327788 381817220 2092678803 1933381465 1928610457 1899033651 208267523 713363055 912680757 454133075 1255987799 2072000947 1532462713 1466254670 1860084984 1539598774 610816887 1092045173 1709809461 269773215 1843009528 1445151406 1804470262 1072612833 1755008280 49324038 868688056 456404746 1080974593 624919661 1564753752 134863444 1931544032 509117018 1174555507 884100906 1094135398 1637558493 477542827 0.084565 0.196052 0.372614 0.844266 0.219029 0.965468 0.346879 0.703500 0.837802 0.531987 0.500011 0.579585 0.350214 0.597210 0.695174 0.527890 0.052670 0.402515 0.007963 0.767096 0.796223 0.663469 0.102739 0.783556 0.919928 0.090126 0.959878 0.631730 0.404889 0.947372 0.656219 0.741640 0.234966 0.102094 0.629456 0.471907 0.909405 0.384857 0.177491 0.983512 0.474653 0.069731 0.852441 0.837793 0.300331 0.153610 0.023311 0.971997 0.991339 0.313292 0.491559 0.487710 0.538644 0.403264 0.988946 0.763108 0.671488 0.061971 0.392591 0.328099 0.589068 0.262114 0.315888 0.553250 0.707616 0.313421 0.190673 0.849147 0.957321 0.716096 0.068405 0.621905 0.954594 0.602671 0.247255 0.733912 0.231511 0.430815 0.906601 0.019603 0.989859 0.929196 0.194851 0.905422 0.350407 0.204284 0.717792 0.136776 0.328207 0.899848 0.455456 0.610385 0.215376 0.868683 0.404006 0.816630 0.879963 0.036760 0.512958 0.355734 0.496193 0.497096 0.976508 0.974541 0.488178 0.715524 0.121608 0.688977 0.207084 0.922361 0.561481 0.604135 0.090783 0.169902 0.740975 0.210638 0.445019 0.915509 0.930839 0.137698 0.856775 0.673924 0.375034 0.143467 0.690523 0.561809 0.537469 0.682556 0.691834 0.688910 0.834252 0.376408 0.505322 0.482286 0.928769 0.792951 0.631153 0.768919 0.835681 0.294784 0.450925 0.464832 0.111385 0.557877 0.326453 0.971990 0.110699 0.857823 0.949940 0.189534 0.022926 0.399146 0.235207 0.593987 0.154091 0.938512 0.062748 0.625616 0.207599 0.125168 0.301926 0.998894 0.993391 0.492688 0.639379 0.949845 0.841346 0.223193 0.092892 0.706118 0.820080 0.114666 0.471873 0.530835 0.281049 0.141862 0.617196 0.097265 0.539146 0.468042 0.621454 0.974997 0.480946 0.369896 0.569148 0.023842 0.354458 0.281947 0.737402 0.324209 0.732038 0.504288 0.758835 0.115402 0.071611 0.857553 0.931595 0.568053 0.936581 0.593471 0.681737 0.512265 0.343489 0.744079 0.897526 0.907772 0.970117 0.943200 0.689388 0.434617 0.481979 0.397025 0.458546 0.001989 0.181251 0.099461 0.159960 0.952582 0.435851 0.174288 0.174681 0.503422 0.124210 0.612005 0.289001 0.571668 0.279214 0.863935 0.217330 0.601641 0.931600 0.154285 0.481873 0.572226 0.406519 0.473143 0.339343 0.586059 0.232514 0.486867 0.544539 0.797295 0.737432 0.959599 0.862588 0.618668 0.738571 0.496201 0.222487 0.503106 0.520251 0.510457 0.021343 0.572528 0.240901 0.066475 0.909150 0.675095 0.346260 0.871986 0.008729 0.119651 0.102065 0.389080 0.988595 0.454460 0.788731 0.024235 0.431859 0.009863 0.355284 0.903744 0.484711 0.772883 0.622879 0.522689 0.680006 0.644400 0.474074 0.155181 0.164737 0.943659 0.349254 0.444874 0.593439 0.017314 0.192612 0.095483 0.669686 0.789194 0.184254 0.277014 0.753862 0.438809 0.372599 0.141073 0.325706 0.140104 0.100488 0.942691 0.461208 0.722981 0.969588 0.033370 0.039492 0.485162 0.554375 0.421127 0.704028 0.791177 0.868085 0.261100 0.613213 0.431087 0.922165 0.821503 0.646905 0.179885 0.080717 0.440958 0.538746 0.603590 0.098122 0.473518 0.724045 0.374444 0.398719 0.235766 0.614035 0.101978 0.437155 0.203825 0.059458 0.365296 0.042470 0.780635 0.248331 0.970834 0.767443 0.616197 0.124482 0.263678 0.400085 0.549784 0.379360 0.098996 0.978036 0.180608 0.272404 0.534683 0.030527 0.522510 0.843832 0.585454 0.838458 0.266721 0.632686 0.108064 0.903690 0.428576 0.176022 0.401554 0.506036 0.012785 0.192799 0.009796 0.607051 0.866970 0.448362 0.206223 0.485726 0.350016 0.751822 0.424784 0.136400 0.530875 0.980608 0.803159 0.491626 0.345262 0.456708 0.849038 0.386937 0.983218 0.818203 0.285865 0.140099 0.031097 0.121795 0.578043 0.926807 0.833291 0.904335 0.071467 0.604735 0.565137 0.784132 0.286838 0.484961 0.899259 0.304782 0.769361 0.050450 0.653514 0.074094 0.181957 0.666000 0.386351 0.121320 0.938299 0.546166 0.076896 0.472274 0.801747 0.632040 0.308400 0.133359 0.335882 0.382081 0.218652 0.549612 0.467773 0.147797 0.340578 0.265013 0.899305 0.146935 0.934812 0.628256 0.700113 0.752177 0.080956 0.393630 0.819703 0.157283 0.016607 0.921891 0.656490 0.714376 0.764266 0.315480 0.108908 0.177422 0.105456 0.601671 0.437089 0.594225 0.114896 0.395778 0.053674 0.279059 0.154631 0.348870 0.066666 0.664357 0.680916 0.827707 0.662216 0.812005 0.869373 0.125513 0.023379 0.476628 0.133960 0.324961 0.162850 0.302400 0.869071 0.484339 0.540658 0.497067 0.583616 0.166497 0.269491 0.845481 0.643167 0.817085 0.825211 0.969944 0.354128 0.620570 0.955046 0.965755 0.383467 0.074659 0.881938 0.604888 0.793314 0.641216 0.157804 0.922639 0.311463 0.383475 0.087235 0.768826 0.128712 0.229284 0.098007 0.602682 0.863902 0.27317102298410 0.72558664793123 0.60129646513886 0.08065075620188 0.58338861836683 0.06074965717798 0.15513102913894 0.64048078966323 0.79992648928916 0.72067078817554 0.93926165260614 0.20094239837379 0.74209313823605 0.11018857642846 0.55701095765544 0.95986252983318 0.27131784017567 0.68925978793567 0.81883947161535 0.86345474049827 0.93937518678452 0.95014163558368 0.73682150894823 0.29613538582785 0.96673880222685 0.79795699070037 0.66521577292453 0.26349461145245 0.16018121187961 0.66075073880821 0.86331792975706 0.51381401843926 0.12463123103283 0.80473413437126 0.43961455783915 0.24579409150244 0.49722838734525 0.55962362468499 0.65700178580975 0.86822098997985 0.42457047628970 0.88307505325149 0.96694369461309 0.98165143585061 0.09704643121898 0.53473755697856 0.43761567594384 0.26982107357454 0.28483534708209 0.29583478126231 0.81703293044304 0.29587728058781 0.78334465179263 0.33627935467734 0.77189976550041 0.22874037252867 0.71016804885287 0.04487569334020 0.64611799315960 0.83760080650360 0.66425183872496 0.41590136963902 0.82542084946122 0.96997548889355 0.58571997357783 0.93271906868244 0.67535354795737 0.51717618842295 0.55834766301398 0.66214085650897 0.71839559810532 0.27918921741599 0.68896290883976 0.51606648764358 0.22880596103434 0.78812318189401 0.67321309266530 0.82899856944231 0.12385453033195 0.30792807387206 0.13275613628357 0.29751064339843 0.29521539670095 0.26369327290946 0.21063487534261 0.46118109379888 0.32625563983687 0.60149954128607 0.43223588074313 0.97262364636138 0.34347354045632 0.13201557885003 0.80728710763711 0.29505548669748 0.60652657995083 0.42341045518008 0.09462719669212 0.12568051703375 0.58051018789434 0.34869067196772 0.70709814250220 0.06510239506263 0.88330149531547 0.28817159502017 0.33600731093415 0.67945872224123 0.55733806801693 0.56236263282570 0.75075920132283 0.16472227097001 0.55003237328651 0.28322828513921 0.41457709460854 0.68015162936350 0.84347877639082 0.91152763896255 0.95201916155873 0.09272226524625 0.03887343750107 0.93319725910536 0.29495920243766 0.79667858101065 0.17473143003486 0.70405254032576 0.27721677876006 0.50345447839951 0.47464559575525 0.94256790417296 0.39128568777510 0.05216184787450 0.36543826811523 0.06306479558539 0.97567302874103 0.37858212331745 0.29426835829534 0.16057388585162 0.23474245407743 0.29599591899407 0.31157298140923 0.12700348306792 0.96924482333323 0.11520133281402 0.38864459297183 0.59055297291519 0.86428312716344 0.70243000548246 0.40932454193933 0.17728384003353 0.42422050358960 0.32506393318502 0.44479651679934 0.86667797159387 0.64294038647865 0.06501382685220 0.64988939215455 0.05463557274075 0.71150018690952 0.13387236283876 0.58087367775102 0.70467089522560 0.10515683255142 0.44055064196522 0.91837270412470 0.13828330569201 0.06107723373269 0.20566671607941 0.53179938770388 0.76013220637013 0.58367634486885 0.14464107908882 0.99681618402364 0.99937552904325 0.88395776758844 0.86442774321636 0.59459098993479 0.53998993649402 0.73108235602164 0.28249982430139 0.62080549477521 0.01791989302620 0.50227409986366 0.43044780995838 0.62026374049308 0.73258581068792 0.36376558358279 0.18179189555253 0.98660686572985 0.06189916028294 0.44639566832559 0.79934362725983 0.63017754739632 0.53087023169450 0.25632559178119 0.26160108158814 0.77921154953738 0.52368048073577 0.29074273578056 0.35381401009629 0.65036737871986 0.13871300537018 0.60440520237544 0.19704518314255 0.58239259827003 0.38027907900611 0.55476282950187 0.36469227272584 0.58931866711983 0.41299301212738 0.02428761991681 0.76262914577616 0.74535171092699 0.19910347321988 0.42866569599016 0.18301955832541 0.13531363605901 0.50805648223186 0.13218548827218 0.29580026207336 0.79801695045903 0.47910663727196 0.63570575002681 0.28699392163885 0.56466001688992 0.07057792403657 0.76788774931071 0.60908320534402 0.41299680937518 0.68248938409697 0.67759987638680 0.97948067006356 0.52246356517782 0.24712798323000 0.42631814096090 0.51124328419935 0.05006550888894 0.67500575813452 0.85877666017627 0.46865596084447 0.38875369369370 0.79031180902164 0.51515779204728 0.44166730147550 0.71059840004315 0.79322009278814 0.81685868295062 0.08270920277150 0.55047460551330 0.55404480746730 0.58012236952670 0.58815416000171 0.38891097440774 0.19677981723587 0.02171030928895 0.72618473696994 0.68091768291418 0.18795285154654 0.46445196958750 0.44007750549464 0.41651380439960 0.66044504340177 0.50603913291062 0.80622576917487 0.08949571339646 0.28729106017023 0.54921668063157 0.98139992129427 0.52667047241936 0.32930476306372 0.51755974027733 0.14084278460711 0.59753430360264 0.32906604112749 0.33588338900610 0.99433900261497 0.25375382631079 0.26950565675376 0.75408044031365 0.40679304005338 0.16951725063857 0.65634463944760 0.34027177378522 0.95959699622679 0.70452235086474 0.86677184090987 0.12373279981896 0.54817664467004 0.28943720945791 0.17503839307615 0.40190447792825 0.18426925519365 0.23530451501494 0.38286693656610 0.59617026863235 0.17364041143691 0.30423985937133 0.87767795918621 0.37390571738913 0.67239386124693 0.97461210649797 0.95323455891695 0.26651776058104 0.32146187130043 0.00155586966032 0.61250053969802 0.68851800209200 0.61202463610799 0.32411403574425 0.76391973727165 0.73396360263641 0.57083680951661 0.78214777466315 0.83068819623571 0.31617279005548 0.09018792970362 0.33922678676485 0.65131946580658 0.30923077229695 0.10200607579674 0.52863359641164 0.68555447661065 0.49009801945333 0.49097815215078 0.56390744544316 0.44415483824883 0.14929954836022 0.39787312031684 0.19031217008914 0.09017257411024 0.85697818909952 0.57017465688392 0.71990351410848 0.04209913117893 0.94254244305420 0.10064085665641 0.79833119800494 0.37254601594719 0.17258492587545 0.42502005788528 0.71757917444448 0.95328385575839 0.93084846053484 0.37149516219801 0.27952875802967 0.58729308253893 0.05012545413651 0.35291530646126 0.01760707998184 0.34174614243465 0.25152445106375 0.18730581439295 0.17080811000152 0.56119223577538 0.61338980406099 0.15113405629357 0.05879698141637 0.72550667421340 0.88854599763898 0.90004082993089 0.41891287524431 0.07509260001911 0.92566049500963 0.14324420400302 0.31973838776494 0.25801612425823 0.70950295543298 0.07019515544850 0.54683704116835 0.72255854364687 0.19011408431915 0.37953744512666 0.70917055064499 0.38019874927546 0.79613387405478 0.73422898577886 0.61879288947156 0.89141665763472 0.63130802428205 0.42797605789261 0.27638747365619 0.88118652440115 0.39680430781264 0.58771354704255 0.99964722759921 0.20964729593823 0.20888776870931 0.53521841841453 0.81305348602004 0.97553074460423 0.58838456943935 0.71062333379075 0.12102116775945 0.99969619618738 0.72495999801104 0.72334853981681 0.17080073364384 0.64939702965870 0.93334779314506 0.34319060851917 0.54723109866630 0.99863894693428 0.28709431164033 0.89922599900911 0.10784113900898 0.80243035204521 0.47618689715900 0.12915342822023 0.44543238399365 0.09436719565681 0.42721896833041 0.77150401047055 0.87109813618572 0.76457051919331 0.61052175750686 0.21049154863914 0.58261469691610 0.15552771865240 0.21302725422349 0.57192189570596 0.33132616769165 0.47986920852239 0.29332917974240 0.79654892387653 0.14710233034404 0.07162961741994 0.10011318309292 0.76681852374507 0.95862226324132 0.19456036418199 0.67475488741889 0.13702386370547 0.72527863831315 0.23100631225585 0.81999525827556 0.53684217708428 0.43272367153386 0.84403251215144 0.06385208259181 0.58178484390887 0.46819229204634 0.54712296398780 0.73196356504527 0.13987752311428 0.69521667836382 0.53344543872510 0.84496343169197 0.78413807614584 0.87295358938402 0.06555891223635 0.06720950824858 0.97777560236604 0.34528838271072 0.83106638435149 0.42383354011967 0.57716377617295 0.87643589167481 0.11499235101814 0.59596497684148 0.14554268478526 0.90199039190191 0.90870243638686 0.83278916089014 0.58407509048039 0.11647290383703 0.70258191094522 0.38069260262574 0.35922653858571 0.77057532365239 0.20207889673117 0.08822282776808 0.64019083701570 0.40661911764037 0.14855007480500 0.66835952591469 0.24488940283634 0.03227247248010 0.31104661964506 0.48517254225549 0.99626521801453 0.04193524195826 0.11011822978945 0.44673383095037 0.51249903675823 0.07132373546889 0.57115626694323 0.67592505967913 0.95163855405298 0.77438734524691 0.36020773811947 0.68932110580271 0.89262808878402 0.65969901390808 0.79086673670325 0.69810147985579 0.02750507481073 0.29431340583717 0.60325173243381 0.24584008201255 0.25199440476582 0.63622234534418 0.53808735476153 190110384 1678862029 1736517969 1918608134 1125559225 1632740624 1597816955 1059635668 945339961 1520124163 1186199443 534637109 1055870353 632991014 697100502 31152944 754270994 1831698854 1761978616 304264878 549161660 1495012659 944191381 1078566196 2067646816 204897486 758763536 1469608325 2079390525 1798948762 1162410917 638812170 777715511 604953539 734797044 885447014 933545291 1140251623 27351439 850326124 84592004 380500294 968906321 1759287123 1524701266 2142164776 2017151432 1786971382 1569130781 1851433264 1651515194 571172520 1198346707 1660248226 1658407615 1387991105 389502914 620678577 601935787 1441060514 22526965 1577404805 326738087 638792767 851098166 184599718 245568258 419105514 1559137640 521919279 53535660 112089696 1997467775 1312078806 430011042 2142789165 1841902343 850089162 1030482206 882859755 235535511 985499354 1298679197 629265995 871745186 153947194 496916583 1353203858 517264437 1665505249 476664311 609520859 1507011941 535683668 1391103581 1715593067 1994322808 1488818386 960190141 1448489698 795516046 354672977 2099445064 374747702 1445292661 150580813 1377000176 1915884849 1374704577 808988016 319282823 1306666433 559280022 1380002720 95955756 593180551 1887448489 1412489239 1547178868 2048789881 1399236858 1854895879 966239250 5274397 49697852 80400569 677859649 559842764 198567847 2090645201 456257075 867732760 1662240176 1121279511 1995210794 2100028078 318780858 145394375 1711951511 367775221 2065949537 1197413030 2133928054 2082508936 608188204 2081763112 1435486546 144252520 598473187 1524114749 1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 948063366 932099905 1819450438 118594625 788923440 1108295434 1917323050 453850477 1347479445 1361235421 53128094 399102816 2134938035 2031197797 533054116 819039194 21643733 341207232 1058733869 218966777 879535862 2085684616 1066927759 1233486295 292875570 638915742 2020069718 2117755499 1119125662 2123062017 1443032916 35406574 1510032980 2140970133 510825209 1993448585 891323244 918334639 464626764 351726950 1794729821 1685965492 1592280729 1934854227 1690236051 1582614458 1754937553 1907499841 245653183 283521007 sprng2.0/SRC/lfg/lfg.h100600 764 764 1431 6736173543 13545 0ustar chwangchwang #ifndef _lfg_h #define _lfg_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int lfg_get_rn_int ANSI_ARGS((int *igenptr)); float lfg_get_rn_flt ANSI_ARGS((int *igenptr)); double lfg_get_rn_dbl ANSI_ARGS((int *igenptr)); int *lfg_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int lfg_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int lfg_get_seed_rng ANSI_ARGS((int *genptr)); int lfg_free_rng ANSI_ARGS((int *genptr)); int lfg_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *lfg_unpack_rng ANSI_ARGS(( char *packed)); int lfg_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/lfg/tmp100600 764 764 511 6736173543 13325 0ustar chwangchwang#define init_rng lfg_init_rng #define get_rn_int lfg_get_rn_int #define get_rn_flt lfg_get_rn_flt #define get_rn_dbl lfg_get_rn_dbl #define spawn_rng lfg_spawn_rng #define get_seed_rng lfg_get_seed_rng #define free_rng lfg_free_rng #define pack_rng lfg_pack_rng #define unpack_rng lfg_unpack_rng #define print_rng lfg_print_rng sprng2.0/SRC/lfg/READMEver2.CHANGES100644 764 764 260 6736173543 15341 0ustar chwangchwang7 June 1999; Chris S. Makefile: 1. in 'all ;' added 'checksprng' 2. added section 'checksprng'. ---------------------------------------------------------------------------- sprng2.0/SRC/make.CONVEX100600 764 764 2071 6736173543 13716 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = c89 CLD = $(CC) F77 = fort77 F77LD = $(F77) FFXN = -DNoChange FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDIR = -L/opt/mpi/lib/pa1.1 MPILIB = -lpmpi -lmpi /usr/lib/libail.sl -lcnx_syscall CFLAGS = +O4 +U77 +Odataprefetch +Olibcalls $(PMLCGDEF) $(MPIDEF) +e -D$(PLAT) -D_LONG_LONG CLDFLAGS = +O4 +U77 +Odataprefetch +Olibcalls +e FFLAGS = +O4 +U77 +Odataprefetch +Olibcalls $(PMLCGDEF) $(MPIDEF) F77LDFLAGS = +O4 +U77 +Odataprefetch +Olibcalls CPP =fort77 -F #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = +Oinline=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple sprng2.0/SRC/make.DEC100600 764 764 1425 6736173543 13311 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system has ranlib, then replace next statement with the one after it. RANLIB = echo #RANLIB = ranlib CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = MPILIB = CFLAGS = -D$(PLAT) $(PMLCGDEF) $(MPIDEF) -O3 -std1 -assume noaligned_objects -DLittleEndian CLDFLAGS = -O3 -std1 -assume noaligned_objects FFLAGS = $(PMLCGDEF) $(MPIDEF) -O3 -D$(PLAT) -DPOINTER_SIZE=8 F77LDFLAGS = -O3 CPP = f77 -F sprng2.0/SRC/make.GENERIC100600 764 764 1571 6736173543 13774 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system has ranlib, then replace next statement with the one after it. RANLIB = echo #RANLIB = ranlib CC = gcc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDIR = MPILIB = # If _LONG_LONG type is available, then you can use the addition flag # -D_LONG_LONG. Set F77 to echo to compile the C version alone. # Try adding: -DGENERIC to CFLAGS. This can improve speed, but may give # incorrect values. Check with 'checksprng' to see if it works. CFLAGS = -O $(PMLCGDEF) $(MPIDEF) CLDFLAGS = -O FFLAGS = -O $(PMLCGDEF) $(MPIDEF) F77LDFLAGS = -O CPP = f77 -F sprng2.0/SRC/make.HP100600 764 764 2060 6736173543 13221 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo CC = /afs/ncsa/packages/GNU/gcc-2.8.1/HPUX_10.20/bin/gcc #CC = c89 CLD = $(CC) F77 = fort77 F77LD = $(F77) FFXN = -DNoChange FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # # #MPIDIR = #MPILIB = # Libraries for calls to handle command line arguments in FORTRAN CMDDIR = -L/usr/lib CMDLIB = -lU77 # If only the C call is required, then you can use the addition flag # -D_LONG_LONG. Fortran programs will not link then. Set F77 to 'echo' # to build only the C version. Use of the flag mentioned above yields an # LCG that is about three times faster. CFLAGS = -ansi -O2 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) CLDFLAGS = -O2 FFLAGS = -O2 $(PMLCGDEF) $(MPIDEF) -D$(PLAT) F77LDFLAGS = -O2 CPP = fort77 -F sprng2.0/SRC/make.O2K100600 764 764 3477 6736173543 13322 0ustar chwangchwang# 32 or 64 bit versions of the library can be compiled. # In order to get the 64 bit version, please remove the # signs (if there are # any) before the lines under the statement '# 64 bit compilation' and append # a # sign (if there isn't one) at the beginning of the lines immediately # following the statement '# 32 bit compilation'. # The reverse of this procedure is followed for 32 bit compilation. AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with RANLIB = echo CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDIR = #MPILIB = -lmpi # 32 bit compilation #CFLAGS = -O3 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) -mips4 -D_LONG_LONG -n32 # 32 bit compilation #CLDFLAGS = -O3 -n32 # 32 bit compilation #FFLAGS = -O3 -n32 #32 bit compilation #F77LDFLAGS = -O3 -n32 $(PMLCGDEF) $(MPIDEF) -mips4 # 32 bit compilation #CPP = cc -E -P $(MPIDEF) -D_LONG_LONG # 32 bit compilation # 64 bit compilation # CFLAGS = -O3 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) -D_LONG_LONG -align64 -64 CLDFLAGS = -O3 -align64 -64 # 64 bit compilation FFLAGS = -O3 -align64 $(PMLCGDEF) $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG -64 #64 bit compilation F77LDFLAGS = -O3 -align64 -64 # 64 bit compilation CPP = cc -E -P $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG # 64 bit compilation #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -INLINE:must=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple sprng2.0/SRC/make.SGI100600 764 764 3530 6736173543 13337 0ustar chwangchwang# 32 or 64 bit versions of the library can be compiled. # In order to get the 64 bit version, please remove the # signs (if there are # any) before the lines under the statement '# 64 bit compilation' and append # a # sign (if there isn't one) at the beginning of the lines immediately # following the statement '# 32 bit compilation'. # The reverse of this procedure is followed for 32 bit compilation. AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with RANLIB = echo #RANLIB = ranlib CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDIR = #MPILIB = -lmpi # 32 bit compilation CFLAGS = -O3 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) -D_LONG_LONG -n32 -mips4 # 32 bit compilation CLDFLAGS = -O3 -n32 -mips4 # 32 bit compilation FFLAGS = -O3 -n32 -mips4 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) -D_LONG_LONG #32 bit compilation F77LDFLAGS = -O3 -n32 -mips4 # 32 bit compilation CPP = cc -E -P -D_LONG_LONG # 32 bit compilation # 64 bit compilation #CFLAGS = -O3 -D$(PLAT) $(MPIDEF) -D_LONG_LONG -align64 -64 #CLDFLAGS = -O3 -align64 -64 # 64 bit compilation #FFLAGS = -O3 -align64 $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG -64 #64 bit compilation #F77LDFLAGS = -O3 -align64 -64 # 64 bit compilation #CPP = cc -E -P $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG # 64 bit compilation #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -INLINE:must=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple sprng2.0/SRC/make.SP2100600 764 764 3207 6736173543 13322 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib FFXN = -DNoChange FSUFFIX = F CC = xlc F77 = xlf # comment the next five lines to use MPI and then uncomment the following # lines, as explained below. MPICC = $(CC) MPIF77 = $(F77) CFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -D$(PLAT) -qtune=pwr2 -D_LONG_LONG $(PMLCGDEF) $(MPIDEF) FFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 -WF,-I../SRC $(PMLCGDEF) $(FMPIDEF) CPP = xlf -c -d -qnoobj -WF,-P # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI #FMPIDEF = -WF,-DSPRNG_MPI #Only if you plan to use MPI #MPIDIR = #MPILIB = #MPICC = mpcc #CFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -D$(PLAT) -qtune=pwr2 -I/usr/lpp/ppe.poe/include -D_LONG_LONG $(PMLCGDEF) $(MPIDEF) #MPIF77 = mpxlf #FFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 -WF,-I../SRC -WF,-I/usr/lpp/ppe.poe/include $(PMLCGDEF) $(FMPIDEF) #CPP = xlf -c -d -qnoobj -WF,-P -WF,-I/usr/lpp/ppe.poe/include $(FMPIDEF) CLD = $(CC) CLDFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -qtune=pwr2 F77LD = $(F77) F77LDFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -Q+get_rn_int -Q+get_rn_dbl -Q+get_rn_flt -Q+get_rn_int_simple -Q+get_rn_flt_simple -Q+get_rn_dbl_simple sprng2.0/SRC/make.SUN100600 764 764 1526 6736173543 13365 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = gcc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDIR = MPILIB = # If only the C call is required, then you can use the addition flag # -D_LONG_LONG. Fortran programs will not link then. Set F77 to echo to # compile the C version alone. This may run three times faster. CFLAGS = -O $(PMLCGDEF) $(MPIDEF) -D$(PLAT) CLDFLAGS = -O FFLAGS = -fast -O3 $(PMLCGDEF) $(MPIDEF) -D$(PLAT) F77LDFLAGS = -fast -O3 CPP = f77 -F sprng2.0/SRC/make.T3D100600 764 764 1523 6736173543 13307 0ustar chwangchwang# We no longer know if this workson the T3D. # Archive and table of contents for archive AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo FSUFFIX = f # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDIR = -L/usr/local/mpp/lib MPILIB = -lmpi # # C compiler and loader CC = env TARGET=cray-t3d cc CFLAGS = -DT3D -O 3 $(PMLCGDEF) $(MPIDEF) -I/usr/local/mpp/include CLD = $(CC) CLDFLAGS = -O 3 FFXN = -DUpCase # FORTRAN Compiler and loader. F77 = cf77 -C cray-t3d FFLAGS = -O scalar3 F77LD = cf77 F77LDFLAGS = -O scalar3 CPP = f90 -e P -F MPIF77 = $(F77) MPICC = $(CC) sprng2.0/SRC/make.T3E100600 764 764 1406 6736173543 13310 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo CC = c89 CLD = $(CC) #Set F77 to "echo" if no FORTRAN 77 compiler is available F77 = f90 F77LD = $(F77) FFXN = -DUpCase FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # # The mpt module automatically links MPI library MPIDIR = MPILIB = CFLAGS = -O3 -D$(PLAT) $(PMLCGDEF) $(MPIDEF) CLDFLAGS = -O3 FFLAGS = -F -O3 $(PMLCGDEF) $(MPIDEF) -D$(PLAT) -DPOINTER_SIZE=8 F77LDFLAGS = -O3 CPP = f90 -e P -F sprng2.0/SRC/makeseed.c100600 764 764 1244 6736173543 14000 0ustar chwangchwang#include #ifdef __STDC__ int make_new_seed() #else int make_new_seed() #endif { time_t tp; struct tm *temp; unsigned int temp2, temp3; static unsigned int temp4 = 0xe0e1; time(&tp); temp = localtime(&tp); temp2 = (temp->tm_sec<<26)+(temp->tm_min<<20)+(temp->tm_hour<<15)+ (temp->tm_mday<<10)+(temp->tm_mon<<6); temp3 = (temp->tm_year<<13)+(temp->tm_wday<<10)+(temp->tm_yday<<1)+ temp->tm_isdst; temp2 ^= clock()^temp3; temp4 = (temp4*0xeeee)%0xffff; temp2 ^= temp4<<16; temp4 = (temp4*0xaeee)%0xffff; temp2 ^= temp4; temp2 &= 0x7fffffff; return temp2; } #if 0 main() { printf("%u\n", make_new_seed()); } #endif sprng2.0/SRC/memory.c100600 764 764 712 6736173543 13511 0ustar chwangchwang#include #include #ifdef __STDC__ void *_mymalloc(long size, int line, char *message) #else void *_mymalloc(size, line, message) long size; int line; char *message; #endif { char *temp; if(size == 0) return NULL; temp = (char *) malloc(size); if(temp == NULL) { fprintf(stderr,"\nmemory allocation failure in file: %s at line number: %d\n", message, line); return NULL; } return (void *) temp; } sprng2.0/SRC/memory.h100600 764 764 353 6736173543 13517 0ustar chwangchwang#define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void *_mymalloc ANSI_ARGS((long size, int line, char *message)); sprng2.0/SRC/mlfg/ 40700 764 764 0 7034410053 12661 5ustar chwangchwangsprng2.0/SRC/mlfg/Makefile100600 764 764 2403 6736173543 14441 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make mlfg => Library for the Multiplicative LFG # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : mlfg.o mlfg.o : $(SRCDIR)/interface.h mlfg.c mlfg.h int64.h $(SRCDIR)/memory.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) mlfg.c -I$(SRCDIR) #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F sprng2.0/SRC/mlfg/int64.h100600 764 764 7556 6736173543 14134 0ustar chwangchwang#ifndef _INT64_H_ #define _INT64_H_ #include #include "store.h" #ifndef __STDC__ #define const /* old C does not have 'const' qualifier */ #endif #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #endif #ifdef LONG64 typedef unsigned LONG64 uint64; #ifdef LONG_SPRNG #define MINUS1 0xffffffffffffffffUL /* -1 (mod 2^(BITS-2)) */ #define ONE 0x1UL #define MASK64 0xffffffffffffffffUL #else #define MINUS1 0xffffffffffffffffULL /* -1 (mod 2^(BITS-2)) */ #define ONE 0x1ULL #define MASK64 0xffffffffffffffffULL #endif #define multiply(a,b,c) {c = (a)*(b); c &= MASK64;} #define add(a,b,c) {c = (a)+(b); c &= MASK64;} #define decrement(a,c) {c = (a)-1; c &= MASK64;} #define and(a,b,c) {c = (a)&(b);} #define or(a,b,c) {c = (a)|(b);} #define xor(a,b,c) {c = (a)^(b);} #define notzero(a) (a==0?0:1) #define lshift(a,b,c) {c = (a)<<(b); c &= MASK64;} /* b is an int */ #define rshift(a,b,c) {c = (a)>>(b); c &= MASK64;} /* b is an int */ #define highword(a) ((unsigned int)((a)>>32)) #define lowword(a) ((unsigned int)((a)&0xffffffff)) #define set(a,b) {b = (a)&MASK64;} #define seti(a,b) {b = (a)&MASK64;} /* b is an int */ #define seti2(a,b,c) {c = (b); c <<= 32; c |= (a); c &= MASK64;}/*a,b=+int*/ #else /* Simulate 64 bit arithmetic on 32 bit integers */ typedef unsigned int uint64[2]; static const uint64 MASK64={0xffffffffU,0xffffffffU}; static const uint64 MINUS1={0xffffffffU,0xffffffffU}; /* -1 (mod 2^(BITS-2)) */ static uint64 ONE={0x1U,0x0U}; #define TWO_M32 2.3283064365386962e-10 /* 2^(-32) */ #define and(a,b,c) {c[0] = a[0]&b[0]; c[1] = a[1]&b[1];} #define or(a,b,c) {c[0] = a[0]|b[0]; c[1] = a[1]|b[1];} #define xor(a,b,c) {c[0] = a[0]^b[0]; c[1] = a[1]^b[1];} #define notzero(a) ((a[0]==0 && a[1]==0)?0:1) #define multiply(a,b,c) {c[1] = a[0]*b[1]+a[1]*b[0];\ c[1] += (unsigned int) (((double)a[0]*(double)b[0])\ *TWO_M32);\ c[0] = a[0]*b[0]; and(c,MASK64,c);} #define add(a,b,c) {unsigned int t = a[0]+b[0]; \ c[1] = a[1]+b[1]+(t>(32-b)); c[0] = a[0]<<(b);} else {c[1]=a[0]<<(b-32);c[0]=0;} and(c,MASK64,c); } static void rshift(uint64 a,int b,uint64 c) { if(b<32) {c[0] = (a[0]>>b)|(a[1]<<(32-b));c[1] = a[1]>>(b);} else {c[0]=a[1]>>(b-32);c[1]=0;} and(c,MASK64,c); } #define highword(a) ((a)[1]) #define lowword(a) ((a)[0]) #define set(a,b) {b[0] = a[0];b[1]=a[1];and(b,MASK64,b);} #define seti(a,b) {b[0] = a;b[1]=0;} /* b is an int */ #define seti2(a,b,c) {c[1] = b; c[0] = a; and(c,MASK64,c);}/*a,b = +ve int*/ #endif /* LONG64 or 32 bit */ static int store_uint64(uint64 l, unsigned char *c) { int i; unsigned int m[2]; m[0] = highword(l); m[1] = lowword(l); c += store_intarray(m,2,4,c); return 8; /* return number of chars filled */ } static int store_uint64array(uint64 *l, int n, unsigned char *c) { int i; for(i=0; i #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "mlfg.h" #include "int64.h" #define init_rng mlfg_init_rng #define get_rn_int mlfg_get_rn_int #define get_rn_flt mlfg_get_rn_flt #define get_rn_dbl mlfg_get_rn_dbl #define spawn_rng mlfg_spawn_rng #define get_seed_rng mlfg_get_seed_rng #define free_rng mlfg_free_rng #define pack_rng mlfg_pack_rng #define unpack_rng mlfg_unpack_rng #define print_rng mlfg_print_rng #define MAX_STREAMS mlfg_MAX_STREAMS #define NGENS mlfg_NGENS #define valid mlfg_valid #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Multiplicative Lagged Fibonacci Generator" #define NPARAMS 11 /* number of valid parameters */ int MAX_STREAMS = 0x7fffffff; /* Maximum number streams to init_sprng */ struct rngen { int rng_type; char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; uint64 *lags; uint64 *si; int hptr; /* integer pointer into fill */ int lval, kval, seed; }; struct vstruct { int L; int K; int LSBS; /* number of least significant bits that are 1 */ int first; /* the first seed whose LSB is 1 */ }; const struct vstruct valid[] = { {17,5,1,10}, {31,6,1,2}, {55,24,1,11}, {63,31,1,14}, {127,97,1,21}, {521,353,1,100}, {521,168,1,83}, {607,334,1,166}, {607,273,1,105}, {1279,418,1,208}, {1279,861,1,233} }; #define TWO_M52 2.2204460492503131e-16 /* 2^(-52) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ #define BITS 62 /* Initialization of ALFG part is m-2 bits */ #define MAX_BIT_INT (BITS-2) #define RUNUP (2*BITS) /* Do RUNUP iterations after initialization */ #define GS0 0x372f05ac #ifdef LONG64 #define INT_MOD_MASK (MASK64>>(64-BITS)) #define INT_MASK (MASK64>>(64-BITS+1)) #define INTX2_MASK ((((uint64)1)<=0;i--) { new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); temp >>= 1; } for (i=28;i<32;i++) { temp = bitcnt(reg_fill[0]&(mask<>(32-i))); new_fill[0] |= (1&temp)<=0;i--) { and(b[i],mask1,temp1) if(notzero(temp1)) add(a[i+1],ONE,a[i+1]); and(b[i],INTX2_MASK,temp1); lshift(temp1,1,a[i]); } } static void pow3(uint64 n, uint64 *ui) /* return 3^n (mod 2^BITS) */ { uint64 p, value, temp, bit, temp2, temp3; int exponent; set(n,p); seti(3,temp); seti(1,temp3); and(n,temp3,temp2); if(notzero(temp2)) seti(3,value) else seti(1,value) seti(1,bit); for(exponent=2; exponent<64; exponent++) { multiply(temp,temp,temp); lshift(bit,1,bit); and(bit,n,temp2); if(notzero(temp2)) multiply(value,temp,value); } and(value,MASK64,value); set(value,(*ui)); } static void findseed(int sign, uint64 n, uint64 *ui) { uint64 temp; pow3(n,&temp); if(sign&1) multiply(temp,MINUS1,temp); set(temp,(*ui)); } #define advance_state(genptr) {int lval = genptr->lval, kval = genptr->kval;\ int lptr;\ genptr->hptr--;\ if(genptr->hptr < 0)\ genptr->hptr = lval-1;\ lptr = genptr->hptr + kval;\ if (lptr>=lval)\ lptr -= lval;\ multiply(genptr->lags[genptr->hptr],genptr->lags[lptr],genptr->lags[genptr->hptr]);} static struct rngen **initialize(int rng_type, int ngen, int param, unsigned int seed, uint64 *nstart, unsigned int initseed) { int i,j,k,l,m,*order, length; struct rngen **q; uint64 *nindex, temp1, mask; length = valid[param].L; order = (int *) mymalloc(ngen*sizeof(int)); q = (struct rngen **) mymalloc(ngen*sizeof(struct rngen *)); if (q == NULL || order == NULL) return NULL; for (i=0;irng_type = rng_type; q[i]->hptr = 0; /* This is reset to lval-1 before first iteration */ q[i]->si = (uint64 *) mymalloc((length-1)*sizeof(uint64)); q[i]->lags = (uint64 *) mymalloc(length*sizeof(uint64)); q[i]->lval = length; q[i]->kval = valid[param].K; q[i]->parameter = param; q[i]->seed = seed; q[i]->init_seed = initseed; q[i]->narrays=2; q[i]->gentype = GENTYPE; if (q[i]->lags == NULL || q[i]->si == NULL) return NULL; } /* specify register fills and node number arrays */ /* do fills in tree fashion so that all fills branch from index */ /* contained in nstart array */ q[0]->stream_number = lowword(nstart[0]); get_fill(nstart,q[0]->lags,param,seed); si_double(q[0]->si,nstart,length); set(ONE,mask); for(m=0; mlags[m], &q[0]->lags[m]); else findseed(0,q[0]->lags[m], &q[0]->lags[m]); lshift(mask,1,mask); } add(q[0]->si[0],ONE,q[0]->si[0]); i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0;ksi; q[i]->stream_number = lowword(nindex[0]); get_fill(nindex,q[i]->lags,param,seed); si_double(nindex,nindex, length); for (j=0;jsi[j]); set(ONE,mask); for(m=0; mlags[m], &q[i]->lags[m]); else findseed(0,q[i]->lags[m], &q[i]->lags[m]); lshift(mask,1,mask); } add(q[i]->si[0],ONE,q[i]->si[0]); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1;k>0;k--) { order[2*k+1] = l+k; order[2*k] = order[k]; } order[1] = l; } free(order); for (i=ngen-1;i>=0;i--) { k = 0; for (j=1;jsi[j])) k = 1; if (!k) break; for (j=0;j=0) { for (j=0;j<4*length;j++) advance_state(q[i]); i--; } return q; } /* Initialize random number stream */ #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int param) #else int *init_rng(rng_type,gennum,total_gen,seed,param) int rng_type,gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen **p=NULL, *genptr; uint64 *nstart=NULL,*si; int i, length, k; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } length = valid[param].L; /* determine parameters */ k = valid[param].K; /* define the starting vector for the initial node */ nstart = (uint64 *) mymalloc((length-1)*sizeof(uint64)); if (nstart == NULL) return NULL; seti(gennum,nstart[0]); for (i=1;isi; while (lowword(si[0]) < total_gen && !highword(si[0])) si_double(si,si,length); NGENS++; genptr->rng_type = rng_type; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; genptr->arrays[0] = (int *) genptr->lags; genptr->arrays[1] = (int *) genptr->si; genptr->array_sizes[0] = genptr->lval*sizeof(uint64)/sizeof(int); genptr->array_sizes[1] = (genptr->lval-1)*sizeof(uint64)/sizeof(int); return (int *) genptr; } /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); /*printf("\t sprng: %lu\n", genptr->lags[genptr->hptr]);*/ #ifdef LONG64 return (genptr->lags[genptr->hptr]>>12)*TWO_M52; #else return (genptr->lags[genptr->hptr][1])*TWO_M32 + (genptr->lags[genptr->hptr][0])*TWO_M64; #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); #ifdef LONG64 return genptr->lags[genptr->hptr]>>33; #else return genptr->lags[genptr->hptr][1]>>1; #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *temp = (struct rngen *) igenptr; int i; uint64 *p; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } p = temp->si; genptr = initialize(temp->rng_type, nspawned,temp->parameter,temp->seed,p,temp->init_seed); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } si_double(p,p,temp->lval); for(i=0; iarray_sizes = (int *) mymalloc(genptr[i]->narrays*sizeof(int)); genptr[i]->arrays = (int **) mymalloc(genptr[i]->narrays*sizeof(int *)); if(genptr[i]->array_sizes == NULL || genptr[i]->arrays == NULL) return 0; genptr[i]->arrays[0] = (int *) genptr[i]->lags; genptr[i]->arrays[1] = (int *) genptr[i]->si; genptr[i]->array_sizes[0] = genptr[i]->lval*sizeof(uint64)/sizeof(int); genptr[i]->array_sizes[1] = (genptr[i]->lval-1)*sizeof(uint64)/sizeof(int); } NGENS += nspawned; *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; struct rngen *q; q = (struct rngen *) genptr; size = 4 + 24+16*q->lval + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ if(p == NULL) { *buffer = NULL; return 0; } p += store_int(q->rng_type,4,p); strcpy((char *) p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->hptr,4,p); p += store_int(q->lval,4,p); p += store_int(q->kval,4,p); p += store_int(q->seed,4,p); p += store_uint64array(q->si,q->lval-1,p); p += store_uint64array(q->lags,q->lval,p); *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned char *p; int i, found; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; p = (unsigned char *) packed; p += load_int(p,4,(unsigned int *)&q->rng_type); if(strcmp((char *) p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->hptr); p += load_int(p,4,(unsigned int *)&q->lval); p += load_int(p,4,(unsigned int *)&q->kval); p += load_int(p,4,(unsigned int *)&q->seed); /* check values of parameters for consistency */ for(i=found=0; ilval==valid[i].L && q->kval==valid[i].K) { found = 1; break; } if(found == 0) { fprintf(stderr,"ERROR: Unpacked parameters are not acceptable.\n"); return NULL; } q->narrays = 2; q->array_sizes = (int *) mymalloc(q->narrays*sizeof(int)); q->arrays = (int **) mymalloc(q->narrays*sizeof(int *)); if(q->array_sizes == NULL || q->arrays == NULL) return NULL; q->array_sizes[0] = q->lval*sizeof(uint64)/sizeof(int); q->array_sizes[1] = (q->lval-1)*sizeof(uint64)/sizeof(int); for(i=0; inarrays; i++) { q->arrays[i] = (int *) mymalloc(q->array_sizes[i]*sizeof(int)); if(q->arrays[i] == NULL) return NULL; } q->lags = (uint64 *) q->arrays[0]; q->si = (uint64 *) q->arrays[1]; p += load_uint64array(p,q->lval-1,q->si); p += load_uint64array(p,q->lval,q->lags); NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } sprng2.0/SRC/mlfg/mlfg.data100600 764 764 51622 6736173543 14610 0ustar chwangchwang1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1415911066 863754398 176193777 116183920 553831988 2129269519 920281116 816643758 211608358 667893922 1013642387 925903694 1354637784 1195408961 405550226 1160723497 694730397 453821204 949196364 945410040 1662945891 1382219580 2043159770 996618570 178120018 653579137 820727623 661270676 2141607972 957828023 15599396 934123276 405498384 1463894368 1596350686 1383971408 401806818 1899097687 1435392747 280044166 451535797 667891553 328081257 1404838802 1372423908 679494027 1862006328 2056473173 269394493 336138917 909032177 581660988 314791878 1175454363 1663824789 1975897213 782860028 947600045 2056631522 554900845 958491825 467464269 1084419666 324193819 328410499 925474559 1110871928 1813339558 1629371405 283333840 1729397961 699054089 1676777235 80120204 563439214 1123433668 1571384470 795397952 1163568631 1173697950 875025470 1270724394 2074362053 1991114956 1924898827 395467548 1317995558 835453867 45848263 490734899 1254527314 1166014910 925010564 1754993348 1030617174 515621579 239727235 312935503 247970997 2041231128 807800855 953023582 935038439 981096876 433096946 2121283663 581202621 1744378620 828052051 74082531 757117088 1470977045 1226866639 919321941 2004121677 883266750 1785905196 1773006200 1364307522 1538266683 18772703 789553563 30980478 1663359184 2146435145 662331959 1757759233 1033484021 455632505 290497330 274470917 422036712 1189625250 287261904 108395007 1351218821 66569817 1195242004 1556977983 179426526 1267893111 1760372829 1817116431 1075643649 886526580 919660953 1321658356 1722851223 1609870321 1978721730 387611524 571857310 512754693 594766505 1586894221 378514589 705833231 93189042 574533467 796035982 618717082 709622129 1016621500 769517324 380070887 884625363 836560510 717589286 1760589264 1752652145 2012213828 511359954 1668989206 1511804370 625680404 1239422926 1462724929 1363508673 306812441 3732111 1531256075 1081221917 1743679436 393721496 34533623 708088293 1318475436 102690723 1171438382 1467368976 1391083255 1102642459 1336047243 1621780307 1371606554 574540705 1124015787 927493373 308200721 1423045818 672893583 580263407 457222401 1029658533 1776369839 1835365956 1170624327 284752306 2017154155 610578098 1141504663 1262509647 203926253 1116964753 208874102 1179208379 1603588990 277718350 1943719683 1024149981 1798173807 1642621551 1011879675 2103040509 1085044987 716654720 1508350038 494027439 480853088 1944413426 1147135970 1157923848 606027416 99936483 855056188 1003971078 1984960014 772703801 848514041 1229059881 1528038590 638511859 557013705 1832400779 1475322199 1086818332 743119971 382299528 968193075 159961919 1542723225 25698362 1988262367 2018002873 1936123554 195327859 657935247 243670217 1638126310 1745855456 1714186832 2044971910 1825844872 681215965 744580311 1431909696 617135926 45883337 404305660 1418128758 1696570016 956993983 1708546581 15474574 889607394 1443832571 906917449 2006716320 1406930240 629365879 1414409921 733909111 1657513754 966853919 103339508 514184032 1969441535 1997515329 585668431 625417594 1862889323 1870417561 30924413 1121835174 1000765102 355482564 134853724 1233312675 610694819 92486554 916554444 1828453247 201525650 1131865759 354840432 2145379507 250659414 801197096 2018786822 78703238 378982443 1801681229 1727827390 1039879051 615759336 1759083332 1202452667 1908062337 1197994628 1828948812 95424944 1640450411 828149985 697423169 1508613549 1382079153 1784539927 1475773024 1029085082 1791303007 1162136830 583260098 61759169 1784938377 305061817 1653715166 352382817 857098300 1625462612 1481157488 2042510187 1524384019 1504355392 2065236858 1840819437 654648808 153274497 1150747834 1153036354 450218012 1681901621 1858459529 1294988750 1044913750 1126516198 778637056 395295075 1569926001 1656974970 1771840527 1093679503 299630624 1724524913 59638046 663677881 2025638847 1613241068 558081481 669446626 1469995534 12318760 1703817809 1726527454 1574550754 2096330888 88695219 1136618393 159529883 459463337 1878572988 1746359419 1922251707 836786879 234170641 1388749363 67486428 606008713 379090882 1014454838 1870606359 493659301 255397772 1779960663 1648318975 1056415637 1053562861 946641171 1638701732 1484378635 166919624 73933550 127478512 67049277 2141739038 1383757011 1277505226 217627134 1729686702 215836453 507829502 1297262388 1065023423 1166162663 2118370625 1600373301 582356622 518727986 1057479645 1139371156 760451006 1298553848 493656176 755063548 1221540431 2066178339 2107003517 973995769 1008442424 664996150 1643034021 1997144721 888214295 1455347431 1747211104 953974185 1854727271 51950094 1969226547 385350350 1353384322 1556125725 1351329627 575727567 1810222152 616117321 1817150626 2099005577 1513033110 1194491985 34369753 0.556365 0.464570 0.988374 0.578140 0.951955 0.577156 0.849277 0.242430 0.334194 0.057300 0.446225 0.873265 0.942439 0.953111 0.411449 0.113237 0.187278 0.294615 0.818375 0.780273 0.951770 0.013072 0.323974 0.512235 0.362725 0.363430 0.275777 0.123226 0.652680 0.994410 0.086023 0.777441 0.479927 0.669029 0.682351 0.394146 0.886341 0.029105 0.737987 0.879878 0.280079 0.913448 0.227181 0.894477 0.486361 0.420041 0.065549 0.557863 0.062585 0.260766 0.809889 0.726972 0.726049 0.190116 0.906481 0.514734 0.036951 0.933179 0.751360 0.438607 0.578829 0.582993 0.547446 0.953132 0.197733 0.810112 0.685195 0.663330 0.581476 0.852351 0.750613 0.850654 0.766051 0.092521 0.443414 0.175103 0.702127 0.296415 0.129511 0.401560 0.335992 0.658406 0.028530 0.382178 0.243521 0.269750 0.220765 0.144021 0.503041 0.461049 0.589106 0.528974 0.543907 0.401842 0.848025 0.546879 0.153792 0.871680 0.783100 0.319127 0.881548 0.054978 0.240050 0.668867 0.773522 0.615138 0.460975 0.112203 0.255110 0.843256 0.495164 0.820179 0.658619 0.311778 0.569426 0.998841 0.659705 0.987240 0.670992 0.938948 0.145920 0.240706 0.321197 0.603820 0.845679 0.352306 0.189999 0.881878 0.406841 0.915780 0.600408 0.977865 0.949506 0.677976 0.999998 0.275047 0.287840 0.949228 0.070744 0.802020 0.391978 0.907116 0.677658 0.574524 0.706702 0.752933 0.260338 0.999984 0.553907 0.308594 0.292198 0.149311 0.962380 0.463041 0.405696 0.337848 0.414911 0.022559 0.176959 0.469133 0.110039 0.154065 0.699369 0.870109 0.314921 0.541116 0.718871 0.287507 0.980954 0.559291 0.105017 0.871972 0.709174 0.371855 0.609523 0.497115 0.474982 0.186873 0.390046 0.673785 0.251868 0.320715 0.410845 0.830038 0.579706 0.165204 0.861112 0.298581 0.975676 0.549081 0.025104 0.950148 0.981877 0.074374 0.771066 0.835633 0.224579 0.528940 0.795009 0.390040 0.455583 0.944649 0.676607 0.924170 0.722930 0.003352 0.917310 0.199162 0.506158 0.131757 0.605962 0.774411 0.394792 0.738743 0.535345 0.700964 0.881903 0.201232 0.942461 0.399838 0.186060 0.230631 0.853556 0.427495 0.055923 0.985979 0.761894 0.672840 0.624820 0.570923 0.864983 0.487831 0.471306 0.983926 0.965564 0.608061 0.423419 0.744052 0.829526 0.085885 0.716205 0.617752 0.076796 0.093574 0.476120 0.672465 0.395681 0.329645 0.935817 0.080442 0.961491 0.840832 0.246548 0.697949 0.720137 0.246161 0.101111 0.010964 0.757919 0.140282 0.349373 0.369731 0.144995 0.948966 0.180601 0.147219 0.242224 0.615737 0.126176 0.622113 0.698421 0.869097 0.256896 0.503387 0.364886 0.185977 0.081276 0.700407 0.828774 0.725358 0.888289 0.175982 0.763644 0.147136 0.063501 0.315750 0.420633 0.823039 0.210119 0.003502 0.162781 0.247427 0.340346 0.857208 0.730889 0.254988 0.546633 0.390497 0.791511 0.485924 0.283397 0.607676 0.497457 0.485160 0.346415 0.571326 0.988003 0.896707 0.909368 0.032770 0.898584 0.240087 0.855993 0.808528 0.548880 0.904694 0.609347 0.941593 0.585342 0.468322 0.028794 0.890791 0.620120 0.285701 0.985859 0.533735 0.291378 0.329344 0.019415 0.110826 0.656740 0.445437 0.555885 0.286938 0.230966 0.096156 0.979198 0.641853 0.311523 0.637631 0.244436 0.140502 0.248634 0.413755 0.275295 0.715571 0.306643 0.928175 0.879426 0.476133 0.064039 0.265420 0.623167 0.790017 0.486200 0.255699 0.367829 0.072442 0.752906 0.146597 0.211205 0.382453 0.106569 0.766809 0.994993 0.488874 0.673493 0.093841 0.081955 0.484671 0.939592 0.234405 0.839118 0.371347 0.936747 0.878662 0.762438 0.497614 0.241631 0.346110 0.667393 0.238548 0.964985 0.548044 0.706433 0.156751 0.450895 0.747294 0.505023 0.147009 0.763300 0.526743 0.966622 0.775326 0.075134 0.850813 0.546348 0.716117 0.606450 0.764861 0.565164 0.232192 0.887247 0.738029 0.753110 0.013010 0.222637 0.300216 0.481673 0.023479 0.280923 0.381830 0.508857 0.722632 0.008241 0.216166 0.949090 0.440561 0.690099 0.876038 0.699696 0.368696 0.960746 0.771743 0.966088 0.843554 0.915028 0.168329 0.933063 0.948936 0.685973 0.721296 0.768305 0.286345 0.346782 0.783534 0.679570 0.975080 0.999663 0.455780 0.081140 0.835590 0.588488 0.927249 0.470078 0.490836 0.897980 0.281317 0.012735 0.092694 0.594129 0.425354 0.373070 0.292350 0.961893 0.676502 0.948787 0.588270 0.339951 0.271071 0.257900 0.895763 0.839618 0.695309 0.971764 0.385455 0.049776 0.092051 0.265841 0.632942 0.580560 0.651059 0.897529 0.642173 0.360060 0.277537 0.414824 0.698736 0.645108 0.023722 0.163647 0.805548 0.507287 0.388646 0.829317 0.459725 0.335222 0.808159 0.038340 0.849234 0.530963 0.011742 0.727507 0.422920 0.214055 0.718802 0.087040 0.254013 0.880395 0.127240 0.85946695012587 0.80056548692219 0.39640787665780 0.30348170192968 0.97470308936659 0.15183935089797 0.80678229168707 0.41596220466227 0.46882840344583 0.86467446685724 0.88383852316380 0.13910334436739 0.51046210289985 0.87410538081039 0.43094011194741 0.63968490852616 0.33074547539987 0.68302758839059 0.28935077937821 0.63981321390559 0.96026837233886 0.23811802199661 0.11015051038739 0.10228639123466 0.42445707407712 0.91892284528194 0.34949370893663 0.44087992840965 0.07803874208123 0.88262629989268 0.60435421591064 0.09281185965636 0.71896288616325 0.92521185176017 0.07977189520257 0.35379194231503 0.30686128098497 0.13939489354464 0.91354304826045 0.00239357327978 0.89315284029164 0.20755006448190 0.80886747166137 0.01223880374289 0.27529479061168 0.94885097548783 0.88115642112811 0.93601717172543 0.97920099319651 0.40692646552672 0.28335740759159 0.15193030046281 0.52964895791582 0.99236862384579 0.39072970134332 0.80892471991117 0.66648069833687 0.91860444149815 0.93444964756581 0.07700984911627 0.19336476684994 0.17254322252082 0.33287036817726 0.97530524855316 0.02218692404079 0.23647534577431 0.82912597594910 0.73396996587774 0.95067069730043 0.59470032664439 0.18775462415836 0.98948597084984 0.98837499763500 0.90422865807413 0.63285132384081 0.52649098010234 0.77084279037276 0.34835483881441 0.74425879181949 0.31627147315073 0.39750202262375 0.33600293010495 0.27267557469964 0.45294888366820 0.37136739215805 0.38240828232189 0.72709027138574 0.82911364323873 0.81013993419170 0.31047173417153 0.11150243546357 0.01872270340904 0.65122285389416 0.96533210099204 0.07707090000422 0.16315897867070 0.18968465844986 0.04513422410788 0.54245412541945 0.99834484551506 0.19695437442412 0.97634304967117 0.49752501217347 0.46339180836231 0.92345651920539 0.36119290353744 0.62031737954453 0.39639455474976 0.51532146673407 0.67559715285917 0.06697862119140 0.32714987412626 0.00859764979173 0.46307743364810 0.45561644242125 0.92600053170868 0.87481932968075 0.39712263331300 0.66137359332269 0.27162687728351 0.93750666321480 0.66078939867512 0.80970984784050 0.24849411903893 0.46339573449724 0.72413333835416 0.89448935763164 0.62521852945918 0.28313638059790 0.12269538994015 0.80739956549571 0.66250024791868 0.09593994446749 0.77215721048367 0.77220170160662 0.28316501029737 0.90161074733187 0.70147580958018 0.30908784046016 0.51723922330905 0.28775894734101 0.97178344688766 0.62575423884819 0.51542045411449 0.74676570938357 0.23819615512637 0.70002304649226 0.15057761347154 0.60006375258574 0.63112755508236 0.55170698141761 0.35850302853081 0.37264263691868 0.21435461387003 0.02493232321893 0.55130545599559 0.43074249503634 0.83507103750842 0.73099197195015 0.79720389216208 0.03468113499158 0.94950186840938 0.63193396197243 0.08450410350550 0.18749560326950 0.11407333649404 0.70942111560032 0.41480670603759 0.08237400640921 0.54266862789824 0.18836253198059 0.45539663771361 0.36134790270536 0.10665120831904 0.61781824432736 0.29373945174788 0.61880511508321 0.80597079738558 0.04193730103877 0.45777591709970 0.78525237493057 0.90739536187589 0.22809322953320 0.83230042596123 0.85618984265886 0.68122838123657 0.83103891413751 0.90767180519304 0.14890630237246 0.88719391199446 0.98611578951938 0.46214011945379 0.75160953343117 0.13398905613895 0.16346613525851 0.43303339109780 0.34892176138497 0.50702282492501 0.97631422050038 0.93911765305029 0.42636173516627 0.65485309931944 0.22952002002581 0.71331893721531 0.78268716214510 0.86641236755804 0.56481786578417 0.28671003623434 0.95615602185464 0.75723798426711 0.25874970573985 0.55237167659562 0.96591099186892 0.35145791890784 0.52075056348867 0.81978471983402 0.94264769768073 0.22671495147598 0.71736867806491 0.49601322222352 0.26486393147445 0.51351841999509 0.01454799240635 0.04353412037532 0.02860247127062 0.02841255233654 0.49618141751992 0.14770945990786 0.85147523337192 0.14751009683938 0.16193010351461 0.59463235725218 0.17244194835469 0.85241662900740 0.39121635935361 0.43060632824598 0.15210475353851 0.32025952301746 0.11885676522209 0.90883511166407 0.41349462471682 0.02710297992735 0.50462328235337 0.97311077202069 0.14548304106656 0.09000237643191 0.32637376266085 0.73140002168361 0.25421256360450 0.66124968707229 0.84082228972246 0.58059365452682 0.17838947416790 0.09666475154608 0.11424099049151 0.99754656359987 0.07215969777675 0.04678411506190 0.41273479283618 0.56392632739435 0.94351912744514 0.35461403274363 0.68804698080462 0.68693652178112 0.11815054430796 0.80969919454586 0.04977707560794 0.45585533049243 0.76244201016829 0.26588020696119 0.28692575805366 0.07156898425345 0.50877163076699 0.78787604366826 0.06086863628077 0.83916967653645 0.58712064686126 0.26287989406865 0.08490745519403 0.01403989849807 0.00632466724933 0.81911777066838 0.44176692587976 0.19611076015327 0.04855708030016 0.69417526104711 0.93381073060807 0.75439764792612 0.45663934505440 0.05407957211177 0.18312074968758 0.09883943964941 0.98846923813337 0.70291464913607 0.88909192620075 0.21367536361993 0.43679440437918 0.29871227072608 0.67479945674044 0.40980925564576 0.70996175216629 0.95366018725589 0.48075945067130 0.83985108486118 0.78391528783113 0.59850713147345 0.07145924344622 0.82743318743691 0.07718654192813 0.00475494506683 0.21062738131877 0.24820841598252 0.04925861833583 0.15961829993920 0.46244800765542 0.32622426254585 0.58902624970504 0.76111683911418 0.62602055927647 0.24915654979955 0.21453147343906 0.13917292166892 0.78261868199577 0.90407578319224 0.64269810726328 0.34421569150925 0.38834540609775 0.85295927187742 0.97604630413758 0.92275339501656 0.60656874670885 0.78052304178928 0.11232254294913 0.23615491325053 0.37017074416552 0.54904650610977 0.23025353849609 0.83418059937786 0.96942830554942 0.46636752315076 0.17791276035923 0.91874920068474 0.88275662029807 0.15431314794949 0.27788715937211 0.94024072930113 0.67330725751651 0.71305095881507 0.10143158260350 0.47075359401464 0.38411039546125 0.71569386549073 0.08010477860399 0.95856060891146 0.22704756719775 0.31337251414570 0.73880289599004 0.64281842501174 0.02494690599583 0.45172745134082 0.61737429986686 0.39330579719335 0.90153911085042 0.52463465376154 0.81335401544551 0.44615395795954 0.47198312760876 0.27526717095613 0.12852570790385 0.58667025718580 0.70467450308716 0.84240069042223 0.48956113506305 0.37194763477258 0.66297414145676 0.51378403401043 0.30911982324676 0.60266344770939 0.33357813711707 0.08044358770383 0.52354552871638 0.14783240365495 0.87910231141956 0.44706123715282 0.11499352245197 0.88960222028327 0.52944266387240 0.22718574716011 0.76495937757460 0.05351501111166 0.43996714557439 0.13835074220107 0.42355586507782 0.26704607994602 0.67179288052483 0.06845778996343 0.43994161176626 0.27130393775691 0.57455745750582 0.30940025188281 0.61545544056404 0.56102198900356 0.18319454815460 0.86886330510216 0.34092270950420 0.02118216653959 0.15792182966227 0.40078241915828 0.10640342617356 0.05332129757032 0.56017947847911 0.32214601452229 0.21311799031540 0.81690205774055 0.24296072470632 0.43711577893629 0.43157526807752 0.17399287996012 0.13844320634899 0.01547680655846 0.39881774502858 0.40771913173368 0.27326264828934 0.19060341611863 0.90704563761546 0.18613584195212 0.22757469625008 0.84736639858476 0.17336967002616 0.89232890977906 0.82720750173978 0.15351595803650 0.67301807185670 0.31529863726934 0.64544221588972 0.15977581883501 0.31881798743326 0.32548143473083 0.57093210852830 0.50715277844260 0.02849441721621 0.91495976294511 0.71856031716435 0.67198776080900 0.81056231844221 0.87440573539069 0.71962515097232 0.50307642557387 0.76265845836830 0.74918889615765 0.49018047724802 0.43587403133788 0.79601624747205 0.57226606366110 0.23858735332484 0.03031094086757 0.15539026983738 0.70912999286214 0.96987113750414 0.37023441976761 0.19344196090348 0.92144700477822 0.75335399065430 0.24614770608711 0.16678737707181 0.67387963017395 0.86867710107548 0.58706933692789 0.60312554329572 0.74118742840657 0.61037453618362 0.42327348411580 0.72752437308678 0.97758070581347 0.54745935819843 0.37808773617863 0.59185225382694 0.81967621520487 0.94566229236244 0.11244417310728 0.47349383068317 0.83777050899133 0.51336444911024 0.98975442884257 0.27760064812326 0.43215096619470 0.01465744004170 0.53535622021238 0.02089496744830 0.54073044259555 0.68988816248347 0.00477464521735 0.77723224926727 0.95596283833187 0.62202522856195 0.24710812225554 0.22469906377002 0.15572557557707 0.16096609432528 0.21580851895023 1428368087 1665524327 1270317232 1824115955 512254602 86349257 726836169 648218954 1771285379 1867253637 1683712352 1400185219 1356940758 1601759171 1230636265 1723299111 172261367 222986213 969005022 1011396380 613710413 1507530575 461592300 1799438731 1263949021 1737379567 494813349 971176659 1805179369 221345750 1213262015 1245539906 823537597 1763950955 465969841 1499397093 212889760 1932650612 1665101351 1718191066 808552057 139497366 1584233128 1792285903 808611697 1696608109 591966004 1245736921 73591053 288262780 1883502475 914479277 1494647081 427607079 348451535 1093170849 976601775 125583541 1166593425 1908382582 1556307350 1150847972 1648718153 92193637 670730606 1259013175 430814400 1483442407 805308247 1214921890 912203341 1669106275 1928506533 2139676987 2032324070 1939910549 1755561975 615917460 1665791258 551708917 773804186 295972610 768536204 840207220 2124308057 2105110470 811894388 1207833177 721678025 1090543742 1727120188 1107646163 1186884834 1825003313 2134870661 183116896 956515367 45148199 1236293287 1934801264 1890181208 66493912 946242452 623571602 2114909637 1026151105 1175233941 1808259128 290876938 1920460040 398050799 558695992 1370603791 69915127 433963956 1763268462 1082755345 1154379662 1382592565 1865474156 1993554219 2065273719 1915537838 2065403559 813521382 880532525 922251345 1670472148 2063148946 467652340 1838888164 180543021 1661153355 2109542934 2116375730 114052042 1356969801 300084364 2063237281 781410148 2111805687 1646975985 1917610835 1775597477 1844495938 1732012163 378420045 632659781 665549512 1434901869 1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1070502497 185458557 394571982 625063792 1202551232 1106745477 1922274594 1933100968 1849320089 2115080830 1867777732 2130631723 596072318 1653803768 727441528 1679567064 199180016 1759301942 1362247603 843443807 2078602027 1855953608 248916061 853446759 55795458 653874832 60710992 1588551358 1066619885 2096944326 1459833265 2067889981 1180737744 14153581 1877497599 1864031763 288585453 1490975114 137051711 1973393940 1973776514 238811539 307692916 1759733375 1381965177 1608191452 865161446 1908119138 1935244809 1454271467 sprng2.0/SRC/mlfg/mlfg.h100600 764 764 1445 6736173543 14104 0ustar chwangchwang #ifndef _mlfg_h #define _mlfg_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int mlfg_get_rn_int ANSI_ARGS((int *igenptr)); float mlfg_get_rn_flt ANSI_ARGS((int *igenptr)); double mlfg_get_rn_dbl ANSI_ARGS((int *igenptr)); int *mlfg_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int mlfg_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int mlfg_get_seed_rng ANSI_ARGS((int *genptr)); int mlfg_free_rng ANSI_ARGS((int *genptr)); int mlfg_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *mlfg_unpack_rng ANSI_ARGS(( char *packed)); int mlfg_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/mlfg/tmp100600 764 764 523 6736173543 13505 0ustar chwangchwang#define init_rng mlfg_init_rng #define get_rn_int mlfg_get_rn_int #define get_rn_flt mlfg_get_rn_flt #define get_rn_dbl mlfg_get_rn_dbl #define spawn_rng mlfg_spawn_rng #define get_seed_rng mlfg_get_seed_rng #define free_rng mlfg_free_rng #define pack_rng mlfg_pack_rng #define unpack_rng mlfg_unpack_rng #define print_rng mlfg_print_rng sprng2.0/SRC/mlfg/READMEver2.CHANGES100644 764 764 260 6736173543 15516 0ustar chwangchwang7 June 1999; Chris S. Makefile: 1. in 'all ;' added 'checksprng' 2. added section 'checksprng'. ---------------------------------------------------------------------------- sprng2.0/SRC/multiply.h100600 764 764 1515 6736173543 14107 0ustar chwangchwang#ifdef LONG64 #define mult_48_64(a,b,c) c = (a*b); #define multiply(genptr) mult_48_64(genptr->seed,genptr->multiplier,genptr->seed); genptr->seed += genptr->prime; genptr->seed &= LSB48; #else #define mult_48_32(a,b,c) c[0] = a[0]*b[0]; c[1] = a[1]*b[0]+a[0]*b[1];\ c[2] = a[0]*b[2]+a[1]*b[1]+a[2]*b[0];\ c[3] = a[3]*b[0]+a[2]*b[1]+a[1]*b[2]+a[0]*b[3]; #define multiply(genptr,m,s,res) s[3] = (unsigned int) genptr->seed[0] >> 12;\ s[2] = genptr->seed[0] & 4095; s[1] = genptr->seed[1] >> 12;\ s[0] = genptr->seed[1] & 4095;\ mult_48_32(m,s,res);\ genptr->seed[1] = res[0] + ((res[1]&4095) << 12) + genptr->prime;\ genptr->seed[0] = ( (unsigned int) genptr->seed[1] >> 24)\ + res[2] + ((unsigned int) res[1] >> 12 ) + (res[3] << 12);\ genptr->seed[1] &= 16777215; genptr->seed[0] &= 16777215; #endif sprng2.0/SRC/lcg64/ 40700 764 764 0 7034410053 12653 5ustar chwangchwangsprng2.0/SRC/lcg64/Makefile100600 764 764 1565 6736173543 14443 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => lcg64.o object # make lcg64.o => lcg64.o object # # Object files created during the compilation process can be deleted finally # by typing # make clean # make realclean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lcg64.o lcg64.o : $(SRCDIR)/interface.h lcg64.c lcg64.h $(SRCDIR)/memory.h \ $(SRCDIR)/primes_64.h $(SRCDIR)/multiply.h \ $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) -I$(SRCDIR) lcg64.c clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out sprng2.0/SRC/lcg64/lcg64.c100600 764 764 41442 6736173543 14104 0ustar chwangchwang /*************************************************************************/ /*************************************************************************/ /* Parallel 64-bit Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: The modulus is 2^64 */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 1.0, created 20 May 1998 */ #include #include #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "lcg64.h" #include "primes_64.h" #include "store.h" #define init_rng lcg64_init_rng #define get_rn_int lcg64_get_rn_int #define get_rn_flt lcg64_get_rn_flt #define get_rn_dbl lcg64_get_rn_dbl #define spawn_rng lcg64_spawn_rng #define get_seed_rng lcg64_get_seed_rng #define free_rng lcg64_free_rng #define pack_rng lcg64_pack_rng #define unpack_rng lcg64_unpack_rng #define print_rng lcg64_print_rng #define MAX_STREAMS lcg64_MAX_STREAMS #define NGENS lcg64_NGENS #define PARAMLIST lcg64_PARAMLIST #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "64 bit Linear Congruential Generator with Prime Addend" int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #endif unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, {0xe78b6955U,0x2c6fe96eU}, {0x31a53f85U,0x369dea0fU}}; /*** Change this to the type of generator you are implementing ***/ struct rngen { int rng_type; char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; int spawn_offset; /*** declare other variables here ***/ unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; #else /* No 64 bit type available, so use array of floats */ double state[3], multiplier[3];/* simulate 64 bit arithmetic */ #endif }; /*************************************************************************/ /* You should not need to look at the next few lines! */ #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU #define TWO_M22 2.384185791015625e-07 /* 2^(-22) */ #define TWO_P22 4194304 /* 2^(22) */ #define TWO_M20 9.5367431640625e-07 /* 2^(-20) */ #define TWO_P20 1048576 /* 2^(20) */ #define TWO_M42 2.273736754432321e-13 /* 2^(-42) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ /* */ /************************************************************************/ int NGENS=0; /* number of random streams in current process */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int param) #else int *init_rng(rng_type,gennum,total_gen,seed,param) int rng_type,gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i; double tempdbl; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) /* check if memory allocated for data structure */ return NULL; /* Initiallize data structure variables */ genptr->rng_type = rng_type; genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed & 0x7fffffff; /* Only 31 LSB of seed considered */ genptr->parameter = param; genptr->spawn_offset = total_gen; /*** Change the next line depending on your generators data needs ***/ genptr->narrays = 0; /* number of arrays needed by your generator */ if(genptr->narrays > 0) { genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; } else { genptr->array_sizes = NULL; genptr->arrays = NULL; } /*** Change the next line depending on your generators data needs ***/ /* initiallize ...array_sizes to the sizes of the arrays */ for(i=0; inarrays; i++) { genptr->arrays[i] = (int *) mymalloc(genptr->array_sizes[i]*sizeof(int)); if(genptr->arrays[i] == NULL) /* check if memory allocated for data structure */ return NULL; } /*** Add initialization statements for your data in the arrays and other variables you have defined ***/ getprime_64(1,&genptr->prime,gennum); #ifdef LONG64 genptr->multiplier = ((unsigned LONG64) PARAMLIST[param][1])<<32 | ((unsigned LONG64) PARAMLIST[param][0]); genptr->state = ( ((unsigned LONG64) INIT_SEED1)<<32 | INIT_SEED0) ^(((unsigned LONG64) seed<<33)|gennum); #else genptr->multiplier[0] = (double) (PARAMLIST[param][0]&0x3fffff); genptr->multiplier[1] = (double) (PARAMLIST[param][0]>>22 | (PARAMLIST[param][1]&0xfff)<<10); genptr->multiplier[2] = (double) (PARAMLIST[param][1]>>12); genptr->state[0] = (double) ((INIT_SEED0^gennum)&0x3fffff); genptr->state[1] = (double) ((INIT_SEED0^gennum)>>22 | ((INIT_SEED1 ^ (unsigned)seed<<1)&0xfff)<<10); genptr->state[2] = (double) ((INIT_SEED1 ^ (unsigned)seed<<1)>>12); #endif for(i=0; i<127*genptr->stream_number; i++) tempdbl = get_rn_dbl((int *) genptr); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } #ifdef LONG64 #define advance_state(genptr) genptr->state = genptr->state*genptr->multiplier + genptr->prime; #else #define advance_state(genptr) {double t0, t1, t2, t3, st0, st1, st2;\ t0 = genptr->state[0]*genptr->multiplier[0] + genptr->prime;\ t1 = (double) (int) (t0*TWO_M22); \ st0 = t0 - TWO_P22*t1; \ assert( (int) st0 == st0); \ t1 += genptr->state[1]*genptr->multiplier[0] + \ genptr->state[0]*genptr->multiplier[1]; \ t2 = (double) (int) (t1*TWO_M22); \ st1 = t1 - TWO_P22*t2; \ assert( (int) st1 == st1); \ t2 += genptr->state[2]*genptr->multiplier[0] + \ genptr->state[1]*genptr->multiplier[1] + \ genptr->state[0]*genptr->multiplier[2];\ t3 = (double) (int) (t2*TWO_M20); \ st2 = t2 - TWO_P20*t3; \ assert( (int) st2 == st2); \ genptr->state[0] = st0; \ genptr->state[1] = st1; \ genptr->state[2] = st2;} #endif /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 #ifdef _LONG_LONG #define EXPO 0x3ff0000000000000ULL #else #define EXPO 0x3ff0000000000000UL #endif static double dtemp[1] = {0.0}; advance_state(genptr); /* next state in sequence */ #if defined(CONVEX) || defined(O2K) || defined(SGI) || defined(GENERIC) *((unsigned LONG64 *) dtemp) = (genptr->state>>12) | EXPO; return *dtemp - (double) 1.0; #else return genptr->state*TWO_M64; #endif #else /* 32 bit machine */ #define EXPO 0x3ff00000 #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2; static double temp[1] = {0.0}; advance_state(genptr); /* next state in sequence */ ist0 = genptr->state[0]; ist1 = genptr->state[1]; ist2 = genptr->state[2]; #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) /*IEEE mantissa is 52 bits. */ ((unsigned int *)temp)[LSB] = ist1<<10 | ist0>>12; ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else return genptr->state[2]*TWO_M20 + genptr->state[1]*TWO_M42 + genptr->state[0]*TWO_M64; #endif #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { #ifdef LONG64 struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); /* next state in sequence */ return genptr->state>>33; #else return (int) (get_rn_dbl(igenptr)*0x80000000U); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } for(i=0; istream_number + tempptr->spawn_offset*(i+1); if(gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ seed = (tempptr->init_seed)^gennum; else seed = tempptr->init_seed; /* Initialize a stream. This stream has incorrect spawning information. But we will correct it below. */ genptr[i] = (struct rngen *) init_rng(tempptr->rng_type,gennum, gennum+1, seed, tempptr->parameter); if(genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } genptr[i]->spawn_offset = (nspawned+1)*tempptr->spawn_offset; } tempptr->spawn_offset *= (nspawned+1); *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; struct rngen *q; q = (struct rngen *) genptr; size = 4 + 48 + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ if(p == NULL) { *buffer = NULL; return 0; } p += store_int(q->rng_type,4,p); strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->narrays,4,p); p += store_int(q->spawn_offset,4,p); p += store_int(q->prime,4,p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(q->state,8,p); p += store_long64(q->multiplier,8,p); #else /* No 64 bit type available */ m[0] = q->state[2]; temp = q->state[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->state[1]; temp = q->state[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); m[0] = q->multiplier[2]; temp = q->multiplier[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->multiplier[1]; temp = q->multiplier[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned int i, m[2]; unsigned char *p; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; p += load_int(p,4,(unsigned int *)&q->rng_type); if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->narrays); p += load_int(p,4,(unsigned int *)&q->spawn_offset); p += load_int(p,4,&q->prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&q->state); p += load_long64(p,8,&q->multiplier); #else /* No 64 bit type available */ p += load_intarray(p,2,4,m); q->state[0] = (double) (m[1]&0x3fffff); q->state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->state[2] = (double) (m[0]>>12); p += load_intarray(p,2,4,m); q->multiplier[0] = (double) (m[1]&0x3fffff); q->multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->multiplier[2] = (double) (m[0]>>12); #endif q->array_sizes = NULL; q->arrays = NULL; NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } sprng2.0/SRC/lcg64/lcg64.data100600 764 764 51602 6736173543 14572 0ustar chwangchwang129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 2010879945 1804161259 1943956955 1041319607 153084571 1432948984 122398495 318575638 1634767737 633110234 1361694648 254964447 593727778 259547807 136835259 1238497692 1680402580 1178530723 135540683 148668461 45539723 454720872 1333077279 233548691 1675183267 853550146 889103151 855851873 1499272128 689751706 1174997923 589946300 678833034 391644013 1967161001 714521683 1125390432 985047121 1948907334 175911730 473227105 203632877 1366405529 172372195 682805398 682476780 1214551386 1719022232 752622383 898669619 158227376 1297469978 1322772351 469615914 591638004 548392693 1882351983 276069981 177157087 2111922002 1312418998 1650432294 938162384 2112406631 1492067256 836051639 142442036 945693969 1567865357 1928211757 688594572 372475856 1141999915 302855089 873230816 580561691 1709595853 1053898842 509063076 501404796 1419007427 874818845 2073464797 409855786 943281468 2055207853 1990707150 1262385810 1637440746 395094880 1290602018 1728468891 1524569476 1580287313 1415855590 2054976780 1103978024 1362268726 348869292 172393262 108002188 1660730502 1777018323 1076755936 675683105 258733167 1329818884 2054914296 104888196 1523224475 858590009 2012795577 1976115807 421904641 1534086210 441376090 1742003076 526491187 751577402 1350476989 1434340076 281936034 1276586748 1260580579 1798567614 1909499649 1938242776 1926971766 2042298621 261579250 1129640426 1287845806 16687454 727996663 2068604139 1844503326 1123075168 689991990 118371670 1809499605 1458781281 567930064 989205512 273465902 1172772292 764224367 336507125 437741416 275145517 1983093934 31319566 200276497 2068121658 2051527559 2038606076 1944548393 796074762 1247898757 687912044 429233861 821444816 496923412 1142066890 687925556 492470004 1390722742 1521879455 1974579434 805822051 1865482055 1999715009 1212160181 30495914 1156556123 247240124 1671059930 1761677390 784254254 1264090193 15876475 702177847 615596408 2076640049 1727873285 624331463 1788356519 94907575 112361542 3518875 220614191 459932779 1536159717 1893010519 558492661 414898191 48002673 1531744898 1890561806 794765385 1578613141 1157318663 1805979904 957477894 1277212555 732366970 383778117 2046915754 846563091 12862552 300572680 1781791383 948916546 573222498 244588685 2091545582 721158395 1997936507 329432191 2061638348 381161203 2002322982 652311919 1653197653 2002238336 1154702735 2093235107 1887635645 188871677 1545698905 1547545438 965219800 717519158 1091393043 496483143 1733183873 1631014390 1580705150 557808141 1157701699 1793840436 945209894 1056606742 144746250 1032663450 347966789 442945097 1649623235 1409559766 1419371903 299580056 1398326113 321368907 1055573592 110627695 948624774 599127409 1191440478 992439540 381913597 712717761 1016012733 1907873678 1281608554 666716673 1054021951 720484978 1954873697 1364344715 1950020389 76844302 108494593 1722345683 1529366861 1958377610 1434730126 1480714672 1136312807 213589410 1529386925 816484618 442955517 1543716915 1931114273 1740154827 497466577 1289029421 1133745647 318911414 236658364 878938378 1576461944 1875338198 1361969982 852214799 332600146 1706114067 799783358 303806135 1310518637 1089416597 2081846362 359355729 956109779 1460719220 1092427667 851128826 1901134793 808554401 690640853 1611179491 1184400890 1921566005 76539758 2115833205 1256013245 1944222171 1056074136 1969820439 646398016 1150871269 1873519197 2084358497 1206439736 226237162 311064203 1956503379 210976685 150327498 979281982 1406765077 389585470 786069589 879638206 2092447982 1903631636 1956830395 114994528 1616965676 34272449 1617008291 1108920 1079529446 340466583 1532846380 1844866907 1362333710 860351975 2062094538 446824465 780349989 1629183125 1773637149 1837956051 1664768347 1934291463 1926141985 1211168717 1685016267 719465066 754276759 1450206325 1818180027 191119363 1273592779 1678307160 651564516 1702128881 1926752799 626892701 1935765857 110211580 1419217059 538784109 1119988430 584038367 1785673102 1280269736 410553964 1275094742 1556271192 926061176 1826589813 1355447466 652320378 2042838840 859727690 239427917 1313058938 880394875 1970007904 821640931 1839839824 1847433512 26250491 1273738426 1137068021 1558389971 21809782 833665888 1435407902 140594975 316406044 510973724 158460778 1893365660 295618631 467025898 1438533597 1961412185 1394192989 1427942212 1170183857 1199909587 1504242532 1569618569 785440264 10487382 1684030713 888687985 765809585 624376243 1123368299 740379876 681463557 827084204 1799076781 2116427765 94606483 2024613680 1819071749 39334281 284714479 1065364875 521388149 452494594 1261048129 331081934 389767227 962985563 846025227 1320298203 688730943 351575530 280450554 1535545708 1938402605 111921332 399766070 1563707466 1233213370 0.455225 0.079967 0.748381 0.215786 0.910184 0.428336 0.157316 0.320319 0.409338 0.512198 0.588366 0.708398 0.750151 0.694167 0.643218 0.255542 0.479000 0.505297 0.364877 0.387817 0.475706 0.935013 0.237495 0.249721 0.810123 0.667207 0.012192 0.322538 0.228260 0.752865 0.004237 0.304370 0.754472 0.702557 0.761873 0.515189 0.759003 0.505866 0.408840 0.940986 0.238939 0.288976 0.300359 0.723310 0.920419 0.373671 0.220838 0.855024 0.042578 0.895455 0.964293 0.336728 0.360173 0.995066 0.141308 0.469918 0.135660 0.082116 0.598908 0.634299 0.026449 0.714151 0.316505 0.566174 0.997307 0.435285 0.746637 0.944634 0.306264 0.730702 0.129533 0.100941 0.898388 0.804443 0.682639 0.600860 0.298385 0.275416 0.757547 0.582538 0.783923 0.122289 0.824916 0.152854 0.420479 0.619841 0.200897 0.691856 0.675862 0.506947 0.455104 0.354301 0.507396 0.384339 0.058742 0.988473 0.969056 0.749606 0.657011 0.336074 0.127946 0.862464 0.234199 0.823102 0.772872 0.830992 0.554980 0.918542 0.420033 0.344743 0.054089 0.008348 0.028742 0.886401 0.477178 0.316220 0.163708 0.612531 0.895906 0.683413 0.460473 0.586679 0.814247 0.326959 0.302302 0.536380 0.395558 0.860012 0.591694 0.176303 0.441974 0.777927 0.707359 0.180739 0.684087 0.088002 0.519473 0.268093 0.642157 0.709338 0.409567 0.823416 0.139960 0.388231 0.286558 0.683739 0.213427 0.445430 0.675677 0.122832 0.161995 0.660844 0.136095 0.269496 0.895525 0.364785 0.156410 0.264598 0.126006 0.628933 0.090423 0.183311 0.622735 0.835178 0.306653 0.658864 0.785728 0.913812 0.609613 0.960755 0.612193 0.740215 0.240203 0.654766 0.152113 0.517021 0.678402 0.865570 0.916006 0.795418 0.812269 0.182046 0.805353 0.436554 0.520094 0.069787 0.302607 0.470357 0.462166 0.231206 0.662395 0.284536 0.747455 0.835672 0.154413 0.240606 0.810142 0.000085 0.768236 0.406584 0.337027 0.613901 0.486109 0.288136 0.896952 0.307902 0.655531 0.936628 0.928719 0.118857 0.296554 0.468970 0.512654 0.766620 0.598849 0.873412 0.723375 0.530088 0.995609 0.168419 0.953189 0.015388 0.770560 0.774447 0.008312 0.767847 0.002579 0.200359 0.303203 0.164837 0.493043 0.498037 0.801421 0.785809 0.428801 0.007720 0.289841 0.083099 0.897118 0.490998 0.043746 0.201505 0.939712 0.973013 0.409731 0.159009 0.368424 0.374156 0.193526 0.716150 0.167692 0.951915 0.053490 0.064084 0.126993 0.132739 0.888579 0.200786 0.009016 0.776429 0.942439 0.391924 0.778024 0.954402 0.529394 0.239604 0.792979 0.647764 0.026748 0.928210 0.331047 0.430429 0.918725 0.156518 0.125471 0.757503 0.642652 0.936254 0.443732 0.688117 0.118695 0.062730 0.657491 0.696355 0.574609 0.898837 0.032425 0.892044 0.686638 0.313268 0.639556 0.502897 0.339832 0.465378 0.320842 0.481047 0.420527 0.602728 0.025429 0.911959 0.290786 0.138755 0.475345 0.852606 0.111420 0.993839 0.860448 0.756602 0.380737 0.853221 0.787468 0.246255 0.596422 0.746086 0.703416 0.122485 0.526611 0.763378 0.780629 0.625124 0.940579 0.229206 0.100458 0.462176 0.225591 0.102828 0.584312 0.363838 0.607936 0.330197 0.657131 0.672181 0.077894 0.032113 0.756237 0.227716 0.889545 0.968221 0.879440 0.708642 0.047614 0.198943 0.933275 0.539141 0.810523 0.992561 0.895638 0.987839 0.757089 0.801847 0.215410 0.108857 0.375032 0.209746 0.078317 0.491806 0.571366 0.840198 0.259498 0.079371 0.598934 0.388358 0.086099 0.030840 0.936060 0.778984 0.468380 0.089915 0.404823 0.096175 0.584654 0.163239 0.588900 0.891046 0.552518 0.731305 0.172991 0.341051 0.106398 0.663304 0.955587 0.137886 0.917886 0.626026 0.266348 0.341122 0.002054 0.011696 0.647546 0.661628 0.050183 0.672457 0.712829 0.871742 0.224104 0.391876 0.108316 0.043104 0.325861 0.687426 0.466486 0.444671 0.971064 0.590729 0.356228 0.634760 0.035672 0.759006 0.976744 0.860522 0.979079 0.101453 0.259101 0.880052 0.250400 0.317789 0.212127 0.086415 0.244096 0.156023 0.655292 0.872473 0.525288 0.440411 0.359248 0.936539 0.315726 0.738022 0.617407 0.922937 0.300466 0.468480 0.882193 0.988905 0.542405 0.890949 0.284912 0.909533 0.914480 0.587261 0.568910 0.682174 0.231275 0.928959 0.267528 0.109306 0.142535 0.272155 0.723731 0.521475 0.071409 0.463376 0.615992 0.337308 0.663750 0.579954 0.101732 0.980084 0.350531 0.725107 0.340771 0.906864 0.540437 0.740280 0.704410 0.476119 0.053374 0.855223 0.022061 0.357803 0.266481 0.105625 0.393226 0.939219 0.576909 0.496003 0.726220 0.309605 0.038905 0.181238 0.368034 0.902428 0.425594 0.323026 0.117797 0.203873 0.469282 0.943698 0.727744 0.916664 0.476424 0.992211 0.510208 0.146139 0.134591 0.673133 0.965441 0.747092 0.619649 0.767244 0.51639715233223 0.33699065321308 0.43392602941900 0.32096011320687 0.46396839345782 0.31566170110145 0.49724715934811 0.19116371294466 0.45600471940316 0.48288453879856 0.83757781270027 0.92255764854898 0.36727068727486 0.41435617917820 0.75482434353368 0.69455872541182 0.31088618214403 0.60790382673709 0.66038559322611 0.91944710015140 0.69755463928331 0.69584813113680 0.68456388516342 0.24958010224228 0.33135708379510 0.31767939210415 0.33337808503113 0.03185271947429 0.60442439382403 0.35656402689548 0.31839961693189 0.33536895532058 0.31058970653830 0.95730768207093 0.45453963767842 0.05912788928229 0.92272238465612 0.88884332342846 0.39046765755376 0.18088251652761 0.30929116430757 0.34500555611471 0.93215446668147 0.31707722107987 0.62347433758718 0.52784560408508 0.13894328571018 0.31245032581952 0.21011856822052 0.60284284852669 0.94391374292399 0.68670838063394 0.37088625971873 0.88044428394530 0.77352953207679 0.24431270685738 0.55385391723896 0.69151729865882 0.56011288675814 0.60149798313611 0.28468808104180 0.09852683431566 0.85802221473891 0.53071179377820 0.38133752468831 0.86450535304636 0.54201002558535 0.31624793005778 0.29315360049484 0.80894422419694 0.80424198504538 0.95815405717571 0.00412879618276 0.52950009124523 0.62971223076299 0.58915832569626 0.06659656708073 0.34229424964496 0.84260769354745 0.65648150147962 0.90570483392899 0.68241949108231 0.75839161918790 0.72105605713323 0.31152551422512 0.14707112242257 0.21271128204184 0.61689246089539 0.83376643268622 0.73551584992929 0.14230817419039 0.23446453491568 0.67001824798596 0.18193720997742 0.22687592956768 0.66221054185400 0.85198629895928 0.33819293122706 0.76951641548345 0.70389010505870 0.88781402148678 0.59200084610010 0.50559401792497 0.68570742523428 0.63631248116287 0.63123991820476 0.25100675365664 0.70105923154594 0.03303623228546 0.62197894589382 0.19990654506747 0.41323997391907 0.69953072713561 0.76314023170438 0.62626414463714 0.40818253170270 0.74650024829886 0.99325563394374 0.01223203050489 0.94973975674215 0.61566043786959 0.68272450213743 0.16471287596627 0.78092678772431 0.47348446212354 0.31707269858485 0.43686107230754 0.15172140853713 0.25692068277157 0.96289736651156 0.80004005071341 0.11126366309508 0.53488312261583 0.41141747945455 0.06710709587161 0.29451025152191 0.49288397105375 0.20241027357230 0.12849638617482 0.75706837321647 0.06390759466366 0.93305543535479 0.37744826445353 0.97328670310489 0.47675769358091 0.36773120055525 0.38214283173806 0.99568718961239 0.90777962018899 0.73084337386041 0.06898800354828 0.97203993059259 0.02238588604596 0.95452728473641 0.19233847073660 0.87456843468208 0.21259253130684 0.86239399587025 0.55872934714766 0.97900306917338 0.26647971282236 0.19054911655124 0.07262916083048 0.76118643096167 0.38161130472560 0.75634045392775 0.44835278420113 0.64902152465943 0.48861429511878 0.46845318692441 0.50193906123062 0.06982543082013 0.07000241814677 0.36680207291290 0.08145912739280 0.70290120925069 0.78931563975456 0.99961018176098 0.54706698649171 0.85186443879108 0.51082271660240 0.01641885964931 0.69571302157326 0.92318912325018 0.87641586735165 0.17550601719448 0.83343652793698 0.63051246241319 0.09965143009706 0.44642615185441 0.20207315252469 0.64830095817124 0.88563206111720 0.54960534981566 0.29421992610107 0.26532534535557 0.99510008309104 0.18366353820853 0.72622032362031 0.81620316074499 0.12029619853755 0.56191551011715 0.97048931069014 0.25384304932661 0.24301574951435 0.78656942540521 0.66799187254601 0.29865631042141 0.16989609583657 0.32248522193126 0.99672041701566 0.11696300314042 0.02566885112922 0.71532833389258 0.15227215551128 0.49028621627035 0.48731336533617 0.73371600661002 0.20907022696526 0.77231871643086 0.86635785790473 0.11881976439845 0.42399500396908 0.78507466769174 0.11914030401132 0.06754484274573 0.40204487438383 0.08791089369513 0.31992068112246 0.62383147877276 0.67763034921861 0.57588645574630 0.28191761142405 0.47741056875659 0.69440302405759 0.85870325720240 0.40022257643967 0.36304606145372 0.38389802256232 0.47740864068229 0.11204605946660 0.75820087881217 0.82447492387573 0.32359951415447 0.67262978708770 0.81679604599209 0.98569570085687 0.52318494256921 0.22564285631146 0.43284486824748 0.36760230349442 0.53987854742058 0.56671921752135 0.09940167232468 0.75651292601793 0.10324778581814 0.95043558277226 0.65999232245978 0.35208983100065 0.00583897702362 0.26593986465095 0.80900704639686 0.34292114774035 0.78567548848096 0.60702931979109 0.73117579669777 0.94863724147357 0.57686358191503 0.63240974552581 0.36459925956844 0.60977210555728 0.57362725103824 0.94395498860299 0.48997658028674 0.92806153652270 0.42922038277836 0.22601131398754 0.41352364002005 0.84776908231492 0.89370620811846 0.16438601665329 0.75049854858426 0.52910155915130 0.93999700473025 0.52255299011620 0.58367309488360 0.62381234786253 0.49019544520147 0.21091621767589 0.80125344397732 0.15449022970317 0.70678464568133 0.78858903974456 0.87556539657113 0.99800040968046 0.06415547955625 0.20286219734776 0.86398215191183 0.91481196100705 0.95846879736119 0.18248471015683 0.74659780004783 0.99463065547187 0.31031853290964 0.49051959923345 0.60720500143802 0.35160014768985 0.94471687093974 0.73565879431126 0.43006067360828 0.19629898935552 0.40369659884771 0.20466299069136 0.55963206795815 0.76634975829190 0.48641398087574 0.57091767027277 0.82786160184473 0.87650972489838 0.33852079067818 0.52087602514708 0.72756502842522 0.51718728034009 0.59566309592965 0.28767982450451 0.05127798746550 0.13816012024648 0.48176004913930 0.71399154451653 0.45642454956133 0.75718062772142 0.83802517577698 0.41479986548796 0.03577244370412 0.26564355723053 0.07914164139080 0.96026331119892 0.25200180488973 0.79264788510654 0.45950921968642 0.17748848481245 0.83013273027850 0.89848073046902 0.55970498437525 0.11330285932512 0.88791593740538 0.32581042310344 0.53597664837055 0.64294761213887 0.87628173598820 0.50114779584579 0.01050751185581 0.96276027495718 0.73588862619135 0.27459417633094 0.18348425321073 0.98973649279048 0.57094673659997 0.12625692073013 0.54923725392868 0.60158826855681 0.23089598562343 0.06243565949521 0.32525505418907 0.54284841539920 0.33281813794073 0.26478999011628 0.50964453303693 0.91067937289239 0.12672152713902 0.93685624738346 0.85462662836393 0.82053362403044 0.45401202511598 0.24209648141469 0.32013506768835 0.78554913700175 0.38260264177901 0.26360072576378 0.66263646768816 0.44868132526475 0.80840754727480 0.76919707260898 0.45297152416295 0.50193941198970 0.82759890649034 0.46845221255162 0.11135820522635 0.69268287532428 0.57264753487206 0.08276495933108 0.76924022119872 0.34753882618159 0.09482146190094 0.63235505207788 0.23491046296535 0.46560490373649 0.95859042820916 0.40786591028076 0.92688667042601 0.43755888309447 0.59567783109645 0.41075671842483 0.86152081676657 0.74940146522037 0.43291384118885 0.22257879025553 0.58381766739427 0.80692831219316 0.61623101873751 0.41818736388867 0.22090498266555 0.66258994620330 0.27270873547165 0.17089284754156 0.48707081935940 0.39968285458612 0.00794181230646 0.51348637173723 0.91611968551953 0.84058849112122 0.71014067409361 0.39501293797619 0.36715413528745 0.99095803755399 0.63500126076095 0.40247579336115 0.22778550152358 0.62040072966459 0.34639699037276 0.27982470080724 0.49105038324139 0.90085711570733 0.86332978254796 0.14612426222331 0.36556183969556 0.50740462139803 0.29830057161553 0.21127838947252 0.22703245666295 0.02405163400872 0.21127980069341 0.96320699299730 0.33536355715666 0.49962979944677 0.33895053551081 0.43529169028652 0.17946844400279 0.96750736898340 0.98866085717831 0.32089962500778 0.07275074574257 0.36004586969821 0.57540418168929 0.89772174917699 0.54285726939933 0.97786106805035 0.60318655544091 0.91915950434631 0.70762808375670 0.19284215445607 0.23503363700463 0.47398730524455 0.38197881312138 0.54164374064873 0.33521924575357 0.82729778739273 0.96937576085775 0.22699727669860 0.44987357968244 0.22258005295110 0.90909482048253 0.34486253508041 0.97965502431185 0.88049147722653 0.01278314424423 0.94176014877403 0.34030591735834 0.76898609385865 0.95807950186767 0.99156670685502 0.85271337779031 0.56817487962199 0.65249169229498 0.02861821200795 0.75864449370923 0.32676378446839 0.68569969309389 0.75300306167662 0.33828377926212 0.34159541178807 0.66611261323338 0.33189549454047 0.04436258814706 0.05121284802990 0.33591430702187 0.26167472166800 0.26696793089776 0.84576635829447 0.82239473053877 530988624 891341337 1028205966 191815761 1318542320 1461250574 431277782 662577812 1684271848 1725307484 443427550 1119270731 337540059 1018549017 665890538 1183115172 1296360066 1961513898 782451236 1859569423 919720142 396371965 503404118 984728760 76467039 1073024875 1880370242 266837237 1578055584 148988804 708453464 1621018580 978483264 950632035 62723641 630877092 1452499475 202033204 1436614853 2100442676 387267772 266752358 1282102486 1562923163 1913015678 1158976169 1345662265 143756795 1387064721 1088497802 1608408626 2066539762 1562073659 727353943 1269684449 24575777 51643941 740108798 1427965529 811105805 525596358 1831273755 586834529 1167388199 1253309601 605655379 1279856060 1209757574 1550805864 807011274 786966117 1895199159 4606511 135764917 1945433356 1655246947 1907927454 1581990789 703707308 1737547515 26076409 834776347 292963155 181254685 1722827864 1490450724 381810775 157277968 347035064 666002974 1944680497 192213169 2035379317 1244326335 1045632907 869905062 1409921706 649863636 225789267 777707430 1776876050 467331494 1552545327 1026668941 169602988 553198541 1208389078 1413879055 1293022041 1435032207 645161361 1059091110 378323326 204243226 2037470931 1096028094 2125446247 1327345239 23652745 1822488331 1118550371 2026594069 1943319940 5741864 1929698340 624540311 1521445755 2120930097 470299480 616497631 1079423783 1161355470 1983598070 1845491101 1220238697 2025680742 350184138 2007431219 1292918379 1407355737 1034462011 73965527 1862063095 492778448 1952534040 1194693951 254079216 932571640 31746881 556976214 129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 1679081482 1695474344 1027764638 169675064 769125962 831124162 859962994 675926632 728964677 1907838575 547557739 930621232 501100437 146609245 484402566 1392500230 320761926 411913377 1428745391 1221580879 796003048 1231631543 1352988212 525514365 1313445224 696732356 1770676031 1545531799 190035022 1024606141 1342155803 550216382 242980981 718386383 167213298 467214248 1866086193 580721442 480801821 1449055508 1069945247 1041358598 1642000481 82255401 1220935383 1195059050 1853433244 241395504 669066503 556397887 sprng2.0/SRC/lcg64/lcg64.h100600 764 764 1461 6736173543 14066 0ustar chwangchwang #ifndef _lcg64_h #define _lcg64_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int lcg64_get_rn_int ANSI_ARGS((int *igenptr)); float lcg64_get_rn_flt ANSI_ARGS((int *igenptr)); double lcg64_get_rn_dbl ANSI_ARGS((int *igenptr)); int *lcg64_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int lcg64_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int lcg64_get_seed_rng ANSI_ARGS((int *genptr)); int lcg64_free_rng ANSI_ARGS((int *genptr)); int lcg64_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *lcg64_unpack_rng ANSI_ARGS(( char *packed)); int lcg64_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/lcg64/READMEver2.CHANGES100644 764 764 260 6736173543 15510 0ustar chwangchwang7 June 1999; Chris S. Makefile: 1. in 'all ;' added 'checksprng' 2. added section 'checksprng'. ---------------------------------------------------------------------------- sprng2.0/SRC/simple.c100600 764 764 4123 6736173543 13512 0ustar chwangchwang/*************************************************************************/ #include #include #include "memory.h" #include "interface.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int *defaultgen=NULL; int junk; /* pass useless pointer at times */ #ifdef __STDC__ int *init_rng_simple( int seed, int mult) #else int *init_rng_simple(seed,mult) int mult,seed; #endif { int myid=0, nprocs=1, *temp; temp = init_rng(myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple(void) #else int get_rn_int_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple(void) #else float get_rn_flt_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple(void) #else double get_rn_dbl_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #ifdef __STDC__ int pack_rng_simple(char **buffer) #else int pack_rng_simple(buffer) char **buffer; #endif { if(defaultgen == NULL) return 0; return pack_rng(defaultgen,buffer); } #ifdef __STDC__ int *unpack_rng_simple( char *packed) #else int *unpack_rng_simple(packed) char *packed; #endif { int *temp; temp = unpack_rng(packed); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int print_rng_simple(void) #else int print_rng_simple() #endif { if(defaultgen == NULL) { fprintf(stderr,"WARNING: No generator initialized so far\n"); return 0; } return print_rng(defaultgen); } sprng2.0/SRC/simple_.h100600 764 764 4257 6736173543 13666 0ustar chwangchwang/*************************************************************************/ #include #include #include "memory.h" #include "interface.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int *defaultgen=NULL; int junk; /* pass useless pointer at times */ #ifdef __STDC__ int *init_rng_simple(int rng_type, int seed, int mult) #else int *init_rng_simple(rng_type,seed,mult) int rng_type,mult,seed; #endif { int myid=0, nprocs=1, *temp; temp = init_rng(rng_type,myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple(void) #else int get_rn_int_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple(void) #else float get_rn_flt_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple(void) #else double get_rn_dbl_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #ifdef __STDC__ int pack_rng_simple(char **buffer) #else int pack_rng_simple(buffer) char **buffer; #endif { if(defaultgen == NULL) return 0; return pack_rng(defaultgen,buffer); } #ifdef __STDC__ int *unpack_rng_simple( char *packed) #else int *unpack_rng_simple(packed) char *packed; #endif { int *temp; temp = unpack_rng(packed); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int print_rng_simple(void) #else int print_rng_simple() #endif { if(defaultgen == NULL) { fprintf(stderr,"WARNING: No generator initialized so far\n"); return 0; } return print_rng(defaultgen); } sprng2.0/SRC/simple_mpi.c100600 764 764 6114 6736173543 14361 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* LINEAR CONGRUENTIAL RANDOM NUMBER GENERATION WITH PRIME ADDEND */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: This generator is based on the Cray YMP compatible random number*/ /* generator for 32-bit IEEE machines by William Magro, Cornell Theory */ /* Center */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ #include #include #include "memory.h" #include "sprng.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif extern int *defaultgen; int junkmpi; /* pass useless pointer at times */ #ifdef SPRNG_MPI #ifdef __STDC__ int *init_rng_simple_mpi(int rng_type, int seed, int mult) #else int *init_rng_simple_mpi(rng_type,seed,mult) int rng_type,mult,seed; #endif { int myid=0, nprocs=1, *temp; get_proc_info_mpi(&myid,&nprocs); temp = init_rng(rng_type,myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junkmpi; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple_mpi(void) #else int get_rn_int_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple_mpi(void) #else float get_rn_flt_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple_mpi(void) #else double get_rn_dbl_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(DEFAULT_RNG_TYPE,0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #endif sprng2.0/SRC/sprng.h100600 764 764 4035 6736173543 13361 0ustar chwangchwang#ifndef _sprng_h_ #define _sprng_h_ #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 #include "interface.h" #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #define CHECK 1 #define MAX_PACKED_LENGTH 24000 #ifdef USE_MPI #define MPINAME(A) A ## _mpi #else #define MPINAME(A) A #endif #define make_sprng_seed MPINAME(make_new_seed) #if defined(SIMPLE_SPRNG) #define pack_sprng pack_rng_simple #define unpack_sprng unpack_rng_simple #define isprng MPINAME(get_rn_int_simple) #define init_sprng MPINAME(init_rng_simple) #define print_sprng print_rng_simple #ifdef FLOAT_GEN #define sprng MPINAME(get_rn_flt_simple) #else #define sprng MPINAME(get_rn_dbl_simple) #endif #elif !defined(CHECK_POINTERS) #define free_sprng free_rng #define pack_sprng pack_rng #define unpack_sprng unpack_rng #define isprng get_rn_int #define spawn_sprng(A,B,C) spawn_rng(A,B,C,!CHECK) #define init_sprng init_rng #define print_sprng print_rng #ifdef FLOAT_GEN #define sprng get_rn_flt #else #define sprng get_rn_dbl #endif #else #define free_sprng(A) ((deleteID(A)==NULL) ? -1 : free_rng(A)) #define pack_sprng(A,B) ((checkID(A)==NULL) ? 0 : pack_rng(A,B)) #define unpack_sprng(A) addID(unpack_rng(A)) #define isprng(A) ((checkID(A)==NULL) ? -1 : get_rn_int(A)) #define spawn_sprng(A,B,C) ((checkID(A)==NULL) ? 0 : spawn_rng(A,B,C,CHECK)) #define init_sprng(A,B,C,D,E) addID(init_rng(A,B,C,D,E)) #define print_sprng(A) ((checkID(A)==NULL) ? 0 : print_rng(A)) #ifdef FLOAT_GEN #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_flt(A)) #else #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_dbl(A)) #endif #endif #endif sprng2.0/SRC/sprng_f.h100600 764 764 10142 6736173543 13702 0ustar chwangchwang #ifndef _sprngf_h_ #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 #define DEFAULT_RNG_TYPE SPRNG_LFG #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #ifdef CHECK_POINTERS #define CHECK 1 #else #define CHECK 0 #endif /* ifdef CHECK_POINTERS */ #define MAX_PACKED_LENGTH 24000 #ifdef POINTER_SIZE #if POINTER_SIZE == 8 #define SPRNG_POINTER integer*8 #else #define SPRNG_POINTER integer*4 #endif #else #define SPRNG_POINTER integer*4 #endif /* ifdef POINTER_SIZE */ #ifdef USE_MPI #define make_sprng_seed fseed_mpi #else #define make_sprng_seed fmake_new_seed #endif #endif /* ifdef _sprng_h */ #ifdef USE_MPI external fseed_mpi integer fseed_mpi #else external fmake_new_seed integer fmake_new_seed #endif #ifndef DEFAULTINT #define DEFAULTINT #endif #ifndef FLOAT_GEN #define DBLGEN #endif #if defined(SIMPLE_SPRNG) #undef DEFAULTINT #ifndef _sprngf_h_ #define pack_sprng fpack_rng_simple #define unpack_sprng funpack_rng_simple #ifdef USE_MPI #define isprng fget_rn_int_simmpi #define init_sprng finit_rng_simmpi #else #define isprng fget_rn_int_sim #define init_sprng finit_rng_sim #endif /* ifdef USE_MPI */ #define print_sprng fprint_rng_simple #if defined(FLOAT_GEN) && defined(USE_MPI) #define sprng fget_rn_flt_simmpi #endif #if defined(FLOAT_GEN) && !defined(USE_MPI) #define sprng fget_rn_flt_sim #endif #if defined(DBLGEN) && defined(USE_MPI) #define sprng fget_rn_dbl_simmpi #endif #if defined(DBLGEN) && !defined(USE_MPI) #define sprng fget_rn_dbl_sim #endif #endif /* ifdef _sprng_h */ external isprng external fget_rn_dbl_sim, fget_rn_flt_sim external init_sprng, fpack_rng_simple external funpack_rng_simple, fprint_rng_simple #ifdef USE_MPI external fget_rn_flt_simmpi, fget_rn_dbl_simmpi real*4 fget_rn_flt_simmpi real*8 fget_rn_dbl_simmpi #endif integer isprng,fpack_rng_simple,fprint_rng_simple SPRNG_POINTER init_sprng, funpack_rng_simple real*4 fget_rn_flt_sim real*8 fget_rn_dbl_sim #endif #if defined(CHECK_POINTERS) #undef DEFAULTINT external fget_rn_int_ptr, fget_rn_flt_ptr, fget_rn_dbl_ptr external fspawn_rng_ptr, ffree_rng_ptr, finit_rng_ptr external fpack_rng_ptr, funpack_rng_ptr, fprint_rng_ptr integer fget_rn_int_ptr, ffree_rng_ptr, fpack_rng_ptr SPRNG_POINTER finit_rng_ptr, funpack_rng_ptr integer fspawn_rng_ptr, fprint_rng_ptr real*4 fget_rn_flt_ptr real*8 fget_rn_dbl_ptr #ifndef _sprngf_h_ #define isprng fget_rn_int_ptr #define free_sprng ffree_rng_ptr #define spawn_sprng(A,B,C) fspawn_rng_ptr(A,B,C,CHECK) #define pack_sprng fpack_rng_ptr #define unpack_sprng funpack_rng_ptr #define init_sprng finit_rng_ptr #define print_sprng fprint_rng_ptr #ifdef FLOAT_GEN #define sprng fget_rn_flt_ptr #else #define sprng fget_rn_dbl_ptr #endif #endif #endif #if defined(DEFAULTINT) external fget_rn_int, fget_rn_flt, fget_rn_dbl external fspawn_rng, ffree_rng, finit_rng external fpack_rng, funpack_rng, fprint_rng integer fget_rn_int, ffree_rng, fpack_rng SPRNG_POINTER finit_rng, funpack_rng integer fspawn_rng, fprint_rng real*4 fget_rn_flt real*8 fget_rn_dbl #ifndef _sprngf_h_ #define isprng fget_rn_int #define free_sprng ffree_rng #define spawn_sprng(A,B,C) fspawn_rng(A,B,C,CHECK) #define pack_sprng fpack_rng #define unpack_sprng funpack_rng #define init_sprng finit_rng #define print_sprng fprint_rng #ifdef FLOAT_GEN #define sprng fget_rn_flt #else #define sprng fget_rn_dbl #endif #endif #endif #ifndef _sprngf_h_ #define _sprngf_h_ #endif sprng2.0/SRC/store.c100600 764 764 5535 6736173543 13365 0ustar chwangchwang#include #include "store.h" int store_long(unsigned long l, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_longarray(unsigned long *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_longlongarray(unsigned long long *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_intarray(unsigned int *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i ../gen$6_$1.data cat $1/$1.data >> ../gen$6_$1.data fi echo echo >> $2 echo echo $1: $3 >> $2 echo "./$4 < gen$6_$1.data 2> /dev/null" >> $2 fi sprng2.0/SRC/primelist_32.h100600 764 764 41370 6736173543 14567 0ustar chwangchwang#define PRIMELISTSIZE1 1000 #define STEP 1000 #define PRIMELISTSIZE2 1778 int prime_list_32[PRIMELISTSIZE2] = { 11863279, 11863259, 11863253, 11863249, 11863237, 11863213, 11863207, 11863183, 11863171, 11863153, 11863151, 11863133, 11863121, 11863109, 11863099, 11863073, 11863067, 11863057, 11863039, 11863037, 11863031, 11863021, 11862989, 11862979, 11862959, 11862919, 11862911, 11862881, 11862869, 11862857, 11862839, 11862803, 11862791, 11862761, 11862713, 11862703, 11862701, 11862679, 11862673, 11862661, 11862623, 11862611, 11862581, 11862577, 11862569, 11862563, 11862547, 11862527, 11862493, 11862469, 11862439, 11862391, 11862373, 11862343, 11862317, 11862313, 11862307, 11862293, 11862271, 11862269, 11862259, 11862241, 11862239, 11862233, 11862229, 11862223, 11862217, 11862203, 11862199, 11862167, 11862157, 11862083, 11862049, 11862031, 11862029, 11862013, 11862007, 11861987, 11861959, 11861953, 11861921, 11861917, 11861887, 11861879, 11861873, 11861849, 11861827, 11861819, 11861803, 11861791, 11861749, 11861713, 11861711, 11861701, 11861693, 11861687, 11861683, 11861671, 11861659, 11861639, 11861627, 11861611, 11861599, 11861581, 11861579, 11861573, 11861569, 11861539, 11861527, 11861467, 11861441, 11861429, 11861413, 11861411, 11861407, 11861401, 11861371, 11861363, 11861357, 11861351, 11861327, 11861303, 11861299, 11861293, 11861273, 11861237, 11861231, 11861221, 11861219, 11861197, 11861191, 11861167, 11861159, 11861141, 11861131, 11861107, 11861099, 11861093, 11861089, 11861081, 11861071, 11861033, 11861011, 11860993, 11860973, 11860963, 11860897, 11860867, 11860859, 11860837, 11860811, 11860789, 11860787, 11860777, 11860753, 11860741, 11860727, 11860703, 11860699, 11860697, 11860691, 11860687, 11860669, 11860661, 11860649, 11860643, 11860637, 11860627, 11860619, 11860613, 11860573, 11860547, 11860517, 11860489, 11860487, 11860483, 11860477, 11860469, 11860411, 11860397, 11860379, 11860327, 11860267, 11860243, 11860231, 11860223, 11860207, 11860171, 11860151, 11860133, 11860109, 11860103, 11860097, 11860087, 11860081, 11860049, 11860039, 11860031, 11860021, 11859997, 11859989, 11859979, 11859961, 11859929, 11859923, 11859917, 11859907, 11859901, 11859893, 11859889, 11859877, 11859853, 11859847, 11859833, 11859821, 11859817, 11859791, 11859751, 11859739, 11859719, 11859713, 11859707, 11859643, 11859611, 11859583, 11859571, 11859569, 11859563, 11859541, 11859539, 11859509, 11859503, 11859487, 11859481, 11859473, 11859461, 11859457, 11859451, 11859433, 11859427, 11859383, 11859377, 11859371, 11859359, 11859349, 11859311, 11859307, 11859293, 11859269, 11859247, 11859241, 11859233, 11859187, 11859179, 11859167, 11859163, 11859157, 11859151, 11859139, 11859137, 11859109, 11859101, 11859083, 11859079, 11859077, 11859073, 11859061, 11859049, 11859031, 11859017, 11858989, 11858971, 11858969, 11858953, 11858947, 11858921, 11858897, 11858893, 11858851, 11858839, 11858813, 11858807, 11858801, 11858783, 11858779, 11858747, 11858729, 11858723, 11858719, 11858701, 11858683, 11858659, 11858657, 11858629, 11858599, 11858597, 11858579, 11858573, 11858569, 11858557, 11858551, 11858543, 11858533, 11858479, 11858447, 11858443, 11858423, 11858387, 11858381, 11858377, 11858359, 11858323, 11858311, 11858291, 11858281, 11858279, 11858269, 11858267, 11858243, 11858227, 11858201, 11858177, 11858159, 11858149, 11858131, 11858101, 11858059, 11858057, 11858051, 11858039, 11858029, 11858023, 11858017, 11857999, 11857991, 11857969, 11857931, 11857913, 11857907, 11857889, 11857883, 11857877, 11857873, 11857837, 11857831, 11857819, 11857817, 11857801, 11857793, 11857787, 11857777, 11857763, 11857759, 11857753, 11857751, 11857711, 11857709, 11857697, 11857693, 11857667, 11857661, 11857613, 11857591, 11857589, 11857543, 11857529, 11857523, 11857519, 11857499, 11857493, 11857481, 11857477, 11857457, 11857453, 11857451, 11857423, 11857409, 11857393, 11857369, 11857367, 11857361, 11857333, 11857331, 11857327, 11857303, 11857291, 11857267, 11857249, 11857243, 11857217, 11857193, 11857151, 11857147, 11857127, 11857123, 11857099, 11857093, 11857091, 11857081, 11857073, 11857067, 11857061, 11857049, 11857039, 11857037, 11857033, 11857003, 11856979, 11856953, 11856947, 11856919, 11856899, 11856883, 11856877, 11856857, 11856841, 11856821, 11856811, 11856763, 11856731, 11856727, 11856709, 11856697, 11856673, 11856659, 11856653, 11856641, 11856629, 11856583, 11856553, 11856547, 11856541, 11856517, 11856511, 11856479, 11856473, 11856469, 11856461, 11856419, 11856409, 11856373, 11856371, 11856359, 11856343, 11856329, 11856311, 11856307, 11856287, 11856281, 11856269, 11856239, 11856223, 11856199, 11856193, 11856179, 11856161, 11856151, 11856139, 11856113, 11856107, 11856101, 11856071, 11856049, 11856023, 11856001, 11855999, 11855993, 11855989, 11855959, 11855933, 11855911, 11855903, 11855881, 11855869, 11855839, 11855827, 11855813, 11855773, 11855759, 11855747, 11855743, 11855737, 11855731, 11855713, 11855699, 11855689, 11855687, 11855653, 11855633, 11855593, 11855581, 11855567, 11855551, 11855549, 11855531, 11855521, 11855507, 11855491, 11855489, 11855413, 11855407, 11855387, 11855383, 11855381, 11855359, 11855357, 11855353, 11855351, 11855339, 11855329, 11855321, 11855309, 11855303, 11855269, 11855267, 11855231, 11855219, 11855213, 11855177, 11855159, 11855149, 11855147, 11855141, 11855111, 11855033, 11855023, 11855017, 11855003, 11854979, 11854961, 11854937, 11854919, 11854901, 11854897, 11854891, 11854883, 11854877, 11854873, 11854853, 11854847, 11854813, 11854793, 11854757, 11854709, 11854691, 11854681, 11854607, 11854603, 11854573, 11854571, 11854567, 11854529, 11854523, 11854519, 11854517, 11854489, 11854477, 11854463, 11854441, 11854439, 11854433, 11854429, 11854411, 11854399, 11854379, 11854363, 11854333, 11854331, 11854327, 11854279, 11854267, 11854261, 11854211, 11854169, 11854163, 11854159, 11854147, 11854061, 11854057, 11854019, 11854009, 11854001, 11853991, 11853979, 11853943, 11853931, 11853899, 11853893, 11853889, 11853883, 11853869, 11853857, 11853847, 11853839, 11853817, 11853791, 11853773, 11853761, 11853757, 11853731, 11853719, 11853689, 11853679, 11853649, 11853629, 11853617, 11853613, 11853601, 11853571, 11853557, 11853529, 11853463, 11853451, 11853449, 11853427, 11853421, 11853419, 11853383, 11853367, 11853329, 11853323, 11853319, 11853241, 11853227, 11853221, 11853217, 11853203, 11853181, 11853161, 11853157, 11853133, 11853031, 11853019, 11853001, 11852989, 11852969, 11852959, 11852957, 11852921, 11852917, 11852891, 11852879, 11852873, 11852857, 11852837, 11852833, 11852831, 11852809, 11852807, 11852803, 11852773, 11852767, 11852759, 11852741, 11852719, 11852717, 11852663, 11852657, 11852647, 11852641, 11852623, 11852611, 11852609, 11852591, 11852579, 11852573, 11852557, 11852539, 11852537, 11852531, 11852513, 11852473, 11852459, 11852437, 11852369, 11852359, 11852341, 11852339, 11852327, 11852311, 11852303, 11852297, 11852293, 11852287, 11852279, 11852273, 11852263, 11852251, 11852237, 11852221, 11852209, 11852177, 11852171, 11852161, 11852147, 11852129, 11852089, 11852083, 11852059, 11852053, 11852051, 11852017, 11851997, 11851967, 11851949, 11851933, 11851927, 11851919, 11851909, 11851891, 11851867, 11851859, 11851841, 11851813, 11851799, 11851793, 11851787, 11851759, 11851753, 11851681, 11851673, 11851639, 11851621, 11851613, 11851603, 11851597, 11851591, 11851589, 11851577, 11851559, 11851549, 11851547, 11851529, 11851523, 11851519, 11851493, 11851481, 11851451, 11851447, 11851409, 11851403, 11851373, 11851361, 11851351, 11851349, 11851313, 11851303, 11851291, 11851219, 11851201, 11851181, 11851157, 11851139, 11851127, 11851123, 11851109, 11851093, 11851067, 11851051, 11851033, 11850997, 11850991, 11850983, 11850961, 11850953, 11850947, 11850941, 11850931, 11850919, 11850913, 11850907, 11850899, 11850877, 11850859, 11850829, 11850803, 11850791, 11850749, 11850739, 11850731, 11850701, 11850677, 11850667, 11850611, 11850607, 11850557, 11850541, 11850529, 11850511, 11850481, 11850469, 11850427, 11850407, 11850379, 11850373, 11850367, 11850347, 11850341, 11850283, 11850269, 11850259, 11850247, 11850233, 11850191, 11850169, 11850161, 11850133, 11850127, 11850121, 11850109, 11850103, 11850077, 11850073, 11850061, 11850049, 11850031, 11850023, 11850019, 11850011, 11850001, 11849987, 11849947, 11849933, 11849923, 11849909, 11849891, 11849881, 11849869, 11849813, 11849801, 11849791, 11849771, 11849767, 11849759, 11849743, 11849741, 11849723, 11849713, 11849707, 11849701, 11849699, 11849693, 11849689, 11849683, 11849671, 11849659, 11849653, 11849641, 11849633, 11849599, 11849587, 11849573, 11849569, 11849567, 11849557, 11849507, 11849503, 11849491, 11849473, 11849443, 11849437, 11849417, 11849413, 11849401, 11849399, 11849363, 11849359, 11849339, 11849309, 11849297, 11849291, 11849273, 11849269, 11849251, 11849249, 11849239, 11849237, 11849231, 11849203, 11849183, 11849177, 11849137, 11849129, 11849111, 11849107, 11849093, 11849087, 11849077, 11849069, 11849059, 11849053, 11849039, 11849021, 11848961, 11848937, 11848931, 11848919, 11848909, 11848873, 11848867, 11848861, 11848853, 11848829, 11848801, 11848787, 11848757, 11848751, 11848741, 11848729, 11848721, 11848717, 11848709, 11848691, 11848679, 11848673, 11848663, 11848637, 11848619, 11848601, 11848591, 11848589, 11848553, 11848537, 11848531, 11848523, 11848513, 11848493, 11848489, 11848477, 11848469, 11848451, 11848433, 11848393, 11848379, 11848373, 11848363, 11848351, 11848339, 11848313, 11848297, 11848271, 11848253, 11848247, 11848241, 11848237, 11848219, 11848181, 11848159, 11848157, 11848147, 11848129, 11848117, 11848093, 11848069, 11848043, 11848027, 11848021, 11847977, 11847961, 11847949, 11847907, 11847883, 11847877, 11847853, 11847799, 11847791, 11847761, 11847749, 11847721, 11847701, 11847653, 11847643, 11847637, 11847629, 11847607, 11847593, 11847587, 11847581, 11847571, 11847569, 11847533, 11847529, 11847527, 11847523, 11847499, 11847497, 11847467, 11847463, 11847427, 11847397, 11847391, 11847373, 11847347, 11847343, 11847299, 11847281, 11847271, 11847263, 11847257, 11847233, 11830253, 11814059, 11797861, 11781907, 11765609, 11749061, 11732887, 11716381, 11699993, 11684149, 11667269, 11651309, 11634739, 11618281, 11602949, 11586493, 11570407, 11554009, 11538067, 11522363, 11505511, 11489431, 11472817, 11457029, 11441081, 11424467, 11408317, 11392207, 11375563, 11359163, 11343187, 11326423, 11310521, 11293801, 11278019, 11261317, 11245081, 11228929, 11212433, 11196127, 11179907, 11163877, 11148019, 11131741, 11114879, 11098937, 11082817, 11066729, 11050939, 11034811, 11018591, 11001821, 10985479, 10969193, 10953181, 10937063, 10921171, 10904617, 10888811, 10872223, 10856141, 10840157, 10824139, 10807817, 10791629, 10775437, 10758619, 10742231, 10726003, 10709957, 10693897, 10677893, 10662257, 10646191, 10629929, 10613903, 10597597, 10581289, 10565047, 10549031, 10533073, 10516343, 10500547, 10484483, 10468361, 10452551, 10436291, 10420139, 10403951, 10388171, 10371899, 10356113, 10339639, 10323751, 10307537, 10291129, 10274821, 10259153, 10243201, 10226893, 10210831, 10194593, 10178017, 10161439, 10145197, 10129397, 10113241, 10097149, 10080997, 10064671, 10048859, 10033087, 10017113, 10000987, 9984587, 9968117, 9951703, 9935437, 9919439, 9903083, 9887179, 9870853, 9854791, 9838123, 9821809, 9805793, 9790177, 9774007, 9757703, 9741377, 9725707, 9709379, 9693031, 9677027, 9661009, 9645131, 9628939, 9613127, 9596597, 9581053, 9565291, 9548909, 9533023, 9516809, 9500993, 9484931, 9468793, 9452269, 9436439, 9419909, 9403967, 9387671, 9371371, 9355471, 9339569, 9323669, 9307513, 9291539, 9275377, 9259109, 9243281, 9227321, 9211759, 9195671, 9179591, 9163981, 9147521, 9131957, 9115709, 9099589, 9083521, 9067631, 9051563, 9035357, 9019259, 9002717, 8986751, 8970821, 8954321, 8938301, 8922611, 8907077, 8890823, 8874659, 8858677, 8842541, 8826221, 8810147, 8794081, 8778299, 8762357, 8746637, 8730467, 8714551, 8698813, 8683159, 8666773, 8651117, 8635049, 8618861, 8603183, 8587127, 8571509, 8555317, 8539747, 8523787, 8508217, 8492329, 8476723, 8460533, 8444671, 8428289, 8412169, 8396111, 8380237, 8364329, 8348107, 8332547, 8316449, 8300603, 8284447, 8268907, 8252551, 8236729, 8220881, 8205163, 8189123, 8173427, 8157343, 8141753, 8125373, 8109887, 8093707, 8077463, 8061421, 8045669, 8029717, 8013701, 7997623, 7981837, 7965871, 7949731, 7934089, 7918123, 7902269, 7886297, 7870657, 7854667, 7839269, 7823279, 7807549, 7791857, 7775479, 7759813, 7743737, 7727477, 7711741, 7695707, 7680181, 7664311, 7648439, 7632511, 7616881, 7601081, 7585639, 7569469, 7553437, 7537903, 7521949, 7505863, 7489847, 7474381, 7457993, 7442333, 7426421, 7410857, 7394873, 7378687, 7363123, 7347521, 7331309, 7315673, 7299493, 7283833, 7268039, 7252381, 7236821, 7220921, 7204891, 7189333, 7173233, 7157429, 7141759, 7125413, 7109423, 7094023, 7078283, 7062529, 7046581, 7031281, 7015973, 6999823, 6984193, 6968123, 6952441, 6937027, 6921281, 6905713, 6889789, 6874223, 6858913, 6843289, 6827543, 6811877, 6796591, 6780271, 6764353, 6748897, 6733171, 6717493, 6702197, 6686663, 6670709, 6654877, 6639049, 6622999, 6607379, 6591811, 6576307, 6560669, 6545171, 6529403, 6513613, 6498169, 6482407, 6466487, 6451087, 6435179, 6419299, 6403739, 6388061, 6371879, 6355963, 6340043, 6324401, 6308737, 6293681, 6278309, 6262721, 6247243, 6231497, 6215617, 6199847, 6184289, 6168353, 6152869, 6137477, 6121681, 6105949, 6090569, 6074779, 6058963, 6043417, 6027277, 6011899, 5996687, 5981071, 5965021, 5949313, 5933713, 5918293, 5903251, 5887631, 5872549, 5856709, 5841373, 5825711, 5809861, 5794457, 5778673, 5762759, 5747227, 5731463, 5716021, 5700451, 5685413, 5669803, 5654083, 5638103, 5622731, 5607149, 5591459, 5575601, 5560327, 5544613, 5529079, 5513267, 5497711, 5481989, 5466217, 5450773, 5435533, 5420083, 5404433, 5388689, 5373607, 5357903, 5342327, 5327041, 5311511, 5295839, 5280367, 5264821, 5249411, 5234237, 5218721, 5203477, 5188123, 5172227, 5156839, 5141117, 5125871, 5110561, 5094841, 5079493, 5064119, 5048741, 5033053, 5017637, 5001923, 4986439, 4971409, 4956151, 4940843, 4925419, 4909859, 4894753, 4879937, 4864511, 4849081, 4833989, 4818287, 4803031, 4787569, 4771999, 4756649, 4740979, 4725673, 4710373, 4695079, 4679813, 4664641, 4649119, 4633693, 4618307, 4603031, 4587589, 4572383, 4556933, 4541819, 4526363, 4510687, 4495079, 4480183, 4464877, 4449617, 4434811, 4419773, 4404679, 4389223, 4373647, 4358659, 4342991, 4327621, 4312381, 4297201, 4281481, 4265903, 4250777, 4235411, 4220207, 4204903, 4189583, 4174601, 4159471, 4144267, 4128763, 4113127, 4097957, 4082909, 4067741, 4052383, 4037521, 4022587, 4007447, 3992159, 3976481, 3961229, 3945919, 3930611, 3915761, 3900509, 3885691, 3870299, 3854969, 3839923, 3824591, 3809959, 3794941, 3779443, 3764311, 3748879, 3733397, 3718837, 3703643, 3688757, 3673793, 3658769, 3643331, 3628057, 3613201, 3598691, 3583757, 3568259, 3553453, 3538027, 3522763, 3507587, 3492287, 3476783, 3461291, 3445801, 3431353, 3416267, 3401509, 3386563, 3371419, 3356389, 3341101, 3325991, 3311051, 3295883, 3280759, 3265861, 3250837, 3235819, 3220967, 3206311, 3191603, 3176821, 3162059, 3147101, 3131761, 3117031, 3102371, 3087239, 3072533, 3057647, 3042493, 3027347, 3012137, 2997509, 2982583, 2967647, 2952629, 2937611, 2922677, 2907871, 2892973, 2877899, 2862917, 2847893, 2833211, 2818451, 2804027, 2789327, 2774309, 2759621, 2744551, 2729563, 2714629, 2699903, 2685323, 2670533, 2655571, 2641063, 2626307, 2611597, 2596501, 2581697, 2567447, 2552657, 2537779, 2523163, 2508281, 2493767, 2478937, 2464009, 2449417, 2434681, 2419793, 2405069, 2390207, 2375921, 2361167, 2346473, 2331689, 2316593, 2301709, 2287249, 2272241, 2258083, 2243551, 2228797, 2214161, 2199623, 2184779, 2170153, 2155603, 2141149, 2126623, 2111933, 2097539, 2082917, 2068201, 2053789, 2038969, 2024417, 2010017, 1995977, 1981523, 1966619, 1952023, 1937657, 1923253, 1908923, 1894127, 1879949, 1865509, 1851503, 1836943, 1822703, 1808071, 1793927, 1779497, 1765187, 1750423, 1736281, 1721659, 1707253, 1692967, 1678429, 1664501, 1650059, 1635317, 1621421, 1606897, 1592881, 1578217, 1563967, 1549577, 1535459, 1520707, 1506497, 1492499, 1478467, 1464173, 1450139, 1435919, 1422163, 1407569, 1393663, 1379321, 1365281, 1351199, 1336997, 1322693, 1308719, 1294483, 1280453, 1266281, 1252469, 1238551, 1224193, 1210369, 1195771, 1181963, 1168231, 1154633, 1140563, 1126693, 1112483, 1099051, 1085023, 1071229, 1057279, 1043201, 1029179, 1015451, 1001821, 988061, 973901, 960293, 946133, 932357, 918677, 905071, 891239, 877469, 864013, 850247, 836477, 822883, 809423, 795737, 782191, 768671, 755309, 741509, 728003, 714563, 701341, 687679, 674363, 660893, 647557, 634031, 620363, 607127, 593899, 580733, 567659, 554167, 540863, 527441, 514561, 501217, 488347, 475283, 462493, 449161, 435889, 423257, 410341, 397223, 384407, 371573, 358471, 345769, 333019, 320317, 307873, 295291, 282427, 269947, 257501, 245083, 232523, 220327, 208049, 195787, 183683, 171673, 159499, 147551, 135649, 123853, 112223, 100547, 89203, 77719, 66587, 55589, 44633, 34019, 23741, 13877, 4733 }; sprng2.0/SRC/primes_32.c100600 764 764 5421 6736173543 14026 0ustar chwangchwang#include #include #include "primes_32.h" #include "primelist_32.h" #define YES 1 #define NO 0 #define NPRIMES 1000 int primes[NPRIMES]; #ifdef __STDC__ int init_prime_32(void) #else int init_prime_32() #endif { int i, j, obtained = 0, isprime; for(i=3; i < MINPRIME; i += 2) { isprime = YES; for(j=0; j < obtained; j++) if(i%primes[j] == 0) { isprime = NO; break; } else if(primes[j]*primes[j] > i) break; if(isprime == YES) { primes[obtained] = i; obtained++; } } return obtained; } #ifdef __STDC__ int getprime_32(int need, int *prime_array, int offset) #else int getprime_32(need, prime_array, offset) int need, *prime_array,offset; #endif { static int initiallized = NO, num_prime; int largest; int i, isprime, index, obtained = 0; if(need <= 0) { fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" , need); return 0; } if(offset < 0) { fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" , offset); return 0; } if(offset+need-1 MAXPRIMEOFFSET) { fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } if(offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list_32[offset] + 2; offset = 0; } else { index = (int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; largest = prime_list_32[index] + 2; offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; } while(need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; for(i=0; i 0) offset--; else if(isprime == YES) prime_array[obtained++] = largest; } if(need > obtained) fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); return obtained; } #if 0 main() { int newprimes[1500], np, i; np = getprime_32(2,newprimes,0); np = getprime_32(2,newprimes+2,9); np = getprime_32(2,newprimes+4,12); for(i=0; i<6; i++) printf("%d. %d \n", i, newprimes[i]); /*while(np--) printf("New primes: %d\n", newprimes[np]); np = getprime_32(5,newprimes); printf("%d new primes obtained ...\n", np); while(np--) printf("New primes: %d\n", newprimes[np]);*/ } #endif sprng2.0/SRC/primes_32.h100600 764 764 550 6736173543 14011 0ustar chwangchwang#ifndef _primes_32_h_ #define _primes_32_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int getprime_32 ANSI_ARGS((int need, int *prime_array, int offset)); #define MAXPRIME 11863285 /* sqrt(2)*2^23 + 2 */ #define MINPRIME 3444 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 779156 #endif sprng2.0/SRC/primelist_64.h100600 764 764 601365 6736173543 14622 0ustar chwangchwang#define PRIMELISTSIZE1 1000 #define STEP 10000 #define PRIMELISTSIZE2 15613 unsigned int prime_list_64[PRIMELISTSIZE2] = { 3037000493U, 3037000453U, 3037000429U, 3037000427U, 3037000399U, 3037000391U, 3037000333U, 3037000331U, 3037000303U, 3037000289U, 3037000249U, 3037000193U, 3037000181U, 3037000177U, 3037000159U, 3037000121U, 3037000111U, 3037000103U, 3037000069U, 3037000039U, 3037000013U, 3036999991U, 3036999983U, 3036999941U, 3036999899U, 3036999887U, 3036999877U, 3036999841U, 3036999821U, 3036999817U, 3036999811U, 3036999803U, 3036999773U, 3036999769U, 3036999761U, 3036999739U, 3036999737U, 3036999733U, 3036999727U, 3036999499U, 3036999487U, 3036999473U, 3036999467U, 3036999457U, 3036999443U, 3036999439U, 3036999431U, 3036999403U, 3036999379U, 3036999341U, 3036999319U, 3036999307U, 3036999293U, 3036999283U, 3036999271U, 3036999233U, 3036999209U, 3036999167U, 3036999157U, 3036999137U, 3036999113U, 3036999101U, 3036999089U, 3036999079U, 3036999067U, 3036999061U, 3036999023U, 3036999019U, 3036999001U, 3036998999U, 3036998989U, 3036998977U, 3036998963U, 3036998957U, 3036998933U, 3036998903U, 3036998873U, 3036998857U, 3036998849U, 3036998843U, 3036998837U, 3036998803U, 3036998777U, 3036998761U, 3036998759U, 3036998743U, 3036998717U, 3036998611U, 3036998599U, 3036998567U, 3036998563U, 3036998561U, 3036998537U, 3036998477U, 3036998449U, 3036998429U, 3036998401U, 3036998381U, 3036998347U, 3036998333U, 3036998329U, 3036998299U, 3036998267U, 3036998257U, 3036998249U, 3036998231U, 3036998213U, 3036998183U, 3036998161U, 3036998113U, 3036998093U, 3036998071U, 3036998051U, 3036998047U, 3036998011U, 3036998009U, 3036997973U, 3036997939U, 3036997933U, 3036997897U, 3036997853U, 3036997837U, 3036997813U, 3036997811U, 3036997787U, 3036997783U, 3036997751U, 3036997741U, 3036997727U, 3036997721U, 3036997709U, 3036997697U, 3036997693U, 3036997643U, 3036997631U, 3036997619U, 3036997603U, 3036997597U, 3036997577U, 3036997559U, 3036997511U, 3036997501U, 3036997493U, 3036997393U, 3036997391U, 3036997343U, 3036997339U, 3036997331U, 3036997289U, 3036997279U, 3036997217U, 3036997213U, 3036997169U, 3036997151U, 3036997133U, 3036997109U, 3036997081U, 3036997063U, 3036997021U, 3036996983U, 3036996947U, 3036996931U, 3036996923U, 3036996901U, 3036996883U, 3036996863U, 3036996829U, 3036996817U, 3036996799U, 3036996769U, 3036996761U, 3036996737U, 3036996713U, 3036996709U, 3036996707U, 3036996673U, 3036996631U, 3036996601U, 3036996587U, 3036996553U, 3036996527U, 3036996497U, 3036996491U, 3036996481U, 3036996451U, 3036996439U, 3036996421U, 3036996379U, 3036996373U, 3036996353U, 3036996349U, 3036996329U, 3036996307U, 3036996299U, 3036996283U, 3036996253U, 3036996247U, 3036996211U, 3036996197U, 3036996121U, 3036996091U, 3036996077U, 3036996071U, 3036996049U, 3036996019U, 3036996013U, 3036995981U, 3036995977U, 3036995953U, 3036995933U, 3036995921U, 3036995909U, 3036995893U, 3036995887U, 3036995881U, 3036995867U, 3036995839U, 3036995833U, 3036995827U, 3036995791U, 3036995761U, 3036995737U, 3036995723U, 3036995711U, 3036995671U, 3036995641U, 3036995627U, 3036995609U, 3036995603U, 3036995581U, 3036995579U, 3036995573U, 3036995543U, 3036995531U, 3036995527U, 3036995491U, 3036995477U, 3036995459U, 3036995369U, 3036995281U, 3036995267U, 3036995257U, 3036995249U, 3036995239U, 3036995189U, 3036995161U, 3036995153U, 3036995123U, 3036995089U, 3036995083U, 3036995057U, 3036995051U, 3036995041U, 3036995021U, 3036994997U, 3036994963U, 3036994931U, 3036994921U, 3036994897U, 3036994889U, 3036994879U, 3036994847U, 3036994799U, 3036994787U, 3036994777U, 3036994747U, 3036994717U, 3036994703U, 3036994679U, 3036994673U, 3036994663U, 3036994661U, 3036994627U, 3036994621U, 3036994619U, 3036994591U, 3036994549U, 3036994547U, 3036994531U, 3036994511U, 3036994507U, 3036994489U, 3036994469U, 3036994439U, 3036994423U, 3036994417U, 3036994397U, 3036994381U, 3036994369U, 3036994349U, 3036994327U, 3036994309U, 3036994283U, 3036994249U, 3036994237U, 3036994229U, 3036994211U, 3036994193U, 3036994141U, 3036994099U, 3036994073U, 3036994069U, 3036994063U, 3036994043U, 3036994039U, 3036994033U, 3036994001U, 3036993977U, 3036993937U, 3036993913U, 3036993901U, 3036993893U, 3036993871U, 3036993769U, 3036993737U, 3036993727U, 3036993719U, 3036993677U, 3036993667U, 3036993613U, 3036993607U, 3036993601U, 3036993587U, 3036993571U, 3036993569U, 3036993541U, 3036993539U, 3036993529U, 3036993527U, 3036993511U, 3036993469U, 3036993437U, 3036993413U, 3036993367U, 3036993359U, 3036993331U, 3036993329U, 3036993319U, 3036993283U, 3036993277U, 3036993257U, 3036993251U, 3036993241U, 3036993233U, 3036993221U, 3036993217U, 3036993181U, 3036993161U, 3036993143U, 3036993133U, 3036993131U, 3036993107U, 3036993103U, 3036993097U, 3036993083U, 3036993077U, 3036993073U, 3036993023U, 3036992983U, 3036992977U, 3036992969U, 3036992957U, 3036992953U, 3036992921U, 3036992899U, 3036992879U, 3036992873U, 3036992869U, 3036992809U, 3036992773U, 3036992753U, 3036992747U, 3036992743U, 3036992741U, 3036992731U, 3036992719U, 3036992711U, 3036992701U, 3036992681U, 3036992669U, 3036992639U, 3036992579U, 3036992521U, 3036992507U, 3036992503U, 3036992461U, 3036992437U, 3036992423U, 3036992401U, 3036992383U, 3036992377U, 3036992341U, 3036992333U, 3036992293U, 3036992291U, 3036992249U, 3036992207U, 3036992191U, 3036992141U, 3036992131U, 3036992113U, 3036992087U, 3036992083U, 3036992069U, 3036992051U, 3036992033U, 3036992017U, 3036992011U, 3036991987U, 3036991981U, 3036991949U, 3036991943U, 3036991897U, 3036991891U, 3036991883U, 3036991861U, 3036991777U, 3036991757U, 3036991753U, 3036991747U, 3036991717U, 3036991649U, 3036991627U, 3036991619U, 3036991591U, 3036991543U, 3036991511U, 3036991501U, 3036991481U, 3036991453U, 3036991381U, 3036991361U, 3036991357U, 3036991327U, 3036991303U, 3036991301U, 3036991271U, 3036991261U, 3036991253U, 3036991249U, 3036991247U, 3036991189U, 3036991183U, 3036991171U, 3036991147U, 3036991127U, 3036991109U, 3036991081U, 3036991063U, 3036991049U, 3036991037U, 3036991033U, 3036991031U, 3036991021U, 3036990997U, 3036990977U, 3036990961U, 3036990949U, 3036990923U, 3036990907U, 3036990899U, 3036990893U, 3036990871U, 3036990851U, 3036990829U, 3036990779U, 3036990769U, 3036990763U, 3036990739U, 3036990727U, 3036990709U, 3036990703U, 3036990611U, 3036990559U, 3036990491U, 3036990431U, 3036990421U, 3036990401U, 3036990391U, 3036990379U, 3036990371U, 3036990323U, 3036990317U, 3036990277U, 3036990263U, 3036990247U, 3036990233U, 3036990227U, 3036990199U, 3036990193U, 3036990167U, 3036990163U, 3036990157U, 3036990071U, 3036990059U, 3036990049U, 3036990037U, 3036990029U, 3036990017U, 3036989999U, 3036989993U, 3036989983U, 3036989957U, 3036989863U, 3036989821U, 3036989797U, 3036989779U, 3036989723U, 3036989693U, 3036989687U, 3036989651U, 3036989611U, 3036989609U, 3036989603U, 3036989573U, 3036989561U, 3036989539U, 3036989477U, 3036989471U, 3036989441U, 3036989419U, 3036989381U, 3036989377U, 3036989363U, 3036989357U, 3036989353U, 3036989323U, 3036989297U, 3036989281U, 3036989261U, 3036989209U, 3036989167U, 3036989159U, 3036989149U, 3036989129U, 3036989107U, 3036989101U, 3036989077U, 3036989071U, 3036989063U, 3036989041U, 3036989027U, 3036988991U, 3036988879U, 3036988849U, 3036988819U, 3036988751U, 3036988739U, 3036988729U, 3036988727U, 3036988723U, 3036988699U, 3036988679U, 3036988673U, 3036988667U, 3036988651U, 3036988637U, 3036988631U, 3036988627U, 3036988583U, 3036988573U, 3036988571U, 3036988543U, 3036988523U, 3036988483U, 3036988469U, 3036988429U, 3036988417U, 3036988399U, 3036988397U, 3036988393U, 3036988387U, 3036988369U, 3036988349U, 3036988319U, 3036988313U, 3036988309U, 3036988301U, 3036988277U, 3036988271U, 3036988117U, 3036988111U, 3036988109U, 3036988081U, 3036988079U, 3036988043U, 3036988037U, 3036988027U, 3036988021U, 3036987991U, 3036987979U, 3036987937U, 3036987931U, 3036987929U, 3036987917U, 3036987913U, 3036987901U, 3036987883U, 3036987871U, 3036987809U, 3036987799U, 3036987773U, 3036987743U, 3036987731U, 3036987727U, 3036987719U, 3036987691U, 3036987659U, 3036987637U, 3036987631U, 3036987601U, 3036987589U, 3036987587U, 3036987581U, 3036987563U, 3036987557U, 3036987553U, 3036987533U, 3036987529U, 3036987523U, 3036987521U, 3036987469U, 3036987439U, 3036987427U, 3036987361U, 3036987337U, 3036987319U, 3036987311U, 3036987293U, 3036987251U, 3036987241U, 3036987197U, 3036987167U, 3036987127U, 3036987089U, 3036987077U, 3036987073U, 3036987067U, 3036987061U, 3036987043U, 3036986969U, 3036986957U, 3036986917U, 3036986881U, 3036986863U, 3036986851U, 3036986839U, 3036986803U, 3036986791U, 3036986789U, 3036986767U, 3036986759U, 3036986737U, 3036986713U, 3036986669U, 3036986609U, 3036986599U, 3036986593U, 3036986569U, 3036986509U, 3036986507U, 3036986501U, 3036986479U, 3036986441U, 3036986431U, 3036986417U, 3036986411U, 3036986383U, 3036986333U, 3036986287U, 3036986279U, 3036986203U, 3036986189U, 3036986167U, 3036986129U, 3036986123U, 3036986107U, 3036986041U, 3036986023U, 3036986009U, 3036985999U, 3036985993U, 3036985979U, 3036985949U, 3036985921U, 3036985877U, 3036985873U, 3036985837U, 3036985829U, 3036985817U, 3036985813U, 3036985799U, 3036985771U, 3036985753U, 3036985747U, 3036985741U, 3036985739U, 3036985733U, 3036985729U, 3036985709U, 3036985697U, 3036985673U, 3036985643U, 3036985613U, 3036985607U, 3036985603U, 3036985583U, 3036985561U, 3036985559U, 3036985547U, 3036985543U, 3036985499U, 3036985459U, 3036985439U, 3036985433U, 3036985409U, 3036985373U, 3036985361U, 3036985309U, 3036985291U, 3036985283U, 3036985267U, 3036985253U, 3036985249U, 3036985219U, 3036985207U, 3036985187U, 3036985177U, 3036985151U, 3036985097U, 3036985093U, 3036985073U, 3036985033U, 3036985031U, 3036985001U, 3036984997U, 3036984989U, 3036984971U, 3036984953U, 3036984943U, 3036984917U, 3036984887U, 3036984803U, 3036984799U, 3036984787U, 3036984773U, 3036984761U, 3036984751U, 3036984749U, 3036984721U, 3036984697U, 3036984673U, 3036984667U, 3036984637U, 3036984623U, 3036984589U, 3036984569U, 3036984563U, 3036984539U, 3036984527U, 3036984481U, 3036984479U, 3036984427U, 3036984421U, 3036984413U, 3036984407U, 3036984403U, 3036984373U, 3036984367U, 3036984361U, 3036984343U, 3036984319U, 3036984287U, 3036984259U, 3036984257U, 3036984253U, 3036984199U, 3036984191U, 3036984151U, 3036984133U, 3036984131U, 3036984089U, 3036984059U, 3036984053U, 3036984047U, 3036984017U, 3036983933U, 3036983923U, 3036983909U, 3036983897U, 3036983867U, 3036983843U, 3036983837U, 3036983827U, 3036983813U, 3036983809U, 3036983777U, 3036983771U, 3036983699U, 3036983689U, 3036983671U, 3036983657U, 3036983629U, 3036983623U, 3036983597U, 3036983567U, 3036983561U, 3036983539U, 3036983533U, 3036983497U, 3036983483U, 3036983441U, 3036983407U, 3036983387U, 3036983297U, 3036983281U, 3036983249U, 3036983203U, 3036983189U, 3036983177U, 3036983167U, 3036983137U, 3036983111U, 3036983099U, 3036983083U, 3036983063U, 3036983057U, 3036983041U, 3036982981U, 3036982937U, 3036982919U, 3036982853U, 3036982843U, 3036982841U, 3036982789U, 3036982777U, 3036982757U, 3036982727U, 3036982693U, 3036982643U, 3036982639U, 3036982601U, 3036982589U, 3036982577U, 3036982567U, 3036982547U, 3036982541U, 3036982523U, 3036982519U, 3036982489U, 3036982469U, 3036982451U, 3036982423U, 3036982397U, 3036982387U, 3036982349U, 3036982337U, 3036982331U, 3036982313U, 3036982297U, 3036982279U, 3036982271U, 3036982189U, 3036982139U, 3036982133U, 3036982121U, 3036982111U, 3036982103U, 3036982099U, 3036982093U, 3036982061U, 3036982043U, 3036982009U, 3036982001U, 3036981979U, 3036981967U, 3036981953U, 3036981931U, 3036981923U, 3036981917U, 3036981863U, 3036981859U, 3036981853U, 3036981851U, 3036981821U, 3036981811U, 3036981797U, 3036981763U, 3036981733U, 3036981713U, 3036981691U, 3036981659U, 3036981553U, 3036981547U, 3036981539U, 3036981533U, 3036981481U, 3036981421U, 3036981407U, 3036981401U, 3036981383U, 3036981373U, 3036981359U, 3036981347U, 3036981323U, 3036981313U, 3036981307U, 3036981301U, 3036981289U, 3036981287U, 3036981209U, 3036981179U, 3036981139U, 3036981097U, 3036981067U, 3036981043U, 3036981041U, 3036981023U, 3036981011U, 3036980971U, 3036980941U, 3036980917U, 3036980911U, 3036980897U, 3036980867U, 3036980851U, 3036980819U, 3036980803U, 3036980761U, 3036980753U, 3036980747U, 3036980701U, 3036980699U, 3036980677U, 3036980599U, 3036980579U, 3036980549U, 3036980537U, 3036980533U, 3036980519U, 3036980497U, 3036980491U, 3036980459U, 3036980423U, 3036980371U, 3036980363U, 3036980339U, 3036980327U, 3036980269U, 3036980267U, 3036980263U, 3036980207U, 3036980161U, 3036980129U, 3036980123U, 3036980117U, 3036980077U, 3036980071U, 3036980047U, 3036980041U, 3036980039U, 3036980033U, 3036980027U, 3036979997U, 3036979987U, 3036979937U, 3036979927U, 3036979919U, 3036979873U, 3036979861U, 3036979849U, 3036979837U, 3036979793U, 3036979787U, 3036979769U, 3036979763U, 3036979723U, 3036979709U, 3036979679U, 3036979661U, 3036979601U, 3036979597U, 3036979579U, 3036979571U, 3036979531U, 3036979529U, 3036979523U, 3036979457U, 3036979391U, 3036979357U, 3036979343U, 3036979339U, 3036979303U, 3036979301U, 3036979291U, 3036979289U, 3036979261U, 3036979249U, 3036979237U, 3036979223U, 3036762997U, 3036545581U, 3036327389U, 3036107951U, 3035888633U, 3035669363U, 3035449477U, 3035232667U, 3035014193U, 3034795427U, 3034577531U, 3034357853U, 3034138969U, 3033923621U, 3033706409U, 3033488597U, 3033267889U, 3033049871U, 3032832493U, 3032615063U, 3032396527U, 3032177359U, 3031960339U, 3031742731U, 3031526081U, 3031308359U, 3031092199U, 3030873071U, 3030655757U, 3030437257U, 3030218647U, 3029999191U, 3029780833U, 3029559389U, 3029339741U, 3029122153U, 3028904231U, 3028687897U, 3028467803U, 3028251181U, 3028034189U, 3027815579U, 3027597247U, 3027377317U, 3027158237U, 3026939441U, 3026721421U, 3026502179U, 3026282261U, 3026065561U, 3025847507U, 3025627663U, 3025409689U, 3025190813U, 3024971231U, 3024753383U, 3024533179U, 3024312673U, 3024094123U, 3023876753U, 3023655737U, 3023439317U, 3023222239U, 3023004151U, 3022786831U, 3022566857U, 3022349243U, 3022131979U, 3021911663U, 3021695137U, 3021477377U, 3021256289U, 3021037769U, 3020820247U, 3020600897U, 3020381843U, 3020165179U, 3019948573U, 3019729819U, 3019510561U, 3019294087U, 3019074679U, 3018854257U, 3018637471U, 3018418159U, 3018199469U, 3017981123U, 3017762807U, 3017544701U, 3017327809U, 3017107381U, 3016890403U, 3016671503U, 3016453117U, 3016234721U, 3016015661U, 3015797003U, 3015579211U, 3015360779U, 3015141427U, 3014924197U, 3014705597U, 3014487473U, 3014268743U, 3014052511U, 3013832473U, 3013615529U, 3013397269U, 3013177819U, 3012960241U, 3012743291U, 3012525497U, 3012307019U, 3012088889U, 3011870993U, 3011652491U, 3011434169U, 3011217061U, 3010999219U, 3010780781U, 3010564993U, 3010348387U, 3010127833U, 3009910177U, 3009693839U, 3009474253U, 3009255637U, 3009037517U, 3008820911U, 3008599381U, 3008379739U, 3008159723U, 3007941473U, 3007724221U, 3007506361U, 3007288589U, 3007068709U, 3006850277U, 3006630499U, 3006412979U, 3006194489U, 3005975761U, 3005755367U, 3005537413U, 3005317433U, 3005101609U, 3004884821U, 3004669463U, 3004450633U, 3004231093U, 3004011743U, 3003795953U, 3003576871U, 3003357971U, 3003138847U, 3002919079U, 3002700947U, 3002481649U, 3002264299U, 3002046821U, 3001828987U, 3001609753U, 3001390789U, 3001172389U, 3000954289U, 3000736049U, 3000517057U, 3000299059U, 3000081691U, 2999865541U, 2999645267U, 2999428681U, 2999208437U, 2998989517U, 2998769261U, 2998552309U, 2998331761U, 2998112737U, 2997895037U, 2997675017U, 2997456079U, 2997236027U, 2997018683U, 2996799863U, 2996579689U, 2996360473U, 2996141653U, 2995922999U, 2995706647U, 2995488203U, 2995270471U, 2995052131U, 2994832817U, 2994613397U, 2994394969U, 2994176371U, 2993958943U, 2993739953U, 2993521463U, 2993302891U, 2993085449U, 2992867159U, 2992647499U, 2992428287U, 2992211983U, 2991996857U, 2991776339U, 2991556427U, 2991341417U, 2991121901U, 2990904949U, 2990686943U, 2990471509U, 2990252131U, 2990033617U, 2989816859U, 2989597759U, 2989377431U, 2989159883U, 2988940987U, 2988721301U, 2988502883U, 2988285617U, 2988066629U, 2987849437U, 2987630771U, 2987414873U, 2987198597U, 2986980923U, 2986764181U, 2986545649U, 2986327571U, 2986109209U, 2985890657U, 2985670433U, 2985453733U, 2985237617U, 2985019019U, 2984801321U, 2984581697U, 2984360947U, 2984142757U, 2983925299U, 2983708313U, 2983488721U, 2983270751U, 2983052749U, 2982833473U, 2982617243U, 2982401029U, 2982184763U, 2981967419U, 2981746181U, 2981525629U, 2981308009U, 2981089733U, 2980871129U, 2980654093U, 2980435439U, 2980218091U, 2980002373U, 2979781547U, 2979562793U, 2979344219U, 2979127687U, 2978907857U, 2978690389U, 2978472713U, 2978255261U, 2978038267U, 2977818317U, 2977601191U, 2977384337U, 2977166617U, 2976948059U, 2976730721U, 2976512857U, 2976292927U, 2976075541U, 2975857043U, 2975638751U, 2975421623U, 2975204087U, 2974987151U, 2974768619U, 2974552081U, 2974332671U, 2974113341U, 2973895261U, 2973677171U, 2973458113U, 2973241703U, 2973023369U, 2972804099U, 2972586329U, 2972367829U, 2972149039U, 2971931051U, 2971711019U, 2971494139U, 2971277423U, 2971059173U, 2970838919U, 2970619343U, 2970403757U, 2970183743U, 2969959627U, 2969743547U, 2969525033U, 2969309891U, 2969090279U, 2968871251U, 2968651541U, 2968435117U, 2968214531U, 2967996443U, 2967780931U, 2967562369U, 2967343021U, 2967124487U, 2966906353U, 2966688983U, 2966472557U, 2966253179U, 2966035691U, 2965819673U, 2965600733U, 2965383739U, 2965166959U, 2964946847U, 2964729197U, 2964510889U, 2964292297U, 2964075437U, 2963855227U, 2963638693U, 2963421677U, 2963204119U, 2962986503U, 2962766491U, 2962547311U, 2962331657U, 2962112771U, 2961895337U, 2961679121U, 2961460591U, 2961241603U, 2961022781U, 2960805161U, 2960587099U, 2960369359U, 2960151149U, 2959931383U, 2959714627U, 2959495937U, 2959277393U, 2959059997U, 2958843161U, 2958625499U, 2958407399U, 2958189191U, 2957972767U, 2957753053U, 2957535137U, 2957317171U, 2957098873U, 2956880557U, 2956660747U, 2956441343U, 2956224577U, 2956007273U, 2955789979U, 2955569107U, 2955349213U, 2955131051U, 2954912297U, 2954693083U, 2954475233U, 2954255153U, 2954037211U, 2953818851U, 2953599667U, 2953381993U, 2953162151U, 2952942739U, 2952725873U, 2952506693U, 2952289517U, 2952071821U, 2951854319U, 2951636731U, 2951419189U, 2951201251U, 2950982971U, 2950763201U, 2950544221U, 2950326689U, 2950110017U, 2949891643U, 2949673561U, 2949456077U, 2949238151U, 2949022819U, 2948803327U, 2948584297U, 2948367439U, 2948148473U, 2947930483U, 2947712767U, 2947495459U, 2947277803U, 2947061057U, 2946842537U, 2946625949U, 2946405619U, 2946187753U, 2945970421U, 2945751373U, 2945535001U, 2945315713U, 2945096753U, 2944880387U, 2944658933U, 2944441141U, 2944223479U, 2944005997U, 2943788681U, 2943569197U, 2943351529U, 2943132887U, 2942914609U, 2942697049U, 2942480587U, 2942261857U, 2942041747U, 2941824229U, 2941604959U, 2941387153U, 2941168301U, 2940949691U, 2940733787U, 2940516781U, 2940299849U, 2940084479U, 2939867743U, 2939650613U, 2939432609U, 2939214277U, 2938996777U, 2938779271U, 2938560353U, 2938341551U, 2938124249U, 2937905819U, 2937690901U, 2937472607U, 2937253091U, 2937035341U, 2936814169U, 2936597249U, 2936378723U, 2936162003U, 2935942103U, 2935724443U, 2935504679U, 2935286489U, 2935067897U, 2934850591U, 2934633607U, 2934416071U, 2934197197U, 2933980571U, 2933761433U, 2933543771U, 2933324839U, 2933105831U, 2932886129U, 2932668953U, 2932451867U, 2932234901U, 2932015831U, 2931799373U, 2931579601U, 2931363089U, 2931144523U, 2930928227U, 2930711587U, 2930493919U, 2930273009U, 2930054573U, 2929836719U, 2929619653U, 2929400603U, 2929183613U, 2928966151U, 2928748139U, 2928530929U, 2928313153U, 2928094357U, 2927875619U, 2927658673U, 2927442487U, 2927222069U, 2927004709U, 2926787309U, 2926569361U, 2926350367U, 2926135529U, 2925917893U, 2925698173U, 2925480919U, 2925263279U, 2925046463U, 2924831069U, 2924613371U, 2924393729U, 2924175193U, 2923954801U, 2923737343U, 2923518683U, 2923300829U, 2923082209U, 2922864767U, 2922649421U, 2922430073U, 2922212519U, 2921994917U, 2921775803U, 2921559653U, 2921341103U, 2921126489U, 2920908283U, 2920689061U, 2920471049U, 2920251703U, 2920034347U, 2919817627U, 2919598021U, 2919381319U, 2919162959U, 2918943683U, 2918729057U, 2918510587U, 2918292271U, 2918072057U, 2917854413U, 2917635811U, 2917419499U, 2917202663U, 2916983521U, 2916765193U, 2916545773U, 2916328517U, 2916112183U, 2915893681U, 2915677241U, 2915456513U, 2915239601U, 2915020937U, 2914803761U, 2914586503U, 2914368059U, 2914150271U, 2913932779U, 2913714131U, 2913494791U, 2913274457U, 2913057307U, 2912839169U, 2912621401U, 2912404247U, 2912187853U, 2911970317U, 2911752157U, 2911532539U, 2911313501U, 2911094951U, 2910876457U, 2910657353U, 2910439451U, 2910221297U, 2910003703U, 2909787409U, 2909568721U, 2909351741U, 2909134769U, 2908916249U, 2908699601U, 2908480777U, 2908262023U, 2908043023U, 2907825317U, 2907607337U, 2907388073U, 2907166967U, 2906952473U, 2906736593U, 2906518943U, 2906300231U, 2906082233U, 2905864067U, 2905644013U, 2905426619U, 2905208881U, 2904993263U, 2904773771U, 2904556769U, 2904338867U, 2904123031U, 2903903861U, 2903686447U, 2903468497U, 2903250821U, 2903031559U, 2902812839U, 2902597123U, 2902380449U, 2902160717U, 2901941417U, 2901724187U, 2901507019U, 2901289403U, 2901071813U, 2900854379U, 2900634593U, 2900418889U, 2900202287U, 2899984603U, 2899766291U, 2899550011U, 2899332323U, 2899114357U, 2898895687U, 2898677891U, 2898458359U, 2898238669U, 2898022789U, 2897804407U, 2897587421U, 2897369021U, 2897150423U, 2896932589U, 2896714631U, 2896495643U, 2896278251U, 2896061459U, 2895842179U, 2895625609U, 2895408143U, 2895191393U, 2894976157U, 2894758709U, 2894538461U, 2894320211U, 2894101087U, 2893885381U, 2893666007U, 2893448681U, 2893230569U, 2893012403U, 2892794153U, 2892573601U, 2892357361U, 2892141401U, 2891924291U, 2891705197U, 2891485453U, 2891265869U, 2891046343U, 2890827241U, 2890611539U, 2890395037U, 2890176347U, 2889959197U, 2889741301U, 2889523193U, 2889304499U, 2889089393U, 2888872171U, 2888652913U, 2888435443U, 2888217103U, 2887998313U, 2887779967U, 2887561093U, 2887343237U, 2887123997U, 2886907081U, 2886689119U, 2886472033U, 2886253057U, 2886035473U, 2885816789U, 2885599417U, 2885384233U, 2885167091U, 2884947421U, 2884728403U, 2884511183U, 2884293637U, 2884076357U, 2883857357U, 2883636991U, 2883420959U, 2883205421U, 2882988211U, 2882768663U, 2882551601U, 2882332891U, 2882115923U, 2881893467U, 2881675499U, 2881460221U, 2881243067U, 2881026271U, 2880811447U, 2880592861U, 2880372919U, 2880155819U, 2879937503U, 2879719223U, 2879501707U, 2879284477U, 2879065151U, 2878847353U, 2878630171U, 2878412213U, 2878195469U, 2877978211U, 2877761027U, 2877542959U, 2877323003U, 2877103631U, 2876887777U, 2876669153U, 2876450789U, 2876234329U, 2876015969U, 2875798063U, 2875580219U, 2875359587U, 2875143757U, 2874924197U, 2874705727U, 2874488887U, 2874269987U, 2874053293U, 2873838833U, 2873621573U, 2873405077U, 2873184967U, 2872965317U, 2872747699U, 2872530079U, 2872311397U, 2872093027U, 2871876197U, 2871660371U, 2871442997U, 2871223709U, 2871006713U, 2870788931U, 2870569511U, 2870353319U, 2870136403U, 2869918537U, 2869699211U, 2869482403U, 2869264327U, 2869046833U, 2868829897U, 2868611561U, 2868394531U, 2868174143U, 2867957447U, 2867741813U, 2867525273U, 2867306537U, 2867087807U, 2866870037U, 2866650131U, 2866432507U, 2866214723U, 2865995389U, 2865779281U, 2865562759U, 2865345643U, 2865128281U, 2864909689U, 2864694359U, 2864474981U, 2864259109U, 2864041781U, 2863821967U, 2863603163U, 2863384697U, 2863168019U, 2862948337U, 2862729659U, 2862513271U, 2862296011U, 2862079601U, 2861861329U, 2861642369U, 2861425097U, 2861209789U, 2860995217U, 2860778423U, 2860561097U, 2860342603U, 2860123993U, 2859905843U, 2859688873U, 2859471767U, 2859252779U, 2859032731U, 2858814547U, 2858597117U, 2858380367U, 2858163197U, 2857943411U, 2857725271U, 2857506689U, 2857290773U, 2857072787U, 2856856927U, 2856636661U, 2856421241U, 2856205237U, 2855990087U, 2855772947U, 2855553373U, 2855333407U, 2855115623U, 2854898329U, 2854680739U, 2854464091U, 2854245203U, 2854025267U, 2853810433U, 2853595379U, 2853379457U, 2853160217U, 2852940071U, 2852723551U, 2852506303U, 2852289907U, 2852072389U, 2851854713U, 2851637123U, 2851420771U, 2851204067U, 2850984959U, 2850768589U, 2850549269U, 2850330421U, 2850111983U, 2849894777U, 2849677687U, 2849461753U, 2849245277U, 2849027833U, 2848809701U, 2848590973U, 2848374059U, 2848154471U, 2847936691U, 2847718589U, 2847501413U, 2847283139U, 2847064399U, 2846845681U, 2846630233U, 2846412451U, 2846195621U, 2845978997U, 2845761719U, 2845545929U, 2845328281U, 2845111153U, 2844894137U, 2844676819U, 2844457703U, 2844237833U, 2844020057U, 2843802061U, 2843583269U, 2843367311U, 2843148307U, 2842929931U, 2842712767U, 2842494803U, 2842276837U, 2842059893U, 2841843317U, 2841625249U, 2841405043U, 2841186893U, 2840966993U, 2840751341U, 2840533337U, 2840315887U, 2840099881U, 2839879993U, 2839663579U, 2839446527U, 2839227731U, 2839010423U, 2838792029U, 2838573323U, 2838357359U, 2838139411U, 2837920433U, 2837703611U, 2837486299U, 2837267611U, 2837049623U, 2836833059U, 2836613807U, 2836398179U, 2836180517U, 2835963887U, 2835744931U, 2835526247U, 2835309481U, 2835089911U, 2834871859U, 2834655797U, 2834437279U, 2834220317U, 2834003617U, 2833786201U, 2833565099U, 2833349143U, 2833132711U, 2832915803U, 2832695309U, 2832478303U, 2832259931U, 2832041741U, 2831822611U, 2831604649U, 2831385941U, 2831168953U, 2830949377U, 2830732193U, 2830514789U, 2830296191U, 2830078421U, 2829861907U, 2829645557U, 2829428501U, 2829210367U, 2828994253U, 2828776007U, 2828556517U, 2828338973U, 2828122361U, 2827905911U, 2827687451U, 2827470001U, 2827253929U, 2827036441U, 2826817351U, 2826600781U, 2826383321U, 2826165103U, 2825945599U, 2825728769U, 2825510437U, 2825292881U, 2825075599U, 2824857577U, 2824637267U, 2824421753U, 2824203383U, 2823985121U, 2823767741U, 2823552713U, 2823334027U, 2823115531U, 2822899567U, 2822681171U, 2822466149U, 2822249779U, 2822031559U, 2821815097U, 2821597187U, 2821377467U, 2821161307U, 2820944677U, 2820726023U, 2820509233U, 2820291787U, 2820074617U, 2819858617U, 2819639863U, 2819420909U, 2819204699U, 2818986097U, 2818769671U, 2818554127U, 2818338797U, 2818119323U, 2817902393U, 2817687143U, 2817470609U, 2817251677U, 2817033533U, 2816816729U, 2816597177U, 2816379701U, 2816161721U, 2815943177U, 2815724267U, 2815508719U, 2815292171U, 2815074161U, 2814855517U, 2814639523U, 2814424241U, 2814205813U, 2813989523U, 2813771789U, 2813553863U, 2813335013U, 2813118311U, 2812899511U, 2812682017U, 2812466269U, 2812247873U, 2812029713U, 2811814463U, 2811594971U, 2811377483U, 2811158557U, 2810940163U, 2810724047U, 2810504129U, 2810285299U, 2810067109U, 2809850917U, 2809632401U, 2809416563U, 2809198597U, 2808980641U, 2808761933U, 2808546109U, 2808327799U, 2808109763U, 2807892041U, 2807673161U, 2807455799U, 2807239129U, 2807021237U, 2806801457U, 2806581781U, 2806364989U, 2806148617U, 2805931031U, 2805715879U, 2805500573U, 2805283331U, 2805064187U, 2804847361U, 2804630473U, 2804413741U, 2804195767U, 2803975861U, 2803759481U, 2803540147U, 2803324603U, 2803107253U, 2802890353U, 2802672823U, 2802457183U, 2802239873U, 2802023131U, 2801805257U, 2801588953U, 2801372323U, 2801154773U, 2800937873U, 2800719839U, 2800502303U, 2800284107U, 2800066679U, 2799847909U, 2799629947U, 2799413213U, 2799194747U, 2798976953U, 2798757359U, 2798541121U, 2798323391U, 2798104747U, 2797889089U, 2797671869U, 2797455259U, 2797239293U, 2797022453U, 2796803531U, 2796585007U, 2796367729U, 2796151247U, 2795933939U, 2795714539U, 2795497283U, 2795280629U, 2795064541U, 2794846657U, 2794628513U, 2794411001U, 2794193641U, 2793974507U, 2793756883U, 2793538697U, 2793322783U, 2793104891U, 2792887567U, 2792669413U, 2792450077U, 2792234747U, 2792015983U, 2791799281U, 2791579949U, 2791362671U, 2791148117U, 2790929363U, 2790712147U, 2790494117U, 2790276341U, 2790057701U, 2789840201U, 2789622509U, 2789404531U, 2789187923U, 2788970959U, 2788753739U, 2788535047U, 2788317643U, 2788099129U, 2787883151U, 2787666533U, 2787448931U, 2787231721U, 2787014497U, 2786796839U, 2786578331U, 2786361649U, 2786144821U, 2785926443U, 2785709483U, 2785492691U, 2785276147U, 2785059701U, 2784842513U, 2784623269U, 2784403757U, 2784186253U, 2783970367U, 2783751689U, 2783533561U, 2783316001U, 2783098823U, 2782882673U, 2782664111U, 2782447223U, 2782229669U, 2782011607U, 2781792473U, 2781577033U, 2781359699U, 2781143957U, 2780925857U, 2780705443U, 2780487971U, 2780272037U, 2780052623U, 2779835621U, 2779620559U, 2779402261U, 2779184761U, 2778966361U, 2778750509U, 2778533341U, 2778314027U, 2778097499U, 2777877251U, 2777660539U, 2777443531U, 2777226589U, 2777009243U, 2776792973U, 2776576351U, 2776361117U, 2776143047U, 2775924847U, 2775707611U, 2775489313U, 2775272177U, 2775054169U, 2774836811U, 2774619791U, 2774401967U, 2774184313U, 2773966513U, 2773747181U, 2773530527U, 2773313149U, 2773095791U, 2772879017U, 2772660467U, 2772444667U, 2772228551U, 2772009767U, 2771792449U, 2771576581U, 2771359039U, 2771144221U, 2770927889U, 2770711787U, 2770494997U, 2770277231U, 2770058563U, 2769839873U, 2769624397U, 2769407651U, 2769188251U, 2768970991U, 2768754187U, 2768536579U, 2768319319U, 2768102431U, 2767887809U, 2767669573U, 2767451647U, 2767235123U, 2767018187U, 2766800807U, 2766583471U, 2766366329U, 2766148349U, 2765931257U, 2765713711U, 2765494453U, 2765279519U, 2765058767U, 2764841509U, 2764622239U, 2764406269U, 2764188703U, 2763970529U, 2763752401U, 2763533807U, 2763317149U, 2763100811U, 2762884231U, 2762668303U, 2762450149U, 2762230519U, 2762015407U, 2761798139U, 2761581419U, 2761365491U, 2761146097U, 2760927271U, 2760711053U, 2760493937U, 2760274871U, 2760056279U, 2759839081U, 2759621659U, 2759403499U, 2759183873U, 2758967117U, 2758749431U, 2758531091U, 2758312511U, 2758094869U, 2757875647U, 2757661289U, 2757443287U, 2757225577U, 2757009529U, 2756793001U, 2756576659U, 2756357939U, 2756141051U, 2755926427U, 2755708801U, 2755491989U, 2755275233U, 2755057649U, 2754840499U, 2754623321U, 2754407107U, 2754190189U, 2753970071U, 2753751277U, 2753533889U, 2753317397U, 2753098739U, 2752879889U, 2752663559U, 2752447129U, 2752230763U, 2752012477U, 2751795523U, 2751574817U, 2751359173U, 2751143231U, 2750927563U, 2750710201U, 2750494993U, 2750277767U, 2750058631U, 2749838719U, 2749621681U, 2749404323U, 2749186409U, 2748969491U, 2748754933U, 2748537481U, 2748318541U, 2748099931U, 2747881769U, 2747664079U, 2747446327U, 2747228923U, 2747009921U, 2746791577U, 2746574401U, 2746356461U, 2746139393U, 2745923597U, 2745705107U, 2745486259U, 2745268853U, 2745053603U, 2744837633U, 2744620103U, 2744402081U, 2744184061U, 2743965649U, 2743747399U, 2743529093U, 2743309747U, 2743091501U, 2742875263U, 2742657499U, 2742436849U, 2742221177U, 2742002209U, 2741784317U, 2741565467U, 2741350751U, 2741134939U, 2740917589U, 2740700147U, 2740484129U, 2740268543U, 2740051661U, 2739832097U, 2739613999U, 2739397519U, 2739180611U, 2738965601U, 2738750713U, 2738530519U, 2738312657U, 2738097601U, 2737880659U, 2737663919U, 2737447673U, 2737231039U, 2737011469U, 2736795203U, 2736577367U, 2736359929U, 2736140411U, 2735922361U, 2735707621U, 2735490701U, 2735272087U, 2735051993U, 2734834733U, 2734617673U, 2734399807U, 2734183789U, 2733964489U, 2733747299U, 2733531319U, 2733315773U, 2733096937U, 2732877229U, 2732659313U, 2732442539U, 2732224381U, 2732008493U, 2731791107U, 2731575277U, 2731359073U, 2731143791U, 2730927193U, 2730710711U, 2730492463U, 2730272821U, 2730056191U, 2729836853U, 2729618401U, 2729401309U, 2729183783U, 2728967399U, 2728750513U, 2728532957U, 2728316387U, 2728095649U, 2727876353U, 2727657487U, 2727441889U, 2727223129U, 2727005321U, 2726785889U, 2726567969U, 2726350567U, 2726134057U, 2725917767U, 2725702043U, 2725483997U, 2725265143U, 2725048691U, 2724834121U, 2724617173U, 2724400213U, 2724182843U, 2723963009U, 2723744983U, 2723527771U, 2723309219U, 2723091817U, 2722872419U, 2722654423U, 2722437283U, 2722221071U, 2722003787U, 2721787063U, 2721571087U, 2721354179U, 2721135533U, 2720918813U, 2720700211U, 2720482043U, 2720263867U, 2720045333U, 2719829513U, 2719610849U, 2719394527U, 2719178291U, 2718963449U, 2718746123U, 2718526709U, 2718310267U, 2718091331U, 2717873803U, 2717658043U, 2717440529U, 2717224541U, 2717007047U, 2716791377U, 2716572949U, 2716355051U, 2716137659U, 2715920573U, 2715704273U, 2715486167U, 2715267853U, 2715051109U, 2714833687U, 2714615261U, 2714398829U, 2714182301U, 2713964917U, 2713748071U, 2713530331U, 2713313419U, 2713095769U, 2712878431U, 2712662101U, 2712443231U, 2712227411U, 2712009089U, 2711793187U, 2711574529U, 2711360329U, 2711144291U, 2710924687U, 2710707551U, 2710489841U, 2710273571U, 2710057997U, 2709838841U, 2709622463U, 2709405917U, 2709186349U, 2708968877U, 2708750413U, 2708532971U, 2708318071U, 2708101423U, 2707882889U, 2707665913U, 2707449389U, 2707232833U, 2707015789U, 2706799423U, 2706580579U, 2706364931U, 2706147757U, 2705930971U, 2705712257U, 2705495677U, 2705279699U, 2705062303U, 2704846349U, 2704628477U, 2704412203U, 2704194443U, 2703975119U, 2703756427U, 2703538801U, 2703322967U, 2703105413U, 2702888407U, 2702670497U, 2702454919U, 2702235997U, 2702021737U, 2701801493U, 2701585729U, 2701367989U, 2701151581U, 2700934559U, 2700718619U, 2700500519U, 2700284057U, 2700067691U, 2699850661U, 2699632207U, 2699414203U, 2699197199U, 2698979867U, 2698763449U, 2698546423U, 2698328177U, 2698112723U, 2697894349U, 2697677911U, 2697461189U, 2697244709U, 2697028651U, 2696813281U, 2696594269U, 2696377417U, 2696159857U, 2695942259U, 2695726037U, 2695509877U, 2695293703U, 2695077029U, 2694857899U, 2694641657U, 2694426953U, 2694209863U, 2693992429U, 2693776999U, 2693558843U, 2693339317U, 2693121281U, 2692904281U, 2692687223U, 2692468787U, 2692252309U, 2692034089U, 2691819241U, 2691602107U, 2691383239U, 2691166903U, 2690948789U, 2690732003U, 2690515171U, 2690299373U, 2690081593U, 2689862561U, 2689645753U, 2689428227U, 2689209829U, 2688993607U, 2688777209U, 2688561017U, 2688343547U, 2688127933U, 2687911913U, 2687694539U, 2687476763U, 2687263067U, 2687049571U, 2686832471U, 2686615571U, 2686398347U, 2686179949U, 2685965081U, 2685747137U, 2685529541U, 2685310961U, 2685093211U, 2684876093U, 2684658019U, 2684440067U, 2684223953U, 2684005817U, 2683789963U, 2683571243U, 2683353733U, 2683137199U, 2682917623U, 2682700063U, 2682479377U, 2682264451U, 2682047707U, 2681828923U, 2681611753U, 2681394413U, 2681177111U, 2680959709U, 2680744291U, 2680525957U, 2680308977U, 2680096213U, 2679877279U, 2679660703U, 2679442013U, 2679225181U, 2679008639U, 2678791777U, 2678576051U, 2678358019U, 2678142487U, 2677926301U, 2677708807U, 2677493873U, 2677275257U, 2677055411U, 2676838837U, 2676620759U, 2676405769U, 2676189599U, 2675970641U, 2675755597U, 2675538689U, 2675323379U, 2675104633U, 2674886273U, 2674669183U, 2674452647U, 2674236199U, 2674019521U, 2673802099U, 2673589109U, 2673370517U, 2673153583U, 2672936393U, 2672719319U, 2672502383U, 2672285699U, 2672069171U, 2671851187U, 2671632563U, 2671414829U, 2671199281U, 2670982297U, 2670764023U, 2670547589U, 2670329219U, 2670112937U, 2669897969U, 2669681671U, 2669463829U, 2669247731U, 2669028689U, 2668810241U, 2668592911U, 2668377587U, 2668161701U, 2667945023U, 2667728057U, 2667510931U, 2667293077U, 2667076751U, 2666860253U, 2666643367U, 2666425523U, 2666207899U, 2665990751U, 2665773419U, 2665557353U, 2665337501U, 2665121737U, 2664904817U, 2664690073U, 2664472079U, 2664258323U, 2664039709U, 2663820461U, 2663602421U, 2663387431U, 2663168177U, 2662951507U, 2662735541U, 2662516147U, 2662300259U, 2662082509U, 2661865067U, 2661648779U, 2661432827U, 2661214163U, 2660999801U, 2660781689U, 2660562241U, 2660345951U, 2660127443U, 2659910443U, 2659691731U, 2659474313U, 2659255663U, 2659039301U, 2658822889U, 2658607327U, 2658391117U, 2658171743U, 2657953993U, 2657735627U, 2657519093U, 2657300533U, 2657084537U, 2656869827U, 2656653679U, 2656434799U, 2656218541U, 2656001609U, 2655785789U, 2655570427U, 2655354607U, 2655138589U, 2654923177U, 2654706149U, 2654489879U, 2654274641U, 2654055773U, 2653839263U, 2653621843U, 2653405831U, 2653189291U, 2652972197U, 2652754297U, 2652539249U, 2652321443U, 2652103859U, 2651884883U, 2651667787U, 2651451791U, 2651231629U, 2651014127U, 2650796653U, 2650580249U, 2650363361U, 2650147111U, 2649933037U, 2649715879U, 2649498611U, 2649282833U, 2649064001U, 2648847847U, 2648628863U, 2648409479U, 2648192941U, 2647976189U, 2647759267U, 2647543273U, 2647326169U, 2647110629U, 2646891629U, 2646675377U, 2646458467U, 2646241303U, 2646024781U, 2645808241U, 2645591363U, 2645373799U, 2645155729U, 2644938983U, 2644720241U, 2644505509U, 2644285547U, 2644068403U, 2643849823U, 2643632899U, 2643416371U, 2643198983U, 2642982389U, 2642764637U, 2642546867U, 2642330021U, 2642114309U, 2641897289U, 2641679903U, 2641464583U, 2641247107U, 2641030501U, 2640813577U, 2640595387U, 2640378677U, 2640158657U, 2639944249U, 2639727721U, 2639511683U, 2639296301U, 2639077267U, 2638858801U, 2638637987U, 2638423691U, 2638207669U, 2637992069U, 2637776507U, 2637558317U, 2637341431U, 2637125737U, 2636909777U, 2636691353U, 2636473793U, 2636255731U, 2636038121U, 2635820051U, 2635603241U, 2635384553U, 2635166099U, 2634948179U, 2634729767U, 2634513631U, 2634295421U, 2634078131U, 2633861851U, 2633645137U, 2633429243U, 2633212481U, 2632993633U, 2632775279U, 2632558007U, 2632341337U, 2632126339U, 2631908537U, 2631692597U, 2631477319U, 2631259781U, 2631043561U, 2630828731U, 2630613143U, 2630397893U, 2630179499U, 2629962739U, 2629744907U, 2629529321U, 2629310449U, 2629091953U, 2628874163U, 2628659393U, 2628440917U, 2628222629U, 2628006571U, 2627789387U, 2627571263U, 2627356183U, 2627139131U, 2626923749U, 2626706723U, 2626490747U, 2626273151U, 2626054199U, 2625836069U, 2625621469U, 2625405073U, 2625186331U, 2624968571U, 2624753177U, 2624536573U, 2624318867U, 2624102137U, 2623886479U, 2623670167U, 2623450667U, 2623233539U, 2623015669U, 2622798911U, 2622582203U, 2622365293U, 2622146899U, 2621929019U, 2621714273U, 2621497343U, 2621280383U, 2621064059U, 2620847813U, 2620631471U, 2620414429U, 2620198877U, 2619982487U, 2619765787U, 2619550579U, 2619333139U, 2619116081U, 2618899931U, 2618682371U, 2618463889U, 2618248037U, 2618032909U, 2617816303U, 2617598407U, 2617381099U, 2617163711U, 2616947087U, 2616730153U, 2616515873U, 2616296401U, 2616081211U, 2615863463U, 2615646091U, 2615429951U, 2615214491U, 2614996649U, 2614780747U, 2614561129U, 2614343869U, 2614125539U, 2613909959U, 2613692597U, 2613477539U, 2613260467U, 2613044363U, 2612829473U, 2612611453U, 2612394649U, 2612176891U, 2611957609U, 2611740809U, 2611525001U, 2611307623U, 2611092301U, 2610874723U, 2610658429U, 2610440659U, 2610225349U, 2610009869U, 2609793761U, 2609575523U, 2609357537U, 2609140153U, 2608923287U, 2608707473U, 2608489789U, 2608273363U, 2608055477U, 2607838963U, 2607621487U, 2607403291U, 2607186877U, 2606966951U, 2606751743U, 2606533609U, 2606317411U, 2606100793U, 2605883897U, 2605667153U, 2605448753U, 2605231193U, 2605014913U, 2604797309U, 2604582131U, 2604366593U, 2604149179U, 2603934233U, 2603717729U, 2603502661U, 2603284571U, 2603067263U, 2602846133U, 2602629787U, 2602412567U, 2602195759U, 2601979477U, 2601761791U, 2601547447U, 2601328687U, 2601107869U, 2600891873U, 2600673967U, 2600457787U, 2600242111U, 2600025353U, 2599807471U, 2599589617U, 2599374607U, 2599156873U, 2598942991U, 2598725593U, 2598507889U, 2598293911U, 2598075091U, 2597857697U, 2597643011U, 2597426287U, 2597207407U, 2596990943U, 2596775537U, 2596557989U, 2596340353U, 2596123469U, 2595906763U, 2595690697U, 2595473267U, 2595256019U, 2595041297U, 2594823029U, 2594608529U, 2594391979U, 2594174971U, 2593957823U, 2593739803U, 2593521767U, 2593305053U, 2593087513U, 2592871531U, 2592654041U, 2592437929U, 2592221161U, 2592003863U, 2591787493U, 2591571179U, 2591355859U, 2591139919U, 2590921727U, 2590705829U, 2590488157U, 2590272709U, 2590057949U, 2589843371U, 2589624967U, 2589408167U, 2589194147U, 2588976583U, 2588759923U, 2588542763U, 2588325721U, 2588107619U, 2587892101U, 2587675567U, 2587460251U, 2587244389U, 2587025141U, 2586807149U, 2586590401U, 2586374317U, 2586158693U, 2585941643U, 2585722697U, 2585505907U, 2585290069U, 2585072767U, 2584855279U, 2584640579U, 2584422497U, 2584204607U, 2583990001U, 2583773659U, 2583555721U, 2583338327U, 2583121259U, 2582905651U, 2582688041U, 2582469793U, 2582254019U, 2582037103U, 2581820699U, 2581606201U, 2581389763U, 2581174697U, 2580956501U, 2580739171U, 2580522377U, 2580305843U, 2580090167U, 2579872481U, 2579656291U, 2579442023U, 2579223007U, 2579006891U, 2578788097U, 2578569919U, 2578353559U, 2578136993U, 2577920299U, 2577706259U, 2577488027U, 2577272167U, 2577055669U, 2576837143U, 2576619973U, 2576404241U, 2576188333U, 2575971793U, 2575754497U, 2575538299U, 2575321747U, 2575105031U, 2574888223U, 2574672091U, 2574456811U, 2574239957U, 2574024287U, 2573808011U, 2573590927U, 2573375023U, 2573157761U, 2572940339U, 2572723019U, 2572506899U, 2572292279U, 2572077103U, 2571858599U, 2571642473U, 2571425821U, 2571208529U, 2570990369U, 2570773441U, 2570559869U, 2570342717U, 2570124047U, 2569905977U, 2569691791U, 2569474489U, 2569259047U, 2569043497U, 2568826747U, 2568610543U, 2568394487U, 2568177319U, 2567960729U, 2567743853U, 2567527723U, 2567312149U, 2567094511U, 2566876579U, 2566660301U, 2566443881U, 2566226821U, 2566010947U, 2565794353U, 2565579977U, 2565364231U, 2565146569U, 2564930507U, 2564713583U, 2564498843U, 2564283143U, 2564066677U, 2563849087U, 2563634039U, 2563419293U, 2563201339U, 2562985517U, 2562768883U, 2562550747U, 2562331649U, 2562114743U, 2561899009U, 2561684717U, 2561469901U, 2561252557U, 2561036551U, 2560819993U, 2560600963U, 2560383131U, 2560163939U, 2559947333U, 2559732017U, 2559515687U, 2559298571U, 2559083963U, 2558866837U, 2558650291U, 2558433401U, 2558218781U, 2558002897U, 2557785821U, 2557567981U, 2557350097U, 2557134737U, 2556919997U, 2556701327U, 2556484211U, 2556267677U, 2556051929U, 2555837747U, 2555622319U, 2555406457U, 2555188639U, 2554971443U, 2554754921U, 2554539539U, 2554320997U, 2554104451U, 2553889699U, 2553674129U, 2553456461U, 2553239069U, 2553022207U, 2552804363U, 2552586833U, 2552373497U, 2552154617U, 2551939211U, 2551722221U, 2551507171U, 2551289401U, 2551072441U, 2550854513U, 2550637459U, 2550422011U, 2550204619U, 2549989213U, 2549772451U, 2549556367U, 2549344409U, 2549126737U, 2548911913U, 2548696739U, 2548480237U, 2548263559U, 2548045919U, 2547829759U, 2547611191U, 2547396581U, 2547179527U, 2546962577U, 2546746981U, 2546529199U, 2546312413U, 2546095631U, 2545880399U, 2545664809U, 2545449493U, 2545232681U, 2545014881U, 2544797323U, 2544580949U, 2544362081U, 2544144749U, 2543927899U, 2543710349U, 2543493541U, 2543278021U, 2543058757U, 2542841729U, 2542624603U, 2542408513U, 2542191709U, 2541975707U, 2541759137U, 2541542141U, 2541326009U, 2541111257U, 2540896591U, 2540679419U, 2540462593U, 2540246953U, 2540030399U, 2539813907U, 2539596281U, 2539379419U, 2539161697U, 2538945569U, 2538728831U, 2538513301U, 2538297287U, 2538080243U, 2537864347U, 2537649151U, 2537433263U, 2537217229U, 2537001541U, 2536784311U, 2536567823U, 2536351751U, 2536135703U, 2535920071U, 2535703109U, 2535485651U, 2535267913U, 2535049381U, 2534835071U, 2534618899U, 2534401141U, 2534184743U, 2533968511U, 2533751977U, 2533535057U, 2533319801U, 2533103939U, 2532889717U, 2532672287U, 2532458581U, 2532240527U, 2532024263U, 2531808221U, 2531594033U, 2531375533U, 2531159747U, 2530945583U, 2530728091U, 2530510111U, 2530291601U, 2530076701U, 2529860363U, 2529644539U, 2529427169U, 2529210923U, 2528994893U, 2528778227U, 2528561443U, 2528344967U, 2528129983U, 2527914227U, 2527697857U, 2527483549U, 2527265941U, 2527048369U, 2526831781U, 2526617609U, 2526401041U, 2526186511U, 2525969521U, 2525751269U, 2525536837U, 2525319001U, 2525102543U, 2524883839U, 2524667221U, 2524449793U, 2524233617U, 2524016647U, 2523800459U, 2523584641U, 2523368747U, 2523151927U, 2522932883U, 2522717297U, 2522499653U, 2522283347U, 2522067281U, 2521852183U, 2521635689U, 2521420529U, 2521202821U, 2520984749U, 2520769301U, 2520551983U, 2520337163U, 2520121147U, 2519904151U, 2519687407U, 2519469941U, 2519254519U, 2519038309U, 2518820833U, 2518604357U, 2518386329U, 2518171613U, 2517954631U, 2517740233U, 2517524573U, 2517306587U, 2517091133U, 2516875549U, 2516659099U, 2516440349U, 2516223511U, 2516009189U, 2515791953U, 2515574741U, 2515356967U, 2515140851U, 2514925321U, 2514708857U, 2514492941U, 2514278527U, 2514060737U, 2513844511U, 2513629211U, 2513413999U, 2513197331U, 2512982491U, 2512767919U, 2512550039U, 2512333891U, 2512118659U, 2511902051U, 2511683351U, 2511466921U, 2511249691U, 2511035069U, 2510818363U, 2510602331U, 2510385959U, 2510168447U, 2509952597U, 2509736107U, 2509518721U, 2509301233U, 2509086889U, 2508870779U, 2508654017U, 2508436187U, 2508220999U, 2508004423U, 2507788471U, 2507572759U, 2507358193U, 2507142773U, 2506926857U, 2506708901U, 2506492003U, 2506275773U, 2506059841U, 2505843227U, 2505628639U, 2505412999U, 2505197309U, 2504978291U, 2504764349U, 2504546719U, 2504331703U, 2504116333U, 2503900211U, 2503686869U, 2503468057U, 2503251931U, 2503034987U, 2502819383U, 2502601529U, 2502383761U, 2502165307U, 2501950663U, 2501732017U, 2501516429U, 2501298523U, 2501082677U, 2500865963U, 2500651249U, 2500433521U, 2500215791U, 2499999013U, 2499784513U, 2499566551U, 2499348193U, 2499133477U, 2498919091U, 2498700949U, 2498484803U, 2498268767U, 2498051131U, 2497835203U, 2497619143U, 2497401107U, 2497185151U, 2496967981U, 2496751651U, 2496536257U, 2496318859U, 2496101129U, 2495884337U, 2495667091U, 2495449483U, 2495234069U, 2495015851U, 2494798981U, 2494586071U, 2494369567U, 2494153777U, 2493936787U, 2493720041U, 2493503279U, 2493288713U, 2493072847U, 2492855327U, 2492639627U, 2492424367U, 2492206993U, 2491988657U, 2491772527U, 2491556789U, 2491340471U, 2491123897U, 2490906919U, 2490690511U, 2490473023U, 2490256157U, 2490039371U, 2489824397U, 2489606737U, 2489386771U, 2489169691U, 2488953791U, 2488738607U, 2488524167U, 2488307113U, 2488089367U, 2487872069U, 2487655309U, 2487439177U, 2487224461U, 2487006499U, 2486788963U, 2486573101U, 2486356783U, 2486139791U, 2485923217U, 2485705493U, 2485487957U, 2485271471U, 2485052771U, 2484839933U, 2484624929U, 2484408247U, 2484192527U, 2483973307U, 2483759609U, 2483543987U, 2483328161U, 2483109467U, 2482893463U, 2482675901U, 2482457161U, 2482241299U, 2482026611U, 2481810781U, 2481595201U, 2481379739U, 2481163543U, 2480947769U, 2480731301U, 2480516641U, 2480302337U, 2480086997U, 2479867427U, 2479650223U, 2479434857U, 2479215799U, 2479001621U, 2478785357U, 2478571189U, 2478356417U, 2478141383U, 2477923397U, 2477707373U, 2477488961U, 2477271481U, 2477057941U, 2476842673U, 2476624159U, 2476409263U, 2476193219U, 2475977579U, 2475761023U, 2475543029U, 2475328783U, 2475110999U, 2474890879U, 2474674327U, 2474459227U, 2474244041U, 2474029147U, 2473812701U, 2473596403U, 2473381349U, 2473165927U, 2472951167U, 2472735413U, 2472520727U, 2472307091U, 2472091723U, 2471874173U, 2471656697U, 2471441579U, 2471224237U, 2471006873U, 2470790431U, 2470575083U, 2470358629U, 2470143691U, 2469927209U, 2469711271U, 2469499757U, 2469281999U, 2469064889U, 2468847947U, 2468629519U, 2468413229U, 2468197247U, 2467983239U, 2467766527U, 2467549933U, 2467333889U, 2467116077U, 2466900307U, 2466683279U, 2466465941U, 2466249673U, 2466036497U, 2465821507U, 2465604553U, 2465388727U, 2465172733U, 2464957717U, 2464740137U, 2464523959U, 2464308311U, 2464091587U, 2463874783U, 2463659027U, 2463441269U, 2463225563U, 2463010027U, 2462791873U, 2462574523U, 2462356487U, 2462139853U, 2461922713U, 2461706603U, 2461490771U, 2461272043U, 2461055423U, 2460842491U, 2460624181U, 2460409169U, 2460192541U, 2459976229U, 2459758421U, 2459540911U, 2459325443U, 2459107793U, 2458892551U, 2458677601U, 2458461193U, 2458243223U, 2458027157U, 2457811933U, 2457594323U, 2457378923U, 2457161789U, 2456946269U, 2456730629U, 2456513639U, 2456297149U, 2456079463U, 2455863857U, 2455649191U, 2455433069U, 2455218023U, 2455004333U, 2454788311U, 2454571607U, 2454356581U, 2454139231U, 2453920571U, 2453704789U, 2453488979U, 2453271463U, 2453054039U, 2452840781U, 2452623821U, 2452410967U, 2452195063U, 2451976601U, 2451763159U, 2451547559U, 2451331549U, 2451116651U, 2450900741U, 2450682943U, 2450465513U, 2450249993U, 2450033627U, 2449816027U, 2449597919U, 2449381289U, 2449162117U, 2448946469U, 2448729883U, 2448513373U, 2448294643U, 2448077341U, 2447859991U, 2447646029U, 2447430317U, 2447215081U, 2446995403U, 2446778861U, 2446563043U, 2446347913U, 2446130653U, 2445914279U, 2445699913U, 2445483571U, 2445267343U, 2445053797U, 2444836921U, 2444622311U, 2444408423U, 2444189777U, 2443974557U, 2443759229U, 2443540247U, 2443324393U, 2443106177U, 2442890503U, 2442673561U, 2442456791U, 2442241667U, 2442025237U, 2441808221U, 2441594489U, 2441376631U, 2441160893U, 2440945873U, 2440728361U, 2440510843U, 2440294657U, 2440080157U, 2439865657U, 2439651391U, 2439433319U, 2439217799U, 2439004261U, 2438787661U, 2438570569U, 2438355421U, 2438138531U, 2437923409U, 2437707127U, 2437492373U, 2437275517U, 2437061327U, 2436844313U, 2436629971U, 2436414881U, 2436198631U, 2435981077U, 2435762471U, 2435546731U, 2435333387U, 2435115047U, 2434897891U, 2434683133U, 2434464391U, 2434247779U, 2434031381U, 2433816977U, 2433598367U, 2433382891U, 2433166579U, 2432951363U, 2432734259U, 2432519267U, 2432303207U, 2432088437U, 2431871549U, 2431654009U, 2431438567U, 2431222883U, 2431004551U, 2430789007U, 2430572239U, 2430357899U, 2430140243U, 2429923631U, 2429708647U, 2429490697U, 2429277119U, 2429059631U, 2428841551U, 2428626203U, 2428410749U, 2428193741U, 2427976979U, 2427760243U, 2427542993U, 2427328229U, 2427113081U, 2426897147U, 2426680747U, 2426465647U, 2426250041U, 2426034613U, 2425818701U, 2425601929U, 2425385723U, 2425169891U, 2424956221U, 2424741701U, 2424525161U, 2424310661U, 2424093157U, 2423875841U, 2423659657U, 2423445293U, 2423230783U, 2423015821U, 2422799177U, 2422585771U, 2422367743U, 2422152179U, 2421936493U, 2421719873U, 2421503983U, 2421287081U, 2421068899U, 2420852347U, 2420636627U, 2420420903U, 2420204023U, 2419987799U, 2419771187U, 2419554157U, 2419338787U, 2419124819U, 2418907529U, 2418693047U, 2418479549U, 2418264571U, 2418048331U, 2417831257U, 2417614807U, 2417399119U, 2417184257U, 2416967611U, 2416752409U, 2416536271U, 2416319387U, 2416105057U, 2415886301U, 2415670069U, 2415453023U, 2415235709U, 2415018433U, 2414803031U, 2414586983U, 2414370943U, 2414155213U, 2413940083U, 2413723471U, 2413506059U, 2413290541U, 2413073251U, 2412857789U, 2412643193U, 2412426707U, 2412211163U, 2411993867U, 2411776583U, 2411562311U, 2411345479U, 2411129923U, 2410914791U, 2410699133U, 2410481377U, 2410266007U, 2410048829U, 2409832129U, 2409617663U, 2409401249U, 2409184651U, 2408968189U, 2408751419U, 2408534461U, 2408320127U, 2408104597U, 2407888957U, 2407671853U, 2407458671U, 2407241731U, 2407025459U, 2406810563U, 2406592847U, 2406378241U, 2406160049U, 2405944223U, 2405727229U, 2405511811U, 2405297623U, 2405082629U, 2404866197U, 2404648957U, 2404432183U, 2404215091U, 2403999487U, 2403782401U, 2403567059U, 2403350249U, 2403134623U, 2402919731U, 2402704211U, 2402489473U, 2402272571U, 2402054147U, 2401837289U, 2401621687U, 2401406131U, 2401189979U, 2400973123U, 2400757439U, 2400539651U, 2400323077U, 2400105919U, 2399889293U, 2399675141U, 2399460449U, 2399245733U, 2399029231U, 2398813981U, 2398597219U, 2398379413U, 2398164833U, 2397948569U, 2397732923U, 2397515801U, 2397299549U, 2397085021U, 2396867801U, 2396653109U, 2396435089U, 2396217739U, 2395999153U, 2395783231U, 2395566959U, 2395350827U, 2395135343U, 2394920179U, 2394702979U, 2394486719U, 2394270059U, 2394055669U, 2393840479U, 2393622653U, 2393406401U, 2393190893U, 2392975477U, 2392759277U, 2392544101U, 2392327433U, 2392113121U, 2391896839U, 2391678997U, 2391461393U, 2391247091U, 2391031847U, 2390816957U, 2390600393U, 2390384861U, 2390168317U, 2389953641U, 2389736719U, 2389520779U, 2389304989U, 2389091333U, 2388874603U, 2388658969U, 2388442499U, 2388225803U, 2388006067U, 2387791751U, 2387577977U, 2387360413U, 2387144453U, 2386930687U, 2386714199U, 2386497403U, 2386279781U, 2386064861U, 2385851509U, 2385635543U, 2385420431U, 2385202607U, 2384985487U, 2384769461U, 2384554421U, 2384337071U, 2384122519U, 2383906543U, 2383692127U, 2383476829U, 2383262647U, 2383047829U, 2382830459U, 2382615419U, 2382400133U, 2382184537U, 2381968223U, 2381751839U, 2381535539U, 2381318791U, 2381103733U, 2380886887U, 2380673297U, 2380455919U, 2380238759U, 2380021361U, 2379807751U, 2379591671U, 2379377153U, 2379160853U, 2378944891U, 2378727539U, 2378510513U, 2378293279U, 2378076593U, 2377861237U, 2377644917U, 2377429697U, 2377213193U, 2376996647U, 2376782251U, 2376566029U, 2376349571U, 2376133733U, 2375919907U, 2375704391U, 2375485579U, 2375270591U, 2375054579U, 2374837373U, 2374621817U, 2374406971U, 2374192853U, 2373976057U, 2373760531U, 2373545989U, 2373327241U, 2373111347U, 2372894317U, 2372680469U, 2372464907U, 2372249629U, 2372032771U, 2371818637U, 2371601437U, 2371383727U, 2371168507U, 2370952511U, 2370736603U, 2370518873U, 2370304579U, 2370089479U, 2369872579U, 2369658763U, 2369441329U, 2369224889U, 2369010191U, 2368793017U, 2368578991U, 2368362539U, 2368147211U, 2367932341U, 2367716921U, 2367502859U, 2367286853U, 2367071513U, 2366857811U, 2366642171U, 2366426123U, 2366209843U, 2365994641U, 2365779181U, 2365561397U, 2365345733U, 2365130297U, 2364913519U, 2364698551U, 2364482947U, 2364266941U, 2364048899U, 2363831777U, 2363616797U, 2363399443U, 2363185907U, 2362970219U, 2362753663U, 2362538753U, 2362325137U, 2362108759U, 2361891607U, 2361677057U, 2361460697U, 2361244889U, 2361029521U, 2360811251U, 2360593589U, 2360377871U, 2360160973U, 2359944163U, 2359729637U, 2359513753U, 2359298749U, 2359081141U, 2358864077U, 2358647191U, 2358433151U, 2358217307U, 2358002501U, 2357786393U, 2357572391U, 2357355223U, 2357140127U, 2356922443U, 2356706927U, 2356491167U, 2356276309U, 2356060219U, 2355843337U, 2355628351U, 2355412211U, 2355196939U, 2354979299U, 2354762923U, 2354547589U, 2354332327U, 2354116403U, 2353898347U, 2353682899U, 2353467719U, 2353251041U, 2353034861U, 2352821521U, 2352608729U, 2352391733U, 2352177071U, 2351959373U, 2351743871U, 2351527331U, 2351311103U, 2351095787U, 2350880537U, 2350663867U, 2350448987U, 2350233607U, 2350018009U, 2349802193U, 2349585643U, 2349371473U, 2349154459U, 2348938483U, 2348723393U, 2348506163U, 2348290627U, 2348073529U, 2347858001U, 2347641251U, 2347426061U, 2347210109U, 2346994847U, 2346777833U, 2346563741U, 2346347957U, 2346130597U, 2345915233U, 2345700967U, 2345483321U, 2345268559U, 2345055421U, 2344836029U, 2344620749U, 2344404077U, 2344188467U, 2343971621U, 2343753989U, 2343537377U, 2343322691U, 2343106237U, 2342889763U, 2342675663U, 2342461337U, 2342245693U, 2342028907U, 2341811071U, 2341594513U, 2341380673U, 2341165823U, 2340950653U, 2340737603U, 2340521567U, 2340303299U, 2340086269U, 2339869699U, 2339651581U, 2339437049U, 2339222891U, 2339007247U, 2338790449U, 2338576003U, 2338361213U, 2338146329U, 2337927731U, 2337714713U, 2337499061U, 2337281887U, 2337065981U, 2336851397U, 2336635331U, 2336418673U, 2336202863U, 2335987399U, 2335772269U, 2335553713U, 2335341083U, 2335126153U, 2334909481U, 2334693863U, 2334479723U, 2334262787U, 2334047503U, 2333831449U, 2333616709U, 2333401867U, 2333186161U, 2332970869U, 2332755569U, 2332541017U, 2332323197U, 2332106743U, 2331891473U, 2331676169U, 2331460273U, 2331243809U, 2331029143U, 2330814481U, 2330599837U, 2330384489U, 2330164511U, 2329947589U, 2329731637U, 2329515427U, 2329299289U, 2329084333U, 2328867469U, 2328652009U, 2328436417U, 2328218201U, 2328001597U, 2327784983U, 2327571221U, 2327354473U, 2327138579U, 2326921769U, 2326706687U, 2326492871U, 2326275509U, 2326060369U, 2325845507U, 2325630133U, 2325415607U, 2325198173U, 2324982083U, 2324766023U, 2324552177U, 2324336591U, 2324119951U, 2323903651U, 2323689751U, 2323472693U, 2323258859U, 2323044107U, 2322827393U, 2322611059U, 2322394247U, 2322179177U, 2321964247U, 2321747737U, 2321531423U, 2321315869U, 2321098673U, 2320883861U, 2320668953U, 2320454753U, 2320239629U, 2320027529U, 2319811937U, 2319596449U, 2319378899U, 2319162739U, 2318945131U, 2318727809U, 2318510639U, 2318296021U, 2318078921U, 2317863337U, 2317645181U, 2317427533U, 2317209683U, 2316994513U, 2316778027U, 2316562777U, 2316347219U, 2316132769U, 2315916809U, 2315702513U, 2315487613U, 2315271197U, 2315055979U, 2314841521U, 2314625671U, 2314411019U, 2314197409U, 2313983249U, 2313767077U, 2313551609U, 2313335711U, 2313119387U, 2312904719U, 2312689363U, 2312472829U, 2312256629U, 2312040277U, 2311822883U, 2311606477U, 2311392157U, 2311180061U, 2310965303U, 2310751957U, 2310537049U, 2310322247U, 2310106033U, 2309889749U, 2309673881U, 2309456431U, 2309242093U, 2309026361U, 2308810601U, 2308595363U, 2308379243U, 2308164263U, 2307949739U, 2307733583U, 2307514733U, 2307299173U, 2307083393U, 2306868197U, 2306651671U, 2306436793U, 2306223461U, 2306007931U, 2305792133U, 2305573537U, 2305358221U, 2305141999U, 2304925529U, 2304710599U, 2304495799U, 2304279137U, 2304063901U, 2303847761U, 2303633251U, 2303417483U, 2303201833U, 2302986457U, 2302770469U, 2302556077U, 2302338421U, 2302121279U, 2301906433U, 2301689417U, 2301475069U, 2301260047U, 2301042587U, 2300826287U, 2300609203U, 2300394193U, 2300180731U, 2299964179U, 2299748471U, 2299534609U, 2299320679U, 2299105141U, 2298888577U, 2298672281U, 2298456929U, 2298242797U, 2298027227U, 2297811077U, 2297594521U, 2297378177U, 2297160329U, 2296945369U, 2296729447U, 2296513621U, 2296300339U, 2296084877U, 2295871601U, 2295656147U, 2295440813U, 2295224741U, 2295008923U, 2294792809U, 2294578633U, 2294364481U, 2294148251U, 2293932703U, 2293718041U, 2293502089U, 2293287109U, 2293071899U, 2292855451U, 2292641287U, 2292422921U, 2292208781U, 2291993437U, 2291777737U, 2291564321U, 2291348981U, 2291133973U, 2290918037U, 2290702693U, 2290489129U, 2290270789U, 2290053737U, 2289838373U, 2289621101U, 2289405653U, 2289190741U, 2288976737U, 2288762257U, 2288547733U, 2288330609U, 2288117243U, 2287900829U, 2287686169U, 2287468607U, 2287251751U, 2287037479U, 2286824389U, 2286608047U, 2286394637U, 2286182329U, 2285966717U, 2285752123U, 2285536247U, 2285320237U, 2285106023U, 2284891771U, 2284674407U, 2284457257U, 2284241537U, 2284026853U, 2283811573U, 2283596327U, 2283380261U, 2283161161U, 2282946331U, 2282730977U, 2282518223U, 2282301737U, 2282084897U, 2281870651U, 2281654673U, 2281437143U, 2281221827U, 2281004771U, 2280789233U, 2280573557U, 2280359363U, 2280142591U, 2279927491U, 2279711261U, 2279494291U, 2279276653U, 2279060527U, 2278846901U, 2278628909U, 2278411781U, 2278196407U, 2277980993U, 2277763753U, 2277549089U, 2277334771U, 2277118411U, 2276902399U, 2276688613U, 2276472853U, 2276256329U, 2276042711U, 2275828517U, 2275612679U, 2275397063U, 2275181479U, 2274965159U, 2274748517U, 2274535463U, 2274319609U, 2274107327U, 2273891549U, 2273676997U, 2273462767U, 2273248399U, 2273032639U, 2272818917U, 2272605253U, 2272389437U, 2272172081U, 2271957209U, 2271743939U, 2271528041U, 2271313729U, 2271098429U, 2270884471U, 2270669353U, 2270455567U, 2270240681U, 2270025151U, 2269809527U, 2269596941U, 2269382131U, 2269165319U, 2268951577U, 2268735797U, 2268517921U, 2268302123U, 2268086111U, 2267870603U, 2267656903U, 2267442757U, 2267227777U, 2267012081U, 2266797487U, 2266582793U, 2266368007U, 2266153339U, 2265938137U, 2265722351U, 2265506083U, 2265290141U, 2265075049U, 2264860427U, 2264644769U, 2264428451U, 2264214773U, 2263997711U, 2263782289U, 2263565729U, 2263352327U, 2263137001U, 2262920839U, 2262705761U, 2262492191U, 2262278069U, 2262062813U, 2261848051U, 2261633197U, 2261418409U, 2261204657U, 2260990273U, 2260774759U, 2260560277U, 2260345247U, 2260129169U, 2259914563U, 2259700207U, 2259484361U, 2259267151U, 2259053309U, 2258839753U, 2258625431U, 2258409821U, 2258192591U, 2257975997U, 2257761001U, 2257544407U, 2257329817U, 2257113083U, 2256895787U, 2256679597U, 2256466463U, 2256251911U, 2256035759U, 2255819249U, 2255604433U, 2255387119U, 2255171729U, 2254957261U, 2254742569U, 2254525633U, 2254311419U, 2254096151U, 2253881089U, 2253665009U, 2253448303U, 2253232537U, 2253017629U, 2252801377U, 2252586353U, 2252370139U, 2252154943U, 2251940153U, 2251724287U, 2251508141U, 2251293211U, 2251080107U, 2250864989U, 2250650741U, 2250437317U, 2250221147U, 2250007937U, 2249792849U, 2249577443U, 2249360747U, 2249143511U, 2248928303U, 2248714289U, 2248500389U, 2248282607U, 2248066363U, 2247851681U, 2247636583U, 2247421817U, 2247207073U, 2246990947U, 2246775449U, 2246560403U, 2246348051U, 2246132507U, 2245917799U, 2245703177U, 2245488887U, 2245273741U, 2245058089U, 2244843721U, 2244629719U, 2244412999U, 2244197437U, 2243982737U, 2243769653U, 2243551433U, 2243337457U, 2243120419U, 2242904581U, 2242688449U, 2242473991U, 2242259861U, 2242043599U, 2241825133U, 2241609701U, 2241395071U, 2241180787U, 2240967343U, 2240751923U, 2240536327U, 2240319527U, 2240105237U, 2239888687U, 2239674629U, 2239458203U, 2239244101U, 2239028387U, 2238815521U, 2238600541U, 2238383569U, 2238167417U, 2237952851U, 2237735261U, 2237518081U, 2237301083U, 2237088229U, 2236873019U, 2236658693U, 2236444453U, 2236229201U, 2236016201U, 2235800159U, 2235586427U, 2235370021U, 2235154721U, 2234939537U, 2234725013U, 2234510909U, 2234295191U, 2234081099U, 2233866847U, 2233652459U, 2233436629U, 2233218679U, 2233003183U, 2232789619U, 2232571813U, 2232355067U, 2232138367U, 2231922923U, 2231708449U, 2231493413U, 2231277413U, 2231061221U, 2230846967U, 2230632791U, 2230417751U, 2230201531U, 2229985133U, 2229769579U, 2229554461U, 2229340651U, 2229128767U, 2228912453U, 2228698319U, 2228481883U, 2228267953U, 2228051513U, 2227836329U, 2227622203U, 2227408321U, 2227192519U, 2226974441U, 2226760573U, 2226547241U, 2226332261U, 2226116807U, 2225900503U, 2225684207U, 2225468123U, 2225253677U, 2225039759U, 2224826473U, 2224610537U, 2224393937U, 2224179077U, 2223962707U, 2223747133U, 2223531173U, 2223316279U, 2223098953U, 2222882659U, 2222668169U, 2222453179U, 2222236673U, 2222020433U, 2221805137U, 2221591007U, 2221375883U, 2221160077U, 2220945563U, 2220729323U, 2220513517U, 2220299443U, 2220085447U, 2219871361U, 2219657239U, 2219440397U, 2219226643U, 2219013089U, 2218798327U, 2218581803U, 2218365979U, 2218151977U, 2217936223U, 2217720587U, 2217503231U, 2217288769U, 2217073951U, 2216859137U, 2216643199U, 2216429123U, 2216217607U, 2216003639U, 2215785851U, 2215570163U, 2215356079U, 2215137607U, 2214921911U, 2214707081U, 2214490303U, 2214276599U, 2214059119U, 2213841127U, 2213626687U, 2213409799U, 2213195329U, 2212980269U, 2212766779U, 2212554011U, 2212339553U, 2212125329U, 2211910373U, 2211695159U, 2211479729U, 2211262793U, 2211046499U, 2210831927U, 2210615761U, 2210401003U, 2210185847U, 2209971091U, 2209755451U, 2209536949U, 2209322803U, 2209108799U, 2208892547U, 2208677441U, 2208463339U, 2208247117U, 2208034453U, 2207819147U, 2207604541U, 2207391643U, 2207176733U, 2206959901U, 2206745909U, 2206531433U, 2206317367U, 2206101241U, 2205886327U, 2205671543U, 2205456833U, 2205243319U, 2205027023U, 2204811307U, 2204595641U, 2204379659U, 2204165801U, 2203948541U, 2203733117U, 2203517681U, 2203300223U, 2203086371U, 2202871961U, 2202654689U, 2202436493U, 2202221279U, 2202004547U, 2201791373U, 2201574377U, 2201360167U, 2201145061U, 2200928497U, 2200714381U, 2200498441U, 2200281751U, 2200068601U, 2199853559U, 2199635749U, 2199418691U, 2199204421U, 2198990219U, 2198773793U, 2198559829U, 2198343977U, 2198127923U, 2197912859U, 2197698263U, 2197483471U, 2197269587U, 2197052761U, 2196839891U, 2196623977U, 2196407699U, 2196193177U, 2195978129U, 2195763049U, 2195548093U, 2195333801U, 2195118769U, 2194903967U, 2194689127U, 2194475233U, 2194259981U, 2194045093U, 2193829657U, 2193615779U, 2193400303U, 2193183463U, 2192968597U, 2192753141U, 2192540993U, 2192325229U, 2192109989U, 2191894543U, 2191680791U, 2191463497U, 2191249147U, 2191034509U, 2190820267U, 2190606317U, 2190390899U, 2190174199U, 2189958893U, 2189743967U, 2189528807U, 2189313311U, 2189096633U, 2188880977U, 2188665929U, 2188452439U, 2188238047U, 2188022989U, 2187806953U, 2187592339U, 2187375787U, 2187160567U, 2186947853U, 2186734469U, 2186520907U, 2186305777U, 2186090447U, 2185874939U, 2185660657U, 2185444423U, 2185228519U, 2185014731U, 2184798521U, 2184583937U, 2184368803U, 2184153427U, 2183937773U, 2183724187U, 2183508791U, 2183292037U, 2183077639U, 2182862839U, 2182647839U, 2182430443U, 2182214731U, 2181997007U, 2181781843U, 2181567317U, 2181352403U, 2181134429U, 2180919913U, 2180705173U, 2180489261U, 2180274289U, 2180059613U, 2179844789U, 2179628147U, 2179411453U, 2179195943U, 2178981173U, 2178765881U, 2178552247U, 2178338983U, 2178124589U, 2177911657U, 2177695537U, 2177480443U, 2177264501U, 2177048869U, 2176833577U, 2176622813U, 2176405919U, 2176191037U, 2175977563U, 2175761669U, 2175546547U, 2175332921U, 2175118607U, 2174905169U, 2174691347U, 2174474537U, 2174260867U, 2174044051U, 2173830367U, 2173613773U, 2173400321U, 2173182191U, 2172969907U, 2172756941U, 2172541463U, 2172324157U, 2172107263U, 2171892293U, 2171676751U, 2171462441U, 2171245553U, 2171030177U, 2170817087U, 2170603703U, 2170388111U, 2170175779U, 2169961919U, 2169744097U, 2169531443U, 2169315259U, 2169100067U, 2168884763U, 2168668939U, 2168454077U, 2168240089U, 2168025037U, 2167808509U, 2167594523U, 2167378901U, 2167164107U, 2166947911U, 2166735047U, 2166519647U, 2166305593U, 2166090191U, 2165877419U, 2165660327U, 2165445811U, 2165231377U, 2165016067U, 2164800061U, 2164584337U, 2164370653U, 2164156157U, 2163937541U, 2163722377U, 2163510857U, 2163294317U, 2163076691U, 2162863051U, 2162648759U, 2162435339U, 2162219417U, 2162005633U, 2161788371U, 2161572109U, 2161357039U, 2161143913U, 2160930071U, 2160715201U, 2160498959U, 2160284281U, 2160071057U, 2159857957U, 2159644441U, 2159431277U, 2159216399U, 2158999463U, 2158783609U, 2158570681U, 2158353931U, 2158136809U, 2157922717U, 2157706357U, 2157490921U, 2157278737U, 2157063401U, 2156846201U, 2156631929U, 2156417051U, 2156202101U, 2155984819U, 2155770917U, 2155555967U, 2155339559U, 2155125689U, 2154911813U, 2154697789U, 2154481897U, 2154267373U, 2154053557U, 2153838251U, 2153623891U, 2153409701U, 2153194049U, 2152977367U, 2152761631U, 2152549747U, 2152334189U, 2152120979U, 2151905143U, 2151690707U, 2151475523U, 2151261493U, 2151045469U, 2150830289U, 2150614667U, 2150399893U, 2150187059U, 2149972697U, 2149756703U, 2149543889U, 2149327627U, 2149112429U, 2148896411U, 2148679669U, 2148466009U, 2148250061U, 2148035749U, 2147821513U, 2147607401U, 2147392201U, 2147178329U, 2146961347U, 2146748057U, 2146533959U, 2146317191U, 2146102477U, 2145889267U, 2145675289U, 2145460909U, 2145248167U, 2145033001U, 2144818411U, 2144602787U, 2144389217U, 2144174281U, 2143959581U, 2143744997U, 2143529491U, 2143314917U, 2143101241U, 2142887399U, 2142671353U, 2142457117U, 2142240403U, 2142027137U, 2141814319U, 2141596757U, 2141383633U, 2141168963U, 2140954709U, 2140740733U, 2140527553U, 2140313443U, 2140096993U, 2139883771U, 2139669449U, 2139456377U, 2139240409U, 2139025991U, 2138809969U, 2138593397U, 2138376997U, 2138163977U, 2137948823U, 2137734017U, 2137517407U, 2137301819U, 2137086989U, 2136872957U, 2136658427U, 2136442873U, 2136229309U, 2136014159U, 2135798803U, 2135582873U, 2135366899U, 2135151517U, 2134935289U, 2134721027U, 2134508581U, 2134293869U, 2134076557U, 2133860653U, 2133647933U, 2133431987U, 2133216271U, 2133000449U, 2132785727U, 2132571839U, 2132356769U, 2132141177U, 2131927409U, 2131711019U, 2131494667U, 2131280273U, 2131062221U, 2130845993U, 2130632453U, 2130418541U, 2130203653U, 2129987053U, 2129772677U, 2129556967U, 2129342653U, 2129127817U, 2128912277U, 2128695007U, 2128478327U, 2128264429U, 2128050467U, 2127837703U, 2127623801U, 2127408931U, 2127193907U, 2126978179U, 2126761667U, 2126547263U, 2126332057U, 2126115379U, 2125901263U, 2125684789U, 2125470601U, 2125257157U, 2125041631U, 2124825877U, 2124610991U, 2124395233U, 2124182597U, 2123968739U, 2123753647U, 2123537153U, 2123322571U, 2123108069U, 2122892371U, 2122672733U, 2122457621U, 2122243469U, 2122030279U, 2121815011U, 2121602663U, 2121386779U, 2121170593U, 2120957849U, 2120743579U, 2120527163U, 2120310461U, 2120094611U, 2119880879U, 2119665617U, 2119452541U, 2119237949U, 2119023493U, 2118807931U, 2118592439U, 2118377557U, 2118162689U, 2117948653U, 2117734709U, 2117518787U, 2117303467U, 2117087933U, 2116872119U, 2116657061U, 2116443677U, 2116230829U, 2116016173U, 2115801371U, 2115585181U, 2115369701U, 2115153727U, 2114938379U, 2114722927U, 2114507833U, 2114296181U, 2114083091U, 2113870123U, 2113654157U, 2113441021U, 2113224103U, 2113012547U, 2112798203U, 2112583841U, 2112367709U, 2112151631U, 2111937301U, 2111724911U, 2111509861U, 2111295701U, 2111081629U, 2110866419U, 2110651363U, 2110438397U, 2110223261U, 2110009829U, 2109797897U, 2109582913U, 2109369523U, 2109152387U, 2108937829U, 2108720821U, 2108508851U, 2108295751U, 2108080607U, 2107865293U, 2107650091U, 2107436741U, 2107222657U, 2107007647U, 2106792673U, 2106576917U, 2106359917U, 2106144197U, 2105930401U, 2105715049U, 2105501309U, 2105287433U, 2105073029U, 2104858771U, 2104647023U, 2104433021U, 2104219151U, 2104005019U, 2103788759U, 2103574393U, 2103359521U, 2103143461U, 2102929097U, 2102714129U, 2102500709U, 2102287063U, 2102071733U, 2101858169U, 2101644367U, 2101430251U, 2101215421U, 2101000631U, 2100786707U, 2100573677U, 2100356977U, 2100144953U, 2099929943U, 2099714203U, 2099498983U, 2099284679U, 2099070541U, 2098855537U, 2098641661U, 2098426349U, 2098211051U, 2097996079U, 2097777797U, 2097563203U, 2097349259U, 2097134239U, 2096920559U, 2096705759U, 2096492033U, 2096275873U, 2096060987U, 2095845113U, 2095630739U, 2095417099U, 2095204193U, 2094990617U, 2094777257U, 2094563689U, 2094349931U, 2094135709U, 2093917997U, 2093703973U, 2093489929U, 2093275181U, 2093060483U, 2092847143U, 2092631617U, 2092415669U, 2092200577U, 2091986231U, 2091773147U, 2091560467U, 2091343981U, 2091128869U, 2090914373U, 2090697439U, 2090484707U, 2090271769U, 2090056609U, 2089841513U, 2089626109U, 2089413709U, 2089199999U, 2088986687U, 2088770249U, 2088557147U, 2088342253U, 2088126977U, 2087912909U, 2087700257U, 2087485703U, 2087269703U, 2087054653U, 2086840409U, 2086626083U, 2086411141U, 2086194871U, 2085979487U, 2085764441U, 2085549139U, 2085334943U, 2085119369U, 2084905873U, 2084691677U, 2084475109U, 2084259323U, 2084044163U, 2083831573U, 2083616219U, 2083402001U, 2083186583U, 2082971789U, 2082759373U, 2082545177U, 2082330127U, 2082117649U, 2081901823U, 2081688289U, 2081474251U, 2081261443U, 2081046613U, 2080831771U, 2080617281U, 2080400599U, 2080186891U, 2079971801U, 2079758281U, 2079542903U, 2079328387U, 2079114383U, 2078897809U, 2078683337U, 2078472707U, 2078257351U, 2078045183U, 2077830827U, 2077616641U, 2077400671U, 2077185667U, 2076969607U, 2076755251U, 2076538223U, 2076323617U, 2076108059U, 2075893903U, 2075679917U, 2075462471U, 2075249549U, 2075035973U, 2074823669U, 2074609139U, 2074395527U, 2074179623U, 2073964481U, 2073751951U, 2073538321U, 2073326219U, 2073110059U, 2072896093U, 2072680901U, 2072466947U, 2072251847U, 2072036851U, 2071820351U, 2071608421U, 2071392137U, 2071176323U, 2070961337U, 2070746221U, 2070532231U, 2070319253U, 2070103601U, 2069889037U, 2069675147U, 2069458541U, 2069244319U, 2069030893U, 2068817347U, 2068602559U, 2068387669U, 2068172839U, 2067958549U, 2067743423U, 2067529463U, 2067313427U, 2067097567U, 2066881273U, 2066666963U, 2066452979U, 2066238739U, 2066026559U, 2065812179U, 2065594439U, 2065379831U, 2065165519U, 2064950903U, 2064736903U, 2064522697U, 2064309791U, 2064095249U, 2063882111U, 2063669011U, 2063454871U, 2063240269U, 2063025931U, 2062811071U, 2062597567U, 2062384199U, 2062167797U, 2061955403U, 2061740983U, 2061522713U, 2061310241U, 2061094153U, 2060880043U, 2060665253U, 2060449087U, 2060235917U, 2060020987U, 2059806971U, 2059590917U, 2059377119U, 2059160731U, 2058946231U, 2058731617U, 2058517511U, 2058304147U, 2058088283U, 2057873417U, 2057656157U, 2057439991U, 2057225377U, 2057011381U, 2056797829U, 2056582037U, 2056367063U, 2056152523U, 2055938219U, 2055726181U, 2055511897U, 2055295643U, 2055080669U, 2054867093U, 2054653849U, 2054438983U, 2054223761U, 2054008921U, 2053794817U, 2053582747U, 2053368827U, 2053151159U, 2052935029U, 2052719261U, 2052503023U, 2052290129U, 2052077113U, 2051862493U, 2051648983U, 2051433383U, 2051217811U, 2051001461U, 2050788151U, 2050575347U, 2050360619U, 2050148801U, 2049934517U, 2049720053U, 2049507997U, 2049295841U, 2049080531U, 2048866219U, 2048651251U, 2048437513U, 2048223949U, 2048009279U, 2047791847U, 2047578653U, 2047363049U, 2047149409U, 2046934993U, 2046720463U, 2046506843U, 2046291199U, 2046077087U, 2045861539U, 2045647739U, 2045434463U, 2045221103U, 2045007113U, 2044792049U, 2044576769U, 2044363891U, 2044149299U, 2043936319U, 2043720761U, 2043504637U, 2043292763U, 2043078641U, 2042866541U, 2042653213U, 2042438569U, 2042225033U, 2042009527U, 2041792717U, 2041579739U, 2041363763U, 2041147879U, 2040934349U, 2040718517U, 2040504493U, 2040289607U, 2040074797U, 2039858837U, 2039645171U, 2039430467U, 2039216407U, 2039003861U, 2038790651U, 2038576081U, 2038359943U, 2038146151U, 2037932623U, 2037716911U, 2037503981U, 2037287653U, 2037073373U, 2036858851U, 2036643893U, 2036429471U, 2036215387U, 2036000677U, 2035784449U, 2035570907U, 2035354273U, 2035139747U, 2034925411U, 2034711461U, 2034497363U, 2034284051U, 2034072233U, 2033859251U, 2033644259U, 2033431303U, 2033216407U, 2033002691U, 2032786661U, 2032573117U, 2032359227U, 2032146469U, 2031931939U, 2031718771U, 2031504173U, 2031288319U, 2031072521U, 2030860333U, 2030646193U, 2030432291U, 2030217193U, 2030003243U, 2029787321U, 2029573459U, 2029359097U, 2029144891U, 2028930721U, 2028716447U, 2028500113U, 2028285971U, 2028072061U, 2027854601U, 2027639671U, 2027425307U, 2027211397U, 2026995167U, 2026782997U, 2026568471U, 2026352353U, 2026140001U, 2025926909U, 2025711001U, 2025496607U, 2025283669U, 2025069139U, 2024855797U, 2024642273U, 2024426897U, 2024211479U, 2024000453U, 2023784047U, 2023568411U, 2023353641U, 2023137863U, 2022923561U, 2022708829U, 2022496247U, 2022282133U, 2022068203U, 2021852201U, 2021636473U, 2021423681U, 2021208647U, 2020993567U, 2020777973U, 2020563967U, 2020350851U, 2020136771U, 2019921859U, 2019706397U, 2019493009U, 2019277723U, 2019064589U, 2018850983U, 2018639201U, 2018424713U, 2018208637U, 2017993009U, 2017777939U, 2017562731U, 2017348253U, 2017134761U, 2016919963U, 2016705421U, 2016490933U, 2016277763U, 2016063589U, 2015850721U, 2015637157U, 2015421799U, 2015209013U, 2014994939U, 2014782433U, 2014566331U, 2014351637U, 2014137989U, 2013925063U, 2013711647U, 2013499049U, 2013286763U, 2013075139U, 2012859839U, 2012647649U, 2012431891U, 2012216867U, 2012004413U, 2011791329U, 2011576517U, 2011362433U, 2011148519U, 2010933593U, 2010720161U, 2010505199U, 2010290519U, 2010075337U, 2009859959U, 2009645977U, 2009431447U, 2009218259U, 2009003429U, 2008787149U, 2008574681U, 2008360573U, 2008145099U, 2007930259U, 2007716329U, 2007502459U, 2007286573U, 2007071909U, 2006858713U, 2006644403U, 2006430821U, 2006218061U, 2006003647U, 2005789979U, 2005575623U, 2005364209U, 2005151389U, 2004935551U, 2004721613U, 2004506423U, 2004292663U, 2004078577U, 2003863541U, 2003650409U, 2003440357U, 2003225123U, 2003010937U, 2002796941U, 2002581443U, 2002369483U, 2002153999U, 2001941651U, 2001729157U, 2001516353U, 2001301853U, 2001088319U, 2000875991U, 2000662501U, 2000447263U, 2000234189U, 2000021819U, 1999805713U, 1999591519U, 1999377031U, 1999163767U, 1998946837U, 1998733271U, 1998518189U, 1998303647U, 1998088991U, 1997874821U, 1997659667U, 1997445841U, 1997235533U, 1997021729U, 1996806061U, 1996589219U, 1996372933U, 1996159237U, 1995945257U, 1995733277U, 1995516739U, 1995302677U, 1995089477U, 1994873599U, 1994659547U, 1994447443U, 1994233277U, 1994020141U, 1993804573U, 1993591349U, 1993377929U, 1993161893U, 1992947581U, 1992735991U, 1992521611U, 1992307687U, 1992093223U, 1991878487U, 1991663129U, 1991450303U, 1991237041U, 1991022613U, 1990808779U, 1990594729U, 1990379987U, 1990165141U, 1989950267U, 1989736093U, 1989522463U, 1989308263U, 1989094451U, 1988879909U, 1988668001U, 1988453771U, 1988239081U, 1988022431U, 1987809871U, 1987597069U, 1987382933U, 1987166897U, 1986953041U, 1986741131U, 1986525991U, 1986312707U, 1986097783U, 1985884553U, 1985668123U, 1985453983U, 1985239303U, 1985025799U, 1984808653U, 1984596529U, 1984382563U, 1984169507U, 1983958577U, 1983743011U, 1983527261U, 1983314681U, 1983099403U, 1982885549U, 1982671441U, 1982456033U, 1982243303U, 1982026903U, 1981813313U, 1981600333U, 1981386437U, 1981174301U, 1980956819U, 1980744853U, 1980530767U, 1980316879U, 1980102307U, 1979890327U, 1979675213U, 1979460403U, 1979246653U, 1979031823U, 1978817069U, 1978604077U, 1978390889U, 1978178009U, 1977963947U, 1977749701U, 1977534121U, 1977320621U, 1977108079U, 1976893027U, 1976678113U, 1976464909U, 1976253337U, 1976037941U, 1975823131U, 1975607279U, 1975395517U, 1975179749U, 1974966589U, 1974752149U, 1974538739U, 1974325789U, 1974111697U, 1973900053U, 1973685503U, 1973472451U, 1973255929U, 1973042179U, 1972827331U, 1972612991U, 1972401703U, 1972186661U, 1971974149U, 1971760337U, 1971547093U, 1971334973U, 1971122009U, 1970910197U, 1970696591U, 1970480849U, 1970265071U, 1970049421U, 1969836083U, 1969621729U, 1969408369U, 1969193627U, 1968979921U, 1968765377U, 1968552293U, 1968339173U, 1968125447U, 1967912579U, 1967699759U, 1967485391U, 1967270213U, 1967054437U, 1966839869U, 1966624633U, 1966410613U, 1966194941U, 1965982463U, 1965767701U, 1965554191U, 1965341783U, 1965125849U, 1964913271U, 1964698751U, 1964484989U, 1964271983U, 1964054333U, 1963841857U, 1963626869U, 1963415351U, 1963201589U, 1962987557U, 1962773513U, 1962559147U, 1962341369U, 1962128447U, 1961914793U, 1961701477U, 1961488423U, 1961275501U, 1961060869U, 1960848299U, 1960633061U, 1960417241U, 1960204229U, 1959988241U, 1959770467U, 1959554581U, 1959344813U, 1959133037U, 1958918903U, 1958704933U, 1958490823U, 1958275273U, 1958060563U, 1957848889U, 1957634227U, 1957421957U, 1957206529U, 1956991991U, 1956777359U, 1956563137U, 1956349627U, 1956136801U, 1955922713U, 1955709199U, 1955494259U, 1955281897U, 1955067349U, 1954854449U, 1954638899U, 1954424539U, 1954210151U, 1953996521U, 1953781757U, 1953568061U, 1953354313U, 1953138323U, 1952924947U, 1952711471U, 1952499607U, 1952285947U, 1952073337U, 1951860359U, 1951646947U, 1951429421U, 1951215599U, 1951001777U, 1950789343U, 1950577147U, 1950364093U, 1950151409U, 1949937593U, 1949722681U, 1949510449U, 1949296903U, 1949084747U, 1948870019U, 1948653431U, 1948438379U, 1948225849U, 1948010171U, 1947797431U, 1947584029U, 1947369353U, 1947156833U, 1946945327U, 1946730593U, 1946516281U, 1946303641U, 1946090359U, 1945876957U, 1945662233U, 1945447381U, 1945234493U, 1945019243U, 1944807173U, 1944592619U, 1944378089U, 1944164279U, 1943952403U, 1943736161U, 1943523271U, 1943309701U, 1943097553U, 1942884479U, 1942669921U, 1942453361U, 1942239361U, 1942026481U, 1941812861U, 1941599599U, 1941383267U, 1941169357U, 1940955971U, 1940740007U, 1940530087U, 1940315623U, 1940101721U, 1939887941U, 1939671631U, 1939459111U, 1939246339U, 1939030463U, 1938815773U, 1938601583U, 1938388579U, 1938173087U, 1937959571U, 1937746337U, 1937530079U, 1937314759U, 1937100097U, 1936885309U, 1936673131U, 1936458907U, 1936247077U, 1936033289U, 1935819463U, 1935605239U, 1935390563U, 1935176689U, 1934965691U, 1934751667U, 1934537677U, 1934322787U, 1934110439U, 1933897331U, 1933680613U, 1933466789U, 1933253327U, 1933040761U, 1932827927U, 1932614807U, 1932400721U, 1932186007U, 1931972417U, 1931759197U, 1931545013U, 1931330741U, 1931116997U, 1930902073U, 1930690271U, 1930477583U, 1930262641U, 1930050217U, 1929835819U, 1929622771U, 1929410531U, 1929197299U, 1928981581U, 1928767499U, 1928552657U, 1928340781U, 1928126819U, 1927911509U, 1927700891U, 1927487371U, 1927272463U, 1927060243U, 1926846787U, 1926631963U, 1926417281U, 1926202891U, 1925987633U, 1925774309U, 1925560577U, 1925346653U, 1925132813U, 1924917391U, 1924703741U, 1924489667U, 1924274753U, 1924061647U, 1923848099U, 1923635011U, 1923423013U, 1923209657U, 1922995003U, 1922780593U, 1922567051U, 1922354261U, 1922142449U, 1921923569U, 1921709773U, 1921496867U, 1921285153U, 1921071419U, 1920855917U, 1920641953U, 1920426647U, 1920210139U, 1919997463U, 1919784743U, 1919571817U, 1919357707U, 1919144197U, 1918928327U, 1918716967U, 1918505287U, 1918288951U, 1918074289U, 1917859243U, 1917645077U, 1917431177U, 1917217327U, 1917001897U, 1916787517U, 1916575319U, 1916359751U, 1916145289U, 1915931917U, 1915718513U, 1915503833U, 1915291013U, 1915078507U, 1914865129U, 1914652417U, 1914438937U, 1914226511U, 1914012007U, 1913797597U, 1913583341U, 1913369903U, 1913155711U, 1912942181U, 1912728781U, 1912513847U, 1912300451U, 1912087831U, 1911873253U, 1911657779U, 1911442763U, 1911231353U, 1911015773U, 1910802847U, 1910588893U, 1910375063U, 1910162201U, 1909948321U, 1909733303U, 1909520323U, 1909307419U, 1909093247U, 1908879877U, 1908664063U, 1908449857U, 1908236677U, 1908022811U, 1907810987U, 1907598467U, 1907384467U, 1907169083U, 1906953211U, 1906739209U, 1906525109U, 1906310951U, 1906096999U, 1905884731U, 1905673373U, 1905457363U, 1905243209U, 1905029017U, 1904816713U, 1904602537U, 1904389517U, 1904176861U, 1903963189U, 1903749361U, 1903537567U, 1903322501U, 1903108331U, 1902895109U, 1902682841U, 1902468143U, 1902255833U, 1902042173U, 1901825033U, 1901610857U, 1901394977U, 1901180863U, 1900966337U, 1900753301U, 1900539409U, 1900326377U, 1900115621U, 1899902029U, 1899689683U, 1899477733U, 1899264779U, 1899050837U, 1898835283U, 1898621423U, 1898407963U, 1898196023U, 1897983083U, 1897770997U, 1897556651U, 1897344901U, 1897133809U, 1896919259U, 1896705157U, 1896491041U, 1896277457U, 1896063769U, 1895850709U, 1895636689U, 1895420279U, 1895208223U, 1894993829U, 1894782023U, 1894566353U, 1894350527U, 1894137731U, 1893924589U, 1893710851U, 1893496691U, 1893283459U, 1893069709U, 1892854861U, 1892641133U, 1892428999U, 1892215747U, 1892003387U, 1891790491U, 1891579493U, 1891362449U, 1891148263U, 1890934141U, 1890720857U, 1890507551U, 1890292267U, 1890078847U, 1889865743U, 1889652253U, 1889438801U, 1889224241U, 1889013617U, 1888800223U, 1888587439U, 1888373471U, 1888163867U, 1887952039U, 1887737603U, 1887523223U, 1887309659U, 1887096331U, 1886884289U, 1886670587U, 1886456149U, 1886240141U, 1886028191U, 1885812587U, 1885599461U, 1885386431U, 1885172129U, 1884957803U, 1884746813U, 1884531721U, 1884315151U, 1884102601U, 1883889043U, 1883673413U, 1883458481U, 1883244703U, 1883033723U, 1882821439U, 1882608839U, 1882393321U, 1882178719U, 1881963827U, 1881750943U, 1881536119U, 1881320087U, 1881108149U, 1880896177U, 1880681953U, 1880466319U, 1880252831U, 1880038367U, 1879824493U, 1879610081U, 1879395409U, 1879181047U, 1878969739U, 1878756823U, 1878542957U, 1878330583U, 1878116137U, 1877904227U, 1877689511U, 1877474453U, 1877263457U, 1877050621U, 1876835243U, 1876622257U, 1876411883U, 1876197749U, 1875985613U, 1875770417U, 1875554969U, 1875341953U, 1875126829U, 1874913457U, 1874701039U, 1874489093U, 1874272849U, 1874060159U, 1873846979U, 1873635529U, 1873421219U, 1873209713U, 1872994463U, 1872782473U, 1872569861U, 1872355663U, 1872141379U, 1871927711U, 1871713241U, 1871499821U, 1871282653U, 1871070701U, 1870859063U, 1870646521U, 1870431113U, 1870216661U, 1870002733U, 1869789989U, 1869578903U, 1869364733U, 1869150917U, 1868934923U, 1868723261U, 1868509567U, 1868296949U, 1868082787U, 1867868263U, 1867655113U, 1867441489U, 1867226723U, 1867011511U, 1866798541U, 1866586681U, 1866375299U, 1866161233U, 1865946409U, 1865732599U, 1865516353U, 1865304169U, 1865090393U, 1864877809U, 1864661059U, 1864446949U, 1864231703U, 1864019951U, 1863806657U, 1863593309U, 1863380551U, 1863168421U, 1862955293U, 1862742773U, 1862527981U, 1862316163U, 1862102299U, 1861887043U, 1861671997U, 1861458811U, 1861246481U, 1861033093U, 1860819593U, 1860606511U, 1860392983U, 1860179969U, 1859966057U, 1859753327U, 1859537033U, 1859321609U, 1859109403U, 1858896001U, 1858682179U, 1858468021U, 1858255141U, 1858040617U, 1857826583U, 1857614989U, 1857401957U, 1857189121U, 1856974877U, 1856761057U, 1856548943U, 1856334443U, 1856122343U, 1855909711U, 1855697113U, 1855485559U, 1855272659U, 1855059971U, 1854846797U, 1854633577U, 1854417667U, 1854205447U, 1853992741U, 1853779349U, 1853563861U, 1853348593U, 1853135209U, 1852922107U, 1852710059U, 1852494713U, 1852281311U, 1852068733U, 1851856651U, 1851644933U, 1851430187U, 1851217127U, 1851003919U, 1850791277U, 1850576047U, 1850363993U, 1850149817U, 1849934699U, 1849722047U, 1849507193U, 1849292813U, 1849082251U, 1848865933U, 1848650597U, 1848437771U, 1848223219U, 1848011083U, 1847798189U, 1847584031U, 1847369309U, 1847155309U, 1846942483U, 1846728739U, 1846515617U, 1846302167U, 1846089199U, 1845873173U, 1845658319U, 1845445027U, 1845234277U, 1845021179U, 1844808467U, 1844594179U, 1844381387U, 1844167673U, 1843954171U, 1843740683U, 1843527457U, 1843314307U, 1843101739U, 1842889381U, 1842677059U, 1842463939U, 1842250661U, 1842035359U, 1841822201U, 1841610737U, 1841396317U, 1841181707U, 1840969279U, 1840756397U, 1840542703U, 1840329529U, 1840114021U, 1839902681U, 1839690289U, 1839477257U, 1839262553U, 1839049451U, 1838834191U, 1838622671U, 1838409107U, 1838193991U, 1837980367U, 1837766683U, 1837552097U, 1837338709U, 1837126441U, 1836914561U, 1836700787U, 1836487573U, 1836273797U, 1836060607U, 1835848667U, 1835633953U, 1835420233U, 1835206981U, 1834993807U, 1834782097U, 1834566973U, 1834353881U, 1834140647U, 1833926671U, 1833715579U, 1833503561U, 1833293153U, 1833081637U, 1832866859U, 1832653061U, 1832438771U, 1832224573U, 1832010209U, 1831797823U, 1831585487U, 1831372853U, 1831157287U, 1830944299U, 1830730943U, 1830517193U, 1830305447U, 1830091709U, 1829876317U, 1829662273U, 1829449411U, 1829236631U, 1829023943U, 1828810271U, 1828596149U, 1828382207U, 1828170133U, 1827959183U, 1827746581U, 1827532807U, 1827317861U, 1827106199U, 1826891467U, 1826680879U, 1826467309U, 1826253997U, 1826039113U, 1825825087U, 1825610833U, 1825397839U, 1825185599U, 1824970999U, 1824757813U, 1824544453U, 1824331781U, 1824120253U, 1823907461U, 1823694571U, 1823483819U, 1823269337U, 1823056657U, 1822841029U, 1822628681U, 1822413007U, 1822199881U, 1821987077U, 1821771307U, 1821559319U, 1821348401U, 1821133981U, 1820921497U, 1820707351U, 1820492903U, 1820278483U, 1820065243U, 1819853467U, 1819640743U, 1819428503U, 1819214503U, 1818999947U, 1818786679U, 1818571829U, 1818358589U, 1818143609U, 1817931289U, 1817716661U, 1817504939U, 1817292857U, 1817077921U, 1816863773U, 1816650911U, 1816437629U, 1816224331U, 1816011343U, 1815798827U, 1815584137U, 1815372683U, 1815158353U, 1814944921U, 1814730259U, 1814519281U, 1814305679U, 1814091911U, 1813878061U, 1813665221U, 1813450559U, 1813237159U, 1813022209U, 1812810889U, 1812598517U, 1812386621U, 1812172727U, 1811959999U, 1811746201U, 1811532013U, 1811320249U, 1811105171U, 1810891699U, 1810676641U, 1810464479U, 1810251841U, 1810039403U, 1809825361U, 1809610937U, 1809398191U, 1809185471U, 1808972351U, 1808760589U, 1808548033U, 1808335171U, 1808122291U, 1807908719U, 1807695269U, 1807482529U, 1807269617U, 1807056437U, 1806843373U, 1806629173U, 1806416483U, 1806203057U, 1805989663U, 1805777483U, 1805564641U, 1805352947U, 1805137171U, 1804922843U, 1804709029U, 1804496621U, 1804282919U, 1804070239U, 1803858137U, 1803644209U, 1803430969U, 1803217879U, 1803004363U, 1802791009U, 1802576609U, 1802366077U, 1802150351U, 1801937953U, 1801724581U, 1801510229U, 1801298753U, 1801085947U, 1800871399U, 1800657197U, 1800444797U, 1800231943U, 1800018919U, 1799806523U, 1799593049U, 1799379191U, 1799166077U, 1798952293U, 1798742359U, 1798528609U, 1798316879U, 1798103999U, 1797889399U, 1797677771U, 1797463951U, 1797250849U, 1797038773U, 1796829191U, 1796613449U, 1796399977U, 1796188403U, 1795976477U, 1795764959U, 1795551127U, 1795337413U, 1795124281U, 1794911507U, 1794700001U, 1794488291U, 1794275677U, 1794061361U, 1793848423U, 1793635369U, 1793420693U, 1793210383U, 1792996691U, 1792784233U, 1792570531U, 1792358257U, 1792146007U, 1791934237U, 1791723223U, 1791509171U, 1791295381U, 1791082301U, 1790868851U, 1790656031U, 1790443537U, 1790230961U, 1790017003U, 1789805027U, 1789593419U, 1789379479U, 1789164787U, 1788954239U, 1788740491U, 1788525853U, 1788313313U, 1788099323U, 1787886053U, 1787673467U, 1787459507U, 1787246339U, 1787034257U, 1786821557U, 1786608137U, 1786394063U, 1786182059U, 1785967481U, 1785754219U, 1785541067U, 1785328469U, 1785115117U, 1784902591U, 1784691409U, 1784479457U, 1784264249U, 1784052359U, 1783837177U, 1783625471U, 1783412083U, 1783199161U, 1782985577U, 1782774361U, 1782561791U, 1782349147U, 1782135227U, 1781922349U, 1781707453U, 1781494499U, 1781281357U, 1781067257U, 1780853203U, 1780641661U, 1780427603U, 1780215917U, 1780004623U, 1779789901U, 1779579163U, 1779366067U, 1779154763U, 1778941309U, 1778728537U, 1778516123U, 1778303041U, 1778091787U, 1777879687U, 1777663243U, 1777451671U, 1777236971U, 1777025297U, 1776810323U, 1776599551U, 1776385619U, 1776175129U, 1775962709U, 1775748791U, 1775538503U, 1775324981U, 1775111743U, 1774897037U, 1774682293U, 1774468921U, 1774256161U, 1774044773U, 1773831989U, 1773617759U, 1773403967U, 1773190319U, 1772977307U, 1772763497U, 1772549873U, 1772335879U, 1772125603U, 1771913347U, 1771699337U, 1771487587U, 1771272023U, 1771059089U, 1770847583U, 1770636541U, 1770423601U, 1770210877U, 1769994487U, 1769781749U, 1769568701U, 1769356007U, 1769142241U, 1768928741U, 1768713641U, 1768501909U, 1768289251U, 1768078313U, 1767865181U, 1767649771U, 1767438721U, 1767226861U, 1767012337U, 1766798269U, 1766585551U, 1766372479U, 1766160161U, 1765946669U, 1765734799U, 1765523477U, 1765309201U, 1765095139U, 1764883123U, 1764672967U, 1764461749U, 1764246829U, 1764032813U, 1763819731U, 1763606881U, 1763393377U, 1763181727U, 1762969993U, 1762756637U, 1762543031U, 1762331981U, 1762118279U, 1761903823U, 1761692489U, 1761477937U, 1761263827U, 1761050773U, 1760839001U, 1760628371U, 1760413229U, 1760197709U, 1759985173U, 1759773131U, 1759560839U, 1759348933U, 1759135717U, 1758923039U, 1758710171U, 1758498877U, 1758285307U, 1758073949U, 1757860073U, 1757647841U, 1757436281U, 1757222959U, 1757008063U, 1756793993U, 1756581121U, 1756368917U, 1756154579U, 1755940577U, 1755728027U, 1755514219U, 1755303233U, 1755091193U, 1754878501U, 1754665361U, 1754454571U, 1754242561U, 1754030731U, 1753816681U, 1753602211U, 1753389713U, 1753176443U, 1752964153U, 1752750449U, 1752537337U, 1752324599U, 1752112291U, 1751899441U, 1751687213U, 1751473417U, 1751261329U, 1751049169U, 1750837849U, 1750623913U, 1750410733U, 1750198199U, 1749985409U, 1749773527U, 1749560107U, 1749347723U, 1749135239U, 1748924363U, 1748710897U, 1748498359U, 1748287217U, 1748070949U, 1747857149U, 1747644641U, 1747430963U, 1747216301U, 1747002469U, 1746789469U, 1746578459U, 1746366119U, 1746151037U, 1745939603U, 1745725207U, 1745513141U, 1745303071U, 1745089651U, 1744877551U, 1744663763U, 1744451789U, 1744237181U, 1744025083U, 1743814301U, 1743600853U, 1743387367U, 1743174197U, 1742962841U, 1742749471U, 1742536847U, 1742322259U, 1742111281U, 1741899253U, 1741687861U, 1741474171U, 1741258007U, 1741045811U, 1740835949U, 1740621881U, 1740408053U, 1740196361U, 1739983067U, 1739771023U, 1739558827U, 1739345351U, 1739134457U, 1738920671U, 1738707163U, 1738494731U, 1738281847U, 1738067677U, 1737856069U, 1737644603U, 1737432539U, 1737221611U, 1737006983U, 1736794487U, 1736581619U, 1736369281U, 1736154647U, 1735943387U, 1735729111U, 1735517011U, 1735305269U, 1735090199U, 1734876943U, 1734664441U, 1734449077U, 1734237377U, 1734024737U, 1733811263U, 1733597969U, 1733384509U, 1733171707U, 1732961677U, 1732746863U, 1732535537U, 1732321049U, 1732108141U, 1731895523U, 1731682793U, 1731469843U, 1731254191U, 1731041219U, 1730829523U, 1730618177U, 1730405549U, 1730192197U, 1729976291U, 1729763383U, 1729549669U, 1729337327U, 1729125011U, 1728914417U, 1728701587U, 1728488477U, 1728276799U, 1728063221U, 1727849777U, 1727635841U, 1727422667U, 1727208947U, 1726994957U, 1726783987U, 1726573733U, 1726361471U, 1726147603U, 1725936371U, 1725724123U, 1725510341U, 1725297971U, 1725083699U, 1724868617U, 1724657423U, 1724445431U, 1724230499U, 1724017907U, 1723805329U, 1723596101U, 1723381903U, 1723167899U, 1722954017U, 1722740653U, 1722527047U, 1722312811U, 1722102953U, 1721891051U, 1721678617U, 1721466457U, 1721252303U, 1721040851U, 1720830509U, 1720616329U, 1720403401U, 1720190291U, 1719977801U, 1719766823U, 1719554429U, 1719342839U, 1719129833U, 1718917727U, 1718705621U, 1718492519U, 1718278847U, 1718067781U, 1717854091U, 1717640279U, 1717427989U, 1717216279U, 1717003237U, 1716788687U, 1716577411U, 1716367007U, 1716156181U, 1715943997U, 1715731957U, 1715519549U, 1715306557U, 1715093563U, 1714882331U, 1714670413U, 1714457677U, 1714244459U, 1714031303U, 1713818269U, 1713604801U, 1713389563U, 1713178517U, 1712965213U, 1712753267U, 1712539687U, 1712328841U, 1712113927U, 1711899883U, 1711688063U, 1711475021U, 1711261333U, 1711051409U, 1710837059U, 1710624329U, 1710413077U, 1710198703U, 1709987243U, 1709773981U, 1709563153U, 1709351911U, 1709141977U, 1708930331U, 1708718107U, 1708502867U, 1708290503U, 1708076729U, 1707863831U, 1707652277U, 1707439001U, 1707227173U, 1707014329U, 1706801633U, 1706589107U, 1706378419U, 1706166377U, 1705953643U, 1705741783U, 1705531549U, 1705316959U, 1705106129U, 1704894109U, 1704681709U, 1704468937U, 1704255689U, 1704045223U, 1703832359U, 1703619641U, 1703405609U, 1703195113U, 1702983229U, 1702769197U, 1702556957U, 1702344983U, 1702131659U, 1701917627U, 1701705373U, 1701491459U, 1701278609U, 1701065897U, 1700854567U, 1700644447U, 1700429513U, 1700217709U, 1700006197U, 1699793419U, 1699580317U, 1699369627U, 1699155581U, 1698940723U, 1698727337U, 1698513253U, 1698301307U, 1698091267U, 1697877743U, 1697664337U, 1697450791U, 1697237897U, 1697025769U, 1696813771U, 1696599187U, 1696387493U, 1696177811U, 1695964349U, 1695752273U, 1695539983U, 1695328517U, 1695112499U, 1694901031U, 1694687689U, 1694475023U, 1694261953U, 1694049001U, 1693835707U, 1693622737U, 1693410343U, 1693197481U, 1692985631U, 1692774529U, 1692562093U, 1692348953U, 1692136417U, 1691923169U, 1691710081U, 1691497571U, 1691284057U, 1691071279U, 1690859791U, 1690645939U, 1690435493U, 1690223939U, 1690010563U, 1689798259U, 1689584801U, 1689374539U, 1689162413U, 1688949023U, 1688734417U, 1688524517U, 1688313817U, 1688102477U, 1687890049U, 1687679137U, 1687466219U, 1687256309U, 1687042309U, 1686831407U, 1686620363U, 1686407869U, 1686194189U, 1685982491U, 1685769949U, 1685554763U, 1685339581U, 1685127391U, 1684918171U, 1684703561U, 1684493633U, 1684280249U, 1684067551U, 1683855757U, 1683645311U, 1683433723U, 1683221711U, 1683008251U, 1682796551U, 1682583167U, 1682371753U, 1682155987U, 1681944119U, 1681733363U, 1681519849U, 1681308011U, 1681098073U, 1680884237U, 1680671623U, 1680459233U, 1680247291U, 1680031811U, 1679819293U, 1679605723U, 1679392699U, 1679181041U, 1678968337U, 1678756411U, 1678543357U, 1678332811U, 1678122869U, 1677911009U, 1677697997U, 1677485779U, 1677275011U, 1677060713U, 1676850353U, 1676637649U, 1676424697U, 1676211011U, 1676000453U, 1675787273U, 1675576393U, 1675363649U, 1675151339U, 1674939241U, 1674727057U, 1674512789U, 1674299479U, 1674087917U, 1673876467U, 1673661967U, 1673449919U, 1673235139U, 1673021521U, 1672808327U, 1672596941U, 1672384589U, 1672173589U, 1671961757U, 1671749039U, 1671536963U, 1671325529U, 1671112967U, 1670901179U, 1670689117U, 1670475277U, 1670262637U, 1670051791U, 1669837633U, 1669625107U, 1669414039U, 1669203233U, 1668990637U, 1668775393U, 1668563849U, 1668350561U, 1668138847U, 1667926867U, 1667713757U, 1667501833U, 1667287651U, 1667077777U, 1666863299U, 1666650637U, 1666439549U, 1666227977U, 1666014149U, 1665800771U, 1665591229U, 1665380273U, 1665168877U, 1664957753U, 1664744593U, 1664532421U, 1664320123U, 1664105249U, 1663891367U, 1663680947U, 1663469519U, 1663254757U, 1663042397U, 1662830083U, 1662618499U, 1662405971U, 1662195949U, 1661984659U, 1661771983U, 1661559659U, 1661347057U, 1661134081U, 1660921679U, 1660710313U, 1660497737U, 1660285441U, 1660073287U, 1659859973U, 1659645607U, 1659431777U, 1659216851U, 1659004939U, 1658794849U, 1658581553U, 1658372297U, 1658159369U, 1657946183U, 1657734823U, 1657521973U, 1657309891U, 1657097159U, 1656885457U, 1656674549U, 1656462763U, 1656251131U, 1656038099U, 1655824243U, 1655613227U, 1655398643U, 1655187257U, 1654976711U, 1654763909U, 1654550113U, 1654337563U, 1654125673U, 1653912119U, 1653698759U, 1653486361U, 1653274141U, 1653059761U, 1652848279U, 1652634989U, 1652424523U, 1652209519U, 1651998191U, 1651784759U, 1651572101U, 1651359301U, 1651147033U, 1650934469U, 1650723083U, 1650509953U, 1650298159U, 1650085873U, 1649872649U, 1649659841U, 1649449441U, 1649235881U, 1649024249U, 1648812073U, 1648598869U, 1648387141U, 1648175587U, 1647962123U, 1647750473U, 1647538483U, 1647326743U, 1647114061U, 1646903021U, 1646688727U, 1646476903U, 1646264027U, 1646051219U, 1645838983U, 1645628581U, 1645415971U, 1645204021U, 1644993293U, 1644776921U, 1644563593U, 1644351343U, 1644139267U, 1643924603U, 1643713501U, 1643499029U, 1643288453U, 1643075813U, 1642860589U, 1642648877U, 1642437869U, 1642225457U, 1642012793U, 1641801523U, 1641589661U, 1641376409U, 1641162559U, 1640952241U, 1640741437U, 1640529173U, 1640318839U, 1640106227U, 1639894213U, 1639681237U, 1639470661U, 1639257131U, 1639045273U, 1638833389U, 1638619711U, 1638407233U, 1638194989U, 1637980541U, 1637769223U, 1637559887U, 1637346769U, 1637134337U, 1636922267U, 1636710653U, 1636499873U, 1636286867U, 1636076087U, 1635863939U, 1635650407U, 1635436661U, 1635226577U, 1635015631U, 1634803927U, 1634589751U, 1634378377U, 1634166799U, 1633954739U, 1633743409U, 1633531651U, 1633318207U, 1633106641U, 1632897269U, 1632687919U, 1632475811U, 1632263639U, 1632052379U, 1631839457U, 1631626849U, 1631414489U, 1631202467U, 1630990519U, 1630778063U, 1630565177U, 1630354853U, 1630143049U, 1629931943U, 1629719171U, 1629508193U, 1629295721U, 1629082687U, 1628870843U, 1628660101U, 1628448221U, 1628236867U, 1628023801U, 1627812029U, 1627600441U, 1627389431U, 1627177001U, 1626962539U, 1626751979U, 1626539179U, 1626326791U, 1626113729U, 1625903567U, 1625691247U, 1625478037U, 1625266073U, 1625054153U, 1624841633U, 1624630261U, 1624417189U, 1624206053U, 1623992599U, 1623781619U, 1623568949U, 1623354829U, 1623142987U, 1622929513U, 1622718421U, 1622506999U, 1622294161U, 1622082901U, 1621868393U, 1621658257U, 1621446997U, 1621235573U, 1621024253U, 1620813553U, 1620603793U, 1620392623U, 1620180607U, 1619968247U, 1619753719U, 1619541383U, 1619329603U, 1619117597U, 1618904627U, 1618691989U, 1618479787U, 1618267333U, 1618055717U, 1617843229U, 1617630947U, 1617417619U, 1617204377U, 1616993519U, 1616781559U, 1616568367U, 1616356229U, 1616143759U, 1615933097U, 1615723597U, 1615509367U, 1615297399U, 1615086917U, 1614874609U, 1614661459U, 1614448681U, 1614236551U, 1614023113U, 1613812303U, 1613601079U, 1613389003U, 1613176379U, 1612963951U, 1612751549U, 1612540789U, 1612329503U, 1612118173U, 1611906383U, 1611695711U, 1611483151U, 1611271957U, 1611057827U, 1610844611U, 1610632469U, 1610418559U, 1610206529U, 1609994033U, 1609781203U, 1609569413U, 1609359209U, 1609145459U, 1608933947U, 1608720361U, 1608508801U, 1608296717U, 1608084109U, 1607870417U, 1607658197U, 1607445701U, 1607234537U, 1607022997U, 1606810687U, 1606600679U, 1606388731U, 1606176347U, 1605965227U, 1605752081U, 1605539021U, 1605328313U, 1605115663U, 1604904061U, 1604693239U, 1604480057U, 1604268389U, 1604057183U, 1603842913U, 1603631873U, 1603420561U, 1603210649U, 1603000219U, 1602789143U, 1602577609U, 1602365857U, 1602153079U, 1601940149U, 1601727781U, 1601517839U, 1601302363U, 1601090371U, 1600879667U, 1600667899U, 1600455133U, 1600242403U, 1600031369U, 1599820517U, 1599606803U, 1599396749U, 1599184751U, 1598975051U, 1598761279U, 1598549501U, 1598335411U, 1598123407U, 1597911299U, 1597700057U, 1597487621U, 1597277893U, 1597065859U, 1596852787U, 1596642133U, 1596428957U, 1596216553U, 1596002173U, 1595792243U, 1595579933U, 1595369533U, 1595158241U, 1594948063U, 1594737161U, 1594525729U, 1594311107U, 1594098707U, 1593885151U, 1593671377U, 1593458753U, 1593247781U, 1593035057U, 1592822603U, 1592610959U, 1592398513U, 1592185459U, 1591975481U, 1591765501U, 1591554421U, 1591341443U, 1591131319U, 1590920003U, 1590707633U, 1590494783U, 1590283363U, 1590070931U, 1589859377U, 1589646811U, 1589434129U, 1589223187U, 1589011031U, 1588799903U, 1588586047U, 1588375429U, 1588163957U, 1587952687U, 1587741893U, 1587529987U, 1587318851U, 1587105677U, 1586891203U, 1586680391U, 1586469947U, 1586257091U, 1586045543U, 1585835543U, 1585622579U, 1585410503U, 1585198583U, 1584985397U, 1584772169U, 1584559601U, 1584347197U, 1584135689U, 1583923169U, 1583711639U, 1583501189U, 1583290279U, 1583078971U, 1582868279U, 1582658101U, 1582445219U, 1582233599U, 1582020931U, 1581806959U, 1581596773U, 1581385601U, 1581173551U, 1580962969U, 1580751941U, 1580539157U, 1580325619U, 1580114611U, 1579903427U, 1579693151U, 1579481467U, 1579268359U, 1579056379U, 1578842593U, 1578632179U, 1578421843U, 1578209747U, 1577998151U, 1577787647U, 1577579093U, 1577369909U, 1577155537U, 1576943099U, 1576730611U, 1576521313U, 1576311547U, 1576100221U, 1575886001U, 1575674297U, 1575462277U, 1575251819U, 1575039077U, 1574829143U, 1574617871U, 1574406947U, 1574196319U, 1573984591U, 1573771307U, 1573558699U, 1573347103U, 1573134727U, 1572923981U, 1572710869U, 1572499171U, 1572285719U, 1572074671U, 1571864771U, 1571650979U, 1571438179U, 1571225417U, 1571013593U, 1570801511U, 1570589539U, 1570376557U, 1570164923U, 1569953963U, 1569742417U, 1569531179U, 1569320693U, 1569107899U, 1568896783U, 1568684263U, 1568472599U, 1568261309U, 1568048311U, 1567834613U, 1567622321U, 1567411583U, 1567200757U, 1566991141U, 1566778691U, 1566568769U, 1566357157U, 1566143399U, 1565932283U, 1565721347U, 1565509193U, 1565297891U, 1565085653U, 1564873847U, 1564660499U, 1564447433U, 1564235279U, 1564021853U, 1563811489U, 1563600547U, 1563390781U, 1563178303U, 1562966143U, 1562753519U, 1562540341U, 1562328893U, 1562116663U, 1561904369U, 1561691323U, 1561478873U, 1561266367U, 1561053881U, 1560842071U, 1560628519U, 1560415321U, 1560203707U, 1559991437U, 1559780639U, 1559568349U, 1559356307U, 1559145017U, 1558935383U, 1558724383U, 1558512313U, 1558300649U, 1558088447U, 1557875689U, 1557664697U, 1557452837U, 1557241417U, 1557027809U, 1556815321U, 1556607361U, 1556394971U, 1556182799U, 1555972007U, 1555757803U, 1555547131U, 1555336427U, 1555123693U, 1554912313U, 1554701053U, 1554488371U, 1554276719U, 1554064399U, 1553854661U, 1553642743U, 1553430247U, 1553219651U, 1553007349U, 1552796459U, 1552584197U, 1552373029U, 1552160453U, 1551947497U, 1551736567U, 1551524531U, 1551312557U, 1551101779U, 1550890007U, 1550680333U, 1550469667U, 1550258377U, 1550048537U, 1549836947U, 1549626413U, 1549413953U, 1549202497U, 1548990721U, 1548777619U, 1548566603U, 1548353953U, 1548143243U, 1547932783U, 1547718707U, 1547508233U, 1547295949U, 1547084933U, 1546874491U, 1546660861U, 1546449799U, 1546240771U, 1546029269U, 1545817543U, 1545608279U, 1545395063U, 1545184891U, 1544973307U, 1544762029U, 1544550919U, 1544340169U, 1544126369U, 1543917269U, 1543704583U, 1543492921U, 1543278167U, 1543066607U, 1542855121U, 1542643969U, 1542432631U, 1542220997U, 1542009797U, 1541798197U, 1541588329U, 1541375651U, 1541164321U, 1540951459U, 1540741079U, 1540529233U, 1540316951U, 1540104407U, 1539892303U, 1539682103U, 1539472589U, 1539260353U, 1539048419U, 1538837119U, 1538625079U, 1538413381U, 1538200369U, 1537988381U, 1537776257U, 1537564159U, 1537351003U, 1537141829U, 1536930599U, 1536719453U, 1536509207U, 1536298567U, 1536084287U, 1535872307U, 1535661467U, 1535448043U, 1535237141U, 1535025673U, 1534813279U, 1534603751U, 1534391513U, 1534179809U, 1533966341U, 1533756793U, 1533546401U, 1533334199U, 1533122693U, 1532910019U, 1532698561U, 1532487683U, 1532274157U, 1532063317U, 1531852901U, 1531640309U, 1531427567U, 1531215589U, 1531002287U, 1530788503U, 1530577127U, 1530366421U, 1530154837U, 1529942443U, 1529731897U, 1529522737U, 1529311841U, 1529103517U, 1528891963U, 1528680841U, 1528467029U, 1528256663U, 1528046269U, 1527835061U, 1527624487U, 1527413753U, 1527202763U, 1526992429U, 1526780881U, 1526568913U, 1526357621U, 1526146381U, 1525935077U, 1525723673U, 1525511483U, 1525301759U, 1525088857U, 1524876253U, 1524665299U, 1524452729U, 1524241639U, 1524031711U, 1523819651U, 1523608943U, 1523397277U, 1523184791U, 1522974181U, 1522761347U, 1522549627U, 1522339421U, 1522130107U, 1521919109U, 1521705557U, 1521496439U, 1521282947U, 1521071219U, 1520860261U, 1520647981U, 1520436857U, 1520224591U, 1520013307U, 1519800533U, 1519589777U, 1519377709U, 1519166063U, 1518957403U, 1518747859U, 1518537569U, 1518326107U, 1518115609U, 1517902261U, 1517689727U, 1517479627U, 1517268097U, 1517056027U, 1516842331U, 1516630799U, 1516422581U, 1516211933U, 1516000391U, 1515788333U, 1515576967U, 1515365569U, 1515154343U, 1514942327U, 1514732293U, 1514522249U, 1514311637U, 1514100949U, 1513888829U, 1513677317U, 1513464419U, 1513253267U, 1513040521U, 1512829321U, 1512619337U, 1512406871U, 1512196163U, 1511984137U, 1511773339U, 1511559821U, 1511349289U, 1511138999U, 1510926353U, 1510713947U, 1510500547U, 1510288337U, 1510077571U, 1509863603U, 1509652121U, 1509441179U, 1509226711U, 1509014431U, 1508801669U, 1508591653U, 1508381621U, 1508170903U, 1507960691U, 1507750679U, 1507539263U, 1507328419U, 1507115851U, 1506903271U, 1506692387U, 1506480763U, 1506267967U, 1506056749U, 1505847173U, 1505635909U, 1505425291U, 1505215927U, 1505005493U, 1504793657U, 1504581619U, 1504371229U, 1504162333U, 1503952867U, 1503740867U, 1503529823U, 1503316649U, 1503105971U, 1502893967U, 1502682551U, 1502471153U, 1502260021U, 1502047271U, 1501834643U, 1501623469U, 1501411771U, 1501200923U, 1500989389U, 1500775873U, 1500565127U, 1500353909U, 1500143621U, 1499932537U, 1499720281U, 1499508971U, 1499297563U, 1499086661U, 1498874747U, 1498663967U, 1498451329U, 1498239949U, 1498028803U, 1497818087U, 1497605653U, 1497394813U, 1497185497U, 1496972819U, 1496762291U, 1496551181U, 1496339959U, 1496130263U, 1495919351U, 1495706561U, 1495496021U, 1495283507U, 1495072847U, 1494862697U, 1494651533U, 1494441001U, 1494230201U, 1494019927U, 1493808817U, 1493596171U, 1493385767U, 1493174381U, 1492964443U, 1492753439U, 1492542301U, 1492331219U, 1492120969U, 1491911543U, 1491699217U, 1491487813U, 1491275839U, 1491064643U, 1490853697U, 1490645441U, 1490435729U, 1490226733U, 1490013949U, 1489802617U, 1489589581U, 1489379527U, 1489166039U, 1488954433U, 1488743299U, 1488531413U, 1488320387U, 1488111187U, 1487900389U, 1487690467U, 1487478497U, 1487267263U, 1487057459U, 1486847729U, 1486637849U, 1486427429U, 1486216819U, 1486003891U, 1485793697U, 1485583139U, 1485372797U, 1485160133U, 1484950217U, 1484741021U, 1484529037U, 1484317111U, 1484106011U, 1483894001U, 1483681889U, 1483471441U, 1483259819U, 1483049713U, 1482838807U, 1482628339U, 1482417641U, 1482206351U, 1481995027U, 1481782711U, 1481570309U, 1481359603U, 1481147693U, 1480933667U, 1480722539U, 1480513499U, 1480303739U, 1480090541U, 1479879637U, 1479668173U, 1479455969U, 1479244651U, 1479032449U, 1478822083U, 1478609551U, 1478399057U, 1478187493U, 1477978231U, 1477768079U, 1477556897U, 1477346933U, 1477136621U, 1476926603U, 1476715193U, 1476506771U, 1476293653U, 1476083051U, 1475872933U, 1475662079U, 1475452523U, 1475242933U, 1475032721U, 1474821919U, 1474611221U, 1474401239U, 1474190131U, 1473977039U, 1473765289U, 1473553997U, 1473340133U, 1473130889U, 1472919583U, 1472708987U, 1472498773U, 1472287043U, 1472077699U, 1471867637U, 1471657441U, 1471446443U, 1471235713U, 1471023823U, 1470812389U, 1470599993U, 1470390283U, 1470178133U, 1469966669U, 1469755801U, 1469543599U, 1469330881U, 1469119987U, 1468907851U, 1468695629U, 1468484929U, 1468273421U, 1468062059U, 1467851149U, 1467640763U, 1467428411U, 1467217327U, 1467006161U, 1466794151U, 1466583073U, 1466371843U, 1466160329U, 1465948373U, 1465736777U, 1465525723U, 1465314119U, 1465102643U, 1464892417U, 1464680897U, 1464467821U, 1464255641U, 1464045809U, 1463835853U, 1463624989U, 1463414549U, 1463204381U, 1462995643U, 1462784161U, 1462573369U, 1462359733U, 1462148579U, 1461938441U, 1461727649U, 1461517399U, 1461304841U, 1461094379U, 1460884471U, 1460673547U, 1460463343U, 1460253167U, 1460041901U, 1459830943U, 1459617227U, 1459408543U, 1459198619U, 1458986429U, 1458775291U, 1458563719U, 1458353033U, 1458142883U, 1457931973U, 1457721589U, 1457511773U, 1457299489U, 1457087893U, 1456876859U, 1456666873U, 1456456499U, 1456244849U, 1456034231U, 1455822019U, 1455611659U, 1455401117U, 1455191977U, 1454981797U, 1454771543U, 1454560109U, 1454349367U, 1454137843U, 1453927427U, 1453715761U, 1453504249U, 1453294127U, 1453081739U, 1452870073U, 1452659729U, 1452448273U, 1452238709U, 1452026141U, 1451813369U, 1451603563U, 1451391889U, 1451180063U, 1450969483U, 1450758469U, 1450547621U, 1450334971U, 1450123639U, 1449913747U, 1449701947U, 1449489913U, 1449279817U, 1449069893U, 1448857687U, 1448648989U, 1448438279U, 1448227537U, 1448017553U, 1447806317U, 1447595869U, 1447382917U, 1447174103U, 1446960607U, 1446749641U, 1446540443U, 1446328439U, 1446119281U, 1445908159U, 1445699449U, 1445489839U, 1445278733U, 1445068367U, 1444856983U, 1444646449U, 1444435033U, 1444222807U, 1444011887U, 1443800339U, 1443587273U, 1443379013U, 1443171043U, 1442957707U, 1442748763U, 1442539339U, 1442327533U, 1442114507U, 1441904047U, 1441690351U, 1441476593U, 1441266361U, 1441055647U, 1440847669U, 1440637277U, 1440426077U, 1440217231U, 1440006509U, 1439794799U, 1439583407U, 1439374171U, 1439162957U, 1438950691U, 1438740437U, 1438528463U, 1438318181U, 1438106513U, 1437895027U, 1437681979U, 1437470873U, 1437259559U, 1437048287U, 1436837653U, 1436626987U, 1436415569U, 1436205919U, 1435995373U, 1435784563U, 1435572799U, 1435360867U, 1435150831U, 1434940153U, 1434729199U, 1434520643U, 1434309757U, 1434099409U, 1433886089U, 1433674607U, 1433466031U, 1433253691U, 1433041403U, 1432829141U, 1432619269U, 1432407803U, 1432197869U, 1431984497U, 1431775249U, 1431565097U, 1431356779U, 1431143009U, 1430932183U, 1430722303U, 1430512469U, 1430300119U, 1430090093U, 1429879069U, 1429668403U, 1429460267U, 1429249499U, 1429038931U, 1428829397U, 1428618013U, 1428406739U, 1428195491U, 1427984963U, 1427775317U, 1427565439U, 1427352851U, 1427142841U, 1426932539U, 1426720049U, 1426508137U, 1426295809U, 1426083629U, 1425873301U, 1425663559U, 1425453457U, 1425242501U, 1425033223U, 1424823151U, 1424609591U, 1424398769U, 1424186873U, 1423976707U, 1423764707U, 1423554833U, 1423345877U, 1423133431U, 1422924851U, 1422714019U, 1422502589U, 1422290981U, 1422080969U, 1421869187U, 1421659849U, 1421447683U, 1421235259U, 1421022943U, 1420814009U, 1420605029U, 1420395637U, 1420184053U, 1419971947U, 1419759763U, 1419551207U, 1419341041U, 1419129991U, 1418921551U, 1418709581U, 1418500289U, 1418290387U, 1418078429U, 1417870807U, 1417660261U, 1417450193U, 1417239283U, 1417028629U, 1416816109U, 1416605381U, 1416393973U, 1416184151U, 1415974367U, 1415759791U, 1415548481U, 1415338993U, 1415127737U, 1414916513U, 1414706081U, 1414496683U, 1414285841U, 1414075933U, 1413865723U, 1413655609U, 1413443107U, 1413233803U, 1413023639U, 1412815031U, 1412603749U, 1412393903U, 1412182423U, 1411972363U, 1411758683U, 1411549081U, 1411338163U, 1411128419U, 1410915481U, 1410704203U, 1410493127U, 1410282767U, 1410072823U, 1409859751U, 1409648803U, 1409438881U, 1409228333U, 1409018059U, 1408806713U, 1408597321U, 1408386337U, 1408174433U, 1407966977U, 1407755081U, 1407545411U, 1407331943U, 1407121483U, 1406910187U, 1406702161U, 1406491811U, 1406281687U, 1406072201U, 1405861619U, 1405649281U, 1405438123U, 1405227907U, 1405017281U, 1404804259U, 1404592459U, 1404382807U, 1404170093U, 1403960413U, 1403749219U, 1403539117U, 1403328253U, 1403117977U, 1402907347U, 1402696543U, 1402487101U, 1402274179U, 1402063451U, 1401852989U, 1401641771U, 1401431819U, 1401220687U, 1401008503U, 1400799527U, 1400586883U, 1400375531U, 1400164691U, 1399955521U, 1399745411U, 1399536209U, 1399323823U, 1399113361U, 1398902599U, 1398693211U, 1398480011U, 1398271157U, 1398059851U, 1397849273U, 1397638597U, 1397427527U, 1397219311U, 1397008007U, 1396796321U, 1396584877U, 1396373389U, 1396163933U, 1395953003U, 1395742811U, 1395532583U, 1395320299U, 1395110599U, 1394900411U, 1394691731U, 1394481623U, 1394269621U, 1394061323U, 1393848473U, 1393637447U, 1393427027U, 1393216597U, 1393005013U, 1392793447U, 1392582857U, 1392373667U, 1392162097U, 1391951017U, 1391739917U, 1391531941U, 1391323799U, 1391112179U, 1390903231U, 1390693357U, 1390480867U, 1390273177U, 1390061591U, 1389854443U, 1389644899U, 1389435529U, 1389224101U, 1389013657U, 1388802889U, 1388590771U, 1388379371U, 1388168759U, 1387959973U, 1387749851U, 1387538531U, 1387326557U, 1387115207U, 1386903257U, 1386690259U, 1386480191U, 1386269273U, 1386059749U, 1385850449U, 1385640629U, 1385426899U, 1385217611U, 1385009077U, 1384797541U, 1384587221U, 1384376911U, 1384166219U, 1383955427U, 1383743587U, 1383531871U, 1383321073U, 1383109709U, 1382900023U, 1382688089U, 1382478193U, 1382270801U, 1382059321U, 1381850683U, 1381640213U, 1381429349U, 1381218071U, 1381008397U, 1380799099U, 1380588893U, 1380376549U, 1380165037U, 1379956027U, 1379745391U, 1379534699U, 1379324861U, 1379115107U, 1378903499U, 1378695559U, 1378484147U, 1378274273U, 1378062869U, 1377849181U, 1377638539U, 1377427537U, 1377217271U, 1377005527U, 1376795093U, 1376583451U, 1376372927U, 1376163917U, 1375954799U, 1375744219U, 1375533587U, 1375323067U, 1375111141U, 1374901441U, 1374690479U, 1374476767U, 1374266947U, 1374055327U, 1373845763U, 1373635849U, 1373424677U, 1373214013U, 1373002481U, 1372792661U, 1372582951U, 1372371989U, 1372160681U, 1371951631U, 1371740347U, 1371530051U, 1371317737U, 1371107293U, 1370898161U, 1370689351U, 1370478199U, 1370269447U, 1370059211U, 1369848439U, 1369638217U, 1369428089U, 1369216799U, 1369007459U, 1368795163U, 1368583901U, 1368373793U, 1368162869U, 1367952449U, 1367742331U, 1367532007U, 1367321981U, 1367114009U, 1366899931U, 1366690271U, 1366478059U, 1366267829U, 1366055539U, 1365846239U, 1365637037U, 1365426473U, 1365217783U, 1365005639U, 1364797337U, 1364586019U, 1364374621U, 1364163901U, 1363954373U, 1363745497U, 1363535959U, 1363324243U, 1363115399U, 1362903431U, 1362693061U, 1362483347U, 1362272159U, 1362061843U, 1361852521U, 1361642413U, 1361433547U, 1361222483U, 1361011681U, 1360802489U, 1360590611U, 1360380881U, 1360171817U, 1359961501U, 1359749983U, 1359539257U, 1359328409U, 1359117871U, 1358908721U, 1358698249U, 1358486093U, 1358278799U, 1358066891U, 1357857821U, 1357647553U, 1357437911U, 1357226729U, 1357017223U, 1356807173U, 1356596411U, 1356385637U, 1356176741U, 1355964263U, 1355755039U, 1355545183U, 1355336251U, 1355128459U, 1354919273U, 1354708483U, 1354498751U, 1354287721U, 1354078309U, 1353870257U, 1353661961U, 1353449791U, 1353240853U, 1353029723U, 1352821361U, 1352612003U, 1352403421U, 1352193341U, 1351982417U, 1351771667U, 1351559323U, 1351347821U, 1351136029U, 1350925787U, 1350716659U, 1350507239U, 1350298679U, 1350086779U, 1349874391U, 1349663261U, 1349453851U, 1349244133U, 1349031391U, 1348822213U, 1348612427U, 1348402843U, 1348194559U, 1347983867U, 1347773291U, 1347559459U, 1347350909U, 1347141193U, 1346933207U, 1346723429U, 1346514991U, 1346305277U, 1346093471U, 1345883647U, 1345672399U, 1345461539U, 1345252241U, 1345040321U, 1344829741U, 1344618323U, 1344407489U, 1344196753U, 1343988967U, 1343780203U, 1343568277U, 1343355241U, 1343147083U, 1342937987U, 1342728071U, 1342517987U, 1342307893U, 1342097557U, 1341887003U, 1341675697U, 1341468683U, 1341261511U, 1341050771U, 1340841889U, 1340632757U, 1340423269U, 1340211359U, 1340001323U, 1339791269U, 1339578307U, 1339367231U, 1339154987U, 1338943393U, 1338732971U, 1338525077U, 1338315793U, 1338103777U, 1337891767U, 1337684981U, 1337475847U, 1337265647U, 1337056157U, 1336846079U, 1336636783U, 1336427837U, 1336218349U, 1336009819U, 1335798707U, 1335587749U, 1335378673U, 1335167833U, 1334957387U, 1334748409U, 1334537419U, 1334327461U, 1334118859U, 1333910269U, 1333701917U, 1333489019U, 1333276801U, 1333068907U, 1332859907U, 1332650933U, 1332443591U, 1332235007U, 1332026453U, 1331816303U, 1331608273U, 1331395193U, 1331182871U, 1330972241U, 1330765867U, 1330554023U, 1330343453U, 1330131511U, 1329919051U, 1329708893U, 1329498817U, 1329287497U, 1329079417U, 1328868181U, 1328658781U, 1328450027U, 1328240899U, 1328029309U, 1327816559U, 1327606783U, 1327398283U, 1327186691U, 1326977819U, 1326767693U, 1326556859U, 1326346837U, 1326137347U, 1325926681U, 1325717227U, 1325506499U, 1325296927U, 1325087851U, 1324877819U, 1324667611U, 1324459139U, 1324247699U, 1324035077U, 1323826727U, 1323617293U, 1323406849U, 1323194489U, 1322982083U, 1322772643U, 1322561957U, 1322351603U, 1322140619U, 1321930747U, 1321720937U, 1321512457U, 1321303331U, 1321092109U, 1320882851U, 1320674917U, 1320465659U, 1320254339U, 1320043337U, 1319834357U, 1319625709U, 1319414983U, 1319203747U, 1318993883U, 1318785301U, 1318577279U, 1318366037U, 1318152007U, 1317943181U, 1317732791U, 1317523841U, 1317314303U, 1317103897U, 1316895257U, 1316685211U, 1316474221U, 1316265331U, 1316054891U, 1315843693U, 1315632137U, 1315421413U, 1315208959U, 1314999743U, 1314788777U, 1314578333U, 1314370261U, 1314159463U, 1313949479U, 1313740369U, 1313531839U, 1313319703U, 1313108959U, 1312898203U, 1312688057U, 1312479703U, 1312267717U, 1312058303U, 1311847529U, 1311637417U, 1311426583U, 1311215863U, 1311006553U, 1310797487U, 1310588473U, 1310377987U, 1310168747U, 1309958267U, 1309749391U, 1309539499U, 1309329479U, 1309120567U, 1308910397U, 1308700637U, 1308490721U, 1308281453U, 1308072991U, 1307865961U, 1307656717U, 1307445779U, 1307237363U, 1307026261U, 1306817159U, 1306605631U, 1306395403U, 1306185103U, 1305975263U, 1305767531U, 1305558109U, 1305348797U, 1305139603U, 1304929123U, 1304720051U, 1304511617U, 1304300269U, 1304090467U, 1303881353U, 1303671079U, 1303459217U, 1303250287U, 1303040521U, 1302831029U, 1302621143U, 1302409819U, 1302198973U, 1301989541U, 1301779541U, 1301570293U, 1301362219U, 1301151557U, 1300942213U, 1300732399U, 1300522403U, 1300313351U, 1300106153U, 1299895273U, 1299682561U, 1299472831U, 1299264649U, 1299053519U, 1298843407U, 1298634643U, 1298425393U, 1298213723U, 1298005127U, 1297796261U, 1297585661U, 1297373851U, 1297163779U, 1296953461U, 1296743507U, 1296533111U, 1296323929U, 1296112973U, 1295901839U, 1295691101U, 1295482039U, 1295272897U, 1295060023U, 1294851017U, 1294641659U, 1294429363U, 1294219313U, 1294009729U, 1293800581U, 1293592733U, 1293382037U, 1293171641U, 1292958059U, 1292746541U, 1292537063U, 1292325929U, 1292117027U, 1291908257U, 1291699309U, 1291488907U, 1291281083U, 1291071497U, 1290862493U, 1290651811U, 1290443393U, 1290234571U, 1290025021U, 1289815477U, 1289604307U, 1289395417U, 1289184679U, 1288975997U, 1288766833U, 1288556921U, 1288348429U, 1288138339U, 1287928099U, 1287718339U, 1287505741U, 1287295949U, 1287085523U, 1286875927U, 1286667689U, 1286457461U, 1286249161U, 1286040269U, 1285833047U, 1285623533U, 1285412059U, 1285202393U, 1284992759U, 1284780683U, 1284571111U, 1284360967U, 1284151301U, 1283940841U, 1283732231U, 1283522021U, 1283313019U, 1283104279U, 1282895363U, 1282682057U, 1282472407U, 1282264663U, 1282053103U, 1281842747U, 1281633181U, 1281423527U, 1281213191U, 1281003403U, 1280793589U, 1280583313U, 1280372719U, 1280164439U, 1279955377U, 1279745221U, 1279534447U, 1279326287U, 1279117223U, 1278905813U, 1278698909U, 1278491231U, 1278280687U, 1278070979U, 1277860873U, 1277650267U, 1277440727U, 1277231077U, 1277022427U, 1276813621U, 1276603609U, 1276392329U, 1276182547U, 1275971579U, 1275761801U, 1275553781U, 1275343483U, 1275133991U, 1274922373U, 1274710727U, 1274501663U, 1274294531U, 1274083753U, 1273875037U, 1273665233U, 1273455991U, 1273245527U, 1273035679U, 1272825977U, 1272615397U, 1272407239U, 1272197977U, 1271987671U, 1271776811U, 1271566627U, 1271355739U, 1271148253U, 1270937953U, 1270728527U, 1270517849U, 1270308241U, 1270098527U, 1269886873U, 1269680053U, 1269470837U, 1269262321U, 1269054197U, 1268844481U, 1268635651U, 1268427047U, 1268216891U, 1268006891U, 1267800031U, 1267590887U, 1267381691U, 1267170791U, 1266961207U, 1266754579U, 1266546143U, 1266337901U, 1266129401U, 1265918683U, 1265706697U, 1265496943U, 1265288159U, 1265077771U, 1264869971U, 1264660013U, 1264449523U, 1264238123U, 1264029539U, 1263820993U, 1263611597U, 1263400771U, 1263193111U, 1262981519U, 1262772097U, 1262563301U, 1262354279U, 1262142769U, 1261934431U, 1261723741U, 1261515029U, 1261306933U, 1261099303U, 1260888019U, 1260676409U, 1260468359U, 1260257827U, 1260050257U, 1259839093U, 1259629243U, 1259419391U, 1259210399U, 1259001217U, 1258793857U, 1258585037U, 1258375523U, 1258165679U, 1257955429U, 1257744953U, 1257534881U, 1257325829U, 1257116669U, 1256905073U, 1256695789U, 1256486117U, 1256277961U, 1256067493U, 1255856647U, 1255647719U, 1255437529U, 1255225837U, 1255015369U, 1254806131U, 1254595753U, 1254386789U, 1254178421U, 1253968913U, 1253758447U, 1253548619U, 1253338423U, 1253130479U, 1252923073U, 1252715501U, 1252508093U, 1252297457U, 1252086653U, 1251874859U, 1251664657U, 1251453971U, 1251246587U, 1251037709U, 1250828521U, 1250619481U, 1250410003U, 1250200339U, 1249992089U, 1249782367U, 1249573147U, 1249364279U, 1249156483U, 1248948131U, 1248738089U, 1248528599U, 1248319139U, 1248109439U, 1247902109U, 1247692639U, 1247481349U, 1247271547U, 1247063087U, 1246854223U, 1246645307U, 1246435901U, 1246227581U, 1246018871U, 1245810227U, 1245601571U, 1245392903U, 1245184243U, 1244973703U, 1244765047U, 1244557333U, 1244346863U, 1244135653U, 1243927999U, 1243717823U, 1243509257U, 1243298579U, 1243088681U, 1242879059U, 1242671167U, 1242460357U, 1242246671U, 1242039277U, 1241829913U, 1241620693U, 1241410673U, 1241202409U, 1240991117U, 1240782497U, 1240572649U, 1240363273U, 1240153777U, 1239943217U, 1239734767U, 1239525311U, 1239313181U, 1239103571U, 1238893823U, 1238684219U, 1238472803U, 1238262409U, 1238054203U, 1237844537U, 1237634821U, 1237427551U, 1237217627U, 1237009793U, 1236798539U, 1236589789U, 1236381481U, 1236172387U, 1235964097U, 1235754187U, 1235545853U, 1235335271U, 1235126447U, 1234917487U, 1234708621U, 1234500199U, 1234289923U, 1234080811U, 1233871147U, 1233660019U, 1233451543U, 1233242953U, 1233033727U, 1232823541U, 1232613331U, 1232402621U, 1232193211U, 1231982483U, 1231772611U, 1231562147U, 1231353373U, 1231146467U, 1230937441U, 1230727991U, 1230517793U, 1230311371U, 1230102737U, 1229895523U, 1229684839U, 1229476231U, 1229268809U, 1229059703U, 1228850041U, 1228638493U, 1228429607U, 1228220797U, 1228011221U, 1227800507U, 1227590239U, 1227381409U, 1227172223U, 1226964671U, 1226753419U, 1226542657U, 1226332829U, 1226122453U, 1225911629U, 1225702547U, 1225493051U, 1225282477U, 1225072763U, 1224862213U, 1224653371U, 1224442993U, 1224234727U, 1224025021U, 1223816687U, 1223607443U, 1223398019U, 1223187829U, 1222978951U, 1222770077U, 1222560371U, 1222351069U, 1222142459U, 1221933131U, 1221721819U, 1221514477U, 1221302977U, 1221094829U, 1220885647U, 1220675699U, 1220464283U, 1220254433U, 1220047229U, 1219838999U, 1219629767U, 1219421089U, 1219213297U, 1219005551U, 1218797189U, 1218587507U, 1218377591U, 1218168283U, 1217959759U, 1217750113U, 1217539289U, 1217329511U, 1217123249U, 1216913377U, 1216703687U, 1216494469U, 1216286101U, 1216077211U, 1215867539U, 1215660739U, 1215451949U, 1215241673U, 1215031777U, 1214822281U, 1214612899U, 1214402617U, 1214193439U, 1213983487U, 1213775221U, 1213567811U, 1213358513U, 1213147499U, 1212936583U, 1212727433U, 1212520013U, 1212311081U, 1212103577U, 1211893097U, 1211685161U, 1211473667U, 1211264987U, 1211058197U, 1210849229U, 1210639567U, 1210431389U, 1210221599U, 1210011203U, 1209802301U, 1209594917U, 1209386179U, 1209175673U, 1208967143U, 1208757743U, 1208547889U, 1208338451U, 1208131159U, 1207920361U, 1207710793U, 1207501777U, 1207294171U, 1207084621U, 1206876179U, 1206669041U, 1206459521U, 1206249859U, 1206041953U, 1205831299U, 1205622923U, 1205415979U, 1205207389U, 1204998191U, 1204787341U, 1204578779U, 1204371323U, 1204162783U, 1203951167U, 1203740099U, 1203532607U, 1203322357U, 1203111703U, 1202902793U, 1202693599U, 1202485397U, 1202275051U, 1202065471U, 1201854851U, 1201645231U, 1201434701U, 1201227581U, 1201018723U, 1200811463U, 1200602569U, 1200391783U, 1200182749U, 1199970719U, 1199762611U, 1199552531U, 1199343581U, 1199132707U, 1198924267U, 1198714327U, 1198506821U, 1198298653U, 1198090477U, 1197882457U, 1197674893U, 1197466163U, 1197256231U, 1197048563U, 1196838133U, 1196629429U, 1196420011U, 1196211407U, 1196001601U, 1195792771U, 1195585481U, 1195374319U, 1195164823U, 1194956393U, 1194748517U, 1194540509U, 1194329251U, 1194120047U, 1193911993U, 1193703031U, 1193491619U, 1193283407U, 1193075309U, 1192865567U, 1192657183U, 1192448381U, 1192240703U, 1192030831U, 1191823163U, 1191612913U, 1191402739U, 1191193649U, 1190984173U, 1190775451U, 1190564161U, 1190355941U, 1190148107U, 1189939213U, 1189728121U, 1189519997U, 1189311247U, 1189101713U, 1188892717U, 1188685703U, 1188475777U, 1188268001U, 1188058351U, 1187849153U, 1187640917U, 1187433263U, 1187226367U, 1187015953U, 1186805089U, 1186596007U, 1186388261U, 1186178297U, 1185970603U, 1185761939U, 1185550823U, 1185341567U, 1185133997U, 1184923501U, 1184713903U, 1184506039U, 1184297089U, 1184087273U, 1183878329U, 1183669787U, 1183458817U, 1183250791U, 1183041817U, 1182832331U, 1182623809U, 1182414503U, 1182205709U, 1181997067U, 1181787179U, 1181577517U, 1181368277U, 1181158673U, 1180949249U, 1180738123U, 1180528859U, 1180320989U, 1180111057U, 1179901351U, 1179692753U, 1179482891U, 1179277469U, 1179068017U, 1178859497U, 1178650687U, 1178442443U, 1178232611U, 1178021371U, 1177811227U, 1177601077U, 1177390987U, 1177182557U, 1176975281U, 1176766693U, 1176558433U, 1176348211U, 1176142267U, 1175934349U, 1175724499U, 1175516383U, 1175305661U, 1175096981U, 1174887067U, 1174678643U, 1174471559U, 1174261367U, 1174052647U, 1173844219U, 1173636703U, 1173426931U, 1173217663U, 1173009319U, 1172799917U, 1172590231U, 1172381857U, 1172174807U, 1171965953U, 1171758163U, 1171550299U, 1171342357U, 1171133347U, 1170923531U, 1170715573U, 1170506611U, 1170297743U, 1170087619U, 1169879033U, 1169673629U, 1169464913U, 1169253593U, 1169046509U, 1168837333U, 1168628623U, 1168419073U, 1168211003U, 1168001629U, 1167792499U, 1167582679U, 1167374083U, 1167164641U, 1166955613U, 1166747363U, 1166538743U, 1166330059U, 1166119189U, 1165910633U, 1165703027U, 1165492703U, 1165285949U, 1165078643U, 1164868769U, 1164659869U, 1164451963U, 1164242549U, 1164034369U, 1163827999U, 1163620747U, 1163411423U, 1163203091U, 1162992989U, 1162784431U, 1162574671U, 1162365587U, 1162159013U, 1161950299U, 1161741389U, 1161533117U, 1161327229U, 1161119857U, 1160911247U, 1160702561U, 1160493413U, 1160284217U, 1160074693U, 1159865429U, 1159657883U, 1159447573U, 1159238293U, 1159029413U, 1158821291U, 1158610679U, 1158401791U, 1158192437U, 1157983051U, 1157773979U, 1157566313U, 1157356867U, 1157148761U, 1156940111U, 1156732697U, 1156522207U, 1156314457U, 1156105541U, 1155900293U, 1155689329U, 1155480661U, 1155273419U, 1155064697U, 1154855899U, 1154646653U, 1154436793U, 1154228027U, 1154020729U, 1153810711U, 1153603991U, 1153394663U, 1153187417U, 1152978973U, 1152771073U, 1152563249U, 1152353821U, 1152145993U, 1151938247U, 1151730473U, 1151522587U, 1151315437U, 1151105951U, 1150895927U, 1150688501U, 1150477577U, 1150271407U, 1150063381U, 1149855211U, 1149644887U, 1149437147U, 1149227243U, 1149020567U, 1148810137U, 1148600951U, 1148394769U, 1148185991U, 1147977247U, 1147768847U, 1147562491U, 1147353859U, 1147143593U, 1146933899U, 1146724949U, 1146514861U, 1146306919U, 1146100591U, 1145894003U, 1145683807U, 1145478899U, 1145271119U, 1145060519U, 1144849163U, 1144640489U, 1144431487U, 1144221607U, 1144014493U, 1143805609U, 1143596227U, 1143388151U, 1143178501U, 1142967641U, 1142757263U, 1142548973U, 1142340253U, 1142130797U, 1141922099U, 1141712267U, 1141504339U, 1141295399U, 1141085873U, 1140875789U, 1140666523U, 1140455947U, 1140247531U, 1140040739U, 1139831323U, 1139624011U, 1139414651U, 1139205901U, 1138998829U, 1138789373U, 1138581187U, 1138373713U, 1138165307U, 1137956741U, 1137749777U, 1137543557U, 1137334369U, 1137125887U, 1136915501U, 1136704747U, 1136495683U, 1136285251U, 1136077577U, 1135868191U, 1135660817U, 1135452361U, 1135244809U, 1135035169U, 1134824861U, 1134615437U, 1134406519U, 1134197663U, 1133988629U, 1133778851U, 1133568727U, 1133357807U, 1133149687U, 1132940047U, 1132731473U, 1132524047U, 1132317119U, 1132109567U, 1131901469U, 1131692797U, 1131482159U, 1131273667U, 1131064631U, 1130857417U, 1130648083U, 1130439929U, 1130231803U, 1130021449U, 1129813459U, 1129605619U, 1129394641U, 1129186661U, 1128976669U, 1128768803U, 1128560591U, 1128354179U, 1128145127U, 1127938793U, 1127729279U, 1127520491U, 1127310199U, 1127101757U, 1126891127U, 1126683491U, 1126474469U, 1126268371U, 1126060379U, 1125850861U, 1125645503U, 1125435653U, 1125228911U, 1125019937U, 1124810191U, 1124601029U, 1124391427U, 1124181301U, 1123972217U, 1123763177U, 1123553309U, 1123346023U, 1123136743U, 1122928627U, 1122720967U, 1122511417U, 1122302417U, 1122093737U, 1121887787U, 1121678477U, 1121468987U, 1121263597U, 1121054999U, 1120848263U, 1120639991U, 1120430299U, 1120221979U, 1120012321U, 1119805361U, 1119597139U, 1119388597U, 1119178637U, 1118973001U, 1118764489U, 1118557243U, 1118348449U, 1118141587U, 1117932931U, 1117724207U, 1117513043U, 1117305067U, 1117096891U, 1116887111U, 1116679621U, 1116471449U, 1116262709U, 1116055631U, 1115846243U, 1115635361U, 1115427913U, 1115219251U, 1115012053U, 1114803533U, 1114593659U, 1114385507U, 1114178473U, 1113968143U, 1113762623U, 1113553663U, 1113347029U, 1113138293U, 1112928077U, 1112717911U, 1112509877U, 1112301271U, 1112092691U, 1111885717U, 1111677641U, 1111467271U, 1111260041U, 1111051927U, 1110844181U, 1110635249U, 1110426409U, 1110217847U, 1110008941U, 1109801263U, 1109592233U, 1109383721U, 1109176469U, 1108968821U, 1108760137U, 1108551179U, 1108344191U, 1108137031U, 1107929003U, 1107720883U, 1107514039U, 1107305911U, 1107098303U, 1106892403U, 1106683751U, 1106474197U, 1106265071U, 1106056043U, 1105847839U, 1105639783U, 1105429693U, 1105221853U, 1105013123U, 1104804509U, 1104595663U, 1104387239U, 1104180157U, 1103972567U, 1103765197U, 1103556331U, 1103348461U, 1103142101U, 1102933277U, 1102726543U, 1102519267U, 1102313431U, 1102104473U, 1101895429U, 1101685861U, 1101479651U, 1101268541U, 1101060229U, 1100852899U, 1100645999U, 1100436301U, 1100227207U, 1100018219U, 1099811047U, 1099602997U, 1099393643U, 1099185673U, 1098978599U, 1098770263U, 1098561227U, 1098351797U, 1098144017U, 1097937167U, 1097728157U, 1097520947U, 1097312089U, 1097103767U, 1096897601U, 1096689799U, 1096482011U, 1096274651U, 1096066739U, 1095859199U, 1095650089U, 1095442963U, 1095231623U, 1095024257U, 1094816797U, 1094609557U, 1094398931U, 1094189693U, 1093980971U, 1093770611U, 1093563649U, 1093358719U, 1093150999U, 1092943727U, 1092736243U, 1092527509U, 1092318377U, 1092112319U, 1091904797U, 1091696719U, 1091489419U, 1091281019U, 1091072471U, 1090864699U, 1090656817U, 1090447843U, 1090240531U, 1090031741U, 1089824773U, 1089618017U, 1089409109U, 1089200053U, 1088991263U, 1088783723U, 1088576893U, 1088365753U, 1088157073U, 1087948157U, 1087740917U, 1087532689U, 1087324613U, 1087118537U, 1086911729U, 1086703643U, 1086495727U, 1086288169U, 1086080651U, 1085870603U, 1085664887U, 1085456423U, 1085247697U, 1085038519U, 1084833017U, 1084624049U, 1084416631U, 1084208351U, 1084001693U, 1083793349U, 1083585871U, 1083377047U, 1083170471U, 1082963663U, 1082756149U, 1082546651U, 1082338427U, 1082131829U, 1081924471U, 1081716761U, 1081511393U, 1081303913U, 1081096957U, 1080887629U, 1080678889U, 1080469007U, 1080262063U, 1080055027U, 1079847971U, 1079640707U, 1079432869U, 1079223599U, 1079014879U, 1078808681U, 1078599227U, 1078390589U, 1078182643U, 1077975377U, 1077768583U, 1077558403U, 1077350501U, 1077143029U, 1076934251U, 1076724241U, 1076518097U, 1076309501U, 1076101567U, 1075893557U, 1075684787U, 1075475461U, 1075267649U, 1075058701U, 1074849661U, 1074641677U, 1074432679U, 1074225577U, 1074019853U, 1073811041U, 1073601887U, 1073392231U, 1073184083U, 1072976483U, 1072767901U, 1072560497U, 1072351633U, 1072144147U, 1071935113U, 1071728831U, 1071520193U, 1071314423U, 1071105181U, 1070897921U, 1070692321U, 1070484431U, 1070277881U, 1070069713U, 1069861379U, 1069652459U, 1069443377U, 1069236671U, 1069029323U, 1068821141U, 1068613543U, 1068406421U, 1068198277U, 1067990419U, 1067782787U, 1067575109U, 1067369003U, 1067160917U, 1066953301U, 1066746419U, 1066536941U, 1066330519U, 1066124239U, 1065916381U, 1065710047U, 1065502043U, 1065293909U, 1065085093U, 1064875531U, 1064669233U, 1064464769U, 1064256913U, 1064052889U, 1063841941U, 1063634183U, 1063429519U, 1063220489U, 1063011779U, 1062803279U, 1062594389U, 1062385393U, 1062178993U, 1061971153U, 1061765231U, 1061557109U, 1061348021U, 1061139697U, 1060931147U, 1060724087U, 1060514333U, 1060306607U, 1060098943U, 1059890033U, 1059683543U, 1059476063U, 1059268699U, 1059058799U, 1058851631U, 1058644291U, 1058437243U, 1058228651U, 1058022887U, 1057815553U, 1057607189U, 1057398107U, 1057191097U, 1056981413U, 1056774827U, 1056567443U, 1056358829U, 1056150707U, 1055942477U, 1055735311U, 1055524109U, 1055317657U, 1055108851U, 1054899821U, 1054691531U, 1054482683U, 1054276051U, 1054070753U, 1053861643U, 1053652829U, 1053443057U, 1053235811U, 1053029443U, 1052820511U, 1052613781U, 1052407277U, 1052201207U, 1051991939U, 1051782857U, 1051575347U, 1051368133U, 1051161451U, 1050953941U, 1050747079U, 1050538583U, 1050331537U, 1050123911U, 1049915177U, 1049708141U, 1049499391U, 1049291899U, 1049084801U, 1048875713U, 1048666351U, 1048459133U, 1048250167U, 1048043951U, 1047834761U, 1047627271U, 1047418517U, 1047210709U, 1047002123U, 1046793551U, 1046584937U, 1046377229U, 1046170379U, 1045963277U, 1045755479U, 1045548289U, 1045341391U, 1045131757U, 1044923059U, 1044714707U, 1044506663U, 1044299353U, 1044089779U, 1043881469U, 1043675887U, 1043468333U, 1043259947U, 1043052079U, 1042842733U, 1042636327U, 1042430009U, 1042222837U, 1042014559U, 1041806749U, 1041601129U, 1041395071U, 1041186929U, 1040977403U, 1040770943U, 1040561549U, 1040352769U, 1040148119U, 1039940617U, 1039734901U, 1039527631U, 1039319389U, 1039112171U, 1038904313U, 1038697459U, 1038489227U, 1038281971U, 1038076063U, 1037869297U, 1037660693U, 1037454337U, 1037245081U, 1037036801U, 1036830203U, 1036622537U, 1036418689U, 1036209221U, 1036001821U, 1035793637U, 1035585337U, 1035377579U, 1035169859U, 1034963477U, 1034755889U, 1034547919U, 1034339519U, 1034133439U, 1033926133U, 1033718393U, 1033508219U, 1033301741U, 1033093891U, 1032883727U, 1032675671U, 1032468491U, 1032261277U, 1032053389U, 1031846441U, 1031638939U, 1031432029U, 1031222191U, 1031015443U, 1030807237U, 1030602227U, 1030394653U, 1030187299U, 1029978863U, 1029770507U, 1029562477U, 1029356557U, 1029149479U, 1028943049U, 1028736311U, 1028526439U, 1028322089U, 1028114587U, 1027905079U, 1027698571U, 1027491097U, 1027281383U, 1027072499U, 1026864593U, 1026655111U, 1026449509U, 1026242017U, 1026034411U, 1025827493U, 1025619773U, 1025412833U, 1025205917U, 1024998553U, 1024790993U, 1024585409U, 1024377589U, 1024170479U, 1023963079U, 1023754891U, 1023546973U, 1023340459U, 1023130879U, 1022924689U, 1022717417U, 1022509559U, 1022303539U, 1022093477U, 1021885679U, 1021678703U, 1021470403U, 1021262609U, 1021056017U, 1020847343U, 1020639803U, 1020432683U, 1020225047U, 1020020171U, 1019812693U, 1019606831U, 1019398117U, 1019190233U, 1018982821U, 1018775161U, 1018567057U, 1018358507U, 1018151209U, 1017944381U, 1017736241U, 1017530897U, 1017324137U, 1017116063U, 1016908021U, 1016700959U, 1016493871U, 1016286463U, 1016078939U, 1015870729U, 1015663459U, 1015456751U, 1015249799U, 1015043849U, 1014837041U, 1014630109U, 1014424841U, 1014216271U, 1014010013U, 1013804111U, 1013594851U, 1013387113U, 1013179397U, 1012969481U, 1012763077U, 1012555567U, 1012347803U, 1012140301U, 1011933803U, 1011728813U, 1011522041U, 1011312689U, 1011105943U, 1010899103U, 1010691037U, 1010484037U, 1010277799U, 1010068273U, 1009863587U, 1009654741U, 1009449401U, 1009242103U, 1009035059U, 1008826657U, 1008617111U, 1008409531U, 1008202501U, 1007995843U, 1007786251U, 1007579669U, 1007371847U, 1007167529U, 1006961783U, 1006755119U, 1006546817U, 1006337861U, 1006130189U, 1005921529U, 1005714239U, 1005508093U, 1005301811U, 1005096139U, 1004888011U, 1004681233U, 1004475079U, 1004267977U, 1004061257U, 1003852589U, 1003647949U, 1003439069U, 1003232161U, 1003024067U, 1002817859U, 1002610171U, 1002403361U, 1002194651U, 1001986877U, 1001778803U, 1001571667U, 1001364493U, 1001156677U, 1000951957U, 1000744669U, 1000537129U, 1000327297U, 1000119983U, 999912523U, 999703801U, 999493673U, 999286423U, 999078749U, 998871407U, 998664533U, 998458471U, 998253203U, 998046109U, 997839767U, 997633313U, 997426693U, 997218899U, 997011133U, 996803813U, 996597577U, 996390223U, 996183359U, 995977547U, 995770397U, 995562409U, 995354803U, 995146829U, 994941529U, 994735051U, 994527539U, 994320137U, 994113697U, 993907393U, 993698323U, 993491119U, 993282299U, 993076549U, 992870051U, 992663029U, 992455333U, 992248849U, 992042297U, 991833253U, 991624423U, 991417409U, 991211311U, 991005881U, 990798979U, 990592243U, 990385157U, 990176959U, 989971237U, 989762567U, 989556467U, 989348963U, 989142277U, 988934563U, 988729121U, 988519901U, 988313663U, 988104911U, 987897461U, 987692201U, 987484747U, 987276473U, 987069637U, 986861357U, 986656057U, 986450291U, 986242583U, 986034559U, 985828897U, 985620491U, 985413613U, 985208027U, 984999641U, 984793639U, 984586049U, 984379723U, 984171319U, 983966077U, 983761687U, 983554151U, 983347199U, 983139727U, 982933051U, 982728209U, 982520449U, 982314679U, 982108307U, 981899161U, 981692263U, 981484789U, 981277889U, 981072341U, 980865359U, 980657081U, 980449601U, 980242871U, 980035361U, 979828741U, 979620721U, 979413271U, 979206149U, 979000333U, 978793337U, 978582823U, 978378091U, 978170003U, 977962343U, 977755951U, 977548213U, 977341201U, 977134861U, 976928089U, 976721873U, 976515613U, 976308323U, 976101821U, 975892903U, 975685771U, 975477911U, 975270103U, 975063059U, 974856133U, 974650109U, 974441773U, 974234951U, 974027363U, 973819969U, 973612897U, 973407217U, 973200797U, 972991693U, 972783767U, 972575189U, 972370271U, 972161327U, 971955211U, 971747593U, 971541997U, 971334241U, 971126231U, 970917953U, 970712653U, 970504793U, 970298893U, 970093193U, 969885979U, 969678383U, 969471989U, 969264253U, 969059699U, 968852399U, 968645647U, 968438519U, 968231983U, 968024059U, 967817281U, 967613329U, 967406161U, 967197743U, 966990467U, 966783197U, 966577459U, 966369473U, 966164629U, 965956177U, 965746939U, 965540179U, 965333641U, 965127589U, 964920427U, 964712663U, 964505779U, 964297351U, 964090601U, 963884557U, 963679721U, 963472667U, 963264233U, 963057677U, 962851469U, 962644237U, 962439397U, 962233927U, 962026067U, 961818331U, 961609657U, 961402753U, 961196113U, 960989921U, 960783503U, 960575053U, 960369671U, 960164357U, 959958569U, 959751467U, 959545339U, 959337787U, 959132063U, 958927643U, 958719757U, 958513207U, 958308079U, 958099903U, 957892121U, 957686003U, 957479813U, 957274463U, 957070073U, 956863231U, 956656499U, 956450219U, 956243017U, 956035967U, 955827647U, 955619213U, 955411801U, 955206139U, 955000157U, 954793003U, 954587419U, 954379667U, 954173333U, 953967467U, 953761241U, 953554561U, 953347751U, 953141549U, 952936403U, 952729321U, 952522433U, 952313891U, 952108571U, 951902069U, 951695267U, 951487843U, 951281183U, 951072641U, 950867891U, 950659939U, 950453393U, 950245817U, 950038891U, 949831711U, 949624163U, 949418621U, 949210631U, 949004237U, 948797947U, 948590129U, 948383503U, 948176329U, 947969749U, 947762281U, 947557529U, 947350549U, 947146309U, 946941377U, 946733339U, 946525397U, 946319123U, 946112749U, 945906653U, 945699767U, 945493957U, 945286103U, 945079393U, 944872997U, 944666137U, 944457727U, 944251129U, 944045093U, 943841623U, 943634413U, 943428457U, 943221553U, 943014223U, 942807059U, 942599201U, 942394279U, 942186577U, 941980649U, 941770757U, 941565017U, 941358941U, 941153023U, 940944761U, 940739473U, 940534457U, 940328141U, 940121129U, 939914237U, 939707311U, 939498481U, 939290711U, 939083969U, 938877299U, 938670497U, 938463313U, 938256743U, 938050571U, 937843117U, 937635403U, 937430023U, 937224481U, 937017241U, 936808751U, 936602551U, 936393247U, 936187487U, 935980187U, 935774839U, 935568223U, 935362513U, 935157149U, 934950433U, 934744141U, 934538333U, 934332799U, 934125721U, 933915907U, 933712601U, 933505961U, 933298987U, 933094187U, 932887321U, 932682197U, 932474657U, 932268949U, 932062069U, 931853539U, 931648031U, 931441501U, 931235729U, 931028831U, 930822023U, 930615799U, 930410359U, 930203363U, 929997377U, 929791073U, 929583461U, 929378647U, 929171809U, 928961563U, 928753213U, 928546337U, 928340111U, 928133047U, 927927431U, 927719873U, 927511327U, 927303313U, 927097819U, 926891057U, 926683861U, 926476429U, 926272069U, 926065423U, 925858279U, 925653983U, 925447087U, 925239961U, 925034359U, 924827639U, 924620899U, 924415159U, 924208093U, 924001801U, 923795833U, 923589143U, 923381033U, 923174653U, 922968353U, 922762307U, 922554167U, 922346597U, 922140283U, 921933101U, 921726833U, 921521323U, 921314491U, 921104917U, 920900389U, 920696473U, 920488883U, 920284241U, 920077003U, 919871549U, 919665931U, 919461089U, 919253327U, 919047611U, 918843181U, 918636781U, 918431209U, 918225853U, 918018929U, 917810801U, 917602223U, 917395903U, 917188477U, 916982489U, 916774951U, 916568707U, 916361893U, 916156721U, 915951917U, 915745531U, 915540091U, 915333547U, 915126503U, 914921417U, 914715511U, 914509529U, 914303749U, 914097449U, 913892719U, 913684151U, 913479859U, 913271237U, 913061893U, 912856787U, 912650659U, 912447581U, 912239071U, 912033929U, 911828861U, 911623931U, 911416811U, 911211313U, 911004803U, 910799521U, 910594129U, 910388137U, 910180189U, 909975103U, 909769517U, 909564301U, 909358363U, 909154039U, 908950027U, 908742859U, 908536289U, 908330999U, 908122427U, 907915453U, 907709161U, 907504669U, 907298807U, 907092811U, 906888161U, 906681863U, 906477373U, 906270719U, 906063619U, 905857787U, 905652047U, 905446649U, 905241457U, 905037937U, 904830643U, 904624129U, 904412191U, 904207417U, 904001689U, 903795047U, 903589319U, 903382463U, 903178417U, 902973857U, 902767081U, 902558269U, 902351161U, 902142887U, 901935031U, 901729561U, 901524121U, 901318051U, 901111439U, 900906637U, 900700831U, 900494867U, 900290857U, 900084401U, 899879263U, 899671099U, 899463869U, 899258387U, 899051437U, 898845781U, 898638131U, 898431239U, 898226999U, 898020311U, 897812969U, 897607853U, 897401333U, 897194827U, 896988797U, 896782561U, 896575313U, 896370289U, 896163013U, 895955897U, 895751147U, 895544131U, 895337041U, 895131739U, 894924157U, 894717371U, 894511207U, 894304603U, 894098801U, 893892721U, 893686333U, 893479253U, 893273831U, 893069227U, 892863337U, 892659133U, 892455203U, 892249121U, 892042433U, 891836821U, 891629833U, 891421211U, 891214297U, 891007393U, 890801147U, 890593727U, 890387999U, 890182673U, 889977527U, 889771829U, 889565387U, 889357043U, 889151611U, 888944711U, 888738751U, 888533159U, 888326333U, 888119311U, 887913683U, 887710319U, 887504369U, 887298869U, 887092457U, 886885721U, 886678853U, 886474403U, 886268503U, 886062503U, 885857129U, 885650761U, 885443579U, 885236993U, 885030703U, 884822867U, 884615929U, 884409923U, 884205199U, 883998877U, 883793107U, 883588081U, 883380077U, 883172489U, 882967091U, 882760639U, 882556957U, 882351131U, 882144853U, 881939497U, 881732437U, 881527169U, 881321641U, 881116981U, 880910321U, 880702661U, 880495237U, 880288337U, 880082239U, 879875501U, 879669793U, 879464407U, 879258439U, 879051493U, 878846819U, 878642081U, 878436607U, 878230709U, 878025917U, 877819699U, 877613479U, 877406449U, 877200449U, 876993101U, 876786593U, 876580267U, 876375277U, 876167623U, 875960333U, 875755271U, 875547059U, 875341081U, 875133761U, 874927159U, 874724077U, 874517923U, 874312423U, 874106309U, 873900127U, 873692717U, 873487577U, 873282323U, 873076363U, 872872051U, 872667931U, 872461297U, 872252947U, 872048687U, 871843979U, 871637411U, 871431779U, 871224707U, 871016617U, 870810277U, 870604591U, 870398107U, 870193447U, 869988349U, 869782429U, 869579747U, 869372099U, 869166061U, 868958539U, 868754771U, 868548341U, 868343237U, 868135109U, 867930487U, 867723991U, 867518711U, 867314957U, 867109753U, 866904347U, 866699791U, 866493643U, 866287339U, 866080493U, 865873159U, 865665811U, 865460467U, 865256173U, 865051073U, 864844751U, 864638191U, 864434687U, 864229549U, 864024071U, 863818961U, 863613349U, 863408839U, 863200651U, 862995349U, 862789141U, 862584491U, 862376869U, 862173199U, 861967571U, 861759439U, 861555043U, 861350729U, 861143057U, 860938087U, 860732359U, 860524417U, 860319727U, 860112137U, 859906457U, 859700689U, 859493447U, 859285943U, 859078879U, 858872177U, 858667783U, 858462079U, 858257021U, 858050153U, 857845171U, 857641481U, 857434343U, 857229661U, 857021821U, 856815683U, 856610141U, 856403957U, 856197857U, 855991243U, 855787067U, 855580549U, 855376927U, 855170389U, 854963783U, 854759743U, 854554699U, 854348233U, 854142089U, 853936907U, 853731059U, 853526381U, 853322969U, 853117247U, 852910259U, 852705479U, 852499171U, 852292559U, 852088277U, 851882099U, 851674477U, 851469019U, 851264669U, 851057611U, 850851587U, 850646939U, 850441219U, 850233557U, 850027799U, 849822679U, 849618937U, 849412657U, 849206053U, 849000613U, 848795179U, 848593357U, 848389111U, 848183599U, 847977167U, 847770809U, 847565239U, 847359661U, 847153661U, 846946957U, 846740357U, 846533267U, 846328151U, 846122219U, 845917427U, 845711719U, 845507317U, 845300191U, 845093831U, 844888931U, 844684639U, 844476407U, 844270619U, 844064857U, 843857627U, 843651791U, 843446467U, 843243067U, 843038501U, 842832899U, 842629639U, 842424053U, 842217149U, 842013313U, 841808101U, 841604131U, 841399711U, 841190411U, 840984299U, 840779671U, 840573443U, 840368603U, 840162481U, 839958013U, 839751259U, 839547497U, 839344031U, 839137381U, 838930861U, 838723777U, 838515877U, 838312229U, 838108081U, 837905749U, 837700639U, 837495367U, 837289603U, 837084181U, 836877871U, 836671211U, 836468057U, 836260973U, 836056369U, 835849453U, 835644737U, 835437937U, 835233631U, 835027631U, 834821531U, 834617561U, 834413053U, 834207961U, 834001559U, 833795381U, 833590399U, 833388103U, 833180779U, 832975837U, 832771883U, 832566463U, 832361093U, 832154209U, 831950087U, 831745181U, 831538217U, 831331097U, 831128377U, 830922097U, 830714711U, 830510453U, 830306963U, 830101141U, 829895009U, 829689409U, 829481797U, 829277191U, 829072877U, 828868163U, 828661567U, 828457241U, 828252463U, 828047761U, 827842021U, 827636519U, 827429737U, 827225387U, 827019359U, 826814369U, 826608259U, 826403551U, 826198921U, 825992749U, 825787181U, 825582193U, 825377621U, 825173177U, 824968519U, 824762513U, 824555269U, 824349683U, 824142367U, 823937089U, 823731899U, 823527623U, 823323491U, 823117289U, 822911773U, 822704539U, 822498949U, 822298387U, 822092333U, 821884897U, 821679041U, 821473817U, 821267743U, 821060567U, 820857749U, 820652309U, 820449247U, 820243231U, 820038239U, 819832337U, 819626957U, 819422881U, 819216481U, 819009029U, 818804929U, 818600191U, 818395423U, 818188193U, 817983277U, 817775953U, 817571851U, 817365001U, 817161731U, 816957101U, 816754249U, 816547183U, 816342731U, 816137629U, 815932811U, 815728063U, 815525041U, 815320771U, 815114593U, 814909063U, 814704377U, 814499137U, 814294979U, 814090049U, 813884047U, 813678431U, 813473777U, 813266687U, 813062197U, 812858303U, 812653463U, 812444767U, 812240867U, 812035387U, 811829387U, 811623677U, 811416707U, 811210409U, 811006307U, 810802211U, 810597041U, 810391237U, 810187129U, 809982451U, 809777047U, 809570357U, 809367527U, 809162383U, 808957727U, 808753609U, 808548869U, 808343827U, 808138619U, 807933043U, 807728011U, 807520933U, 807315097U, 807110879U, 806906183U, 806700733U, 806496791U, 806292649U, 806087551U, 805883863U, 805677811U, 805473197U, 805269511U, 805063621U, 804860167U, 804656609U, 804452377U, 804248353U, 804043717U, 803837729U, 803632777U, 803427617U, 803222543U, 803016983U, 802811783U, 802605607U, 802398869U, 802193299U, 801988721U, 801783091U, 801576833U, 801372301U, 801170593U, 800964947U, 800759837U, 800555507U, 800349989U, 800145637U, 799941431U, 799735591U, 799530211U, 799321723U, 799115183U, 798908287U, 798702907U, 798498577U, 798294529U, 798091429U, 797886301U, 797683489U, 797478323U, 797274593U, 797070173U, 796866731U, 796663463U, 796458079U, 796253543U, 796047509U, 795843017U, 795637589U, 795433099U, 795228689U, 795024343U, 794818757U, 794611771U, 794405483U, 794201981U, 793996361U, 793791871U, 793589521U, 793383473U, 793175657U, 792971173U, 792767303U, 792562187U, 792356891U, 792152663U, 791946361U, 791741987U, 791537057U, 791331511U, 791127121U, 790921451U, 790715449U, 790512449U, 790309699U, 790103269U, 789898783U, 789696023U, 789491359U, 789286541U, 789083311U, 788879213U, 788676593U, 788471473U, 788266363U, 788060909U, 787855697U, 787649867U, 787445047U, 787238801U, 787033469U, 786827917U, 786623683U, 786418057U, 786213613U, 786009541U, 785805851U, 785602429U, 785397241U, 785192389U, 784987867U, 784784137U, 784580513U, 784374709U, 784168753U, 783964201U, 783759491U, 783556097U, 783350957U, 783146677U, 782942621U, 782737691U, 782533847U, 782329189U, 782124271U, 781920047U, 781716347U, 781508461U, 781306091U, 781102481U, 780898067U, 780693167U, 780489373U, 780281669U, 780078977U, 779874761U, 779670799U, 779465539U, 779259721U, 779055377U, 778850389U, 778646443U, 778439353U, 778234753U, 778029961U, 777825071U, 777620797U, 777415897U, 777212977U, 777008467U, 776805607U, 776599469U, 776394529U, 776188249U, 775983587U, 775778981U, 775571197U, 775363819U, 775160839U, 774958963U, 774755101U, 774549131U, 774344911U, 774139987U, 773935823U, 773731103U, 773525183U, 773320489U, 773114789U, 772908407U, 772703273U, 772499641U, 772296299U, 772091959U, 771888739U, 771682333U, 771478817U, 771274909U, 771069413U, 770866417U, 770659819U, 770457361U, 770251723U, 770047417U, 769842737U, 769639153U, 769435741U, 769230353U, 769026721U, 768821993U, 768617809U, 768415003U, 768209993U, 768005369U, 767801081U, 767596649U, 767392177U, 767188109U, 766984861U, 766780723U, 766577017U, 766370587U, 766165427U, 765960827U, 765755923U, 765551887U, 765346807U, 765140107U, 764934101U, 764729831U, 764524559U, 764318081U, 764113409U, 763908421U, 763702871U, 763496977U, 763292863U, 763085441U, 762881213U, 762677887U, 762472883U, 762269491U, 762066233U, 761861773U, 761656757U, 761454761U, 761250397U, 761045281U, 760841267U, 760636241U, 760431571U, 760227421U, 760022563U, 759818119U, 759613373U, 759409121U, 759205961U, 759002147U, 758797409U, 758590351U, 758386777U, 758180999U, 757974431U, 757770557U, 757563913U, 757360343U, 757155391U, 756951557U, 756745879U, 756541993U, 756335977U, 756132043U, 755928577U, 755725219U, 755522717U, 755318411U, 755117449U, 754911943U, 754708613U, 754505491U, 754301363U, 754096429U, 753891353U, 753686273U, 753478769U, 753274433U, 753071041U, 752863843U, 752659769U, 752454491U, 752252723U, 752047913U, 751843847U, 751641613U, 751436113U, 751231693U, 751027219U, 750820591U, 750617599U, 750413071U, 750209107U, 750002681U, 749799353U, 749596063U, 749390321U, 749187239U, 748983497U, 748777097U, 748570727U, 748365781U, 748161493U, 747956771U, 747753049U, 747549137U, 747345839U, 747141341U, 746936653U, 746730653U, 746525287U, 746319589U, 746115709U, 745910587U, 745706963U, 745500979U, 745297621U, 745091561U, 744887953U, 744681803U, 744478247U, 744274087U, 744070963U, 743866531U, 743660123U, 743455499U, 743252057U, 743046131U, 742841441U, 742636201U, 742430959U, 742227581U, 742023407U, 741819343U, 741614831U, 741412043U, 741210733U, 741006107U, 740802157U, 740599147U, 740395081U, 740190901U, 739986479U, 739783483U, 739579301U, 739376173U, 739172509U, 738967561U, 738763513U, 738560629U, 738354811U, 738150871U, 737948891U, 737742631U, 737539013U, 737333279U, 737130917U, 736926341U, 736721627U, 736518637U, 736313399U, 736107901U, 735905449U, 735701039U, 735498311U, 735292559U, 735087839U, 734883719U, 734680031U, 734475019U, 734270261U, 734066527U, 733863617U, 733658491U, 733451969U, 733248409U, 733045849U, 732842687U, 732637471U, 732431977U, 732227963U, 732024677U, 731820107U, 731616659U, 731410013U, 731206789U, 731003699U, 730800157U, 730597859U, 730392911U, 730186241U, 729983159U, 729778739U, 729572989U, 729367999U, 729164873U, 728958179U, 728752537U, 728547713U, 728343281U, 728139547U, 727934741U, 727731241U, 727527331U, 727325023U, 727122239U, 726918719U, 726714731U, 726508303U, 726304021U, 726100841U, 725896487U, 725691401U, 725488607U, 725283917U, 725079499U, 724872257U, 724670717U, 724465921U, 724262933U, 724059107U, 723855389U, 723651367U, 723447541U, 723243071U, 723040919U, 722835679U, 722632091U, 722430077U, 722225747U, 722022241U, 721818211U, 721614809U, 721411309U, 721206137U, 721001899U, 720798943U, 720594737U, 720394001U, 720189739U, 719985113U, 719779663U, 719574659U, 719370763U, 719168381U, 718965557U, 718759667U, 718557457U, 718352377U, 718147487U, 717944737U, 717741457U, 717537397U, 717333257U, 717129419U, 716926489U, 716723647U, 716518147U, 716314759U, 716110303U, 715906249U, 715701733U, 715496503U, 715293221U, 715088713U, 714884113U, 714679831U, 714473567U, 714269599U, 714065827U, 713862659U, 713657779U, 713453441U, 713248951U, 713045633U, 712842859U, 712636681U, 712433479U, 712230031U, 712028087U, 711824431U, 711620251U, 711416557U, 711212743U, 711009647U, 710806249U, 710602241U, 710397929U, 710193521U, 709987973U, 709784423U, 709579397U, 709375097U, 709173313U, 708971059U, 708766621U, 708560641U, 708357941U, 708154789U, 707951423U, 707747771U, 707544449U, 707340901U, 707136037U, 706933907U, 706729477U, 706526057U, 706322767U, 706119229U, 705915263U, 705708581U, 705507211U, 705303433U, 705098729U, 704896967U, 704689123U, 704485543U, 704283677U, 704081153U, 703877453U, 703673827U, 703469479U, 703265593U, 703061603U, 702857261U, 702652763U, 702450323U, 702246911U, 702042587U, 701839483U, 701635811U, 701431931U, 701230391U, 701026709U, 700824233U, 700619299U, 700414969U, 700211597U, 700008041U, 699803639U, 699601703U, 699396107U, 699192971U, 698990321U, 698784601U, 698583167U, 698379893U, 698174573U, 697969771U, 697766647U, 697562161U, 697358087U, 697153277U, 696948883U, 696745613U, 696541897U, 696337199U, 696132923U, 695930063U, 695727287U, 695524421U, 695321987U, 695118793U, 694915033U, 694713121U, 694510799U, 694308409U, 694103749U, 693902189U, 693697861U, 693495707U, 693290693U, 693086063U, 692880593U, 692676043U, 692471839U, 692267629U, 692066027U, 691860787U, 691654427U, 691452701U, 691248563U, 691046197U, 690843497U, 690640073U, 690436451U, 690233857U, 690031691U, 689827861U, 689626391U, 689421461U, 689218693U, 689016061U, 688813313U, 688608259U, 688404593U, 688201453U, 688000597U, 687794941U, 687591491U, 687387941U, 687185729U, 686981179U, 686778749U, 686575619U, 686372573U, 686170627U, 685965883U, 685763807U, 685561589U, 685358743U, 685152973U, 684952267U, 684749539U, 684546301U, 684343783U, 684139223U, 683937043U, 683733839U, 683530657U, 683328223U, 683124397U, 682920827U, 682714943U, 682511183U, 682309351U, 682103599U, 681899051U, 681696179U, 681493469U, 681289709U, 681085721U, 680882903U, 680679397U, 680471927U, 680270299U, 680065777U, 679861867U, 679660061U, 679456607U, 679253357U, 679050059U, 678847717U, 678642989U, 678440069U, 678236347U, 678035641U, 677830873U, 677628803U, 677424799U, 677220611U, 677016947U, 676812611U, 676609151U, 676406209U, 676201349U, 675997891U, 675795247U, 675590893U, 675387701U, 675183583U, 674978831U, 674776187U, 674572439U, 674370167U, 674165113U, 673961681U, 673757599U, 673553927U, 673350653U, 673147133U, 672945331U, 672743177U, 672540733U, 672338573U, 672133181U, 671930689U, 671727011U, 671523233U, 671318261U, 671115199U, 670911421U, 670709293U, 670506917U, 670302641U, 670101259U, 669897967U, 669694541U, 669491029U, 669287683U, 669083971U, 668881069U, 668676179U, 668472397U, 668270507U, 668068201U, 667863941U, 667658281U, 667455779U, 667252673U, 667049989U, 666846907U, 666644311U, 666440711U, 666237587U, 666033439U, 665831629U, 665628493U, 665425433U, 665220097U, 665019863U, 664815269U, 664610027U, 664406489U, 664204199U, 663999913U, 663797773U, 663594973U, 663391571U, 663189217U, 662985991U, 662781139U, 662578771U, 662376301U, 662173163U, 661970923U, 661766587U, 661564117U, 661360867U, 661158109U, 660956579U, 660753323U, 660550507U, 660347899U, 660143741U, 659941621U, 659737963U, 659535911U, 659332409U, 659131883U, 658928773U, 658726249U, 658522097U, 658318981U, 658115791U, 657911473U, 657709483U, 657506237U, 657303599U, 657101573U, 656898113U, 656695649U, 656493203U, 656289511U, 656086637U, 655885333U, 655683869U, 655477967U, 655274233U, 655071191U, 654867817U, 654663497U, 654460787U, 654256483U, 654053731U, 653852063U, 653650927U, 653448149U, 653244967U, 653042101U, 652837447U, 652635847U, 652434457U, 652230121U, 652026413U, 651823261U, 651619429U, 651414263U, 651213137U, 651010247U, 650806159U, 650604349U, 650401841U, 650199787U, 649998353U, 649795441U, 649591843U, 649389071U, 649186823U, 648983471U, 648779801U, 648576407U, 648375163U, 648172121U, 647967751U, 647766323U, 647563951U, 647360759U, 647158151U, 646956643U, 646751759U, 646549147U, 646347641U, 646142711U, 645940591U, 645738493U, 645535757U, 645336379U, 645133271U, 644930747U, 644725849U, 644524271U, 644320097U, 644116379U, 643912121U, 643709431U, 643507399U, 643302419U, 643098277U, 642895997U, 642692101U, 642490577U, 642287293U, 642084581U, 641879369U, 641675651U, 641473507U, 641272769U, 641068943U, 640865791U, 640663691U, 640461149U, 640258441U, 640056797U, 639853933U, 639651763U, 639448993U, 639245209U, 639043667U, 638841017U, 638636197U, 638432797U, 638230627U, 638028499U, 637825693U, 637622473U, 637419509U, 637218331U, 637014737U, 636813649U, 636611513U, 636407791U, 636204119U, 636002737U, 635801591U, 635599907U, 635397629U, 635193677U, 634989863U, 634789277U, 634586243U, 634382291U, 634179061U, 633977947U, 633775931U, 633574021U, 633367927U, 633164879U, 632962807U, 632759377U, 632555153U, 632351501U, 632150209U, 631946437U, 631743881U, 631540807U, 631339997U, 631139219U, 630934589U, 630731029U, 630527089U, 630324089U, 630122813U, 629920561U, 629717899U, 629513603U, 629311447U, 629108819U, 628907117U, 628703701U, 628502051U, 628298389U, 628095469U, 627893857U, 627691369U, 627491489U, 627289417U, 627087541U, 626884411U, 626682481U, 626481029U, 626279263U, 626075917U, 625873021U, 625669463U, 625467991U, 625264193U, 625060103U, 624858583U, 624656741U, 624453941U, 624251627U, 624049919U, 623848559U, 623644843U, 623442283U, 623240573U, 623038027U, 622835881U, 622632193U, 622429267U, 622225393U, 622024201U, 621821443U, 621618353U, 621416293U, 621213811U, 621010913U, 620807219U, 620605273U, 620404303U, 620202071U, 619998289U, 619795069U, 619594111U, 619392973U, 619191751U, 618987839U, 618784261U, 618581881U, 618380407U, 618179491U, 617976509U, 617775247U, 617572051U, 617364289U, 617162387U, 616957969U, 616754869U, 616551841U, 616350121U, 616148317U, 615943327U, 615740759U, 615539033U, 615337127U, 615132989U, 614932831U, 614733143U, 614529679U, 614325851U, 614124109U, 613920361U, 613718159U, 613514249U, 613312057U, 613110397U, 612910351U, 612707237U, 612504667U, 612304261U, 612103909U, 611900753U, 611698123U, 611496157U, 611294227U, 611090479U, 610887731U, 610683587U, 610480919U, 610280401U, 610078039U, 609876131U, 609674269U, 609471799U, 609269761U, 609066739U, 608862853U, 608660761U, 608456423U, 608255107U, 608053217U, 607852319U, 607649767U, 607446799U, 607245157U, 607042897U, 606840127U, 606637931U, 606436657U, 606232813U, 606032149U, 605830289U, 605626213U, 605422177U, 605219947U, 605016959U, 604813397U, 604610459U, 604408589U, 604206847U, 604006127U, 603805283U, 603604933U, 603403301U, 603202087U, 603001453U, 602798479U, 602596451U, 602394857U, 602192561U, 601991009U, 601786813U, 601586017U, 601384957U, 601182587U, 600980227U, 600778547U, 600576233U, 600374387U, 600172591U, 599971679U, 599769923U, 599566883U, 599363221U, 599161111U, 598958683U, 598756549U, 598555813U, 598352719U, 598150877U, 597947153U, 597745297U, 597541999U, 597337567U, 597136207U, 596934421U, 596732161U, 596529809U, 596328263U, 596126887U, 595926047U, 595726231U, 595525477U, 595323367U, 595123103U, 594920329U, 594717373U, 594516499U, 594314507U, 594112087U, 593912741U, 593711309U, 593508803U, 593308451U, 593103053U, 592900741U, 592698257U, 592494193U, 592293173U, 592091407U, 591888067U, 591687923U, 591486463U, 591284051U, 591082729U, 590883119U, 590681459U, 590480369U, 590278001U, 590076283U, 589874573U, 589674193U, 589472339U, 589270849U, 589070381U, 588870313U, 588669443U, 588464057U, 588263561U, 588060061U, 587857031U, 587654689U, 587452897U, 587251337U, 587049017U, 586846721U, 586644491U, 586443799U, 586242571U, 586040383U, 585835819U, 585633127U, 585433627U, 585230879U, 585029329U, 584826139U, 584624393U, 584422913U, 584219341U, 584015989U, 583814299U, 583611703U, 583411267U, 583210997U, 583007807U, 582807571U, 582605579U, 582405001U, 582205361U, 582002873U, 581798431U, 581597867U, 581397871U, 581194717U, 580991603U, 580790069U, 580589203U, 580387013U, 580186129U, 579982621U, 579781781U, 579578579U, 579376393U, 579178037U, 578976389U, 578773919U, 578570711U, 578369717U, 578169673U, 577965979U, 577763447U, 577562731U, 577360717U, 577158581U, 576956839U, 576754333U, 576554747U, 576354287U, 576152683U, 575949761U, 575748139U, 575545297U, 575344691U, 575141939U, 574940273U, 574739071U, 574537841U, 574335733U, 574132697U, 573930839U, 573729197U, 573527359U, 573326459U, 573124847U, 572923643U, 572722207U, 572520763U, 572320277U, 572119133U, 571917083U, 571714459U, 571514039U, 571312447U, 571109333U, 570908267U, 570706163U, 570505211U, 570302011U, 570100901U, 569899741U, 569695739U, 569494903U, 569292637U, 569090791U, 568890131U, 568688333U, 568486201U, 568285241U, 568083853U, 567883439U, 567682277U, 567480181U, 567278477U, 567075389U, 566876873U, 566672047U, 566471351U, 566269831U, 566067713U, 565866193U, 565665403U, 565463131U, 565261157U, 565060669U, 564859157U, 564657833U, 564456637U, 564253399U, 564050923U, 563849423U, 563648951U, 563446757U, 563245951U, 563043527U, 562844081U, 562640021U, 562439363U, 562237279U, 562037263U, 561836309U, 561636739U, 561436591U, 561233341U, 561031321U, 560827517U, 560628337U, 560425741U, 560224517U, 560023267U, 559821347U, 559619603U, 559418737U, 559216529U, 559013027U, 558812473U, 558611803U, 558408817U, 558207941U, 558007081U, 557807857U, 557605397U, 557403169U, 557203447U, 557001349U, 556799281U, 556595849U, 556396177U, 556194521U, 555994253U, 555791333U, 555590479U, 555389213U, 555186431U, 554986511U, 554785073U, 554584267U, 554380919U, 554178277U, 553976713U, 553776191U, 553572707U, 553372213U, 553172117U, 552972401U, 552771497U, 552570311U, 552369217U, 552167767U, 551967211U, 551766811U, 551565811U, 551364811U, 551162357U, 550961809U, 550761137U, 550560139U, 550358761U, 550159567U, 549958901U, 549757049U, 549557549U, 549356981U, 549155773U, 548954101U, 548752109U, 548551309U, 548349407U, 548149279U, 547949123U, 547747367U, 547545563U, 547344871U, 547145353U, 546945383U, 546744547U, 546542723U, 546340393U, 546138457U, 545937809U, 545735521U, 545535997U, 545334311U, 545133191U, 544932499U, 544732439U, 544530967U, 544329011U, 544127197U, 543926419U, 543724817U, 543523769U, 543322561U, 543119747U, 542918149U, 542717267U, 542513899U, 542313859U, 542112257U, 541910729U, 541709111U, 541507361U, 541304821U, 541103399U, 540902563U, 540701129U, 540501653U, 540301187U, 540098873U, 539897623U, 539694797U, 539494807U, 539294407U, 539095981U, 538892941U, 538692157U, 538491649U, 538288771U, 538087817U, 537887657U, 537687739U, 537487169U, 537284981U, 537083843U, 536882651U, 536681611U, 536479873U, 536280743U, 536080177U, 535880399U, 535676699U, 535475179U, 535275227U, 535076489U, 534877139U, 534675809U, 534475439U, 534273799U, 534072523U, 533871847U, 533669711U, 533467969U, 533268401U, 533066321U, 532865881U, 532665751U, 532465837U, 532263973U, 532062943U, 531863203U, 531661121U, 531460661U, 531258587U, 531058793U, 530857277U, 530654587U, 530453389U, 530251793U, 530050559U, 529850803U, 529650467U, 529450759U, 529250581U, 529048207U, 528848687U, 528646109U, 528445363U, 528244949U, 528043793U, 527843429U, 527644543U, 527442943U, 527244271U, 527042909U, 526841269U, 526640363U, 526441231U, 526241101U, 526040443U, 525839239U, 525638411U, 525434137U, 525234989U, 525033917U, 524833663U, 524631677U, 524432423U, 524231369U, 524029361U, 523831199U, 523626899U, 523425431U, 523225741U, 523026701U, 522826373U, 522627043U, 522427067U, 522224917U, 522023401U, 521821427U, 521621959U, 521422549U, 521221067U, 521019319U, 520817963U, 520616627U, 520416683U, 520213721U, 520012981U, 519811693U, 519612167U, 519410641U, 519212537U, 519010183U, 518809799U, 518610613U, 518408963U, 518208749U, 518007229U, 517808209U, 517608347U, 517408183U, 517207921U, 517005949U, 516805997U, 516604573U, 516406013U, 516207467U, 516008153U, 515806139U, 515604629U, 515405351U, 515204141U, 515003767U, 514802657U, 514601641U, 514400261U, 514198963U, 513997249U, 513796343U, 513594311U, 513394933U, 513194443U, 512993147U, 512791793U, 512591657U, 512391179U, 512189567U, 511989869U, 511791689U, 511592533U, 511390471U, 511189741U, 510988547U, 510785537U, 510583921U, 510382417U, 510182483U, 509981909U, 509779393U, 509577611U, 509376979U, 509178223U, 508978709U, 508776343U, 508576129U, 508377131U, 508175669U, 507974827U, 507776117U, 507575839U, 507374239U, 507172243U, 506971207U, 506771051U, 506569117U, 506371009U, 506169997U, 505970363U, 505771171U, 505568621U, 505370287U, 505167449U, 504965723U, 504765221U, 504565993U, 504363793U, 504162943U, 503962243U, 503761499U, 503562671U, 503362183U, 503161073U, 502963723U, 502760147U, 502557053U, 502358569U, 502157779U, 501955921U, 501757211U, 501555529U, 501353029U, 501151003U, 500950243U, 500749423U, 500548927U, 500349547U, 500150419U, 499949237U, 499748027U, 499548073U, 499348043U, 499148371U, 498946183U, 498744937U, 498544243U, 498344221U, 498145331U, 497944339U, 497742803U, 497542301U, 497342597U, 497142461U, 496944137U, 496743421U, 496542467U, 496342559U, 496141033U, 495942431U, 495744017U, 495541757U, 495342109U, 495144467U, 494944381U, 494744039U, 494544251U, 494343253U, 494142589U, 493941887U, 493744421U, 493544963U, 493343107U, 493144049U, 492942053U, 492741779U, 492543169U, 492340843U, 492142411U, 491941981U, 491741039U, 491539963U, 491339879U, 491139391U, 490939979U, 490739591U, 490540991U, 490338143U, 490138709U, 489939733U, 489741347U, 489539027U, 489340637U, 489141589U, 488941511U, 488740841U, 488539937U, 488338727U, 488139371U, 487937057U, 487738711U, 487538809U, 487339261U, 487140481U, 486937639U, 486736531U, 486537329U, 486338273U, 486136883U, 485937509U, 485738203U, 485538127U, 485337989U, 485140349U, 484937711U, 484737509U, 484536757U, 484336837U, 484137497U, 483939971U, 483737039U, 483537449U, 483337639U, 483138653U, 482938283U, 482739253U, 482538299U, 482338403U, 482138263U, 481938917U, 481736617U, 481536409U, 481337513U, 481137857U, 480937759U, 480739001U, 480537581U, 480336917U, 480136567U, 479938223U, 479737619U, 479539097U, 479339183U, 479141059U, 478942067U, 478741559U, 478542703U, 478340857U, 478142449U, 477944321U, 477743977U, 477546011U, 477347399U, 477147521U, 476947259U, 476747641U, 476548901U, 476348827U, 476150273U, 475948013U, 475750589U, 475551379U, 475352797U, 475150409U, 474949693U, 474751171U, 474549793U, 474348517U, 474147491U, 473949131U, 473748619U, 473548253U, 473348831U, 473147219U, 472948547U, 472747463U, 472547989U, 472347287U, 472145659U, 471945917U, 471748649U, 471548069U, 471348961U, 471149207U, 470950153U, 470748791U, 470549347U, 470351477U, 470150717U, 469952341U, 469751767U, 469551091U, 469352539U, 469151213U, 468950203U, 468751051U, 468552247U, 468353461U, 468152129U, 467952377U, 467754227U, 467555227U, 467355353U, 467156101U, 466955911U, 466757003U, 466556239U, 466357963U, 466158311U, 465959267U, 465760007U, 465561557U, 465360937U, 465161383U, 464962279U, 464762321U, 464563501U, 464362757U, 464163571U, 463962397U, 463764967U, 463564469U, 463364893U, 463166261U, 462966761U, 462766189U, 462569413U, 462372247U, 462170981U, 461971409U, 461772973U, 461573053U, 461372407U, 461172953U, 460973837U, 460773757U, 460575421U, 460375787U, 460175531U, 459975463U, 459775529U, 459576269U, 459375529U, 459176827U, 458978837U, 458778251U, 458579623U, 458378449U, 458179201U, 457980247U, 457780087U, 457579873U, 457380149U, 457179883U, 456978043U, 456778277U, 456580403U, 456382621U, 456183779U, 455983999U, 455784811U, 455587133U, 455387473U, 455190709U, 454989583U, 454790839U, 454592141U, 454393207U, 454192829U, 453991639U, 453792349U, 453594863U, 453395477U, 453195317U, 452997271U, 452797781U, 452598371U, 452398861U, 452198111U, 451999063U, 451798381U, 451599991U, 451401329U, 451203043U, 451003369U, 450804311U, 450605033U, 450406111U, 450207323U, 450005779U, 449805127U, 449607377U, 449408263U, 449210183U, 449009257U, 448811263U, 448610651U, 448410961U, 448211779U, 448012727U, 447814069U, 447614969U, 447417629U, 447219607U, 447018653U, 446819507U, 446619211U, 446420999U, 446222983U, 446025029U, 445823501U, 445625413U, 445426213U, 445225961U, 445026437U, 444825617U, 444626759U, 444429047U, 444229369U, 444030101U, 443829811U, 443630137U, 443431517U, 443232901U, 443033827U, 442834741U, 442637519U, 442437967U, 442240273U, 442041881U, 441842741U, 441643283U, 441444281U, 441245989U, 441046421U, 440848217U, 440650913U, 440452801U, 440253907U, 440054633U, 439853749U, 439654013U, 439457189U, 439257359U, 439056533U, 438858703U, 438659831U, 438462467U, 438263159U, 438064609U, 437865427U, 437666947U, 437466863U, 437268773U, 437068847U, 436868449U, 436670497U, 436471037U, 436273589U, 436074449U, 435875689U, 435675841U, 435478531U, 435278447U, 435078181U, 434878967U, 434679697U, 434481449U, 434283781U, 434085941U, 433886129U, 433689709U, 433489633U, 433289327U, 433091431U, 432890333U, 432691601U, 432492787U, 432294497U, 432094483U, 431894923U, 431696873U, 431497559U, 431296277U, 431098417U, 430900109U, 430702603U, 430503809U, 430302787U, 430105099U, 429906679U, 429707029U, 429509417U, 429310421U, 429109423U, 428910857U, 428711483U, 428511703U, 428314927U, 428117311U, 427918651U, 427719401U, 427521481U, 427322989U, 427123111U, 426925133U, 426724349U, 426525871U, 426326893U, 426127813U, 425928799U, 425728997U, 425533403U, 425334583U, 425135617U, 424936537U, 424737011U, 424541581U, 424343551U, 424146511U, 423946121U, 423748387U, 423548303U, 423351671U, 423152069U, 422954933U, 422755831U, 422557453U, 422359213U, 422158339U, 421960291U, 421763827U, 421563733U, 421366151U, 421167689U, 420969389U, 420769309U, 420572881U, 420375001U, 420176611U, 419976331U, 419776127U, 419578361U, 419379509U, 419179603U, 418979641U, 418780897U, 418582277U, 418383109U, 418183849U, 417986473U, 417785383U, 417587249U, 417388949U, 417191617U, 416992963U, 416794331U, 416597381U, 416398579U, 416200951U, 416001809U, 415803473U, 415603697U, 415405307U, 415207843U, 415009589U, 414810257U, 414610699U, 414413353U, 414215677U, 414018053U, 413818421U, 413621567U, 413423687U, 413225717U, 413026183U, 412828747U, 412631039U, 412431941U, 412232773U, 412034221U, 411835729U, 411636413U, 411439513U, 411240233U, 411042397U, 410843287U, 410646013U, 410449189U, 410249803U, 410050819U, 409853333U, 409656281U, 409458463U, 409258793U, 409058711U, 408860971U, 408664187U, 408464179U, 408266189U, 408065837U, 407867311U, 407669081U, 407471927U, 407271439U, 407073881U, 406877249U, 406679659U, 406479001U, 406280117U, 406082849U, 405884041U, 405687781U, 405490279U, 405291479U, 405093827U, 404895737U, 404697413U, 404499299U, 404301481U, 404102047U, 403904159U, 403705843U, 403507213U, 403310881U, 403112621U, 402915971U, 402715903U, 402517751U, 402320783U, 402121381U, 401923957U, 401724599U, 401528717U, 401332213U, 401131697U, 400931189U, 400733779U, 400535969U, 400336843U, 400139683U, 399941057U, 399744157U, 399547763U, 399350779U, 399152113U, 398954053U, 398755499U, 398555467U, 398357359U, 398159819U, 397961419U, 397764043U, 397567669U, 397369877U, 397171807U, 396973267U, 396774629U, 396577301U, 396379943U, 396181067U, 395980789U, 395781667U, 395584159U, 395385007U, 395188181U, 394990331U, 394794503U, 394596827U, 394396969U, 394198813U, 394002709U, 393804911U, 393606827U, 393408269U, 393210053U, 393009401U, 392811593U, 392612743U, 392415109U, 392218621U, 392022847U, 391824457U, 391626553U, 391429637U, 391231889U, 391033793U, 390835553U, 390637921U, 390441223U, 390241699U, 390042449U, 389843183U, 389645681U, 389447621U, 389248823U, 389052439U, 388855781U, 388656199U, 388459307U, 388259567U, 388061561U, 387864629U, 387667837U, 387469879U, 387272381U, 387076399U, 386878507U, 386682287U, 386482841U, 386284729U, 386088091U, 385888673U, 385690637U, 385492399U, 385295177U, 385097183U, 384897481U, 384702599U, 384503279U, 384303877U, 384105457U, 383910119U, 383710697U, 383513033U, 383314843U, 383118283U, 382920323U, 382722091U, 382526117U, 382327081U, 382131317U, 381932543U, 381733871U, 381536263U, 381339001U, 381141713U, 380943287U, 380745119U, 380549473U, 380353643U, 380155829U, 379959787U, 379761233U, 379564693U, 379368433U, 379169093U, 378972059U, 378774973U, 378576661U, 378379069U, 378181577U, 377986579U, 377790331U, 377593961U, 377396317U, 377199353U, 377001491U, 376804807U, 376607597U, 376412041U, 376214897U, 376016687U, 375818951U, 375622451U, 375423943U, 375226717U, 375030277U, 374835067U, 374637187U, 374441663U, 374245843U, 374049421U, 373850149U, 373652611U, 373455721U, 373259041U, 373061153U, 372865313U, 372666439U, 372467983U, 372269861U, 372073027U, 371875487U, 371679949U, 371481403U, 371284019U, 371087051U, 370890119U, 370690913U, 370493017U, 370294313U, 370097443U, 369899443U, 369703973U, 369505193U, 369307739U, 369109889U, 368911969U, 368714663U, 368517571U, 368320279U, 368120243U, 367923209U, 367726043U, 367529347U, 367332887U, 367135781U, 366938617U, 366741209U, 366543559U, 366347753U, 366149503U, 365955307U, 365756527U, 365558581U, 365363857U, 365166587U, 364970513U, 364773737U, 364575859U, 364377521U, 364179511U, 363983131U, 363785197U, 363588817U, 363390553U, 363195181U, 362999201U, 362803139U, 362604239U, 362406371U, 362210389U, 362014487U, 361815557U, 361619017U, 361423003U, 361226137U, 361028461U, 360832673U, 360635521U, 360439447U, 360240187U, 360040679U, 359842253U, 359645311U, 359447687U, 359249707U, 359052313U, 358858273U, 358661063U, 358463939U, 358266409U, 358068593U, 357872413U, 357675007U, 357478169U, 357280499U, 357083897U, 356885869U, 356688811U, 356492189U, 356295151U, 356098751U, 355901947U, 355704463U, 355507771U, 355309891U, 355114247U, 354917833U, 354720913U, 354523361U, 354326381U, 354130529U, 353933969U, 353737781U, 353539999U, 353342723U, 353145461U, 352948801U, 352753501U, 352555993U, 352360607U, 352163509U, 351967027U, 351769367U, 351572531U, 351374641U, 351177149U, 350980813U, 350785063U, 350585953U, 350388953U, 350192669U, 349996081U, 349801069U, 349605001U, 349408399U, 349212121U, 349017743U, 348820009U, 348624013U, 348426301U, 348229087U, 348031709U, 347834699U, 347637391U, 347439167U, 347242471U, 347044981U, 346849813U, 346652567U, 346454621U, 346257913U, 346061753U, 345865753U, 345669557U, 345473837U, 345275929U, 345078781U, 344882101U, 344684033U, 344488973U, 344292059U, 344097217U, 343898977U, 343703963U, 343508807U, 343311377U, 343115831U, 342919721U, 342722383U, 342523879U, 342328037U, 342131789U, 341935313U, 341738809U, 341541943U, 341347519U, 341150387U, 340953829U, 340757311U, 340561127U, 340364267U, 340168667U, 339974029U, 339778027U, 339582403U, 339384623U, 339187153U, 338991377U, 338796769U, 338599637U, 338403323U, 338206987U, 338010899U, 337813561U, 337615627U, 337419529U, 337223017U, 337028317U, 336830243U, 336634169U, 336437867U, 336240617U, 336046489U, 335848273U, 335650519U, 335451937U, 335257631U, 335061379U, 334866143U, 334671119U, 334475023U, 334278407U, 334081999U, 333885493U, 333689641U, 333493817U, 333295159U, 333099301U, 332902267U, 332708333U, 332513537U, 332317099U, 332121589U, 331923899U, 331726243U, 331530721U, 331334567U, 331139597U, 330943961U, 330746777U, 330549281U, 330353497U, 330155801U, 329958217U, 329761063U, 329565997U, 329372503U, 329175647U, 328979237U, 328784177U, 328586053U, 328389337U, 328193059U, 327995519U, 327800741U, 327605669U, 327410011U, 327213077U, 327017179U, 326821853U, 326623663U, 326428433U, 326231999U, 326037541U, 325842991U, 325645601U, 325448521U, 325253213U, 325057771U, 324862957U, 324666421U, 324471799U, 324273199U, 324076547U, 323881451U, 323686007U, 323491559U, 323294771U, 323098057U, 322903201U, 322706641U, 322510327U, 322315337U, 322119839U, 321923383U, 321727409U, 321530717U, 321333583U, 321137129U, 320941081U, 320744891U, 320551463U, 320355521U, 320159297U, 319962779U, 319766467U, 319571167U, 319375031U, 319180403U, 318982711U, 318785903U, 318589429U, 318393197U, 318196201U, 318000107U, 317805539U, 317609239U, 317414249U, 317218159U, 317021557U, 316825007U, 316630189U, 316434571U, 316240933U, 316042729U, 315846803U, 315650969U, 315456887U, 315260969U, 315064801U, 314867783U, 314671963U, 314475647U, 314281483U, 314084747U, 313889507U, 313693873U, 313499171U, 313301939U, 313106369U, 312911791U, 312714757U, 312520513U, 312326171U, 312130883U, 311935249U, 311740393U, 311544097U, 311348537U, 311150603U, 310954757U, 310760423U, 310565063U, 310367201U, 310172567U, 309976889U, 309780833U, 309585277U, 309390391U, 309194843U, 308999861U, 308803367U, 308608061U, 308414591U, 308219759U, 308025181U, 307831889U, 307635407U, 307438961U, 307243633U, 307049789U, 306853601U, 306659321U, 306462509U, 306268327U, 306071489U, 305877857U, 305682331U, 305488069U, 305293357U, 305095501U, 304900741U, 304706543U, 304511563U, 304317733U, 304123049U, 303926687U, 303730639U, 303533579U, 303337841U, 303142717U, 302947639U, 302751403U, 302556227U, 302360789U, 302164789U, 301969669U, 301774477U, 301578371U, 301384009U, 301189789U, 300993977U, 300799193U, 300604537U, 300409147U, 300214097U, 300018991U, 299824153U, 299630267U, 299435627U, 299240393U, 299045213U, 298849277U, 298652239U, 298456597U, 298263409U, 298066163U, 297872719U, 297677909U, 297481843U, 297285559U, 297091783U, 296897011U, 296700601U, 296505931U, 296311601U, 296116567U, 295921999U, 295726633U, 295531559U, 295336793U, 295140841U, 294942679U, 294748271U, 294553247U, 294359101U, 294165023U, 293968579U, 293776391U, 293581697U, 293386861U, 293190439U, 292996973U, 292800799U, 292605169U, 292409519U, 292215767U, 292021063U, 291827639U, 291633949U, 291437387U, 291242587U, 291048767U, 290854877U, 290661247U, 290463907U, 290269211U, 290071961U, 289876151U, 289683391U, 289489001U, 289295263U, 289099033U, 288904207U, 288709153U, 288515441U, 288322451U, 288125489U, 287931167U, 287736619U, 287540761U, 287346179U, 287151391U, 286959503U, 286764607U, 286568573U, 286374031U, 286178987U, 285983519U, 285789107U, 285594181U, 285399307U, 285205703U, 285008237U, 284812981U, 284618359U, 284422013U, 284227513U, 284032559U, 283836739U, 283642439U, 283449623U, 283255697U, 283058701U, 282864317U, 282669041U, 282475181U, 282280811U, 282085339U, 281889917U, 281695201U, 281500633U, 281306489U, 281113423U, 280918579U, 280723097U, 280528693U, 280334149U, 280141241U, 279946393U, 279751027U, 279560293U, 279365003U, 279170747U, 278975017U, 278780989U, 278585389U, 278389271U, 278195611U, 278001011U, 277805389U, 277611193U, 277419089U, 277225111U, 277029673U, 276835171U, 276644429U, 276448457U, 276252617U, 276058423U, 275863681U, 275669291U, 275475751U, 275281729U, 275088881U, 274894013U, 274697779U, 274504193U, 274310441U, 274117891U, 273924907U, 273730747U, 273535697U, 273342491U, 273147961U, 272953697U, 272758777U, 272564821U, 272371163U, 272178229U, 271982563U, 271787753U, 271595333U, 271400323U, 271206511U, 271009061U, 270814079U, 270619381U, 270427243U, 270232243U, 270036869U, 269844067U, 269647501U, 269451593U, 269257223U, 269063869U, 268870291U, 268676921U, 268483349U, 268290353U, 268094273U, 267900641U, 267707107U, 267513931U, 267318967U, 267123811U, 266929331U, 266735921U, 266541529U, 266344789U, 266149801U, 265955761U, 265762681U, 265568717U, 265376333U, 265184369U, 264990793U, 264798371U, 264604061U, 264408223U, 264215219U, 264021649U, 263825923U, 263631391U, 263435899U, 263239267U, 263046703U, 262852531U, 262658387U, 262464793U, 262271809U, 262080089U, 261886379U, 261692357U, 261498031U, 261306077U, 261112427U, 260918267U, 260725741U, 260532791U, 260338409U, 260144699U, 259950673U, 259756537U, 259560409U, 259367083U, 259174913U, 258980681U, 258786469U, 258593123U, 258399347U, 258205139U, 258011459U, 257818237U, 257623973U, 257431091U, 257237641U, 257044279U, 256853161U, 256658621U, 256462571U, 256266811U, 256073957U, 255879553U, 255687011U, 255493417U, 255301757U, 255107311U, 254913271U, 254719727U, 254527073U, 254334673U, 254141203U, 253946449U, 253754503U, 253559893U, 253366097U, 253173623U, 252979483U, 252786907U, 252591419U, 252398903U, 252204389U, 252012149U, 251819627U, 251622391U, 251429363U, 251237071U, 251043629U, 250851683U, 250658201U, 250465169U, 250271443U, 250077787U, 249883757U, 249690719U, 249497777U, 249303823U, 249110591U, 248917909U, 248722577U, 248531111U, 248338187U, 248146201U, 247953331U, 247759651U, 247565719U, 247371941U, 247179193U, 246985139U, 246791761U, 246598217U, 246406241U, 246212237U, 246018317U, 245824157U, 245630933U, 245437499U, 245244113U, 245050829U, 244859389U, 244669351U, 244476997U, 244284641U, 244092203U, 243896459U, 243703637U, 243509891U, 243316207U, 243123827U, 242930803U, 242737823U, 242542541U, 242349871U, 242155003U, 241962229U, 241768279U, 241573951U, 241381463U, 241187647U, 240994267U, 240802189U, 240609661U, 240417691U, 240225439U, 240033793U, 239840473U, 239647459U, 239455163U, 239262083U, 239068651U, 238874029U, 238681423U, 238488847U, 238295927U, 238103737U, 237912613U, 237719497U, 237528143U, 237335599U, 237142793U, 236950423U, 236759689U, 236566277U, 236372723U, 236180239U, 235988591U, 235796063U, 235601153U, 235409131U, 235218167U, 235025429U, 234833069U, 234642053U, 234449203U, 234255401U, 234063703U, 233870243U, 233675419U, 233483567U, 233289703U, 233095871U, 232901521U, 232711207U, 232517699U, 232323913U, 232130593U, 231937631U, 231744913U, 231553181U, 231360061U, 231167999U, 230975573U, 230782369U, 230591323U, 230400697U, 230206813U, 230014139U, 229822447U, 229631383U, 229437889U, 229244651U, 229050709U, 228859753U, 228667319U, 228474931U, 228283373U, 228091951U, 227898883U, 227705561U, 227510263U, 227318057U, 227125973U, 226933331U, 226741129U, 226549201U, 226356973U, 226164139U, 225972629U, 225781723U, 225588239U, 225395087U, 225201127U, 225008657U, 224817499U, 224623351U, 224430487U, 224238809U, 224047783U, 223854737U, 223660903U, 223470251U, 223278821U, 223088597U, 222898021U, 222703603U, 222513397U, 222320779U, 222128581U, 221936789U, 221745649U, 221553767U, 221359997U, 221169271U, 220977649U, 220785023U, 220592791U, 220400603U, 220207301U, 220014643U, 219822851U, 219630181U, 219437957U, 219245029U, 219053453U, 218861609U, 218669813U, 218477293U, 218283259U, 218092937U, 217902037U, 217708723U, 217515989U, 217323787U, 217133011U, 216939881U, 216748201U, 216554441U, 216362941U, 216171331U, 215979851U, 215787829U, 215595199U, 215402939U, 215211307U, 215019767U, 214829773U, 214638997U, 214447763U, 214255211U, 214063807U, 213871681U, 213679183U, 213484949U, 213293911U, 213101849U, 212911249U, 212719163U, 212526101U, 212335061U, 212143537U, 211951819U, 211758037U, 211566871U, 211375777U, 211184881U, 210993641U, 210801817U, 210609337U, 210416527U, 210224867U, 210032651U, 209840663U, 209650703U, 209460331U, 209269979U, 209078249U, 208885571U, 208694699U, 208503187U, 208309727U, 208118389U, 207925591U, 207734029U, 207542903U, 207352543U, 207161509U, 206968849U, 206778353U, 206587259U, 206395493U, 206205443U, 206012971U, 205821611U, 205629667U, 205438339U, 205246957U, 205056107U, 204863557U, 204673607U, 204481997U, 204291247U, 204098737U, 203907721U, 203717797U, 203524921U, 203334251U, 203142649U, 202952569U, 202762199U, 202569253U, 202376893U, 202185367U, 201993299U, 201804233U, 201612913U, 201420629U, 201230069U, 201038863U, 200847253U, 200655667U, 200466187U, 200271727U, 200082481U, 199893791U, 199701701U, 199509859U, 199319431U, 199128547U, 198937253U, 198745559U, 198554557U, 198365039U, 198174583U, 197981587U, 197790517U, 197598103U, 197405587U, 197214601U, 197022479U, 196832221U, 196641343U, 196450417U, 196258003U, 196065559U, 195875749U, 195684091U, 195493957U, 195301861U, 195110033U, 194920021U, 194730253U, 194538937U, 194348221U, 194157839U, 193967047U, 193777123U, 193586951U, 193397299U, 193205863U, 193014079U, 192823493U, 192634577U, 192444121U, 192253307U, 192063899U, 191872073U, 191680613U, 191488183U, 191296309U, 191105209U, 190913759U, 190722271U, 190531303U, 190340209U, 190148869U, 189959467U, 189768749U, 189578791U, 189386867U, 189195871U, 189006953U, 188817067U, 188626177U, 188434369U, 188243597U, 188051989U, 187862693U, 187672487U, 187479947U, 187290289U, 187101599U, 186909721U, 186718979U, 186529927U, 186340093U, 186149101U, 185957879U, 185767973U, 185576759U, 185386519U, 185196007U, 185006201U, 184815809U, 184626997U, 184437511U, 184248707U, 184057999U, 183868519U, 183677189U, 183489073U, 183299393U, 183108421U, 182919001U, 182726549U, 182535739U, 182343781U, 182154179U, 181962689U, 181771903U, 181582549U, 181390861U, 181200457U, 181010399U, 180818789U, 180628141U, 180437107U, 180246329U, 180056753U, 179865403U, 179677123U, 179488103U, 179298667U, 179108591U, 178917853U, 178729183U, 178538917U, 178348147U, 178156337U, 177967877U, 177779429U, 177589199U, 177399011U, 177208567U, 177020047U, 176829997U, 176641147U, 176450971U, 176261209U, 176070889U, 175881457U, 175690829U, 175501171U, 175312391U, 175124483U, 174934229U, 174744569U, 174553387U, 174362887U, 174173123U, 173984141U, 173793853U, 173603611U, 173414587U, 173225827U, 173036407U, 172846613U, 172655837U, 172466647U, 172276381U, 172087627U, 171897619U, 171708997U, 171518131U, 171328837U, 171140153U, 170951563U, 170762941U, 170571809U, 170381957U, 170191919U, 170004691U, 169814977U, 169624019U, 169434773U, 169248449U, 169058089U, 168869417U, 168679261U, 168490577U, 168301619U, 168112519U, 167921771U, 167733523U, 167543461U, 167355193U, 167165281U, 166977197U, 166787039U, 166597537U, 166409207U, 166221217U, 166031297U, 165842861U, 165653129U, 165462509U, 165272743U, 165083201U, 164893327U, 164702893U, 164514887U, 164325341U, 164135749U, 163945493U, 163758097U, 163569001U, 163380533U, 163193077U, 163003367U, 162815113U, 162625381U, 162435659U, 162247079U, 162058889U, 161868769U, 161679187U, 161490583U, 161299297U, 161109331U, 160920703U, 160733017U, 160544453U, 160355989U, 160166753U, 159978367U, 159790819U, 159601727U, 159412639U, 159223517U, 159034937U, 158847659U, 158657761U, 158466983U, 158277827U, 158087929U, 157899923U, 157711129U, 157521739U, 157333247U, 157144913U, 156955559U, 156766583U, 156578579U, 156389789U, 156200969U, 156012877U, 155824663U, 155635999U, 155449181U, 155259329U, 155071097U, 154882151U, 154692103U, 154504913U, 154316737U, 154127989U, 153937877U, 153750617U, 153563087U, 153374737U, 153184901U, 152998253U, 152808611U, 152622137U, 152433731U, 152244559U, 152054831U, 151864819U, 151676659U, 151488713U, 151299593U, 151112447U, 150922319U, 150734347U, 150543803U, 150355943U, 150167639U, 149979413U, 149790647U, 149602613U, 149414519U, 149226059U, 149036633U, 148848053U, 148660459U, 148473037U, 148284233U, 148095697U, 147908051U, 147719849U, 147530927U, 147342497U, 147154583U, 146967131U, 146779973U, 146592161U, 146404283U, 146215987U, 146028829U, 145840997U, 145653953U, 145465849U, 145277879U, 145088759U, 144900647U, 144710743U, 144522883U, 144335641U, 144148133U, 143960009U, 143772731U, 143584663U, 143397817U, 143211583U, 143023403U, 142836769U, 142649069U, 142460501U, 142273903U, 142086817U, 141901079U, 141713353U, 141526009U, 141337631U, 141150731U, 140963029U, 140773079U, 140585771U, 140397097U, 140208613U, 140020883U, 139833637U, 139647301U, 139459559U, 139273223U, 139084727U, 138896581U, 138710941U, 138523223U, 138335569U, 138146971U, 137958407U, 137770219U, 137581757U, 137396477U, 137209543U, 137020991U, 136832713U, 136645373U, 136459727U, 136273777U, 136085947U, 135898517U, 135710527U, 135521381U, 135334181U, 135146093U, 134959613U, 134773459U, 134586799U, 134399621U, 134213483U, 134026553U, 133838149U, 133651027U, 133462151U, 133276543U, 133087957U, 132901367U, 132714497U, 132526507U, 132339761U, 132152729U, 131965111U, 131777039U, 131591081U, 131403011U, 131217089U, 131030267U, 130844327U, 130658131U, 130471373U, 130284131U, 130096721U, 129908039U, 129720413U, 129533941U, 129348269U, 129161959U, 128974297U, 128787667U, 128603047U, 128417117U, 128229061U, 128042461U, 127856539U, 127670819U, 127482731U, 127296359U, 127108343U, 126923837U, 126736237U, 126549919U, 126363241U, 126176537U, 125990521U, 125804839U, 125619577U, 125431459U, 125245501U, 125059483U, 124873351U, 124686977U, 124499801U, 124313051U, 124128931U, 123941581U, 123756023U, 123570427U, 123384229U, 123198661U, 123012431U, 122825713U, 122640377U, 122453621U, 122265487U, 122079197U, 121893817U, 121707613U, 121521013U, 121334561U, 121148387U, 120964253U, 120777233U, 120590153U, 120403117U, 120216113U, 120030817U, 119846431U, 119659843U, 119473723U, 119288087U, 119101837U, 118913621U, 118726159U, 118540469U, 118355789U, 118168691U, 117983309U, 117797447U, 117610693U, 117426377U, 117239467U, 117053617U, 116868613U, 116680763U, 116495963U, 116310731U, 116124461U, 115940059U, 115755071U, 115570151U, 115383889U, 115197619U, 115012217U, 114826507U, 114639611U, 114453901U, 114268459U, 114083461U, 113896997U, 113710601U, 113523551U, 113337607U, 113151163U, 112968187U, 112781413U, 112597567U, 112410863U, 112224869U, 112041313U, 111856057U, 111671939U, 111485417U, 111300359U, 111113659U, 110927723U, 110742817U, 110558197U, 110373097U, 110185429U, 110000207U, 109816123U, 109631227U, 109445953U, 109261027U, 109076729U, 108891301U, 108706319U, 108520781U, 108338011U, 108154273U, 107969483U, 107783167U, 107599229U, 107414033U, 107229569U, 107045951U, 106860881U, 106674979U, 106491023U, 106305917U, 106121371U, 105936421U, 105751201U, 105566597U, 105380491U, 105195661U, 105011527U, 104826877U, 104640791U, 104456647U, 104271161U, 104088581U, 103905899U, 103720889U, 103535363U, 103351607U, 103166803U, 102982193U, 102797509U, 102611801U, 102428533U, 102245177U, 102061153U, 101878417U, 101693441U, 101508191U, 101324557U, 101140019U, 100957291U, 100772813U, 100587523U, 100402817U, 100217561U, 100034317U, 99851249U, 99665549U, 99482633U, 99298943U, 99112829U, 98929081U, 98743261U, 98558099U, 98374879U, 98191759U, 98006033U, 97821839U, 97638559U, 97456841U, 97272631U, 97087433U, 96904513U, 96719809U, 96537893U, 96353401U, 96168011U, 95983787U, 95801747U, 95616853U, 95433263U, 95249807U, 95066039U, 94883111U, 94700833U, 94516717U, 94333933U, 94149721U, 93966659U, 93784181U, 93599687U, 93415661U, 93232427U, 93049301U, 92863711U, 92681111U, 92497303U, 92313943U, 92129753U, 91947211U, 91761893U, 91580219U, 91395749U, 91213127U, 91030321U, 90846887U, 90664879U, 90480161U, 90297667U, 90115583U, 89933297U, 89749379U, 89564353U, 89380243U, 89196911U, 89014231U, 88831753U, 88648711U, 88464433U, 88281301U, 88099309U, 87918041U, 87735311U, 87551473U, 87368143U, 87185521U, 87002527U, 86819059U, 86635727U, 86454139U, 86271967U, 86087539U, 85905473U, 85723789U, 85539823U, 85358417U, 85175957U, 84992489U, 84809147U, 84626603U, 84444043U, 84260999U, 84077507U, 83895419U, 83714789U, 83531321U, 83348579U, 83165221U, 82982057U, 82800373U, 82619401U, 82436671U, 82253887U, 82070687U, 81889261U, 81706409U, 81524419U, 81342557U, 81159839U, 80980007U, 80798779U, 80617753U, 80435371U, 80253763U, 80072779U, 79888511U, 79706771U, 79525021U, 79343701U, 79161149U, 78979279U, 78796441U, 78615211U, 78433877U, 78250223U, 78068383U, 77887133U, 77705807U, 77523223U, 77341399U, 77159333U, 76977959U, 76797257U, 76614667U, 76431583U, 76249919U, 76067633U, 75886747U, 75706193U, 75523937U, 75343739U, 75163607U, 74982307U, 74800723U, 74619133U, 74438183U, 74256739U, 74075017U, 73892317U, 73710739U, 73531123U, 73349173U, 73168181U, 72986443U, 72806519U, 72624863U, 72443671U, 72262847U, 72083749U, 71902819U, 71721367U, 71540317U, 71360867U, 71180273U, 70999073U, 70818323U, 70636019U, 70455323U, 70275589U, 70095271U, 69913423U, 69732599U, 69552737U, 69373621U, 69192857U, 69011251U, 68831857U, 68650541U, 68469409U, 68288557U, 68108351U, 67927511U, 67746827U, 67567627U, 67387867U, 67208347U, 67028069U, 66848311U, 66666751U, 66487507U, 66307727U, 66128837U, 65950439U, 65770451U, 65589409U, 65410649U, 65230259U, 65049041U, 64870343U, 64688747U, 64507787U, 64327903U, 64147561U, 63968063U, 63789757U, 63610199U, 63430931U, 63251467U, 63071809U, 62892839U, 62713073U, 62532517U, 62352571U, 62173597U, 61994887U, 61815977U, 61636231U, 61456183U, 61275419U, 61094951U, 60915853U, 60737837U, 60559241U, 60379751U, 60201523U, 60021539U, 59841973U, 59663497U, 59484767U, 59305187U, 59125333U, 58945219U, 58767607U, 58589033U, 58410523U, 58231967U, 58052879U, 57873817U, 57694499U, 57514829U, 57335981U, 57158411U, 56980423U, 56800753U, 56624527U, 56446043U, 56266219U, 56088649U, 55910791U, 55732351U, 55555231U, 55376369U, 55197721U, 55019897U, 54841331U, 54662059U, 54485107U, 54306403U, 54126781U, 53949167U, 53770853U, 53593171U, 53413639U, 53235829U, 53058007U, 52880033U, 52702613U, 52525171U, 52347107U, 52168973U, 51990767U, 51813187U, 51636499U, 51458861U, 51281453U, 51104257U, 50925361U, 50748149U, 50570687U, 50394067U, 50216953U, 50039263U, 49861883U, 49684643U, 49508111U, 49332421U, 49155797U, 48978451U, 48802009U, 48623479U, 48446927U, 48269713U, 48092383U, 47913799U, 47737211U, 47559517U, 47382877U, 47205551U, 47028899U, 46852483U, 46675831U, 46499939U, 46323493U, 46146389U, 45969251U, 45792757U, 45616187U, 45441163U, 45266317U, 45089893U, 44914523U, 44738009U, 44563219U, 44387113U, 44210707U, 44034449U, 43858921U, 43682351U, 43505453U, 43330681U, 43154911U, 42978773U, 42801313U, 42625673U, 42449963U, 42274433U, 42100169U, 41923451U, 41748299U, 41572033U, 41396093U, 41219881U, 41044891U, 40868299U, 40695289U, 40518707U, 40343419U, 40168781U, 39994211U, 39817907U, 39642653U, 39468991U, 39294637U, 39120883U, 38945273U, 38772131U, 38597917U, 38422801U, 38249219U, 38075273U, 37901167U, 37725713U, 37551001U, 37377479U, 37201921U, 37029367U, 36854551U, 36679801U, 36505093U, 36330773U, 36157423U, 35984339U, 35809141U, 35635627U, 35461177U, 35287939U, 35114207U, 34939903U, 34767391U, 34591933U, 34418939U, 34244071U, 34069129U, 33893689U, 33721511U, 33548077U, 33374401U, 33202313U, 33028577U, 32856277U, 32682743U, 32509907U, 32337311U, 32163991U, 31991731U, 31819127U, 31646471U, 31473479U, 31300459U, 31127519U, 30953453U, 30781319U, 30609311U, 30437177U, 30265159U, 30092813U, 29922733U, 29750759U, 29579519U, 29406439U, 29235953U, 29062879U, 28890787U, 28718537U, 28546591U, 28374859U, 28204291U, 28031611U, 27861667U, 27689833U, 27518653U, 27347557U, 27174779U, 27004343U, 26834293U, 26662327U, 26491921U, 26321989U, 26150171U, 25979521U, 25809083U, 25638607U, 25468039U, 25298069U, 25124909U, 24955681U, 24783713U, 24614839U, 24444313U, 24274847U, 24105251U, 23935453U, 23765431U, 23595163U, 23425559U, 23256053U, 23085833U, 22916461U, 22747187U, 22578419U, 22409393U, 22239713U, 22068143U, 21900377U, 21731779U, 21563219U, 21394229U, 21226157U, 21056153U, 20887649U, 20718781U, 20551697U, 20382253U, 20213983U, 20045197U, 19878041U, 19710289U, 19541903U, 19374079U, 19206023U, 19038311U, 18870161U, 18703387U, 18536303U, 18368221U, 18201941U, 18033391U, 17866619U, 17699107U, 17532169U, 17366749U, 17201039U, 17032781U, 16867867U, 16702099U, 16535639U, 16369853U, 16203367U, 16036523U, 15870383U, 15705071U, 15539987U, 15374041U, 15208997U, 15042919U, 14876951U, 14712427U, 14547283U, 14382007U, 14218571U, 14053619U, 13887953U, 13724233U, 13560847U, 13395559U, 13231343U, 13067423U, 12902137U, 12738433U, 12575881U, 12411409U, 12249493U, 12086059U, 11923057U, 11760059U, 11597701U, 11435887U, 11272697U, 11109827U, 10947941U, 10786267U, 10624787U, 10463443U, 10302407U, 10140307U, 9979111U, 9817057U, 9655759U, 9495601U, 9334487U, 9174793U, 9014101U, 8853359U, 8693653U, 8534489U, 8375273U, 8215633U, 8056423U, 7896949U, 7738559U, 7580459U, 7421383U, 7263143U, 7104341U, 6947753U, 6791437U, 6633877U, 6477301U, 6319483U, 6163567U, 6007247U, 5851717U, 5695831U, 5539363U, 5383601U, 5229331U, 5074633U, 4920613U, 4766999U, 4613237U, 4459951U, 4307453U, 4154791U, 4002547U, 3849943U, 3698881U, 3548471U, 3396661U, 3246119U, 3097141U, 2948161U, 2799451U, 2650931U, 2503597U, 2356573U, 2209499U, 2063573U, 1918439U, 1774937U, 1630987U, 1488133U, 1346567U, 1205653U, 1066909U, 927853U, 791447U, 656683U, 523417U, 393073U, 266083U, 143687U }; sprng2.0/SRC/primes_64.h100600 764 764 656 6736173543 14025 0ustar chwangchwang#ifndef _primes_64_h_ #define _primes_64_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int getprime_64 ANSI_ARGS((int need, unsigned int *prime_array, int offset)); #define MAXPRIME 3037000501U /* largest odd # < sqrt(2)*2^31+2 */ #define MINPRIME 55108 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 146138719U /* Total number of available primes */ #endif sprng2.0/SRC/primes_64.c100600 764 764 5501 6736173543 14032 0ustar chwangchwang#include #include #include "primes_64.h" #include "primelist_64.h" #define YES 1 #define NO 0 #define NPRIMES 10000 int primes[NPRIMES]; #ifdef __STDC__ int init_prime_64(void) #else int init_prime_64() #endif { int i, j, obtained = 0, isprime; for(i=3; i < MINPRIME; i += 2) { isprime = YES; for(j=0; j < obtained; j++) if(i%primes[j] == 0) { isprime = NO; break; } else if(primes[j]*primes[j] > i) break; if(isprime == YES) { primes[obtained] = i; obtained++; } } return obtained; } #ifdef __STDC__ int getprime_64(int need, unsigned int *prime_array, int offset) #else int getprime_64(need, prime_array, offset) int need, offset; unsigned int *prime_array; #endif { static int initiallized = NO, num_prime; unsigned int largest; int i, isprime, index, obtained = 0; if(need <= 0) { fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" , need); return 0; } if(offset < 0) { fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" , offset); return 0; } if(offset+need-1 MAXPRIMEOFFSET) { fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } if(offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list_64[offset] + 2; offset = 0; } else { index = (unsigned int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; largest = prime_list_64[index] + 2; offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; } while(need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; for(i=0; i 0) offset--; else if(isprime == YES) prime_array[obtained++] = largest; } if(need > obtained) fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); return obtained; } #if 0 main() { unsigned int newprimes[1500], np, i; np = getprime(2,newprimes,0); np = getprime(2,newprimes+2,9); np = getprime(2,newprimes+4,12); for(i=0; i<6; i++) printf("%u. %u \n", i, newprimes[i]); /*while(np--) printf("New primes: %u\n", newprimes[np]); np = getprime(5,newprimes); printf("%d new primes obtained ...\n", np); while(np--) printf("New primes: %u\n", newprimes[np]);*/ } #endif sprng2.0/SRC/pmlcg/ 40700 764 764 0 7034410053 13036 5ustar chwangchwangsprng2.0/SRC/pmlcg/Makefile100600 764 764 1541 6736173543 14620 0ustar chwangchwang############################################################################ # # Typing the command below => results in the following being created # make => pmlcg.o object # make pmlcg.o => pmlcg.o object # # Object files created during the compilation process can be deleted finally # by typing # make clean # make realclean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : pmlcg.o pmlcg.o : $(SRCDIR)/interface.h pmlcg.c pmlcg.h $(SRCDIR)/memory.h basic.h info.h gmp.h longlong.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) pmlcg.c -I$(SRCDIR) clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out sprng2.0/SRC/pmlcg/basic.h100600 764 764 25371 6736173543 14441 0ustar chwangchwang#include #include #include #include "info.h" #define LINEAR_SEARCH_LIMIT 5000 #define MOST 18 typedef struct DATATYPE1 { long power; MP_INT *valid; struct MP_ARRAY_TYPE denom; struct MP_ARRAY_TYPE the_primes; struct MP_ARRAY_TYPE kill_us; MP_INT *prim; MP_RAT *magic; } REL_PRIME_TABLE; void free_mp_array(struct MP_ARRAY_TYPE *array) { long i; for(i=0; isize; i++) mpz_clear(&(array->list[i])); free(array->list); return; } /* This function merges two arrays */ extern struct MP_ARRAY_TYPE join(first, second) struct MP_ARRAY_TYPE first, second; { struct MP_ARRAY_TYPE result; long count1 = 0; long count2 = 0; MP_INT absfirst, abssecond; mpz_init(&absfirst); mpz_init(&abssecond); result.size = first.size + second.size; result.list = malloc(result.size * sizeof(MP_INT)); if ((count1 < first.size) && (count2 < second.size)) { mpz_abs(&absfirst, &(first.list[count1])); mpz_abs(&abssecond, &(second.list[count2])); } while ((count1 < first.size) && (count2 < second.size)) { if (mpz_cmp(&absfirst, &abssecond) > 0) { mpz_init_set(&(result.list[count1+count2]),&(second.list[count2])); ++count2; if (count2 < second.size) mpz_abs(&abssecond, &(second.list[count2])); } else { mpz_init_set(&(result.list[count1+count2]),&(first.list[count1])); ++count1; if (count1 < first.size) mpz_abs(&absfirst, &(first.list[count1])); } } mpz_clear(&absfirst); mpz_clear(&abssecond); for (;count1 0) { mpz_init(&(result.list[count2])); for (count=0;count 1) oldones = find_denom(&(the_primes[1]), maxsize-1, limit); else { oldones.size = 1; oldones.list = malloc(sizeof(MP_INT)); mpz_init_set_str(oldones.list, "1", 10); } newones = mult_reduce(the_primes, oldones, limit); answer = join(oldones, newones); free_mp_array(&newones); free_mp_array(&oldones); return(answer); } /* Evaluates Mu function, given denominators */ extern void mu_eval(result, x, denominators) MP_INT *result; MP_INT *x; struct MP_ARRAY_TYPE denominators; { MP_INT val; long count = 0; mpz_set_str(result, "0", 10); mpz_init_set_str(&val, "1", 10); while ((count < denominators.size) && (mpz_cmp_ui(&val, 0) != 0)) { mpz_div(&val, x, &(denominators.list[count])); mpz_add(result, result, &val); count++; } mpz_clear(&val); } /* Checks if x == 0 mod y, returns true if so */ extern short divisible(x, y) MP_INT *x, *y; { MP_INT temp; int sign; mpz_init(&temp); mpz_mod(&temp, x, y); sign = mpz_cmp_si(&temp, 0); mpz_clear(&temp); if (sign == 0) { return(1); } else { return(0); } } /* Checks if any primes divide a number */ extern short any_divide(number, the_primes, no_of_primes) MP_INT *number, *the_primes; long no_of_primes; { if (no_of_primes == 1) { return(divisible(number, &(the_primes[0]))); } else { if (divisible(number, &(the_primes[no_of_primes-1]))) { return(1); } else { return(any_divide(number, the_primes, no_of_primes - 1)); } } } extern void incr(x, num) MP_INT *x; long num; { mpz_add_ui(x, x, num); } extern void decr(x, num) MP_INT *x; long num; { mpz_sub_ui(x, x, num); } /* Uses a linear search to find inverse value given guess, mu(guess) */ extern MP_INT linear_find(y, current_mu, guess, the_primes) MP_INT *y, *current_mu, *guess; struct MP_ARRAY_TYPE the_primes; { while (mpz_cmp(current_mu, y) < 0) { incr(guess, 1L); if (any_divide(guess, the_primes.list, the_primes.size)) { } else incr(current_mu, 1L); } while (mpz_cmp(current_mu, y) > 0) { if (any_divide(guess, the_primes.list, the_primes.size)) decr(guess, 1L); else { decr(guess, 1L); decr(current_mu, 1L); } } while (any_divide(guess, the_primes.list, the_primes.size)) decr(guess, 1L); return(*guess); } /* This guesses at mu_inverse */ extern MP_INT guess_mu_inverse(y, magic) MP_INT *y; MP_RAT *magic; { MP_INT temp, guess; mpz_init(&temp); mpz_init(&guess); mpq_get_num(&temp, magic); mpz_mul(&guess, y, &temp); mpq_get_den(&temp, magic); mpz_div(&guess, &guess, &temp); mpz_clear(&temp); return(guess); } /* Efficient caluculation of mu */ extern void Mu(result, x, left_to_kill, the_final_denom) MP_INT *x, *result; struct MP_ARRAY_TYPE left_to_kill, the_final_denom; { MP_INT subout, first, second; struct MP_ARRAY_TYPE new_kill; if (left_to_kill.size <= 0) { mu_eval(result, x, the_final_denom); } else { mpz_init(&subout); mpz_init(&first); mpz_init(&second); mpz_div(&subout, x, &(left_to_kill.list[0])); new_kill.size = left_to_kill.size - 1; new_kill.list = &(left_to_kill.list[1]); Mu(&first, x, new_kill, the_final_denom); Mu(&second, &subout, new_kill, the_final_denom); mpz_sub(result, &first, &second); mpz_clear(&first); mpz_clear(&second); mpz_clear(&subout); } } /* finds the desired result, given y, the primes to be killed, the denominators, the full set of initial primes, and the density of relative primes */ extern MP_INT find_M(guess, y, left_to_kill, denom, initial_primes, magic) MP_INT *guess, *y; struct MP_ARRAY_TYPE denom, initial_primes, left_to_kill; MP_RAT *magic; { MP_INT temp, temp2, current_mu; mpz_init(&temp); mpz_init(&temp2); mpz_init(¤t_mu); #if 0 Mu(¤t_mu, guess, left_to_kill, denom); mpz_sub(&temp, y, ¤t_mu); mpz_abs(&temp2, &temp); while (mpz_cmp_ui(&temp2, LINEAR_SEARCH_LIMIT) > 0) { temp2 = guess_mu_inverse(&temp, magic); mpz_add(guess, guess, &temp2); Mu(¤t_mu, guess, left_to_kill, denom); mpz_sub(&temp, y, ¤t_mu); mpz_abs(&temp2, &temp); } mpz_clear(&temp); mpz_clear(&temp2); #else mpz_set_str(guess, "17", 10); mpz_set_str(¤t_mu, "1", 10); #endif return(linear_find(y, ¤t_mu, guess, initial_primes)); } /* setup. Note: 'int param' must be another argument if modulii other than 2^61-1 will be used */ extern void init_rel_prime(data, maxval) REL_PRIME_TABLE *data; MP_INT *maxval; { /* modified by cmdavis */ MP_INT limit, num, denom; struct MP_ARRAY_TYPE the_primes; /* initialize 'data.power' */ (*data).power = POWER_N; /* initialize 'data.valid' */ (*data).valid = malloc(sizeof(MP_INT)); mpz_init_set((*data).valid, maxval); /* initialize 'data.prim' */ (*data).prim = malloc(sizeof(MP_INT)); mpz_init_set_ui((*data).prim, PRIM); /* initialize 'data.magic' (density of relative primes) */ (*data).magic = malloc(sizeof(MP_RAT)); mpq_init((*data).magic); mpz_init_set_str(&num,MAGIC_NUM,10); mpz_init_set_str(&denom,MAGIC_DEN,10); mpq_set_num((*data).magic,&num); mpq_set_den((*data).magic,&denom); /* initialize 'data.the_primes[]' */ (*data).the_primes = init_factors(); /* initialize 'data.kill_us[]' */ (*data).kill_us.size = (*data).the_primes.size - MOST; if ((*data).kill_us.size < 0) (*data).kill_us.size = 0; (*data).kill_us.list = (*data).the_primes.list; /* initialize 'data.denom[]' */ the_primes = minus(&((*data).the_primes.list[(*data).kill_us.size]), (*data).the_primes.size - (*data).kill_us.size); /* define maximum value for which setup is valid */ mpz_init(&limit); limit = guess_mu_inverse(maxval, (*data).magic); mpz_mul_ui(&limit, &limit, 2); (*data).denom = find_denom(the_primes.list, the_primes.size, &limit); mpz_clear(&limit); mpz_clear(&num); mpz_clear(&denom); free_mp_array(&the_primes); } void free_rel_prime(REL_PRIME_TABLE *data) { mpz_clear(data->valid); mpz_clear(data->prim); free(data->magic); free_mp_array(&(data->the_primes)); free_mp_array(&(data->denom)); } /* find nth number relatively prime, given data */ extern int rel_prime(result, number, data) MP_INT *result, *number; REL_PRIME_TABLE data; { MP_INT guess; int i; REL_PRIME_TABLE newdata; mpz_init(result); mpz_init(&guess); if (mpz_cmp(data.valid, number) >= 0) { mpq_get_num(&guess, data.magic); guess = guess_mu_inverse(number, data.magic); *result = find_M(&guess, number, data.kill_us, data.denom, data.the_primes, data.magic); } else { init_rel_prime(&newdata, number); rel_prime(result, number, newdata); free_rel_prime(&newdata); } /* Do NOT clear guess, since result uses its component array */ return 0; } /* find nth primitive element, given data */ extern void prim_elt(result, number, data) MP_INT *result, *number; REL_PRIME_TABLE data; { MP_INT x, pow,temp; mpz_init_set_str(&x, "2", 10); mpz_pow_ui(&x, &x, data.power); mpz_sub_ui(&x, &x, 1); mpz_init_set(&temp,number); mpz_add_ui(&temp,&temp,5UL); /* first few streams are bad; so offset by 5 streams */ rel_prime(&pow, &temp, data); mpz_powm(result, data.prim, &pow, &x); mpz_clear(&pow); mpz_clear(&temp); } sprng2.0/SRC/pmlcg/gmp.h100600 764 764 55522 6736173543 14144 0ustar chwangchwang/* gmp.h -- Definitions for GNU multiple precision functions. Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of the GNU MP Library. The GNU MP Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU MP Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU MP Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __GMP_H__ #ifndef __GNU_MP__ #define __GNU_MP__ 2 #define __need_size_t #include #undef __need_size_t #if defined (__STDC__) || defined (__cplusplus) #define __gmp_const const #else #define __gmp_const #endif #if defined (__GNUC__) #define __gmp_inline __inline__ #else #define __gmp_inline #endif #ifndef _EXTERN_INLINE #ifdef __GNUC__ #define _EXTERN_INLINE extern __inline__ #else #define _EXTERN_INLINE static #endif #endif #ifdef _SHORT_LIMB typedef unsigned int mp_limb_t; typedef int mp_limb_signed_t; #else #ifdef _LONG_LONG_LIMB typedef unsigned long long int mp_limb_t; typedef long long int mp_limb_signed_t; #else typedef unsigned long int mp_limb_t; typedef long int mp_limb_signed_t; #endif #endif typedef mp_limb_t * mp_ptr; typedef __gmp_const mp_limb_t * mp_srcptr; typedef long int mp_size_t; typedef long int mp_exp_t; #ifndef __MP_SMALL__ typedef struct { int _mp_alloc; /* Number of *limbs* allocated and pointed to by the D field. */ int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; #else typedef struct { short int _mp_alloc; /* Number of *limbs* allocated and pointed to by the D field. */ short int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; #endif #endif /* __GNU_MP__ */ /* User-visible types. */ typedef __mpz_struct MP_INT; typedef __mpz_struct mpz_t[1]; /* Structure for rational numbers. Zero is represented as 0/any, i.e. the denominator is ignored. Negative numbers have the sign in the numerator. */ typedef struct { __mpz_struct _mp_num; __mpz_struct _mp_den; #if 0 int _mp_num_alloc; /* Number of limbs allocated for the numerator. */ int _mp_num_size; /* The absolute value of this field is the length of the numerator; the sign is the sign of the entire rational number. */ mp_ptr _mp_num; /* Pointer to the numerator limbs. */ int _mp_den_alloc; /* Number of limbs allocated for the denominator. */ int _mp_den_size; /* Length of the denominator. (This field should always be positive.) */ mp_ptr _mp_den; /* Pointer to the denominator limbs. */ #endif } __mpq_struct; typedef __mpq_struct MP_RAT; typedef __mpq_struct mpq_t[1]; typedef struct { int _mp_prec; /* Max precision, in number of `mp_limb_t's. Set by mpf_init and modified by mpf_set_prec. The area pointed to by the `d' field contains `prec' + 1 limbs. */ int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpf_struct; /* typedef __mpf_struct MP_FLOAT; */ typedef __mpf_struct mpf_t[1]; /* Types for function declarations in gmp files. */ /* ??? Should not pollute user name space with these ??? */ typedef __gmp_const __mpz_struct *mpz_srcptr; typedef __mpz_struct *mpz_ptr; typedef __gmp_const __mpf_struct *mpf_srcptr; typedef __mpf_struct *mpf_ptr; typedef __gmp_const __mpq_struct *mpq_srcptr; typedef __mpq_struct *mpq_ptr; #ifndef _PROTO #if defined (__STDC__) || defined (__cplusplus) #define _PROTO(x) x #else #define _PROTO(x) () #endif #endif #ifndef __MPN #if defined (__STDC__) || defined (__cplusplus) #define __MPN(x) __mpn_##x #else #define __MPN(x) __mpn_/**/x #endif #endif #if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \ || defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \ || defined (_STDIO_INCLUDED) #define _GMP_H_HAVE_FILE 1 #endif void mp_set_memory_functions _PROTO ((void *(*) (size_t), void *(*) (void *, size_t, size_t), void (*) (void *, size_t))); extern __gmp_const int mp_bits_per_limb; /**************** Integer (i.e. Z) routines. ****************/ #if defined (__cplusplus) extern "C" { #endif void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t)); void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t)); void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_clear _PROTO ((mpz_ptr)); void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int)); int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr)); int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int)); int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_com _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int)); void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); double mpz_get_d _PROTO ((mpz_srcptr)); /* signed */ long int mpz_get_si _PROTO ((mpz_srcptr)); char *mpz_get_str _PROTO ((char *, int, mpz_srcptr)); unsigned long int mpz_get_ui _PROTO ((mpz_srcptr)); mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t)); unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr)); void mpz_init _PROTO ((mpz_ptr)); #ifdef _GMP_H_HAVE_FILE size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *)); size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *)); size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int)); #endif void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_init_set_d _PROTO ((mpz_ptr, double)); void mpz_init_set_si _PROTO ((mpz_ptr, signed long int)); int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int)); void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int)); int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr)); int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr)); void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr)); #ifdef _GMP_H_HAVE_FILE size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr)); size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr)); size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr)); #endif int mpz_perfect_square_p _PROTO ((mpz_srcptr)); unsigned long int mpz_popcount _PROTO ((mpz_srcptr)); void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); int mpz_probab_prime_p _PROTO ((mpz_srcptr, int)); void mpz_random _PROTO ((mpz_ptr, mp_size_t)); void mpz_random2 _PROTO ((mpz_ptr, mp_size_t)); unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int)); unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int)); void mpz_set _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_set_d _PROTO ((mpz_ptr, double)); void mpz_set_f _PROTO ((mpz_ptr, mpf_srcptr)); void mpz_set_q _PROTO ((mpz_ptr, mpq_srcptr)); void mpz_set_si _PROTO ((mpz_ptr, signed long int)); int mpz_set_str _PROTO ((mpz_ptr, const char *, int)); void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int)); void mpz_setbit _PROTO ((mpz_ptr, unsigned long int)); size_t mpz_size _PROTO ((mpz_srcptr)); size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int)); void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int)); /**************** Rational (i.e. Q) routines. ****************/ void mpq_init _PROTO ((mpq_ptr)); void mpq_clear _PROTO ((mpq_ptr)); void mpq_set _PROTO ((mpq_ptr, mpq_srcptr)); void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int)); void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int)); void mpq_set_z _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr)); int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr)); int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int)); int mpq_equal _PROTO ((mpq_srcptr, mpq_srcptr)); void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr)); void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr)); void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr)); double mpq_get_d _PROTO ((mpq_srcptr)); void mpq_canonicalize _PROTO ((mpq_ptr)); /**************** Float (i.e. F) routines. ****************/ void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_clear _PROTO ((mpf_ptr)); int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr)); int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int)); int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int)); void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_dump _PROTO ((mpf_srcptr)); int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)); double mpf_get_d _PROTO ((mpf_srcptr)); unsigned long int mpf_get_prec _PROTO ((mpf_srcptr)); char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); void mpf_init _PROTO ((mpf_ptr)); void mpf_init2 _PROTO ((mpf_ptr, unsigned long int)); #ifdef _GMP_H_HAVE_FILE size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int)); #endif void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_init_set_d _PROTO ((mpf_ptr, double)); void mpf_init_set_si _PROTO ((mpf_ptr, signed long int)); int mpf_init_set_str _PROTO ((mpf_ptr, const char *, int)); void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr)); #ifdef _GMP_H_HAVE_FILE size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr)); #endif void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_set _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_set_d _PROTO ((mpf_ptr, double)); void mpf_set_default_prec _PROTO ((unsigned long int)); void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_q _PROTO ((mpf_ptr, mpq_srcptr)); void mpf_set_si _PROTO ((mpf_ptr, signed long int)); int mpf_set_str _PROTO ((mpf_ptr, const char *, int)); void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_z _PROTO ((mpf_ptr, mpz_srcptr)); size_t mpf_size _PROTO ((mpf_srcptr)); void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); #if defined (__cplusplus) } #endif /************ Low level positive-integer (i.e. N) routines. ************/ /* This is ugly, but we need to make usr calls reach the prefixed function. */ #define mpn_add __MPN(add) #define mpn_add_1 __MPN(add_1) #define mpn_add_n __MPN(add_n) #define mpn_addmul_1 __MPN(addmul_1) #define mpn_bdivmod __MPN(bdivmod) #define mpn_cmp __MPN(cmp) #define mpn_divmod_1 __MPN(divmod_1) #define mpn_divrem __MPN(divrem) #define mpn_divrem_1 __MPN(divrem_1) #define mpn_dump __MPN(dump) #define mpn_gcd __MPN(gcd) #define mpn_gcd_1 __MPN(gcd_1) #define mpn_gcdext __MPN(gcdext) #define mpn_get_str __MPN(get_str) #define mpn_hamdist __MPN(hamdist) #define mpn_lshift __MPN(lshift) #define mpn_mod_1 __MPN(mod_1) #define mpn_mul __MPN(mul) #define mpn_mul_1 __MPN(mul_1) #define mpn_mul_n __MPN(mul_n) #define mpn_perfect_square_p __MPN(perfect_square_p) #define mpn_popcount __MPN(popcount) #define mpn_preinv_mod_1 __MPN(preinv_mod_1) #define mpn_random2 __MPN(random2) #define mpn_rshift __MPN(rshift) #define mpn_scan0 __MPN(scan0) #define mpn_scan1 __MPN(scan1) #define mpn_set_str __MPN(set_str) #define mpn_sqrtrem __MPN(sqrtrem) #define mpn_sub __MPN(sub) #define mpn_sub_1 __MPN(sub_1) #define mpn_sub_n __MPN(sub_n) #define mpn_submul_1 __MPN(submul_1) #define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv) #if defined (__cplusplus) extern "C" { #endif mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int)); int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); void mpn_dump _PROTO ((mp_srcptr, mp_size_t)); mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t)); unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t)); mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); void mpn_random2 _PROTO ((mp_ptr, mp_size_t)); mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int)); unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int)); mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int)); mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); #if defined (__cplusplus) } #endif #if defined (__GNUC__) || defined (_FORCE_INLINES) _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_add_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_limb_t s2_limb) #else mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_limb_t s2_limb; #endif { register mp_limb_t x; x = *s1_ptr++; s2_limb = x + s2_limb; *res_ptr++ = s2_limb; if (s2_limb < x) { while (--s1_size != 0) { x = *s1_ptr++ + 1; *res_ptr++ = x; if (x != 0) goto fin; } return 1; } fin: if (res_ptr != s1_ptr) { mp_size_t i; for (i = 0; i < s1_size - 1; i++) res_ptr[i] = s1_ptr[i]; } return 0; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_add (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_srcptr s2_ptr, register mp_size_t s2_size) #else mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_srcptr s2_ptr; register mp_size_t s2_size; #endif { mp_limb_t cy_limb = 0; if (s2_size != 0) cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size); if (s1_size - s2_size != 0) cy_limb = mpn_add_1 (res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy_limb); return cy_limb; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_sub_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_limb_t s2_limb) #else mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_limb_t s2_limb; #endif { register mp_limb_t x; x = *s1_ptr++; s2_limb = x - s2_limb; *res_ptr++ = s2_limb; if (s2_limb > x) { while (--s1_size != 0) { x = *s1_ptr++; *res_ptr++ = x - 1; if (x != 0) goto fin; } return 1; } fin: if (res_ptr != s1_ptr) { mp_size_t i; for (i = 0; i < s1_size - 1; i++) res_ptr[i] = s1_ptr[i]; } return 0; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_sub (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_srcptr s2_ptr, register mp_size_t s2_size) #else mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_srcptr s2_ptr; register mp_size_t s2_size; #endif { mp_limb_t cy_limb = 0; if (s2_size != 0) cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size); if (s1_size - s2_size != 0) cy_limb = mpn_sub_1 (res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy_limb); return cy_limb; } #endif /* __GNUC__ */ /* Allow faster testing for negative, zero, and positive. */ #define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) #define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) #define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) /* Allow direct user access to numerator and denominator of a mpq_t object. */ #define mpq_numref(Q) (&((Q)->_mp_num)) #define mpq_denref(Q) (&((Q)->_mp_den)) /* When using GCC, optimize certain common comparisons. */ #if defined (__GNUC__) #define mpz_cmp_ui(Z,UI) \ (__builtin_constant_p (UI) && (UI) == 0 \ ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI)) #define mpz_cmp_si(Z,UI) \ (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \ : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \ : mpz_cmp_si (Z,UI)) #define mpq_cmp_ui(Q,NUI,DUI) \ (__builtin_constant_p (NUI) && (NUI) == 0 \ ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI)) #endif #define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize) #if 0 #define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb) #endif /* Compatibility with GMP 1. */ #define mpz_mdiv mpz_fdiv_q #define mpz_mdivmod mpz_fdiv_qr #define mpz_mmod mpz_fdiv_r #define mpz_mdiv_ui mpz_fdiv_q_ui #define mpz_mdivmod_ui(q,r,n,d) \ ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) #define mpz_mmod_ui(r,n,d) \ ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) /* Useful synonyms, but not quite compatible with GMP 1. */ #define mpz_div mpz_fdiv_q #define mpz_divmod mpz_fdiv_qr #define mpz_div_ui mpz_fdiv_q_ui #define mpz_divmod_ui mpz_fdiv_qr_ui #define mpz_mod_ui mpz_fdiv_r_ui #define mpz_div_2exp mpz_fdiv_q_2exp #define mpz_mod_2exp mpz_fdiv_r_2exp #define __GNU_MP_VERSION 2 #define __GNU_MP_VERSION_MINOR 0 #define __GMP_H__ #endif /* __GMP_H__ */ sprng2.0/SRC/pmlcg/info.h100600 764 764 2262 6736173543 14265 0ustar chwangchwang #define MAXVAL "100000000000000000000000" /*maximum # of independent streams*/ struct MP_ARRAY_TYPE { long size; MP_INT *list; }; #define OP_SIZE 2 #define RNGBITS 3 #define SHIFT 29 #define MASK 0X1FFFFFFF #define MAGIC_NUM "153722867280912930" #define MAGIC_DEN "27097804800000000" #define PRIM 37 #define POWER_N 61 /* Values pertain to this particular parameter: 2^61-1 as modulus*/ struct MP_ARRAY_TYPE init_factors() { struct MP_ARRAY_TYPE factors; factors.size = 12; factors.list = malloc(12 * sizeof(MP_INT)); mpz_init_set_str(&(factors.list[0]), "2", 10); mpz_init_set_str(&(factors.list[1]), "3", 10); mpz_init_set_str(&(factors.list[2]), "5", 10); mpz_init_set_str(&(factors.list[3]), "7", 10); mpz_init_set_str(&(factors.list[4]), "11", 10); mpz_init_set_str(&(factors.list[5]), "13", 10); mpz_init_set_str(&(factors.list[6]), "31", 10); mpz_init_set_str(&(factors.list[7]), "41", 10); mpz_init_set_str(&(factors.list[8]), "61", 10); mpz_init_set_str(&(factors.list[9]), "151", 10); mpz_init_set_str(&(factors.list[10]),"331", 10); mpz_init_set_str(&(factors.list[11]),"1321", 10); return (factors); } sprng2.0/SRC/pmlcg/longlong.h100600 764 764 127550 6736173543 15221 0ustar chwangchwang/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. Copyright (C) 1991, 1992, 1993, 1994, 1996 Free Software Foundation, Inc. This file is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this file; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* You have to define the following before including this file: UWtype -- An unsigned type, default type for operations (typically a "word") UHWtype -- An unsigned type, at least half the size of UWtype. UDWtype -- An unsigned type, at least twice as large a UWtype W_TYPE_SIZE -- size in bits of UWtype SItype, USItype -- Signed and unsigned 32 bit types. DItype, UDItype -- Signed and unsigned 64 bit types. On a 32 bit machine UWtype should typically be USItype; on a 64 bit machine, UWtype should typically be UDItype. */ #ifdef SGI #define UWtype unsigned int #define UHWtype unsigned int #define UDWtype unsigned long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype long #define UDItype unsigned long #elif defined(CONVEX) #define UWtype unsigned int #define UHWtype unsigned int #define UDWtype unsigned long long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype long long #define UDItype unsigned long long #elif defined(SP2) #define UWtype unsigned long #define UHWtype unsigned int #define UDWtype unsigned long long #define W_TYPE_SIZE 32 #define SItype long #define USItype unsigned long #define DItype long long #define UDItype unsigned long long #else #define UWtype unsigned long #define UHWtype unsigned int #define UDWtype unsigned long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype int #define UDItype unsigned int #endif #define __BITS4 (W_TYPE_SIZE / 4) #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) #define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) /* This is used to make sure no undesirable sharing between different libraries that use this file takes place. */ #ifndef __MPN #define __MPN(x) __##x #endif /* Define auxiliary asm macros. 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype word product in HIGH_PROD and LOW_PROD. 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a UDWtype product. This is just a variant of umul_ppmm. 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator) divides a UDWtype, composed by the UWtype integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less than DENOMINATOR for correct operation. If, in addition, the most significant bit of DENOMINATOR must be 1, then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1. 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator). Like udiv_qrnnd but the numbers are signed. The quotient is rounded towards 0. 5) count_leading_zeros(count, x) counts the number of zero-bits from the msb to the first non-zero bit in the UWtype X. This is the number of steps X needs to be shifted left to set the msb. Undefined for X == 0, unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts from the least significant end. 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, high_addend_2, low_addend_2) adds two UWtype integers, composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is lost. 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, and is lost. If any of these macros are left undefined for a particular CPU, C macros are used. */ /* The CPUs come in alphabetical order below. Please add support for more CPUs here, or improve the current support for the CPUs below! */ #ifdef HP #define NO_ASM /* gives incorrect results on the HP */ #endif #if defined (__GNUC__) && !defined (NO_ASM) /* We sometimes need to clobber "cc" with gcc2, but that would not be understood by gcc1. Use cpp to avoid major code duplication. */ #if __GNUC__ < 2 #define __CLOBBER_CC #define __AND_CLOBBER_CC #else /* __GNUC__ >= 2 */ #define __CLOBBER_CC : "cc" #define __AND_CLOBBER_CC , "cc" #endif /* __GNUC__ < 2 */ #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %1,%4,%5 addc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %1,%4,%5 subc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("multiplu %0,%1,%2" \ : "=r" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ __asm__ ("multmu %0,%1,%2" \ : "=r" ((USItype)(xh)) \ : "r" (__m0), \ "r" (__m1)); \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("dividu %0,%3,%4" \ : "=r" ((USItype)(q)), \ "=q" ((USItype)(r)) \ : "1" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #endif /* __a29k__ */ #if defined (__alpha) && W_TYPE_SIZE == 64 #define umul_ppmm(ph, pl, m0, m1) \ do { \ UDItype __m0 = (m0), __m1 = (m1); \ __asm__ ("umulh %r1,%2,%0" \ : "=r" ((UDItype) ph) \ : "%rJ" (__m0), \ "rI" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 46 #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { UDItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern UDItype __udiv_qrnnd (); #define UDIV_TIME 220 #endif /* LONGLONG_STANDALONE */ #endif /* __alpha */ #if defined (__arm__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("adds %1, %4, %5 adc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subs %1, %4, %5 sbc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, a, b) \ __asm__ ("%@ Inlined umul_ppmm mov %|r0, %2, lsr #16 mov %|r2, %3, lsr #16 bic %|r1, %2, %|r0, lsl #16 bic %|r2, %3, %|r2, lsl #16 mul %1, %|r1, %|r2 mul %|r2, %|r0, %|r2 mul %|r1, %0, %|r1 mul %0, %|r0, %0 adds %|r1, %|r2, %|r1 addcs %0, %0, #65536 adds %1, %1, %|r1, lsl #16 adc %0, %0, %|r1, lsr #16" \ : "=&r" ((USItype)(xh)), \ "=r" ((USItype)(xl)) \ : "r" ((USItype)(a)), \ "r" ((USItype)(b)) \ : "r0", "r1", "r2") #define UMUL_TIME 20 #define UDIV_TIME 100 #endif /* __arm__ */ #if defined (__clipper__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwux %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define smul_ppmm(w1, w0, u, v) \ ({union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwx %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((SItype)(u)), \ "r" ((SItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("mulwux %2,%0" \ : "=r" (__w) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ __w; }) #endif /* __clipper__ */ #if defined (__gmicro__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add.w %5,%1 addx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub.w %5,%1 subx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ __asm__ ("mulx %3,%0,%1" \ : "=g" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%0" ((USItype)(m0)), \ "g" ((USItype)(m1))) #define udiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("divx %4,%0,%1" \ : "=g" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "1" ((USItype)(nh)), \ "0" ((USItype)(nl)), \ "g" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bsch/1 %1,%0" \ : "=g" (count) \ : "g" ((USItype)(x)), \ "0" ((USItype)0)) #endif #if defined (__hppa) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %4,%5,%1 addc %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "%rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %4,%5,%1 subb %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #if defined (_PA_RISC1_1) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("xmpyu %1,%2,%0" \ : "=*f" (__xx.__ll) \ : "*f" ((USItype)(u)), \ "*f" ((USItype)(v))); \ (wh) = __xx.__i.__h; \ (wl) = __xx.__i.__l; \ } while (0) #define UMUL_TIME 8 #define UDIV_TIME 60 #else #define UMUL_TIME 40 #define UDIV_TIME 80 #endif #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #endif /* LONGLONG_STANDALONE */ #define count_leading_zeros(count, x) \ do { \ USItype __tmp; \ __asm__ ( \ "ldi 1,%0 extru,= %1,15,16,%%r0 ; Bits 31..16 zero? extru,tr %1,15,16,%1 ; No. Shift down, skip add. ldo 16(%0),%0 ; Yes. Perform add. extru,= %1,23,8,%%r0 ; Bits 15..8 zero? extru,tr %1,23,8,%1 ; No. Shift down, skip add. ldo 8(%0),%0 ; Yes. Perform add. extru,= %1,27,4,%%r0 ; Bits 7..4 zero? extru,tr %1,27,4,%1 ; No. Shift down, skip add. ldo 4(%0),%0 ; Yes. Perform add. extru,= %1,29,2,%%r0 ; Bits 3..2 zero? extru,tr %1,29,2,%1 ; No. Shift down, skip add. ldo 2(%0),%0 ; Yes. Perform add. extru %1,30,1,%1 ; Extract bit 1. sub %0,%1,%0 ; Subtract it. " : "=r" (count), "=r" (__tmp) : "1" (x)); \ } while (0) #endif /* hppa */ #if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "r" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define smul_ppmm(xh, xl, m0, m1) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (m0), \ "r" (m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("dr %0,%2" \ : "=r" (__xx.__ll) \ : "0" (__xx.__ll), "r" (d)); \ (q) = __xx.__i.__l; (r) = __xx.__i.__h; \ } while (0) #endif #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl %5,%1 adcl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl %5,%1 sbbl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mull %3" \ : "=a" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "rm" ((USItype)(v))) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divl %4" \ : "=a" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "rm" ((USItype)(d))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("bsrl %1,%0" \ : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define count_trailing_zeros(count, x) \ __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x))) #ifndef UMUL_TIME #define UMUL_TIME 40 #endif #ifndef UDIV_TIME #define UDIV_TIME 40 #endif #endif /* 80x86 */ #if defined (__i860__) && W_TYPE_SIZE == 32 #define rshift_rhlc(r,h,l,c) \ __asm__ ("shr %3,r0,r0\;shrd %1,%2,%0" \ "=r" (r) : "r" (h), "r" (l), "rn" (c)) #endif /* i860 */ #if defined (__i960__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 1,0\;addc %5,%4,%1\;addc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "%dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 0,0\;subc %5,%4,%1\;subc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__xx.__ll) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__w) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (nh); __nn.__i.__l = (nl); \ __asm__ ("ediv %d,%n,%0" \ : "=d" (__rq.__ll) \ : "dI" (__nn.__ll), \ "dI" ((USItype)(d))); \ (r) = __rq.__i.__l; (q) = __rq.__i.__h; \ } while (0) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("scanbit %1,%0" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 (-32) /* sic */ #if defined (__i960mx) /* what is the proper symbol to test??? */ #define rshift_rhlc(r,h,l,c) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (h); __nn.__i.__l = (l); \ __asm__ ("shre %2,%1,%0" \ : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \ } #endif /* i960mx */ #endif /* i960 */ #if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add%.l %5,%1 addx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub%.l %5,%1 subx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mulu%.l %3,%1:%0" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "dmi" ((USItype)(v))) #define UMUL_TIME 45 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divu%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define UDIV_TIME 90 #define sdiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divs%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bfffo %1{%b2:%b2},%0" \ : "=d" ((USItype)(count)) \ : "od" ((USItype)(x)), "n" (0)) #define COUNT_LEADING_ZEROS_0 32 #else /* not mc68020 */ #define umul_ppmm(xh, xl, a, b) \ do { USItype __umul_tmp1, __umul_tmp2; \ __asm__ ("| Inlined umul_ppmm move%.l %5,%3 move%.l %2,%0 move%.w %3,%1 swap %3 swap %0 mulu %2,%1 mulu %3,%0 mulu %2,%3 swap %2 mulu %5,%2 add%.l %3,%2 jcc 1f add%.l %#0x10000,%0 1: move%.l %2,%3 clr%.w %2 swap %2 swap %3 clr%.w %3 add%.l %3,%1 addx%.l %2,%0 | End inlined umul_ppmm" \ : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \ "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \ : "%2" ((USItype)(a)), "d" ((USItype)(b))); \ } while (0) #define UMUL_TIME 100 #define UDIV_TIME 400 #endif /* not mc68020 */ #endif /* mc68000 */ #if defined (__m88000__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addu.co %1,%r4,%r5 addu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subu.co %1,%r4,%r5 subu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("ff1 %0,%1" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 63 /* sic */ #if defined (__m88110__) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("mulu.d %0,%1,%2" \ : "=r" (__xx.__ll) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))); \ (wh) = __xx.__i.__h; \ (wl) = __xx.__i.__l; \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ USItype __q; \ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ __asm__ ("divu.d %0,%1,%2" \ : "=r" (__q) \ : "r" (__xx.__ll), \ "r" ((USItype)(d))); \ (r) = (n0) - __q * (d); (q) = __q; }) #define UMUL_TIME 5 #define UDIV_TIME 25 #else #define UMUL_TIME 17 #define UDIV_TIME 150 #endif /* __m88110__ */ #endif /* __m88000__ */ #if defined (__mips__) && W_TYPE_SIZE == 32 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3" \ : "=l" ((USItype)(w0)), \ "=h" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #else #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3 mflo %0 mfhi %1" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #endif #define UMUL_TIME 10 #define UDIV_TIME 100 #endif /* __mips__ */ #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 #define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3" \ : "=l" ((UDItype)(w0)), \ "=h" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) #else #define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3 mflo %0 mfhi %1" \ : "=d" ((UDItype)(w0)), \ "=d" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) #endif #define UMUL_TIME 20 #define UDIV_TIME 140 #endif /* __mips__ */ #if defined (__ns32000__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("meid %2,%0" \ : "=g" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("meid %2,%0" \ : "=g" (__w) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ __asm__ ("deid %2,%0" \ : "=g" (__xx.__ll) \ : "0" (__xx.__ll), \ "g" ((USItype)(d))); \ (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) #define count_trailing_zeros(count,x) \ do { __asm__ ("ffsd %2,%0" \ : "=r" ((USItype) (count)) \ : "0" ((USItype) 0), \ "r" ((USItype) (x))); \ } while (0) #endif /* __ns32000__ */ #if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else \ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ } while (0) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (ah) && (ah) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else \ __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ } while (0) #define count_leading_zeros(count, x) \ __asm__ ("{cntlz|cntlzw} %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #if defined (_ARCH_PPC) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhwu %0,%1,%2" \ : "=r" ((USItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 15 #define smul_ppmm(ph, pl, m0, m1) \ do { \ SItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhw %0,%1,%2" \ : "=r" ((SItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define SMUL_TIME 14 #define UDIV_TIME 120 #else #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mul %0,%2,%3" \ : "=r" ((USItype)(xh)), \ "=q" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 8 #define smul_ppmm(xh, xl, m0, m1) \ __asm__ ("mul %0,%2,%3" \ : "=r" ((SItype)(xh)), \ "=q" ((SItype)(xl)) \ : "r" (m0), \ "r" (m1)) #define SMUL_TIME 4 #define sdiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("div %0,%2,%4" \ : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \ : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d))) #define UDIV_TIME 100 #endif #endif /* Power architecture variants. */ #if defined (__pyr__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addw %5,%1 addwc %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subw %5,%1 subwb %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) /* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("movw %1,%R0 uemul %2,%0" \ : "=&r" (__xx.__ll) \ : "g" ((USItype) (u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #endif /* __pyr__ */ #if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("a %1,%5 ae %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("s %1,%5 se %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ( \ "s r2,r2 mts r10,%2 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 cas %0,r2,r0 mfs r10,%1" \ : "=r" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%r" (__m0), \ "r" (__m1) \ : "r2"); \ (ph) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 20 #define UDIV_TIME 200 #define count_leading_zeros(count, x) \ do { \ if ((x) >= 0x10000) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x) >> 16)); \ else \ { \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))); \ (count) += 16; \ } \ } while (0) #endif /* RT/ROMP */ #if defined (__sh2__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ __asm__ ( \ "dmulu.l %2,%3 sts macl,%1 sts mach,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "macl", "mach") #define UMUL_TIME 5 #endif #if defined (__sparc__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addcc %r4,%5,%1 addx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subcc %r4,%5,%1 subx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #if defined (__sparc_v8__) /* Don't match immediate range because, 1) it is not often useful, 2) the 'I' flag thinks of the range as a 13 bit signed interval, while we want to match a 13 bit interval, sign extended to 32 bits, but INTERPRETED AS UNSIGNED. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */ #define udiv_qrnnd(q, r, n1, n0, d) \ do { \ USItype __q; \ __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ : "=r" ((USItype)(__q)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))); \ (r) = (n0) - __q * (d); \ (q) = __q; \ } while (0) #define UDIV_TIME 25 #endif /* SUPERSPARC */ #else /* ! __sparc_v8__ */ #if defined (__sparclite__) /* This has hardware multiply but not divide. It also has two additional instructions scan (ffs from high bit) and divscc. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("! Inlined udiv_qrnnd wr %%g0,%2,%%y ! Not a delayed write for sparclite tst %%g0 divscc %3,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%0 rd %%y,%1 bl,a 1f add %1,%4,%1 1: ! End of inline udiv_qrnnd" \ : "=r" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "rI" ((USItype)(d)) \ : "%g1" __AND_CLOBBER_CC) #define UDIV_TIME 37 #define count_leading_zeros(count, x) \ __asm__ ("scan %1,0,%0" \ : "=r" ((USItype)(x)) \ : "r" ((USItype)(count))) /* Early sparclites return 63 for an argument of 0, but they warn that future implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 undefined. */ #endif /* __sparclite__ */ #endif /* __sparc_v8__ */ /* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */ #ifndef umul_ppmm #define umul_ppmm(w1, w0, u, v) \ __asm__ ("! Inlined umul_ppmm wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr sra %3,31,%%g2 ! Don't move this insn and %2,%%g2,%%g2 ! Don't move this insn andcc %%g0,0,%%g1 ! Don't move this insn mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,0,%%g1 add %%g1,%%g2,%0 rd %%y,%1" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "%rI" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "%g1", "%g2" __AND_CLOBBER_CC) #define UMUL_TIME 39 /* 39 instructions */ #endif #ifndef udiv_qrnnd #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #define UDIV_TIME 140 #endif /* LONGLONG_STANDALONE */ #endif /* udiv_qrnnd */ #endif /* __sparc__ */ #if defined (__vax__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl2 %5,%1 adwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl2 %5,%1 sbwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("emul %1,%2,$0,%0" \ : "=g" (__xx.__ll) \ : "g" (__m0), \ "g" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("ediv %3,%2,%0,%1" \ : "=g" (q), "=g" (r) \ : "g" (__xx.ll), "g" (d)); \ } while (0) #endif /* __vax__ */ #if defined (__z8000__) && W_TYPE_SIZE == 16 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "%0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "%1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {long int __ll; \ struct {unsigned int __h, __l;} __i; \ } __xx; \ unsigned int __m0 = (m0), __m1 = (m1); \ __asm__ ("mult %S0,%H3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "rQR" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((signed int) __m0 >> 15) & __m1) \ + (((signed int) __m1 >> 15) & __m0)); \ } while (0) #endif /* __z8000__ */ #endif /* __GNUC__ */ #if !defined (umul_ppmm) && defined (__umulsidi3) #define umul_ppmm(ph, pl, m0, m1) \ { \ UDWtype __ll = __umulsidi3 (m0, m1); \ ph = (UWtype) (__ll >> W_TYPE_SIZE); \ pl = (UWtype) __ll; \ } #endif #if !defined (__umulsidi3) #define __umulsidi3(u, v) \ ({UWtype __hi, __lo; \ umul_ppmm (__hi, __lo, u, v); \ ((UDWtype) __hi << W_TYPE_SIZE) | __lo; }) #endif /* If this machine has no inline assembler, use C macros. */ #if !defined (add_ssaaaa) #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) + (bl); \ (sh) = (ah) + (bh) + (__x < (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (sub_ddmmss) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) - (bl); \ (sh) = (ah) - (bh) - (__x > (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (umul_ppmm) #define umul_ppmm(w1, w0, u, v) \ do { \ UWtype __x0, __x1, __x2, __x3; \ UHWtype __ul, __vl, __uh, __vh; \ UWtype __u = (u), __v = (v); \ \ __ul = __ll_lowpart (__u); \ __uh = __ll_highpart (__u); \ __vl = __ll_lowpart (__v); \ __vh = __ll_highpart (__v); \ \ __x0 = (UWtype) __ul * __vl; \ __x1 = (UWtype) __ul * __vh; \ __x2 = (UWtype) __uh * __vl; \ __x3 = (UWtype) __uh * __vh; \ \ __x1 += __ll_highpart (__x0);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ __x3 += __ll_B; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + __ll_highpart (__x1); \ (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\ } while (0) #endif #if !defined (umul_ppmm) #define smul_ppmm(w1, w0, u, v) \ do { \ UWtype __w1; \ UWtype __m0 = (u), __m1 = (v); \ umul_ppmm (__w1, w0, __m0, __m1); \ (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \ - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \ } while (0) #endif /* Define this unconditionally, so it can be used for debugging. */ #define __udiv_qrnnd_c(q, r, n1, n0, d) \ do { \ UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ __d1 = __ll_highpart (d); \ __d0 = __ll_lowpart (d); \ \ __r1 = (n1) % __d1; \ __q1 = (n1) / __d1; \ __m = (UWtype) __q1 * __d0; \ __r1 = __r1 * __ll_B | __ll_highpart (n0); \ if (__r1 < __m) \ { \ __q1--, __r1 += (d); \ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ if (__r1 < __m) \ __q1--, __r1 += (d); \ } \ __r1 -= __m; \ \ __r0 = __r1 % __d1; \ __q0 = __r1 / __d1; \ __m = (UWtype) __q0 * __d0; \ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ if (__r0 < __m) \ { \ __q0--, __r0 += (d); \ if (__r0 >= (d)) \ if (__r0 < __m) \ __q0--, __r0 += (d); \ } \ __r0 -= __m; \ \ (q) = (UWtype) __q1 * __ll_B | __q0; \ (r) = __r0; \ } while (0) /* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through __udiv_w_sdiv (defined in libgcc or elsewhere). */ #if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ UWtype __r; \ (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \ (r) = __r; \ } while (0) #endif /* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ #if !defined (udiv_qrnnd) #define UDIV_NEEDS_NORMALIZATION 1 #define udiv_qrnnd __udiv_qrnnd_c #endif #if !defined (count_leading_zeros) extern #ifdef __STDC__ const #endif unsigned char __clz_tab[]; #define count_leading_zeros(count, x) \ do { \ UWtype __xr = (x); \ UWtype __a; \ \ if (W_TYPE_SIZE <= 32) \ { \ __a = __xr < ((UWtype) 1 << 2*__BITS4) \ ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \ : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\ } \ else \ { \ for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ if (((__xr >> __a) & 0xff) != 0) \ break; \ } \ \ (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ } while (0) /* This version gives a well-defined value for zero. */ #define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE #endif #if !defined (count_trailing_zeros) /* Define count_trailing_zeros using count_leading_zeros. The latter might be defined in asm, but if it is not, the C version above is good enough. */ #define count_trailing_zeros(count, x) \ do { \ UWtype __ctz_x = (x); \ UWtype __ctz_c; \ count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ (count) = W_TYPE_SIZE - 1 - __ctz_c; \ } while (0) #endif #ifndef UDIV_NEEDS_NORMALIZATION #define UDIV_NEEDS_NORMALIZATION 0 #endif sprng2.0/SRC/pmlcg/pmlcg.c100600 764 764 46703 6736173543 14457 0ustar chwangchwang/*************************************************************************/ /*************************************************************************/ /* Parallel Prime Modulus Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Based on: ??? */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 13 April 1998 */ #include #include #include #define NDEBUG #include #include #include "memory.h" #include "interface.h" #include "pmlcg.h" #include "gmp.h" #include "basic.h" #include #define init_rng pmlcg_init_rng #define get_rn_int pmlcg_get_rn_int #define get_rn_flt pmlcg_get_rn_flt #define get_rn_dbl pmlcg_get_rn_dbl #define spawn_rng pmlcg_spawn_rng #define get_seed_rng pmlcg_get_seed_rng #define free_rng pmlcg_free_rng #define pack_rng pmlcg_pack_rng #define unpack_rng pmlcg_unpack_rng #define print_rng pmlcg_print_rng #ifdef CONVEX #undef _LONG_LONG /* problems on convex compiler with 64 bit arithmetic */ #endif #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #endif #ifndef LONG64 #include "longlong.h" #endif #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Prime modulus LCG" #define NPARAMS 1 /*** number of valid parameters ***/ int MAX_STREAMS = (1<<30); /* Maximum number of streams for initialization */ /* ... more streams can be spawned, though */ struct rngen { int rng_type; char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; /*** declare other variables here ***/ #ifdef LONG64 unsigned LONG64 mult, x; #else unsigned long r[2], a[2]; int a_size; /* length of array 'a' */ #endif MP_INT k, si; }; int NGENS=0; /* number of random streams in current process */ /* ************************************************************* */ /* ************************* init ************************** */ /* ************************************************************* */ static int init( aa, x0, k, seed, param) unsigned long *aa, *x0; MP_INT *k; int seed, param; { /* called by: initialize_int() calls : GMP routines init_rel_prime(), prim_elt() [ rand_lcg_mu.h ] params : unsigned long aa, x0 = 'a' and 'r' arrays of a generator ( empty when called ) MP_INT k = k value to use to calculate polynomial param determines the power returns : 'a_size' : the length of the multiplier array ( also, params 'aa[]' and 'x0[]' will be filled ) Sets up the multiplier ('a' array) and initial seed ('r' array) for the given value of k. [ 'a' == 'aa' , 'r' == 'x0' ] */ MP_INT A; REL_PRIME_TABLE data; long i, a_size; /* find multiplier value */ mpz_init_set_str(&A, MAXVAL, 10); init_rel_prime(&data, &A); /* param = 2^61-1 is assumes here */ prim_elt(&A, k, data); for (i=0; isi)); mpz_init(&(q[i]->k)); } /* set up 1st generator */ mpz_set(&(q[0]->k),old_si); #ifdef LONG64 a_size = init(a, r, &(q[0]->k),seed,param); q[0]->mult = (unsigned LONG64)a[1]<<32|a[0]; q[0]->x = (unsigned LONG64)r[1]<<32|r[0]; #else q[0]->a_size = init(q[0]->a, q[0]->r, &(q[0]->k),seed,param); #endif mpz_mul_ui(&(q[0]->si), old_si, 2); mpz_add_ui(&(q[0]->si), &(q[0]->si), 1); /* set up remaining generators */ i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0; kk), &(q[order[k]]->si)); #ifdef LONG64 a_size = init(a,r,&(q[i]->k),seed,param); q[i]->mult = (unsigned LONG64)a[1]<<32|a[0]; q[i]->x = (unsigned LONG64)r[1]<<32|r[0]; #else q[i]->a_size = init(q[i]->a,q[i]->r,&(q[i]->k),seed,param); #endif mpz_mul_ui(&(q[order[k]]->si), &(q[order[k]]->si), 2); mpz_set(&(q[i]->si), &(q[order[k]]->si)); mpz_add_ui(&(q[i]->si), &(q[i]->si), 1); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1; k>0; k--) { order[2*k+1] = l + k; order[2*k] = order[k]; } order[1] = l; } free(order); return( (int **)q ); } /* end of initialize */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng(int rng_type, int gennum, int total_gen, int seed, int param) #else int *init_rng(rng_type,gennum,total_gen,seed,param) int rng_type,gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i, **p; MP_INT k; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ mpz_init_set_ui(&k, gennum); /*final seed != 0 */ p = initialize(1, &k, seed, param); if(p==NULL) return NULL; else genptr = (struct rngen *) p[0]; free(p); /* Initiallize data structure variables */ genptr->rng_type = rng_type; genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed; genptr->parameter = param; genptr->narrays = 0; /* number of arrays needed by your generator */ while ( mpz_cmp_ui(&(genptr->si), total_gen) < 0 ) mpz_mul_ui(&(genptr->si), &(genptr->si), 2); mpz_clear(&k); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } /* ************************************************************* */ /* ************************* iterate ************************* */ /* ************************************************************* */ #ifdef ANSI_C void iterate( int *genptr ) #else void iterate( genptr ) int *genptr; #endif { #ifdef LONG64 struct rngen *gen = (struct rngen *) genptr; unsigned LONG64 x0, x1, x3, ul, uh, vl, vh; #define MULT_MASK1 0x7fffffffU #define MULT_MASK2 0x3fffffffU #ifdef LONG_SPRNG #define MULT_MASK3 0x1fffffffffffffffUL #define MULT_MASK4 0x2000000000000000UL #else #define MULT_MASK3 0x1fffffffffffffffULL #define MULT_MASK4 0x2000000000000000ULL #endif ul = gen->mult&MULT_MASK1; uh = (gen->mult>>31)&MULT_MASK2; vl = gen->x&MULT_MASK1; vh = (gen->x>>31)&MULT_MASK2; x0 = ul*vl; x1 = ul*vh + uh*vl + (x0>>31); x0 &= MULT_MASK1; x3 = ((uh*vh)<<1) + (x1>>30); x0 |= (x1&MULT_MASK2)<<31; gen->x = (x0+x3); if(gen->x&MULT_MASK4) /*Note: x != ..MASK3 since x!=0 mod prime for pmlcg */ { gen->x &= MULT_MASK3; gen->x += 1; if(gen->x == MULT_MASK4) gen->x = 1; } #else /* end LONG64, start 32 bit arithmetic */ /* called by: get_rn_dbl(int) calls : add_ssaaaa(), umul_ppmm() [ longlong.h ] params : int *genptr = generator to iterate returns : void Performs the modular multiplication needed to iterate generator Xn+1 = (Xn * a) mod (2^N - 1) */ /* aa[] * Xn[] -------- result[] -> result[] is split into 2 parts : kk[]rr[] the new Xn[] = ( kk[] + rr[] ) mod ( 2^n - 1) */ unsigned long *aa, *Xn, *rr, *kk; static unsigned long result[4]; /* should be atleast 2*OP_SIZE */ static char overflow; /* should be atleast 2*OP_SIZE */ unsigned long a0, b0, of, temp, temp2; /* temporary storage variables */ unsigned long prod_lo, prod_hi, res_lo, res_hi; long i,j; /* counter variables */ int param = 0; aa = ((struct rngen *)genptr)->a; Xn = ((struct rngen *)genptr)->r; memset(result,0,4*sizeof(unsigned long)); /* initialize to 0 */ overflow = 0; /* result[] = aa[] * Xn[] */ a0 = aa[0]; b0 = Xn[0]; umul_ppmm(prod_hi,prod_lo, a0,b0); result[0] = prod_lo; result[1] = prod_hi; b0 = Xn[1]; umul_ppmm(prod_hi,prod_lo, a0,b0); res_lo = result[1]; add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[1] = temp2; add_ssaaaa(res_hi,res_lo,0,prod_hi, 0,of); result[2] = res_lo; overflow = res_hi; if(((struct rngen *)genptr)->a_size == 2) { a0 = aa[1]; b0 = Xn[0]; res_lo = result[1]; res_hi = result[2]; umul_ppmm(prod_hi,prod_lo, a0,b0); add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[1] = temp2; add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); result[2] = res_lo; overflow += res_hi; b0 = Xn[1]; res_lo = result[2]; res_hi = result[3]; umul_ppmm(prod_hi,prod_lo, a0,b0); add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[2] = temp2; add_ssaaaa(temp,of, 0,of, 0,overflow); add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); result[3] = res_lo; } /* rr = low(result) (R) kk = hi(result) (K) */ rr = result; kk = result + OP_SIZE; /* shift 'kk' left */ temp2 = 0; for (i=0; i> SHIFT; } /* move extra bits at top of rr[] into start of kk[] */ temp = rr[OP_SIZE-1]; temp2 = temp >> SHIFT; rr[OP_SIZE-1] = ((temp<> RNGBITS; kk[0] += temp2; /* Xn+1 = rr + kk */ a0 = 0; for (i=0; i> n ) */ temp2 = Xn[OP_SIZE - 1] >> SHIFT; Xn[OP_SIZE - 1] &= MASK; for (i=0; ix>>9) | EXPO; return *dtemp - (double) 1.0; #else return (genptr->x>>9)*2.2204460492503131e-16; #endif #else /* 32 bit arithmetic */ double num1,num2; long i; iterate(igenptr); num1 = (double) genptr->r[0]; num2 = (double) genptr->r[1]; num2 *= (double) 0XFFFFFFFF + 1.0; num1 += num2; num2 = (double) 0XFFFFFFFF + 1.0; num2 *= (double) 0X1FFFFFFF + 1.0; num2 -= 1.0; num1 /= num2; return (num1); #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 iterate(igenptr); return (int) (genptr->x>>30); #else unsigned long irn; iterate(igenptr); irn = (genptr->r[1]<<2) | ((genptr->r[0]&0xc0000000)>>30); return (int) (irn&0x7fffffff); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) initialize(nspawned, &tempptr->si,tempptr->init_seed, tempptr->parameter); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } else { *newgens = (int **) genptr; for(i=0; irng_type = tempptr->rng_type; genptr[i]->gentype = GENTYPE; genptr[i]->stream_number = tempptr->stream_number; genptr[i]->nstreams = tempptr->nstreams; genptr[i]->init_seed = tempptr->init_seed; genptr[i]->parameter = tempptr->parameter; genptr[i]->narrays = 0; /* number of arrays needed by your generator */ NGENS++; } } if(checkid != 0) for(i=0; ik)); mpz_clear(&(q->si)); free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { char *temp_buffer; int size, i; struct rngen *q; int pos=0; q = (struct rngen *) genptr; size = 4 + sizeof(struct rngen) + q->narrays*sizeof(int) + strlen(q->gentype)+1; size += q->k._mp_alloc*sizeof(mp_limb_t); size += q->si._mp_alloc*sizeof(mp_limb_t); temp_buffer = (char *) mymalloc(size); /* allocate memory */ if(temp_buffer == NULL) { *buffer = NULL; return 0; } pos += store_int(q->rng_type,4,temp_buffer+pos); strcpy(temp_buffer+pos,q->gentype); pos += strlen(q->gentype)+1; memcpy(temp_buffer+pos,q,sizeof(struct rngen)); pos += sizeof(struct rngen); memcpy(temp_buffer+pos,q->k._mp_d,q->k._mp_alloc*sizeof(mp_limb_t)); pos += q->k._mp_alloc*sizeof(mp_limb_t); memcpy(temp_buffer+pos,q->si._mp_d,q->si._mp_alloc*sizeof(mp_limb_t)); pos += q->si._mp_alloc*sizeof(mp_limb_t); assert(pos == size); *buffer = temp_buffer; return size; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; int i; int pos=0; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; pos += 4; /* skip rng_type */ if(strcmp(packed+pos,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed+pos, GENTYPE); return NULL; } else q->gentype = GENTYPE; pos += strlen(q->gentype)+1; memcpy(q,packed+pos,sizeof(struct rngen)); pos += sizeof(struct rngen); q->k._mp_d = (mp_limb_t *) mymalloc(q->k._mp_alloc*sizeof(mp_limb_t)); q->si._mp_d = (mp_limb_t *) mymalloc(q->si._mp_alloc*sizeof(mp_limb_t)); if(q->k._mp_d == NULL || q->si._mp_d == NULL) return NULL; memcpy(q->k._mp_d,packed+pos,q->k._mp_alloc*sizeof(mp_limb_t)); pos += q->k._mp_alloc*sizeof(mp_limb_t); memcpy(q->si._mp_d,packed+pos,q->si._mp_alloc*sizeof(mp_limb_t)); pos += q->si._mp_alloc*sizeof(mp_limb_t); NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); /*#ifdef LONG64 printf("multiplier = %llu, seed = %llu\n", gen->mult, gen->x); #endif*/ return 1; } sprng2.0/SRC/pmlcg/pmlcg.data100700 764 764 51625 6736173543 15146 0ustar chwangchwang1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 2029142071 2081870640 1183635265 682638956 1839316374 1892287065 424941439 1600951801 1884044755 499699256 1153521950 405181972 873136130 146830234 2010092191 130266476 897663895 1186644539 1551670810 841489741 1115679204 1238313484 1629704234 1624771722 1072176621 161045648 1892073431 649978872 1533723689 1568635129 1990033878 809960838 858960624 462060543 1679138680 616750969 1581652534 1996451906 318723665 105982292 1439296755 1584716475 1282249571 102025390 1375310197 1037991222 2007521160 188842293 1290718901 795842648 1774455327 1104277298 1969198625 30749400 558386114 167967477 1520051239 547177706 1825738115 234697578 2111774382 2038734679 164912801 819341675 1622891122 1029065898 226759264 1288614871 1304075953 671632069 1833965521 1739793409 1355684119 1439579595 1445183551 1066335405 1602215092 577500781 1006413270 2107803281 1082147286 841362501 11457265 763850134 1470402555 2132778137 1563117913 161280186 1461992021 1347600886 361491156 1612077158 1681475114 1925756748 1854263899 1725191918 552364976 1649054511 1176547425 1501087492 578432267 2087393280 224352851 1847592905 697146001 975943176 1687348004 161035443 1553748169 89281513 129691185 573189286 422184742 286539489 866488600 126919742 1381210285 677918625 1727667422 1525519999 459132108 945787897 956037705 1478801026 2012238257 875752216 842158789 1500733400 1580349182 57716235 1817365281 1781214091 634835490 1180328621 1498631097 1147895890 750093609 1917666645 1605573109 1882289832 1457167517 1729335677 1840252802 1139708732 796311417 790871915 669257623 1470704764 2031475044 588377780 1223260585 1854153756 1017805325 741073099 1215912159 1548365036 1662479732 1022913350 614616100 1161968842 447384106 2062128213 1373676399 2089271024 2076527874 749513805 681064474 157761392 1651726560 1337110674 530936868 609461959 2012263959 764190516 1752770572 991730137 664005465 1557282427 1359420315 858007495 2080707922 963600094 120868217 504010738 1078543455 1548961368 1589217783 1571223750 9356936 1308547092 1042173859 455187781 685780466 661169861 1841247238 503823922 1044860281 468529092 1248929183 218240398 1364008612 508815736 837174714 1997147513 1266595716 297470818 517837598 1669001454 432449105 298552140 527547958 58628280 944150779 1480672935 1987594051 281575966 223694421 1340302380 404883248 1894376793 1693551008 355239786 627160033 764705808 623917543 1969476434 715840927 58035777 1797971689 10727959 234677506 1570933529 1510438511 1693092457 275771214 2000791909 1519874132 960226326 1291262837 2002584825 1060818478 1422967765 1766432613 1736040021 594277156 1688619693 2025862787 411122364 37914023 1798698899 537042467 160564801 366431281 1212744597 1138507966 1277694199 1294718535 1832811116 1705117700 1007418918 1478531418 929121356 1066554049 862510326 831015500 1783551324 2054247081 1923028711 917563860 837237693 2141045895 1159940840 1077873110 1476789162 277367475 1495056849 1277172838 899071777 1930095653 713792534 1562931715 1307424607 735705145 1864856790 2125941190 1152354692 741923187 1634566974 307671662 179577733 1714105572 1973319864 1332418668 1301405395 415038161 1554184103 1398194943 38983523 817035214 265356269 1556935055 261854959 908625470 91350536 111812682 1500286026 1171717440 12995825 828542822 1543675562 679903292 1214011578 1808201097 1108680823 1996325404 1046336030 1742401613 864010952 1882224849 493231474 1565550107 269408862 97236735 1684109677 648193241 965618970 1289185404 2012552299 1288374814 1982928711 1493902145 1782894462 560421405 913077356 644029520 1004876917 221320716 1624792704 1072274402 310337349 763233993 1440434844 1632335648 1643189472 1044452680 140099210 1559301946 70264175 1733197903 412642195 1367807603 693817260 650089683 566725942 453642172 645329650 1058544964 243656288 504843898 556153934 2044536912 1179823373 234361219 2132190450 1104781178 503844591 691221568 1568263018 811006451 500389807 1783208664 1247118262 834728300 795028709 1275156837 2122615908 1800475480 195365945 1573109213 2072797642 47489775 1749395454 1817099808 1552029954 1238198206 180540256 157475564 1935888194 1906883471 484904044 1775869208 131322532 1056278903 2049166982 1023002719 1136152686 1615545080 116320683 618287300 1463990864 455395781 1945680683 140523097 868325722 1807439499 2061094600 1748028701 1954169337 411220486 1854155386 1234775447 1041321520 1434065199 1816242496 1291258004 553459946 505009344 1692116132 2026154002 1962596981 1861682326 285796424 971909484 1464603910 1302650501 1313198202 1653265649 992823584 1357248023 119906440 1520170849 759201090 763896085 1827663281 1173968567 1096079620 1767240281 60375054 2100344828 183292341 1362349479 1070063414 1562287986 423577784 2032130523 540623250 58793373 1758856351 1735731151 828287184 0.247057 0.018307 0.498233 0.972517 0.858668 0.999879 0.663896 0.403129 0.710727 0.857622 0.073898 0.277315 0.162192 0.740301 0.136532 0.713719 0.697138 0.800848 0.304391 0.086958 0.235101 0.640715 0.717296 0.324757 0.757059 0.742398 0.350716 0.952364 0.579566 0.467854 0.782143 0.787680 0.960400 0.904122 0.955256 0.742240 0.615787 0.999762 0.874952 0.771569 0.689214 0.232023 0.833603 0.150649 0.449064 0.221140 0.475664 0.871833 0.656191 0.055788 0.903021 0.092664 0.003054 0.082430 0.284273 0.826755 0.932949 0.154818 0.837788 0.029836 0.691672 0.500363 0.115717 0.632184 0.160246 0.061067 0.389381 0.916665 0.077801 0.302678 0.762863 0.675704 0.304163 0.992210 0.063482 0.273537 0.844670 0.848134 0.685739 0.835676 0.640974 0.689540 0.234453 0.529846 0.671619 0.006199 0.940601 0.049744 0.877068 0.391439 0.173482 0.854214 0.490466 0.719387 0.935798 0.184239 0.001251 0.829907 0.913926 0.932728 0.077407 0.629011 0.323848 0.517883 0.691111 0.043796 0.078352 0.063564 0.346171 0.538922 0.705753 0.760216 0.578628 0.317694 0.297093 0.398703 0.205307 0.961721 0.675451 0.297625 0.131478 0.661979 0.301336 0.881712 0.899583 0.068511 0.688454 0.892980 0.190433 0.488078 0.529948 0.017429 0.341264 0.203750 0.082357 0.628639 0.348524 0.663361 0.749665 0.098836 0.466126 0.503611 0.375305 0.840549 0.922808 0.555014 0.304540 0.489866 0.750017 0.109801 0.766102 0.258449 0.654382 0.462248 0.986608 0.688979 0.644954 0.991815 0.370084 0.417971 0.398016 0.283444 0.243549 0.982445 0.820314 0.850454 0.400544 0.445466 0.722167 0.112248 0.552068 0.634980 0.028444 0.494298 0.276737 0.306673 0.592642 0.004556 0.347712 0.278108 0.759396 0.543471 0.541992 0.697693 0.273393 0.048358 0.273191 0.850998 0.183553 0.565525 0.445793 0.795518 0.031870 0.067684 0.217471 0.220870 0.374171 0.048353 0.961043 0.290689 0.244896 0.066929 0.812302 0.690185 0.258120 0.180064 0.933783 0.275825 0.491279 0.541648 0.987186 0.964095 0.969638 0.782994 0.706953 0.012686 0.228162 0.447185 0.793480 0.271880 0.257462 0.328555 0.524303 0.947173 0.847395 0.641974 0.466103 0.693620 0.735548 0.713523 0.340037 0.027537 0.872531 0.787938 0.057647 0.547051 0.832264 0.108595 0.007559 0.919365 0.595731 0.915142 0.273977 0.357601 0.806812 0.830949 0.472441 0.206713 0.521807 0.167668 0.466898 0.787680 0.545658 0.077951 0.016413 0.413074 0.640916 0.633388 0.600942 0.014587 0.442876 0.138184 0.655223 0.689496 0.643480 0.604721 0.330574 0.873477 0.388656 0.261686 0.900128 0.451724 0.575805 0.513430 0.399887 0.149274 0.999558 0.939527 0.518731 0.304703 0.306340 0.489629 0.183948 0.572427 0.801728 0.171490 0.235315 0.102205 0.422926 0.200718 0.004282 0.535947 0.608318 0.117114 0.620330 0.043974 0.894994 0.662574 0.238032 0.080166 0.315760 0.945501 0.573077 0.713137 0.657951 0.799750 0.683104 0.238546 0.801760 0.653342 0.565652 0.428420 0.173982 0.413623 0.405964 0.780875 0.003585 0.471833 0.695598 0.286157 0.043122 0.731455 0.050240 0.920806 0.506883 0.599884 0.656349 0.551862 0.953877 0.170986 0.310800 0.557547 0.144754 0.708831 0.456311 0.235164 0.169430 0.645714 0.379027 0.607331 0.922508 0.532624 0.927988 0.592020 0.829893 0.996999 0.420596 0.245925 0.503831 0.032884 0.134738 0.940966 0.378253 0.545126 0.982053 0.254661 0.140950 0.018630 0.291239 0.510400 0.509658 0.897779 0.412929 0.955141 0.720482 0.572207 0.163662 0.841078 0.630967 0.370136 0.767399 0.823472 0.807895 0.937331 0.613346 0.657235 0.555305 0.207155 0.081095 0.697862 0.170724 0.200505 0.985253 0.674600 0.766149 0.017812 0.814446 0.000759 0.936521 0.126089 0.793189 0.523061 0.868272 0.410577 0.995210 0.560158 0.810948 0.431029 0.307731 0.789807 0.009172 0.330737 0.223829 0.156638 0.744374 0.342854 0.396413 0.272418 0.293351 0.079644 0.769861 0.415786 0.458235 0.849554 0.246462 0.572940 0.201970 0.119795 0.522929 0.429892 0.992643 0.843987 0.063183 0.656319 0.944469 0.222913 0.215560 0.772033 0.715148 0.837082 0.804665 0.300784 0.878367 0.927780 0.741739 0.996964 0.001698 0.218960 0.647037 0.540967 0.372265 0.776045 0.384837 0.866531 0.645895 0.014674 0.374474 0.041487 0.528789 0.823540 0.789092 0.478253 0.001385 0.676197 0.429445 0.422199 0.455473 0.448708 0.968491 0.805350 0.519901 0.372467 0.440899 0.890588 0.345827 0.208109 0.669074 0.646962 0.003006 0.722380 0.031166 0.285727 0.380881 0.494290 0.937284 0.771897 0.942126 0.453352 0.862470 0.514153 0.654789 0.438583 0.559590 0.941038 0.592804 0.888803 0.206437 0.859837 0.021773 0.994627 0.876224 0.061988 0.715886 0.774920 0.369019 0.845217 0.451514 0.741281 0.726380 0.092395 0.47090881796755 0.09282688770642 0.07264316188795 0.17140993545517 0.76405888012589 0.12229899370464 0.01716069780233 0.95124002002110 0.58448325153694 0.33893042731620 0.32644657734266 0.33722293508732 0.36677801330591 0.14666158771974 0.66885364322661 0.68214018091438 0.34642845401755 0.26761723054289 0.83979631628746 0.06880021417211 0.28376163299982 0.01449298498288 0.34196877834960 0.19130789907933 0.05825480388039 0.72316492877125 0.04105303008174 0.54152814932642 0.42910904078775 0.87803929391250 0.19554998156498 0.21753237835081 0.20234426197030 0.57968869563482 0.49357754316979 0.06960851161419 0.10520497858029 0.49781077134288 0.86918023332433 0.20346635074772 0.15433893387972 0.22736594774100 0.23938507586075 0.33960870761082 0.67687502177330 0.09114024985560 0.56566157802708 0.28726927479576 0.38824278463593 0.34379272020963 0.21380506648891 0.59966745404319 0.50273256335170 0.90872769264507 0.05099084848937 0.84076610947521 0.74990005393185 0.90422234138546 0.65850620301368 0.97550107038937 0.79537070946331 0.00255035191472 0.55883103095834 0.52554738165680 0.10395016565392 0.96670573151333 0.68020989853349 0.32044922702150 0.05220115342800 0.03190274317800 0.65289023684356 0.17955494562988 0.85552344722161 0.26119880276131 0.23529369046953 0.71789159205192 0.18429324309892 0.47973457325044 0.01048837349339 0.30542438341422 0.97154229638406 0.48387199047450 0.78893426230014 0.60044855418358 0.51586634947545 0.66609077287094 0.40285462703336 0.63914571312948 0.05370066221773 0.13086065419378 0.49103049548243 0.26449849115593 0.03096114779662 0.78732768225972 0.18342398425349 0.34932801829292 0.64889319673864 0.36222697442025 0.68417977803105 0.46350688273473 0.12069693938682 0.90249435188646 0.75941650810686 0.71357514821284 0.77985289761769 0.60580826304666 0.98348242625061 0.29466157143917 0.92623136496283 0.57252092560464 0.70653654448034 0.50604895954931 0.38668680279461 0.93907139627255 0.40787921935605 0.27856375513603 0.61422032978478 0.00549698658122 0.30072561362635 0.29598276476231 0.63947918696026 0.51399665835879 0.91670109656344 0.96816816789647 0.55750442874103 0.91179383847246 0.80820990638593 0.83250866198768 0.36812914265877 0.44579707149256 0.28922058166534 0.34169038111596 0.74465065135137 0.99131289715331 0.02555097782757 0.17929476114416 0.27531509168067 0.49918728956221 0.01524708104669 0.15630795405673 0.54439819934741 0.34406385944733 0.87378378886599 0.55268940888392 0.10598123184308 0.69261944720878 0.87271484160534 0.12749127719036 0.85580713757956 0.88324927052833 0.94235853395276 0.38139317039181 0.76778332673343 0.96483485569159 0.73892657989447 0.53179654448285 0.11820726477182 0.79200890572892 0.31667631305988 0.05996080492079 0.27443864580766 0.02978621775131 0.46653235261546 0.56651062296508 0.86452015594580 0.87189366966728 0.73176495133345 0.84469036169405 0.48088601879691 0.21596487399767 0.89264415692824 0.90880165344757 0.21140648239413 0.53675261522324 0.30387761818615 0.15822625451228 0.87475694964079 0.71489132898136 0.04769702622872 0.94628682800348 0.37899614165488 0.77632662380589 0.01760388941483 0.71115270240209 0.80452505635867 0.76272487102216 0.71955067563238 0.54900739356626 0.72423152524317 0.44276672036777 0.99015997223081 0.80465248689589 0.58051639511457 0.02645580246119 0.60648054572792 0.09226839276046 0.94635695686094 0.47988790850118 0.39677122745195 0.90937574905420 0.51643730649197 0.59359732585931 0.49420962950812 0.11737511799037 0.67315502767720 0.16260768243975 0.35073799516948 0.30726694253122 0.78266127476067 0.25135397687191 0.82487943869178 0.28791545236292 0.60422444104646 0.27683684113441 0.79494572339826 0.55007215166274 0.99138732585833 0.26414366321878 0.63046436670747 0.72431421156747 0.92525838510928 0.68870476163557 0.65156268632353 0.86165812298864 0.89556475855096 0.66423366094822 0.73533500088349 0.45035543853956 0.83718449123638 0.59478980281085 0.54179010411547 0.77897948890268 0.87409991966020 0.99053780263506 0.96489612710185 0.87994264880587 0.14677600031013 0.11551769935432 0.87836072475050 0.05688826498775 0.43419332780942 0.50503111426353 0.88546654520858 0.97444874567753 0.48040480770644 0.41865095908760 0.85364090821949 0.23275907978992 0.56573777921173 0.74357357208219 0.42750262952979 0.85906469291137 0.68270773539225 0.56927211276386 0.85435810119623 0.95645590496235 0.52065894319824 0.37604131063772 0.77753424352281 0.37247702651909 0.25016001633725 0.34836049495879 0.85292066638321 0.97041233354094 0.47499478542858 0.36590774835706 0.56293791064642 0.02908089860207 0.75359305863216 0.58551882848102 0.28772233575646 0.81534264483955 0.31777342499076 0.65342432461972 0.61514568865049 0.82517711874856 0.77042219171379 0.43683353028436 0.42784419415551 0.44764747810325 0.56867304776419 0.95950376416685 0.20065018504251 0.04308075205579 0.57742099052200 0.12298235457701 0.12565855418632 0.81031894618782 0.59261541243039 0.87675317201409 0.73160681014901 0.62745155521573 0.68415996921127 0.13740871247440 0.52344090484102 0.64876122692613 0.57549356247379 0.18552149232775 0.49042007449791 0.18991591886254 0.39905327941472 0.97421570162549 0.61714364920890 0.99604286785632 0.53183924055225 0.41575174513683 0.29354991856911 0.09785901206532 0.79976125640133 0.32179847948615 0.78672039107185 0.67456010614880 0.66738053181709 0.41413496618055 0.79687419181379 0.90057934483925 0.62762338950556 0.12076136576397 0.43491052477920 0.61813549138152 0.70773697123191 0.12724965071508 0.46930025004115 0.99226210572650 0.26356272829369 0.72063169177761 0.95179220107708 0.11442217586402 0.47913371675254 0.90684986307110 0.69794700034026 0.90326023936908 0.89690654753116 0.97117212987081 0.16318157803401 0.41677954853491 0.90887074796353 0.42159691740893 0.18334112188430 0.42320438699833 0.13024312870438 0.20947497217241 0.51623944068397 0.92531846662294 0.03579554287516 0.34800522273521 0.70476047598443 0.85787318906104 0.57194892463744 0.73871661122201 0.71133197474096 0.15034783378253 0.11416312415795 0.14993721682941 0.86782676431879 0.31926586128570 0.56839235335775 0.89207012009911 0.67237742675919 0.01010912349462 0.54428826209375 0.29162548374225 0.64587316803149 0.14603209721335 0.52875570972799 0.42508556333147 0.72708300450657 0.99144443238614 0.75597513460355 0.52773936928288 0.81524248748421 0.05709994424896 0.37448462960813 0.93408432568666 0.21607122325747 0.60854972228056 0.41351747234696 0.46509452137798 0.53122878564220 0.30327218925403 0.84388955828219 0.45449280427248 0.53376796430932 0.54185410142630 0.25754435354512 0.52881740969907 0.52291164581580 0.28733480065727 0.16760461298756 0.38024263401886 0.64519800045197 0.65097612633203 0.13197578545440 0.39363820394916 0.19539924363928 0.87533102095574 0.44929817742985 0.44965956889737 0.91736329550549 0.35237123372191 0.83880982510843 0.34553543959605 0.47886095172091 0.63738665239126 0.94470421339523 0.22384859993163 0.04468417462235 0.16149805555876 0.03732593376817 0.42406005500014 0.74944830318544 0.02062231687196 0.00311994478954 0.59816935826087 0.89821793142306 0.76205765107363 0.87880128013984 0.85349734647285 0.46955993681890 0.77279631417701 0.06918739836145 0.49639687975046 0.31590116933522 0.47396306729988 0.69986045862638 0.55597945848243 0.10595786774302 0.22726243582972 0.33927822939837 0.26379478201634 0.72540967765299 0.90379325899933 0.70038161218409 0.07548992018454 0.51129145152905 0.94704222811698 0.62256472000951 0.32979553914072 0.30177270084912 0.23440371734560 0.03048245713397 0.73704640212780 0.41534662172100 0.87048584701153 0.70268377356728 0.79376424121207 0.00606682575422 0.15519483799137 0.97848559129402 0.79427608991851 0.62621006971220 0.58315873251306 0.41677186496461 0.45571905873207 0.70307333577044 0.28089107095331 0.07177777201868 0.95284071669437 0.54834042435975 0.08917858144412 0.09206908160377 0.82906514143494 0.63616437707057 0.34374935040116 0.92362594242535 0.38407203871401 0.49545271485657 0.21705016379430 0.66854150996712 0.93507503632199 0.14535797217969 0.07995292066014 0.00378028597990 0.42568406208026 0.07760931473057 0.19752853833188 0.15942888105038 0.15473483875920 0.98999495488178 0.86422129912630 0.93114537656244 0.07005006983108 0.85471848794782 0.68376474946972 0.53544296238063 0.91755134364231 0.23315468432268 0.49877551597818 0.57847782577838 0.46470434904264 0.50859300798595 0.12647120940934 0.63596868576188 0.34535546873913 0.88719010301530 0.72254310098900 0.54725233226561 0.85664840509202 0.01793686372836 0.56094693595241 1294896255 311724874 156747740 773137705 1930038028 631514240 951200607 585303106 689209472 1969744058 2070561912 666068989 1356433643 1462978429 934456485 371003109 1894537816 752562712 1400233622 1440372444 332674540 44369954 1720834547 884576604 58277745 648147323 99507136 437792041 1303259011 746162834 676350736 18555843 2104757427 832187601 466746640 1232943849 2031475044 1518391300 881995468 1204432218 1189400911 144099886 1798304756 1360220291 1809562394 1076299531 1490058131 1994934920 1283312732 2108444942 1349203318 1000245131 1721154403 723261707 327158287 1400570068 1293905070 1836000722 392137161 587592313 1144498335 538060267 1285756958 490228388 218882443 1047743739 56247221 1362326921 1078617053 1410168767 1124832088 1660364391 640454186 70264175 161618822 786741678 1000198317 1373288745 1620275403 432676367 1299094870 1282651267 142136050 446683199 1444509985 695107856 1862361682 901996876 295365993 252581894 469595597 889656312 553527738 1822734902 660518123 54128446 1875014398 1729025959 1683623236 96799850 1709074707 1073343722 766753345 1838306978 1194753203 263744324 775493154 262088250 93069052 57912130 2080176895 1097310747 859010843 357646710 983655045 232643829 952310556 997079463 1269034897 1382207969 139158432 796365829 1452645665 1544313646 136626515 1090146909 718198949 947381370 1666015528 1303610108 756203367 607737989 1579812269 125683379 2004606312 279164485 560421405 860243781 2035092126 538448710 1381164883 1560918451 546404706 1659335235 1128306427 1338457781 1129586225 1417617132 1425386520 2005990905 1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 1351247504 1449991046 1217832341 1397552316 2008931809 460116997 594494193 1875461551 1927083130 1561348027 321601395 406694984 593167518 746534936 178997844 1353673852 1157508619 573225936 71255906 56828909 746659732 548646789 1875509000 1402874603 1332334612 109483188 1760743773 898079393 58044103 1785669350 57323606 395314357 1853336689 371088785 900107008 1896741480 1873102157 351414749 868812109 1911876 768739365 2040895254 1617489524 579910537 419754062 495789180 633942293 1025321189 437964119 897905379 sprng2.0/SRC/pmlcg/pmlcg.h100600 764 764 1461 6736173543 14434 0ustar chwangchwang #ifndef _pmlcg_h #define _pmlcg_h #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int pmlcg_get_rn_int ANSI_ARGS((int *igenptr)); float pmlcg_get_rn_flt ANSI_ARGS((int *igenptr)); double pmlcg_get_rn_dbl ANSI_ARGS((int *igenptr)); int *pmlcg_init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int pmlcg_spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int pmlcg_get_seed_rng ANSI_ARGS((int *genptr)); int pmlcg_free_rng ANSI_ARGS((int *genptr)); int pmlcg_pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *pmlcg_unpack_rng ANSI_ARGS(( char *packed)); int pmlcg_print_rng ANSI_ARGS(( int *igen)); #ifdef __cplusplus } #endif #endif sprng2.0/SRC/pmlcg/READMEver2.CHANGES100644 764 764 260 6736173543 15673 0ustar chwangchwang7 June 1999; Chris S. Makefile: 1. in 'all ;' added 'checksprng' 2. added section 'checksprng'. ---------------------------------------------------------------------------- sprng2.0/SRC/make.INTEL100600 764 764 1674 6736173543 13577 0ustar chwangchwangAR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = gcc CLD = $(CC) # Set f77 to echo if you do not have a FORTRAN compiler F77 = g77 #F77 = echo F77LD = $(F77) FFXN = -DAdd__ FSUFFIX = F MPIF77 = mpif77 MPICC = mpicc # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDIR = -L/usr/local/mpi/build/LINUX/ch_p4/lib MPILIB = -lmpich # Please include mpi header file path, if needed CFLAGS = -O3 -DLittleEndian $(PMLCGDEF) $(MPIDEF) -D$(PLAT) -I/usr/local/mpi/include -I/usr/local/mpi/build/LINUX/ch_p4/include CLDFLAGS = -O3 FFLAGS = -O3 $(PMLCGDEF) $(MPIDEF) -D$(PLAT) -I/usr/local/mpi/include -I/usr/local/mpi/build/LINUX/ch_p4/include -I. F77LDFLAGS = -O3 CPP = cpp -P sprng2.0/SRC/check_gen.c100600 764 764 30706 6736173543 14155 0ustar chwangchwang/*--- Chris S.: June 1999 */ /*--- reads in, first an integer as a generator type and next elements from */ /*--- a data file */ /*--- checking Default C interface ---*/ /*--- added 'int gtype' 'scanf("%d\n", @gtype)' and gtype to all init_sprng */ #include #include #include /*#define USE_MPI Uncomment to test with MPI */ #ifdef USE_MPI #include #endif #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 #define diff(a,b) (((a)>(b))?((a)-(b)):((b)-(a))) int gtype; /*--- adding generator type ---*/ #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen1, *gen2, *gen3, *gen4, **gen5, **newgen1, **newgen2, i, size; char *s; int tempi, tempi2, correct, result = YES; int ngens, seed, nsp; float tempf1, tempf2; double tempd1; ngens = 3; seed = 985456376; gen1 = init_sprng(gtype,0,ngens,seed,PARAM); /* initiallize generators */ gen2 = init_sprng(gtype,1,ngens,seed,PARAM); gen3 = init_sprng(gtype,2,ngens,seed,PARAM); /* ____________________ Check arithmetic ___________________________ */ #ifdef CREATE_DATA for(i=0; i<500; i++) /* generate integers */ printf("%d\n", isprng(gen1)); for(i=0; i<500; i++) /* generate floats */ printf("%8.6f\n", get_rn_flt(gen1)); for(i=0; i<500; i++) printf("%16.14f\n", sprng(gen1)); /* generate double precision numbers */ #else correct = YES; for(i=0; i<500; i++) /* check integer arithmetic */ { tempi2 = isprng(gen1); scanf("%d\n", &tempi); if(tempi != tempi2) { printf("%d. %d, %d\n", i, tempi, tempi2); result = correct = NO; } } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check float arithmetic */ { tempf1 = get_rn_flt(gen1); scanf("%f\n", &tempf2); if(diff(tempf1,tempf2) > 1.0e-6) { printf("%d. %8.6f %8.6f\n", i, tempf2, tempf1); result = correct = NO; } } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check double precision arithmetic */ { double tempd2; scanf("%lf\n", &tempd1); tempd2 = sprng(gen1); if(diff(tempd1,tempd2)>1.0e-14) { printf("%d. %18.15f %18.15f\n", i, tempd1, tempd2); result = correct = NO; } } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator spawns correctly\n"); #endif /* ____________________ Check spawning ___________________ */ nsp = 0; nsp += spawn_sprng(gen2,2,&newgen1); /* spawn new generators */ nsp += spawn_sprng(newgen1[1],2,&newgen2); #ifdef CREATE_DATA for(i=0; i<50; i++) /* generate numbers from new stream */ printf("%d\n", isprng(newgen2[1])); #else if(nsp != 4) /* check if spawn_sprng returned correct value */ { result = NO; printf("FAILED: Generator was unable to spawn\n"); } correct = YES; for(i=0; i<50; i++) /* check new stream */ { int irn; scanf("%d\n", &tempi); irn = isprng(newgen2[1]); if(tempi != irn) { printf("%d. %x %x\n", i, tempi, irn); result = correct = NO; } } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after spawning\n\tThis is probably an error in spawning the generators\n"); else report("PASSED: Generator spawns correctly\n"); #endif /* _____________________ Pack and unpack generator ______________________ */ #ifdef CREATE_DATA for(i=0; i<50; i++) /* generate from original stream */ printf("%d\n", isprng(newgen2[1])); spawn_sprng(newgen2[1],1,&gen5); /* spawn from original stream */ for(i=0; i<50; i++) printf("%d\n", isprng(gen5[0])); #else size = pack_sprng(newgen2[1], &s); /* pack the original stream */ if(size == 0) /* check if pack_sprng succeeded */ { result = NO; printf("FAILED: Generator was unable to pack\n"); } gen4 = unpack_sprng(s); /* unpack generator */ correct = YES; for(i=0; i<50; i++) /* check if unpacked stream = original stream*/ { scanf("%d\n", &tempi); if(tempi != isprng(gen4)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks stream correctly\n"); correct = YES; spawn_sprng(gen4,1,&gen5); /* spawn from unpacked stream */ for(i=0; i<50; i++) /* check if spawned stream is correct */ { scanf("%d\n", &tempi); if(tempi != isprng(gen5[0])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not spawn correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks spawning information correctly\n"); #endif /* _______________ Free generators ___________________ */ #ifndef CREATE_DATA report("Checking free_sprng for integer generator ...\n"); nsp = free_sprng(gen1); nsp = free_sprng(gen2); nsp = free_sprng(gen3); if(nsp != 6) /* check if free rng returns # of available generators */ { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,6); } nsp = free_sprng(gen4); nsp = free_sprng(gen5[0]); nsp = free_sprng(newgen1[0]); nsp = free_sprng(newgen1[1]); nsp = free_sprng(newgen2[0]); nsp = free_sprng(newgen2[1]); if(nsp != 0) { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,0); } #endif #ifndef CREATE_DATA report("\n... Completed checking generator \n\n"); #endif return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, **gen2, i; int tempi, correct, result = YES; int seed, nsp, size; char s[MAX_PACKED_LENGTH]; seed = 985456376; /* ___________ ngens incorrect in init_sprng _____________ */ #ifdef CREATE_DATA gen1 = init_sprng(gtype,0,1,seed,PARAM); /* take ngens = 1 */ for(i=0; i<50; i++) printf("%d\n", isprng(gen1)); #else correct = YES; fprintf(stderr,"Expect SPRNG WARNING: ngens <= 0.\n"); gen1 = init_sprng(gtype,0,0,seed,PARAM); for(i=0; i<50; i++) /* ngens should be reset to 1 */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not produce expected stream when ngens is 0 during initialization.\n"); else report("PASSED: Generator produces expected stream when ngens is 0 during initialization.\n"); nsp = free_sprng(gen1); /* check if only one stream had been produced */ if(nsp != 0) { result = NO; printf("FAILED: Generator produces %d streams instead of 1 when ngens is 0 during initialization.\n",nsp+1); } else report("PASSED: Generator produces the correct number of streams when ngens is 0 during initialization.\n"); #endif /* _______________ invalid range for gennum _______________ */ #ifndef CREATE_DATA correct = YES; fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(gtype,-1,1,seed,PARAM); /* negative gennum */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(gtype,2,1,seed,PARAM); /* gennum >= ngens */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not return NULL when gennum is incorrect during initialization.\n"); else report("PASSED: Generator returns NULL when gennum is incorrect during initialization.\n"); #endif /* _______________ Invalid parameter ______________________________ */ #ifdef CREATE_DATA gen1 = init_sprng(gtype,0,1,seed,SPRNG_DEFAULT); /* use default parameter */ for(i=0; i<50; i++) printf("%d\n", isprng(gen1)); #else correct = YES; fprintf(stderr,"Expect SPRNG WARNING: Invalid parameter\n"); gen1 = init_sprng(gtype,0,1,seed,1<<30); for(i=0; i<50; i++) /* check if default parameter is used ... */ { /* ... when an invalid parameter is passed. */ scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } #endif /* _____________________ Check spawn with invalid ngens _________________ */ #ifdef CREATE_DATA spawn_sprng(gen1,1,&gen2); /* spawn one generator */ for(i=0; i<50; i++) printf("%d\n", isprng(gen2[0])); #else report("Checking spawn with incorrect nspawned\n"); fprintf(stderr,"Expect SPRNG WARNING: nspawned <= 0.\n"); nsp = spawn_sprng(gen1,0,&gen2); free_sprng(gen1); if(nsp != 1) /* check if one generator was spawned */ { result = NO; printf("FAILED: Spawn returned %d streams instead of 1 when nspawned was greater than permitted.\n", nsp); } for(i=0; i<50; i++) /* check spawned stream */ { scanf("%d\n", &tempi); if(tempi != isprng(gen2[0])) result = correct = NO; } free_sprng(gen2[0]); if(correct == NO) printf("FAILED: Generator does not spawn correct stream when nspawned was 0.\n"); else report("PASSED: Generator spawns correctly when nspawned was 0.\n"); #endif /* ____________________ Unpack invalid string _____________________ */ #ifndef CREATE_DATA memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ { result = NO; printf("FAILED: Generator unpacks invalid string\n"); } else report("PASSED: Generator detected invalid string while unpacking\n"); #endif return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; i #include #include /*#define USE_MPI Uncomment to test with MPI */ #ifdef SPRNG_MPI #include #endif #define CHECK_POINTERS #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 #define diff(a,b) (((a)>(b))?((a)-(b)):((b)-(a))) int gtype; /*--- adding generator type ---*/ #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen1, *gen2, *gen3, *gen4, **gen5, **newgen1, **newgen2, i, size; char *s; int tempi, correct, result = YES; int ngens, seed, nsp; float tempf1, tempf2; double tempd1, tempd2; ngens = 3; seed = 985456376; gen1 = init_sprng(gtype,0,ngens,seed,PARAM); /* initiallize generators */ gen2 = init_sprng(gtype,1,ngens,seed,PARAM); gen3 = init_sprng(gtype,2,ngens,seed,PARAM); /* ____________________ Check arithmetic ___________________________ */ correct = YES; for(i=0; i<500; i++) /* check integer arithmetic */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check float arithmetic */ { tempf1 = get_rn_flt(gen1); scanf("%f\n", &tempf2); if(diff(tempf1,tempf2) > 1.0e-6) result = correct = NO; } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check double precision arithmetic */ { scanf("%lf\n", &tempd1); tempd2 = sprng(gen1); if(diff(tempd1,tempd2)>1.0e-14) result = correct = NO; } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator passed the reproducibility test.\n"); /* ____________________ Check spawning ___________________ */ nsp = 0; nsp += spawn_sprng(gen2,2,&newgen1); /* spawn new generators */ nsp += spawn_sprng(newgen1[1],2,&newgen2); if(nsp != 4) /* check if spawn_sprng returned correct value */ { result = NO; printf("FAILED: Generator was unable to spawn\n"); } correct = YES; for(i=0; i<50; i++) /* check new stream */ { scanf("%d\n", &tempi); if(tempi != isprng(newgen2[1])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after spawning\n\tThis is probably an error in spawning the generators\n"); else report("PASSED: Generator spawns correctly\n"); /* _____________________ Pack and unpack generator ______________________ */ size = pack_sprng(newgen2[1], &s); /* pack the original stream */ if(size == 0) /* check if pack_sprng succeeded */ { result = NO; printf("FAILED: Generator was unable to pack\n"); } gen4 = unpack_sprng(s); /* unpack generator */ correct = YES; for(i=0; i<50; i++) /* check if unpacked stream = original stream*/ { scanf("%d\n", &tempi); if(tempi != isprng(gen4)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks stream correctly\n"); correct = YES; spawn_sprng(gen4,1,&gen5); /* spawn from unpacked stream */ for(i=0; i<50; i++) /* check if spawned stream is correct */ { scanf("%d\n", &tempi); if(tempi != isprng(gen5[0])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not spawn correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks spawning information correctly\n"); /* _______________ Free generators ___________________ */ report("Checking free_sprng for integer generator ...\n"); nsp = free_sprng(gen1); nsp = free_sprng(gen2); nsp = free_sprng(gen3); if(nsp != 6) /* check if free rng returns # of available generators */ { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,6); } nsp = free_sprng(gen4); nsp = free_sprng(gen5[0]); nsp = free_sprng(newgen1[0]); nsp = free_sprng(newgen1[1]); nsp = free_sprng(newgen2[0]); nsp = free_sprng(newgen2[1]); if(nsp != 0) { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,0); } report("\n... Completed checking generator \n\n"); return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, **gen2, i; int tempi, correct, result = YES; int seed, nsp, size; char s[MAX_PACKED_LENGTH], *s2; double tempd; seed = 985456376; /* ___________ ngens incorrect in init_sprng _____________ */ correct = YES; fprintf(stderr,"Expect SPRNG WARNING: ngens <= 0.\n"); gen1 = init_sprng(gtype,0,0,seed,PARAM); for(i=0; i<50; i++) /* ngens should be reset to 1 */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not produce expected stream when ngens is 0 during initialization.\n"); else report("PASSED: Generator produces expected stream when ngens is 0 during initialization.\n"); nsp = free_sprng(gen1); /* check if only one stream had been produced */ if(nsp != 0) { result = NO; printf("FAILED: Generator produces %d streams instead of 1 when ngens is 0 during initialization.\n",nsp+1); } else report("PASSED: Generator produces the correct number of streams when ngens is 0 during initialization.\n"); /* _______________ invalid range for gennum _______________ */ correct = YES; fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(gtype,-1,1,seed,PARAM); /* negative gennum */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(gtype,2,1,seed,PARAM); /* gennum >= ngens */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not return NULL when gennum is incorrect during initialization.\n"); else report("PASSED: Generator returns NULL when gennum is incorrect during initialization.\n"); /* _______________ Invalid parameter ______________________________ */ correct = YES; fprintf(stderr,"Expect SPRNG WARNING: Invalid parameter\n"); gen1 = init_sprng(gtype,0,1,seed,1<<30); for(i=0; i<50; i++) /* check if default parameter is used ... */ { /* ... when an invalid parameter is passed. */ scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } /* _____________________ Check spawn with invalid ngens _________________ */ report("Checking spawn with incorrect nspawned\n"); fprintf(stderr,"Expect SPRNG WARNING: nspawned <= 0.\n"); nsp = spawn_sprng(gen1,0,&gen2); free_sprng(gen1); if(nsp != 1) /* check if one generator was spawned */ { result = NO; printf("FAILED: Spawn returned %d streams instead of 1 when nspawned was 0.\n", nsp); } for(i=0; i<50; i++) /* check spawned stream */ { scanf("%d\n", &tempi); if(tempi != isprng(gen2[0])) result = correct = NO; } free_sprng(gen2[0]); if(correct == NO) printf("FAILED: Generator does not spawn correct stream when nspawned was 0.\n"); else report("PASSED: Generator spawns correctly when nspawned was 0.\n"); /* ______________________ Try using freed stream _______________________ */ if(isprng(gen2[0]) != -1) { result = NO; printf("FAILED: isprng accepts freed stream\n"); } else report("PASSED: isprng detects freed stream\n"); /* _______________________ Unpack invalid string ________________________ */ memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ { result = NO; printf("FAILED: Generator unpacks invalid string\n"); } else report("PASSED: Generator detected invalid string while unpacking\n"); /* ________________________ Invalid ID's _________________________________ */ report("Checking handling of invalid ID's\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempd = sprng(&tempi); if(tempd != -1.0) { result = NO; fprintf(stderr,"FAILED: sprng accepts invalid stream ID\n"); } else report("PASSED: sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempd = sprng(NULL); if(tempd != -1.0) { result = NO; fprintf(stderr,"FAILED: sprng accepts NULL stream ID\n"); } else report("PASSED: sprng handles NULL stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = isprng(&tempi); if(tempi != -1) { result = NO; fprintf(stderr,"FAILED: isprng accepts invalid stream ID\n"); } else report("PASSED: isprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = pack_sprng(&tempi,&s2); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: pack accepts invalid stream ID\n"); } else report("PASSED: pack handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = free_sprng(&tempi); if(tempi != -1) { result = NO; fprintf(stderr,"FAILED: free_sprng accepts invalid stream ID\n"); } else report("PASSED: free_sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = spawn_sprng(&tempi,1,&gen2); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: spawn_sprng accepts invalid stream ID\n"); } else report("PASSED: spawn_sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = print_sprng(&tempi); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: print_sprng accepts invalid stream ID\n"); } else report("PASSED: print_sprng handles invalid stream ID correctly\n"); return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; id܊0"k܌"p|$w(̌<9\t5\Slo\\~̊c olj,,LdL$,F4 {?JZgl&r<B̋*L|||"h&<'(J)T!TT!# *x1DT8DTD0__gmon_start__libm.so.6_DYNAMIC_GLOBAL_OFFSET_TABLE__init_fini_IO_stderr_atexitlibgmp.so.2mallocfreeprintffprintfmpz_mulmpz_addmpz_initmpz_setmpz_clearmpq_get_denmpq_get_nummpq_initmpz_negmpq_set_denmpq_set_nummpz_submpz_absmpz_add_uimpz_cmpmpz_cmp_uimpz_mul_uimpz_init_set_uimpz_fdiv_qmpz_sub_uimpz_fdiv_q_2expmpz_init_setmpz_get_uimpz_init_set_strmpz_set_strmpz_modmpz_pow_uimpz_powmlibc.so.6__libc_init_firstexitmemcpyfopenmemsetatoistrcpyfscanftimeclocklocaltime_environ__environenviron_start_etext_edata__bss_start_endSPTT4RR.R'SS"S SS/S S*S S$S(S!,S0S 4S8S ؃FSRB9|PB؍e[^_U4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%AQ Ѝe[^_Uu ]EÉU4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%APP $XIe[^_ÍvUWVSEE} (E hjh`hhhPT>hhu uVpE u E1} Z19} G]hhj(p‰ tċuv r GuFFBP ~-5ARhhPT3Vо Pu FEpr3vVjkjE@$B$uv r E@Bu62E@ %5mBuv +r zuJz ~ REQF؃E QRB9E|߃G9} E @uFFE PBEu}t'19} ~ u4pƒ`G9} E e[^_ÍvUVSME ]E1҉44tB~M D!B~1҉DB~e[^U WVS}vDKy1ۍv1ɉu TA~C~߻Uv D"C~19]~DuC9]e[^_ÍvUlWVS1}$}Av1}8 8u@|1u1)‰F~1uhhPT$@\ܤ\إEE E E EEE" EB vEEEz EEE EESvEE EEAEEEN EvEE ErE EEE EvEEE{E EEE E< vEE EGE3EEEE VEE E2E EEEE@VhLhPTv}WGǁ} %Eԉׁ} U܋}WЅ}%)‰U}W y%)‰Uċ}WЅ}%)‰UEuЍ}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|u}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|EЍME1҉<<|B~M D!B~1҉DB~E EЋ}GE E؉Ge[^_Uu PBPBUWVS]{0҉Ѓ(hhPZiƉu Vj3ksV{0҉U֋CEK KMVjjEEPkփ$Vjs 5kVjs&kVjskփ$VjskVjs j֋K$QUC$@ ‰UK$ U[$]S C ‰UVjjuj֋EM )‰ M 1e[^_ÐUE@ ÐU WVSuuhh2j(hà u1SjujEU91t FO)ȃ thuhhPT1,C0EuuVjjujEusUE ‰SC Pju,jECPjujE(CPjujECPjuiEC PjuiE$ujjujM΁u% EUЃ MUC vhhPTS1AC$PB؍e[^_ÐUS]hhs ss h]ÐU4WVSEEE`E-EEZEE11EEEŰM#t vEЍB!u]EЃ EŰ}#Wt vEЍB!uuEЃ mMyEMMEME}E̍B!uM̉M̺ +UܸE}WEЍB!uM1M̋ẼM E}}؋M#9t E̍B!u}̉}EMQM؋}#Tt vEЍB!uM1M̋ẼM ƃEAM܃(}Ge[^_U WVSUR$U}w WUO_(9]+]<u؉>EH9}-MMuEu3}؉CEH9|ۋMuDE,(9}B9|}@HMԋ@EЋE EE3EEuE/7uuVJVD}ԋɋ}ЉEH9})uuEu3}ЉCEH9|ۋMuDE,(9}B9|E}} MM̍uuȋ}}E9}SM Mu}M@EuB}MD@t!hhhhhPTu}D%?DUx$vC@tMD%?JyE]K9]}uP}MG}9|ux}@ EM̋ E3EEuE/7uȉUuu>u>!uȉUaEM3uCUB9|֋}DM̋,(9}v @9|u@x}@EM̋ E3EEuE/7uȉUuu>u>#vuȉUEM3uCUB9|֋}DM̋,(9}v @9|EEu9u tNE}9}M9M t7uNu~uu}MtO}M}OXu0u Nu}}M MEE\BJ9U}"uXЋ}<tEE9E|}Eju6u~$}ċ^ NMFV(9|)44}  HyEHJyUJ44}Hy uNMq}GEM9M|EM2}uuvEpvMu Mq$uY y}AQ(9|)  u<%hPT41xC$0$USRjuLES RjuLESRju}LE$SRjuiLESRjuXLES$RjuGLE$S(Rju3LEuuVjjuULEU?1QR,$[,MU щ1QR,$[4U 1QR,$[#t&ET#x&U ‹}Wuu#%5%!w}EKHe[^_U0WVS11ɋE#UE}t E vEEEEE&=%}ء%Eԉ֍4U1QR,$}E Em<$ZYm#]#uԋ}}ЋM UЉU#M؉ME#EԉEЉE}#MU#WU}ut_M΋UщMU1QR,$1QR,$}E Em<$ZYmU}}E!E}!}E܃}? ء%!E %U!ʉUE} W%!!Oe[^_UtWVSU%Uh'h>] ]S@Eh'h?S@Eă}Eu 9u}ȍ<}]ĉ]h'hEj<@u }8B,h'hKuk@B(h'hL]ȍRL@B$Z0U%Q4ur}]Z8urBB'z$tz(u11EE܋} 9}-]ċ uQuur$VuVr(q BMBU# %M#%UE}9}kE|&#]]&#UU}uuċ}z$}URWbE%%UډUU1QR,$%1ډQR,$4'}] ]m<$ZYmUUU%E#%Eu#5%u}UW%!5%!w7}ċ]Z$]URSUUS5%!3=%!{]]M ЉEɉM# %M#%EEEЋu9u}ċB(B]H B9sAHuċR(}:R(%!R(5%!rE}} ]K]u܉uE9u}č<}]؋ű}ċR(U] Quur$u~uuuEu9u}T=%}%]J(u}J(TTR(]!uR(}!DG}]9| BMBU# %M#%UEu9ukE=|&#}}&#UU}u]ur$uURVE=%%UUU1ډQR,$5%1QR,$4'}] ]m<$ZYmUUU%E#%Eu#5%u}UW%!5%!w7}]Z$]URSUUS5%!3=%!{]]M ЉEɉM# %M#%EEEЋu9u}B(B]H B9sAHuR(}:R(%!R(5%!rEE܋}9} tOE؋]9]Lu9u t8}O}؅~}}؋]؋ủ|K]؅uԋ]̉su耵} O}U+UU]č]vEEMI9M}(uR(}<u|tEE9M|}!E]9]U+UUuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$4'}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5%!4ʋJ,R$=%!|E]9]EM}"uu}܋]č<}vEuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$4'}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5%!4ʋJ,R$=%!|E]9]EMEče[^_ÍvUWVS}uh<'hPTͰB9E |Pu h'hPT議} |9} |Wju h(hPT芰1Uve vh4(hPTe1%Eh'h]KP6 M @9}vDB9|uPE5/7PVjut0P蕱^(uSSB 9;s{tBMM N~ h'hNPC6Fh'hNP&6‰V ~tu1)vF$V F(BFN0ɉVF0HBe[^_ÉU WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$x(}] ]m<$ZYm_,TO,W$ʋO,W$%!ʋO,W$%!\_,G$T1QR,$ɋ1QR,$(e[^_U WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$(}] ]m<$ZYm_,TO,W$ʋO,W$%!ʋO,W$%!\O,W$De[^_ÉUu]EÉUWVSu} E h(hPT^(vSv8vu 6vEuM1v0SS>1 9u ]h'ho@PP3‹Ph'hp@P13‹P xtP t@$P @(BBR0҉P@0HBF9u y} =B}M9}t&19u ~vM43F9u E e[^_ÐUVSu19^~F 4聭C9^~~vjv bVY BBe[^ÍvU WVSEEP00ۋx։uT2Uh'hu1Ɖu uE 1rVjM1#4֋EpV'My҉UVjEp3փ VjMq 3VjEp3VjMq3փ$VjEp,3VjMq03VjEp4z3փ$VjMq8e3֋EX(H0IM 19}/CEERjjEPUh3UG9}ҋE4ƋMY$A0E19}.CEERjjEPU 3UG9}ҋM4΋ME )ʉЍe[^_ÉU WVSh'hjj h+V0R.j h+VE E}9}uUR`M}9}yEe[^_ÍvU@WVSU~#MuJRU RQUMU܉MEj Ej h+P2MMQ裗U܍RR贕É]1}~pS~E9u~[}}Eu UURS`Suuu謕} F9u~ S&E EȋM9Mu̍]SH}̉}}Љ}M̉MMЉMuűURURS}}ԋ}}؃19]~1UR C9]u19]~1URɕ C9]u蕖M}ԉ9}؉yEe[^_U WVS1j h+uRj h+uV貕9]~1uU|~"Vu WaWuu腔 C9]ՍUR0e[^_U WVS}u ]SЕVWSE| EPt1e[^_ÍvU WVS}uK]Sru uS薔E|EP膔u v1pvU t]SVuSCE| EP2u1fuGPu uBve[^_ÍvUEu PPÉUEu PP脔ÉUWVS]u}u u}.jSSՑ VWS fujuu赑 u u襒~6VWS ftjSSjSS juu 뺉VWSd ftjSSϓ MSQSQEe[^_ÉUWVS}]S裓uV蚓WSCSu V虓WS"$SVVǒS豒EUEBEBEe[^_ÉU8WVS}e1j h+u@j h+uV蠒9]~3uvUԅ|~"Vu WMWuuq C9]ՍURv}WӒuVʒ]Suu WMIMȋM Muuuuu V@0uuuuWS*SVu $V觑S衑W蛑e[^_ÍvU$WVSu }UR8UR/]S&j h+V)j h+S$WSq}.jVVa u$u(VV fujSSA WS5~6u$u(V& ftjVVjVV苑 jSS 뾉u$u(V ftjVV[ މMVQVQEe[^_ÉUhWVSM=j KMAu P\j 5MA j%Pwj MA$P$ j h+uVaj h,]SQVMq$ SMq$ƎURMUԉQU؉QQQ }AMQQQRI4My)׉}R{E1ۃ9}'vPECVEPَ E C9|܋MM̋MMЋMMMM}WMI$M]SuVuS萏Su VuSm$SVVSUUUUUUjWW.WuuVMUQUQ W輎 UR谎UR觎19]~1vUR荎 C9]uYe[^_ÐUWVSUr_Ur TUr$)} 1ۋU9Z~1GP) C9w}1ۋU9Z~1GP C9wŽe[^_ÉUPWVSu臎MMQ{u uu4u }4]SKuVBWSSu VAWSʋ$SVVoSYUUUUUUu4U$RU RURURU,RU(Ru uVUMUQUQu uVt؉ u u8uՌu͌u襍}܃ 19]~1WR詌 C9wv}19]~1vWRy C9wF1e[^_U,WVS] j h+UUR}uuuOjuuҌ$SU܉URjuu5؉u uԍ]SDuSu0u'Sыuɋe[^_ÐUWVS]j h,utVۋV}̉pWUp׉ j h+ulV蝋uVVsjVV$SxpW4jWW[؉E׉ p]S0DlSut@Spߊ1ۋtll1}u j llNC~ɋ}} uuwuOM܃ 19]~01ҋAPhdIh Cd9q M19]~31ҍvAPhdh Cd9qŠEP։1ۋu~uvC)؋}<t)؍X[^_ÐUWVSu h-,hMSZESUEt}u 1E}9}}>]jH!}ƋlRE4uU)lj}U9UT]}t ~gEEE9E}!5TE] maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. multiplier not valid. Using Default paramlcg.c0048 bit Linear Congruential Generator with Prime Addendp> maximum number of independent streams: %d Independence of streams cannot be guranteed. WARNING: advance_seed: multiplier not acceptable. WARNING: advance_seed parameters for multiplier %d not available ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters not acceptable. %s seed = %d, stream_number = %d parameter = %d ] 7 ?a ad S_N_i%s from %s: %s WARNINGsi_doublegenerator has branched maximum number of times; independence of generators no longer guaranteed==lfg.c00Additive Lagged Fibonacci Generatorinit_rngTotal_gen <= 0. Default value of 1 used for total_genWARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. Parameter not valid. Using Default paramchanging global L value! Independence of streams is not guaranteedchanging global seed value! Independence of streams is not guaranteedspawn_rngNspawned <= 0. Default value of 1 used for nspawnedERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. unpack_rngdifferent global seed value! Independence of streams is not guaranteed %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. lcg64.c0064 bit Linear Congruential Generator with Prime Addend>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d  7 ?a ad S_N_i]?8ZWARNING: si_double -- RNG has branched maximum number of times. Independence of generators no longer guaranteed =mlfg.c00Multiplicative Lagged Fibonacci Generator=WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. =;=WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. cmrg.c00Combined multiple recursive generator>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d 235711133141611513311321101715372286728091293027097804800000000100000000000000000000000pmlcg.cWARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. 00Prime modulus LCGACACWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d memory allocation failure in file: %s at line number: %d ERROR: Invalid generator ID %p checkid.cH(\\8\T|X|ܹ4@L L$ ltP pd| ܿh|p u{meD  B 8 u 9 "_.'Uino,?16_.'Uino,?16@qo]QE;!aUI7_S51)#weG-)#C! wqYC;+{k_MKEA#{smgO73-skeaYO){eK53)]C% g+wqQG?5 ymiO'sqkUS5/ok]E/)!uiWI- }wq_[;)# }woe/ sig][C3wmgaOG1 {qc_YW/-!yso[UIE1-+sa[A)kS93{[WE9! _YUM#o_GA3! yuW=' ysaSIG%5/smI7-+%qYG51+#ucY iga]K?+YSOCwkKEA;-!ߴߴߴߴߴߴߴyߴoߴQߴ=ߴ1ߴ-ߴ!ߴߴ޴޴޴޴޴s޴m޴k޴G޴7޴޴ ޴޴ݴݴݴݴݴ}ݴiݴeݴMݴܴܴܴܴܴܴܴyܴuܴ[ܴOܴIܴ9ܴ%ܴ!ܴܴ ܴܴܴ۴۴۴۴۴۴w۴q۴g۴a۴O۴C۴A۴/۴#۴۴ ۴ڴڴڴڴڴڴڴQڴGڴ5ڴ3ڴ'ڴڴڴ ڴڴٴٴٴٴٴٴٴٴٴٴٴsٴaٴ9ٴ3ٴٴٴٴششششششششsش[شSشAش%ششش ش״״״״w״e״]״S״M״G״E״9״'״״״ ״״ִִִִִִִmִaִWִUִ1ִ'ִִմմմմմwմsմeմUմ;մ+մմԴԴԴԴԴԴԴԴԴԴԴԴ}ԴkԴMԴ3Դ'ԴӴӴӴӴӴӴsӴoӴ=Ӵ-Ӵ!ӴӴҴҴҴҴҴҴҴkҴeҴ+ҴҴҴҴѴѴѴѴѴѴѴ}ѴwѴ]ѴYѴMѴAѴ/Ѵ'Ѵ#ѴѴѴѴдддддддUдIд?д+д'ддд дϴϴϴϴϴϴϴϴϴϴϴϴϴϴsϴeϴaϴ_ϴUϴ#ϴϴϴϴδδδδδδδδ{δ]δQδKδ9δ5δ#δ!δδδδʹʹʹʹʹʹʹʹʹuʹmʹcʹ]ʹOʹ=ʹʹ̴̴̴̴̴̴̴̴}̴a̴S̴5̴/̴%̴̴̴ ̴̴˴˴˴˴˴˴˴˴˴i˴Y˴S˴K˴A˴-˴)˴˴˴˴ʴʴʴʴʴʴʴyʴiʴOʴ=ʴ7ʴ1ʴ-ʴʴɴɴɴɴɴɴɴɴkɴ[ɴUɴ)ɴɴ ɴȴȴȴȴwȴoȴQȴEȴ)ȴȴǴǴǴǴǴǴǴǴǴǴmǴiǴgǴcǴKǴIǴ+Ǵ'ǴǴƴƴƴƴƴƴqƴgƴ_ƴYƴAƴ탴DedziFDz5IEȱ3G ˰猰L;ѯgPҮRԭ˓SSӬiTիW֪X]۩9[Aiݨ`_!ߧi`!Ӥ)dk&ͦ]h) ͪk)sk -qr)3ݴ)u5'Ѹww9 G~>o˂;C7ŝ'GȜъL ΛM ͚Pҙ[UY٘[KZٗM[ݖG_+qޕ៕b#A gC'g㨓QjK, Gn1km_v 7Ay{:?~>DyǍeH 9̌oPԋW=Eيo\]މ{^ Eѡ=c%Eǩj5,-mn/;vc77~>mƒm/Fwuʂ5cN 9Ӂ)3Xڀ \OM)a%!~;~i~k,~}}p}k3}|s|x|;|{?{ {@{{ezzGzz yyMyy+x=xUxxKw%w_w="wvvgv(vuuu[mu0uttvtq9tsgs=sAssrLJr7Ir rqquQqq9pp3ZpApo٠oaoy$onnln.nmUmqtm6mll/{l?llkkIk%kjj;SjjiAiq_i=!iohhkh.hg/gougA7gfsf5fuDffueeMeedCdXddc{cccy'cbbobk1bcaa]ya':a`˽``C``__KS__^'^a]^!^]]h]]+]I\\s\7\ [[[C[[ZZUNZZYY]Y!YXŦXjX,XWWtW58WcVVVCFVVUUQUUTT]T3 ToSSihS,SR3RwR9RQOQwQHQ QPoPUPP=OOfO*ONN}rN6N!MMŁMEM M]L%LRLGLKK+dK'K#J!JAvJ9JIIoIIIq IHHsWHHG'GhGA-GF]FCxF>>L>>==;a=&=_<!<q<5<;;];{J;[;y::[:":9s9Wp94988[85I887×7\7"7c6 6r686k555I5/ 54)4[4 4%3ì3q363-2'2˅2J2w2E11_1%1030uy0?0]0q//V//..l.1.)---_H- - ,,^,$,+E+t+;;++;*Ϗ*%U**)[)l)2)(ſ(S(L((''d'-'Q&3&&E&G &Y% % `%y&%Q$Ͳ$x$@$O$#)#1Y# #""t";"="!G!KV!)!S ݫ s 9  eVtS<X %wo@ǖ_)'CY~;E ']e-1N? mC4CmW SQzC !f./ʼniRux> gISg%1+_}X!;~]IM%o:o g c / G } c Y Y$ o m P  C ?~ ;J  Kw C  }kt@Q s@YuBuGxF={;O{[K\, o_@_Ès\/%Y\56}-oa9gM7/{]YQ;95/K?1+!}sgA)okYWMA3-yigW=M1{qiWE'{yU3- wm_YMA= }ua]1 wSC;%iecAcWEseq]QE5/)W9+)uYQ3 siQI?wqgeC=;wq]MA-]3ymeOMGA3#!WO31'wmkSOI;51oie)C yUM%#qWSE3! u!  g7 }_GE'iWI=97-m;1+_smE7'wkaUMA/)}eSyc%qaMqc?OC973kC5 uo{uWK!  }_SOG+ M/#ɿsi=ѾžYM%׽qY-ɼoI?1+ݻ[M7 {]AٹչǹmaI+ ٸ׸˸Ǹs_YAݷ˷÷wcY? ɶǶyoU7ߵӵŵya[=/ ۴ϴke]WS5/)߳óWECѲ}seY;#۱wiMG- ɰo[ѯaG;+ŮE;9ǭsoI=1' ٬Ŭ}sMA;){ui_WSM-۪Ϫgc][=3%ѩ1+#}ocKA;5)'٧iK31ͦsSC ݥۥťwcE95' Ǥsg-+'mgOIGA;עϢ}QK93 ߡ͡{sKICge[Y=1%uS-ݭTsH1洣M{ߴ]ܴYIٴ%ִҴ\ϴ˴ȴYŴ´ﲾZ jG˪s #͠wWaɖ]h]i'i[-r"|xwurn1nkh#dga^ZjWTPeMJFaYC@<9S96ߵ2a/,ɵ(c% "oha`A ^;k!wlqg鳭üg߳ܳسgճ#ҳγk˳ȳ-ij iK 3hmGʦo˜q{В}K(9Ԉ+~{3xmtqcEnjgHd`՘]DZVUS[;PLaI:FB ?%:<8c5829.ь+/($9!)6UIGߔ I 'C;e{FŖ岥Aⲱ޲1۲Aز3ԲѲPβSʲIDzIIJmFq鶲ᑳ}? 䬲ό;1;ࢲwi-՘U~7(ێ˅G3cބ,~Yzsw0tp7mk-j fWcK-`\Y?VSRKOi?LHuEBBU>c;J84?1G.*'D$c EGYU ; gia!hqﱋ)tAᱥgޱ3۱ױlԱ_ѱͱAmʱ DZñ;;6ֹ}xi&ѯ{ ,ե넢E:ۛ)[/ᑱцU5 ㇱA}zGws[paNmYi?fOc_ߤ\TYVR]OLH=^E] Bs>^;g84d1Y.ջ*/e'$+ fog  ?h )[Sa򰭹\C䰁hᰭްڰeװ԰mа{nͰʰưyð;*oۼm-زɂ3{ר9螰:o┰ AoM=})Mz[vϦsmRplCiSfQb_]\ YUbROݺKgH3EyAj> ;7Ah4i1-g* '#)b 1[Z i TqE\ f5;m]ݯiگAׯ;ӯYrЯ ͯɯcƯ*ïiӿO,sٵ#6㫯A?󔞯AML1O탯5H}myv-Msoפl1PiYe˰baZ_[X_TURNTK[ HDIjA >_:57.40)-6*a _FMY: cF'?DǢK䮛ஙݮ[Sڮ'֮ӮqJЮ̮ɮZƮîMZ Kcj#ɫj¡r}˗zk&ՍA,#փ7:}5y%v:solHie}bK_[X]aURNY_KqHDZA>:`7M4y0l-*&ev# Y- 7+0 ŇG9OËaE/>Iݭ Nڭ֭Eӭ7WЭͭ9ɭVƭí1`;gӿgY fY×u $ύu]ȃ)sI}ysv!so~l=/ieb;_ [X7UQ)N8KGDGA=G:K730J-1)&T# fu/i hMu{)k+I/ݬ@ڬ֬;ӬLЬu̬GɬPƬ¬͜QwݬW[벡d laԍ5&S҃_z/}yv1so)l+ieYbCC_m[ XM7UQNS;KG[DGA=:I7q40qX-*&i[# \ɴ_aa h)x'Sv%E+ݫ-9ګ֫ӫ1?Ы̫Sɫ[4ƫ«G[[7d? yi Ǎcv&/҃v}y|v'sYoal/2i;ecbM6_[?X78U#QNLKEGDRA=:T7e3c0eZ-S*5&e# C'jSI{" 1.#:?ǎuD)窿IݪIڪC֪}ӪQRЪͪkɪYcƪy êWĿek% 5ϵtyȫzɡw|+qޗщ2፪RɲK]}Yz3vcsp+l`iS fbOl_\sXWmURNxK_-HDyA;>G:7]I40g-J*&[#SS 3h'i _ s}+yc:F5AyݩwکUש]ԩЩbͩ} ʩ+ƩgcéelOjY!Ψu1ɕCq󔩹R YM%}Wzw sZpSmiudfuc_sf\MYQUlRYOK)|H9!EA>S-;w7]4 11o-*:'#ۚ D#Jc% _ gc 35jvY%訫zᨧ,ި[ڨ ר_0Ԩ[Ш ͨ/ʨƨUè5ܼe:䲨ՑDRGXwkćx'G}Mz/wosp3m%iQf;c_S\yAYwURFOKH SEoBS>ej;3849{1(.*['%3$ 1<y7J [ qPo9g~0]=Y6姹5ާ7ۧ קԧ@ѧ ͧqʧ]Iǧçu_ lgǬp!]ԢA+?☧ۈK7>ㄧ󌁧8~%zwsKtpmMNj=gwcZ`I]IY7`VSO1dL I=E nB?;8:51.C+-'$F!yVqd _ z':ߗFwI{ަݧۦ{RئԦѦAYΦ˦ǦAfĦǽ{,ճ/q/ᩦ󐦦7C矦LS몈X~e{xthqnojyg-!do`U]3ZSVSuS-O? Y!Ƿqkߥܥwإtե ҥΥI˥S.ȥĥ2#ấ<찥ϤPyY-^ +[g {l][̅_1{ǔxo@uq!nJkYgKdVa^yZ^WTP}fMoJFpC%@<'9A262?/N,)%f"oCgMu$ W3EI3X꤯yfܤ/q٤֤ҤrϤ%"̤Ȥ}Ť,¤׾у-ߴD大Jkc񾓤'hqˉsi||'yuMr,ok?h0eai^>[iWyTRQN3J_GD@x=):63Y70,m)?&"JPk `C!h?95磱㣣iAݣ٣֣ZӣMУ[̣)Yɣƣ7£b Afî x"ˤuz1暣G@쐣їGC-A|ۡyCvyr!oNlh_e[fbU_[!xX-UQ!N/1KGCDaLA>ר:U7 4S0o-"*& {#C. W{0F ٔ-DI?mUc`碭eq᢫ݢ}oڢ-$עӢТa;͢oɢYƢVâ/5Y5᫲[' 缨m͞ouY̊as! ΀)}G4zvݕs>pslIi[fU c;_`\ Y[UfRiOcKhHEAK{>,;7Ñ4;1-3*B'# Nߪ3^ l {Cv+];M8Q5]1_.S+'t$$!yq6SK= CmU' t#A5ޝ۝7؝ԝѝMΝʝǝm\ĝcpM"qԳCg3ߩ琦q:k3H_3U]c~w{I'xtq;nej gId5`]9ZZi WS-wPM1IkF&C?<{F9-52iX/ ,(e%"l)qS' |}(ۊQ{;)84a1EL.[*'G$ /[Uv/ u"; =Ogq⚗ޚzۚ)ؚԚoњo=ΚʚqǚTĚMdsdzv0u۩GTgݱ`kˆv'~{:}7=Q409-b*''#)~ {/Fm +] m iC81ɤZ˻olޘ%ۘטuԘ;јw͘ʘ;Yǘ-ĘkĶz4͜QXcE1i' ̋5灘y~R{xݶtcqnjg*ds`]AZ3VSyhPM3IiwF.Ce?:E7A40-\*'E#p I7u' J QydCuU@ǟS1喭nޖ/*ۖזԖ/і͖ ʖOǖÖ+Mf#ɶ{3謖Vd ҕq<狖EYO~U]{ xtpq#nj+g7>d`q]EJZSVQSiPiMIF,C?/< K9;52`/u,(ey%'"E?Gɪ]` =y+@Q՟'M yi ܕٕ9֕ҕoϕY̕ɕŕx•C,㻕c?Z; ['s!U֚7吕{T۲GjG}yv?suo lWicfbAp_"\XUFRsNKYHEmA3|>:;7ۗ4kH17-9*X';$Ǽ f[5~/ q C%A[%z&C_;<ǤޔQ۔ؔ-Ԕ#hєΔʔ {ǔ1,Ĕ@붔\1ĩt%/ן E`on#~{'9xt?qKnKjgQbda]kZ/#WSP;MEIFIOC@#IJs]mA#ꓛ9Bܓ!ٓi֓ӓ#ϓu̓i,ɓœ“MCoEmЮA{)礓IõkkɍW2փ[@}y[vbsplgi=fb_i\K Y}U|R4OKHEEAe>f;)84m1@.*K'L$- o -4 S HCs#E)蒷W\ ߒ߾ےtؒu!ՒђΒ8˒ǒĒEkS^y5%Qݦ%BUTaq $Ѕ;{kx=Pu]rnglkhgd1a;^mZgWdTQWMeJ_1G;CU@SE=9W6Ma30W,)1&"Yk?t" ۋ9?%]YaM䑭ݑ/ڑ֑ӑNБ̑ɑIkƑ3Ñѿe9@gQ`}Ψw+מ=Y] yƇws(})z{=wsp9em? jgfce@`M\IYYV SQOwuL.I}EϚBK?<8p52'.k~+ =('$!Pc_ y ,C3cLgu=jyc鐇/搏ϖߐQܐSؐ/ՐgiҐ ϐː/ȐO.Ő}Ks]yΪ5o9YMr'=剐EiQ |iyv-r?oIlIheeb_m[AX7UQcN{FKG'DaAW>3:mw7#.4S0-S*'#K} Y-ON j a53_}AWg`sOޏ .ۏ-׏cԏIяyΏӵʏkǏ ďGGG6C춏磳}Y=m؟=;Q ˆ=x-(o~{3KxuOqknkg{d2a]ZXWT7P3iMJFӅC6@<39S[63;/p, )%"[@CTg #aGc]a;0]]Lݎ5ڎ֎aӎ Ў?̎osɎ+'ƎoŽ󔿎Dkc_}ȫ{1u衎훞eS ῔s Ί󈇎'@ɪ}`zwis}p1mifkUc `\ oYVRyO:LHEW^B{?e;u8u451.M+'$i!_A] l {{Y@_3Y ugs1⍧ߍq>܍؍Սjҍύ{ˍsȍ0ōuHu e'Ѫ 7e젍#G_t}$yډ;N|pyv3rm~o;l heYb_[qX(U?QۑNY?KCGDbA>1:7:40-+X* '#9~ :ESb 3 65O9oo%5ތZیk،Ԍ{ь8ΌWʌnjUČټs̳2㩌坦R hՒ[EC'bK{o~x3uUq;n Qk? hd ta!^ZWBT3PkMYJGGCmv@5=956_3M 0,u)(&"H[m" Q@3\C9Qx) }狟L݋mڋ׋aӋgЋ9<͋OɋƋ[Ëmļ3z%+ٲኯCD#d=՛k3呋AZ}C҄_1~zw?tpkmkj1gc}`H]3YVgS_PLŅI9FqBo?Vs;kK84/1c.+'}u$M#!Sч+:YSa  }<kb 쉥H剟≛f߉ ܉؉Չu<҉UΉ#ˉPȉ ʼn7FYGkӪ/<9i^kʓO8m቉eL|nye-v{roBlheY_b_[aX9UQQcN\K)HD%}A7>u:?7N4I0-q*'# :w`g u Aaf5ٚgOU3ވyۈq8؈ԈшYΈˈiLj}ĈA9콈\Ȱ2 T] !5eY)E‚ir%)|mxՎuUGraokwhq'ea^R[?X'T'lQ+NJ G_D}A;=:-87g3{0g]-) *&{#2 '%IFv )) !;Iî^uÅ6ᇓRއmۇ/ׇqԇ-ч͇ʇA;LJÇ!^Ŷ傳8I꬇ק%c͟6e蕇'\ԈŎI{vxE4u=q1nPkhidAa=6^wZ)WgTQMwJ MGD@t=5):!6+3_?0,Dz)En&&# O{x- #iM o,񆑓E䆇na&ކچ׆VԆц͆ʆ>džAÆgi!նCIOj(㟆]H鲒dψ+2~{_xuqyn0kg)dTa^ZW2ToPMRJaGqCp@?(=996I30,]y)u4&"[eQk4/ 1d;~g6y􅡨c\녓Cg݅ څpׅ(ԅ)ЅɘͅTʅGDž=Åu55ๅ񜶅#Mp+ޢm?sr3)ߋ'K/~k{E'xt!q]UnkygSsd]!a][ZAW;SP%oMQ&JIF_C{W@% =!9x623=/,K_)_&"Չw6sW p!+%eJWWy,mkM ?݄Eڄ<ׄ[ӄЄ9^̈́ʄ;ƄÄB})je"د׋>-ii(ܘюGS=d7Íc~9{wtQWqQnjg6d`]XZWSPHM IFsC,@+<9)P6_3 /i,A$)%"JC7{5 GQp-o?CA-f;$a݃Zڃ׃7ӃЃI1̓cɃ7ƃQà w¼{;1۲3?SAyM-=_؎5Ei7n~w'{wwtWq n+jug *d`]}LZWS#nP(MIF:CC?<[9'62/<, (%a"%CwE2!U\ )3}6SY]i킓ꂙ?炑ig݂"ڂւӂgLЂ͂ ɂxƂ/Â뿂R Am:eIΛCsg_ׄ玁E~zQwIdtW"qm͔jHgd`k] -ZVKS`PMIFG,(7%d">KϡSY U]xi2-qXs|-'59T݁ځց-ӁiKЁ1́ɁukƁ%!Á)ؿݠQ= [Ȳ}49Qk()ٛGͶu ㄁ͣZ~= {wErtO(q)mjJg? d`~]#AZVS3lPM#IF CC?ٷ}:}v7}54}q0}9-}Wc*}'}#}NJ }MF}q}}q}(}/ } }CF}}|w|0|||;Z||| |aG|||i|k>||-|%c| |-||'P|A||r|7-|||m`|%|EҠ|߂|C|||is|)|M||?h||[||y|Jv|s|!o|l|G5i|=e|Yb|#c_|\|X|_U|Y=R|SN|K|eH|#E|A|>|E;|7|4|u1|1.|*|'|b$|!|||L| || |U@ ||A|d| "{{ɗ{wN{{{v{0{{ǰ{s{.{{_{V{ {3{ou{!/{{{\{G {˱{E{K{{ä{'x{/{{{r{+&{]{ř{V{ {ŀ{?x}{ezz׫zez zezYzRz ~zzzwzG@tzpzYmzljz/gzcz`zuM]zZzVzQvSz96PzLz׭IzcFzCzu?z7,z)z%z|"z7zz zjz?$zz zGzazѿzyy[7yyy^y{y_yy Uy yysy3>y?y9ygy[,yymyjy#yyyHyy3yqy/yyyGYy-yƕyyC=yyպyyy3y~yg{yObxyuyqynyEkygy5dyray[.^yZyWyXTy QyMycJy;GySCy@yz=y::y6y3yk0y(-y)y&y;W#y% y#ysy-Kyy y-x y3 y#yy+dxxSxx;Kxxxtx0x}x xwSxxx}xAxxxaqx0xxxU`xSxذxᖭxMxxˣxo~x4x)xGx)]x]x׌xxOx)xyxAz|xG2yxuxrx[oxlxChxÏexFbx_x[x {Xx8UxaQxNx}kKx1!HxDxkAxJ>x;x7x{4x51x-xe*xp'x.$xg x5xax#xxxN x xxxkQxwwwFw#w=ww8wwwYiw'wwWwPwwww}wu=;uyO8uu 5u1u.u<+u'uW$up!uw2uu}uoiu=uA uu u7Wu5u%u tFtt?tqte0t'tmtjt+ttٗtWt tctnt:tmtt%wt2ttt9gt tttSt tȞttaGtttsyt;tt1t3lt&~tgztwtWtt=qtImtjtEgt/dt`t]tyFZtWtSt-sPt/MtIt߮FtqCt1@ts;sy7s4s\1sQ.s*sA's]N$s !ssŁs9:sssqx s: s+ssws6rMr r`r-%rcrUrarrrrCYrrr r1=rrr]ur 2rrrarArٮrrCWr%r١r;rMr rU̔rr9rr#r!|r;9rm}rzrbwrtrpr'mriWjr grcrDž`r'L]rGZr7Vr}Sr5PrLrIr/jFr Cr=?rWq:q7q {4qU71qS-q*qh'q7,$qk qqjq/qq۰ql q!( qqqbqpwppOpGpp~p?pppswp6ppMpmip,pp;pnpe6pp硸p}]pYpۮp+pPppΡpQp1Fpqp͔ppJpp܇ppQp[~p zpwpNtpU qpmpjpk7gpcp`pq]pk,Zp=Vp Sp^PpMpIpEFpKCp@p{oQ\;o)8o4oA1oiH.oY+o'oCx$o3!ooono]-oGo oq o2ooomnC$n=n{n^nnn/nXnninonHn nnnC=nn%n)sn/nnenun0nnOnkjn-nOnٰnwvn6nnMnivn+nn%nm~n#{nwnitnXqnnnyjnߑgn}Sdn an]n+ZnTWnTnmPnMnYPJn GnkCn@ny==n 9n6nt3ne+0n ,n)nKi&n)#nn]nmZnn#nnU n nnςnAme mmmFmmmm @m!mm+mBmCmmm:mmm]zm 4m?mmsm93memٯm1rm 2mYm몝mbm'mmGmZmmцmUm)Sm}msymvmPsmpmlm!imIJfmE cm_m\m=EYmVmRmOm{GLmI ImaEm%Bm+T?m%m+!mmym>mm]mAnm. mmǰmnm)lllql3llelml&l/llllI%l?lQlO\l?ll5lVllݹll^l'lllXlIlПlIlQl+lʒl1lLllʅlgl>l{lxlulFrlolklw{hl54el=aly^ln[l'XlTl9QlhNl$KlGl}DlKbAlO">l+:l7lc4lQ1l-l*l]'l$l l-lUl?lllL l l=llPl kkkEkkk~kA@kkkQkxk9kk?k k@kCkkok=kkk5~k=k5kckxk7kKkẞkk5kkknk',k_kٰk1mk9,~kzk˩wkahtk"qk}mkϡjk!dgk"dkU`kA]kcZkWk-Sk}Pk\MkJk;FkYCkX@k}=ke9kW6ka^3kO#0k,kw)kb&k#k!kkpkI%kikkm k2 kkŬk9lj-jjj]yj14jgj)jmj8jSjijtjq7jWjj׆jBjj=js}j>jjj}jAjKjçj|jFjjj~j:jj{jwj7jjj z}j5zjvjysjkrpj1mjUijfjscj:`j\j9YjzVj1SjOjsLjuIji3FjYBj?j[}jjAi iJi ii{iAiSiiS~iHiU iiGi5Oi?iii9?i!ieƽi5i_Bi?ii|ii9iii}i@iiciWwi7i_iĉi1i=Fii|iyyi:virioimli2iieibi]{_i1\iXiUiwRi3OiKiHi!wEi-5Bi>i;i{8i65i1i.i+i-E(i-%i!iaia?iiiiEiM iiτiIKi1hhhYEhh-hM|h>hhhňhGh hh=hMh]hhhyYh/hйhhMhhʬhᆩhHhkhA͟hh%Rhh+ڒhhbhih؅hh{Yh9|hqxhuhYrhoh1kh-hh ]eh bh^hY[hfXh%UhQhNhlKh++HhDhAhw>h5;h7h4h%r1h..h*h3'hg$he$!h]hhnh}&hh hj h6hshhtg8g}gg~g#bbbbLb#b5b bM b boba{LaaaaXa-a-aa1_ay a3aaja?'aa=a}awGaa̾aՌaEVa+aرa휮a?ZaAa-ߤa}a`aO.aaasa8aaa7aMag ~auzaѓwa[ta qa7majahga+da1`a]a?uZa:WaTa/PaMa]Ja$GaCaa@ah=a,:a6aϲ3a9s0a=-aI*a&a#aaR aia?aaaa%aC a apa96a`)`kz`C````Q`o```[````j`)``5`m`K2`i`շ`}`>`U`i``UQ`u`ݞ``s`:```z`=`C`Ɓ`3~`G{` x`t`%q`Tn`k`g`d`\a` ^`/Z`W`eT`.Q`MM`wJ`w{G`EED`A`S=`):`K7` 4`O0`7-`\*`;'`o#` `uk`2``O`_`H ` ``É`M` _A_1_O__i_s_;b___ _j_'__Ŭ_s_9_?___[N__յ_͔_]__}__9l_e1___a_{_A_ _׋__d_)_w~_{_%mx_9u_[q_Cn_3|k_@h_e_a_^_R[_X_T_oQ_KlN_?)K_G_D_mA_1>_:_7_ņ4_J1_3 ._U*_'_T$_}!_s__=h_.__ _! _A___~^A@^%^1^K^P^^s^9^i^u1^^^C^E^?^c^^1T^^׼^^Wb^)^?^^uu^/<^^ɟ^C^O^ ^GҒ^;^\^g"^^3^q^5|^5x^Iu^ur^=8o^ k^h^e^Ob^_^;[^7X^5rU^2R^N^CK^ouH^e@E^B^/>^;^E\8^5^1^.^i+^_4(^{$^!^|^9^^S^ӑ^GW^ ^U^5^{^=]]a]]}a]]]]ko]e0]W]]#]_T]O]+]]_]!]M]թ]n]-]]]}]c>]I]ã]g]cK]m ]Ж]]Q^]+%]]]w]8]|]y]v]As]p]l]i]%cf]C%c]A_]\]sY]:V]S]IO]L]OI]wF]B]ɒ?]V<]]9]5]2]=s/]?5,](]%]5y"]=?]7]]]F]] ]W]'M]Y ]\\]\\\9\Ww\?\\\\K\\%\I\[\\\۳\w\?\\÷\댴\M\9\ڪ\3\oa\$\\\v\C@\\+ˍ\\%U\\ր\}\bz\&w\Ss\p\ m\#Jj\g\c\`\-l]\A.Z\AV\S\xP\K@M\J\F\oC\3P@\ =\9\6\{n3\+0\,\)\Ո&\M#\W \w\{\k\2\\ \ \N\\9[W[S[[[w[l[3[5[i[[!M[ [[Q[_[ [O[7[|[?[[ʸ[7[ES[1[׫[[][[[E['[]z[E[G[?Ɏ[3[U[[܁[ ~[_d{[1x[t[q[xn[yEk[h[d[a[Y^[[[W[T[UnQ[e8N[J[G[~D[=A[=[:[Չ7[UO4[1[9-[1*[ar'[D$[; ![[U[X["[[' [{ [C[-[[їZu^ZM%ZZZ;uZAZYZZӋZyMZZZZomZ2ZZZ~Z{CZ]ZܹZZUbZw1ZZsZe|Z-?ZyZOɜZZPZZ-ݏZoZ[sZ@Za Z[Z|ZYyZvZrZoZplZ[-iZeZbZݎ_ZT\Z-YZUZRZkOZw/LZHZEZՏBZX?Z=YYY|Y%HYYYsYsY?9YYKYY#MY{Y?Y-YgYE.YYŷYY9TYYYYYCY_ YʚYYWYYY5Y'lY-YY}YzYGwYtYpYumY`jYy'gYYcY`Yw]YE?ZY{WYSYPYSMYJYFYCY}n@Y<=Y9Y6Y 3YU0Y"-Y)Y&YUu#Y37 YOYiYY)\Y$YW Y Y xY'BYmY[XX]cX*XXwXXELX?XCXAXqX>X-XXyXMUX XXAXkX/XXSƲX厯XZXXX3X~XKX%XsޕXXiX#3X}XžXɊXYX|XxXuXlrXa0oXQkXhXeXSbX_X[XXXsUX5RXNXKX-HX#AEXkBX>X{;Xc8X+5X1X.Xk{+X>(X%X!XQXYXw(XXXuXP XXXXtWk=WWWkWkW6WWWדW3[WWWMWbW1WW{WUWCQWWWᵷW}WFW WЪW9W `WU#WMWWtW5WWKWMWAMW WkـW}WkzW;.wWsWѼpWmW!HjWgWcW՘`WI^]W%ZWGVW3SW|PWAMWmJWFWCW\@W%=W9W6W3WP0W9-W)W&W i#W1 WWW WWSW W W WxW@WVVV]V$VVV~VFVV]V!VeV;-VV3VqVQVV VVwVBVW VmӲV7VaV,V1VV/VDV VԕVVugV)VVkV{V@V |VExVuVZrVw!oVkV;hVueVIAbVE _VW[VXVjUV2RVNVmKV]HVOEVBV>Vɥ;Vt8Vw85Vq2V.Vy+Vl(V 4%VO!VV1VYTVWVoVVd VE7V VV[UKgU+UUUrU/UUU5U]aU](UUmUoULU[UMU#UoU3UeU÷UsU;IUU'תUߝUgU+0UQU_ÚU팗UsUU?UcލU琢UrU:UC U}}UўzU]wUo#tUpU;mUyjUS:S]7Sk4S[X1S'#.S*SDz'S}$SN!SSS SpSG8SSSU SՑSgWS SR1R|R DRRRRRKR RRR~RcLRRRRIsR6RR7ƽRRaRc(R]RDzRvR6R?RYʠR嗝RQfR2RRKRReURRORKR{}Rc@zR_wRsRMpR7amRY%jRqfRQcR9`R;^]R(ZReVRSR PR{RMR]JRFRCR;u@Ro>=Rk:R6Rc3Re0R9-R)R&R#R]O RRQRRoR9R R RMRogR0RQQQTQQQCQkQ9Q Q%Q=QZQU'Q'QQQRQQCQ饼QoQ>QGQw֯QQqQw:QIQyПQQceQ(QQ!Q5QALQ{QQ}Q|QP?PѨP[PqjP8P P=՘PQPfP(PmPP}PLPP7{P{xPruP:rPoPkPߕhPdePK1bP^P[PXPkcUP# RP}NPIKPבHPe^EP/0BP>P;P8PT5P#2P.P+P-y(PS?%P"PPPkuP9PiPKP PgP2P5POOXO 0OOOOnOeOIQ;Oy$8OU4O]1O.OY+O}(Oo$O!O}OCOOMOOUrO@ O OOßOmNkN:Nŝ7Nk4Ni41N-N*N'NY_$N.!N9NNN{`N0N NG N7N=cN/NMmMMisM BM MMUMrM?8M MMߙMknM]J JպJKJ7mJ@JJJJJ}SJ+JJJJ RJ JYJJJ]J_*~JzJ7wJtJoqJ);nJkJgJdJyaJ_G^J[J{WJ/TJO|QJ;LNJ=KJ}GJ7DJ3AJ#_>J0;J8J4Jw1Jp.J9+J(J$J!J rJ;J)JSJ?JpJ. JJJՠJqlI>IIII qI>I1IIIkIS8II;IcIbI;5I9II_I[qIEIK IܴI)Ic~IPIIIgIIoXI(IgIőI+I+aIs(IIIˁI~Id{I/xItIqInI[kI%hIdIaIa^I7k[I!6XIUIQIcNIgKIQHII'EIwAIy>I;I'Y8I})5I1I.I_+IZ(I)%I!IIAIZI$IMII; ISI{ II;HqHVH#HHHHu]H-HHsHݘHiHK8HHHHmHE;E}r8EqH5E2Ea.Ee+E9(EU%EU$"EEEEbE5EE E5EKkE:EiDCDYDODWD DYDEDDqkDUDDD1DDIZD.D)DעDD{D7GDD DDDeDW0DDD|DsyDwBvDsDoDlDiDifD;cD`D\DUYDmVDgASDoPDsLD_IDFDOsCD<@D =D9D6Do3DF0D-D)D&D#DYM DDDDmD3YD% DS D'DD bD0C CC#CrCKHC{C C-CC^CQ4C;CCCCaXC)C-CCCCCVC +CCϰCɠC vC!CC C۠CwC{CKCCC揄C}CKCQCC}CzCrwCBtC/ qCmC7jCɃgCRdC$aC]CIZCӕWCiTC1QCeNCJC#GCwDCQAC >C:C7C4Cwc1C=5.Cw*Cc'C$C}!C[QCCCCoC!qC= C CC5CytBCBBgBBB\B9*BBB+BtB;BBBBBBhB;B!B߾BSBBOBI,BB;ԫBB|BMB/BSB븘BBGXB-BB5шBOBcvB>BI|B3xBջuBMrB{YoBc,lBiBeB?bBz_BS\Bu$YBMUBWRBOB^LB0IBFBBB?B{A=AؠAAoAMSA"A+AȍA5AkjA >A'AW}A˶zAwAYtA1qAnA3jAYgAydAATaA(^AZAWATA{QA)KNA"KAGADAAAj>A3;A}8A+4As1Au.AT+A)(Ao$A!AAtAOA%AOAA{ AqA;FA1A@@}@h@a@@U@@@k@}]@$@@}@@n@A@@@@@)q@F@ @w@'@ѐ@_@<@ @w@ߴ@@_@O5@@ޏ@϶@5@Y@{,@u@w|@y@v@ics@:p@M m@i@f@}c@T`@#,]@Z@V@/S@uP@iPM@;J@=F@C@Q@@q=@<:@e7@3@k0@-@\*@-'@$@5 @@t@AH@ @}@ @ @a@ >@a@_?g?S}?cR?#?q???n?H?????w?K?$????1i?A?????i?=??E?+ž?U?Uj?3B???Ë?ݗ?q?[E?U?{? x?1u?qr?Eo?(l?h?e?b? u_?E\?OY?UU?R?O?dL?o@I?uF?B???K>>>Mg>>> >>>m~>P> >>> >]w>C>c>C>>>u>P>>>3ĭ>Ś>ks>H> >W>ɚ>>)o>mF>>{>Ç>>`>}7~>7{>w>t>q>Vn>*k> g>Od>ia> s^> K[> "X>WT>Q>ϤN>qK>BH>E>'A>Y>>;>]8>:5>-2>+.>/+>m(>'^%>98">>_>>i>m>q@> >>>>f= <=u==]==k=C=====r=L====ɚ=~=EL="==9ǹ==Cp=J=1==Ħ==u=yJ={==Ó==Wa= 8===)=}=]gz=3w= t=p=m=j=#ig=:d= a=m]= Z='W=lT=7EQ=gN=)J=G=7D=oA=E>=;=7=ѵ4=1=e`.=5+= (=$==!==f=<==== =o=B=]=<<:::ȉ::go:D:}:y:Ov:s:Ayp:Qm:!'j:g:qc:`:]: \Z:y3W:'S:kP:M:gJ:/_G:3D: A: =:Y::ї7:r4:cH1:!.:*:':$:p!:H:::-:G:cz:AP :a':::ͬ99Q9_19/9 9 99ab959A9M9Y9 9r9I9/99}9s99\929/ 9߲9A99Qr9/D9993͜999QR9 9S9҉99k9X90}9z9v9 s9p9mm9>j9 g9c9 `9]9GZ9SZW9.T9P9M9QJ9G9dD9M6A9>9:9)79+4919;U.91+9(9 $97!99q9F9 99_9 99sk9E9I8888Ym8I8]%8+8888kc8=888-8ӧ8~8V8#(88u߼88c8f8788c8Ħ88kq8H8c8}8Γ8ͧ881V8/88ހ8i}8z8lw8ENt8-q8n8j8g8d8ca8;^8[8W8aT8%Q8vN8GK8 H8%D8WA8>8i;81k88OA5828!.8+8Q(8{%8H"8Y$8]88y88j8D 8) 8887Wp7H7s!77Q7g7 7Y7K.7 7!77/7k7:7_77w7_77]7!67M7]7ɰ77m7R7+7+7+77ՙ7!o7K7u#77҇7]77__~77{7x7wt7q7An7a|k7eQh7W1e7a b7^7=[7!~X7XU7/R7 O7K7H7E7cB715';5i8545#15!.5|+5Y(5 1%5"5555a5>55 555˰55{`4G844444|4ob4=4544Y4E44Wb4=4i4I444/4SS4*4C444Ӝ4{4mO4$434۝444Uv4)T4U+4 445DŽ44t~4J{4Q"x4?t4q4!n4׏k4Gkh4Be4c#b4_4[4X4U43wR4QO4(L4AI4ME4B4?4l<4A94 6424/4,4A{)47T&4:#4 444_4-~4\4; 4 4s4443/h3H3!3c3333/_383'3333Ð3k3KA3S%333Ű3w3j3H3 -3y 33ʨ3ˤ3~3V3-333’33{3T39333|3y3ǒv3es3Cp3m3i3f3c3Ӕ`3g]3cIZ3I+W3T3gP3ǻM3J3oG3 ED3!A3=3G:373߀43qY13;.3+3}'3i$3!3 3h3]I3}3C3]3 33c3;F322U2G2?2Kx2Q2,2 22m2٬2?2`2@2222s2m2b2D222׳22Ո2e2C2'212%۝22+2́2c2/A222ф22~2b{2;x2u2Wq2n2k2gh2je2Ab2_2c[2_X2U2R2YhO2>L2I2E2;B2%?2<292^6263202,2#)2&2 #2f 2G2"2222[ 2iz 2_2e82211%11Um1L1G*111/11Y}1mT1151 1A1q1_11]1@1!11ڵ1511G~1kT131+11Ҝ1a11l1)D1191q݆1W1u1z}1Vz1a1w1At1Ep1m1j1Cg1?_d1Aa1/!^1[1W1'T1iQ1+uN1_PK1/H1 E1A1>1-;1-81qb51UC21$/1G,1(1%1"1j1AH1&11c11 1y 1V1G1-"10000c0K0)000_00̓0f0a@000000-o0QE0 (0 00Ʊ0I0o0f0E0%000Θ0a00f0AE0'0A00_0|0vy05Xv0;s0p0_l0i0;f0c0d`0<]0Z0cV0#S0P0ŖM0yyJ0YG07D05A0=0:070ə40z10Y.0{7+0s(0$0!00߈0Gi0F0*0 0 0000p/K/1///!/Ż/!/v/!U/4///'///q`/3=////S///%_/@/7#/'/ܧ/{//_/;=////]ǎ/!//q/]S/8/|/_x/gu/r/əo/Uwl/Xi/:f/c/_/;\/kY/}V/IlS/MP/7M/1J/iF/C/G@/ =/h:/WJ7/y$4/#1/-/*/Q'/$/9\!/AC/C+///// /t/mW/?/.{..Q.K.7u.O.}-. ....ō.r.}W.5... ...1w.)X.8...ޭ...ׄ.ee.D./'.{ .mߔ.ȑ...n.R.E'..{.x.Cu.Ir.qo.UPl.3i. f.b._./\.=Y.lV.1TS.S5P.M.I.!F.YC.@.r=.F:.7.4.s0.-.*.ϐ'.Sp$.R!.3..)..w.).h .kN.70.c.-!---|-U-?---1--]--j-J-Q---I---i-y-\-B-3%-y ---{--e-C---ٔ---r-EQ-W.- -~-{-x-u-ir-3Oo-95l-i-e-b-]_-!\-3Y-QcV-CS-]&P-#M-I-F-C-I@-#t=-aT:-+7-Y4-0---=*- '-f$-?F!-*--)-i-˨--s -\->--- ,,,,-,x,W,q,,A,,c,9,[,3w,)W,:, $,Q,,,,,e,SH,!,,,ɪ,,ɔ,n,gH,', ,#,YΑ,ѱ,,x,MY,4,g,{,}x,;u,ӕr,3qo,Vl,1i,f,Kb,'_,\,3Y,V,[ZS, ;P,Y M,I,aF,C,@,}~=,`:,C7,$4, 1,m-,*,m',k$,I!,j,/L,;3,,-,, ,,u,{f,I+4+'+++++z+a+7@+}++/+G++ߌ+o+S+ 3+5+_+޽+{++{+Yd+J+)+i+{+eϡ+K++]n+T+3;+ + +O+…++3+}f|+Ey+I,v+s+o+l+i+f+gc+)L`+/]+_Z+?W+?S+kP+M+J+ikG+'MD+ ,A+>+M:+7+A4+1+y.+`++C(+(%+' "++?++ߘ+}+}h+SJ +a/ +c++*y**߄*1g*W*+9**O** *}*5*f*Q*/****u* *ˆ*n*U*3***ܫ*彨*7*%*Ic*D*&*_**Ǐ***o*P*6*k}* y*Gv*s*p*/m*vj*Zg*>d*o%a* ^*Z*W*qT*Q*gsN*RK*y4H*A E*3 B*>*;*58*5*?{2*_/*E,*e*)*% &*"**i*O*=*i*%B*/ * ****))m)MQ)5))9)c)-)[))o)Q){8)){)7)))#){)a)iF)')') )֬))Y))un)mL)k,))1)א)))~)b)/C);%~) {)w)Et)q)ɫn)ُk)!{h)de)9Nb)._)m\)EX)U)R)oO)фL)eI)HF)m*C)@)3<)9)6)3)50)io-)T*)c9')"$)K !))))))u)T )q8))U)(C(%(A(;(}i(P(6("(;((((͚(ˊ(r(X(A("( (O(ٽ(º(({(?g(OK(6(/(+(ۡ(Þ(((r(W(w-(((kޅ(ʂ(_(m|(K{y(dv(-Es(,p(m(j(f(c(`(](suZ(CWW((\;({D8((5(w2(y.(+(((%("(h(T( ?(=(((=(A ( (((g(K'-6''' ''M'U''Ci'P'S0'M''i'')'#'w'`'F'W/'''ݲ'ȯ'M''t'e'F'$' ''Փ' 'ݧ'S'v']'<'S&~'m{'w't'q'ժn'k'xh'ee'Kb'k3_'\'}X'U'kR''O'9L'I'tF'i]C'?@'&=' :'6'3'0'/-'*'Ax''aa$'J!'.'m'''''ח 'i}'I_'sG'c)&c&&&&'&&G&n&\&=&-"&&e&&Q&Ǡ&&=o&1X&B&0&q&#&&α&&&}&{k&YR&4&3!& &&ْ&cƏ&&&y{&Z&oE&/}& z&; w&s&p&Ym&j&ag&od&Qa&9^&$[&X&T&}Q&N&ѠK&H&nE&IMB&1?&<& 9&5&2&/&],&)&}&&me#&O &7&&S&&& &c &ӊ&r&X&?%.%%Q%%%W%%%#|%e%MI%'-%%%%%[%;%%wm%OT%>%Q$%% %ح%ż%%G%{%k%=L%1%q%y%=%1Ӌ%%%ׇ%Sp%m\|%Ay%#.v%s%o%al%ii%f%Ic%`%;]%qjZ%WW%_CT% )Q%}N%WJ%WG%AD%A%ו>%e;%5i8%R5%>2%o,/%,%k(%}%%K"%%%S%g% V%>%$ %e %s%%3%Y$O$W$Ql$}R$A$/$$?$$y$w$$$$f$A;$&$$$տ$$]$$Wu$Ya$L$=/$_!$W$$[ޝ$Mʚ$i$$ |$9f$}R$E$+$[$${$Qx$u$ݰr$o$/l$3hi$Jf$3c$#`$W ]$Y$V$7S$P$M$J$mG$ND$$;$7$4$e1$Q.$?+$k($1}%$`"$Q$<$e$a$k$$U $ $ $v$f$cV#G#%4#'"#m##c###a##ay#g#{Q#;#3'##s#/#_#Cÿ####y#[b#L#<#O####ޠ#oĝ#ߥ#O##i#R#G?#,###e~#{#x#u#r#o# l#Wni#cf#Pc#9`##+]#Z#V#S#qP#5M#J#~G#pD#]A#SG>#4;#/)8#s5#2#q.#{+#(#Ѷ%#S"#A#-#r#b#?#0# # #!###9"" |"l" Z"?D"+%"g """"" ""z"u`"L"75"C&""?"" ۹"˶""""z"om"S"s:"5'""""Ց"Ď"Ӫ" "5"z"c"I|"8y"I+v"s"wo"kl"Mi"f"c"`"]"wZ"kdW"KT"+8Q"N"3K"3G"qD"A"q>";"ّ8"W}5"i2"?U/"{D,"0)"&" #";""]""""? "o "k^"H"7";! !!!w!]!!!~!9i!9X!E!6!$!u!!=!!!!!!n!{^![H!e3!=$!!!!ҡ!뻞!Ϩ!!僕!s!\!Q!4!$!_!!|!y!v!s!p!}m!qj! kg!Yd!Fa!#2^![!q X!T!Q!9N![K!qH!œE!)B!x?!bE'4B"? <952/ ,)&# q\QF3+ mѓwh^K<)Q q}mk٨'v-dwUC2  Ӝș˹{) xdmXIRUH~3{"xuqqnQkShմeb_y\oqYfVOSAP+8M5%JGu D@=:G7k41.+~(t%m]"VY>[*%  [ ӂ}i)bQQ=5I!E o?kKrSfPi>s.!3ؤʡ Ğ邒{t]RN}@1}{%zUw}tp%mjgda^[kXKU]pRo_OMLg@I?1FK&C@=_9U63#0-ݾ*U'ǧ$!!'ukj!TWMy@4 , 'q3eO}qdZV=)2%] 5;cؼ͹~k\wMF7/"s7o|iyvGsp;myj%gdzac^`[VXNUI8R=(O L!IEB?<9ߺ6S3C0Ǎ-*r'^$R!)P@6* !wc u=U[˒7Aob\SF<.%Oc)ؼ̹¶ѵ-}nc5[Om@?=e+ | y}vspm'j)g͓da{{^v[fX^ULRBOW9Lw+IaF5C@{<%93630-k*='Q$!w}n\]R N D560U%c WmwqWߦ[G{vmGgiVP[AQ5C+! Kޞ؛ҘE͕ E%雉Gwr}fz\w3Nt9Bq]:n2k(h5ebO_ \Y5URO%LIYFC@ӽ=i:7}41.x+s(j%h"w]UKD6%1/$ a !io%)5moxgsaYPaJ=1+W!1  C ڟϜ)˙ ;ב/?;z~u{mnxauM\rKoDlm;i1f_(c`]7ZWYTPMJOGD#A>w;852 /,)c&#U I{nnib TFA59S,9'1Q5 u)rmj5^?]GXRGKD?E6E,$Q)]|y%vKspmjg)da+^{[3XͥU-ROYL7IxFYtCAt@kp=`:W7!U4L1M.gJ+A(=%7"E1c+&  ! uuS˧sEKyosohefb_\TLJ'GK>/#&")~|oxu rolIifc`?]IZ9WTQNaKaHEBQ?<q967w3x0w-Gl*+k'^$yY!5X}W7RN/Q+LM B <<1 ,%I# +)uȽyź·ak빥QE=ɗ{i]~{xǕumroql/iNJf3cǃ`]]Z{WTQӉNK%H|Ei{B!{?!v<!y9Gp6i3%c0Cb-^*b';[$3X!VUaKYF)>#=7 %< 3[0+a&#!   %  o5is7Y-UސIލ߇mۄށ~{;xurol+if!cǻ`ù])ZqWTQNKHmEB?<963;0C-*ɝ'$!ma5u A ]ٓ331͊'aق1mٍ)=ߍ݊K?u|]zy{~-~{{v |za{|Gyv7s)pOmjgMdфa9^7[XUR?OLIۏFC@Ý=/:ѕ741՞.+ (%9"  iݤ#9k  Qמ!ߦϯ5)97%{ÿ ʼ͹˶!ȳY˰ǭIê'-ǤWӡ_Ҟ%ӛ1٘EӕҒ#ԏЌ׉݆[}zwtq%n/k!hIe]b_]5Z W/TQ NwKH3EB?<9I$6(37)0+-]+*O)')$,!-':<A>>?D F sN7JoIImKIKSUi[o]u]]dh%tmpsw})G[ 㒵#ACǔ!ɑ9͎ ȋˈӅ؂|9yav}s7p[mj'g=dbo_]\Q$Y$Vq%Sq*P=5M6J?G-?DHAG>aS;W8`5-h2Mc/j,s)Kz&%# Ϗ q=7 Cը5Iy;Q/k ]Oq# O-U4s67BIJKR1[WaOi)n'tY{}wo=Úm|'ymvspmjGgdaK^[\? YV#S P(M%J(G7Di@AK>M;T8!Z5qe2s/1r,{)+&# ?} E mw}/CG # "*/:kCG}LS[yeOs3z~5EseŦΣ)Ҡ=ܝ-sMQ)#c+MB}DzGw7QtXq+an'mkAwheb3_\)YV+SPMJ9GaDAU? <596&3E70=-oH*%E'K$R!kdjoc~~I  91AKc1U)y7AMRqdIp{c/ƭϪS٧AY$6kBK[7jr;~Q~{ٓxurIolcisfcC`}][3X"U7/RDOLLNI;RF`Ci@cy=):}741.a+(%Q"UQw)8;=7M eUufkvsϒ-c[m_? /4H Wiw#QIʲaܯ ; -A[El|+U﵀s}szwt/qn lWi? fW0c?;`G]YZ}iW{TQN٬KHEB?<O9 7w4,1%B.O+Od(/t% "o_  $4D Z 3i )t W / ' C I ! _ % 8 =F W Uh u [ ] ϲ U i / 3@ S /h v ق ) ժ S ˃ ݀ } z x 'u 4r Ao Kl \i [qf zc ` ٜ] Z W gT Q N L e'I /F HC X@ i= |: 7 g4 }1 w. + ( % #  3( ; eJ [ i } )      / i= P [ o C K 5 + ! 6 kF Z Al O| W  İ ;֭  + A V l 道 Ƈ ؄   k| 4y Gv CWs mp m ߍj ug Wd a w^ [ Y V /S {EP eXM rJ +G D A > ; k8 E5 G3 %0 <- L* b' |$ 9! k  y  %   S, I q^ Uo  3 o 1 # 4 cG _ u ם o w 5  + A S k ? q Ө  Ӭ E  $ U> Y m  dz ͌  3 g ?) @~ ^{ vx {u r Io el i 5f d a 0^ F[ q\X qU +R -O 'L sI _F iD A 5> G; ^8 r5 2 / , ) & $ ! 8 R h } % 7  y  5/ K i g  1 A E Y / ;F eX s  պ I e * s@ 9W r ; ç gŲ k  0 I s` 1s  岘 ˕  -6 {T m Y ~ { Mx su s 0p Hm cj +yg d ëa ^ =[ X V c7S wSP nM ݄J סG D KA > E< (9 EE6 9d3 0 - !* ' /$ " + A ^  ) ) ] Q 3 1 kH i 9 a  3 U o A  * GL g E   iݿ 5 ; \ ew K Ҩ S & a; SU t Y Ŷ ֎ a  6 ?T q ݎ} 9z w t r o :l \i {f Kc ` Q] Z wX 3U QR pO ML I F ]C A y2> gP; j8 ю5 2 u/ , Y * /' P$ j! m  9 C O /, E f Ɉ   O ?W`5wKY=`̈́I$Df[EѼ39e[è'W>cɧ;̑?<+]!U}ozx=u_rol ifd++a)J^i[X%UERO$MCJdGDWAQ>;946T30Ǧ-?*' %5"q_?e% m*Q zk9E5SZx11X} 6\ScQG=]`ڲ$S]}Şš#k;gc=m׍i&Myv'y|y=wAtjqnYkhf2c]`]ZWOU+RWOu~LIFC]AuC>!k;852I04-1Z*a'$C!;1YUzM s MHGrŘF;h[-?HuQy Bm+% _;ee?@ejaɪ!Ouk!͙(KOx;ֈA0`}zMw[uMr{ol}ig1d?daQ^#[X}VHS%vPMJG(EGYB?<99 7D4kz1.+7)S3&1b#Ő Yu9#aT_   3Fk|ͫ2 g .}WݳIt7CoA% y<KhѵU/2e'ͧ!5kYCљu7h+ы3eW}{,x;gurGo1m6jog!dCa _E\wYVSo Q?N wKH1ECI@م=:7!5qX2/,){/'g$s!A ;QwL {$b9c%4n ??L]0f';!XCK:tU= VUά:vO"['IՓ @?{1Q/ag{}z#xS^ur'ocmKj݁gda58_5u\KYwV*TgQN%Kc&IaF]Cc@>!\;853R0-O*(aJ%"3qJ--?@}   Ae7@ӄ RӓYUёkOߐi?ZW $Af'+l<~7'<-ɞgR3#ۓd_U.ni}F{xus#YpMmj +hseb`[L]ZIW!UhROL@JyGDBs`?c<927ez4S1/uP,י)&-$sx! PC-3-~ 1 Z?߉ oZ٨w=G{i]]Lw7c%U#co; `e[W٥)K;/-חy,}͏j+e{K}Vz}w)tKr˙ol3Dj{gMdcCb_\?ZWTAROLIJGDoSB?<U:75[2y/-]*'%ug"9s#0  9--@Xm'wG?kO9oG .Xvָ5K]{"ieJ{ uuՖ<EjЉ6-`!|a+zwtgr#o9mjhreb C`m]3[XUYSPY,NÙKSI5sFCJAa>$<9-7p41P/Q,/*'%g"doFU*{# wMbWPg>)ٖ%gk~SsKpIjgfd_b+kqqoÅe ەӨ3D˕U1n Uo9Q\}gzuxv+s=qnUglj g9eb{m`o ^ϩ[EJYWV#T%ROnM%KHudF DAe?=׾:p87%653'15B/A,[*3s(3&]#۶!|EY eGm( + qcG1S2BRbrŠҊ"2BRbr‹ҋ"2BRbrŒҌX   p I RhlGCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.301.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment.noteԀ#) pp1  I9 llB ttK h T ,Z _ |ekAs@yRRRSPTPPhhh b lDԀp lt    @ RRRSPTh @  H &H <RIp TR bR x  @ o@ Rh T@ R p    d T   P    B   % $% +B /d& <l& Et& P|& X Z cp m  }  r  B y  < TTTT  ^ T d R T  R       p | ( r 6,A<'Hn ZLc q. 4( \S: A l&|$hB ( @U \5 d& l  LW %2 1j9SB  T7 a@  s<z p  ) DA `B x Тd x    8 (2 0|3 @  JQPTP] jA z9 e   ̊c0 2 ܊0"B d2 tA H , : \- &G 7$| A JT!S,A b q ~ TB    B  Y  T8] \TX2 (X[ 1B <l M ] 3 mhs@   o\ % 5  B   @ (̖2 $3 3R B$ R,Z<bl p0 {8 Lܿ3 L HD \~A lB V `t $  t (|:A IR OV _O nR |  LB M  Th3  p  Ap T@ (     * f ; B I ^ W ģp d A o |"u DT xX ) h $ + ' ԓ  4/ J  lB B  4  ?  ̋# \> 4 dB > ,V P  Y  g n y @ xm 3  G 1 B D T  ܋> x   \B  L # d .  = U K 5U {` *k  y \A d  / U |   dV ,F DT _ p3  R1 06 4 ; <BL R@ V  g Ldr Иm B X \t lo  @ | |   & L PB l    )  P * 0 (n B . S @ ` x k  x DV ^ 9 ܹ A ( XB dr ̌   ] T 3  &܌"+ :(9 initfini.cgcc2_compiled.crtstuff.c__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__check_gen_simple.csprng.clcg.cequiv.36lfg.cadvance_reginitializeget_node_index_rnglcg64.ctemp.26mlfg.cMASK64MINUS1ONEINT_MOD_MASKINT_MASKINTX2_MASKSEED_MASKget_fillsi_doublepow3cmrg.cpmlcg.cinita.72r.73result.78overflow.79primes_32.cinitiallized.26num_prime.27primes_64.cmakeseed.ctemp4.2memory.ccheckid.cstore.cfinit_rng_ptr__lcg_get_rn_fltinit_prime_32mpz_add_uistrcpyget_rn_dbl_simplempz_powmfget_rn_flt__fprint_rng_simple__funpack_rng__mpq_get_den_mymallocprint_rng_tblmpz_get_uiprintflcg64_MAX_STREAMSprint_rngmlfg_free_rngfunpack_rng_ptr__bit_reversefind_Mlcg_pack_rnggetprime_64mpz_abs_DYNAMICfget_rn_dbl_sim__lfg_pack_rngfget_rn_int_sim__init_rng_simplelcg64_get_seed_rnglcg_spawn_rngspawn_rng_tblkval_etextfree_rel_primepluscheck_genfget_seed_rng__prim_eltget_rn_dblload_intfscanfcmrg_get_rn_intmpz_fdiv_q_2explcg64_print_rnglfg_validmemcpy_IO_stderr_get_seed_rnglcg_MAX_STREAMSstore_longload_uint64arrayfmake_new_seed__mpq_set_dengetprime_32malloccmrg_NGENSfget_rn_int_ptr__pack_rng_tbllfg_init_rnglinear_findfree_mp_arraypmlcg_init_rngpmlcg_get_rn_fltrel_primefree_rng_environget_rn_flt_tbllcg_unpack_rngfprint_rng__lfg_get_rn_dbllfg_MAX_STREAMSfget_rn_flt_sim__lcg64_get_rn_fltMAX_STREAMSpmlcg_spawn_rngdivisibleiterate__environcmrg_get_rn_dblmpq_initgen_tlcg64_get_rn_intdeleteIDmlfg_NGENSlcg64_unpack_rngmlfg_get_rn_intpmlcg_print_rng_initload_uint64lfg_unpack_rngmpz_init_setmpq_set_numlcg64_get_rn_dblmlfg_validlfg_free_rnginit_factorscmrg_PARAMLISTlcg_get_seed_rngget_rn_dbl_tblfprintfffree_rng_ptr__mlfg_print_rngload_longarraypack_rng_simplempz_cmpmpz_addcmrg_init_rngany_divideload_longmpz_mul_uilfg_print_rnglcg64_init_rngfpack_rng__mpz_negget_rn_int_tblmpz_sublcg64_NGENSfunpack_rng_simple__mu_evalfinit_rng_sim___startmlfg_unpack_rng__libc_init_firstunpack_rng_tbladdIDfpack_rng_ptr__mlfg_spawn_rngload_intarraymlfg_get_rn_dbldecrmultiplierfpack_rng_simple__mlfg_pack_rnginput_datafilelcg_print_rngjoinignorelcg64_spawn_rngmultsprimesunpack_rngffree_rng__mlfg_get_rn_fltguess_mu_inverseprime_list_32prime_list_64advance_seeddefaultgenfopen__bss_startfspawn_rng__localtimememsetpmlcg_pack_rngmainpack_rngmult_reducefprint_rng_ptr__timelcg_init_rnglcg64_PARAMLISTNGENSlcg_free_rngstrxncmpmpz_set_strpmlcg_get_rn_dbllfg_NGENSunpack_rng_simpleerrprintfget_rn_dbl__get_rn_int_simpledata_startminusfget_rn_flt_ptr__lfg_get_rn_fltinit_rng_finicmrg_MAX_STREAMScheckIDlfg_get_rn_intcmrg_get_rn_fltatexitinit_rel_primempz_modlvalfget_rn_int__get_rn_intcmrg_spawn_rngcmrg_free_rngmpz_clearmpz_fdiv_qmpz_pow_uimake_new_seedfree_rng_tblcmrg_get_seed_rngpmlcg_free_rnglcg64_free_rnglcg_get_rn_intmlfg_get_seed_rngstore_intarraympz_init_set_ui_edatalcg64_pack_rngcmrg_print_rng_GLOBAL_OFFSET_TABLE__endmultmpz_init_set_strchecklistlfg_get_seed_rngmpz_cmp_uifspawn_rng_ptr__mlfg_MAX_STREAMSmpz_setmpq_get_numfind_denominit_rng_tblexitpmlcg_get_seed_rngatoicmrg_pack_rnglcg_NGENSMuincrclockmpz_sub_uipmlcg_get_rn_intpmlcg_unpack_rngget_rn_flt_simpleprint_rng_simple__data_startget_rn_fltcheck_errorsstore_longarraycmrg_unpack_rngmpz_initlfg_spawn_rngget_seed_rng_tblmlfg_init_rnggseedinit_prime_64mpz_mullcg_get_rn_dblfinit_rng__junkfget_rn_dbl_ptr__spawn_rngfree__gmon_start__store_intsprng2.0/SRC/check_gen_ptr100700 764 764 404704 6736173543 14645 0ustar chwangchwangELF,44 (444ԀԀZZhLmm/lib/ld-linux.so.2%<4*3&5$+,9. 82')6 1 0:; %/!7( #-" m#l9h?p'1 EPnPQ >d0"k "p$w<(\9t,5|So \|~c,ojLL|dl$\F4<{?܌J̊Zg&rlBL*l܊|"܋"̋h&\'(J̌)n!n"n!*, 1l'8Ln?LnK0 __gmon_start__libm.so.6_DYNAMIC_GLOBAL_OFFSET_TABLE__init_fini_IO_stderr_atexitlibgmp.so.2mallocfreeprintffprintfmpz_mulmpz_addmpz_initmpz_setmpz_clearmpq_get_denmpq_get_nummpq_initmpz_negmpq_set_denmpq_set_nummpz_submpz_absmpz_add_uimpz_cmpmpz_cmp_uimpz_mul_uimpz_init_set_uimpz_fdiv_qmpz_sub_uimpz_fdiv_q_2expmpz_init_setmpz_get_uimpz_init_set_strmpz_set_strmpz_modmpz_pow_uimpz_powmlibc.so.6__libc_init_firstexitmemcpyfopenfclosememsetatoistrcpyfscanftimeclocklocaltime_environ__environenviron_start_etext_edata__bss_start_endmPnn5ll/m'mm" m mm0m m* m$m(m,m!0m4m 8m3h~1hPnE ] t3jE jE  Dž E}tEhv3hPn h3rh~1hPnE 豀 tE  Dž E}tEh3hPn h 4EÉUEhP4 EEE9Etho4vEh4s}&h4`h5SjYE RVnh35E R)n=nuh55jvtEtEnPE}uha5ht5ÐUUvBvBwuuuu RZÐh5hPn1ÐUEP[UEP0[UEP[UEuuu PH[ÍvUEP`[UEu Px[ÐUEP[US]EPjS覀ES[Ћ]UEP[USUvBvBwuu jjRZЉÃh5hPn1ۃu1![t R`[Љ[n]ÉUS=[uKjjjjjZЉÃt([tR`[Ѓ[nu [P[Ћ]ÉUS=[uKjjjjjZЉÃt([tR`[Ѓ[nu 5[P0[Ћ]ÉUS=[uKjjjjjZЉÃt([tR`[Ѓ[nu 5[P[Ћ]ÉU[tuRx[É1US]EPjSz~ES[ЉÃu1![t R`[Љ[n]ÉU[uh5hPn1ËR[ÉUEP[ÉUS]3~{tP`[v]ÉUEP`[ÉUyÉUSEU M vCvCwQRjjSZЉÃh5hPn1ۃu1![t R`[Љ[n]ÉUWVSEU M]u8 6vGvGwVSQRWZh5hPnM1e[^_ÍvUWVSEU M]u8 6vGvGwVSQRWZЉÃvh5hPn1ۃSFz؍e[^_UVSE] uE uP3RH[ЉÃ19}MB9|tuQ؍e[^UWVS]u }3+yu1AE uP6RH[ЉÃ19}MvB9|tu؍e[^_ÍvUpÉUEP[ÉUS]3xtP[v]ÉUÉUEP0[ÉUS]3JxtP0[ v5]ÐUÉUEP[ÉUS]3wtP[ v5]ÐUSEE PRx[ЉÃUtPRu n u؋]US]3wwu15E PRx[ЉÃEtSPu  u=؋]ÉUSM[u1QRx[ЃËEtSPu u؋]ÍvUS]EPjSryES[Ћ]US]EPjSJyES[ЉÃS*w؋]ÍvUS]EPjSyES[ЉÃu1![t R`[Љ[n]ÉUEP[ÉU[uh5hPn(1ËR[ÉUS]3utP[v1]ÐUSU1۹Ѓ Iy؋]ÉUuu uh5hPnÍvUWVS}u ]19} v8 08t)‰ @9|1e[^_ÐUWVS}u}(Eh6h6h 6h5hPn%[9E |Pu hS6hPn} |M9M |(h6h6h6h5hPn1vv#h6h6h 6h5hPn1=P\u[P\h7h(j(tà u1M C7{ u CPj/nM KMKs %5mC5+C[C$ {uK1vS>؃FSRB9|T\؍e[^_U4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%AQ Ѝe[^_Uu ]EÉU4WVSMI M܉Muvu؉uMI M̉Mu^]F$8}F$P‰UԉUF$UMHʋ@‰UF$X UPӋUPӋu0É]E% NjMyy}E NjE ljyaA%AT7P $\7Ie[^_ÍvUWVSEE} (E hn7hd7h 6h5hPnjh7hu uVpE u E1} Z19} G]h7hj(p‰ tċuv r GuFFBP ~-5[Rh7hPn3Vо Pu FEpr3vVjkjE@$B$uv r E@Bu62E@ %5mBuv +r zuJz ~ REQF؃E QRB9E|߃G9} E @uFFE T\Eu}t'19} ~ u4pƒ`G9} E e[^_ÍvUVSME ]E1҉44tB~M D!B~1҉DB~e[^U WVS}vDKy1ۍv1ɉu TA~C~߻Uv D"C~19]~DuC9]e[^_ÍvUlWVS1}$}[v1}8 8u@|1u1)‰F~1uh8hPn$4PжP̷EE E E EEE" EB vEEEz EEE EESvEE EEAEEEN EvEE ErE EEE EvEEE{E EEE E< vEE EGE3EEEE VEE E2E EEEE@VhP8hPn$v}WGǁ} %Eԉׁ} U܋}WЅ}%)‰U}W y%)‰Uċ}WЅ}%)‰UEuЍ}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|u}}uDKy1ۍv1ɉ}TA~C~߻Uv D"C~1ۉD}C|EЍME1҉<<|B~M D!B~1҉DB~E EЋ}GE E؉Ge[^_Uu T\T\UWVS]{0҉Ѓ(h7hPZiƉu Vj3ksV{0҉U֋CEK KMVjjEEPkփ$Vjs 5kVjs&kVjskփ$VjskVjs j֋K$QUC$@ ‰UK$ U[$]S C ‰UVjjuj֋EM )‰ M 1e[^_ÐUE@ ÐU WVSuuh7h2j(hà u1SjujEU791t FO)ȃ th7uh8hPn1,C707EuuVjjujEusUE ‰SC Pju,jECPjujE(CPjujECPjuiEC PjuiE$ujjujM΁u% EUЃ MUC vh8hPnS1[C$T\؍e[^_ÐUS]h7h8*s ss h8]ÐU4WVSEEE`E-EEZEE11EEEŰM#t vEЍB!u]EЃ EŰ}#Wt vEЍB!uuEЃ mMyEMMEME}E̍B!uM̉M̺ +UܸE}WEЍB!uM1M̋ẼM E}}؋M#9t E̍B!u}̉}EMQM؋}#Tt vEЍB!uM1M̋ẼM ƃEAM܃(}Ge[^_U WVSUR$U}w WUO_(9]+]<u؉>EH9}-MMuEu3}؉CEH9|ۋMuDE09,99}B9|}@HMԋ@EЋE$9EE3EEuE/7uuVJVD}ԋɋ}ЉEH9})uuEu3}ЉCEH9|ۋMuDE09,99}B9|E}} MM̍uuȋ}}E9}SM Mu}M@EuB}MD@t!h9h9h9h9hPnu}D%?DUx$vC@tMD%?JyE]K9]}uP}MG}9|ux}@ EM̋$9E3EEuE/7uȉUuu>u>!uȉUaEM3uCUB9|֋}DM̋09,99}v @9|u@x}@EM̋$9E3EEuE/7uȉUuu>u>#vuȉUEM3uCUB9|֋}DM̋09,99}v @9|EEu9u tNE}9}M9M t7uNu~uu}MtO}M}OXulu Nu}}M MEE`\J9U}"uXЋ}<tEE9E|}Eju6u~$}ċ^ NMFV(9|)44}  HyEHJyUJ44}Hy uNMq}GEM9M|EM2}uuvEpvMu Mq$uY y}AQ(9|)  u<hPnǸ1vh<>hPn謸1h>hj\&Qƃ tƋ]F>M N]^ MN~^$FFF E]9^~Avh>hVMRPV ]V <@C]9^u V(RjMp\?1SQ,$^Dp\t\ ډ1SQ,$^Lt\ 1SQ,$^T] m]ځ?1SQ,$^,]MM5+ ډ1SQ,$^4 1SQ,$^}M Mm$ZmR$>@4HD@,HL}M Mm$ZmR$@}M Mm$Zm>R $X,X4P<>H4>H,Uu>}E Em$ZmÉUu]EÉUWVSu} E h>hPn|h>hM PME u!}1] bv19] ~PCF$V9l\}F1FvPBPR6‹MtE @F$B$C9] E @F$F$M}}t$19] ~}4NjC9] E e[^_ÐUVSu19^~F 4IC9^~~v2v *V! \\e[^ÍvUWVSEx0҃4h>hRLƉu  Vj]3NsV{0VjsNփ Vjs NVjsNVjstNփ$VjsbNVjs$SNVjs(DNC<}] ]m<$ZYmUUE@4}] ]m<$ZYmE ‰U]C4}E Em<$ZYmUUC,}] ]m<$ZYmE ‰U$Vjj]]SM֋E@T}] ]m<$ZYmUU@L}E Em<$ZYm] ډUE@L}] ]m<$ZYmUU@D}E Em<$ZYm] ډUVjju!M֋]E )ډ E 1e[^_ÐUWVSuuh>hj\LJà u1SjuMEE>91t VO)ʃ th>uhB?hPn`1xC>0>USRjuLES RjuLESRju}LE$SRjuiLESRjuXLES$RjuGLE$S(Rju3LEuuVjjuULEU?1QR,$[,MU щ1QR,$[4U 1QR,$[ho?sssht?]ÐUS] EPjju*KECE#??!S]U WVS}U 19}A]EPjjWUJECE#? ?!KFU9|e[^_ÍvU4WVSEEE`E-EEZEE11EEEŰM#t vEЍB!u]EЃ EŰ}#Wt vEЍB!uuEЃ mMyEMMEME}E̍B!uM̉M̺ +UܸE}WEЍB!uM1M̋ẼM E}}؋M#9t E̍B!u}̉}EMQM؋}#Tt vEЍB!uM1M̋ẼM ƃEAM܃(}Ge[^_U$WVSE?EMAE3EEuE/7]S S}#p@UG#t@E ЋM A}}#?=?!yEH9 ?M=?}܋] EEPEEU#UU#E܉EM}3U3DE#p@U#t@E ЉCMM#E}!{EFEH9|M} DDE???9}"lj \ \} L@9|e[^_ÍvUWVS]\EE#?EEu #DEth@hPnc} D#x@ET#|@UuL ‰Q}}#?5?!q}lj}E쐋u} 7#EET#UUut=uD \T \9sB}T L# ?L5?!t }u >#x@ET#|@U ‹}Wuu#?5?!w}EKHe[^_U0WVS11ɋE#UE}t E vEEEEE@=?}ء?Eԉ֍4U1QR,$}E Em<$ZYm#]#uԋ}}ЋM UЉU#M؉ME#EԉEЉE}#MU#WU}ut_M΋UщMU1QR,$1QR,$}E Em<$ZYmU}}E!E}!}E܃}? ء?!E ?U!ʉUE} W?!!Oe[^_UtWVSU?UhAh>] ]S@EhAh?S@Eă}Eu 9u}ȍ<}]ĉ]hAhEj<@u }8B,hAhKuk@B(hAhL]ȍRL@B$Z0U?Q4ur}]Z8urBB Az$tz(u11EE܋} 9}-]ċ uQuur$VuVr(q \M\U# ?M#?UE}9}kE@#]]@#UU}uuċ}z$}URWbE??UډUU1QR,$?1ډQR,$8A}] ]m<$ZYmUUU?E#?Eu#5?u}UW?!5?!w7}ċ]Z$]URSUUS5?!3=?!{]]M ЉEɉM# ?M#?EEEЋu9u}ċB(\]H \9sAHuċR(}:R(?!R(5?!rE}} ]K]u܉uE9u}č<}]؋ű}ċR(U] Quur$u~uuuEu9u}T=?}?]J(u}J(TTR(]!uR(}!DG}]9| \M\U# ?M#?UEu9ukE=@#}}@#UU}u]ur$uURVE=??UUU1ډQR,$5?1QR,$8A}] ]m<$ZYmUUU?E#?Eu#5?u}UW?!5?!w7}]Z$]URSUUS5?!3=?!{]]M ЉEɉM# ?M#?EEEЋu9u}B(\]H \9sAHuR(}:R(?!R(5?!rEE܋}9} tOE؋]9]Lu9u t8}O}؅~}}؋]؋ủ|K]؅uԋ]̉su輣} O}U+UU]č]vEEMI9M}(uR(}<u|tEE9M|}!E]9]U+UUuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$8A}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5?!4ʋJ,R$=?!|E]9]EM}"uu}܋]č<}vEuJ0B4J,z,}yz,]r,uE9|)MR$}}D]L ȉDuz,}B$1QR,$]1QR,$8A}] ]m<$ZYmTJ,R$<ʋu<<ʋ]J,R$5?!4ʋJ,R$=?!|E]9]EMEče[^_ÍvUWVS}uh@AhPn\9E |Pu hAhPnٞ} |9} |Wju hBhPn趞1Uve vh8BhPn葞1?EhAh]KP6 M @9}vDB9|uPE5/7PVjut0Pџ^(uSSB 9;s{t\MM N~ hAhNPC6FhAhNP&6‰V ~tu1)vF$V F(BFN0ɉVF0HBe[^_ÉU WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$|B}] ]m<$ZYm_,TO,W$ʋO,W$?!ʋO,W$?!\_,G$T1QR,$ɋ1QR,$Be[^_U WVSMϋA0q4Q,ZY,JyXY,I,M9|)ƋW$]DL ȉDG$_,1QR,$1QR,$B}] ]m<$ZYm_,TO,W$ʋO,W$?!ʋO,W$?!\O,W$De[^_ÉUu]EÉUWVSu} E hBhPn0^(vSv8vu 6vEuM1v0SS>1 9u ]hAho@PP3‹PhAhp@P13‹P xtP t@$P @(BBR0҉P@0HBF9u y} =\}M9}t&19u ~vM43F9u E e[^_ÐUVSu19^~F 4轛C9^~~v覛v 螛V蕛 \\e[^ÍvU WVSEEP00ۋx։uT2UhAhu1Ɖu uE 1rVjM1#4֋EpVSMy҉UVjEp3փ VjMq 3VjEp3VjMq3փ$VjEp,3VjMq03VjEp4z3փ$VjMq8e3֋EX(H0IM 19}/CEERjjEPUh3UG9}ҋE4ƋMY$A0E19}.CEERjjEPU 3UG9}ҋM4΋ME )ʉЍe[^_ÉU WVShAhjyjuuax؉u uԍ]SDuSu0uSxS zuze[^_ÐUWVS]j hFutVzV}̉pWUp׉ j hEulVyuVVyjVV6z$SxpW`xjWWw؉E׉ p]S0DlSutlwS&ypy1ۋtll]w}u j llzwC~ɋ}} uxuxuyM܃ 19]~01ҋAPhdxh Cd9qFyM19]~31ҍvAPhd=xh Cd9qxEPx1ۋu~uvC)؋}<t)؍X[^_ÐUWVSu h1FhMSZESvEt}u 1E}9}}>]jHMv}ƋplE4uU)lj}U9Un]}t ~gEEE9E}!5nE]JhPnIhEe[^_ÐUWVS]ShShQЋyQ ЋyƋY A ËQUY ii11Ƌ=l)1щ1ƍA1щ l1΁e[^_ÐUEu1ÉPguu uh|JhPn>g1ÉÐUUu1ÉЃElt 9t@uRhJhPnf1ÐUS]u1G؃ ElytQ9tуyuShJhPnf1BARlh؋]ÐUWVSut;hJjhjÅt3 lD C\ 1e[^_ÐUWVS}] u19}v)Ѝ 2B9|؍e[^_ÍvUWVSu19] ~4}<}19U~E)Ѝ E2B9UuC9] ͋EE e[^_ÉUWVS}u ]19}9 ‰A9|e[^_UWVS19} ~6]u19M~v1 ‰A9MuG9} ыEE e[^_ÉUWVS}] u19}v)Ѝ 2B9|؍e[^_ÍvUWVSu19] ~4}<}19U~E)Ѝ E2B9UuC9] ͋EE e[^_ÉUWVS}u ]19}9 ‰A9|e[^_UWVS19} ~6]u19M~v1 ‰A9MuG9} ыEE e[^_ÐUSl=ltЃ;u]ÍvUÐUS[sEe]]%d FAILED: Integer generator does not reproduce correct stream. Arithmetic on this machine may not be compatible with this generator. PASSED: Integer generator passed the reproducibility test %f FAILED: Float generator does not reproduce correct stream Arithmetic on this machine may not be compatible with this generator. PASSED: Float generator passed the reproducibility test %lf FAILED: Double generator does not reproduce correct stream. Arithmetic on this machine may not be compatible with this generator. PASSED: Double generator passed the reproducibility test. FAILED: Generator was unable to spawn FAILED: Generator does not reproduce correct stream after spawning This is probably an error in spawning the generators PASSED: Generator spawns correctly FAILED: Generator was unable to pack FAILED: Generator does not reproduce correct stream after packing and unpacking This is probably an error in packing/unpacking the generators PASSED: Generator packs and unpacks stream correctly FAILED: Generator does not spawn correct stream after packing and unpacking This is probably an error in packing/unpacking the generators PASSED: Generator packs and unpacks spawning information correctly Checking free_sprng for integer generator ... FAILED: Free returns %d instead of %d ... Completed checking generator ư>+=Expect SPRNG WARNING: ngens <= 0. FAILED: Generator does not produce expected stream when ngens is 0 during initialization. PASSED: Generator produces expected stream when ngens is 0 during initialization. FAILED: Generator produces %d streams instead of 1 when ngens is 0 during initialization. PASSED: Generator produces the correct number of streams when ngens is 0 during initialization. Expect SPRNG ERROR: gennum not in range FAILED: Generator does not return NULL when gennum is incorrect during initialization. PASSED: Generator returns NULL when gennum is incorrect during initialization. Expect SPRNG WARNING: Invalid parameter Checking spawn with incorrect nspawned Expect SPRNG WARNING: nspawned <= 0. FAILED: Spawn returned %d streams instead of 1 when nspawned was 0. FAILED: Generator does not spawn correct stream when nspawned was 0. PASSED: Generator spawns correctly when nspawned was 0. FAILED: isprng accepts freed stream PASSED: isprng detects freed stream Expect SPRNG ERROR: packed string invalid FAILED: Generator unpacks invalid string PASSED: Generator detected invalid string while unpacking Checking handling of invalid ID's Expect SPRNG ERROR: Invalid stream ID. FAILED: sprng accepts invalid stream ID PASSED: sprng handles invalid stream ID correctly FAILED: sprng accepts NULL stream ID PASSED: sprng handles NULL stream ID correctly FAILED: isprng accepts invalid stream ID PASSED: isprng handles invalid stream ID correctly FAILED: pack accepts invalid stream ID PASSED: pack handles invalid stream ID correctly FAILED: free_sprng accepts invalid stream ID PASSED: free_sprng handles invalid stream ID correctly FAILED: spawn_sprng accepts invalid stream ID PASSED: spawn_sprng handles invalid stream ID correctly FAILED: print_sprng accepts invalid stream ID PASSED: print_sprng handles invalid stream ID correctly Checking make_sprng_seed ... ... Checked make_sprng_seed ERROR: make_sprng_seed does not return unique seeds Error: Two parameters needed: a gen type as integer and a corresponding data file name Program terminated. rData file missing. Terminating this check. Result: PASSED Result: FAILED Error: in init_rng, invalid generator type. WARNING: No generator initialized so far %s from %s: %s WARNINGinit_rngTotal_gen <= 0. Default value of 1 used for total_genWARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. multiplier not valid. Using Default paramlcg.c0048 bit Linear Congruential Generator with Prime Addendp> maximum number of independent streams: %d Independence of streams cannot be guranteed. WARNING: advance_seed: multiplier not acceptable. WARNING: advance_seed parameters for multiplier %d not available ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters not acceptable. %s seed = %d, stream_number = %d parameter = %d ] 7 ?a ad S_N_i%s from %s: %s WARNINGsi_doublegenerator has branched maximum number of times; independence of generators no longer guaranteed==lfg.c00Additive Lagged Fibonacci Generatorinit_rngTotal_gen <= 0. Default value of 1 used for total_genWARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERRORgennum out of range. Parameter not valid. Using Default paramchanging global L value! Independence of streams is not guaranteedchanging global seed value! Independence of streams is not guaranteedspawn_rngNspawned <= 0. Default value of 1 used for nspawnedERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. unpack_rngdifferent global seed value! Independence of streams is not guaranteed %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. lcg64.c0064 bit Linear Congruential Generator with Prime Addend>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d  7 ?a ad S_N_i]?8ZWARNING: si_double -- RNG has branched maximum number of times. Independence of generators no longer guaranteed =mlfg.c00Multiplicative Lagged Fibonacci Generator=WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. =;=WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' ERROR: Unpacked parameters are not acceptable. %s seed = %d, stream_number = %d parameter = %d WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. cmrg.c00Combined multiple recursive generator>PA>0AP=;AWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d 235711133141611513311321101715372286728091293027097804800000000100000000000000000000000pmlcg.cWARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen WARNING - init_rng: gennum: %d > maximum number of independent streams: %d Independence of streams cannot be guranteed. ERROR - init_rng: gennum %d out of range [%d,%d). WARNING - init_rng: parameter not valid. Using Default parameter. 00Prime modulus LCGACACWARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned ERROR: Unpacked ' %.24s ' instead of ' %s ' %s seed = %d, stream_number = %d parameter = %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d WARNING: Number of primes needed = %d < 1; None returned WARNING: Offset of prime = %d < 1; None returned WARNING: generator has branched maximum number of times; independence of generators no longer guaranteedERROR: Insufficient number of primes: needed %d, obtained %d memory allocation failure in file: %s at line number: %d ERROR: Invalid generator ID %p checkid.c<PtP,PHpLԿp(4@@`hDdXp\pd|u{meD  B 8 u 9 "_.'Uino,?16_.'Uino,?16@qo]QE;!aUI7_S51)#weG-)#C! wqYC;+{k_MKEA#{smgO73-skeaYO){eK53)]C% g+wqQG?5 ymiO'sqkUS5/ok]E/)!uiWI- }wq_[;)# }woe/ sig][C3wmgaOG1 {qc_YW/-!yso[UIE1-+sa[A)kS93{[WE9! _YUM#o_GA3! yuW=' ysaSIG%5/smI7-+%qYG51+#ucY iga]K?+YSOCwkKEA;-!ߴߴߴߴߴߴߴyߴoߴQߴ=ߴ1ߴ-ߴ!ߴߴ޴޴޴޴޴s޴m޴k޴G޴7޴޴ ޴޴ݴݴݴݴݴ}ݴiݴeݴMݴܴܴܴܴܴܴܴyܴuܴ[ܴOܴIܴ9ܴ%ܴ!ܴܴ ܴܴܴ۴۴۴۴۴۴w۴q۴g۴a۴O۴C۴A۴/۴#۴۴ ۴ڴڴڴڴڴڴڴQڴGڴ5ڴ3ڴ'ڴڴڴ ڴڴٴٴٴٴٴٴٴٴٴٴٴsٴaٴ9ٴ3ٴٴٴٴششششششششsش[شSشAش%ششش ش״״״״w״e״]״S״M״G״E״9״'״״״ ״״ִִִִִִִmִaִWִUִ1ִ'ִִմմմմմwմsմeմUմ;մ+մմԴԴԴԴԴԴԴԴԴԴԴԴ}ԴkԴMԴ3Դ'ԴӴӴӴӴӴӴsӴoӴ=Ӵ-Ӵ!ӴӴҴҴҴҴҴҴҴkҴeҴ+ҴҴҴҴѴѴѴѴѴѴѴ}ѴwѴ]ѴYѴMѴAѴ/Ѵ'Ѵ#ѴѴѴѴдддддддUдIд?д+д'ддд дϴϴϴϴϴϴϴϴϴϴϴϴϴϴsϴeϴaϴ_ϴUϴ#ϴϴϴϴδδδδδδδδ{δ]δQδKδ9δ5δ#δ!δδδδʹʹʹʹʹʹʹʹʹuʹmʹcʹ]ʹOʹ=ʹʹ̴̴̴̴̴̴̴̴}̴a̴S̴5̴/̴%̴̴̴ ̴̴˴˴˴˴˴˴˴˴˴i˴Y˴S˴K˴A˴-˴)˴˴˴˴ʴʴʴʴʴʴʴyʴiʴOʴ=ʴ7ʴ1ʴ-ʴʴɴɴɴɴɴɴɴɴkɴ[ɴUɴ)ɴɴ ɴȴȴȴȴwȴoȴQȴEȴ)ȴȴǴǴǴǴǴǴǴǴǴǴmǴiǴgǴcǴKǴIǴ+Ǵ'ǴǴƴƴƴƴƴƴqƴgƴ_ƴYƴAƴ탴DedziFDz5IEȱ3G ˰猰L;ѯgPҮRԭ˓SSӬiTիW֪X]۩9[Aiݨ`_!ߧi`!Ӥ)dk&ͦ]h) ͪk)sk -qr)3ݴ)u5'Ѹww9 G~>o˂;C7ŝ'GȜъL ΛM ͚Pҙ[UY٘[KZٗM[ݖG_+qޕ៕b#A gC'g㨓QjK, Gn1km_v 7Ay{:?~>DyǍeH 9̌oPԋW=Eيo\]މ{^ Eѡ=c%Eǩj5,-mn/;vc77~>mƒm/Fwuʂ5cN 9Ӂ)3Xڀ \OM)a%!~;~i~k,~}}p}k3}|s|x|;|{?{ {@{{ezzGzz yyMyy+x=xUxxKw%w_w="wvvgv(vuuu[mu0uttvtq9tsgs=sAssrLJr7Ir rqquQqq9pp3ZpApo٠oaoy$onnln.nmUmqtm6mll/{l?llkkIk%kjj;SjjiAiq_i=!iohhkh.hg/gougA7gfsf5fuDffueeMeedCdXddc{cccy'cbbobk1bcaa]ya':a`˽``C``__KS__^'^a]^!^]]h]]+]I\\s\7\ [[[C[[ZZUNZZYY]Y!YXŦXjX,XWWtW58WcVVVCFVVUUQUUTT]T3 ToSSihS,SR3RwR9RQOQwQHQ QPoPUPP=OOfO*ONN}rN6N!MMŁMEM M]L%LRLGLKK+dK'K#J!JAvJ9JIIoIIIq IHHsWHHG'GhGA-GF]FCxF>>L>>==;a=&=_<!<q<5<;;];{J;[;y::[:":9s9Wp94988[85I887×7\7"7c6 6r686k555I5/ 54)4[4 4%3ì3q363-2'2˅2J2w2E11_1%1030uy0?0]0q//V//..l.1.)---_H- - ,,^,$,+E+t+;;++;*Ϗ*%U**)[)l)2)(ſ(S(L((''d'-'Q&3&&E&G &Y% % `%y&%Q$Ͳ$x$@$O$#)#1Y# #""t";"="!G!KV!)!S ݫ s 9  eVtS<X %wo@ǖ_)'CY~;E ']e-1N? mC4CmW SQzC !f./ʼniRux> gISg%1+_}X!;~]IM%o:o g c / G } c Y Y$ o m P  C ?~ ;J  Kw C  }kt@Q s@YuBuGxF={;O{[K\, o_@_Ès\/%Y\56}-oa9gM7/{]YQ;95/K?1+!}sgA)okYWMA3-yigW=M1{qiWE'{yU3- wm_YMA= }ua]1 wSC;%iecAcWEseq]QE5/)W9+)uYQ3 siQI?wqgeC=;wq]MA-]3ymeOMGA3#!WO31'wmkSOI;51oie)C yUM%#qWSE3! u!  g7 }_GE'iWI=97-m;1+_smE7'wkaUMA/)}eSyc%qaMqc?OC973kC5 uo{uWK!  }_SOG+ M/#ɿsi=ѾžYM%׽qY-ɼoI?1+ݻ[M7 {]AٹչǹmaI+ ٸ׸˸Ǹs_YAݷ˷÷wcY? ɶǶyoU7ߵӵŵya[=/ ۴ϴke]WS5/)߳óWECѲ}seY;#۱wiMG- ɰo[ѯaG;+ŮE;9ǭsoI=1' ٬Ŭ}sMA;){ui_WSM-۪Ϫgc][=3%ѩ1+#}ocKA;5)'٧iK31ͦsSC ݥۥťwcE95' Ǥsg-+'mgOIGA;עϢ}QK93 ߡ͡{sKICge[Y=1%uS-ݭTsH1洣M{ߴ]ܴYIٴ%ִҴ\ϴ˴ȴYŴ´ﲾZ jG˪s #͠wWaɖ]h]i'i[-r"|xwurn1nkh#dga^ZjWTPeMJFaYC@<9S96ߵ2a/,ɵ(c% "oha`A ^;k!wlqg鳭üg߳ܳسgճ#ҳγk˳ȳ-ij iK 3hmGʦo˜q{В}K(9Ԉ+~{3xmtqcEnjgHd`՘]DZVUS[;PLaI:FB ?%:<8c5829.ь+/($9!)6UIGߔ I 'C;e{FŖ岥Aⲱ޲1۲Aز3ԲѲPβSʲIDzIIJmFq鶲ᑳ}? 䬲ό;1;ࢲwi-՘U~7(ێ˅G3cބ,~Yzsw0tp7mk-j fWcK-`\Y?VSRKOi?LHuEBBU>c;J84?1G.*'D$c EGYU ; gia!hqﱋ)tAᱥgޱ3۱ױlԱ_ѱͱAmʱ DZñ;;6ֹ}xi&ѯ{ ,ե넢E:ۛ)[/ᑱцU5 ㇱA}zGws[paNmYi?fOc_ߤ\TYVR]OLH=^E] Bs>^;g84d1Y.ջ*/e'$+ fog  ?h )[Sa򰭹\C䰁hᰭްڰeװ԰mа{nͰʰưyð;*oۼm-زɂ3{ר9螰:o┰ AoM=})Mz[vϦsmRplCiSfQb_]\ YUbROݺKgH3EyAj> ;7Ah4i1-g* '#)b 1[Z i TqE\ f5;m]ݯiگAׯ;ӯYrЯ ͯɯcƯ*ïiӿO,sٵ#6㫯A?󔞯AML1O탯5H}myv-Msoפl1PiYe˰baZ_[X_TURNTK[ HDIjA >_:57.40)-6*a _FMY: cF'?DǢK䮛ஙݮ[Sڮ'֮ӮqJЮ̮ɮZƮîMZ Kcj#ɫj¡r}˗zk&ՍA,#փ7:}5y%v:solHie}bK_[X]aURNY_KqHDZA>:`7M4y0l-*&ev# Y- 7+0 ŇG9OËaE/>Iݭ Nڭ֭Eӭ7WЭͭ9ɭVƭí1`;gӿgY fY×u $ύu]ȃ)sI}ysv!so~l=/ieb;_ [X7UQ)N8KGDGA=G:K730J-1)&T# fu/i hMu{)k+I/ݬ@ڬ֬;ӬLЬu̬GɬPƬ¬͜QwݬW[벡d laԍ5&S҃_z/}yv1so)l+ieYbCC_m[ XM7UQNS;KG[DGA=:I7q40qX-*&i[# \ɴ_aa h)x'Sv%E+ݫ-9ګ֫ӫ1?Ы̫Sɫ[4ƫ«G[[7d? yi Ǎcv&/҃v}y|v'sYoal/2i;ecbM6_[?X78U#QNLKEGDRA=:T7e3c0eZ-S*5&e# C'jSI{" 1.#:?ǎuD)窿IݪIڪC֪}ӪQRЪͪkɪYcƪy êWĿek% 5ϵtyȫzɡw|+qޗщ2፪RɲK]}Yz3vcsp+l`iS fbOl_\sXWmURNxK_-HDyA;>G:7]I40g-J*&[#SS 3h'i _ s}+yc:F5AyݩwکUש]ԩЩbͩ} ʩ+ƩgcéelOjY!Ψu1ɕCq󔩹R YM%}Wzw sZpSmiudfuc_sf\MYQUlRYOK)|H9!EA>S-;w7]4 11o-*:'#ۚ D#Jc% _ gc 35jvY%訫zᨧ,ި[ڨ ר_0Ԩ[Ш ͨ/ʨƨUè5ܼe:䲨ՑDRGXwkćx'G}Mz/wosp3m%iQf;c_S\yAYwURFOKH SEoBS>ej;3849{1(.*['%3$ 1<y7J [ qPo9g~0]=Y6姹5ާ7ۧ קԧ@ѧ ͧqʧ]Iǧçu_ lgǬp!]ԢA+?☧ۈK7>ㄧ󌁧8~%zwsKtpmMNj=gwcZ`I]IY7`VSO1dL I=E nB?;8:51.C+-'$F!yVqd _ z':ߗFwI{ަݧۦ{RئԦѦAYΦ˦ǦAfĦǽ{,ճ/q/ᩦ󐦦7C矦LS몈X~e{xthqnojyg-!do`U]3ZSVSuS-O? Y!Ƿqkߥܥwإtե ҥΥI˥S.ȥĥ2#ấ<찥ϤPyY-^ +[g {l][̅_1{ǔxo@uq!nJkYgKdVa^yZ^WTP}fMoJFpC%@<'9A262?/N,)%f"oCgMu$ W3EI3X꤯yfܤ/q٤֤ҤrϤ%"̤Ȥ}Ť,¤׾у-ߴD大Jkc񾓤'hqˉsi||'yuMr,ok?h0eai^>[iWyTRQN3J_GD@x=):63Y70,m)?&"JPk `C!h?95磱㣣iAݣ٣֣ZӣMУ[̣)Yɣƣ7£b Afî x"ˤuz1暣G@쐣їGC-A|ۡyCvyr!oNlh_e[fbU_[!xX-UQ!N/1KGCDaLA>ר:U7 4S0o-"*& {#C. W{0F ٔ-DI?mUc`碭eq᢫ݢ}oڢ-$עӢТa;͢oɢYƢVâ/5Y5᫲[' 缨m͞ouY̊as! ΀)}G4zvݕs>pslIi[fU c;_`\ Y[UfRiOcKhHEAK{>,;7Ñ4;1-3*B'# Nߪ3^ l {Cv+];M8Q5]1_.S+'t$$!yq6SK= CmU' t#A5ޝ۝7؝ԝѝMΝʝǝm\ĝcpM"qԳCg3ߩ琦q:k3H_3U]c~w{I'xtq;nej gId5`]9ZZi WS-wPM1IkF&C?<{F9-52iX/ ,(e%"l)qS' |}(ۊQ{;)84a1EL.[*'G$ /[Uv/ u"; =Ogq⚗ޚzۚ)ؚԚoњo=ΚʚqǚTĚMdsdzv0u۩GTgݱ`kˆv'~{:}7=Q409-b*''#)~ {/Fm +] m iC81ɤZ˻olޘ%ۘטuԘ;јw͘ʘ;Yǘ-ĘkĶz4͜QXcE1i' ̋5灘y~R{xݶtcqnjg*ds`]AZ3VSyhPM3IiwF.Ce?:E7A40-\*'E#p I7u' J QydCuU@ǟS1喭nޖ/*ۖזԖ/і͖ ʖOǖÖ+Mf#ɶ{3謖Vd ҕq<狖EYO~U]{ xtpq#nj+g7>d`q]EJZSVQSiPiMIF,C?/< K9;52`/u,(ey%'"E?Gɪ]` =y+@Q՟'M yi ܕٕ9֕ҕoϕY̕ɕŕx•C,㻕c?Z; ['s!U֚7吕{T۲GjG}yv?suo lWicfbAp_"\XUFRsNKYHEmA3|>:;7ۗ4kH17-9*X';$Ǽ f[5~/ q C%A[%z&C_;<ǤޔQ۔ؔ-Ԕ#hєΔʔ {ǔ1,Ĕ@붔\1ĩt%/ן E`on#~{'9xt?qKnKjgQbda]kZ/#WSP;MEIFIOC@#IJs]mA#ꓛ9Bܓ!ٓi֓ӓ#ϓu̓i,ɓœ“MCoEmЮA{)礓IõkkɍW2փ[@}y[vbsplgi=fb_i\K Y}U|R4OKHEEAe>f;)84m1@.*K'L$- o -4 S HCs#E)蒷W\ ߒ߾ےtؒu!ՒђΒ8˒ǒĒEkS^y5%Qݦ%BUTaq $Ѕ;{kx=Pu]rnglkhgd1a;^mZgWdTQWMeJ_1G;CU@SE=9W6Ma30W,)1&"Yk?t" ۋ9?%]YaM䑭ݑ/ڑ֑ӑNБ̑ɑIkƑ3Ñѿe9@gQ`}Ψw+מ=Y] yƇws(})z{=wsp9em? jgfce@`M\IYYV SQOwuL.I}EϚBK?<8p52'.k~+ =('$!Pc_ y ,C3cLgu=jyc鐇/搏ϖߐQܐSؐ/ՐgiҐ ϐː/ȐO.Ő}Ks]yΪ5o9YMr'=剐EiQ |iyv-r?oIlIheeb_m[AX7UQcN{FKG'DaAW>3:mw7#.4S0-S*'#K} Y-ON j a53_}AWg`sOޏ .ۏ-׏cԏIяyΏӵʏkǏ ďGGG6C춏磳}Y=m؟=;Q ˆ=x-(o~{3KxuOqknkg{d2a]ZXWT7P3iMJFӅC6@<39S[63;/p, )%"[@CTg #aGc]a;0]]Lݎ5ڎ֎aӎ Ў?̎osɎ+'ƎoŽ󔿎Dkc_}ȫ{1u衎훞eS ῔s Ί󈇎'@ɪ}`zwis}p1mifkUc `\ oYVRyO:LHEW^B{?e;u8u451.M+'$i!_A] l {{Y@_3Y ugs1⍧ߍq>܍؍Սjҍύ{ˍsȍ0ōuHu e'Ѫ 7e젍#G_t}$yډ;N|pyv3rm~o;l heYb_[qX(U?QۑNY?KCGDbA>1:7:40-+X* '#9~ :ESb 3 65O9oo%5ތZیk،Ԍ{ь8ΌWʌnjUČټs̳2㩌坦R hՒ[EC'bK{o~x3uUq;n Qk? hd ta!^ZWBT3PkMYJGGCmv@5=956_3M 0,u)(&"H[m" Q@3\C9Qx) }狟L݋mڋ׋aӋgЋ9<͋OɋƋ[Ëmļ3z%+ٲኯCD#d=՛k3呋AZ}C҄_1~zw?tpkmkj1gc}`H]3YVgS_PLŅI9FqBo?Vs;kK84/1c.+'}u$M#!Sч+:YSa  }<kb 쉥H剟≛f߉ ܉؉Չu<҉UΉ#ˉPȉ ʼn7FYGkӪ/<9i^kʓO8m቉eL|nye-v{roBlheY_b_[aX9UQQcN\K)HD%}A7>u:?7N4I0-q*'# :w`g u Aaf5ٚgOU3ވyۈq8؈ԈшYΈˈiLj}ĈA9콈\Ȱ2 T] !5eY)E‚ir%)|mxՎuUGraokwhq'ea^R[?X'T'lQ+NJ G_D}A;=:-87g3{0g]-) *&{#2 '%IFv )) !;Iî^uÅ6ᇓRއmۇ/ׇqԇ-ч͇ʇA;LJÇ!^Ŷ傳8I꬇ק%c͟6e蕇'\ԈŎI{vxE4u=q1nPkhidAa=6^wZ)WgTQMwJ MGD@t=5):!6+3_?0,Dz)En&&# O{x- #iM o,񆑓E䆇na&ކچ׆VԆц͆ʆ>džAÆgi!նCIOj(㟆]H鲒dψ+2~{_xuqyn0kg)dTa^ZW2ToPMRJaGqCp@?(=996I30,]y)u4&"[eQk4/ 1d;~g6y􅡨c\녓Cg݅ څpׅ(ԅ)ЅɘͅTʅGDž=Åu55ๅ񜶅#Mp+ޢm?sr3)ߋ'K/~k{E'xt!q]UnkygSsd]!a][ZAW;SP%oMQ&JIF_C{W@% =!9x623=/,K_)_&"Չw6sW p!+%eJWWy,mkM ?݄Eڄ<ׄ[ӄЄ9^̈́ʄ;ƄÄB})je"د׋>-ii(ܘюGS=d7Íc~9{wtQWqQnjg6d`]XZWSPHM IFsC,@+<9)P6_3 /i,A$)%"JC7{5 GQp-o?CA-f;$a݃Zڃ׃7ӃЃI1̓cɃ7ƃQà w¼{;1۲3?SAyM-=_؎5Ei7n~w'{wwtWq n+jug *d`]}LZWS#nP(MIF:CC?<[9'62/<, (%a"%CwE2!U\ )3}6SY]i킓ꂙ?炑ig݂"ڂւӂgLЂ͂ ɂxƂ/Â뿂R Am:eIΛCsg_ׄ玁E~zQwIdtW"qm͔jHgd`k] -ZVKS`PMIFG,(7%d">KϡSY U]xi2-qXs|-'59T݁ځց-ӁiKЁ1́ɁukƁ%!Á)ؿݠQ= [Ȳ}49Qk()ٛGͶu ㄁ͣZ~= {wErtO(q)mjJg? d`~]#AZVS3lPM#IF CC?ٷ}:}v7}54}q0}9-}Wc*}'}#}NJ }MF}q}}q}(}/ } }CF}}|w|0|||;Z||| |aG|||i|k>||-|%c| |-||'P|A||r|7-|||m`|%|EҠ|߂|C|||is|)|M||?h||[||y|Jv|s|!o|l|G5i|=e|Yb|#c_|\|X|_U|Y=R|SN|K|eH|#E|A|>|E;|7|4|u1|1.|*|'|b$|!|||L| || |U@ ||A|d| "{{ɗ{wN{{{v{0{{ǰ{s{.{{_{V{ {3{ou{!/{{{\{G {˱{E{K{{ä{'x{/{{{r{+&{]{ř{V{ {ŀ{?x}{ezz׫zez zezYzRz ~zzzwzG@tzpzYmzljz/gzcz`zuM]zZzVzQvSz96PzLz׭IzcFzCzu?z7,z)z%z|"z7zz zjz?$zz zGzazѿzyy[7yyy^y{y_yy Uy yysy3>y?y9ygy[,yymyjy#yyyHyy3yqy/yyyGYy-yƕyyC=yyպyyy3y~yg{yObxyuyqynyEkygy5dyray[.^yZyWyXTy QyMycJy;GySCy@yz=y::y6y3yk0y(-y)y&y;W#y% y#ysy-Kyy y-x y3 y#yy+dxxSxx;Kxxxtx0x}x xwSxxx}xAxxxaqx0xxxU`xSxذxᖭxMxxˣxo~x4x)xGx)]x]x׌xxOx)xyxAz|xG2yxuxrx[oxlxChxÏexFbx_x[x {Xx8UxaQxNx}kKx1!HxDxkAxJ>x;x7x{4x51x-xe*xp'x.$xg x5xax#xxxN x xxxkQxwwwFw#w=ww8wwwYiw'wwWwPwwww}wu=;uyO8uu 5u1u.u<+u'uW$up!uw2uu}uoiu=uA uu u7Wu5u%u tFtt?tqte0t'tmtjt+ttٗtWt tctnt:tmtt%wt2ttt9gt tttSt tȞttaGtttsyt;tt1t3lt&~tgztwtWtt=qtImtjtEgt/dt`t]tyFZtWtSt-sPt/MtIt߮FtqCt1@ts;sy7s4s\1sQ.s*sA's]N$s !ssŁs9:sssqx s: s+ssws6rMr r`r-%rcrUrarrrrCYrrr r1=rrr]ur 2rrrarArٮrrCWr%r١r;rMr rU̔rr9rr#r!|r;9rm}rzrbwrtrpr'mriWjr grcrDž`r'L]rGZr7Vr}Sr5PrLrIr/jFr Cr=?rWq:q7q {4qU71qS-q*qh'q7,$qk qqjq/qq۰ql q!( qqqbqpwppOpGpp~p?pppswp6ppMpmip,pp;pnpe6pp硸p}]pYpۮp+pPppΡpQp1Fpqp͔ppJpp܇ppQp[~p zpwpNtpU qpmpjpk7gpcp`pq]pk,Zp=Vp Sp^PpMpIpEFpKCp@p{oQ\;o)8o4oA1oiH.oY+o'oCx$o3!ooono]-oGo oq o2ooomnC$n=n{n^nnn/nXnninonHn nnnC=nn%n)sn/nnenun0nnOnkjn-nOnٰnwvn6nnMnivn+nn%nm~n#{nwnitnXqnnnyjnߑgn}Sdn an]n+ZnTWnTnmPnMnYPJn GnkCn@ny==n 9n6nt3ne+0n ,n)nKi&n)#nn]nmZnn#nnU n nnςnAme mmmFmmmm @m!mm+mBmCmmm:mmm]zm 4m?mmsm93memٯm1rm 2mYm몝mbm'mmGmZmmцmUm)Sm}msymvmPsmpmlm!imIJfmE cm_m\m=EYmVmRmOm{GLmI ImaEm%Bm+T?m%m+!mmym>mm]mAnm. mmǰmnm)lllql3llelml&l/llllI%l?lQlO\l?ll5lVllݹll^l'lllXlIlПlIlQl+lʒl1lLllʅlgl>l{lxlulFrlolklw{hl54el=aly^ln[l'XlTl9QlhNl$KlGl}DlKbAlO">l+:l7lc4lQ1l-l*l]'l$l l-lUl?lllL l l=llPl kkkEkkk~kA@kkkQkxk9kk?k k@kCkkok=kkk5~k=k5kckxk7kKkẞkk5kkknk',k_kٰk1mk9,~kzk˩wkahtk"qk}mkϡjk!dgk"dkU`kA]kcZkWk-Sk}Pk\MkJk;FkYCkX@k}=ke9kW6ka^3kO#0k,kw)kb&k#k!kkpkI%kikkm k2 kkŬk9lj-jjj]yj14jgj)jmj8jSjijtjq7jWjj׆jBjj=js}j>jjj}jAjKjçj|jFjjj~j:jj{jwj7jjj z}j5zjvjysjkrpj1mjUijfjscj:`j\j9YjzVj1SjOjsLjuIji3FjYBj?j[}jjAi iJi ii{iAiSiiS~iHiU iiGi5Oi?iii9?i!ieƽi5i_Bi?ii|ii9iii}i@iiciWwi7i_iĉi1i=Fii|iyyi:virioimli2iieibi]{_i1\iXiUiwRi3OiKiHi!wEi-5Bi>i;i{8i65i1i.i+i-E(i-%i!iaia?iiiiEiM iiτiIKi1hhhYEhh-hM|h>hhhňhGh hh=hMh]hhhyYh/hйhhMhhʬhᆩhHhkhA͟hh%Rhh+ڒhhbhih؅hh{Yh9|hqxhuhYrhoh1kh-hh ]eh bh^hY[hfXh%UhQhNhlKh++HhDhAhw>h5;h7h4h%r1h..h*h3'hg$he$!h]hhnh}&hh hj h6hshhtg8g}gg~g#bbbbLb#b5b bM b boba{LaaaaXa-a-aa1_ay a3aaja?'aa=a}awGaa̾aՌaEVa+aرa휮a?ZaAa-ߤa}a`aO.aaasa8aaa7aMag ~auzaѓwa[ta qa7majahga+da1`a]a?uZa:WaTa/PaMa]Ja$GaCaa@ah=a,:a6aϲ3a9s0a=-aI*a&a#aaR aia?aaaa%aC a apa96a`)`kz`C````Q`o```[````j`)``5`m`K2`i`շ`}`>`U`i``UQ`u`ݞ``s`:```z`=`C`Ɓ`3~`G{` x`t`%q`Tn`k`g`d`\a` ^`/Z`W`eT`.Q`MM`wJ`w{G`EED`A`S=`):`K7` 4`O0`7-`\*`;'`o#` `uk`2``O`_`H ` ``É`M` _A_1_O__i_s_;b___ _j_'__Ŭ_s_9_?___[N__յ_͔_]__}__9l_e1___a_{_A_ _׋__d_)_w~_{_%mx_9u_[q_Cn_3|k_@h_e_a_^_R[_X_T_oQ_KlN_?)K_G_D_mA_1>_:_7_ņ4_J1_3 ._U*_'_T$_}!_s__=h_.__ _! _A___~^A@^%^1^K^P^^s^9^i^u1^^^C^E^?^c^^1T^^׼^^Wb^)^?^^uu^/<^^ɟ^C^O^ ^GҒ^;^\^g"^^3^q^5|^5x^Iu^ur^=8o^ k^h^e^Ob^_^;[^7X^5rU^2R^N^CK^ouH^e@E^B^/>^;^E\8^5^1^.^i+^_4(^{$^!^|^9^^S^ӑ^GW^ ^U^5^{^=]]a]]}a]]]]ko]e0]W]]#]_T]O]+]]_]!]M]թ]n]-]]]}]c>]I]ã]g]cK]m ]Ж]]Q^]+%]]]w]8]|]y]v]As]p]l]i]%cf]C%c]A_]\]sY]:V]S]IO]L]OI]wF]B]ɒ?]V<]]9]5]2]=s/]?5,](]%]5y"]=?]7]]]F]] ]W]'M]Y ]\\]\\\9\Ww\?\\\\K\\%\I\[\\\۳\w\?\\÷\댴\M\9\ڪ\3\oa\$\\\v\C@\\+ˍ\\%U\\ր\}\bz\&w\Ss\p\ m\#Jj\g\c\`\-l]\A.Z\AV\S\xP\K@M\J\F\oC\3P@\ =\9\6\{n3\+0\,\)\Ո&\M#\W \w\{\k\2\\ \ \N\\9[W[S[[[w[l[3[5[i[[!M[ [[Q[_[ [O[7[|[?[[ʸ[7[ES[1[׫[[][[[E['[]z[E[G[?Ɏ[3[U[[܁[ ~[_d{[1x[t[q[xn[yEk[h[d[a[Y^[[[W[T[UnQ[e8N[J[G[~D[=A[=[:[Չ7[UO4[1[9-[1*[ar'[D$[; ![[U[X["[[' [{ [C[-[[їZu^ZM%ZZZ;uZAZYZZӋZyMZZZZomZ2ZZZ~Z{CZ]ZܹZZUbZw1ZZsZe|Z-?ZyZOɜZZPZZ-ݏZoZ[sZ@Za Z[Z|ZYyZvZrZoZplZ[-iZeZbZݎ_ZT\Z-YZUZRZkOZw/LZHZEZՏBZX?Z=YYY|Y%HYYYsYsY?9YYKYY#MY{Y?Y-YgYE.YYŷYY9TYYYYYCY_ YʚYYWYYY5Y'lY-YY}YzYGwYtYpYumY`jYy'gYYcY`Yw]YE?ZY{WYSYPYSMYJYFYCY}n@Y<=Y9Y6Y 3YU0Y"-Y)Y&YUu#Y37 YOYiYY)\Y$YW Y Y xY'BYmY[XX]cX*XXwXXELX?XCXAXqX>X-XXyXMUX XXAXkX/XXSƲX厯XZXXX3X~XKX%XsޕXXiX#3X}XžXɊXYX|XxXuXlrXa0oXQkXhXeXSbX_X[XXXsUX5RXNXKX-HX#AEXkBX>X{;Xc8X+5X1X.Xk{+X>(X%X!XQXYXw(XXXuXP XXXXtWk=WWWkWkW6WWWדW3[WWWMWbW1WW{WUWCQWWWᵷW}WFW WЪW9W `WU#WMWWtW5WWKWMWAMW WkـW}WkzW;.wWsWѼpWmW!HjWgWcW՘`WI^]W%ZWGVW3SW|PWAMWmJWFWCW\@W%=W9W6W3WP0W9-W)W&W i#W1 WWW WWSW W W WxW@WVVV]V$VVV~VFVV]V!VeV;-VV3VqVQVV VVwVBVW VmӲV7VaV,V1VV/VDV VԕVVugV)VVkV{V@V |VExVuVZrVw!oVkV;hVueVIAbVE _VW[VXVjUV2RVNVmKV]HVOEVBV>Vɥ;Vt8Vw85Vq2V.Vy+Vl(V 4%VO!VV1VYTVWVoVVd VE7V VV[UKgU+UUUrU/UUU5U]aU](UUmUoULU[UMU#UoU3UeU÷UsU;IUU'תUߝUgU+0UQU_ÚU팗UsUU?UcލU琢UrU:UC U}}UўzU]wUo#tUpU;mUyjUS:S]7Sk4S[X1S'#.S*SDz'S}$SN!SSS SpSG8SSSU SՑSgWS SR1R|R DRRRRRKR RRR~RcLRRRRIsR6RR7ƽRRaRc(R]RDzRvR6R?RYʠR嗝RQfR2RRKRReURRORKR{}Rc@zR_wRsRMpR7amRY%jRqfRQcR9`R;^]R(ZReVRSR PR{RMR]JRFRCR;u@Ro>=Rk:R6Rc3Re0R9-R)R&R#R]O RRQRRoR9R R RMRogR0RQQQTQQQCQkQ9Q Q%Q=QZQU'Q'QQQRQQCQ饼QoQ>QGQw֯QQqQw:QIQyПQQceQ(QQ!Q5QALQ{QQ}Q|QP?PѨP[PqjP8P P=՘PQPfP(PmPP}PLPP7{P{xPruP:rPoPkPߕhPdePK1bP^P[PXPkcUP# RP}NPIKPבHPe^EP/0BP>P;P8PT5P#2P.P+P-y(PS?%P"PPPkuP9PiPKP PgP2P5POOXO 0OOOOnOeOIQ;Oy$8OU4O]1O.OY+O}(Oo$O!O}OCOOMOOUrO@ O OOßOmNkN:Nŝ7Nk4Ni41N-N*N'NY_$N.!N9NNN{`N0N NG N7N=cN/NMmMMisM BM MMUMrM?8M MMߙMknM]J JպJKJ7mJ@JJJJJ}SJ+JJJJ RJ JYJJJ]J_*~JzJ7wJtJoqJ);nJkJgJdJyaJ_G^J[J{WJ/TJO|QJ;LNJ=KJ}GJ7DJ3AJ#_>J0;J8J4Jw1Jp.J9+J(J$J!J rJ;J)JSJ?JpJ. JJJՠJqlI>IIII qI>I1IIIkIS8II;IcIbI;5I9II_I[qIEIK IܴI)Ic~IPIIIgIIoXI(IgIőI+I+aIs(IIIˁI~Id{I/xItIqInI[kI%hIdIaIa^I7k[I!6XIUIQIcNIgKIQHII'EIwAIy>I;I'Y8I})5I1I.I_+IZ(I)%I!IIAIZI$IMII; ISI{ II;HqHVH#HHHHu]H-HHsHݘHiHK8HHHHmHE;E}r8EqH5E2Ea.Ee+E9(EU%EU$"EEEEbE5EE E5EKkE:EiDCDYDODWD DYDEDDqkDUDDD1DDIZD.D)DעDD{D7GDD DDDeDW0DDD|DsyDwBvDsDoDlDiDifD;cD`D\DUYDmVDgASDoPDsLD_IDFDOsCD<@D =D9D6Do3DF0D-D)D&D#DYM DDDDmD3YD% DS D'DD bD0C CC#CrCKHC{C C-CC^CQ4C;CCCCaXC)C-CCCCCVC +CCϰCɠC vC!CC C۠CwC{CKCCC揄C}CKCQCC}CzCrwCBtC/ qCmC7jCɃgCRdC$aC]CIZCӕWCiTC1QCeNCJC#GCwDCQAC >C:C7C4Cwc1C=5.Cw*Cc'C$C}!C[QCCCCoC!qC= C CC5CytBCBBgBBB\B9*BBB+BtB;BBBBBBhB;B!B߾BSBBOBI,BB;ԫBB|BMB/BSB븘BBGXB-BB5шBOBcvB>BI|B3xBջuBMrB{YoBc,lBiBeB?bBz_BS\Bu$YBMUBWRBOB^LB0IBFBBB?B{A=AؠAAoAMSA"A+AȍA5AkjA >A'AW}A˶zAwAYtA1qAnA3jAYgAydAATaA(^AZAWATA{QA)KNA"KAGADAAAj>A3;A}8A+4As1Au.AT+A)(Ao$A!AAtAOA%AOAA{ AqA;FA1A@@}@h@a@@U@@@k@}]@$@@}@@n@A@@@@@)q@F@ @w@'@ѐ@_@<@ @w@ߴ@@_@O5@@ޏ@϶@5@Y@{,@u@w|@y@v@ics@:p@M m@i@f@}c@T`@#,]@Z@V@/S@uP@iPM@;J@=F@C@Q@@q=@<:@e7@3@k0@-@\*@-'@$@5 @@t@AH@ @}@ @ @a@ >@a@_?g?S}?cR?#?q???n?H?????w?K?$????1i?A?????i?=??E?+ž?U?Uj?3B???Ë?ݗ?q?[E?U?{? x?1u?qr?Eo?(l?h?e?b? u_?E\?OY?UU?R?O?dL?o@I?uF?B???K>>>Mg>>> >>>m~>P> >>> >]w>C>c>C>>>u>P>>>3ĭ>Ś>ks>H> >W>ɚ>>)o>mF>>{>Ç>>`>}7~>7{>w>t>q>Vn>*k> g>Od>ia> s^> K[> "X>WT>Q>ϤN>qK>BH>E>'A>Y>>;>]8>:5>-2>+.>/+>m(>'^%>98">>_>>i>m>q@> >>>>f= <=u==]==k=C=====r=L====ɚ=~=EL="==9ǹ==Cp=J=1==Ħ==u=yJ={==Ó==Wa= 8===)=}=]gz=3w= t=p=m=j=#ig=:d= a=m]= Z='W=lT=7EQ=gN=)J=G=7D=oA=E>=;=7=ѵ4=1=e`.=5+= (=$==!==f=<==== =o=B=]=<<:::ȉ::go:D:}:y:Ov:s:Ayp:Qm:!'j:g:qc:`:]: \Z:y3W:'S:kP:M:gJ:/_G:3D: A: =:Y::ї7:r4:cH1:!.:*:':$:p!:H:::-:G:cz:AP :a':::ͬ99Q9_19/9 9 99ab959A9M9Y9 9r9I9/99}9s99\929/ 9߲9A99Qr9/D9993͜999QR9 9S9҉99k9X90}9z9v9 s9p9mm9>j9 g9c9 `9]9GZ9SZW9.T9P9M9QJ9G9dD9M6A9>9:9)79+4919;U.91+9(9 $97!99q9F9 99_9 99sk9E9I8888Ym8I8]%8+8888kc8=888-8ӧ8~8V8#(88u߼88c8f8788c8Ħ88kq8H8c8}8Γ8ͧ881V8/88ހ8i}8z8lw8ENt8-q8n8j8g8d8ca8;^8[8W8aT8%Q8vN8GK8 H8%D8WA8>8i;81k88OA5828!.8+8Q(8{%8H"8Y$8]88y88j8D 8) 8887Wp7H7s!77Q7g7 7Y7K.7 7!77/7k7:7_77w7_77]7!67M7]7ɰ77m7R7+7+7+77ՙ7!o7K7u#77҇7]77__~77{7x7wt7q7An7a|k7eQh7W1e7a b7^7=[7!~X7XU7/R7 O7K7H7E7cB715';5i8545#15!.5|+5Y(5 1%5"5555a5>55 555˰55{`4G844444|4ob4=4544Y4E44Wb4=4i4I444/4SS4*4C444Ӝ4{4mO4$434۝444Uv4)T4U+4 445DŽ44t~4J{4Q"x4?t4q4!n4׏k4Gkh4Be4c#b4_4[4X4U43wR4QO4(L4AI4ME4B4?4l<4A94 6424/4,4A{)47T&4:#4 444_4-~4\4; 4 4s4443/h3H3!3c3333/_383'3333Ð3k3KA3S%333Ű3w3j3H3 -3y 33ʨ3ˤ3~3V3-333’33{3T39333|3y3ǒv3es3Cp3m3i3f3c3Ӕ`3g]3cIZ3I+W3T3gP3ǻM3J3oG3 ED3!A3=3G:373߀43qY13;.3+3}'3i$3!3 3h3]I3}3C3]3 33c3;F322U2G2?2Kx2Q2,2 22m2٬2?2`2@2222s2m2b2D222׳22Ո2e2C2'212%۝22+2́2c2/A222ф22~2b{2;x2u2Wq2n2k2gh2je2Ab2_2c[2_X2U2R2YhO2>L2I2E2;B2%?2<292^6263202,2#)2&2 #2f 2G2"2222[ 2iz 2_2e82211%11Um1L1G*111/11Y}1mT1151 1A1q1_11]1@1!11ڵ1511G~1kT131+11Ҝ1a11l1)D1191q݆1W1u1z}1Vz1a1w1At1Ep1m1j1Cg1?_d1Aa1/!^1[1W1'T1iQ1+uN1_PK1/H1 E1A1>1-;1-81qb51UC21$/1G,1(1%1"1j1AH1&11c11 1y 1V1G1-"10000c0K0)000_00̓0f0a@000000-o0QE0 (0 00Ʊ0I0o0f0E0%000Θ0a00f0AE0'0A00_0|0vy05Xv0;s0p0_l0i0;f0c0d`0<]0Z0cV0#S0P0ŖM0yyJ0YG07D05A0=0:070ə40z10Y.0{7+0s(0$0!00߈0Gi0F0*0 0 0000p/K/1///!/Ż/!/v/!U/4///'///q`/3=////S///%_/@/7#/'/ܧ/{//_/;=////]ǎ/!//q/]S/8/|/_x/gu/r/əo/Uwl/Xi/:f/c/_/;\/kY/}V/IlS/MP/7M/1J/iF/C/G@/ =/h:/WJ7/y$4/#1/-/*/Q'/$/9\!/AC/C+///// /t/mW/?/.{..Q.K.7u.O.}-. ....ō.r.}W.5... ...1w.)X.8...ޭ...ׄ.ee.D./'.{ .mߔ.ȑ...n.R.E'..{.x.Cu.Ir.qo.UPl.3i. f.b._./\.=Y.lV.1TS.S5P.M.I.!F.YC.@.r=.F:.7.4.s0.-.*.ϐ'.Sp$.R!.3..)..w.).h .kN.70.c.-!---|-U-?---1--]--j-J-Q---I---i-y-\-B-3%-y ---{--e-C---ٔ---r-EQ-W.- -~-{-x-u-ir-3Oo-95l-i-e-b-]_-!\-3Y-QcV-CS-]&P-#M-I-F-C-I@-#t=-aT:-+7-Y4-0---=*- '-f$-?F!-*--)-i-˨--s -\->--- ,,,,-,x,W,q,,A,,c,9,[,3w,)W,:, $,Q,,,,,e,SH,!,,,ɪ,,ɔ,n,gH,', ,#,YΑ,ѱ,,x,MY,4,g,{,}x,;u,ӕr,3qo,Vl,1i,f,Kb,'_,\,3Y,V,[ZS, ;P,Y M,I,aF,C,@,}~=,`:,C7,$4, 1,m-,*,m',k$,I!,j,/L,;3,,-,, ,,u,{f,I+4+'+++++z+a+7@+}++/+G++ߌ+o+S+ 3+5+_+޽+{++{+Yd+J+)+i+{+eϡ+K++]n+T+3;+ + +O+…++3+}f|+Ey+I,v+s+o+l+i+f+gc+)L`+/]+_Z+?W+?S+kP+M+J+ikG+'MD+ ,A+>+M:+7+A4+1+y.+`++C(+(%+' "++?++ߘ+}+}h+SJ +a/ +c++*y**߄*1g*W*+9**O** *}*5*f*Q*/****u* *ˆ*n*U*3***ܫ*彨*7*%*Ic*D*&*_**Ǐ***o*P*6*k}* y*Gv*s*p*/m*vj*Zg*>d*o%a* ^*Z*W*qT*Q*gsN*RK*y4H*A E*3 B*>*;*58*5*?{2*_/*E,*e*)*% &*"**i*O*=*i*%B*/ * ****))m)MQ)5))9)c)-)[))o)Q){8)){)7)))#){)a)iF)')') )֬))Y))un)mL)k,))1)א)))~)b)/C);%~) {)w)Et)q)ɫn)ُk)!{h)de)9Nb)._)m\)EX)U)R)oO)фL)eI)HF)m*C)@)3<)9)6)3)50)io-)T*)c9')"$)K !))))))u)T )q8))U)(C(%(A(;(}i(P(6("(;((((͚(ˊ(r(X(A("( (O(ٽ(º(({(?g(OK(6(/(+(ۡ(Þ(((r(W(w-(((kޅ(ʂ(_(m|(K{y(dv(-Es(,p(m(j(f(c(`(](suZ(CWW((\;({D8((5(w2(y.(+(((%("(h(T( ?(=(((=(A ( (((g(K'-6''' ''M'U''Ci'P'S0'M''i'')'#'w'`'F'W/'''ݲ'ȯ'M''t'e'F'$' ''Փ' 'ݧ'S'v']'<'S&~'m{'w't'q'ժn'k'xh'ee'Kb'k3_'\'}X'U'kR''O'9L'I'tF'i]C'?@'&=' :'6'3'0'/-'*'Ax''aa$'J!'.'m'''''ח 'i}'I_'sG'c)&c&&&&'&&G&n&\&=&-"&&e&&Q&Ǡ&&=o&1X&B&0&q&#&&α&&&}&{k&YR&4&3!& &&ْ&cƏ&&&y{&Z&oE&/}& z&; w&s&p&Ym&j&ag&od&Qa&9^&$[&X&T&}Q&N&ѠK&H&nE&IMB&1?&<& 9&5&2&/&],&)&}&&me#&O &7&&S&&& &c &ӊ&r&X&?%.%%Q%%%W%%%#|%e%MI%'-%%%%%[%;%%wm%OT%>%Q$%% %ح%ż%%G%{%k%=L%1%q%y%=%1Ӌ%%%ׇ%Sp%m\|%Ay%#.v%s%o%al%ii%f%Ic%`%;]%qjZ%WW%_CT% )Q%}N%WJ%WG%AD%A%ו>%e;%5i8%R5%>2%o,/%,%k(%}%%K"%%%S%g% V%>%$ %e %s%%3%Y$O$W$Ql$}R$A$/$$?$$y$w$$$$f$A;$&$$$տ$$]$$Wu$Ya$L$=/$_!$W$$[ޝ$Mʚ$i$$ |$9f$}R$E$+$[$${$Qx$u$ݰr$o$/l$3hi$Jf$3c$#`$W ]$Y$V$7S$P$M$J$mG$ND$$;$7$4$e1$Q.$?+$k($1}%$`"$Q$<$e$a$k$$U $ $ $v$f$cV#G#%4#'"#m##c###a##ay#g#{Q#;#3'##s#/#_#Cÿ####y#[b#L#<#O####ޠ#oĝ#ߥ#O##i#R#G?#,###e~#{#x#u#r#o# l#Wni#cf#Pc#9`##+]#Z#V#S#qP#5M#J#~G#pD#]A#SG>#4;#/)8#s5#2#q.#{+#(#Ѷ%#S"#A#-#r#b#?#0# # #!###9"" |"l" Z"?D"+%"g """"" ""z"u`"L"75"C&""?"" ۹"˶""""z"om"S"s:"5'""""Ց"Ď"Ӫ" "5"z"c"I|"8y"I+v"s"wo"kl"Mi"f"c"`"]"wZ"kdW"KT"+8Q"N"3K"3G"qD"A"q>";"ّ8"W}5"i2"?U/"{D,"0)"&" #";""]""""? "o "k^"H"7";! !!!w!]!!!~!9i!9X!E!6!$!u!!=!!!!!!n!{^![H!e3!=$!!!!ҡ!뻞!Ϩ!!僕!s!\!Q!4!$!_!!|!y!v!s!p!}m!qj! kg!Yd!Fa!#2^![!q X!T!Q!9N![K!qH!œE!)B!x?!bE'4B"? <952/ ,)&# q\QF3+ mѓwh^K<)Q q}mk٨'v-dwUC2  Ӝș˹{) xdmXIRUH~3{"xuqqnQkShմeb_y\oqYfVOSAP+8M5%JGu D@=:G7k41.+~(t%m]"VY>[*%  [ ӂ}i)bQQ=5I!E o?kKrSfPi>s.!3ؤʡ Ğ邒{t]RN}@1}{%zUw}tp%mjgda^[kXKU]pRo_OMLg@I?1FK&C@=_9U63#0-ݾ*U'ǧ$!!'ukj!TWMy@4 , 'q3eO}qdZV=)2%] 5;cؼ͹~k\wMF7/"s7o|iyvGsp;myj%gdzac^`[VXNUI8R=(O L!IEB?<9ߺ6S3C0Ǎ-*r'^$R!)P@6* !wc u=U[˒7Aob\SF<.%Oc)ؼ̹¶ѵ-}nc5[Om@?=e+ | y}vspm'j)g͓da{{^v[fX^ULRBOW9Lw+IaF5C@{<%93630-k*='Q$!w}n\]R N D560U%c WmwqWߦ[G{vmGgiVP[AQ5C+! Kޞ؛ҘE͕ E%雉Gwr}fz\w3Nt9Bq]:n2k(h5ebO_ \Y5URO%LIYFC@ӽ=i:7}41.x+s(j%h"w]UKD6%1/$ a !io%)5moxgsaYPaJ=1+W!1  C ڟϜ)˙ ;ב/?;z~u{mnxauM\rKoDlm;i1f_(c`]7ZWYTPMJOGD#A>w;852 /,)c&#U I{nnib TFA59S,9'1Q5 u)rmj5^?]GXRGKD?E6E,$Q)]|y%vKspmjg)da+^{[3XͥU-ROYL7IxFYtCAt@kp=`:W7!U4L1M.gJ+A(=%7"E1c+&  ! uuS˧sEKyosohefb_\TLJ'GK>/#&")~|oxu rolIifc`?]IZ9WTQNaKaHEBQ?<q967w3x0w-Gl*+k'^$yY!5X}W7RN/Q+LM B <<1 ,%I# +)uȽyź·ak빥QE=ɗ{i]~{xǕumroql/iNJf3cǃ`]]Z{WTQӉNK%H|Ei{B!{?!v<!y9Gp6i3%c0Cb-^*b';[$3X!VUaKYF)>#=7 %< 3[0+a&#!   %  o5is7Y-UސIލ߇mۄށ~{;xurol+if!cǻ`ù])ZqWTQNKHmEB?<963;0C-*ɝ'$!ma5u A ]ٓ331͊'aق1mٍ)=ߍ݊K?u|]zy{~-~{{v |za{|Gyv7s)pOmjgMdфa9^7[XUR?OLIۏFC@Ý=/:ѕ741՞.+ (%9"  iݤ#9k  Qמ!ߦϯ5)97%{ÿ ʼ͹˶!ȳY˰ǭIê'-ǤWӡ_Ҟ%ӛ1٘EӕҒ#ԏЌ׉݆[}zwtq%n/k!hIe]b_]5Z W/TQ NwKH3EB?<9I$6(37)0+-]+*O)')$,!-':<A>>?D F sN7JoIImKIKSUi[o]u]]dh%tmpsw})G[ 㒵#ACǔ!ɑ9͎ ȋˈӅ؂|9yav}s7p[mj'g=dbo_]\Q$Y$Vq%Sq*P=5M6J?G-?DHAG>aS;W8`5-h2Mc/j,s)Kz&%# Ϗ q=7 Cը5Iy;Q/k ]Oq# O-U4s67BIJKR1[WaOi)n'tY{}wo=Úm|'ymvspmjGgdaK^[\? YV#S P(M%J(G7Di@AK>M;T8!Z5qe2s/1r,{)+&# ?} E mw}/CG # "*/:kCG}LS[yeOs3z~5EseŦΣ)Ҡ=ܝ-sMQ)#c+MB}DzGw7QtXq+an'mkAwheb3_\)YV+SPMJ9GaDAU? <596&3E70=-oH*%E'K$R!kdjoc~~I  91AKc1U)y7AMRqdIp{c/ƭϪS٧AY$6kBK[7jr;~Q~{ٓxurIolcisfcC`}][3X"U7/RDOLLNI;RF`Ci@cy=):}741.a+(%Q"UQw)8;=7M eUufkvsϒ-c[m_? /4H Wiw#QIʲaܯ ; -A[El|+U﵀s}szwt/qn lWi? fW0c?;`G]YZ}iW{TQN٬KHEB?<O9 7w4,1%B.O+Od(/t% "o_  $4D Z 3i )t W / ' C I ! _ % 8 =F W Uh u [ ] ϲ U i / 3@ S /h v ق ) ժ S ˃ ݀ } z x 'u 4r Ao Kl \i [qf zc ` ٜ] Z W gT Q N L e'I /F HC X@ i= |: 7 g4 }1 w. + ( % #  3( ; eJ [ i } )      / i= P [ o C K 5 + ! 6 kF Z Al O| W  İ ;֭  + A V l 道 Ƈ ؄   k| 4y Gv CWs mp m ߍj ug Wd a w^ [ Y V /S {EP eXM rJ +G D A > ; k8 E5 G3 %0 <- L* b' |$ 9! k  y  %   S, I q^ Uo  3 o 1 # 4 cG _ u ם o w 5  + A S k ? q Ө  Ӭ E  $ U> Y m  dz ͌  3 g ?) @~ ^{ vx {u r Io el i 5f d a 0^ F[ q\X qU +R -O 'L sI _F iD A 5> G; ^8 r5 2 / , ) & $ ! 8 R h } % 7  y  5/ K i g  1 A E Y / ;F eX s  պ I e * s@ 9W r ; ç gŲ k  0 I s` 1s  岘 ˕  -6 {T m Y ~ { Mx su s 0p Hm cj +yg d ëa ^ =[ X V c7S wSP nM ݄J סG D KA > E< (9 EE6 9d3 0 - !* ' /$ " + A ^  ) ) ] Q 3 1 kH i 9 a  3 U o A  * GL g E   iݿ 5 ; \ ew K Ҩ S & a; SU t Y Ŷ ֎ a  6 ?T q ݎ} 9z w t r o :l \i {f Kc ` Q] Z wX 3U QR pO ML I F ]C A y2> gP; j8 ю5 2 u/ , Y * /' P$ j! m  9 C O /, E f Ɉ   O ?W`5wKY=`̈́I$Df[EѼ39e[è'W>cɧ;̑?<+]!U}ozx=u_rol ifd++a)J^i[X%UERO$MCJdGDWAQ>;946T30Ǧ-?*' %5"q_?e% m*Q zk9E5SZx11X} 6\ScQG=]`ڲ$S]}Şš#k;gc=m׍i&Myv'y|y=wAtjqnYkhf2c]`]ZWOU+RWOu~LIFC]AuC>!k;852I04-1Z*a'$C!;1YUzM s MHGrŘF;h[-?HuQy Bm+% _;ee?@ejaɪ!Ouk!͙(KOx;ֈA0`}zMw[uMr{ol}ig1d?daQ^#[X}VHS%vPMJG(EGYB?<99 7D4kz1.+7)S3&1b#Ő Yu9#aT_   3Fk|ͫ2 g .}WݳIt7CoA% y<KhѵU/2e'ͧ!5kYCљu7h+ы3eW}{,x;gurGo1m6jog!dCa _E\wYVSo Q?N wKH1ECI@م=:7!5qX2/,){/'g$s!A ;QwL {$b9c%4n ??L]0f';!XCK:tU= VUά:vO"['IՓ @?{1Q/ag{}z#xS^ur'ocmKj݁gda58_5u\KYwV*TgQN%Kc&IaF]Cc@>!\;853R0-O*(aJ%"3qJ--?@}   Ae7@ӄ RӓYUёkOߐi?ZW $Af'+l<~7'<-ɞgR3#ۓd_U.ni}F{xus#YpMmj +hseb`[L]ZIW!UhROL@JyGDBs`?c<927ez4S1/uP,י)&-$sx! PC-3-~ 1 Z?߉ oZ٨w=G{i]]Lw7c%U#co; `e[W٥)K;/-חy,}͏j+e{K}Vz}w)tKr˙ol3Dj{gMdcCb_\?ZWTAROLIJGDoSB?<U:75[2y/-]*'%ug"9s#0  9--@Xm'wG?kO9oG .Xvָ5K]{"ieJ{ uuՖ<EjЉ6-`!|a+zwtgr#o9mjhreb C`m]3[XUYSPY,NÙKSI5sFCJAa>$<9-7p41P/Q,/*'%g"doFU*{# wMbWPg>)ٖ%gk~SsKpIjgfd_b+kqqoÅe ەӨ3D˕U1n Uo9Q\}gzuxv+s=qnUglj g9eb{m`o ^ϩ[EJYWV#T%ROnM%KHudF DAe?=׾:p87%653'15B/A,[*3s(3&]#۶!|EY eGm( + qcG1mRbrŠҊ"2BRbr‹ҋ"2BRbrŒҌ"X  p'4t P lpGCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.3GCC: (GNU) 2.7.2.301.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.hash.dynsym.dynstr.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.ctors.dtors.got.dynamic.bss.comment.noteԀ#) tt144P9 B K p T ,Z<< _,, @ep'pk'U#sZylllmPnPPhhh b |HԀt4< , p' ' Z lllmPnh p  <' &<' <lId' Tl bl l'  p op l TZ l     X n   D    \   ? !? (\ ,h@ 9p@ Bx@ M@ L W `p j }  o  \ v  ~0 nnnn  x n X  l n # l  #  $  $ p p %r 3L>\'En Wl` n. (( |S#: [ &$l\  4U P5 X& `   @W " 2 .j6m?  Q7 ^4  p0z d  ) H[ d\ l' Ĵd      &8 ( 2 ̊-p3 =$9 G܊NPnPZ g[ w$9 e    c$2 0"\ X2 x[ <   : P- #G 4| > Gn!P0[ _ n {t X\    \  Y  n,]  \nL2 %L$[ .\ 9` J Z|3 jhp@ | ,oP ? 5  \   [ <(2 !3 0%R ?$ OLW\_l m$  x%8 l3 L <D |~[ \ V Tt  , h %7[ F$R LV \O k&R y   P\ جM  n\3    [p n@ (    ' f 8 \ F x T p a [ l |"r Ln~ lX ) ̋h + ԣ; ȥ  ܋" (/ J  p\ \  (  ?  ' P> 8 h\ B V T  ]  k n } Z lm 3 Կ G p'1 \ $D H  > l   `\  @ ' X 2  A U O ,5Y <{d L*o # } `[ X  / U p   X&V \F Ln _  d3  l5 0 : ( ? lBP l@ Z  k |dv Īm \ L t o  Z  p  & @ T\ `    ̌ ܌ ) # D* 4 n F x. W Z d l o 2  | 8%V ^ 9  [  \\ X r    ] n3  * "/ >&9 initfini.cgcc2_compiled.crtstuff.c__do_global_ctors_aux__CTOR_END__init_dummyforce_to_data__DTOR_END____do_global_dtors_aux__DTOR_LIST__fini_dummy__CTOR_LIST__check_gen_ptr.csprng.clcg.cequiv.36lfg.cadvance_reginitializeget_node_index_rnglcg64.ctemp.26mlfg.cMASK64MINUS1ONEINT_MOD_MASKINT_MASKINTX2_MASKSEED_MASKget_fillsi_doublepow3cmrg.cpmlcg.cinita.72r.73result.78overflow.79primes_32.cinitiallized.26num_prime.27primes_64.cmakeseed.ctemp4.2memory.ccheckid.cstore.cfinit_rng_ptr__lcg_get_rn_fltinit_prime_32mpz_add_uistrcpyget_rn_dbl_simplempz_powmfget_rn_flt__fprint_rng_simple__funpack_rng__mpq_get_den_mymallocprint_rng_tblmpz_get_uiprintflcg64_MAX_STREAMSprint_rngmlfg_free_rngfunpack_rng_ptr__bit_reversefind_Mlcg_pack_rnggetprime_64mpz_abs_DYNAMICfget_rn_dbl_sim__lfg_pack_rngfget_rn_int_sim__init_rng_simplelcg64_get_seed_rnglcg_spawn_rngspawn_rng_tblkval_etextfree_rel_primepluscheck_genfget_seed_rng__prim_eltget_rn_dblload_intfscanfcmrg_get_rn_intmpz_fdiv_q_2explcg64_print_rnglfg_validmemcpy_IO_stderr_get_seed_rnglcg_MAX_STREAMSstore_longload_uint64arrayfmake_new_seed__mpq_set_dengetprime_32malloccmrg_NGENSfget_rn_int_ptr__pack_rng_tbllfg_init_rnglinear_findfree_mp_arraypmlcg_init_rngpmlcg_get_rn_fltrel_primefree_rng_environget_rn_flt_tbllcg_unpack_rngfprint_rng__lfg_get_rn_dbllfg_MAX_STREAMSfget_rn_flt_sim__lcg64_get_rn_fltMAX_STREAMSpmlcg_spawn_rngdivisibleiterate__environcmrg_get_rn_dblmpq_initgen_tlcg64_get_rn_intdeleteIDmlfg_NGENSlcg64_unpack_rngmlfg_get_rn_intpmlcg_print_rng_initload_uint64lfg_unpack_rngmpz_init_setmpq_set_numlcg64_get_rn_dblmlfg_validlfg_free_rnginit_factorscmrg_PARAMLISTlcg_get_seed_rngget_rn_dbl_tblfprintfffree_rng_ptr__mlfg_print_rngload_longarraypack_rng_simplempz_cmpmpz_addcmrg_init_rngany_divideload_longmpz_mul_uilfg_print_rnglcg64_init_rngfpack_rng__mpz_negget_rn_int_tblmpz_sublcg64_NGENSfunpack_rng_simple__mu_evalfinit_rng_sim___startmlfg_unpack_rng__libc_init_firstunpack_rng_tbladdIDfpack_rng_ptr__mlfg_spawn_rngload_intarraymlfg_get_rn_dbldecrmultiplierfpack_rng_simple__mlfg_pack_rnginput_datafilelcg_print_rngjoinignorelcg64_spawn_rngmultsprimesunpack_rngffree_rng__mlfg_get_rn_fltguess_mu_inverseprime_list_32prime_list_64advance_seeddefaultgenfopen__bss_startfspawn_rng__localtimememsetpmlcg_pack_rngmainpack_rngmult_reducefclosefprint_rng_ptr__timelcg_init_rnglcg64_PARAMLISTNGENSlcg_free_rngstrxncmpmpz_set_strpmlcg_get_rn_dbllfg_NGENSunpack_rng_simpleerrprintfget_rn_dbl__get_rn_int_simpledata_startminusfget_rn_flt_ptr__lfg_get_rn_fltinit_rng_finicmrg_MAX_STREAMScheckIDlfg_get_rn_intcmrg_get_rn_fltatexitinit_rel_primempz_modlvalfget_rn_int__get_rn_intcmrg_spawn_rngcmrg_free_rngmpz_clearmpz_fdiv_qmpz_pow_uimake_new_seedfree_rng_tblcmrg_get_seed_rngpmlcg_free_rnglcg64_free_rnglcg_get_rn_intmlfg_get_seed_rngstore_intarraympz_init_set_ui_edatalcg64_pack_rngcmrg_print_rng_GLOBAL_OFFSET_TABLE__endmultmpz_init_set_strchecklistlfg_get_seed_rngmpz_cmp_uifspawn_rng_ptr__mlfg_MAX_STREAMSmpz_setmpq_get_numfind_denominit_rng_tblexitpmlcg_get_seed_rngatoicmrg_pack_rnglcg_NGENSMuincrclockmpz_sub_uipmlcg_get_rn_intpmlcg_unpack_rngget_rn_flt_simpleprint_rng_simple__data_startget_rn_fltcheck_errorsstore_longarraycmrg_unpack_rngmpz_initlfg_spawn_rngget_seed_rng_tblmlfg_init_rnggseedinit_prime_64mpz_mullcg_get_rn_dblfinit_rng__junkfget_rn_dbl_ptr__spawn_rngfree__gmon_start__store_intsprng2.0/SRC/READMEver2.CHANGES100600 764 764 4414 6736173543 14606 0ustar chwangchwangChris S.: 7 June 1999 Added a new version of 'insertlib' with a name 'insertcheck'. 'insertlib' to be removed. Added new versions of check_gen.c check_gen_sipmle.c check_gen_ptr.c timing.c Makefile: moved Makefile to Makefile.old and put new version of Makefile. ----------------------------------------------------------------------------- June 9, 1999: Chris S. Created a modification of -- check_genf.F ---> check_genfM.F check_genf_simple.F ---> check_genf_simpleM.F check_genf_ptr.F ---> check_genf_ptrM.F Since I don't know how to read arguments from the command line for FORTRAN executable, created files -- gen0.data containing 0 (gen type ) and content of lfg.data gen1.data " 1 " " " " lcg.data and so on gen2.data, gen3.data, gen4.data. Run command: ./check_genf_ptrM < gen3.data or ./check_genf_ptrM < gen0.data 2> /dev/null Trouble with unpack_sprng in Fortran files: First call to 'unpack_sprng' goes alwas smoothly but second call inside the function 'check_errors' creates "Segmentation fault (core dumped)" This second time 'unpack_sprng' ---> 'funpack_rng' is called with argument 's' being an array of characters '0'. Such setup is working with the ver 1 of SPRNG. Commented troubled parts of source code. Runs smoothly now. This has to be fixed!!!!!!!!!!!!!!!!!!! ----------------------------------------------------------- June 11, 1999: Chris S. The above problem from June9 has been fixed. The core cause has been fixed by Mike Z. All 'check_gen...' files have been modified. Two new scripts 'inserttimecheck' and 'insertcheck' have been added. Now 'inserttimecheck' producess files of the form {n}, as gen0_lfg ={0}, gen1_lcg (and similar) and the script 'timesprng'. Now 'insertcheck' producess data files by augmenting lfg.data, lcg.data,..., from the top with the corresponding generator number (0,1,2,3,4,5). Use the command 'head file" or 'more file' to see it. Makefile has been modified in parts related to timesprng and checksprng. ------------------------------------------------------------------------------- June 14, 1999, Chris S. make.LINUX has bee prepared to use MPI, exept deleting #'s. Path has to be set correctly. ------------------------------------------------------- sprng2.0/SRC/Makefile.old100600 764 764 17413 6736173543 14320 0ustar chwangchwang############################################################################ # # Then typing the command below => results in the following being created # make => Fortran and C libraries for all the generators, # Timing and checking executibles. # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) CHKDIR = .. ############################################################################## ####### The following is the only line in this file that you may modify ###### LIBLIST = lcg lfg lcg64 cmrg mlfg pmlcg ############################################################################## include make.$(PLAT) #--------------------------------------------------------------------------- # Jump point to each generator's own makefile #--------------------------------------------------------------------------- all : @for l in $(LIBLIST) ; do \ (cd $$l; $(MAKE) ) ; \ done #--------------------------------------------------------------------------- # Create files that all generators need #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = primes_32.o primes_64.o \ fwrap_mpi.o cputime.o makeseed.o store.o\ simple_mpi.o memory.o communicate.o checkid.o sprng_common : $(SPRNG_COMMON_DEPEND) primes_32.o : primes_32.h primes_32.c $(CC) -c $(CFLAGS) primes_32.c primes_64.o : primes_64.h primes_64.c $(CC) -c $(CFLAGS) primes_64.c fwrap_mpi.o : fwrap.h fwrap_mpi.c $(CC) -c $(CFLAGS) $(FFXN) fwrap_mpi.c cputime.o : cputime.c fwrap.h $(CC) -c $(CFLAGS) $(FFXN) cputime.c makeseed.o : makeseed.c $(CC) -c $(CFLAGS) makeseed.c simple_mpi.o : simple_mpi.c memory.h interface.h $(CC) -c $(CFLAGS) simple_mpi.c memory.o : memory.c $(CC) -c $(CFLAGS) memory.c communicate.o : communicate.c memory.h $(CC) -c $(CFLAGS) communicate.c checkid.o : checkid.c memory.h $(CC) -c $(CFLAGS) checkid.c store.o : store.c store.h $(CC) -c $(CFLAGS) store.c #--------------------------------------------------------------------------- # Create executables to time the generator #--------------------------------------------------------------------------- timesprng_exec : timesprng_c_exec timesprng_f_exec @chmod u+x $(CHKDIR)/timesprng timesprng_c_exec : $(CHKDIR)/time$(TIMESPRNG_LIB) @./insertlib $(TIMESPRNG_LIB) $(CHKDIR)/timesprng "Timing C interface" time$(TIMESPRNG_LIB) $(CHKDIR)/time$(TIMESPRNG_LIB) timesprng_f_exec : $(CHKDIR)/timef$(TIMESPRNG_LIB) @./insertlib $(TIMESPRNG_LIB) $(CHKDIR)/timesprng "Timing FORTRAN interface" timef$(TIMESPRNG_LIB) $(CHKDIR)/timef$(TIMESPRNG_LIB) $(CHKDIR)/time$(TIMESPRNG_LIB) : timing.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/time$(TIMESPRNG_LIB) timing.o -L$(LIBDIR) \ -l$(TIMESPRNG_LIB) $(GMPLIB) $(CHKDIR)/timef$(TIMESPRNG_LIB) : timingf.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/timef$(TIMESPRNG_LIB) timingf.o -L$(LIBDIR) \ -l$(TIMESPRNG_LIB) $(GMPLIB) timing.o : timing.c cputime.o $(CC) -c $(CFLAGS) timing.c drand : drand.c cputime.h cputime.o $(CC) $(CFLAGS) -o drand drand.c cputime.o timingf.o : timingf.$(FSUFFIX) $(F77) -c $(FFLAGS) timingf.$(FSUFFIX) $(LIBDIR)/lib$(TIMESPRNG_LIB).a : $(TIMESPRNG_LIB)/$(TIMESPRNG_LIB).c (cd $(TIMESPRNG_LIB); $(MAKE) $(TIMESPRNG_LIB)) #--------------------------------------------------------------------------- # Create executables to check whether the generator is ported correctly #--------------------------------------------------------------------------- checksprng_exec : checksprng_c_exec checksprng_f_exec @chmod u+x $(CHKDIR)/checksprng checksprng_c_exec : $(CHKDIR)/check.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Default C interface:" "check.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Simple C interface:" "check_sim.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking C interface with pointer checking:" "check_ptr.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) checksprng_f_exec : $(CHKDIR)/check.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Default FORTRAN interface:" "check.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Simple FORTRAN interface:" "check_sim.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking FORTRAN interface with pointer checking:" "check_ptr.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) $(CHKDIR)/check.c$(CHECKSPRNG_LIB) : check_gen.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check.c$(CHECKSPRNG_LIB) check_gen.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) : check_gen_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) check_gen_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) : check_gen_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) check_gen_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check.f$(CHECKSPRNG_LIB) : check_genf.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check.f$(CHECKSPRNG_LIB) check_genf.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) : check_genf_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) check_genf_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) : check_genf_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) check_genf_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(LIBDIR)/lib$(CHECKSPRNG_LIB).a : $(CHECKSPRNG_LIB)/$(CHECKSPRNG_LIB).c (cd $(CHECKSPRNG_LIB); $(MAKE) $(CHECKSPRNG_LIB)) check_gen.o : check_gen.c sprng.h $(CC) -c $(CFLAGS) check_gen.c check_gen_simple.o : check_gen_simple.c sprng.h $(CC) -c $(CFLAGS) check_gen_simple.c check_gen_ptr.o : check_gen_ptr.c sprng.h $(CC) -c $(CFLAGS) check_gen_ptr.c check_genf.o : check_genf.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf.$(FSUFFIX) check_genf_simple.o : check_genf_simple.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_simple.$(FSUFFIX) check_genf_ptr.o : check_genf_ptr.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_ptr.$(FSUFFIX) .SUFFIXES : .SUFFIXES : .f .F #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $(SRCDIR) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- clean : rm -f *.o *.i @for l in $(LIBLIST) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) clean ; \ cd .. ; \ done realclean : rm -f *.o *.f *~ *.i core a.out @for l in $(LIBLIST) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) realclean ; \ cd .. ; \ rm -f $(CHKDIR)/$$l.data; \ done sprng2.0/SRC/check_gen_simple.c100600 764 764 14706 6736173543 15530 0ustar chwangchwang/*--- Chris S.: June 1999 */ /*--- reads in, first an integer as a generator type and next elements from */ /*--- a data file */ /*--- checking Default C interface ---*/ /*--- added 'int gtype' 'scanf("%d\n", @gtype)' and gtype to all init_sprng */ #include #include #include /*#define USE_MPI Uncomment to test with MPI. */ #ifdef USE_MPI #include #endif #define SIMPLE_SPRNG #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 int gtype; /*--- adding generator type ---*/ #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen, i, size, seed; char *s; int tempi, correct, result = YES; const unsigned int fltmult = 1<<20, dblmult = 1<<30; double tempd; seed = 985456376; gen = init_sprng(gtype,seed,PARAM); /* initialize generator */ if(gen == NULL) { result = NO; printf("FAILED: SPRNG was unable to initialize the generator\n"); } /* ____________________ Check default generator ________________________ */ correct = YES; for(i=0; i<200; i++) /* check integer generator */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<50; i++) /* check float generator */ { scanf("%d\n", &tempi); #ifdef USE_MPI tempd = (double) get_rn_flt_simple_mpi(); #else tempd = (double) get_rn_flt_simple(); #endif /* printf("%d. %d %f\n", i, tempi, tempd);*/ if(abs((tempi>>11) - (int) (tempd*fltmult)) > 1 ) { printf("%d. %d %d\n", i, tempi>>11, (int)(tempd*fltmult)); result = correct = NO; } } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<50; i++) /* check double precision generator */ { scanf("%d", &tempi); tempd = sprng(); if(abs((tempi>>1) - (int) (tempd*dblmult)) > 1 ) { result = correct = NO; } } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator passed the reproducibility test\n"); size = pack_sprng(&s); /* check packing */ if(size == 0) { result = NO; printf("FAILED: SPRNG was unable to pack the generator\n"); } for(i=0; i<100; i++) /* default and packed generators now differ */ isprng(); gen = unpack_sprng(s); /* check unpacking */ if(gen == NULL) { result = NO; printf("FAILED: SPRNG was unable to unpack the generator\n"); } correct = YES; for(i=0; i<100; i++) /* check unpacked generator */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing.\n\tProbably error in packing/unpacking\n"); else report("PASSED: Generator packs and unpacks correctly.\n"); return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, i, size; int tempi, correct, result = YES; char s[MAX_PACKED_LENGTH]; /* ____________________ Unpack invalid string _____________________ */ #ifndef CREATE_DATA memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ printf("FAILED: Generator unpacks invalid string\n"); else report("PASSED: Generator detected invalid string while unpacking\n"); #endif correct = YES; for(i=0; i<100; i++) /* check packing/unpacking */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not maintain original stream when unpacked stream is invalid.\n"); else report("PASSED: Generator maintains original stream when unpacked stream is invalid.\n"); return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; i ../gen$6_$1 fi if ! [ -f $2 ] then cat .insertlib > $2 fi echo echo >> $2 echo echo $1: $3 >> $2 echo "./$4 < gen$6_$1" >> $2 fi sprng2.0/VERSION100700 764 764 27 6736173543 12436 0ustar chwangchwangSPRNG 2.0 24 June 1999 sprng2.0/include/ 40700 764 764 0 6736173543 12752 5ustar chwangchwangsprng2.0/include/d~100700 764 764 54 6736173543 13355 0ustar chwangchwangdiff -n $1 /u/ncsa/ashoks/rng/sprng/TESTS/$1sprng2.0/include/interface.h100600 764 764 3013 6736173543 15157 0ustar chwangchwang #ifndef _interface_h_ #define _interface_h_ #define DEFAULT_RNG_TYPE SPRNG_LFG #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int get_rn_int ANSI_ARGS((int *igenptr)); float get_rn_flt ANSI_ARGS((int *igenptr)); double get_rn_dbl ANSI_ARGS((int *igenptr)); int *init_rng ANSI_ARGS((int rng_type, int gennum, int total_gen, int seed, int mult)); int spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int make_new_seed ANSI_ARGS((void)); int make_new_seed_mpi ANSI_ARGS((void)); int get_seed_rng ANSI_ARGS((int *genptr)); int free_rng ANSI_ARGS((int *genptr)); int pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *unpack_rng ANSI_ARGS(( char *packed)); int print_rng ANSI_ARGS(( int *igen)); int *checkID ANSI_ARGS(( int *igen)); int *addID ANSI_ARGS(( int *igen)); int *deleteID ANSI_ARGS(( int *igen)); int *init_rng_simple ANSI_ARGS((int rng_type, int seed, int mult)); int *init_rng_simple_mpi ANSI_ARGS((int rng_type, int seed, int mult)); int get_rn_int_simple ANSI_ARGS((void)); int get_rn_int_simple_mpi ANSI_ARGS((void)); float get_rn_flt_simple ANSI_ARGS((void)); float get_rn_flt_simple_mpi ANSI_ARGS((void)); double get_rn_dbl_simple ANSI_ARGS((void)); double get_rn_dbl_simple_mpi ANSI_ARGS((void)); int pack_rng_simple ANSI_ARGS((char **buffer)); int *unpack_rng_simple ANSI_ARGS(( char *packed)); int print_rng_simple ANSI_ARGS((void)); #ifdef __cplusplus } #endif #endif sprng2.0/include/sprng.h100600 764 764 4035 6736173543 14355 0ustar chwangchwang#ifndef _sprng_h_ #define _sprng_h_ #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 #include "interface.h" #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #define CHECK 1 #define MAX_PACKED_LENGTH 24000 #ifdef USE_MPI #define MPINAME(A) A ## _mpi #else #define MPINAME(A) A #endif #define make_sprng_seed MPINAME(make_new_seed) #if defined(SIMPLE_SPRNG) #define pack_sprng pack_rng_simple #define unpack_sprng unpack_rng_simple #define isprng MPINAME(get_rn_int_simple) #define init_sprng MPINAME(init_rng_simple) #define print_sprng print_rng_simple #ifdef FLOAT_GEN #define sprng MPINAME(get_rn_flt_simple) #else #define sprng MPINAME(get_rn_dbl_simple) #endif #elif !defined(CHECK_POINTERS) #define free_sprng free_rng #define pack_sprng pack_rng #define unpack_sprng unpack_rng #define isprng get_rn_int #define spawn_sprng(A,B,C) spawn_rng(A,B,C,!CHECK) #define init_sprng init_rng #define print_sprng print_rng #ifdef FLOAT_GEN #define sprng get_rn_flt #else #define sprng get_rn_dbl #endif #else #define free_sprng(A) ((deleteID(A)==NULL) ? -1 : free_rng(A)) #define pack_sprng(A,B) ((checkID(A)==NULL) ? 0 : pack_rng(A,B)) #define unpack_sprng(A) addID(unpack_rng(A)) #define isprng(A) ((checkID(A)==NULL) ? -1 : get_rn_int(A)) #define spawn_sprng(A,B,C) ((checkID(A)==NULL) ? 0 : spawn_rng(A,B,C,CHECK)) #define init_sprng(A,B,C,D,E) addID(init_rng(A,B,C,D,E)) #define print_sprng(A) ((checkID(A)==NULL) ? 0 : print_rng(A)) #ifdef FLOAT_GEN #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_flt(A)) #else #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_dbl(A)) #endif #endif #endif sprng2.0/include/sprng_f.h100600 764 764 10142 6736173543 14676 0ustar chwangchwang #ifndef _sprngf_h_ #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 #define DEFAULT_RNG_TYPE SPRNG_LFG #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #ifdef CHECK_POINTERS #define CHECK 1 #else #define CHECK 0 #endif /* ifdef CHECK_POINTERS */ #define MAX_PACKED_LENGTH 24000 #ifdef POINTER_SIZE #if POINTER_SIZE == 8 #define SPRNG_POINTER integer*8 #else #define SPRNG_POINTER integer*4 #endif #else #define SPRNG_POINTER integer*4 #endif /* ifdef POINTER_SIZE */ #ifdef USE_MPI #define make_sprng_seed fseed_mpi #else #define make_sprng_seed fmake_new_seed #endif #endif /* ifdef _sprng_h */ #ifdef USE_MPI external fseed_mpi integer fseed_mpi #else external fmake_new_seed integer fmake_new_seed #endif #ifndef DEFAULTINT #define DEFAULTINT #endif #ifndef FLOAT_GEN #define DBLGEN #endif #if defined(SIMPLE_SPRNG) #undef DEFAULTINT #ifndef _sprngf_h_ #define pack_sprng fpack_rng_simple #define unpack_sprng funpack_rng_simple #ifdef USE_MPI #define isprng fget_rn_int_simmpi #define init_sprng finit_rng_simmpi #else #define isprng fget_rn_int_sim #define init_sprng finit_rng_sim #endif /* ifdef USE_MPI */ #define print_sprng fprint_rng_simple #if defined(FLOAT_GEN) && defined(USE_MPI) #define sprng fget_rn_flt_simmpi #endif #if defined(FLOAT_GEN) && !defined(USE_MPI) #define sprng fget_rn_flt_sim #endif #if defined(DBLGEN) && defined(USE_MPI) #define sprng fget_rn_dbl_simmpi #endif #if defined(DBLGEN) && !defined(USE_MPI) #define sprng fget_rn_dbl_sim #endif #endif /* ifdef _sprng_h */ external isprng external fget_rn_dbl_sim, fget_rn_flt_sim external init_sprng, fpack_rng_simple external funpack_rng_simple, fprint_rng_simple #ifdef USE_MPI external fget_rn_flt_simmpi, fget_rn_dbl_simmpi real*4 fget_rn_flt_simmpi real*8 fget_rn_dbl_simmpi #endif integer isprng,fpack_rng_simple,fprint_rng_simple SPRNG_POINTER init_sprng, funpack_rng_simple real*4 fget_rn_flt_sim real*8 fget_rn_dbl_sim #endif #if defined(CHECK_POINTERS) #undef DEFAULTINT external fget_rn_int_ptr, fget_rn_flt_ptr, fget_rn_dbl_ptr external fspawn_rng_ptr, ffree_rng_ptr, finit_rng_ptr external fpack_rng_ptr, funpack_rng_ptr, fprint_rng_ptr integer fget_rn_int_ptr, ffree_rng_ptr, fpack_rng_ptr SPRNG_POINTER finit_rng_ptr, funpack_rng_ptr integer fspawn_rng_ptr, fprint_rng_ptr real*4 fget_rn_flt_ptr real*8 fget_rn_dbl_ptr #ifndef _sprngf_h_ #define isprng fget_rn_int_ptr #define free_sprng ffree_rng_ptr #define spawn_sprng(A,B,C) fspawn_rng_ptr(A,B,C,CHECK) #define pack_sprng fpack_rng_ptr #define unpack_sprng funpack_rng_ptr #define init_sprng finit_rng_ptr #define print_sprng fprint_rng_ptr #ifdef FLOAT_GEN #define sprng fget_rn_flt_ptr #else #define sprng fget_rn_dbl_ptr #endif #endif #endif #if defined(DEFAULTINT) external fget_rn_int, fget_rn_flt, fget_rn_dbl external fspawn_rng, ffree_rng, finit_rng external fpack_rng, funpack_rng, fprint_rng integer fget_rn_int, ffree_rng, fpack_rng SPRNG_POINTER finit_rng, funpack_rng integer fspawn_rng, fprint_rng real*4 fget_rn_flt real*8 fget_rn_dbl #ifndef _sprngf_h_ #define isprng fget_rn_int #define free_sprng ffree_rng #define spawn_sprng(A,B,C) fspawn_rng(A,B,C,CHECK) #define pack_sprng fpack_rng #define unpack_sprng funpack_rng #define init_sprng finit_rng #define print_sprng fprint_rng #ifdef FLOAT_GEN #define sprng fget_rn_flt #else #define sprng fget_rn_dbl #endif #endif #endif #ifndef _sprngf_h_ #define _sprngf_h_ #endif sprng2.0/lib/ 40700 764 764 0 7034410053 12053 5ustar chwangchwangsprng2.0/lib/Makefile100600 764 764 114 6736173543 13610 0ustar chwangchwangSHELL = /bin/sh clean : @rm -f *.o realclean : rm -f lib* .SUFFIXES : sprng2.0/make.CHOICES100700 764 764 5044 6736173543 13346 0ustar chwangchwang############################################################################ # # Three decisions to make: # 1. Platform # 2. MPI version or Non-MPI version # 3. Is libgmp.a available # ############################################################################ #--------------------------------------------------------------------------- # # 1. Platform # # We have set variables giving information on the archiver, the C compiler # and the FORTRAN compiler for certain machines in SRC/make.xxx, where xxx # is your machine name. In the lines that state: PLAT = ... , exactly one of # the lines must not be commented out. This line corresponds to the machine # you are on. For example, if you are on a Cray T3E, remove the '#' sign from # the beginning of the corresponding line. Change the following line: # #PLAT = T3E # Cray T3E # to: # PLAT = T3E # Cray T3E # # If the machine you are on is not in the list, please send mail to: # ashoks@ncsa.uiuc.edu stating the machine you are on. You may also modify # the make.GENERIC file to suit your machine and continue with the 'make' # process. # #--------------------------------------------------------------------------- #PLAT = CONVEX #PLAT = DEC #PLAT = HP PLAT = INTEL #PLAT = O2K #PLAT = SGI #PLAT = SP2 # IBM SP2 #PLAT = SUN # For T3D, Use PLAT=T3E instead #PLAT = T3E #PLAT = GENERIC ############################################################################ #--------------------------------------------------------------------------- # # 2. MPI version or Non-MPI version # # MPI version: uncomment the following line and # modify appropriate make.(PLAT) file # # Non-MPI version: comment out the following line #--------------------------------------------------------------------------- #MPIDEF = -DSPRNG_MPI ############################################################################ #--------------------------------------------------------------------------- # 3. Is libgmp.a available # # comment out if you want to exclude generator pmlcg which needs libgmp #--------------------------------------------------------------------------- PMLCGDEF = -DUSE_PMLCG GMPLIB = -lgmp ############################################################################ #--------------------------------------------------------------------------- # library dir for libsprng.a # By default, the libraries are placed in the sprng/lib directory. # You can change this through the variable 'LIB_REL_DIR' below. #--------------------------------------------------------------------------- LIB_REL_DIR = lib sprng2.0/AGAINstub100700 764 764 41 6736173543 13022 0ustar chwangchwangecho This is a stub only, sorry. sprng2.0/READMEver2.CHANGES100644 764 764 2757 6736173543 14177 0ustar chwangchwangChris S. 7 June 1999 Makefile: changed 'time*' to 'tim*' in the section 'realclean :' added a file AGAINstub: to be used in place of nonexisting FORTRAN files; and to be removed then. ---------------------------------------------------------------------------- Mike Zhou, 8-June-1999 For MPI: Use '#include "sprng.h"' to replace the line '#include "interface.h"' in simple_mpi.c under SRC For Simple interface: add #define DEFAULT_RNG_TYPE SPRNG_LFG to sprng_f.h For libgmp, which may not be available on some platforms. Give user a choice to exclude generator pmlcg. 1. add # comment out if you want to exclude generator pmlcg which needs libgmp GMPDEF = -DUSE_PMLCG to make.CHOICES under root 2. In files make.* under SRC add $(GMPDEF) to CFLAGS and FFLAGS 3. Modify SRC/sprng/sprng.c using something like #ifdef USE_PMLCG #include "pmlcg/pmlcg.h" #endif ---------------------------------------------------------------------------- June 11, 1999 Chris S. Modified 'check_gen...' files in SRC, changed Makefile in SRC, and added two scripts 'inserttimecheck' and 'insertcheck' to SRC, all needed to create (by make in SRC) scripts 'timesprng' and 'checksprng' (located as previously in the top directory). Take look at 'timesprng' and 'checksprng'. All time tests and check tests are running/passing. Execute: ./timesprng ./checksprng ----------------------------------------------------------------------------- June 23, 1999 Mike Change make.LINUX to make.INTEL remove make.SOLARIS sprng2.0/TESTS/ 40775 764 764 0 6741200203 12221 5ustar chwangchwangsprng2.0/TESTS/NEWGEN.TEXT100644 764 764 2633 6736173543 14035 0ustar chwangchwang Instructions for testing a new generator ---------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/www/test-suite.html (Section: Testing New Random Number Generators) Option 1 -------- 1. The new generator must define the following three functions: int *init_rng(int streamnum, int nstreams, int seed, int param); double get_rn_dbl(int *stream); int free_rng(int *stream); where the streams are parameterized by 'streamnum', that is, different streams are produced for different values of 'streamnum'. 2. Install your library "libnewgen.a" in sprng/lib directory. 3. Open file sprng/TESTS/Makefile. Add "newgen" to the list on the line "LIBLIST ="... . 4. Type 'make' in sprng/TESTS directory. Now, each type of test in TESTS has a new version that tests the new generator. The new version has the extension ".newgen". For example, to run the equidistribution test on the new generator, type equidist.newgen. Option 2 -------- 1. Define the macro READ_FROM_STDIN in the file sprng/TESTS/init_tests.c. 2. Type 'make' in the TESTS directory. Now the test programs will read input from standard input. If you redirect stdin from a file with floating point random numbers in ASCII from your generator, then these numbers will be tested. This procedure will not, however, work for the Ising model programs (Wolff and Metropolis.) sprng2.0/TESTS/chisquare.c100644 764 764 35557 6736173543 14527 0ustar chwangchwang/********************************************************** Chi-Square Probability Function and Kolmogorv-Smirnov **********************************************************/ #include #include #include "util.h" #define ITMAX 10000000 /* maximum allowed number of iterations */ #define EPS 3.0e-7 /* relative accuracy */ #define FPMIN 1.0e-30 /* number near the smallest */ /* representable floating-point number */ #ifndef max #define max(a,b) (ab?b:a) #endif static char *errorMessage; long degrees_of_freedom=1; long KS_n = 1; #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void set_d_of_f ANSI_ARGS((long df)); double chiF ANSI_ARGS((double chiSq)); double chisquare ANSI_ARGS((long *actual,double *probability,long n,long k, int *nb)); double chipercent ANSI_ARGS((double chiSq, long fr)); double gammp ANSI_ARGS((double a, double x)); double KSpercent ANSI_ARGS((double value, long n)); double KS ANSI_ARGS((double *V, long n, double (*F)(double) )); void gser ANSI_ARGS((double *gamser, double a, double x, double *gln)); void gcf ANSI_ARGS((double *gammcf, double a, double x, double *gln)); double gammln ANSI_ARGS((double xx)); void chiGammaClearErrMess ANSI_ARGS((void)); char *chiGammaReadErrMess ANSI_ARGS((void)); void chiGammaFlagError ANSI_ARGS((char *errorText)); double cum_normal(double sample, double mean, double stddev); void set_normal_params(double mu, double sd); double normalF(double x); void mean_sd(double *x, int n, double *mean, double *sd); #ifdef __STDC__ double KS(double *X, long n, double (*F)(double) ) #else double KS(X, n, F) double *X,(*F)(); long n; #endif { double *a, *b, Y, rminus, rplus, value; long *c, m, k, j; m = n+1; a = (double *) mymalloc((m+1)*sizeof(double)); b = (double *) mymalloc((m+1)*sizeof(double)); c = (long *) mymalloc((m+1)*sizeof(long)); memset(c,0,(m+1)*sizeof(long)); for(k=0; k Nmax) { double yp, p; yp = value + 1.0/6.0/sqrt((double) n); p = 1 - exp(-2.0*yp*yp); return 1.0 - 2.0*(1.0-p); /* return p;*/ } else { static double K[16][9] = {{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, {0.0,0.01,0.05,0.25,0.5,0.75,0.95,0.99,1.001}, {0.0,0.014,0.06749,0.2929,0.5176,0.7071,1.098,1.2728, 1.415}, {0.0,0.01699,0.07919,0.3112,0.5147,0.7539,1.1017,1.3589, 1.733}, {0.0,0.01943,0.08789,0.3202,0.5110,0.7642,1.1304,1.3777, 2.01}, {0.0,0.02152,0.09471,0.3249,0.5245,0.7674,1.1392,1.4024, 2.237}, {0.0,0.02336,0.1002,0.3272,0.5319,0.7703,1.1463,1.4144, 2.45}, {0.0,0.02501,0.1048,0.328,0.5364,0.7755,1.1537,1.4246, 2.647}, {0.0,0.0265,0.1086,0.328,0.5392,0.7797,1.1586,1.4327, 2.829}, {0.0,0.02786,0.1119,0.3274,0.5411,0.7825,1.1624,1.4388, 3.01}, {0.0,0.02912,0.1147,0.3297,0.5426,0.7845,1.1658,1.444, 3.163}, {0.0,0.03028,0.1172,0.333,0.5439,0.7863,1.1688,1.4484, 3.318}, {0.0,0.03137,0.1193,0.3357,0.5453,0.788,1.1714,1.4521, 3.465}, {0.0,0.03424,0.1244,0.3412,0.55,0.7926,1.1773,1.4606, 3.874}, {0.0,0.03807,0.1298,0.3461,0.5547,0.7975,1.1839,1.4698, 4.473}, {0.0,0.04354,0.1351,0.3509,0.5605,0.8036,1.1916,1.4801, 5.478}}; static int index[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,15,20,30}; static double p[9] = {0.0,0.01,0.05,0.25,0.5,0.75,0.95,0.99, 1.0}; int i, j; double percent1, percent2, dist1, dist2, percentage; i = 1; while(index[i] < n) /* look up correct row for 'n' in table */ i++; j = 1; while(K[i][j] < value) /* look up percentage in table */ j++; dist1 = K[i][j]-K[i][j-1]; dist2 = K[i][j]-value; percent1 = p[j]*(dist1-dist2)/dist1 + p[j-1]*dist2/dist1; if(index[i]==n) return percent1; else { j = 1; while(K[i-1][j] < value) /* look up percentage in table */ j++; dist1 = K[i-1][j]-K[i-1][j-1]; dist2 = K[i-1][j]-value; percent2 = p[j]*(dist1-dist2)/dist1 + p[j-1]*dist2/dist1; dist1 = (double) (index[i]-index[i-1]); dist2 = (double) (index[i]-n); percentage = percent1*(dist1-dist2)/dist1+ percent2*dist2/dist1; /* return percentage;*/ return 1.0-2.0*(1.0-percentage); } } } #endif #ifdef __STDC__ double chisquare(long *actual, double *probability, long n, long k, int *nb) #else double chisquare(actual, probability, n, k,nb) long *actual, n, k; double *probability; int *nb; #endif { double V, prob; long i, n_actual, nbins; int ch; V = 0.0; for(i=n_actual=nbins=0, prob=0.0; i=5 || i==k-1) { V += (n_actual-n*prob)*(n_actual-n*prob)/ (n*prob); nbins++; n_actual = 0; prob = 0.0; } } *nb = nbins; if(nbins == 1) fprintf(stderr,"WARNING: Only one bin was used in Chisquare\n"); else if(nbins==0) fprintf(stderr,"WARNING: No bin was used in Chisquare => n was <= 5.\n"); else if(nbins != k) fprintf(stderr,"WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", nbins, k); return V; } #ifdef __STDC__ void set_d_of_f(long df) #else void set_d_of_f(df) long df; #endif { degrees_of_freedom = df; } #ifdef __STDC__ double chiF(double chiSq) /* returns the chi-square prob. */ #else double chiF(chiSq) double chiSq; #endif { return chipercent(chiSq,degrees_of_freedom); } #ifdef __STDC__ double chipercent(double chiSq, long fr) /* returns the chi-square prob. */ /* function with chi-square chiSq */ #else double chipercent(chiSq, fr) /* returns the chi-square prob. */ double chiSq; /* function with chi-square chiSq */ long fr; #endif { /* & degrees of freedom fr */ return (gammp(fr/2.0, chiSq/2.0)); } #ifdef __STDC__ double gammp(double a, double x) /* returns the incomplete gamma */ #else /* function P(a,x) */ double gammp(a, x) /* returns the incomplete gamma */ double a, x; #endif { double gamser, gammcf, gln; if (x < 0.0 || a <= 0.0) { chiGammaFlagError("Invalid arguments in routine gammp"); return (0.0); } if (x < (a + 1.0)) { /* use the series representation */ gser(&gamser,a,x,&gln); return (gamser); } else { /* use the continued fraction */ gcf(&gammcf,a,x,&gln); /* representation */ return (1.0 - gammcf); /* and take its complement */ } } #ifdef __STDC__ void gser(double *gamser, double a, double x, /* Returns the incomplete gamma*/ double *gln) /* function P(a,x) evaluated by */ #else void gser(gamser, a, x, gln) /* Returns the incomplete gamma*/ /* function P(a,x) evaluated by */ double *gamser, a, x, *gln; #endif { /* its series representation as */ /* gamser. Also returns */ /* ln(gamma(a)) as gln. */ int n; double sum, del, ap; *gln=gammln(a); if (x <= 0.0) { if (x < 0.0) chiGammaFlagError("x less than 0 in routine gser"); *gamser = 0.0; return; } else { ap = a; del = sum = 1.0/a; for (n=1; n<=ITMAX; n++) { ++ap; del *= x/ap; sum += del; if (fabs(del) < fabs(sum)*EPS) { *gamser = sum * exp(-x + a * log(x) - (*gln)); return; } } chiGammaFlagError("a too large, ITMAX too small in routine gser"); return; } } #ifdef __STDC__ void gcf(double *gammcf, double a, double x, /* Returns the complement */ double *gln) /* imcomplete gamma function */ #else void gcf(gammcf, a, x, gln) /* Returns the complement */ /* imcomplete gamma function */ double *gammcf, a, x, *gln; #endif { /* Q(a,x) evaluated by its */ /* continued fraction rep. as */ /* gammcf. Also returns */ /* ln(gamma(a)) as gln */ int i; double an, b, c, d, del, h; *gln = gammln(a); b = x + 1.0 - a; /* set up for evaluating */ c = 1.0 / FPMIN; /* continued fraction by modified*/ d = 1.0 / b; /* Lentz' method with b0=0 */ h = d; for (i=1;i<=ITMAX;i++) { /* iterate to convergence */ an = -i * (i - a); b += 2.0; d = an * d + b; if (fabs(d) < FPMIN) d = FPMIN; c = b + an / c; if (fabs(c) < FPMIN) c = FPMIN; d = 1.0 / d; del = d * c; h *= del; if (fabs(del-1.0) < EPS) break; } if (i > ITMAX) { chiGammaFlagError("a too large, ITMAX too small in gcf"); return; } *gammcf = exp(-x + a * log(x) - (*gln)) * h; /* put factors in front */ } #ifdef __STDC__ double gammln(double xx) /* returns the value */ #else double gammln(xx) /* returns the value */ double xx; #endif { /* ln(gamma(xx)) for xx > 0*/ double x, y, tmp, ser; static double cof[6] = { 76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5}; int j; y = x = xx; tmp = x + 5.5; tmp -= (x + 0.5) * log(tmp); ser = 1.000000000190015; for (j=0; j<=5; j++) ser += cof[j]/++y; return (-tmp + log(2.5066282746310005 * ser / x)); } #ifdef __STDC__ void chiGammaClearErrMess(void) /* clears error message buffer */ #else void chiGammaClearErrMess() #endif { errorMessage = NULL; } #ifdef __STDC__ char *chiGammaReadErrMess(void) /* returns the error message */ #else char *chiGammaReadErrMess() #endif { /* from the buffer */ return (errorMessage); } #ifdef __STDC__ void chiGammaFlagError(char *errorText) /* writes to the error message */ #else void chiGammaFlagError(errorText) char *errorText; #endif { /* buffer */ errorMessage = errorText; } #if 0 #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc,argv) int argc; char *argv[]; #endif { double p[1000000], value; long obs[1000000], n; double X[10]; int i, nb; set_d_of_f(99999); /*printf("\nChi square probability for V = %f, degrees of freedom = %d is: %f\n\n", 34.76,50,chiF(34.76));*/ /*for(i=0; i<1000000; i++) { p[i] = (double) 1/1000000; obs[i] = 10; }*/ p[0] = 0.2; p[1] = 0.5; p[2] = 0.3; obs[0] = 30; obs[1] = 30; obs[2] = 40; /*printf("\n chisquare value = %f\n\n", chisquare(obs,p,10000000L,1000000L, &nb));*/ printf("\n chisquare value = %f, nbins = %d\n\n", chisquare(obs,p,100,3, &nb), nb); /*** wrong values of nb may be obtained because function argument evaluation order is not defined. Beware! ***/ /*value = atof(argv[1]); n = atoi(argv[2]); printf("\nd = %f,KS = %f\n\n", value, KSpercent(value,n));*/ set_d_of_f(1000); /*X[0] = 10.0; X[1] = 13.0; X[2] = 5.0; X[3] = 15.0; X[4] = 11.5; X[5] = 4.0; X[6] = 8.0; X[7] = 9.0; X[8] = 6.0; X[9] = 7.0;*/ /*printf("KS = %.14f\n", KS(p,1000000,chiF));*/ } #endif /* Reference: NIST -- NORCDF available on netlib */ double cum_normal(double sample, double mean, double stddev) { double a, b, c, d, e, f, g, h, temp; a = 0.319381530 ; b = -0.356563782; c = 1.781477937; d = -1.821255978; e = 1.330274429; f = .2316419; if(stddev <= 0.0) return -1.0; sample = (sample - mean)/stddev; if(sample < 0.0) temp = -sample; else temp = sample; g = 1.0/(1.0+f*temp); h = 1.0 - (0.39894228040143*exp(-0.5*temp*temp)) *(a*g + b*g*g + c*g*g*g + d*g*g*g*g + e*g*g*g*g*g); if(sample < 0.0) h=1.0-h; return h; } static double normal_mu; static double normal_sd; void set_normal_params(double mu, double sd) { normal_mu = mu; normal_sd = sd; } double normalF(double x) { return cum_normal(x,normal_mu,normal_sd); } void mean_sd(double *x, int n, double *mean, double *sd) { double ave, var, diff, error; int i; ave = 0.0; for(i=0; i results in the following being created # make => All the sequential and parallel tests. # make xxx => Test 'xxx.rng' for each generator 'rng'. # # Object files created during the compilation process can be deleted finally # by typing # make clean # # Object files and the test executables created can be deleted finally # by typing # make realclean # # Set 'LIBDIR' to the directory where the SPRNG libraries are. # Set 'INCDIR' to the directory where the SPRNG include files are. # We have already set them to the correct locations, unless whoever installed # the libraries changed them. ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) INCDIR = ../include SRCDIR = ../SRC include $(SRCDIR)/make.$(PLAT) TESTLIB = sprngtest #GMPLIB = -lgmp #uncomment for pmlcg ############################################################################# # Random number libraries # lcg, lfg, or lcg64 for 48 bit, Fibonacci, and 64 bit LCG cmrg for # the combined multiple recursive genrator, pmlcg for the prime # modulus LCG, and mlfg for the multiplicative lagged Fibonacci # generator respectively. LIBLIST = sprng # To create a new test 'xxx', place the source code in file 'xxx.c` # Then append 'xxx' to TESTLIST below. This assumes that 'xxx.c' # depends on 'tests.h' and 'util.h' alone. If there are more dependencies, # then explicitly write the commands for that. 'xxx.yyy' files are created # for each random number library 'libyyy.a' in LIBLIST. TESTLIST = maxt collisions equidist serial gap perm runs coupon poker sum random_walk wolff metropolis # # ____________________________________________________________________ # The user should normally not need to change anything below this line # _____________________________________________________________________ ############################################################################## INCLUDEDIR = -I$(INCDIR) all : $(LIBDIR)/lib$(TESTLIB).a $(TESTLIST) $(LIBDIR)/lib$(TESTLIB).a: init_tests.o util.o \ chisquare.o stirling.o communicate.o $(AR) $(ARFLAGS) $(LIBDIR)/lib$(TESTLIB).a \ init_tests.o util.o chisquare.o stirling.o communicate.o $(RANLIB) $(LIBDIR)/lib$(TESTLIB).a init_tests.o : init_tests.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) init_tests.c util.o : util.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) util.c stirling.o : stirling.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) stirling.c chisquare.o : chisquare.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) chisquare.c communicate.o : communicate.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) communicate.c $(BASE).o : $(BASE).c tests.h util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(BASE).c $(TESTLIST) : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l BASE=$@ DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done $(BASE).$(LIB) : $(BASE).o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) -o $@ $(BASE).o -L$(LIBDIR) -l$(TESTLIB) -l$(LIB) $(GMPLIB) -lm $(MPIDIR) $(MPILIB) ####################################################################### # FFT test for parallel RNGs # fft : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done fft.o : fft.c $(INCDIR)/sprng.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) fft.c fft.$(LIB) : fft.o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) -o $@ fft.o -L$(LIBDIR) -l$(LIB) -lcomplib.sgimath -lftn $(GMPLIB) ######################################################################### clean : @rm -f *.o realclean : @rm -f *.o $(LIBDIR)/lib$(TESTLIB).a @for l in $(LIBLIST) ; do \ rm -f *.$$l ; \ done rm -f *~ core a.out .SUFFIXES : sprng2.0/TESTS/collisions.c100644 764 764 12423 6736173543 14704 0ustar chwangchwang#include #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_collision ANSI_ARGS((long n, int logmd, int logd)); long collision ANSI_ARGS((long n, int logmd, int logd)); double identity ANSI_ARGS((double d)); void compute_probability ANSI_ARGS((double *A, int n, int m)); #define MIN_CHISQ_NTESTS 50 int *array, *mask; int arraysize, intsize; double *probability; #ifdef __STDC__ int main(int argc, char *argv[]) #else int main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i, *bins, ncollisions; double *V, result; int logmd, logd, size, Bins_used; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); n = atol(argv[N_STREAM_PARAM+1]); logmd = atoi(argv[N_STREAM_PARAM+2]); logd = atoi(argv[N_STREAM_PARAM+3]); if(logmd*logd > 31) { fprintf(stderr,"ERROR: log(m-d)*log(d) = %d must be less than 32\n", logmd*logd); exit(1); } if( (1<<(logmd*logd)) < n) { fprintf(stderr,"ERROR: m = %d must be at least as high as n = %ld\n", (1<<(logmd*logd)), n); exit(1); } if( NTESTS < MIN_CHISQ_NTESTS) V = (double *) mymalloc(NTESTS*sizeof(double)); else { bins = (long *) mymalloc((n+1)*sizeof(long)); memset(bins,0,(n+1)*sizeof(long)); } init_collision(n,logmd,logd); for(i=0; i 0) size++; arraysize = size; array = (int *) mymalloc(arraysize*sizeof(int)); mask = (int *) mymalloc(intsize*sizeof(int)); tempmask = 1; for(i=0; i=j0; j--) { A[j] = (double) j/(double) m *A[j] + ( (1.0+1.0/(double)m) - (double)j/(double)m )*A[j-1]; if( A[j] < 1.0e-20 ) { A[j] = 0.0; if(j == j1) j1--; else if(j == j0) j0++; } } } if(NTESTS < MIN_CHISQ_NTESTS && sqrt((double)NTESTS/(double)(j1-j0+1)) > 0.5) { fprintf(stderr,"WARNING: Error in KS estimate may be ~ %f\n", sqrt((double)NTESTS/(double)(j1-j0+1))); if(NTESTS*n > 1.0e10) /* We cannot afford to waste large amounts ... */ { /* ... of computer time */ fprintf(stderr,"Exiting ... \n"); exit(-1); } } if(NTESTS < MIN_CHISQ_NTESTS) { for(j=j1-1; j>=j0; j--) A[j] += A[j+1]; if(A[j0] >= 1.0) A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ } } #ifdef __STDC__ long collision(long n, int logmd, int logd) #else long collision(n, logmd, logd) int logmd, logd; long n; #endif { long m, i, ncollisions; int d, j, index, bit; unsigned int temp, num; d = 1< #endif #include "util.h" #define SPRNG_MPI_KS 0 extern int proc_rank, init_nprocs, nsubsequences; #ifdef __STDC__ void getKSdata (double *V, long ntests) #else void getKSdata (V, ntests) double *V; long ntests; #endif { int nprocs, myid, i, nsets; long first, last; #ifdef SPRNG_MPI MPI_Status status; myid = proc_rank; nprocs = init_nprocs; nsets = ntests/nsubsequences; first = (nsets*myid/nprocs)*nsubsequences; last = (nsets*(myid+1)/nprocs)*nsubsequences - 1; if(myid != 0) MPI_Send(V, last-first+1, MPI_DOUBLE, 0, SPRNG_MPI_KS, MPI_COMM_WORLD); else for(i=1; i #include "tests.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_coupon ANSI_ARGS((long n, int t, int d)); double coupon ANSI_ARGS((long n, int t, int d)); double stirling ANSI_ARGS((int n, int m)); int *occurs, Bins_used=0; long *count; double *probability; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int t, d; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); t = atoi(argv[N_STREAM_PARAM+2]); d = atoi(argv[N_STREAM_PARAM+3]); if(t<=d) { fprintf(stderr,"ERROR: t = %d must be greater than d = %d\n", t, d); exit(1); } init_coupon(n,t,d); for(i=0; i= t-d) count[t-d]++; else count[r]++; } answer = chisquare(count,probability,n, t-d+1, &Bins_used); /*printf("\tChisquare for stream = %f, %% = %f\n", answer, chipercent(answer,t-d+1));*/ return answer; } sprng2.0/TESTS/equidist.c100644 764 764 6403 6736173543 14336 0ustar chwangchwang/********************************************************************* Equidistribution Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ static long numDiv; /* # of random numbers being tested */ static long numRanNum; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, *argv[]) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } numDiv = atol(argv[N_STREAM_PARAM+1]); numRanNum = atol(argv[N_STREAM_PARAM+2]); if ((numDiv<=0) || (numRanNum<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numDiv); probs = mymalloc(sizeof(double)*numDiv); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numDiv; for (index=0;index /*#if defined(SPRNG_MPI) #include "mpi.h" #endif*/ #if defined(SPRNG_MPI) #undef SPRNG_MPI #endif #include "sprng.h" #include #include void Analyze(int nstreams, int nruns, int n); void FFTCalc (int nstreams, int nruns, int n); int **streams, lda; double *means, *FFTcoeffs; void main (int argc, char *argv[]) { int i, seed, param, nruns, nstreams, n, *stream, myid=0, nprocs=1; #ifdef SPRNG_MPI MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) /* This is a sequential program currently */ { MPI_Finalize(); exit(0); } #endif /**************************** Initialization *****************************/ if(argc != 8 || atoi(argv[2]) != 1 || atoi(argv[6]) != 0) { fprintf(stderr,"USAGE: %s nstreams 1 seed param nruns 0 n\n", argv[0]); exit(-1); } else if(atoi(argv[1]) < 1 || atoi(argv[5]) < 1 || atoi(argv[7]) < 1 ) { fprintf(stderr,"ERROR: nstreams, nruns, and n must be > 0\n"); exit(-1); } nstreams = atoi(argv[1]); /* number of streams */ param = atoi(argv[4]); /* parameter to the generator */ nruns = atoi(argv[5]); /* number of runs to repeat */ n = atoi(argv[7]); /* number of random numbers per stream */ if(n&1) /* number of rows for Fourier coefficients */ lda = n+1; else lda = n+2; FFTcoeffs = (double *) malloc(lda*nstreams*sizeof(double)); /* FFT coeffs */ means = (double *) malloc(lda*nstreams*sizeof(double)); /* average coeffs */ streams = (int **) malloc(nstreams*sizeof(int *)); /*random number streams*/ for(i=0; i mult*StdDev1) /* Check constant term */ { count++; printf("%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, percentile, mean1, means[0], StdDev1); } for (j=0; j mult*StdDev) /* Real part of coeff. */ { count++; printf("%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda], StdDev); } if(fabs(means[2*i+j*lda+1]-mean2) > mult*StdDev) /* Imaginary part */ { count++; printf("%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda+1], StdDev); } } printf("No other coefficient exceeds %g th percentile\n\n", percentile); return; } /* Perform FFT on random arrays. Each column is from the same stream. */ /* There are n rows per column, and nstream rows */ void FFTCalc(int nstreams, int nruns, int n) { int i,j,k; double *coeff; for(k=0; k #include #include "tests.h" #define NUM_TEST_ENGIN_PARAM 4 static int maxGapLen; static double lowerBound, upperBound; static long numTotGap; static int numBin; static long numRepeat; static long *bins; static double *probs; static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; int index; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } maxGapLen = atoi(argv[N_STREAM_PARAM+1]); lowerBound = atof(argv[N_STREAM_PARAM+2]); upperBound = atof(argv[N_STREAM_PARAM+3]); numTotGap = atol(argv[N_STREAM_PARAM+4]); if ((maxGapLen<0) || (lowerBound<0.0) || (upperBound<=lowerBound) || (1.0 max" cases */ numBin = maxGapLen + 2; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); probs[0] = upperBound - lowerBound; for (index=1;index=upperBound)); \ \ /* Add (gapLen<0) clause to catch overflow */ \ if ((gapLen>maxGapLen) || (gapLen<0)) bins[numBin-1]++; \ else bins[gapLen]++; \ } /********************************************************************/ #ifdef __STDC__ void main(int argc, char *argv[]) { #else void main(argc, argv) int argc; char *argv[]; { #endif long curRound, index; double KSvalue, KSprob; int Bins_used; initTest(argc, argv); for (curRound=0;curRound #endif #include /*#define READ_FROM_STDIN*/ /* read random numbers from stdin */ #ifndef READ_FROM_STDIN #include "sprng.h" #endif #include "util.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #define OFFSET 0 /* set offset to 'k' to start tests from the k th stream onwards */ long NTESTS = 0; int proc_rank=0, init_nprocs=1; int nsubsequences=0; static int init_seed, init_param, init_total; static int current_subsequence; static long current_group, first_group, init_ngroups; static int **gens, current_gen, n_combine, skip; static int rng_type; /*--- random number type ---*/ long init_streams ANSI_ARGS((int argc, char *argv[])); void next_stream ANSI_ARGS((void)); double get_rn ANSI_ARGS((void)); #ifdef READ_FROM_STDIN /* read random numbers from stdin */ int *init_sprng(int a, int b, int c, int d) { return NULL; } int free_sprng(int *a) { return 0; } double sprng(int *a) { double rn; scanf("%lf", &rn); return rn; } #endif #ifdef __STDC__ long init_tests(int argc, char *argv[]) #else long init_tests(argc, argv) int argc; char *argv[]; #endif { long n; #ifdef SPRNG_MPI MPI_Init(&argc, &argv); #endif /*-----------------------------------------------------------------------*/ /* Changed by Yaohang Li to fit for the new interface */ /* Adding the rng_type to standard init_sprng interface */ /* The Number of the arguments increases by 1 */ /*-----------------------------------------------------------------------*/ if(argc < 7+1) { fprintf(stderr,"Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", argv[0]); exit(-1); } if (atoi(argv[1])>5||atoi(argv[1])<0) { fprintf(stderr,"Error: First command line argument(random number type) should be between 0 to 5\n"); exit(-1); } if(atoi(argv[3]) <= 0) { fprintf(stderr,"Error: Third command line argument should be greater than 0\n"); exit(-1); } if(atoi(argv[6]) <= 0) { fprintf(stderr,"Error: Sixth command line argument should be greater than 0\n"); exit(-1); } /*-------------- End by changing ------------------------------*/ n = init_streams(argc, argv); return n; } #ifdef __STDC__ long init_streams(int argc, char *argv[]) #else long init_streams(argc, argv) int argc; char *argv[]; #endif { /*------------------------------------------------------------*/ /* Modify by Yaohang Li */ /* Adding rng_type as a new argument */ /*------------------------------------------------------------*/ int seed, param, n, i, j; int myid = 0, nprocs = 1; long k; rng_type = atoi(argv[1]); /*--- Get the rand type by reading the 1 arg ---*/ n = atoi(argv[2]); n_combine = atoi(argv[3]); seed = atoi(argv[4]); param = atoi(argv[5]); nsubsequences = atoi(argv[6]); skip = atoi(argv[7]); #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); proc_rank = myid; init_nprocs = nprocs; #endif if(proc_rank == 0) { for(i=0; i 0) for(i=0; i first_group && current_group < first_group+init_ngroups) for(i=0; i first_group && current_group > first_group+init_ngroups) printf("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", current_group,0,init_ngroups-1 ); } } #ifdef __STDC__ double get_rn(void) #else double get_rn() #endif { double temp; temp = sprng(gens[current_gen]); current_gen = (current_gen+1)%n_combine; return temp; } #if 0 #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { int n, i, j, length; n = init_tests(argc,argv); /*--- increase argv index by 1 ---*/ length = atoi(argv[8]); for(i=0; i #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif double xt ANSI_ARGS((double x)); double maxt ANSI_ARGS((long n, int t)); void set_t ANSI_ARGS((int t)); double *V2; int xt_t = 1; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int t; if(argc != N_STREAM_PARAM + 3) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+2); exit(1); } ntests = init_tests(argc,argv); n = atol(argv[N_STREAM_PARAM+1]); t = atoi(argv[N_STREAM_PARAM+2]); V = (double *) mymalloc(NTESTS*sizeof(double)); V2 = (double *) mymalloc(n*sizeof(double)); for(i=0; i V[i]) V[i] = temp; } } set_t(t); temp = KS(V,n,xt); /*printf("\tKS for stream = %f, %% = %f\n", temp, KSpercent(temp,n));*/ /*free(V);*/ return temp; } sprng2.0/TESTS/metropolis.c100644 764 764 21751 6736173543 14727 0ustar chwangchwang/********************************************************************* * * * metropolis.c * * * *********************************************************************/ #include #include #include #include "sprng.h" #define PARALLEL #define SYNC int lattice_size, *spin, nsites; int **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; double Energy[10][10], Cv[10][10], J=0.4406868; double expJarray[17], *expJ; double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ int RNG() /* Random number generator used for initializations alone */ { static int seed=17; seed=16807*(seed%127773)-(seed/127773)*2836; if(seed<0) seed+=2147483647; else if(seed > 2147483647) { seed--; seed -= 2147483647; } return seed; } int neighbor[4]; int diff(int Ispin) { int i, s=0; if(Ispin>0) for(i=0; i<4; i++) s+=neighbor[i]; else for(i=0; i<4; i++) s-=neighbor[i]; return s<<1; } int energy_difference(int site) { int diffE; int ix, iy; ix=site>>exponent; iy=site&mask; if(iy==0) neighbor[0]=spin[site+lattice_size-1]; else neighbor[0]=spin[site-1]; if(iy==lattice_size-1) neighbor[2]=spin[ix*lattice_size]; else neighbor[2]=spin[site+1]; if(ix==0) neighbor[1]=spin[lattice_size*(lattice_size-1)+iy]; else neighbor[1]=spin[site-lattice_size]; if(ix==lattice_size-1) neighbor[3]=spin[iy]; else neighbor[3]=spin[site+lattice_size]; diffE=diff(spin[site]); return diffE; } int System_Energy() /* Compute energy of lattice */ { int E =0; int i, j, s; for(i=0, s=0; isprng(genptr[k])){ #elif !SYNC if(dE<=0 || expJ[dE]>sprng(genptr[k])){ #endif energy += dE; spin[k] = -spin[k]; } } average_E += energy; average_Cv += energy*energy; } average_E /= (double) block_size*nsites; /*compute average of quantities */ average_Cv /= (double) block_size; if(i>=10*divisor) /* make scale logarithmic for printing results */ { divisor *= 10; row++; } col = i/divisor; average_E /= divisor; average_Cv /= divisor; Energy[row][col] += average_E; Cv[row][col] += average_Cv; for(k=row+1; k<10; k++) { average_E /= 10; average_Cv /= 10; Energy[k][0] += average_E; Cv[k][0] += average_Cv; } if(old_row != row) { compute(old_row); old_row = row; } } compute(old_row); } /*--- adding rng_type as a parameter ---*/ void minitialize(int rng_type, int seed, int param, int use_blocks) { int i, j, temp; expJ = expJarray+8; for(i=-8; i<9; i++) expJ[i] = exp(-J*i); nsites = lattice_size*lattice_size; prob = 1 - exp(-2.0*J); for(i=0; i<10; i++) for(j=0; j<10; j++) Energy[i][j] = Cv[i][j] = 0.0; spin = malloc(nsites*sizeof(int)); if(!spin) { printf("\n\tMemory allocation failure, program exits!\n"); exit(-1); } for(i=0; iprob)?1:-1; /* here assume that expo is integer exponent of 2 */ temp = mask=lattice_size-1; exponent = 0; /* expo = log_2(lattice_size) */ while(temp) { exponent++; temp >>= 1; } /* initialize generator */ genptr = (int **) malloc(nsites*sizeof(int *)); genptr[0] = init_sprng(rng_type,0,nsites,seed,param); /*--- add rng_type ---*/ print_sprng(genptr[0]); for(i=1; i 0\n", lattice_size); exit(-1); } if(block_size<=0) { printf("ERROR: Block_size %d should be > 0\n", block_size); exit(-1); } if(discard_blocks<0) { printf("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); exit(-1); } if(use_blocks<=0) { printf("ERROR: use_blocks %d should be > 0\n", use_blocks); exit(-1); } if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ { printf("ERROR: lattice_size %d should be a positive power of 2\n", lattice_size); exit(-1); } if(lattice_size!=16) { printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); } while(use_blocks) /* check if use_blocks is a power of 10 */ { if(use_blocks%10 != 0 && use_blocks!=1) { printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); exit(-1); } use_blocks /= 10; } } /************** 'Thermalize' system so that results are not influenced by the initial conditions *************/ void thermalize(int block_size, int discard_blocks) { int i, j, k, dE; for(i=0; isprng(genptr[k])) #elif !SYNC if(dE<=0 || expJ[dE]>sprng(genptr[k])) #endif { spin[k] = -spin[k]; } } } /* block_size*use_blocks sweeps through a lattice of size lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ void main(int argc, char **argv) { /*--- Add rng_time as the 1st argument ---*/ int rng_type; int seed, param, block_size, discard_blocks, use_blocks; /****************** Read and check Arguments ********************/ if(argc==8 ) /*--- increase # of arguments by 1 ---*/ { argv++; rng_type = atoi(*argv++); /*--- get rng_type ---*/ seed = atoi(*argv++); param = atoi(*argv++); lattice_size = atoi(*argv++); block_size = atoi(*argv++); discard_blocks = atoi(*argv++); use_blocks = atoi(*argv++); check_arguments(lattice_size, block_size, discard_blocks, use_blocks); #ifdef PARALLEL printf("Metropolis Algorithm with Parallel RNG\n"); #else printf("Metropolis Algorithm with Serial RNG\n"); #endif printf("lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", lattice_size, block_size, discard_blocks, use_blocks); } else { printf("USAGE: %s seed param lattice_size block_size discard_blocks use_blocks\n", argv[0]); exit(-1); } /*--- add rng_type as the 1st parameter ---*/ /*--- in order not to duplicate initialize() ---*/ /*--- change to be minitialize() ---*/ minitialize(rng_type, seed, param, use_blocks); /* initalize data */ /************** 'Thermalize' system so that results are not influenced by the initial conditions *************/ thermalize(block_size, discard_blocks); /********** Perform the actual Metropolis algorithm calculations *********/ metropolis(block_size, use_blocks); } sprng2.0/TESTS/mytest.c100644 764 764 2132 6736173543 14027 0ustar chwangchwang#include #include "tests.h" double mytest (long n); main(int argc, char *argv[]) { long ntests, n, i; double *V, result; ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); for(i=0; i 0.5) actual[0]++; else actual[1]++; } return chisquare(actual,expected,n,2,&temp2); } sprng2.0/TESTS/perm.c100644 764 764 10616 6736173543 13473 0ustar chwangchwang/********************************************************************* Permutation Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Size of each group */ static int grpSize; /* # of groups in each test */ static long numGrp; /* # of bins */ static long numBin; /* # of tests repeated */ static long numRepeat; /* One group of random numbers */ static double *oneGrp; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } grpSize = atoi(argv[N_STREAM_PARAM+1]); numGrp = atol(argv[N_STREAM_PARAM+2]); if ((grpSize<=0) || (numGrp<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } for (numBin=index=1;index<=grpSize;index++) numBin *= index; numRepeat = init_tests(argc, argv); oneGrp = mymalloc(sizeof(double)*grpSize); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numBin; for (index=0;index1;r--) { \ for (index=1,maxPos=0;index #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_poker ANSI_ARGS((long n, int k, int d)); double poker ANSI_ARGS((long n, int k, int d)); double stirling ANSI_ARGS((int n, int m)); static int ncatagories = 0, *bins, *index, Bins_used=0; long *actual; double *probability; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int k, d; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); k = atoi(argv[N_STREAM_PARAM+2]); d = atoi(argv[N_STREAM_PARAM+3]); init_poker(n,k,d); for(i=0; i 5 && i < k) { sum = 0; ncatagories++; } } ncatagories++; actual = (long *) mymalloc(ncatagories*sizeof(long)); probability = (double *) mymalloc(ncatagories*sizeof(double)); for(i=0; i< ncatagories; i++) probability[i] = 0.0; for(i=1; i<=k; i++) probability[index[i]] += pr[i]; free(pr); } #ifdef __STDC__ double poker(long n, int k, int d) #else double poker(n, k, d) int k, d; long n; #endif { double temp; int j, sum, temp2; long i; memset(actual, 0, ncatagories*sizeof(long)); for(i=0; i #include "tests.h" #include #define sgn(a) ((a<0)?0:1) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void random_walk ANSI_ARGS((int walk_length, double *quadrant)); #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, walk_length, i; double result, expected, chisum, quadrant[4]; quadrant[0] = quadrant[1] = quadrant[2] = quadrant[3] = 0; if(argc != N_STREAM_PARAM + 2) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+1); exit(1); } ntests = init_tests(argc,argv); walk_length = atoi(argv[N_STREAM_PARAM+1]); for(i=0; i 0.75) x++; else if(rn > 0.5) x--; else if(rn > 0.25) y++; else y--; } if(x == 0 && y == 0) { quadrant[0] += 0.25; quadrant[1] += 0.25; quadrant[2] += 0.25; quadrant[3] += 0.25; } else if(x == 0) { quadrant[sgn(y)] += 0.5; quadrant[2+sgn(y)] += 0.5; } else if(y == 0) { quadrant[2*sgn(x)] += 0.5; quadrant[2*sgn(x)+1] += 0.5; } else quadrant[2*sgn(x)+sgn(y)] += 1.0; } sprng2.0/TESTS/runs.c100644 764 764 10135 6736173543 13513 0ustar chwangchwang/********************************************************************* Run Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Maximum run length */ static int maxRunLen; /* # of runs in each test */ static long numRun; /* # of bins */ static int numBin; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; int index; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } maxRunLen = atoi(argv[N_STREAM_PARAM+1]); numRun = atol(argv[N_STREAM_PARAM+2]); if ((maxRunLen<=0) || (numRun<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } /* +1 to include ">maxRunLen" case */ numBin = maxRunLen + 1; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); probs[0] = 0.5; for (index=2;indexmaxRunLen) || (theLen<1)) bins[numBin-1]++; \ else bins[theLen-1]++; \ } /********************************************************************/ #ifdef __STDC__ void main(int argc, char *argv[]) { #else void main(argc, argv) int argc; char *argv[]; { #endif long curRound, index; double KSvalue, KSprob; int i, Bins_used; initTest(argc, argv); for (curRound=0;curRound #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ static long numDiv; /* # of random-numbers pairs being tested */ static long numPair; /* # of bins */ static long numBin; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } numDiv = atol(argv[N_STREAM_PARAM+1]); numPair = atol(argv[N_STREAM_PARAM+2]); if ((numDiv<=0) || (numPair<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } numBin = numDiv * numDiv; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numBin; for (index=0;index #include "util.h" #ifdef __STDC__ double stirling(int n, int m) #else double stirling(n, m) int n, m; #endif { double **s, temp; int i, j; if(n < m) return 0.0; else if(n == m) return 1.0; else if(m == 0 && n > 0) return 0.0; else if(m == 1 && n > 0) return 1.0; s = (double **) mymalloc(m*sizeof(double *)); for(i=0; i #if defined(SPRNG_MPI) #include "mpi.h" #endif #include "tests.h" #include #define min(a,b) ((a)<(b))?(a):(b) #define max(a,b) ((a)>(b))?(a):(b) double test_normal(double *array, int n); void set_normal_params(double mu, double sd); double normalF(double x); void mean_sd(double *x, int n, double *mean, double *sd); int group_size; main(int argc, char *argv[]) { int ntests, n, *stream, i, j, k; double result, rn, *temparray, *sumarray; /****************** Initialization values *******************************/ if(argc != N_STREAM_PARAM+3 || atoi(argv[2]) != 1) { fprintf(stderr,"USAGE: %s nstreams 1 seed param 1 0 n group_size\n", argv[0]); exit(-1); } ntests = init_tests(argc,argv); n = atoi(argv[N_STREAM_PARAM+1]); group_size = atoi(argv[N_STREAM_PARAM+2]); temparray = (double *) mymalloc(n*sizeof(double)); sumarray = (double *) mymalloc(n*sizeof(double)); for(j=0; j #include #include #ifdef __STDC__ void *_mymalloc(size_t size, int line, char *message) #else void *_mymalloc(size, line, message) size_t size; int line; char *message; #endif { char *temp; if(size == 0) return NULL; temp = (char *) malloc(size); if(temp == NULL) { printf("\nmemory allocation failure in file: %s at line number: %d\n", message, line); exit(-1); } return (void *) temp; } sprng2.0/TESTS/util.h100644 764 764 452 6736173543 13447 0ustar chwangchwang#ifndef _util_h #define _util_h #include #define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void *_mymalloc ANSI_ARGS((size_t size, int line, char *message)); #endif sprng2.0/TESTS/wolff.c100644 764 764 21277 6736173543 13652 0ustar chwangchwang/********************************************************************* * * * isingwolff.c * * * *********************************************************************/ #include #include #include #include "sprng.h" /*#define PARALLEL*/ int lattice_size, *spin, *stack, nsites; int **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; double Energy[10][10], Cv[10][10], J=0.4406868; double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ int RNG() /* Random number generator used for initializations alone */ { static int seed=17; seed=16807*(seed%127773)-(seed/127773)*2836; if(seed<0) seed+=2147483647; else if(seed > 2147483647) { seed--; seed -= 2147483647; } return seed; } void Single_Cluster_Update(void) /* update lattice spins: a single sweep */ { static int nSite[4], Ipt=-1; int i, j, nnJ, ix, iy; double ff; i = RNG()>>(31-(exponent<<1)); if(i<0) i += nsites; spin[i] = -spin[i]; while(i >= 0) { /* ix=I/size; iy=I%size; */ ix =i>>exponent; iy=i&mask; /* printf("ix=%d, iy=%d) ", ix, iy); */ if(iy==0) nSite[0]=(ix<prob) continue; spin[nnJ]=-spin[nnJ]; stack[++Ipt]=nnJ; } if(Ipt>=0) { i=stack[Ipt]; Ipt--; } else i=-1; } } int System_Energy() /* Compute energy of lattice */ { int E =0; int i, j, s, aa; for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ { divisor *= 10; row++; } col = i/divisor; average_E /= divisor; average_Cv /= divisor; Energy[row][col] += average_E; Cv[row][col] += average_Cv; for(k=row+1; k<10; k++) { average_E /= 10; average_Cv /= 10; Energy[k][0] += average_E; Cv[k][0] += average_Cv; } if(old_row != row) { compute(old_row); old_row = row; } } compute(old_row); } /*--- in order not to duplicate with initialize ---*/ /*--- change from initialize() to minitialize() ---*/ void minitialize(int rng_type, int seed, int param, int use_blocks) { int i, j, temp; nsites = lattice_size*lattice_size; prob = 1 - exp(-2.0*J); for(i=0; i<10; i++) for(j=0; j<10; j++) Energy[i][j] = Cv[i][j] = 0.0; spin = malloc(nsites*sizeof(int)); stack = malloc(nsites*sizeof(int)); if(!spin || !stack) { printf("\n\tMemory allocation failure, program exits!\n"); exit(-1); } for(i=0; iprob)?1:-1; /* here assume that expo is integer exponent of 2 */ temp = mask=lattice_size-1; exponent = 0; /* expo = log_2(lattice_size) */ while(temp) { exponent++; temp >>= 1; } /* initialize generator */ genptr = (int **) malloc(nsites*sizeof(int *)); genptr[0] = init_sprng(rng_type,0,nsites,seed,param); /*--- add rng_type ---*/ print_sprng(genptr[0]); for(i=1; i 0\n", lattice_size); exit(-1); } if(block_size<=0) { printf("ERROR: Block_size %d should be > 0\n", block_size); exit(-1); } if(discard_blocks<=0) { printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); exit(-1); } if(use_blocks<=0) { printf("ERROR: use_blocks %d should be > 0\n", use_blocks); exit(-1); } if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ { printf("ERROR: lattice_size %d should be a positive power of 2\n", lattice_size); exit(-1); } if(lattice_size!=16) { printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); } while(use_blocks) /* check if use_blocks is a power of 10 */ { if(use_blocks%10 != 0 && use_blocks!=1) { printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); exit(-1); } use_blocks /= 10; } } /************** 'Thermalize' system so that results are not influenced by the initial onditions *************/ void thermalize(int block_size, int discard_blocks) { int i, j; for(i=0; i results in the following being created # make => All the sequential and parallel tests. # make xxx => Test 'xxx.rng' for each generator 'rng'. # # Object files created during the compilation process can be deleted finally # by typing # make clean # # Object files and the test executables created can be deleted finally # by typing # make realclean # # Set 'LIBDIR' to the directory where the SPRNG libraries are. # Set 'INCDIR' to the directory where the SPRNG include files are. # We have already set them to the correct locations, unless whoever installed # the libraries changed them. ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) INCDIR = ../include SRCDIR = ../SRC include $(SRCDIR)/make.$(PLAT) TESTLIB = sprngtest GMPLIB = -lgmp #uncomment for pmlcg ############################################################################# # Random number libraries # lcg, lfg, or lcg64 for 48 bit, Fibonacci, and 64 bit LCG cmrg for # the combined multiple recursive genrator, pmlcg for the prime # modulus LCG, and mlfg for the multiplicative lagged Fibonacci # generator respectively. LIBLIST = sprng # To create a new test 'xxx', place the source code in file 'xxx.c` # Then append 'xxx' to TESTLIST below. This assumes that 'xxx.c' # depends on 'tests.h' and 'util.h' alone. If there are more dependencies, # then explicitly write the commands for that. 'xxx.yyy' files are created # for each random number library 'libyyy.a' in LIBLIST. TESTLIST = maxt collisions equidist serial gap perm runs coupon poker sum random_walk wolff metropolis # # ____________________________________________________________________ # The user should normally not need to change anything below this line # _____________________________________________________________________ ############################################################################## INCLUDEDIR = -I$(INCDIR) all : $(LIBDIR)/lib$(TESTLIB).a $(TESTLIST) $(LIBDIR)/lib$(TESTLIB).a: init_tests.o util.o \ chisquare.o stirling.o communicate.o $(AR) $(ARFLAGS) $(LIBDIR)/lib$(TESTLIB).a \ init_tests.o util.o chisquare.o stirling.o communicate.o $(RANLIB) $(LIBDIR)/lib$(TESTLIB).a init_tests.o : init_tests.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) init_tests.c util.o : util.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) util.c stirling.o : stirling.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) stirling.c chisquare.o : chisquare.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) chisquare.c communicate.o : communicate.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) communicate.c $(BASE).o : $(BASE).c tests.h util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(BASE).c $(TESTLIST) : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l BASE=$@ DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done $(BASE).$(LIB) : $(BASE).o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) -o $@ $(BASE).o -L$(LIBDIR) -l$(TESTLIB) -l$(LIB) $(GMPLIB) -lm $(MPIDIR) $(MPILIB) ####################################################################### # FFT test for parallel RNGs # fft : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done fft.o : fft.c $(INCDIR)/sprng.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) fft.c fft.$(LIB) : fft.o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) -o $@ fft.o -L$(LIBDIR) -l$(LIB) -lcomplib.sgimath -lftn $(GMPLIB) ######################################################################### clean : @rm -f *.o realclean : @rm -f *.o $(LIBDIR)/lib$(TESTLIB).a @for l in $(LIBLIST) ; do \ rm -f *.$$l ; \ done rm -f *~ core a.out .SUFFIXES : sprng2.0/TESTS/README100700 764 764 13451 6736173543 13235 0ustar chwangchwang Testing Parallel Random Number Generators ----------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/www/test-suite.html This directory contains programs for testing the SPRNG random number generators. A user can also modify the code slightly to test his own generators, as explained in the file: NEWGEN.text. Most of the tests are modifications of the sequential tests from Knuth's book for testing multiple streams for parallel random number generators. The tests described below take several command line arguments each. The general format is: test nstreams ncombine seed param tests_per_stream skip test_arguments The test format and the command line arguments are explained below. We wish to determine if there are correlations between the random numbers produced by the different streams. We interleave 'ncombine' streams to produce a single sequence. For Example, if 'ncombine' = 3 and we are combining streams X,Y and Z, then then new sequence formed will be: x0, y0, z0, x1, y1, z1 ... . We then subject this new sequence to popular tests of randomness. If the individual streams are uncorrelated (and if each stream is random) then the interleaved streams too will pass tests of randomness. We test 'tests_per_stream' blocks of the interleaved sequence. The first random number of each subsequence is the one immediately following the last random number of the previous subsequence tested, provided the parameter 'skip' = 0. If that parameter is not 0, then we skip the next 'skip' random numbers in the sequence and then start the test on the next subsequence. The parameter 'nstreams' determines the number of interleaved sequences to be combined and tested. Each interleaved sequence is formed from a set streams that have not been used before. The parameter 'seed' is the encoding of the seed that is used in initializing SPRNG. 'param' is the parameter to the generator, also used while initializing SPRNG. We determine the test statistic for each of the 'nstreams*tests_per_stream' blocks tested, and then subject these test statistics to a Kolmogorov-Smirnov test from which we can obtain the probability of the streams coming from a truly random sample. The same executables can also be used to perform sequential tests on individual streams (that is, without interleaving) if we set the parameter 'ncombine' to 1. Typing 'make' in this directory after setting the variables $LIBDIR and $SRCDIR to the appropriate directory, as explained in the Makefile, will create the executables. Each test 'xxx' produces executable called 'xxx.rng' for each random number generator library 'librng.a' provided in SPRNG. The next few command line arguments vary from tests to test. We describe them below for each test. (Note: Memory requirement assumes 8-byte doubles and 4-byte integers.) collisions: n logmd logd The test is performed on 'n' '2^logmd' digit numbers in base '2^logd'. (ie, logmd = dimension, logd = # of bits considered per random number.) # of random numbers per subsequence = n*logmd # Approximate memory used = 8*nstreams*tests_per_stream + 4*n + 2^{logmd*logd} coupon: n t d We observe 'n' complete sets of integers in [0,d-1]. Sequences of length > t-1 are lumped together in the category corresponding to length 't'. # of random numbers per subsequence ~ n*d*ln(d) # Approximate memory used = 8*nstreams*tests_per_stream + 4*d + 16*(t-d+1) equidist: d n We divide the unit interval into 'd' bins and observe the distribution of 'n' random numbers. # of random numbers per subsequence = n # Approximate memory used = 8*nstreams*tests_per_stream + 16*d gap: t a b n We note the gap in the sequence between successive numbers that appear in interval [a,b], where 'a' and 'b' are in [0,1). We record 'n' gaps. Gap length greater than 't' are lumped together in a category corresponding to gap length 't+1'. # of random numbers per subsequence ~ n/(b-a) # Approximate memory used = 8*nstreams*tests_per_stream + 16*t maxt: n m 'n' blocks of length 'm' each are considered, and the largest number in each subsequence is determined. # of random numbers per subsequence = n*m # Approximate memory used = 8*nstreams*tests_per_stream + 16*n perm: m n 'n' blocks of length 'm' each are subjected to the permutations test. # of random numbers per subsequence = n*m # Approximate memory used = 8*nstreams*tests_per_stream + 8*m + 16*(m!) poker: n k d 'n' blocks of length 'k' each are considered, and the number of distinct integers in [0,d-1] are analyzed. # of random numbers per subsequence = n*k # Approximate memory used = 8*nstreams*tests_per_stream + 0.4*min(n,k) + 12*k + 4*d runs: t n 'n' runs are recorded. Runs of length greater than 't' are lumped together. # of random numbers per subsequence ~ 1.5*n # Approximate memory used = 8*nstreams*tests_per_stream + 16*t serial: d n 'n' pairs of integers in [0,d-1] are analyzed. # of random numbers per subsequence = 2*n # Approximate memory used = 8*nstreams*tests_per_stream + 16*d*d fft: (not in regular sprng format) nstreams 1 seed param nruns 0 n 'n' numbers from 'nstreams' random streams are used to fill an array. The FFT of this array is computed, and compared with the expected case. # of random numbers per run = nstreams*n # Approximate memory used = 8*nstreams*n sum: (not in regular sprng format) nstreams 1 seed param 1 0 n group_size 'group_size' numbers from nstream different streams are added to form a sum. 'n' such sums are tested for normality. # of random numbers per run = nstreams*n*group_size # Approximate memory used = 8*n Besides these statistical tests, certain physical model tests are also provided: Wolff and Metropolis algorithms for the 2-D Ising model, and a random walk test.

y{!iZAL3x9tG(ޓ_AEwOWWnՒ07ϵ5;&yDLGOț=rYXnfSaf~,o7uM'SIC;mz>CʹE?ݽ\Cr%)XpjpM/Rr}ˤUF`]SmV^[g&{6V,Xʮn7mbCI@we/{ .t$g)B[s6IaN ^Gd*x|MV%e+ n7L}<߁~?v޶ЙnwLKmn0}h<" N[.V;sJJbvѥZ3uō޿[Mn}?Ül]Gy oF^vX}Ƿo~Ϸ2|Z60OpTw{q75뛺 w0'y& 8*hA-8}B:}rU%]o7~N 7~7.G;v|9h[IC׿G\t9yǢj*-?~Gk-\D<G=]\O6Knoy@)--#kV4 .lD~Nb⥩ XS}+eQ'~j0[m=3s:Vezs]D7ޙ%w7N.Γ 4>>՜2v*\;8yk s5][V_[ "Cϋ w1p㑚xMsl{;9oZuui^]<.վ8G+dQu? pܯ~G0?m-{#n 2&ˮ1<#vUtjBD֩Xtv\k롵>jl/ZiMײoc0ڝ'Rk4'?k[_݆~kL_lR"y;k< lhrƦwC}Н۞[/a满rg\[r^u3ïVg +u R:0`2F zu*N8%ꋖo1Rڨ}B_vϘBg*:sk;ev/chn҅l4geȴPm?/6:m]n/Y|y_~vyB+Ϧ:Xxouesɵxb{0w"n 嵿}|Wׂ!s*nK%!r{;̤r}_? Snr=GO˪ƿ`:i-Np)|@ ֲjBqw[*zŞkUʰKל<ר 4j}Pv?fM/?Ƀ\kB_;'=y_Y+6ĩʫ_* p7A r{UMzP^}eo|/tIxxO_t|amy Z|i]t};l^gl\l[=K_}d~P_QwMBxqZQ]XOpnN[~ d_6^wq~<^T~u&of|aO2|Ptj*rz5_z9|bDw|j&x]b].\Uv>~n~ZVsyx~MNO ~4j7mU|:~2|~xk[A_Lr~!q}zy9vOPUc[]0[x~p}ktZab~~wZ~P~R__Dsk{uu{kAkk z>y`N\eoKfEk \x_[wts}xeM[L]F`_fH^@`n^wK%#~"v]wanyN'yMXyS]n__]r|[xy__!ytq[p|axDt|U\nrpO_ k^}̀mNlg u0e+isX|e{r{s~fz~z{us{{{AO1|~h{m{u`n{{ud{{jO{qq{{~s*gzzs{z{sz{z{s{UZ{i~xQ^z{u{e{{v{Rn+ZFnz{_#{{ O{5nejsAfp{3ics@m s{;i{pHmsu { u"{#{ WMp3K]IB<|Ri(2{4{6{$8{p.s;{t lH|qK=\vD_ZZt6h[VbD+|_|h|>tKpIrxPDt[N|jZ~a|r|rz~Okn3lh:vp[o[}|>],~DcOiy}Ox[[?zMbLqaa_\gk{|nol ag\Z4#kZZ<o[wnN-VKZ+Ot3xgy2r'aL\r]Qr|hItA^ &r|:rBgw~a_dlvxUNQ]b_x#^<^c|W~bjdmZ@b5pt*k,kkpWk^Q`QU~ځ8k~u~zz~ktO(d]QlVe/kNg\x[MRkwBZtGgOhrtrdlx~rHge΀Ze*Tb^K }Q_ppj=\Lo [qKohb[zNrނpOllh "ʁ3e:ihu-op[hkHNFltexy\Kk[khkvnQmkS<n8uzq=@}^oov[0ڂ"Ow[cDgFk@bi][xi[M,[#k?_xoLGydb\g^UM"lwgPDe_fUKT[Ozbgd][3\oltx|gy(x`iU \dM][MyyLCoyPK^\u|3[Z郀pt,Ol[hwփ_Ft]XT|E)H`e6j\[v|\Wol=l XzZZnhhN\[xoOayWl_LQ]NoMo-_]_L []Izr\\}},O|Kgp]| \{ OZcB=v>^MCnT^ ^ZNF|[ǂkW^a^WZ΂\yd`Z{p3[|v})^Qe^hre~ oPtv=\Ƀ[5 feR}~8/ Mc^}^t\BaoaajdKt~g$JVNelU}>|؃ |ȄoyZELB]Y3ԃa[[̂t^|[`bwdb\ӃLMcemxew^߄3Z[]xUbbtoGe|_U[[~eUlބ\]WP=\Ճh_ny5Klz-[?JSntflv\hNrz^c6~(]Ip{E|lN%z`l(NK}Yk?\2=_M}}}k}/wLx2MxKJ{n?xXZ4[wK_\p^Xm}Nx6|]OSbTW._v@pdLeJ$r{EwBP=\U]`~T%#Lm:_~wӃne_g`cք_}O\Ayp&vvZs~`fPeR|r Z"_rj AYVzMT7Y'\c\y{ZK+NpikހWBʁY{߁dsbU=Pj?eb _lU>bM*Zb\YbxlZ NjN}g7`]Z-bCOojl0[yV[8NhzzwZ]FL~t`]]~$h_JoepOVl4NkZoLhtAe NMEt>Uarw[wSNli_~o_NN\!\M!v`\3aZBLkb_~yNTZ$pANRUjhlwL[o]p|h@TPl^|\NFuY^[v.!> x|^neybhp]!NU NgIf}oN>[\ok#xJkg]Pg^ >bgvbliWhnfoqN]kmrxlc|-rf ē]/|Ozr9mvwvKrv\ḧ́r6zihzl}zhNNL_M va[-K/1mLzn8pr3_pArHA|=t{~@NlZ+[[xf~Ć_1yQpq~QX\][racMjUMp\~?b@lq(xy!v+wb8`$lxgKaބcte+De.`wzbKc[dVnnwj SK_ rbn`M_Oiv}xSvQ[^aq\|[kJb^U[Onxav_q!\WlKl]!vu^v,r|Qy][tJTL }ч%_6wNㆈpL|N>XpKxtoo ^}VN\IzRybT`Npwaoh_|ata][hSeka.PƃOoUvxbo__:nwM MxY}a`*\NL%mZS]KZM }QKaN PabG__w(w{Ox`f%#Oy|^^xr-a0 d+QfgatLǃjkZ*b,}PMgVlAeh(jT{Z}Vzwe|id~Trr7#X~;6|8bA`le,OLBlgRQhNx_2P+Z~_~+[Tgav_gop\[LtPu[eEbmQv,O'[sg]Ha~zPKlUKOzHl~7LZ_ye[l|&]M`wk0Q3_ aQTzw߃wZzP_ZNlXt|yTa҂ш|[M^`ZZ_Z[jwbho\hlUC9>FLZ`?`MOzsQYa[ZM%k[~BoewagXb^X[ d+b̈hzP0\4Zʀq\8N LIlLNt[K}K\\Oa_M ;,K^|Z?` ./t]TZ F\Z+]r}KKlaarZ"h5tflw}NF[&\[]xbe}reaO^kM}^[wWiYقG\b~h Mn_"Zd]_!yv6yP~^MҀZv}gkNly{0chMdmM-YpMrMdKwM>Al NOI7GKK ZPNgfM{bhe[ mP`(y\`_M8ARKKwZ2Pqt\c\AB)-uK-; |[NC5(}\E]bnsCYzcrzdဨ{Zź{ LҁÁYguubqsɁK{耰{zuցs؁։j g ۉ΁u ?z䁝q*PPXcgL聁ŁYu{)Z{u uzHjzU{5p9m1fus5i<up=iuB6KmEcHJASLA;!sTc #c(s3\8up/s<{lm>{c@{pfCu)yXisH{~mNuyiXN{rP{tR{VuLsU{Ns.dPs|]u5dVsm .`b{4YEdg{hgLuuiso{uzupsJYw{Bqakumnd|sNius{zduRq{Tq{sumu<eSPӉfف؉މ=POz[cduC$hh˅YzD{ډՅcj߉qz j{C$3rdXc?oD~f~r|}Lsq z9ZuCjNJj/%PY uvs{(PYLL{qKP]jQcrg0&LSTK 1ω\L,lL(aK'-ePqKP}[A;M\KNd+L^Fl\!wpzPGlLNP:4qYc]UL|l9-dLJ Bop]el R=KNPdZnMh L_MK2wOCY]iUZl~KNvXO=_Kc LRl:K=\EMv^r%NPP0ec y_*a',qK _MygX7Q dnuA_Y .LOlU(v"[5vH&f[eo{= i]az!qx\M"N\Dv8O)1Kr:bB-K ^":P]y-R&d'bgIZ  _[_pVZ̀ZvVZ'fdaxJ(3_ N%h)P-{Ascωdy<'1m|W KATnej` !KM@.A_ ! _NFlXLlUC#UiioNO}ZWxgNN[v 8vLv1*TrMKË*8#NjOf-8ˋ!΋,_jyc%0_ӋLF׋9v؇/_PTlUEp\V_tz[~yljj}svONY)=yd~]]=CË6(PN%-7K]񊣋5Y`'`<D E=wmVO{ZA]`M^NYZKNSNmvv E,Xl2oZKv^_v $z\KKk5uLMa]-_+LKZlTZ_ËL3$ui>ՌN6~a،'a/ی 0~aa`b NpcKN9LM=fy`sf*Mnw.l Y_6McUYLNHN`nRq` ͉gMI&Y|j(af)hAN p b _C_kK V.x], _݋ISR3ކ`7aVNnk |yZS _ULx[GN61Bne`7XKOU9AlA_ɍ`D|`$Vy?PN%[Olw8:[SKeah_zPi{ML]OIvWNX_[N]A^ËjvF[I[T>$5\XK#l`lZaK>n4MyZ[vPcLW{ }aez+OT~\` ^lUam NBNMw{lMYyMa=U8L;ibMuɋPrf&Yoonq=TNk^}ƍfan NkaPyZ3N,\i[6f~Tel`yp_Tvk%>INQa7[zE`KwneP$ch|"k-qK-pTlUme3M!}m de~giYLKDUhNzXS^?z[{KËO]ObbWROԋdLwZKLp[M\܍pZkVhK0v\/w_a^:kkaycfPpOK5]eU퍭L.O\VZv~NaN NDl^O[hNsv9-Qe*cbKFFlLR }X] pPpK+L%'Z;jyWCQZ\W_lNbɌˌ hIoZBtQ]OARCRRڌ QdL;$f@LkN&]U x5l]i}wpboa![v.Y8adyN POG97iNj􎝋;nAsGe_:PK%\U[jN\lWkp\!fPW^Ẑbk؎+Lg#k`GWZVYq~d?\-D[K8NyyZa]aNjNn^Z $ʋZHO Qt[{NxLv|K`qŌ/aN{l(}lm7he\.~$LlUOkkKkl\,.čk9`M>JMËSɋ;q35Ll-(f dL7 _C<\&\7YxN2LKlxi} moyh_jr]PzzkND_NF:09q|ߏKtl|l݌`SELKYgj=g.KyAi,O厖V eƌdC]65_{?LrB,E1PM1\hxr8%[,vM3_N}==jL ;5Lr;o>p8r_搿w/1b23a T.ql͐nތ=Z+\K?䍒yN`t\X]txNMt^M#NU`Z$QePLՑ]]nj`ʌݏݐωt8qO > 4X[Fl^Uh]҂ht\ {dԏVv2CvkiT LB;푻_QJ\OYSt5S/MNQwTKhn'xhqwZqasu0wp`4lj~KRx\N6=+e\{=T6'ËX3Z3J{a"BiOU _㈝SkVZ@x(Yh #(8;nK'tppe8`v~yK[Cu[Ot^aGNӑXK]Y{gbn;nm _MLJSPdb`c}}3)FgVJC rV SY+=`s&]#YN[wyhk~eڄ]XO~[VjB:Khjuui3|ԇvj ԇ5wNb]]zvxYᄱҏp3_MJPcK#ω璘q@q~wso}u|{IqLqfzm{ғuuXqf6Oqzui9܉iсskǁrzU~ug:zЁk `~hdz܁zŠ=M{ƊYލjw]/ZY؊7Zu{>Ȋfes`` YuKuslO'eNדZNړeu{MKZtNWd toUlDwo}o~aJKBb[_cy8vː$ |Ll{]h~$iӈvw^~~ezƍגfM9br[_el+sa {Vegd|$H^9IPQlNmr k`[.b_fpbn}#UkeN_1[ZxsZQaa֒LljXZ\ǎɎa }(an'NJaxxw0PhP[e}O|\(KhhlZ0[b[vnK[RkLc2PHIM]]KMMW9ZMM[ohtӄr0"X~|n~olL8h}\Sdi^jb?bkab~_1\`rk{bPxih#^T~^Z~e*ro@sehdr\ :3?Ih[] NyN0Be\`Mx ]n`y\Pwl'][_t\gMLodzX`)|gfhO9rprp{u$2is:u)+FmDF3CgP8Ym9\m5Zu$af9up0s={bp6sg:sOxmQJu|mI{“L{Puœ}iǓ[ɓvm̓qΓY{dfKΊ\PZv{UDӊgu_sKtxcP^Km{iwq{zEqv{ruȔ}{fhYBMuis [qss)1%o{%m~֊Pȁ$s}nzc0zq3́qÊ;H$PLNq{|݊ЉJg dg\AZWnl<XPƕekҊʕx瑍jnȕg0[~ejkZs[KY7`1eQ)g\_ML[x+WPYAM[|U vm]J(>KKZY^+OgMzPqim“vK*Pl: >p9Q^J{Kay{QȓmYmd6MQP%ZēK _K-P_Kti-lz\!Yqy^w|bde|c'G`Y}LZYL]tqq^ak`oO̔>sczP({:f{=i6m{vuxAm?,c/pMmN9TXUmKij PfP5}\m/XKE`mmkK?{fN?sLunÓqsIs{mqq2dГ^uYCw_L/Zm•nᓟ Oo\:uksЕ񓖁ԕ9֕} ٕܕmߕ䕉{uz\qlMOsv~xY,Jnˊ.׉ˁ7zucgBD~79$nd= /Y0hjlXNOa_Fdu>KcNoah[ۊ{Oi>ZbZtؓfc&s]VP}XPM M Zt{r[ya2twxtg]o}w|Vgwq\DN`'mx+N kp\[cde N g}_zajl[wx~tmKzlNqÃ^[v [‡1x[3z^Z}IzOOb_ a4b)ބ\MTZ;b_pOj+[^dz !.\m`>|X[vɂd˂r }q[X[vT^-]KT^UNʗ[lwzNaHZ2_brb|`_&x]+L5`d_[=J|J~1}Zƀ^b}gMgsQktq_y\΍\`ht[db_n0Әl՘y\{QOb4yT~KaN]v~^gy^|]kZ`kOfea^}_yw՗y]~h``\yK|\s}cQzgtQhO]p*qhg]s-]dZZ__ǕD8`P|NZ>tN)=E9+N6k~hUryZ~\wNb\{}8N o9T#U%_ЅR93__yO=VNbNawIxS\Uh^}WKь;~[N(j/]*ru_oF_oP fCxMߗόay`| _OPZX"#݁ԅSh~:Yy݆ێ`}`v^N_FaHhx^ 5[\|y\}v]ntfy} a d 5x^![MP[@eˀ}|yZN|a\qpxK<3[lt\[cb5bބo݄}^]ۙB]^vz[߅kg$|M$pVZqWZ_U`av^ՙn aL\8a?bKOgagZ\`U1Â'0bLRO}w"m_Yx(mta\anxv}0e &Y{r;rwhSCrr6 nKTe|EOd)~*qX]xh]o{N{O%-eYd[q|rj_p|"1L{1](r8:SBm`gьp\r\X'wkZ`oll܄zN\ęlnw_[Po~v]>~<]}NP.2A_~uOM]z\ tfLhNP G+a-v]cUynNPxx[+`b)E~^Up^:a!\p ˄-mihSlhb^bؚZ\L\SؑrfNrb_PzpNbasԀ^:[qQ vZZ[Va2QW`yyt[5KJ`(^ZUlO_Tl`ngSpksyZal|'x>tdwnywIQvk [M[[[ Y&i0cۀha0Ni4X5{IsOn򀓛q)sI{aMAiP&:<{Y\ds_t:L[#Le1jՊsivXcx哰tPqQjuY˛nΛZ4up'; sĖ}Ɩp˖̖Nps->X$\mvۖݖJK5u]fem7u^;ujfDuwmxf=sgfWqmHsmiWu_Yum\ueqKKcKݓmؕf adΕ'r{|ufՕוis}suݕmoY({ \rd {1[XiYz*Ǜ]2X5qVǛO_O 6dqdVĊYO5O {LCJěMgsjZvcze p{wLrAZm~{ωz(CM,"›yc_D~[kGIhknHwEet|kЙMXN}^|NM`\|brN~}sP$6_ kN[bgano=nqgdhj^ Mbt![%m]K[Zn2N^~^/4`\_;LOԗKt6j_[lZa_y܆w w_\h}X[W"vyZ7hђ!hv`˔;\xrsgnN$\jk^_[~?%Na%fOă/:r_tD\ayZepxՆp^%Nr)[sh< [C%d[]|\Pi5M[^N9!` ʐY.虗~W`lN 2oȈKUN[_cgnNwbZvv^^^aLZQbv}v\8LfUN~iUxpfolNcUaaZi7[OCː"v`Y^q[cXag(qAN}_.a aZZ6yDv|Sek.w\y\^Uvll\ P#*N cB}_L=|^Ze}I\ex7\|n=ǗnwgFzmxo[PǂmWcuAuuf l q quXuyϓSsim|S%(Õf0iϕ5ҕt{|f> sBf%敋{Zq*rd{/gqioXsrnprUvz]M nၵWj{s֛8]ot_{L<כcHWMn.Xc {K{)^Yn'eMK{^jqnGyڜr$lKgvÆ~\"lQpngvuJr\xq~`ꎟ_yoZkyVvB]8hk\o](M%m,t`e_ޚ-\l i#V݅x[_v/azZz|КhN`8\`VpajMڝU_\nݔqkb[+QO݆hw#kMh8: \h҈ph_Yx[a\ u*f犯–⛬AǖpʖN$uM>Kx$,{k @U3P@3:{ʟϟD{zm@sOuڟZ^xW{bԓ@?\o=Q]Ej#Y'qĕ"SxC`̕}u4y;*zsڕ{7qDs 啋sN%Ozdl4VzYun"^RB&{(sNt/ʁ~P 89s;Gyl|e| қcK̛{[ЛWMvz}eq^]#e*uMOnZ&tf|bn{K ك܄h[c9~hfjeYgSPlhZNp[%k_^]olNc_k|yP|]ɚwj8n&Wj'bRylr[`/NΡȈXgwgԞ>^%kp~kjS_'tKg:PxSo C`D`_OY׃tKB[peI]OtVN)1{L)X~6`}os^\z`\pZ`uR~6DաY~ih\~lh`I&[ L/kwpNUgmlki3c5jGkׄgfYkkNS>xMZ`yTpeLk8MZNN$`U[.VrZ\uB~DFءrpP&Qm0bf`tlcRpKA{Z;yK˔fa}Ct(\LZ>ll jw_r]`a3桢͠eZ[{=]t]4Ճ^f]K0jqMttQz‡VvFw>D+ҀX_\0Og}:Нexyy`y[MyyCexmHltmIzVN$k\w}blk^M)Zvsd\NFXt{=x]#k#[oH[lspJLSdq^gu]__"^m\[Z~]#k]|#kMlLk{Zot̡[m:𡊠wb_jK2yo(`rZɡh_^_-~._biWcz|6A[ĢꞳZd``bb|^n9\.\y_o٠ u6ݠ9⠗ɖNwBwhZ\Luz>Ljh|P_ZaZPvtgg` |/ljy`0 Lgou\lxwlNVU\lbauoŇ|&zYwbx^(\bb[΃`ny b/[^QŐj]][\,Mw3_K_zPb!bo~}lxnk]*`Zm~wIl;Q!+a~Z\nfvӈ_hN1>l~~[_:䄔(2lkb[D+KM`dTbgC^g`L#[ual΍o|K ho$[`m?bkeăHs]ܢ`y^no|qA$t}_`ǚx?\Twlrɇ:_`˗֙\\QZ[jx\y`wބo_}~}\$ӈ_~)Paw}_~}wbiU@Nh|P`fg{~[D|~o霋ȗMfK|o}_-a8w夣ƌgt-eTʉg`T؞:dv{ka\!lP^UZ`Ubqr]T͈!L|=zpzyr !~ NlZϙvwN+OÃ^[g]`gvvT iN-aX\PaNEylOy\o/Nzk-5Izyy_wNa~$ꢙMkΘ[aeq}\s}cN[\ovăyk_+`p}ny}ǀzwP\t}Ȍ~(bbbgrwljM tvlϘNQ#Lݗn7n\qK%jt_ ak n|[gHP\ZMnl\g_MkxvL_-[˥^kOPq~^M`0esL8PMtNVbGlKy\áD\¤r}1l'f\,[```~w Nwa]tYa'Z&tr-S84/[ե\{b(kgvàwfr}tK_[xx_Lqx-9f[S[[b[tjaTb4]ioektw_]2p"#f[pwЃrGz]_釤ee7_~r zvRNK|Z\^-}\#bNwrd(OLcLx\Nc'_Q MZugxl#ik&Mzr~2xMeUbàeNt~ yl Z:vjhrhrZ>?hp}gkgDt]]|>'&]~{ wr:g5c~흴t_^z&D'\cLe/cxv g\ vy``~[F_`:]b\}[nXN\Fz|?}F^~\g…^|Ya2˙pM}_Udw|iN[X\dɥsy\^Axybޤ]\_U􆟗CM;vbw}xv}ĦƦDzDdk~g lx@\nr/`URn3[djhN#kT[R]+aC[5Wk[̢lutń` |?xŦ^wMNjE~=|'6a]` ~[)c܄T\LZU͚nԥM*= ~xNhzN*uRL!qJL^Pz…|g:t4aP9ajz[K2U%Owzoi|iu^WtjLT˦פf~oܥbJ_bƤowhvNPsPxNġ4M,[^0yN(xtk]΢Ee@y ~1deeopZԧ^(|N[eotg릘_vMeo_Fwt9aCGkqqϙ\{ZonL-pOKvk8:kyOMo[` YCM+aJWg o[x~mhyFoQzʃ^ؚ2-0[ߥqď{}ƏLlZZłi,[LΌy9~܅Tb/fh=v?P奢on+lX?{b-wP~lgZc\Kwx4Lcv}bm^#])k͝"$MS]uYU[!Qp{hZNyͧ}[禨>}\<٨~x+N&[M; Mg[riw}o}o}?erzKa~Z~\pWM^ky:AU\lvއN3h aqhb_qž҆ZP ~?\)hleZ?z4tp`O/] LwdegUphZWM_$tΫ]<]oOZVOh&`g`ZvU_۪h\`EeO\^zhw{s^b?U,TaRϫ[oO+r|]cwyhlr_頻]?xUyx[ZM K:whoØȑlZ]g/[5x|W-M(]whJg][9v.a3bxؘKM̝j]D 5]&`K`pu| imŧKMLxv^y`ZZaYaZ~~Ңaէcul X]i<]_wM5K|KoGߗDtvzTZZ]oqygUΌ]^] b?](bvn`0NY<ڀ| szԉʁӅ̪{wY|%ģ']Hʣh]ͣ{$2jh'iUkڣYܣJgH]gDnԊ,֛{؛ڛPG5K{$KJ!ܛ0fߛy>{WOmSm(u6;npӖAUiGDU3▴oHes;sxSMuK{|qFs ʓ⟆[{Y欰q2s%q 7HY9}%ei+t13@os25Cf:m{>EB'K ,ddxm3NңϬQĬ+hǬ^/ ZiluZgJϣf˪j8߬٣wdjeku/qsGƛ,WcMcO!erZkuCZa'eE;ۓXjve:P]:|BeQYwZ sxZLyt'tm*r3o! a pϊk]t|KHbs]m{a檱\&t]/IzN:PzzZYz5 PuājTP XPsK POsg_KOkglLdagONPkӬIfVPjg'eKjfOOMNlkzLOMnpuszte%jOigqmqn,p&Rg,"s,n"JO'OO/nqD*O6uGO 3;RdsuPj ur"8mޛu{?f VXNQ\B"s`Ih ٖPF)sj+sȟmG5s$C{&ԟ)} qUsKgBq`n?iu.Y } q1qJ8qxӕ3iU 8ە[< iJd:!/Չ하{p۬jѬʊsyD}fN߀֬LάƣqգсnsP\g(eKdmgsOOj 䬒L O鬳q{AOOqFӊYP%7_jNS\rKM_#v}ZXtVb3 Ue[3~\c|l>0g9pU4k5YEwgiQt}g=d goq`\[fv~\f٢yJ} zVPZK ]j̃|^~mOt[F9`Z[;`*wa֨p8y3yǀ|]`n}^}[bebרkvQ>h^g%k{zڦtoQQ*ep\&t]aW{z[ ^^-U[VNl M[_ 2ۯYo~?y٤J\^.TG`_q[!SwB[ moyg`agyZ팸v,vIzq/3fN\`{lfzy[hdlj+\2oը-[NZbOe[(>Uevgj6cHN(.KNY {!])ɯoZx9ʢ }cQCEm\oZM}OxMm{MnjYl|\H^ä~L.My[p 9gtM{_)AH.zogmXn}O%u&uZI}=BKyl*)o&s?fαϱбѱұӱԱձֱױرٱڱ۱ܱݱޱ߱/)MN鱦 IaNDPqY7c+uNYODR 2{; >j 8uuw.La/P\NNUI$ȱ&{NDPN N|1{mo y]_m-)M\ENNɟn͟"qm8st'G{T+Vy.{0~3X{Kcd{BisS퓘0R}u uFId+۰lɬuɮ84ŬYLMY%oa*N=rΣnfϮlhѮ恵w_U9zNMvMLYoMMyMC{MnP~MMG5MӐ MgMnMM#MMMMɳbRn "Vѳ'eӳ˳uQPˊٳ_۳'eݳ9dPNHܠOOXʱ  Nj N+):$'sWf-L/ޖM226kF=uΟ#=%t(B*oGz˓4NfK7[x{Eq_2Y2\OS4VZ{h#ksmegiLyuó[u밲{ӬdѣZ+׳\裗󬚟ܮgߕLOcKڊ4ek+ar3v\Ȣ\}ۡhZLjZ6y0[znqZF[&vE_g4gBxi܈\2]?]@]մZ^kwKvZ~(^(dZbxhD\bxXk.ZvZa}||Z3PZx] yp\{^ž@r W\[]w[ǎNK _yZ)\"[[QVo*[,[҈4[r8[ELGat=[_@[pZC[Ѵ[G[/KZL),\[m`W[L]VZ#~;d[ _[vP_u[w[%Nz[lvw[Pj eGlwzب5xo[ȉWX0xw[]}Ŝy+|xy_g[g`=Ma[rǚO[Y[דrFbǚ\})oDa\ m}.\xq+E]'>y_\6\o9\Ik!vB\o_PZ:v&K\];Z_˦[(`F…=zJj\GhsQn~\G?Akww\&~_\^qw\y]sxˈft \+|Koyy8b\\g\P%# }rSy a\)M2U`y ~\Ğ_E]݄[\}]l]Z]?pl ];H<]aq]\2kϨ̫]pۈȐ ]t]xx]-htq] }$]]]n]^ohj]Alh^l:M[A_lMGk}TZgt\^eom*lءlkr]0ж `jJ{V`?ztޞڔ|~(Tn^%K lĤ`iU^t:)^qx^}^Y0[t ]xޭ^ \rb^4y`jk͙Fo^^b^m^^bw\χx^f(b]R_2^)\^_, a w^n[e^^O^뗮xfext[lx0[RyO^`0Na<.pMoE }aqv葃|byGOxvVγGOdyvzvcykyl4_a8_,^2o#ZF_`^b_^!ZZ_T8]_}ޅk_aqthAa_"ˆzb)&|/]Ce`&a8`N`=`}` t`Al`8```{b^}lla=`GOr1rN&poR1ak4at_ٵxi?ajǥja_aߤPaRaoUalZav_aee\*(mnzRznaV[+Lv %~_za׷bz^S5x9_;&|gahεnqZˠDyaWtt}k҈f'9 a8Maո-YН]hePUa>mxi ݇WfOca5ra[aawW`ga$Va[aejY$xGOQ(a_w_K|!aGOS\~p}uh]G`h^PjxϔX|`[z^}2bb1t|ǘ?nbKSb[{3bpYa95o[b,vObњbx`F_ORyumVoM)vXqba捏jwbibwhSasUbzO\h~*ː`ObORGRyk k`l"Ma?\;׵Θ~`|Tb}\/ babk l4xuo?bbڢZbMbJZNaN}Fo8Zwbx\6^bd`v.cg۫K9 c]reRc`ʹ3[ j)fuXc/["cY$cL'c)c(clL,c~L/cω!Zͳאּnఇ؉czʁzXݮ ZLBD죩WM箲Y$$!$ŖS(Efóc)+r3/N6"֖cj*,l.[0@N5hǟ7lF;A{EuswAh{E-O{HޟOsZ6]Y_g a ch{ڮm͕MjYd^`Tpis;v$z|o-Qe jt£rì9s U/ãj;ylk jYˮЮ;ddtAOe[[jN>Pdĺi(dgfg%eNh`wqqgNdRL:eX]Aeflw9n_kjLwe8ڶgHjde;_Yge]t.h oeMbhP|hlѶ@$qrk9\eݶg% lp1]lAZeh-M+&Wݶeekehh\ekred|:g=e\fOe}(arcy_n~hj  НiofSo^tf}y[wy1Z i#ifzwtLO&~Tuc+eihevhNe/h6j:|b|F1|ݶrH lLOwb'8,<-NcgA-{70DG`I0KWiRONQş9{moILrL^ROw,X q\Jj[Pӓn԰UmiHdֻdZ_6ubqdfuޕxaC)sfe]sᰱkîzSº׬~mݣܰtѣsެ7g9g;gvǺ~5Kκ8gcO֮oٮqӺ^ Ұ%ʰjܺl&Ymezgյf(gg>gG_Ȱg锔ghr\tgdUh,ԁrM_tgtgd9^r=g1Jh.r'g2gyxnUvgBͧgԘ{\x}} 1Kg}aaK# jp>gFtζh=bkh'>e(h]-h\/h3g3hد[9aXhnw@ vHhn].Ou_PhSayrCnh:hjp|+~"Muh~bJ*zP })bh}Or}lt |/q|^'hlDh{QȪʪ~Ϊ>h]MEeh[hNhD\hhrҼ߫hga]YhKho;]~gh)nhw1(h󝈵(ptֶlii[}{fY^qi`4Ng`%{~"if_b(izp#r%wO#%y,{Efi օ?Gi6*NsMi) Q󱫻 >0;w=ONcS8:hLpqj@j:MWvwt(jEkK@q km`Kvk;] Mkj%ZXk6lk xi[nS ng hkqIk[k~qQknTk`WkZZk|M_k]eo;qlknkX{klkץߤkkkn8rn^*tvk k1vhόka?b~bkd5yklkQCelǾMkľk_DžɅv,%ojϪEk[kZt^`\k(z\̯cUl{lLpr\lakɝ l lx9al`Ͼ}|lkߡL2yk"s)lM.l_2lLw>l ƸoؚȤL`lMlQlnUlWlZ\lʆנξ`a#Mojil܆ll e } ,fO{lwl4~N$ lklD`_~互ltPw`$tp8t\lЄEwvdl-]eFyۜ_ɄFtH|Pcug}ljm}ly lYy]tl9|lJʨHmllW]Ņqnr]^hHmvmR\~Y mnmt [iDvw^Z*r#m!)mdaO醙gP[]|uc1Ef'l l nUɏlxx[|M¿aĿlƿlhɿlRmKq9s;u3+7_±w9UißPAC:uWqqGubɻgY~7K*p(&O)LPqi-wuNl8f练WYg?u½ Lsme˽qtؽ  n޽{ym٬۽ݬҮu+nxsк 'e>jrn .[{ #Q[GHenfgEpOln&'Z_ntn(n\xT5t~n) DLpanyZzo9_knlu}9Ln]Qnlߋƥn~nVwEnU[o᪊y]@#c\nAQg`>na`_n\nl̙׼RlSanʹ|nPnnKUˢno[ooG?LpD_n #|p~jM o᷍ hLpAt0NzYp Q;oQe(@oa}ޅ#ppLo^Oo`bSoabioMlo| `o]}eok]oZo+dpoMKsoE~bwox{onyb\cevhGeso.y }$op}*gkU\oavȼg۔̭oLv:gSnr aorno~n~>o˞s8_woNl r ob3շxoZɴCo5Kp,1ˠpu[ p@be{gPQpppԗj"p+gM-8tZp1p*j:p.|Yi_Op2xw'M)[pr^ph`p0]j ]r߼حhanpZZw_luplxpHo$b=t^gzpYǀ2pRoyp¸B+ʚaѹpIlptXtpO]ckp$pMp뿺۠Z8\"*Q+dNm;nkw Z(YnwpOyp5{p*~pp.Ʒn1wIPEp`6HoGO*;Š`po:v&=_I)Qf ->t7T4BRUE̟GYП>]@yCQ S˻ߟMLѓK+q-]SUtq\ $V߻ib{fWiHqkAcFs_qzBs_ս0`F*8! ̽uqϽܽ:r {q {u{$s{.dcTn Oqur}qx?̧q-O0[rqqÔt[qsDT}qVzwrqz\U } r:mo1_|MyW8d0cm]r7qK41.rUs` xOqaZSc<|]©#| PKr}R`B<]|r=^r_`0cvwOr}%apr_srټEj}rgplbNe vs[r@g;nb^|r[ h!~r /WrMUr0v_Zr^r/Izr[a$L$rq]rZEQőr葷r_=yW^rx!vñ2½vrM0)Ufrl}}xpV¥sޠ\^u`Nme§$eSòrX#]Pryr1\rûrMwZytr"`r*aKÝ_ÏozrAh!$.ls_"s,€J4P¸k8VXZџ?M_ןU~/fJ”mMmKVZ[sػߓh"m&{™~moƒu ~s^yHĽtf:"ν5ɣ=g{ -;/ uYE'Ga嬪㮸~hsE6+Ժig?uħ.dngԭ tfMtax_xtۭÝR2wN#txt)t-}IɘvE7b}f3Er?tgpMaHagp>XaƵ>OXt7q]ti.p=uhsPftľ]kt>jt|st>~jnN|tmˀttlj9k so?+mctrN0Z1Y^tgޭvthzd^\;rt`tgԘūqtg8VT>oyZn|tZ w"[Hlt_t}[gtRygatx`tNyavD+t.5X }'_*1_[mHv uu[P ĭ_Ȗa:O]塞lO#u#=#֖H)JıLijPĶRĉD!ZĬKӟĻ ؟xcƓTGV2kjąĬ3pm}u!qwı|a{c`de~MvMQՎzvmgиJƭ`b xzNC_ZȢQ.vV\\ eyB]xyv9yPpcٿڨHvgJvNO%z _]|!`jl]v{pƐ]fv]<|wR_ yU9Y_y-]^Ƃvc>wvZtvnvlx8\֚v%svyhvv28l=kxvvoZvWtvmi8zywᢧy9.p``wpwcKw9w\K\WTww`&nwUҪˆڿw5x#w_wAwwɠs ]bwywNwYNwbС~w}Ql`[Z`-iyxMKPxbx]"8׾vq^ȷU[Ǩ ]_$x0=`}̓hЗ%Hx}xyS`;xhx ]>x"]3M}nm6x2ܴ|vxDTxtԠ-aNנbJv_xP_cxyǜ;w^'\^nLvc&ǩ_G{w[}xx~Paxɇv}?Cǻx_ʈB"xqxx4^}Z̑ˠxZöwyHbzUpx~Xup\txtxgb[j6PxxPzaNxݞyMk|KAy_DyM_Hymlf`v_y]FLTyШuxXy }&aƇ+_XZWwoCSUap{y6yy9y#9]&fvhnBg\gOtnYa0zx2œy;yyy¹`JvyIz6Pyyy zyay^y굼ywBY= ]l1\6vrIzy&]ǻ]Zy\yʚyyy=\Fn]˵Yzm`zyǸ \y$LljpOyxavy zzCzb z2}z]}y&7_JvƐzp|ۅצ,` m;z|A'zi}*zqLf8+Pw7z:zy@}AzNlpOFzx_x=NzwHLTz5KVzy(vYZɉ_zzwcznezxL+izKbdmz\_szb\vzk{z}.9\z$Qzd]zLz8[zzbNz줚zElzr*,KL.³CϳP{-Pذ-z}8ŝz!v̬ Ƒ_cİTðƲĺz{ˣcћ&Hj{)n+qXZĖb āc;Ĩʮhu %u%{<ĥ>Đ£&CY-{~6şͱU ƟVĨp|ӡ-lnvha}_;||h_Ũ|Ҝ|_mʚ||dZ|fNɗ:˵ot‚f oaQ_pSiY|l}}¹}1a} ^} JLb@b-h}{}a¹}}}7"}|4 N4}^US},}]p~tg=}\?}/MݵD}klI}}|}g}ߤR}>ieЙW}PK\([ d`}}c}ˍGpr&]jg>w}Kj|P}}~߸aȘ]} }g}rҼ}`PU}}}Rae]U[0/f}}}m4 }bE^}on:}N=Z}}շBN m}LƏ5)Ty}^} j\[}|Tϯtf}}lDu}ޙh}wn}}[n~qh ~fh1%o3cF|~Q^![~1lj{N&~̧]phnrY/~Xr }^8~M?=~~`b@~~B~jϊF~I~yM~ hP~/Cn6'^~"a~b`mUǴ`QZj~ZoVlŹr4̋ a~iȕZ>~\h_IvoWxՠڨ~T-ț~}[Tп~KCQ~o}uZ~Me~~Bɼ~ޗݾ>~Kn~X̚Z~> wV}y~v[VN'y~_Ӥ&b\~3~tx^_(#[pYKh=\boq̑ǛОc _(.Y|KEG.RƄ5p6V:ꗍ}kqJOGnMx0ȹErW}̨i\˂2|bX܄JhNAA#x_t/uxzHpO'e^ޯ]_r;A[hyv?bņ:gt1f+r V\vۄbTƳr|z_!Ԫoej  ͝[eU8խbΞrombЭn_yKMN̜~GbMrNtP_͇|g`Q~̦fZN~ P Ozhb}5`iN9FCž}$d!~%^w_*Zt-{/s[2ֶu1̺÷:- ^`2wNlRܨ̧[oyj2~O6M^߶\ؿp(p~qtUvsz{̀ŚW轻p(͎_vy~줦~\Ӛ(t0bzb@~ėemD|%gYQȀXkʀbg+~mhȷgˏ|ɾ݀ųxʁpʔF1Lլ׽Y³G ɠcOS/ƕh?k{ɟ܀z{{܀Ś5ưʭs-L&P_)R Ě :Od|ʐaΫƭ꽏cأrkmoΏ{q^ΑtΜʿdJc ry]@NBĞ #Q,7.X?KĂMĄN-ʜ.73ʽd9 Bݟ̻h㟡QY"qŒWEqKQʗy]_9ŧYʟ\ljs`ýdpȊщnǟukʿmLΗTvWpʌOɎnƂtiL( K"ʴz{u(_ĖΌ{7z\n,g ]K1N!5ȂP^>Lj/n.͘r\o߼'h*[߅qYB7E[HR˚~M2ކbv'^vzŗwK>!ab5e+jCp]KrPMvw]Ox ɤ|¾D|XBOʔƬٴ4޴5t)"^ ʊ%8ѷ< ʤۼ& aN”v&hNUPKZԂ_ւ2قŅHvZvႢ͵z^gUZja_#nLyؖK%Zjm\%qۄʄF#J\󾂆s4iϕ ֣|KCE\lqrMԞZ`,z[\QbKP5PS ]_LW27:͝bbǀfJ#]enmZp9jԘur(_x|VNbN Yɵk@w^rmg[Gvh Џ ҲN~S ҁʆi9ТNʚg4rĪM[gW at~цFoT^ֆ}](jӀ$ga`mut\glЂUx=l|MҘl0vHЙ^ Dl2ht^gӚFt;(;巛u?ɾv{ZNQj5B džNld.hIҦwO,vSvpMVbGg^=Mc)le[hhm͠[,tuvPCb\D}ҒǷR_ÈƧ`cdG׃S^CU}v S>Ǟ?L]o8!LnSXyhxXQoOT^ʢclćlȇd褉\8ЇW҇a_]Fo P3_wHAa\ɐUp cmzajt_[%mr\$Px5[ Nsn'![ȲGOhjҡ_(0iݴ4h8aNzЁ}MBAJwgp]HȆbO=- NT`5)i\t^̀8Pe% Angp\ruww}spM/ZvӇ;уrtۄD&ԑ4bn׵lzƅ@ѣjrR`AUl]XkFrCmшyňRLjaEΈ[>zV0iഩ]ݔStw_LCUprˋ)]o%ħyhpUԨotf\N/iU3ǵ`lT#tCҝ`MT[A%LC:hj=Civ=;+RwvVN|ˎ`;S.hȋϋыvnwZ؋LKۋp݋\ԍEh]N닰a9$g[$vvt]ʬjt8 R ܏K̋HLiyMɒdL _D\ __Al*b $6\f-ZZ%x[j5raLK=?NjKDq3qe瑳NR)`Xkn!եǜb`eKh=jKms=%Nu>ፓM3{x~AD@lJ(SMІRp瑐lE[/ꐝK@KT;cZA_8prY`Np\o#;׿`ŒŲWל!ǩΌv9ӌȒRqPwZߌal\ _䌃NyǑ8e대G\ho`}n?C#F) rTt/R;ˍK͍%NRjKwZ֍>]ۍhj>zvdَipg`Ihb"Z>\ 42U~׍Coviהa;ה!e}#j0XזM79-=}@PYƜ_ص->7K_ $)ҋ+uwZoZMQ_TfK}ڎhOjmIq ȊK(w=5zO|K~]ր]vi$%RֆOع{źwtfWO3`[E~->֯wbJה/b)!Xؽ貰w\\ДsZ^̎/vʌ $V>جMݎN9S UEȗaXM ][|玗gqQ؆,Ԕ)QgE\ w@n- E$"&lU)Z+tY.C5v3MNNA@aZhɛZ\~ztP_U!c#"N"`PN^L=Xin\5AbT'eh3/KlpF_VNsnz@y |荀NVXcg`Ou, KKMuןևMpv2ЩX]_ \ K]_VvÏ߾ᾇl{ه㸎ص׏0ُ6ۏ ޏJ"x׸١[|lNi\Br'הݒJܐؚc mT[9[]Onņ \$%NOya)y- L/18M358:vIwZ?B;g-]GAbKZ8["zQXS`U`VZ Yݒ[^@&cٟ}DwZӞe٪ѹ|Kw=ydcW%l'*rf4q;Y+N|Kٔ٤=PZ.%O A]On­uIҥl?ƖMŀ i|tͥ톭_ZaZ_b }0ض qKoz1\Ӟ_5pk(Я(.^Lpo W˙.@w`r| Ĕ2wOǔ6丁]ǝxȎ)PԔSaؔ}ڔʔ M%NގaNU攟} 1[ie՞Uo𔺌qMgc =oIMQv dY ' ~rM^x"}dwͩoxQ6_ _R]UJ2ѥG^0Y|jƐ5Vy4Pel(?Bf^Ţ>4Jk]UOlŴTUteZ\}_'bfҡ͍.nAtK#xՃ]|.~՛qKj!k2|~ tM?gζªRmD֙MRdKp|KZ'NCʁdPdM`n7^D)̢.=ZS`޹PŴ+U®(ްuRܙ0މΓKX<ZY b Zwinrp\wdH}K#]%7ZՅ*g-ߌ0߾uΖʫ"ΨBӖRז; `Jk@9m1 OĶ5vޱx=՟ܱʻ{Bʹ†܈KEէ.Y>yu廙Ť- Ψj#eygW "Tӛ'߈*ݕ-ף/Ǜ2݀^^ڰ țJgJN*ԛZgno#9CZO5ɣy\MѵoMxX9ǚ~`>ǠVN"ܗ&wpOcU7qvtK׸ɺ]Ldo!bwŗә˝}>hi͗$tCNjJl֗ؗb>rJϦƳj䗥ش\NF*yZ`aNx#> P,M'[L][aMGPl 0ग9&˜tndM-^qMߝl7ac3<ϑ߼a+)LO?NA axH:PK=fPA]^;i>,ldOC̱'gpiژ~5mo0rI07b@}gz͜^]/͚|nP8Zی>vZ̍geU}DY:^}u䫩.v7hè٫$ΚWk@AF]K`ԄnÚ`ot'ohϡJ`hԧz^W՚]1);ܚ׫@⚪[eyӀ9Oᬾ~NO^\_D a Ȗ!ZϦ 5 ~ ⍻d'ZLw'kY"&\$r&3C.Ew-V&`8or~2:3ľ[]vp,ÊwŨxNMPfdRַ7;d\I_xx̑/]\~wٮ*[nAu0bG7l}MZl GݾˆZr¹DOZgߔdoEY=(QձЬ[?bOXd, ࣴ||KI֗֓]#Wwy,ޗTz_?ivՃہ~ɉÖsm㿛$yl OBM웍őߜպN@gޗ @)+ʡªգ6ܦ r7>jNaĹł޴ߝވԻߺYrisWY|՟߃{fbƽuNe߮}su{ @ʽ( ߗ,䅡韇g :ݝmαyJg_HM0Z&]aa^wzZEaPҜf˒Ü{ئ%ffaӚhMZМt?mU ~cעܜenᜨ㜏ʚ蜊t-5KE$"̆^_xÀ28 [w_Q>ׇl[gfzWZ#ytp(̝T[/=>69aoA֚_OGJ~ĥ-שͿ"'WQӭn\TN`ς}czUxh#~Z3[׹mhu 8ly{䡡]&z GL}[QkE"[A_5͡7\ɭb۞րҏ`_㍷].ŝ]Vk TlP~̧͝ϝrMӝPggٝwK~dc5j9[BK95t;(zZIĦ_c"Q.QǖzᾹ`x[#=r6ހeG> "avk<(v*P-/y{PСj7f~委<,rBlLˀGNžPŞ&ƐU>XOͣб\Kvg>~e[hFtjRjry}"wWL~̎|v~[ա᧛Ԥx}gӋZlv ;+nM\J_p̲JRlrKoNZlѧO9_3ufMҞl@֞ʸE@C=九M68~wͨlJ~ҪQN'}PnPy ϨgXMR&lCKu 7$g xPV+._l~}Ғ?bpA=^v_CFaͦ,_~NtעBWH[AK[Zi oCթ'ѽ)cx߻[+ZƮ*ʰ7Zg{;M>䢴}>e ۛ$ɔʳ*}p1 ǣOմYvyl憡ȊkObܻN߽}}cβnܴ.SiTŧܩ{ޭ}ǻDdI܃ғWsa{bs玟ճŞUݣ=aʨޫߐỊ̑ݜr ߽jĖƖSO-!ކޡɺ`|K7ݥ,J憜DxM!෴_dMg8mkSM('at1w"]~oƴ:lߵgrƋg ĖNb~4MѥɨRˀWKX5NJZeQnEhƠllȠΦ[Q͠ϤѠӠZxؠ0eU'KXߠv[/xS[iqk煛o䪙©jӠNNbޯÐ<k }ږߖ:ߧՠKq9¾y_'ߜϻ\kU%E`T)La ߄ '{Žuʼn609&~N@ՈYu2ݮƧsjy]ʎ:KM䍡#9spԭTp.xmz/[>j+2¬5[ϱG>6+Nd]Ph͹$%¡šf2=[l3̓סA~ܡTvyk}hᡴ^2ZZ.p=vMΚȡV`?t:ZƄrߪ{MbT` Vo㜼)?Aj%VN=f*.ζ~E߮ 8] {iǕ }+=ҷocb{4VYcNlU aX8N*x?ƭv垲|gyńݗEW`]l1oA_åš1\[̥Pѥl֥*]٥aNۥCdaNߥv/mCMNT_M륦elh=} \o8sƇ}æ솷&x w3\]Ta7͹x2],a4[D,be8ٚpbmTbO1dg-wt˥vRNXbK%&W_AV 9j>M&[ ɦ926徨ޅЦҦԦ߈s٦ܦ5CߦtMCh6B/Deʦl|'iao~Xt $aQZ-4c֦+a#>&m;]+Co-~Q0^2"!dQ\v<;WAVk}NrH;^Lnx?=UCXhϐIF>aLwKl^UZhͭ+anf'Hȭ^R`x~bƀ˞W~XtF,o}G'ssvqg^a9y\WtO쪧ƒ҄N_]ݢ~\v[1§NԚt.Z`ʐ'FzЧ)ԧӥZMاatHܧabߧl mQΙy\~ZXGl}uN}[opN%U ʐZ\gbާtvY5#l쇈`},Rg0 29͈6o8:H]<}NUhCɢXI'gM1}ORٗ,f`nYrlؚ`qlnr,Dr%wyy }aɀ)teޅݳppO4Ak47 7a>Ǡ lʦLc@#ءxO/QSǩĨ ƨɨwy^Ψ]ň[lL\nɩb/ݨȅ[5xB8l3\먑ب`5vܩ[z۫Tӻtq :재TˇMY}c᩹y)%`|&p(Zlh-k%g3EUp7~ʐ5R=T[?B^CgJWto˜|OA}R cTWU k=ǔQ]mkBvjkN]ى!tvPlJpx[q]K_'U=-l{{ƄMN4A]2)]2N??_ZGk1nhNP?챩yr,վ[R $N}©$ɄǩbרZ˩l\ϩ$\ѩ+TZyKS۩AZ)Iu˃xrhCk~vbv#ナ` kƩ?b&ヷ\m^.hz[xٜ%(־p|-K1\n 69єt=`?dAO_xG}^KbR^^PtEX-X~[b&_ogvUf>hokGƅͨ]:t2픿o1GC}麆~5lQeM^pת~*b17^-L7jkn寧L_ ;!TѾﵪ,2=׹]٪+dže|v7dɪ+ݦ҈ѪժrTުs-l1_ڭ˫?ZfѼE+_DZl{P_Sy]MH6 N~otfPlgg[z+NaNAq[^D%a:~+$t=rb0:̮Y:rr6ge<Bd`-F-yacK֝7NgIݔ|NVJl[ʦ˟FJeلnjjXFoEwlh<qK.XZ_^+\^{'f$SoǶ&py>"$Ҥ᧫Z``4 \P\=놶Mw켫 j3pū iV_ȫʫr[{=\ѫyԫ鳘yh1ZM)mw \ ~%vꫬtɸ:J&\ԋfY1\櫟 A iդ?ZtǪǶ>+9#%-\Ң+qj%4E䜴7٦9 upR5h&DNF6CLgNWڙR\ҡbWԪ9ZK{=E_v_^mbeGLhneZUnL1}qTPIvx_ZWt|=\)Z9_ӥad` BϦhϾmzforatuhyl?~ [zL3Uϙ,VȬ>4sTd® ҬO`bQekn{qOlaSgμ}ǀV {TsUx_G{I\2`ސcN gvջΟ>ܭlu㑽"ŻD=ΛA〮5ź9jLݓ'Y5}u}H,0s{4!# %\<>IsijʊI3TꥭoYꢛ^LsaF[.ܬ杴b%Zg)ƒjꝭkxjƕ2w踴O[F=3&Y+}f ubƭEDvƐ˭ob^,cUӭn֭'7ąXRz. aW*,ôfPdiHj:ʷNغȰںƳ Ӱh6d ~hO(OOk!~HjP$@Yb P0+Ø]R6KM*^ʵ܈:Ozʴis qY +m߱&?>*bmX >掽 \|;Kͻ螽O܅7͢ŏVEqpQg9i $nirBfu~hݰ-uqXAy]MaF`ԮXc4mfZ羰 įmoDLѰƺ"ݺ&YTxaovڀywm_yb=ωWU8!?Jc<^H#U-7Y`ny>6 lmÙXbt%f@ChELt a SKWS)pvEI_wzjkzmpsKu 8Nlm`Sgüv˯ ll [66ΠN_iݿh<>쪯ݶ齇jzjC ޞ帯ݶөwe9~PM¯w!gB|Ek}~ЯUӯ կ\دwگNܯn~Y䯝[ⰬSB =\+枧\4ztXw#[`wkHcjvHrM\V;dޢZ!k)&*׋;˚2}Z3Z=R@AB[E dGgeeJTM/%PKRTmX~^LbIze^H*]jsPlwxyui%N{}?]woaoe~y[RкeJ}Ē.Ωo\6wâC͍at P亴[貰VWqωɞN?umOvs>70:dΉӮ[gH|K!B㫳lJ(aT`谿þS㣼({ի4qK:uw׬l_BĢ3 D>x$5#fɱ˱TVWX汾izs@{yl$~Y3j"ze)ƮFXߓ147d1>o3Q [Y_ad&ILjһmŰ=3bYf3Nz߶W7 9mߩ-Jwf$hP}u㵊P'σZdϼ4E#%][Eͺİ(Ϣb;f詭[JOTαqSrDztfȿɭ~̭ϭ ]ҭ`v׭ݭS[ı&YH vRNOM_@EOZ uH@Ijİ\mO>L7NO<Գ, `OHjN 'P %'aI-ޝaOCNS(H.N]9_Oy9Y꼻:5pue h -†UϺrtf{ě*"~ed"ޅ-F+suڰI(݌uWoR1I{&;_à U%@np j_kLZn]O7BvNL_ztnw5?b"qg. }]m3a|"&!q1h%r8} ~JHů̢yNY/hTqwiw5d'hno-/1XZt%t8@\|Z=]Ѡʯm^H彞KcQ뼄VҸW_b<^h#jm"om(q"S`KǯɯwlzL|ү_ߞׯ7h_ۯz⯾_idnhSw1EzaΨga#ԡԪ?tqpKsK6ﯳb@[ ?]TOw#VZ'D`QT0oOrߞ[pO?\<Hf`N=dQUoG#w&g+w+TZfga`uhn4 vvy=|bbnjt"$oj_xi*-, '՗Øͧ:gd=?\A~}E+z-KŰ<VMPk)^uEΫT8gtM?ʬ%sFH豲Yrco` 3Nk C%s`ml wY &CU=|c){] +>41Tf++'sXZU\@^CG€ ,l/m s.YY]a{<')l.00H4C胜2BͽJ^=b|pgn2}ko)ݴf`հ"NAl9e`՛՚kMwM}MMCML^{|MMMMMM5(Nܲ ZZYZIJi\oOdOkP(պV6g,^fKn/K) P()NON)r0Su<QnzOWOzfXP2 _ RgmֈHdz'e s#RP6)Ps߳z^ߟ+&P*Lf,91O4(/t:cm9t;; ? #F`HgN.!R YWVs{_K^#zY6*B䋊/?25߽Om OdQOՕ_eF@s {P P #`[Nh-ONZôƴhɴ&v8:̴qϴD[po״ ۴>lߴֈQEឫ$Zr[]ﴵZZ= Y#ѾZɢvn˘ jATm`>8rѨ4+y ["|'e`Rz+|-{i5w7[:[73M9?Y[] Fy_\[MeK?GzUXp}ZUxf[%ad75Ģ3ۙ[lnxqe5[XktJ{cU5[=\v kh4ʉ* ][S~FhNჼo˹㜨DlWtlꮵb벵*\ xyE9\םyMؓŵNNɵ}jεjе(ԵAԌgi\dkwnrKڟݫ&\&x]}ނPa\ Zw[]I&\kԜ\n\!pv\ cǃ[\]\PzrXJ]j"b=g( |*.\}[]Y]`1\8J9;]^#]A|ռ\E0]r~3]J7]h'9SUgtM]Y\V]M_u[C}擖y}Bk_֩nnr]t]x]t{]wҒxz!bDbkt]]Ͷf̾{咶2琉L^o&T\n@ŏyDox]^\]kNQ`3[(xi]L^^\7وoöݘŶ^Ƕt[͐yQ~B3/^5նGlhͨ@zW^g;2Kb=Dlutw ^Ѥ_gsңt \`^磀"Ҕ^ \Vե ^)jLPs ^C1W`3ň$L^8^n;=L^]h6R`QNkHntnMÚP_qn fO`y[~L~vhyƺfhl;_[Vl,sQwt$62ٜz ][XtIH_r뉷^hf͏ x(x_N_ҜnrS҇꠷)㙂ѡ_󈧷}UG\]#klF_2]wۢy__y_N4ɷjU`ͷN_]`ѷNӷyշ*ɉ`ٷNUtcU>w"$Q^Q`}q[v `L,wPԼ(xǙ5Q]E` [v[N`+[1vqXkȹ+O_ Q$kie'x*?0`k6`➽a*`?_AC```Mb P$Thz#a\~t^VZkdmV4i'``u$tl׵` }{jY<Г܁~jG̓ni׌dNY .:•!_0alYK` >a+Ha}=FϽ\ӈVap4K^a$ `ats`6_ĸeƸqaW]<ʐI?sԸɈ|hظ_ao'O丠a)ΜmGrA'цa=VoaraeUaMT\w~sNGzؖvN&_+!#1]b_3%~Zb:ycrV쪜AйLҹչcٹ@o&՞zy41MadJ^1MOɦ|1MQHj_Bś6Te (E:˺xJg~ʷ8.eB[V5esݒ7@:cૡݶyPhe{b1Gqe^cૡees,OM^%g=л_em`%ӣૡI/N24]Zщ#4-Fy!KeUPr&kVpli[ f(u˾_>:gZiWD,D"W.ܦ=3Jir|;0;n9WfW4H[E%FK ӻ]{(h{x4RW1&3ss *j,վa1d3gmd{jq|:1MJ^1MR2IEJ^1MQW޾^xJg~E:JjK8?=ְ.eBtgD{glÔ^MP˗Ug[gPekgf%kMnlprgzPv2gϼ^gU}>Ig͎|똏g풼2g"giӧZ(o$ ţૼ޼4|XtZٴ8Z)4h Q:hEǯ@h{Ǽ=ɼKh̼jg|0㸤wc1\ݼJ[ϑx `zhOfObt Կ˜h_h[Pm:7L1MqqtԞhJh~hJ'Th+]\hvFπN2Դ8Z)i\Y@IrEGIT_lMM䌼Q`S¹Vɜ3n/Ռ k 4x$cA0j69XĽ[E%FK ӻi(ηiLT[W1&3ss *j,վa1d3gȽ~h,G9p1MyN_e1Mམɦ|1MQ~hqTR18ޓu:݈q_BѺ֯JinPrfjEKnjpjprv~mжњÌCӗjLpWc%@JBEtllYM+rQ =nU?cPejajUyhNkxm}w<\ILpkQg^zkE懹m`5 "kJI, `\N0 1Mqq@>ƍRkUk=پoP˾PFҲkeЬ1Mqqk4Ԙƾ@kgݎkn{jԾ >پ?yki!`XkK Nk\kұҲkeЬ1Mqqk9kƾ  k^zkqh+oƾWt=L"b3YB]/v'\'l9=6>6l\{C=lF@lMJGlwNPfRUYlDXpp`lbl]afl{biplfOlZ!#0ltp|zZ0ӄ?se\ILp6tl<\ILpJFoP}|fOڶ Ul t||ÿmſJ/hȿUʿzοmӿ__͉zڿX`+mfOܦ=+PQiP2W4H[E%FK ӻfTR(ηiTRyT[W1&3ss *j,վa1d3gdW9p1MdLdJ^1MZW諳W9G|1MfꄟÀWXc ưu:w㑾LnʷgqnpSknTRyn=1T dèDpB4+oFӸMngng[7nnnYN[t)a_ŭ~_bWfeőӸ]mŁo0[qŅ^tttwtxkШׂfOꆈŨnu/]D"W.-rΩ3Ji 0//{w@K.u; iW4H[E%FK ӻau|,Qlu|#T[W1&3ss *j,վa1d3gz7J9J^1Mz ֮tW諳 IE6WJgOzK%ƀRwZjOEy\]tm;vo-a;1>ƖDk|vymMvRa0vL3vYxxx_@vQp[zgƮ} [YLJ\Q/v[k|ư~ȁfOsYhN]hcya%_]frӕƋvZƴƆƣzƥҥƠvu$vJƱ]bƸūoƼvhlvOvxyhyƾvvvUUxƮLvƕOZ|^ǥxawJ+N|-6wcƬ~;]+w [㶲\+w 8B=Ƕo:wS~fIGwWD`s*ǮaRwG\m_ǫyqU[L͋ftBNjxlFIp'ؤPǼSNJwUǍwXǜwJ]ǹw_Gw>PEGqIztBpOwy\{LjJTǯw_'wljwpbn]ҋ|ebǽn,)wydwގW`ʷy}ǬZ-zǭx\У!3ëZ GJ+x/xdz\\=xvǼ]niUȢIxyLϿMkMUx+2=39xy\\A\]ld vxfU ZN^x[]#rxjDې{'[z*~,O.Å0ȗ*]ƭ9:ȼx=x@|xgׅ̹x?QȍP/xvZ_ș}cxe[khJlkryvoyfOsYvȟ`b{ȅx}yYQȁy̦~ߥv>X4y \T8cU=ys?y&Qȡn?t`yƅx`\=ŮȒȦK^yȶ`n~faS~tyXK&@}|_~y>(yycqȕ纞yꁬlenIWyGȞyvyl_ɋ;b]Ǜ|פ~P mhW٫ytny,죶y~DƜ`wW ɗ#ۡ&L^yZ,].ɰ08z246 zN;ɋnrozBz}F?_HɊlJyNNr&z\vSwUwKfұyYع@Zu|B`LT^nrj_lKzƙ_u/Ny\z|yk-b{8n|ɋy1\p[ɌZzzAɡ|zNɝɭ8vzOK$%MFt|k㷑Z|lhjg|Y|Qɑ\-έePw|jK˔|Zb|.||‰||v.|_La%S' dfå|Y|ό[2˽|rw~|;ќ}?V~Cjo[IȕK^A\^OqR|cXZk]2|_}au˾d+g }Fy!\}~}d}#iu˾wyU/2e$}WQi˽д}#ˌX `}o˻}_!ls} zЋ͌^yV|x0{̴}tg}&f9vbW_!s$$c~ٚK*a|˲/Ai|7̒~Gy*Ձ$~AXK'~a]*~.~ xO̡oSGVc:Z\^\PL~b ء ls$;vc~ЊJ}i~Vptzw+yYA`!̈́JȆoˎ*oxh̝~~>̦͝~&̮a{ƔN[2kο~0 2j4ιᓹJiڤmz̖̉\J~ʚ?~~~~ϞyIAbO2b~l~xT~}̮;8rο~bg02|瑛H/ly YVσOl#kHJpSpA`!M^#e"2[+r \.̓}b4 ZR͇=͔tf7H͚J1́3QTͫoph[_͍`a͔lZVl9OL Tf}͘d@aRɼ6S[\B͒7\slǚ@ llNͬ셺}_͇~7\>͹xypzt~)l,/-oyS~fii|Ik[:havG/Ai|eJJSJgIKqͫ~͔̈́*N΄VD5 y\]`fw٫cHb娀zrJ }"ΐdz_]s6h뿀E€췺gɀ"˝1р޵؀C{9DS= ݙ@qCL糊=u{IE6xΉ%nL|c\UgϘiLmϒb_^asϴ^uϊa[x{ϣ~Gϳ\U~PϜgϗy+ZϞϭњʭ00^=Bϥχ>ӢѪV;t¹y8hhОjv^OqłQlςϜ]Nl}ϥ(vїn{Z?A0mxb|ãB4PYτQAlq㸂м pPҲGOU0 2j4ιA_м$Fk( @`$L&ДdCOi7. ~0Pl2}6b؄#( @TBDмwGXOZJiݐrTЌWYI\Ъ[_GOSe2j4ιkЭqbC}~:$пъȃѪOlՃ{ك܃stmo@vUP^ aӢZ`1w5]|M\5_jAѝiEѤ3_"XlXb ()ln9z_NoӪynơq@ķw@aFBn-5N=\V1wщv_jAѝiEѤ3j~5|xВKjшх"_w܊lM롦DnѤԂ#m%ѨZ{~2_g0ѣGN[9g=Ѯ?seAѝiEѤ3GѦ:GNPl<] Y[Vэ9K…^Ӡ^K`څcweW든:jѨ"o ZcԹyo{IzqlԀKuy\K(}[*A0WymUīlәч1_ПщB4NRUIP\Z[ؚі95ξZh;QD+&]еҀj¦$>vѼ-tϜџxҾ礅OKGٴ\pQ|gэw}ySۂuxkҲGO7D5gFoҷwz_!`嶗t$ҊM'F*-*y2Үay7Z9^];#@?AOFҎg.ШMMԙk/U|WY,l[K^l`;Ff9ښAkORTsegv$Fkz|%ңFkmq~\]!<ᘿЙt{MVZGO7D5Y@<}$ZU `\ҧ a7D5J}_Æ uɆXˆ҆*҆ՆeEBۆi.G-fOvұLjozܡq7P҃r` ] e>nB Qh@j|%(&wݥPҺ3Ft%g*Ӎ,Ӟ.C0浔[-U4#k7PҺ+\>>r|ÌCFӸMHEJgYNglP2y VsaYz5a\_ӕibxlӇi.kwz9p͐rGtә-y|`~7P҃LOyeӄaӔlӷg]Vb~Mk<Ɨv,/\`͇_EPlԇӇՇ؇.G-fO⇡oy54qQy|[~Ӗ[_55RюC,[wRy.\}3``ߢ8&toM]xdyoӚZD8tfC4=hlGЏԅ}P S &)_bl%}=!љqZktcv|xq+Ԓo~2ԅ4&JZKԔ@4փ}놋`ցDƌ ߕڙیܔLܡֺ٦K^yָd_صƋ1Kֻaw)ې_ڋ>vsH֟Md֓=ւ( ֟^`-_L!faE+ q`2M{ۿוAmt٭۪i'35`Y%oz)M+g).k]{ptόs|?׀hjg^Cח[E׫ĒWnןmW;K\ס aצuNh[h/k׃ۜMuVZ0r1鋥\w~y%A}8uCك't^a振׃Z׬b@סJbTR)ܗ-ELפס׸ׂ("nR0276 ׬@ּZ|xLlTLׅH^_8c)dL SLq`HםM~c׌$ ؓ ؗ ؙRR "p됦` ,>&s(,pˡKy-.ǍVZ357؂NЍҍ=Ѝ׍BڍEߍXkI>M~O۞T{WY|ݘ'dhش j}Sn؁W,tؐ{KxjR|ظ(ʍ*j,Lq`L/Z?/ٕ֒I؜g&y ǹb.P_j K}0ωQv{BPQnڈP3vZ-lOc@An)ܸ]L>P%ۗ_cehH& vp.G[d\ۗK< c^B_"s#&3rn) s.G[1Qj447۬9ۀ\ ?۸BۛKc۴En0LʑOhϑ Uԑg^Xؑ[.ۑ^ߑaۼeB|ظHBU,r5 hwpXM~۔`5ځ _Ђ}Nۏԑ`x %0&otnېܘE#4_ڞІפסޒ/%_Kn^HlUTB`۞dۻۊc_)ܢ SƎO|z 8=s]ۮYgbܿPAҏvۑp{}ۛ.ۦtۑ^CۯM d~ܦK<۾’Ē fܣܑpϒeUNܮ`Ԓaו"_ޒ"%-{L)ܸ+zӟ2܄xN5;ܑ_gϿMkA]a FH0ωK'M̒v4w^TvR"م]ܳ,AsH02ei)dLhjXKl@]Np.Grt܂TiW4H[E%FK ӻf4QHY4RW1&3ss *j,վa1d3g ,G9p1Msݼ@qCL糊=c%݈qIE6v߸0J@Zg?XP4JZv`jVDbSsUd T[IQaݎޗvhݐ}w\>?Pzwuzݖs| `êì þ݉ݸݥZtq`OqݛVQߴkݸZߤUG_ܔTᔴ,y픾?b0qMZ2jTdMƠԾVyݝgp݁Z\Q(zr~#vc8F|:޴-R6^cjOCސEޅ}G#~ݵڿM 'QV޸[[>*^[aދqgfmNW.ܦ^'=)5X;A0j69XĽ[E%FK ӻfOηi޾&3ss *j,վa1d3u|:1MpʴJ^1MվIEJ^1M޵x E Ey%mޢ;vhkADGQIcOOOTxcjKG_idVZOk+rsߐ{vvisTUvG}TNY'߄߷+ߑOl4L=\Ǘ:-|?POcD$Zߧ4Zpx4ML0[N߳oPߕR&+ܦJi $$`JA0j69XĽ[E%FK ӻfI')ηiI*&3ss *j,վa1d3gn9p1Mswya1MȊJ]xkJ^1MQylf-0[D+MFྗcJYT[MKƗvqpTVϗbYT[*_oݗegyio+Þ07P&t[ЊY鎚Z}Y}siò r16ⴝcࢗbৗt0+Oq[8bZӃylzǴǾ$NY0[YB~rR^7;]mps1љ൚F5wPOl@MȆ]ᣘJamᯘ5 #iक़oHi@Y >͘$᫦QҘ<ᘿ˾l[w/ᥘ+7g9ᣠ_)x򘾈;G\KmNPG~!kiU٫ " [5v}ЯTmkŨ! `/qo᳇UlrXtxv|:I;T6*Nn?ⴔ7L1Mqq]Aa b(} klLS[QUgvӊyҴ{f_lLጙ`AT7L1Muյn_TWᮙn W`"_a^Ǚ<]ᨶ%nhvzt\ܙt\ ]r~`y+mb_Mⴝ#r%bUl*q.QA\16ⴝ\5c>:Q@+C0EHj>L@m*J㷚 &oW\1~SrO5q/P_1"J޸Ϧ8(r4+-BU/F1e4㒦77L9U=_W>[c:C-al>_gMyPsySUⱀ[;]Z`eqhUukY1Mswya1MȊJ]xkJ^1MQylfaLockeBg乜_khKb |q䒹uʜav̜yϜʹќ}՜Sݜa@bљMG:~qҽteҝeuor0[Ǩ^] \Ldwݿ=0H awf3Y\cH)i4cx%_$lx%Hvc&tU,1fZ9^rc䵜gSw$Þldy~lfw * r哝ю lھo}d] lZgg )D-"|2t&m5X^ka9q=n?_AC2FcLIڞaKMޝ T\q]`hbevg{/~nكgks/wu}ySrݸ/i a#]jc)x,̔חwO|֡=?A FxVĞ TL!d`mcggZi;5gǂKxN|hy0 1Mu}L)R/$+{F->=/̱W4H[E%FK ӻf|蓡t& ,&3ss *j,վa1d3gHjq|:1M`#r8t1M0YIEJ^1MQd脭bDaiYcRs9\]M|蓡t&ʂ`t5䢡Сѡj跦Ȳ:ѯg褅&mhg1}v*wѡj跦?|Uv0Mk9Ni`hTp7hvt_se,[1CVqZKL_flbԉ}&W(Pme&W ء QZ9.RN@wq3ءwto7NC`_Wq$[(P_|Kae"/[eUAYq;Ɔn`!wCﶶ>аzPJZU S黩`ew[|ST뺞D`O,p. ,OyavZ0F^o'Z'>) ߜ$$ TfA0j69XĽ[E%FK ӻ0g2QHdwK*&3ss *j,վa1d3gbukY1MʣN_e1MȊIEJ^1MQYR\᣻śc C E?~ybwKZ#fb$VNUg.ⵣ^`ลZk(yz\w]6 ?TU􅧅B#Կ<4ir bg`$_L'ŤpqK˾Τ3^57֤:>dDݤ߸⨦yt~~ݜtQsTL Ny︤Зŧco k@npqT~yyvN_!Dh}\l)~,| _L3Zl`N;n?aaNxNCEϘHƝ|L{&xR(TfMsSꚬSw,w묖(~Ilv#U>ΰT_%Zetv Ƿ돥|!>HǍgc^1uԯ[%ᮥa_yԭ͋P!т*b¥˦Y}˥Υph;lإTS|V|evyK=r%ŊZP~d0!0N?uA DSGT"|ԯۦmݦZꨦ N95tM ?b =gXZgXZ|"}%|(*U,2̧/:335-7g=]MH5ChQAZP\\cG֝IL<>BWAZP\\cNZd_actfhtj;lGơ9tU􅧻oż}G_.tneN#iUtU#kik9:Uy:g_\Q˧'VlڧxVo2Rk9$qؗ Q?VgQ{t':HZuy\,`տedtVɗ~ lq&溞\P `/C144ϥR7%e;@R 9mwk^J ኪTq,w\/aTp\^bo|@{N*zEslʬ/ \ҹU23y_cfPl+ăr Zvɀ"qcٟZl^P$1a+wKP~N2h\`6Oϧ䥚Oz=Ԟ cȲgDuHwKK@Ō~Ԑ« aaO衞!'$7h pP25`˿ ̅oֵNQ^&[Vp|lGdglIhoqOxlxoT[~|][~"o֪}['(xMr[cx?se[~ҢX]#-}O!$w(4*NĪhy/eЬ1MqqԪ%>xݪeBgeGg%{W|oPgSv5&|[[]M]bVŧgSj.lnٞ}[r[t/'Wz$&~*醫4`j/+:’X>3^ >LHH吪|txEy\羈`h_cM&@j[~qتsOeڄZxn뫸UT ko׃Zmdwemxnz-(-تCz`(aw?)h |tۘӿ_pO)?ӫ֫%^JS$fZ( *˚._1+L4x7oϼ}Y@h^cz_D);ʇCOR@Uv~X[J]p|& )xiT{/trx,lдi+Ln<>gk۫_{By~1}O5=\U~\pnu顭i;P vJ{=t]ahұ)S^nz_oIPˏ۫sٻ su]RW1&3ss *j,վa1d3g4zy41Mv_e1MȊO`Φ|1MQƖúĝXKYarէgLOu]JZ;χpru~o`g~vGEp" +jģw:,:ϰW?=;'eLVZORTR1E.\]MRwh]jO᳛W.ٱ+Ji  $u6PiW4H[E%FK ӻf~(ηi~\&3ss *j,վa1d3g6ON9p1MN_e1Mvyqߴ1MQs]qb]Ѻe-npRSty./qZ%_xÈb|юbM2󤰗]7>h DF2.,h #fOk+loy0q24\{D+;&@3z0 JbNvXZk*a̢cf$(pnįt vآyί{N S|KҪ]MU D&Y(i*o.kӠљSO69Aԫ6]B|Ev Jڄ=_AUUxw \pV8%NFi_14N8j_VxKoPrtfhvvxz\mebxHgI&Pr ڄ A[љgHM&Κ>.UJ困.pp02SO47lU+HȔsC|űbD" :=<j*d9p1MN_e1Mvyqߴ1MQs]qb]W.ܦMCJi7sA0j  & amA0\Lf M.wj!l Du NmR DN 0 H#l AeoJl <>:r%9U0r5?dyn=.Fye05%m%k;EKK1zn-e4H6#Ff5VB,29O?'XF)yrBbFnx@jABi("r]H=<1k|4ZJ*+MM  j R5|<L'6=#Oo5Fk-#;X8B B  BxB}  \LZpqC!l Du NwoD,`J0 H# AeoJ 5 <Z'F !9 zj%DK >0(XTL-#p,bKC$' ^&LE*PXk Mt %Cs.tK3K  PvLeK*_PKNh]}pʐ7Po=ZxO\!U[xO]qMZP2c}9R6Ebr;nN\ӏKPL65+{.>PvLeK*_PKNh]}pʐ7PA[=ZxO\!Ul [xO]qMZP9_/' ak fzN\ӏKPGOdJO۳ghPvLeK*_PKNh]}pʐ7PA[=ZpxO5ߋ[)ʘxdon+Uu{xO5o/`9"{Twߨ}[bmNoLMeZ]miLMoӲZbxoNfnPC}+U+A[QxOLq LAN)[xO&LeMM#Kl\PCvj;wq&0[v;㊪KdM{MrKdMA[=Z)jLrxO5gMK&LeMM#Kl\PCvj;)jLr[xO&LeMM#El\P1m;j=Z)jLGe[xO&LeMMP Kl\P0_;j=Z)jLG[xO&LeMMP]yQ$Lj=Z)jLl [xO&LeMMPKl\P];j=Z)jLrË[xO&LeMM#vKl\P;j=Z)jLGjxO5gMK&LeMMPjKl\POa;j=Z)jLGjBxO5gMK&LeMMPjKl\#;Lj=Z)jL[xO&LeMMP|~Kl\Pbb;j=Z)jL BxO5gMK&LeMMP|~Kl\Pva;j=Z)jLrBxO5gMK&LeMM#Kl\P6=o;jpxO5ߡ___fnqerOon+Uu{xO5ߘn]ٜYa\jk#fnLMd}q+Uua}/+xO)Lq LAN)[xO&LeMM#El\P1m;wq&0[v;㊪KdM{MrOKdMA[Nn]O dZ_/qkxO5ߘhp(ЋKdMSq LANmKdM%wpzKdЋUdM|UdM4hxO5ߡ_]WLhy|y^-en)_[pZKK7@MKxO+ixOy.ZKRK]=|Ջ&LPLpmM(S$CMLz)tYuLDoMz) 9LX@Z][k\i|z_eqKhfLwoMz)`>[kc]ifKxOX@Z]_-Tx`zKhfLwoMz)`[4wXG ]ifKxOX@Z]'fz_eP MtYuLDoMz)`[$NjN]ifKxOX@Z][k\kց_er' MtYuLDoMz)`>[k]ifKp9My.ZKKp+i)rKpqKP[Pt:ML}YfNy.ZKRK]=|Ջ&LPLpmM(S$CMLz)tYuLDoMz) 9LX@Z][k\i|z_eqKhfLwoMz)`>[kc]ifKxOX@Z]_-Tx`zKhfLwoMz)`[4wXG ]ifKxOX>C-)\+bv!l Du rmRD i` i H0a\Ȑ Aŋ3jȱǏ@C #˄!C$4tؔi (RasL6a%2S7-q 'uڈ)#đ2n+4b#˘3ۢQR]bސB̙1oؔ!bÈE# 1b;l?.lg 2;г -$ H)bpr8S' 2.HD]9^{EyM02s ^ j*_9ܹ(hISie>yk"!{B0KDQT_tIDCDR@z{r Zt) Vف@pUoXFV[uuXbUcpdKozmTW31eR*A \%aؑuFc\Go#G ܌*NN RW7V?A#}dR1eF XLiFY2jj w¡fY*r?i jƚ)rYapgJ)JFہ meTgW*%rGWtLaYVfb]}[rɆRgkY:ۤOX/ KSqW aעCn&Zk*h)Z~~9DEbcgsAJHCҎh(B5>HtV$/p.ǥ.̑.Y aL~n\o8pgS1I<D2P$05Ӂ4t:O,h1LIt8܎ioAd`yk)>k ʪ}qk43Zͳӭ =2a&ArȽ߫EKcְ"eg,"^^8LFJ| iMwLH,ԫ֧38n=BVӞ1:J1n) 5/>,ZDHa 6 DP.4]5Và` e@F( FU,Q_b&b&+E.ơeB.J]y'4SWSh*BΐW݁Z)SI1P a#H+\Aj2YoMZ b`< p3mA#QNsC 2a+n1Heu<B oʖy[@\+1Y@doQdGac V#6> _TA;a)ӚRnjFؤAS|ATknGiwH<葫;CkpM UG$+ym5 `qٲ^JQV c/s2>!YœM? \CP߄(gAݩ^w֍[v Ģ:t3pű ֤*}˒"Ky w AȐ/T"a}f QW:O,x=;xI=\&1 /1)q4jx(1O bW gtcPK.:P{E|Γ1d[4)$ ez>vx1 (w]Aw.w4&3#"#w%f0 $E%Fl8sL1@gu_z%Bc=?CFA_Ca҄$Ar02Xq v3Zrt6@X a5ZpX5"zzxL5l7)k1,raa 0MrTU43r7)9xP7#G}pFGAQ`Kh~"m`3i$86)L0G*%Ja;@sD/rLfs.["e1K*ŸZ%'(f*k.2s%I8xd}HA"s(ȁB-d.v)MxE0Fjcc1a}1x@##_s}vkCC6f$vZp1A_f_>ydHsJlEx=";%=XK(B8 00*QhKIp3(룈*8hHVdPLdR35kys2Ema_PQ 5=9Ŗl9sj7n;wvG4"e-(lNsp"!5Tc5R#Vq55ag<@dc?"J^~ejFqW ZYvrf ;Cr`G;0A ZU60JtʪB2)H+Jv.Qxa+˖`ƍA+ }QsU}YGSce'_u}QgrB&?AlBAg(꧌(&(Zu]*_щNbB\A.(٧3@3I+hQ=.{+6G9sd<3ӱ$ k$L61YR7nS&Dea0= ?b*Hg0SX31 PHo,v*%vi۲HXE1;,: 8T[5B'Vn$j`Y"X[u050q2E4u'+Čaq|a϶'N{-);zRrHK{ٷC$*BqbD7Ck2+1[3ok%fGs2aa=_c@p;"WZ+TzV8(+XZY6Y e8+'?Ĩ3kx@'s$vn 7q i0 9҂s1S;>x6kA ;[AE!aX,WV,Wd`n:)21e.ZUxWx$^!+<2A6:SA1tKO{JA*gFqUw|!r_!a Zq#PSv '9Y;==>Or^1է/*z~T'NP)tЍPm" qNRySLCL 0<5d.RZL  μ=rjU¡l&/Dc"/C1;mLq,M*4 D,. h)e i.x1~(+glR+Wd22v@ڭЃ!֤6kl2})>1*"^WC9GYHr0 ex3y.CX2xy+8CHHRddhˌQZK dS`(pOfau2g/*i%χ:,%(Xw4TU55׾U4j3@0] 7GT0D =;^'aF:nb(aBh<)C Ast2Ra>[;>y1Y02dŮ(#)\@L P3Gt!(!@SX6f@0ci-;%%CgէFtyT@ߵFt(8/:T J}I^@ - ؐ0 CO\ xEe .NB?! 0x D&@ a_<0lj߉JcA Nf+uup@a NVY$ÑVԢ@. 1Hc̈AWY9].D9^Q0HYPڡx°FE}eDL ZjE3l_0YXh~ &;L<W`;Ugt#g /xdY^ ( &_ e R1^Sfؔ.d". p_CC /X|*ba݁_ @"!B!%Xf> ^(%{g(uej3^j•4LY-! 'rO'>EWLa1/QD{T)U ؿI$`P] 1 W X#xԁDc$"*F0p@Y Q%Tb$ VC=X|,f102Cp!j(sZP9 -$Rl.gh6 װQ8%d0Ġ[zBS"Pv3)HʉjNZ e2̐r>B ņPwG Y1 !_M1џˎ|1 @J)8I^(=]9i#Erf$BiATNJJC%vYdl(d fT@yR&oEȗI!\LETDJrFJwTaJIRw 䱻Z㿲x"SD}1' +M0  gcĀ_Mݩ+ꗧč .P&{yQG *͠PP~57&4r0~l):hhPUI8d=q0Oy(?BC$pD{@LsFSB *B U!2T-ztRQ*^=\Eg鱳NJjό1Ȋ!^#e_SUɉO]T1r*Y-P{IO/{$v2bӳcL2\+dt^ N,=Q#܁B󝾀 (OfMBnPUG A#t2zڐ&87iPc)T$u<8Se[tcZ~ аƹ-"5QH,Z"<؇GPETZm5щHJV =@Q14׾3:m>S89O- :VQ PI@ 3Y%䬤гjHS)YaDѬxV'\NŞ,SM { uPX9`g' Lj|tuS0A=ՠk;6'Jp& ~bDmu`RKY ꁝ/Y3\ Ctu5Mٶ+`Ψ:Sgj!vn-Ͼ[Zcnz͹e5D+U:Ynh 5&XZD-5fcK(sƺY&nw;kMY;PoM>76`sm5ؔۙ on a0vO2MZZ=Ls;\7Q۝5zVY`X NgHtqvf7°ųADtuӁplUChVMeciKmwa <ںCKVڊVjloּk u.7ȹhhyV25PiEzm[ium \[`+qZ]-ڋeh 2pI^bn&.7}o7@:wzCi8DjO3 7tq(X8g ܆q ܫKvˮ$@ m=x  we( Y x>x@ K`Np `}:p @|"`*QF"Pz܁m@܀/  0#p34@ T\` 0A8@ $$ 5XR ((РtP =8*TfA`%0 ր@ep@+@S 6`* K ^jA hED :X@8- A;(O 7 <@*x٠Z` =00BA*x @?* @0x H^A` |_HLHRED%*i ]@ \@'H C @A($`l& $U@Ԃ1@ "Jȁj"@vA# PVA7n l(8 ̃Lʀ5%z XnP^,`SHP 25 ]p 10;|c0 PXR -A7n`V$Ġ `@${~#r`?p>@&V@6`^9J|T A?` @;&xo䝼fy?oz_o읽{o&|of}o~oo'܀pg ܁?p%܂_p 5܃pE'%܄pU g-܅pe 5܆pu=܇p ą'E܈q$ĕgM܉?q(ťU܊_ ų\{/ød3Ӹ_l@7xsq;~x{q?y 䃜rC~y"W䋜7rG!y$䓜WrK~1y&䛜wrOAy(壜rS~Qy*Wo}7s~b"ئt}soH>'@uᴡYWl] pa7IME\]?ݹ-.0@ 6.Q uW`)P@rx(<Z 8<*1m 4q (Hj@1hlwX =`jX`X%X/ Ԁ4 X@+H@l. Z/@,,080L- 0  'O4. 7`܂fr8̂20 $`b! `"\yΆ dh``$8PB)@_` 0,{h(Pl@| LQ0A;@ƀX )R h 4 5@ X h0 h=uR@@Tp@+p5XeZ4 ]@.cA h` ^@,  D& XA( pDR%(:j, `I h; w xadyOB(P &(0@4`1 YRG&7;Fi|8༓ujpD@u ;MB?#8{B /5q?g>OC`P)8VB9$_r/ɥ_ 0\àh( \.\w ͝Ԑ\_Jmq\ƛ8"hbQ['8@mtl.%gx|/e2جJabm,u ڦ1eC_NVø8!5u[<)ҥ@g?z%&C:x鱅~"ǃB5]ӡ V! L6Jg'%༎.]:ݹuSzWzR1o湕b'Lw.9PNg ܝWM@7y#:a"#!P3Z㫓tJzwxݺ IW'&[ 豳[= EPBz}j% )@ZF"2! bS # $8B\e]S~#Q悑 xţ 4)T&[>Upo"uNG/:{n)%.wBο OD&3INB=HZ#Uͪ[.ɥ] zp0c4FM +՛tb {ϒy#PPq0%H8h@Zɋ!%Z!m_t!AjPNG+JL8޴QL~ND0ISZ kWG*)G^C#vj#[!>_DҧHAE0Ԏ  (.Zqtsٲ)h)nA-35U8}X#,;OQ CP#VfQcjtx`@ `_q@'w:I2Ad PaROJS <ڽYf *%TPyȞ+nu0f0IAV}[Ӿg}mET]1!ǭb ?`` $݃|NӍ|tJ7LE/e@Ȍ;9-&|", }8)YxKx"%jhJrɦ.@&xWY$_Dhf\`[|| = Ui$cw)[G%CN卅0N9\tD?\pl7qG` a>`}="C]hgA Pʉ{b:ahٓ{. Q ;_k*ࠪT= GsY@#YW}6C?F|E_^5&?J_A tFWkUF#x"r*}3_"e{7-B6\GǖTtIw!2%q,*Zwؑ 1}D>족4T_"$ `w Z@ ~K{_Q"4Pt< ^'{2wDKMw-vA CLtvPB~D@7)?_fDgRbT=7*wWw~`qv ` `e ͞*}3M3#3:-Qw G >]_ʗg$vzaUxWw`g4#S@Rw+[x?VpU ^U%aUfa=H 6faI#j@ F8 #2 ] 'x!Ҡ( @ { Ch? X^6 jf`2h؍|2F j̀e185_$X8q`4?KXk>E {FO>JX}Op*0ʐ5AP3K@@|N`e }*0 /RIl OA \`$P VxټERL^,ĔaLx~'r-!zxp0R>!GA'aa S*~8 <X)X 7a;'g^rZ<3®| }~ ?Xv Y` !?x‚ wC!yt'Bq z!_wQ*w!Do=3(wHgM |. NjO<{$ꀗCo~}ٟ (*d[cT yzitrztrc.wC n@|X) :D"=*"E(𡇍wua]bs`I|&:d[!%}T"~44| DbJW & g/YM(! "j|'WX)*Z-S b^Wj,:QXx( ,BbF`"H xA%O2(S%$h,\ va+?|EcRԗzQ"͵(~F?^1`b4)o+E*+SxrLjN3sͬ[N6۔6Q8sXYM묋s p3ϰ!`>s3eVąf3j\ԍo5\ݐ\֞ϕ7V%k oNnh1s%<\UrmTcqFW,s \cxsFjs(k\Wj=0cfrBgn6VtoPNe(Ћ.^Y=G/vY=/YMh7#gc0?c16#tp4h㴵1*xm(Ԍ&#t36ݸ2z4Z*7\58Zvkh fMZ"ޜq>g ]mwWm5qNWmRy\8~\G8+ {j SC^BsݵvCȥz;[?nYMp /f[c#Ji\X7[x#8 [ <x79 WE8VC xj!`i $#r%dhc/ZX׀2 U۬[nqKj3o9'B#+kΉsĨ_B95$;#&:7#!<6@etqL2 `%;w;r(Ւ$;Kp&%w=fң^K1=8v+=J9\#ˉY-W>v9h樏e9>s3֑cHO:PmE:_AZ75OisbK6ؓM4H\pPc(t,]ڃW;͕` B Zぅ'TȧݮG&*$1x vx>㡉4^ yN1(  k6tzgzF3z[ׅ}Qh.rRε(dW$̘!|%_~*]Ef necMJ -ti.C&#F| y~ y9I&|RlHeǧ&`Sj#elgfY"y9h$fux%ku{` `&m8zԭu%W2(W)>bȁbXHfqm"\HG"1,X#layizg va|im]HX|ǧj-!wvgǙ!C"c|ShBr%-asH qI_VSF- [gk.tMU..Y!.JUeabDDzY q5"7OrEΑوocbE2mc)pa$37.\:1b>#7#]rMxGق*$83h9ғW2{#HO4(f (Um;IOj!%@ t5c i46P($Vk[SZDi6&nGΠpts6GJqߔ P!O(]#iQuq}uK撶{;F8c!ng0r$\L䖄4;49)sMZI6h$xᤕCNr9y>9$;>'Z618; UN]h Ӈ$d] t`\tW ܧ+>O<<,ȄEi:p0 ^A$1ZiFFbF(p)`j z!$yogs C{@\,e<`Cy5AX;hM e>Og$0\b^sEFRO!FE@QwPQFfLE .|atPПU@$+ Pu`mHoibr/ Jg1%1y݂Z*$@IA4\SHD(1#HU(=e4{NވDYaL|BLUK2 xG-8 ]PJPR_ %!t;*NR^ԃSO3#C@\# [aWA KblFKb "`%x#ҕ1JA5YufèMmԥmu.?)s"锿 ~tBS0ZD;ZcN SJ%ɈCh+Tq#RrEHkx|?i(ીEAj| 'L s7;M,E8̃rOM%NN /Pã, P~+k3Rg^B ]jܑX`FŁe "8Qy eTIx| YW6v}W z ,SW꜁N'l)32~Qas*\Af E8Y Dt_9 ʔPU<~eV)!fWy`ɫR>Ki=%d:X  y6aRrҹj)[k8K}ZF'6I*tm ѨWV%RA)%38gAb}HZ#vPkuݭr'f*]9jN1 zz OD{HB t~ {&`Q,JV,z};;'k=xN-Sgllƾk,2iA+u C"Է&S,ڭ0F(Ȳmv_=+]ޟ"_RuƠ$@rx8._lkjJrOe6+9l; fL 9L|~Hw0, iUoQ$Fa*f*LI\nlG$2";pon tޮ:/p<H5D)q0׉>W WٹݙE0+@;d +i fx.nr *RֵDU%+94 oH.ubAp~/D6 % L^c5RY :枽,^cIjgڄڡ:Z:ִo$Z\q;ֈ\j俕jɩ1cGΡc@ik)3k8l@h(a!)[MJoO#gLm{JM{]X.jds_Wcx")Y"42;FZA͕G(|i jJR {86EƈdKL\W% \N&Zos]`&w tjAw]Ux-Ъj9" y:\@ =`@<`]̀)` @Ѐ+p,@&|` 5. 1 @?` L1p)2@$p `#R dy-LW" (6`h@2Y@& @@Z@  , .  :ll "+@4#48X+ 3 ,? tO0q~ e@=ۀ<p<@P `6@0 ^@c!``9<0ƀ< L@, s@p4t@9@$+[@0 \#-0 T@ x@10DV*0 0 T4v ,P π@f X@8@52 }`T@.@@07 @8  @(D 0IKYqX6\#+ $(I|ōYAp/F0A囧'ɀӧZqRAqC2j/;cT7h1ȉ\2i<#Ljr=*:Mv*MƢ`,M>9+GWhr^0ڋ f;lzֈ.B*~>ӧcF ZOy[ Ld쒲פC7,r2ҋ1QY?v:mlR5qn {D*KL:2Tj0RZ"ƍl1t\/h HμB7V\$yZobh;M#HjL?Mưq9qyz^2*V Łh勧FӵJ$(!$*!7SqX;V,F_q$W52yũhZ<9hLdqq*Gŷ(8yyq9ً_ˍ9c`L9$`ɍ5/h݄o4?GIBhCI cM%718AM]a*p h*.,;Bp@BAJ-a+MWlG0"bz*X!Ѕ:^tY4 v P@"=0q[d/ZPlOr;bOp-o sAƲ PszC4/( A\)7G|CYp m2 Յ T|J"+^ O[QhqY0Enŏ@(C PFA<.+ rB, 2襹,D˪δ6Tf62>A:2p8|o.tA  FdBr@+H(f)-@ -[4i|BX̲LOM̍Ȱ,;(rb0BxELG%l2gnö2{.|6ͼ.c<( Lx DŽ7L\52NiIH,;0A5Aes33ˬ"̕3kar8mNJ-qʜ0H!{bwS&W/]%J 01N5 .Dna^8lA+@=yt#Rı KO@;8*jpEJPQ8</$x*W -2Kaj%'96Q- 8NUh=C hE pGelNXtCe/8(b >7D/ V⫚=} 0Lr냈 xE-X+hp >28YA$-}TRĩ܂1O 0nb 9/P ۦ~ jĶZO @;SO!)"A05́! $J*G yEuHPד'rbL0là|$ m yU4 MP1@ 07WiEOtA!-&)pOe-%E{gR3KK<D/3.P%2*" h!IQ/4}cq n\ L4!o.ɋ&sY*Y//H;oJ9vjzl>#xjB P J5ԃ͍\3fޚkWJi!iꌇD]PqȺ%jc*+V Lq,d1Q>:4#1$GrrMv18u7c>#N1a,FR[r%:X2JL?>Yw`,&?HwostOj5贞vEi4=OyS@R> }4`-cƋk6Fak9jWL .NஔkVb6'%Ik 6-%:}ݢOT^y,D!#i t2#K[F;#V0 j ນ$xDj4ޢ(E8cARHsB,jP+-H~+%nhH9)Od@ 7[׶>VÀ)ofa"EU/w|w=L؈geƈu?>nlHސѱ|اqLyMSL%8?F~dKbv  =5ڭn@|'R<åZ-&xL#gû<:[?R51-"J_ *QExZRQ:٠u˞D)f0DզEP, *j )3=+GBwDL ᫻mʾQke﷋!SHC6\{\]h(mPCS9T'4+b5nCǡ #5Ra_"Ǧ~G.db+Ru Tʭ-.PrD-2ä!z`Fߢ%,U:5REW\5 ?PnmE&)9 Qk8hLRd\isuSBqh0/+˽qzƑ[C *$)` WG9D/Z<tC ʐzJ9t^ٺ:fm@mFj>\7%C~7~d\}qs) j_Fm>KQaLT`H(cMaF|bBN{E JQ 9k6l֌9Ҹ)ҦPczQIV'9" )Kyl> g #CKL=!J ge 3A{,D A >jd2D)+ M5Qȇ vr&;L&`(ґ֐ D_M2y•`S|abK2µH+t/C<:m0tZq =m J.9)ZY hC VTQ28 ^-"g`G[L'P F M J@th0Lmqv߄*}AʾBJ A! ڸ ~{ªD#j8,V UQ+2Eiq%pH*+P 8qC㩅tl0Ge;xr0_N֩_bUJ U2s6ꈳ%y'tҗ`F5s/lv=dߵ0; :*kK6%3 E/y!§#͹߸+v+T<Ө_˻+DCd1,!c>ڨAؒ90'PR ح}it SfOOF9$*$4WvG%hkݺlʱq/0(AkanVj+XWdC"Oy8UjWYbfSbk=bAÝbB`^NVfLERf& 5 `) j痳ׁKB]h$&2ힲltsηM3gƴ4Oײw!e}Fx X8+R㵅]^ 9Rie*JR6nR"D QVDyLC``97{V:uX|O,lZXb8oF]ywl y/(g*`Yt89j~mZĭٖoydK1Z*: j, 6a(>}e<ǒB zgG"B2pn @dn+'B绷uþ6HA&l | x>r1?nfHi#,uYE:^gwס9(}_f{FD m|J5]4ehG0;4 tH/%*l:pe-#q\MIr!a5vˁ)T鹵X/ʏfn os=99w[OEt.d =H:il1ޤϕ-mۨ 9~{JyɉqNerN`zNy40(o-MsFƳ !@B`֩}y_>Cl(2w.NFk*,DWDx2< W;2nNy{"O!He u.G'k):A..Fp"J]ע%*;}wBD#/KP;l~/Ãe0փsȲGfۨgy+`4Rr8ma#6^җyȬl~_;ۀr;Mɛ3bx ;ׁOVel x:H;:ě# ^;3_ 6Vnv2R9?s'^wZiga(yٻU&j;NN~G\'uēRVmzpnHW- CHI+D%) AZEVҗ&VL`'Xz!gYxj![h!HjJޠ=gzhw9K]7)8\dwhZ'@i ·+<ɩd P]:xZEhDvEi]˞cxP`{v!az ꀉCoEnΧ{MtVų" XdɖX8 т;/Ve y\!%(qT9+w!笮2D/L}{H~ǐd;(ZI!fC/$ 9E,)g+p]?~9tFޣ:y~:9|:Dgjؼ'l(焥m-7y}c5?v:>ߓw;+8̺ jaSi]w0HGv+"hػ!xhkD˖y.MW)1WGk+Ngɪ5:י.r-ZHo?[W,ekbɚoAFx]@n>_uVzͽ#T}, uȟ]R#^aOu_SSR}l'8 `O:ˡ?K$ha;gxb3"Qׇ PWwP%ċ}, _4~Nr׃ jS#3fv4yuD]j Mvn{-nC_bd6* ,JŅ}f؟9aۜ<њMʞ+PZ܅3/}hӨCmq,( iţ+̣x+hiO70j Lwj re]@D=QDl=507q,m^qh0,K^J_r#)WЉ+b*ӟ.s 3T 79Y(?=kxB$atG_tW=QɃ>ArGfحꀜbN=zv"B?:N);3p_kOqHkO=E\<Uq /+l/҉~+6{y2J/&SGӳF Po9~,RB1K/BuIXݖ"#%8I౞|9u߮Oȃyn8ۍeꙻCFLw\ny)oV Ox7[B[z!w"oqz[ .2&r ޴~7FN3Oэ*o+tF&1t'!p{aɆ:zB0,g\( ( V W!.Hwǹ$Aꆆh=}<5ֽsaipRMk86irl NC azc@am_Lt+ cW eG$N  (t(b>2p)Є4 $qq@DRN0>.N`6zBg1btBSG- `!ṫ8`B}؅M}܇1H~}AeC"(F$` ]ǫ3 @.JlK^]D(p8}^b󲆭&ǘT` u!5O )tk! *P `P^ŵvcO°AHQq9̠}#9~CN/sx 跾ӄd<ۜnNdy4|w=.x ~&Ddܝ?;.eE$ /u]iw0z$ u q0 iĐrdaylRb0hY?fOa a+|*a}I[\и1Tk%F(ƋqJdgȅO%a/e0{g4a%?iƀeR: O 0t1 R/Dbh2tdɐT'(@+2/  Ƒ]O\e3,  :Ca92`w%O/Ip2~SpBPdpB pG-W#!lV  V @c<' |+[NhHR\)(&Pi@ Cb^PL5F w~'I h u pFޮG=P x;)(PA *x`> 'ZؼwHV`+mx` ΆDlw갆]`+u2#wVkx.Ij%we6<-0xt-^^nqh_V}^ZGw*j1R?ah|XD$H֢;% 1njA7zv*YO'0DlX[q0Vy ա|:(@Xޟp R(}Ec}aGWBn@)g$$U(JdH_MBn09ByˆQ桔\r_6y޸q噟P A\GFw)2_ҁq0S1ⶋGXYŻX =>WWӒ,Kz0dz ɪ=qG}b UDz Od;(먤`U4K>Ep׳\zӟ`tdAXhd#5#\0Uѓ }Bjgf8D"8t+SACdfB\9"St08,t%r DZqMcb`Wh[:hBޣPa=yE%֊#^ pk15tVr^h32#ۻpL1B.ҘJd? 3Dz(J뉋gl=7&TF:#{=''ie#쁠R{=XtOpa왑>j*(^soLX{䱡WցxP1go%S=H{0Ii$Is-{!aeϥ6*z}PXmh7jI12Tmﵑ=H=ǒ=fܛU&k.ITme {2BEP8{.9_aV&FQ33 GWsZQ|5Y){Xrd]IY'9ֆQ*}@Ek9d8 ^kNŪΝo竮KWƵ/hX ^7b!H> J$N)pGأ}ʭT.8+& fcݏU~E8T&I.[(QHD]e]m )L$v3+WaL0mɐ2<|cPWgbj kv KOGߨYe( R"UE;Rhp71E(e@J95)q$$9H0ejLɦ;Y)w 3F<]!M!r1\x6*dX0Qf& ݰ rл O\U$K>m ꓫr'-5(z,?daecUJ+ Wč#SθH}1'+I1HGœ0O% 0" J%Z,IԠ'7u[Z8B6f0ߪ"cI^n"iHzɁZ+l/:F(d1$7jҽdk%ɓX~hT|M%{!5J/Y"ɣN]%ej$6cP!6T/VrABI8|Nm4^1IRw0^^$r/{jITvD I&/J|#+}1#U/GKho{^&0Qvaa#OV /Y+8Bp ä嬖7pIȿME&jO-WCs| (H6Ukz1siR:MJR1+\rx1M90kiuÁ4'0 ocF5M;p`|\@B L a  2/F"nWE)#^'R)8 E/6 . UoF,`=63XdtڃS I"VW QUWx T÷M&ep"b@X!2ޓ @2+`h6P:zf- EG QNex'HTC,Wlrx )[0㕉9ę"%cQJHب ,Hy P|2:D!9x "ii4L htNx6H+@3.(f͎ UDlmWa(H+zN[1Vo9} v_#1jPvKZbj8cE%o % t+CM&VhDpWn5Y ]MW5Znǎ'b+@pJJ_jgpG-<3Acр0aDD" E`AT2E V_x z{P'U# uiyx~:eE4'"\P¯Ѩ\3\QovI$"3b@\_'4ABbsH;0H*QD5 ILu2≅@V1sTb1N4-M?쓱uW,HP7%qj𔇝!!#4)'5\ #;uQVP+5hJ#!`Dd ˦ sm_P2Y3;4Ti524of0 (zm gk $2QM} 0*:M.:sˆ<ŜPP[Rh>b_Bt蜰nA&(/ +X ޅ ôG@9Ĺe.N )YԴ\:gQġsfE6s6DQ~!| giS u!Y# 5c %Aqs FR3X{C C.6J_$hfdXC@fJ偛g,/? уcPDb)# 2XJA'AQ#e"GSuN夲+j2DY-OpZ2 3g7*zT Ҏ0+ ,RY<u uQNL6"ē<Şf;:D`|1Nʐ$q_\ D9oCS݋M |7?Mf2mvޤN7 xi4i7MCA{I(`4 ~FO `RV4+OνH@Wb}.$yPk^7Ƌf!i:ЇH")(,l8/łM0@V5>~ܒyak2\opS%TQG\.g=91}EvLPmui짹.z\#|9VjV$eٔ`"9IʚuxɔL^:5lKy /F[-%P5вWzb{`/ڞ,Y#. (Kכ]Vb^diYlCÁK5YtMAF:hÒk1c.И 5&a\80jCعˆal:j呇ch9ik䦗oA6&K.' PIX\x.'[&E!qY*(TP$aD`-<3G滣r : x#0uj)H1BU8lI_ZBˈ~K Toބ"yVCMfd&ZL]&gyV1"|PRzQL%aTSD^ cin3m$S ϫ*x#}jb"UbDYQpIJ-*Z9,NrB3QpX)0kPK`9t-F]Ϟ%#usnz@'$hB bLj>.:)Ab#``+'JTr4" VZ g!j-O}ԃ4 tŨoJRƝ ;<5PKe9Edzo㻨5=nF'czZ>"!^َ}S BY>@Hht0EhrEZB.PLij<ę/P8bfPZ F[Mu%l!^AQmtl4 [1=i3ݕv@˨3ꭠ#GQjsB)Mb f;NuE1*#X8H[ iW*8}wGBS L#j-"NV:ʎIZZ<_'a>i3 doW@{(Pf4ҀLRJ"PUɇ6zӫfrP;X1RҜ*Dcz1Dq{475K`[uM4 $@ B0i;zN`K b3ZBZ"+J5 }\eWZ2lFRs`ݲ׈)8}*x \ T$K ⎻Wj2Z:a)/ae,y8-čtPHE#pd3;?F՗ D=4Hog2𢚀yj#Pl o{C'Ϩ(>TqJ:fNThM50hH*i4s ;}(@9uN{m)QkHw8UN?T9UiwJ=ݜJNy )!:e Ng ^ ꔎ8ŞJtGlSx=NrSm,CG)!m 5IM@sxTC^.uA Z.a)ehP $O*Hd<&* ձBe\5*Z$C]f#Ĉ CeP/T̡.QJT* 0e67nJ>#0Z:Aev*FmȠƧ2g*EEQWmT5B}POr"juiGա2QsdK5zCuRT=ՐH2RD#+j NPT5ⰓXfzDͣBRT6"5 G]&ROG*Jb5 /,6 U5n ϰnQlhz!gPGeJ>QW|(SlRYw4j-JMu,XSC85N-8Tsj;NR~A= 6PvKjtQvKir0MSéz*,PͧRɩU-QŨrTu*HuHBT#ՍjI5Q]^ΩTa*%՘*EzQ k'?.xd(:՗IգjQ5Tm:UaT*TURUI*ZIբT)T AU TL:׍TR*WTUTjޠ{P (zY-4AHK!].དྷt:i/jNպ|/Y|n th }YS3ZBu{ u܏ 2 M C 0ٱdEM& iBg jZQ.L[QIk=`:BjPT RIW+tIB]+#\%dPQ*8*B uCdPS4&Pd1*Ē1п ƅ́nC塇oh:P&BszC~4U0Z\ :ءw(mHvCc9ӬF8:e+&u$z- @r1H:,*a^ISrq3Uu8ayjلm† !8mBK;Hj:(8m+ VXa֍+aH$f6hQHmH_ai3)t4MysRo"0yLT5o nO(M8L'k% i@[á1!I(x*a0\K b5R+T|ePPo)֜F_b/Jx Ĥ9W/@%e`}LEp^C3>+] Q>L)o̥9#ŃX+pAp&\V4c@Et Bͨ>B," #l98X)bm#.I‘_D0 `&݌&>N^P >DEM7{z^}NmBn8"d =aIfmJ3σq2fmtaYg'ӷ&97=FfrݮJ&Sxiq^Cse!g*ST3ia٨{6Apahe7\eR 2,vgGc*RKE୰(#X&@BZ+.L~ P, )% A"VC]Q+lRGJ5=L$rZCLƇ2Ն@8& @<ߠI~!d*B(3,;RUi 9b&QME$Oj*[ݵ#9Zbt> !l3Hb'Dn3HHr[*Wu8ch 9Lx <d /[Z:d %! N<5,* #<ʪ@bYYVVcb < j =d Zāí , L˪@sz_LF9=tlchHX?"ǣcAQ xB|ag_(_Qdwh?&gjay`5| ~fꎮ00e@R_MՁa5+r ;ڍ#K_X "XLP>& X4@8 ѕ, WLau"SVY'鑜uW(YEۄ,|VXϪvR~Gv>; 2ֆ0l!${Tp*rH`t2,ofܩDPrGBGjqHDD]A(72GWlgW|vS<([z[qxCZhq+Z0sUk'N$O5BC`l%X))Giĕ,MӉ@tSXOfB)@V`Il9 Mdhu+!7GPsǺ-SD^κV/:|@u&Dk #M\mZxny(Xu M]UMGHXj^7+4skH KF Ȱkφ֚)Я{%qDQ@$X(5jD8B#8󆺾 ?m0q (L 7E2t:#WP@$/,=.|8>xܰIlAN1K% )B痫̮T)`=`rE]D@KЍ14݅.gkmy쉃w>J%e)&OnkKl X2Aš.!CXnPP$.Dע2cD)vku&6@䙐>G[r ܣ]HNDZl5^ƢAt /k` XzB+nj'[#'b(:"!**I}:S.J0ťr$6}szLu=RU\weuBvx ~j:~?IsC` xM>of1e߲eAO4T%$8lKghA$YR J\ q1^1ڌ vq缘0p{*3|Ax[Ήw",~=S$6>hi[DB#(f> ػ8xFfDɖ:[#i1 Β~ NDpmx바Muŵ]14`ϛHlERD ¶^,^ HSyɽ^y?hP,H=FjpQ c9NtyvTx@1jP IOρ-`$ &69SaX"=H`(dzwVx~ ۪ 9D]f&HïR`b=$fK#N9 Blț+pɺg/߰ ٛ]Smn_t@2sVoN˰QLwa\Pœe7<Qx) $k R}6"* .,,f&^K5K2Nvo6.巽@`0@Wz8L^6Db+~ ~w_D0HDT)5ɡGm8BO:mW^V:D9e`blG`I}3Ŏnw{ ,C/W%zE+oHq2x_2 xc'WkyvY|k_2jDh/9űғ7 !]R`ԃDnO֐  OeGG=3UвV+bJ1.eF >{l3=L$ k[;Lxpnp Gˌwkc“$8<5ߠYkYt+ntQ;XZ2$ىgM2BTE`昀=G*v9"Mh "ԃ@,u37E+끆ұY.`n*]DzP(7ٹc7W8hSazAcb$hGdEl+V{!=l^=9pD!*nPၰ'+<s's62 yRW`0 v@:!a H.\ qb UDvFp&Fp ( 渀bjIфL2J9A3P;8s^ {q $ȵCcbB 0 g"G$S)A li,<ÁM܊Uf s*[z$)O@ƉB^  _8.8+׊Sb^qm#1ŤLn14l%IIjգ}PMj&q{'$G90]?_}apl3eqzV:OpUib1Ml$p 8\Ȧ%<{ DŽKٓ74[`~`r"nQ*>3B9ðkXД- búHpA ʿjTj T#|bccZhmTlUZpR``18ڍ`!X6-L`"$҃"EPdGCs ź,4_f(Kz]ۂ)#۲?l{)wǍC[S2T3ySrQeF=^`!tUYꖅfvvV\6 r,\ hu lp9E$ȰHqSE QZO."X D($G_G(T>MnT .ٔo2SzAܧhF]*O5XN5yʌ4 .G2(:ghO%3'3*#h#Ҩy%:gCͼ HSjoc#QUdyTX!,PxBDMNGoP3.=*r8_,WRA fr`z_Ҹh$p2uH4rӱ(d(8eD 8}%"R.AfAUR r eG CUr*uSuMlBN 93+f =Zh(6=QUs]*Ӝ%yȦ@R6*Zj6BTZӔ`X5 d}ZsM֌cmss@lXzrBc)S:xtp.Dsʫ_|8e|X&)?@(31R| ~4;JV S1B5!Ɛp:c[ |@xxv^ 2~R1dς @|N"Ap48 ?.y-h&dYYseV]5 H_:@x̖x0bVWkS>Ֆ`*7ɀL&m#;A+`:Jy<cpkHȀ4|\Xe;3;MЎ 0vjh>ҳ)H8܄B/x)ї7u?ebvf$5]_'r 횐@% _&@@%"t= `lp~F?4/.Xi(!>+".n[r$J 3L&#p>#Tvl݅gV~=eϫ;y($϶Op#` M @ Ӓhd `6 ]F gsM@@n1-.314>XmGG,l-FhKt|XGohh+Z5HA,g4 U ʢg^04pb@5PE xG[H Re)HT&t<%` Jl (9ŰBJȐ⤕Ǟ#Tbţwbz^@ B4 7 vˢCLĭt9䡩 w=UIA.^3Ehh<VsQ.VQ'jXZ$0p@-@#",v&?uY^w2-HZf/P+lb`# eTqW T*h Ґ5h]I T-E/0⃾=IAq]H 9t"Cҙrk/JߐH1h6Lfʬ 4Nؚ0!+Ɵt0 LM~߱a9֪d#}.Wa({r,AzC 5؄.Ü Ɍ?|0(r;c93 tT0¨-RFe>z=YvH$;A) l)[JqlQ-:IDzGK_; 6Xxthn=2Hꔭ˄FPWֳ`msTvY,+S Ѣ5b6U#dVSMvkyn1u3\`,xA!C\p 樌`X^RɌ״ƓvЃj&uI8fg9X6QܝǘR^"CB ZEޒ:Zq ǼXu7EKtUV BP6H' f=7Dy hp cBP&et=Rޅ+iFg oqUz :6vP̞?[$"K/l.Xa6`bV 5bi2ZȥgyhFwV^4Q:Q'VcvCȨlJ|,}ckКv(4ć<"1q~[P.:)u⩝o~:{nEmmpv :gF6bBY ӬMeM_o0ψ[h{:``k}S &H;5*߭g_L$xsJZG42]#1ڑq-sG{}4 fhͥoV+ɞguy'o6f ճJS OY/YT5hx`U"ReP>0o!`-}ۅk(Q23w 0XAp75Uue1*sU&iniGU!u}k.sA*8+6W:_!9cbS³"4YJyhʠqN߽MQKH-DH )۽+l/= ǮH:ZjdU? Vi]A{lMv) ݣd@ŭ2G&&f/Z%[%53۵~VIh"|m } X٤%?ABqQoٟҷXr ZjZEنnk[2c2c.<(<ѭKx7v9وppkr煏 hU>`.$zӃ1Axva2 4)fJ}Ȥf鋇iKLfZk(JFFqEbN&ͣ') gCYld]̊Sg\I'Wwvrg/I:=ip곕k%\ly hCסAжn(Kk6::,U~Ĭ__9W.]i _E~%mwK$=fi##0mAFdXi rʕN].49uToCM~G 8W A >jפ/V{uIhX;AԷǭWg}nk7]=kG.  6-2FP¶WԪl'G~aرbl+@zǸ ܯV+|C3.(mN i*qK_L.=8Hd:NZQƑq5: ^1_-k.}{m snD/ d'8{Z{{ xY`pN"+$߹6w&|AG=| Ln=ˉ&wE%89!em;X(x ׁ,z|uQ4QQCmv!Gf`˴v?cy'r[t+^E&?7|\۸My/|"vLMٜ-Կ/fTԺ]n;CI߹~8hϢe1I3T=7#2m37O6W٬۫@Wޜ n7]^M݆nA1fVɫN(6Nj.TE9`Zc =*&Vg6u + xy?NZ5r)MsS6RcXHYSMKTq6eOͣO@:uN\1XڔVOmX\ԙFyo7]$Dc>Sݣ];OYֵJs>P/򔵶[2OV-N}iGYgǜا~](P9xaoTfbm@qPy6=nO5[ύ[}}yܻow<׵ MOS1Yr䈾o'rw0Wƙ~{x`n{M@n in[YxFY L"8sK2"Xg t|nB[jqz rc0 2)g4v`ۃVyHLWSfLN[M u]Q*A`{MGg"0d7ok+h:\7VhZbۓ'6ݫp^@,tn+roK!wϼ9i޻ [}ק 2jjqtQ`F"Nͅw}ࣳpx7j!VM3Ļvy_8HQzB㨐5)'Ǒ7[`{½S޳ީ=C[ţ=-=H6SYĦg܎qOܑ#?zD\ 20'x2 Nx $@Bq@@tw{([2 2@=K2yYY;$@ {O? @]k-w"R_Q eW9;}S޿w%~߽̻>twdUN p%2{ܚwea pke.w{(m&4vx@@k3媎; P{ؗpК1d_ ߙEE;pW3e0;/H2< ~<@A%cax;^Ӄe(W92< oyWkw ݣ v_ ޿B\bN}O@WJ? z*y۸&P,L@noh@w&@@vgw[<`sd_e ] x$-x#j `qH@ l<`ߍp|<PgP!-: C"XO&_  Go@(<`855l|#v}ĬxZ<@|xc<(O9Ưqw@L#yCd1[|V"2y88/{@ ߖB!t%E!?|W>-O-@Cp(|'B|`!@(,@Xz5qy @[*żc-_81] r& `r'ܡO ` sy@̝ PuTy;bY (gHA 6/@nL^@>@eM@WųݳXo80(<@ %x?KAwO#`|D,ȯDYՄ٢Bq/!N KʼnY7ks]偆OT~UϪoջDm6g}!^\~W%`~X@ zn3`#_AG`OR]DٓoG%}^c 3\ d{ ޳jDŽ޼ܓH#'{byOZ"6l{O{ug3v-9'&25߰G%{8= >=ڇ_E}w>ؾn;P~_pʙ!=<,a}1يL{#'@_&X탖_]c/0j b= j>kW\4Onc q40]8 90UȚnǦ@~ `oy3Ɗ=>#"?QX,_ fN6aqFEHZ—/W ?0ay (s{ o#,G j1 'ș0P>/nxxGY`bS߭A` o eo㳠9BHԛpcτ\+?` )ze`$/Bް: C&L1-A}bȌؿ$լ{2cp=}c_O+D?UW{'^?&h[}*=*)>:g W7bA}:}g~>P_ Q 5 `z.%@@@duHX߻d!a¯/B/@>؉g X[R@ا0X0Bx<#> X~&@ܝ0]~8^s#ʞψB)R$6V P&J}_mC&J?{5|+tOēj.VXn`D/4`:(nY)z''@}5gb&`_/E7(~-\+'Яrn!/6URh˨= P?=x~&rVco|iZb?O~9i\Dtd0?OzW'  P QpK!"{ ;_(=g}ۍve;lg8ۧ: mw+rh] nRo۞/k{ oozpq'}%r/,c;I^wDNoeNl6;C~;0u_ۑ{<ގSݫ%w|? po،8y'~oWmw ?6/w7wE}qI'}|5\Mw;^I[Ew{\_`;߉w_ Ⱦ~=˨F{}ǿ'{^( ~?/o9|O5?`TbA)g ~7o7$|~߄/'o " >/X#ױ?*Ox@쯹]0ǹwJy{P,@ /O? xm<7Gx@8^0`)xpOml|5~7xyxyxxyyyyxYy y 6zJyA9zy!yw>z'yAz zCz-y/yp/.y99y@/y-w4yyvy$1ylyDy~/Iyyxxlkw`zyzez y mzkzxayz yHozlyqzsz xxuywydzzy@xyyyLJz}z_IN|zywYyGyYyNy y%yyyyyxyyyyyczyyqzhyyQz7zyyyy*yyyCy~xQwyyyyxyyyykyyyyyyyyyyyyyyzzx/ zgw; z zx_yzz-wtwy~2zi+z-zFրMyy;z=zv?z(y +y"Fz%(*9y-y>y257Jy:Jy=?RyCE\H׀ـOmyoyqyTрXD[G|z~zIrd*=~ikzQ1D~yz2vzv= (N~vP~R~Pvj5U~(d{f{4zz0zvz5{{|q,sL 9{A<{?{}|K|zE{)2}G{~I{G.};{| Zxr{U{W{[KEx\{L{5jf|Z\zh{Qm{$x(o{q{+ s{{w{}nԁz ~`{({}{2{]cbT]L2{{{9}5{{iX}'h{2|}Hc{+3`__s)|}}{C |l S{ ~C {4|||{|||{4#}~I{|{ |^`dctdEKT^:{{<{{k}xK|xD=E"`  |{56{!{9{{|߁|u,$!|y!)`~"}*|g,|}|1| vQ+)`w{ A|#}kE|$qH|j =EYt+~~Ձ~zS||3~W|AZ|4,ZM!ia||c|8}|{i| 97 |C|j: }|gt|BkA}HU!||O|z|~A}} |{E|jy| x|j|G|{p|ĂLlׁ|~V|}l}:9|#}|xmق|r|32|6 )~݂:}|d|2||%Y\'X*H k }=}d}{|mE}rp}|O}|ۂu}/||`H}N7^}}du˂O}!(}}}]`}oށ ^@W)| %}(~|%~߁*}{AOf;4}E6}s 8}]~| |e}U}#W}O}Q}}BK{}AOE}D}{|V}LU >Y ImVj_}a}c}|p}|}t}== QJȂd#HIQ R}}U{}bz}}UGh}}}}}'h4HAbUG}\Z}V}'}O(r $d++}I}3O|} Y"~})`,~$}'~,}|΂1~k~v[PvUuPzyoyvyx \vyEvWG,wyv/=5w@?wtv@y\}h}?vwxwQzw)|w~c O}y~bx1x `ww~Wx  xD-vw5wk&Aw-w(D΄@L\wLF6 & ӄՄexׄww!wMw*xwit-xZIw .Rx˄焗w Ԅw%= DŽwTIDxQJ`t1Kxwqo$ <=x~P9U~ 1xLxwRx(i xvLcx(؄ixWxwxVV 0{k1xc-w5لw xx儂Qwwiy5xÄclxxᄾywAkwkws~@wq~xw€Jyyzyyvvyx ax%zyllwZwRyv#yzyJy~(yvzH"}xAy~yv4yx8y} x yx yyyyy~vl~/U;yz0zy…rWxuxbyoyyvy yx{yyYyyy7dz{y[yxrzyydyx'zzzyxv$vI=U6y~yԅ}yl8y-wz~Dwzz|݀}&wօAyv̅'…ąyȅyʅ~81wwyv~yMw5 zxzyAyzgw'ǀ^()zɅiw zv1w5Az!y(}yd/yJyY~zi<>z@7zBY~ͅ~ЅJyԅWyׅمۅy~߅yz셆yyxy~cyy~fz  z:zJyʅԅwx:z 8z#Ay&t.+-Dw0LІ469;Åv?xy˅EyHz fvbG@}fzPG1 $" &#zp)+l/W.}(3Á !m񆐁eA~;?ÁD{A~BJ4{<MZcgI%{\z_{zzgwkӁԁ{M U"u% ~@M{9i}{|LK8'hZIA`CA6N|Tn&IbRKYxwU/0|ǁl{n4eN'%YxNB X[{v!%&9< zSsCtF[K`r@W\=.~ z`r|wE C 3,QJ/aCm 2j wxlvk V^hnxi}qK\= ~~Ł@[not{ u yoAAY}Q@ W[B·QJҁ-~mÇ"!|lh%xE㇝a"ه|{A8|=UiC􇏇A_t+A 1Ԃ ^p}ӄ-.rLM8gUp] v+ZSxg ^<}|Ji\#ZЃj|4$ CnD ?r8'P|҂}|h{m/.-}0<ɃP9:}lJ= ._h{}kbW9|L .%muWgQHtJGl\|{ }atMUP S{="G}% M݄$ |Se ];Buv+QJD^h]8V ` ||]8 J>hKi}g~)!R\A`L A`<@WNh|p_}S=ꂃ zB(| wV|ObA3-si}ׇL|ֈ׈}.M)g^nVS'`^ | ZL|keezPX-fJ"|;wQ $5Ԉ}刱| SO{6|} }ك}td܃F~A{{䃐9cG~?i eGk) `_cYo@'h1]} = M &.O|63݈)u=~E"]@~v/#v I~42 "'@Lv- }(0Y~vvvxvv{v}a~f~vv\~Wv[7vlvhvvJyk~vvwv~Zx2vyXwkH}x w4vv(w'y`~Ly w'y=vyw~-)|~yvx/vyjvv=yyfwvvy؉ Kv-^4w:yPwy~d~Gw݉-+wKyyv~~)wg~]wpwBy>wiy~ow~~hnl~~}wL8Y2w86xs~wwz~w{w wք<+ń| wCф-Yrx:wp!"xYAvn5x} w|wSB&#w*!9}xIYW"K(?{vx3qx~<>T x2 f C9ƈ2IKxxOvxxw  ~G!',x3|Z >W:x|||{3a Rw|+v7O}||)}R}r} }t<6HA}}}#ٌ%|<_-V/,}w#/}ʃ|5}7}&{ԍ=>f}kN}G}F bBW[}ZXJ{`}{H=c}js}3#}b}asȄkBv|}ic __E3ˇTO w߁i"Ad@e͍}9|J `|Ӎ|} ])`Ebt}R}ŊEňCڊB*@k{j}h5Έl 77}F{x'YO}} B}O}5@A}$G&|J|u|02l*Šd; G?È{LjFuA|S% **~}{_|Q6~ ?}ߍ}se 2S҃yՃ"E$Wڃ~@rV|̌ό ~|~J~Z''pc͈$~Јe򇎍=~kaj =:D1p tH1z)vIK O$2vvvvvvvvc]~v^e~/vv\vvzvtvdvev~vvv~vφBvx=5yv%5y:݀v{=EAĉCy?Q-:8<8LvφH8yRSxv38#0kKL:wvy~b?s3pvyvumvy(wzpwv/~/lvvv׆Ӊމ@xvv~|Iwv~~~~~a~~s wҊv~ 7\ N5xQJkaXK~7OxÇwTx~~)iwlwVZ Çˊ!68v2;s uka <w҄=ʏCAwz3l^6 9dƊE7YQ"ZW" [7o c wӄԄ# Qw4̊wV2xĄgC;iw,wnk|w⏫vl?P-CrjT;يuEx DpvwHЏ=65x6~)M2xP֌w'xWmew>xHxs  яwt-xSx2vk ka2Vxydx+z(y*y0Yy'y.j,yހ!x֏`#}K{=6[㒍ٍ)`f33," bw7I;~| Fc|57)``E}ҏ􏴍qcE@}*A` He6_ɍ'ˍ}]8ύ!э}{&.#}'T5B\})j/?gKq} {n}Lj}= KT:^`?~~}VÍ\ō zj"7 }AFnebT^(tTwW NG{JU-"/;~g=@D`D 2|5zEڍڌ܍>,捧}荳ג@Ȕ<FNhƔ JDIocCKcF YkH[|`ARQ]3Q a ?T#}}) `h.8-Q Ǐz_}4)~yh)'};gD = w;z!K|ae׎|gFiA'( UVQ6LcfLhb}_-)Zr)~1" 65>akF>cK!L-{""v;_Dp {ihFj}WEj}iq߁Bv|x}}^z`b}b5n+ }{~}}g=~rPOҔ{g|-ێݎ؍Ǔ ʓ|~Ń}ؔ|}j׃}(*&W9)~Ď"ɕJzjЎ58nc7C}ӈĕm&ȕɕց˕͕ăƃ ȃԕσ֕keӃi|ە%.DZۃ~Ž߃kn}{=~Cvl뎌$ vvzv#/I$v$Z~]vyvNv6vE=wv@v>v;vvVcvvʉUv!~Q~i~Ɖv$QwRy*w~~wyxbx"Љew8z~BwBx~OwA}.}1y:0wNw~<vԋw~Lw"lXxB*Ïw1x~wwЖBB{DFp:&ML#AΊvw,D5xfߊUvkwxxyxkw$1xy@8z x}x^yx4)yiv,z=E-w5qzsA`} E!4yvpMwR y…Yy[CwI~Dy4NwxYyy…xxe xyyy|Yy yߑ~z~呎%Yy FwLy~Lyy$1xDw8y&wdw8yy~ve߆8[m>xsU~v5wXӆЗNnym| ǀ-w!Ԓ7%o){I z~44L6w(3$5;LB~:#uzmf{6zd7te,7ct6zCzcz?Β`VGiڂMTYڂZ_WbR|C{v+;|$z}k{Ìpjc9$Jvȇlz͇8χu~tm6և Ŏ0$y _C݇O{߇h{Khyq)`ˈL x="fǕȒrs|mŒtp_ɇLĖ|j9lgoAχn+$X rv`zEg|KG ʇe~0Z$8^{qc) {@}wt}Q(i`Q JҘӘ)+ΓLYx Lדzٓ\W =@ZјҘVF+JI{}M ctO{ɃhLDhQ ^( d昐mo8 q|4|ғX <{+o,$~?)Z׍'SʔFe U}6e0tAYxi7+}_]:4ٖʈ=̈F}<ĈNȈˆB}•ψӎ_zو|/9;8㈔ԘtڈhY嘂ۘ(ݘG!#}CubK?>@|}j}*ǘh٘`8/~눓J' hgXʙezd66!:#؃ޕB]O|=~L''z=%-=Dyl 2 $.zDzcw?J?G&Oz-]?4q~ Yzx'z’,l. ےP!;M?ᒿa?9˒ŜES&Mќʜ>̜[XϜYԜMn񒡌3{oL"⒃'hOɜoߜ {bqOaXjE yْVRRZ. Li^[{GpFSzVnYJr{ 8f󘧙%/(֊8f+}{Lތ2@A4%Y +"qRMi){6@/p}`A8{@Wi߁JLYc{v̔{"Śܜɚ {q{a_!㜡&m}(Μbr {\]+")J ?yq{|v{{k{{i(Κa}en{5n87c{u9!NhSeŝ\w |_l!CcYl }G +i`y3}{5|=|МǚC ÓӜƓ{({z8| C|՝Ƙȓ̓V|,^|SDVf|ܓޓ[Iʂ |b╊b|n p|X3}m|3SByD|~b#z%ƕpZ7`;&=0k+qNh?jmqcMl{ AG˔{ĝxnc|QSVUVQč\ȍ߁}&}d`"g 흾ŕߎÕ)}5~ٔ?t΃\ܔ9獏8viH{o픸žP}< ǞgĞ ў˞ LC}_nEݙ|̕5~ǃ;~Ƀӕ|uG7]}登陳~X6tЌ ~̎ʍΎs~ R{֎{ܞN}TS $mvzp b (GI # v>2w??vKvSvOv[vAvr~)H,~.ˉ~v3ww~>ˉN@ˉ$y0$y:~IH/ˉ)Lwyv6yIQ~ovLs~&w^xh~}ByfPz~kVov@ItvM ܞ}w薤nx9Xٜi:ݜ2%ڏw~p!6*ʝǚmwwRv8Rq3S&돷W"sw=x:Út^o˚nc͚КO+w֚13ۚIqvޖN 1@Җ[ҜxL |YwRsH| <}x.C۝W Z#a&ƞx+Њ~ԊQx5x8|5:劺Jyv?QykwyƀGIkwnxyMYRGwyyJyX [ؐ^`bxxuzyjsrzx"vqixxTnxzqx+n{r@xjyn}x zt+zyyiy kmo~vsv0v*yS:ěԆǛz'yPy"L6yԛՐ@ٛxi$8yDwJy~]Y~x y,zyYyޠՀݠxz٠ r"gyeg 1zڠyo$&7z(rzsv:zyyy&yy4s'gwxsDwԋzy5w/yz@yԋdwx/-8w"LN~PyT z(Ҡ嗃_U9Dwǀgw'lXzvptwfv T5&n!> $t#^H1t4T1 Izv2(z{zzzb<zO{)Í}Tzq{E{8m1&`~ ehŒzǒ5Ü՜0ܒǜ'hoΜ"ᜱ{ƜJG'DBۜڟ "j璫+uXn ֜%ˡ5{!(Y4˝ ֡4r ' nM{ܞU&끬ߜՎ| X{6ߜ&ɁU*ʁ ~1ʌ3 䃞Ԍ܁8f-یAぐ{D 灗{HD D\{RqqNLwSVX?{ m ^wh`FbSIg%+lםǝϝqcs'kvoIpcѝbw9,mEipk X/crSc.]͔>NLQocm!Řl ءGᜉv-${sƝ"ɝޡ0 ΝvҝV{]S"ٝ%@t ]ߝc$❌坞 ;YT1Xf8CjƢ{w“ lE|ܞD˓G͓b=ϓ$ԓRT (|j|GR6蓰f6|L; =iڔEM{,H.z|Pᓿ򢻙7GZ2|46|aMZ쓮gܜqN{áErڈ|{͢kupcѢ~2բ0t3FҟR%U\ ͎: a ΍ f4kh[|.K7印ޔc}B7nc.)؞uq4sT|{9֞Ȟ{Þڞ#єОҞA8Be[ߕ4~ΕЕ ؈@^!ꙴ3~, V'h~=}' z/0=~ӌEx+L" b BH1 1(6W18Nxz47vZ;~vyn~Jv~vfp~DG!TvvvAU ~0Z~Tv/~jw~Ɖvd$ycUov`wxevySyhq2wks~3w~Mvzxۉ݀ z`>~ ։7~ ~~Ο(l6xw1w ԟԒן"R6bx/ך2xͣ~Ԗi;xwCLs=-Z5xwԒ}IMD\d) xgx(4kQJ` wͣqLovo yΖ͊ ъǖ:wx_pQÊ)Ô;y$vyFyۤkwx6yWА-+i]yyЀVfxx:Ήx%tmʀ ztx+zyؠzYyny+.1'y4 z6*y9*y'4yyyvx$1yO~"$xxx+r]yyG:}y_8g+=@x~z04eFp)zx8y*dz46=y .銾xDwpċtlx~&w1wxy~/=y"yTw yy@yԋՐynԋӐs@y$Y>Pe@ǀGw=yޤ|TZ~X/]'zfxMXxxyf^y]y 37/yAz/&y8zZ~y"~%')x,/aa79;=x\B__En IKߥNzQSUWZۥey^` bh.k~ntqAw|uyxe{y~㤂~㤆Yz]_fAѣףgE~$s"ڣ)$+I-/1棈zm%XzBzD?zf h:zUEzzH*8Сt]aա\r]kơk" KUK6e$YzW p{Gt{ƎH:׊=@0CG3" ҤԔliȣɓ, |!򞧣ԃݕʣʎ߁Z!9AkUafn!#9+G1 $k(3vI57 9:v1Z~vivyvvvVv2wvvFvp+vv|Bv{vvvvG?vvSDyG<c\0AGGGMLÉ~I~:Lby@~KRyJ~N͉ wyO wFvHR~;ڛGPQO:zDwWvHwo}"HhՋv_݉ٛ~vy~Syvv0Ӑzvy;dw~v Tw`vԛVwWzv~2+wf.w5@/x;(Iר/4>vwܨIdz ٚK aX74|wC2|FKx9 ᨢwJ3U)Ш&f8wwXȏ~ᨃy7ff<O w.ɏOOgqwgAw4]lx x_L؏v w-+x jAwG6w҄ {1xͨ/WDxw I}yᨁ-RȖKx!whxM!xX %j@Ǩ/x'[0xZ2ϖ@J3Gxf֨/2W Jt~򨁩w{ A .*wcd~ F.n'61x㄰wyYWw$Mŏy  Ct4|ȩ~H)~winΨi~l3iawKxf8pJyvv'yxvzJydw.yygNT!WxN,yސ+zGw-Zz~#y,y4Azp4yvOy{%gyLx Y+ y*`@oCE%G y$Cx#$kwUZw/φ/B{4 y1y؋ c:-yQSyvˆv)5Y~8Ea y 2xjl+,x&o7zq~w-wvMwy݆^lxҗ0+z!w#y&kykw|Zw8Z,M, dz8Y,'z[xx5xY2x/ey_xq JyQAz&yvy;Gw,y/DyL~8y&wxyTwkw¨s̪Ϫxx,zxdz9yN-7Y 6y2W?Cy2xx3xaYy %\ΪxYӪժWת֪yW۪Q@G׆Qy0;,y$1a$ԛxyۋy"yanӐy]ǀ}rV~Jy[򑦪tQy@yv"zͩϩ(f=PRI1 & =`wzS~;]NO ϩHz<qlYG, C{XDzjA`J ^ A&HD ǡS}Y_fϩ|7x|쩵rB4&6{̫Ωw;e&DW3wNOߜޫ?Lo{+ n{D ЁȧUl<،̙{3f +"_ ݃.*%i}v)`GcGJL hi|­eĭ;D@'M8l-/:KdD7{G{٭!ܭFfGps#l= ^z^| gz#95yvZvLNH%HKK':y0ˉ~wwvZwNwov]bQv~v~ZwXzVw~U?vqk~ zMwyy5wk*v'~ۋ$Ipxk/jy]EG℮̈́`fW0g O2Ʃȩ騝c џw6xyhxf fޞl%aNWx6Bm^!xFZ3ԭT}埒@Ѩ6x햲 ᩂHw|w%|<w[ T T#Qgwʩ橭vԩ= ;{֩xr 5x󨟯kw{xɀdzxx?clŪWysxuyx+x'zYyܠߠ]yWުIyvy'v.y)p@w4y@yO5y~ߠiykyy†_~c/y$͗ڛ7$1Orz*yudžQy6yvyEm5,yh~y ʅE鯏oy7zy5fتkBy+=~'q$ = yt_RL`+$a'h0[ ,4j2q '{y4dR|kN?\ UrЯKaKqהY[ jϮnmⰐ%ZI{c)H {Ax#%195 eҮ{ ( N +5^Yx%Ƣ{ {֢,A{hLZzT= @^RYf"W9fȘ^= [73aD8WG}cK eħ$Ѭ6Kݭ|f|f|œz՘;g dhf ' y=}z\(O߰.ޱ4ͯgq}*d ӧؘ ʘΘ.A*̱ţȱg|*K㢉8Rr-7*[m@1װ,EU&A6ٕ٧ۧx;тgJ%}aL*8Q]R! 4h\{ W#ۢޭm(@*Ē~ G10La ٣ ݣpZr&2t7 4=v,v&v1wv.v0v:Zw xvz\vvvvvkw~)zvvXv$#m%y8-ӯϯޢ$ר1xJ[2xYx~Ha"\y$Nۏv\?˭D8 ʟPׯ4ٯ1xzh֟š~ݲgM]X/~1yO܊ƤIJz|Uwa&J/ub|Yje,gz"g#ʮ-\|Dfq{wzDי́ NEڌ:)/ 2357ʹ:δj94ep9!ʭ{lϢ6粥{o`G| g 魥%6{%d9oO{%G=E6{ƫݱw߱[ԫAYw6y{z|K{8ŲбXɱzI jQ@#EEL| / =K jI F@HOLQ.yJ_"vQQͧ:~};3Qו,ܕj蕚1D`ֈb!8|{J|BKei̧}nҕr `vУ أvۣ!lPuvz(p4`)vvvvgvT&vB,-Nwvn0ZLv;vR|:z:;bHZk~~?ZBQ"l?;Nv>"7vzՐqvw׆!3 -y&"x6Jk6AJXp~0 @o &fv"vx AD~ֲG©; <~j8˲$r Q22Q+W0̟[yV;bΜ) NƖ wm'ei `$*'z̲Uؚˤb7etѤ>2r0ݚ;xB{ߖɔЩx xӨvhv1p+R Ҩ׊௕Exl$,&Pxҩ*C {Ί30äxފi[}!ˤ_RĊ(wGA<犲1wdw~xԉJϐ0x%xxNxBxJyx +zJN9 %t,ť0ǥ˥Ay<9yQvBOxԛxz`z i yΑ)y;$H~zLx LZ .k߅xm!aox<ő88W%M\NO6$fxHxLzayqy3{}yZqzK͑!yVty.zp~$1-wl&w~5w1w&wy=y/1w"yԉyyigwoxyy yR z5ZwwvYJy \o=ǀy- 0ʥ;˴~*bn/e/) l5#Uw,9:eӰ!D 6gP >UX#ӰX`c_ū%Ĝkѡ>ތjlLf0ޒ ¡{3~ؔ񫡤a?|N*΁2fݬʱ`'ځf/݌pF^ژ{ { i?58E@W[bִ?h)`7Ѷ4SM>`z-kvܦT{bxczPXpNht˦!V꘶V妨a=oТJ8}ӢE|C۱'h1.7է9<;h|ݓZHDUSi NWqݸZ|! #%WH(J߸ Iָ.5_J|h x:<5K7?AC8E|^ |J(}DE}LNVN TQю[V쓚XЍ %fZl_Olt=Ϟ 9؞Z}ruǸ;/= Bkf|z瘣 efoM%?YXהi~im-@y htc.z*[./.z۸>0;@,DWG}J.NQ(>W a` S|eӞqcH]88S}nNL}Ȥ]}}0hmpsYoz5|붩r|tCpIَz׹OlЧʸؕWY.||~hH7O{ˎR>Gƣ_ §ǣ- jѕqhsاz<.f36L~!]꧞AQ{mU^ 4#0 k5%qW4$މ7v5u~v~m~&yK- wPvGVw~~hxvv~vN+yw~nG v~k-yU}~/w,x8wWzQ%Gw'Ѹ ٸո)cEi9)K,MS<8SӸR&G:+^'2X67/D ?|+ ^tf9%HA'[1D` Pt $5;R VhX%)]\_a-e/eoh!7Քm;㸭r?u\x{ttEqypLcs[Pv]XGxݞI ѶWW¹?ĹƹU!'[ιйԹ}ֹ\۹4޹Iڎ﹀ܱ'h瞜)z<ҧw+13}7a#ɧ&Q@*ώ™jǧF|pѧ A3ӣ4Yb5[q9Ue4vwmvvvvcvuvxvsvvvvvv^@vvvwyQv;UNvywT8ȉyE"\LB~Dvvu~v/RyJX~8CUHXHV{{?byQwwZ?YFSQyK wowykSwdUFSoy)vnv~fvy~ zvyf8~y5|yg~۾۾ݷk{v־ٛyf8fWx~DzTպvw [ʺ1]gvՏ`ȲmSTV\w V UP}X&ʖ5xд0O ~ 䫺7j"IIܶT~)w±hTyydyy0立a)>lw~n7`TNW 4ܲ޲wX@Ҳ?x{c}uկթ})~f0v_F.OK{wկϩJM0wߩ,z2n85_ɟ9߶fOĩK<q WZOǿFO[ŶǶk?¤+Jy;kwyԛ/oľ#z$dwZw{tcٳayMЪyh+z zN0[yy3#󋰛Y=4y.y/AyоJyv{ސ<6x? y+ND y)BE'FKBNIXDyHͥ8w S7gE\aMCժL[ ٳ:&7e6yywsy.dw#y/4yz y6yGwxϋy~~ kwٛ9]xCxYy9jzMC$y#yAl0-w1ws_"ǀ y.|}5Po9U; pޣOnQCEVope/L {]7V3{C1dRoe 3SX޿#qƿD |*yaPD8Q4jUGCW.{A-{Ӓ̡tv|m^^ Үtk}sjM #U|Qv_9$ρ%$ bc1׌,wXd'{{ A]ܿp}f;)0ڴ-3ݴ}C䴥8ᴛ;&P_yT񝆊)¢q/HDSx9'h3'[S^Q`3=9d  ܈uGodr?  yJ| G7(Exb-c W aM "%– ˜`%zެ:C_^"x++?;n{B1)ZVU\dhYNbWupc19]]T_q|Yc ҍY0Y̽*\ k }tu.z0nc5 UGǽ }3mMo@W嫣 Ϭ¿QI&\ ^’l`{?Y£do<3k V.լ~k|;>VP'ΣHVż˘ɰme}oARO_bvJfE ùAIQl|s‹l V4UG6Ŀ]ЭuÉX¿71{ ÖnwP gа ?Y@+ n9 $8x·|_ϱr4r’:b9×5c7BÔ-2@ܮ0^>%4ŵyv(v~eAi%r&va͵+Kyv?LwGCU~y^U쵭x?vyc赀~~~ wqUE~;vJvˉȉ;ۋovvZw ԋ9yھWAuϐdpw '0yu}_ϐ&y҉+lv'=Jtvm21579kZPwYCDFHďƏ@Z[R_Ʋٲ͟~Ӻ^׺cԯrt5x dcṦxl4 {`,*z"j~wÃ{`RҚx<q{Ě⚞ۖpZB# ıpwFsԏKû¶ⲭѩʶ]xڄwtݹwꚻx{׶1,үݶ؊ᶬƤ3ø7zw;n[~孮}ikAna<=ƺ)wzc}ϡ;M5Ou_QJĊ|ל^BE/5|LLY{^a{_Xˁ_ëZłPR>YƗ|k K_?H񸁢A_X\]\؂*,)\ e d"Fe(ǻ?µB3EG~U6EM;&[(JcZֹ]ގDZ–9fǛ8A+a1cƫɞNFYwܺv|M2ìTƃȽc`nn> $/x73ac<e+zq}(.(vrx]ǸhO||q­rDz 7f듧qBA&)C{FHڌ O^Zp9|!ǃ潜 xc8hĸǴpnctĊZYe }ʽ)~νcfSjȹi|u˹}Žǚ Etoٹ2뽩Ϥb߹sĔbncEvI0qԬهʧ}(*+K-y,xڧ{Q >맀J|k  6ɣ%'EΧo,,"0X2/) 51=~N?L4qk& )#2+R-T/94z˵|Ĥ#tvLyVεv~^Q@eNFTvvvLve?-ˉyHƉvZV~7eL(xryVvA̾5wsAyGwlyT~Z]w6"ȅġ nwEԿJ fȡuUϲ]ȺVͺHCci ̄(Bw^ pۺI0ZĠNjčNJw쟘ޖNRRIJw BNjzKضŴX{EڹŪ5ƭ~$[&X0ي%8]#Ǥ>7zv/ȳxȳxRAs0^DqbNRU"NհytQvUjgM {a_9Wf1s\jA{ԫpƳ^uwƖ%zsƅ|ƁWƐYʦ^K`P‹ʰlf@BkmT×ƨƥQYƁԼ_{@WdkÀ _7c ƞkƥFƃ'Nɹg c{p)C7ēʼ0’*ѓ "$2}*r9C;75G[C]p-TƟ|M4N|T\^8;"="74>e@B D8b, ./o 76Lj:!WpN CBE G}IxKYMǒȥ*DYFXǩ8˰=~ʞ_JYkfmϞuǵsz ǥxQljBǵs|MǔUA/ =Q"J}ɣȧɻ|wԞJ ȸ=Qǽ|~jͽϽeŹǹ}ɹǡ}͹}ѹǻ]QϹs˺˔ ʄm BaF˧mțB!֧}SUȫW ާ8,<'a~  qc{o!Ƨ񱣎efBfۮ\kȣ z٣(hr2t;Sm QwEvq!wv9yPL!%y~v\~Zwwvmkwyvv Z~tz5~ldMw-w(~vv4y;~ĘĖJ3w迃T%/xϿ vú~TwiwaY iyy(ڿA㤊΄N>̢$ 宏qP W,ƠP=p5s7vʣ{r{MCFOfkzΈ`ҤvԅvDy9L9Ӡ/ӡӺGvxeӢvy9 eӉ4 wң v3c҉ {Ӓӡw~6v$bĩӰR/3wx wgӊھC - R!A N&/PU/w0 nvv3swu0`>QBH¾ETԥF>N^Gqww ԃ^qqԏ;Yswg yCӆx x0~"~eT2x֔|ww++ȕ˩~S3wcwq*l*I~دz\wwKx50zȿvBOx]w̥w{::CW9ͨ~{ w܂4Ng~4sn[!Ί Kx*^@hvkawv_w H}mU ɲ̔-yﲟϩw{~:rw& s4.P.]1vw l2z~فxΟWd2`yWxR9Gxǩ&ͼ!͈5I̹w0;T8] S+iԛfxw{Xx{ `IswOh8Ql8wwSba Kqw&iu+_X˟زSṕͰ̃= *պxԄ~ݿ ^4|wTx3ѸwI0 uælwƒ m1̭ Qj^j1!`ɆϱĂxښ|eȖ= V(Rdզ}2'X՞~@*şw[b- ̷WxU.V<}S/<+wb>薒U˨Ȝե_oG`B$㏑   *&.]8﨣 D+[0w̺ب/ جȨzFɒģϽk#͕^RJM[54@QxͣaFx|Tzi}C2+EW*#ՌE~w2kĒmؿ^"ԤRԲ1jFn f4@3$'vj=x.Լ̝~  Kx u\yHqwԠ/xk֑@֎`:օ։OԳxZ~֑Ԫhֆ2ԛyǀy0xdv ĐՋVxxx%dz}y!yyzXxK2x-x2wxH5ח5׈*xx~BxtuˆY~z)y@8yIyDw,y~UMwv@wL5wy~yF~vT -1z:bLק8@yvԋЉ.Jy$15EaeEfhN1xqcMR Ryy~/vGwҦԄ׻xkw̅EYyH>Nx y yKz?L?Y:3NvYyMx:xy׬Yy[ y9x9QwՋD:yzC9wד y<<ׂYysz22׋׬Yy`y7זAw>>׃  y==PؿYyvGdמz!!Yx yQ+z$$g35 y9o(l@6`F+@0:6MBiF00ׄLXYyTKx4jxA yX,FymYyyZuyXNؚyCx׫xXwvxy=Az}Dy9$=Py-x&wyyϐ~v¨aUϐyyyٛ݋Ӑy…i *א5ӻINeפpyKy_ yyWp x{卵>FHڦڬڀڭ} yHyANZwyx/~8w[~x+x2 = ݀}k~_2wԉ xX_yעJZgڑԝ3iwx@dzRy^yx yf:yy]NYy'w5| y|L M:Uw ۫!yaAo4|P$EyMYyx"Jx? yڨQzںxy&i؋Xڰ[-ӻJ`NnWԉ0mxQۭT[yr_>u؈yYfN8a$1-ʹP T!xz4ɷz<zTګw曊ܗz{'x dz*1xy+XZs0Xafxͷww҄twWو%Է ۭm4I>#,o%'۳'w+".02J62x9;=x@KC-FKHJoL5OQSxV:X۠Q]ۏ۾y,d!giksAwoqj6u׆xz|~ۑۄۿ=(ۓNemؑm؋۔@טNe۫͞+ljD\8xuҼE{VBM{%?jA'hZ_Pw-]"I3u_|h3 mXܤ{Woߜd ܄:M?^סܳb?bR{܊};+h'{ݣ SQ݉IOݤټ[ȫ2ܧ w  ݣ,ܸLܿ2ܲSgM{q+!܁"r' ݒڒ0E F_R8–ƴp-S7{×|,Π;\VFW1MF^ݼpš $a m!6?UG/psW^A@%G݉M쫍D7?u \\ /DH҈, Cte8Rz_{_TBZ {2L ܸB¬8fKΣ]7E1ܴ+gߴ þ܂L w֟{hՕF=mcEibٱ]0`J|ڱՋMȝ5~×x݂%| ZI ?3 MGmQ 0݀—vu'hO&6pWS-e2 v8JA*E^̱}_{_2`p.Vԝ{>%zV֐h4Φ_MwZ3G/֔0юQFhU½βAzìŬǬɬ Dֹͬ.S3£e@ȶ!׬ƨ٬;ܚhy6ΕMΓHa݅!Ev+ȃ4*=sfa]zֹ͕݃k}2߁A.@ScXeJ!|.Z޵z134r #lM McܭaH8-6«,Õޣ }!ha+сC4Sc|hxDƌځ "ª:lޠ|,;ޥޮ;wf޴^rwֹ:̮JK" Qz;}`I+Tޔ kz~`*Yʽ4@B\ݯ mcޔ?\ÅNʍї|:%;N~YAr; za¢޺19 4Ƨ([NmFMޱ19'Faɴ{ޟް^'G;Bߛ_q5ߐ 9gN l=UvzD߷.: I߇}LNߜߓ|k.X!Õym2ҧ|(ߥޛ,߭1nJ4ߘ= tߝ;Ĺw߼ި Ni1=gEd[ޅpˆߋPֹߓ߃"Ɩ$_ߙ ߳Ô `Ҭb|};{ޥkݩ߰ ݰߔ ޳=xߧ ߸ބ U#zwÏߑi{ߛ_ ᲃ S|6> "J$߫2-,W[ߚߞ<2:S@B{ߐ tkMOߚR(sAϭ,%.xD:3hnfhfSljGCr?P>yT|O]8&-ߢ+ᐓ`6{{܌Ul@)$oz3߱= Mu7<=(|h{1᳇Y "(D~?7 FZXRsʥ{ou˟ut?,+ 3;AIt})!kށΞ4ߣz1*Hq0 iLen޹{.ž~'<ހ*G3݂݅4G>ki@#}l ܐ{5Ï H4L2ȝzeRסEWZ!l *JMKxDMF݁7)ͮD!݄hz)#XV/u0PU<5=E"i֧<'eCjWs;NJqzi)ݠ{XwhN3_|6Nk 8ߞK}kay 8{t{ߝ[sߪ}ժ"{VcT9i֥+Ubݽgc6Ue⋭޼#}2ք&w};8܋ss⋭Ts)`!M=E݈tlah.w|uA@*1_)RzE+Q3#S4 "?կ1t%}0֝3j0q<>Պ!s] ; =E#}X-U\FtOVQw$kk<AgγRfdz 19]խF)v)qέ(C ,#=!R)f ׮NiȐΆ(1a^5(F[1H̝Jr4i~P-Ƶv݀GCq~oҵVvH`2c|~&-wTy]y6耹~`~C0!:z1~N)ly1Mwy1x̾yfF?p6zAy3puxdwK88yNu~'!ԽGY;㕚]̝[eĺȿ\x;+YAY:&XmXp2Xϵ̩Ze^Ͼɸ xĚLߡ2xמS຅ksovr'ɡ,Ɂ0ɉϵġ榳wĢESϥ4՞wͶꡫ)9%b)澤__ɬa,Ƥ:=ޟ9Cr7z~ĥABy@wPs0xz8x@QۋMx zǐ?ŴߐbЀ𤅛vj{xwtɀpv"n tz珛x&Йən yV0 zPTuWYAyˆ:~v5wy yPy/ /'=y_)@yx݋8yP㤠雥G rߥwwGrVנMɈjzVx7)y,y.|1P4ۋ7.:?B~E5HJMOQ zTi稀ʐu7aJyx]2,皛V=~Cƍ Ao$U+Z1=LoDbtʐм0=c@Ʃ hʑTzb>C23w Ұ`!Ξ<矡Ў])vqgcjG8z洡O ѕʺc櫟GȢġt[r &( 迦,ܡ既2Ϝբy_MM|` Z=QNhd "徍?kmD&,.}j4ҟ0}2kYǃHˀ{xr{~qSaqOJ P|')<~NP̦TV_ȋ|*ȃ!}#Q?SU 48~`Ұ~=~]ṭeҢ/ޮգF~ l 6LHu"Cvj!5ڛ{vv桉pϳ~8k ˉvGX wcXvTvLwuc w#v`v'R~~~yvN1Zk7{ꐝh]fi.cMk Vӝ#}4L](.UR;]{㝸բpbfv웝l쟢ܝIN쎢|o띃tˑqǢ|涟+ϢJuø ƲHߓ,雂7;0=˜?VǠR"#9-Ǩ ǫ3\卵DMF;&>TVFZˉhIu4UPL鿞Xv+Tѣ͞|Wy{ZF|T;"jѠd|piwpbM'h:4۔CHцyey7Yqc@-}鬽3̔C6҃Iu`/̧̩|馎aVC)̌HvZң ã7w`B?|=~Ïik^5Q1pܰyvvAwJt vIw(:z w?{ w鯉 wv.ķ wwe9H w/ZZ}zU-wU:扖5wEH.E/G恖xjx;dw)'S"?x1̔ԃ²8^4蒚9``쥟90D꬟F꥖nSxMo RڲѺĉ湖b[5xcQN{ʚa|5def޺ɠmٚkĤp[rm~3: JR&vwyy|/xƶϘ՛#ڝD"l\ eS2ti~7NL+JyxFH)QuJyꥥdꃛ$Yꃛh񤈠t) Yy\/y!g7z799碅;q? 몠ZD篠HLy$y땀"뫨%8z(VІ,y0UkӠ n:=xW{} 0wVXVPZX$`byehPk먀n.pmsyvRyBy| z5؆Jyyz6䷕ӆǀ~u՟$ =Mol9t{9r猦Wz=zʊDѕk/[+vyAwP*E$.l@e%u@h]뽟✭ɢҡ(ʡsﻦ ١5(9m>}8;_6NIK\$쀦셦y!"}U1⥁'^l,Ȍc/VW4!*Ѽ1ʕ1>v`IcwA4j S;>@/SDwH5Z섢\澡jjU>xXa{bwײַTWn+riulz }웝?C | "쯝m젢¦&U3%|譸˷o VVƦ {%;:!̢{JTآR8 i8:4ƥ4/|NA (Ipu1y86;iCǏ ѕ)$pnIO 5+򟔽qX_nX{ XB)j ),:<wRPb<fmB+}6opd xi7fAk;!Y, )*C+a)B+b[ك?,7WPB[\ !nV2[5r)^Rr0GorhQr.# QZ{ u".BB:f $dRJ_a_C_k]5'h  Y^s7Q+a\tAaO;_%- sbq7_QL{ ' oZ X\g-A4BlEZ|4ZZYjto5Xdt+X_ktZA diWJ_C.rtY=Ik,<y o_\YCF9weseqObl,5\%"^.OC.ma*sRʚ- S;.aJ COm!.56%Hl6wuC Yfaw;I_7Qi3Z4Ra?S(k]H,vebo.~T]lJ:+*\ .9]wBYe_vqjo.es/.G.DoSao.WnZoR: \_cіoY}Q4jPR3BށZDGXM.ōYPnXv%BMKM;Z"?_CDRV[*MbaTIs9c upx_]o.\S֯ Mb 8]qeo.#R!B:JfnZm_S.]se|>i>/@ON3a -$_jkj7?A_sGU^-O PCuk @y%]j"U `D 'qXmip tPbTYek]se,9R.n$`Bos^y*W b78`rLaGG**G-_a>i fo.p`!RO J_h ~Q`ck]Xk$  +B^c4c6A(RGJkM& ahc+se 5d0ii3!.7bz?_j !DF/.tQMN.}L.8DzT*q*YQQZNZ`bq q{\(%)j_`eGK *Y)GD;Y_nu4BcGGDjj*Q#Q/1|u F`sQ|c[QRN>>==AP ;ELGDIX[J\a"dVf.Cab`aalYleep`@q`   u?ecvoq0"d`9$cjX uZ' ccasʘSo),OR(xg4FAZqc=A+5'F."rcNlCn,0tUzHNN cGVnslZ$HDYf7n._nO2֍2H=~o30m.)tMM'rb la?+Ad(XmqMe6å:pX?-J?r!_&se5d@Rbo. [b1pOR10ZcM ZNUX:A>LޜL:w6MfX{hqjbmI:r8e}n+`Ot?$eD{u}%I.K:& xq.qM WEy QJIACc3O.7[`a=8XY@BB` LL]qo.TTAW8 Qxa{a o)NLG`vo h uc`xYw!L}\Ƴc&5`:\ -`vt? B:a?TWvcN=QQ)ESU$oNl p | wlboB:b5M5$<߈_heaPXbQ`DeuRcjvj=F(=@bZBb+T84`Q[#]LJnOjg\8[Mj<;lH~ZtZtM2?q?l9;PTIeYa\cdi' R`tb)\kmfvvY *8,!4QcKG%)8` AC+V@TTbG3__gq__b%[NoKem=QK8< c%N__zt?Ai*4]`;qMO_ACVnK8M<(^Y'%Qbv"+Wm-^5{5f7U\.^N821tlmi^4XaHQJt$Su e3v uteu bmydFqmXu:\ugEd:>Ln wG)lD  TC\'6(R.DZsXCPV~oM{Q,>!ȰKj<[ZO+=NR>OMD_~ 544LE*>TtW Zo&7MI [tF/ KEY8u ;~^"KdZS*h]GFZ&g_bF `.{RLKH W J-;~,uD'۽ͭ9³]jt5a䭁&r|ZD^q3{/j4e+(d%"]]B{ei]T :gWH{*-*fs,f{b30f ftNfU^O(=iCJ3#6fyvfMXY8_X Wf1u+)G^f< `ftffhfs骁a nftrf$tfDyfߍBR& ?0_^lx,2kP6d7idglEg b;`X]$ f f,5Nf,%g  ffvf1fu^& 8f?1d2f->f~k*mf2f"fff&Sp!gnO$gES DYpR- =j&V^ +-wQa<dUG53Z|5$0CA=H?A|uCZm|4 H8`SEN\P RzOU+ Ws+u+Z!"N)fcA~f zfpң먵$X$2 |I"E$) xP^^/k ncx $ p tG~vD UwlÇ;[1v$R w}I1L A15W448v:ԄPv M_do ښs ”"Lܖh*#xw1x;x# jB*2ϋ tKǯEG Uv\_]=w &j7zQpxsԆx|ކN+_aCZJNn7T+uqꤲ9y5gmp…݅yqcTq8΅хՅކ؅kwڅ#~'?+@qzfyy񅫆{y_y1y9ɏy5xNףȆS̆'yyφ$'Ԇ*ӆ؆/1܆7l\Qm'ۗFkI8ۆ䗐)zS䷔Y#Q1 =2  v 0k@LMﻒNT܂\![i*AaiЪÇ-@)@EHߜRm REt[Mf=ݳ󒊴mbdՇӇeՇ|<܇*㇬g~9 sVɯ\ݿ_ŇLJ+3˜|ԇ^uևއᇑ^y˜ qテ8Ö+3|;HfP1 V^T3 @ʸh8?ϸ%\2*-N@AYX\&ܯj*fi--]8h:2 ,8S|<{R-ZpC}I?:O-^T%XѦ}_: cֹi\Ҽ Aof] 3Ҡv'h=H܈߈ՙɜ慣ipǿˊe7>l7oDx𺢶]ꇊ*߼:wkKĖI橊LoMTɨ!S˸xȊ"]\^ۖcɲh'ŤոmJyyE/슳xx߉q} ߐx[7Ήx'ŞyzxhXey N1z6>:=]JTإODznI0#VxyGyJr$yk~6TZyܠH\'ۙw9w1idz%krxxɴ9w罋.Ëȋˋm΋yыy֋ًۋ݋DyߋszzJ"-n|y)ʖ,ް8 5l ?$ $$ '/)!G=T9ƹьZðLhju` BハtG˄~g>)߼Ѯb^R-TVƭbƿ'%)ƛ,p0;˼(ާZw=n~Ƹ:"]ON˲vogiѽ/c{⼒'ʓ Y[\Vu@џw*yMJP{7 ^+f͸flS& vxDLF}VтxDB 8钍 M[O{Qˑh+F:\틞@Bfoh鋽j鍽ln+(>t+)jy6Ǽ逧X;n_˗ ҭ ;t?ˬħ3v"9|)+Y罝`ǮI6ǠF}ϞF}1p*ҷݘҽ҇Jݽ߽Z#ҕ%˴ǮIϞo̘}?ȟΕUW+ 6KZP>*3k YAs ,2 l }Ii/+=4 ֵ Qdvc;!? 'dz+gvH.yP2yvHW wy;. wCF^=H0φDhφH4:v.;sǾ׫]Ðprtu?wA ׇ2닮ܷzy~tĥԉ}-}Ƞw~iyk~CMϒjȐ_vwДM~-wݏwwź*.}VԺx qeķɹǼvZm1y{?%)ܺplDږwy%nJۊ'p)ᖮꃔ!,+ߨ-Ʉ6#+23Ą̕ď ]毐Z VŦϥf#Ŭl ]hɰύkJyHykwÐxƐPːmΐҐeאڐ zܐk2zyxK!wYZxKvxx!;-yd+z@y ~ ( v,y!'y$(y,)Ay,0s2PWz8:<@[Ր~6yFxIuwYy0hz)~)ozwaYy0$Lfy0ifYm$qsuyw&ȑw|hzT/~T/iyYy0{X~zhz{X~zhf~X~zh{Xh&x8ő#…#Dᑊw//ozi y,vPzxUّۑXݑߑᑊw/h@yT/)z/oz$04yܗ럅Q | ۋWzky"$/&("*-/14xr79;=v@BDFAP/S;V]`b[Ր&koVdy$,2 | ^R  q +=m$zS~Gk+_<<ÒHꥡ}toZƝ{Xg>)߼;zD NДb^R-TVƭZ," 'fKh¼n/(@>=n~MONﺽ|-{'ƓۦY!߼l 'gLަ\џ i ]cZhwcZnAџw*yMq|P?|L{Д{7 ^+f͸flS& vxDLF}VтxDB 8钍{ C K7h[%'[S#O0R?A:X@6KZP>*3k YA"/ l + R@̛ /+=48@\B~QI}VLhvvIQydw~h#y`vj[w mYvEvyuDw}yb}/-w@w0wvQiOτՔ6-w̢?x,R3}w_ϞOwMf֦ėmmDږ(6̯$Ė!ěZtƯ ! 0 Nζ턡yvv)+-x0B3}Y~:xjճ?B~ڗIvmQyWyڗ_bІЗ9…oIxڗ\~xP{%U…,=dzp>9ąn^y@{y~dz_ŅWж9ąŅ__n^zۅ}:z8z.ėǗʗtPϗї[՗yؗ"xywޗ6{7zꗿIz)l w!S$ E̩4 +=⒩1$Š~)ÒW"N7$:ߜpߜI䘸LaKP:RZ肴#ެ= 6WxB͘P+}G ֱ %7#ެ= 6WxB͘P+}146a9 <*>hH'%Hΐ6I=KN֙0fVu@IVWfŸcθf|hljDl|%Pҳ2suu|h晟ؙ I=M`.]|n{ cy˝s ȡHJ&=UEW 墈be+̝򽣘Gʈ4Ƒ@ڙh7H =Ke{Q` Ob '%¾ {J|v/ ,2 l F~5$l +=:^~6o"#IMWȇ~*v&w.v#揄G~v~vEw}~0`y%~X@wNDw`J l=y5yiXM~XPpSC8b/0{EZ\ò~= ?P emuPWvxF$b[Ϸw]X ٺ P`Xgpl"H -&qf.U5ɵ45xĖF KϊRTݝ7WZfh lͫFmQs/QJP{YQ_V[P?_xxrxɀPp$zꇛ{{yj%x{Tnzj 葒葝R 벛B筠\F籠~bś:țy˛IzΛћˆԛ)כٛۛyޛZϠ\5Ԡn.IIzIY yIiyoy!GЅa|y ||y |lz|y |biy| y~|۠kM@y睲0369ӆt+)jy4L`>r{GDYŧO{QUW+ 6KZP>*3k YA* ,2 l  w5J ^Q /+=6'w:^~y>:yA#)CQwq[yTrx~ʼnr? $y~v~~yᵎG`y#yy%~XMwWn Ԇȁ{su~XwzsxP8gt0{EZ\Q9= ?P emuPWvxF$Ÿ&;*㖡yȟYwȋ   P`Xgpl"H-&5ɵ45x>>֞S:ĖF KϊRTݝ7WZfh l FPxK/RORwxUYy۷P?_xexhjπ%Pp饀y{π y|{πFzjπyx{π&y'#R 벛B筠\F籠~bś:@yPykY ІŠǠ褀ˠZ.ϠѠ$Ԡn煅qqqjqqySSV煅r ɓr 蠻t2lGrfyAԋyPy."y%<*5-036ػ:Jy<^MzD.GQ1*,2 |i R4  +=}a1$>S~Gkz8q<*Hꥡ}tZ$P葌X_PF$vKꄼ~|5yt|51yi|7N轟@@tCݝzo^JѮb^R-TVƭ*bƿ'%*)ƛ,p"u2;˼((qz8qyȟ讦/~B=ܼ4TOZiujѯK^ghzujѯ2 謝ujѱ\➟{!j#𰢚a}&K$ujѯwhKb46*:𰢚쫸nAџw*yMē{YYVzѾX[Y˽s]Ÿf͸flS& vxDLF}VтxDB 8钍 𺃑h+F-:q :q \➟{zq 2 \[]HMbl|h鋽j鍽ln+(>t+)jy4L`>r{GDYŧO{QUW+ 6KZP>*3k YA )l ^R ^ (q +=4ć$Ky(6.k"j<յ5f13zѵ:Nwˉ$y`;vX$yja0x~cUk@wCZ~vUvyJyHW~cz'y5yO8hwF8wY=vCw򉽨~xȡ꾹ȐҾݾMĢXĵv@BKF㵮ϙK0HaUXܣ}imf݌2ۭ)`em:X iݰ4ᲴeH9㴅㡮񴩮"Co|*M$GiA׭i*{<裴T$Gii6pa蔮4ƭEx㴅`A˭𴮮z.֭-_ۭY0UXMD& M##}Hw~ ϛtyIvovv~~>$yZZw~ZwvzvIvzh_vv%zjy[ڛk*yn.9y5ى^;=1j\I̥rS.-ձղN֞~ĹOαAО/mwyԎ~s95ɘeե6ɯՙ]kw~\} G洯\Ֆ)d{¯Й 1ί v f߲ڄ|k+o쯟4y}ǀ$1yކxcby 7yꊠXyj2T(yߪkw(M+4.՛19y4Jy65yjp~x`ͫcʅOlKvMbP4ކSճpޠDr\ˆv_.wކecR~znbKrm wކy{N6r뗁Yǀ ,2 l ! p/+=3J6 =ϡ VBD^徰Z H=°{İL AȰC K=C&U hH'%ZQO$ZŸcθf|hljDl|%ZQO94$Z'FU"EG4מKrѩ;}= Z1 l d5R |I 6" +=uwy"y}>y{gy@x%rzvZwQyvvU%+yb:LDyDy8df֢@քϟͶ/ե# *6IIJմ TR+ϲ󨇿qjS~UnM ίrź*ՙbc2ʞ"ϸ]h4̌5oZwvǀ"ós)-=˳6 >w׳EyH"ݳMjH"RYy*Z]:볭xcXzf:i*yloZ~r(Azus y 0 2ͬ|qsYy nŐoyxZ1 l Q4 G 5 +=< Ψ5 Ϋ$ϡƺK VBD^徰Z HtYx%蛂R"?學:X@6KZPcQO$~Aϣ2 l $! ,/+=Oңõɵ}ȟjӵGֵXѵC.wG?!wˉLx0s~?$y~ ˉs:zCZe5?$w$.R D ]|m#yvtĥv Ȳpw/.`83}8XvJEZ\漖KOwQx[b*YPWϢS긚[Ϸw]X`jaϴwۊw**}gɹǼ擶,n֖%'p)\95t=)#KϊжӶ}_8 f#Ŭiɍkɨ)󶮹CcByByŐ޷>$wYbQwϯр yXŒzL7z鷛785i>l@Jy?޷BUEG8a&%,za)_fy)w ۠RLfygxl9wź'qsuy(fynܠn|y&gyK耘(qzܠn͑+y|y&'оybtyyŷǷʷͷ/ϷGwѷxӷ/շط'@e!z2xye#2 |5RF~ $Qw/+=$3{~G_=ߌ Hꥡ}t3]^VʓXg>)߼Ѯb^R-TVƭZ," ݎƛ,p0;˼(zis|Cѭ=n~/;UM@OסQKbэ6d7giѽ{߼ |**gʱ+>TBw*yM5湷{7 ^+f͸flS& vxDLF}VтxDB 8钍:M[avo Qˑh+FV6:\틞@Bfoh鋽j鍽ln+(>t+)jyBV6Ǽ逧X;nht_wǝ ߁_{Lbdrčej;lӹqOǖOxz}0~OˏYǹ v"9|)nY罝`ǮI6ǠF}l Ϟ̧ 1p*ҷݘҽ҇Jݽ߽Z#ӹ%˴ǮIϞ̧ ̘}?ȟΕUW+ 6KZP>*3k YA&!Ղ9 2 l 85R}I ^'p +=GIKMOQvoZEl^hϵc]a[~=jxJL~I~Xv]yPGUW0yvWxW0ukȉv~ovU{UvCk@ w[[{4kR{Rc.φILvk;~z̾߾꾘8zؾ۾߾߾xξ⾜徤ѾپȾʾyzݾ0߾_zྑ褤~yXyըSֱ) `;|xJ Sޖwwղ"ϸ)M~ Äô'88mcvCsIpiJGt2ԹROWxL/^oαS[Ϸwfð|ÞlrnӲAs؏z4|}կUnѲi񺊿̌Ĺ̴̾\Ֆ:ݞί հύkɟ+~եwʄ嘆基Ȗd!ÿ8w!ԥr2ijҿ`7׿MMe8f$߿ZWpiɯ詌 xwa@yxxxxx #xٳxg\a+z y1yN/y(*-/"2l4Y&w^:E5II>yIvKvO4ZwRUX#Z9^qYy0bYy4ygyp y y4 Dygyp yD P"|vN`,c.ԅwSbb@y@wByԆYvxK'z xK vYy4y yy7Yy)yDl?NyhYy4y:0Yy)y:ھygw:zByyS5y8wzY7%yx0%yyh|Ѫ:0|Ѫ:0Yy"M0 y:ھy%9vAy ֵJy$!Ղ92 |05R"|I$sC= Ψ5 Ϋ$P)¦qJ1$i?Qx$e"+z۠04785i>l@oֵJytwŅ6f2[Olhy~zNg\ ۠ LNf,rzl#źŹŨaŦŅ\w y"xJ whqЈvy\'ӆy~yԉ@yūŨ>ړkƐ/ֵJyƶ $#2 |#5R j"p +=3Q$YЍjQ^_)߼Ѯb^R-TVƭZ," fKh¼n/L;˼(Ύ=n~<M@OrDzvSW ųƓۦY!촽{''gLʱ{Vu@џw*yMoǶY߼9^+f͸flS& vxDLF}VтxDB 8钍:M[a"z Qˑh+F ȟD`{ѱ@Bfoh鋽j鍽ln+(>t+)jyB 6Ǽ逧X;nmǭrt_wǝ ߁|ǭƀM h>w,r4ǐ t*wڤǾI0ǡOoDzg ]8;t?ˬħ3v"9|j Y罝`ǮǭQ.quʍiǥ{z}և}ǘҽ҇Jݽ߽Z䚕&˴ǮIrϞo|<?ȟΕUW+ 6KZP>*3k YAvz )l 4! 2 /+=.|Kyvv%$g~Ȱ~v l~AvεGv?\~~c=Ā~4$yQ湉~v6NTYeH`!w1wȶȸ.vvȍu|ȼȴxv8ȼylpwȈEZ\Qއ+Wvʞ.}W")R ȜĴwȋ ɋ= e ˰ОɹǼl"H1)\3Ą̕Wx˗v?ɾKϊMPɴVfեfɽNhɰύkJy~qytyvɳxxMzJy|y~ߐxz)Cy$x+ yXŮ/z Jya785i>l@DC|Fʯ֠xGnttM!ߥW~zr2[ afydfh֠xyfyyFyl2[' y"{iɀ֠xyZnyXy aɑQ(y‹.Njʋ͋5y` ۋDyyBy?yʳDʶy'z6+)|_5RA !q +=p${6 W?ƽOGʐʽHꥡ}tG˄~g>)߼Ѯb^R-TVƭ" 8p0;˼(w=n~CM@OK˗2W")R / Y!W߼ |$Y!t+)jy6Ǽ逧X;n_˗ ҭ ;t?ˬħ3v"9|덷JX}LJɹNh/I6ǠF}Ϟ̧ ˗v{z}և}ǘҽ҇Jݽ߽Z#ҕ+%˴ǮIϞ̧ =̀}?ȟΕUW+ 6KZP>*3k YAm#dZ1 l @ R /+=4;RXvҕxU!vvpUdveKwRyvZwk̘,zw~uRyIz›k0tLx@1x*̍9y|j\Qw̥r1*բvձޏ-լ̣ ɯx3Sꖟ֙͜|ֱw5fn4|Kx~\} TZ'ɩw/\Ֆpi#UAsjͨ jklΧcmՊͭLJywߪKxӆY}ͿK ?WʳSܠ-KyX~2y=8Ͳ;͝>sCdzfWӖlv$1Ӳ)vh~7yQv$1vӽlwӖvcfv05*ysZ~pMv0>\ӄ>Ӝv}܋\Ӿvv{ӽ\әӤv0Ӥhv(4ӼM֛yvӤNl3Ӛ4`ӗE_ ӿbۖv ӝ1lv$1g(yhՋ\Ӕvcvy_fZ#RwoӧhvԾcv6ԡX~Rw$~.yvhCjsSӴ$W,~hrhh׋Ehpw*hy~v \?~QxӮdwv̾~%~x,~PSvhԋ߾, ~=.VwS~9hظwްI՟͵ԷM~̩3;֌=ַ%կDϿGgIʿOxLըS1xUqޡXֽNZtc5~gywvoOu;Ղ֦֦@܊IR˩֦Fݩp=xMpiUlr֒Sկݩq=n{EֶA||w֙3J'$zφ@.Ũ.Z.7.$֡..x=ydwiz//QxiN{׸'iz)א:N{׸ y؊z7ׁxiN{׸ yOiz6v:xiN{׸ y@iz88xiN{׸ y}fx:Cx1` ynoq)Yyn+Yyny׸ yW~`x?c}/w8wv"yTwAzZDy$ Pyxy&wyA0y~_~aԛaϐyoyㅪ݋nd…z؉*؋א ڋyf۝z"صط(ػy!9xAxw!xxA!xxAxO!xAx@ y>yEW'yEW yW yOyEW y@yEVۆxAx} y*0.0Jۊ0yھyy#yHQyr&"Kytշyke<86:wvkwvxH'zNӨFzx[~[ۑS+o*80ɷ1xdzNx|,x'ڢ߳xP>tyYyuuFYyuyI2yFYyV,>j}yFYyyyIAEiYyyyhYyyEN=x4~&y[p4y y+0$1lDyp@Ky7y:6y xyX@%8y Dw-w,ysoH.dzYyuyyYy[~yMy yuy9Yyy/y;ܐ;7 Mx.dzYyuyMPyM|MJM|M5MyDP yt :BJYyt]^Yytyuԋxy&sǗV7yp۱/;zyJxԐ/`8w}۝EoIzK ytTvYytz5tYynTIwYyny51`N*7z۫xZԊ ק=yԉ,6qJn;܁o<ëܿ"Y I)yAkE(||7ޏ=)p<)ݪ<)݄2zq&(|{=){S<){^79t=)y DAkEGݹI)ݞNݏX QMSݣ[om<&M{\]+ҮogCVlͰn4 7ߜv*&z݅_ݜ} auSߜҏM{IÓ_+Gci>7ebo <:݁ 5׊LPBn o\%i䃲,ǐ}¹살PGV2ش߲r+ տ4ݧ֟{մ=ŭ AZfݳロҮݜm7;ݠ_ݠ+$|9 ޫ = IB= 7z>JAe"Jޛk#RI(A'%,ސ>f"3޼5l `XR=-C?nA-C9L٬Hޥ ¬NՕYQޗT޾R«Ztތ^acʬf4`( =pLs۬Yˈy!SͰ~ރR†μΈΊޟΧSn0$I|4ѡ!Aಃhun ]FH?ߖhu%]_ 䐓/4pʆn l$vOo u]_ 䐓 p*߸un ߃ap$vOo%ݸu]_Rㅒގm!AಃgߡẴyRgߡU߂]_߸2{ p%ãߨߝ߳$vOo ߨLN]_ 䐓 p%ߝߨFH?LN /$Ԍ p%ߝߨS$vOo LN *$0 pߢJS?ߨ^ẴyJS$N Vi( pߢz{ߝ`$vOo{LN 1FiԌ pߢlGIrDFH?ߪG߭N ߭NgʸFNnʰ:a܌) 8m،9Pa (AI<Q! ޹qcG6(I3'Ŏ'!Û(| ҠrЩ# :rS/^:fuLU 3o\E6M.22. L8m$))XC]mp'[MbϦLḵm ͙;{T\2,"uڴɳ"2DT2uTasxۆg@Ac4ݽ);f86R_{|zvUQ͑e0 0p JfAc1dp\i&j!~LukpaR\։.Q,*uRQeVZhWAGDsTIT!^z_ Va)cA&e/TiСg7l6YTSUuUV[)ItZo"iFc0dr6ecq/ 餔Vj饘f香.e]eD`B`=7^kE'V j뭸뮼RU8uj*AlA$K11m&~b{(`ĸehI嚤Uڦ-芐C/%W^*oIejhkO!C +f\h>7aCUX&tA[T" EI$4f{I/VVlW2HCWT*xmlSY 6<` V|*JZ` i~$I|qb{27Ȫbܙ+dRR_YcMR2hW,?Iq돖:Mhݬ=?2 w~:XA 0- O?2mz0 w;܇2$Ai Y\ F)J8|uʐwv~o}UuIbiB'pPhr$~N&S:q>_'?nF/pxuTdc/dj/WI#p& t.oVpEG12#kn8O&m&qb!Jb$y*]$z$wT&BBp('T[GPINPr0:OvOKo&l&pr*YǑGIb)‚V*/@3H6wƕvR`]!q#^;=eEa$Q\(H8$EHqOhQDR+8YZHf\&B\w%" xv#mEXuXS?-=Es$X8LDgXR:no$rP!15a(,upg3OS(pWg]`o 8$Aw0 *%N2wsz`tPwҁ!(C6>b.LI6Vd Dk(P} 4k Б "9$Y&y(*,ْ.02/Pt3@6 @420GY32'M$a3W504 S 10dyH AjD-G2k0kYvyxzY<TL З:F>TTESRG o$s/٘)< O@YBpCLpV= #`yGET00zV9C`Z9V9d)9H9EVE Et2pڠ>T0/|QJ z>6җW8I,"ScRCsgDYR^Je7*<`A$@B@I  yG>@S C` a*ʨzIfFmv6(*c!ceEn.(h=Q9 KP>@ej^*r@E:6tjCa뺯> yа\&_KqBW*NǪxzGˤG !' >ñڰy<ՙPJ*#WQ^>:F (>/$Cu[4ouTѪ/.YiPoP@:_&\tJ>c)Ʈ !d+55-8%%m@r*H{u pkZrqG~gtz,|** *;%5~C0A:[<&ku>d[>@<;%d@bR!8ʥ;g[[>izw%.܃Z[$9nkQJb!۷yk Py;.j[[-VH0 Gi}ڟ96́t6٢*KI9ڥޛ|z1J<IE6lnb"0!'Km/6o7"lP!vFSk$;Z9Hr % ď2[bw*tHp d1[<ƛ\UlUPP=p!kpIpǪ꫔)vj灟\RaXvwăĽ-2<2%J -"VЁ@]< MWzzмG!g$(=V ;Q ֩k&[ΌLm&.[6$Ƹ[ک}ܾ-vL|Hy?qZ';Rp!;e5LJ_m|噻nn;uyX Q>Hq6Cl!o`ArAu8&(ɫ& x:q-ϭ5$}ʦkyh0MQޑsk,޲<%m\U*ߙ,VߠX9Uzn7׾^Εzl>t(h(t ""H.}(+f*]RKzE.LU#X9RΤbwԦD88oF+/jDuþ,hp) gB,V-V#~msYLl0~kLF&w7E~&%_r!֛6/JY sxn+D{SrB-B,3/Unq'޿Vuc!_e{Bd"/ ̊׀}w bz[-h<"yFĂSi_fk1 -U^jFnW!6@ctLR!QMAV"ݨKx-Hh/M& CqݿzbXe6h|@Tnq7P6Z(e}}YId.^ze퍖{4e &_,13Cpj1q`Jqtoݽ>#a>?'κxd}M(¶=bHk&]綜2L>2W|i:!?wLrERy"RV?[tx?PV s9:UsDD? Ep } [L-X@2 3y! @LHVu(T$6e*: *+ M _Z0"CC'-սpUW:3*',A}e<#G@)#:P3Uj@ -ۅ2#bE¾0'' 2w'ݡ2vg[ fWL;f8o9Q 5pipXс Sym)8G[:e@F^#cq˓q ʔ-cR*b4?O8lI19W^e*FHԠzWEo^rګ; $fO,8 q=7\,{\-=a ,jQ9^#cD4zO-6fAG_2B9KfI LkqBw⸜aBde>RV㮊fn52JT 8>]( /lrP6j;cQ-2 5&Q#+)dH+uAYNɚtEPQe`oYHrnK;G8eq>5hNGl誶pʀ_4.[,%FsZLuW!n-7_Lag@Pv<΁{qGpyQrr&5ƸAYiLm_p͖NO@ǸU`?Ԇ.PLP6*B ȓc.A-7/bpGJ/iɱں 1$v|/SrɢZo,tN8TN H-$C((K f@e=Ռ cM 'm(FU2j& \TKGa>)(CX 7`ZXeU2iި`I:3;ҭ[6TN7R~hs:9e$XFdi7Yf#W-Rvj@_}oش-*<(\ C`8t˗V={!{,v"'u31f"0ZІo.!bܳb6bmn6`>kWYw.[`/g{?62e?;nSR?_ Fe0XVPe.LJ2Иsacq ŀW378=r"Cߔi&~'kn.S K3ڽ躊iNllpl|rcUh%CTK /S͇x/Z`r'˙BF{Tj;oP u>$nIn.S6Pm05ːdvNY >5); U+oc7DV*kB65<,4#Ca\,5݆Bcp+KRk"% $Ǒ)\%}:Q!"-)5 Gpى##Y(DY&+H%tAG `0Eˎ^#7EqXe!Z X$` 7-ӣVaL2ISbd\1A(,ıHhVع 4f=4&UL qE-fYWl|9qf>9(#mB6Fbdn0^VTXC9&S?4@Bj.5f,iQx7cLIh=-(7 iN<뼚[kv+o 9sf 3lP1KgEqj;2ob/1xdAgLUvϱy6l 3)PANjlDpku.@.+wXE:%TYސk[3Lknj`6Aak &^0 #2HJf̙+L_Eoͬ575403xeM4^gAW8<6vz)",:VЬ{s;KbH'?=dQt; ds" A(%6U Z^o# QS* ׻:a.v^ھ0zM:`ڮl䀳QFd=doKv|PfٝKiS]׆x}m2^D#h˵9KzȂz#)G HxLF /t 0J7`%TJ2``jY 8< .`N#~x8o #~x8F7O\ p*ţ\< $ X `/po)(z|q8 8 <Uhp?Lp?G?dl?.e@r0~< a>@,sP9Yw[^>|S?H:$]yx2x5@R)\0TlD8"tHw.N9@gr/OrNy4gOH fL@rR|s9v:)GVy`>= } Р.C:= :t:O s@xv2@=qj ơy=дg2O7N ;: cL @y|$0Zm= {  ~Hs ?Qbx!u%8 H =Es⼞@T? ,._gaЁB2ˎi,k_}un:]uΖ&=:&OU98XA~;x] wAL]} yߪV.FOIp4hWu^{G <tNBzo=՞XW'sBuby#t;'`/H0xjGs[N@0E>o$y+g /H@H -@#Z8 < HA P_pӼ0 Ϳ8O1@oj>$==^At@' K<Hu@@hy@- XdH ZF-$`WU^W\o3=g}G#pQ&+>Hiq=Zb^r`}C$\PTRn7ud9=l (~tq0 `}V_)壽iy|ڿ1+zX>4} W/<~:OM>`KYQOԧ5~gk}}>I{`;h) 1" l{,9@ @|o@|KyW0y& r^7HxPz*{$p;#] H#[Ii`$pIH6`,5`.R x+m^կ 6.OMp n%o;o{` ƃ+Yh`B qR "GK~ᄝPQa[E e 7U,7RxCbP,ІeHaLa+ևaV2c3VG_ X#unvFb(F)5W2$h'bi(-)h 5FcL%qbU-MZ݁l`o>ws<i})4E;+Fz; obBf\ 10OoMVud_d`I$x J-!0?LSd7NvQi?  IR9 O]v֘UfXeVI?UAc BH|AC؆ ٽeПFµxYiQAl9(7]y@YMQG,D\E2iN&NfUghmu͕thYgܙV%h̀ ,2ѡbF8gzgx*Jh<g;Fhf2P}gE~&gES{ LR5 @v| 'ڽ *  W=!HH~YkТwTh wh ZYn4qVh&nۓfEHi0fWZ^vli8b0ե !Ƨ}i$ahi槉}l(Ȇ)i_ZF&o2jCp*kQh8qfN8zuT'$pBf-DF}*6aAg6 iE]ChA䨛Eh)E g#Ȟцri Z~fE!zfdIbѕEnodl#RFƑjVEdZZEVȎ4~hbHh?ZM!(EZe-ڝ"bnˠ48|Av\ZlX* +$ h>SKo/4$=¡F"6<{a"̡B9jr uh=j{m YĖ}Ax軍jv!kjf!~Ȯu(jo~>N懷HF̓u(U暁& q!Fښ k 3lHX.G+.b6j2bՈ%Ǎ8XOmW"ሸi"En@%:fTfz$Q%򔵛T&`q &:d mhqi8GXmq1'jm%"莞Ha"~* (;"aݖ(~#A r8efJޔ]*[S%xXeX cDA%؍MX+ƙg-GhY#&]qobGQi8dZ,>䕅@^7΢5A&۴Qj֢4-kƚtǷ8po͸2 LΖHo2GȋvhsXo"A 2Rp|uI%Ĉ14bHd`}t5\2*fp?\Wq@qQAqGpG\p1\qqWA\!z q! r% WIr\"Ar\#'sF@=x]d:h1ވքԃsV:c'ҕaddt)sL7::3MBN Nt&P֭wF:Ywk!k'ᆓUgvt\ՅnR8i6%Z7ީwBuA;0nxw@Ux~YnvP%v t]hE=8@u p@ H 4e$fA>i>w`viu@80*܈SFwgwqYd]S9iNwDԙDAvg ݀E❼rv)9k|w$wdaIwG8ੜG'xt ނw9xyIxC@  c'r!y㉗,~+^xfg>s8 xxffGgy|f |g.u$M IyTc|@uy_^' dzk^y@Izi驞'zIz@z硞 ާzy"WyzGz)}GX̗}z"9^G~ɲ={0e޵%.E{^7{,~4!qG^ƈ|!|=|W_gQy|Ofz笇PՇ}-z1 y.(Y|з} |*}L z^ }3hY-` }*H mOhvI(*Y(:_]y}}}߼a~wy~ swm~~@7sz p|^~Ιws$ HsTp&~ #8`4 `p[ 0%0/* qDl߇ Dq=`qGp9)rqV'pq(fʵXfcOcr7d&/Lfg%9'-pRWeq 59rmwܝf~dqP43eJs ]s8U9g΅$:'isGsitsl yDʄJ$MD7a ktfi}B ٙ.D;8C* eJkv}yJt;]VH*Ql"uB"EvH4kNWCZ3d6`m8֕u% u:[wnsy iiA^ҍrtagA墿Fڭv\YmhYRa@#O]iJ,gwܽss4gu]w9֪zϙN5^-K|gՓCIhU'eyuuv ؉u:d'ש Bqg`*FҝפI≤EWxE'y'x.I.]|yVV%g杞_荞j{Y}yIJ^ezd^"Im^f{:7z)( -Ygz%{qrb{M{'*{YR1Y!~4{Wr_÷{)Us'Y_] u2_zΗR:PzYe!Ey:~ޭ}}\}꫺q}qjٷz)v7wڑ(~(*u{{_rw߻W{^Ɨ ~ݗ}~|WΩ~ihz\g~_Gi 'zyWu\y1. k>k*Nkj^kƪnk~ k*$kj(kʪ,k겾0k*ά4kjެ8kΪ;eCYHôa1;(\KkQ*lҴ$,Ne6GC(5WT#/U𿨉 }(Za߁=ĶA卮b]'<0Q8(@ LcyThXseXž˒@lQ GцUg8at6Wu`8[(=qWԆ7[C _H [AL> $*ճ;[R]Lx" @?8 B7icip zJQ(h-eb,6qRްI[mU&gŁ"^- kS;\1I-WԶ'ZWhDTar'B{}Q,t_saR& 2"kƊ¯#0 >  00]/Ꙍ^p-a[mJkwR+0*1JA@ PmVX ŦȖfPgk؂b  @$B@P@m涅-ۊRcInD8&K R@ݾM ⶃms;&hغ.a.EV<rKnQK֪`*6,[:(&#"&.v'Ykྵ-eIS@+k, zx &f+"&I z0(.T[,n`0n1Xgm..&>$}- U]/ZKg. `㒸>\q\naKʸ&geRnuvF"ؚu G 厵%. ĸ]{7@肹h.je_T<+B;Yn@Kᖷg깿- pP9X en  8W鲹.ZKƹm;ºJ%cnF.+ֻ%.鎸n 궹_+Nk+rk:n}疻n{6&.n;02#n{6 򸣮Zҹ튑iEFz2stۦ.ʛ*ngZn3oy<{Z>-nm@00)+% nN9. .kҹ dڼ]/λ炽o["++ 񒼒zt 첽/ﶼT+ pn[mn-[ڊ/[fhk鎼nKq/[Vn;x꺹{Ҽ/h JoЋl-ARf8Z[ o囀-co¼ͯjnEb/kྻ 򮿖.+[>/V+>̭;27zv/;2Tdڻ%[슿w8 >zNsn ok{(oo'.p 09padkΊ.LI /6D[p:,K|{ خ.|spGÂ@ FpݻKTnJ"Đ.5<q )&n+] w8Z3L /&T)< <<_R= W)#u` 0 EHaq'1K/q[\ p\|+ZwīAJL8Z'eq4‰q<p1.sq/RxqO|@_ Ŗ.VlpƢZ~&AT I k{Bn kpmq̘d.,% ,&LuLGLC@ j"X1׺']nDΆd0WI,0DRqwDkQl]u"ޖ/XSM2SŖzqv&[@*BR!m[|boqe!mA<  o4YA"Oȕ| -@72#"@J#rU$'C2 Er\,?/Dq k._ku(ot,RǢ[¤/wk'x\(1|24a1\\L `2,&;ȗ&)n\7Tk#o"%_2",2:՜ʀmLJ1݊0${}+L򷖶k@&+zܦ'x3+0)+JhUl I3Ds kJuU캻֮C;sʺ+%3l-n!kC(RI sܞ&0.Oӻ;)ٗU4^BAh/FH\#+A*](Qo, q`ݱ8ŰcU&G)~i)\6)%- 8`ssNِº2Zml9.o˞@DokCvLuu2:c:3v?.;lΝ@.9, +*5ǃ{n-βמ"2!_>K?e݌Gt&%t->lll6!N"h[R{YwpYCPݼTȡ1dYB!ܱA6\7#ElYku\ S P2t t܇0 IFφImF^~(scTl!y/r,F Є!c1llG&,!RcIY6MAB -,QDuXk,>p+)EfQG_cl-FrH+,S *mSNPeB)K%|U/ 'Gn4-I)lGcB?&-|dR;ٶ  AB*=__TIG!& +XW&sa>b !euM|&b&&,j& l"& nbΜ1BDޓWm^[(=;JR+H,>O>'X,wb!+ 4[ ]}'%uW=@]a0Y,N&$F@oOJ=b+[]j.9cvdMy$ B`o ϤT/:duh @0 t0eT.-j!>k:- 2Sk. u& H[NhBK^0HV߬-x5cqܚGn2l=cR$?^ A5pxax޿/ N8U &tx_۾mC`Ʒv<ޭ|`x ?2!Λ{+8A. 8m0➸z۶1cRxx0&J̺1x@Vlxމ+ Ƿ8ڄONP8Kށ4$1ʼn0 +=JE}vM3,;3LXE9:+u^@JFP&ؿ$9@p47P&`ƚe,=V5 }m%V5ֶB`&A@ {p7e&cmX姉@>Nm' }a(&&]~wu+6-"|P|iy7@AXyGI_ L`PUz p]9퍖&.4=X 7 ֊L;|7cbX#^}swmR}+lK;g:`vC4fa"hr}70CiR{}P00vncnH~k(d9^>lP'Rz0,ЏrN( ķlLb;x7T>[8=%%W̤sOzAV)zV% >cDًruk[!5Ԍң:^yz)|KwL48I5-hTv9'kXzA zN"UnXx]fJq[,twQ5nzXi 72o̍C4oJ i^$sC0kdSWBѴ,EP0v8='ڹ?N%̥z.ХGo B0G z)T {ѯXlEcƬ+mBQ7U,#E-Ĵ^7)V`dY2~13H﵍b FEbx\<@Y={Ξ>'L5?+*A dk4IncA,EX/ >A^;ڄoQ9n#҂;R!%=/2o97&tݔ[ůڌsXM6I(j~"u>p:]@iD؇cP=.- JEe`.;o8uS[>=򉈳+l0m;OTUm^qa}]Vz3xڅD:C:sШkz/n^{2NPM|U:ުP:n>^;#;9eQ]@1Blӹ Dp,lݘE_Š=:y+3tdCP)B2k;IW:`:pIƴt4xn: BɜmK%# \î\3=:fObƻ Achg(GF3);WO[?0;vb|~w'w<@ktDU}Qc+I'xAqQl–|9Կ]xCSPADK {DYHv`@(ACDMk# e1FǶF;Y{~Rt0[~pszB>1{aQЂzWuEGXA@M-4 8++A {F!DWKS: }M,D_ԴEp޺zd#)|'}hq]J1`VFA?Tb;$+e\/ ) ;Ҫ$ Ush9HpM Q> )̃S/\j|6>\3;}^{2V9?? 1&;7Ij]pm!{ܳLvOkB^߼/ 瓯abU= ove _n|3]?K=ibٳ{k+d{5y?cڷXO𝽝|O#M"KaNg/XMQLL\ϒ?Ip- @1~<Rj1>nS_A.2jW.zmؾnS{U|fI)/jR?S~kAףŒ;?U:n1 ;77;f'::ED\mO~Ij#}=Q@Ʈ~@p ١۰D/SQq\̦3)E{B__M`~T_˿C='~91_P~M l?׿bN6JHM=WUOr'|d8TTRKf h϶OG=[ؽ61?Q'Q0(Hfݷ53-6ADfS?#* oٷ V$y߁岧ٴ~FlGj|>"lۏ}@9uao~ B )Y!_8#|)?^kL MX~7@ϵr{,:wnqD@0'x_ 8T!+X,:rse&+2jjBa ~; ` + ia{&H#E2E- ʥ{sp>h'k1]@c0<.+* R(wFd?(dCg1 2j+Uv4CլcAl|Ձ0 zw@hRn|!^KoG ^( O= Xx_okWw*шS/(T>GW B.J i+5vQFx w+{ @P#V@'HkdnGu!|e@c-W@3td:.$9?i:;Hۭz@ F.DacS1e!%y΁y~^gHC Q𨂌ghd?,dVRpMS /;JKg}d#h:o͇ rK ތW{&SVe2 d`8Nc=&VcpX΢@#*xNZsueZѯy:?֮m-mʸZMQd 6"r(_D=~//^|lU)@ eF~%#E9/1߷>=VW3@}Y:u+pwᇜ lmG :_q57I Z>b&a>\e p'DAc0#Yq}1\!$FT}iEZ )L,9N7 [P !f#[`H7|z>{ߐ"nu}CG#q Cݗ PD -Yz!p% m =sud}x'C._;vVp!A;Lд I _YB!0~@!o]hS Z_B<p'-;u vںPBo8kڬ^6wpX"LRxqBΠX KgCz`6 H_? 5 q$ "a SF aikiS}~U"Jx.a#غ 'awB :i?:uZ:z5]z0p)`!Nd.x(u+֡Cc}ƨ {M'I zo^[`2+ Flw;vގoc4 ;ʝ~ @)A]"rg͚܅h )s'̀)^xKGG-tGMՕ;fƻu簉jbw}G ߑ/**Ad㐽[m'ݻER1E<xw]ÑQpaĊ#X!|H0F{F2-8"L,F SBi1!YMrx_) OA!A0Uօs!K1jx8w8{"I_ޘ!Y$p@7y%C@ݰc $7q7ҫX.l꼼LpC6cRTyF^^g+EH:Q|[ 86&DQO6>==Ƣdt%9$=D`,+K\"Q_Q-bKcK*{0M}[N(*/R H Jf7 (<{i=eZ7B|>.$VL@HHN| $N1$l6)G6x8 xͦd٬ dJ} .'7x1R{C%QXf5]2d&=AyOCct{c=~w?X<( ɀ=8 ԇsҍ`d5$4pQeO0پ 펿q$Ɉd >w) 4x-@Ňn$r#'{_e帷qHY6tJ ݳ6wkIGm0}|\iCB%O-CrX\ )‡RK~I0 QąZ~U=$kWll}ƈ"PcnwJN&(Π'O/pVBaJ ,:,eQD>xOC>-J%=IWsVrRJ^\S %*EIb"'t3$yD"aOWL3&x F'9 %uԺ|;;Hr@nQo|䟋W4X|IuB{gC,>//3 15^qqOUxu[$+ ?^&*ec~BxbXj Q s"yRsfK6UIg{Q|G|R1,]+C2ŐeF "F2{IxR9Ȋ_ 0Na, "vS1DI?⑆e[ C&|mZQh 9bø%$|-ikE;|l b$/xHBTtapu0T!' VB t'ȍ0'kit4XIx|Q\+(g!~h!fO:PJ(.QJ:0t KRUALеX)q,kD~p/8)wd|,y $0KZkBeW KJ9LI-HP.gm6Rgd>}%nkg P8JT-Nkل_1 4^XIaď\^UJ-I}0:r<6dHb)$Уdeō"w \\IHX}0'H "<g1H 6WXd f2CNaqRpن\% l+sXH c,LDbڱH,Cl?MyAÈ~>`;dx}m4*_1Ux9A&@*I/+ }#(B-}KlW̏ 0tK%cprд,q0n|Y\nb@8ZTM{ PV@`fۿbPmnȼmzɔaf0wZLo"6dI0:ݥO%Qa _#]đ A038cНAܗIi,#&0$,->NLlI*a-6yHu@ +cj6~/f+y" 1=Vn 83טЋHIty#@ORqLTͼN r( w ηc4^@Y2\Ce|.?OO):(\@&xZ LÖI~Q?'`)yE_{f")1AB0]_% ^}`s3)f.Iܺ09:Tj ppl@  DavI#A)V F#pT+Oar<'8E7Llr2J*@4vPA&N . 2#G$ UR`Di\wYD3[XB'ٜLͶ/P)\lttfX<^}̕4 0ݙ::&v7ɜ<ԛ5@,&{Li,>rfr$c:8͘E4&UT;1E# /XʈHgۀ/՚L!ޯ&Jk~(5`I\b`RriCHNT$9f`گ%(>-㙣LROg;AOi.M\u(X] ,cRumbJV .-,3 Td1;RX[ʷe@.<x"{A__bb,Q6s2٘s^=AdINZ ͠=_ S.Y^O-[ Ug%^[ml{ bI w635t'Gʌ"3I(?S'Y$WspXyτaf~!e6/ (^Gh'UϋˎvG% l[MfP= e.tDIdhLG fY'?jw_Zg5Og5@c S`?7() +8jS($ #BR!RX=lUG!tTX*쁎BRfqۉ@Ppe05qƥ LopG`J.*w7gp--$_v Bٵpy Eص*?L[V3!k,&lBǗ GRk\b℺B9_/JKKecvRv"kl'_m_PNQnL;q@/dЩ;7M704  } je}M(P!l381LN1doZ53P g `X W:ޱ4Nf4IX˷4Vz:݂ShT}vJBLIlb-;dcLt0>l614a_ȏt=4;>/z % lDgJ0IY{f@vP:(<@!NKR-}kdi5-~.3'XY tׄL3KO!!bsJ?g#g В&~p ghTldEcP`PUyC !P'?˗9KMV1Uۅ%Q b(e 5xr@ @C"b.ݗeBezp}HNJJ4J) e(+%CjmrzC.o sBa4IM|D,PX.:-2op, ᮑ|0mPF$&L88"+rũLT), : ک .ؔ5eL8O ,pĤ>D!2DߗSC hRso.|Jq˙r T\LR=ؙr*a^);K:nB |m'hk.EfkO(IVKj F>̶8- ʰmNlP[Te67.#|v_!,r-wr{.v2˾Ja6wX+K9yg/:؋=LS\~O0tqf`tv܌c&l`4_ r9 Bx8{E1tFhba6rه1$bL1o'#Lrc1꣊MmH+P0( 26rDƓm)GK- jc5ee嬌WN+g{2TsaFz;ff4HPf,nhZUϷp(WEVrnȜ _n"JX_hkFm.n!k\fiaEVvN $hp<@-R,ЪlYb)lCcf! 2$iP)*+ZPrnBHG @pem hx!w ADžhRw}Ae<~v@OMA*?F^EC8=TS0dNXWX c|XHB$F\)P&! ~Cח:v(CeiYyvE-Z# SnHcb[(WVwYIlN@Uk^J5z;1=!Qٳ"՜A}4ji F[Ιzm3uVm[n55HNumM7} \ T%zAMmi<TX97Zt.`?k!K ν/Jx Y4sLܮX%pIfD)UP` ˼@xZizZZꄓDc[3*Mk1EYP#%Ի o)7b/׫>0ˀ-FkހjY/@b EڪӇ8`>Y qen+?趰V*VG.g>H2]mHyDiF@Rq}}RYST$Sg1DZl EB["u OGts 1. 1.9*rI?C19zʎHa )˗>kk҉A֍jvъ^/鬦F-4iL U$R;\6FT2G_@NwoV{]<cϻ˃0MzÚ ǁ)nGghh]0,H?}LH^w G@ᘺg/%B acm {XEl1\6IR cA+Q1/ȘcDAXc-( Ym"9;I;ria:S&d/L\ 81Qm<ڊd~`$'shC)ژtkؐ MgiiCO9Lԣ G̣9[may^6y0$C^"IHN*/ቄ"-Ft)R1QEV@V$+#blh>bԪE z_$V[ #.$1PFTrO?KDCI<Ux2Yǥv"XP%=E+I4,T1wy6^Xr.YdΒ$o,ٖ %%=d.90K^R!-sqzɷ).tǥ9jpD6C|^F4єgj9 [V 72yP2)0/*=.15V"t̛}j}h^ˡ_ꃌ0d%F Wv{ݿBPi(C+F+Q ޳ /,*>HYB%8 GaY;/r<\oJ'@v Tر7ńM[v4lCw<v4ױ(b~Gѝ讵> qu.δ ) gn&e~Fq;bkU[_4oa--[wǻ 0S ;{M[age8ܻg}eaQJ=v2&X)ni:n *%IJq+Va*W*W)?$V:>v1 [Pd(]\@dTW8O}aO(k 'ߤ ~itz*}ᣯ 8r>7{%&jLʼnय2K5J|1IԱoӜHB9;2S('Yu=Ҟi0k v+'4,-mF'I.Fip{p(D1kZQܚI 0ᜒ:<˦ Tu6vNۦ*v-8AKPj5ISTXĕSS!Q1 [[8*:A̦ybEu2%}!S0+Q:DaHpr)+UZԭ\ԍGjS)4?KX$B,$*JYM½^hbyd-\/>dv蚫-J`߱_-p<&k\/7v]XyIu]ۨW4eZ+)ȶ.nծkᵀWeYݵ:_֮Sq Uv-Wkz픬ຨ&TZaQ]JrCnbkتT;r,UKu0  [[NOAU8zE6mqV1[/ Uٖ Q Qwk2ƊU5^I0O-65|o׶*cZ|Ԃmbl*͌sk7nNG[3ܾkEOE:=BP^V=Js\d 5m]!mU{LmwםQxSvhVKWjFMY%s|Ӝ?Rt)7zt6jϊ%7g. µSb覆l0}8yGRArK" k:ñNᷓKqyFoxF6m¿mNi>%p[YO&n ρ@ ^׶Y<<&S2FG. k r㎊ʵvErS dd%W窓dF@ȟ4, 0-ݺ.Md7}rkU^K ɲ<2"9,_#}pɎds4a >:R!F@#3YAD"yHXI$غ$5~cIH^Ij)/IBEL6|z$ DOɕs끟\v((Iʕe/K*=jᨼrk VIg,J.j!M.7̥]T%˖㑑\/,50ZFs39jnT| gs;ve·uYs+#MrNbjCgD)iJӻRRL娠w%Ee cJdW[pR/@N w@TQϱq]DK4`9TebYL A1 [u\t, /m}q CGe߀EEF몗 w+.waPqM-af9wv`$$ 5-.>Ĵ4|-9uBt|UBKcS) M/?[~V}w ̰wkF4îԊYuTMoN}Xd-SNm ^|bǛCt/?ә8AB/jCuIbdBfФi^@lLT\n2/7v 2*RKۜPO̓vc/pVfkcx=)-xt6A&I ›Cc@~Lᇛ}drxicN#3AN9q ҁ.T挷;oǛd8"/W}7_87sEL<zxQ8Î3ΘùcJ4RWDbiJ9{j|&~z^/}(b>5E:E5Yj,v),U湩Sl7b4*,lsnKyRNa9zhۭr) nd:O,3D<:/ JXgNu&*L2ԕfY?+u'#ytW&~;>`3h;{­z2߹wq59/p6xRbzv濤&+zQQ"[+zN' k"*Ь>g5$<|I]~sdu>Lk6@3wܫ}>kLr܈~lJ#+neS??ϱ᪙h)9MQBjxgGq|f3{SfU۴t;qA.-f([T4^|C7a`|| !_(ȗk򅁠|Ca`!Z6]ÍWrQJqS:Q7@):7 E V8=v!uK%3v:s/ SI:(P]ASJrU SsP;-wG4s;w3s/)WpMZD4]+\>/Aї1]lD}Sߪo%a|JG%{Si0L I^9ʶv م9u_2S8.|ѣ`//6AIy&=IC'I[m˹[$;~CDHs~Qۮ𻙾nd1ݯ9Z:C^+ @UϮ/bg EV`sAgwŧӳ7<ViX_!tyx-۳rܒ4C(坖mHw+}݃5Ae ,jOߙ`x6Vi+6|xvD.TȌyO @EJɳkadU"QNDg =,ΧY&aO'-YDj[QO/6 2D6l6PHe^4R׹YU֓BO;=xUؓ.ڡf"^CGm[=S8^saK٬%\0&-X|EFj'V0 L47#У|Nt6QSJ]ՕxRBjA'Ƈ>gKG N}nZmq'pf}*vy`W9ޛfĖ|a u* ]M.#'#nJ?K# X#cFӟC!ԃ()D(4.TC6f0=]/ˢx<(Xhjg0 s ÷iI-,v 5-\X9j h?6ډ[k3gv]7HҭK4v n] >GoȺd*0=kdХg`c&R_3XXҪf[0Rc pX) /38>J4K,/IwPo365#f0ffoI:lpzL~ Bi° /)FÚC4q$Hؔ>CJN^e8U6 ;}$QZ^ )EDR[ӆ5:4%z. s.MU)U*xV38\濝G]|WKՂb tЬ,bMEg~u_,~ykt^mH/EiF:{8gLW$>A;'vJ:? nIZ>GlI^:i6G[:VWe|-Nh/ywiyQ]FFl:M?Fȴ?0X>ݐF0M3+ T .!bW=*m_D?LL⪙۾ۢ[NtWJ-@v8C^iw1w5j"}*RtO;4 p$Gl35z05Wjt{gC`sz&M)x6MpˣڹҬ6nz9ߜ=/y^f@im[vk7j!낵uPVXSBbu^ck4{zיI/nu͒3Нa2UdL.KjK诋I6GglR<@]+3E7]T?SOΗWhj7}03;KXdţa0.]< &7@`g=< @OבSF[ zN es03Y碏S/ }4O ԨXFQ '4JZnVi AhOlk:+gMIb^][@."=:TfPTxO:0(h*%(%1]bb쮡JoLE$o.Hˉ[ub(W'NRlL+9H`*[l~.0Pb,77⊽ԣ~.!flfZ픈ߙXQFiEԫZJa@2[rR"J8;E>UsXVɕReh(E-<^+q|]ٴOb#jB\Em`]o"4[e[u!k76H0ۆi2*N .mBu-˽qq85JNm{]=ntX%Ӌi=fK~bԸy7,64r@Gm`Ш.lr׉/0=g+׋m5cy-cl?%US-T!24WMa˲޽#f$ګsy{=$Dgd(qƊe\et?/1|٪[WmkZlWEUն2dVκiZmvjVXR8Xנ2wZ 1`++n\ ;wsh ~݊w8wujt-ƖROA\>rmT#m QmV,P 7 b$llAc+ Z:5~1kLdk.PÙ@"Ǝޥ (98,M$YPl̴:(gƨ pwf-3.hBa k O”@شJO'ˀA<.< 7 G-),}C"#sf^P1}ui`<`Gi1:P .axP!'8 Ofa+A4#h`R_-?GoZh-͢SYx tN =&-|MOE#|,`2d[ʨk.70\iNsB/EzV)'K@|1L6~d<@P L=I^!.0*#v|1dkz<5 ֓ň@(h]8+hu! *k5>3U~gd@88T`{e8hfYu>e?-_qS`*YuaLc&3DI~"B\i٠]sG&Ko<fm5\~ie"?rq ;M ۞}Z)$狵E3?AJRqb{^l 8-[ˎf!/YZkvRQ"/촑$9kV4riu2oGdap>Ӂ E2'̪4^nϒ"!%LqLYR4*r<F')rKy:A:` lSshZt`wWR>Mgȧ+@C\,a84qH3B ZqrR>,cY|-?Ӫ4'Q9ܿ)oW԰Yעڮ9%#iC#t 1l4TˮY)yDevZK͟6m+О _ ǍOvMYّ/^Z xW_ZOϭ-oٌ_ RWh)pxKspmGq8 I`GexA܎yqi<@Sf{GA5L~Դfc6"*R'e;\>mP|Cv :^oGbUe-iid J.r$˴?80/ ?y{i eJX̲*|;sG_?19\ ,.-Mϴ4;+[mjrrzs=o @P;kӀ[;"Sr%M:NܞD}!K@$!nF0 ε[ )(rII_ |+A!kX e\5v6>]{/ds3#ńk*1 d,)%Isw0=XhR /[ /5@l!:RSǭhY^.tWhA ({u{a5z9CݧA vuhX&HXό#r;o޶.xѷk %Sڬ\FggVٵZ  t@u={EEYgA(xH5"8 ЙĩX܁(/txTN ǃ,ŢWH/i`P[#7!UYUJ'mY׋L*Sf`߱J_WXWNs+W–o$$dHPnDhQ`P #*Y݌EW;#_1pA_eq6=h6xqU?̭%}-S8_7]b7>Q'N+Yl 8~xס*Sffn a˨_Ts4nup Qdu;O^ibe- ́K*e#㓵;LX/kDB!5&GP] YN"?U9:XO~:LdFԀh;x,S?D؜tgGbw8/g!TܻY %N^Tť/ ĒU@𺮻jy38v}/q7^dVN1W&dh?p)zj#D(to;v;LfxhϾY+q6`dahsoM B1dQ$l ~( Z!!n͓cXtv8ԛ@s'Z}51"a׃o)E1|,? %C ;Ah`ᭊ'FwL `J<"7؁`̠ ;R|Nc`do 8ឦ`@Ws+d%@ d *ތgF'Y$u䋀 f ,t*Ps T)Z <͍~pDL-7PկZ pw /+u{A}ty\|${J;Դ!q@! PƘq¸}~f5]zƔQl<0S,No9 3##?FAӚ,.v ǻ2jzm!ëKHY, /7Sh6sQdP:178 #R e]i^wB)" +$CB>ip'8FObaC* e%{kQRWMQhũv9v?Ŧ\UIF>0N DPvTV># 1([eg@ë۷L1/ |8 -8iqEk*?X5l9 /ъy//+%6%o << ۑa ʆE2m1hAqvWb%';{}vm4|^2ٞq˩["X45Wa×Fo {WFw,kR2՝.G;#+&ahTAnc=[!?4Harv6Rܸ#;C"d{0q Ymqe̝Aa|3 o@"A.kA2%;@mv n̉g' iъ52q!u[?5ӣC0jYT y!΁Rt&~)e>5i$~&[~ս] $+hQ"V&ۓVѺYH'3; W#¯IVl}d! Ae8e& [ZtSR w1a0mf._66ՅG0[o6J/6UÉX։T;{";#ۤk/r~3Gv?^[* :Jf T |3طXaܱF;83m2)D txy<[GgU+2=ȪWA&o )˷)dt&pc]k zUcrś1 ud=j׌2k " 8 SWˈX's(ɈDqȑp U!9{'v؍b>, <H+`ylwUs2k<֘kvk\riBT믴_YPUHf05z;`c?WuU|[lb+Jv{OcԳ7]ךSwܺXMg1>M,^227wm&T3|twŘ~5mAr*]&նbKRKŠ16`LSw>1a,XlƧנ{ekT+SUMVwH9@:2ڶM5bE^ڂUw1^X[lgfƣ oz3Wk[-sگqu|7ayP%> ]&_U6N6`]Xxgu{VT{i ee-m6v/w `'^rطv/۾o1%:B|q[a,")7cY 9PngŽbKJ 1 Y,`r7bUƗI0mmEoEYd̜,p[Adv'U*(Tb0(ٖX*U nUK04{{O&@&v=Ͽozdڔ/F /%o7gtT>a2.ᑙþS,}9-ȿ3^V L_,{5 (%WMJ ( {4~ҍO2Q|FH Lek"q?y,\_O~ퟓ$%NIvZ;+oT2O4) ְ_9ob ߶~[8k?leYo^B_^,ro6x 0e f,DM@ry{,jM@g@EjS$ d vps:,+]?XMVXzm &>g <Drg8EM w |sIsi~xkuzKnZ01s\#GfeS5uG wvDTUrXt> Zq3z66JCI7 @6vvH~ F,t F#6GqzL z<x|wVtQjfrC18@>/z =_C}rhU W`nA\wFtRt@1#]3We6gn>N7f= KRs)f O=vBT{ yIsbmfE=YhMuuf kEsP~S4ans74RKi n[~}zyoq3z?Ktv:D Z\ Kzd #oUj@;xO'{IO:yl-YpOo tg/I*AOXeXzFFHWJcL {_x値v$<@,SXqzzNX $D'zf?htGjdK 7 $OM/sKDYfd=0"g#>[npXwG$J3q @O=4>"? Jb@s ~tKNN?Bwt/ H#Rz]fGa^xm?KqZv\Hz^5cL6zfv X#Wyfz8M{o6cn?; $z MVjj uu{,HE$<NZy rfO=8BYhMu'x yL6X0k5 pMCo6Yg -Â͂bȂCts ?MVwz{4<:w{0nwqS?  ߂:C24ekg6O=Ԃw/ [ B"<7S%P$6?+eh$>,T2H K `O}NjL6uQO=J ̂O[a>ZVPm XfGCH/xNN vf]J!vt+O z:ʁS4: Bn#[XYwhI{WE}܁zOO.k`aN`~P|2EWtoz`^EB[)~PEK M0jYzOw?3^YwrR~; >K]=XR 7/iOqnT2wvvPL SX n^ 4 y\CTH4-Xn$E8-v}45oII-N< %o{fl=n}>c:mhLt]w th/b{Xh `jrpCY}b: f Mw>XJw>!wlс.mqpQi k I]ahiTh%Px׀]ۀnt8x܀#]ER~G2eqX6TwX? ҃twca\ Z*8bYp%O:k tl3axtn W|s \PJw f˃D]pE uDa]Cvy:cy`ށhXfc+kg)ds&qgK-:;v1 K#Ё:@;" 0mAp "/104G^ Rob~{T{[oZ]o{b6~q9~~RW~ho27jo~|~Y7|UZ2{bT~hW~4owo7~҄*|~ET~oo~~Z!|qoo}6!6ل~b|[P&6~2~b~b~o U~FW[7|F~o~c~s~.W6UQF|~oc4FL|xN|$1vS|T|V+E9o:[oa5d YUz7m5H[W%z fUm|E,9o9+7hF][s'WsUoAc*,{|Dc|UFcj[0uoXW ,5 0FRc|/c84'Wv|cz,aTh_>~-l03}gc9~7$pL\X9C=>vq]9W<5 *4}LdMHKQ%zǁ>^Qi)w~3wt&x^e]Sz7]_pH w LO;\/m<.Z5ZD\#FY/x:> pXueYn2r .6i j iC& TyeYy)A zP >P+υ,zx,8)A/F n44IVQ0\||ǃmbxNV,I,boQ3u*nꅎZ~z_rqzBv 46SaT!5cLny'~~yOrօ.p>|jNy@0 t}~6:ng?{u #7]8Q8Z878 [8-L:8& ߆|"oCu^Ub"_N8~cS8-gցbB GuX "EM ;䆱-\dy憓0X0$&98D+|y T Oj ,KO~r9it+oq6}1a Ȇ <]h C;\_(OYKSTDY4C1O~-ajQ:V\s&82os S@c.4868--:8P8{5/J8Sg8O81T8oY8L-:y88|qj}7!?id%V 6i|Tm;'W rGdrӅX#\-/gVK fV e@ uMBA-B;SvId^u}f- {669B-:KW< ?~KI1-:?Yi{{<|(WLoo!F 0W~rH, 2 f\Fvqx--'|^wwJgz"5q4B,\LnU7X,Շr=8<bb~|o# Fքq&|ToToeSb[UFo [8F W36|^]:SEC{Tpt#eFdIz v,{xtR@cxv(rCmzULvm"icxJ]tDv/8' O G #[xMt j ~vX 8 a x_zV;ኸ4ŠudsKAi45/Jxvfv}NHBSc_r"X@I ߊ#B=~)7s5-Ɋ{z, k: Y$y\9 |D{B(X?ILqz*` ikwu $ OGG'-Ug, H:\,wp X -nv; pvぎ.f7Zju@~D_iA ;;[w.oXEXcEFx NI_X;8X/;x=PktWYpNK|sX/g/&] ,Ftit~^XduXW$U57ZBA%YX|yz.F 4G#=IvYd +'wc1=bdTz,+lJf[r_P삎Tp CnhppUVVrx9R`Jwkϋ7S*;2uYm0L``$}>Poy{4 IVO6 Gnq{/;_qt}Ow  TD5SCM,9t8tbC$k;vJDJoJ _ cY i[V2hix3E74uDD=8o14| m4z0'' q)Wz/WknK%,AxH:al6p&;# iE#&&jqY qCId4+EJ[wx\@6ANA~eYv= i1v"ePV6i88d> _⇺N-VDq`3hNIVB_{\/p',p)u':if@+ +z /K n!r V~Eo:4ut-l8,!4N {8xtqy@,& W;:t;{*-BAwtB whDD/2).wwSbQSK\#PtwN,D\cz;牐{HLv94TO(:|ZWob~Ä͉Z^oKW'T)ob{bbۄ~ԄEQ^W7ل:M2 |7~*~EBWDwWҍo~ՍZLZob2ۍ-'τ2V;C2[y\oW~ [U~cb f~{j@|o~n~por/FtcoM|-[{ŒH)V|9X|$M9XUUU9%[7R 4+0 j l|4cBV[997 o RoHcׄ|u[YUr[W07u[|/Ԍ1Y}[{tXv|gn1hA97SXudYVC _Iw4f0>POg>Tmztcss4tCSzXg qra>;4uTƁfv{jyXf Bu_z:^_sqC2`Lsu_Vcq|{hs]t~|No:y׌ٌ [?IZO\d+i#_C5Jpq-}7 BI ss~E3B~z~d Ɇv1NҎg\ƌ510~eU ucjigu\]jL? siiCBՈ|s{Js?Gu8=s#Fu &~~3~_k@,t<<^ N6mA. -${c \u>4Uj{\S uiOH xrrh} =8uGGG{s!?&9kAp0BtXzT K]eY YNq^|z-2:KjST}1OGxA2VAOFG}NITnF=}L4^L6^8 AOxb텥ou0~^u]d,N$:*ok- 2X"@ 8%Ɉځ?-TXK%ņ=CFӆHrΈJ!\6N\VYYnWpAGZF :'6,㑂6?Z^d@nG7\,O:kjȆ 8c K6z6d6}b 8؆4JuFB#/ l3yO-o8,ޒ4ZCL:0$( Y 0f6FX-0-DW_$[NX0>^6Z%]O cFx i ^6Z +Zz#$f`y  N M87< hN8|O(J xM8Fǐ' #+6XDb $li^'L/Fruo^  Cڒܒ-8 D7 j6+ B ! -Dc-8D}ݒ$[[8bXJU6 m }K c{j 5fZYA0 nK|wB~8 wr^c=Kn#%`Y7u u~XNFn"zV1 cYv yrr.P=tuwG$5^.STeeG)yCu}y37 Г$9rrz \ZsUFk#"-<=rr%yZr#M4zrrnHrnzmpIz}y1rKv0+i@6 9,}nz. BZC-D,<\q]S OAON3gV$dOi{'`V@q|{&4(5F ; "w 5,/vjkF)lYL5Y8Xt:q:<_:~fBciWjiF<:DmNN`^uA^ŠuuA`K6pyA[S%G.u" jq o0jHksgDOBO64BglE4{ OQjJ\HZ>؁[z4f2\DStb6 4>}I`~Q}CkE .di}fc,GqjidJQ3Wij 'R_+P87z !s-֋OyOZNXHnD8OLV)vj_?^FAOVKcXxn+eك}U<Ӏ{=t4Fxbk+;6ge* kv lX(OgX~p-yz/KAOz(6?N-V_ EcSw<4xtkSu/T}yq+k~> |F pDVN-{ d;i#Tj#7S-c/T!n>X.JN M{IeVZo6_OdwEE_tlf?n,$'Vzʚ4NKizhX %=#YY4 VR6-'Kvdk$f;9CvRq n UGMcw_?=S4 N-, _5\4axD4e{NUqE"NVN 8f"d;=?Y 6loj9iߋxCnm+:$FZV'\u^n8 5 凮;ǁaJb$!vp4;FyDN]КgXҚ7Ԛzmlb-A]r 8 nt#bzOJR:>k36 o kBsb7=T [ zː,cL{CkSz7Qm ٕ>4gwNIT -U6h|kp8 6EoXO:)H FX `;)<CK}_6h,jM4zzz-\!Ob r xu6^O/ rdXub$+ A u0K T 1!~u -ϛj#5*%<.铂[13̊ˋ].6~*E~\Aj@f-OVnsHFـsX zieq9;E!)$W &(1& wt4.>`ohe<̋IU /u L#D XH p3Ǝ~L  C)u VfElNQNiQM]kYP{$ $_a:Ssp7fq}JBy[f/Vyf C_0<H$dJ<=8::~́S76xIIj;YVUTtpV(d`%:wJ.6+=c6E4!QAМjbh2fbV;RHG-Q _p :,;H]:k>kЃ~8w7?!ڜwDr$sE;q / XsHF; IfQ Xth<\CCXv#3$WrmdfZ;z5͜_ىМpg;{c|uʜ4МqtӜozm:r<Ǝ~@Q)% -_ emj%K!m%quC @Q=ZEO;=qZEv$!M%|R-E̜/ tRB$<-c`Ԛpwy}?K/8 ,_f+>J!N`n]GEqsx{-S @uY8CrH58E~Hq z;b@E~j#~fHT_C&jO=QM'n?(LmHmdR}vkMD ;f_9 ,l8'UiK_aRA\\d? ixUcJIkP]ek.6k8c Utg'_g]pQB!N$g{XJ{cM/0 v=:4y Q%^\/P ;R?kmCofњyfmWD No!$_Xzŝ_QVncs7?}7XL0% tXA bI`Q v%[J[6 J`mFs6>tu IFC{_Tgk]O=)Jjk lZnw)F- Ě 8T[g]-şXǟғR_Ԛ(rӟBw0x5埮+^(,C A<d )|ܟc@!6JkL6ڟt6q nE+>PQԚ ˟ <wn<4s{Ғ-s[ :V͟87˟S{ z70z7\ )30. !J 7819387#`55* D -89n[ 9+ juqwd]P\OIH= 5zt 8f-mx e0|}Ɵȟ],8:ʜG/q0VZ R%Ġ:*0?LMKM n2Y^C5X ࠪ_.)8i54M9e3 2蟠 r慜? q>GHtZd = ڙ _cY=IY%MTL\@.F{,_,;؟Ut< B͙nX B4h9M^VEpN.rMc2zEꠔ>|ӘߖbǍ{ɍPo.\~{ߘbb{dЄb^b`ݍ݄s󄧏EJol{~pZacnvgpp~p4^sUa-Uob~ go*W ԏ[$( x㏓A+돲)IF F 7)6F[8:-c<0 Ffa) S5oߡ ء'H[ A pe!0)*<J*0{v3i #e cCQ'%D-&(!xVwfWX`i(6Y +Z JkJK)w{i~X-f;}h)i= !<WyYN]+)H_\ ( #D+% $KVi22FVT'f<{d)(=9S+1. "8Л&< +>- @ҡ* C<3>7cEY[HWJ1 FPBcґTVA–D5y}E , >IXݖ2Ԙz$u$*%;znzqfX+9K -& FSW w[Hn TAk~lRJwurxFz=z%srPHzךj&4NT}ɟ?f5hjl!AxXC {{(Fl1B|&48/ ]K&wokmwa S\0~7:hN{. m!tx\69,D5x (wI/̣C[K7O=E.vD܈vmc6z8IR8f } @iUe{:{' H:?У"ң6d sY_ã q\F8 ʣ;Σ0-*J 1.P, @ף1aR4& ր~/2nj\oˣ]"79>9f7  Ḅ,;G5!&#(]S6 o!b1{;4b9Z;p@FEI8HӁJ[:@H, V>>9סcb"[AN^2"Aa ~\FeKsMHnQ8d7>%[7{k}7UL<%db8ݎjR Q [LtNzwL 'k ?IVddGX΀_xu_=aYcqswgk.bx<=Dp`XJ!MzrPA=} Trkbie6fxxfԣD\QpOTxO= CUםuj٣0k0:|6i53#_ [|G'8ULL'6yu1;z\<{.} D - Ě5oq=+͈- ͣc6n"-b60.8գ ϛ}}^ b+29d ɀ!?%|$' .FUR,9a0fQ a] f>D(5n 1N =Qu S@#.%/Z) +Avmo8TXU4W\[?d`u~gHŠ rxig,[ͤϤnɚO_/㚖暬ܤ{q=ߤ%> t90@:}Zے~O}&4֥ťȥ˥rCzեBU͈¥q =QzϣW;sQ ݥHߥ{ɥ$٥Gå5.ͥtZ Z ϛ̥ .ե`|29 *ĥ0*4#ڥے*B'ϣ) g. ےE d_nA}Ym++^ -}>2>.:$xPJ Yeڋ:<&&\"<k t 0yO9! k;,1$Clw>UK~ -Nz0Ess,x%Ӂ - ;ܧ ߧ-_ "$'u)+@153B.F9z <_+$,moCҁ6ftN+!J+R&!FV>),Z/ 4e17dIH3hi>Wkun&Z 6 E> 6+[ 4;q5ԋEC"8G[qtKtoH A@x[b .fw A jxpxXUѧm/+͎c-+so-˞y0)WШ@H.بL H5F6ߦ)6tƨQ <>nkko.,اFc. arc+̨34iw@E K.v䁡XEC8ܨwJRBI|{NLvxfe}|zq00sCvS<ܨ/ߨ.\sE2>HnRv뒐_,BuKA,XlnonnC͞v@Quțܕ:,Yt<܋LZOPJth_CrZσFKי{jS\t 9.d0= ڨrLިϨta sv<zMjgf,ky4 [[-~ay:_.J 4-S:A<$:Ȩp ɒ+HAGTE a> \@:ui&~wm!5bHLNd[ ,,7ji{ vdGR{AxܩwYA4k {Nb )z: *;<5T H Rbqzn,Պtsqv8w wJgy5 ftD(-9 Ao@E>s nM$JBOdTUߩS뉫Mut IX_> 5[b-J+x8L`TRBZAdv+B ( M%: M, q(Cv$T'-{~oXʍQ2wgύWb嘚ٍT܍Xo |f~|pS2x.{WЄ{F.]/|b2|Wo֏؏%ZD⏩,٦! +z7i5 #/̡С' ۦ;IݦFߦ#_[ϑ*PR-9vّZW}x4,F5:7/,>-R55P5q",k|*,U쪜|V^A6F)nu 9\d4T t|KDfYC y7zO>XZD܇N>?Nk >K]H:刎C::݊X$Yb_u]n"0 Y,fp%:w y҅]OtZ,K@re/A ሻ8h C > 8rT\ yy &E˝Њn4T 8 FyjˤH4-jBB8 )lX=ZB8 wXu q_RTmAPbTCꌽ%t<Tw-iN$-: a 5  Tpy 3ϛ I,=Yrtp4L3V55ZL lXիuثsbJ6xu > Փh8=Yѫ1%ԫq sX}r-3rܫ+>X . ͫCrN ߫f 5׫٫3 U&2X`wKƐ6:( ~PǁCN#r>M,\# !r)H[AzOMm6>MzHYvY{cx\Upq_T\:jmi]Qkjx*gm'rD Њ+EVP?;rRuT l P_WyX蠔\nbЋ8{0;, WC m ;%iID mX--) JFEca ۣb]\8y  86?K\zOO=:de\=XPk7{ @h6! ,FJ(,zqtz~XΨ.]MZ5r p ON -2w~=pIS AlHpqS 5ZЫ4sYucګܫzY wx圀= qra ^WF,\-!Iegܫ]Z$E,:]{rc:TyϠ=Y5jaȕsKwHfZi-kS 3?Lޚet8-n-8p [|Ԭ>v٬ .ūǓɓMF"X֫ty­ E ߬(*ܓޓ/o355Q7~񭔫Ēǒw>Z-ŒqnqlV~ЛfjXu&p8z:3HĬ gX t҈Ҥ_]uOѬF3'ȆwjU;'xH:i#,I !z,ƩWrkUMGlNVqV,rfWgbZŜHDٮH.ݮ1O78>''uv ad"a;]c#^k\3xIHY0Vfjf ^dRybT-w0/w}ɮ̮+!...ҮE,I⮘6HXhHv^( IxXuuY*U:[E{kKkZg Z+|k8/,+ ]=L5E {Pk[>V /;nLOF0c:}*'v2L^@6)cIck XZR)+"6iP|.)iC$ [M6UcNsJrb:<4|Uzq=eJ=&n8>n^5q;-&[KR-B \\nM,v*%O<:$mX=vl>;?>;J@>A(/++QU3(72\+ 7 զצB& @7Cۡ ݡGIKPNPSDY[! ek~ n-*$ NIj5 , +f$NA:|7HxgwWwXABqYC((hYQqJ(JS9zq) k$ZKzu 5i,I@}Y]8L~-Ma _n,$qO]ixY`eOCfmI4v9DBh,"=W &2dfyIq!<&sZPU6q|ChSRq5Qj[%kN+(=oz!)[=  5-6o$}R?/dYLo9;{ ZKfm~ 4 !;!{*@u E]5[ ª{77ƪ" +, X! ҪT[CIIt|^[>c)+J./5>i4Lc ,Nc~ecFm~x,cc" [F"p[w.oG1o{U QqcC=8L@L}sf sG sUkqqkhU5D\L0R!vYNFK^xtcIUvrtgjmn[]v`J Al LG]bHmmeRh@Q=2]SlS4=oe3JɎ=:J i%@]=C]`eXZ}Nan&jV]ttm>|7Pl%'l=5= \AbDҬ"`]a;qdambA g `Gu*a{;D g.ahO뒃^VS(gX pg!4{/NnlDjBM@*F@#Ja?s?j^מa^aa^R[^~]a^g"@,xDLM^%P,mlCdynlC8%]r^>fl}b}[`^#`|xjgbe^aӵ^2^h b!LaclRv^^cܴi^vmĵjf%9jUaaО5&:O_!AW}T_DݵY_K1rBAn^a;}ai2n_Fw`)^*F_(8o˴iy` t`jj\L`Q`޵a ;kBlaSWq !-a>^#c,z=`0;Ƶ2_HZ;Ph==Cn%PJ`PulHPq` >k``KkBkNkZPu CnXEwkg;P|`: kO.Ե#DlCtajm8a۵/?b/a &`شhM AXEzlaEpeX,b!gL YJW"^Snʵ]M] z?-mXtjUm ` >aDm\SOSa S`Em=X_a@2¶T]}&ASO-mImnm#Mm} 1^'eab?ES5{^mrGU>%>`v>߶YɵдTmg/EjL`sn,Tn%,r^qm}n GBV{}zov`PwbGTO=nbEfyx흶SfKolSuGA*oG}^үLNtدvܘܯ1Xᯪ6iՄ9똠qu2{H~xy{[o"*y(+ +(ǦŪ̦K +.(l ئÑP[ő9EתN $?bAG|} 6E7Y|ec44}r4W= z w|c̐55ٷ4D޷-6}4ⷈor,Cc[8zk`FΞ\F}UnA=Te9XoikۯɄ{,4~|uv{e`pWŏo9ʏ*d!7Uޏ$&J+b۷(4z71_ (* K p|Ʒr|K ˷vUͷ SyFTӷS259x3ɖ췠fF}JP?S]NaQNT@V׶ZJq`vjAiHf8h_bBnQAL\/{,xwҴV}igEA q}>Q!#8m<1ѐYڴ_C,cIgm6ivF4QTNsZ>-ʙ5]Ӹ?jθ`e^_7tԣSЋ@ĴS_KD^{ _t hdB_?ϴ>{Ӵ{ִo6{θdF޴~\njcAŧ\6bD<봌d3\\ة\oI+rݤR=s?dF hJ@ fqm>@uiE@՞;&A; Ƥ^wU_H*ʊA!eL [jE9}7&k96#<[f>~PLt3 l_KsKAr0Gv6Bgl>0}]b*AvZFLεqp6F8aae^|7g=M>dlgv?^_yDH~ֵ4N^&A[J׵嵊@$hC}cÙc.:pE`cDi7}=aչùQN}[}[%eVkhJlNj!ϥ<&AKʹYa޹`^7 ]`m`jA>`ݹӹ#`m LI@qWl3kRvICQSw^`kƙb_nr dejRz]Zn{Bsl@>qm6}_CkOktJBk9㉲Pk1"rPvlI5-?a3NlOܵA]O4NQQ'K \\ah`s;t"FCpY?tZw/촦ccTrZ ~΍ޘ|~&쯛Pp<"hjby,7~5 <^ F|4 8|=[&D([%EUHcG+9 +Q(5 K&c ҦԦͪy*yDUʈT/8x.䋪Bυ|Ѕ{p<E,YQ8"9 ؅?݅8vBڅ7H EĆdOՆ̆3V868$;kv j.4 u[st!3W;-bm4pgU<_"b$OF>n]#i7VVQGnk??:Zi_—?aBcDs~l LBNg< 0 <:[#[t|v^tЕGje_kIqHK#^I^tq>OکOoR!UDYY<vnǤ-?cd|eBdyBkHH?Mp^r;fv$9/|;6`>ʛy:]gj}cVDg`5m$xuf8_stIpE)|8tAh@ψTb,r>㸤U^ I,3WX_ naO6kZ1<YZS,u\u8;i}>~}܎wY^5fNU > a85~m,?'tw{ŊϽ;iq9lqg=iI2<qIޭs/2fQjA >]XA_0@V^LsՁhhQ| p1 ,"MxO[tiy y=( )w߸^ [x8ž?G[  X04uO275[ƙ|>L r꒟< "qK !AJH\$pcqvsKub]y{I^_U<0Y{,T|YBM68+ՊX%C)aOY6qepPL@5ļh=~a;k>5 qu֘Mؘ{2N گyiTבyx!iWw-(qsZ-~i9>@'źFǺݺ% U+,W|-˦N9Q9L Q˪Sۺѡ Za^ ` ؾiSZO ^"e)Yv8 5 ]  aV1_l J!(w0uh7Ųb@X#gR4iy)zjfJ+Y*(kZ)7X M=9K z}F~XO~.*eI\<a6Xpb Yf9#81=0sw t%m[y9^EVL 4ⲧKZjTf|xEEjl2l}KtW7r1w =D#/  +cĦľ L91#3ʪ+c:ΪԾ ߺǑ!@JhM۪#ݪn|[3OoE U65Q5Tvqm4ŽdE s\|WG4Go=FUcMnoi2TEq--I+>ikRY1[niL+foa yWY&M֤8 T^*p Pn a8qwjR"g#U ϻg>d0±oFcx, $GOM xrG1oc6G2ž S `  >E&4`b2{7wWd 1-3‚aPN:OŒoa8 Am }9 EH 0[vMKSR%Ii#U/E3^Il.P n@3358}կsׯٯS̺W8T܄,㄄܄o߯).~~m?!+}PH7&Ӻc+&98U9U֦`[c"egv|̷eߪ1X|T^W>|XwE+>i5zVch[x.v9\ydZ4d:zÚ[꼮s:FH|{&:FVn +\ټu`ܼs=ʸА߼Fgi7rʤLF?\K ]NιFFfTGLPE OidC)Q$mz[zl xVjսjl^ g[ŊC[c` H]5x}2@c{Vfu:vIs <[rh8`cT[7=G;i#uu+g4{ӽ!GZΘOx G>{[fMcP[E{GHct3V"G DpjvŊUS{& U{C Q}d"Ii\D.=T{IV[ } tUBX{y6Hc\`{g{c{8<\"\I<7z{c}{c{dK{nHC\stH{q' j{!{:R\d|cFH{Hr_ d{#wٴ::)d<{,dH{׭H<yu\ =y`;d0?d<\H\aw<\EFENdqMVRdew zeJ[JOwKeRwQ1s]=le{p%PGb$"d=wwN6rJ\D8Kc\fOOK]%3K>UKdf]z]._K]'*Ь1 ]hKX>GŒN&]nNflll_JSPYRHK;@~$_jUVn2yDmL.@u=h8 .SgihARw2 mlTrj>ffwJjwys Y qk _jjhY }ysC06nM]= n^ubzja EIoǼ}Ҏ^]aLiB{t ]¹U ^>h^a]^$Iyj>{zL-e ^L^^LSmL;^ ^^{JKf,lqigѽţ"ƫgKg÷h׽Fti^intuŪ=za} ~-|e^gaa^c?]^+@b_ڹ ňi^aƁ㹌/Ƈ^`h]ƻP;MPh^MR2 BMVh\K~YhJfV3\h,MMo^eh^T$^kzw nhǶmlƥl1`vֶ[@$ ljfSj?K`ytBERfjiQtBZ`n&T4{TPl``e`Ekg`?i`68rq`Tqlj*F1Xk(B>uPc}P`zO\k'nmb-kekSbuQLnBT`kzkQqǔkM9h\k`tPؚc^Kj3tkk QS̭p k`kC Qk&nQa`]j$Q::wsl0k`M}O l'FCl9Q'lQ̎j~q^jFlayJla Ҟ[ ]SQCh^4P>TRdI繺"nl8apl:arlo.PxlJ1lmDaȁlԶ`SIJQMaRMKѭl`?,V=ksV=@JoPeeFVNlKYR_5dsyjB4=n1oBuQ @ålܭ?tlOGlꒋl4>L}SR}hy{ \FbVل/寡鯊~ æk.'#KÏ4éh;û;AqEGHXADM-ž W&(9ˡTVܺ  ZԪŷbʑ_aʷ kjLU,~F ,ez/c}Fu!p 'EEmh@ {LvZPŇqC6jsr|VII 3[S3{z>'D{K:U7VxA'rw[[0~[?IG2{jôĭc7SqĖ H֜xcc4nct]JA-JƙfKnf] fL#fwPWwcJfuKrfK fUX #fVVKJÁT]6 1f ;3ft{|l8fH:f=fDy+K&< junbsHf7K7eTMf, šl Efh*uEKYGUCX,̌ l lsj`jї;OTZB;j t@jhi@nԕI'^t6FKjxOzOh`,71l&ZjI\jvliO3ejjPȴbVƥbma~jŧW^g1LSD|,mn7Xqlu,g#=f~?tL{!ƀƃƒg&Əg$&Ḗg*ڸ, ^.ɽ0ƪE\LeQ̯gtNŌ ̜q!rQrOPN `ӗC"B޸ h̄thQ1PQa&C̐x̐zKKuTfER o}mƱo`=Kޝm͟O@1CDF͗}HO@nfcTPBR QT{V!XR[!OJp ]i#c͸[AynnSi~fRm7~vÞưƆhw͐hzIصONnpE j_c3.hȑ~MƆCh˶hIěxMr/; _hC}_Mp_ƨ[@+hӊ"_C$haYjhiOg }bͤbAiY]EwÞF_ `Kl-FǽTi=LZi,AR^N`N@}N0x_BA!Zt,ksi/Uezi_8i_Cwi>NJN@b]nxfs'N`iJǶUiANǦJNPSR>;ySAtNXvx.o]_in_bǛf6_iǃKYę35}UĂf"^w!͓kɩi}qui~sfM_iNlˉDŽCjtimi;XZI v˅s>ji64>jjYX]s˰nvn j}z|AJ\O6jgǝO%<^j2v#j@41"'jwSO חlT NiiTޗT\.L6qOsOhɣhI6IX}wCVji6Yj2yi::OXO~8djOhjlEpjOdJmИQjgOOsjPdҩsjQ9΋jǢ0@57~!ǑZTi*l7@^`QmMjKYlSO=Oj&LalQNqȸ;&ˇ_(j"3`vȍfjQG`jIjk/Pj81|t66kVbn l_`AkMkaf`{,IIktpOqV]t`7bɯk'qPZk`#ʆ`Fbbk~PXE۝`jk R|`pk,hi`Pvk`xkwmY`}knbhjd魍{)tPoyȭ`&ݭ{`k~>PQl~bz P8s1ulEۗœg?zBnkoKRSl}fl`Hn;PkqȲ˾`QAȁ\kYcn^kk9Q,`&Pp)vk%Q.k9Mh3Ȳ5k\a ~Vt>zkA?t`l5Q}7TI ra lLgAQ,͹ȁQhWtCf haQTl`ψbLSl$``ϯjXlOiϐMQ`l̵lQs{5oldqlsl=sD%!Rl#RȈLM,<;T˪k4ȅNjvuQAP@RϺlRpPR4lR >PR˄ySDVLVw^RVR\ZRؠP*R"Sz:q2RdJy@a]l"l!bl@R%lVG:W˅eEfeW7S nURL6 m\R)A@NƹȻX̽3ͷoq?jIl;j͏?"^9zHja>ERx̀o>{}qaR@azȅfȔˍfUbޯb},b)VȀȚ!ì%,؍ȤLbZ[D2.WT͏Ȧh3=þ C'I.+q7NƦR&a5  )cXÝ9ZU\WԾ`GǷɷrUi,ԑUo‰hWy3,qʉ>Bꑌ8sKݙ\; lvc{ٽL҈) eujXB6| uuR1\dF4t|@0Y\ ŀRKŕYb;-\!?c=<吤i\l\ʈ~>oϾQA#HAF,2V5:82Y;Ĉ*?_u,Gu4C,چnu>PR}vxO3Mx n!oz!6+ - ֧e>y;M)zjAsz;  yx 8p7#<}v X ^ Ž4exk\BD-B sGxy ]tW]Š ( }:o;3 BM +.+.H2h W(n333 va]ߦԮdu<΁~‹0>a^Kzz:x1q» _TwE ܋QD=r- 򪑡_yN}J X-E] 46 %K~ԕvr <qFsč\^W( "} n}k,*3 vc,r c¨v qJ; !vonB \G44zR nԁHljR#m[ݤ(4kCIWW,4)ul6 5 04f@#w{4IQv TKH$xA[Ci+'ހ՚0(zq[NYl,Ի|; fEDt Յ Mm MvR # 0=ըP?˅4/RM ־PvԕO,лˀ @-ov][,7Xg>18)+^Ԧ-7^_;$hAѻȣɏ6ê8ùȨ<ðJMAOEaȺ% Zәh.Z|o1M9XZ(\) ^Jl\pdr'jvުϷ.ɇxrۑ3}Hy5 },p`pz !Qln]c %`ӂo2qշQZNlpբc,fv t)Xv9 ʟeqvSƮ ˙߉O']jTMzTWlS !l0ԊEB$qK@֮dy-׳|bf b +n{Pmx >uԵ^thԋPٶ̹Τ`w_Dnx?<ayQb@JRS&jOSTJIV$/G=_disg׏vC8'{ā C1r#ISihjׄI XSC S{uv:ٞ0ViցJKT G ʢaq QLՅj3Cj1"8S8Y!,xxTF٧Bi 3E -CT l `WN Cv06);2z/-}g64 .xP2ctEX$y띨_]w/GS^Fi5ko˥ !/tDI {b]=;} `px׊;uśeZ #/Udتd[L v/(ǨiʻI͒9>Nx04pCjE؝&0R;xũ oX:6ċ =XP/H&nŋ=৺]< s DӘbYJؽ \'ٕ|EӾ=ԍGYNۓڙbSEi\  I:mR8819۞;ipHD"H٤@u{jKXդ_>1ڎv+ۗ ;W~ jaXժ~i-?-*1y&s+ rڔ@6ډq pzTٽ!Hۃ<82D'tvy˓P/ Eܷ:p(U1t,Tс,W|[ڞGڑ4F|mzRcP/tO\>Ң=>3zYVK  UJycfE8[Өl>G]kF0g1 %9 xIydl>4 NZNY D+4"wp2P3kA(?xH<2-@1> [b5N X S C n^Oj\VzoSh y 2է Ф<ػqΚPXܻ{5٤ةs]:G3[RHg: (,ѻBlt}Inn(†)B;6sy@K1c2\ UEX( h :~O'$\ye8IlވXJYay˖R悮 ]a|t^-kJNȀ:x] lrʸ C) h4F;:6=#t: 'M$<{1upC6LD4Ӈ}vR$EIށY.ȷ:zZS4 +8ӒzOqE, 3[o S #}7Ϋ8sI $a &&; 9֢ ܄EU.`+!PLlT. %'+EޜBOX ܮP U 8 @Jvd{z!vAA6kw( eex"x@ $yxAɻ >z 4YY3L82Om96DWM9(}ثd (Z݀ XE;+k~ aW>먷NjԼߢxىzbve`7Bn dFl:[q!ϑTyfIwN1J˨ݵy+ 8%C @Qo />K^}M4% jP'o\IUL?KӨыzqvy,Bϝmh`= PI}>,-Cx6P~b,!Euj2_$s,DQ]wE7mP4YfsV/eָF ?k".St;y/|Q/ 9)4*44BIwPy04EE E *1ۜ}3 <" "?h:5]~"K4 ]~ypi " fE\gʅl`~C-٨ p[ۥ cy:JOgPhg{)E}Bz\DŁ8:\L OM?yf2ہr pwHy- Nj"> ² z'd*?E8's̶so̡y;_!f?uAI2XOny߇L!:XO8`E`Eݺ4`EA%{xg^8jՕ g[,4>)G+y-$dM,;MVQN-z^׆^d*C4:}wTR=E KFv3G_ lKAT'w@QM`m$N w\p X ^oᡙ_ؙP_᪄"Gfسpr.p^~8kK"v$:EAqKzG$.؍ۮܢո"z)TvH^/w4}T!f XO=oޫ *9-ZjR4o,4?03 ۃ l Bͅ!w=fz|EL}O#^.=0${ڙ$^1(oUb ܁@.U.^>z@ 'n'@<5 \Khno'tS@w SHzB/ S>qq u  }6* QzrՈAf /ɜ5s46,3y} O'wSCjKz#C;},HrJxh O*TnP`ET"‘+4 B+<շBt63 yjM3p▞Isڴ.ߙ2<>ߞu.)D:H8 F>l{%Tol;6Jj{؝na:@=K<C (oyAP4,u ,3%3 "6~t" ~t6U H\Jg :58\?TjoLN: ΨuuC? fm6?qdz Xw|TLC-8{w Zf::3 hВ`{_C} J}ۧ;gi*ܵv@gp<98>O;Łdĥګ-wXa\Ci3Ho {䃊~ Bj-H AT#wHJ! 6kG=iE`zZkI$֓n:〜֋\|I=uW. >KtD6WѡlU?F᛼avz >:̐ԷB# b.p՟e|ڡ|u< H >J\r@V1* &( kmor 8\87r5Lk-j$Pa=1Hiy ،!eVePJfHOC {נ&JvO;,L@Nn4Y="qP$m^6!G'`$*%38 R$[ڮ<(g |8-Jfwf?&O56KvRE 槠؟d_t<?0[,S,$ړB0[@"\~%0%.f"-*C -oSM;J^6LRx_1-xq[2]={ 0F.e/n468.5;`gڙ+Oi[$5 "k،!]_@@V{>k,n=?ࣝ96N͜3E,"5: *{HIVOWW<^A+wyOGR:@t_㐨A'O.n;C#N lTGHXyPnio ,]{A M%8:U=z,V) .q9dwlkՇe"_;ڌrc3"QxVemkIO6@~}d]%5?LI`kSxdtD& ֤Ǚr0qr$s90\>aayr):-jxקC); ,r ,,6m|$裻k \T1_m~>i:0jQFZtH7E - +Aύ۷tϺ9Â7ShS*E5y qٞ==S@ .0\xNԇX1qsQO#==وL.֙Ra^qσʇxmNdn$ U xd6g_u+.₩,6p]܎5ǡ LC߃jcvۚIA,44u QKќMYmAyҿR淴M/Ys,?*JkQw{Z?:: -oΓ :`e ELUMb.Fl xݞ0[M\kF32EdY4ʈwּ3Ixu5Gq]ŞkB<7{B8DVsӨ3<ҵ;Ŏ?śE,F %` c骘#DaaVnF ; \B==I*l̐[#tihVUJIlh C)ߧ`L@Y^zH CE] '`d-u,ҨV P_q]pHoqBXO͟[pZ CY[6wHYiIx'~k 2vLrWivmO=(L r,1բy7CIҘԯ ӕȘZ*|,х"֜'Ӫ"؝%~-ӥ/G |0]8Ӕ[~p=+ȏ ٰ4|F:öUѸ?úZѴٽָc+IB+gIAQ9-rR9T6ަ\[gёkBzDp[+QKַZ/.,`b8/beo2GԤY) / nxSpx sxpC<>j:^Կ?>aS];՜c/ xaY[#_F )p7kl*잸8tT=@Js#{mw2ߌJ4KR S) q \$u귌o/ڽKٖ (߷hc>q,̤bYvmA`7.xuKz>t4G*"8,JS :ӎXӴAj#IӥAs_x[SOI-$=dJC~TDl 9;0*Jy-f^\`k Әb#UMӋ sr 8IGDlx ԙ~58" Ԟa݇׶D!#1%n!NdP*,vʧ*JQy4i٪;C=0n] fr7XUکnB;j:z/׊.GUP/GKܦ OIи&k[TG9;iԭY- -~F ˤ4}_d;>֎'{-8kݝLq_ߦ4yMqT^CyOY:gZٖsǁy_I6!?%) <*- 廧YVz-5V俧Ad,EU:\ xVEkB,C ߻,isK,Oz {BĘ?<>aڬ,H5_,{U{u(cb,:}TR3dhhi,,,q/ 0<-,1~ />\] -7v @xsa-6=Ȑ '-S--nc$8-><ߔ} E-K$pml92^-"a08w-y-g|--8tXfn1B-[L8jQ8lckrx8--ﭸ+M/$/UY[ zx F牵. 670.h0/n6(>#P1S1rX8>0.0[1|1>8CI1K1|.  1GX.a0{1?1 06-001.06O0R 01ֻ..a00 001c.MS016/>!3/-0DF/0/gR06X.-0 0j1.. 10R %1(ez 0J2|l/7F/0j/ /or?Z/v:0*y0.>1dKb.^.L.>/WY ]*{/1/P0.g$[B0~^tX 0ie -0Q.u/].#/z,4Iehΐa]X@,H\#:$ΐÛ|A{XT{U ve ֧֩֍}{ө0~*شքָ<іج2Mѯ֥Rћֿ[ºF)R#83#κ5Q _Nm+E pс7[U̪VӾX_ad$q&sӠ>TGcjNR3^Q y]wDy3t)46 4m4䐕۽4p 4V̞4.S,F̻upw<qJ40dq\'* ,e//H4Mk1xcw_/vwH%5O:+5`>)V~|WEj5f@]Ђ40-WLJ5v1r4܇4q|Wk42q46;fK~ ٗ>@ E&+,q ,#\ӱ4Ⱦ#/Ӧ:\K.{d6=x}Z,68 :67wIǕ 6T%S)U:6~چ]bdOjE6i'#Xsh{P6Yq_U6 KGHHRZ2ekTk6?θX{{whJz63i CzkԔ6h.rXfvwAU6B u \YxuМGAD,˕pU æ&ў(ѫt6ђ3$õ# 0&󍡫f [<7>ӭ517ꢡ:٫VC|C_O|EED GiIe!M92}; 0hӿ4پ־+پEޡݾJ Qjmp1uwy@kp ^m5oji]UMT=XGd0Xxqcpq0vPY}2:Qx3' \g:X1AK|{9{i<-[Y/}AnJg=g-b7`SrQ=vg$b.!@$k~<<- ]CBjRDL 8zF#9\BJ0ZW7.G|}7* >e(8hXLX$ rJ>:1[~Z;wk3noD /@[1i5p>&' 覆?U[|cքHfA֑Eq+6L| ~\cvQ5p55,󁸡|6&FH.vo0atvȆRL3=ZpΠdu)W8&-\ě~Unz,F\6uzZrHxZ^צst-?U$U: KM8rsc4qg˄PR[{-ĽtVq%5ˬq;37.ڌ+}:ʐygX#s:!g@rIL:Bؽup>db sW CC)#? lv=Q:Yy!ҩJ"TF-bdMf͂OXţmǩrr3ZJ.¸EHC-&ҹǔHsmַe:]ђ #zn9&jPF.vјG G HbRxf@?ԩTsRSB𻄠ۤNGdtw={Ã8FgNRT g:KOzIŞT[W=MkG[P \Dn e"rMzڣvQi?xd:16C}dLa}sq$\a 6wqVZ3 @;rIc^+m1DFW4cϻ< ȎPx\7kYBGE?PLGϚy.Vdz_yip5>t--m3[U$kEG.4KÔlc^`i0:46ԜsmJ:fcĬZ=~ƔT ihxD{]ɛìVC4ÚøEƋ&NэJ޽ιGō2zڍ#ȱ1Ѡִ7Ѷ &2ChΓ ~0]O?#D%T3¦%PLa|ɖ9i5/$WZΡw=ywlзNN-4q/}Wm0aωs9/0vox 4?+`O4z(Xܖ3{ۖ/8$- X( z0+uc(됛ι ;1%VIy= 3}g! ag>'R|6gUH~qIA@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~k{! S wr72($]+9`+[~7g+f53&&7p576A 78 z5+[.<3PD;ِ5L+,5}5 u2+5583:3+<3>35bB3+'G3(c5 5WGٴ5 5\/ ΖΓ558ӈvs+65jcy/oO38qc9.@wK6ŬuF8 O^-E;*f [q[Y&hG cȹM TϧCHw3 wqLZJ'4)wݴ/Ā\ȌD?iH֌99\ʌ<=%I4BB6،KM9dPǁRSUPLYNv%xYz|C#sgit? mZvpq8umw_ /fI~^Yh-|΁qVc(?ĸ`m7%Ҹ\QŊOIPR<άJCT"_4A,*S)X6\{WՓIpcMpj@ٛ8TlpgJ<`XJ@{+G~SLmJ:@L:i)uc7wLCcpz:U:1G62ykGBG\/;a2z7 A6d9d2Xʌ4 T1 * " F-9|h;1[Š<)4Ym35BY::m5u>Pj7W4@>.Ę5 iJn+Uk8a"V EX! bni9d:GGTxPy/q2a?LI4hCrv;0+zG~@p!bV:}IsnE}gZkOR 6FuYz/K52q-/ TM=V2782EhY5%U2/ TM-j-h~-0/~782Euvr_2[2466-::\/E7@fj /~782Euvr_2>T664ΛFE:\/E7@!v/~782Euvr_2;/f26/-:\/E7@x~782Euvr_2/66E:\/E7@:/~782Euvr_27 Mϳ26: l3E:0 ~782Euvr_2x66pE::\/E7@.~782Euvr_2͎F26oGjQE::\/E7@- /~782Euvr_2/Cv66Cv_ sܑ0E7@~/~782Euvr_27 k26^E:\/E7@ /~782Euvr_2>726R xz/K52q-1bW782Euvr_2͎96KѼz/K5dx z4V2782Euvr_2͎96R >z/K52q-1bW782Euvr_2͎96Q߮u9" - E -I9@+> \1;_лu0- E -6Y,. ǟ8 ;)4~K J oVC":E8 ;/^#yJbW82EhY5%U68DW- 6hW/@ ,Nˮi#5cxX(>;/^#yc/ ,W_3mg. ~Uru-|}?;7;u}?;H6YW(Pք4Fg.H6/@;-B,P Bk-wL@䮌a#C":E8 N5d٫[" *#6/7i5;k+g5 %[@&B: 3E@ Gv5{V35m+TTP-EIV Es-X!]8 lHC=<+8>9+V3WHq ViC4Es ۪OJUL 13Y8.~Y+r -04|E?< ,F -3= i3F-s3\ ~n}NeV3343x-< )4\r-}Wpim'-s3=i3A- }w4҉kf`Cwt+4tQ\gi%,}ئHn jݴNCNWtBe(wgg:kH: 9c;C$uOS6Y6Vң;;4 H<ޅ`肎nR>;;tJoT ?ocƙp+x_~x˥  'Q -ntJTnĸOm3H>3vPQn!:QHYځX %dJI;k@7ׇH|jڱ3 'A.vV` 7ZOJsJee(w #ϕ]af-T ?P_=?< #-3= i3DTGu+s3hez mg. ~Uru-|E=343x-< )4\r-}GW_Ozs3=i3A- i3_=Κ3]N:7W3O',J i3P s3NFud>I dd+   V3343x-< )4\r-},°B"&°B"s3=i3A- }:z{wh+KC"}߀~W-,K#G5wGS-aC =:pjl( .  RXzΙN>i)#M !ICjXg 0>uS5q ^ 8n7Q[xq5'5Yvh K.5wJ;s NFu}TZѩS-.X@9:0wydX?q-m̹nI{Hu' 2VR pang;́|$,,i#71e"6 Ƨ#eT4ts+JCf;ە,dp '=?<b 6J/3=M,J i3ÀT,6i3Gj]ؙez mgSzpE=343x-< )4\r-}ߦsr $d[0JV|=i3A- i3၎4Q%k_OGG3y?5!T*u} 'E3vm ?<:V; 7;k5s{" hu;Z9tv'-7k } K+Q R 6EV*J\Xrp$*u?-ӧrML 8Kܸ7(߿pKڕ9#Z,F}b7k ~߫6El3-E0 ŘsQ y"BAse@y#N7n@1dҘ1SgN7g)f 2'(N9ېB/DkܼbS&Bn蔑fA ,*< ΐ\M=q ĝ2lشȹ3!0wi89qD38l3*3EeӚqEAӖ,LQ$!6od ' nN7SRcfMk;aQ!C/0MvWhAI&0m:Ѷq6u9SQ,.s5e ~?7E 2Qͱmst_ 6|b -Fah!͇_yVf!p74t4F XXsĠY@~MTAn ƅg"Ag$\l!Xn̈iERdQ]^eՔwRY T@g!ܓuxv%Hx(uM^ C;~Hf4NQoaYmVIsHqXXM&AY%A3`Fh!uņ.EB~Zť 0mZN;lHLeCj⚑XmwaTo"am{9aF N*JB-wyۮ:C 5Fa~$MJ$EYȑG4Eԛea\Fmp+@!EΑǿmehuccUGjKeJD" dJn|Y@qƈa=QKPbFPdDXF&_coXBeLImء[jgj:*TՂ,~o_yn*~<@>'{^R"džOnCa;>D o]_ :$.Z4|UƦrHu:CNClEath)ܲ<`nw<"!z>`>Op&T?9HX$rDWK ~N ?qRD%HI;duj $JSgm&Ċ F8h*L-Ჸt-iE^"l2#8 ?Z b DfpԈ耞z9"|QdB^R*6 jZ3$1 KLؾNM~YBJ𒙔<+mh.iGc`(1I3MK(iL`6.i)_ܽФQ(Y"!r>!hT3͔M' <US)m@ьj ɖH0ѡ7IS:d3͆ba@P>$/yCٮ%apay ҂mLYA5Kg49&g-S&>E]Xm"AQb?(D§M4- &z"4|ZaBV6'Z'CX]=(j-% .W(P81D 6K *Psa9nwÝ;xkJh+$΃^}Є$!K8(D"c@ }[@DY0JU*x ny 3#4P`S:˄Ԓ$N!K-1<) Àgq0Qtib5fuunx" s\K|#]X#fq;Dr:5,D3?DX= rT4'Y>$uJW}B8c 7ɱ"iN6|ԑާ,Koh߉+vH3}_<1/lI„g2O}Qp~m>R@6E!FAAddr-q(cP?du_d_L/}$V}%Sg>}SPWyac7a lAaaa Dab@$b$'_T%+C'AzUR0rQ&r)&HXBZ@d!'SRGN"&"f1GojSzXh5arjqt?&}g&4Ov1dQki>2f2sp|aNQ3X(Jq`b St,!L()o/2iU^8",L6< Q!Sg%Ck^za:U~qee$oF4QquF(I0OC5kJEr&秛s|gzPALq]ԙہ?HGo2/;ju^X$}&;bi}eJ ~%eN$-WNPID^1-YV]'Eidd VXb @l>nC0AyIqiqr,Q*]v)*gX(VC)17p2Fv-DD ;$)CWfĞ+ 1KQ\ iT)CfD&7.S113\ _9}K3nX}3_$\gh~Lx+X1UaɭiA25X!n˓> ˦Ɂ\ F0%yC"HI48R"vA0CMZ˔Â|Y| α,}2 XE9gM0M$G-a1C`rف"DJ_cl5Z}]Ԧi:arp'kDmb:,6hqQJ?C-5 Ջ ^nJ!$"TzL-X9ɲL9S[*/(m 09i/aK%rUӜvd,Ci$V6v``5{r+`'aOЊY @x.Aۊ h-_mQ0D1,Ip 5Kˉ釐N˓>FV&G?hOb1jDt!bAzW#s'[ '%293"4rH^(zqX5' '9Gm.czYv"e,VpXWQb=jsuEI6SjPQcˈW G2C̽5jm`13\:/8uQ:֥~-|JĔH}q![71\8~Lq?{6/gaD{RR_xa=G;q^M?a>O٦컆&>̫Ϗ3VBcj۲rc5ԏ(_}Y3hpD#{P= u y79DCUQ/M5XJp(Ā3tᢒy{o!02'ܣ{U,$ >H T `@ 0hO̼ .##Xq32F"(xbP iDЧQ#\F(lc{;Fd[|hFn@ `y؎=( P@gDXH<x(xBGH#z,< Bx q"@\4A mxXHxc/F8#$p1r;~F(!|9nGd@l#h쏿1?"Zɣ,"b\o9" h8zH$!cq(hiA{:rY$?#}J9vHK[4zH!i2`xL H#ď7$dJ)u%<=*G#7`cu`RH8$wč6G '#iױ4GP.={ \fF:Y3d[V#Yd4Fzi<O!JT "` ;q !`DH@ 0 9r` 00Hp F0  hn f  D  L@$H t%PR(U`S  `a:@ \ ; hN@ `@` h.= W*@ [0%`x$@ Vpn0fx< @:(Ӡ R 6i/pgց`hP``0F@^8pYD`H90\@ h<u@h8W lH @ p#j D /9 DX :@1ZA=n`  0*h́l:`Ȃe  ? Pw- ^x=p $Cx@fxrp HX`t ޠeR@;c|( A"U`N ͠870 2,c @3x"$`$ A7&؂  [ A&pLn @(A0x7 %A@_  Q~76`((10 @184+u`$I @%R p*)DAp8p|# P %(K (@h92P@" b  ^ @ G(X@(`!9 @{@ &@@ˎ"A؄2V@ `2`>Gù`%l Ȁ{P p Up V@E)p3c [pr`M@JHN@Dil@&0Ue $zL2@&Xp@H A0 1 $`X@x)(mp&>( A(8A8p{ u ЃC ` Z!@\(S d&@\ |A͠ĀSp_Hh x_p)@hP *` `JkiA -p PuVā0Z u TH0 .H@ ԀCR@!0 '&wRp As 4n i H: t c`܁{ :,B1 X?x`āiPbl@ j p -x'@́W @\^,5 j@9@XAF o,]j- dk`HPj0@.pd P r6xxkɔA s :h6 ؂KD,x|V?b@Ti@64o@ ҀP9wp6@'@֋)No@!@dp A n`z"5$-N*( J I t-C R2 Jp7y,~@(@>@  5` hz 4XmA xtb 7` c l"`pA(0X \&0 H @JP (ā;A4 ,0  B hE8ăP$%B/t@ hP( w@ 2>DpA,n`5P`> X0@``c0 F T9 ̀ =h o ǀ HQ@*Vp@p P --0"d@ @S }p9p&8hG ;8@T5F0XHH"D` 8@ l` B3# dA%l` ADn)`F Ѐ"h@\"pY@@JEP A ܀kt@8h!0P:0ƀ+>HOC@ B)  b H,0X =; ,$`M@@6DKP@  E D(0@, L@kdDP@| pHx,`<E@H`LL- 4!.F`EA(`Ѐ,0 :@ 1 Du1q.6 Wz ` ȁ NK  :P@}Y\TA ? 0#5d4P@(@L r@ 0PL$ R@ @tl@( hUUA"8@| `A `Zf(Lb `<$h (^ l-0N 2|dN@j Yp @ DN&$O0A@ M &(9 _?8wrp2dO\>HO@q SPA W oi6 ], A@lz B  d Pt(tH6@ +A lpHA?4O_YSġ*)@ +pA @P H)hJ @%=K`P4 dL I)ȀD_QT(F\-@GEH @#P @hT`T* )h4UZ)j < @JD҂R% HP@FK2 U`׀ݗ: 0Ur&@up }R)Ur(xq~R ҁ*ঊ V  ئPP~.h0.@H@( ȁp@g S H"J@4 @)`  & LI9"iR` h` :*hY p # * l) l,F Z!- @6o@Q,hǀ ,0(rF ( * h@1P  `sl;P 8x@= @$ J>@ ` -6 T ( Xp @-(>P -$@ G@ @ ~E@p@p `- s. i,p(K6` P @-y@,|@ $ Xu D*T{ <B.P @@۵ : dK,P -Fg (m *@$ ,/l xA@ `,$ */ (@: /, @00 ,="` T;0(*p>(|_@VM @7@ @,@ '1x  W1`D$ {ph 5@0Pl@  Y0P2@9@X>0 p0Z%h%p@p% @ <:E. Z@/@0_ |K.=40e5`!p \s3tqL!pP0@  )J T`p2 v f` x@ 3 41@ .0 0ua `^  v3 P (ڀ0= < .p ƀ``@(p(ƀp@PT@2p gp*y @ DS(  Dl3XA 8+2 X