(Ư@ CRYPT.BCKV CRYPT.BCK7BACKUP/NOASSIST *.* SYS$LOGIN:CRYPT.BCK/SAVE/BLOCK=8192 NIELAND_T iYV5.4 _KAHUNA::   _DUA1: V5.4  )*[NIELAND_T.SECURITY.CRYPT]AAAREADME.TXT;2+, ./i 4J- 0123KPWO56 gV7=qV89GiHJ9This is a program for encrypting Text messages using the JDES (Data Encryption Standard) and outputing the data in HEX so it can be mailed across networks.)Note: The passwords are case sensistive.Usage:"$ CRYPT :== $device:[dir]CRYPT.EXE$ CRYPT infile outfileHThe program will then ask for the key and whether you are encrypting or decrypting. 5Code to do the I/O for UNIX and DOS is also provided.%*[NIELAND_T.SECURITY.CRYPT]BUILD.COM;1+, ./i 4,\- 0123KPWO5 6{a+7:-=qV89GiHJ $ CC CRYPT.C $ CC DES.C $ CC VMS.C,$ LINK CRYPT,DES,VMS,SYS$LIBRARY:VAXCRTL/LIB$ EXIT#*[NIELAND_T.SECURITY.CRYPT]CRYPT.C;9+, ./i 4N- 0123KPWO56bM7Z=qV89GiHJ A/* Encrypt/decrypt command compatible with Sun's "des" command */#include #ifdef DOS#define readone(A) getc(A)#define writeone(c,A) putc(c,A) FILE *disk_file; FILE *disk_file2;#endif #ifdef UNIX#include #define readone(A) getc(A)#define writeone(c,A) putc(c,A) FILE *disk_file; FILE *disk_file2;#endif #ifdef VAXC char readone(); int disk_file; int disk_file2;#endif int char_cnt=0;2 char iv[8]; /* Initial vector for CBC mode */ int block;7 char h[16] = {'0','1','2','3','4','5','6','7','8'" ,'9','A','B','C','D','E','F'};main(argc,argv) int argc; char *argv[];{ int c,cnt,encrypt,decrypt; register int i;< char key[8],tkey1[8],tkey2[8],*akey,mode,xchar,*getkey();  if (argc < 3) {5 printf("Usage: CRYPT \n"); return; }+ openfiles(argv,&disk_file,&disk_file2);" block = encrypt = decrypt = 0; akey = NULL; desinit(0); if(akey == NULL){, /* No key on command line, prompt for it */ memset(tkey1,0,8); memset(tkey2,0,8); for(;;){ printf(" Enter key: "); memcpy(tkey1,getkey(),8);! printf("\n Enter key again: "); memcpy(tkey2,getkey(),8); printf("\n");! if(memcmp(tkey1,tkey2,8) != 0){/ fprintf(stderr,"Key mistyped, try again\n"); } else break; } akey = tkey1; }' /* Set up key, determine parity bit */ strncpy(key,akey,8); for(cnt = 0; cnt < 8; cnt++){ c = 0; for(i=0;i<7;i++) if(key[cnt] & (1 << i)) c++; if((c & 1) == 0) key[cnt] |= 0x80; } setkey(key); do  {/ printf("\n%s","Encrypt or Decrypt? "); xchar = getchar();# mode =(char) toupper((int)xchar);}+ while ((mode != 'D') && (mode != 'E')); if (mode == 'D'){ decrypt++;} else if (mode == 'E'){ encrypt++;} /* Blot out keys */ memset(key,0,8); memset(tkey1,0,8); memset(tkey2,0,8);! /* Initialize IV to all zeros */ memset(iv,0,8); if(encrypt){ doencrypt(); } else if(decrypt){ dodecrypt(); } else {* printf("Problems see system manager\n"); exit(1); } }//* Encrypt standard input to standard output */ doencrypt(){ char work[8],*cp,*cp1; int cnt,i,j; for(;;){. if((cnt = readdata(work,8,disk_file)) != 8){0 /* Put residual byte count in the last block.3 * Note that garbage is left in the other bytes,7 * if any; this is a feature, not a bug, since it'll& * be stripped out at decrypt time. */ work[7] = cnt; } if(!block){, /* CBC mode; chain in last cipher word */ cp = work; cp1 = iv; for(i=8; i!=0; i--) *cp++ ^= *cp1++; }" endes(work); /* Encrypt block */6 if(!block){ /* Save outgoing ciphertext for chain */ memcpy(iv,work,8); } dowrite(work,8,disk_file2); if(cnt != 8) break; } writeone('\r',disk_file2); writeone('\n',disk_f ile2);} dodecrypt(){+ char work[8],nwork[8],ivtmp[8],*cp,*cp1; int cnt,i;5 cnt = doread(work,8,disk_file); /* Prime the pump */ for(;;){6 if(!block){ /* Save incoming ciphertext for chain */ memcpy(ivtmp,work,8); } dedes(work);; if(!block){ /* Unchain block, save ciphertext for next */ cp = work; cp1 = iv; for(i=8; i!=0; i--){ *cp++ ^= *cp1++; } memcpy(iv,ivtmp,8); }% /* Save buffer pending next read */ memcpy(nwork,work,8); /* Try to read next block */! cnt = doread(work,8,disk_file);. if(cnt != 8){ /* Can "only" be 0 if not 8 */7 /* Prev block was last one, write appropriate number * of bytes */ cnt = nwork[7]; if(cnt < 0 || cnt > 7){4 fprintf(stderr,"Corrupted file or wrong key\n"); } else if(cnt != 0) write(disk_file2,nwork,cnt); exit(1); } else {* /* Now okay to write previous buffer */! writedata(nwork,8,disk_file2); } }} #ifdef DEBUGput8(cp) register char *cp;{ int i; for(i=0;i<8;i++){' fprintf(stderr,"%02x ",*cp++ & 0xff); }}#endifdoread(buffer,length,file_ptr)N/* This routine reads in data from the input file, which is expected to be in N * HEX format and unHEXes the data before returning it to the calling program.E * This routine is based on the program UNHEX by Christine Gianone,  * October 20, 1986 */ #ifdef DOS FILE *file_ptr;#endif #ifdef UNIX FILE *file_ptr;#endif #ifdef VAXC int file_ptr;#endif int length; unsigned char *buffer;{int a,b,c,i,j; i = 0;> while (((a = readone(file_ptr)) != EOF) && (i < length)) {L if (a == '\n' || a == '\r') /* Skip newlines & carriage returns */& if ((a = readone(file_ptr)) == EOF) break;I if (a == '\n' || a == '\r') /* Skip newlines & carriage returns */& if ((a = readone(file_ptr)) == EOF) break;F if((b = readone(file_ptr)) == EOF) /* Get second hex nibble */+ break; /* get out of the while loop */ if(a >= '0' && a <= '9')$ a -= 0x30; /* a = a - 30 hex */ else if(a >='A' && a <= 'F' ) a -= 0x37; /* a = a - 37 */ if(b >= '0' && b <= '9') b -= 0x30;  else if(b >='A' && b <= 'F' ) b -= 0x37; + buffer[i] = ((a * 16) & 0xF0) + (b & 0xF); i++; if (i>=length) break; } #ifdef DEBUG  for(j=0;j while (((a = readone(file_ptr)) != EOF) && (i < length)) { buffer[i] = a; i++; if (i>=length) break; } #ifdef DEBUG  for(j=0;j Enter key: Enter key again: Key mistyped, try again %sEncrypt or Decrypt? Problems see system manager Corrupted file or wrong key Error on opening file %s. Error on opening file %s. sys$inputDCLMCRSHELLerror 0not ownerno such file or directoryno such processinterrupted system calli/o errorno such device or addressarg list too longexec format errorbad file numberno childrenno more processesnot enough corepermission deniedbad addressblock device requiredmount device busyfile existscross-device linkno such devicenot a directoryis a directoryinvalid argumentfile table overflowtoo many open filesnot a typewritertext file busyfile too largeno space left on deviceillegal seekread-only file systemtoo many linksbroken pipemath argumentresult too largeI/O stream emptySYS$LOGINSYS$COMMANDSYS$DISKLNM$FILE_DEVVAXC$PATHPATH=HOME=TERM=USER=PATHHOMETERMUSERPATHPATH=HOME=TERM=USER=PATHft1-132ft1-80ft1ft2-132ft2-80ft2ft3-132ft3-80ft3ft4-132ft4-80ft4ft5-132ft5-80ft5ft6-132ft6-80ft6ft7-132ft7-80ft7ft8-132ft8-80ft8la12-132la12-80la12la120-132la120-80la120la24-132la24-80la24la34-132la34-80la34la36-132la36-80la36la38-132la38-80la38unknown-132unknown-80unknownvk100-132vk100-80vk100vt05-132vt05-80vt05vt100-132vt100-80vt100vt101-132vt101-80vt101vt102-132vt102-80vt102vt105-132vt105-80vt105vt125-132vt125-80vt125vt131-132vt131-80vt131vt132-132vt132-80vt132vt173-132vt173-80vt173vt52-132vt52-80vt52vt55-132vt55-80vt55vt200-132vt200-80vt200vt300-132vt300-80vt300undefinedLNM$FILE_DEVUCX$IPC_SHRUCX$INET_ADDRUCX$IPC_SHRUCX$INET_NETWORKUCX$IPC_SHRUCX$INET_NTOAUCX$IPC_SHRUCX$INET_MAKEADDRUCX$IPC_SHRUCX$INET_LNAOFUCX$IPC_SHRUCX$INET_NETOFUCX$IPC_SHRUCX$SOCKETUCX$IPC_SHRUCX$ACCEPTUCX$IPC_SHRUCX$BINDUCX$IPC_SHRUCX$LISTENUCX$IPC_SHRUCX$CONNECTUCX$IPC_SHRUCX$RECVMSGUCX$IPC_SHRUCX$SENDMSGUCX$IPC_SHRUCX$SENDTOUCX$IPC_SHRUCX$RECVUCX$IPC_SHRUCX$SENDUCX$IPC_SHRUCX$CLOSEUCX$IPC_SHRUCX$RECVFROMUCX$IPC_SHRUCX$SHUTDOWNUCX$IPC_SHRUCX$SELECTUCX$IPC_SHRUCX$GETHOSTNAMEUCX$IPC_SHRUCX$GETHOSTADDRUCX$IPC_SHRUCX$GETHOSTBYADDRUCX$IPC_SHRUCX$GETHOSTBYNAMEUCX$IPC_SHRUCX$GETNETBYADDRUCX$IPC_SHRUCX$GETNETBYNAMEUCX$IPC_SHRUCX$GETPEERNAMEUCX$IPC_SHRUCX$GETSERVBYNAMEUCX$IPC_SHRUCX$GETSOCKNAMEUCX$IPC_SHRUCX$GETSOCKOPTUCX$IPC_SHRUCX$SETSOCKOPTUCX$IPC_SHRUCX$GETNETENTUCX$IPC_SHRUCX$GETSERVBYPORTUCX$IPC_SHRUCX$GETPROTOBYNAMEUCX$IPC_SHRUCX$GETPROTOBYNUMBERUCX$IPC_SHRUCX$GETPROTOENT2d tLNM$PROCESS LNM$PROCESSSHELL$FILE_ LNM$PROCESSU CRYPT.BCK_! %[NIELAND_T.SECURITY.CRYPT]CRYPT.EXE;3E  ` j v   $ 5 J̄*55Q$5d,5 |Ą45<5DD5L5 T5  \5 D  Ԅ  d5 $  l5 t5|5l@AHr555  5(5555Ā5̀5Ԁ5܀5PD55\555 !!!!!̂!! 5!""Ă"5"#5#,$'(t )-041 2 5|9 @ A  XиH8(|hp`ؿP@0 x@ (08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 190123456789ABCDEF:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'      91)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                             0@Xb|$0BQap " . < M A ^$V[XXYѬ fIPݬ |ZS S1߭M߭wMߦ"IRb P߭2Mߦ/b P߭MߦCb߭߭WMPߦEh8IޭSS߭NWTRPUUSxPQQQQSQRPR dPP3PdTW\ߦbߦ^Hi!P~$PPRRDREёRD[ PREZ߭jLRb߭b߭bbZ +$[ uPߦxPH:P8^X[VYPޭ(ޮ(WTiURU PSS,RT'SB(RRTUo PSSRTRZZZkޭSPQRPSPS``R߭k߭"'Kޭ$ޮ$WdTUWQ SPU\UL$\ˏ\R\TLh~cTBh~cffHT cT cfUWZ1   ^VUnXYZ[ݪe߭߭AJ߭Se*ޭShQRPSPS``R߭h J߭߭Ij߭pP;RRƕkFRR߭i<31ZPޭ ޮ WSiTRS1@TB$~ RRS1(|^Uݬ S PSS1U15 VS S ݬ fPSS1S S ݬ fPSS1ݬ fPRR1S0 S90SPSA SF7SR0 R90RRA RF7R޼TxSQʏQˏRPQPPEdUUݬ fPSS U1"UPP^XTUެZUjYЬYެ VfWMSUPU@iPˏPRPW@h~cWBh~cddHf cf cdUj<^Rݬ PSS5ެTRd,USBeRRdݬ PSSRdRPP^RެTRdЬSݬ Bc~RRd|(^]TVCUScP<~DPcPb~DPd cEPѬP<~pDPecEdEPeT<~JP[~ZjP[j@ݬ ݬݬϵЏ5P1wѭ  ЏL5P1f~>nYЫXYP0C^^SYR0i Џ~|~S~~P~~߮~~^QO ~^TadZ~^Z]ЬTЭU~~&TP8T5U=P TU^TUVV^(Ud(nnV~^T ~^R|~߮~~^V|~fb<~PяBnS1xbRS^Xϵ~~~~ZS~T PU^E ~^TdRUPPЫ PЏ\5P10^^U nmR^S0P1ZO[k[1WnSZGV5.4R*UeUTVDRTU[TW R, 'ZZP(ƗPP(P8c^SR^S0kP1W1r1y[P76РР[nkZZR^S0#PCZn[kkךZЬ [0@PZЬ[03P nR^S0PP8ШPRR^nSЬT|~|~Rc|~<1~< ~ ʏ< ~Tl |~ݏݏݏ`PPPը ]P[P0SMA`P9Р P] ^]PP`ݠݠP5ЎPРPlЏL5P1[k9kZ Z[l լЪݪjkZ4ЎPЏT5P1\Pt3PP|~߮S~ ~@~^T|~d Pg֧PЬWP0$0 PP֧g0P߬ l~n ߬l~nW0D1ЬUЬRSVSrVSw Sa1b+VR~bb< nRV b+VRb 1P0HYSaȏ@0ЭZЭ\0P1HSwhP#Sa 0P1Ь[Ь ~լЬZ0nnÎ Pʏ0ʏ0PЬ WWP0 ~4PԼ lPЎWPW`g`WPPJWЬWP0P 0P1ЎZ߬ ݬݬjʏ0ЬWP0}~ ~PPЬWP0g1g0Z0Z0Z00-ЬZjS<TSTRS(T,Ч$Ч,i ipRP Pz; gԧn~l>nYY~l> nRP0ЎP0.P0K}UʏVP0 l=Ь P )PY0Yl @lZZެ\0 P@hP>ˏQя Q Џ5P1ӏQhP)P0SЎP0яPӏ Џ5P1Nh01-.Z ZaPZP0~05<P0YPWWkȏ0PP8P.x PPP02PPP@PЬZP:GnWP0mO 0P1ЎZ^^[πWݏ߬ݬ[j}P~QZ0 }Pʏ0ʏ0P W1WP0J 0P1<Ь[ЏZ:Zk Џ5P0 [QZ0[Z0 Pʏ0ZЬWP0# 0P1Ь~^[0ЬPʏ00  0P1ӏ0&0P0  0Z PPP0ʏ0ݬ ݬݬ'STWЬR:b1RQS-~R\uP31TRSR~~S~^SЬU:e1UQV~8UtP3啕t1SWUVxU~~V~^ShPT S4W U'ЎPPPT SЏ5PPSPЬWP00 |~ ~M=JWP0P 0P1ЎZ߬ݬjʏ0ЬWP0 0P1 լ \ЧЧլ' çPЬPl P  ЧЧ gЧl  լ  ʏ01[PD7Z %DZ|~ݏ߬ ݬݬjЬQ@aP^<Z vIZ^^WgЬЬݬGPgA ^~^W߬ ݬWj<ﵷP﬷ЬWP0A0P 01ЧQQѬP PPqQgʏ0p6RCЬWP04ЎZ^^[Wݏݬ ݬ[jP QZ0ЎPP6BWP04ЎZ^^[ϷWݏݬݬ[jP QZ0ЎPP5Z BZ|~ݏݬ ݬݬjЬQ@aP0  0P1dӏ010P0g2@U0 [<4QU|~|~|~<(~PPkR/ ТP PТ P PRk,jjЬUP0Վ4YY(`iʔ h003hH0% Щ |~jP0ʓX $X(<hЩ$(YYPЏުЏުY|~$|~,<2~ԭ|~|~ݭPRR ݭx߭mRRP?ݬKm^?\sݬݬQPQQPЬQ:aìQP|}SV:dVTQR (RdcQTVcЬP}SЬ WOЏVVWWV:Vd(VdcQTVW,TQR RW(RdcQTЏVVWWV ,nVcVWЬP|}QV:aQS:bVRQP (PbcQRVcЬP}QЬ W5V:aQS:bVRQPPWWPPW(PbcQRVڔcЬP<^,nnUЬQ6ЬR :a&P@nQT:dUTQ*QdnUìQP<^,nnUЬQ6ЬR :a&P@nQT:dUTQ+QdnUìQP|^,nnUЬQ.P@nЬQQT:dUTQ*QdnUQPЬ S}QPTTP SPbTTPPPaP zP P,4mpP1k4mpP!kpPk  k^祉TPPRBdP֬PPP@dSRcQQ+1QPP+NNbbbbbbbbbb Pj?PPeGaR RdSRGPRdeR5R  R*PR#PR # RPRddR PS1CPìSЬ"|~|iPRPpPR4rP ^WzTVЬRRUbPPRBdP֬PPP@dSRcQQ+1QPP+NNnnnnnnnnnn P2?PPeSmR Rd_Rc-VRGPRdeR5R  R*PR#PR # RPRddR PS17PìS!gЬRUb|PЬЬRSb"|~hPUP:s0&|~hPRPR,"g PRo3pPU,"gV p.RPp,RpRPU>3|P<pPpPTqTP qT}TRʏSbRTjTRnRRqRTsP `P`TjTRnRRbRTbTPpPgg^Q(^ԡЬ *ԡ~PfPPRbССԼݏݬ ߮fژS; cԼ-aּPQ}PT;0Paa.PQ;0Pa T(TcԼ(}PV:.TePVּPT,VgTcPVQW(VgccqP|/mpPfpPP<pPpPTqTP qT}TRʏSbRTjTRnRRqRTsP bPbTjTRnRRbRTbTPp P1/m SfpPP  P^Q(^Ь RRRRR R RRR^nԡԡ~PaeЬSСWXա-СV&VW!(Vhc.VW(Wacs0c.ScЬPWաV.(Whcs0Se^STVnndЬP<ePe R`RPuepPPR RяRRP|P<[}PP<A"A-mpPd-mpPd pPqPP qP}PRʏSbRPjPRnRRbRPcP  t-ms8p PqPP qP}PRʏSbRPjPRnRRqRPl7djR~p~,dpPDdͳͷ͛͟͝>ͣͧsuޭw>{́ޭ̓>͇͍͋ޭ͏>͓͗hhbP1eF ͫ(ݳͯPФRb<RRR|~?ɔPP+|~|~s2杖~wB 62~ڽPRRԤRQRPa P֤Հ{ 1PVfP QPwGP(дQa PaRRARZ RP PPaQaߧN-ScP Ф RߧScPФ RߧXcPФ Rߧ]cP 1o<~fP>͜͞ޭ͠>ͤͨͪޭͬ>ͰʹͶޭ͸>ͼ嗀͘͘}\Pc Ԏ(PТ\l<\\\|~?PP+|~|~͜2j~ݠBOޢH ޢ\UU YUTdPUUƁ'PXXUdXSPU1UX (PCݢ$Ud< \LeUP``\\A\Z \\ \\`P`< \\\U1P2\LeUP``\\A\Z \\ \\`P`2\\UUޢ\\\U\\!\\?PPU8<\LeUP``\\A\Z \\ \\`P`<\\\UXCPX0(PTТ \U[U"PUU(PTTHݢU<\LeUP` P`\\A\Z \\ \\`P`<\\\U;P2\LeUP``\\A\Z \\ \\`P`2\\\UТ \UZUiPUݠBݸݬU7ƆU;Т \UPPUU nUPUU%Т ɖ{?XPZTP<\Q\P\ \P Q{\PQPQѬ  S,PS"Ѭ  SP SSSv^|~|~ݬ|~<#~ݬ  ;Џ28>Pe; ͠S魵+qP 魴 qP}PR: RcPR}RP:EPa譲 a0R護q0SQRRa.R}RPPPi~~魱Эn߭~~=P; ͠S魵+qP 魴 qP}PR: RcPR}RP:EPa譲 a0R}RPPi~魱Эn߭~~6=P1; ͠S魵+qP 魴 qP護 魱խP19XWЭЬ [ЬX ЬVfVPΠ^ԭʏ0ЦZfY !PѦ$(,YYP13:hPWYW19Y0C1ԭ+WhPW }PW0BW;h%Q*Wh0PWT}P~TUYTYT)ThjTU0TWTXUT11}WTYSZWh%1WXhn0a1_*h WX+Wh:PWRXSPWzQX0Plh WcXhh WRXRWRZ R:R5議魨֭1P  ЭP ЏPЭPæZQQfZ Цf}fY PFݬP1fצPЦZfYQѦ$(,YY Y  PYP+Yj4}PYPPTP  PY0kԭԭدThcccc"Y%PP議 ЋP譮``PZЭP ֭PY0YԭjRB1jR@BsBi1jRBRAjRBB301jjR@B)jRB 1I0_1?9T1-j-j+9T9TЭU<UѭU1͠S魭 j01UjRBR03U͠íS 魮n߭議ЋndPЭPS議ЋSխ֭ЭTTYYT魰 TZQTYP ,YjTcY0o}PYPU議ЋUխЏЭTTYYT*Tj T議 (YjecSU0PT~議 (njecnZŽYP͠UЭT<Tj-j+Y 0P1T1TȐjRBKY 0TTѭT譩Ta譬'譫Yj.Y0l FP1T;譩1|T+jEjeY 04PRT1D譩1F͠íU~~߭߭`7P$議ЋU魯 Pe 3eЭPPU議ЋU:]WhPЭRЏRPWSXTPWQXd^ST:jSd魪'#魰ZY 0j PR議eЭPXWY<ЬRТS|TSAx!RяSCяS:яS(l CRYPT.BCK_! %[NIELAND_T.SECURITY.CRYPT]CRYPT.EXE;3M#V1я̂S(яS}T"RяĂS< PRsЬR}T p^ЬQԭݬiPTP(PL(qD qSc9PTݬc:PcRRTQa=RTPPq=TRPScʰTЬ<~PSPSޟnP2RBޑcSSPS꟭꟭2P U|~|~2;dSSU TPTT|~<#~S U dTP TRBdScUЬcBdScBcScBcRbT UPݏ5PP^ݬݬPPQQQPP|0^eRSRP RRVլѬV ݏ56P߭mѭ ЏUP߭6P`UT TP@cRb1 TP@Qan@QaU U[@cP`RV P@bP`ЬPxRPPRѬ Ѭ UR,0 PR0PT TP@cP`1mV T ^߭YнSլѬݏ5PS.Ь R(P@bQab@bQa@bP`S1ЬR1bSѬEa=S$RBaRba jSa SQP QSC}aPЬRb`CraPТ`CjaSТcQ P^)aR"aaPa RPP^`XЬRRPP`VR`Ra TVaT\WVBgRP RTP@`QaS@`P`UaRgS US.xVVTVTXPP^ݬIJ`=`ݏ$5P ^߭1нQQЬP_`_Qм_PЭ PР P `PЬQѡ\5< PЬP} pPP~ݏd5+-}P~ЬP}n p}nPѠ0] `~P~PQЁP}R}T}V}X}Z}\Ё^}P~}P}PѠ\5 Р RѢ0< PRRԱݠpP1Sս 1 ЬPԀ}R}T}V}X}Z}\Э|P^P xPPP^ЬPЬ`)~P~հ0[0ݏ\5,<l^T]P^Qe^R0լ+S^#ЬPՀ} p}pmpʏPQ2^}]3^}P]Ь STRcSݬݬPRc]}]]RPPPPPPPl լP^Ѽ C+ެPP~+Џ P^VR b ޢ ߯*f쟭*PQP Q#PyfPP~*^VR ޢޢ&.g*-f쟭X*PQP QPfPP~*^VR ޢ7 ޢC϶)e쟭)PQP Q5PeެPP~)^UR ޢQޢ]B{)Ie쟭l)PQP QP#ePP~%)^%UR ޢoޢ{)d쟭(PQP QIPdPP~(^TR Š–P(_d쟭z(PQP QP9dPP~5(^5TR ¥ ±(c쟭(PQP QWPcPP~'^SR ¼ `'Cc쟭'PQP QPcPP~E'^ESR !'b쟭'PQP QgPbPP~&^RR  p&[b쟭&PQP QP5bPP~U&^URR   1&a쟭"&PQP QwPaPP~%^QR  #π%sa쟭%PQP QPMaPP~e%^eQR / ;A%`쟭2%PQP QP`PP~$^PR G Sϐ$`쟭$PQP QP}`PP~u$^uPR ^jQ$/`쟭B$PQP QP `PP~#^OR sϠ#_쟭#PQP QP_PP~#^OR ˆ ”(a#G_쟭R#PQP QP!_PP~ #^ OR ž ªϰ"^쟭"PQP Q/P^PP~"^NR · 8q"_^쟭b"PQP QP9^PP~"^NR  !]쟭!PQP Q?P]PP~!^MR H!w]쟭r!PQP QPQ]PP~-!^-MR  !]쟭 PQP QOP\PP~ ^LR +X \쟭 PQP QPi\PP~= ^=LR =I \쟭 PQP Q_P[PP~^KR [gh[쟭PQP QP[PP~M^MKR x„)3[쟭PQP QoP [PP~^JR •¡xZ쟭PQP QPZPP~]^]JR ±½9KZ쟭*PQP QP%ZPP~^IR ψY쟭PQP QPYPP~m^mIR IcY쟭:PQP QP=YPP~^HR ϘX쟭PQP QPXPP~}^}HR ! - Y{X쟭JPQP QPUXPP~^HR ;GϨX쟭PQP Q'PWPP~^GR Ye0iW쟭ZPQP QPmWPP~^GR x„ϸW쟭PQP Q7PVPP~^FR ™¥@yV쟭jPQP QPVެPP~&X`^,n^P`RЭP`RPxR~nhPW>RWЭVf*:QfQRhPg(RWVPPYX$^,n$ ЬV:fQVQV,nnn(iPW1&HC>,nPPƐϞPVܞ;:fQVQ<,nPPƐϞPVܞ;:fQVQ,n`P`PR,T o` CRYPT.BCK_! %[NIELAND_T.SECURITY.CRYPT]CRYPT.EXE;3кeZP\0PWhP hGRHP.SP@,S,iP RPPşhRPP|TVP^,nPPƐϞPЬܞ::QQ,n`P`PZf\0PRR[P@fn\ RfPPЬQС(Pՠ04Q0TW^,n$܈:QìQЬ,nnn;PV/V&g:fQVQQQ (QfgPVPP ЬPР RSbcՠbPPJcPQcccbP. .b0bbQ.bbP/bQPP ^Ь R]> .b/brPbPPnnb~P/bSn:.nQQS/cSbPPnSbbS:]ncQQb :>ncQQbPЬXШ W[gVЬZZYZ/gY1ZZ Z.ШYZk( H8 gkkkk/cZ ШYkk k/g.BZ@1ШYkkk k/g.g.gYk k0gPPgPYPPI(YYgZ!g*VQQgYY:%YfQQ?aQVPPYQVZkPPЬ P/`.`.`PЬ PQaa/`.`.`.`aP\_\S\G\ ;\@~-\<~\ P`P P`P< [^,n$0,n0lլ|YЬZPѬPPYЬVTWS|QP.PPPSR/P/PQQ1+RSЬVTW, |$$$(ЏЏЏ04Q8W<P 8P1   1[,,$T$PTP- r5  .,,$T$PTPH,U- B5-e$-.e,VW.,,dT1    Z,PPX  ..`[`,  .,,( ,<PP,],,Y~,nPPƐϞP؞ܞr4PP,,n`P`PRPTZP\0PR R,$k1IX, 1,P.,],,  Z  $k1,,nPPƐϞP؞ܞ3PP,,n`P`PRPTZP\0PRRRR$kRPVW .,,VW ,P% .,, I ',Q.,,PQPa* *,,.,,VW$G   1,nPPƐϞP؞ܞK2PP,,n`P`PRPTZP\0P$kd1  #,$k6PWHP|SP(PTnSP@PYYY W~P*.RZWR PP P'WRPݬPSP(PnT1f$kWPP0XWά^,n0nT, |n$$$(ЏЏЏ,n$004:QìQ8ЬS8SSQ[5Q%ܑQ?׊QQSVVVTXRdPdTVRXQQWWQQ]ȑQ-#QӑQ]S-QSSW͑SQ QQSQQ]1WP^ ZP.;y.;o ::"":[<]>;.-*.]>$.$-o]&>"-_.]>.u]>[<]`>Xj.F-".]>D.--.]>*- -*\%bp/0/hC.n;"n.| ;t@! !"".( ./*- -*?[]-eVAXCMSG@@ ,8x@H`H@(  x0HPH`@0Hp @FORRTLLIBRTLMTHRTL CRYPT $main% doencryptW@' dodecrypt X(doreadl)dowritex)readdataV<* writedata* $   DESh*desinit@+desdoneX +setkey ,end 1w CRYPT.BCK_! %[NIELAND_T.SECURITY.CRYPT]CRYPT.EXE;3tPtesD ,dedesF8-permute -roundK(.f0X/perminit 0spinith* VMS0 openfiles~ \1getkey`1readone+1writeone)0<SHELL$FROM_VMSSHELL$FROM_VMS  XT8SHELL$$RMS_PARSE  (TERMINATE_PARSE  @   <SHELL$TRANSLATE_VMS < o - TRANSLATE_VMS  7&~> DEFAULT_DIR > <% COPY_TOKEN  t@ : INSERT_MINUS  E*A DOTDOTDOT A t2s NODE_ACTION s     DEVICE_ACTION     FILE_ACTION     TYPE_ACTION    VERSION_ACTION  : DIR_TOP_ACTION  _  DIR_ACTION    SET_WILD   SET_WILD_PCT  CLI$DATA _LIB$KEY0$ _LIB$STATE$tCLI$READ_ONLY_DATACLI$CODESHELL$CLI_NAMErshell$cli_namewsshell$is_shell1 tr+  SHELL$TO_VMS SHELL$TO_VMS  H]  U X    ;   SHELL$$VMS_FILE  ѹA     SAVE_NODE  Z!,SAVE_DEV  #SAVE_DIRECTORY  ?7 SAVE_NAME  : SAVE_TYPE  c&  _ SAVE_VERS  ( SET_FILETYPE ( 6SET_REGULAR_EXP 6 DSET_WILD D *R SET_VERSION R P`COPY_STR ` vK,!.FREE_DIRECTORY_DESCRIPTORS .  ,Z MATCH_REGEX Z / A' MATCH_SUBSTRING  $'Q@PRUNE_FILESPEC @ O% FIND_LAST_DOT  v ".TERMINATE_PARSE     CLI$READ_ONLY_DATA _LIB$KEY0$~ _LIB$STATE$CLI$CODED  . ABS .C$DATOFu vaxc$datof(w vaxc$dstrtod u   C$DATAC$$MAIN }c$$mainBPvaxc$crtl_init expand_buffer lowercase1؉ get_paramswPget_terminal_type c$$ctrlc_handsd c$$cond_handZ   }1    "   '! " C$SOCKETIOPc$$sock_translate0c$$socket_readc$$socket_writec$$socket_close{PX    C$$TRANSLATE c$$translateh  C$CTYPEC$GETENV getenv" OC$SIGNAL declare_control_c_handlerH ,signal9hssignal&gsignal: Y n# ! $  SHELL$CLINThSHELL$GET_ARGV h 55h$CODE$SHELL$MATCH_WILD.SHELL$MATCH_WILD.CLI$CODEC$SIGVEC ̰sigvecsigblock5 sigsetmasksigpause4sigstack> ̰ C$SOCKHANDLESd exchandler,init_ucx_inet_addrtinit_ucx_inet_networkx|init_ucx_inet_ntoatinit_ucx_inet_makeaddrxhinit_ucx_inet_lnaofxinit_ucx_inet_netofxXinit_ucx_socketxиinit_ucx_acceptxH init_ucx_bindxinit_ucx_listenx8init_ucx_connectxinit_ucx_recvmsgx(init_ucx_sendmsgxinit_ucx_sendtox init_ucx_recvx init_ucx_sendxinit_ucx_closexinit_ucx_recvfromxinit_ucx_shutdownxpinit_ucx_selectxinit_ucx_gethostnamex`init_ucx_gethostaddrxؿinit_ucx_gethostbyaddrxPinit_ucx_gethostbynamexinit_ucx_getnetbyaddrx@init_ucx_getnetbynamexinit_ucx_getpeernamex0init_ucx_getservbynamexinit_ucx_getsocknamex init_ucx_getsockoptxinit_ucx_setsockoptxinit_ucx_getnetentxinit_ucx_getservbyportxinit_ucx_getprotobynamex xinit_ucx_getprotobynumberx Nfj  #[NIELAND_T.SECURITY.CRYPT]CRYPT.C;9N( *2aRfNWQA~\\{^Mf&d~h9呯Akn<ԄH A6Hu*O'Z0$Cޤ*ew4?V1s^O"avulQ&DfVw!F̍6-R g v*b:~?3k.I' eZ[$ %j(Mhdy @aa CBTs'Y@O!} æc fo%٤xf0>xx ifEHubTMO 3,眝\ֈ0Vv2ME d Err0Jd=SaO6mOXisfxجVȢS;/ƛEmrlw"%2{({+)k~E7$&i9BPLkjJ_5Z[/M7!g_;z 4&OaXebpR mp'YF A P;eQu1$V wٽLyy|7=N)=)1e޼6-zl.z/4Yi x{3#>&̛qL Y%JtP\q$eF,/A 7aځhu`ԟe7׬<TJ{ƍ&:>_;,Y wmwtRL`v<%;"ȥٝ7fLO/%R}0|.&iz0SЬlGJ*zeA0sӂ o,9 <"g,0.X  2nwpNZ6q(p+#O34''c!:5?6$Hw#r}=P6gs]lfkAv:*GWBO%ۘavTxԫmTo3x=;:(VR|uic%mY]U'{C7sbK&%<<Y3,\mװoFA?iTkC38?C@w& U3ফH#.bwg,l/U?CN6sG۫Ⱦʉܱ$AJ-ò;n^>BPSv~1% b'!X$7I%z)ϵ!7/N 'sAvV7F 3Þ kK@6@F\c1t ?GOLu%UW>7 *?CHm/n~W 'pJ4'{,wĭ%԰)!?#HccDӹ1 J$Z5C|HSKo'@wtBsgHHSvqn5%յu%zX|+pCiq~6IdW/X<]7<~iVix2K-F|GQ>)N_#Wҩ@e$#b~ HIݩwD͕gsp,wۼ ^"}Vo6-t̅rr]q@co u6y0ʹ\΁ډ.Čo< k֏i/?xiaX S/VkaHHY.V&{ r帯 ?~ܲ׈{Ix G]˸b@Pw3WU@sqњX^ aa1'#!W9QFI-uǑUBe{*E_>۰gurtgRƩ0ǯa3$Y}|]~q8} rn92p=ÛgȰC؈D|GocPZ'n"u% H1d`Uw!ݕv"6F!GVtjN))S*˄P"!g#ܻWE^rwV) Dˢmk%Ȇq;rU`w ҅.Ӡ.nzWOuW9e],?%̑mYv)J]SLn wsHdܠoj唖%j;(ڐ$d&wM kgHe U4pױ 3Fz+]^c|c[kgejw Wp?'"D~yT~+L`pUk#MMs-$]8g{fv$VG(4b9B>Abеw̮=$"^Nl?q Gq} ~d }[./6܉jS@gxd6}2P\ k$;n XKl)X %V.8xGq4CL6.[+ԥ7_R'8}L Y "yT^o]۬zwg#cϴ1E1Lݷb}LĜ niJL5<`JO򻂓BUG./9b?NEHR80dv #:k[Tƒ9HbF"o]U+8=dQ#TF884H>kɫ2P6y Mide]y;@o`: 6@V6e(S0dJXlF*֠PېBwvB+kgO2 uGHkOx]!:v1ю>B4ٯ|=mXm)+a@B 13>;RWAֱ zɗgVwjhKhê11n0{[5!McJ$m^J`L E6BSM{m%!m4=roB/:% `NPKwxWB>d*w VqMÓgSXG5/UܵClulh]_aEY5L!Pܣ5op=mĎN֚IYZ]|HS=[`X13 #VH鶕cW%Y$J`&ϲKB~x!U'7Qш)E\\Ws~D֧?0=k5ںؠRe:);yL߰ګѵ48 ?ri\"R0$w=Ub@Rr u_^]19/o~q[Pצ_fpjD}%|ϫ\.eFstAn呐pD̛Um}њZ +`ɵ=eՐ>O.S$}Nw lt՞*w*mddUǰAh;tab-XWYp/Ukͧ^pRԞ$3 $0 ҈vϠzT'YLDQoh~u'KLIM>)tzbV{R4\d& H+i]ާ% 1jeA~B_/BI )?rJɳ. ?nNzX39ƍHzy|d>ʿ*e2vfu~ؒ[6nP.n'2G%RzDEn8yVT7jX.:=@ ^a\>DVɃwUC7yP&y1* fAcIץyK} ZQ&TG-,$ s/C:kvo L:'zF=sn!t׮[ iԑT|Kl`w vKScP<3ύAH0 o+YTI5ohWXK0-m!=)cJH.6ejBUV8iQQV$ɷ@uC .O^p/Ӓ FW1@ZMYwA ,_0#v, Cܢ9o ,PEk,ᡡv䚛Mir PΆtAT.H=Ft1gݒ+]usm9.J؁qBKS%D 孠w})гOmo=غF7ky٨Sj:h'.PešۙTi53;4Iks/QQv5 &^FMbg9]PRE񨖳`1zClZ(S"x*-# -;Bؕ*Ijc696x5AnԶQT*jm1,0TS&K2e6ZTWtI,|R+* /Wf5ϕ13fP47Ǘ,qd iAMkD1T@<[u/\0!w(gk$ 7j_jf̬66+gIvӝg]W=$/Ya>f2E=e׋A$^gG?<қrS 7xoh+ E~b~a_ kgkFO/(0)o A8\X-D;ӆɳq^2U?l a-ݗT!WY|hޟe:NkT ӷ~bqy_cT)VBubf% 4pV6^R5W!٥x9nbu1؎1F2Ee 3q+7!e=Pe2sYdb!yxbc.ݺQI#%vTrFs3} ;9_EyRzl*h.N9 Ȍf36x@ݵj`-m'GDnJK00M H}vy[/pVXGU6!sFBgPط k(vҌh^`zE43AH|ffj#UHSKj)lR7 + P4:˜aP  m i/[7`w"LuHs*#B'sc~GHl:}ŐG1j)hoLFG(󐍪I3&z#7}TrY” %DEMSK{c}QT{dp#bw^߳[Tbj/*eĩjUkm\1 WbQg;pbg+/4B׶%x48?yp~%v9_\z'wJ$x 湖ڱjqj"m4%ҋ$t4,bDL!.9u,{[n:>a͢(&ԋ2s@~ IOv{A826&$YeQ}j\& K:q _\Te3@turning i = %d \n",i);#endif return(i);  x4 CRYPT.BCK_! %[NIELAND_T.SECURITY.CRYPT]CRYPT.EXE;3?init_ucx_getprotoentw 6 d %*[NIELAND_T.SECURITY.CRYPT]CRYPT.OBJ;6+,!. /i 4 B - 0123KPWO56&rfV7:0=qV89GiHJ2CRYPTV1.010-MAR-1991 13:44VAX C V3.1-051 P0123456789ABCDEF PUsage: CRYPT  "P Enter key:  /P Enter key again:  CP  EPKey mistyped, try again  ^P %s bPEncrypt or Decrypt?  xPProblems see system manager  PCorrupted file or wrong key P^ C$MAIN_ARGS VXYѬ fPRINTFPݬ OPENFILES|Z SDESINITS1߭MEMSET߭MEMSETߦ"PRINTFRbGETKEYP߭MEMCPYߦ/bGETKEYP߭MEMCPYߦCb߭߭MEMCMPPߦEhFPRINTFޭSS߭STRNCPYWTRPUUSxPQQQQSQRPR dPP3PdTWSETKEYߦbߦ^PRINTFiFGETCP~TOUPPERPRRDREёRD[ PREZ߭MEMSETRb߭b߭bbZ DOENCRYPT$[ DODECRYPTPߦxPRINTFEXITP8^ X [VYPޭ(ޮ(WTiURUREADONEޘPSS,RT'SB(RRTUREADONEژPSSRTRZZZkޭSQRPSPS``R߭ENDESk߭MEMCPYޭ$ޮ$WTUWQWRITEONESPU\UL$\ˏ\R\TLh~cTBh~cffHT cT cfUWZ1 WRITEONE WRITEONE^ V UXYZ[ݪDOREADe߭߭MEMCPY߭DEDESe*ޭShQRPSPS``R߭hMEMCPY߭߭MEMCPYj߭DOREADP;RRƕkFPRINTFRR߭iWRITEEXIT1ZPޭ ޮ WSiTRS1@TB$~WRITEONERRS1(|^Uݬ READONEPSS1U1READONEVS S ݬ fPSS1S S ݬ fPSS1ݬ fPRR1S0 S90SPSA SF7SR0 ѕR90RRA RF7R޼TxSQʏQˏRPQPPEdUUݬ fPSS U1"UPP^ XTUެZUjYЬYެ VfWWRITEONESUPU@iPˏPRPW@h~cWBh~cddHf cf cdUj<^Rݬ READONEPSS5ެTRd,UREADONEPRINTFFPRINTFFGETCEXIT DODECRYPT DOENCRYPTTOUPPERSETKEYSTRNCPYMEMCMPMEMCPYMEMSETDESINIT OPENFILESGETKEYWRITEONEDOWRITEMEMCPYENDESREADDATA WRITEDATAEXITWRITEDEDESMEMCPYDOREADWRITEONEWRITEONE MAIN  DOENCRYPT @ DODECRYPT X|DOREAD lDOWRITE <READDATA < WRITEDATAR CRYPT main doencryptW@ dodecrypt XdoreadldowritexreaddataV< writedata*    C$MAIN_ARGSf$CODE$DATASTDINSTDOUTSTDERR DISK_FILE DISK_FILE2CHAR_CNTIVBLOCKH$CHAR_STRING_CONSTANTSdSBeRRdݬ READONE̘PSSRdRPP^RެTRdЬSݬ Bc~WRITEONERRd!*[NIELAND_T.SECURITY.CRYPT]DES.C;3+, ./i 4F- 0123KPWO56-79=qV89GiHJ /* Sofware DES functionsF * written 12 Dec 1986 by Phil Karn, KA9Q; large sections adapted from1 * the 1977 public-domain program by Jim Gillogly */#define NULL 0#ifdef LITTLE_ENDIANunsigned long byteswap();#else#define byteswap(x) (x)#endif>/* Tables defined in the Data Encryption Standard documents *//* initial permutation IP */ char ip[] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7};/* final permutation IP^-1 */ char fp[] = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25};/* expansion operation matrix7 * This is for reference only; it is unused in the code7 * as the f() function performs it implicitly for speed */ #ifdef notdef char ei[] = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 };#endif!/* permuted choice table (key) */char pc1[] = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4};"/* number left rotations of pc1 */char totrot[] = {+ 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28};!/* permuted choice key (table) */char pc2[] = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32};/* The (in)famous S-boxes */char si[8][64] = { /* S1 */@ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,@ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,@ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,@ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, /* S2 */@ 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,@ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,@ 0, 14, 7, 11, 10, D? CRYPT.BCK  ![NIELAND_T.SECURITY.CRYPT]DES.C;3FL 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,@ 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9, /* S3 */@ 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,@ 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,@ 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,@ 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, /* S4 */@ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,@ 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,@ 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,@ 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14, /* S5 */@ 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,@ 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,@ 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,@ 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3, /* S6 */@ 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,@ 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,@ 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,@ 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13, /* S7 */@ 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,@ 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,@ 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,@ 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12, /* S8 */@ 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,@ 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,@ 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,? 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11};E/* 32-bit permutation function P used on the output of the S-boxes */char p32i[] = {  16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25};/* End of DES-defined tables */A/* Lookup tables initialized once only at startup by desinit() */.long (*sp)[64]; /* Combined S and P boxes */;char (*iperm)[16][8]; /* Initial and final permutations */char (*fperm)[16][8];D/* 8 6-bit subkeys for each of 16 rounds, initialized by setkey() */unsigned char (*kn)[8]; /* bit 0 is left-most in byte */int bytebit[] = { 0200,0100,040,020,010,04,02,01};int nibblebit[] = { 010,04,02,01};2/* Allocate space and initialize DES lookup arrays * mode == 0: standard DESB * mode == 1; DEA without initial and final permutations for speed */ desinit(mode) int mode;{ char *malloc(); int i; if(sp != NULL){ /* Already initialized */ return 0; } i = sizeof(long) * 8 * 64;, if((sp = (long (*)[64])malloc(i)) == NULL){ return -1; } spinit();: kn = (unsigned char (*)[8])malloc(sizeof(char) * 8 * 16); if(kn == NULL){ free((char *)sp); return -1; }% if(mode == 1) /* No permutations */ return 0;= iperm = (char (*)[16][8])malloc(sizeof(char) * 16 * 16 * 8); if(iperm == NULL){ free((char *)sp); free((char *)kn); return -1; } perminit(iperm,ip);= fperm = (char (*)[16][8])malloc(sizeof(char) * 16 * 16 * 8); if(fperm == NULL){ free((char *)sp); free((char *)kn); free((char *)iperm); return -1; } perminit(fperm,fp); return 0;}!/* Free up storage used by DES */ desdone(){ if(sp == NULL) return; /* Already done */ free((char *)sp); free((char *)kn); if(iperm != NULL) free((char *)iperm); if(fperm != NULL) free((char *)fperm); sp = NULL; iperm = NULL; fperm = NULL; kn = NULL;}-/* Set key (initialize key schedule array) */ setkey(key)-char *key; /* 64 bits (will use only 56) */{/ char pc1m[56]; /* place to modify pc1 into */. char pcr[56]; /* place to rotate pc1 into */ register int i,j,l; int m;9 for (j=0; j<56; j++) { /* convert pc1 to bits of key */* l=pc1[j]-1; /* integer bit location */ m = l & 07; /* find bit */8 pc1m[j]=(key[l>>3] & /* find which key byte l is in *// bytebit[m]) /* and which bit of that byte */( ? 1 : 0; /* and store 1-bit result */ } /* Clear key schedule */ for (i=0; i<16; i++) for (j=0; j<8; j++) kn[i][j]=0;; for (i=0; i<16; i++) { /* key chunk for each iteration */8 for (j=0; j<56; j++) /* rotate pc1 the right amount */< pcr[j] = pc1m[(l=j+totrot[i])<(j<28? 28 : 56) ? l: l-28];3 /* rotate left and right halves independently */6 for (j=0; j<48; j++){ /* select bits individually */% /* check bit that goes to kn[j] */ if (pcr[pc2[j]-1]){" /* mask it in if it's there */ l= j % 6;" kn[i][j/6] |= bytebit[l] >> 2; } } }})/* In-place encryption of 64-bit block */ endes(block) char *block;{ register int i;+ long work[2]; /* Working data storage */ long tmp;= permute(block,iperm,(char *)work); /* Initial Permutation */ work[0] = byteswap(work[0]); work[1] = byteswap(work[1]); /* Do the 16 rounds */ for (i=0; i<16; i++) round(i,work); /* Left/right half swap */ tmp = work[0]; work[0] = work[1];  work[1] = tmp; work[0] = byteswap(work[0]); work[1] = byteswap(work[1]);E permute((char *)work,fperm,block); /* Inverse initial permutation */})/* In-place decryption of 64-bit block */ dedes(block) char *block;{ register int i;2 unsigned long work[2]; /* Working data storage */ long tmp;= permute(block,iperm,(char *)work); /* Initial permutation */ work[0] = byteswap(work[0]); work[1] = byteswap(work[1]); /* Left/right half swap */ tmp = work[0]; work[0] = work[1];  work[1] = tmp;( /* Do the 16 rounds in reverse order */ for (i=15; i >= 0; i--) round(i,work); work[0] = byteswap(work[0]); work[1] = byteswap(work[1]);E permute((char *)work,fperm,block); /* Inverse initial permutation */}/* Permute inblock with perm */staticpermute(inblock,perm,outblock)=char *inblock, *outblock; /* result into outblock,64 bits */5char perm[16][16][8]; /* 2K bytes defining perm. */{ register int i,j;< register char *ib, *ob; /* ptr to input or output block */ register char *p, *q; if(perm == NULL){! /* No permutation, just copy */ for(i=8; i!=0; i--) *outblock++ = *inblock++; return; } /* Clear output block */& for (i=8, ob = outblock; i != 0; i--) *ob++ = 0; ib = inblock;@ for (j = 0; j < 16; j += 2, ib++) { /* for each input nibble */ ob = outblock; p = perm[j][(*ib >> 4) & 017]; q = perm[j + 1][*ib & 017];8 for (i = 8; i != 0; i--){ /* and each output byte */3 *ob++ |= *p++ | *q++; /* OR the masks together*/ } }}/* Do one DES cipher round */staticround(num,block)&int num; /* i.e. the num-th one */unsigned long *block;{ long f();8 /* The rounds are numbered from 0 to 15. On even rounds= * the right half is fed to f() and the result exclusive-ORs5 * the left half; on odd rounds the reverse is done. */ if(num & 1){" block[1] ^= f(block[0],kn[num]); } else {" block[0] ^= f(block[1],kn[num]); }}5/* The nonlinear function f(r,k), the heart of DES */staticlong f(r,subkey)unsigned long r; /* 32 bits */8unsigned char subkey[8]; /* 48-bit key for this round */{ register unsigned long rval,rt; #ifdef TRACE unsigned char *cp; int i;? printf("f(%08lx, %02x %02x %02x %02x %02x %02x %02x %02x) = ", r," subkey[0], subkey[1], subkey[2]," subkey[3], subkey[4], subk x% CRYPT.BCK  ![NIELAND_T.SECURITY.CRYPT]DES.C;3Fg ey[5], subkey[6], subkey[7]);#endif1 /* Run E(R) ^ K through the combined S & P boxes; * This code takes advantage of a convenient regularity in7 * E, namely that each group of 6 bits in E(R) feeding0 * a single S-box is a contiguous segment of R. */, rt = (r >> 1) | ((r & 1) ? 0x80000000 : 0); rval = 0;0 rval |= sp[0][((rt >> 26) ^ *subkey++) & 0x3f];0 rval |= sp[1][((rt >> 22) ^ *subkey++) & 0x3f];0 rval |= sp[2][((rt >> 18) ^ *subkey++) & 0x3f];0 rval |= sp[3][((rt >> 14) ^ *subkey++) & 0x3f];0 rval |= sp[4][((rt >> 10) ^ *subkey++) & 0x3f];/ rval |= sp[5][((rt >> 6) ^ *subkey++) & 0x3f];/ rval |= sp[6][((rt >> 2) ^ *subkey++) & 0x3f];, rt = (r << 1) | ((r & 0x80000000) ? 1 : 0);& rval |= sp[7][(rt ^ *subkey) & 0x3f]; #ifdef TRACE printf(" %08lx\n",rval);#endif return rval;}/* initialize a perm array */staticperminit(perm,p):char perm[16][16][8]; /* 64-bit, either init or final */ char p[64];{ register int l, j, k; int i,m;" /* Clear the permutation array */ for (i=0; i<16; i++) for (j=0; j<16; j++) for (k=0; k<8; k++) perm[i][j][k]=0;7 for (i=0; i<16; i++) /* each input nibble position */: for (j = 0; j < 16; j++)/* each possible input nibble */8 for (k = 0; k < 64; k++)/* each output bit position */6 { l = p[k] - 1; /* where does this bit come from*/9 if ((l >> 2) != i) /* does it come from input posn?*/& continue; /* if not, bit k is 0 */ if (!(j & nibblebit[l & 3]))) continue; /* any such bit in input? */1 m = k & 07; /* which bit is this in the byte*/" perm[i][j][k>>3] |= bytebit[m]; }}@/* Initialize the lookup table for the combined S and P boxes */ static intspinit(){ char pbox[32]; int p,i,s,j,rowcol; long val;& /* Compute pbox, the inverse of p32i. * This is easier to work with */ for(p=0;p<32;p++){ for(i=0;i<32;i++){ if(p32i[i]-1 == p){ pbox[p] = i; break; } } }/ for(s = 0; s < 8; s++){ /* For each S-box */5 for(i=0; i<64; i++){ /* For each possible input */ val = 0;6 /* The row number is formed from the first and last2 * bits; the column number is from the middle 4 */= rowcol = (i & 32) | ((i & 1) ? 16 : 0) | ((i >> 1) & 0xf);. for(j=0;j<4;j++){ /* For each output bit */! if(si[s][rowcol] & (8 >> j)){' val |= 1L << (31 - pbox[4*s + j]); } } sp[s][i] = val; #ifdef DEBUG0 printf("sp[%d][%2d] = %08lx\n",s,i,sp[s][i]);#endif } }}#ifdef LITTLE_ENDIAN/* Byte swap a long */ unsigned long byteswap(x)unsigned long x;{ register char *cp,tmp; cp = (char *)&x; tmp = cp[3]; cp[3] = cp[0]; cp[0] = tmp; tmp = cp[2]; cp[2] = cp[1]; cp[1] = tmp; return x;}#endif#*[NIELAND_T.SECURITY.CRYPT]DES.OBJ;2+,K! . /i 4 ~ - 0123KPWO 56Z@IufV7B=qV89GiHJ0DESV1.010-MAR-1991 13:44VAX C V3.1-051P:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'P(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 19P91)! :2*" ;3+# <4,$?7/'>6.&=5-%  P P    )4%/7(3-!0,1'8"5.*2$ P     PP       0P    >P    NP   ZP  aP        }P P    P     P    P    P    P    P  P       P    P    /P   ;P    IP    ]P   jP    ~P  P    P      P    P   P     P   P    P P       P@ PP|(^ T V U ScP<~MALLOCPcPb~MALLOCPd cFREEPѬP<~MALLOCPecFREEdFREEPeT<~MALLOCPfcFREERbdbebPfP^ T S RbbFREE\l lccld dFREEbcԤ ΀^ [ XYZRЬWVjUeSSˏSTxSSCgSSS SDkSSPSSfVU7RQPxQTPPTRhSBcPQSPW͌VPWUPQP8QQRURUTUTDfV7PRiVfPP@,zRP{PQPPUxSPRQPQhTAdQaTxEkPPTaV/R֮Sz^߭ ݬwR߭RRЭRЭRݬ ߭I ^߭ ݬ3ЭSЭS2R߭RϺRݬ ߭P^լPЬ R֬ ЬQ֬abPRЬ PR PRЬUTЬYЬ SxTWeXXVxVVʏVxVVWVFiQTWxWWXVVVxVVWVFiPRPVVRTUTP^ެTdЬRxdP Q@ab'PPЬSxdP R@bݣP|^SЬUU ЏVVVSQPQSЬR֬bRRSʏS TCdP QSЬR֬bRRSʏSCPQSЬR֬bRRSʏSCPQSЬR֬bRRSʏSCP QSЬR֬bRRSʏSCPQSЬR֬bRRSʏSCPQSЬR֬bRRSʏSCPxUSUUUURRSQRQRʏRBP^Y ZVTQxVUPPxQSUSCRbRPQVWXQPPVfSSxSRRW<ʏSQRRCiR+ˏPUxWRxQSRSxPTSTЬSDcREjRRDcV?PQWP(^XR DESdesinitdesdoneX 0setkey DendesD dedesFpermute troundKf0perminit spinit'=FREEMALLOCFREE |DESINIT DESDONE 0SETKEY DENDES  DEDESq$CODE$DATA@IP@FP8PC1TOTROT0PC2SI P32ISPIPERMFPERMKN BYTEBIT NIBBLEBIT[VUSRb\\\VSeRSUVTPVxTZPRˏVQVUPUU\\QxV\ʏ\\QYPYZSCWWQP\x\\\\\Q\xT\P\L\\\x\\\RPVZ\ PRL`?VTx!*[NIELAND_T.SECURITY.CRYPT]DOS.C;1+, ./i 49- 0123KPWO56|DƐ7zL=qV89GiHJ CRYPT.BCK  ![NIELAND_T.SECURITY.CRYPT]DOS.C;1;99r#include #include #include #include $openfiles(argv,disk_file,disk_file2) char *argv[];FILE **disk_file,**disk_file2;{' disk_file = fopen(argv[1],"r+t");' disk_file2 = fopen(argv[2],"w+t"); if (disk_file == NULL)  {4 printf("Error on opening file %s.\n",argv[1]); exit(1); } if (disk_file2 == NULL)  {4 printf("Error on opening file %s.\n",argv[2]); exit(1); }}char *getkey() {! static union REGS inreg;& register int key_length;" static union REGS outreg;$ register unsigned char tem_char; key_length=0;! key[0]=(unsigned char) '\0';  do {% inreg.h.ah=(unsigned char) 8; intdos(&inreg,&outreg); tem_char=outreg.h.al;+ if (tem_char != (unsigned char) 13) {. if (tem_char == (unsigned char) 8) {# if (key_length > 0)9 key[--key_length]=(unsigned char) '\0'; } else# if (key_length < 255) {- key[key_length++]=tem_char;7 key[key_length]=(unsigned char) '\0'; } else  putchar(7); } }+ while (tem_char != (unsigned char) 13); return(key); }"*[NIELAND_T.SECURITY.CRYPT]UNIX.C;1+, ./i 48P- 0123KPWO56X 7S=qV89GiHJ#include #include #include #include 8#define TTY "/dev/tty" /* Change to /dev/tty for unix */$openfiles(argv,disk_file,disk_file2) char *argv[];FILE **disk_file,**disk_file2;{( *disk_file = fopen(argv[1],"r+b");( *disk_file2 = fopen(argv[2],"w+b"); if (*disk_file == NULL)  {4 printf("Error on opening file %s.\n",argv[1]); exit(1); } if (*disk_file2 == NULL)  {4 printf("Error on opening file %s.\n",argv[2]); exit(1); }}char *getkey(){ struct sgttyb ttyb,ttysav; register char *cp,c; FILE *tty; static char pbuf[256]; int (*signal())(),(*sig)();/ if ((tty = fdopen(open(TTY, 2), "r")) == NULL) tty = stdin; else setbuf(tty, (char *)NULL); sig = signal(SIGINT, SIG_IGN);% ioctl(fileno(tty), TIOCGETP, &ttyb);' ioctl(fileno(tty), TIOCGETP, &ttysav); ttyb.sg_flags |= RAW; ttyb.sg_flags &= ~ECHO;% ioctl(fileno(tty), TIOCSETP, &ttyb); fflush(stdout); cp = pbuf; for (;;) { c = getc(tty);( if(c == '\r' || c == '\n' || c == EOF) break; if (cp < &pbuf[127]) *cp++ = c; } *cp = '\0'; fprintf(stdout,"\r\n"); fflush(stdout);' ioctl(fileno(tty), TIOCSETP, &ttysav); signal(SIGINT, sig); if (tty != stdin) fclose(tty); return(pbuf);}!*[NIELAND_T.SECURITY.CRYPT]VMS.C;2+,]!./i 4;- 0123KPWO56:WofV7P[=qV89GiHJ#include #include $openfiles(argv,disk_file,disk_file2) char *argv[];int *disk_file, *disk_file2;{+ *disk_file = open(argv[1],O_RDONLY,0);; *disk_file2 = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0); if (*disk_file == -1)  {4 printf("Error on opening file %s.\n",argv[1]); exit(1); } if (*disk_file2 == -1)  {4 printf("Error on opening file %s.\n",argv[2]); exit(1); }}char *getkey(){ static char key[256]; short int channel,status;#include #include $DESCRIPTOR(input,"sys$input"); int sysqiow(),sys$assign();* status = sys$assign(&input,&channel,0,0);8 status = sys$qiow(0,channel,IO$_READVBLK + IO$M_NOECHO, 0,0,0,key,256,0,0,0,0); return(key);}char readone(desc) int desc;{int status, max =1; char str[2];) if (status = read (desc,str,max) != 1) return(EOF); else return(str[0]);}writeone(onechar,desc) char onechar; int desc;{int status, max =1; char str[2];/ if (status = write (desc,&onechar,max) != 1) return(status); else return(1);}#*[NIELAND_T.SECURITY.CRYPT]VMS.OBJ;2+,^!./i 4 - 0123KPWO56syfV7b=qV89GiHJ0VMSV1.010-MAR-1991 13:44VAX C V3.1-051R VMS openfiles~ getkey`readone+ writeone)<PRINTFEXITOPENSYS$QIOW SYS$ASSIGNREADWRITE < OPENFILES GETKEY READONE WRITEONE5$CODE$DATASTDINSTDOUTSTDERR@$CHAR_STRING_CONSTANTSPError on opening file %s. PError on opening file %s. 6Psys$inputP<^UЬT|~ЬRݢOPENPd޼ S<~ݢOPENPcdݢePRINTFEXITѼ ЬPݠߥPRINTFEXITP ^R ޢ6|~? SYS$ASSIGNPS|~|~<~|~Hlj=EMJO x(tI@X r(8.19 aq]g&vI-Vqo"q:$'ݽ+.}Beџ;*yk~xfj}Zv,z|/'7i*30,Ђ%' 8;2*lsd3[@"en.ĦB Qy;4-_])*50pǵş#sn|cp*"Z_|;ڜcUso '/#(ń`/,W }Q'(ügs/hn-&|VUM2c52:b'=nIYP~qe*sJ?%.ah&."<"3!"=~a*`2o6}R,x2b #okd2m"yG!3wbk'|>6u`p*!bW+.$ p!uFQ/{{zbU4_L")'ˤ2|$0=5')r$0v1743b9qsB$Y*ř'dUweg- %)*ג?j4o+3c'9v5{;8ti3xvz!) 3$ PbM@2 ^,,3({R?ۅrܜesu#}xje4E%)|wpaY 1~%Pa^TK:9{vq֖taB p$!"A]Ky(' d. 1%!?g '/&G ez4$ | a+!,HHv~ pt~mJ%:{-]J+Q; /;5:}krm it*-9;r=`ba!{0;g; AHBrwNX/P;L) j B^fV|tek,inf,l,6f, :q R 7 b*|D6' Clrmr ade1aiL_eqx";"Wl-( _ug~G`"I0s4k/.41xCn00"ekf^EDXu%~q:yts1 4(7 v 1xob4 k`rs.*;y$+@ , ,pe*'[h3%`zp'sw^z10*1c< `O+=R?4 cqU x|}uF9bmbD`e1.&(d |c1VzEU ~"e=kuwn"X > !: 1-{`\jcc,73Qp &00]ss;,.0k]{i JA71{ 3w++cz,t19 8'V8& e)O[ytpcv$bxx@PGb?4:*~ #' n)cr!|i$?fEmPDY."PKBe{zPNis1fdisoNNE5oom},+Rr@NH m ] Pmy{q1bP]QGSLU0~+}scgdk0'" EKBsb ruNY~iE%% :$,"!j-;\f],;1o,),96kRpP4,OaRI[ W ? yji2{0 [V ]JB8Krk?0@StY_FMv{;6"IO cT   n*GCvx&M0?d"%4pkvmd='}|(k.aI;5kyn4HOfje璀7g^i_?62s=DRcφ$m)fO[~L: POZ )VOH< 5dL}2q(L@o-F7 ;'$?z:kz|Ѩ? l9:8Wu@8֤~;Q'8LR ?f6 ~ }G27:X}xvn">'v)}|8ߝh @~`(~9 y%tTfdjB7 À(S?q8i7p ~(d"KNWڐ- 3Ɩ# ]PkZxM&Ǽq;q$tQNMtyqp=$et- s龿4yn#'nGkY$ Z†| F):d-Vmp]h$*%Yrp5))I{e*r R+/E>o|£{Ug&<_:uG`C-04-$rpBc7*bx:P`kx_-6'Q-wlv.P@ P}T,u^j/<:blc/0mhirԮPlƩ)1{ 9:U8x ̗| *y*pƢBG=ROh9y@WG8pVudcP`b)޷Ĥ/+!f{^%5pj֤%&i{79;AgyXs18 R[E(7';O+TMLUN8Pn 4; R>}RI6HNEVBUY2痫@IGLTQ;mFVmJIB]7=MNC<N*[Q2E\[uZz{wHAe$?\u[7(D7SG9~}@h.y7Vfgf 1",&(owx{pyU@ߚ(3:bp~0AEcX0 *cN#)8m/4RAO&SpPfsh7d+hyoGbCپ }Yڮ"rCI\'*Y^օUu:2=ZA|dlbYJ\K{3+$)Sym 4?>wfp>c@`[HFwf.TR O}M|S""d!h]{,cyJm5{K4Wqb}1/N7MdS- Z* 30h|icYYr@BDz9hQ>Ja+``@F 1p|}2"B}<"6M M# aRox+f^8dNK;"xdp$}a~h3GjU_`>>wmk{A) 3qs~-,TfOv-9$dw9KO a5:)Ep,u  EuoW-.9RbFDOQ"XODS9XQ~"<(*! Uxm:#wZCsj[RK[J".  Z;.*W.sjG I.!'"iOQi2&Kh="R DIH4Ffqh$bl5 Fbv#{F nI#I/ 4{ *JGp5!KB]s .,)"B.,+%T& +/ LQD^Mh9+#JG ୔;#oc< m= WQUXl/<1ec\ӕZ߯p HeYR  6E[I]b/^mvSVVkt Q[^oL >5/Ⱥ[GMP]Lߛi 6|!OhM+u5f rc=1_/(#q`pf97RZ} HIQJ-1AVNJRG[p>e+MY(o@0)$X@_GcJDOA 17zpQP Pda#;#EV#\T]h&WX`|G|}W9_MJc  DHA J RVh {5WR~l d\S1! 2D[t59K*URaP* hoOuZΤGn.byLtiUW-߭H0c܎JKކ~-RW { Լ( dR= aEfFJTv忬Q-nz5~ݝi8Ro/rk 2]B+-?)DYCXTAAOwG^IrR@[X[aUzeQN[37jOU;@\FYb}?;e ̀WZy )rMh-l8a$er("k9¢v^x '1|Tt=70O1<0# char$*block;RkiZ-q47q,b?u~!"fV MJCYPx=: $@t{4Ɖ'vdg}ݫ' k ?¹*v|kY=0Y=ilb~=~f|H4<~6*Mjg7 @ه`s8!Y(7Iߤ$No8'\oo3u7m}rڹiĜjܥWbuh劇ՀKh7y鼵E_ 0̮o۰aa)FӮR,ڡcbOB &Z|?|]D%  TnguŬS<pZLblƋ?vO  WIlc&*j7Dpt:el1G&l;cc8)ȂLoO&( ^0PRf9bÈ^.J\3c)r^c??Kpd|\JI  #x-|O/])hf &mi]ANpvK1YS O#uq%@ K/KWWC0AjXT*bI5A ^yebk}6e;GDC:&D '/Ü_OBL/j2=xqG]IԂK*)m-8pi[5iܭ]WD `9<@(LbyIGDDYv-Q&z{IZ\PVXGݹUΪX;OYֺ]cqdQ~%DW qUPO?ԽIni`\.y VKpKb<1" W R[=E@JJSnpK ~ f6^]JT?Go083V Abz3i H|&g-ˠ<J^=rV7e `&&_v@ TlAR/IFV3Suwyt3&1- 4ewt-cH tmr^]8H"/1(%alsiJOmذs?0&TOB7wcYptRf/T?-jPHVH[5V5 r PLGVP SǓ֥pK,qrFYB]0`;sO[_ߍ쐤bHp3TQ;R+sѓ "M D@zCl,46`my 6^INZvxs5Y̹R`Я怀kx ~яgKDN 1[ .- CKP硯]NW.zϹ垖 CwO5o\w_+sB,Xk\RY/{MALM^D(aP]0·07upDQ򬹛TD!./^︴ jNq[K18@4?ҙja !!GEB @q lFI H QXL  W@+3 QDAgB\ ](oN[^Yze{MC\EI D @^Z .&,)YHox}@Y]OKJ,)9B X] ]mL}jub% HQMWY ,,,CYVEK^lF<+,$ 6^SCk eH59GF XPA :!XUM=IK M^GIC\Ur!OG9I2QzZFU$`]d ]udX+~>y VE]Ӟ\VxB PZ[XN ,.QH(XYJ MNUY^EAC@T]T{l|B_ZE x~S2,) TYV LETX8hhXWZ\ OWU R\BBDGXHP^}vlACI]C DZ_I41,)-41E~(gAY [3,)B}D|[  / Hk[1 Z6I]=Q)TaJ N<_LCAe!r)WABCT]CNUR Z FDE]IACE OFhes16,STWXIR6,LO[K+ _R CYBKRUi EBSXRBED@ONS R =% QETS1,UNEEG_WHRYMRJYBKPU{n) t8$B]XKTUW[^TPESACUNR 3,[1,)CPKIBFIRBPIPBED@O_W RVUA-RnNc d,\2>*frr } QpC1e^ 2-+^_t(( 0 ()oBFNTVi `_t,,29n cX 3r(XX L R9x$ 'R=,)(AkBZRUHoSGNElL 3tkVU! =%QU`GUHfK #jq;;Wvz 9,10, 6, 1,11, 5,@ w,#1]," ,3,j1S