From 1795f0287bb8182a25e426ea30c726d09e5dc07f Mon Sep 17 00:00:00 2001 From: NyxiumYuuki Date: Sat, 7 Dec 2019 20:24:56 +0100 Subject: [PATCH] Add file organization --- Yûki/arbre_de_codage/liste.c | 56 +++++++++++++++++ Yûki/arbre_de_codage/liste.h | 20 ++++++ .../{main.c => main_compress.c} | 8 +-- Yûki/gestion_des_fichiers/bit_a_bit.c | 18 ++++-- Yûki/gestion_des_fichiers/bit_a_bit.exe | Bin 44048 -> 44676 bytes Yûki/gestion_des_fichiers/bit_a_bit.o | Bin 1304 -> 1727 bytes Yûki/gestion_des_fichiers/gestion_fichiers.c | 4 ++ Yûki/gestion_des_fichiers/gestion_fichiers.h | 3 + travaux_a_faire_projet_c.txt | 57 +++++++++++++----- 9 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 Yûki/arbre_de_codage/liste.c create mode 100644 Yûki/arbre_de_codage/liste.h rename Yûki/arbre_de_codage/{main.c => main_compress.c} (62%) create mode 100644 Yûki/gestion_des_fichiers/gestion_fichiers.c create mode 100644 Yûki/gestion_des_fichiers/gestion_fichiers.h diff --git a/Yûki/arbre_de_codage/liste.c b/Yûki/arbre_de_codage/liste.c new file mode 100644 index 0000000..8527bd2 --- /dev/null +++ b/Yûki/arbre_de_codage/liste.c @@ -0,0 +1,56 @@ +#include +#include +#include "liste.h" + +Freq creer_liste_vide(){ + return NULL; +} + +int est_liste_vide(Freq l){ + return(l==NULL); +} + +Freq ajouter(int nb, char lettre, Freq l){ + Occ * tmp; + tmp=malloc(sizeof(Occ)); + tmp->nb=nb; + tmp->lettre=lettre; + tmp->suiv=l; + return tmp; +} + +char tete(Freq l){ + assert(!est_liste_vide(l)); + return(l->lettre); +} + +Freq queue(Freq l){ + assert(!est_liste_vide(l)); + return(l->suiv); +} + +void liberer_liste(Freq l){ + if(!est_liste_vide(l)){ + liberer_liste(queue(l)); + free(l); + } +} + +Freq liberer_maillon(Freq l){ + assert(!est_liste_vide(l)); + Occ * tmp = l->suiv; + free(l); + return tmp; +} + +int rechercher(char lettre,Freq l){ + if(est_liste_vide(l)){ + return 0; + } + else if(lettre==tete(l)){ + return 1; + } + else{ + return rechercher(lettre,queue(l)); + } +} \ No newline at end of file diff --git a/Yûki/arbre_de_codage/liste.h b/Yûki/arbre_de_codage/liste.h new file mode 100644 index 0000000..511087d --- /dev/null +++ b/Yûki/arbre_de_codage/liste.h @@ -0,0 +1,20 @@ +#ifndef __LISTE_OCCURENCE__ +#define __LISTE_OCCURENCE__ +struct zoccurence{ + int nb; + char lettre; + struct zoccurence *suiv; +}; +typedef struct zoccurence Occ; +typedef struct zoccurence * Freq; + +Freq creer_liste_vide(); +int est_liste_vide(Freq l); +Freq ajouter(int nb, char lettre, Freq l); +int tete(Freq l); +Freq queue(Freq l); +void liberer_liste(Freq l); +Freq liberer_maillon(Freq l); +int rechercher(char lettre, Freq l); + +#endif \ No newline at end of file diff --git a/Yûki/arbre_de_codage/main.c b/Yûki/arbre_de_codage/main_compress.c similarity index 62% rename from Yûki/arbre_de_codage/main.c rename to Yûki/arbre_de_codage/main_compress.c index 7148bf4..e2a3885 100644 --- a/Yûki/arbre_de_codage/main.c +++ b/Yûki/arbre_de_codage/main_compress.c @@ -1,15 +1,9 @@ #include #include "arbre_binaire.h" -struct zoccurence{ - int nb; - char lettre; -}; -typedef struct zoccurence occ; -typedef struct zoccurence * freq; - int main () { + freq Test[5]={{7,'a'},{1,'c'},{3,'g'},{1,'t'},{1,'END'}}; } /* diff --git a/Yûki/gestion_des_fichiers/bit_a_bit.c b/Yûki/gestion_des_fichiers/bit_a_bit.c index 8346047..2a9cb70 100644 --- a/Yûki/gestion_des_fichiers/bit_a_bit.c +++ b/Yûki/gestion_des_fichiers/bit_a_bit.c @@ -7,14 +7,21 @@ void binaire(unsigned int n, char s[]); int main(int argc, char **argv){ FILE *file; char buffer; - int cursor,c; + int cursor,c,i; file=fopen("text.txt","rb"); + char text_b[5][BIN_MAX+1]; + i=0; // EOF : End Of File while((c=fgetc(file))!=EOF){ char sb[BIN_MAX+1]; - binaire(32,sb); + binaire(c,sb); printf("%s\n",sb); } + for(i=0;i<5;i++){ + for(int j=0;j=BIN_MAX); s[BIN_MAX]= '\0'; @@ -37,4 +43,8 @@ void binaire(unsigned int n, char s[]){ i++; } } -} + int k; + for(k=BIN_MAX-i-1;k>=0;k--){ + s[k]= '0'; + } +} \ No newline at end of file diff --git a/Yûki/gestion_des_fichiers/bit_a_bit.exe b/Yûki/gestion_des_fichiers/bit_a_bit.exe index c573037055f48f8ddc125c4deb232539d43fd630..05e56fde655db2dba0a8f469d91bd0f9d1708031 100644 GIT binary patch delta 8672 zcmc(je_WKszQ<=C7Fb1LK~R$4>;lTKRs$kMT=^xL85tTWxuAk!s2p693SD#oSrJ9Q z9kW~cvaFSW?YQZrIg%TiK1dHdnvl%3Wi8KsryO6~c~{^Zg7$GPW^duLzYnR(vx zo$q|-JM+x*Jll3&YWPxWYaYAwyUP!=I>v5r#`>5y_u*0`(=x_pZFw=xV^}cX^7(ja zrx(5HF^P0M*t2*oW7oGth0v_k%Hf)1D5@Y@+Q1XWr=T_@>6o@Vxq5M_p_H+D1sVz< zUXV1pz{mPtABJiPWH=;)yreAOouaiKqJ-qpTq%xTmPS#V6vPYY6)BF-rc=lZ>1VX$ zdIZu0k3jwy<$1)>?>+o!jmH@N1a0#;A*Cf!iQ-P_*93Y7MNa~qQA`YJOJK}&o!5ML zJV&FzblGu*Mhs+Gl|T`mQND#}2LfT1J{8UK43**&sM2$+C|UiD1K*)GiV zD=dB9jJ=@L>6lrev1B6(mIavP3z1bi*4SM$!=i&;OV9|Rpt5-QqSM6z%RQL1B{_kD zy`pAbjc3dpsew!uHoR-eRtc+bLc?azY-3u%o|m%%!OZd0=#@3P5lyC^ zjH7L){!mOrOwk(DLtlDD7<*vd^6YO`YwNyPF~L?tEVIU319gJOaD5TiZLT!O{LS14 zO#LbmlLB-v6z2OCjopSC2QnYEMA+f3N=#eCbrdwkr0iU2J|^J!VGcSxo*KNfyst;; z*x`XF`p7%oxO=?K>ib9A+AttuWa=-mWFfYqV-EUZtm!B$o#PO$98Dp(T023jMH#2n zY9}1a(Ig1vLj;Q2=W$S*HW139-cuJs@wTKdPWsB^2cxlQlZJI!U#=tT(z99 zqBQ^6{6jMPhw(3Hw||sZ@N6`GN~ipT`4#%sKc0`GfPe-35dAJ7Ct_8Y7*mCN);3vl zu|_FYEfhh8T`ipph>NW+)UhOynXY@U>6>GVR$@z#o%r}|#(B&R)>G7|I9^Y8kGlIF z(Nf)M>PfWOY&_%F*bbE!8i38meWo;{^lSVEs3mA4>IX%3=^-m(jx(Xn^be(Brg^4D z0SC6zm!k~c!rs~&^;8r%A(j-bQ%ASc7`_bZ4?)l%X?^9SSgRC(_t~Zi+&30 z;b-YU_&t1ohgZaWMb!L}I0&xc7>aJ0qij552ti?qy>7L(tnM>sXeUMK(JN&{Gvn-^^nsR=FUewG|9fPBWk>&x*13z1>$GwhijakoAsW~Qv zAEUQpv}4}Ed41PkYA(0rDKWK3Q;!N!z4R(6V(;*291cH@iUm7QS+Vi_Gg=m_MZP08 zf`3nkW0SCl`ePG$UB_*4_i~;`OUC_xXV*jH-^Md*OnhbTB~M|%vQ!korW+mxjb#Dq zYtwyjbmQWFT$s`&Lx*KLYRB1Vcz^j7%Ou-{Brcw@B+-fZWWI@hiLdk-CiJfd7|vMM z)AEEOMDTdRQ64}oiLc}zh5m%^jx*71ZBHTwFk5UJq_q=-S$3h}I1}-?yrK0mW+8{Z z81qsMc857pGvPZ+3O$}w#MN{rNfWvQD)#4rpE&V%!{&r;+g)b)ngWtjM$U37)Tk^k z(gVp4@L9Aw`H7^nuxX!-sV8v$0-XG^WR20Sv+tG+l$3e<#`_0s4<>6&zoYDPl;<5~ zucQ3XQJ!#=-H!5*qul2xcT$LUbJ}Z;t9Dyi-e&(@O8CUNZ*6X2?pB5aMkG=1@Sk~+ z2V!dMSJ9$lEE27b77O2+QX09W!thAV!s3T+JX%q_q->?3V#RX(;BBDCmJu!uc2Q?Wo>cf2{gx3grN2e-Qzl8pZ&CS_Jn5yk=ucBJCB*@{GG&HT zdw?cohD+@SXkKQyq&-MSGM7tzhiKx|iBjU*R6aFR3hky>rp}ely-U9VYLC!FU7D1C zgqG^^q>>}FR~Iie9H9%kOsVGs3ZIrN8BWryY4fDolk|sad7hD{t=6-2S5^qAvNY16 z)0CDqOA76!rmVSA&&PBjD_R=(n567@Dew#>XD3TJXJ|q8SgGg?J&`@zGw__%>PbIj zhh+6MB1&r++fy$>WKUm!wSyh1cM`^Gn;6>%RseCPjbQofwnU9K7OrEg64C(K3fTeK z1L=mGg7iTKAPN&>qahO^Ga&OIwU8#rc8EyrDEB(*hf$t_T!37G3_^Sx7z>6(LlPnB z4a~@LP?-rSf-HnoLTVxPkPVQhAUhzhK>h^jgmgnbfczQK2l+eXN5~*Vi4X)pLLspb zEhGaXQa;MXj=Fu~#{ajO+b3>>$N$$e?`1hZPBkF;&JDR}cJ zWqCzq8J1@`@w(}O`JRk%7HNB!V()-^d(n)#v7VU{j8f^EAX-y5o6n(->u!^j9@Jl# z7+MQ04~RVd1D6F}v~zW|graD5G=GksTpi)%!Lfyg**J=x)mdJ_Aicvu#%|Fn;uCPC z@^N~h*Xx&+RxD>FE|P30t2MwjdK9iHkIxjHU5&zp`$4MkxVKNksb23x7uWopu>g&I zu129=C)DxY<(~EPAS!&--eh0|jjqoM-YXjMNi1*d^`)x%JRVH@>(#LX{-RmLB)LNT zN1(a0*~|X-fQzKglxXMXC@F0*ZC)EnQ`dUOT)(AP!!5n?$y%@G`RJpL!m+@9vof}X zmzO>&7VxI@5uIJD=Kn>%Ape#^*2Vd-0Eb^Zo~CWOjmp>M@T>I4b!thHsCQj7A4yl& z#qlr-F{!1*0MePt`A4+dB&?i7ewDsQ{wu$0NM3pdS~&YYL*JYyFec zGH{6%axZgg1`NnZn%1d9_cn##t+k>_%|odbc>ukMTuGlasii>${dZF||B=GhKg$11 z=Jjg+0lkjAn?6R~Nk6UM%%7shW_9ca#mz(1-%L^mIGt)vnNfLjL)yYyNYTwCwGVTZ z&tay57MP<#Q_tVhlJ4wH<2Q%!XnNVK#x3wZa$m~btd_2LP{4-hJ1<~)kk6xt7B!zi*~ll-66B+)1-XLWKt4cc zk@wLr$WKwoMiJ<#$oJ49QbRscQ9co~o1R%hrgn!`K)n@V$k2+4eePAAvCZ$A~>krJF|6eXG5t>q)rfqG{fy zd>@xGzRf@06y)`lO`T3`3ild7H87d_H$}rQzs+jeY7XFu^c|u;NEMsK@nEfwHl`Ha z>|<&Hddk+}&W*UV6L`aZMSG>Am&Ek?MP;=W2Bu9KdLIR0 zmM9$$lIf^A_m7wgp1UC3E<=JW1?hJUFUS+Z0Fvlo?_~zrBkQ#tB-9p2p`$OaE)!>A zpHb$~ZYVt`Gu;hxQASRK=wzlp2N6#P5h45VKY&!pbX1t8b4S{B;y`9fc(rkN%K@sA z8JZ6wk`iL?wiIN$OveaP>sTPW4uLegboBbN>gwey*f^O(ozUq^!ujhy4Nn8fm*Z=Y z0Xn!P!Z?7MNch}yIHJUnCI0z#lPE!0jgTkO z8&5@yx`f6^nSr0^uTKRT&&!4xj@#{;YzDy~;tvlISrka)K*phTlgS{A>4rpf21u~X zxk8~Mi}6yBTBA(q37{&OLk%DXmqYqxWy=;-JZx$m;`Ai=VD{Y~h|$W@RoS9H+I6!@c6=(z2S0omx@64hn4aob&vh+e5i zD5+$ovq8kaI__=zFi01OIH#eC^g9swsoex3Uf12deh*UY8ea6;1!9po{rYe^vpw3l z9}OpDs>eX;T|{5Lq|AVb4Y+*QudGA>Gi%LdB_(a3a)K$NoK7lVX7B{OXXvVX!x;^7!< zdpN!b2BjepIRGM(JG3W3(q+a!195Iz`_#SxQOTVAUf6Mb&f0Yb1wnFeWq;#HY)4oU zi(*$&gM27+djg0^Zins#c|@jDa*Iwai1T9)FP%6_DsfyiCk}lJZXSsp(jzmp1KqS3 z%pLwtF<8>jZtsD}Z@`Nn^)j77kXo7LAYVL)T|}=hUAeNX+Gt3ZbxVNKI9aGOK;#ix z0MY~h++j3;h)1M5imf1Gf!sT7JBa-LXa~8yRu+)GKqW38MbLXeMz|chK=(d>W!SRE eZLbJbk9XX)W3SgpeZ{gWz4J4px92ArQ4+qZS8xakOT7)M=GD9w+5ozPm5YjpV;i0IMgYpqa zK%u8=+Gyd7W6so?L2;DE>SB^&IYv%bowSDOYM#O z?7iRLe)hAU{p^qPzBGR(b)A#C+9EHXx$+D49AnoxVWDUlaa1M(u;BPG&rq)_@?n!-!y zI#?}fd=j~t3Vaf2u1_d6_)OvTwAE)wQl-*z#a+^$Q)oMims04oVrJCx6vmov@Vb-7 z^Ysc$mK|5<#W1$}Qz%9m8>~k=5D2sNhES0*TKX}WOv*^<^JHpMYB{6dDpT_vX09r1 zy>NAxpTWSa3cYPo2s)+vfM{zBtYx5XzReHj+QWl{g4*_%AdG$Snk@dL znyyA;B4Ud6@B#Wv6=NBIb=xm*+3lSN62t^M%?ZpNe+|?Pp2qVCp1VBhA?u~mMNL=L zA|}P?9xcpYRkRG4>s-is)OI<^0e@}6v_)JeK~qf1$^ERy1WfjK(bGxP?3?F1q&2X2 z2ekBO-)u{@)4++NU0oOuF>1P+VVj89ijMi{hq3NQVQWZ4xbpRBSG1k^`WO)rv}iFG zTb7uRUWiH{lA6}(lk9aT+;}cL;0sldugb-}hrenwO)Mwc!#{^DqtEtP5m*7CN# zF9UY+zypY9Q#P;5+;x#Q2i?c-?Hdj%kg|t!fN$E(u`TD#LH4knj^``9ZWI&hxdUS> zf3Vw|1|yapopJt(WIftBhqs5d4CnL}h0NxBHf>f%1Rm5n;%+@=yGZ-gaeNnjqR!zL zDKu2WcTz@ZG*6-hp%3y*+8#Qczey)TV<&vA!88^6{2CEW`aZOZS5xK05rp=}vacSoBk0(}T}?munG3Cjj?K_a6T;2D!rq3P zCTa_xk>{{|+HKpl)hoLW3;tCLj)Q9(6^mJa`IFu5-2C?V{Egxy*y9a!GrW}#_ida! zS;f<6d-M=rOOH)m!!ObB)Ko zcw)9C^kjS`|Bg<_7peEdQS$`rHQS==cKdPFe#%IAfls6UgiOAlzDdZKa>$>tyZ=^q zrMHoq_8E;K)(2VuMthn8J_I&cqDlrxIiMW%@R88g@~1QW`h+ zJ&?43^IUp4`9E>}T2tQPRdj!Z!hr2DQA9M|^fBvgrKoSn4#Zu9hX?S`lr5S2 zY_m~2&L+eCD|>7+9S@Rt*lvrb8>#8Ml@ilTfn4a{m}ow2v(T$)WeDN-X-9bg9iFyl z-eKs^_~tkh-8KxSVF0Vmu|ql!g5WYk!*M18bY)ZL)6CZH(idZXRfp|iP1Dc##+F9E zO)uk7Bu&>xZ-t8U0t*pW)N8OgW599FZ09L&dgg=zw?duT_6jvkU&IUO?DXfReh8b+ z*)$D?EnSAIYD}VrjE;q)j+@gSf7MmmT;&B<`H8DM=_-d@<)Ev4+g0|v%3fMJV@p<< z>uIm6-0dj8dh(2WqdMHcT_|f^4(+un>j@;y<=FTtL`pu*ZpUn$Jnxr8~mR!_&@c@z$6C3 z<&$*wvHTLEIlTOj54lV)~`l+;i2XWt_g_EYQZ0_mlGIyF028ttcG!+dGgTeQTW zk+!`>&lxHu?VsoiLzOgqm`d)ODMi0ct@q_hLH|a_?kklB2S}4QQ_>!xlDsS_`v`5y zE0Bth(CNGs$$W%v<>g8TPEhWgbZO-WR5fRbwCV%;U`~NjeadeC3q6t_MH%^e>CIDA znqMRZeMEcmOQi$DbSpnj8X2azxhaz3V=9`PE@gg94Ra%-T6J&@l+`XTQ@PC?E=Mj&59u0t3?5C92-Xdo#N zk+M-PcGbO;w*0@$+B<16+yC=f_br%55`8^?nS!x+Mj3BL^gZ_AMBZ0l*ulkF^c6?5 zIMUD;TJ#<7&QSF!ii0F+Slc(T_)!32 z2)tdrIDoD%wXGMm<;1iH*AW0kx}@rLPuWocg=W_=vzC^Kp||`Lw=C#~0JCrsz1= z42Q;bt8sTDV_RfcW+8@@S;@*qe;waI?>EKp_vjMpr^vrq$1l*d=0s^&O{LA1+(z#- z>q5R4{vu&6aQkJkwj<4c6x5>Sku>5K!dLb^b7mbJ=e3=AaRCnW1 z9p|x$YSjw`frB0;6_hOV@z{k=ChyuU6$BrHUSa|nk&yR+5ZPF!l;MmKI&Ke!J);OR^?U|3(j8nCZQ(bwxPS%of zr1*9+>jI}e?Xdw_IqnuRc1Q6HvbXE7MRXlHuBPX^b&^U!rjEF!Ut;y-KKGAvWF!^uR@t8UL`sf^RL zEm3LCBc1iTaTD1+u3ry*wneva46j^ms=$7_3!1m=j6KfFpM8AI>Z-@5mDidps#d0# zqYj{h8+6!#=d|g(ztt4afBfOzW>*F{-nUX1dj-@xO%XCqk1t z8>f)ARUxi$sZ2qiuaAm!`aWxToTqxaAL~0xuXXEaRaL(sMLT3R;o2-`+ z#NyuVPD9ng0+M)gk_M1^S+`D*3l1W5jFq(&Vh#4nT-*VjZL;D22r?oggCKqundxDm zdYO_q71=T!CFZ$9rV|a44{t>jolf5kVv^~I<0%sUN$1irg1p4>HstMQ23qM_4yU0u zkYPl771T=E+2mu z1V3Y5G8q>qW7;t!14O8KbqXCiY>ee)<4BE*gm{N<1lmi#c`3%yh1vm+w_?EEAgerc zG}hFa*Mc_6;&1>u?kmd~y&;f`GCOBMv>rRcvJE5?B?{N1c`}yZoUGdfkma&&u^!l9<#c!;tVsxn6=EX0FB5@-y@V{5ibTY z$R@a45LvG$Kx#Y=8P`;-DX)2!waIkEScNhd+x_mw$Cu2<9w^B-#k<0^%+Lvtx5>CI z#&RAtkwgK@NS9IFCUf>WNRn(=C4SK&Ts@q9Bn!8>1Kq+_)p1fz^F%YecRDp;jHi6T(29Rt#d3$Z5 zecQvO{xlleu1VQ}X7BLE%IcbmD!lD_hBub4Fqx{$*-$E}U(s0JaM|}Bv3Ehlf5ybw zbB=ftT$k)OS)V+3o25Iy3GS*f&#;x}_B6>wx@Wm7)8!Q<_{13-F z{2Y*e5OFs<9eNlsf8onb)oUx*fK2BT5d-&&k8^$(K}7Nf zb4nm%Ju=^?gWT}AD75bdvB^x&0}+SUYi9+B{7PFJhANrrTzaG+B6e zfVfYY)9Kei+#d(H8&^D5U5n4-;ncA&Tz`a)SVQmPz88pJ?q1nE&O%8GJ-2!M^nomw z>HGkKaEv(wp+WdRkSs#!AbOcjE{H-l{CtqGE}7|SpdmFa+o`d%p^COKf#?Ad$s5sq zAQ>{710e3b>I}_?Am>uY2IAjAhOrRBx>M&15Rts0`Q8E~zx(|0c|Rocb_$3{UWe`k zSt-*g7^kxgB-7)x_#HFhmMD|CSTz9~V?bu88Qn54nD^@0AxPTTnY{rbKX)I1%#-PS z0b-U}z6sLdAx7hhwQDPCEoQOC-ml|O{EI;A@mkC}4n!WId=T;e*?uL^%-A}_x*3shtKl> diff --git a/Yûki/gestion_des_fichiers/bit_a_bit.o b/Yûki/gestion_des_fichiers/bit_a_bit.o index f25e7dc7df9746b0ce5dc151ed1503cf956a40a5..9402861ff9a0c34338babbc6b82a4f160f39d248 100644 GIT binary patch literal 1727 zcmZ`)U27Xh6rGVavD&J2NtAwuBFI7$Qg7C&15T)oV{2>LCaowEam&Jbt*qsxkz`gY zYMUf2Yy(*qfqy_B`qY1r5L#%JkJ^~LIR79IDH!AjJs4VuX?pJLt}G?az|1}O+%tE_ zcQn@*_(4YFfyCIm0!dtPttD6BaG6LjCUM3_p`q~_W|pb5%4O3v1@rP{f~hTKu3mq+ zB8>bLXF-$7d_U(x^Dd(!c?XSYbc zo|8p(cdGz2CY+ zIXCW8-L{W=*HQ!DAH|na$H2l$X|j_1IZSv=E$y{ZYaq29aIF1ppryRW+}E}N9&Pzr z>dpZ8liJRW*3wvvy?;|bsNS`0*2o0f&TphRaWBx)d~=Pd?L#kc!=ARoaT?b6B~IaM zo%Uc*?8LjgN(YJ#TW+sL$A5EO+odxF#a)P+=|rIIHuKys?)vyvir*W&&2RRTH~>oa zQ>*b1f{pvDtIiyw7o)g%HMw*8qEjn7W~E}fcCD(HZFiwDr+@SGJ6kVXb>fW6R^6Dl zOAEH;)b%;rHB1AmQexHdvB}TAG%lVOw>CXBbuN4SqFtT7q|}^p7XHwva#~S`K0c8Z zfUyi69)quZ&G^+6e?KirH}O`Ff}=@42s0yAy77aee}w1*_=iRGmRL!57wCxaUO~>c1R4T*TcA8p zxc5>Q=|Jy@XcjB=sSMt0jApw?nYXW4@M!$^jIlEBt!c;`71OSUka3n}3FLl$;1a5) z?O0SVp%DV=ivM((-rh(ll6)N9kvihu=ni43E+LZ}Zj=4*>qTrwt@#fH1r$U{xpa!YZdSW{XsosbJP wr7N|1d_RIQ%zE8&qJJ^OoP|8>{_@Jo3RA2FV;)b)Vn$`zsJl*Sae4pv|GP0vY5)KL delta 548 zcmdnbJA;eYhmnl|1bmno7{n*?iVF%bGBB_J@f9YpI0M&2({wf$AX|iK;vzMs2&Rdr zloTU?{2HJF3!p9#0I79gFmMR%eA@ivL-QMh$-Im*b~>*WdR*BNr~~p zySZ~6~!xM^<7)nwrO7u!9N*G+MVhW1#(~A;wa}!H4^YcKwtkjbDPg+T@=WCO%yKs*