From e90b0906e739e7d3e0ec50ea1d90ece9d287cb57 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sat, 27 Aug 2005 14:52:22 +0000 Subject: [PATCH] removed some old files, small updates --- Changelog | 8 ++++++++ Makefile | 4 ++-- cui.cpp | 4 +++- hashtbl.h | 33 --------------------------------- hashtest | Bin 29028 -> 0 bytes nethogs.h | 2 +- 6 files changed, 14 insertions(+), 37 deletions(-) delete mode 100644 hashtbl.h delete mode 100755 hashtest diff --git a/Changelog b/Changelog index b641e64..3a5c2d9 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,13 @@ Changelog +27/08/05 (Arnout) +- giving all unknown connections their own + `unknown' process +- UDP support +- investigated memleak, turns out to be a problem in libc: + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=273051 + https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=103142 + 18/09/04 (Arnout) - also compile with gcc-3.4 diff --git a/Makefile b/Makefile index 964f81b..3946498 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,8 @@ man8 := $(DESTDIR)/share/man/man8/ all: nethogs -#CFLAGS=-g -Wall -CFLAGS=-O2 +CFLAGS=-g -Wall +#CFLAGS=-O2 OBJS=structs.o packet.o connection.o process.o refresh.o decpcap.o cui.o inode2prog.o GCC=g++ .PHONY: tgz diff --git a/cui.cpp b/cui.cpp index 064cd73..7b90f95 100644 --- a/cui.cpp +++ b/cui.cpp @@ -268,7 +268,9 @@ void do_refresh() uid_t uid = curproc->getVal()->getUid(); if (!ROBUST) { - assert (getpwuid(uid) != NULL); + struct passwd * pwuid = getpwuid(uid); + assert (pwuid != NULL); + free (pwuid); assert (curproc->getVal()->pid >= 0); assert (n < nproc); } diff --git a/hashtbl.h b/hashtbl.h deleted file mode 100644 index 835462d..0000000 --- a/hashtbl.h +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -class HashNode -{ -public: - ~HashNode(); - - char * key; - void * content; - HashNode * next; -}; - -class HashTable -{ -public: - HashTable(int n_size); - ~HashTable(); - - /* after calling 'add', the calling application - * must free the string */ - void add(char * key, void * content); - void * get(char * key); - -private: - int size; - HashNode ** table; - - HashNode * newHashNode(char * key, void * content, HashNode * next); - unsigned int HashString(const char * str); - - HashTable(); // We leave this unimplemented ;) -}; diff --git a/hashtest b/hashtest deleted file mode 100755 index 0a4a7fa7970e78919da67c5627e72b01ea328b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29028 zcmb<-^>JflWMqH=CI)5(5br@73x^2<1A|90M8o7%v_!O+0MA;`nP z0Ky>s3<3;b`$c#d7)0i93=AvgvT%U#4F(1V5C*vm zWCsXyFfuT3G_r7jumS@E0|oiue3t1IA6~Q;%)&3h~4gfp;W<47#J7?85kHOK^z7KkQ2as5SJT7K>aMrz`(%Iz`!8Rz`(%Hz`!5|^|uIAjRXS& z0|%6iOu@s00qRGnB*=b{d%2)|WQr4sBgDYKz{|kEz{9}60187sBsmyU3KV8@S-{o{ zGJO2642qvt77hyr1_qFReMSZbmNo<*6u%;EEF2(pAo&Oe28KPY5dA_7TnrkF3=Ar5 zEF7jx5dCqWG||Swu^Vb$8Uq7^OB)ME8zV%%f`Ne{q>Y7R3j+g#5(5Ln1O^6%lr|O) zS*ZGOMh1qGHWm(PC_j~vf#JqHhtGBPm8%!jB4nSYvrfniA-3&#wod1j0Z3>UgtI6&bq$iT;N zhk=1%OB)M^2h=~WKxu9s3x^IkZHO_vXJBAB(#FD33-uo>Qlx^?9z#xMQgKO2vbMHv zPG(ZFnVylZ5h&>yGsL?@`Z@Y~Iy0o^rR2oNy9Jr&7nc;JCgw84$LAEs$HTY*2$^^! zHJN#tB@FTLB^gEe<>)$`lNsXUQ&Njk(=&@pQj6l#iV|~E<1_Qp@)=4}i*hsb5=&C! z8^o3?J#HVHEWirIO`}jLK`o#OYxdpq1#D_RK`MAb2#K$LYz^xXWs_~MepqLTP{P>|$;!oUo~N`|m<6LWI%lNpLjijs2+ z7~(zsv^p_c;x|NjSh42BKg#&teye)1t8Bq#$^K4gFjvB0p5 z1MMsvFPi`V|No`)8(KIvh%+#BH@h$}Fti>hVfud|`sCrxZxf&Ztd^tMR$&ec2Scgd zYoUcQb67Zf16VpmL5yyO{};d_%@z!$Pj-Mxyw(FHyv;|xWT?zx;dt@z-~a!|SwWgX zY3StP2@vy69){36Kt)LFffAwSBR?`&=Cg1>bV>jJ{~t+h?>3O{diR4!us)IC<|ALS zI9@#d_y2$M5rNJForjOP{$^}G@*|5Y_{C2K1_rR`G1uP=ovwdgbHA|q_y0e{l!n^h z3?+QcN4^BVm-27UH=5UU}6Fr0g|`_l6U}u9Y zm4&1E$PbXq;rf&y`Z^B;fP|lbw1Nut7pMM09UAarKZ4l;VHzHIZTZ^#HS2`l5;X=S z_kD#(zh-!8^Z)<<*IZ!v7x{nx|9{Q!V#eS9|3T`zV_%#+3}W=|QAY}&?pTg)SDsGh z<|ALanL7{lvP=a@2E0&&nAv%t^H66n%W>B~AmMJ;Ki14etgn@O%NV*{|MZHqf<>KK zjg(gKFF@7aan~mx!EV?dv(*m6VEMSI6X8=cc=%3CDAQN7I@&Gigb;p9@ zx!aW|AovC6e-vX7LDelH5Y+7|5CBnD2UFG^`lpu%9QNJ8ES)S|;Gn}|?nX#j>^y*C zVrS?dP&z`SG>GXfFvZ|h_6DBHQhq}n7w}>wf++`KLgTNw_76iT)9WlGb3ulJxc}e= zNkg=B9te0LfM8zz1vb9<$PbVXP?!k>z1RQ|>^#tVpp*+F7QoVZ;Wa;)#nBo1=XIaq z0ce1N(=XKTyBp@Qa5US3$p0lg-OT?lG#~!cZ2iCVOEfg@I3URysvcJ6UlC$pnD8R~ z_y7OVCl7<#-Jtr+DY1ybEkB&+?V93eO&(6$CS4hh*Qpn3sNmXD- z%P-AK0kd@!vQsM+Y(Zr@C=r5j54663wO<)iGZ;GNvT!igaPY9ObTEPna2ZhBznz6c z6x4nMm1%q&txPPS8kU!p1=M(I=3oJ(aXkSRO$G)AJq8v~D_Ku~1yqLVA?j8}2AHV~ z44^g@sIqy`!NQRV>Qmq_7u3$y6M(1(RUST_EF5!isuy4Zwc%mvLG95Ooh%$qIMs82 z8;3CUD;O9Ubh=nLK$Q>+4)=ii0xL2VNTaN7jb<_A@2p!Pqgegg%$Mk5OcD9kgOSvWv_ zq8p7Y9H2f#10w?i$WBlp28socy`VHRVIB(yD8>pH7#Kit4GJev*!r}xaDdo0tt=d% zJ^)A`s2>MvDE#~XKVPO5?7n=EyFUE?pZ}r-9AqG4iN+wmffU1NP=5}@2jO3>EF4^I zEF4m8EF4;GEF4yCEF4~KEF4j7EF4*FEF4vBEF4{JEF81iSU6U-v2g5aW8pZ}25|$( zO$-d3j5_v^zEKJT0|O{Mfy7~Ka|Q+m8<0f|3=D1z3=9oWb}16OABhcWOTpCqMiRGR zMCffnVqZXFe?wv`Fd@{tA+fWO*sVzH1xW0JNbFxoY*}W6nT|;8Y$SFg5_>8V`!o{! z6Eg!t6EqwwSRibBbq0n8DEnI?1H(xuyCaa1;U1Ko^qqm>JCq$##mFGY3egKPN)w3< z;x7Ub3=9lTIK)BHFg4LoH8)ro82VX3eq05T24k3-C17z#(X|`QRs_pm0<%HAO$LVN zU^b{X%fRp#%vJ@f5oH6J39iZ+w83mcu(%VLZ3JdVf!W4jb|IJz>K!vMbb;BXVDUv@ zwi%ec8_WhZcNrKigV~l~@i$<$HJHuA4zkx4%vJ)k?Z9jcFxwu?_5-s)r7QzO3YhH( z7Ow`gK_wRh!(=eq87#gM%my`F85jBq3}*X***2UYHGyDu2$&rNW|x53!C-bbm>mLUF9Wk7<0pr}>@cwSEifBYdNMG4 z0<)vR;yhd+^FgBr3=Aq@b}Crh3d{yI=@}S8!0a5bcpjKt2xhl~*+pRXA}|}2a~T-+ zg4tzY@mpYaC7Asc%&r2ng}6cXf_m!=3|e3|BxgH=+09@zabR`}m|X>Cw}aV}!R#(D zdo4F4oijgTWH<+9vluckya20#gfmDXEUhl*0oe-~NjeHO+Ep$A!(_P zA0!T8uLH9o>ExCGNE{Ns?*u_?NIY^2f!L7nuNDTeV?fq3Oc4RGL0u*WhD~60A6Ohj zz}$w+hUL5aEDQ{%!RjSIMJGrJ15Et`5s2U0^BEXm>cI*a7~pEYLe-#)^NWJq;|&vr zs}B|jiGxPm7#RE|Kx{~!4VQ%2mG_^K0cI~qGsxaUAO;k}+=eWkBMCAG52%_ z!E7I}&M#m#B;3@cKN%q#lw!17tw#POx}~9EiOH z%obJvvDbpx{E7%RNC4($EwDJGJjqZ7sR7kc3=EB6Hl#e61!hCalPzGj703uMhM99t z84^~e91ILhDj;(p`5L4MrbZDg4k=5mz--XS8UurXDoFh?kWz*cFxw6s@AEZ4;t^o> zVK6%p%zgo8XM)+>njkefU^d7Am|ZaUSh6xO=!4bl0ZD@~OpO~@+zTug2WCU!s0_>o z4FxbT^n=-u@@F}i4Jm*2gV~V0`2)=E0h<${1#%C#x4}>gW^-b=Z33vwZh;I8l{%oXf`l!y8f5kiU5MNMH8U_Qg0hQ$L-Ib{kGddpAo=2e9*CUw@i?0cJz$@wH$!q@FztW<%=Dn_xDieEtAtL&^aTLy&tQ^_?7;9S%0r1k8p^hIoP5 zkh&=z%+3X?DF?HQ!R&r8y9CT$4rW8@oxO&Ta9Ak7z;F>P4yl))gW1sVHv+ib_yl^IAJl9r}|*^n}MEtm}{ua236)Iib4o@L8O(;1!xq*EdqIZ6+=|x&gNSo8KzzW!;KIPm0BJ#k*nA9-Rw{_i&j9KNp0j0OaA05q&sl=>f^r4O z%saLqH*+)mfsQAG#9?MWU|?W?w4@jqklCP;3p8Hw1ne&%2GDo}#9u;Sf3ezu{3ryT zrvusL!XSj?FVL(SNEGBYVI+Tvz~>rW7{nMLB_&9WID-~MIfDy>Bm*Rcg2bg5AT0$D zTZRGBlK`>hko+#s5DV9_BNug8?+w1BnX_a9qp- z$AtzsE>=O=pz)2}P&Q~B1Z0j2g9cI@X&}XmCK6kV0W=Nnq@^n%hG$nPLF$X_7!AU4QsPz`ns>@Oqmm=wfcMo9iL zLh_dpc)l8>*M-3d$uCAo?l(qan=-&kRu={{22cwN;!Y#5J3oQlX^hjIAoU=-K<)(f z_Wpw1X~_T@3xl}R63LyGV0VJlyD(THxy=&EJyu9;Yw*}0M7<3Iq_+nOPdlVEY0m(u z@j&8^3^zfFL37az&J2&?Y*z+YDeJ=E#_)-OfdS%2ORyg$>_KVR3a1}I>On?<{0JJ~ z1F=D6Ni}HxIU}(+qa-OuFS($AK|douH&s8eC@;UXBsEXJpfo8bGdVt^BsWJtGbJ^# zSU)edBqKk)Sf3$1IoT*aIX|}`Gbc4gk0CR!#HvKYK*vziwg^mF8yFZFz=5@afuT7Z zSTiJNBo=|y8$r|?X<8dt8ycBgGvwswr7OTpGls|-YT`GoG_N=_Jufu{uFnKXAKVQF z2G#}!#&Ac#?84A&N`ht-*P0U|Jg>Y)4{2JqE}9oK$d%FhoSU z1xN}UEXeYR$Tc(qDF7wHoYV@qmkmudZHq06QWJBmz$sD3K*!j~Ix{yh9m+R00tr|% zz%(K`3l@cDP!D(cq zX{!Y?)mYOu4ICZ}`lZE1;1xyb$;qI#9r~HZ7G{vOMfyg1mZo|p`g(c@l$n>DQ<{>h zpRTQ~YpkCMTkAm;Q}i+@a}8wONm6MV%pjO!b25`M^U($4-Q$z<^U^ZY(It{HON#YD zK~{_|la`uTQd*RXAzoZrte>2cnuZ~fo>!`0TvD0@mjEr@!X3~s_ZF9=q@;p;QJh(o z3XXO|aAB%ppko3`4yEy+^k7w@VFoHuu(%O8^;klLAtk7pjxkseY6K{S zf|Z(pMNJ_}3riDIz&4ucn1aR4LE=cFW?)e>kZ5LJi3L=xIat&XoLEbd#4RA=VCQA# zl^B{q)mwtaEkLG#l*7eA<%x!Y4%pq9c_qe1Q1ym}U=3h%KpGGd5RZcWl$lpzW&+ay z@hjM!APoo!h<730N=!*9f@uJG*G$LI43tC6bif)@Qp;enAP<6qgdsk@G!qs=h9K{O zf|VgYJ{=(n@*Gq&GcO-%0ysaLLE4qUbz8Id8%yf((Q3wvpqMXcJnAs37f8l=@=Vo+9tx90M>@qprop)W1wSZVjUl!SZrkl z^16|xtulx<(9{7@#+tTjAR5Xwfy9R~lxvD43oae4tw1Kl#~bU#8w5FnNNXcUJ!`#q z1BmHnsHU4hEP+y{nmVA;&_EMp3P>-)1dtQVaq5Lz4blX*&>FN>4JkbtgF+1&`pL-R zkbpBW0Qt*6#|RXaC7HRf^k4!>=-?PGEly3&&r2zWMvw_8NkB`0VstsAgi&0clmkmf zCZLpIpaV88IVV3EE)Gc>2yu7}njobPkh@^{!vvH(p#I5Dt%SJ=$(NZ0$?=HPX9Dsk zG$$wJWFw_NQ%KDQwmT^&J2|feYM3dK-yst4G-wL)J2Zu-6+s|?m{3d#fc zbc3t_WnidkYb&skpsbcylAoKI91l;@hK3;bgUc6&cxW)hrzIAbfK-4zXsBZZDVvH* z5=%;pK^`*(l|{xz*75Ph1(|tZl^S4!bRexln1>BPH7Cf)hB_vo^2ZQl7TCk)71G!dSMc`qfkI2qJ&GBnfyB|k$$9ZPV48tQT7p~e@t{Ss5J@XgU>U-ixdxg# zMn+JVfb}DrY-9>`2)H5w#k(;iVH)Zf!lK#GP!k-_X6S(iiDvYWgxGEhHwG5Zc#Q$O z7#`7vNHGnIXmC7%TK^zNLZjNyP?G^B52_`=r2|ObQq#8B&?r70k~zRGG6F>*xXw+E zFHg)Y$;?X!i(4S#2^I#RW(qjL8Cq)UfLsP@ps0ZuZ~<`OLTrMlfD{6TI$#y>nlZ5$ zTqzrZt5id9c#HZqBi&y6oiElw>eOHF}hMQE7i#wX{O=E3qO ztbE9g&o9qQEkaLpx$)VVc`yTD#X>H)PzNhD($oPJ4B(Utiwt8>?gIJJ7}SOXx!4RE z8E^q}XekI6fJGNr03Hy~$S?*+hA}uu^x}=7kzomH`hiS`*49CfH7pK`@OV8tw*Ty?BVth{ynkH*yLEH3>l}6fA)hV9*eU1q`Tp2)5D05aLu5 zSiXb{fZNiBhB|NoaBCVS0CyBLU`)UPV*(8r6G*^-nun;iKm*7GMx(c>k&FQc3@kIj z9Rbq_qTy~Z){BSOj0l+gyktl#8RTG4DF|+j!jdVpc!V}PO*I+HGocMjLt|*uz(f-= zz5r`7fk#!)`}p8y5={1UzPA zr2)1ZGUfypNdl`dM(!0EgL*~a5*pkRfkdYXsG*?@F--?VL1GGIIG78mSm0c9a29}Y z;Xw$B#y}%uy?9e&y?C=AX9OD>rDmWgH3799kZl5&U?w_H3MI87Oh7jc^ls^a;!1RG=xC=nGgYC6uh4 zm<%|PKsa!hK*Pcu>s1J1w@TTFEz z8bBo6Mq|Brh&^z>L%T_)prlr82x?0~d~a$2ZJY2NbSwv%nUBlA0+bJ-`hy){93n z02FB877WBHuruIVQS^YVvqmj;(v$P^%D{avFe^SS8C-UmgVKhEp*bkBwLmmtj5a>wKX&cbt=Hh&EP}2Fy*OvDG1e|j;o z0S$5nC<}tMfLhhiL1UN=5G~31c_pb8B}iI9jR-??a5EaB)f8eKxI2q%TVZKxQ6-W_ zP`4YT5mJSl>wresu-b_l6o#NKHYn)8qbeYVAr1>s!UQxN4)UUrF}THG4(h*y$Hg&& z1++mA+)*;u0ku7gjSS-BA-)GiAIK0x15jcHm*Efzd041P2GW6$)x`f*J|%-e_7;er`NOo0*P@fu;^Da7*%0gh8!Nurct+)kJhe z;YknVZ4*r$cqbG&I?a)Kp1GNM@p-AKAWwiC0BtbCyPvs<71*RLpgm$F-6i=@y~ak+ zRtJ(^grq5=Q(TgoRtlT>GPZ#Bgh3GxZeN3vmx&=tFW6iM+`tCMx-q0>Z4Mg71t%aQ zSd@UG6D8?@1R#mV7@qz>BcPDzgm$7aw1WcB7@o+CEs(}IkkU;&*u9`JDsxbr*@6ct z@=HsSO4Gpk0n|PQO==k;Mk*k(si3}vp*gs@3+subV@?7=~T5dmOPNGyQHeIdEg1Tx4*$RJQufZO&E+f6Z} z0<`ZMnuS4Q!JuYv9w^$2VIwurBncBU*DkkdshC0VDtk0MJ-6Bmh7|$KYgWf=fHdY*XmikGYPi5vJdv z6|^a=$_0(uyT@mODsphoz*Gk`&s=I^5+9$O0*+o2b5Lynj`QUF+@#DrP)FGmJiSzm zT^S;TAc0|IVF3#cQyoK4t^zeXK+S1WaJ2|(1Q|lP;Nb_b>7Zr^XbcA~3vZ5q+ChOv zCVKIPh9JTS)Px5yAUtp|>cty^1|v+tvr?dj5yE_sx!~~~Q_z$&(yR%7BQ;EQK$R>G zv*2z+HU#VvYfv$73L2ROXAM&wP!$a}1=Kb*1y|HyFG9KCL=KJxkV8RZI&fLIC7=KR zdpO7$Oo1%|1qZk-2(C9lAq+PWY!Z|Q3TL=MVBJWDfIMjd8ZSUN0ICf{p=twL3T_x9 zrbA7^HLZq$4ro5qJsvUdX{rONRiT60?(v{`Oz2FhDX2^atq%arltN^nQ=+EeY7{b4 z44xn$ddfMm2s9NQAD^CAnjBx27@w0_3`+M#kdbxJfFCH?d-{XNXTZrG)CmGP0^D5k z^pDR?EXqzT0u>UVULbfF64Gih0d-omG(e)Dh&8f~F9w(1;BGER+*H%Hq8M~sf}5w0 zs}-yk2X~TCDsXUW0QD_FGYBT2u811gRB#b#05SmL25>MVxK>sgkbbVR2FNMcRBM=k zM$eUD3cv<{CK{6SQ&N-5Nh)1rdASJ7(e>`Y%2ehIC)O7?k zU!b)bOa@%xK^ivD@pqU^Qetr`OcS(L^Yo7|FUl-QjYpP)Rcmm`f|4SbKG;Y+Tn@=P zPz497OFjMLlS3!Kyz`|M=p>GE|2cL7P7yU5Uxrr3ENv!rDJDok)fn zn?hPYkaSQCig-}F8`}0s&PdG61Bsbv>cCn)X_+~xd9aq1i3z0H1)Z{l*7hbAkSNH{ zNr}%-O9M|pn1RY99aBSyb;+eg@yYo)rMY<^EtZ-(rY0sjhGy3BWhIG8IjL}62B0Ah z9aA#{9SiGt@Nx}kMgVoQ5L4v_&_N+nGYgPH$kdbxs8ebS$}WbQI;Q53b{oPupx(5Z zfdyo8y&y5g5Z=Z!Glw`bz92Eh2rg=F0BH|`RwIBMZK$bZZVWNBG!JxOi4iEEKz(F{ zyG+4z_(qyK=4KY40EE?0Cg8pvIQM{RLQtjzH6enWEkKzNl)Awg3dRBFN6=CWunrS& zwT_}v!vs?0fwCh=8mt?X9W(PGnIJ9C3Y1$w{X>viaCa8Gw1FW$J~JPhvZ0DV^&zN~ z0QU)z6cwkYX2-+SfM!)qKv4?r0D?QJnfdX_Ir+t@a5bRn-vr$MgZ4?0N=fkisRp>P z1Rd*=nwXoPmS$C=0U3NW(=oNsgo=YoHIO*SMr3jD+!ROx)O&_GGcC6SQWAh9K=vEx zKqiax!3|Ha1)zy+1JFVr8TQ8kaKBNh~O^vd}3hD$Pr_ zGBnf4%TF#!1<4p2>Ez`Xr55BQCZ}4Nndl^ebQ)QJ=)|H*D^Q7I%>WMSluXcUr7>s> zA~h*B-O4~GxwOd2PzRKIjX(tJ}4$z2#5vZcj(l7$q4ANl<8YVIVui z1lb23Z#2>Yxmd@&bMliDbFj&R&l=MwWUvvkR^r+n;N_O!!7xyLm|9d44_cQN z4_#szQleoDj`UK{s38^=@tIa26-LN?3h;os38?uET968=nDffe4339PI)N2gn!yS& zP;CmHx;2I-DzM$4#)6R{R%5`W5>^>2u(Loz#mXS}fk$kJF%6^`)YOOSf{&xXmSsa% zNWx;exFjVfGf6LlAte*CQq36LBrCQkEX{|_!GUY8qSRby5fAbtyj^V!YLVG0Yk;-s zfGF^s5rPXISV3^X1I$n^yj=@xSDQkb#IW&pL(qV`F{G^qG8r_iY7A=df$af}7#o9H zJ4js#P`eu05RfiVV1Q^$-EjNC+Q3m^&5(l>5Eh{290~+rGo?wG#OyaGePbL zt)nsnwHX*-3o${WphZ+>pmhlhpt=p*X8{RAYF;BlO$Nl0OOQCkZ$?I%46rqxAW?|t z3@tPnU@I;`qM%9_+yrERt$729LOf?=s>uLdPzMqO4ZWLz`gjb8Wtbpw&>SYDo=*X< zYXS8xK;od9&kQtr!hl#fXlw@RcY^}d*iw@LHenAEh4|6L0&Q{=w02J~g8@WA{A~`N zUoZoWhB1Jb0>WGfo^jAH(=jpA1S^NETQfEX)vq97b4`X)P@xQoYEXAx1KbEH1vg)z zqM)Dyul56VQlVm?fCDcjfG-FJxfc|0;8rkbn+UW!3lawf9k>gO=>LL*L4gPA0)kXS z=aE3dps+Ilt(>EM;93B|1y^neE_f~)%7qt5uyWBHQZ7Q~2le6&K@*WCpjMtOvIU^g z786hd7Hl2L6f~%0LpB8D9!t>J3)Du0Hjp83`@!0v1!6Hc?7*4A1TwY()(cMi#RaL! z;PDG+Jz7#0U!0l@?g7I_mrKgx^T1-DWwo%83dmw+6G(NctYHEgWw2EP(U7rk3s61; z84h*>j05ThfoeqXU7a8BQ+$h1!!^* zY=sU;6x?}$a^dL2Ba1sSM6Kn>kjbQ>>wF%~d)_1{80;N=B zQ$SXN+8)RbMAD9`4;&-bpnyRH7iiiRWQZ|Z1pzL6DvNUylZ)~}JrATs)u2%TP~mN+ zV``|$09#ZI&M_bbNf~=c{OMwb;GaXY?O@^Yxyp;T0$dm-A8E*m}A}=PA!18exYMnpqV;kyI{jtkZcTc8>rn0X%~ZMQ9(kWY!~EgXb7?h>N9Y7 zBk@7aeiKl81C$Lwjcf3HG#|8(8X>zD>;Yr}NT`4Y<)PjL&+g;X4)z{sNF8DwXyOKJ zDq4XDK5RD;+I!3`NGys^gRGJVnGI?Q7@L4c(829?P(2SFwn3@2K?n4LHiv-*sXzsc zCAgggDvcT9;}L?OHX~RNzL>|v5>$VJrVP+>7O42q2OA6R4|^mQXZYo(q=IS|V{rXk zY-p67S_v+9Vao=<%LPCyCm|#4(DV-(KQ{)~-C7!8&G6Z5NY4dai-Q6dTu-Y()PRa< z3z)Uwpo4KhkzouPEP-f&L?DV%kO`0y8f-1Rga(-q0vgPOdcz#lzXA_h=^H>YBDkvw z9`Cf$Hvky}E;_-cK)nN9QEzMvYQ{rc09t1Pb~PxLgPbkl*1(+&vD6A=Ah;w{2D88; zGsea`*tCHafcjc6rPfxNVB-=~QXl~U8pu&rhV``qk^{=X^69B1PAci(kn_NC32_ffK!J=2K!l}%qnhj1aB{r#*(mloWK+!F~nJTV;UrAt*i=(o;)Nm07vL3{NgC zDoV{Oi3goK3XVr3O$G*cXJ;z~4R^m#O$EqKSp_2l14Bat10w|um(--p#5{$9qST_) zoYchP)KT?%Ciue#bS@|8ECSHsFb0Nt2B0%R21<-UuedU|Br%CWuehWLLTA8O;ME`n z40?I_C8>IjPM*3YiRlb_pbuhIT~frLm!4OuSC(2-oSC18!ig_p&?`#K z0jY;D3UW#q^gz`ygC1xt9fKbD1be-re9*E020aLwngKZjpFuA@IXOPHB0067BpzJe zf^AI9%}i#{OD@STDrV42fl%rBB@B8=#l;|xK)jQfR19)ia(-@ZYF-J%8=zn(3WE-M z2E`BPKpxQD7@*^zL1(JMG=tOgl`fbO$^oNx(}h1^#GVu9kAl>u}r zJp%*i+*i=O3>!da&VnSNH0VrN&?!EkvtL2xfzE@y!N|Zcfe~_F1jtU18qoPCpmS9~ zXTpNifzFT30G$mAQUEm%#&idrEC2t0K1dzt+}9T@3=E*tGC}5ml!C-T7vNi2}~YDgVHkSls%X_(D}4JtPBjG zb8A8JApe1AkUG%WARzNW=ih?P$KAuqzyLW-4CFdQ_<{7o)IDis;dsKzzyLm*8=?$+ zp9#p!YUm9DAoD}lbLH<3{ z&BAepn}Gpxnj=UR!hN9gXF=*faRRyv1#~Y8%r1~hn0cU6?qKRv=CE+6@Gvl>fCNB_ zpy>d_oDX#$$UM+l&KOg1mg6>-ZooNh;H<&t5IPXF-uVEew zM*|<~9VamJKqriWoC7kiV;&1f2M%>7kjw*}OFV&(fdO)IBgj@rxPZ(&3%yGPWFF{9 z`5Szo^IjloKqSa*Ao>#2JP;d%LFy`m7#Kk3ON00zvq0xef&2zC3nT`@0g4O^ptFNP zY!C*y9YjAwGp{Crfgu1Ui6jR)(F>G+L3%*=Od5B-Hc= zGa5vL(h5iq2>(cDU=UzqU;y2p0?M->e}K{jC~qK}$C1at5Q8KDG6$p|8wQm}AaTeI zK#==$Abg0;pz;O6hZqPdM<9HV?Fi z>0w|1V3?-zpbL8o6cFo4oGgbyjPLFpL6hnyA#O0N(;-@{s*ZyK++E?+hss^UVzg$Klm&w znEx3WL>NG)4uh_>0GYtZz|R0WDGsI|WIpIVAXs=aG6;ar6KjB)50VF+;RU+z0u&OA z3}OtR(`h@919{|AE2}RQ`jlW8h)<4`F~wSoj`* z`Uez0JdB9+2fA%a0d&6-G`vAIA?RKgux4;s{_#I3AA`@E0t@mmfYdi2skdQdV32_F z8JYMQJQ*S9pM%b)1D!wzx^D?ou7k9L?mtRkWMBZ@s{lGX4wTwK_ah-_%qz^XD)zFu=+KQ21_QLcMQlI}-x~=uA4$S#BWv z?=qp@KlP3Y_5P{9OsMxyaWf;_Bf!AVAi)grAL#A`K?X4f(0TBn%Va<&T!T(pHD+c2 zpGOEf6AxscFQf+$5Lt3!P7czgO$^CJCB-GBX=!@N3v$hvOGRM1#Tg@ z1rN0ltj5*PB_4Ef71*^f4#XW09;owCl3H8>KDI4B-ZjG6H6X;(-w%4{6-X~cIn3E$ z4bWrW;^R|_^P&4N7?3-_nRqVug4}TB;DETIDn6|sKBFA76AildipYDwAh&0s7)t5Q zVBpKTunho!7Gve4=Al}a1iya^d_7luJm|7B(2}a6l6a5^s_GmhZ-r(ufcj_