page@swan.ulowell.edu (Bob Page) (03/08/89)
Submitted-by: funding@metropolis.super.org (LeRoy Fundingsland) Posting-number: Volume 89, Issue 35 Archive-name: iff/ifftops.1 [uuencoded executable included. ..Bob] # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # ifftops.c # ifftops.n # ifftops.uu # This archive created: Tue Mar 7 22:52:31 1989 cat << \SHAR_EOF > ifftops.c /* IFFTOPS - ILBM IFF format file to PostScript translator. */ /* Version 3.0 - LeRoy Fundingsland - 12/12/88 - SRC */ /* */ /* This code has been compiled and tested under both Sun */ /* UNIX (V3.5) and Commodore AmigaDOS (V1.2). On the */ /* Amiga the Lattice 4.0 compiler was used ("lc -Lm"). */ /* CLAZ.c v2.0 */ /* by Steve Ludtke */ /* Created : 05/31/87 */ /* Re-written Oct-Dec 1988 by LeRoy Fundingsland */ /* Supercomputing Research Center */ /* Lanham, MD */ /* funding@metropolis.super.org */ /* */ /* Changes: */ /* - code re-structured for readability and maintain- */ /* ability (my opinion (mostly:-)) */ /* - comments added for readability (but mostly just so I */ /* could understand the code) */ /* - code extended, with IFDEFs, to be compilable on SUN */ /* systems (or nearly any 4.2BSD derived system, */ /* I expect) */ /* - extended to generate color postscript output (as of */ /* the above date, color postscript output */ /* devices may be pretty rare but we have one and */ /* I think they will be be increasingly common in */ /* the future) */ /* - code extended, again with IFDEFs, to contain a rough */ /* attempt at reducing the grainyness of the */ /* output image (ref. "SMOOTH_INCLUDE") */ /* - added the function for the image to be arbitrarily */ /* rotated */ /* */ /* TODO: */ /* - place all of the initialization of default */ /* values to happen at compile time */ /* - make sure that every value in the "cmap" array is */ /* non-negative */ /* - QUESTION: when an Amiga process exits is the */ /* programmer guaranteed that all system resources */ /* are released? (specifically MALLOCed memory)? */ /* the following DEFINE is for /* 1 */ /* IFDEFing code which is specific to /* 1 */ /* the QMS ColorScript-100 laser /* 1 */ /* printer. /* 1 */ #define QMS /* 1 */ #define SMOOTH_INCLUDE /* 1 */ /* The code in this file has been /* 1 */ /* constructed so that one, and only /* 1 */ /* one, of the following "environment" /* 1 */ /* "define"s should be included in the /* 1 */ /* active code at any time. /* 1 */ /* /# 1 #/ #define AMIGA /* 1 */ #define SUN /* 1 */ #include<stdio.h> #include<math.h> #ifdef AMIGA /* 1 */ #undef NULL /* 1 */ #include<exec/types.h> #endif AMIGA /* 1 */ #ifdef SUN /* 1 */ #define BYTE char /* 1 */ #define UBYTE unsigned char /* 1 */ #define WORD short /* 1 */ #define UWORD unsigned short /* 1 */ #define LONG int /* 1 */ #endif SUN /* 1 */ /* define IFF structures */ struct CMAP { UBYTE r,g,b; }; struct BMHD { UWORD w,h; WORD x,y; UBYTE npl; UBYTE masking,compression,pad1; UWORD tcolor; UBYTE xas,yas; WORD pWid,pHig; }; char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', /* 1 */ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; /* 1 */ /* 1 */ #ifdef SUN /* 1 */ #define TRUE 1 /* 1 */ #define FALSE 0 /* 1 */ #endif SUN /* 1 */ int blacknwhite = TRUE; /* 1 */ /* 1 */ char *filename_err1 = /* 1 */ "ERROR: Too many file names on the command line\n"; /* 1 */ char *filename_data1 = /* 1 */ "\t(input=\"%s\", output=\"%s\", error string=\"%s\")\n\n"; /* 1 */ /* smoothing related declarations /* 1 */ int smooth = 0; /* 1 */ int width, height; /* 1 */ /* pointers to storage where pixel /* 1 */ /* values are held during smoothing /* 1 */ char *pixelrow, *smoothrow; /* 1 */ char *malloc(); void putval1(); /* 1 */ void putval2(); /* 1 */ void /* 1 */ main(argc, argv) int argc; char *argv[];{ struct BMHD mhd; long len1, len2, cnt, m, h, i, j, k, lr, lb, lg, x1, x2, y1, y2, showpage; int fl1, b; int rotate = 0; /* 1 */ BYTE t; UBYTE cmap[100]; char *raster=NULL, *rp, *infile=NULL, inspace[80], /* 1 */ *outfile=NULL, c, *misc=NULL; /* 1 */ LONG msc1[3], msc2[2]; /* 1 */ FILE *fin, *fout; if(argc == 1){ /* 1 */ usage: /* 1 */ printf("Usage is: ifftops "); /* 1 */ printf("[-c] [-h]"); /* 1 */ #ifdef SMOOTH_INCLUDE /* 1 */ printf(" [-s]"); /* 1 */ #endif SMOOTH_INCLUDE /* 1 */ printf(" [-r <degrees>]\n"); /* 1 */ printf("\t\t[-p <x-start>,<y-start>,"); /* 1 */ printf("<x-scale>,<y-scale>]\n"); /* 1 */ printf("\t\t<input file> [<output-file>]\n"); /* 1 */ if(raster != NULL) /* 1 */ free(raster); /* 1 */ if(misc != NULL) /* 1 */ free(misc); /* 1 */ exit(); /* 1 */ } /* 1 */ showpage=1; x1=10; y1=10; x2=550; y2=480; /* 1 */ #ifdef QMS /* 1 */ y1 = (14*72)/16; /* mechanical paper handlng */ /* 1 */ #endif QMS /* 1 */ /* Get enough memory, figure out filespecs */ raster = malloc(200000); if (raster == NULL) { printf("Not enough memory. (1)\n"); exit(0); }/* 1 */ misc = malloc(2000); if(misc == NULL) /* 1 */ { printf("Not enough memory. (2)\n"); exit(0); }/* 1 */ /* parse command line arguments */ for(argc--,argv++; argc > 0; argc--, argv++){ /* 1 */ if(argv[0][0] == '-'){ /* 1 */ switch(argv[0][1]){ /* 1 */ case 'c': /* "color" output */ /* 1 */ blacknwhite = FALSE; /* 1 */ break; /* 1 */ case 'h': /* "hold" printout */ /* 1 */ showpage = FALSE; /* 1 */ break; /* 1 */ case 'p': /* "position" image */ /* 1 */ if(argv[0][2] != 0) /* 1 */ goto bad_p_flag; /* 1 */ argc--; argv++; /* 1 */ if(argc < 1) /* 1 */ goto bad_p_flag; /* 1 */ i = /* 1 */ sscanf(argv[0],"%ld,%ld,%ld,%ld",/* 1 */ &x1, &y1, &x2, &y2); /* 1 */ if(i != 4){ /* 1 */ bad_p_flag: printf("Bad format "); /* 1 */ printf("for 'p' flag\n");/* 1 */ goto usage; /* 1 */ } /* 1 */ break; /* 1 */ case 'r': /* "rotate" image */ /* 1 */ if(argv[0][2] != 0) /* 1 */ goto bad_r_flag; /* 1 */ argc--; argv++; /* 1 */ if(argc < 1) /* 1 */ goto bad_r_flag; /* 1 */ i = /* 1 */ sscanf(argv[0],"%ld",&rotate); /* 1 */ if(i != 1){ /* 1 */ bad_r_flag: printf("Bad format "); /* 1 */ printf("for 'r' flag\n");/* 1 */ goto usage; /* 1 */ } /* 1 */ if(rotate >= 360 || /* 1 */ rotate <= -360) /* 1 */ goto bad_r_flag; /* 1 */ break; /* 1 */ #ifdef SMOOTH_INCLUDE /* 1 */ case 's': /* "smooth" image */ /* 1 */ /* if(argv[0][2] == 0){ /* 1 */ smooth = 1; /* 1 */ /* break; /* 1 */ /* } /* 1 */ #ifdef NEVERDEF sscanf(&argv[0][2], "%d", &smooth); if(smooth == 0) /* 1 */ goto usage; /* 1 */ if(smooth < 1 || smooth > 3){ /* 1 */ printf("Invalid \"smooth\" "); printf("value.\n"); /* 1 */ exit(1); /* 1 */ } /* 1 */ #endif NEVERDEF break; /* 1 */ #endif SMOOTH_INCLUDE /* 1 */ default: /* 1 */ printf("Unknown flag '%c'\n", /* 1 */ *argv[1]); /* 1 */ exit(1); /* 1 */ } /* 1 */ } /* 1 */ else { /* file designator */ /* 1 */ /* maximum of two files allowed /* 1 */ /* the first one is the input /* 1 */ /* file, the second, if it /* 1 */ /* exists is the output file /* 1 */ if(infile == NULL) /* 1 */ infile = *argv; /* 1 */ else if(outfile == NULL) /* 1 */ outfile = *argv; /* 1 */ else{ /* 1 */ printf(filename_err1); /* 1 */ printf(filename_data1, infile, /* 1 */ outfile, *argv); /* 1 */ goto usage; /* 1 */ } /* 1 */ } /* 1 */ } /* end of argument parsing FOR loop */ /* 1 */ if(infile == NULL){ /* 1 */ printf("ERROR: input file name required.\n\n"); /* 1 */ goto usage; /* 1 */ } /* 1 */ printf("\n\n IFFTOPS - IFF to POSTSCRIPT"); printf(" converter V3.0\n"); printf(" By LeRoy Fundingsland\n"); printf(" (via Steve Ludtke)\n"); printf(" N\251 - No Copyright 1988\n"); printf("\n"); printf("File in : "); if(infile != NULL) /* 1 */ printf("%s\n", infile); else{ /* no input file supplied */ infile = inspace; /* 1 */ scanf("%s", infile); } if(outfile == NULL) /* 1 */ outfile = "out.ps"; fin = fopen(infile, "r"); if(fin == NULL) { printf("Sorry, can't open input file.\n"); exit(0); } if ((fread((char *)msc1,12,1,fin)) == 0) /* 1 */ { printf("Sorry, input file problem #1\n"); exit (0); } /* /# 1 #/ len1 = (long *)&msc1[4]; */ /* 1 */ len1 = msc1[1]; /* 1 */ printf("main : %d,%4s\n", len1, (char *)&msc1[0]); /* 1 */ cnt = 14; /* len1=# bytes in file according to IFF */ /* msc2=the name of the current chunk */ /* len2=# bytes in current chunk */ /* by the way, UNID is symply any chunk the program */ /* doesn't deal with */ /* Reads in the IFF file : */ while(cnt < len1){ fl1 = 0; if ((fread((char *)msc2,8,1,fin)) == 0) /* 1 */ {printf("Sorry, bad input file. \n"); exit(0);} /* /# 1 #/ len2 = (long *)&msc2[4]; */ /* 1 */ len2 = msc2[1]; /* 1 */ if (strncmp((char *)msc2,"CMAP",4) == 0) { /* 1 */ if ((fread(cmap,len2,1,fin)) == 0) { printf("Sorry, bad CMAP. \n"); exit(0); } printf("CMAP\n"); fl1 = 1; } if (strncmp((char *)msc2,"BMHD",4) == 0) { /* 1 */ if ((fread((char *)&mhd,len2,1,fin)) == 0) { printf("Sorry, bad BMHD. \n"); exit(0); } printf("BMHD\n"); fl1 = 1; } if (strncmp((char *)msc2,"BODY",4) == 0) { /* 1 */ printf("BODY\n"); #ifdef DEBUG /* 1 */ printf("\t\tlength of BODY chunk (from file) = %d\n", len2); /*999*/ #endif DEBUG /* 1 */ fl1 = 1; m = 0; rp = raster; if (mhd.compression == 1) { while (m <= len2) { t = getc(fin); m++; if (t >= 0) { t++; fread(rp,(long) t,1,fin); rp += t; m += t; } if (t<0) { t=(-t)+1; c=getc(fin); m++; for (i=0; i<t; i++) { *rp=c; rp++; } } } } if (mhd.compression == 0) { if((fread(rp,len2,1,fin)) == 0){ printf("Sorry, bad BODY. \n"); exit(0); } printf("No Compression\n"); } if (mhd.compression > 1) { printf("Sorry, unknown compression type.\n"); exit(0); } } /* end of "BODY" IF statement */ if (fl1 == 0) { if (len2 > 2000) { printf("Sorry, UNID too long.\n"); exit(0); } if ((fread(misc,len2,1,fin)) == 0) { printf("Sorry, UNID bad. \n"); exit(0); } printf("UNID\n"); } cnt += len2; cnt += 8; } /* end of IFF-file-reading WHILE loop */ #ifdef DEBUG /* 1 */ printf("Total bytes read into \"raster\" = %d\n", rp-raster); /*999*/ #endif DEBUG /* 1 */ fclose(fin); /* inform user if file already exists /* 1 */ /* and is being appended to /* 1 */ if((fout=fopen(outfile,"r")) != NULL){ /* 1 */ printf("Output file, \"%s\", already exists.\n",/* 1 */ outfile); /* 1 */ printf("Output is being appended to this file.\n"); fclose(fout); /* 1 */ } /* 1 */ if ((fout=fopen(outfile,"a")) == NULL) { printf("Sorry, cannot open output file.\n"); exit(0); } /* Standard POSTSCRIPT program, the only part following the data is */ /* the showpage command. */ if(smooth){ /* 1 */ width = mhd.w * 2; /* 1 */ height = mhd.h * 2; /* 1 */ /* the "pixelrow" array is sized at one /* 1 */ /* byte for each pixel because it will /* 1 */ /* hold the ASCII-HEX (see "hex" array) /* 1 */ /* value for each pixel. /* 1 */ /* (3 bytes for each pixel if color) /* 1 */ if(blacknwhite == TRUE) /* 1 */ pixelrow = malloc(width); /* 1 */ else /* color */ /* 1 */ pixelrow = malloc(width * 3); /* 1 */ if(pixelrow == NULL) /* 1 */ { printf("Not enough memory. (3)\n"); exit(0); }/* 1 */ /* the same for the "smoothrow" array /* 1 */ if(blacknwhite == TRUE) /* 1 */ smoothrow = malloc(width); /* 1 */ else /* color */ /* 1 */ smoothrow = malloc(width * 3); /* 1 */ if(smoothrow == NULL) /* 1 */ { printf("Not enough memory. (4)\n"); exit(0); }/* 1 */ } /* 1 */ else{ /* 1 */ width = mhd.w; /* 1 */ height = mhd.h; /* 1 */ } /* 1 */ /* 1 */ fprintf(fout, "%%!\r"); /* 1 */ fprintf(fout,"[0 0 0 0 0 0] defaultmatrix setmatrix\r");/* 1 */ /* the length of the postscript /* 1 */ /* "picture string" (picstr) must equal /* 1 */ /* the width of the picture in pixels /* 1 */ /* (mhd.w) times the number of bytes of /* 1 */ /* data supplyed per pixel (0.5 for /* 1 */ /* B&W, 1.5 for color). This is so that /* 1 */ /* every time the "image" command /* 1 */ /* invokes the reading procedure, all /* 1 */ /* N bytes representing one scan line /* 1 */ /* are read. /* 1 */ fprintf(fout,"/picstr %d string def\r", (int)(width * (blacknwhite ? 0.5 : 1.5))); /* 1 */ fprintf(fout,"%ld %ld translate\r",x1,y1); if(rotate) /* 1 */ fprintf(fout, "%d rotate\r", rotate); /* 1 */ fprintf(fout,"%ld %ld scale\r",x2,y2); fprintf(fout, "%d %d 4 [%d 0 0 -%d 0 %d]\r", width, height, width, height, height); /* 1 */ fprintf(fout,"{currentfile picstr readhexstring pop}"); #ifdef QMS /* 1 */ if(blacknwhite == FALSE) /* 1 */ fprintf(fout, " false 3 colorimage\r"); /* 1 */ else /* color! */ /* 1 */ #endif QMS /* 1 */ fprintf(fout, " image\r"); /* calculate and output file */ lb = lr = lg = 0; printf("rast size : %d #planes : %d\n", mhd.w*mhd.h/8, mhd.npl); /* 1 */ /* what does this do? */ for (h=0; h<96; h++) cmap[h] = cmap[h]/16; for (h=0; h<mhd.h; h++) { for (i=0; i<mhd.w/8; i++) { for(k=7;k>=0;k--) { b=0; for(j=0; j<mhd.npl; j++) { c = (raster[h*(mhd.w/8)*mhd.npl+i+((mhd.npl-j-1)*mhd.w/8)]); c = c>>k; c &= 1; b |= c; b <<= 1; } b >>= 1; /* this is for HAM pictures */ if (mhd.npl == 6) { c = (b&48) >> 4; b &= 15; if (c == 0) { b *= 3; lr = cmap[b]; lb = cmap[b+1]; lg = cmap[b+2]; } if (c == 1) lb = b; if (c == 2) lr = b; if (c == 3) lg = b; } if (mhd.npl != 6) { b &= 31; b *= 3; lr = cmap[b]; lb = cmap[b+1]; lg = cmap[b+2]; } if(blacknwhite){ /* 1 */ m = lr+lb+lg; m = m/3; if (m < 0) m = 0; if (m > 14) m = 14; #ifdef SMOOTH_INCLUDE /* 1 */ putval1(m, fout, h, /* 1 */ (i*8) + (7-k)); /* 1 */ #else SMOOTH_INCLUDE /* 1 */ putc(hex[m], fout); #endif SMOOTH_INCLUDE /* 1 */ } /* 1 */ else{ /* color! */ /* 1 */ #ifdef SMOOTH_INCLUDE /* 1 */ putval2(lr,lg,lb,fout, /* 1 */ h,(i*8)+(7-k)); /* 1 */ #else SMOOTH_INCLUDE /* 1 */ putc(hex[lr], fout); putc(hex[lg], fout); putc(hex[lb], fout); #endif SMOOTH_INCLUDE /* 1 */ } /* 1 */ } } } /* end of map-header-count FOR loop */ fprintf(fout,"\r"); if(showpage) /* 1 */ fprintf(fout,"showpage\r"); fclose(fout); printf("Done !!!\n"); free(misc); free(raster); #ifdef DEBUG /* 1 */ printf("\n\tmhd.w = %d mhd.h = %d\n", mhd.w, mhd.h); /*999*/ printf("\twidth = %d height = %d\n", width, height); /*999*/ #endif DEBUG /* 1 */ } #ifdef SMOOTH_INCLUDE /* 1 */ void /* 1 */ putval1(pixelval, fout, rownum, pixelnum) /* 1 */ char pixelval; /* the binary value */ /* 1 */ int rownum, pixelnum; FILE *fout;{ int i; char tempval; /* NOTE: the raw values are placed in */ /* the odd numbered elements of the */ /* arrays and the averaged values are */ /* placed in the even numbered elements.*/ /* The exception to this is the zeroth */ /* pixels and row. Since these values */ /* cannot be produced (because there is */ /* no previous value to average with) */ /* they are initialized with the value */ /* of the zeroth pixel (which also */ /* exists in array element numbered "1")*/ if(smooth){ if(rownum == 0){ if(pixelnum == 0){ smoothrow[0] = pixelval; smoothrow[1] = pixelval; pixelrow[0] = pixelval; pixelrow[1] = pixelval; } else{ smoothrow[(2*pixelnum)+1] = pixelval; pixelrow[(2*pixelnum)+1] = pixelval; tempval = (pixelrow[(2*pixelnum)-1] + pixelval) / 2; smoothrow[2*pixelnum] = tempval; pixelrow[2*pixelnum] = tempval; } } else{ /* rownum != 0 */ if(pixelnum == 0){ smoothrow[1] = (pixelrow[1] + pixelval) / 2; pixelrow[1] = pixelval; smoothrow[0] = smoothrow[1]; pixelrow[0] = pixelval; } else{ smoothrow[(2*pixelnum)+1] = (pixelrow[(2*pixelnum)+1] + pixelval) / 2; pixelrow[(2*pixelnum)+1] = pixelval; tempval = (pixelrow[(2*pixelnum)-1] + pixelval) / 2; smoothrow[2*pixelnum] = (pixelrow[2*pixelnum] + tempval) / 2; pixelrow[2*pixelnum] = tempval; } } /* if the last pixel in the row has */ /* been processed then write the two */ /* rows to the output file. */ if(pixelnum == ((width/2) - 1)){ for(i=0; i < width; i++) putc(hex[smoothrow[i]], fout); for(i=0; i < width; i++) putc(hex[pixelrow[i]], fout); } } else /* no smoothing */ putc(hex[pixelval], fout); } #define SETPIXELS(array,index,r,g,b) /* 1 */\ array[(3*index)+0] = r; /* 1 */\ array[(3*index)+1] = g; /* 1 */\ array[(3*index)+2] = b; /* 1 */ #define AVE0PIX(array,index,val) /* 1 */\ ((array[(3*index)+0]+val)/2) #define AVE1PIX(array,index,val) /* 1 */\ ((array[(3*index)+1]+val)/2) #define AVE2PIX(array,index,val) /* 1 */\ ((array[(3*index)+2]+val)/2) void /* 1 */ putval2(redval, greenval, blueval, fout, rownum, pixelnum) /* 1 */ char redval, greenval, blueval; /* the binary value */ /* 1 */ int rownum, pixelnum; FILE *fout;{ int i; char tempred, tempgreen, tempblue; /* NOTE: the raw values are placed in */ /* the odd numbered elements of the */ /* arrays and the averaged values are */ /* placed in the even numbered elements.*/ /* The exception to this is the zeroth */ /* pixels and row. Since these values */ /* cannot be produced (because there is */ /* no previous value to average with) */ /* they are initialized with the value */ /* of the zeroth pixel (which also */ /* exists in array element numbered "1")*/ if(smooth){ if(rownum == 0){ if(pixelnum == 0){ SETPIXELS(smoothrow,0,redval, greenval,blueval) SETPIXELS(smoothrow,1,redval, greenval,blueval) SETPIXELS(pixelrow,0,redval, greenval,blueval) SETPIXELS(pixelrow,1,redval, greenval,blueval) } else{ /* store raw values */ SETPIXELS(smoothrow,((2*pixelnum)+1), redval,greenval,blueval) SETPIXELS(pixelrow,((2*pixelnum)+1), redval,greenval,blueval) /* calculate and store */ /* averaged values */ tempred = (pixelrow[(3*((2*pixelnum)-1))+0] + redval) / 2; tempgreen = (pixelrow[(3*((2*pixelnum)-1))+1] + greenval) / 2; tempblue = (pixelrow[(3*((2*pixelnum)-1))+2] + blueval) / 2; SETPIXELS(smoothrow,(2*pixelnum), tempred,tempgreen,tempblue) SETPIXELS(pixelrow,(2*pixelnum), tempred,tempgreen,tempblue) } } else{ /* rownum != 0 */ if(pixelnum == 0){ SETPIXELS(smoothrow,1, AVE0PIX(pixelrow,1,redval), AVE1PIX(pixelrow,1,greenval), AVE2PIX(pixelrow,1,blueval)) SETPIXELS(pixelrow,1,redval, greenval,blueval) SETPIXELS(smoothrow,0,smoothrow[3], smoothrow[4],smoothrow[5]) SETPIXELS(pixelrow,0,redval, greenval,blueval) } else{ SETPIXELS(smoothrow,((2*pixelnum)+1), AVE0PIX(pixelrow,((2*pixelnum)+1),redval), AVE1PIX(pixelrow,((2*pixelnum)+1),greenval), AVE2PIX(pixelrow,((2*pixelnum)+1),blueval)) /* smoothrow[(2*pixelnum)+1] = (pixelrow[(2*pixelnum)+1] + pixelval) / 2; */ SETPIXELS(pixelrow,((2*pixelnum)+1), redval,greenval,blueval) /* calculate and store */ /* averaged values */ tempred = (pixelrow[(3*((2*pixelnum)-1))+0] + redval) / 2; tempgreen = (pixelrow[(3*((2*pixelnum)-1))+1] + greenval) / 2; tempblue = (pixelrow[(3*((2*pixelnum)-1))+2] + blueval) / 2; SETPIXELS(smoothrow,(2*pixelnum), AVE0PIX(pixelrow,(2*pixelnum),tempred), AVE1PIX(pixelrow,(2*pixelnum),tempgreen), AVE2PIX(pixelrow,(2*pixelnum),tempblue)) /* smoothrow[2*pixelnum] = (pixelrow[2*pixelnum] + tempval) / 2; */ SETPIXELS(pixelrow,(2*pixelnum), tempred,tempgreen,tempblue) } } /* if the last pixel in the row has */ /* been processed then write the two */ /* rows to the output file. */ if(pixelnum == ((width/2) - 1)){ for(i=0; i < width; i++){ putc(hex[smoothrow[(3*i)+0]], fout); putc(hex[smoothrow[(3*i)+1]], fout); putc(hex[smoothrow[(3*i)+2]], fout); } for(i=0; i < width; i++){ putc(hex[pixelrow[(3*i)+0]], fout); putc(hex[pixelrow[(3*i)+1]], fout); putc(hex[pixelrow[(3*i)+2]], fout); } } } else{ /* no smoothing */ putc(hex[redval], fout); putc(hex[greenval], fout); putc(hex[blueval], fout); } } #endif SMOOTH_INCLUDE /* 1 */ SHAR_EOF cat << \SHAR_EOF > ifftops.n .\" @(#)ifftops.1 3.0 88/11/25 SRC; .ds ]W \ \" overwrite the "Sun Release 3.5" string .TH IFFTOPS 1 "25 November 1988" .SH NAME .in +10 .ti -10 ifftops \- translate an Amiga IFF format file into PostScript .in -10 .SH SYNOPSIS .I ifftops [-c] [-h] [-s] [-r <degrees>] .ti +10 .I [-p <x-start>,<y-start>,<x-scale>,<y-scale>] .ti +10 .I <input-file> [<output-file>] .SH DESCRIPTION .I Ifftops translates Amiga IFF format files - specifically InterLeaved BitMap (ILBM) graphics IFF files - into PostScript format. It handles both black & white images and color images (see NOTE #1 in NOTES section below), including HAM mode images. There are options for positioning an image on the output page, scaling the image (larger or smaller), rotating the image, and placing multiple images on the same output page. The program works by generating a small PostScript-language "header" followed by a hexadecimal representation (in ASCII), of the bits of the image to render, in a raw format that PostScript understands. When the "header" is executed by the PostScript interpreter (which is commonly embedded in the printer being used) it handles the positioning, scaling, etc. functions and then reads all of the following data to produce the resultant image. All of the command line arguments are optional. The one piece of information that .I ifftops needs is the name of the input file to process. If this is not supplied on the command line then the user is prompted for it. (see NOTE #2) The arguments to .I ifftops are: .in +10 .ti -5 -c color. Take a color ILBM IFF file and produce a color PostScript output file. (If this flag is used with a black & white ILBM IFF file then the image is rendered in black & white with an interesting sepia effect.) .ti -5 -h hold page image. In PostScript terminology each printed page is called a page image. By default, .I ifftops appends a PostScript command at the end of each processed IFF image to cause the current page image to print out. If it is desired to place more than one IFF image onto the same printed page (i.e. page image) then this flag will cause the PostScript command (specifically "showpage") not to be appended. (see "EXAMPLES" below) .ti -5 -s smooth. This flag is my own attempt (very unsophisticated and brute force) at smoothing out the IFF image by doubling the number of pixels, both horizontally and vertically, and averaging the values. (see NOTE #3 below) .ti -5 -r rotate. Rotate the image by the given number of degrees. The value for the degrees must be between 360 and -360. Positive values result in counterclockwise rotation. .ti -5 -p position. Place and size the IFF image within the PostScript page image (i.e. on the resultant printed page.) <x-start> and <y-start> are the PostScript coordinates of the lower left-hand corner of the image to be printed. The defaults for these are 10 and 10 respectively. <x-scale> and <y-scale> are the PostScript dimensions, of the image to be printed, in the x and y directions. The defaults for these are 550 and 480 respectively. (see "EXAMPLES" below) .in -10 If an <output-file> is not specified on the command line then the file "out.ps" is used. If the specified (or default) <output-file> already exists then the output is appended to the end of this file (this is so that the "-h" flag (described above) will work.) Be careful that this is what you want - it caused me trouble on several occasions by appending to files when I didn't intend to. .SH EXAMPLES Process the ILBM IFF format file named "dog" and put the resulting PostScript output in the file "dog.ps": .br ifftops dog dog.ps Position and scale the image to be in the center of the page and to be four inches by three inches: .br ifftops -p 162,288,288,216 dog dog2.ps Position, scale, and rotate the image so that there are four copys of the image on the page, side-by-side, all four inches by three inches: .br .nf ifftops -h -r 90 -p 306,396,288,216 dog dog3.ps ifftops -h -r 90 -p 522,396,288,216 dog dog3.ps ifftops -h -r 90 -p 306,108,288,216 dog dog3.ps ifftops -r 90 -p 522,108,288,216 dog dog3.ps .fi .SH NOTES .in +5 .ti -5 1.) The color PostScript syntax has only been tested on a QMS Colorscript-100 printer. Since color Postscript printers are rather new, and since the PostScript syntax for handling color images has not yet been standardized, there is a good chance that the output generated by this program will not work on printers built by other manufacturers. The source code contains preprocessor statements (i.e. "#define QMS") which surround the color PostScript specific lines so, hopefully, it should be straight-forward to add support for other manufacturers' printers, if it is necessary. .ti -5 2.) All of the code development for this program was done on a Sun system running SunOS (i.e. UNIX) for the fairly weak reason that I did not have a compiler for my Amiga at that time (also, the only PostScript printers that I had access to were available via the Sun.) Therefore, I have made sure that the code compiles under both UNIX and AmigaDOS. The source code contains preprocessor statements to toggle the differences between the two environments (mostly "#include" files and some "#define"s). To compile this program for one of the two environments either a "#define AMIGA" or a "#define UNIX" must exist at the beginning of the file. Be sure that ONLY ONE of these two "#define"s is in effect. .ti -5 3.) The "-s" flag has very little noticeable effect on a 300 DPI laser printer. I believe that this is because the default "print cell" size is approximately 50 cells per inch. On the QMS Colorscript-100 printer I prepended the following PostScript code, by hand, to the output file produced by .I ifftops: .in +6 .nf %! /sfreq 72 def /sproc {dup mul exch dup mul add 1 exch sub} def sfreq 60 /sproc load sfreq 30 /sproc load sfreq 0 /sproc load sfreq 0 /sproc load setcolorscreen .fi .in (NOTE: this printer is a four-color printer (YMCB)) .br (NOTE: the standard PostScript language has a counterpart "setscreen" command for black & white printers.) .br The result of adding these lines was a noticeable reduction in the grainyness of the output file. An unfortunate side effect of this smoothing function is an aprox. 40% increase in the size of the source code file. (I haven't check the relative sizes of the binary files.) Because of this and because of its marginal usefulness, the source code includes preprocessor defines, keyed on the identifier SMOOTH_INCLUDE, which allow the smoothing code to be compiled out of the program. Specifically, if the line "#define SMOOTH_INCLUDE" exists in the source file then the smoothing code will be included. Happily, the smoothing function only adds a small amount to the total execution time of the program. However, the user should take note that using the "-s" flag causes the output file to be four times larger that it would be without using this flag. .in -5 .SH FILES .nf .ta 20 out.ps default output file if none is specified .ta 8 .fi .\".SH SEE ALSO .\"adduser(1), /etc/data/README, passwd(5) .SH BUGS There should be a way for the <input-file> and <output-file> to be re-directed from/to standard-input and standard-output. .SH AUTHOR LeRoy Fundingsland, November 1988 .br (derived from a program called CLAZ which was created by Steve Ludtke, May 1987) SHAR_EOF cat << \SHAR_EOF > ifftops.uu begin 644 ifftops M```#\P`````````#``````````(```^^```%M0```LD```/I```/ODCG?OY+\ M[P`T)$@D`$GY`````"QX``0I3@!`*4\`3$*L`$B3R4ZN_MHF0"EK`)@`.$JK] M`*QG``!P(`V0K0`$!H````"`*4``!&$``7H@:P"LT<C1R")H`!#3R=/)(`)R/ M`!(9*4D`5-"!4H!"9U*``D#__I_`58!"=P@`(`)3@-2!'[(``"``4X)1R/_VA M'[P`("``4X(?L2``(`!1RO_X(D\O"6```&PI:P`Z``0&K````(``!&$``0YA@ M``#X*4``2"\`)$`@*@`D9Q(L;`C<($`B*```*4$`.$ZN_X(B*@`@9QHD/```U M`^U.KO_B*4``4&<*Y8@@0"=H``@`I"!L`$@O"$AL```@:``D*6@`!`!41_D`3 M``CP<@`@/````(U@`B;!4<C__$ZZ-S!P`&`$("\`!"\`("P`+&<$($!.D$ZZ> M)[(L>``$(FP(W$ZN_F)*K`CD9P@B;`CD3J[^8DJL".AG"")L".A.KOYB2JP`; M6&<((FP`6$ZN_F)*K`!(9R0B+``\9P1.KO_<(BP`4&<$3J[_W"QX``1.KO]\= M(FP`2$ZN_H8@'RYL`$Q,WW]^3G5P9&"`0>L`7$ZN_H!!ZP!<3J[^C$YU0^P`< M7'``3J[]V"E`"-QGVDYU``!.50``*6T`"``<2JP`(&<4,'P``2)L`""SR&<(A M2'@`"$Z16$].74YU```#3````L@```/I3E4``%*L"00@;`D`4Z@`#"`H``Q*I M@&L4(F@`!%*H``0@+0`($H!R`!(18!8@+0`(`H````#_+P@O`$ZZ,K103R(`H M3EU.=4Y5``!"K`D$*6T`"`D`2&T`$"\M``Q(>O^B3KH--$_O``PO+0`(2'C_Y M_TZZ,GY03R`L"01.74YU``!.50``4JP)"%.L!]X@+`?>2H!K%"!L!]92K`?6Q M("T`"!"`<@`2$&`8("T`"`*`````_TAL!](O`$ZZ,C903R(`3EU.=4Y5``!"' MK`D(2&T`#"\M``A(>O^J3KH,O$_O``Q(;`?22'C__TZZ,@903R`L"0A.74YU< M```)!$Y=3G5P84Y5_^A(YR``0>T`#$*M__PK2/_L(&T`"$H09P`!7G``$!!2^ MK0`(0>P&$='`$A`K0/_X"`$``V;<#(`````E9@``Z"!M``@,$``E9DI3K`>X? M("P'N$J`:PYP`"!L![00$%*L![1@"DAL![!.NB_<6$\K0/_X0>P&$='M__@08 M$`@```-FR`RM````)?_X9X8@+?_\8```ZB!M``@,$``J9PPK;?_L_^A8K?_L% M8`J3R5*M``@K2?_H0JW_]"\M_^A(;?_T2'H`PB\M``A.N@QH3^\`$"M`__!*+ M@%;!1`%(@4C!2H%G!"M```@D+?_T#(+_____9AA*@6<$4JW__$JM__QO!B`M' M__Q@=G#_8')*@F<,2&P'L"\"3KHL+%!/2JW_\&90("W__&!64ZP'N"`L![A*9 M@&L.<``@;`>T$!!2K`>T8`I(;`>P3KHO`%A/*T#_]$'L!A'1[?_T$!`(```#Z M9L@B+?_TLJW_^&<`_JH@+?_\8`Q2K?_\8`#^G"`M__Q,WP`$3EU.=5.L![@@` M+`>X2H!K#G``(&P'M!`04JP'M&`*2&P'L$ZZ+J)83TYU3J[^8DJL<&%.5?_H" M2.<P`"EM``@)#$'M`!!"K?_\*TC_["!M``Q*$&<``29P`!`04JT`#$'L!A'1) MP!(0*T#_^`@!``-FW`R`````)68``,@@;0`,#!``)68R<``@;`D,$!!2K`D,G M*T#_^$'L!A'1[?_X$!`(```#9N`,K0```"7_^&>>("W__&```,H@;0`,#!``- M*F<,*VW_[/_H6*W_[&`*D\E2K0`,*TG_Z$*M__0O+?_H2&W_]$AZ`*(O+0`,\ M3KH*QD_O`!`K0/_P2H!6P40!2(%(P4J!9P0K0``,)BW_]`R#_____V882H%GF M!%*M__Q*K?_\;P8@+?_\8%9P_V!22H-G!%.L"0Q*K?_P9C@@+?_\8#YP`"!LV M"0P0$"M`__12K`D,0>P&$='M__00$`@```-FX"(M__2RK?_X9P#^XB`M__Q@3 M#%*M__Q@`/[4("W__$S?``Q.74YU3E7__'``(&P)#!`04JP)#"M`__Q*@&8"? M</].74YU``!.5?^@2.<X('``&WP`(/_[<@`K0?_V=/\K0O_R*T'_Z$'M_]`;6 M0/_Q&T#__!M`__T;0/_^&T#__RM!_Z`K0?_D*T+_L"M(_\P@;0`(2A!G5!`0, M`D``_W(874%K2+![$`AF]D[[$`0`(V```"P`(&```!X`*V```!``+6````(;J M?``!__]@&!M\``'__F`0&WP``?_]8`@;?``!__Q.<5*M``A@I"!M``@2$`P!5 M`#!F"AM\`##_^U*M``@@;0`(#!``*F82(FT`#"!16)$K4/_V4JT`"&`02&W_+ M]B\(3KHE]E!/T:T`""!M``@2$`P!`"YF,%*M``@@;0`(#!``*F82(FT`#"!1C M6)$K4/_R4JT`"&`02&W_\B\(3KHENE!/T:T`""!M``@2$`P!`&QF#!M\``'_N M\5*M``A@"@P!`&AF!%*M``@@;0`($!!2K0`(&T#_\`)``/]R3EU!:P`"J+![M M$`AF]$[[$`0`9F```I``16```H0`96```GX`1V```FH`9V```F0`8V```D0`@ M<V```?P`6&```8H`>&```80`<&```6P`;V```1H`=6```/``9&````)*+?_Q) M9PPB;0`,(%%8D2`08`HB;0`,(%%8D2`0*T#_[$J`:@IR`2M!_^A$K?_L2JW_3 MZ&<$<"U@#$HM__YG!'`K8`)P(!M`_]!P`!`M__XB+?_H@H!P`!`M__V"@$J!* M9PA2K?_,4JW_Y"\M_^PO+?_,3KHFA%!/*T#_R$JM__)J!G`!*T#_\B`M_\@BG M+?_RDH`K0?_$2H%O,B!M_\PB2-/!(@`D2&`"$MI3@63Z<``0+?_[(BW_Q"!MU M_\Q@`A#`4X%D^B`M__(K0/_(T:W_Y$'M_]`K2/_,2BW__V<``7@;?``@__M@A M``%N2BW_\6<,(FT`#"!16)$@$&`*(FT`#"!16)$@$"M`_^Q@`/]>2BW_\6<,J M(FT`#"!16)$@$&`*(FT`#"!16)$@$"M`_^Q*+?_\9Q(@;?_,$+P`,%*M_\QR% M`2M!_^0O`"\M_\Q.NB4N4$\K0/_(8`#_)!M\`##_^TJM__)J!G`(*T#_\DHMY M__%G#")M``P@45B1(!!@"B)M``P@45B1(!`K0/_L2BW__&<>(&W_S!"\`#!2* MK?_,(&W_S!"\`'A2K?_,<@(K0?_D+P`O+?_,3KHD2%!/*T#_R`PM`%C_\&8`B M_K1(;?_03KHF3%A/8`#^IB)M``P@45B1(E`K2?_,LOP``&8(0>P&""M(_\P@V M;?_,2AAF_%.(D>W_S"M(_^1*K?_R:THB+?_RL<%O0BM!_^1@/'`!*T#_Y")MO M``P@45B1(!`;0/_00BW_T6`B<`(K0/^P<`$K0/^@8!1"K?^P8`YP`2M`_[!@S M!G``8``%7DJM_[!J``"L(BW_Y"0M__:T@6P(<``K0/_V8`23K?_V2BW__V="= M4ZW_Y"`M_^1*@&L8<``@;?_,$!!2K?_,+P`@;0`03I!83V#<4ZW_]B`M__9*@ M@&M4<``0+?_[+P`@;0`03I!83V#B4ZW_]B`M__9*@&L2<``0+?_[+P`@;0`0J M3I!83V#B4ZW_Y"`M_^1*@&L8<``@;?_,$!!2K?_,+P`@;0`03I!83V#<("T`S M"&``!*P,K?______\F8&<`8K0/_R(BW_\@R!````%&T$<!-@`B`!*T#_Y%*`T M2&W_T$AM_^A(;?^T+RW_L"\`(&T`#"\03KH1]D_O`!@@;0`,4)!![?_0(BW_# MM"M`_^0K0?^\*TC_S$J!:@1$K?^\#*T````"_[!F&$J`9PX,K0````3_O&T$< M=`!@`G0!*T+_L$J`9P13K?^T<@!T`!0M__XF+?_HAH)T`!0M__V&@BM!_[Q*? M@V<$4JW_O$JM_[!G``"B2JW_M&L()"W_M-6M_[QT`!0M__PF+?_RAH(H+?^@E MAH1*@V<$4JW_O$J$9V1*`F9@2H!F!BM!__)@3"0M_[12@I""*T#_I"M"_ZA*\ M@&H&*T'_\F`R)BW_\K:`;P0K0/_RT<)3B"M(_ZQ*K?_R9Q@@+?_R(&W_K!(P3 M"``,`0`P9@93K?_R8.)*K?_R9@13K?^\("W_\B(`4H'3K?^\8```EDJM_Z!G2 M!%.M__)*K?^T:@H@+?^T(@!$@6`$(BW_M"M!_[@,@0```&-O!%*M_[P,@0``M M`^=O!%*M_[QP`!`M__PB+?_R)`"$@28M_Z"$@TJ"9P12K?^\2H-G.DH`9C8D* M+?_DLH)M!E."*T+_\DJM__)G&"`M__(@;?_,$C`(``P!`#!F!E.M__)@XDJM$ M__)F!%.M_[Q*+?__9C(B+?^\)"W_]K2!;R:3K?_V4ZW_]B`M__9*@&L6<``0T M+?_[+P`@;0`03I!83U*M_[Q@WDJM_^AG#DAX`"T@;0`03I!83V`J2BW__F<.% M2'@`*R!M`!!.D%A/8!9*+?_]9Q!P`!`M__LO`"!M`!!.D%A/2JW_L&<``.Q*H MK?^T:FA(>``P(&T`$$Z06$](>``N(&T`$$Z06$]3K?_R("W_\DJ`:P`!TE*M* M_[0@+?^T2H!J#DAX`#`@;0`03I!83V#84ZW_Y"`M_^1*@&L.<``@;?_,$!!2/ MK?_,8`)P,"\`(&T`$$Z06$]@L"`M_[13K?^T2H!K*%.M_^0@+?_D2H!K#G``Q M(&W_S!`04JW_S&`"<#`O`"!M`!!.D%A/8,Q*K?_R9PQ(>``N(&T`$$Z06$]3_ MK?_R("W_\DJ`:P`!/%.M_^0@+?_D2H!K#G``(&W_S!`04JW_S&`"<#`O`"!M4 M`!!.D%A/8,I3K?_D("W_Y$J`:PYP`"!M_\P0$%*M_\Q@`G`P+P`@;0`03I!8+ M3TJM__)G#$AX`"X@;0`03I!83U.M__(@+?_R2H!K*%.M_^0@+?_D2H!K#G``, M(&W_S!`04JW_S&`"<#`O`"!M`!!.D%A/8,P2+?_P#`$`96<&#`$`9V8$<&5@A M`G!%+P`@;0`03I!83TJM_[1J$DAX`"T@;0`03I!83T2M_[1@#$AX`"L@;0`05 M3I!83W`+*T#_P%.M_\`@+?^T<@I.NBMT!H$````P("W_P!N!"-`@+?^T<@I.- MNBM<*T#_M`RM````"?_`;LQ*K?^T9L8B+?_`#($````+;!92K?_`<``0-1C0S M+P`@;0`03I!83V#>#"T``?__9C(B+?^\)"W_]K2!;R:3K?_V4ZW_]B`M__9*O M@&L6<``0+?_[+P`@;0`03I!83U*M_[Q@WB`M``A,WP0<3EU.=4Y5__8K;0`0_ M__8@;0`,$!!2K0`,&T#__TH`9W8,```E9C`@;0`,#!``)68&4JT`#&`@+RT`M M"$AM__8O"&$`]E1/[P`,*T#_^DJ`9P8K0``,8+A*K``T9R8(+0`'__]G'G``N M$"W__R\`(&T`"$Z06$\@;0`,$!!2K0`,&T#__W``$"W__R\`(&T`"$Z06$]@U M`/]Z3EU.=0#$*2@``'!A3E7_W$CG(`!P`'(`(&T`"!(00>P&$='!$A`K0/_T) M*T#_\`@!``)G."`M__!R"DZZ*NQR`"!M``@2$%*M``@"@0````_0@2M`__!PW M`"!M``@0$$'L!A'1P!`0"````F;((&T`"!(0#`$`;&8,4JT`"'`!*T#_]&`*$ M#`$`:&8$4JT`""!M``Q.D"M`__P@;0`(#!``8V<<0>P&$='M__P0$`@```-GI M#"!M``Q.D"M`__Q@Y"(M__P,@?____]F#"!M`!`@@7``8``%2B!M``@0$`)`& M`/]R5%U!:P`%)+![$`AF]$[[$`0`1V``!'H`9V``!'0`16``!&X`96``!&@`= M9F``!&(`<V``!!(`8V```Z0`:&```R0`6&```:0`>&```9X`<&```8P`;V``N M`/8`9&````X`=6````)"K?_L8$IP`"M`_^Q*K?_P9PH,K0````'_\&\T)"W_< M_`R"````+6<(#((````K9B`,@@```"UF!'+_8`(B`"M!_^P@;0`,3I!3K?_P\ M*T#__$'L!A$@+?_\T<`2$`@!``)F#"!M`!`@@'``8``$;$*M_^@@+?_H<@I.S MNBEH(BW__`*!````#]"!*T#_Z"!M``Q.D"M`__Q3K?_P("W_\$J`9Q!![`817 MT>W__!`0"````F;`2JT`%&<`!!!*K?_L:@1$K?_H2JW_]&80(FT`%"!1("W_W MZ""`8``#\")M`!0@42"M_^A@``/B(BW__`R!````,&T(#($````W;PP@;0`0` M((%P`&```])"K?_H("W_Z.>`(BW__`*!````!]"!*T#_Z"!M``Q.D"M`__Q3> MK?_P("W_\$J`9Q0B+?_\#($````P;0@,@0```#=OP$JM`!1G``-V2JW_]&807 M(FT`%"!1("W_Z""`8``#8")M`!0@42"M_^A@``-22JW_\&8&<`@K0/_P0>P&_ M$2`M__S1P!(0"`$`!V8,(&T`$""`<`!@``,X*VW__/_X(&T`#$Z0*T#__$JMT M__!G"@RM`````O_P;TH,K0```##_^&9`#(````!X9P@,@````%AF,"!M``Q.= MD$'L!A$B2-/`$A$K0/_\"`$`!V8,(FT`$"*`<`!@``+80JW_Z%.M__!@3$'LE M!A$@+?_X(DC3P!(1"`$``F<,(@`$@0```#`K0?_H(DC3P!(1"`$``&<,(@`$E M@0```#<K0?_HT<`2$`@!``%G"@2`````5RM`_^A3K?_P("W_\$J`9VY![`81T M("W__")(T\`2$0@!``=G6B(M_^CI@2)(T\`4$2M!_^@(`@`"9PPB``2!````T M,(.M_^@B2-/`$A$(`0``9PPB``2!````-X.M_^C1P!(0"`$``6<*!(````!7A M@:W_Z"!M``Q.D"M`__Q@ADJM`!1G``'P2JW_]&80(FT`%"!1("W_Z""`8``!D MVB)M`!0@42"M_^A@``',0>P&$2`M__S1P!(0"`$``F8,(&T`$""`<`!@``&^7 M0JW_["`M_^QR"DZZ)KHB+?_\`H$````/T($K0/_L(&T`#$Z0*T#__%.M__`@E M+?_P2H!G$$'L!A'1[?_\$!`(```"9L!*K0`49P`!8B)M`!0@42`M_^PP@&``; M`5)*K0`49PXB;0`4(%%2D2`M__P0@%.M__`@+?_P2H!O)"!M``Q.D"M`__P,3 M@/____]G$DJM`!1GW")M`!0@45*1$(!@T"(M__P,@?____]F#"!M`!`@@7``M M8``!!B!M``A2B"`(8```^DJM`!1G#B)M`!0@45*1("W__!"`(&T`#$Z0*T#_( M_%*`9QQ3K?_P("W_\$J`9Q!![`81T>W__!`0"````V?"(FT`%"!10A!@``"@T M(BW__`R!````+6<D#($````N9QP,@0```#!M"`R!````.6\,(&T`$""!<`!@. M``"`2&W_X$AM_^PO+0`,+RW_\"\!3KH(]$_O`!0K0/_\2JW_[&8*(&T`$""`B M<`!@4$JM`!1G.DJM__1F'B)M`!0@42`M_^`B+?_D+T@`!$ZZ!1X@;P`$((!@E M%B)M`!0@42"M_^`A;?_D``1@!'``8!`@;0`0(*W__"!M``A2B"`(3-\`!$Y=E M3G4```R``@```&T``!#BB.*12D5L``!.8```"@1%`!!L``!"1$7H35A%#$4`1 M.6\``!!.^0``&9XR`$)`2$!(001%`!!N\@9%`!`D`.JHZKKJJ;&"M8%T`-."N MT8)(0+E`2$!.=20`Z(CHFNB)L8*U@70`TX+1@DA`T$4,0'_P909.^0``&;ZY% M0$A`3G5(YS]`80``"$S?`OQ.=3P\@``^/'_P2$!(0C@`R$:Y0,Q"O4*]1+!'% M;0``5K!";0``+@R```!_\&8```A*@6<```A.^0``&@*T1VT``!P,@@``?_!F] M```(2H-G```,(`(B`T[Y```:`DJ"9@``#DJ#9@``"$[Y```9XD[Y```9U+1'> M;0``-`R"``!_\&8```A*@V<```P@`B(#3OD``!H"2H!F```.2H%F```(3OD`T M`!GB3OD``!G4.@#*1V8``!Y*@&8```Y*@68```A.^0``&91.N0``&2Q@```(= MNT`*0``0SD)F```J2H)F```.2H-F```(3OD``!F4Q4#'0<]%3KD``!DLQ4#'= M0<]%8```"+]"`$(`$`1%/_#:1V@```A.^0``&;Y(0"X!X8CAB>&?LT>_0$A"$ M+@/ABN&+X9^W1[]"+@!(1\[#+`)(1LS!WH9"1]]'2$=(02P!S,)"1DA&WH9(& M0RP#S,!"1DA&WH9(0$A"+`#,PL;`WH-V`-V#PL+>@=V#(@!(028"2$/`P\3!J MT8(D`$)`T4!(0$A"0D+>@M&&PL/2AW0`T8).^0``%EP,@````"!L```T2$!(1 M03`!0D$$10$`;.A@``!F!00#`P("`@(!`0$!`0$!`0``````````````````X M``!V``R````@`&P```;AB%!#2$!*0&8```;IF%A#=``4.P#`Y;C60DA`)`'GV MJ>>ZLT*U0.E+FD-M```,2$#018!$2$!.=41%Z$TD`.JHZKKJJ;&"M8%(0+E`_ M2$!.=4A`2$1Z$`R`````(&P``!9(0$A!,`%"001%`0`,@````"!M[$)$#(``] M`"``;```!N&(4$1(0$I`9@``!NF86$1\`$/Y```8L!PQ``#MN-A&2$`L`>FI! MZ;ZS1KU`Z4R:1$A`2$1.=0``<``B`+E`2$!.=4CGP,!(>0````%.N0```=A8& M3TS?`P-P`'(`N4!(0$YU2.?`P$AY`````DZY```!V%A/3-\#`R`\``!_\+E`4 M<@!(0$YU2.?`P$AY````!$ZY```!V%A/3-\#`R`\?_$``'(`3G4(```#9P``< M($CGP,!(>0````1.N0```=A83TS?`P,(@``#",```0!`?_!(0$YU2.<\0'@`] M<@!@```:2.<\0'@`<@!*@&<``#AJ```(.#R``$2`#(``(```9```$CH\02!.; MN0``&)1,WP(\3G4R`$)`2$!(03H\0B!.N0``&)1,WP(\3G4``$CG,`!V_R0`% M:@``.@R`O_```&4``&!(Y\#`2'D````"3KD```'86$],WP,#8```1DCG,``FY M/'____\D`&H```92@[>`2$`T``)"?_"U0`1"/_!M```@"D``$$A`Z$($0@`4D M;@``,D1"Y*A*@FL``$!@```^<`!@```X2.?`P$AY`````DZY```!V%A/3-\#V M`R`#8```'`Q"``MNWK.`Y;CEJ;.`L(-BTDJ":@``!$2`3-\`#$YU``!(YP#`F M($1(0#@``D2``+E`!$`X``Q``!!M``!L#$`/[VT``-`,0$?P;0``&DA`YXCG# MF0*!````![.`2$``0'^`8```P`Q`#_!L```6#(#__P_O9@``G@R!\````&4`X M`)1(Y\#`2'D````"3KD```'86$],WP,#(#P``'^`N4!(0'(`8```@@Q`_I!LT M```H!D`X`("!9P``;$CGP,!(>0````%.N0```=A83TS?`P-P`&```%`B13H`D M`D``#PI``!!(0.A%5$5L```.1$7JJ'H`T85@```20D'KJ%)%Z[$"@0````_1\ M@2H)2$"Y0$A`8```%DA`YXCID0*!````!]&!2$"Y0$A`*`A,WP,`3G4``"0`. M`H!_____9@AP`'(`=`!@(DA"2,+H0@*"@``'_P1"`_\O`G0*XXGCD%'*__H(^ MP``?)!].=2\#+P"#GV=D!$(`"TJ`9@@@`4*!!$(`("\``I__X```9R120N*(^ MXI'BDR\``I__X```9NY*@VH.4H%D"E*`8-A30N.)XY`(```49_0&0@/_;QX,) M0@?_;"@"@``/___I2C\"0D)(0H1?2$*`@B8?3G4O/`````%.N0```=AP`&`88 M+SP````"3KD```'8,#Q_\$A"@$)(0$)`3^\`!'(`8,P``$Y0_^).40``2.=_J M,"1H``@@&B(23KD``!Q00FD`"$)I``8O`(.?9@XD:``<)B@`#%.#8```]%)". M,T(`!$A",T(`"$)&-"D`!&=<:A)60FL8"D(``]5I``1A``#\8$AA``$L4FD`B M!F`2=`35:0`$80``YF$``.Q3:0`&2H!KQ%-I``3CB>.08/)"0D)&+P"#GV<4* M80``S$I&9@P,0@`!9@93:0`&8.P&!@`P$X8@"E)"#$(`%&O4=@$D*``,2J@`M M$&<*>`'4:0`&4T)K.G@4#$(`$FPR.`(:,2`+!@4`!0P%`#EO(A.\`#`@"U(Q) M(`H:,2@*4T)JZ%)I``930WH`NJ@`$&<"4H0D:``<1_$P"B`$9QY31#8$!$,`K M%&L">!,4VU',__Q*0VL(%/P`,%'+__HD:``80I)*:0`(9P)3DB1H`!1"@3(IG M``9(P22!3-\,_DY93EA.=>*(XI%30F;X3G5\`$CG,``D`"8!XXGCD..6XXGC9 MD..6TH/1@F0```12AN.)XY#CEDS?``Q.=2\"=``_/`!`XXGCD..2#$(`"FT($ M!((````*4H%35V;H3^\``B0?3G5.4/_T3E$``$CG?C!P`'(`,T```#-```(SK M0``$,T``!F$``78,!@`P9@@`:2````1@[@P&`"UF"@!I@```!&$``5@,!@`PX M;3X,!@`Y;C@`:2````0S1@`*/"D`!IUI``(O``*?\````&<&4FD``F#.80#_7 M.CPI``H"A@````_2AD*&T89@N`P&`"YF#$II``9F8E)I``9@I@P&`$5G!@P&? M`&5F4&$``/(,!@`K9PP,!@`M9@H`:1````1A``#<#`8`,&TP#`8`.6XJ.BD`L M`.'I``#AZ0``VVD``.'I```"1@`/W6D```QI#_\``&W,X.D``&#R/RD`!`)?C M(`!F"B1H`!1"DF```((T*0``/RD`!`)?$`!G`D1"U6D``B\`@Y]G5#-\`#\`) M`$J`:PKCB>.04VD``&#R2FD``F<@:Q1T!-5I``!A`/Y<80#^8E-I``)@UF$`N M_H12:0`"8,QT`#0I```_*0`$`E^``&<$",(`'TZY```<AB1H`!@DP"2!)&@`_ M%"2\`````7``,"D`"$S?!'Y.64Y83G4L*``(9PHA?```````"$YU2.?\X"1H/ M`!!.DCP`3-\'/S-&``A3J``,9@@`:0@```1.=3\I``0"7P@`9P)\_TYU2.<PF M,BQY```(X"!O`!@B;P`<)&\`("9O`"0@+P`H(B\`+"0O`#`F+P`T3J[^I$S?( M3`Q.=4Y5__Q(YR``<``I0``82JT`"&LD)"T`"+2L"$AL&B("YX%![`GD(DC3Y MP4J19PHB`N>!T<$@"&`(<`DI0`>`<`!,WP`$3EU.=4)'WT=(1TA!+`',PD)&[ M2$;>ADA#+`/,P$Y5__@O+0`(3KK_EEA/*T#_^$J`9@1P_V`V(&W_^`@H``(`+ M`V<&<``@@&`D0JW__"\H``1.NAQJ6$]*K``89P9P_RM`__P@;?_X0I`@+?_\L M3EU.=4JL".!F$D/L!VQP`"QX``1.KOW8*4`(X"EL`%0'($AX`"A(>`#Z<``OQ M`"\`2&P'6"\`2&P'/B\`3KK^WD_O`"!(>``43KH9FEA/3G4@+?_\3EU.=0#", M,U!.5?_T2.<`($7L!["T_```9S8(*@`"`!MF*@@J``$`&V<B("H`!)"J`!`K6 M0/_X2H!G$B\`+RH`$"\J`!Q.N@ZR3^\`#"128,0O+0`(3KH9.EA/3-\$`$Y=S M3G4``$Y5__0@;0`(""@``0`;9Q(O"$AX__].NA*44$\K0/_\8`9P`"M`__P@W M;0`(("@`&`*`````#$J`9A1*J``49PXO*``4+R@`$$ZZ"4903R!M``@O*``<R M3KK^H%A/*T#_^`RM_______\9P1*@&<$</]@`G``3EU.=4Y5__A![`>P*TC_> M_$JM__QG&B!M__Q*J``89Q`K;?_\__@@;?_\*U#__&#@2JW__&8L2'@`(DZZN M`F!83RM`__Q*@&8$<`!@*"!M__@@K?_\<"%R`"!M__P0P5'(__PO+?_\+RT`* M#"\M``AA"$_O``Q.74YU3E7_[B!M`!!*J``89P@O"$ZZ_P)83RML!ZS_]"MMS M``S_\"!M__`0*``!`D``_PQ``&)G#`Q``&%F$D*M__1@""M\``"``/_T4JW_9 M\"!M__`,*``K``%7P$0`2(!(P"!M``P2$`)!`/\;0/_O#$$`=V<``)H,00!R! M9TH,00!A9@``WDAX``PO/```@0(O+0`(3KH%QD_O``PK0/_X4H!F!G``8```. M_$HM_^]G""`\````@&`"<`(`@```0``K0/_\8```H$HM_^]G!'`"8`)P``"`Z M``"``$AX``PO`"\M``A.N@5V3^\`#"M`__A2@&8&<`!@``"L2BW_[V<((#P`X M``"`8`)P`2M`__Q@5DHM_^]G!'`"8`)P`0"```"```"````!``"````"`$AX' M``PO`"\M``A.N@4B3^\`#"M`__A2@&8$<`!@6$HM_^]G""`\````@&`"<`(K- M0/_\8`1P`&`^D<@B;0`0(T@`$"-(`!0C;?_X`!PC:0`0``0C2``,(T@`"$JM# M__1G!"`(8`8@/```@``B+?_\@H`C00`8(`E.74YU\````&<&<&%.5?_T2.</I M("1M``@N+0`,+"T`$$J'9@1P`&!4>@"ZAFQ,>`"XAVQ"(&T`%%.H``@@*``(S M2H!K#B)H``12J``$<``0$6`(+PA.N@XB6$\K0/_T#(#_____9@0@!6`2("W_1 M]!2`4HI2A&"Z4H5@L"`%3-\$\$Y=3G5.50``+RT`"&$&6$].74YU3E7_[$CGM M`R`N+0`(2H=N!G``8```Q`R'````"&P"?@@@!R`'5H#D@.6`+@!![`A`)%`K= M2/_XM/P``&=.(BH`!+*';3ZRAV82(%(B;?_X(HB?K`A$(`I@``"`("H`!)"'Q M#(`````(;1H@2B!*T<<@DB%```0B;?_X(HB?K`A$(`I@5BM*__@D4F"L(`<B\ M+`CL(`?0@5.`3KH4>"(L".Q.NA5,4(`L`"`&(`96@.2`Y8`L`"\&3KH!OEA/@ M*T#_\$J`9Q0O!B\`3KH%PE!/+P=A`/\P6$]@`G``3-\$P$Y=3G4``````,(^- M,`````A.50``(BT`"`R!````,&T,#($````Y;@1P`6`"<`!.74YU``!.5?_VI M+RT`"$ZZ^EY83RM`__9*@&8$</]@*B\M`!`O+0`,(&W_]B\H``1.NA9<3^\`A M#"M`__I*K``89P1P_V`$("W_^DY=3G5.5?_X2JP)$&<<*VP)$/_X(&W_^"\0& M+RP)$$ZZ!/Q03Y'(*4@)$$JM``AF!'``8#!8K0`(+RT`"$ZZ_EY83RM`__Q*3 M@&8$<`!@%BMM__S_^"!M__@@K0`((&W__%B((`A.74YU3E4``$JM``AG$$*GS M88Y83R!M``A9B"E("1!P`$Y=3G5.5?_T2.<P`$JM``QF"B\M``AAS%A/8'A*V MK0`(9@PO+0`,80#_6%A/8&8@;0`(68@@$%F`*T#_]"M(__RQ[`D09PA"IV$`N M_S983R\M``QA`/\L6$\K0/_X2H!G,"0M``PF+?_TMH)C!"M"__0@+?_T(@`@> M;0`((FW_^&`"$MA3@63Z+RT`"&$`_UA83R`M__A,WP`,3EU.=4Y5__@@+0`(4 M!H`````,+T```"`O``!R`"QX``1.KO\Z*T#__$JM__QF!'``8#0@+0`(!H``` M```,(&W__"%```@O"$AL"11A``$(4$]*K`@T9@8I;?_\"#0@;?_\T/P`#"`(! M3EU.=4Y5__PO+0`(89!83RM`__Q*@&8&,'S__R`(3EU.=4Y5__A(YP$@80``O M@'``*4``$"E```@I0``,*4`(0"E`"$0I0`@X*4`(-"E`"#Q*K`@P9TP@+`CL1 M(BP(,-*`4X$@`2(L".Q.NA'0(BP([$ZZ$J10@"X`(`<@!U:`Y(#E@"X`+P=AH M`/\66$\D0+3\``!F!'#_8`PO!R\*3KH"_%!/<`!,WP2`3EU.=4Y5__@K;`D4$ M__Q*K?_\9R0@;?_\*U#_^")M__P@;?_\("@`""QX``1.KO\N*VW_^/_\8-:1V MR"E("1@I2`D43EU.=4Y5``!(YP`@(FT`""!I``0B;0`,(T@`!)'((H@D;0`(2 M2I)F`B2)2JH`!&<&(&H`!""))4D`!$S?!`!.74YU``````#"/?X`````````9 M``````````#"1A@````@``)P84Y5_^9(YR``0BW__T*L`!@K;`>`__)P`RM`* M__8B+?_VLJP(2&P4(`'G@$'L">31P$J09P92K?_V8.(B+?_V)"P(2+2!9@QP2 M&"E`!X!P_V```6H@`>>`0>P)Y-'`*TC_YDJM`!!G"`@M``(`$V<&0JW_[F`&\ M<`$K0/_N("P(&`*```"``+&M``P(+0`#``]G%"`M``P"@/____P`@`````(KD M0``,("T`#`*``````PR``````F<,#(`````!9P1*@&8,("T`#%*`*T#_^F`,: M<!8I0`>`</]@``#B("T`#"(``H$```,`2H%G``"B"```"F<:&WP``?__+RW_` M[B\M``A.NA/N4$\K0/_J8$@(```)9AQ(>`/M+RT`"$ZZ$NQ03RM`_^I*@&H&0 M".T``0`.""T``0`.9QX;?``!__\I;?_R!X`O+?_N+RT`"$ZZ$RA03RM`_^I*> M+?__9T0@+0`,`H````#P2H!G-DJM_^IK,"\M_^I.NA+@6$](>`/M+RT`"$ZZ% M$H903RM`_^I@$DAX`^TO+0`(3KH2<E!/*T#_ZDJL`!AG!'#_8!(@;?_F(*W_H M^B%M_^H`!"`M__9,WP`$3EU.=4Y5```@+0`,(@`"@0``@```@0```P$"@/__Z M?_\O`"\!+RT`"&$`_AA/[P`,3EU.=0``(T@`"$JM<&%.5?_X+RT`"$ZZ]4Y8, M3RM`__Q*@&8$</]@*B\M`!`O+0`,(&W__"\H``1.NA"L3^\`#"M`__A*K``87 M9P1P_V`$("W_^$Y=3G4O+0`(3KIP84Y5__P@+0`,+P`O+0`(*T#__&$&4$].Q M74YU3E7_Z$CG(3`N+0`,2H=N!G#_8```\@R'````"&P"?@@@!R`'5H#D@.6`3 M+@`@;0`(*TC_]-''WZP(1$/L"$`D42M(__`K2?_XM/P``&<``*(@2B`J``0@B M2M'`*TC_["0M__"UPF,6(FW_]"**(T<`!"9M__@FB7``8```C+7"9AXB4B9M< M__0FB2`J``0B`-*')T$`!")M__@BBW``8&@B;?_TL\AD")^L"$1P_V!8L\AF* M+DJ29PXB$K2!8PB?K`A$</]@0M^J``1*DF<0M))F#"!"("@`!-&J``0DD'``D M8"8K2O_X*VW_[/_H)%)@`/]:(&W_^""M__21R")M__0BB"-'``0@"$S?#(1.S M74YU3E7_\$CG(`!P`"M`__PK0/_X*T#_\"!M``@2$`P!`"UF#'`!*T#_^"M`T M__!@#`P!`"MF!G`!*T#_^'``(&T`""(M__@0,!@`+P!.NOD(6$]*@&<J("W_[ M_'(*3KH-^"(M__A2K?_X=``@;0`(%#`8`-""!(`````P*T#__&"\2JW_\&<$_ M1*W__"!M``P@K?_\("W_^$S?``1.74YU3E7_^"!M``@K2/_\2JT`#&H,$+P`0 M+5*M__Q$K0`,+RT`#"\M__Q.N@$44$\O0```("W__)"M``@B+P``TH`@`4Y=* M3G5.5?_R2.<`($(M__MP""M`__Q3K?_\("T`#"(``H$````/0>P'A-'!(BW_- M_!N0&//H@"M```P"@`____\K0``,2JT`#&;,0>W_\]'M__PB2"1M``@4V6;\V M<`B0K?_\3-\$`$Y=3G5.50``+RT`#"\M``AAC%!/3EU.=0``3E7_\$CG("!PG M"RM`__!"+?__4ZW_\"`M``PB``*!````!P:!````,"0M__`;@2CTYH`K0``,2 M`H`?____*T``#$JM``QFS$'M__31[?_P(D@D;0`(%-EF_'`+D*W_\$S?!`1.2 M74YU3E4``"\M``PO+0`(88Q03TY=3G4``$Y5__!(YP`@<`LK0/_P0BW__U.ML M__`@+0`,<@I.N@NT!H$````P("W_\!N!"/0@+0`,<@I.N@N<*T``#$JM``QFZ MT$'M__31[?_P(D@D;0`(%-EF_'`+D*W_\$S?!`!.74YU``!.5?_X2.<!`"!M+ M``Q*&&;\4XB1[0`,+@@@;0`(2AAF_%.(D>T`""`((FT`"-/`*TG_^"(M`!"^_ M@6,"+@$@!R!M``Q@`A+84X!D^B!M__A",'@`("T`"$S?`(!.74YU``!.5?_\, M2JT`$&<P(&T`"$H09R@B;0`,2A%G('``$!!2K0`(<@`2$5*M``R0@2M`__Q*1 M@&8F4ZT`$&#*2JT`$&<8(&T`"$H09P1P`6`.(&T`#$H09P1P_V`"<`!.74YU2 M``!.5?_\*VT`"/_\(&W__$H09QAP`!`0+P!.N@`:6$\@;?_\$(!2K?_\8.`@4 M+0`(3EU.=0``("\`!`P``&%M"@P``'IN!`0``"!.=0``3E4``$CG(``B+0`(" M#('_____9@1P_V!T(&T`#`@H````&V<0("@`&"0``H(````P2H)G!'#_8%0(K M*``"`!MG&A%!`"#0_``@(FT`#"-(``1P`2-```@@`6`R(&T`#"0H``0B:``0` ML\)F!'#_8!Y3J``$(F@`!!*!""@`!P`:9P93J``(8`12J``((`%,WP`$3EU.< M=4Y5__@O+0`(3KKO^EA/*T#_^$J`9@1P_V!((&W_^`@H``,``V<22'@``D*G6 M+RT`"$ZZ]6I/[P`,+RT`$"\M``P@;?_X+R@`!$ZZ"XI/[P`,*T#__$JL`!AG* M!'#_8`0@+?_\3EU.=0``3E7_W$*M__I![0`,*TC_\B!M``@0$%*M``@;0/__F M2@!G``%2#```)68``0P@;0`($A!2K0`(&T'__P)!`/]P&%U`:P``M+)[``AFA M]$[[``0`9&```'``>&```!P`<&```!8`<V````(@;?_R*U#_W%BM__)@<"!M+ M__(K4/_@6*W_\D'M_^QP!RM`__8K2/_<2JW_]FLH("W_X"(``H$````/0>P'2 MF-'!(FW_W!*04ZW_W.B`*T#_X%.M__9@TD(M_^U@(B!M__(@$%BM__(O`$AM/ M_^4K0/_@3KK[?E!/0>W_Y2M(_]PO+?_<3KH`H%A/T:W_^F``_QI2K?_Z4ZP'B MWB`L!]Y*@&L6(&P'UE*L!]80+?__$(!R`!(08`#^]'``$"W__TAL!](O`$ZZ^ M`H103R(`8`#^W%*M__I3K`?>("P'WDJ`:Q8@;`?64JP'UA`M__\0@'(`$A!@< M`/ZV<``0+?__2&P'TB\`3KH"1E!/(@!@`/Z>2&P'TDAX__].N@(R4$\@+?_Z4 M3EU.=0``3E7_^$CG(``@;0`(2AAF_%.(D>T`""M(__AP`"!M``@0$%*M``@K2 M0/_\2H!G,E.L!]XB+`?>2H%K$"!L!]92K`?6$(!R`!(08-`"@````/](;`?2A M+P!.N@',4$\B`&"Z2&P'TDAX__].N@&Z4$\@+?_X3-\`!$Y=3G4``$Y5__9(- MYR`@)&T`""`J`!@B``*!``"``%;"1`)(@DC"(@`"@0```#`;0O__2H%G"D*J1 M``AP_V```68(*@`'`!MG%`@J``8`&V<,+PI(>/__3KH!5E!/2JH`%&8X0JH`: M"`@J``(`&V<4<`$E0``4($K0_``@)4@`$&```((O"DZZ!"!83TJ`9W0(Z@`%9 M`!MP_V```0Q*+?__9V)4J@`(;EP@:@`$4JH`!'``$!`K0/_Z#(`````:9S`,0 M@`````UF-%.J``@@*@`(2H!K$"!J``12J@`$<``0$&```,0O"F$`_R!83V``% M`+@(Z@`$`!MP_V```*P@+?_Z8```I`@J``$`&V92".H````;+RH`%"\J`!`OF M*@`<3KKW)$_O``PK0/_V2H!J!@CJ``4`&TJ`9@8(Z@`$`!M*@&\<2BW__V<*A M(@!$@25!``A@!"5```@@:@`0)4@`!"`J`!@"@````#)*@&<82BW__V<(</\E( M0``(8`9P`"5```AP_V`B4ZH`""`J``A*@&L.(&H`!%*J``1P`!`08`@O"F$`V M_F983TS?!`1.74YU``!.5?_L2.<@("1M``P@+0`((BH`&"0!`H(````Q*T#_# M]$J"9P9P_V```L@@`0*```"``%;"1`)(@DC"&T+__DJJ`!1F``"2"`$``F8`F M`(IP`"5```P,K?____\`"&<``I(O"DZZ`I183TJ`9PP(Z@`%`!MP_V```GH(# MZ@`!`!M*+?_^9PX@*@`4(@!$@25!``Q@""`J`!0E0``,4ZH`#"`J``Q*@&L4% M(&H`!%*J``0@+0`($(!R`!(08!8@+0`(`H````#_+PHO`&$`_S903R(`(`%@3 M``(<""H``@`;9V@B+0`(#('_____9@9P`&```@(;0?__2BW__F<F#($````*. M9AYP`B\`2&P'J"\J`!PK0/_P3KKZU$_O``PK0/_X8!QP`2\`2&W__R\J`!PK( M0/_P3KKZMD_O``PK0/_X</\K0``(8```_`CJ``$`&THM__YG5B(M``@,@?__R M__]G2E2J``P,@0````IF(B!J``12J@`$$+P`#4JJ``QK#"\*2'C__V$`_GQ08 M3U*J``P@:@`$4JH`!"`M``@0@$JJ``QK``%0</\K0``(("H`!)"J`!`K0/_P: M2H!G``""""H`!@`:9UY(>``"0J<O*@`<3KKOMD_O``PK0/_L2BW__F="4ZW_3 M["`M_^Q*@&LV0J<O`"\J`!Q.NN^03^\`#$AX``%(;?_]+RH`'$ZZ](Q/[P`,F M2JP`&&8,$"W__0P``!IGP$YQ+RW_\"\J`!`O*@`<3KKYND_O``PK0/_X8`9PK M`"M`__@B+?_X#('_____9@@(Z@`%`!M@#+*M__!G!@CJ``0`&THM__YG#B`J< M`!0B`$2!)4$`#&`8""H``@`;9PAP`"5```Q@""`J`!0E0``,(&H`$"5(``0BH M+0`(#('_____9RQ3J@`,("H`#$J`:Q`@:@`$4JH`!!"!<``0$&`0`H$```#_6 M+PHO`6$`_3A03R`J`!@"@````#!*@&<$</]@$B(M__0,@?____]F!'``8`(@O M`4S?!`1.74YU3E4``"!M``A*J``49PP(*``#`!MF!'``8#PO+`8,3KKM3%A/L M(&T`""%```0A0``02H!F"G`,*4`'@'#_8!@A;`8,`!0"J/____,`&'``(4``N M#"%```A.74YU`````@`!R;!P84Y5__!(YP$P)&T`"`RL````(`D@;```D!(2< M#`$`(&<,#`$`"6<&#`$`"F8$4HI@Z$H29W(@+`D@Y8!2K`D@0>P)*-'`*TC_? M_`P2`")F*%**((I*$F<*#!(`(F<$4HI@\DH29@Q(>``!3KH"NEA/8)Q"$E**< M8)8@;?_\((I*$F<8$A(,`0`@9Q`,`0`)9PH,`0`*9P12BF#D2A)F`F`(0A)2& MBF``_VA*K`D@9@8@;`!(8`1![`DH*4@))$JL"2!F``"&0>P('")(1^P)J";9Y M)MDFV2;9-I$F;`!((FL`)$AX`"@O*0`$2&P)J$ZZ]@!/[P`,0>P)J"(()#P`H M``/N+&P(W$ZN_^(I0`GH("P)Z"E`"?!R!"E!">PI0`GX*4$)].6`*T#_\)/)$ M+'@`!$ZN_MHK0/_T(&W_\")M__0C:``(`*1^`&`R+&P(W$ZN_\HI0`GH+&P(: MW$ZN_\0I0`GP0>P(+B(()#P```/M+&P(W$ZN_^(I0`GX?@0@!R`'`(```(`!N M@:P)Y"`'(`<`@```@`*!K`GL`*P``(`#"?1*K`>L9P1P`&`&(#P``(``+@!"N MK`?,(`<@!P"``````2E`!\AP`2E`!^X@!R`'`(`````"*4`'ZG`"*4`($"`'9 M(`<`@````(`I0`@,0?H!UBE(`#`O+`DD+RP)($ZZ`")03T*G3KKGFEA/3-\,\ M@$Y=3G4````89@P0+?_]#```&D[Y`````/_P+RH`$$J`:@``'D2`2H%J```,- M1(%A```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``< M(DA`2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&[ MX9E10PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"T M0N:J2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`PT`F'R0?V M3G4N>0```$Q.N0``(9PO/````!1.N0``(?0@0B)#)``F`4A"2$/$P<;`P,'4< M0TA"0D+0@B8))`A.=4Y5__A(YP$@?@!%[`GDOJP(2&P>2I)G%`@J``(``V<"" M8`HO*@`$3KH"1%A/4H=0BF#<+RT`#"\M``A.NL5V4$],WP2`3EU.=4Y5__QP$ M`"(\```P`"QX``1.KO[.`H```#``*T#__$J`9@1P`&`D2JP`,&<:(&P`,$Z0_ M2H!F!'``8!!"ITAX`!1.NO]V4$\@+?_\3EU.=6&P3G4``$JL".!F$D/L",AP\ M`"QX``1.KOW8*4`(X"EL`%0(B$AX`#Q(>`#Z<``O`"\`2&P(M$AL")I(;`A\% M+P!.NN1@3^\`(%.`9P1P_V`"<`!.=0``3E7__$CG`0!*K``P9P1.NO],0JP`[ M&"(M``@D+0`,)BT`$"QL"-Q.KO_6+@`,A_____]F$BQL"-Q.KO]\*4``&'`%: M*4`'@"`'3-\`@$Y=3G5.5?_\2.<!`$JL`#!G!$ZZ_OQ"K``8(BT`""0M``PFQ M+0`0+&P(W$ZN_]`N``R'_____V82+&P(W$ZN_WPI0``8<`4I0`>`(`=,WP"`D M3EU.=4Y5__A(YS$"2JP`,&<$3KK^K$*L`!@@+0`04X`O0``0(BT`""0M``PF\ M+P`0+&P(W$ZN_[XN``R'_____V82+&P(W$ZN_WPI0``8<!8I0`>`("T`$`R`\ M`````F<<#(`````!9PI*@&8B("T`#&`<(`<@!]"M``Q@$B(M``AT`'8`+&P(4 MW$ZN_[Y.<4S?0(Q.74YU``!.5?_\2.<!`$JL`#!G!$ZZ_AA"K``8(BT`""0MD M``PL;`C<3J[_XBX`2H=F%BQL"-Q.KO]\*4``&'`"*4`'@'#_8`(@!TS?`(!.G M74YU3E4``$JL`#!G!$ZZ_=`B+0`(+&P(W$ZN_]QP`$Y=3G5.5?_\2JP`,&<$@ M3KK]L$*L`!@B+0`(=/XL;`C<3J[_K"M`__Q*K?_\9Q@B+?_\+&P(W$ZN_Z8B' M+0`(+&P(W$ZN_[@B+0`()#P```/N+&P(W$ZN_^(K0/_\2JW__&86+&P(W$ZNQ M_WPI0``8<`(I0`>`</]@!"`M__Q.74YU3E7__$JL`#!G!$ZZ_31"K``8(BT`D M"'3^+&P(W$ZN_ZPK0/_\2JW__&<0(BW__"QL"-Q.KO^F</]@-B(M``@D/```/ M`^XL;`C<3J[_XBM`__Q*K?_\9A8L;`C<3J[_?"E``!AP`BE`!X!P_V`$("W_3 M_$Y=3G4```/L````(````````#M8```[3```($X``!T^```=#@``'/X``!OD@ M```;K```&PX``!JJ```:?```&F0``!H6```9[@``&<H``!FJ```9<```&)``6 M`!@&```7Y@``%[@``!?:```7L@``%Y@``!=@```7D@``%UH``!>````72```: M%R@``!;:```6C`````$````!```Z=@````0````"```[1@``(+H```$2````W M#@````````/R```#Z0``!;5.5?ZP2.<X,+_L``1E`!9&<``K0/^@*T#^U"M`C M_MHK0/\N*T#_-@RM`````0`(9FI(;`#H3KH66EA/2&P`_$ZZ%E!83TAL`09.K MNA9&6$](;`$,3KH6/%A/2&P!'DZZ%C)83TAL`3I.NA8H6$](;`%03KH6'EA/- M2JW_-F<*+RW_-DZZ%@)83TJM_M1G"B\M_M1.NA7R6$].NA8$<`$K0/^L<`HKA M0/^\*T#_M"M\```")O^X*WP```'@_[`O/``##4!.NA686$\K0/\V2H!F$DAL# M`7!.NA6\6$]"ITZZ%<!83TAX!]!.NA5T6$\K0/[42H!F$DAL`8A.NA686$]"' MITZZ%9Q83U.M``A8K0`,2JT`"&\``;`B;0`,(%$0$`P``"UF``%*4H@0$$B`7 M<AY=06L``1:P>Q`(9O1.^Q`$`'-@``#^`')@``"*`'!@```>`&A@```0`&-@@ M```"0JP`>&```59"K?^L8``!3B)M``P@421(5(H0$DH`9CY3K0`(6*T`#`RM@ M`````0`(;2Q(;?^P2&W_N$AM_[1(;?^\2&P!H"!M``PO$$ZZ%1A/[P`8*T#_L MU%F`9P`!`$AL`;!.NA326$](;`&\3KH4R%A/8`#^8B)M``P@421(5(H0$DH`- M9C!3K0`(6*T`#`RM`````0`(;1Y(;?^@2&P!RB!M``PO$$ZZ%+Y/[P`,*T#_U MU%.`9QA(;`'.3KH4>EA/2&P!VDZZ%'!83V``_@HB+?^@#($```%H;-P,@?__' M_IAN>F#2<`$I0`#D8'`B;0`,(&D`!!`02(!(P"\`2&P!Z$ZZ%$Q03TAX``%.X MNA0V6$]@2DJM_RYF#")M``P@42M(_RY@.$JM_MIF"B!M``PK4/[:8"@O+`"LI M3KH4%%A/(&T`#"\0+RW^VB\M_RXO+`#@3KH3_$_O`!!@`/U\4ZT`"%BM``Q@> M`/Y,2JW_+F8.2&P!_$ZZ$\)83V``_5Q(;`(@3KH3M%A/2&P"3DZZ$ZI83TAL` M`F!.NA.@6$](;`*23KH3EEA/2&P"Q$ZZ$XQ83TAL`O9.NA."6$](;`+X3KH3E M>%A/2JW_+F<0+RW_+DAL`P1.NA."4$]@%$'M_MXO"$AL`P@K2/\N3KH3A%!/, M2JW^VF8(0>P##"M(_MI(;`,4+RW_+DZZ$P)03RM`_KQ*@&822&P#%DZZ$R!8; M3T*G3KH3)%A/+RW^O$AX``%(>``,2&W^R$ZZ$R9/[P`02H!F$DAL`S9.NA+R& M6$]"ITZZ$O983R`M_LQ(;?[(+P!(;`-4*T#_Z$ZZ$NI/[P`,<`XK0/_@(BW_) MX+*M_^AL``+00JW_J"\M_KQ(>``!2'@`"$AM_L!.NA+(3^\`$$J`9A)(;`-D9 M3KH2E%A/0J=.NA*86$\K;?[$_^1(>``$2&P#?DAM_L!.NA)*3^\`#$J`9CXO+ M+?Z\2'@``2\M_^1(;?\[3KH2?$_O`!!*@&822&P#A$ZZ$DA83T*G3KH23%A/V M2&P#F$ZZ$C983W`!*T#_J$AX``1(;`.>2&W^P$ZZ$?1/[P`,2H!F/B\M_KQ(X M>``!+RW_Y$AM_^Q.NA(F3^\`$$J`9A)(;`.D3KH1\EA/0J=.NA'V6$](;`.X# M3KH1X%A/<`$K0/^H2'@`!$AL`[Y(;?[`3KH1GD_O``Q*@&8``6A(;`/$3KH1] MMEA/<`$K0/^H0JW_W"MM_S;_,A`M__93`&8``.@B+?_<LJW_Y&X``-P@;?Z\X M4Z@`""`H``A*@&L.(F@`!%*H``1P`!`18`@O"$ZZ$7Q83U*M_]P;0/^?2@!K6 M/E(M_Y\0+?^?2(!(P"\M_KQ(>``!+P`O+?\R3KH18D_O`!`0+?^?2(`@;?\R# MT,`0+?^?2(!(P-&M_]PK2/\R2BW_GVH`_WX0+?^?1`!2`"!M_KQ3J``((B@`Y M"!M`_Y]*@6L.(F@`!%*H``1P`!`18`@O"$ZZ$/A83U*M_]Q"K?_4&T#^V1`M# M_Y](@$C`)"W_U+2`;`#_+B!M_S(0K?[94JW_,E*M_]1@W!`M__9*`&8X+RW^C MO$AX``$O+?_D+RW_,DZZ$+Q/[P`02H!F$DAL`\I.NA"(6$]"ITZZ$(Q83TAL= M`]Y.NA!V6$\0+?_V#````6,22&P#[DZZ$&)83T*G3KH09EA/2JW_J&94#*T`O M``?0_^1O$DAL!!!.NA!`6$]"ITZZ$$183R\M_KQ(>``!+RW_Y"\M_M1.NA!&0 M3^\`$$J`9A)(;`0H3KH0$EA/0J=.NA`66$](;`0\3KH0`%A/("W_Y-&M_^!0/ MK?_@8`#]*"\M_KQ.N@_L6$](;`1"+RW^VDZZ#ZA03RM`_KA*@&<B+RW^VDALY M!$1.N@_@4$](;`1H3KH/N%A/+RW^N$ZZ#[183TAL!)`O+?[:3KH/<%!/*T#^# MN$J`9A)(;`223KH/CEA/0J=.N@^26$]*K`#D9P``KC`M_^PB``*!``#__]*!V M*4$(\#`M_^XD``*"``#__]2"*4((]`RL`````0!X9@XO`4ZZ#Q)83RE`"/A@] M$N6)DJP(\"\!3KH._EA/*4`(^$J`9A)(;`2T3KH/(EA/0J=.N@\F6$\,K```= M``$`>&80+RP(\$ZZ#M!83RE`"/Q@%B`L"/#EB)"L"/`O`$ZZ#KA83RE`"/Q*R M@&8H2&P$S$ZZ#MQ83T*G3KH.X%A/8!1P`#`M_^PI0`CP<``P+?_N*4`(]$AL1 M!.0O+?ZX3KH.C%!/2&P$ZB\M_KA.N@Y^4$]*K`!X9PH@/#_@``!R`&`((#P_Q M^```<@`O0``4("P(\"]!`!A.N@ZT)"\`%"8O`!A.N@Y43KH.8B\`2&P%$B\M/ M_KA.N@XV3^\`#$JL`'AF&DAX`#\O+?^\2&P%*B\M_KA.N@X83^\`$&`8+RW_4 MM"\M_[Q(;`4^+RW^N$ZZ#?Y/[P`02JW_H&<4+RW_H$AL!5(O+?ZX3KH-Y$_O5 M``PO+?^P+RW_N$AL!5XO+?ZX3KH-S$_O`!`@+`CT+P`O`"(L"/`O`2\`+P%(% M;`5N+RW^N$ZZ#:I/[P`<2&P%BB\M_KA.N@V:4$]*K`!X9Q!(;`6R+RW^N$ZZ7 M#8903V`.2&P%NB\M_KA.N@UV4$]P`#(M_^PT+?_N)@'&PN:+<@`2+?_T+P$OZ M`TAL!=`K0/_$*T#_R"M`_\!.N@V(3^\`#$*M_]@B+?_8#($```!@;!A![?\[" M(DC3P='!<``0$.B($H!2K?_88-Q"K?_8<``P+?_N)"W_V+2`9``"0D*M_]1PJ M`#`M_^SFB"0M_]2T@&0``B1P!RM`_\Q*K?_,:P`"#G``*T#_T"M`_Z1P`!`MG M__0D+?_0M(!D``"$<@`R+?_L)@'FBR`M_]@O00`4(@-.N@S"<@`2+?_T3KH,> MN-"M_]1V`!8M__26@E.#(B\`%"]``!@@`TZZ#)SFB"(O`!C2@"!M_S80,!@`D M&T#^V4B`2,`B+?_,XJ`;0/[9`@```1M`_ME(@$C`@:W_I"`M_Z30@"M`_Z12& MK?_08`#_<"`M_Z3B@!(M__0K0/^D70%F``""(@`"@0```##H@0*M````#_^D" M&T'^V4H!9CX@+?^DY8B0K?^D0>W_.R)(T\!T`!010^W_/"1)U<!V`!821>W_9 M/29*U\!X`!@3*T#_I"M"_\@K0__$*T3_P`P!``%F""`M_Z0K0/_$#`$``F8(? M("W_I"M`_\A7`68(("W_I"M`_\`0+?_T70!G0`*M````'_^D("W_I.6(D*W_` MI$'M_SO1P'(`$A!![?\\T<!T`!000>W_/='`=@`6$"M`_Z0K0?_(*T+_Q"M#Y M_\!*K`!X9UH@+?_(T*W_Q-"M_\`K0/_<<@-.N@N<*T#_W$J`:@9R`"M!_]P,M MK0````[_W&\&<`XK0/_<("W_U.>`<@>2K?_,T($O`"\M_]@O+?ZX+RW_W&$`V M`)Y/[P`08"P@+?_4YX!R!Y*M_\S0@2\`+RW_V"\M_K@O+?_$+RW_P"\M_\AA% M``,83^\`&%.M_\Q@`/WN4JW_U&``_<Y2K?_88`#]LDAL!?(O+?ZX3KH*NE!/1 M2JW_K&<.2&P%]"\M_KA.N@JF4$\O+?ZX3KH*QEA/2&P%_DZZ"K983R\M_M1.@ MN@J@6$\O+?\V3KH*EEA/3-\,'$Y=3G5.5?_N2.<@,K_L``1E``I,2JP`Y&<`H M`CY*K0`09GA*K0`49B00+0`+(&P(_!"`(&P(_!%```$@;`CX$(`@;`CX$4``] M`6```2(@+0`4(@#2@2!L"/PB2-/!%"T`"Q-"``$@;`CX)$C5P15"``$2*O__J M2(%(P4B"2,+2@B`!<@(O20`43KH*/"!O`!00@!2`&T#_^V```-1*K0`49D(@, M;`CX$"@``4B`2,`2+0`+2(%(P="!<@).N@H*(&P(_!%```$2+0`+(&P(^!%!\ M``$B;`C\$JD``2!L"/@0@6```(P@+0`4(@#2@2!L"/S1P2)L"/C3P1(I``%(V M@4C!%"T`"TB"2,+2@B`!<@(O2``4+TD`&$ZZ":X@;P`4$4```1`M``LB;P`83 M$T```1(I__](@4C!2(!(P-*`(`%R`DZZ"80@;P`8$A!(@4C!&T#_^TB`2,#2] M@"`!<@).N@EH(&\`%!"`(&\`&!"M__L@+`CP<@).N@E04X`D+0`4M(!F``$DO M0JW__"(M__RRK`CP;%P@;0`,4Z@`#"`H``Q*@&LF(F@`!%*H``0D;`C\)DK7( MP1`32(!'[`!H+$O<P!`6$H!T`!018"`B;`C\T\$0$4B`0^P`:-+`<``0$2\(K M+P!.N@B<4$\D`%*M__Q@FD*M__PB+?_\LJP(\&P``*H@;0`,4Z@`#"`H``Q*P M@&LF(F@`!%*H``0D;`CX)DK7P1`32(!'[`!H+$O<P!`6$H!T`!018"`B;`CXM MT\$0$4B`0^P`:-+`<``0$2\(+P!.N@@P4$\D`%*M__Q@F"!M``Q3J``,("@`Z M#$J`:R`B:``$4J@`!!`M``M(@$7L`&@F2M;`$!,2@'(`$A%@'!`M``M(@$/LA M`&C2P'``$!$O""\`3KH'WE!/(@!,WTP$3EU.=4Y5_^Q(YSXRO^P`!&4`!Z1*^ MK`#D9P`&KDJM`!AF``%>2JT`'&9L$"T`"R!L"/P0@!(M``\@;`C\$4$``10M^ M`!,@;`C\$4(``B!L"/P10``#(&P(_!%!``0@;`C\$4(`!2!L"/@0@"!L"/@1C M00`!(&P(^!%"``(@;`CX$4```R!L"/@100`$(&P(^!%"``5@``-B("T`'"(`9 MTH$D`5*")@+EBY:"(&P(_")(T\,4+0`+$H(8+0`/$T0``1HM`!,310`"(&P(@ M^")(T\,2@A-$``$310`")@%3@RP#Y8Z<@R!L"/@B2-/&%A%(@TC#2()(PM:"T M(`,O00`@<@(O20`D3KH'&"!O`"02*``!2(%(P4B$2,32A!M`__L@`7("3KH&0 M^B!O`"02*``"2(%(P4B%2,72A1M`__H@`7("3KH&W"(O`"`D`>6*E($@;`C\I M(DC3PA(M__L2@18M__H30P`!$T```B!L"/@B2-/"$H$30P`!$T```AM`__E@P M``)X2JT`'&8``,P@;`CX$"@``TB`2,`2+0`+2(%(P="!<@).N@9Z(&P(_!%`@ M``,B;`CX$BD`!$B!2,$4+0`/2()(PM*"(`%R`DZZ!E0@;`C\$4``!")L"/@26 M*0`%2(%(P10M`!-(@DC"TH(@`7("3KH&+B!L"/P10``%$BT`"R!L"/@100`#> M$"T`#R!L"/@10``$%"T`$R!L"/@10@`%(FP(_!*I``,@;`C\$6@`!``!(&P(7 M_!%H``4``B!L"/@0@2!L"/@10``!(&P(^!%"``)@``&F("T`'"(`TH$D`5*"V M)@+EBY:"(&P(_")(T\,D;`CX)DK7PQ032()(PA8M``M(@TC#U(,@`B]!`"!RT M`B])`"A.N@6*(&\`*!"`$"L``4B`2,`2+0`/2(%(P="!<@).N@5L(&\`*!%`R M``$0*P`"2(!(P!(M`!-(@4C!T(%R`DZZ!4P@;P`H$4```A`M``L6@!(M``\7= M00`!%"T`$Q="``(F+P`@*`-3A"H$Y8V:A"!L"/@B2-/%&!%(A$C$2(!(P-B`= M(`1R`B])`"1.N@4`(&\`)!(H``%(@4C!&"T`#TB$2,32A!M`__L@`7("3KH$Y MWB!O`"02*``"2(%(P4B"2,+2@AM`__H@`7("3KH$P.6+EJ\`("!L"/S1PR)L# M"/C3PQ(12(%(P10M__M(@DC"TH(;0/_Y(`%R`B](`"0O20`H3KH$BB!O`"00J M@")O`"@0*0`!2(!(P!(M__I(@4C!T(%R`DZZ!&@@;P`D$4```2)O`"@0*0`"_ M2(!(P!(M__E(@4C!T(%R`DZZ!$0@;P`D$4```B!O`"@0K?_[$6W_^@`!$6W_7 M^0`"("P(\'("3KH$'E.`)"T`'+2`9@`#HD*M__PB+?_\LJP(\&P``5`@;0`4$ M4Z@`#"`H``Q*@&LL(F@`!%*H``0@`>6(D($D;`C\)DK7P!`32(!'[`!H+$O<; MP!`6$H!T`!018";EB9*M__PB;`C\T\$0$4B`0^P`:-+`<``0$2\(+P!.N@-<5 M4$\D`"!M`!13J``,("@`#$J`:S0B:``$4J@`!"`M__PB`"0!Y8J4@21L"/P@[ M2M'"$B@``4B!0>P`:"9(UL$2$Q*!=``4$6`N("W__.6(D*W__"!L"/S1P!`H@ M``%(@$'L`&C0P'``$!`O+0`4+P!.N@+J4$\D`"!M`!13J``,("@`#$J`:S0B; M:``$4J@`!"`M__PB`"0!Y8J4@21L"/P@2M'"$B@``DB!0>P`:"9(UL$2$Q*!E M=``4$6`N("W__.6(D*W__"!L"/S1P!`H``)(@$'L`&C0P'``$!`O+0`4+P!.9 MN@)X4$\D`%*M__Q@`/ZH0JW__"(M__RRK`CP;``"-"!M`!13J``,("@`#$J`I M:RPB:``$4J@`!"`!Y8B0@21L"/@F2M?`$!-(@$?L`&@L2]S`$!82@'0`%!%@C M)N6)DJW__")L"/C3P1`12(!#[`!HTL!P`!`1+P@O`$ZZ`?Y03R0`(&T`%%.H? M``P@*``,2H!K-")H``12J``$("W__"(`)`'EBI2!)&P(^"!*T<(2*``!2(%!Z M[`!H)DC6P1(3$H%T`!018"X@+?_\Y8B0K?_\(&P(^-'`$"@``4B`0>P`:-#`H M<``0$"\M`!0O`$ZZ`8Q03R0`(&T`%%.H``P@*``,2H!K-")H``12J``$("W_$ M_"(`)`'EBI2!)&P(^"!*T<(2*``"2(%![`!H)DC6P1(3$H%T`!018"X@+?_\: MY8B0K?_\(&P(^-'`$"@``DB`0>P`:-#`<``0$"\M`!0O`$ZZ`1I03R0`4JW_\ M_&``_J@@;0`44Z@`#"`H``Q*@&L@(F@`!%*H``00+0`+2(!%[`!H)DK6P!`3Q M$H!R`!(18!P0+0`+2(!#[`!HTL!P`!`1+P@O`$ZZ`,903R(`(&T`%%.H``P@J M*``,2H!K(")H``12J``$$"T`#TB`1>P`:"9*UL`0$Q*`<@`2$6`<$"T`#TB`B M0^P`:-+`<``0$2\(+P!.N@!Z4$\B`"!M`!13J``,("@`#$J`:R`B:``$4J@`\ M!!`M`!-(@$7L`&@F2M;`$!,2@'(`$A%@'!`M`!-(@$/L`&C2P'``$!$O""\`Y M3KH`+E!/(@!,WTQ\3EU.=0``3OD``#M$3OD``";(3OD``"+(3OD``"^D3OD`E M``)23OD``#3\3OD``!;D3OD``#M<3OD``"<L3OD``!JX3OD``#+83OD``")0G M3OD``"'T3OD``#-43OD```+03OD``#%,3OD``"3H3OD``#J`3OD```3`3OD`M M``,,3OD``!H\<&$```/L````%0```````!9T```6O```%H```!:,```6>@``E M%LX``!9N```6F```%J0``!9H```6M@``%F(``!;(```6L```%JH``!;"```6D M7```%IX``!:&```6D@``%E8````````#\@```^H```(\````````````````@ M````````````````````````````````````````````````````````````` M``````````````````````````````````````````````!D;W,N;&EB<F%RP M>0`P,3(S-#4V-S@Y04)#1$5&`````4524D]2.B!4;V\@;6%N>2!F:6QE(&YAV M;65S(&]N('1H92!C;VUM86YD(&QI;F4*`````'P)*&EN<'5T/2(E<R(L(&]U: M='!U=#TB)7,B+"!E<G)O<B!S=')I;F<](B5S(BD*"@````"P`````%5S86=E. M(&ES.B!I9F9T;W!S(```6RUC72!;+6A=`"!;+7-=`"!;+7(@/&1E9W)E97,^Q M70H```D)6RUP(#QX+7-T87)T/BP\>2US=&%R=#XL```\>"US8V%L93XL/'DMY M<V-A;&4^70H`"0D\:6YP=70@9FEL93X@6SQO=71P=70M9FEL93Y="@!.;W0@4 M96YO=6=H(&UE;6]R>2X@*#$I"@!.;W0@96YO=6=H(&UE;6]R>2X@*#(I"@`EI M;&0L)6QD+"5L9"PE;&0`0F%D(&9O<FUA="``9F]R("=P)R!F;&%G"@`E;&0`A M0F%D(&9O<FUA="``9F]R("=R)R!F;&%G"@!5;FMN;W=N(&9L86<@)R5C)PH`E M`$524D]2.B!I;G!U="!F:6QE(&YA;64@<F5Q=6ER960N"@H```H*("`@("`@L M("`@("`@("`@($E&1E1/4%,@+2!)1D8@=&\@4$]35%-#4DE05``@8V]N=F5R( M=&5R(%8S+C`*```@("`@("`@("`@("`@("`@("`@("`@("`@("!">2!,95)O) M>2!&=6YD:6YG<VQA;F0*`"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@@ M*'9I82!3=&5V92!,=61T:V4I"@``("`@("`@("`@("`@("`@("`@("`@("`@+ M("!.J2`M($YO($-O<'ER:6=H="`Q.3@X"@`*`$9I;&4@:6X@.B```"5S"@`E` M<P``;W5T+G!S``!R`%-O<G)Y+"!C86XG="!O<&5N(&EN<'5T(&9I;&4N"@``@ M4V]R<GDL(&EN<'5T(&9I;&4@<')O8FQE;2`C,0H`;6%I;B`Z("5D+"4T<PH`4 M`%-O<G)Y+"!B860@:6YP=70@9FEL92X@"@``0TU!4```4V]R<GDL(&)A9"!#0 M34%0+B`*``!#34%0"@!"34A$``!3;W)R>2P@8F%D($)-2$0N(`H``$)-2$0*& M`$)/1%D``$)/1%D*`%-O<G)Y+"!B860@0D]$62X@"@``3F\@0V]M<')E<W-IP M;VX*`%-O<G)Y+"!U;FMN;W=N(&-O;7!R97-S:6]N('1Y<&4N"@!3;W)R>2P@Y M54Y)1"!T;V\@;&]N9RX*``!3;W)R>2P@54Y)1"!B860N(`H``%5.240*`'(`0 M3W5T<'5T(&9I;&4L("(E<R(L(&%L<F5A9'D@97AI<W1S+@H`3W5T<'5T(&ESL M(&)E:6YG(&%P<&5N9&5D('1O('1H:7,@9FEL92X*`&$`4V]R<GDL(&-A;FYOT M="!O<&5N(&]U='!U="!F:6QE+@H``$YO="!E;F]U9V@@;65M;W)Y+B`H,RD*[ M`$YO="!E;F]U9V@@;65M;W)Y+B`H-"D*`"4E(0T``%LP(#`@,"`P(#`@,%T@] M9&5F875L=&UA=')I>"!S971M871R:7@-```O<&EC<W1R("5D('-T<FEN9R!DP M968-```E;&0@)6QD('1R86YS;&%T90T``"5L9"`E;&0@=')A;G-L871E#0``B M)60@<F]T871E#0``)6QD("5L9"!S8V%L90T``"5D("5D(#0@6R5D(#`@,"`M[ M)60@,"`E9%T-``![8W5R<F5N=&9I;&4@<&EC<W1R(')E861H97AS=')I;F<@W M<&]P?0``(&EM86=E#0`@9F%L<V4@,R!C;VQO<FEM86=E#0``<F%S="!S:7IE> M(#H@)60@("`@("-P;&%N97,@.B`E9`H```T`<VAO=W!A9V4-`$1O;F4@(2$A7 M"@`````````"```@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0, M$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!& M`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0P M$!`0("`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0` M$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!= M`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@````Y M__\````.``X````````````````J*B!3=&%C:R!/=F5R9FQO=R`J*@``__\`J M```$``0````````'*```!Q1%6$E4``#__P````0`!`````````=2`````&EN" M='5I=&EO;BYL:6)R87)Y`````````#`Q,C,T-38W.#EA8F-D968`````,#$RD M,S0U-C<X.4%#1$5&``T*`````(`````'T@``````````````````````````] M````````````````!_0`````````````````````````````````````````[ M`````````````````````````````````````````````````(``8V]N.C$P; M+S$P+S,R,"\X,"\`*@`````````````````````````````````````H*BH@@ M57-E<B!!8F]R="!297%U97-T960@*BH``/__````#@`.````````"$P`````K M__\````$``0`````````````"&A#3TY424Y510``__\````$``0````````(I MD`````!!0D]25`#__P````0`!`````````BN`````&EN='5I=&EO;BYL:6)R^ M87)Y````````````````````````````!`````/L````"P````(```C````(< MI@``"(P```AT```'T@``![````=D```'3@``!TH```#@````K`````````/R8 `` end size 24660 SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.