From d56fdb0ce92c92e27ef45a8315ff26c272a1f23d Mon Sep 17 00:00:00 2001 From: Andy Elvey Date: Sat, 24 Nov 2012 14:50:18 +1300 Subject: [PATCH] More work --- funcs.c | 61 +++++++++++++++++++++++++++++++++++++++++--------- history.c | 31 ++++++++++--------------- keyhandler.c | 4 ++-- pd_readline | Bin 0 -> 24478 bytes pd_readline.c | 4 ++-- pd_readline.h | 31 ++++++++++++++++++++----- range | Bin 0 -> 7223 bytes 7 files changed, 91 insertions(+), 40 deletions(-) create mode 100755 pd_readline create mode 100755 range diff --git a/funcs.c b/funcs.c index 36241e5..3623220 100644 --- a/funcs.c +++ b/funcs.c @@ -18,6 +18,13 @@ /* array member of the buffer. */ /* Also test for the top and bottom of the history file. */ +/* Error function. */ +void error(void) +{ + printf("Error \n"); +} + + /* Display a buffer */ void show(buf b) @@ -37,7 +44,7 @@ buf set(buf b, int i) } else { - memset(b.array[0], 0, sizeof(b.array) ); + memset(&b.array[0], 0, sizeof(b.array) ); b.array[0] = i; b.index += 1 ; } @@ -48,21 +55,53 @@ buf set(buf b, int i) } +/* Return a line from hist. */ +buf get(hist h) +{ + buf b; + memcpy(&b.array[0], h.array[h.curindex], 80); + return b; +} + + /* Move up in history list. */ -buf up(buf b) +hist up(hist h) { + + buf b; + + if ( (h.curindex > 0) ) + { + h.curindex -= 1; + memset(&b.array[0], 0, sizeof(b.array) ); + memcpy(&b.array[0], h.array[h.curindex], 80); + show(b); + return h; + } + + else error(); - - } /* Move down in history list. */ -buf down(buf b) +hist down(hist h) { - - + + buf b; + + if ( (h.curindex < 19) ) + { + h.curindex += 1; + memset(&b.array[0], 0, sizeof(b.array) ); + memcpy(&b.array[0], h.array[h.curindex], 80); + show(b); + return h; + } + + else error(); + } @@ -133,13 +172,13 @@ int type(int i) /* Function for special key combinations */ /* (Ctrl, Alt, function keys. */ -void spec(void) +void spec(hist h) { int j = getch(); - - if ( ( j == 65 ) ) printf("Up "); - else if ( ( j == 66 ) ) printf("Down "); + + if ( ( j == 65 ) ) up(h); + else if ( ( j == 66 ) ) down(h); else if ( ( j == 67 ) ) printf("Right "); else if ( ( j == 68 ) ) printf("Left "); diff --git a/history.c b/history.c index dd70ed5..498cbe8 100644 --- a/history.c +++ b/history.c @@ -35,18 +35,13 @@ char *chop(char *s) } -/* An array to store the command-history file in. */ -/* Only 20 lines are read. */ -char hist[20][80]; - - -/* Read the file into the array of strings. */ -buf readhistory(char *fname) +/* Read the file into the array of strings. */ +hist readhistory(char *fname) { /* Create a history buffer. */ - buf h; + hist h; int retval = fexists(fname); @@ -63,22 +58,20 @@ buf readhistory(char *fname) for(i=0; i<20; i++) { fgets(line, 80, fptr); - chop(line) ; - memcpy(hist[i], line, 80) ; - puts(hist[i]); + chop(line) ; + + /* TO DO: fix the "too few arguments" bug here.... */ + memcpy(&h.array[i], line, 80) ; + puts(h.array[i]); } } /* retval == 0 */ else puts("Error! File does not exist. \n"); - - /* Read the most recent command into histbuf */ - /* and set the index to 19. */ - /* - h.index = 19; - h.array = hist[h.index] ; - */ - + + /* Set the curindex to 19. */ + h.curindex = 19; + return h; } diff --git a/keyhandler.c b/keyhandler.c index 0ba3c6a..f4ca5ba 100644 --- a/keyhandler.c +++ b/keyhandler.c @@ -65,7 +65,7 @@ char getche(void) { /* Alt keys are just esc then key (e.g. Alt-g is esc g ). */ /* Ctrl (then letter) keys are just Dec 1 to Dec 26 */ -void keyhandler(buf b) +void keyhandler(buf b, hist h) { int a = getch(); @@ -77,7 +77,7 @@ void keyhandler(buf b) case (1): break; /* Ctrl a */ case (2): break; /* Ctrl b */ - case (3): getch(); spec(); break; /* Ctrl c */ + case (3): getch(); spec(h); break; /* Ctrl c */ case (4): set(b, a); break; /* Printable chars. */ case (5): delch(b); break; case (6): break; diff --git a/pd_readline b/pd_readline new file mode 100755 index 0000000000000000000000000000000000000000..a54280c1fa2c37ea79c6343e35795bfa39ad8868 GIT binary patch literal 24478 zcmeHv4Rlo1z3)CBGdV*-67m570t{q;Krti`DGDeb0r`lKVpLRg2${);B$=4ZVCYpK zPEgVi4VJ#=>ZKK~V(lxh;=R;M1-(%a?9$#+>$BWmZ>1J>D6~>hORY8U_uKoN`H0%y z``&t8>#gOPwdeo2|9kKM-ur*{Is2TmWpU*aP1A&P=)w@BUf*U~<$ya@DM`8T3Xdoj z6U7AK28*)tt%%XrUvLYplqfJ&`gf3>aB2K+Atxe?KCZ>^N=w) z@~=P+@>7Rne>LRE^-Ipr_DyeUTtB@ja9LAhOQfTuJybG7*+$i6+pk%9y|m4C&}J4A z%g#fh?TY9xZ~~pkKBD(h_VbMmO)=_eO!0}Brg+i|B7Gt*I!?g z{qFc$noK!vOQLdsw+y1M8ANXxL?=6h`4@81G}kn?h-)gBEnMWEQ8KfnJdP)@vN*34E#mAm z@z0;4T);G$*zYEXzf1rkJhIWlk?>8Mm)F<`N0{O!fm=X`{Dp*;5MDym$VWH?^OG=Li0h)~ ztr!curSs^0UlO7x`tiWPz_$LdE7l8c>=eq385r5oW7aK4shBthF296Y4ov(Q|Ktu# zWGx$ro;?jK0~1->2FlK!lr(GIKsTN3mo#hNP(b>Cq}hrFFX=s!W@{RXN%u*bt!iLr zoZTvEwyt3|=~hXzl@0Sruah)e+pv^$m899~hAPtYLHAbr%;=d519yCUefL{8-f-Pl zI?u0xt9!py`Nx5Q;9gGo?!{-y`cEwG11e5b_{{MLN!^9MSSMT=J#Y3__^P|N&4+sL z;=b-}6+||Qo@dDE{^bvM!g&|>b-&Z|14^FEzql{927Pz#mwkO@zrC&dS17!ydUeCr zKGZ53e_y$wVI5+7tO%8RzpoFqLidxM z1L8Sh`p6qN`Jj?)(Fwdh)~g ze}sa)0sM96AC%kZ3cbM!8sSL@F2m%J`1KPK_* z5`R(RJ0$+H#QP+EQsTQL{;I?ulK3h7k9;Ni=DX47t??%x*$>ibS?JFL1JPrJ$^KI9 zx7Jb1ZlI&Rz|oc+Vfz=ISI|@8^LCrQSU()KcRmXRVL-e4Xly^aIeM(1`_wH*``9hC zZ~OH*DMIPV_LQ8_Jhu0<#uhwp3OPRDPgbI=|A#U({ruwh zSf2~qyCmDL*xB`PW^Ct2@M!dWQ%|KY+*|Fl;w@iW){ly2z$xocYAd=W(3{cy+^@{; zyL=73;f#*%6UzE2bmwc`Z!l<~u4|pT<{;O)9^~qQe)L!q>K5~%Fpi7P^XE~$o?X88 z0qhdHd@su?!@=}3+I0Z{b$uOR+bigW)1;61&H!ZH|0Mp|$FdH+YkkGh-)L}YVfPzl z{TIL2+a*nRzX4W3ule9}r_F9vTJJ&glFEA5lX<9d*jI=i>R|0vpA7Dd(+J4WDzHa4 zD$RP@t?Z6PW?;y$is+Wp1ge6lK3mawj15K8)%1)l!hAk=q%Ss_@jnq?|Dr!^^ShNl zR4LJqa%@l7?#g=L018StqzMjrUOD95WQTCr{pTG*_kC&x{p8YLa>%Jj*?-C*a-7Cy zVm6+8rZ1Kbn@RrY!K8)Lx<9nzI) zpY>G#_>&MGoCG%tjAJwUk!MTRwpTjR4>4}oardJkn{%Tdjovag`q8LESX7D4c^8k? z^+ER#*Ls_OeNmnUq91Lh-WKX@-aPUU*ZD_rzK?!1?hvA0T#s>AAb;oi{TUeB2Yrtc z9PvF45F3HXlJ#tV^wNT`KYD3lR@Y`IM=veP>e?rfif{qO9CKjIF-PYyT46aSx_k$L zUSj*ZdzlZw-;7%>s2A4Ht~OL|}CnGG?zUY--A zAMJYl9`!iOQ-!leK>wf%yzHY-AnV52pz%Ywn9L{s+Ybf?%KBwgSN(Aac?Zt@EcFw|(-}=WPVNcdmL%M&~^`pqU#|?1{{ChptY@O#{ zhPQjVe5VO^`_2Fadt_WiXyECr>=hY6uxMM0;ql%QKO1^rpa?pERRale6dQ{lYt5zE%Zf?R>hV>a>cpGaRkT0-mtG& zMi*o+<|Q`55+WHQ4Qu7Z)A60h*nnGZ^WPeeCpf7Ys8Hf)FU<%TD?)CQ%*cLpl=%pPbvFQ#U~Uy+pas%a6?s1@7nyy1 z$=4OrQQ6pZxF)KuAvnW$-L#n3c3v^DT`X=12Z60_tZxW=MP;xK|81h}PNg#5yQHxx z=naH|?cSD9*c;p70X&xsZ@MZD=&j98j$b3wQ@Lr67&;?ipxC>MHF2F}|Vt*X) zAm9MqJ`T^BW1vj!nqgQJU31>8+j_o=2~47i{Vn-{deHvQK7jC;+fOMl$9xD3kF-No`T zP7=CN*KON$YR7e#LN^<_{m^|Mx>#PzgS=P4yD*3s1MmDG9>-xUiASGgbBuvEn%3a| z8{vQ2~ z9;!b#Br^}JqmUhkffEbRZOhW9A$YtIS`Kp^0VLEBvsgBX`Y)3g_2JlvhK2nEF(CD>F;=<)1E%K3a#oCgv=Plm~fX@ZN(xOusLVFFf#t z2fpyY7asV+17CRH3lDtZfxn>#u)>#1dJ(yKuuKi@01foNd~na)$@CP;JdX4l(%VQMBDuGj)^MarNVAZZ zAl-oEztg#pH?3RP{1o{LI8n*Dvn5yWw!96N?eevY z$ftc1)Bq4x%R5tYZqEswLwVym2_*CwY~Pf>Y-whvsrsMKP&xqRC9 zBw23tkep<H9gYn`NYn$`)R7tOa0lPuME?WY%2SiCplD${P39~gVjW7m39I^FKQB=UWyM6i9tKV^)%g(KAb9tl}AK+Ar+1& zhnVS4lImAIYzep70$sQH7;|$xusK6H9LeRFkldd;+{r?}3I^N-l~B-mQ^Gxx+WO^0 zM-d&uu{YN}CW3I2ek0lAev9lFPwC%*#O+m-nf^Lu;}vD4|B3(WXd{fHG(|JS7JxNisMFz8MgQ9H1IFVVMmi|9jkuLDlGVFn!{w7SM z4W$6%S~c-$C(|mCwLVfO(lTi#yTYB8bB+c&X&^VnKpq8g1Da`%pZ1^_^lQ%B-L-jGeEF;Wa|L zhPA1L=J2r4mXY9y6{9ZV&)UafscEB{!LlAx#OP2{Kxp~Aqv$fY89llscxRlk2aM0p zEB+DQ(Zz!>XR4@s3T7B}8Qvd92xoAWQP=$ZsOvIUpmOdi{QaK=VAt$+a#+iq~#Xa06Ee`{*dxTA9 zco=})1vZ)OVE}fIw8=aV1F(CPO%`|@KuPuZIEHJ=P|D9tL3dIGZf? zFaW!~HaX410PLQi9RL>r*uwzq_GwQ^vfRS}?2ZRu4+F3}9)LY3DV?VA9EAYvVE}f= z1F(ky*j=UtrF4mh0oXl5<1J{t=o$|LuzQyFvLu&!7=YbZ+d;I_!vO4Fs(n}Ht@bbg zyO-JI8V>`od$~=n^)LXtSJ>n_4+F3}9)LXz!0vbe_AmgutF%`D7=VXxIJ*y~%K+?t znr_Ho0Cpc%9uXM~!0sc;A!Y^xusa@rUFIg}y38k0&!HS}Y))n=5OO&tB$x3`awmfu z1Cf=D$d-vImyr_LGTubKw4oF*Fv+}QLCCzT#4r`v&cZ+rBikw(NQrF9Kpq8g13||? zu5HGSY*WC`RUKWgBAeC+R$d`9*E8Np)nZd{T{^|*Rp5wo|h?ym0p6>jbzADO&HX^PIN@0jfj!jCsY`&F=iOucn}F)Hi}ix1~C)qw_to7mPY>!Oa#5c zR=`{crXy+I(NU0YgAZ^#EW{WMkM0R=lEya7hr-og!&5mZfzPXqMdKz>pzk!tq6U*# z6=UZqF^=VZAKIXWRxV32c5dG?jzy90CEx31QP;s3jxib@0~FdERS*i~R_~^yg4U)KviY1YAAs*8A-d} z9!h*B07GdahkPjnOOaqU9a}7;`6wF3;OOZRnxn6j&_e5;Ve7sn2YwYYJgYM0V@PqR zeTzd487H-I)I3aT8!9oGWmH480ZH3?JBv^zMKO!;6su?7rcjSMdyrB4hX)7i4Uu|7 zl)Yx?-9>wkJO@25?fnpCd1>(9h|nexAPjHwYWdEYH_EmTJ+thTw2)?ctb5H@|}UBFnW3m7YP0b`{uV64;yjFq~8u~HW>c(PwDtJDGp>%zmRzq5d`eD;N% zTEJMT3m7YP0b`{uV64;yjFq~8v1ZtpZfXHz&C=9Wj#|K2sS6k@bpd0gE?}(G1&o!t zfU!~+FjndU#;Vf(L$=pmz*zPI#(J7=kP8^=u=0pnz*t9kX^1s}T)d5gynZ%#dd$I-^+JEiSd1#>{yPo5WN@PA@qD5G*pSPFVcI>UUbFL^ zi06Av<$F{~nJ@SI30&DY<=A+Dk~eJ|BM>Z9*>5J=ypi#jD;USI1<7!FEhhtM&AiU>cm0 zdInM4cQM{19D2Q^Oy}03s|j=v$<4o2xFD7HAJfzwM~hbqdgc^}JQZ#|=TRUAuN3s$ z6svg@aAHbxynP_e<=RGv@E(YszZv{=jkim*F&gvpX6Y}GTG6JAPsktN4z>~L+mdmH zMQ?rhvI_c#VIz~YMOR7|%OVT6hqnzk&L{GsE;vfSw? zAv0H#W~Fu(>{w34vLSJip#HEDadn2O^yG|XxnAVVDbW%vHf_F}nz^oc<8+jmmz+^) zVT>kcU6z~3JiI(!0UeGSF-DY0>6-MLP+~!{Ehii11xmDQ%@Rk!hV9*}Gv;Ps{w5iP z{Qss$*cI+ca2B9nqDyamOTj zfxR>~LE1x$YDq(jO5>d&JE5Fo7uJiAEh&)r5+u%=36reXq~vjc0ppC<;)I$CKB>cj zBV3*VlIOLN8VZun0!~zLJ5eDmakj9M!+|F`9K@pzJ1sqV0yr}eXM#jU*&Z<#Uev`; z86LGiWe&x^e6<-|ZF;1=ZF*x%ZBrx=oZdKd_AK>!?q&5Yk?HFj@ph+F;G4VkwYAe5 zXQe2}-AyOA(zHzpu_3srp{6C!6l^Q0MZxlo(NGE2H4+U3>wx2&9p2O$Y*%a)(nt-Q zWAR9Gb7RQnw+8%e!I}VG8xBI6WD1Hnnd;oCFbcGJ*1RX))mP@uyFp)>_txRF^Q`}A z4X-ryXH4zaH$OY?ur++%VZ&qPSXXs*8AHz)9oBN|ZM}Gyei{71+sL~3G3@>AJX9BH zsclbk&J5*-_Ap+=t)J--fxqIazvdlzqj0!p>c%T#uBjOZwmfYW%meu&aSzBtTdcWO z!Ncu(aqgT*!_G&IkmWVO@DHu>FqA5-xi?QMH9GWi%`}WjWUbvlXJ`M0t3YmC zZfdImJDvtS5~#FUMn)J|xCFZCB~iV&;PzJCH+I_TBW=BSe0 z8;#Y>mIs?g;d@3^iL5B8dTZ{J`n>F}KS(>XX~zgtkRdH8d?;x}F(Mr)suHP^UDd^8ylt-wxd-+)o39Ocus_tc$r+CvgYf|wXbi>izdktmZn!;mEd%?q4)~r4gZ-@i^!RF;Q^Cb;-B=4Ec_t?CnnsUExJiFP+aVO@1R2v$W zVAFnM*z)6DrN$_5Itc%M(D?EtghRH~m%#iVlE#*~(F-EgmjE=ek9VkcB zrxfTDVB7Bx)z$gKg73*U_~m=~40rxkyiku9?)k2~6a__l<5z=F^tU&J+QPgD;_LN* z{`EC@>%J+}Qty?2k(Tzx`j%k8%f~co{f+IdLA>E_$5hc4#6ACN6=0JxQP*FGmpxiS zi8=&Z@MVCyrkeV8*a;DdmnlWHkv4yAs43Fif;ar{h@jRmf<00;i8~9j;-aRlt!9(V z*j&@LA=qYrJ)qX#BrOJO8&r{Zwl#)>vfZ-AvZ-vQY_B(^RpDA@g+^^H)%Y!gnvFr_ z2!B(kb_3h3>dXK38N%Nj3c!WoKq#UzsM6Ss#HmVJVs_i;l4X^PVTq?6IzTzn-x|Uf z5mZy?m)cqpuN(Rc&13)A&X@HR{*B?9^-V#?E%=g!cai-p(Da5-b8tG&l$)j}4IJTb z3F74%IW}gM+qIFyLiTmM!K}V?GK$3~9BKk(3ZT8DW-3swz~#apY2nu%W{Ad?#`qXO zCpNYOf*q=B@tKE6t8!$*FNg{(Qn^glKz%Jjp1xrmyZN~J(^f0m8u1zt9dM^`PH%zG zoh<^MgHV2j0-6E5JS5s`TIz%LM<&|jX!2w5p=Rx{)*NiEZN-@J*ENSpa4-deO^^in zzLIFddrBC|;f*y-P{NRoG|^i)cLr;k1qM{B{c(!AmYU|EsN-a!`|K#ERBPK?Tl}^3 z81gBCev1<`MV)-#iQm6y3*H{A4O3TPR8-hZkqDjOl~N$}5-Os36Lp0A@I_KD!>!Gm zIKp{wHKPkgG&~BYa4#WW6(S!%9XL4{@&o~0K>5^w2zv>OY`&vf3cAeZ5tb|5BINTg zu+nVVlCegzYxp(cKCp$iiEXInr>ze<6VvmcD(wgTZ3a0wMOB8QM@lJEsb;N-jk3~v4o zuFFaAUPEF=!hX0^S|su!5(R|+%Mmyh>%rK8G}xjS(*}0{Wky1|TZn!kXF>^#J}$|J$Fs^Tqln3}lW(c@|~fP^}k zgm*~%4nfF!--f`eeU36C$@56ZkX}Uk3DU2Toa3*_7h)zaL0W^ zCZMxX5NDONZ)(OmPn2Kkn3YBnyCrZLxM3&TnfG8BG z3D<~{V1vJ|4T~awLjXA)N|e;%@~<7mDR6r&gfLmt+*pg^LNJ5B5@}o6S>F!r+E8;d zR%B2Ou8-9FYviJiRwUWjQWtXYn)U13f*T!5uBdG-_$bZ}p)i%#wiI{nUq?nm1rq`j z4X0=U(Taj7Jd?9^H_7@>_TictJadGbGBuaP+pr-gfBu93?*LsC8!V(K zlB36WGcq7xRHYtvWMn(2w*!fFWjO)p1)x^~+&O5E$9+hS-X7@ffuNrP`(PcY`yi5| z$GNu-1+Jw-?Spze9zt^T_%6y32u4YX`g6+twynqZo`T*f=&k+?y~mRDSy%)f6^!QP+!q3rrIZ2Nn5A#9K zu|b;-{!`%W3zjRt5eYrUbMkmlkM;Nkl2b0fg?HgI>{0iPBt5>n^FH)ugXbL7VTvI+ z_NE=cqvGDrZtw4)$MRV}ey*z=db@!;hu20f0@7ZoO;c~GjT2DD^sx;A0`%UIRex5ju1=-CFI<2j%q9) zPNG~N7*`;%s+ck|79#9P2n^e)NWX4@ZD}#)$idK$d z996V(Fyp17m4lpj!3-J6Rs2(OsV3u`q8ZT;zYu>E&3zLUw-l`c4daud8R>*v11Nf^ zq#17%ohfO?6-D!TdG&2oMbmS*osk&=)S&0`A>p& z4%+({hX5qaxXpJ+5FTWGP6F~35{KrR(>bXBxohfA3!_rFluqF89 zKs)m-M`Q}V?BN_N@0CIH+o1W_)j7zR|2@!r9IV8q{{T80?cqqL{Li5IEI7X_Lt2Mp z_ytgi#V|cr-VGwogXQ@k=TrEOKc|3p{FM!V%>vDb*d2RUfOZb%=W8L(;RV9$CB8-V zCEzUI4>~)^A9bKhZGR5a3q(8U*U?`b-~2Z4J)oU~_8(?`$ZLSp9&gid{ww{FqJNP7 zPeH$K+h>3Aj?8@2zsb)33(Bz$V;QvfE6|L0PWgNngb$=U{rNl4rSLB!5B2$wS}EGY zZxNB^M_-c1M>;}2*Lh#H<=N^K0E+rJ=Y!_UVb1s{r5yI1@@6IJdm-Y3h}DHDso6qZtpy^@ z&AcHl%UQg#LKd@R^@3{``yGnKIC!EId0i(r$t zIDUDXzT&2p3$9(Z2z5!4*thntsa&;iL8X7yk|ozIuJ%_iSXjB(pSt5@e+jy_J%ZgP zT$jQM9x5ooCWgNidpQk}mJKEAI|Q#W)#sws9)rB$FTXcEf4=kSXxwTK%4<>e-RXp& z%-)AkU$Bnf#J9^!{gibg7j{YP&s8UQr761xa$iAhK*(JUyPuWMQM?=!IY175BjQhs#PhZquEbt(=Ay+e&svC zz@CM@n}i)kel8q4f35z8JMDcJwOx}KG^iNv0N9#xVsE9W;L-0JUebE#NLv3K^bqe! z+I~0m&h||LNn(BWZ&fnUvnm-~nM|Z|L&0o1xJK#FbgAFaxg9yx586amWZg<|jve*a zKQgjAbH8eM|Lxz}a>DPo9&fh8)i-*rzC56=}E$}%N9!G`zIq$A9A&O7l zgymw*E&Q@tv4$Sv%-;AAHH$U$6sPXSxRmKJ&Su^?D`k3)S5ZC%dG+7-9Q!DLZK^BW z9rt1E;>Qmg-sg72YhE_Ig?9m%9-Wc4AG?kw8wa1Rf*Fx}=0r9489!QcXrdaw@BPc2 zpKz_cl6_?4ckm(dXI(!dq*!^FY6)L^B~!RiLIbY+Ib+xEu@P&T7)U#l={wGRbN4=~!tNwnauczK`*RLfv0$db@ol4(G z{U^xJw*QpUucv8v!H*&_09u*b>JCbL1`Nj8&?!!fE z`RdQrJQ)t5u`2>}i)=l(QT)+w2+dz`t-YPQnm<>)Ymd2mY+}KT`S|JBaCJa>R>k)G zJi&c9f3s*UI>TJwXnw*djt_fKl$*}WNjEy`TzhYR6~p>63;AI_r#jOH>hs{O#|~NxM(i(9(K1Z zDA^4o=T-gZQT!S7FT&;>y(jBB4+z_Q5Y&a46aiQI=CaZwp5`)a1kGiY`I64EI`^is zN)(Jia{(?cHkTRaxtY8JdKq;&KbTlH4$7bm+uB^38-ckIm>Yq)5tti+xe@q3j{vR{ zMY_&ZlS@J4FBx9EoQMuw-9EcrOrOL%CU37>0 zY22WA&ig^Uv+xyrG3XTPGyfJi-^X~B=6f?at^w(zC`X&pY|9k*e#prF&x!BMy3)gV z&tC>=0JVd3`G(fkr~I|sdvYl&x2hwNie%FM`d~wF^~$w5S@_N6N){rR-8W!GdcduW z;&GkBD_<-#D1xc96$>`EY+PwY`faH{l?(Rd5_nBcL`9HNJd%xzV02#!_7t}=O0zeX z$tKdN8G;F2CYB^#Wd@U$2qsbq{93Ug{PsbBDjkhj5fO~V&Av=zAZEs+sHr6p?6uOF zEZiyfon9zmGBS|pg}XG&;3p_;D?2?|pnKB;1F@8)2kXD!OM&5Y<8zmB5eR&?I#I{; z7zm*diIedQDEyFh(sx0=%xc_G%s1Y1<-3>-)VL7j&oNi%m-F$u* zkj4qF4|KjuYSa(MgxFU>8pqgK7jU=OSUVBN#P=7Cl6c9%fap2;> z$rpMXsBu4c;26tdT#KGrr^MxciU$+;!tdca+>%fKX#?f5H*{b2hT6Pmh@J=(wOz;VBw z29ED|IuS!EfV4dyA}BsQsQdNzAHcDkei>=0`V!oyw!J!VCgPq@S@}y}B<}OHrBe%V zx3mCG3=_Fy8i^?!Bz0&wLR(@bh}B{FqdW9Tl}bK<`Q1k65T8zbbC3WMzQ+ zi;|TG?juU3ceP(AS*=Fy3rgk_RqJ2L+_BU;SF(i3^{iyBTy+jAnWv~)pGxLwie#Tt z9=W1bteV9h!BbhC%j6zWMkdz}xkpA?Roqv}967Wf>p{tUDr(*!$aw^UCXVF6&ft7*hWMn&J&fy; zFc+e>+&gspTsTo`A?x+1{lBCOvU-r8+;Y}^(`^xrf?Go($e4plU5_9xRlk)$avR%RqOByedO zOvbEOG}utr*dVAd6VV|`jY8ecqPc;AecDf3XGpqf?{41GW@?FUbpEavd5e=?GLck& zOg5HxK{JxcME04n6h2CXzTMfpWn(MMJ2diJhA=mDY;9@oFt@h1Z)*#i;pUc(Hug|{ z#^}xFOnH|?#fHX)V1LXq2YXE`o=d$D>=_cg7piX^LVe_DYP$QC!;Hymqc$Li>`wFV zR-E-^#WbVYv>A`2qRH5Q{J1j1-Q6b3tFZp=G6N$=!|r(Bpc#Kr$U#GYak;g7BEQ<0 YoA#RBvHnCBxA@j%B%6(8g&aKbZy!|YZU6uP literal 0 HcmV?d00001 -- 2.40.0