contifier bug

Matthew Fluet fluet@CS.Cornell.EDU
Mon, 26 Feb 2001 08:35:20 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1903590565-983194520=:24551
Content-Type: TEXT/PLAIN; charset=US-ASCII


> I'll run through the regression and benchmarks this evening and send out
> the fix tomorrow morning.

Here's the updated contify.fun.  I didn't have any contifier errors on a
self compile or on any regression/benchmark run with all the contifier
options.

I did find a minor x86-codegen bug, related to carrying values in
registers between basic blocks.  Short version: I could tie up
eax, ebx, ecx, and edx for transfer of values, leaving no byte registers
for a switch statement on a uchar.  So, I changed the set of transfer
registers from [eax,ebx,ecx,edx] to [ebx,ecx,edx,ebp], which always leaves
eax (and al) free for byte operands.  The updated x86-codegen.fun is
included as well.


---559023410-1903590565-983194520=:24551
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="contify.fun"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.1010226083520.24551C@hoho.cs.cornell.edu>
Content-Description: 

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4NCiAqIFBs
ZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCiAqKQ0K
KCoNCiAqIFRoaXMgcGFzcyBjb21iaW5lcyB0d28gYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9u
cy4NCiAqDQogKiBUaGUgZmlyc3QgYW5hbHlzaXMsICJjYWxsIGJhc2VkIiBub3RpY2VzIGlmIGEg
dG9wbGV2ZWwgZnVuY3Rpb24gaXMgY2FsbGVkDQogKiAgICAgICAxLiBmcm9tIG9uZSBwbGFjZSBv
dXRzaWRlIGl0c2VsZg0KICogICBhbmQgMi4gYWxsIGNhbGxzIHRvIGl0c2VsZiB3aXRoaW4gaXRz
ZWxmIGFyZSB0YWlsDQogKiBJZiAoMSkgYW5kICgyKSBhcmUgdHJ1ZSwgdGhlbiB0aGF0IGZ1bmN0
aW9uIGNhbiBiZSBtYWRlIGxvY2FsIGF0IHRoZSBwb2ludA0KICogb2YgaXRzIG91dGVyIGNhbGwu
DQogKg0KICogVGhlIHNlY29uZCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHBh
cGVyLg0KICogICBMb2NhbCBDUFMgY29udmVyc2lvbiBpbiBhIGRpcmVjdC1zdHlsZSBjb21waWxl
ci4gIEpvaG4gUmVwcHkuDQogKiBJdCBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgY29udGludWF0aW9u
cyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGguICBJZg0KICogdGhhdCBzZXQgaXMgYSBz
aW5nbGV0b24sIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbiBiZSBwcmVmaXhlZCBvbnRvIHRoZQ0KICog
Y29udGludWF0aW9uIGl0IGlzIGNhbGxlZCB3aXRoLg0KICopDQoNCmZ1bmN0b3IgQ29udGlmeSAo
UzogQ09OVElGWV9TVFJVQ1RTKTogQ09OVElGWSA9IA0Kc3RydWN0DQoNCm9wZW4gUw0Kb3BlbiBE
ZWMgVHJhbnNmZXINCg0KKCogUmV0dXJuID0ge1VuY2FsbGVkLCBVbmtub3dufSBVIEp1bXAgVSBG
dW5jDQogKikNCnN0cnVjdHVyZSBSZXR1cm4gPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB0DQog
ICAgICA9IFVuY2FsbGVkDQogICAgICB8IFVua25vd24NCiAgICAgIHwgSnVtcExhYmVsIG9mIEp1
bXAudA0KICAgICAgfCBGdW5jTGFiZWwgb2YgRnVuYy50DQoNCiAgICBmdW4gbGF5b3V0IHINCiAg
ICAgID0gbGV0IA0KCSAgb3BlbiBMYXlvdXQNCglpbg0KCSAgY2FzZSByDQoJICAgIG9mIFVuY2Fs
bGVkID0+IHN0ciAiVW5jYWxsZWQiDQoJICAgICB8IFVua25vd24gPT4gc3RyICJVbmtub3duIg0K
CSAgICAgfCBKdW1wTGFiZWwgaiA9PiBzZXEgW0p1bXAubGF5b3V0IGpdDQoJICAgICB8IEZ1bmNM
YWJlbCBmID0+IHNlcSBbRnVuYy5sYXlvdXQgZl0NCgllbmQNCiAgICB2YWwgdG9TdHJpbmcgPSBM
YXlvdXQudG9TdHJpbmcgbyBsYXlvdXQNCiAgICAgIA0KICAgIHZhbCBlcXVhbHMNCiAgICAgID0g
Zm4gKFVuY2FsbGVkLCBVbmNhbGxlZCkgPT4gdHJ1ZQ0KICAgICAgICAgfCAoVW5rbm93biwgVW5r
bm93bikgPT4gdHJ1ZQ0KCSB8IChKdW1wTGFiZWwgajEsIEp1bXBMYWJlbCBqMikgPT4gSnVtcC5l
cXVhbHMoajEsIGoyKQ0KCSB8IChGdW5jTGFiZWwgZjEsIEZ1bmNMYWJlbCBmMikgPT4gRnVuYy5l
cXVhbHMoZjEsIGYyKQ0KCSB8IF8gPT4gZmFsc2UNCg0KICAgIHZhbCBpc1VuY2FsbGVkIA0KICAg
ICAgPSBmbiBVbmNhbGxlZCA9PiB0cnVlDQogICAgICAgICB8IF8gPT4gZmFsc2UNCiAgICB2YWwg
aXNVbmtub3duDQogICAgICA9IGZuIFVua25vd24gPT4gdHJ1ZQ0KICAgICAgICAgfCBfID0+IGZh
bHNlDQogIGVuZA0KDQpkYXRhdHlwZSBzdGF0dXMgPSBUT0RPIHwgQ1VSUkVOVCB8IERPTkUNCg0K
c3RydWN0dXJlIEp1bXBEYXRhID0NCiAgc3RydWN0DQogICAgZGF0YXR5cGUgdCA9IFQgb2Yge25v
ZGU6IERpcmVjdGVkR3JhcGguTm9kZS50IG9wdGlvbiByZWYsDQoJCSAgICAgICByb290RWRnZTog
Ym9vbCByZWYsDQoJCSAgICAgICBzdGF0dXM6IHN0YXR1cyByZWYsDQoJCSAgICAgICBwcmVmaXhl
czogRnVuYy50IGxpc3QgcmVmfQ0KICAgICAgDQogICAgZnVuIG5ldyAoKSA9IFQge25vZGUgPSBy
ZWYgTk9ORSwNCgkJICAgIHJvb3RFZGdlID0gcmVmIGZhbHNlLA0KCQkgICAgc3RhdHVzID0gcmVm
IFRPRE8sDQoJCSAgICBwcmVmaXhlcyA9IHJlZiBbXX0NCg0KICAgIGxvY2FsDQogICAgICBmdW4g
bWFrZSBzID0gbGV0DQoJCSAgICAgZnVuIFMnIChUIHIpID0gcyByDQoJCSAgICAgdmFsIFMgPSAh
IG8gUycNCgkJICAgaW4NCgkJICAgICAoUycsIFMpDQoJCSAgIGVuZA0KICAgIGluDQogICAgICB2
YWwgKG5vZGUnLCBub2RlKSA9IG1ha2UgI25vZGUNCiAgICAgIHZhbCAocm9vdEVkZ2UnLCByb290
RWRnZSkgPSBtYWtlICNyb290RWRnZQ0KICAgICAgdmFsIChzdGF0dXMnLCBzdGF0dXMpID0gbWFr
ZSAjc3RhdHVzDQogICAgICB2YWwgKHByZWZpeGVzJywgcHJlZml4ZXMpID0gbWFrZSAjcHJlZml4
ZXMNCiAgICBlbmQNCiAgICBmdW4gbm9kZVJlc2V0IChUIHtub2RlLCAuLi59KSA9IG5vZGUgOj0g
Tk9ORQ0KICBlbmQNCg0Kc3RydWN0dXJlIEZ1bmNEYXRhID0NCiAgc3RydWN0DQogICAgZGF0YXR5
cGUgdCA9IFQgb2Yge25vZGU6IERpcmVjdGVkR3JhcGguTm9kZS50IG9wdGlvbiByZWYsDQoJCSAg
ICAgICByZWFjaDogYm9vbCByZWYsDQoJCSAgICAgICBjYWxsZXJzOiB7bm9udGFpbDogKEZ1bmMu
dCAqIEp1bXAudCkgbGlzdCByZWYsDQoJCQkJIHRhaWw6IEZ1bmMudCBsaXN0IHJlZn0sDQoJCSAg
ICAgICBjYWxsZWVzOiB7bm9udGFpbDogKEZ1bmMudCAqIEp1bXAudCkgbGlzdCByZWYsDQoJCQkJ
IHRhaWw6IEZ1bmMudCBsaXN0IHJlZn0sDQoJCSAgICAgICBBOiBSZXR1cm4udCByZWYsDQoJCSAg
ICAgICBBQ2FsbDogUmV0dXJuLnQgcmVmLA0KCQkgICAgICAgbGVzc1RoYW46IEZ1bmMudCBsaXN0
IHJlZiwNCgkJICAgICAgIEFDb250OiBSZXR1cm4udCByZWYsDQoJCSAgICAgICBBRG9tOiBSZXR1
cm4udCByZWYsDQoJCSAgICAgICBjb250aWZ5OiBib29sIHJlZiwNCgkJICAgICAgIHN0YXR1czog
c3RhdHVzIHJlZiwNCgkJICAgICAgIHByZWZpeGVzOiBGdW5jLnQgbGlzdCByZWYsDQoJCSAgICAg
ICByZXBsYWNlOiB7YXJnczogKFZhci50ICogVHlwZS50KSB2ZWN0b3IsDQoJCQkJIGJvZHk6IEV4
cC50LA0KCQkJCSBqdW1wOiBKdW1wLnR9IG9wdGlvbiByZWZ9DQogICAgICANCiAgICBmdW4gbmV3
ICgpID0gVCB7bm9kZSA9IHJlZiBOT05FLA0KCQkgICAgcmVhY2ggPSByZWYgZmFsc2UsDQoJCSAg
ICBjYWxsZXJzID0ge25vbnRhaWwgPSByZWYgW10sIHRhaWwgPSByZWYgW119LA0KCQkgICAgY2Fs
bGVlcyA9IHtub250YWlsID0gcmVmIFtdLCB0YWlsID0gcmVmIFtdfSwNCgkJICAgIEEgPSByZWYg
UmV0dXJuLlVuY2FsbGVkLA0KCQkgICAgQUNhbGwgPSByZWYgUmV0dXJuLlVuY2FsbGVkLA0KCQkg
ICAgbGVzc1RoYW4gPSByZWYgW10sDQoJCSAgICBBQ29udCA9IHJlZiBSZXR1cm4uVW5jYWxsZWQs
DQoJCSAgICBBRG9tID0gcmVmIFJldHVybi5VbmNhbGxlZCwNCgkJICAgIGNvbnRpZnkgPSByZWYg
dHJ1ZSwNCgkJICAgIHN0YXR1cyA9IHJlZiBUT0RPLA0KCQkgICAgcHJlZml4ZXMgPSByZWYgW10s
DQoJCSAgICByZXBsYWNlID0gcmVmIE5PTkV9DQogICAgICANCiAgICBsb2NhbA0KICAgICAgZnVu
IG1ha2UgcyA9IGxldA0KCQkgICAgIGZ1biBTJyAoVCByKSA9IHMgcg0KCQkgICAgIHZhbCBTID0g
ISBvIFMnDQoJCSAgIGluDQoJCSAgICAgKFMnLCBTKQ0KCQkgICBlbmQNCiAgICAgIGZ1biBtYWtl
JyBzID0gbGV0DQoJCSAgICAgIGZ1biBTJyAoVCByKSA9IHMgcg0KCQkgICAgaW4NCgkJICAgICAg
UycNCgkJICAgIGVuZA0KICAgIGluDQogICAgICB2YWwgKG5vZGUnLCBub2RlKSA9IG1ha2UgI25v
ZGUNCiAgICAgIHZhbCAocmVhY2gnLCByZWFjaCkgPSBtYWtlICNyZWFjaA0KICAgICAgdmFsIGNh
bGxlcnMnID0gbWFrZScgI2NhbGxlcnMNCiAgICAgIHZhbCBjYWxsZWVzJyA9IG1ha2UnICNjYWxs
ZWVzDQogICAgICB2YWwgKEEnLCBBKSA9IG1ha2UgI0ENCiAgICAgIHZhbCAoQUNhbGwnLCBBQ2Fs
bCkgPSBtYWtlICNBQ2FsbA0KICAgICAgdmFsIChsZXNzVGhhbicsIGxlc3NUaGFuKSA9IG1ha2Ug
I2xlc3NUaGFuDQogICAgICB2YWwgKEFDb250JywgQUNvbnQpID0gbWFrZSAjQUNvbnQNCiAgICAg
IHZhbCAoQURvbScsIEFEb20pID0gbWFrZSAjQURvbQ0KICAgICAgdmFsIChjb250aWZ5JywgY29u
dGlmeSkgPSBtYWtlICNjb250aWZ5DQogICAgICB2YWwgKHN0YXR1cycsIHN0YXR1cykgPSBtYWtl
ICNzdGF0dXMNCiAgICAgIHZhbCAocHJlZml4ZXMnLCBwcmVmaXhlcykgPSBtYWtlICNwcmVmaXhl
cw0KICAgICAgdmFsIChyZXBsYWNlJywgcmVwbGFjZSkgPSBtYWtlICNyZXBsYWNlDQogICAgZW5k
DQogICAgZnVuIG5vZGVSZXNldCAoVCB7bm9kZSwgLi4ufSkgPSBub2RlIDo9IE5PTkUNCiAgZW5k
DQoNCnN0cnVjdHVyZSBKdW1wRnVuY0dyYXBoID0NCiAgc3RydWN0DQogICAgc3RydWN0dXJlIEdy
YXBoID0gRGlyZWN0ZWRHcmFwaA0KICAgIHN0cnVjdHVyZSBOb2RlID0gR3JhcGguTm9kZQ0KICAg
IHN0cnVjdHVyZSBFZGdlID0gR3JhcGguRWRnZQ0KICAgIHN0cnVjdHVyZSBEZnNQYXJhbSA9IEdy
YXBoLkRmc1BhcmFtDQoNCiAgICBkYXRhdHlwZSB0ID0gSnVtcE5vZGUgb2YgSnVtcC50DQogICAg
ICAgICAgICAgICB8IEZ1bmNOb2RlIG9mIEZ1bmMudA0KICAgIGZ1biBuZXdKdW1wRnVuY0dyYXBo
IHtnZXRKdW1wRGF0YTogSnVtcC50IC0+IEp1bXBEYXRhLnQsDQoJCQkgIGdldEZ1bmNEYXRhOiBG
dW5jLnQgLT4gRnVuY0RhdGEudH0NCiAgICAgID0gbGV0DQoJICB2YWwgRyA9IEdyYXBoLm5ldyAo
KQ0KDQoJICBmdW4gYWRkRWRnZSBlZGdlDQoJICAgID0gKEdyYXBoLmFkZEVkZ2UgKEcsIGVkZ2Up
OyAoKSkNCg0KCSAgZnVuIGFkZEVkZ2UnIGVkZ2UNCgkgICAgPSBpZiBOb2RlLmhhc0VkZ2UgZWRn
ZQ0KCQl0aGVuICgpDQoJCWVsc2UgYWRkRWRnZSBlZGdlDQoNCgkgIHZhbCB7Z2V0ID0gZ2V0Tm9k
ZUluZm8gOiBOb2RlLnQgLT4gdCwgDQoJICAgICAgIHNldCA9IHNldE5vZGVJbmZvfQ0KCSAgICA9
IFByb3BlcnR5LmdldFNldE9uY2UNCgkgICAgICAoTm9kZS5wbGlzdCwNCgkgICAgICAgUHJvcGVy
dHkuaW5pdFJhaXNlICgibm9kZUluZm8iLCBOb2RlLmxheW91dCkpDQoNCgkgIGZ1biBnZXRGdW5j
Tm9kZSBmDQoJICAgID0gbGV0DQoJCXZhbCBub2RlID0gRnVuY0RhdGEubm9kZScgKGdldEZ1bmNE
YXRhIGYpDQoJICAgICAgaW4NCgkJY2FzZSAhbm9kZQ0KCQkgIG9mIFNPTUUgbiA9PiBuDQoJCSAg
IHwgTk9ORSA9PiBsZXQNCgkJCSAgICAgICB2YWwgbiA9IEdyYXBoLm5ld05vZGUgRw0KCQkJICAg
ICBpbg0KCQkJICAgICAgIHNldE5vZGVJbmZvIChuLCBGdW5jTm9kZSBmKTsNCgkJCSAgICAgICBu
b2RlIDo9IFNPTUUgbjsNCgkJCSAgICAgICBuDQoJCQkgICAgIGVuZA0KCSAgICAgIGVuZA0KDQoJ
ICBmdW4gZ2V0SnVtcE5vZGUgag0KCSAgICA9IGxldA0KCQl2YWwgbm9kZSA9IEp1bXBEYXRhLm5v
ZGUnIChnZXRKdW1wRGF0YSBqKQ0KCSAgICAgIGluDQoJCWNhc2UgIW5vZGUNCgkJICBvZiBTT01F
IG4gPT4gbg0KCQkgICB8IE5PTkUgPT4gbGV0DQoJCQkgICAgICAgdmFsIG4gPSBHcmFwaC5uZXdO
b2RlIEcNCgkJCSAgICAgaW4NCgkJCSAgICAgICBzZXROb2RlSW5mbyAobiwgSnVtcE5vZGUgaik7
DQoJCQkgICAgICAgbm9kZSA6PSBTT01FIG47DQoJCQkgICAgICAgbg0KCQkJICAgICBlbmQNCgkg
ICAgICBlbmQNCg0KCSAgZnVuIHJlc2V0IHANCgkgICAgPSBHcmFwaC5mb3JlYWNoTm9kZQ0KCSAg
ICAgIChHLA0KCSAgICAgICBmbiBuID0+IGlmIHAgbg0KCQkJIHRoZW4gY2FzZSBnZXROb2RlSW5m
byBuDQoJCQkJb2YgSnVtcE5vZGUgag0KCQkJCSA9PiBKdW1wRGF0YS5ub2RlUmVzZXQgKGdldEp1
bXBEYXRhIGopDQoJCSAgICAgICAgICAgICAgICAgfCBGdW5jTm9kZSBmIA0KCQkJICAgICAgICAg
PT4gRnVuY0RhdGEubm9kZVJlc2V0IChnZXRGdW5jRGF0YSBmKQ0KCQkJIGVsc2UgKCkpDQoJaW4N
CgkgIHtHID0gRywgDQoJICAgYWRkRWRnZSA9IGFkZEVkZ2UsIA0KCSAgIGFkZEVkZ2UnID0gYWRk
RWRnZScsDQoJICAgZ2V0Tm9kZUluZm8gPSBnZXROb2RlSW5mbywgDQoJICAgZ2V0SnVtcE5vZGUg
PSBnZXRKdW1wTm9kZSwgDQoJICAgZ2V0RnVuY05vZGUgPSBnZXRGdW5jTm9kZSwNCgkgICByZXNl
dCA9IHJlc2V0fQ0KCWVuZA0KDQogICAgZnVuIG5ld0Z1bmNHcmFwaCB7Z2V0RnVuY0RhdGE6IEZ1
bmMudCAtPiBGdW5jRGF0YS50fQ0KICAgICAgPSBsZXQNCgkgIHZhbCB7RywgYWRkRWRnZSwgYWRk
RWRnZScsDQoJICAgICAgIGdldE5vZGVJbmZvLCANCgkgICAgICAgZ2V0SnVtcE5vZGUsIGdldEZ1
bmNOb2RlLCANCgkgICAgICAgcmVzZXR9DQoJICAgID0gbmV3SnVtcEZ1bmNHcmFwaCB7Z2V0SnVt
cERhdGEgPSBmbiBfID0+IEVycm9yLmJ1ZyAibmV3RnVuY0dyYXBoIiwNCgkJCQlnZXRGdW5jRGF0
YSA9IGdldEZ1bmNEYXRhfQ0KCWluDQoJICB7RyA9IEcsDQoJICAgYWRkRWRnZSA9IGFkZEVkZ2Us
DQoJICAgYWRkRWRnZScgPSBhZGRFZGdlJywNCgkgICBnZXROb2RlSW5mbyA9IGZuIG4gPT4gY2Fz
ZSBnZXROb2RlSW5mbyBuDQoJCQkJICAgb2YgRnVuY05vZGUgZiA9PiBmDQoJCQkJICAgIHwgSnVt
cE5vZGUgaiA9PiBFcnJvci5idWcgIm5ld0Z1bmNHcmFwaCIsDQoJICAgZ2V0RnVuY05vZGUgPSBn
ZXRGdW5jTm9kZSwNCgkgICByZXNldCA9IHJlc2V0fQ0KCWVuZA0KICBlbmQNCg0Kc3RydWN0dXJl
IEluaXRSZWFjaENhbGxlcnNDYWxsZWVzID0NCiAgc3RydWN0DQogICAgc3RydWN0dXJlIEdyYXBo
ID0gRGlyZWN0ZWRHcmFwaA0KICAgIHN0cnVjdHVyZSBEZnNQYXJhbSA9IEdyYXBoLkRmc1BhcmFt
DQoNCiAgICAoKiBEZWZpbmUgUmVhY2g6IEZ1bmMgLT4gQm9vbCBhcyBmb2xsb3dzOg0KICAgICAq
ICBSZWFjaChmKSBpZmYgdGhlcmUgaXMgYSBwYXRoIG9mIGNhbGxzIGZyb20gZm0gdG8gZi4NCiAg
ICAgKg0KICAgICAqIERlZmluZSBOb250YWlsQ2FsbGVyczogRnVuYyAtPiBQKEZ1bmMgeCBKdW1w
KSBhcyBmb2xsb3dzOg0KICAgICAqICBOb250YWlsQ2FsbGVycyhmKSA9IHsoZywgaikgfCAoZywg
ZiwgSikgaW4gTn0NCiAgICAgKiBEZWZpbmUgVGFpbENhbGxlcnM6IEZ1bmMgLT4gUChGdW5jKSBh
cyBmb2xsb3dzOg0KICAgICAqICBDYWxsZXJzKGYpID0ge2cgfCAoZywgZikgaW4gVH0NCiAgICAg
KiBEZWZpbmUgTm9udGFpbENhbGxlZXM6IEZ1bmMgLT4gUChGdW5jIHggSnVtcCkgYXMgZm9sbG93
czoNCiAgICAgKiAgTm9udGFpbENhbGxlcnMoZikgPSB7KGcsIGopIHwgKGYsIGcsIEopIGluIE59
DQogICAgICogRGVmaW5lIFRhaWxDYWxsZWVzOiBGdW5jIC0+IFAoRnVuYykgYXMgZm9sbG93czoN
CiAgICAgKiAgQ2FsbGVycyhmKSA9IHtnIHwgKGYsIGcpIGluIFR9DQogICAgICoNCiAgICAgKiBQ
cmVjb25kaXRpb246IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0Rh
dGEpIGYgPSBOT05FDQogICAgICogICAgICAgICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoSnVt
cERhdGEuY2FsbGVycyBvIGdldEZ1bmNEYXRhKSBmIA0KICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSB7bm9udGFpbCA9IFtdLCB0YWlsID0gW119DQogICAgICogICAgICAg
ICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoSnVtcERhdGEuY2FsbGVlcyBvIGdldEZ1bmNEYXRh
KSBmDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHtub250YWlsID0g
W10sIHRhaWwgPSBbXX0NCiAgICAgKiBQb3N0Y29uZGl0aW9uOiBGdW5jRGF0YS5yZWFjaCBvIGdl
dEZ1bmNEYXRhID0gUmVhY2gNCiAgICAgKiAgICAgICAgICAgICAgICAjbm9udGFpbCAoRnVuY0Rh
dGEuY2FsbGVycyBvIGdldEZ1bmNEYXRhKQ0KICAgICAqICAgICAgICAgICAgICAgID0gTm9udGFp
bENhbGxlcnMNCiAgICAgKiAgICAgICAgICAgICAgICAjdGFpbCAoRnVuY0RhdGEuY2FsbGVycyBv
IGdldEZ1bmNEYXRhKQ0KICAgICAqICAgICAgICAgICAgICAgID0gVGFpbENhbGxlcnMNCiAgICAg
KiAgICAgICAgICAgICAgICAjbm9udGFpbCAoRnVuY0RhdGEuY2FsbGVlcyBvIGdldEZ1bmNEYXRh
KQ0KICAgICAqICAgICAgICAgICAgICAgID0gTm9udGFpbENhbGxlZXMNCiAgICAgKiAgICAgICAg
ICAgICAgICAjdGFpbCAoRnVuY0RhdGEuY2FsbGVlcyBvIGdldEZ1bmNEYXRhKQ0KICAgICAqICAg
ICAgICAgICAgICAgID0gVGFpbENhbGxlZXMNCiAgICAgKikNCiAgICBmdW4gaW5pdFJlYWNoQ2Fs
bGVyc0NhbGxlZXMgDQogICAgICAgIHtwcm9ncmFtIGFzIFByb2dyYW0uVCB7ZnVuY3Rpb25zLCBt
YWluID0gZm0sIC4uLn0sDQoJIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4gRnVuY0RhdGEudH0gOiB1
bml0DQogICAgICA9IGxldA0KCSAgdmFsIHtHLCBhZGRFZGdlLCBhZGRFZGdlJywNCgkgICAgICAg
Z2V0Tm9kZUluZm8sIGdldEZ1bmNOb2RlLCANCgkgICAgICAgcmVzZXR9DQoJICAgID0gSnVtcEZ1
bmNHcmFwaC5uZXdGdW5jR3JhcGgge2dldEZ1bmNEYXRhID0gZ2V0RnVuY0RhdGF9DQoNCgkgIHZh
bCBfIA0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1bmN0aW9ucywgDQoJICAgICAg
IGZuIHtuYW1lID0gZiwgYm9keSA9IGZfYm9keSwgLi4ufQ0KCSAgICAgICAgPT4gbGV0DQoJCSAg
ICAgdmFsIGNhbGxlZXMgPSBGdW5jRGF0YS5jYWxsZWVzJyAoZ2V0RnVuY0RhdGEgZikNCgkJICAg
ICB2YWwgZl9ub2RlID0gZ2V0RnVuY05vZGUgZg0KCQkgICBpbg0KCQkgICAgIEV4cC5mb3JlYWNo
Q2FsbA0KCQkgICAgIChmX2JvZHksDQoJCSAgICAgIGZuIHtmdW5jID0gZywgY29udCwgLi4ufQ0K
CQkgICAgICAgPT4gbGV0DQoJCQkgICAgdmFsIGNhbGxlcnMgPSBGdW5jRGF0YS5jYWxsZXJzJyAo
Z2V0RnVuY0RhdGEgZykNCgkJCSAgICB2YWwgZ19ub2RlID0gZ2V0RnVuY05vZGUgZw0KCQkJICBp
bg0KCQkJICAgIGNhc2UgY29udA0KCQkJICAgICAgb2YgTk9ORSANCgkJCSAgICAgICA9PiAoTGlz
dC5wdXNoKCN0YWlsIGNhbGxlZXMsIGcpOw0KCQkJCSAgIExpc3QucHVzaCgjdGFpbCBjYWxsZXJz
LCBmKSkNCgkJCSAgICAgICB8IFNPTUUgaiANCgkJCSAgICAgICA9PiAoTGlzdC5wdXNoKCNub250
YWlsIGNhbGxlZXMsIChnLCBqKSk7DQoJCQkJICAgTGlzdC5wdXNoKCNub250YWlsIGNhbGxlcnMs
IChmLCBqKSkpOw0KCQkJICAgIGFkZEVkZ2Uge2Zyb20gPSBmX25vZGUsDQoJCQkJICAgICB0byA9
IGdfbm9kZX0NCgkJCSAgZW5kKQ0KCQkgICBlbmQpDQoJICAgICAgDQoJICB2YWwgZGZzX3BhcmFt
DQoJICAgID0gRGZzUGFyYW0uZmluaXNoTm9kZQ0KCSAgICAgIChmbiBuID0+IGxldA0KCQkJIHZh
bCByZWFjaCANCgkJCSAgID0gRnVuY0RhdGEucmVhY2gnIChnZXRGdW5jRGF0YSAoZ2V0Tm9kZUlu
Zm8gbikpDQoJCSAgICAgICBpbg0KCQkJIHJlYWNoIDo9IHRydWUNCgkJICAgICAgIGVuZCkNCgkg
IHZhbCBmbV9ub2RlID0gZ2V0RnVuY05vZGUgZm0NCglpbg0KCSAgR3JhcGguZGZzTm9kZXMgKEcs
IFtmbV9ub2RlXSwgZGZzX3BhcmFtKTsNCgkgIHJlc2V0IChmbiBfID0+IHRydWUpDQoJZW5kDQog
ICAgdmFsIGluaXRSZWFjaENhbGxlcnNDYWxsZWVzIA0KICAgICAgPSBDb250cm9sLnRyYWNlQ2Fs
bCAiaW5pdFJlYWNoQ2FsbGVyQ2FsbGVlcyIgaW5pdFJlYWNoQ2FsbGVyc0NhbGxlZXMgDQogIGVu
ZA0KDQpzdHJ1Y3R1cmUgQW5hbHl6ZUNhbGwgPQ0KICBzdHJ1Y3QNCiAgICBkYXRhdHlwZSB6ID0g
ZGF0YXR5cGUgUmV0dXJuLnQNCg0KICAgICgqDQogICAgICogUHJlY29uZGl0aW9uOiBmb3JhbGwg
ZiBpbiBGdW5jLiAoRnVuY0RhdGEuQUNhbGwgbyBnZXRGdW5jRGF0YSkgZiA9IFVuY2FsbGVkDQog
ICAgICogUG9zdGNvbmRpdGlvbjogRnVuY0RhdGEuQUNhbGwgbyBnZXRGdW5jRGF0YSA9IEFfQ2Fs
bA0KICAgICAqKQ0KICAgIGZ1biBhbmFseXplQ2FsbCB7cHJvZ3JhbSBhcyBQcm9ncmFtLlQge2Z1
bmN0aW9ucywgbWFpbiA9IGZtLCAuLi59LA0KCQkgICAgIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4g
RnVuY0RhdGEudH0gOiB1bml0DQogICAgICA9IGxldA0KCSAgdmFsIGZtX0FDYWxsID0gRnVuY0Rh
dGEuQUNhbGwnIChnZXRGdW5jRGF0YSBmbSkNCgkgIHZhbCBfID0gZm1fQUNhbGwgOj0gVW5rbm93
bg0KCWluDQoJICBWZWN0b3IuZm9yZWFjaA0KCSAgKGZ1bmN0aW9ucywNCgkgICBmbiB7bmFtZSA9
IGYsIGJvZHkgPSBmX2JvZHksIC4uLn0NCgkgICAgPT4gaWYgRnVuY0RhdGEucmVhY2ggKGdldEZ1
bmNEYXRhIGYpDQoJCSB0aGVuIEV4cC5mb3JlYWNoQ2FsbA0KCQkgICAgICAoZl9ib2R5LA0KCQkg
ICAgICAgZm4ge2Z1bmMgPSBnLCBjb250LCAuLi59IA0KCQkgICAgICAgID0+IGxldA0KCQkJICAg
ICB2YWwgQUNhbGwgPSBGdW5jRGF0YS5BQ2FsbCcgKGdldEZ1bmNEYXRhIGcpDQoJCQkgICBpbg0K
CQkJICAgICBpZiBGdW5jLmVxdWFscyAoZiwgZykNCgkJCSAgICAgICB0aGVuIGNhc2UgY29udA0K
CQkJCSAgICAgIG9mIE5PTkUgPT4gKCkNCgkJCQkgICAgICAgfCBTT01FIGogPT4gQUNhbGwgOj0g
VW5rbm93bg0KCQkJICAgICAgIGVsc2UgY2FzZSAhQUNhbGwNCgkJCQkgICAgICBvZiBVbmNhbGxl
ZCANCgkJCQkgICAgICAgPT4gKGNhc2UgY29udA0KCQkJCQkgICAgIG9mIE5PTkUgDQoJCQkJCSAg
ICAgID0+IEFDYWxsIDo9IEZ1bmNMYWJlbCBmDQoJCQkJCSAgICAgIHwgU09NRSBqIA0KCQkJCQkg
ICAgICA9PiBBQ2FsbCA6PSBKdW1wTGFiZWwgaikNCgkJCQkgICAgICAgfCBKdW1wTGFiZWwgXyA9
PiBBQ2FsbCA6PSBVbmtub3duDQoJCQkJICAgICAgIHwgRnVuY0xhYmVsIF8gPT4gQUNhbGwgOj0g
VW5rbm93bg0KCQkJCSAgICAgICB8IFVua25vd24gPT4gKCkNCgkJCSAgICAgZW5kKQ0KCQkgZWxz
ZSAoKSkNCgllbmQNCiAgICB2YWwgYW5hbHl6ZUNhbGwgDQogICAgICA9IENvbnRyb2wudHJhY2VD
YWxsICJhbmFseXplQ2FsbCIgYW5hbHl6ZUNhbGwNCiAgZW5kDQoNCnN0cnVjdHVyZSBBbmFseXpl
Q29udCA9DQogIHN0cnVjdA0KICAgIGRhdGF0eXBlIHogPSBkYXRhdHlwZSBSZXR1cm4udA0KDQog
ICAgKCoNCiAgICAgKiBQcmVjb25kaXRpb246IGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5B
Q29udCBvIGdldEZ1bmNEYXRhKSBmID0gVW5jYWxsZWQNCiAgICAgKiAgICAgICAgICAgICAgIGZv
cmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5sZXNzVGhhbiBvIGdldEZ1bmNEYXRhKSBmID0gW10N
CiAgICAgKiAgICAgICAgICAgICAgIA0KICAgICAqIFBvc3Rjb25kaXRpb246IEZ1bmNEYXRhLkFD
b250IG8gZ2V0RnVuY0RhdGEgPSBBX0NvbnQNCiAgICAgKikNCiAgICBmdW4gYW5hbHl6ZUNvbnQg
e3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4ufSwNCgkJICAg
ICBnZXRGdW5jRGF0YTogRnVuYy50IC0+IEZ1bmNEYXRhLnR9IDogdW5pdA0KICAgICAgPSBsZXQN
CgkgIGZ1biB1cCAoZiwgcykNCgkgICAgPSBsZXQNCgkJdmFsIEZ1bmNEYXRhLlQge0FDb250LCBs
ZXNzVGhhbiwgLi4ufSA9IGdldEZ1bmNEYXRhIGYNCgkJZnVuIGRvaXQgcw0KCQkgID0gKEFDb250
IDo9IHM7DQoJCSAgICAgTGlzdC5mb3JlYWNoICghbGVzc1RoYW4sIGZuIGcgPT4gdXAgKGcsIHMp
KSkNCgkgICAgICBpbg0KCQljYXNlICghQUNvbnQsIHMpDQoJCSAgb2YgKF8sIFVuY2FsbGVkKSA9
PiAoKQ0KCQkgICB8IChVbmtub3duLCBfKSA9PiAoKQ0KCQkgICB8IChVbmNhbGxlZCwgXykgPT4g
ZG9pdCBzDQoJCSAgIHwgKEp1bXBMYWJlbCBqLCBKdW1wTGFiZWwgaicpDQoJCSAgID0+IGlmIEp1
bXAuZXF1YWxzIChqLCBqJykNCgkJCXRoZW4gKCkNCgkJCWVsc2UgZG9pdCBVbmtub3duDQoJCSAg
IHwgKEZ1bmNMYWJlbCBnLCBGdW5jTGFiZWwgZycpDQoJCSAgID0+IGlmIEZ1bmMuZXF1YWxzIChn
LCBnJykNCgkJCXRoZW4gKCkNCgkJCWVsc2UgZG9pdCBVbmtub3duDQoJCSAgIHwgXyA9PiBkb2l0
IFVua25vd24NCgkgICAgICBlbmQNCg0KCSAgZnVuIHRocnVGdW5jIChmLCBnKSANCgkgICAgPSBs
ZXQNCgkJdmFsIEZ1bmNEYXRhLlQge0FDb250LCBsZXNzVGhhbiwgLi4ufSA9IGdldEZ1bmNEYXRh
IGcNCgkgICAgICBpbg0KCQlMaXN0LnB1c2ggKGxlc3NUaGFuLCBmKTsNCgkJdXAgKGYsICFBQ29u
dCkNCgkgICAgICBlbmQNCgkgIGZ1biBhZGRKdW1wIChmLCBqKSA9IHVwIChmLCBKdW1wTGFiZWwg
aikNCgkgIGZ1biBtYWtlVG9wIGYgPSB1cCAoZiwgVW5rbm93bikNCg0KDQoJICB2YWwgXyA9IG1h
a2VUb3AgZm0NCglpbg0KCSAgVmVjdG9yLmZvcmVhY2gNCgkgIChmdW5jdGlvbnMsDQoJICAgZm4g
e25hbWUgPSBmLCBib2R5ID0gZl9ib2R5LCAuLi59DQoJICAgID0+IGlmIEZ1bmNEYXRhLnJlYWNo
IChnZXRGdW5jRGF0YSBmKQ0KCQkgdGhlbiBFeHAuZm9yZWFjaENhbGwNCgkJICAgICAgKGZfYm9k
eSwNCgkJICAgICAgIGZuIHtmdW5jID0gZywgY29udCwgLi4ufQ0KCQkgICAgICAgID0+IGlmIEZ1
bmMuZXF1YWxzIChmLCBnKQ0KCQkJICAgICB0aGVuIGNhc2UgY29udA0KCQkJCSAgICBvZiBOT05F
ID0+ICgpDQoJCQkJICAgICB8IFNPTUUgaiA9PiBtYWtlVG9wIGYNCgkJCSAgICAgZWxzZSBjYXNl
IGNvbnQNCgkJCQkgICAgb2YgTk9ORSA9PiB0aHJ1RnVuYyAoZywgZikNCgkJCQkgICAgIHwgU09N
RSBqID0+IGFkZEp1bXAgKGcsIGopKQ0KCQkgZWxzZSAoKSkNCgllbmQNCiAgICB2YWwgYW5hbHl6
ZUNvbnQgDQogICAgICA9IENvbnRyb2wudHJhY2VDYWxsICJhbmFseXplQ29udCIgYW5hbHl6ZUNv
bnQNCiAgZW5kDQoNCnN0cnVjdHVyZSBBbmFseXplRG9tID0NCiAgc3RydWN0DQogICAgc3RydWN0
dXJlIEdyYXBoID0gRGlyZWN0ZWRHcmFwaA0KICAgIHN0cnVjdHVyZSBOb2RlID0gR3JhcGguTm9k
ZQ0KDQogICAgKCogTm93IGRlZmluZSBhIGRpcmVjdGVkIGdyYXBoIEcgPSAoTm9kZSwgRWRnZSkg
d2hlcmUNCiAgICAgKiAgICAgIE5vZGUgPSBKdW1wIFUgRnVuIFUge1Jvb3R9DQogICAgICogICAg
ICBFZGdlID0geyhSb290LCBmbSl9DQogICAgICogICAgICAgICAgICAgVSB7KFJvb3QsIGopIHwg
aiBpbiBKdW1wfQ0KICAgICAqICAgICAgICAgICAgIFUgeyhSb290LCBmKSB8IG5vdChSZWFjaChm
KSl9DQogICAgICogICAgICAgICAgICAgVSB7KGYsIGcpIHwgKGYsIGcpIGluIFQgYW5kIFJlYWNo
KGYpfQ0KICAgICAqICAgICAgICAgICAgIFUgeyhqLCBnKSB8IChmLCBnLCBqKSBpbiBOIGFuZCBS
ZWFjaChmKX0NCiAgICAgKg0KICAgICAqIExldCBEIGJlIHRoZSBkb21pbmF0b3IgdHJlZSBvZiBH
IHJvb3RlZCBhdCBSb290Lg0KICAgICAqIEZvciBmIGluIEZ1biwgbGV0IGlkb20oZikgYmUgdGhl
IHBhcmVudCBvZiBmIGluIEQuDQogICAgICoNCiAgICAgKiBEZWZpbmUgYW4gYW5hbHlzaXMsIEFf
RG9tLCBiYXNlZCBvbiBEIGFzIGZvbGxvd3M6DQogICAgICogICAgICBBX0RvbShmKSA9IA0KICAg
ICAqICAgICAgICAgICBpZiBpZG9tKGYpID0gUm9vdA0KICAgICAqICAgICAgICAgICAgIHRoZW4g
aWYgUmVhY2goZikgdGhlbiBVbmtub3duIGVsc2UgVW5jYWxsZWQNCiAgICAgKiAgICAgICAgICAg
ICBlbHNlIHRoZSBhbmNlc3RvciBnIG9mIGYgaW4gRCBzdWNoIHRoYXQgaWRvbShnKSA9IFJvb3QN
CiAgICAgKg0KICAgICAqIFByZWNvbmRpdGlvbjogZm9yYWxsIGogaW4gSnVtcC4gKEp1bXBEYXRh
Lm5vZGUgbyBnZXRKdW1wRGF0YSkgaiA9IE5PTkUNCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFs
bCBqIGluIEp1bXAuIChKdW1wRGF0YS5yb290RWRnZSBvIGdldEp1bXBEYXRhKSBqID0gZmFsc2UN
CiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChGdW5jRGF0YS5ub2RlIG8g
Z2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICogICAgICAgICAgICAgICBmb3JhbGwgZiBpbiBG
dW5jLiAoRnVuY0RhdGEucmVhY2ggbyBnZXRGdW5jRGF0YSkgZiA9IFJlYWNoDQogICAgICogUG9z
dGNvbmRpdGlvbjogRnVuY0RhdGEuQURvbSBvIGdldEZ1bmNEYXRhID0gQV9Eb20NCiAgICAgKiAg
ICAgICAgICAgICAgICBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEubm9kZSBvIGdldEp1bXBE
YXRhKSBqID0gTk9ORQ0KICAgICAqICAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChG
dW5jRGF0YS5ub2RlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICopDQogICAgZnVuIGFu
YWx5emVEb20ge3Byb2dyYW0gYXMgUHJvZ3JhbS5UIHtmdW5jdGlvbnMsIG1haW4gPSBmbSwgLi4u
fSwNCgkJICAgIGdldEZ1bmNEYXRhOiBGdW5jLnQgLT4gRnVuY0RhdGEudCwNCgkJICAgIGdldEp1
bXBEYXRhOiBKdW1wLnQgLT4gSnVtcERhdGEudH0gOiB1bml0DQogICAgICA9IGxldA0KCSAgZGF0
YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVybi50DQoNCgkgIHZhbCB7RywgYWRkRWRnZSwgYWRkRWRn
ZScsDQoJICAgICAgIGdldE5vZGVJbmZvLCBnZXRGdW5jTm9kZSwgZ2V0SnVtcE5vZGUsIA0KCSAg
ICAgICByZXNldH0NCgkgICAgPSBKdW1wRnVuY0dyYXBoLm5ld0p1bXBGdW5jR3JhcGgge2dldEp1
bXBEYXRhID0gZ2V0SnVtcERhdGEsDQoJCQkJCSAgICAgIGdldEZ1bmNEYXRhID0gZ2V0RnVuY0Rh
dGF9DQoJICB2YWwgUm9vdCA9IERpcmVjdGVkR3JhcGgubmV3Tm9kZSBHDQoNCgkgIGZ1biBidWls
ZEdyYXBoICgpID0gbGV0DQoJICB2YWwgZm1fbm9kZSA9IGdldEZ1bmNOb2RlIGZtDQoJICAoKiB7
KFJvb3QsIGZtKX0gKikNCgkgIHZhbCBfID0gYWRkRWRnZSB7ZnJvbSA9IFJvb3QsIHRvID0gZm1f
bm9kZX0NCgkgICAgDQoJICB2YWwgXw0KCSAgICA9IFZlY3Rvci5mb3JlYWNoDQoJICAgICAgKGZ1
bmN0aW9ucywNCgkgICAgICAgZm4ge25hbWUgPSBmLCBib2R5ID0gZl9ib2R5LCAuLi59DQoJICAg
ICAgICA9PiBsZXQNCgkJICAgICB2YWwgZl9yZWFjaCA9IEZ1bmNEYXRhLnJlYWNoIChnZXRGdW5j
RGF0YSBmKQ0KCQkgICAgIHZhbCBmX25vZGUgPSBnZXRGdW5jTm9kZSBmDQoJCSAgIGluDQoJCSAg
ICAgaWYgZl9yZWFjaA0KCQkgICAgICAgdGhlbiBFeHAuZm9yZWFjaENhbGwNCgkJCSAgICAoZl9i
b2R5LA0KCQkJICAgICBmbiB7ZnVuYyA9IGcsIGNvbnQsIC4uLn0NCgkJCSAgICAgID0+IGlmIEZ1
bmNEYXRhLnJlYWNoIChnZXRGdW5jRGF0YSBnKQ0KCQkJCSAgIHRoZW4gbGV0DQoJCQkJCSAgdmFs
IGdfbm9kZSA9IGdldEZ1bmNOb2RlIGcNCgkJCQkJaW4NCgkJCQkJICBjYXNlIGNvbnQNCgkJCQkJ
ICAgIG9mIE5PTkUNCgkJCQkJICAgICA9PiAoKiB7KGYsIGcpIHwgKGYsIGcpIGluIFQgDQoJCQkJ
CQkgKiAgICAgICBhbmQgUmVhY2goZil9ICopDQoJCQkJCSAgICAgICAgYWRkRWRnZSB7ZnJvbSA9
IGZfbm9kZSwNCgkJCQkJCQkgdG8gPSBnX25vZGV9DQoJCQkJCSAgICAgfCBTT01FIGoNCgkJCQkJ
ICAgICA9PiBsZXQNCgkJCQkJCSAgdmFsIGpfbm9kZSA9IGdldEp1bXBOb2RlIGoNCgkJCQkJCSAg
dmFsIHJvb3RFZGdlIA0KCQkJCQkJICAgID0gSnVtcERhdGEucm9vdEVkZ2UnDQoJCQkJCQkgICAg
ICAoZ2V0SnVtcERhdGEgaikNCgkJCQkJCWluDQoJCQkJCQkgIGlmICFyb290RWRnZQ0KCQkJCQkJ
ICAgIHRoZW4gKCkNCgkJCQkJCSAgICBlbHNlICgoKiB7KFJvb3QsIGopIHwgaiBpbiBKdW1wfSAq
KQ0KCQkJCQkJICAgICAgICAgIGFkZEVkZ2Uge2Zyb20gPSBSb290LA0KCQkJCQkJCQkgICB0byA9
IGpfbm9kZX07DQoJCQkJCQkJICByb290RWRnZSA6PSB0cnVlKTsNCgkJCQkJCSAgKCogeyhqLCBn
KSB8IChmLCBnLCBqKSBpbiBODQoJCQkJCQkgICAqICAgICAgIGFuZCBSZWFjaChmKX0gKikNCgkJ
CQkJCSAgYWRkRWRnZSB7ZnJvbSA9IGpfbm9kZSwNCgkJCQkJCQkgICB0byA9IGdfbm9kZX0NCgkJ
CQkJCWVuZA0KCQkJCQllbmQNCgkJCQkgICBlbHNlICgpKQ0KCQkgICAgICAgZWxzZSAoKiB7KFJv
b3QsIGYpIHwgbm90KFJlYWNoKGYpKX0gKikNCgkJCSAgICBhZGRFZGdlIHtmcm9tID0gUm9vdCwN
CgkJCQkgICAgIHRvID0gZl9ub2RlfQ0KCQkgICBlbmQpDQogICAgICAgICAgaW4gKCkgZW5kDQoJ
ICB2YWwgYnVpbGRHcmFwaCANCgkgICAgPSBDb250cm9sLnRyYWNlQ2FsbCAiYnVpbGRHcmFwaCIg
YnVpbGRHcmFwaA0KCSAgdmFsIF8gPSBidWlsZEdyYXBoICgpDQoNCgkgIGZ1biBjb21wdXRlRG9t
aW5hdG9ycyAoKSA9IGxldA0KCSAgdmFsIHtpZG9tfSA9IEdyYXBoLmRvbWluYXRvcnMge2dyYXBo
ID0gRywgcm9vdCA9IFJvb3R9DQogICAgICAgICAgaW4gaWRvbSBlbmQNCgkgIHZhbCBjb21wdXRl
RG9taW5hdG9ycyANCgkgICAgPSBDb250cm9sLnRyYWNlQ2FsbCAiY29tcHV0ZURvbWluYXRvcnMi
IGNvbXB1dGVEb21pbmF0b3JzDQoJICB2YWwgaWRvbSA9IGNvbXB1dGVEb21pbmF0b3JzICgpDQoN
CgkgIGZ1biBjb21wdXRlQURvbSAoKSA9IGxldA0KCSAgZnVuIGFuY2VzdG9yIG5vZGUNCgkgICAg
PSBsZXQNCgkJdmFsIHBhcmVudCA9IGlkb20gbm9kZQ0KCSAgICAgIGluDQoJCWlmIE5vZGUuZXF1
YWxzKHBhcmVudCwgUm9vdCkNCgkJICB0aGVuIG5vZGUNCgkJICBlbHNlIGFuY2VzdG9yIHBhcmVu
dA0KCSAgICAgIGVuZA0KDQogICAgICAgICAgdmFsIF8NCgkgICAgPSBWZWN0b3IuZm9yZWFjaA0K
CSAgICAgIChmdW5jdGlvbnMsDQoJICAgICAgIGZuIHtuYW1lLCAuLi59DQoJICAgICAgICA9PiBs
ZXQNCgkJICAgICB2YWwgRnVuY0RhdGEuVCB7QURvbSwgcmVhY2gsIG5vZGUsIC4uLn0gPSBnZXRG
dW5jRGF0YSBuYW1lDQoJCSAgICAgdmFsIGZfQURvbSA9IEFEb20NCgkJICAgICB2YWwgZl9yZWFj
aCA9ICFyZWFjaA0KCQkgICAgIHZhbCBmX25vZGUgPSB2YWxPZiAoIW5vZGUpDQoJCSAgICAgZGF0
YXR5cGUgeiA9IGRhdGF0eXBlIEp1bXBGdW5jR3JhcGgudA0KCQkgICBpbg0KCQkgICAgIGlmIE5v
ZGUuZXF1YWxzKGlkb20gZl9ub2RlLCBSb290KQ0KCQkgICAgICAgdGhlbiBpZiBmX3JlYWNoDQoJ
CQkgICAgICB0aGVuIGZfQURvbSA6PSBVbmtub3duDQoJCQkgICAgICBlbHNlIGZfQURvbSA6PSBV
bmNhbGxlZA0KCQkgICAgICAgZWxzZSBsZXQNCgkJCSAgICAgICgqIFVzZSB0aGlzIGZvciB0aGUg
YW5jZXN0b3IgdmVyc2lvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIGxfbm9k
ZSA9IGFuY2VzdG9yIGZfbm9kZQ0KCQkJICAgICAgICopDQoJCQkgICAgICAoKiBVc2UgdGhpcyBm
b3IgdGhlIHBhcmVudCB2ZXJzaW9uICopDQoJCQkgICAgICB2YWwgbF9ub2RlID0gaWRvbSBmX25v
ZGUNCgkJCSAgICAgIHZhbCBsID0gZ2V0Tm9kZUluZm8gbF9ub2RlDQoJCQkgICAgaW4NCgkJCSAg
ICAgIGNhc2UgZ2V0Tm9kZUluZm8gbF9ub2RlDQoJCQkJb2YgRnVuY05vZGUgZyA9PiBmX0FEb20g
Oj0gRnVuY0xhYmVsIGcNCgkJCQkgfCBKdW1wTm9kZSBqID0+IGZfQURvbSA6PSBKdW1wTGFiZWwg
ag0KCQkJICAgIGVuZA0KCQkgICBlbmQpDQoJICBpbiAoKSBlbmQNCgkgIHZhbCBjb21wdXRlQURv
bSANCgkgICAgPSBDb250cm9sLnRyYWNlQ2FsbCAiY29tcHV0ZSBBRG9tIiBjb21wdXRlQURvbQ0K
CSAgdmFsIF8gPSBjb21wdXRlQURvbSAoKQ0KDQoJICB2YWwgXyA9IHJlc2V0IChmbiBuID0+IG5v
dCAoTm9kZS5lcXVhbHMobiwgUm9vdCkpKQ0KCWluDQoJICAoKQ0KCWVuZA0KICAgIHZhbCBhbmFs
eXplRG9tIA0KICAgICAgPSBDb250cm9sLnRyYWNlQ2FsbCAiYW5hbHl6ZURvbSIgYW5hbHl6ZURv
bQ0KZW5kDQoNCnN0cnVjdHVyZSBUcmFuc2Zvcm0gPQ0KICBzdHJ1Y3QNCg0KICAgIHN0cnVjdHVy
ZSBHcmFwaCA9IERpcmVjdGVkR3JhcGgNCiAgICBzdHJ1Y3R1cmUgTm9kZSA9IEdyYXBoLk5vZGUN
CiAgICBzdHJ1Y3R1cmUgRWRnZSA9IEdyYXBoLkVkZ2UNCiAgICBzdHJ1Y3R1cmUgRGZzUGFyYW0g
PSBHcmFwaC5EZnNQYXJhbQ0KDQogICAgKCoNCiAgICAgKiBQcmVjb25kaXRpb246IGZvcmFsbCBq
IGluIEp1bXAuIChKdW1wRGF0YS5ub2RlIG8gZ2V0SnVtcERhdGEpIGogPSBOT05FDQogICAgICog
ICAgICAgICAgICAgICBmb3JhbGwgaiBpbiBKdW1wLiAoSnVtcERhdGEuc3RhdHVzIG8gZ2V0SnVt
cERhdGEpIGogPSBUT0RPDQogICAgICogICAgICAgICAgICAgICBmb3JhbGwgaiBpbiBKdW1wLiAo
SnVtcERhdGEucHJlZml4ZXMgbyBnZXRKdW1wRGF0YSkgaiA9IFtdDQogICAgICogICAgICAgICAg
ICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEubm9kZSBvIGdldEZ1bmNEYXRhKSBmID0g
Tk9ORQ0KICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuQSBvIGdldEZ1bmNEYXRhID0gQQ0K
ICAgICAqICAgICAgICAgICAgICAgIHdoZXJlIEEgaXMgYSBzYWZlIGFuYWx5c2lzDQogICAgICog
ICAgICAgICAgICAgICBGdW5jRGF0YS5jYWxsZXJzIG8gZ2V0RnVuY0RhdGENCiAgICAgKiAgICAg
ICAgICAgICAgID0ge25vbnRhaWwgPSBOb250YWlsQ2FsbGVycywgdGFpbCA9IFRhaWxDYWxsZXJz
fQ0KICAgICAqICAgICAgICAgICAgICAgRnVuY0RhdGEuY2FsbGVlcyBvIGdldEZ1bmNEYXRhDQog
ICAgICogICAgICAgICAgICAgICA9IHtub250YWlsID0gTm9udGFpbENhbGxlZXMsIHRhaWwgPSBU
YWlsQ2FsbGVlc30NCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChKdW1w
RGF0YS5zdGF0dXMgbyBnZXRGdW5jRGF0YSkgZiA9IFRPRE8NCiAgICAgKiAgICAgICAgICAgICAg
IGZvcmFsbCBmIGluIEZ1bmMuIChKdW1wRGF0YS5wcmVmaXhlcyBvIGdldEZ1bmNEYXRhKSBmID0g
W10NCiAgICAgKiAgICAgICAgICAgICAgIGZvcmFsbCBmIGluIEZ1bmMuIChKdW1wRGF0YS5yZXBs
YWNlIG8gZ2V0RnVuY0RhdGEpIGYgPSBOT05FDQogICAgICogUG9zdGNvbmRpdGlvbjogZm9yYWxs
IGogaW4gSnVtcC4gKEp1bXBEYXRhLm5vZGUgbyBnZXRKdW1wRGF0YSkgaiA9IE5PTkUNCiAgICAg
KiAgICAgICAgICAgICAgICBmb3JhbGwgZiBpbiBGdW5jLiAoRnVuY0RhdGEubm9kZSBvIGdldEZ1
bmNEYXRhKSBmID0gTk9ORQ0KICAgICAqKQ0KICAgIGZ1biB0cmFuc2Zvcm0ge3Byb2dyYW0gYXMg
UHJvZ3JhbS5UIHtkYXRhdHlwZXMsIGdsb2JhbHMsIA0KCQkJCQkgZnVuY3Rpb25zLCBtYWlufSwN
CgkJICAgZ2V0RnVuY0RhdGE6IEZ1bmMudCAtPiBGdW5jRGF0YS50LA0KCQkgICBnZXRKdW1wRGF0
YTogSnVtcC50IC0+IEp1bXBEYXRhLnR9IDogUHJvZ3JhbS50DQogICAgICA9IGxldA0KCSAgZGF0
YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVybi50DQoNCgkgIHZhbCB7RywgYWRkRWRnZSwgYWRkRWRn
ZScsDQoJICAgICAgIGdldE5vZGVJbmZvLCBnZXRKdW1wTm9kZSwgZ2V0RnVuY05vZGUsIA0KCSAg
ICAgICByZXNldH0NCgkgICAgPSBKdW1wRnVuY0dyYXBoLm5ld0p1bXBGdW5jR3JhcGgge2dldEZ1
bmNEYXRhID0gZ2V0RnVuY0RhdGEsDQoJCQkJCSAgICAgIGdldEp1bXBEYXRhID0gZ2V0SnVtcERh
dGF9DQoNCgkgIHZhbCByb290cyA9IHJlZiBbXQ0KCSAgdmFsIF8gDQoJICAgID0gVmVjdG9yLmZv
cmVhY2gNCgkgICAgICAoZnVuY3Rpb25zLA0KCSAgICAgICBmbiB7bmFtZSA9IGYsIC4uLn0NCgkg
ICAgICAgID0+IGxldA0KCQkgICAgIHZhbCBGdW5jRGF0YS5UIHtBLCBjb250aWZ5LCAuLi59IA0K
CQkgICAgICAgPSBnZXRGdW5jRGF0YSBmDQoJCSAgICAgdmFsIGZfbm9kZSA9IGdldEZ1bmNOb2Rl
IGYNCgkJICAgaW4NCgkJICAgICBjYXNlICFBDQoJCSAgICAgICBvZiBVbmNhbGxlZCA9PiAoTGlz
dC5wdXNoKHJvb3RzLCBmX25vZGUpOw0KCQkJCSAgICAgICBjb250aWZ5IDo9IGZhbHNlKQ0KCQkJ
fCBVbmtub3duID0+IChMaXN0LnB1c2gocm9vdHMsIGZfbm9kZSk7DQoJCQkJICAgICAgY29udGlm
eSA6PSBmYWxzZSkNCgkJICAgICAgICB8IEp1bXBMYWJlbCBqDQoJCQk9PiBsZXQNCgkJCSAgICAg
dmFsIGxfbm9kZSA9IGdldEp1bXBOb2RlIGoNCgkJCSAgIGluDQoJCQkgICAgIExpc3QucHVzaChy
b290cywgbF9ub2RlKTsNCgkJCSAgICAgY29udGlmeSA6PSB0cnVlOw0KCQkJICAgICBhZGRFZGdl
IHtmcm9tID0gbF9ub2RlLA0KCQkJCSAgICAgIHRvID0gZl9ub2RlfQ0KCQkJICAgZW5kDQoJCSAg
ICAgICAgfCBGdW5jTGFiZWwgZw0KCQkJPT4gbGV0DQoJCQkgICAgIHZhbCBsX25vZGUgPSBnZXRG
dW5jTm9kZSBnDQoJCQkgICBpbg0KCQkJICAgICBjb250aWZ5IDo9IHRydWU7DQoJCQkgICAgIGFk
ZEVkZ2Uge2Zyb20gPSBsX25vZGUsDQoJCQkJICAgICAgdG8gPSBmX25vZGV9DQoJCQkgICBlbmQN
CgkJICAgZW5kKQ0KCSAgdmFsIF8gPSByZXNldCAoZm4gXyA9PiB0cnVlKQ0KDQoJICBmdW4gY2Fz
Y2FkZSBmcw0KCSAgICA9IGxldA0KCQl2YWwge3llcyA9IGNvbnRpZmlhYmxlLCBubyA9IHVuY29u
dGlmaWFibGV9DQoJCSAgPSBMaXN0LnBhcnRpdGlvbg0KCQkgICAgKExpc3QucmV2IGZzLCBmbiBn
ID0+IEZ1bmNEYXRhLmNvbnRpZnkgKGdldEZ1bmNEYXRhIGcpKQ0KDQoJCWZ1biBkb2l0IGYNCgkJ
ICA9IGxldA0KCQkgICAgICB2YWwgRnVuY0RhdGEuVCB7Y2FsbGVlcywgcHJlZml4ZXMsIC4uLn0g
PSBnZXRGdW5jRGF0YSBmDQoJCSAgICBpbg0KCQkgICAgICBMaXN0LmZvcmVhY2gNCgkJICAgICAg
KCEoI3RhaWwgY2FsbGVlcyksDQoJCSAgICAgICBmbiBnID0+IGlmIChGdW5jRGF0YS5zdGF0dXMg
KGdldEZ1bmNEYXRhIGcpKSA8PiBET05FDQoJCQkJIHRoZW4gbGV0DQoJCQkJCXZhbCBjb250aWZ5
IA0KCQkJCQkgID0gRnVuY0RhdGEuY29udGlmeScgKGdldEZ1bmNEYXRhIGcpDQoJCQkJICAgICAg
aW4NCgkJCQkJY29udGlmeSA6PSBmYWxzZQ0KCQkJCSAgICAgIGVuZA0KCQkJCSBlbHNlICgpKTsN
CgkJICAgICAgTGlzdC5mb3JlYWNoKCFwcmVmaXhlcywgZG9pdCkNCgkJICAgIGVuZA0KCSAgICAg
IGluDQoJCWNhc2UgdW5jb250aWZpYWJsZQ0KCQkgIG9mIFtdIA0KCQkgICA9PiBjb250aWZpYWJs
ZQ0KCQkgICB8IF8gDQoJCSAgID0+IGxldA0KCQkJdmFsIF8gPSBMaXN0LmZvcmVhY2ggKHVuY29u
dGlmaWFibGUsIGRvaXQpDQoJCSAgICAgIGluDQoJCQljYXNjYWRlIGNvbnRpZmlhYmxlDQoJCSAg
ICAgIGVuZA0KCSAgICAgIGVuZA0KDQoJICAoKiBTdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50
cyBvZiBhIGdyb3VwIG9mIGZ1bmN0aW9ucy4gKikNCgkgIGZ1biBnZXRTQ0NTIChmczogRnVuYy50
IGxpc3QpIDogRnVuYy50IGxpc3QgbGlzdA0KCSAgICA9IGxldA0KCQl2YWwge0csIGFkZEVkZ2Us
IGFkZEVkZ2UnLA0KCQkgICAgIGdldE5vZGVJbmZvLCBnZXRGdW5jTm9kZSwgDQoJCSAgICAgcmVz
ZXR9DQoJCSAgPSBKdW1wRnVuY0dyYXBoLm5ld0Z1bmNHcmFwaCB7Z2V0RnVuY0RhdGEgPSBnZXRG
dW5jRGF0YX0NCg0KCQl2YWwgXyANCgkJICA9IExpc3QuZm9yZWFjaA0KCQkgICAgKGZzLA0KCQkg
ICAgIGZuIGYgPT4gbGV0DQoJCQkgICAgICAgdmFsIGZfbm9kZSA9IGdldEZ1bmNOb2RlIGYNCg0K
CQkJICAgICAgIGZ1biBkb2l0IGcNCgkJCQkgPSBsZXQNCgkJCQkgICAgIHZhbCBGdW5jRGF0YS5U
IHtjYWxsZWVzLCBwcmVmaXhlcywgLi4ufQ0KCQkJCSAgICAgICA9IGdldEZ1bmNEYXRhIGcNCgkJ
CQkgICAgICAgDQoJCQkJICAgICBmdW4gZG9pdCcgaA0KCQkJCSAgICAgICA9IGlmIExpc3QuY29u
dGFpbnMoZnMsIGgsIEZ1bmMuZXF1YWxzKQ0KCQkJCQkgICB0aGVuIGxldA0KCQkJCQkJICB2YWwg
aF9ub2RlID0gZ2V0RnVuY05vZGUgaA0KCQkJCQkJaW4NCgkJCQkJCSAgYWRkRWRnZSB7ZnJvbSA9
IGhfbm9kZSwNCgkJCQkJCQkgICB0byA9IGZfbm9kZX0NCgkJCQkJCWVuZA0KCQkJCQkgICBlbHNl
ICgpDQoJCQkJICAgaW4NCgkJCQkgICAgIExpc3QuZm9yZWFjaA0KCQkJCSAgICAgKCEoI25vbnRh
aWwgY2FsbGVlcyksIA0KCQkJCSAgICAgIGZuIChoLF8pID0+IGRvaXQnIGgpOw0KCQkJCSAgICAg
TGlzdC5mb3JlYWNoDQoJCQkJICAgICAoISgjdGFpbCBjYWxsZWVzKSwgDQoJCQkJICAgICAgZm4g
aCA9PiBkb2l0JyBoKTsNCgkJCQkgICAgIExpc3QuZm9yZWFjaA0KCQkJCSAgICAgKCFwcmVmaXhl
cywNCgkJCQkgICAgICBmbiBnJyA9PiBkb2l0IGcnKQ0KCQkJCSAgIGVuZA0KCQkJICAgICBpbg0K
CQkJICAgICAgIGRvaXQgZg0KCQkJICAgICBlbmQpDQoNCgkJdmFsIHNjY3MgPSBHcmFwaC5zdHJv
bmdseUNvbm5lY3RlZENvbXBvbmVudHMgRw0KCQl2YWwgXyA9IHJlc2V0IChmbiBfID0+IHRydWUp
DQoJICAgICAgaW4NCgkJTGlzdC5tYXAgKHNjY3MsIGZuIHNjYyA9PiBMaXN0LnJldk1hcCAoc2Nj
LCBnZXROb2RlSW5mbykpDQoJICAgICAgZW5kDQoNCgkgIGV4Y2VwdGlvbiBOb3BlDQoJICB2YWwg
cmVjIGdldFNDQ1NIZWFkczogRnVuYy50IGxpc3QgLT4gRnVuYy50IGxpc3QNCgkgICAgPSBmbiBm
cyBhcyBbXSA9PiBbXQ0KCSAgICAgICB8IGZzIGFzIFtmXSA9PiBjYXNjYWRlIGZzDQoJICAgICAg
IHwgZnMNCgkgICAgICAgPT4gKGNhc2NhZGUgbyBMaXN0LmNvbmNhdE1hcCkNCgkgICAgICAgICAg
KGdldFNDQ1MgZnMsDQoJCSAgIGZuIGZzIGFzIFtdID0+IFtdDQoJCSAgICB8IGZzIGFzIFtmXSA9
PiBbZl0NCgkJICAgIHwgZnMNCgkJICAgID0+IGxldA0KCQkJIHZhbCBvdXRzaWRlQ2FsbGVlID0g
cmVmIE5PTkUNCgkJCSB2YWwgaW5zaWRlRnVuY3Rpb25zDQoJCQkgICA9IGxldA0KCQkJICAgICAg
IGZ1biBkb2l0IGYNCgkJCQkgPSBsZXQNCgkJCQkgICAgIHZhbCBwcmVmaXhlcw0KCQkJCSAgICAg
ICA9IEZ1bmNEYXRhLnByZWZpeGVzIChnZXRGdW5jRGF0YSBmKQ0KCQkJCSAgIGluDQoJCQkJICAg
ICBmIDo6IExpc3QuY29uY2F0TWFwKHByZWZpeGVzLCBkb2l0KQ0KCQkJCSAgIGVuZA0KCQkJICAg
ICBpbg0KCQkJICAgICAgIExpc3QuY29uY2F0TWFwKGZzLCBkb2l0KQ0KCQkJICAgICBlbmQNCgkJ
CSBmdW4gY2hlY2sgZw0KCQkJICAgPSBub3QgKExpc3QuY29udGFpbnMoaW5zaWRlRnVuY3Rpb25z
LCANCgkJCQkJCWcsDQoJCQkJCQlGdW5jLmVxdWFscykpDQoJCQkgdmFsIF8NCgkJCSAgID0gTGlz
dC5mb3JlYWNoDQoJCQkgICAgIChmcywNCgkJCSAgICAgIGZuIGYgPT4gbGV0DQoJCQkJCXZhbCBj
YWxsZXJzDQoJCQkJCSAgPSBGdW5jRGF0YS5jYWxsZXJzJyAoZ2V0RnVuY0RhdGEgZikNCgkJCQkg
ICAgICBpbg0KCQkJCQlpZiBMaXN0LmV4aXN0cw0KCQkJCQkgICAoISgjbm9udGFpbCBjYWxsZXJz
KSwNCgkJCQkJICAgIGZuIChnLF8pID0+IGNoZWNrIGcpDQoJCQkJCSAgIG9yZWxzZQ0KCQkJCQkg
ICBMaXN0LmV4aXN0cw0KCQkJCQkgICAoISgjdGFpbCBjYWxsZXJzKSwNCgkJCQkJICAgIGZuIGcg
PT4gY2hlY2sgZykNCgkJCQkJICB0aGVuIGNhc2UgIW91dHNpZGVDYWxsZWUNCgkJCQkJCSBvZiBO
T05FDQoJCQkJCQkgID0+IG91dHNpZGVDYWxsZWUgOj0gU09NRSBmDQoJCQkJCQkgIHwgU09NRSBf
ID0+IHJhaXNlIE5vcGUNCgkJCQkJICBlbHNlICgpDQoJCQkJICAgICAgZW5kKQ0KCQkgICAgICAg
aW4NCgkJCSBjYXNlICFvdXRzaWRlQ2FsbGVlDQoJCQkgICBvZiBOT05FID0+IEVycm9yLmJ1ZyAi
Z2V0U0NDU0hlYWRzIg0KCQkJICAgIHwgU09NRSBmDQoJCQkgICAgPT4gbGV0DQoJCQkJIHZhbCBw
cmVmaXhlcw0KCQkJCSAgID0gRnVuY0RhdGEucHJlZml4ZXMnIChnZXRGdW5jRGF0YSBmKQ0KCQkJ
CSB2YWwgcmVzdCANCgkJCQkgICA9IExpc3QucmVtb3ZlRmlyc3QNCgkJCQkgICAgIChmcywNCgkJ
CQkgICAgICBmbiBnID0+IEZ1bmMuZXF1YWxzIChmLCBnKSkNCgkJCSAgICAgICBpbg0KCQkJCSBw
cmVmaXhlcyA6PSAoZ2V0U0NDU0hlYWRzIHJlc3QpIEAgIXByZWZpeGVzOw0KCQkJCSBbZl0NCgkJ
CSAgICAgICBlbmQNCgkJICAgICAgIGVuZA0KCQkgICAgICAgaGFuZGxlIE5vcGUNCgkJICAgICAg
ICA9PiAoTGlzdC5mb3JlYWNoDQoJCQkgICAgKGZzLA0KCQkJICAgICBmbiBmID0+IGxldA0KCQkJ
CSAgICAgICB2YWwgY29udGlmeSANCgkJCQkJID0gRnVuY0RhdGEuY29udGlmeScgKGdldEZ1bmNE
YXRhIGYpDQoJCQkJICAgICBpbg0KCQkJCSAgICAgICBjb250aWZ5IDo9IGZhbHNlDQoJCQkJICAg
ICBlbmQpOw0KCQkJICAgIGZzKSkNCg0KKCoNCgkgIGZ1biBnZXRTQ0NTSGVhZHMgKGZzIDogRnVu
Yy50IGxpc3QpIDogRnVuYy50IGxpc3QNCgkgICAgPSAoY2FzY2FkZSBvIExpc3QuY29uY2F0TWFw
KQ0KCSAgICAgIChnZXRTQ0NTIGZzLA0KCSAgICAgICBmbiBmcw0KCSAgICAgICAgPT4gbGV0DQoJ
CSAgICAgdmFsIG91dHNpZGVDYWxsZWUgPSByZWYgTk9ORQ0KCQkgICAgIHZhbCBpbnNpZGVGdW5j
dGlvbnMNCgkJICAgICAgID0gbGV0DQoJCQkgICBmdW4gZG9pdCBmDQoJCQkgICAgID0gbGV0DQoJ
CQkJIHZhbCBwcmVmaXhlcyANCgkJCQkgICA9IEZ1bmNEYXRhLnByZWZpeGVzIChnZXRGdW5jRGF0
YSBmKQ0KCQkJICAgICAgIGluDQoJCQkJIGYgOjogTGlzdC5jb25jYXRNYXAocHJlZml4ZXMsIGRv
aXQpDQoJCQkgICAgICAgZW5kDQoJCQkgaW4NCgkJCSAgIExpc3QuY29uY2F0TWFwKGZzLCBkb2l0
KQ0KCQkJIGVuZA0KCQkgICAgIGZ1biBjaGVjayBnDQoJCSAgICAgICA9IG5vdCAoTGlzdC5jb250
YWlucyhpbnNpZGVGdW5jdGlvbnMsIGcsIEZ1bmMuZXF1YWxzKSkNCgkJICAgICB2YWwgXw0KCQkg
ICAgICAgPSBMaXN0LmZvcmVhY2gNCgkJICAgICAgICAgKGZzLA0KCQkJICBmbiBmID0+IGxldA0K
CQkJCSAgICB2YWwgY2FsbGVycyANCgkJCQkgICAgICA9IEZ1bmNEYXRhLmNhbGxlcnMnIChnZXRG
dW5jRGF0YSBmKQ0KCQkJCSAgaW4NCgkJCQkgICAgaWYgTGlzdC5leGlzdHMNCgkJCQkgICAgICAg
KCEoI25vbnRhaWwgY2FsbGVycyksDQoJCQkJCWZuIChnLF8pID0+IGNoZWNrIGcpDQoJCQkJICAg
ICAgIG9yZWxzZQ0KCQkJCSAgICAgICBMaXN0LmV4aXN0cw0KCQkJCSAgICAgICAoISgjdGFpbCBj
YWxsZXJzKSwNCgkJCQkJZm4gZyA9PiBjaGVjayBnKQ0KCQkJCSAgICAgIHRoZW4gY2FzZSAhb3V0
c2lkZUNhbGxlZQ0KCQkJCQkgICAgIG9mIE5PTkUgPT4gb3V0c2lkZUNhbGxlZSA6PSBTT01FIGYN
CgkJCQkJICAgICAgfCBTT01FIF8gPT4gcmFpc2UgTm9wZQ0KCQkJCSAgICAgIGVsc2UgKCkNCgkJ
CQkgIGVuZCkNCgkJICAgaW4NCgkJICAgICBjYXNlICFvdXRzaWRlQ2FsbGVlDQoJCSAgICAgICBv
ZiBOT05FID0+IEVycm9yLmJ1ZyAiZ2V0U0NDSGVhZHMiDQoJCQl8IFNPTUUgZiANCgkJCT0+IGxl
dA0KCQkJICAgICB2YWwgcHJlZml4ZXMgPSBGdW5jRGF0YS5wcmVmaXhlcycgKGdldEZ1bmNEYXRh
IGYpDQoJCQkgICAgIHZhbCByZXN0ID0gTGlzdC5yZW1vdmVGaXJzdCANCgkJCSAgICAgICAgICAg
ICAgICAoZnMsIGZuIGcgPT4gRnVuYy5lcXVhbHMgKGYsIGcpKQ0KCQkJICAgaW4NCgkJCSAgICAg
Y2FzZSByZXN0DQoJCQkgICAgICAgb2YgW10gPT4gKCkNCgkJCQl8IFtnXSA9PiBwcmVmaXhlcyA6
PSBnIDo6ICghcHJlZml4ZXMpDQoJCQkJfCBfID0+IHByZWZpeGVzIDo9IChnZXRTQ0NTSGVhZHMg
cmVzdCkgQCANCgkJCQkgICAgICAgICAgICAgICAgICAgIXByZWZpeGVzOw0KCQkJICAgICBbZl0N
CgkJCSAgIGVuZA0KCQkgICBlbmQNCgkJICAgaGFuZGxlIE5vcGUNCgkJICAgID0+IChMaXN0LmZv
cmVhY2gNCgkJCShmcywNCgkJCSBmbiBmID0+IGxldA0KCQkJCSAgIHZhbCBjb250aWZ5IA0KCQkJ
CSAgICAgPSBGdW5jRGF0YS5jb250aWZ5JyAoZ2V0RnVuY0RhdGEgZikNCgkJCQkgaW4NCgkJCQkg
ICBjb250aWZ5IDo9IGZhbHNlDQoJCQkJIGVuZCk7DQoJCQlmcykpDQoqKQ0KDQoJICBkYXRhdHlw
ZSB6ID0gZGF0YXR5cGUgSnVtcEZ1bmNHcmFwaC50DQoJICBmdW4gcHJvY2Vzc05vZGUgbg0KCSAg
ICA9IGxldA0KCQl2YWwgc3VjY3MgPSBMaXN0Lm1hcChOb2RlLnN1Y2Nlc3NvcnMgbiwgRWRnZS50
bykNCgkJdmFsIF8gDQoJCSAgPSBBc3NlcnQuYXNzZXJ0DQoJCSAgICAoIlRyYW5zZm9ybS50cmFu
c2Zvcm06IHByb2Nlc3NOb2RlIiwNCgkJICAgICBmbiAoKSANCgkJICAgICAgPT4gTGlzdC5mb3Jh
bGwNCgkJICAgICAgICAgKHN1Y2NzLA0KCQkJICBmbiBuIA0KCQkJICAgPT4gY2FzZSBnZXROb2Rl
SW5mbyBuDQoJCQkJb2YgSnVtcE5vZGUgag0KCQkJCSA9PiBKdW1wRGF0YS5zdGF0dXMgKGdldEp1
bXBEYXRhIGopID0gQ1VSUkVOVA0KCQkJICAgICAgICAgfCBGdW5jTm9kZSBmDQoJCQkJID0+IEZ1
bmNEYXRhLnN0YXR1cyAoZ2V0RnVuY0RhdGEgZikgPSBDVVJSRU5UKSkNCg0KCQl2YWwgc3VjY3Mg
PSBMaXN0LmtlZXBBbGxNYXANCgkJICAgICAgICAgICAgKHN1Y2NzLA0KCQkJICAgICBmbiBuID0+
IGNhc2UgZ2V0Tm9kZUluZm8gbg0KCQkJCSAgICAgICBvZiBKdW1wTm9kZSBqID0+IE5PTkUNCgkJ
CQkgICAgICAgIHwgRnVuY05vZGUgZiA9PiBTT01FIGYpDQoNCigqDQoJCWZ1biBkb2l0IChwcmVm
aXhlcywgc3RhdHVzKQ0KCQkgID0gKGNhc2Ugc3VjY3MNCgkJICAgICAgIG9mIFtdID0+ICgpDQoJ
CQl8IFtnXSA9PiBwcmVmaXhlcyA6PSBnIDo6ICghcHJlZml4ZXMpDQoJCQl8IF8gPT4gcHJlZml4
ZXMgOj0gKGdldFNDQ1NIZWFkcyBzdWNjcykgQCAhcHJlZml4ZXM7DQoJCSAgICAgTGlzdC5mb3Jl
YWNoDQoJCSAgICAgKHN1Y2NzLA0KCQkgICAgICBmbiBmID0+IChGdW5jRGF0YS5zdGF0dXMnIChn
ZXRGdW5jRGF0YSBmKSkgOj0gRE9ORSk7DQoJCSAgICAgc3RhdHVzIDo9IENVUlJFTlQpDQoqKQ0K
CQlmdW4gZG9pdCAocHJlZml4ZXMsIHN0YXR1cykNCgkJICA9IChwcmVmaXhlcyA6PSAoZ2V0U0ND
U0hlYWRzIHN1Y2NzKSBAICFwcmVmaXhlczsNCgkJICAgICBMaXN0LmZvcmVhY2gNCgkJICAgICAo
c3VjY3MsDQoJCSAgICAgIGZuIGYgPT4gKEZ1bmNEYXRhLnN0YXR1cycgKGdldEZ1bmNEYXRhIGYp
KSA6PSBET05FKTsNCgkJICAgICBzdGF0dXMgOj0gQ1VSUkVOVCkNCgkgICAgICBpbiANCgkJY2Fz
ZSBnZXROb2RlSW5mbyBuDQoJCSAgb2YgSnVtcE5vZGUgaiANCgkJICAgPT4gbGV0DQoJCQl2YWwg
cHJlZml4ZXMgPSBKdW1wRGF0YS5wcmVmaXhlcycgKGdldEp1bXBEYXRhIGopDQoJCQl2YWwgc3Rh
dHVzID0gSnVtcERhdGEuc3RhdHVzJyAoZ2V0SnVtcERhdGEgaikNCgkJICAgICAgaW4gDQoJCQlk
b2l0IChwcmVmaXhlcywgc3RhdHVzKQ0KCQkgICAgICBlbmQgDQoJCSAgIHwgRnVuY05vZGUgZg0K
CQkgICA9PiBsZXQNCgkJCXZhbCBwcmVmaXhlcyA9IEZ1bmNEYXRhLnByZWZpeGVzJyAoZ2V0RnVu
Y0RhdGEgZikNCgkJCXZhbCBzdGF0dXMgPSBGdW5jRGF0YS5zdGF0dXMnIChnZXRGdW5jRGF0YSBm
KQ0KCQkgICAgICBpbiANCgkJCWRvaXQgKHByZWZpeGVzLCBzdGF0dXMpDQoJCSAgICAgIGVuZA0K
CSAgICAgIGVuZA0KDQoJICB2YWwgZGZzX3BhcmFtID0gRGZzUGFyYW0uZmluaXNoTm9kZSBwcm9j
ZXNzTm9kZQ0KCSAgdmFsIF8gPSBHcmFwaC5kZnNOb2RlcyAoRywgIXJvb3RzLCBkZnNfcGFyYW0p
DQoNCgkgICgqIEZvciBmdW5jdGlvbnMgdHVybmVkIGludG8gY29udGludWF0aW9ucywNCgkgICAq
ICByZWNvcmQgdGhlaXIgYXJncywgYm9keSwgYW5kIG5ldyBuYW1lLg0KCSAgICopDQoJICB2YWwg
XyANCgkgICAgPSBWZWN0b3IuZm9yZWFjaA0KCSAgICAgIChmdW5jdGlvbnMsDQoJICAgICAgIGZu
IHtuYW1lID0gZiwgYXJncyA9IGZfYXJncywgYm9keSA9IGZfYm9keSwgLi4ufSANCgkgICAgICAg
ID0+IGxldA0KCQkgICAgIHZhbCBGdW5jRGF0YS5UIHtjb250aWZ5LCByZXBsYWNlLCAuLi59ID0g
Z2V0RnVuY0RhdGEgZg0KCQkgICAgIHZhbCBfIA0KCQkgICAgICAgPSBBc3NlcnQuYXNzZXJ0DQoJ
CSAgICAgICAgICgiVHJhbnNmb3JtLnRyYW5zZm9ybTogRE9ORSBvciBDVVJSRU5UIiwNCgkJCSAg
Zm4gKCkgPT4gRnVuY0RhdGEuc3RhdHVzIChnZXRGdW5jRGF0YSBmKSA9IERPTkUNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JlbHNlDQoJCQkJICAgRnVuY0RhdGEuc3RhdHVz
IChnZXRGdW5jRGF0YSBmKSA9IENVUlJFTlQpDQoJCSAgIGluDQoJCSAgICAgaWYgIWNvbnRpZnkN
CgkJICAgICAgIHRoZW4gbGV0DQoJCQkgICAgICB2YWwganVtcCA9IEp1bXAubmV3U3RyaW5nIChG
dW5jLm9yaWdpbmFsTmFtZSBmKQ0KCQkJICAgIGluIA0KCQkJICAgICAgcmVwbGFjZSA6PSBTT01F
IHtqdW1wID0ganVtcCwNCgkJCQkJICAgICAgIGFyZ3MgPSBmX2FyZ3MsDQoJCQkJCSAgICAgICBi
b2R5ID0gZl9ib2R5fQ0KCQkJCQkgICAgICAgDQoJCQkgICAgZW5kDQoJCSAgICAgICBlbHNlICgp
DQoJCSAgIGVuZCkNCg0KCSAgKCogV2FsayBvdmVyIGFsbCBmdW5jdGlvbnMsIHJlbW92aW5nIHRo
b3NlIHRoYXQgYXJlbid0IHRvcCBsZXZlbCwNCgkgICAqICBhbmQgZGVzY2VuaW5nIHRob3NlIHRo
YXQgYXJlLCBpbnNlcnRpbmcgbG9jYWwgZnVuY3Rpb25zDQoJICAgKiAgd2hlcmUgbmVjZXNzYXJ5
Lg0KCSAgICogLSB0dXJuIHRhaWwgY2FsbHMgaW50byBub250YWlsIGNhbGxzDQoJICAgKiAtIHR1
cm4gcmV0dXJucyBpbnRvIGp1bXBzDQoJICAgKikNCgkgIGZ1biB3YWxrRXhwIChmOiBGdW5jLnQs
IGU6IEV4cC50LCBjOiBKdW1wLnQgb3B0aW9uKTogRXhwLnQgDQoJICAgID0gbGV0DQoJCXZhbCB7
ZGVjcywgdHJhbnNmZXJ9ID0gRXhwLmRlc3QgZQ0KCQl2YWwgZGVjcw0KCQkgID0gTGlzdC5mb2xk
DQoJCSAgICAoTGlzdC5yZXYgZGVjcywNCgkJICAgICBbXSwNCgkJICAgICBmbiAoZCwgZHMpDQoJ
CSAgICAgID0+IGNhc2UgZCANCgkJCSAgIG9mIEJpbmQgXyA9PiBkIDo6IGRzDQoJCQkgICAgfCBG
dW4ge25hbWUgPSBqLCBhcmdzLCBib2R5fSANCgkJCSAgICA9PiBGdW4ge25hbWUgPSBqLA0KCQkJ
CSAgICBhcmdzID0gYXJncywNCgkJCQkgICAgYm9keSA9IHdhbGtFeHAgKGYsIGJvZHksIGMpfSA6
Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldA0KCQkJCSB2YWwgcHJlZml4ZXMN
CgkJCQkgICA9IEp1bXBEYXRhLnByZWZpeGVzIChnZXRKdW1wRGF0YSBqKQ0KCQkJICAgICAgIGlu
DQoJCQkJIHByZWZpeF9kZWMgKHByZWZpeGVzLCBTT01FIGosIGRzKQ0KCQkJICAgICAgIGVuZA0K
CQkJICAgIHwgSGFuZGxlclB1c2ggaCA9PiBIYW5kbGVyUHVzaCBoIDo6IGRzDQoJCQkgICAgfCBI
YW5kbGVyUG9wID0+IEhhbmRsZXJQb3AgOjogZHMpDQoNCgkJZnVuIG1ha2UgdHJhbnNmZXIgPSBF
eHAubWFrZSB7ZGVjcyA9IGRlY3MsIHRyYW5zZmVyID0gdHJhbnNmZXJ9DQoJICAgICAgaW4NCgkJ
Y2FzZSB0cmFuc2Zlcg0KCQkgIG9mIENhbGwge2Z1bmMsIGFyZ3MsIGNvbnR9IA0KCQkgICA9PiBs
ZXQNCgkJCXZhbCByZXBsYWNlID0gRnVuY0RhdGEucmVwbGFjZSAoZ2V0RnVuY0RhdGEgZnVuYykN
CgkJICAgICAgaW4NCgkJCWNhc2UgcmVwbGFjZQ0KCQkJICBvZiBOT05FID0+IG1ha2UgKENhbGwg
e2Z1bmMgPSBmdW5jLA0KCQkJCQkJIGFyZ3MgPSBhcmdzLA0KCQkJCQkJIGNvbnQgPSBjYXNlIGNv
bnQNCgkJCQkJCQkgIG9mIE5PTkUgPT4gYw0KCQkJCQkJCSAgIHwgU09NRSBfID0+IGNvbnR9KQ0K
CQkJICAgfCBTT01FIHtqdW1wLCAuLi59DQoJCQkgICA9PiBtYWtlIChKdW1wIHtkc3QgPSBqdW1w
LCBhcmdzID0gYXJnc30pDQoJCSAgICAgIGVuZA0KCQkgICB8IFJldHVybiB4cw0KCQkgICA9PiBt
YWtlIChjYXNlIGMNCgkJCSAgICAgIG9mIE5PTkUgPT4gdHJhbnNmZXINCgkJCSAgICAgICB8IFNP
TUUgYyA9PiBKdW1wIHtkc3QgPSBjLCBhcmdzID0geHN9KQ0KCQkgICB8IF8gPT4gbWFrZSB0cmFu
c2Zlcg0KCSAgICAgIGVuZA0KCSAgYW5kIHByZWZpeF9kZWMgKGZzOiBGdW5jLnQgbGlzdCwgDQoJ
CQkgIGM6IEp1bXAudCBvcHRpb24sIA0KCQkJICBkczogRGVjLnQgbGlzdCkgOiBEZWMudCBsaXN0
DQoJICAgID0gTGlzdC5mb2xkDQoJICAgICAgKExpc3QucmV2IGZzLA0KCSAgICAgICBkcywNCgkg
ICAgICAgZm4gKGYsIGRzKQ0KCSAgICAgICAgPT4gbGV0DQoJCSAgICAgdmFsIEZ1bmNEYXRhLlQg
e3JlcGxhY2UsIHByZWZpeGVzLCAuLi59DQoJCSAgICAgICA9IGdldEZ1bmNEYXRhIGYNCgkJICAg
ICB2YWwge2p1bXAsIGFyZ3MsIGJvZHl9ID0gdmFsT2YgKCFyZXBsYWNlKQ0KCQkgICAgIHZhbCBi
b2R5ID0gcHJlZml4X2V4cCAoIXByZWZpeGVzLCBjLCB3YWxrRXhwIChmLCBib2R5LCBjKSkNCgkJ
ICAgaW4NCgkJICAgICBGdW4ge25hbWUgPSBqdW1wLCBhcmdzID0gYXJncywgYm9keSA9IGJvZHl9
IDo6IGRzDQoJCSAgIGVuZCkNCgkgIGFuZCBwcmVmaXhfZXhwIChmczogRnVuYy50IGxpc3QsDQoJ
CQkgIGM6IEp1bXAudCBvcHRpb24sDQoJCQkgIGU6IEV4cC50KSA6IEV4cC50DQoJICAgID0gbGV0
DQoJCXZhbCB7ZGVjcywgdHJhbnNmZXJ9ID0gRXhwLmRlc3QgZQ0KCSAgICAgIGluDQoJCUV4cC5t
YWtlIHtkZWNzID0gcHJlZml4X2RlYyAoZnMsIGMsIGRlY3MpLA0KCQkJICB0cmFuc2ZlciA9IHRy
YW5zZmVyfQ0KCSAgICAgIGVuZA0KDQoJICB2YWwgc2hyaW5rRXhwID0gc2hyaW5rRXhwIGdsb2Jh
bHMNCgkgIHZhbCBmdW5jdGlvbnMgDQoJICAgID0gVmVjdG9yLmZyb21MaXN0DQoJICAgICAgKFZl
Y3Rvci5mb2xkcg0KCSAgICAgICAoZnVuY3Rpb25zLCANCgkJW10sIA0KCSAgICAgICAgZm4gKHtu
YW1lID0gZiwgYXJncyA9IGZfYXJncywgDQoJCSAgICAgYm9keSA9IGZfYm9keSwgcmV0dXJucyA9
IGZfcmV0dXJuc30sIA0KCQkgICAgZnVuY3Rpb25zKQ0KCSAgICAgICAgID0+IGxldA0KCQkgICAg
ICB2YWwgRnVuY0RhdGEuVCB7QSwgcmVwbGFjZSwgcHJlZml4ZXMsIC4uLn0gDQoJCQk9IGdldEZ1
bmNEYXRhIGYNCgkJICAgIGluDQoJCSAgICAgIGNhc2UgIXJlcGxhY2UNCgkJCW9mIE5PTkUNCgkJ
CSA9PiBpZiBSZXR1cm4uaXNVbmNhbGxlZCAoIUEpDQoJCQkgICAgICB0aGVuIGZ1bmN0aW9ucw0K
CQkJICAgICAgZWxzZSBsZXQNCgkJCQkgICAgIHZhbCBmX2JvZHkgDQoJCQkJICAgICAgID0gcHJl
Zml4X2V4cCAoIXByZWZpeGVzLCANCgkJCQkJCSAgICAgTk9ORSwgDQoJCQkJCQkgICAgIHdhbGtF
eHAgKGYsIGZfYm9keSwgTk9ORSkpDQoJCQkJICAgICB2YWwgZl9ib2R5ID0gc2hyaW5rRXhwIGZf
Ym9keQ0KCQkJCSAgIGluDQoJCQkJICAgICB7bmFtZSA9IGYsDQoJCQkJICAgICAgYXJncyA9IGZf
YXJncywNCgkJCQkgICAgICBib2R5ID0gZl9ib2R5LA0KCQkJCSAgICAgIHJldHVybnMgPSBmX3Jl
dHVybnN9IDo6IGZ1bmN0aW9ucw0KCQkJCSAgIGVuZA0KCQkJIHwgXyA9PiBmdW5jdGlvbnMNCgkJ
ICAgIGVuZCkpDQoJICB2YWwgcHJvZ3JhbSANCgkgICAgPSBQcm9ncmFtLlQge2RhdGF0eXBlcyA9
IGRhdGF0eXBlcywNCgkJCSBnbG9iYWxzID0gZ2xvYmFscywNCgkJCSBmdW5jdGlvbnMgPSBmdW5j
dGlvbnMsDQoJCQkgbWFpbiA9IG1haW59DQoJaW4NCgkgIHByb2dyYW0NCgllbmQNCiAgICB2YWwg
dHJhbnNmb3JtIA0KICAgICAgPSBDb250cm9sLnRyYWNlQ2FsbCAidHJhbnNmb3JtIiB0cmFuc2Zv
cm0NCiAgZW5kDQoNCnN0cnVjdHVyZSBEaWFnbm9zdGljcyA9DQogIHN0cnVjdA0KICAgIGZ1biBk
aWFnbm9zdGljcyB7cHJvZ3JhbSBhcyBQcm9ncmFtLlQge2Z1bmN0aW9ucywgLi4ufSwNCgkJICAg
ICBnZXRGdW5jRGF0YTogRnVuYy50IC0+IEZ1bmNEYXRhLnR9DQogICAgICA9IGlmICFDb250cm9s
LmNvbnRpZnlEaWFnDQoJICB0aGVuIGxldA0KCQkgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVy
bi50DQoNCgkJICgqIHByaW50IG91dCBlbnRpcmUgY3BzIElMICopDQoJCSB2YWwgY3BzID0gZmFs
c2UNCgkJICgqIHByaW50IG91dCB0aGUgUmV0dXJuIGZvciBlYWNoIGZ1bmN0aW9uICopDQoJCSB2
YWwgYW5hbHlzaXMgPSBmYWxzZQ0KCQkgKCogcHJpbnQgb3V0IGFjdGlvbiAoY29udGlmaWFibGUs
IHJlbW92ZWFibGUpICopDQoJCSB2YWwgYWN0aW9uID0gZmFsc2UNCgkJICgqIHByaW50IG91dCB0
aGUgdG90YWxzICopDQoJCSB2YWwgdG90YWxzID0gdHJ1ZQ0KDQoJCSB2YWwgXw0KCQkgICA9IGlm
IGNwcw0KCQkgICAgICAgdGhlbiBQcm9ncmFtLmxheW91dHMNCgkJCSAgICAocHJvZ3JhbSwgDQoJ
CQkgICAgIGZuIGwgPT4gKExheW91dC5vdXRwdXQgKGwsIE91dC5lcnJvcikNCgkJCQkgICAgICA7
IE91dC5uZXdsaW5lIE91dC5lcnJvcikpDQoJCSAgICAgICBlbHNlICgpDQoNCgkJIHZhbCBjYWxs
ID0gcmVmIDANCgkJIHZhbCBjb250ID0gcmVmIDANCgkJIHZhbCBkb20gPSByZWYgMA0KCQkgdmFs
IGNhbGxfY29udCA9IHJlZiAwDQoJCSB2YWwgY2FsbF9kb20gPSByZWYgMA0KCQkgdmFsIGNvbnRf
ZG9tID0gcmVmIDANCgkJIHZhbCBjYWxsX2NvbnRfZG9tID0gcmVmIDANCg0KCQkgdmFsIHJlbV9j
YWxsID0gcmVmIDANCgkJIHZhbCByZW1fY29udCA9IHJlZiAwDQoJCSB2YWwgcmVtX2RvbSA9IHJl
ZiAwDQoJCSB2YWwgcmVtX2NhbGxfY29udCA9IHJlZiAwDQoJCSB2YWwgcmVtX2NhbGxfZG9tID0g
cmVmIDANCgkJIHZhbCByZW1fY29udF9kb20gPSByZWYgMA0KCQkgdmFsIHJlbV9jYWxsX2NvbnRf
ZG9tID0gcmVmIDANCgkgICAgICAgaW4gDQoJCSBWZWN0b3IuZm9yZWFjaA0KCQkgKGZ1bmN0aW9u
cywgZm4ge25hbWUsIC4uLn0gPT4NCgkJICBsZXQNCgkJICAgIHZhbCBGdW5jRGF0YS5UIHtBQ2Fs
bCwgQUNvbnQsIEFEb20sIC4uLn0NCgkJICAgICAgPSBnZXRGdW5jRGF0YSBuYW1lDQoJCSAgICAg
IA0KCQkgICAgdmFsIF8gDQoJCSAgICAgID0gaWYgYW5hbHlzaXMNCgkJCSAgdGhlbiBwcmludCAo
Y29uY2F0IFtGdW5jLnRvU3RyaW5nIG5hbWUsDQoJCQkJCSAgICAgICI6OiIsDQoJCQkJCSAgICAg
ICIgQUNhbGw6ICIsDQoJCQkJCSAgICAgIFJldHVybi50b1N0cmluZyAoIUFDYWxsKSwNCgkJCQkJ
ICAgICAgIiBBQ29udDogIiwNCgkJCQkJICAgICAgUmV0dXJuLnRvU3RyaW5nICghQUNvbnQpLA0K
CQkJCQkgICAgICAiIEFEb206ICIsDQoJCQkJCSAgICAgIFJldHVybi50b1N0cmluZyAoIUFEb20p
LA0KCQkJCQkgICAgICAiXG4iXSkNCgkJCSAgZWxzZSAoKQ0KCQkJICAgIA0KCQkgICAgZnVuIGRv
aXQgKHIsIHMpIA0KCQkgICAgICA9IChJbnQuaW5jIHINCgkJCSA7IGlmIGFjdGlvbg0KCQkJICAg
ICB0aGVuIHByaW50IChjb25jYXQgW3MsIA0KCQkJCQkJICIgIiwNCgkJCQkJCSBGdW5jLnRvU3Ry
aW5nIG5hbWUsIA0KCQkJCQkJICJcbiJdKQ0KCQkJICAgICBlbHNlICgpKQ0KCQkgICAgICANCgkJ
ICAgIGZ1biBjaGVjayBBID0gY2FzZSAhQQ0KCQkJCSAgICBvZiBVbmNhbGxlZCA9PiAoZmFsc2Us
IHRydWUpDQoJCQkJICAgICB8IEZ1bmNMYWJlbCBfID0+ICh0cnVlLCBmYWxzZSkNCgkJCQkgICAg
IHwgSnVtcExhYmVsIF8gPT4gKHRydWUsIGZhbHNlKQ0KCQkJCSAgICAgfCBVbmtub3duID0+IChm
YWxzZSwgZmFsc2UpDQoJCQkJCQ0KCQkgICAgdmFsIChjYW5fY2FsbCwgY2FuX3JlbV9jYWxsKSA9
IGNoZWNrIEFDYWxsDQoJCSAgICB2YWwgKGNhbl9jb250LCBjYW5fcmVtX2NvbnQpID0gY2hlY2sg
QUNvbnQNCgkJICAgIHZhbCAoY2FuX2RvbSwgY2FuX3JlbV9kb20pID0gY2hlY2sgQURvbQ0KCQkg
IGluIA0KCQkgICAgY2FzZSAoY2FuX2NhbGwsIGNhbl9jb250LCBjYW5fZG9tKQ0KCQkgICAgICBv
ZiAodHJ1ZSwgdHJ1ZSwgdHJ1ZSkNCgkJICAgICAgID0+IGRvaXQgKGNhbGxfY29udF9kb20sICJj
YWxsX2NvbnRfZG9tIikNCgkJICAgICAgIHwgKHRydWUsIHRydWUsIGZhbHNlKQ0KCQkgICAgICAg
PT4gZG9pdCAoY2FsbF9jb250LCAiY2FsbF9jb250IikNCgkJICAgICAgIHwgKHRydWUsIGZhbHNl
LCB0cnVlKQ0KCQkgICAgICAgPT4gZG9pdCAoY2FsbF9kb20sICJjYWxsX2RvbSIpDQoJCSAgICAg
ICB8ICh0cnVlLCBmYWxzZSwgZmFsc2UpDQoJCSAgICAgICA9PiBkb2l0IChjYWxsLCAiY2FsbCIp
DQoJCSAgICAgICB8IChmYWxzZSwgdHJ1ZSwgdHJ1ZSkNCgkJICAgICAgID0+IGRvaXQgKGNvbnRf
ZG9tLCAiY29udF9kb20iKQ0KCQkgICAgICAgfCAoZmFsc2UsIHRydWUsIGZhbHNlKQ0KCQkgICAg
ICAgPT4gZG9pdCAoY29udCwgImNvbnQiKQ0KCQkgICAgICAgfCAoZmFsc2UsIGZhbHNlLCB0cnVl
KQ0KCQkgICAgICAgPT4gZG9pdCAoZG9tLCAiZG9tIikNCgkJICAgICAgIHwgKGZhbHNlLCBmYWxz
ZSwgZmFsc2UpDQoJCSAgICAgICA9PiAoKTsNCgkJICAgIGNhc2UgKGNhbl9yZW1fY2FsbCwgY2Fu
X3JlbV9jb250LCBjYW5fcmVtX2RvbSkNCgkJICAgICAgb2YgKHRydWUsIHRydWUsIHRydWUpDQoJ
CSAgICAgICA9PiBkb2l0IChyZW1fY2FsbF9jb250X2RvbSwgInJlbV9jYWxsX2NvbnRfZG9tIikN
CgkJICAgICAgIHwgKHRydWUsIHRydWUsIGZhbHNlKQ0KCQkgICAgICAgPT4gZG9pdCAocmVtX2Nh
bGxfY29udCwgInJlbV9jYWxsX2NvbnQiKQ0KCQkgICAgICAgfCAodHJ1ZSwgZmFsc2UsIHRydWUp
DQoJCSAgICAgICA9PiBkb2l0IChyZW1fY2FsbF9kb20sICJyZW1fY2FsbF9kb20iKQ0KCQkgICAg
ICAgfCAodHJ1ZSwgZmFsc2UsIGZhbHNlKQ0KCQkgICAgICAgPT4gZG9pdCAocmVtX2NhbGwsICJy
ZW1fY2FsbCIpDQoJCSAgICAgICB8IChmYWxzZSwgdHJ1ZSwgdHJ1ZSkNCgkJICAgICAgID0+IGRv
aXQgKHJlbV9jb250X2RvbSwgInJlbV9jb250X2RvbSIpDQoJCSAgICAgICB8IChmYWxzZSwgdHJ1
ZSwgZmFsc2UpDQoJCSAgICAgICA9PiBkb2l0IChyZW1fY29udCwgInJlbV9jb250IikNCgkJICAg
ICAgIHwgKGZhbHNlLCBmYWxzZSwgdHJ1ZSkNCgkJICAgICAgID0+IGRvaXQgKHJlbV9kb20sICJy
ZW1fZG9tIikNCgkJICAgICAgIHwgKGZhbHNlLCBmYWxzZSwgZmFsc2UpDQoJCSAgICAgICA9PiAo
KQ0KCQkgIGVuZCk7DQoJCSBpZiB0b3RhbHMNCgkJICAgdGhlbiBwcmludCAoY29uY2F0DQoJCQkg
ICAgICAgWyJmdW5jdGlvbnM6ICIsDQoJCQkJSW50LnRvU3RyaW5nIChWZWN0b3IubGVuZ3RoIGZ1
bmN0aW9ucyksDQoJCQkJIlxuIiwNCgkJCQkiICBjYWxsX2NvbnRfZG9tOiAiLA0KCQkJCUludC50
b1N0cmluZyAoIWNhbGxfY29udF9kb20pLA0KCQkJCSIgIGNhbGxfY29udDogIiwNCgkJCQlJbnQu
dG9TdHJpbmcgKCFjYWxsX2NvbnQpLA0KCQkJCSJcbiIsDQoJCQkJIiAgY2FsbF9kb206ICIsDQoJ
CQkJSW50LnRvU3RyaW5nICghY2FsbF9kb20pLA0KCQkJCSIgIGNvbnRfZG9tOiAiLA0KCQkJCUlu
dC50b1N0cmluZyAoIWNvbnRfZG9tKSwNCgkJCQkiXG4iLA0KCQkJCSIgIGNhbGw6ICIsDQoJCQkJ
SW50LnRvU3RyaW5nICghY2FsbCksDQoJCQkJIiAgY29udDogIiwNCgkJCQlJbnQudG9TdHJpbmcg
KCFjb250KSwNCgkJCQkiICBkb206ICIsDQoJCQkJSW50LnRvU3RyaW5nICghZG9tKSwNCgkJCQki
XG4iLA0KCQkJCSIgIHJlbV9jYWxsX2NvbnRfZG9tOiAiLA0KCQkJCUludC50b1N0cmluZyAoIXJl
bV9jYWxsX2NvbnRfZG9tKSwNCgkJCQkiICByZW1fY2FsbF9jb250OiAiLA0KCQkJCUludC50b1N0
cmluZyAoIXJlbV9jYWxsX2NvbnQpLA0KCQkJCSJcbiIsDQoJCQkJIiAgcmVtX2NhbGxfZG9tOiAi
LA0KCQkJCUludC50b1N0cmluZyAoIXJlbV9jYWxsX2RvbSksDQoJCQkJIiAgcmVtX2NvbnRfZG9t
OiAiLA0KCQkJCUludC50b1N0cmluZyAoIXJlbV9jb250X2RvbSksDQoJCQkJIlxuIiwNCgkJCQki
ICByZW1fY2FsbDogIiwNCgkJCQlJbnQudG9TdHJpbmcgKCFyZW1fY2FsbCksDQoJCQkJIiAgcmVt
X2NvbnQ6ICIsDQoJCQkJSW50LnRvU3RyaW5nICghcmVtX2NvbnQpLA0KCQkJCSIgIHJlbV9kb206
ICIsDQoJCQkJSW50LnRvU3RyaW5nICghcmVtX2RvbSksDQoJCQkJIlxuIl0pDQoJCSAgIGVsc2Ug
KCkNCgkgICAgICAgZW5kDQoJICBlbHNlICgpDQogICAgdmFsIGRpYWdub3N0aWNzIA0KICAgICAg
PSBDb250cm9sLnRyYWNlQ2FsbCAiZGlhZ25vc3RpY3MiIGRpYWdub3N0aWNzDQogIGVuZA0KDQpm
dW4gY29udGlmeSAocHJvZ3JhbSBhcyBQcm9ncmFtLlQge2Z1bmN0aW9ucywgLi4ufSkNCiAgPSBs
ZXQNCiAgICAgIHZhbCB7Z2V0ID0gZ2V0RnVuY0RhdGEgOiBGdW5jLnQgLT4gRnVuY0RhdGEudH0N
Cgk9IFByb3BlcnR5LmdldCAoRnVuYy5wbGlzdCwNCgkJCVByb3BlcnR5LmluaXRGdW4NCgkJCShm
biBfID0+IEZ1bmNEYXRhLm5ldyAoKSkpDQogICAgICB2YWwge2dldCA9IGdldEp1bXBEYXRhIDog
SnVtcC50IC0+IEp1bXBEYXRhLnR9DQoJPSBQcm9wZXJ0eS5nZXQgKEp1bXAucGxpc3QsDQoJCQlQ
cm9wZXJ0eS5pbml0RnVuDQoJCQkoZm4gXyA9PiBKdW1wRGF0YS5uZXcgKCkpKQ0KDQogICAgICB2
YWwgXyA9IEluaXRSZWFjaENhbGxlcnNDYWxsZWVzLmluaXRSZWFjaENhbGxlcnNDYWxsZWVzIA0K
CSAgICAgIHtwcm9ncmFtID0gcHJvZ3JhbSwNCgkgICAgICAgZ2V0RnVuY0RhdGEgPSBnZXRGdW5j
RGF0YX0NCiAgICAgIHZhbCBfID0gQW5hbHl6ZUNhbGwuYW5hbHl6ZUNhbGwNCgkgICAgICB7cHJv
Z3JhbSA9IHByb2dyYW0sDQoJICAgICAgIGdldEZ1bmNEYXRhID0gZ2V0RnVuY0RhdGF9DQogICAg
ICB2YWwgXyA9IEFuYWx5emVDb250LmFuYWx5emVDb250DQoJICAgICAge3Byb2dyYW0gPSBwcm9n
cmFtLA0KCSAgICAgICBnZXRGdW5jRGF0YSA9IGdldEZ1bmNEYXRhfQ0KICAgICAgdmFsIF8gPSBB
bmFseXplRG9tLmFuYWx5emVEb20gDQoJICAgICAge3Byb2dyYW0gPSBwcm9ncmFtLA0KCSAgICAg
ICBnZXRGdW5jRGF0YSA9IGdldEZ1bmNEYXRhLA0KCSAgICAgICBnZXRKdW1wRGF0YSA9IGdldEp1
bXBEYXRhfQ0KDQogICAgICB2YWwgXyA9IERpYWdub3N0aWNzLmRpYWdub3N0aWNzIHtwcm9ncmFt
ID0gcHJvZ3JhbSwNCgkJCQkgICAgICAgZ2V0RnVuY0RhdGEgPSBnZXRGdW5jRGF0YX0NCg0KICAg
ICAgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIFJldHVybi50DQogICAgICB2YWwgXw0KCT0gVmVjdG9y
LmZvcmVhY2gNCgkgIChmdW5jdGlvbnMsDQoJICAgZm4ge25hbWUgPSBmLCAuLi59DQoJICAgID0+
IGxldA0KCQkgdmFsIEZ1bmNEYXRhLlQge0EsIEFDYWxsLCBBQ29udCwgQURvbSwgLi4ufQ0KCQkg
ICA9IGdldEZ1bmNEYXRhIGYNCgkgICAgICAgaW4NCgkJIGNhc2UgIUNvbnRyb2wuY29udGlmeVN0
cmF0ZWd5DQoJCSAgIG9mIENvbnRyb2wuTm9uZSA9PiBBIDo9IFVua25vd24NCgkJICAgIHwgQ29u
dHJvbC5DYWxsID0+IEEgOj0gIUFDYWxsDQoJCSAgICB8IENvbnRyb2wuQ29udCA9PiBBIDo9ICFB
Q29udA0KCQkgICAgfCBDb250cm9sLkNhbGxDb250DQoJCSAgICA9PiAoY2FzZSAoIUFDYWxsLCAh
QUNvbnQpDQoJCQkgIG9mIChVbmNhbGxlZCwgXykgPT4gQSA6PSBVbmNhbGxlZA0KCQkJICAgfCAo
XywgVW5jYWxsZWQpID0+IEEgOj0gVW5jYWxsZWQNCgkJCSAgIHwgKFVua25vd24sIHIpID0+IEEg
Oj0gcg0KCQkJICAgfCAociwgVW5rbm93bikgPT4gQSA6PSByDQoJCQkgICB8IChKdW1wTGFiZWwg
aiwgSnVtcExhYmVsIGonKQ0KCQkJICAgPT4gaWYgSnVtcC5lcXVhbHMgKGosIGonKQ0KCQkJCXRo
ZW4gQSA6PSBKdW1wTGFiZWwgag0KCQkJCWVsc2UgRXJyb3IuYnVnICJDYWxsQ29udDogaW5jb21w
YXRpYmxlIg0KCQkJICAgfCAoRnVuY0xhYmVsIGYsIEZ1bmNMYWJlbCBmJykNCgkJCSAgID0+IGlm
IEZ1bmMuZXF1YWxzIChmLCBmJykNCgkJCQl0aGVuIEEgOj0gRnVuY0xhYmVsIGYNCgkJCQllbHNl
IEVycm9yLmJ1ZyAiQ2FsbENvbnQ6IGluY29tcGF0aWJsZSINCgkJCSAgIHwgKEp1bXBMYWJlbCBq
LCBGdW5jTGFiZWwgZikNCgkJCSAgID0+IEEgOj0gRnVuY0xhYmVsIGYNCgkJCSAgIHwgKEZ1bmNM
YWJlbCBmLCBKdW1wTGFiZWwgaikNCgkJCSAgID0+IEEgOj0gRnVuY0xhYmVsIGYpDQoJCSAgICB8
IENvbnRyb2wuRG9tID0+IEEgOj0gIUFEb20NCgkgICAgICAgZW5kKQ0KDQogICAgICB2YWwgcHJv
Z3JhbSA9IFRyYW5zZm9ybS50cmFuc2Zvcm0ge3Byb2dyYW0gPSBwcm9ncmFtLA0KCQkJCQkgZ2V0
RnVuY0RhdGEgPSBnZXRGdW5jRGF0YSwNCgkJCQkJIGdldEp1bXBEYXRhID0gZ2V0SnVtcERhdGF9
DQoNCiAgICAgIHZhbCBfID0gUHJvZ3JhbS5jbGVhciBwcm9ncmFtDQogICAgaW4NCiAgICAgIHBy
b2dyYW0NCiAgICBlbmQNCmVuZA0K

---559023410-1903590565-983194520=:24551
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="x86-codegen.fun"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.1010226083520.24551D@hoho.cs.cornell.edu>
Content-Description: 

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4NCiAqIFBs
ZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCiAqKQ0K
ZnVuY3RvciB4ODZDb2RlR2VuKFM6IFg4Nl9DT0RFR0VOX1NUUlVDVFMpOiBYODZfQ09ERUdFTiA9
DQpzdHJ1Y3QNCiAgb3BlbiBTDQoNCiAgdmFsIHdvcmRTaXplOiBpbnQgPSA0DQogIHZhbCBwb2lu
dGVyU2l6ZSA9IHdvcmRTaXplDQogIHZhbCBvYmplY3RIZWFkZXJTaXplID0gd29yZFNpemUNCiAg
dmFsIGFycmF5SGVhZGVyU2l6ZSA9IDIgKiB3b3JkU2l6ZQ0KICB2YWwgaW50SW5mT3ZlcmhlYWQg
PSBhcnJheUhlYWRlclNpemUgKyB3b3JkU2l6ZSAoKiBmb3IgdGhlIHNpZ24gKikNCg0KICBzdHJ1
Y3R1cmUgeDg2IA0KICAgID0geDg2KHN0cnVjdHVyZSBMYWJlbCA9IE1hY2hpbmVPdXRwdXQuTGFi
ZWwpDQoNCiAgc3RydWN0dXJlIHg4Nk1MdG9uIA0KICAgID0geDg2TUx0b24oc3RydWN0dXJlIHg4
NiA9IHg4Ng0KCSAgICAgICBzdHJ1Y3R1cmUgTWFjaGluZU91dHB1dCA9IE1hY2hpbmVPdXRwdXQp
DQoNCiAgc3RydWN0dXJlIHg4NlRyYW5zbGF0ZSANCiAgICA9IHg4NlRyYW5zbGF0ZShzdHJ1Y3R1
cmUgeDg2ID0geDg2DQoJCSAgIHN0cnVjdHVyZSB4ODZNTHRvbiA9IHg4Nk1MdG9uKQ0KDQogIHN0
cnVjdHVyZSB4ODZTaW1wbGlmeQ0KICAgID0geDg2U2ltcGxpZnkoc3RydWN0dXJlIHg4NiA9IHg4
NikNCg0KICBzdHJ1Y3R1cmUgeDg2QWxsb2NhdGVSZWdpc3RlcnMNCiAgICA9IHg4NkFsbG9jYXRl
UmVnaXN0ZXJzKHN0cnVjdHVyZSB4ODYgPSB4ODYpDQoNCiAgc3RydWN0dXJlIHg4NlZhbGlkYXRl
DQogICAgPSB4ODZWYWxpZGF0ZShzdHJ1Y3R1cmUgeDg2ID0geDg2KQ0KDQogIHN0cnVjdHVyZSBD
ID0NCiAgICBzdHJ1Y3QNCiAgICAgIHZhbCB0cnVlZSA9ICJUUlVFIg0KICAgICAgdmFsIGZhbHNl
ZSA9ICJGQUxTRSINCgkNCiAgICAgIGZ1biBhcmdzKHNzOiBzdHJpbmcgbGlzdCk6IHN0cmluZw0K
CT0gY29uY2F0KCIoIiA6OiBMaXN0LnNlcGFyYXRlKHNzLCAiLCAiKSBAIFsiKSJdKQ0KICAgICAg
ICAgDQogICAgICBmdW4gY2FsbE5vU2VtaShmOiBzdHJpbmcsIHhzOiBzdHJpbmcgbGlzdCwgcHJp
bnQ6IHN0cmluZyAtPiB1bml0KTogdW5pdCANCgk9IChwcmludCBmDQoJICAgOyBwcmludCAiKCIN
CgkgICA7IChjYXNlIHhzIA0KCQlvZiBbXSA9PiAoKQ0KCQkgfCB4IDo6IHhzID0+IChwcmludCB4
DQoJCQkgICAgICAgOyBMaXN0LmZvcmVhY2goeHMsIA0KCQkJCQkgICAgICBmbiB4ID0+IChwcmlu
dCAiLCAiOyBwcmludCB4KSkpKQ0KCSAgIDsgcHJpbnQgIikiKQ0KDQogICAgICBmdW4gY2FsbChm
LCB4cywgcHJpbnQpID0gKGNhbGxOb1NlbWkoZiwgeHMsIHByaW50KQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7IHByaW50ICI7XG4iKQ0KDQogICAgICBmdW4gaW50KG46IGludCk6
IHN0cmluZyANCgk9IGlmIG4gPj0gMA0KICAgICAgICAgICAgdGhlbiBJbnQudG9TdHJpbmcgbg0K
CSAgICBlbHNlIGlmIG4gPSBJbnQubWluSW50DQoJCSAgIHRoZW4gIihpbnQpMHg4MDAwMDAwMCIg
KCogYmVjYXVzZSBvZiBnb29meSBnY2Mgd2FybmluZyAqKQ0KCQkgICBlbHNlICItIiBeIFN0cmlu
Zy5kcm9wUHJlZml4KEludC50b1N0cmluZyBuLCAxKQ0KICAgICAgKCogVGhpcyBvdmVyZmxvd3Mg
b24gSW50MzIubWluSW50OiBJbnQzMi50b1N0cmluZyh+IG4pICopDQoNCiAgICAgIGZ1biBjaGFy
KGM6IGNoYXIpIA0KCT0gY29uY2F0W2lmIENoYXIub3JkIGMgPj0gMHg4MCB0aGVuICIodWNoYXIp
IiBlbHNlICIiLA0KCQkgIiciLCBDaGFyLmVzY2FwZUMgYywgIiciXQ0KDQogICAgICBmdW4gd29y
ZCh3OiBXb3JkLnQpID0gIjB4IiBeIFdvcmQudG9TdHJpbmcgdw0KDQogICAgICAoKiBUaGUgb25s
eSBkaWZmZXJlbmNlIGJldHdlZW4gU01MIGZsb2F0cyBhbmQgQyBmbG9hdHMgaXMgdGhhdA0KICAg
ICAgICogU01MIHVzZXMgIn4iIHdoaWxlIEMgdXNlcyAiLSIuDQogICAgICAgKikNCiAgICAgIGZ1
biBmbG9hdCBzID0gU3RyaW5nLnRyYW5zbGF0ZShzLCANCgkJCQkgICAgIGZuICMifiIgPT4gIi0i
IHwgYyA9PiBTdHJpbmcuZnJvbUNoYXIgYykNCg0KICAgICAgZnVuIHN0cmluZyBzIA0KCT0gbGV0
IHZhbCBxdW90ZSA9ICJcIiINCgkgIGluIGNvbmNhdFtxdW90ZSwgU3RyaW5nLmVzY2FwZUMgcywg
cXVvdGVdDQoJICBlbmQNCiAgICBlbmQNCg0KICBvcGVuIHg4Ng0KICBzdHJ1Y3R1cmUgVHlwZSA9
IE1hY2hpbmVPdXRwdXQuVHlwZQ0KICBmdW4gb3V0cHV0IHtwcm9ncmFtIGFzIE1hY2hpbmVPdXRw
dXQuUHJvZ3JhbS5UIA0KCSAgICAgICAgICAgICAgICAge2dsb2JhbHMsDQoJCQkgIGdsb2JhbHNO
b25Sb290LA0KCQkJICBpbnRJbmZzLA0KCQkJICBzdHJpbmdzLA0KCQkJICBmbG9hdHMsIA0KCQkJ
ICBmcmFtZU9mZnNldHMsDQoJCQkgIGZyYW1lTGF5b3V0cywNCgkJCSAgbWF4RnJhbWVTaXplLA0K
CQkJICBjaHVua3MsDQoJCQkgIG1haW4sDQoJCQkgIC4uLn06IE1hY2hpbmVPdXRwdXQuUHJvZ3Jh
bS50LA0KCSAgICAgIGluY2x1ZGVzOiBzdHJpbmcgbGlzdCwNCgkgICAgICBvdXRwdXRDLA0KCSAg
ICAgIG91dHB1dFN9OiB1bml0DQogICAgPSBsZXQNCgl2YWwgbWFrZUMgPSBvdXRwdXRDDQoJdmFs
IG1ha2VTID0gb3V0cHV0Uw0KDQoJdmFsIHtnZXQgPSBnZXRGcmFtZUxheW91dEluZGV4IDogTGFi
ZWwudCAtPiBpbnQgb3B0aW9uLCANCgkgICAgIHNldCA9IHNldEZyYW1lTGF5b3V0SW5kZXh9DQoJ
ICA9IFByb3BlcnR5LmdldFNldE9uY2UoTGFiZWwucGxpc3QsDQoJCQkJUHJvcGVydHkuaW5pdENv
bnN0IE5PTkUpDQoNCgl2YWwgcmV0dXJuX2xhYmVscw0KCSAgPSBMaXN0LmZvbGQNCgkgICAgKGNo
dW5rcywNCgkgICAgIFtdLA0KCSAgICAgZm4gKE1hY2hpbmVPdXRwdXQuQ2h1bmsuVCB7ZW50cmll
cyxnY1JldHVybnMsLi4ufSwgbCkNCgkgICAgICA9PiBMaXN0LmZvbGQoZW50cmllcyBAIGdjUmV0
dXJucywNCgkJCSAgIFtdLA0KCQkJICAgZm4gKGxhYmVsLCBsJykNCgkJCSAgICA9PiBjYXNlIGZy
YW1lTGF5b3V0cyBsYWJlbA0KCQkJCSBvZiBOT05FID0+IGwnDQoJCQkgICAgICAgICAgfCBTT01F
IF8gPT4gbGFiZWw6OmwnKSBAIGwpDQoNCgl2YWwgZnJhbWVMYXlvdXRzRGF0YQ0KCSAgPSBMaXN0
LnJlbW92ZUR1cGxpY2F0ZXMoTGlzdC5tYXAocmV0dXJuX2xhYmVscywgDQoJCQkJCSAgIHZhbE9m
IG8gZnJhbWVMYXlvdXRzKSwgDQoJCQkJICBvcCA9KQ0KDQoJdmFsIF8NCgkgID0gTGlzdC5mb3Jl
YWNoDQoJICAgIChyZXR1cm5fbGFiZWxzLA0KCSAgICAgZm4gcmV0dXJuX2xhYmVsDQoJICAgICAg
PT4gbGV0DQoJCSAgIHZhbCBpbmZvID0gdmFsT2YoZnJhbWVMYXlvdXRzIHJldHVybl9sYWJlbCkN
CgkJIGluDQoJCSAgIHNldEZyYW1lTGF5b3V0SW5kZXgocmV0dXJuX2xhYmVsLA0KCQkJCSAgICAg
ICBMaXN0LmluZGV4KGZyYW1lTGF5b3V0c0RhdGEsDQoJCQkJCQkgIGZuIGluZm8nID0+IGluZm8g
PSBpbmZvJykpDQoJCSBlbmQpDQoNCg0KCSgqIEMgc3BlY2lmaWMgKikNCglmdW4gb3V0cHV0QyAo
KQ0KCSAgPSBsZXQNCgkgICAgICB2YWwge2ZpbGUsIHByaW50LCBkb25lfSA9IG1ha2VDICgpDQoN
CgkgICAgICBmdW4gbWFrZShuYW1lLCBsLCBwcikNCgkJPSAocHJpbnQgKGNvbmNhdFsic3RhdGlj
ICIsIG5hbWUsICIgPSB7Il0pOw0KCQkgICBMaXN0LmZvcmVhY2hpKGwsDQoJCQkJIGZuIChpLHgp
ID0+IChpZiBpID4gMCB0aGVuIHByaW50ICIsIiBlbHNlICgpOw0KCQkJCQkgICAgICBwciB4KSk7
DQoJCSAgIHByaW50ICJ9O1xuIik7DQoNCgkgICAgICBmdW4gb3V0cHV0SW5jbHVkZXMoKQ0KCQk9
IChMaXN0LmZvcmVhY2goaW5jbHVkZXMsDQoJCQkJZm4gaSA9PiAocHJpbnQgIiNpbmNsdWRlIFwi
IjsNCgkJCQkJIHByaW50IGk7DQoJCQkJCSBwcmludCAiXCJcbiIpKTsNCgkJICAgcHJpbnQgIlxu
Iik7DQoNCgkgICAgICBmdW4gZGVjbGFyZUdsb2JhbHMoKQ0KCSAgICAgICAgPSBDLmNhbGwoIkds
b2JhbHMiLA0KCQkJIExpc3QubWFwKExpc3QubWFwKGxldCANCgkJCQkJICAgICBvcGVuIFR5cGUN
CgkJCQkJICAgaW4gDQoJCQkJCSAgICAgW2NoYXIsIGRvdWJsZSwgaW50LCBwb2ludGVyLCB1aW50
XQ0KCQkJCQkgICBlbmQsDQoJCQkJCSAgIGdsb2JhbHMpIEAgW2dsb2JhbHNOb25Sb290XSwNCgkJ
CQkgIEMuaW50KSwNCgkJCSBwcmludCk7DQoNCgkgICAgICBmdW4gbG9jYWxzIHR5DQoJCT0gTGlz
dC5mb2xkKGNodW5rcywNCgkJCSAgICAwLA0KCQkJICAgIGZuIChNYWNoaW5lT3V0cHV0LkNodW5r
LlQge3JlZ01heCwgLi4ufSxtYXgpDQoJCQkgICAgID0+IGlmIHJlZ01heCB0eSA+IG1heA0KCQkJ
CSAgdGhlbiByZWdNYXggdHkNCgkJCQkgIGVsc2UgbWF4KQ0KCQkJICANCgkgICAgICBmdW4gZGVj
bGFyZUxvY2FscygpDQoJCT0gQy5jYWxsKCJMb2NhbHMiLA0KCQkJIExpc3QubWFwKExpc3QubWFw
KGxldCANCgkJCQkJICAgICBvcGVuIFR5cGUNCgkJCQkJICAgaW4gDQoJCQkJCSAgICAgW2NoYXIs
IGRvdWJsZSwgaW50LCBwb2ludGVyLCB1aW50XQ0KCQkJCQkgICBlbmQsDQoJCQkJCSAgIGxvY2Fs
cyksDQoJCQkJICBDLmludCksDQoJCQkgcHJpbnQpOw0KDQoJICAgICAgZnVuIGRlY2xhcmVJbnRJ
bmZzKCkgDQoJCT0gKHByaW50ICJCZWdpbkludEluZnNcbiI7IA0KCQkgICBMaXN0LmZvcmVhY2gN
CgkJICAgKGludEluZnMsIA0KCQkgICAgZm4gKGcsIHMpIA0KCQkgICAgID0+IChDLmNhbGxOb1Nl
bWkoIkludEluZiIsDQoJCQkJICAgICAgW0MuaW50KE1hY2hpbmVPdXRwdXQuR2xvYmFsLmluZGV4
IGcpLA0KCQkJCSAgICAgICBDLnN0cmluZyBzXSwNCgkJCQkgICAgICBwcmludCk7DQoJCQkgcHJp
bnQgIlxuIikpOw0KCQkgICBwcmludCAiRW5kSW50SW5mc1xuIik7DQoJCQkgIA0KCSAgICAgIGZ1
biBkZWNsYXJlU3RyaW5ncygpIA0KCQk9IChwcmludCAiQmVnaW5TdHJpbmdzXG4iOw0KCQkgICBM
aXN0LmZvcmVhY2gNCgkJICAgKHN0cmluZ3MsIA0KCQkgICAgZm4gKGcsIHMpIA0KCQkgICAgID0+
IChDLmNhbGxOb1NlbWkoIlN0cmluZyIsDQoJCQkJICAgICAgW0MuaW50KE1hY2hpbmVPdXRwdXQu
R2xvYmFsLmluZGV4IGcpLA0KCQkJCSAgICAgICBDLnN0cmluZyBzLA0KCQkJCSAgICAgICBDLmlu
dChTdHJpbmcuc2l6ZSBzKV0sDQoJCQkJICAgICAgcHJpbnQpOw0KCQkJIHByaW50ICJcbiIpKTsN
CgkJICAgcHJpbnQgIkVuZFN0cmluZ3NcbiIpOw0KDQoJICAgICAgZnVuIGRlY2xhcmVGbG9hdHMo
KQ0KCQk9IChwcmludCAiQmVnaW5GbG9hdHNcbiI7DQoJCSAgIExpc3QuZm9yZWFjaA0KCQkgICAo
ZmxvYXRzLA0KCQkgICAgZm4gKGcsIGYpDQoJCSAgICAgPT4gKEMuY2FsbE5vU2VtaSgiRmxvYXQi
LA0KCQkJCSAgICAgIFtDLmludChNYWNoaW5lT3V0cHV0Lkdsb2JhbC5pbmRleCBnKSwNCgkJCQkg
ICAgICAgQy5mbG9hdCBmXSwNCgkJCQkgICAgICBwcmludCk7DQoJCQkgcHJpbnQgIlxuIikpOw0K
CQkgICBwcmludCAiRW5kRmxvYXRzXG4iKTsNCg0KCSAgICAgIGZ1biBkZWNsYXJlRnJhbWVPZmZz
ZXRzKCkNCgkJPSBMaXN0LmZvcmVhY2hpDQoJCSAgKGZyYW1lT2Zmc2V0cywNCgkJICAgZm4gKGks
bCkgDQoJCSAgICA9PiAocHJpbnQgKGNvbmNhdFsic3RhdGljIHVzaG9ydCBmcmFtZU9mZnNldHMi
LA0KCQkJCSAgICAgIEMuaW50IGksDQoJCQkJICAgICAgIltdID0geyJdKTsNCgkJCXByaW50IChD
LmludChMaXN0Lmxlbmd0aCBsKSk7DQoJCQlMaXN0LmZvcmVhY2gobCwgDQoJCQkJICAgICBmbiBp
ID0+IChwcmludCAiLCI7DQoJCQkJCSAgICAgIHByaW50IChDLmludCBpKSkpOw0KCQkJcHJpbnQg
In07XG4iKSk7DQoNCgkgICAgICBmdW4gZGVjbGFyZUZyYW1lTGF5b3V0cygpDQoJCT0gbWFrZSgi
R0NfZnJhbWVMYXlvdXQgZnJhbWVMYXlvdXRzW10iLA0KCQkgICAgICAgZnJhbWVMYXlvdXRzRGF0
YSwNCgkJICAgICAgIGZuIHtzaXplLCBvZmZzZXRJbmRleH0NCgkJICAgICAgICA9PiBwcmludCAo
Y29uY2F0WyJcblx0eyIsIA0KCQkJCQkgQy5pbnQgc2l6ZSwgIiwiLCANCgkJCQkJICJmcmFtZU9m
ZnNldHMiIF4gKEMuaW50IG9mZnNldEluZGV4KSwgDQoJCQkJCSAifSJdKSkNCg0KCSAgICAgIHZh
bCBtYXhGcmFtZUxheW91dEluZGV4ID0gTGlzdC5sZW5ndGggZnJhbWVMYXlvdXRzRGF0YQ0KCQkN
CgkgICAgICBmdW4gZGVjbGFyZU1haW4oKSANCgkJPSBsZXQNCgkJICAgIHZhbCBzdHJpbmdTaXpl
cyANCgkJICAgICAgPSBMaXN0LmZvbGQoc3RyaW5ncywgDQoJCQkJICAwLCANCgkJCQkgIGZuICgo
XywgcyksIG4pIA0KCQkJCSAgID0+IG4gKyBhcnJheUhlYWRlclNpemUNCgkJCQkgICAgICAgICsg
VHlwZS5hbGlnbihTdHJpbmcuc2l6ZSBzLCANCgkJCQkJCSAgICAgVHlwZS5wb2ludGVyKSkNCgkJ
ICAgIHZhbCBpbnRJbmZTaXplcyANCgkJICAgICAgPSBMaXN0LmZvbGQoaW50SW5mcywgDQoJCQkJ
ICAwLCANCgkJCQkgIGZuICgoXywgcyksIG4pIA0KCQkJCSAgID0+IG4gKyBpbnRJbmZPdmVyaGVh
ZA0KCQkJCSAgICAgICAgKyBUeXBlLmFsaWduKFN0cmluZy5zaXplIHMsIA0KCQkJCQkJICAgICBU
eXBlLnBvaW50ZXIpKQ0KCQkgICAgdmFsIGJ5dGVzTGl2ZSA9IGludEluZlNpemVzICsgc3RyaW5n
U2l6ZXMNCgkJICAgIHZhbCAodXNlZEZpeGVkSGVhcCwgZnJvbVNpemUpDQoJCSAgICAgID0gY2Fz
ZSAhQ29udHJvbC5maXhlZEhlYXAgDQoJCQkgIG9mIE5PTkUgPT4gKGZhbHNlLCAwKQ0KCQkJICAg
fCBTT01FIG4gDQoJCQkgICA9PiAoKiBkaXYgMiBmb3Igc2VtaXNwYWNlICopDQoJCQkgICAgICAo
aWYgbiA+IDAgYW5kYWxzbyBieXRlc0xpdmUgPj0gbiBkaXYgMiANCgkJCQkgdGhlbiBPdXQub3V0
cHV0KE91dC5lcnJvciwNCgkJCQkJCSAiV2FybmluZzogaGVhcCBzaXplIHVzZWQgd2l0aCAtaCBp
cyB0b28gc21hbGwgdG8gaG9sZCBzdGF0aWMgZGF0YS5cbiIpDQoJCQkJIGVsc2UgKCk7DQoJCQkg
ICAgICAgKHRydWUsIG4pKQ0KCQkgICAgdmFsIG1hZ2ljID0gQy53b3JkKE1MdG9uLnJhbmRvbSgp
KQ0KCQkgICAgdmFsIG1haW5MYWJlbCA9IExhYmVsLnRvU3RyaW5nICgjbGFiZWwgbWFpbikNCgkJ
ICBpbiANCgkJICAgIEMuY2FsbE5vU2VtaSgiTWFpbiIsDQoJCQkJIFtpZiB1c2VkRml4ZWRIZWFw
IHRoZW4gQy50cnVlZSBlbHNlIEMuZmFsc2VlLA0KCQkJCSAgICBDLmludCBmcm9tU2l6ZSwNCgkJ
CQkgICAgQy5pbnQgYnl0ZXNMaXZlLA0KCQkJCSAgICBDLmludCBtYXhGcmFtZVNpemUsDQoJCQkJ
ICAgIEMuaW50IG1heEZyYW1lTGF5b3V0SW5kZXgsDQoJCQkJICAgIG1hZ2ljLA0KCQkJCSAgICBt
YWluTGFiZWxdLA0KCQkJCSBwcmludCk7DQoJCSAgICBwcmludCAiXG4iDQoJCSAgZW5kOw0KCSAg
ICBpbg0KCSAgICAgIHByaW50ICIjZGVmaW5lIFg4NkNPREVHRU5cblxuIjsNCgkgICAgICBvdXRw
dXRJbmNsdWRlcygpOw0KCSAgICAgIGRlY2xhcmVHbG9iYWxzKCk7DQoJICAgICAgZGVjbGFyZUxv
Y2FscygpOw0KCSAgICAgIGRlY2xhcmVJbnRJbmZzKCk7DQoJICAgICAgZGVjbGFyZVN0cmluZ3Mo
KTsNCgkgICAgICBkZWNsYXJlRmxvYXRzKCk7DQoJICAgICAgZGVjbGFyZUZyYW1lT2Zmc2V0cygp
Ow0KCSAgICAgIGRlY2xhcmVGcmFtZUxheW91dHMoKTsNCgkgICAgICBkZWNsYXJlTWFpbigpOw0K
CSAgICAgIGRvbmUgKCkNCgkgICAgZW5kIA0KDQogICAgICAgIHZhbCBvdXRwdXRDICANCgkgID0g
Q29udHJvbC50cmFjZUNhbGwNCgkgICAgIm91dHB1dEMiDQoJICAgIG91dHB1dEMNCg0KDQoJKCog
QXNzZW1ibHkgc3BlY2lmaWMgKikNCgl2YWwgYmxvY2tfYmVnaW4NCgkgID0gW3g4Ni5Bc3NlbWJs
eS5kaXJlY3RpdmVfYXNzdW1lDQoJICAgICB7cmVnaXN0ZXIgPSB4ODYuUmVnaXN0ZXIuZWRpLA0K
CSAgICAgIG1lbWxvYyA9IHg4Nk1MdG9uLmdjU3RhdGVfc3RhY2tUb3BDb250ZW50cywNCgkgICAg
ICB3ZWlnaHQgPSAyMDQ4LA0KCSAgICAgIHN5bmMgPSBmYWxzZSwNCgkgICAgICByZXNlcnZlID0g
ZmFsc2V9LA0KCSAgICAgeDg2LkFzc2VtYmx5LmRpcmVjdGl2ZV9hc3N1bWUNCgkgICAgIHtyZWdp
c3RlciA9IHg4Ni5SZWdpc3Rlci5lc2ksDQoJICAgICAgbWVtbG9jID0geDg2TUx0b24uZ2NTdGF0
ZV9mcm9udGllckNvbnRlbnRzLA0KCSAgICAgIHdlaWdodCA9IDIwNDgsDQoJICAgICAgc3luYyA9
IGZhbHNlLA0KCSAgICAgIHJlc2VydmUgPSBmYWxzZX1dDQoJdmFsIGJsb2NrX2VuZA0KCSAgPSBb
eDg2LkFzc2VtYmx5LmRpcmVjdGl2ZV9jYWNoZQ0KCSAgICAge3JlZ2lzdGVyID0geDg2LlJlZ2lz
dGVyLmVkaSwNCgkgICAgICBtZW1sb2MgPSB4ODZNTHRvbi5nY1N0YXRlX3N0YWNrVG9wQ29udGVu
dHMsDQoJICAgICAgcmVzZXJ2ZSA9IHRydWV9LA0KCSAgICAgeDg2LkFzc2VtYmx5LmRpcmVjdGl2
ZV9jYWNoZQ0KCSAgICAge3JlZ2lzdGVyID0geDg2LlJlZ2lzdGVyLmVzaSwNCgkgICAgICBtZW1s
b2MgPSB4ODZNTHRvbi5nY1N0YXRlX2Zyb250aWVyQ29udGVudHMsDQoJICAgICAgcmVzZXJ2ZSA9
IHRydWV9XQ0KCXZhbCBibG9ja19mYWxsDQoJICA9IFt4ODYuQXNzZW1ibHkuZGlyZWN0aXZlX3Vu
cmVzZXJ2ZSB7cmVnaXN0ZXIgPSB4ODYuUmVnaXN0ZXIuZWRpfSwNCgkgICAgIHg4Ni5Bc3NlbWJs
eS5kaXJlY3RpdmVfdW5yZXNlcnZlIHtyZWdpc3RlciA9IHg4Ni5SZWdpc3Rlci5lc2l9XQ0KCXZh
bCB0cmFuc2ZlclJlZ3MNCgkgID0gW3g4Ni5SZWdpc3Rlci5lYngsDQoJICAgICB4ODYuUmVnaXN0
ZXIuYmwsDQoJICAgICB4ODYuUmVnaXN0ZXIuZWN4LA0KCSAgICAgeDg2LlJlZ2lzdGVyLmNsLA0K
CSAgICAgeDg2LlJlZ2lzdGVyLmVkeCwNCgkgICAgIHg4Ni5SZWdpc3Rlci5kbCwNCgkgICAgIHg4
Ni5SZWdpc3Rlci5lYnBdDQoNCglmdW4gZmlsZV9iZWdpbiBmaWxlDQoJICA9IFt4ODYuQXNzZW1i
bHkucHNldWRvb3BfZGF0YSAoKSwNCgkgICAgIHg4Ni5Bc3NlbWJseS5wc2V1ZG9vcF9wMmFsaWdu
IDIsDQoJICAgICB4ODYuQXNzZW1ibHkubGFiZWwgeDg2TUx0b24uZmlsZU5hbWVMYWJlbCwNCgkg
ICAgIHg4Ni5Bc3NlbWJseS5wc2V1ZG9vcF9zdHJpbmcgW2ZpbGVdLA0KCSAgICAgeDg2LkFzc2Vt
Ymx5LnBzZXVkb29wX3RleHQgKCldDQoNCglmdW4gb3V0cHV0Q2h1bmsgKGNodW5rIGFzIE1hY2hp
bmVPdXRwdXQuQ2h1bmsuVCB7Y2h1bmtMYWJlbCwgLi4ufSwNCgkJCSBwcmludCkNCgkgID0gbGV0
DQoJICAgICAgdmFsIGlzTWFpbiANCgkJPSBNYWNoaW5lT3V0cHV0LkNodW5rTGFiZWwuZXF1YWxz
KCNjaHVua0xhYmVsIG1haW4sIGNodW5rTGFiZWwpDQoNCgkgICAgICB2YWwge2NodW5rIGFzIENo
dW5rLlQge2V4cG9ydHMsIGJsb2Nrc30sDQoJCSAgIGxpdmVJbmZvfQ0KCQk9IHg4NlRyYW5zbGF0
ZS50cmFuc2xhdGVDaHVuayANCgkJICB7Y2h1bmsgPSBjaHVua30NCg0KCSAgICAgICgqIGZvciBp
bmxpbmluZyBmcmFtZUxheW91dHMgaW5mbyAqKQ0KCSAgICAgIGZ1biBibG9ja19wcmUgbGFiZWwN
CgkJPSBPcHRpb24ubWFwKGdldEZyYW1lTGF5b3V0SW5kZXggbGFiZWwsDQoJCQkgICAgIGZuIGlu
ZGV4DQoJCQkgICAgICA9PiBbQXNzZW1ibHkucHNldWRvb3BfbG9uZw0KCQkJCSAgW0ltbWVkaWF0
ZS5jb25zdF9pbnQgaW5kZXhdXSkNCg0KCSAgICAgIHZhbCBwc2V1ZG9fYXNzZW1ibHkgOiBBc3Nl
bWJseS50IGxpc3QgbGlzdA0KCQk9IHg4NlNpbXBsaWZ5LnNpbXBsaWZ5IA0KCQkgIHtjaHVuayA9
IGNodW5rLA0KCQkgICAoKiBkb24ndCBwZXJmb3JtIG9wdGltaXphdGlvbnMgb24NCgkJICAgICog
dGhlIG1haW4gZnVuY3Rpb24gKGluaXRHbG9iYWxzKQ0KCQkgICAgKikNCgkJICAgb3B0aW1pemUg
PSBpZiBpc01haW4NCgkJCQl0aGVuIDANCgkJCQllbHNlICFDb250cm9sLk5hdGl2ZS5vcHRpbWl6
ZSwNCgkJICAgYmxvY2tfcHJlID0gYmxvY2tfcHJlLA0KCQkgICBibG9ja19iZWdpbiA9IGJsb2Nr
X2JlZ2luLA0KCQkgICBibG9ja19lbmQgPSBibG9ja19lbmQsDQoJCSAgIGJsb2NrX2ZhbGwgPSBi
bG9ja19mYWxsLA0KCQkgICB0cmFuc2ZlclJlZ3MgPSB0cmFuc2ZlclJlZ3MsDQoJCSAgIGxpdmVJ
bmZvID0gbGl2ZUluZm99DQoNCgkgICAgICB2YWwgYWxsb2NhdGVkX2Fzc2VtYmx5IDogQXNzZW1i
bHkudCBsaXN0IGxpc3QNCgkJPSB4ODZBbGxvY2F0ZVJlZ2lzdGVycy5hbGxvY2F0ZVJlZ2lzdGVy
cyANCgkJICB7YXNzZW1ibHkgPSBwc2V1ZG9fYXNzZW1ibHksDQoJCSAgICgqIGRvbid0IGNhbGN1
bGF0ZSBsaXZlbmVzcyBpbmZvDQoJCSAgICAqIG9uIHRoZSBtYWluIGZ1bmN0aW9uIChpbml0R2xv
YmFscykNCgkJICAgICopDQoJCSAgIGxpdmVuZXNzID0gbm90IGlzTWFpbn0NCg0KCSAgICAgIHZh
bCBfIA0KCQk9IEFzc2VydC5hc3NlcnQNCgkJICAoIng4NkNvZGVHZW4ub3V0cHV0OiBpbnZhbGlk
IiwNCgkJICAgZm4gKCkgPT4geDg2VmFsaWRhdGUudmFsaWRhdGUgDQoJCSAgICAgICAgICAgIHth
c3NlbWJseSA9IGFsbG9jYXRlZF9hc3NlbWJseX0pDQoNCgkgICAgICB2YWwgdmFsaWRhdGVkX2Fz
c2VtYmx5IDogQXNzZW1ibHkudCBsaXN0DQoJCT0gTGlzdC5jb25jYXQgYWxsb2NhdGVkX2Fzc2Vt
Ymx5DQoJICAgIGluDQoJICAgICAgTGlzdC5mb3JlYWNoKHZhbGlkYXRlZF9hc3NlbWJseSwNCgkJ
CSAgIGZuIGFzbSA9PiBwcmludCgoQXNzZW1ibHkudG9TdHJpbmcgYXNtKSBeICJcbiIpKTsNCgkg
ICAgICBMaXN0Lmxlbmd0aCB2YWxpZGF0ZWRfYXNzZW1ibHkNCgkgICAgZW5kDQoJICANCglmdW4g
b3V0cHV0QXNzZW1ibHkgKCkNCgkgID0gbGV0DQoJICAgICAgdmFsIHNwbGl0ID0gIUNvbnRyb2wu
TmF0aXZlLnNwbGl0DQoJICAgICAgZnVuIGxvb3AgY2h1bmtzDQoJCT0gbGV0DQoJCSAgICB2YWwg
e2ZpbGUsIHByaW50LCBkb25lfSA9IG1ha2VTKCkNCgkJICAgIHZhbCBfID0gTGlzdC5mb3JlYWNo
DQoJCSAgICAgICAgICAgIChmaWxlX2JlZ2luIGZpbGUsDQoJCQkgICAgIGZuIGFzbSA9PiBwcmlu
dCgoQXNzZW1ibHkudG9TdHJpbmcgYXNtKSBeICJcbiIpKQ0KCQkgICAgZnVuIGxvb3AnIChjaHVu
a3MsIHNpemUpIA0KCQkgICAgICA9IGNhc2UgY2h1bmtzDQoJCQkgIG9mIFtdID0+IGRvbmUgKCkN
CgkJCSAgIHwgY2h1bms6OmNodW5rcw0KCQkJICAgPT4gaWYgKGNhc2Ugc3BsaXQNCgkJCQkgICAg
b2YgTk9ORSA9PiBmYWxzZQ0KCQkJCSAgICAgfCBTT01FIG1heFNpemUgPT4gc2l6ZSA+IG1heFNp
emUpDQoJCQkJdGhlbiAoZG9uZSAoKTsgbG9vcCAoY2h1bms6OmNodW5rcykpDQoJCQkJZWxzZSBs
b29wJyhjaHVua3MsIA0KCQkJCQkgICBzaXplICsgb3V0cHV0Q2h1bmsgKGNodW5rLCBwcmludCkp
DQoJCSAgaW4gDQoJCSAgICBsb29wJyAoY2h1bmtzLCAwKQ0KCQkgIGVuZA0KCSAgICBpbiANCgkg
ICAgICBsb29wIGNodW5rczsNCgkgICAgICB4ODZUcmFuc2xhdGUudHJhbnNsYXRlQ2h1bmtfdG90
YWxzICgpOw0KCSAgICAgIHg4NlNpbXBsaWZ5LnNpbXBsaWZ5X3RvdGFscyAoKTsNCgkgICAgICB4
ODZBbGxvY2F0ZVJlZ2lzdGVycy5hbGxvY2F0ZVJlZ2lzdGVyc190b3RhbHMgKCk7DQoJICAgICAg
eDg2VmFsaWRhdGUudmFsaWRhdGVfdG90YWxzICgpDQoJICAgIGVuZA0KDQoJdmFsIG91dHB1dEFz
c2VtYmx5ICANCgkgID0gQ29udHJvbC50cmFjZUNhbGwNCgkgICAgIm91dHB1dEFzc2VtYmx5Ig0K
CSAgICBvdXRwdXRBc3NlbWJseQ0KICAgICAgaW4NCglvdXRwdXRDKCk7DQoJb3V0cHV0QXNzZW1i
bHkoKQ0KICAgICAgZW5kIA0KZW5kDQo=

---559023410-1903590565-983194520=:24551--