[omniORB] Help with lock up.

John D. Heintz jheintz@isogen.com
Wed, 2 May 2001 17:07:49 -0500


--------------Boundary-00=_2TAQHENEZWH1WX6PXT2P
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hi all,

I am getting a lock up problem on Linux with omniORB 3.0.3 and omniORBpy 1.3 
and Python 2.1 all compiled with debugging on.  

I am a far cry from a Linux c hacker, but it seems to me that it might be a 
deadlock on the Python global interpreter lock for most of the threads.   
This is further reinforced by the fact that when I run the server in 
interactive python mode my prompt hangs up on me as well.

I've attached a gdb output script that does info threads and bt for each of 
them, plus a python file that describes how we are using omniORBpy on the 
server side.

Just a quick description of our server architecture:
One "Server" that provides getSession() and returns a new "Session".
Each "Session" has a POA, ServantLocator, ZODB database connection, and local 
cache of persistent objects.

The test that caused this locked state was basically just a few threads 
getting "Sessions" and doing some lookups on them before logging out of the 
"Session".

Any help would be appreciated, and I can recreate the lock up pretty easily 
so if anyone has magic gdb commands for me to type I'll be happy to make it 
happen.

Thanks for any help,
John


--------------Boundary-00=_2TAQHENEZWH1WX6PXT2P
Content-Type: text/plain;
  charset="iso-8859-1";
  name="trace.out"
Content-Transfer-Encoding: base64
Content-Description: GDB info threads and bt
Content-Disposition: attachment; filename="trace.out"

KGdkYikgaW5mbyB0aHJlYWRzCiAgMTIgVGhyZWFkIDIxNDY4ICAweDQwMDhhOGZlIGluIHNpZ3N1
c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgogIDExIFRocmVhZCAyMTM0OCAgMHg0MDA4YThm
ZSBpbiBzaWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJjLnNvLjYKICAxMCBUaHJlYWQgMjEzNTAg
IDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CiAgOSBUaHJl
YWQgMjEzNDUgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42
CiAgOCBUaHJlYWQgMjEzNDEgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIv
bGliYy5zby42CiAgNyBUaHJlYWQgMjEyOTMgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBm
cm9tIC9saWIvbGliYy5zby42CiAgNiBUaHJlYWQgMjEyODQgIDB4NDAxMmI0MjIgaW4gYWNjZXB0
ICgpIGZyb20gL2xpYi9saWJjLnNvLjYKICA1IFRocmVhZCAyMTI4MyAgMHg0MDA4YThmZSBpbiBz
aWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJjLnNvLjYKICA0IFRocmVhZCAyMTI4MiAgMHg0MDEw
MWIxMSBpbiBuYW5vc2xlZXAgKCkgZnJvbSAvbGliL2xpYmMuc28uNgogIDMgVGhyZWFkIDIxMjgx
ICAweDQwMDhhOGZlIGluIHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgoqIDIgVGhy
ZWFkIDIxMjc5IChpbml0aWFsIHRocmVhZCkgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKQog
ICBmcm9tIC9saWIvbGliYy5zby42CiAgMSBUaHJlYWQgMjEyODAgKG1hbmFnZXIgdGhyZWFkKSAg
MHg0MDEyM2Q5MCBpbiBwb2xsICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKGdkYikgdGhyZWFkIDEK
W1N3aXRjaGluZyB0byB0aHJlYWQgMSAoVGhyZWFkIDIxMjgwIChtYW5hZ2VyIHRocmVhZCkpXQoj
MCAgMHg0MDEyM2Q5MCBpbiBwb2xsICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKGdkYikgYnQKIzAg
IDB4NDAxMjNkOTAgaW4gcG9sbCAoKSBmcm9tIC9saWIvbGliYy5zby42CiMxICAweDQwMDI1ZDg2
IGluIF9fcHRocmVhZF9tYW5hZ2VyICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKKGdkYikg
dGhyZWFkIDIKW1N3aXRjaGluZyB0byB0aHJlYWQgMiAoVGhyZWFkIDIxMjc5IChpbml0aWFsIHRo
cmVhZCkpXQojMCAgMHg0MDA4YThmZSBpbiBzaWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJjLnNv
LjYKKGdkYikgYnQKIzAgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGli
Yy5zby42CiMxICAweDQwMDI4N2E5IGluIF9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25h
bCAoKQogICBmcm9tIC9saWIvbGlicHRocmVhZC5zby4wCiMyICAweDQwMDI1MTgxIGluIHB0aHJl
YWRfY29uZF93YWl0ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzMgIDB4ODA2ZWU0NSBp
biBQeVRocmVhZF9hY3F1aXJlX2xvY2sgKGxvY2s9MHg4MTNkMmI4LCB3YWl0ZmxhZz0xKQogICAg
YXQgUHl0aG9uL3RocmVhZF9wdGhyZWFkLmg6MzEzCiM0ICAweDgwNTRjMDEgaW4gUHlFdmFsX1Jl
c3RvcmVUaHJlYWQgKHRzdGF0ZT0weDgwYzdlZTApIGF0IFB5dGhvbi9jZXZhbC5jOjIwMQojNSAg
MHg4MDUzNWFlIGluIFB5T1NfUmVhZGxpbmUgKHByb21wdD0weDgzNmRkZjQgIj4+PiAiKQogICAg
YXQgUGFyc2VyL215cmVhZGxpbmUuYzoxMzIKIzYgIDB4ODA1MjQ2YSBpbiB0b2tfbmV4dGMgKHRv
az0weDgxY2VmNzgpIGF0IFBhcnNlci90b2tlbml6ZXIuYzoxOTIKIzcgIDB4ODA1MmIzYyBpbiBQ
eVRva2VuaXplcl9HZXQgKHRvaz0weDgxY2VmNzgsIHBfc3RhcnQ9MHhiZmZmZjRiNCwgCiAgICBw
X2VuZD0weGJmZmZmNGI4KSBhdCBQYXJzZXIvdG9rZW5pemVyLmM6NTE2CiM4ICAweDgwNTIxNTQg
aW4gcGFyc2V0b2sgKHRvaz0weDgxY2VmNzgsIGc9MHg4MGM1MTkwLCBzdGFydD0yNTYsIAogICAg
ZXJyX3JldD0weGJmZmZmNTQwKSBhdCBQYXJzZXIvcGFyc2V0b2suYzoxMDAKIzkgIDB4ODA1MjAx
OCBpbiBQeVBhcnNlcl9QYXJzZUZpbGUgKGZwPTB4NDAxNjkzNjAsIAogICAgZmlsZW5hbWU9MHg4
MDllY2FkICI8c3RkaW4+IiwgZz0weDgwYzUxOTAsIHN0YXJ0PTI1NiwgCiAgICBwczE9MHg4MzZk
ZGY0ICI+Pj4gIiwgcHMyPTB4ODM2ZWRjYyAiLi4uICIsIGVycl9yZXQ9MHhiZmZmZjU0MCkKICAg
IGF0IFBhcnNlci9wYXJzZXRvay5jOjc1CiMxMCAweDgwNmI2ZWQgaW4gUHlSdW5fSW50ZXJhY3Rp
dmVPbmVGbGFncyAoZnA9MHg0MDE2OTM2MCwgCiAgICBmaWxlbmFtZT0weDgwOWVjYWQgIjxzdGRp
bj4iLCBmbGFncz0weGJmZmZmNjI4KSBhdCBQeXRob24vcHl0aG9ucnVuLmM6NTUyCiMxMSAweDgw
NmI1ZjUgaW4gUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MgKGZwPTB4NDAxNjkzNjAsIAogICAg
ZmlsZW5hbWU9MHg4MDllY2FkICI8c3RkaW4+IiwgZmxhZ3M9MHhiZmZmZjYyOCkgYXQgUHl0aG9u
L3B5dGhvbnJ1bi5jOjUxMAojMTIgMHg4MDZiNGViIGluIFB5UnVuX0FueUZpbGVFeEZsYWdzIChm
cD0weDQwMTY5MzYwLCAKLS0tVHlwZSA8cmV0dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJu
PiB0byBxdWl0LS0tCiAgICBmaWxlbmFtZT0weDgwOWVjYWQgIjxzdGRpbj4iLCBjbG9zZWl0PTAs
IGZsYWdzPTB4YmZmZmY2MjgpCiAgICBhdCBQeXRob24vcHl0aG9ucnVuLmM6NDczCiMxMyAweDgw
NmI0OWEgaW4gUHlSdW5fQW55RmlsZUZsYWdzIChmcD0weDQwMTY5MzYwLCAKICAgIGZpbGVuYW1l
PTB4ODA5ZWNhZCAiPHN0ZGluPiIsIGZsYWdzPTB4YmZmZmY2MjgpIGF0IFB5dGhvbi9weXRob25y
dW4uYzo0NTcKIzE0IDB4ODA1MWU5OCBpbiBQeV9NYWluIChhcmdjPTcsIGFyZ3Y9MHhiZmZmZjZi
YykgYXQgTW9kdWxlcy9tYWluLmM6MzI5CiMxNSAweDgwNTE5MTQgaW4gbWFpbiAoYXJnYz03LCBh
cmd2PTB4YmZmZmY2YmMpIGF0IE1vZHVsZXMvcHl0aG9uLmM6MTAKKGdkYikgdGhyZWFkIDMKW1N3
aXRjaGluZyB0byB0aHJlYWQgMyAoVGhyZWFkIDIxMjgxKV0KIzAgIDB4NDAwOGE4ZmUgaW4gc2ln
c3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIGJ0CiMwICAweDQwMDhhOGZlIGlu
IHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAgMHg0MDAyODdhOSBpbiBfX3B0
aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwgKCkKICAgZnJvbSAvbGliL2xpYnB0aHJlYWQu
c28uMAojMiAgMHg0MDAyNTE4MSBpbiBwdGhyZWFkX2NvbmRfd2FpdCAoKSBmcm9tIC9saWIvbGli
cHRocmVhZC5zby4wCiMzICAweDQwMzRlOWYzIGluIG9tbmlfY29uZGl0aW9uOjp3YWl0ICh0aGlz
PTB4ODM2MDAzNCkgYXQgLi4vcG9zaXguY2M6MTQ3CiM0ICAweDQwMmZjNmZlIGluIG9tbmlPUkJf
UmlwcGVyOjpydW5fdW5kZXRhY2hlZCAodGhpcz0weDgzNWZmZTApCiAgICBhdCAuLi9zdHJhbmQu
Y2M6NzQ2CiM1ICAweDQwMzRmNDMxIGluIG9tbmlfdGhyZWFkX3dyYXBwZXIgKHB0cj0weDgzNWZm
ZTApIGF0IC4uL3Bvc2l4LmNjOjQyNAojNiAgMHg0MDAyNjA2NSBpbiBwdGhyZWFkX3N0YXJ0X3Ro
cmVhZCAoKSBmcm9tIC9saWIvbGlicHRocmVhZC5zby4wCihnZGIpIHRocmVhZCA0CltTd2l0Y2hp
bmcgdG8gdGhyZWFkIDQgKFRocmVhZCAyMTI4MildCiMwICAweDQwMTAxYjExIGluIG5hbm9zbGVl
cCAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIGJ0CiMwICAweDQwMTAxYjExIGluIG5hbm9z
bGVlcCAoKSBmcm9tIC9saWIvbGliYy5zby42CiMxICAweDQwMDI4YzBhIGluIF9fcHRocmVhZF90
aW1lZHN1c3BlbmRfbmV3ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzIgIDB4NDAwMjUz
ZDUgaW4gcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZSAoKSBmcm9tIC9saWIvbGlicHRo
cmVhZC5zby4wCiMzICAweDQwMDI1NTVjIGluIHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKCkgZnJv
bSAvbGliL2xpYnB0aHJlYWQuc28uMAojNCAgMHg0MDM0ZWFjZCBpbiBvbW5pX2NvbmRpdGlvbjo6
dGltZWR3YWl0ICh0aGlzPTB4ODM2MDhiNCwgc2Vjcz05ODg4MzgzNjAsIAogICAgbmFub3NlY3M9
OTE2NzE5MDAwKSBhdCAuLi9wb3NpeC5jYzoxNTYKIzUgIDB4NDAyY2NmMDQgaW4gb21uaU9SQl9T
Y2F2ZW5nZXI6OnJ1bl91bmRldGFjaGVkICh0aGlzPTB4ODM2MDg2MCkKICAgIGF0IC4uL3NjYXZl
bmdlci5jYzozMzYKIzYgIDB4NDAzNGY0MzEgaW4gb21uaV90aHJlYWRfd3JhcHBlciAocHRyPTB4
ODM2MDg2MCkgYXQgLi4vcG9zaXguY2M6NDI0CiM3ICAweDQwMDI2MDY1IGluIHB0aHJlYWRfc3Rh
cnRfdGhyZWFkICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKKGdkYikgdGhyZWFkIDUKW1N3
aXRjaGluZyB0byB0aHJlYWQgNSAoVGhyZWFkIDIxMjgzKV0KIzAgIDB4NDAwOGE4ZmUgaW4gc2ln
c3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIGJ0CiMwICAweDQwMDhhOGZlIGlu
IHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAgMHg0MDAyODdhOSBpbiBfX3B0
aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwgKCkKICAgZnJvbSAvbGliL2xpYnB0aHJlYWQu
c28uMAojMiAgMHg0MDAyNTE4MSBpbiBwdGhyZWFkX2NvbmRfd2FpdCAoKSBmcm9tIC9saWIvbGli
cHRocmVhZC5zby4wCiMzICAweDgwNmVlNDUgaW4gUHlUaHJlYWRfYWNxdWlyZV9sb2NrIChsb2Nr
PTB4ODEzZDJiOCwgd2FpdGZsYWc9MSkKICAgIGF0IFB5dGhvbi90aHJlYWRfcHRocmVhZC5oOjMx
MwojNCAgMHg4MDU0YTkyIGluIFB5RXZhbF9BY3F1aXJlTG9jayAoKSBhdCBQeXRob24vY2V2YWwu
YzoxMjYKIzUgIDB4NDAyMTRhYWIgaW4gb21uaXB5VGhyZWFkU2NhdmVuZ2VyOjpydW5fdW5kZXRh
Y2hlZCAodGhpcz0weDgzNjEyZDgpCiAgICBhdCBjb21tb24vcHlUaHJlYWRDYWNoZS5jYzoxOTMK
IzYgIDB4NDAzNGY0MzEgaW4gb21uaV90aHJlYWRfd3JhcHBlciAocHRyPTB4ODM2MTJkOCkgYXQg
Li4vcG9zaXguY2M6NDI0CiM3ICAweDQwMDI2MDY1IGluIHB0aHJlYWRfc3RhcnRfdGhyZWFkICgp
IGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKKGdkYikgdGhyZWFkIDYKW1N3aXRjaGluZyB0byB0
aHJlYWQgNiAoVGhyZWFkIDIxMjg0KV0KIzAgIDB4NDAxMmI0MjIgaW4gYWNjZXB0ICgpIGZyb20g
L2xpYi9saWJjLnNvLjYKKGdkYikgYnQKIzAgIDB4NDAxMmI0MjIgaW4gYWNjZXB0ICgpIGZyb20g
L2xpYi9saWJjLnNvLjYKIzEgIDB4NDAwMmIyY2IgaW4gYWNjZXB0ICgpIGZyb20gL2xpYi9saWJw
dGhyZWFkLnNvLjAKIzIgIDB4NDAyZGMwZTQgaW4gdGNwU29ja2V0UmVuZGV6dm91c2VyOjpydW5f
dW5kZXRhY2hlZCAodGhpcz0weDgzNmJkMzgsIAogICAgYXJnPTB4ODFkMzMzMCkgYXQgLi4vdGNw
U29ja2V0TVRmYWN0b3J5LmNjOjE0MjEKIzMgIDB4NDAzNGY0MzEgaW4gb21uaV90aHJlYWRfd3Jh
cHBlciAocHRyPTB4ODM2YmQzOCkgYXQgLi4vcG9zaXguY2M6NDI0CiM0ICAweDQwMDI2MDY1IGlu
IHB0aHJlYWRfc3RhcnRfdGhyZWFkICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKKGdkYikg
dGhyZWFkIDcKW1N3aXRjaGluZyB0byB0aHJlYWQgNyAoVGhyZWFkIDIxMjkzKV0KIzAgIDB4NDAw
OGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIGJ0CiMwICAw
eDQwMDhhOGZlIGluIHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAgMHg0MDAy
ODdhOSBpbiBfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwgKCkKICAgZnJvbSAvbGli
L2xpYnB0aHJlYWQuc28uMAojMiAgMHg0MDAyYTgwYSBpbiBfX3B0aHJlYWRfYWx0X2xvY2sgKCkg
ZnJvbSAvbGliL2xpYnB0aHJlYWQuc28uMAojMyAgMHg0MDAyNmYxMiBpbiBwdGhyZWFkX211dGV4
X2xvY2sgKCkgZnJvbSAvbGliL2xpYnB0aHJlYWQuc28uMAojNCAgMHg0MDM0ZTZjZCBpbiBvbW5p
X211dGV4Ojpsb2NrICh0aGlzPTB4ODFkNWRiOCkgYXQgLi4vcG9zaXguY2M6MTEyCiM1ICAweDQw
MmFjZDYyIGluIG9tbmk6OnJlbGVhc2VPYmpSZWYgKG9ianJlZj0weDg4NjMzNTApCiAgICBhdCAu
Li9vbW5pSW50ZXJuYWwuY2M6MzY4CiM2ICAweDQwMjE2NjRhIGluIENPUkJBOjpyZWxlYXNlIChv
PTB4ODg2MzM0NCkKICAgIGF0IC4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvQ09SQkEuaDoy
NTU5CiM3ICAweDQwMjE2ZmE2IGluIENPUkJBOjpPYmplY3RfdmFyOjp+T2JqZWN0X3ZhciAodGhp
cz0weGJlZmZlYjcwLCBfX2luX2Nocmc9MikKICAgIGF0IC4uLy4uLy4uLy4uL2luY2x1ZGUvb21u
aU9SQjMvQ09SQkFfdmFydHlwZXMuaDo2NwojOCAgMHg0MDFmNWMwNCBpbiBvbW5pUHk6OlB5X29t
bmlTZXJ2YW50OjpweV90aGlzICh0aGlzPTB4ODg1ZTU4MCkKICAgIGF0IG9tbmkzMC9weVNlcnZh
bnQuY2M6Mzk4CiM5ICAweDQwMWYxM2M0IGluIHB5UE9BX3NlcnZhbnRUaGlzIChzZWxmPTB4MCwg
YXJncz0weDgxYTJkYmMpCiAgICBhdCBvbW5pMzAvcHlQT0FGdW5jLmNjOjEwNDEKIzEwIDB4ODA1
OGNjNiBpbiBjYWxsX2NmdW5jdGlvbiAoZnVuYz0weDgxY2UxOTgsIGFyZz0weDgxYTJkYmMsIGt3
PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI4MzgKIzExIDB4ODA1OGJiOCBpbiBjYWxsX29i
amVjdCAoZnVuYz0weDgxY2UxOTgsIGFyZz0weDgxYTJkYmMsIGt3PTB4MCkKICAgIGF0IFB5dGhv
bi9jZXZhbC5jOjI4MDEKIzEyIDB4ODA1OTMyYiBpbiBkb19jYWxsIChmdW5jPTB4ODFjZTE5OCwg
cHBfc3RhY2s9MHhiZWZmZWQxYywgbmE9MSwgbms9MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjMx
MTYKIzEzIDB4ODA1NzdhMiBpbiBldmFsX2NvZGUyIChjbz0weDgyMDFlNTgsIGdsb2JhbHM9MHg4
MjJhYTVjLCBsb2NhbHM9MHgwLCAKLS0tVHlwZSA8cmV0dXJuPiB0byBjb250aW51ZSwgb3IgcSA8
cmV0dXJuPiB0byBxdWl0LS0tCiAgICBhcmdzPTB4ODUxYTFjOCwgYXJnY291bnQ9MSwga3dzPTB4
ODUxYTFjYywga3djb3VudD0wLCBkZWZzPTB4MCwgCiAgICBkZWZjb3VudD0wLCBjbG9zdXJlPTB4
MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk0OAojMTQgMHg4MDU5MDg0IGluIGZhc3RfZnVuY3Rpb24g
KGZ1bmM9MHg4MjI4NTA0LCBwcF9zdGFjaz0weGJlZmZlZTJjLCBuPTEsIAogICAgbmE9MSwgbms9
MCkgYXQgUHl0aG9uL2NldmFsLmM6MzAxNQojMTUgMHg4MDU3ODExIGluIGV2YWxfY29kZTIgKGNv
PTB4ODFkZjVjOCwgZ2xvYmFscz0weDgxZGVlMTQsIGxvY2Fscz0weDAsIAogICAgYXJncz0weDg1
YmVlYmMsIGFyZ2NvdW50PTMsIGt3cz0weDg1YmVlYzgsIGt3Y291bnQ9MCwgZGVmcz0weDAsIAog
ICAgZGVmY291bnQ9MCwgY2xvc3VyZT0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjE5NjYKIzE2IDB4
ODA1OTA4NCBpbiBmYXN0X2Z1bmN0aW9uIChmdW5jPTB4ODFlNGYwNCwgcHBfc3RhY2s9MHhiZWZm
ZWYzYywgbj0zLCAKICAgIG5hPTMsIG5rPTApIGF0IFB5dGhvbi9jZXZhbC5jOjMwMTUKIzE3IDB4
ODA1NzgxMSBpbiBldmFsX2NvZGUyIChjbz0weDgxZGUxNjAsIGdsb2JhbHM9MHg4MWRlZTE0LCBs
b2NhbHM9MHgwLCAKICAgIGFyZ3M9MHg4NTFhMDA4LCBhcmdjb3VudD0zLCBrd3M9MHg4NTFhMDE0
LCBrd2NvdW50PTAsIGRlZnM9MHgwLCAKICAgIGRlZmNvdW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQ
eXRob24vY2V2YWwuYzoxOTY2CiMxOCAweDgwNTkwODQgaW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0w
eDgxZTRkY2MsIHBwX3N0YWNrPTB4YmVmZmYwNGMsIG49MywgCiAgICBuYT0zLCBuaz0wKSBhdCBQ
eXRob24vY2V2YWwuYzozMDE1CiMxOSAweDgwNTc4MTEgaW4gZXZhbF9jb2RlMiAoY289MHg4MWRk
Mzk4LCBnbG9iYWxzPTB4ODFkZWUxNCwgbG9jYWxzPTB4MCwgCiAgICBhcmdzPTB4ODFkMzI3MCwg
YXJnY291bnQ9NCwga3dzPTB4MCwga3djb3VudD0wLCBkZWZzPTB4MCwgZGVmY291bnQ9MCwgCiAg
ICBjbG9zdXJlPTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk2NgojMjAgMHg4MDU4Zjg5IGluIGNh
bGxfZXZhbF9jb2RlMiAoZnVuYz0weDgxZTRiZWMsIGFyZz0weDgxZDMyNjQsIGt3PTB4MCkKICAg
IGF0IFB5dGhvbi9jZXZhbC5jOjI5NTkKIzIxIDB4ODA1OGJhNCBpbiBjYWxsX29iamVjdCAoZnVu
Yz0weDgxZTRiZWMsIGFyZz0weDgxZDMyNjQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5j
OjI3OTkKIzIyIDB4ODA1OGU0YiBpbiBjYWxsX21ldGhvZCAoZnVuYz0weDgxZTRiZWMsIGFyZz0w
eDgxZDMyNjQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI5MTYKLS0tVHlwZSA8cmV0
dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0tCiMyMyAweDgwNThiOGQg
aW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4Mzg3MTE0LCBhcmc9MHg4MWQzMjY0LCBrdz0weDApCiAg
ICBhdCBQeXRob24vY2V2YWwuYzoyNzk3CiMyNCAweDgwNTkzMmIgaW4gZG9fY2FsbCAoZnVuYz0w
eDgzODcxMTQsIHBwX3N0YWNrPTB4YmVmZmYyMWMsIG5hPTQsIG5rPTApCiAgICBhdCBQeXRob24v
Y2V2YWwuYzozMTE2CiMyNSAweDgwNTc4MmYgaW4gZXZhbF9jb2RlMiAoY289MHg4MWE0MmI4LCBn
bG9iYWxzPTB4ODFhNDE4NCwgbG9jYWxzPTB4MCwgCiAgICBhcmdzPTB4ODRjYjdhMCwgYXJnY291
bnQ9Niwga3dzPTB4MCwga3djb3VudD0wLCBkZWZzPTB4MCwgZGVmY291bnQ9MCwgCiAgICBjbG9z
dXJlPTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk2OQojMjYgMHg4MDU4Zjg5IGluIGNhbGxfZXZh
bF9jb2RlMiAoZnVuYz0weDgyZmE1NmMsIGFyZz0weDg0Y2I3OTQsIGt3PTB4MCkKICAgIGF0IFB5
dGhvbi9jZXZhbC5jOjI5NTkKIzI3IDB4ODA1OGJhNCBpbiBjYWxsX29iamVjdCAoZnVuYz0weDgy
ZmE1NmMsIGFyZz0weDg0Y2I3OTQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI3OTkK
IzI4IDB4ODA1OGU0YiBpbiBjYWxsX21ldGhvZCAoZnVuYz0weDgyZmE1NmMsIGFyZz0weDgyZjcw
NmMsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI5MTYKIzI5IDB4ODA1OGI4ZCBpbiBj
YWxsX29iamVjdCAoZnVuYz0weDg0YzgzMGMsIGFyZz0weDgyZjcwNmMsIGt3PTB4MCkKICAgIGF0
IFB5dGhvbi9jZXZhbC5jOjI3OTcKIzMwIDB4ODA1OGE5ZCBpbiBQeUV2YWxfQ2FsbE9iamVjdFdp
dGhLZXl3b3JkcyAoZnVuYz0weDg0YzgzMGMsIGFyZz0weDgyZjcwNmMsIAogICAga3c9MHgwKSBh
dCBQeXRob24vY2V2YWwuYzoyNzM0CiMzMSAweDgwN2M5MDUgaW4gUHlJbnN0YW5jZV9OZXcgKGts
YXNzPTB4ODI0ZjY1YywgYXJnPTB4ODJmNzA2Yywga3c9MHgwKQogICAgYXQgT2JqZWN0cy9jbGFz
c29iamVjdC5jOjQ4OQojMzIgMHg4MDU4YmQyIGluIGNhbGxfb2JqZWN0IChmdW5jPTB4ODI0ZjY1
YywgYXJnPTB4ODJmNzA2Yywga3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6MjgwMwojMzMg
MHg4MDU4YTlkIGluIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIChmdW5jPTB4ODI0ZjY1
YywgYXJnPTB4ODJmNzA2YywgCiAgICBrdz0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjI3MzQKLS0t
VHlwZSA8cmV0dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0tCiMzNCAw
eDgwOTlkODIgaW4gYnVpbHRpbl9hcHBseSAoc2VsZj0weDAsIGFyZ3M9MHg4NTEyMGQ0KQogICAg
YXQgUHl0aG9uL2JsdGlubW9kdWxlLmM6OTAKIzM1IDB4ODA1OGNjNiBpbiBjYWxsX2NmdW5jdGlv
biAoZnVuYz0weDgwYzgyYTAsIGFyZz0weDg1MTIwZDQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9j
ZXZhbC5jOjI4MzgKIzM2IDB4ODA1OGJiOCBpbiBjYWxsX29iamVjdCAoZnVuYz0weDgwYzgyYTAs
IGFyZz0weDg1MTIwZDQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI4MDEKIzM3IDB4
ODA1OTMyYiBpbiBkb19jYWxsIChmdW5jPTB4ODBjODJhMCwgcHBfc3RhY2s9MHhiZWZmZjU0Yywg
bmE9Miwgbms9MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjMxMTYKIzM4IDB4ODA1NzdhMiBpbiBl
dmFsX2NvZGUyIChjbz0weDgxZGE2NzAsIGdsb2JhbHM9MHg4MWRlZTE0LCBsb2NhbHM9MHgwLCAK
ICAgIGFyZ3M9MHg4NGQwYjQ4LCBhcmdjb3VudD0zLCBrd3M9MHg4NGQwYjU0LCBrd2NvdW50PTAs
IGRlZnM9MHgwLCAKICAgIGRlZmNvdW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQeXRob24vY2V2YWwu
YzoxOTQ4CiMzOSAweDgwNTkwODQgaW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0weDgxZTQ1Y2MsIHBw
X3N0YWNrPTB4YmVmZmY2NWMsIG49MywgCiAgICBuYT0zLCBuaz0wKSBhdCBQeXRob24vY2V2YWwu
YzozMDE1CiM0MCAweDgwNTc4MTEgaW4gZXZhbF9jb2RlMiAoY289MHg4MWEzZTMwLCBnbG9iYWxz
PTB4ODFhNDE4NCwgbG9jYWxzPTB4MCwgCiAgICBhcmdzPTB4ODM1ZGU3MCwgYXJnY291bnQ9Mywg
a3dzPTB4MCwga3djb3VudD0wLCBkZWZzPTB4MCwgZGVmY291bnQ9MCwgCiAgICBjbG9zdXJlPTB4
MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk2NgojNDEgMHg4MDU4Zjg5IGluIGNhbGxfZXZhbF9jb2Rl
MiAoZnVuYz0weDgyYWYxNGMsIGFyZz0weDgzNWRlNjQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9j
ZXZhbC5jOjI5NTkKIzQyIDB4ODA1OGJhNCBpbiBjYWxsX29iamVjdCAoZnVuYz0weDgyYWYxNGMs
IGFyZz0weDgzNWRlNjQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI3OTkKIzQzIDB4
ODA1OGU0YiBpbiBjYWxsX21ldGhvZCAoZnVuYz0weDgyYWYxNGMsIGFyZz0weDgzNmI4NjQsIGt3
PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI5MTYKIzQ0IDB4ODA1OGI4ZCBpbiBjYWxsX29i
amVjdCAoZnVuYz0weDg2MjQ0ZDQsIGFyZz0weDgzNmI4NjQsIGt3PTB4MCkKLS0tVHlwZSA8cmV0
dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0tCiAgICBhdCBQeXRob24v
Y2V2YWwuYzoyNzk3CiM0NSAweDgwNThhOWQgaW4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29y
ZHMgKGZ1bmM9MHg4NjI0NGQ0LCBhcmc9MHg4MzZiODY0LCAKICAgIGt3PTB4MCkgYXQgUHl0aG9u
L2NldmFsLmM6MjczNAojNDYgMHg0MDFmNjVmZSBpbiBvbW5pUHk6OlB5X29tbmlTZXJ2YW50Ojpf
ZGlzcGF0Y2ggKHRoaXM9MHg4Mzc0ZmQwLCAKICAgIGdpb3Bfcz1AMHhiZWZmZjk5MCkgYXQgb21u
aTMwL3B5U2VydmFudC5jYzo1NDQKIzQ3IDB4NDAyOWQ3MWMgaW4gb21uaU9yYlBPQTo6ZGlzcGF0
Y2ggKHRoaXM9MHg4MzZiMGYwLCBnaW9wX3M9QDB4YmVmZmY5OTAsIAogICAgaWQ9MHg4MzZlNDk4
KSBhdCAuLi9wb2EuY2M6MTMzMQojNDggMHg0MDI5Mjc3OSBpbiBvbW5pTG9jYWxJZGVudGl0eTo6
ZGlzcGF0Y2ggKHRoaXM9MHg4MzZlNDk4LCAKICAgIGdpb3Bfcz1AMHhiZWZmZjk5MCkgYXQgLi4v
bG9jYWxJZGVudGl0eS5jYzoxNDIKIzQ5IDB4NDAyYzA1ZjcgaW4gR0lPUF9TOjpIYW5kbGVSZXF1
ZXN0ICh0aGlzPTB4YmVmZmY5OTAsIGJ5dGVvcmRlcj10cnVlKQogICAgYXQgLi4vZ2lvcFNlcnZl
ci5jYzo2MDEKIzUwIDB4NDAyYmZkZDUgaW4gR0lPUF9TOjpkaXNwYXRjaGVyIChzPTB4ODFhMmFm
MCkgYXQgLi4vZ2lvcFNlcnZlci5jYzo0MDMKIzUxIDB4NDAyZGNiOTEgaW4gdGNwU29ja2V0V29y
a2VyOjpfcmVhbFJ1biAoYXJnPTB4ODFhMmFmMCkKICAgIGF0IC4uL3RjcFNvY2tldE1UZmFjdG9y
eS5jYzoxNjIyCiM1MiAweDQwMmZjMDY0IGluIG9tbmlPUkI6Omdpb3BTZXJ2ZXJUaHJlYWRXcmFw
cGVyOjpydW4gKHRoaXM9MHg4MmU3YzI4LCAKICAgIGZuPTB4NDAyZGNiMWMgPHRjcFNvY2tldFdv
cmtlcjo6X3JlYWxSdW4odm9pZCAqKT4sIGFyZz0weDgxYTJhZjApCiAgICBhdCAuLi8uLi8uLi8u
Li8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlPUkIuaDo1NDEKIzUzIDB4NDAyZGNiMTEgaW4gdGNw
U29ja2V0V29ya2VyOjpydW4gKHRoaXM9MHg4MzZjMDIwLCBhcmc9MHg4MWEyYWYwKQogICAgYXQg
Li4vdGNwU29ja2V0TVRmYWN0b3J5LmNjOjE1OTQKIzU0IDB4NDAzNGY0MDQgaW4gb21uaV90aHJl
YWRfd3JhcHBlciAocHRyPTB4ODM2YzAyMCkgYXQgLi4vcG9zaXguY2M6NDIxCiM1NSAweDQwMDI2
MDY1IGluIHB0aHJlYWRfc3RhcnRfdGhyZWFkICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAK
KGdkYikgdGhyZWFkIDgKW1N3aXRjaGluZyB0byB0aHJlYWQgOCAoVGhyZWFkIDIxMzQxKV0KIzAg
IDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIGJ0
CiMwICAweDQwMDhhOGZlIGluIHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAg
MHg0MDAyODdhOSBpbiBfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwgKCkKICAgZnJv
bSAvbGliL2xpYnB0aHJlYWQuc28uMAojMiAgMHg0MDAyNTE4MSBpbiBwdGhyZWFkX2NvbmRfd2Fp
dCAoKSBmcm9tIC9saWIvbGlicHRocmVhZC5zby4wCiMzICAweDgwNmVlNDUgaW4gUHlUaHJlYWRf
YWNxdWlyZV9sb2NrIChsb2NrPTB4ODEzZDJiOCwgd2FpdGZsYWc9MSkKICAgIGF0IFB5dGhvbi90
aHJlYWRfcHRocmVhZC5oOjMxMwojNCAgMHg4MDU0YzAxIGluIFB5RXZhbF9SZXN0b3JlVGhyZWFk
ICh0c3RhdGU9MHg4NGI0NzkwKSBhdCBQeXRob24vY2V2YWwuYzoyMDEKIzUgIDB4NDAyMTY3YjYg
aW4gb21uaVB5OjpJbnRlcnByZXRlclVubG9ja2VyOjp+SW50ZXJwcmV0ZXJVbmxvY2tlciAoCiAg
ICB0aGlzPTB4YmVkZmYzMzAsIF9faW5fY2hyZz0yKSBhdCBvbW5pMzAvb21uaXB5MzAuaDo1NzgK
IzYgIDB4NDAxZWIzZTUgaW4gcHlQT0FfZGVzdHJveSAoc2VsZj0weDAsIGFyZ3M9MHg4MWI2YTQ0
KQogICAgYXQgb21uaTMwL3B5UE9BRnVuYy5jYzozMjIKIzcgIDB4ODA1OGNjNiBpbiBjYWxsX2Nm
dW5jdGlvbiAoZnVuYz0weDgxYTg5NzgsIGFyZz0weDgxYjZhNDQsIGt3PTB4MCkKICAgIGF0IFB5
dGhvbi9jZXZhbC5jOjI4MzgKIzggIDB4ODA1OGJiOCBpbiBjYWxsX29iamVjdCAoZnVuYz0weDgx
YTg5NzgsIGFyZz0weDgxYjZhNDQsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI4MDEK
IzkgIDB4ODA1OTMyYiBpbiBkb19jYWxsIChmdW5jPTB4ODFhODk3OCwgcHBfc3RhY2s9MHhiZWRm
ZjQ3YywgbmE9Mywgbms9MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjMxMTYKIzEwIDB4ODA1Nzdh
MiBpbiBldmFsX2NvZGUyIChjbz0weDgyMTMyYzAsIGdsb2JhbHM9MHg4MjJhYTVjLCBsb2NhbHM9
MHgwLCAKICAgIGFyZ3M9MHg4NTA2OGJjLCBhcmdjb3VudD0zLCBrd3M9MHg4NTA2OGM4LCBrd2Nv
dW50PTAsIGRlZnM9MHgwLCAKICAgIGRlZmNvdW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQeXRob24v
Y2V2YWwuYzoxOTQ4CiMxMSAweDgwNTkwODQgaW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0weDgyMmJi
NWMsIHBwX3N0YWNrPTB4YmVkZmY1OGMsIG49MywgCiAgICBuYT0zLCBuaz0wKSBhdCBQeXRob24v
Y2V2YWwuYzozMDE1CiMxMiAweDgwNTc4MTEgaW4gZXZhbF9jb2RlMiAoY289MHg4MWRlZDkwLCBn
bG9iYWxzPTB4ODFkZWUxNCwgbG9jYWxzPTB4MCwgCi0tLVR5cGUgPHJldHVybj4gdG8gY29udGlu
dWUsIG9yIHEgPHJldHVybj4gdG8gcXVpdC0tLQogICAgYXJncz0weDg1MDM5YzgsIGFyZ2NvdW50
PTEsIGt3cz0weDAsIGt3Y291bnQ9MCwgZGVmcz0weDAsIGRlZmNvdW50PTAsIAogICAgY2xvc3Vy
ZT0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjE5NjYKIzEzIDB4ODA1OGY4OSBpbiBjYWxsX2V2YWxf
Y29kZTIgKGZ1bmM9MHg4MWU0ZWNjLCBhcmc9MHg4NTAzOWJjLCBrdz0weDApCiAgICBhdCBQeXRo
b24vY2V2YWwuYzoyOTU5CiMxNCAweDgwNThiYTQgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4MWU0
ZWNjLCBhcmc9MHg4NTAzOWJjLCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyNzk5CiMx
NSAweDgwNThlNGIgaW4gY2FsbF9tZXRob2QgKGZ1bmM9MHg4MWU0ZWNjLCBhcmc9MHg4MGNjNTg0
LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyOTE2CiMxNiAweDgwNThiOGQgaW4gY2Fs
bF9vYmplY3QgKGZ1bmM9MHg4NWQ1NTdjLCBhcmc9MHg4MGNjNTg0LCBrdz0weDApCiAgICBhdCBQ
eXRob24vY2V2YWwuYzoyNzk3CiMxNyAweDgwNThhOWQgaW4gUHlFdmFsX0NhbGxPYmplY3RXaXRo
S2V5d29yZHMgKGZ1bmM9MHg4NWQ1NTdjLCBhcmc9MHg4MGNjNTg0LCAKICAgIGt3PTB4MCkgYXQg
UHl0aG9uL2NldmFsLmM6MjczNAojMTggMHg0MDFmNjVmZSBpbiBvbW5pUHk6OlB5X29tbmlTZXJ2
YW50OjpfZGlzcGF0Y2ggKHRoaXM9MHg4ODQzZGU4LCAKICAgIGdpb3Bfcz1AMHhiZWRmZjk5MCkg
YXQgb21uaTMwL3B5U2VydmFudC5jYzo1NDQKIzE5IDB4NDAyOWQ3MWMgaW4gb21uaU9yYlBPQTo6
ZGlzcGF0Y2ggKHRoaXM9MHg4ODRkYjQwLCBnaW9wX3M9QDB4YmVkZmY5OTAsIAogICAgaWQ9MHhi
ZWRmZjgzYykgYXQgLi4vcG9hLmNjOjEzMzEKIzIwIDB4NDAyOTI3NzkgaW4gb21uaUxvY2FsSWRl
bnRpdHk6OmRpc3BhdGNoICh0aGlzPTB4YmVkZmY4M2MsIAogICAgZ2lvcF9zPUAweGJlZGZmOTkw
KSBhdCAuLi9sb2NhbElkZW50aXR5LmNjOjE0MgojMjEgMHg0MDJhMjMxOCBpbiBvbW5pT3JiUE9B
OjpkaXNwYXRjaF90b19zbCAodGhpcz0weDg4NGRiNDAsIAogICAgZ2lvcF9zPUAweGJlZGZmOTkw
LCAKICAgIGtleT0weDg4MmQ2NjggIv9aT0RCQ29yYmFTZXJ2ZXI5ODg4MzgzMDYuMjcx/zk4ODgz
ODMyNC40NzMwLjg1NzY2MDY2MDI0Nv6iefA6qSIsIGtleXNpemU9ODMpIGF0IC4uL3BvYS5jYzoy
NTUzCiMyMiAweDQwMjlkOTc1IGluIG9tbmlPcmJQT0E6OmRpc3BhdGNoICh0aGlzPTB4ODg0ZGI0
MCwgZ2lvcF9zPUAweGJlZGZmOTkwLCAKLS0tVHlwZSA8cmV0dXJuPiB0byBjb250aW51ZSwgb3Ig
cSA8cmV0dXJuPiB0byBxdWl0LS0tCiAgICBrZXk9MHg4ODJkNjY4ICL/Wk9EQkNvcmJhU2VydmVy
OTg4ODM4MzA2LjI3Mf85ODg4MzgzMjQuNDczMC44NTc2NjA2NjAyNDb+onnwOqkiLCBrZXlzaXpl
PTgzKSBhdCAuLi9wb2EuY2M6MTM2NAojMjMgMHg0MDJjMDZkNyBpbiBHSU9QX1M6OkhhbmRsZVJl
cXVlc3QgKHRoaXM9MHhiZWRmZjk5MCwgYnl0ZW9yZGVyPXRydWUpCiAgICBhdCAuLi9naW9wU2Vy
dmVyLmNjOjYxMwojMjQgMHg0MDJiZmRkNSBpbiBHSU9QX1M6OmRpc3BhdGNoZXIgKHM9MHg4NGIw
NWEwKSBhdCAuLi9naW9wU2VydmVyLmNjOjQwMwojMjUgMHg0MDJkY2I5MSBpbiB0Y3BTb2NrZXRX
b3JrZXI6Ol9yZWFsUnVuIChhcmc9MHg4NGIwNWEwKQogICAgYXQgLi4vdGNwU29ja2V0TVRmYWN0
b3J5LmNjOjE2MjIKIzI2IDB4NDAyZmMwNjQgaW4gb21uaU9SQjo6Z2lvcFNlcnZlclRocmVhZFdy
YXBwZXI6OnJ1biAodGhpcz0weDgyZTdjMjgsIAogICAgZm49MHg0MDJkY2IxYyA8dGNwU29ja2V0
V29ya2VyOjpfcmVhbFJ1bih2b2lkICopPiwgYXJnPTB4ODRiMDVhMCkKICAgIGF0IC4uLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oOjU0MQojMjcgMHg0MDJkY2IxMSBpbiB0
Y3BTb2NrZXRXb3JrZXI6OnJ1biAodGhpcz0weDg0YjQ2NDAsIGFyZz0weDg0YjA1YTApCiAgICBh
dCAuLi90Y3BTb2NrZXRNVGZhY3RvcnkuY2M6MTU5NAojMjggMHg0MDM0ZjQwNCBpbiBvbW5pX3Ro
cmVhZF93cmFwcGVyIChwdHI9MHg4NGI0NjQwKSBhdCAuLi9wb3NpeC5jYzo0MjEKIzI5IDB4NDAw
MjYwNjUgaW4gcHRocmVhZF9zdGFydF90aHJlYWQgKCkgZnJvbSAvbGliL2xpYnB0aHJlYWQuc28u
MAooZ2RiKSB0aHJlYWQgOQpbU3dpdGNoaW5nIHRvIHRocmVhZCA5IChUaHJlYWQgMjEzNDUpXQoj
MCAgMHg0MDA4YThmZSBpbiBzaWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKGdkYikg
YnQKIzAgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CiMx
ICAweDQwMDI4N2E5IGluIF9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbCAoKQogICBm
cm9tIC9saWIvbGlicHRocmVhZC5zby4wCiMyICAweDQwMDI1MTgxIGluIHB0aHJlYWRfY29uZF93
YWl0ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzMgIDB4ODA2ZWU0NSBpbiBQeVRocmVh
ZF9hY3F1aXJlX2xvY2sgKGxvY2s9MHg4MTNkMmI4LCB3YWl0ZmxhZz0xKQogICAgYXQgUHl0aG9u
L3RocmVhZF9wdGhyZWFkLmg6MzEzCiM0ICAweDgwNTRjMDEgaW4gUHlFdmFsX1Jlc3RvcmVUaHJl
YWQgKHRzdGF0ZT0weDg0ZDJiNDApIGF0IFB5dGhvbi9jZXZhbC5jOjIwMQojNSAgMHg0MDIxNjdi
NiBpbiBvbW5pUHk6OkludGVycHJldGVyVW5sb2NrZXI6On5JbnRlcnByZXRlclVubG9ja2VyICgK
ICAgIHRoaXM9MHhiZWJmZjBmNCwgX19pbl9jaHJnPTIpIGF0IG9tbmkzMC9vbW5pcHkzMC5oOjU3
OAojNiAgMHg0MDFlZWMyMyBpbiBweVBPQV9jcmVhdGVfcmVmZXJlbmNlX3dpdGhfaWQgKHNlbGY9
MHgwLCBhcmdzPTB4ODM1ZTUxYykKICAgIGF0IG9tbmkzMC9weVBPQUZ1bmMuY2M6NzU1CiM3ICAw
eDgwNThjYzYgaW4gY2FsbF9jZnVuY3Rpb24gKGZ1bmM9MHg4MWMzOWEwLCBhcmc9MHg4MzVlNTFj
LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyODM4CiM4ICAweDgwNThiYjggaW4gY2Fs
bF9vYmplY3QgKGZ1bmM9MHg4MWMzOWEwLCBhcmc9MHg4MzVlNTFjLCBrdz0weDApCiAgICBhdCBQ
eXRob24vY2V2YWwuYzoyODAxCiM5ICAweDgwNTkzMmIgaW4gZG9fY2FsbCAoZnVuYz0weDgxYzM5
YTAsIHBwX3N0YWNrPTB4YmViZmYyNWMsIG5hPTMsIG5rPTApCiAgICBhdCBQeXRob24vY2V2YWwu
YzozMTE2CiMxMCAweDgwNTc3YTIgaW4gZXZhbF9jb2RlMiAoY289MHg4MWZhOGU4LCBnbG9iYWxz
PTB4ODIyYWE1YywgbG9jYWxzPTB4MCwgCiAgICBhcmdzPTB4ODc0NzZhYywgYXJnY291bnQ9Mywg
a3dzPTB4ODc0NzZiOCwga3djb3VudD0wLCBkZWZzPTB4MCwgCiAgICBkZWZjb3VudD0wLCBjbG9z
dXJlPTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk0OAojMTEgMHg4MDU5MDg0IGluIGZhc3RfZnVu
Y3Rpb24gKGZ1bmM9MHg4MjJiMDZjLCBwcF9zdGFjaz0weGJlYmZmMzZjLCBuPTMsIAogICAgbmE9
Mywgbms9MCkgYXQgUHl0aG9uL2NldmFsLmM6MzAxNQojMTIgMHg4MDU3ODExIGluIGV2YWxfY29k
ZTIgKGNvPTB4ODFlMTg1MCwgZ2xvYmFscz0weDgxZGVlMTQsIGxvY2Fscz0weDAsIAotLS1UeXBl
IDxyZXR1cm4+IHRvIGNvbnRpbnVlLCBvciBxIDxyZXR1cm4+IHRvIHF1aXQtLS0KICAgIGFyZ3M9
MHg4NGY3MjUwLCBhcmdjb3VudD00LCBrd3M9MHg4NGY3MjYwLCBrd2NvdW50PTAsIGRlZnM9MHgw
LCAKICAgIGRlZmNvdW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQeXRob24vY2V2YWwuYzoxOTY2CiMx
MyAweDgwNTkwODQgaW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0weDgxZTUxNGMsIHBwX3N0YWNrPTB4
YmViZmY0N2MsIG49NCwgCiAgICBuYT00LCBuaz0wKSBhdCBQeXRob24vY2V2YWwuYzozMDE1CiMx
NCAweDgwNTc4MTEgaW4gZXZhbF9jb2RlMiAoY289MHg4MWQ4OTUwLCBnbG9iYWxzPTB4ODFkZWUx
NCwgbG9jYWxzPTB4MCwgCiAgICBhcmdzPTB4ODYzYTRmMCwgYXJnY291bnQ9Miwga3dzPTB4ODYz
YTRmOCwga3djb3VudD0wLCBkZWZzPTB4MCwgCiAgICBkZWZjb3VudD0wLCBjbG9zdXJlPTB4MCkg
YXQgUHl0aG9uL2NldmFsLmM6MTk2NgojMTUgMHg4MDU5MDg0IGluIGZhc3RfZnVuY3Rpb24gKGZ1
bmM9MHg4MWUzYzJjLCBwcF9zdGFjaz0weGJlYmZmNThjLCBuPTIsIAogICAgbmE9Miwgbms9MCkg
YXQgUHl0aG9uL2NldmFsLmM6MzAxNQojMTYgMHg4MDU3ODExIGluIGV2YWxfY29kZTIgKGNvPTB4
ODJmYzU4MCwgZ2xvYmFscz0weDgzODI3NGMsIGxvY2Fscz0weDAsIAogICAgYXJncz0weDg1MDNl
YTAsIGFyZ2NvdW50PTEsIGt3cz0weDAsIGt3Y291bnQ9MCwgZGVmcz0weDAsIGRlZmNvdW50PTAs
IAogICAgY2xvc3VyZT0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjE5NjYKIzE3IDB4ODA1OGY4OSBp
biBjYWxsX2V2YWxfY29kZTIgKGZ1bmM9MHg4MWUwNjM0LCBhcmc9MHg4NTAzZTk0LCBrdz0weDAp
CiAgICBhdCBQeXRob24vY2V2YWwuYzoyOTU5CiMxOCAweDgwNThiYTQgaW4gY2FsbF9vYmplY3Qg
KGZ1bmM9MHg4MWUwNjM0LCBhcmc9MHg4NTAzZTk0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2
YWwuYzoyNzk5CiMxOSAweDgwNThlNGIgaW4gY2FsbF9tZXRob2QgKGZ1bmM9MHg4MWUwNjM0LCBh
cmc9MHg4MGNjNTg0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyOTE2CiMyMCAweDgw
NThiOGQgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4NGRmZWJjLCBhcmc9MHg4MGNjNTg0LCBrdz0w
eDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyNzk3CiMyMSAweDgwNThhOWQgaW4gUHlFdmFsX0Nh
bGxPYmplY3RXaXRoS2V5d29yZHMgKGZ1bmM9MHg4NGRmZWJjLCBhcmc9MHg4MGNjNTg0LCAKICAg
IGt3PTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MjczNAojMjIgMHg0MDFmNjVmZSBpbiBvbW5pUHk6
OlB5X29tbmlTZXJ2YW50OjpfZGlzcGF0Y2ggKHRoaXM9MHg4ODQyMzU4LCAKLS0tVHlwZSA8cmV0
dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0tCiAgICBnaW9wX3M9QDB4
YmViZmY5OTApIGF0IG9tbmkzMC9weVNlcnZhbnQuY2M6NTQ0CiMyMyAweDQwMjlkNzFjIGluIG9t
bmlPcmJQT0E6OmRpc3BhdGNoICh0aGlzPTB4ODgyNDk0MCwgZ2lvcF9zPUAweGJlYmZmOTkwLCAK
ICAgIGlkPTB4YmViZmY4M2MpIGF0IC4uL3BvYS5jYzoxMzMxCiMyNCAweDQwMjkyNzc5IGluIG9t
bmlMb2NhbElkZW50aXR5OjpkaXNwYXRjaCAodGhpcz0weGJlYmZmODNjLCAKICAgIGdpb3Bfcz1A
MHhiZWJmZjk5MCkgYXQgLi4vbG9jYWxJZGVudGl0eS5jYzoxNDIKIzI1IDB4NDAyYTIzMTggaW4g
b21uaU9yYlBPQTo6ZGlzcGF0Y2hfdG9fc2wgKHRoaXM9MHg4ODI0OTQwLCAKICAgIGdpb3Bfcz1A
MHhiZWJmZjk5MCwgCiAgICBrZXk9MHg4ODI5Mjc4ICL/Wk9EQkNvcmJhU2VydmVyOTg4ODM4MzA2
LjI3Mf85ODg4MzgzMjQuMjQ3MC45MDg3NDIyNjY5MzT+onnwOqYiLCBrZXlzaXplPTgzKSBhdCAu
Li9wb2EuY2M6MjU1MwojMjYgMHg0MDI5ZDk3NSBpbiBvbW5pT3JiUE9BOjpkaXNwYXRjaCAodGhp
cz0weDg4MjQ5NDAsIGdpb3Bfcz1AMHhiZWJmZjk5MCwgCiAgICBrZXk9MHg4ODI5Mjc4ICL/Wk9E
QkNvcmJhU2VydmVyOTg4ODM4MzA2LjI3Mf85ODg4MzgzMjQuMjQ3MC45MDg3NDIyNjY5MzT+onnw
OqYiLCBrZXlzaXplPTgzKSBhdCAuLi9wb2EuY2M6MTM2NAojMjcgMHg0MDJjMDZkNyBpbiBHSU9Q
X1M6OkhhbmRsZVJlcXVlc3QgKHRoaXM9MHhiZWJmZjk5MCwgYnl0ZW9yZGVyPXRydWUpCiAgICBh
dCAuLi9naW9wU2VydmVyLmNjOjYxMwojMjggMHg0MDJiZmRkNSBpbiBHSU9QX1M6OmRpc3BhdGNo
ZXIgKHM9MHg4NGJmMGQwKSBhdCAuLi9naW9wU2VydmVyLmNjOjQwMwojMjkgMHg0MDJkY2I5MSBp
biB0Y3BTb2NrZXRXb3JrZXI6Ol9yZWFsUnVuIChhcmc9MHg4NGJmMGQwKQogICAgYXQgLi4vdGNw
U29ja2V0TVRmYWN0b3J5LmNjOjE2MjIKIzMwIDB4NDAyZmMwNjQgaW4gb21uaU9SQjo6Z2lvcFNl
cnZlclRocmVhZFdyYXBwZXI6OnJ1biAodGhpcz0weDgyZTdjMjgsIAogICAgZm49MHg0MDJkY2Ix
YyA8dGNwU29ja2V0V29ya2VyOjpfcmVhbFJ1bih2b2lkICopPiwgYXJnPTB4ODRiZjBkMCkKICAg
IGF0IC4uLy4uLy4uLy4uLy4uL2luY2x1ZGUvb21uaU9SQjMvb21uaU9SQi5oOjU0MQojMzEgMHg0
MDJkY2IxMSBpbiB0Y3BTb2NrZXRXb3JrZXI6OnJ1biAodGhpcz0weDg0YmVlMjgsIGFyZz0weDg0
YmYwZDApCiAgICBhdCAuLi90Y3BTb2NrZXRNVGZhY3RvcnkuY2M6MTU5NAojMzIgMHg0MDM0ZjQw
NCBpbiBvbW5pX3RocmVhZF93cmFwcGVyIChwdHI9MHg4NGJlZTI4KSBhdCAuLi9wb3NpeC5jYzo0
MjEKLS0tVHlwZSA8cmV0dXJuPiB0byBjb250aW51ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0t
CiMzMyAweDQwMDI2MDY1IGluIHB0aHJlYWRfc3RhcnRfdGhyZWFkICgpIGZyb20gL2xpYi9saWJw
dGhyZWFkLnNvLjAKKGdkYikgdGhyZWFkIDEwCltTd2l0Y2hpbmcgdG8gdGhyZWFkIDEwIChUaHJl
YWQgMjEzNTApXQojMCAgMHg0MDA4YThmZSBpbiBzaWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJj
LnNvLjYKKGdkYikgYnQKIzAgIDB4NDAwOGE4ZmUgaW4gc2lnc3VzcGVuZCAoKSBmcm9tIC9saWIv
bGliYy5zby42CiMxICAweDQwMDI4N2E5IGluIF9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3Np
Z25hbCAoKQogICBmcm9tIC9saWIvbGlicHRocmVhZC5zby4wCiMyICAweDQwMDI1MTgxIGluIHB0
aHJlYWRfY29uZF93YWl0ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzMgIDB4ODA2ZWU0
NSBpbiBQeVRocmVhZF9hY3F1aXJlX2xvY2sgKGxvY2s9MHg4MTNkMmI4LCB3YWl0ZmxhZz0xKQog
ICAgYXQgUHl0aG9uL3RocmVhZF9wdGhyZWFkLmg6MzEzCiM0ICAweDgwNTRhOTIgaW4gUHlFdmFs
X0FjcXVpcmVMb2NrICgpIGF0IFB5dGhvbi9jZXZhbC5jOjEyNgojNSAgMHg0MDIxYWE2ZCBpbiBv
bW5pcHlUaHJlYWRDYWNoZTo6bG9jazo6bG9jayAodGhpcz0weGJlOWZlYTM0KQogICAgYXQgY29t
bW9uL3B5VGhyZWFkQ2FjaGUuaDo4NgojNiAgMHg0MDFmNTUwNyBpbiBvbW5pUHk6OlB5X29tbmlT
ZXJ2YW50OjpfYWRkX3JlZiAodGhpcz0weDg4NjMxMzgpCiAgICBhdCBvbW5pMzAvcHlTZXJ2YW50
LmNjOjI5MQojNyAgMHg0MDI5ZjkwYyBpbiBzZXJ2YW50X190aGlzX18xMG9tbmlPcmJQT0FQUTIx
NFBvcnRhYmxlU2VydmVyMTFTZXJ2YW50QmFzZVBDYyAodGhpcz0weDgzNmIwZjAsIHBfc2VydmFu
dD0weDg4NjMxMjgsIAogICAgcmVwb0lkPTB4NDAzMGI2MzYgIklETDpvbWcub3JnL0NPUkJBL09i
amVjdDoxLjAiKSBhdCAuLi9wb2EuY2M6MTc5OQojOCAgMHg0MDJhNmFhZiBpbiBQb3J0YWJsZVNl
cnZlcjo6U2VydmFudEJhc2U6Ol9kb190aGlzICh0aGlzPTB4ODg2MzEyOCwgCiAgICByZXBvSWQ9
MHg0MDMwYjYzNiAiSURMOm9tZy5vcmcvQ09SQkEvT2JqZWN0OjEuMCIpCiAgICBhdCAuLi9wb3J0
YWJsZXNlcnZlci5jYzoyNTMKIzkgIDB4NDAxZjViOGQgaW4gb21uaVB5OjpQeV9vbW5pU2VydmFu
dDo6cHlfdGhpcyAodGhpcz0weDg4NjMxMzgpCiAgICBhdCBvbW5pMzAvcHlTZXJ2YW50LmNjOjM5
NQojMTAgMHg0MDFmMTNjNCBpbiBweVBPQV9zZXJ2YW50VGhpcyAoc2VsZj0weDAsIGFyZ3M9MHg4
MGUyNGZjKQogICAgYXQgb21uaTMwL3B5UE9BRnVuYy5jYzoxMDQxCiMxMSAweDgwNThjYzYgaW4g
Y2FsbF9jZnVuY3Rpb24gKGZ1bmM9MHg4MWNlMTk4LCBhcmc9MHg4MGUyNGZjLCBrdz0weDApCiAg
ICBhdCBQeXRob24vY2V2YWwuYzoyODM4Ci0tLVR5cGUgPHJldHVybj4gdG8gY29udGludWUsIG9y
IHEgPHJldHVybj4gdG8gcXVpdC0tLQojMTIgMHg4MDU4YmI4IGluIGNhbGxfb2JqZWN0IChmdW5j
PTB4ODFjZTE5OCwgYXJnPTB4ODBlMjRmYywga3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6
MjgwMQojMTMgMHg4MDU5MzJiIGluIGRvX2NhbGwgKGZ1bmM9MHg4MWNlMTk4LCBwcF9zdGFjaz0w
eGJlOWZlZDFjLCBuYT0xLCBuaz0wKQogICAgYXQgUHl0aG9uL2NldmFsLmM6MzExNgojMTQgMHg4
MDU3N2EyIGluIGV2YWxfY29kZTIgKGNvPTB4ODIwMWU1OCwgZ2xvYmFscz0weDgyMmFhNWMsIGxv
Y2Fscz0weDAsIAogICAgYXJncz0weDg0ZTNjYjAsIGFyZ2NvdW50PTEsIGt3cz0weDg0ZTNjYjQs
IGt3Y291bnQ9MCwgZGVmcz0weDAsIAogICAgZGVmY291bnQ9MCwgY2xvc3VyZT0weDApIGF0IFB5
dGhvbi9jZXZhbC5jOjE5NDgKIzE1IDB4ODA1OTA4NCBpbiBmYXN0X2Z1bmN0aW9uIChmdW5jPTB4
ODIyODUwNCwgcHBfc3RhY2s9MHhiZTlmZWUyYywgbj0xLCAKICAgIG5hPTEsIG5rPTApIGF0IFB5
dGhvbi9jZXZhbC5jOjMwMTUKIzE2IDB4ODA1NzgxMSBpbiBldmFsX2NvZGUyIChjbz0weDgxZGY1
YzgsIGdsb2JhbHM9MHg4MWRlZTE0LCBsb2NhbHM9MHgwLCAKICAgIGFyZ3M9MHg4NTBiMjFjLCBh
cmdjb3VudD0zLCBrd3M9MHg4NTBiMjI4LCBrd2NvdW50PTAsIGRlZnM9MHgwLCAKICAgIGRlZmNv
dW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQeXRob24vY2V2YWwuYzoxOTY2CiMxNyAweDgwNTkwODQg
aW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0weDgxZTRmMDQsIHBwX3N0YWNrPTB4YmU5ZmVmM2MsIG49
MywgCiAgICBuYT0zLCBuaz0wKSBhdCBQeXRob24vY2V2YWwuYzozMDE1CiMxOCAweDgwNTc4MTEg
aW4gZXZhbF9jb2RlMiAoY289MHg4MWRlMTYwLCBnbG9iYWxzPTB4ODFkZWUxNCwgbG9jYWxzPTB4
MCwgCiAgICBhcmdzPTB4ODUxZDUxOCwgYXJnY291bnQ9Mywga3dzPTB4ODUxZDUyNCwga3djb3Vu
dD0wLCBkZWZzPTB4MCwgCiAgICBkZWZjb3VudD0wLCBjbG9zdXJlPTB4MCkgYXQgUHl0aG9uL2Nl
dmFsLmM6MTk2NgojMTkgMHg4MDU5MDg0IGluIGZhc3RfZnVuY3Rpb24gKGZ1bmM9MHg4MWU0ZGNj
LCBwcF9zdGFjaz0weGJlOWZmMDRjLCBuPTMsIAogICAgbmE9Mywgbms9MCkgYXQgUHl0aG9uL2Nl
dmFsLmM6MzAxNQojMjAgMHg4MDU3ODExIGluIGV2YWxfY29kZTIgKGNvPTB4ODFkZDM5OCwgZ2xv
YmFscz0weDgxZGVlMTQsIGxvY2Fscz0weDAsIAogICAgYXJncz0weDgzODQ2ZTAsIGFyZ2NvdW50
PTQsIGt3cz0weDAsIGt3Y291bnQ9MCwgZGVmcz0weDAsIGRlZmNvdW50PTAsIAogICAgY2xvc3Vy
ZT0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjE5NjYKIzIxIDB4ODA1OGY4OSBpbiBjYWxsX2V2YWxf
Y29kZTIgKGZ1bmM9MHg4MWU0YmVjLCBhcmc9MHg4Mzg0NmQ0LCBrdz0weDApCi0tLVR5cGUgPHJl
dHVybj4gdG8gY29udGludWUsIG9yIHEgPHJldHVybj4gdG8gcXVpdC0tLQogICAgYXQgUHl0aG9u
L2NldmFsLmM6Mjk1OQojMjIgMHg4MDU4YmE0IGluIGNhbGxfb2JqZWN0IChmdW5jPTB4ODFlNGJl
YywgYXJnPTB4ODM4NDZkNCwga3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6Mjc5OQojMjMg
MHg4MDU4ZTRiIGluIGNhbGxfbWV0aG9kIChmdW5jPTB4ODFlNGJlYywgYXJnPTB4ODM4NDZkNCwg
a3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6MjkxNgojMjQgMHg4MDU4YjhkIGluIGNhbGxf
b2JqZWN0IChmdW5jPTB4ODUzYjQ1YywgYXJnPTB4ODM4NDZkNCwga3c9MHgwKQogICAgYXQgUHl0
aG9uL2NldmFsLmM6Mjc5NwojMjUgMHg4MDU5MzJiIGluIGRvX2NhbGwgKGZ1bmM9MHg4NTNiNDVj
LCBwcF9zdGFjaz0weGJlOWZmMjFjLCBuYT00LCBuaz0wKQogICAgYXQgUHl0aG9uL2NldmFsLmM6
MzExNgojMjYgMHg4MDU3ODJmIGluIGV2YWxfY29kZTIgKGNvPTB4ODFhNDJiOCwgZ2xvYmFscz0w
eDgxYTQxODQsIGxvY2Fscz0weDAsIAogICAgYXJncz0weDgzNzRiYjAsIGFyZ2NvdW50PTYsIGt3
cz0weDAsIGt3Y291bnQ9MCwgZGVmcz0weDAsIGRlZmNvdW50PTAsIAogICAgY2xvc3VyZT0weDAp
IGF0IFB5dGhvbi9jZXZhbC5jOjE5NjkKIzI3IDB4ODA1OGY4OSBpbiBjYWxsX2V2YWxfY29kZTIg
KGZ1bmM9MHg4MmZhNTZjLCBhcmc9MHg4Mzc0YmE0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2
YWwuYzoyOTU5CiMyOCAweDgwNThiYTQgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4MmZhNTZjLCBh
cmc9MHg4Mzc0YmE0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyNzk5CiMyOSAweDgw
NThlNGIgaW4gY2FsbF9tZXRob2QgKGZ1bmM9MHg4MmZhNTZjLCBhcmc9MHg4Mzg0MzQ0LCBrdz0w
eDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyOTE2CiMzMCAweDgwNThiOGQgaW4gY2FsbF9vYmpl
Y3QgKGZ1bmM9MHg4NGUwYTVjLCBhcmc9MHg4Mzg0MzQ0LCBrdz0weDApCiAgICBhdCBQeXRob24v
Y2V2YWwuYzoyNzk3CiMzMSAweDgwNThhOWQgaW4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29y
ZHMgKGZ1bmM9MHg4NGUwYTVjLCBhcmc9MHg4Mzg0MzQ0LCAKICAgIGt3PTB4MCkgYXQgUHl0aG9u
L2NldmFsLmM6MjczNAojMzIgMHg4MDdjOTA1IGluIFB5SW5zdGFuY2VfTmV3IChrbGFzcz0weDgy
NGY2NWMsIGFyZz0weDgzODQzNDQsIGt3PTB4MCkKLS0tVHlwZSA8cmV0dXJuPiB0byBjb250aW51
ZSwgb3IgcSA8cmV0dXJuPiB0byBxdWl0LS0tCiAgICBhdCBPYmplY3RzL2NsYXNzb2JqZWN0LmM6
NDg5CiMzMyAweDgwNThiZDIgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4MjRmNjVjLCBhcmc9MHg4
Mzg0MzQ0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyODAzCiMzNCAweDgwNThhOWQg
aW4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMgKGZ1bmM9MHg4MjRmNjVjLCBhcmc9MHg4
Mzg0MzQ0LCAKICAgIGt3PTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MjczNAojMzUgMHg4MDk5ZDgy
IGluIGJ1aWx0aW5fYXBwbHkgKHNlbGY9MHgwLCBhcmdzPTB4ODFkM2UwYykKICAgIGF0IFB5dGhv
bi9ibHRpbm1vZHVsZS5jOjkwCiMzNiAweDgwNThjYzYgaW4gY2FsbF9jZnVuY3Rpb24gKGZ1bmM9
MHg4MGM4MmEwLCBhcmc9MHg4MWQzZTBjLCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoy
ODM4CiMzNyAweDgwNThiYjggaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4MGM4MmEwLCBhcmc9MHg4
MWQzZTBjLCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyODAxCiMzOCAweDgwNTkzMmIg
aW4gZG9fY2FsbCAoZnVuYz0weDgwYzgyYTAsIHBwX3N0YWNrPTB4YmU5ZmY1NGMsIG5hPTIsIG5r
PTApCiAgICBhdCBQeXRob24vY2V2YWwuYzozMTE2CiMzOSAweDgwNTc3YTIgaW4gZXZhbF9jb2Rl
MiAoY289MHg4MWRhNjcwLCBnbG9iYWxzPTB4ODFkZWUxNCwgbG9jYWxzPTB4MCwgCiAgICBhcmdz
PTB4ODUwNTMyOCwgYXJnY291bnQ9Mywga3dzPTB4ODUwNTMzNCwga3djb3VudD0wLCBkZWZzPTB4
MCwgCiAgICBkZWZjb3VudD0wLCBjbG9zdXJlPTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MTk0OAoj
NDAgMHg4MDU5MDg0IGluIGZhc3RfZnVuY3Rpb24gKGZ1bmM9MHg4MWU0NWNjLCBwcF9zdGFjaz0w
eGJlOWZmNjVjLCBuPTMsIAogICAgbmE9Mywgbms9MCkgYXQgUHl0aG9uL2NldmFsLmM6MzAxNQoj
NDEgMHg4MDU3ODExIGluIGV2YWxfY29kZTIgKGNvPTB4ODFhM2UzMCwgZ2xvYmFscz0weDgxYTQx
ODQsIGxvY2Fscz0weDAsIAogICAgYXJncz0weDgzODVkNTAsIGFyZ2NvdW50PTMsIGt3cz0weDAs
IGt3Y291bnQ9MCwgZGVmcz0weDAsIGRlZmNvdW50PTAsIAogICAgY2xvc3VyZT0weDApIGF0IFB5
dGhvbi9jZXZhbC5jOjE5NjYKIzQyIDB4ODA1OGY4OSBpbiBjYWxsX2V2YWxfY29kZTIgKGZ1bmM9
MHg4MmFmMTRjLCBhcmc9MHg4Mzg1ZDQ0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoy
OTU5Ci0tLVR5cGUgPHJldHVybj4gdG8gY29udGludWUsIG9yIHEgPHJldHVybj4gdG8gcXVpdC0t
LQojNDMgMHg4MDU4YmE0IGluIGNhbGxfb2JqZWN0IChmdW5jPTB4ODJhZjE0YywgYXJnPTB4ODM4
NWQ0NCwga3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6Mjc5OQojNDQgMHg4MDU4ZTRiIGlu
IGNhbGxfbWV0aG9kIChmdW5jPTB4ODJhZjE0YywgYXJnPTB4ODM3NDhjNCwga3c9MHgwKQogICAg
YXQgUHl0aG9uL2NldmFsLmM6MjkxNgojNDUgMHg4MDU4YjhkIGluIGNhbGxfb2JqZWN0IChmdW5j
PTB4ODM2YTA1NCwgYXJnPTB4ODM3NDhjNCwga3c9MHgwKQogICAgYXQgUHl0aG9uL2NldmFsLmM6
Mjc5NwojNDYgMHg4MDU4YTlkIGluIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIChmdW5j
PTB4ODM2YTA1NCwgYXJnPTB4ODM3NDhjNCwgCiAgICBrdz0weDApIGF0IFB5dGhvbi9jZXZhbC5j
OjI3MzQKIzQ3IDB4NDAxZjY1ZmUgaW4gb21uaVB5OjpQeV9vbW5pU2VydmFudDo6X2Rpc3BhdGNo
ICh0aGlzPTB4ODM3NGZkMCwgCiAgICBnaW9wX3M9QDB4YmU5ZmY5OTApIGF0IG9tbmkzMC9weVNl
cnZhbnQuY2M6NTQ0CiM0OCAweDQwMjlkNzFjIGluIG9tbmlPcmJQT0E6OmRpc3BhdGNoICh0aGlz
PTB4ODM2YjBmMCwgZ2lvcF9zPUAweGJlOWZmOTkwLCAKICAgIGlkPTB4ODM2ZTQ5OCkgYXQgLi4v
cG9hLmNjOjEzMzEKIzQ5IDB4NDAyOTI3NzkgaW4gb21uaUxvY2FsSWRlbnRpdHk6OmRpc3BhdGNo
ICh0aGlzPTB4ODM2ZTQ5OCwgCiAgICBnaW9wX3M9QDB4YmU5ZmY5OTApIGF0IC4uL2xvY2FsSWRl
bnRpdHkuY2M6MTQyCiM1MCAweDQwMmMwNWY3IGluIEdJT1BfUzo6SGFuZGxlUmVxdWVzdCAodGhp
cz0weGJlOWZmOTkwLCBieXRlb3JkZXI9dHJ1ZSkKICAgIGF0IC4uL2dpb3BTZXJ2ZXIuY2M6NjAx
CiM1MSAweDQwMmJmZGQ1IGluIEdJT1BfUzo6ZGlzcGF0Y2hlciAocz0weDQwNDAwNjA4KSBhdCAu
Li9naW9wU2VydmVyLmNjOjQwMwojNTIgMHg0MDJkY2I5MSBpbiB0Y3BTb2NrZXRXb3JrZXI6Ol9y
ZWFsUnVuIChhcmc9MHg0MDQwMDYwOCkKICAgIGF0IC4uL3RjcFNvY2tldE1UZmFjdG9yeS5jYzox
NjIyCiM1MyAweDQwMmZjMDY0IGluIG9tbmlPUkI6Omdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVyOjpy
dW4gKHRoaXM9MHg4MmU3YzI4LCAKICAgIGZuPTB4NDAyZGNiMWMgPHRjcFNvY2tldFdvcmtlcjo6
X3JlYWxSdW4odm9pZCAqKT4sIGFyZz0weDQwNDAwNjA4KQogICAgYXQgLi4vLi4vLi4vLi4vLi4v
aW5jbHVkZS9vbW5pT1JCMy9vbW5pT1JCLmg6NTQxCiM1NCAweDQwMmRjYjExIGluIHRjcFNvY2tl
dFdvcmtlcjo6cnVuICh0aGlzPTB4NDA0MDQ2YTgsIGFyZz0weDQwNDAwNjA4KQotLS1UeXBlIDxy
ZXR1cm4+IHRvIGNvbnRpbnVlLCBvciBxIDxyZXR1cm4+IHRvIHF1aXQtLS0KICAgIGF0IC4uL3Rj
cFNvY2tldE1UZmFjdG9yeS5jYzoxNTk0CiM1NSAweDQwMzRmNDA0IGluIG9tbmlfdGhyZWFkX3dy
YXBwZXIgKHB0cj0weDQwNDA0NmE4KSBhdCAuLi9wb3NpeC5jYzo0MjEKIzU2IDB4NDAwMjYwNjUg
aW4gcHRocmVhZF9zdGFydF90aHJlYWQgKCkgZnJvbSAvbGliL2xpYnB0aHJlYWQuc28uMAooZ2Ri
KSB0aHJlYWQgMTEKW1N3aXRjaGluZyB0byB0aHJlYWQgMTEgKFRocmVhZCAyMTM0OCldCiMwICAw
eDQwMDhhOGZlIGluIHNpZ3N1c3BlbmQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgooZ2RiKSBidAoj
MCAgMHg0MDA4YThmZSBpbiBzaWdzdXNwZW5kICgpIGZyb20gL2xpYi9saWJjLnNvLjYKIzEgIDB4
NDAwMjg3YTkgaW4gX19wdGhyZWFkX3dhaXRfZm9yX3Jlc3RhcnRfc2lnbmFsICgpCiAgIGZyb20g
L2xpYi9saWJwdGhyZWFkLnNvLjAKIzIgIDB4NDAwMmE4MGEgaW4gX19wdGhyZWFkX2FsdF9sb2Nr
ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzMgIDB4NDAwMjZmMTIgaW4gcHRocmVhZF9t
dXRleF9sb2NrICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKIzQgIDB4NDAzNGU2Y2QgaW4g
b21uaV9tdXRleDo6bG9jayAodGhpcz0weDgxZDVkYjgpIGF0IC4uL3Bvc2l4LmNjOjExMgojNSAg
MHg0MDIxODE4OCBpbiBvbW5pX211dGV4X2xvY2s6Om9tbmlfbXV0ZXhfbG9jayAodGhpcz0weGJl
N2ZmMmIwLCAKICAgIG09QDB4ODFkNWRiOCkgYXQgLi4vLi4vLi4vLi4vaW5jbHVkZS9vbW5pdGhy
ZWFkLmg6MjQ0CiM2ICAweDQwMWYzYWIwIGluIG9tbmlQeTo6bWFrZUxvY2FsT2JqUmVmICgKICAg
IHRhcmdldFJlcG9JZD0weDgyNTIxOWMgIklETDp0aG9yL0VudGl0eVJlcG9zaXRvcnlNb2R1bGUv
RW50aXR5UmVwb3NpdG9yeToxLjAiLCBvYmpyZWY9MHg4ODYzNzM0KSBhdCBvbW5pMzAvcHlPYmpl
Y3RSZWYuY2M6NDcyCiM3ICAweDQwMWVlYzA2IGluIHB5UE9BX2NyZWF0ZV9yZWZlcmVuY2Vfd2l0
aF9pZCAoc2VsZj0weDAsIGFyZ3M9MHg4MzJmZGFjKQogICAgYXQgb21uaTMwL3B5UE9BRnVuYy5j
Yzo3NTUKIzggIDB4ODA1OGNjNiBpbiBjYWxsX2NmdW5jdGlvbiAoZnVuYz0weDgxYzM5YTAsIGFy
Zz0weDgzMmZkYWMsIGt3PTB4MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI4MzgKIzkgIDB4ODA1
OGJiOCBpbiBjYWxsX29iamVjdCAoZnVuYz0weDgxYzM5YTAsIGFyZz0weDgzMmZkYWMsIGt3PTB4
MCkKICAgIGF0IFB5dGhvbi9jZXZhbC5jOjI4MDEKIzEwIDB4ODA1OTMyYiBpbiBkb19jYWxsIChm
dW5jPTB4ODFjMzlhMCwgcHBfc3RhY2s9MHhiZTdmZjQ3YywgbmE9Mywgbms9MCkKICAgIGF0IFB5
dGhvbi9jZXZhbC5jOjMxMTYKIzExIDB4ODA1NzdhMiBpbiBldmFsX2NvZGUyIChjbz0weDgxZmE4
ZTgsIGdsb2JhbHM9MHg4MjJhYTVjLCBsb2NhbHM9MHgwLCAKICAgIGFyZ3M9MHg4NGYyMDg0LCBh
cmdjb3VudD0zLCBrd3M9MHg4NGYyMDkwLCBrd2NvdW50PTAsIGRlZnM9MHgwLCAKICAgIGRlZmNv
dW50PTAsIGNsb3N1cmU9MHgwKSBhdCBQeXRob24vY2V2YWwuYzoxOTQ4CiMxMiAweDgwNTkwODQg
aW4gZmFzdF9mdW5jdGlvbiAoZnVuYz0weDgyMmIwNmMsIHBwX3N0YWNrPTB4YmU3ZmY1OGMsIG49
MywgCi0tLVR5cGUgPHJldHVybj4gdG8gY29udGludWUsIG9yIHEgPHJldHVybj4gdG8gcXVpdC0t
LQogICAgbmE9Mywgbms9MCkgYXQgUHl0aG9uL2NldmFsLmM6MzAxNQojMTMgMHg4MDU3ODExIGlu
IGV2YWxfY29kZTIgKGNvPTB4ODFhNjkzMCwgZ2xvYmFscz0weDgxYTQxODQsIGxvY2Fscz0weDAs
IAogICAgYXJncz0weDg1MDQzYzAsIGFyZ2NvdW50PTEsIGt3cz0weDAsIGt3Y291bnQ9MCwgZGVm
cz0weDAsIGRlZmNvdW50PTAsIAogICAgY2xvc3VyZT0weDApIGF0IFB5dGhvbi9jZXZhbC5jOjE5
NjYKIzE0IDB4ODA1OGY4OSBpbiBjYWxsX2V2YWxfY29kZTIgKGZ1bmM9MHg4MzQyODBjLCBhcmc9
MHg4NTA0M2I0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyOTU5CiMxNSAweDgwNThi
YTQgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4MzQyODBjLCBhcmc9MHg4NTA0M2I0LCBrdz0weDAp
CiAgICBhdCBQeXRob24vY2V2YWwuYzoyNzk5CiMxNiAweDgwNThlNGIgaW4gY2FsbF9tZXRob2Qg
KGZ1bmM9MHg4MzQyODBjLCBhcmc9MHg4MGNjNTg0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2
YWwuYzoyOTE2CiMxNyAweDgwNThiOGQgaW4gY2FsbF9vYmplY3QgKGZ1bmM9MHg4NGU3MTJjLCBh
cmc9MHg4MGNjNTg0LCBrdz0weDApCiAgICBhdCBQeXRob24vY2V2YWwuYzoyNzk3CiMxOCAweDgw
NThhOWQgaW4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMgKGZ1bmM9MHg4NGU3MTJjLCBh
cmc9MHg4MGNjNTg0LCAKICAgIGt3PTB4MCkgYXQgUHl0aG9uL2NldmFsLmM6MjczNAojMTkgMHg0
MDFmNjVmZSBpbiBvbW5pUHk6OlB5X29tbmlTZXJ2YW50OjpfZGlzcGF0Y2ggKHRoaXM9MHg4ODYy
NmE4LCAKICAgIGdpb3Bfcz1AMHhiZTdmZjk5MCkgYXQgb21uaTMwL3B5U2VydmFudC5jYzo1NDQK
IzIwIDB4NDAyOWQ3MWMgaW4gb21uaU9yYlBPQTo6ZGlzcGF0Y2ggKHRoaXM9MHg4ODVmMzQ4LCBn
aW9wX3M9QDB4YmU3ZmY5OTAsIAogICAgaWQ9MHhiZTdmZjgzYykgYXQgLi4vcG9hLmNjOjEzMzEK
IzIxIDB4NDAyOTI3NzkgaW4gb21uaUxvY2FsSWRlbnRpdHk6OmRpc3BhdGNoICh0aGlzPTB4YmU3
ZmY4M2MsIAogICAgZ2lvcF9zPUAweGJlN2ZmOTkwKSBhdCAuLi9sb2NhbElkZW50aXR5LmNjOjE0
MgojMjIgMHg0MDJhMjMxOCBpbiBvbW5pT3JiUE9BOjpkaXNwYXRjaF90b19zbCAodGhpcz0weDg4
NWYzNDgsIAogICAgZ2lvcF9zPUAweGJlN2ZmOTkwLCAKICAgIGtleT0weDg4NWY5NTggIv9aT0RC
Q29yYmFTZXJ2ZXI5ODg4MzgzMDYuMjcx/zk4ODgzODMyNC41NzAuODQ0OTMwNTUxODU1/qJ58Dot
LS1UeXBlIDxyZXR1cm4+IHRvIGNvbnRpbnVlLCBvciBxIDxyZXR1cm4+IHRvIHF1aXQtLS0KqiIs
IGtleXNpemU9ODIpIGF0IC4uL3BvYS5jYzoyNTUzCiMyMyAweDQwMjlkOTc1IGluIG9tbmlPcmJQ
T0E6OmRpc3BhdGNoICh0aGlzPTB4ODg1ZjM0OCwgZ2lvcF9zPUAweGJlN2ZmOTkwLCAKICAgIGtl
eT0weDg4NWY5NTggIv9aT0RCQ29yYmFTZXJ2ZXI5ODg4MzgzMDYuMjcx/zk4ODgzODMyNC41NzAu
ODQ0OTMwNTUxODU1/qJ58DqqIiwga2V5c2l6ZT04MikgYXQgLi4vcG9hLmNjOjEzNjQKIzI0IDB4
NDAyYzA2ZDcgaW4gR0lPUF9TOjpIYW5kbGVSZXF1ZXN0ICh0aGlzPTB4YmU3ZmY5OTAsIGJ5dGVv
cmRlcj10cnVlKQogICAgYXQgLi4vZ2lvcFNlcnZlci5jYzo2MTMKIzI1IDB4NDAyYmZkZDUgaW4g
R0lPUF9TOjpkaXNwYXRjaGVyIChzPTB4ODRkNmVjMCkgYXQgLi4vZ2lvcFNlcnZlci5jYzo0MDMK
IzI2IDB4NDAyZGNiOTEgaW4gdGNwU29ja2V0V29ya2VyOjpfcmVhbFJ1biAoYXJnPTB4ODRkNmVj
MCkKICAgIGF0IC4uL3RjcFNvY2tldE1UZmFjdG9yeS5jYzoxNjIyCiMyNyAweDQwMmZjMDY0IGlu
IG9tbmlPUkI6Omdpb3BTZXJ2ZXJUaHJlYWRXcmFwcGVyOjpydW4gKHRoaXM9MHg4MmU3YzI4LCAK
ICAgIGZuPTB4NDAyZGNiMWMgPHRjcFNvY2tldFdvcmtlcjo6X3JlYWxSdW4odm9pZCAqKT4sIGFy
Zz0weDg0ZDZlYzApCiAgICBhdCAuLi8uLi8uLi8uLi8uLi9pbmNsdWRlL29tbmlPUkIzL29tbmlP
UkIuaDo1NDEKIzI4IDB4NDAyZGNiMTEgaW4gdGNwU29ja2V0V29ya2VyOjpydW4gKHRoaXM9MHg4
NGRjOTI4LCBhcmc9MHg4NGQ2ZWMwKQogICAgYXQgLi4vdGNwU29ja2V0TVRmYWN0b3J5LmNjOjE1
OTQKIzI5IDB4NDAzNGY0MDQgaW4gb21uaV90aHJlYWRfd3JhcHBlciAocHRyPTB4ODRkYzkyOCkg
YXQgLi4vcG9zaXguY2M6NDIxCiMzMCAweDQwMDI2MDY1IGluIHB0aHJlYWRfc3RhcnRfdGhyZWFk
ICgpIGZyb20gL2xpYi9saWJwdGhyZWFkLnNvLjAKKGdkYikgdGhyZWFkIDEyCltTd2l0Y2hpbmcg
dG8gdGhyZWFkIDEyIChUaHJlYWQgMjE0NjgpXQojMCAgMHg0MDA4YThmZSBpbiBzaWdzdXNwZW5k
ICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKGdkYikgYnQKIzAgIDB4NDAwOGE4ZmUgaW4gc2lnc3Vz
cGVuZCAoKSBmcm9tIC9saWIvbGliYy5zby42CiMxICAweDQwMDI4N2E5IGluIF9fcHRocmVhZF93
YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbCAoKQogICBmcm9tIC9saWIvbGlicHRocmVhZC5zby4wCiMy
ICAweDQwMDJhODBhIGluIF9fcHRocmVhZF9hbHRfbG9jayAoKSBmcm9tIC9saWIvbGlicHRocmVh
ZC5zby4wCiMzICAweDQwMDI2ZjEyIGluIHB0aHJlYWRfbXV0ZXhfbG9jayAoKSBmcm9tIC9saWIv
bGlicHRocmVhZC5zby4wCiM0ICAweDQwMzRlNmNkIGluIG9tbmlfbXV0ZXg6OmxvY2sgKHRoaXM9
MHg4MWQ1ZGI4KSBhdCAuLi9wb3NpeC5jYzoxMTIKIzUgIDB4NDAyOWVkMzIgaW4gb21uaU9yYlBP
QTo6ZG9fZGVzdHJveSAodGhpcz0weDg4NGRiNDAsIAogICAgZXRoZXJlYWxpemVfb2JqZWN0cz1m
YWxzZSkgYXQgLi4vcG9hLmNjOjE1OTgKIzYgIDB4NDAyYTQ5NWEgaW4gZGVzdHJveWVyX3RocmVh
ZF9mbiAoYXJncz0weDg1MjJmMjApIGF0IC4uL3BvYS5jYzoyOTYzCiM3ICAweDQwMzRmMzllIGlu
IG9tbmlfdGhyZWFkX3dyYXBwZXIgKHB0cj0weDg4NDUxZjApIGF0IC4uL3Bvc2l4LmNjOjQxMQoj
OCAgMHg0MDAyNjA2NSBpbiBwdGhyZWFkX3N0YXJ0X3RocmVhZCAoKSBmcm9tIC9saWIvbGlicHRo
cmVhZC5zby4wCihnZGIpIA==

--------------Boundary-00=_2TAQHENEZWH1WX6PXT2P
Content-Type: text/x-java;
  charset="iso-8859-1";
  name="ZODBCorbaFramework.py"
Content-Transfer-Encoding: base64
Content-Description: Python CORBA Server framework
Content-Disposition: attachment; filename="ZODBCorbaFramework.py"

aW1wb3J0IF9fbWFpbl9fCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZAppbXBvcnQgdGltZQppbXBv
cnQgcmFuZG9tCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8K
CmltcG9ydCBvbW5pT1JCCmZyb20gb21uaU9SQiBpbXBvcnQgQ09SQkEsIFBvcnRhYmxlU2VydmVy
LCBQb3J0YWJsZVNlcnZlcl9fUE9BCgojaW1wb3J0IHRlc3QKI2ltcG9ydCB0ZXN0X19QT0EKCmlt
cG9ydCBaT0RCCmZyb20gWk9EQiBpbXBvcnQgVHJhbnNhY3Rpb24KZnJvbSBaT0RCLlBPU0V4Y2Vw
dGlvbiBpbXBvcnQgQ29uZmxpY3RFcnJvcgoKZnJvbSB6TE9HIGltcG9ydCBMT0csIFRSQUNFLCBE
RUJVRywgQkxBVEhFUiwgSU5GTywgUFJPQkxFTSwgRVJST1IsIFBBTklDCgpkZWYgZm9ybWF0RXhj
ZXB0aW9uKGV4Y2VwdGlvbik6CiAgICAiIiIKICAgIFVzZWQgdG8gcmV0dXJuIGEgbmljZSBzdGFj
ayB0cmFjZSB3aXRoIG91ciBjb3JiYSBleGNlcHRpb25zCiAgICAiIiIKICAgIHN0cklPID0gU3Ry
aW5nSU8oKQogICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN0cklPKQogICAgcmV0dXJuIHN0
cklPLmdldHZhbHVlKCkKCk1BWF9DT01NSVRfQVRURU1QVFM9MTAKCiMjIFNldHVwIERvbWFpbiB0
byBTZXJ2YW50IE1hcAojIFRoaXMgaXMgYSBtYXAgZnJvbSBEb21haW4gY2xhc3MgdG8gU2VydmFu
dCBjbGFzcwojIEV2ZXJ5IHNlcnZhbnQgc2hvdWxkIGhhdmUgYW4gZW50cnkgaGVyZS4KCl9kb21h
aW5Ub1NlcnZhbnQgPSBOb25lCmRlZiBnZXREb21haW5Ub1NlcnZhbnRNYXAoKToKICAgICIiIlJl
dHVybnMgYSBtYXBwaW5nIG9mIGRvbWFpbiBjbGFzcyB0byBzZXJ2YW50IGNsYXNzLiIiIgogICAg
Z2xvYmFsIF9kb21haW5Ub1NlcnZhbnQKICAgIGlmIG5vdCBfZG9tYWluVG9TZXJ2YW50OgogICAg
ICAgIF9kb21haW5Ub1NlcnZhbnQgPSB7fQoKICAgIHJldHVybiBfZG9tYWluVG9TZXJ2YW50Cgpf
Y29yYmFUeXBlSWRUb0RvbWFpbiA9IE5vbmUKCmRlZiBnZXRDb3JiYVR5cGVJZFRvRG9tYWluTWFw
KCk6CiAgICAiIiIKICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIHNlcnZhbnQgY2xhc3MgbmFtZSB0
byBkb21haW4gY2xhc3MuCiAgICAiIiIKICAgIGdsb2JhbCBfY29yYmFUeXBlSWRUb0RvbWFpbgog
ICAgaWYgbm90IF9jb3JiYVR5cGVJZFRvRG9tYWluOgogICAgICAgIF9jb3JiYVR5cGVJZFRvRG9t
YWluID0ge30KICAgIHJldHVybiBfY29yYmFUeXBlSWRUb0RvbWFpbgoKCmRlZiByZWdpc3RlckRv
bWFpblRvU2VydmFudE1hcChkb21haW5LbGFzcywgc2VydmFudEtsYXNzKToKICAgICIiIgogICAg
UmVnaXN0ZXJzIGEgbWFwcGluZyBmcm9tIHRoZSBnaXZlbiBkb21haW4gY2xhc3MgdG8gc2VydmFu
dCBjbGFzcy4KICAgIFJlZ2lzdGVycyBhIG1hcHBpbmcgZnJvbSByZXBvc2l0b3J5IGlkIG9mIHRo
ZSBzZXJ2YW50IGNsYXNzIHRvIHRoZSBkb21haW4gY2xhc3MuCiAgICAiIiIKICAgIGdldERvbWFp
blRvU2VydmFudE1hcCgpW2RvbWFpbktsYXNzXSA9IHNlcnZhbnRLbGFzcwogICAgZ2V0Q29yYmFU
eXBlSWRUb0RvbWFpbk1hcCgpW0NPUkJBLmlkKHNlcnZhbnRLbGFzcyldID0gZG9tYWluS2xhc3MK
CgpkZWYgZ2V0RG9tYWluRm9yQ29yYmFUeXBlSWQodHlwZUlkKToKICAgICIiIgogICAgVGhpcyBm
dW5jdGlvbiByZXR1cm5zIGEgRG9tYWluIENsYXNzIHRvIGJlIHVzZWQgZm9yIHRoZSBnaXZlbiBj
b3JiYSByZXBvc2l0b3J5IElkLgogICAgSWYgbm8gRG9tYWluIENsYXNzIGhhcyBiZWVuIHJlZ2lz
dGVyZWQuCiAgICAiIiIKICAgIHJldHVybiBnZXRDb3JiYVR5cGVJZFRvRG9tYWluTWFwKCkuZ2V0
KHR5cGVJZCwgTm9uZSkKCgpkZWYgZ2V0U2VydmFudEZvckRvbWFpbihkb21haW5LbGFzcyk6CiAg
ICAiIiIKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIFNlcnZhbnQgQ2xhc3MgdG8gYmUgdXNl
ZCBmb3IgdGhlIGdpdmVuIGRvbWFpbiBDbGFzcy4KICAgIElmIG5vIFNlcnZhbnQgQ2xhc3MgaGFz
IGJlZW4gcmVnaXN0ZXJlZCwgVGhlIGRvbWFpbiBDbGFzcydzIGJhc2UgY2xhc3NlcwogICAgYXJl
IHNlYXJjaGVkIGZvciBhIGNvcnJlc3BvbmRpbmcgc2VydmFudC4KICAgICIiIgoKICAgIHNlcnZh
bnRLbGFzcyA9IE5vbmUKICAgIHNlcnZhbnRLbGFzcyA9IGdldERvbWFpblRvU2VydmFudE1hcCgp
LmdldChkb21haW5LbGFzcywgTm9uZSkKICAgICNGSVhNRSBzaG91bGQgdXNlIHN0YWNrLCBzaG91
bGQgcHJvYmFibHkgZ2l2ZSBwcmVjZWRlbmNlIHRvIGltbWVkaWF0ZSBzdXBlcmNsYXNzZXMKICAg
IGlmIG5vdCBzZXJ2YW50S2xhc3M6CiAgICAgICAgYmFzZXMgPSBkb21haW5LbGFzcy5fX2Jhc2Vz
X18KICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKICAgICAgICAgICAgc2VydmFudEtsYXNzID0g
Z2V0U2VydmFudEZvckRvbWFpbihiYXNlKQogICAgICAgICAgICBpZiBzZXJ2YW50S2xhc3M6CiAg
ICAgICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHNlcnZhbnRLbGFzcwoKCiMjIEVuZCBTZXR1
cCBEb21haW4gdG8gU2VydmFudCBNYXAKCiMjIyBTZXR1cCBQeXRob24gZXhjZXB0aW9uIHRvIENP
UkJBIGV4Y2VwdGlvbiBmYWN0b3J5IG1hcAojICAgIFRoZSBleGNlcHRpb24gZmFjdG9yeSBpcyBh
IGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIENvcmJhRXhjZXB0aW9ucyBmb3IgYQojICAgIGdpdmVu
IHB5dGhvbiBleGNlcHRpb24uICBUaGlzIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlCiMgICAg
ZXhjZXB0aW9uRmFjdG9yeSBoYXMgYmVlbiByZWdpc3RlcmVkIGluIHRoZSBnbG9iYWwKIyAgICBw
eXRob25Ub0NPUkJBRXhjZXB0aW9uRmFjdG9yeU1hcCB3aXRoIHRoZSBweXRob25FeGNlcHRpb24g
YXMgYSBrZXkuCiMjIwoKX3B5dGhvblRvQ09SQkFFeGNGYWN0b3J5ID0gTm9uZQpkZWYgZ2V0UHl0
aG9uVG9DT1JCQUV4Y0ZhY3RvcnlNYXAoKToKICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIHB5
dGhvbiBleGNlcHRpb24gdG8gQ09SQkEgZXhjZXB0aW9uIGZhY3RvcnkuIiIiCiAgICBnbG9iYWwg
X3B5dGhvblRvQ09SQkFFeGNGYWN0b3J5CiAgICBpZiBub3QgX3B5dGhvblRvQ09SQkFFeGNGYWN0
b3J5OgogICAgICAgIF9weXRob25Ub0NPUkJBRXhjRmFjdG9yeSA9IHt9CgogICAgcmV0dXJuIF9w
eXRob25Ub0NPUkJBRXhjRmFjdG9yeQoKCmRlZiBnZXRGYWN0b3J5Rm9yUHlFeGMoZG9tYWluRXhj
ZXB0aW9uS2xhc3MpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBDb3JiYSBF
eGNlcHRpb24gRmFjdG9yeSAoQ0VGKSB0byBiZSB1c2VkCiAgICBmb3IgdGhlIGdpdmVuIGRvbWFp
biBFeGNlcHRpb24gQ2xhc3MuCiAgICBUaGUgQ29yYmEgRXhjZXB0aW9uIEZhY3RvcnkgdGFrZXMg
YW4gZXhjZXB0aW9uIGFzIGFuIGFyZ3VtZW50IGFuZAogICAgcHJvY2Vzc2VzIGl0IGJ5IHRocm93
aW5nIGFuIGFwcHJvcHJpYXRlIENvcmJhIEV4Y2VwdGlvbi4KICAgIElmIG5vIGRvbWFpbiBFeGNl
cHRpb24gQ2xhc3MgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgVGhlIGRvbWFpbgogICAgRXhjZXB0aW9u
IENsYXNzJ3MgYmFzZSBjbGFzc2VzIGFyZSBzZWFyY2hlZCBmb3IgYSBjb3JyZXNwb25kaW5nIENF
Ri4KICAgICIiIgogICAgZmFjdG9yeSA9IE5vbmUKICAgIGZhY3RvcnkgPSBnZXRQeXRob25Ub0NP
UkJBRXhjRmFjdG9yeU1hcCgpLmdldChkb21haW5FeGNlcHRpb25LbGFzcywgTm9uZSkKICAgICNG
SVhNRSBzaG91bGQgdXNlIHN0YWNrLCBzaG91bGQgcHJvYmFibHkgZ2l2ZSBwcmVjZWRlbmNlIHRv
IGltbWVkaWF0ZSBzdXBlcmNsYXNzZXMKICAgIGlmIG5vdCBmYWN0b3J5OgogICAgICAgIGJhc2Vz
ID0gZG9tYWluRXhjZXB0aW9uS2xhc3MuX19iYXNlc19fCiAgICAgICAgZm9yIGJhc2UgaW4gYmFz
ZXM6CiAgICAgICAgICAgIGZhY3RvcnkgPSBnZXRGYWN0b3J5Rm9yUHlFeGMoYmFzZSkKICAgICAg
ICAgICAgaWYgZmFjdG9yeToKICAgICAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gZmFjdG9y
eQoKZGVmIHJlZ2lzdGVyUHl0aG9uVG9DT1JCQUV4Y0ZhY3RvcnlNYXAocHl0aG9uRXhjLCBDT1JC
QUV4Y0ZhY3RvcnkpOgogICAgIiIiUmVnaXN0ZXJzIGEgbWFwcGluZyBvZiB0aGUgZ2l2ZW4gcHl0
aG9uIGV4Y2VwdGlvbiB0byB0aGUKICAgIGdpdmVuIENPUkJBIGV4Y2VwdGlvbiBmYWN0b3J5LiIi
IgogICAgZ2V0UHl0aG9uVG9DT1JCQUV4Y0ZhY3RvcnlNYXAoKVtweXRob25FeGNdID0gQ09SQkFF
eGNGYWN0b3J5CgpkZWYgX2dldERvbWFpbklkKGRvbWFpbk9iaik6CiAgICAiIiJSZXR1cm5zIHRo
ZSBkb21haW4gaWQgZm9yIHRoZSBnaXZlbiBkb21haW4gb2JqZWN0LiIiIgogICAgaWYgaGFzYXR0
cihkb21haW5PYmosICdoYXNoJyk6CiAgICAgICAgcmV0dXJuIHN0cihoYXNoKGRvbWFpbk9iaikp
CiAgICBlbHNlOgogICAgICAgIHJldHVybiBzdHIoaWQoZG9tYWluT2JqKSkKCmRlZiBnZXRPYmpS
ZWYoZG9tYWluT2JqLCBvYmpSZWZHZW5lcmF0b3IpOgogICAgIiIiR2l2ZW4gYSBkb21haW4gb2Jq
ZWN0LCBnZXQgYW4gaWQgZm9yIGl0IGFuZCBnZW5lcmF0ZQogICAgYSBDT1JCQSBvYmplY3QgcmVm
ZXJlbmNlIGZvciBpdC4iIiIKCiAgICBpZiBkb21haW5PYmogPT0gTm9uZToKICAgICAgICByZXR1
cm4gTm9uZQogICAgb2JqcmVmID0gTm9uZQoKICAgIGNvcmJhSWQgPSBfZ2V0RG9tYWluSWQoZG9t
YWluT2JqKQoKICAgIGtsYXNzID0gZG9tYWluT2JqLl9fY2xhc3NfXwogICAgc2VydmFudEtsYXNz
ID0gZ2V0U2VydmFudEZvckRvbWFpbihrbGFzcykKICAgIGlmIHNlcnZhbnRLbGFzczoKICAgICAg
ICBvYmpyZWYgPSBvYmpSZWZHZW5lcmF0b3IoY29yYmFJZCwgZG9tYWluT2JqLCBzZXJ2YW50S2xh
c3MpCiAgICBlbHNlOgogICAgICAgIHJhaXNlICJDb3VsZG4ndCBmaW5kIHNlcnZhbnQgY2xhc3Mg
Zm9yIGRvbWFpbiBjbGFzcyAlcyIgJSBrbGFzcwogICAgcmV0dXJuIG9ianJlZgoKZGVmIGdldE9i
alJlZkxpc3QoZG9tYWluTGlzdCwgb2JqUmVmR2VuZXJhdG9yKToKICAgICIiIkxpa2UgZ2V0T2Jq
UmVmKCksIGJ1dCBmb3IgbGlzdCIiIgoKICAgIHJlc3VsdCA9IFtdCiAgICBmb3IgbyBpbiBkb21h
aW5MaXN0OgogICAgICAgIGNvcmJhSWQgPSBfZ2V0RG9tYWluSWQobykKICAgICAgICBrbGFzcyA9
IG8uX19jbGFzc19fCiAgICAgICAgc2VydmFudEtsYXNzID0gZ2V0U2VydmFudEZvckRvbWFpbihr
bGFzcykKICAgICAgICBpZiBzZXJ2YW50S2xhc3M6CiAgICAgICAgICAgIG9ianJlZiA9IG9ialJl
ZkdlbmVyYXRvcihjb3JiYUlkLCBvLCBzZXJ2YW50S2xhc3MpCiAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQob2JqUmVmR2VuZXJhdG9yKGNvcmJhSWQsIG8sIHNlcnZhbnRLbGFzcykpCiAgICByZXR1
cm4gcmVzdWx0CgpkZWYgZ2V0RG9tYWluT2JqTGlzdChvYmpSZWZMaXN0LCBkb21haW5PYmpMb29r
dXBGdW5jKToKICAgICIiIlV0aWxpdHkgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkb21haW4gb2JqZWN0
IGZyb20gYQogICAgbGlzdCBvZiBvYmplY3QgcmVmZXJlbmNlcy4iIiIKCiAgICBkb21haW5PYmpM
aXN0ID0gW10KICAgIGlmIG9ialJlZkxpc3Q6CiAgICAgICAgZm9yIG9ialJlZiBpbiBvYmpSZWZM
aXN0OgogICAgICAgICAgICBpZiBvYmpSZWYgIT0gTm9uZToKICAgICAgICAgICAgICAgIGRvbWFp
bk9iakxpc3QuYXBwZW5kKGRvbWFpbk9iakxvb2t1cEZ1bmMob2JqUmVmKSkKICAgIHJldHVybiBk
b21haW5PYmpMaXN0CgoKIyAtLS0tLS0tLS0tLS0KIyBHbG9iYWwgZ2V0VGhvckNvcmJhU2Vzc2lv
bigpIHN1cHBvcnQKIyBJbXBsZW1lbnRzIFRocmVhZCBTcGVjaWZpYyBTdG9yYWdlIHBhdHRlcm4g
ZnJvbSBQT1NBMgpfdGhyZWFkVG9TZXNzaW9uTWFwID0ge30KZGVmIGdldFRob3JDb3JiYVNlc3Np
b24oKToKICAgIGlkID0gdGhyZWFkLmdldF9pZGVudCgpCiAgICByZXR1cm4gX3RocmVhZFRvU2Vz
c2lvbk1hcFtpZF0KZGVmIHJlZ2lzdGVyVGhvckNvcmJhU2Vzc2lvbih0aG9yQ29yYmFTZXNzaW9u
KToKICAgIGlkID0gdGhyZWFkLmdldF9pZGVudCgpCiAgICBfdGhyZWFkVG9TZXNzaW9uTWFwW2lk
XSA9IHRob3JDb3JiYVNlc3Npb24KZGVmIHVucmVnaXN0ZXJUaG9yQ29yYmFTZXNzaW9uKGZvcmNl
ID0gMSk6CiAgICBpZCA9IHRocmVhZC5nZXRfaWRlbnQoKQogICAgaWYgZm9yY2Ugb3IgX3RocmVh
ZFRvU2Vzc2lvbk1hcC5oYXNfa2V5KGlkKToKICAgICAgICBkZWwgX3RocmVhZFRvU2Vzc2lvbk1h
cFtpZF0KICAgICAgICAKX19tYWluX18uX19idWlsdGluc19fLmdldFRob3JDb3JiYVNlc3Npb249
Z2V0VGhvckNvcmJhU2Vzc2lvbgoKIyAtLS0tLS0tLS0tLS0KIyBTZXR1cCBnbG9iYWwgZ2V0X3Ry
YW5zYWN0aW9uKCkgdG8gdXNlIGdldFRob3JTZXNzaW9uKCkuZ2V0X3RyYW5zYWN0aW9uKCkKX3Ro
cmVhZFRvVHJhbnNNYXAgPSB7fQpvcmlnX2dldF90cmFuc2FjdGlvbiA9IF9fbWFpbl9fLl9fYnVp
bHRpbnNfXy5nZXRfdHJhbnNhY3Rpb24KZGVmIGdldF90cmFuc2FjdGlvbigpOgogICAgdHJ5Ogog
ICAgICAgIHJldHVybiBnZXRUaG9yQ29yYmFTZXNzaW9uKCkuZ2V0X3RyYW5zYWN0aW9uKCkKICAg
IGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICByZXR1cm4gb3JpZ19nZXRfdHJhbnNhY3Rpb24oKQoK
X19tYWluX18uX19idWlsdGluc19fLmdldF90cmFuc2FjdGlvbj1nZXRfdHJhbnNhY3Rpb24KIyAt
LS0tLS0tLS0tLS0KCmNsYXNzIFNlcnZhbnRIZWxwZXI6CiAgICAiIiJEb2N1bWVudGF0aW9uIGlu
dGVyZmFjZSBmb3IgU2VydmFudHMgY29uc3RydWN0b3IgcmVxdWlyZW1lbnQuCiAgICBJbXBsZW1l
bnRlZCBpbiB0aGUgU2VydmFudExvY2F0b3IiIiIKICAgIGRlZiBvYmpSZWZHZW5lcmF0b3Ioc2Vs
ZiwgaWQsIG9iaiwgc2VydmFudEtsYXNzKToKICAgICAgICBwYXNzCiAgICBkZWYgbG9va3VwRG9t
YWluT2JqKHNlbGYsIG9ialJlZik6CiAgICAgICAgcGFzcwogICAgZGVmIHJlbW92ZURvbWFpbk9i
aihzZWxmLCBkb21haW5PYmopOgogICAgICAgIHBhc3MKCmNsYXNzIEJhc2VTZXJ2YW50OgogICAg
ZGVmIF9fcmFpc2VDb3JiYUV4Y2VwdGlvbihzZWxmLCBleGMpOgogICAgICAgIGZhY3RvcnkgPSBn
ZXRGYWN0b3J5Rm9yUHlFeGMoZXhjLl9fY2xhc3NfXykKICAgICAgICBpZiBmYWN0b3J5OgogICAg
ICAgICAgICBmYWN0b3J5KGV4YykKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShleGMsIENPUkJBLlVzZXJFeGNlcHRpb24pOgogICAgICAgICAgICAgICAgaW1wb3J0
IHRyYWNlYmFjawogICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAg
ICAgIHJhaXNlCgogICAgZGVmIF90cnlGdW5jdGlvbihzZWxmLCBmdW5jLCBhcmdzKToKICAgICAg
ICAiIiIKICAgICAgICBBcHBseXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHRoZSBhcmd1bWVudHMg
YW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICAgICAgICBUaHJvd3MgYW4gYXBwcm9wcmlhdGUgZXhj
ZXB0aW9uIHVwb24gZmFpbHVyZS4KICAgICAgICAiIiIKICAgICAgICB0cnk6CiAgICAgICAgICAg
IHJlc3VsdCA9IGFwcGx5KGZ1bmMsIGFyZ3MpCiAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAg
ICAgICBleGNlcHQgQ29uZmxpY3RFcnJvcjoKICAgICAgICAgICAgcmFpc2UKICAgICAgICBleGNl
cHQgRXhjZXB0aW9uLCBleGM6CiAgICAgICAgICAgIHNlbGYuX19yYWlzZUNvcmJhRXhjZXB0aW9u
KGV4YykKCiAgICBkZWYgX3RyeUNvbW1pdEZ1bmN0aW9uKHNlbGYsIGZ1bmMsIGFyZ3MpOgogICAg
ICAgICIiIgogICAgICAgIFVzZXMgX3RyeUZ1bmN0aW9uIHRvIGFwcGx5IHRoZSBnaXZlbiBmdW5j
dGlvbiB0byB0aGUgYXJndW1lbnRzCiAgICAgICAgYW5kIHRoZW4gcGVyZm9ybXMgYSBjb21taXQu
CiAgICAgICAgVGhyb3dzIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiB1cG9uIGZhaWx1cmUuCiAg
ICAgICAgIiIiCiAgICAgICAgc2xlZXBUaW1lPS4wNQogICAgICAgIGZvciBpIGluIHJhbmdlKE1B
WF9DT01NSVRfQVRURU1QVFMpOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICByZXN1
bHQgPSBzZWxmLl90cnlGdW5jdGlvbihmdW5jLCBhcmdzKQogICAgICAgICAgICAgICAgZ2V0X3Ry
YW5zYWN0aW9uKCkuY29tbWl0KCkKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKCiAgICAg
ICAgICAgIGV4Y2VwdCBDb25mbGljdEVycm9yOgogICAgICAgICAgICAgICAgZ2V0X3RyYW5zYWN0
aW9uKCkuYWJvcnQoKQogICAgICAgICAgICAgICAgdGltZS5zbGVlcChzbGVlcFRpbWUpCiAgICAg
ICAgICAgICAgICBzbGVlcFRpbWUgPSBzbGVlcFRpbWUgKiAxLjUKICAgICAgICAgICAgCiAgICAg
ICAgZXhjID0gQ29uZmxpY3RFcnJvcigiQ291bGRuJ3QgY29tbWl0IGluICVzIHRyaWVzISIgJSBN
QVhfQ09NTUlUX0FUVEVNUFRTKQogICAgICAgIHNlbGYuX19yYWlzZUNvcmJhRXhjZXB0aW9uKGV4
YykKCmNsYXNzIFNlcnZhbnQoQmFzZVNlcnZhbnQpOgogICAgIiIiQWJzdHJhY3QgU2VydmFudCB0
aGF0IHRha2VzIGEgZG9tYWluIG9iamVjdCB0byB3cmFwCiAgICBhbmQgYSBTZXJ2YW50SGVscGVy
IHRvIGdldCBvYmplY3QgcmVmZXJlbmNlIHRoaW5ncyBkb25lLiIiIgogICAgZGVmIF9faW5pdF9f
KHNlbGYsIHNlcnZhbnRIZWxwZXIpOgogICAgICAgIHNlbGYuX3NlcnZhbnRIZWxwZXIgPSBzZXJ2
YW50SGVscGVyCiAgICAgICAgc2VsZi5fZG9tYWluT2JqID0gTm9uZQoKICAgIGRlZiBfbG9hZChz
ZWxmLCBkb21haW5PYmopOgogICAgICAgIHNlbGYuX2RvbWFpbk9iaiA9IGRvbWFpbk9iagoKICAg
IGRlZiBfZW1wdHkoc2VsZik6CiAgICAgICAgc2VsZi5fZG9tYWluT2JqID0gTm9uZQoKY2xhc3Mg
UmVtb3ZlYWJsZVNlcnZhbnQoU2VydmFudCk6CiAgICBkZWYgcmVtb3ZlKHNlbGYpOgogICAgICAg
IHNlbGYuX3NlcnZhbnRIZWxwZXIucmVtb3ZlRG9tYWluT2JqKHNlbGYuX2RvbWFpbk9iaikKCmNs
YXNzIFpPREJDb3JiYVNlcnZlcihCYXNlU2VydmFudCk6CiAgICAiIiIKICAgIFN1YmNsYXNzZXMg
bXVzdCBhbHNvIHN1YmxjYXNzIGEgQ09SQkEgc2VydmFudC4KICAgICIiIgoKICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzdG9yYWdlKToKICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgIExP
RygiWk9EQkNvcmJhRnJhbWV3b3JrIiwKICAgICAgICAgICAgICAgIFRSQUNFLAogICAgICAgICAg
ICAgICAgIlpPREJDb3JiYVNlcnZlci5fX2luaXRfXygpIiwKICAgICAgICAgICAgICAgICJUaHJl
YWQgaWQ9JXMiICUgdGhyZWFkLmdldF9pZGVudCgpKQogICAgICAgICMgSW5pdGlhbGlzZSB0aGUg
T1JCIGFuZCBhY3RpdmF0ZSB0aGUgcm9vdCBQT0EuCiAgICAgICAgb3JiID0gQ09SQkEuT1JCX2lu
aXQoc3lzLmFyZ3YsIENPUkJBLk9SQl9JRCkKICAgICAgICBzZWxmLnJvb3RQT0EgPSBvcmIucmVz
b2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIlJvb3RQT0EiKQogICAgICAgIHJvb3RQT0FNYW5hZ2Vy
ID0gc2VsZi5yb290UE9BLl9nZXRfdGhlX1BPQU1hbmFnZXIoKQogICAgICAgIHJvb3RQT0FNYW5h
Z2VyLmFjdGl2YXRlKCkKCiAgICAgICAgIyBDcmVhdGUgYSBjaGlsZCBQT0Egd2l0aCB0aGUgcmln
aHQgcG9saWNpZXMKICAgICAgICBwcyA9IFtzZWxmLnJvb3RQT0EuY3JlYXRlX3RocmVhZF9wb2xp
Y3koUG9ydGFibGVTZXJ2ZXIuT1JCX0NUUkxfTU9ERUwpLAogICAgICAgICAgICAgIHNlbGYucm9v
dFBPQS5jcmVhdGVfaWRfdW5pcXVlbmVzc19wb2xpY3koUG9ydGFibGVTZXJ2ZXIuVU5JUVVFX0lE
KSwKICAgICAgICAgICAgICBzZWxmLnJvb3RQT0EuY3JlYXRlX2ltcGxpY2l0X2FjdGl2YXRpb25f
cG9saWN5KFBvcnRhYmxlU2VydmVyLklNUExJQ0lUX0FDVElWQVRJT04pLF0KCiAgICAgICAgdG1w
ID0gc3RyKHRpbWUudGltZSgpKQoKICAgICAgICBzZWxmLl9wb2EgPSBzZWxmLnJvb3RQT0EuY3Jl
YXRlX1BPQSgiWk9EQkNvcmJhU2VydmVyIit0bXAsIHJvb3RQT0FNYW5hZ2VyLCBwcykKICAgICAg
ICBzZWxmLl9wb2FNYW5hZ2VyID0gc2VsZi5fcG9hLl9nZXRfdGhlX1BPQU1hbmFnZXIoKQoKICAg
ICAgICBzZWxmLl9pbml0REIoc3RvcmFnZSkKCiAgICBkZWYgX2luaXREQihzZWxmLCBzdG9yYWdl
KToKICAgICAgICBzZWxmLl9kYiA9IFpPREIuREIoc3RvcmFnZSkKICAgICAgICBzZWxmLl9kYi5z
ZXRQb29sU2l6ZSgxMDAwMCkKCiAgICBkZWYgX2dldERCKHNlbGYpOgogICAgICAgIHJldHVybiBz
ZWxmLl9kYgoKICAgIGRlZiBfZGVmYXVsdF9QT0Eoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYu
X3BvYQoKICAgIGRlZiBnZXRTZXNzaW9uKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl90cnlD
b21taXRGdW5jdGlvbihzZWxmLl9fZ2V0U2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCkpLmdldE9ialJlZigpCiAgICBkZWYgX19nZXRTZXNzaW9uKHNlbGYp
OgogICAgICAgIHJldHVybiBTZXNzaW9uKHNlbGYuX2RiLm9wZW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9wb2EsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9hTWFuYWdl
cikKCmNsYXNzIFNlc3Npb24oQmFzZVNlcnZhbnQpOgogICAgIiIiCiAgICBTdWJjbGFzc2VzIG11
c3QgYWxzbyBzdWJsY2FzcyBhIENPUkJBIHNlcnZhbnQuICBNaW1pY3MKICAgIGludGVyZmFjZSBv
ZiBTZXJ2YW50IGNsYXNzIHRvIHVzZSBzZXJ2YW50TG9jYXRvcgogICAgIiIiCgogICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvbm5lY3Rpb24sIHBhcmVudFBPQSwgUE9BTWFuYWdlcik6CiAgICAgICAg
c2VsZi5faW5pdERCKGNvbm5lY3Rpb24pCgogICAgICAgIHNlbGYuX2luaXRQT0EocGFyZW50UE9B
LCBQT0FNYW5hZ2VyKQoKICAgIGRlZiBfZGVmYXVsdF9QT0Eoc2VsZik6CiAgICAgICAgcmV0dXJu
IHNlbGYuX3BvYQoKICAgIGRlZiBnZXRPYmpSZWYoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYu
X2RlZmF1bHRfUE9BKCkuY3JlYXRlX3JlZmVyZW5jZV93aXRoX2lkKCBcCiAgICAgICAgICAgICIl
cyIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgQ09SQkEuaWQoc2VsZi5f
X2NsYXNzX18pKQoKICAgIGRlZiBnZXRfdHJhbnNhY3Rpb24oc2VsZik6CiAgICAgICAgaWYgbm90
IGhhc2F0dHIoc2VsZiwgJ190cmFucycpIG9yIG5vdCBzZWxmLl90cmFuczoKICAgICAgICAgICAg
c2VsZi5fdHJhbnMgPSBUcmFuc2FjdGlvbi5UcmFuc2FjdGlvbigxKQoKICAgICAgICByZXR1cm4g
c2VsZi5fdHJhbnMKCiAgICBkZWYgX2luaXREQihzZWxmLCBjb25uZWN0aW9uKToKICAgICAgICBz
ZWxmLl9jb25uZWN0aW9uID0gY29ubmVjdGlvbgogICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9j
b25uZWN0aW9uLnJvb3QoKQoKICAgIGRlZiBfZ2V0REJDb25uZWN0aW9uKHNlbGYpOgogICAgICAg
IHJldHVybiBzZWxmLl9jb25uZWN0aW9uCgogICAgZGVmIF9pbml0UE9BKHNlbGYsIHBhcmVudFBP
QSwgUE9BTWFuYWdlcik6CiAgICAgICAgc2VsZi5fcG9hLCBzZWxmLl9zZXJ2YW50TG9jYXRvciA9
IHNlbGYuX2NyZWF0ZVBvYUFuZFNlcnZhbnRMb2NhdG9yKHBhcmVudFBPQSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUE9BTWFuYWdlcikKICAgICAgICAjIGFkZCBTZXNzaW9uIFNlcnZhbnQgcmVmZXJlbmNl
CiAgICAgICAgc2VsZi5fc2VydmFudExvY2F0b3IuYWRkU2Vzc2lvbigiJXMiICUgc2VsZi5fX2Ns
YXNzX18uX19uYW1lX18gLCBzZWxmKQoKCiAgICBkZWYgX2VudGVyU2Vzc2lvbihzZWxmLCB0cmFu
cz1Ob25lKToKICAgICAgICAiIiJUaGlzIHdpbGwgc2V0dXAgZ2xvYmFsIHRocmVhZCBpbmRleGVz
IHRvIHRyYW5zYWN0aW9uIGZvciB0aGUgY3VycmVudAogICAgICAgIFRocmVhZCBzbyB0aGF0IGFs
bCBQZXJzaXN0ZW50IG9iamVjdCBtb2RpZmljYXRpb25zIHdpbGwgYmUgcmVnaXN0ZXJkIG9uCiAg
ICAgICAgdGhlIHJpZ2h0IFRyYW5zYWN0aW9uLiIiIgoKICAgICAgICByZWdpc3RlclRob3JDb3Ji
YVNlc3Npb24oc2VsZikKCiAgICAgICAgY29ubiA9IHNlbGYuX2dldERCQ29ubmVjdGlvbigpCiAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgY29ubi5zeW5jKCkKCiAgICAgICAgIyBOZWVkIHRo
aXMgYmVjYXVzZSBvZiBDb25uZWN0aW9uIENhY2hlIGJ1Zy4uCiAgICAgICAgI3NlbGYuX19oYWNr
VHJhbnMoKQoKICAgIGRlZiBfX2hhY2tUcmFucyhzZWxmKToKICAgICAgICAjIyMjIEhhY2sgbmVj
ZXNzYXJ5IHRvIGdldCBjb25uZWN0aW9uIGNhY2hlIHRvIHJlZnJlc2gKICAgICAgICAjIHNldCBh
bmQgY29tbWl0IGhhY2sgdmFsdWUsIGdlbmVyYXRpbmcgYSBDb25mbGljdEVycm9yCiAgICAgICAg
Zm9yIGkgaW4gcmFuZ2UoTUFYX0NPTU1JVF9BVFRFTVBUUyk6CiAgICAgICAgICAgIHRyeToKICAg
ICAgICAgICAgICAgIHNlbGYuX3Jvb3RbJ2hhY2snXSA9IGlkKHNlbGYpCiAgICAgICAgICAgICAg
ICBnZXRfdHJhbnNhY3Rpb24oKS5jb21taXQoKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAg
ICAgICAgZXhjZXB0IENvbmZsaWN0RXJyb3I6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAg
ICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKICAgICAgICAgICAg
ICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAj
IyMjIEVuZCBoYWNrCgogICAgZGVmIF9sZWF2ZVNlc3Npb24oc2VsZik6CiAgICAgICAgIiIiQ2Fs
bGVkIHdoZW4gZmluaXNoZWQgQ09SQkEgUmVxdWVzdCB0byB1bnJlZ2lzdGVyIGN1cnJlbnQKICAg
ICAgICB0aHJlYWQgd2l0aCBUcmFuc2FjdGlvbiIiIgoKICAgICAgICAjc2VsZi5nZXRfdHJhbnNh
Y3Rpb24oKS5hYm9ydCgpCiAgICAgICAgICAgIAogICAgICAgIHVucmVnaXN0ZXJUaG9yQ29yYmFT
ZXNzaW9uKCkKCiAgICBkZWYgbG9nb3V0KHNlbGYpOgogICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24u
Y2xvc2UoKQogICAgICAgIHNlbGYuX3NlcnZhbnRMb2NhdG9yLmxvZ291dCgpCiAgICAgICAgc2Vs
Zi5fcG9hLmRlc3Ryb3koMCwgMCkKCiAgICBkZWYgX2NyZWF0ZVBvYUFuZFNlcnZhbnRMb2NhdG9y
KHNlbGYsIHBhcmVudFBPQSwgUE9BTWFuYWdlcik6CiAgICAgICAgIyBDcmVhdGUgYSBjaGlsZCBQ
T0Egd2l0aCB0aGUgcmlnaHQgcG9saWNpZXMgZm9yIGEgU2VydmFudExvY2F0b3IKICAgICAgICBw
cyA9IFtwYXJlbnRQT0EuY3JlYXRlX2lkX2Fzc2lnbm1lbnRfcG9saWN5KFBvcnRhYmxlU2VydmVy
LlVTRVJfSUQpLAogICAgICAgICAgICAgIHBhcmVudFBPQS5jcmVhdGVfc2VydmFudF9yZXRlbnRp
b25fcG9saWN5KFBvcnRhYmxlU2VydmVyLk5PTl9SRVRBSU4pLAogICAgICAgICAgICAgIHBhcmVu
dFBPQS5jcmVhdGVfdGhyZWFkX3BvbGljeShQb3J0YWJsZVNlcnZlci5TSU5HTEVfVEhSRUFEX01P
REVMKSwKICAgICAgICAgICAgICBwYXJlbnRQT0EuY3JlYXRlX3JlcXVlc3RfcHJvY2Vzc2luZ19w
b2xpY3koUG9ydGFibGVTZXJ2ZXIuVVNFX1NFUlZBTlRfTUFOQUdFUildCgoKICAgICAgICB0bXAg
PSBzdHIodGltZS50aW1lKCkpICsgc3RyKHJhbmRvbS5yYW5kb20oKSkKCiAgICAgICAgaWYgX19k
ZWJ1Z19fOgogICAgICAgICAgICBMT0coIlpPREJDb3JiYUZyYW1ld29yayIsCiAgICAgICAgICAg
ICAgICBUUkFDRSwKICAgICAgICAgICAgICAgICJTZXNzaW9uLl9jcmVhdGVQb2FBbmRTZXJ2YW50
TG9jYXRvcigpIiwKICAgICAgICAgICAgICAgICJUaHJlYWQgaWQ9JXMiICUgdGhyZWFkLmdldF9p
ZGVudCgpKQogICAgICAgIGNoaWxkID0gcGFyZW50UE9BLmNyZWF0ZV9QT0EodG1wLCBQT0FNYW5h
Z2VyLCBwcykKCiAgICAgICAgIyBDcmVhdGUgdGhlIFNlcnZhbnRMb2NhdG9yIGFuZCBzZXQgaXQg
YXMgdGhlIGNoaWxkJ3MgU2VydmFudE1hbmFnZXIKICAgICAgICBzbGkgPSBTZXJ2YW50TG9jYXRv
cihjaGlsZCkKICAgICAgICBzbG8gPSBzbGkuX3RoaXMoKQogICAgICAgIGNoaWxkLnNldF9zZXJ2
YW50X21hbmFnZXIoc2xvKQogICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgTE9HKCJa
T0RCQ29yYmFGcmFtZXdvcmsiLAogICAgICAgICAgICAgICAgVFJBQ0UsCiAgICAgICAgICAgICAg
ICAiU2Vzc2lvbi5fY3JlYXRlUG9hQW5kU2VydmFudExvY2F0b3IoKSIsCiAgICAgICAgICAgICAg
ICAiY2hpbGQgUE9BOiVzIFRocmVhZCBpZD0lcyIgJSAoY2hpbGQsIHRocmVhZC5nZXRfaWRlbnQo
KSkpCiAgICAgICAgY2hpbGQuX2dldF90aGVfUE9BTWFuYWdlcigpLmFjdGl2YXRlKCkKICAgICAg
ICByZXR1cm4gY2hpbGQsIHNsaQoKY2xhc3MgU2VydmFudExvY2F0b3IgKFBvcnRhYmxlU2VydmVy
X19QT0EuU2VydmFudExvY2F0b3IpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvYSk6CiAgICAg
ICAgc2VsZi5fX3Nlc3Npb25JZCA9IE5vbmUKICAgICAgICBzZWxmLl9fc2Vzc2lvbiA9IE5vbmUK
ICAgICAgICBzZWxmLl9fcG9hID0gcG9hCiAgICAgICAgc2VsZi5fX2RvbWFpbkNsYXNzVG9TZXJ2
YW50ID0ge30KICAgICAgICBzZWxmLl9faWRUb0RvbWFpbk9iaiA9IHt9CiAgICAgICAgc2VsZi5f
X2lkVG9PYmpSZWYgPSB7fQogICAgICAgIHNlbGYuX190cmFucyA9IE5vbmUKCiAgICBkZWYgX19n
ZXRTZXJ2YW50KHNlbGYsIGZvckRvbWFpbktsYXNzKToKICAgICAgICByZXN1bHQgPSBzZWxmLl9f
ZG9tYWluQ2xhc3NUb1NlcnZhbnQuZ2V0KGZvckRvbWFpbktsYXNzLCBOb25lKQoKICAgICAgICBp
ZiBub3QgcmVzdWx0OgogICAgICAgICAgICBzZXJ2YW50S2xhc3MgPSBnZXRTZXJ2YW50Rm9yRG9t
YWluKGZvckRvbWFpbktsYXNzKQogICAgICAgICAgICBpZiBzZXJ2YW50S2xhc3M6CiAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzZXJ2YW50S2xhc3Moc2VsZikKICAgICAgICAgICAgICAgIHNlbGYu
X19kb21haW5DbGFzc1RvU2VydmFudFtmb3JEb21haW5LbGFzc10gPSByZXN1bHQKICAgICAgICBy
ZXR1cm4gcmVzdWx0CgogICAgZGVmIHByZWludm9rZShzZWxmLCBvaWQsIHBvYSwgb3BlcmF0aW9u
KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9fc2Vzc2lvbjoKICAgICAg
ICAgICAgICAgIHByaW50ICJ5b3UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24iCiAgICAgICAgICAgICAg
ICByYWlzZSBDT1JCQS5PQkpFQ1RfTk9UX0VYSVNUKCJTZXNzaW9uIERvZXMgTm90IGV4aXN0IikK
ICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQoKICAgICAgICAgICAgc2VsZi5fX3Nlc3Npb24uX2Vu
dGVyU2Vzc2lvbigpCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBvaWQgPT0gc2VsZi5fX3Nl
c3Npb25JZDoKICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5fX3Nlc3Npb24sICIiKQoKICAg
ICAgICAgICAgaWYgc2VsZi5fX2lkVG9Eb21haW5PYmogYW5kIHNlbGYuX19pZFRvRG9tYWluT2Jq
Lmhhc19rZXkob2lkKToKICAgICAgICAgICAgICAgIGRvbWFpbk9iaiA9IHNlbGYuX19pZFRvRG9t
YWluT2JqW29pZF0KICAgICAgICAgICAgICAgIGFzc2VydCBub3QgZG9tYWluT2JqID09IE5vbmUK
ICAgICAgICAgICAgICAgIHNlcnZhbnQgPSBzZWxmLl9fZ2V0U2VydmFudChkb21haW5PYmouX19j
bGFzc19fKQogICAgICAgICAgICAgICAgaWYgbm90IHNlcnZhbnQ6CiAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgIk5vIFNlcnZhbnQgZm91bmQgZm9yICVzIiAlIGRvbWFpbk9iai5fX2NsYXNzX18K
ICAgICAgICAgICAgICAgIHNlcnZhbnQuX2xvYWQoZG9tYWluT2JqKQogICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgcmFpc2UgIk5vIE9iamVjdCBmb3VuZCBmb3IgJXMiICUgb2lkCiAg
ICAgICAgZXhjZXB0OgogICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgICAgICAgIHRy
YWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICByYWlzZQogICAgICAgIHJldHVybiAoc2Vy
dmFudCwgIiIpCgogICAgZGVmIHBvc3RpbnZva2Uoc2VsZiwgb2lkLCBwb2EsIG9wZXJhdGlvbiwg
Y29va2llLCBzZXJ2KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAg
ICAgIGlmIHNlbGYuX19pZFRvRG9tYWluT2JqIGFuZCBzZWxmLl9faWRUb0RvbWFpbk9iai5oYXNf
a2V5KG9pZCk6CiAgICAgICAgICAgICAgICAgICAgZG9tYWluT2JqID0gc2VsZi5fX2lkVG9Eb21h
aW5PYmpbb2lkXQogICAgICAgICAgICAgICAgICAgIHNlcnZhbnQgPSBzZWxmLl9fZG9tYWluQ2xh
c3NUb1NlcnZhbnRbZG9tYWluT2JqLl9fY2xhc3NfX10KICAgICAgICAgICAgICAgICAgICBzZXJ2
YW50Ll9lbXB0eSgpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIHJh
aXNlICJObyBPYmplY3QgZm91bmQgZm9yICVzIiAlIG9pZAogICAgICAgICAgICBleGNlcHQ6CiAg
ICAgICAgICAgICAgICAjaW1wb3J0IHRyYWNlYmFjawogICAgICAgICAgICAgICAgI3RyYWNlYmFj
ay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICBmaW5hbGx5OgogICAg
ICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLl9fc2Vzc2lvbi5fbGVhdmVTZXNzaW9u
KCkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgI2ltcG9ydCB0cmFjZWJhY2sK
ICAgICAgICAgICAgICAgICN0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICNw
cmludCBvaWQsIG9wZXJhdGlvbiwgc2VydgogICAgICAgICAgICAgICAgcmFpc2UKCiAgICBkZWYg
YWRkU2Vzc2lvbihzZWxmLCBzZXNzaW9uSWQsIHNlc3Npb24pOgogICAgICAgICIiIgogICAgICAg
IHJlZ2lzdGVycyB0aGUgc2Vzc2lvbiBvYmplY3QgZm9yIHVzZSBieSB0aGUgc2VydmFudExvY2F0
b3IKICAgICAgICAiIiIKICAgICAgICBzZWxmLl9fc2Vzc2lvbklkID0gc2Vzc2lvbklkCiAgICAg
ICAgc2VsZi5fX3Nlc3Npb24gPSBzZXNzaW9uCgogICAgZGVmIGxvZ291dChzZWxmKToKICAgICAg
ICBzZWxmLl9faWRUb0RvbWFpbk9iaiA9IE5vbmUKICAgICAgICBzZWxmLl9fc2Vzc2lvbiA9IE5v
bmUKCiAgICBkZWYgYWRkRG9tYWluT2JqKHNlbGYsIGlkLCBkb21haW5PYmopOgogICAgICAgIHNl
bGYuX19pZFRvRG9tYWluT2JqW2lkXSA9IGRvbWFpbk9iagoKICAgIGRlZiBvYmpSZWZHZW5lcmF0
b3Ioc2VsZiwgaWQsIGRvbWFpbk9iaiwgc2VydmFudENsYXNzKToKICAgICAgICBpZiBub3Qgc2Vs
Zi5fX2lkVG9PYmpSZWYuaGFzX2tleShpZCk6CiAgICAgICAgICAgIHNlbGYuX19pZFRvRG9tYWlu
T2JqW2lkXSA9IGRvbWFpbk9iagogICAgICAgICAgICBvYmpSZWYgPSBzZWxmLl9fcG9hLmNyZWF0
ZV9yZWZlcmVuY2Vfd2l0aF9pZChpZCwgQ09SQkEuaWQoc2VydmFudENsYXNzKSkKICAgICAgICAg
ICAgc2VsZi5fX2lkVG9PYmpSZWZbaWRdID0gb2JqUmVmCgogICAgICAgIHJldHVybiBzZWxmLl9f
aWRUb09ialJlZltpZF0KCiAgICBkZWYgbG9va3VwRG9tYWluT2JqKHNlbGYsIG9ialJlZik6CiAg
ICAgICAgaWYgbm90IG9ialJlZjoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICB0cnk6
CiAgICAgICAgICAgIGlkID0gc2VsZi5fX3BvYS5yZWZlcmVuY2VfdG9faWQob2JqUmVmKQogICAg
ICAgIGV4Y2VwdCBDT1JCQS5Vc2VyRXhjZXB0aW9uLCBlOgogICAgICAgICAgICAjY2F0Y2hpbmcg
V3JvbmdBZGFwdGVyCiAgICAgICAgICAgIHJhaXNlIENPUkJBLk9CSkVDVF9OT1RfRVhJU1QoKQoK
ICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9faWRUb0RvbWFpbk9ialtpZF0K
ICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgIHJhaXNlIENPUkJBLk9CSkVDVF9O
T1RfRVhJU1QoKQoKICAgIGRlZiByZW1vdmVEb21haW5PYmooc2VsZiwgZG9tYWluT2JqKToKICAg
ICAgICBjb3JiYUlkID0gX2dldERvbWFpbklkKGRvbWFpbk9iaikKICAgICAgICBkZWwgc2VsZi5f
X2lkVG9Eb21haW5PYmpbY29yYmFJZF0KICAgICAgICBkZWwgc2VsZi5fX2lkVG9PYmpSZWZbY29y
YmFJZF0KCg==

--------------Boundary-00=_2TAQHENEZWH1WX6PXT2P--