You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(134) |
Sep
(52) |
Oct
(13) |
Nov
(342) |
Dec
(163) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(44) |
Feb
(62) |
Mar
(158) |
Apr
(38) |
May
(70) |
Jun
(58) |
Jul
(104) |
Aug
(207) |
Sep
(83) |
Oct
(122) |
Nov
(23) |
Dec
(49) |
2004 |
Jan
(119) |
Feb
(132) |
Mar
(192) |
Apr
(140) |
May
(77) |
Jun
(74) |
Jul
(201) |
Aug
(63) |
Sep
(102) |
Oct
(70) |
Nov
(173) |
Dec
(78) |
2005 |
Jan
(174) |
Feb
(197) |
Mar
(105) |
Apr
(59) |
May
(77) |
Jun
(43) |
Jul
(21) |
Aug
(18) |
Sep
(47) |
Oct
(37) |
Nov
(74) |
Dec
(50) |
2006 |
Jan
(44) |
Feb
(19) |
Mar
(32) |
Apr
(24) |
May
(31) |
Jun
(55) |
Jul
(138) |
Aug
(28) |
Sep
(12) |
Oct
(41) |
Nov
(58) |
Dec
(24) |
2007 |
Jan
(28) |
Feb
(14) |
Mar
(10) |
Apr
(68) |
May
(30) |
Jun
(26) |
Jul
(18) |
Aug
(63) |
Sep
(19) |
Oct
(29) |
Nov
(20) |
Dec
(10) |
2008 |
Jan
(38) |
Feb
(7) |
Mar
(37) |
Apr
(120) |
May
(41) |
Jun
(36) |
Jul
(39) |
Aug
(24) |
Sep
(28) |
Oct
(30) |
Nov
(36) |
Dec
(75) |
2009 |
Jan
(46) |
Feb
(22) |
Mar
(50) |
Apr
(70) |
May
(134) |
Jun
(105) |
Jul
(75) |
Aug
(34) |
Sep
(38) |
Oct
(34) |
Nov
(19) |
Dec
(20) |
2010 |
Jan
(11) |
Feb
(20) |
Mar
(65) |
Apr
(83) |
May
(104) |
Jun
(73) |
Jul
(78) |
Aug
(57) |
Sep
(43) |
Oct
(35) |
Nov
(9) |
Dec
(4) |
2011 |
Jan
(21) |
Feb
(11) |
Mar
(18) |
Apr
(10) |
May
(18) |
Jun
(15) |
Jul
(48) |
Aug
(25) |
Sep
(17) |
Oct
(45) |
Nov
(15) |
Dec
(12) |
2012 |
Jan
(21) |
Feb
(9) |
Mar
(12) |
Apr
(9) |
May
(9) |
Jun
(5) |
Jul
(1) |
Aug
(10) |
Sep
(12) |
Oct
(1) |
Nov
(28) |
Dec
(5) |
2013 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2015 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2016 |
Jan
(2) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
Update of /cvsroot/java-game-lib/LWJGL/examples/data In directory sc8-pr-cvs1:/tmp/cvs-serv936/data Added Files: bumps.png crate.png cube.png font.png glass.png mud.png nehe.png star.png tim.png world.txt Log Message: Lots of changes. Everything is now real time so ALL animations should run at the same speed reguardless of frame rate. Keyboard input now uses only the Keyboard.pull() method. Also changed the class names for everything. FirstPersonWorld now limits how much you can rotate the camera up or down. Plus some other small changes I cant think of ATM =) --- NEW FILE: bumps.png --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/data/bumps.png PNG ¡`Ðò-¦oö5L × Ìv.wö5A8ù=IÁþø?æ øVxb˹<ªgýÀ=-ÐYÅO.j&µ.@) è©HÝqJã-ҽѡ¬]|Vʪ×(ýàV"¡ýbºi Ô8Íd "T| %³1Ï%¿ßJä%JyæÒ¡Ë0hR¾¤òa)PGD)þÝÀmߢÀJäÜÒ À±C:£&?sD*î×amêÎ *Y GX¬ñ@¶ÇUZ¢W ßUØ`ØWî78«Õ"éÝx¼hâý˯ÂJ:òº¨¨ãÁ1uN{+ ×9Ñb¡uV¾¹¿:§ïLÿPX.; Ã@?ÒD¡ÑªVH¬øÿ%ÄS DÕ¤}¥qüÈéÎ+_Û:÷x4·ÂPú Ñ\BôÚX§pÉ-½ÇáFÚtÉ=m9sÂx¨+» þ¹PmÀtP¶ïÛ?+ÿjoOïT<Õ9êN²¶ëºHéÖü°'Üï¼O'-eÐâ,£B5S·7Íñ~v=¯Òªw#ïJôÁÒÑðoô Ká¬B-¡{`qZmÕ¢Öëã¡@±rËùuÄ ¢2£L _`f=Ä ãíåÕ!ø¾ß©R°ÜbÞhBiqNÎXQFTä Ý»Z SòÆç0|C¾Æôª¢Ï ÿà°Lvb jwOfA ¸pÊ!ñÿÿÁ C iø¡¸ ¨Å@ Ë`'¢}ÓvÚJ¢De¡b0®Üø~½&$Ä "i§ïyMúïÞ{ôñMá®ý ~`èMFà=»RÙº/¥ÆÁêOÁÀµò©±ÝÃØtgn;7*Ô ¥YÁªv¨íKJò}pwÁbGLÕû"¬ aåÆ&¥oÁ±i ÛADikųº¿8ªö1a«V(¥Öÿ¶X2mðl[ÛR³}f'ܽÚ*Zu´lã±& #³ªr¼6 ª¢ðwÌÖÍǤ㲠ÓÜùgGOÌ'õCek,¹w ! Ey&x'ä¢À0 £kbY2õúí7PèÉúvÜâáú¾qp=/Â^äbN?ÀþÿzKd-æL>ºÃáÂ7aê½äíÕ»×Á¥Â °nL×4ú&0\]÷z[ 3yiÂȹZ ¦õµú¡nù¶àÒÑØ¾þY|ÆiT6 #ê¨V)wA®üKM\úÀÃÛ¹ëÚ¤ò±TO$å,:;rö*Q &'ËØ¿èôÞýJt.éC$±÷Òµc %uá tv$`9íJµdó^$·yñåÍ0VýjüY^ET¸{ÜdèáHðI¡þ¬Ç ¢[qõÄÖ¢êhICkóç E;Psí>JÝIbDù±q7«¡{úÿK©c`(BìÙ(û\=[2gâaÄ`ïÛßU]¶öªaÃJoç®<ê¢è¡Jd3 ½N1°"ºèù¥0Ú{à7&Y#(Ù²ZBËÓ&ç¯ùÔÁké§8jD9Å(Q'Üý¸!ô,QWT¦óu'±ÖíPI@'!ÄJ°jx)Ø{É' fÎ"!þ @q¹ë4QÔ^?6 Ñ QÐðü+@ F ´!²~ÌxlÖ%Ëwæ{Õ4Z6-ijߦr@Ø`ß¡°Í¸MøÊhGhBÜFZaÞãu!¥Cþ`¿ôøÕað]È áH¥3Ëý^÷²fÁµ Ú¨ä[H\)¹.þ#d×;ZðE|0PÎ¥ñ»ì¦2ßu§êKe?)}I;$à¼8+ý×}\½Á·ÜÚ Âáj~4ÒÕó«ªY$ZÛñ0sÏ.µR)@ù a`hÉxç÷³È3ÓUõró¶èë{S9UiÞlKâRÖFæ£Á¯ÏA°J2<DÓäçÏq«²+BëH@¡±iÞ&Æþ @q¹ì$Q´ªú1/Ð'c\ÈFâÿï\ø(QJÄ%ÃÌô«,?¡««î=GM!Û*GÒ¥@+($m¯k¶^;2¦RºAå3ÝÏ:· »NR/ZTe3Ù6Æ\ãYñO¾ÑÆPKD=Ý RqÑ*³#-#þìÀ|#b³ç7ÇÂØ½|»$#º| zR}¿bkªO46È·§µwÍ]ã÷2wÉLPÚì(N.Rß®»®)@ÆÜ:/`tTÎv!W(ÜQ:oB2ùÒ·R{FɧÂ1KI$ø«ÌV@Ñ[×ÿ0/}|G,v^_tÝ0ùIùÅ·|üª"y;$¦syô©E,Q@E4Tk¨ÅÉþ ÀÙô$a¸Ón»Å5M Gï^ÿ<s1ñ#(Aýh;ã»þ&íL;ïó4C¹ñÎjEÈý×ÍÍ<ñådÜ[\ÙÎ- «ÉFG5¡ö&{ððÀwºû-GÀ¯úè³Ì< ¶g5§^n}ìd Ѭ<Aú'æü éz?UÞÕw$3+KÂ[H<íĻ礣|]}y~â(é\S :[ö^^ç¦ÃHJgÓ4sÞ÷|5_ý}ÔÍ ëePXK!qj×;»5ÝçXî7y#ZÌS©{6É/'³ä³ÜÑ¥DÌM"\Kszøý®à2t!7ÔºQ gÉk.ÿsii ¢ðÍkfl,BAÁ ]þÿÿª¸j±¶´Ò©bg¦Íäq¯gö!nÎÉ÷Å\Ý*Jø ÷÷wó}ýÑc°©Ñ`gÁÝ(s ¶ºº`ºRsì¼_ö@1Q¦Éé¤Àüd]mǵÐÝß)wZ7ÊìYÕ1ïÞêÞbZJ5hù}6ý³GÍ7¾åJþTþì-ìwø´ÅÖ±¦Ð¥ âÆQ9 §Â²$¬¼\«ÑèõÒÜVã6¤CûDùHéG f£ /UQ°A½vPÒ^!.é ±¡3°Ø.uç"ðgÄ´ß¿I«ºë|ÞpÕrÏ ÝXi+ ÜYФiÉá _G稫¿-d6^'>wÚ¤Ù£ßÅV¤ ÊHASÌrw=ðÝÖ´Aá EPQAªRG!ÚÑ£úC½êAð&¢T¤bZI²Ù8ýÃÌ»ó<;`á*¦×LÛDõÃNeYö®4¤l£BF´Á®T¹8Îuy?½%Z¥t.çAS=¹Òæ6%u¿B°*&½ú®Ê>'ÎÛÒuºé<V^ÆÈࣧ?ª r,b¦|(² W~¸oE$]ÂÛO¬û¨P#¨íù¢Ox1ø±¾) [Ah|@aøÓZÎôº?§üdaY[oçnJæÅ©í)¾@cjÑÅÇ!½Løåk.:D3 .ºñ \¹õmõĵ¸´bm j¶¡i.ç6N``63ßó=q{íÌÄ»1²7fMõ+ä¸Üµû £Diʱ»>~Ù¼-Û¿çTØ1çî<O[»fY&V^zO4 ØkLWÚÈ Î5ãdN¢®¨aàû1eòÈhËjÎq`Jdøâ÷¯(O&ýòue!ä ´¼t0S-²£æ>~ìë»Ñè¾?~þÚÝÜN¾_¦OÛæþq8ÎîªÓY^Ãn;«| _GÇ/PSÔ\ÇAð]p¼Y3i]l±3ík!M¿Ht3¬ÀÏi+UY64Vü¦}9 bþVA£Gø ,O%öï·'\ö£+; PsPûòô¾F4ÌéÑ¿Ùdà_9þÊS®¿+~Õ~¦h+ò'\î1¡ÑïÆõ~Ãw]x[}¹Ü6õ§óÒ×¢Þª¶¢sõÂ4òè|-Τ2¾IÂØlSÍj%ÓòT<Yê9;ÅÔ°´üló§óE;Wú©í¹îìÕÙÅÉ ÷/ëÇÕGd*;°¢:äMD §9ÈJ>ÂÛ³m&#wоÐ04µËcã»wí¿ ¤ñ$Á6mÉ+®¿@³Ú«½ç®Ôê®b³Fm@üÙ¶agoë hÕ7eOçpÛ§pÅ;yAòà-¸!ÜôⲬJòc¦Îg!¼1Ñ-©J0&Ry%:»æ®£^Ez_Us °+Àx2_¿ÖpSdUîÅ Pºnªw°2ï2;ìnhKs+Ùµbr<}L³³`Ð>©~[ú"ã|QBÍ©©ÁéP]Qjý«&¹QbEÖÕ^8·Jn¿H ÷ëVÊåtºÕúÉÀ©lKJ¹F´ÇHO Ñn5¤îÎyÅÈ:V; rÙ¼ËóMºÏË82a zÄ¡-m)TH¨-,ذG¯ñHE ^m¡¤/ª´ÏØÜ°÷Æ9sÏHO¼t*ײ®Ç* ßv¦ABÄMX¹Ö/`L|ßÕãÂ0$(Ã80ÓrÛë)OÐäôþ¯§Ù@â$Ë!OÃRÓɧè«z)¦+=IÄørYÂàdîmqgO³áÍÁLÙÝ¢Û/Z7Á7 J,ËÀå½ã».c,;ߪÔ@) @§Z¿b8(c 5úò+¥§âúX¤áÛ/x4¥pÕ^óyÛ{fÉácï;×-´Ð¶yÅÚK]ígýb¬yç» é?Âq½2/ѳjáöLýÀÿ(IÏľ|]P[e¦É#sÚ87´gOç#¦áÝN}$Âö_gqµ¹+²g«^ú3sà å2ϸw¨¤y môß)(ÌÑuìJ Æî ½z.7³H²E¦V>ÓÞ°ÃqL:NN¤ik¼ëog+ø*զͥ»D9¶Ùb 8 X2:nâmCâ!Fz¥j;wøhá¡ãNý¾0xm±oÍÍìpØRËï§mÊ¢aWíÞ 3L|ö&ÜÆ¤yCsøÖ N¨r¥Qü*&ºIuÍe½øÿ_"¥ÖȮ구^<[¸Î¼ÝéP.¿jÎ1w,®¸EI0ݲ4J¨CÂJ¦¬úv § 5vj*-1Ñ&ÕVÄ\%Prµnô9E?bHÈ Õ¯ Ô-<£«0¨ã¸ã ¸&Æãvõßd¡ÇGÀ¯*SS° Ovï xuFÖjh8]fKt§r AiØ.yJ|¾ä"B°Q-¬Ý J=â7P|¡ º ØKNS%;Þ $6®Lª¢´oÍgW ½ÍåÈÅÇs>?'ÉÔ_t`|¬lÁ"!è; \sôdÁÃxOø wcIñ¤é\ã/(ì'I ë9k¢òÉ¡ë7'ÿphv; AíþÖ¨(o1&&ÆÄKÞÜÐ5D´£T*mwgwf]|¹ûfÎù2â8hOÞES²Z¦õ®¬V !AWl@KËØ±`+*T*hÔª¢mÚd2ã1WÛã÷lëáèT)]q$¨%CU>ð{maYz]X+ï åÌ^ û »YræìØ ÿzÚ#}VH$n]ÏHÎÅLaïhS0C¡-È[`ró ÂÒ»}©zFgÍ]zSÈxA8Y×ajRY÷©;ÿ]óÌCþs§D'iMkÚ` q Bµ*ê&ܹ¡°Ì?îÕÀ½¯©;µÉA'è."ÙF?onS¼ÓEµ Pûòå @Ýø×-¨ÙÊo¬{aî1ùp-ê«vq^r6ìÕ¹·Ç½·Ùüé7¤hdÛ_¡J=$=è^ªâÄJ°±Ó ·ôynÍÑfåcýqÝ.9L¨4º§4×Àñ :D1 ê,£¨+ÃJV³5ÙCøIÜE¤(|Zpëâ¼:}Ùw[¦6ÑÔ*XüÍÀæ»ÏTðÞq9¨gãÇñìÒ 0Gyòþô%¨&¤)³0æ4ÍÍ]¤õEÆ5ñ&*¸0(¥,[çZ9î¢ÙQ:úãFÒ=BnæxadEþ²Ýxµ/Ïl¨þ\=6¦¬¶¬ê}û6&Ò/âoJu¯tLÿ @¡Ùó$ax¿nIRIg£$ÊÄÊÞ?Á¶¶@càBãDð±7;³ël»Õf2yß÷- ®pR½M»4ºòLR¿Zo*¡R]m§ |ÄVíü1]¨{IÛ,î k¬t,EøN'í©«Òïtl(MøéhC #³®¸x¡ðT÷¾#Ó£¨8ajÝáÂ2aE®9Grì@2[³´a×â&èQngñ$^xýCÎs¦n½äEh¢½-J 0¬|Èø¯Å æ`´#øä íVÒ·9¶ë'Q¦ßëJdÌs˲v ôó.ð²?OÆ^ÒÃ_n~À`¢ÓÜìòUrDNwø¶ûBã¢,® µÂ"À8ªÝWå.è±_Ùâqo#Hã´ ò¯¬ý¦ ÚµßÉiÃ0L¾àúdèÃ6å7HG[zçjÿkrs[=¤4³xävàßÇÂ× ¸ºÄz¶rÓùÝ å<#ÃÛ¾öåÂJÒ0Ï^gÓ·Ù¤jµwæ}ÿ Ðì~¡(~ÛÛvmM3 Ñ1~ýÿ/j|0Ѩ * ²~x÷ܶ9÷ôüÒ«7D*[Ã09Î]ÒÒw9Ý â .ªµuMÛf?f| ä®cÎö@ÄS`Mf¨oÁvPHÊ¿ aºÇ²äbéä|å)¹MÚjÖô!ÉèLÚgÐ} 6$_S©Ùß/#¿]Ë}ÅF0FNOðéI+>¬«æÑÆóNölñ»®N·t_꺾"m"´+¼¤ñ"лö~ÁÈãóÕÃ$GñÓjCg»D<ó¤f<á!¶H"|«WÖ½ö£©rôI¤sLn¢¨,ÜVÓ,íY/~_ڻʼæÝ¸oZòÛõ±ÒMP$CëÍ¿ DÀu¨zBq&xÎh Õf¶Kû2è¢R_-/o`ÚEöiIo;¶QSMI¡g@7É¿Ëeß+ÓÏ~E\©ÀÀ#/é¯Böºµ~j?? -beÃEefѧ¥#C¦)¨©|²_zG4UÅ õWÉo©ò "=5 ùô2h $Z=26îX^ºLÖcúlÝâ)*ïv~D;bËiƨÚÄVMÐ¥(h3s §§ò÷âTg*+[½ÔgwkÌÛÊ«06ÂR#o£ArÓÏÒÅùÏ]ÿ/c=ï½ë´bÀNþ Ør(:vl'qZ¤fD¥+ÛSp$NÀ ²`´J¦©í±Íø¶dkþÆ3~xrÙê×Ï=h§Á½¹ðK9ÑרôáxKéMíÍßúáqT[ºRð¹|GîQV;{ S:¸:g6KÒµmÿPh-- Ä@xÝ$-¸»õÁ¢à/èüÛ¢WÑ£'±Øµh[ê>²'÷dä{0_.dTTö,®ä¢à»ÚVßU6;îcn7*g"!´µv!^ÜE&¥VB( ã©ÐöÚê·HÒÊCGJÌÁ ¬3ïÀºïgµ/ú8÷GAvâqÆýǶu?÷¾RÍóö[Ôº0óOÚÁXÑÏìGÛ=ííýQó·ZÉâøÜúòET5C 4Íû_ÅSV¤°2û¸NÑàEy¿â¢ü°%e´Zê¦91ªTa¼Õôúc*"¤ãd¸èbæÐP;1ÞÖÉ3ß"u SMYÖVé]ºh<1ú@q àCWþ@±Ùì4ÃpÜNRº® ´/Ð.páÈ$ÞWã@áÑ}°1µË¶©Ã¿/ÇlÿþIlV> ÏB}Lt&nªû=§b®z½xisçúYéãvâ'87¥±EX8x+£rrñß¾\{?sh-kîk~u¿Iãϲ°d¥`y¤ÚèHJúJøé·ÚC`k5&7já²ÎòP´·¸z*aëév¿¬ô`v4N°¢õM¥xän¾º<9º>>f?_Àö.8ÄH=ëøKéD¹¨½+>&oY]-LôP7ÚÉ@TJýýÙIBÉPÑyûaÚP4°ûr©»CR#ÍèÈ;`'w,βiñÚ)v:±id SHé$ZùS×Û¨ø8 N#ÇGS,20Òò¨Nu¯ô¿ þ AóJlçâë{dÊݹ+ÜiÚNFdmß>"=ÚXÞ(¬ DßÇ¿|í¬.q\:ÏÔ¥°z$2H J462;®¡|#/-;Kãb¨À$yq{IëlÍLÜæt pAÑÃ*\ÆjÀ*Æ#¤Û1ì~xFèVQÜ*2ý°<¥nÒLZFêßNÿ ÏýMoÒ6Mmk¥]àNp¥n×gA\Ré¦`¡Ø&Éýsî+Ìç|çÞ>Tañ_g/#~ 6Û]cIP U£9º|B~ nÚgCoKÏ>êð7?"¢-i[ÊÈ.U¾t3Çß<3:û¢·X qq)eñÈ븣N;c[¢¬Wl[ZÿÀ±´4Q¸÷ééI02`Æ QbL1^<Áÿ+xó¨àBP,³t÷tÛíNu*^½W| ¯bÏÂl[ÜX6h^T §"k8ÀdÀ¤]Kö©)´¥e¬0´°xnðÖ+i@ñg#gþ¸`ÓRöU~ÖJ#TñùOw¹j7ûLdBzW8U1-DþßRÈ\ro"ëaPU§©÷"_º4Dáeì¡ÌGÝ =TòRÄÁ<¾:æ<R÷×ùKégO1éAÂHfi]s·¡«À§l®|Ü"ìXÜÅWÀS&ÐÐFÒ¡+5¥°ôÍ.+ðà_ î¬ÉWúj¡ZìCuVFÊ߬ßêöµiç°Ué̩ȲàOÆ#ãQ4*ur:Ëñ¡ÜâÍ>Òº %á*%¨À:sOâZB1(×@"ÐÖª|vÅ*ÇeãÁùU"Ñ£ÈEa¯oÂïQç4U¡Lá þ_ :u~Z@/ÅsûYV -2^ËbÅ\Ì~çðAáO ¿¿Ú£cêb÷ï¼F9ÅPáÝ?88 W¯³$q2Ĩ(.(|<y÷èsù Oä["÷Ag Zâbª×ªäPGÿ`½j´[ºîæ}bº¢-Q(°À÷uÚ§:=8Þ¬ò¶ÊÏC¶q27ÇoN'×½¸{ÿýèòW¢Ü É0ÕÍS!bâÙRºniü#WFhÑ{8sHp½- ÿ èñËa\ФhaQ寽ðݮ«ñËÞl?GWºÖæEHEÌl (δ¦[YUsí2ãPÁÑÀBÐS¿;ì\dGdek£ñNr{ß/¿ Ä V ½ßd9;¡ôBDÂÒ kJÔúa4±6èí.# !ÌÚ5+ôÚ¢þ @Áµì4A{ãG&©¶*R¡©ª # $Î|߯ÏÀp 'À%MZ'ñ²þ bÛ¥n¾8¬ªæ6`ÀTÙÏFZmNMOý2¬¥TÚi!8`¾¬ÃÔç:òçè¿©+h]JôRëI¡q¡ú%HØÊV«Z4`ÞâL©?(6·b ·Óv·^hW.ôÂðÊçÖø<Æ ñM:èM~0ÒL»pä°¦JoHaåxÛ!Q[×Içsë(YÞÖÞÑ]'.ªfíbÅõg[¿§ñE§³¯ª1ö 5¡dÝúf·½Â®LâJÚæY_®ÖëÇ¡öðì(ó¥5%Íä¸iI¿[ÁçÎM c4zY³Ù¾\y¶Çp¦sÄE¦#þF(Þ4fùÜWÛþï~x4Ñ#B½¥++À³~ÃE¼ qKB¥8ÜùC| êÄûýVåmç|A\Ôcl=í0út0 8ÖÀÍ ç¯òvj6ÃîÕ")õ1¿Æ]¡Ë<,˼±9O¾¨Ã0zvö½#f\?¤i¤ |ÒÍT%j«æ-ì8l:¥ r°ÜÁÃO[ç±"É´1JìnÄE[Í[«Ä|R$Køi ôU÷=Æü«ÙÂsD;¹Zª5*YòÞB%wg¬¹vÁäéô(Ü;ó !ÞÙ®:O- Ã5²%íÈ8Ú)±ó9ÍñhS*X-fóD±÷z»ÍNPP9<ÁPÂU}zw£ÉJµdýÿæ¶§±ýªóY¢Àö»T4Pqmí:ÆVwÀDZÓR>nêop )§Ýï8Õl¤Ú/ëfI¢ Kjο¥øìqáOÙâJÑÂ6VÎ9H Á>¸LôË|Ó!¸þ@=4 µ d>]0îwî¹í©q°³6¼0sÆ]Åù61fóé§8LiÍ©ë¢Ðúþ àÜya ùYR3}$,¹RËsäÊjMâ(¸a :GiZÁ[ÎÀA¸álPJA¢Q©ª ù9ÉØÃ̼߼ñÌ{æQ©Ë´8µQTsá¢nÑéw½s5!æõÉå;}m¶ýÐü¾äeãü's/öHMDe'ôÕÍ<}#ÛÕýÕôÄÿ5\'_µõWüÊPä;½¸`x0pêlvþ\öèÐkDØs¹p bÈÁ¸;FikmäKY27GìjżEov ù!-öÇÀGE´Pæ6Äõ.ÀÙļ:W¹8Éfäëaü ø©êµg¥ÕíÆ!\ì½X{1#B$&ÛvÔ°ÇÀ¥w¬ _b³íº2p·7¿¥l¨ð(ç+«µ³û/õ8âòÉ'ɾÚî£1F\'Éët4À0±¦W ÷ζv*`¥{"9jQ½w\xzc4$Ñ(L:s" 9;á8ËôÆt@úë4â°wS^½3·'MÃL®"aX=¿ RÝ'zt<zò4y)s³;DróÖÊP`dØÊ±åòx,kCÅ·(+¢ÿPp-+ Qtf2$4AkAApÓnÄ ]øGþþ¸Ò+¡ µ¶iÓÌ#ñÎÌb{÷Þ3tÝEGbz¤tKDÇÌT,¶[Ë8*y>AÝøO¹ã3`6´Úäó8fNÝþ8ËòbUKÌz@6H%WÜ*|Ïj @?ÌÈ|Øu:kºV¯{Wvâ£ïH¾¦Gúô)ãÖÎ4¸*ø¬Þ¨ö&F£ü3[fg´´:¼zÎè²E/ºÎ§¡Z+ujÕäzÉÓwÆÌ7õGåpºWIxÕèMÙ<ÓL!Ke¬ûuaªü§Õó¡^x'Ô[$}ÔxÂxVíî$ÎôL\mbµ[ç+uHòäËG1rÿppv; Ä@îl·,»! câW¾oìcø d×KÌÓÓ£réìç½ ¬B ùWwÓþ@Á®4CQ87IÓvsÎn²!øø¸¾¿Eð>À¦ 6ÙÜÚզɽñæBÂ9çKrn¼FeèY ²`jë}We±èù òQ´g,Mmt²iùÀz#²àËDò75ærRÜÖs ·ãSCzn̸U¥4P@½<j¿®»É'ã'\ú´þ׳$Ç|t«ÕmÿøÔ®Klß0ÝïÌ/~»`bE5KÌWD¿bÒÝOªÀè$Æf6¯Ô@âL´%sLu8GÎÅ÷QBÙyì¥Î´NYáiÛ\¸ºw÷]x p-ýR¥¦ä HlMLBr\¥b©ÖRÖ-úѸ¶§èõ¬a§8â4$%0ÖU9j4:Ö}TBþ@ÁÙ4Q8dÍ®i-*hA/z!øþOá E@´ÕVkí¦¿'&3ç;äd´¨õñÀ8ÝepIbÜe°cúâüãTjPÕwrO\ ÷[9øº×X¶ý{@mMrÍÂrº"õ!T[¢ñzµbi O£¹r¶M³(é¸îÐÊ££ØoÖv|±Þ¼ è¥VRF81Aÿppö8 Ä@öÄ^/Í ( ¡¡ OÁ8' "¤ABH«¬DÿÍnàç÷ÉöSÇÑ6 äp;89ETÔÂXgaó=WÌYyÌ0gÐâl©vr+ã{¿n8eG¸<8\ ré©w2ùÔg®rî Øw£XÎá'Ù·Ä^«Q!¶2º¢´ÔñÝ`ÑÄ7ÎØ×f4æÕ;NæcMkX B9¢KApÚÅí?î2|ðÛ§ZÉkki¼Á9/å Ë|[ TÃ9+Öø'sÆ÷àSA¢ÝE«r þ(43\§1 ¸®ô²a.ò«º4ì·6,íV#ïa¦Áî0¾* 7QFøäXèÆ°"ÚÂØ[7öUAP%=j'ÙL$<³~ÔÒ)ô0Wý«éi¡Nº¬S¡BÀÄ3nøÿ7nHûB@Ƕn0²6vÌó5(±üñe?Ý'VÐu6s{ÕS¥?Èzb½ÿ$z<?»$ZuqN£ú Ô/±=¬:úR:ÉcA¹&ª²L~*î yeÉêûc }]Eàiám!g(ò&~!Öþ«ûþ @mGG¦¹Ýì0©°å¸6õ'àÛ¾f¡ÇhÃo7Dîïå¸KÇÎô °ÃµlkYÐÊ>Ï^^÷¤ã-MË_Sº+EoßæKÔrÌÏT+EhÏØØ(aºU~ðá©(ïóBc× ýe6ªmZVë¢Ý[m#Îß:BØûhL°6©¶u¦RtTr´k°aulåPéÁè¡´êÌñâ;×Ôà>&È2¢®1]nKÿ<=¿ªågJ3¯/+¢±Ð¥®åÜ6lúóÌ.¨V¸\$h´Ï:ë0ýŶÊúã/,îl¤êÓ]#æÌðeá_×5bö°óV7íFõtn*ÞJý4kp@ôÊ´Ý%à~ròh÷nòè£üðÀGV"6æ%×#ánËð4ÔjZð¹EÒ¼¿r¼Ðô/ ÅQ&R*j.ÀѸGà4H( NL<Åc~sÞ¼÷é×ÌûÙLÊ!óZÔK8Ð1v:SÊv<Àt ;¹ªûkÜ;kmV¤¼;üÓ¥aôlõU¶¨H=Ò÷§Ä»5øC¶ÂÄ(ÓCåì{ñáè #ñ¢hH»ÂþêsG"b,hµ(x.Iöú£¯×õÏÁ»ñVÊHLK ë\óµ\ðû,ûoëÜnúÚ¶úÁØÄ&´Qk^+ ¦D8ó6g¹èQ.+UDuX3+ Û%²98e"8cn]è{SSß)סxÔt½ÐÙ{ó.<¡jµ+?WËc K´iøSWþ8«K]¡Ê¬´UJÖþ @Á¹4CQ4·ÉLÒNl¢ÕR}âÿìGø P°E¼R/í4ÍíÄ3?òµ×æ$áRð½7Ï\Ömþ{ß Õë§ ±\øI$jûÖÃ&ù¤CM® ©! ÐþBZZ¡|Å[Wßi¤»A壮þÖFZÊÒª6Umç6HÇPÎ,gb¢k\¯Þ~\ÝOq-ÂÔ ò7S°íK[@V2'2 p PîeÍ®òÝ]u\;ÌR ¤]@¾ÕpÚÁf£»Ô[ç#õiMYÉýãX2³»¹¤.úH4ä¿PiùòÜgG#m¿bÎ~g nÌlí¦AÜÒ~Dj[Ý´5ª9¼þ¹=ïê¨1vSXf.N×7·ÅÃãnß´ÚbtôÅCq\ÅüÜ+ûéÅ´àÿÔ"âU¿,c¨<^®(Y÷AúQ¤sC¼bÊ1±Ðóv,{ÙáÌÚ¼QOÎORBq©lV°FhPén%¥é_ çíigAYh01<ñ |YV®])1Á$(0\fzÖ¿îôv.ß¶§ m¬hã])goù*ºà¶¿)¢E÷">ktAjcÝ£EüÖŸ޳z"qIå{°kr¦D^h¥1ËÞÈ6¢yÑ«\¥f¢%ExÖäÒH°VïøÓHݪgî\)1ò|Nü@ç6ÿñ@ì¤@,ÝExÛ-ç>|$p»Ys.3uqCNúeû;?U[CÃès©ÑV®ºå}~xiÁbjÌi¢eOê]*F}×aå.t?¾Õ*åbKXÐM8ù4}ÿK,ð&×AÞ7íɱIPØÞCR¨-è±GSOþàèjS"hfÒv¿°¸+*ð ÞvOáaQü£¬j·Ð¦ùôÍþM ï½a2)èÀ@üQ¢ äqC¡ult@¹Ä%X{l=ó¥ðÔTÏy©ì#_Nà)5øë=HeÜ ¹nW«m_&ëëÌns¥²PC¢ciÀß$´sÙÓ) ë1e¦Í±qݱÇbe/D9Ë©köYº9ÌZÁâÚz,ïÔ×|©%"áa.ø ø.VwëÆ4xU_ÄÜ,ü0êg½ì%ùÇiødY Ú Æý3C|ÉÓ+KÍÀ@uà8º ºß4-´TrËEl*Að¤ÞýÕj=´¥Z6É~3ù˰yó3»#±jïJ&½_6~¦Ç\SÑÒ=µ ä¿}ÜÒnÆX³ÇDÂȰ!gV³L¸Æµ½'¼ÙI_B|¦ðâkå^<¬Âº²Û52ÀGíf1>{þ娣I2äÖií:ôô³;_Ym;úÂÀuG?ô³[ÅO1D6¶"7jR6?nö àÛ&®"écò³JÌ[ 61¥_òÞ£hîv{¨vË ´?êøõrCsÇô}CÝö^F_Zy"IP¿üù*ÇM¼<Ø¡CX×x1þ@Ñù´4Q|I¶Ùìn[ZTA<Ô´BA<y¼{ò{ñæÉÐCÛC¡ÝÝîæ/0ïÍûMÞ¯dªÓþ¯Ó±o_â®'ªNìBZÁ|dXãjÌÑÐÅE®ÿÚÓÉø¿Qu¶ÖMFåB§KKO*ÌÚgzLjÂã³y-SÎfÄG\tOãöÆ~vaß4,yäqþÚ55IÀt!gnâlé82:aJ¥C(Ëk7ñn¬n°5ð®ö¬Ä}¡kì½ÊòÉM;Ýw«ß:Y~ÿë0âjcÝUÓ½%xs}òÛ¸A õeOå¶å\ä¯åddv÷ùp#ÂÚÖÕÑPX¿QöÌ#ÿ·ò{åÜ4uog¸rÂÃìO¤i>Ïfݱ:d {òßÎßñF'VDÞZ{Ûû²¦+ÕûÑ£õr RÕª=rè¿ôË{æÀUj)b%LâLê|A$/ñ{_¬^#x#òý¡fÌð*haòK,¶ýàbS ËaQR3bVÌ'âÐô0 ðõQ'*L,Ì ÷2þalÿJ?Åm§=£@Ê%GÖ=gPZS3(ˮִ¾XÌ?C×ßËic}Ѻ0¿R,3ɧà7«æCØþÀÐùôaÝÒ!iÓ+ì{×g×{\7ÝS5Öu¸ :òâbPÏ£Éýñ|Dݰ'zÔñ/ºëkÈ¿ Ø ÐÌø5*]ZT[xqǾ Í4£EÉôåRÉÆÀËsOl'`Bùª(o®Âé4ÑÈ|»+2ÁÜ8{ù£s×i¢èÎxv@ ¥èòü7%Ê Àã¡Ý[CYxúóBö¡¬8ÉÜò'æw׫§úoýY3Ãì;!hò/Mg\ËÇ}=)QLÙHÑÈì{ BÈ4sQ@÷éc´K¾esÉòÖâwãâFƾµZQPÈ=Õó7# ]"a5â^ÌÉ1/hJä$DZñ°÷ÿ R3ø"ô&ݨPY«ø|d£¾pmQràyWRöÔÀ`-©ëu¥Â*ÀOðëfJ®îYú²O|!ÞPöq]ÇNXútzCZtMÛlç¥þä¾5Þ:t¥Pn¤Ã±ÉäßnüV Yr¥õ¾Í¿Qíòø(ò®õKÊ-Lvï5ÚÙ¹ò;k¹a>b.¯Ë<bAD8BQ¥ìö|9ÍIÛðÄIª h[ËOEþÀÑÙë4Ãp<_壪ÁÄóò6LH<@UT¸ëqwùvÓ9C;û[¶º;EqË>QèIËhl¾{S¬Ã´¬ «(Ço¯sá S yäg'¢HtÇöq¦d7Àçãt ½û×2Þ¸ôé³Ö×Ü%ɤy²-z:² 9rôq#øZÈ5Ô-?VÐÎá¦mÎ|ý : >²_¤dG {&?÷aWÆ×¥Ï¡°³0oÞW7<ÙÊòÚGmã( M~ÁëÚä #¥ h{F˨n_ìühd'ݶ6ýúäHKVª6ݵ)HÍÒ.z$EÓEté7Ã^Õu WqÒµ78/^J¹<è±.þ èlr(ì±ÒªjB ¨PAÀ 8 0 Aì,áimú]Î!ËNA~Þ)õ/ ¡_íêã¥oc£|ÔZS\¥IdÀgT6W§[rQÃ:«!KLa¤ô©Â¾$H{żC)νX¹þÔ©¥s©Mtgy?$>ÖûæãÝà &ë{ß\;dFbxØIGþ&³eÍÏmØnàÍÓlOSárÝ´#iÒòDÇ[9ÀRt`|¡`wÅO¼IrayuÒ(ylºÆ»¶«bòíX{ÐþwÂ]É@3{g'gǰéi¹îÝpÕsºÖ+ÐWÁ÷äf2ý@ÑÕ´4ÑÝlö#I©VÔRôÐ7þ ñèÔ`õRè¡XlEÚ¤iºÙl6ÎüÞ¼Ù÷ƪªù2¹ÅeÔèW+©¾*úaͲ¦Ì%Ú·á³)@¿iÜ!C7( Å`P×´£dîZö¹ºWõ¨÷¥UfÖô«ðK6Ìõ p@GÉuí½£.NolÒö°U N}Ë&%§EÚ Øùæî Kf4®X?¢Ü{óÀJ=\ج;Íø¶ïý&?%ãðjÓôÅÅå\Q(Þn¬ÇÛñeC¸T\iwÃëß´ÅÿõnQ».º¨Õ J P²»}ds/"mOv©&ÀÈF hïK®*v'-gÆÄÌ °úá¹v5285®béÉ¡ÑFp_â"ÿz AHâ^zªÇ3¤QVΫ³&IèTyÝ ,«n³#ókLã á$*é®M^Ë Ùô Ð(çÓ&ï6& O,=×?j°4ÏÇLT/1ü@ÒÙ4Qxfw»ØÓho,µàÀ÷ÇGðB*Z¤Ò¶It³?Ñlv²gÎ=8°Èq ¸ÉÜuëðÔg¤u?ä N +~p½w{':G°L¨Xô íÂÂð[1ëN(øAËìâ¹¼ÚÔ ¬ÒuåeîÁªÖ_&[rüÿ zK-¬.Th°VNä:BzÇl®¶& ¹Öpædì ûZñ.ú¾«$¦ûèA3id°7)Ùy¦_ÏwíàÔ V+i02ó¼ûrj&ñ;ä|Í@wÆ>ñáÜö¤~ èÚua¨ó¸¯¶T:@A!`få;ÙùØ?Àc¡RÐê67ãìQÇö9Gr|lÛPFnpí8bÂ:À<mÇcà®ÖK]ô#w¥°þRùoÃF ) Õ-r~hÌ%¶ÔîÍzÊNf÷Zf *ÑãD(?ÐíÒIE^X_¿~ëæÍÈÒBC§^É´#INk©³KiØW¤ýj|½:4Î}`×ÖÕÌ1vþÙlîµM[ëÀ¥@}¢Ê«s£2§ýÞÈÿ\,å3Q7¼¦/;ñÐÓÅAfÑ'ÿ)/#,Ô,-°jÐ}{ôyIY~Í»/>Ø,AWEú,¦{Úþ`ù.Ææ¤*jÐSÖ$_Óöj'ÒåÛªþ£k[i ¢ìɶJ¥Ä oú滿àÇ/¢ >)ø H¥¶mm·f7Ùm²ñL29dÎÄ Þ-+¨p1±,wd(öQ~ÙJ$'üõÊ?7¯ÜD¦ð楷È"¥NK%ùfÃÞ+õn7¯ÖR#æÝó¨¾#ùb㫼ÞUz_wÎdCë¶4HÔ·ÓবCâãÿÞ/ o·\8Ö g»½eð_*à1XI´Ëê%F!F±´]Ót±DeUξhûØÆMj¿ ¢¾u;«\¹p|,½H·FùFax.ÝðXÐ]«à<Nn"Î"ÖÝ<åÏUwZ¤³±1ÐYÍ«4,Mfék.laCoÔ@¶0kGuKKbû\櫲ò¡yz]ó/ HlLL;ãʧðMM\h|÷lFCDþzË#tqÏùÚs˰yT&z.+Áz^ôGóEV¿Qú±-EzP««õF)VD§61è h (ObCèÄ-1RÀÄ5ݶÄlKÇPv `ÁU.ð£_þdã±7¹[odþ,AJÏåÊ!^Fü&Eéû²u:ç½þç2°ªõ.ËÍ xIfvªnÉ0|UÝÂEbHä#ÆîÐ?{ÿúz¯ôcýºø6òIÙ¦c§"î¢Kâ53͹gU+o^½:6Í!³º¡UVÃu¿FîY åÚ»Ã0#RBä.ê}ÔõÝÇê?º¸j7î^]Gî1âmþ/ Ú´viYh·;ÙÌÉ_7ïÃä£09ñP¦ìIwÑß׿òo¢F¸t¹ÕIË4µæ\ òãXoR¼NçR"@~§½á)´FO&óáBGAqû=á Ì{Ãé³A/<.(´jï#¸*ý\.ÑS{f©såZ ¼<«oz*±¸ÐÑpL*µ'µ¤Dâá¹åǶ¨ô*é£I¶>â£HP¤ÖàH /0Tî#ÐJ¡faíuÈDѪ×dÀMj¬£×M3Ã4ù´^¸Ü¶åÐ2üôqý¡/k¿ð/ vB´ÄT1*»OßȾ²¯ô 8R«ò\¿ ÏdMë¤8wÍÖq¨°ÃqLRCøæº¤ð&A¤¡õ#¸5ѳ½Ä¨ öòɪz¶gFISa¢wyHònï±?: ]ºO"Â&æ,=7ÙÇlÕcëøáÌOï\®]Ù3ü Àѵå4A?ëØF¦jU ø.Áe¸'GàÔJüE ®Ò$mf9-ywgfµë!òädq§Æß¢Âæ}<c>ËËi9jæ¹*c\ÉåÛ9òP)QYð°LÝÛbw¤*µ(¸àÿøL,eZ;ÙѾ [p¾¥¿HiyfeÔ'Eä*x¯gã©PÞhHûP$mfë^®Ê§EýzôMÕ³.ÁÅpòÓ\äf±-ù×M´³4éUBeå-t%²Däæw:kN³ýýµa'÷ýx@èOht\Lbk~©pà£ìèeÙïÌó²ÞyÿC^®*áV³ÿÎnK)Éþ]ëFä&$(ÿ&{¯?, )4þ @ÑÕ³4ÑÙÛz$¢±$ ØXÙùëÓµ ¢ÄäLr¹3·{û1ã,l¹l3óÞ¼³<#©täî $h~5ajéiÂbo`ÍG{UNcþ÷㨱cÏMÀêåÔúcOX>]C:HL¸>]x|}÷¸+Û¢1®gC¨¡®Ì(nøòæ÷ÿ ¢éÓ&¯.ÞÂÜî^ìu#ùñLppQAÝøõÌO®£ÓjX05íûÇS ß RøÀÄ éu+,V òÑøx_@W°&gÆIV MøÛ5«*ÄáÈJmgk÷ë®àt@ÖKR³ê@ Ï×#öBÜòªûÑõÛ½ 90ÇEȳßÑMRuLsXX ô?üN¢Oí¸Ú,È)²äv"Ïv~ðÓOSiëÂëCT9# À ×ܺùåÌu?ݹ:ÐM×9í$9ø{ülVèÖÖ<â$à»qvsvÁÑ6¡üÚu=ÃÐ;KÂÊñÉò{ì °"ÕZÁÀebmRt:`t}³4ö8Æ)ÓÙ ¤Ie'qÃf¿õîûîÓ}lÚáy6.êôIóecJ/ÚB:4ûQ ´2?¡ä"ÒN¿+ù ÁcK% àsÂCÒ9+±=haì!Ø÷$ãÙØé%Ð]4¸÷vh?);ñðÆfa³ý)-Ì^=b¥IÕjËXÊ.ú¿È¥h¥¨JîW¢¶PôPl¯Î´7]ÜÖ¸ZÿÚþk8ËÉQ ú¾M·{wq<ïd¾ÔFïEÒû² "¦µEgDÝdÅøHC´ø;£ -¬»¼í,ã{z)µnëö¾À?EØçUD;"r]g L[z@Ó·ªÄ'0gUJ˵ÎÔt ¹ñâŰfßjo$ lvóR«èÝ)»Qá¢à¿ =Ogpõÿ ±ä1±çOûÊϲ@½Aaâ²"T*Gê% ©.ËsñAqmIÑû$Wðhøµ´ÓmMØAÜJ;îÞòW³µæ»Ü.Ѭëþt¬}r}Ø%`I´ÊXÇ{îº:MFiºçTJ1OÎ2)¤¿¡Ô %G-OÖ`4¬Ûþ+ÍJñïµ:NÀ)ãR0?¬ûaé¡D Ĩ Wç%«LW#þ Àѹ,%Q4 ÉTQ(²pÿÿ/lqEi)`Ðâ!GwÇÛþÀÌ,ô9Ü4e_<xÆÎ"K¬´¯ Aa¼*ù,³Ë)ÖôèÖãókn58`Ì 4½× ¾»ö¾ÛkÓù¼uÓK.ç4µÚ£¾å®?10¸`V¦<kÜÇ{ѺäÂô61g AÆä;óQ2^ñëPì©êß(Óü&2Ð!&µp-a>[=<ÞSÁRð4ëܺËr«C; `dÝ×û¾Âtç<6wd8 TF8àÕAµ4±7ª+Û©²¤ §ãļeþ¢,×ü-Æ´=,ýLyÀ[zöT¯&)²ÊÑv¯³ð#òË `ï#´jxÍL+K§Û§0JÒÇ4º´_Ks{ÎyäÞg¹ b2q&3~ù·G¨¦ªþï/j8gÜDr¼×?,ŬhËb6î-Y`yYP©ô'· _áÅÃnóµ%!ÓìwÀXÐ HgùZPk.Ú-Àb]Q#ûÜ?é Ý,kT[«êÕfQóbeì·Ön¯Ñå«0ûFqwMÇ´A0÷Ã}¾L'Bô|Éhzv®éS®Q"@X(§ÚölRe ®LPtu- At¿î·ÚEÊ£zé#è¹è÷(½TJE¥ÙõîîݽÓì?Ø9çÃ9< 4ä05ÂTeí$ܼ¤X\iò}â]%×mÅÉ@Ú¾õ¾ ®Ø³ô²LUl¹mì'ApðWí|égÀ;>òRþ먰-AEqï-y-ä. 2>Ar-VDà·79z3.áë|aÝðïÎf ÔY¢VÀ¢Ð/¥F}ée£¾\ü<¸³þ;©òN%m»Ü<Û,ͯu©M »ÌOKo©¡¢åq Y¥²m¡6¶ä "DxÃ1¾èæk>[;¥zH[c.©ìi;Cjs] E(R8ì`çyôé*o*óÝ*1ÂwóLQ¹Û%²q²¿(:wb í]' "¢4© QrnÀh8 ¢("$ðP66»dýfnàb߯ÿý@60Þ7Þ«rMèV>0zæ~â¸ÚP{ êXZÓVÀ§ÄMCñc ¼Ì.aTvÃHúá®-dAw²kuQ\Ø0Ýú÷èïËö,Á9ÏH32©ò5õdö]"~>¯A¶N!(ó~¾³@b®Òx%ôöfóB¡O;iqã¬ZsªIßmÏNÖéó)nöpÙð½mܯë2üEþ¢- é¾ú⡠ĵ³·«/^ß^U/U÷¨ç\²«µÞâ!?"s·Xµp(ýȨoôS &¯ñ1`¡9ý²a.:ø²Ê-ÔWrqÀ»BMâ_ ÎÚâ¥Þ¼:{Ð)¦+ò?ëÎ<.ä{µ$)RR2áÀKzkï*_¿5fÀ% GÍxñ²E×z`Úµc¸ÖTÿùàgµÎTÇFêêhèÝüW·~Ù¸®û)ÞkùFzèð$ o dIê¹ÞLºc4ÏUDá¢ãÜA@WQÒ,B öm:YN;wÎv>\`P¨rg·Y¹?1ÛpZsÙAô.Ô=Y2<?dÆòHånqÄõ.Òs#xüØÐóÿpt-9 Ã@tfl'hhC Ën;v°ç6Ükp Ä5X $VH¨( ´IiÚ8mƽãù¼7y#»}¯*HÿSÂÀD8Q&üT²Mý+AoZåcæ33(SÉ:GÜï¡o)Zú®Ö¶&¿ Ì5òÀ(Üg¸à-&p¢3þy3¥>AÀu£Y(æ#CÉ W¸¥oÓȱ»½[º_Æú±ø{8IÇtÛ1§OdBg¬Æ'/í¦nìHÀrÓØ}õ9;!µÃ¿ºp÷~<jY¶ÌªÁ¨ôñÚ?Ū¶ºÊ¸£v¦Í¶÷Ѱ3ÏËêMøëØ ¾Òì¯Lú4)DÌ wY,¹¢qVø¢³ii Âp&³Ù¬´ zñâÿ¿û¼V(v»µØ-ÕÒm7L2Îo÷ÉÇδöF;Y³L>äáC<Å//îW\6&öv¢Ò"!\ã²-Û½P1îd´É°ò!*{mo¥ÿw(Î`®¼ôÃ"ÙMb¥ï*xÆwøö-ÅFÜe&ªö,ÑLÜsÄ÷âÑ(kãÚÈï>¬PD6Vw é*nî¹·ú(kéAÏß0µä¿2Y]uyæ°â½¨ K®êIQØv&kF2e¹û§ÛÙ!¯çÜåjCØ´²4î£?"¯ LäGDS%hè¦/ÖQ"vGzõ==Y »Íý@ÑÙ¶4Ãp¼MÚÝC;'8a>à`à+_ßÿKøRÑÔèÜv·ë51ùméC_IþAòqy/!*«HÜ)@ÏfsGf ùܦÀü-çÆx`(½}é¯dö0Ü ÈZÄ*oÊyÖ. Ðm4P¯^?§áy§ªéaO¥LëU¬ÂÌ5îCy7^sÐd¤s£òø6õÌrÜÏP®u'³?-|ÒFÉ=e K¢ Âßæî:VZC/Ä`Mÿ+®Mb[vo)¯³vú9í#Û¾¦QqÚ-_´9vX9|ÂðÓëí¦Õ,v11æx¼ôªL#<Ñ2|hס0ÄÔNêdtì|Z¶{Øî=¸FÏØ^¡[Å ÊwØIÿàèl^(>ÌM¿dµ·ö ¥èÅ«GÁÿߣB¡JAmE*ÖÊvÓÍÇ&Nürʼ÷c÷] uÒÙÉ °í¥ÖæWíi>¢¼ÕrªJÙÉÎØ ¾Þ&Q b.¯[)¼ïú¸çùLr!rdÏeP=º ~ëOv'¹`¥»Mòx®Óhìdb`+E¬MãT°|C_+ëMçâ"ÉCÝ`"XDú? .r¦ðS¹19ëÜ(¢yBüwà&¥¾;¯t]/]x÷aoÜVéT9WȹzßJÈ0vvdåäM_ü*$úcHOûúg×e9î©Ú²Ø{su2[¦.Á±>c:anoÌ$§ÅåµhÅ®áãÈÐÁE®4Öþ Àѵ´4Á¼³¸¶,R¥þyO "*-ívÉn6~éOHÂdfHf>vÙÝ Àày9æÖfªzܵޱ×þã+5nÇèc_áóÓJÆ\î@ÅHáS4ÂØÖøæ0Búÿ¢¾Þ%Óeø£çÀ¿¬x)`|õÒÕ ál³]öbi û4I¦ÇJR]ÛÔ¬·¿zÙýíÇr#|L]7q*Ô¶xº]µµnG;Rédd æ1¯¬yÍK]LDx¯¢ ckÇVÅ~oû¶}¥;Ò ÑØKÐ^Z/C"Fþ°ËÅ¿ T´ &Uüx? Qm Úc¤½¨Ê ]ONpÎ&cé©R¢î[Zp£q±¬ûñodùmXä¦ã5;RF°¥d/«¼ ,Èe *zIfòüªHF´câ°Ëï÷üYJWwoÁýÀÑÙó4aØç¯$¥¢D"ÀP± 1 ÁÐ_ÀÿdgafeGHÀEH|´VmJƱ}Üñ|g¿í÷=½÷ï Ë2Îø}Î÷dúööçZ¥ÿâz]α['ôRä5¬úÐôuöÔHbîRUSRùí4WKâ 8$ -aáZvqR¯8Îx]û+à· #NR£nqsr0lgðÓú®7¤yÞxçéaæª BéGFm5«ßØ®Lo¼ÅÏéÅn>Px³Þ\»8¤î¨ ÌB,'±$Î0üiÕС-Ù+Ä!¹"îk]!cF,ãÏ2[-¢WiFÒÉÕÝêhöBèbðH½FxðnÛÂp©üGD"{HF¾>MÛDÅIà[<Í1³2qG´ í©pt6= Ä@î×ÝITÆÄh<yðÿÿãÅN í¶ÓváÞKÛéÛ÷i§S[¤ \)³¶ä¾Ø ã4ë|72Ca.v¾Éøgè6éüN#£íÃûöZ8/{ÿÓ0|2§Èÿï¦ÜRù¨ý«Ò¹¢¹VâIËEkúåÚjÜ\ÉÚÛ×p´°Ôo®'BÔü)D~©eÂp]Àµq»ø+wR¶§T~e9¡ëÛJxöWÄJîªûÀËs²ü =éï39²¿ E8Is4v78jÐ|Hõ Îkòz¹ç 1T¥H÷ÄUFlI ø»è[.Þ¬SÛ 6p/NÌ&Ŧ&`O½ÒRò¾´6TvÔ(Ý ·pÛdw3W¦KÈǼ7/¼'_mEb\ Ò)¹Nä÷Jòk(Y$<,Ê2à]¯9=6ésË;ÊRZääp¤¢ÞË/;¦ZÚÞ»»õÌT&-Ñø¦eQ{ú®åÂu±ñíÀÑsÃm!¼XÈIz Òwù»/zÂRìÕU x&-²nSèçU0Û¾[Ý9 é_ HPu(3in8±ü>%ö3s«2UmI;Bëågø(s`õÙMO># 09]ðaA°K3ªdu¥ås(5æäe¤¦XiLTeñüç¯ãyaì£{>Uaè8µ©Î[ÎõÒãRj²ïð~,9â>%D§4|¿b3·É8¥êëE}©ÿþ¸éÖ·¸Eó¤Ô«@*{µ¥ÄY¯±s»Ñ U÷]ÛKÇ|°¥a¶§QsblçÀ¼ºJ|ôïQ-¥C(åþ;rÃ$e²½Ö:°QGÎ2mÎ-UPY±Úvwýºé,O§«gYørâõü+À --- NEW FILE: crate.png --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/data/crate.png PNG Óðú¨°É2ò1Ò>æ,Gªµg(NH¾Xy·ÛfhP¤© ïmIÒ}¿T5<(\/ú êåouã<k1;ãåNjNÀ.B¸'mTdg¬ðyØÖZ,ÕÌßßÏiÄÌ0³ ãþZµBú TìY/â7Ã+{[¶§°Ì²ìxnp»-VÑ9ýÂfñ}@]»¾~|Ó(Åâ<î¹|£Ôáï4#éGÁÔO¡à!b³V]øror4]ïò¬z»!ã$¿Ô&ÚZa¶p#g"þ® §çdGp)fËZYp£ýyª06¦åE¯OØíEo,ð%o3ãÿ#&`àüxQýß,½1¿,º°3x 8Ò_ǸÙÓ »ÂÈKþÀ@ô8 ÑxKÒ%iiYf©Äaÿÿ/ qCÊ »VBç¡·3¨¿?Ë1¹ãÄBVÔ|î^ALÖÛKcð"CUUOI¢ ¤\!ç:*ÒYÞ¯»pwÔRKÑÀÅ¡ÓÙ®ÙcH£Á½$ZÎÂÞSÀÓ W4pfçØaÞæ NÒ öm¬×íM1x²z9Ù´^W;èÅïΧY?ØúÏö½;/Y:HNÂ|,Í#;el£ñ°iÙ× ç:ÛT2*¯%§h.ÞqyfþÔ+;ÈV'×&r}ªù"Ö$#k-4)jîÝCgýöØb+ººÚÇ#óÂF E>zrhéº<KsØP*\×÷ï:st`xNÈÝsÓ? òöz^SnbÌ»XålWó?Ûýj@{ T²6ÎGøØ[m ØWgÈNÀD¶»Ð|úy(|ë>· Í8{.L ²(þ: (EéØºBÃÉ«i|_)Z&ÿ@Q¹ó¶ CQ_%Yq¢8AÀIºwéÔ¥sy×îÚ8iÛ#ßì5À êöåMEÍEÁv©á¦ùJ²ãÞiëggÔxfèh"0Ý^^³WÀiC!³¼z>¨ÿþM^${MÖ5},Í1ÔÝ ìpyY u,d¬ÆË]å4³üêÒÂkìiÚòØê)ãpQçó³~NQT£r§sÿûÔÊÄ·f¼Ðë>'T§¬ÈB§}$õKJE*é§Aé9à¼\]áup72 äµ ùZ2F²üCk?ÌáǧYEáôËõ&%Ç¡Ió¶ÀÍp°yF8²¯£m|(xüµ14顽Éà3"j¼Gv¦Wûn<\Pyê4Â)<¬b æm[?á¦Ý>\¬n <MÚUÍÿpô¡×ÊÉT®ãñeDgCc¼oØóáIì_?µÎªx)òd"Þ (qD¦÷Ò|Ù0- áµ Í$Òìb÷ɪDô±eGWÜ2í0zëFÐCøÞÔbã¿Ç.oÇñqSÅh:°íuå¬ÚÕnæÆ:¶ <!GæêBÞV¼¾`nfÈõKÚVfL8é¼ìØ4õîu5MK)Ä_èÜpbnºy_G-FÜ!ü9A9ÿ ±Lv£Â Ü»½ÏcrààÈû¿ Ï®ÓÁ mæED¼ ßQYS·á¦eÒS¾º*!N²B¢ :öçh1[/]×kÅvízz§6㩼ôh|A¢0s¤ö?_*qBíÛz_±Ãæ)AÄŰ¼øÃj¡Ó4j;Ìä ´CV+Æå׿gTëܹøbcÜ%u¿PkÌÖÒÖE.é¡r´¾»@Î"GgoWm{Ϊäa5ßµãqà( £¬I54ûwoæ)äµN6|¼áhT}nJxßc>ÏÛ(u~Í!¤ÀY§2ç& ½gw*øÄSÈp°]4üÐ'kí\²0ÿ÷E´¦Ï¾}ÿÁfiÎä` . {éy*ÞWªv$R¹*ùxe³ãÙdd6ËíéD¥¸ÉcÒ¨·yWÛäv âz?ó!¨ñ±¤f¹Tf¶µ¤Ôû÷åÀɪõ×séÃ*_çé M¤"Å@#bJÁ!!\¦ÀÓÁ8w®>ª Ã{^¯ÖA©½åv{R-\bÀ%hò|3SnUÙi ÍzÓßÏQªqƹybÔK¯ÿíOo}é/jöcev.}9VA§¬Ï½BÙÚ^V¼½/bxz,OÑð6з+g¾ÿ ájíºqìäÙc0AðR·»Æ8³h9ô¹é!÷ê tö±%Ön1¥df ÷C ½5 Ûäø=!à(à8ê×ù`Úu;Ô']0¶¿.ç¥ÚJÍçºï'×/òïqØ^~'ºâ`w Ï!¿>>×eO +µÎSbÜ¢u¸¤ç}g?Ê)ÏÄÉûÃlí¶¨$b³îF[( qŪÐ:)1áD®'mP&p½.¸øÆõ*bBÁÑìsK@°CTl+mãYQÿûÌbaáUgþ@q¹ôF CQØq¦étF¥¥¨+þÿÿ°@H,Z(δI¿âg²,ûúÞs¾ÃÞÜÞ ¾ DÃ0ãØH¡`zÞðýîo²3dúVëÔNm|ôÅ×rÉ[ ©1u¬PàáBLhßý³ÝqPRA^`ZÄÜæ·Ð¯.D¹ Q#ø¦Ãª!ÿÀ¡ºÆRö:¿;_cǼɬÅ9iPthâ~ ÆKÚ¨.4ôl¢SÒÚCÏhP°`Ügòq+¦ù23ñzÛAÑ ¿-¤þÒüýv#t¼+ úõºÑþÜ÷}Eo=Ì Iϰ@óé½4ØÑa<E)¼7©±ÆFÚEoJï$ù±R»C4ØB XZ+EI!8'3Eã&³_7yæÂÉIA[³TL±ÿ'ºÕ³÷í~òa×_ÑÙcQ4-À}\(ûÕçÑ\ÈÅDàM f]Ú@ ²¬EM ÈRSðï3rÇækײOø 9u]y¨ÔJS¦NÔð³Û}AÐøßôoElÊ4°6¿:&ª£K«åÄxZ[ÛàÏ6P|ª9MËÜ L×VZl«vô;«Þzé¥rú0:oeÿ»«ú¼eÜÿï.ÍǺE}8ü ÀÙö¦ qÜ1$9!NKiʤn{¹ööé÷1*mo¢I-Ð@Í0ûÙ©@àßÙ¾ûß}0%|ž/VÏÝ6ü7÷£m]β¸»ýEç`Q+Õ¢uNeéÓºFbÙóÝ~x4u(=Ó¼^Ép¸J,$dOsI¼S¦d ¯êª(ctQ¼IúíË&¡(M±îú¯Íý:Ydèþùi¦iѧg¼AÒÔü2òË\NT.çfmÚÝëløu»©FÐMâÄz©!#òy¸7óyàÙî·ã%ìyþ¨¼DºniQ«H(F&çT¡5à²KÄPûIèÓK;6HUïÆñAA[í~|AwÂýýìI1 ½&LgÁeªQ [ÊOwC»)rímwTÿ ÉÚvܨÍÍ6c²M jÚ½i¥¾öÿÿ£ûPµÝìCC¦!d wÜc¢²{fÎ9©¨ÍÜd î¼b0ksØ0d.v0 ¸ÅÜ¥ L*)àØ ãý*½©[Ím- ±òUßU×¾ò¹ÏZí9Vû1æÇñ\Ê0ÔSÜ0ÿ i\Jló+"4éböòÛÀ" Dz¢ð_~Mt`ß,v¹«ÕÅ7¸1Wa ¢H´@p¬¢SÕ`ÿe£có©ÒX"%_>£úÇñ Ï/YZpL|ûÖ$Yü{9À#1)ÊmÊê×-(·ýs\Hvp"yÁ¤Ôrîv6eàø/¯j@<yç,À÷ªEÊ+ú³°aäiç6õá Äâ|2Ü wÃp»êWþé«_íHü kS«sa Ü| ÄôWägYîöR®"5ÍÌô8xR IÙ(úë`77'çX-ð$£¡I².íl==Ì9æó?ºi(þ.ò>µ¤FܰIA'_Ûoê(ï'=ÿ¾LïÆóï÷ýÊS¿ópü' %î4#AÆÓÇú¦0mßÁl$ Ü?é ¿ôEQÆ,4¾¨K]Jx¸Ýâ«ÓOwòÚöèI9ÙU¨Ò ¤@Å8ÈÙ?uê}Èãk¥ÇøC«¤¶PS8TÒ>Íx/ 44¶Yê{íR0ÒÀ¨iØùÃØHÓ³Jm|§ñh'¦ïÈÔXü²4?ÆØVyÞJ À̺ vw{òÝ7¤e:ýçfz-ÀTò¥Gû(n):·I 9i µû ¾Ì7»©Ó3`,ú¢%:èv;rS Si.19zÞ6©.LÉ2Ön<»ôyi^ <HòÊ4ÝÛ7¶Öz>= Á&²â¹èHçÓV6?p"³W3;`~Ð'N(ðMdÖxÜ+Kc Æ5#ãEM,Ûf0ýc;Âp°'ÿ[¤Pw÷àØÕ«$u#c÷Ç&Àõ½. ë ¶v à-}×*ÂÛÆöÏYæ9Jϧ£/¬ÅÌ¥²@E7Ð4|DQ( ç+zQ$É] DÇma9æqÒ£(åQ÷i'&Q¥@úTã-M·)s;Ô$ =¦¸ù¯ka*22sBm\ÝMR2ø§U»X° ²G£+ìóýeýñºD¦IûH&%©Ð¼=Ý>ÆÚ¤ï½lÐ"3ÿçWEb<¯§ë$¤òõm±ÖÉN¡ mè~ʨÄÏ6[ÛÅÍðO ?XHó·â_¬ÊoáI#æö@$ÔÒLÀâ¢>·I±Wï øÃøöñÃFÏØÿm^óí¤B¨£AÐjÔélØ"2ãäî,ùU~c4R °×nùª6>3<QúÖ3$|Ñ ôÛ]lÒúÃXî¤wËÌîÌ£¢í×»üØDa*5h~ìßà;Wÿ§Ã¸ÔÔÕ À-¥¿&ýV J/ØXÿ¢H$«w.ØváóL¾Íýy@bâÚMáònDTæY1ñi;³Ñrµó²Åõïôk_mîÆïN´ååÜ \1Íî}-umÚPë±Áû&ëÐ7¡$5.E-qÎë¯á¶JÄE\i$Y"b/×5ÉÇäA âQ &¨¾"H&Jà¶k¡ êk¾ÓXÞÏêýj°h Ð÷ëÌÝj^á>è-PÞÍ~>ìÄ0þ°É±uõ@â0K çynãÿ ÅöªÊJPR5ñ+×Â%dÐ4iiÈEGFÈ'÷êrÝn3 Ãe@¦P!ÖÝïîÀÅ»´¦jl£-P(Eß¡M¦¤ÌË9jàÁÕêg½ùx{¡-ÅðdèU4Â$ÀFëzKí~å%ûcAzgã`ós'@ÍVÝ1BG^!ô#[drj:8¨UxÆ.²°aÛí> Q,/§J ºtª¶b"ݽ¶M+ÀyÃ2Äâs3>PéyþZàxkHUÐ1&cGt½+OÖ8gâXR*ì°ÕX¢ÇöêtÆÞå½äp3U} e4I ·Ü¶@AHW&Þø¾³ï^I åÇneýf¹ 4lÙéììÌ9g¤ì"y~º 5?ÞÏ!«ïÚ$|<xPá¾+Í÷¦YòX¿kÌõíWí+K;lR(ZY%.þ? í ÆAAàV©Gß HÏÒ*Þ8·5C)³ ÷}ñ£ø(ÖbÞýA ê3b@ N$ëÎW³@ ˸6(· ¶Ómu®ÜùÂ>]HXH(m¡Åãwf1&¬fæ\þ˼©Ú¿ðárY¨©4±2WL÷2Õµ´êþøfPÒçyÑ÷ÝÉ»(Þ]6/ÿºRã ì%x Nû!)N£^ÏCeêDÆU¡8ÝlkÅ÷¨ÆxÜΦâZÇ¼Ï £±´¥q/ºÆD ä¸ â}/éý±ÿdµ¤@0lÏ yÔh¼9Y䥻³q¶\n±Þ±òî çA¥èÇô-^ Тû©XƱP¸Ò ekîPÙqí`¿ @lõ]˶ÅÒ(={¿5f=êx¸$ ·$qËT`ÄqPÒ)aYxQ¤ô&´4ä*ÏFh-),ÑÎ[lTU;ñ²BWQîexÖøÜÖÀ5Û¹:+Hÿ½q[ xçï.³¼(ÐÁóF¾rs§¾s_îç.¢-&Á|µ+ ñäí8)Oë×e·=`B}TQ<A ó©´7®¾ <PèwÓܸÁÞ}÷ës/unÍ"õ2éÏF% á8..JpÝ+%%±¾ÂhíA$Àý#e#+Ì8ÃG]ÈV7*'ýÊpI7ð%×àj¹NÊêä´GÜó>ßy Át£%%³¼ò'eMÖ©³gO4fÁµYÓÛ6»_°¿+P¤ÀÑÎÍ9,ÒÃÞ".wáËÌ)¬¢ZU2»p¡¿® hè#[D7DîÚâf ò!~[ÇÃã4EEÐ$¶!#?ucÀ©°Yk²zW_Õp ½ÌvD} £H(k0¥â ίøa°x61¤^åÛè"N¬áÿ¥X°§ßÉòdQDÝ»LYãñpêfkçôöÉ%(à x-³ó|UVVb!øMHÅ!Sá}3/,PY$ ø¤Hcx%³6´ üâ±sFNjÌ&éú¯ÂcÆeÙ³ú)Fà6a«Ó¡õú>Bc{ÀEzlW³£ËÜ-\¹y÷º§¾Gµê£^øa¼Ô9}«££¦µì¯ëù8 b~EÞ(÷gàkE)TztR6n¬CªÁ¿)F%ºEl·.;¯e×oñ-l¬D©¼Ï¢ ¬SÖ4C1Ô¤tdþËÖ%ì$£f@iuùöÕäÅÝã Ü_T?<®T{Ëm/NÀá÷«ÍGnÁ&W#ø}Yhµïg»öµ°°ã¬í±¯ þ·¾ìyÓäy£dªÍ*ä-ÑKË=Ã7ªõW EÓeÄ%¼¥µ}j~MIûU?üIP;tæoR1´G28i§AÚØ"Ê\o±±yË#Ûe°3Û¼z«,Ñ}³°^YdäÂZÀweþ`¢õ*¡¼Däðiõ梹Mÿz~rW;ÆHÞ j_úÞ}ùF¾DdµQY¢M¿m;\90¿¸º ÈÑÂqö0M?£>èÿÿ/õÑD_´&Zh˨gvk}kHC¹eovgg®è~ëfc>3"÷v½lÔ½åa©`ZC{UH4Sq"QP繬°"=v9Kõ_Ó8Ò2¡$Tÿ±Å½ßH¯£ß+ºh ¥V0 彩tÅîk¹éþMUê¤ÆNkîà S3)©°Ìsä`"¤>¶OEY#èr#j²7À6Ðå¡ ëëwìШ˴ø ¶ààJ* +jr¹[fÂ=ÄHç+ÄÓ xÚ!¦|/TX v2Q<Ñ&I·ïßÅj9ß,jo¯$tôñjÕ|ÛöÇ(î£$î? vûzs@wtåÌ ©Ñ#=åÃ<á¿q¢îñ²KîíOûüò!uìlfÙWØízBÁ$Funib~`âjz¢ íÒÂÁ1&^¼xðÿÿ£LÊâR>ÚBí:³¯U$ Àî¾y3ofä½>s¼s6ñný¸»ðß<°UH+£*dnk(T@ì¶V£!4ã ßoÙæFGÚè§JAôS§»xÅKý¥d T"%R;a\$3¯+ç `C/ÙÚgିèvÖ\í¥Ç[oæìų9|Ú¿zÏp?þðúÞ$ 9Ð 8«èà¨TJJwÙßA¬¾&øb ôÍ ø®|TÊLϯyo[ZPô_¸¢Ý (W4Óô±ýÿ¿è/´ic[S Ò]1¾=âîììÌ&ae6ø®ÇÃÜèT waZAñÍm~Ø«· Ý©TG=,ÌP9i:ûÁý°Û8_ùr¥Î%XòOé¢9«Àýê?|¡®h®¿4ORKAYoZ ü±D7ý5 60ÊåAú¤Òe¢7i¶¿1pct;T& ]®ÅrǨ£e4HçEÏè.|-öÝ?îã1©kÐ~E¹«¤@J[¿£ÈO¯a¹¿Ö®ëöûOuÑ9ê<îø\WÓØy¸Ì=tÕÂõ24&ÀûqLßôâ$®ÂÁ¬ö|åý©=O' F¼#ÁXʦªc{B'"OWKP£ììxZbXÔÐ0@ñè--%ö!«®ßå9RnçM°iS Y(ÍL`-¢!*¬I´O»u§6KçP,ì6 ð lÐK7Ñ µ +x0ëÇ¹É ãQZ$!h¥üwG.5 ¾d!úêå v/ìU¥£Ø¢éüy:þøÜ¹¼= צc)\MÓa°ïáPYÉn<À4¨×ê³M¸îªÏ¨[aO KÚýáÿÚV±¤à·ó5ÌPå*BXËKÁªwúK¶1úÌ ZLÃ1ªXÎ\ûdÀÍIùÅ=þÎ $ Ü+ûuòKc53ìêtþàáê DZ¡;*uÆÚþþÿÇö?túdûhHè^ÎáaüÂÜe÷öö"âÀùüéMsy ÍÛ¯t='+½³ñYÆÓärrD¼j¥ ²²3õïêÓÇ×NÒFf®¦>ÿs'qþ(õ2·áaHj¡G2í405k-[Ý¿g}ÉÒ8¨±M¿lU¯ÛOõ¸½Áu \`,®ïîÓLvÊA8ÝL\Ü9TÍ¿ U(Á ¨ÿùþâhx¥PÒ]¨¿³£øÐÙ93g®» Ô[¦çýá í£ÞýãR»õ|m³ú\íJ±:;W¸õî7ü:MlÚöddªÆ³ó!-®jи¬Ê<ûHó©üÚÝl B_9ämA&²ûz× Ç¢Ä ò0@hÅrO/Ã,³,u¨< §¹ R·7ùl:> GÌõk·½<x[h*6ºp[IÀL2"!Û¥ s6üp¹Â$dauÂ&Ò¼×pzz rþ\¡úóyqZúp¦ô^ãcUH,C_Ñé¢ýºN0KW·×8IèÉ $Ðþ0ÿDÑ!rÿÝ ¡qËR!é]¦ïã¹êÎ<¨/«tÄiÅên C]9gæc½Â:ûÖþ·8¤B$©#F,PÓ¿Äï·ùHk,Áúño]LÐõU ÓæZoÙUx~- ùìæöÁ^ªy½U¨ÙŦx5¶FôZï÷ø/iÍ@:oÎ8ß«\GZÜçb¹øóF/~R»«Åd¡q4òDæÃý`q¤,\OÆÁGûãñ°nDê9h×9aX}äEÑM%J×[+ØÜ8q²wÉkN¸Û|õ|vß§{»êá¢#5bgOíjìK] $ WúàñÈòm¢YÆ[äºàRË£? 4ôfôÒÃ:§eãËýàþÜÀÕé¸y/Äcr'MúÎwàls iÇRÕé8L@2 à¸5 ¼/¡09ä ÊÄúil÷_àg;L¥éHÙÒI Þ ¹ æÌH];ýq )¸UüÓÞbÓ7Edþfè"W¶Ãù·RSdô;$È(ÅÒ±@½0_ä¥S¬¯¼N}§¹vk`y»HÃçB© 8~j¡:Æ2·¹·V/kÊB'3<¼c0²²~ÇÝEÖDpo²j«í&Néív5_â\ô×ÃÛGCvL"¬¨¸¡ÆÑ_Òð0iÇÛÖ{¸WñÜ3¨ÏößÏi*é³C÷o.Dîæ2§RÈã+FZTÕàøQ9d?/JÄ[ƶ¡°KØ$tçmããÅÂPK °Ä@¼Ôp°M=~ê·ï¤#_ð¦ép-ØÊ«ÀÎr8àPÌäãñÏpRIühôéÿ#¨¦F~9{$c@À{_áéIѶ</²z²¬ @Ôµ,5AòH0$h¬ò£åÙ«ÿ÷¢^ÔhÑ*$°`ÏÆÛRÙÃÚíÞ鬿f6tµQ|àæFèQÎëî¯$"JU¸$ðO2$XæðN1 ½¬TÙ¦m4; ûï©#a3m Yf¼JóE|ú¾L+»¹_VØô ¹ådáº9µÄ½¹4+°l 1þ"bTV9uÆtÉHF¯êÇTy-Ŷb׺·ªRl÷]6¨aÐX?Ï kBÛ°ø=Ë Å{PÄóé^)&òXlqö=ÒÕ&à®Ï´Ò@ B"¡ãwSùR/õÒ/húÑý@3ÕXyQF$AÚ=ÕñÁ½Êpι{ÎÝ]ÍuVh¢)Oþö]V^·e&Cìeë½øàéY\è|èÚLÐô!§_âÉâØs²->9[â UX~IØBã¸Í¤I©dz7FC²A5¶¦y¬>~éí=Q¼¢ÿáA|4uNOuü«æ<ZÕz(ò|xïQÔE:ã å='Ųñ¾Ó§ûa¶« 9bsÉÃê°GΤÂe¸n?ÄX9úä]Zä3ÒÒ×4ÙªiQ<%µJÔåÝ^kfð?¨ PéXP8â;sùïH!lD§òjêo(9\Ó>ôM|0*:yѳrÑ¢èâyDåµ±]øÿPëØ´ëC+ì:*^²ïw,¼3 dßÓ²²,ßÈÅhm¢+?¸ÅêÌç# Jâ=Þ-¥pnvà¤ç+¿INëÑrÅ»±[ÉUV9ƤBTÀ(ÍÜÀ £YÜ^6§ò 2lCÔu»¾ ®£.&´|ø\ -!W·¬±¼QaRÝHm±¶7åÂø@sòóo·0Ǹ_8~E1U`r©Fâó_Ç5_wcO*7ÜQÉÞØnô²y+ ê_Gã«_w{bÃ%ZÅÊ J±Ý}½ë[§W>2¹9ñÛê®ßñ¡ø¡É»u±n³,ßFãå7b²ùüï^1é^d^²ëOϦ ǶÂ.®:/«çE©Õ¨àóW Ú üÀÓÕô4ÑÂÒBåC#1þÿ·¤7/^L<x0öÐÖÚÒò±PÀ73s7dCggÞÛyó°ý8U¢UëhÀtle}IࢦA8ÞÿÃhQE19"ÁÎĹrdÑXc~KÙ¡º;P_©49{É Õ1±J@ô9 ^0®ÈwÉ*PÑõÈÆàgÁ+mf5»ö}Ö <ês:Çáy~ÍF°<jÒk) eÌ»Í8õ%v4:³ Û8@ÖÉ ZÄË3ùÐÁo»áغèþ.+I ¡_IKÓÅÆrUÙfÚ}PaÂ8aqïy,Ï")×ýî=ÛtkL7Ë~µÁoD?Çæ£Æå +téɹ,KByñØ)ã$]æFd V¶&´Ìþ¤Ä¹ÊWÛ)εI×Ö#â¼UC ÀÄ®DI\uí @ÔÕ4%Á<cBHi|®"Á»V¹pÚÚÿÿGö`y@*@ HØî¨ÇTåäe>z¦§çdUx®^ÝvÔ»&dE ©~ÎãFÝÑm¿©ñR<Ç£2#ý8Æ'ãý¦3\#`7j¿H1¿x,<Äú8&OËéj@h'V)Uü÷Þ¯ÁÍórMÝQú®Ëún^ZË ·ÐÜËÏAØÉÃ{yøÜOf/äPyÏZxY<ðß|õzÊQhBÍ×JÀuýLû8H\N°å*ÎaRRtZfU,ä'-'?µÂb2ª5ëØÁn²l£¬[ plo¨¸ÿǬ&uN%«?¹ðëùE¤¼ã\QæÅÕMS»Ø0ÿÂRÚÛßòkD¦~Pb«ø6A®°© ßQÜÌÀ-°:?¨Ùzv»(°[æâB 8µJ ÂÑ`T8]í>U EiFàÍ\̽À<.¶M6û;èþ¹k,_ s 6°ÈÊ^©ê¼²A3u?]éa}0ypSÑ?{_"µ|§¯~2-iØaìOÃpi±W<*ã˨ÞUx_oõÍ,ÂCKHn'Û\~EØ#uepQûm£è¥.$`a9æÂV¢á®IÝ&.;îUÏb²UrÕ©vÎ×1"M ~Pj_¥ÕHÿ2YÒiÝç}G:*Ëê²s<8zIäÍ(õ½l½ôÞ|nÈq3Ó'iª¤MüêÄG¢Ú³¤XÕqF&ø@ª-ímÐö³G/ªÍ·Í åçÓ§¯Iìp[h@±¼.â]Ú!mâïâêªÏʰ]*ô° Íb"«~ÊràoG5Hæ0J¸,(rqPu5ÒÕ{Úm¢Âë:®e\Öd¦ÇôµH·NRý' Ó´<è& bU·2bÆÂà/¬»qS¤Gªºs}C-àå}7Iû@o¨ûÙM|)¦øn^¾\oæ7¹Ë¸G»!Q»]¹:µxQÔ®±+fJ>ör<áï ª¦ÿ¸4è¦DI]l'dÉ´TÆ ¢¦ÓQox5U]Hsí%ç¬-qCO+kçén[µ>ìßoZúeóéëæè¨jøâU´.NXô*ç^Úò HSû! Kñ µqàÇ!-Hú7ùnw6ß TȺìxîA§îØËDQ\Çë½ÏÌEù©kÙi¢áQ XÊ`tá¦ê¶àÿÿÑÏÄF4))Ϲ·ÅîI`¹s_çãã¸ÀÓñâA¤2>Ô<ëDO'ɲ&»Å ¬ízU¨©è½ælñZ|"q¼)=D̾4,ÝVÂLëË6y@"G>ª>ó""kg ª×üêÜ1Jf}7ÎlúÚîa]¢íÈ¿@ü\c2j}>]¾öÓn))åm䬨¯8âÆÞ¦ i=ä K=#&aý¤ÚÌ$âûÝu]ÚxttÐfAî:G¢Ü© U2jã ¡¸Lu¬Ö_pÉ8½\©´d É6»2z'ö[wÈ ÖWæáåë±l`Ku*/#CTÃ"¸Üd²"mß×Êïwbcüu;ÛWë¤× ñî6Ç?]»ëûVGvbÝæßàôôû®R4<öì¸?0Sµ}sIÃ{î?6Ø¢nðIø' [ëÜÉÆ¸PHHÝï!ìø¤&afÞo^wÓÜîy~LSáÒdà+Wgʤ#(øãÅîËJr¥4D4î-f=3Ã^зø|º4ÿÍÕVDDÂÈ¥&²)õ\?"õCã§úØcÉ¿îgb8[|qù2gfÖÔ{ø!Õ1_usUMTEO qbEDQ`Ä®¥Bu¬ffwPÌ;\Þ*Ú5n{ ÚÀº#xÃ-ò1.Çj«Â®qñ©'¸uLÿÛ{1É.²¬ h¦ÿ!03da'¼rÈø7¥ÍbT \¹G5{)¶lû©w%ñV\åWÜ£@´dÇ´EÈ~¨|+[mBu¡5 êÕ²²c±££`ÁÁbOòÀË. tųU´×Qï+L¥:µ`°R×âeS>åÁãMâE£¥%ÙÎwÛ¿n*¬-ò½sêÜßQL;ͶmúÓòçþj¼øÙa<ÃSç ígÊ+H.edJBé-%ÈPtÊõ «Mhäçté[ÕÙªó¥}Ç~ÃWKkîæËRN÷?º¶ ]é ¶1Ñ`âñCü$ÿÑðÌÁh[-¥,vK©áÂìÎÌ9çÖ,Óo [h±¦á$ güÍÔ1¸öÈ6Ûy\F&#ÑÐSxÎUÝlç$e|v¥·þh: ²^rzÀ@mîÐ/>i·¸$ðnUNtÂCó²Ãïòéê Õ';QlºÃÆe çt¾ð.Ü"ÔòíµÜæðX®ÛåÜ}×BúQJ˵żß2/výÆøpÛkÇl~^À@¶sà¡âôAà%[ïð(,²%óþ=6|i@Zͤl¼há{^åÌn,¥8ì ¡T¼Þ÷:TܸLÛ(NIUG _°- ö^*(õÆ *~>ú¶"ØvÊ[¡lOó°"}YþsjÓovÏQ¿(¸l]ÃPºGäÒ©³Á3ÔBvoýpBPumöÍ\é?xºÝa ¨ð Ï@ByVU Ú[¿±ßÓÿé±^ 8tf¸#äØÞÇxwgJXÁk+E¨úZºNáÃp ,XX\ºÄ:Å4¬-Kf©ÞãIeØK:¨re®ïk*R)äñ AuÆè"Ë3Öû=}|Èíq¾\ãìq{ÉDÛoEíïeØï 1X⵩y|åÃÆ©.6WËèL7ãÀpo¨fɺÕ#aýNX°pñx´Zgã>É|¥9 p )¾·4á¶õ%kxZcb Øt@±.úÒ4rÕzH{*+ƱiÄ8\/³IðÐ[qôZkèÀ;ÁOH}¢Ã@®HabrðjØóÝ~7d+UõÁ'¼©¤/-h´ºú áÉý]`᤹ö(NøÉê0¶½Õ)G6K¾öù9Ë8ϲuØX>~äé|wxÿp«³ g³ð®¶¬\«ãZ*éÍ[$%çtw®vºþpýÅ'`îI Ê1¦øßíöNdrïrCH6©â¦ÚoÑ©¬Cj2Ý{%5ËóQ³LMr)tèÆ<5¼´õbÙóÊO½R9³Ó÷/ ÎÜSÐ hr{ïéÌy̨ åâ/×êq` {ÐÔVñÂQ¯óçâ+¹ÅÁ@ó³å=â«Ò AA;5käØÖ{Íî"âÝÍÕôó Ùô~ MfKFÇMÝo³ç§ÉG`k̶²Uýíè¥í0M¹?¸ ÷(è J5¦ûrrO§Dð"ÒN´q3;¨4³ø_$¬õzÚÌ #WKa½ÆÄÔât)Á ¶eÌï°U×óÄõ8ÙiFÞJªÇP$þù^I®#} Xp{@?Ä¡nZ=¸ÞÇI4lw=ù,^æf5Îô~ AäÚ¦Ê÷Áò÷ýFñÔ¡z¶a¯øHG4ä¡V «¦nÏìï -®ñáÛ!%¬û8íþì:Xi@; 8øUÃÔ;s»0u.» Ã@Í%n8AÑM+ñÃýîûìªV¢¥- ò á§÷zJÄÒM<×ö3Þ²Æ÷½çäË̼|8Ìë¨Îë¹SG|Û¸¥Ö\åÆÉHYHÎÃýXú¸ÐÆìYü½°¬B: ¿Ú¨çYDm}Wq90Ë+¿pË´p86ièx²B¸BK[ü±½Íq7zÑ_h~ØT,D 7·iï+ ÏÔ©A¤]\öó¬WÝu¿$7(o¿hxXdµØz_T±SaÓFÚ¤gYe8°yôX@#êAbyö§[×¥}WéSßõM6%=x9²4^úÞDÓÀ,4ÕÊú,kÉB!±¬ÏC£àïL!ö$¸. ÎÈïßx`N¿'[¢Â¿³ðUÑz" 1O)Ns<uÎÒz± £"K°]ÏæP¯ 'J}9U5ö];´¬Ú(ìX;g1ákTv¬©Ò6e³%UÚ ¼Hª§sÎH,·Ìñ<¨ ª½'YægA Q Bhêauhà V' ¸ÿ Màtß»ìS7CiÛ6v^Y2äÙëÇþ¸;RCÏ£ÄÌ3/ξ˰s2#J^þ¸Sþ\ШBèÍÒïÖß±Z+¾±-qÜØNµþ½jú!(.5ÛN=`¾G9òF(ñöÄaC"p(®s§ôvU,˹ü³"?ðt-I QB¾ º ܺðÞá )dì~/²EMÒ3Óï×ͧoÌæ$Rº}g]8ïöJ¹ Ïz¾å{¬¢ÄbZRv¨ÀµhÐÁÑEE³Ô/ýhßÙs4âtjÀ»ÈÕ÷Å5w¤2ÑùrϹ^æ©´/ùBZ´ºDMcã&_ßYØZË\á;g¶UkypYð7°¯¡M¹è% 1°/ÁÈ4#VTûìdêBgD½GE?õý°ýÆÒÿÄi"É1ô#; ,_ÄQXZÑTI3wÁ©KÃ}ÄyvñܽôXóùzè ¨m BåCmë¶.vø:f·öàÎ,F¨}ì̡Ⱥçǰ¡Á(ª³7´ÕöO *¦I;ß×udÛ$L½ ý°ñÃýä~ø þÚÁ¿ÈO~æû ãÇ&I ÐçùXî´³ ëÀ 9ß|sÚ©qßÞñ_ a1~IÇX±fH9$Ðé nÖñ±oÈz¿³<gUvþàéÚv¢`»Øti#ýc¿Ç0Æ×Þn¡W¡ÎúÝåìì9»sfT8OÍùÍE,åJ2w%Å%æ°â²êöz`UòP¶Ý{úúÖÇ ®dQëÈÖÏ,eLfw%[ïÊz±Pu¾ê§'q%ñ0}û´p7/ wj}Ò·W9¶ÔôèYÔ¢A$ú>á(OÆ££ðÖ$ÆÔ( E. ¬bOEmt×Rÿ¤¡Oö0¨É8]d¡±ø¶¶fƬŤ¹çÆÃ_[LZ·{M·CAeO¨ B:Óñ)¶ÍédÁ>.zó¥¹vxº¡ HåQÐIñ@&Lüÿ?À³ïF¨H+µÐ*uf½¾ìÛ}±7æùuo-]7.9´ÇBTâ·EBÎþHGÖèhÜÆC5AÔ|«0ÂV¨"¾X¨ÅÐjªmãÛæmCíÎ9vþâlö~7<!8µlw¶ ÇYx×=,WOY§Dhækâ<Qß®I÷ÝfR )âpÃÃêý³ÃG¡?;u¡ [B`ÑÙ|¯Ç>ª8Þú=HùOF¨ãzI±WFÊKÙíÅç»äÔmúAñ ÀÕµí$ÁRNiJ0Æ[¢/>øÿ?àøÆPh°íA±T(uælÆ' äݽÍ2å~ â¼dj^«¸.¡viØèãæÁk#`w@«¿4b>Eîj©´Ô;\ÜFçÇTT7ztÁΨ° IÊæê)=knpKÿ!òÝÑé Î?à´X~_ÍUjöR]EÒÌ[DqÌsX<Î ¹qGtW»Äº23Ì.¸pÚÞ VÝwíÇ»Ûçi²È· Îò² 1& Ü<ðL^º¥oéöé2eRîûi2áÒ\õ) ¤p· nCÒYDêF8óJºíÓ¼"°8ÁëÃ,t;íB?,'S«XJº@7AÀAV-_°Ó$Ì̱£N[p9®½Û:M{ ²D¼6Ù×]o#ì/n_'K¯UÆÜËp&±_ªÀýÜøJ¡Lc2MYͽLmpÉi0>`ÉßðK8'°|FÚ¡O Ò![ëÅ' )Oí< ýK¾º(:(PJC1 !Ѹ÷ÿÀ+7h"¾@B ´ÊÐòÐsîŲ!$LÒîÜ9ç¾Ó ©"Ïp²í Èþuó§½éw¤õÁ=ó(dç½Ï©ç,sdªlÃñe~ekPïu4QÇ\^ÕÓiÁ,AµlüèE]>Ùµ¡l"µ¸ÓMñ·cß4^áìÁS>?¾zPÓ^¤[ wSI%¬oµ¢´ ÷UØÒIËÂ×]9k45Ò_0þZ è¢ÝäÌÖ7® øf `Ͷ$® ¾m"Zl|éiæ«éb%ÞòÒ}N ØÎâ¡G H%nο½RÄÈ [ ]CÔ¨ Nïn4¶ÐKÆö¹è(x¸=Ãì/½ëQ[ðeZ§ÉgúÐù,C¿:@JÓà7ÖeröNnpÏÖlº-Ù·ÑsûtoÄÝGpD©@tÖª(Ù&"f rÛ¢KDÏÒßã8¦ÃSÝ#ü ÖC´<^ úÙ \X"lÝùþÙ ëEôãÉ&ñAÜs£Í ÐÇ«±r?ðVÚ FÜÑñ' 6õ29zmÚ¡6åê\!`nñÓ´`<LËÁ®(°\àþ7õ,¶±U´¶®¨J ¨D}uðc´ ÚáÆè^=b ¼Ø½eüÌqÀ`gXUlàTÌÙ%M£Ó\êu±[k½M;'´s7ÿµlz3W-¢$Ù9®s`+_»!त(ÜBOT @Ü:7¯)päãËw¼\Ý9°°ÍBØó¼Ò ¡.§UYþT3(ßý4ç`/AO½ÅU<ûÃ÷>Y òÚ°¥khÉbý®W÷aj¶øZÇlªlB#þø\%üï5ÍRæFu·£äÖñx>t}`q%ßßsY°¬ÆläÙ¸cûª£ðãë¢ÃæÐ¹Þκ¶¡ h[ ¥åRÁP¼Ä_>þ×ñFãbDîB[©3»¨o}9mÚ³gfÏÎðO¹ÚÖj×û ûô¸TQÛwÙíFJÿ«n¥×ù8 üN·ËL®|XîmfåÇÝ1e± ~¥l&ÃäÏBcbæÃæÈË{æ®°ð^1TÕJ<)`¸Æ¤þÐÓ«Xa½º^«Úßdͪ´Ö¡qϸñ¢`ɰ4(IÑ_[/$¥ëã´J¥ÕRW7 #í%ú D¹M¹YzYÏÌÔ<îv·³çÌåL¥Ò´nºtûUЫ¨û> ¹m8 n¦Å '[*g!ÔÄ}ÂVï+6G|¥15ïoJ×Õqq0Yq]÷f5¦6a¡w]s=IcÖf dL.Ë}ò´ÎÈO¸»Í~æ°ñ ¸°# Ï5ɤàä&ý/«f[öOzãi>§n«íÚj¡·Ñr^ŧȿàéÚVhsiÓl±&¥Ú¢â¥E ¢ßà¿ëøâ (´b6MÓÖsfoyìÎÎÎìýú8â½nåsËw¦æþ !¢S}d<,±NÄÄåaä$2á0«!B¹D£äÎ÷¸:R¹ ûQ2Öô3VvRUx±û-ß| q£ Ý¢Jn<ÛnDí$âW?::Ä9wËàwlkÙ'hÚ³QäµÕ¨lèñÑ!4?ÍVºæ2 !½ÒYßwïFeÆøF.<?=¼<ëöÌ*5Ëg/oßS×D3è5_æ)rÛè6ã`Ìh.¿.ö´¬ôiôÛ¢?ÊtëwûñD\"yWÍ«°é´b{{ð®\O_ýqîÐüc¤ÙÎ3ç ¶Áí «ïìy%Ëå®ì#çä:ö.ºiEþfغê¨S»Ë`;s]ûO ÖÚK}o¦n$Ýy³óf `ö÷f.¾], õÔ)p|SiyyOõ lÎhÛ Õ´æsTqØîðÎÓEv?,º=ïáÒÒù©kYJlx ýò7ದób}Ås H1¬ç4álQ"Û«Yº[N«ðjÀ-+dتyV^ÆÄ9*ñ ¦ÃþëS×j9ð?º(êJKå!B AÆÿÿ]iâF å° ¥çÌ-q 4éÌ;÷!C{¦ºãìrR³ÊáUµZå{~g½Yc®eÞ³EÁbT>ã]§qÄyc§YÇQU0ª(ýÉ5}&3wSü´ÆÝQ8{º£ Uf1 ¥ kôñøvÇɼ͹²E_Õ³JâWw5?ýw âVJ@¹Z5¾¦éôúýúö¥o}iL±A" Òs4é!¢°Ù³;söd ¬ièFÄ-æ<i]7îgG¯Õ*×b8^ôØõ[945÷®·-xò÷ ÙñÖ 4A§__ɾ76^÷SoFÈß®eg¦¾v¦»ÈàÖHYëªÕÌá+Xïi)´XyÝÕ¾ú$TÐÕµÞ+tðõjW~÷¨a¨@/UDë¯`!½øG|#å£íYÞXdh(B×]ôêɪSgly6Èê¯ ¼EIJ#ú4Ip,åÑoëf9%'M´Ñ:jõ ªMLz >_Éýk-<ä4T]Nù?ðtm; A´´Ðn×ô$ xÊ7øÿßá5ØTÛÒ]ÏÙ^x ÛôKÆ\@æÐ¢Â2 cÈár¿Îz»£ ´hüðnÂÕ3ÎO|Ç7ýÛ®]¥£]%-jZG'¾×0ùÃòÍkÄÉûÇä®VñËé0#s\®;âï¤Ü|wÑÚÀ÷7¿[«5ß¼|7³Ðë>_Wõ¼Þ?.S;Ñ;c4<(¼UÛçEûe½7AÓÿ4o´ßߥ.ÎÌÎ#YFþ!ÓÔ?¶-kÿ\OpbÈ^¯£ 6NsCÁ;V$ÔöéAy¦2ª%%ÙµÒ¤_Ë" H¡ï»·Kò4çW,ú\BT<c¬º}H.Ý(D!>y÷u6C§q?uh`¬Ì4ö çaìcÿJÃgçAç>´SÇtûj:è¥iæ©å{ì!*eÕÞèmè]6Ñ-xQÏTáh¥uíø}¬àÌQ-Ô6H|/© a^þ@Ôµ,%ÁKxdT RâÑðÿ?Àòh)¥IbØ$¬=3n`C%ÞÙ?¬wä5¥ãíÖV"½²ùÖÌìVÑ6¬®!óîÙý Ù±è7ß×"¨¤' tìSºåCA7Ä"ºã¼½9 Ú(sHã02¬\<,.è vÐî3fÂUg·©ÉÊMYà¢wÓ{î»æLðàóŧ8õâ3Â{<Ä'YÂh#^NSui¾Ýb«9=ùæ?¸D(Ó`öÒûbñÍ¥ïêC¾êYñ¯æ,iNSdϪÊ'_ò4a{µï7²áê]{Ý6Ö°i(ªµªmJ'cÜÏÒ'D Ú{êG¦q1Ët½¿$Êê$4|Lö @g'Õx]Q"kìP¯ìu<2üü¶â[㩺 HK¡w«jh<=ð þÿÅñ¢B"¯Z¡Buf¯$ îcö1;fyç~Qu=cÝv¶¾¹XÅ(kìrq&%»äéFT ²ÜmÙª±åà}ó:¬}Ô©`Py6L.5(§¶Ì+ûî2]ÂíênÍ ß[K=/xئdYüL§Ç»&îúq;Õ FS²9\üE¸ ÃÀ}óñ*â¹YÑ<¼¿òg$Ta4ù:#VÍÆÈL)Éyþà·ªj½ à®] \fvȺġTçGí^ =9×u`?+ÚBTu<kU m¾Ámú5>¬&ï ¼}òê}Ó±oÏ»d?Éé_º²¡ Ú Hjl(Æÿÿï>ùbâH¶t£¥xÎ_ÐåÎ9g3FÞ³dåkï®Ì>·Ç«Ø1U`ªÕ|j¢~S qpÿÏÌ·}³-(8ûhFz(tÙ¶ ö'îy>¯!Åía»'Ø[}Ô©/ÿDx]Öqb ñZídMéÖ³U«é¹¯ B_D AHq«pÏ'cÄ o4EÁN<g.>ßßbÝùéÉ|½iµ¦~ò¬Ô F µ0¸Ã&©ñgp´;3 %\Øýýò®QyO%b,K»$ÙOä-Bm?»ð[X7(ÇË~'8VéÚyßó® í!t¿)ÃÐ&´K®©Téu|ÿôʵYùümÕ!,K@ÀX²I¨éû"5iDv¤J+)AÈ9Âx¸Ë˶|KK²¼ÀÈhúµ3/ÊòO ø]âMÛµQ©vÚ ¢²6âÉkLþ{®bbÅçév÷ºù*;Î&¨&èLô¯Q·SF7>Íâ«ç±ÆUº.q"s«,ôô½ÍG×Élþ]ûü ozB(Qq|ØúþÆâ©ÔuÝÇn¯ÏákT óO%m04Öý¿Úïr}YÆ6'£N\öâ¤J»ÝdT0§$eî¯õÇê$}?þ¯ËqÔ©3ë«0¡É¶Ø¬uö>¾øh[ ØæÜ íyò hÉL·¾NúyXw½ì6ÅKáÑ Î5&º>¾óþk7Á~°ìãâýxÔl¶ú]ölD §¾-ô¥ÆÌyºË;¥,4JÁÒGÙùe£F¬½,'?¬[Zv± cYäâÜ7b QY¢§´J º#9ùöàÚz ök½(ÎF&êí©µ¤e+©\¤àCØÛtÄ2ÎÙѵmSU[Tyb ëãÀY Ûî±Päy"Í'Ëï§æ¶0ãP* µWÄRÐ\)D7 úx`3«ïþª¿óÁñËRâª[þ;åpbcö"¹A¾Õ2 ¬k4Hl19PvycÕ#£0°õÚÉ}¨ìû7gÛÖÆ qÓR©ÏªÎ¢D&þÙ¢-Ì_l¾Ä¨Î£ÄAÒ˯Ó8 ÓÚo¢ÞjYÀźy}ÈÓ¶«ò çñ!çâsñ;ÉÜùúiÆv=S³aiÁý e¢!Òùÿ!¬9åÍJFOî²GAV?ª*ÛMÞÃßúÚ8½?ºº ÈGÊ´\û¢¨il|Ñ'ÿÿoñÕDh%0-P>êÌ._IS¸ã¸ÛÙqv«+=âo¬±)ØZÚN§7 ÂThrX»Þ4ÜUï4¼Q}yú@ä¸8$Yø¢ç¾®-#½À¬³dvo¤¢F¨ IiMLORëÆ7Ý$£ea²æ·4gÊM6t´¢ãnùÍ@¡4;PKÌ5;-]Oùá.¢jÍzE?¹®ZÒ}kkè(§¬s÷~%×H%Ë%·À uK øs@puù^Ë$®+ q¿h¦ÁÛ¿2C±ÇQ¯°4Ó´ô|ª¬MvÊó/bªjÀ¢¯ñIûLy6B~`¶«Ë¼vE|lI Ð/@½§ÐHjÖVä¶/·ÕëÖ¼$áÚo6±Ôëo;sá9N~{l?÷ß÷«eÅö ÃY]±{ç¿xOñÚ àæ@7ÑT KóIÛª²-Ë¢ ãà1Çw<r,ã@ÅÀ'#®°næGxùühvVºô"uæXàW veE DOõ/üe¿¥§&51±\ ¶RÀ÷ ñÊXØ}óÞ¾Ù»õÅêk]æß§ö&(°üag;mÜFxã¾Å÷ Ùªrºa, ®pÒëGs2ðprÄÇ«uôÉiªØmq¦ ½.ü_ÕHô¸t¨ÁrOv¸þ4' â2\/!ð£ÛÒñÄß«©¥õq¯«RÛåRt4 %ZøõÀr¦q1_àì" åpVEu\ÿ0èæ ^y|éÛ ªj¡k½¯m ):7K³ÕägÌÃ|njmM@-r*þû¾øis FNw Léo4Ê£ÌMçà¢ríÑÕæO byÙBÀ`P`Ã?øÃþîü ¹É.AJj»Ëå= 02¿pï¶¡åDÚíâ9Ìfw_ØÞ÷×f'kkÝÛÍ^wvi>´Mðm>ãÿ.®ÉbIÅ$M-óÜIµÖªH²nÏUÿùp8K8©ÿZDz5%ýäíÃöD«Uç§E§9÷FÇËQd!óG¯ü¡[̯Õ?¬âÁZfÿ0C#Öm9JÞåtpJò%Ô-è Kc@?|hL[»Ô@-XÓe¤]¢ñd²N2ÜÌÑ'Ñý/f¾sã'$j -7¥ßoÑná¦0® Ím9â#Ë:¹Ë]ÂxKZiTã¿0u%K Q0Yf¦¹`É?Xåÿß¼yñâÁX@Ya3 V ©ñDGNú¤»L©Hgvà{þö0²"HnyòoÔÌ;,`å_ &½o¢4e¤gÕÓÒÔ.aØ9tËK1úUPRäFð F%ÅÑõèóN?)l ?âË4Ô}ÎQRÑÇ·²~m_ç ¸Â¶'1d'XÈ~A¢²È¸¸dB'2õâ*cDµ¡;åÿÍ«eô¸ú%?8®x»î;Jp¹¶7ééiÜ¢^Ap×Bbuàä̬àâ[®?'®xuãé6U!õÂbÎ5ÁÄò&eÁ¢±PÒ û±î9w©3¤So¾¶o(çW ðwÛB×ÕÒ3¹4ÁZXq%ÐL#nÖñ z}öe}ÁBlIáæäÞ**eÁhS~* éë8%z³FSÒ߯ÙjMr8äö°.hÔ;:C,Ægn¤ú }eÐ ?#aʱ:ãé97<aüçìýkn¬ÿXå8ÎÙçâÛ=dCó<iq5ÑmáÅä®v¼D' Á÷·ì`I±Åç}e/Ï¿Õý)Òä àBú/*Ëk|÷¼l Uå«Ó»°Ç+ü[CÀÓ~v 4¯pXµFó]eÐ(üÝa?¤´ ÁD×ÖjdøÒoó¬>í·udXâÙ5qÜÅÑJ÷7Ç@êÞ8y Ç5Þr ) {0°ä;åeÂe\ªxùÎýu¹Ã¦÷¶µ_M{?ÛbH*D¬ñ&'L$ÃáÞüÀh¯WëýÛ¥ËgFú+Ù±ñÄòåE} 9hÀ~qÊ5ÚÍÓ^a×ß&>açÝeØc)LäßAjôâ/øDãìØÌæwz¢Ø:ÉxØÒÈ©´Nkè6nx¶Fhý+ñ)!<AR ê9Ô±ù©«ëMwD=(ÐXѤýÿ¿ ?£Iß&MM?¬i"FäC-tfï ¼C ·;;·3ë-=rëØø£çsòë4M/¢ñð-ÛjuÄÛÍ~¾ ¸¥¼C©aÍN:»²ãÔÀ«<D1ëf"a*ÚìÞ¦Ãð aÊÓI£NQ düæ¬w:Ú"¬TE|Üvõ5¼/OT0e+ðÊæ|: !Uyò(G'Ý_çHX´Mn.7ѯ ³Ì³ÀüÓZéï5£S¥r¼Ü?\=³ ài½RrIà³_g*R»HhÖaÂÊk] q°gu¯ÏËÕÝüåiǯÍÀiwüG>¤ÙOßÌ--LMdi:Ã8iVcß«ªÝgè9LUó,* c&%óËõo¥ôh¥ í:kBi0VîÅ¢þgQ ð Ów;I J_ë¹Z *j²I?WîêJSß"S(TêÛ`,k+» ü¾2]Ù·¿xÔv|Y˱Qø"\g86çÐÏÄ è#=#gÄ&1|zZvéÑ[.ɨvÑõð-Öîj@àÞßÑ«Wݹ]¤LÕÿÌsÛP¨ðPA{ÅzGö)JGÞ=PB¨¶.*p>¶)ªÜÒç8`ýµÉ \³Ì+ÄDHà éâ«,µÆ §"@i[õú «R& Hiò 6Óh/ýþu(k³AP!>:g÷ê8¸ì=»{ÖÉ:oô¯g ÛiÆÉ¬¥(±éÔÁ(Þ3&m¶«Kÿn0ñS®¹CêiWØFj:'Ú)ÓñÀ`(=6Úi9¦/Dq¿Op¼Ã±ð'Û5õ#ÿéa± i`¶YàB¯zaÔg'%ÍéSlx4¦GGVŦç,'ß,@7(ÒêIàøÓxP o`¬Dûç ÔþÏBEM3sóY t')ü±[I¬E>øÆä+:¬Qú«:, :0ØZIewÀ#W;¹!hÆÖõñ `hêöå¹}ÿfÁWÚ§]êζ.Ìã²¥øL;k¨¦P¥-ZNÛÏaòà: '²GõCKësðáÎ+ó+ù¡T)©¼mrŨäe{SÕ0gZüÅêô.kÚ'»èw¯ômGÁØl«õ¯Ée÷|wTâèk@«å"Ø}çþtplcx¶·¨þÓK~ãVF.á#nþ êZ R!< J)zòàÝÿÿ<P%©JIH²y.vï8r ÙW7½Ñ"æa$¶»+Ú8#© çÞno¶Úã@þÉr¾ûÜÚ"6áæñÑ©)`RýÙª¸ÄZ)x`®)IË µ´*ÉCÞk+®\±uylI±È (xuakL:¶s§öTn}äJ2Wbí^ïDö¾ì ;¯hzE¶^xÚ`ÓH] f?¿ò Ôë¸ÿ6Qóu0éÛÃaóåÎç¥ßÏÍF·Îaù輦íÏs¤¶¶ÄèS£âxfÞ¼"ÀÇoüLª@ N. ¹@ÔèÜe¯{Y²?áÿÿ[eq Aa*vNd[âñ¶÷´¶Ä8,ªë×ñ$å"°Ùð.t õìà r¯.³eÓ©T´À6æZ<ì¹ ·bÐ!Øâ%û°nÆI2øk ¦<îl<_ ºªØ¾ Óà´qYU«VpUõ¹ YCNø;øªJà:?¨.ï[ÊKºF}þÇÕàé2 î6«í/!Ý~%P²ÚéêÕ "ÃÒõ!: =ò ð ÿÿ¯ø ÆhÄ(J¡3· Ä¡°ÇîÌíÎ,EnÀÌϳ >õazj+$çàTÃ0ÝÀÔq%ke®îõÝ ^ñ:`˳Һs§$Gï4Ë_wAÅ:BL?t'gýÂâº]z¡ éI8ÞM?Nsâ2Ï^çßý0ØmW_³Ô¸×Ü6+C+ûH'(ðà´´Aú*#6R¹ñ}¨Àõv²Ú£(ÞsÂj±£vÑDà+41:§©óFÆØ-ív|Ç«éd$]"ÿc} Gb@±Ê!dñõÓ(ãâçyuÚêè~[t#f÷3 M)'£ñ§gäæEîZþoªnuºnÃí]Ql^Þð &p¨?º²¡ jѶl·åB!jbâÿÑ}11Cè-]h=çU^.sgæÌrNoó³¨Ñ±5ÃiÑ[D³,;:ûà;¥?/)ï$P9 zNY¸tküÌ EÂwô¯Br¢ôûÙC)NãIKMV»öT<5yÛ}ÚaWLòÀhUÌ4Ç?Ñ>ò&|AȰIùL}2¸h.r¥5]Æ!i h»x;)r'I,[y.¹ÿ=ép³W`S4²? æECEQ£(ãJë¾íj÷v+»)ª¸eFDiʰÄLPIê²èÜdõþï÷ò±y~}[êþBUe]>ÝÂ`hJù󱫯Þjµ¢À«jÍ]¨²ÓaÎ FÝ^;Í)vàDöAeÀ¾_ú~@½¢Á*àj$±>1÷ T÷5µ#»êÙ<ÄI#CO8:8øÛ6«dhTj£\DZlvÇØ<.oj3>T%:îðYaúÌ~cöéb²W-÷Æ ]º¡Ö^´M¥gºOrÄêõ °1WdÂH,}\0E 8p^æ ß9=`Òæcë¬e@«fëLÅqâªI@Ö+¯£Àõ³z NÿÕ¥¥µÄ'§äU'pù¸øè\JDÝå|¦Ù²0lÃsàþõ¶wÍ vÒ«.CÒöov\QÖ÷"!I.}¯óTasܧD<i o)´4 Å.½NuÞÈùU6Æx°õù"úH8vÔ ¸Ð4Ýï¦?fÚ6ÓæP0ü ÀÓµì&A< ¸á¡RõÐJU{áúÿÿÑÒ$r ãºÌ0`}¤Æúç3_GÛ,!}o´uí-ì{Vf©vàsÑBïtF®[Úoç&º°ÙJ²Ð<˨>½ÙÅ5öÜ3t5ÀÈ ,»Zsྱè\äi$0л¯O¼}pbµ ÐP/=ÍFZØ&UÒ¹óÂu»×&ÑG~`°èÀM§ÔÄ^¢}¨PÓ<µTïöt9éí Û<¸VµÁ±R2évS¨-|`ÇÙäm1ÁTCôûø0ç²iYÁx©pÀ Á¶ mÙ è#$|´×ÛÙ5 Y±)pÇÎ á¤!Zª@"zñ=ü ¬%.:Ðæ,îÐ4:4ÔE¥ØëÒËÞrFÎ;N¤wó6*å6Ñ×ï®·ûdà® !Ù"h{PîßÒeí$ÂT +ëøX«ø¨ý zóp{Àú:z«ÿ ÚäØª[ÿ©Ü¥f`4j( L&}º<Äc=,£â2§#4Ý7ZþxbòÆ»D9´(,s$ϧÛVÛÝfÀ7ÎKÅ¡5r¯ÄU£«ÀÆôâh¬ÿ"QÚà0y].3:ÕÆ=+;#ÛnàPì|À£Þí$꽬¨ª\Ïg~àéÚv¢ `¸¨ÓZÓÆÆç&ýÿoiÒ¤Ö4¦m"JPe·3ç />mÝÙ9·÷IhÄdH,Äjì \} 45EdIT^üK§ó2b*eà !"FâùÙk?L}r¬×@ÛëqÍQ÷K;e2Uõ.ÉÊ<×9Vºº°TÌÑ^FÀÈf¢%1³jñH\üAét¾ß~~]GúÒ¹½mÑÀ³"ÓÒ¤öV(A©üG^£G}LØÍ EpuRì;Ü×8Õê(¬á$³¯Ý©òíØösxmYµÛÛ¹¤-j_À®)òá°õ %°æ*[Êw¡yßÐûñ9Ü?êfvÏx¼÷§%"·ëÏe;(¥5 ¾JZXÏÓe¶óõ3¦íw »Óë÷õ]o9`!M×:µ±Ú)[î \J|ÿòÝO4`t¿ñû·XÌÓÃêEV¾É"BI éÄ«Ûd) »*jì×¥éìºr{îM«ÀøciV,{¹+&va/ vÙÃÎr$÷â_ ¯ÿ-#i«¬{*¨¹Hº;º,³nðZ¾2ær×W«·¹ðÍË6ÕdEêC*¬é99QhBE ÛºDñ<U!Uéÿ§¯ÉËçûðeu¢Êîò»ÑPÁâáøaç/`ýïCæ9$u}]º&hqúÈáÔ¯¢0ÉëLWîñßzdqúý$˺;ÄFZݵ4297-#ÍÇL(}dP¤ºÐ)çwµj ùòoÀ£)6Lo¦ó?ëèíG¾Ü<ä;Ñ4²U§?ßh¹\åü&|+é¯qÃ'±nT¢öZ Ñôø5¢3ߢï¾ôÇp(Ç è<b $d¥àkkY«ë?Iªn¡Ò>#g¿¯ñTL×meܲJ»¼|4Ýõ^Éã¾³,-ܶ#?ññúv¥zü8DtÛôVµÚ¬/¥-ìH)fdèS$*@U¥¬6¬F¡b¡Ò-6*üâÏÍàÚð´@ÉTï¯]uÒÈøÉÉuZÓÆTú¸b§ç°äåg©(ücõoïé7¦z]D/qsj3¾!àÆëÊe.[¡w-.w RZÀçä ä3J·ÅÈsêû6Ü?|ïêÆ~§#EIáuRµÜΦn¡ ¿×õý §2bÿ.¨©íÈeH*"R¾ ËÅåóÌ4ÊDV´Hû¨tYO³Òõ<ñaØÓn5/:tÁp±GȧÏ2låjdË6Zã "$D¨Åî/)n[Ùéé1iÀÖi¶´¶>óëôÀê¶ÃÂÕÇ=[À§ÍBsRv°äÈ#ê³Ë-Ë]:32;²°¨º¤dîÈoÜt¹ýÆ6]9ì©*§¥O3©è*Àiv'j\ÚN ³EȦüçÚ¥>ô'ÖÒ_£É{dL*°Dá"qüÕëâð)ÂzwËç9å(´ÂCàÊVpü}+5K X 8éJfF¹ :ï3¦pÇÑ¿ñ\ EvAéæ_ë¢gª(Ì0u5= A¥¥À*.iÚ ãÕ?ßÿM#>ZJ}o¢èÎîÌfæ=l*i$j¿Awmj,úîç<M±û=T׿TÐÅnQ 6²¦ÞjVÖuÓb¶:=+â«M"lbwÅIc£ªJ£ pmúîÂìXåÄÔ¢ ãV®:LÄrøµ¯>'¹Èe+×w:.ÁvßݯƺÒ(oO[òžEnXëÀð¥EüR² ` 8LH W Àytr¤¸©>òÁHe°U<IV¹(ºñª×·µgDVÐöAD¥Î®§[²AKLf½§Ì"¨m 3=ÌG#Í õDæ3M$FÖ¬pßÍ¢iæ[G (Ye·_r_@¦Ó¹a²{êûmÂX÷þØÒ"¢$ðÓUuâ|úÄdF~!'ñgñå| ýq506*¾ª{G¬ùÒçpøýÂoàPpÆH6ÕlÁÿGLÝø¢vU?æ¹6ãs¹@ÍGBçÞ7[-"f"úá` áÓËÝHG+'¿0uEË Â@0ètZÛÿÿ?ú}èôI[;jQP¤»wÈøÃdr·ìíÚB( ß^7 IÚÝ© O>qvlÍ +¤ Pë5Yݦ¾!X} *Ô˦»Et ¨mkR¦ïýÿ¿èsôÅ[ä¢Ò¥3»}1<O³;{ézu±YÅîM ("ìU£¦(nKæc ÀhQãR$©ö²²ÔËïHV;Y§Mîùq´Zß*q/"oÑÀJà ۮk²\î$)¬ëF¦@TÔ¯emûLÌgæ(|Æ|n6ÓiS=@à;`%EÓ@#u³×wêôÛ4\ åêEÚñ¨5;=úw¨rå69'ïÞ^Ã÷ïèì#ºÖ N?þnÇ-a7ðz[Ïç{SáöÃý4ËìL0]Ѥ Óuá(¾¢]{ú¢è R`³º(E.ÚN^ûíDPaÐwÇÛ@ÉaögÊÃÞ°}¼ElÒJ¶3E^JT<Ùï^Õ(#Éb®í l=d¾ègûçWèiG5ë&K6¡AFÇÐP5èI^̦&K¹0CÑT£v4@^H&(¼ÞmÝÌA ì¥E)ÕâbWÒÛ9 T¼§»8GѾb¤ HÑfz3|ýHF¡¶å/¼~lVR5)ÀNt` R°´I[úÿÓÄÔ´öfÚµ4rU:³¤/>A9gÝÛqä¤Á)oýÝl£&C\åU³¶Sɧ@N âmMÍ. h«)I¬zDZô´7´&ÑÎõfjØÛT(Úäã¤Üô9wvÙÖµ<@ññ]ßmqÑ]-EÜÄP5}çsó ß¶XÌájõC<÷³èqùB, ¤í`uÏ_«Dõ:}ã¦Ø±5¢,RÃzÄØùÉ3áCJÊOy§ðu8D@ä0äeµBäE>óôZ!a»ÍsêS³6¾§¶jxMÎAEÕû0ãY=ý{ÿYfµ-å =Z <CÎz®µø~µ~ úÀ[×ûþ1±=Í-Ë\ÉK°ýI÷t¸ÖoþhÄ$>¡[¡Lên ´=&ò72öD¹Áx<aß¼p<\ÙøOd]ÿ;îe ëgt®ù¸Àá_åþäz{Ýî¾>.ðídÛºtE¿°¡ÞåÌu}k=ð½xVUÛ3"@hê+fÒ/â#² xzH¬ÀÖáÙÔ`ÑK ÑfýÉLÏ áéÓscÌU&³nnf¿¦øÍ;FÿfaBË :T©¨ÀTÁùÞ±Ì:pbÃg©ÝÑTK®Ð?ÚÀt@¼Cï;PÓg1Ó8²¹sn W;1ðïwÁÙNâàÜ\¤^×9yÁþ`êZàf y âQK ðÿÂÀA/¥<CB¨Äîéòâìfvºgvº=rYs· öçËbnÚ¡ÍFüjIÄt;Jp\¿Úl Ö|Ï:>Î+ÐõìiNÙtµÚµÐañL1¶FÓé»àÁÿ?"<H9lØTV´±(¥ã;ªÐ1Zm@iÎ4X2@On RìÅKZ©æ£ÉwÿüãÌoê¤IÜ¢('q°ü^¿]uT 8óLLò±$ õáÅŪ6¾5âÇï@/õl)3ç¨Z]*lO¢jUHã m¯,»OÑȵ6ñu_¹B6@$¨wÄ*C¶uí@NÒj[ù!6÷¹±'VNGÞâ·b7гÀÜIt¢DiµX[<ëãþP»?ºå¡ $/q£®^ÿ?æ3rÈ)½Êr î¨Ê ¥¾YzæõL;¾1T*k«ùhø4«f µ4%Ku ÑDÝ·=ÀÞÿIlÙ/³dÓÍ©ÊÝ9bö eæàD¾×·ÒUMIr£*[Pë¡RÑ>MÉ)«4Çn4æäU ÷däH!ëù|§ïÍ2-*(WØV®C»éºæ¦,µm¸ ËXýÄùXÈL ]è¯^ îß7ù~:[&®hCà*ù¨5C©¸³Ù/g\»-éåûpm@@B[¬`BZ}ïd]rÝ¥ì2A(ÏÌ:Sñ¤4u áúêKµòÝQ¯êäõlo{ÚÚ®WëÕâIeÕÿ]ÕÐP ÚÇapL8ºÞÐû¨«éI¢ ¤_j{FñÿÿO&Ô] HKK»m|o¦â6m¶³ó±óæ½+_|0æGoi"̾´~;Ô±pqXΨo¢XeíþgØ)~6"I+ 4]ñÅÔY&¡tñ¿_Ý jîô°³¦®Ò9óe=Ð!É×ì¾ôé$.`r2TäÕñjòâãà Ý"¯Ý {ö-Ä{f7DêçÇðöNõz±W|eH ëO;¹¿Y÷ôüm°¯sÛtuÕ»þW ê¾j?áÿ41Ñ@Z)-%åÙ-~ 618k,@9 ÀÏ# ÆBÓFïÊ¿înn±Ös·SÉcûaÿ,hT!뱡Aë¿M®·Ý½ëAêsXû¾öë³xVÄib½Ä§6ïkñôüò>æ\/=¹Ò=K?¹¢6éZß4ËÃéqY`mê==q½«xc°dè¸ÑjA° ${i'¡f ¿³='¨eCî<O¨|Ðxç÷qäâ)j×êív¸Jú=ÿrç¼Þ¿¤¿Uµµïpz%S¯¡´ÊL·x(éó d«]×87ªûmÔøÃÙ¢19¶ë ec"æ 6©_øÇcÿK"Vk-¥5´|@WàÙfû2tfVò&¥ÇÈÙ_xºå AÞ[,«rÍÿÿEC~ 9HB¬îñ*%¥ûèíf12uÑÿ$,T /ëPlWð÷ê4°ðn"1k¾/dññî4ÜsÇ HqSBëKí*6oò:36w=rMVà³>eqÛvsÝc /ÄæAÁåÄ.Wá)@Ý[X8 §^«+I¥Ã}{¦´º&j2K-@a)9j³.Ã{ýÚ³h`ߺ(&þ_ø&¨Õ$´_á÷aó²þþkËj¤~}ÿh#Ù´]w¦Úg¾ÃÐ_ ò.à¿TÖÌ¢/øîÛWã_Ú¥§ÏÜηçªîàÍÔ÷²$BØi ¶äè,ñfJ/Vey¹ÓÂÀ|Û,êzåÏ$FDîëTj¥²Szîåë´[&|4&<3Jï¹WG¿mÇgÑsEV¤±Øo3Û X9Né9ÝqxatÂUyÁbü¨Äý$ÄÆa¨]Óݪ>#V1´80Nùºº¿xù¨i¯pÇ6ãjÀtSÚx/NÈAÐ6®»6GlRb©tFwÍf4B ,DwÙTq¬,[ðÛÔ\0ÇR+AÄmÚ-î¦ã¶P[,%¢²µÛ' ]L"Moá¿=6>D® µç`¾R¢ëJ/C¶g®ó¹Ýôê×órF"r®³òÒ¨ÃÝç Iµà $/QÖû4FDJÈÄVµh* ßÏB3Ä¿¨zz¸ .Ã×t³±ûïã¾w ËHsí¥KD$W8Ø3v½Ùï¬Û<ÏsíÇ(ýÙ}ñÉ8ð/úöb RjlU´ ÕßaûÛåÖ[U.Qâ{BäCøùáH6µG,íË\øÄñÁ²!TGi%Ц¶ÇÊ«&±Zþ#ú-hLÚñ4]Y{<1=f4H¥°®j{[¤àöÐâ0"ÆR§·æáçuöÝÏ|w·jù¡o2Ó5Z²ã&Y.M2ÓåIÅ,¦N¼Í¹É<©è[»kÚð êÌ\YÞt ¶Xº8ÎÖ,¦&vS3:?bÓô"®`ôÔs¥ò»°ØgJY8jÎà¿Q·#³Up!sWÙyØ2b Ll«Ûç×u»3»QôÖ ÅÏFj6` /úòäx±à ¾ïVNÝ6ÏOåEԪʦ´%PÜà@ª*´>é<'ãdp¹ÈöþGÝV×U V>É@ÐëÖ߯ÇÊ:Ï· ÚHa!.üÿ_aãDA"Ë£gf Û×f5në¤,B¿|dd0-"3U6 (ÞÏ:âZ'A¢´+ó¯Ðu´¶]Uÿ÷ElÒ¹ vØ72×ΣåF+ ;!ú¯Ò²¶ág`þÖssô'.¡Z¼¶a~´W'°¯Ó"c%tx¾7mÎ-;ÒKÇ+¯ö¾ç¢êåVym¯ 'î/Ëü±Ï¾ã4ôN r!Û\M»5F8 ÀÔµì4Á$ní$} ª <¾çàÌ¥ ú8PhZEÙu#°µöîzwvë¯zñ¹ïóuü:_°bÐzD Ølèð.mãÊêPyÅG$EÚÒÝ^wu=_¹3¨õÐ6A²õ°¾!>bÏ$Õa±oÐã/T{ññ·æÁ:¨èqÀ@%ßÍtC%MYêíª¾¥KyYj°ÉÏ¡ÇÓà_lÆ#ã$¾û4É~èµ_¦<¸ÕÇ÷Uyñ¾Kß´î´ÚÛiá;âòû*7Ƹ¸óg;WJ®±kÚ,<ÎB¾\.©F¾÷8ýXÿ0*l".U w¿~¾OD¨ûílÙëÙ·7+¸Mrïü;¬·>ضä5#jP°^DÛê¦ÒB>fyÆZö¹¶FíªjÞnVÏØ±aW4Þý@ccüI©]O2*¨%Kòn¤ü帱Ùİ`èJsmë ÌÓt|?<ÜUTÚÈä#§('Â5+D" ý²Ð÷ ÕÌyá?ÏÊ]Æö0ª6ÙtºP¸õÅ£Ñ`ò{Ê~˧0Ulwwc&f`Ç_ÿÕh*x!9ƸöfÿÄË-ñ¬½åë?|?pÎÍ$}¥Ï¦öü3Üü; ¸}\̬mNĹ{Üsÿ¾£ ie¬Øò~¿wïÞó/´ÈËû·ªºÐ0ÄÜÜeP ³©íÜà ¬c§ú/mk»no/Â0N¬VéÀ÷ñ«ô®µÜ¦Rî*Ë_7ó5*¦Î3Ð}á-÷äÃ]²tûô0t%õ²Z.=a|~4È:2¯(Q§ Jw×*&Âä}<ú×=Új*^k¶Ú˸ùòQÝúýÌáÙ-ljå>½Ø³s¦!Ü©Y@¤×ßÑÕng²,i9vô"¨ÒKó"5+1§=úuãMö½.±÷l¡èj8BÞC=wù]0u-; QÔô¶"Úàb,þÿFWîLD¥GJ_3ª¤ôÎÜs_稤äL\Zy Þ l©,Ä çÝ£®ºÑi/·e"À \k§|ꮨ´t®1sO=Yw´4즰Þ|þ2=ç`Ûð¡) ;Ú¿±°MÕ½¹ãìÕÀ1á÷ã¾û' E7.ÿÿ~.L&XJ¤7-öI[ÏÌKº`qgæÎ¹ó8G¯UvÔß¶mX°î¢Â¢Ö9àÚºy$A`jÌÜ"<Å ûp©$«ÝÍ+T6ç2"Ütõ¾Aãùb éôZ¤¨ém#lgû\'U*ç}úÖ.AH±¢}¤=ÍàX, Y§Éj¾Î§§Ù@¼4ÜtR¡T(§1ñ>Pß(1# Z²áì¼UÃËóýÃòÉ´ú×T>g¶±ÓÌÝ@Íì?ÐÆþþ3Lá?ÝpÐA ´ÌûÚ äÜýWÚã,ðª=|u)VÙÁs¼wPá¼ AÚðt®; AnzZÙ4òþdLü¡ÁËRB©çÌ +Â3ýÄ9äYlwJÄXZ|Mø©:!M¾hKÙÃE{Î{7±Ñ¬Ùñ ÜüêfâÀJ4®Lèã[ËÖ0¸ÙJ»þjä(E©&ócíÞ¹â5å=¯½«YÙ@¢jé¥ð2Ø£Îîñ2áÏ÷å3ý]u&¿_lçð`|MiÖ;|̼Ó-±8!j_ f1ÊÓ¿êéq^¿³ÖóàUYØÄ¡_ïõ@+É :³KÚs¬`°w=ÞÇÌxáò6¸È°* x8Ïæ)rðÇÐg¹cAõ}*¹» ¢§3¾.ù88ùëqæE'× K¬A_?º©J.â×dyIlËkï\#AqrEìv;'sS&F~¼¾Ø»8?skuìN³îÓc¿©Û?ºÞÁ ø iúÏoñëìC¼'l làµ9ŨmÕªÕe( %íÒålk9ØÆy )n@G,ija ¹Ò³YáuêæQ!öÝã§Ë!íuªÙb'´Tb IÇùÛqpàÑPÁìº.v¾;[ØÍù2Ò]2¬ õʲ> äa`ø*ߢ"^à Iü ×ÒÌB^Ô¢±p®è(ÞTíYϳ( ±,Tt¡WqCi4» KRßm¡Æ#Å¥9[:âîß7Ó¾Öì'ÛÊ~¶/ ù EÃc/º2îüÚ{Ä-.êO éൢñÓQäµÔÓÍ}Íwõ °ù¡;¾3¨W«¬Ø6EYâeÀY fs%&ýQz¹Ú¨Ú¹ÂéÖâóÒ±B8](*ÏLï¿ÌSQë³Þf½)¨S p-&1ÞFH@[gFûxxÜ8]6Êý)ÀQ[vHÒQuÃqÙ åq÷ãØ¯¦æá6¤´TÙ°èµt/Ôu><¿×*àÌ-IÄÞS×rD_Îi³bÅ6ÒE¹Ü§bÙ?$F#cê³B?±w\*V£·ý{!iRé%ñG¢øï Z6PB§ë4ã°ÙiG ótCgK ò9Ûìb=¸»QUb'ÞÀ.ï! |ÁîÒ¦ á¯ôY £yÛKÌXÀèÚ¶(ÆÔô»y&10$hF=&eÞe:M¬+`5ó4dHVtæÑ/ÐKûsô'l6º+À|´ôP°Ïøÿ´`8ÂFåÁèwø 'þ6£°Áæj¹Þ<÷/_ê?¯ïßã96õd],×¾®qhüzôʽwk.RìÑ5ë¡cNÎ0û¼1Ý]µÀ RÕ§ÙÓÝ !*¯Í³åº½§À2¹òf©V£Bg¥KuÊa¯¸êpYëp#é],1_0Ó[ ÛöäèÉЩ ÀH/ÒÉ[UqµQûXDdç!H{õ 1aúå·®ÝNÿAÂ/@`8/bPÅmÝÜ4|úÉpÑW©bj0*a¼1ÙÖ7;¶ïÔÍcSgúêTCU@ûËÊ>(iØÍILY5/Õ_@ÞðØõ½Â}ʽV)Òxº¶(زP¶7h%P! D}ðÙö³41Á@KiKqfO%ád({9gf{Îmþ wU¹½Á¸Õ«hrØUG«-§K§`7Ë8ÕDü¾ Ì8á¨¥Ë Â16}WmGq^ÀhµM/e]n²F·æ5fâyX!ö£ù弪F']6°Mnô#â W>?C/àÆ©JZUÝlÍ£al·RQNÑ&k{¼ãáw6:,S4iXµyM¾DBÐÆd>&mÀé÷qQ -:º» ÓT,K>Ì2ë¢â/ã¹r¯mrõ:&yïíÓñMÊînU&¡ï'ql$?ãs(/ýÏM$+L}ñk×é[´í;j¹xWÔ_Ã"ëAIã\îTG ÂÅï.¼[ ? OÂøORQzÔf5Isج¸ ªyÐéf²i¤:y¨*ÛF1U\¥CF£XzZª>"ñ5¢Vèí§[Ü+.Ǧøª³kJ Â0 J¢òa¦VÕLÓôÿÿF?À»Æ«iDüÞw¦âáâpàìÙÝóî³ÖÀ̯}¶bv«LÓ°yÚ)Ø)* dâL9bm1lèuck¸Z'¯Ï7Ê(¢®òc=êP´$©FZçJ]§Úêòð ÍPO-Fí Öó¾OObYÕ&z^²9²&%W1GIC¸Ï´{Býlro§È:í÷õæ%sëqeç÷Ýlü°}fØ0nûµç¹Ñ¶@÷èÛSüûe±´°fr÷té ¸Æb¿->3ëSkf?ªr>qá2Qßými¬Xwi¨Á¸Ë»<þfÎM'9j|jDÀïÂVà!vÄ|¤ûW¸ËøLXóÊå]Åé¸{1UüG\gZRE1æSÄ¥l¦= HçD¼D8óÿKf¾Th®*ÒµÏ|íÿhNE#±ò[Ozf¯ÄaÚôêbCUÁ¡aV«ò}ࣳ ã<MiT¤]°ú=_¥°ÅÄJtÇbëH~´éS ²ËR¬Æ]ØO=xóöaÀæä¸ÿ- Gßk·D³VwÆaïâ'Ëçø õ{26¹ëQy¤®¯X¦oÑÚ¬¿8lF{\rÙï2èW>Êã]åâ>I]|zuoÆ©´ßo]í)´kº¹Lÿ3òv{àW-Íæ']ôknÙ}ß"×)ÓØ'³ ¬fÏc[xMÇlú¥ýÛG$D®ðeáE»ñëaPEƯV+Ñ4ô "4Úh<ôÒ6éÿÿ½õTÓ¤ÖØZÐT ov /xXØ7oçÍÎÙh;S½¬¯ qkéÂ\WÍçº ±Òh3ëÎHt¡gÝqÛa¾vÁoVÕ| YRÿ°XÞeº:N¨X7®Ø£e Ç$ÇXǰûðþ¡ÉêHÜÿ8¯ÒM±Tp*vYëh¾blïÚ¢>üScÜÏ`wç©sÍäÒȨA@QcQ=GíIx<È_3òã'êu-áXö<t¼Ï»po= Ç©¼ZMûÎä ¬øë<èà8 Z>u5i ¹&¡9©ëÌãr¢Þ¾ÿvv$ µ>ÇJ±v´ý'xLH #I t²ä9Í6eº|$ä EÎ+#[ÿà(²ýEé¢N.ð8 Ô4zOÇ»fMÜzìFý ÅEx¥yì,Sh}Á#|Ãtw¼øyÐwHãì¿×&Ó\¦P8'zÒA¨\t½C]£WÎÁäøJùì÷t.. ¾]3¼Ú(Ê0:çÎyPÙSüdAà:ù¤â%«¥ÿ+ k{ò£Àl¨];0¡9ªºäüÿÚJõº6¬"MÒÅ%Ñ]p©^\4ènA]ðâ°ûánµ%V³\âÎÉT]#t/6 Wooü£õïßäftÏï?kSTù6÷*lïåDVú£z©ã;Ѽ=Ôú¸I¶@W[Ö«àñÂÝaH+à'zØkDzåj>ÍvMG'3)2ISmQ!gQ¤LhsÙ£K1mô[6ĽÅÁ¼_<¤*#P5)ª LÉsýr^?ók±çï=J¨B_N "+râdJ¡øW¾ÎFõà7<;ìÇC4Úï|§5 ^tꡬ÷7á3ÙtÆ·ØQe¡ù=aò6¶ÙÊý°rº'))ÎÜÌí{×A1[ÏægSY|Ó.«,$i6;=¯^^-KH=Ó(VôC4âýO # 1ãÄîo¥vñ ó' <¶1¸(róʪËǵ3t,YD&ÒTBèLÂk©!ìÒ¢Qª6"åTØ/²çUý*ÀÿRþò#ðÃ9ýÏóï£èl6¸.´Ôî9;ÊkÁçÒ µÛ¤Í¹KPä¨íràðºØðaÙÊO÷;ÜK|!×4Çó]f²5i^FLÐjeE4àÒùbMÕVeufp¸ÊqÎ8xA,ðv2Ä!¤K$¶ô Â,¬'¢uªé$¢ Ãô69¤®.ü|c#¯«ö7¯gm©¬þ©«mIÂÛunwdNmVRIÑ×~B?¼þ@QE¦±µM×D·ç¿øqør=ç9÷</ê!öæ¶só¾MòÇ\¯üàêTcÌ[§A¢X6×cÛǯÇìQ¹)SF|¼Ò8jÌnól£©È ɺÂ\j½¬ñ.¿#=õÎ \kaãçØ#JZ1%37W´zFDÒ¨Eç¹_aÉvBa JÂ6¾qrÝ>PÞU,/¬ï+lÔöõÑgëò í|1ëK fOä¦^¡Ä {½Ñ>ãEÀZ}-«*{bÔþóã>£¹&§À PðyS¬ô-3!/i=$ñ:< &BÄêëgùy¨)l»&ÌÏsÎÙÈésH¬¿ÅPrãóùEÓîö[HU¤\CÔÒ» 1¾¥ø¢®-\±0+tÃæËk£k«*¤ÞoÜë£!$±ñ}yÔëRdÝg~h%¸² 7¼÷Ñ0¹|+;Åýºï ð+ =ÏåÂIúÏË`nÅ×Ê}YWÙ " Y¥Þ¡~ãL;i¬3r1 ²¢eÄ×.QôJþt h/´AÉ>È»?þ,ÉpÞ{æ¢ å*Z|½on®×â¦3k*CS#Ðø}ñfÀÕUèFÓNV^Ô.®3wÒ²Æm¯z çîÎ[ÒRçãÔÞ(ëUT.¢ôÍ^øo[@-æÀÿqàËâRrDÓ1ÂÙMÃQ?G¦fp°AÕì¯âÒQð)|RNÄèvV~ÿjâPÑúiöºÛ/äH<< ¢´fát²LÙaú5Ë]7³C&ÌP wß Ä7$ÓÛ~ß÷U£ÒaßNÒî÷}¹8çt~ù¦>Àpçïr§[Úaúx¢4ιA5+aÇ£IïÇÖÃU¹]Àøwßïâïõ ? zIæ¦N3ÞGK:d,iv-jö¨ç7 )³e,øy/º¡¬¶m6«´ÌÆÙãàO Y¸Ñx¯®.¬råï Cö0£»&q¿ØýÊÎ}<a$õqÕØ·CuáU '©ç"D²åj?^^¿»ªQò6 ò#ÁÇ äû[¡ã5\#ÇÝP7·/:gökmÀU í×ë]LE¹ ìRN×9e¶Eý (®B¡±vm+ëí¸%N8°ÔÆZû¶±DÿTÈ1Í.çr§Ü^CamVÄmÚn¶ ÞÊ»G×u/µGáÚ¡©0*À¿ Rñ¶ÉýÁí*wÒß*Ú&ñ¶»²Pàyä{R4«Èª0;\¶>¯b¶Dgá·69I¶âÂhh|ð®¨vâ¯"k¢¢xníýïºR}Õ@¥%Sñ?¦ÓlÀ:h g;×Þ #õµ?7ä¨s±ãFuN¦+kXøì{aå@Cã½S®(öÇ;h>Õir3Li}ÞØà ¹( hh$ØSò1hFy}ßP³Dg.TV9]¥ðSÛvôÐ8¬?p0czë⨺¶(h©Pº¥t £ñAã³ïøà Áµ@¯©3çTÐôí=;gÎæHQúa54@<x?ï?2òÄ ¯÷!ãñi[ÌF^Ïe`®úÍ:~[ÅV6yboowØe@<±Ç5ÄöÞ pÚh#¼^Ú<é>è¹}_§jEG¢²â ÅÔ©-6v,9t£·öÆÜ¶ª²-àR¬£¤,'\@·Ið§ÐÌ^ È£lküí óÄ»Ââ6Ç®½KSY9ÊÚ;(¢SG.xêqÌ ^ÀÆ@pü%=!H+4z"æ©©aõ"D"Eï¨ùCVìñPñ¹©6m¸GËåý "¢1k I0 ª[)ÊÍ®àÑQv³`×3ß_þYÑd¬ÁªR³!µV{׫m§Ù¢SÅë¸e)ÑO½r>Ò½8Gc(®üÓü@Ô+'DA9DÐJ0:IafR$eüH&8±@Í(à (f÷´2pw¾w{oß®2Ió¼8¸¶= [2Ù@³J/¯È§Fý´¨mƹØåˤ]l¢§1A~¶2 +òl¹ !EÔ*Êçß!:®Ë:*1lËm!ÞFL¬øë]9aD¾¼moð ï·ÚÓÛ±Rn*.p³·';ítátuñY²ná³ì|sð3 BÃÛÎÄþXmw5bá6,7T¶Þéhyß=lßèF=ÃÁÏ~*¨£öß}@i,.î0Û¼eé¼ÞËäÆHX/ÚoèÀNû¢¹í¦ij/ð!ô·S)µ¿á0}o¾Jn¾âÆîÈgâé|ª Cl²Óײa¨à# B´Æ¸;@¦»éæóM¼Åâ'ävGþÇèZRû2 í¿#svKlû<ã¾d¸Ë%#00? Ð*¾èr,²kòtMò .(É!ñÿ?ç?r³*)(yHÏpóìÎÎö=Ýæiä"Væ¾íÓi¤@ ³I G,Õ"£ë´¦]Å&b·½}ÁçΨ¥ö0ñ_ä iy"«ß×§äÍC²¹ÍÈ:Z¯_ÄL)X'ÔT&2¶Ú¯¬uU¥¹c+ÜøÝAðGpY GvÖ°&8ª¡ãÖlë_ÄÚKS yyx/þËRóŶÆ#1ÁW¬¦Öé¶¾xÀ{d'Zé }[LmãáøÄ±rIa: EXãbU+À÷ìÏÅ·ÒÑ1¨nop&ý3 ÒùÏù¥ru<é]Ä_ÑZç:å}¿Æ[Ý_Í}U¦ÉN|ÇN$t#çhݸ onÒ$ßÎþ«)º=½;¾½VÙ&ÅÁÌ¡¤+þÓCFùhà+&Y(É«¼¿Æ¸[mÂý/Ö°jþì ÜdZnù1") ¤=,¢yPv¤Óe=ã*SüÖRó9;¯u¦§_û!Vºë #©EÙ#£blϽ¼Ð ¤¬²tkáãp(yÄ.,ô@úÉ^1¹W^Xó÷O HÆ àçûì'#Q@Óè«3»I6çìÎîÎÎXëalç÷N®qþHQbêtÆjûd{Ò óÏ»öG!Ê¿"}ÑbcÏ`3@Y¢b¾ÚÌ©+r¹ H¾eçíÄÜТ*¾23ÍrR?º²¡(Hw±ÅL\0ñÅ/ ñWü_?Âè$ÆEQh½]èâÌ9I )pÏ̱ܳM-Ê%2½Bå·8á¶Tð5~oJE ÀN¦lræ'#êqÛKdÌ8C§¢$5+y *æ1²é 7;«¥%HDP._®/§ßëTy c±,Òx´bùEA§yÿÝíù"nîðë&/èoɸ±GØnk/.²«¸C½É@q¹inf®Õ×"ìFÄjæaö? cÒ±(è0ñ</FÞA½/ÕK1eûð¢H&þèÆ|&Õ(Ä´åÂÁÛ}}sæbð <ùBH¨>MNMßi¼}_¹öþÒ@ͶY}h8²´ã%Ä.é"¢qζ4dÆQÏ¥Kªª°)ÓÐúìzíq*YõlÅ:[k²JÛúó»S Ý4Í3S¢ v`Õ8zURÉ 2yÜ X&^À0v5üÜÔ2i üÛ7zÉ>ÌPZ ¥ßÜ(Ñ9â¸ïðû^ð:/Öªègn;Hí ÀÓÕ5%DQ C3H'q~AÿÿGôÒSOe5ô,¦Ð9{ ggåî=w÷|#ݾ¨ù×Ñþ´{òä·uå-ÙH¯;+¿ÆDÓ0 ÑiòëYÍ<¬¨_`|©á¶\z^๹ ÉÃÀ+}¾XûÀºó ZóÁCE9P¶4¬ ) )ÏPéèF½14îC³(9«Èç§oõÕôév<úúÔÞ.h>3YC¢]óïÓoE©m¥?ר*J&bÔ9YNà¦uªRÌûEÈ+gµ2ìæJ=+yªU}Û\iÀ(C ßUÙ2 ÝKW|p)Ê'©µÕlÄè ȬÅÀw63àÂ$#ÍØÀ0¸ÒùùlJÅXPª8Ó ÑUkz1³=... [truncated message content] |
Update of /cvsroot/java-game-lib/LWJGL/examples In directory sc8-pr-cvs1:/tmp/cvs-serv936 Added Files: BaseWindow.java BitmapFonts.java Blending.java DisplayLists.java FiltersLightingAndControl.java FirstPersonWorld.java FlagEffect.java Fog.java MovingStarBitmaps.java Polygon.java PolygonColored.java PolygonColoredRotating.java PolygonColoredRotating3D.java Texture.java TextureMapping.java Log Message: Lots of changes. Everything is now real time so ALL animations should run at the same speed reguardless of frame rate. Keyboard input now uses only the Keyboard.pull() method. Also changed the class names for everything. FirstPersonWorld now limits how much you can rotate the camera up or down. Plus some other small changes I cant think of ATM =) --- NEW FILE: BaseWindow.java --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/BaseWindow.java /* * Copyright (c) 2002 Light Weight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import org.lwjgl.*; import org.lwjgl.opengl.*; import org.lwjgl.input.*; /** * $Id: BaseWindow.java,v 1.1 2002/11/27 00:16:34 lholden Exp $ * * Setting Up An OpenGL Window * * Credit goes to Jeff Molofee (NeHe) whos tutorial this is based on * * @author Luke Holden * @version $Revision: 1.1 $ */ public class BaseWindow { protected GL gl; protected GLU glu; protected boolean fullscreen = true; protected boolean done = false; protected long timerRes; /** Creates a new instance of Lesson */ public BaseWindow() { } protected void resizeGLScene(int width, int height) { /* Reset The Current Viewport */ gl.viewport(0, 0, width, height); /* Select The Projection Matrix */ gl.matrixMode(GL.PROJECTION); /* Reset The Projection Matrix */ gl.loadIdentity(); /* Calculate The Aspect Ratio Of The Window */ glu.perspective(45.0f, ((float) Display.getWidth()) / ((float) Display.getHeight()), 0.1f, 100.0f); /* Select The Modelview Matrix */ gl.matrixMode(GL.MODELVIEW); /* Reset The Modelview Matrix */ gl.loadIdentity(); } protected void initGL() throws Exception { /* Enables Smooth Shading */ gl.shadeModel(GL.SMOOTH); /* Black Background */ gl.clearColor(0.0f, 0.0f, 0.0f, 0.0f); /* Depth Buffer Setup */ gl.clearDepth(1.0f); /* Enables Depth Testing */ gl.enable(GL.DEPTH_TEST); /* The Type Of Depth Test To Do */ gl.depthFunc(GL.LEQUAL); /* Really Nice Perspective Calculations */ gl.hint(GL.PERSPECTIVE_CORRECTION_HINT, GL.NICEST); } protected boolean drawGLScene(float frameTime) { /* Clear The Screen And The Depth Buffer */ gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT); /* Reset The Current Modelview Matrix */ gl.loadIdentity(); return true; } protected void killGLWindow() { Keyboard.destroy(); gl.destroy(); Display.destroy(); } protected void createGLWindow(int width, int height, int bits, boolean fullscreenflag) throws Exception { fullscreen = fullscreenflag; try { Display.create(new DisplayMode(width, height, bits, 60), fullscreenflag); gl = new GL(bits, 0, bits, 8); gl.create(); glu = new GLU(gl); Keyboard.create(); Keyboard.enableBuffer(); resizeGLScene(Display.getWidth(), Display.getHeight()); initGL(); } catch (Exception e) { throw new Exception("Problem initialising Lesson", e); } } protected void start(int width, int height, int bpp, boolean fullscreen) throws Exception { long frameTime = 0; timerRes = Sys.getTimerResolution(); if (timerRes == 0) { throw new Exception("There are no timers availible!"); } try { createGLWindow(width, height, bpp, fullscreen); do { /* The frameTime is how much time it takes to draw a single frame. * We use this so we can animate things in real time. * * Say you want to move an object 100 pixels every second and it * takes 0.10 seconds to draw a frame. Pixels per second * multiplied by the frame time equals the amount of pixels to move * per frame. or 100 * 0.10 = 10; */ frameTime = Sys.getTime(); /* Reset the counter, so we can find out how long it takes to draw a * frame */ Sys.setTime(0); } while (!loop((float)frameTime / (float)timerRes)); killGLWindow(); } catch (Exception e) { throw new Exception("Problem starting loop", e); } } protected boolean loop(float frameTime) { /* if drawGLScene(...) fails, stop the loop */ if (!drawGLScene(frameTime)) { return true; } gl.swapBuffers(); input(frameTime); return done; } protected void input(float frameTime) { Keyboard.poll(); if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { done = true; } } public static void main(String[] arguments) { int err = 0; BaseWindow lesson = new BaseWindow(); try { lesson.start(640, 480, 16, false); } catch (Exception e) { err = 1; e.printStackTrace(); } System.exit(err); } } --- NEW FILE: BitmapFonts.java --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/BitmapFonts.java /* * Copyright (c) 2002 Light Weight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.nio.*; import java.io.*; import java.awt.image.BufferedImage; import javax.imageio.*; import org.lwjgl.*; import org.lwjgl.opengl.*; import org.lwjgl.input.*; /** * $Id: BitmapFonts.java,v 1.1 2002/11/27 00:16:34 lholden Exp $ * * 2D Texture Font * * Credit goes to Giuseppe D'Agata and Jeff Molofee (NeHe) whos tutorial this is based on * * @author Luke Holden * @version $Revision: 1.1 $ */ public class BitmapFonts extends TextureMapping { /* Base Display List For The Font */ private int base; private IntBuffer textureBuf = createIntBuffer(2); /* Generic Loop Variable */ private int i; /* 1st Counter Used To Move Text & For Coloring */ private float cnt1; /* 1nd Counter Used To Move Text & For Coloring */ private float cnt2; /* buffer for holding the text to print */ public static int BUFLEN = 255; private ByteBuffer stringBuf = createByteBuffer(BUFLEN); /** Creates a new instance of Lesson */ public BitmapFonts() { } /* Load Bitmaps And Convert To Textures */ protected void loadGLTextures() throws Exception { /* Create Storage Space For The Texture */ Texture[] textureImage = new Texture[2]; /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */ try { textureImage[0] = loadImage("data/font.png"); textureImage[1] = loadImage("data/bumps.png"); if ((textureImage[0] == null) || (textureImage[1] == null)) { throw new Exception("Error: got null from loadBmp()!"); } /* Create The Texture */ gl.genTextures(2, Sys.getDirectBufferAddress(textureBuf)); /* Loop Through All The Textures */ for (i = 0; i < 2; i++) { /* Build The Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(i)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[i].getWidth(), textureImage[i].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[i].getPtr()); } } catch (Exception e) { throw new Exception("Problem loading textures", e); } } /* Build Our Font Display List */ private void buildFont() { /* Our X Character Coord */ float cx; /* Our Y Character Coord */ float cy; /* Creating 256 Display Lists */ base = gl.genLists(256); /* Select Our Font Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); /* Loop Through All 256 Lists */ for (i = 0; i < 256; i++) { /* X Position Of Current Character */ cx = (i % 16) / 16.0f; /* Y Position Of Current Character */ cy = (i / 16) / 16.0f; /* Start Building A List */ gl.newList(base + i, GL.COMPILE); /* Use A Quad For Each Character */ gl.begin(GL.QUADS); gl.texCoord2f(cx,1-cy-0.0625f); gl.vertex2i(0,0); gl.texCoord2f(cx+0.0625f,1-cy-0.0625f); gl.vertex2i(16,0); gl.texCoord2f(cx+0.0625f,1-cy); gl.vertex2i(16,16); gl.texCoord2f(cx,1-cy); gl.vertex2i(0,16); gl.end(); /* Move To The Right Of The Character */ gl.translated(10,0,0); gl.endList(); } } /* Delete The Font From Memory */ private void killFont() { /* Delete All 256 Display Lists */ gl.deleteLists(base, 256); } /* Where The Printing Happens */ private void print(int x, int y, String text, int set) { if (set > 1) { set = 1; } /* prevent a buffer overflow */ if (text.length() > BUFLEN -1) { text = text.substring(0, 254); } /* Load our string into a CharBuffer */ byte[] charAry = text.getBytes(); stringBuf.clear(); stringBuf.put(charAry); stringBuf.flip(); /* Select Our Font Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); /* Disables Depth Testing */ gl.disable(GL.DEPTH_TEST); /* Select The Projection Matrix */ gl.matrixMode(GL.PROJECTION); /* Put Our Projection Matrix On The Stack */ gl.pushMatrix(); /* Reset The Projection Matrix */ gl.loadIdentity(); /* Set Up An Ortho Screen */ gl.ortho(0, 640, 0, 480, -1, 1); /* Select The Modelview Matrix */ gl.matrixMode(GL.MODELVIEW); /* Put Our ModelView Matrix On The Stack */ gl.pushMatrix(); /* Reset The Modelview Matrix */ gl.loadIdentity(); /* Position The Text (0,0 - Bottom Left) */ gl.translated(x, y, 0); /* Choose The Font Set (0 or 1) */ gl.listBase(base-32+(128*set)); /* Write The Text To The Screen */ gl.callLists(stringBuf.remaining(), GL.BYTE, Sys.getDirectBufferAddress(stringBuf)); /* Select The Projection Matrix */ gl.matrixMode(GL.PROJECTION); /* Pop Our Projection Matrix Off The Stack */ gl.popMatrix(); /* Select The Modelview Matrix */ gl.matrixMode(GL.MODELVIEW); /* Pop Our Modelview Matrix Off The Stack */ gl.popMatrix(); /* Enable Depth Testing */ gl.enable(GL.DEPTH_TEST); } protected void initGL() throws Exception { /* Jump To Texture Loading Routine */ try { loadGLTextures(); buildFont(); /* Black Background */ gl.clearColor(0.0f, 0.0f, 0.0f, 0.0f); /* Depth Buffer Setup */ gl.clearDepth(1.0f); /* The Type Of Depth Test To Do */ gl.depthFunc(GL.LEQUAL); /* Select The Type Of Blending */ gl.blendFunc(GL.SRC_ALPHA, GL.ONE); /* Enables Smooth Shading */ gl.shadeModel(GL.SMOOTH); /* Enable Texture Mapping */ gl.enable(GL.TEXTURE_2D); /* Enables Depth Testing */ gl.enable(GL.DEPTH_TEST); } catch (Exception e) { throw new Exception("Problem initialising GL", e); } } protected boolean drawGLScene(float frameTime) { /* Clear The Screen And The Depth Buffer */ gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT); /* Reset The Current Modelview Matrix */ gl.loadIdentity(); /* Select our Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(1)); /* Move Into The Screen 5 Units */ gl.translatef(0.0f, 0.0f, -5.0f); /* Rotate On The Z Axis 45 Degrees (Clockwise) */ gl.rotatef(45.0f, 0.0f, 0.0f, 1.0f); /* Rotate On The X & Y Axis By cnt1 (Left To Right) */ gl.rotatef(cnt1 * 30.0f, 1.0f, 1.0f, 0.0f); /* Disable Blending Before We Draw In 3D */ gl.disable(GL.BLEND); /* Bright White */ gl.color3f(1.0f, 1.0f, 1.0f); gl.begin(GL.QUADS); gl.texCoord2d(0.0f, 0.0f); gl.vertex2f(-1.0f, 1.0f); gl.texCoord2d(1.0f, 0.0f); gl.vertex2f( 1.0f, 1.0f); gl.texCoord2d(1.0f, 1.0f); gl.vertex2f( 1.0f, -1.0f); gl.texCoord2d(0.0f, 1.0f); gl.vertex2f(-1.0f, -1.0f); gl.end(); /* Rotate On The X & Y Axis By 90 Degrees (Left To Right) */ gl.rotatef(90.0f, 1.0f, 1.0f, 0.0f); gl.begin(GL.QUADS); gl.texCoord2d(0.0f, 0.0f); gl.vertex2f(-1.0f, 1.0f); gl.texCoord2d(1.0f, 0.0f); gl.vertex2f( 1.0f, 1.0f); gl.texCoord2d(1.0f, 1.0f); gl.vertex2f( 1.0f, -1.0f); gl.texCoord2d(0.0f, 1.0f); gl.vertex2f(-1.0f, -1.0f); gl.end(); /* Enable Blinding */ gl.enable(GL.BLEND); /* Reset The View */ gl.loadIdentity(); // Pulsing Colors Based On Text Position gl.color3f(1.0f * ((float) java.lang.Math.cos(cnt1)), 1.0f * ((float) java.lang.Math.sin(cnt2)), 1.0f - (0.5f * ((float) java.lang.Math.cos(cnt1+cnt2)))); /* Print Text To The Screen */ print((int) (280 + (250 * java.lang.Math.cos(cnt1))), (int) (235 + (200 * java.lang.Math.sin(cnt2))), "NeHe", 0); gl.color3f(1.0f * ((float) java.lang.Math.sin(cnt2)), 1.0f - (0.5f * ((float) java.lang.Math.cos(cnt1 + cnt2))), 1.0f * ((float) java.lang.Math.cos(cnt1))); /* Print Text To The Screen */ print((int) (280 + (230 * java.lang.Math.cos(cnt2))), (int) (235 + (200 * java.lang.Math.sin(cnt1))), "OpenGL", 1); /* Set Color To Blue */ gl.color3f(0.0f, 0.0f, 1.0f); /* Print Text To The Screen */ print((int) (240 + (200 * java.lang.Math.cos((cnt2 + cnt1) / 5))), 2, "Giuseppe D'Agata", 0); /* Set Color To White */ gl.color3f(1.0f, 1.0f, 1.0f); /* Print Text To The Screen */ print((int) (242 + (200 * java.lang.Math.cos((cnt2 + cnt1) / 5))), 2, "Giuseppe D'Agata", 0); cnt1 += (frameTime * 1.0f); cnt2 += (frameTime * 0.81f); return true; } protected void killGLWindow() { killFont(); super.killGLWindow(); } private ByteBuffer createByteBuffer(int size) { ByteBuffer temp = ByteBuffer.allocateDirect(4 * size); temp.order(ByteOrder.nativeOrder()); return temp; } public static void main(String[] arguments) { int err = 0; BitmapFonts lesson = new BitmapFonts(); try { lesson.start(640, 480, 16, false); } catch (Exception e) { err = 1; e.printStackTrace(); } System.exit(err); } } --- NEW FILE: Blending.java --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/Blending.java /* * Copyright (c) 2002 Light Weight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.nio.*; import java.io.*; import java.awt.image.BufferedImage; import javax.swing.JOptionPane; import javax.imageio.*; import org.lwjgl.*; import org.lwjgl.opengl.*; import org.lwjgl.input.*; /** * $Id: Blending.java,v 1.1 2002/11/27 00:16:34 lholden Exp $ * * Blending * * Credit goes to Tom Stanis and Jeff Molofee (NeHe) whos tutorial this is based on * * @author Luke Holden * @version $Revision: 1.1 $ */ public class Blending extends FiltersLightingAndControl { /* Lighting ON / OFF */ private boolean light; /* Blending OFF/ON? ( NEW ) */ private boolean blend; private float xrot; private float yrot; private float xspeed; private float yspeed; private float z=-5.0f; /* Ambient Light Values */ private FloatBuffer lightAmbient = createFloatBuffer(4).put(0.5f).put(0.5f).put(0.5f).put(1.0f); /* Diffuse Light Values */ private FloatBuffer lightDiffuse = createFloatBuffer(4).put(1.0f).put(1.0f).put(1.0f).put(1.0f); /* Light Position */ private FloatBuffer lightPosition = createFloatBuffer(4).put(0.0f).put(0.0f).put(2.0f).put(1.0f); /* Which Filter To Use */ private int filter; /* Storage for 3 textures */ private IntBuffer textureBuf = createIntBuffer(3); /* our key states */ private class KeyToggle { public boolean l = false; public boolean f = false; public boolean b = false; } private KeyToggle keys = new KeyToggle(); /** Creates a new instance of Lesson */ public Blending() { } /* Load Bitmaps And Convert To Textures */ protected void loadGLTextures() throws Exception { /* Create Storage Space For The Texture */ Texture[] textureImage = new Texture[1]; /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */ try { textureImage[0] = loadImage("data/glass.png"); if (textureImage[0] == null) { throw new Exception("Error: got null from loadBmp()!"); } /* Create Three Textures */ gl.genTextures(3, Sys.getDirectBufferAddress(textureBuf)); /* Create Nearest Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.NEAREST); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.NEAREST); gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); /* Create Linear Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(1)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); /* Create Linear Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(2)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR_MIPMAP_NEAREST); glu.build2DMipmaps(GL.TEXTURE_2D, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); } catch (Exception e) { throw new Exception("Problem loading textures", e); } } protected void initGL() throws Exception{ /* Jump To Texture Loading Routine */ try { super.initGL(); /* Full Brightness, 50% Alpha ( NEW ) */ gl.color4f(1.0f,1.0f,1.0f,0.5f); /* Blending Function For Translucency Based On Source Alpha Value ( NEW ) */ gl.blendFunc(GL.SRC_ALPHA, GL.ONE); } catch (Exception e) { throw new Exception("Problem initialising GL", e); } } protected boolean drawGLScene(float frameTime) { /* Clear The Screen And The Depth Buffer */ gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT); /* Reset The Current Modelview Matrix */ gl.loadIdentity(); /* Move Into The Screen 5 Units */ gl.translatef(0.0f, 0.0f, z); /* Rotate On The X Axis */ gl.rotatef(xrot, 1.0f, 0.0f, 0.0f); /* Rotate On The Y Axis */ gl.rotatef(yrot, 0.0f, 1.0f, 0.0f); /* Select our Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(filter)); /* build our textured cube */ gl.begin(GL.QUADS); /* Front Face */ /* Normal Pointing Towards Viewer */ gl.normal3f( 0.0f, 0.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Back Face */ /* Normal Pointing Away From Viewer */ gl.normal3f( 0.0f, 0.0f,-1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Top Face */ /* Normal Pointing Up */ gl.normal3f( 0.0f, 1.0f, 0.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Bottom Face */ /* Normal Pointing Down */ gl.normal3f( 0.0f,-1.0f, 0.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Right face */ /* Normal Pointing Right */ gl.normal3f( 1.0f, 0.0f, 0.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Left Face */ /* Normal Pointing Left */ gl.normal3f(-1.0f, 0.0f, 0.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); gl.end(); /* X Axis Rotation */ xrot+=frameTime * xspeed; /* Y Axis Rotation */ yrot+=frameTime * yspeed; return true; } protected void input(float frameTime) { Keyboard.poll(); /* Keys that have a toggle effect */ if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { done = true; } if (Keyboard.isKeyDown(Keyboard.KEY_L)) { if (!keys.l) { keys.l = true; light=!light; if (!light) { gl.disable(GL.LIGHTING); } else { gl.enable(GL.LIGHTING); } } } else { keys.l = false; } if (Keyboard.isKeyDown(Keyboard.KEY_F)) { if (!keys.f) { keys.f = true; filter+=1; if (filter>2) { filter=0; } } } else { keys.f = false; } if (Keyboard.isKeyDown(Keyboard.KEY_B)) { if (!keys.b) { keys.b = true; blend=!blend; if(blend) { /* Turn Blending On */ gl.enable(GL.BLEND); /* Turn Depth Testing Off */ gl.disable(GL.DEPTH_TEST); } else { /* Turn Blending Off */ gl.disable(GL.BLEND); /* Turn Depth Testing On */ gl.enable(GL.DEPTH_TEST); } } } else { keys.b = false; } /* Keys that have a constant effect */ if (Keyboard.isKeyDown(Keyboard.KEY_PRIOR)) { z-=frameTime * 10f; } if (Keyboard.isKeyDown(Keyboard.KEY_NEXT)) { z+=frameTime * 10f; } if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { xspeed-=frameTime * 20f; } if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { xspeed+=frameTime * 20f; } if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) { yspeed+=frameTime * 20f; } if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) { yspeed-=frameTime * 20f; } } public static void main(String[] arguments) { int err = 0; Blending lesson = new Blending(); try { lesson.start(640, 480, 16, false); } catch (Exception e) { err = 1; e.printStackTrace(); } System.exit(err); } } --- NEW FILE: DisplayLists.java --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/DisplayLists.java /* * Copyright (c) 2002 Light Weight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.nio.*; import java.io.*; import java.awt.image.BufferedImage; import javax.imageio.*; import org.lwjgl.*; import org.lwjgl.opengl.*; import org.lwjgl.input.*; /** * $Id: DisplayLists.java,v 1.1 2002/11/27 00:16:34 lholden Exp $ * * Display Lists * * Credit goes to Jeff Molofee (NeHe) whos tutorial this is based on * * @author Luke Holden * @version $Revision: 1.1 $ */ public class DisplayLists extends FiltersLightingAndControl { private IntBuffer textureBuf = createIntBuffer(1); /* Storage For The Display List */ private int box; /* Storage For The Second Display List */ private int top; /* Loop For X Axis */ private int xloop; /* Loop For Y Axis */ private int yloop; private float xrot; private float yrot; /* Array For Box Colors */ public static FloatBuffer[] boxcol = { /* Bright: Red, Orange, Yellow, Green, Blue */ createFloatBuffer(3).put(1.0f).put(0.0f).put(0.0f), createFloatBuffer(3).put(1.0f).put(0.5f).put(0.0f), createFloatBuffer(3).put(1.0f).put(1.0f).put(0.0f), createFloatBuffer(3).put(0.0f).put(1.0f).put(0.0f), createFloatBuffer(3).put(0.0f).put(1.0f).put(1.0f) }; /* Array For Top Colors */ public static FloatBuffer[] topcol = { /* Dark: Red, Orange, Yellow, Green, Blue */ createFloatBuffer(3).put(0.5f).put(0.0f).put(0.0f), createFloatBuffer(3).put(0.5f).put(0.25f).put(0.0f), createFloatBuffer(3).put(0.5f).put(0.5f).put(0.0f), createFloatBuffer(3).put(0.0f).put(0.5f).put(0.0f), createFloatBuffer(3).put(0.0f).put(0.5f).put(0.5f) }; /** Creates a new instance of Lesson */ public DisplayLists() { } /* Build Box Display List */ private void buildLists() { /* Building Two Lists */ box = gl.genLists(2); /* New Compiled box Display List */ gl.newList(box, GL.COMPILE); /* Start Drawing Quads */ gl.begin(GL.QUADS); /* Bottom Face */ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. * * Without this line, the lighting changes as you rotate the boxes */ gl.normal3f( 0.0f,-1.0f, 0.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Front Face */ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. */ gl.normal3f( 0.0f, 0.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Back Face */ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. */ gl.normal3f( 0.0f, 0.0f,-1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Right face*/ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. */ gl.normal3f( 1.0f, 0.0f, 0.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Left Face */ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. */ gl.normal3f(-1.0f, 0.0f, 0.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); gl.end(); gl.endList(); /* top List Value Is box List Value +1 */ top = box+1; /* New Compiled top Display List */ gl.newList(top, GL.COMPILE); /* Start Drawing Quad */ gl.begin(GL.QUADS); /* Top Face */ /* NOTE: glNormal3f(...) was missing from the tutorial, but exists * in the lesson source code. */ gl.normal3f( 0.0f, 1.0f, 0.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); gl.end(); gl.endList(); } /* Load Bitmaps And Convert To Textures */ protected void loadGLTextures() throws Exception { /* Create Storage Space For The Texture */ Texture[] textureImage = new Texture[1]; /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */ try { textureImage[0] = loadImage("data/cube.png"); if (textureImage[0] == null) { throw new Exception("Error: got null from loadBmp()!"); } /* Create The Texture */ gl.genTextures(1, Sys.getDirectBufferAddress(textureBuf)); /* Typical Texture Generation Using Data From The Bitmap */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); /* Generate The Texture */ gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); /* Linear Filtering */ gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); } catch (Exception e) { throw new Exception("Problem loading textures", e); } } protected void initGL() throws Exception{ /* Jump To Texture Loading Routine */ try { loadGLTextures(); buildLists(); /* Enable Texture Mapping */ gl.enable(GL.TEXTURE_2D); /* Enables Smooth Shading */ gl.shadeModel(GL.SMOOTH); /* Black Background */ gl.clearColor(0.0f, 0.0f, 0.0f, 0.5f); /* Depth Buffer Setup */ gl.clearDepth(1.0f); /* Enables Depth Testing */ gl.enable(GL.DEPTH_TEST); /* The Type Of Depth Test To Do */ gl.depthFunc(GL.LEQUAL); /* Quick And Dirty Lighting (Assumes Light0 Is Set Up) */ gl.enable(GL.LIGHT0); /* Enable Lighting */ gl.enable(GL.LIGHTING); /* Enable Material Coloring */ gl.enable(GL.COLOR_MATERIAL); /* Really Nice Perspective Calculations */ gl.hint(GL.PERSPECTIVE_CORRECTION_HINT, GL.NICEST); } catch (Exception e) { throw new Exception("Problem initialising GL", e); } } protected boolean drawGLScene(float frameTime) { /* Clear The Screen And The Depth Buffer */ gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT); /* Select our Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); /* Loop Through The Y Plane */ for (yloop = 1; yloop < 6; yloop++) { /* Loop Through The X Plane */ for (xloop = 0; xloop < yloop; xloop++) { /* Reset The Current Modelview Matrix */ gl.loadIdentity(); /* Position The Cubes On The Screen */ gl.translatef(1.4f + (((float) xloop) * 2.8f) - (((float) yloop) * 1.4f), ((6.0f - ((float) yloop)) * 2.4f) -7.0f, -20.0f); /* Tilt The Cubes Up And Down */ gl.rotatef(45.0f - (2.0f * yloop) + xrot, 1.0f, 0.0f, 0.0f); /* Spin Cubes Left And Right */ gl.rotatef(45.0f + yrot, 0.0f, 1.0f, 0.0f); /* Select A Box Color * FIXME: gl.color3fv is not currently implemented. */ gl.color3fv(Sys.getDirectBufferAddress(boxcol[yloop-1])); /* Draw The Box */ gl.callList(box); /* Select The Top Color */ gl.color3fv(Sys.getDirectBufferAddress(topcol[yloop-1])); /* Draw The Box */ gl.callList(top); } } return true; } protected void input(float frameTime) { Keyboard.poll(); /* Keys that have a toggle effect */ if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { done = true; } /* Keys that have a constant effect */ if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) { yrot -= (frameTime * 25.0f); } if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) { yrot += (frameTime * 25.0f); } if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { xrot -= (frameTime * 25.0f); } if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { xrot += (frameTime * 25.0f); } } public static void main(String[] arguments) { int err = 0; DisplayLists lesson = new DisplayLists(); try { lesson.start(640, 480, 16, false); } catch (Exception e) { err = 1; e.printStackTrace(); } System.exit(err); } } --- NEW FILE: FiltersLightingAndControl.java --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/FiltersLightingAndControl.java /* * Copyright (c) 2002 Light Weight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.nio.*; import java.io.*; import java.awt.image.BufferedImage; import javax.swing.JOptionPane; import javax.imageio.*; import org.lwjgl.*; import org.lwjgl.opengl.*; import org.lwjgl.input.*; /** * $Id: FiltersLightingAndControl.java,v 1.1 2002/11/27 00:16:34 lholden Exp $ * * Texture Filters, Lighting & Keyboard Control * * Credit goes to Jeff Molofee (NeHe) whos tutorial this is based on * * @author Luke Holden * @version $Revision: 1.1 $ */ public class FiltersLightingAndControl extends TextureMapping { protected boolean fullscreen = false; /* Lighting ON / OFF */ private boolean light; private float xrot; private float yrot; private float xspeed; private float yspeed; private float z=-5.0f; /* Ambient Light Values ( NEW ) */ private FloatBuffer lightAmbient = createFloatBuffer(4).put(0.5f).put(0.5f).put(0.5f).put(1.0f); /* Diffuse Light Values ( NEW ) */ private FloatBuffer lightDiffuse = createFloatBuffer(4).put(1.0f).put(1.0f).put(1.0f).put(1.0f); /* Light Position ( NEW ) */ private FloatBuffer lightPosition = createFloatBuffer(4).put(0.0f).put(0.0f).put(2.0f).put(1.0f); /* Which Filter To Use */ private int filter; /* Storage for 3 textures */ private IntBuffer textureBuf = createIntBuffer(3); /* our key states */ private class KeyToggle { public boolean f1 = false; public boolean l = false; public boolean f = false; } private KeyToggle keys = new KeyToggle(); /** Creates a new instance of Lesson */ public FiltersLightingAndControl() { } /* Load Bitmaps And Convert To Textures */ protected void loadGLTextures() throws Exception { /* Create Storage Space For The Texture */ Texture[] textureImage = new Texture[1]; /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */ try { textureImage[0] = loadImage("data/crate.png"); if (textureImage[0] == null) { throw new Exception("Error: got null from loadBmp()!"); } /* Create Three Textures */ gl.genTextures(3, Sys.getDirectBufferAddress(textureBuf)); /* Create Nearest Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(0)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.NEAREST); // ( NEW ) gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.NEAREST); // ( NEW ) gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); /* Create Linear Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(1)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); gl.texImage2D(GL.TEXTURE_2D, 0, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), 0, GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); /* Create Linear Filtered Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(2)); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR_MIPMAP_NEAREST); // ( NEW ) glu.build2DMipmaps(GL.TEXTURE_2D, 3, textureImage[0].getWidth(), textureImage[0].getHeight(), GL.RGB, GL.UNSIGNED_BYTE, textureImage[0].getPtr()); // ( NEW ) } catch (Exception e) { throw new Exception("Problem loading textures", e); } } protected void initGL() throws Exception{ /* Jump To Texture Loading Routine */ try { super.initGL(); /* Setup The Ambient Light */ gl.lightfv(GL.LIGHT1, GL.AMBIENT, Sys.getDirectBufferAddress(lightAmbient)); /* Setup The Diffuse Light */ gl.lightfv(GL.LIGHT1, GL.DIFFUSE, Sys.getDirectBufferAddress(lightDiffuse)); /* Position The Light */ gl.lightfv(GL.LIGHT1, GL.POSITION, Sys.getDirectBufferAddress(lightPosition)); gl.enable(GL.LIGHT1); } catch (Exception e) { throw new Exception("Problem initialising GL", e); } } protected boolean drawGLScene(float frameTime) { /* Clear The Screen And The Depth Buffer */ gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT); /* Reset The Current Modelview Matrix */ gl.loadIdentity(); /* Move Into The Screen 5 Units */ gl.translatef(0.0f, 0.0f, z); /* Rotate On The X Axis */ gl.rotatef(xrot, 1.0f, 0.0f, 0.0f); /* Rotate On The Y Axis */ gl.rotatef(yrot, 0.0f, 1.0f, 0.0f); /* Select our Texture */ gl.bindTexture(GL.TEXTURE_2D, textureBuf.get(filter)); /* build our textured cube */ gl.begin(GL.QUADS); /* Front Face */ /* Normal Pointing Towards Viewer */ gl.normal3f( 0.0f, 0.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Back Face */ /* Normal Pointing Away From Viewer */ gl.normal3f( 0.0f, 0.0f,-1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Top Face */ /* Normal Pointing Up */ gl.normal3f( 0.0f, 1.0f, 0.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Bottom Face */ /* Normal Pointing Down */ gl.normal3f( 0.0f,-1.0f, 0.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Right face */ /* Normal Pointing Right */ gl.normal3f( 1.0f, 0.0f, 0.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, -1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, -1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f( 1.0f, 1.0f, 1.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f( 1.0f, -1.0f, 1.0f); /* Left Face */ /* Normal Pointing Left */ gl.normal3f(-1.0f, 0.0f, 0.0f); /* Bottom Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, -1.0f); /* Bottom Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 0.0f); gl.vertex3f(-1.0f, -1.0f, 1.0f); /* Top Right Of The Texture and Quad */ gl.texCoord2f(1.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, 1.0f); /* Top Left Of The Texture and Quad */ gl.texCoord2f(0.0f, 1.0f); gl.vertex3f(-1.0f, 1.0f, -1.0f); gl.end(); /* X Axis Rotation */ xrot+=frameTime * xspeed; /* Y Axis Rotation */ yrot+=frameTime * yspeed; return true; } protected void input(float frameTime) { Keyboard.poll(); /* Keys that have a toggle effect */ if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { done = true; } /* F1 switch between fullscreen/windowed is buggy... * So for now, we are leaving this ability disabled */ if (Keyboard.isKeyDown(Keyboard.KEY_F1)) { if (!keys.f1) { keys.f1 = true; // try { // killGLWindow(); // fullscreen=!fullscreen; // createGLWindow(640, 480, 16, fullscreen); // } // catch (Exception e) { // /* We dont want to put exceptions into our loop... so */ // e.printStackTrace(); // System.exit(1); // } } } else { keys.f1 = false; } if (Keyboard.isKeyDown(Keyboard.KEY_L)) { if (!keys.l) { keys.l = true; light=!light; if (!light) { gl.disable(GL.LIGHTING); } else { gl.enable(GL.LIGHTING); } } } else { keys.l = false; } if (Keyboard.isKeyDown(Keyboard.KEY_F)) { if (!keys.f) { keys.f = true; ... [truncated message content] |
From: Luke H. <lh...@us...> - 2002-11-27 00:10:41
|
Update of /cvsroot/java-game-lib/LWJGL/examples/data In directory sc8-pr-cvs1:/tmp/cvs-serv847/data Log Message: Directory /cvsroot/java-game-lib/LWJGL/examples/data added to the repository |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:38
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson17/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson17/data Removed Files: bumps.png font.png Log Message: Moved to base directory --- bumps.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson17/data/bumps.png --- font.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson17/data/font.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:38
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson16 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson16 Removed Files: Lesson16.java Log Message: Moved to base directory --- Lesson16.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson16/Lesson16.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:38
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson17 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson17 Removed Files: Lesson17.java Log Message: Moved to base directory --- Lesson17.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson17/Lesson17.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:38
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson16/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson16/data Removed Files: crate.png Log Message: Moved to base directory --- crate.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson16/data/crate.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:38
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson12/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson12/data Removed Files: cube.png Log Message: Moved to base directory --- cube.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson12/data/cube.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:35
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson12 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson12 Removed Files: Lesson12.java Log Message: Moved to base directory --- Lesson12.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson12/Lesson12.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:35
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson11/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson11/data Removed Files: tim.png Log Message: Moved to base directory --- tim.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson11/data/tim.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:34
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson11 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson11 Removed Files: Lesson11.java Log Message: Moved to base directory --- Lesson11.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson11/Lesson11.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:34
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson10/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson10/data Removed Files: mud.png world.txt Log Message: Moved to base directory --- mud.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson10/data/mud.png --- world.txt DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson10/data/world.txt |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:33
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson10 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson10 Removed Files: Lesson10.java Log Message: Moved to base directory --- Lesson10.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson10/Lesson10.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:33
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson09/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson09/data Removed Files: star.png Log Message: Moved to base directory --- star.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson09/data/star.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:33
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson09 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson09 Removed Files: Lesson9.java Log Message: Moved to base directory --- Lesson9.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson09/Lesson9.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:32
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson08/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson08/data Removed Files: glass.png Log Message: Moved to base directory --- glass.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson08/data/glass.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:31
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson08 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson08 Removed Files: Lesson8.java Log Message: Moved to base directory --- Lesson8.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson08/Lesson8.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:31
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson07/data In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson07/data Removed Files: crate.png Log Message: Moved to base directory --- crate.png DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson07/data/crate.png |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:31
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson06 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson06 Removed Files: Lesson6.java Texture.java Log Message: Moved to base directory --- Lesson6.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson06/Lesson6.java --- Texture.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson06/Texture.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:31
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson07 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson07 Removed Files: Lesson7.java Log Message: Moved to base directory --- Lesson7.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson07/Lesson7.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:30
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson05 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson05 Removed Files: Lesson5.java Log Message: Moved to base directory --- Lesson5.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson05/Lesson5.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:30
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson04 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson04 Removed Files: Lesson4.java Log Message: Moved to base directory --- Lesson4.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson04/Lesson4.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:30
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson03 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson03 Removed Files: Lesson3.java Log Message: Moved to base directory --- Lesson3.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson03/Lesson3.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:29
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson02 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson02 Removed Files: Lesson2.java Log Message: Moved to base directory --- Lesson2.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson02/Lesson2.java |
From: Luke H. <lh...@us...> - 2002-11-27 00:09:29
|
Update of /cvsroot/java-game-lib/LWJGL/examples/nehe/lesson01 In directory sc8-pr-cvs1:/tmp/cvs-serv32602/nehe/lesson01 Removed Files: Lesson1.java Log Message: Moved to base directory --- Lesson1.java DELETED --- CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/examples/nehe/lesson01/Lesson1.java |