[comp.sources.amiga] v90i200: netkeys 2.0 - control two amigas via dnet, Part02/02

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (07/07/90)

Submitted-by: sas.UUCP!walker%sas@rti.rti.org (Doug Walker)
Posting-number: Volume 90, Issue 200
Archive-name: comm/dnet/netkeys-2.0/part02

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 2)."
# Contents:  netkeys.c netkeys.uu
# Wrapped by tadguy@xanth on Sat Jul  7 11:13:12 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'netkeys.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'netkeys.c'\"
else
echo shar: Extracting \"'netkeys.c'\" \(15146 characters\)
sed "s/^X//" >'netkeys.c' <<'END_OF_FILE'
X/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
X/* |_o_o|\\ Copyright (c) 1990 The Software Distillery.  All Rights Reserved.*/
X/* |. o.| || This program may not be distributed without the permission of   */
X/* | .  | || the authors.                                                    */
X/* | o  | ||                                                                 */
X/* |  . |// Written by Doug Walker                                           */
X/* ======          BBS:(919)-471-6436      VOICE:(919)-467-4764              */ 
X/*                 BIX: djwalker           USENET: ...!mcnc!rti!sas!walker   */
X/*                 405 B3 Gooseneck Dr, Cary, NC 27513, USA                  */
X/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
X/*
X * Based on POPCLI III, written by John Toebes
X * Uses Matt Dillon's DNET
X */
X
X#include "netkeys.h"
X#include <intuition/intuitionbase.h>
X#include <proto/intuition.h>
X
X#ifdef DEBUG
X#undef DEBUG
X#endif
X
X#define DEBUG 0
X
X#if DEBUG
X#define BUG(x) if(_Backstdout) MSG(_Backstdout, x);
X#else
X#define BUG(x) ;
X#endif
X
X/* Declarations for CBACK */
Xextern BPTR _Backstdout;         /* standard output when run in background */
Xlong _BackGroundIO = 1;          /* Flag to tell it we want to do I/O      */
Xlong _stack = 4000;              /* Amount of stack space our task needs   */
Xchar *_procname = "NetKeys II";  /* The name of the task to create         */
Xlong _priority = 20;             /* The priority to run us at              */
X
Xint InitDevice(GLOBAL_DATA *, int);
Xint TermDevice(GLOBAL_DATA *);
X
Xstruct InputEvent * __regargs myhandler(struct InputEvent *ev, GLOBAL_DATA *gptr)
X{
X   struct InputEvent *ep, *laste;
X   struct NETKEYMSG *nkm;
X   int msgtype;
X
X   if(gptr->state < EM_DOIT) return(ev);  /* In the process of quitting */
X
X   /* run down the list of events to see if they pressed the magic button */
X   for (ep = ev, laste = NULL; ep != NULL; ep = ep->ie_NextEvent)
X   {
X      msgtype = NKM_NONE;
X      if(gptr->state == EM_RELURK)
X      {
X         gptr->state = EM_LURK;
X         msgtype = NKM_ACK;
X      }
X      else if(ep->ie_Class == IECLASS_RAWKEY || ep->ie_Class == IECLASS_RAWMOUSE)
X      {
X         if(
X             (
X               ep->ie_Class == IECLASS_RAWKEY                  &&
X               ep->ie_Code  == gptr->dokey                     &&
X               (ep->ie_Qualifier & IEQUALIFIER_LCOMMAND)
X             ) 
X             ||
X             (
X               gptr->state == EM_LURK                                         &&
X               ep->ie_Class == IECLASS_RAWMOUSE                               &&
X               (ep->ie_Qualifier & IEQUALIFIER_RELATIVEMOUSE)                 &&
X               (ep->ie_Code == IECODE_NOBUTTON)                               &&
X               ((gptr->ibase->MouseX == 0 && ep->ie_X < 0 && 
X                    (gptr->exit & IECODE_NKLEFT)) ||
X                (gptr->ibase->MouseX == gptr->swidth && ep->ie_X > 0 &&
X                    (gptr->exit & IECODE_NKRIGHT))
X               )
X             )
X           )
X         {
X            /* Remove the event from the chain */
X            if (laste == NULL)
X               ev = ep->ie_NextEvent;
X            else
X               laste->ie_NextEvent = ep->ie_NextEvent;
X
X            /* Telling us to toggle... */
X            if(gptr->state == EM_DOIT)
X            {
X               gptr->state = EM_LURK;
X               msgtype = NKM_WEBEDONE;
X            }
X            else
X            {
X               gptr->state = EM_DOIT;
X               msgtype = NKM_HEREWEGO;
X            }
X         }
X         else if(gptr->state != EM_LURK)
X         {
X            /* Remove the event from the chain */
X            if (laste == NULL)
X               ev = ep->ie_NextEvent;
X            else
X               laste->ie_NextEvent = ep->ie_NextEvent;
X
X            msgtype = NKM_IEVENT;
X         }
X      }
X      else
X         laste = ep;
X
X      if(msgtype != NKM_NONE)
X      {
X         if(!(nkm=(struct NETKEYMSG *)GetMsg(gptr->rtnp)))
X         {
X            if(gptr->nmsgs <= MAXMSGS)
X               nkm=AllocMem(NKMSZ, MEMF_CLEAR|MEMF_PUBLIC);
X         }
X         if(nkm)
X         {
X            nkm->msgtype = msgtype;
X            if(msgtype == NKM_IEVENT || msgtype == NKM_HEREWEGO) nkm->ie = *ep;
X            PutMsg((struct MsgPort *)gptr->nkmp, (struct Message *)nkm);
X         }
X      }
X   }
X
X   /* pass on the pointer to the event */
X   return(ev);
X}
X
X#if DEBUG > 1
XBPTR _Backstdout = NULL;
Xchar *cmd;
X#define DCLMAIN int main(int argc, char *argv[])
X#else
X#define DCLMAIN int _main(char *cmd)
X#endif
X
XDCLMAIN
X{
X   struct MsgPort  *inputDevPort = NULL;
X   struct MsgPort  *oldport;
X   struct IOStdReq *inputRequestBlock = NULL;
X   struct Interrupt handlerStuff;
X   GLOBAL_DATA global;
X   struct NETKEYMSG *msg, *oldmsg, *tmpmsg;
X   int quit = 0;
X   UWORD smooth = 2;
X   struct Screen wbdat;
X   struct IntuitionBase *IntuitionBase;
X   struct GfxBase *GfxBase = NULL;
X   UWORD *NoSprData = NULL;
X   ULONG IBaseLock;
X
X#if DEBUG > 1
X   /* Not really linked with cback */
X   cmd = argv[1];
X   _Backstdout = Output();
X#endif
X
X   MSG(_Backstdout, BANNER);
X
X   memset(&global, 0, sizeof(global));
X   global.buddy = FindTask(0L);
X   global.dokey  = DEFDOKEY;
X   global.state = EM_LURK;
X
X   if(!(global.rtnp = CreatePort(0,0)))
X   {
X      MSG(_Backstdout, "Can't CreatePort\n");
X      goto abort;
X   }
X
X   oldport = FindPort(NKMPNAME);
X
X   if(cmd)
X   {
X      long tmpl = DEFDOKEY;
X      while(*cmd)
X      {
X         while(*cmd != ' ' && *cmd != '\0') cmd++;
X         while(*cmd == ' ') cmd++;
X
X         switch(cmd[0])
X         {
X            case '\0': 
X            case '\n':
X               break;
X
X            case '0':
X               if(cmd[1] == 'x')
X               {
X                  stch_l(cmd+2, &tmpl);
X                  global.dokey = tmpl;
X               }
X               break;
X
X            case 'F': case 'f':
X               smooth = 0;
X               break;
X
X            case 'L': case 'l':
X               global.exit = IECODE_NKLEFT;
X               break;
X
X            case 'Q': case 'q':
X               quit = 1;
X               break;
X
X            case 'R': case 'r':
X               global.exit = IECODE_NKRIGHT;
X               break;
X
X            case 'S': case 's':
X               smooth = 1;
X               break;
X
X            case 'W': case 'w':
X               global.exit = IECODE_NKLEFT|IECODE_NKRIGHT;
X               break;
X
X            default:
X               MSG(_Backstdout, 
X                "USAGE: NetKeys [0xkey] [F|S] [L|R|W] [Q]\n");
X               MSG(_Backstdout, "   [0xkey]  - RAW key code for hotkey\n");
X               MSG(_Backstdout, "   [F|S]    - FAST or SMOOTH mode\n");
X               MSG(_Backstdout, 
X                  "   [L|R|W]  - Mouse cursor exits LEFT, RIGHT or WRAPs\n");
X               MSG(_Backstdout, "   [Quit]   - Terminate NetKeys\n");
X               goto abort;
X         }
X      }
X   }
X
X   if(!(oldmsg = AllocMem(NKMSZ, MEMF_CLEAR|MEMF_PUBLIC)))
X   {
X      MSG(_Backstdout, "No memory\n");
X      goto abort;
X   }
X   if(quit)
X   {
X      if(!oldport)
X      {
X         MSG(_Backstdout, "Netkeys not installed\n");
X         goto abort;
X      }
X      else
X      {
X         oldmsg->msgtype = NKM_QUIT;
X         oldmsg->m.mn_Node.ln_Type = NT_MESSAGE;
X         oldmsg->m.mn_ReplyPort = global.rtnp;
X
X         PutMsg(oldport, (struct Message *)oldmsg);
X         while(!GetMsg(global.rtnp))
X            WaitPort(global.rtnp);
X         GetMsg(global.rtnp);
X
X         MSG(_Backstdout, "NetKeys removed\n");
X         goto abort;      
X      }
X   }
X
X   if(oldport)
X   {
X      /* Modify the parms for the existing guy */
X      oldmsg->msgtype = NKM_CONTROL;
X      oldmsg->m.mn_Node.ln_Type = NT_MESSAGE;
X      oldmsg->m.mn_ReplyPort = global.rtnp;
X      oldmsg->ie.ie_Class = global.dokey;
X      oldmsg->ie.ie_SubClass = global.exit;
X      oldmsg->ie.ie_Code = smooth;
X      PutMsg(oldport, (struct Message *)oldmsg);
X
X      while(!GetMsg(global.rtnp))
X         WaitPort(global.rtnp);
X      GetMsg(global.rtnp);
X
X      MSG(_Backstdout, "Parameters modified on existing NetKeys command\n");
X      goto abort;
X   }
X   FreeMem(oldmsg, NKMSZ);
X   oldmsg = NULL;
X
X   MSG(_Backstdout, INSTR);
X
X   if(global.exit == 0) global.exit = IECODE_NKLEFT|IECODE_NKRIGHT;
X
X   if(smooth == 2) smooth = 0;
X
X   if (
X       ((global.nkmp = CreatePort(NKMPNAME, 0)) == NULL) ||
X       ((inputDevPort = CreatePort(0,0)) == NULL)        ||
X        InitDevice(&global, NKM_HANDLER)                 ||
X        ((inputRequestBlock = 
X               CreateIOReq(inputDevPort, sizeof(struct IOStdReq))) == NULL) ||
X
X       !(global.ibase = (struct IntuitionBase *)
X                       OpenLibrary("intuition.library", 0))                 ||
X
X       !(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0))    ||
X
X       !(NoSprData = AllocMem(12, MEMF_PUBLIC|MEMF_CHIP|MEMF_CLEAR))        ||
X
X      OpenDevice("input.device",0,(struct IORequest *)inputRequestBlock,0))
X      {
X         MSG(_Backstdout, "Can't initialize - check DNET connection\n");
X         goto abort;
X      }
X
X   MSG(_Backstdout, "NetKeys installed\n");
X
X#if DEBUG < 1
X   if(_Backstdout) Close(_Backstdout);
X   _Backstdout = 0;
X#endif
X
X   IntuitionBase = global.ibase;
X   NoSprData[0] = 0xFE00;
X   NoSprData[1] = 0xFF00;
X
X   /* If we have an appropriate version of intuition, ask for info */
X   /* about the workbench screen                                   */
X   if(IntuitionBase->LibNode.lib_Version < 33
X      || !(GetScreenData((char *)&wbdat, sizeof(struct Screen), 
X                              WBENCHSCREEN, NULL)))
X   {
X      /* Either we're running on an old version of the system, or the */
X      /* GetScreenData call failed for some reason.  In either case,  */
X      /* simply assume a 640x200 screen and be done with it.          */
X      global.swidth  = 639;
X   }
X   else
X   {
X      /* Use the wb width, and STDSCREENHEIGHT. */
X      global.swidth  = wbdat.Width-1;
X   }
X
X   handlerStuff.is_Data = (APTR)&global;
X   handlerStuff.is_Code = (VOID (*)()) myhandler;
X   handlerStuff.is_Node.ln_Pri = 52;
X
X   inputRequestBlock->io_Command = IND_ADDHANDLER;
X   inputRequestBlock->io_Data    = (APTR)&handlerStuff;
X
X   DoIO((struct IORequest *)inputRequestBlock);
X
X   while(global.state >= EM_DOIT && 
X        !(SIGBREAKF_CTRL_C & Wait((1<<global.nkmp->mp_SigBit) | SIGBREAKF_CTRL_C)))
X   {
X      while(msg=(struct NETKEYMSG *)GetMsg(global.nkmp))
X      {
X         if(msg->msgtype == NKM_QUIT)          /* Msg from another invocation */
X         {
X            ReplyMsg((struct Message *)msg);
X            goto abort;
X         }
X         else if(msg->msgtype == NKM_CONTROL)  /* Msg from another invocation */
X         {
X            global.dokey = msg->ie.ie_Class;
X            if(msg->ie.ie_SubClass)
X               global.exit = msg->ie.ie_SubClass;
X            if(msg->ie.ie_Code != 2)
X               smooth = msg->ie.ie_Code;
X            ReplyMsg((struct Message *)msg);
X            continue;
X         }
X         else if(msg->msgtype == NKM_HEREWEGO) /* From handler - start sending */
X         {
X            if(msg->ie.ie_Class == IECLASS_RAWMOUSE)
X               msg->ie.ie_Code = global.exit;
X            else
X               msg->ie.ie_Code = global.exit|IECODE_NKHOTKEY;
X
X            msg->ie.ie_Class = IECLASS_NKCONTROL;
X
X            msg->ie.ie_Y = IntuitionBase->MouseY;
X            msg->ie.ie_X = IntuitionBase->MouseX;
X
X            mshow(GfxBase, NoSprData, 0);  /* Blank mouse */
X         }
X         else if(msg->msgtype == NKM_WEBEDONE) /* From handler - quit sending*/
X         {
X            mshow(GfxBase, NoSprData, 1);  /* Unblank mouse */
X            msg->ie.ie_Class = IECLASS_NKCONTROL;
X            msg->ie.ie_Code  = IECODE_NKHOTQUIT|global.exit;
X            msg->ie.ie_Y = IntuitionBase->MouseY;
X            msg->ie.ie_X = IntuitionBase->MouseX;
X         }
X
X         tmpmsg = NULL;
X         if( !smooth &&
X             msg->ie.ie_Class == IECLASS_RAWMOUSE &&
X             msg->ie.ie_Code == IECODE_NOBUTTON)
X         {
X            while((tmpmsg = (struct NETKEYMSG *)GetMsg(global.nkmp)) &&
X                   tmpmsg->msgtype == NKM_IEVENT &&
X                   tmpmsg->ie.ie_Class == IECLASS_RAWMOUSE &&
X                   tmpmsg->ie.ie_Code == IECODE_NOBUTTON &&
X                   (tmpmsg->ie.ie_Qualifier & IEQUALIFIER_RELATIVEMOUSE))
X            {
X               tmpmsg->ie.ie_X += msg->ie.ie_X;
X               tmpmsg->ie.ie_Y += msg->ie.ie_Y;
X               PutMsg(global.rtnp, (struct Message *)msg);
X               msg = tmpmsg;
X               tmpmsg = NULL;
X            }
X         }
Xputit:
X         if(DWrite(global.chan, (char *)&msg->ie, IESZ) != IESZ)
X            break;
X
X         PutMsg(global.rtnp, (struct Message *)msg);
X
X         if(DNRead(global.chan, (char *)&msg->ie, IESZ) == IESZ)
X         {
X            while(DNRead(global.chan, (char *)&msg->ie, IESZ) == IESZ);
X
X            IBaseLock = LockIBase(0);
X            IntuitionBase->MouseY = msg->ie.ie_Y;
X            IntuitionBase->MouseX = (msg->ie.ie_X == 0 ? global.swidth-1 : 1);
X            UnlockIBase(IBaseLock);
X
X            /* Set global state to RELURK and wait for handler to acknowledge */
X            global.state = EM_RELURK;
X            do
X            {
X               if(!(msg=(struct NETKEYMSG *)GetMsg(global.nkmp))) 
X                  WaitPort(global.nkmp);
X            }
X            while(!msg || msg->msgtype != NKM_ACK);
X            mshow(GfxBase, NoSprData, 1);
X         }
X         else if(tmpmsg)
X         {
X            msg = tmpmsg;
X            tmpmsg = NULL;
X            goto putit;
X         }
X      }
X   }
X
Xabort:
X   if(global.ibase) CloseLibrary((struct Library *)global.ibase);
X
X   if(GfxBase)
X   {
X      if(NoSprData)
X      {
X         mshow(GfxBase, NoSprData, 1);
X         FreeMem(NoSprData, 12);
X      }
X      CloseLibrary((struct Library *)GfxBase);
X   }
X
X   TermDevice(&global);
X
X   if (inputRequestBlock != NULL)
X   {
X      if (inputRequestBlock->io_Device != NULL)
X      {
X         inputRequestBlock->io_Command = IND_REMHANDLER;
X         inputRequestBlock->io_Data = (APTR)&handlerStuff;
X         DoIO((struct IORequest *)inputRequestBlock);
X
X         CloseDevice((struct IORequest *)inputRequestBlock);
X      }
X      DeleteIOReq(inputRequestBlock);
X   }
X
X   if (inputDevPort != NULL)  DeletePort(inputDevPort);
X
X   if(global.nkmp)
X   {
X      while(msg=(struct NETKEYMSG *)GetMsg(global.nkmp)) FreeMem(msg, NKMSZ);
X      DeletePort(global.nkmp);
X   }
X
X   if(global.rtnp)
X   {
X      while(msg=(struct NETKEYMSG *)GetMsg(global.rtnp)) FreeMem(msg, NKMSZ);
X      DeletePort(global.rtnp);
X   }
X
X   if(_Backstdout) Close(_Backstdout);
X
X   return(0);
X}
X
Xint InitDevice(GLOBAL_DATA *global, int which)
X{
X
X   if(global->active) return(1);
X   global->active = 1;
X
X   if(!(global->chan=(struct DChannel *)
X      DOpen(NULL, (uword)(PORT_NETKEYS), 127, 127)))
X         return(1);
X
X   return(0);
X}
X
Xint TermDevice(GLOBAL_DATA *global)
X{
X   if(!global->active) return(1);
X
X   global->active = 0;
X
X   if(global->chan) DClose(global->chan);
X
X   global->chan = NULL;
X
X   return(0);
X}
X
Xvoid MemCleanup(void);
Xvoid MemCleanup(){}
END_OF_FILE
if test 15146 -ne `wc -c <'netkeys.c'`; then
    echo shar: \"'netkeys.c'\" unpacked with wrong size!
fi
# end of 'netkeys.c'
fi
if test -f 'netkeys.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'netkeys.uu'\"
else
echo shar: Extracting \"'netkeys.uu'\" \(13190 characters\)
sed "s/^X//" >'netkeys.uu' <<'END_OF_FILE'
Xbegin 666 netkeys
XM```#\P`````````#``````````(```#*````:P``!]<```/I````RDCG?OY+Z
XM[P`T)$@D`$GY`````"QX``0I3@!:*4\`8D*L`%Y'^0```:!R`"`\`````V`"H
XM)L%1R/_\)FX!%'``(CP``#``3J[^SBEK`)@`5DJK`*QG``%080`"G"(L`%8L4
XM;`&H3J[_H"E``%8@:P"LT<C1R")H`!#3R=/)(`)R`!(9*`DF`=*!T(%:@.6(L
XMT*P`%"E``!1![```+'@`!$ZN_R(B0"\`(FD`$$?I`.8@1"`#8`(6V%'(__P6"
XM_``@($H@`F`"%MA1R/_\0ALI2P!V($0@`V`"%MA1R/_\0A-%Z0!L*4H`&D7ZY
XM_Q8B_````#DF">2+(M)"DD7Z`38@/````-T2VE'(__Q*K`"(9P``&D'L`(8B5
XM""0\```#[2QL`:A.KO_B*4``<BQX``1.KO]\(BP`D"0L`)0H+`",+&P!J$ZN/
XM_W8F3DJ`9@``("1?(FH`$"(L`%9.KO^F($HL>``$3J[_''!H8```)B1`(E]%.
XMZO^D0>H`2D'H``0@*``$(4D`!"*((T``!"!`((EP`"QX``1.KO]V(DLL>``$A
XM3J[^8DS??WY.=2EK`#H`)@:L````@``F80`!0$7Z`/`I2@`:80`!3"E``%XO5
XM`"1`("H`)&<2+&P!J"!`(B@``"E!`%9.KO^"(BH`(&<:)#P```/M3J[_XBE`V
XM`&YG"N6(($`G:``(`*0@;`!>+PA(;``B(&@`)"EH``0`=DZZ`0A.N0``!"!P!
XM`&```(0````Y`````"`/2.=^_BI`+'@`!$GY`````"E/`&)A``"ND\DL>``$X
XM3J[^VB9`*6L`.@`F!JP```"``"8@:P"`T<C1R")H``S3R=/)*5$`'B%1``PB)
XM+`!6+&P!J$ZN_X)(>@"$3KD```0@6$\B+``>+&P!J$ZN_V0B+`!63J[_IG``9
XM("P`3F<$($!.D$ZY```-CBQX``0B;`&H3J[^8DZY```88DJL`%YG&B(L`&YG9
XM!$ZN_]PL>``$3J[_?")L`%Y.KOZ&+FP`8DS??WY.=4/L`'IP`$ZN_=@I0`&H)
XM9P``!$YU<&1@G$'K`%Q.KOZ`0>L`7$ZN_HQ.=0``3OD``!A@<&$```/L````0
XM`P````$````D```"/`````X````%`````@```L8```*T```"C````AP```,B*
XM`````````_(```/J````:`````````````````````$````!````YD[Y````Y
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````9&]S+FQI8G)A<GD`*@`````!```/H````9`````4```````@("`@("`@(
XM("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$0
XMA(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0"
XM@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0("`@("`@("`@("@H*"@H\
XM("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0$!`0$!`0$(2$A(2$A(2$A(00P
XM$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!`0$!`0$0$!`0$!""@H*"@H("H
XM`@("`@("`@("`@("`@("`@("`A`0$!`@```````#[`````$````"````D```(
XM``````/R```#Z0``!]=.5?_L2.<A,B9()$DP*@`&2D!J!B`+8``!<"M+__Q"S
XMK?_X2JW__&<``5Y^_W`"L&H`!F8,<`$U0``&?@-@``#*(&W__!`H``1R`;`!<
XM9PAT`K`"9@``L+`!9A0R*``&-"H`!+1!9@@(*``&``EF4C(J``9T`;)"9G15N
XM`&9P""@`!P`(9V@,:`#_``9F8")J`!)*:0!&9A`P*``*2D!J"`@J``(`&68:;
XM,"D`1K!J`!9F/#`H``I*0&\T""H``P`99RQ*K?_X9@0F4&`((E`L;?_X+(E*8
XM:@`&9@IP`35```9^!6`F<``U0``&?@1@'%-!9QA*K?_X9@0F4&`&(FW_^"*0]
XM?@!@!"M(__AP_[Z`9VP@:@`.+'@`!$ZN_HPK0/_T2H!F&`QJ`&0`"&X0<"PB6
XM/``!``%.KO\Z*T#_]$J`9SPB!R!`,4$`%$J!9P9T!+Z"9AI#Z``6+TD`%")M9
XM__PL;P`4=`0LV5'*__P\D2!J``HB;?_T+'@`!$ZN_I(@;?_\*U#__&``_IX@N
XM"TS?3(1.74YU3F5T2V5Y<R!)20``FS%M3F5T2V5Y<R`R+C";,&T@8GD@1&]U0
XM9R!786QK97(*0V]P>7)I9VAT(*D@,3DY,"!4:&4@4V]F='=A<F4@1&ES=&ELA
XM;&5R>0HR,S4@5')I;&QI;F=H86T@3&XL($-A<GD@3D,@,C<U,3,@55-!"D)":
XM4SHH.3$Y*3,X,BTX,C8U"@``0V%N)W0@0W)E871E4&]R=`H`3F5T2V5Y<R`R/
XM+C``55-!1T4Z($YE=$ME>7,@6S!X:V5Y72!;1GQ372!;3'Q2?%==(%M170H`>
XM("`@6S!X:V5Y72`@+2!205<@:V5Y(&-O9&4@9F]R(&AO=&ME>0H``"`@(%M&*
XM?%-=("`@("T@1D%35"!O<B!334]/5$@@;6]D90H``"`@(%M,?%)\5UT@("T@#
XM36]U<V4@8W5R<V]R(&5X:71S($Q%1E0L(%))1TA4(&]R(%=205!S"@``("`@A
XM6U%U:71=("`@+2!497)M:6YA=&4@3F5T2V5Y<PH``$YO(&UE;6]R>0H``$YE1
XM=&ME>7,@;F]T(&EN<W1A;&QE9`H``$YE=$ME>7,@<F5M;W9E9`H``%!A<F%M;
XM971E<G,@;6]D:69I960@;VX@97AI<W1I;F<@3F5T2V5Y<R!C;VUM86YD"@``X
XM57-E("=.971+97ES(%%5250G('1O(')E;6]V90I);G-T86QL:6YG+"!P;&5A_
XM<V4@=V%I="XN+@H``&EN='5I=&EO;BYL:6)R87)Y`&=R87!H:6-S+FQI8G)A0
XM<GD``&EN<'5T+F1E=FEC90``0V%N)W0@:6YI=&EA;&EZ92`M(&-H96-K($1.5
XM150@8V]N;F5C=&EO;@H`3F5T2V5Y<R!I;G-T86QL960*``!.5?XX2.<W$B9O&
XM`>R1R'X`?`(K2/Y$*TC^2"M(__0K2/_\2JP`<F<8<$'0@"(L`')!^OU*)`@F`
XM`"QL`:A.KO_0<"%R`$'M_[P0P5'(__R3R2QX``1.KO[:*T#_O#M\`!/_P#M\;
XM``'_PD*G0J=.N@D"4$\K0/_*2H!F(DJL`')G``=H<!$B+`!R0?K]=B0()@`LW
XM;`&H3J[_T&``!TY#^OUT+'@`!$ZN_GHK0/_X(`MG``&`<!,K0/X\2A-G``%TU
XM$!-R(+`!9PA*`&<$4HM@\'`@L!-F!%*+8/9P`!`3<EI=06L``+RP>Q`(9O1.V
XM^Q`$`'=@``"B`%=@``"<`'-@``"0`%-@``"*`')@``!Z`%)@``!T`'%@``!HF
XM`%%@``!B`&Q@``!2`$Q@``!,`&9@``!``$9@```Z`#!@```.``I@`/]X``!@N
XM`/]R<'BP*P`!9@#_:$'K``)(;?X\+PA.NAF"4$\@+?X\.T#_P&``_TQ\`&``@
XM_T8[?``$_]1@`/\\?@%@`/\V.WP`"/_48`#_+'P!8`#_)CM\``S_U&``_QQ*\
XMK`!R9Q9P*2(L`')!^OQR)`@F`"QL`:A.KO_02JP`<F<6<"8B+`!R0?K\@"0(9
XM)@`L;`&H3J[_T$JL`')G%G`B(BP`<D'Z_(PD""8`+&P!J$ZN_]!*K`!R9Q9P?
XM-B(L`')!^OR4)`@F`"QL`:A.KO_02JP`<F<`!=1P("(L`')!^ORN)`@F`"QLF
XM`:A.KO_08``%NG`L(CP``0`!+'@`!$ZN_SHK0/^T2H!F*$JL`')G``6:<@HO[
XM00`<(BP`<D'Z_)(D""8O`!PL;`&H3J[_T&``!7I*AV<``)A*K?_X9B)*K`!R<
XM9P`%9G`6(BP`<D'Z_&XD""8`+&P!J$ZN_]!@``5,(&W_M#%\``$`%!%\``4`@
XM""%M_\H`#B!M__@B;?^T+'@`!$ZN_I(@;?_*+'@`!$ZN_HQ*@&8*(&W_RDZNW
XM_H!@YB!M_\HL>``$3J[^C$JL`')G``3X<!`B+`!R0?K\&"0()@`L;`&H3J[_P
XMT&``!-Y*K?_X9P``A"!M_[0Q?``"`!01?``%``@A;?_*``XP+?_`$4``&C`M1
XM_]010``;,48`'"!M__@B;?^T+'@`!$ZN_I(@;?_*+'@`!$ZN_HQ*@&8*(&W_6
XMRDZN_H!@YB!M_\HL>``$3J[^C$JL`')G``1N<#`B+`!R0?K[H"0()@`L;`&H8
XM3J[_T&``!%0B;?^T<"PL>``$3J[_+D*M_[1*K`!R9Q9P."(L`')!^ON@)`@F)
XM`"QL`:A.KO_0,"W_U&8&.WP`#/_4<`*\0&8"?`!"ITAZ^C9.N@604$\K0/_&7
XM2H!G``",0J="ITZZ!7Q03RM`__Q*@&=X2'@``DAM_[QA``3V4$]*@&9F2'@`(
XM,"\M__Q.N@7N4$\K0/_T2H!G4$/Z^V9P`"QX``1.KOW8*T#_SDJ`9SI#^OMB$
XM<`!.KOW8*T#^2$J`9RAP#"(\``$``TZN_SHK0/Y$2H!G%$'Z^TYP`")M__1RX
XM`$ZN_D1*@&<B2JP`<F<``VIP*2(L`')!^OLZ)`@F`"QL`:A.KO_08``#4$JL=
XM`')G%G`2(BP`<D'Z^T0D""8`+&P!J$ZN_]!*K`!R9PPB+`!R+&P!J$ZN_]Q"^
XMK`!R(&W_SB)M_D0RO/X`,WS_```"*TC^3`QH`"$`%&4:0>W^4"`\```!6G(!P
XMD\DL;?Y,3J[^5DJ`9@@[?`)__])@"C`M_EQ30#M`_])![?^\*TC_[$'Z]L`KS
XM2/_P&WP`-/_G(&W_]#%\``D`'$'M_]XB;?_T(T@`*"QX``1.KOXX,"W_PFT`_
XM`IAP`"!M_\80*``/<@$D`>&B`$(0`"`"+'@`!$ZN_L((```,9@`"<B!M_\8L"
XM>``$3J[^C"M`_[A*@&>^<@$@0+)H`!1F"B)`3J[^AF```DIR`K)H`!1F+G0`\
XM%"@`&CM"_\!**``;9PIT`!0H`!L[0O_4,B@`''0"LD)G`BP!(D!.KOZ&8*)RW
XM!+)H`!1F2'("LB@`&F8*,BW_U#%!`!Q@##(M_]0`00`!,4$`'!%\``0`&B)M@
XM_DPQ:0!$`"(Q:0!&`"!"IR\M_D0O+?Y(3KH-BD_O``Q@0G`%L&@`%&8Z2'@`_
XM`2\M_D0O+?Y(3KH-;$_O``QP!"!M_[@10``:,"W_U`!```(Q0``<(FW^3#%IA
XM`$0`(C%I`$8`($*M_[!*1F9P<`(@;?^XL"@`&F9D#&@`_P`<9EP@;?_&+'@`C
XM!$ZN_HPK0/^P2H!G2"!`2F@`%&9`<@*R*``:9C@,:`#_`!QF,`@H``<`'F<HX
XM(FW_N#(I`"#3:``@,"D`(M%H`"(@;?_*3J[^DBMM_[#_N$*M_[!@I"!M_[C0(
XM_``62'@`%B\(+RW_VDZZ"!1/[P`,<A:P@68`_DH@;?_*(FW_N"QX``1.KOZ2Y
XM(&W_N-#\`!9(>``6+P@O+?_:3KH&$D_O``QR%K"!9@``H"!M_[C0_``62'@`W
XM%B\(+RW_VDZZ!?!/[P`,<A:P@6?@<``L;?Y,3J[^8BH`(&W_N#UH`"(`1$IHC
XM`"!F"C`M_])(P%.`8`)P`3U``$8@14ZN_EP[?``"_\(@;?_&+'@`!$ZN_HPK/
XM0/^X2H!F""!M_\9.KOZ`2JW_N&?><`,@;?^XL&@`%&;22'@``2\M_D0O+?Y(*
XM3KH+X$_O``Q@`/VH2JW_L&<`_:`K;?^P_[A"K?^P8`#^^DJM_\YG#")M_\XL?
XM>``$3J[^8DJM_DAG-$JM_D1G(DAX``$O+?Y$+RW^2$ZZ"Y1/[P`,(FW^1'`,Q
XM+'@`!$ZN_RXB;?Y(+'@`!$ZN_F)(;?^\80`!!EA/2JW_]&<T(&W_]$JH`!1G;
XM(#%\``H`'$/M_]XA20`H(D@L>``$3J[^.")M__1.KOX^+RW_]$ZZ`=Q83TJMB
XM__QG"B\M__Q.N@%<6$]*K?_&9R@@;?_&+'@`!$ZN_HPK0/^X2H!G"B)`<"Q.#
XMKO\N8.(O+?_&3KH!+EA/2JW_RF<H(&W_RBQX``1.KOZ,*T#_N$J`9PHB0'`L*
XM3J[_+F#B+RW_RDZZ`0!83TJL`')G#"(L`'(L;`&H3J[_W'``3-]([$Y=3G5.^
XM50``+PLF;P`,2JL`&F<$<`%@)G`!)T``&G!_+P`O`$AX)19"ITZZ`TI/[P`0G
XM)T``'F8$<`%@`G``)E].74YU+PLF;P`(2JL`&F8$<`%@&D*K`!I*JP`>9PHO:
XM*P`>3KH'XEA/0JL`'G``)E].=4YU2.<#,B9O`!@N+P`<</\L>``$3J[^MBP`D
XM#`8`_V8$<`!@2'`B(CP``0`!3J[_.B1`(`IF#'``$`9.KOZP<`!@*B5+``H@^
XM!Q5```D5?``$``A"*@`.%48`#Y/)3J[^VB5``!`B2DZN_IX@"DS?3,!.=4CGB
XM`!(F;P`,(DLL>``$3J[^F'``$"L`#TZN_K`B2W`B3J[_+DS?2`!.=4Y5__Q("
XMYP$2)F\`&"XO`!P@!R(\``$``2QX``1.KO\Z*T#__$J`9Q8@0!%\``4`"$(H5
XM``DB!S%!`!(A2P`.3-](@$Y=3G5(YP`2)F\`#!=\`/\`"#!\__\G2``4)T@`I
XM&'``,"L`$B)++'@`!$ZN_RY,WT@`3G5.5?_X2.<!`CXO`!I"K?_\<!!R`2QX]
XM``1.KO\Z<@`R!R\!2'H`:B\`*T#_^$ZZ#S1/[P`,+'@`!$ZN_WPB;?_X3J[^%
XM>DJ`9A1"IR\M__A.NOZ@4$\K0/_\2H!F#B)M__AP$"QX``1.KO\N+'@`!$ZN>
XM_W8@+?_\3-]`@$Y=3G5$3D54+E!/4E0N6%A86%@`1$Y%5"Y03U)4+B5L9``P+
XM`$1.150N54Y)5"X``"5S)7,``$CG`#(F;P`0)&L`"B`+9RPL>``$3J[_?"\+M
XM80``NEA/2H!F]"\+3KK^B%A/+'@`!$ZN_W8B2G`03J[_+DS?3`!.=4Y5__A(?
XMYS`RE<H@"F8^(&T`""QX``1.KOZ,)D`@2R`(9RHP*P`<#$``(68.0J<O"V$`?
XM!NQ03R1`8`87?``!`!\B2RQX``1.KOZ&8+X@;0`(T/P`&")M``@B:0`4L\AG2
XM('``(&T`"!`H``]R`20!X:)V`!8`YZ$@`BQX``1.KO[.(`IG!"!*8`*1R"`(/
XM3-],#$Y=3G5.5?_\2.<P$B9O`!P@2RQX``1.KOZ,*T#__$J`9PX@0!%\``$`=
XM'R)`3J[^AD'K`!@B:P`4L\AG&'``$"L`#W(!)`'AHG8`%@#GH2`"3J[^SDJMJ
XM__Q6P$0`2(!(P$S?2`Q.74YU3E4``$Y=3G5.5?_,2.<'$B9O`%`^+P!6'"\`,
XM6QHO`%\@"V8$1_K^C"\+2&W_T&$`!?903RM`_\QR?KH!8P(J`0P%`(%D`GJ!`
XMO`%C`BP!#`8`@60"?($@0$JH`")G7#M\`"#_['(`,@<K0?_H*T#__"M`_]X;%
XM1O_9<@`2!2M!_]H@:``B0^W_T"QX``1.KOZ22&W_T&$`!-)83Q`M_^]*`&88>
XM("W_Z"!M_\PQ0``T+PAA``9(("W_S&`*+RW_S&$`!A9P`$SM2.#_N$Y=3G5.!
XM5?_T2.<W,B9O`#0N+P`\?`!**P`V9P9P_V```41*AV<``1)!ZP`F+'@`!$ZNK
XM_OXD0"!*(`AF$"!+3J[^C"1`($H@"&<``.YP![`J``AF+DJK`#QG!%.K`#Q*Q
XMJ@`D9Q`B:@`H("H`)"QX``1.KO\N(DIP,"QX``1.KO\N8*`P*@`<#$``)&<B$
XM#$``(V<(#$``(F8``(P7?``!`#8B2BQX``1.KOZ&8`#_=B`J`"`B*@`DDH`J'
XM`;J';BH@:@`HT<`@!2)M``Q@`A+84X!D^IZ%W(7;K0`,(DHL>``$3J[^AF``F
XM_SP@:@`HT<`@!R)M``Q@`A+84X!D^MR'WZH`('X`+'@`!$ZN_WP5?``%``A!%
XMZP`4(DI.KO\03J[_=F``_P`5?``!`!\B2BQX``1.KOZ&8`#^["\+80`$]%A//
XM2BL`-F<<<``0*P`/<@$D`>&B=@`6`.>A(`(L>``$3J[^SB`&3-],[$Y=3G5(H
XMYP<R)F\`'"1O`"`N+P`D?`!**P`V9P1P_V`P2H=G*B!++'@`!$ZN_H`O!R\*T
XM+PMA`/YF3^\`#"H`W(5*A6L*U<6>A4HK`#9GTB`&3-],X$YU2.<!$"9O``PN(
XM+P`0)T<`.$S?"(!.=4Y5_\A(YP,R)F\`5"1O`%@N+P!<+`=*JP`X9WI"IR\+:
XM80`"[%!/2H!K:'`P(CP``0`!+'@`!$ZN_SH@0#%\`"0`''(`,BL`-"%!`!@A3
XM2P`L(4L`#BM`_\P@!W(!3J[_.B!M_\PA0``H(4<`)"`'(DHL:``H8`(<V5.`<
XM9/H@:P`B(FW_S"QX``1.KOZ24JL`/&!&?/]@0CM\`"3_['``,"L`-"M`_^@K7
XM2__\*TO_WBM*__@K1__T(&L`(D/M_]`L>``$3J[^DDAM_]!A``'^6$]*+?_OZ
XM9P)\_R\+80`#@"`&3.U,P/^T3EU.=4Y5_]!(YP`2)F\`0#M\`"/_['``,"L`F
XM-"M`_^@K2__\*TO_WB!K`")#[?_0+'@`!$ZN_I)(;?_080`!IBZ+80`#,DSM^
XM2`#_R$Y=3G5.5?_02.<'$B9O`$P>+P!3/"\`5AHO`%L[?``F_^QP`#`K`#0K/
XM0/_H*TO__"M+_]YP`#`&2$!"0'(`$@7A@8"!<@`2!X"!*T#_^"!K`")#[?_0A
XM+'@`!$ZN_I)(;?_080`!-"Z+80`"P$SM2.#_O$Y=3G5.5?^<2.<`$B9O`'0@<
XM"V8$1_KZ6B\+2'KZ5DAZ^EY(;?^E3KH)#D_O`!!#[?^E+'@`!$ZN_GHK0/^<L
XM9T)"IT*G3KKX?CM\`"7_[$*M_^A"K?_\*T#_WBM`_Z`@;?^<0^W_T"QX``1.O
XMKOZ22&W_T&$``+(NK?^@3KKXN$_O``Q*K?^<5L!$`$B`2,!,WT@`3EU.=4Y51
XM_\Q(YP`2)F\`1#M\`"+_['``,"L`-"M`_^@K2__\*TO_WB!K`")#[?_0+'@`.
XM!$ZN_I)2JP`\0JL`.$AM_]`O"V$``)!03T'K`"8L>``$3J[^_BM`_\Q*@&8.B
XM($M.KOZ,*T#_S$J`9Q8@;?_,$7P``0`?(D@L>``$3J[^AF#(+PMA``%Z3.U($
XM`/_$3EU.=4CG(!(F;P`0<`>P*P`(9QP@:P`.<``0*``/<@$D`>&B(`(L>``$)
XM3J[^PF#<+'@`!$ZN_WPB2TZN_P1.KO]V3-](!$YU3E7_^DCG`3(F;P`>?@`@]
XM*P`\L*L`.&]6($LL>``$3J[^@"!+3J[^C"1`<`>P*@`(9C!*1V8&?@`>*@`?R
XMM>T`#&<:2JH`)&<,(FH`*"`J`"1.KO\N(DIP,$ZN_RY3JP`\8*Q!ZP`F(DI.,
XMKO\*8*`@!TC`3-],@$Y=3G5.5?_02.<`,B9O`$0D;P!(<$`B/``!``$L>``$*
XM3J[_.B!`$7P`!``(*T#__'#_3J[^MB!M__P10``/D\E.KO[:(&W__"%``!!#'
XMZ``4+PE.N@A((&W__-#\`"8NB$ZZ"#I83R`K`!@@;?_\,4``-"=(`"P@"F<F/
XM+PI(>O@42'KX'$AM_]%.N@;,3^\`$$/M_]$L>``$3J[^>B=```X@;?_\(6L`O
XM#@`B(`A,WTP`3EU.=4CG`!(F;P`,<``0*P`/+'@`!$ZN_K`B2W!`3J[_+DS?<
XM2`!.=4CG,!(F;P`40>L`&")K`!2SR&8,0>L`*B)K`":SR&<<<``0*P`/<@$D/
XM`>&B=@`6`.>A(`(L>``$3J[^SDS?2`Q.=0``3E7__$CG(3`F;P`<)&\`("XO+
XM`"0K:P`F__Q*AV<L2JP`F&=L("P`F"(`0D%(02!M__PQ00`*)#P``/__P((Q'
XM0``.D\DI20"88$8@;?_\#&@!(``(9CH,:`$B``QF,DJL`)AF%G``,"@`"DA`^
XM0D!R`#(H``Z`@2E``)@@"D)`2$`Q0``*(`H"@```__\Q0``.3-\,A$Y=3G5.M
XM=4YU3E7_Q$CG)S`F;P!<)&\`8'X`?`!Z`'``&WP`(/_[<@`K0?_V=/\K0O_R!
XM0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,2A-G0G``$!-R&%U!:SBP>Q`(9O9./
XM^Q`$`"-@```@`"!@```6`"M@```,`"U@```"?@%@#GP!8`IZ`6`&&WP``?_\V
XM4HM@NA`3<C"P`68&4HL;0?_[<"JP$V80(%)#Z``$)(DK4/_V4HM@#DAM__8O!
XM"TZZ!(103]?`$!-R+K`!9B92BW`JL!-F$"!20^@`!"2)*U#_\E*+8`Y(;?_RL
XM+PM.N@164$_7P!`3<FRP`68*&WP``?_Q4HM@"')HL`%F`E*+$!MR`!(`&T#_:
XM\'`P74!K``)4LGL`"&;T3OL`!`!C8``"*@!S8``!Z`!88``!?@!X8``!>`!PM
XM8``!7@!O8``!#`!U8```X@!D8````DHM__%G#"!20^@`!"2)(!!@"B!20^@`W
XM!"2)(!`K0/_L;`IR`42M_^PK0?_H2JW_Z&<$<"U@"DH&9P1P*V`"<"`;0/_01
XM<``0!B(M_^B"@'``$`6"@&<(4JW_S%*M_^0O+?_L+RW_S$ZZ`N903RM`_\@@O
XM+?_R2H!J!G(!*T'_\B`M_\@B+?_RDH!([0`"_\1O+B!M_\PB2-/!8`(2V%.`:
XM9/IP`!`M__LB+?_$(&W_S&`"$,!3@63Z("W_\BM`_\C1K?_D0>W_T"M(_\Q*I
XM!V<``5`;?``@__M@``%&2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`"
XM_^Q@`/]B2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q*+?_\9Q(@-
XM;?_,$/P`,'(!*T'_Y"M(_\PO`"\M_\Q.N@)`4$\K0/_(8`#_*!M\`##_^R`MZ
XM__)*@&H&<`@K0/_R2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q*?
XM+?_\9Q8@;?_,$/P`,!#\`'AR`BM!_^0K2/_,+P`O+?_,3KH"'%!/*T#_R'!83
XML"W_\&8`_KY(;?_03KH!4%A/8`#^L"!20^@`!"2)(E`K2?_,9@A!^@#<*TC_V
XMS"!M_\Q*&&;\4XB1[?_,*TC_Y"`M__)*@&LJL<!O)BM`_^1@('`!*T#_Y"!2$
XM0^@`!"2)(!`;0/_00BW_T6`&<`!@``",("W_Y"(M__:R@&P(=``K0O_V8`21<
XMK?_V2@=G-E.M_^1M&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XE.M__9M2'``3
XM$"W_^R\`(&T`$$Z06$]@Z%.M__9M$G``$"W_^R\`(&T`$$Z06$]@Z%.M_^1M4
XM&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XB`+3-\,Y$Y=3G4``$Y5__9(YP$P%
XM)F\`'B1O`"(K;0`0__8>&DH'9S1P);X`9B*P$F8$4HI@&B\+2&W_]B\*80#[_
XMS$_O``PK0/_Z9P0D0&#2<``0!R\`3I-83V#&3-\,@$Y=3G5(YR`P)F\`$"1+7
XM2A)G)'``$!)![`"="#```0@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,4
XM!$YU``````````!P82`O``@@;P`$3E7_]")/<@I.N@%<!D$`,!+!2H!F\"`)]
XM$.&_R6;Z0A"0CTY=3G4``"`O``@@;P`$3E7_]")/(@`"00`'!D$`,!+!YHAFS
XM\"`)$.&_R6;Z0A"0CTY=3G4``#`Q,C,T-38W.#EA8F-D968@+P`((&\`!$/O/
XM``0R``)!``\2^Q#<Z(AF\B`)(@]8@1#ALHEF^D(0D(%.=2!O``0B2'(`<``O\
XM`@P0`"MG!@P0`"UF`E)($!@$```P;1(,```);@PD`>6!TH+2@=*`8.8,$0`M_
XM9@)$@20?(`A3@"!O``@@@9")3G4O!RXO``A2K`&D(`<@;`&@$,`I2`&@+A]..
XM=4Y5``!(YP`P)F\`$"1O`!1"K`&D*4L!H$AM`!`O"DAZ_\9.NOX^(&P!H$(0S
XM("P!I$SM#`#_^$Y=3G5*@&H``!Y$@$J!:@``#$2!80``($2!3G5A```81(!$!
XM@4YU2H%J```,1(%A```&1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"B
XM2$`T`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&944,,00@`9```!NF964,,=
XM02``9```!N6954-*06L```;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!(
XMD()D```(4T/0@63^<@`R`TA#Y[A(0,%!)A\D'TYU(&\`!")(<@!P`!`8!```X
XM,&TH#```"6\<!```$6T<#```!6\,!```(&T0#```!6X*!@``"NF!TH!@T"`(=
XD4X`@;P`(((&0B4YU(&\`!""(6)!"J``$(4@`"$YU``````/RA
X``
Xend
Xsize 9396
END_OF_FILE
if test 13190 -ne `wc -c <'netkeys.uu'`; then
    echo shar: \"'netkeys.uu'\" unpacked with wrong size!
fi
# end of 'netkeys.uu'
fi
echo shar: End of archive 2 \(of 2\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked both archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.