Re: PEP 489: Multi-phase extension module initialization; version 5

Eric Snow <[email protected]> Tue, 19 May 2015 17:56:34 -0600
Newsgroups gmane.comp.python.import
Message-ID <CALFfu7CY3VL8VrSvSfHn=n+1i_KBusNkWpQ=nHkosKD4rGQhww@mail.gmail.com>
T24gTW9uLCBNYXkgMTgsIDIwMTUgYXQgOTo1MSBQTSwgTmljayBDb2dobGFuIDxuY29naGxhbkBn
bWFpbC5jb20+IHdyb3RlOgo+IE9uIDE5IE1heSAyMDE1IGF0IDEwOjA3LCBFcmljIFNub3cgPGVy
aWNzbm93Y3VycmVudGx5QGdtYWlsLmNvbT4gd3JvdGU6CiAgW3NuaXBdCj4+IFdhcyB0aGVyZSBh
bnkgY29uc2lkZXJhdGlvbiBtYWRlIGZvciBqdXN0IGlnbm9yaW5nIHVua25vd24gc2xvdCBJRHM/
Cj4+IE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHlvdSBoYXZlIGl0IHRoZSByaWdodCB3YXksIGJ1
dCBJIGNhbiBzdGlsbAo+PiBpbWFnaW5lIHVzZSBjYXNlcyBmb3IgY3VzdG9tIHNsb3RzIHRoYXQg
UHlNb2R1bGVEZWZfSW5pdCB3b3VsZG4ndCBrbm93Cj4+IGFib3V0Lgo+Cj4gVGhlICJrbm93biBz
bG90cyBvbmx5LCBhbGwgb3RoZXIgc2xvdCBJRHMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNl
Igo+IHNsb3Qgc2VtYW50aWNzIHdlcmUgY29waWVkIGRpcmVjdGx5IGZyb20gUHlUeXBlX0Zyb21T
cGVjIGluIFBFUCAzODQuCj4gU2luY2UgaXQncyBqdXN0IGEgbnVtZXJpYyBzbG90IElELCB5b3Un
ZCBydW4gYSBoaWdoIHJpc2sgb2YgY29uZmxpY3RzCj4gaWYgeW91IGFsbG93ZWQgZm9yIGN1c3Rv
bSBleHRlbnNpb25zLgo+Cj4gSWYgZm9sa3Mgd2FudCB0byBkbyBtb3JlIGNsZXZlciB0aGluZ3Ms
IHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0ZQo+IG9yIGV4ZWMgc2xvdCB0byBzdGFzaCB0
aGVtIG9uIHRoZSBtb2R1bGUgb2JqZWN0LCByYXRoZXIgdGhhbiBzdG9yaW5nCj4gdGhlbSBpbiB0
aGUgbW9kdWxlIGRlZmluaXRpb24uCgpNYWtlcyBzZW5zZS4gIFRoaXMgZG9lcyByZW1pbmQgbWUg
b2Ygc29tZXRoaW5nIEkgd2FudGVkIHRvIGFzay4gIFdvdWxkCml0IG1ha2Ugc2Vuc2UgdG8gbGV2
ZXJhZ2UgTW9kdWxlU3BlYy5sb2FkZXJfc3RhdGU/ICBJZiBJIHJlY2FsbApjb3JyZWN0bHksIHdl
IGFkZGVkIGxvYWRlcl9zdGF0ZSB3aXRoIGV4dGVuc2lvbiBtb2R1bGVzIGluIG1pbmQuCgo+Cj4+
PiBUaGUgUHlNb2R1bGVEZWYgb2JqZWN0IG11c3QgYmUgYXZhaWxhYmxlIGZvciB0aGUgbGlmZXRp
bWUgb2YgdGhlIG1vZHVsZQo+Pj4gY3JlYXRlZAo+Pj4gZnJvbSBpdCDigJMgdXN1YWxseSwgaXQg
d2lsbCBiZSBkZWNsYXJlZCBzdGF0aWNhbGx5Lgo+Pgo+PiBIb3cgZWFzaWx5IHdpbGwgdGhpcyBi
ZSBhIHNvdXJjZSBvZiBteXN0ZXJpb3VzIGVycm9ycy1hdC1hLWRpc3RhbmNlPwo+Cj4gSXQgc2hv
dWxkbid0IGJlIGFueSB3b3JzZSB0aGFuIHN0YXRpYyB0eXBlIGRlZmluaXRpb25zLCBhbmQgbm9y
bWFsCj4gcmVmZXJlbmNlIGNvdW50aW5nIHNlbWFudGljcyBzaG91bGQga2VlcCBpdCBhbGl2ZSBy
ZWdhcmRsZXNzLgoKR290IGl0LgoKPgo+Pj4gW3NuaXBdCj4+PiBFeHRlbnNpb24gYXV0aG9ycyBh
cmUgYWR2aXNlZCB0byBrZWVwIFB5X21vZF9jcmVhdGUgbWluaW1hbCwgYW4gaW4KPj4+IHBhcnRp
Y3VsYXIKPj4+IHRvIG5vdCBjYWxsIHVzZXIgY29kZSBmcm9tIGl0Lgo+Pgo+PiBUaGlzIGlzIGEg
cHJldHR5IGltcG9ydGFudCBwb2ludCBhcyB3ZWxsLiAgV2UnbGwgbmVlZCB0byBtYWtlIHN1cmUK
Pj4gdGhpcyBpcyBzdWZmaWNpZW50bHkgY2xlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uICBXb3Vs
ZCBpdCBtYWtlIHNlbnNlCj4+IHRvIHByb3ZpZGUgaGVscGVycyBmb3IgY29tbW9uIGNhc2VzLCB0
byBlbmNvdXJhZ2UgZXh0ZW5zaW9uIGF1dGhvcnMgdG8KPj4ga2VlcCB0aGUgY3JlYXRlIGZ1bmN0
aW9uIG1pbmltYWw/Cj4KPiBUaGUgbWFpbiBlbmNvdXJhZ2VtZW50IGlzIHRvIG5vdCBoYW5kY29k
ZSB5b3VyIGV4dGVuc2lvbiBtb2R1bGVzIGF0Cj4gYWxsLCBhbmQgbGV0IHNvbWV0aGluZyBsaWtl
IEN5dGhvbiBvciBTV0lHIHRha2UgY2FyZSBvZiB0aGUKPiBib2lsZXJwbGF0ZSA6KQoKSGV5LCBJ
IHRyaWVkIHRvIG1ha2Ugc29tZXRoaW5nIGhhcHBlbiBvdmVyIG9uIHB5dGhvbi1pZGVhcyEgOikg
IFNvbWUKZm9sa3MganVzdCBkb24ndCB3YW50IHRvIGdvIGZhciBlbm91Z2guCgogIFtzbmlwXQo+
PiBDb3VsZCB5b3UgZWxhYm9yYXRlPyAgV2hhdCBhcmUgdGhvc2UgdXNlIGNhc2VzIGFuZCB3aHkg
d291bGQKPj4gUHlfbW9kX2NyZWF0ZSBiZSBiZXR0ZXI/Cj4KPiBSYXRoZXIgdGhhbiByZXBsYWNp
bmcgdGhlIGltcGxpY2l0bHkgY3JlYXRlZCBub3JtYWwgbW9kdWxlIGR1cmluZwo+IFB5X21vZF9l
eGVjICh3aGljaCBpcyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIHRvIFB5dGhvbiBtb2R1bGVz
KSwKPiBQRVAgNDg5IGxldHMgeW91IGRlZmluZSB0aGUgUHlfbW9kX2NyZWF0ZSBzbG90IHRvIG92
ZXJyaWRlIHRoZSBtb2R1bGUKPiBvYmplY3QgY3JlYXRpb24gZGlyZWN0bHkuCj4KPiBPdXRzaWRl
IGNvbnZlcnNpb24gb2YgYSBQeXRob24gbW9kdWxlIHRoYXQgbWFuaXB1bGF0ZXMgc3lzLm1vZHVs
ZXMgdG8KPiBhbiBleHRlbnNpb24gbW9kdWxlIHdpdGggQ3l0aG9uLCB0aGVyZSdzIG5vIHJlYWwg
cmVhc29uIHRvIHVzZSB0aGUKPiAicmVwbGFjaW5nIHlvdXJzZWxmIGluIHN5cy5tb2R1bGVzIiBv
cHRpb24gb3ZlciB1c2luZyBQeV9tb2RfY3JlYXRlCj4gZGlyZWN0bHkuCgpBaCwgSSBnb3QgaXQu
ICBXZSBqdXN0IHdhbnQgdG8gZW5zdXJlIHdlIG1hdGNoIFB5dGhvbiBtb2R1bGUgYmVoYXZpb3Is
CndoZXJlIHRoZXJlIGlzIG5vIG1vZHVsZS1kZWZpbmVkIGNyZWF0ZSBzdGVwLiAgVGhpcyB3b3Vs
ZCBzZWVtIGV2ZW4KbW9yZSBpbXBvcnRhbnQgd2l0aCB0b29scyBsaWtlIEN5dGhvbiB0aGF0IGNv
bnZlcnQgUHl0aG9uIG1vZHVsZXMgaW50bwpDIGV4dGVuc2lvbnMsIGV2ZW4gaWYgdGhlIGFwcHJv
cHJpYXRlIHNvbHV0aW9uIGZvciBhIEMgZXh0ZW5zaW9uCm1vZHVsZSB3b3VsZCBiZSBhIGRpZmZl
cmVudCBhcHByb2FjaCAoZS5nLiBQeV9tb2RfY3JlYXRlKS4KCiAgW3NuaXBdCj4+IEdpdmVuIHlv
dXIgZXhhbXBsZSBiZWxvdywgInNob3VsZCBub3QiIHNlZW1zIGEgYml0IHN0cm9uZyB0byBtZS4g
IEluCj4+IGZhY3QsIHdoYXQgYXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBh
cHByb2FjaCBmcm9tIHRoZQo+PiBleGFtcGxlPwo+Cj4gQWdyZWVkLCAic2hvdWxkIG5vdCIgaXMg
cHJvYmFibHkgdG9vIHN0cm9uZyBoZXJlLiBPbiB0aGUgb3RoZXIgaGFuZCwKPiBwcmVzZXJ2aW5n
IGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMgaW4gYSBtb2R1bGUgdGhh
dAo+IGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVseSBvbiBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlv
biBpcyBsaWtlbHkgdG8gYmUKPiBhIG1hdHRlciBvZiAiZ3JhY2VmdWwgZGVncmFkYXRpb24iLCBy
YXRoZXIgdGhhbiBiZWluZyBhYmxlIHRvCj4gcmVwcm9kdWNlIGNvbXBhcmFibGUgZnVuY3Rpb25h
bGl0eSAod2hpY2ggSSBiZWxpZXZlIG1heSBoYXZlIGJlZW4gdGhlCj4gcG9pbnQgUGV0ciB3YXMg
dHJ5aW5nIHRvIGNvbnZleSkuCgpVbmRlcnN0b29kLiAgVGhpcyBzZWN0aW9uIGNvdWxkIHN0YW5k
IHRvIGJlIGNsYXJpZmllZCB0aGVuLgoKPgo+IEkgZXhwZWN0IEN5dGhvbiBhbmQgU1dJRyBtYXkg
YmUgYWJsZSB0byBtYW5hZ2UgdGhhdCB0aHJvdWdoCj4gYXBwcm9wcmlhdGUgdXNlIG9mICNpZmRl
ZidzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IGRvaW5nIGl0IGJ5Cj4gaGFuZCBpcyBsaWtl
bHkgdG8gYmUgcGFpbmZ1bCwgaGVuY2UgdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBqdXN0Cj4g
c3RpY2tpbmcgd2l0aCBzaW5nbGUtcGhhc2UgaW5pdGlhbGlzYXRpb24gZm9yIHRoZSB0aW1lIGJl
aW5nLgoKSG1tLiAgVGhlIGV4YW1wbGUgbWFkZSBpdCBsb29rIHJlbGF0aXZlbHkgc3RyYWlnaHQt
Zm9yd2FyZC4KUmVnYXJkbGVzcywgaXQncyBub3QgYSBiaWcgZGVhbC4KCj4KPj4+IFtzbmlwXQo+
Pj4KPj4+IFN1YmludGVycHJldGVycyBhbmQgSW50ZXJwcmV0ZXIgUmVsb2FkaW5nCj4+PiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IEV4dGVuc2lvbnMg
dXNpbmcgdGhlIG5ldyBpbml0aWFsaXphdGlvbiBzY2hlbWUgYXJlIGV4cGVjdGVkIHRvIHN1cHBv
cnQKPj4+IHN1YmludGVycHJldGVycyBhbmQgbXVsdGlwbGUgUHlfSW5pdGlhbGl6ZS9QeV9GaW5h
bGl6ZSBjeWNsZXMgY29ycmVjdGx5Lgo+Pgo+PiBQcmVzdW1hYmx5IHRoaXMgc3VwcG9ydCBpcyBl
eHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGRlZmluZWQgaW4gdGhlCj4+IHN1YnNlcXVlbnQgc2Vu
dGVuY2VzLiAgSXMgaXQgcmVhbGx5IGp1c3Qga2VlcGluZyAiaGlkZGVuIiBtb2R1bGUgc3RhdGUK
Pj4gZW5jYXBzdWxhdGVkIG9uIHRoZSBtb2R1bGUgb2JqZWN0PyAgSWYgbm90IHRoZW4gaXQgbWF5
IG1ha2Ugc2Vuc2UgdG8KPj4gZW51bWVyYXRlIHRoZSByZXF1aXJlbWVudHMgYmV0dGVyIGZvciB0
aGUgc2FrZSBvZiBleHRlbnNpb24gbW9kdWxlCj4+IGF1dGhvcnMuCj4KPiBJJ2QgYWN0dWFsbHkg
bGlrZSB0byBoYXZlIGEgYmV0dGVyIHdheSBvZiBkb2luZyBzY2VuYXJpbyB0ZXN0aW5nIGZvcgo+
IGV4dGVuc2lvbiBtb2R1bGVzIChzdWJpbnRlcnByZXRlcnMsIG11bHRpcGxlIGluaXRpYWxpemUv
ZmluYWxpemUKPiBjeWNsZXMsIGZyZWV6aW5nKSwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIFBFUCBp
cyB0aGUgYmVzdCBwbGFjZSB0bwo+IGRlZmluZSB0aGF0LiBQZXJoYXBzIHdlIGNvdWxkIGRvIGEg
UHlQSSBwcm9qZWN0IHRoYXQgd2FzIGEgdG94LWJhc2VkCj4gdGVzdCBiYXR0ZXJ5IGZvciB0aGlz
IGtpbmQgb2YgdGhpbmc/CgpJbnRlcmVzdGluZyBpZGVhLiAgSSB0aGluayB0aGF0IGEgbG90IG9m
IGZvbGtzIHdvdWxkIGZpbmQgdGhhdCB1c2VmdWwuCkl0IGZlZWxzIGEgYml0IGxpa2Ugc29tZSBv
ZiB0aGUgd29yayBEYXZlIE1hbGNvbG0gZGlkIHdpdGggdmFsaWRhdGluZwpleHRlbnNpb24gbW9k
dWxlcy4KCj4KPj4+IFRoZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gbWFrZSB0aGlzIGVhc3ks
IGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVkCj4+PiBvbiB0aGUgcGFydCBvZiB0aGUgZXh0ZW5z
aW9uIGF1dGhvci4KPj4+IE5vIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMsIG1ldGhvZHMsIG9yIGlu
c3RhbmNlcyBtYXkgbGVhayB0byBkaWZmZXJlbnQKPj4+IGludGVycHJldGVycy4KPj4+IFRvIGFj
aGlldmUgdGhpcywgYWxsIG1vZHVsZS1sZXZlbCBzdGF0ZSBzaG91bGQgYmUga2VwdCBpbiBlaXRo
ZXIgdGhlIG1vZHVsZQo+Pj4gZGljdCwgb3IgaW4gdGhlIG1vZHVsZSBvYmplY3QncyBzdG9yYWdl
IHJlYWNoYWJsZSBieSBQeU1vZHVsZV9HZXRTdGF0ZS4KPj4KPj4gSXMgdGhpcyBwcm9ncmFtbWF0
aWNhbGx5IGVuZm9yY2VhYmxlPyAgSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IKPj4gZWFzaWx5
IGNvcHlpbmcgbW9kdWxlIHN0YXRlPyAgSG93IGFib3V0IHNoYXJpbmcgc29tZSBzdGF0ZSBiZXR3
ZWVuCj4+IHN1YmludGVycHJldGVycz8gIEhvdyBtdWNoIHJvb20gaXMgdGhlcmUgZm9yIGxldHRp
bmcgZXh0ZW5zaW9uIG1vZHVsZQo+PiBhdXRob3JzIGRlZmluZSBob3cgdGhlaXIgbW9kdWxlIGJl
aGF2ZXMgYWNyb3NzIG11bHRpcGxlIGludGVycHJldGVycwo+PiBvciBhY3Jvc3MgbXVsdGlwbGUg
SW5pdGlhbGl6ZS9GaW5hbGl6ZSBjeWNsZXM/Cj4KPiBJdCdzIG5vdCBwcm9ncmFtbWF0aWNhbGx5
IGVuZm9yY2FibGUsIGhlbmNlIHRoZSBpZGVhIGFib3ZlIG9mIGZpbmRpbmcKPiBhIHdheSB0byBt
YWtlIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIHRlc3QgdGhlaXIgZXh0ZW5zaW9uIG1vZHVsZXMg
YXJlCj4gaW1wb3J0YWJsZSBhY3Jvc3MgbXVsdGlwbGUgUHl0aG9uIHZlcnNpb25zIGFuZCBkZXBs
b3ltZW50IHNjZW5hcmlvcy4KClRoYXQncyB3aGF0IEkgZmlndXJlZC4KCj4KPj4+IEFzIGEgcnVs
ZSBvZiB0aHVtYiwgbW9kdWxlcyB0aGF0IHJlbHkgb24gUHlTdGF0ZV9GaW5kTW9kdWxlIGFyZSwg
YXQgdGhlCj4+PiBtb21lbnQsCj4+PiBub3QgZ29vZCBjYW5kaWRhdGVzIGZvciBwb3J0aW5nIHRv
IHRoZSBuZXcgbWVjaGFuaXNtLgo+Pgo+PiBBcmUgdGhlcmUgYW55IHBsYW5zIGZvciBhIGZvbGxv
dy11cCBlZmZvcnQgdG8gaGVscCB3aXRoIHRoaXMgY2FzZT8KPgo+IFRoZSBwcm9ibGVtIGhlcmUg
aXMgdGhhdCB0aGUgUEVQIDMxMjEgbW9kdWxlIHN0YXRlIGFwcHJvYWNoIHByb3ZpZGVzCj4gc3Rv
cmFnZSBvbiBhICpwZXItaW50ZXJwcmV0ZXIqIGJhc2lzLCB0aGF0IGlzIHRoZW4gc2hhcmVkIGFt
b25nc3QgYWxsCj4gbW9kdWxlIGluc3RhbmNlcyBjcmVhdGVkIGZyb20gYSBnaXZlbiBtb2R1bGUg
ZGVmaW5pdGlvbi4KCllvdSBtZWFuIGEgZm9ybSBvZiBpbnRlcnByZXRlci1sb2NhbCBzdG9yYWdl
PyAgQWxzbywgdGhlIG1vZHVsZQpkZWZpbml0aW9uIGlzIGVmZmVjdGl2ZWx5IGdsb2JhbCByaWdo
dD8KCj4KPiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVj
dCAoc2VlCj4gaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS9mYzJlZWQ5ZmMyZDAv
UHl0aG9uL2ltcG9ydC5jI2w1MTgpCj4gcmVpbml0aWFsaXNlcyBhbiBleHRlbnNpb24gbW9kdWxl
LCB0aGUgc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3bwo+IGluc3RhbmNlcy4gV2hlbiBQ
RVAgMzEyMSB3YXMgd3JpdHRlbiwgdGhpcyB3YXMgbm90IHNlZW4gYXMgYSBwcm9ibGVtLAo+IHNp
bmNlIHRoZSBleHBlY3RhdGlvbiB3YXMgdGhhdCB0aGUgYmVoYXZpb3VyIHdvdWxkIG9ubHkgYmUg
dHJpZ2dlcmVkCj4gYnkgbXVsdGlwbGUgaW50ZXJwcmV0ZXIgbGV2ZWwgaW5pdGlhbGl6ZS9maW5h
bGl6ZSBjeWNsZXMuCj4KPiBPbmUga2V5IHNjZW5hcmlvIHdlIG1pc3NlZCBhdCB0aGUgdGltZSB3
YXMgImRlbGV0aW5nIGFuIGV4dGVuc2lvbgo+IG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIGFuZCBp
bXBvcnRpbmcgaXQgYSBzZWNvbmQgdGltZSwgd2hpbGUKPiByZXRhaW5pbmcgYSBsb2NhbCByZWZl
cmVuY2UgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIi4gVW5kZXIgUEVQIDMxMjEsCj4gdGhlIHR3byBp
bnN0YW5jZXMgY29sbGlkZSBvbiB0aGVpciBzdGF0ZSBzdG9yYWdlLCBhcyB3ZSBoYXZlIHR3bwo+
IHNpbXVsdGFuZW91c2x5IGV4aXN0aW5nIG1vZHVsZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIHNh
bWUgaW50ZXJwcmV0ZXIKPiBmcm9tIHRoZSBzYW1lIG1vZHVsZSBkZWZpbml0aW9uLiBQRVAgNDg5
IHdvdWxkIGluaGVyaXQgdGhhdCBzYW1lCj4gcHJvYmxlbSBpZiB5b3UgdHJpZWQgdG8gdXNlIGl0
IHdpdGggdGhlIFB5U3RhdGVfKiBBUElzLCBzbyBpdCBzaW1wbHkKPiBkb2Vzbid0IGFsbG93IHRo
ZW0gYXQgYWxsLiAoRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgUEVQIGFsbG93ZWQgaXQKPiB3aXRo
IGFuICJFWFBPUlRfU0lOR0xFVE9OIiBzbG90IHRoYXQgd291bGQgZGlzYWxsb3cgcmVpbXBvcnRp
bmcKPiBlbnRpcmVseSwgd2hpY2ggd2UgdG9vayBvdXQgaW4gZmF2b3VyIG9mICJqdXN0IGtlZXAg
dXNpbmcgdGhlIGV4aXN0aW5nCj4gaW5pdGlhbGlzYXRpb24gbW9kZWwgaW4gdGhvc2UgY2FzZXMg
Zm9yIHRoZSB0aW1lIGJlaW5nIikKClRoYXQgc2VlbXMgcmVhc29uYWJsZS4KCj4KPiBGb3IgcHVy
ZSBQeXRob24gY29kZSwgd2UgZG9uJ3QgaGF2ZSB0aGlzIHByb2JsZW0sIHNpbmNlIHRoZQo+IGlu
dGVycHJldGVyIHRha2VzIGNhcmUgb2YgcHJvdmlkaW5nIGEgcHJvcGVybHkgc2NvcGVkIGdsb2Jh
bHMoKQo+IHJlZmVyZW5jZSB0byAqYWxsKiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGF0IG1vZHVs
ZSwgcmVnYXJkbGVzcyBvZgo+IHdoZXRoZXIgdGhleSdyZSBtb2R1bGUgbGV2ZWwgZnVuY3Rpb25z
IG9yIG1ldGhvZCBkZWZpbml0aW9ucyBvbiBhCj4gY2xhc3MuIEF0IHRoZSBDIGxldmVsLCB3ZSBk
b24ndCBoYXZlIHRoYXQsIGFzIG9ubHkgbW9kdWxlIGxldmVsCj4gZnVuY3Rpb25zIGdldCBhIG1v
ZHVsZSByZWZlcmVuY2UgcGFzc2VkIGluIC0gbWV0aG9kcyBvbmx5IGdldCBhCj4gcmVmZXJlbmNl
IHRvIHRoZWlyIGNsYXNzIGluc3RhbmNlLCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvIHRoZSBtb2R1
bGUKPiBnbG9iYWxzLCBhbmQgZGVsYXllZCBjYWxsYmFja3MgY2FuIGJlIGEgcHJvYmxlbSBhcyB3
ZWxsLgoKWXVjay4gIElzIHRoaXMgc29tZXRoaW5nIHdlIGNvdWxkIGZpeD8gIElzIF9fbW9kdWxl
X18gbm90IHNldCBvbiBhbGwgZnVuY3Rpb25zPwoKPgo+IFRoZSBiZXN0IGltcHJvdmVkIEFQSSB3
ZSBjb3VsZCBsaWtlbHkgb2ZmZXIgYXQgdGhpcyBwb2ludCBpcyBhCj4gY29udmVuaWVuY2UgQVBJ
IGZvciBsb29raW5nIHVwIGEgbW9kdWxlIGluICpzeXMubW9kdWxlcyogYmFzZWQgb24gYQo+IFB5
TW9kdWxlRGVmIGluc3RhbmNlLCBhbmQgdXBkYXRpbmcgUEVQIDQ4OSB0byB3cml0ZSB0aGUgYXMt
aW1wb3J0ZWQKPiBtb2R1bGUgbmFtZSBpbnRvIHRoZSByZXR1cm5lZCBQeU1vZHVsZURlZiBzdHJ1
Y3R1cmUuIFRoYXQncyBwcm9iYWJseQo+IG5vdCBhIGJhZCB3YXkgdG8gZ28sIGdpdmVuIHRoYXQg
UEVQIDQ4OSBjdXJyZW50bHkgKmlnbm9yZXMqIHRoZSBtX25hbWUKPiBzbG90IC0gZmxpcHBpbmcg
aXQgYXJvdW5kIHRvIGJlIGEgKndyaXRhYmxlKiBzbG90IHdvdWxkIGJlIGEgd2F5IHRvCj4gbGV0
IGV4dGVuc2lvbiBtb2R1bGVzIGtub3cgZHluYW1pY2FsbHkgaG93IHRvIGxvb2sgdGhlbXNlbHZl
cyB1cCBpbgo+IHN5cy5tb2R1bGVzLgoKVGhhdCBzb3VuZHMgdXNlZnVsLgoKPgo+IFRoZSBuZXcg
bG9va3VwIEFQSSB3b3VsZCB0aGVuIGJlIHRoZSBtb3JhbCBlcXVpdmFsZW50IG9mIFB5dGhvbiBj
b2RlCj4gZG9pbmcgIm1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXSIuIFdpdGggdGhpcyBhcHBy
b2FjaCwgYWN0aXZlbHkKPiAqdXNpbmcqIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gYSBnaXZlbiBt
b2R1bGUgYXQgdGhlIHNhbWUgdGltZSB3b3VsZAo+IHN0aWxsIGJyZWFrIChzaW5jZSB5b3UnbGwg
YWx3YXlzIGdldCB0aGUgbW9kdWxlIGN1cnJlbnRseSBpbgo+IHN5cy5tb2R1bGVzLCBldmVuIGlm
IHRoYXQgaXNuJ3QgdGhlIG9uZSB5b3UgZXhwZWN0ZWQpLCBidXQgdGhlCj4gInNhdmUtYW5kLXJl
c3RvcmUiIG1vZGVsIG5lZWRlZCBmb3IgY2VydGFpbiBraW5kcyBvZiB0ZXN0aW5nIGFuZAo+IHBv
dGVudGlhbGx5IG90aGVyIHNjZW5hcmlvcyB3b3VsZCB3b3JrIGNvcnJlY3RseS4KClJpZ2h0LCB0
aG91Z2ggSSB3b3VsZCBleHBlY3QgdGhlcmUgdG8gYmUgdHJvdWJsZSBpZiB0aGUgcmVwbGFjZW1l
bnQKbW9kdWxlIGRpZG4ndCBzdXBwb3J0IHRoZSBtb2R1bGUgc3RhdGUgQVBJIGluIHRoZSBleHBl
Y3RlZCB3YXkuCgo+Cj4+PiBNb2R1bGUgUmVsb2FkaW5nCj4+PiAtLS0tLS0tLS0tLS0tLS0tCj4+
Pgo+Pj4gUmVsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgdXNpbmcgaW1wb3J0bGliLnJlbG9h
ZCgpIHdpbGwgY29udGludWUgdG8KPj4+IGhhdmUgbm8gZWZmZWN0LCBleGNlcHQgcmUtc2V0dGlu
ZyBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzLgo+Pj4KPj4+IER1ZSB0byBsaW1pdGF0aW9ucyBp
biBzaGFyZWQgbGlicmFyeSBsb2FkaW5nIChib3RoIGRsb3BlbiBvbiBQT1NJWCBhbmQKPj4+IExv
YWRNb2R1bGVFeCBvbiBXaW5kb3dzKSwgaXQgaXMgbm90IGdlbmVyYWxseSBwb3NzaWJsZSB0byBs
b2FkCj4+PiBhIG1vZGlmaWVkIGxpYnJhcnkgYWZ0ZXIgaXQgaGFzIGNoYW5nZWQgb24gZGlzay4K
Pj4+Cj4+PiBVc2UgY2FzZXMgZm9yIHJlbG9hZGluZyBvdGhlciB0aGFuIHRyeWluZyBvdXQgYSBu
ZXcgdmVyc2lvbiBvZiB0aGUgbW9kdWxlCj4+PiBhcmUgdG9vIHJhcmUgdG8gcmVxdWlyZSBhbGwg
bW9kdWxlIGF1dGhvcnMgdG8ga2VlcCByZWxvYWRpbmcgaW4gbWluZC4KPj4+IElmIHJlbG9hZC1s
aWtlIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkLCBhdXRob3JzIGNhbiBleHBvcnQgYSBkZWRpY2F0
ZWQKPj4+IGZ1bmN0aW9uIGZvciBpdC4KPj4KPj4gS2VlcCBpbiBtaW5kIHRoZSBzZW1hbnRpY3Mg
b2YgcmVsb2FkIGZvciBwdXJlIFB5dGhvbiBtb2R1bGVzLiAgVGhlCj4+IG1vZHVsZSBpcyBleGVj
dXRlZCBpbnRvIHRoZSBleGlzdGluZyBuYW1lc3BhY2UsIG92ZXJ3cml0aW5nIHRoZSBsb2FkZWQK
Pj4gbmFtZXNwYWNlIGJ1dCBsZWF2aW5nIG5vbi1jb2xsaWRpbmcgYXR0cmlidXRlcyBhbG9uZS4g
IFdoaWxlIHRoZQo+PiBzZW1hbnRpY3MgZm9yIHJlbG9hZGluZyBhbiBleHRlbnNpb24vYnVpbHRp
bi9mcm96ZW4gbW9kdWxlIGFyZQo+PiBjdXJyZW50bHkgYmFzaWMgKGkuZS4gYSBuby1vcCksIHRo
ZXJlIG1heSB3ZWxsIGJlIHJvb20gdG8gc3VwcG9ydAo+PiByZWxvYWQgYmVoYXZpb3IgdGhhdCBt
aXJyb3JzIHRoYXQgb2YgcHVyZSBQeXRob24gbW9kdWxlcyB3aXRob3V0Cj4+IG5lZWRpbmcgdG8g
cmVsb2FkIGFuIFNPIGZpbGUuICBJIHdvdWxkIGV4cGVjdCBlaXRoZXIgdGhlIGJlaGF2aW9yIG9m
Cj4+IGV4ZWMgdG8gZ2V0IHJlcGVhdGVkICh0cmlja3kgZHVlIHRvICJoaWRkZW4iIG1vZHVsZSBz
dGF0ZT8pIG9yIGZvcgo+PiB0aGVyZSB0byBiZSBhICJyZWxvYWQiIHNsb3QgdGhhdCB3b3VsZCBt
aXJyb3IgUHlfbW9kX2V4ZWMuCj4KPiBXZSBjb25zaWRlcmVkIHRoaXMsIGFuZCBkZWNpZGVkIGl0
IHdhcyBmYWlybHkgcG9pbnRsZXNzLCBzaW5jZSB5b3UKPiBjYW4ndCBtb2RpZnkgdGhlIGV4dGVu
c2lvbiBtb2R1bGUgY29kZS4gVGhlIG9uZSBjYXNlIEkgc2VlIHdoZXJlIGl0Cj4gcG90ZW50aWFs
bHkgbWFrZXMgc2Vuc2UgaXMgYSAidHJhbnNpdGl2ZSByZWxvYWQiLCB3aGVyZSB0aGUgZXh0ZW5z
aW9uCj4gbW9kdWxlIHJldHJpZXZlcyBhbmQgY2FjaGVzIGF0dHJpYnV0ZXMgZnJvbSBhbm90aGVy
IHB1cmUgUHl0aG9uIG1vZHVsZQo+IGF0IGltcG9ydCB0aW1lLCBhbmQgdGhhdCBleHRlbnNpb24g
bW9kdWxlIGhhcyBiZWVuIHJlbG9hZGVkLgoKVGhlIHJlbG9hZCBhcHByb2FjaCBzcGVjaWZpZWQg
aW4gdGhlIFBFUCBzZWVtcyBzYXRpc2ZhY3RvcnkgYXQgdGhpcyBwb2ludC4KCj4KPiBJdCBtYXkg
YWxzbyBtYWtlIGEgZGlmZmVyZW5jZSBpbiB0aGUgY29udGV4dCBvZiB1dGlsaXRpZXMgbGlrZQo+
IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0
LmltcG9ydF9mcmVzaF9tb2R1bGUsCj4gd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGUgaW1wb3J0IHN5
c3RlbSBzdGF0ZSB0byBjb250cm9sIGhvdyBjb25kaXRpb25hbAo+IGltcG9ydHMgYXJlIGhhbmRs
ZWQuCj4KPj4gQXQgdGhlIHNhbWUgdGltZSwgb25lIG1heSBhcmd1ZSB0aGF0IHJlbG9hZGluZyBt
b2R1bGVzIGlzIG5vdAo+PiBzb21ldGhpbmcgdG8gZW5jb3VyYWdlLiA6KQo+Cj4gVGhlcmUncyBh
IHJlYXNvbiBpbXBvcnRfZnJlc2hfbW9kdWxlIGhhcyBuZXZlciBtYWRlIGl0IG91dCBvZiB0ZXN0
LnN1cHBvcnQgOikKPgo+Pj4gTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeQo+Pj4gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IFRvIHN1cHBvcnQgbXVsdGlwbGUg
UHl0aG9uIG1vZHVsZXMgaW4gb25lIHNoYXJlZCBsaWJyYXJ5LCB0aGUgbGlicmFyeSBjYW4KPj4+
IGV4cG9ydCBhZGRpdGlvbmFsIFB5SW5pdCogc3ltYm9scyBiZXNpZGVzIHRoZSBvbmUgdGhhdCBj
b3JyZXNwb25kcwo+Pj4gdG8gdGhlIGxpYnJhcnkncyBmaWxlbmFtZS4KPj4+Cj4+PiBOb3RlIHRo
YXQgdGhpcyBtZWNoYW5pc20gY2FuIGN1cnJlbnRseSBvbmx5IGJlIHVzZWQgdG8gKmxvYWQqIGV4
dHJhIG1vZHVsZXMsCj4+PiBidXQgbm90IHRvICpmaW5kKiB0aGVtLgo+Pgo+PiBXaGF0IGRvIHlv
dSBtZWFuIGJ5ICJjdXJyZW50bHkiPwo+Cj4gSXQncyBhIGxpbWl0YXRpb24gb2YgdGhlIHdheSB0
aGUgZXhpc3RpbmcgZmluZGVycyB3b3JrLCByYXRoZXIgdGhhbiBhbgo+IGluaGVyZW50IGxpbWl0
YXRpb24gb2YgdGhlIGltcG9ydCBzeXN0ZW0gYXMgYSB3aG9sZS4KCkFoLiAgSXQgc291bmRlZCBs
aWtlIHRoZSBQRVAgd2FzIGxlYWRpbmcgdG8gc29tZSBmdXR1cmUgc29sdXRpb24gdG8KcmVzb2x2
ZSB0aGF0LgoKPgo+PiBJdCBtYXkgYWxzbyBiZSB3b3J0aCB0eWluZyB0aGUgYWJvdmUgc3RhdGVt
ZW50IHdpdGggdGhlIGZvbGxvd2luZwo+PiB0ZXh0LCBzaW5jZSB0aGUgZm9sbG93aW5nIGFwcGVh
cnMgdG8gYmUgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRvCj4+IGFkZHJlc3MgdGhlICJmaW5kZXIi
IGNhdmVhdC4KPgo+IEFncmVlZCB0aGF0IHRoaXMgY291bGQgYmUgY2xlYXJlci4KPgo+Pj4gVGVz
dGluZyBhbmQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbnMKPj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCj4+Pgo+Pj4gRm9yIHRlc3RpbmcsIGEgbmV3IGJ1aWx0LWluIG1vZHVs
ZSBgYF90ZXN0bXVsdGlwaGFzZWBgIHdpbGwgYmUgY3JlYXRlZC4KPj4+IFRoZSBsaWJyYXJ5IHdp
bGwgZXhwb3J0IHNldmVyYWwgYWRkaXRpb25hbCBtb2R1bGVzIHVzaW5nIHRoZSBtZWNoYW5pc20K
Pj4+IGRlc2NyaWJlZCBpbiAiTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeSIuCj4+Pgo+
Pj4gVGhlIGBgX3Rlc3RjYXBpYGAgbW9kdWxlIHdpbGwgYmUgdW5jaGFuZ2VkLCBhbmQgd2lsbCB1
c2Ugc2luZ2xlLXBoYXNlCj4+PiBpbml0aWFsaXphdGlvbiBpbmRlZmluaXRlbHkgKG9yIHVudGls
IGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpLgo+Pj4KPj4+IFRoZSBgYGFycmF5YGAgYW5kIGBg
eHgqYGAgbW9kdWxlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1c2UgbXVsdGktcGhhc2UKPj4+IGlu
aXRpYWxpemF0aW9uIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCj4+Cj4+
IFdoYXQgZG8geW91IG1lYW4gYnkgImluaXRpYWwgaW1wbGVtZW50YXRpb24iPyAgV2lsbCBpdCBi
ZSBkb25lCj4+IGRpZmZlcmVudGx5IGluIGEgbGF0ZXIgaW1wbGVtZW50YXRpb24/Cj4KPiBUaGVz
ZSBtb2R1bGVzIHdpbGwgYmUgY29udmVydGVkIGluIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRp
b24sIG90aGVyCj4gbW9kdWxlcyB3b24ndCBiZS4KClRoYXQncyB3aGF0IEkgdGhvdWdodC4gIFRo
ZSB1c2Ugb2YgdGhlIHdvcmQgImluaXRpYWwiIHRocmV3IG1lIG9mZi4KCj4KPj4+IFN0cmluZyBj
b25zdGFudHMgYW5kIHR5cGVzIGNhbiBiZSBoYW5kbGVkIHNpbWlsYXJseS4KPj4+IChOb3RlIHRo
YXQgbm9uLWRlZmF1bHQgYmFzZXMgZm9yIHR5cGVzIGNhbm5vdCBiZSBwb3J0YWJseSBzcGVjaWZp
ZWQKPj4+IHN0YXRpY2FsbHk7IHRoaXMgY2FzZSB3b3VsZCBuZWVkIGEgUHlfbW9kX2V4ZWMgZnVu
Y3Rpb24gdGhhdCBydW5zCj4+PiBiZWZvcmUgdGhlIHNsb3RzIGFyZSBhZGRlZC4gVGhlIGZyZWUg
ZXJyb3ItY2hlY2tpbmcgd291bGQgc3RpbGwgYmUKPj4+IGJlbmVmaWNpYWwsIHRob3VnaC4pCj4+
Cj4+IFRoaXMgaW1wbGllcyB0byBtZSB0aGF0IG5vdyBpcyB0aGUgdGltZSB0byBlbnN1cmUgdGhh
dCB0aGlzIFBFUAo+PiBhcHByb3ByaWF0ZWx5IGFjY29tbW9kYXRlcyB0aGF0IG5lZWQuICBJdCB3
b3VsZCBiZSB1bmZvcnR1bmF0ZSBpZiB3ZQo+PiBoYWQgdG8gbGF0ZXIgaGFjayBpbiBzb21lIGV4
dHJhIEFQSSB0byBhY2NvbW1vZGF0ZSBhIHVzZSBjYXNlIHdlCj4+IGFscmVhZHkga25vdyBhYm91
dC4gIEJldHRlciBpZiB3ZSBtYWRlIHN1cmUgdGhlIGN1cnJlbnRseSBwcm9wb3NlZAo+PiBjaGFu
Z2VzIGNvdWxkIGFjY29tbW9kYXRlIHRoZSBuZWVkLCBldmVuIGlmIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiB0aGF0Cj4+IHBhcnQgd2VyZSBub3QgcGFydCBvZiB0aGlzIFBFUC4KPgo+IFRoaXMgd291
bGQgYmUgYSBuZXcga2luZCBvZiBleGVjdXRpb24gc2xvdCwgc28gdGhlIFBFUCBhbHJlYWR5Cj4g
YWNjb21tb2RhdGVzIHRoZXNlIHBvc3NpYmxlIGZ1dHVyZSBleHRlbnNpb25zLgoKU291bmRzIGdv
b2QuICBUaGUgZXhwbGFuYXRpb24gbWFkZSBpdCBzb3VuZCBsaWtlIGEgbWVjaGFuaXNtIHdvdWxk
IGJlCnJlcXVpcmVkIHRoYXQgY291bGQgbm90IGJlIGhhbmRsZWQgdmlhIGEgc2xvdC4KCj4KPj4+
IEFub3RoZXIgcG9zc2liaWxpdHkgaXMgcHJvdmlkaW5nIGEgIm1haW4iIGZ1bmN0aW9uIHRoYXQg
d291bGQgYmUgcnVuCj4+PiB3aGVuIHRoZSBtb2R1bGUgaXMgZ2l2ZW4gdG8gUHl0aG9uJ3MgLW0g
c3dpdGNoLgo+Pj4gRm9yIHRoaXMgdG8gd29yaywgdGhlIHJ1bnB5IG1vZHVsZSB3aWxsIG5lZWQg
dG8gYmUgbW9kaWZpZWQgdG8gdGFrZQo+Pj4gYWR2YW50YWdlIG9mIE1vZHVsZVNwZWMtYmFzZWQg
bG9hZGluZyBpbnRyb2R1Y2VkIGluIFBFUCA0NTEuCj4+Cj4+IEknbGwgcG9pbnQgb3V0IHRoYXQg
dGhlIHB1cmUtUHl0aG9uIGVxdWl2YWxlbnQgaGFzIGJlZW4gcHJvcG9zZWQgb24gYQo+PiBudW1i
ZXIgb2Ygb2NjYXNpb25zIGFuZCBiZWVuIHJlamVjdGVkIGV2ZXJ5IHRpbWUuICBIb3dldmVyLCBp
biB0aGUKPj4gY2FzZSBvZiBleHRlbnNpb24gbW9kdWxlcyBpdCBpcyBtb3JlIGp1c3RpZmlhYmxl
LiAgSWYgZXh0ZW5zaW9uCj4+IG1vZHVsZXMgZ2FpbiBzdWNoIGEgbWVjaGFuaXNtIHRoZW4gaXQg
bWF5IGJlIGEganVzdGlmaWNhdGlvbiBmb3IgZG9pbmcKPj4gc29tZXRoaW5nIHNpbWlsYXIgaW4g
UHl0aG9uLgo+Pgo+Pj4gQWxzbywgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbWVjaGFu
aXNtIGZvciBzZXR0aW5nIHVwIGEgbW9kdWxlCj4+PiBhY2NvcmRpbmcgdG8gc2xvdHMgaXQgd2Fz
bid0IG9yaWdpbmFsbHkgZGVmaW5lZCB3aXRoLgo+Pgo+PiBXaGF0IGRvZXMgdGhpcyBtZWFuPwo+
Cj4gV2hlbiB5b3UgdXNlIHRoZSAtbSBzd2l0Y2gsIHlvdSBhbHdheXMgcnVuIGluIHRoZSBidWls
dGluIF9fbWFpbl9fCj4gbW9kdWxlIG5hbWVzcGFjZSwgYW5kIHJ1bnB5IGZpZGRsZXMgd2l0aCBf
X21haW5fXy5fX3NwZWNfXyB0byBtYXRjaAo+IHRoZSBkZXRhaWxzIG9mIHRoZSBtb2R1bGUgcGFz
c2VkIHRvIHRoZSBzd2l0Y2guIFRoYXQncyBub3QgY3VycmVudGx5IGEKPiB0cmljayB3ZSBjYW4g
bWFuYWdlIHdoZW4gdGhlICJ0aGluZyB0byBydW4iIGlzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCgpJ
IHNlZSBub3cuCgotZXJpYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpJbXBvcnQtU0lHIG1haWxpbmcgbGlzdApJbXBvcnQtU0lHQHB5dGhvbi5vcmcKaHR0
cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pbXBvcnQtc2lnCg==