Path: utzoo!attcan!uunet!lll-winken!ncis.llnl.gov!ncis!helios.ee.lbl.gov!pasteur!agate!bionet!csd4.milw.wisc.edu!nic.MR.NET!xanth!mcnc!rti!sunpix!matthew From: matthew@sunpix.UUCP ( Sun NCAA) Newsgroups: comp.sys.ibm.pc Subject: Re: c beautifier Summary: src/com/docs Keywords: c beautifier for MS-DOS Message-ID: <366@greens.UUCP> Date: 17 Jan 89 22:24:20 GMT References: <563@blake.acs.washington.edu> Organization: Sun Microsystems, Research Triangle Park, NC Lines: 795 In article <563@blake.acs.washington.edu>, evan@blake.acs.washington.edu (Not Evan) writes: > Does anybody have a public domain (or shareware) C beautifier that runs > under MS-DOS? I have about 500K of some of the least readable C source > I've ever seen... > Excuse the direct posting but the e-mail is bouncing and what I have is small anyway. Included are the source to one cb, and the docs and executable for another. Enjoy; ---- Cut Here and unpack ---- #!/bin/sh # shar: Shell Archiver (v1.22) # Packed Tue Jan 17 17:20:17 EST 1989 by friar-taac!matthew # from directory /home/matthew/cb # # Run the following text with /bin/sh to create: # cb.c # cb.arc # echo "x - extracting cb.c (Text)" sed 's/^X//' << 'SHAR_EOF' > cb.c && X/* X Modified by Matthew Lee Stier 1/17/89 X (outvect defined as 'char *outvect;', X vice 'int outvect;' ) X X Compiled on Manx C86 by Allen Morris 3/22/86 X X Modified for DeSmet C by S. Lekach 3/20/86 X X Modified for Lattice C Ver 1.01 X by: John W. Kindschi Jr. (10-30-83) X X Swiped from CPIG'S UNIX system and modified to X run under BDS C by William C. Colley, III X X X To use the program type the following command line: X X A>cb input.fil [output.fil] X X Where input.fil is the file to be pretty printed and [output.fil] X is the destination file. If no output file is specified, then X the output goes to the console: X*/ X#include X XFILE *f1,*f2; X Xint slevel[10]; Xint clevel; Xint spflg[20][10]; Xint sind[20][10]; Xint siflev[10]; Xint sifflg[10]; Xint iflev; Xint ifflg; Xint level; Xint eflg; Xint paren; Xint aflg; Xint ct; Xint stabs[20][10]; Xint qflg; Xint j; Xint sflg; Xint bflg; Xint peek; Xint tabs; X Xstatic int ind[10] = { X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Xstatic int pflg[10] = { X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; X Xchar lchar; Xchar pchar; Xchar *wif[2]; Xchar *welse[2]; Xchar *wfor[2]; Xchar *wds[3]; Xchar cc; Xchar string[200]; Xint lastchar; Xint c; Xint outvect; X X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X int k; X /* Initialize everything here */ X outvect = 1; X if (argc < 2 || argc > 3){ X printf("Usage: A>Cpretty input.fil [output.fil]\n"); X exit(); X } X if ((f1 = fopen(*++argv,"r")) == NULL){ X printf("File not found\n\n"); X exit(); X } X if (argc == 3){ X if ((f2 = fopen(*++argv,"w")) == NULL){ X print("Couldn't create output file\n"); X exit(); X } X outvect = 0; X } X clevel = iflev = level = eflg = paren = 0; X aflg = qflg = j = bflg = tabs = 0; X ifflg = peek = -1; X sflg = 1; X wif[0] = "if"; X welse[0] = "else"; X wfor[0] = "for"; X wds[0] = "case"; X wds[1] = "default"; X wif[1] = welse[1] = wfor[1] = wds[2] = 0; X X /* End of Initialization */ X X while ((c = getchr()) != EOF){ X switch(c){ X default: X string[j++] = c; X if (c != ',') lchar = c; X break; X case ' ': X case '\t': X if (lookup(welse) == 1){ X gotelse(); X if(sflg == 0 || j > 0)string[j++] = c; X putsx(); X sflg = 0; X break; X } X if(sflg == 0 || j > 0) string[j++] = c; X break; X case '\n': X if (eflg = lookup(welse) == 1) gotelse(); X putsx(); X print("\n"); X sflg = 1; X if (eflg == 1){ X pflg[level]++; X tabs++; X } X else X if(pchar == lchar) X aflg = 1; X break; X case '{': X if (lookup(welse) == 1) gotelse(); X siflev[clevel] = iflev; X sifflg[clevel] = ifflg; X iflev = ifflg = 0; X clevel++; X if (sflg == 1 && pflg[level] != 0){ X pflg[level]--; X tabs--; X } X string[j++] = c; X putsx(); X getnl(); X putsx(); X print("\n"); X tabs++; X sflg = 1; X if (pflg[level] > 0){ X ind[level] = 1; X level++; X slevel[level] = clevel; X } X break; X case '}': X clevel--; X if ((iflev = siflev[clevel]-1) < 0) iflev = 0; X ifflg = sifflg[clevel]; X putsx(); X tabs--; X ptabs(); X if ((peek = getchr()) == ';'){ X print("%c;",c); X peek = -1; X } X else print("%c",c); X getnl(); X putsx(); X print("\n"); X sflg = 1; X if (clevel < slevel[level]) if (level > 0) level--; X if (ind[level] != 0){ X tabs -= pflg[level]; X pflg[level] = 0; X ind[level] = 0; X } X break; X case '"': X case '\'': X string[j++] = c; X while((cc = getchr()) != c){ X string[j++] = cc; X if(cc == '\\'){ X string[j++] = getchr(); X } X if(cc == '\n'){ X putsx(); X sflg = 1; X } X } X string[j++] = cc; X if(getnl() == 1){ X lchar = cc; X peek = '\n'; X } X break; X case ';': X string[j++] = c; X putsx(); X if(pflg[level] > 0 && ind[level] == 0){ X tabs -= pflg[level]; X pflg[level] = 0; X } X getnl(); X putsx(); X print("\n"); X sflg = 1; X if(iflev > 0) X if(ifflg == 1){ X iflev--; X ifflg = 0; X } X else iflev = 0; X break; X case '\\': X string[j++] = c; X string[j++] = getchr(); X break; X case '?': X qflg = 1; X string[j++] = c; X break; X case ':': X string[j++] = c; X if(qflg == 1){ X qflg = 0; X break; X } X if(lookup(wds) == 0){ X sflg = 0; X putsx(); X } X else { X tabs--; X putsx(); X tabs++; X } X if((peek = getchr()) == ';'){ X print(";"); X peek = -1; X } X getnl(); X putsx(); X print("\n"); X sflg = 1; X break; X case '/': X string[j++] = c; X if((peek = getchr()) != '*') break; X string[j++] = peek; X peek = -1; X comment(); X break; X case ')': X paren--; X string[j++] = c; X putsx(); X if(getnl() == 1){ X peek = '\n'; X if(paren != 0) aflg = 1; X else if(tabs > 0){ X pflg[level]++; X tabs++; X ind[level] = 0; X } X } X break; X case '#': X string[j++] = c; X while((cc = getchr()) != '\n') string[j++] = cc; X string[j++] = cc; X sflg = 0; X putsx(); X sflg = 1; X break; X case '(': X string[j++] = c; X paren++; X if(lookup(wfor) == 1){ X while((c = getsx()) != ';'); X ct = 0; Xcont: X while((c = getsx()) != ')'){ X if(c == '(') ct++; X } X if(ct != 0){ X ct--; X goto cont; X } X paren--; X putsx(); X if(getnl() == 1){ X peek = '\n'; X pflg[level]++; X tabs++; X ind[level] = 0; X } X break; X } X if(lookup(wif) == 1){ X putsx(); X stabs[clevel][iflev] = tabs; X spflg[clevel][iflev] = pflg[level]; X sind[clevel][iflev] = ind[level]; X iflev++; X ifflg = 1; X } X } X } X fclose(f1); X fclose(f2); X} X X Xptabs(){ X int i; X for (i=0; i < tabs; i++) print("\t"); X} Xgetchr(){ X if(peek<0 && lastchar != ' ' && lastchar != '\t')pchar = lastchar; X lastchar = (peek < 0) ? getc(f1) : peek; X peek = -1; X return(lastchar == '\r' ? getchr() : lastchar); X} Xputsx(){ X if (j > 0) X { X if (sflg != 0) X { X ptabs(); X sflg = 0; X if (aflg == 1) X { X aflg = 0; X if (tabs > 0) print (" "); X } X } X string[j] = '\0'; X print("%s",string); X j = 0; X } X else { X if (sflg != 0) { X sflg = 0; X aflg = 0; X } X } X} Xlookup(tab) Xchar *tab[]; X{ X char r; X int i,kk,k,l; X if(j < 1) return(0); X kk = 0; X while (string[kk] == ' ') kk++; X for (i = 0; tab[i] != 0; i++) X { X l = 0; X for(k=kk;(r = tab[i][l++]) == string[k] && r != '\0';k++); X if(r == '\0' && (string[k] < 'a' || string[k] > 'z'))return(1); X } X return(0); X} Xgetsx(){ X char ch; Xbeg: X if((ch = string[j++] = getchr()) == '\\') X { X string[j++] = getchr(); X goto beg; X } X if(ch == '\'' || ch == '"') X { X while((cc = string[j++] = getchr()) != ch) X if(cc == '\\') string[j++] = getchr(); X goto beg; X } X if(ch == '\n'){ X putsx(); X aflg = 1; X goto beg; X } X else return(ch); X} Xgotelse(){ X tabs = stabs[clevel][iflev]; X pflg[level] = spflg[clevel][iflev]; X ind[level] = sind[clevel][iflev]; X ifflg = 1; X} Xgetnl(){ X while ((peek = getchr()) == '\t' || peek == ' '){ X string[j++] = peek; X peek = -1; X } X if((peek = getchr()) == '/'){ X peek = -1; X if ((peek = getchr()) == '*'){ X string[j++] = '/'; X string[j++] = '*'; X peek = -1; X comment(); X } X else string[j++] = '/'; X } X if((peek = getchr()) == '\n'){ X peek = -1; X return(1); X } X return(0); X} Xcomment(){ Xrep: X while ((c = string[j++] = getchr()) != '*') X if (c == '\n'){ X putsx(); X sflg = 1; X } Xgotstar: X if ((c = string[j++] = getchr()) != '/'){ X if (c == '*') goto gotstar; X goto rep; X } X} Xprint(fmt,args) Xchar *fmt; Xunsigned args; X{ X if (outvect == 1) printf(fmt,args); X else if (outvect == 0) fprintf(f2,fmt,args); X} X SHAR_EOF chmod 0644 cb.c || echo "restore of cb.c fails" echo "x - extracting cb.arc (Binary)" sed 's/^X//' << 'SHAR_EOF' > s2_temp_.tmp && Xbegin 600 cb.arc XM&@A#0BY#3TT```,```2^F#$``'$,1EA,90`\```,G*I88=1L4#$(C6RU&F#% XMUPD`5I8U*=+DB90L)*P`,!&*!8!18@#X`K11$0,9[<95,&)"$0$>/>A`X`&" XMSLL$=0HD^=-N1K)U1"`!F+$M"1T7+%W2I&."1P(Z(EC`X(/"Z1\2`[;)`;%H XM6E8Y&KY:&*!-C@09Y`9@D\-@W;,%V^@82.0!1-M=NL@`2&<*P**Z#**MRQIH XM'P`!=P[L.DS7KHE%%@0`8(1M!;1[P@#`J[,@FCC/H,6M(R!4%[Q_H20`&#!, XM#H$=T.X8T#4)P#HR0A-9@`!`'V5'T!:)V[N!]XK*@.5$`D-'!+BPX2BD!7Y":3F%UB$!+G&,*B$``7044*,@!HBQP``SD]*`!`(D8`4`=,,H%!-?IN&$`*%)3 XMG,=Z"V=ML%O!VWYP:D0\8_@1>`8P&%EX.$3=@-AAT0HYA<*!T#H*-&`NA, XM<0`N,B0`Q:/6%KNGDPHW;G(`HR`L:B@D1P/.V_\0`@0!;'N<#@;_@-(WU8IX XM4`4!,/RS`S;,IV.`P0:8F,+2T0]_]`Y'GCB`X;B&C@@D(!0@,]_;_B*R1'`" XM'P,(A=(200@&$(`H;`,9ZA+6F*4EC0!UZ`#Y""!!>`R"%^N#W`-6V,)_,&)] XM_\C5`3"GN=IQ3FYT,P`Z1"%$!4"/$P:@GO6P5Z!.=(!'[9N>POY2OG$,XAH:,*"$#'.5Q6O>MQLD#H:"7W XMF%/%13@`9#MX1&:TV(<%K+!0?F"?`TA&PS2^D(Q8TQK8+-&/17!B?2D@T`&( XM8L'U69",Z0A$/WA(.]MU+HCHF`V?X@"`%,CQ_ZR)@`Z".$O&>,B`880 XMIW4Z`)Z(8(1U>E`=NF2L#A'H(1P XM=:2"G)N;*!`_%X@##`]&`>B'2$-Y`(ORC0#ID`<_0.K#VZ'3'65$X]M>&,.L XM58X#S\10'2K0S`E>DP#9]-@QU(E XMPQ'\:)S2`E"'!N109.%26NG2H0=^^+&IZ8C#3/.I-2!`E)URXX1U?(JQ`MC5 XM#A_))V#1$8T!0!1WZ1`"/R+$G-EE3!$.Z-PCK%.Q`J0C!7/-7#E_B+O&68RL XM"0B7Q=::@,7*#$>J>"BU.#.ZTJ%#`'Y;0`X]AHY\#""*Z$##`'H0R5%,<@*X XMV($J"[2.98'2`*+\!SI^(,3"2I6)Z)"&<3FZ%U;L@Z;F'*D0/;!;%4@R43!R XMQ'4=Z\-0-`UW+"V8+',GAWWD$&78Y2PZU=`\:13@I.F0PCY8:M'&H0QRH0T@ XM`0;(@^MZK%!>E0%Q/%#%?QP"AP90ZACANH'Q:C:DY_Q<(P3PSGCVP*)TD$!\ XM18J[=81CQ``-8FL9*@X!4#<=RM#'B#/\/P.@#!H""K:V#;4E>1SE"D>3E)3++V'@O`=!Q XM!P&@XQL$P.\7],%?`!3U-$R-XE*AN9<@Z`,71,-1BPW7/QGH`QT^L!,%`'`/ XM%X#L;:$0F?D&H$:/<5`+*1MTH0^M1D6#@]%%Q<F)&/*@,!`2,`P#L.`&5,'.`%`/#"`70`@'`8 XMX`<`0(8!JI,)`T02`P9X2"(*(`*L%:`/```&`?8`@"!;U!0#2```E#``$(Q[ XM`+[``0!D"EG5?P!`E]'`SINRTA5(N). XMJC@#)L`GAS,<'2S`.,.?-:8.8!P[.-I#`G@T"&(@H`O#0)&*6.0B&!G@'ML) XMA<<*/2YZ[@(!`,C$/?81BP%DC0#3`$<*2'0,(QB@="-RMA$(T(=1_>#?P;@` XM%+V^#G-T_>M^\?H.2%1V7`3AWZ)0^\#9;HZ>_SSH*1(`T0'P(GW;(^E-*U0> XM*-"X!!R@)@UH_`&>DC;'B^)^YCV`XEFP"!OD:A%$$``2$A'Z0N&!`8M@WT/Q XMH8@.Y&\=LO5\@7;0I$5@@RZ.7T?:FC8*QTO^'W7HHP$1A`X/#M85[DWC!!R1FB1S7S1")UD`#+ XMDSE&L`#KP`R*$(;D$"HA$"=;&(-5$P8`P`=SJ'\]H`>5@P",A8)`5X,-L`Z# XM0'_$D((;N"+65WBY0`])1UYODPB#%0#^<%A!!(;G5S75L2OQ)8D,%0[5!%@E XMA@QMF(D](&U:0P=#4FUU0`2=.%BW$(H1%42*X`5>V&%B>'LD0@>/0%!;0PVO XMR%"+((LEQ@NE6%%;PP#H\`_]$"X"M!=<\`_'2`Y^-WTIP@`>""/\,`])%VJC XM-D%9%0WCX(D#P(V,`&F043[BL`CRL`@8M`]"XS&+T`B?E@@WM'H#0!R%T&H< XM1$9I-6``T',,8(WL\!J+"".EP(WL4%O\X&_?I8H],(,8$%^9AU[(-87-APV$ XMU9#`YENZL@3&AP[`T)#>Y9&(@SD^]5<`8(#6\0)\E3$JR9(&H`+&UU?HP&WK XMX`#Q)9,O<),-:5$FZ0#&]X?$0`!`9XA&N8'55W3I@`_MN'T^0#E^``,3"#W2 XML%\&\#A^08`%(),(Z'`*^&^VP'+'!8$92)`&R92M\)3!B`[U0!RB&$1.5C7> XMY5.J\V%;HY%[T'S3T);(`)>S:!USV0/`9I<4T`/>10?88$IX60>A@`Y$T'R< XMT'-)*73.=I#I4`-/&2<*(`A$2`>48@PI68L,D#\F`0/ML`/+D#4*4`?B,'I& XML#K$8`!'>8*S29`8D(U-&0_;T746904CTDI>X`&-X`0"$`59`P%<1`'HD`YD XM.2((T`A>(`!3()T*,`53L`LA``!30$_HH`H\U@,#$$T6<)>M`Y$1L#5^6#`] XMAP&UV9X$Z0"Z:0F\R1UV(`$N(8-1!I'B1H-&(`'K<`Y=QP!@=Y_Y634ML#6B XM8P0,T%$/$"?XB3]5LP*04(')H`L6E7`"`*$9>IKM,`CI``,S(`V%D`QY$`#DE@T3(`RLR44( XML`Z^8"X$JCKW8`4*<`\M.@A>H``S$ILLB@`]YP`$>9E,V0WP0",V2$^X,*4L XM*GC8,`-2@0) XM<$GH<`U,V",&2@0!8#<42CS;8#S;,`0'B@A3F@[LX&:&T``-`'4^)0A^`&(N XM(QF#P5@L"@`+@`V!L`P`$`"X0`H!``53P*<0@`XUH%I98P!?@Z?$,)##@`N2 XM`04X1Q3/:@=")`\K6@Z\ZJNX0!+!*AE7EPZC``#G"CF_:AL"@!U_<:O%&J[1 XM:@X\5JW7:HC:&J^JF*ZV,0",=77K<`8".Z_!BE7X:JS(&@#'>AC+VJSZB@Z= XMT*]>]Z^V&;"]*J\$NZ[1Y#<>`+!`UP-W`#FKT`-RL#4P<@;_T`-V"#;_X`_K XML(Y>9SXM)`B\\`4@-@&!X`3D$G<44``$ZJFD9P#K4#A`>`Q$`'=AYZF(`*J@ XM-QV*.D XM>P_1<`_:,`C9\`^^8&Z26*_V,`/_$`WN$`W?$`W8$`W;,`<$,`#Z,`'Q\`_& XM60?M$`V$M0T0);IYT`"F>P^H.TI72Q20>Z@BX@400![_L!K;D!7880".``R/ XML45>]QA'(`#LBP#&8`0%H`GSJP#+,+\$P`F,8`4"T`ACYU,LNB-_L*)W4#A7 XM8`"+\`0/I4!?(``>8`!3P*(6H!U'@+X'X`C8@`5;\`]==``?,,%>0`&)L$4, XMG`@)G`@'G`@%G`6)\`0"(+8;F);7EPZ2T`Z]22(\2*>#U@<3L`O_=`_KL!_6 XM@PZ'4(E[)P!:UG62$9!^(``4T`=FU:?197`D@H.!RJ>Q]`4!4P[=6P6!P($! XMH)LZ@,/LT`B&8`'S8@2V8@L4$``'&BHP`@]^(9IUI0@0C`>V8@-4D`!LL\F( XM(*'K<`JXL,G7@[;HH`P[5P[KD`D`K`!0`,`.\,I&``'7X\8!H#A=7"A9PP!@ XMHP<&XW6ET\=O'+53NC]>M3N/',F3[`&7S'*:S,D&L,GNJ`A#``&?3#7KL"/B XMJ@A"``%4LPN;/`6#D\HUJ+2\P&4)@`2%,@J7O"//W,D[9P0(<,WDD`X0P#ND XMK,7H,`.IG`X!\`^!<(@!0)!+6<,?P!W?/"(04`+CN0Y/4+<'V@!`$%%^(P5@70)0-[!0 XME]78T0#F9M9Y_`_%B@@]]J$1FJ$3`BSO0A^,,]%,-IC5]J! XMR';!4-BH&G=A?1@4R*>W[06=.LMBS2;4C0Z\@'JF6LFAUSADL*0TT-:K<2DX XMM]V"X-UU2WHQ[`/C#3D^@-B24=@8DJF,;=KF/20`4`!U0"EHZROH\`?>C=CI XM:=^+K=S#0-J-O8%<6L,"H`XBPJ!3W0`!8%A>P`#B^P?B'*CH0`!(G*<$20&Z XM20WI,.$,+?JJI6L^@,*-& XMP`&1[47I8`@`T`,DX02[X`D+,`6B(.4950$\@MH`T*&2`0I23C4L XMZFS#X`=&`)TU6#C!+>5@**$]L(-E5ZS>N@`L6A2.]^)`]R0DL`N^0`)9XP!\XG5P[@5A<7M=]`]68"NBZ#?GL^C$P..F XM+G=#S@#U6T,6&KMW)#B=>EY)Q/@"`1>?5RNC#8"Y? XM1P>Z@`M0A^S*;F[>SB?=+NM=O`Z=@`O'3NY\\\D@[/VN^GU.[I4`3_<#7G@`%01PP8L(.:@`$6%?&^ XM0*#L1@@_D`$Y(6^D$`09,`CW]@[KL`EA9^WO'N,;[XP=5<.;S[A+#3@[K@`/0N0)>AP1$H7@! XML`2YH#!1T.$RC@XDXNRRR>/K\`LJ6H,K"NB,AN>?O`ZMT.:0@PI6`SF^<+/F XM8E%EB.T5*O!5NO6-'M0\3@<9L`D7T`89H`,8X/<[E3%S<`#18`X<'P,:L`[> XM('0=B)G>8`X3C@$JCM@M'M2(R*?,60GZ8.-LG.,N?HA$O=FH:C:-H*R1CK`. XM@`LKT.E^DT2D)O8X`Z/_:]G_Q5`_<1T(8#8#<[&#GS XM*P!FY00*//]U=5?3B0B<(.5*'DWS[`4#P`>U@$E2KAUR(N`0-H]O7()_OSTH`&1H`&9H`&AH`'^8%4N1/B&C_CS1@%[C0U"-]*8N0_DL!W; XM?0R:1BV4S!GX33#Y/?IV^^/+DP#8P;T-KOE\BJ%V$#`!/BM?H$#E4*WZ)-Y+ XM&@&6O]@$D]]$7?\$H."6J9N`0`[;X>%,H&G4 XM3P!Y0.L,H+940]<1]:CF(E2TS@!J2S4-P!M?J]+(Q(1_ZMY5FP@/]:=J2ZDB XMJOY!_7=Q@GJA-WJE!PRGEWK_L'JM]WI4^J?H8`](;'N+<.T^1Y"(RI3WL(X) XM'3`&R@5L"M#C(*)9DR@SGZVC+P%["_=;H+:4*E118`7H$`K;OSPSGZVCCY]W XM2PX-(!E?"WH*D+6C1P1:!0QX\*"JY]3NB`BNUWQ3C*%V$*U\,",]@@V+<.W9 XM.OKX>;=LBR%T@`/F*0KG8Y\(0/2]"O:*4`"?'*EUL'U%N:6Z^0?G<]*Q1J`!Z0,BP``@T`=NP)D' XM:E>LMX^ER;9OC89U+OEVH`"<30=)H$&`&FN!84>QR4$D@'IVH`"<;9<38%>L XMMX^ER;90YY]U_@V-L`XK:0!/(&ZP$`"S(`#&8`#/8P#& XM8`!3"@SA0@8*H#"Q``KA@@8*(!FZH#!2(`I=D`"BX`0)@`@.8`8*@`@.(`8* XM@`@>L`8)@`@>P`704PPS6@XE0!+J!PI;*A"1\.%MPC?<+8*<*!VG3_[4P<7P-EWBI3+C0!@OP[7P)D' XM:M?Y\QR+<.U%.;:8R0/?<+9I*Z%G>.;K\*4!+L_$3:6QJ0@%\,F16@?;5Y33 XM%\8.,,:8.0#?L!UHK,:[O`BVS-E@0\>+8,<```2%?'R'+,SS8HO]]0^V(`'_+*[H XM4`G$H`L`,(,NQ_`^V##HS2BVL"39\\,M-)0`"TX`,,,@<#,`KC XM/7V]:0#Q[1=>\%!.4#A68`"T\`,,,@<7,][8,7V]:0#Q[1=>\%!.4#A68`"T XM``0,,@<7,][8,7V]:0#Q'7<*0`OWY`4/Y02%8P4&P"!S,`"C,-ZVMPC",'V] XM:0#Q[1<30PM!P"!S,`"C,-[3UYL&$-]^,3%A1PO\Y`0(P"!S,`"C,-Z+$`S3 XM][TI`P!$$"+",'W;P:?_8P=CA@_#88"$*F10S7= XMR^W=L@3>_<4I0L.%]PG<0",*@R,NX-U@*`"1&CE4T[V,A2,7X-U?''BZN0;< XML!W3B$G=B@[T4*K3&-+4IYM#P`TT,IXX(@VE&M+4IYLFP`W;,8V8A"$X\@JE XM.HTA37VZZ0_2RP[3B$FM@R.'4*K3&-)"9P.Z:0W2RP[8T748^LL44-=VH`.% XM?'S[T`*[G#46,.G)2?P*4X,ZL,MQH@,'"NW!C0:ER;880@=*8"X```,YT744 XM(*)QH@,UJ`.A_@#D&2LMX^ER;880@?+\I^^+<0U XMJ`.%#-#QL1I1_9_K$`UQH@,'V@-LL#4)P%@UJ`.3WG4<4*`Z<*#ID`HQ[`?_ XM1`=J9P<^D'J#0"X3Q`4SR@"8ZP%P$4@L`X4$"<^D'J#0``S^J4<$/\@P$4>\'8+$'<&@`21*.]&P!7#Z1,P XMBC6#Y0BK(PQ4&0TM&%%2(`(CPA7#Z1,PRE"JDS4@P$5[8@0@L`!&X`%UD*26 XM0U:#TO1O8PQ"(`(M4*T`+`)AKA:XL```P/1S$9M4`>^`,`B$.9JP>T`P/1S$9MP!5.4++;$`CA0#J#$`Q4.0T1I00BD`OCR:)<804>$`W[ XM$`W:(`[ZP$4@(+X?4*V)8`4>P$5<800@L`!&X`%UX`L`+`)AKA:XL```P/1S XM$9M(`%!'W%^X`.+4`.+8(582-.J"/;K XM\(0^D'J#0``S^J4(`*+X`24GPQ%Z@1SX04< XMD`<#`*4&8"X:(`!U8`%O[[;8;@!\<+7&`PQ`D#4:\/85RKP8$/\&8"ZC?EN+ XM[@=70P=Q^)]V98NLP:*4OPW5B@<#$`"V:"ZJ00%PC%?0X#X`>WM>CGLC4I,"(6,'<&X`=Q XMZ'5;%W%&8`'JC+5&8`%X$#!VP`,UR`,C0@&?7,Y:9BZCOG-VP`,UR`.&W0+F XMHN;P<\4(,\8-@PL`ZT,"+PXP24#PQX@`(JJLY8&YMXH,T\4(,\0-PI XM/^2*4`!EGPUQP@,UR`.�/KX`SFHAITL'-VP`,UR`.&G:+_JMW419P06H,Y8:P06@`# XMX@%^T`!;-0J`T`!T(0C)-_/11]0V``@-P/-E)`@-X-X;3="Z&0_3L!TX-ZA^ XMX<71MZ6Z60W3,.$*H'@S;ZCAP@<[N.4&X`<[N.5CEZPXMQ@$,`71PV.Z3(8S XM;ZASRJ(4PP<-0!=^,"BQ"9L*L#P9@'.+00!3@`X@P&/+$\\#9@!^,(C<0"O_ XM8(AZ*G0T7'A0,`U))PA.:#Y$,0E?G"**R)0R,`T3S@#@"@57QT5"1*A>[',$ XM^?A,R0#3,.$1-\(^L:/H8``(\`?8ROY&4+080L&#,`T`T`+=LPU1M@@+WD4^ XMH0L8@@X@@&Z`,"@,,.F8.Q<97M5R3P=B$"<*''K"IPUEF'KM[3=8SJ!QHL!<(`#/D0A<(`#B*(X!8(L^D@(& XM(`B#@NOL+^]?R@$];XOK@`FY4-]LS**!,0[1``WBH`_.B@[OL/VLN3PYT#A^ XMX.:HE^&CP`<-0!=^,(@>$`I^X(02Y`%\T`!JH:([$-6V>*<^$@`&X`>#$IN` XM.`R&B(A"IXA,^0[1,.$.`*ZES`!7QT5"1*A>[',CKIO&$`THSJ(:X!,[*I(& XM\`L#1HJ])RG`[:,,B+P`4"(([BJ!:+X`3R XMB0Q<9`!SD`%QP@")\%"S[-Z+8`SM?;4T/W9SYP!UD`(3U$KGD@A/%'I$L0A. XM``$#@`R+8`42,`'3D`A-,*/'T-Y72_,,.G<&@*9@G0(&(`@CA_=$S:!S9P!U XM4.9V\%!:92D1YP7RB0UV\*"SG`(&(`@CA_=$/()_84`L!S95!V+X`0*D`$.T$7T],4IHHA,.0#!D=`,`*XX$@HS4@[5>H;5N*U! XM_7="1\.%1PW/D'3)\1?+\1P^L54_F@0!X`'5$0$.T$6CL!Q?G"(/Q0Z82ZS* XM<*?8013Z%DT"0+EWZA,[F@X"M0A.$'.`/VX+JE&[NS6[LI5`C2@`<9\`OF)H[1``W18`T[(`]R,``K(`]#\`1U XM``\^L0C6L`XA\`N\(8[1``W18`T[$`]RL`#NMP/"(`<%L`+"L`'Q,`1/4`KXP]DE3E.T!;O``C!``.(H`04$'[^0`%\H`Q=!P%39`0P XM$"$[0S<7`$$4``\H`-\H`'&(`05 XM``/^(`2-*@04X`3X5H.`Z@008"XB2@ XMP`,Y\`<:0`(/D)PC3;@RD`@/ XM]9\]AP)$S<;WH#4```%U<@_8$``,JM(+X'4+(,\+$)M@0Q)=YP`H\R:#+LP%X$`&^@"$!("<-=,MTS+QM<0WH@&TUV!;/,"(.8'I! XMT`/_<`!_<`.Q@'7@,.DJ'>:+X`2%XZ2*8`V*$`^*T`R*L`Z*\`V*P'K$\`OC XM";W$&PW9$`W:\`1U4`\E\`#$RL8B%SA_(-?`0!0^L:-Q0@/WH#5,S3P[2-5/ XMFPA\%!.H,!64#B]&@WG$`W2 XM$`V0,`#3$`W0@)>NT0(6=01.4`?JH$^8.Q=64,F]NN"Q:3[TCP#1``V4W-'0 XM4*U%#0U7M^#8X!,Z"PD#``[14%C7'@T`H+/1,`P^\0M?MPA#L#1+,&;<,"-; XM<+S7'@U8,P0$\`1/D`?HL.!C%^:+X`2%XZ302[S1D`W1H`U.4`?U<'5<-!=. XM4,E.>NU^@#?QS`)=YQ$`L*=6``,WSKPN$'Q!6SH(,`SWH#4`8-4&6S##X*W! XM@`50@`L`-" XMO'/$T`+E``"Q@'7HT`,,/`>8@@`3X@$KD!VZ(`$!X"$AL`P>X`L8X@`?X`C% XML`+_P#``,`^D\`$N$``ND`(!X`(!X`(<$`!"(11"(11"(11"(11"@<8_0`". XM4`Q9\`5>T`6=`!R\D*R<,`51(`56<`55X`$>P`C%D`N2,0X?X`L=```.\`&L XMH`C@H`+`,`#%D+X+40R7T`J7\!@5L`J+H`]"4`?W(`[FX`O@```.\`$6<``K XM\`^YL`0`,`^D@,:EH\&^,`TZ@,:ED[Z_<`Y#T`\6$`7+$`WG(`<'P`C`D*`( XMD+Z'+P<'0!D)B@`:G`_1X`WY`+RL``WH,`<#H`CHP`J*@`S1D`_&"PL`,`^J XM,`^D4`?.`,)=\`5>H`59L`7G_@,$`!R\D*R9)`'J(!F0@``:"$-"+D1/0P`` XM`P``!+X#!0``<0Q$6%.U@`D```P@(#40,40$B"EOZL@94P:$D3=RVH2A0Z>, XMG(`#3D"14X9B'A`;T[BI*.=$`P4G3Q(I,F6(E"10J"1YXD3'R8`%J*!),P<$ XM'#EOSL@)TP8$G3!KRO0,TU,DG#IT0(0!0=#@G(0+&_H$*I0H"!!FTK#1&L8- XM&1`W(14P`U$BG9X@TD2](Q>-430-?[Z!8S&NV3(C>[*]6";,&+MSCE9L`YB. XMBZ\Z&Z8M`#'-&9%AV/A]&C7LV+@].;HA6N:L5+A30;@0$F3)5\]E6'PM:YH. XM7K0*<`YV6]%T0CJ9-&XEF0;`1J1T.G31OW$AEP^;-G9[9_9)I?%WM6#ME:$;'&R"( XM`1U?8Z01UG%,@05443$812`.7\T!AW%SA*?3<%L%-511D]%%'PCQL?&1''7( XME^)^%Q'QQ!0@R.`"#%*E5QQ)CZ6D0!).6/'$$$'(1)--N4'RP!!";`:59R!L XM(=)^(W6A(T[?T<$D)`6W`L=Q9%@%UD8-EQ#9;3W'FM]M$)($VW1M1S2&1'%$! XMEM`9=@WH4QICK/%5'7#T1\$<>8P4!AX@!`I1AE.J]21_D"20IG!+35='&P9> XM9,:#($2H*86:6EA&@F9\])RH;MR:*XEF?'DA0X)!E*IA=KTZDGIE`,B&F6C> XM%N=^9H11!QN1/BO2&8[2X(*.2!3!!!1$XD1%'GZZ@2Z2(#1GEQL$PC:==&3P XM!$=Q>=0Z1YN4YAE@J!RU\:HF225+!$1:L%J'`F"#P,$5]%@3$+0LU34%%@&8,U XMA*(;LHE&VEE$4[%::P5^A*0/(.@\`,XCB#0&&W7L1U5B`;_A`AHB3$9&0F)\ XM-I0;**0PV0LJX'0$8!9-U-!4;Z]=5+*X]F4@'7<4*A\,,]9X5@R)0X*`"B], XMMH?:;+N]PV2)3<0I""G.89D;QXD4::%G]0`"#)<764!B*(X1%4=GV)$9"'OT XM5X#H4N'!@ABZCZ$[&;I[SD+`P\_!@E([V-Y'ZCBQ7H?K(,`NNV:PSY'Z9`J" XM@,(`%(+!!#6HP`QNX XM`((++)WV9%"#&-Q@!EFKX'%6T*L9X(`&.0A?"3*XP0XF;WP=40C(VM[JIY6Z@&TI%DM,W\]@JG0NM>5(7:SJUU:(("[4^VN=[\+ XM7AJ&-THR&`]Y_4G`\B3I/.A);W;5NYX?L[>][GTO?'T,"`3(9S[TJ8]][L-2 XM_*8P/U`=RPSW>T_(]E