page%rishathra@Sun.COM (Bob Page) (04/27/89)
Submitted-by: hcrvax!edwin (Edwin Hoogerbeets) Posting-number: Volume 89, Issue 97 Archive-name: libraries/edlib11.1 Changes since initial release: - fixed a bug in strnicmp. Thanks to Richard Sexton for pointing this out and suggesting a fix - added basename, chdir, getcwd, filetype, isdir, isfile, strdup and strtod - added register declarations where possible [uuencoded libraries included. ..bob] # This is a shell archive. # Remove anything above and including the cut line. # Then run the rest of the file through 'sh'. # Unpacked files will be owned by you and have default permissions. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: SHell ARchive # Run the following text through 'sh' to create: # BaseName.man # BinToInt.man # ChDir.man # DecToInt.man # FileType.man # GetCWD.man # GetOpt.man # HexToInt.man # IsBDigit.man # IsCSym.man # IsCSymF.man # IsDir.man # IsFile.man # IsODigit.man # ReadMe # ReadMe.USENET # SToLower.man # SToUpper.man # StrCSPN.man # StrDup.man # StrICmp.man # StrNICmp.man # StrPBrk.man # StrPos.man # StrRPBrk.man # StrRPos.man # StrSPN.man # StrToD.man # StrTok.man # ToInt.man # barrett.doc # basename.c # bintoint.c # chdir.c # dectoint.c # ed.lib.uu # This is archive 1 of a 2-part kit. # This archive created: Wed Apr 26 13:37:38 1989 echo "extracting BaseName.man" sed 's/^X//' << \SHAR_EOF > BaseName.man XBASENAME(3) Library Functions BASENAME(3) X X X XNAME X basename - return the file name in a full path specification X XSYNOPSIS X #include <edlib.h> X X char *basename(path) X char *path; X XDESCRIPTION X Basename will return a pointer to the file name in a full X AmigaDOS path specification. If there is no directory part X specified in the path, a pointer to the first character in X the string is returned. If there is no file name, a pointer X to the null which terminates the path parameter is returned. X XEXAMPLE X basename("foo:42") is "42" X basename("foo:bar/Arthur Dent") is "Arthur Dent" X basename("RAYGUN:") is "" X basename("rutabega") is "rutabega" X XAUTHOR X Edwin Hoogerbeets 01/08/88 X X X SHAR_EOF echo "extracting BinToInt.man" sed 's/^X//' << \SHAR_EOF > BinToInt.man XBINTOINT(3) Library Functions BINTOINT(3) X X X XNAME X bintoint - give the binary value of a string of binary digits X XSYNOPSIS X #include <edlib.h> X X int bintoint(number) X char *number; X XDESCRIPTION X Bintoint takes a string that may have been read in with scanf(3) X or from the console, and treats it as if it were a binary number. X The integer value of the binary number is returned. Bintoint X stops at the first character that is not a '1' or a '0'. If the X first character in the string is not a binary digit, then a value X of 0 is returned. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X dectoint(3), hextoint(3), toint(3) X X X SHAR_EOF echo "extracting ChDir.man" sed 's/^X//' << \SHAR_EOF > ChDir.man XCHDIR(3) Library Functions CHDIR(3) X X X XNAME X chdir - change directory to a given AmigaDOS path X XSYNOPSIS X #include <edlib.h> X X int chdir(path) X char *path; X XDESCRIPTION X Chdir changes the current working directory of the calling task X to the path given in the path variable. The path may be any X valid AmigaDOS path, including path names relative to the present X current working directory. X XDIAGNOSTICS X If an error occurs while trying to change directory, a value of X -1 is returned and the external variable errno is set to one of: X X [EFAULT] The path variable was a null pointer. X X [ENOENT] The path variable did not contain the name of a X directory. X X [EACCES] Chdir could not get a lock on the given directory. X [this error should be rare] X X Otherwise, chdir returns a 0. X XAUTHOR X Edwin Hoogerbeets 20/03/89 X XSEE ALSO X getcwd(3) X X X SHAR_EOF echo "extracting DecToInt.man" sed 's/^X//' << \SHAR_EOF > DecToInt.man XDECTOINT(3) Library Functions DECTOINT(3) X X X XNAME X dectoint - give the decimal value of a string of decimal digits X XSYNOPSIS X #include <edlib.h> X X int dectoint(number) X char *number; X XDESCRIPTION X Dectoint takes a string that may have been read in with scanf(3) X or from the console, and treats it as if it were a decimal number. X The integer value of the decimal number is returned. Dectoint X stops at the first character that is not a decimal digit. If the X first character in the string is not a decimal digit, then a value X of 0 is returned. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X bintoint(3), hextoint(3), toint(3) X X X SHAR_EOF echo "extracting FileType.man" sed 's/^X//' << \SHAR_EOF > FileType.man XFILETYPE(3) Library Functions FILETYPE(3) X X X XNAME X filetype - return the type of file referenced X XSYNOPSIS X #include <edlib.h> X X int filetype(path) X char *path; X XDESCRIPTION X Filetype examines the file referenced in the path parameter X and returns the following tokens as its results: X X [TYPE_DIR] File is of type directory X X [TYPE_FILE] File is of type plain file. X XDIAGNOSTICS X If an error occurs, then a value of -1 is returned and the X external variable errno is set to one of: X X [ENOMEM] Not enough memory for temporary storage X X [EACCES] Could not get a lock on the specified file. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X isdir(3), isfile(3) X X X SHAR_EOF echo "extracting GetCWD.man" sed 's/^X//' << \SHAR_EOF > GetCWD.man XGETCWD(3) Library Functions GETCWD(3) X X X XNAME X getcwd - get the name of the current working directory X XSYNOPSIS X #include <edlib.h> X X char *getcwd(buffer,size) X char *buffer; X int size; X XDESCRIPTION X Getcwd gets the name of the current working directory and puts X the string formed in the area pointed to by buffer. Buffer is X assumed to be at least size bytes long. If buffer is a null X pointer, then getcwd will allocate size bytes, which should X later be freed using the Manx free() function. In both cases, X getcwd returns a pointer to the first character in buffer. X X Note that getcwd will only give volume labels, and not device X specifications, when constructing a directory name. Thus, if X you are in the standard AmigaDOS recoverable ram disk, getcwd X will return "RAMB0:" as the current working directory. X XDIAGNOSTICS X If the current working directory cannot be determined, a null X pointer is returned and any memory allocated (because the X buffer parameter is null) is freed. X XAUTHOR X Edwin Hoogerbeets 20/03/89 X XSEE ALSO X chdir(3) X X X SHAR_EOF echo "extracting GetOpt.man" sed 's/^X//' << \SHAR_EOF > GetOpt.man XGETOPT(3) Library Functions GETOPT(3) X X X XNAME X getopt - get option letter from argv X XSYNOPSIS X #include <edlib.h> X X int getopt(argc, argv, optstring) X inta argc; X X char **optstring; X X extern char *optarg; X extern int optind; X XDESCRIPTION X Getopt returns the next option letter in argv that matches a X letter in optstring. Optstring is a string of recognized X option letters; if a letter is followed by a colon, the X option is expected to have an argument that may or may not X be separated from it by white space. Optarg is set to point X to the start of the option argument on return from getopt. X X Getopt places in optind the argv index of the next argument X to be processed. Because optind is external, it is normally X initialized to zero automatically before the first call to X getopt. X X When an option that is not in the list occurs, a NULL is X returned and the optarg pointer is set to point to the X first character of the null terminated string. This is done X so that options may be specified with other parameters X interspersed between them. X XDIAGNOSTICS X Getopt prints an error message on stderr and returns a ques- X tion mark (?) when it encounters an option letter not X included in optstring. X XEXAMPLE X The following code fragment shows how one might process the X arguments for a command that can take the mutually exclusive X options a and b, and the options f and o, both of which X require arguments: X X main(argc, argv) X int argc; X char **argv; X { X int c; X extern int optind; X extern char *optarg; X . X . X . X while ((c = getopt(argc, argv, "abf:o:")) != EOF) X switch (c) { X case `a': X if (bflg) X errflg++; X else X aflg++; X break; X case `b': X if (aflg) X errflg++; X else X bproc(); X break; X case `f': X ifile = optarg; X break; X case `o': X ofile = optarg; X break; X case `?': X default: X errflg++; X break; X } X if (errflg) { X fprintf(stderr, "Usage: ..."); X exit(2); X } X for (; optind < argc; optind++) { X . X . X . X } X . X . X . X } X XHISTORY X Written by Henry Spencer, working from a Bell Labs manual X page. Modified by Keith Bostic to behave more like the Sys- X tem V version. Ported to the Amiga and modified to take X options anywhere by Edwin (Deepthot) Hoogerbeets. X XBUGS X It is not obvious how `-' standing alone should be treated; X this version treats it as a non-option argument, which is X not always right. X X Option arguments are allowed to begin with `-'; this is rea- X sonable but reduces the amount of error checking possible. X Getopt is quite flexible but the obvious price must be paid: X there is much it could do that it doesn't, like checking X mutually exclusive options, checking type of option argu- X ments, etc. X X X X SHAR_EOF echo "extracting HexToInt.man" sed 's/^X//' << \SHAR_EOF > HexToInt.man XHEXTOINT(3) Library Functions HEXTOINT(3) X X X XNAME X hextoint - give the decimal value of a string of decimal digits X XSYNOPSIS X #include <edlib.h> X X int hextoint(number) X char *number; X XDESCRIPTION X Hextoint takes a string that may have been read in with scanf(3) X or from the console, and treats it as if it were a hexadecimal X number. The integer value of the hexadecimal number is returned. X Hextoint stops at the first character that is not a hexadecimal X digit. If the first character in the string is not a hexadecimal X digit, then a value of 0 is returned. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X bintoint(3), dectoint(3), toint(3) X X X SHAR_EOF echo "extracting IsBDigit.man" sed 's/^X//' << \SHAR_EOF > IsBDigit.man XISBDIGIT(3) Library Functions ISBDIGIT(3) X X X XNAME X isbdigit - tell whether given character is a binary digit X XSYNOPSIS X #include <edlib.h> X X int isbdigit(c) X char c; X XDESCRIPTION X Isbdigit returns a 1 if the given characters is either a '1' X or a '0'. Isbdigit returns a 0 for all other characters. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X isdigit(3), isodigit(3), isxdigit(3) X X X SHAR_EOF echo "extracting IsCSym.man" sed 's/^X//' << \SHAR_EOF > IsCSym.man XISCSYM(3) Library Functions ISCSYM(3) X X X XNAME X iscsym - tell whether given character could be found in a C X symbol X XSYNOPSIS X #include <edlib.h> X X int iscsym(c) X char c; X XDESCRIPTION X Iscsym tells whether it is possible that the given character X could appear in a C symbol. A C symbol might be the name of a X variable, structure, reserved word or a function. Not all X characters that are valid in a C symbol may be the first X character of an identifier in most implementations of C. In X most versions, the characters allowed after the first character X are the upper and lower case alphabetic characters, the digits X '0' to '9' and the underscore (_). X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X iscsymf(3) X XBUGS X This function depends on the C compiler used, and thus the X characters that are valid in a C symbol may be different, even X on the same machine. X X X SHAR_EOF echo "extracting IsCSymF.man" sed 's/^X//' << \SHAR_EOF > IsCSymF.man XISCSYMF(3) Library Functions ISCSYMF(3) X X X XNAME X iscsymf - tell whether given character could be found as the X first character of a C symbol X XSYNOPSIS X #include <edlib.h> X X int iscsymf(c) X char c; X XDESCRIPTION X Iscsymf tells whether it is possible that the given character X could appear as the first character of a C symbol. A C symbol X might be the the name of a variable, structure, reserved word X or a functions. Not all characters that are valid in a C symbol X may be the first character of an identifier in most implementations X of C. In most versions, the characters allowed as the first X character are the upper and lower case alphbetic characters and X the underscore (_). X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X iscsym(3) X XBUGS X This function depends on the C compiler used, and thus the X characters that are valid as the intial character in a C symbol X may be different, even on the same machine. X X X X SHAR_EOF echo "extracting IsDir.man" sed 's/^X//' << \SHAR_EOF > IsDir.man XISDIR(3) Library Functions ISDIR(3) X X X XNAME X isdir - tell whether a given path name is a directory X XSYNOPSIS X #include <edlib.h> X X int isdir(path) X char *path; X XDESCRIPTION X Isdir is a boolean function that returns a 1 if the file X referenced in path is the name of a directory. Currently, X isdir is implemented as a macro using filetype(3). X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X filetype(3), isfile(3) X X X SHAR_EOF echo "extracting IsFile.man" sed 's/^X//' << \SHAR_EOF > IsFile.man XISFILE(3) Library Functions ISFILE(3) X X X XNAME X isfile - tell whether a given path name is a plain file X XSYNOPSIS X #include <edlib.h> X X int isfile(path) X char *path; X XDESCRIPTION X Isfile is a boolean function that returns a 1 if the file X referenced in path is the name of a plain file. Currently, X isfile is implemented as a macro using filetype(3). X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X filetype(3), isdir(3) X X X SHAR_EOF echo "extracting IsODigit.man" sed 's/^X//' << \SHAR_EOF > IsODigit.man XISODIGIT(3) Library Functions ISODIGIT(3) X X X XNAME X isodigit - tell whether given character is an octal digit X XSYNOPSIS X #include <edlib.h> X X int isodigit(c) X char c; X XDESCRIPTION X Isodigit returns a 1 if the given characters is an octal digit. X Isodigit returns a 0 for all other characters. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X isdigit(3), isbdigit(3), isxdigit(3) X X X SHAR_EOF echo "extracting ReadMe" sed 's/^X//' << \SHAR_EOF > ReadMe Xedlib v1.1 Copyright 1989 Edwin Hoogerbeets X XNotes: X X This code is freely redistributable as long as no charge other than X reasonable copying fees are levied for it. X X Some time ago, I noticed a distinct lack of certain functions in the Manx X C libraries. Undaunted, I wrote them. Since then, I have written some X other routines, and included other people's routines. Here they are! X X The function strtod returns a IEEE double. If you would like to use this X routine, you must compile your code with the +fi flag to cc to use IEEE X floats instead of ffp floats. X X I would like to thank Daniel J. Barrett and Richard A. O'Keefe for some X of these routines. Also, I would like to thank Rob Peck for the X example in his book of how to get the current working directory. X XFiles: X X The edlib distribution should contain the following files: X X ReadMe rwed 5278 7 21-Mar-89 02:28:15 X barrett.doc rwed 4188 9 23-Jun-88 20:38:16 X basename.c rwed 314 1 18-Mar-89 21:32:18 X bintoint.c rwed 507 1 10-Mar-89 13:30:46 X chdir.c rwed 615 2 20-Mar-89 00:08:50 X dectoint.c rwed 524 2 10-Mar-89 13:30:50 X ed.lib rwed 13164 26 21-Mar-89 02:22:51 X ed32.lib rwed 13308 26 21-Mar-89 02:09:35 X edlib.h rwed 2608 6 21-Mar-89 02:00:06 X filetype.c rwed 844 2 20-Mar-89 01:17:04 X getcwd.c rwed 1800 4 19-Mar-89 20:56:38 X getopt.c rwed 2158 5 10-Mar-89 13:30:56 X hextoint.c rwed 527 2 10-Mar-89 13:31:00 X isbdigit.c rwed 391 1 10-Mar-89 13:31:04 X iscsym.c rwed 443 1 10-Mar-89 13:31:08 X iscsymf.c rwed 454 1 10-Mar-89 13:31:10 X isodigit.c rwed 425 1 10-Mar-89 13:31:14 X makefile rwed 811 2 21-Mar-89 02:24:50 X man rwed [dir] 25-Mar-89 16:27:29 X stolower.c rwed 442 1 10-Mar-89 13:31:18 X stoupper.c rwed 442 1 10-Mar-89 13:31:20 X strcspn.c rwed 469 1 10-Mar-89 13:31:24 X strdup.c rwed 434 1 20-Mar-89 02:03:10 X stricmp.c rwed 531 2 10-Mar-89 13:31:26 X strnicmp.c rwed 573 2 10-Mar-89 13:31:32 X strpbrk.c rwed 448 1 10-Mar-89 13:31:36 X strpos.c rwed 632 2 10-Mar-89 13:31:40 X strrpbrk.c rwed 494 1 10-Mar-89 13:31:44 X strrpos.c rwed 641 2 10-Mar-89 13:31:48 X strspn.c rwed 460 1 10-Mar-89 13:31:52 X strtod.c rwed 5055 10 20-Mar-89 02:09:04 X strtok.c rwed 906 2 10-Mar-89 13:31:56 X test.c rwed 2858 6 20-Mar-89 02:20:30 X toint.c rwed 671 2 10-Mar-89 13:32:06 Xdirectory of dh0:usr/local/src/edlib/1.1/man X BaseName rwed 803 2 24-Mar-89 16:02:20 X BinToInt rwed 702 2 24-Mar-89 16:02:20 X ChDir rwed 977 2 24-Mar-89 16:02:22 X DecToInt rwed 708 2 24-Mar-89 16:02:22 X FileType rwed 752 2 24-Mar-89 16:02:22 X GetCWD rwed 1160 3 24-Mar-89 16:02:22 X GetOpt rwed 3728 8 24-Mar-89 16:02:22 X HexToInt rwed 724 2 24-Mar-89 16:02:22 X IsBDigit rwed 447 1 24-Mar-89 16:02:24 X IsCSym rwed 969 2 24-Mar-89 16:02:24 X IsCSymF rwed 1020 2 24-Mar-89 16:02:24 X IsDir rwed 486 1 24-Mar-89 16:02:24 X IsFile rwed 491 1 24-Mar-89 16:02:24 X IsODigit rwed 440 1 24-Mar-89 16:02:26 X SToLower rwed 482 1 24-Mar-89 16:02:26 X SToUpper rwed 481 1 24-Mar-89 16:02:26 X StrCSPN rwed 866 2 24-Mar-89 16:02:26 X StrDup rwed 576 2 24-Mar-89 16:02:28 X StrICmp rwed 828 2 24-Mar-89 16:02:28 X StrNICmp rwed 901 2 24-Mar-89 16:02:28 X StrPBrk rwed 895 2 24-Mar-89 16:02:28 X StrPos rwed 827 2 24-Mar-89 16:02:28 X StrRPBrk rwed 958 2 24-Mar-89 16:02:28 X StrRPos rwed 772 2 24-Mar-89 16:02:28 X StrSPN rwed 899 2 24-Mar-89 16:02:30 X StrToD rwed 1869 4 24-Mar-89 16:02:26 X StrTok rwed 1605 4 24-Mar-89 16:02:30 X ToInt rwed 622 2 24-Mar-89 16:02:30 X257 Blocks, 89403 Bytes used in 62 files X XRevision History: X X1.1: March 1989 X - fixed a bug in strnicmp. Thanks to Richard Sexton for pointing this X out and suggesting a fix X - added basename, chdir, getcwd, filetype, isdir, isfile, strdup X and strtod X - added register declarations where possible X X1.0: August 3, 1988 X - initial compilation X X SHAR_EOF echo "extracting ReadMe.USENET" sed 's/^X//' << \SHAR_EOF > ReadMe.USENET XI moved everything from the 'man' subdirectory into this one, and added Xthe suffix ".man" to all the files. When I'm satisfied with a 'sh' or X'unshar' program for the amiga that does directory creation, I'll stop Xflattening directories. X XI also uuencoded the two library files, ed.lib and ed32.lib, so everything Xcould go into the sources groups. X X..bob SHAR_EOF echo "extracting SToLower.man" sed 's/^X//' << \SHAR_EOF > SToLower.man XSTOLOWER(3) Library Functions STOLOWER(3) X X X XNAME X stolower - convert a string to only lower case characters X XSYNOPSIS X #include <edlib.h> X X char *stolower(str) X char *str; X XDESCRIPTION X Stolower takes a pointer to a null terminated string and X converts each upper case character into its lower case X equivalent. All other characters are left untouched. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X stoupper(3) X X X X SHAR_EOF echo "extracting SToUpper.man" sed 's/^X//' << \SHAR_EOF > SToUpper.man XSTOUPPER(3) Library Functions STOUPPER(3) X X X XNAME X stoupper - convert a string to only upper case characters X XSYNOPSIS X #include <edlib.h> X X char *stoupper(str) X char *str; X XDESCRIPTION X Stoupper takes a pointer to a null terminated string and X converts each lower case character into its upper case X equivalent. All other characters are left untouched. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X stolower(3) X X X SHAR_EOF echo "extracting StrCSPN.man" sed 's/^X//' << \SHAR_EOF > StrCSPN.man XSTRCSPN(3) Library Functions STRCSPN(3) X X X XNAME X strcspn - find the length of the longest intial segment of a X string that consists of characters not from a certain set. X XSYNOPSIS X #include <edlib.h> X X int strcspn(str, charset) X char *str, *charset; X XDESCRIPTION X Strcspn searches the null terminated string 'str' for characters X in the set 'charset'. The length of the longest intial string X that consists of characters not from 'charset' is returned. If no X characters of 'str' are also members of 'charset', then the X length of 'str' is returned. If 'charset' is null then this X will also cause the full length of 'str' to be returned. X X This function is also known as instr. X XAUTHOR X Daniel J. Barrett. X barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP X XSEE ALSO X strspn(3) X X X SHAR_EOF echo "extracting StrDup.man" sed 's/^X//' << \SHAR_EOF > StrDup.man XSTRDUP(3) Library Functions STRDUP(3) X X X XNAME X strdup - duplicate a given string X XSYNOPSIS X #include <edlib.h> X X char *strdup(str) X char *str; X XDESCRIPTION X Strdup allocates enough memory to hold the given string, and X copies the string to the new space. It then returns a pointer X to the new string. X XDIAGNOSTICS X If there is not enough memory for a new string, then strdup X returns a null and sets the external variable errno to ENOMEM. X XAUTHOR X Edwin Hoogerbeets 20/03/89 X XSEE ALSO X strcmp(3) X X X SHAR_EOF echo "extracting StrICmp.man" sed 's/^X//' << \SHAR_EOF > StrICmp.man XSTRICMP(3) Library Functions STRICMP(3) X X X XNAME X stricmp - compare two strings with case insensitivity X XSYNOPSIS X #include <edlib.h> X X int stricmp(str1,str2) X char *str1,*str2; X XDESCRIPTION X Stricmp lexographically compares the two null terminated strings. X It returns a number less than zero if the first differing X character of str1 is less than that of str2, zero if the two X strings are equal, and a number greater than zero if the X first differing character in str1 is greater than the X corresponding character of str2. Stricmp works like strcmp(3) X except that all alphabetic characters are treated as lower case X for the purposes of the comparison. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X strcmp(3), strncmp(3), strnicmp(3) X X X SHAR_EOF echo "extracting StrNICmp.man" sed 's/^X//' << \SHAR_EOF > StrNICmp.man XSTRNICMP(3) Library Functions STRNICMP(3) X X X XNAME X strnicmp - compare two strings with case insensitivity up to X a certain length X XSYNOPSIS X #include <edlib.h> X X int strnicmp(str1,str2,len) X char *str1,*str2; X int len; X XDESCRIPTION X Strnicmp lexographically compares the two null terminated X strings up to the length 'len'. It returns a number less than X zero if the first differing character of str1 is less than that X of str2, zero if the two strings are equal, and a number greater X than zero if the first differing character in str1 is greater X than the corresponding character of str2. Strnicmp works like X strncmp(3) except that all alphabetic characters are treated as X lower case for the purposes of the comparison. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X strcmp(3), strncmp(3), stricmp(3) X X X SHAR_EOF echo "extracting StrPBrk.man" sed 's/^X//' << \SHAR_EOF > StrPBrk.man XSTRPBRK(3) Library Functions STRPBRK(3) X X X XNAME X strpbrk - find the first occurance of a character of a set in X a string X XSYNOPSIS X #include <edlib.h> X X char *strpbrk(str, charset) X char *str, *charset; X XDESCRIPTION X Strpbrk searches forwards through the null terminated string X 'str' for occurances of a character included in the character X set 'charset'. The 'charset' variable is null terminated string X that is treated as a character set. Therefore, repetition and X order are ignored. Strpbrk returns a pointer to the first X character of 'charset' that is found in 'str'. X XDIAGNOSTICS X If no character in 'charset' is found in 'str', then a null X pointer (NULL) is returned. X XAUTHOR X Daniel J. Barrett. X barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP X XSEE ALSO X strrpbrk(3), strcspn(3), strspn(3) X X X SHAR_EOF echo "extracting StrPos.man" sed 's/^X//' << \SHAR_EOF > StrPos.man XSTRPOS(3) Library Functions STRPOS(3) X X X XNAME X strpos - give the first position of a character withing a string X XSYNOPSIS X #include <edlib.h> X X int strpos(string,key) X char *string; X char key; X XDESCRIPTION X Strpos searches the null terminated string 'string' for the X first occurance of the character 'key'. The position of this X character is returned. The terminating null character is X considered to be part of the string for the purposes of this X search. Thus, using strpos to find the null will give the X same result as a strlen(3). X X Some implementations of C use a variant called scnstr. X XDIAGNOSTICS X Strpos returns a -1 if the character is not found in the string. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X strrpos(3) X X X SHAR_EOF echo "extracting StrRPBrk.man" sed 's/^X//' << \SHAR_EOF > StrRPBrk.man XSTRRPBRK(3) Library Functions STRRPBRK(3) X X X XNAME X strrpbrk - find the last occurance of a character of a set in X a string X XSYNOPSIS X #include <edlib.h> X X char *strrpbrk(str, charset) X char *str, *charset; X XDESCRIPTION X Strrpbrk searches backwards through the null terminated string X 'str' for occurances of a character included in the character X set 'charset'. The 'charset' variable is null terminated string X that is treated as a character set. Therefore, repetition and X order are ignored. Strrpbrk returns a pointer to the last X character of 'charset' that is found in 'str'. X XDIAGNOSTICS X If no character in 'charset' is found in 'str', then a null X pointer (NULL) is returned. X XAUTHOR X Edwin Hoogerbeets 01/08/88 modified from strpbrk(3) by: X Daniel J. Barrett. X barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP X XSEE ALSO X strpbrk(3), strcspn(3), strspn(3) X X X SHAR_EOF echo "extracting StrRPos.man" sed 's/^X//' << \SHAR_EOF > StrRPos.man XSTRRPOS(3) Library Functions STRRPOS(3) X X X XNAME X strrpos - give the last position of a character withing a string X XSYNOPSIS X #include <edlib.h> X X int strrpos(string,key) X char *string; X char key; X XDESCRIPTION X Strpos searches the null terminated string 'string' for the X last occurance of the character 'key'. The position of this X character is returned. The terminating null character is X considered to be part of the string for the purposes of this X search. Thus, using strrpos to find the null will give the X same result as a strlen(3). X XDIAGNOSTICS X Strrpos returns a -1 if the character is not found in the X string. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X XSEE ALSO X strpos(3) X X X SHAR_EOF echo "extracting StrSPN.man" sed 's/^X//' << \SHAR_EOF > StrSPN.man XSTRSPN(3) Library Functions STRSPN(3) X X X XNAME X strspn - find the length of the longest intial segment X of a string that consists of characters from a certain set. X XSYNOPSIS X #include <edlib.h> X X int strspn(str, charset) X char *str, *charset; X XDESCRIPTION X Strspn searches the null terminated string 'str' for characters X in the set 'charset'. The length of the longest intial string X that consists of characters from 'charset' is returned. If all X characters of 'str' are also members of 'charset', then the X length of 'str' is returned. If 'charset' is null then this X function will return a zero as none of the characters in 'str' X could possibly be in the set. X X This function is also known as notstr. X XAUTHOR X Daniel J. Barrett. X barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP X XSEE ALSO X strcspn(3) X X X SHAR_EOF echo "extracting StrToD.man" sed 's/^X//' << \SHAR_EOF > StrToD.man XSTRTOD(3) Library Functions STRTOD(3) X X X XNAME X strtod - convert a string to a double precision floating point X number X XSYNOPSIS X #include <edlib.h> X X double strtod(str,ptr) X char *str; X char **ptr; X XDESCRIPTION X Strtod converts the character string str to a double precision X floating point number and returns this value. Strtod recognises X the following in a string representing a valid double: X X <space>... [+|-] <digit>... [. <digit>...] [<exponent>] X X where <exponent> is X X e|E [+|-| ] <digit> <digit>... X X If ptr is not (char**)NULL, *ptr is assigned a pointer to the X character just after the last character accepted by strtod. X This will typically be a layout character or NUL. X X If there are not any digits at the beginning of the string, X (e.g. the input is "e45" or "Fred" or "-gotcha-") strtod will X make *ptr point to the whole of str (even if there were leading X spaces and signs) and will return 0.0. X X If there is some problem with the exponent (e.g. the input is X "1.2e%45") strtod will reject all of the exponent, making *ptr X point to the 'e', and will convert only the preceding characters. X X A single space after the 'e' or 'E' of an exponent is accepted as X if it were a '+' sign, because some output formatting routines X generate numbers in this form. Spaces are not otherwise accepted X inside numbers. X X If the correct value cannot be represented, strtod sets the X external variable errno to ERANGE, and returns +/-HUGE for X overflow, +/-ZERO for underflow. X XWARNING X Strtod returns a IEEE double. If you would like to use this routine, X you must compile your code with the +fi flag to cc to use IEEE floats X instead of ffp floats. X XAUTHOR X Richard A. O'Keefe, 11/03/89 X X X SHAR_EOF echo "extracting StrTok.man" sed 's/^X//' << \SHAR_EOF > StrTok.man XSTRTOK(3) Library Functions STRTOK(3) X X X XNAME X strtok - search a string for tokens delimited by characters X from a set X XSYNOPSIS X #include <edlib.h> X X char *strtok(buf, separators) X char *buf, *separators; X XDESCRIPTION X Strtok searches the null terminated string 'buf' for tokens X delimited by characters from the character set 'separators'. X The null terminated string 'separators' is treated as a set. X Thus, repetition and order are ignored. Strtok replaces the X separator character with a null byte and returns a pointer to X the beginning of the token, effectively singling out the first X token. Subsequent calls to strtok with the parameter 'buf' set X to NULL returns the next token after the previous one using the X same string as previous invocations. The character set X 'separators' may be different at each invocation. X XDIAGNOSTICS X If no token is found, a NULL pointer is returned. X XEXAMPLE X Here is an example program demonstrating strtok(3). X X #include <stdio.h> X X extern char *strtok(); X char tokesep[] = " \n\t\rx"; X X main() X { X char buf[BUFSIZ], *tokep; X X while (fgets(buf, sizeof(buf), stdin)) { X tokep = strtok(buf, tokesep); X do { X printf("Token is %s\n", tokep); X tokep = strtok((char *)NULL, tokesep); X }while (tokep); X } X } X XAUTHOR X Daniel J. Barrett. X barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP X X X SHAR_EOF echo "extracting ToInt.man" sed 's/^X//' << \SHAR_EOF > ToInt.man XTOINT(3) Library Functions TOINT(3) X X X XNAME X toint - return the integer value of a character digit X XSYNOPSIS X #include <edlib.h> X X int toint(c) X char c; X XDESCRIPTION X Toint treats the character 'c' as a hexadecimal character and X returns its integer equivalent. Note that this routine may be X used for decimal, octal and binary digits, as these are proper X subsets of the hexadecimal character set. X XDIAGNOSTICS X If the given character does not represent a hexadecimal digit a X value of -1 is returned. X XAUTHOR X Edwin Hoogerbeets 01/08/88 X X X X SHAR_EOF echo "extracting barrett.doc" sed 's/^X//' << \SHAR_EOF > barrett.doc X**************************************************************************** X* STRING FUNCTIONS by Daniel J. Barrett. * X* barrett@cs.jhu.edu, ins_adjb@jhunix.UUCP * X* * X* THESE ROUTINES ARE IN THE PUBLIC DOMAIN. * X**************************************************************************** X X Manx `C' provides most of the standard "UNIX" string functions, such Xas strcat(), strcmp(), and so on. X X Four of the functions that Manx does NOT provide are strspn(), Xstrcspn(), strpbrk(), and strtok(). Here are my versions of these 4 missing Xfunctions, written from scratch. I wrote several versions, and these were Xthe fastest. (Undoubtedly, assembler would be faster, but I don't know Xassembler. Feel free to "one-up" me. :-)) X X Note that some of these functions call built-in Manx functions like Xindex() and strchr(). These versions are FASTER than when I did everything X"by hand". X X I don't own Lattice `C', but I suppose these routines will work Xif you have the functions index() and strchr()... they would be easy to Xwrite, anyway. X XHere are brief descriptions of the 4 functions. X Xint strspn(string, character_set) Xchar *string, *character_set; X X Starting from the beginning of string "string", count how X many of its characters are found in "character_set". When X you hit the first character NOT in "character_set", RETURN X the number of characters found so far. If either argument X is NULL, strspn() returns 0. X X strspn("abcdefg", "abd") returns 2. X strspn("abcdefg", "xyyz") returns 0. X strspn("abcdefg", "dbc") returns 0. X strspn("abcdefg", "dxbgac") returns 4. X Xint strcspn(string, character_set) Xchar *string, *character_set; X X This function is exactly the opposite of strspn(). Return the X number of characters, starting from the beginning of the string, X that are NOT found in "character_set". Keep counting until you X hit the first character in "string" that IS found in "character_set"; X then RETURN. If either argument is NULL, strcspn() returns 0. X X strcspn("abcdefg", "abd") returns 0. X strcspn("abcdefg", "xyyz") returns 7. X strspn("abcdefg", "dbc") returns 1. X strspn("abcdefg", "dxbgac") returns 0. X Xchar *strpbrk(string, character_set) Xchar *string, *character_set; X X Return a pointer to the first character in "string" that X appears in "character_set". If either argument is NULL, X strpbrk() returns NULL. X X strcspn("abcdefg", "abd") returns "abcdefg". X strcspn("abcdefg", "xyyz") returns NULL. X strspn("abcdefg", "dbc") returns "bcdefg". X strspn("abcdefg", "dxbgac") returns "abcdefg". X Xchar *strtok(string, character_set) Xchar *string, *character_set; X X This is a VERY USEFUL function. The UNIX manual explains it best: X X `The strtok subroutine considers the string "string" to consist of X a sequence of zero or more text tokens separated by spans of X one or more characters from the separator string "character_set". X The first call (with pointer "string" specified) returns a pointer X to the first character of the first token, and will have written X a null character into "string" immediately following the X returned token. The function keeps track of its position in X the string between separate calls, so that subsequent calls X (which must be made with the first argument a NULL pointer) X will work through the string "string" immediately following that X token. In this way, subsequent calls will work through the X string "string" until no tokens remain. The separator string X "character_set" may be different from call to call. When no token X remains in "string", a NULL pointer is returned.' X XHere is an example program demonstrating strtok(). X X/******************************************************************/ X#include <stdio.h> X Xextern char *strtok(); Xchar tokesep[] = " \n\t\rx"; X Xmain() X{ X char buf[BUFSIZ], *tokep; X X while (fgets(buf, sizeof(buf), stdin)) { X tokep = strtok(buf, tokesep); X do { X printf("Token is %s\n", tokep); X tokep = strtok((char *)NULL, tokesep); X }while (tokep); X } X} X X/******************************************************************/ SHAR_EOF echo "extracting basename.c" sed 's/^X//' << \SHAR_EOF > basename.c X/* X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets X * This code is freely redistributable as long as no charge other than X * reasonable copying fees are levied for it. X */ X#include "edlib.h" X Xchar *basename(buf) Xregister char *buf; X{ X register char *foo = strrpbrk(buf,":/"); X X return( foo ? (foo + 1) : buf ); X} SHAR_EOF echo "extracting bintoint.c" sed 's/^X//' << \SHAR_EOF > bintoint.c X/* X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets X * This code is freely redistributable as long as no charge other than X * reasonable copying fees are levied for it. X */ X X/* this function takes a string of binary digits and returns its value */ Xint bintoint(number) Xregister char *number; X{ X register int value = 0; X X while ( *number ) X if ( isbdigit(*number) ) { X value = (value << 1) + toint(*number++); X } else { X return(value); X } X X return(value); X} SHAR_EOF echo "extracting chdir.c" sed 's/^X//' << \SHAR_EOF > chdir.c X/* X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets X * This code is freely redistributable as long as no charge other than X * reasonable copying fees are levied for it. X */ X#include "edlib.h" X#include <libraries/dos.h> X#include <errno.h> X Xextern struct FileLock *Lock(); Xextern struct FileLock *CurrentDir(); X Xint chdir(path) Xchar *path; X{ X struct FileLock *lock; X X if ( !path ) { X errno = EFAULT; X return(-1); X } X X if ( !isdir(path) ) { X errno = ENOENT; X return(-1); X } X X if ( !(lock = Lock(path,ACCESS_READ)) ) { X errno = EACCES; X return(-1); X } X X lock = CurrentDir(lock); X X return(0); X} SHAR_EOF echo "extracting dectoint.c" sed 's/^X//' << \SHAR_EOF > dectoint.c X/* X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets X * This code is freely redistributable as long as no charge other than X * reasonable copying fees are levied for it. X */ X X/* this function takes a string of decimal digits and returns its value */ X#include <ctype.h> X Xint dectoint(number) Xregister char *number; X{ X register int value = 0; X X while ( *number ) X if ( isdigit(*number) ) { X value = value*10 + toint(*number++); X } else { X return(value); X } X X return(value); X} SHAR_EOF echo "extracting ed.lib.uu" sed 's/^X//' << \SHAR_EOF > ed.lib.uu X Xbegin 644 ed.lib XM86H````"7V)I;G1O:6YT`$$"7V1E8W1O:6YT`(("7V]P=&5R<@""`E]O<'1IM XM;F0`@@)?;W!T;W!T`(("7V]P=&%R9P""`E]G971O<'0`QP-?:&5X=&]I;G0`= XM"`1?:7-B9&EG:70`2@1?:7-C<WEM`'\$7VES8W-Y;68`K`1?:7-O9&EG:70`* XMW`1?<W1O;&]W97(`#@5?<W1O=7!P97(`0`5?<W1R8W-P;@!V!5]S=')P8G)K% XM`+$%7W-T<G!O<P#L!5]S=')R<&]S`"D&7W-T<G-P;@!?!E]S=')T;VL`L09?F XM=&]I;G0`Y`9?8F%S96YA;64`0P=?<W1R:6-M<`"8!U]S=')N:6-M<`#R!U]S7 XM=')R<&)R:P`W"%]S=')T;V0`Q@E?<W1R9'5P``P*7V=E=&-W9`!\"U]C:&1I& XM<@`!#%]F:6QE='EP90``````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM``````````````````````````````!!2F)I;G1O:6YT````3```````````^ XM``0``0`7``D`%@!!P``""```7V)I;G1O:6YT``<(``!?:7-B9&EG:70`!P@`8 XM`%]T;VEN=``'"```+F)E9VEN`````H``3`QB:6YT;VEN="YC`!4,X(8-``C_\ XM`0``'4Y5``!(YP@@)&T`"'@`!'9A;'5E``)I!6YU;6)E<@`&(V/_____$TH2Z XM9S;_%Q`22(`_`$ZZ^G$`%51/2D!G&O\;($I2BA`02(`_`$ZZ^G(`&51/,@3CB XM03@`V$'_$6`*_QDP!$S?!!!.74YU_Q%@QO__$S`$8/+_#0`5`?__"``">VD(H XM``%[:0@``'MI]0```$%*9&5C=&]I;G0```!0````````````!``!`!8`"0`5T XM`$'```((``!?9&5C=&]I;G0`!PH``%]C='!?``<(``!?=&]I;G0`!P@``"YB5 XM96=I;@````*``%`,9&5C=&]I;G0N8P`5#."+#0`*_P$``!U.50``2.<(("1MW XM``AX``1V86QU90`":05N=6UB97(`!B-C_____Q-*$F<Z_Q<0$DB`4D!!^OIQJ XM`!<(,``"``!G'/\;($I2BA`02(`_`$ZZ^G(`&U1/,@3#_``*.`#80?\18`K_6 XM&3`$3-\$$$Y=3G7_$6#"__\3,`1@\O\-`!<!__\(``)[:0@``'MI"``!6S!CV XM]0``04IG971O<'0``````LX````&```````*``4`+``)`"<!1<```PH``%]OU XM<'1E<G(``PH``E]O<'1I;F0`!PH``E]O<'1O<'0`!PH`!%]O<'1A<F<``@@`, XM`%]G971O<'0`!P@``%]S=')C;7``!P@``%]S=')C:'(`!P@``%]S=')L96X`# XM!P@``%]W<FET90`'"```+F)E9VEN`````H`"7`.```0"@`)<`H`!%`*``?SUM XM$0`!]/41``'T#&=E=&]P="YC`!4,X)`-`!K_`0``&TY5__Y(YPP@."T`"/41R XM``'T!&-P``8C8P1C``-I!G-P```!:05A<F=C``)I`V%R9W8```HC(V,#;W!T' XM<P``#B-C_________Q,,;0`!T`1A`!%F:/\1,"W0`G$`$[!$;0K_&7#_3-\$% XM,$Y=3G7__Q$P+=`"<0`?2,#E@"!M``HB<`@`#!$`+1%G&O\1,"W0`G$`$5)MF XMT`)Q`!M(P.6`(&T`"BMP"`#0A',`_Q-P`&#(__\12'KZ(6(`,!$P+=`"<0`=" XM2,#E@"!M``HO,`@`3KKZ=0`54$]*0&8(_Q%2;=`"<0#_$W#_8*+___\1,"W0> XM`G$`'4C`Y8`@;0`*(C`(`#`MT`)A`!U(P"!`$#`8`$B`.@`[0-""<@#_';I\N XM`#IG%#\%+RT`#DZZ^G8`&5Q/)$!*@&8``([_$4IMT`)P`!%G5`$``P)E<G)B' XM=68`__Y;,&,?&T7__AM\``K__R!M``HO$!%.NOIW`!]83S\`(&T`"B\0/SP`7 XM`DZZ^G@`$U!/2'KZ(6(`6($13KKZ=P`56$\_`$AZ^B%B`#,5/SP``DZZ^G@`) XM'U!//SP``DAM__X_/``"3KKZ>``14$__$3`MT`)Q`!U(P.6`(&T`"B(P"`!21 XM;=`"80`1,"W0`F$`&4C`($!*,!@`9@K_$5)MT`)Q`/\3.WP``="$80#__Q5P8 XM/V``_MK__QE2B@P2`#IF``#8_Q$P+=`"<0`=2,#E@"!M``HB,`@`,"W0`F$`[ XM&U)`2,`@0$HP&`!G)O\1,"W0`G$`$5)MT`)Q`!E(P.6`(&T`"C(MT`)A`!M23 XM04C!(G`(`-/!*TG0@G,`$V```(K_$5)MT`)Q`!$P+=`"<0`3L$1M9O\12FW0B XM`G``$6=4`0`$`F5R<F)U9@#__ELP8Q\;1?_^&WP`"O__(&T`"B\0$4ZZ^G<`Q XM'UA//P`@;0`*+Q`_/``"3KKZ>``34$](>OHA8@!?A!%.NOIW`!583S\`2'KZG XM(6(`78(5/SP``DZZ^G@`'U!//SP``DAM__X_/``"3KKZ>``14$__$SM\``'0< XMA&$`_Q5P/V``_AC__Q$P+=`"<0`14FW0`G$`&TC`Y8`@;0`**W`(`-"$<P#_H XM$SM\``'0A&$`_Q%@,/\1,"W0`G$`'4C`Y8`@;0`*(C`(`%)MT`)A`!$P+=`"] XM80`92,`@0$HP&`!F"O\3.WP``="$80#_$5)MT`)Q`/__$4*MT`)S`/__%3`%` XM8`#]Q/\?+2T`.B!I;&QE9V%L(&]P=!]I;VX@+2T@`#H@:6QL96=A'VP@;W!T% XM:6]N("TM(``Z(&\?<'1I;VX@<F5Q=6ER97,@81]N(&%R9W5M96YT("TM(``ZG XM'R!O<'1I;VX@<F5Q=6ER97,?(&%N(&%R9W5M96YT("TM(!$```T`2@'__P@`" XM"'MI"``'>VD(``1[:0@``R-C"``":0@``6D(``!I"``&>R-C"``%>VGU`$%*V XM:&5X=&]I;G0```!.````````````!``!`!8`"0`5`$'```((``!?:&5X=&]IU XM;G0`!PH``%]C='!?``<(``!?=&]I;G0`!P@``"YB96=I;@````*``$X,:&5XW XM=&]I;G0N8P`5#."4#0`*_P$``!U.50``2.<(("1M``AX``1V86QU90`":05N2 XM=6UB97(`!B-C_____Q-*$F<X_Q<0$DB`4D!!^OIQ`!<(,``#``!G&O\;($I22 XMBA`02(`_`$ZZ^G(`&51/,@3I03@`V$'_$6`*_QDP!$S?!!!.74YU_Q%@Q/__W XM$S`$8/+_#0`7`?__"``">VD(``![:0@``5LP8_4`````04II<V)D:6=I=```; XM`"(````````````"``$`$0`)`!``0L```@@``%]I<V)D:6=I=``'"```+F)E- XM9VEN``````*``"(,:7-B9&EG:70N8P`5#."9#0`,_P$``!E.50``+P08+0`)^ XM!6,``F/__QNX/``Q9P:X/``P9@C_%W`!*!].74YU__\3<`!@]O__#0`4`?__[ XM"```>VD*``L``0`(`!8!7V)P````(V,!7V)E;F0```0C8P%?8G5F9@``""-CL XM`5]F;&%G<P``#&,!7W5N:70```UC`5]B>71B=68```YC`5]B=69L96X``!!I> XM`5]T;7!N86UE```2(V,)1DE,10`Z``'U````04II<V-S>6T``````#H`````@ XM```````$``$`%@`)`!4`-<```@@``%]I<V-S>6T`!P@``%]I<V-S>6UF``<*L XM``!?8W1P7P`'"```+F)E9VEN`````H``.@QI<V-S>6TN8P`5#."<#0`._P$`P XM`!E.50``+P08+0`)!6,``F/__Q<0!$B`/P!.NOIQ`!U43TI`9A(0!$B`4D!!> XM^OIR`!<(,``"``!G"O\9$`1(@"@?3EU.=?__$W``8/;_#0`6`?__"``!>VD(^ XM``![:0@``ELP8_4```!!2FES8W-Y;68`````,`````````````,``0`3``D`J XM$@`MP``""```7VES8W-Y;68`!PH``%]C='!?``<(```N8F5G:6X````"@``PP XM#&ES8W-Y;68N8P`5#."?#0`-_P$``!E.50``+P08+0`)!6,``F/__Q<0!$B`0 XM4D!!^OIQ`!\2,```PCP``V8&N#P`7V8$&W`!8`)P`"@?3EU.=?\-`!$!__\(Z XM``![:0@``5LP8_4```!!2FES;V1I9VET````-@````````````,``0`3``D`- XM$@`PP``""```7VES;V1I9VET``<*``!?8W1P7P`'"```+F)E9VEN```"@``V7 XM#&ES;V1I9VET+F,`%0S@H@T`#?\!```93E4``"\$&"T`"05C``)C__\;N#P`- XM.6<&N#P`.&8(_Q=P`"@?3EU.=?__%Q`$2(!20$'Z^G$`'3(`$#`0`$B`P'P`' XM!&#B__\-`!8!__\(``![:0@``5LP8_4```!!2G-T;VQO=V5R````+@``````V XM``````,``0`4``D`$P`RP``""```7W-T;VQO=V5R``<(``!?=&]L;W=E<@`'/ XM"```+F)E9VEN`````H``+@QS=&]L;W=E<BYC`!4,X*8-``W_`0``'4Y5``!(0 XMYP`P)&T`""9*!'1E;7``!R-C!7-T<@`&(V/_____$6`0_Q<0$TB`/P!.NOIQ! XM`!E43Q:`4HM*$V;L__\9(`I,WPP`3EU.=?\-`!8!__\(``%[:0@``'LC8_4`0 XM`$%*<W1O=7!P97(````N`````````````P`!`!0`"0`3`#+```((``!?<W1O@ XM=7!P97(`!P@``%]T;W5P<&5R``<(```N8F5G:6X````"@``N#'-T;W5P<&5RI XM+F,`%0S@J0T`#?\!```=3E4``$CG`#`D;0`()DH$=&5M<``'(V,%<W1R``8C+ XM8_____\18!#_%Q`32(`_`$ZZ^G$`&51/%H!2BTH39NS__QD@"DS?#`!.74YU7 XM_PT`%@'__P@``7MI"```>R-C]0``04IS=')C<W!N`````#8````````````#= XM``$`$P`)`!(`-L```@@``%]S=')C<W!N``<(``!?<W1R8VAR``<(```N8F5G* XM:6X``H``-@QS=')C<W!N+F,`%0S@K`T`"_\!```?3E4``$CG"#`D;0`()FT`3 XM#!$H"@1T96UP``(C8P5S='(`!B-C!6-H87)S970`!R-C_____QL@1!`02(`_9 XM`"\+3KKZ<0`57$]*0&8$_Q-2A&#H__\;(`20BDS?#!!.74YU_PT`%0'__P@`% XM`7MI"```>VGU````04IS=')P8G)K`````$0````````````#``$`$P`)`!(`/ XM.\```@@``%]S=')P8G)K``<(``!?:6YD97@`!P@``"YB96=I;@```H``1`QSY XM=')P8G)K+F,`%0S@N0T`"?\!```?3E4``$CG"#`D;0`()FT`#`1T96UP``(CV XM8P5S='(`!B-C!6-H87)S970`!R-C______\1*`K__Q\@1$H09Q@@1!`02(`_L XM`"\+$4ZZ^G$`%5Q/2H!F!/\34H1@XO__'R!$2A!G!"`$8`)P`$S?#!`33EU.K XM=?\-`!4!__\(``%[(V,(``![(V/U``!!2G-T<G!O<P``````0```````````3 XM``,``0`3``D`$@`[P``""```7W-T<G!O<P`'"```7W-T<FQE;@`'"```+F)E+ XM9VEN```"@`!`#'-T<G!O<RYC`!4,X+P-``W_`0``'TY5``!(YPP@)&T`"!@M: XM``T1>@`$8V]U;G1E<@`#:05S=')I;F<`!B-C!6ME>0`"8_______$TH$9A#_T XM$R\*3KKZ<0`96$],WP0P3EU.=?__%4HR4`!G$/\7$#)0`+`$9@3_$S`%8.;_T XM$5)%_Q%@ZO\3</]@WO\-`!P!__\(``%[:0@``'MI]0```$%*<W1R<G!O<P``> XM``!,`````````````P`!`!,`"0`2`#W```((``!?<W1R<G!O<P`'"```7W-T6 XM<FQE;@`'"```+F)E9VEN``*``$P,<W1R<G!O<RYC`!4,X,0-``W_`0``'TY5< XM``!(YP@P)&T`"!@M``T$=&5M<``'(V,%<W1R:6YG``8C8P5K97D``F/_____P XM_Q-*!&80_Q,O"DZZ^G$`&5A/3-\,$$Y=3G7__Q,O"DZZ^G$`&UA/2,#0BB9`0 XM4XM@#O\5$!.P!&8&_QL@"Y"*8-I3B[?*9.[__Q-P_V#0_PT`&P'__P@``7MIP XM"```>VGU``!!2G-T<G-P;@``````-@````````````,``0`3``D`$@`VP``"V XM"```7W-T<G-P;@`'"```7VEN9&5X``<(```N8F5G:6X````"@``V#'-T<G-P9 XM;BYC`!4,X,D-``O_`0``'TY5``!(YP@P)&T`""9M``P1*`H$=&5M<``"(V,%, XM<W1R``8C8P5C:&%R<V5T``<C8_____\;($00$$B`/P`O"TZZ^G$`%5Q/2D!GA XM!/\34H1@Z/__&R`$D(I,WPP03EU.=?\-`!0!__\(``%[:0@``'MI]0````!!N XM2G-T<G1O:P``````8``````````$``0``@`7``D`%0!2P``""```7W-T<G1O' XM:P`'"```7W-T<G-P;@`'"```7W-T<G!B<FL`!P@``"YB96=I;@`"@`!@"8``F XM``QS=')T;VLN8P`5#.#,#0`,_P$``!].50``2.<,,"1M``@F;0`,!F9R;VU,5 XM87-T5&EM90```2-C!&5N9``#(V,$=&]K96X``B-C!6)U9@`&(V,%<V5P87)A> XM=&]R<P`'(V/_______\9(`IG!"`*8`0@+=`"80`3*`!G//\5+PLO!$ZZ^G$`= XM%5!/2,#8@/\5($1*$&8*_QEP`$S?##!.74YU_Q4O"R\$3KKZ<@`?4$\J`&<&] XM(`52@&`"<``K0-""80#___\3($5"$/__$R`$8-;_#0`=`?__"``!>VD(``)[S XM(V,(``![(V/U````04IT;VEN=````````%0````````````"``$`$``)``\`\ XM,\```@@``%]T;VEN=``'"```+F)E9VEN`````H``5`QT;VEN="YC`!4,X-<-2 XM``W_`0``&4Y5```O!!@M``D%8P`"8___&[@\`#!M%+@\`#EN#O\=$`1(@)!\" XM`#`H'TY=3G7_&[@\`&%M$+@\`&9N"O\9$`1(@)!\`%=@Y/\;N#P`06T0N#P`^ XM1FX*_QD0!$B`D'P`-V#.__\3</]@RO\-`!@!__\(``![:?4`04IB87-E;F%MS XM90```#(````````````#``(`%0`)`!,`7\```@@``%]B87-E;F%M90`'"```@ XM7W-T<G)P8G)K``<(```N8F5G:6X```*``"X"@``N#&)A<V5N86UE+F,`%1?== XM8@T`"/\!```=3E4``$CG`#`D;0`(2'KZ(6$`,!,O"DZZ^G$`$U!/)D`$9F]O\ XM``<C8P5B=68`!B-C_____Q\@"V<&(`M2@&`"(`I,WPP`$TY=3G7_$SHO```-7 XM``X!__\(``%[(V,(``![(V,)5$585`!#"4)/3TP`:0E50T]53E0`20E#3U5.] XM5`!I"41/54),10!D"49,3T%4`&8)55-(3U)4`$D)4TA/4E0`:0E#4%12`$P): XM05!44@`C(T,)4U124%12`"-#"4)95$5"2513`$,)54)95$4`0PE"651%`&,). XM5T]21$))5%,`20E55T]21`!)"5=/4D0`:0E,3TY'0DE44P!,"55,3TY'`$P)B XM3$].1P!L]0````!!2G-T<FEC;7``````H`````````````,``0`4``D`$P!5' XMP``""```7W-T<FEC;7``!P@``%]T;VQO=V5R``<(```N8F5G:6X``````H``I XMH`QS=')I8VUP+F,`%0S@KPT`"?\!```?3E4``$CG"#`D;0`()FT`#!%X``1I< XM;F1E>``":05S='(Q``8C8P5S='(R``<C8_____\?2C)``&<N2C-``&<H$#)`, XM`!5(@#\`3KKZ<0`=5$\_`!`S0`!(@#\`3KKZ<0`75$\R'[)`9@3__Q-21&#,% XM__\9$#)``$B`/P!.NOIQ`!U43S\`$#-``$B`/P!.NOIQ`!]43S(?LD!L!'#_S XM8"H0,D``%4B`/P!.NOIQ`!U43S\`$#-``$B`/P!.NOIQ`!]43S(?LD!O!'`!` XM8`)P`$S?%0P03EU.=?__#0`5`?__"``!>VD(``![:?4`````04IS=')N:6-M4 XM<````*P````````````#``$`%``)`!,`6L```@@``%]S=')N:6-M<``'"```2 XM7W1O;&]W97(`!P@``"YB96=I;@````*``*P,<W1R;FEC;7`N8P`5#."T#0`)S XM_P$``!].50``2.<,,"1M``@F;0`,%3@M`!!Z``1I;F1E>``#:05S='(Q``8CI XM8P5S='(R``<C8P5L96X``FG______Q]*,E``9S9*,U``9S`P!%-`';I`;"@08 XM,E``2(`_`$ZZ^G$`'51//P`0,U``2(`_`$ZZ^G$`%U1/,A^R0&8$__\34D5@W XMQ/__&1`R4`!(@#\`3KKZ<0`=5$\_`!`S4`!(@#\`3KKZ<0`?5$\R'[)`;`1P8 XM_V`J$#)0`!5(@#\`3KKZ<0`=5$\_`!`S4`!(@#\`3KKZ<0`?5$\R'[)`;P1P> XM`6`"<`!,WQ4,,$Y=3G7__PT`%@'__P@``7MI"```>VGU````04IS=')R<&)R% XM:P```%8````````````$``$`%@`)`!4`1<```@@``%]S=')R<&)R:P`'"```Q XM7W-T<FQE;@`'"```7VEN9&5X``<(```N8F5G:6X``H``5@QS=')R<&)R:RYCN XM`!4,X,`-``G_`0``'TY5``!(YP@P)&T`""9M``P$=&5M<``"(V,%<W1R``8C! XM8P5C:&%R<V5T``<C8_______$R\*3KKZ<0`96$](P-"**`!3A/__'R!*4XBQ- XMQ&<8($00$$B`/P`3+PM.NOIR`!5<3TJ`9@3_$U.$8.#__Q\@2E.(L<1G!"`$2 XM8`)P`$S?%0P03EU.=?\-`!4!__\(``%[:0@``GLC8P@``'LC8_4`````04ISP XM=')T;V0``````P0````````````*``(`)P`)`"4!C\```@@``%]S=')T;V0`N XM!PH``%]C='!?``<*``!?97)R;F\`!P@``%]T;VEN=``'"```+E!F;'0`!P@`J XM`"Y0;75L``<(``!?<W1R8VUP``<(``!?<W!R:6YT9@`'"```7V%T;V8`!P@`N XM`"YB96=I;@````*``MH"@`+:#'-T<G1O9"YC`!49;\`-`#3_`0``%TY5_ZI(U XMYP@P`F)U9F9E<@#_JELP8P)B=69L:6T`_^HC8P)B=69O<F<`_^XC8P1C``)IN XM!&1P``<C8P1S<``&(V,"<V%V90#_\B-C`F5X<'0`__9I`F5S:6=N`/_X:0)D_ XM;W1S965N`/_Z:0)S8V%L90#__&D"<VEG;@#__FD#<W1R```((V,#<'1R```,& XM(R-C______________\3)&T`"/\5#!(`(&8$_Q-2BF#V__\5.WP``?_^__\5E XM#!(`+68&_Q-5;?_^_Q%2BO___Q-";?_Z_Q-";?_\_Q5![?^J)DC__Q<@2U*+> XM$+P`,/\7($M2BQ"\`"[__Q,K2__N_Q=![?_:*TC_ZO__%2M*__)@9O__%;A\' XM`"YF#/__%4IM__IF8O___Q-2;?_Z__\78%(P!%)`0?KZ<0`7"#```@``9@+_> XM$6!*__\5N'P`,&8D__\5M^W_[F<2____%;?M_^ID"O\5($M2BQ"$_Q-2;?_\B XM____$6`*_____Q5*;?_Z9P3_$U-M__S__Q%@%O___Q6W[?_J9`;_%2!+4HL0K XMA/___Q5*;?_Z9@3_$U)M__S__QE2BA`22(`X`&:2_Q6U[?_R9B#_%4JM``QGT XM"/\7(&T`#""M``C_$SM\``K0A'(`_QMP`'(`3-\,$$Y=3G7___\=M^W_[F,,P XM#"L`,/__9@3_$U.+8.[__Q6W[?_N9@C_%R!+4HL0O``P__\10A/_________6 XM_____Q,K2O_R_Q-";?_V_Q4[?``!__C___\9($I2BA`02(`X`/__';A\`&5G% XM"+A\`$5F``">____&2!*4HH0$$B`.`#__Q6X?``M9A#_$U5M__C_&2!*4HH0D XM$$B`.`#_'6`6N'P`*V<&N'P`(&8*_QD@2E**$!!(@#@`____%3`$4D!!^OIQN XM`!<(,``"``!G5O___Q6X?``P9@S_&R!*4HH0$$B`.`!@[O__$6`@_Q,_!$ZZP XM^G,`'U1/,BW_]L/\``K003M`__8?($I2BA`02(`X`#`$4D!!^OIQ`!<(,``"/ XM``!FT/__%4IM__AL!/\31&W_]O__%R!*4X@K2/_R_____Q5*K0`,9PC_%R!M# XM``P@K?_R__\7,"W__-%M__;___\3.WP`"="$<@#__Q<,;0$U__9O'O\7,"W_X XM_DC`3KKZ=``=)#Q_[___)CS___]53KKZ=0`38`#^U/\7#&T!-?_V9C+_$4AZY XM^B%A`#`5+RW_[DZZ^G8`%5!/2D!O'O\7,"W__DC`3KKZ=``=)#Q_[___)CS_% XM__]53KKZ=0`38`#^G/\98$X,;?Z]__9L%O\7,"W__DC`3KKZ=``5=`!V`$ZZ] XM^G4`$V``_GS_%PQM_KW_]F8H_Q%(>OHA80!2@14O+?_N3KKZ=@`54$]*0&P6@ XM_Q<P+?_^2,!.NOIT`!5T`'8`3KKZ=0`38`#^3/______%3\M__9(>OHA80!5E XM@A,O"TZZ^G<`$T_O``K_$4)MT`)R`/\52&W_JDZZ^G@`'UA/+P$O`#(M__Y(; XMP2`!3KKZ=``9)``F`2`?(A].NOIU`!-@`/X,_Q\Q-SDW-CDS,3,T.#8R,S$T8 XM'S<`-#DT,#8U-C0U.#0Q,C09-C4T-`!E)60```T`T@'__P@`!WMI"``&>VD(9 XM``)I"``!6S!C"```>V0(``-[:0E415A4`$,)0D]/3`!I"55#3U5.5`!)"4-/R XM54Y4`&D)1$]50DQ%`&0)1DQ/050`9@E54TA/4E0`20E32$]25`!I"4-05%(`H XM3`E!4%12`",C0PE35%)05%(`(T,)0EE414))5%,`0PE50EE410!#"4)95$4`W XM8PE73U)$0DE44P!)"5573U)$`$D)5T]21`!I"4Q/3D="2513`$P)54Q/3D<`Y XM3`E,3TY'`&P(``A[9/4`````04IS=')D=7```````$0````````````&``$`- XM'``)`!L`1L```@@``%]S=')D=7``!P@``%]S=')L96X`!P@``%]M86QL;V,`] XM!PH``%]E<G)N;P`'"```7W-T<F-A=``'"```+F)E9VEN`````H``1`QS=')DF XM=7`N8P`5&6Y?#0`+_P$``!].50``2.<`,"1M``@O"DZZ^G$`%5A//P!.NOIR> XM`!-43R9`!&1U<``'(V,%<W1R``8C8_____\3(`MF$/\3.WP``]"$<P#_&7``K XM3-\,`$Y=3G7___\3(`MG"O\5+PHO"TZZ^G0`$5!/____$R`+8.;_#0`;`?__E XM"``$>VD(``%[:0@``'LC8P@``GLC8P@``VGU`$%*9V5T8W=D``````&:````^ XM````````#@`%`#D`"0`T`7#```((``!?9V5T8W=D``<(``!?;6%L;&]C``<*8 XM``!?97)R;F\`!P@``%],;V-K``<(``!?9G)E90`'"```7U5N3&]C:P`'"```5 XM7T%L;&]C365M``<(``!?4&%R96YT1&ER``<(``!?1G)E94UE;0`'"```7T5X: XM86UI;F4`!P@``%]S=')L96X`!P@``%]S=')C870``@``AE]F;VQL;W<`!P@`8 XM`"YB96=I;@`````"@`"$`H``A`*``98"@`&$`H`!E@QG971C=V0N8P`5&2:'N XM#0`2_P$``!E.50``2.<(('@`!&UA;&QO8V5D``)I"D9I;&5,;V-K``1L;V-K: XM``8C.@`!`V)U9@``""-C`W-I>F4```QI________%4JM``AF(O\5/RT`#$ZZ/ XM^G$`%U1/*T``"&80_Q,[?``#T(1R`/\9<`!,WP003EU.=?__$7@!_____Q5(V XM>/_^2'KZ(6$`,!%.NOIS`!-03R1`__\5(&T`"$(0__\?/RT`#"\M``@O"F$R^ XM3^\`"A-*0&8:__\32D1G"O\5+RT`"$ZZ^G0`$5A/____$R\*3KKZ=0`16$__2 XM_Q-P`&"R____$R\*3KKZ=0`16$___Q4@+0`(8*3_$0``#0`V_P$``A=.50``' XM2.<(,`1N97=L;V-K``<C.@`!"D9I;&5);F9O0FQO8VL`"D1A=&53=&%M<``+< XM``,``P`,`61S7T1A>7,```!L`61S7TUI;G5T90``!&P!9'-?5&EC:P``"&P+@ XM``(`"@$$`69I8E]$:7-K2V5Y````;`%F:6)?1&ER16YT<GE4>7!E```$;`%F] XM:6)?1FEL94YA;64```A;,&,!9FEB7U!R;W1E8W1I;VX``'1L`69I8E]%;G1RC XM>51Y<&4``'AL`69I8E]3:7IE``!\;`%F:6)?3G5M0FQO8VMS``"`;`%F:6)?O XM1&%T90``A#H``P%F:6)?0V]M;65N=```D%LP8P%P861D:6YG``#@6S!C!&9I: XM8@`&(SH``@-L;V-K```((SH``0-B=68```PC8P-S:7IE```0:?__________: XM%4JM``AF"O\9<`%,WPP03EU.=?___QM(>0`!```_/`$$3KKZ=@`37$\D0/__T XM$R`*9@3_$W``8-[__Q4O+0`(3KKZ=P`36$\F0/__'S\M`!`O+0`,+PMAMD_O' XM``H32D!F$/\7/SP!!"\*3KKZ>``17$__$W``8*[___\7+PHO+0`(3KKZ>0`7U XM4$]*0&<``(P!``,$8P`"8____Q4O+0`,3KKZ>@`;6$\_`"!*4(@O"$ZZ^GH`8 XM'5A/,A_20%1!LFT`$&\2_Q<_/`$$+PI.NOIX`!%<3_\5<`!@`/]H____&2`+] XM9RXO+0`,3KKZ>@`?6$]30"!M``P8,```N#P`.A=G%+@\`"]G#O\12'KZ(60`< XM,!4O+0`,3KKZ>P`14$____\;($I0B"\(+RT`#$ZZ^GL`$5!/__\3(`MF#O\1` XM2'KZ(60`,A4O+0`,3KKZ>P`14$______%S\\`00O"DZZ^G@`$5Q/__\5<`%@# XM`/\"_Q,O`#H`#0!F`?__"``+>VD(``I[:0@`"7MI"``(>VD(``5[:0@`!'MIE XM!V9O;&QO=P``#'MI"``#>R,Z``$(``=[(SH``0@`!GLC.@`""``!>R-C"``"2 XM:0E"4U12`&P)0E!44@!L"```>R-C"51%6%0`0PE"3T],`&D)54-/54Y4`$D)W XM0T]53E0`:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(3U)4`&D)0U!4H XM4@!,"4%05%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"651%`$,)0EE4$ XM10!C"5=/4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))5%,`3`E53$].W XM1P!,"4Q/3D<`;/4`````04IC:&1I<@```````&`````````````&``$`'0`)/ XM`!P`A<```@@``%]C:&1I<@`'"@``7V5R<FYO``<(``!?9FEL971Y<&4`!P@`) XM`%],;V-K``<(``!?0W5R<F5N=$1I<@`'"```+F)E9VEN``````*``&`,8VADW XM:7(N8P`5&5.2#0`-_P$``!-.5?_\"D9I;&5,;V-K``)L;V-K`/_\(SH``0-P4 XM871H```((V/_____%4JM``AF#/\3.WP`"]"$<0#_%7#_3EU.=?___Q4O+0`(- XM3KKZ<@`76$^P?``!9PK_$SM\``'0A'$`_Q-P_V#B____&4AX__XO+0`(3KKZ; XM<P`74$\K0/_\9@K_$SM\``C0A'$`_Q-P_V#$____%2\M__Q.NOIT`!583RM`` XM__S__Q-P`&"R_PT`)`'__P@`!'LC.@`!"``#>R,Z``$(``%I"4)35%(`;`E"S XM4%12`&P(``)[:0@``'MI"51%6%0`0PE"3T],`&D)54-/54Y4`$D)0T]53E0`M XM:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(3U)4`&D)0U!44@!,"4%07 XM5%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"651%`$,)0EE410!C"5=/C XM4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))5%,`3`E53$].1P!,"4Q/7 XM3D<`;/4``$%*9FEL971Y<&4```!\````````````"``!`",`"0`B`-K```((: XM``!?9FEL971Y<&4`!P@``%]!;&QO8TUE;0`'"@``7V5R<FYO``<(``!?3&]C; XM:P`'"```7T5X86UI;F4`!P@``%]5;DQO8VL`!P@``%]&<F5E365M``<(```NF XM8F5G:6X````"@`!\#&9I;&5T>7!E+F,`%1ECD0T`$/\!```73E4``$CG"#`$F XM<F5S=6QT``)I"D9I;&5,;V-K``1L;V-K``<C.@`!"D9I;&5);F9O0FQO8VL`P XM"D1A=&53=&%M<``+``,``P`,`61S7T1A>7,```!L`61S7TUI;G5T90``!&P!X XM9'-?5&EC:P``"&P+``(`"@$$`69I8E]$:7-K2V5Y````;`%F:6)?1&ER16YT9 XM<GE4>7!E```$;`%F:6)?1FEL94YA;64```A;,&,!9FEB7U!R;W1E8W1I;VX`] XM`'1L`69I8E]%;G1R>51Y<&4``'AL`69I8E]3:7IE``!\;`%F:6)?3G5M0FQO[ XM8VMS``"`;`%F:6)?1&%T90``A#H``P%F:6)?0V]M;65N=```D%LP8P%P861DY XM:6YG``#@6S!C!&9I8@`&(SH``@-P871H```((V/_________&TAY``$``#\\U XM`01.NOIQ`!=<3R1`2H!F$/\3.WP``]"$<@#_&7#_3-\,$$Y=3G7___\92'C_! XM_B\M``A.NOIS`!=03R9`2H!F"O\3.WP`"-"$<@#_$W#_8-K___\5+PHO"TZZ, XM^G0`$5!/__\=2JH`!&\$<`%@`G`".`#__Q,O"TZZ^G4`$5A/_Q<_/`$$+PI.X XMNOIV`!%<3___$S`$8*K_#0`M`?__"``&>VD(``5[:0@`!'MI"``#>R,Z``$(L XM``%[(SH``@@``FD)0E-44@!L"4)05%(`;`@``'MI"51%6%0`0PE"3T],`&D)/ XM54-/54Y4`$D)0T]53E0`:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(* XM3U)4`&D)0U!44@!,"4%05%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"E XM651%`$,)0EE410!C"5=/4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))J X85%,`3`E53$].1P!,"4Q/3D<`;/4`````G X`` Xend Xsize 13164 SHAR_EOF echo "End of archive 1 (of 2)" # if you want to concatenate archives, remove anything after this line exit