----boundary-LibPST-iamunique-310155147_-_-
Content-type: text/plain
Chris,
Here is what I would like the interface to module M to appear
DEFINITION M;
TYPE
A = POINTER TO ABSTRACT RECORD END;
Bits = POINTER TO RECORD (A)
x: POINTER TO ARRAY OF SET
END;
Ints = POINTER TO RECORD (A)
x: POINTER TO ARRAY OF INTEGER
END;
Reader = PROCEDURE (VAR a: A): BOOLEAN;
Writer = PROCEDURE (a: A);
PROCEDURE InstallReader (rd: Reader);
PROCEDURE InstallWriter (wr: Writer);
END M.
One just installs a specific reader that generates a Bits or an Ints.
Internally to M there are many procedures that take the abstract
quantity 'a' when a read operation is done and operate on it with procedures
that are methods of type either Bits or Ints whose definitions are given internally
and are abstractions of the of type A. But the user of M need not know anything
about this and BlackBox should not force the user to see these methods.
How can this be accomplished?
-Doug Danforth
CFB Software wrote:
Hi Doug,
I don't know if I can help but as nobody else has responded yet I'm
willing to give it a try. I'm interested in learning more about the
finer details of issues like this. However, I'm not sure from your
desription that I understand exactly what you are trying to do. Would it
be possible for you to show complete minimal examples of:
a) What you would like the code to look like
b) How you think it needs to be written to make it acceptable to
Blackbox
Regards,
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
-----Original Message-----
From: blackbox{([at]})nowhere.xy
Behalf Of Douglas G. Danforth
Sent: Wednesday, 13 June 2007 10:22 AM
To: BlackBox Mailing List
Subject: [BlackBox] - Hiding abstract methods
Folks,
I have a conceptual problem on which I would like your advice.
I have an ABSTRACT type A and two concrete types C1 and
C2 which are extensions of A.
TYPE
A* = POINTER TO ABSTRACT RECORD END;
C1* = POINTER TO RECORD(A) END;
C2* = POINTER TO RECORD(A) END;
I would like to export A (as shown with the '*'') but within the
module M where A is defined I *do not want* to export its
methods. I want them to be completely hidden so that the user
of M only needs to create the instance Ci (and fill its
fields (not shown))
and pass Ci to the module M in which the specific methods
appropriate to Ci
are specified (but also not exported). Within M, procedures take 'a'
(an instance of A which is either C1 or C2) and operates on it without
knowledge of its concrete form. The methods of A are simply called
and the concrete forms of those methods as C1 or C2 are actually
run.
Unfortunately, it seems that this scheme of things is not possible in
BlackBox.
I am forced to export the methods of A and also the methods of C1 and
the methods of C2, greatly cluttering the interface to M when
none of that
information will be used by the person operating with M.
Only the existence
of A and the extensions C1 and C2 are needed.
Is there a clean way to hide all of these methods?
-Doug Danforth
--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy
--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy
----boundary-LibPST-iamunique-310155147_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbWh0bWwxIFxkZWZmMHtcZm9udHRibA0Ke1xmMFxm
c3dpc3NcZmNoYXJzZXQwIEFyaWFsO30NCntcZjFcZm1vZGVybiBDb3VyaWVyIE5ldzt9DQp7XGYy
XGZuaWxcZmNoYXJzZXQyIFN5bWJvbDt9DQp7XGYzXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXIg
TmV3O319DQp7XGNvbG9ydGJsXHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQwXGdyZWVuMFxibHVlMjU1
O30NClx1YzFccGFyZFxwbGFpblxkZWZ0YWIzNjAgXGYwXGZzMjQgDQp7XCpcaHRtbHRhZzI0MyA8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwv
L0VOIj59DQp7XCpcaHRtbHRhZzMgXHBhciB9DQp7XCpcaHRtbHRhZzE5IDxodG1sPn0NCntcKlxo
dG1sdGFnMiBccGFyIH0NCntcKlxodG1sdGFnMzQgPGhlYWQ+fQ0Ke1wqXGh0bWx0YWcxIFxwYXIg
fQ0Ke1wqXGh0bWx0YWcyNDEgICB9DQp7XCpcaHRtbHRhZzEgXHBhciB9DQp7XCpcaHRtbHRhZzI0
MSAgIH0NCntcKlxodG1sdGFnMTc3IDx0aXRsZT59DQp7XCpcaHRtbHRhZzI0MSB9DQp7XCpcaHRt
bHRhZzE4NSA8L3RpdGxlPn0NCntcKlxodG1sdGFnMSBccGFyIH0NCntcKlxodG1sdGFnNDEgPC9o
ZWFkPn0NCntcKlxodG1sdGFnMiBccGFyIH0NCntcKlxodG1sdGFnNTAgPGJvZHkgYmdjb2xvcj0i
I2ZmZmZmZiIgdGV4dD0iIzAwMDAwMCI+fVxodG1scnRmIFx2aWV3a2luZDUNCntcKlxiYWNrZ3Jv
dW5kIHtcc2hwe1wqXHNocGluc3R7XHNwe1xzbiBmaWxsQ29sb3J9e1xzdiAxNjc3NzIxNX19e1xz
cHtcc24gZkZpbGxlZH17XHN2IDF9fX19fVxodG1scnRmMCANCntcKlxodG1sdGFnMCBccGFyIH17
XCpcaHRtbHRhZzY0fVxodG1scnRmIHtcaHRtbHJ0ZjAgQ2hyaXMsDQp7XCpcaHRtbHRhZzExNiA8
YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7XCpc
aHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQg
XHBhciB9SGVyZSBpcyB3aGF0IEkgd291bGQgbGlrZSB0aGUgaW50ZXJmYWNlIHRvIG1vZHVsZSBN
IHRvIGFwcGVhcg0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0KXGh0bWxydGYw
IA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGlu
ZQ0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfURFRklOSVRJT04gTTsNCntcKlxodG1s
dGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFy
IH0NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxo
dG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0
ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0
bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgVFlQRQ0Ke1wqXGh0bWx0YWcx
MTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0K
e1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFn
ODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31c
aHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwn
YTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYw
IA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgQSA9IFBPSU5U
RVIgVE8gQUJTVFJBQ1QgUkVDT1JEDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2Ew
XGh0bWxydGYwICBFTkQ7DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRt
bHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRm
IFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzg0ICZu
YnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxy
dGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRt
bHJ0ZjAgIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntc
KlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0
ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICBCaXRzID0gUE9JTlRFUiBUTyBSRUNPUkQg
KEEpDQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpc
aHRtbHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxy
dGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxo
dG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgIA0Ke1wqXGh0bWx0YWc4NCAm
bmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1s
cnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0
bWxydGYwICANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7
XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4
NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgeDogUE9JTlRFUiBUTyBBUlJBWSBPRiBT
RVQNCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxo
dG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0
ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0
bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgDQp7XCpcaHRtbHRhZzg0ICZu
YnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxy
dGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRt
bHJ0ZjAgIEVORDsNCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRm
MCANCntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxp
bmUNClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7
fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBc
J2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRm
MCAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0
bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5i
c3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgIEludHMgPSBQT0lOVEVSIFRPIFJFQ09SRCAoQSkN
CntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxodG1s
dGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAg
DQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0
YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgDQp7XCpcaHRtbHRhZzg0ICZuYnNw
O31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYg
XCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0
ZjAgIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxo
dG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZu
YnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwICB4OiBQT0lOVEVSIFRPIEFSUkFZIE9GIElOVEVH
RVINCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxo
dG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0
ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0
bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgDQp7XCpcaHRtbHRhZzg0ICZu
YnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxy
dGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRt
bHJ0ZjAgIEVORDsNCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRm
MCANCntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxp
bmUNClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7
fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBc
J2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRm
MCAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0
bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5i
c3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgIFJlYWRlciA9IFBST0NFRFVSRSAoVkFSIGE6IEEp
OiBCT09MRUFOOw0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0KXGh0bWxydGYw
IA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGlu
ZQ0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0Ke1wqXGh0bWx0YWc4NCAmbmJzcDt9
XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwn
YTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYw
ICANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRt
bHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc4NCAmbmJz
cDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgV3JpdGVyID0gUFJPQ0VEVVJFIChhOiBBKTsNCntc
KlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxodG1sdGFn
NCBccGFyIH0NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCAN
CntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRmIFwnYTBc
aHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxydGYwIA0K
e1wqXGh0bWx0YWc4NCAmbmJzcDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCAgUFJPQ0VEVVJFIElu
c3RhbGxSZWFkZXIgKHJkOiBSZWFkZXIpOw0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBc
bGluZQ0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0Ke1wqXGh0bWx0YWc4NCAmbmJz
cDt9XGh0bWxydGYgXCdhMFxodG1scnRmMCANCntcKlxodG1sdGFnODQgJm5ic3A7fVxodG1scnRm
IFwnYTBcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzg0ICZuYnNwO31caHRtbHJ0ZiBcJ2EwXGh0bWxy
dGYwICBQUk9DRURVUkUgSW5zdGFsbFdyaXRlciAod3I6IFdyaXRlcik7DQp7XCpcaHRtbHRhZzEx
NiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7
XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRh
ZzQgXHBhciB9RU5EIE0uDQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRt
bHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRm
IFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9T25lIGp1c3QgaW5zdGFsbHMg
YSBzcGVjaWZpYyByZWFkZXIgdGhhdCBnZW5lcmF0ZXMgYSBCaXRzIG9yIGFuIEludHMuDQp7XCpc
aHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQg
XHBhciB9SW50ZXJuYWxseSB0byBNIHRoZXJlIGFyZSBtYW55IHByb2NlZHVyZXMgdGhhdCB0YWtl
IHRoZSBhYnN0cmFjdA0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0KXGh0bWxy
dGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfXF1YW50aXR5ICdhJyB3aGVuIGEgcmVhZCBvcGVyYXRp
b24gaXMgZG9uZSBhbmQgb3BlcmF0ZSBvbiBpdCB3aXRoDQp7XCpcaHRtbHRhZzQgXHBhciB9XGh0
bWxydGYgIFxodG1scnRmMCBwcm9jZWR1cmVzDQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRm
IFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9dGhhdCBhcmUgbWV0aG9kcyBv
ZiB0eXBlIGVpdGhlciBCaXRzIG9yIEludHMgd2hvc2UgZGVmaW5pdGlvbnMgYXJlDQp7XCpcaHRt
bHRhZzQgXHBhciB9XGh0bWxydGYgIFxodG1scnRmMCBnaXZlbiBpbnRlcm5hbGx5DQp7XCpcaHRt
bHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBh
ciB9YW5kIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIG9mIHR5cGUgQS4NCntcKlxodG1sdGFnODQg
Jm5ic3A7fVxodG1scnRmIFwnYTBcaHRtbHJ0ZjAgIEJ1dCB0aGUgdXNlciBvZiBNIG5lZWQgbm90
IGtub3cNCntcKlxodG1sdGFnNCBccGFyIH1caHRtbHJ0ZiAgXGh0bWxydGYwIGFueXRoaW5nDQp7
XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRh
ZzQgXHBhciB9YWJvdXQgdGhpcyBhbmQgQmxhY2tCb3ggc2hvdWxkIG5vdCBmb3JjZSB0aGUgdXNl
ciB0byBzZWUgdGhlc2UgbWV0aG9kcy4NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxp
bmUNClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnMTE2IDxicj59
XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH1Ib3cgY2FuIHRo
aXMgYmUgYWNjb21wbGlzaGVkPw0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRtbHJ0ZiBcbGluZQ0K
XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfQ0Ke1wqXGh0bWx0YWcxMTYgPGJyPn1caHRt
bHJ0ZiBcbGluZQ0KXGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc0IFxwYXIgfS1Eb3VnIERhbmZvcnRo
DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRt
bHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0
ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9DQp7XCpcaHRtbHRhZzExNiA8YnI+fVxodG1scnRmIFxs
aW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9Q0ZCIFNvZnR3YXJlIHdyb3RlOg0K
e1wqXGh0bWx0YWc0IFxwYXIgfVxodG1scnRmICBcaHRtbHJ0ZjAge1wqXGh0bWx0YWc3Mn1caHRt
bHJ0ZlxwYXJ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFnOTYgPGJsb2NrcXVvdGUgY2l0ZT0ibWlk
OkFNRVRIWVNUMnFmNjlhWmJMQVgwMDAwMDE3YkBhbWV0aHlzdDIub2Jlcm9uLmNoIlxwYXIgIHR5
cGU9ImNpdGUiPn1caHRtbHJ0ZiBccGFyDQp7XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcwIFxwYXIg
fQ0Ke1wqXGh0bWx0YWcyNDAgICB9DQp7XCpcaHRtbHRhZzEyOCA8cHJlIHdyYXA9IiI+fVxodG1s
cnRmIHtccGFyZFxwbGFpblxmMVxmczIwIFxodG1scnRmMCBcaHRtbHJ0ZiB7XGh0bWxydGYwIFxs
aTM2MCBIaSBEb3VnLFxsaW5lDQpcbGluZQ0KSSBkb24ndCBrbm93IGlmIEkgY2FuIGhlbHAgYnV0
IGFzIG5vYm9keSBlbHNlIGhhcyByZXNwb25kZWQgeWV0IEknbVxsaW5lDQp3aWxsaW5nIHRvIGdp
dmUgaXQgYSB0cnkuIEknbSBpbnRlcmVzdGVkIGluIGxlYXJuaW5nIG1vcmUgYWJvdXQgdGhlXGxp
bmUNCmZpbmVyIGRldGFpbHMgb2YgaXNzdWVzIGxpa2UgdGhpcy4gSG93ZXZlciwgSSdtIG5vdCBz
dXJlIGZyb20geW91clxsaW5lDQpkZXNyaXB0aW9uIHRoYXQgSSB1bmRlcnN0YW5kIGV4YWN0bHkg
d2hhdCB5b3UgYXJlIHRyeWluZyB0byBkby4gV291bGQgaXRcbGluZQ0KYmUgcG9zc2libGUgZm9y
IHlvdSB0byBzaG93IGNvbXBsZXRlIG1pbmltYWwgZXhhbXBsZXMgb2Y6IFxsaW5lDQpcbGluZQ0K
YSkgV2hhdCB5b3Ugd291bGQgbGlrZSB0aGUgY29kZSB0byBsb29rIGxpa2UgXGxpbmUNClxsaW5l
DQpiKSBIb3cgeW91IHRoaW5rIGl0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gbWFrZSBpdCBhY2Nl
cHRhYmxlIHRvXGxpbmUNCkJsYWNrYm94XGxpbmUNClxsaW5lDQpSZWdhcmRzLFxsaW5lDQpDaHJp
cyBCdXJyb3dzXGxpbmUNCkNGQiBTb2Z0d2FyZVxsaW5lDQp7fQ0Ke1wqXGh0bWx0YWc4NCA8YSBj
bGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwOi8vd3d3LmNmYnNvZnR3YXJl
LmNvbS9ncGNwIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cDov
L3d3dy5jZmJzb2Z0d2FyZS5jb20vZ3BjcCJ9fXtcZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYwIGh0
dHA6Ly93d3cuY2Zic29mdHdhcmUuY29tL2dwY3BcaHRtbHJ0ZiB9XGh0bWxydGYwIFxodG1scnRm
IH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59XGxpbmUNClxsaW5lDQogIFxodG1scnRm
XHBhcn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWcxMzYgPC9wcmU+fVxodG1scnRmIH1caHRtbHJ0
ZjAgDQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgIH0NCntcKlxodG1sdGFn
OTYgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+fVxodG1scnRmIFxwYXINCntcaHRtbHJ0ZjAgDQp7
XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgICAgfQ0Ke1wqXGh0bWx0YWcxMjgg
PHByZSB3cmFwPSIiPn1caHRtbHJ0ZiB7XHBhcmRccGxhaW5cZjFcZnMyMCBcaHRtbHJ0ZjAgXGh0
bWxydGYge1xodG1scnRmMCBcbGk3MjAgLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS1cbGluZQ0K
RnJvbToge30NCntcKlxodG1sdGFnODQgPGEgY2xhc3M9Im1vei10eHQtbGluay1hYmJyZXZpYXRl
ZCIgaHJlZj0ibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCI+fVxodG1scnRmIHtcZmllbGR7XCpc
ZmxkaW5zdHtIWVBFUkxJTksgIm1haWx0bzpibGFja2JveEBvYmVyb24uY2gifX17XGZsZHJzbHRc
Y2YxXHVsIFxodG1scnRmMCBibGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0bWxydGYwIFxo
dG1scnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59IFt7fQ0Ke1wqXGh0bWx0YWc4
NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJtYWlsdG86YmxhY2tib3hA
b2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAibWFpbHRv
OmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYwIG1haWx0bzpi
bGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0bWxydGYwIFxodG1scnRmIH1caHRtbHJ0ZjAg
DQp7XCpcaHRtbHRhZzkyIDwvYT59XSBPbiBcbGluZQ0KQmVoYWxmIE9mIERvdWdsYXMgRy4gRGFu
Zm9ydGhcbGluZQ0KU2VudDogV2VkbmVzZGF5LCAxMyBKdW5lIDIwMDcgMTA6MjIgQU1cbGluZQ0K
VG86IEJsYWNrQm94IE1haWxpbmcgTGlzdFxsaW5lDQpTdWJqZWN0OiBbQmxhY2tCb3hdIC0gSGlk
aW5nIGFic3RyYWN0IG1ldGhvZHNcbGluZQ0KXGxpbmUNClxsaW5lDQpGb2xrcyxcbGluZQ0KXGxp
bmUNCkkgaGF2ZSBhIGNvbmNlcHR1YWwgcHJvYmxlbSBvbiB3aGljaCBJIHdvdWxkIGxpa2UgeW91
ciBhZHZpY2UuXGxpbmUNClxsaW5lDQpJIGhhdmUgYW4gQUJTVFJBQ1QgdHlwZSBBIGFuZCB0d28g
Y29uY3JldGUgdHlwZXMgQzEgYW5kXGxpbmUNCkMyIHdoaWNoIGFyZSBleHRlbnNpb25zIG9mIEEu
XGxpbmUNClxsaW5lDQogICAgVFlQRVxsaW5lDQogICAgICAgQSogPSBQT0lOVEVSIFRPIEFCU1RS
QUNUIFJFQ09SRCBFTkQ7XGxpbmUNCiAgICAgICBDMSogPSBQT0lOVEVSIFRPIFJFQ09SRChBKSBF
TkQ7XGxpbmUNCiAgICAgICBDMiogPSBQT0lOVEVSIFRPIFJFQ09SRChBKSBFTkQ7XGxpbmUNClxs
aW5lDQpJIHdvdWxkIGxpa2UgdG8gZXhwb3J0IEEgKGFzIHNob3duIHdpdGggdGhlICcqJycpIGJ1
dCB3aXRoaW4gdGhlXGxpbmUNCm1vZHVsZSBNIHdoZXJlIEEgaXMgZGVmaW5lZCBJICpkbyBub3Qg
d2FudCogdG8gZXhwb3J0IGl0c1xsaW5lDQptZXRob2RzLiAgSSB3YW50IHRoZW0gdG8gYmUgY29t
cGxldGVseSBoaWRkZW4gc28gdGhhdCB0aGUgdXNlclxsaW5lDQpvZiBNIG9ubHkgbmVlZHMgdG8g
Y3JlYXRlIHRoZSBpbnN0YW5jZSBDaSAoYW5kIGZpbGwgaXRzIFxsaW5lDQpmaWVsZHMgKG5vdCBz
aG93bikpXGxpbmUNCmFuZCBwYXNzIENpIHRvIHRoZSBtb2R1bGUgTSBpbiB3aGljaCB0aGUgc3Bl
Y2lmaWMgbWV0aG9kcyBcbGluZQ0KYXBwcm9wcmlhdGUgdG8gQ2lcbGluZQ0KYXJlIHNwZWNpZmll
ZCAoYnV0IGFsc28gbm90IGV4cG9ydGVkKS4gIFdpdGhpbiBNLCBwcm9jZWR1cmVzIHRha2UgJ2En
XGxpbmUNCihhbiBpbnN0YW5jZSBvZiBBIHdoaWNoIGlzIGVpdGhlciBDMSBvciBDMikgYW5kIG9w
ZXJhdGVzIG9uIGl0IHdpdGhvdXRcbGluZQ0Ka25vd2xlZGdlIG9mIGl0cyBjb25jcmV0ZSBmb3Jt
LiAgVGhlIG1ldGhvZHMgb2YgQSBhcmUgc2ltcGx5IGNhbGxlZFxsaW5lDQphbmQgdGhlIGNvbmNy
ZXRlIGZvcm1zIG9mIHRob3NlIG1ldGhvZHMgYXMgQzEgb3IgQzIgYXJlIGFjdHVhbGx5XGxpbmUN
CnJ1bi5cbGluZQ0KXGxpbmUNClVuZm9ydHVuYXRlbHksIGl0IHNlZW1zIHRoYXQgdGhpcyBzY2hl
bWUgb2YgdGhpbmdzIGlzIG5vdCBwb3NzaWJsZSBpbiBcbGluZQ0KQmxhY2tCb3guXGxpbmUNCkkg
YW0gZm9yY2VkIHRvIGV4cG9ydCB0aGUgbWV0aG9kcyBvZiBBIGFuZCBhbHNvIHRoZSBtZXRob2Rz
IG9mIEMxIGFuZFxsaW5lDQp0aGUgbWV0aG9kcyBvZiBDMiwgZ3JlYXRseSBjbHV0dGVyaW5nIHRo
ZSBpbnRlcmZhY2UgdG8gTSB3aGVuIFxsaW5lDQpub25lIG9mIHRoYXRcbGluZQ0KaW5mb3JtYXRp
b24gd2lsbCBiZSB1c2VkIGJ5IHRoZSBwZXJzb24gb3BlcmF0aW5nIHdpdGggTS4gIFxsaW5lDQpP
bmx5IHRoZSBleGlzdGVuY2VcbGluZQ0Kb2YgQSBhbmQgdGhlIGV4dGVuc2lvbnMgQzEgYW5kIEMy
IGFyZSBuZWVkZWQuXGxpbmUNClxsaW5lDQpJcyB0aGVyZSBhIGNsZWFuIHdheSB0byBoaWRlIGFs
bCBvZiB0aGVzZSBtZXRob2RzP1xsaW5lDQpcbGluZQ0KLURvdWcgRGFuZm9ydGhcbGluZQ0KXGxp
bmUNCi0tLSBCbGFja0JveFxsaW5lDQotLS0gc2VuZCBzdWJqZWN0IEhFTFAgb3IgVU5TVUJTQ1JJ
QkUgdG8ge30NCntcKlxodG1sdGFnODQgPGEgY2xhc3M9Im1vei10eHQtbGluay1hYmJyZXZpYXRl
ZCIgaHJlZj0ibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCI+fVxodG1scnRmIHtcZmllbGR7XCpc
ZmxkaW5zdHtIWVBFUkxJTksgIm1haWx0bzpibGFja2JveEBvYmVyb24uY2gifX17XGZsZHJzbHRc
Y2YxXHVsIFxodG1scnRmMCBibGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0bWxydGYwIFxo
dG1scnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59XGxpbmUNCiAgICBcaHRtbHJ0
ZlxwYXJ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFnMTM2IDwvcHJlPn1caHRtbHJ0ZiB9XGh0bWxy
dGYwIA0Ke1wqXGh0bWx0YWcwIFxwYXIgfQ0Ke1wqXGh0bWx0YWcyNDAgICB9DQp7XCpcaHRtbHRh
ZzEwNCA8L2Jsb2NrcXVvdGU+fVxodG1scnRmIH1ccGFyDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRh
ZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgIH0NCntcKlxodG1sdGFnMTI4IDxwcmUgd3JhcD0i
Ij59XGh0bWxydGYge1xwYXJkXHBsYWluXGYxXGZzMjAgXGh0bWxydGYwIFxodG1scnRmIHtcaHRt
bHJ0ZjAgXGxpMzYwIA0Ke1wqXGh0bWx0YWcyNDQgPCEtLS0tPn1cbGluZQ0KLS0tIEJsYWNrQm94
XGxpbmUNCi0tLSBzZW5kIHN1YmplY3QgSEVMUCBvciBVTlNVQlNDUklCRSB0byB7fQ0Ke1wqXGh0
bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86
YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElO
SyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYw
IGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxydGYgfVxodG1scnRm
MCANCntcKlxodG1sdGFnOTIgPC9hPn1cbGluZQ0KXGxpbmUNClxsaW5lDQogIFxodG1scnRmXHBh
cn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWcxMzYgPC9wcmU+fVxodG1scnRmIH1caHRtbHJ0ZjAg
DQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzEwNCA8L2Jsb2NrcXVvdGU+fVxodG1s
cnRmIH1ccGFyDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzU4
IDwvYm9keT59DQp7XCpcaHRtbHRhZzIgXHBhciB9DQp7XCpcaHRtbHRhZzI3IDwvaHRtbD59DQp7
XCpcaHRtbHRhZzMgfX0AMTYgPA==
----boundary-LibPST-iamunique-310155147_-_---
Received on Thu Jun 14 2007 - 23:24:31 UTC