- Hiding abstract methods

From: Douglas G. Danforth <"Douglas>
Date: Fri, 15 Jun 2007 11:13:46 -0700

----boundary-LibPST-iamunique-1480712487_-_- Content-type: text/plain Bernhard, Thanks, I need to think more about that in the context of what I am doing. -Doug Treutwein Bernhard wrote: Hi Bob & Doug, what about a hierarchy of modules like the abstraction layers given in BlackBox: Abstractions in almost purely abstract modules (like e.g. the Files module of BlackBox), which reveal only the very necessary details and provide mechanisms for factories (directories in BB terminology). Concrete implementations (like HostFiles) import these, initialize the factories and have (more or less) private interfaces. Although now the details are still visible (in principle via the low level interfaces) you have a least a separation of the published stuff. regards -- Bernhard Treutwein, IuK, Ref. III A 3 Bernhard.Treutwein(at)verwaltung uni-muenchen de -----Original Message----- From: blackbox{([at]})nowhere.xy Behalf Of Bob Walkden Sent: Friday, June 15, 2007 8:28 AM To: BlackBox Mailing List Subject: [BlackBox] - Hiding abstract methods You can't simultaneously hide the methods of A and have A as an abstract type extensible from other modules - it's a contradiction. An abstract type can't be instantiated, it must be inherited and its inheritors must instantiate its parts. If the parts are hidden then it's impossible for its inheritors (in other modules) to instantiate them. -- Regards, Bob _____ From: blackbox{([at]})nowhere.xy Behalf Of Douglas G. Danforth Sent: 15 June 2007 03:35 To: BlackBox Mailing List Subject: [BlackBox] - Hiding abstract methods Bob, I am trying to keep the amount of stuff shown to a minimum. There is also a procedure Run that is exported from M that when called starts up and eventually calls the installed reader and writer (repeatedly). The reader and writer do not invoke the hidden procedures they are passive and are called by M when needed. How do I hide the methods of A, Bits, and Ints? -Doug Danforth Bob Walkden wrote: How and when are M's internal procedures invoked? If the client's reader is to invoke them directly then they must be made public. If you want M's hidden procedures to be invoked indirectly by the reader or writer you may need to provide a couple of Notifier procedures in M and have the reader or writer call them explicitly. -- Regards, Bob _____ From: blackbox{([at]})nowhere.xy [mailto:blackbox{([at]})nowhere.xy Sent: 14 June 2007 22:25 To: BlackBox Mailing List Subject: [BlackBox] - Hiding abstract methods 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 --- BlackBox --- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy ----boundary-LibPST-iamunique-1480712487_-_- Content-type: application/rtf Content-transfer-encoding: base64 Content-Disposition: attachment; filename="rtf-body.rtf" e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbWh0bWwxIFxkZWZmMHtcZm9udHRibA0Ke1xmMFxm c3dpc3MgQXJpYWw7fQ0Ke1xmMVxmbW9kZXJuIENvdXJpZXIgTmV3O30NCntcZjJcZm5pbFxmY2hh cnNldDIgU3ltYm9sO30NCntcZjNcZm1vZGVyblxmY2hhcnNldDAgQ291cmllciBOZXc7fX0NCntc Y29sb3J0YmxccmVkMFxncmVlbjBcYmx1ZTA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7fQ0KXHVjMVxw YXJkXHBsYWluXGRlZnRhYjM2MCBcZjBcZnMyNCANCntcKlxodG1sdGFnMjQzIDwhRE9DVFlQRSBo dG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPn0NCntc KlxodG1sdGFnMyBccGFyIH0NCntcKlxodG1sdGFnMTkgPGh0bWw+fQ0Ke1wqXGh0bWx0YWcyIFxw YXIgfQ0Ke1wqXGh0bWx0YWczNCA8aGVhZD59DQp7XCpcaHRtbHRhZzEgXHBhciB9DQp7XCpcaHRt bHRhZzI0MSAgIH0NCntcKlxodG1sdGFnMSBccGFyIH0NCntcKlxodG1sdGFnNDEgPC9oZWFkPn0N CntcKlxodG1sdGFnMiBccGFyIH0NCntcKlxodG1sdGFnNTAgPGJvZHkgYmdjb2xvcj0iI2ZmZmZm ZiIgdGV4dD0iIzAwMDAwMCI+fVxodG1scnRmIFx2aWV3a2luZDUNCntcKlxiYWNrZ3JvdW5kIHtc c2hwe1wqXHNocGluc3R7XHNwe1xzbiBmaWxsQ29sb3J9e1xzdiAxNjc3NzIxNX19e1xzcHtcc24g ZkZpbGxlZH17XHN2IDF9fX19fVxodG1scnRmMCANCntcKlxodG1sdGFnMCBccGFyIH17XCpcaHRt bHRhZzY0fVxodG1scnRmIHtcaHRtbHJ0ZjAgQmVybmhhcmQsDQp7XCpcaHRtbHRhZzExNiA8YnI+ fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBhciB9VGhhbmtzLCBJ IG5lZWQgdG8gdGhpbmsgbW9yZSBhYm91dCB0aGF0IGluIHRoZSBjb250ZXh0IG9mIHdoYXQgSSBh bQ0Ke1wqXGh0bWx0YWc0IFxwYXIgfVxodG1scnRmICBcaHRtbHJ0ZjAgZG9pbmcuDQp7XCpcaHRt bHRhZzExNiA8YnI+fVxodG1scnRmIFxsaW5lDQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzQgXHBh ciB9LURvdWcNCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUNClxodG1scnRmMCAN CntcKlxodG1sdGFnNCBccGFyIH0NCntcKlxodG1sdGFnMTE2IDxicj59XGh0bWxydGYgXGxpbmUN ClxodG1scnRmMCANCntcKlxodG1sdGFnNCBccGFyIH1UcmV1dHdlaW4gQmVybmhhcmQgd3JvdGU6 DQp7XCpcaHRtbHRhZzQgXHBhciB9XGh0bWxydGYgIFxodG1scnRmMCB7XCpcaHRtbHRhZzcyfVxo dG1scnRmXHBhcn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWc5NiA8YmxvY2txdW90ZSBjaXRlPSJt aWQ6QU1FVEhZU1QyVHJwd0FDa1dIWjAwMDAwMjkwQGFtZXRoeXN0Mi5vYmVyb24uY2giXHBhciAg dHlwZT0iY2l0ZSI+fVxodG1scnRmIFxwYXINCntcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzAgXHBh ciB9DQp7XCpcaHRtbHRhZzI0MCAgIH0NCntcKlxodG1sdGFnMTI4IDxwcmUgd3JhcD0iIj59XGh0 bWxydGYge1xwYXJkXHBsYWluXGYxXGZzMjAgXGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0ZjAg XGxpMzYwIEhpIEJvYiANCntcKlxodG1sdGFnODQgJmFtcDt9XGh0bWxydGYgJlxodG1scnRmMCAg RG91ZyxcbGluZQ0KXGxpbmUNCndoYXQgYWJvdXQgYSBoaWVyYXJjaHkgb2YgbW9kdWxlcyBsaWtl IHRoZSBhYnN0cmFjdGlvblxsaW5lDQpsYXllcnMgZ2l2ZW4gaW4gQmxhY2tCb3g6XGxpbmUNClxs aW5lDQpBYnN0cmFjdGlvbnMgaW4gYWxtb3N0IHB1cmVseSBhYnN0cmFjdCBtb2R1bGVzIChsaWtl IGUuZy5cbGluZQ0KdGhlIEZpbGVzIG1vZHVsZSBvZiBCbGFja0JveCksIHdoaWNoIHJldmVhbCBv bmx5IHRoZVxsaW5lDQp2ZXJ5IG5lY2Vzc2FyeSBkZXRhaWxzIGFuZCBwcm92aWRlIG1lY2hhbmlz bXMgZm9yXGxpbmUNCmZhY3RvcmllcyAoZGlyZWN0b3JpZXMgaW4gQkIgdGVybWlub2xvZ3kpLiBD b25jcmV0ZSBcbGluZQ0KaW1wbGVtZW50YXRpb25zIChsaWtlIEhvc3RGaWxlcykgaW1wb3J0IHRo ZXNlLCBpbml0aWFsaXplXGxpbmUNCnRoZSBmYWN0b3JpZXMgYW5kIGhhdmUgKG1vcmUgb3IgbGVz cykgcHJpdmF0ZSBpbnRlcmZhY2VzLlxsaW5lDQpcbGluZQ0KQWx0aG91Z2ggbm93IHRoZSBkZXRh aWxzIGFyZSBzdGlsbCB2aXNpYmxlIChpbiBwcmluY2lwbGVcbGluZQ0KdmlhIHRoZSBsb3cgbGV2 ZWwgaW50ZXJmYWNlcykgeW91IGhhdmUgYSBsZWFzdCBhIHNlcGFyYXRpb25cbGluZQ0Kb2YgdGhl IHB1Ymxpc2hlZCBzdHVmZi5cbGluZQ0KXGxpbmUNCnJlZ2FyZHNcbGluZQ0KLS1cbGluZQ0KXHRh YiBCZXJuaGFyZCBUcmV1dHdlaW4sIEl1SywgUmVmLiBJSUkgQSAzXGxpbmUNClx0YWIgQmVybmhh cmQuVHJldXR3ZWluKGF0KXZlcndhbHR1bmcgdW5pLW11ZW5jaGVuIGRlXGxpbmUNClxsaW5lDQog IFxodG1scnRmXHBhcn1caHRtbHJ0ZjANCg0Ke1wqXGh0bWx0YWcxMzYgPC9wcmU+fVxodG1scnRm IH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgIH0NCntc KlxodG1sdGFnOTYgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+fVxodG1scnRmIFxwYXINCntcaHRt bHJ0ZjAgDQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgICAgfQ0Ke1wqXGh0 bWx0YWcxMjggPHByZSB3cmFwPSIiPn1caHRtbHJ0ZiB7XHBhcmRccGxhaW5cZjFcZnMyMCBcaHRt bHJ0ZjAgXGh0bWxydGYge1xodG1scnRmMCBcbGk3MjAgLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS1cbGluZQ0KRnJvbToge30NCntcKlxodG1sdGFnODQgPGEgY2xhc3M9Im1vei10eHQtbGluay1h YmJyZXZpYXRlZCIgaHJlZj0ibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCI+fVxodG1scnRmIHtc ZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgIm1haWx0bzpibGFja2JveEBvYmVyb24uY2gifX17 XGZsZHJzbHRcY2YxXHVsIFxodG1scnRmMCBibGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0 bWxydGYwIFxodG1scnRmIH1caHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59IFt7fQ0Ke1wq XGh0bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJtYWlsdG86 YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElO SyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYw IG1haWx0bzpibGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0bWxydGYwIFxodG1scnRmIH1c aHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59XSBPbiBcbGluZQ0KQmVoYWxmIE9mIEJvYiBX YWxrZGVuXGxpbmUNClNlbnQ6IEZyaWRheSwgSnVuZSAxNSwgMjAwNyA4OjI4IEFNXGxpbmUNClRv OiBCbGFja0JveCBNYWlsaW5nIExpc3RcbGluZQ0KU3ViamVjdDogW0JsYWNrQm94XSAtIEhpZGlu ZyBhYnN0cmFjdCBtZXRob2RzXGxpbmUNClxsaW5lDQpcbGluZQ0KWW91IGNhbid0IHNpbXVsdGFu ZW91c2x5IGhpZGUgdGhlIG1ldGhvZHMgb2YgQSBhbmQgaGF2ZSBBIGFzIFxsaW5lDQphbiBhYnN0 cmFjdCB0eXBlIGV4dGVuc2libGUgZnJvbSBvdGhlciBtb2R1bGVzIC0gaXQncyBhIFxsaW5lDQpj b250cmFkaWN0aW9uLiBBbiBhYnN0cmFjdCB0eXBlIGNhbid0IGJlIGluc3RhbnRpYXRlZCwgaXQg XGxpbmUNCm11c3QgYmUgaW5oZXJpdGVkIGFuZCBpdHMgaW5oZXJpdG9ycyBtdXN0IGluc3RhbnRp YXRlIGl0cyBcbGluZQ0KcGFydHMuIElmIHRoZSBwYXJ0cyBhcmUgaGlkZGVuIHRoZW4gaXQncyBp bXBvc3NpYmxlIGZvciBpdHMgXGxpbmUNCmluaGVyaXRvcnMgKGluIG90aGVyIG1vZHVsZXMpIHRv IGluc3RhbnRpYXRlIHRoZW0uXGxpbmUNCiBcbGluZQ0KLS1cbGluZQ0KUmVnYXJkcyxcbGluZQ0K IEJvYiBcbGluZQ0KIFxsaW5lDQpcbGluZQ0KXGxpbmUNCiAgX19fX18gIFxsaW5lDQpcbGluZQ0K XHRhYiBGcm9tOiB7fQ0Ke1wqXGh0bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJl dmlhdGVkIiBocmVmPSJtYWlsdG86YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVs ZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxk cnNsdFxjZjFcdWwgXGh0bWxydGYwIGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0 ZjAgXGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTIgPC9hPn0gW3t9DQp7XCpcaHRt bHRhZzg0IDxhIGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Im1haWx0bzpibGFj a2JveEBvYmVyb24uY2giPn1caHRtbHJ0ZiB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJt YWlsdG86YmxhY2tib3hAb2Jlcm9uLmNoIn19e1xmbGRyc2x0XGNmMVx1bCBcaHRtbHJ0ZjAgbWFp bHRvOmJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxydGYgfVxodG1s cnRmMCANCntcKlxodG1sdGFnOTIgPC9hPn1dIE9uIFxsaW5lDQpCZWhhbGYgT2YgRG91Z2xhcyBH LiBEYW5mb3J0aFxsaW5lDQpcdGFiIFNlbnQ6IDE1IEp1bmUgMjAwNyAwMzozNVxsaW5lDQpcdGFi IFRvOiBCbGFja0JveCBNYWlsaW5nIExpc3RcbGluZQ0KXHRhYiBTdWJqZWN0OiBbQmxhY2tCb3hd IC0gSGlkaW5nIGFic3RyYWN0IG1ldGhvZHNcbGluZQ0KXHRhYiBcbGluZQ0KXHRhYiBcbGluZQ0K XHRhYiBCb2IsXGxpbmUNClx0YWIgSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGUgYW1vdW50IG9mIHN0 dWZmIHNob3duIHRvIGEgbWluaW11bS5cbGluZQ0KXHRhYiBcbGluZQ0KXHRhYiBUaGVyZSBpcyBh bHNvIGEgcHJvY2VkdXJlIFJ1biB0aGF0IGlzIGV4cG9ydGVkIGZyb20gTSBcbGluZQ0KdGhhdCB3 aGVuIGNhbGxlZCBzdGFydHMgdXAgYW5kIGV2ZW50dWFsbHkgY2FsbHMgdGhlIGluc3RhbGxlZCBc bGluZQ0KcmVhZGVyIGFuZCB3cml0ZXIgKHJlcGVhdGVkbHkpLlxsaW5lDQpcdGFiIFRoZSByZWFk ZXIgYW5kIHdyaXRlciBkbyBub3QgaW52b2tlIHRoZSBoaWRkZW4gXGxpbmUNCnByb2NlZHVyZXMg dGhleSBhcmUgcGFzc2l2ZSBhbmQgYXJlIGNhbGxlZCBieSBNIHdoZW4gbmVlZGVkLlxsaW5lDQpc dGFiIFxsaW5lDQpcdGFiIEhvdyBkbyBJIGhpZGUgdGhlIG1ldGhvZHMgb2YgQSwgQml0cywgYW5k IEludHM/XGxpbmUNClx0YWIgXGxpbmUNClx0YWIgLURvdWcgRGFuZm9ydGhcbGluZQ0KXHRhYiBc bGluZQ0KXHRhYiBcbGluZQ0KXHRhYiBcbGluZQ0KXHRhYiBcbGluZQ0KXHRhYiBCb2IgV2Fsa2Rl biB3cm90ZTogXGxpbmUNClxsaW5lDQpcdGFiIFx0YWIgSG93IGFuZCB3aGVuIGFyZSBNJ3MgaW50 ZXJuYWwgcHJvY2VkdXJlcyBcbGluZQ0KaW52b2tlZD8gSWYgdGhlIGNsaWVudCdzIHJlYWRlciBp cyB0byBpbnZva2UgdGhlbSBkaXJlY3RseSBcbGluZQ0KdGhlbiB0aGV5IG11c3QgYmUgbWFkZSBw dWJsaWMuIElmIHlvdSB3YW50IE0ncyBoaWRkZW4gXGxpbmUNCnByb2NlZHVyZXMgdG8gYmUgaW52 b2tlZCBpbmRpcmVjdGx5IGJ5IHRoZSByZWFkZXIgb3Igd3JpdGVyIFxsaW5lDQp5b3UgbWF5IG5l ZWQgdG8gcHJvdmlkZSBhIGNvdXBsZSBvZiBOb3RpZmllciBwcm9jZWR1cmVzIGluIE0gXGxpbmUN CmFuZCBoYXZlIHRoZSByZWFkZXIgb3Igd3JpdGVyIGNhbGwgdGhlbSBleHBsaWNpdGx5LlxsaW5l DQpcdGFiIFx0YWIgIFxsaW5lDQpcdGFiIFx0YWIgLS1cbGluZQ0KXHRhYiBcdGFiIFJlZ2FyZHMs XGxpbmUNClx0YWIgXHRhYiAgQm9iIFxsaW5lDQpcdGFiIFx0YWIgIFxsaW5lDQpcbGluZQ0KXGxp bmUNCiAgX19fX18gIFxsaW5lDQpcbGluZQ0KXHRhYiBcdGFiIFx0YWIgRnJvbToge30NCntcKlxo dG1sdGFnODQgPGEgY2xhc3M9Im1vei10eHQtbGluay1hYmJyZXZpYXRlZCIgaHJlZj0ibWFpbHRv OmJsYWNrYm94QG9iZXJvbi5jaCI+fVxodG1scnRmIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJ TksgIm1haWx0bzpibGFja2JveEBvYmVyb24uY2gifX17XGZsZHJzbHRcY2YxXHVsIFxodG1scnRm MCBibGFja2JveEBvYmVyb24uY2hcaHRtbHJ0ZiB9XGh0bWxydGYwIFxodG1scnRmIH1caHRtbHJ0 ZjAgDQp7XCpcaHRtbHRhZzkyIDwvYT59IFxsaW5lDQpbe30NCntcKlxodG1sdGFnODQgPGEgY2xh c3M9Im1vei10eHQtbGluay1mcmVldGV4dCIgaHJlZj0ibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5j aCI+fVxodG1scnRmIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgIm1haWx0bzpibGFja2Jv eEBvYmVyb24uY2gifX17XGZsZHJzbHRcY2YxXHVsIFxodG1scnRmMCBtYWlsdG86YmxhY2tib3hA b2Jlcm9uLmNoXGh0bWxydGYgfVxodG1scnRmMCBcaHRtbHJ0ZiB9XGh0bWxydGYwIA0Ke1wqXGh0 bWx0YWc5MiA8L2E+fV0gT24gQmVoYWxmIE9mIERvdWdsYXMgRy4gRGFuZm9ydGhcbGluZQ0KXHRh YiBcdGFiIFx0YWIgU2VudDogMTQgSnVuZSAyMDA3IDIyOjI1XGxpbmUNClx0YWIgXHRhYiBcdGFi IFRvOiBCbGFja0JveCBNYWlsaW5nIExpc3RcbGluZQ0KXHRhYiBcdGFiIFx0YWIgU3ViamVjdDog W0JsYWNrQm94XSAtIEhpZGluZyBhYnN0cmFjdCBtZXRob2RzXGxpbmUNClx0YWIgXHRhYiBcdGFi IFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgQ2hyaXMsXGxpbmUN Clx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBIZXJlIGlzIHdoYXQgSSB3b3Vs ZCBsaWtlIHRoZSBpbnRlcmZhY2UgXGxpbmUNCnRvIG1vZHVsZSBNIHRvIGFwcGVhclxsaW5lDQpc dGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgREVGSU5JVElPTiBNO1xsaW5lDQpc dGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgICAgIFRZUEVcbGluZQ0KXHRhYiBc dGFiIFx0YWIgICAgICAgICBBID0gUE9JTlRFUiBUTyBBQlNUUkFDVCBSRUNPUkQgIEVORDtcbGlu ZQ0KXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0YWIgXHRhYiBcdGFiICAgICAgICAgQml0cyA9IFBP SU5URVIgVE8gUkVDT1JEIChBKVxsaW5lDQpcdGFiIFx0YWIgXHRhYiAgICAgICAgICAgICB4OiBQ T0lOVEVSIFRPIEFSUkFZIE9GIFNFVFxsaW5lDQpcdGFiIFx0YWIgXHRhYiAgICAgICAgIEVORDtc bGluZQ0KXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0YWIgXHRhYiBcdGFiICAgICAgICAgSW50cyA9 IFBPSU5URVIgVE8gUkVDT1JEIChBKVxsaW5lDQpcdGFiIFx0YWIgXHRhYiAgICAgICAgICAgICB4 OiBQT0lOVEVSIFRPIEFSUkFZIE9GIElOVEVHRVJcbGluZQ0KXHRhYiBcdGFiIFx0YWIgICAgICAg ICBFTkQ7XGxpbmUNClx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiAgICAgICAg IFJlYWRlciA9IFBST0NFRFVSRSAoVkFSIGE6IEEpOiBCT09MRUFOO1xsaW5lDQpcdGFiIFx0YWIg XHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgICAgICAgICBXcml0ZXIgPSBQUk9DRURVUkUgKGE6 IEEpO1xsaW5lDQpcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgICAgIFBST0NF RFVSRSBJbnN0YWxsUmVhZGVyIChyZDogUmVhZGVyKTtcbGluZQ0KXHRhYiBcdGFiIFx0YWIgICAg IFBST0NFRFVSRSBJbnN0YWxsV3JpdGVyICh3cjogV3JpdGVyKTtcbGluZQ0KXHRhYiBcdGFiIFx0 YWIgXGxpbmUNClx0YWIgXHRhYiBcdGFiIEVORCBNLlxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcbGlu ZQ0KXHRhYiBcdGFiIFx0YWIgT25lIGp1c3QgaW5zdGFsbHMgYSBzcGVjaWZpYyByZWFkZXIgXGxp bmUNCnRoYXQgZ2VuZXJhdGVzIGEgQml0cyBvciBhbiBJbnRzLlxsaW5lDQpcdGFiIFx0YWIgXHRh YiBJbnRlcm5hbGx5IHRvIE0gdGhlcmUgYXJlIG1hbnkgXGxpbmUNCnByb2NlZHVyZXMgdGhhdCB0 YWtlIHRoZSBhYnN0cmFjdFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBxdWFudGl0eSAnYScgd2hlbiBh IHJlYWQgb3BlcmF0aW9uIGlzIFxsaW5lDQpkb25lIGFuZCBvcGVyYXRlIG9uIGl0IHdpdGggcHJv Y2VkdXJlc1xsaW5lDQpcdGFiIFx0YWIgXHRhYiB0aGF0IGFyZSBtZXRob2RzIG9mIHR5cGUgZWl0 aGVyIEJpdHMgb3IgXGxpbmUNCkludHMgd2hvc2UgZGVmaW5pdGlvbnMgYXJlIGdpdmVuIGludGVy bmFsbHlcbGluZQ0KXHRhYiBcdGFiIFx0YWIgYW5kIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIG9m IHR5cGUgQS4gIFxsaW5lDQpCdXQgdGhlIHVzZXIgb2YgTSBuZWVkIG5vdCBrbm93IGFueXRoaW5n XGxpbmUNClx0YWIgXHRhYiBcdGFiIGFib3V0IHRoaXMgYW5kIEJsYWNrQm94IHNob3VsZCBub3Qg XGxpbmUNCmZvcmNlIHRoZSB1c2VyIHRvIHNlZSB0aGVzZSBtZXRob2RzLlxsaW5lDQpcdGFiIFx0 YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgSG93IGNhbiB0aGlzIGJlIGFjY29tcGxpc2hl ZD9cbGluZQ0KXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0YWIgXHRhYiBcdGFiIC1Eb3VnIERhbmZv cnRoXGxpbmUNClx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRh YiBcdGFiIFx0YWIgQ0ZCIFNvZnR3YXJlIHdyb3RlOiBcbGluZQ0KXGxpbmUNClx0YWIgXHRhYiBc dGFiIFx0YWIgSGkgRG91ZyxcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBc dGFiIFx0YWIgXHRhYiBJIGRvbid0IGtub3cgaWYgSSBjYW4gaGVscCBidXQgXGxpbmUNCmFzIG5v Ym9keSBlbHNlIGhhcyByZXNwb25kZWQgeWV0IEknbVxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFi IHdpbGxpbmcgdG8gZ2l2ZSBpdCBhIHRyeS4gSSdtIFxsaW5lDQppbnRlcmVzdGVkIGluIGxlYXJu aW5nIG1vcmUgYWJvdXQgdGhlXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgZmluZXIgZGV0YWls cyBvZiBpc3N1ZXMgbGlrZSBcbGluZQ0KdGhpcy4gSG93ZXZlciwgSSdtIG5vdCBzdXJlIGZyb20g eW91clxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIGRlc3JpcHRpb24gdGhhdCBJIHVuZGVyc3Rh bmQgXGxpbmUNCmV4YWN0bHkgd2hhdCB5b3UgYXJlIHRyeWluZyB0byBkby4gV291bGQgaXRcbGlu ZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBiZSBwb3NzaWJsZSBmb3IgeW91IHRvIHNob3cgXGxpbmUN CmNvbXBsZXRlIG1pbmltYWwgZXhhbXBsZXMgb2Y6IFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFi IFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIGEpIFdoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGNv ZGUgXGxpbmUNCnRvIGxvb2sgbGlrZSBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0K XHRhYiBcdGFiIFx0YWIgXHRhYiBiKSBIb3cgeW91IHRoaW5rIGl0IG5lZWRzIHRvIGJlIFxsaW5l DQp3cml0dGVuIHRvIG1ha2UgaXQgYWNjZXB0YWJsZSB0b1xsaW5lDQpcdGFiIFx0YWIgXHRhYiBc dGFiIEJsYWNrYm94XGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0YWIgXHRhYiBc dGFiIFx0YWIgUmVnYXJkcyxcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBDaHJpcyBCdXJyb3dz XGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgQ0ZCIFNvZnR3YXJlXGxpbmUNClx0YWIgXHRhYiBc dGFiIFx0YWIge30NCntcKlxodG1sdGFnODQgPGEgY2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4 dCIgaHJlZj0iaHR0cDovL3d3dy5jZmJzb2Z0d2FyZS5jb20vZ3BjcCI+fVxodG1scnRmIHtcZmll bGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHA6Ly93d3cuY2Zic29mdHdhcmUuY29tL2dwY3Ai fX17XGZsZHJzbHRcY2YxXHVsIFxodG1scnRmMCBodHRwOi8vd3d3LmNmYnNvZnR3YXJlLmNvbS9n cGNwXGh0bWxydGYgfVxodG1scnRmMCBcaHRtbHJ0ZiB9XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWc5 MiA8L2E+fVxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBc dGFiICAgXGxpbmUNClxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS1cbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIEZyb206IFxsaW5l DQp7fQ0Ke1wqXGh0bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBo cmVmPSJtYWlsdG86YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRp bnN0e0hZUEVSTElOSyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFc dWwgXGh0bWxydGYwIGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxy dGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTIgPC9hPn0gW3t9DQp7XCpcaHRtbHRhZzg0IDxh IGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiIGhyZWY9Im1haWx0bzpibGFja2JveEBvYmVy b24uY2giPn1caHRtbHJ0ZiB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJtYWlsdG86Ymxh Y2tib3hAb2Jlcm9uLmNoIn19e1xmbGRyc2x0XGNmMVx1bCBcaHRtbHJ0ZjAgbWFpbHRvOmJsYWNr Ym94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxydGYgfVxodG1scnRmMCANCntc KlxodG1sdGFnOTIgPC9hPn1dIE9uIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgQmVo YWxmIE9mIERvdWdsYXMgRy4gRGFuZm9ydGhcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFi IFNlbnQ6IFdlZG5lc2RheSwgMTMgXGxpbmUNCkp1bmUgMjAwNyAxMDoyMiBBTVxsaW5lDQpcdGFi IFx0YWIgXHRhYiBcdGFiIFx0YWIgVG86IEJsYWNrQm94IE1haWxpbmcgTGlzdFxsaW5lDQpcdGFi IFx0YWIgXHRhYiBcdGFiIFx0YWIgU3ViamVjdDogW0JsYWNrQm94XSAtIFxsaW5lDQpIaWRpbmcg YWJzdHJhY3QgbWV0aG9kc1xsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0 YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIEZv bGtzLFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0YWIgXHRhYiBcdGFi IFx0YWIgXHRhYiBJIGhhdmUgYSBjb25jZXB0dWFsIFxsaW5lDQpwcm9ibGVtIG9uIHdoaWNoIEkg d291bGQgbGlrZSB5b3VyIGFkdmljZS5cbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIFxs aW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgSSBoYXZlIGFuIEFCU1RSQUNUIHR5cGUgXGxp bmUNCkEgYW5kIHR3byBjb25jcmV0ZSB0eXBlcyBDMSBhbmRcbGluZQ0KXHRhYiBcdGFiIFx0YWIg XHRhYiBcdGFiIEMyIHdoaWNoIGFyZSBleHRlbnNpb25zIG9mIEEuXGxpbmUNClx0YWIgXHRhYiBc dGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiICAgICBUWVBFXGxp bmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiAgICAgICAgQSogPSBQT0lOVEVSIFRPIFxsaW5l DQpBQlNUUkFDVCBSRUNPUkQgRU5EO1xsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgICAg ICAgIEMxKiA9IFBPSU5URVIgVE8gXGxpbmUNClJFQ09SRChBKSBFTkQ7XGxpbmUNClx0YWIgXHRh YiBcdGFiIFx0YWIgXHRhYiAgICAgICAgQzIqID0gUE9JTlRFUiBUTyBcbGluZQ0KUkVDT1JEKEEp IEVORDtcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRh YiBcdGFiIFx0YWIgSSB3b3VsZCBsaWtlIHRvIGV4cG9ydCBcbGluZQ0KQSAoYXMgc2hvd24gd2l0 aCB0aGUgJyonJykgYnV0IHdpdGhpbiB0aGVcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFi IG1vZHVsZSBNIHdoZXJlIEEgaXMgXGxpbmUNCmRlZmluZWQgSSAqZG8gbm90IHdhbnQqIHRvIGV4 cG9ydCBpdHNcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIG1ldGhvZHMuICBJIHdhbnQg dGhlbSBcbGluZQ0KdG8gYmUgY29tcGxldGVseSBoaWRkZW4gc28gdGhhdCB0aGUgdXNlclxsaW5l DQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgb2YgTSBvbmx5IG5lZWRzIHRvIFxsaW5lDQpjcmVh dGUgdGhlIGluc3RhbmNlIENpIChhbmQgZmlsbCBpdHMgXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0 YWIgXHRhYiBmaWVsZHMgKG5vdCBzaG93bikpXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRh YiBhbmQgcGFzcyBDaSB0byB0aGUgXGxpbmUNCm1vZHVsZSBNIGluIHdoaWNoIHRoZSBzcGVjaWZp YyBtZXRob2RzIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgYXBwcm9wcmlhdGUgdG8g Q2lcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIGFyZSBzcGVjaWZpZWQgKGJ1dCBhbHNv IFxsaW5lDQpub3QgZXhwb3J0ZWQpLiAgV2l0aGluIE0sIHByb2NlZHVyZXMgdGFrZSAnYSdcbGlu ZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIChhbiBpbnN0YW5jZSBvZiBBIHdoaWNoIFxsaW5l DQppcyBlaXRoZXIgQzEgb3IgQzIpIGFuZCBvcGVyYXRlcyBvbiBpdCB3aXRob3V0XGxpbmUNClx0 YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiBrbm93bGVkZ2Ugb2YgaXRzIFxsaW5lDQpjb25jcmV0ZSBm b3JtLiAgVGhlIG1ldGhvZHMgb2YgQSBhcmUgc2ltcGx5IGNhbGxlZFxsaW5lDQpcdGFiIFx0YWIg XHRhYiBcdGFiIFx0YWIgYW5kIHRoZSBjb25jcmV0ZSBmb3JtcyBcbGluZQ0Kb2YgdGhvc2UgbWV0 aG9kcyBhcyBDMSBvciBDMiBhcmUgYWN0dWFsbHlcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBc dGFiIHJ1bi5cbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIg XHRhYiBcdGFiIFx0YWIgVW5mb3J0dW5hdGVseSwgaXQgc2VlbXMgXGxpbmUNCnRoYXQgdGhpcyBz Y2hlbWUgb2YgdGhpbmdzIGlzIG5vdCBwb3NzaWJsZSBpbiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIg XHRhYiBcdGFiIEJsYWNrQm94LlxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgSSBhbSBm b3JjZWQgdG8gZXhwb3J0IFxsaW5lDQp0aGUgbWV0aG9kcyBvZiBBIGFuZCBhbHNvIHRoZSBtZXRo b2RzIG9mIEMxIGFuZFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgdGhlIG1ldGhvZHMg b2YgQzIsIFxsaW5lDQpncmVhdGx5IGNsdXR0ZXJpbmcgdGhlIGludGVyZmFjZSB0byBNIHdoZW4g XGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiBub25lIG9mIHRoYXRcbGluZQ0KXHRhYiBc dGFiIFx0YWIgXHRhYiBcdGFiIGluZm9ybWF0aW9uIHdpbGwgYmUgXGxpbmUNCnVzZWQgYnkgdGhl IHBlcnNvbiBvcGVyYXRpbmcgd2l0aCBNLiAgXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRh YiBPbmx5IHRoZSBleGlzdGVuY2VcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIG9mIEEg YW5kIHRoZSBleHRlbnNpb25zIFxsaW5lDQpDMSBhbmQgQzIgYXJlIG5lZWRlZC5cbGluZQ0KXHRh YiBcdGFiIFx0YWIgXHRhYiBcdGFiIFxsaW5lDQpcdGFiIFx0YWIgXHRhYiBcdGFiIFx0YWIgSXMg dGhlcmUgYSBjbGVhbiB3YXkgdG8gXGxpbmUNCmhpZGUgYWxsIG9mIHRoZXNlIG1ldGhvZHM/XGxp bmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBc dGFiIC1Eb3VnIERhbmZvcnRoXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0K XHRhYiBcdGFiIFx0YWIgXHRhYiBcdGFiIC0tLSBCbGFja0JveFxsaW5lDQpcdGFiIFx0YWIgXHRh YiBcdGFiIFx0YWIgLS0tIHNlbmQgc3ViamVjdCBIRUxQIFxsaW5lDQpvciBVTlNVQlNDUklCRSB0 byB7fQ0Ke1wqXGh0bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBo cmVmPSJtYWlsdG86YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRp bnN0e0hZUEVSTElOSyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFc dWwgXGh0bWxydGYwIGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxy dGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTIgPC9hPn1cbGluZQ0KXHRhYiBcdGFiIFx0YWIg XHRhYiBcdGFiICAgICBcbGluZQ0KXGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIgXGxpbmUNClx0 YWIgXHRhYiBcdGFiIFx0YWIgLS0tIEJsYWNrQm94XGxpbmUNClx0YWIgXHRhYiBcdGFiIFx0YWIg LS0tIHNlbmQgc3ViamVjdCBIRUxQIG9yIFxsaW5lDQpVTlNVQlNDUklCRSB0byB7fQ0Ke1wqXGh0 bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86 YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElO SyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtcZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYw IGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRtbHJ0ZjAgXGh0bWxydGYgfVxodG1scnRm MCANCntcKlxodG1sdGFnOTIgPC9hPn1cbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0K XHRhYiBcdGFiIFx0YWIgXHRhYiBcbGluZQ0KXHRhYiBcdGFiIFx0YWIgXHRhYiAgIFxsaW5lDQpc bGluZQ0KXGxpbmUNCiAgICBcaHRtbHJ0ZlxwYXJ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFnMTM2 IDwvcHJlPn1caHRtbHJ0ZiB9XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcwIFxwYXIgfQ0Ke1wqXGh0 bWx0YWcyNDAgICB9DQp7XCpcaHRtbHRhZzEwNCA8L2Jsb2NrcXVvdGU+fVxodG1scnRmIH1ccGFy DQpcaHRtbHJ0ZjAgDQp7XCpcaHRtbHRhZzAgXHBhciB9DQp7XCpcaHRtbHRhZzI0MCAgIH0NCntc KlxodG1sdGFnMTI4IDxwcmUgd3JhcD0iIj59XGh0bWxydGYge1xwYXJkXHBsYWluXGYxXGZzMjAg XGh0bWxydGYwIFxodG1scnRmIHtcaHRtbHJ0ZjAgXGxpMzYwIA0Ke1wqXGh0bWx0YWcyNDQgPCEt LS0tPn1cbGluZQ0KLS0tIEJsYWNrQm94XGxpbmUNCi0tLSBzZW5kIHN1YmplY3QgSEVMUCBvciBV TlNVQlNDUklCRSB0byB7fQ0Ke1wqXGh0bWx0YWc4NCA8YSBjbGFzcz0ibW96LXR4dC1saW5rLWFi YnJldmlhdGVkIiBocmVmPSJtYWlsdG86YmxhY2tib3hAb2Jlcm9uLmNoIj59XGh0bWxydGYge1xm aWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAibWFpbHRvOmJsYWNrYm94QG9iZXJvbi5jaCJ9fXtc ZmxkcnNsdFxjZjFcdWwgXGh0bWxydGYwIGJsYWNrYm94QG9iZXJvbi5jaFxodG1scnRmIH1caHRt bHJ0ZjAgXGh0bWxydGYgfVxodG1scnRmMCANCntcKlxodG1sdGFnOTIgPC9hPn1cbGluZQ0KXGxp bmUNClxsaW5lDQpcbGluZQ0KICBcaHRtbHJ0ZlxwYXJ9XGh0bWxydGYwDQoNCntcKlxodG1sdGFn MTM2IDwvcHJlPn1caHRtbHJ0ZiB9XGh0bWxydGYwIA0Ke1wqXGh0bWx0YWcwIFxwYXIgfQ0Ke1wq XGh0bWx0YWcxMDQgPC9ibG9ja3F1b3RlPn1caHRtbHJ0ZiB9XHBhcg0KXGh0bWxydGYwIA0Ke1wq XGh0bWx0YWcwIFxwYXIgfQ0Ke1wqXGh0bWx0YWc1OCA8L2JvZHk+fQ0Ke1wqXGh0bWx0YWcyIFxw YXIgfQ0Ke1wqXGh0bWx0YWcyNyA8L2h0bWw+fQ0Ke1wqXGh0bWx0YWczIFxwYXIgfX0= ----boundary-LibPST-iamunique-1480712487_-_--- Received on Fri Jun 15 2007 - 20:13:46 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:31:32 UTC