Hi,

This is a driver for the nice little USB to Ethernet devices like the
NETGEAR EA101.  So far it works for me in 2.2.18 as well as 2.4.2, which
is what this is patched againts.  

It was removed in 2.4, I think because if the device had no firmware...
when the firmware was read, the device timed out with a CRC/Timeout
message.  Any subsequent attempt to read or write to the device then
failed, unless the device was unplugged and plugged back in.  Any ideas
on why that happened, or how I might work around it?  For the time being
I just have it rewriting the firmware on probing and it seems to work
well.

Thank you for your input!

Sam


diff -ruN linux-2.4.2virgin/Documentation/Configure.help
linux/Documentation/Configure.help
--- linux-2.4.2virgin/Documentation/Configure.help      Mon Feb 19 13:18:18
2001
+++ linux/Documentation/Configure.help  Sat Mar 24 14:03:55 2001
@@ -10727,6 +10727,17 @@
   The module will be called rio500.o. If you want to compile it as
   a module, say M here and read Documentation/modules.txt.
 
+Kawasaki USB ethernet controller support
+CONFIG_USB_KAWETH
+  Say Y here if you want support for devices based on the Kawasaki
+  LSI KL5KUSB100 USB to Ethernet 1-Chip Controller, such as the
+  NetGear EA101 USB to Ethernet Adapter.
+
+  This code is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called kaweth.o. If you want to compile it as a
+  module, say M here and read Documentation/modules.txt.
+
 D-Link DSB-R100 FM radio support
 CONFIG_USB_DSBR
   Say Y here if you want to connect this type of radio to your
diff -ruN linux-2.4.2virgin/drivers/usb/Config.in
linux/drivers/usb/Config.in
--- linux-2.4.2virgin/drivers/usb/Config.in     Mon Nov 27 21:10:35 2000
+++ linux/drivers/usb/Config.in Sat Mar 24 13:43:14 2001
@@ -64,6 +64,7 @@
    dep_tristate '  PLUSB Prolific USB-Network driver (EXPERIMENTAL)'
CONFIG_USB_PLUSB $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
    dep_tristate '  USB ADMtek Pegasus-based ethernet device support
(EXPERIMENTAL)' CONFIG_USB_PEGASUS $CONFIG_USB $CONFIG_NET
$CONFIG_EXPERIMENTAL
    dep_tristate '  NetChip 1080-based USB Host-to-Host Link
(EXPERIMENTAL)' CONFIG_USB_NET1080 $CONFIG_USB $CONFIG_NET
$CONFIG_EXPERIMENTAL
+   dep_tristate '  Kawasaki USB-ethernet controller' CONFIG_USB_KAWETH
$CONFIG_USB $CONFIG_NET
 
    comment 'USB port drivers'
    dep_tristate '  USS720 parport driver' CONFIG_USB_USS720 $CONFIG_USB
$CONFIG_PARPORT
diff -ruN linux-2.4.2virgin/drivers/usb/Makefile
linux/drivers/usb/Makefile
--- linux-2.4.2virgin/drivers/usb/Makefile      Fri Dec 29 17:07:23 2000
+++ linux/drivers/usb/Makefile  Sat Mar 24 13:43:47 2001
@@ -59,6 +59,7 @@
 obj-$(CONFIG_USB_MICROTEK)     += microtek.o
 obj-$(CONFIG_USB_BLUETOOTH)    += bluetooth.o
 obj-$(CONFIG_USB_NET1080)      += net1080.o
+obj-$(CONFIG_USB_KAWETH)       += kaweth.o
 
 # Object files in subdirectories
 
diff -ruN linux-2.4.2virgin/drivers/usb/kaweth.c
linux/drivers/usb/kaweth.c
--- linux-2.4.2virgin/drivers/usb/kaweth.c      Wed Dec 31 19:00:00 1969
+++ linux/drivers/usb/kaweth.c  Sat Mar 24 13:53:05 2001
@@ -0,0 +1,1036 @@
+/****************************************************************
+ *
+ *     kawasaki.c - driver for KL5KUSB101 based USB->Ethernet
+ *
+ *     (c) 2000 Utenzi Communications
+ *
+ *     Original author: The Zapman <[EMAIL PROTECTED]>
+ *             Inspired by, and much credit goes to Michael Rothwell
<[EMAIL PROTECTED]>
+ *                     for the test equipment, help, and patience
+ *                     Based off of (and with thanks to) Petko Manolov's pegaus.c 
+driver.
+ *                     Also many thanks to Joel Silverman at Kawasaki for providing 
+the
firmware
+ *                             and driver resources.
+ *                     
+ *    Sam Coles <[EMAIL PROTECTED]>
+ *                     Removed conditional firmware zap.  Now it always rewrites.
+ *
+ *             This program is free software; you can redistribute it and/or
modify it
+ *             under the terms of the GNU General Public License as published by
the
+ *             Free Software Foundation; either version 2, or (at your option) any
+ *             later version.
+ *
+ *             This program is distributed in the hope that it will be useful,
+ *             but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *             MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *             GNU General Public License for more details.
+ *             
+ *             You should have received a copy of the GNU General Public License
+ *             along with this program; if not, write to the Free Software
Foundation,
+ *             Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ *
+ ****************************************************************/
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/malloc.h>
+#include <linux/string.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/usb.h>
+#include <linux/types.h>
+#include <asm/semaphore.h>
+
+#include "kawethfw.h"
+
+#define KAWETH_MTU                                                             1514
+#define KAWETH_BUF_SIZE                                                1664
+#define KAWETH_TX_TIMEOUT                                      (1 * HZ)
+#define KAWETH_FIRMWARE_BUF_SIZE       4096
+#define KAWETH_CONTROL_TIMEOUT         (3 * HZ)
+
+#define KAWETH_STATUS_BROKEN                   0x0000001
+#define KAWETH_STATUS_CLOSING                  0x0000002
+
+#define KAWETH_PACKET_FILTER_PROMISCUOUS               0x01
+#define KAWETH_PACKET_FILTER_ALL_MULTICAST     0x02
+#define KAWETH_PACKET_FILTER_DIRECTED                          0x04
+#define KAWETH_PACKET_FILTER_BROADCAST                 0x08
+#define KAWETH_PACKET_FILTER_MULTICAST                 0x10
+
+#define KAWETH_COMMAND_GET_ETHERNET_DESC               0x00
+#define KAWETH_COMMAND_SET_PACKET_FILTER               0x02
+#define KAWETH_COMMAND_GET_MAC                                                 0x06
+#define KAWETH_COMMAND_SET_URB_SIZE                                    0x08
+#define KAWETH_COMMAND_SET_SOFS_WAIT                           0x09
+#define KAWETH_COMMAND_SCAN                                                           
+         0xFF
+
+#define KAWETH_SOFS_TO_WAIT                                                           
+         0x05
+
+
+MODULE_AUTHOR("Michael Zappe <[EMAIL PROTECTED]>");
+MODULE_DESCRIPTION("KL5USB101 USB Ethernet driver");
+
+static void *kaweth_probe(struct usb_device *dev, unsigned int ifnum);
+static void kaweth_disconnect(struct usb_device *dev, void *ptr);
+
+/****************************************************************
+ *     kaweth_driver
+ ****************************************************************/
+static struct usb_driver kaweth_driver = {
+       name:           "kaweth",
+       probe:          kaweth_probe,
+       disconnect:     kaweth_disconnect,
+};
+//  __attribute__ ((packed))
+typedef __u8 eth_addr_t[6];
+
+/****************************************************************
+ *     usb_eth_dev
+ ****************************************************************/
+struct usb_eth_dev {
+       char *name;
+       __u16 vendor;
+       __u16 device;
+       void *pdata;
+};
+
+/****************************************************************
+ *     kaweth_ethernet_configuration
+ ****************************************************************/
+struct kaweth_ethernet_configuration
+{
+       __u8 size;
+       __u8 reserved1;
+       __u8 reserved2;
+       eth_addr_t hw_addr;
+       __u32 statistics_mask;
+       __u16 segment_size;
+       __u16 max_multicast_filters;
+       __u8 reserved3;
+} __attribute__ ((packed));
+
+/****************************************************************
+ *     kaweth_device
+ ****************************************************************/
+struct kaweth_device
+{
+       spinlock_t device_lock;
+
+       __u32 status;
+
+       struct usb_device *dev;
+       struct net_device *net;
+       wait_queue_head_t control_wait;
+
+       struct urb *rx_urb;
+       struct urb *tx_urb;
+       
+       __u8 firmware_buf[KAWETH_FIRMWARE_BUF_SIZE];
+       __u8 tx_buf[KAWETH_BUF_SIZE];
+       __u8 rx_buf[KAWETH_BUF_SIZE];
+
+       struct kaweth_ethernet_configuration configuration;
+
+       struct net_device_stats stats;
+} __attribute__ ((packed));
+
+/****************************************************************
+ *     usb_dev_id
+ ****************************************************************/
+static struct usb_eth_dev usb_dev_id[] = {
+       { "KLSI KL5KUSB101B", 0x05e9, 0x0008, NULL },
+       { "NetGear EA-101", 0x0846, 0x1001, NULL },
+       { "Peracom Enet", 0x0565, 0x0002, NULL },
+       { "Peracom Enet2", 0x0565, 0x0005, NULL },
+       { "3Com 3C19250", 0x0506, 0x03e8, NULL },
+       { "Linksys USB10T", 0x066b, 0x2202, NULL },
+       { "D-Link DSB-650C", 0x2001, 0x4000, NULL },
+       { "D-Link DSB-650", 0x0557, 0x2002, NULL },
+       { "AOX USB Ethernet", 0x03e8, 0x0008, NULL },
+       { "ADS USB-10BT", 0x06e1, 0x0008, NULL },
+       { "Entrega E45", 0x1645, 0x0005, NULL},
+       { "SMC 2202USB", 0x0707, 0x0100, NULL},
+       { "Correga K.K.", 0x07aa, 0x0001, NULL},
+       { NULL, 0, 0, NULL },
+};
+
+/****************************************************************
+ *     kaweth_check_device_ids
+ ****************************************************************/
+static int kaweth_check_device_ids(__u16 vendor, __u16 product)
+{
+       int i=0;
+       
+       while (usb_dev_id[i].name)
+       {
+               if((usb_dev_id[i].vendor == vendor) && 
+                        (usb_dev_id[i].device == product))
+                       {
+                               printk("%s connected...\n", usb_dev_id[i].name);
+                               
+                               return 0;
+                       }
+               i++;
+       }
+       return  1;
+}
+
+/****************************************************************
+ *     kaweth_control_complete
+ ****************************************************************/
+static void kaweth_control_complete(struct urb *urb)
+{
+       struct kaweth_device *kaweth = (struct kaweth_device *)urb->context;
+
+       if(waitqueue_active(&kaweth->control_wait))
+       {
+               wake_up(&kaweth->control_wait);
+       }
+}
+
+/****************************************************************
+ *     kaweth_control
+ ****************************************************************/
+static int kaweth_control(struct kaweth_device *kaweth,
+                                                                                      
+                 unsigned int pipe, 
+                                                                                      
+                 __u8 request, 
+                                                                                      
+                 __u8 requesttype, 
+                                                                                      
+                 __u16 value, 
+                                                                                      
+                 __u16 index,
+                                                                                      
+                 void *data, 
+                                                                                      
+                 __u16 size, 
+                                                                                      
+                 int timeout)
+{
+       DECLARE_WAITQUEUE(wait, current);
+       purb_t urb;
+       devrequest *dr;
+       int status;
+
+       if(in_interrupt())
+       {
+               return -EBUSY;
+       }
+
+       urb = usb_alloc_urb(0);
+       dr = kmalloc(sizeof(devrequest), in_interrupt() ? GFP_ATOMIC :
GFP_KERNEL);
+
+       if(!urb || !dr)
+       {
+               if(urb) kfree(urb);
+
+               return -ENOMEM;
+       }
+
+       spin_lock(&kaweth->device_lock);
+
+       urb->dev = kaweth->dev;
+       urb->pipe = pipe;
+       urb->setup_packet = (void *)dr;
+       urb->transfer_flags = USB_DISABLE_SPD;
+       urb->transfer_buffer = (void *)data;
+       urb->transfer_buffer_length = size;
+       urb->actual_length = size;
+       urb->complete = kaweth_control_complete;
+       urb->context = kaweth;
+
+       dr->requesttype = requesttype;
+       dr->request = request;
+       dr->value = value;
+       dr->index = index;
+       dr->length = size;
+
+       printk("Request type: %x  Request: %x  Value: %x Index: %x Length:
%x\n",
+                                (int)dr->requesttype,
+                                (int)dr->request,
+                                (int)dr->value,
+                                (int)dr->index,
+                                (int)dr->length); 
+
+       init_waitqueue_head(&kaweth->control_wait);
+
+       current->state = TASK_INTERRUPTIBLE;
+       
+       add_wait_queue(&kaweth->control_wait, &wait);
+
+       status = usb_submit_urb(urb);
+
+       printk("pipe: %x\n", pipe);
+       printk("maxpacket: %x\n", usb_maxpacket(kaweth->dev, pipe,
usb_pipeout(pipe)));
+
+       if(status)
+       {               
+               usb_free_urb(urb);
+               remove_wait_queue(&kaweth->control_wait, &wait);
+               spin_unlock(&kaweth->device_lock);
+               return status;
+       }
+
+       if(urb->status == -EINPROGRESS)
+       {
+               while(timeout && urb->status == -EINPROGRESS)
+               {
+                       status = timeout = schedule_timeout(timeout);
+               }
+       }
+       else
+       {
+               status = 1;
+       }
+
+       remove_wait_queue(&kaweth->control_wait, &wait);
+
+       if(!status)
+       {
+               usb_unlink_urb(urb);
+       
+               printk("kaweth timeout\n");
+
+               status = -ETIMEDOUT;
+       }
+       else
+       {
+               status = urb->status;
+
+               if(urb->status)
+               {
+                       printk("kaweth control message failed (urb addr: %x) with error
number: %i\n", (int)urb, (int)status);
+                       
+                       usb_clear_halt(kaweth->dev, usb_rcvctrlpipe(kaweth->dev, 0));
+                       usb_clear_halt(kaweth->dev, usb_sndctrlpipe(kaweth->dev, 0));
+
+                       usb_unlink_urb(urb);
+               }
+       }
+
+       spin_unlock(&kaweth->device_lock);
+
+       printk("Actual length: %d, length %d\n", urb->actual_length,
urb->transfer_buffer_length);
+
+//     printk("pipe: %x\n", pipe);
+//     printk("maxpacket: %x\n", usb_maxpacket(kaweth->dev, pipe,
usb_pipeout(pipe)));
+
+       usb_free_urb(urb);
+       kfree(dr);
+       
+       return status;  
+}
+
+/****************************************************************
+ *     kaweth_read_configuration
+ ****************************************************************/
+static int kaweth_read_configuration(struct kaweth_device *kaweth)
+{
+       int retval;
+
+       printk("Reading kaweth configuration\n");
+
+       retval = kaweth_control(kaweth,
+                                                                       
+usb_rcvctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_GET_ETHERNET_DESC,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
+                                                                       0,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->configuration,
+                                                                       
+sizeof(kaweth->configuration),
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+
+       return retval;
+}
+
+/****************************************************************
+ *     kaweth_set_urb_size
+ ****************************************************************/
+static int kaweth_set_urb_size(struct kaweth_device *kaweth, __u16
urb_size)
+{
+       int retval;
+
+       printk("Setting URB size to %d\n", (unsigned)urb_size);
+
+       retval = kaweth_control(kaweth,
+                                                                       
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_SET_URB_SIZE,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                       urb_size,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->firmware_buf,
+                                                                       0,
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+
+       return retval;
+}
+
+/****************************************************************
+ *     kaweth_set_sofs_wait
+ ****************************************************************/
+static int kaweth_set_sofs_wait(struct kaweth_device *kaweth, __u16
sofs_wait)
+{
+       int retval;
+
+       printk("Set SOFS wait to %d\n", (unsigned)sofs_wait);
+
+       retval = kaweth_control(kaweth,
+                                                                       
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_SET_SOFS_WAIT,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                       sofs_wait,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->firmware_buf,
+                                                                       0,
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+
+       return retval;
+}
+
+/****************************************************************
+ *     kaweth_set_recieve_filter
+ ****************************************************************/
+static int kaweth_set_recieve_filter(struct kaweth_device *kaweth,
__u16 recieve_filter)
+{
+       int retval;
+
+       printk("Set recieve filter to %d\n", (unsigned)recieve_filter);
+
+       retval = kaweth_control(kaweth,
+                                                                       
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_SET_PACKET_FILTER,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                       recieve_filter,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->firmware_buf,
+                                                                       0,
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+
+       return retval;
+}
+
+/****************************************************************
+ *     kaweth_download_firmware
+ ****************************************************************/
+static int kaweth_download_firmware(struct kaweth_device *kaweth, 
+                                                                                      
+                                                         __u8 *data, 
+                                                                                      
+                                                         __u16 data_len,
+                                                                                      
+                                                         __u8 interrupt,
+                                                                                      
+                                                         __u8 type)
+{      
+       if(data_len > KAWETH_FIRMWARE_BUF_SIZE)
+       {
+               printk("Firmware too big: %d\n", data_len);
+               
+               return -ENOSPC;
+       }
+       
+       memcpy(kaweth->firmware_buf, data, data_len);
+       
+       kaweth->firmware_buf[2] = (data_len & 0xFF) - 7;
+       kaweth->firmware_buf[3] = data_len >> 8;
+       kaweth->firmware_buf[4] = type;
+       kaweth->firmware_buf[5] = interrupt;
+
+       printk("Downloading firmware at %x to kaweth device at %x...\n",
(int)data, (int)kaweth);
+       printk("Firmware length: %d\n", data_len);
+
+       return kaweth_control(kaweth,
+                                                                       
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_SCAN,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                       0,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->firmware_buf,
+                                                                       data_len,
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+}
+
+/****************************************************************
+ *     kaweth_trigger_firmware
+ ****************************************************************/
+static int kaweth_trigger_firmware(struct kaweth_device *kaweth,
+                                                                                      
+                                                  __u8 interrupt)
+{
+       kaweth->firmware_buf[0] = 0xB6;
+       kaweth->firmware_buf[1] = 0xC3;
+       kaweth->firmware_buf[2] = 1;
+       kaweth->firmware_buf[3] = 0;
+       kaweth->firmware_buf[4] = 6;
+       kaweth->firmware_buf[5] = 100;
+       kaweth->firmware_buf[6] = 0;
+       kaweth->firmware_buf[7] = 0;
+       
+       printk("Triggering firmware\n");
+
+       return kaweth_control(kaweth,
+                                                                       
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                       
+KAWETH_COMMAND_SCAN,
+                                                                       
+USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                       0,
+                                                                       0,
+                                                                       (void 
+*)&kaweth->firmware_buf,
+                                                                       8,
+                                                                       
+KAWETH_CONTROL_TIMEOUT);
+}
+
+/****************************************************************
+ *     kaweth_reset
+ ****************************************************************/
+static int kaweth_reset(struct kaweth_device *kaweth)
+{
+       int result;
+
+       result = usb_set_configuration(kaweth->dev, 1);
+       
+       udelay(10000);
+
+       return result;
+}
+
+static void kaweth_usb_recieve(struct urb *);
+
+/****************************************************************
+ *     kaweth_resubmit_rx_urb
+ ****************************************************************/
+static inline void kaweth_resubmit_rx_urb(struct kaweth_device *kaweth)
+{
+       int result;
+       
+       memset(kaweth->rx_urb, 0, sizeof(*kaweth->rx_urb));
+
+       spin_lock_init(&kaweth->rx_urb->lock);
+
+       FILL_BULK_URB(kaweth->rx_urb,
+                                                               kaweth->dev,
+                                                               
+usb_rcvbulkpipe(kaweth->dev, 1),
+                                                               kaweth->rx_buf,
+                                                               KAWETH_BUF_SIZE,
+                                                               kaweth_usb_recieve,
+                                                               kaweth);
+
+//     kaweth->rx_urb->transfer_flags = USB_DISABLE_SPD |
USB_URB_EARLY_COMPLETE;
+
+       if((result = usb_submit_urb(kaweth->rx_urb)))
+       {
+               printk("kaweth: resubmitting rx_urb %d failed\n", result);
+       }
+}
+
+/****************************************************************
+ *     kaweth_usb_recieve
+ ****************************************************************/
+static void kaweth_usb_recieve(struct urb *urb)
+{
+       struct kaweth_device *kaweth = urb->context;
+       struct net_device *net = kaweth->net;
+       
+       int count = urb->actual_length,
+                       count2 = urb->transfer_buffer_length;
+                       
+       __u16 pkt_len = *(__u16 *)kaweth->rx_buf;
+
+       struct sk_buff *skb;
+
+       if(kaweth->status & KAWETH_STATUS_CLOSING)
+       {
+               return;
+       }
+       
+#define RX_FAILED              kaweth_resubmit_rx_urb(kaweth);                 \
+                                                                               return
+
+       if(urb->status && urb->status != -EREMOTEIO && count != 1) 
+       {
+               printk("%s: RX status: %d count: %d packet_len: %d\n", 
+                                        net->name, urb->status, count, (int)pkt_len);
+
+               RX_FAILED;
+       }
+
+       if(kaweth->net && (count > 2))
+       {
+               if(pkt_len > (count - 2))
+               {
+                       printk("kaweth error: packet length too long for USB frame 
+(pkt_len:
%x, count: %x)\n",
+                                                pkt_len, count);
+
+                       printk("Packet len & 2047: %x\n", pkt_len & 2047);
+                       printk("Count 2: %x\n", count2);
+
+                       RX_FAILED;
+               }
+               
+               if(!(skb = dev_alloc_skb(pkt_len+2)))
+               {
+                       RX_FAILED;
+               }
+
+               skb->dev = net;
+
+               eth_copy_and_sum(skb, kaweth->rx_buf + 2, pkt_len, 0);
+               
+               skb_put(skb, pkt_len);
+
+               skb->protocol = eth_type_trans(skb, net);
+               
+               netif_rx(skb);
+               
+               kaweth->stats.rx_packets++;
+               kaweth->stats.rx_bytes += pkt_len;
+       }
+
+       kaweth_resubmit_rx_urb(kaweth);
+}
+
+/****************************************************************
+ *     kaweth_open
+ ****************************************************************/
+static int kaweth_open(struct net_device *net)
+{
+       struct kaweth_device *kaweth = (struct kaweth_device *)net->priv;
+
+       printk("Dev usage: %d\n", kaweth->dev->refcnt.counter);
+
+       printk("Opening network device...\n");
+
+       kaweth_resubmit_rx_urb(kaweth);
+
+       netif_start_queue(net);
+
+       MOD_INC_USE_COUNT;
+
+       return 0;
+}
+
+/****************************************************************
+ *     kaweth_close
+ ****************************************************************/
+static int kaweth_close(struct net_device *net)
+{
+       struct kaweth_device *kaweth = net->priv;
+
+       netif_stop_queue(net);
+
+       kaweth->status |= KAWETH_STATUS_CLOSING;
+
+       usb_unlink_urb(kaweth->rx_urb);
+
+       kaweth->status &= ~KAWETH_STATUS_CLOSING;
+
+       MOD_DEC_USE_COUNT;
+
+       printk("Dev usage: %d\n", kaweth->dev->refcnt.counter);
+
+       return 0;
+}
+
+/****************************************************************
+ *     kaweth_ioctl
+ ****************************************************************/
+static int kaweth_ioctl(struct net_device *net, struct ifreq *rq, int
cmd)
+{
+//     __u16 *data = (__u16 *)&rq->ifr_data;
+//     struct kaweth_device *kaweth = net->priv;
+/*
+       switch(cmd) {
+               default:
+                       return -EOPNOTSUPP;
+       }
+*/
+       return -EOPNOTSUPP;
+}
+
+/****************************************************************
+ *     kaweth_usb_transmit_complete
+ ****************************************************************/
+static void kaweth_usb_transmit_complete(struct urb *urb)
+{
+       struct kaweth_device *kaweth = urb->context;
+
+       spin_lock(&kaweth->device_lock);
+
+       if (urb->status)
+               printk("%s: TX status %d", kaweth->net->name, urb->status);
+
+       netif_wake_queue(kaweth->net);
+
+       spin_unlock(&kaweth->device_lock);
+}
+
+/****************************************************************
+ *     kaweth_start_xmit
+ ****************************************************************/
+static int kaweth_start_xmit(struct sk_buff *skb, struct net_device
*net)
+{
+       struct kaweth_device *kaweth = net->priv;
+//     int count = ((skb->len) & 0x3f) ? skb->len+2 : skb->len+3;
+       int count = skb->len;
+       
+       int res;
+
+       spin_lock(&kaweth->device_lock);
+
+       netif_stop_queue(net);
+
+       *((__u16 *)kaweth->tx_buf) = skb->len;
+
+       memcpy(kaweth->tx_buf + 2, skb->data, skb->len);
+
+       memset(kaweth->tx_urb, 0, sizeof(*kaweth->tx_urb));
+       spin_lock_init(&kaweth->tx_urb->lock);
+
+       FILL_BULK_URB(kaweth->tx_urb,
+                                                       kaweth->dev,
+                                                       usb_sndbulkpipe(kaweth->dev, 
+2),
+                                                       kaweth->tx_buf,
+                                                       count + 2,
+                                                       kaweth_usb_transmit_complete,
+                                                       kaweth);
+
+       if((res = usb_submit_urb(kaweth->tx_urb)))
+       {
+               warn("kaweth failed tx_urb %d", res);
+               kaweth->stats.tx_errors++;
+               
+               netif_start_queue(net);
+       } 
+       else 
+       {
+               kaweth->stats.tx_packets++;
+               kaweth->stats.tx_bytes += skb->len;
+               net->trans_start = jiffies;
+       }
+
+       dev_kfree_skb(skb);
+
+       spin_unlock(&kaweth->device_lock);
+
+       return 0;
+}
+
+/****************************************************************
+ *     kaweth_set_rx_mode
+ ****************************************************************/
+static void kaweth_set_rx_mode(struct net_device *net)
+{
+       struct kaweth_device *kaweth = net->priv;
+       int result;
+       
+       __u16 packet_filter_bitmap = KAWETH_PACKET_FILTER_DIRECTED |
+                                                                                      
+                                  KAWETH_PACKET_FILTER_BROADCAST |
+                                                                                      
+                                  KAWETH_PACKET_FILTER_MULTICAST;
+
+       printk("Setting Rx mode\n");
+       
+       netif_stop_queue(net);
+
+       if (net->flags & IFF_PROMISC) 
+       {
+               packet_filter_bitmap |= KAWETH_PACKET_FILTER_PROMISCUOUS;
+       } 
+       else if ((net->mc_count) || //  > multicast_filter_limit) ||
+                                        (net->flags & IFF_ALLMULTI)) 
+       {
+               packet_filter_bitmap |= KAWETH_PACKET_FILTER_ALL_MULTICAST;
+       }
+
+       result = kaweth_control(kaweth,
+                                                                
+usb_sndctrlpipe(kaweth->dev, 0),
+                                                                
+KAWETH_COMMAND_SET_PACKET_FILTER,
+                                                                USB_TYPE_VENDOR | 
+USB_DIR_OUT | USB_RECIP_DEVICE,
+                                                                packet_filter_bitmap,
+                                                                0,
+                                                                (void 
+*)&kaweth->firmware_buf,
+                                                                0,
+                                                                
+KAWETH_CONTROL_TIMEOUT);
+
+       if(result < 0)
+       {
+               printk("Failed to set Rx mode: %d\n", result);
+       }
+       else
+       {
+               printk("%s: set Rx mode to %d\n", net->name, packet_filter_bitmap);
+       }
+               
+       netif_wake_queue(net);
+}
+
+/****************************************************************
+ *     kaweth_netdev_stats
+ ****************************************************************/
+static struct net_device_stats *kaweth_netdev_stats(struct net_device
*dev)
+{
+       return &((struct kaweth_device *)dev->priv)->stats;
+}
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 0)
+/****************************************************************
+ *     kaweth_tx_timeout
+ ****************************************************************/
+static void kaweth_tx_timeout(struct net_device *net)
+{
+       struct kaweth_device *kaweth = net->priv;
+
+       printk("%s: Tx timed out. Reseting...\n", net->name);
+       kaweth->stats.tx_errors++;
+       net->trans_start = jiffies;
+
+       usb_unlink_urb(kaweth->tx_urb);
+
+       netif_wake_queue(net);
+}
+#endif
+
+/****************************************************************
+ *     kaweth_probe
+ ****************************************************************/
+static void *kaweth_probe(struct usb_device *dev, unsigned int ifnum)
+{
+//     struct net_device *net;
+//     eth_addr_t mac_addr;
+       struct kaweth_device *kaweth;
+       const eth_addr_t bcast_addr = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+       int result = 0;
+       int i;
+       
+       printk("Kawasaki Device Probe (Device number:%x): 0x%4.4x:0x%4.4x\n",
+                                dev->devnum, 
+                                (int)dev->descriptor.idVendor, 
+                                (int)dev->descriptor.idProduct);
+
+       printk("Device at %p\n", dev);
+
+       printk("Descriptor length: %x type: %x\n", 
+                                (int)dev->descriptor.bLength,
+                                (int)dev->descriptor.bDescriptorType);
+
+       if (kaweth_check_device_ids(dev->descriptor.idVendor, 
+                                                                                      
+                                 dev->descriptor.idProduct)) 
+       {
+               return NULL;
+       }
+
+       if(!(kaweth = kmalloc(sizeof(struct kaweth_device), GFP_KERNEL)))
+       {
+               printk("out of memory allocating device structure\n");
+               return NULL;
+       }
+
+       memset(kaweth, 0, sizeof(*kaweth));
+
+       kaweth->dev = dev;
+       kaweth->status = 0;
+       kaweth->net = NULL;
+       kaweth->device_lock = SPIN_LOCK_UNLOCKED;
+
+//     if((result = kaweth_read_configuration(kaweth)) < 0)
+//     {
+//             printk("Resetting (jiffies: %x)...\n", jiffies);
+               printk("Resetting...\n");
+
+               kaweth_reset(kaweth);
+
+//             printk("Dowloading firmware (jiffies: %x)...\n", jiffies);
+                                                                                      
+          
+               if((result = kaweth_download_firmware(kaweth, kaweth_new_code,
len_kaweth_new_code, 100, 2)) < 0)
+               {
+                       printk("Error downloading firmware (%d), no net device 
+created\n",
result);
+
+                       kfree(kaweth);
+                       
+                       return NULL;
+               }
+
+//             printk("Dowloading firmware fix (jiffies: %x)...\n", jiffies);
+
+               if((result = kaweth_download_firmware(kaweth, kaweth_new_code_fix,
len_kaweth_new_code_fix, 100, 3)) < 0)
+               {
+                       printk("Error downloading firmware fix (%d), no net device
created\n", result);
+
+                       kfree(kaweth);
+
+                       return NULL;
+               }
+
+//             printk("Dowloading firmware trigger (jiffies: %x)...\n", jiffies);
+
+               if((result = kaweth_trigger_firmware(kaweth, 100)) < 0)
+               {
+                       printk("Error triggering firmware (%d), no net device 
+created\n",
result);
+
+                       kfree(kaweth);
+
+                       return NULL;
+               }
+
+               udelay(1000);
+
+               printk("Resetting device (jiffies: %lx)...\n", jiffies);
+
+               if(kaweth_reset(kaweth))
+               {
+                       printk("Error resetting device\n");
+
+                       kfree(kaweth);
+
+                       return NULL;
+               }
+
+               printk("Reset device (jiffies: %lx)...\n", jiffies);
+//     }
+
+       result = kaweth_read_configuration(kaweth);
+
+       printk("Statitstics collection: %x\n",
kaweth->configuration.statistics_mask);
+       printk("Multicast filter limit: %x\n",
kaweth->configuration.max_multicast_filters & ((1 << 15) - 1));
+       printk("MTU: %x\n", kaweth->configuration.segment_size);
+       printk("Read MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
+                                (int)kaweth->configuration.hw_addr[0],
+                                (int)kaweth->configuration.hw_addr[1],
+                                (int)kaweth->configuration.hw_addr[2],
+                                (int)kaweth->configuration.hw_addr[3],
+                                (int)kaweth->configuration.hw_addr[4],
+                                (int)kaweth->configuration.hw_addr[5]);
+
+       if(!memcmp(&kaweth->configuration.hw_addr, &bcast_addr,
sizeof(bcast_addr)))
+       {
+               printk("Firmware not functioning properly, no net device created\n");
+
+               kfree(kaweth);
+
+               return NULL;
+       }
+
+       for(i = 0; i < sizeof(kaweth->configuration); i++)
+       {
+               printk(":%2.2x:", (unsigned int)((unsigned char
*)&kaweth->configuration)[i]);
+       }
+
+       printk("\n");
+
+       if(result < 0)
+       {
+               printk("Error reading configuration (%d), no net device created\n",
result);
+
+               return kaweth;
+       }
+
+       result = kaweth_set_urb_size(kaweth, KAWETH_BUF_SIZE);
+
+       if(result < 0)
+       {
+               printk("Error setting URB size\n");
+
+               return kaweth;
+       }
+       
+       result = kaweth_set_sofs_wait(kaweth, KAWETH_SOFS_TO_WAIT);
+
+       if(result < 0)
+       {
+               printk("Error setting SOFS wait\n");
+
+               return kaweth;
+       }
+
+       result = kaweth_set_recieve_filter(kaweth,
KAWETH_PACKET_FILTER_DIRECTED |
+                                                                                      
+                                  KAWETH_PACKET_FILTER_BROADCAST |
+                                                                                      
+                                  KAWETH_PACKET_FILTER_MULTICAST);
+
+       if(result < 0)
+       {
+               printk("Error setting recieve filter\n");
+
+               return kaweth;
+       }
+       
+       printk("Initializing net device...\n");
+
+       kaweth->tx_urb = usb_alloc_urb(0);
+       kaweth->rx_urb = usb_alloc_urb(0);
+
+       kaweth->net = init_etherdev(0, 0);
+
+       memcpy(kaweth->net->broadcast, &bcast_addr, sizeof(bcast_addr));
+       memcpy(kaweth->net->dev_addr, &kaweth->configuration.hw_addr,
sizeof(kaweth->configuration.hw_addr));
+        
+       kaweth->net->priv = kaweth;
+       kaweth->net->open = kaweth_open;
+       kaweth->net->stop = kaweth_close;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 0)
+       kaweth->net->watchdog_timeo = KAWETH_TX_TIMEOUT;
+       kaweth->net->tx_timeout = kaweth_tx_timeout;
+#endif
+       
+       kaweth->net->do_ioctl = kaweth_ioctl;
+       kaweth->net->hard_start_xmit = kaweth_start_xmit;
+       kaweth->net->set_multicast_list = kaweth_set_rx_mode;
+       kaweth->net->get_stats = kaweth_netdev_stats;
+       kaweth->net->mtu = kaweth->configuration.segment_size;
+
+       memset(&kaweth->stats, 0, sizeof(kaweth->stats));
+
+       printk("kaweth interface created at %s\n", kaweth->net->name);
+                                                               
+       printk("Kaweth probe returning...\n");
+
+       return kaweth;
+}
+
+/****************************************************************
+ *     kaweth_disconnect
+ ****************************************************************/
+static void kaweth_disconnect(struct usb_device *dev, void *ptr)
+{
+       struct kaweth_device *kaweth = ptr;
+
+       printk("Unregistering kaweth\n");
+
+       if (!kaweth) {
+               warn("unregistering non-existant device");
+               return;
+       }
+
+       if(kaweth->net)
+       {
+               if(kaweth->net->flags & IFF_UP)
+               {
+                       printk("Closing net device\n");
+                       
+                       dev_close(kaweth->net);
+               }
+
+               printk("Unregistering net device\n");
+               
+               unregister_netdev(kaweth->net);
+       }
+
+       usb_free_urb(kaweth->rx_urb);
+       usb_free_urb(kaweth->tx_urb);
+
+       kfree(kaweth);
+}
+
+
+/****************************************************************
+ *     kaweth_init
+ ****************************************************************/
+int __init kaweth_init(void)
+{
+       printk("Kawasaki USB->Ethernet Driver loading...\n");
+       printk("Mike Zappe <[EMAIL PROTECTED]>, ");
+       printk("Mike Rothwell <[EMAIL PROTECTED]>, ");
+       printk("Sam Coles <[EMAIL PROTECTED]>\n");
+
+       return usb_register(&kaweth_driver);
+}
+
+/****************************************************************
+ *     kaweth_exit
+ ****************************************************************/
+void __exit kaweth_exit(void)
+{
+       usb_deregister(&kaweth_driver);
+}
+
+module_init(kaweth_init);
+module_exit(kaweth_exit);
+
diff -ruN linux-2.4.2virgin/drivers/usb/kawethfw.h
linux/drivers/usb/kawethfw.h
--- linux-2.4.2virgin/drivers/usb/kawethfw.h    Wed Dec 31 19:00:00 1969
+++ linux/drivers/usb/kawethfw.h        Sat Mar 24 13:45:00 2001
@@ -0,0 +1,639 @@
+/******************************************/
+/* NOTE: B6/C3 is data header signature   */
+/*       0xAA/0xBB is data length = total */
+/*       bytes - 7, 0xCC is type, 0xDD is */
+/*       interrupt to use.                */
+/******************************************/
+
+/****************************************************************
+ *     kaweth_trigger_code
+ ****************************************************************/
+static __u8 kaweth_trigger_code[] = 
+{
+    0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
+    0xc8, 0x07, 0xa0, 0x00, 0xf0, 0x07, 0x5e, 0x00,
+    0x06, 0x00, 0xf0, 0x07, 0x0a, 0x00, 0x08, 0x00,
+    0xf0, 0x09, 0x00, 0x00, 0x02, 0x00, 0xe7, 0x07,
+    0x36, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00,
+    0x04, 0x00, 0xe7, 0x07, 0x50, 0xc3, 0x10, 0xc0,
+    0xf0, 0x09, 0x0e, 0xc0, 0x00, 0x00, 0xe7, 0x87,
+    0x01, 0x00, 0x0e, 0xc0, 0x97, 0xcf, 0xd7, 0x09,
+    0x00, 0xc0, 0x17, 0x02, 0xc8, 0x07, 0xa0, 0x00,
+    0xe7, 0x17, 0x50, 0xc3, 0x10, 0xc0, 0x30, 0xd8,
+    0x04, 0x00, 0x30, 0x5c, 0x08, 0x00, 0x04, 0x00,
+    0xb0, 0xc0, 0x06, 0x00, 0xc8, 0x05, 0xe7, 0x05,
+    0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0x49, 0xaf,
+    0xc0, 0x07, 0x00, 0x00, 0x60, 0xaf, 0x4a, 0xaf,
+    0x00, 0x0c, 0x0c, 0x00, 0x40, 0xd2, 0x00, 0x1c,
+    0x0c, 0x00, 0x40, 0xd2, 0x30, 0x00, 0x08, 0x00,
+    0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x07,
+    0x86, 0x00, 0x06, 0x00, 0x67, 0xcf, 0x27, 0x0c,
+    0x02, 0x00, 0x00, 0x00, 0x27, 0x0c, 0x00, 0x00,
+    0x0e, 0xc0, 0x49, 0xaf, 0x64, 0xaf, 0xc0, 0x07,
+    0x00, 0x00, 0x4b, 0xaf, 0x4a, 0xaf, 0x5a, 0xcf,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
+    0,    0
+};
+
+/****************************************************************
+ *     kaweth_trigger_code_fix
+ ****************************************************************/
+static __u8 kaweth_trigger_code_fix[] = 
+{
+    0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
+    0x02, 0x00, 0x06, 0x00, 0x18, 0x00, 0x3e, 0x00,
+    0x80, 0x00, 0x98, 0x00, 0xaa, 0x00,
+    0,    0
+};
+
+/****************************************************************
+ *     kaweth_new_code
+ ****************************************************************/
+static __u8 kaweth_new_code[] = 
+{
+    0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
+    0x9f, 0xcf, 0xbc, 0x08, 0xe7, 0x57, 0x00, 0x00,
+    0x9a, 0x08, 0x97, 0xc1, 0xe7, 0x67, 0xff, 0x1f,
+    0x28, 0xc0, 0xe7, 0x87, 0x00, 0x04, 0x24, 0xc0,
+    0xe7, 0x67, 0xff, 0xf9, 0x22, 0xc0, 0x97, 0xcf,
+    0xe7, 0x09, 0xa2, 0xc0, 0x94, 0x08, 0xd7, 0x09,
+    0x00, 0xc0, 0xe7, 0x59, 0xba, 0x08, 0x94, 0x08,
+    0x03, 0xc1, 0xe7, 0x67, 0xff, 0xf7, 0x24, 0xc0,
+    0xe7, 0x05, 0x00, 0xc0, 0xa7, 0xcf, 0x92, 0x08,
+    0xe7, 0x57, 0x00, 0x00, 0x8e, 0x08, 0xa7, 0xa1,
+    0x8e, 0x08, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
+    0xf2, 0x09, 0x0a, 0xc0, 0xe7, 0x57, 0x00, 0x00,
+    0xa4, 0xc0, 0xa7, 0xc0, 0x56, 0x08, 0x9f, 0xaf,
+    0x70, 0x09, 0xe7, 0x07, 0x00, 0x00, 0xf2, 0x09,
+    0xe7, 0x57, 0xff, 0xff, 0x90, 0x08, 0x9f, 0xa0,
+    0x40, 0x00, 0xe7, 0x59, 0x90, 0x08, 0x94, 0x08,
+    0x9f, 0xa0, 0x40, 0x00, 0xc8, 0x09, 0xa2, 0x08,
+    0x08, 0x62, 0x9f, 0xa1, 0x14, 0x0a, 0xe7, 0x57,
+    0x00, 0x00, 0x52, 0x08, 0xa7, 0xc0, 0x56, 0x08,
+    0x9f, 0xaf, 0x04, 0x00, 0xe7, 0x57, 0x00, 0x00,
+    0x8e, 0x08, 0xa7, 0xc1, 0x56, 0x08, 0xc0, 0x09,
+    0xa8, 0x08, 0x00, 0x60, 0x05, 0xc4, 0xc0, 0x59,
+    0x94, 0x08, 0x02, 0xc0, 0x9f, 0xaf, 0xee, 0x00,
+    0xe7, 0x59, 0xae, 0x08, 0x94, 0x08, 0x02, 0xc1,
+    0x9f, 0xaf, 0xf6, 0x00, 0x9f, 0xaf, 0x9e, 0x03,
+    0xef, 0x57, 0x00, 0x00, 0xf0, 0x09, 0x9f, 0xa1,
+    0xde, 0x01, 0xe7, 0x57, 0x00, 0x00, 0x78, 0x08,
+    0x9f, 0xa0, 0xe4, 0x03, 0x9f, 0xaf, 0x2c, 0x04,
+    0xa7, 0xcf, 0x56, 0x08, 0x48, 0x02, 0xe7, 0x09,
+    0x94, 0x08, 0xa8, 0x08, 0xc8, 0x37, 0x04, 0x00,
+    0x9f, 0xaf, 0x68, 0x04, 0x97, 0xcf, 0xe7, 0x57,
+    0x00, 0x00, 0xa6, 0x08, 0x97, 0xc0, 0xd7, 0x09,
+    0x00, 0xc0, 0xc1, 0xdf, 0xc8, 0x09, 0x9c, 0x08,
+    0x08, 0x62, 0x1d, 0xc0, 0x27, 0x04, 0x9c, 0x08,
+    0x10, 0x94, 0xf0, 0x07, 0xee, 0x09, 0x02, 0x00,
+    0xc1, 0x07, 0x01, 0x00, 0x70, 0x00, 0x04, 0x00,
+    0xf0, 0x07, 0x44, 0x01, 0x06, 0x00, 0x50, 0xaf,
+    0xe7, 0x09, 0x94, 0x08, 0xae, 0x08, 0xe7, 0x17,
+    0x14, 0x00, 0xae, 0x08, 0xe7, 0x67, 0xff, 0x07,
+    0xae, 0x08, 0xe7, 0x07, 0xff, 0xff, 0xa8, 0x08,
+    0xe7, 0x07, 0x00, 0x00, 0xa6, 0x08, 0xe7, 0x05,
+    0x00, 0xc0, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0,
+    0xc1, 0xdf, 0x48, 0x02, 0xd0, 0x09, 0x9c, 0x08,
+    0x27, 0x02, 0x9c, 0x08, 0xe7, 0x09, 0x20, 0xc0,
+    0xee, 0x09, 0xe7, 0xd0, 0xee, 0x09, 0xe7, 0x05,
+    0x00, 0xc0, 0x97, 0xcf, 0x48, 0x02, 0xc8, 0x37,
+    0x04, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x60,
+    0x21, 0xc0, 0xc0, 0x37, 0x3e, 0x00, 0x23, 0xc9,
+    0xc0, 0x57, 0xb4, 0x05, 0x1b, 0xc8, 0xc0, 0x17,
+    0x3f, 0x00, 0xc0, 0x67, 0xc0, 0xff, 0x30, 0x00,
+    0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00,
+    0x00, 0x02, 0xc0, 0x17, 0x4c, 0x00, 0x30, 0x00,
+    0x06, 0x00, 0xf0, 0x07, 0xbe, 0x01, 0x0a, 0x00,
+    0x48, 0x02, 0xc1, 0x07, 0x02, 0x00, 0xd7, 0x09,
+    0x00, 0xc0, 0xc1, 0xdf, 0x51, 0xaf, 0xe7, 0x05,
+    0x00, 0xc0, 0x97, 0xcf, 0x9f, 0xaf, 0x68, 0x04,
+    0x9f, 0xaf, 0xe4, 0x03, 0x97, 0xcf, 0x9f, 0xaf,
+    0xe4, 0x03, 0xc9, 0x37, 0x04, 0x00, 0xc1, 0xdf,
+    0xc8, 0x09, 0x70, 0x08, 0x50, 0x02, 0x67, 0x02,
+    0x70, 0x08, 0xd1, 0x07, 0x00, 0x00, 0xc0, 0xdf,
+    0x9f, 0xaf, 0xde, 0x01, 0x97, 0xcf, 0xe7, 0x57,
+    0x00, 0x00, 0xaa, 0x08, 0x97, 0xc1, 0xe7, 0x57,
+    0x01, 0x00, 0x7a, 0x08, 0x97, 0xc0, 0xc8, 0x09,
+    0x6e, 0x08, 0x08, 0x62, 0x97, 0xc0, 0x00, 0x02,
+    0xc0, 0x17, 0x0e, 0x00, 0x27, 0x00, 0x34, 0x01,
+    0x27, 0x0c, 0x0c, 0x00, 0x36, 0x01, 0xef, 0x57,
+    0x00, 0x00, 0xf0, 0x09, 0x9f, 0xc0, 0xbe, 0x02,
+    0xe7, 0x57, 0x00, 0x00, 0xb0, 0x08, 0x97, 0xc1,
+    0xe7, 0x07, 0x09, 0x00, 0x12, 0xc0, 0xe7, 0x77,
+    0x00, 0x08, 0x20, 0xc0, 0x9f, 0xc1, 0xb6, 0x02,
+    0xe7, 0x57, 0x09, 0x00, 0x12, 0xc0, 0x77, 0xc9,
+    0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0xe7, 0x77,
+    0x00, 0x08, 0x20, 0xc0, 0x2f, 0xc1, 0xe7, 0x07,
+    0x00, 0x00, 0x42, 0xc0, 0xe7, 0x07, 0x05, 0x00,
+    0x90, 0xc0, 0xc8, 0x07, 0x0a, 0x00, 0xe7, 0x77,
+    0x04, 0x00, 0x20, 0xc0, 0x09, 0xc1, 0x08, 0xda,
+    0x7a, 0xc1, 0xe7, 0x07, 0x00, 0x01, 0x42, 0xc0,
+    0xe7, 0x07, 0x04, 0x00, 0x90, 0xc0, 0x1a, 0xcf,
+    0xe7, 0x07, 0x01, 0x00, 0x7a, 0x08, 0x00, 0xd8,
+    0x27, 0x50, 0x34, 0x01, 0x17, 0xc1, 0xe7, 0x77,
+    0x02, 0x00, 0x20, 0xc0, 0x79, 0xc1, 0x27, 0x50,
+    0x34, 0x01, 0x10, 0xc1, 0xe7, 0x77, 0x02, 0x00,
+    0x20, 0xc0, 0x79, 0xc0, 0x9f, 0xaf, 0xd8, 0x02,
+    0xe7, 0x05, 0x00, 0xc0, 0x00, 0x60, 0x9f, 0xc0,
+    0xde, 0x01, 0x97, 0xcf, 0xe7, 0x07, 0x01, 0x00,
+    0xb8, 0x08, 0x06, 0xcf, 0xe7, 0x07, 0x30, 0x0e,
+    0x02, 0x00, 0xe7, 0x07, 0x50, 0xc3, 0x12, 0xc0,
+    0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0xe7, 0x07,
+    0x01, 0x00, 0xb8, 0x08, 0x97, 0xcf, 0xe7, 0x07,
+    0x50, 0xc3, 0x12, 0xc0, 0xe7, 0x07, 0x30, 0x0e,
+    0x02, 0x00, 0xe7, 0x07, 0x01, 0x00, 0x7a, 0x08,
+    0xe7, 0x07, 0x05, 0x00, 0x90, 0xc0, 0x97, 0xcf,
+    0xe7, 0x07, 0x00, 0x01, 0x42, 0xc0, 0xe7, 0x07,
+    0x04, 0x00, 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x00,
+    0x7a, 0x08, 0xe7, 0x57, 0x0f, 0x00, 0xb2, 0x08,
+    0x13, 0xc1, 0x9f, 0xaf, 0x2e, 0x08, 0xca, 0x09,
+    0xac, 0x08, 0xf2, 0x17, 0x01, 0x00, 0x5c, 0x00,
+    0xf2, 0x27, 0x00, 0x00, 0x5e, 0x00, 0xe7, 0x07,
+    0x00, 0x00, 0xb2, 0x08, 0xe7, 0x07, 0x01, 0x00,
+    0xb4, 0x08, 0xc0, 0x07, 0xff, 0xff, 0x97, 0xcf,
+    0x9f, 0xaf, 0x4c, 0x03, 0xc0, 0x69, 0xb4, 0x08,
+    0x57, 0x00, 0x9f, 0xde, 0x33, 0x00, 0xc1, 0x05,
+    0x27, 0xd8, 0xb2, 0x08, 0x27, 0xd2, 0xb4, 0x08,
+    0xe7, 0x87, 0x01, 0x00, 0xb4, 0x08, 0xe7, 0x67,
+    0xff, 0x03, 0xb4, 0x08, 0x00, 0x60, 0x97, 0xc0,
+    0xe7, 0x07, 0x01, 0x00, 0xb0, 0x08, 0x27, 0x00,
+    0x12, 0xc0, 0x97, 0xcf, 0xc0, 0x09, 0xb6, 0x08,
+    0x00, 0xd2, 0x02, 0xc3, 0xc0, 0x97, 0x05, 0x80,
+    0x27, 0x00, 0xb6, 0x08, 0xc0, 0x99, 0x82, 0x08,
+    0xc0, 0x99, 0xa2, 0xc0, 0x97, 0xcf, 0xe7, 0x07,
+    0x00, 0x00, 0xb0, 0x08, 0xc0, 0xdf, 0x97, 0xcf,
+    0xc8, 0x09, 0x72, 0x08, 0x08, 0x62, 0x02, 0xc0,
+    0x10, 0x64, 0x07, 0xc1, 0xe7, 0x07, 0x00, 0x00,
+    0x64, 0x08, 0xe7, 0x07, 0xc8, 0x05, 0x24, 0x00,
+    0x97, 0xcf, 0x27, 0x04, 0x72, 0x08, 0xc8, 0x17,
+    0x0e, 0x00, 0x27, 0x02, 0x64, 0x08, 0xe7, 0x07,
+    0xd6, 0x05, 0x24, 0x00, 0x97, 0xcf, 0xd7, 0x09,
+    0x00, 0xc0, 0xc1, 0xdf, 0xe7, 0x57, 0x00, 0x00,
+    0x62, 0x08, 0x13, 0xc1, 0x9f, 0xaf, 0x70, 0x03,
+    0xe7, 0x57, 0x00, 0x00, 0x64, 0x08, 0x13, 0xc0,
+    0xe7, 0x09, 0x64, 0x08, 0x30, 0x01, 0xe7, 0x07,
+    0xf2, 0x05, 0x32, 0x01, 0xe7, 0x07, 0x10, 0x00,
+    0x96, 0xc0, 0xe7, 0x09, 0x64, 0x08, 0x62, 0x08,
+    0x04, 0xcf, 0xe7, 0x57, 0x00, 0x00, 0x64, 0x08,
+    0x02, 0xc1, 0x9f, 0xaf, 0x70, 0x03, 0xe7, 0x05,
+    0x00, 0xc0, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0,
+    0xc1, 0xdf, 0xc8, 0x09, 0x72, 0x08, 0x27, 0x02,
+    0x78, 0x08, 0x08, 0x62, 0x03, 0xc1, 0xe7, 0x05,
+    0x00, 0xc0, 0x97, 0xcf, 0x27, 0x04, 0x72, 0x08,
+    0xe7, 0x05, 0x00, 0xc0, 0xf0, 0x07, 0x40, 0x00,
+    0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00,
+    0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00,
+    0x06, 0x00, 0xf0, 0x07, 0x64, 0x01, 0x0a, 0x00,
+    0xc8, 0x17, 0x04, 0x00, 0xc1, 0x07, 0x02, 0x00,
+    0x51, 0xaf, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
+    0x6a, 0x08, 0x97, 0xc0, 0xc1, 0xdf, 0xc8, 0x09,
+    0x6a, 0x08, 0x27, 0x04, 0x6a, 0x08, 0x27, 0x52,
+    0x6c, 0x08, 0x03, 0xc1, 0xe7, 0x07, 0x6a, 0x08,
+    0x6c, 0x08, 0xc0, 0xdf, 0x17, 0x02, 0xc8, 0x17,
+    0x0e, 0x00, 0x9f, 0xaf, 0x16, 0x05, 0xc8, 0x05,
+    0x00, 0x60, 0x03, 0xc0, 0x9f, 0xaf, 0x80, 0x04,
+    0x97, 0xcf, 0x9f, 0xaf, 0x68, 0x04, 0x97, 0xcf,
+    0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x08, 0x62,
+    0x1c, 0xc0, 0xd0, 0x09, 0x72, 0x08, 0x27, 0x02,
+    0x72, 0x08, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf,
+    0x97, 0x02, 0xca, 0x09, 0xac, 0x08, 0xf2, 0x17,
+    0x01, 0x00, 0x04, 0x00, 0xf2, 0x27, 0x00, 0x00,
+    0x06, 0x00, 0xca, 0x17, 0x2c, 0x00, 0xf8, 0x77,
+    0x01, 0x00, 0x0e, 0x00, 0x06, 0xc0, 0xca, 0xd9,
+    0xf8, 0x57, 0xff, 0x00, 0x0e, 0x00, 0x01, 0xc1,
+    0xca, 0xd9, 0x22, 0x1c, 0x0c, 0x00, 0xe2, 0x27,
+    0x00, 0x00, 0xe2, 0x17, 0x01, 0x00, 0xe2, 0x27,
+    0x00, 0x00, 0xca, 0x05, 0x00, 0x0c, 0x0c, 0x00,
+    0xc0, 0x17, 0x41, 0x00, 0xc0, 0x67, 0xc0, 0xff,
+    0x30, 0x00, 0x08, 0x00, 0x00, 0x02, 0xc0, 0x17,
+    0x0c, 0x00, 0x30, 0x00, 0x06, 0x00, 0xf0, 0x07,
+    0xdc, 0x00, 0x0a, 0x00, 0xf0, 0x07, 0x00, 0x00,
+    0x04, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x40, 0xd1,
+    0x01, 0x00, 0xc0, 0x19, 0xa6, 0x08, 0xc0, 0x59,
+    0x98, 0x08, 0x04, 0xc9, 0x49, 0xaf, 0x9f, 0xaf,
+    0xee, 0x00, 0x4a, 0xaf, 0x67, 0x10, 0xa6, 0x08,
+    0xc8, 0x17, 0x04, 0x00, 0xc1, 0x07, 0x01, 0x00,
+    0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x50, 0xaf,
+    0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0xc0, 0x07,
+    0x01, 0x00, 0xc1, 0x09, 0x7c, 0x08, 0xc1, 0x77,
+    0x01, 0x00, 0x97, 0xc1, 0xd8, 0x77, 0x01, 0x00,
+    0x12, 0xc0, 0xc9, 0x07, 0x4c, 0x08, 0x9f, 0xaf,
+    0x64, 0x05, 0x04, 0xc1, 0xc1, 0x77, 0x08, 0x00,
+    0x13, 0xc0, 0x97, 0xcf, 0xc1, 0x77, 0x02, 0x00,
+    0x97, 0xc1, 0xc1, 0x77, 0x10, 0x00, 0x0c, 0xc0,
+    0x9f, 0xaf, 0x86, 0x05, 0x97, 0xcf, 0xc1, 0x77,
+    0x04, 0x00, 0x06, 0xc0, 0xc9, 0x07, 0x7e, 0x08,
+    0x9f, 0xaf, 0x64, 0x05, 0x97, 0xc0, 0x00, 0xcf,
+    0x00, 0x90, 0x97, 0xcf, 0x50, 0x54, 0x97, 0xc1,
+    0x70, 0x5c, 0x02, 0x00, 0x02, 0x00, 0x97, 0xc1,
+    0x70, 0x5c, 0x04, 0x00, 0x04, 0x00, 0x97, 0xcf,
+    0xc0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00,
+    0x0c, 0x00, 0x06, 0x00, 0x00, 0x00, 0xcb, 0x09,
+    0x88, 0x08, 0xcc, 0x09, 0x8a, 0x08, 0x0b, 0x53,
+    0x11, 0xc0, 0xc9, 0x02, 0xca, 0x07, 0x78, 0x05,
+    0x9f, 0xaf, 0x64, 0x05, 0x97, 0xc0, 0x0a, 0xc8,
+    0x82, 0x08, 0x0a, 0xcf, 0x82, 0x08, 0x9f, 0xaf,
+    0x64, 0x05, 0x97, 0xc0, 0x05, 0xc2, 0x89, 0x30,
+    0x82, 0x60, 0x78, 0xc1, 0x00, 0x90, 0x97, 0xcf,
+    0x89, 0x10, 0x09, 0x53, 0x79, 0xc2, 0x89, 0x30,
+    0x82, 0x08, 0x7a, 0xcf, 0xc0, 0xdf, 0x97, 0xcf,
+    0xe7, 0x09, 0x96, 0xc0, 0x66, 0x08, 0xe7, 0x09,
+    0x98, 0xc0, 0x68, 0x08, 0x0f, 0xcf, 0xe7, 0x09,
+    0x96, 0xc0, 0x66, 0x08, 0xe7, 0x09, 0x98, 0xc0,
+    0x68, 0x08, 0xe7, 0x09, 0x64, 0x08, 0x30, 0x01,
+    0xe7, 0x07, 0xf2, 0x05, 0x32, 0x01, 0xe7, 0x07,
+    0x10, 0x00, 0x96, 0xc0, 0xd7, 0x09, 0x00, 0xc0,
+    0x17, 0x02, 0xc8, 0x09, 0x62, 0x08, 0xc8, 0x37,
+    0x0e, 0x00, 0xe7, 0x57, 0x04, 0x00, 0x68, 0x08,
+    0x3d, 0xc0, 0xe7, 0x87, 0x00, 0x08, 0x24, 0xc0,
+    0xe7, 0x09, 0x94, 0x08, 0xba, 0x08, 0xe7, 0x17,
+    0x64, 0x00, 0xba, 0x08, 0xe7, 0x67, 0xff, 0x07,
+    0xba, 0x08, 0xe7, 0x77, 0x2a, 0x00, 0x66, 0x08,
+    0x30, 0xc0, 0x97, 0x02, 0xca, 0x09, 0xac, 0x08,
+    0xe7, 0x77, 0x20, 0x00, 0x66, 0x08, 0x0e, 0xc0,
+    0xf2, 0x17, 0x01, 0x00, 0x10, 0x00, 0xf2, 0x27,
+    0x00, 0x00, 0x12, 0x00, 0xe7, 0x77, 0x0a, 0x00,
+    0x66, 0x08, 0xca, 0x05, 0x1e, 0xc0, 0x97, 0x02,
+    0xca, 0x09, 0xac, 0x08, 0xf2, 0x17, 0x01, 0x00,
+    0x0c, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x0e, 0x00,
+    0xe7, 0x77, 0x02, 0x00, 0x66, 0x08, 0x07, 0xc0,
+    0xf2, 0x17, 0x01, 0x00, 0x44, 0x00, 0xf2, 0x27,
+    0x00, 0x00, 0x46, 0x00, 0x06, 0xcf, 0xf2, 0x17,
+    0x01, 0x00, 0x60, 0x00, 0xf2, 0x27, 0x00, 0x00,
+    0x62, 0x00, 0xca, 0x05, 0x9f, 0xaf, 0x68, 0x04,
+    0x0f, 0xcf, 0x57, 0x02, 0x09, 0x02, 0xf1, 0x09,
+    0x68, 0x08, 0x0c, 0x00, 0xf1, 0xda, 0x0c, 0x00,
+    0xc8, 0x09, 0x6c, 0x08, 0x50, 0x02, 0x67, 0x02,
+    0x6c, 0x08, 0xd1, 0x07, 0x00, 0x00, 0xc9, 0x05,
+    0xe7, 0x09, 0x64, 0x08, 0x62, 0x08, 0xe7, 0x57,
+    0x00, 0x00, 0x62, 0x08, 0x02, 0xc0, 0x9f, 0xaf,
+    0x70, 0x03, 0xc8, 0x05, 0xe7, 0x05, 0x00, 0xc0,
+    0xc0, 0xdf, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0,
+    0x17, 0x00, 0x17, 0x02, 0x97, 0x02, 0xc0, 0x09,
+    0x92, 0xc0, 0xe7, 0x87, 0x00, 0x08, 0x24, 0xc0,
+    0xe7, 0x09, 0x94, 0x08, 0xba, 0x08, 0xe7, 0x17,
+    0x64, 0x00, 0xba, 0x08, 0xe7, 0x67, 0xff, 0x07,
+    0xba, 0x08, 0xe7, 0x07, 0x04, 0x00, 0x90, 0xc0,
+    0xca, 0x09, 0xac, 0x08, 0xe7, 0x07, 0x00, 0x00,
+    0x7a, 0x08, 0xe7, 0x07, 0x66, 0x03, 0x02, 0x00,
+    0xc0, 0x77, 0x02, 0x00, 0x10, 0xc0, 0xef, 0x57,
+    0x00, 0x00, 0xf0, 0x09, 0x04, 0xc0, 0x9f, 0xaf,
+    0xd8, 0x02, 0x9f, 0xcf, 0x12, 0x08, 0xf2, 0x17,
+    0x01, 0x00, 0x50, 0x00, 0xf2, 0x27, 0x00, 0x00,
+    0x52, 0x00, 0x9f, 0xcf, 0x12, 0x08, 0xef, 0x57,
+    0x00, 0x00, 0xf0, 0x09, 0x08, 0xc0, 0xe7, 0x57,
+    0x00, 0x00, 0xb8, 0x08, 0xe7, 0x07, 0x00, 0x00,
+    0xb8, 0x08, 0x0a, 0xc0, 0x03, 0xcf, 0xc0, 0x77,
+    0x10, 0x00, 0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00,
+    0x58, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x5a, 0x00,
+    0xc0, 0x77, 0x80, 0x00, 0x06, 0xc0, 0xf2, 0x17,
+    0x01, 0x00, 0x70, 0x00, 0xf2, 0x27, 0x00, 0x00,
+    0x72, 0x00, 0xc0, 0x77, 0x08, 0x00, 0x1d, 0xc1,
+    0xf2, 0x17, 0x01, 0x00, 0x08, 0x00, 0xf2, 0x27,
+    0x00, 0x00, 0x0a, 0x00, 0xc0, 0x77, 0x00, 0x02,
+    0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x64, 0x00,
+    0xf2, 0x27, 0x00, 0x00, 0x66, 0x00, 0xc0, 0x77,
+    0x40, 0x00, 0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00,
+    0x5c, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x5e, 0x00,
+    0xc0, 0x77, 0x01, 0x00, 0x01, 0xc0, 0x37, 0xcf,
+    0x36, 0xcf, 0xf2, 0x17, 0x01, 0x00, 0x00, 0x00,
+    0xf2, 0x27, 0x00, 0x00, 0x02, 0x00, 0xef, 0x57,
+    0x00, 0x00, 0xf0, 0x09, 0x18, 0xc0, 0xe7, 0x57,
+    0x01, 0x00, 0xb2, 0x08, 0x0e, 0xc2, 0x07, 0xc8,
+    0xf2, 0x17, 0x01, 0x00, 0x50, 0x00, 0xf2, 0x27,
+    0x00, 0x00, 0x52, 0x00, 0x06, 0xcf, 0xf2, 0x17,
+    0x01, 0x00, 0x54, 0x00, 0xf2, 0x27, 0x00, 0x00,
+    0x56, 0x00, 0xe7, 0x07, 0x00, 0x00, 0xb2, 0x08,
+    0xe7, 0x07, 0x01, 0x00, 0xb4, 0x08, 0xc8, 0x09,
+    0x34, 0x01, 0xca, 0x17, 0x14, 0x00, 0xd8, 0x77,
+    0x01, 0x00, 0x05, 0xc0, 0xca, 0xd9, 0xd8, 0x57,
+    0xff, 0x00, 0x01, 0xc0, 0xca, 0xd9, 0xe2, 0x19,
+    0x94, 0xc0, 0xe2, 0x27, 0x00, 0x00, 0xe2, 0x17,
+    0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, 0x9f, 0xaf,
+    0x2e, 0x08, 0x9f, 0xaf, 0xde, 0x01, 0xe7, 0x57,
+    0x00, 0x00, 0xaa, 0x08, 0x9f, 0xa1, 0xf0, 0x0b,
+    0xca, 0x05, 0xc8, 0x05, 0xc0, 0x05, 0xe7, 0x05,
+    0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0xc8, 0x09,
+    0x6e, 0x08, 0x08, 0x62, 0x97, 0xc0, 0x27, 0x04,
+    0x6e, 0x08, 0x27, 0x52, 0x70, 0x08, 0x03, 0xc1,
+    0xe7, 0x07, 0x6e, 0x08, 0x70, 0x08, 0x9f, 0xaf,
+    0x68, 0x04, 0x97, 0xcf, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x33, 0xcc,
+    0x00, 0x00, 0x00, 0x00, 0xe7, 0x57, 0x00, 0x80,
+    0xb2, 0x00, 0x06, 0xc2, 0xe7, 0x07, 0x52, 0x0e,
+    0x12, 0x00, 0xe7, 0x07, 0x98, 0x0e, 0xb2, 0x00,
+    0xe7, 0x07, 0xa4, 0x09, 0xf2, 0x02, 0xc8, 0x09,
+    0xb4, 0x00, 0xf8, 0x07, 0x02, 0x00, 0x0d, 0x00,
+    0xd7, 0x09, 0x0e, 0xc0, 0xe7, 0x07, 0x00, 0x00,
+    0x0e, 0xc0, 0xc8, 0x09, 0xdc, 0x00, 0xf0, 0x07,
+    0xff, 0xff, 0x09, 0x00, 0xf0, 0x07, 0xfb, 0x13,
+    0x0b, 0x00, 0xe7, 0x09, 0xc0, 0x00, 0x58, 0x08,
+    0xe7, 0x09, 0xbe, 0x00, 0x54, 0x08, 0xe7, 0x09,
+    0x10, 0x00, 0x92, 0x08, 0xc8, 0x07, 0xb4, 0x09,
+    0x9f, 0xaf, 0x8c, 0x09, 0x9f, 0xaf, 0xe2, 0x0b,
+    0xc0, 0x07, 0x80, 0x01, 0x44, 0xaf, 0x27, 0x00,
+    0x88, 0x08, 0x27, 0x00, 0x8a, 0x08, 0x27, 0x00,
+    0x8c, 0x08, 0xc0, 0x07, 0x74, 0x00, 0x44, 0xaf,
+    0x27, 0x00, 0xac, 0x08, 0x08, 0x00, 0x00, 0x90,
+    0xc1, 0x07, 0x1d, 0x00, 0x20, 0x00, 0x20, 0x00,
+    0x01, 0xda, 0x7c, 0xc1, 0x9f, 0xaf, 0x8a, 0x0b,
+    0xc0, 0x07, 0x4c, 0x00, 0x48, 0xaf, 0x27, 0x00,
+    0x56, 0x08, 0x9f, 0xaf, 0x72, 0x0c, 0xe7, 0x07,
+    0x00, 0x80, 0x96, 0x08, 0xef, 0x57, 0x00, 0x00,
+    0xf0, 0x09, 0x03, 0xc0, 0xe7, 0x07, 0x01, 0x00,
+    0x1c, 0xc0, 0xe7, 0x05, 0x0e, 0xc0, 0x97, 0xcf,
+    0x49, 0xaf, 0xe7, 0x87, 0x43, 0x00, 0x0e, 0xc0,
+    0xe7, 0x07, 0xff, 0xff, 0x94, 0x08, 0x9f, 0xaf,
+    0x8a, 0x0c, 0xc0, 0x07, 0x01, 0x00, 0x60, 0xaf,
+    0x4a, 0xaf, 0x97, 0xcf, 0x00, 0x08, 0x09, 0x08,
+    0x11, 0x08, 0x00, 0xda, 0x7c, 0xc1, 0x97, 0xcf,
+    0x67, 0x04, 0xcc, 0x02, 0xc0, 0xdf, 0x51, 0x94,
+    0xb1, 0xaf, 0x06, 0x00, 0xc1, 0xdf, 0xc9, 0x09,
+    0xcc, 0x02, 0x49, 0x62, 0x75, 0xc1, 0xc0, 0xdf,
+    0xa7, 0xcf, 0xd6, 0x02, 0x0e, 0x00, 0x24, 0x00,
+    0xd6, 0x05, 0x22, 0x00, 0xc4, 0x06, 0xd0, 0x00,
+    0xf0, 0x0b, 0xaa, 0x00, 0x0e, 0x0a, 0xbe, 0x00,
+    0x2c, 0x0c, 0x10, 0x00, 0x20, 0x00, 0x04, 0x00,
+    0xc4, 0x05, 0x02, 0x00, 0x66, 0x03, 0x06, 0x00,
+    0x00, 0x00, 0x24, 0xc0, 0x04, 0x04, 0x28, 0xc0,
+    0xfe, 0xfb, 0x1e, 0xc0, 0x00, 0x04, 0x22, 0xc0,
+    0xff, 0xf0, 0xc0, 0x00, 0x60, 0x0b, 0x00, 0x00,
+    0x00, 0x00, 0xff, 0xff, 0x34, 0x0a, 0x3e, 0x0a,
+    0x9e, 0x0a, 0xa8, 0x0a, 0xce, 0x0a, 0xd2, 0x0a,
+    0xd6, 0x0a, 0x00, 0x0b, 0x10, 0x0b, 0x1e, 0x0b,
+    0x20, 0x0b, 0x28, 0x0b, 0x28, 0x0b, 0x27, 0x02,
+    0xa2, 0x08, 0x97, 0xcf, 0xe7, 0x07, 0x00, 0x00,
+    0xa2, 0x08, 0x0a, 0x0e, 0x01, 0x00, 0xca, 0x57,
+    0x0e, 0x00, 0x9f, 0xc3, 0x2a, 0x0b, 0xca, 0x37,
+    0x00, 0x00, 0x9f, 0xc2, 0x2a, 0x0b, 0x0a, 0xd2,
+    0xb2, 0xcf, 0xf4, 0x09, 0xc8, 0x09, 0xde, 0x00,
+    0x07, 0x06, 0x9f, 0xcf, 0x3c, 0x0b, 0xf0, 0x57,
+    0x80, 0x01, 0x06, 0x00, 0x9f, 0xc8, 0x2a, 0x0b,
+    0x27, 0x0c, 0x02, 0x00, 0x86, 0x08, 0xc0, 0x09,
+    0x88, 0x08, 0x27, 0x00, 0x8a, 0x08, 0xe7, 0x07,
+    0x00, 0x00, 0x84, 0x08, 0x27, 0x00, 0x5c, 0x08,
+    0x00, 0x1c, 0x06, 0x00, 0x27, 0x00, 0x8c, 0x08,
+    0x41, 0x90, 0x67, 0x50, 0x86, 0x08, 0x0d, 0xc0,
+    0x67, 0x00, 0x5a, 0x08, 0x27, 0x0c, 0x06, 0x00,
+    0x5e, 0x08, 0xe7, 0x07, 0x8a, 0x0a, 0x60, 0x08,
+    0xc8, 0x07, 0x5a, 0x08, 0x41, 0x90, 0x51, 0xaf,
+    0x97, 0xcf, 0x9f, 0xaf, 0xac, 0x0e, 0xe7, 0x09,
+    0x8c, 0x08, 0x8a, 0x08, 0xe7, 0x09, 0x86, 0x08,
+    0x84, 0x08, 0x59, 0xaf, 0x97, 0xcf, 0x27, 0x0c,
+    0x02, 0x00, 0x7c, 0x08, 0x59, 0xaf, 0x97, 0xcf,
+    0x09, 0x0c, 0x02, 0x00, 0x09, 0xda, 0x49, 0xd2,
+    0xc9, 0x19, 0xac, 0x08, 0xc8, 0x07, 0x5a, 0x08,
+    0xe0, 0x07, 0x00, 0x00, 0x60, 0x02, 0xe0, 0x07,
+    0x04, 0x00, 0xd0, 0x07, 0x9a, 0x0a, 0x48, 0xdb,
+    0x41, 0x90, 0x50, 0xaf, 0x97, 0xcf, 0x59, 0xaf,
+    0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf, 0xf0, 0x57,
+    0x06, 0x00, 0x06, 0x00, 0x26, 0xc1, 0xe7, 0x07,
+    0x7e, 0x08, 0x5c, 0x08, 0x41, 0x90, 0x67, 0x00,
+    0x5a, 0x08, 0x27, 0x0c, 0x06, 0x00, 0x5e, 0x08,
+    0xe7, 0x07, 0x5c, 0x0b, 0x60, 0x08, 0xc8, 0x07,
+    0x5a, 0x08, 0x41, 0x90, 0x51, 0xaf, 0x97, 0xcf,
+    0x07, 0x0c, 0x06, 0x00, 0xc7, 0x57, 0x06, 0x00,
+    0x10, 0xc1, 0xc8, 0x07, 0x7e, 0x08, 0x16, 0xcf,
+    0x00, 0x0c, 0x02, 0x00, 0x00, 0xda, 0x40, 0xd1,
+    0x27, 0x00, 0x98, 0x08, 0x1f, 0xcf, 0x1e, 0xcf,
+    0x27, 0x0c, 0x02, 0x00, 0xa4, 0x08, 0x1a, 0xcf,
+    0x00, 0xcf, 0x27, 0x02, 0x20, 0x01, 0xe7, 0x07,
+    0x08, 0x00, 0x22, 0x01, 0xe7, 0x07, 0x13, 0x00,
+    0xb0, 0xc0, 0x97, 0xcf, 0x41, 0x90, 0x67, 0x00,
+    0x5a, 0x08, 0xe7, 0x01, 0x5e, 0x08, 0x27, 0x02,
+    0x5c, 0x08, 0xe7, 0x07, 0x5c, 0x0b, 0x60, 0x08,
+    0xc8, 0x07, 0x5a, 0x08, 0xc1, 0x07, 0x00, 0x80,
+    0x50, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf,
+    0x00, 0x60, 0x05, 0xc0, 0xe7, 0x07, 0x00, 0x00,
+    0x9a, 0x08, 0xa7, 0xcf, 0x58, 0x08, 0x9f, 0xaf,
+    0xe2, 0x0b, 0xe7, 0x07, 0x01, 0x00, 0x9a, 0x08,
+    0x49, 0xaf, 0xd7, 0x09, 0x00, 0xc0, 0x07, 0xaf,
+    0xe7, 0x05, 0x00, 0xc0, 0x4a, 0xaf, 0xa7, 0xcf,
+    0x58, 0x08, 0xc0, 0x07, 0x40, 0x00, 0x44, 0xaf,
+    0x27, 0x00, 0xa0, 0x08, 0x08, 0x00, 0xc0, 0x07,
+    0x20, 0x00, 0x20, 0x94, 0x00, 0xda, 0x7d, 0xc1,
+    0xc0, 0x07, 0xfe, 0x7f, 0x44, 0xaf, 0x40, 0x00,
+    0x41, 0x90, 0xc0, 0x37, 0x08, 0x00, 0xdf, 0xde,
+    0x50, 0x06, 0xc0, 0x57, 0x10, 0x00, 0x02, 0xc2,
+    0xc0, 0x07, 0x10, 0x00, 0x27, 0x00, 0x76, 0x08,
+    0x41, 0x90, 0x9f, 0xde, 0x40, 0x06, 0x44, 0xaf,
+    0x27, 0x00, 0x74, 0x08, 0xc0, 0x09, 0x76, 0x08,
+    0x41, 0x90, 0x00, 0xd2, 0x00, 0xd8, 0x9f, 0xde,
+    0x08, 0x00, 0x44, 0xaf, 0x27, 0x00, 0x9e, 0x08,
+    0x97, 0xcf, 0xe7, 0x87, 0x00, 0x84, 0x28, 0xc0,
+    0xe7, 0x67, 0xff, 0xf3, 0x24, 0xc0, 0x97, 0xcf,
+    0xe7, 0x87, 0x01, 0x00, 0xaa, 0x08, 0xe7, 0x57,
+    0x00, 0x00, 0x7a, 0x08, 0x97, 0xc1, 0x9f, 0xaf,
+    0xe2, 0x0b, 0xe7, 0x87, 0x00, 0x06, 0x22, 0xc0,
+    0xe7, 0x07, 0x00, 0x00, 0x90, 0xc0, 0xe7, 0x67,
+    0xfe, 0xff, 0x3e, 0xc0, 0xe7, 0x07, 0x2e, 0x00,
+    0x0a, 0xc0, 0xe7, 0x87, 0x01, 0x00, 0x3e, 0xc0,
+    0xe7, 0x07, 0xff, 0xff, 0x94, 0x08, 0x9f, 0xaf,
+    0xf0, 0x0c, 0x97, 0xcf, 0x17, 0x00, 0xa7, 0xaf,
+    0x54, 0x08, 0xc0, 0x05, 0x27, 0x00, 0x52, 0x08,
+    0xe7, 0x87, 0x01, 0x00, 0xaa, 0x08, 0x9f, 0xaf,
+    0xe2, 0x0b, 0xe7, 0x07, 0x0c, 0x00, 0x40, 0xc0,
+    0x9f, 0xaf, 0xf0, 0x0c, 0xe7, 0x07, 0x00, 0x00,
+    0x78, 0x08, 0x00, 0x90, 0xe7, 0x09, 0x88, 0x08,
+    0x8a, 0x08, 0x27, 0x00, 0x84, 0x08, 0x27, 0x00,
+    0x7c, 0x08, 0x9f, 0xaf, 0x8a, 0x0c, 0xe7, 0x07,
+    0x00, 0x00, 0xb2, 0x02, 0xe7, 0x07, 0x00, 0x00,
+    0xb4, 0x02, 0xc0, 0x07, 0x06, 0x00, 0xc8, 0x09,
+    0xde, 0x00, 0xc8, 0x17, 0x03, 0x00, 0xc9, 0x07,
+    0x7e, 0x08, 0x29, 0x0a, 0x00, 0xda, 0x7d, 0xc1,
+    0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf,
+    0x00, 0x90, 0x27, 0x00, 0x6a, 0x08, 0xe7, 0x07,
+    0x6a, 0x08, 0x6c, 0x08, 0x27, 0x00, 0x6e, 0x08,
+    0xe7, 0x07, 0x6e, 0x08, 0x70, 0x08, 0x27, 0x00,
+    0x78, 0x08, 0x27, 0x00, 0x62, 0x08, 0x27, 0x00,
+    0x64, 0x08, 0xc8, 0x09, 0x74, 0x08, 0xc1, 0x09,
+    0x76, 0x08, 0xc9, 0x07, 0x72, 0x08, 0x11, 0x02,
+    0x09, 0x02, 0xc8, 0x17, 0x40, 0x06, 0x01, 0xda,
+    0x7a, 0xc1, 0x51, 0x94, 0xc8, 0x09, 0x9e, 0x08,
+    0xc9, 0x07, 0x9c, 0x08, 0xc1, 0x09, 0x76, 0x08,
+    0x01, 0xd2, 0x01, 0xd8, 0x11, 0x02, 0x09, 0x02,
+    0xc8, 0x17, 0x08, 0x00, 0x01, 0xda, 0x7a, 0xc1,
+    0x51, 0x94, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf,
+    0xe7, 0x57, 0x00, 0x00, 0x52, 0x08, 0x97, 0xc0,
+    0x9f, 0xaf, 0x04, 0x00, 0xe7, 0x09, 0x94, 0x08,
+    0x90, 0x08, 0xe7, 0x57, 0xff, 0xff, 0x90, 0x08,
+    0x04, 0xc1, 0xe7, 0x07, 0xf0, 0x0c, 0x8e, 0x08,
+    0x97, 0xcf, 0xe7, 0x17, 0x32, 0x00, 0x90, 0x08,
+    0xe7, 0x67, 0xff, 0x07, 0x90, 0x08, 0xe7, 0x07,
+    0x26, 0x0d, 0x8e, 0x08, 0x97, 0xcf, 0xd7, 0x09,
+    0x00, 0xc0, 0xc1, 0xdf, 0xe7, 0x57, 0x00, 0x00,
+    0x96, 0x08, 0x23, 0xc0, 0xe7, 0x07, 0x00, 0x80,
+    0x80, 0xc0, 0xe7, 0x07, 0x04, 0x00, 0x90, 0xc0,
+    0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, 0xe7, 0x07,
+    0x00, 0x80, 0x80, 0xc0, 0xc0, 0x07, 0x00, 0x00,
+    0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00,
+    0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, 0xe7, 0x07,
+    0x00, 0x80, 0x80, 0xc0, 0xe7, 0x07, 0x00, 0x80,
+    0x40, 0xc0, 0xc0, 0x07, 0x00, 0x00, 0xe7, 0x07,
+    0x00, 0x00, 0x40, 0xc0, 0xe7, 0x07, 0x00, 0x00,
+    0x80, 0xc0, 0xef, 0x57, 0x00, 0x00, 0xf1, 0x09,
+    0x9f, 0xa0, 0xc0, 0x0d, 0xe7, 0x07, 0x04, 0x00,
+    0x90, 0xc0, 0xe7, 0x07, 0x00, 0x02, 0x40, 0xc0,
+    0xe7, 0x07, 0x0c, 0x02, 0x40, 0xc0, 0xe7, 0x07,
+    0x00, 0x00, 0x96, 0x08, 0xe7, 0x07, 0x00, 0x00,
+    0x8e, 0x08, 0xe7, 0x07, 0x00, 0x00, 0xaa, 0x08,
+    0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x9f, 0xaf,
+    0x9e, 0x03, 0xe7, 0x05, 0x00, 0xc0, 0x9f, 0xaf,
+    0xde, 0x01, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf,
+    0x9f, 0xaf, 0xde, 0x0d, 0xef, 0x77, 0x00, 0x00,
+    0xf1, 0x09, 0x97, 0xc1, 0x9f, 0xaf, 0xde, 0x0d,
+    0xef, 0x77, 0x00, 0x00, 0xf1, 0x09, 0x97, 0xc1,
+    0xef, 0x07, 0x01, 0x00, 0xf1, 0x09, 0xe7, 0x87,
+    0x00, 0x08, 0x1e, 0xc0, 0xe7, 0x87, 0x00, 0x08,
+    0x22, 0xc0, 0xe7, 0x67, 0xff, 0xf7, 0x22, 0xc0,
+    0xe7, 0x77, 0x00, 0x08, 0x20, 0xc0, 0x11, 0xc0,
+    0xe7, 0x67, 0xff, 0xf7, 0x1e, 0xc0, 0xe7, 0x87,
+    0x00, 0x08, 0x22, 0xc0, 0xe7, 0x67, 0xff, 0xf7,
+    0x22, 0xc0, 0xe7, 0x77, 0x00, 0x08, 0x20, 0xc0,
+    0x04, 0xc1, 0xe7, 0x87, 0x00, 0x08, 0x22, 0xc0,
+    0x97, 0xcf, 0xe7, 0x07, 0x01, 0x01, 0xf0, 0x09,
+    0xef, 0x57, 0x18, 0x00, 0xfe, 0xff, 0x97, 0xc2,
+    0xef, 0x07, 0x00, 0x00, 0xf0, 0x09, 0x97, 0xcf,
+    0xd7, 0x09, 0x00, 0xc0, 0x17, 0x00, 0x17, 0x02,
+    0x97, 0x02, 0xe7, 0x57, 0x00, 0x00, 0x7a, 0x08,
+    0x06, 0xc0, 0xc0, 0x09, 0x92, 0xc0, 0xc0, 0x77,
+    0x09, 0x02, 0x9f, 0xc1, 0xea, 0x06, 0x9f, 0xcf,
+    0x20, 0x08, 0xd7, 0x09, 0x0e, 0xc0, 0xe7, 0x07,
+    0x00, 0x00, 0x0e, 0xc0, 0x9f, 0xaf, 0x66, 0x0e,
+    0xe7, 0x05, 0x0e, 0xc0, 0x97, 0xcf, 0xd7, 0x09,
+    0x00, 0xc0, 0x17, 0x02, 0xc8, 0x09, 0xb0, 0xc0,
+    0xe7, 0x67, 0xfe, 0x7f, 0xb0, 0xc0, 0xc8, 0x77,
+    0x00, 0x20, 0x9f, 0xc1, 0x64, 0xeb, 0xe7, 0x57,
+    0x00, 0x00, 0xc8, 0x02, 0x9f, 0xc1, 0x80, 0xeb,
+    0xc8, 0x99, 0xca, 0x02, 0xc8, 0x67, 0x04, 0x00,
+    0x9f, 0xc1, 0x96, 0xeb, 0x9f, 0xcf, 0x4c, 0xeb,
+    0xe7, 0x07, 0x00, 0x00, 0xa6, 0xc0, 0xe7, 0x09,
+    0xb0, 0xc0, 0xc8, 0x02, 0xe7, 0x07, 0x03, 0x00,
+    0xb0, 0xc0, 0x97, 0xcf, 0xc0, 0x09, 0x86, 0x08,
+    0xc0, 0x37, 0x01, 0x00, 0x97, 0xc9, 0xc9, 0x09,
+    0x88, 0x08, 0x02, 0x00, 0x41, 0x90, 0x48, 0x02,
+    0xc9, 0x17, 0x06, 0x00, 0x9f, 0xaf, 0x64, 0x05,
+    0x9f, 0xa2, 0xd6, 0x0e, 0x02, 0xda, 0x77, 0xc1,
+    0x41, 0x60, 0x71, 0xc1, 0x97, 0xcf, 0x17, 0x02,
+    0x57, 0x02, 0x43, 0x04, 0x21, 0x04, 0xe0, 0x00,
+    0x43, 0x04, 0x21, 0x04, 0xe0, 0x00, 0x43, 0x04,
+    0x21, 0x04, 0xe0, 0x00, 0xc1, 0x07, 0x01, 0x00,
+    0xc9, 0x05, 0xc8, 0x05, 0x97, 0xcf,
+    0,    0
+};
+
+/****************************************************************
+ *     kaweth_new_code_fix
+ ****************************************************************/
+static __u8 kaweth_new_code_fix[] = 
+{
+    0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
+    0x02, 0x00, 0x08, 0x00, 0x24, 0x00, 0x2e, 0x00,
+    0x2c, 0x00, 0x3e, 0x00, 0x44, 0x00, 0x48, 0x00,
+    0x50, 0x00, 0x5c, 0x00, 0x60, 0x00, 0x66, 0x00,
+    0x6c, 0x00, 0x70, 0x00, 0x76, 0x00, 0x74, 0x00,
+    0x7a, 0x00, 0x7e, 0x00, 0x84, 0x00, 0x8a, 0x00,
+    0x8e, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9c, 0x00,
+    0xa0, 0x00, 0xa8, 0x00, 0xae, 0x00, 0xb4, 0x00,
+    0xb2, 0x00, 0xba, 0x00, 0xbe, 0x00, 0xc4, 0x00,
+    0xc8, 0x00, 0xce, 0x00, 0xd2, 0x00, 0xd6, 0x00,
+    0xda, 0x00, 0xe2, 0x00, 0xe0, 0x00, 0xea, 0x00,
+    0xf2, 0x00, 0xfe, 0x00, 0x06, 0x01, 0x0c, 0x01,
+    0x1a, 0x01, 0x24, 0x01, 0x22, 0x01, 0x2a, 0x01,
+    0x30, 0x01, 0x36, 0x01, 0x3c, 0x01, 0x4e, 0x01,
+    0x52, 0x01, 0x58, 0x01, 0x5c, 0x01, 0x9c, 0x01,
+    0xb6, 0x01, 0xba, 0x01, 0xc0, 0x01, 0xca, 0x01,
+    0xd0, 0x01, 0xda, 0x01, 0xe2, 0x01, 0xea, 0x01,
+    0xf0, 0x01, 0x0a, 0x02, 0x0e, 0x02, 0x14, 0x02,
+    0x26, 0x02, 0x6c, 0x02, 0x8e, 0x02, 0x98, 0x02,
+    0xa0, 0x02, 0xa6, 0x02, 0xba, 0x02, 0xc6, 0x02,
+    0xce, 0x02, 0xe8, 0x02, 0xee, 0x02, 0xf4, 0x02,
+    0xf8, 0x02, 0x0a, 0x03, 0x10, 0x03, 0x1a, 0x03,
+    0x1e, 0x03, 0x2a, 0x03, 0x2e, 0x03, 0x34, 0x03,
+    0x3a, 0x03, 0x44, 0x03, 0x4e, 0x03, 0x5a, 0x03,
+    0x5e, 0x03, 0x6a, 0x03, 0x72, 0x03, 0x80, 0x03,
+    0x84, 0x03, 0x8c, 0x03, 0x94, 0x03, 0x98, 0x03,
+    0xa8, 0x03, 0xae, 0x03, 0xb4, 0x03, 0xba, 0x03,
+    0xce, 0x03, 0xcc, 0x03, 0xd6, 0x03, 0xdc, 0x03,
+    0xec, 0x03, 0xf0, 0x03, 0xfe, 0x03, 0x1c, 0x04,
+    0x30, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x40, 0x04,
+    0x48, 0x04, 0x46, 0x04, 0x54, 0x04, 0x5e, 0x04,
+    0x64, 0x04, 0x74, 0x04, 0x78, 0x04, 0x84, 0x04,
+    0xd8, 0x04, 0xec, 0x04, 0xf0, 0x04, 0xf8, 0x04,
+    0xfe, 0x04, 0x1c, 0x05, 0x2c, 0x05, 0x30, 0x05,
+    0x4a, 0x05, 0x56, 0x05, 0x5a, 0x05, 0x88, 0x05,
+    0x8c, 0x05, 0x96, 0x05, 0x9a, 0x05, 0xa8, 0x05,
+    0xcc, 0x05, 0xd2, 0x05, 0xda, 0x05, 0xe0, 0x05,
+    0xe4, 0x05, 0xfc, 0x05, 0x06, 0x06, 0x14, 0x06,
+    0x12, 0x06, 0x1a, 0x06, 0x20, 0x06, 0x26, 0x06,
+    0x2e, 0x06, 0x34, 0x06, 0x48, 0x06, 0x52, 0x06,
+    0x64, 0x06, 0x86, 0x06, 0x90, 0x06, 0x9a, 0x06,
+    0xa0, 0x06, 0xac, 0x06, 0xaa, 0x06, 0xb2, 0x06,
+    0xb8, 0x06, 0xdc, 0x06, 0xda, 0x06, 0xe2, 0x06,
+    0xe8, 0x06, 0xf2, 0x06, 0xf8, 0x06, 0xfc, 0x06,
+    0x0a, 0x07, 0x10, 0x07, 0x14, 0x07, 0x24, 0x07,
+    0x2a, 0x07, 0x32, 0x07, 0x38, 0x07, 0xb2, 0x07,
+    0xba, 0x07, 0xde, 0x07, 0xe4, 0x07, 0x10, 0x08,
+    0x14, 0x08, 0x1a, 0x08, 0x1e, 0x08, 0x30, 0x08,
+    0x38, 0x08, 0x3c, 0x08, 0x44, 0x08, 0x42, 0x08,
+    0x48, 0x08, 0xc6, 0x08, 0xcc, 0x08, 0xd2, 0x08,
+    0xfe, 0x08, 0x04, 0x09, 0x0a, 0x09, 0x0e, 0x09,
+    0x12, 0x09, 0x16, 0x09, 0x20, 0x09, 0x24, 0x09,
+    0x28, 0x09, 0x32, 0x09, 0x46, 0x09, 0x4a, 0x09,
+    0x50, 0x09, 0x54, 0x09, 0x5a, 0x09, 0x60, 0x09,
+    0x7c, 0x09, 0x80, 0x09, 0xb8, 0x09, 0xbc, 0x09,
+    0xc0, 0x09, 0xc4, 0x09, 0xc8, 0x09, 0xcc, 0x09,
+    0xd0, 0x09, 0xd4, 0x09, 0xec, 0x09, 0xf4, 0x09,
+    0xf6, 0x09, 0xf8, 0x09, 0xfa, 0x09, 0xfc, 0x09,
+    0xfe, 0x09, 0x00, 0x0a, 0x02, 0x0a, 0x04, 0x0a,
+    0x06, 0x0a, 0x08, 0x0a, 0x0a, 0x0a, 0x0c, 0x0a,
+    0x10, 0x0a, 0x18, 0x0a, 0x24, 0x0a, 0x2c, 0x0a,
+    0x32, 0x0a, 0x3c, 0x0a, 0x46, 0x0a, 0x4c, 0x0a,
+    0x50, 0x0a, 0x54, 0x0a, 0x5a, 0x0a, 0x5e, 0x0a,
+    0x66, 0x0a, 0x6c, 0x0a, 0x72, 0x0a, 0x78, 0x0a,
+    0x7e, 0x0a, 0x7c, 0x0a, 0x82, 0x0a, 0x8c, 0x0a,
+    0x92, 0x0a, 0x90, 0x0a, 0x98, 0x0a, 0x96, 0x0a,
+    0xa2, 0x0a, 0xb2, 0x0a, 0xb6, 0x0a, 0xc4, 0x0a,
+    0xe2, 0x0a, 0xe0, 0x0a, 0xe8, 0x0a, 0xee, 0x0a,
+    0xf4, 0x0a, 0xf2, 0x0a, 0xf8, 0x0a, 0x0c, 0x0b,
+    0x1a, 0x0b, 0x24, 0x0b, 0x40, 0x0b, 0x44, 0x0b,
+    0x48, 0x0b, 0x4e, 0x0b, 0x4c, 0x0b, 0x52, 0x0b,
+    0x68, 0x0b, 0x6c, 0x0b, 0x70, 0x0b, 0x76, 0x0b,
+    0x88, 0x0b, 0x92, 0x0b, 0xbe, 0x0b, 0xca, 0x0b,
+    0xce, 0x0b, 0xde, 0x0b, 0xf4, 0x0b, 0xfa, 0x0b,
+    0x00, 0x0c, 0x24, 0x0c, 0x28, 0x0c, 0x30, 0x0c,
+    0x36, 0x0c, 0x3c, 0x0c, 0x40, 0x0c, 0x4a, 0x0c,
+    0x50, 0x0c, 0x58, 0x0c, 0x56, 0x0c, 0x5c, 0x0c,
+    0x60, 0x0c, 0x64, 0x0c, 0x80, 0x0c, 0x94, 0x0c,
+    0x9a, 0x0c, 0x98, 0x0c, 0x9e, 0x0c, 0xa4, 0x0c,
+    0xa2, 0x0c, 0xa8, 0x0c, 0xac, 0x0c, 0xb0, 0x0c,
+    0xb4, 0x0c, 0xb8, 0x0c, 0xbc, 0x0c, 0xce, 0x0c,
+    0xd2, 0x0c, 0xd6, 0x0c, 0xf4, 0x0c, 0xfa, 0x0c,
+    0x00, 0x0d, 0xfe, 0x0c, 0x06, 0x0d, 0x0e, 0x0d,
+    0x0c, 0x0d, 0x16, 0x0d, 0x1c, 0x0d, 0x22, 0x0d,
+    0x20, 0x0d, 0x30, 0x0d, 0x7e, 0x0d, 0x82, 0x0d,
+    0x9a, 0x0d, 0xa0, 0x0d, 0xa6, 0x0d, 0xb0, 0x0d,
+    0xb8, 0x0d, 0xc2, 0x0d, 0xc8, 0x0d, 0xce, 0x0d,
+    0xd4, 0x0d, 0xdc, 0x0d, 0x1e, 0x0e, 0x2c, 0x0e,
+    0x3e, 0x0e, 0x4c, 0x0e, 0x50, 0x0e, 0x5e, 0x0e,
+    0xae, 0x0e, 0xb8, 0x0e, 0xc6, 0x0e, 0xca, 0x0e,
+    0,    0
+};
+
+const int len_kaweth_trigger_code = sizeof(kaweth_trigger_code);
+const int len_kaweth_trigger_code_fix =
sizeof(kaweth_trigger_code_fix);
+const int len_kaweth_new_code = sizeof(kaweth_new_code);
+const int len_kaweth_new_code_fix = sizeof(kaweth_new_code_fix);



_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to