You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(13) |
Aug
(151) |
Sep
(21) |
Oct
(6) |
Nov
(70) |
Dec
(8) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(47) |
Feb
(66) |
Mar
(23) |
Apr
(115) |
May
(24) |
Jun
(53) |
Jul
(10) |
Aug
(279) |
Sep
(84) |
Oct
(149) |
Nov
(138) |
Dec
(52) |
2003 |
Jan
(22) |
Feb
(20) |
Mar
(29) |
Apr
(106) |
May
(170) |
Jun
(122) |
Jul
(70) |
Aug
(64) |
Sep
(27) |
Oct
(71) |
Nov
(49) |
Dec
(9) |
2004 |
Jan
(7) |
Feb
(38) |
Mar
(3) |
Apr
(9) |
May
(22) |
Jun
(4) |
Jul
(1) |
Aug
(2) |
Sep
(2) |
Oct
|
Nov
(15) |
Dec
(2) |
2005 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
(1) |
May
(28) |
Jun
(3) |
Jul
(11) |
Aug
(5) |
Sep
(1) |
Oct
(5) |
Nov
(2) |
Dec
(3) |
2006 |
Jan
(8) |
Feb
(3) |
Mar
(8) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Steve F. <sm...@us...> - 2002-10-20 23:23:47
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv28263/source/com/b13media/mock Modified Files: ExpectedCall.java Log Message: Made ExpectedCall public so it can be referenced from outside the package. Index: ExpectedCall.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/ExpectedCall.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ExpectedCall.java 16 Oct 2002 13:56:41 -0000 1.4 +++ ExpectedCall.java 20 Oct 2002 23:23:44 -0000 1.5 @@ -7,7 +7,7 @@ /** An expected call to a method of a mock object */ -abstract class ExpectedCall +public abstract class ExpectedCall extends junit.framework.Assert { /** A constant that indicates that an <code>ExpectedCall</code> accepts |
From: Steve F. <sm...@us...> - 2002-10-20 23:22:10
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv27623/source/com/b13media/mock Modified Files: Mock.java Log Message: Removed unused imports Fixed javadoc tag Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/Mock.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- Mock.java 16 Oct 2002 13:56:42 -0000 1.7 +++ Mock.java 20 Oct 2002 23:22:08 -0000 1.8 @@ -4,9 +4,10 @@ */ package com.b13media.mock; +import junit.framework.AssertionFailedError; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.HashSet; @@ -16,8 +17,6 @@ import java.util.HashMap; import java.util.Set; -import junit.framework.AssertionFailedError; - /** A convenient class for creating simple * <a href="http://www.mockobjects.com">mock objects</a>. @@ -306,7 +305,7 @@ /** Fails if not all the expected calls have been made to this mock object. * - * @throw junit.framework.AssertionFailedError + * @throws junit.framework.AssertionFailedError * Not all expected calls were made to this mock object. */ public void verify() { |
From: Steve F. <sm...@us...> - 2002-10-20 23:20:38
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv27037/source/com/b13media/mock Modified Files: P.java Log Message: fixed not -> IsNot (caused infinite loop) Added helpers for creating arrays of Predicates, perhaps these should be overloaded on Mock. Index: P.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/P.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- P.java 22 May 2002 10:02:58 -0000 1.1.1.1 +++ P.java 20 Oct 2002 23:20:35 -0000 1.2 @@ -69,7 +69,7 @@ } public static Predicate not( Predicate p ) { - return not(p); + return new IsNot(p); } public static Predicate and( Predicate p1, Predicate p2 ) { @@ -82,5 +82,20 @@ public static Predicate isA( Class c ) { return new IsInstanceOf(c); + } + + /** + * Helper methods for succinctly constructing Predicate arrays + */ + public static Predicate[] arg(Predicate p) { + return new Predicate[] {p}; + } + + public static Predicate[] args(Predicate p1, Predicate p2) { + return new Predicate[] {p1, p2}; + } + + public static Predicate[] args(Predicate p1, Predicate p2, Predicate p3) { + return new Predicate[] {p1, p2, p3}; } } |
From: Steve F. <st...@m3...> - 2002-10-20 15:45:56
|
Back again... It struck me that we're not really converging on this topic, partly because we don't have enough time but mainly because we're not really working against the same problems. How about the following as a process? You post a (made-up) example of a case that you want to unit-test and that you think needs a change. We'll respond and see if we can find a meaningful way around it. If not, then you win the point. I figure that this will be a reasonably lightweight mechanism for understanding each other and for pushing the dialogue along. One case at a time... Steve From: "Simon Levitt" <simon.levitt@> > I might be able to get permission to release a simple example, but even > that is going to be muddied by the use of our own Connection Pooling and > Query management/wrapper classes. > > I could knock up a simple example, but would that defeat the point? |
From: Steve F. <sm...@us...> - 2002-10-20 14:57:17
|
Update of /cvsroot/mockobjects/nat/jmock In directory usw-pr-cvs1:/tmp/cvs-serv19167 Modified Files: build.xml Log Message: added clean, jar, zip, and all targets Index: build.xml =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/build.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- build.xml 17 Oct 2002 00:34:48 -0000 1.1 +++ build.xml 20 Oct 2002 14:57:14 -0000 1.2 @@ -1,43 +1,78 @@ <?xml version="1.0"?> -<project name="mockobjects" default="jar" basedir="."> +<project name="jmock" default="all" basedir="."> <target name="project.properties"> <tstamp/> - <property name="build.number" value="0001"/> + <property name="build.number" value="0001" /> <property name="jar.name" value="jmock-${build.number}.jar"/> - <property name="src.jar.name" value="jmock-src-${build.number}.jar"/> - <property name="build.dir" value="build"/> - <property name="junit.lib" value="lib/junit.jar"/> - <property name="compile.dir" value="classes"/> + <property name="zip.name" value="jmock-src-${DSTAMP}.zip"/> + <property name="dist" value="dist"/> + <property name="classes" value="classes"/> + <property name="junit" value="lib/junit.jar"/> <property name="debug" value="true"/> </target> + <target name="clean" + depends="project.properties"> + <delete quiet="true"> + <fileset dir="." includes="TEST-*.txt"/> + <fileset dir="${classes}" /> + </delete> + </target> + <target name="compile" - depends="project.properties"> - <mkdir dir="${compile.dir}"/> + depends="project.properties"> + <mkdir dir="${classes}"/> - <javac - destdir="${compile.dir}" - debug="${debug}" - srcdir="source:test" - classpath="${junit.lib}"/> + <javac destdir="${classes}" + debug="${debug}" + classpath="${junit}"> + <src path="source"/> + <src path="test"/> + </javac> </target> <target name="junit" - depends="compile"> - <junit printsummary="yes" haltonfailure="yes"> + depends="project.properties, compile"> + <junit printsummary="yes" + haltonfailure="yes"> <classpath> - <pathelement path="${compile.dir}" /> + <pathelement location="${junit}"/> + <pathelement location="${classes}" /> </classpath> <formatter type="plain"/> <batchtest> - <fileset dir="${compile.dir}"> - <include name="**/Test_*.class"/> + <fileset dir="test"> + <include name="**/Test_*.java"/> </fileset> </batchtest> </junit> + </target> + + <target name="jar" + description="Create a dated jar with all the classes" + depends="project.properties, compile, junit"> + <mkdir dir="${classes}"/> + <jar destfile="${dist}/${jar.name}" + basedir="${classes}"/> + </target> + <target name="zip" + description="Archive all the sources for the project" + depends="project.properties"> + <mkdir dir="${dist}"/> + <zip destfile="${dist}/${zip.name}"> + <fileset dir="."> + <include name="build.xml" /> + <include name="lib/**" /> + <include name="source/**" /> + <include name="test/**" /> + </fileset> + </zip> </target> + <target name="all" + description="Clean, compile and test all the code, generate jar and zip files" + depends="clean, compile, junit, jar, zip" /> </project> |
From: Steve F. <sm...@us...> - 2002-10-20 14:56:27
|
Update of /cvsroot/mockobjects/nat/jmock/lib In directory usw-pr-cvs1:/tmp/cvs-serv18440/lib Modified Files: junit.jar Log Message: changed from junit 3.8 back to junit 3.7 for compatibility Index: junit.jar =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/lib/junit.jar,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 Binary files /tmp/cvsIGcBXd and /tmp/cvs6j997n differ |
From: Steve F. <sm...@us...> - 2002-10-17 00:34:51
|
Update of /cvsroot/mockobjects/nat/jmock/lib In directory usw-pr-cvs1:/tmp/cvs-serv21088/lib Added Files: junit.jar Log Message: Started ant build file --- NEW FILE: junit.jar --- PK èòrñr /á÷m4¾v%4m9ÊP{]_«(ì«DËPÆ^^ês´:< ¿`Â!?øês©ÏCŰOÆöBÆÎëEcIÈnï]°R@¯\8XÊ#¡ØW¡ü^dü]Æû/¡©çÍ1HX_4¬µÏÂþìTÆ?¢øB ìî©ÏÜ,þ{ 9X#8c\FtñÖX®c@ì¢ñ¡0ÒØ_q\zäî¡ÜÞDÈ^@¼J¾e³yá[À2×.g¹¶öÛ»¿°zm1e2/«SáÌåhº¯QåH¨áÍ\å3G]jß`õ7ÿkTÙAÍjÔf¸¹ÉxgÙó5ÓÊPKØÞä ÂC Å dLIgj2¡ñýB|¿qãJ÷ºhâ1ç°å·ºõ¸séÖÇïδ%- öææ~÷»ÿÿþö߯wÑ|'°v¢b[nÒv+VòpÆ©¸G,£èäÖ ã!uÉya³@èEC+ã©ýÑ1it A! ¨²é5ËÖ #S4©_ì@ÃcRX³äXÉÊ ù1C ZãÒ66 h.Ø9¶kX¶YR°R ̾ÀºX¾ì¤ay³4 cÆ «°vq¬É)Ç6mæÔƵnj0>2"}Öa½'ÐAÇ*ÍÎY®<Òê¹EÃÎ'GÝeç½\Ob<ãæF"+®ëØ ¶0ØPÑ)*¶ÉÒr+ºôÜGg¯íëjy© ÝØ!Ðnär³®åØ)«ì$J`S3æ57¹ØÂ±½Ê.3fQÁb>~ÙUìÓ°WÂ]q¿ÉßS¬GÅ #Æà9Xf&v,ÇÍìÕaçbÃ%+[3&' £¬!×ñÝ#8/3 ÔÖxÁ)'ï(x^CZÿº¥Â.(»%ö[VðKÒ*§òºà%\SzeN:AÆdÙ4R2måÜB¦/Ф´`ZùAÁ[;[pJ\õEE6'KL «áÒi Ó 3ëߥ G6ßTcCؼ¢g}*ì·ùêp5Qa^ËÓ³ SK\Hö4®K,3h] ^ÑpS¶Äý,;çL+xÍïÿë£úd± w7ð¦×ñã¦øªLfÌÒ9ÿ¦¬Q3Jü>'¸çÐÚÀ<ìQ2e'´-}Y©Ëx/Ç""üÇD*²C{9zM» c?ÄàÚ³÷+)5«#õr[Î9¢ 2ÕhÈ|i£N¥5Z¶vÈ#²oF¹lCßQùê£ «4ÝâªQXLl¯!h®bE¢Öt Ñ*O´ãí¸]ÅD4VEg[ÓÑx Ýut§5$«Ø]ÇÞtt }§zêèOG4·uÖðtCRSÇp:z¬gÁ©*ÎFÏq©âÍûz`Þ¡eÞ!ÍÔûu\âæÅþ ÍÂÐCͳÈé¡À,òÞ:¡Ú´YL&zôP/Ï+ºæJ@Ë}ÞÛOèo®t¥Á^ÕUÏ^®9oÍëªg¯zöºZG9ݦ6ó·k³¸èÖÕ ?¯bïݸ_Ìù¾W>Eܬ¤8Ûø'Ûð>æÿCfú» 6ÌÍéY{Rå`&!kfÆÏ)P¨3' 3óù¶tÏëÚ«`Sq¥ÛÙ¾¤LrSýØeÛϾ¦Ã&qQPM(¨M:CÃ=h¡M ê,bëÍ3us§åè®hë1ß5íl"¶¡fl aZ4¬Çz>mU°¥b5ldL}ÜÕÓ WŽ Z£K.Îܼc¶M¦Hm¸ôLDsteÄ!±Ý±íTZÔMÐqZû%6t)hX¾KÅ.ºÍ~ÍÎ*·¦ÍNO{»`¸Ø(b!ìF\:Ilù¡b 4ô×û4Ô×P^}¬gøcæ&´>:dp :Jñ°õ}| -éÃê6VYWñ1I_ö©áSixà3^/¹R7ü¢8õ%aÍ%ûNTH(_ãò-µ<ASzW½ô©^N¦àoÜ$|Z'7ë±Núx>ÀNkÿ|û÷n Çtü6ÅãáÍ´ÞĶ;hâL{ª;~Ûj ØÑ]ÀΫ¨÷?Ñ1^@÷Mô÷ÞDÿU4ÆeRþûe©¿þýÌlü»ñ0¡%ô Pj ¥MhÅ&Zl¦E3oVôa+í¶áï¦3`í<®Ûq»Zè°ñplex1"k)¹Psè6¯ãäÔ_LOÝÆ©_pPï`ôü ÎÝ¿3Á#{z 0þ@¶×Fk¡ÓVÌÑÏ~ËÈ[H5°³]a'Wv1h,^YB&O6"ª¥Fæñ=ÄèÕ Gt |äKhuMrêÊ¥"ÏEþkÊ4å&j+0ÂA¨=Ó¹X;HÙ9x¯ä,TÂã.±t_Ç[¼×Í(|t¯ øn)RC ~BÜÇb쯩DT¢|ìûá?PK(ä ¥ÐqÓ\7e/3eÖÍJ Ëg§ì(¨k2¹\vÍ"'Y Øò¶ xh_å©ã6¼¦I/*hSå¼¥£ zÚu´bG-èÔÅN±ºuÄ|«GGÜ· Ýu<åÕµrÉ*¹Qô+D+»`ß³ZÓÙìð¢gcÃ]²æª«7,ç²y£È3Ý3åY\4[æÁ¢ælÂÞ5ó?|L(´¯0kºÕÊT¹(t§gqMNý{%ýLÛ±ò Íu¼cxig «¤ÃðWF¸²fÚ%W!®ß;çk;W;¼fîÖS®ò:2©1 6oÏG«ãý Ë´¢x? pqánŵVôãd7W.¹NENÎ<íó8c1¼ ºéúï(N(ìd Öéf¤`'q*×p*"ÍOEro`xÞʹfi¥h1àÎH}Ï6j"ÜâéÛ°ónAGVÔs¨Âe¯\3þÒ,a-ÛÅ¢ÜcT¯¸$PÞàvÞtn1»:üº\EÇÜQéXôO¾)Ñ ¶Ë%ÿ_bª=O¿ÏI9Þ'@çqY³Öű¼ìïų£âË·¤Y¥<?Ô¥EØmdki ÞF¾Ââê°qSüÜÒùè=)¬ÒC ¯@Îg·u[$ÆÌ¬é¢¸MÝ®w7ÕQ*WÖÍbWcíRé¸ãC%Ue¬I÷Éo«»ümðWD¤´à3n¸~Ñ*ZúìßGܯÙM*Õ\q¹ÊCñ rÕÉYÓ¶ ïlx££öò𧤱ÐRÒV¼o,øÆ½o-6!ÏpcKTüî5¶ÐaD~A zeè3:{:j|ÌC-â8DÇ ab´Ûé6A«÷p¶ÛÛõr¾×»ÇâOó+{Ætýè&mâÀ£Ð};]tÜMw;%õÜãÉÊ©áe=nrÕGBú!eWIÿxàJ¬Ã8âaÊNÿbfróöÈ&×0iÔ0=;x×ù«a;W¸,jùH W9ÙÉ&ÞÁ¶ÿ©ïëÐ È ³bkßíÑ9ÊqtNÐ%ìÇߤµÇ¦u;HK ·ñ½*iA÷ÇFXö÷ów_DX>Ép¶`ÎhZ_+ñÍ×ñu{jK³ôÃDh¼c!± êø~ ï<¯ßÿPKä;lx Üàíª±MHåYäi)ΩËÛ[ñdsa¸`©]aæÙ&·Æ>«$Ø7åË /¤cMåâ-nN1&Fíý±} ;$Ô,:6Ô®ÄÛ¼4£)VH5¥$´z¶ÔjÞk DÐg0e/FyßÕjë©EúK«e¸+Õð£¡eOgYNð»yð&?Ç·Ð:8´ ¶ka{dÊô sYÖùÍæèÀa~ó¯b(:ÉAUë7 2máuº¿ÊÈÄÒ¿Úná¡ÓJ>³sÛxjR}¨xÜÂ35¨ËxîÎOY^ØÆ¥Ï1ÊÆ¹¾yªN)¿ÂÜbzþ&^RBG]¯!Òÿ+cvs¹^-ëèÖ·±¹Wm-\Éw8Dߣ~@~Äiú ô3_½_°H¿BÒo°èw?ð1ýOé/|Fãú×èߥÁ¨×+,M`ïà]æÉâíøpøf¿Ï§:üAÿ*>ø¦¨EܶÿPKM ¼31 ý78jwdh<d®Ë@ö¤6ÁNhT¤*1© _ÌJ*5Öoþ`o^js& ¿©µE[þ°Ò"dw£SIÈ,¯´|ðµ,¾ùðËc£bCiy·e|"Ú]ÆQ(º-+[÷Yk0ûÉ_:Û+ 7Ö±ÿDñ¹<%,²·AïÙÜù+Öó0MÈÅ©n¦ÊH³ÖùæÄfæÿ§J(4£4å¾²Æï¢¿,àØb·+D&¨ñ²à}ò-Ù½pÌÃ!¾pís¶ÎµëTP¬®ÞaìÆaJe_þ9qÎ|¶;I<$¦ú*Û-6W½ÅØ=æ?j\±k§Q~Ãõ5l¶ï½è8?ðÓ±ÞôÒ+PK±NÓâ Îdb¾¦Z˸Ññ@ÒXLE0ú[ðy8¡ñ!l».S9ÚïC£"ÝSLõð°j.TÒh³~où|ÿJiTÈø#ŨcBmï!Bs@Èv£$dö<+ ç><äòXAPì)-OÓË¡ÏÄpÂØr/ Åd beëE3kíªüÕè°½¢pc}ñy_Ê¡ÎÞMþÁæÎ_e¹MB.Nu?UFú¨Zç¯P#ÙzLPèGiÊÊ/Þ¾³,ÿÉÝH ÍkÈ÷É·l÷Â1{Vøðk³®]§õÅÖþ Ö~8LÙ¡ìËÌé¬sæs´ÝxÉÄÆBå£ÅæZ×Xûÿ5þ°[§Qã6ÛÆkÇ®;ÎÞ8Ö\(ßPKqø· ;@®-¯¥çËàÊ;«·©¡$æm)]S ½M41ÑÁ Àn©¨°Íêÿå÷ÒÕÛ@·H«ã÷£Xy½¡XH»MH¬k.2É QRi '¨NãNÂY÷¯tÒ¯ÉPº×L{s}þ*창⡪Zj*·x|j ,²¹¿ÌÚú_ÎÁ;»ÊCªÏ[¤¦9ãó¬~Òj7t¬ùìòá¸'¦(û2(Â6¯" Þ)ß¼Ù Ç4ÌàÁ0×.g»\ÛNé ÙÒÆÆî,&oQæåÍêsær4Ý LräI1ÝS9äh°©Ò=Ʊð[ã|X©o\OÃdX²ìeËYÁªe}ëù/PKD´Ü ¿¡µI\ü°T#dw¢3IÈ,.Õ|äÑG}><tçÐ~B¡ª´<H¯ê2>õ&cÕ(Í[ͬµGøã¯R íëHÆçQ|%ϳìÝä»6wþFÚëy#tÆ2Nµ k{b'SÿIò'QrOY× ÅUË"øû¶Øi$ ÖxYð2ùíR8æ`Oß<z¸ö9«pí:å'Ê˸s¢CÙ7§3ÈÏÑv0Ì'ÄhKe£Åvï1ð©ßïìàÃi|ãZ6ÆcÏ:Îæë[(~PKREI lE+.ÚÍ¥ÖRíbkmµÖZß÷Ü÷fK&öÿçÜ÷î=÷ܳ/÷Í3ÿd?9h¦úiì9}¡@¬ÆßëÔ¬4£±}¡q3M´Ö"z¦f±?jf8òºEü=&SqÓ9þ~ÁR£gê ºnê0{cp(ÊTbôÅÁÕfG,ѵÌ0î.u :èu׬Ü1ý¡>ÝöcL,âºä¸þpäÜô*½]+#þ³{JÓÔ47ÅdRãkëÄÌe3ØÉT £gäF§W÷ÅbáJºGÂÝ3mu:ü੼)SIÅþ4»}³)Ei2 ®àÃ@ÎTYÙ4èº9æ e>ù(ç¶½þé ±b¡b]ºIäáÁ¹n®öòL]ÞõhY ´ê dUÆ)PYªhÚ@Ò{E\,z>:i ënF%Z1dßP5³Çzy× 5ëSEIæA@nÙHMùìkã*TðÓFvÅÌþ¯0{ÆÍ ^^"4*BÏ5vHYi¹=u/ãE'AsΨW²bXÄw2ìܧµp¤Ó4ù7ÃÝÜ"i`¹[H¾. 6ëB|bVñ$sÍþðZzYÁmßJ·,Õ¶9ªÝ:Á«¥{A:Mç ÐpG_Ôà¯I¨láJOÚ@±!¨pø Þ*Y,Aè}=!ì¿a£üÍe~/óò6"pw´¯ðòï á'aJÈ\×~¯¯ÉTÕ »ù:¤ +m^~QúrV´3rMJùµÄßdZBòZÍÍ/zù%Ä *¤"¡ý·7®÷ÃÃ~'ö¿*ÿ}S ©ÿ0h%Ö·Gë±nþß%]N¹só{^~_HOåçÃÌØeäIQÿÇËèè.±,y ¦¡?5÷"ü D´NEçÄå¬KWuµêè,Y<4íÉg äÚ7°^½Uw»ÀÓµ^¤côVÔ6þdjCtéÞ^tõÚ£ÜÖzT¡KV³èÿ÷rIcã°n®ÕhEä-zaʾSߺd*lÅò;"4?íyj¼ô íÝüjîÕD}5]TÎ+ÝÁQ3UR« )JË{½ª/ õ]m«i7÷äÆP§¹ÉPÓu¯Ì,ÑVÃÁs1·)a˳˪ÉθZÊ C,;û:Ш«RE·]3ÎΰÕ;ê×êduheŶc_7ܪ%«ÃÍX@©é%m¡d¸% õEàL Ù²k3¼pÏý9Ä /å&] l]2âé¹nXåJ.k¢rk¨uêt1qTN¤RcXùìQV9ÌäzÈ êÄèÕ:ÅÓZ/zSWÄÔóM«k® »±Kéôu.úfò:GâVGã[©ïÁÊ+s_I8éUç + ïÙ° ð,·-ØY Ç*"VéâQýY÷'nµÙ«¶È=°h%V+RmýylHÅæ.P_Eí¢¾FÌ[Ä'õ~.§üºúÎP[Ŷ¿©[]bQ;¤³µ÷7Õ¥êuWmT`¢<Pônu9<1Ý!2Õ ?!§£çR¡®TWyÕêÛLSs«Ín1EyëÕ5*¬®E«è÷G+¢©;jº¨bôãUè{bú$<oëc¡nÒ×òj;\ɬ°SGݬõ¡iBNbÄ.äZ&¬3ôDY¬)¯ÓÚ°úhwu¥ Bä;Õ¯!Ä@h#$Ô©§_Ð-¦zÑ Ëý¯ÆVfUÊö 1x|YýVÀ_ê4WÇsê÷° U¹6Zq䦣-Y Ã<ÑåKС۪AÜL½Í°è8:^Ã,J!0É¡a¤úvßÔ eMUÎ85UæjüÓ y]F>VS=Hç@s!yÅQú ±2û ^D«5kè4ûÈf%Pc|´¶½äY§õqêJP`(Çñ¨Çبåé:W£¦Po7ò¬ð¯7N´Å×ÞüÞ.°f¾§KªßEyÕ?²;K¡°éCØ«Èbå80³ XA/E/EÃ7éR{ÁhËÄ»4LV¥:1´y bEÈûè8}ÇWrSõÌݲ&a~§µv[ríûz--)0x¢Å0×% k)°Â? Om¦ÓgQ¢³ îÐF)OwÒ4--´~i9¥×µhçràçé¤Ýí º§Ö[î<@÷{Ç8è~®cÈ Ë½ãÝô0ÞòèÑ1yÎïQþ¼¼[)¿Ü[4@{éö1Îävï"§cròÁíNÐSôóªêro~fm>¼¼¢>·ÓßY ;[fVé50ÚÓ ôvÍj§Xí¡_Óo4«=ô½¨Yí¡À¾C?½'§~ú-\úi?òôÓ+4¨ÅÛ#:AG>uÒïèUmÛiâ7KvÅ«öÑaÂ% Ã[þ ;n§Ô:Ëij&ÈÛ Cõ½ðóh{ZûD7#mA,8±àpz>ì+lþ"ÍY EÍY-â ÇÒQ<çJÊ[qÅx^½Uéü8×s. Ú/ËðwoJf^^ÈÇçE6>Á/RôRÜæ)OÏ+#{lLNI·Ö~W ðDA^bIui3¤ØØ2ó yªa"·Öv#Á§ÆyUõ^>=ÎgU×:1ío/w&x}7ò¨uùÊ]q>·Zþ ÒuÀØàójó|m¯:Hî*¾RîKðÆÞÛç¯ZÃ×eØKâ|±<WÆùRyäm¢×oÅùrëõJy½*Î×éõ8á; ¾q·cq;lõy§ $dÄy°ÖcÁ=,2ÊǦÛ= ~dÞÇäÂÄcq>ÅéS û)Ó§ùú8ägÛùùvÓsà_I º;v#þߨÝH¥÷cõºãýÈè!z¦gG^Àø2ýÑô6¤÷éIúaù1ÊXz+èyöÑ/ùXú7Я¹^à3èE~ËéUÞJø*ú_K¯ñߥ7ønú+ßOã½É`|þÅ/Ò»ü½ÇoÑûü}ÀÒ>V£éUNÿU_¡ÏÔú\M_¨ ±[Ì^µ àBµ Ôå\¬náÑê.Qû¹LJõ*Soóxõ9;y¢ãpä8§8ã©zp ál²ÑÑ N&ÊÀ§¨Ø1O9¡y¶£TåaÎIËÔg:ºèLõÐ:³©<*ܼU^änoåª °.Y]Ñ1j jQÕd¨jp§V«565©¦ùÕ>¤\ã-9æ|¹,·7×Ú¢2Iµ'Ô¾¸:kHÉ_Ø/ÌÀc¨³_ãY¯:tÁ£Ó¡vÐtµ5UíSêp+|ýâG4åÓè]5øQuD [¯bº}Vï ä6ßväÀØúËUÔÆhj¥*Ut£¯ÎO÷úÜ\õ¨ÚØÞ/ÄÂEªm¤mWßÚ§®nÞESj#î¶ëmÂåÎÕu`Hç׺Êèð·ÓT½¯Üeµ^¥êÔÆ]T/0W ½ t£ ¤vì²ÉN¯ÝZÛ£¯w¨!e-r%ÄW#]]K|=Î7Ð|#Í<x;-E2_Ç7ÓHèݼý×ÔÇ·!ÔÞÐú}ºï@ý ]Zæ+ôuÖË©¨ó²4£#«ïjI{ õÐ º'¸¬týKá9·ªÛðÔMç©ÛAÔGêûHÏ.rÊ·m%w`EsµÜlsÈ-¤¡äCH? 櫤Ë]±§A0¶{ê®ú$ã Tpè-âêî´mù¤Aç»uï¦Þtuds/ùøÇ4þ~<ï¡Sx/RÒ.³:éËjwêvgݹñUAR±¢ «ûx@µ§,àJÉÅûú¤2þIî$-¦ÃäÓ>â Û9 à¬?>FXüàÿf05=§¤Â¢¡/RîSël¦&gwx{îìðͨ%É/Pú&¡ÄN3<9ÅðdÛêÃów>éô%bee¹%ùð{ %ßåþ¹ü%ä¢÷¢²+Cõ> u{Nrxô©|ضºÂ®æúófüÝjûèÑôþÆi ¼ÈEtõA2à=xÜéópZ2OP*Åùe4M¥J5fªñ4%XZgsSô̵hUëFG}ZTiÊH߯«ÿ¤³nvjRWòÖå¾G}¬>±7N·¥¿Ï¼Õ¶|íóa;ÿsg¦æôNå²S©Oõÿ©ÏuÎðò$=_Àýö¸Í¯´ÇöxÀ±ÇwQ=mÿPKk1nv QC£"n((Z%åChÌ`X3ÇñÊkªª´Êðe|õï`تäbæ¤9çûÏÖóã××ïcr+ ÏUEù^I/pë^P®(÷k¸JZC¯eßy-ßÕýWÅMÿ\nݪÎÔ%¶k.C§âùÄL}IÚ°ÐB)tÙõ䣯ëEéÏ;5)-×+NmÁñ]ý;:L¨ª÷ÊwR ;_^qÞ:Åã½,ÎÔ YÐÙ%ЮªÒtmqe9ãçïz/#ÀA èa6¡3Ýâ'pr«úN¸>;ÂÖø O` _Þ®ÍOdШ)D[b°qý:v¼s\õÔSnmªrÉÆqÝÝÙ}ßDÝ-`1} 0±}»çÆÉì5ás Ïò{ð2Ðý<Â(Æ2Í~ÏW}é,Y( $åøÊÆ9ݳ8¯Êܳ½÷Wý;ã6ùÀãÅYQ.§Gaãªæ_Ý:4?º\ÿëÒs»!ÐßD<%}¿ñFÉ¥;ï+òbS,LS;+ïîHNïïðyWw RWWîòéZÍÆÝ0Í{©¹zïÈYW_´îaÑòvÉó¤oÖYäv% ëcÐË n0+JL[£ÍKaG)¦ñ/Èé< k8ÑÄgM»ûë ~Uô_öPKøôU ³XÜmzndËHz¡ë{¡½zPÇ F+N(u¡¶_5pöä¾¼·Ï¬)ÎêêACV"¹-Ð[Þu>8vÝñjöJÝ Ã«.£¦óç¬ëQàzµ aS@[ñ·¥Àà%þ M:2&®àj':pM »ìzòUsoKÎVÑ}e¿âÔ7ÀU÷ãZ´ãSåÿ3'rÍ#a)¬åI4ã0T^á7N±VÿYðÆNàï+ :Mdq]Ñè9sy½µËVêH×d÷9ò D£LÜDÎÀ8&ÈþQÇ-fuÃå0tkª¸ø{ùd¿ß¸iSÈ^dú²YÊ@G NÆ;¥K£hÀBSv éQ¥ó5Út ¶óÄla|#¿mS8ô½{Ê÷¾ÂyAd*öí!§VuܺÇJ%ðä Fg(ÈÊXi3ÖýfPk®M6¡9 O øR\;xÖæÚÉÛÞSÜ3Vñ¦Uú®ÃØ©kWlaà(¡·\Û½èâS?âô²*GÝpâ7q¡ëà>oaô3IY_ÐUla² ü'hÅ_?`½í+aVYZ¸ÓÂoxzçÖù,£çiÒaµ<ëYF 6 e¶]ëeû3,1ÀóÝ¿PKÞj Â=`¡¯¬üÛ¬pkSèTm¼lVU}Kµ4û!gG³FË::'if:_1gù.ƼÚÅîjsÂæò%Y\~Rl¹1ïÝ:·]]8H/pñy7${ÇtõÚc¶<×2nc\Â-Üqc.ï&®¿ÒëkQÇìØÊ0ËwMúÏî-»õ:§v1 ¢à¼ÇÐ6+YȪ»|Î0~ú!×*»¼J»éd<Ä# ðXÂâ$9gù¯B®¶Zܨ1L×][Z vñ¨\iÃt*©8ýðSÌ.ÑLF«#ÒØCQ¾Ë ÍéÂDræzÛ÷·øUÈ|Cò0Dã ´¨5¡öÚ7)ª^±L ÝGªÏ76îcGvm4д¨Ï=ò§±ð)y·7¹]gîS'ͬ¾È½Ì¸Gcxdã!ö-<ÆsÊãt$Û°~(Öiûê$ÿ;g=²S H«/T,Mð/ÏP;-ŲÓ*ÍbrÆp¤-ýÁ¬ºi£H_[¸127FæF£Yϵts î×/%/¥ÌK}w´¾(õ«âý%q1TÕÓPK9!éº ¡ys?«¹LêãGÄó ÿEìË0UB§ÊÁSÂÂ@dQx'µöl±<<Ãs-¼`Bí§çÎxÏ<zi®Bù622,N¶Û2Þ»$j/Y&3l³¦%ðo4*¹Ù/Ã|5#ù$*ðñpãEö^q\d[ñà¿~º¿qÆ7[xoת¶õ=%SûxÀEd¿eöMÅCÛô3¦ªéGý OáÓ¸B{Yö¯1vá:ßKܵñÏæõ6ì½-»Ù÷PK^?úVé t-PqÃMÑn6 Blqée2²¤r¶×â$x qìDíi%"Ù>>þüócÿþóãÊx>aó,=ZFIGÉðH&úPêtâÂõéÇJèX¹(*OÖì6zãLþAsy«ÏV=Ú=&8ûñ©¬b +ã ¯Òó©ÄI( qìðX¨ÀÌó¤£? ¡=otdT<!´Ï'U¶ý½If.ÛóOé>vÑ z,æß¿î¡ÓÂ)]¬ªìøµµôµ<%<SÚ²ùS<{â6=¬ã&_²ôY-]hBØZÈ%,%R¿e]¹gªæ=»ôåDZgâ"ú8¦]t ËZ u_ðExqª|ù<07\ïÙÊ¿þ"¤ÚEÈ;(ñ12ï{g{/ñXé¾ãÊWJð¸÷lö+k¸ÊQ+S¡Ê9بfVQÏYï]æ±þÍ÷×z9è?øö[³U׸_·è[Ù¦)º-té1tWñÜæñNnÿ®=nÀLá+6ѱØj¶cÜûD· L:ôh]Í3³RP9ªÇv¨ê8FA~ëÀ^ø[Ó㨠9Á;ê5At\Z®Ä[¯]Ag7×kõÑ®ãlj½uÙ#{±ÆÒªðÙå£¸è« ZK÷°HTf_Íìë±<5ïÃaZØÎbMûèF,Úxº+9Ä;×xCg`ÝdPµ+Ãvf ±!,¨bJä63³ËGì+³?\ú ººº±(á^2h%2&æ£AB0éF&ݬ'D"L:gêA$aØÆdýbÛfP>¥mnWô1Á§AáÈR#oåÈT¥ÜÝÍó²Ú<wý¬ÚÂ4@(@n% ÝÝJÔdѸ^´Onø«¦ì¶°Ì¤,¸Ð J²X_ÛÃbwèÅ::<£La ;á>²´,ÚÑ¡DÓ,z^4bÑySöÐ.3 ½cá Ý.ÖíêRº±îNuá\éÉ&¼'qÞAu íwt §Yû¬6[ZÝ»#èzþ¬káÀíoü+@ßTçÏó:¾½ªÞðóÊý[êøvÎ*÷ï "?ãÒCÝâ}wÊ>3µ6 Z©ËzfÂú>½ÂظA/óM jüô>`÷îµ8~[t÷ØBÚz ^G.[=4¿AùMú!ûþ>yÜ×$íLMðÓÛ¸ìÔ×À× ¯ß觸IæÁý¾©i«Ùo¦9+ýi·ùéH[EÔýÿÞºDߥ÷x õ1ýäèÏf ïÃ!fgSV$Î-Élus_ÃT bâ¿zhoÓ_×aÄÒ ¦ *;/³ÈÀ'$ × ,¹Ð¼>®T,ÊÑ"/T50çAJVªv¡"ðdߦê1ò¡âbÒr$SGUáRU¸TÕzª%^FP5i©Ð²¹µ.ÏÊ.в^Ô»öMW¤T>hÍ,LNV£|yÓê¬n@×JUat,Îk6âòL,i¾DþKT|¾ù"[Æ©~?[rÔ4%·ñ6bÊnL(6!Pôv)_£ÄÜb-¡fjdKз@ _ãßoò¦æ]륾ÁnÉ#ùme±Õn&%2xíL®çL.ÐÚ^d3Aªì¼Bt²éÔf0omk^&µn&µÔ"xÐÉd6 ÞLv Û=ÝLN&±SðÛ§>GcTSßx|Ö7] ¶Þú êä±#&æÕÕ7çèÖ %O<CU:ïÜîÇâ@·<H×EahMòèt3îdTfÜ È¨¬G'ªEÕ·ÇÁ½¬\&V6,Ä^ÚâÍ>äµL «ÎÂjM²p±ÞêD F ×åh;êP·âèC±Þº êåqFYåu+rô«©2Ìðða"ìG £Ø\wRîÊ+CØ-C´;e Ý)ià Ý\ö³m7Þãìü,9ú¼· ÷Áë`^üRä·UN¿ÔUKËttyíð2 "Þe4Äc-FÍy Vf®.íüQeSÿ?ÛL¡ÿ½Í<×* '£ÀwMpàÄ2ËDXþ¢ÜyZè¥)~ôWÊ Qá5ö3§2ÿâêðtÉHõñ×òÙåê2M´Ð殳%1î0ne0e¦á6Ægìþthãp¸eU¦ÛC¿ß/5_PKG )JDH©=¶ì]´^'½Uø*µçT¡*UJ¤Æ Tê±zë¹·ª=öÜ[éõXm3óÞoÞ×¼÷_þyõÂÃ6¶åeJ®Yãw33çÔ¶Lת;öiU.WÁNÍÖëÜõ¬/λ®ãª3tæ?Ýâ"KæC3S5írfÕs-»|A-ͼYeP¦- cJ6|$¹Æ Í9EÎm"¹¦£g4HÐuÈP:Bµ%õ0t/Y6¿×¨s÷¾¹^å¢d§`VרB@É«Xu+KÿÛ,ñ¾¯×Í2¹uð£N(fðf̽åC¾D²]z±û×y$P1¨#sÄúÛÏCÅÊUrÜé1,þw[WÖ7¨º6H¢t\Âe q ¡ç䫵Êí²Wa'yo!¡aI®cóeÓ«¨!e3È|^Ø!a R¨î,.%òÉ9ocBD¹F´ª7Öë~6z¼ðkWã;æ7DNÜÞiJ:EÉÓétniÈBÙÚâ6h´NA8+Û"»4fÏiÝé¸#űà¡YmðÃpâ5;<QýûT¡_ËÓ²hmÐÚ$ê¬: ·À,AÉþSÔK4¦Ñ´ã}I N*´k¤»ÔÈÞH¾Dwjì%ξð-#´Güû^ÒGQt£4 Õò#4 øR?Åg¾ô&I!_ )L(Q¶14J~*ÀSß¡ûGhtý ½©=P÷1ô\ÈM¤JÇ>ƧÃ3»0l4q]àâü Ê.Îl1øôàÏÀI*æ?©8)íâ¢ÀãWT:tëÛ¶ÃQÉx¸±sðm }áUCVÞÅ~Þ¸ôI7[¨Zl~1ã ß#ûQdz31¥Ù&ÞË*Ç@rü¨ÈÄÄ}LÙÇ]2LzE¥£òmä6²èWLøÐó£YÙ¤ýºèÇec¸Jbwé/~@ò*x@Ó«`ôÝ>£÷ä/Èò ®á®ã[LânàgÜįÂDæ¿1Ã$äØ9Üf â{X.xð1q¦ð`îóX¤YO°Ê·H=À_X")L9Ç2I¾!MpC¦éEÌQ(÷çÄpÏÝÊ¿PKÞ×Qd¶ =à"fßoÌØÃðPKdî?/ ÐV.£b3¶(̲I 9z?жHÝíäÎòBÙvÿ@Ëc:d¸ÊhZBæ fåð|B±Ófù¯[fk8eséÚy´YÝ>1£¢SW zÁ«Òffô#é,W¡%"^_B\"ôÔ´D2¦I²ÇÃ8*É7]e¶h´ÆÇp\±þZÚPqBÆÄ«dÂI6¤ÎO'ÓºUqÂYù¥f^gS:;3Ò ºöµVñ*^Sð 46uK$2sÆxdLÌ8ZaP±*5§X{ÊÊ2µS*R¡#)C$kiÃèËÙZbjØÒÞ´¿ÐiƤL tfÖǸìaÍ"#~ã0Ít()«0%^3l÷e¼s(H¹ô`Xe¥>ÃÐ'4ã@"¡g³ZÕì¼¥BnX½DsÝcêí(²j²Ôo?(ή£¤ ü·88&ï d=pqEÇ»ÕÂ%jÎjFN?h-73Êø;¸¢à2ÞeòÑ0ÞJxÑÆUâe]ÏzCfÎJè½iyÔ.ÍÈ0¸!Á:ä/ ¯% æN#±øm¾« ~ËØ±L½\dè»dïRF¸yo¥Z(pÓÑ 8mQÈÞ]°oÎÓ ý¬×LÓ ¯T:°£jæùº.ÞEwÃýOyO^@ôàhåÏfúy¥;èk2<4èJ$ÏÑH#ôMB{iI>û Fèt§$vÃ\ « µÐz £Ê§å]Ì:arÅ+LõSâNsÉ©eÇ+ïCÿÿxnîÞ¡ !¢ÐA×~zö4zÏ-ÜPK©bÔ V¶GúT¬GDÒª r<Iëä¯hYÿ|¨T¦A{¤tÐÝÖNÙÚgdûÒ¹)ÝвÉL6b0ñ A¸øÐ© "Ï:hÓ pU¼Ø×Ȱ óØ} ìKh®@7¶3v ÍÊzs\ÅNìÚzDØx[AÈ=L7A kHxư×,à»;vÑniêÐ ®êv®XÑÚý© Ö-í%yb4¹C°RÌrÄfÒúTæ¬7°ÌÞX<ïHþFERaM[y§â¶7ØôtlÔHí .ãàâM¬_{39a±e£ðÉÔy ' NÝBýEÛáâþ¸ÓJ\ZA»É^Í´°ÜÌjFVl©Hà( äùh|óFκ )" CF&K*ô-KÍ yG¶Lëï,ÆÍ,eÓlXT#© .ÉÊs]¦@ÒóÑ´½¡â*+ð.Þ(×¼Üôáò|G/*]íѵlÂ+ ª]êÍj+¾$ªÍLdr©ýF¬p£Ãë¢Ó /çÙ1U|ø|J´Yð¢eç4s$7>®f<RIåÁ×*Þ¶W7iy$3Æõþ¤xçß. 2äûÒ¬ÞFL4ñà3äOW^ñY³_Î|8{ÄÄ9E¼lóÁÇXá¼!2"P=6Ê/WåáHÉÔ¡ñ¾¥ñE´h§W!Z¬åA:PÕ<UmD»sh¨Òþr 3òV=º±Ö¶9´Ì¢x6Ìbó𪣱MÁt·¶=Ä~<<Änwÿû;"D5 ò*ª®£òVÎùt ãÛ4.V½ØcêDú©aa`/©hmÑZh)ÐÖFhQBk'´(¡mX´¡"hÃ8(¡õðÄùÐÂ7°:ü--è(Ç!¼N5M8ì¨Û-Õ¤º£Çõuñ^w¾£/ õ¹Ô×ÉY8Q!ôÍbì ªuYG=yQ!)¢KiJpndÍ ØæýoyÐ&¹þ'6hñ9@{LýÕ¶.t³äÙÏv=<aJÛ$|¿ÈÉY¾Wý`v¿ÓãÖ=û}?âz?æj?äbÿë}ÝÕ~Èžærß8&äýÙ| #Ì ÉGHµÎ!=im !öÌâìà`O >%µ.`=ì°&ëYÚ¨¤íÎZ¬s¼î¨Kº¾Øå\äR']øjÉË¿Ð}#â¢ÔGZ£³xË£íî[Êùÿ5Wãª5ð´¶ ·Qº Ä JMú$Æïè°ªðJüÿPKäÊ×O| P¼´ôk¬ÑmÝ?KPþ Ýo´c£tÿPhßëøZƪG?R;&¬oüþ>ÙìrÍèÑslväáC`ãd0I(µçÉàB¸ÓÆ¢»Â(æâke +û÷kBGú~%vàD»{Bvõ7?Z|b4±6¸*°èZ¬`PlGéÉSåì'lvÝdàLki¡`ÅÏÀÍ»Ñ8zp+Ã_Îü×ä<Ëѯo?c¢¾õÒC*â½èÄ4ÆåiÎçÓb3)ÊÇ,Íß}8³¨?¢ôê(ÍGù|é¾i,§û VS-¥^@ùPK¯$x EòP(nÒ+f8R¿ëbñ ήHOjØV3nà¤+ &Sg*Ê^*Òº=jvf8Åí©HB¡¿jµci¬ÝðbFzà@qJý,%\(¡¿±jµyP1^¸à+h GäæõF|Up}Dë#«ñ°ü¶fg¬l=ª<Ý?àÏ-j´ôóy¨Õ$8as¥þ|^LÁT¦à&KZFõýÀ]¨"äd¿j ¦Õ¨ñ Z/À#ìÔ..Ef<)*ÌΣ}ÖHÜèúú¬5D Ù¢ï eý÷>7ÙÑaÐPgѼÎçÆ\a'³9ìê2¢í 5ùÈ0dáqÏX(|Á/óu%×GÂ!_(£O/0üÖjpXå˨rãá9fIx±D¨sÉêÖ`<Ê1 @~Ýò¸5[åÂÆ ÛÛeéÏ/-Ö>"iµ;ÂF<¡Ã Ñ&4éZ*Ú!%íÂJ"X©)°b Õ±Ja¸/,6In¬h)¶¼`ÁíÍÙkçÎãýU屺5Ï#¶aètÂ0ûÖÂbÿàë&¼òa\.|\ApêÖì2â!+Fç8·µÂ Ö2!/Â+¾m¤rZ]í:ÑÑ ÒÕ[¡2í4Âc£àoRlééeFÇX2Ú¾<t´:fdVuÆc[%ŸSðqD"¸Ií*q².Ä=J'$á Q^mÎFhÑ$¶2[iâDøj"m÷(ÅÕ´dKÌgJ¾öuJ¾p±vÂÄl[¡NËË· .3º°CÁ×o³i,#u"mNÇdéIÕìÄå ãÛµ9å^§p.næ¿FеGÍFÔì*â¥åÓ¸QdqieùÁe{ªNè,A"nk8v0m\ø·²¶ÂͬbÃÑÄ ªÐ4ÇDÛiT fGÆøSD,ïÆqû;©i8YèŬ/3ȰϢñ çù´ô]d,7¦a¥ÿWÁ,Ý{eÓûh :cÅ©ì5þåÁ ØÐ÷We¥x{¸CInIEÛ×ñ _Ã^ ¡Qck#qÑí5ÃYÚyñ <,ûÄ®y'Yß ;ai0*i1¬72äO/D1¡õBÏïFOa¤\|]-ª²YN|ÂEÅàQáô(9eÕy´¦cF5«nÉÆ+Td¶1º Ö!'«Yñù¤]ÒsÇÆädÍ^|ßöà)|õɦ! 1Eå2p<';4¦"xÖîÏæJE"Æ`dËzf e÷OÓ\ä¶¶&7N# ÕæÁ¿þ y°@*Èc¶Y×ÄMèä/yð²ÓÑ©é5S³?ÚÕ²Fí®ðU^ÁOØ×uÉV3Ú´*Y¦ý?òñÙׯL&,=uzÌ£?å¶Ú¥yweb=0S$yÝ´.å)ÿÒ}y4¹Ùkéaoâ÷âò l^ÞÒ¾ÍLgúÜ6ÕoãOCqöâwh"ü±ñkÅ {Õ21þïì»ÔQ+ÍDCæÌ´q^·Ûw:Q¡Î"ÊÿzLN»|`;}¿üN²ÓnpÐ å~5EêN<öZ}Ð%G%wzUt<·*»s.u¦.å lãfbMØìä±Î«¼jG UÃy°ÌüêX¸Ý¥FR·Um+{U19Q£ÔhºqU2IxU©T:*ã6]©¬ÎSxâiix¹gbþ¾÷#úºT1ø¼KtÆöV3ÖåUðGWÙLÞªsg ÒZzc¯¤&Ó5Õ+®GÆjWU¨J:ÁâúKt_ß8H eaXn¹D·/ù¼ZU+ö¥ 3m7¶¥úËkÝ6)%Tªô=«VîÃûÊAï«Sg¹Ô7IÙhúüÎêl«æëFM·©$¿5a¹&OÃ× Í¸Tñæbæ1"Æ«F`s|-é° À}ôÿíÁÂÇÀ3ìo©}»Ñ]ûòô`wSm Õ2Ýó°×"¢¡ø0rðoÊch[î\¹^<=¨è3§¤VEû´7ºùßNL£'®Åsú}-)ïñ]û2\CÉkÉÐÎîB-ÃeCeÙ<Á±a±÷éëp#goâêÚ»ñNìÑÅôG.5ãÐ_;Éÿ÷ð}ù{%¯TÖ×®p,äÅÄø¿.å?ëë%®±¾Ö1ïÂ:0«øïE~=¤Ç~È/Ülß4(-i¹ò(^fâûQÓQ¼"^ÿÓfɯ«_î릷ó¸wpq7OVf¯Äëø&n4~ßè <ø-ÞÐÝ¥½åõº þ t?ÒÊjà/ ¤¾¥²öþ¦påB½§°çä{ÓûWèpÝKäûPûéÆ÷ò`=Z k»vÇÿAòYxY´vá)±c¾ïYÍQRJãNÛ vfZzd ð 5ví!㩯E´sÆWµr×3)q®fÇéÏ0@¥ÏQ¯çYÍ£¡ñ´5j®unûÊ8òiù¦6Ëâ!îê#Ê_þ¥áîýbVT¸Ó;¸íjÃ/½£BU©»Ø¶±WÊXe¯ªÓ(ײ¯dYÖÆõªzíåJÍLÇØl]Õ¸Ývô÷ײ;wº¹ã2ïzuFMÞÈ»~ ù´Ö/µ×bPù4aøÚèSge¬ñ-Òur Í Ò½ºÂUW®©ªÉO³¨Ì³òa½5Öß©GÛµÎ.ti¡Z4(ïöfÎ %æÑ¹é ?Yb,f_¦(kþnEraѨ)[L%ÍÕ( {Í%+Óʪñø©jDZ¦<XmBWïfAߪ~ª§+EÝ«DTÅ~ZfîL § KÐL²~$X18{ÓÌSc|LÉ´ï¡>º®`ò¬¸ðÒ*>£×0'±6iF)NòÐ:Ì@ê-wÚÁJÆñ;Uã·ü´6úh=]zT¥^BàæGuÛ¡¶H0¸¨gv@OÑÙ·áP>`Hcò#õM[ÛÚË %ô1âÃoºÖï¡ÅTC rxÌ6n§ëEÄNaeê¸iÝà£6êðS5 Ü&òÒMÖf$ ÕI,§£i/Ý"ÞÑßÈÍ.±C!³z"P·´y"µ¤¶©Iº0CÐfb(L$Ó<1^&'ï£ý¢Aòî×A*ûUæ<z¸ÛÊÏ\É án½ÛO·ZÙEfjÝÝ¢Ñu$°]{_4rP"S ï5Øfª¯lú¡ûé xuÕ"¦í®1É»HØOi¨d®¸<Pj.©MTm ÒA=tjmÈî¨ÿ¨Õ¤#>º>ÿw tMÚCò}ÚJ¾Ï ÞHhµ.¤¿ Hl)0ÄÁQº[HÜ3 ©öôÐ}°(4³º{?CM§¿6ÖÓ#Mö!ä "_å=X¸»|>'i0:N@Am` ðizÆGt}#Ë<tVÛxªT}ÅGÏÑWÇ c.:!DÄt{(Ð~º !rGåÉfÃy(?Á.tʦªÝ~¡}4L/¡+ñ*«Êû£òþawêåBðÒ×à¹`ø@d?rëfÏe¶ôHûui~ä¡?ù,re¹a ×ॿ@Á¯fÀº4IÍv- ó8úÌ7N¶Ï4=eºHÖ?}^õÑ%z©<ÍMs£µü_¥¤ãà;)èM¡Þ« Öt¡¨ïÊÔHÞVÂ.¿v2Ä?`æ¥ïQu(í¶ÛR¦ó<OqËÒc©6ÃáFoL/³î ýÖ2ÒÙ±\B²þ~+½àw@Å,¸3¸+wKõxÞê÷(NßþÉUþHDµ.ÓnUa ÷éáðajë:V¿q/ËÄÝãÏ6àM>~Îbw.»÷°é-Aà FÆ©Ë]ÓD³SsÈT) 2!Wr à˺:hW% «OJ¸éýÊ+«RozÖfAJ=Kæ«wòÌ^Jøy ÝÇWóRÜþc¾C·ó" C EpÁr¾F4`ÖIa0WøXݨæ§À£»µh÷8ðU>^-·ÜY*ây´ÎðÎ5a1?¯·¸o] k´®/"¡{UÆ&t?7ñ*áwÞ<Ü,ù#bÔ $î|^nþôqãbäH'bS8y=â6·Ëf-Å,ÏHÿ%²rñ rßLd G&^»|óNæ${oKnôS3IÙOÞç .t-tý°©÷5AÐ; E ¨`ú¹àuÖèdw¬uw÷Leÿ±Ï1³»"ýuÁÎþºØþ:3 uëõÎXo[l` 5½ÜØGJKÎø9"Sî Àèpõí5¤ª*3 ì0¾À0͸_ $É ¿@©ÒZø~R¥6¥5Àê¹ê8ÕÅiQO@REdhÕbºdTG°É-ÆSXe.ÐòtRei¶ClºFÙP}0³ hJz¢Úó´üUҵôÄð^´ºhm6íåfk9B-xJ0* éDÁ«® 4*h^0d.µÂ.Úµ¸w»b|+ëêQjë¡]ô{ËÝ(º9NÛò4åÕ¼ò4å¯9'ý>ä<_*ûjìÖb·Ìëa¬XûªÞyì¡^åÑ> Úz7Ûì}àY]§þ]éÖ»/QTÊ-È#|V±)«V.@ Lèa#ðr \ó'=<LÙä6ÃfÂÞpÓ©@¢\ëÓ æµ©Éê6úóvúè8ºÙé®Ý5A÷cär³|sY¾)ªç:¨þqúÅÏU~â¬w`»uâôYâ±Ò½-´©µ6N6¸KÜ(§ºÁ¥ãEÓçKÜqz´èqüÓ©8=ÉCÖáiéKn)ÊËzãôlë øÒs5Ã44èFhô$å^¶Üµl!|ãëôçÿõ%î¡AZÙmñùK";N¯§òJ?v WAÊåÓü¾ëè ÚKýø½AÇè~ÔóUúkÛöGGDÛ`ûíÜH×v`îî.Thu ÈwÃ{àAñ&ZO7ãm/Vþvz7²ýíø»hÝCûé>ÃÉ)ëixê Î"Ò.!Ö^ ¿^§Cô3:LoëmÄø~ «±,ól÷-q7TÔ×êÏÏï³¥ ¥| Õãy~¦B¨ÝÚuªHwayæH®²°ó®FÒsr[éÏCøh Ï;Ú_=×¹Ýò9Yõ¢£t·£/}[ °Ê6X^ Ϊ_äe.J¸o8´ÉKhg§[¾àÛÚT«"ÿÎ¥øC.¶I°\¯mÄ&{à)£¾Ì+Fy5kÒÕýbê øþ»²Óm²n¹TÛd7ÙdgáuÒÒ×E#¼ñ$ùÏSÅ ÊvÍ:&ì÷TgÛT}ò?çiêVgÅżi·lå@1oæíIAû>ýAü¼C|Ó- £=l·æEJíj6àë·Èd^=Ì»FX0ÌTÐø¦rÕÞAr·S¾ßv$Öøm·¹W¨AòxûJÃ?ÔOõsÌ*oòÞN8ÖEWò-¬ám$};Õ(:+¦lCz-IºÒCäɼj\ _fãßg6%ø¡eæÊK]v¶fûP²Üeg0 SyMx6ÌEôk ý«ß"Þ~wó|ýG(±bÅû)_±bO**⪹ò¹Ã§Å#ó9<·î¤-YgÝgí!ÇàrÌïcçCÊÃá$v9-ªðУlؤï+Ñtá(ǺGùPGõ0¤%PçWÇùÒùOIçáO¥K^öQ!çÑ4öÓLÆ|ÍË«-²j´#Ïá»øÓ`ZÈÏðgAe&Âë(ß 0 ò=ª5åÊ]Ùsp"6máûù¡q"ò±À0?Ø:ÊÇ;jù÷ dðÉ[®Ï_ÀxÂw4d_úð¨ÿ 9!ètj<jÔ[¦[*³7O $Ó Ó*àø§WÚTÃsPÊiÏ¥k±ÞÊØª¸+®7ªðmç/*¿Ðz~BéZBü¤ÒuÒå)> j¨¿Ä_®õ4-É;m ]@XLøju -楴0Ëy9{ ]Ç Ôõ^ámÛId2Å_Smµf¨f,ç #_ü#PKõr@Ü UÛ6Ë^Õ@ÓÐ}Ö8oäm£2?6}û´kعÆ}WXÃÖO?ùLq´ôÈ䣴q ѲmÑëödêP¡:cjè(Kø(ô5ÑNzU ¶Yõæß¸nl£ DchÃmºVÅ,Õæ§MgÒ¶ (VË}Êp,¹6;F;#~²ðæ,WÃâûÈȰ½ìßÈ>Ýú©¢â\ó,;?Z©ÍáYÕ M»ä/n`PQìY«ðy×3ç#Ø«aˬéwª¦ã=¯á®dq}S·tìÃþ8>TгlÓ¯s ©ÍqÝG wÎÄên$ãLeJCO2, iófÅsuöÐî8²Ð+¯fJR¾!SînÍö4ô¶¬¡Ó]°-¯pæÈWΧüZè8û ó!r^+ÿDµ*ÅYÕßìµþpX°ØÉñÔ)éøàjÉ@"øPz]=²ªy ÁQªlÙ <Ì"WÌÞ¨C ·%KêÏyá-g¦·U±Çâ(àq bBzY3%]ÃWÀix#FËð1|;g¸UÇȺjòÒqBî aÇOqbc9í´ížÿËÐWù´¨ü(ÈrÅNÇÇ1)[ÏP²åª¹Ù$Qdk`Zô5lSMZ2æÍ1§:ï£2;m8Cm5ïVâ˱q§eÍæ`I«eïØ+L=Ýj^m̾õOÖÎ1ÙY"ç »f;³nZ0h RåF(À<´}ÛX£¶Ü.W+ß°=- ÀDX2¸<õ;å@h¤)oð,¿Õ±¾ÃdõY±^²|SÃÝ-²°Yï~+ø6ÉÉÈ+ß©ñ= qcf¦qô¶ª1AqI¸þâiT8<|(spo¾!×Þ*[¶¸©a9Ç+3îiËÓñS.üMgUfÌÒtrþñ-û\G¿äÌZ¿ÞdÒí±ý0ªM»AÉûãã-þ{,ùUFuÌÛ(b\hÑ4~ã?²xQ,3{®g8^ àm_À;Âm³`?ÓmÑæádµæMi'æªõ«~@ B{yBÀáÿùÜ fÕõ>®âN/cçz·ãö(7Ý7ÂíØ¥ O)î|úì´(óá-T2Ùe|l(ÔªãÙEìJÌÌ"zd çúÃýá:ξ*Õ!ÞýÚu\F2YÁsSÙë¨-ãü5¼PÇgúýu¼TÇrõrÖÛѾñæÍ÷nµÁ sêØB=È}úr¼Êóê^òd&ïÃêyë9RjO¨&µjm|_R-dãËôkSW¢»Ø¾Â§!"ÇðU> sÿ0¾Wx5ÌÚ½J´³û-Ò:Ì5¿¦ñõÄkl¾Ò .NerËøÎPè2ô¬¤áûu¼.ë.ÝüwS¹v«¤&ðÛsý!ÕYÊ;¢DôC4Dä6²1Y¼6zîŹ×Nÿ>¼¨Vâ+? Y¦HÝÁüù"¶gº÷×ñ«×ÑIü¦ß½pèJû>²À<<Ìeè©Utú|¨=*<å+"øRÐË©L;{¸çzgê¸6eÅ»ê¨rëu¬,"cNn,åÖ ~ç©l:KMÍjN¡;¹óUÎåwU&4üUaþí¿PKLÑÍL 7Å&ë|ȳ'-<W¸PËÙBKgbô§°"÷Ø¢Sv³VpƺÝkc·È1*ð ¹DùJµüZøÅo³üQÛ÷Ñ:üí«ûèøÉtS|·Òè`ÌÚÄiÎÀgÐÉ1Ì©«ï[zýÐHâÜú¶Ñ?<²ËÑ?ÝÃÕmïvwÍì íj¢ùéq ùåߥÒ$ǰÄåÊq\T´yúg0{+3ü3$vë;ÏÐî¼R¯ªù'´Iæ UÀ9¨Á÷Tá{*ð-OòKàyaWtùÖ²2' ÷´?bjõ/_I<8ÀÜêOÚAÛk<Z[ßÃÂ>>úKÛèäð龨&=~ý6A ^æÐÐåaÞ£,ï5Ü 'ýǯÛ\êg*UêsZ/)éÝ*a«¢Rr$ ý=äWvРwµi+»A£[\¹Mù'¨Ó:U d¨~OñLÓX¯B®sûøÈ¾jòñÀîse9O³Su`ñ*X¼vBù|+uY_üPK®2Hį .)Ÿºv ¶lZí§úXdEuÛ©f1±}]P>^vÔ©ÀeÝô,A'¾8äåoÿíe4vi (KÖí\²ìJï·>ÓG & ålÀ¢Õ,XE,½stHµV¢ÖæþY£7ÅýCmGX-ÅÚ(T%K~=Æ*aO*Ô%ÕRÔ)ìe`klÍÀôè\Ï©ìõ9idDó+6¯np¸Hê̵۵ûL©~PK È"í +¤-û(&ÊXÁ Â@Ĭù `¡ î,! XÒ¯aÝÞÍÂx(q-}żfæõ~<áb aQvua¸êêZ*6ÊHµJï¢m¥b ´7Á+Q_ùùRÊÜ0¸O[a¾> rggVlÔ>I6!LNåòXT}sw½'}סZKMýYÀØo¿ýGÁ·ÌpÀþdyØ>PK'ï\}® ÊLý²ãÏ9jì, q p1Gy _*QOnB_ðf(J~Ôâá%×ÒλYs#cmÿ?IRưUñ¿|7êú°úmé$äqLòüéCKÜ):do¿³(QAOãb÷©\Ì0¸W®ó[êpÅ<f1Ï0[gmÙ<Ñ=iѱ¼Yð÷ãO3âoí4¢D·Ä´WWþãölÖáÐC OÁìËÐ8B3"£8´óÑ'JhÌ¥9ÑXè0 ôIP$UrN19VU{ÁÂcf4ÅÌv]ͱ^Æò 9SÁYYµTÁ5;ÞÉ#D}]DT×Ë(|(Qgs]qy1ZaØ*3µÐÒ¿NaråU8e øQ1La¡-K À¡~8PAoZ"1³-ݳÒL, ¯¼#]NDä¿=éJ0[>¹é¢|¤.>4*mÜ#dVtÔu%Â=æyñDwG0kÖ\2c/NÅÄ[ÓANUðÂWDç«|ÉpL` Ö¨NatÂwfAXîè¯2¦WMtîeÂpA .iöaÇc³^çÑÉf ²ÙÊÜ ~iÜð$G`ß+Ì%ñn3Y/d=QᨠüécÐjPeA1[ç°ÂMQ³Ç¥ö|ÁÊ5@ëSÄñSÒÕádk<ajõIÍÎeæa¾¨k¡í\:Iª¬h9hÓ-.2ñt¢DxpÆÌTýiZ¤8¹Å¢yv£ÅX$¬YÂLÇHXÞYIª2Ã= U××7ÇzÓ)KTp9ÀLVv!æ1{ä¾-X0ÌÎpì³ÓÊô,ëæª³màl%×+©M#JvâË~LSÉÓo6° «E:¢ äÛLQÖ.ªÂU¿,ߪc´~Faö¦¬V7a¿õ¶xjn<ëÌÉxÑËâïÄ:uÝfù9=Æ2f ¤¤/eàL ÊsmmV¾µµ{×h<ÞîÕós©°By!KË |_ çûqôalälQ¶ à_ÞØÜ\ÈÇp¡Xÿ þÑs³JFW -²ü% ^[h ª-pW§Ä±¼ÑìïUcº«Kêÿ 7â(¯=»`-_ « ×Pø\9`tí|¶m¾×Ëæü¸R:ºÇ:[|ØÄq¸·××5_èì°¦Êïáû¢íF¶ØTÜZ3p³4+q;N¸ÕÂþ6¢$å måëxöðCQÑGDÅÜHÔ¶Yw *²M»MwW¯îݾ. Û3ukÂlÞýd¸v¹ýÈ*·ûdy}¤×T#[b©9id»õb§»¤õz̵dì¸R$º%-ù[@vãañ÷Z¿x´R8$ÿ^§òâÇ$Øþ:õqð¤O`¸ìZãº9+¯[Nå)xÚg0À¤hÛ[©:Ãó²öÝs"\®ó"^å?åLG4d~YNÈ'ðÈ¿BHSñ59þt?Çë²üÛs®ç.Èk*o±\È]OÒn×Í|8ãiöÐÃZ>36Ê)öQ(*²B}Óúe^½ßúñ¾dÊG¨l|?óùûµ49ÿ;|(:~-æd¼ø3%Û¼çøòãøxs%/@ úÊ+|`øþ*.ü-?»ù<ùGY à¿üø'þ-;^1ó®·òA²hÛ¦aÙANKo8ѱ:"MÏÛ0ÅܦÝ1é³Ë*sÈÐê`^å³0²[qieÎüj_)þ,ç-zÕp§óìV#ÔHvò}>,ÌÝýªÄ¯JåìpIK¡«Cfy¨2UNYuoEöE~tz¨ÌçJS,ÝcòN$90T@*»Ò1OīƱ~ä » ½Äeo ê05a¯{Eö§ÿÇÈ;é1Ôdi¼oÃ*èSU,¯¨[ŧªåê0IÕÈ¥-½2©9.ÇÌÐ1{R¨:U/âSWûhû4Ô1/Lø=^Ê[ ¥wúPrågÐwä±¾mYLSà-¡NöãpöKÀ¯CnÓ9ärÏçÁæPÏó;\¯s¯üÅ'p^ñéîD` Σ´µ¼ºd{÷oQ]á@³/oµ/È£vyÎ~9lû¼ïÚz{ìNÄ.]ö´mBQ°v &/+¸Þ^Ã⻬¼ýü:ö©ë¹c#Y»IGrªîhsrÌÁ/è5Ï;J¿_Róhöwñ+FRÁ¦ükÍÖñ\ º Ý({äw +NõÿK%mSmJºKýMÈ`Pm[õâýv!ãl¹ÞGõ×2¼?<ÏYx2øó¥ ÞZü=ä*ó25>gCQ*Èb_YQÀ·»¬¨3ÿ4øËÊüg7ñáݲ÷=¦ç¿_¨x+âþ¯ÃBÆVãáðô¡<4,àzÅÚÿõÁ¾mé"tùy¬¼y^DÈp?Ù$'Øùï&y3ü ´ØÂÝ·q÷í¨dèÃÑØÊö°i¼îb¢ïfÅÜÃ/+¦Md;Óv/kê>ÖÒý´¸Ö2´¶¯»¨íjºÒ@màáÌæÚ£Ü6r|ËçØK Üôã%d6+E@ÝôË¡ÊIúµÊ¥¤±Ìª\E/¼ôlª®Oý¢<+¢^ ~8{ÓÆìõ@=FýBçòÏÒÎ}(sßcxnPªBþìÞ²÷Ã`FgÔ¨ê=pmT¥íjtkMuFéÃȶ(ÙrZn!Wµg«&£Æ0kw© º\¥Ê:NjQGj©Jyª î%·S&k]u´%P{"ÝJ6Sß± ÷Þ±ÙkdçG¼yf-`|+Øì»rø¯áa .·Þâ%keÃ`$é<]&Ï~/b2KY+.Õ0 ¡Éfsfc°ða2]ÝíÔ©óÏé»e9'4çVjUOþZÛ¥vjcbÔ ákÆxúrðmDªÉx)&ô>U|4B !ªª D Ä~ýlx¥Ö£â»]±èüPK¼ÔðÄ -EÑ ¡ JÞ'1NXgewÖàÏü>øüQ¥w&ADªÃýsÎ=sþþyDÛøLXégZ (ÝËT°ß3s¨D÷ê»Pî+DB÷£N_ÆCPu]10¼Úû¡Q±n©ÔH-ã s®ÒzG´ÞñP8¹Öæ\2åbàwÂÚÆ;Í6!w%!·±ÙöQÄTyLûð0YÀÊRKiù;»èÈäTt"ÆVZq(¢¶HGͼ5Éßy{\}Mûß±LÎâäBv 5vø¿ü°¹³Xz~ yX$x]^Æ©ô±lM/a @ìcõ=5Bñ$ÎPþTÖsù »K#ø¿4¯ý i*S4yyð:ùVìN8`Ïß">písö k×i< ÔØºÃÌÃTʾTÎ,g>GÛÃGy,Tö8Zìdã3÷X}QcëNc~iج5Ç®9Î:>9ÖP¨üPKìW ú.úý¨èÌ(Q.,çcÎûwæãóíIlb°r{*r¾ò®båÔ;~)áúWD(Þ{á~äÈ{éEÎ¥òz~¿Þw,$ ãѵ +ÛÌjýÛ#¤Ï¼èZFªË}ÅÒúMµMH5ü$$׫mÌ ÛÆÆÓH`k)OÅ·\˳ ßn[J×ÃfJ$¬þ¿®²Ã&³}s½ë<@(³¿¿î¬sc0÷}>ÀX'X=Þù¡´±¨-/`@ì¢8FÈûqÐM¥çxÛÒ2}êy2h¸"em~ F½j4%jÀ _PKïy -¡á9ó¬>¥@§ÔF [Ø6Ü~Ûr ˽C·(±£¥uÅÜÑMËpzBØ+¤£YÞ?ê©>=Ðç»j[|PWj I ¼Öfæ¸|5¦ªÈüµ!ÝÒÓô*m]¨«ðÕ¶¦gl\ËlÓÖ¨yàëZ¥ÎuØ«a®çW3*ÅÆLW¦áª²º3îùjC»ÌKGu2OVÊS§m'u×´#Ë÷¬1f/×n54Ï`º5ìà W®¦ÒsG¬tm&ä&*IÃñ½ °_*Þ×^J²¾¼ëÚ?kçe¾»¤QÓe»§KÁ!«õr"=~íú4ô¢_B®òÜ;s=éV c!ÅWKx.âõ0(°ô±í2÷"eî-G[Ù"ýnGBÒoUXWDÁqè°1¥ç³e».é+Ýñh¸£ef-$ôI#«àN¦øØLÆev7¯t -Éw òR§âM+<¨¦OH§4Ü »ËͳìªÈºOdiªÝ.)I¬rÓ& sT ©!#Ao÷ëíä-æ?>n89S0+Pc¦ä\i]:¶iÌÐ >3cXl_¯kÖ,ùPhÁAN"`4ÍÑÉùèí2Úg$ïêV*zÄ1èQ}zZW1Ëætm_=3ÒsóZÒ1t×HØi{e0.ýÜ·i¨ÁÛ%ù/L9µ¦åæ¼SÃ}r$Õ¥¹yF@ð ¢ÿéÁéV¡Ó'5<Oѯéí/4+*ÌÌgðYås nhxT6¼lh çeÕæÄÄìYGæÂUk>j¨¤»®êP$ûKwú}ÞÙ§çyÈx?U|¯Bª«çIª)Ûfº®û?íí__Bø~¨áûøÏêÔzÛ¾vÞªÔû'åãËË8ö,¯e#îËñ ág²ç4¼ G*sÙ6§T¼Â¾öèô£RðKFE;Iy çì¼d û[Ö ¾\drJí×ø_á·Ë7Uû~çý^^âcØvýÐÏ$×±$+̤< Âk1£àS¾¡ÚRWA¤gÜÈ!Ê* 8KñH ¢°ÅW Éw¨+á>¢ºÿ@}¤¾~ïÔ×.âÁH}`ç½çB¤¾A[Äeú>^ÑP"JÔPRC~÷¾"ʲF$QªTÔê©ÈçÞó|DõTTO%¢ððDZËÿE|zFÚ#j`$èÙz@Ð g#¸â¶.¤J¬Ge¿PÀcO²:¼váëõUVíqÞ5-¬c6¡å0®Å6Jí ÔNtc¯M8ݼ5cï%Æx=Åû ë±<C;íuàt²}âx £øUZ¸ð/Üã&ü7×Ém¸E\ÍÛczD7øUã6qwÃ$z >1˳à~^ðÀ8Ç÷Côü5¢!R2_Ç7$ñøõM|uãÛìm='ùuJìÃSxH-à;ü ç?±È¯:J_DEFßKüRì^|_*±ìg,Er: wÙ°i«ïøSxvâEì>~n ?xÏ^ÀÖ^8yw?/âåçÿXÂïmE¼ú×ùçËÊ©×<3ÃØã^X;|³å°öÒíñjÕà¯^{ý ç;̯^¯áÂ<,½÷ÿ ² {4\Íh% & Ïu'{îNI?¶¸.5r6)É;H4ñÅ O¹lÞóVCkN)Øqz:Öò§á*\âJ\£! i¨uô9nºmçíé¼ãOAX¤c=gkèµ*÷îÖàE@Ù£ÁçÌöið;³×¬¨>!"ë:^ü¸þ½XÄqÊ!Á¨/¹.ÉvÎøBþ9GUÁëôDb4+â@Á2÷e§¦³#c÷=ýýHt¤^ô[õ×}eÛÂÍ»w;Oq"¦Wª`êZ¸6ƤMKé@!Þ%jf'+Fõ´!² ×ÓcºeoWXmO¶Öèú©ÛãÆþZù0ÂÙãÇ£ÀÆ×)ËH2 ªK w{#ÒÇýÊóôV©ã²Ç½IÁörl2ìð\ÆÝTK´i»¾Ý&0ò¸ ÂÆærÞ¬0¬A=ng9æJé705mÏ9« ÚB+³oBÊÝͼÉññVÞg/íÚºÌ&aÓ]x» üÌÀ3aOrLºù¾ºö±bØnfD¾Ý«â>QF½).Îjx7Jîw%sÞãHÞKD¢kx¿#}e]H' 35ikxÈ~¢YÆk¿ã#BþÑÀsdgý×3ñɬ¥áÎöOê¤Nkø´#øuLÎ$uMkø>/Ô¾àÖ%·40àLY¿Ä΢ £bé®n Ñ/ã+*Åc´%NU*íeÄù¤{£¡Ú^ÖÁäY5Çôt¡ÕZ¯&Ë,yOö´M0R gÙ»á6QïE+°Ù´º¦õæIÁÇsdqy-ÂÂâEbÚYGUÁæ¥>±¢*jøWñM|{EKuV}ø.,mN*تÀl%Èïã*¾Ä¡¡¬º?Rq /2ºýxYÌô´¡K»*íX#rnΣ~ õÁuô~!ô~I·Ö¡á×Bá7NÅîÒð[a¥W÷Ê㺢^T%§]¸oZxé3"¦(0ÊÛÀnq*~0@ G¶dΪDC£ßùc;2F8 wÿ7 #/ét»Å¥jÂ-+ÐT)½g%B£U"¦óÒd%¬³¤Bhµqi¼eßYÀçñRãø9Å "~UÄ+EünõQç$zÙQí¥£ÚKGý¾tT/ùZªä±ýÌj¼0ÊðÔZÂûCe¼ýð&g^¯Jôhï$¿D:[ÉA ë¦Se(ÁðG²«ÈÙ¼9»_ûPK«É×2 ô\ãVÒûÃ0s5ÓVÓ|GÔ¤Þüß¶`MÇRʺëÒ A)ÿm L¬S]Ã{D<Ðô3B64ÒÊ$¶Î0þ9þlÑmÄÆu\£Ûî;¼Néi?ßÉÒê7L¥ÆSó§Èl¥Ï$2É3ÜØ4K9ãùø¾3?gÈ"ð070M, ûØ3îöQµ¶¥¸îa9n¡DÞú/hH'k+tÇ*ý1BÄ5iRÌÃ8÷#<&iÚà)Æ~PKXÀ`a Ò²qÜaè=k¹Y>à&UEbð #!ÜcH\RÌÅm·ÛÂÆCÒÓä'ÂÁcèL$/ú+xéLtýZ©tN4¯êä¶y,HÂO"{½V¶¸k; ûE<8blSûsWE©ÂåUä+º°«fiRBÐìdM[C³mù:ÆÿmxA½diV|Ô<Êç@;ù£D'-´[¢[FkTázÈV{g í_ýD§>Ä迾 ] ®MPÉlÖ8-c Ì,DCV÷Ù¯døM Ó¾ÓÑ"ÕcÖwÅØZ2ÞH7Ç}HÕêY¼Ë"e3CN`¥¥4]Ä×] ®d×gl¾5îI¿#eêY3mF(':VxTw"ýC^õê<dòJMË[Lw°ÎâýcRߏÐ'l qçÿ²íqôèD^Û|5lt®ù¾C ±Ï»JWÏ'oÇ1óÍñÉbk³C®m§ñÆÞ¬þ²¼E?ÇV§ÀËÑtßãG5|©q4ØÅÆo¬Þ£øVã'8³kSÜLÃdQ²ì-Ë)£bYS= ÿPK8§ &TyI×HÇ&o²S3 ´#jVTW=6¾¾eKÀÁöa7§¬,¯ªNI`Ãÿ55ì \}ÅÄ(FÀo1áN×nþs¸Ëq\ãéCé.üª^ä·?T½N7C4Æ%Hú;ßr´Bmu7¦äÀÐÆ~Åxtx#<Lv}æ£0vÂõPÓµPó(r-æ[ 8HOÏ$z½ÎöÍüÙ¬Ôx³»ÙÚ½'ãÇûÙgÉØÞ?ÄÒÀÃòÉøV¹6ðQ¤¹ñé_0~´ZØüÜMãLRNÆø2ü}?µàg ºä+joqKÞßQÙ Ulæq ÅìOêDzFUýÉ[·y[ 7_ÅOÆü¼O!ÿxëóâz-4>·ñío3Ó½H÷Á;vßÇéîß½VUì¾v¾¶ßÇÞéèmæÐ#*r8äm^ÅÑNÈ·Px«ÓD=ÃÐoôÀ9>ûèè'»ò9 Ý8C¼NbÃ81Zã<'Ú9\åÀ=Oë&!÷SqÌàqFÂ'µõãxKEshüÊ_`·½×'G{Úîâé Ì¡Î'tTªºsHâ«X.tZÁk/Ø>ÀM®J×÷±(óÑit¬bi/DÓàæØÁèK½=ÑWrx³à ª]!»«mûɲGg^ÄNJö6]EÐwð.O·25ïá}ǸåÓä¤\ã'üã±ÌR¹uyªÉ»¨¡,(>Åg>ÜþWÈH0ÕJèð6ó+ùí|É_ý7ù?Á*åíå (p NÖ>5þæ.¾`c´mÖe®ÎGàõü?©$ø«.©ÍòýPK¥½;É )ÅBH#ì+ü S¸"©«"5Á aHxµ©ÃîG:$ Hð@2 Yа'" ᤢN¢¤E\ÖxQ&J æ¦êª¡M2®ÈºifK³È\Ý5\³ÉJl³PÐlB,ÕS#5ô(+(<e¦¨°Ì@Aê$JZ$Qö Öáp"0aÊ0T¢ÂÍÂ, +2ånáÍTÈ¥YäaÍfÊJló´HËf<ê4ØCÛi2-S@SÐ^2SÔ:<5Ì(iÕ¹ ¬ñ^£\*© áí¤h!%ãLExþ=Úß=CòÀ³ËöÈöƸôçØR}믾åÑF·ôïÂöûýëOFËýçß·~øÓÓç¯=þx»^½r¶öèÕ§g×·~»Óo??~êáÝ/Þ|{yõÁ»£nã?PK0ôv% FÁ¿?,X°¤¡¡þ3üSÿÁ, PüÉÂÈÀðA@y#á/§Ì~¦f6nL\B-$¹t²0&¤p<8ØÔûOÂÀC¢èÉÑF6A+ÏI;þÅÍñ¸t¶K´IæÆÇÇnUÏéT(^h(¯5e§5 EnW¡Þ5Á(XS ¦¼-e¨K¶»dvø*ò)hM|ðø¡gv7¢>ìÙsùÛüúýã'XùÃÀµeÛ?±ÝA`·? o ¸ï¿±DaöÐ:¶N#sûÝ5É0q°%'Ø.]^ÚDzÅ4Z=Ô¦·Ïud0©!MGY$ 3\îHKþ¦ç¨ð²ÑêªDmëD¶CÝùªcElzÃ#Ïå®Ì Ì÷¹Üö/p÷*ÆMR«§c3*¨2»¶Ë?Ã=.>Y{§ä]¯o9=KØê+Sò³í3ÔºÿÏõ1):5/8UQú»,fq 4!¸«ãN¤¹KbrÉ0I²g9*Àè¨ÂWÑTã3ÈÇ |Þ[§ö0ê¸ïëXQsN`¥'-vÒ!/ù©Î®ÚIú8k~ÐïSùi;^ ú|ÛV}®u¸®z@¨) 4#´nV9GýÍ#O2ê×°+¬fݦÈý5³6Â9BûâFDkïRHªFÞ1IàaØé#<ù¨ÈÅl©öÏ0]?CÉLýs¶UÊ '7Ø'l+¢°äÿ |riæKÜî¡/R0FéãÄNómÌb±,/ÑTÀ¸âãKÜ äëXÅ ²Ï²j ëDØ@)ÒSåYiÌPKFi9ÑÁvR*=ît0°ii]^$ólÀ k»\â}Gd.ÃOCî¨ÛC<<bP{4Ù`⤹DEÒ\&Í>ª\*GàêçîÆnÍq ô/ ]C×sÖ9|ª ùªd×þPK@¨Þ± V¹AÇÑ(¶iÒ¹²¯¬¼&öÕ2±Ü æ?lD2I(Áo/þ¾e»N¶Ø3Á·ûìqì2õ_(Õ÷1ûÃõ],99ö|¶6;¶\ËX¾±µ½Sõ}ÂÚÿ`Åq,f}/Ö[ÇCo:Ìg|q¨(ÿPK¬»º £¡R¡RÂõ¼QB8 £D¨ O«¶PBm´u@´è˽a4 "Nm°óßuÞ¹WÆ -~±äÛöºAla+¶K¨, Ñ,¡AI$ÄËbÆ4CÐ,[ÕE.:¢«VçUÝùÚ:T÷ag;°K¦MWÏ¥g'TsTH1øªcRI)¦&Þ½ÅÔ,ý_b¡Ù f#§¨21¡&D.lPû¾b£ÚßNgÒw!&2¼ûÑX2KÛ5M òøÖC±!Îêe¤ÍIÆt(ZÀ³baÄ6Ó»º §§È7iÌÝë¶!¡.z©ÐkQIhÂzÆ»yI-p[U¾qÜ7ìf º~YRì¤9ÑÓÈsìPV¶ØÄ¾H¢Å®ã¥´Hâ¼²Yåº:¦Y»QîúM&h*[8uþÖåôôj.!8ëÖÓVƶ\N´s\®*Ì 7_uQwn°«öÑl2vdõÞFkµ8ëhÃû¤Li{Ô±þO]±¦Sî [Ic!kobH\Ý·$l^û wöõåéÓìO¿jä¼÷CxP.KaÎÓÁãlXÏMri½_VReê¬1¯f±ÃøÌ¾-JÜwì/9Èøò'=Áɶª#}¡2| o$FùЯ¹ñp]"3/.38TͤQñ/ÄWÄ?~ðYÂõ2ùÜÈ7v¦¥í.*ÚÚï ªm 5ãwQ{õm¿ >Æ%lçvS»¦iZøÜFX Çk\ËgQÏi^Ýürr·Î F+ÚZÐNXWä÷"ÐÐÁÞª}¿âþÁöªÞA]u4Ëå]ɳÃahrÏæÐ¢õCèçIIÌ -M"Vû% ½4±fß°.)ÇÁ8úé¹¼ð-ËÏ_á,Ü: Û TÚå\ødyïý÷YDª°Ë,f=#´7˼P ýÿFST¡*üTªê@¹hÐòíPK¥ÞA· F ~êÝdÆo&üþ(ãiC+R¢MfæÞ¹wî=÷ìIþúþ1Ì È0¶¹vlw7²sÛ27#×~:o1ôïCs»{³³/«¡C²u«²Å# t3ÂI¡£z·>¸áí*Ã¥pÏÒsԳܩé"C*Ò ÃP3¯æyäùïu&åtëÁrÇöï) ¿´dÓ»eR¦s«ÒùÕÏ-0ÄÞ;ÉËd+ý0Ç5{Ñ !=ÊáàèSÖÇ$bHmW¾v¤¿je¯*ðmå7/ã$TGÜé< ó#a¤SÛD¤¨Ve _¸ìPÁÜPúo +E;2ÆÝV½ü¿ÕûÖMDNHõ²°T½éSåg`´$}ßó5Íz#9³Èÿ%ÛvÐî3ô2\Wï+ÂúlñÈÄ<nM3ϰqÁ4ÿ¥'xª¦£/ÄkÂv"_jdÏÈI BVlÄ46ç P/hä-/ò«²h+%$Z0fU?ªYRNÁA ̮⠱ÓTâ#»êT¢lóHmIòÔë¢Õ«ä'ÉÚ ¿Î1ëé:T£ÖLãÖh¼/úÍ$í¦~»¬\'ÓI/q7éd¸ fÕOôW£b5ë+F?ë¶:§ÑDÕ¡Øð 2ãÞ1æ± Zã´&N°ôSg³V±z&« p8Â*qUÀ ÖÈ*¢xÕºÖDÝEYj_úi|ÄÙoPKx{ò± Þ²%¬âÝò¥ä;×(ߢñ7£Ú±úT7gX¯N½æ4ëØpª'PùPKRW *|FrÄVpgµ~VÐôÐèGEwF!û±ç{îýúþøD[(rÐWÚúÊ¿w-}ú¾ìw÷aª%zÂkÿÞ»¨·dC;ÖL÷q@ódOúÚ«4#«*ÐéF cº©â![s@H^=ùº)µj0ãP1î°²M)ÕñJçNb¥&RcÒ D#"¤«ÊçáC]v¯E½ÍØLµÓíè*SqcÇENã;°G7ÐBËÁw»8ÀÉÅÅ(IìOs]S²?u5[,!G 6ÿg!uÕ » yªÌé_ùmCdËg¦¨´EÈ àc^CWàÕ êµ¢<á_ãßT¯éîDïYnѾÃÖ¿<uÔ¼¿xÄÇÃóbÝÆN¥B&K¿PKRÀµ ç±ótÛ»[ÆpxU7°Í²ïî %ÝÕp*.:Ç{Üã½óÞoñuâe>ÁÖlw°×h.DÓq\W±¡ãë lä ºàäQnë{ëeѳP9Ú; 7QTqÒêªc2ÌFÍ£Vp·ejQ§7\Çq|BïKGÆ.£"=?¥)¡re8ݰ3ásÉÜ>©£ùã/ ~Ðz+ßwþ¾H_QÛÈ2o: ®ÿÛ¼=:6e£üܰÖú q8¶$©l,LʱÙ!Xáë^8X¬HwzØÒbDjKRËnà|Íkø0VVbÐnJeÅÖ àó´{¹å~A~rG¾Ðúª$]#éFÛ'{áÌÙ'ÉÌ>Áèo¡åXhKEtIôûjÀNÒ_M&[¨l¬e´GÇ÷£MbòÍ&Þibî<MäÇm¹+¿PÒòjË¿bg¦øÅ>yø+w«O±&ñ¾J |\§G|»m@¿N~Û)eÖDµÝÃÒ1Dâ.c ÅEZ¹óeÅǪ ¨ìÃQ ®Ôñò*ßãgåLHÝ£6ø6jDÁ*5Ø!©EZ°.I}q/{^H*i¤æü PKyë,Ù ÔGS«(ÑÆü#4£ÂÚA*Ðh3êd(~Ø)ÇëÕηÔjkbª¨H'$Ú©vlF$?Ø0dpK hÝ)w³Ò¨ì¾h·µÒ¨ù¨`BÂÃÃ*Ô%|sõT Ö6©þX|tÖåìc«¤§2ÃýÕ°bM.0ß¾gad×Í J>{ÓévÛLÅvhØÃkÛÕ'vÔº+Ä<^øxZigPd±Þ3ì¢6úßæ È}nvç:Ç[ÊTmSr\ª«à§Î¯;^GÔ?¦jzîZðÁ«3< VÏÐøUÑé3Áù^JOTÁpLcnÊKõPjüM§¤rÆo,þ¯óãÎÏ:òJÇÁRy¾Är¥M²~ PK=Áã ëØ!±ïFµðÄõû±[ëÈ0zû¾T¥ "Ìı¨yÂï×^ôÒL¤¹QTÃEÏ&&SÇÂ+ELB(´Ô¯8'zsÉÌÁ[?:ë&£C7,m®¶Ç áÉ]Ïêåñ°ËUºt3x% ©r¥kÃFÖB³6,Lg` gÃĶæ Ù¶ëËçñQOª¾ß´8Âë åjÿ<Ö² KcÕp÷XwJÅ>aþ"a&'ýH»MÊ0ز±ëÓ¸ qü&V¸ÙÂqdêí4¦ò×Ѿ úóöÚ±q%7q°8fâ.a"⹦Ë-ÝÇ ªÊXÉà)6þCFSß]ª}áKu¬cCë¨ñ*ÇØâz¡:A$<u-âHGÔ"XA¬ùÌÕ£Ê$lè¥%Ø-í4=rϱÉOwL¯Þ¶3ÐONoÈÏàׯ%ögØzÂ~ÿÙêG\®®b®ºvü»X௥³úJJ,ò/ÉöJ0R¯Tß#ÿË]¶æ>áNñÖæ&Fä9¦ ñ ñyãIÂè¼Å±Øæ2Iî#<Nâàç7PKwI, ób$&$DY%Þê+véi%þ,Eã ^ø£ï)¸.Q69=çýzçíyûýǯHb¡ke9´Ý~h ®+ü|Ucð·¼ìp·_~Ú+ÐdÈÅ^Í{Ð0Ãp&8²e¾B°íi¸utçÀ¶¨¢aS Y-L/)©¦÷J0$EÓÎÐ0FóÙ¶í'áqOøJ©l{wLîÛÊ8SJ"ÃÊT¶|$&ýÐeX£áÃ,·,!e~¡ö7ñСÏÅÐó_BNP7°e¸ãUþ ïW¨é n ü}î ðV±¦ð®\íx5\#>ê1*¾jËÀ äu\ÇÍߦâ4 ÛsR(9&wBõI-u)Et°wraç?:Ù÷½¾Ou{ܧF6°©)3d\vÂò0t"µ][¨*µÄ±4FÃ6ÉxÃ0ShuÌÔtÜǽ㠾%Ûj.²±°M5ÝFKMK)$*4e)ÐÀÒÊ©±£= õ$hé#Û SìÈSúliý#ÞG9¹(KEÌçÚ÷<.ÐÎp ¤ÿSÅvK°ð+ß°=>]8F¸5±Q}'§{#<sD <'ªXC ¼<%`w" zônGÉb\ªþ PK·æ@) &#ÀÕÓ:ÕpÙÂ5ay¼Ó±äyºå×cxÒ¶s®ã&a¸eiBÔ¯¼õ0t;g&¥"÷k©¤$ÅÙ¦êÛÅU·¸Ó-áú¦jC^égHOz=âVÄa!ÙÚÑ5 "¶AÅp7mG¬ ç¹»XTï]0ÒæH9Z'·Ö¥Î3"Û¶ïÅTv55g ?Q5Óp]á"Ïæ¿eWå[÷@ýwÏfü×ÑËóK<zÀó¿céoèOg09Âðç 1ÎÏHPð6@¥¤Ò11~óÌãê ªþÁïú[ÅOÌcðÙÍ7sǸî>þûÓlG'?ø[¼g·bÖS üIë(¦±en>~ֱ¬¤xlÍó üPK!R wøå:âlkßiÝ¡ÖZý©{{¹ô:E]w o9¦13PùÂÑa+[LÜcþ+vpí5¦_p -àg7<g=ëE¨?PK8Å £mßksSèøs{QÃY«óu§â¡27ñYÀ P!¬û®º·1ß±±ñAbujº:·,Ô ¬EX%Gg9.É\à¡Fp1ÕCk!ÕXíÊgg#²èZoÒ:j¶¨Ö¦l3 öüའ´[^Ó7,Ow*áí,7Må¸ÁD6}6ª/\¨ÿ7\¼ùGtÃXSt¾ÿÜ ½ÊP^6YK6Ýøº-;LAÄ K¸7Ön¶cípÁøWAÝÿÁÓ]í_èm&þo×k¶¶J½9H´}ààþnþ!hÁþnð]]Dïô}¼¤ ©:'Ý©)öhC%µãÿê¡Múá6h;Æ;GgøÊÃGdzès$0z¿üÛcs×Dí þØý®²¼ÿÙÌ|eÒô5öϱenOmôü[]×ÿ_¾ ýÐ\Ü#Pf)HÎ+)$!@ùhvXägøí-þ¶Xbc Âïíì70E¡) 5Ô.ô"Ss8ãiced£è{j ?0ÙPlnúfK#O©#C=ë>¤ñb¸hA)ÀzzÂ! ¸-`ô"ÏÚM¨G̶h±NT Z ïj÷ Â1ͽÏYáK.ñÍñõFA¯Ýö×¾mô /cÒ丶·¥és¡ÑÎðöFT¯ÐÝUAWx« Ù9·/g æù¦8@,dÓUÏ 9X[dÅl´¥Iu;Ú.À]A9IÚ¶Dqº+°§Å¶PÛ f zÄ·ÄõR¯¨1Å!ÂÆCÈ?B\¦åµÌé*QÇÊ¿:3Yc(9xÄ¡\5츫««½â0SÔ3°ÁMrG4¢Mòòlzèò|èq¶u Wa§dÍûhFr-H·|u;1WYÅ,ö#MÑÊdÝZ|¥9 §ºó²q ý}>dçØ§ÝËÉrÂnÎìQØb6Ù°®°¿]Õ·qsbDyï¨ïªÿè@º ¯Eî7r1Ó[,Ö³ÁQy& Úð ÓlnÿʧÏÐ<!Î4Åéâ,n>Ù{dµK2%Xcï¥Ý£ÊÚJ»KeÑ|ZÀ~ê¼DYm{µêôÖ¡W\ÀnÏ5র¶j¸Õéíu qQ[pSY@ÅbbOeKQæKÄe¦¸5ÆÇ®ÞìðBb[íÍGîpê½$»1+OðÇ ÷ã¼±.-8<E¶[b3{³¸Å©¯SëDÛ9{ÄÏ*Öwµ{ZóZâvT½â6ñA¾æÂ1[êI¿ËµLóh¥ñãÚ5Û{ÔÎã3Ý 8¢É®múmAæ2YÓsÈ,!.$bÎ1¾Ý¢4¹D^[²5³{(ÒmLÑ"¸T§aU³äîv.°Z/*÷à6è%ÑâBzYò!Ë6]¬¤hsfl rj9nð¯y)kØUx0XïÙ!r'·ÄñÂÏÆ g/-µÄÝâþy¨íyAÖa\´ÉÃAÒ½úB±Ì+-ñOñ!¯[kWÄïùí&êÖl,p}8ìdØYN/ñi¹%7ÈgSfÜMLñÈV»ëTø0¶<gÀbõ9JmÊÍòK¼.Þ`Ò³ÄâA~ó[4Êȶ¬`Êá®GLÙÁ§o£h4Ïî´èCú!`ÑxÀc]Üø\jɲ?-ú>ã·,1QLâ·¨EÓh:OîÍt ÍmpWÍáv»)ôØr'<¶¨'»éWFtjy)wÈS-ñxñnÑÊøÎ´Äö¾|Ç¢Éö¾cïïñØw-*£q<v^â 'Ñ[éßêT7òS^Èzæ)ó'Aó2nwjrX_¿Ëï3ÊK23Z·õÈËLy¹Vh[ãаfMïé : ñc>>ª¼qÑÒºÒWÈ«ìÌ9ú&ßDñÇ_-ÊyöBm'Zò:®¶O×Û¦ÂG¯),y#~ûåMéÒÎ-i ÍÈÜéLwý4¢"| Çîy£,}8¶!·8×ÍÜS}9#æbQ¼ÃwêÞøï¶¼òNy3²Ó÷Ø#}|êíÁöX§%ûíѽgBma¸{í¡hÉv ¿«,y¿|Çä« Á®.KþÒø°;Xµ'=ZøÖ [Ðø)äîk~P¸GìÉ9pOɧÀ3\:ÌG¡-öD6DmÁ¤ Õ0/¹Àæ'6!å¶ê|ë*Aä/Û'Ò?Xò>=¸D¾j{¸äõLzóÃ9¾ÚÐÓîçNüô\ApU¸£JÝ6[eõ!ìX"8É?ëS(ä6O/@rð?¡@d¶ê»v=d'Üû©É)LÓ¾CÒï0ïæLéí`Éüº'ElÇ¡ ÛÖù)ßÿ ѺîVPÚ`ìcAÇ4 í¿ÖoD(f«M]¡RòÇìr)ênÅ^´ûf¥!åF}ÑÞ0fûP óí_O?Òª»Ú+ÿª}v_Ô#?ã®ÎðvK~ÉËÏå¿íVhmø Å:üÚ¢sõ©³ü/w4R0çúx8sf.©&Ó\p<ÊÈÕ5NÕ0viôª|n¤Bov÷t2pxMUÀ£¨-íÎ aÑnWÛQVF×ý%î+xT8fCâKS«ámFw7¥Üt<SÈÒíKöõ.l=jT¢`Á·ÕÁ®@b|LbËb1 Ù³Tãa/åéß´rª¦«&%øj£p¾ûL5ZM±Ã¤Ö5OIÏWÓÁ0_YãÊÐR3¡,8Ë®p#³¡ZA+·¸î<CÁäyµÑ¥KT.í#ÕáîW~¿fg{Ôj¾í¤ÖôÀýì´ÔB1ÙTX+MZ}¬ÖJ Å×FÔel1½¡Äý<¾¤Û×êGܾ.P?¶¨JP¨+ÙuöËF4î±ÔÕkß0"»k©k¹*ÕuvÔ¹Rj©¸+f¨ùÛÅ@²±¹©·ÕÍ|oIuæÙÒ¨È]NçV«ÛÍíýÈø`³=¼>ávÛa¨FNÆRwhð|ð:>6Q¯ê·ë»rpªÜõnNg©ö©{åÀ^q±GÝÏWfÝ¡9ö k¯BÖ^÷¾2Ûþ¥©P[r üÓô(¢e²)4%·Õ¥6Ôãê Þù'ùvæSiӦۣỪ©¿VÏræßpûYÙæTNìùì!1þ[Sý.#êÛ¶~oªÔ`]úþ¥^æPMêPýí¶crh.ÜÕ«ê5^þ'ì}(°ÝÎÞ`Ê_Poò:%Ø+%php.÷87ÒØä%õ7&÷^Sý]½Ã]o§Ò¢ÝÎó:é\H;Ç·Ôû¶Ä?°ääëüöaF¼.¦>¶¨:·E¦þEWªOÔ§P~ûÊm«T_ð6%QÚ}ÛÁï®i]øR}ÅåkÛ^ùú/ÝÆXöÃkt¸5ÙA+2OGßÄ!Ñâ=jD}jiùì©Þ3<пH½tMdk¯s7lVÎëÔ9<¾Q`ðF¡%k%_a6b¿xÎR?Ñ Q2ä¦.õ#L£oZ 1ë@1Ê4FsÚ>̾A\jßäÆ,c¬¾)li5tC:ò´£=t§Ãh©çlz&RáÞäahä:°ä× ¦SÔcJIßfÅ|l>VS>»ò%®K3R:î)@<RcOt ,c6mÜì`«è:d¯ÆTRöúÜCþlÊçñ&^æt$ÝCâ©öKç±¹Ö7§ Æ"ÖÁ;B¬e,µyDj\¶É±ï7·¹ÉNå¦z ?ÕÇí^ãàdM p,ª§Ã4éÁÓ|<w¸q?5µ*iin¨ÜK3 [åeàh{mÃ8Oø¿#©Õ}6ÕÀ³xj_5§ÝKíWÊñÞ¨WØKù- uß6QF[L[©SË3H'dð1 ²íjê§Ê8Åâ´½NÎÌ:¨Ë)|rÑ¢oë-tzPIgëN 3[ñ<;èü¹²Ø «ö¿Ä> ú:t6éÜKéR0Ó¡À/ù:½¡½©Þ¤?Rë<³ôo¬OÒ26¿µþ®\zÞʤç<Ðs> _ =.=ôCÏBw]zêË6@ïµ²ôÿÃÉ\ §w ´àªæ¢æ 2øPÙ;ßq°Þúö_»]ùzü§)Õë@2øÄÙY¹Ö¢Úú¢u¾lUÊë§ÿôj¨²µTý"¯Ox*îÃø9 á^DI\¬äßq1nSeõT ÿ|Ur»lööó?Æ@Ãâ4I(&-á Î#xAü(ÓHñ;°ÆL½(~ïqãËl?åϨÅK¬'/³kI"ÖYT( ÉÀÒ1" ß2W/Äiæ÷UjRÒ¥5TðfÀ÷ãûS:>ͨ |c¨D³ìMÆÒ19ç$g)rUçëâ g§Ógãü³ÆY*þÊ3 Þf¬Ë u°N§b4ÏI¢*«ÏÅ:JüÝÁúx×ÁºÈÉàÄ{ÃÅ)ýâ H À7³?sãà:îô#-©!É#Y½xøRÐøøO\*3éÙEFcå,À 4ã²HÛÆL8¢jYâ $W,¢ab18\ îò, ]IÕ¢æÕkh)ËÅÚ®võÒ" ub®ù CòÝÿ£Zóûåè9ißÈñ¿*.'TUÆ¥o@NåÑiM<:£s0:ÏäáYqY²:wÍT 6Øðh²h¥r±DEÄ1´¾q5¢=ÅÀkÝRh¬¬yr¬är/çÊxä<7ÜàxVq\ãò@ä* ûäA2RÑ 0ÀrØÀòÈáIYF+ä·²RYÓÚ/WfªEw®Tözù|y/UÄåêÆ±@Ö4U@õUø£A;Lٹ̨Àu}ô=~®ï-Ø#ÁUK\ãåñ-}²½b@v Zû9H1%^¤|¤W¦ø² ý3^A|T¿þ¿)UQLIþÛnÁîd-þß©»Ôý!U̬x+ãjÄnëæø,ä¯H0ÞBývÊ/vè«â£8¡ü7IH*nÖØðMÕ gÖú¦5ºu@qv¡&ô«Éýjj£Z±¬Ê2#®fDU\·.3ØÿáÄk¨S·î¢Âeù·Uÿà-Ï¿ò0«òÖ¼=À7 ð¸º`§Iï"ùûxø Ûä¤I¥´\U©9º1q ªÖ6> 7 8úbçMò6gwR×ÒR5o¯ZÜ0 ¶VªeýêहÙól6µî(uTZá´Ív¸-¿dDÂ]UÝ 0ÇÜ]µÊËÙ`×h°æ 9ÞnÔ®Bòê$Ìaß:-W~§éÒ¹¢ª_ÑciùÉq4Q§©rBJ©5ÍÍø;_jî@K¾[æD+ V*©¯¢ ºý\ª6èþ³:ÒiA«£öÀ<¤*âê8|hÛ§eƸ:a¯êiÜEÝ ¶ÚÉ,UeÆ>Õ+ J~ä²<6WÒd½®,o¯:+KÕiîÂ]TÃsÎ4®ËôĤsw9d'¿}ÏýÆf4iwë¤ $'#öÑd9 |rd7fÉY´XSMu²t¬C[÷")?UΧ+åºA.¤äbú\¢e¾^wÜ|ov/r*ÅÕyZæ³hZ«ÎÇÞ,¢^ ¸Ðëãê&hÛÏ*JÕ.h^om¨Vý bSu'[Å] <ÌÖCëe4À2iºl¢Ùr-Íëh<Êõt°Üb-+:gÃ1Úâ\øwk¹^u(^áä#÷g¯¢bN÷ãªïJÊ3nW·SZº!LðHþt¸üDßw«#àÉÜ0×¶Ç»2÷ò°w,Ø;FI?XÜBd Eä]OvºÂo¹gùzÖÒ ½£jo¿º¯b@= ¸&®yaåÝ))p¸ÆÙóf\npÿaLܹÎÙaϰ+*ªâFQ¨â$Å9?¸QOháÜ_7'1ê<\ÞOù¨ÇåðúÁK<0÷ÂÜ£°ÓÇST¬Ê¥¤Ê9GF®Ý ³´:ÇAQʹ12? íûtø Ar)G¥øßJtËA[rÅÆèÖ~cÌ^ct¶aêPöDà¶CÍáÿ^¦a(ù%]lâÈ]ã]ÐÝ)FNªè7|»hXÃ]ÆôRcfܨT{jFäõEn?Òv´¢w0ú.Dø8÷a(ä0blàë®<ù¯U¥på¹² cÕ5)æ7ægî#ìÓÇÐúOr¹_?s@/vîæÄöÿ<GË®ÿAÆ?Ïúµ¤±ê z±LgoÆAÎÝRc s¢aTݪ¸µªß¨Éh½Ë/¡e_)¿fýavfÍ7VêûüV«u<ªUFïßGr e×uÃCu¥ÜoÞP²8CD(`-ePÊKÙá{¢ðjï xF£ ßôdG@vgNÓ`¤ö'ü×Xk¬Ë^Hoe.µðc½³pcº øy£eOÆÒog-Ý`lÌAl0§/ká&ãÈÄ®È\Xµ°ÎÊZØoAªµðèÍX¨dÖÂãT³p¦cù²PîÉZy|îçf®ìËZé§÷s¬4Ú2W>µ²='ÎÔ{8vGiÖÊ@ÎÆÖLY+;`-hÉÜÌéYO0NÌ¥yê¾L?ÈZÚetgSÞÛH'd¬FHÿ6zð¼ yÐQz|é<ß³¢Øy69ÏVçyó|Éy¾æ<ßv_ÛOYà<gÚOuó\ã<p·F©óm?ÿPKmÛ+ 61WîÉy?!plI/Þ¹«õÛu/0¥ÌÈxÁv/°ÔÜ2UÉÊj§n㣽ק<O(¸r&WåãÐ4|pbÊù3)|Jkk:6¤]»"ª;nluX7×VERÉæsY\[q$+×rýçknû*þ5F£?þXà>à8Átà)fçX\âlàª'\»G8ÿPKòµâ ¿¸Çŧ¼8äáÔãÿ®ðÖçÁcýÏüVY>p µ=Ê-Çxè]?À#q8ÓÕjZ/)¿ÓÞtão{Ï<¿7rúÝLYË[r ä¢òþ*«ð_I^ ·¤%{.uèt.Pïl|GãkÀ4ÊON΢d±Dß½» K¸7Sy%Ñcç:ßÐ8Çò¿gâàKÐXâf>ka%°Wç1ÖTh^PK¡eÀì U¥é´}Ó äB6"ƪq(£ºL»É¬mS`ázå-n³ Ýç\ÆÉ 5;=~µ #ë»gzkzÈÇ¿:15}ÌØ¦1+ È-·63kq; éXÙ 7,OÀ?ÑüLSJ±É+É÷Ë·dwÄ6{úøæ1ıÏÞ6Ç.SùBeí Å¿Sr(ûòàtÆØóÙÚì³ÀdWeÅVQ|ÆÜgßÜÁ§1ÑÁu5¬7Ç^t%,;VG(½PK²®¦z ±ÿ¤`[èC?J¼3¦P ]îÇs~#l*£TÉÄo¤ºL¥{!â¤+á'aT?¶@¥7öÜÀSîyÄ7²]ÝýüÌsÅX¨ÄíÈ?\*]%"/sÉPÆõ#Ö>î-!ßý¢¡H¤Ïw§ÚÞ,R£Gȵ d÷=6 6rXp`a>©ÄYzÝÑ ×[ê¾ô¼HêzÒÌiêyõc¶é½ !¯D 68{mÝ2VËÓ¥-¬ þPøWm¥ rPÆ×xC 6¸óv7L#_|úYÅ¿§j~ÂGÅ?§xq,bñràó)é½qÌC>6^rípvµé4b±¹ÿÅoS2(}skt9s8êî ^q$¬bm¢ò~¢oÞ£¸ÿEîØÀW#²úèlUÉ f8Ø2,28 ôPK¶e2N ÕÓr_PKÕ½d| ãv)wI80¯"Ü»6+Û*w«"¹%G&´û¾®`0vÎÚ5Ó"Ñv³cXt1%ÂR,Üôê9çUcÈ Ö$;Ö(`+-²?*cÇäÿ¼&'²q3óŪév`CLw c /,®v©¬`ÎPKq3Þµ òÆÕôªòãªâ1=>°PòY#÷Y"ªìÙíq<è ÎÇyCyѬ ¤êýÐkÉ×¶ògü²ËªªêsÙv,ßWM&¯·.UNbÈ?ÌqB(jd\³j<» õSç:îp?F´Ã}1]þñråwËÇÈEy®cÑõ7R|'þ îòI÷Q(Ód£)§0}F|ĺÆÍÊôGÌ¿Ð*Fâ JA#\(@.ºJ(¤þÿ.$TÎ Y¾øÉõÆñÿ`'XÃ_lD²¶NËÚÄÊ2PDo¢L'ÏsT°H¯æ)z(Áûå¨FåXüOûPKãK -Ú&Æ1)ÐÍ- Ä e"d 1´tÌ×u#Ä:zöc.Ȳ\ÕÜ'Uå¸Ù:ïJÍ,¯3³ñÜáhLB: Nt£-ôHm·â©ö´ #|ÝË×ÓNY=¬o,«Ú¼\vγbKwQÖýmÆü5ÇþRS³Ì¡YØBe£Z)«²/0=Å6?kqi)L7/ùù]&ü*úµ¶¯ tîyÍù5¢¸@ÅW¯êÊp«IÉp3RòÀLQ 77]Wgæ%c½=_Ö|ï㯱xG¡-Âp ¡ÓËÊ5gm½Úöd2·hâM\NáÆBÛyµéÃGÛ«xKÛ¾Í2¹TP ëYâO¥[W;|@a&¶Áfu,Ѧ(rÃñÂʪn, 6xOzw*v lr S ÝàÏh¶+xw´Rw2Í.·ê¥> %éÕ½¨=t<ª`÷1P¯ MMrü¹irÁÚùC}X)åæxûGúXà©Õ*[W`ø?5O7Aá# õ¹eÇý±æý]æWvz´;{¤ígø\Ã=¡6¥ôÊ Ö2éoUUTµÔôí5åÝW[ó0H!·tL±6Jºã@½&k7ý°HÖu_°¯ö<´lVhÅõ+T©VÙö« B_²WØ/-6O(ðç0Ô¹J½f«;-§öOQMÁf+ËÓ*:9~ìø§¿yö ¹Ä ¶.²PÓ Üí*iS©¤-TZìRúÅåJYqkÐNZqAÕÛ¾cy³Ë°3¸\°ÄHñðF=ÑU±eºï»Ù%%ÍìÃe\;ÑÔçOhÆUª«¸Õ43k"I{ ®Ui÷ªø~-Erò½¨-Vì3PåËÉõzrU¿ñTOvz>xþ³ºCPö`¾À;¢Ht[ɸ²¨ü.hÄgw(¸R ¶Fæ^JàÛ^àFº×Y¢7 éfôc êùéÅO!ÜÆõ³KÞ¤éAG`bnåÂknð@¬÷\ç[u»Æf:½«Ca* qTPvð@B>hRa è´2cn^¨1AêiKjÆ ¤4ß´`¢Ûq\=)SXÎ Âåèkz é% aÒ·tο|ÞEs¬*ÿ-¸3;pãÖ¡sÒɸުV-ÃÛ¸`ƽôjÑÕÓîõÞ.ØTØ.§'î´Üa'ÞJipÞGè `WftÀJõúé§Z³J¢ÏLÙú¸Ã6õpnÇÙýOîbfáç§N¦·4PƧ@È´¶c éIHx¡^½0ÄòIx}iä¶Ú£V2Íø¢©þ¤Yùiu÷:NbÄv5×ÐçfIý'øS¥þ75?ãù!³T¶þ\ÑÄC¥÷D{æí0aÇÝaµÝÀ_à#Ëñ>J[öÐ0ûþÔ z_Iª7ðqÿ2ù7Æòwä¼lϬ=F_óÏ¿v±Ó«§¥1H+pJ°%²éýó0ÃãÌ ôÆ=^Ëû¤à¼nSȦ¹DÓp3K´#'ÂUNÛ ku2tÝÉ3 á³aѱÓɤ¢[H8Àð)|Nuÿ·%8°&ý÷"ß¿ãiå»|¹\äºe×eç3xVy~qi¥\ÂÂx^ylÌ%Â]RäÖ07Ëø¥õXÿ=^дÿ¥YïáÂx1oy¿ªXÊòs)<N_ÇKzbµ8,O¹l;'~uÅ´uoáÛj¿CÂúu);¾×ò3dß ã{zëU/áû~áÓ2UÈéÏuIs('àðÏaüþ%RKRï;é¦Cøa¯(Çàø±Fñ+øInfÒÀÏü»ÎxIÀÀ/üÙ_j2âl> üÚþ7&»A;Á«ìßýß0QðúvRþÃúO&½ oÛ1¦VÿÿÑùÿ-ÌùëÞ×KJµö$µI Y°ú%k¥ÂR.Aò±½u·cÞfCBR¡xËYhÐômV%yüàÀQzªTVAÊJFcBo÷=rÿâjfúZ¹ÎÎÈïªW_Ì¥ [±ÿ?x îñÐ6îÏ~QXh<Xó«vCÖËFl\ôÿC£<Ô\à>3±Jî Rr®Ô*§Íù;¨¤IUXÍ:GØâvzÌI[\ µ@\È9;Ý6:æNzræA¾Zf&V4*´·D¦Û$ªLëçU44ò. +d»°¨Ég?ïJ×ÚLëØUá¢Ô-æ^C¹Èvz?ÚãT=h[©×L¹þ¾Ã\.We§¼ enKX¼ÆÜ=®×í*êJÙ¥âPÓ+\çÆ±1+Õb¦-¯Å«e·â]CC.}"ͤ«faãñß#{Y>KKisCÚ¼â\öÑj¼\3)ËoO÷ÙinfÈõ>A;]²ØWäJCh]ñ °¶XÖ!]j°å Ë×VäõÍ´á,F"Í?*zu©zÝñ\W*ôÇç½ú I¿¶þ§®¤âWYmĘ́òê*û¹u Ûò^YR Ä+îåv1y´F,[6èD<çQ0C2HÃ%cyS2,µ+dHOfÉMÏëHKRË$¿R!aNúg.ÖÃ.2Ä1µù©Óa3Ý餬״AEGT ]â^<D§=¦z`HÆ.YF¥WcaIR£õ8)/~Þ¢"ß}Ñi¬4ííl¾ '§´»äî°Ü)oåÅ+ÖéËT7ÜpóÓíÆZîËm ÷8TÌÚgkïPUzÆí C÷jW)¼ì`QâÊù½+ϺHýF¬µí3OѨcï Ô¡& 5Åð¯Õ<ÀÙ`â5ât/ýø0sÈ#XÏV¾¡ç~Mø.g¿'p Nâöî·á°èg=m^v7½ë8}ì~¢ý#Âg¸2Å_3/b/à4['ðs|¿Á)ò OÉ:|N"lF/g|"K®ÈYz½ÔÉj©¤-|UªøVFÔ{¤oåĹVÖð,kä{ö!®qܨÊRÍJMÙÃN I¥xæ°G÷6¦Ïx¼×ûû Q½ïs*²©7m¤Q_\õ¡·<%[§äühV.*¯òBñ9_â¦çK\xM\äbÛ¼ZYxbÃi¹Dð ev\ §"CT`´ ç© Q«I/P~ú r$;l])g) ÓÇx/àEã]ÚômIöA!W é8C@§&hdꫦ½R9ѹWó>"X.YÐqYò%6À3?m5îñó<ãÕÍÛÛw8l³V£p¯)ô@Lío·4Èø¬>£$7üºjf§ppÕtå¥É×I&9¤§ÅÇÎTK¸¬r¡<T²hx¾ÚË;-m_ÇJ¿i¼Å¬ È×M¼§.tÿm\Uü ýùÈ {ò|<õ51©ÞAQMŬÀÐm ×½ëX* ìTLÏ.ÁÉn( ÞÅBó( ·6éTé@_¹ÉÛ¼ø¬%Ô wèõÛìß.¡ÕØ5ZÙ èÊ,ï[WLUÀðÿÕT<Q°méæ-Ãó¤Çëá»ÁïjT=´ þ¢êyhÅGdoÕÃß!r}ÖLÀ¤v1JïàHêÌ¥Nì öK~ÿ#Á©/hÇiéüòFq_Ê¡D ÷ñ£dQÅ"ØK(á>¤vË| >¢/L.Ó×GärÕMÎ"P=ûPK-¸.¹ -¤´P¤I å" j°´µ¢¢ÓvB§fâLB+^ïx¿!Vß|Ñ'.%°Ô%ðâ?Êåwæ´1Y¬åËÌ9{ï³/ßþÎ>ÿóÛ¨Çn|'°w¶µò oÁÊ^(XqÓˬ¼9bdM»[nÇ]Óì7m{ÔÌN®é!ôY㢱¨%ò´H43FÁ®a]/Îr]ÇMM9YÁg¥¬O Sj-3`XvÁ5Õ¶ñÅü ÔëÑ @¿3mjhB8 ó"ñ /a#eÁðx§4L+SùáÝ>$I*Ò*CUÒlþB&#¯çcËÖ#æ%[Ï/vÁÎhÈ¡W2ì¥rQwtB5/dI£Ë;ñZ¦U"»yÒâüðª¬&ãc[9×+2Â,^Õ8ý{å°|]´oHíY\Tgç9ÂjpU Á/÷$ÃD òjL@µøLó«b*'J´î¬1²WÚ bØVT2ð?@,ù¬¯ø½2 ûþL5y¢ãADß°¼Z/ºr êÐîª!h3ܰ5Óð r ç-W)XÕ+J3³¦Á âíbh¶¹3jñ4·,iW(Ê¢ мk¬Á:E:zð¢õøà·5ØÈà%pW°µÁYò/&À7!( ¶b;%fñ)Q9VA¦Â,VPƽ/ßMR~]3x̹¬s/^¡J2¦tòª¢e6ëDt<G-s[ÎeM®ÚºJÐ'&§yÒ\¼#ö`¯PÝP õ`¨ôúJ#mDDÁ~𡸢C^N¹åÅâ£j²{R «©CoEÜÊ¡F1¢à&Q9äV\Ôé2Q3©ê§TKkw³ÎÉh6]T ¶Z¤ B9hY¦ÅÐVêûââË2¨åð¤©;h^NÓ¨-`âPÀÊ-Y\ìG2ÄÆI£ÕUü&ã9Wÿ -mR_V6f`tØ^1 8¤jzÖ"ÙöUÕ lwȶ©Ü¨ +ÏK(³áùl¦zÏÁÃT\& bËbáà <õzõåäM¦¸ã:wVf¬wKÁHGU'cËÞ=SytêÝ·`¹@¦«ªyeh#ô¨j;b£¨»ÛÜáPRÄ>Ìá m«oÓ¨ÍÇØµT$ç¿-íeèéÈgg̹§e(UJù!ÃÀRý°á©GëúÝ ·DÇ^WpC|HhÐWÂÅV²*>ÂÇBÓ[TªiHÝKÆ1àÁ§»KwïÑÏÜÁçe³=&~O:®9·=ø¾ÕqѼÀ£ª#ê(TF¡Ù¿Æ7 ¾Â·4áø¥YÕ ædb~$ܶ7leØóp{ño]6w´äì NïiI±"ï²Á( ¬ Õ¦w]Èqu»\^Z¿w%×{xßå Ë5P/¸î |µ¨ê¥ðA!×4*ÀD"4k1.¨nÕ>Æ ªå9ܾ_ð5B¾q³(à8=øDS#>æ.g"7ã;¾P×<¾xïÊïí6û-j»ßJÃ_ÀõJÃïñyzñ#~¢§`ØX$Éx¹$ÍPù³òâüZÁqþ2ÇMüþ»RÒ¡àyøPK=¯ÛP# ÖȺ¶OêÆñ¼ÕlgÔÒ´Ãæ´AQ°ê:§¦³ªq<}tò6åÄRP/fO¹ÛÒ7¤vED2æé(¨tñ3ÓNÖSÒÂn¹xP·ÍÐ,[AÕ ´wôlzvLËâ~UÏæ-jTíGÌj\ËôY) âá¼!p}H§á= R-ÁZÇ{HBA¨¥u,JT%ÆEÄP@-Ö$G"2¬U°&Mõ ¬ë*ëîIb ;º7îè¾$b(£fÆaP7´#ùܤf sJÍ©.޽ɰ3£Ó©{IC¶dÔ«Õéiz1Ä ZZÓ¦Íi¾mLùi8ªn°»»%°»õX[Ð!bÒ© As}Y-G¸ËÝØ&oW dl¼+& ê,-gÎiάp¿xvxÐ¥³Ü3º1-"£`_ܽUöt^ÍÚI<$,ñ° ÝFòºÃܤ<´ 7ìNâìM0ýû(ÎËbè¡m¯û!â`H¢õ¡?^H¢».IW2uåxѵ,DbaPî0ÕcëϺÕ0ÄQéÇéãÓ3£g§{Ì|ÉsÇF õ¯ÚªÅMD4d} gUgMÁv¶nàP:ÿÓ û#̤vJtÝÒ«gFµi÷Þ¬e¿ ÑðK¶Ô÷&Y#$8¨Úè1s³¦!å[ÝÒz»wILCK` ªk1 64hût Ñ}xåѼ¿ÁEW #LÒÖ\)ØBKEJï3ò9ÍRÝ4HôiX"ë¢ìħü íãÞIh³Ô|5ó쯾H§íçsã²½IFFzô<^¨ÀsxQíæµØl)\ö¥ñMÁç´ÔYÉñØ ¶ô)q°Mr©ÈÜZÁTJRRSÐtg¾Ô0Õ^W"Ø,YÕXUAâ¢öeÉ%ñcQ½x4)¿QG3˨0¨@I] ²ýL$¹?§Ú 17¹vÊEÑ{Gu{PSY î&j@3lzbË]½ÚIÏÄYù¶»ÍmÁk[J6®_âW Ç;Tç¤jkîú5sj6¯õ,ÌEyl]®Ü´ÓÅeä/Ão©3ïøW ÝLYºáOÍѼÇïð{~.;u7¦Ó¨çf]íiÓåøãâàfÐþÄh̬qKïä :#eýg\Là\b(íä°è«ÞõÄgñwì ´¸\¡ q^+k»31Ã'U/Ë\lìϼÛ~O Õ¿z³=£qÝöÝJòjG iv>+J81bæ)_7¡®7l£a+"ñðÉ[|òÖ%+¼çJù\ÃõXÅ¿«ùvWß2>»Ú® ºíjǯ n)×q¸~ KÃÆ¥aS[û6\¸ù·ÖµdS)Ñë¾U¼è¤ð ]òW)6È,E¸òÑ\úiYPÙ¥tDåä¬4txæ¼Åßýîæ½^kHJßÿH¸8¾.Æ\QcHú,%2Éxhy/eÍí¡÷,ÊÛ¯£÷"ÇçÏb5Ççx÷°ìꩱx{ /ÒËxX¼Ìwº(;áfÏð:î{OV³_ã7 C øøCÕ|ÞÚê^áWã>pÜ/8þ" V ]!û¾ØøoÞð£@À¦`À·!.[Ë^ÃÇ> +J XÀõúx¯°Ò¬ô?óõ ä /dÛíLÎ1íJhVMÇdÖÈKN)§K54¸RiÛ4§-ûä°wú3yÇÌ\ Êô!;C uý "c%îcÆäÙÑee9 Z¯e;3DÜ¥áªxàþ¶B]Ö©ai¼í *¬ :#²KP££ay[ae&gî/Lö°1¥T´ßJÙoo2ägòt§ñ(ÐÒeÓ+S2§!ï +·£OlR[o51ÅûÄælо«KËݶmÙÔßxY<¡I$5T+É#-Øf^ÇkÜkJ=E[u¼ÖÓ|[á̹¨ ±¹áÌ$âõ1 ía ¬É)/?f:¥¤®·¦IG×Þ×iX°¡×SÎætl$nÁ6 µ;»îßs¬XÊÊ9\ÁãFòÇ#â Q2¹c*$[±]dixýüõÎB:-<¼ÎGÛcaìÊPb:h5¦òæ,vä]!ÑÔ×¶P.ìºfLM¹1 Z0åÚA[p«h&ÏÃURWÔvúeï>¿6ÒUZczüY[B*8l²;W4mÃÉX9ÂÝÁnÇÚÞeÂ,¢^pPÚj1 ºJÏ^3Íj'ø¦ø"ؽÁyy=Þ Ñº¾¦}ÞíZqèÞ¤²CǨkAJú»7m36mä:Æj}¼÷²áÍHÈ&È\nÏò±=6*E0¦4,ÉsAzR G``ªrlÝYsÒ0]#·RáqLW¡4,(G^uV⥪t£©¡)¸Ò=½À7áÍÀûXãF~e9y¶#:À¢þ-Ú¨euZWÖ,%¦6å¦<äÌL©F¸ mXFCM¥nãÒñ¨kËc<ÊVm#e.ÚKÎ/Oà"ÿ$ÉêZªaÃe .9q\ó*ñn:zÜÈÌ´Ti ºGqZÙïZÔÆH+`!ñür+bí"ºu9ó`;î>msÿ ÝCVÁN$ª4KîHÅS4±ÐC >!w1ÞÎ8Öp¾ :Çj~ pìY¸U¥çM´GíYN-AÇ(ÕkPçL½+5¸J¯ÄZªa'b®÷ÀS¼Út]"VDc¢½ZehSQ ë96Рº!à«©Cí·¼7i«°ß²V(âº"nGô¦"vÎ)[¡ 7zÁj±Úf6Û*BÖ»Þl3edìCrO¸>4rS - c(ѵwÈÎHrê kX{NÒ«Ò(3c<âLlGÌ+ÍÖF"=¨¡übµn¥®±ðº=91cMè¨psÃ:ë¤Òª»èDïA¯Æ9x¼+Áâ×°¸òátíÅ>Aùó0³m+íô&RVw"fÙÄÇqO]â^N%<ÔjÅ@ÄSñJMÓå(1Õ²iCÒ²ÉÌe¥¹4ì CHJÌ)Nè,W{%ÿ=]Nêô¬«Ê}[Ù¬tÜ}ò1ÝÑlMR*hI ;AHg ãBU"]ÚS;Óùz?ú ¹|x9ku;øà!|º`¯¨ýHÌv´Ò>eÇÚ}³pGaeE©+ùq|N|·ÒíÉÅbV6;Kjz{8§$A&ëm4tÊ<ÏKR<G;Ëfß}Þ½J¾8)bAùð%-B7ÑÍAKzpãµ\8|_)Q¯ä>òáÅB7O²3¾í¼S$eÚÌ×¹âç³5¹Ôs=P| üx6KVùñÆä{U#úp©fÝ3ٲΰýÀA+Æt§noál Y¶NsNdÃÎ7Îèq¯gÔ~ü"ÇD°W_¡ÊUºFø5~#âÿVai[&Ó'ì6sÕôÂú*\OÝ_¦]!/¦Òî¢Á¼+EØ3iÙ÷¦½pÕùR ê d-§øèÉäìÕ¯ÙÚ-oXÌê6øâhð¯DÕÃÇ,'´¼N"Àç%ÏA>Ï,y Ç|âç YË9 üó?Îi«ü>,!úR,ä(èÚanÖo¸|ô0Ú5`fdáþèaI9P ÖàNÒr³äÄjÎ¦ÇÆÝåaïàþR¨%Ès°ÉCö£M#+|§â"¯*ð86yËÏ=ß_ñt;±ÕÛß©³sçÊ6î×#îbQy »uºÉH®Ò£.tkõ·a»»F£U½·$²RØ["Ûùþ±)!yźV>³»\DEqÖS¡Õ;6_$ZÍã*ß*!â+ñiaºËz´RL¥þmÍhÌcÿ%ëhóeTAÆ5µ5µµÎ/Ë͵þ<Fænð»L×ù}ì 6s7ËjwØrô|e6eF߯ym!é >Wø+𠾪£Á«=é°¯R³*î ¯áëºcóÅߣºý·ÚÏ%ò³¡×»«7T¯5FÎ3V ÞÌãÜqø £Ø®'¾©'Bè£âscÝ£X.ë¥ÛÙ8ÆûCßûðý<~zyüÁÂ/¶Ýzwôêéÿl ½®÷±>Öúå~õnÊün½©7I&¯7dIcþõìF&Xê d¡V°rBùgÃoýOùk¿s Ï;-µYrpuêÀ!æö,Ai`qZË Ü¶ÑR먹dZx<jߤõâýfuÞò¹6TEvÙ)Z9¨rЬo¢+tάv\}ZÐ #r eäT`-οcIìow(®Y+¨ûwÎðÜ{´åÁÍ6,þ1ç<õ&î s¡Ê» åW_Z'`Ï¡/ä:£$¡úWp$é¹lþÜsÇc¶ÜG¨-@(T¸dïZ?BÉmmýó£pàåý+þÐ6ÊU*°òxr£Z8øÕðGUL| Ìþ>ýÆê¤°d¦|<M,QÎ;~mìÉeÎAÆyúä.òÝlÈNamÊASý(Ñ À_îüöïùæ¤_0¹¸Ðã¨çÒïÒ4p4x;;Ø;÷Ú{ö õ,vÞVð"îúbm%×µ'µó¶Þ^]Ù¿Ó]üOÝ¿PK¯Ê@óî ² d ... [truncated message content] |
From: Steve F. <sm...@us...> - 2002-10-17 00:34:51
|
Update of /cvsroot/mockobjects/nat/jmock In directory usw-pr-cvs1:/tmp/cvs-serv21088 Added Files: build.xml Log Message: Started ant build file --- NEW FILE: build.xml --- <?xml version="1.0"?> <project name="mockobjects" default="jar" basedir="."> <target name="project.properties"> <tstamp/> <property name="build.number" value="0001"/> <property name="jar.name" value="jmock-${build.number}.jar"/> <property name="src.jar.name" value="jmock-src-${build.number}.jar"/> <property name="build.dir" value="build"/> <property name="junit.lib" value="lib/junit.jar"/> <property name="compile.dir" value="classes"/> <property name="debug" value="true"/> </target> <target name="compile" depends="project.properties"> <mkdir dir="${compile.dir}"/> <javac destdir="${compile.dir}" debug="${debug}" srcdir="source:test" classpath="${junit.lib}"/> </target> <target name="junit" depends="compile"> <junit printsummary="yes" haltonfailure="yes"> <classpath> <pathelement path="${compile.dir}" /> </classpath> <formatter type="plain"/> <batchtest> <fileset dir="${compile.dir}"> <include name="**/Test_*.class"/> </fileset> </batchtest> </junit> </target> </project> |
From: Steve F. <sm...@us...> - 2002-10-17 00:34:19
|
Update of /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv20958/test/com/b13media/mock Modified Files: Test_Predicates.java Log Message: Removed unused import Index: Test_Predicates.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock/Test_Predicates.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Test_Predicates.java 15 Oct 2002 17:25:14 -0000 1.4 +++ Test_Predicates.java 17 Oct 2002 00:34:16 -0000 1.5 @@ -6,8 +6,6 @@ import java.util.EventObject; -import javax.swing.AbstractAction; - public class Test_Predicates |
From: Steve F. <sm...@us...> - 2002-10-17 00:32:50
|
Update of /cvsroot/mockobjects/nat/jmock/lib In directory usw-pr-cvs1:/tmp/cvs-serv20578/lib Log Message: Directory /cvsroot/mockobjects/nat/jmock/lib added to the repository |
From: Vincent M. <vm...@oc...> - 2002-10-16 14:37:39
|
Hi Henrik, That's sounds just great! We welcome all contributions. All our discussions go through the Mock Objects mailing lists. Here is what I suggest: - you subscribe to the lists (user and dev) - from your own experience, you can suggest things you wish to work on, improve, add, etc - send patches to the mailing-list. One of the project committer will apply them. - once we get fed up applying all the patches you send and we know about the quality of your work, we can then vote you in as a committer and give you full write access. How's that? Thanks! -Vincent Note@ I'm ccing the MO developer mailing list > -----Original Message----- > From: Henrik Kaipe [mailto:ka...@us... ] > Sent: 16 October 2002 15:17 > To: vm...@oc... > Subject: Mock Objects - developer openings? > > Is there a chance that I can contribute to the Mock Objects > > project as a developer? > > > > I have been a certified JAVA programmer since April 2000 > > and I started to use the utilities from the Mock Objects > > project six month ago. > > Four weeks ago I got a new placement at Karolinska > > Institutet ( a famous medical university), which means that I > > now work under academic incitaments. In my previous > > employments I have been working as an on-site programmer > > consultant. > > > > My new placement has given me more freedom when it > > comes to plan my working hours and, since I use mock > > objects in the ongoing project, contributing with programming > > efforts to the project does not necessarily slow down the > > progress in our project since our testing in some parts rely > > on Mock Objects. I would probably also contribute in a way > > that favourizes our project by correcting bugs that we run > > over. (I reported one of those bugs earlier today.) > > > > So, what do you say? |
From: Nat P. <np...@us...> - 2002-10-16 13:56:45
|
Update of /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv13215/test/com/b13media/mock Modified Files: Test_Mock.java Log Message: Added facility to setup behaviour of methods with side effect. Setup methods do not have to be called. Expected methods clear the method-called flag. Index: Test_Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock/Test_Mock.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Test_Mock.java 16 Oct 2002 13:12:59 -0000 1.5 +++ Test_Mock.java 16 Oct 2002 13:56:42 -0000 1.6 @@ -151,7 +151,7 @@ _mock.verify(); } - public void testCallWithSideEffects() { + public void testExpectCallWithSideEffects() { final StringBuffer buf = new StringBuffer(); _mock.expect( new ExpectedCall( "sideEffect", @@ -169,7 +169,22 @@ } public void testNotAllMethodsCalled() { - _mock.expectVoid( "noArg", Mock.NO_ARGS ); + _mock.expectVoid( "noArgs", Mock.NO_ARGS ); + + try { + _mock.verify(); + } + catch( AssertionFailedError ex ) { + return; + } + + fail( "verify did not fail when all expected methods were not called" ); + } + + public void testCalledExpectationClearedBySubsequentExpecation() { + _mock.expectVoid( "noArgs", Mock.NO_ARGS ); + _interface.noArgs(); + _mock.expectVoid( "noArgs", Mock.NO_ARGS ); try { _mock.verify(); @@ -178,7 +193,7 @@ return; } - fail( "verify did not fail when all methods were not called" ); + fail( "verify did not fail when all expected methods were not called" ); } public void testUnexpectedMethodThrowsWhenStrict() { @@ -328,6 +343,8 @@ assertEquals( RESULT, _interface.objectTypes(null) ); assertEquals( RESULT, _interface.objectTypes(new Integer(0)) ); + + _mock.verify(); } public void testSetupThrow() { @@ -348,6 +365,42 @@ catch( IllegalArgumentException ex ) { // expected } + + _mock.verify(); + } + + public void testSetupCallWithSideEffect() { + final StringBuffer buf = new StringBuffer(); + _mock.setup( new ExpectedCall("sideEffect") { + public Object eval( Object[] args ) throws Throwable { + buf.append("hello"); + return null; + } + } ); + + _interface.sideEffect( buf ); + assertEquals( "hello", buf.toString() ); + _mock.verify(); + } + + public void testSetupResultDoesNotRequireCall() { + _mock.setupResult( "objectTypes", "result" ); + _mock.verify(); + } + + public void testSetupThrowDoesNotRequireCall() { + _mock.setupThrow( "objectTypes", new RuntimeException() ); + _mock.verify(); + } + + public void testSetupCallWithSideEffectDoesNotRequireCall() { + _mock.setup( new ExpectedCall("sideEffect") { + public Object eval( Object[] args ) throws Throwable { + throw new RuntimeException("should not be called"); + } + } ); + + _mock.verify(); } public void testNoErrorWhenOrderedMethodsCalledInCorrectOrder() { |
From: Nat P. <np...@us...> - 2002-10-16 13:56:45
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv13215/source/com/b13media/mock Modified Files: ExpectedCall.java ExpectedReturn.java Mock.java ExpectedThrow.java Log Message: Added facility to setup behaviour of methods with side effect. Setup methods do not have to be called. Expected methods clear the method-called flag. Index: ExpectedCall.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/ExpectedCall.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ExpectedCall.java 16 Oct 2002 12:56:21 -0000 1.3 +++ ExpectedCall.java 16 Oct 2002 13:56:41 -0000 1.4 @@ -10,12 +10,34 @@ abstract class ExpectedCall extends junit.framework.Assert { + /** A constant that indicates that an <code>ExpectedCall</code> accepts + * any arguments, that is, that the call does not check the arguments + * passed to it. + */ + public static final Predicate[] ANY_ARGS = null; + + private String _name; private Predicate[] _expected_args; - public ExpectedCall( String name, - Predicate[] expected_args ) - { + + /** Constructs an <code>ExpectedCall</code> that accepts any arguments. + * + * @param name + * The name of the expected method. + */ + public ExpectedCall( String name ) { + this( name, ANY_ARGS ); + } + + /** Constructs an <code>ExpectedCall</code> that checks its arguments. + * + * @param name + * The name of the expected method. + * @param expected_args + * Predicates that define the valid arguments of the method. + */ + public ExpectedCall( String name, Predicate[] expected_args ) { _name = name; _expected_args = expected_args; } Index: ExpectedReturn.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/ExpectedReturn.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- ExpectedReturn.java 22 May 2002 10:02:49 -0000 1.1.1.1 +++ ExpectedReturn.java 16 Oct 2002 13:56:42 -0000 1.2 @@ -11,6 +11,9 @@ { private Object _result; + public ExpectedReturn( String name, Object result ) { + this( name, ANY_ARGS, result ); + } public ExpectedReturn( String name, Predicate[] expected_args, Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/Mock.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Mock.java 16 Oct 2002 13:12:56 -0000 1.6 +++ Mock.java 16 Oct 2002 13:56:42 -0000 1.7 @@ -33,13 +33,14 @@ private String _name; private Map _expectations = new HashMap(); - private Set _expectations_not_called = new HashSet(); + private Set _not_called_expectations = new HashSet(); private Map _order_constraints = new HashMap(); private Set _called_methods = new HashSet(); private boolean _strict = false; private Map _default_results = new HashMap(); + /** Creates a named Mock object, The name will be included in the messages * of exceptions thrown to indicate violated expectations. */ @@ -86,32 +87,45 @@ _strict = strict; } + /** Mock the behaviour of a method without requiring that the method + * actually be called. Note: the ExpectedCall may check the arguments + * of the call but should usually not do so. + * + * @param call + * The call to be mocked. + */ + public void setup( ExpectedCall call ) { + _expectations.put( call.getMethodName(), call ); + _not_called_expectations.remove( call.getMethodName() ); + _called_methods.add( call.getMethodName() ); + } + /** Set up calls to <var>method</var> to return <var>result</var>, * but do not define any expectations upon arguments to those calls. * Arguments of calls to <var>method</var> will be ignored. * - * @param method + * @param method_name * The name of the method that will be called. * @param result * The result that will be returned from this call. Primitive types * must be wrapped in the equivalent Java object, and will be unwrapped * before being returned to the caller of the method. */ - public void setupResult( String method, Object result ) { - expectReturn( method, null, result ); + public void setupResult( String method_name, Object result ) { + setup( new ExpectedReturn( method_name, null, result ) ); } /** Set up calls to <var>method</var> to throw <var>exception</var>, * but do not define any expectations upon arguments to those calls. * Arguments of calls to <var>method</var> will be ignored. * - * @param method + * @param method_name * The name of the method that will be called. * @param exception * The exception or error that will be thrown as a result of this call. */ - public void setupThrow( String method, Throwable exception ) { - expectThrow( method, null, exception ); + public void setupThrow( String method_name, Throwable exception ) { + setup( new ExpectedThrow( method_name, null, exception ) ); } /** Set up the value returned by methods that have the given result @@ -136,7 +150,8 @@ */ public void expect( ExpectedCall call ) { _expectations.put( call.getMethodName(), call ); - _expectations_not_called.remove( call.getMethodName() ); + _not_called_expectations.remove( call.getMethodName() ); + _called_methods.remove( call.getMethodName() ); } /** Expect a method call and return a result when it is called. @@ -194,7 +209,7 @@ * The name of the method that will not be called. */ public void expectNotCalled( String method ) { - _expectations_not_called.add(method); + _not_called_expectations.add(method); } /** Define an order between two calls. The method named @@ -311,7 +326,7 @@ } private void assertCanBeCalled( String method_name ) { - if( _expectations_not_called.contains(method_name) ) { + if( _not_called_expectations.contains(method_name) ) { fail(_name + ": unexpected call to method " + method_name ); } } Index: ExpectedThrow.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/ExpectedThrow.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- ExpectedThrow.java 22 May 2002 10:02:49 -0000 1.1.1.1 +++ ExpectedThrow.java 16 Oct 2002 13:56:42 -0000 1.2 @@ -12,6 +12,10 @@ private Throwable _exception; + public ExpectedThrow( String name, Throwable exception ) { + this( name, ANY_ARGS, exception ); + } + public ExpectedThrow( String name, Predicate[] expected_args, Throwable exception ) |
From: Nat P. <np...@us...> - 2002-10-16 13:13:04
|
Update of /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv28414/test/com/b13media/mock Modified Files: Test_Mock.java Log Message: Renamed addDefaultResult to setupDefaultResult to match setupResult and setupThrow methods. Added explicit test for setupDefaultResult; it was implicitly tested before. Index: Test_Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock/Test_Mock.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Test_Mock.java 16 Oct 2002 12:56:21 -0000 1.4 +++ Test_Mock.java 16 Oct 2002 13:12:59 -0000 1.5 @@ -214,6 +214,28 @@ assertEquals( 0.0d, _interface.doubleResult(), 0.0d ); assertEquals( "", _interface.stringResult() ); } + + public void testSetupDefaultResult() { + _mock.setupDefaultResult( boolean.class, new Boolean(true) ); + _mock.setupDefaultResult( byte.class, new Byte((byte)1) ); + _mock.setupDefaultResult( char.class, new Character( '2' ) ); + _mock.setupDefaultResult( short.class, new Short( (short)3 ) ); + _mock.setupDefaultResult( int.class, new Integer(4) ); + _mock.setupDefaultResult( long.class, new Long(5L) ); + _mock.setupDefaultResult( float.class, new Float(6.0f) ); + _mock.setupDefaultResult( double.class, new Double(7.0d) ); + _mock.setupDefaultResult( String.class, "8" ); + + assertEquals( true, _interface.booleanResult() ); + assertEquals( (byte)1, _interface.byteResult() ); + assertEquals( '2', _interface.charResult() ); + assertEquals( 3, _interface.shortResult() ); + assertEquals( 4, _interface.intResult() ); + assertEquals( 5L, _interface.longResult() ); + assertEquals( 6.0f, _interface.floatResult(), 0.0f ); + assertEquals( 7.0d, _interface.doubleResult(), 0.0d ); + assertEquals( "8", _interface.stringResult() ); + } public void testWrongNumberOfArguments() { Predicate p = new IsEqual( new Integer(2) ); @@ -327,7 +349,6 @@ // expected } } - public void testNoErrorWhenOrderedMethodsCalledInCorrectOrder() { _mock.expectVoid( "first", Mock.NO_ARGS ); |
From: Nat P. <np...@us...> - 2002-10-16 13:13:03
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv28414/source/com/b13media/mock Modified Files: Mock.java Log Message: Renamed addDefaultResult to setupDefaultResult to match setupResult and setupThrow methods. Added explicit test for setupDefaultResult; it was implicitly tested before. Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/Mock.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Mock.java 16 Oct 2002 12:56:21 -0000 1.5 +++ Mock.java 16 Oct 2002 13:12:56 -0000 1.6 @@ -45,15 +45,15 @@ */ public Mock( String name ) { _name = name; - addDefaultResult( byte.class, new Byte((byte)0) ); - addDefaultResult( short.class, new Short((short)0) ); - addDefaultResult( int.class, new Integer(0) ); - addDefaultResult( long.class, new Long(0L) ); - addDefaultResult( float.class, new Float(0.0f) ); - addDefaultResult( double.class, new Double(0.0d) ); - addDefaultResult( boolean.class, Boolean.FALSE ); - addDefaultResult( char.class, new Character('\0') ); - addDefaultResult( String.class, "" ); + setupDefaultResult( byte.class, new Byte((byte)0) ); + setupDefaultResult( short.class, new Short((short)0) ); + setupDefaultResult( int.class, new Integer(0) ); + setupDefaultResult( long.class, new Long(0L) ); + setupDefaultResult( float.class, new Float(0.0f) ); + setupDefaultResult( double.class, new Double(0.0d) ); + setupDefaultResult( boolean.class, Boolean.FALSE ); + setupDefaultResult( char.class, new Character('\0') ); + setupDefaultResult( String.class, "" ); } /** Creates a Mock object and automatically assigns a name to it. The assigned @@ -86,7 +86,46 @@ _strict = strict; } - public void addDefaultResult( Class result_type, Object result_value ) { + /** Set up calls to <var>method</var> to return <var>result</var>, + * but do not define any expectations upon arguments to those calls. + * Arguments of calls to <var>method</var> will be ignored. + * + * @param method + * The name of the method that will be called. + * @param result + * The result that will be returned from this call. Primitive types + * must be wrapped in the equivalent Java object, and will be unwrapped + * before being returned to the caller of the method. + */ + public void setupResult( String method, Object result ) { + expectReturn( method, null, result ); + } + + /** Set up calls to <var>method</var> to throw <var>exception</var>, + * but do not define any expectations upon arguments to those calls. + * Arguments of calls to <var>method</var> will be ignored. + * + * @param method + * The name of the method that will be called. + * @param exception + * The exception or error that will be thrown as a result of this call. + */ + public void setupThrow( String method, Throwable exception ) { + expectThrow( method, null, exception ); + } + + /** Set up the value returned by methods that have the given result + * type, if no result or exception has been explicitly defined for + * the called method by {@link #setupResult}, {@link #setupThrow}, + * {@link #expectReturn} or {@link #expectThrow}. + * + * @param result_type + * The result type of methods to be mocked. + * @param result_value + * The default value returned by mocked methods that return values + * of type <var>result_type</var>. + */ + public void setupDefaultResult( Class result_type, Object result_value ) { _default_results.put( result_type, result_value ); } @@ -156,34 +195,6 @@ */ public void expectNotCalled( String method ) { _expectations_not_called.add(method); - } - - /** Set up calls to <var>method</var> to return <var>result</var>, - * but do not define any expectations upon arguments to those calls. - * Arguments of calls to <var>method</var> will be ignored. - * - * @param method - * The name of the method that will be called. - * @param result - * The result that will be returned from this call. Primitive types - * must be wrapped in the equivalent Java object, and will be unwrapped - * before being returned to the caller of the method. - */ - public void setupResult( String method, Object result ) { - expectReturn( method, null, result ); - } - - /** Set up calls to <var>method</var> to throw <var>exception</var>, - * but do not define any expectations upon arguments to those calls. - * Arguments of calls to <var>method</var> will be ignored. - * - * @param method - * The name of the method that will be called. - * @param exception - * The exception or error that will be thrown as a result of this call. - */ - public void setupThrow( String method, Throwable exception ) { - expectThrow( method, null, exception ); } /** Define an order between two calls. The method named |
From: Nat P. <np...@us...> - 2002-10-16 12:56:24
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv21854/source/com/b13media/mock Modified Files: ExpectedCall.java Mock.java Log Message: Added setupResult and setupThrow methods that set up the behaviour of a method without defining expectations -- arguments are ignored. Index: ExpectedCall.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/ExpectedCall.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ExpectedCall.java 11 Oct 2002 14:57:36 -0000 1.2 +++ ExpectedCall.java 16 Oct 2002 12:56:21 -0000 1.3 @@ -24,16 +24,28 @@ return _name; } + public boolean isTestingArguments() { + return _expected_args != null; + } + + /* Pre: isTestingArguments() + */ public int getArgumentCount() { return _expected_args.length; } + /* Pre: isTestingArguments() + */ public boolean testArgument( int n, Object arg ) { return _expected_args[n].eval(arg); } public String describeArgument( int n ) { - return _expected_args[n].toString(); + if( _expected_args == null ) { + return "anything"; + } else { + return _expected_args[n].toString(); + } } public abstract Object eval( Object[] args ) throws Throwable; Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/Mock.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Mock.java 16 Oct 2002 12:24:23 -0000 1.4 +++ Mock.java 16 Oct 2002 12:56:21 -0000 1.5 @@ -158,6 +158,34 @@ _expectations_not_called.add(method); } + /** Set up calls to <var>method</var> to return <var>result</var>, + * but do not define any expectations upon arguments to those calls. + * Arguments of calls to <var>method</var> will be ignored. + * + * @param method + * The name of the method that will be called. + * @param result + * The result that will be returned from this call. Primitive types + * must be wrapped in the equivalent Java object, and will be unwrapped + * before being returned to the caller of the method. + */ + public void setupResult( String method, Object result ) { + expectReturn( method, null, result ); + } + + /** Set up calls to <var>method</var> to throw <var>exception</var>, + * but do not define any expectations upon arguments to those calls. + * Arguments of calls to <var>method</var> will be ignored. + * + * @param method + * The name of the method that will be called. + * @param exception + * The exception or error that will be thrown as a result of this call. + */ + public void setupThrow( String method, Throwable exception ) { + expectThrow( method, null, exception ); + } + /** Define an order between two calls. The method named * <var>subsequent_method</var> <em>must</em> be called after * the method namd <var>preceding_method</var>, otherwise an @@ -205,7 +233,9 @@ (ExpectedCall)_expectations.get(method_name); checkCallOrder( method_name ); - checkArguments( expected, args ); + if( expected.isTestingArguments() ) { + checkArguments( expected, args ); + } return expected.eval( args ); } else if( _strict ) { |
From: Nat P. <np...@us...> - 2002-10-16 12:56:24
|
Update of /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv21854/test/com/b13media/mock Modified Files: Test_Mock.java Log Message: Added setupResult and setupThrow methods that set up the behaviour of a method without defining expectations -- arguments are ignored. Index: Test_Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock/Test_Mock.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Test_Mock.java 14 Oct 2002 14:42:47 -0000 1.3 +++ Test_Mock.java 16 Oct 2002 12:56:21 -0000 1.4 @@ -299,6 +299,36 @@ _mock.verify(); } + public void testSetupResult() { + final String RESULT = "result"; + + _mock.setupResult( "objectTypes", RESULT ); + + assertEquals( RESULT, _interface.objectTypes(null) ); + assertEquals( RESULT, _interface.objectTypes(new Integer(0)) ); + } + + public void testSetupThrow() { + _mock.setupThrow( "objectTypes", new IllegalArgumentException() ); + + try { + _interface.objectTypes(null); + fail("expected IllegalArgumentException"); + } + catch( IllegalArgumentException ex ) { + // expected + } + + try { + _interface.objectTypes(new Integer(0)); + fail("expected IllegalArgumentException"); + } + catch( IllegalArgumentException ex ) { + // expected + } + } + + public void testNoErrorWhenOrderedMethodsCalledInCorrectOrder() { _mock.expectVoid( "first", Mock.NO_ARGS ); _mock.expectVoid( "second", Mock.NO_ARGS ); |
From: Nat P. <np...@us...> - 2002-10-16 12:24:27
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv10064/source/com/b13media/mock Modified Files: Mock.java Log Message: Removed erroneous javadoc comments Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock/Mock.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Mock.java 14 Oct 2002 14:42:47 -0000 1.3 +++ Mock.java 16 Oct 2002 12:24:23 -0000 1.4 @@ -94,8 +94,6 @@ * * @param call * An object describing the expected call and mocking its behaviour. - * @return - * The state of the mock object after the call as occurred. */ public void expect( ExpectedCall call ) { _expectations.put( call.getMethodName(), call ); @@ -114,8 +112,6 @@ * The result that will be returned from this call. Primitive types * must be wrapped in the equivalent Java object, and will be unwrapped * before being returned to the caller of the method. - * @return - * The state of the mock object after the call as occurred. */ public void expectReturn( String method, Predicate[] args, Object result ) { expect( new ExpectedReturn( method, args, result ) ); @@ -129,8 +125,6 @@ * An array of {@link com.b13media.mock.Predicate}s that specify the * epxected arguments of the method call. The length of the array defines * the expected arity of the method call. - * @return - * The state of the mock object after the call as occurred. */ public void expectVoid( String method, Predicate[] args ) { expect( new ExpectedReturn( method, args, null ) ); @@ -146,8 +140,6 @@ * the expected arity of the method call. * @param exception * The exception or error that will be thrown as a result of this call. - * @return - * The state of the mock object after the call as occurred. */ public void expectThrow( String method, Predicate[] args, Throwable exception ) |
From: Joe W. <joe...@us...> - 2002-10-15 19:15:28
|
Update of /cvsroot/mockobjects/nmock/src/NMock In directory usw-pr-cvs1:/tmp/cvs-serv21999/src/NMock Modified Files: Predicates.cs Log Message: Added IsCloseTo predicate, useful for testing real values within error range. Very original. Index: Predicates.cs =================================================================== RCS file: /cvsroot/mockobjects/nmock/src/NMock/Predicates.cs,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- Predicates.cs 6 Oct 2002 20:49:08 -0000 1.1.1.1 +++ Predicates.cs 15 Oct 2002 19:15:23 -0000 1.2 @@ -243,6 +243,32 @@ } } + public class IsCloseTo : IPredicate + { + + private double expected; + private double error; + + public IsCloseTo(double expected, double error) + { + this.expected = expected; + this.error = error; + } + + public bool eval(object val) + { + try + { + double actual = Convert.ToDouble(val); + return Math.Abs(actual - expected) <= error; + } + catch (FormatException) + { + return false; + } + } + } + public class Predicate : IPredicate { |
From: Joe W. <joe...@us...> - 2002-10-15 19:15:27
|
Update of /cvsroot/mockobjects/nmock/test/NMock In directory usw-pr-cvs1:/tmp/cvs-serv21999/test/NMock Modified Files: PredicatesTest.cs Log Message: Added IsCloseTo predicate, useful for testing real values within error range. Very original. Index: PredicatesTest.cs =================================================================== RCS file: /cvsroot/mockobjects/nmock/test/NMock/PredicatesTest.cs,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- PredicatesTest.cs 6 Oct 2002 20:49:09 -0000 1.1.1.1 +++ PredicatesTest.cs 15 Oct 2002 19:15:23 -0000 1.2 @@ -208,6 +208,32 @@ } [Test] + public void IsCloseTo() + { + p = new IsCloseTo(1.0, 0.5); + + Assertion.Assert(p.eval(1.0)); + Assertion.Assert(p.eval(0.5)); + Assertion.Assert(p.eval(1.5)); + + Assertion.Assert(p.eval(1)); + Assertion.Assert(p.eval(0.5f)); + Assertion.Assert(p.eval(new decimal(1.5))); + + Assertion.Assert(!p.eval(0.49)); + Assertion.Assert(!p.eval(1.51)); + Assertion.Assert(!p.eval(-1.0)); + + Assertion.Assert(p.eval("1.2")); + Assertion.Assert(!p.eval("0.2")); + Assertion.Assert(!p.eval("hello")); + + Assertion.Assert(!p.eval(null)); + Assertion.Assert(!p.eval(0)); + Assertion.Assert(!p.eval(0.0)); + } + + [Test] public void Delegate() { p = new Predicate(new Predicate.Method(myEval)); |
From: Nat P. <np...@us...> - 2002-10-15 17:25:17
|
Update of /cvsroot/mockobjects/nat/jmock/source/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv22343/source/com/b13media/mock Added Files: IsCloseTo.java Log Message: Added IsCloseTo predicate, useful for testing real values within error range --- NEW FILE: IsCloseTo.java --- /* Copyright (c) 2002 Nat Pryce. All rights reserved. * * Created on February 10, 2002, 11:35 PM */ package com.b13media.mock; /** Is the argument a number equal to a value within some range of acceptable * error? */ public class IsCloseTo implements Predicate { private double _error; private double _value; public IsCloseTo( double value, double error ) { _error = error; _value = value; } public boolean eval( Object arg ) { double arg_value = ((Number)arg).doubleValue(); return Math.abs( (arg_value - _value) ) <= _error; } public String toString() { return "a numeric value within " + _error + " of " + _value; } } |
From: Nat P. <np...@us...> - 2002-10-15 17:25:17
|
Update of /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock In directory usw-pr-cvs1:/tmp/cvs-serv22343/test/com/b13media/mock Modified Files: Test_Predicates.java Log Message: Added IsCloseTo predicate, useful for testing real values within error range Index: Test_Predicates.java =================================================================== RCS file: /cvsroot/mockobjects/nat/jmock/test/com/b13media/mock/Test_Predicates.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Test_Predicates.java 14 Oct 2002 18:01:16 -0000 1.3 +++ Test_Predicates.java 15 Oct 2002 17:25:14 -0000 1.4 @@ -153,4 +153,26 @@ assertTrue( !p.eval("hello, world") ); assertTrue( !p.eval("goodbye, world.") ); } + + public void testIsCloseTo() { + Predicate p = new IsCloseTo( 1.0, 0.5 ); + + assertTrue( p.eval( new Double(1.0) ) ); + assertTrue( p.eval( new Double(0.5) ) ); + assertTrue( p.eval( new Double(1.5) ) ); + + assertTrue( p.eval( new Float(1.0) ) ); + assertTrue( p.eval( new Integer(1) ) ); + + assertTrue( "number too large", !p.eval( new Double(2.0) ) ); + assertTrue( "number too small", !p.eval( new Double(0.0) ) ); + + try { + p.eval("wrong type"); + fail("ClassCastException expected for wrong type of argument"); + } + catch( ClassCastException ex ) { + // expected + } + } } |
From: Jeff M. <cus...@us...> - 2002-10-15 13:53:14
|
Update of /cvsroot/mockobjects/mockobjects-java In directory usw-pr-cvs1:/tmp/cvs-serv11423 Modified Files: make_mocks.py env.txt build.xml Log Message: Allow overiding of j2ee.jar location Index: make_mocks.py =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/make_mocks.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- make_mocks.py 15 Oct 2002 13:05:42 -0000 1.1 +++ make_mocks.py 15 Oct 2002 13:53:11 -0000 1.2 @@ -11,27 +11,27 @@ else: anthome='/opt/ant' -def ant(target, javahome): +def ante(target, javahome, options): ENV={ 'PATH': javahome + '/bin:' + anthome + '/bin:' + os.environ['PATH'], 'JAVA_HOME': javahome } - target = antcmd+' ' + target + target = antcmd+options+' ' + target print '###############################################' print ENV print '###############################################' os.spawnvpe(os.P_WAIT, antcmd, target.split(), ENV) print '###############################################' +def ant(target): + ante(target, os.environ['JAVA_HOME'], '') + def build(env): args = env.strip().split(':') - if os.path.isdir(args[2]): - print 'copying %s to lib' % args[2] - shutil.copyfile(args[2], libdir) - ant(args[0], args[1]) + ante(args[0], args[1], args[2]) -ant('clean', os.environ['JAVA_HOME']) +ant('clean') for env in file('env.txt').readlines(): build(env) Index: env.txt =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/env.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- env.txt 15 Oct 2002 13:05:43 -0000 1.1 +++ env.txt 15 Oct 2002 13:53:11 -0000 1.2 @@ -1,4 +1,4 @@ clean-compiled jar:/usr/java/j2sdk1.3.1: clean-compiled jar:/usr/java/j2sdk1.4.1: -clean-compiled jar:/usr/java/jdk1.3.1_01: -clean-compiled jar:/usr/java/jdk1.3.1_03: +clean-compiled jar:/usr/java/jdk1.3.1_01:-Dj2ee.lib=lib/j2ee.jar +clean-compiled jar:/usr/java/jdk1.3.1_03:-Dj2ee.lib=lib/j2ee.jar Index: build.xml =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/build.xml,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- build.xml 14 Oct 2002 23:00:17 -0000 1.25 +++ build.xml 15 Oct 2002 13:53:11 -0000 1.26 @@ -38,6 +38,7 @@ <property name="xdoc.dir" value="${doc.dir}/xdocs" /> <property name="skin.dir" value="${doc.dir}/skins" /> <property name="lib.dir" value="lib" /> + <property name="j2ee.lib" value="lib/j2ee.jar" /> </target> <target name="deliverable-names" depends="project-properties"> @@ -60,7 +61,9 @@ <path id="lib.classpath"> <fileset dir="${lib.dir}"> <include name="*.jar" /> + <exclude name="j2ee.jar" /> </fileset> + <pathelement location="${j2ee.lib}"/> </path> <available property="jdk.version" value="1.2" classname="java.lang.ThreadLocal" /> |
From: Jeff M. <je...@mk...> - 2002-10-15 13:07:49
|
I've just added a python version of this script. It's not finished to really tested, but it might be easier to maintain than the whole cygwin/unix thing. On Tue, 2002-10-15 at 00:10, Steve Freeman wrote: > Update of /cvsroot/mockobjects/mockobjects-java > In directory usw-pr-cvs1:/tmp/cvs-serv14200 > > Added Files: > make_mocks.sh > Log Message: > added helper build script > > --- NEW FILE: make_mocks.sh --- > #!/usr/bin/bash > # helper script for building all the combinations > # copy it somewhere it won't be overwritten and set the paths > # to those on your machine > # This version setup for cygwin on my machine > # - smgf > > > export ANT_HOME="D:\java\ant" > > cd mockobjects-java > > rm -f lib/junit.jar > cp /cygdrive/d/java/junit/3.7/junit.jar lib > > export PATH=$ANT_HOME/bin:$PATH > ant.bat clean > > ( > export JAVA_HOME="D:\java\jdk\1.3.1_05" > export PATH=$JAVA_HOME/bin:$PATH > > echo "+++++++++ JAVA 1.3 +++++++++++++" > > echo " +++++ JDK 1.2 +++++" > rm -f lib/j2ee.jar > cp /cygdrive/d/java/j2sdkee1.2.1//lib/j2ee.jar lib > ant.bat clean-compiled jar > > echo " +++++ JDK 1.3 +++++" > rm -f lib/j2ee.jar > cp /cygdrive/d/java/j2sdkee1.3.1/lib/j2ee.jar lib > ant.bat clean-compiled jar > ) > > ( > export JAVA_HOME="D:\java\jdk\1.4.1" > export PATH=$JAVA_HOME/bin:$PATH > > echo "+++++++++ JAVA 1.4 +++++++++++++" > > echo " +++++ JDK 1.2 +++++" > rm -f lib/j2ee.jar > cp /cygdrive/d/java/j2sdkee1.2.1//lib/j2ee.jar lib > ant.bat clean-compiled jar > > echo " +++++ JDK 1.3 +++++" > rm -f lib/j2ee.jar > cp /cygdrive/d/java/j2sdkee1.3.1/lib/j2ee.jar lib > ant.bat clean-compiled jar > ) > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Mockobjects-java-dev mailing list > Moc...@li... > https://lists.sourceforge.net/lists/listinfo/mockobjects-java-dev -- Jeff Martin <je...@mk...> mkodo |
From: Jeff M. <cus...@us...> - 2002-10-15 13:05:49
|
Update of /cvsroot/mockobjects/mockobjects-java In directory usw-pr-cvs1:/tmp/cvs-serv25482 Added Files: make_mocks.py env.txt Log Message: Added python script for testing multiple build enviroments --- NEW FILE: make_mocks.py --- #!/usr/bin/python2 import os, shutil libdir = 'lib' junitlib = libdir+'/junit.jar' antcmd = 'ant' if os.environ.has_key('ANT_HOME'): anthome=os.environ('ANT_HOME') else: anthome='/opt/ant' def ant(target, javahome): ENV={ 'PATH': javahome + '/bin:' + anthome + '/bin:' + os.environ['PATH'], 'JAVA_HOME': javahome } target = antcmd+' ' + target print '###############################################' print ENV print '###############################################' os.spawnvpe(os.P_WAIT, antcmd, target.split(), ENV) print '###############################################' def build(env): args = env.strip().split(':') if os.path.isdir(args[2]): print 'copying %s to lib' % args[2] shutil.copyfile(args[2], libdir) ant(args[0], args[1]) ant('clean', os.environ['JAVA_HOME']) for env in file('env.txt').readlines(): build(env) --- NEW FILE: env.txt --- clean-compiled jar:/usr/java/j2sdk1.3.1: clean-compiled jar:/usr/java/j2sdk1.4.1: clean-compiled jar:/usr/java/jdk1.3.1_01: clean-compiled jar:/usr/java/jdk1.3.1_03: |