rsalz@uunet.uu.net (Rich Salz) (03/23/91)
Submitted-by: sudji@indo.intel.com (Sudji Husodo) Posting-number: Volume 24, Issue 78 Archive-name: sysVr4386slip/part01 [ I repacked this, but have not tested it. It might run on other SysVr4 systems without too many changes. --r$ ] This package contains a SLIP driver and related utilities for Unix System V/386 Release 4.0. SLIP is a protocol that lets you run the IP (and related) network protocols over a standard serial line. The utility programs include: +slattach, to link the SLIP streams driver to the serial port, and the IP driver to the SLIP driver. +slhangup and slhangupd, to process hangup messages. +dialslip, to allow hosts to dial in and start SLIP sessions. #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # Contents: PACKNOTES README MANIFEST dialslip driver driver/ID # driver/io driver/io/slip.c driver/sys driver/v2.ip.fix # driver/v2.ip.fix/Driver.UU.02 man man/man1 man/man7 utils # Wrapped by rsalz@litchi.bbn.com on Fri Mar 22 11:57:10 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH echo If this archive is complete, you will see the following message: echo ' "shar: End of archive 1 (of 4)."' if test -f 'PACKNOTES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'PACKNOTES'\" else echo shar: Extracting \"'PACKNOTES'\" \(242 characters\) sed "s/^X//" >'PACKNOTES' <<'END_OF_FILE' X X# "driver/v2.ip.fix//Driver.o.UU" was split into 2 parts; to create it, do X cat driver/v2.ip.fix//Driver.UU.0[1-9] >driver/v2.ip.fix//Driver.o.UU X# Run uudecode to create "driver/v2.ip.fix//Driver.o": X uudecode driver/v2.ip.fix//Driver.o.UU END_OF_FILE if test 242 -ne `wc -c <'PACKNOTES'`; then echo shar: \"'PACKNOTES'\" unpacked with wrong size! fi # end of 'PACKNOTES' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(3558 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X XSLIP (Serial Link Internet Protocol) X XTo build and install the slip driver, the slip utilities, and the slip login X(dialslip) utilities, type the following command: X X make X X XSLIP DRIVER X XIf you are using Unix System V Release 4.0.2 or below, you will need to copy Xv2.ip.fix/Driver.o to /etc/conf/pack.d/ip/Driver.o before you build the Xkernel. The ip driver of Unix System V R 4.0.2 has a bug for a point to point Xconnection which panics the system. The v2.ip.fix/Driver.o fixes the problem. XSLIP (Serial Link Internet Protocol) X XIf you need to configure the second serial port, because your first serial Xport is used by other device, refer to Intel's Unix System V.4.0 Administra- Xtors Guide. X XOnce the new ip driver and the slip have been installed, and your serial port Xhas been set up, you can build the kernel using the idbuild command. Don't Xforget to reboot your system after the idbuild command completes succesfully Xfor the new kernel to take into effect. X X XSLIP UTILITIES X Xslattach X XThe slattach command links the slip streams driver to the serial port and links Xthe ip driver to the slip driver. X XThe syntax of slattach is as following: X X slattach [-i] nodename interface_name XOR slattach -d [-i] devname interface_name [ baudrate ] XOR slattach - interface_name X XThe first option uses the Basic Networking Utilities (Advanced System XAdministration Volume 1 Chapter 7-15). Once the administration files Xare set up, you can use the remote node name to attach slip directly Xor through your modem. Example: X slattach venus sl0 X XThe "-d" does not use BNU but directly open the next argument which is Xthe serial device and link it to the slip driver. The baudrate sets up Xthe line speed of the serial line; the default baudrate is 9600. X XTo start the slip interface using the first serial port at 1200 baud Xexecute the below command: X X slattach -d /dev/tty00 sl0 1200 X XIf the slip hangup daemon (slhangupd) is run, slattach by default is set Xto receive hangup signal (SIGHUP) sent by the slip driver through slhangupd. XThe -i option ignores any hangup signal. X X Xifconfig X XThis utility is included in the standard base Unix System V Release 4.0 Xproduct. Ifconfig is used to configure your system to the remote slip node. X X ifconfig interface_name source destination up X X Xslhangupd X XSlhangup (slip hangup daemon) is a daemon used to receive messages sent by Xthe slip driver. Whenever the slip driver receives a M_HANGUP message from Xa particular line, the driver sends sends the process id of the controlling Xslattach process to slhangupd. Slhangup then will send a SIGHUP (hangup Xsignal) to the pid received from the slip driver. X XThere is no restriction of the execution order of slattach and slhangupd. X X Xsldetach X Xsldetach removes the serial line that is being used for slip connection. X X sldetach interface_name X X XDIALSLIP (slip login utilities) X XTo install dialslip: X X1. Set up the /etc/slip.hosts file. This file maps login names to IP X addresses, which # comments, as usual. X X2. Set up the /etc/slip.config file. This file defines the IP address X of the local system on each interface. Set them all the same. There X can be as many simultaneous logins as lines in this file (not counting X comments). X X3. Run "mkslipuser". This builds a file similar in nature to utmp that X keeps track of who's logged in and what interface they're using. X This command should also be run at boot time to clean things up. X X4. Set up accounts for each system dialing in with "slip" as the shell X with its setuid bit set to root. X END_OF_FILE if test 3558 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(1363 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X---------------------------------------------------------- XPACKNOTES 1 XREADME 1 XMANIFEST 1 XMakefile 4 Xdialslip 1 Xdialslip/Makefile 4 Xdialslip/README.dialslip 4 Xdialslip/dslipuser.c 4 Xdialslip/mkslipuser.c 3 Xdialslip/slip.c 3 Xdialslip/slip.config 4 Xdialslip/slip.h 3 Xdialslip/slip.hosts 4 Xdriver 1 Xdriver/ID 1 Xdriver/ID/Master 2 Xdriver/ID/Node 4 Xdriver/ID/Space.c 2 Xdriver/ID/System 4 Xdriver/io 1 Xdriver/io/slip.c 1 Xdriver/io/slip.mk 4 Xdriver/sys 1 Xdriver/sys/slip.h 4 Xdriver/v2.ip.fix 1 Xdriver/v2.ip.fix/Driver.UU.01 2 Xdriver/v2.ip.fix/Driver.UU.02 1 Xman 1 Xman/man1 1 Xman/man1/dslipuser.1 3 Xman/man1/mkslipuser.1 3 Xman/man1/slattach.1 3 Xman/man1/sldetach.1 3 Xman/man1/slhangupd.1 4 Xman/man1/slip.1 3 Xman/man7 1 Xman/man7/slip.7 3 Xutils 1 Xutils/Makefile 4 Xutils/slattach.c 3 Xutils/sldetach 4 Xutils/slhangupd.c 3 END_OF_FILE if test 1363 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test ! -d 'dialslip' ; then echo shar: Creating directory \"'dialslip'\" mkdir 'dialslip' fi if test ! -d 'driver' ; then echo shar: Creating directory \"'driver'\" mkdir 'driver' fi if test ! -d 'driver/ID' ; then echo shar: Creating directory \"'driver/ID'\" mkdir 'driver/ID' fi if test ! -d 'driver/io' ; then echo shar: Creating directory \"'driver/io'\" mkdir 'driver/io' fi if test -f 'driver/io/slip.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'driver/io/slip.c'\" else echo shar: Extracting \"'driver/io/slip.c'\" \(21755 characters\) sed "s/^X//" >'driver/io/slip.c' <<'END_OF_FILE' X/* X * Copyright 1991, Intel Corporation X * All rights reserved. X * X * Permission to use, copy, modify, and distribute this software and X * its documentation for any purpose and without fee is hereby granted, X * provided that the above copyright notice appear in all copies and X * that both the copyright notice appear in all copies and that both X * the copyright notice and this permission notice appear in X * supporting documentation, and that the name of Intel Corporation X * not be used in advertising or publicity pertaining to distribution X * of the software without specific, written prior premission. X * X * COMPANY AND/OR INTEL DISCLAIM ALL WARRANTIES WITH REGARD TO X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF X * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO X * EVENT SHALL COMPANY NOR INTEL BE LIABLE FOR ANY SPECIAL, X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN X * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE X * OF THIS SOFTWARE. X */ X X/* X * Serial Line Internet Protocol (SLIP) streams multiplexor driver for X * Intel Unix System V/386 Release 4.0. X * X * The upper streams is supposed to be linked to the ip driver (/dev/ip) X * and optionally linked to the slip hangup daemon. The lower streams can X * linked to any number of serial driver. X * X * The slattach command builds the ip to slip to serial device links and X * The slhangupd command is a daemon for receiving M_HANGUP message from X * the serial driver. X * X * The packet framing protocol code, in the upper write and the lower X * read service routine (slip_uwsrv and slip_lrsrv) is based from X * tty_slip.c written by Rayan Zachariassen <rayan@ai.toronto.edu> and X * Doug Kingston <dpk@morgan.com>. X * X * Author: X * Sudji Husodo <sudji@indo.intel.com> 1/9/91 X */ X X#include <sys/types.h> X#include <sys/kmem.h> X#include <sys/stream.h> X#include <sys/stropts.h> X#include <sys/dlpi.h> X#include <sys/syslog.h> X#include <sys/strlog.h> X#include <sys/socket.h> X#include <sys/sockio.h> X#include <sys/log.h> X#include <sys/errno.h> X#include <sys/ioctl.h> X#include <sys/param.h> X#include <sys/ddi.h> X X#include <net/if.h> X#include <netinet/in.h> X#include <netinet/in_systm.h> X#include <netinet/ip.h> X#include <sys/slip.h> X X#define DL_PRIM_SIZE sizeof (union DL_primitives) X Xint slip_devflag = 0; /* V4.0 style driver */ X X#ifndef DEBUG Xstatic X#endif Xint slip_open(), slip_close(), slip_uwput(), slip_uwsrv(), X slip_lwput(), slip_lwsrv(), slip_lrput(), slip_lrsrv(); X Xstatic struct module_info minfo[5] = { X SLIPM_ID, "slip", 0, 8192, 16384, 4096, X SLIPM_ID, "slip", 0, 8192, 16384, 4096, X SLIPM_ID, "slip", 0, 8192, 16384, 4096, X SLIPM_ID, "slip", 0, 8192, 16384, 4096, X SLIPM_ID, "slip", 0, 8192, 16384, 4096, X}; X Xstatic struct qinit urinit = { X NULL, NULL, slip_open, slip_close, NULL, &minfo[0], NULL }; X Xstatic struct qinit uwinit = { X slip_uwput, slip_uwsrv, slip_open, slip_close, NULL, &minfo[1], NULL }; X Xstatic struct qinit lrinit = { X slip_lrput, slip_lrsrv, slip_open, slip_close, NULL, &minfo[3], NULL }; X Xstatic struct qinit lwinit = { X slip_lwput, slip_lwsrv, slip_open, slip_close, NULL, &minfo[4], NULL }; X Xstruct streamtab slip_info = { X &urinit, &uwinit, &lrinit, &lwinit }; X Xslip_t *slip_hup = (slip_t *) 0; X Xextern struct ifstats *ifstats; Xextern u_int slip_num; Xextern slip_t slip_data[]; X X/* X * slip_open X */ X X#ifndef DEBUG Xstatic X#endif Xslip_open (q, devp, flag, sflag, credp) Xqueue_t *q; Xdev_t *devp; Xint flag; Xint sflag; Xstruct cred *credp; X{ X register slip_t *p_slip; X dev_t dev; X int oldpri; X mblk_t *bp; X major_t major = getmajor (*devp); X minor_t minor = getminor (*devp); X X STRLOG (SLIPM_ID,0,0,SL_TRACE,"slip_open: major %d minor %d",major,minor); X X /* find an unused entry in slip_data */ X X if (sflag == CLONEOPEN) { X for (dev=0, p_slip=&slip_data[0]; dev<slip_num; dev++, p_slip++) X if (!p_slip->buf) X break; X minor = (minor_t) dev; X } X X /* if there's no more free entry, return No Space error code */ X X if (minor >= slip_num) { X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip open: can't allocate device"); X return ENXIO; X } X X /* initialized slip information */ X X oldpri = splstr (); X p_slip->state = DL_UNBOUND; X p_slip->qtop = q; X p_slip->qbot = NULL; X p_slip->buf = (u_char *) kmem_alloc (SLIPMTU, KM_SLEEP); X p_slip->qt_blocked = 0; X drv_getparm (PPID, &p_slip->pid); /* keep process id */ X X p_slip->escape = p_slip->overrun = p_slip->inlen = 0; X p_slip->flags = IFF_UP | IFF_POINTOPOINT; X p_slip->uname[0] = '\0'; X X /* initialized interface and its statistics */ X X p_slip->stats.ifs_name = (char *) p_slip->uname; X p_slip->stats.ifs_unit = 0; X p_slip->stats.ifs_active = 0; X p_slip->stats.ifs_mtu = SLIPMTU; X p_slip->stats.ifs_ipackets = p_slip->stats.ifs_opackets = 0; X p_slip->stats.ifs_ierrors = p_slip->stats.ifs_oerrors = 0; X p_slip->stats.ifs_collisions = 0; X splx (oldpri); X X /* initialize read and write queue pointers to private data */ X X q->q_ptr = (caddr_t) p_slip; X WR(q)->q_ptr = (caddr_t) p_slip; X X /* set up the correct stream head flow control parameters */ X X if (bp = allocb (sizeof (struct stroptions), BPRI_MED)) { X struct stroptions *sop = (struct stroptions *) bp->b_rptr; X bp->b_datap->db_type = M_SETOPTS; X bp->b_wptr += sizeof (struct stroptions); X sop->so_flags = SO_HIWAT | SO_LOWAT; X sop->so_hiwat = minfo [2].mi_hiwat; X sop->so_lowat = minfo [2].mi_lowat; X putnext (q, bp); X } X *devp = makedevice (major, minor); X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip open: device %d coming up", minor); X return (0); X} X X/* X * slip_close () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_close (q) Xqueue_t *q; X{ X slip_t *p_slip; X dev_t dev; X int oldpri; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_close: going down ..."); X p_slip = (slip_t *) q->q_ptr; X oldpri = splstr (); X X if (p_slip->buf) X kmem_free (p_slip->buf, SLIPMTU); X X p_slip->state = DL_UNATTACHED; X p_slip->buf = 0; X p_slip->inlen = 0; X p_slip->qtop = 0; X p_slip->pid = 0; X X ifstats = p_slip->stats.ifs_next; /* reset ifstats pointers */ X splx (oldpri); X} X X/* X * slip_ioctl () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_ioctl (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X struct iocblk *iocp; X struct ifreq *ifr; X slip_t *p_slip; X int oldpri; X struct linkblk *lp; X slip_t *pp; X u_char *p; X int n; X X p_slip = (slip_t *) q->q_ptr; X iocp = (struct iocblk *) mp->b_rptr; X X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: enter: case ('%c',%d)", 0x00FF&(iocp->ioc_cmd>>8), 0x00FF&iocp->ioc_cmd); X oldpri = splstr (); X X switch (iocp->ioc_cmd) { X X case REG_SLHUP: X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: REG_SLHUP"); X if (slip_hup) { X splx (oldpri); X mp->b_datap->db_type = M_IOCNAK; X qreply (q, mp); X return (0); X } X else X slip_hup = p_slip; X break; X X case UNREG_SLHUP: X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: UNREG_SLHUP"); X slip_hup = 0; X break; X X case I_LINK: X iocp->ioc_error = iocp->ioc_rval = iocp->ioc_count = 0; X X lp = (struct linkblk *) mp->b_cont->b_rptr; X p_slip->qbot = lp->l_qbot; X p_slip->qbot->q_ptr = (char *) p_slip; X OTHERQ (p_slip->qbot)->q_ptr = (char *) p_slip; X break; X X case I_UNLINK: X iocp->ioc_error = iocp->ioc_rval = iocp->ioc_count = 0; X p_slip->qbot = NULL; X break; X X case SIOCSIFNAME: X ifr = (struct ifreq *) mp->b_cont->b_rptr; X X /* copy interface name to local slip structure */ X X /* X * interface name (ifr->ifr_name) contains the name and unit, e.g. X * "sl0", "sl12", "emd0", "wd1", etc. Store the name in slip->uname X * and unit in slip->unit. If unit is not supplied, e.g. "slip", X * then unit number is assumed to be zero. X */ X X strncpy (p_slip->uname, ifr->ifr_name, IFNAMSIZ); /* copy name */ X n = 0; X X /* starting from the last char, find the first non-digit char */ X X p = p_slip->uname + strlen(p_slip->uname) - 1; X while ('0' <= *p && *p <= '9') X p--; X X /* calculate integer, replace them with nulls */ X X while (*++p) { X n = 10*n + (*p-'0'); X *p = '\0'; X } X p_slip->stats.ifs_unit = n; /* set ifs unit number */ X X /* search for matching interface name and unit */ X X for (n=0, pp=&slip_data[0]; n<slip_num; n++, pp++) X if (pp != p_slip && pp->buf && !strcmp (pp->uname,p_slip->uname) && X pp->stats.ifs_unit == p_slip->stats.ifs_unit) X break; X X if (n < slip_num) { /* found matching ifname */ X splx (oldpri); X mp->b_datap->db_type = M_IOCNAK; /* Negative Ack reply */ X qreply (q, mp); X return (0); X } X else { /* ifname is unique */ X p_slip->stats.ifs_next = ifstats; /* set ifstats pointers */ X ifstats = &p_slip->stats; /* used for statistics */ X } /* by netstat command */ X break; X X case SIOCGIFFLAGS: X ((struct iocblk_in *)iocp)->ioc_ifflags = p_slip->flags; X break; X X case SIOCSIFFLAGS: X p_slip->flags = ((struct iocblk_in *)iocp)->ioc_ifflags; X break; X X case SIOCSIFADDR: X p_slip->flags |= IFF_RUNNING; X ((struct iocblk_in *)iocp)->ioc_ifflags |= IFF_RUNNING; X break; X X default: X break; X } X splx (oldpri); X mp->b_datap->db_type = M_IOCACK; X qreply (q, mp); X} X X/* X * slip_uwput () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_uwput (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_uwput: case 0x%2.2x", mp->b_datap->db_type); X X switch (mp->b_datap->db_type) { X X case M_FLUSH: X if (*mp->b_rptr & FLUSHW) { X flushq(q, FLUSHALL); X *mp->b_rptr &= ~FLUSHW; X } X if (*mp->b_rptr & FLUSHR) X qreply(q, mp); X else X freemsg(mp); X break; X X case M_IOCTL: X slip_ioctl (q, mp); X break; X X case M_PROTO: X case M_PCPROTO: X slip_dl_cmds (q, mp); X break; X X default: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwput: unknown message type, passing message to the next queue"); X putnext (((slip_t *)q->q_ptr)->qbot, mp); X break; X } X} X X/* X * slip_uwsrv () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_uwsrv (q) Xregister queue_t *q; X{ X register mblk_t *mp, *mpd, *mp2; X register u_char *cp; X register int pktlen, num; X register slip_t *p_slip; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_uwsrv: enter"); X X while ((mp = getq(q)) != NULL) { X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: got message from q"); X p_slip = (slip_t *) q->q_ptr; X X X if (!canput (p_slip->qbot)) { X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: can't put message to qbot"); X putbq (q, mp); X p_slip->qt_blocked = 1; X return; X } X pktlen = 0; X X /* X * count the number of special characters (END & ESC) X */ X X num = 2; /* END char is put at the start and end of packet */ X X for (mpd = mp->b_cont; mpd != 0; mpd = mpd->b_cont) { X pktlen += (mpd->b_wptr - mpd->b_rptr); X X for (cp = mpd->b_rptr; cp < mpd->b_wptr; cp++) { X if (*cp == END || *cp == ESC) X num++; X } X } X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_uwsrv: # of bytes in packet = %d; # of special character in packet: %d", pktlen, num); X X /* X * allocate message block to be sent down stream X */ X X if ((mp2 = allocb (pktlen + num, BPRI_MED)) == NULL) { X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: can't allocate message block - dropping outgoing message"); X p_slip->stats.ifs_oerrors++; X freemsg (mp); X return; X } X /* X * frame packet, escape special characters ESC and END X */ X X *mp2->b_wptr++ = END; X X for (mpd = mp->b_cont; mpd != 0; mpd = mpd->b_cont) { X for (cp = mpd->b_rptr; cp < mpd->b_wptr; cp++) { X if (*cp == END) { X *mp2->b_wptr++ = ESC; X *mp2->b_wptr++ = ESC_END; X } X else if (*cp == ESC) { X *mp2->b_wptr++ = ESC; X *mp2->b_wptr++ = ESC_ESC; X } X else X *mp2->b_wptr++ = *cp; X } X } X *mp2->b_wptr++ = END; X X mp2->b_datap->db_type = M_DATA; X p_slip->stats.ifs_opackets++; X freemsg (mp); X slip_lwput (p_slip->qbot, mp2); X } X} X X/* X * slip_lwput X */ X X#ifndef DEBUG Xstatic X#endif Xslip_lwput (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: enter %x, %x",q , mp); X X if (canput(q->q_next)) { X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: putnext"); X putnext(q, mp); X } X else { X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: putq"); X putq(q, mp); X } X} X X/* X * slip_lwsrv (q) X */ X X#ifndef DEBUG Xstatic X#endif Xslip_lwsrv (q) Xqueue_t *q; X{ X mblk_t *mp; X slip_t *p_slip; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: enter"); X X while (mp = getq(q)) { X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: getq (%x) = %x",q, mp); X if (canput(q->q_next)) { X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: putnext"); X putnext(q, mp); X } X else { X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: putbq"); X putbq(q, mp); X return; X } X } X p_slip = (slip_t *) q->q_ptr; X X if (p_slip->qt_blocked) { X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_lwsrv: slip_uwsrv is blocked, enable it"); X /* X * qtop is the upper read q and X * we want to enable the upper write q X */ X qenable (WR(p_slip->qtop)); X p_slip->qt_blocked = 0; X } X} X X/* X * slip_lrput () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_lrput (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X slip_t *p_slip; X mblk_t *resp; X int device; X int oldpri; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrput: enter: case 0x%2.2x", mp->b_datap->db_type); X p_slip = (slip_t *) q->q_ptr; X X switch (mp->b_datap->db_type) { X X case M_DATA: X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_lrput: putq (%x, %x)", q, mp); X putq (q, mp); X break; X X case M_FLUSH: X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_lrput: M_FLUSH type = %x",*mp->b_rptr); X if (*mp->b_rptr & FLUSHR) X flushq(q, FLUSHALL); X if (*mp->b_rptr & FLUSHW) { X *mp->b_rptr &= ~FLUSHR; X flushq(WR(q), FLUSHALL); X qreply(q, mp); X } else X freemsg(mp); X return; X X case M_HANGUP: X oldpri = splstr (); X /* X * if pid is set, ignore message X */ X if (p_slip->pid == 0) X freemsg (mp); X /* X * else if slip hangup daemon exists send pid to the daemon X */ X else if (slip_hup && (resp = allocb (sizeof(pid_t),BPRI_MED))) { X STRLOG (SLIPM_ID,1,0,SL_TRACE, X "slip_lrput: sending pid %d to hangup daemon", p_slip->pid); X *(pid_t *) resp->b_wptr = p_slip->pid; X resp->b_wptr += sizeof (pid_t); X resp->b_datap->db_type = M_PCPROTO; X putnext (slip_hup->qtop, resp); X freemsg (mp); X } X /* X * else pass the message upstream X */ X else X putnext (p_slip->qtop, mp); X X splx (oldpri); X break; X X default: X putnext (p_slip->qtop, mp); X break; X } X} X X/* X * slip_lrsrv () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_lrsrv (q) Xqueue_t *q; X{ X register u_char *cp; X register slip_t *p_slip; X mblk_t *bp, *mp, *mp1, *mp2; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrsrv: enter"); X X while ((mp = getq(q)) != NULL) { X p_slip = (slip_t *) q->q_ptr; X XSTRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrsrv: q=%x, mp=%x;", q, mp); X if (!canput (p_slip->qtop->q_next)) { X putbq (q, mp); X return; X } X p_slip = (slip_t *) q->q_ptr; X X for (bp = mp; bp != 0; bp = bp->b_cont) { X for (cp = bp->b_rptr; cp < bp->b_wptr; cp++) { X if (*cp == END) { X if (p_slip->inlen < sizeof (struct ip)) X ; /* ignore packet */ X X else if (p_slip->overrun) X p_slip->stats.ifs_ierrors++; X X else if ((mp1=allocb (DL_UNITDATA_IND_SIZE,BPRI_MED))==NULL) X p_slip->stats.ifs_ierrors++; X X else if ((mp2 = allocb (p_slip->inlen, BPRI_MED)) == NULL) { X p_slip->stats.ifs_ierrors++; X freemsg (mp1); X } X else { X p_slip->stats.ifs_ipackets++; /* send unit data */ X linkb (mp1, mp2); /* indication up */ X slip_dl_unitdata_ind (q, mp1); /* stream */ X putnext (p_slip->qtop, mp1); X } X p_slip->inlen = 0; /* reset info for */ X p_slip->overrun = 0; /* receiving data */ X p_slip->escape = 0; X } X else if (p_slip->inlen >= SLIPMTU) X p_slip->overrun = 1; X X else if (*cp == ESC) /* if data is ESC */ X p_slip->escape = 1; X X else if (p_slip->escape) { X p_slip->escape = 0; X X if (*cp == ESC_END) X *(p_slip->buf + p_slip->inlen++) = END; X else if (*cp == ESC_ESC) X *(p_slip->buf + p_slip->inlen++) = ESC; X else X *(p_slip->buf + p_slip->inlen++) = *cp; X } X else X *(p_slip->buf + p_slip->inlen++) = *cp; X } X bp->b_rptr = cp; X } X freemsg (mp); X } X} X X/* X * slip_dl_cmds () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_cmds (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X union DL_primitives *p_dl; X mblk_t *response; X slip_t *p_slip; X int oldpri; X X if ((response = allocb (DL_PRIM_SIZE, BPRI_MED)) == NULL) { X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: can't allocate response buffer"); X freemsg (mp); X return; X } X X p_slip = (slip_t *) q->q_ptr; X p_dl = (union DL_primitives *) mp->b_datap->db_base; X X switch (p_dl->dl_primitive) { X X case DL_INFO_REQ: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_INFO_REQ"); X slip_dl_info_ack (q, mp, response); X break; X X case DL_BIND_REQ: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_BIND_REQ"); X if (p_slip->state == DL_UNBOUND) { X oldpri = splstr (); X p_slip->sap = ((dl_bind_req_t *)p_dl)->dl_sap; X p_slip->state = DL_IDLE; X p_slip->stats.ifs_active = 1; X splx (oldpri); X X slip_dl_bind_ack (q, mp, response); X } X else X slip_dl_error_ack (q, mp, response, DL_OUTSTATE); X break; X X case DL_UNBIND_REQ: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_UNBIND_REQ"); X if (p_slip->state == DL_IDLE) { X oldpri = splstr (); X p_slip->state = DL_UNBOUND; X p_slip->stats.ifs_active = 0; X splx (oldpri); X X flushq (q, FLUSHDATA); /* Flush both q's */ X flushq (RD(q), FLUSHDATA); X X slip_dl_ok_ack (q, mp, response); X } X else X slip_dl_error_ack (q, mp, response, DL_OUTSTATE); X X break; X X case DL_UNITDATA_REQ: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_UNITDATA_REQ"); X if (p_slip->state == DL_IDLE) { X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_dl_cmd: putq (%x, %x)", q, mp); X putq (q, mp); X return; X } X else X slip_dl_error_ack (q, mp, response, DL_OUTSTATE); X X break; X X default: X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: default 0x%2.2x",p_dl->dl_primitive); X slip_dl_error_ack (q, mp, response, DL_UNSUPPORTED); X break; X } X freemsg (mp); X putnext (RD(q), response); X} X X/* X * slip_dl_info_ack () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_info_ack (q, mp, response) Xqueue_t *q; Xmblk_t *mp; Xmblk_t *response; X{ X dl_info_ack_t *p_info_ack; X slip_t *p_slip; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_info_ack: enter"); X X p_slip = (slip_t *) q->q_ptr; X X p_info_ack = (dl_info_ack_t *) response->b_wptr; X p_info_ack->dl_primitive = DL_INFO_ACK; X p_info_ack->dl_max_sdu = SLIPMTU; X X p_info_ack->dl_min_sdu = 46; /* ????? */ X p_info_ack->dl_addr_length = 0; /* ????? MAC_ADD_SIZE*/ X p_info_ack->dl_mac_type = DL_CHAR; /* ????? */ X X p_info_ack->dl_current_state = p_slip->state; X p_info_ack->dl_service_mode = DL_CLDLS; /* connecionless DL */ X X p_info_ack->dl_qos_length = 0; /* ???? */ X p_info_ack->dl_qos_offset = 0; /* ???? */ X p_info_ack->dl_qos_range_length = 0; /* ???? */ X p_info_ack->dl_qos_range_offset = 0; /* ???? */ X X p_info_ack->dl_provider_style = DL_STYLE1; X X p_info_ack->dl_addr_offset = 0; /* ???? */ X p_info_ack->dl_growth = 0; X X response->b_datap->db_type = M_PCPROTO; X response->b_wptr += DL_INFO_ACK_SIZE; X} X X/* X * slip_dl_bind_ack () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_bind_ack (q, mp, response) Xqueue_t *q; Xmblk_t *mp; Xmblk_t *response; X{ X dl_bind_req_t *p_dl; X dl_bind_ack_t *p_bind; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_bind_ack: enter"); X X p_dl = (dl_bind_req_t *) mp->b_datap->db_base; X X p_bind = (dl_bind_ack_t *) response->b_wptr; X p_bind->dl_primitive = DL_BIND_ACK; X p_bind->dl_sap = p_dl->dl_sap; X p_bind->dl_addr_length = 0; X p_bind->dl_addr_offset = 0; X X response->b_wptr += DL_BIND_ACK_SIZE; X response->b_datap->db_type = M_PCPROTO; X} X X/* X * slip_dl_ok_ack () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_ok_ack (q, mp, response) Xqueue_t *q; Xmblk_t *mp; Xmblk_t *response; X{ X union DL_primitives *p_dl; X dl_ok_ack_t *p_ok_ack; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_ok_ack: enter"); X X p_dl = (union DL_primitives *) mp->b_datap->db_base; X X p_ok_ack = (dl_ok_ack_t *)(response->b_wptr); X p_ok_ack->dl_primitive = DL_OK_ACK; X p_ok_ack->dl_correct_primitive = p_dl->dl_primitive; X X response->b_wptr += DL_OK_ACK_SIZE; X response->b_datap->db_type = M_PCPROTO; X} X X/* X * slip_dl_error_ack X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_error_ack (q, mp, response, dl_errno) Xqueue_t *q; Xmblk_t *mp; Xmblk_t *response; Xulong dl_errno; X{ X union DL_primitives *p_dl; X dl_error_ack_t *p_error; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_error_ack: enter"); X X p_dl = (union DL_primitives *) mp->b_datap->db_base; X X p_error = (dl_error_ack_t *) response->b_wptr; X p_error->dl_primitive = DL_ERROR_ACK; X p_error->dl_error_primitive = p_dl->dl_primitive; X p_error->dl_errno = dl_errno; X p_error->dl_unix_errno = 0; X X response->b_wptr += DL_ERROR_ACK_SIZE; X response->b_datap->db_type = M_PCPROTO; X} X X/* X * slip_dl_unitdata_ind () X */ X X#ifndef DEBUG Xstatic X#endif Xslip_dl_unitdata_ind (q, mp) Xqueue_t *q; Xmblk_t *mp; X{ X dl_unitdata_ind_t *p_dl; X slip_t *p_slip; X X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_unitdata_ind: enter"); X X p_dl = (dl_unitdata_ind_t *) mp->b_wptr; X p_dl->dl_primitive = DL_UNITDATA_IND; X p_dl->dl_dest_addr_length = 0; X p_dl->dl_dest_addr_offset = DL_UNITDATA_IND_SIZE; X p_dl->dl_src_addr_length = 0; X p_dl->dl_src_addr_offset = p_dl->dl_dest_addr_offset + p_dl->dl_dest_addr_length; X X mp->b_wptr += DL_UNITDATA_IND_SIZE; X mp->b_datap->db_type = M_PROTO; X X /* copy packet received to the next message block */ X X p_slip = (slip_t *) q->q_ptr; X X bcopy ((caddr_t)p_slip->buf, (caddr_t)mp->b_cont->b_wptr, p_slip->inlen); X X mp->b_cont->b_wptr += p_slip->inlen; X} END_OF_FILE if test 21755 -ne `wc -c <'driver/io/slip.c'`; then echo shar: \"'driver/io/slip.c'\" unpacked with wrong size! fi # end of 'driver/io/slip.c' fi if test ! -d 'driver/sys' ; then echo shar: Creating directory \"'driver/sys'\" mkdir 'driver/sys' fi if test ! -d 'driver/v2.ip.fix' ; then echo shar: Creating directory \"'driver/v2.ip.fix'\" mkdir 'driver/v2.ip.fix' fi if test -f 'driver/v2.ip.fix/Driver.UU.02' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'driver/v2.ip.fix/Driver.UU.02'\" else echo shar: Extracting \"'driver/v2.ip.fix/Driver.UU.02'\" \(20206 characters\) sed "s/^X//" >'driver/v2.ip.fix/Driver.UU.02' <<'END_OF_FILE' XM[B\```)A``#^+P```:````HP```!!0``#S````+&``!D,````J@``&\P```! XMH```=S````$%``!\,````L8``(4P```"M```CC````&@``"6,````04``)LP XM```"Q@``MS````)````",0```5,``$PQ```!TP``SC$```+$``#B,0```5,` XM`.<Q```!4P``[C$```%3``#W,0```5,``(0R```"P```GC(```'3``"F,@`` XM`K0``.,R```"P````#,```*T``"/,P```DL``/8S```"X0``&S0```*T``!' XM-````N$``($T```"8```AS0```%3``"4-````3```)DT```"<P``H30```%V XM``"Y-````=,``,@T```!4P``TS0```%3``#>-````=,``.PT```!4P``O34` XM``)'```F-@```KX``$$V```"+P``2#8```+?``"+-@```KX``-DV```"O@`` XM'#<```*^``#2-P```KX``.0W```"1P``'3@```*^```I.````JT``$`X```" XMO@``7S@```)J``!J.````K0``)\X```!O0``IC@```&]``#*.````HL``.TX XM```!O0``\C@```)(```1.0```HL``%,Y```"BP``BSD```%#``"4.0```04` XM`)DY```"Q@``ICD```$8``"L.0```KX``+HY```!3P``OSD```%/``#%.0`` XM`4\``,PY```!&```X#D```%/``#J.0```4\``/XY```"80``%3H```%/```D XM.@```4\``"LZ```!&```.#H```$8``!*.@```1@``$\Z```"O@``;CH```$8 XM``#(.@```KX```,[```"O@``/CL```*^``"\.P```4,``.T[```!!0``\CL` XM``+&```,/````<<``!4\```!I0``'CP```&@```F/````04``"L\```"Q@`` XM,CP```'3```Z/````K0``%$\```"P0``7#P```&@``!D/````04``&D\```" XMQ@``<CP```*T``"C/````E@``*X\```!O0``M#P```&]``#+/````;T``-,\ XM```!O0``XSP```&]``#H/````HL``/$\```!O0``_CP```&]```1/0```;T` XM`!8]```"2```*#T```&]```X/0```;T``#T]```"BP``13T```&]``!2/0`` XM`;T``&(]```!O0``;CT```&]``!_/0```;T``)L]```!O0``KCT```'4```# XM/@```;T``!8^```!O0``.SX```&]``!./@```;T``&T^```!:```G3X```%] XM``"E/@```4,``+H^```!!0``OSX```+&``#+/@```F$``-T^```"M```[#X` XM``*T```Q/P```;T``&P_```!LP``>C\```&)``""/P```8D``(P_```"M``` XMFS\```*T``"N/P```;T``+8_```!O0``QS\```&S``#0/P```N```.$_```! XMO0``\3\```&]``#V/P```HL```%````!O0``#D````&]```>0````=,``#!` XM```!TP``J$````)J``"]0````K0``-)````"M```V4````'3``#]0````J<` XM`&A!```"0```@D$```)A``#!00```KX``-%!```"O```6D(```%Q``!A0@`` XM`7$``+%"```"6@``O4(```%H```L0P```HL``'!#```";0``BT,```(O``"2 XM0P```M\``,-#```"2```YD,```*+```,1````>```!%$```"7P``1$0```*G XM``"E1````J@``+E$```":@``YD0```)0``"R10```E4``,M%```"J```Z$4` XM``*V```\1@```H(``&)&```"80``7T<```)5``"G1P```IP``+5'```"M``` XMV$<```*H``#U1P```K8``$1(```"M```;4@```*+``"?2````7T``*E(```! XM?0``ZT@```*H```)20```K8``"1)```"J```/4D```)```!/20```FL``*9) XM```"80``Q4D```*^``#<20```KX``/I)```"C```EDH```*^```22P```04` XM`!E+```"N```34L```)9``!<2P```K0``)]+```!!0``IDL```*X```'3``` XM`F$``"Q,```!(```-$P```+:```Z3````2```$1,```!70``4DP```%=``!P XM3````;,``'Y,```!B0``BDP```&)``"33````C8``*E,```"S```Q4P```)A XM``#53````;,```%-```"C```"4T```(V```T30```1L``#U-```!&P``:$T` XM``$%``!O30```K@``)%-```"8P```TX```)C```L3@```KP``&).```!`P`` XMB$X```*\``#,3@```6\``-).```!;P``\4X```*\```%3P```K8``"A/```" XMM```.$\```*T``!(3P```;,``%=/```!LP``>4\```*\``"'3P```8D``+5/ XM```"O```W$\```&S``#M3P```6\``!10```"O```)%````&S```S4````6\` XM`#Q0```!B0``0E````%O``!;4````6\``&%0```!B0``:U````&S``!Y4``` XM`6\``)=0```!?0``W5````*\``#X4````BH``"U1```"O```F%$```%H``#; XM40```1L``.-1```"-P``&U(```*\```O4@```IT``$%2```!:```35(```%H XM``!74@```7```%]2```!<```@E(```%H``"(4@```K4``+A2```"80``#U,` XM``*\``!34P```KP``&53```"80``CE,```*\```T5````KP``(Y4```!:``` XMGU0```*^``#-5````7T```I5```"O```'E4```%=```G50```7T``"M5```! XM:```,%4```&S```Y50```6@``$15```"-@``3E4```%P``!550```6@``%I5 XM```"M0``8E4```'"``!M50```7$``'E5```!B0``?U4```%O``"-50```I\` XM`))5```",```F%4```%=``"A50```G0```Y6```!!0``%58```*X```>5@`` XM`K0``"M6```">P``4%8```$#``!H5@```K0``(U6```"O```GU8```*V``"] XM5@```F,``-Y6```"8P``Z%8```*\``#V5@```K0```)7```"M```,E<```%O XM```X5P```8D``$17```!;P``2U<```&S``!65P```J@``'Q7```!LP``B5<` XM``)8``"85P```;,``*)7```!LP``LU<```&)``"[5P```K0``,I7```!W``` XMTE<```'<``"06````K0``,98```"O````%D```*T``!"60```KP``'99```" XM80``A5D```*,``"D60```KX``,A9```"C```Z%D```)A``#W60```3H```5: XM```"FP``6%H```*U``"I6@```4X``.E:```!!```05L```*Q``!*6P```F$` XM`(5;```"M0``G5L```*^``#Z6P```F$``"%<```"80``AUP```*T```F70`` XM`K0``#I=```"@@``2%T```*\``#;7@```I0``.5>```!>@``\EX```%<```0 XM7P```58``!E?```!<@``(U\```%R``!+7P```:(``'%?```!!0``=E\```+& XM``#)7P```7(``-5?```!H@``ZU\```(U```O8````04``#1@```";```4V`` XM``(N``!I8````5X``'%@```"C```DV````(_``"?8````:(``.!@```"1P`` XM[&````&B```180```7(``!]A```">@``:&$```&B``"_80```:(``-EA```! XMH@``XV$```&B``!.8@```I0``&YB```!7```@F(```%6``#)8@```GH``$-C XM```!I0``8&,```%>``!V8P```HP``*1C```!)P``K6,```&E``#:8P```FT` XM``!D```"1P``&V0```(_```]9````F$``.ID```"80```F4```*U```O90`` XM`HP``$UE```!7```I64```%6``"]90```;\``,)E```!!0``R64```*X``#1 XM90```04``-AE```"N```X&4```$%``#G90```K@``.]E```!!0``]F4```*X XM``#^90```04```5F```"N`````````$"```$`````0(```@````!`@``#``` XM``$"```0`````0(``!0````!`@``&`````$"```<`````0(``"`````!`@`` XM)`````$"```H`````0(``"P````!`@``,`````$"```T`````0(``#@````! XM`@``&`````$3```D`````1(``#`````!$@``/`````$2``!(`````1(``%0` XM```!$@``8`````$2``!L`````1(``'@````!$@``$`$```$%```H`0```04` XM`$`!```!!0``6`$```$%``!P`0```04``(P!```!D@``D`$```&(``"8`0`` XM`1L``*`!```!E0``I`$```%2``"H`0```9(``*P!```!B```M`$```$;``"\ XM`0```50``,`!```!U@``Q`$```&2``#(`0```8@``-`!```!&P``V`$```&& XM``#<`0```3L``.`!```!D@``Y`$```&(``#L`0```1L``/0!```!'```^`$` XM``$=``#\`0```1X````"```!'P``0"@C*6ME<FXM:6YE=#II;BYC"3$N,P!` XM*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIT>7!E XM<RYH"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C XM*6AE860N<WES.F9S+W,U<&%R86TN:`DQ+C,N,BXQ`$`H(REH96%D+G-Y<SIS XM;V-K:6\N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SII;V-C;VTN:`DQ+C$N,2XQ XM`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.G-T XM<F]P=',N:`DQ+C0N-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!` XM*",I:&5A9"YS>7,Z979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')E XM86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N-RXQ`$`H XM(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z<&]L;"YH XM"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ`$`H(REH XM96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@) XM,2XQ+C0N,0!`*",I:&5A9"YS>7,Z<V]C:V5T=F%R+F@),2XQ+C$N,0!`*",I XM:&5A9"YS>7,Z<')O=&]S=RYH"3$N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N XM-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H(RDO=7-R+W-R8R]U XM=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N,"`P-2\R,B\Y,"`W XM,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y?<WES=&TN:`DQ+C$N,RXQ XM`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N,0!`*",I:V5R;BUN970Z XM868N:`DQ+C$N,RXQ`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C XM*6ME<FXM:6YE=#II<%]S='(N:`DQ+C$N,RXQ`&%C;VUP.B`H4T-$12D@-2XP XM("`P-"\Q.2\Y,`!O<'1I;3H@*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A3 XM0T1%*2`U+C`@(#`T+S$Y+SDP`$`H(REK97)N+6EN970Z:6Y?8VMS=6TN8PDQ XM+C,`0"@C*6AE860N<WES.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z XM<V5L96-T+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT+C$S XM+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS>7,Z XM=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ`$`H XM(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z8W)E XM9"YH"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C*2]U XM<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP(#`U XM+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6AE860N<WES.F-M;E]E<G(N:`DQ XM+C,N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O<'1I;3H@*%-# XM1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`$`H XM(REK97)N+6EN970Z:6Y?<&-B+F,),2XS`$`H(REH96%D+G-Y<SIT>7!E<RYH XM"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C*6AE XM860N<WES.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O<S5P87)A XM;2YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-Y<W1M+F@),2XS+C$P+C$`0"@C XM*6AE860N<WES.G-T<F5A;2YH"3$N-"XQ,RXQ`$`H(REH96%D+G-Y<SIV;F]D XM92YH"3$N,2XW+C$`0"@C*6AE860N<WES.G1I;64N:`DQ+C$N,RXQ`$`H(REH XM96%D+G-Y<SIP;VQL+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R;61E<"YH XM"3$N,2XQ+C$`0"@C*6AE860N<WES.F-R960N:`DQ+C$N,BXQ`$`H(REH96%D XM+G-Y<SIS=')L;V<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIL;V<N:`DQ+C,N XM-"XQ`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES XM.G1I:&1R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z=&EU<V5R+F@),2XS+C0N XM,@!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:&5A9"YS>7,Z XM<V]C:V5T=F%R+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z<V]C:VEO+F@),2XQ XM+C$N,0!`*",I:&5A9"YS>7,Z:6]C8V]M+F@),2XQ+C$N,0!`*",I:V5R;BUN XM970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H XM(RDO=7-R+W-R8R]U=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N XM,"`P-2\R,B\Y,"`W,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y?<WES XM=&TN:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N,0!` XM*",I:V5R;BUN970Z<F]U=&4N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y? XM<&-B+F@),2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP+F@),2XQ+C(N,0!`*",I XM:V5R;BUI;F5T.FEP7W9A<BYH"3$N,2XS+C$`0"@C*6AE860N<WES.G!R;W1O XM<W<N:`DQ+C$`0"@C*6ME<FXM:6YE=#II<%]S='(N:`DQ+C$N,RXQ`$`H(REK XM97)N+6EN970Z:6YS<F5M+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z:VUE;2YH XM"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H XM4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3`` XM0"@C*6ME<FXM:6YE=#II;E]S=VET8V@N8PDQ+C,`0"@C*6AE860N<WES.G1Y XM<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ+C$N,0!` XM*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIF<R]S XM-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<WES=&TN:`DQ+C,N,3`N XM,0!`*",I:&5A9"YS>7,Z<VEG;F%L+F@),2XS+C@N,0!`*",I:&5A9"YS>7,Z XM8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.G!R;V,N:`DQ+C,N,3,N,0!` XM*",I:&5A9"YS>7,Z:6UM=2YH"3$N-BXY+C$`0"@C*6AE860N<WES.G5S97(N XM:`DQ+C4N,34N,@!`*",I:&5A9"YS>7,Z<VEG:6YF;RYH"3$N,2XT+C$`0"@C XM*6AE860N<WES.G1S<RYH"3$N-"XQ+C$`0"@C*6AE860N<WES.G-E9RYH"3$N XM-2XS+C$`0"@C*6AE860N<WES.G)E<V]U<F-E+F@),2XQ+C0N,0!`*",I:&5A XM9"YS>7,Z97AE8RYH"3$N,2XY+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ XM+C<N,0!`*",I:&5A9"YS>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES XM.FEO8W1L+F@),2XS+C<N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z XM<W1R96%M+F@),2XT+C$S+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ XM`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z XM<W1R;W!T<RYH"3$N-"XU+C$`0"@C*6AE860N<WES.F-O;F8N:`DQ+C,N-RXR XM`$`H(REH96%D+G-Y<SIE=F5C8BYH"3$N,2XQ+C$`0"@C*6AE860N<WES.G-T XM<FQO9RYH"3$N,RXT+C$`0"@C*6AE860N<WES.FQO9RYH"3$N,RXT+C$`0"@C XM*6AE860N<WES.F1E8G5G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z<')O=&]S XM=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:V5R XM;BUI;F5T.FEN+F@),2XQ+C0N,0!`*",I+W5S<B]S<F,O=71S+VDS.#8O<WES XM+V)Y=&5O<F1E<BYH+G-L(#$N,2`T+C`@,#4O,C(O.3`@-S$P,2!!5"94+553 XM3`!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE=#IA9BYH XM"3$N,2XS+C$`0"@C*6ME<FXM;F5T.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R XM;BUI;F5T.FEN7W9A<BYH"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II<%]S='(N XM:`DQ+C$N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O<'1I;3H@ XM*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T+S$Y+SDP XM`$`H(REK97)N+6EN970Z:6Y?=')A;G-P+F,),2XS`$`H(REH96%D+G-Y<SIT XM>7!E<RYH"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$` XM0"@C*6AE860N<WES.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O XM<S5P87)A;2YH"3$N,RXR+C$`0"@C*6AE860N<WES.G1I;64N:`DQ+C$N,RXQ XM`$`H(REH96%D+G-Y<SIS>7-M86-R;W,N:`DQ+C,N-BXQ`$`H(REH96%D+G-Y XM<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.G-T<F]P=',N:`DQ+C0N XM-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!`*",I:&5A9"YS>7,Z XM979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')E86TN:`DQ+C0N,3,N XM,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N-RXQ`$`H(REH96%D+G-Y<SIP XM;VQL+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R;61E<"YH"3$N,2XQ+C$` XM0"@C*6AE860N<WES.F-R960N:`DQ+C$N,BXQ`$`H(REH96%D+G-Y<SIS=')L XM;V<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIL;V<N:`DQ+C,N-"XQ`$`H(REK XM97)N+6EN970Z;FEH9'(N:`DQ+C$N,BXQ`$`H(REH96%D+G-Y<SID;'!I+F@) XM,2XQ+C,N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:&5A XM9"YS>7,Z<V]C:VEO+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z:6]C8V]M+F@) XM,2XQ+C$N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE XM=#IS=')I;V,N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ XM`$`H(RDO=7-R+W-R8R]U=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ XM(#0N,"`P-2\R,B\Y,"`W,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y? XM=F%R+F@),2XQ+C(N,0!`*",I:V5R;BUN970Z<F]U=&4N:`DQ+C$N,RXQ`$`H XM(REK97)N+6EN970Z:7!?<W1R+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEP XM7W9A<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z XM:VUE;2YH"3$N,2XS+C$`0"@C*6AE860N<WES.G1I;6]D+F@),2XS+C0N,0!A XM8V]M<#H@*%-#1$4I(#4N,"`@,#0O,3DO.3``;W!T:6TZ("A30T1%*2`U+C`@ XM(#`T+S$Y+SDP`&%S.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!`*",I:V5R;BUI XM;F5T.FEP7VEN<'5T+F,),2XS`$`H(REH96%D+G-Y<SIT>7!E<RYH"3$N-2XX XM+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C*6AE860N<WES XM.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O<S5P87)A;2YH"3$N XM,RXR+C$`0"@C*6AE860N<WES.G-Y<W1M+F@),2XS+C$P+C$`0"@C*6AE860N XM<WES.G-T<F]P=',N:`DQ+C0N-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS XM+C<N,@!`*",I:&5A9"YS>7,Z979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y XM<SIS=')E86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N XM-RXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z XM<&]L;"YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ XM`$`H(REH96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<W1R XM;&]G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z;&]G+F@),2XS+C0N,0!`*",I XM:&5A9"YS>7,Z<')O=&]S=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@) XM,2XQ+C0N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ`$`H(REH96%D XM+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N XM-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H(RDO=7-R+W-R8R]U XM=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N,"`P-2\R,B\Y,"`W XM,3`Q($%4)E0M55-,`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C XM*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ`$`H(REK97)N+6EN970Z:6Y? XM<WES=&TN:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N XM,0!`*",I:V5R;BUI;F5T.FEP+F@),2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP XM7W9A<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<%]I8VUP+F@),2XQ+C(N XM,0!`*",I:V5R;BUI;F5T.FEP7W-T<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE XM=#IT8W`N:`DQ+C$N,BXQ`$`H(REK97)N+6EN970Z:6YS<F5M+F@),2XQ+C,N XM,0!`*",I:V5R;BUI;F5T.FYI:&1R+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z XM:VUE;2YH"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P XM=&EM.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O XM,3DO.3``0"@C*6ME<FXM:6YE=#II<%]O=71P=70N8PDQ+C,`0"@C*6AE860N XM<WES.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ XM+C$N,0!`*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y XM<SIF<R]S-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@) XM,2XT+C$S+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A XM9"YS>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N XM,BXQ`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS XM>7,Z8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.G-T<F]P=',N:`DQ+C0N XM-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!`*",I:&5A9"YS>7,Z XM979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')L;V<N:`DQ+C,N-"XQ XM`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.F-M XM;E]E<G(N:`DQ+C,N,RXQ`$`H(REH96%D+G-Y<SIS;V-K970N:`DQ+C$N-"XQ XM`$`H(REH96%D+G-Y<SIS;V-K971V87(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y XM<SIP<F]T;W-W+F@),2XQ`$`H(REK97)N+6YE=#II9BYH"3$N,2XT+C$`0"@C XM*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C*2]U<W(O<W)C+W5T<R]I,S@V XM+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP(#`U+S(R+SDP(#<Q,#$@050F XM5"U54TP`0"@C*6ME<FXM:6YE=#II;E]V87(N:`DQ+C$N,BXQ`$`H(REK97)N XM+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;E]S>7-T;2YH XM"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<"YH"3$N,2XR+C$`0"@C*6ME<FXM XM:6YE=#II<%]V87(N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:7!?:6-M<"YH XM"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ`$`H(REH XM96%D+G-Y<SID;'!I+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FYI:&1R+F@) XM,2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP7W-T<BYH"3$N,2XS+C$`86-O;7`Z XM("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H4T-$12D@-2XP("`P-"\Q XM.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3``0"@C*6ME<FXM:6YE=#II XM<%]M86EN+F,),2XS+C$N,0!`*",I:&5A9"YS>7,Z='EP97,N:`DQ+C4N."XQ XM`$`H(REH96%D+G-Y<SIS96QE8W0N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIP XM87)A;2YH"3$N,RXX+C(`0"@C*6AE860N<WES.F9S+W,U<&%R86TN:`DQ+C,N XM,BXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z XM<WES;6%C<F]S+F@),2XS+C8N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N XM."XQ`$`H(REH96%D+G-Y<SIS=')O<'1S+F@),2XT+C4N,0!`*",I:&5A9"YS XM>7,Z8V]N9BYH"3$N,RXW+C(`0"@C*6AE860N<WES.F5V96-B+F@),2XQ+C$N XM,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT+C$S+C$`0"@C*6AE860N<WES XM.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS>7,Z<&]L;"YH"3$N,RXR+C$` XM0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIC XM<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<W1R;&]G+F@),2XS+C0N,0!` XM*",I:&5A9"YS>7,Z;&]G+F@),2XS+C0N,0!`*",I:V5R;BUI;F5T.FYI:&1R XM+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z9&QP:2YH"3$N,2XS+C$`0"@C*6AE XM860N<WES.G-O8VME="YH"3$N,2XT+C$`0"@C*6AE860N<WES.G-O8VMI;RYH XM"3$N,2XQ+C$`0"@C*6AE860N<WES.FEO8V-O;2YH"3$N,2XQ+C$`0"@C*6ME XM<FXM;F5T.FEF+F@),2XQ+C0N,0!`*",I:V5R;BUN970Z<W1R:6]C+F@),2XQ XM+C,N,0!`*",I:V5R;BUI;F5T.FEN+F@),2XQ+C0N,0!`*",I+W5S<B]S<F,O XM=71S+VDS.#8O<WES+V)Y=&5O<F1E<BYH+G-L(#$N,2`T+C`@,#4O,C(O.3`@ XM-S$P,2!!5"94+5533`!`*",I:V5R;BUI;F5T.FEN7W9A<BYH"3$N,2XR+C$` XM0"@C*6ME<FXM;F5T.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEP XM7W-T<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<%]V87(N:`DQ+C$N,RXQ XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z XM:VUE;2YH"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P XM=&EM.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O XM,3DO.3``0"@C*6ME<FXM:6YE=#IN971L:6(N8PDQ+C,`0"@C*6AE860N<WES XM.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ+C$N XM,0!`*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIF XM<R]S-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT XM+C$S+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS XM>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ XM`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z XM8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.F5R<FYO+F@),2XS+C@N,0!` XM*",I:&5A9"YS>7,Z<WES;6%C<F]S+F@),2XS+C8N,0!`*",I:&5A9"YS>7,Z XM9&5B=6<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIS:6=N86PN:`DQ+C,N."XQ XM`$`H(REH96%D+G-Y<SIP<F]C+F@),2XS+C$S+C$`0"@C*6AE860N<WES.FEM XM;74N:`DQ+C8N.2XQ`$`H(REH96%D+G-Y<SIU<V5R+F@),2XU+C$U+C(`0"@C XM*6AE860N<WES.G-I9VEN9F\N:`DQ+C$N-"XQ`$`H(REH96%D+G-Y<SIT<W,N XM:`DQ+C0N,2XQ`$`H(REH96%D+G-Y<SIS96<N:`DQ+C4N,RXQ`$`H(REH96%D XM+G-Y<SIR97-O=7)C92YH"3$N,2XT+C$`0"@C*6AE860N<WES.F5X96,N:`DQ XM+C$N.2XQ`$`H(REH96%D+G-Y<SIT:6AD<BYH"3$N,RXS+C$`0"@C*6AE860N XM<WES.G1I=7-E<BYH"3$N,RXT+C(`0"@C*6AE860N<WES.G-O8VME="YH"3$N XM,2XT+C$`0"@C*6ME<FXM;F5T.G-T<FEO8RYH"3$N,2XS+C$`0"@C*6AE860N XM<WES.G-O8VME='9A<BYH"3$N,2XQ+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N XM,2XT+C$`0"@C*2]U<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS XM;"`Q+C$@-"XP(#`U+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6ME<FXM;F5T XM.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEN7W!C8BYH"3$N,2XR XM+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H4T-$12D@ XM-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3``0"@C*6ME XM<FXM:6YE=#IR;W5T92YC"3$N,P!`*",I:&5A9"YS>7,Z='EP97,N:`DQ+C4N XM."XQ`$`H(REH96%D+G-Y<SIS96QE8W0N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y XM<SIP87)A;2YH"3$N,RXX+C(`0"@C*6AE860N<WES.F9S+W,U<&%R86TN:`DQ XM+C,N,BXQ`$`H(REH96%D+G-Y<SIS>7-T;2YH"3$N,RXQ,"XQ`$`H(REH96%D XM+G-Y<SIS=')E86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ XM+C$N-RXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS XM>7,Z<&]L;"YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N XM,2XQ`$`H(REH96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z XM<')O=&]S=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!` XM*",I:&5A9"YS>7,Z<V]C:VEO+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z:6]C XM8V]M+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ`$`H XM(REH96%D+G-Y<SIS=')O<'1S+F@),2XT+C4N,0!`*",I:&5A9"YS>7,Z8V]N XM9BYH"3$N,RXW+C(`0"@C*6AE860N<WES.F5V96-B+F@),2XQ+C$N,0!`*",I XM:&5A9"YS>7,Z<W1R;&]G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z;&]G+F@) XM,2XS+C0N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE XM=#IA9BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C XM*2]U<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP XM(#`U+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6ME<FXM:6YE=#II;E]V87(N XM:`DQ+C$N,BXQ`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C*6AE XM860N<WES.F-M;E]E<G(N:`DQ+C,N,RXQ`$`H(REK97)N+6EN970Z:7!?<W1R XM+F@),2XQ+C,N,0!A8V]M<#H@*%-#1$4I(#4N,"`@,#0O,3DO.3``;W!T:6TZ XM("A30T1%*2`U+C`@(#`T+S$Y+SDP`&%S.B`H4T-$12D@-2XP("`P-"\Q.2\Y XM,`!`*",I:V5R;BUI;F5T.FEP7W9E<G,N8PDQ+C,`0"@C*6AE860N<WES.F-M XM;E]E<G(N:`DQ+C,N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O XM<'1I;3H@*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T XM+S$Y+SDP```````````````````````````````````````````````````` XM```````!`````0````8`````````-````!!F``````````````0````````` XM!P````$````"`````````$1F```\```````````````$``````````\````! XM`````P````````"`9@``*`(`````````````!``````````5`````0````,` XM````````J&@``.P$``````````````0`````````'`````@````#```````` XM`)1M``"H```````````````$`````````"$````"``````````````"4;0`` XM,`X```<````E````!````!`````I`````P``````````````Q'L``"((```` XM``````````$`````````,0````,``````````````.:#``!D```````````` XM```!`````````#L````)``````````````!,A```:!4```8````!````!``` XM``@```!%````"0``````````````M)D``'@````&`````@````0````(```` XM40````D``````````````"R:```@`0``!@````,````$````"````%L````! XC``````````````!,FP``02D``````````````0`````````` X` Xend END_OF_FILE if test 20206 -ne `wc -c <'driver/v2.ip.fix/Driver.UU.02'`; then echo shar: \"'driver/v2.ip.fix/Driver.UU.02'\" unpacked with wrong size! fi # end of 'driver/v2.ip.fix/Driver.UU.02' fi if test ! -d 'man' ; then echo shar: Creating directory \"'man'\" mkdir 'man' fi if test ! -d 'man/man1' ; then echo shar: Creating directory \"'man/man1'\" mkdir 'man/man1' fi if test ! -d 'man/man7' ; then echo shar: Creating directory \"'man/man7'\" mkdir 'man/man7' fi if test ! -d 'utils' ; then echo shar: Creating directory \"'utils'\" mkdir 'utils' fi echo shar: End of archive 1 \(of 4\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 4 archives. rm -f ark[1-9]isdone else echo You still must unpack the following archives: echo " " ${MISSING} fi exit 0 exit 0 # Just in case... -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net. Use a domain-based address or give alternate paths, or you may lose out.