Re: Unsigned integer math in BlackBox

From: Bernhard Treutwein <"Bernhard>
Date: Sun, 16 Nov 2003 21:15:07 +0100

----boundary-LibPST-iamunique-1071630020_-_-
Content-type: text/plain

Dear Wojtek,

on the one hand I agree absolutely that unsigned should be
available (at least in SYSTEM or some other low level module).
It is necessary for interfacing ...

but on the other hand your problem might be easily solved by applying
low level system tag "union" and doing the old and dirty trick
of overlaying different structures on the same memory:

IMPORT SYSTEM;

TYPE

Dirt = RECORD [ union ]
    i : INTEGER;
    h, l : BYTE (* maybe also the other way round, i.e., l, h *)
END;

VAR
    dirty : Dirt;

...
    dirty.h := byte; dirty.l := byte;
    memPtr := dirty.i;
...

I know this is against the spirit of BB/CP, but in the case
of hardware interfacing/language interfacing almost anything
sacrifices the means used.


----- Original Message -----
From: "Wojtek Skulski" <skulski{([at]})nowhere.xy
To: "BlackBox" <blackbox{([at]})nowhere.xy
Cc: "Wojtek Skulski" <skulski{([at]})nowhere.xy
Sent: Sunday, November 16, 2003 6:04 PM
Subject: Unsigned integer math in BlackBox


> Hello:
>
> I just reached a conclusion, that lack of unsigned integer math
> in BlackBox is a royal pain in the bottom. If not for my respect
> to our OuS friends, I would have used more explicit language
> to describe their language design decision.
>
> Here is the story. For last three days I has chasing missing bits
> in the memory pointer which I read from an field-programmable
> gate array. As usual in such circumstances, I was suspecting
> bad FPGA timing, or bugs in the embedded microcontroller C-code,
> or perhaps bad solder joints on my PCB. It did not occur to me
> that our rock-solid BlackBox can introduce subtle bugs. Right?
> Wrong. It can and it did. Here is how.
>
> The FPGA memory pointer is read in two 8-bit chunks, an MSB and LSB.
> The LSB contains lower 8 bits, while the MSB contains the remaining
> bits. The MSB and LSB arrive in a byte buffer, and then they are
> combined in the PC into one word. Written in the (vastly inferior
> and known for its obscurity) C-language this would have been simple:
>
> unsigned char lsb, msb;
> unsigned int memPtr;
> msb = buffer [2];
> lsb = buffer [3];
> memPtr = (msb << 8) + lsb;
>
> In the (vastly superior and known for its clarity) Component Pascal
> I have written code, which I thought was doing the same thing.
>
> VAR buffer: ARRAY 256 of BYTE;
> memPtr: INTEGER;
> memPtr := ASH (buffer [2], 8) + buffer [3];
>
> This is nice and looks innocent enough. Then the hell broke loose.
> Sometimes the memory pointer was correct. But sometimes it was not.
> Sometimes, but not always, bits were missing in the upper part of
> the pointer. After three days of debugging it turned out that
> the correct code should have been:
>
> VAR lsb, msb: INTEGER;
> buffer: ARRAY 256 of BYTE;
> memPtr: INTEGER;
> msb := ORD (BITS (ASH (buffer [2], 8)) * {8..15});
> lsb := ORD (BITS (buffer [3]) * {0..7});
> memPtr := msb + lsb;
>
> I leave it to you to figure out why this obfuscated code is the
> correct CP version of "(msb << 8) + lsb". It is also important
> to note that the bug was showing only for some bit patterns,
> but not for the others, what made it exceptionally hard to debug
> the original CP code.
>
> I want to point out that the CP language is not complete. The unsigned
> math should have been there. The users have been arguing with OuS for
> years that the unsigned math is essential, all in vain. I hope that
> I have made it more clear why the unsigned should have been in the
> language.
>
> Thank you,
>
> Wojtek Skulski skulski{([at]})nowhere.xy
>
> --------------------------------------------
>
> To unsubscribe from this mailing list, send a message containing the word
"unsubscribe" to:
> blackbox-request{([at]})nowhere.xy
>
> To get a list of valid e-mail commands and instructions on their usage,
send a message containing the word "help" to the above address.
>
> Send any problem reports or questions related to this email list to the
list owner at
> owner-blackbox{([at]})nowhere.xy
>
> Current posting policy:
>
> a) To post you should use the same address by which you are subscribed to
the mailing list. That way, the list server will recognize you as subscriber
and forward your posting immediately, without creating any overhead.
>
> b) If, for some reason, you cannot post from the address, by which you are
subscribed, your message will be moderated to avoid spam. Please understand
that moderation will often cause some delay, in particular over weekends or
holydays.

--------------------------------------------

To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xy

To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.

Send any problem reports or questions related to this email list to the list owner at
   owner-blackbox{([at]})nowhere.xy

Current posting policy:

a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.

b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.



----boundary-LibPST-iamunique-1071630020_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIERlYXIgV29qdGVrLFxwYXINClxwYXINCm9uIHRo
ZSBvbmUgaGFuZCBJIGFncmVlIGFic29sdXRlbHkgdGhhdCB1bnNpZ25lZCBzaG91bGQgYmVccGFy
DQphdmFpbGFibGUgKGF0IGxlYXN0IGluIFNZU1RFTSBvciBzb21lIG90aGVyIGxvdyBsZXZlbCBt
b2R1bGUpLlxwYXINCkl0IGlzIG5lY2Vzc2FyeSBmb3IgaW50ZXJmYWNpbmcgLi4uXHBhcg0KXHBh
cg0KYnV0IG9uIHRoZSBvdGhlciBoYW5kIHlvdXIgcHJvYmxlbSBtaWdodCBiZSBlYXNpbHkgc29s
dmVkIGJ5IGFwcGx5aW5nXHBhcg0KbG93IGxldmVsIHN5c3RlbSB0YWcgInVuaW9uIiBhbmQgZG9p
bmcgdGhlIG9sZCBhbmQgZGlydHkgdHJpY2tccGFyDQpvZiBvdmVybGF5aW5nIGRpZmZlcmVudCBz
dHJ1Y3R1cmVzIG9uIHRoZSBzYW1lIG1lbW9yeTpccGFyDQpccGFyDQpJTVBPUlQgU1lTVEVNO1xw
YXINClxwYXINClRZUEVccGFyDQpccGFyDQpEaXJ0ID0gUkVDT1JEIFsgdW5pb24gXVxwYXINCiAg
ICBpIDogSU5URUdFUjtccGFyDQogICAgaCwgbCA6IEJZVEUgICgqIG1heWJlIGFsc28gdGhlIG90
aGVyIHdheSByb3VuZCwgaS5lLiwgbCwgaCAqKVxwYXINCkVORDtccGFyDQpccGFyDQpWQVJccGFy
DQogICAgZGlydHkgOiBEaXJ0O1xwYXINClxwYXINCi4uLlxwYXINCiAgICBkaXJ0eS5oIDo9IGJ5
dGU7IGRpcnR5LmwgOj0gYnl0ZTtccGFyDQogICAgbWVtUHRyIDo9IGRpcnR5Lmk7XHBhcg0KLi4u
XHBhcg0KXHBhcg0KSSBrbm93IHRoaXMgaXMgYWdhaW5zdCB0aGUgc3Bpcml0IG9mIEJCL0NQLCBi
dXQgaW4gdGhlIGNhc2VccGFyDQpvZiBoYXJkd2FyZSBpbnRlcmZhY2luZy9sYW5ndWFnZSBpbnRl
cmZhY2luZyBhbG1vc3QgYW55dGhpbmdccGFyDQpzYWNyaWZpY2VzIHRoZSBtZWFucyB1c2VkLlxw
YXINClxwYXINClxwYXINCi0tLS0tIE9yaWdpbmFsIE1lc3NhZ2UgLS0tLS1ccGFyDQpGcm9tOiAi
V29qdGVrIFNrdWxza2kiIDxza3Vsc2tpQHBhcy5yb2NoZXN0ZXIuZWR1PlxwYXINClRvOiAiQmxh
Y2tCb3giIDxibGFja2JveEBvYmVyb24uY2g+XHBhcg0KQ2M6ICJXb2p0ZWsgU2t1bHNraSIgPHNr
dWxza2lAcGFzLnJvY2hlc3Rlci5lZHU+XHBhcg0KU2VudDogU3VuZGF5LCBOb3ZlbWJlciAxNiwg
MjAwMyA2OjA0IFBNXHBhcg0KU3ViamVjdDogVW5zaWduZWQgaW50ZWdlciBtYXRoIGluIEJsYWNr
Qm94XHBhcg0KXHBhcg0KXHBhcg0KPiBIZWxsbzpccGFyDQo+XHBhcg0KPiAgSSBqdXN0IHJlYWNo
ZWQgYSBjb25jbHVzaW9uLCB0aGF0IGxhY2sgb2YgdW5zaWduZWQgaW50ZWdlciBtYXRoXHBhcg0K
PiBpbiBCbGFja0JveCBpcyBhIHJveWFsIHBhaW4gaW4gdGhlIGJvdHRvbS4gSWYgbm90IGZvciBt
eSByZXNwZWN0XHBhcg0KPiB0byBvdXIgT3VTIGZyaWVuZHMsIEkgd291bGQgaGF2ZSB1c2VkIG1v
cmUgZXhwbGljaXQgbGFuZ3VhZ2VccGFyDQo+IHRvIGRlc2NyaWJlIHRoZWlyIGxhbmd1YWdlIGRl
c2lnbiBkZWNpc2lvbi5ccGFyDQo+XHBhcg0KPiBIZXJlIGlzIHRoZSBzdG9yeS4gRm9yIGxhc3Qg
dGhyZWUgZGF5cyBJIGhhcyBjaGFzaW5nIG1pc3NpbmcgYml0c1xwYXINCj4gaW4gdGhlIG1lbW9y
eSBwb2ludGVyIHdoaWNoIEkgcmVhZCBmcm9tIGFuIGZpZWxkLXByb2dyYW1tYWJsZVxwYXINCj4g
Z2F0ZSBhcnJheS4gQXMgdXN1YWwgaW4gc3VjaCBjaXJjdW1zdGFuY2VzLCBJIHdhcyBzdXNwZWN0
aW5nXHBhcg0KPiBiYWQgRlBHQSB0aW1pbmcsIG9yIGJ1Z3MgaW4gdGhlIGVtYmVkZGVkIG1pY3Jv
Y29udHJvbGxlciBDLWNvZGUsXHBhcg0KPiBvciBwZXJoYXBzIGJhZCBzb2xkZXIgam9pbnRzIG9u
IG15IFBDQi4gSXQgZGlkIG5vdCBvY2N1ciB0byBtZVxwYXINCj4gdGhhdCBvdXIgcm9jay1zb2xp
ZCBCbGFja0JveCBjYW4gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBSaWdodD9ccGFyDQo+IFdyb25n
LiBJdCBjYW4gYW5kIGl0IGRpZC4gSGVyZSBpcyBob3cuXHBhcg0KPlxwYXINCj4gVGhlIEZQR0Eg
bWVtb3J5IHBvaW50ZXIgaXMgcmVhZCBpbiB0d28gOC1iaXQgY2h1bmtzLCBhbiBNU0IgYW5kIExT
Qi5ccGFyDQo+IFRoZSBMU0IgY29udGFpbnMgbG93ZXIgOCBiaXRzLCB3aGlsZSB0aGUgTVNCIGNv
bnRhaW5zIHRoZSByZW1haW5pbmdccGFyDQo+IGJpdHMuIFRoZSBNU0IgYW5kIExTQiBhcnJpdmUg
aW4gYSBieXRlIGJ1ZmZlciwgYW5kIHRoZW4gdGhleSBhcmVccGFyDQo+IGNvbWJpbmVkIGluIHRo
ZSBQQyBpbnRvIG9uZSB3b3JkLiBXcml0dGVuIGluIHRoZSAodmFzdGx5IGluZmVyaW9yXHBhcg0K
PiBhbmQga25vd24gZm9yIGl0cyBvYnNjdXJpdHkpIEMtbGFuZ3VhZ2UgdGhpcyB3b3VsZCBoYXZl
IGJlZW4gc2ltcGxlOlxwYXINCj5ccGFyDQo+ICAgdW5zaWduZWQgY2hhciBsc2IsIG1zYjtccGFy
DQo+ICAgdW5zaWduZWQgaW50IG1lbVB0cjtccGFyDQo+ICAgbXNiID0gYnVmZmVyIFsyXTtccGFy
DQo+ICAgbHNiID0gYnVmZmVyIFszXTtccGFyDQo+ICAgbWVtUHRyID0gKG1zYiA8PCA4KSArIGxz
YjtccGFyDQo+XHBhcg0KPiBJbiB0aGUgKHZhc3RseSBzdXBlcmlvciBhbmQga25vd24gZm9yIGl0
cyBjbGFyaXR5KSBDb21wb25lbnQgUGFzY2FsXHBhcg0KPiBJIGhhdmUgd3JpdHRlbiBjb2RlLCB3
aGljaCBJIHRob3VnaHQgd2FzIGRvaW5nIHRoZSBzYW1lIHRoaW5nLlxwYXINCj5ccGFyDQo+ICAg
IFZBUiBidWZmZXI6IEFSUkFZIDI1NiBvZiBCWVRFO1xwYXINCj4gICAgICAgIG1lbVB0cjogSU5U
RUdFUjtccGFyDQo+ICAgIG1lbVB0ciA6PSAgQVNIIChidWZmZXIgWzJdLCA4KSArIGJ1ZmZlciBb
M107XHBhcg0KPlxwYXINCj4gVGhpcyBpcyBuaWNlIGFuZCBsb29rcyBpbm5vY2VudCBlbm91Z2gu
IFRoZW4gdGhlIGhlbGwgYnJva2UgbG9vc2UuXHBhcg0KPiBTb21ldGltZXMgdGhlIG1lbW9yeSBw
b2ludGVyIHdhcyBjb3JyZWN0LiBCdXQgc29tZXRpbWVzIGl0IHdhcyBub3QuXHBhcg0KPiBTb21l
dGltZXMsIGJ1dCBub3QgYWx3YXlzLCBiaXRzIHdlcmUgbWlzc2luZyBpbiB0aGUgdXBwZXIgcGFy
dCBvZlxwYXINCj4gdGhlIHBvaW50ZXIuIEFmdGVyIHRocmVlIGRheXMgb2YgZGVidWdnaW5nIGl0
IHR1cm5lZCBvdXQgdGhhdFxwYXINCj4gdGhlIGNvcnJlY3QgY29kZSBzaG91bGQgaGF2ZSBiZWVu
OlxwYXINCj5ccGFyDQo+ICAgVkFSICBsc2IsIG1zYjogSU5URUdFUjtccGFyDQo+ICAgICAgICBi
dWZmZXI6IEFSUkFZIDI1NiBvZiBCWVRFO1xwYXINCj4gICAgICAgIG1lbVB0cjogSU5URUdFUjtc
cGFyDQo+ICAgbXNiICA6PSBPUkQgKEJJVFMgKEFTSCAoYnVmZmVyIFsyXSwgOCkpICogXHs4Li4x
NVx9KTtccGFyDQo+ICAgbHNiICA6PSBPUkQgKEJJVFMgKGJ1ZmZlciBbM10pICogXHswLi43XH0p
O1xwYXINCj4gICBtZW1QdHIgOj0gIG1zYiArIGxzYjtccGFyDQo+XHBhcg0KPiBJIGxlYXZlIGl0
IHRvIHlvdSB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIG9iZnVzY2F0ZWQgY29kZSBpcyB0aGVccGFy
DQo+IGNvcnJlY3QgQ1AgdmVyc2lvbiBvZiAiKG1zYiA8PCA4KSArIGxzYiIuIEl0IGlzIGFsc28g
aW1wb3J0YW50XHBhcg0KPiB0byBub3RlIHRoYXQgdGhlIGJ1ZyB3YXMgc2hvd2luZyBvbmx5IGZv
ciBzb21lIGJpdCBwYXR0ZXJucyxccGFyDQo+IGJ1dCBub3QgZm9yIHRoZSBvdGhlcnMsIHdoYXQg
bWFkZSBpdCBleGNlcHRpb25hbGx5IGhhcmQgdG8gZGVidWdccGFyDQo+IHRoZSBvcmlnaW5hbCBD
UCBjb2RlLlxwYXINCj5ccGFyDQo+IEkgd2FudCB0byBwb2ludCBvdXQgdGhhdCB0aGUgQ1AgbGFu
Z3VhZ2UgaXMgbm90IGNvbXBsZXRlLiBUaGUgdW5zaWduZWRccGFyDQo+IG1hdGggc2hvdWxkIGhh
dmUgYmVlbiB0aGVyZS4gVGhlIHVzZXJzIGhhdmUgYmVlbiBhcmd1aW5nIHdpdGggT3VTIGZvclxw
YXINCj4geWVhcnMgdGhhdCB0aGUgdW5zaWduZWQgbWF0aCBpcyBlc3NlbnRpYWwsIGFsbCBpbiB2
YWluLiBJIGhvcGUgdGhhdFxwYXINCj4gSSBoYXZlIG1hZGUgaXQgbW9yZSBjbGVhciB3aHkgdGhl
IHVuc2lnbmVkIHNob3VsZCBoYXZlIGJlZW4gaW4gdGhlXHBhcg0KPiBsYW5ndWFnZS5ccGFyDQo+
XHBhcg0KPiBUaGFuayB5b3UsXHBhcg0KPlxwYXINCj4gV29qdGVrIFNrdWxza2kgc2t1bHNraUBw
YXMucm9jaGVzdGVyLmVkdVxwYXINCj5ccGFyDQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXHBhcg0KPlxwYXINCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlz
IG1haWxpbmcgbGlzdCwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgd29yZFxwYXINCiJ1
bnN1YnNjcmliZSIgdG86XHBhcg0KPiAgICBibGFja2JveC1yZXF1ZXN0QG9iZXJvbi5jaFxwYXIN
Cj5ccGFyDQo+IFRvIGdldCBhIGxpc3Qgb2YgdmFsaWQgZS1tYWlsIGNvbW1hbmRzIGFuZCBpbnN0
cnVjdGlvbnMgb24gdGhlaXIgdXNhZ2UsXHBhcg0Kc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0
aGUgd29yZCAiaGVscCIgdG8gdGhlIGFib3ZlIGFkZHJlc3MuXHBhcg0KPlxwYXINCj4gU2VuZCBh
bnkgcHJvYmxlbSByZXBvcnRzIG9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgZW1haWwgbGlz
dCB0byB0aGVccGFyDQpsaXN0IG93bmVyIGF0XHBhcg0KPiAgICBvd25lci1ibGFja2JveEBvYmVy
b24uY2hccGFyDQo+XHBhcg0KPiBDdXJyZW50IHBvc3RpbmcgcG9saWN5OlxwYXINCj5ccGFyDQo+
IGEpIFRvIHBvc3QgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUgYWRkcmVzcyBieSB3aGljaCB5b3Ug
YXJlIHN1YnNjcmliZWQgdG9ccGFyDQp0aGUgbWFpbGluZyBsaXN0LiBUaGF0IHdheSwgdGhlIGxp
c3Qgc2VydmVyIHdpbGwgcmVjb2duaXplIHlvdSBhcyBzdWJzY3JpYmVyXHBhcg0KYW5kIGZvcndh
cmQgeW91ciBwb3N0aW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNyZWF0aW5nIGFueSBvdmVyaGVh
ZC5ccGFyDQo+XHBhcg0KPiBiKSBJZiwgZm9yIHNvbWUgcmVhc29uLCB5b3UgY2Fubm90IHBvc3Qg
ZnJvbSB0aGUgYWRkcmVzcywgYnkgd2hpY2ggeW91IGFyZVxwYXINCnN1YnNjcmliZWQsIHlvdXIg
bWVzc2FnZSB3aWxsIGJlIG1vZGVyYXRlZCB0byBhdm9pZCBzcGFtLiBQbGVhc2UgdW5kZXJzdGFu
ZFxwYXINCnRoYXQgbW9kZXJhdGlvbiB3aWxsIG9mdGVuIGNhdXNlIHNvbWUgZGVsYXksIGluIHBh
cnRpY3VsYXIgb3ZlciB3ZWVrZW5kcyBvclxwYXINCmhvbHlkYXlzLlxwYXINClxwYXINCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHBhcg0KXHBhcg0KVG8gdW5z
dWJzY3JpYmUgZnJvbSB0aGlzIG1haWxpbmcgbGlzdCwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmlu
ZyB0aGUgd29yZCAidW5zdWJzY3JpYmUiIHRvOlxwYXINCiAgIGJsYWNrYm94LXJlcXVlc3RAb2Jl
cm9uLmNoXHBhcg0KXHBhcg0KVG8gZ2V0IGEgbGlzdCBvZiB2YWxpZCBlLW1haWwgY29tbWFuZHMg
YW5kIGluc3RydWN0aW9ucyBvbiB0aGVpciB1c2FnZSwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmlu
ZyB0aGUgd29yZCAiaGVscCIgdG8gdGhlIGFib3ZlIGFkZHJlc3MuXHBhcg0KXHBhcg0KU2VuZCBh
bnkgcHJvYmxlbSByZXBvcnRzIG9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgZW1haWwgbGlz
dCB0byB0aGUgbGlzdCBvd25lciBhdFxwYXINCiAgIG93bmVyLWJsYWNrYm94QG9iZXJvbi5jaFxw
YXINClxwYXINCkN1cnJlbnQgcG9zdGluZyBwb2xpY3k6XHBhcg0KXHBhcg0KYSkgVG8gcG9zdCB5
b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBhZGRyZXNzIGJ5IHdoaWNoIHlvdSBhcmUgc3Vic2NyaWJl
ZCB0byB0aGUgbWFpbGluZyBsaXN0LiBUaGF0IHdheSwgdGhlIGxpc3Qgc2VydmVyIHdpbGwgcmVj
b2duaXplIHlvdSBhcyBzdWJzY3JpYmVyIGFuZCBmb3J3YXJkIHlvdXIgcG9zdGluZyBpbW1lZGlh
dGVseSwgd2l0aG91dCBjcmVhdGluZyBhbnkgb3ZlcmhlYWQuXHBhcg0KXHBhcg0KYikgSWYsIGZv
ciBzb21lIHJlYXNvbiwgeW91IGNhbm5vdCBwb3N0IGZyb20gdGhlIGFkZHJlc3MsIGJ5IHdoaWNo
IHlvdSBhcmUgc3Vic2NyaWJlZCwgeW91ciBtZXNzYWdlIHdpbGwgYmUgbW9kZXJhdGVkIHRvIGF2
b2lkIHNwYW0uIFBsZWFzZSB1bmRlcnN0YW5kIHRoYXQgbW9kZXJhdGlvbiB3aWxsIG9mdGVuIGNh
dXNlIHNvbWUgZGVsYXksIGluIHBhcnRpY3VsYXIgb3ZlciB3ZWVrZW5kcyBvciBob2x5ZGF5cy5c
cGFyDQpccH19AHIg


----boundary-LibPST-iamunique-1071630020_-_---
Received on Sun Nov 16 2003 - 21:15:07 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:29:02 UTC