[comp.sources.amiga] v89i035: ifftops - iff to postscript converter

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.