[PATCH] Upgradeable read locks for USB (was: Re: Kernel locks)

=?ISO-8859-1?Q?I=F1aky_P=E9rez_Gonz=E1lez?= (inaky@peloncho.fis.ucm.es)
Sun, 11 Jan 1998 18:51:22 +0100


--Multipart_Sun_Jan_11_18:50:20_1998-1
Content-Type: text/plain; charset=US-ASCII

Hi Linus

>> I've seen this on the kernel and reminded one of my FIXMEs on the
>> USB code: upgradeable read locks. There's code which needs to
>> perform checks and lookup tables before doing stuff, and it is
>> quite ugly to have a write lock on hold until you decide if the
>> real write operation is going to be done or not.

Linus> If the above does work for people (or it works after a few
Linus> fixes) and somebody decides that he wants to use upgrade locks,
Linus> send me a patch back with the (possibly fixed) code.

I've found a simpler sollution which does what I need to
do. It doesn't need to use any special kind of lock, just the normal
ones. The code goes in, read locks, and then decides it has to
write. It upgrades the read lock to write lock, writes, releases the
write lock, and later (when due), releases the read lock.

What it is done is, when requesting the upgrade, wait until
there's only ONE reader holding the lock; this is our read lock, and
we can easily set the write bit. Then we can unlock with
write_unlock(), what will keep the read lock still held.

I have tested this in software (with a mixture of gdb and
paper), and it worked fine, BUT NOT ON REAL KERNEL OPERATION. I don't
own a SMP machine, so it'be nice if people could test it out; I know I
should provide a sample for an stress test, but know I have to leave
my house and won't be here for a loong while (quite a month). Perhaps
tomorrow I'll be able of scratching some.

I include the patch against 2.1.77 and a set of flowcharts I
made with xfig which helped me understanding the locking mechanism;
perhaps they may help people not to have a hard night as I had :)

Cheers

--Multipart_Sun_Jan_11_18:50:20_1998-1
Content-Type: application/octet-stream; type=patch
Content-Disposition: attachment; filename="upgradeable-read-locks.diff"
Content-Transfer-Encoding: 7bit

--- linux/include/asm-i386/spinlock.h.orig Sat Jan 10 15:53:08 1998
+++ linux/include/asm-i386/spinlock.h Sun Jan 11 18:39:11 1998
@@ -146,6 +146,77 @@
asm volatile("lock ; decl %0" \
:"=m" (__dummy_lock(&(rw)->lock)))

+/*
+ * Upgrade a read lock to a write lock.
+ *
+ * Use this function to upgrade a read lock owned by the calling
+ * process to a write lock. After that, you release the upgraded write
+ * lock with the same write_unlock() function; note the read lock is
+ * still there, and you must do read_unlock() for it to be released.
+ *
+ * We assume that *always*, when calling upgrade2write_read_lock(),
+ * the lock is at least read locked by us (1R). Behaviour is
+ * *undefined* when calling this function on locks in other states
+ * than read locked.
+ *
+ * Background
+ *
+ * You have to do a write somewhere, however, before, you need to do
+ * a lot of checks, but you need to keep all the data constant while
+ * checking (and writing). You could hold a write lock on everything,
+ * but if the checkings are lengthy, this could impact in the overall
+ * performance; the sollution is to upgrade the read lock to a write
+ * lock.
+ *
+ * When your flow has decided is time to write, it will ask for an
+ * upgrade. This upgrade will wait for the lock having just ONE read
+ * lock holder (our read lock) and then write lock it. Then you can
+ * do the writing and release the write lock. When you are finally
+ * done, you release the read lock.
+ *
+ * Lock State Operation Table
+ *
+ * LS: Lock state: U Unlocked
+ * W Write locked
+ * NR N read locks.
+ *
+ * Initial Action Performed
+ * LS
+ *
+ * 1R Write lock
+ * NR Block until 1R, then write lock
+ * W+1R Block until 1R, then write lock
+ * W+NR Block until 1R, then write lock
+ *
+ * All state transitions while waiting have been checked, using the
+ * following table (* means when the locks switches to the column's
+ * state, it performs as described by the Lock State Actio Table):
+ *
+ * Initial LS Switch to this state
+ * while waiting
+ *
+ * 1R NR W+1R W+NR
+ * 1R NA NA NA NA
+ * NR * NA * *
+ * W+1R * * NA *
+ * W+NR * * * NA
+ */
+
+#define upgrade2write_read_lock(rw) \
+ asm volatile( \
+ "\n1: lock; btsl $31,%0" \
+ "\n jc 4f" \
+ "\n2: testl $0x7ffffffe,%0" \
+ "\n jne 3f" \
+ "\n.section .text.lock,\"ax\"" \
+ "\n3: lock; btrl $31,%0" \
+ "\n4: testl $0xfffffffe,%0" \
+ "\n jnz 4b" \
+ "\n jmp 1b" \
+ "\n.previous" \
+ "\n" \
+ : "=m" (__dummy_lock (&(rw)->lock)))
+
#define write_lock(rw) \
asm volatile("\n1:\t" \
"lock ; btsl $31,%0\n\t" \
@@ -165,6 +236,8 @@

#define read_lock_irq(lock) do { __cli(); read_lock(lock); } while (0)
#define read_unlock_irq(lock) do { read_unlock(lock); __sti(); } while (0)
+#define upgrade2write_read_lock_irq(lock) \
+ do { __cli(); upgrade2write_read_lock(lock); } while (0)
#define write_lock_irq(lock) do { __cli(); write_lock(lock); } while (0)
#define write_unlock_irq(lock) do { write_unlock(lock); __sti(); } while (0)

@@ -172,6 +245,8 @@
do { __save_flags(flags); __cli(); read_lock(lock); } while (0)
#define read_unlock_irqrestore(lock, flags) \
do { read_unlock(lock); __restore_flags(flags); } while (0)
+#define upgrade2write_read_lock_irqsave(lock, flags) \
+ do { __save_flags(flags); __cli(); upgrade2write_read_lock(lock); } while (0)
#define write_lock_irqsave(lock, flags) \
do { __save_flags(flags); __cli(); write_lock(lock); } while (0)
#define write_unlock_irqrestore(lock, flags) \

Diff finished at Sun Jan 11 18:39:32

--Multipart_Sun_Jan_11_18:50:20_1998-1
Content-Type: text/plain; charset=US-ASCII

--Multipart_Sun_Jan_11_18:50:20_1998-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="kernel-locks.fig"
Content-Transfer-Encoding: base64

I0ZJRyAzLjEKTGFuZHNjYXBlCkNlbnRlcgpNZXRyaWMKMTIwMCAyCjYgNDQxMCAxNDc2MCA2
MjEwIDE2MTU1CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CgkgNTMx
MCAxNDc2MCA0NDEwIDE1MjEwIDUzMTAgMTU2NjAgNjIxMCAxNTIxMCA1MzEwIDE0NzYwCjIg
MSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkxIDEgMS4wMCA2MC4wMCAx
MjAuMDAKCSA1MzEwIDE1NjYwIDUzMTAgMTYxMTAKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAg
NCAxNjUgMTE1NSA1MzEwIDE1MzkwIGxvY2tlZD9cMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4w
MDAwIDQgMTY1IDY2MCA1MzEwIDE1MTIwIHJlYWRcMDAxCi02CjYgNDQ1NSAxMzYzNSA2MTY1
IDE0MzEwCjIgMiAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CgkgNDUwMCAx
MzYzNSA2MTIwIDEzNjM1IDYxMjAgMTQzMTAgNDUwMCAxNDMxMCA0NTAwIDEzNjM1CjQgMSAt
MSAwIDAgMTIgMTggMC4wMDAwIDQgMTgwIDE2NTAgNTMxMCAxNDEzMCB3cml0ZSBsb2NrXDAw
MQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAxMTU1IDUzMTAgMTM4NjAgYWNxdWly
ZVwwMDEKLTYKNiA0NjM1IDE2MTEwIDU5ODUgMTY1NjAKMiA0IDAgMSAtMSA3IDAgMCAtMSAw
LjAwMCAwIDAgMTAgMCAwIDUKCSA1OTg1IDE2NTYwIDU5ODUgMTYxMTAgNDYzNSAxNjExMCA0
NjM1IDE2NTYwIDU5ODUgMTY1NjAKNCAxIC0xIDAgMCAxMiA5IDAuMDAwMCA0IDEyMCAxMDgw
IDUzMTAgMTY0NzAgZ290IHRoZSBsb2NrXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDE2NSA0OTUgNTMxOSAxNjMxNyBlbmRcMDAxCi02CjYgNzI5MCAxMjY5MCA5OTkwIDE0MzEw
CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CgkgODc3NSAxMzE4NSA3
NzQwIDEzNzcwIDg3NzUgMTQzMTAgOTgxMCAxMzc3MCA4Nzc1IDEzMTg1CjIgMSAwIDEgLTEg
NyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAzCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA3
NzQwIDEzNzcwIDc0MjUgMTM3NzAgNzQyNSAxMjczNQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAw
MCA0IDE2NSA2NjAgODc3NSAxMzU0NSByZWFkXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAw
MCA0IDE4MCAxMzIwIDg3NzUgMTM3NzAgb3Igd3JpdGVcMDAxCjQgMSAtMSAwIDAgMTIgMTgg
MC4wMDAwIDQgMTY1IDExNTUgODc3NSAxMzk5NSBsb2NrZWQ/XDAwMQo0IDEgLTEgMCAwIDEy
IDE4IDAuMDAwMCA0IDE2NSA0OTUgNzU2MCAxNDA0MCBZZXNcMDAxCjQgMSAtMSAwIDAgMTIg
MTggMC4wMDAwIDQgMTY1IDMzMCA5ODEwIDE0MDg1IE5vXDAwMQotNgo2IDkxODAgMTQ2NzAg
MTEwMjUgMTU3MDUKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMzMwIDkxODAgMTQ4
NTAgNDpcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjI1IDE4MTUgOTE4MCAxNTEy
MCAgIGNtcCAkMCwlMFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAyMjUgMTMyMCA5
MTgwIDE1MzkwICAgam5lIDRiXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAx
MzIwIDkxODAgMTU2NjAgICBqbXAgMWJcMDAxCi02CjYgODY4NSAxMDIxNSAxMTA3MCAxMTc0
NQoyIDQgMSAxIC0xIDcgMCAwIC0xIDQuMDAwIDAgMCA3IDAgMCA1CgkgMTEwNzAgMTE3NDUg
MTEwNzAgMTAyMTUgODY4NSAxMDIxNSA4Njg1IDExNzQ1IDExMDcwIDExNzQ1CjQgMCAtMSAw
IDAgMTIgMTggMC4wMDAwIDQgMTgwIDE2NTAgODgyMCAxMDUzMCBXYWl0IHVudGlsXDAwMQo0
IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAxOTgwIDg4MjAgMTA4MDAgdGhlcmUgYXJl
IG5vXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAxNjUwIDg4MjAgMTEwNzAg
bG9ja3MgaGVsZFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAyMTAgMjE0NSA4ODIw
IDExMzQwIChuZWl0aGVyIHJlYWRcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjEw
IDE2NTAgODgyMCAxMTYxMCBub3Igd3JpdGUpXDAwMQotNgo2IDU0OTAgOTU4NSA3ODc1IDEw
NjY1CjIgNCAxIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDcgMCAwIDUKCSA3ODc1IDEwNjY1
IDc4NzUgOTU4NSA1NDkwIDk1ODUgNTQ5MCAxMDY2NSA3ODc1IDEwNjY1CjQgMCAtMSAwIDAg
MTIgMTggMC4wMDAwIDQgMTgwIDIxNDUgNTY3MCA5OTQ1IFdyaXRlIGxvY2tlZD9cMDAxCjQg
MCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTgwIDE4MTUgNTY3MCAxMDIxNSB3YWl0IHVudGls
IFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMTQ4NSA1NjcwIDEwNDg1IHJl
bGVhc2VkLlwwMDEKLTYKNiAxNDk0MCA3MDIwIDE2MjkwIDc0NzAKMiA0IDAgMSAtMSA3IDAg
MCAtMSAwLjAwMCAwIDAgMTAgMCAwIDUKCSAxNjI5MCA3NDcwIDE2MjkwIDcwMjAgMTQ5NDAg
NzAyMCAxNDk0MCA3NDcwIDE2MjkwIDc0NzAKNCAxIC0xIDAgMCAxMiA5IDAuMDAwMCA0IDEy
MCAxMDgwIDE1NjE1IDczODAgZ290IHRoZSBsb2NrXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAu
MDAwMCA0IDE2NSA0OTUgMTU2MjQgNzIyNyBlbmRcMDAxCi02CjYgMTY5MjAgMTI2MCAxOTMw
NSAzMTA1CjIgNCAxIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDcgMCAwIDUKCSAxOTMwNSAz
MTA1IDE5MzA1IDEyNjAgMTY5MjAgMTI2MCAxNjkyMCAzMTA1IDE5MzA1IDMxMDUKNCAwIC0x
IDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMTk4MCAxNzA1NSAxNTc1IFRlc3QgbG9jayB0b1ww
MDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMTgxNSAxNzA1NSAxODQ1IGJlIGhl
bGQgZm9yXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIxMCAyMTQ1IDE3MDU1IDIx
MTUgd3JpdGUuIElmIHNvLFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAyMTAgMTY1
MCAxNzA1NSAyMzg1IHdhaXQsIGVsc2VcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQg
MTgwIDE2NTAgMTcwNTUgMjY1NSBob2xkIGl0IHRvXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAu
MDAwMCA0IDE2NSA4MjUgMTcwNTUgMjkyNSByZWFkLlwwMDEKLTYKNiAxOTc1NSAyMTE1IDIz
MTc1IDMwNjAKMiA0IDEgMSAtMSA3IDAgMCAtMSA0LjAwMCAwIDAgNyAwIDAgNQoJIDIzMTc1
IDMwNjAgMjMxNzUgMjExNSAxOTc1NSAyMTE1IDE5NzU1IDMwNjAgMjMxNzUgMzA2MAo0IDAg
LTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE4MCAyOTcwIDE5ODkwIDIzODUgV2FpdCB1bnRpbCBj
dXJyZW50XDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE4MCAzMTM1IDE5ODkwIDI2
NTUgaG9sZGVyIG9mIHRoZSB3cml0ZVwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAx
ODAgMjgwNSAxOTg5MCAyOTI1IGxvY2sgcmVsZWFzZXMgaXQuXDAwMQotNgo2IDM0MjAgNjMw
MCA0NzcwIDY3NTAKMiA0IDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgMTAgMCAwIDUKCSA0
NzcwIDY3NTAgNDc3MCA2MzAwIDM0MjAgNjMwMCAzNDIwIDY3NTAgNDc3MCA2NzUwCjQgMSAt
MSAwIDAgMTIgOSAwLjAwMDAgNCAxMjAgMTA4MCA0MDk1IDY2NjAgZ290IHRoZSBsb2NrXDAw
MQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSA0OTUgNDEwNCA2NTA3IGVuZFwwMDEK
LTYKNiAxNDQ5MCAxMTExNSAxODU4NSAxNDk4NQo2IDE1NTYwIDEzMzgwIDE3NTQwIDE0MDEw
CjIgMiAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CgkgMTU1NjAgMTMzODAg
MTc1NDAgMTMzODAgMTc1NDAgMTQwMTAgMTU1NjAgMTQwMTAgMTU1NjAgMTMzODAKNCAxIC0x
IDAgMCAxMiAxOCAwLjAwMDAgNCAyMjUgMTE1NSAxNjU1MCAxMzYwNSBhY3F1aXJlXDAwMQo0
IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE4MCAxNjUwIDE2NTUwIDEzODc1IHdyaXRlIGxv
Y2tcMDAxCi02CjYgMTQ0OTAgMTExMTUgMTg1ODUgMTI5MTUKMiAxIDAgMSAtMSA3IDAgMCAt
MSAwLjAwMCAwIDAgLTEgMCAwIDUKCSAxNjU2MCAxMTExNSAxNDQ5MCAxMjAxNSAxNjU2MCAx
MjkxNSAxODU4NSAxMjAxNSAxNjU2MCAxMTExNQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDIxMCAyNDc1IDE2NDcwIDEyMjg1IGJ5IHNvbWVvbmUgbW9yZVwwMDEKNCAxIC0xIDAgMCAx
MiAxOCAwLjAwMDAgNCAxNjUgMjMxMCAxNjQ3MCAxMjAxNSBvciByZWFkIGxvY2tlZFwwMDEK
NCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxODAgMTk4MCAxNjQ3MCAxMTc0NSB3cml0ZSBs
b2NrZWRcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDEzMjAgMTY0NzAgMTI1
NTUgdGhhbiB1cz9cMDAxCi02CjYgMTU3OTUgMTM5OTUgMTcxOTAgMTQ5ODUKNiAxNTgzMCAx
NDUwNSAxNzE4MCAxNDk1NQoyIDQgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAxMCAwIDAg
NQoJIDE3MTgwIDE0OTU1IDE3MTgwIDE0NTA1IDE1ODMwIDE0NTA1IDE1ODMwIDE0OTU1IDE3
MTgwIDE0OTU1CjQgMSAtMSAwIDAgMTIgOSAwLjAwMDAgNCAxMjAgMTA4MCAxNjUwNSAxNDg2
NSBnb3QgdGhlIGxvY2tcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDQ5NSAx
NjUxNCAxNDcxMiBlbmRcMDAxCi02CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0x
IDEgMCAyCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSAxNjU1MCAxNDAxMCAxNjU1MCAxNDUw
NQotNgoyIDEgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAxIDAgMgoJMSAxIDEuMDAg
NjAuMDAgMTIwLjAwCgkgMTY1NTAgMTI5MzAgMTY1NTAgMTMzODAKNCAxIC0xIDAgMCAxMiAx
OCAwLjAwMDAgNCAxNjUgMzMwIDE2ODc1IDEzMDk1IE5vXDAwMQotNgo2IDIwNTU1IDEwNTc1
IDIyNjI1IDEyMDE1CjIgNCAxIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDcgMCAwIDUKCSAy
MjQ5MCAxMjAxNSAyMjQ5MCAxMDU3NSAyMDU1NSAxMDU3NSAyMDU1NSAxMjAxNSAyMjQ5MCAx
MjAxNQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE4MCAxNjUwIDIwNjQ1IDEwODQ1IFdh
aXQgdW50aWxcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDEzMjAgMjA2NDUg
MTExMTUgbm8gbG9ja3NcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjEwIDE2NTAg
MjA2NDUgMTE2NTUgZXhjZXB0IG91clwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAx
NjUgMTQ4NSAyMDY0NSAxMTkyNSByZWFkIGxvY2tcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4w
MDAwIDQgMTY1IDEzMjAgMjA2NDUgMTEzODUgYXJlIGhlbGRcMDAxCi02CjYgMjA1MjAgMTIz
NzUgMjMwNDAgMTM1NDUKMiA0IDEgMSAtMSA3IDAgMCAtMSA0LjAwMCAwIDAgNyAwIDAgNQoJ
IDIzMDQwIDEzNTQ1IDIzMDQwIDEyMzc1IDIwNTIwIDEyMzc1IDIwNTIwIDEzNTQ1IDIzMDQw
IDEzNTQ1CjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjI1IDE2NTAgMjA2MTAgMTI2MDAg
QWNxdWlyZSBhIFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxODAgMTgxNSAyMDYx
MCAxMjg3MCB3cml0ZSBsb2NrLlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUg
MjE0NSAyMDYxMCAxMzE0MCBEb24ndCByZWxlYXNlXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAu
MDAwMCA0IDE2NSAyMzEwIDIwNjEwIDEzNDEwIG91ciByZWFkIGxvY2suXDAwMQotNgoyIDEg
MCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAwIDAgNQoJIDUzMTAgMTIyODUgNDQxMCAx
MjczNSA1MzEwIDEzMTg1IDYyMTAgMTI3MzUgNTMxMCAxMjI4NQoyIDEgMCAxIC0xIDcgMCAw
IC0xIDAuMDAwIDAgMCAtMSAxIDAgMgoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgNTMxMCAx
MTgzNSA1MzEwIDEyMjg1CjIgNCAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIDcgMCAwIDUK
CSA2MjEwIDExODM1IDYyMTAgMTEzODUgNDQxMCAxMTM4NSA0NDEwIDExODM1IDYyMTAgMTE4
MzUKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMSAwIDIKCTEgMSAxLjAwIDYw
LjAwIDEyMC4wMAoJIDUzMTAgMTMxODUgNTMxMCAxMzYzNQoyIDEgMCAxIC0xIDcgMCAwIC0x
IDAuMDAwIDAgMCAtMSAxIDAgMgoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgNTMxMCAxNDMx
MCA1MzEwIDE0NzYwCjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkx
IDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA2MjEwIDE1MjEwIDY2NjAgMTUyMTAKMiAyIDAgMSAt
MSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUKCSA2NjYwIDE0ODUwIDg0NjAgMTQ4NTAg
ODQ2MCAxNTUyNSA2NjYwIDE1NTI1IDY2NjAgMTQ4NTAKMiAxIDAgMSAtMSA3IDAgMCAtMSAw
LjAwMCAwIDAgLTEgMSAwIDMKCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAoJIDYyMTAgMTI3MzUg
ODc3NSAxMjczNSA4Nzc1IDEzMTg1CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0x
IDEgMCAzCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA4NDYwIDE1MjEwIDg3NzUgMTUyMTAg
ODc3NSAxNDMxMAoyIDEgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAxIDAgNAoJMSAx
IDEuMDAgNjAuMDAgMTIwLjAwCgkgOTgxMCAxMzc3MCAxMDEyNSAxMzc3MCAxMDEyNSAxMjA2
MCA1MzEwIDEyMDYwCjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA3Cgkg
NDI3NSAxMjE5NSA0MTg1IDEyMjg1IDQxODUgMTMzNjUgNDE0MCAxMzQxMCA0MTg1IDEzNDU1
IDQxODUgMTQzMTAKCSA0Mjc1IDE0NDAwCjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAw
IC0xIDAgMCA3CgkgNDIzMCAxNDY3MCA0MTg1IDE0NzYwIDQxODUgMTUxNjUgNDE0MCAxNTIx
MCA0MTg1IDE1MjU1IDQxODUgMTU2NjAKCSA0MjMwIDE1NzA1CjIgMSAwIDEgLTEgNyAwIDAg
LTEgMC4wMDAgMCAwIC0xIDAgMCA3CgkgNjM0NSAxNTU3MCA2NDM1IDE1NjYwIDc1MTUgMTU2
NjAgNzU2MCAxNTcwNSA3NjA1IDE1NjYwIDg2ODUgMTU2NjAKCSA4Nzc1IDE1NTcwCjIgMSAw
IDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA3CgkgNzY5NSAxNDQ0NSA3Nzg1IDE0
NTM1IDkzMTUgMTQ1MzUgOTM2MCAxNDU4MCA5NDA1IDE0NTM1IDEwMjYwIDE0NTM1CgkgMTAz
NTAgMTQ0NDUKMiA0IDEgMSAtMSA3IDAgMCAtMSA0LjAwMCAwIDAgNyAwIDAgNQoJIDg1OTUg
MTE3NDUgODU5NSAxMDgwMCA2NDM1IDEwODAwIDY0MzUgMTE3NDUgODU5NSAxMTc0NQoyIDQg
MCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCA3IDAgMCA1CgkgMTY1MTUgMzg3MCAxNjUxNSAz
NDIwIDE0NzE1IDM0MjAgMTQ3MTUgMzg3MCAxNjUxNSAzODcwCjIgMSAwIDEgLTEgNyAwIDAg
LTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSAxNTYxNSAz
ODcwIDE1NjE1IDQzMjAKMiAyIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUK
CSAxNDk0MCA0MzIwIDE2MjkwIDQzMjAgMTYyOTAgNDc3MCAxNDk0MCA0NzcwIDE0OTQwIDQz
MjAKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUKCSAxNTYxNSA1MjIw
IDE0OTQwIDU4OTUgMTU2MTUgNjU3MCAxNjI5MCA1ODk1IDE1NjE1IDUyMjAKMiAxIDAgMSAt
MSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMSAwIDIKCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAoJ
IDE1NjE1IDQ3NzAgMTU2MTUgNTIyMAoyIDEgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAt
MSAxIDAgMgoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgMTU2MTUgNjU3MCAxNTYxNSA3MDIw
CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCA1CgkxIDEgMS4wMCA2MC4w
MCAxMjAuMDAKCSAxNjI5MCA1ODk1IDE2OTY1IDU4OTUgMTY5NjUgMzY0NSAxODMxNSAzNjQ1
IDE4MzE1IDM4NzAKMiAyIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUKCSAx
NzY0MCAzODcwIDE4OTkwIDM4NzAgMTg5OTAgNDMyMCAxNzY0MCA0MzIwIDE3NjQwIDM4NzAK
MiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUKCSAxODMxNSA0NzcwIDE3
NjQwIDU0NDUgMTgzMTUgNjEyMCAxODk5MCA1NDQ1IDE4MzE1IDQ3NzAKMiAxIDAgMSAtMSA3
IDAgMCAtMSAwLjAwMCAwIDAgLTEgMSAwIDIKCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAoJIDE4
MzE1IDQzMjAgMTgzMTUgNDc3MAoyIDEgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAx
IDAgNAoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgMTg5OTAgNTQ0NSAxOTY2NSA1NDQ1IDE5
NjY1IDQ0NTUgMTgzMTUgNDQ1NQoyIDEgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAw
IDAgMQoJIDE3NjQwIDU0NDUKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMSAw
IDQKCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAoJIDE3NjQwIDU0NDUgMTY1MTUgNTQ0NSAxNjUx
NSA0MDA1IDE1NjE1IDQwMDUKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAw
IDcKCSAxNDgwNSA0MjMwIDE0NzE1IDQzMjAgMTQ3MTUgNTYyNSAxNDYyNSA1NjcwIDE0NzE1
IDU3MTUgMTQ3MTUgNjU3MAoJIDE0ODA1IDY2NjAKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAw
MCAwIDAgLTEgMCAwIDcKCSAxOTEyNSAzNTU1IDE5MjE1IDM2NDUgMTkyMTUgNDAwNSAxOTI2
MCA0MDUwIDE5MjE1IDQwOTUgMTkyMTUgNDMyMAoJIDE5MTI1IDQ0MTAKMiAxIDAgMSAtMSA3
IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDcKCSAxOTgwMCA0MzY1IDE5ODkwIDQ0NTUgMTk4
OTAgNTA4NSAxOTkzNSA1MTMwIDE5ODkwIDUxNzUgMTk4OTAgNjEyMAoJIDE5ODAwIDYyMTAK
MiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgLTEgMCAwIDUKCSA0MDk1IDM2MDAgMzE5
NSA0Mjc1IDQwOTUgNDk1MCA0OTk1IDQyNzUgNDA5NSAzNjAwCjIgMSAwIDEgLTEgNyAwIDAg
LTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA0MDk1IDQ5
NTAgNDA5NSA1NDAwCjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkx
IDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA0MDk1IDMxNTAgNDA5NSAzNjAwCjIgMSAwIDEgLTEg
NyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA0
MDk1IDU4NTAgNDA5NSA2MzAwCjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAg
MCA3CgkgMzE2NCAzMzk0IDMwOTYgMzUyOCAzMDk2IDQ4MDYgMzAyOSA0ODczIDMwOTYgNDk0
MCAzMDk2IDYyMTgKCSAzMTY0IDYyODUKMiAxIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAg
LTEgMCAwIDUKCSA3MjQ1IDQ3MjUgNjUyNSA1MTc1IDcyNDUgNTYyNSA3OTIwIDUxNzUgNzI0
NSA0NzI1CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA3CgkgNTQ0OSA2
MDgzIDU1ODQgNjIxOCA3MTMwIDYyMTggNzI2NCA2MzUyIDczOTkgNjIxOCA4NjA5IDYyMTgK
CSA4NzQzIDYwODMKMiA0IDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgMTAgMCAwIDUKCSA0
OTk1IDMxNTAgNDk5NSAyNTIwIDMxOTUgMjUyMCAzMTk1IDMxNTAgNDk5NSAzMTUwCjIgMiAw
IDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CgkgMzQyMCA1NDAwIDQ3NzAgNTQw
MCA0NzcwIDU4NTAgMzQyMCA1ODUwIDM0MjAgNTQwMAoyIDEgMCAxIC0xIDcgMCAwIC0xIDAu
MDAwIDAgMCAtMSAxIDAgNAoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgNzkyMCA1MTc1IDgz
NzAgNTE3NSA4MzcwIDMzNzUgNDA1MCAzMzc1CjIgNCAxIDEgLTEgNyAwIDAgLTEgNC4wMDAg
MCAwIDcgMCAwIDUKCSAxMTAyNSAyNzkwIDExMDI1IDEzMDUgODEwMCAxMzA1IDgxMDAgMjc5
MCAxMTAyNSAyNzkwCjIgNCAxIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDcgMCAwIDUKCSA3
OTY1IDI4ODAgNzk2NSAxMjYwIDU0MDAgMTI2MCA1NDAwIDI4ODAgNzk2NSAyODgwCjIgMSAw
IDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAzCgkxIDEgMS4wMCA2MC4wMCAxMjAu
MDAKCSA0OTk1IDQyNzUgNzI0NSA0Mjc1IDcyNDUgNDcyNQoyIDEgMCAxIC0xIDcgMCAwIC0x
IDAuMDAwIDAgMCAtMSAxIDAgMwoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgNjUyNSA1MTc1
IDYwNzUgNTE3NSA2MDc1IDQyNzUKMiA0IDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDAgNyAw
IDAgNQoJIDE3OTAwIDEwNjM1IDE3OTAwIDEwMTg1IDE1MjAwIDEwMTg1IDE1MjAwIDEwNjM1
IDE3OTAwIDEwNjM1CjIgMSAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAwIC0xIDEgMCAyCgkx
IDEgMS4wMCA2MC4wMCAxMjAuMDAKCSAxNjU2MCAxMDYyMCAxNjU2MCAxMTExNQoyIDEgMCAx
IC0xIDcgMCAwIC0xIDAuMDAwIDAgMCAtMSAxIDAgNAoJMSAxIDEuMDAgNjAuMDAgMTIwLjAw
CgkgMTg1ODUgMTIwMTUgMTg5MDAgMTIwMTUgMTg5MDAgMTA4MDAgMTY1NjAgMTA4MDAKMyAx
IDIgMSAtMSA3IDAgMCAtMSA0LjAwMCAwIDAgMCA4CgkgODIzNSAxMjI4NSA3MTU1IDEzMjc1
IDcyOTAgMTQyNjUgOTIyNSAxNDQ5MCAxMDI2MCAxNDA0MCA5NDA1IDEyNDIwCgkgODY4NSAx
MjE5NSA4MjM1IDEyMjg1CjMgMSAyIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDAgOQoJIDQ3
NzAgMTIxNTAgNDI3NSAxMjczNSA0MjMwIDE0MDQwIDQ3NzAgMTQ2MjUgNjM5MCAxNDQ0NSA2
NTI1IDEzMDk1CgkgNTgwNSAxMjE5NSA1MjIwIDEyMDE1IDQ3NzAgMTIxNTAKMyAxIDIgMSAt
MSA3IDAgMCAtMSA0LjAwMCAwIDAgMCA3CgkgNDgxNSAxNDY3MCA0MzY1IDE0OTg1IDQzNjUg
MTU1NzAgNTg5NSAxNTg0MCA2MzQ1IDE1MzQ1IDU4OTUgMTQ3MTUKCSA0ODE1IDE0NjcwCjMg
MCAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAxIDAgMwoJMSAxIDEuMDAgNjAuMDAgMTIwLjAw
CgkgNjM0NSAxMDc1NSA2MzAwIDExODM1IDU5ODUgMTIyODUKMyAwIDAgMSAtMSA3IDAgMCAt
MSAwLjAwMCAwIDEgMCA0CgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSA3MTEwIDExODgwIDcw
MjAgMTMxODUgNjU3MCAxNDQ5MCA2MDMwIDE0ODA1CjMgMCAwIDEgLTEgNyAwIDAgLTEgMC4w
MDAgMCAxIDAgNAoJMSAxIDEuMDAgNjAuMDAgMTIwLjAwCgkgMTA1MzAgMTE3OTAgMTA1MzAg
MTIyNDAgMTAzNTAgMTI2NDUgOTgxMCAxMzA1MAozIDEgMiAxIC0xIDcgMCAwIC0xIDQuMDAw
IDAgMCAwIDkKCSAxNTE2NSA0MDUwIDE0ODA1IDQ0MTAgMTQ4MDUgNTgwNSAxNTIxMCA2NzUw
IDE2NDcwIDY1MjUgMTY3NDAgNTA4NQoJIDE2MDY1IDQwOTUgMTU0ODAgNDAwNSAxNTE2NSA0
MDUwCjMgMSAyIDEgLTEgNyAwIDAgLTEgNC4wMDAgMCAwIDAgNwoJIDE3NTA1IDM0MjAgMTcw
MTAgNTQ0NSAxODYzMCA2NjYwIDE5NzU1IDQ5NTAgMTg3MjAgMzQ2NSAxODA0NSAzMzc1Cgkg
MTc1MDUgMzQyMAozIDAgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMSAwIDQKCTEgMSAxLjAw
IDYwLjAwIDEyMC4wMAoJIDE2OTIwIDMxNTAgMTY2OTUgMzczNSAxNjY1MCA0NDEwIDE2NTYw
IDQ1OTAKMyAwIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDEgMCAzCgkxIDEgMS4wMCA2MC4w
MCAxMjAuMDAKCSAxOTcxMCAzMDYwIDE5MDM1IDMyNDAgMTg4NTUgMzU1NQozIDEgMiAxIC0x
IDcgMCAwIC0xIDQuMDAwIDAgMCAwIDgKCSA2OTMwIDMxNTAgODE5MCAzNTEwIDg2NDAgNTM1
NSA4MTkwIDU3NjAgNjQzNSA1ODUwIDU3MTUgNTUzNQoJIDU3MTUgMzk2MCA2OTMwIDMxNTAK
MyAwIDAgMSAtMSA3IDAgMCAtMSAwLjAwMCAwIDEgMCA0CgkxIDEgMS4wMCA2MC4wMCAxMjAu
MDAKCSA5NTQwIDI4ODAgOTU0MCAzNjQ1IDk0MDUgMzk2MCA4NTUwIDQzMjAKMyAxIDIgMSAt
MSA3IDAgMCAtMSA0LjAwMCAwIDAgMCA4CgkgMzY0NSAzNDIwIDMyNDAgNDA5NSAzMjQwIDU5
NDAgNDY4MCA2MTY1IDUxNzUgNTMxMCA0ODE1IDM1NTUKCSA0MzY1IDMxOTUgMzY0NSAzNDIw
CjMgMCAwIDEgLTEgNyAwIDAgLTEgMC4wMDAgMCAxIDAgMwoJMSAxIDEuMDAgNjAuMDAgMTIw
LjAwCgkgNTYyNSAyOTcwIDUyMjAgMzYwMCA0OTA1IDM3MzUKMyAwIDAgMSAtMSA3IDAgMCAt
MSAwLjAwMCAwIDEgMCAzCgkxIDEgMS4wMCA2MC4wMCAxMjAuMDAKCSAyMDM0MCAxMTI5NSAx
OTM1MCAxMTExNSAxODA5MCAxMTU2NQozIDAgMCAxIC0xIDcgMCAwIC0xIDAuMDAwIDAgMSAw
IDMKCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAoJIDIwMzg1IDEyOTYwIDE5NDQwIDEzNTkwIDE3
Njg1IDEzNjgwCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDE4MTUgNDE4NSAxMDM5
NSBXUklURSBMT0NLU1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMTY1MCA1
MzEwIDExNjU1IFBhcmFtOmxvY2tcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTgw
IDgyNSA1MzEwIDEyNjQ1IHdyaXRlXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2
NSAxMTU1IDUzMTAgMTI4NzAgbG9ja2VkP1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAg
NCAxNjUgNDk1IDYzNDUgMTI2MDAgWWVzXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDE2NSAzMzAgNTUzNSAxMzM2NSBOb1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAx
NjUgMzMwIDU0OTAgMTU4ODUgTm9cMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1
IDQ5NSA2MzAwIDE1MDMwIFllc1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxODAg
MTY1MCA3NjA1IDE1MzkwIHdyaXRlIGxvY2tcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAw
IDQgMTY1IDExNTUgNzYwNSAxNTEyMCByZWxlYXNlXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAu
MDAwMCA0IDIyNSAzMTM1IDgxMCAxMzUwMCAgIGxvY2s7YnRzbCAkMzEsICUwXDAwMQo0IDAg
LTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAzMzAgODEwIDEzMjMwIDE6XDAwMQo0IDAgLTEg
MCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAxMTU1IDgxMCAxMzc3MCAgIGpjIDRmXDAwMQo0IDAg
LTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAzMzAgODEwIDE0OTg1IDI6XDAwMQo0IDAgLTEg
MCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAzNjMwIDgxMCAxNTI1NSAgIHRlc3RsICQweDdmZmZm
ZmZmLCUwXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAxMzIwIDgxMCAxNTUy
NSAgIGpuZSAzZlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAyMTAgMzk2MCA2NDM1
IDE2MTEwIC5zZWN0aW9uIC50ZXh0LmxvY2ssImF4IlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAw
LjAwMDAgNCAxNjUgMzMwIDY0MzUgMTYzODAgMzpcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4w
MDAwIDQgMjI1IDI5NzAgNjQzNSAxNjY1MCAgIGxvY2s7IGJ0cmwgJDMxLDBcMDAxCjQgMCAt
MSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDE5ODAgNjU3MCAxMTA3MCBSZWFkIGxvY2tlZD9c
MDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTgwIDE2NTAgNjU3MCAxMTM0MCB3YWl0
IHVudGlsXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAxMzIwIDY1NzAgMTE2
MTAgcmVsZWFzZWRcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDI2NDAgMTY4
MjAgOTU1NSBVUEdSQURFIFRPIFdSSVRFXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDE2NSAyNjQwIDE2ODIwIDk4MjUgTE9DSyBBIFJFQUQgTE9DS1wwMDEKNCAxIC0xIDAgMCAx
MiAxOCAwLjAwMDAgNCAxNjUgMTgxNSAxNTYxNSAzNzM1IFBhcmFtOiBsb2NrXDAwMQo0IDEg
LTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSA5OTAgMTU2MTUgNDU0NSBsb2NrKytcMDAxCjQg
MSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTgwIDgyNSAxNTYxNSA1NzYwIHdyaXRlXDAwMQo0
IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAxMTU1IDE1NjE1IDYwMzAgbG9ja2VkP1ww
MDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMzMwIDE1ODQwIDY4NDAgTm9cMDAx
CjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDQ5NSAxNjQ3MCA1NzYwIFllc1wwMDEK
NCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgOTkwIDE4MzE1IDQwOTUgbG9jay0tXDAw
MQo0IDEgLTEgMCAwIDEyIDkgMC4wMDAwIDQgOTAgMTUzMCAxODMxNSA0Mjc1IHJlbGVhc2Ug
cmVhZCBsb2NrXDAwMQo0IDEgLTEgMCAwIDEyIDkgMC4wMDAwIDQgMTM1IDE1MzAgMTU2MTUg
NDcyNSBhY3F1aXJlIHJlYWQgbG9ja1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAx
ODAgODI1IDE4MzE1IDUzMTAgd3JpdGVcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQg
MTY1IDExNTUgMTgzMTUgNTU4MCBsb2NrZWQ/XDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAw
MCA0IDE2NSA0OTUgMTkyMTUgNTMxMCBZZXNcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAw
IDQgMTY1IDMzMCAxNzQ2MCA1MzEwIE5vXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDE2NSAzMzAgMTIyNDAgNDc3MCAxOlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAy
MjUgMTE1NSAxMjI0MCA1MzEwICAganMgMmZcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAw
IDQgMjEwIDI0NzUgMTIyNDAgNTA0MCAgIGxvY2s7IGluY2wgJTBcMDAxCjQgMCAtMSAwIDAg
MTIgMTggMC4wMDAwIDQgMTY1IDMzMCAxOTQ0MCAzOTE1IDI6XDAwMQo0IDAgLTEgMCAwIDEy
IDE4IDAuMDAwMCA0IDE5NSAyNDc1IDE5NDQwIDQxODUgICBsb2NrOyBkZWNsICUwXDAwMQo0
IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIxMCAzOTYwIDE5NDQwIDM2NDUgLnNlY3Rpb24g
LnRleHQubG9jaywiYXgiXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAzMzAg
MjAxMTUgNDg2MCAzOlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAyMjUgMTk4MCAy
MDExNSA1MTMwICAgY21wbCAkMCwlMFwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAy
MjUgMTE1NSAyMDExNSA1NDAwICAganMgM2JcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAw
IDQgMjI1IDEzMjAgMjAxMTUgNTY3MCAgIGptcCAxYlwwMDEKNCAxIC0xIDAgMCAxMiAxOCAw
LjAwMDAgNCAxNjUgMTY1MCAxNTYxNSAyMzQwIFJFQUQgTE9DS1NcMDAxCjQgMCAtMSAwIDAg
MTIgMTggMC4wMDAwIDQgMTY1IDMzMCA5NDUgNDQ3MCAxOlwwMDEKNCAwIC0xIDAgMCAxMiAx
OCAwLjAwMDAgNCAxNjUgOTkwIDk0NSA0NzM5ICAgbG9ja1wwMDEKNCAwIC0xIDAgMCAxMiAx
OCAwLjAwMDAgNCAyMjUgMTk4MCA5NDUgNTA3NSAgIGJ0c2wgJDAsJTBcMDAxCjQgMCAtMSAw
IDAgMTIgMTggMC4wMDAwIDQgMjI1IDExNTUgOTQ1IDU0MTEgICBqYyAyZlwwMDEKNCAwIC0x
IDAgMCAxMiAxOCAwLjAwMDAgNCAxNjUgMzMwIDQzMDMgNTEwMSBOb1wwMDEKNCAxIC0xIDAg
MCAxMiAxOCAwLjAwMDAgNCAxNjUgMTgxNSA0MTA0IDI5MDEgUGFyYW06IGxvY2tcMDAxCjQg
MCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDQ5NSA0OTU5IDQxMjkgWWVzXDAwMQo0IDAg
LTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIxMCAzOTYwIDU3MTggNjk1NyAuc2VjdGlvbiAudGV4
dC5sb2NrLCJheCJcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDMzMCA1NzE4
IDcyMjYgMjpcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjI1IDIzMTAgNTcxOCA3
NDk1ICAgIHRlc3RiICQxLCUwXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDIyNSAx
NDg1IDU3MTggNzc2NCAgICBqbmUgMmJcMDAxCjQgMCAtMSAwIDAgMTIgMTggMC4wMDAwIDQg
MjI1IDE0ODUgNTcxOCA4MDMzICAgIGptcCAxYlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAwLjAw
MDAgNCAxNjUgNDk1IDYwNDYgNTQ1NSBZZXNcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAw
IDQgMTY1IDMzMCA4MTI0IDU0NTUgTm9cMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQg
MTY1IDE0ODUgNDA5NSAyMDI1IFNQSU5MT0NLU1wwMDEKNCAwIC0xIDAgMCAxMiAxOSAwLjAw
MDAgNCAxOTUgMTk4MCA4MjM4IDE1NzUgV2FpdCB1bnRpbCBcMDAxCjQgMCAtMSAwIDAgMTIg
MTkgMC4wMDAwIDQgMTgwIDE5ODAgODIzOCAxODQ1IGxvY2sgaG9sZGVyXDAwMQo0IDAgLTEg
MCAwIDEyIDE5IDAuMDAwMCA0IDE4MCAyMTYwIDgyMzggMjExNSByZWxlYXNlcyB0aGVcMDAx
CjQgMCAtMSAwIDAgMTIgMTkgMC4wMDAwIDQgMjQwIDI4ODAgODIzOCAyMzg1IGxvY2sgYnkg
c2V0dGluZyBcMDAxCjQgMCAtMSAwIDAgMTIgMTkgMC4wMDAwIDQgMTk1IDE5ODAgODIzOCAy
NjU1IGl0IHRvIHplcm8uXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSAyMTQ1
IDU1ODAgMTYyMCBUZXN0IHRoZSBsb2NrXDAwMQo0IDAgLTEgMCAwIDEyIDE4IDAuMDAwMCA0
IDE2NSAxODE1IDU1ODAgMTg5MCB0byBiZSBoZWxkLlwwMDEKNCAwIC0xIDAgMCAxMiAxOCAw
LjAwMDAgNCAyMTAgMTgxNSA1NTgwIDIxNjAgSWYgc28sIHdhaXRcMDAxCjQgMCAtMSAwIDAg
MTIgMTggMC4wMDAwIDQgMjEwIDIxNDUgNTU4MCAyNDMwIHVudGlsIHVuaGVsZCxcMDAxCjQg
MCAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMjEwIDIzMTAgNTU4MCAyNzAwIGVsc2UsIGhvbGQg
aXQuXDAwMQo0IDEgLTEgMCAwIDEyIDE4IDAuMDAwMCA0IDE2NSA2NjAgNDA5NSA1NzE1IGxv
Y2tcMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDExNTUgNzI0NSA1MjY1IGxv
Y2tlZD9cMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDExNTUgNDA5NSA0MzIw
IGxvY2tlZD9cMDAxCjQgMSAtMSAwIDAgMTIgMTggMC4wMDAwIDQgMTY1IDI2NDAgMTY1NTAg
MTA1MDAgUGFyYW06IHJlYWQgbG9ja1wwMDEKNCAxIC0xIDAgMCAxMiAxOCAwLjAwMDAgNCAx
NjUgNDk1IDE4Njc1IDEyMzc1IFllc1wwMDEK

--Multipart_Sun_Jan_11_18:50:20_1998-1
Content-Type: text/plain; charset=US-ASCII

Linux-USB! http://peloncho.fis.ucm.es/~inaky/USB.html -
-
Inaky Perez Gonzalez -- PGP pubkey fingerprint -
inaky@peloncho.fis.ucm.es -- 8E 34 3A 62 64 99 E2 44 -
http://peloncho.fis.ucm.es/~inaky -- AD 7B 30 D9 DD FF 3E 4C -
--------------------------------- -- ----------------------- -
The loneliness of the long distance runner .....

--Multipart_Sun_Jan_11_18:50:20_1998-1--