page%swap@Sun.COM (Bob Page) (11/13/89)
Submitted-by: altger!vyrus@apple.com (David Vincenzetti) Posting-number: Volume 89, Issue 215 Archive-name: applications/crypt.1 [uuencoded executable included. ..bob] # This is a shell archive. # Remove anything above and including the cut line. # Then run the rest of the file through 'sh'. # Unpacked files will be owned by you and have default permissions. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: SHell ARchive # Run the following text through 'sh' to create: # extract.c # main.c # xrand.c # crypt.doc # makefile # crypt.uu # This is archive 1 of a 1-part kit. # This archive created: Sun Nov 12 20:55:27 1989 echo "extracting extract.c" sed 's/^X//' << \SHAR_EOF > extract.c X/* extract.c */ X Xtypedef unsigned long large; X X/* XSpeed is critical. XExtracts and returns a large number using some bits "bits" from its Xfirst argument "n". X*/ Xlarge Xextract(n, bits) Xregister large n; Xregister bits; X{ X large value; X large mod; X register large nn; X register i; X /* 128 bits are enough - static is faster */ X register char matrix[128]; X X if(bits > sizeof(matrix)) return(0); X X mod = (large) 1 << bits; X if(n < mod) return(n); X while(n > mod << 1) n = n >> 1; X X for (i = 0; n > 1; i++) { X nn = n >> 1; X matrix[i] = n - (nn << 1); X n = nn; X } X i--; X X bits--; X value = 0; X for(; i >= 0, bits >= 0; i--, bits--) X if(matrix[i]) value += (large) 1 << bits; X X return(value); X} SHAR_EOF echo "extracting main.c" sed 's/^X//' << \SHAR_EOF > main.c X/* main.c */ X X#include <stdio.h> X X/* XIt is strongly raccomended that you choose a key as combination of uppercase Xand lowercase characters, digits and punctuation ("," and ".") X*/ Xmain(ac, av) Xchar **av; X{ X char buf[1024]; X char *key; X int i; X int len; X X if( !(key = av[1]) ) die("no key?"); X if(strlen(key) < 15 || Xsrand(key)) die("bad key."); X X do { X if( (len = read(0, buf, sizeof(buf))) == -1) X die("read error."); X for(i = 0; i < len; i++) buf[i] ^= Xrand(); /* too simple */ X if(write(1, buf, len) == -1) die("write error."); X } while(len > 0); X} X Xdie(str) Xchar *str; X{ X fprintf(stderr, "Crypt: %s\n", str); X exit(10); X} SHAR_EOF echo "extracting xrand.c" sed 's/^X//' << \SHAR_EOF > xrand.c X/* X-random number generator */ X X#define KLEN 15 /* key length in bytes */ X#define BITS 6 /* get lower bits */ X#define TRUE 1L X#define FALSE 0L X Xtypedef unsigned long large; X Xchar *malloc(); Xchar *realloc(); Xchar *fgetline(); Xlarge compress(); Xextern large extract(); X Xlarge C, B, XN, modulus; Xint W; /* word size */ X X/* XRandomize given a 15 valid char key. X*/ XXsrand(input) Xchar *input; X{ X char bits[KLEN * BITS]; X char key[KLEN]; X X setmem(key, sizeof(key), 0); X strncpy(key, input, sizeof(key)); X setmem(input, strlen(input), 0); /* get rid of ps -f */ X X if(tokenize(key)) return(TRUE); /* illegalities */ X expand(key, bits); X X C = compress(bits, 0, 29) << 1; /* 30 bits */ X B = compress(bits, 30, 58) << 2; /* 29 bits */ X XN = compress(bits, 59, 89); /* 31 bits */ X /* modulus equal to (2 ^ (W - 1)); W is the word size */ X W = sizeof(modulus) * 8 - 1; X modulus = (large) 1 << W; X X if(!modulus) return(TRUE); /* should never happen */ X return(FALSE); X} X X/* XCheck key characters. Make things compact. X*/ Xtokenize(key) Xchar *key; X{ X int i; X char c; X X for(i = 0; i < KLEN && (c = key[i]); i++) { X if(c >= 48 && c <= 57) c -= 48; /* [0-9] [0-9] */ X else if(c >= 65 && c <= 90) c -= 55; /* [10-35] [A-Z] */ X else if(c >= 97 && c <= 122) c -= 61; /* [36-61] [a-z] */ X else if(c == '.') c = 62; /* [62] '.' */ X else if(c == ',') c = 63; /* [63] ',' */ X else return TRUE; X X key[i] = c; X } X X return FALSE; X} X X/* XExpand an array into bits, reading "BITS" bits from each character. X*/ Xexpand(in, out) Xunsigned char *in; Xchar *out; X{ X int i, j; X char c; X X for(i = 0; i < KLEN; i++) X for(j = 0; j < 8; j++) { X c = (in[i] >> j) & 1; X if(j < BITS) *out++ = c; X } X} X X/* XCompress bits: suppose the "bits" buffer has the form: 0 0 1 1 0 1 : Xthe instruction: compress(bits, 1, 3) will return the binary Xsequence 0 1 1 converted into decimal. X*/ Xlarge Xcompress(bits, start, end) Xchar *bits; Xint start; Xint end; X{ X large value; X int i, j; X X j = 0; X value = 0; X for(i = start; i <= end; i++) { X if(bits[i]) value += (large) 1 << j; X j++; X } X return(value); X} X X X/* XGenerate a random number. Currently only 8-bit numbers (bytes). X*/ XXrand() X{ X register large A; X static large XNplus; X X A = B + 1; X X XNplus = (XN * A + C) % modulus; X XN = XNplus; X X return(extract(XNplus, 8)); /* wanna bytes */ X} SHAR_EOF echo "extracting crypt.doc" sed 's/^X//' << \SHAR_EOF > crypt.doc X#:ts=8 X X Crypt v1.0 David Vincenzetti 8910.15 - vyrus@altger X X Crypt reads from the standard input and writes on the standard Xoutput. You have to supply a key as first argument, valid characters for Xthe key are upper and lowercase characters, digits and punctuation. X The security of encrypted files depends on three factors: the Xfundamental method must be hard to solve; direct search of the key space Xmust be infeasible; 'sneak paths' by which keys or clear text can become Xvisible must be minimized. The program fully futfils these requirements. X X The kernel of the cipher consists of a Linear Congruential random Xnumber generator as introduced by Knuth in his trilogy "The Art of XComputer Programming". The period is maximum equal to 2**31, the seed Xis a sequence of 90 bits extracted from the key and therefore there are X2**90 combinations at all. I have been studying the algorithm and some Xalgebra theorems for a long time to develop a cipher which was simple Xto understand, fast and suitable for most computer applications. XNo doubt the choice of key and key security are, as usually occours Xwhen we deal with human behaviour, the most vulnerable aspect of Crypt. X X Version 1.0, released on impetus after Cbc1.0, a block chaining Xcipher which uses Data Encryption Standard, very secure but too slow for Xfile encryption. Most features which I would like to see in a real Xcrypt-o-program are missing here, I will do better in a future version:-)) X XAlmost forgotten: this is public domain, do whatever you want just do not Xuse commercially and notify me for changes or enhancements you might make. XWhen hacking the source code beware of modifying the algorithm logic: Xsmall changes can completely compromise security, complexity does not Xmean strength: things obscure to you will be transparent to the analyst. X XEnjoy this program, math and your life. X SHAR_EOF echo "extracting makefile" sed 's/^X//' << \SHAR_EOF > makefile X# :ts=8 X# Working about Xrand random number generator X# David Vincenzetti 8910.12 X XSRC = main.c xrand.c extract.c makefile crypt.doc XOBJ = main.o xrand.o extract.o XCFLAGS = -n X Xcrypt: $(OBJ) X ln $(OBJ) -g -o crypt -ll -lc Xcopy: X shell -c cp -u $(SRC) ws:crypt SHAR_EOF echo "extracting crypt.uu" sed 's/^X//' << \SHAR_EOF > crypt.uu X Xbegin 644 crypt.exe XM```#\P`````````#``````````(```5:````L0````$```/I```%6D[Z!.1.5 XM5?OX(&T`"BMH``3[_&8*2'H`I$ZZ`,I83R\M^_Q.N@/B6$^P?``/;0XO+?O\L XM3KH`XEA/2D!G"DAZ`(1.N@"B6$\_/`0`2&W\`$)G3KH$$E!/.T#[^+!\__]FW XM"$AZ`&EA?EA/0FW[^F`8,"W[^D'M_`#0P"\(3KH"KB!?L1!2;?OZ,"W[^K!MS XM^_AMWC\M^_A(;?P`/SP``4ZZ$2A03[!\__]F"$AZ`"UA-EA/2FW[^&Z03EU.0 XM=6YO(&ME>3\`8F%D(&ME>2X`<F5A9"!E<G)O<BX`=W)I=&4@97)R;W(N`$Y52 XM```O+0`(2'H`'$AL@,).N@,V3^\`##\\``I.NA&<5$].74YU0W)Y<'0Z("5S2 XM"@``3E7_ED)G/SP`#TAM_Y=.N@+R4$\_/``/+RT`"$AM_Y=.N@=23^\`"D)GF XM+RT`"$ZZ`L!83S\`+RT`"$ZZ`L903TAM_Y=.N@""6$]*0&<&<`%.74YU2&W_M XMIDAM_Y=.N@$44$\_/``=0F=(;?^F3KH!7%!/XX`I0()F/SP`.C\\`!Y(;?^FH XM3KH!1%!/Y8`I0()J/SP`63\\`#M(;?^F3KH!+%!/*4"";CE\`!^"=C`L@G9(? XMP'(!X:$I08)R2JR"<F8$<`%@C'``8(A.5?_\0FW__F```((,+0`P__UM$`PMC XM`#G__6X(!"T`,/_]8%8,+0!!__UM$`PM`%K__6X(!"T`-__]8#X,+0!A__UM[ XM$`PM`'K__6X(!"T`/?_]8"8,+0`N__UF"!M\`#[__6`6#"T`+/_]9@@;?``_B XM__U@!G`!3EU.=3`M__X@;0`($:W__0``4FW__@QM``___FP2,"W__B!M``@;S XM<```__UF`/]H<`!@S$Y5__I";?_^0FW__#`M__X@;0`(<@`2,```,"W__.!I+ XMPGP``1M!__L,;0`&__QL#"!M``Q2K0`,$*W_^U)M__P,;0`(__QMQ%)M__X,1 XM;0`/__YMM$Y=3G5.5?_X0FW_^$*M__P[;0`,__I@)#`M__H@;0`(2C```&<.] XM,"W_^$C`<@'AH=.M__Q2;?_X4FW_^C`M__JP;0`.;](@+?_\3EU.=4Y5```O$ XM!"@L@FI2A"($("R";DZZ!6[0K()F(BR"<DZZ"B8I0():*6R"6H)N/SP`""\L9 XM@EI.N@`*7$\H'TY=3G5.5?]X2.</`"@M``@Z+0`,NGP`@&,*<`!,WP#P3EU.= XM=3`%2,!R`>&A*T'_^+BM__AD!"`$8.(@+?_XXX"X@&,$XHQ@\GX`8!@L!.*.0 XM(`;C@"($DH!![?]X$8%P`"@&4D>XO`````%BX%-'4T5"K?_\8!I![?]X2C!P+ XM`&<,,`5(P'(!X:'3K?_\4T=31;Y\``!*16S>("W__&``_WX@;P`$(`A*&&;\) XMD<`@"%.`3G4@;P`$3*\``P`(8`(0P5'(__Q.=4Y5```I;0`(@EY(;0`0+RT`T XM#$AZ``Y.N@7.3^\`#$Y=3G5.50``+RR"7C\M``A.N@EZ7$].74YU3E4``$CGW XM#"`X+0`(3KH-TC`$P?P`!B1`U>R">$I$;0JX;().;`1*DF80.7P``H)\</],! XMWP0P3EU.=3`J``3`?``#L'P``68*.7P`!8)\</]@X'``,"T`#B\`+RT`"B\23 XM3KH/M"H`L+S_____3^\`#&8,3KH/>#E`@GQP_V"T(`5@L&%P0^R"6D7L@EJUU XMR68.,CP`&FL(=``BPE')__PI3X)^+'@`!"E.@H)(YX"`""X`!`$I9Q!+^@`(7 XM3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(*&9@PN/``#@`=.KO^48`1.N@`:4$].7 XM=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R"3L'\``8O`$ZZD XM#U8I0()X4$]F%$*G2'D``0``3KH/&E!/+FR"?DYU(&R">$)H``0@;()X,7P`@ XM`0`0(&R">#%\``$`"B!L@GX@+()^D*@`!%"`*4""BB!L@HH@O$U!3EA"ITZZ! XM#PHD0$JJ`*Q83V<N+RT`#"\M``@O"DZZ`*XY?``!@HX@;()X`&B````$(&R": XM>`!H@```"D_O``Q@0DAJ`%Q.N@\D2&H`7$ZZ#N8I0(*0(&R"D$JH`"103V<0N XM(&R"D")H`"0O$4ZZ#?A83R\L@I`O"DZZ`HPI;(*0@I103TZZ#?@@;()X((!.9 XMN@X8(&R">"%```9G%DAX`^U(>@`J3KH-]"!L@G@A0``,4$\O+(*4/RR"F$ZZ_ XM^7Y"9TZZ#!)03R1?3EU.=2H`3E4``$CG##`D;0`0(&T`"$JH`*QG&"!M``@@6 XM*`"LY8`H`"!$("@`$.6`)D!@!"9L@E`0$TB`2,#0K0`,5(`Y0(*:0J<P+(*:V XM2,`O`$ZZ#>@I0(*<4$]F"$S?##!.74YU$!-(@#H`/P4@2U*(+P@O+(*<3KH!$ XM?C`%2,`@0-'L@IQ#^@%$$-EF_#\M``XO"B\L@IQ.N@$Z(&R"G$(P4``Y?``!4 XM@I@P!4C`T*R"G"9`4HLD2T_O`!00$TB`.@"P?``@9QBZ?``)9Q*Z?``,9PRZ, XM?``-9P:Z?``*9@12BV#8#!,`(&UZ#!,`(F8N4HL@2U*+$!!(@#H`9QX@2E**" XM$(6Z?``B9A`,$P`B9@12BV`&0BK__V`"8-9@."!+4HL0$$B`.@!G)KI\`"!G? XM(+I\``EG&KI\``QG%+I\``UG#KI\``IG""!*4HH0A6#.($I2BD(02D5F`E.+Z XM4FR"F&``_UI"$D*G,"R"F%)`2,#E@"\`3KH,QBE`@I103V8(0FR"F&``_MAZ0 XM`"9L@IQ@)#`%2,#E@"!L@I0ABP@`($L@"$H89OR1P%.(,`A20$C`U\!21;IL5 XM@IAMUC`%2,#E@"!L@I1"L`@`8`#^E"``,#Q__V`$,"\`#"!O``1*&&;\4T@BZ XM;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#```$(`@R+P`,8`(0V5?)__QG!E)!; XM8`)"&%')__Q.=4CG<``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.W XM=4Y5``!(YPXP)&T`"$*G2'H`CDZZ#"@I0(*@4$]F"$S?#'!.74YU(&T`#")HC XM`"0O*0`$3KH,6"@`6$]G4DAZ`&T@1"\H`#9.N@PJ)D!*@%!/9S1(>`/M+PM.T XMN@LZ+`!03V<D(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@L6)4``H%!/F XM+P1.N@OV6$\O+(*@3KH+6D*L@J!83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`JR XM`$Y5``!(YP@@)&T`#@QM``0`$F8((&T`""@08!Q*;0`,;PP@;0`(<``P$"@`* XM8`H@;0`(,!!(P"@`0FT`$DIM``QL$$1M``Q*A&P(1(0[?``!`!(R+0`,2,$@4 XM!$ZZ`Y!![(`"4XH4L```,BT`#$C!(`1.N@.&*`!FVDIM`!)G!E.*%+P`+2`*Z XM3-\$$$Y=3G5.5?\B2.<(,"1M``@F;0`,0FW_^BMM`!#__"!+4HL0$$B`.`!GJ XM``+NN'P`)68``LQ"+?\P.WP``?_X.WP`(/_V.WPG$/_T($M2BQ`02(`X`+!\+ XM`"UF#D)M__@@2U*+$!!(@#@`N'P`,&80.WP`,/_V($M2BQ`02(`X`+A\`"IF1 XM&"!M__Q4K?_\.U#_\B!+4HL0$$B`.`!@,D)M__)@'#`M__+!_``*T$20?``P3 XM.T#_\B!+4HL0$$B`.``P!%)`0>R`%`@P``(``&;4N'P`+F9:($M2BQ`02(`X9 XM`+!\`"IF&"!M__Q4K?_\.U#_]"!+4HL0$$B`.`!@,D)M__1@'#`M__3!_``*% XMT$20?``P.T#_]"!+4HL0$$B`.``P!%)`0>R`%`@P``(``&;4.WP``O_PN'P`] XM;&82($M2BQ`02(`X`#M\``3_\&`0N'P`:&8*($M2BQ`02(`X`#`$2,!@>CM\G XM``C_[F`6.WP`"O_N8`X[?``0_^Y@!CM\__;_[C\M__!(;?\P/RW_[B\M__Q.W XMNOWD*T#_ZC`M__!(P-&M__Q/[P`,8%P@;?_\6*W__")0*TG_ZB`)2AEF_)/`: XM4XD[2?_P8$H@;?_\5*W__#@00>W_+RM(_^H0A&`HD+P```!C9^)3@&>2D+P`I XM```+9P#_<EF`9[)5@&<`_W!7@&<`_W)@S$'M_S"1[?_J.TC_\#`M__"P;?_TM XM;P8[;?_T__!*;?_X9V@@;?_J#!``+6<*(&W_Z@P0`"MF+@QM`##_]F8F4VW_F XM\B!M_^I2K?_J$!!(@#\`3I*P?/__5$]F"G#_3-\,$$Y=3G5@%C\M__9.DK!\; XM__]43V8$</]@Y%)M__HP+?_R4VW_\K!M__!NW$)M_^Y@("!M_^I2K?_J$!!(M XM@#\`3I*P?/__5$]F!'#_8+!2;?_N(&W_ZDH09PHP+?_NL&W_]&W.,"W_[M%M? XM__I*;?_X9BA@&#\\`"!.DK!\__]43V8&</]@`/]X4FW_^C`M__)3;?_RL&W_Z XM\&[:8!8_!$Z2L'S__U1/9@9P_V``_U)2;?_Z8`#]"#`M__I@`/]"2.=(`$*$[ XM2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$^ XM@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!0 XM9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%(' XM0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU3E4``"\$."T`""\M``H_!$ZZG XM`#"X?``*7$]F)"!M``H0*``,2(`(```'9Q0_//__+RT`"DZZ`/1<3R@?3EU.6 XM=6#X3E4``"\*)&T`"B!2L>H`!&48,"T`",!\`/\_`"\*3KH`R%Q/)%].74YU6 XM(%)2DA`M``D0@$B`P'P`_V#H3E4``"\*0>R`EB1(($K5_````!8O"&$06$]!C XM[().M<AEZB1?3EU.=4Y5``!(YP@@)&T`"'@`(`IF"G#_3-\$$$Y=3G5**@`,Z XM9U`(*@`"``QG##\\__\O"F%2.`!<3Q`J``U(@#\`3KH%'(A`""H``0`,5$]GZ XM"B\J``A.N@(N6$\(*@`%``QG$B\J`!).N@+`+RH`$DZZ`A103T*20JH`!$*J3 XM``A"*@`,,`1@D$Y5__Y(YP@@)&T`"$'Z_T8I2(*D""H`!``,9PIP_TS?!!!.Z XM74YU""H``@`,9S`@4I'J``@X"#\$+RH`"!`J``U(@#\`3KH"@+!$4$]G$`CJD XM``0`#$*20JH`!'#_8,`,;?__``QF$`BJ``(`#$*20JH`!'``8*A*J@`(9@@OQ XM"DZZ`)I83PQJ``$`$&8J&VT`#?__/SP``4AM__\0*@`-2(`_`$ZZ`B*P?``!3 XM4$]FH#`M``Q@`/]J)*H`"#`J`!!(P-"J``@E0``$".H``@`,(%)2DA`M``T0Z XM@$B`P'P`_V``_SY.50``+PI![("6)$A**@`,9QC5_````!9![().M<AE"'``H XM)%].74YU8.)"DD*J``1"J@`((`I@ZDY5__PO"B1M``@_/`0`3KH`P"M`__Q40 XM3V88-7P``0`0($K1_`````XE2``()%].74YU-7P$```0".H``0`,)6W__``(3 XM$"H`#4B`/P!.N@#B2D!43V<&`"H`@``,8,Y.50``2.<`,"1L@F)@%"92("H`B XM!%"`+P`O"DZZ!%Q03R1+(`IFZ$*L@F),WPP`3EU.=4Y5```O"D'Z_\8I2(*H8 XM0J<@+0`(4(`O`$ZZ!`HD0$J`4$]F"'``)%].74YU)*R"8B5M``@`!"E*@F(@X XM"E"`8.9.50``<``P+0`(+P!ALEA/3EU.=4Y5``!(YP`PE\LD;()B8`X@;0`(* XM48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0I4H)B("H`!%"`+P`O2 XM"DZZ`ZYP`%!/8-A.50``+PHP+0`(P?P`!B1`U>R">$IM``AM#C`M``BP;().X XM;`1*DF8..7P``H)\</\D7TY=3G4P+0`(P?P`!B!L@G@O,`@`3KH"QDJ`6$]G2 XM!'`!8`)P`SE4``"\M``A.N@*02H!83V8.3KH"FCE`@GQP_TY=3G5P`&#X% XM3E4``$CG#"`X+0`(3KH`<#`$P?P`!B1`U>R">$I$;0JX;().;`1*DF80.7P`I XM`H)\</],WP0P3EU.=3`J``3`?``#9@HY?``%@GQP_V#D<``P+0`.+P`O+0`*D XM+Q).N@)T*@"PO/____]/[P`,9@Q.N@(:.4""?'#_8+@@!6"T3E7__$AX$`!"8 XMITZZ`M@K0/_\"```#%!/9Q)*;(*.9@@@+?_\3EU.=4ZZ``9P`&#T3E4``$AXZ XM``1(>@`<3KH!\"\`3KH"$#\\``%.N@`.3^\`#DY=3G5>0PH`3E4``$JL@J1G! XM!B!L@J1.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JL@GAG*'@`& XM8`H_!$ZZ`/Y43U)$N&R"3FWP,"R"3L'\``8O`"\L@GA.N@'Z4$]*K(*H9P8@_ XM;(*H3I!*K()49PHO+()43KH!=EA/2JR"K&<((&R"K""L@K!*K(*T9PHO+(*T! XM3KH!DEA/2JR"N&<*+RR"N$ZZ`8)83TJL@KQG"B\L@KQ.N@%R6$]*K(+`9PHOB XM+(+`3KH!8EA/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?3G-*K(*0B XM9C!*K(*<9R@P+(*:2,`O`"\L@IQ.N@%2,"R"F%)`2,#E@"\`+RR"E$ZZ`3Y/G XM[P`08`Y.N@$L+RR"D$ZZ`5A83R`M__PN;()^3G4H'TY=3G5.50``2.<.(#@M6 XM``@P!,'\``8D0-7L@GA*1&T*N&R"3FP$2I)F$#E\``*"?'#_3-\$<$Y=3G4(2 XM*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@H9.[O_<(B\`!"QL@H9.[O^"A XM(B\`!"QL@H9.[O^X+&R"AD[N_\HL;(*&3N[_?"(O``0L;(*&3N[_*$SO``8`] XM!"QL@H9.[O_B+&R"AD[N_\1,[P`.``0L;(*&3N[_UD[Z``(B+P`$+&R"AD[N9 XM_Z9,[P`.``0L;(*&3N[_T$CG`01,[R"```PL;(*"3J[_E$S?((!.=4[Z``(B= XM;P`$+&R"@D[N_F),[P`#``0L;(*"3N[_.B)O``0L;(*"3N[^VBQL@H).[O]\6 XM(F\`!"`O``@L;(*"3N[_+B!O``0L;(*"3N[^C"QL@H(B;P`$("\`"$[N_=@BA XM;P`$+&R"@D[N_H9,[P`#``0L;(*"3N[^SB!O``0L;(*"3N[^@$SO`P``!"QLX XM@J!.[O^@(&\`!"QL@J!.[O^F(&\`!"QL@J!.[O^R```#[`````$````!```%; XM6@````````/R```#Z@```)8P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@4 XM,#`P,#`@("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,( XM#`P,#$!`0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*. XM"@H*"@("`@("`@("`@("`@("`@("`@("0$!`0"```````````````````0``Q XM```!``````````````````````$!`````0`````````````````````!`@``' XM``$`````````````````````````````````````````````````````````! XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````%`````````````````/R```#ZP````$`X X#``/RU X`` Xend Xsize 6168 SHAR_EOF echo "End of archive 1 (of 1)" # if you want to concatenate archives, remove anything after this line exit