forkstat-0.02.02/0000755000175000017500000000000013234316067012157 5ustar kingkingforkstat-0.02.02/mascot/0000755000175000017500000000000013234316063013441 5ustar kingkingforkstat-0.02.02/mascot/forkstat.svg0000644000175000017500000021710313234316063016023 0ustar kingking image/svg+xml forkstat-0.02.02/mascot/forkstat-icon.svg0000644000175000017500000022055413234316063016755 0ustar kingking image/svg+xml Forkstat forkstat-0.02.02/mascot/forkstat.png0000644000175000017500000021554313234316063016016 0ustar kingking‰PNG  IHDRèljn¥bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEà  #Ú©W IDATxÚìÝwxW½ÿñ÷õÞ¬.[r“‹Ü{ï½%±ãôÄq*%@p -àÚ%Ô„žK¹pø]Jj ¤“î4—Xrï–-w[å÷ÇÚX’W»sF»ÚÙÙÏëyxˆWgfvÏÎŽ>{ôs@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDX $«DDDDDbo(p¦®‰½¿mÀLu…ˆˆˆˆHl>ÎÛ€ÛÕ""¡yÕ""ew´ûï u‡ˆˆˆˆHìôNs~ýwê‘Ð4‚."}¾~íWIíþ=D§ƒˆˆˆˆÄR°ð$h8}ó£çm@ ¡ÓBDDDDbå¾³Á´8 H ×>¦S8?÷¿:""]S‰‹ˆHôkÎþ÷<#Çóèõ¯îâñJ"" è"Òs© þí:ίœynžñ òÚ=ÀJt‘ØC Æ8_]À;J:Î8ûß/%ÈkŸ@ðò–6àn""""=㥳LFµ ¤û€ú³ÿ}ŒÄøëåWCôŸêô‰¾égÃW+ªîà‹íé& ¹Ý¿Kàõo Ðÿ®ÓCDDD$úåü±œ/oiã©ǹüµ Ê[Ûý÷z""]ÓM¢" ý8?;‰®+0ØîßÍ~îö›$yÌÓî¿ËuŠˆˆ( ‹Ht­iÀR8?sI¢êPO+ wdéc#"¢€."Ñ»Ž\Ýîß o‚÷Iç©&Ouúw±‹_{0ÙB»b}tDDÐE$:æráˆpM÷G0±Óc-þÝËåçC’…v%ú興( ‹Äòsö[ÀïÒ×wMÇ*øýžo! ¹øõ϶ØN#è"" è"13¸ˆÀÌn“, òx"ß8/Èc¿œ¹y}ŽÅvAQ@‰™ågÿ¿Î…¯m1äñDAŸä±Îó»u½ŠÀŒ> ò˜FÐEDÐEbØÜ8sǪ./MÐ÷ºŠ ëïÛ‚|‰qëzWå-;ÐEDÐEœ"yö¿ \öÚÒéz:½Â}¿gyì@÷>“@yP¢ô=AS‰‹ˆˆºHLŒä|ý±ÛBëóY+ Ÿ¬¼e'äq7–¹Ìêâñ½AÓºˆˆºHL´aÎqÙk[âg‰ÐgtN“  ÷£ëÒ&ttÇh?ÃIºË® CüÜ­%¡Tý_gºhï¶:ôP‹íM€×/"¢€.'Ÿ¯íþí¦À:Žð# ‰6Š>©‹Ç'Hÿ˜ôt‚Ï$"¢¡.‰j`IéHÜb±…6 è¡z Ï÷`Î|šEÐ(ºˆˆºH»ªÓ¿ÝЗ( [èM]<žç¢×žÔvñ³SM* ‹ˆ( ‹Ä”‡ó ãsÉk+†+ w¢OŽtñx¾‹^ÿä¿O6Ÿý<( ‹ˆ( ‹ÄÔ.¬ÑvK@Ÿ"p%j@Ëùé4;;‘}RˆŸÕ‡ø]£™\DDÐEzL°)ÝЭ(H ÷{|ŸN'@@âgA1äWˆDÅb!že±]" îâñ]@ªËº'Äëãõzk[[[ƒý¬H— t‘žPÔyÜ #èC€r‹msè=ïjyGô¾a^Ë¥]„sкˆHP*q‰¼Åÿ“¾>os Ú&J@Ïútñ³t=ÿ½[ú˜nl«€."¢€.Òc=7Œ Ï6 ®‰`4]×XïÐs]r Ýmu“¨ˆˆºHÔ¥3]Ð}Àtƒö‰2‚j9Ôº×%}¤ttG›I×Ë—ÇûçmmÐ>‘Fлjâ¿ÌÅŒìÆö¸gv#t‡šâgñD¦¶O”ô!~¶Ëå½Óí}$Ötœ"" è"10ÇÅ}²aû4ºžÁÄ-2€š?ßéò€>,ûP™‹ˆˆºHÔô"øôŠnù¼uÐ…ØÆí£èCü¯» Ü—àÖ€>T]DD]ÄÉfÓõlñ®†ÀüîÁìIà€jù4pˆÐëMÄ{@¢€."¢€.âô€îV¡êÏ„ø™Ûo õ“½@¡K›â½"1‚®©EDÐEbÐÛâøµ…ª??âgnAÐÏýeÁ­=èýéÒ!"¢€. ýèz5I7ô‰!~ÖäÒÚ=žK\j ]¾c•J\DDÐE¢bŽ‹_[08ÄÏõ&Ñ2BOXéõz?EèY^â9 ×Eh? è""øÕ"1ËB›xAEèQàÓ!~ææôp7HÖµ¶¶† ±ù.~ý è""6i]¤û<ÀtôPK¹óºr\ü¾×F`y þúÐEDÐE¢b€ËCÆØ?{—ЉËuùûÞ]ñ<‚Þ/BûÑ,."" è"7Õb»xAÐëÃt7—¸ Là€îúFh_™@º.#"" è"‘4ÅÅ=7LÛL⎠G" '¸ 7ÞTiÜ_‰.#"" è"‘Ôy½ÙE},¡WG 7‚îÖ€žF×+«šŠÇQô~Þ_™.#"" è"‘RÂ…ÓètÑëæçõ„žáÅ­}@¯ŸñÐûGx è"" è"3-Èc]”ÇãúÈ0?OÔ—ÜW<Öék]DD]ı‚ÕŸ§¸(  ñ³6`«…€îqáû>0‚ûR‰‹ºˆˆºH›Á%Ù%¯-…Ð#Åû”ó„*qñŸ7A†Ó7‚ûR‰‹ºˆˆºH„dc¶Üy¼ ×zt|›Åý¸±Ì¥:Áztt'šÄ…£ÇG]ÐÃ}ùØfñu¹1 G2 Æ[@Ï#0w¹ºˆˆºˆãLòØö èV›øòî¯(Î^EöYŽˆˆ( ‹DÀø íKÀ€žh#è•„.ý1U‡¯?Ò2 ”Œ‰ˆˆºˆm‹øtÖ¤€îú€Þ'ÂûÓz€Ê\DDÐEº¥/Päñ“. 蹄/;HÔ€^áýÅÛººˆˆºˆ#ëâñÖÛ´ÆÑëBøùË·„}7éáýÅÛze”ö«€."¢€.Ò-ÁÊ[š =z< ‡›çºØiñuå¸ì½ïáýåI è è"" è"ÝìÑzBÏXO=ÜRöû€3íÂz(n›Å%Ò#è‚—K9•J\DDÐE' äñõ„žÓÚM#è»ÛýwK˜¶.{ÿ£Pã©Ì%ZS"* ‹ˆ( ‹Ø6 H òø;¸g=\@ßÕî¿Ï„i[è²÷¿$z:‘_¤(š_|DDâ’_] b¬«D׺Þ:^º‡À,5¡î=ØÂp7 çQØo¼|‰éÅ}WéÒ""¢€.bר.ß&¼ÅK@/%ü(étΗ:„«AwÓz´Ê0âe½(Ê}›Jè©JED‚J\DÌu5‚¾“ÐSÆË4‹ý-´)7¸Žä¹èZ­€/_b¢Ð=Do†tËjƒ<~ˆðµØñ2‚Þ?Âûóáž¹ÐKУª.1"" è"¦† œm°B5 ƒ{êнÄÅʉ–nì_]DD]ÄØˆ.ßDøyâ% ÷‹Q°‹ÑAwS zwJ¹z#"" è"††wñø». èјMÃ-#è*qQ@Q@q˜ è ÐK¢´_7 w8Ï3ÒÓMößG—t>`h?sK‰KJ”¢[J\¢¤ =SXù¢ÕáºÜˆˆºˆX1"Äφù|¾ ?E\¢ {âüHô€žiwCéÐE$áùÕ"Ýè·´´´¸å q´BbØ&ô¸ è¶Fн^ãô]nD$Ñi]Äša؇ÓG}Q¡ñ^æ’åý;½ÝV@÷x<”––˜öƒÖQ@‰²! ðy+ˆòs,Šós Ú ¹r݃‡’â³M` .9"¢€."á>'àóÖ+Êû/Žóó ³öïä‘ã ;y¼Ót€Z]vDD]DBé ¤G`?N/q‰öwIœŸ™=p '—¹ØZ¤Éãñ˜Ö ƒFÐED]D¨MÏ[´z¼ ÷Äè¶“Ë\’ì|õx<”—•Åê3'"¢€.âRƒ"´ŸDAW‰K|t¿óÜãñЫW‘ébE è"¢€."=Ð}]%.á9¹Ä%ÉÖIïõâõz©(7ziÐ4À"¢€."=Ð5‚ž`=#ÝøÖ÷•¸œýÿªª*“c%£‹DD]DBP zd$ÜzQ‘q—º¯ÄÅ8í++*bõ¹Q@q™^DnñW û|>Óý'ÜM¢E…Æk3¹a=¨ÞU• è"" è"1(>oF_Dz™gas.m‡0~î½z÷‘ëjÐik ²Ò8 kªEQ@‘¨t§ ­”icñˆþbHÑ’Š› Ý5‚nõõ·vøÇÙ€^U©tt‘ȨM Ï›Q ‡ð Î!ÐÍ¿˜ÿ•!›ž™-Æ«#èmzk ¯÷î]…Çcôu"" è"åàôt£`XŸŸHÝVyGQ‘­/1NE·zÓAЀž™‘aZòS@ôo\Q@Ið€îäÏ[ªiÍÊÊ")É8·–Çéy`k™{³¸T8´Z»ÐúÖÔ˜Se."¢€."dF8,9yáãJü~999¦›Åk@·5‚^Rl«N¿Ò¡}Ðlk«vq½oMµéÖuº ‰ˆºˆ´7È–¥øqn™‹q@÷z¼äæ* ‡RZjkê÷ÞíƒóH­mçGÐkªGЇë2$" è"Ò^ßïσõ:^ÇtŸßG^Nn¢t[%.y¹¹$'oêªôŽ%.Æ#è è"¢€."TGaŸI}­æÝçÓz---v+ªŠó€Þe z¿¾Æßyëü¥VDD]Ä%Ý©uèæÝë£W/ãiÍËqþl6 è6+Š÷€NÇ€~>¯———‘’’b²y:‘ÿK–ˆˆºˆz÷ƒž#ºßG±y@Oòâð\°UâÒÒÚjçKŒSkÐíÝ$Ún@ÝëõªÌEDD]D=jÝ룸ØÖ ñXæbë}kmi±³XQ:PèÀ>èv :ÀÀÐEDÐEl6¢QjàÔ— ã€îóRloÁ„ èÍÍ-vþÊÎ,s‰H@¯8P]DD]Ä–2 % ûu꺭çe3|VÄáù`ëFÅ––f;5è. èmz­ñú]ŽDD]D :å-® èmmmÛ Ÿ½ãð|h³Ð[í–91 Ÿ±ÐÛº=‚^BüÎþ#"¢€.Ý©%.ÆÏ«µµ‚‚ü~ãM«âð|hµ³QKk åeev6íãÀ>8m±§Ó7¹ÿ,+-µ³­FÑED]D¢ГúzÍz[+^¯×Î<ß}âð|°ЛmôöÁQ;57_¸éÀýMw3Z—$Q@‘D è¶J\;%ñXâb+ 7·4“™™Ivv¶Sοž螎ýÂÊe.At‰Z@Juèë5Ao;;;‡™\Êqn©ODzKK`³²ÒRÓMãy½C@?Ó|á½¥ƒjkM=V—$Q@‘D è6FÐÿoc&?Yr\Ð[[ååeÆ=èå°>°Ð;ü^9súÂô¡C›»øüË‹ˆˆºH꥙™™é–€nã&ÑÖ³áÓVÖŽ·°e¯Äålýu™½>rÚ÷G,¶³0‚>ÐÎÍÅ*st‘Ö‹ó^W”Ïþ–âÐ×l<‚~nú¼ÊJ[Óš÷I„€ÞÒr. —ÚÙÜie.VGÐ}¿¤\8‚ž’’€þýL?^—&Q@I\–Ë[l”.¸§ýlKïªJ»_‚' —º& [™¾C@?}:øôéC‡ 1=þD]šDD]D=¬ÒÒ·tóô³%.• èázeEyTÏÃ샦¿WΜ Ðë†ô18w$t‘(³œ8‹{Ï`âÔ#èÿÏË˵S‹o½ÅV¢={“hï*[/·¯ûáˆéÍAjІšôT`¸.O"¢€.’˜,wژܩ#èÆKÙ·¯-®2¯C¯Ž³sÂÖ2÷§ÏŽ’žžfº¹++:ÝÅúàÚAø|>ÓÝ©ÌEDÐEлæóù(4_EÓ©Ý8€¶/]¨¬4.s郲š:ag£“'Oàñx¨ª¬2ݼÌç‹ùz===¾5ÆßA&èò$" è" è]ÊËË#%Ù¸$Ö©%.Íæýü&UÆ#è~â«ÌÅj@ïð—ˆ'ÎoVe~3­ç¢2>Oš»>µF fº; ‹ˆºH‚²4iu~^ž¹œ]ÐÛ Ûšj±Çmôãçzïª*7ôѾîœ'1Âtw}€DDÐEJg) ç瑜b<‚žî–€~úôéÿw•½ðÙ/ŽÎ [%.'Nžß¬Oo[}4 îúé®úèQ#ì<‡)ºL‰ˆºHb±|ƒhaA×ôö#£6J\â- ŸÂÚT‹VÑìPâRik:ÊqЛ»èú÷·3ÐT]¦DD]D=¨¼¼†Õ 5Ýå4]¦DD]$±”Ym˜Ÿo+ g:ôuwk=55ÕÎj™ýâìÜ8nºAû—ÊÊJ’’Œ'®‰ûôs3Ùte”yú0 W—*Q@I–SfnN.)ɉ;‚Þyv޾}'©ÆåS-ž8qòßÿí÷ùèÓÇxâš^X¼'©ýøñÐßkF4è^T‡." è" ÅòÊCÙÙYn*q1^)³}‰ @?ó€îªâèÜ0èÃiÿ¾¶uR™‹y@?ºÛFްµ8¨êÐED]D=H@ÏrU@7_¨¨Óì6øªC7A?y²c%`@?& Ú™‚Ruè"¢€.¢€~¡œœŖYT‰KGñT‡n\ƒ~²S8íg¯œT‡¾k³ÙtÙÁŒ7ÆôyŒvðgIDD]$V=;;ŸÏgºX‘So5A?uªãÍýjlŒ£sÃü&ÑGÐû÷‹û>j¾ùµ´\PÕÙø±cMŸG0I—+Q@Q@ï ''€T³2§Žú™w*ß(.îEVV–énÇѹqØ8 Ÿì8zÜ·¦¯é(kÖ{Í¿¨„E7vŒç1[—+Q@I EVfŸ £†u詀ϯûHwÃg €VÇ{ø ¥Ñtƒö󠤧§Ù™Žrjb»q?„ èÕ}úPTTdº[tQ@IYX\éÓëõþ{D7Š:q5Qó€Þ©| ŸùMe8kÁˆô`#ÇýÌË\’qV­þÖî~Q f¼ù(úH _—-Q@q7Ëå-YYYx½^»݉uè6ú…¡«¦ºcÇKºy@òW†Aµ¶^îõöHœ+cÐ}Àt]¶DD]ÄÝ -ôÌóÛF@Ïràk7ègΜ¡¹¥ãôéýúÙè—:ôn—¸º­ªž8èáoq?n¬ç¢2Q@q¹« ÓÓÏW©¤¦ô¾ö£v6:Ñi!ž~öæBäÖ€läxð Ä èVJ\j°s“±ºˆ( ‹¸œåzÖŒŒóÝÆºú;u®C¯®©¶Ó® èÍÍÍNGÙ·/III‰Ð-”¸ø|>&˜¢×ºt‰ˆºˆ{Y¾Y1#ýül‰ÉÉÆ‹¹& wžjÑïó1 ¿q™‹k:@SSSÇ>òûí̇>€ÀÍ¢N`|“èÁƒ-µ›8q‚ç3K—.Q@q/Ë#èéíFÐSÍGŒsøÚa¸B$tu¤q GâcUH[ýÐá¦HôQΙÉå8pÐd«}òĉvžÏ<]ºDD]Ľ, §§¥è©©¦Çqâz+6+ŠÐM^`¨[zçô@ÙšÉÅI}dTær°ÑZ× ªHA¾ñ̉óõ»LDÐEÐ;Ü$ê’tˆÐT‹6o‚çÇ! Ít£ÃM‡ƒô‘­ªžáñа6‚îñx˜d^æRŒADD]$±z†;ºñL.'N^¸X‘Íiã! Ÿ!P N‡R¡¦¦ ¿÷ 2Çczüê‹-Fý õŠ˜‰lÕ¡/ÐåKDÐE< §w˜ÅÅøÞ½\‡¾þ&Ó Ž½0ÓçååÚYÎ~Xœœ#{,´é0Ê~øðá }TYi<ùˆ“FÐ7š4>hÐ'OR@Q@±ÐÛÏâ’ž–nz§Ž 0ÝàÈÑàƒî6j¬‡ž88Gv›^Wþ½gx]é±Ë1XíÖIÝj‰ @Mu5¥%%¦Ïg눈( ‹ÄË#Ûí'ÊÈ4ž€Ä©}Ÿq@?< Û¨±Î*ãàÙe¡M‡/‡›ºèÃêìß)i0Ao4»¿vò$ãÙ\|À\]ÂDD]Ä},/cØ~îóÌ ã€îÔ—½ÆýhðûJÙ»Qtxœ#»M7Vâ0¬®.žû¨ž@M¾%§N :›MWfLŸfç9©ÌEDÐE\ÆdÚ èA¿  »÷FQã€ÞU0­:¯×ø씀Þ|6¤[Ö°Åú}¥Ó¦LÁçóÙ èú&" è".’nòyHi?‚ž™iz,׌ í¢½ºOoÒÚÍgá3¢½«—ÌÌLjjªMw礙\ŒÊ\6×7Xn›——˰:ãiß‹Ñt‹"¢€.â*F);%.>öñzÓ‘à%.>Ÿ¡C†˜înTœ'»L7èªÄlÝ(Z ¤9¤/ ºÑ€;3§O·óœëR&" è"‰ÐSºUââòØæ#èGºž:}Äp㊕ fÒ‰‘ˆ Œ5ÒtwI8gÝ( ×Œ ƒí:ô%º”‰ˆºH¢ô%.vŽWèÀ>ˆØ:ÀóYJ<Àh×ôÃ]ô1£mýÑÀ)eL¿»Ùl}ø°: ò¿ÇŽ*Q@I¼€žÒ½›DÐ#Vƒ0b¸­’r§ô½@‹iµ´ßdà€dee™>‡±ñÐëëëikk³þËÉëeÊäIv¾ä-ÒåLDÐE0 ·AÏ2¿IÔ©ýpÂhƒ#èUU•vF@Лý&´µµu9Û×ëeÔH㊧ômgÏk_TŽcß>£®cæ Õ¡‹ˆºˆºEIIgq±1]^¡CûÁ¨Ì%T‰ ÀðaÆuè£ãà\ÙiºA¨9ÀÇŽ6~ÉqÆL@mÀ[&˜Þ(:}ÚT;Ÿ­¹feQ@‰sFu*>ßùŽ×ë%;Û¸LÁ©Ë’ôÓ§Osìøñ.nãFÑjœ¿dûÓ 7u=“˘1ÆuèµÖNðF4zaAC6}NiÀ ]ÒDD]$þM]çõtüèäd¯=äÔºÇtƒÆƒ‘ èN Ÿ èCôÑÈá#ð›/Êã”Eºé¢3gØšÍEe."¢€.â©F)²ÓŸÝss+œZâ²Í8|6ìògÇÃãñ˜îrœÛú¾ý]×^§§§1Ø|”Ø)}dÐëëͺÍé—žý²'"¢€.Ç’M·/qÈÉÉNÜ€bt8?/ªÊJÓ]Npø¹Ò`ºÁþýBþ|â„ñ¦»œä¾0 è Æ]Ǩ#ÈÍ5þ U%P‡ˆˆºH\K1úàx;tãáÔ€n^¾ÑØòç6Ê\&àìÑOã”j`òDãï$e@oôÅn î[hز•æ£Y*ñù|L<ÙÎsÓ¢E"¢€.’P½S z®{úVã€~0t@5Ò¸¤¼ˆÀª¢® èûÃô±cÇà÷ûMw;Ù!ýñºÕ†ÍÍÍlÛfüGfN·5Ýâr]ÖDD]$‘ºOýœÆC¡úøq¶¦ížèàs¥8l²Á¾}¡™332n¾òªSúèe“Æ›ë¿ß0cúT;÷2ŒÊuit‘D èÜ$jÐs0¬{ï!;0\)óàÁƒ!>¨v  §×¡•í Sƒ0i¢qÞvÊú+fÝüFÑ¢¢"ª5Ý̃fst‘ èJ\òÍWÌô%ì‡3À.³€ß#Ç2 IDATÞöË̸±Æ³ºêFÑp%.€n|£è0 Ë}a4‚ng&P™‹ˆ( ‹( ²±¤= è`Xæî&Q€ æe.Ã1\<ª‡m1í£p7GŽ5Š”£ÓЇ3¦[Ü4Ym¼ysƒ­ƒÌš5ÃÎf³ò%FDD]$Ú½¥µcØ*,´µîP©úþáË7&Œ7Α~œ³O0FÃÀ­­­4†)JMMeÌ(ãUEPæÒ¼f9ÍoÚdë £Gޤ°°ÐÎçz®.o"¢€.Ÿ’LW{¶º+FÐwïÚ¶ÍàÁƒÉÌÌ4}S|¾¬7ÝÀJºEy¦;¤?,—¹ìÛ·a¾¬ýeåõ2î;Ïm™.o"¢€.’Ÿ…¶Ö¶ÿ.,(°3Ë„+FÐ;ÆÑ£GC¶ñû|Œm<:<ÍÁçË;Æ}_øéÂgLŸjºÛI®‚%Ï›4Þ¸ÑÞ(ºÍ€¾„À_dDDÐEÜüYè\â’œœlg„Ø©#èÆ‹í²0Šn£Ìe’ƒƒUpÜ( [¸Q´và@ÊËÊLv› Œw@Î8 g#ÚG­¦ý´ßB‰ À´©Æ•=3ò¥n»õ€¾ÑÖA’““™9ÃVUÊ\DD]Äí½¥%"Ý©#è› L·Ñ€>|Xééi¦ÏÅ5e.VFÐ;t¦CúÃò(ú;ë7Ø>È{e.+t‰t—ÚÚ. èEEÆ3L8uý †ó|[)qñûýŒc<1ËTŸ3fÝB :ÀÔÉ“ðû*{&éè§­6ܰq£íƒÌš9ƒädã5¾úƒu™t‘øb8‚~áœÖ%%ŦÇ,6=n2š¥ÄÊ:Àtóòi¾NõÑ~‹#è™™™Œ3Úd×É8ca'Ë#è‡f÷î=¶’™™É¤‰¶^®-twô GÐKKŒÄ“B‡ö‡Q ‚å€>Íx@<çŽ|¾mÒxŸÅt€¹³g™>—9èW£–¿ÝlèF™Ë<[S›«]DÐEÜüY8}úôÙA¨tC@ß±c§¥vú÷§´Ä¸ô~–Cûh=›E-±:‚0®qç€þhþeùëF™Ë¼9³ñz}ù÷}ˆˆ( ‹a4‚, ÛžNèFå[·m£­­ÍR[³”ÌvhÀ`ÎøƒAÏ›`ªª*<¨Ö乌z9 O,סwçFÑ¢¢"F0žàÇK`Nttt÷ô“'O²{µšbuèÓqî|è–ommmµ\ 0߬ŒÃ‹3–´·\‡ÞtýsŽêÐED]$Ž´™4>$ ÷²³š¨Sú. Édƒ†këM2¿Ïg²ë`´CûÉh&«¥@`«Ìe¾úã9,–ýlܸ)èzÖº­²ûÙæ×Q@‰Fó~AOII!?/Ï- ëзlµVí‘››Ã˜1ÆyÛ©e.f}§õ€>dð **ÊMv?ØÏ Ô¼e¥á±ãÇÙ¾}‡íU÷éÀþýM7Kêr'" è"ñ¡Ù¤ñ©S§‚>^Vf<“K•[ºÕt°5K‰SºÑL.;wî2Ú¹ál%ÅÀpô‰å:ôõ±)s¹X—;Q@‰ÝA¨¬¨0=®“GÐÂgÀ>Ç8oO"0úé4¯aPµs—Y@_´À¸jeúäo–z7¦Z |±Uæ²HÕ%ODÐEœÏhýÌ™ày¾ªÊ8o—>‡öÉ:“ÆVK\ PžÐ¯oÉîSq檢‡ÍV›”¸Œ=šŠr£2'ÌRò7«Ÿ§ º7‚^7t(åee¦›eâŒjEDÐE"ÐOvQâRUi\±âJÚ'FݤÄl¢Ïwh?½­€îñxX´ÐhP|"±ŸëûçCïîºÇãaÞ\[£è*st‘8`Târâø‰ ÷®²U±âÔ:ôz fr9zìûöí³¼sÁjCûÉr@ßiЖ/]lzMwÂM±ÒhÓ»›iniéÖlÎæ²HÒeODÐEœÍhýØñcÁ“¶½€^ãÐ>iÃâŒç¼»¹ÞrÛÑ#Gš–' zÇs@?~ü‡Œv>¬®Ž>½^¶–´·ÐOŸ>M}}C·4~Ü8 L7Ë%0¿¾ˆˆºˆkú±ãA¯(/Çç3.)¯qp¿¼nÒxÓ»–˱ñx<,Y¼Èôù8±Ìå%“Æ;lŒ¢/]b4Š>HqŸ±Tæ²~}÷úøqc)**2ݬ˜ÀMµ"" è"uÒ( ?ÞåÏô7ÎÛNAƒy¾7½û®ñ Ë7²€ÉñÐMçB?gÕ%™4¿ˆÀ A±ôgK=#è>ŸÏΜñ 2Q@q´ã&»šÅ oqÞ.><¨“y¾wìääI£ï:vÊ\–8°Ÿ,סïØi/ _¼b9~¿åÌ]HìË\°°mÖ­ÆçLÐ/z‹m•¹¬<ºü‰ˆºˆ33j|¼ëæ6FЪÜ7–Ãgkk+õ F;¯8ýû›l²<žûÈN :@aa!3¦­Õ´Úýò§p ZZZŒn.îÊØ1£)))6ݬ­ËŸˆ( ‹8“ÑúÑ5èýûÙ èN®C7š¥dÓ&ó2—efe.ý€Z‡õÑ^`‡µ€¾ËöAV­¼Ä¤ùÅ@rŒûåÿ¬4zgýúîÿ2ózUæ"" è".c4‚~äÈ‘.–——kg^f'סt“¹ÐÏYj^æ²4^ûiï¾}477Û:ÀÜÙ³ÈË˵Ú<—À”‹±ô³_^BŠD:`gÚN”¹ˆˆ( ‹Ä{@oj:B[[×÷Nö7/séïà¾yƒE7lÚd|€šêj†ïý+ZZZصk·­$%%±|©ÑKu™K ð»ð}cD6fÔ(JKJì|ö†ê(" è"ÎcTâÒÒÒrªÅ˜ˆƒûÆèFQ»å Ë–Ýû9‰ÀNòO« ¶l±}Õ«Œ|—i1î—ß„=gÞY‘y<–,ZhgS¢‹ˆºˆ3ÝàÐáÃ]þÌp4Øé Ê\ê7×súôiã,]²¯×ò%É,rX½hõ‹ÞæúzÛ:d0#†³Ú< Xã~y 8ªÁ®Ý»ijjŠÈÁl–¹\¦K ˆ( ‹8ÏqÓ î:P lÐs€2÷Ï V6·´°a£y™KEy9S&O2ÙÄi7÷þe¥awFЮºâr“æ±.s9ü1\£HÕ¡1œŠŠrÓÍÃQ@qãôÃ!FÐèOr²ñNEÖ¤±Ý2—+.3Ê’ Î~±qKe.õõ Ý:Èò¥KÈ͵üÒ—™1î—ðe.ë#S‡îñxX¼ÐÖ .ÕePDÐEâ< ‡ú“|RRß÷éä€þpÊz@·7:oÎl“pRpÞ¢E–úænôÔÔT.¹h…ÕæéÄþ¦Ú¿G£ñ¥.˜¥‹mt•¹ˆˆºˆÃ1Ýàp˜šYe.Nè§€W¬t{a+))‰•fKÚ;mÔó ìŠÛ¶o·=Õâ9W^~9åE0¯q¿œ$Ì,7‘*qVWGUU¥éf}QºŠˆºˆ³ú£€¢ÄlÝ(:Øá}d¹ÌåíwÞ±}ËW_j<çã¬2—£Àká577³mûön¨¿¾L?ÎjóÙÄ~1¬ èÇt:ÊsV#"¢€.â(‡M76 ùóáÃŒï9xÜ?–úÞ½û8ØØhë 5ÕÕŒ7Öjóœ7'ºµ:ô††nèš«®´œY‰ý(zÈ;‡:Ìž={#v°‹W,·³Ùeÿ ŠˆºHÂ1J”ûùó¡C“–f4uPéàþyÚ¤qwæ¶6¼Yt•Ãúé–zý–nhÁüy”—Yžüg Ã~ {£jwg·i¯_߆ÕÕ™nVŒCDD]$>ú0Ýï÷3|˜q@ãàþÙ lµÐ×Û/YX´`¾É,%N+sy +¯FbÝïóqíÕWYm^,Ža¿ä…k°u불Ðæ(ºfst‘x èáFÐ!°ô¸‹:À“Öºýô””.Zn9\¥ËÔGû€×{" \qÙ¥¤§[þKÍ1ì—ìp ¶n‰è—/[‚ßç³Ðõ»QDÐEÜÐGNÜ€ÞEÏON+sùS¸ÝYM´½œœ“)½cÔ'aÿÊѰekDXXPÀ´©SM7«&êr(" è"ÎpȤñ+}äH“IÎt'ߤf9 oظ‘ÖÖVÛª8Q#GXm>g•¹„ è;wîâÔ©S9Øšk¯µzžyëbÔ'ùazÖˆôâ‹l•¹h6Q@q£ôãÇOpüø‰mòòréׯ¯Énó€÷Ñ&`›ÕþÙº­{5Åk¯»ÖjÓà"õÓÓ„™¨µµ5b5×ýûõeÚÔ)V›ß øcÐ'½Â5زukÄ:oÎl232L7[øQ@‰¯€ÖFÑ'O4þkùX‡÷Ó?­6|ûî­¹hÑB*ÊË­6_ã >:<®Q¤êÐn¼ÞòË/&6£èaúáÇ9tèpDš––ÆÂóM7+¦""¢€.ÝJú”IÆ}´ÃûÉú¢Ý è~Ÿë×XEŸ ôwP?…-s‰d@Ÿ>m*uC‡Zmþz¾”ªÈJ£-[#_ærÑ •¹ˆˆºHÂô}ûö…m3iâÓ™$œ>‚þ7Ë}ýúnìòÕ—’m¥©g¢?®Áæú†ˆðÖ›-OÒ’ üWÿ®)´зD¾ÌeÒ„ñ””›nv)Ò)t‘ÚcºÁî=á7ÉÊÊb˜Ù|ècd÷Óf`£µ€ÞýåÛ332¸òr˃™kˆM}u0Û·B5ˆä:æ¯îÓÇjóÛ€=Ô…X¬éÞ»oÄîóùX¾ÔxÁÙ|s싈( ‹ÄÐnã v[ËôS&O2Ùm:ΟnñOV5lÙÂÑcǺ}°ë¯½–¤$K‹`–8,T=ò›N„¦ZlDo¾q­Õæàÿ€¾=н¬6l<Ô•'p‰½Ù\®BDD]$¦¢2‚0uòdÓ]Ïpx_ýÙJ£ÖÖVÞ|ó­n¬¤¤˜åK—Xm7e.{÷î‹È˜öV]r1ÅÅ–ópð[ Ó1½1:}Pm-ƒjkM7[J HDD]$FŽFiÉj@3z”Õ:ês¦;¼¯NXiøúoDä€7Ýp½Õ¹¾—bñ†Äð$°·«¶µµQá:ôäädn¹ÑhÁÐaÀƒD·¬ÊòÍ»MMG¢ö$.6¿Y4¸X—FQ@‰-£Qt«Ýï÷3k†Qæž$9¸ŸNOYiøÆoF䀃jk™:ÅÒ_"’qNiB 2’.ÕG¸Ìàê+/§¬´Ôd“À¯ˆÞÜß–‡®[ZZ¢öf\´|™é ÛWê²(" è"±eT‡¾k—õæóæÌ6Ùu&ΟnÑRúëëÖEì€7ß`¹¾z­ƒúéÁP?ŒôL.)))|àýï5ίÀ7ÝЋ‹{1cú4ÓÍfº4ŠˆºHì =z”cÇ[û-?}šÕÛƒ¸è›ë,÷Q8S§L¦nè+M‡³ÒOIêÝÍ›£rÐKW­4™Ñåœ÷Ÿe@÷ù¢»€çe—®²ó{òr]ED]$v¢6“KVV'Œ7ÙµÓëÐß®*©E<ºíýV›È!ý”KˆÒ‘h,oEžîøÐìlú à«Dn!£  ÊjcÃ{5ŒÍž5“¢"ã[Tæ"" è"1d<“ËÎ]»,·5,s™Jà&5'³4›ËëëÞˆØçÌžeuÅÌEÀôÑøH?¦–,^ÄÈÃílúaà¾ýŽ˜l²ŸÜÜœ¨¾~¿Ÿ•¯0Ýl8P‡ˆˆºH|ômÛ¶Yn»`Þ<“?ág3Þ_–Ê\^{ýõˆÐãñpûo³z}û€ú(äœöû÷ ¹¹9:x¯—/|î³vËFn~F÷oV6*5ª(~¹÷êU«¬ÎÔÞº<ŠˆºHl—¸lß¾ÃrÛââ^L7Îd÷‹Þ_΄kôò«¯Fô ³gÎ`ø°aVš® bÜG#Bý°¥¥…={÷FíàuC‡põ•¶³åÀ_ ¬j—ÑžÕÕ½£þ†ô­©fÌhã{°¯ÔïLQ@‰¦l۾ݨýòeKLš/ux5aaºÅ­[·±ä–p÷x<|ìŽÛ­4M¾ã>ö¤‹b™ ÀG?ü!;u×çL^ÆÙØv20Øä}µ±˜-—›ß,Z LCDD]¤Çm1ÝÀd`Ñ‚ù&³¹TáüÚׇ¬4zù•ÈŽ¢O2Ùê¼è—ý_,”a‡„­ÞhlWVVwßõéîì¢úì±~ƒín39Hßšj òó{äY¼h!™™Æ ¨^…ˆˆºHÛ‹Å2ÏÙº}›ÑrrrLçbvú(úo1`´:ÀÇ?ú¼^K—±ÿæÆ o,½ÑÇŽ‹úY¼pW\¶º;»H¾¼̳Ð~`4L=nìØ{cÒÓÓX¾t‰éf«€t]&ED]¤gµF5+ûöíçÔ©SFYa œ^‡¾x:\£—^y%â®:„eK,uOðÿ€‰=Ü7 ¬42=ìºëSŸ ÿ~ÝÝÍ@7ÿŠ®ÿºÓ ø1†S5Ξ9£Gßs¢gë2)" è"=Ϩ̥­­í;ÌJ×çÍCNŽåéä&Åï³°e.¯¯[GsV‰üè‡o'%%ÅJÓ àa,Ô„GH*`i>¿“'OöÈJKKã»ßü©©Ýž½Ó¬^;ûåìN+‘Î pcî3X(íi/++ËÎ*ŸÝ2bø0j4Ýl.‘"¢€.âð€°ÝðFÑÔÔT.Z¾ÌäsºÌá}ö ЪÁñã'XÁùÐÏ©¬¬à–›n°Ú<À¬$=Ò—q ëÔ©Ó=öFÕÈw¿u/þȬØé&_~K`ÕÔ}Mw´pþ<’““{üĵ1Š>¨ÑeRDÐEz–ñÒŽvVƒ¼|õ¥FÍÞg» Œš†ôÌsÏEåàï½åfÊËʬ6Ï?Ò£]ðlùI¿ßߣoÖÜÙ³øÒ?og.ð¨ðx<Üpýu19öÅ+–›~1ð ›EED]¤Ç ×74dð Z«syC`ª» ‡÷[Ø2—§Ÿy6*NKKãSŸø¸É&ùÀX,A±a•`-).îÕãoÖêU+ùøG?âˆgú´©=6½bgyy¹ÌŸg|ÿðýþt‘že<¾ysƒ­]¾z•Égõ2‡÷ÛC„)syñ¥—9}::å‹.°:íâ9éf ¹=ÂO%ù×cÐn½ùF¾x÷çì®4~Ÿ/æ_®1_È©š]DÐEzTŒ ,_º„Œt˳¶9½Ìe²†åĉQ™nñœ{¾ðyÒÓÓL¯_!0gy$®©?ǰ»¸Wìî¾úÊËùáýß3í·È…㫯dð Ú˜ž¸Æc@ÿþ¦›éfQQ@éAÛ3|ÁÛ·ÓÜÜl| ÌÌLV­¼ÄjóQÀ‡÷]Ø2—¿=öxÔ^YYÁG?üa;›.^ïæ— ?ð ç­ÏÌ̤ººOLß´9³fòЯþ‡šêê=níÀ|ôŽ;âĽöê+M7¹ÈÒåRDÐEzÆÀhíõææf¶nÛfë`k®½Úêb;˜ÚÎÉ~y¶ÿºô‡?>LkkkÔžÀšk¯fô¨‘v6Í?ûüŸÁâüåíô~\ozЉÆGjF•n©:„Gÿð;®º¢g*©rrrøáýß5ù RT]|Ñ 232L6ÉÀp!&t‘îÙdºA}Ã[ª©®f¦õùŸ¯Äpñ—¶‡@¹H—vîÚÅ¿^|)z5¯—¯}ùžî”lLÞ>LèÒ—,5ìŒÂ›ÃË󿥧§ñŸŸ¿›Ÿüðû&³â˜ÊËã~öSzWU9æµgfdpñEÆ÷ «ÌEDÐEzÐã€^ß`û`k×\g9Ϙ‡ÙÉ~®Á¯z(ªO oM5wßõ™îîf0ðU+Ënþø ðIà›Àc¦—ücçååÌŸ;ÇqoàœY3yâoæöÜFZZdkÓûôî̓¿úuC‡:îuÛ(s™Ô""¢€.Ò#6t›7ŠL™<Éd ö›ÞwGC6xäQŽ=Õ'qéÊKX¾tI¤v׸¸¸xÿÙ/Jݪϸýƒ·‘””äÈ7155•}àý<ýÄßyÏ-7‘™™Ù½_6^/W\¶š?=ü{;7döˆýû3qÂxÓÍ®ÖåRD"ͧ. ªÃi ÓÓÓYuÉŶæñxHIIá¯û»Õ°øÃp!8†Z LA×å7Ž3gšé[]ÃÁƒ¢úD¦MŸÿòW66:®“¦NžÄ§îü¸c êJFFS'OæÚ«®¤¢¢‚£G²k×nÚÚÚ,mï÷ùX¸`>ßùæqùêKIvè’sÒÒÒxø‘GM6©!ð•VDD"Ä£. jð–É…¼ò/û+ež9s†)3f³s—¥ûSïþÓÁý·öì—ˆ.]ºò¾öå/Eý‰4lÙ²‹WÒØxÈ1SYYÁïú_ŠŠŠâòñwï>žáþõÒËlذ‘={÷°oÿRSS¨,¯ ÿ~Œ;†9³f‘››7¯­¹¹™ S§³gÏ^“ÍV¿ÓeSDÐE¢+8F`ê<Ë^}ñy òómôG?y€»îþ¼•¦û Å¡ýWG`ÚÂ.õë×—Çÿò§y2Ï=ÿW\sgΜ‰yÇäçåñÛMßšj}Êêë÷~“ÿº÷[&›< ,QωH¤¨]$¸ÓØX°hÆÝ:è—]JaA•¦…F©j¸ï¾»™¦¦¦y2Æã[ßø:~¿?¦’‘žÎO~ø}…s‡»ò²ËLÏ•@•zNDÐE¢Ïx&— »ÐÓÒÒX{ýuV›ßãð/8!µµµ±}ÇÎ{B‹.à{ߺ7f7eðà¯~Á¨‘#ôÉr¸ââ^¦³ëøþ…YDÐE7 ¯ïæ:ÀµW]Ivv¶•¦¹Àâ5 ìÝ»·GŸÔ‚ùóøñ÷ïëñšèÞUUü¿‡~íÈ©¥‹ÏáÕW™nr#†%q"" è"=л;‚••ÅMk-/Hù Ø}×l¥Ñžè3¦OãOü=cFê‘ãM2™ÿ{è×ôéÝ[Ÿ¨82aü8j4Ù¤X¤žtt€µ×_G~^ž•¦IÀƒì;KOþÈ‘ØÌY^Vƃ¿þ%_þÏ/DmÅÌÔÔTî¾ëÓüâŸPXX¨OSœñx<ܸÖx¡Ð›Ôs"¢€.]ëM7hl<ľ}ûº}àÌŒ Þs‹åßõS+Öw%VµÑ³'è÷ù¸|õ¥ü㱿òÙOŠÒ’’ˆì7))‰U+/æ/ü뮹ÚñóœK×V,[J¯^FSa.ô§Q@‰¢í€ñäÙo¾õvD~íÕWQ\ÜËjóïåê»Áñò&'''sýu×ðÜSOò¿¿ü9—¯¾”œóõ>½{sëÍ7òÌ“óõ/ßCuŸ>úŹääd®3«E÷׫çD¤»4´#ÚSÀd“ þã£wðÞ[nŽÈÁÿûç¿àŸ¾Ëä¹ÎÎ8 ß¾ ¼?\£»>õIÖ®¹ÖqozsK ›6mbݺ7yý7hز…cGqôØ1Ž?FQa!………”–”0dð ¦LšDEE¹>-.tèÐaÆO™Êñã'¬n²‹À”‹Íê=±Kwœ‹„¶Î4 GjàòÕ—òýþ˜-[·Zi>øðaô›¥›å òù¦û}>j¤và@V­¼XŸ‚–››ÃªK.áŸýÜê&çný½zODìR‰‹Hø€nä­·ÞŠØÁ“’’øäÇ?f²É‡€KbÜgÓ¾VöŠÓ¥î%±Ü|ÃZ|>ŸÉ&ºYTDÐEœÐë¶pìøñˆ=óç1qÂx«Í=ÀO±1ì³XmX¤€.q ²²‚¹sf›l²¨QωˆºHôºÑT#­­­¼ýÎ;}Ÿùä'ðz-\3‡Úô×4`±•†>ŸŠò2anºÁèÞO/p«zMDÐE¢ã°Ãt£·"X‡0dð V¯Zi²IðP׃}•|ßjãþýú‘––¦3LâÂØÑ£5r„É&ktõœˆ( ‹D‡q™Ë›èûȇ­.^tN1ð8šðž¸–ü°¼ôâÐ!ƒufI\¹q­Ñ(zp¹zMDÐEÐ×½ñfÄŸDA~>Ÿþ䯛ÞGô¦UõßV›l4bø0YWΟGee…É&ïS¯‰ˆºHt¼bºÁÛï¼ÃÉ“'#þD.¹hÓ§M5Ý, øð' O„ŸRð+à“<éMw"1çóùX{ÝuFÌl IDATßC1œ¦UDD]ÄšM7hnnŽJ™ À—>7é¶J[ço÷…x*Ó—€U¦««£¬´Tg–ÄËV¯"//×d“÷ª×DD]$òÞšnôÚëë¢òd**ÊùÔ'>nwó à£@=ð5`¤}Œ"PßÞßΓXºx¡Î*‰KééܰfÉ&+-3+" è"Ö¼jºÑ«¯½µ'tåå—±lé’îì"¸xØ|…À mC ”Ä´W,î^ž'°’­šöœœ®¸lµÎ*‰[k®½šììl«Í“€Ôk"¢€.yÆe.¯¾özTŸÐ=_ü<Õ}úDbWý;€_¸!ö¿Ž˜fòQà3@·ïì\{ݵdee錒¸•••Åu×\e²ÉÍA¾øŠˆ( ‹tÓK¦4lÙÂáÇ£ö„232øÞ·¿Ijjj¤wí!0E\‘öˆéÕ«ˆµk®ÕÙ$qï†5kLî).V¯‰ˆºHŒz[[[ÔêÐÏ2xßûö7ñû|Žï@ÇÃW¾ôE“ÒÇÊËËåê«®0ÙD7‹ŠˆºH„mÆÆ¢Ñ.s˜3k&Ÿ»ë3ŽïÀÞö>f͘¡3I\ãæÖšük*¬EDÂò© D,› Ô˜l’’ÂEË—Eý‰ VÀsÏ¿àÈŽ[½j%ŸþÄx<Eâééé8p€W^µ|Cx:ð[õœˆ„£tëž7ÝàÅ—^¦µµµGžÜí¸OÝùŽ ÁW_y_þÏ/(œ‹+ÝzÓM$''[m~)P©^‘p4‚.b]`TtzúôiΟOQQa<ÁÑ£FQ]݇¿ýý±ûbпÏÇÇ>rÿñÑ;Îŵ233Ù³g¯¯{ÃêïÜSÀßÕs"ŠFÐE¬{0N½/¾ôR>ÉË–òë_ü7••1ë¨ò²2~õ‹Ÿñž[nÒY#®÷ž›oÆï÷[m~3žIDÜG#è"ÖVE&ege±hÁüÈ«W­dÿþ¼ùÖ[=v\¿ßÏk¯ç¾ï|‹ê>½uÆHBÈÎÎfÛ¶í¼ùÖÛVš§;©çD¤+ú»³ˆ™`¸*`yYÏ=õdÌžðÓÏ>Ë×¾~/ÿŠâH¾ßïç’‹Vð÷½7¦#÷"±Ò°e 3ç. ¹¹ÙJó@-6þ"'"‰A#è"fŠ€å&9r„Õ«V’£Õ3«*+Y}éJFÉž={Ù±s'mmmÙwee7­½ž{¿þU.Z±ŒœÍq.‰)77—½{÷Z­E/^Ö«çD$ ‹˜¼cºÑ·ïý/–/]∰k÷nþøð#üóégxá…qìøqËÛ¦¦¦2bø0&ŒǼ9³©:Tg„ÈY{öìeÊÌÙœqïСÃL›=‡ÆÆ°K(ü˜£3UD]DìûpƒÉ>ŸWÿõ<¹¹9ê=é­­­<ò§?óÝûîgÝooŸ””„ÏçÃï÷ãóùðz½´µµÑÚÚJkk+---œ>}š–ð%¤¤¤°zÕJn½éF**Ü¿âý?û9ŸüÌg­4he3t±i%ð éFßýÖ½,]¼H½'QuæÌüÍo¹ïû?¤¾¡!ü/‡ŒŒ 233IMM%--””Ë7|¶´´pêÔ)N:ÅÑ£G9zô('Nœ ­­-äv~¿ŸË–ò¡ÛÞOUU¥kßæ–,^Æú Â5ý#°Tg°ˆºˆØ“ ìü&­^µ’¯ÞóŸê=‰š'žüŸùÜçÙ\_²]rr2yyydee‘••…×Ù™þZZZ8rä:tˆÖÖÖ.Û¦¤¤pókyß­·––æÊ÷å©gžáò«®µÒt ð’Îdt±ù;˜l²AII1/<ýO<}%²¶nÝÆ]ŸÿýÛß»lãóùÈÍÍ¥  €¬¬¬{n­­­:tˆÐÔÔÔe»ò²2>ûéO2Þ\W¾G7Þú^þôç¿„kö p©Îh‘Ĥ‰jEº¯˜i²Áѣǘ;gŽz©÷$"ÚÚÚøÉ?ã†[ÞÆƒ¶IJJ¢¬¬ŒêêjòóóIIIéÑçèñxHKK£  €ÜÜ\š››ƒNåxäÈ~ÿLJٱc'“'M$99ÙUïÕˆaÃøù/ÿ'\Íþ k-ìÓÙ-¢€."æN7šnÔ«W/&N¯Þ“n;ØØÈûnû ?úéAC_rr2ôéÓ‡ÌÌLÛe,)))¤¤¤ü{¡¢îHJJ"??Ÿüü|Μ94¨¿ùÖÛüñáG1|8¥¥%®y¿rrr8yâ$/¼øbÈï3@Z¸H$!éïë"ÝçvFÃáC‡ æÑ?üN½'ÝòÜó/ðþÝÎîÝ{.<1½^Š‹‹)))±ÊÓÓÓ©««£oß¾ôéÓ‡Þ½{SZZJff&n=rä'Nœ`ÿþý444üûëÖ­cß>óAߦ¦&¶mÛ4¨'%%ñ¥/ÜÍ¥+/qÍûvôØ1¦Íš®¯ZÀ:é" è"bîÇÀ£ŸÇÃsO=™Ð+,J÷üöÿ~ÇûxÐ휜*++Ö± <˜É“'3nÜ8êêêðûýÝ~^›7oæ…^àÙgŸåù矧¹¹ÙÒvmmmìÚµ‹Ý»wùå=·ÜÄÇîøpÄod•_ýïƒ|ä?î ×Lµè" è"bÓEØøSô>w×\u¥zOŒ}ç¾û¹ç+_» Èz½^***B.”Íœ9sX¹r% ˆêóljjâoû¿ùÍoX¿~½¥mŽ;F}}=§NºàgK-ä[ßøzD¾HÄZKK ‹–­à­·ß ù½ ¼¦³^D]DÌdûT“¦O›ÊÏúcõžXÖÚÚʧ?{7üìçü,55•ššš.§(,//gíÚµ,Z´(&÷å—_æþûï祗ÂÏØÒÒBCC‡]¸òæâ… øö7¿ßÿ·Q=ýì³\vå5ášýX®³_D]DÌ= ­>”œœÌk/½@fF†zO,¹ëîÏó£Ÿ÷…/^ðxYY,zU[[˽÷ÞËÒ¥KIJJräkª©©aéÒ¥ìß¿ŸM›6uÙ.==””” Ê]^_÷ùyyŒ><®ßÛü¼<êxû5úm®%%À;À›ú4ˆ¸ŸJ\D"ëE`´É™¼úâó=¾hŒÄ§žy†«®½þ‚9ÎËÊÊ( 2 ÐâÅ‹¹óÎ;ãêœzä‘Gøâ¿r4}ÿþýlÙ²¥Ãc~Ÿÿþɘ:er\¿Çïn®göü…ßãVÓ¸žÓä-úTˆ¸›FÐE"«˜e²Áé3gV7”~}ûª÷äÂPzàW^»†£Gv<ÑŠŠ¨¨¨èðXrr2wÞy'·ÜrKÜÍrÒ¿¦L™ÂóÏ?OSSSÐ6éééx<Ž9r>Á¶µñøOrÉE+Ȉã{9òóòØ\_Ï;ëCŽ¢§œ èê“!ân^uHD=hg£‡ý“zN.ÐÚÚÊm¼½{;.f“ŸŸOUUU‡Ç²³³ùáÈòåñ;ÙÇ€xàýéO³lÙ²„x_¸æšk8~üxÐþzóÍ7;”„ôë×—¿>òǸ›É¦ýÌ9 ³aãÆö :5=”ŸýqM³(€[L7jmmeÉ¢…ê=C;wíâ+_ÿ¼ã£<ñä?hì´ MW’’’HKK#33“œœ²²²ÈÎÎþ÷ÿ233ÉÈÈ --¤¤$<­­­–f innfÃÆüîäÁ‡~ ¨8ä0!ùÑO~úÿÙ;ïð¨Šï¿é!¤! $@è]¥÷"Eü¢ H—¦‚Š‚TéUz—*½÷Þ{ BÒÛîþþXÈ/[³w“Ýl’yŸ‡Gwî̽s'³w?sî™sؽwŸJY‘"EpwwOûܦM˜gþ¾îîîxzzrâÄ c¶¶¶Èår•0”‘øúøP¥råy¿VVVØÛÛqøè±ôÅNZª: Ü@zL<‚Ü…°  ¦ã I!8::rýÒyœÅè@Dd$3fýͦ-ÿªl¦Ô†µµ5...8;;ãääDþüùöONN&>>>í_ll¬F!m¸¹¹Ñ¯w/ôïK¾|ù4ŽGE½¥áÇÍUÒÚ;88P©R%¬­•A·|||ذaCŽŽùm,ãÇgÿþýZ¶wïÞU‰„äëë飇s¬ËXRRu4æMDDúâ@Ýo*(„ˆ'‚@{tÀt@bÒ¢ÔÔTJ—,EåJÅèé'™Œ5ëÖÓÐ.]¾¢ÉCågcƒ‡‡>>>/^œB… áì쌃ƒCšà5êÁicƒ££#...,X///\]]±··G.—ë\,$%%qþÂEvìú¢E‹P¶L•ãÓfÌâÜ… *eéC Z[[3gÎEY\.',,Œððp XYY– §N:sVåXùòåÓÜ\]]Ù¶m ÈÔ8°`ÁvîÜIBB‚¤1úüóÏ4hP¶‡uüî»ï¸ ö¦”›„Ÿ={¦R¶`ÎlÚ·û,ÇÎûî½úpòÔéôEI(}ÏÕù #žè c¾æJmôë¸_èß§·½wÄÆÅñÃð>rTëñüùóS¬X1ƒ…¹ åÊ•£víÚÔ©S‡jÕªí«,—Ëyøð!—.]ââŋܸqC«`ûö-AAAZ666>ìîîî”.]:íóÈ‘#éÒ¥‹Ñc˜À_ýÅÆiÚ´)µjÕ¢Fxyy¥Û«W¯xòä wîÜa÷îÝh‰„cccC×®]3fL¦ Æòøñcºuë¦1f …‚;w­š5Ù¾%ç&ÞÜ»ÿ‡|oHÕh”Vô(ñÄ„@ú) ¼$½c¯Z¥ ûþÛ!F|öŒ>ßÄßÿ±Æ1;;;|||(T¨AçªX±"mÛ¶åÓO?ÅÍÍÍ4‹‰ØXN:Åž={¸té’†€ áÕ«W:ýæA3¬¢§§'»ví2zñðáCÆŒÃ'Ÿ|B—.] Ö7nÜ`Ñ¢EìÙ³G㘗—óæÍ£AƒÙ2/ÆŽËÁƒ5Ê_¿~Mpp°JÙéãGð+Q"GÎÿ””j×oDø›7†Tÿ˜"žAÎGlLKT©RGGG“õÙÞÞž²eËÒ¶m[Z´hAjj*?F.—cee…³³3îîîDGGëŒüR¼xqï~ýúQ­Z5£úsöìYÖ¯_ϬY³hÔ¨‘Öè1ºðöö¦]»v4hЀ[·nžv,..ŽíÛ·ãááÁ‡~hö¹Q¼xq¶oß®QîèèHhh¨ê*Ù£uj×Ê™?Ò66¼‰xÕ«×TÖzh7°U©âÑ+.ô#¾”ÚÈÑÁ&åÙA;{þ<=ûô#&F3bGñâÅ)V¬˜Þ  ¶¶¶|úé§L:•¶mÛf‹;Fhܸ1Ÿ}ö …‚G!“ɰ³³£P¡B$$$¨ljÞÞÞ ooï4ñ•?~&Nœ¨’¤ÈP.^¼H`` #FŒÈÔ¢Ä××—N:ñðáCž(P€S§Ïðò•AAZ*¡´¢ËÅ£W ] è&ðjJi”@åÊ•([¦tž¬ËW¯Ò«ß·ê–eœœœ(_¾¼^K°««+#FŒ`Ĉ&ó1Ï nnn´k׎R¥JqåÊqttÄÍÍ ww÷‚ùóç/¨Üà˜1c$»:¥¦¦²eËzö왥ý·¶¶¦Y³f\¸pAÃr}üøqš7oާ§§ÙÆÓÇLJ;wjDȱ³³#$$DE°×¬^Ò¥JåØïEBBÇOž2HÏ×€‡âÑ+ä\¬Åfa•1¶ü»5O ’¿ÿcúô a9wrr¢lÙ²z7IÖ¨Qƒ­[·Ò±cG‹K°£N‹-Ø´i“6¿r•W~~~”/_^ú¼Ù²…îÝ»›¤ï¶¶¶,Z´HcÑ””Ä!CôÆ}Ïò0kkZ´h¡Qngg§a-?ñRŽþn´o÷¶†¿M(¹è c.÷¥6:qò!!¡yb€ÞDDУw_¢¢Þª”;;;S®\9Éf¬¬¬èÚµ+ , `Á‚9æ~=<J!„@²JjƒT™Œm;væú‘Éd|÷Ãp‚_¾T)wrr¢L™2:ýðííí™2e #FŒÈ‘Ù"mlløþûï™4i’Ö{lܸ±äs®_¿^«U9«éÑ£^^^å .$22ÒlcX¹re .œ¡@¿wÿ¤ÄL–ÈçíÚIùmï/¹è cÖbDø³ÍÿnE¡Päê™1ëoΜ;§Ræàà Wœ;::2sæL³ˆQSÓªU+Ê”QÄéêêJ)‰>Ó©©©DEE™e3¤££#:tÐ(eÅŠf¿>úH£Lý ‚\.' ðYŽž'­[µ”ò·í‡öŒ£@t@ŽWÀ^©žpöüù\;(gÏŸgÁâ%ª&kkÊ”)£Óç<þüÌŸ?ŸzõêåšqPÝ]½zu½a$µqòäIÊ–-k¶>7mÚTkù† tÆx7Õ«W×(³··×p  ÌÑsÄÅÅ…fM ŽèãüOϹsçÌæÐÑÑQg&×#GŽ˜­~~~Z9©/òžäø¹Ò¬i)û-š•B  ½ÈåR¥¦¦²qó–\5×®ßи'GGG|||t¶½zõÊ•â¥Zôš|ùòiL¢ÀÀ@d2™JMs«µüÁƒ¤¤¤˜­Ú4êVõȨÈ\1_Zµ”´1º+`…@ ] èå5°G²ˆ{õŠcÇOäŠؾs×oÜT)+\¸°ÎØÝ d„ Ÿ€(«Dn±bÅ$ßë›7o¸}û¶ÙúCDD„Öc))) s tõ@æ~»`*>iÙBÊü(Ô]@t@1KŒi´vÃÆã©2³æÌU)³µµ¥H‘"Zë[YY1qâÄ•„H*ê©êu¹rŽãÇ›­ß<п}ýÚl}qwwÏ3½ˆ·7T­*¥IñÈ„@sx(µÑÉS§s|$Š;wñüù UÁQ¤ˆÎomÛ¶¥N:¹z2¨ t'''éów®A—/_ÖÙh*víÚ¥÷¸9i{û¢.ÐããHÍ%nb­Z6—Rý+À@ º@ ЋX(µ‘\.gåêµ9ö¦e2ó.V)³··×éoíää¤5¥|nC]ÈæË—Ïhš’’ÂüùóMÞçÔÔÔðg1Í IDAT º\.7Ûj[ÔhKr;¬èÍ>þXJõÂÀÇ!ÐA†¬$«…-ÿn%:::GÞð±ã'4BÝy{{ëô§íß¿?¹~"¨oþ5F §wZ·n/^¼0iŸ—-[¦Óÿü=®®®fCmtmŽ“““sÅœ©T±‚Ôï†ps„@ ¬–Ú(.>žM[þÍ‘7¬îCoggG¡B…´Öõôô¤K—¼¡)Ôãu«'n2Ÿ´°‚IIIôíÛ—ÄÄD“ô÷ùóçÌš5+Ãzæ\\i³Ök+Ó/='beeEㆠ¤4é8ˆÇ®@ º@ Ș¹(c£Kbåêµ9Η6øåKN>£!àt…UìÖ­vvvyb¨»gã»mkkK¥J•Ò>ß½{—±cÇ%öõàAƒ4üæÕqppЛÜThë¶{Wž“iܨ¡”êî@+ñÈrbÓˆ@½ø‡¥þpsèðÚ´Î9¿·›ÿݪâÊaee¥ÓÂêììL‡ :¯L&ãÒ¥K\¹r…'OžðæÍ’““‰ŽŽÆÉÉ ___ªT©B­ZµøðÃ-2T£º@ÏHüê¢aÆ\¿~=íó¦M›ˆ‰‰aîܹVzcEp¯^½¸qãF†u+T¨ %ãe¦‰‹‹Ó(ÓnAÏ=‹¾Æ `ee%eÖøOlÀ¢..Aö³¸'µÑå+W¸eƤ4™áá£G<~üD¥L_¬ï6mÚè<öæÍ–-[Æëׯ2d  aÆ‚ÞÅÅ…?ü^½z±cÇ.\¸@Ó¦MY¸p!uëÖe„ ³ÙVýMBxx¸Qç©^½:¥J•Ò(¿xñ"M›6eòäÉ’c‡‡‡3uêT>ûì3ƒÅ9@‹-Ì:†ï5¥GÝ‚îà`ŸëÝ\ µÅ#W ] dŒ˜mLÃEK–åŒÈþƒªkk­‰e*V¬¨Udœ8q‚ãÇÓ¯_?êÕ«'©¾¾¾LŸ>ýû÷S©R%–-[FãÆÍšØGêY0ƒ‚‚Œ QheeÅ7ß|£õXJJ .ä£>bÀ€ìß¿_g–°°0:ÄСC©U«óæÍ#55Õà~øùùQ«V-³Žá³gÏ4ÊÔ#¶xyz庇G£ ¤6ùT»ººêÜúé§ÚõÃÊ•+©[·.M›6ÍT_ªT©Â¶mÛøá‡Ø»w/=zô`øðáüøãÙæŸ®.Г““yýú5E‹•|®nݺ1þ|VøÄÄDöìÙÞ={eÎR¥J!—Ë‘Ë儆†f:hïÞ½Í>–ÚÂJª t#ÆÓÒ©Q½:¶¶¶RPm€_Å#W °l„] ° ÉÙed2K–ýcÑ7Ïõ›7UÊÜÜÜtÖoÖ¬™FÙÂ… ©]»6+VÌ’>9::²xñbºvíŠB¡`Ö¬YŒ3&Ë#žŠ———†?¾6‹°!8991räHƒëGEEqíÚ5nܸÁ­[·2-ν¼¼èÞ½»YÇ/55•—/_f,Ð}rŸ@wrÊGÕ*•¥4©ä¾„@&b!+µÑÖí; ³Ø›ºt鲆uÏÅÅEk]___¼½U_"¬[·Ž%JP¹rå,í—µµ5S§N¥víÚi×™8qbö<ˆ­­5¬èRü½ÕéÖ­5jÔÈ–{ùõ×_³$bŒ=z¤Õ‚¬.Ћ-’+ujKr'²B„[Ì.ì^(#éøÏSÀ ¬èe ¬”Ú())‰V­²Ø›º¦’ÏÞÞ^g,êêÕ««|¾yó&'Ož¤mÛ¶&é›­­-‹-J[0,Y²„-[¶dË8}ðÁªãvíZ¦ÿüùóõ¾©0-[¶äóÏ?7ÿÓ2V …‚¤¤$Õ O.è’÷} ?tóSe0€•@;  P hüÜÖ^b¨B  –Çl Uj£5ë6XLDuîÞU P£-%û{Ò[}SSS1b?ÿü³IûçííMß¾}Ó>ÿòË/<}úÔìã¤mq"ec¦:Å‹gÑ¢EfKöT¢D æÌ™“=‹@-=!!A%î>@Å åsåC£Vê:÷tè 7²€Y_'€ÒzêØÝàk1d!ÐË"Ø,µQll,k7l´Èºw_ÕUC=)OzÒgÂ\¹r%ÎÎÎ:#ºd% H³¢'$$d‹?zÍš5U>ÇÇÇsÿþýL³I“&Ì;×䱿===Y·nÙ-ö  ¥¨-q’zâ¢|ùòQ±B…\ùÐpss£BùrRš¸õÅãÖ,´Ö£to1„|ïê¯C'º@ °,þ$ÇØ[¾b•Ñ nLELL Áj›÷Ô“ò¤=Œ¬­ÓRÃ'%%±hÑ"¾øâ ³ôÓÕÕ•æÍ›§}>{ö,‡6ëXyxx¤Ýÿ{Nœ8‘éó¶oßž•+Wê}s‘Š/Ζ-[Ì²ÒÆ•+W´¾=Rè~P5W%)RÇ7—OÄ£ÖäøPZÇAR×Pº{Å .,‡{À.©ÂÃÃYgaVô à`2]‹-šæŽ±sçNBBB¨ZµªÙúÚ¤I•ϳgÏ6ûx5jÔHå󌊇®N³fÍØ¿–o´mÒ¤ »wï¦lÙìÛßvàÀ­å±±ªû­kª¹å6ªWûHj“†LÍBÀ-8—{´ °U £èÀr˜ˆ4k ‹–.·(+zP°fè;õp‚ïIÅdóf¥—O‰%ÌÖWõ¨'·nÝâêÕ«f¯V­Tƒk„„„huß0†Ò¥K³wï^Ƨ‘uU*L:•õë×kdA5'ÉÉÉZM%&&jl­^½Z®~`|øäÅlmÀAïß¿_gVPcqwwgèС\ºt‰]»v1jÔ(š7oN™2epssÃÕÕÊ”)CË–-9r${÷îåüùó <8Óø¬býúõZËß¼y£ò¹IãFä׳997`eeÅU«Hm&Ü\LC”!QçµjÔ`Ýê•xzÖhdkkËÜÙ3ù@ÓµÏ eð€’bhó¶b‹å<ÊÐ\M¥4 c݆MôëÓ+Ûo FÍX_(¸÷ýÖ­[é~$®®®fZLDjˆñÐÐP>|H3FÿhÛ¶-+W®Ló=ONNfóæÍ 2Ä$¢®fÍšdr—/_æöíÛåoß¾Õpoù¼}»<ñÀøèƒ8}欔& Äc6˱F¿ûë¹——'K/ÀYφm[[[þž1Öí:¨'Úry'ÒÉb˜s?‚.X6ãŒi´héR‹°¢«GÒ°±±ÉP ?zô(­ìÊ•+fëk`` Öòô sP¼xq «[¶lÑØô˜×Y½zµÖòW¯^©|öðð õ'-óĘá‡ÞPè€,§ÿŸÔ*ýbxÞìYx*”á Ê–-ÃW¾Ôv¨0Y ±è û9 HŽ÷ª´¢g7êVõYÐß‹÷ÐÐд²¬3h(wïÞÕZîïïoöqëÕ«—ÆBgíZù=7nÜàâŋ呑‘‹Âݺš-YSö ô¤6)T3*Ké©­°ãç¨W·ŽÁ'ômlµ4†ÕÄ0 .²ŸßŒi´`ÑbbÕÄŠ¹±±µ‘,æÓÇ´>räˆÙüзoß®µüõë×f·Ê•+óÑGªaóÖ®]ËóçÏóü—A.—3mÚ4 w$…B¡±)¹@wú÷égÆÆÛÛK«os?ô¬Ã-›9œòñóO£$¨X1_Z·ÒªÞøQ µè û9ì—Ú(üÍ–-_‘­·µ±ÕQºˆ×(‹ŽŽfÙ²e&ïçÓ§Ou†TÔ–ÇôíÛWåsrr2sçÎÍó_†­[·ª¸A½'""Bíkpº ±y#²¥ ?ô¬ã+@ãuM—Îðòò”|2={': Ì8*] d3ã1".úÒV¡rά]Í‚®/éÎ{ ºƒƒjhæ¥K—bÒ~Nœ8Qçâ!555[Æ®^½z4l¨jÜ×LÓ-¡«ÿס}¦NZ¾œÎ—H2%º@ °îë¤6JJJböœyÙ$ÐUCŠésyöìU«j·­[·ŽAƒiĸ6–{÷îÑ¥K—4˽.J–ÌÞÜ ýû÷ÇÇÇGcÁ²|ùò<3ñ¯]»ÆÒ¥K5Êe2YÚ¼y­­-3§ý¥Ë5 ×S¶Li]Ñ?ô!¢‚džÖêùœhþqÓL´LéRº•C.º@ °~$+Ô­Û¶ãÿø‰Ù;«¾1J&“ééñññ¼yó†Zµjé<ßîÝ»ùâ‹/¸wïžÑ}R(¬Y³†Ï?ÿ\#%¼6Êg‘Ì2œœœ˜2eІà\¶l{öìÉõ>00‘#Gj7oe¾<Ê•ònä@üJú n~Z¨4kö1ùòen/giݽ jYJB  ‚ìã°Pj£T™Œ?§þeöΖ.©ùã¢/ÒãÇ©T©¾¾¾:ë\¿~Ö­[3zôh¤4 ó³gÏÒ¹sg~þùgxÙÚ°µµÕ»`0•*U¢OŸ>÷3iÒ$­ñÀs ‘‘‘ >\«ßypp°ÆÛŠ*ðÃÁyþ!QQú¢RôÌQ(¡^Ø ^æ÷q–)UZçÚ(,†^t@`9ü ¼•Úèȱãœ>{άõòòÄÙÙÙ`~ýúu>ûì3½ç•Éd¬[·ŽÚµkóÅ_°fÍnݺ¥‘m366–³gÏ2wî\š7oNçÎ9wÎð1¨U«–Å„éëׯŸFlôÔÔTFÍÍ›7s¥82dHÚÞ„ô¼yóF#>½ƒƒ3§MÍ3I‰ôQ®lYÉki”‘AÆ¡U‰KIL¤ oo½ûw=ÅÐç^lÅ9Žp`0QjÉ“§°÷䬦ÆÊÊŠ2¥Kqãæ­´2õì¢é¹ví_ý5K–,ÉpS¨\.çÂ… \¸p!­ÌÃÔ”RRR´ÆV—Âÿþ÷?‹ù£[[[3cÆ úô飒°(66–!C†0}útêÕ«—;&xx8C† áÉM·¬ØØX­ ›¦M™LÕ*•ÅÓ(YÒOòôB™Qô’½¬è^^ž”Ê‚ý+ööö89å#>>Aô<†°  9“™€ä´’÷<`ËÖmfíhÕ*U4–.îܹCRR¥K—¦M›6F‹»·oßfZœ»¸¸Ð¾}{‹ú£»»»3wî\ÜÜÜTÊ1bÇÏñûùóçôéÓG§8üø±F›Á¿¥ã猾æÓ€~ûc"MŸÉÕk×s|„¿ÅiVIÕ½L&S¬ …‚Õ«W3xð`Øà–Œ\.géÒ¥üøãZ…qLL þþþâ¼JåJÌû{ÖÖÆý”]¾z•Á? #99Y¥üø‰“|Þé« CpZ*®®®*XPtóPÐH–P®\Ù,»€»»èB  ‚œ„öî¿’XöÏ ‚µX)M¯¯>E‹ª”é>'NœHsO5j+š?dÞ¤I“,ÒzÊ7§OŸàÕ«Wܽ{W¥RçÊ•+tïÞ=G¸¼<}ú”~ýú±téR­–ÿððpüýý5ŽU­R™k×hlB6”/‚è?`°†8¿ÿcùAoì~KÆ+ºèơ՗¥l™ÒYv=t1üB  Ëä°]j£ÄÄD&Nžb¶N¶lÑ\峺 TïÛÉ“'pttdÙ²efÍæÙ³gO£ýßÍÁñãÇIHH %%…°°0RRR¬ž ž?γgÏ46 W­R…kWë³,f¸ÈéÝo2xËpæÜ9fý=7g ô’’z ”¡ûY Ћx{gÙtjw1üB  ËeF$/Ú»ÿ§Ïœ5K[}¢šÃ#%%E¯›ËÆÓ ’¬Y³''Ók‡&Mšðûï¿[ô{Ó¦M€ÒzžÞªÅÝ»w S©úôi:wîÌ‚ ô.ŒÌEjj*;wîäË/¿déÒ¥Z-Ø)))øûûkÜ ÀU«²qí*}VÅ ûÛ¾sRã˜zÁ¢%K¹©eañݯ„1z $©”Q/°±±ÉR£‚î½8B  .,˜`Ž1 ýýLŒ¦ níÚ‚êÍ›7:ëß»w«W¯¦}®^½:[¶l¡P¡B&ëc£FøçŸ,:Žö¥K—¸wïIII„‡‡k—Éd<þœ‡ª„³ŒgåÊ•´oßž d‹zrr2;wî¤cÇŽLš4IëFÐ÷óâîÝ»ÄÄÄhû¤e 6oX›)qþï¶íü»UçK'0ƒ©2£ÆŒÕ¹±ÙRÑ—ìK¥ÄãT2+¡B… fi([=çrÃ/º@ °l&ÁR=~ò”V®6yçlmmiÿY[•²ˆˆ½¢gõjÕ~U«VÝ»wk$ëÉ zôèÁºuë2–ÛÔ¬Zµ €—/_êËýû÷yùò¥Š•ý½Poݺ5ƒæÈ‘#&_ Ý¿Ÿ™3gÒ¦M½Â<995æ…••Ç~ÏòÅ qΟßè¾øû?fÜoôU¹Š2B’ê=>žèèhâããyóæ ðìÙ3ž"ܢС%£s§/:2kú_Yv‘?&OaÙ?+´z˜;­+ð0ð4ľlF/Ä”] ÈËÌ~Ú¨TÉ’Ú·[_H¯L“ššJ£[üÿîòŽŽŽTªTI§X,X° [·n5Ø*õæÍ^¾|ITT666,X"EŠdùkgsñöí[:uêDDD=RÙ2ãýÖ6c\´ŸhàKà°˜6†!6‰ ¹ßP¾b”ÄÓ€þž;ߤ³µµeЀþ*e‰‰‰ZÃé½'""‚I“&|B… QµjU5jDýúõ©P¡BŽç'N$""‚èèh qÛ­k qЬiSŽÜÇ„ñã(P@{ ‡ääd^¾|ÉíÛ·¹wïAAAÄÄÄHu‰ÐI||<¯_¿æÑ£Gܸqƒ€€½â¼ÚG²aÍ*Ö­Z‘eâà÷‰“ ç©ÀÁwÿåž­¬X¹:ÇDt)ZT²º‹è’Ðúê/«]\l¬uº¸$šñ^gÔĹÃå¹»úbÚ.äU¢€áÆ4\¼lyF~º™æ«N_jlH}ùò¥ÞŒÇŽcÇŽyî¹uëVNœ8B¡àÅ Õ·ÃNNùø~ð@míììèÛ»'gŽe@ÿ~z­ä „„„¤‰éû÷ïÀëׯ‰ŠŠ"..Ž„„’’’HMME&“‘œœLBB±±±¼}û–yðàׯ_çþýûg(ú+U¬ÀŠeKøoûV5l¥ã·wÿ6nÞbHÕ#Àû·r”EµÌá#GsÄü12’‹CѺcØ5‹³[Ûè”jIf¸Gk`°°O÷IFé…!ÅÃ¥+Y~1u2Flr'›PúÓ~&¥Qjj*?ý<–]Û¶di_•'´ƒcFd؈Qie2™Œàà`J”Ð\eæÌ™|øá‡”*•7ö±=~ü˜Ù³•wÃÂÂHLT5–õíÝ[g±àêʸŸGómß>lÚò/ë7nâå«W:ëËårâãã%o¼•ôÃckË'-šÓõ«Î4iÜÈ$¾ðAÁÁŒþeœ¡Õ7¨}¾4ÔUyÕšu´nõ‰ÅÏ¡Bé"÷HÀå[AÆØëúÎe%z,è 3Üßà‹te±€³®{÷ðð b…òÄÇÇsýÆMm‘™Jß³ÅôÉxe$r'ßqRݼu‹«×˜´c?ï@êÕTÊÂÃÃ5"¤'11‘aÆéMp”[gøðáikõÈ-ÞÞ^ $-šˆ§ga~øn0çNçŸ%‹hÒ¸‘Éaº(Sº¿Œþ‰ËçN³dá|š6ilqž*“ñÃð‘zçS:âjeWõ58wáO,~,hT6KaAϤ@wÉb ºžï©)5\>`‡š8y'ÎU°²²¢í§­Ù¾e#×.žcÚUìܺ…ÿnÖµX ¦ŽèA^æ0ɘ†3fÍ&((Ød³²²â߯kDèxöì™^W——/_2tèP“Zw³›øøx†Ê«wVnm‰{ÆŽM~#ÃCÚØØðIËë㜠IDAT¬[µ‚—/²pîßtþò <= gù½8çÏÏ'-[0ù œ9q”ã‡2h@<<Ìè=õëÕÕwø;`?PPL'!Ђ¼È9”É&$3yê_zÓÆgüö+uj«ºü¦¦¦âïï¯\øøxÆŽË´iÓrD„—¸¸8¦L™ÂرcÓú«P( 22R¥®‹‹ «W,36¦u®çèñLŸ)9¤ò+ £Ð7 ºþ±c=>FDûtéLÑuà·‰“ôæ0=t[À=§öŽêç...¬[µ‚¶Ÿ¶ÎÔ=ÔªY#£*­QÆßo/¦“èA^d4ðTj£øø†Eª SœÛÚÚ²tÑÊ•-«Rž’’£G2Þ …‚-[¶Ð±cG޵ÜL§OŸ¦sçÎlÛ¶M¥ïOŸ>Õç¶¶¶,Y0òåʉ™«…»÷îóÝÐáÚ’¡dÄ$”o•ô„ft¢#ÇŽ[ôås’lAwň åyœCÀ6mbbb9:sn‚… ê]3yyÚÀ)@§röô,ÌÖM¨W·N¦¨Dñâ888²`Ø…2‰‘è /‡ÒçO²¢¹vý -1iç (ÀƵ«)éç§U¤ÇÄÄdxŽððpF͈#xòä‰Å ¼¿¿?Çgøðá„„üÿÆÛ÷o Ô7ÅZ[[óן“hÔ°˜µZ æ›>}‰•Úô°ÜÀºN +W¯‘’’b±ãä”Ϩ(GNb†If8Ê,›š‹ò3gY·a“Ñ'.RÄ;;zµ²§¬ˆ2²Wy]J•,ÉηP©b…,üôdŠVcÊý!y:Û½èAÞãFnÊ™=w·ïÜ5iç<= ³qÝj|ŠU)—ÉdøûûjÐyNž`û¿›(VÌ7KÈ£$ï©ÿ¡?Ê’è W2¸#µQjj*CGŒÔˆ0’Õø-ÊÖM(]ª¤J¹B¡àÅ‹”ˆF¡PpêÔ)¾ùæ† ÂLÞw€¤¤$öïßÏàÁƒéÒ¥ {÷îÕpÃçáÇ$'«jE[þž9]ˆs$&&Ò§ÿ?yjLóë(ã|ŠA¯`îܽk±ã•ßÉ(­-ºq,¶j;ψÑcŒqÇ xñbº}"á4­Qht*åF °yÃZ­{^9uú ë7nbæ̈́„„JºWWÉV£ÇÊŸÛ±ß' O’ôD#]’¯Ÿ¿ÿc&Mù‹‰~5i}}}ØþïfzöéÇ›ª5"""ˆÅÏÏÏ ´Úr¹œ‹/rñâE\\\hÞ¼9õë×§fÍš¸ººfI£££¹|ù2çÎãèÑ£:]/’““yþü¹Öøíùœ˜3k­>i)f¨d2ß û‘+×®i¬ÅÈ8š…å«s)) 2yÞ¾s—®_Yæ˜åtsÓ¥_wIõ.^bõÚuôî)9»+åË•ãä©ÓÚUÊ’qÝÀ?úž÷íÛ}Æß3¦©¸Ó¤Êd?~‚[þåÔé3*Ž|ùò±|ñB7jhÐ=HŒ#§Qÿò¤µBÄìò6¿$?8¬¬Xºp>­[}bòÆÇ'0rôvïݧõ¸‡‡>>>F¥”·¶¶¦B… |ôÑG”,Y???J–,‰»»þÀQQQH@@7nÜÐÈú©¡ ÂÃà Öjý/Q¼8Ë—,¤BùòbV꿱¿þÆÚõµýòË¿ªŒÚ L¦¢—êÕ>b×¶-r܆ λ÷HmVe–JqTÎù´-Â؇¯¯¤ž9wŽ®Ý{ê:¼è«kÌê;¯ozðû¯ãÒDtJJ ë6ldþ¢Åz]ɪV©Â¾ÿvt}úàðQÉQ䀟¡‹åÜ„°  y›ÉïDˆ¤|å …‚‘c~¡J•Êú|#³'§|,œ7‡êÕª1yê_¤¦ª†®'22’"EŠP¸paIV¹\ν{÷¸wïžJ¹½½=ùóçÇÉÉ)ÍÂM||ê'‚‚‚3ìWq ~êQQFe}¶º£'”enEø  y›TàëwFoß¾åû¡?š4ôbzúõéÅÖM(URãÍ12™Œ   îܹCHHˆÑ~žïINN&22’àà`îß¿Ïýû÷ &22Ò`q®P(ˆŒŒäÁƒqnkcÃÔÉÓĹB¡àï¹óéÒýƒÄ9€§§§Á÷¬ÿœÖÖÖ8ç׺6ü:/N !ÐÁ”™Ü$såÚ5fHOc45ªWãàÞÿèß§·VKyJJ AAAܺu‹/^d˜…Ô$+žÔT^¿~Í;wxúô©FVÐ÷Ô®U“CûvÓ¯O/£³óå.^Êßsçgæ'€¥F¶4´bhXxn肬áG”á 5ø}òŸ’£ ú¶_F϶(cüªê«èîîÆšU+èÖµ  |›8fìxfþ=Ç  ø ŒÊòÝ ÕŽŽ&$ƒ\înn ü¶¿¶C•QÆH] ä9Ö"-ºE‹–.ãÔé3f먣£#¿Žû…=;·Q«fM­ud2¡¡¡Ü»wû÷ïóêÕ« ³‘f†””ÂÃÃñ÷÷çÖ­[ë´´{{{1mÊdþݸ^J\à<ÉŠUk˜2mzfNrÓž±Yb’10$cXX˜EŽ¡‘]¨ú,z4Ðò&æíÛ·Œûm‚¤“U­R…oºwËt§*WªÈîÛhÔ >ðÞeñg6lÚlð9ììì˜;{&žž… ªíú ßl,Tž=ºãèè¨m>Ö] äU’:Ëår†ŽevRµJ¶mÞÀÂys4Â1ª(´øx^¾|ÉÝ»w¹}û6„……g°¥(= …‚„„"""xþü9wïÞåÖ­[<{öŒèèh]]]óÓHN=Lׯ: «ylØ´™ 'eö4cÇ™`Nt'=q£ß*,èÝFéþ£úÉS§Ñ¼ÙÇú2…ªàààÀò% ™3 /58‹m£õûó*Wª¨*œOŸaºn7E ²ËØÞÞžyÏâS ¼ ûöȰ^ÕhÙ¼;ÿÛ­~¸’è /søåÎIœ9wŽ9ó0|è÷fï´µµ5íÚ¶¡]Û6\º|… ›6³gß~ƒ’½ÝY-ŠjÕ¬AïžßкÕ'ÆFÒÈ“,_±Š?&ÿ©Mœkˆ=„  ;§È‚.49"#"-r<…ºÅð ʈYÒ>{Æú›èõMƒOdggÇÈáÃèÙ½;výǹó|FdT$QQoQ(¸»»Q¶tjÔ¨F§/:R®lYM‹Ll,?ýE‹²yÃZ|Š•|¸øx~ý}¢Au»uýJås¡B…´-”„¼2Qį‹@ ÐÅ%`Fl´»ÿà?ý<–yϲȳ²²¢X1_£,B‚¬#55•Ÿ~«+‚„¡YBßsèEÖ[Ø ò{ONÉUô1;MÆ ”–ô¶é ¯ß¸IPP0¾¾¦wS(ìÞ³/ÃzùœX³r¹Qâàç±ã |ö,Ãz  •Zä;íÆ§¼47Eœ/@ ¹}ç»uYEââãéûí }áݤì‘z´ÇˆŒ¸PРÅFJª… ô$cš ºiY¢­ðȱcf¹ø»÷ Ú´ùç¤?´n.5„i3g³c—aÛºwëªá¯#RVj^š$B  ‚ŒÜ7¦áä)S¹pñ’A ¡¡atêò5ÇNœÈ tD™×¿‘®†T´Xô$áâbìÞª;qÒ,ø(ãtõêÖ1ÊåF.—óç_Ó˜·`¡ú!­ŠÛÛÛ‹A¾Õ(ûVëZ;O½Ù] dD,ÐùÝ%‘*“1èû¡¼~"FQ€¿ÿcÚwü’Ûwîôž2 ;pÊDÝuÅ@—”T µ 'eA..¦%ÐXÞ¸yÓ,õêU†uú÷ícÔ»ï·Y´d™¶ÃZ߈ûy Îù5ƒ³hÉ+ ÀÀ§B  ‚¼Ä ·1"*<<œC¾3hC’ wsþÂEþ×¹‹¶×ëR¥o3ØfÂ.»ZÑRcÝÇÆÄÓ,ZÌV“sT½ 22Š  `“_ØÑÑ1Ã:U+W6|5—ÀÒåÿЬէ9vÜàv ë×§ýgm5Ê“““ Ö:ÞB  &[?ixíú †%)§ w±~ã&¾þ¦oß¾Í qðð‰»mp˜Q[3Aš›È¨(cĹ³hz´*Ù;wïšüÂe˔ɰβú£¼$&&ráâ%ÆOøƒº ›0ñϩھۺ¿XÅ|™?w¶Ö°=B&“©[3óÒQ\~>>3 ®ŠðÚ³o?•*Vàû!ƒÅ(æ!’’’øyü¯Yµô=¿3ÌÐý2†V´³À›ññ ÆDq ³Ö,<R••Ýó/L~ázuëP¨`AÞDD謳tù?lܼ…j}HoolmmQ(„††ü’ÇOžªß­Kgæ_V/_F¡‚Ú÷__º|U×9¿Ö¢Œ%/º@ ¤Cþî!y¨”A] á5}Öß”.]š6­[‰‘Ì>{FÿCxððaVžö7Ìë¼´¡m,ÐÅ%êm”1Í„@7)@  &å…\\ø¦G7fÏ™§·^LL §NŸ1æ:Åy~''–.šOÙ²º×¾gΞÕwî"±'*§!\\TbPFÍüë¯P(6b”¶ ‚‚\ƃ‡hÛ¡cVŠsð#æMDd¸Ý]\"""i*f¯ÙЧd– ð-%ýü²ú´ï}µŠsoo/¶nÞHÃúõuž 66–Sgô tg`M^˜B  cxô@i)‘DBB½úõçÕë×bs!ÑÑÑŒ;žþƒ†e{ ÀP`¶™o§¼¡-1«ld¤Q=\Ìb³ !Ѓ_šåÂŽŽŽÌ=Ó  £Ðé®V¥r%þÛ¾•*•õ¿xýoÏ^CB–þ¨+º@ hgÊz’ £ÿÀ!Æf9X(‡ããOZ³~㦬úðfM›j¨{V2FDñrrÊÇ/£b÷ŽmñÎ8˺  =õ ŒÛ¿"º@ ÈÌXWåá~óÖ-~5ZDvɼ|õІ Oÿ„†f© s8Ð Øœ ·U û´œœò[ÜßÅl‘Z3:ûzl\‘‘Qfë@»ÏÚ2ÎlC\´ì¤bkkkÚ~Úšc‡0h@ƒÞ08yJŠûcE mnžb“¨@ È,? ôÕm™A=+Ô"»ìÞ»???~1\Œb$*ê-ó-fÕšµ¦ˆsh<˦۫#¥rÁ,îïcHB-<3;û:@Pp ¸›­Ÿµù”¢EŠðݰá¼x¤ïù z6€*X.;Ñýë®øúúܹ\ÎôYKíú4”ors%‚.2K*ð%ÊdFñ^¤§1oÁBÖmØ$F1ŸÀ‚ÅKhдK–-7…8ß4ÈFqÐBJes *C 6J ˆn6´nÒ0G$uªWûˆC{w3ôû!Z3{¦C§8ÿù§Q\:wš1?”$Î6lÚ­۷¥v»"PMt@ ÐÿCÓÃ"@h¼&÷Ûö<$Fщ‹çŸ•«iøqs¦N›‘•›@Ó3 øe´ ìÂh$¥!þµfèÒ]\dÀs1ÓÍF‚ö…UpöLzggFÆåógX¶hßtïF¹²e nøìööö’¯Ì”iÓÕ‹å6-º@ è'eøÅɪ@&cè#¹vý†E äíÛ·Ìž3: 3aâ$ÂÂL*û-ÐѲ˜Ö€ƒ”%J·¨¿™B¡0Fè½@Ÿ[=;,èêB½u«O˜üÇŽÜÇþÝ»hÙ¼Y†í¶lÝ&9¬jrr2¿ûAÛb_CŸvéÜI›u¿è@1g¯Pº½Hû¥JH w¿oy Þ°[ áááL›1‹ºš2kÎ\I©¼%r¨JölÕ†¤}GGG‹³ ¿|õŠØ¸8©Í„ÿ¹y‰×VhÎH.†P¥r%V,[´)“±ÕñE&“ñǤ? >¯\.gè#¹yë–ú!ßkkkôïÇW¿T?ä„ÒÕEt@ È€ÝÀcFDFÒ½WSYhòäi£GÝFM™·p±±&KÚ'þš£´ÞZÎ(ã,ÌU«`mmY?§>2¦™È f^´ZÐÍ ]*]¿êÌŸ“ôç ;}ö‡Éð\©2£Æüž}ûÕ%£%€IÛ6ŸR¦t):´Óºvî'º@ ÆR`ŠuU6¾xÄ×ßô&&&FŒ¢™¹}çÃFŒ¢y«OÙ°i³)6ª¬€fÀ,Ë­â+ÀEJƒÚ5kZÜßÒÈ ®·Å· ûú ³ §§KçN/^LoŸÇÿJ„ž$Y‰‰‰|;h[¶nS?$4œØííí1l( ŒÝîíí¥^%Wº¹.LÅX`•õ4"»ÆMölÙ>iK•2¥¡!™ímbˆ‚.Bl½„jE®ÍücS§Ï)šÉ‹/˜è|yóðãàA1¶ýŸ†ü@Z5 ¶¹»'2ôsb{›ââ"Blñø8˜]ÕeÌø‰$I’„¯ÚµIFÁù ˜·`7o!4446w¬FWãÈŠmÌÔ¾m›<™c'NX4LîœÏÂ3Ô×›°e ú¿têО³çαaãeÈCw IDAT&«n·_Ÿ^têÐÞh{è{ƒIŸ^Š‚.‚`9ZÀ~ÀÃÜÁ?ý<wwwš6i,’ŒÄû÷ïÙ´e+ó,äì¹ó±½û7À<`p?މ.ÊýƬ/ÊÉ’%£A½º6w2ÿ{Ʊã'¢½-'''~ü=];w2Ù/ðÁP‰¢  ‚ D+@5`7Êœ ô‰'¦Vê"ITJ³ÅË–±xéòÏQàé.0ø xGEØ0; K³/›àææfs'³eëvKüÏw)Õ©« ú'ܾs‡0ÎdåN[ a„Ì=‹æ­ÛÊÎb442I“&eÌo£Œºµ|ˆ‘BNímbˆº Ÿƒó(w?s†étôêû5ûöphÞº}‡þ¿§TùŠLœ<56•ó7¨üö•QŸæ'Æaå<;ª’©ÙJI—Nlò„6oÝfɰòHúlT,ß¿ÏÝ»÷âÄ $I’„…sÿ$k–,‘›œPno&©\©"Û7ÿ­I9W‹—Û‘ÒwDAA°gÚ–(wïß¿§s÷žì?pÐá„vñÒ%ºõìMÕµXµz­Áb 1@0°h¤:û°í¬,QX$3w`»6­IŸ.ÍÐÓ§Ï8m~ p° ása´"Ñ›7ãÌIxxx°xÁ\<<>ñ\4ê©‘4iR6­_ù’)cFÍû:qòtäŸ^Äñg‘(è‚ ØÇP>éoÌøîÝ;:víή={ã-À°#©Û° [¶mNP~åÍ€4@`¶Y`ÈFÅÍäž(=ºu±ÉZµv­%ób?v过0š{ÞÂj°Ÿ,žžÌœ:gn9º°0¼½½ÍÚÇ‹/¸rõ“øóóö81DAáss¨‰ªzÆ ¥{¯>8xÈ®tûÎ]*Tù‚¹óƤblBUù̇Ê+Ü••%ÈÎDÚøÚ’ݺtÆ#U*›;!NÇ’¥Ë-ºRAŸc .^Œs'Sªd úõoPp0ÇŽ7kûoÚ‚N§‹üó|QÐÁ¾H€J÷—ȤÀÌ<È‚ÕØÔÄBKz§n=ìZI_¾r%¯üü¬½Ù»zål PH‰*(5…¸•"Ñ\ê¡r´›]š6SÆŒtíÒÉ&OjÏÞ}<ò5;5_°N?Ÿ•ÆΞ;oIÀïg§oïžxçË«©ïì?çšµ]°h±¡9¼ZtAˆûd†§õÊà}à*Àäª4ý-ý ?å#í.b‹¢Ü]ÌöI ¡S·§Q)Í\³W%½v­š+RÄX³Ê=¥ ªf6ý *ÐSP~õë°°xš4©ùiÈ`›=¹‰S¦Zâ ዊ9>?;#ÝÏÿ—Ÿe}{÷4fEÿè_¼|I³Vm¸~ð·ÏƒiÕö+‚‚?ù’øïûXtAˆ£Ô¾³âöÊ3'(·2"b«sUÌè©%Jz‡.ÝØ¹k·ÝÃÅÅ…9ÌÀË+gT]“]õò;†*“ÄçQ|`0 ãKœ™8v É’%³É¼xé2;vZ”%ñ4ä¨b£Éë÷8›b„\^^T­RÙXóG‘ž¾S»~#Fþ:šËW®Â#__þ˜ó'5ë50_ñ=O '¹/à"àÃû8*s¾ Çðå-²¡Š¨ä4w ‹‹ Ç¡aýzv# ??:téjîgï@T0è<”µÉQ*FææÅ¢³‘Áг{W›=ÉŽ]º±s÷s‡èï-?[ÑÅîY 5nZ¿†‚ ÄÉÛ¾c'»÷4Öü•¬Á¢M£ Ø-’±B°w ?™ê A²gÏF.¯œdÍ’…$IãììL` Y™å2 üÖ;oõ‹ˆ?Úøë=Õ³*ㇳ}ÇNR{¤¦@~»†›[Bš4jÈ›À7œ=§9õo| 0*ebG -*8ú•ÎW”_ê2”¾ÅÔ«S›aC‡àäd›¶¬'O1zìxK†Ž¶ÈãŦH T4Ô4iR*”+'O*‹§' /&$ä¡fýûÒÕÌÍ5ˆ»Œ5¯ÚÁžéƒJ÷ñÄwr¢~Ý:´mÝŠ¢E ãâòiR‡À  ®_¿Á‘cÇ8xè0§NŸ1§jãcàWT:·wr¢Mb”q5³rNN 4n]:Û•@6nÞÂÀA?dQŠòà(°e]·eÝ •Oÿ7 ot7–7OÖ¯^I¢Dn6y²:Ž: qùŠÙ1ý/3PØ–ÉÜ4¤—¥I“š‡j.dktëÙ›-Û¶›êârÏÓ4õQư ö>!Ä‚.Ø;_©Z ««+³gL£O¯ždʘÑh*¨øñã“!}zJ/NÓ&éÒ©#%ŠÅÅÅ…;wïfÒ}3 *Ec{”¯úe¹Ñ"eIÏä1wðC‡Ñét”-]Ún’;—µkÕàÒ¥Ë<þçK”ÙÌü?>£º~ÎÞÇDeC¦*}b ut7æé™™å‹’"Er›=á%Ë–³|å*K†~GŠÍá§WåŠÜL‘Â…È–5kœ<±—/_²wß~S]~ |;aÚxÜXìBtÁÞéH$kZßÞ=iÛº•Ùruu%[Ö¬Ô¨þ_µmC†ôéyòô)Ï_˜L6’L¿Ú¯\È%±˜0½’ž•6Ð,ŽŸ8ÉË—¯¨\±‚ͺ,˜KŠ)hÞôKÒ¦MÃÑcÇÍùÂó!ñP»j¢‚®¾Ò£ê<µáÓO ˆ£W:3Xc£éÓ¥cÕÒ%d̘ÁfO< €.Ý{ñ6$ÄÜ¡gP¨"äqb“<ÚÔÞýýiܰAœ<©7A¬Y·^ë³ÈØÃù *KÕ G™ ’ÅE°wRFþ¡u‹ÑÞhÒ¤Iiß¶ Û7oäﵫù¢ZÕ¨”¾b(«Õb”°`:½‚ñ³%ƒ.^€A?¦³Ÿð'''Z·lÁŽ-›(SºTt7ç ”CåK?‹JÓ¸• &·-¬I€fÀZý±MÄŠàiÒ¤fÅÒEdΜɦ¯ùØ “,©,ª¿Žc»M´oÿ.]¾'O*}ºt– þF¹®åG% pÄ]°wö£ªª·{Šä\8}2FvtþÂÆN˜Äþ£ê€*&ó.—Èbú Òç™mh¨V¥23¦NÆÍÍÍ®Áê5ëømì8ž?‘‘OP¾ëgQÖØ³¨x‹˜"9ª¨XY”…¿$1ôå7Cúô,^0¯œ¶]‹ìÊÕkÔ®ßù‹Ì¯ÉòذifÝŒ5Ö©U“Yӧƹ“ºyë6UªkN¸rÀ¼UÿþqÔÉ º`ïìþKÄš#{6öíŠÙEøÉS§;aGªëA”ü¹LÓ ˜ùY(\¨ óþœMª”)íN(Lœ2¹óD+a ž£*ôÞÑÿÝ¢Oÿý 62ÖHвŒgùà/§^1ÏòÊïãͼ9³I›6Í/Àš¶lÍñf6 ×[ç*ý¥a…Íɉµ«–›*Zf“ìÛ€¶:EµðŸ¬ADA€|àÓçž(—ÏŸ‰•hø;w1lÄ/Æ ,üËà[”­`ÕQ™HÌ®$“5K/˜KOO»Ì­Ûw>ò-_ubšT:µIŠ ÄA}Q­*Ó&M´Ùl-²aã&z÷3»6Ë}T̆dm±m £¾J¡_HÔÏ ,ÀßkWÇ™8š€€~ÙŒ[·Ú¡vÍ‘œüŸ A¢‚½“ å¿Àû÷ï)\¸`¬DÃçÈ‘Ö-›¦ ãÌÙs†JqG Š4ÔÜ€]r¹,â6ÊòRð0g @oÜLéR%H—ÖþBR¦LAㆠ(R¨7oÝâY̸½hÁE?Ç?üû¬1PNNNtëÒ™1¿"A‚ø6-ƒ‚ƒéص›¹õBPù¢å+íó5*þ”ëc„¡{äÉÓ§¤M›&NÔvøçÉÚvèĵë7Œu¹TE¹} ¢  Æ}àûxð†F êÇÊÎ]]])_®,¥J”àÐá#~”ÁÎ °Oÿ`~ œKf¯€¥@ L|"6DðÛ·¬ÿ{#ùòæ%{¶¬v)œ¬Y³Ðºe ¼ræàêµëøùû;ôdI“&5LŸJ»6­Œ¦Yµ5&OÆî=ûÌÖåË+Ø6N¨˜¤úÿgj{ôØqê×­K²dÉlö„öìÛGÛö¹ÿࡱ.a(ãÔm¹ü¢  ŽÉ[TÐM’¸{ïù½½É‘={¬DæL™hX¿‡ŽáùóÒ2~ø®lFùã –]ë%¨¯&%Ìøþ}›6o!mÚ4ä÷ñ¶O ÀɉܹrѶM+2¤OÇ•+Wyèp“¤úÕX4.yóäŽ3ÇìççOï~ßj^Í©¨¢M‚íSeA×ø¼zÏÅK—ù²q#›[`óÛïcöó/¼}Ù«í#ס¨j¿‚(è‚“pöÇNœ yÓ/I˜0a¬„»»;õëÖáð‘c<}úÔØýè z,#•à f¸Q„GD°s÷t:eJ•²›\鑉/ù}|øª]²xzrçÞ=^½ze÷#MšÔŒ>ŒÁĹì=S§ÏàБ#æ ¹ |‰²R ¶Ï8 Ÿ9?~ÌËW¯¨Z¥²ÍœÄÆÍ[èÐ¥+6j'Ðÿ; øA.»(è‚´þh•Ĺ hX¿^¬–ON _T­Â†M›Œù’z¢ÒL]”Ë-N£Ü…êñÿ*uš8~â$×oÜ Z•ʸººÚ­€œñΗ—¶­[QÀÇ_ßÇ–T$µy&LH®]˜9m … ˆsÇïï@ï¯ûjÎó®R-®•^ÑìÑ…‹‰ˆˆ L©RŸõ®ß¸AŸ~ý™9{Ž–‰¿€žrÙEAP)ßú¢2ÿÿã£G<~òÕ«U‹Uk©»»;>ùò™ª¬VõyZR¢EÛÀ&”%=…9o޺;¨R¹I'¶k!999‘#{vZ4kJÅòå çÞ½û–V%µ\œiØ >³gN§VÍÄ£‹­©3frðÐas†ŒDÅcqƒoQ’qìø ^¾|Eù²ebÕØpûÎ]~>‚¡ÃGpÿ¦õàH%[íÏfà ,G¥rú$}UïÝù~À·±~@}¿ù–uþ6Ö\O¯\ Ñ'°¨dîÀ4iRó笙.TСÌ–-ÛX¾j'O6”ÈfI–,­Z4ã«vmÉ>}œ¾/S>rp¹)Ρâ/ÞËm'HŒÊd’:rC¢Dn¿Õ¼¡ü>Þ ûq%Kñƒ~øð§Leíú Z f½CÉfË%׎XÐG!h©WÎ?RÒOœ:EPP0Ê•UKz‘Â…Y°x‰±\JTÀ£}þ MÀÿÓ˜iSTƒ‚Y»~Y²x’'w.‡X|WW¼óå¥yÓ/iÖ´ ¹¼¼ˆ?>Ïž?çÝ»w¶÷"sv¦x±¢ôìÞ•‰ãƪ/I’Äùë°zí:¶lݦµ{Êïü¾Üòq†þ|øCæÎþƒ€€×ܽwOÓ†ž={ÎÊÕk8pðÁÁoI”ÈT)SZí¦ÓqðÐaFÃÐa?séò­ ÷G@`ƒ\nó ºàH‹Ñk¨ …iÛº¿ü<,V£âú‹– d2³eÔ‘FÀ<Ì,jäääDïž=Ðÿk» Õ‚N§ãÜù 8xˆ³çÏsñÒe^¼xñYŽ%±»;Ê—ã‹jU©R¹)S¤°;y7ü²§ÏœÕÚ}1ÐVnñ8ƒQëyÑ"…Y¿z%ÔoÒ”›7o™Z”} %I’„œ9²“;W.rdÏNÚ´iÈ>=x¤J‰{âĸp‹yóæ AAÁ•ªÕ0fEïÌËfuò¢\^ò™;°VêL?÷D‰DŠzž>}ÆÅË—¹té2×®_çá#_?~Ì‹—Ö+\™2E òæÉƒ·w>|¼óáãíMölYcÝç66¹yë6Uª×ÔÚ=X?¯%04î0øÅPâyQ©b@ùy×mØ8²›Sªø×¿Š°ÅV%ggÜõq6oÞ¼!<<Üçv•Þø¨\fQÐA+ƒ_Mu(U²sfÎ yòØ)ѱK7vîÞc¨i7*7º`}ÜP©¾:š;0gÎÌž1¯œ9DŠ& áá#_|}}yùêo߆ðúõk‚‚ƒxü–`}ŽdWWW%Ri'NŒ[B7Ò¤ö }út¤I“†´iÒÄj:T[aÔèß™5ûO­ÝFɬ‹3$CYÏSFn(\¨ ¯]ýÑoó,ä§ŸGFîz (jczÜUTîýeHŠOQÐÁf=LuÈâéÉü¿æ3GÌ3Úº}]{ô2Ô†*]/ŸcŽv¨gf%ÆNìîÎØß£níZ"AÁꄇ‡S¬t9ž?®¥û TõÜ@‘\œaÐÏPÃ’ó¨PþãP™°°0 +Éëׯ?üùß@à¨úŸ“3Àh` Ê¢/Xx"Áéƒò×ü¢]î?x@ãfÍ9vüDŒLµ*•I•2¥¡&Ä‚Ó,DŽÞ5gP`P=z÷eÄ/¿&†"Áº\¾rE«r0^”ó8E! ·¡† åË}¢œ¸¸¸úbçªÿ;‡J%»¨­ÖÖLÇô˜¨?Ÿ¢À*QÎEA„è¢CYN§ð›S䇗ŸŸ?-Û¶gÞ‚…1z0®®®4lPÏXsu¹\1Πª©YÌ™;f­Úòôé3‘¢`5Ò\5ôe¤ç˜`û:× ÄAÅ‹!ƒ¾7:ÐD€æE`ÐÈ .QÆ£ã5œ×/k™PYhÎËe]¬IÊ’>ÆÔÃ+,,ŒŸ~Iï~ßðöíÛ;˜zuêkŠØáPØlÎÀ“§NQ£N=>"R¬Â¡#šçÒ$àH,ÎÐ(m¨¡Iã†äË›Çð*ìÕ+Sé?ÌÃé ü ÒÍô ‚ÃÀ3ŽSÜÖ¡bšéPÖòï€íˆyŒ#>è‚ g¡>%_Þ<Ì™9OÏÌÖ_-DDP¦Beùújö®ÈeŠ5|PyÓͪ ïâìÌ€oûÓ½kçXMÕ)Ø¡¡¡ø.¦Å ððäóMÜ *Õ¯G䆄 r`ÏNÒ§Kgpà¢%Kùaè0c†…Ôhw-IäÐ+ïî@|½Bþꃿ@ˆ\²Ï‹¼E梊E˜´D]¹zº³ÿÀA믔œ¨U³†±æšr‰b•K¨jŒ¿›ñâ#L§ã·1ciÙ¶=Ož<) qòôi­_ë–Šr§˜lH9èÒ±ƒQå`ͺõÆšvažßw0Ê%f—þoÊw|-°åóH”sQÐÁ–؆ |hª“ŸŸ?í;uaꌙV/n"#Hm¹<±Î;`*à‘9=F:õعk·HQ0›sç/hí*¾çq‡@kC éÓ¥£g÷®Fž>sÖT±ª5"ZQÐÁ¸”Ž›ê¤Óé3n]{öŽ\<"Z.TИûL% \žÏÂn ?*¯¯f^ùùѱkw~:Œ1F Ú1Q5òCާEZq‚Ì)8çääĘßF‘X_(ÈÓfÌ4Ö‚í‚(è‚Wy¬WˆEÕqÛöÔkÔ„›·n[eÇNNN4¨g0›‹3ÐD.ÍgÃhtÂÌ€¼EK–R«~C._¹*R4qC›‚¾P$'pA¥ôMa¨±E³¦ÿU 5Ä•«×ؽwŸ±æ-HzMQÐÁÁA¥a€ ž1Ê­Ûw¨ß¨ [·ï°ÊŽÔ3šÍ¥µ\–ÏÎ\TéVsݺu›Mš2wþB«»E öEDD·ïD¹àVŠ´â¿5ð éÓ3ô‡A&O3íJ9CÄ+ º 8*ãP©÷^˜êD·ž½=f:.Z;Ì+ù} …+ ””KòÙy€Š hÕ¼øwïÞ1lÄHš4kÉ»wEŠ‚A=ò%88ÊÑ-¨L‚mÓ•’𜜜øý×_H’$‰ÑÁ·ïÜeóÖmÆš¯{DÄ¢  ‚#³ •æp½©NLŸõm;t2UPBÚ·3Öô­\›a•~^,2gÐÉÓ§©Q§>3fÍŽöbN°?nÜÒäÞ"ÖsÛ'/°#©¬[6ofÒµ`úÌY„‡MÐ2 ëVDA„8É3 Êùµ©Ž¦Fzædbø„†õë‘:ujCMä=fºX ±Nj`ÌPcΜ9:d°É ܹ{—uþ6Öüå×.ˆ‚.‚ž¹¨ m&¡ÿóä M[¶6õyÒ$®®®´kÝÊP“3ªª›`[lB5šV-U´>³ÿüK¬éÏ_Dé5µ´,Ø& QÕ7³jL’$ ΚIbww“ùmÌ8ÂÂŒêœE†"AtApDî•Qå”jU!!!ôìÓ9sçY´“NÚ“*eJCMQ¾‚mátÐÏ‹Z…„„0ò×Ñ4nÖ‚7oŠœQ+è›DJ6­OÍGÅ }Ú/“Ç%Göl&7râä)¶O:ˆŠg ˜MÊ’uøHj°SDûäÍ›7T(W'''Í;H  &dï¾ý†š+¢òr¿‘KasÜæ ‚øJ£,jQòÏ“',]¶??Š-JüøñE’Èò•«¹}ûŽ©.€ç")›d"Ê Ò _÷íM›V-M¿X""èÑ»/Ož­D<Ø(¢vœŸ –±(„*™l”?çÎçÇaÃÍN±×¦UK²g3hmIúŒšP.M†*똂ÆRÜa:sç/¤bµê¬^»NR2: /_¼4Õü¸"R²IFýŒ5~Qµ _÷éåF–­Xi*~)/¢vÄ‚.Ñ#X¤Šëtáâ%©X¡¼öÕs¼xäÍ“›5ëÖRÖ2YôŠº`›¼EeÚŠŠ]ȨePPP0ÛwìäȱcÈ‡‡HÒA˜6cÆš7«EJ6Ç÷(—GƒäÌ‘…sÿ$aBÓö”çÏŸÓ¹{OÞ½{g¬ËoÀv·(è‚ h'åêTÇHj­3gÏ‘"yr *¨yÙ2e$00ˆÓgÎj.¤CÊ=Û:y€/P H¢e¯ïc–­XÉë×o(Z¤°¸½8c'L"44ÔXó_À1‘’M1UŒÈ 3d`ÅÒEšÙß}?˜‹—.} ŠÕ…ŠÈ' X•Æ(ÿpƒÚ”››Û6m0æºbwïÞQ»~#SA„3€ÞH^ܸ@" 0#iØ áááA¿Þ=iݲ®®®"E{\凇“Õ+)צòÀ!‘”Íð3ð“Ñ{6U*V¯XeP(ÀŽ»èÔ­‡©.­ôïAtA¢A”Û‹‹¡Æ å˱dyÙ]nß¹Kƒ&MM}þž tCù? ¶O*TÀß×@‚HmÆžÍ3d O¯´hÖggùjO“ÇÇè×5~A$’² ½éwýýkĉ³ré"òûøD¹±'OžR£N=^ùùër¨„` ë³e!5È¡ÃGøçɳ6˜#{6þœ5Ôõ´#Ê×9¹ˆ?Nð„ÊŸ¾ŠIN|?fС|Q».›¶H½{âíÛ·¦š¯ˆrn¸³M)çnnn,økŽ&å<<<œ¯¿`J9A^D9]+1#¾áááálß±Óì –*Y‚ŸúÑT—jÀa ›ˆ?Îph¦WÔ£1ãËÍ›·èÑ»/Mš·äÔ™3"E; $$ÄTóI‘Ðg' *P·³QíÝÅ…YÓ§P¢x1Mœ>ë=jªË/À5½(è‚ X ¿1…ëÙóm´mëV|ûu?S]òé_æ5äÄ).mü¨<Çš,f'Nž¢Ñ—ÍiÕ¶=—¯\)ÆaÞ¾5© Ÿ }VÒ£ÒêV7ÖÁÍ͹³gQ¥R%M<|ô(&N6Õå0FD/ º Öç:F,_&25DÉ×}{Ó§WOS]R¡,=?"q&q+@}ÀØ©UQ?xøµë7äëoð葯H1…]òŸ>J§€"Æ:$K–Œ¥‹æS¹REM|ðà!=z÷%Lg´u0*0ô½ˆ_tAb†»†~L›6M´6:ðÛoèÓÓdÔ¿30Ø€ø¥ÇE®¢¬uY´*êáá¬G¸ IDATá¬Y·žòUª1hÈPž?—‚“q‰(|ÐÅÍáóÐ e9Ï`¬CÚ´iX³b)ÅŠÑ´ÁÀ  :v펟Ÿ¿©n_럂(è‚ ÄN(Kè'äË›'Úø]ú÷ëU·z(+~~¹q’‡zE=*¾ JÂÂÂX²l9å+Wcü¤ÉIla\À„ý ðH(Vq¦òi–¥ÿÈ–5+ëW­$w®\š6ªÓéèûÍ·\¿qÃT·ÕÀ¹‚(è‚st1¤'Nœ˜"… Yeßôëï#Ž*å^Nà(ÐR.Iœå.P¨ˆFËZPp0“¦L£RµêlظI$hã¼3îövÉâ›ü»6éG˜ßÇ›µ«–“)“¦ÁDDD0hÈPvîÚmªÛuL¡ ¢  ‚=ÃY†ë×­ƒ›››ÕvÖ¶u+¦O™U¥Iw` ª\´Ü÷q—úE_ÀOË€§OŸÑ»ß74mÙÚT±+á3nÜù†H'Öøåo^ÜT§zuë°zù2~L×½èй+ÏžI¶WÐï‹tb„¤ú{f7ÊïÜ(ùòæaóúuT(_άÌšý'#FýFD„ÉÛr.*ã– ˆ‚.FpEúiü€ªìx xò] | TÒ?Ü5áâìÌÐ1røOfY^,%yòd,Y0f_6‰ªknT0Tq¹ôqž”_zET ™&víÙKåê5Y³n½HÐvt7‘ŽÕ©\ºE­ˆ&²~õJ<=3›µƒIS¦1jôïQuÛt—Ë!ÔD‚ƒ’ eE.ˆ²>æ×+çñ­¹“òåÊ2|èryyÅîJÃÕ•ñcF“)cF&Lžbªk&Tàa7`¡L‹8ÏA *HyŒ0¯_¿æëo°k÷~9‚)$mþç@gÞš•ñÀÀ@®ß¸É+??üýü }Š››î‰áé™///\lT±ß¾c'Ýzõ‰œ9""Ò3aÐU¦”]>÷¢b4§Ú-^¬3§N&mÚ4"Á`ùÊU ôƒ¡¦$PÔyQ‹Z£Ñ…+ož<üòó0J/fÑÿóýúDZã'´t?®_¿’K%ˆ‚.8*_¢J5GI¾¼yhÚ¤ ÔÃ#•6Ïððp9Êú¿7ræÜ9îܹk*w1 &$¿·75¤aƒz$vw·)aý9w>?ÿ2ê“Óü@i‹@ùoî’©e—4F•7O¢u@ª”)™:y"åË–éYtP¢ò5ëc ß­ÐO”(‘ݺt¦OÏ Úº}ÿ€¿€–îëõ ‡`¹\‚(è‚£’¸Š‰Ê˜NNNT«Z…¯ûô¢@þüš7¬Ó阷`sþšËã,ûB™8qbzõèF÷®]lʪþý?²tù S]®¡rćɳK¼¿1Ã/ÝÅÙ™ßF¤E³¦"=+b‚Žþ¼$RÂIo4øžÝMâêêJËæÍè×»iÒ¤¶hÇAÁÁ ûy$+V­Ö:d2ª°N.›` Î"ÁNè€ò=4Hñ¢Eùó™téÔ´iµç¶½tù »tcåê5¼ ´øàBCC9|ä(×®_§Vê6ãÓ^¹bNž:ÍÃGŒuñž'eŠÙ%Ï%@i@SúŠðˆvîÚM@@•*Tˆ•긎ÀÅK—Ù¹{±æM¨ô|ŽJ T¥Üù@? ›&ÇÙ™&2{Æ45¬»…_19B»8rô˜¦[eÙÿõR,"žˆ@°ZúÑÕÕ•¡? bõŠ¥øxç3kƒ»öì¥q³\¼tÙj¹}ÇN~úy„ÍÍÅÅ…YÓ¦’!}zS݆#¹˜í™—¨¼ÌKÍ4wþBúøž÷ï¥b,àé ç] •Çÿ0È¥u`ù²eØò÷z&ŽCæÌ™,Úù›7o6b$­ÛuàáÃGZ†¼Bù›O–)+ˆ‚.ÊÊ[>òñãÇçéSéÚ¹ñâ™7Õ=F—n=xûö­ÕvñÒå¬^»Îf„—"Er&OgʪŸ,ÓÌ®y‡ ®cΠÕk×Ѿcg£ñuIPDñ%"³‰"9Ð\yèˆEæ*U¬À–¿×±tÑòåÍcñAìܵ›*5j1wþB“±Fp(l—Ù,ˆ‚. o ÄSŒþ_T«jöÆÞ¼yC¯~ߦ³Šë ÁOœ?ÿ2Š/^ØŒK•,A¯ÝLué‡F!ÎŽòíí­ÿoM<|„†_6Ç÷ñc‘`t¦SõÙ»=>ÐX <f%´vvv¦níZl\·†Eóþ"¿Årïþ}¾êÔ…Ž]»óäÉS­ÃeP…ˆAtAÐó‰ûEúté,b[¾jµ5•gƒf1ÿ&O›aSBü¦__Š)l¬9!ªø‡`ÿLGÅshö]¹~ã¾lέۢŸXü 0mAÏi§¬Wjg òƒ¯š 4kõñãÓ¤QCvoßÊÌiS(TÐòtñoß¾eÂä)T«Y‡Ý{÷i„²ö…*ð&¢  ¼‰üƒk|W-Å# ræÌÙX9è•«W`3BtqvfÜï£M¥kÊ&!Ø?ËP•x5§‡ûçÉš¶hÅõ7DzÅó*¯œ¦+ª`Ï4à>pü™Òœxxx0 ÿ7œ:z˜IãÇ’#{6‹(<<œ5ëÖS±ju&NžÊ»wï´= þ”Ù+ÄÈ;YD ØW"ÿðàÁCæ/\L§íÍÞX† L¶'Mš”’%ŠS¤p!2fÈð_ºˆðp^¼|É»w9yê4ÇŽŸ0é»ü–CGŽR§VM›dÎÙéÚ©#ÓgýalAÿRvÜQØ ÔD¥aÔT(çÅË—´hÝŽåK’;W.‘ õH¤EeTŠk$ÖÏ£@TF‹ðñÎGÛÖ­hÒ¨! $ˆöíÙ·ÑcÆsõÚ5³tz`0•©)Ä’K°N¢"þÿÿVHœ˜­ד5‹y®ÓwîÞ¥iËÖ<{öü“—CǯÚS¿nM/‡;wïÒ²M{“¹Ó»vîÄÐÙ” ƒƒßR¥zMS>Å2å†"¨bUš+T©DI7“( Êû½/Žè>(KùúãNh±vŸ81Ô£eófÑò-ÿ³çÎóÛ˜±=vÜÜ¡·Q.-{eÆ 1XÐ{a2°èÃéÚ£7Ö¬ÄÍÍMó†²gËÆ®­[X¼lOŸ>#µ‡åÊ–1åŸmt;;~ňQ¿íãïïos‚L”ÈDÞ}uù (+SÎa8TÑ+éšÊî¾xù’æ­Ú²lñòæÉ#´ylXAϤWÈ«UtÑÝ`±"EhÙ¢uk×&Q"7«äé3g™2m{ö™-ÆP`,0 ñ5DA³Xt%RºÅ«×®ÑÀ÷L›<Ѭâ@)R$§OÏÑ>¨(ü--7ÓÔ©U“\^^ܸyÓPs pH¦ÃpN¯|iVÒ_¾zEÓ–mX¶h¾Õ,ŸŽ-Åä@·*²[ÅGÞ#U*6¨G«æÍñò²^\ìÑcÇ™2m‡Ž±dø> 'ªRµ ˆ‚.f´Îêˆÿ 7mÙJÒ¤I=jd¬V= eÅJÓe¡=3Ûfzc'''z÷ìNßo¾5Ö¥–(詤×v¢ÑÝ% €6í;²nõ ²gË&Œ…?Ó~¡ÜKð—ÆZO‘"9µjÔ ^ÝÚ”.YÒjU–ÃÃÃÙµ{³æüÅÉS§,ÙÄCàGÔ—Y©*ˆ‚.ÑÀ¸3Kÿ@ýO_º| $`øÐ!f-²”ßÇMàþƒ&û”*YÂf…Y¯nÆMœÄƒ 5W’éæœª£,險˾òó£ÍWÙ°z%©S§ ZN½á!<÷‘L¿Ÿ@Aý¢  *ûŠõv’,5¾¨Fýºu([¶ .VRÊ‚‚ƒYµz Í[À½û÷-ÙÄàW`"ÓN]¬ÃbT5Ĥ‘æ-XȳgϘø‹±Ï©R¦¤JåJÔ©]‹ åÊZݽïÑ#_.YÂÒå+-M_„Jÿ8x!ÓM]¬KÊÍ¥¢¡ÆÍ[·ñìÙsþš=‹)’ÇÈ,Z²Œ‡ ²_ûvmbÍšo)ujÕ4¦ 'F†=)çZkÑh]½vý:Ý{÷eÁ_spq‘W…6CAwAUÿÍ©ÿóÒÿåÔ+â1/^< ä÷¡J¥JT®T‘ù}¬þ¼ Ó騽{K–¯`ÿƒ&ÓÚš ˜ ü<—)&ˆ‚.1Ç5c :ÀÉÓ§iФ)Ó&O @~ëÅ]…‡‡óû¸ñÌücN”E’Ü%¢MË6/H/¯œxyåäæÍ[†š3ˆ‚îÐl:¡Êœk î8pð_;€©“&Äj<ˆQX®ÿït@z £þ/Yÿ[öØPÂ#“2E *”/G•Ê•¨P¾©R¦Œ‘ý<òõeùÊU,_¹Š§OŸYº™P`>ð3ðX¦– º ÄÀ„1¤jM&4Z°#°Ét @?À¨§uÀŸ†ãå•“âE‹ŠôŒè§Ÿsìâ쌗—>>ù(Z¸0%ŠÇ+gŽßïÛ·o9pðÛvìdמ=øûDw“Q…ì–ȳJ]lCAÏhzûGDD°s×nvîÚ§gfªW«J‰âÅÉ™=;Ä‹çÄ‹—¯¸s÷.'ObËÖí¦R(²|}Äú­R)6xó&ÐXS}”ÿq $O°££ZQ™A¢Ö>ÃÂèÕçk¶l\GªT"AÃ25¦ ‡¢¾ZåîââBî\^øx{S ¿ù}|È›'·©Å¹Uñ÷`מ=lß¹‹ýòöm´‹u†{€)¨X y> q‰Òì‘@³Ï´ï-÷U²dÉ8¼owœðCüãP/]nªËD ¿L;eE?¤Õ: t©’,]´Àª¹°ã"[¶m§[ÏÞZž%{€ –*çiÓ¦!göäÈ‘¼yòß'yóä!~üØui¿qó&ûbÏž};~œ0Λ}­7LnÊí(ÄeÄ‚.Ø#ºÏ´Og­‹Þ€€¦Î˜Åƒ¿·ya^»v#ª.ßo!2õž@cTytMîGç×ÑcøiÈ`‡\é’%‰/Þ‡ÁÆž%¥£zw»8;“9sfræÌWÎäÈž¯œ9É™#ûgËCÿòÕ+>Âþƒ9xè0Ož<µÖ¦ÃýÀ<` *öHâ…Š¦¥ûpTÊ2Aè™]&Ž×9´ÐjÕkÀ¥ËWÌ“>]:J•,WÎdÏžœ9²“=[6«2—wïÞqúÌY<ÄC‡¸|åjt2¯âʯ|p[n9ÁÞ º`\5ô£³³3:ÕëWÞx÷îÓgýÁÈá?Ù¬ <¤U9ÿWAO‰²¨K…QÇfʽÖC~F~orçÊå°B+W¶Ld=J@óf_òí×ýlb1æì9Nž:Å©S§9qê4ïÞ½³ön‚QVòy(«¹}ŒÀû÷ï)P¤8AÆuÓZ5ª3{æt›صëש]¿ïß¿7Ùoİ¡thߎˆˆ~3–™̉jÓ7öÀQ™–ITpŸæä3§M¡níZ%$NGÁb% Ðîv$I*–/@xx8~þþøûðÈ×—7oÞ|îSºúB~±’ ‚&œE‚spôEäÿ€¶íØA¹2¥ñððˆ¹›ÌÙ™C‡ððÑ#½"l‚¦ÓÑ¡s7þùçÃùÁ¢¾ZÕ*,P'''Ê—+KšÔiØà ©\Ç©€¯wà0&ÓÓ¡¸¤JipìØqš5ý777‡R¼xñ8sî·oßÑ<&44”7oqãæ-n޺ͣG¾¼xñ¬`Sk=B€3z£Èx ð»^9¿-÷¼ ˜ñ,ÀŒø@?zäK£/›³cç®=T&ÛVˆcY³çpáâEc;þÏïã&pãæÿ«i·iÕ‚% æ‘"Eò¨Œ‹¨@^Á±<ÖÚùå«Wü:zŒÃ ©\™ÒqåPß;õ×µš~VøìùD¦¼ ˆ‚.¦èLÖÿwć AAtîÞ“¡ÃGÄXpÔƒ‡M¶¿Åßÿóf»vý:“¦L3ÖüœHþã¯_¿¦E›ö\¿ñÿ<ÌeJ—bãº5äÉ;ªÝå@†­²Êô´û÷L%`ÊŠšÁœÁ+W¯áä©S%°òåÊi틇õUcbÐ(¢WÈ«£*ïFebAtAÐLʪ3å¦ñQΰˆˆæ/\D:õÙà Uw¼uûΞ;e¿ûî6á¼xñ‚]º™*.2øDë~þü9 7eï¾ýÿý–ÅÓ“Më×Ðñ+ME$›¢Ü~’É4µ+J‡(ßón(7'ón܈ÿ8ÌœŠ¶qžÙ³i‰©82_`30JæDú–úg#?GA°âƒ.8û€@”?¤ë‡þþþ¬]¿'Náé™™Œ3X¼#NÇÜù 4äÇÈ~Ù†^¬Y³d¥x±¢±.wïÞÑ®cg®¯H¸U² 'rãû÷ïÙ¸y ÓgÀ;_^\\\¨\±"^9rh©*è”:éesx/S5ÎåÞÐ ˜ @ù›'‰î†_¾|IÒ$I(Z¤ˆÃóêõk\¹r5&wñH¯dïFùŒÿŒÖ_·ÑÀR`pð“é-±‹dq•À 3ߨ½'wnÚ´jAÝ:µI•2¥¦ ‡……±qófþ1'ªáQ¼hQÖ®Z«Bˆˆˆ ï7ß²þïŸ4éeâäGYÔRÇQî)Ÿ>Lœœè×§ýûõÅÉéÿâ|òä)ƒ†üÈî½û´Ö3`,*n@Ò2Ú6n@UT½º¨Ô¦Z jíœØÝ=;·‘>]:‡ìÚõè×ÿ;K‡¿Ñ+àÿèï]_ý?@¹ÝB²©‚(è‚`£¸£,E½¢ºœ)V´eK—¦`ÁüxåÈIêÔ$L˜àà·üóä W¯]ãà¡ÃìØ¹‹/-«p¿gûV¼¼rÆšr>|ä/Ì¿0rS8ÿwk²¤ý‹7pHjl»µjTgÂØß?)2³jÍZ~ùu4¯ü4ã^¢¬zÓôÊ…`¤Ö+ãõQþljbkÇuk×bæ´)!ä/^P¤d""¢t3ÿ×}ï*(ó¡,lAtA°*¡ز byß¹»tîøÃ~ã; Óéønà Ö¬[oêx&¡ª€F¦*ÀÓ¨b–#{6æÌœñÉbÃß?€ßÇcéò•¦Ò1F&U‰rÊ‚/Ä.Î@1T–ŽZ@i>cüÒ’ó¨P¾œC¾ZÍ:a› »~1+‚=xÁѹ§¹……ˆE‹`äEò›·hÓ²% &Œ±¾ÿžÞ}¿æïM›MÏ †³DÜGå:nfìâççÏêµëÈ’% ¹syý÷{„ ©V¥ U+WâÎÝ»<òõÕúœ*ˆÊñ%Ê%I>ÑÇ,y€À`”«Qo  àÉg6ì\¹z6­Z|äFe¯Ü¹{WS€¹þY"ÓVDA{#‰ªvù¯_z¬¸‹  IDATŠ‹‹ ec(òËW¯èÔ­{>Ⱥb€K@m”°1n—FÆž#ïß¿góÖm¾ ¤t©’8;ÿ¿[Ú´iiöe ,Àõë7yñâ…ÖSHƒÊŸÞ(Œ²äÞÓ/®ËÉ4ú£\Šëç@Ìð7º ur¢@þü´lÑŒoúö¡\Ù2lÛ±Ó¢m½xù’Ù³kIåç ÓéØði|ˆ!;A\\áÿŒA¹t¸|΃HìîÎÁ½»¬^Ýôì¹óôèÝßÇŸÔ‰ùЭåÊRê«q³Õ€µD‘©#w®\L7†ü>ÞŸ®ŒÂÃÙ²m;ÓfÌä²eY+Þ¢,þ«Qg^ÉT6‰«~qSZÿWV¯ [÷D‰(_¾U+W¢J¥J¤I“ú£öö»°gß>ËV™2r`÷N\]]íúB‘¿p1­)&›êïADA»¢ ªýg§i“ÆLû»U¶¦Ó1uÚ ¦L›N˜NgJ9¿ŠÊÈan@f1½‚œÚT'úöêIŸ^=pqùt Áî½ûøcΟ;~ÂÒÓÕ'Q>òÛ€S¨¯#ŽLfTQ™Òú9^ •}Åêxzf¦jåÊT«R™R%K?¾ñQ>¢jÍÚûåça´oÛÆî/^ã¦-8yú´–®‹¶òQÐÁïLd(‰µqrbÍŠ¥/V,ZÛ9qòC~εë× 5˜­å"ÊþÌÂ]å¶£¡*h~&C.//£}n޼Ţ¥ËX½voÞ¼‰Ž€£¨Ì3‡€Øo†‹€*…hÁþMS;tuu¥dñâT®T*•+“3Gv³Æ7©3fZ´ïT)Srhÿ»»ÛõCiÂä)Lœµf»êO®_&ùà/¥^Oø¹'bwwŠ-BÉÅ)U¢8 0éKn)|}Yÿ÷FÖ¬]gμý„>={0ð»þvý@úªS­•xïÙä.¢  ‚=↪bùQ ]ßÞ=Ðß:Æ©0ŽÚõrõÚ5Mý+WªHó¦_R¸PAܺñôÙSοÀž½ûØ»ÿ€&—™ØtÒ¿Ìc’À  ¨–ÎñâÅ£vÍôëÓˬz×®_gë¶ìÞ»K—/£Óéd›AŠÉ)V´(¥K– Dñbx{{ãâ3xoݾÃî={ؾs7§NŸ6æ~ª_Ìhz?%K–Œc‡öÛµ/úœ¿æ2bÔoZ»@Å”‚ º Ø9‘È?gÍà‹jU­²ƒí;vÒ¹{¬úϾ¾GUMˆ¥}º?? Ñ?ÚÉɉÕ¿àë>½ñΗ׬qòä)Ž8Áñ'9á¢Öu‡‡>ÞùÈïí·þ_OÏÌ1¶¿°°0ŽŸ<ÉîÝ{Ù¹{÷îß×2,ÂÜwÓÐѵs'»½n—¯\¥fÝúšÅü"³]DA{å*Gô¸¹¹±|ñBŠ.퇆†’Û§`l(a(·ÀãÏ$ËâÀ\T–m'''ªU­B¿Þ=)X €E; ~Ëé3g8vâ/]æúõ1á¿ns¸8;“)S&rçÎ…O¾|øøxã“/éÒ¥ñ}ûùù³wÿ~víÞþ£›…GéÒ¥åÈþ½v›=""‚BÅJòÊOS÷)ýý&‚(è‚`—$C ~”¦.EŠä¬X²ˆ¼yòD{¹¼ XœZË{U¸äGT¢Ï+ðÊÂgVîÂ… Ò®MkêÕ©M‚ ¢u\»~ƒkׯsíúu®^»Îõ7 ŒS“ÓÉɉ éÓ“-kV²eË¢ÿ7Ù³eÅ3sfƒ¹æc‚÷ïßsúÌYù_{w¥çu× þ[*É’J’µz•,yßm-¶¼Ë²¼ïK „mº 4¤I“C'!$C7Û“9Ð30@wØBHHH0d!dlÞeK²d[‹WÙÚ¬ÕRi+©ªæWŽc«žûV½vùy?Ÿsê$–ï-ëùÕ•ê««ßsï}¹÷Þû³dÙ²·¤Íèc¿÷æ‡ßywm3ú¹_xo¾ôÏ_©úë~f’ý:ÔÕ)IžHò}oÉMœ81Ÿø‹gîœÙMâçž> ]ÛŠŸó–$™äÏ’¬†5=9kÉo-8yò¤üð;ß™÷»râ¬YCú“Úºm[Ö¯ß 6äÅuë³nýúlذ!6lÌ ë^ÌÖ-[_–˜0aBŽ9æèL›:5ÇsLŽš6­ñÏÓ¦åè£Î1G•Y3gú+ÍèëëËãO<‘{ï{ ß½ï¾<ôðâVü!s’GÓ¸\©Ú/Ô“OÊ¿~õ+1bD-#úÄ'ÿ6¿ú‘ÿ£êðŸO£• С¶nHãfÊïûõ2vìØüÚ‡>Ÿø±w7uìÜüÿ7ûƒ?²|™äëIþ1ÉçœáîÚ$K㥶"#FŒÈå—^’;n¿-7^]&Nœø¦ü„÷îÝ›îîîìêîNwww^Þ¹+»v½òÑžžž?Ǹq];vlººº2ñÈ#3f옌36GN˜®q]?n\ÆŒ3¬¾PÏ<ûlî½ïþ|÷Þûrÿƒfûö­øÏ8´†?“äž4NÊy(íÿÓÿ/×_wm-zú™gsÕµ×Wþ…$·Сæ>œ7xñêŠË.Ëûù—rá¼y•?Y÷îݹbáÕÙºm[3?—MiìŒ?•de’ËÛ÷JûÎ$ÿ!ÉGÓ¸’¾Ø¨Q£²pÁ¹õ–›sÃu×6u±ÿ®¯¯/O=ýt^üH?òhî»ÿVöí÷Z¿—äýAóÕ~<É'ª~² æÍÍ=ÿ™Ú~m.ºlA6lÜXeèî4.ÛgEƒ€u÷$¿óF¿n.˜77?t÷;²ðÊ™1}ú~’ÕkÖäƒþh^¼øpÿ­ýIþ(+oƒÚŽNã䜥q1OsŸdôè\µðÊ,Zxe.X3¦[µØ»wo–=¶</^œÅ,É#K–4}³gE’|;Éç}î×#’<ŸÆÅM•|ùŸîÉyçžS˯ÕûÞÿ+ùÜ?ÜSuøiÜ èP{?’ÆŽÞa‹8qÖ¬œròI9á„ÒÕ56ýýýÙ°ac[¾"Ï>÷ÜÿüЧ“ÜÆ5ôífL’ŸMã6ÄA_¸2sæ Ypùå¹âò˲pÁ™0aBÛ/àÍ›7géc˳ø‘GòðÃdÙòå•ZsiKmb_HòÕ$%øõ$•›¯üÝïÊïüæoÔòk÷ÙÏ}>¿ü+¨:ü“¼ÏoÙ  C»˜~(hÌmÁçþR’ŸH²½ÍkÜ™äI~9É%Cñ GŽ™Ù矗¹sfgÞœ9™;wÎaÿ¦ãí®»»;kžz:+W­Êš5OeÕš5Y½fM6nÜôfýV$ùâ¡ÒhgiÆÑIÖ¦ñ·,×Õ•ÅÞWË‹‹ÖoØ‹/¿²êðgÒxÉС­ül-/S‡àsõ%ùoiô¹÷)í÷¹,ÉÏ%yg g0ù}TæÎ™“ysæäÌ3OϬ™³2ó„o‹ó´·mßž 6fý† Y·n]Ö:qfÝúÿç7Ùž$ß9È¿”äÙ!üÜŸJò®ªƒ÷·3ï~×ÔòÂE×V½ð)IÎÈð8bÐáM5"É&ùí4ÎnÆ–$?™F olR’K£W}N˾ #FäøãŽË¬™33}úñ™Æ$&ùF’Mc—¼U½2×&ùZÕÁ³Ï??_¼çsµüEðÁ$ŸüÔ§«ÿ/IþÀo  C;;#ÉO ‘UÂzOç•ÿj~ðô onïüp† WJú’,9Æÿ5ÝòÝoâ÷ª5)hÙ¨ëË¢_øÒ—óŸÞûKU‡5cbH㈳‹}ÌJã6Ò©Iv¦qLâê$•d½R ÚüCAý®è¹J»“<’ÆÎø}iœ¼òV¾ñÑ4ÚÀ*ù‰ûÑüöoü÷Ú}Q¶lÝšy]:Ð‹æ¯ØŸä¨$»,gÐÞ*§'¹éÐÇÂ4N…¡šÕ‡ÂøƒIîO²<ÉÁaôó›‘ä¹4^ P_½ú†›²fÍSU‡ß™ÆfÀÛÈ%j2ÿ03 § ê¿•Æîï^åIÒ8Mee’Ï&ùH’[ÒøŸWZ´þ8V–ƒÃìçýb­5•ìÞ³'_ýÚ×kù¼ä¢ù%Ão²äáíg¤5µ'ÉW}$Ko.Lrù¡ÿä´Ô{£bc;á¥qìácIžÈÛ÷†ÉO%¹®êà/|ñKyÇwÔî‹zñEåŸüTÕá·¤ñ·åý~K€·-.@;—äÜ4N…™F‹ÌÉINÈÛc£/å§Ó8÷úéW}<“ú§?éÐ:*‰>räÈ,yèLš4±^êÚ¸)ó/»¢dÊìC8Þ&ì ílw=×¾æÇG¥ñrï)‡ûŒ$Ç¥ñÂÝѯúÿ­êqßw(\oJãEâ͇‚éÆ$/ú±iœ5¾¿¾^;Ò8ŽôÎ*ƒ<˜¯|õ«y×ÿP­Špì±ÇdæÌ²ví U§Ü  ƒ€ðvw ÉS‡>çÈ4vuH2ñP`{èÇz™±/+ïwúƒÂîCÿ¼+ïÿ{8ùTÕ€ž$ÿôÅ/Õ. 'ÉÅÍ/ è‹’ü¾¥:@;Øyèƒ7ÏÓx¿ «Êàûî [¶nÍ´©SkU„‹çÏÏgÿþóU‡_yè‘=–¼=8Å€·“=i\ÀSIoooþù+ÿR»"\\v’˸4îdth‰¢s½ÿé‹_ª]Nœ5+ÇstÉ”«-РU¾‚>ý‡^œÍ›7×®Í/ÚEÐA@€–ÙšÆm§•ôõõå›ßúNíŠPxaÑ¥©Ø·èÐŒ*ü¯ßüfí P؇~D’ù– èÐ*Eo~~ë;ßÍÁƒõ:½òôÓNË‘GY2åRËth•I6T¼k×®<ºdi­ ÐÑÑ‘Ùç[2å2Ëth•þ$_+™ðoßüVíŠ0gΜ’á—&é°t@@€V) èuìCŸ;gvÉðiINµl@@€VôþªƒŸxreÖ­_ßÎ=ч:´Ð¦$O”Løöw¾[«L›:53fL/™âFQР¥Š÷·¾]¿óÐç–õ¡;jth©¢ÄýàËkЋÚ\f'mÙ€€Ã" oÙ²%Ï>÷\;ôÑIεl@@€VY{裲z¸V8÷ì³3räÈ’)Ú\@@€–*êC¨fm.cƌəgœ^2åBKth¥‡Ú9 'ÉYgY2Ü:èÐR” ~~íÚlÚôR½úg” ?'É8Ëth•G“,™ðÐâzí¢ŸYÐ;“̱l@@€VÙ“dUQ@¸nýôÒ)X6  @+%îÅejq@?ɲZe}ÉàíÛ·§¿¿¿V˜Vе¸€€-³+Éþªƒ<˜]»vÕªS§÷ kqZj[Ñàšµ¹L)ïA?Á’ZikQ@¯Ù‹¢SË[\&'gÙ€€Ã# ×m}òäf¦gÙ€€­RÖâ²m[­¾«««™iÇ[6  @«í ïرC@O¦[6  À°èÝ»w×êáÇŽÓÌ4;è  À0 èÝõ è]c›ÚA?ʲ†E@ßm=iœäèðÖôºµ¸Œ=:¥Ó¦Z6  @«] º»»»v;¦x}Še:´JOÉàºí 'ɘ±ctÐ`ØØ_Ðk¸ƒÞÕ% ƒ€ÃGÑúîÝ{jW€ÎÅ=è,РUÚ~½³³øÛûhËt}ßþýµ+@Ljâoïc,РUŠZ\tР%ŠvÐûûûÓÛ×W³€nt>zJ'/‰‚€ÃHÛï kq†“òôºô¾¦²vŸ¥:´BùK¢uëAo®Å¥ÇÒZ¡h½££##FÔëÛáÁæ.^Úe退­0®(Í×ìÑ$Ù»w_ñ”8Åth‘‰%ƒ5ªvØ»woé”– èÐ*G– î7®VàÀ;è  ÀðR¶ƒÞU¯€Þ亀:´LQú¸ñ5 è{÷43M‹ è0<zר±µzøî]ÝÍLÛdÙ€€­RÔâ2¾f;è›·lifÚK– èÐ*G• îªYú–-[tÐ`X9¦dðäIkõð[ì ƒ€ÃHG’i%¦L™R«4Ùâ¢th‰©IFM¨Y@×â: 'G—N˜2er­ ÐÄú$Û-РŽ)0¥v;èÅ}s’~Kth…òôÉõ è½½½ÙñòË¥Ó´·€€-S´ƒ>vìØtuÕ碢›6¥···tÚ – èÐ*E;èu{Aô¹çŸofÚó– è0,zÝúÏŸ{N@†—Êz½Npy~íZtVf• >ö˜cjõðÏ?/ ƒ€ÃKÑúñÇW«‡×ƒ: 'S’Œ/™0}úñµ*ÀڵŲì‹cA@€™Y:áøã볃¾eË–tïÞ]œéã’"Ð`¸ôéÇ×gýÙæÚ[ž³l@@€aÐ;::rܱÇÖæá›|AôYËth•²#'OΘ1cjóðO=õt3ÓV[6  @«œR2xúôéµzø'V®lfÚ*Ëth•S‹úñõ:bqåʦ²¶€:´ÌÉ%ƒët‚ËÎ;³aãÆÒi=ñ’(èÐ"Ç&™P2aÆôµyø•«šj%:ÉAKth…SK'œ|ò‰µyø'õŸƒ€ÃÌ)¥N>é¤Ú<üÊUMem'¸€€Ã# 5*3fÔ¨ÅeeSY[@Zæ´’Á³fž‘µxðþþþ¬~ê©f¦jqZæì’Á'Õ¨½eÝúõÙ¹sgq®O²Â²Z¡3Éé%êÔþds矯M²ÃÒZá¤$cŠ&œ8«6ßä ¢Ë-РUÎ*P«ô'›:bñ1Ëth•³K'Ô) ?¶¼©Vr;è  @Ëí 7.G}T-|çÎYû MåzËth•3‹Òü™g¦£££þØŠéïï/¶?Î@Zø}윢4æµyøåËofÚIZ:  @+œœd|É„³êÐW4Õ®½th™Ù¥ê´ƒÞä ¢:èÐ2ç— îèèÈYgÔ# ïÚµ«ÙD[6  À°è3fLÏøñãkñàM¾ Ú—d©e: ‹€~Ö™gÖæÁ›|AtU’– èÐ ’Ý8T§DkîÑG,РUÎORt y½vÐtÐ`x¹¨t™5zAôùµk›™êQРe.,ÜÕ56'ΚY‹_ñø^†‹KŸwî¹éìì¬Åƒ?¶|y3ÓV&é¶l@@€V˜’Æ-¢•Í>ÿüÚ<üòMàò°e:´ÊE)|AtÎùçÕæá—.kê2P/ˆ‚€-3¿tœٳkñà[·mköÑ,Ð`XôÉ“'eÆŒéµxð&wÏ÷'y̲Z¥è—9³g§£££¾diS±,9Ò†Ü IŽ+™0»FýçK–.kfÚƒ– èÐ*—N¨Ë .ýýýYöXSG, è  @Ë”¿ Z“ôgž}./¿ü²€:¼}úôãÏ´iÓjñàËkê=ÏÍIž±l@@€V}ߺ dœÙõ¹ ¨Éþó‡,РUÎLrdÉ„ù^X›‡tIS'¸hoZ¦øÑ‹æ×# ÷ôôdåªUÍLuAèÐ2W– ×Õ•³Î:³¾|Åãééé)ÖŸd±e: ‹€~Áó2²³³Þä ¢«’l·l@@€V˜žää’ Õ¨ÿ¼ÉDõŸƒ€-³°tB]úÏ“dÉ2'¸€€ÃË‚’Á#Gެ͋۷ïÈ /¼ØÌT/ˆ‚€-SÔ>ûüó2vìØZ<ø£K—¦¿¿¿tÚÞ$Ë-Р¦%9«dÂü /¨ÍÃ/m®½eq’–èÐ W&é(™pÑüùµyø&oÕÞ:´LQÿyGGG.œ7¯Þßߟǖ7Õ©" ƒ€-SÔ~ægdòäIµxðçž>Û·ïhfª#A@€–82Éì’ W\vimþÑ%Mþ|’u–èÐ W$)ºôòË/«ÍÃ7yƒ¨öРeÊÎ?ïìÌÅuº È ¢  À0StƒèìÙçgüøñµxðžžž<¹r¥€: G&)Ú¿¼Fýç+"===¥Óö'Yb退­pM’Q%®¸¬>ýçM¶·/ˆ.Y¶4ýýý¥ÓÖ'yÁÒZ¡¨ÿüÈ#Ì9gŸ]›‡oò‚"»ç  @Kt&¹ªd—]šÎÎÎÚÀ ¢  ÀprI’É%]µ°6ßßßßì .vÐA@€–¸®t• ®¨ÍÃ?÷üóÙ¾}Gé´iœèðÖô3Ï8#Çw\m¾Éã—&Ùk退CmR’‹J&,ºêÊZÀ ¢  Àpru’‘E}áÂZ`ÉÒ¥ÍLó‚(èÐEí-ãÇË…Ì«ÍÃ÷ôôä‰'W è  À°QtAÑå—_–Q£FÕæáâÉôôô”N{)ɳ–è0ÔÎOrbÉ„E ëÕÞä ¢÷Y:  @+ÜR:aá• jU€&Ï?ßVÄÃIDAT×Þ:´Ä­%ƒO?í´Ì˜>½Vhr]@†ÜÔ$—L¸ªfí-;v¼œç×®-Ö›äËtj7'é,™P¿óÏ—¥¿¿¿tÚcIº-Ð`¨õŸO˜0!ÏŸ_«4ÙÞâ‚"Ð`ÈLrCÉ„«®\P«ã“d‰D€abA’I%®¿îÚZ ¿¿ß .€€À°QÔÞÒÙÙ™… êu¼â³Ï=—íÛw”NÛšä)ËtjEÇ+^|ÑüLž<©VxtÉÒf¦ÝŸ¤ßò†ÒÉIÎ(™pí5W×®M¾ ú å: µÛK'\{õ"½á^ËtjEýç§ŸvZN:ñÄZ`ß¾}Y¹jUé´ƒI¶|@@€¡41IÑmC×_{M튰üñÇsàÀÒiËâ‚"Ð`ˆÝ”䈒 uì?_ª½Ð&n+½%I{lyz{{K§yAt2•Û[:;;sÓ ×׺Ë[ÞÌ4t2•Û[.»äâL›6­æ½¸ÿ|og : Ú¤$ ª¾íÖ[j_&^}0ÉK t ·$UeàÈ‘#sãõõnoÙ²uk^\·®tšDA@€!S¹½åŠË/ËäÉ“j] ý瀀À[iT’Ê[âwÞ~[í ÒÄ ¢ýI°”@@€¡pu=è=ztn¸îÚ6èÅýçO&Ùf)€C¡ò–øõ×]›ñãÇ׺ýýýÍœà¢ÿtIî¨:ø®6hoYû پ}Gé4ýç  À¸$ÉŒ*'Nœ˜…W.¨}AšhoÐA@€!SùöÐÛn¹)GqDí ²¬< oI²ÆRÞÔ€~çí··EA––±xo§¸: ÊùIN¯2ðøãŽËü /¨}Az{{óø—NÓÞ: ‰»ª¼ãö[3bDý¿ ­\µ:{öìЀáÐÛ¥½¥‰ã÷'Yl)€ƒuR’ÙUžzê)9û¬3Û$ ÷Ÿ?šdŸå: ÖÝU¾ãÎ;Ú¦(K—-+¢½t•Ú[:::rçm·µEAöîݛի‹OKtƒ(è0hǦqAÑ€.˜;7'œ0£-ŠòÄ“+s°··tÚý–è0XwUýžrç·µMQV<^|¼âÓI6ZN  ÀPô92·ÞrsÛeùŠâ€®½Ð´IIV¸èª…™:eJÛ¦‰t/ˆ:ƒv{’#ª ¼û®;Û¦(===YUþ‚¨þs@@`Ð*µ·L˜0!×,ºªmвrÕªqâÄœ}Ö™*W âºö@@ ¼ÿü‚¹s3b„o:  0<ú<·‡¶( ë?t€6×™&úÏçÍ›£r…öï¯Ôƒ. :@›;;ɸ¢DßÙ™9矯r…*î ïP)@@ho”N8ãôÓ2~üx•kM@Y¥ ½Í/Nôóæ©Z*^T$ :@›»°t¼¹úÏ[е¸:@•¤¸™|ÎìÙ*ׄ}vЀœ—Â ŠÆuuåä“NT¹BHooo•¡vР¿ zÎ9g» ¨ Û[t@@hsŽ*ç{Žª5¡â .‰@@hkç–N8çì³U­™€^}]@t½:;èMô}:  pxÇ&™Z2a̘19õÔSU® {Ðû“ìR-@@hOgO8ýôŒììT¹&TìAß“¤Wµ =^<á4»çͪ¸ƒn÷ÐÚØi¥N9ådUkÒ¾ý•vÐwª  ´¯âôÓN9EÕš´O•avÐ@@¯îÔSôfUìAР/êW5jTfΜ©rMªØƒ®ÅÐÚÔÑIF—L8éÄàÒú€nÐÚÔôÒ 't¢ª BÅ;耀ЦŽ/pÂŒéª6»÷ì©2Ì:  èÕL?^@ŒîîÝ:  ð†Ž+0cúñª6¨€Þ- :CЧO·ƒ>¨€¾»Òºt@@hSK'ÌÐe·@@à0Ž,{÷îMOOÏ@Ã6©  ´¯þ²€>QÅaëÖmU†½¨R€€  W2zôh„Í[¶Tö„J:€€^- q„Š Â– èý:  Ðt@5j”Š ÂK›7¿ö‡ö 耀À«í+¬Åep^|qÝk¨÷u†-S)@@h_Eâ¡Åep}Ýô×þ•Äê8ÅÐÚÚŽ’Á}}}*6ëÖ­ÿ?ó¼æŸ¿«J€€  WVá ocÍÓO 4ä;ªèí­èÆÊýûôfmܸ);v¶ÜýI¾®R€€ÐÞ¶–ôý*Ö¤•«V 4dq\RèmïyýͱdéÎòÚ†þ/¨  ðlÉà]ÝÝ*Ö¤zx ï¡ÿ J€€À3%ƒ_zé%kÂþýûóèÒ¥‡òh’*è<—‚ÛD7oÞ¢bMøæ·¾½{÷¶´ªè$ÉÞ$ªÞ´Ùz3þéK_hÈ3ªè¼biÕvÐËmÛ¾=_ûú7¶R¥€W,®:ðå—_ζíÛU¬À'?õéÚ[’äA•t^ñHÉàU«V«XE»÷ìÉŸÿå_4l[/‰è$)ØAO’U«ôªþøOþ4[¶ Øôù$T ÐxÅúCúz~íÚüÏÿE•¡ŸQ-@@ൾQuàŠÇŸP­ôõõå—åUzÏ·$ù7t^ë_*ôg÷ž=*vú??ž‡®Ô9ô©$U Ðx½€ÞWeàÁÞÞ<ºd©Š½{ï¿?¿÷}¬ÊÐÞ$¨b€€ÀëÙ’‚Ó\|è!{/¾¸.¿ðÞ÷å`oo•á÷$yZÕ€7ò¥ªï»ïÕz;wæ'úg²uÛ¶ªS>¦j€€Àá|ºêÀG–,ÉÆ›Tìä=?ÿ‹Y³æ©ªSîMr¿Ê:‡³*ÉÃUöõõåË_ùKÒÛÛ›ÿü_ÞŸ{ï/ÊÛ¿¯r€€@Ÿ¨:ð‹_úrÛ«¿¿?üðGòÅ/ÿsÉ´{“ü£¥èTñÉ$ÝU>üÈ#m&úoþÎïæÓŸùlQ¦Oò_-3@@ ªmIþ¼êà?þ“?mÛBý?ôÇù³ÿõñÒiŸMrŸe´R‡ÔÎIiÿ7àïñùúW¾œSO9¹­ ô×óÉ|ø£¿^:­'ÉYIž±Ä€V²ƒP?Ϧâõó½½½ù•|(}}}mSœOæ³ùȯÿ÷f¦þ‘p¼:• –¾™ä}©°‹¾~ÆLš8)óæÎ©}Q>ù©OçƒþHúûûK§®KòÃIö[Z€€@3^Nrq’ÓÞàß÷¿:¼?ðÐC¹üÒKsüqÇÕ:œè×>ÚL8O’ŸJ²Ì²Þ zÐêkR’MIލ2x„ ùÌßþMÎ=çìÚâ/þê¯óë¿ñ[Ͷò|.É;-'àÍb ¾ö%Ùä†7ø÷ß·‹ÞÓÓ“¯}ãYpùå9ê¨iµ(@~÷÷?–ßûØÿÝìÎù¦$·$Ùc9:Cá$ïN2õuþ]G’Þ¼êÀ€Ý»÷äó÷Ü““N<1§ŸvÚÛúÁöö惿úkù‹¿úë¦ó}’w%Yj:Cé7ÉÈ×ùw#’ôåU;éÌ—ÿù+Ù¿.¾h~:;ß~ß*¶oß‘ŸyÏÏçË_ù—Á|š?Iò–  0Ôº“<‘äGÞàß¿îûH/~$ÿü/_͹çœý¶zytõš5y×ýd–¯X1˜OóÈ¡z´|€Vx2ɱI.,™´uÛ¶|æï?—;väÂyó2zôèaýŸ¿çó³?÷Ÿ²yË–Á|š-I®M²Õ²Þ Nqhi\`´ ™É“&MÌÏ¿ç=ù™ÿø¿åˆ#ŽVÖ½{w~í£¿žÏýÃ=ƒýT½InJò5ËÐx3t%y8IÓg)Κ93ø•÷çÖ›oJGÇ[ÿmäÛßùn>ô‘fíÚ†âÓýb7†è¼iŽI²8ÉŒÁ|’³Î<3¿øóÿ{n¹ù¦·äEÒM›^Êû­ßξø¥¡ú”¿Ÿä¿Z€€À[á¬$ßN2èÏO:ñļçg~:wÝy{Æuuµü'¾cÇËù³ÿõñüù_þUvï²ãÉÿ.ã(û, @@à­rv’¯'’#ZÆŸ»î¸=ï~×´ä6Ò×­Ëß~êïòý‰twwå§þb’»“ôX€€À[íÄ$ßHròP~ÒY3gææ›nÈ ×]—Ù³ÏÏÈ&[`¶oß‘o}ç;ùÜ?Ü“oç»éëò î¯$¹+[Wt†…Y‡Bú)…óú«|éê›ysææ‚ ææ´SOͬ™33cúñ™0aÂ÷ŽmÜ¿^~yg6½ôRV­^U«WgñâG³dÙ²ôöö¶ê¹¿œäIö[ 7ǧq9Oÿ›ý1²³³ÿ-øïþm’Ѿì gc“üÍ ƒoß[ò ?~7þ€·‘_Nr`‚ðp ëÓ8çÞv®IãÊû¡ÉoUhߘäj_VÞÎNLò­ ÿ–•>þ-Ct”$¼ÕF¤ÑÒý6 æû’üZ’N_FêæÄ4.5z»„óï¦qÔVG’MòÜ0擼'Ni ŒI㤗 Ã(˜oMòÁ$ã|yhWc“üB’'ßÂ`¾>ÉG“Lô倆Ž$צq;ç›ñ2io’¯$¹+ÉHå€76.>õ¿I²iCùþ$_Kò¾4^X¨-/ÑÐÊï1ç%¹(ÉIÎO23É1IF½ÁœþCÁ~C’åI9ô±4Én%thÍ÷žc’t½êÇF%Ù•ä¥$•à-ñÿ`w^Bõ£IEND®B`‚forkstat-0.02.02/forkstat.c0000644000175000017500000010446413234316063014165 0ustar kingking/* * Copyright (C) 2014-2018 Canonical Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Written by Colin Ian King * * Some of this code originally derived from eventstat and powerstat * also by the same author. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define APP_NAME "forkstat" #define MAX_PIDS (32769) /* Hash Max PIDs */ #define NULL_PID (pid_t)(-1) #define NULL_UID (uid_t)(-1) #define NULL_GID (gid_t)(-1) #define NULL_TTY (dev_t)(-1) #define OPT_CMD_LONG (0x00000001) /* Long command line info */ #define OPT_CMD_SHORT (0x00000002) /* Short command line info */ #define OPT_CMD_DIRNAME_STRIP (0x00000004) /* Strip dirpath from command */ #define OPT_STATS (0x00000008) /* Show stats at end of run */ #define OPT_QUIET (0x00000010) /* Run quietly */ #define OPT_REALTIME (0x00000020) /* Run with Real Time scheduling */ #define OPT_EXTRA (0x00000040) /* Show extra stats */ #define OPT_EV_FORK (0x00000100) /* Fork event */ #define OPT_EV_EXEC (0x00000200) /* Exec event */ #define OPT_EV_EXIT (0x00000400) /* Exit event */ #define OPT_EV_CORE (0x00000800) /* Coredump event */ #define OPT_EV_COMM (0x00001000) /* Comm proc info event */ #define OPT_EV_CLNE (0x00002000) /* Clone event */ #define OPT_EV_PTRC (0x00004000) /* Ptrace event */ #define OPT_EV_UID (0x00008000) /* UID event */ #define OPT_EV_SID (0x00010000) /* SID event */ #define OPT_EV_MASK (0x0001ff00) /* Event mask */ #define OPT_EV_ALL (OPT_EV_MASK) /* All events */ #define GOT_TGID (0x01) #define GOT_PPID (0x02) #define GOT_ALL (GOT_TGID | GOT_PPID) #ifndef LINUX_VERSION_CODE #define LINUX_VERSION_CODE KERNEL_VERSION(2,0,0) #endif /* /proc info cache */ typedef struct proc_info { struct proc_info *next; /* next proc info in hashed linked list */ pid_t pid; /* Process ID */ uid_t uid; /* User ID */ gid_t gid; /* GUID */ dev_t tty; /* TTY dev */ char *cmdline; /* /proc/pid/cmdline text */ bool kernel_thread; /* true if a kernel thread */ struct timeval start; /* time when process started */ } proc_info_t; /* For kernel task checking */ typedef struct { char *task; /* Name of kernel task */ size_t len; /* Length */ } kernel_task_info; typedef enum { STAT_FORK = 0, /* Fork */ STAT_EXEC, /* Exec */ STAT_EXIT, /* Exit */ STAT_CORE, /* Core dump */ STAT_COMM, /* Proc comm field change */ STAT_CLNE, /* Clone */ STAT_PTRC, /* Ptrace */ STAT_UID, /* UID change */ STAT_SID, /* SID change */ STAT_LAST /* Always last sentinal */ } event_t; typedef struct proc_stats { struct proc_stats *next;/* Next one in list */ char *name; /* Process name */ uint64_t count[STAT_LAST]; /* Tally count */ uint64_t total; /* Tally count total of all counts */ } proc_stats_t; typedef struct { const char *event; /* Event name */ const char *label; /* Human readable label */ const int flag; /* option flag */ const event_t stat; /* stat enum */ } ev_map_t; /* Mapping of event names to option flags and event_t types */ static const ev_map_t ev_map[] = { { "fork", "Fork", OPT_EV_FORK, STAT_FORK }, { "exec", "Exec", OPT_EV_EXEC, STAT_EXEC }, { "exit", "Exit", OPT_EV_EXIT, STAT_EXIT }, { "core", "Coredump", OPT_EV_CORE, STAT_CORE }, { "comm", "Comm", OPT_EV_COMM, STAT_COMM }, { "clone","Clone", OPT_EV_CLNE, STAT_CLNE }, { "ptrce","Ptrace", OPT_EV_PTRC, STAT_PTRC }, { "uid", "Uid", OPT_EV_UID, STAT_UID }, { "sid", "Sid", OPT_EV_SID, STAT_SID }, { "all", "", OPT_EV_ALL, 0 }, { NULL, NULL, 0, 0 } }; #define KERN_TASK_INFO(str) { str, sizeof(str) - 1 } static volatile bool stop_recv; /* sighandler stop flag */ static bool sane_procs; /* true if not inside a container */ static proc_info_t *proc_info[MAX_PIDS]; /* Proc hash table */ static proc_stats_t *proc_stats[MAX_PIDS]; /* Proc stats hash table */ static unsigned int opt_flags = OPT_CMD_LONG; /* Default option */ static int row = 0; /* tty row number */ static long int opt_duration = -1; /* duration, < 0 means run forever */ /* Default void no process info struct */ static proc_info_t no_info = { .pid = NULL_PID, .uid = NULL_UID, .cmdline = "", .kernel_thread = false, .start = { 0, 0 }, .next = NULL, }; /* * Attempt to catch a range of signals so * we can clean */ static const int signals[] = { /* POSIX.1-1990 */ #ifdef SIGHUP SIGHUP, #endif #ifdef SIGINT SIGINT, #endif #ifdef SIGQUIT SIGQUIT, #endif #ifdef SIGFPE SIGFPE, #endif #ifdef SIGTERM SIGTERM, #endif #ifdef SIGUSR1 SIGUSR1, #endif #ifdef SIGUSR2 SIGUSR2, /* POSIX.1-2001 */ #endif #ifdef SIGXCPU SIGXCPU, #endif #ifdef SIGXFSZ SIGXFSZ, #endif /* Linux various */ #ifdef SIGIOT SIGIOT, #endif #ifdef SIGSTKFLT SIGSTKFLT, #endif #ifdef SIGPWR SIGPWR, #endif #ifdef SIGINFO SIGINFO, #endif #ifdef SIGVTALRM SIGVTALRM, #endif -1, }; static proc_info_t *proc_info_get(pid_t pid); /* * get_username() * get username from a given user id */ static char *get_username(const uid_t uid) { struct passwd *pwd; static char buf[12]; pwd = getpwuid(uid); if (pwd) return pwd->pw_name; snprintf(buf, sizeof(buf), "%d", uid); return buf; } /* * get_tty() * get a TTY name with device ID dev */ static char *get_tty(const dev_t dev) { DIR *dir; struct dirent *dirent; static char tty[16]; strncpy(tty, "?", sizeof(tty)); dir = opendir("/dev/pts"); if (!dir) goto err; while ((dirent = readdir(dir))) { struct stat buf; char path[PATH_MAX]; if (dirent->d_name[0] == '.') continue; snprintf(path, sizeof(path), "/dev/pts/%s", dirent->d_name); if (stat(path, &buf) < 0) continue; if (buf.st_rdev == dev) { snprintf(tty, sizeof(tty), "pts/%-11.11s", dirent->d_name); break; } } (void)closedir(dir); err: return tty; } /* * get_extra() * quick and dirty way to get UID and GID from a PID, * note that this does not cater of changes * because of use of an effective ID. */ static void get_extra(const pid_t pid, proc_info_t *info) { ssize_t ret; long dev; int fd; char path[PATH_MAX]; char buffer[4096]; struct stat buf; info->uid = NULL_UID; info->gid = NULL_GID; info->tty = NULL_TTY; if (!(opt_flags & OPT_EXTRA)) return; snprintf(path, sizeof(path), "/proc/%u/stat", pid); fd = open(path, O_RDONLY); if (fd < 0) return; if (fstat(fd, &buf) == 0) { info->uid = buf.st_uid; info->gid = buf.st_gid; } ret = read(fd, buffer, sizeof(buffer)); (void)close(fd); if (ret < 0) return; if (sscanf(buffer, "%*d %*s %*s %*d %*d %*d %ld", &dev) == 1) info->tty = (dev_t)dev; } /* * pid_max_digits() * determine (or guess) maximum digits of pids */ static int pid_max_digits(void) { static int max_digits; ssize_t n; int fd; const int default_digits = 6; const int min_digits = 5; char buf[32]; if (max_digits) goto ret; max_digits = default_digits; fd = open("/proc/sys/kernel/pid_max", O_RDONLY); if (fd < 0) goto ret; n = read(fd, buf, sizeof(buf) - 1); (void)close(fd); if (n < 0) goto ret; buf[n] = '\0'; max_digits = 0; while (buf[max_digits] >= '0' && buf[max_digits] <= '9') max_digits++; if (max_digits < min_digits) max_digits = min_digits; ret: return max_digits; } /* * get_parent_pid() * get parent pid and set is_thread to true if process * not forked but a newly created thread */ static pid_t get_parent_pid(const pid_t pid, bool *is_thread) { FILE *fp; pid_t tgid = 0, ppid = 0; unsigned int got = 0; char path[PATH_MAX]; char buffer[4096]; *is_thread = false; snprintf(path, sizeof(path), "/proc/%u/status", pid); fp = fopen(path, "r"); if (!fp) return 0; while (((got & GOT_ALL) != GOT_ALL) && (fgets(buffer, sizeof(buffer), fp) != NULL)) { if (!strncmp(buffer, "Tgid:", 5)) { if (sscanf(buffer + 5, "%u", &tgid) == 1) { got |= GOT_TGID; } else { tgid = 0; } } if (!strncmp(buffer, "PPid:", 5)) { if (sscanf(buffer + 5, "%u", &ppid) == 1) { got |= GOT_PPID; } else { ppid = 0; } } } (void)fclose(fp); if ((got & GOT_ALL) == GOT_ALL) { /* TGID and PID are not the same if it is a thread */ if (tgid != pid) { /* In this case, the parent is the TGID */ ppid = tgid; *is_thread = true; } } else { ppid = 0; } return ppid; } /* * sane_proc_pid_info() * detect if proc info mapping from /proc/timer_stats * maps to proc pids OK. If we are in a container or * we can't tell, return false. */ static bool sane_proc_pid_info(void) { static const char pattern[] = "container="; FILE *fp; bool ret = true; const char *ptr = pattern; fp = fopen("/proc/1/environ", "r"); if (!fp) return false; while (!feof(fp)) { int ch = getc(fp); if (*ptr == ch) { ptr++; /* Match? So we're inside a container */ if (*ptr == '\0') { ret = false; break; } } else { /* No match, skip to end of var and restart scan */ do { ch = getc(fp); } while ((ch != EOF) && (ch != '\0')); ptr = pattern; } } (void)fclose(fp); return ret; } /* * pid_a_kernel_thread * is a process a kernel thread? */ static bool pid_a_kernel_thread(const char *task, const pid_t id) { if (sane_procs) { return getpgid(id) == 0; } else { /* In side a container, make a guess at kernel threads */ int i; const pid_t pgid = getpgid(id); /* This fails for kernel threads inside a container */ if (pgid >= 0) return pgid == 0; /* * This is not exactly accurate, but if we can't look up * a process then try and infer something from the comm field. * Until we have better kernel support to map /proc/timer_stats * pids to containerised pids this is the best we can do. */ static const kernel_task_info kernel_tasks[] = { KERN_TASK_INFO("swapper/"), KERN_TASK_INFO("kworker/"), KERN_TASK_INFO("ksoftirqd/"), KERN_TASK_INFO("watchdog/"), KERN_TASK_INFO("migration/"), KERN_TASK_INFO("irq/"), KERN_TASK_INFO("mmcqd/"), KERN_TASK_INFO("jbd2/"), KERN_TASK_INFO("kthreadd"), KERN_TASK_INFO("kthrotld"), KERN_TASK_INFO("kswapd"), KERN_TASK_INFO("ecryptfs-kthrea"), KERN_TASK_INFO("kauditd"), KERN_TASK_INFO("kblockd"), KERN_TASK_INFO("kcryptd"), KERN_TASK_INFO("kdevtmpfs"), KERN_TASK_INFO("khelper"), KERN_TASK_INFO("khubd"), KERN_TASK_INFO("khugepaged"), KERN_TASK_INFO("khungtaskd"), KERN_TASK_INFO("flush-"), KERN_TASK_INFO("bdi-default-"), { NULL, 0 } }; for (i = 0; kernel_tasks[i].task != NULL; i++) { if (strncmp(task, kernel_tasks[i].task, kernel_tasks[i].len) == 0) return true; } } return false; } /* * tty_height() * try and find height of tty */ static int tty_height(void) { #ifdef TIOCGWINSZ const int fd = 0; struct winsize ws; /* if tty and we can get a sane width, return it */ if (isatty(fd) && (ioctl(fd, TIOCGWINSZ, &ws) != -1) && (0 < ws.ws_row) && (ws.ws_row == (size_t)ws.ws_row)) return ws.ws_row; #endif return 25; /* else standard tty 80x25 */ } /* * print_heading() * print heading to output */ static void print_heading(void) { int pid_size; if (opt_flags & OPT_QUIET) return; pid_size = pid_max_digits(); printf("Time Event %*.*s %sInfo Duration Process\n", pid_size, pid_size, "PID", (opt_flags & OPT_EXTRA) ? " UID TTY " : ""); } /* * row_increment() * bump row increment and re-print heading if required */ static void row_increment(void) { const int tty_rows = tty_height(); row++; if ((tty_rows > 2) && (row >= tty_rows)) { print_heading(); row = 2; } } /* * timeval_to_double() * convert timeval to seconds as a double */ static inline double timeval_to_double(const struct timeval *tv) { return (double)tv->tv_sec + ((double)tv->tv_usec / 1000000.0); } /* * proc_info_hash() * hash on PID */ static inline size_t proc_info_hash(const pid_t pid) { return pid % MAX_PIDS; } /* * proc_name_hash() * Hash a string, from Dan Bernstein comp.lang.c (xor version) */ static inline unsigned int proc_name_hash(const char *str) { register unsigned int hash = 5381; register unsigned int c; while ((c = *str++)) { /* (hash * 33) ^ c */ hash = ((hash << 5) + hash) ^ c; } return hash % MAX_PIDS; } static void proc_stats_account(const pid_t pid, const event_t event) { unsigned int h; char *name; proc_stats_t *stats; proc_info_t *info; if (!(opt_flags & OPT_STATS)) return; info = proc_info_get(pid); if (info == &no_info) return; name = info->cmdline; h = proc_name_hash(name); stats = proc_stats[h]; while (stats) { if (!strcmp(stats->name, name)) { stats->count[event]++; stats->total++; return; } stats = stats->next; } stats = calloc(1, sizeof(*stats)); if (!stats) return; /* silently ignore */ stats->name = strdup(name); if (!stats->name) { free(stats); return; } stats->count[event]++; stats->total++; stats->next = proc_stats[h]; proc_stats[h] = stats; } /* * stats_cmp() * compare stats total, used for sorting list */ static int stats_cmp(const void *v1, const void *v2) { proc_stats_t *const *s1 = (proc_stats_t *const *)v1; proc_stats_t *const *s2 = (proc_stats_t *const *)v2; if ((*s2)->total == (*s1)->total) return 0; return ((*s2)->total > (*s1)->total) ? 1 : -1; } /* * proc_stats_report() * report event statistics */ static void proc_stats_report(void) { size_t i, n = 0; proc_stats_t *stats, **sorted; if (!(opt_flags & OPT_STATS)) return; for (i = 0; i < MAX_PIDS; i++) for (stats = proc_stats[i]; stats; stats = stats->next) n++; if (!n) { printf("\nNo statistics gathered.\n"); return; } printf("\n"); for (i = 0; i < STAT_LAST; i++) printf("%8s ", ev_map[i].label); printf(" Total Process\n"); sorted = calloc(n, sizeof(proc_stats_t *)); if (!sorted) { fprintf(stderr, "Cannot sort statistics, out of memory.\n"); return; } for (n = 0, i = 0; i < MAX_PIDS; i++) for (stats = proc_stats[i]; stats; stats = stats->next) sorted[n++] = stats; qsort(sorted, n, sizeof(proc_stats_t *), stats_cmp); for (i = 0; i < n; i++) { int j; stats = sorted[i]; for (j = 0; j < STAT_LAST; j++) printf("%8" PRIu64 " ", stats->count[j]); printf("%8" PRIu64 " %s\n", stats->total, stats->name); } free(sorted); } /* * proc_stats_free() * free stats list */ static void proc_stats_free(void) { size_t i; for (i = 0; i < MAX_PIDS; i++) { proc_stats_t *stats = proc_stats[i]; while (stats) { proc_stats_t *next = stats->next; free(stats->name); free(stats); stats = next; } } } /* * proc_comm() * get process name from comm field */ static char *proc_comm(const pid_t pid) { int fd; ssize_t ret; char buffer[4096]; snprintf(buffer, sizeof(buffer), "/proc/%d/comm", pid); if ((fd = open(buffer, O_RDONLY)) < 0) { return NULL; } if ((ret = read(fd, buffer, sizeof(buffer) - 1)) <= 0) { (void)close(fd); return NULL; } (void)close(fd); buffer[ret - 1] = '\0'; /* remove trailing '\n' */ return strdup(buffer); } /* * proc_cmdline * get process's /proc/pid/cmdline */ static char *proc_cmdline(const pid_t pid) { char *ptr; int fd; ssize_t ret; char buffer[4096]; snprintf(buffer, sizeof(buffer), "/proc/%d/cmdline", pid); if ((fd = open(buffer, O_RDONLY)) < 0) { return proc_comm(pid); } (void)memset(buffer, 0, sizeof(buffer)); if ((ret = read(fd, buffer, sizeof(buffer) - 1)) <= 0) { (void)close(fd); return proc_comm(pid); } (void)close(fd); buffer[ret] = '\0'; /* Keeps coverity scan happy */ /* * OPT_CMD_LONG option we get the full cmdline args */ if (opt_flags & OPT_CMD_LONG) { for (ptr = buffer; ptr < buffer + ret; ptr++) { if (*ptr == '\0') { if (*(ptr + 1) == '\0') break; *ptr = ' '; } } } /* * OPT_CMD_SHORT option we discard anything after a space */ if (opt_flags & OPT_CMD_SHORT) { for (ptr = buffer; *ptr && (ptr < buffer + ret); ptr++) { if (*ptr == ' ') { *ptr = '\0'; break; } } } if (opt_flags & OPT_CMD_DIRNAME_STRIP) return strdup(basename(buffer)); return strdup(buffer); } /* * proc_info_get() * get proc info on a given pid */ static proc_info_t *proc_info_get(const pid_t pid) { const size_t i = proc_info_hash(pid); proc_info_t *info = proc_info[i]; while (info) { if (info->pid == pid) return info; info = info->next; } return &no_info; } /* * proc_info_free() * free cached process info and remove from hash table */ static void proc_info_free(const pid_t pid) { const size_t i = proc_info_hash(pid); proc_info_t *info = proc_info[i]; while (info) { if (info->pid == pid) { info->pid = NULL_PID; info->uid = NULL_UID; info->gid = NULL_GID; free(info->cmdline); info->cmdline = NULL; return; } info = info->next; } } /* * proc_info_unload() * free all hashed proc info entries */ static void proc_info_unload(void) { size_t i; for (i = 0; i < MAX_PIDS; i++) { proc_info_t *info = proc_info[i]; while (info) { proc_info_t *next = info->next; free(info->cmdline); free(info); info = next; } } } /* * proc_info_update() * uopdate process name, for example, if exec has occurred */ static proc_info_t const *proc_info_update(const pid_t pid) { proc_info_t *info = proc_info_get(pid); char *newcmd; if (info == &no_info) return &no_info; newcmd = proc_cmdline(pid); if (!newcmd) return &no_info; free(info->cmdline); info->cmdline = newcmd; return info; } /* * proc_info_add() * add processes info of a given pid to the hash table */ static proc_info_t *proc_info_add(const pid_t pid, struct timeval *tv) { const size_t i = proc_info_hash(pid); proc_info_t *info; char *cmdline; cmdline = proc_cmdline(pid); if (!cmdline) return NULL; /* Re-use any info on the list if it's free */ info = proc_info[i]; while (info) { if (info->pid == NULL_PID) break; info = info->next; } if (!info) { info = calloc(1, sizeof(proc_info_t)); if (!info) { fprintf(stderr, "Cannot allocate all proc info\n"); free(cmdline); return NULL; } info->next = proc_info[i]; proc_info[i] = info; } info->cmdline = cmdline; info->pid = pid; get_extra(pid, info); info->kernel_thread = pid_a_kernel_thread(cmdline, pid); if (tv) info->start = *tv; else { info->start.tv_sec = 0; info->start.tv_usec = 0; } return info; } /* * proc_thread_info_add() * Add a processes' thread into proc cache */ static void proc_thread_info_add(const pid_t pid) { DIR *dir; struct dirent *dirent; char path[PATH_MAX]; snprintf(path, sizeof(path), "/proc/%i/task", pid); dir = opendir(path); if (!dir) return; while ((dirent = readdir(dir))) { if (isdigit(dirent->d_name[0])) { pid_t tpid; errno = 0; tpid = (pid_t)strtol(dirent->d_name, NULL, 10); if ((!errno) && (tpid != pid)) (void)proc_info_add(tpid, NULL); } } (void)closedir(dir); } /* * proc_info_load() * load up all current processes info into hash table */ static int proc_info_load(void) { DIR *dir; struct dirent *dirent; dir = opendir("/proc"); if (!dir) return -1; while ((dirent = readdir(dir))) { if (isdigit(dirent->d_name[0])) { pid_t pid; errno = 0; pid = (pid_t)strtol(dirent->d_name, NULL, 10); if (!errno) { (void)proc_info_add(pid, NULL); proc_thread_info_add(pid); } } } (void)closedir(dir); return 0; } static char *extra_info(const uid_t uid) { static char buf[20]; *buf = '\0'; if (opt_flags & OPT_EXTRA) { const proc_info_t *info = proc_info_get(uid); if (info && info->uid != NULL_UID) snprintf(buf, sizeof(buf), "%6d %-6.6s ", info->uid, get_tty(info->tty)); else snprintf(buf, sizeof(buf), "%14s", ""); } return buf; } /* * handle_sig() * catch signal and flag a stop */ static void handle_sig(int dummy) { (void)dummy; stop_recv = true; } /* * netlink_connect() * connect to netlink socket */ static int netlink_connect(void) { int sock; struct sockaddr_nl addr; if ((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR)) < 0) { if (errno == EPROTONOSUPPORT) return -EPROTONOSUPPORT; fprintf(stderr, "socket failed: errno=%d (%s)\n", errno, strerror(errno)); return -1; } (void)memset(&addr, 0, sizeof(addr)); addr.nl_pid = getpid(); addr.nl_family = AF_NETLINK; addr.nl_groups = CN_IDX_PROC; if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { fprintf(stderr, "bind failed: errno=%d (%s)\n", errno, strerror(errno)); (void)close(sock); return -1; } return sock; } /* * netlink_listen() * proc connector listen */ static int netlink_listen(const int sock) { enum proc_cn_mcast_op op; struct nlmsghdr nlmsghdr; struct cn_msg cn_msg; struct iovec iov[3]; (void)memset(&nlmsghdr, 0, sizeof(nlmsghdr)); nlmsghdr.nlmsg_len = NLMSG_LENGTH(sizeof(cn_msg) + sizeof(op)); nlmsghdr.nlmsg_pid = getpid(); nlmsghdr.nlmsg_type = NLMSG_DONE; iov[0].iov_base = &nlmsghdr; iov[0].iov_len = sizeof(nlmsghdr); (void)memset(&cn_msg, 0, sizeof(cn_msg)); cn_msg.id.idx = CN_IDX_PROC; cn_msg.id.val = CN_VAL_PROC; cn_msg.len = sizeof(enum proc_cn_mcast_op); iov[1].iov_base = &cn_msg; iov[1].iov_len = sizeof(cn_msg); op = PROC_CN_MCAST_LISTEN; iov[2].iov_base = &op; iov[2].iov_len = sizeof(op); return writev(sock, iov, 3); } /* * monitor() * monitor system activity */ static int monitor(const int sock) { struct nlmsghdr *nlmsghdr; const int pid_size = pid_max_digits(); print_heading(); while (!stop_recv) { ssize_t len; char __attribute__ ((aligned(NLMSG_ALIGNTO)))buf[4096]; if ((len = recv(sock, buf, sizeof(buf), 0)) == 0) { return 0; } if (len == -1) { const int err = errno; switch (err) { case EINTR: return 0; case ENOBUFS: { time_t now; struct tm tm; now = time(NULL); if (now == ((time_t) -1)) { printf("--:--:-- recv ----- " "nobufs %8.8s (%s)\n", "", strerror(err)); } else { (void)localtime_r(&now, &tm); printf("%2.2d:%2.2d:%2.2d recv ----- " "nobufs %8.8s (%s)\n", tm.tm_hour, tm.tm_min, tm.tm_sec, "", strerror(err)); } break; } default: fprintf(stderr,"recv failed: errno=%d (%s)\n", err, strerror(err)); return -1; } } for (nlmsghdr = (struct nlmsghdr *)buf; NLMSG_OK (nlmsghdr, len); nlmsghdr = NLMSG_NEXT (nlmsghdr, len)) { struct cn_msg *cn_msg; struct proc_event *proc_ev; struct tm tm; char when[10]; time_t now; pid_t pid, ppid; bool is_thread; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) struct timeval tv; char duration[32]; proc_info_t const *info1, *info2; #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) char *comm; #endif if (stop_recv) break; if ((nlmsghdr->nlmsg_type == NLMSG_ERROR) || (nlmsghdr->nlmsg_type == NLMSG_NOOP)) continue; cn_msg = NLMSG_DATA(nlmsghdr); if ((cn_msg->id.idx != CN_IDX_PROC) || (cn_msg->id.val != CN_VAL_PROC)) continue; proc_ev = (struct proc_event *)cn_msg->data; now = time(NULL); if (now == ((time_t) -1)) { snprintf(when, sizeof(when), "--:--:--"); } else { (void)localtime_r(&now, &tm); snprintf(when, sizeof(when), "%2.2d:%2.2d:%2.2d", tm.tm_hour, tm.tm_min, tm.tm_sec); } switch (proc_ev->what) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) case PROC_EVENT_FORK: ppid = get_parent_pid(proc_ev->event_data.fork.child_pid, &is_thread); pid = proc_ev->event_data.fork.child_pid; proc_stats_account(proc_ev->event_data.fork.parent_pid, is_thread ? STAT_CLNE : STAT_FORK); if (gettimeofday(&tv, NULL) < 0) { (void)memset(&tv, 0, sizeof tv); } info1 = proc_info_get(ppid); info2 = proc_info_add(pid, &tv); if (!(opt_flags & OPT_QUIET) && (((opt_flags & OPT_EV_FORK) && !is_thread) || ((opt_flags & OPT_EV_CLNE) && is_thread))) { if (info1 != NULL && info2 != NULL) { char *type = is_thread ? "clone" : "fork"; row_increment(); printf("%s %-5.5s %*d %sparent %8s %s%s%s\n", when, type, pid_size, ppid, extra_info(ppid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); row_increment(); printf("%s %-5.5s %*d %s%6.6s %8s %s%s%s\n", when, type, pid_size, pid, extra_info(pid), is_thread ? "thread" : "child", "", info1->kernel_thread ? "[" : "", info2->cmdline, info1->kernel_thread ? "]" : ""); } } break; case PROC_EVENT_EXEC: proc_stats_account(proc_ev->event_data.exec.process_pid, STAT_EXEC); pid = proc_ev->event_data.exec.process_pid; info1 = proc_info_update(pid); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_EXEC)) { row_increment(); printf("%s exec %*d %s %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } break; case PROC_EVENT_EXIT: proc_stats_account(proc_ev->event_data.exit.process_pid, STAT_EXIT); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_EXIT)) { pid = proc_ev->event_data.exit.process_pid; info1 = proc_info_get(pid); if (info1->start.tv_sec) { double d1, d2; if (gettimeofday(&tv, NULL) < 0) { (void)memset(&tv, 0, sizeof tv); } d1 = timeval_to_double(&info1->start); d2 = timeval_to_double(&tv); snprintf(duration, sizeof(duration), "%8.3f", d2 - d1); } else { snprintf(duration, sizeof(duration), "unknown"); } row_increment(); printf("%s exit %*d %s%6d %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), proc_ev->event_data.exit.exit_code, duration, info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } proc_info_free(proc_ev->event_data.exit.process_pid); break; case PROC_EVENT_UID: proc_stats_account(proc_ev->event_data.exec.process_pid, STAT_UID); info1 = proc_info_update(proc_ev->event_data.exec.process_pid); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_UID)) { row_increment(); pid = proc_ev->event_data.exec.process_pid; if (proc_ev->what == PROC_EVENT_UID) { printf("%s uid %*d %s%6s %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), get_username(proc_ev->event_data.id.e.euid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } else { printf("%s gid %*d %6s %s%8s %s%s%s\n", when, pid_size, pid, extra_info(pid), get_username(proc_ev->event_data.id.e.euid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } } break; case PROC_EVENT_SID: proc_stats_account(proc_ev->event_data.exec.process_pid, STAT_SID); info1 = proc_info_update(proc_ev->event_data.exec.process_pid); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_UID)) { row_increment(); pid = proc_ev->event_data.exec.process_pid; printf("%s sid %*d %s%6d %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), proc_ev->event_data.sid.process_pid, "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } break; #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) case PROC_EVENT_COREDUMP: proc_stats_account(proc_ev->event_data.coredump.process_pid, STAT_CORE); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_CORE)) { pid = proc_ev->event_data.coredump.process_pid; info1 = proc_info_get(pid); row_increment(); printf("%s core %*d %s %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : ""); } break; #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) case PROC_EVENT_PTRACE: proc_stats_account(proc_ev->event_data.comm.process_pid, STAT_PTRC); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_PTRC)) { const bool attach = (proc_ev->event_data.ptrace.tracer_pid != 0); #if 0 pid = attach ? proc_ev->event_data.ptrace.tracer_pid : proc_ev->event_data.ptrace.process_pid; #else pid = proc_ev->event_data.ptrace.process_pid; #endif info1 = proc_info_get(pid); row_increment(); printf("%s ptrce %*d %s%6s %8s %s%s%s\n", when, pid_size, pid, extra_info(pid), attach ? "attach" : "detach", "", info1->kernel_thread ? "[" : "", attach ? info1->cmdline : "", info1->kernel_thread ? "]" : ""); } break; #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) case PROC_EVENT_COMM: proc_stats_account(proc_ev->event_data.comm.process_pid, STAT_COMM); if (!(opt_flags & OPT_QUIET) && (opt_flags & OPT_EV_COMM)) { pid = proc_ev->event_data.comm.process_pid; info1 = proc_info_get(pid); comm = proc_comm(pid); if (!comm) break; row_increment(); printf("%s comm %*d %s %8s %s%s%s -> %s\n", when, pid_size, pid, extra_info(pid), "", info1->kernel_thread ? "[" : "", info1->cmdline, info1->kernel_thread ? "]" : "", comm); free(comm); } break; #endif default: break; } } } return 0; } /* * show_help() * simple help */ static void show_help(char *const argv[]) { printf("%s, version %s\n\n", APP_NAME, VERSION); printf("usage: %s [-d|-D|-e|-h|-l|-s|-S|-q]\n", argv[0]); printf("-d\tstrip off directory path from process name.\n" "-D\tspecify run duration in seconds.\n" "-e\tselect which events to monitor.\n" "-h\tshow this help.\n" "-l\tforce stdout line buffering.\n" "-r\trun with real time FIFO scheduler.\n" "-s\tshow short process name.\n" "-S\tshow event statistics at end of the run.\n" "-q\trun quietly and enable -S option.\n" "-x\tshow extra process information.\n"); } /* * parse_ev() * parse event strings, turn into flag mask */ static int parse_ev(char *arg) { char *str, *token; for (str = arg; (token = strtok(str, ",")) != NULL; str = NULL) { size_t i; bool found = false; for (i = 0; ev_map[i].event; i++) { if (!strcmp(token, ev_map[i].event)) { opt_flags |= ev_map[i].flag; found = true; } } if (!found) { fprintf(stderr, "Unknown event '%s'. Allowed events:", token); for (i = 0; ev_map[i].event; i++) printf(" %s", ev_map[i].event); printf("\n"); return -1; } } return 0; } int main(int argc, char * const argv[]) { size_t i; int sock, ret = EXIT_FAILURE; struct sigaction new_action; for (;;) { const int c = getopt(argc, argv, "dD:e:hlrsSqx"); if (c == -1) break; switch (c) { case 'd': opt_flags |= OPT_CMD_DIRNAME_STRIP; break; case 'D': opt_duration = strtol(optarg, NULL, 10); if (opt_duration <= 0) { fprintf(stderr, "Illegal duration.\n"); exit(EXIT_FAILURE); } break; case 'e': if (parse_ev(optarg) < 0) exit(EXIT_FAILURE); break; case 'h': show_help(argv); exit(EXIT_SUCCESS); case 'r': opt_flags |= OPT_REALTIME; break; case 's': opt_flags &= ~OPT_CMD_LONG; opt_flags |= OPT_CMD_SHORT; break; case 'S': opt_flags |= OPT_STATS; break; case 'q': opt_flags |= OPT_QUIET; break; case 'l': if (setvbuf(stdout, NULL, _IOLBF, 0) != 0) { fprintf(stderr, "Error setting line buffering.\n"); exit(EXIT_FAILURE); } break; case 'x': opt_flags |= OPT_EXTRA; break; default: show_help(argv); exit(EXIT_FAILURE); } } if ((opt_flags & OPT_EV_MASK) == 0) opt_flags |= (OPT_EV_FORK | OPT_EV_EXEC | OPT_EV_EXIT | OPT_EV_CLNE | OPT_EV_PTRC); if (geteuid() != 0) { fprintf(stderr, "Need to run with root access.\n"); goto abort_sock; } (void)memset(&new_action, 0, sizeof(new_action)); for (i = 0; signals[i] != -1; i++) { new_action.sa_handler = handle_sig; sigemptyset(&new_action.sa_mask); new_action.sa_flags = 0; if (sigaction(signals[i], &new_action, NULL) < 0) { fprintf(stderr, "sigaction failed: errno=%d (%s)\n", errno, strerror(errno)); goto abort_sock; } } sane_procs = sane_proc_pid_info(); if (proc_info_load() < 0) { fprintf(stderr, "Cannot load process cache. Is /proc mounted?\n"); goto abort_sock; } if (opt_flags & OPT_REALTIME) { struct sched_param param; int max_prio; const int policy = SCHED_FIFO; max_prio = sched_get_priority_max(policy); if (max_prio < 0) { fprintf(stderr, "sched_get_priority_max failed: errno=%d (%s)\n", errno, strerror(errno)); goto abort_sock; } (void)memset(¶m, 0, sizeof(param)); param.sched_priority = max_prio; if (sched_setscheduler(getpid(), policy, ¶m) < 0) { fprintf(stderr, "sched_setscheduler failed: errno=%d (%s)\n", errno, strerror(errno)); goto abort_sock; } } sock = netlink_connect(); if (sock == -EPROTONOSUPPORT) { fprintf(stderr, "Cannot show process activity with this kernel, netlink required.\n"); goto abort_sock; } /* Handle other failures */ if (sock < 0) goto abort_sock; if (netlink_listen(sock) < 0) { fprintf(stderr, "netlink listen failed: errno=%d (%s)\n", errno, strerror(errno)); goto close_abort; } if (opt_duration > 0) alarm(opt_duration); if (monitor(sock) == 0) { ret = EXIT_SUCCESS; proc_stats_report(); } close_abort: (void)close(sock); abort_sock: proc_info_unload(); proc_stats_free(); exit(ret); } forkstat-0.02.02/Makefile0000644000175000017500000000364513234316063013623 0ustar kingking# # Copyright (C) 2014-2018 Canonical, Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # VERSION=0.02.02 # # Version "Perspicacious Process Peeker" # CFLAGS += -Wall -Wextra -DVERSION='"$(VERSION)"' -O2 # # Pedantic flags # ifeq ($(PEDANTIC),1) CFLAGS += -Wabi -Wcast-qual -Wfloat-equal -Wmissing-declarations \ -Wmissing-format-attribute -Wno-long-long -Wpacked \ -Wredundant-decls -Wshadow -Wno-missing-field-initializers \ -Wno-missing-braces -Wno-sign-compare -Wno-multichar endif export DEB_BUILD_HARDENING=1 BINDIR=/usr/bin MANDIR=/usr/share/man/man8 forkstat: forkstat.o $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(LDFLAGS) forkstat.8.gz: forkstat.8 gzip -c $< > $@ .PHONEY: dist dist: rm -rf forkstat-$(VERSION) mkdir forkstat-$(VERSION) cp -rp Makefile forkstat.c forkstat.8 mascot COPYING \ snapcraft forkstat-$(VERSION) tar -zcf forkstat-$(VERSION).tar.gz forkstat-$(VERSION) rm -rf forkstat-$(VERSION) .PHONEY: pdf pdf: man -t ./forkstat.8 | ps2pdf - > forkstat.pdf .PHONEY: clean clean: rm -f forkstat forkstat.o forkstat.8.gz rm -f forkstat-$(VERSION).tar.gz rm -f forkstat.pdf .PHONEY: install install: forkstat forkstat.8.gz mkdir -p ${DESTDIR}${BINDIR} cp forkstat ${DESTDIR}${BINDIR} mkdir -p ${DESTDIR}${MANDIR} cp forkstat.8.gz ${DESTDIR}${MANDIR} forkstat-0.02.02/forkstat.80000644000175000017500000000712613234316063014107 0ustar kingking.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH FORKSTAT 8 "24 June, 2017" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME forkstat \- a tool to show process fork/exec/exit activity .br .SH SYNOPSIS .B forkstat .RI [ \-d ] .RI [ \-D ] .RI [ \-e ] .RI [ \-h ] .RI [ \-l ] .RI [ \-r ] .RI [ \-s ] .RI [ \-S ] .RI [ \-q ] .RI [ \-x ] .br .SH DESCRIPTION Forkstat is a program that logs process fork(), exec(), exit(), coredump and process name change activity. It is useful for monitoring system behaviour and to track down rogue processes that are spawning off processes and potentially abusing the system. Note that forkstat uses the Linux netlink connector to gather process activity and this may miss events if the system is overly busy. Netlink connector also requires root privilege. Forkstat will display several columns of process related information: .TS l l. \fBTitle Description\fR Time When the fork/exec/exit event occurred. Event Type of event. PID Process or thread ID. Info Parent or child if a fork, or process exit(2) value. Duration T{ On exit, the duration the command ran for in seconds. Process The process name. The name will be in [ ] brackets if it is a kernel thread. T} .TE .SH OPTIONS forkstat options are as follow: .TP .B \-d strip off the directory path from the process name. .TP .B \-D seconds specify duration in seconds to run forkstat. .TP .B \-e specify events to trace as a comma seperated list. By default the fork, exec and exit events are traced. Available events are: .TS l lw(4i). \fBEvent Description\fR fork forks exec execs exit exits core core dumps comm process name changes in comm field clone clone (normally on thread creation) ptrce ptrace attach or detach uid uid/gid events sid sid events all all the events above .TE .TP .B \-h show brief help summary. .TP .B \-l set stdout to line-buffered mode. .TP .B \-r run with real time FIFO scheduling with maximum priority to keep up with high volumes of process events. .TP .B \-s show short process name information. .TP .B \-S show event statistics. .TP .B \-q run quietly and enable the \-S option. .TP .B \-x show extra process related information: user ID and TTY of the process. .SH EXAMPLES .LP Show process activity with short process names and directory base path stripped off: .RS 8 forkstat \-s \-d .RE .LP Trace forks and core dumps only: .RS 8 forkstat \-e fork,core .RE .LP Trace all events and print statistics at end: .RS 8 forkstat \-e all \-S .RE .LP Trace all events for 10 minutes: .RS 8 forkstat \-e all \-D 600 .RE .LP Trace clones for 1 minute: .RS 8 forkstat \-e clone \-D 60 .RE .SH SEE ALSO .BR vmstat (8) .SH AUTHOR forkstat was written by Colin King . Thanks also for contributions from Philipp Gesang. .PP This manual page was written by Colin King , for the Ubuntu project (but may be used by others). .SH COPYRIGHT Copyright \(co 2014-2018 Canonical Ltd. .br This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. forkstat-0.02.02/snapcraft/0000755000175000017500000000000013234316063014134 5ustar kingkingforkstat-0.02.02/snapcraft/snapcraft.yaml0000644000175000017500000000105513234316063017002 0ustar kingkingname: forkstat version: 0 summary: process fork/exec/exit monitoring tool description: Forkstat monitors process fork(), exec() and exit() activity. It is useful for monitoring system behaviour and to track down rogue processes that are spawning off processes and potentially abusing the system. confinement: devmode type: app grade: stable parts: forkstat: plugin: make source: git://kernel.ubuntu.com/cking/forkstat build-packages: - gcc - make apps: forkstat: command: usr/bin/forkstat forkstat-0.02.02/snapcraft/Makefile0000644000175000017500000000127013234316063015574 0ustar kingkingVERSION=$(shell git tag | tail -1 | cut -c2-) COMMITS=$(shell git log --oneline | wc -l) SHA=$(shell git log -1 --oneline | cut -d' ' -f1) DATE=$(shell date +'%Y%m%d') V=$(VERSION)-$(DATE)-$(COMMITS)-$(SHA) all: get_icon set_version snapcraft set_version: cat snapcraft.yaml | sed 's/version: .*/version: $(V)/' > snapcraft-tmp.yaml mv snapcraft-tmp.yaml snapcraft.yaml get_icon: @if [ ! -e setup/gui/icon.svg ]; \ then \ echo copying icon.svg; \ mkdir -p setup/gui; \ cp ../mascot/forkstat.svg setup/gui/icon.svg; \ fi; clean: rm -rf setup *.snap snapcraft clean cat snapcraft.yaml | sed 's/version: .*/version: 0/' > snapcraft-tmp.yaml mv snapcraft-tmp.yaml snapcraft.yaml forkstat-0.02.02/COPYING0000644000175000017500000004325413234316063013216 0ustar kingking GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.