Re: PEP 489: Multi-phase extension module initialization; version 5
Eric Snow <[email protected]> Tue, 19 May 2015 18:22:47 -0600
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CALFfu7DQs_njKixMVcXPXxXG=jmu1OAP1tD1k8FMwD=Zu0vC6w@mail.gmail.com> |
T24gVHVlLCBNYXkgMTksIDIwMTUgYXQgNTowNiBBTSwgUGV0ciBWaWt0b3JpbiA8ZW5jdWtvdUBn bWFpbC5jb20+IHdyb3RlOgo+IE9uIDA1LzE5LzIwMTUgMDU6NTEgQU0sIE5pY2sgQ29naGxhbiB3 cm90ZToKPj4gT24gMTkgTWF5IDIwMTUgYXQgMTA6MDcsIEVyaWMgU25vdyA8ZXJpY3Nub3djdXJy ZW50bHlAZ21haWwuY29tPiB3cm90ZToKPj4+IE9uIE1vbiwgTWF5IDE4LCAyMDE1IGF0IDg6MDIg QU0sIFBldHIgVmlrdG9yaW4gPGVuY3Vrb3VAZ21haWwuY29tPiB3cm90ZToKPj4+PiBbc25pcF0K Pj4+Pgo+Pj4+IEZ1cnRoZXJtb3JlLCB0aGUgbWFqb3JpdHkgb2YgY3VycmVudGx5IGV4aXN0aW5n IGV4dGVuc2lvbiBtb2R1bGVzIGhhcwo+Pj4+IHByb2JsZW1zIHdpdGggc3ViLWludGVycHJldGVy IHN1cHBvcnQgYW5kL29yIGludGVycHJldGVyIHJlbG9hZGluZywgYW5kLAo+Pj4+IHdoaWxlCj4+ Pj4gaXQgaXMgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZSB0byBzdXBw b3J0IHRoZXNlCj4+Pj4gZmVhdHVyZXMsIGl0IGlzIG5laXRoZXIgZWFzeSBub3IgZWZmaWNpZW50 Lgo+Pj4+IEFkZHJlc3NpbmcgdGhlc2UgaXNzdWVzIHdhcyB0aGUgZ29hbCBvZiBQRVAgMzEyMSwg YnV0IG1hbnkgZXh0ZW5zaW9ucywKPj4+PiBpbmNsdWRpbmcgc29tZSBpbiB0aGUgc3RhbmRhcmQg bGlicmFyeSwgdG9vayB0aGUgbGVhc3QtZWZmb3J0IGFwcHJvYWNoCj4+Pj4gdG8gcG9ydGluZyB0 byBQeXRob24gMywgbGVhdmluZyB0aGVzZSBpc3N1ZXMgdW5yZXNvbHZlZC4KPj4+PiBUaGlzIFBF UCBrZWVwcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hpY2ggc2hvdWxkIHJlZHVjZSBwcmVz c3VyZSBhbmQKPj4+PiBnaXZlCj4+Pj4gZXh0ZW5zaW9uIGF1dGhvcnMgYWRlcXVhdGUgdGltZSB0 byBjb25zaWRlciB0aGVzZSBpc3N1ZXMgd2hlbiBwb3J0aW5nLgo+Pj4KPj4+IFNvIGp1c3QgYmUg dG8gc3VyZSBJIHVuZGVyc3RhbmQsIG5vdyBQeU1vZHVsZURlZi5tX3Nsb3RzIHdpbGwKPj4+IHVu YW1iaWd1b3VzbHkgaW5kaWNhdGUgd2hldGhlciBvciBub3QgYW4gZXh0ZW5zaW9uIG1vZHVsZSBp cwo+Pj4gY29tcGxpYW50LCByaWdodD8KPj4KPj4gSSdtIG5vdCBzdXJlIHdoYXQgeW91IG1lYW4g YnkgImNvbXBsaWFudCIuIEEgbm9uLU5VTEwgbV9zbG90cyB3aWxsCj4+IGluZGljYXRlIHVzYWdl IG9mIG11bHRpLXBoYXNlIGluaXRpYWxpc2F0aW9uLCBzbyBpdCBhdCBsZWFzdCBpbmRpY2F0ZXMK Pj4gKmludGVudCogdG8gY29ycmVjdGx5IHN1cHBvcnQgc3ViaW50ZXJwcmV0ZXJzIGV0IGFsLiBB Y3R1YWwgZGVsaXZlcnkKPj4gb24gdGhhdCBwcm9taXNlIGlzIHN0aWxsIGEgZGlmZmVyZW50IHF1 ZXN0aW9uIDopCj4KPiBZZXMsIG5vbi1OVUxMIG1fc2xvdHMgbWVhbnMgdGhlIG1vZHVsZSBpcyBj b21wbGlhbnQuIElmIGl0J3Mgbm90LCBpdCdzIGEKPiBidWcgaW4gdGhlICptb2R1bGUqIChpLmUu IGNvbXBsaWFuY2UgaXMgbm90ICpqdXN0KiBhIG1hdHRlciBvZiBzZXR0aW5nCj4gc2V0dGluZyBt X3Nsb3RzKS4KPiBUaGlzIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBkb2NzLgoKUGVyZmVjdC4K Cj4KPj4+PiBbc25pcF0KPj4+Pgo+Pj4+IFRoZSBwcm9wb3NhbAo+Pj4+ID09PT09PT09PT09PQo+ Pj4KPj4+IFRoaXMgc2VjdGlvbiBzaG91bGQgaW5jbHVkZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyB0 aGUgbG9hZGVyIChhbmQKPj4+IHBlcmhhcHMgZmluZGVyKSB3aWxsIGNoYW5nZSBmb3IgYnVpbHRp biwgZnJvemVuLCBhbmQgZXh0ZW5zaW9uCj4+PiBtb2R1bGVzLiAgSXQgbWF5IGhlbHAgdG8gZGVz Y3JpYmUgdGhlIHByb3Bvc2FsIHVwIGZyb250IGJ5IGhvdyB0aGUKPj4+IGxvYWRlciBpbXBsZW1l bnRhdGlvbiB3b3VsZCBsb29rIGlmIGl0IHdlcmUgc29tZWhvdyBpbXBsZW1lbnRlZCBpbgo+Pj4g UHl0aG9uIGNvZGUuICBUaGUgc3Vic2VxdWVudCBzZWN0aW9ucyBzb21ldGltZXMgaW5kaWNhdGUg d2hlcmUKPj4+IGRpZmZlcmVudCB0aGluZ3MgdGFrZSBwbGFjZSwgYnV0IGFuIGV4cGxpY2l0IG91 dGxpbmUgKGFzIFB5dGhvbiBjb2RlKQo+Pj4gd291bGQgbWFrZSB0aGUgZW50aXJlIGZsb3cgcmVh bGx5IG9idmlvdXMuICBQdXR0aW5nIHRoYXQgdG93YXJkIHRoZQo+Pj4gYmVnaW5uaW5nIG9mIHRo aXMgc2VjdGlvbiB3b3VsZCBoZWxwIGNsZWFybHkgc2V0IHRoZSBzdGFnZSBmb3IgdGhlCj4+PiBy ZXN0IG9mIHRoZSBwcm9wb3NhbC4KPj4KPj4gKzEgZm9yIGEgcHNldWRvLWNvZGUgb3ZlcnZpZXcg b2YgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlvbi4KPgo+IE9LLiBBbG9uZyB3aXRoIGEgbGluayB0 byBQRVAgNDUxIGNvZGUgWypdLCBpdCBzaG91bGQgbWFrZSB0aGluZ3MgY2xlYXJlci4KPiBbKl0g aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQ1MS8jaG93LWxvYWRpbmctd2ls bC13b3JrCgpTb3VuZHMgZ29vZC4KCj4KPj4+PiBbc25pcF0KPj4+PiBVbmtub3duIHNsb3QgSURz IHdpbGwgY2F1c2UgdGhlIGltcG9ydCB0byBmYWlsIHdpdGggU3lzdGVtRXJyb3IuCj4+Pgo+Pj4g V2FzIHRoZXJlIGFueSBjb25zaWRlcmF0aW9uIG1hZGUgZm9yIGp1c3QgaWdub3JpbmcgdW5rbm93 biBzbG90IElEcz8KPj4+IE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHlvdSBoYXZlIGl0IHRoZSBy aWdodCB3YXksIGJ1dCBJIGNhbiBzdGlsbAo+Pj4gaW1hZ2luZSB1c2UgY2FzZXMgZm9yIGN1c3Rv bSBzbG90cyB0aGF0IFB5TW9kdWxlRGVmX0luaXQgd291bGRuJ3Qga25vdwo+Pj4gYWJvdXQuCj4+ Cj4+IFRoZSAia25vd24gc2xvdHMgb25seSwgYWxsIG90aGVyIHNsb3QgSURzIGFyZSByZXNlcnZl ZCBmb3IgZnV0dXJlIHVzZSIKPj4gc2xvdCBzZW1hbnRpY3Mgd2VyZSBjb3BpZWQgZGlyZWN0bHkg ZnJvbSBQeVR5cGVfRnJvbVNwZWMgaW4gUEVQIDM4NC4KPj4gU2luY2UgaXQncyBqdXN0IGEgbnVt ZXJpYyBzbG90IElELCB5b3UnZCBydW4gYSBoaWdoIHJpc2sgb2YgY29uZmxpY3RzCj4+IGlmIHlv dSBhbGxvd2VkIGZvciBjdXN0b20gZXh0ZW5zaW9ucy4KPj4KPj4gSWYgZm9sa3Mgd2FudCB0byBk byBtb3JlIGNsZXZlciB0aGluZ3MsIHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0ZQo+PiBv ciBleGVjIHNsb3QgdG8gc3Rhc2ggdGhlbSBvbiB0aGUgbW9kdWxlIG9iamVjdCwgcmF0aGVyIHRo YW4gc3RvcmluZwo+PiB0aGVtIGluIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KPgo+IFJpZ2h0LCBp ZiB5b3UgbmVlZCBjdXN0b20gYmVoYXZpb3IsIHB1dCBpdCBpbiBhIGZ1bmN0aW9uIGFuZCB1c2Ug dGhlCj4gcHJvdmlkZWQgaG9vay4gKElmIHlvdSBuZWVkIGN1c3RvbSAic2xvdHMiIG9uIFB5TW9k dWxlRGVmIGZvciBzb21lCj4gcmVhc29uLCB1c2UgYSBQeU1vZHVsZURlZiBzdWJjbGFzcyAtLSBi dXQgSSBjYW4ndCBzZWUgd2hlcmUgaXQgd291bGQgYmUKPiBoZWxwZnVsLikKPiBJZ25vcmluZyB1 bmtub3duIHNsb3QgSURzIHdvdWxkIG1lYW4gbGV0dGluZyBlcnJvcnMgZ28gdW5ub3RpY2VkLgoK VGhpcyBpcyByZWFzb25hYmxlLiAgVGhhbmtzLgoKPgo+IChUZWNobmljYWxpdHk6IFB5TW9kdWxl RGVmX0luaXQgZG9lc24ndCBjYXJlIGFib3V0IHNsb3RzOwo+IFB5TW9kdWxlX0Zyb21EZWZBbmRT cGVjIGFuZCBQeU1vZHVsZV9FeGVjRGVmIGRvLiBhbmQgdGhleSB3aWxsIHJhaXNlIHRoZQo+IGVy cm9ycy4pCj4KPj4+IFdoZW4gdXNpbmcgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sIHRoZSAq bV9uYW1lKiBmaWVsZCBvZiBQeU1vZHVsZURlZgo+Pj4gd2lsbAo+Pj4gbm90IGJlIHVzZWQgZHVy aW5nIGltcG9ydGluZzsgdGhlIG1vZHVsZSBuYW1lIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUKPj4+ IE1vZHVsZVNwZWMuCj4+Cj4+IFNvIG1fbmFtZSB3aWxsIGJlIHN0cmljdGx5IGlnbm9yZWQgYnkg UHlNb2R1bGVEZWZfSW5pdD8KPgo+IFllcy4gVGhlIG5hbWUgaXMgdXNlZnVsIGZvciBpbnRyb3Nw ZWN0aW9uLCBidXQgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbAo+IHVzZSB0aGUgbmFtZSBwcm92 aWRlZCBieSB0aGUgTW9kdWxlU3BlYy4KCk9rYXkuCgo+Cj4gKFRlY2huaWNhbGl0eTogYWdhaW4s IFB5TW9kdWxlRGVmX0luaXQgZG9lc24ndCB0b3VjaCBuYW1lcyBhdCBhbGwuCj4gUHlNb2R1bGVf RnJvbURlZkFuZFNwZWMgYW5kIFB5TW9kdWxlX0V4ZWNEZWYgZG8sIGFuZCB0aGV5IHdpbGwgaWdu b3JlCj4gdGhlIG5hbWUgZnJvbSB0aGUgZGVmLikKPgo+Pj4+IFRoZSBQeU1vZHVsZURlZiBvYmpl Y3QgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgbW9kdWxlCj4+Pj4g Y3JlYXRlZAo+Pj4+IGZyb20gaXQg4oCTIHVzdWFsbHksIGl0IHdpbGwgYmUgZGVjbGFyZWQgc3Rh dGljYWxseS4KPj4+Cj4+PiBIb3cgZWFzaWx5IHdpbGwgdGhpcyBiZSBhIHNvdXJjZSBvZiBteXN0 ZXJpb3VzIGVycm9ycy1hdC1hLWRpc3RhbmNlPwo+Pgo+PiBJdCBzaG91bGRuJ3QgYmUgYW55IHdv cnNlIHRoYW4gc3RhdGljIHR5cGUgZGVmaW5pdGlvbnMsIGFuZCBub3JtYWwKPj4gcmVmZXJlbmNl IGNvdW50aW5nIHNlbWFudGljcyBzaG91bGQga2VlcCBpdCBhbGl2ZSByZWdhcmRsZXNzLgo+Cj4g SXQncyB0aGUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgKFBFUCAzMTIxKSwgd2hl cmUgYQo+IFB5TW9kdWxlRGVmIGlzIHN0b3JlZCBpbiB0aGUgbW9kdWxlLCBhbmQgaWYgeW91IGxl dCBpdCBkaWUsCj4gUHlNb2R1bGVfR2V0U3RhdGUgd2lsbCBnaXZlIHlvdSBhbiBpbnZhbGlkIHBv aW50ZXIuIEl0J3MganVzdCB0aGF0IGluCj4gUEVQIDQ4OSwgdGhlIGltcG9ydCBtYWNoaW5lcnkg aXRzZWxmIHVzZXMgZGVmLCBzbyB5b3UgYWN0dWFsbHkgZ2V0IHRvCj4gZmVlbCB0aGUgcGFpbiBp ZiB5b3UgZGVhbGxvY2F0ZSBpdC4KPiBBbGwgaW4gYWxsLCB0aGlzIHNob3VsZCBub3QgYmUgYSBw cm9ibGVtIGluIHByYWN0aWNlOyB0aGUgUEVQIHNwZWNpZmllcwo+IHdoYXQnbGwgaGFwcGVuIGlm IHlvdSBnbyBvZmYgZG9pbmcgZXhvdGljIHRoaW5ncy4gKEZvciBleGFtcGxlLCBDeXRob24KPiBt aWdodCBydW4gaW50byB0aGlzIGlmIGl0IHRyaWVzIGltcGxlbWVudGluZyBhIHJlbG9hZGluZyBz Y2hlbWUgd2UKPiB0YWxrZWQgYWJvdXQgZWFybGllciBpbiB0aGUgdGhyZWFkLCBhbmQgZXZlbiB0 aGVuIGl0IHNob3VsZG4ndCBiZSBhCj4gbWFqb3Igc291cmNlIG9mIG15c3RlcmlvdXMgZXJyb3Jz LikgTm9ybWFsIG1vcnRhbHMgd2lsbCBiZSBPSy4KClRoYW5rcyBmb3IgZXhwbGFpbmluZy4gIEkn bSBsZXNzIGNvbmNlcm5lZCBub3cuCgo+Cj4+PiBbc25pcF0KPj4+IEhvd2V2ZXIsIG9ubHkgTW9k dWxlVHlwZSBpbnN0YW5jZXMgc3VwcG9ydCBtb2R1bGUtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQo+ Pj4gc3VjaCBhcyBwZXItbW9kdWxlIHN0YXRlLgo+Pgo+PiBUaGlzIGlzIGEgcHJldHR5IGltcG9y dGFudCBwb2ludC4gIFByZXN1bWFibHkgdGhpcyBjb25zdHJhaW50cyBsYXRlcgo+PiBiZWhhdmlv ciBhbmQgcHJlY2VkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBwZXItbW9kdWxlIHN0 YXRlLgo+Cj4gWWVzLiBNb2R1bGUgb2JqZWN0cyBzdXBwb3J0IG1vcmUgbW9kdWxlLWxpa2UgYmVo YXZpb3IgdGhhbiBvdGhlcgo+IG9iamVjdHMuIFdoYXQgeW91IGNhbiBhbmQgY2Fubm90IHVzZSBz aG91bGQgYmUgY2xlYXIgZnJvbSB0aGUgQVBJLiBJJ2xsCj4gY2xhcmlmeSBhIGJpdCBtb3JlIHdo YXQgZnVuY3Rpb25hbGl0eSBkZXBlbmRzIG9uIHVzaW5nIGEgUHlNb2R1bGVfVHlwZQo+IChvciBz dWJjbGFzcykgaW5zdGFuY2UuCj4gT25lIHRoaW5nIEkgc2VlIEkgZm9yZ290IHRvIGFkZCBpcyB0 aGF0IGV4ZWN1dGlvbiBzbG90cyBhcmUgbG9va2VkIHVwCj4gdmlhIFB5TW9kdWxlX0dldERlZiwg c28gdGhleSB3b24ndCBiZSBwcm9jZXNzZWQgb24gbm9uLW1vZHVsZSBvYmplY3RzLgoKT2theS4g IFRoYXQgbWFrZXMgc2Vuc2Ugbm93LgoKPgo+IEl0J3MgYSB2ZXJ5IGdvb2QgaWRlYSB0byB1c2Ug YSBtb2R1bGUgc3ViY2xhc3MgcmF0aGVyIHRoYW4gYSBjb21wbGV0ZWx5Cj4gY3VzdG9tIG9iamVj dC4gVGhlIGRvY3Mgd2lsbCBuZWVkIHRvIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGlzLgoKQWdyZWVk LiAgQW5kIHRoZSBkb2NzIHNob3VsZCBhbHNvIGJlIGNsZWFyIG9uIGhvdyBub24tbW9kdWxlIG9i amVjdHMKYXJlIGJhc2ljYWxseSBpZ25vcmVkLCBzbG90LXdpc2UuCgo+Cj4+Pj4gW3NuaXBdCj4+ Pj4gRXh0ZW5zaW9uIGF1dGhvcnMgYXJlIGFkdmlzZWQgdG8ga2VlcCBQeV9tb2RfY3JlYXRlIG1p bmltYWwsIGFuIGluCj4+Pj4gcGFydGljdWxhcgo+Pj4+IHRvIG5vdCBjYWxsIHVzZXIgY29kZSBm cm9tIGl0Lgo+Pj4KPj4+IFRoaXMgaXMgYSBwcmV0dHkgaW1wb3J0YW50IHBvaW50IGFzIHdlbGwu ICBXZSdsbCBuZWVkIHRvIG1ha2Ugc3VyZQo+Pj4gdGhpcyBpcyBzdWZmaWNpZW50bHkgY2xlYXIg aW4gdGhlIGRvY3VtZW50YXRpb24uICBXb3VsZCBpdCBtYWtlIHNlbnNlCj4+PiB0byBwcm92aWRl IGhlbHBlcnMgZm9yIGNvbW1vbiBjYXNlcywgdG8gZW5jb3VyYWdlIGV4dGVuc2lvbiBhdXRob3Jz IHRvCj4+PiBrZWVwIHRoZSBjcmVhdGUgZnVuY3Rpb24gbWluaW1hbD8KPj4KPj4gVGhlIG1haW4g ZW5jb3VyYWdlbWVudCBpcyB0byBub3QgaGFuZGNvZGUgeW91ciBleHRlbnNpb24gbW9kdWxlcyBh dAo+PiBhbGwsIGFuZCBsZXQgc29tZXRoaW5nIGxpa2UgQ3l0aG9uIG9yIFNXSUcgdGFrZSBjYXJl IG9mIHRoZQo+PiBib2lsZXJwbGF0ZSA6KQo+Cj4gWWVzLCBDeXRob24gc2hvdWxkIGJlIGRlZmF1 bHQuIEZvciBoYW5kLXdyaXR0ZW4gbW9kdWxlcywgdGhlIGNvbW1vbiBjYXNlCj4gc2hvdWxkIGJl IG5vdCBkZWZpbmluZyBjcmVhdGUgYXQgYWxsLgoKVGhlIGRvY3Mgc2hvdWxkIGJlIGV4cGxpY2l0 IGFib3V0IHRoaXMuCgo+Cj4+Pj4gW3NuaXBdCj4+Pj4KPj4+PiBJZiBQeU1vZHVsZUV4ZWMgcmVw bGFjZXMgdGhlIG1vZHVsZSdzIGVudHJ5IGluIHN5cy5tb2R1bGVzLAo+Pj4+IHRoZSBuZXcgb2Jq ZWN0IHdpbGwgYmUgdXNlZCBhbmQgcmV0dXJuZWQgYnkgaW1wb3J0bGliIG1hY2hpbmVyeS4KPj4+ Cj4+PiBKdXN0IHRvIGJlIHN1cmUsIHNvbWV0aGluZyBsaWtlICJtb2QgPSBzeXMubW9kdWxlc1tt b2RuYW1lXSIgaXMgZG9uZQo+Pj4gYmVmb3JlIGVhY2ggZXhlY3V0aW9uIHNsb3QuICBJbiBvdGhl ciB3b3JkcywgdGhlIHJlc3VsdCBvZiB0aGUKPj4+IHByZXZpb3VzIGV4ZWN1dGlvbiBzbG90IHNo b3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBvbmUuCj4+Cj4+IFRoYXQncyBub3QgdGhlIG9yaWdp bmFsIGludGVudCBvZiB0aGlzIHBhcmFncmFwaCAtIHJhdGhlciwgaXQgaXMKPj4gcmVmZXJyaW5n IHRvIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgb2YgdGhlIGltcG9ydCBtYWNoaW5lcnkuCj4+Cj4+ IEhvd2V2ZXIsIEkgYWdyZWUgdGhhdCBub3cgd2UncmUgYWxsb3dpbmcgdGhlIFB5X21vZF9leGVj IHNsb3QgdG8gYmUKPj4gc3VwcGxpZWQgbXVsdGlwbGUgdGltZXMsIHdlIHNob3VsZCBhbHNvIGJl IHVwZGF0aW5nIHRoZSBtb2R1bGUKPj4gcmVmZXJlbmNlIGJldHdlZW4gc2xvdCBpbnZvY2F0aW9u cy4KPgo+IE5vLCB0aGF0IHdvbid0IHdvcmsuIEl0J3MgcG9zc2libGUgKHZpYSBkaXJlY3QgY2Fs bHMgdG8gdGhlIGltcG9ydAo+IG1hY2hpbmVyeSkgdG8gbG9hZCBhIG1vZHVsZSB3aXRob3V0IGFk ZGluZyBpdCB0byBzeXMubW9kdWxlcy4KCldoYXQgZGlyZWN0IGNhbGxzIGRvIHlvdSBtZWFuPyAg SSB3b3VsZCBub3QgZXhwZWN0IGFueSBzdWNoIG1lY2hhbmlzbQp0byB3b3JrIHByb3Blcmx5IHdp dGggZXh0ZW5zaW9uIG1vZHVsZXMuCgo+IFRoZSBiZWhhdmlvciBzaG91bGQgYmUgY2xlYXIgKHdo ZW4geW91IHRoaW5rIGFib3V0IGl0KSBhZnRlciBJIGluY2x1ZGUKPiB0aGUgbG9hZGVyIGltcGxl bWVudGF0aW9uIHBzZXVkb2NvZGUuCgpPa2F5LgoKPgo+PiBJIGFsc28gdGhpbmsgdGhlIFBFUCBj b3VsZCBkbyB3aXRoIGEgYnJpZWYgbWVudGlvbiBvZiB0aGUgYWRkaXRpb25hbAo+PiBtb2R1bGFy aXR5IHRoaXMgYXBwcm9hY2ggYnJpbmdzIGF0IHRoZSBDIGxldmVsIC0gcmF0aGVyIHRoYW4gaGF2 aW5nIHRvCj4+IGphbSBldmVyeXRoaW5nIGludG8gb25lIGZ1bmN0aW9uLCBhbiBleHRlbnNpb24g bW9kdWxlIGNhbiBlYXNpbHkgYnJlYWsKPj4gdXAgaXRzIGluaXRpYWxpc2F0aW9uIGludG8gbXVs dGlwbGUgc3RlcHMsIGFuZCBpdHMgdGVjaG5pY2FsbHkgZXZlbgo+PiBwb3NzaWJsZSB0byBzaGFy ZSBjb21tb24gc3RlcHMgYmV0d2VlbiBkaWZmZXJlbnQgbW9kdWxlcy4KPgo+IEVoLCBJIHRoaW5r IGl0J3MgYmV0dGVyIHRvIGNyZWF0ZSBvbmUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcGFydHMs Cj4gd2hpY2ggd2FzIGFsd2F5cyBwb3NzaWJsZSwgYW5kIHdvcmtzIGp1c3QgYXMgd2VsbC4KPiBS ZXBlYXRpbmcgc2xvdHMgaXMgYWxsb3dlZCBiZWNhdXNlIGl0IHdvdWxkIGJlIGFuIHVubmVjZXNz YXJ5IGJvdGhlciB0bwo+IGNoZWNrIGZvciBkdXBsaWNhdGVzLiBJdCdzIG5vdCBhIGZlYXR1cmUg dG8gYWR2ZXJ0aXNlLCB0aGUgUEVQIGp1c3QKPiBzcGVjaWZpZXMgdGhhdCBpbiB0aGUgd2VpcmQg ZWRnZSBjYXNlLCB0aGUgaW50dWl0aXZlIHRoaW5nIHdpbGwgaGFwcGVuLgoKQmUgdGhhdCBhcyBp dCBtYXksIEkgdGhpbmsgaXQgd291bGQgYmUgYSBtaXN0YWtlIHRvIHRyZWF0IHN1cHBvcnQgZm9y Cm11bHRpcGxlIGV4ZWMgc2xvdHMgYXMgYSBzZWNvbmQtY2xhc3MgY2l0aXplbiBpbiB0aGUgZGVz aWduLgpQZXJzb25hbGx5IEkgZmluZCBpdCBhbiBhcHBlYWxpbmcgZmVhdHVyZS4KCj4KPiAoSSBk aWQgaGF2ZSBhIHVzZWZ1bCBmdXR1cmUgdXNlIGNhc2UgZm9yIHJlcGVhdGVkIHNsb3RzLCBidXQg dGhlIGN1cnJlbnQKPiBQRVAgYWxsb3dzIGEgYmV0dGVyIGFuZCBtb3JlIG9idmlvdXMgc29sdXRp b24gc28gSSdsbCBub3QgZXZlbiBtZW50aW9uCj4gaXQgYWdhaW4uKQo+Cj4gU3RpbGwsIHRoZSBz dGVwcyBhcmUgcHJvY2Vzc2VkIGluIGEgbG9vcCBmcm9tIGEgc2luZ2xlIGZ1bmN0aW9uCj4gKFB5 TW9kdWxlX0V4ZWNEZWYpLCBhbmQgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIG1vZHVsZSBv YmplY3QgLS0gaXQKPiBkb2Vzbid0IGtub3cgYWJvdXQgc3lzLm1vZHVsZXMgYW5kIGNhbid0IGVh c2lseSBjaGVjayBpZiB5b3UgcmVwbGFjZWQKPiB0aGUgbW9kdWxlIHNvbWV3aGVyZS4KCkkgd291 bGQgY29uc2lkZXIgdGhpcyBhcHByb2FjaCB0byBiZSBhIG1pc3Rha2UgYXMgd2VsbC4gIFRoZSBh cHByb2FjaApzaG91bGQgc3RheSBjb25zaXN0ZW50IHdpdGggdGhlIHNlbWFudGljcyBvZiB0aGUg d2hvbGUgaW1wb3J0IHN5c3RlbSwKd2hlcmUgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCBkaXJlY3Rs eS4gIFVuZm9ydHVuYXRlbHksIHRoYXQgc2hpcCBoYXMKYWxyZWFkeSBzYWlsZWQuCgo+Cj4+Pj4g KFRoaXMgbWlycm9ycyB0aGUgYmVoYXZpb3Igb2YgUHl0aG9uIG1vZHVsZXMuIE5vdGUgdGhhdCBp bXBsZW1lbnRpbmcKPj4+PiBQeV9tb2RfY3JlYXRlIGlzIHVzdWFsbHkgYSBiZXR0ZXIgc29sdXRp b24gZm9yIHRoZSB1c2UgY2FzZXMgdGhpcyBzZXJ2ZXMuKQo+Pj4KPj4+IENvdWxkIHlvdSBlbGFi b3JhdGU/ICBXaGF0IGFyZSB0aG9zZSB1c2UgY2FzZXMgYW5kIHdoeSB3b3VsZAo+Pj4gUHlfbW9k X2NyZWF0ZSBiZSBiZXR0ZXI/Cj4+Cj4+IFJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGUgaW1wbGlj aXRseSBjcmVhdGVkIG5vcm1hbCBtb2R1bGUgZHVyaW5nCj4+IFB5X21vZF9leGVjICh3aGljaCBp cyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIHRvIFB5dGhvbiBtb2R1bGVzKSwKPj4gUEVQIDQ4 OSBsZXRzIHlvdSBkZWZpbmUgdGhlIFB5X21vZF9jcmVhdGUgc2xvdCB0byBvdmVycmlkZSB0aGUg bW9kdWxlCj4+IG9iamVjdCBjcmVhdGlvbiBkaXJlY3RseS4KPj4KPj4gT3V0c2lkZSBjb252ZXJz aW9uIG9mIGEgUHl0aG9uIG1vZHVsZSB0aGF0IG1hbmlwdWxhdGVzIHN5cy5tb2R1bGVzIHRvCj4+ IGFuIGV4dGVuc2lvbiBtb2R1bGUgd2l0aCBDeXRob24sIHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24g dG8gdXNlIHRoZQo+PiAicmVwbGFjaW5nIHlvdXJzZWxmIGluIHN5cy5tb2R1bGVzIiBvcHRpb24g b3ZlciB1c2luZyBQeV9tb2RfY3JlYXRlCj4+IGRpcmVjdGx5Lgo+Cj4gWWVzLiBUaGUgd29ya2Fy b3VuZCB5b3UgbmVlZCB0byB1c2UgaW4gUHl0aG9uIG1vZHVsZXMgaXMgcG9zc2libGUgZm9yCj4g ZXh0ZW5zaW9ucywgYnV0IHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHVzZSBpdC4gSSdsbCB0cnkgdG8g bWFrZSBpdCBjbGVhcmVyCj4gdGhhdCBpdCdzIGFuIHVubmVjZXNzYXJ5IHdvcmthcm91bmQuCgpU aGFuayB5b3UuCgo+Cj4+Pj4gW3NuaXBdCj4+Pj4KPj4+PiBNb2R1bGVzIHRoYXQgbmVlZCB0byB3 b3JrIHVuY2hhbmdlZCBvbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gc2hvdWxkIG5vdAo+Pj4+ IHVzZSBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiwgYmVjYXVzZSB0aGUgYmVuZWZpdHMgaXQg YnJpbmdzIGNhbid0IGJlCj4+Pj4gYmFjay1wb3J0ZWQuCj4+Pgo+Pj4gR2l2ZW4geW91ciBleGFt cGxlIGJlbG93LCAic2hvdWxkIG5vdCIgc2VlbXMgYSBiaXQgc3Ryb25nIHRvIG1lLiAgSW4KPj4+ IGZhY3QsIHdoYXQgYXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBhcHByb2Fj aCBmcm9tIHRoZQo+Pj4gZXhhbXBsZT8KPj4KPj4gQWdyZWVkLCAic2hvdWxkIG5vdCIgaXMgcHJv YmFibHkgdG9vIHN0cm9uZyBoZXJlLiBPbiB0aGUgb3RoZXIgaGFuZCwKPj4gcHJlc2VydmluZyBj b21wYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zIGluIGEgbW9kdWxlIHRoYXQK Pj4gaGFzIGJlZW4gdXBkYXRlZCB0byByZWx5IG9uIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9u IGlzIGxpa2VseSB0byBiZQo+PiBhIG1hdHRlciBvZiAiZ3JhY2VmdWwgZGVncmFkYXRpb24iLCBy YXRoZXIgdGhhbiBiZWluZyBhYmxlIHRvCj4+IHJlcHJvZHVjZSBjb21wYXJhYmxlIGZ1bmN0aW9u YWxpdHkgKHdoaWNoIEkgYmVsaWV2ZSBtYXkgaGF2ZSBiZWVuIHRoZQo+PiBwb2ludCBQZXRyIHdh cyB0cnlpbmcgdG8gY29udmV5KS4KPgo+IE15IHBvaW50IGlzIHRoYXQgaWYgeW91IG5lZWQgZ3Jh Y2VmdWwgZGVncmFkYXRpb24sIHlvdXIgYmVzdCBiZXQgaXMgdG8KPiBzdGljayB3aXRoIHNpbmds ZS1waGFzZSBpbml0LiBUaGVuIHlvdSdsbCBoYXZlIG9uZSBjb2RlIHBhdGggdGhhdCB3b3Jrcwo+ IHRoZSBzYW1lIG9uIGFsbCB2ZXJzaW9ucy4KPiBJZiB5b3UgKm5lZWQqIHRoZSBmZWF0dXJlcyBv ZiBtdWx0aS1waGFzZSBpbml0LCB5b3UgbmVlZCB0byByZW1vdmUKPiBzdXBwb3J0IGZvciBQeXRo b25zIHRoYXQgZG9uJ3QgaGF2ZSBpdC4KPiBJZiB5b3UgbmVlZCBib3RoIGJhY2t3YXJkcyBjb21w YXRpYmlsaXR5IGFuZCBtdWx0aS1waGFzZSBpbml0LCB5b3UKPiBlc3NlbnRpYWxseSBuZWVkIHRv IGNyZWF0ZSB0d28gbW9kdWxlcyAod2l0aCBzaGFyZWQgY29udGVudHMpLCBhbmQgbWFrZQo+IHN1 cmUgdGhleSBlbmQgdXAgaW4gdGhlIHNhbWUgc3RhdGUgYWZ0ZXIgdGhleSdyZSBsb2FkZWQuCj4K Pj4gSSBleHBlY3QgQ3l0aG9uIGFuZCBTV0lHIG1heSBiZSBhYmxlIHRvIG1hbmFnZSB0aGF0IHRo cm91Z2gKPj4gYXBwcm9wcmlhdGUgdXNlIG9mICNpZmRlZidzIGluIHRoZSBnZW5lcmF0ZWQgY29k ZSwgYnV0IGRvaW5nIGl0IGJ5Cj4+IGhhbmQgaXMgbGlrZWx5IHRvIGJlIHBhaW5mdWwsIGhlbmNl IHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMgb2YganVzdAo+PiBzdGlja2luZyB3aXRoIHNpbmdsZS1w aGFzZSBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIHRpbWUgYmVpbmcuCj4KPiBZZXMsIGNvZGUgZ2Vu ZXJhdG9ycyBhcmUgaW4gYSBwb3NpdGlvbiB0byBjcmVhdGUgdHdvIHZlcnNpb25zIG9mIHRoZQo+ IG1vZHVsZSwgYW5kIHNlbGVjdCBvbmUgdXNpbmcgdXNpbmcgI2lmZGVmLgo+Cj4gVGhlIGV4YW1w bGUgaW4gdGhlIFBFUCBpcyBoZWxwZnVsIGZvciBvdGhlciByZWFzb25zIHRoYW4gZW5jb3VyYWdp bmcKPiAjaWZkZWY6IGl0IHNob3dzIHdoYXQgbmVlZHMgdG8gY2hhbmdlIHdoZW4gcG9ydGluZy4g VGhpbmsgb2YgaXQgYXMgYSBkaWZmIDopCgpJdCBtYXkgYmUgd29ydGggYmVpbmcgbW9yZSBjbGVh ciBhYm91dCB0aGF0LgoKPgo+Pj4+IFtzbmlwXQo+Pj4+Cj4+Pj4gU3ViaW50ZXJwcmV0ZXJzIGFu ZCBJbnRlcnByZXRlciBSZWxvYWRpbmcKPj4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+Pj4+Cj4+Pj4gRXh0ZW5zaW9ucyB1c2luZyB0aGUgbmV3IGluaXRpYWxp emF0aW9uIHNjaGVtZSBhcmUgZXhwZWN0ZWQgdG8gc3VwcG9ydAo+Pj4+IHN1YmludGVycHJldGVy cyBhbmQgbXVsdGlwbGUgUHlfSW5pdGlhbGl6ZS9QeV9GaW5hbGl6ZSBjeWNsZXMgY29ycmVjdGx5 Lgo+Pj4KPj4+IFByZXN1bWFibHkgdGhpcyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgYW5kIGNvbXBs ZXRlbHkgZGVmaW5lZCBpbiB0aGUKPj4+IHN1YnNlcXVlbnQgc2VudGVuY2VzLiAgSXMgaXQgcmVh bGx5IGp1c3Qga2VlcGluZyAiaGlkZGVuIiBtb2R1bGUgc3RhdGUKPj4+IGVuY2Fwc3VsYXRlZCBv biB0aGUgbW9kdWxlIG9iamVjdD8gIElmIG5vdCB0aGVuIGl0IG1heSBtYWtlIHNlbnNlIHRvCj4+ PiBlbnVtZXJhdGUgdGhlIHJlcXVpcmVtZW50cyBiZXR0ZXIgZm9yIHRoZSBzYWtlIG9mIGV4dGVu c2lvbiBtb2R1bGUKPj4+IGF1dGhvcnMuCj4KPiBJdCBpcyBleHBsYWluZWQgaW4gdGhlIGRvY3Ms IHNlZSAiQnVncyBhbmQgY2F2ZWF0cyIgaGVyZToKPiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8z L2MtYXBpL2luaXQuaHRtbCNzdWItaW50ZXJwcmV0ZXItc3VwcG9ydAo+IEknbGwgYWRkIGEgbGlu ayB0byB0aGF0IHBhZ2UuCgpDb29sLgoKPgo+PiBJJ2QgYWN0dWFsbHkgbGlrZSB0byBoYXZlIGEg YmV0dGVyIHdheSBvZiBkb2luZyBzY2VuYXJpbyB0ZXN0aW5nIGZvcgo+PiBleHRlbnNpb24gbW9k dWxlcyAoc3ViaW50ZXJwcmV0ZXJzLCBtdWx0aXBsZSBpbml0aWFsaXplL2ZpbmFsaXplCj4+IGN5 Y2xlcywgZnJlZXppbmcpLCBidXQgSSdtIG5vdCBzdXJlIHRoaXMgUEVQIGlzIHRoZSBiZXN0IHBs YWNlIHRvCj4+IGRlZmluZSB0aGF0LiBQZXJoYXBzIHdlIGNvdWxkIGRvIGEgUHlQSSBwcm9qZWN0 IHRoYXQgd2FzIGEgdG94LWJhc2VkCj4+IHRlc3QgYmF0dGVyeSBmb3IgdGhpcyBraW5kIG9mIHRo aW5nPwo+Cj4gSSB0aGluayB0aGF0J3MgdGhlIHdyb25nIHBsYWNlIHRvIHN0YXJ0LiBDdXJyZW50 bHksIHN1Yi1pbnRlcnByZXRlcgo+IHN1cHBvcnQgaXMgYnVyaWVkIGF3YXkgaW4gYSBkb2NzIGNo YXB0ZXIgYWJvdXQgUHl0aG9uCj4gaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uLCBzbyBhIHR5 cGljYWwgZXh0ZW5zaW9uIGF1dGhvciB3b24ndCBldmVuCj4gbm90aWNlIGl0LiBXZSBuZWVkIHRv IGZpcnN0IG1ha2UgaXQgKnBvc3NpYmxlKiB0byBzdXBwb3J0Cj4gc3ViaW50ZXJwcmV0ZXJzIGVh c2lseSBhbmQgY29ycmVjdGx5IChzbyB0aGF0IEN5dGhvbiBjYW4gZG8gaXQpLCBhbmQgdG8KPiBk b2N1bWVudCBpdCBwcm9taW5lbnRseSBpbiB0aGUgIndyaXRpbmcgZXh0ZW5zaW9ucyIgcGFydCBv ZiB0aGUgZG9jcywKPiBub3Qgb25seSBpbiAiZXh0ZW5kaW5nIFB5dGhvbiIuIFRoZW4sCj4gVGhp cyBQRVAgZG9lcyBwYXJ0IG9mIHRoZSBmaXJzdCBzdGVwLCBhbmQgdGhlIGRvY3MgZm9yIGl0ICh3 aGljaCBhcmVuJ3QKPiB3cml0dGVuIHlldCkgd2lsbCBkbyB0aGUgc2Vjb25kIHN0ZXAuCj4gQWZ0 ZXIgdGhhdCwgaXQgY291bGQgbWFrZSBzZW5zZSB0byBwcm92aWRlIGEgdG9vbCBmb3IgdGVzdGlu ZyB0aGlzLgoKVGhlcmUncyBub3RoaW5nIGFib3V0IHRoZSBkb2NzIHRoYXQgcHJlY2x1ZGVzIHB1 dHRpbmcgdGVzdGluZyBoZWxwZXJzCnVwIG9uIFB5UEkgdGhvdWdoLiAgSG93ZXZlciwgSSdtIGRl ZmluaXRlbHkgKzEgb24gaW1wcm92aW5nIHRoZSBkb2NzLgoKPgo+Pj4+IFRoZSBtZWNoYW5pc20g aXMgZGVzaWduZWQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVk Cj4+Pj4gb24gdGhlIHBhcnQgb2YgdGhlIGV4dGVuc2lvbiBhdXRob3IuCj4+Pj4gTm8gdXNlci1k ZWZpbmVkIGZ1bmN0aW9ucywgbWV0aG9kcywgb3IgaW5zdGFuY2VzIG1heSBsZWFrIHRvIGRpZmZl cmVudAo+Pj4+IGludGVycHJldGVycy4KPj4+PiBUbyBhY2hpZXZlIHRoaXMsIGFsbCBtb2R1bGUt bGV2ZWwgc3RhdGUgc2hvdWxkIGJlIGtlcHQgaW4gZWl0aGVyIHRoZSBtb2R1bGUKPj4+PiBkaWN0 LCBvciBpbiB0aGUgbW9kdWxlIG9iamVjdCdzIHN0b3JhZ2UgcmVhY2hhYmxlIGJ5IFB5TW9kdWxl X0dldFN0YXRlLgo+Pj4KPj4+IElzIHRoaXMgcHJvZ3JhbW1hdGljYWxseSBlbmZvcmNlYWJsZT8K Pgo+IE5vLiAoSSBiZWxpZXZlIHlvdSBjb3VsZCBldmVuIHByb3ZlIHRoaXMgZm9ybWFsbHkuKQo+ Cj4+PiBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBlYXNpbHkgY29weWluZyBtb2R1bGUgc3Rh dGU/Cj4KPiBOby4gVGhpcyB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHByb3ZpZGUgaW4gdGhlIGdl bmVyYWwgY2FzZS4gSXQncyB0aGUKPiByZXNwb25zaWJpbGl0eSBvZiB5b3VyIEMgY29kZS4KPiBU aGF0IHNhaWQsIGlmIHlvdSBuZWVkIHRvIGNvcHkgbW9kdWxlIHN0YXRlLCBjaGFuY2VzIGFyZSB5 b3VyIGRlc2lnbgo+IGNvdWxkIHVzZSBzb21lIHJldGhpbmtpbmcuCj4KPj4+IEhvdyBhYm91dCBz aGFyaW5nIHNvbWUgc3RhdGUgYmV0d2VlbiBzdWJpbnRlcnByZXRlcnM/Cj4KPiBUaGUgUHlDYXBz dWxlIEFQSSB3YXMgZGVzaWduZWQgZm9yIHRoaXMuCgpJJ20gc2ltcGx5IHRoaW5raW5nIGluIHRl cm1zIG9mIHRoZSBvcHRpb25zIHdlIGhhdmUgZm9yIGEgUEVQIEknbQp3b3JraW5nIG9uIHRoYXQg d2lsbCBmYWNpbGl0YXRlIHBhc3Npbmcgb2JqZWN0cyBiZXR3ZWVuCnN1YmludGVycHJldGVycyBh bmQgZXZlbiBwb3NzaWJseSBzaGFyaW5nIHNvbWUgc3RhdGUgYmV0d2VlbiB0aGVtLgpDdXJyZW50 bHkgaXQgd2lsbCBiZSBwcmFjdGljYWxseSBuZWNlc3NhcnkgdG8gZXhjbHVkZSBleHRlbnNpb24K bW9kdWxlcyBmcm9tIGFueSBzdWNoIG1lY2hhbmlzbS4gIFNvIEkgd2FzIHdvbmRlcmluZyBpZiB0 aGVyZSB3b3VsZCBiZQphIHdheSB0byBhbGxvdyBleHRlbnNpb24gbW9kdWxlIGF1dGhvcnMgdG8g ZGVmaW5lIGhvdyBhdCBsZWFzdCBzb21lIG9mCnRoZSBtb2R1bGUncyBkYXRhIGNvdWxkIGJlIHNo YXJlZCBiZXR3ZWVuIHN1YmludGVycHJldGVycy4KCj4KPj4+IEhvdyBtdWNoIHJvb20gaXMgdGhl cmUgZm9yIGxldHRpbmcgZXh0ZW5zaW9uIG1vZHVsZQo+Pj4gYXV0aG9ycyBkZWZpbmUgaG93IHRo ZWlyIG1vZHVsZSBiZWhhdmVzIGFjcm9zcyBtdWx0aXBsZSBpbnRlcnByZXRlcnMKPj4+IG9yIGFj cm9zcyBtdWx0aXBsZSBJbml0aWFsaXplL0ZpbmFsaXplIGN5Y2xlcz8KPgo+IFRlY2huaWNhbGx5 LCB5b3UgaGF2ZSBhbGwgdGhlIGZyZWVkb20geW91IHdhbnQuIEJ1dCBpZiBJIGVtYmVkIFB5dGhv bgo+IGludG8gbXkgcHJvamVjdC9saWJyYXJ5LCBJJ2Qgd2FudCBtdWx0aXBsZSBzdWItaW50ZXJw cmV0ZXJzIGNvbXBsZXRlbHkKPiBpc29sYXRlZCBieSBkZWZhdWx0LiBJZiBJIHVzZSB0d28gbGli cmFyaWVzIHRoYXQgZWFjaCBlbWJlZCBQeXRob24gaW50bwo+IG15IGFwcCwgSSBkZWZpbml0ZWx5 IHdhbnQgdGhlbSBpc29sYXRlZC4KPiBTbyB0aGUgUEVQIHRyaWVzIHRvIG1ha2UgaXQgZWFzeSB0 byBrZWVwIG11bHRpcGxlIGludGVycHJldGVycyBpc29sYXRlZC4KCkFzIEkganVzdCBub3RlZCwg SSdtIGxvb2tpbmcgYXQgbWFraW5nIHVzZSBvZiBzdWJpbnRlcnByZXRlcnMgZm9yIGEKZGlmZmVy ZW50IHVzZSBjYXNlIHdoZXJlIGl0ICpkb2VzKiBtYWtlIHNlbnNlIHRvIGVmZmVjdGl2ZWx5IHNo YXJlCm9iamVjdHMgYmV0d2VlbiB0aGVtLgoKICBbc25pcF0KPj4+IEF0IHRoZSBzYW1lIHRpbWUs IG9uZSBtYXkgYXJndWUgdGhhdCByZWxvYWRpbmcgbW9kdWxlcyBpcyBub3QKPj4+IHNvbWV0aGlu ZyB0byBlbmNvdXJhZ2UuIDopCj4+Cj4+IFRoZXJlJ3MgYSByZWFzb24gaW1wb3J0X2ZyZXNoX21v ZHVsZSBoYXMgbmV2ZXIgbWFkZSBpdCBvdXQgb2YgdGVzdC5zdXBwb3J0IDopCj4KPiBSaWdodC4g SW1wbGVtZW50YXRpb24td2lzZSwgaXQgd291bGQgYWN0dWFsbHkgYmUgbXVjaCBlYXNpZXIgdG8g c3VwcG9ydAo+IHJlbG9hZCByYXRoZXIgdGhhbiBtYWtlIGl0IGEgbm8tb3AuIEJ1dCB0aGVuIEMg bW9kdWxlIGF1dGhvcnMgd291bGQgbmVlZAo+IHRvIHRoaW5rIGFib3V0IHRoaXMgZWRnZSBjYXNl LCB3aGljaCBtaWdodCBiZSB0cmlja3kgdG8gZ2V0IHJpZ2h0LCB3b3VsZAo+IG5vdCBiZSBsaWtl bHkgdG8gZ2V0IHRlc3QgY292ZXJhZ2UsIGFuZCBpcyBnZW5lcmFsbHkgbm90IHVzZWZ1bCBhbnl3 YXksIC4KPgo+IElmIGl0IHR1cm5zIG91dCB0byBiZSB1c2VmdWwsIGl0IHdvdWxkIGJlIHZlcnkg c2ltcGxlIHRvIGFkZCBhbiBleHBsaWNpdAo+IHJlbG9hZCBzbG90IGluIHRoZSBmdXR1cmUuCgpB Z3JlZWQuCgogIFtzbmlwXQo+PiBUaGlzIHNlY3Rpb24gaXMgbWlzc2luZyBhbnkgZXhwbGFuYXRp b24gb2YgdGhlIGltcGFjdCBvbgo+PiBQeXRob24vaW1wb3J0LmMsIG9uIHRoZSBfaW1wL2ltcCBt b2R1bGUsIGFuZCBvbiB0aGUgMyBmaW5kZXJzL2xvYWRlcnMKPj4gaW4gTGliL2ltcG9ydGxpYi9f Ym9vdHN0cmFwW19leHRlcm5hbF0ucHkgKGJ1aWx0aW4vZnJvemVuL2V4dGVuc2lvbikuCj4KPiBJ J2xsIGFkZCBhIHN1bW1hcnkuCj4KPiBUaGUgaW50ZXJuYWwgX2ltcCBtb2R1bGUgd2lsbCBoYXZl IGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAtLQo+IGZ1bmN0aW9ucyB3aWxsIGJlIGFk ZGVkIGFuZCByZW1vdmVkIGFzIG5lY2Vzc2FyeS4gVGhhdCdzIHdoYXQgdGhlCj4gdW5kZXJzY29y ZSBtZWFucyA6KQoKQmUgY2FyZWZ1bCB3aXRoIHRoYXQgYXNzdW1wdGlvbi4gIFdlJ3ZlIGhhZCBw bGVudHkgb2YgZXhwZXJpZW5jZXMKd2hlcmUgdGhlIGFzc3VtcHRpb24gYmVjYXVzZSB1bnJlbGlh YmxlLgoKPiBUaGUgZGVwcmVjYXRlZCBpbXAgbW9kdWxlIHdpbGwgZ2V0IGEgYmFja3dhcmRzIGNv bXBhdGliaWxpdHkgc2hpbSBmb3IKPiBhbnl0aGluZyBpdCBpbXBvcnRlZCBmcm9tIF9pbXAgdGhh dCBnb3QgcmVtb3ZlZC4KPiBpbXBvcnRsaWIgd2lsbCBzdGF5IGJhY2t3YXJkcyBjb21wYXRpYmxl Lgo+Cj4gUHl0aG9uL2ltcG9ydC5jIGFuZCBQeXRob24vaW1wb3J0ZGwuKiB3aWxsIGJlIHJld3Jp dHRlbiBlbnRpcmVseS4KPiBTZWUgdGhlIHBhdGNoZXMgKGxpbmtlZCBmcm9tIHRoZSBQRVApIGZv ciBkZXRhaWxzLgo+CgotZXJpYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbXBvcnQtU0lHIG1haWxpbmcgbGlzdApJbXBvcnQtU0lHQHB5dGhvbi5vcmcK aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pbXBvcnQtc2lnCg==