--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
SGksDQogICBJbiBvcmRlciB0byBhZGQgbmV3IGZlYXR1cmUgdG8gT3ZpcnQsIHRoYXQgaXMgdXNl
ciBjYW4gY2hvb3NlIHZpcnR1YWwgbWFjaGluZSB3aGV0aGVyIG9uIHRydXN0ZWQgbWFjaGluZSBv
ciBub3Qgd2hlbiBpdCBydW5zIHVwLCB3ZSBtb2RpZmllZCB0aGUgcmVsYXRpdmUgZmlsZXMuDQpP
dXIgZ29hbCBpcyB3aGVuIHRoZSB1c2VyIGNsaWNrIHRoZSB0cnVzdGVkIGJ1dHRvbiwgUnVuL01p
Z3JhdGlvbiBvcHRpb25zIGFyZSBkaXNhYmxlZC4gQnV0IHVuZm9ydHVuYXRlbHksIHdlIGhhdmVu
4oCZdCBzdWNjZWVkZWQgaW4gZ3JhcGhpYyBpbnRlcmZhY2UuIA0KSSBtb2RpZmllZCB0aGVzZSBm
aWxlcywgSSBjYW7igJl0IHNlZSBIb3N0IFRhYiwgY2FuIHlvdSBnaXZlIG1lIHNvbWUgaGVscD8g
TWF5YmUgd2UgbmVlZCBtb2RpZnkgbW9yZSBmaWxlcy4gV2UgZGlkIHRoZSBmb2xsb3dpbmcgZWZm
b3J0czoNCigxKSBhZGQgYSB0cnVzdGVkIHJhZGlvIGJ1dHRvbi4NCigyKSBNb2RpZnkgQWJzdHJh
Y3RWbVBvcHVwV2lkZ2V0LnVpLnhtbA0KPGc6SG9yaXpvbnRhbFBhbmVsIHZlcnRpY2FsQWxpZ25t
ZW50PSdBTElHTl9NSURETEUnPg0KwqDCoMKgwqAgPGc6UmFkaW9CdXR0b24gdWk6ZmllbGQ9InJ1
blZNT25UcnVzdGVkSG9zdCIvPg0KwqAgwqDCoMKgPGU6RW50aXR5TW9kZWxSYWRpb0J1dHRvbkVk
aXRvciB3aWR0aD0iMTUwcHgiIHVpOmZpZWxkPSJydW5WTU9uVHJ1c3RlZEhvc3RFZGl0b3IiDQrC
oMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqAgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLnJh
ZGlvQnV0dG9ufSIgLz4NCjwvZzpIb3Jpem9udGFsUGFuZWw+DQooMykgTW9kaWZ5IEFic3RyYWN0
Vm1Qb3B1cFdpZGdldC5qYXZhDQpAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpDQpAUGF0aCh2YWx1
ZSA9ICJydW5WTU9uVHJ1c3RlZEhvc3QuZW50aXR5IikNCsKgwqDCoCBAV2l0aEVsZW1lbnRJZCgi
cnVuVk1PblRydXN0ZWRIb3N0IikNCnB1YmxpYyBFbnRpdHlNb2RlbFJhZGlvQnV0dG9uRWRpdG9y
IHJ1blZNT25UcnVzdGVkSG9zdEVkaXRvcjsNCg0KaW5pdExpc3RlbmVycyBtZXRob2Q6DQpvYmpl
Y3QuZ2V0SXNBdXRvQXNzaWduKCkuZ2V0UHJvcGVydHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5l
cihuZXcgSUV2ZW50TGlzdGVuZXIoKSB7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEBPdmVycmlk
ZQ0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBl
diwgT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCBib29sZWFuIGlzQXV0b0Fzc2lnbiA9IChCb29sZWFuKSBvYmplY3QuZ2V0SXNB
dXRvQXNzaWduKCkuZ2V0RW50aXR5KCk7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg
Ym9vbGVhbiBydW5WTU9uVHJ1c3RlZEhvc3QgPSAoQm9vbGVhbikgb2JqZWN0LmdldFJ1blZNT25U
cnVzdGVkSG9zdCgpLmdldEVudGl0eSgpOw0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IGRlZmF1bHRIb3N0RWRpdG9yLnNldEVuYWJsZWQoIWlzQXV0b0Fzc2lnbiAmJiAhcnVuVk1PblRy
dXN0ZWRIb3N0KTsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvL2RlZmF1bHRIb3N0
RWRpdG9yLnNldEVuYWJsZWQoIWlzQXV0b0Fzc2lnbik7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqAgLy8gb25seSB0aGlzIGlzIG5vdCBiaW5kIHRvIHRoZSBtb2RlbCwgc28gbmVlZHMg
dG8gbGlzdGVuIHRvIHRoZSBjaGFuZ2UgZXhwbGljaXRseQ0KwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoCBzcGVjaWZpY0hvc3Quc2V0VmFsdWUoIWlzQXV0b0Fzc2lnbiAmJiAhcnVuVk1PblRy
dXN0ZWRIb3N0KTsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy9zcGVjaWZpY0hvc3Qu
c2V0VmFsdWUoIWlzQXV0b0Fzc2lnbik7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCsKgwqDC
oMKgwqDCoMKgIH0pOw0KaXNBdXRvQXNzaWduRWRpdG9yLmFkZERvbUhhbmRsZXIobmV3IENsaWNr
SGFuZGxlcigpIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQE92ZXJyaWRlDQrCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgew0KwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlZmF1bHRIb3N0RWRpdG9yLnNldEVuYWJsZWQo
ZmFsc2UpOw0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQrCoMKgwqDCoMKgwqDCoCB9LCBDbGlj
a0V2ZW50LmdldFR5cGUoKSk7DQrCoMKgwqDCoMKgwqDCoCB2bS5nZXRJc0F1dG9Bc3NpZ24oKS5n
ZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcihuZXcgSUV2ZW50TGlzdGVuZXIoKSB7
DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEBPdmVycmlkZQ0KwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oCBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRlciwgRXZlbnRB
cmdzIGFyZ3MpIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWlzQXV0b0Fz
c2lnbkVkaXRvci5hc1JhZGlvQnV0dG9uKCkuZ2V0VmFsdWUoKSAmJiAhcnVuVk1PblRydXN0ZWRI
b3N0RWRpdG9yLmFzUmFkaW9CdXR0b24oKS5nZXRWYWx1ZSgpKQ0KwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNw
ZWNpZmljSG9zdC5zZXRWYWx1ZSh0cnVlLCB0cnVlKTsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoCB9DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCsKgwqDCoMKgwqDCoMKgIH0pOw0K
wqDCoMKgwqDCoMKgwqAgcnVuVk1PblRydXN0ZWRIb3N0RWRpdG9yLmFkZERvbUhhbmRsZXIobmV3
IENsaWNrSGFuZGxlcigpIHsNCsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgQE92ZXJyaWRlDQrCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkg
ew0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlZmF1bHRIb3N0RWRpdG9yLnNldEVu
YWJsZWQoZmFsc2UpOw0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQrCoMKgwqDCoMKgwqDCoCB9
LCBDbGlja0V2ZW50LmdldFR5cGUoKSk7DQrCoMKgwqDCoMKgwqDCoCB2bS5nZXRSdW5WTU9uVHJ1
c3RlZEhvc3QoKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcihuZXcgSUV2ZW50
TGlzdGVuZXIoKSB7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEBPdmVycmlkZQ0KwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoCBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNl
bmRlciwgRXZlbnRBcmdzIGFyZ3MpIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp
ZiAoIXJ1blZNT25UcnVzdGVkSG9zdEVkaXRvci5hc1JhZGlvQnV0dG9uKCkuZ2V0VmFsdWUoKSAm
JiAhaXNBdXRvQXNzaWduRWRpdG9yLmFzUmFkaW9CdXR0b24oKS5nZXRWYWx1ZSgpKQ0KwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIHNwZWNpZmljSG9zdC5zZXRWYWx1ZSh0cnVlLCB0cnVlKTsNCsKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoCB9DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCsKgwqDCoMKg
wqDCoMKgIH0pOw0KKDQpIE1vZGlmeSBVbml0Vm1Nb2RlbC5qYXZhDQrCoCBwcml2YXRlIHZvaWQg
UnVuVk1PblRydXN0ZWRIb3N0X0VudGl0eUNoYW5nZWQoT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdz
IGFyZ3MpDQrCoMKgIHsNCsKgwqDCoMKgwqDCoMKgIGlmICgoQm9vbGVhbikgZ2V0UnVuVk1PblRy
dXN0ZWRIb3N0KCkuZ2V0RW50aXR5KCkgPT0gdHJ1ZSkNCsKgwqDCoMKgwqDCoMKgIHsNCsKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgY2xlYXJBbmREaXNhYmxlKGdldFJ1blZNT25TcGVjaWZpY0hvc3Qo
KSk7DQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsZWFyQW5kRGlzYWJsZShnZXRIb3N0Q3B1KCkp
Ow0KwqDCoMKgwqDCoMKgwqAgfQ0KwqDCoMKgwqDCoMKgwqAgZWxzZQ0KwqDCoMKgwqDCoMKgwqAg
ew0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZXRSdW5WTU9uU3BlY2lmaWNIb3N0KCkuc2V0SXND
aGFuZ2FibGUodHJ1ZSk7DQrCoMKgwqDCoMKgwqDCoCB9DQrCoMKgIMKgwqDCoMKgwqBiZWhhdmlv
ci51cGRhdGVDcHVQaW5uaW5nVmlzaWJpbGl0eSgpOw0K44CA44CAfQ0KDQo=
--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_
Content-Type: text/xml; name="AbstractVmPopupWidget.ui.xml"
Content-Description: AbstractVmPopupWidget.ui.xml
Content-Disposition: attachment; filename="AbstractVmPopupWidget.ui.xml";
size=16078; creation-date="Tue, 12 Mar 2013 08:33:20 GMT";
modification-date="Tue, 12 Mar 2013 08:24:34 GMT"
Content-Transfer-Encoding: base64
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSB1aTpVaUJp
bmRlciBTWVNURU0gImh0dHA6Ly9kbC5nb29nbGUuY29tL2d3dC9EVEQveGh0bWwuZW50Ij4NCjx1
aTpVaUJpbmRlciB4bWxuczp1aT0idXJuOnVpOmNvbS5nb29nbGUuZ3d0LnVpYmluZGVyIiB4bWxu
czpnPSJ1cm46aW1wb3J0OmNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpIg0KICAgICAgICAg
ICAgIHhtbG5zOmQ9InVybjppbXBvcnQ6b3JnLm92aXJ0LmVuZ2luZS51aS5jb21tb24ud2lkZ2V0
LmRpYWxvZyINCiAgICAgICAgICAgICB4bWxuczplPSJ1cm46aW1wb3J0Om9yZy5vdmlydC5lbmdp
bmUudWkuY29tbW9uLndpZGdldC5lZGl0b3IiDQogICAgICAgICAgICAgeG1sbnM6dD0idXJuOmlt
cG9ydDpvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQuZGlhbG9nLnRhYiINCiAgICAg
ICAgICAgICB4bWxuczpzPSJ1cm46aW1wb3J0Om9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndp
ZGdldC51aWNvbW1vbi5zdG9yYWdlIg0KICAgICAgICAgICAgIHhtbG5zOms9InVybjppbXBvcnQ6
b3JnLm92aXJ0LmVuZ2luZS51aS5jb21tb24ud2lkZ2V0LmZvcm0ua2V5X3ZhbHVlIj4NCg0KICAg
IDx1aTp3aXRoIGZpZWxkPSdjb25zdGFudHMnIHR5cGU9J29yZy5vdmlydC5lbmdpbmUudWkuY29t
bW9uLkNvbW1vbkFwcGxpY2F0aW9uQ29uc3RhbnRzJy8+DQoNCiAgICA8dWk6c3R5bGUgdHlwZT0i
b3JnLm92aXJ0LmVuZ2luZS51aS5jb21tb24ud2lkZ2V0LnVpY29tbW9uLnBvcHVwLkFic3RyYWN0
Vm1Qb3B1cFdpZGdldC5TdHlsZSI+DQoJCS5nZW5lcmFsVGFiVG9wRGVjb3JhdG9yIHsNCgkJCWJh
Y2tncm91bmQtY29sb3I6ICNEM0QzRDM7DQoJCQltYXJnaW4tdG9wOiA0cHg7DQoJCQltYXJnaW4t
cmlnaHQ6IDNweDsNCgkJCW1hcmdpbi1ib3R0b206IDIwcHg7DQoJCQlwYWRkaW5nLXRvcDogNnB4
Ow0KCQkJcGFkZGluZy1ib3R0b206IDZweDsNCgkJfQ0KDQoJCS5zZWN0aW9uUGFuZWwgew0KCQkJ
bWFyZ2luLWJvdHRvbTogMjBweDsNCgkJfQ0KDQoJCS5zZWN0aW9uTGFiZWwgew0KCQkJZm9udC13
ZWlnaHQ6IGJvbGQ7DQoJCQltYXJnaW4tdG9wOiAxMHB4Ow0KCQkJbWFyZ2luLWJvdHRvbTogNXB4
Ow0KCQl9DQoNCgkJLnNlY3Rpb25Db21tZW50IHsNCgkJCW1hcmdpbi10b3A6IDEwcHg7DQoJCQlt
YXJnaW4tbGVmdDogNXB4Ow0KCQkJZm9udC1zdHlsZTogaXRhbGljOw0KCQl9DQoNCgkJLmNoZWNr
Ym94V2l0aExvbmdMYWJlbCwuY2hlY2tib3ggew0KCQkJbWFyZ2luLWxlZnQ6IC05cHg7DQoJCX0N
Cg0KCQkuY2hlY2tib3hXaXRoTG9uZ0xhYmVsIGxhYmVsIHsNCgkJCW1hcmdpbi1sZWZ0OiAyNnB4
Ow0KCQkJbWFyZ2luLXRvcDogLTI2cHg7DQoJCQlkaXNwbGF5OiBibG9jazsNCgkJCWxpbmUtaGVp
Z2h0OiAyMHB4Ow0KCQl9DQoNCgkJLmxvbmdDaGVja2JveENvbnRlbnQgew0KCQkJd2lkdGg6IDkw
JTsNCgkJfQ0KDQoJCS5wcm92aXNpb25pbmdFZGl0b3Igew0KCQkJcGFkZGluZy1yaWdodDogMjVw
eDsNCgkJfQ0KDQoJCS5wcm92aXNpb25pbmdFZGl0b3JDb250ZW50ICB7DQoJCQlkaXNwbGF5OiBu
b25lOw0KCQl9DQoNCgkJLnByb3Zpc2lvbmluZ1JhZGlvQ29udGVudCAgew0KCQkJcGFkZGluZy10
b3A6IDNweDsNCgkJCXdpZHRoOiAxMDAlOw0KCQl9DQoNCgkJLmRpc2tzQWxsb2NhdGlvbiB7DQoJ
CQlwYWRkaW5nLWxlZnQ6IDVweDsNCgkJCXBhZGRpbmctdG9wOiAxMHB4Ow0KCQl9DQoNCgkJLmRp
c2tzQWxsb2NhdGlvblBhbmVsIHsNCgkJCXdpZHRoOiA0OTBweDsNCgkJCXBhZGRpbmctdG9wOiA1
cHg7DQoJCQlwYWRkaW5nLWJvdHRvbTogMTBweDsNCgkJfQ0KDQogICAgICAgIC50ZXh0Qm94IHsN
CiAgICAgICAgICAgIHdpZHRoOiAzMHB4Ow0KICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0Ow0KICAg
ICAgICB9DQoNCiAgICAgICAgLm51bU9mVm1zTGFiZWwgew0KICAgICAgICAgICAgbWFyZ2luLWxl
ZnQ6IDVweDsNCiAgICAgICAgICAgIGNvbG9yOiAjMzMzMzMzOw0KICAgICAgICB9DQoNCiAgICAg
ICAgLmFzc2lnbmVkVm1zTGFiZWwgew0KICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsNCiAg
ICAgICAgfQ0KDQogICAgICAgIC5wcmVzdGFydGVkSGludExhYmVsIHsNCiAgICAgICAgICAgIGZv
bnQtc2l6ZTogN3B0Ow0KICAgICAgICAgICAgY29sb3I6IGdyYXk7DQogICAgICAgICAgICB0ZXh0
LWFsaWduOiByaWdodDsNCiAgICAgICAgfQ0KDQoJCS5yYWRpb0J1dHRvbiB7DQoNCgkJfQ0KDQoJ
CS5yYWRpb0J1dHRvblNwZWNpZmljSG9zdCB7DQogICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4
Ow0KCQl9DQoNCgkJLnJhZGlvQnV0dG9uUnVuT25UcnVzdGVkSG9zdCB7DQogICAgICAgICAgICBt
YXJnaW4tbGVmdDogNXB4Ow0KICAgICAgICAgICAgICAgIH0NCg0KCQkubGFiZWwgew0KCQkJd2lk
dGg6IDM1MHB4Ow0KCQl9DQoNCiAgICAgICAgLmxhYmVsRGlzYWJsZWQgew0KICAgICAgICAgICAg
Y29sb3I6IGdyYXk7DQogICAgICAgIH0NCg0KCQkucnVuSG9zdFBhbmVsIHsNCg0KCQl9DQoNCgkJ
LmF0dGFjaENkUGFuZWwgew0KCQkJd2lkdGg6IDEwMCU7DQoJCX0NCg0KICAgICAgICAuY2RBdHRh
Y2hlZExhYmVsV2lkdGggew0KICAgICAgICAgICAgd2lkdGg6IDMwcHg7DQogICAgICAgIH0NCg0K
CQkuaG9zdFJ1bk1pZ3JhdGlvbk9wdGlvbnMgew0KCQkJbWFyZ2luLWxlZnQ6IDZweDsNCgkJfQ0K
DQoJCS53YXJuaW5nTWVzc2FnZUxhYmVsIHsNCgkJCWNvbG9yOiAjQ0QyMTI3Ow0KCQkJcG9zaXRp
b246IGFic29sdXRlOw0KCQkJYm90dG9tOiAxMHB4Ow0KCQl9DQoNCgkJLmV4cGxhbmF0aW9uTGFi
ZWwgew0KCQkJZm9udC1zdHlsZTogaXRhbGljOw0KCQkJbWFyZ2luLWxlZnQ6IDQwcHg7DQoJCQlt
YXJnaW4tYm90dG9tOiAxMHB4Ow0KCQkJd2lkdGg6IDMwMHB4Ow0KCQl9DQoNCgkJLmNwdVBpbm5p
bmdTdHlsZSB7DQoJCX0NCg0KCQkuZXhwYW5kZXJDb250ZW50LC5nZW5lcmFsRXhwYW5kZXJDb250
ZW50IHsNCgkJCXBhZGRpbmctbGVmdDogMTBweDsNCgkJfQ0KCQkNCgkJLmV4cGFuZGVyQ29udGVu
dCB7DQoJCQlmbG9hdDogbGVmdDsNCgkJfQ0KDQoJCS53YXJuaW5nTGFiZWwgew0KICAgICAgICAg
ICAgY29sb3I6IHJlZDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICAgICAg
ICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBv
b2xFZGl0Vm1zIHsNCgkJCWxpbmUtaGVpZ2h0OiAzMHB4Ow0KCQkJcGFkZGluZzogMCA1cHg7DQoJ
CQlwYWRkaW5nLWJvdHRvbTogMzVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBy
ZXN0YXJ0ZWRWbXNFZGl0b3JDb250ZW50IHsNCiAgICAgICAgCXdpZHRoOiAyMzBweDsNCiAgICAg
ICAgfQ0KICAgICAgICANCiAgICAgICAgLnByZXN0YXJ0ZWRWbXNFZGl0b3Igew0KICAgICAgICAJ
ZmxvYXQ6IHJpZ2h0Ow0KICAgICAgICAJd2lkdGg6IDIzMHB4Ow0KICAgICAgICB9DQogICAgICAg
IA0KICAgICAgICAuZWRpdFByZXN0YXJ0ZWRWbXNFZGl0b3Igew0KICAgICAgICAJZmxvYXQ6IGxl
ZnQ7DQogICAgICAgIAlwYWRkaW5nLXJpZ2h0OiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0K
ICAgICAgICAucHJlc3RhcnRlZFZtc0ljb24gew0KICAgICAgICAJZmxvYXQ6IGxlZnQ7DQogICAg
ICAgIAlwYWRkaW5nLXRvcDogNXB4Ow0KICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7DQog
ICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wcmVzdGFydGVkTGFiZWxXaXRoSGVscCB7DQog
ICAgICAgIAlmbG9hdDogbGVmdDsNCiAgICAgICAgCXdpZHRoOiAyNTFweDsNCiAgICAgICAgfQ0K
DQogICAgICAgIC5pbmNyZWFzZVByZXN0YXJ0ZWRMYWJlbCB7DQogICAgICAgIAlmbG9hdDogbGVm
dDsNCiAgICAgICAgCXdpZHRoOiAyNTFweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAg
LmVpZHRQcmVzdGFydGVkVm1zIHsNCiAgICAgICAgCWZsb2F0OiBsZWZ0Ow0KICAgICAgICAJd2lk
dGg6IDIzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZWlkdEluY3JlYXNlVm1z
IHsNCiAgICAgICAgCWZsb2F0OiBsZWZ0Ow0KICAgICAgICAJd2lkdGg6IDIzMHB4Ow0KICAgICAg
ICB9DQogICAgICAgIA0KICAgICAgICAucHJlc3RhcnRlZExhYmVsIHsNCiAgICAgICAgCWZsb2F0
OiBsZWZ0Ow0KICAgICAgICAJY29sb3I6ICMzMzMzMzM7DQogICAgICAgIH0NCiAgICAgICAgDQog
ICAgICAgIC5pbmNyZWFzZVZtc0luUG9vbFZtcyB7DQogICAgICAgIAlmbG9hdDogbGVmdDsNCiAg
ICAgICAgfQ0KICAgICAgICANCgk8L3VpOnN0eWxlPg0KDQoJPHQ6RGlhbG9nVGFiUGFuZWwgd2lk
dGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+DQoJCTx0OnRhYj4NCgkJCTx0OkRpYWxvZ1RhYiB1aTpm
aWVsZD0iZ2VuZXJhbFRhYiI+DQoJCQkJPHQ6Y29udGVudD4NCgkJCQkJPGc6Rmxvd1BhbmVsPg0K
CQkJCQkJPGc6Rmxvd1BhbmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5nZW5lcmFsVGFiVG9wRGVj
b3JhdG9yfSI+DQoJCQkJCQkJPGU6TGlzdE1vZGVsTGlzdEJveEVkaXRvciB1aTpmaWVsZD0iZGF0
YUNlbnRlckVkaXRvciIgLz4NCgkJCQkJCQk8ZTpMaXN0TW9kZWxMaXN0Qm94RWRpdG9yIHVpOmZp
ZWxkPSJjbHVzdGVyRWRpdG9yIiAvPg0KCQkJCQkJCTxlOkxpc3RNb2RlbExpc3RCb3hFZGl0b3Ig
dWk6ZmllbGQ9InF1b3RhRWRpdG9yIiAvPg0KCQkJCQkJPC9nOkZsb3dQYW5lbD4NCgkJCQkJCTxn
OkZsb3dQYW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2VjdGlvblBhbmVsfSI+DQoJCQkJCQkJ
PGU6RW50aXR5TW9kZWxUZXh0Qm94RWRpdG9yIHVpOmZpZWxkPSJuYW1lRWRpdG9yIiAvPg0KCQkJ
CQkJCTxlOkVudGl0eU1vZGVsVGV4dEJveEVkaXRvciB1aTpmaWVsZD0iZGVzY3JpcHRpb25FZGl0
b3IiIC8+DQoNCjwhLS0gCQkJCQkJTmV3IFZNIFBvb2wJCQkJCQkJIC0tPg0KCQkJCQkJCTxlOkVu
dGl0eU1vZGVsVGV4dEJveEVkaXRvciB1aTpmaWVsZD0ibnVtT2ZWbXNFZGl0b3IiIC8+DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGc6Rmxvd1BhbmVsIHVpOmZpZWxkPSJuZXdQb29sRWRp
dFZtc1BhbmVsIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUucG9vbEVkaXRWbXN9Ij4NCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAJPGc6Rmxvd1BhbmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5w
cmVzdGFydGVkTGFiZWxXaXRoSGVscH0iPg0KCQkJCQkJCQkJPGc6TGFiZWwgdWk6ZmllbGQ9InBy
ZXN0YXJ0ZWRMYWJlbCIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLnByZXN0YXJ0ZWRMYWJlbH0iIC8+
DQoJCQkJCQkJCQk8ZDpJbmZvSWNvbiB1aTpmaWVsZD0ibmV3UG9vbFByZXN0YXJ0ZWRWbXNJY29u
IiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUucHJlc3RhcnRlZFZtc0ljb259IiAvPg0KCQkJCQkJCQk8
L2c6Rmxvd1BhbmVsPg0KCQkJCQkJCQk8ZTpFbnRpdHlNb2RlbFRleHRCb3hPbmx5RWRpdG9yIHVp
OmZpZWxkPSJwcmVzdGFydGVkVm1zRWRpdG9yIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUucHJlc3Rh
cnRlZFZtc0VkaXRvcn0iIGNvbnRlbnRXaWRnZXRTdHlsZU5hbWU9IntzdHlsZS5wcmVzdGFydGVk
Vm1zRWRpdG9yQ29udGVudH0iIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nOkZs
b3dQYW5lbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCjwhLS0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVkaXQgVk0gUG9vbCAtLT4NCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8ZzpGbG93UGFuZWwgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLnBvb2xFZGl0Vm1zfSIgdWk6
ZmllbGQ9ImVkaXRQb29sRWRpdFZtc1BhbmVsIj4NCgkJCQkJCQkJPGc6Rmxvd1BhbmVsIGFkZFN0
eWxlTmFtZXM9IntzdHlsZS5wcmVzdGFydGVkTGFiZWxXaXRoSGVscH0iPg0KCQkJCQkJCQkJPGc6
TGFiZWwgdWk6ZmllbGQ9ImVkaXRQcmVzdGFydGVkVm1zTGFiZWwiIGFkZFN0eWxlTmFtZXM9Intz
dHlsZS5wcmVzdGFydGVkTGFiZWx9IiAvPg0KCQkJCQkJCQkJPGQ6SW5mb0ljb24gdWk6ZmllbGQ9
ImVkaXRQb29sUHJlc3RhcnRlZFZtc0ljb24iIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5wcmVzdGFy
dGVkVm1zSWNvbn0iIC8+DQoJCQkJCQkJCTwvZzpGbG93UGFuZWw+DQoJCQkJCQkJCTxnOkZsb3dQ
YW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuZWlkdFByZXN0YXJ0ZWRWbXN9Ij4NCgkJCQkJCQkJ
CTxlOkVudGl0eU1vZGVsVGV4dEJveE9ubHlFZGl0b3IgdWk6ZmllbGQ9ImVkaXRQcmVzdGFydGVk
Vm1zRWRpdG9yIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuZWRpdFByZXN0YXJ0ZWRWbXNFZGl0b3J9
IiBjb250ZW50V2lkZ2V0U3R5bGVOYW1lPSJ7c3R5bGUudGV4dEJveH0iIC8+DQoJCQkJCQkJCQk8
ZzpWYWx1ZUxhYmVsIHVpOmZpZWxkPSJvdXRPZnhJblBvb2wiIC8+DQoJCQkJCQkJCTwvZzpGbG93
UGFuZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nOkZsb3dQYW5lbD4NCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZzpG
bG93UGFuZWwgdWk6ZmllbGQ9ImVkaXRQb29sSW5jcmFzZU51bU9mVm1zUGFuZWwiIGFkZFN0eWxl
TmFtZXM9IntzdHlsZS5wb29sRWRpdFZtc30iPg0KCQkJCQkJCQk8ZzpMYWJlbCB0ZXh0PSJ7Y29u
c3RhbnRzLmluY3JlYXNlTnVtYmVyT2ZWTXNJblBvb2xCeX0iIGFkZFN0eWxlTmFtZXM9IntzdHls
ZS5pbmNyZWFzZVByZXN0YXJ0ZWRMYWJlbH0iIC8+DQoJCQkJCQkJCTxnOkZsb3dQYW5lbCBhZGRT
dHlsZU5hbWVzPSJ7c3R5bGUuZWlkdEluY3JlYXNlVm1zfSI+DQoJCQkJCQkJCQk8ZTpFbnRpdHlN
b2RlbFRleHRCb3hPbmx5RWRpdG9yIHVpOmZpZWxkPSJpbmNyYXNlTnVtT2ZWbXNFZGl0b3IiIGFk
ZFN0eWxlTmFtZXM9IntzdHlsZS5lZGl0UHJlc3RhcnRlZFZtc0VkaXRvcn0iIGNvbnRlbnRXaWRn
ZXRTdHlsZU5hbWU9IntzdHlsZS50ZXh0Qm94fSIgLz4NCgkJCQkJCQkJCTxnOkxhYmVsIHRleHQ9
Intjb25zdGFudHMudm1zfSIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmluY3JlYXNlVm1zSW5Qb29s
Vm1zfSIgLz4NCgkJCQkJCQkJPC9nOkZsb3dQYW5lbD4NCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L2c6Rmxvd1BhbmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlOkxpc3RN
b2RlbExpc3RCb3hFZGl0b3IgdWk6ZmllbGQ9InRlbXBsYXRlRWRpdG9yIi8+DQogICAgICAgICAg
ICAgICAgICAgICAgICA8L2c6Rmxvd1BhbmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGc6
Rmxvd1BhbmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uUGFuZWx9Ij4NCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZTpFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3IgdWk6ZmllbGQ9
Im1lbVNpemVFZGl0b3IiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZTpFbnRpdHlN
b2RlbFRleHRCb3hFZGl0b3IgdWk6ZmllbGQ9InRvdGFsdkNQVXNFZGl0b3IiIC8+DQoJCQkJCQkJ
PGc6Rmxvd1BhbmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uUGFuZWx9Ij4NCgkJCQkJ
CQkJPGQ6QWR2YW5jZWRQYXJhbWV0ZXJzRXhwYW5kZXIgdWk6ZmllbGQ9ImdlbmVyYWxBZHZhbmNl
ZFBhcmFtZXRlckV4cGFuZGVyIi8+DQoJCQkJCQkJCTxnOkZsb3dQYW5lbCB1aTpmaWVsZD0iZ2Vu
ZXJhbEFkdmFuY2VkUGFyYW1ldGVyRXhwYW5kZXJDb250ZW50IiBhZGRTdHlsZU5hbWVzPSJ7c3R5
bGUuZ2VuZXJhbEV4cGFuZGVyQ29udGVudH0iPg0KCQkJCQkJCQkJPGU6TGlzdE1vZGVsTGlzdEJv
eEVkaXRvciB1aTpmaWVsZD0iY29yZVBlclNvY2tldEVkaXRvciIgLz4NCgkJCQkJCQkJCTxlOkxp
c3RNb2RlbExpc3RCb3hFZGl0b3IgdWk6ZmllbGQ9Im51bU9mU29ja2V0c0VkaXRvciIgLz4NCgkJ
CQkJCQkJPC9nOkZsb3dQYW5lbD4NCgkJCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQkJPC9nOkZs
b3dQYW5lbD4NCgkJCQkJCTxnOkZsb3dQYW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2VjdGlv
blBhbmVsfSI+DQoJCQkJCQkJPGU6TGlzdE1vZGVsTGlzdEJveEVkaXRvciB1aTpmaWVsZD0ib1NU
eXBlRWRpdG9yIiAvPg0KCQkJCQkJCTxlOkVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IgdWk6Zmll
bGQ9ImlzU3RhdGVsZXNzRWRpdG9yIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuY2hlY2tib3h9IiAv
Pg0KCQkJCQkJCTxlOkVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IgdWk6ZmllbGQ9ImlzRGVsZXRl
UHJvdGVjdGVkRWRpdG9yIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuY2hlY2tib3h9IiAvPg0KCQkJ
CQkJPC9nOkZsb3dQYW5lbD4NCgkJCQkJCTxnOkZsb3dQYW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5
bGUuc2VjdGlvblBhbmVsfSI+DQoJCQkJCQkJDQoJCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQkJ
PGc6TGFiZWwgdWk6ZmllbGQ9ImdlbmVyYWxXYXJuaW5nTWVzc2FnZSIgYWRkU3R5bGVOYW1lcz0i
e3N0eWxlLndhcm5pbmdNZXNzYWdlTGFiZWx9IiAvPg0KCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJ
CTwvdDpjb250ZW50Pg0KCQkJPC90OkRpYWxvZ1RhYj4NCgkJPC90OnRhYj4NCgkJPHQ6dGFiPg0K
CQkJPHQ6RGlhbG9nVGFiIHVpOmZpZWxkPSJwb29sVGFiIj4NCgkJCQk8dDpjb250ZW50Pg0KCQkJ
CQk8ZzpGbG93UGFuZWw+DQoJCQkJCQk8ZTpMaXN0TW9kZWxMaXN0Qm94RWRpdG9yIHVpOmZpZWxk
PSJwb29sVHlwZUVkaXRvciIgLz4NCgkJCQkJPC9nOkZsb3dQYW5lbD4NCgkJCQk8L3Q6Y29udGVu
dD4NCgkJCTwvdDpEaWFsb2dUYWI+DQoJCTwvdDp0YWI+DQoJCTx0OnRhYj4NCgkJICAgICAgIDx0
OkRpYWxvZ1RhYiB1aTpmaWVsZD0iaW5pdGlhbFJ1blRhYiI+DQoJCQkJPHQ6Y29udGVudD4NCgkJ
CQkJPGc6Rmxvd1BhbmVsPg0KCQkJCSAgICAgIAkgICAgICAgIDxnOkxhYmVsIGFkZFN0eWxlTmFt
ZXM9IntzdHlsZS5zZWN0aW9uTGFiZWx9IiB0ZXh0PSJ7Y29uc3RhbnRzLmluaXRpYWxSdW5HZW5l
cmFsfSIgLz4NCgkJCQkJICAgICAgICA8ZTpMaXN0TW9kZWxMaXN0Qm94RWRpdG9yIHVpOmZpZWxk
PSJ0aW1lWm9uZUVkaXRvciIgLz4NCgkJCQkJCTxnOkxhYmVsIGFkZFN0eWxlTmFtZXM9IntzdHls
ZS5zZWN0aW9uTGFiZWx9IiB0ZXh0PSJ7Y29uc3RhbnRzLmluaXRpYWxSdW5XaW5kb3dzfSIgLz4N
CgkJCQkJCTxlOkxpc3RNb2RlbExpc3RCb3hFZGl0b3IgdWk6ZmllbGQ9ImRvbWFpbkVkaXRvciIg
Lz4NCgkJCQkJPC9nOkZsb3dQYW5lbD4NCgkJCQk8L3Q6Y29udGVudD4NCgkJCTwvdDpEaWFsb2dU
YWI+DQoJCTwvdDp0YWI+DQoJCTx0OnRhYj4NCgkJCTx0OkRpYWxvZ1RhYiB1aTpmaWVsZD0iY29u
c29sZVRhYiI+DQoJCQkJPHQ6Y29udGVudD4NCgkJCQkJPGc6Rmxvd1BhbmVsPg0KCQkJCQkJPGU6
TGlzdE1vZGVsTGlzdEJveEVkaXRvciB1aTpmaWVsZD0iZGlzcGxheVByb3RvY29sRWRpdG9yIiAv
Pg0KCQkJCQkJPGU6TGlzdE1vZGVsTGlzdEJveEVkaXRvciB1aTpmaWVsZD0idXNiU3VwcG9ydEVk
aXRvciIgLz4NCgkJCQkJCTxlOkxpc3RNb2RlbExpc3RCb3hFZGl0b3IgdWk6ZmllbGQ9Im51bU9m
TW9uaXRvcnNFZGl0b3IiIC8+DQoJCQkJCQk8ZTpFbnRpdHlNb2RlbENoZWNrQm94RWRpdG9yIHVp
OmZpZWxkPSJpc1NtYXJ0Y2FyZEVuYWJsZWRFZGl0b3IiIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5j
aGVja2JveH0iIC8+DQoJCQkJCQk8ZzpMYWJlbCB1aTpmaWVsZD0ibmF0aXZlVXNiV2FybmluZ01l
c3NhZ2UiIHRleHQ9Intjb25zdGFudHMubmF0aXZlVXNiU3VwcG9ydFdhcm5pbmd9IiBhZGRTdHls
ZU5hbWVzPSJ7c3R5bGUud2FybmluZ01lc3NhZ2VMYWJlbH0iIC8+DQoJCQkJCQk8ZDpBZHZhbmNl
ZFBhcmFtZXRlcnNFeHBhbmRlciB1aTpmaWVsZD0iZXhwYW5kZXIiLz4NCgkJCQkJCTxnOkZsb3dQ
YW5lbCB1aTpmaWVsZD0iZXhwYW5kZXJDb250ZW50IiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuZXhw
YW5kZXJDb250ZW50fSI+DQoJCQkJCQkJPGc6TGFiZWwgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLndh
cm5pbmdMYWJlbH0iIHRleHQ9Intjb25zdGFudHMuYWR2YW5jZWRPcHRpb25zTGFiZWx9IiAvPg0K
CQkJCQkJCTxlOkVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IgdWk6ZmllbGQ9ImFsbG93Q29uc29s
ZVJlY29ubmVjdEVkaXRvciIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmNoZWNrYm94V2l0aExvbmdM
YWJlbH0iIC8+DQoJCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJ
CTwvdDpjb250ZW50Pg0KCQkJPC90OkRpYWxvZ1RhYj4NCgkJPC90OnRhYj4NCgkJPHQ6dGFiPg0K
CQkJPHQ6RGlhbG9nVGFiIHVpOmZpZWxkPSJob3N0VGFiIj4NCgkJCQk8dDpjb250ZW50Pg0KCQkJ
CQk8ZzpGbG93UGFuZWw+DQoJCQkJCQk8ZzpMYWJlbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2Vj
dGlvbkxhYmVsfSIgdGV4dD0ie2NvbnN0YW50cy5ydW5PblZtUG9wdXB9IiAvPg0KCQkJCQkJPGc6
VmVydGljYWxQYW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUucnVuSG9zdFBhbmVsfSIgdmVydGlj
YWxBbGlnbm1lbnQ9J0FMSUdOX01JRERMRSc+DQoJCQkJCQkJPGU6RW50aXR5TW9kZWxSYWRpb0J1
dHRvbkVkaXRvciB3aWR0aD0iMTUwcHgiIHVpOmZpZWxkPSJpc0F1dG9Bc3NpZ25FZGl0b3IiDQoJ
CQkJCQkJCWFkZFN0eWxlTmFtZXM9IntzdHlsZS5yYWRpb0J1dHRvbn0iIC8+DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGc6SG9yaXpvbnRhbFBhbmVsIHZlcnRpY2FsQWxpZ25tZW50PSdB
TElHTl9NSURETEUnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZzpSYWRpb0J1
dHRvbiB1aTpmaWVsZD0ic3BlY2lmaWNIb3N0IiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUucmFkaW9C
dXR0b25TcGVjaWZpY0hvc3R9IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
ZzpMYWJlbCB1aTpmaWVsZD0ic3BlY2lmaWNIb3N0TGFiZWwiIHRleHQ9Intjb25zdGFudHMuc3Bl
Y2lmaWNWbVBvcHVwfSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGU6TGlz
dE1vZGVsTGlzdEJveEVkaXRvciB1aTpmaWVsZD0iZGVmYXVsdEhvc3RFZGl0b3IiIC8+DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPC9nOkhvcml6b250YWxQYW5lbD4NCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8ZzpIb3Jpem9udGFsUGFuZWwgdmVydGljYWxBbGlnbm1lbnQ9J0FM
SUdOX01JRERMRSc+DQoJCQkJCQkJPGU6RW50aXR5TW9kZWxSYWRpb0J1dHRvbkVkaXRvciB3aWR0
aD0iMTUwcHgiIHVpOmZpZWxkPSJydW5WTU9uVHJ1c3RlZEhvc3RFZGl0b3IiDQoJCQkJCQkJCWFk
ZFN0eWxlTmFtZXM9IntzdHlsZS5yYWRpb0J1dHRvbn0iIC8+DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9nOkhvcml6b250YWxQYW5lbD4NCgkJCQkJCTwvZzpWZXJ0aWNhbFBhbmVsPg0K
CQkJCQkJPGc6TGFiZWwgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLnNlY3Rpb25MYWJlbH0iIHRleHQ9
Intjb25zdGFudHMucnVuTWlncmF0aW9uT3B0aW9uc1ZtUG9wdXB9IiAvPg0KCQkJCQkJPGc6VmVy
dGljYWxQYW5lbCB3aWR0aD0iMTAwJSIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmhvc3RSdW5NaWdy
YXRpb25PcHRpb25zfSI+DQoJCQkJCQkJPGU6RW50aXR5TW9kZWxDaGVja0JveEVkaXRvciB1aTpm
aWVsZD0icnVuVk1PblNwZWNpZmljSG9zdEVkaXRvciIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmNo
ZWNrYm94fSIgLz4NCgkJCQkJCQk8ZTpFbnRpdHlNb2RlbENoZWNrQm94RWRpdG9yIHVpOmZpZWxk
PSJob3N0Q3B1RWRpdG9yIiBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuY2hlY2tib3h9IiAvPg0KCQkJ
CQkJCTxlOkVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IgdWk6ZmllbGQ9ImRvbnRNaWdyYXRlVk1F
ZGl0b3IiIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5jaGVja2JveFdpdGhMb25nTGFiZWx9IiAvPg0K
CQkJCQkJPC9nOlZlcnRpY2FsUGFuZWw+DQoJCQkJCQk8ZTpFbnRpdHlNb2RlbFRleHRCb3hFZGl0
b3IgdWk6ZmllbGQ9ImNwdVBpbm5pbmciIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5jcHVQaW5uaW5n
U3R5bGV9Ii8+DQoJCQkJCQk8ZzpIVE1MIHVpOmZpZWxkPSJjcHVQaW5uaW5nTGFiZWwiIGFkZFN0
eWxlTmFtZXM9IntzdHlsZS5leHBsYW5hdGlvbkxhYmVsfSxnZW5lcmFsRGlhbG9nQ29tbWVudCIg
Lz4NCgkJCQkJPC9nOkZsb3dQYW5lbD4NCgkJCQk8L3Q6Y29udGVudD4NCgkJCTwvdDpEaWFsb2dU
YWI+DQoJCTwvdDp0YWI+DQoJCTx0OnRhYj4NCgkJCTx0OkRpYWxvZ1RhYiB1aTpmaWVsZD0iaGln
aEF2YWlsYWJpbGl0eVRhYiI+DQoJCQkJPHQ6Y29udGVudD4NCgkJCQkJPGc6Rmxvd1BhbmVsPg0K
CQkJCQkJPGc6Rmxvd1BhbmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uUGFuZWx9Ij4N
CgkJCQkJCQk8ZTpFbnRpdHlNb2RlbENoZWNrQm94RWRpdG9yIHVpOmZpZWxkPSJpc0hpZ2hseUF2
YWlsYWJsZUVkaXRvciIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmNoZWNrYm94fSIgLz4NCgkJCQkJ
CTwvZzpGbG93UGFuZWw+DQoJCQkJCQk8ZzpGbG93UGFuZWwgYWRkU3R5bGVOYW1lcz0ie3N0eWxl
LnNlY3Rpb25QYW5lbH0iPg0KCQkJCQkJCTxnOkxhYmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5z
ZWN0aW9uTGFiZWx9IiB0ZXh0PSJ7Y29uc3RhbnRzLnByaW9yRm9yUnVuTWlncmF0aW9uUXVldWVW
bVBvcHVwfSIgLz4NCgkJCQkJCQk8ZTpFbnRpdHlNb2RlbENlbGxUYWJsZSB1aTpmaWVsZD0icHJp
b3JpdHlFZGl0b3IiIC8+DQoJCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQk8L2c6Rmxvd1BhbmVs
Pg0KCQkJCTwvdDpjb250ZW50Pg0KCQkJPC90OkRpYWxvZ1RhYj4NCgkJPC90OnRhYj4NCgkJPHQ6
dGFiPg0KCQkJPHQ6RGlhbG9nVGFiIHVpOmZpZWxkPSJyZXNvdXJjZUFsbG9jYXRpb25UYWIiPg0K
CQkJCTx0OmNvbnRlbnQ+DQoJCQkJCTxnOkZsb3dQYW5lbD4NCgkJCQkJCTxnOkZsb3dQYW5lbCBh
ZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2VjdGlvblBhbmVsfSI+DQoJCQkJCQkJPGc6TGFiZWwgYWRk
U3R5bGVOYW1lcz0ie3N0eWxlLnNlY3Rpb25MYWJlbH0iIHRleHQ9Intjb25zdGFudHMubWVtQWxs
b2NWbVBvcHVwfSIgLz4NCgkJCQkJCQk8ZTpFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3IgdWk6Zmll
bGQ9Im1pbkFsbG9jYXRlZE1lbW9yeUVkaXRvciIgLz4NCgkJCQkJCTwvZzpGbG93UGFuZWw+DQoJ
CQkJCQk8ZzpGbG93UGFuZWwgdWk6ZmllbGQ9InN0b3JhZ2VBbGxvY2F0aW9uUGFuZWwiIGFkZFN0
eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uUGFuZWx9Ij4NCgkJCQkJCQk8ZzpIb3Jpem9udGFsUGFu
ZWw+DQoJCQkJCQkJCTxnOkxhYmVsIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uTGFiZWx9
IiB0ZXh0PSJ7Y29uc3RhbnRzLnN0b3JhZ2VBbGxvY1ZtUG9wdXB9IiAvPg0KCQkJCQkJCQk8ZzpM
YWJlbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2VjdGlvbkNvbW1lbnR9IiB0ZXh0PSJ7Y29uc3Rh
bnRzLmF2YWlsT25seVRlbXBsU2VsZWN0ZWRWbVBvcHVwfSIgLz4NCgkJCQkJCQk8L2c6SG9yaXpv
bnRhbFBhbmVsPg0KCQkJCQkJCTxnOkhvcml6b250YWxQYW5lbCB1aTpmaWVsZD0icHJvdmlzaW9u
U2VsZWN0aW9uUGFuZWwiPg0KCQkJCQkJCQk8ZTpMaXN0TW9kZWxMaXN0Qm94RWRpdG9yIHVpOmZp
ZWxkPSJwcm92aXNpb25pbmdFZGl0b3IiIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5wcm92aXNpb25p
bmdFZGl0b3J9IiAvPg0KCQkJCQkJCQk8ZzpWZXJ0aWNhbFBhbmVsPg0KCQkJCQkJCQkJPGU6RW50
aXR5TW9kZWxSYWRpb0J1dHRvbkVkaXRvciB1aTpmaWVsZD0icHJvdmlzaW9uaW5nVGhpbkVkaXRv
ciIvPg0KCQkJCQkJCQkJPGU6RW50aXR5TW9kZWxSYWRpb0J1dHRvbkVkaXRvciB1aTpmaWVsZD0i
cHJvdmlzaW9uaW5nQ2xvbmVFZGl0b3IiLz4NCgkJCQkJCQkJPC9nOlZlcnRpY2FsUGFuZWw+DQoJ
CQkJCQkJPC9nOkhvcml6b250YWxQYW5lbD4NCgkJCQkJCQk8ZzpGbG93UGFuZWwgdWk6ZmllbGQ9
ImRpc2tzQWxsb2NhdGlvblBhbmVsIj4NCgkJCQkJCQk8ZzpMYWJlbCB1aTpmaWVsZD0iZGlza3NB
bGxvY2F0aW9uTGFiZWwiIHRleHQ9Intjb25zdGFudHMuZGlza3NBbGxvY2F0aW9ufSIgIGFkZFN0
eWxlTmFtZXM9IntzdHlsZS5kaXNrc0FsbG9jYXRpb259IiB2aXNpYmxlPSJmYWxzZSIgLz4NCgkJ
CQkJCQkJPGc6VmVydGljYWxQYW5lbD4NCgkJCQkJCQkJCTxzOkRpc2tzQWxsb2NhdGlvblZpZXcg
dWk6ZmllbGQ9ImRpc2tzQWxsb2NhdGlvblZpZXciIGxpc3RIZWlnaHQ9IjE3MHB4IiBsaXN0V2lk
dGg9IjQ5MHB4IiBzaG93Vm9sdW1lVHlwZT0idHJ1ZSIgYWRkU3R5bGVOYW1lcz0ie3N0eWxlLmRp
c2tzQWxsb2NhdGlvblBhbmVsfSIgLz4NCgkJCQkJCQkJPC9nOlZlcnRpY2FsUGFuZWw+DQoJCQkJ
CQkJPC9nOkZsb3dQYW5lbD4NCgkJCQkJCTwvZzpGbG93UGFuZWw+DQoJCQkJCTwvZzpGbG93UGFu
ZWw+DQoJCQkJPC90OmNvbnRlbnQ+DQoJCQk8L3Q6RGlhbG9nVGFiPg0KCQk8L3Q6dGFiPg0KCQk8
dDp0YWI+DQoJCQk8dDpEaWFsb2dUYWIgdWk6ZmllbGQ9ImJvb3RPcHRpb25zVGFiIj4NCgkJCQk8
dDpjb250ZW50Pg0KCQkJCQk8ZzpGbG93UGFuZWw+DQoJCQkJCQk8ZzpGbG93UGFuZWwgYWRkU3R5
bGVOYW1lcz0ie3N0eWxlLnNlY3Rpb25QYW5lbH0iPg0KCQkJCQkJCTxnOkxhYmVsIGFkZFN0eWxl
TmFtZXM9IntzdHlsZS5zZWN0aW9uTGFiZWx9IiB0ZXh0PSJ7Y29uc3RhbnRzLmJvb3RTZXF1ZW5j
ZVZtUG9wdXB9IiAvPg0KCQkJCQkJCTxlOkxpc3RNb2RlbExpc3RCb3hFZGl0b3IgdWk6ZmllbGQ9
ImZpcnN0Qm9vdERldmljZUVkaXRvciIgLz4NCgkJCQkJCQk8ZTpMaXN0TW9kZWxMaXN0Qm94RWRp
dG9yIHVpOmZpZWxkPSJzZWNvbmRCb290RGV2aWNlRWRpdG9yIiAvPg0KCQkJCQkJCTxnOkhvcml6
b250YWxQYW5lbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuYXR0YWNoQ2RQYW5lbH0iIHZlcnRpY2Fs
QWxpZ25tZW50PSJBTElHTl9NSURETEUiPg0KCQkJCQkJCQk8ZTpFbnRpdHlNb2RlbENoZWNrQm94
RWRpdG9yIGxhYmVsPSJ7Y29uc3RhbnRzLmF0dGFjaENkVm1Qb3B1cH0iIHVpOmZpZWxkPSJjZEF0
dGFjaGVkRWRpdG9yIiAvPg0KCQkJCQkJCQk8ZTpMaXN0TW9kZWxMaXN0Qm94RWRpdG9yIHVpOmZp
ZWxkPSJjZEltYWdlRWRpdG9yIiAvPg0KCQkJCQkJCTwvZzpIb3Jpem9udGFsUGFuZWw+DQoJCQkJ
CQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQkJPGc6Rmxvd1BhbmVsIHVpOmZpZWxkPSJsaW51eEJvb3RP
cHRpb25zUGFuZWwiIGFkZFN0eWxlTmFtZXM9IntzdHlsZS5zZWN0aW9uUGFuZWx9Ij4NCgkJCQkJ
CQk8ZzpMYWJlbCBhZGRTdHlsZU5hbWVzPSJ7c3R5bGUuc2VjdGlvbkxhYmVsfSIgdGV4dD0ie2Nv
bnN0YW50cy5saW51eEJvb3RPcHRpb25zVm1Qb3B1cH0iIC8+DQoJCQkJCQkJPGU6RW50aXR5TW9k
ZWxUZXh0Qm94RWRpdG9yIHVpOmZpZWxkPSJrZXJuZWxfcGF0aEVkaXRvciIgLz4NCgkJCQkJCQk8
ZTpFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3IgdWk6ZmllbGQ9ImluaXRyZF9wYXRoRWRpdG9yIiAv
Pg0KCQkJCQkJCTxlOkVudGl0eU1vZGVsVGV4dEJveEVkaXRvciB1aTpmaWVsZD0ia2VybmVsX3Bh
cmFtZXRlcnNFZGl0b3IiIC8+DQoJCQkJCQk8L2c6Rmxvd1BhbmVsPg0KCQkJCQk8L2c6Rmxvd1Bh
bmVsPg0KCQkJCTwvdDpjb250ZW50Pg0KCQkJPC90OkRpYWxvZ1RhYj4NCgkJPC90OnRhYj4NCgkJ
PHQ6dGFiPg0KCQkJPHQ6RGlhbG9nVGFiIHVpOmZpZWxkPSJjdXN0b21Qcm9wZXJ0aWVzVGFiIj4N
CgkJCQk8dDpjb250ZW50Pg0KCQkJCQk8ZzpGbG93UGFuZWw+DQogICAgICAgICAgICAgICAgICAg
ICAgICA8azpLZXlWYWx1ZVdpZGdldCB1aTpmaWVsZD0iY3VzdG9tUHJvcGVydGllc1NoZWV0RWRp
dG9yIi8+DQoJCQkJCTwvZzpGbG93UGFuZWw+DQoJCQkJPC90OmNvbnRlbnQ+DQoJCQk8L3Q6RGlh
bG9nVGFiPg0KCQk8L3Q6dGFiPg0KCTwvdDpEaWFsb2dUYWJQYW5lbD4NCg0KPC91aTpVaUJpbmRl
cj4NCg==
--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_
Content-Type: application/octet-stream; name="UnitVmModel.java"
Content-Description: UnitVmModel.java
Content-Disposition: attachment; filename="UnitVmModel.java"; size=75481;
creation-date="Tue, 12 Mar 2013 08:33:20 GMT";
modification-date="Tue, 12 Mar 2013 08:25:07 GMT"
Content-Transfer-Encoding: base64
cGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy52bXM7CgppbXBv
cnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBq
YXZhLnV0aWwuQ29sbGVjdGlvbnM7CmltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKaW1wb3J0
IGphdmEudXRpbC5EYXRlOwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0
aWwuTGlzdDsKCmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50
aXRpZXMuQm9vdFNlcXVlbmNlOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5i
dXNpbmVzc2VudGl0aWVzLkRpc3BsYXlUeXBlOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3Jl
LmNvbW1vbi5idXNpbmVzc2VudGl0aWVzLlF1b3RhRW5mb3JjZW1lbnRUeXBlRW51bTsKaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5Vc2JQb2xpY3k7
CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMuVkRT
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2VudGl0aWVzLlZE
U0dyb3VwOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2VudGl0
aWVzLlZtT3NUeXBlOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVz
c2VudGl0aWVzLlZtVHlwZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVz
aW5lc3NlbnRpdGllcy5zdG9yYWdlX2RvbWFpbnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNv
cmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMuc3RvcmFnZV9wb29sOwppbXBvcnQgb3JnLm92aXJ0
LmVuZ2luZS5jb3JlLmNvbW1vbi5xdWVyaWVzLlZkY1F1ZXJ5VHlwZTsKaW1wb3J0IG9yZy5vdmly
dC5lbmdpbmUuY29yZS5jb21wYXQuRXZlbnQ7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUu
Y29tcGF0LkV2ZW50QXJnczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21wYXQuR3Vp
ZDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21wYXQuSUV2ZW50TGlzdGVuZXI7Cmlt
cG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tcGF0Lk5HdWlkOwppbXBvcnQgb3JnLm92aXJ0
LmVuZ2luZS5jb3JlLmNvbXBhdC5Qcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3M7CmltcG9ydCBvcmcu
b3ZpcnQuZW5naW5lLmNvcmUuY29tcGF0LlN0cmluZ0hlbHBlcjsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUuY29yZS5jb21wYXQuVmVyc2lvbjsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuZnJv
bnRlbmQuQXN5bmNRdWVyeTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuZnJvbnRlbmQuRnJv
bnRlbmQ7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmZyb250ZW5kLklOZXdBc3luY0NhbGxi
YWNrOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5MaW5xOwppbXBvcnQg
b3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5kYXRhcHJvdmlkZXIuQXN5bmNEYXRhUHJv
dmlkZXI7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy5FbnRp
dHlNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLkxp
c3RNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLk1v
ZGVsOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5tb2RlbHMuU3lzdGVt
VHJlZUl0ZW1Nb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIubW9k
ZWxzLlN5c3RlbVRyZWVJdGVtVHlwZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21t
b253ZWIubW9kZWxzLnN0b3JhZ2UuRGlza3NBbGxvY2F0aW9uTW9kZWw7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy52bXMua2V5X3ZhbHVlLktleVZhbHVlTW9k
ZWw7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLnZhbGlkYXRpb24uQnl0
ZVNpemVWYWxpZGF0aW9uOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi52
YWxpZGF0aW9uLkkxOE5OYW1lVmFsaWRhdGlvbjsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWku
dWljb21tb253ZWIudmFsaWRhdGlvbi5JVmFsaWRhdGlvbjsKaW1wb3J0IG9yZy5vdmlydC5lbmdp
bmUudWkudWljb21tb253ZWIudmFsaWRhdGlvbi5JbnRlZ2VyVmFsaWRhdGlvbjsKaW1wb3J0IG9y
Zy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIudmFsaWRhdGlvbi5MZW5ndGhWYWxpZGF0aW9u
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi52YWxpZGF0aW9uLk5vVHJp
bW1pbmdXaGl0ZXNwYWNlc1ZhbGlkYXRpb247CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVp
Y29tbW9ud2ViLnZhbGlkYXRpb24uTm90RW1wdHlRdW90YVZhbGlkYXRpb247CmltcG9ydCBvcmcu
b3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLnZhbGlkYXRpb24uTm90RW1wdHlWYWxpZGF0aW9u
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi52YWxpZGF0aW9uLlNwZWNp
YWxBc2NpaUkxOE5Pck5vbmVWYWxpZGF0aW9uOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51
aWNvbW1vbndlYi52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7CmltcG9ydCBvcmcub3ZpcnQu
ZW5naW5lLnVpLnVpY29tcGF0LkNvbnN0YW50c01hbmFnZXI7CgpwdWJsaWMgY2xhc3MgVW5pdFZt
TW9kZWwgZXh0ZW5kcyBNb2RlbCB7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0lORE9X
U19WTV9OQU1FX01BWF9MSU1JVCA9IDE1OwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9O
X1dJTkRPV1NfVk1fTkFNRV9NQVhfTElNSVQgPSA2NDsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg
aW50IFZNX1RFTVBMQVRFX05BTUVfTUFYX0xJTUlUID0gNDA7CiAgICBwdWJsaWMgc3RhdGljIGZp
bmFsIGludCBERVNDUklQVElPTl9NQVhfTElNSVQgPSAyNTU7CgogICAgcHJpdmF0ZSBib29sZWFu
IHByaXZhdGVJc05ldzsKCiAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc05ldygpCiAgICB7CiAgICAg
ICAgcmV0dXJuIHByaXZhdGVJc05ldzsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRJc05ldyhi
b29sZWFuIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVJc05ldyA9IHZhbHVlOwogICAgfQoK
ICAgIHByaXZhdGUgYm9vbGVhbiB2bUF0dGFjaGVkVG9Qb29sOwoKICAgIHB1YmxpYyBib29sZWFu
IGlzVm1BdHRhY2hlZFRvUG9vbCgpIHsKICAgICAgICByZXR1cm4gdm1BdHRhY2hlZFRvUG9vbDsK
ICAgIH0KCiAgICAvKioKICAgICAqIE5vdGU6IFdlIGFzc3VtZSB0aGF0IHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBvbmx5IG9uY2UsIG9uIHRoZSBjcmVhdGlvbiBzdGFnZQogICAgICogb2YgdGhlIG1v
ZGVsLiBpZiB0aGlzIGFzc3VtcHRpb24gaXMgY2hhbmdlZCAoaS5lIHRoZSBWTSBjYW4gYXR0YWNo
ZWQvZGV0YWNoZWQKICAgICAqIGZyb20gYSBwb29sIGFmdGVyIHRoZSBtb2RlbCBpcyBjcmVhdGVk
KSwgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIG1vZGlmaWVkCiAgICAgKi8KICAgIHB1YmxpYyB2b2lk
IHNldFZtQXR0YWNoZWRUb1Bvb2woYm9vbGVhbiB2YWx1ZSkgewogICAgICAgIGlmICh2YWx1ZSkg
ewogICAgICAgICAgICAvLyA9PUdlbmVyYWwgVGFiPT0KICAgICAgICAgICAgZ2V0RGF0YUNlbnRl
cigpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgZ2V0Q2x1c3RlcigpLnNldElz
Q2hhbmdhYmxlKCF2YWx1ZSk7CiAgICAgICAgICAgIGdldFF1b3RhKCkuc2V0SXNDaGFuZ2FibGUo
ZmFsc2UpOwogICAgICAgICAgICBnZXREZXNjcmlwdGlvbigpLnNldElzQ2hhbmdhYmxlKGZhbHNl
KTsKCiAgICAgICAgICAgIGdldE51bU9mRGVza3RvcHMoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7
CiAgICAgICAgICAgIGdldFByZXN0YXJ0ZWRWbXMoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7Cgog
ICAgICAgICAgICBnZXRUZW1wbGF0ZSgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAg
ICAgZ2V0TWVtU2l6ZSgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgZ2V0VG90
YWxDUFVDb3JlcygpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgICAgIGdldENvcmVz
UGVyU29ja2V0KCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXROdW1PZlNv
Y2tldHMoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CgogICAgICAgICAgICBnZXRPU1R5cGUoKS5z
ZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgICAgIGdldElzU3RhdGVsZXNzKCkuc2V0SXND
aGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXRJc0RlbGV0ZVByb3RlY3RlZCgpLnNldElz
Q2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgICAgIC8vID09SW5pdGlhbCBydW4gVGFiPT0KICAg
ICAgICAgICAgZ2V0VGltZVpvbmUoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgICAg
IGdldERvbWFpbigpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgICAgIC8vID09Q29u
c29sZSBUYWI9PQogICAgICAgICAgICBnZXREaXNwbGF5UHJvdG9jb2woKS5zZXRJc0NoYW5nYWJs
ZShmYWxzZSk7CiAgICAgICAgICAgIGdldFVzYlBvbGljeSgpLnNldElzQ2hhbmdhYmxlKGZhbHNl
KTsKICAgICAgICAgICAgZ2V0TnVtT2ZNb25pdG9ycygpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsK
ICAgICAgICAgICAgZ2V0SXNTbWFydGNhcmRFbmFibGVkKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2Up
OwogICAgICAgICAgICBnZXRBbGxvd0NvbnNvbGVSZWNvbm5lY3QoKS5zZXRJc0NoYW5nYWJsZShm
YWxzZSk7CgogICAgICAgICAgICAvLyA9PUhvc3QgVGFiPT0KICAgICAgICAgICAgZ2V0SXNBdXRv
QXNzaWduKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXREZWZhdWx0SG9z
dCgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgZ2V0UnVuVk1PblNwZWNpZmlj
SG9zdCgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgZ2V0UnVuVk1PblRydXN0
ZWRIb3N0KCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXRIb3N0Q3B1KCku
c2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXREb250TWlncmF0ZVZNKCkuc2V0
SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICBnZXRDcHVQaW5uaW5nKCkuc2V0SXNDaGFu
Z2FibGUoZmFsc2UpOwoKICAgICAgICAgICAgLy8gPT1SZXNvdXJjZSBBbGxvY2F0aW9uIFRhYj09
CiAgICAgICAgICAgIGdldE1pbkFsbG9jYXRlZE1lbW9yeSgpLnNldElzQ2hhbmdhYmxlKGZhbHNl
KTsKICAgICAgICAgICAgZ2V0UHJvdmlzaW9uaW5nKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwog
ICAgICAgICAgICBnZXRQcm92aXNpb25pbmdUaGluX0lzU2VsZWN0ZWQoKS5zZXRJc0NoYW5nYWJs
ZShmYWxzZSk7CiAgICAgICAgICAgIGdldFByb3Zpc2lvbmluZ0Nsb25lX0lzU2VsZWN0ZWQoKS5z
ZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgICAgIGdldERpc2tzQWxsb2NhdGlvbk1vZGVs
KCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwoKICAgICAgICAgICAgLy8gPT1Cb290IE9wdGlvbnMg
VGFiPT0KICAgICAgICAgICAgZ2V0Rmlyc3RCb290RGV2aWNlKCkuc2V0SXNDaGFuZ2FibGUoZmFs
c2UpOwogICAgICAgICAgICBnZXRTZWNvbmRCb290RGV2aWNlKCkuc2V0SXNDaGFuZ2FibGUoZmFs
c2UpOwogICAgICAgICAgICBnZXRDZEF0dGFjaGVkKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwog
ICAgICAgICAgICBnZXRDZEltYWdlKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAg
ICBnZXRLZXJuZWxfcGF0aCgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgZ2V0
SW5pdHJkX3BhdGgoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgICAgIGdldEtlcm5l
bF9wYXJhbWV0ZXJzKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwoKICAgICAgICAgICAgLy8gPT1D
dXN0b20gUHJvcGVydGllcyBUYWI9PQogICAgICAgICAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzKCku
c2V0SXNDaGFuZ2FibGUoZmFsc2UpOwoKICAgICAgICAgICAgdm1BdHRhY2hlZFRvUG9vbCA9IHRy
dWU7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgVm1UeXBlIHByaXZhdGVWbVR5cGUgPSBn
ZXRWbVR5cGUoKS52YWx1ZXMoKVswXTsKCiAgICBwdWJsaWMgVm1UeXBlIGdldFZtVHlwZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVWbVR5cGU7CiAgICB9CgogICAgcHVibGljIHZvaWQg
c2V0Vm1UeXBlKFZtVHlwZSB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlVm1UeXBlID0gdmFs
dWU7CiAgICB9CgogICAgcHJpdmF0ZSBTdHJpbmcgcHJpdmF0ZUhhc2g7CgogICAgcHVibGljIFN0
cmluZyBnZXRIYXNoKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUhhc2g7CiAgICB9Cgog
ICAgcHVibGljIHZvaWQgc2V0SGFzaChTdHJpbmcgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0
ZUhhc2ggPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIGJvb2xlYW4gaXNCbGFua1RlbXBsYXRl
OwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzQmxhbmtUZW1wbGF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIGlzQmxhbmtUZW1wbGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRJc0JsYW5r
VGVtcGxhdGUoYm9vbGVhbiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNCbGFua1RlbXBsYXRl
ICE9IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgaXNCbGFua1RlbXBsYXRlID0gdmFsdWU7
CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFy
Z3MoIklzQmxhbmtUZW1wbGF0ZSIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAg
ICBwcml2YXRlIGJvb2xlYW4gaXNXaW5kb3dzT1M7CgogICAgcHVibGljIGJvb2xlYW4gZ2V0SXNX
aW5kb3dzT1MoKQogICAgewogICAgICAgIHJldHVybiBpc1dpbmRvd3NPUzsKICAgIH0KCiAgICBw
dWJsaWMgdm9pZCBzZXRJc1dpbmRvd3NPUyhib29sZWFuIHZhbHVlKQogICAgewogICAgICAgIGlm
IChpc1dpbmRvd3NPUyAhPSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIGlzV2luZG93c09T
ID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5n
ZWRFdmVudEFyZ3MoIklzV2luZG93c09TIikpOyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAg
fQoKICAgIHByaXZhdGUgYm9vbGVhbiBpc0xpbnV4X1VuYXNzaWduX1Vua25vd25PUzsKCiAgICBw
dWJsaWMgYm9vbGVhbiBnZXRJc0xpbnV4X1VuYXNzaWduX1Vua25vd25PUygpCiAgICB7CiAgICAg
ICAgcmV0dXJuIGlzTGludXhfVW5hc3NpZ25fVW5rbm93bk9TOwogICAgfQoKICAgIHB1YmxpYyB2
b2lkIHNldElzTGludXhfVW5hc3NpZ25fVW5rbm93bk9TKGJvb2xlYW4gdmFsdWUpCiAgICB7CiAg
ICAgICAgaWYgKGlzTGludXhfVW5hc3NpZ25fVW5rbm93bk9TICE9IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgaXNMaW51eF9VbmFzc2lnbl9Vbmtub3duT1MgPSB2YWx1ZTsKICAgICAgICAg
ICAgT25Qcm9wZXJ0eUNoYW5nZWQobmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncygiSXNMaW51
eF9VbmFzc2lnbl9Vbmtub3duT1MiKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9Cgog
ICAgcHJpdmF0ZSBTdHJpbmcgY3B1Tm90aWZpY2F0aW9uOwoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0
Q1BVTm90aWZpY2F0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gY3B1Tm90aWZpY2F0aW9uOwog
ICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldENQVU5vdGlmaWNhdGlvbihTdHJpbmcgdmFsdWUpCiAg
ICB7CiAgICAgICAgaWYgKCFTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNwdU5vdGlmaWNhdGlv
biwgdmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgY3B1Tm90aWZpY2F0aW9uID0gdmFsdWU7
CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFy
Z3MoIkNQVU5vdGlmaWNhdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAg
ICBwdWJsaWMgYm9vbGVhbiBpc0NQVXNBbW91bnRWYWxpZDsKCiAgICBwdWJsaWMgYm9vbGVhbiBn
ZXRJc0NQVXNBbW91bnRWYWxpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzQ1BVc0Ftb3VudFZh
bGlkOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldElzQ1BVc0Ftb3VudFZhbGlkKGJvb2xlYW4g
dmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzQ1BVc0Ftb3VudFZhbGlkICE9IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgaXNDUFVzQW1vdW50VmFsaWQgPSB2YWx1ZTsKICAgICAgICAgICAg
T25Qcm9wZXJ0eUNoYW5nZWQobmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncygiSXNDUFVzQW1v
dW50VmFsaWQiKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBi
b29sZWFuIGlzR2VuZXJhbFRhYlZhbGlkOwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzR2VuZXJh
bFRhYlZhbGlkKCkKICAgIHsKICAgICAgICByZXR1cm4gaXNHZW5lcmFsVGFiVmFsaWQ7CiAgICB9
CgogICAgcHVibGljIHZvaWQgc2V0SXNHZW5lcmFsVGFiVmFsaWQoYm9vbGVhbiB2YWx1ZSkKICAg
IHsKICAgICAgICBpZiAoaXNHZW5lcmFsVGFiVmFsaWQgIT0gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBpc0dlbmVyYWxUYWJWYWxpZCA9IHZhbHVlOwogICAgICAgICAgICBPblByb3BlcnR5
Q2hhbmdlZChuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKCJJc0dlbmVyYWxUYWJWYWxpZCIp
KTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGJvb2xlYW4gaXNG
aXJzdFJ1blRhYlZhbGlkOwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzRmlyc3RSdW5UYWJWYWxp
ZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzRmlyc3RSdW5UYWJWYWxpZDsKICAgIH0KCiAgICBw
dWJsaWMgdm9pZCBzZXRJc0ZpcnN0UnVuVGFiVmFsaWQoYm9vbGVhbiB2YWx1ZSkKICAgIHsKICAg
ICAgICBpZiAoaXNGaXJzdFJ1blRhYlZhbGlkICE9IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgaXNGaXJzdFJ1blRhYlZhbGlkID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFu
Z2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MoIklzRmlyc3RSdW5UYWJWYWxpZCIpKTsg
Ly8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGJvb2xlYW4gaXNEaXNw
bGF5VGFiVmFsaWQ7CgogICAgcHVibGljIGJvb2xlYW4gZ2V0SXNEaXNwbGF5VGFiVmFsaWQoKQog
ICAgewogICAgICAgIHJldHVybiBpc0Rpc3BsYXlUYWJWYWxpZDsKICAgIH0KCiAgICBwdWJsaWMg
dm9pZCBzZXRJc0Rpc3BsYXlUYWJWYWxpZChib29sZWFuIHZhbHVlKQogICAgewogICAgICAgIGlm
IChpc0Rpc3BsYXlUYWJWYWxpZCAhPSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIGlzRGlz
cGxheVRhYlZhbGlkID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQ
cm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MoIklzRGlzcGxheVRhYlZhbGlkIikpOyAvLyROT04tTkxT
LTEkCiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgYm9vbGVhbiBpc0FsbG9jYXRpb25UYWJW
YWxpZDsKCiAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc0FsbG9jYXRpb25UYWJWYWxpZCgpCiAgICB7
CiAgICAgICAgcmV0dXJuIGlzQWxsb2NhdGlvblRhYlZhbGlkOwogICAgfQoKICAgIHB1YmxpYyB2
b2lkIHNldElzQWxsb2NhdGlvblRhYlZhbGlkKGJvb2xlYW4gdmFsdWUpCiAgICB7CiAgICAgICAg
aWYgKGlzQWxsb2NhdGlvblRhYlZhbGlkICE9IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
aXNBbGxvY2F0aW9uVGFiVmFsaWQgPSB2YWx1ZTsKICAgICAgICAgICAgT25Qcm9wZXJ0eUNoYW5n
ZWQobmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncygiSXNBbGxvY2F0aW9uVGFiVmFsaWQiKSk7
IC8vJE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBib29sZWFuIGlzSG9z
dFRhYlZhbGlkOwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzSG9zdFRhYlZhbGlkKCkKICAgIHsK
ICAgICAgICByZXR1cm4gaXNIb3N0VGFiVmFsaWQ7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0
SXNIb3N0VGFiVmFsaWQoYm9vbGVhbiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNIb3N0VGFi
VmFsaWQgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpc0hvc3RUYWJWYWxpZCA9IHZh
bHVlOwogICAgICAgICAgICBPblByb3BlcnR5Q2hhbmdlZChuZXcgUHJvcGVydHlDaGFuZ2VkRXZl
bnRBcmdzKCJJc0hvc3RUYWJWYWxpZCIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0K
CiAgICBwcml2YXRlIGJvb2xlYW4gaXNCb290U2VxdWVuY2VUYWJWYWxpZDsKCiAgICBwdWJsaWMg
Ym9vbGVhbiBnZXRJc0Jvb3RTZXF1ZW5jZVRhYlZhbGlkKCkKICAgIHsKICAgICAgICByZXR1cm4g
aXNCb290U2VxdWVuY2VUYWJWYWxpZDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRJc0Jvb3RT
ZXF1ZW5jZVRhYlZhbGlkKGJvb2xlYW4gdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzQm9vdFNl
cXVlbmNlVGFiVmFsaWQgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpc0Jvb3RTZXF1
ZW5jZVRhYlZhbGlkID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQ
cm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MoIklzQm9vdFNlcXVlbmNlVGFiVmFsaWQiKSk7IC8vJE5P
Ti1OTFMtMSQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBib29sZWFuIGlzQ3VzdG9tUHJv
cGVydGllc1RhYlZhbGlkOwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzQ3VzdG9tUHJvcGVydGll
c1RhYlZhbGlkKCkKICAgIHsKICAgICAgICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0aWVzVGFiVmFs
aWQ7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0SXNDdXN0b21Qcm9wZXJ0aWVzVGFiVmFsaWQo
Ym9vbGVhbiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0aWVzVGFiVmFs
aWQgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpc0N1c3RvbVByb3BlcnRpZXNUYWJW
YWxpZCA9IHZhbHVlOwogICAgICAgICAgICBPblByb3BlcnR5Q2hhbmdlZChuZXcgUHJvcGVydHlD
aGFuZ2VkRXZlbnRBcmdzKCJJc0N1c3RvbVByb3BlcnRpZXNUYWJWYWxpZCIpKTsgLy8kTk9OLU5M
Uy0xJAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29s
TGlzdE1vZGVsIHByaXZhdGVEYXRhQ2VudGVyOwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0RGF0
YUNlbnRlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVEYXRhQ2VudGVyOwogICAgfQoK
ICAgIHByaXZhdGUgdm9pZCBzZXREYXRhQ2VudGVyKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlz
dE1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVEYXRhQ2VudGVyID0gdmFsdWU7CiAg
ICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCBwcml2YXRl
U3RvcmFnZURvbWFpbjsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldFN0b3JhZ2VEb21haW4oKQog
ICAgewogICAgICAgIHJldHVybiBwcml2YXRlU3RvcmFnZURvbWFpbjsKICAgIH0KCiAgICBwcml2
YXRlIHZvaWQgc2V0U3RvcmFnZURvbWFpbihOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2Rl
bCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlU3RvcmFnZURvbWFpbiA9IHZhbHVlOwogICAg
fQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwgcHJpdmF0ZVRl
bXBsYXRlOwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0VGVtcGxhdGUoKQogICAgewogICAgICAg
IHJldHVybiBwcml2YXRlVGVtcGxhdGU7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldFRlbXBs
YXRlKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHZhbHVlKQogICAgewogICAgICAg
IHByaXZhdGVUZW1wbGF0ZSA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgRW50aXR5TW9kZWwg
cHJpdmF0ZU5hbWU7CgogICAgcHVibGljIEVudGl0eU1vZGVsIGdldE5hbWUoKQogICAgewogICAg
ICAgIHJldHVybiBwcml2YXRlTmFtZTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0TmFtZShF
bnRpdHlNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlTmFtZSA9IHZhbHVlOwogICAg
fQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwgcHJpdmF0ZU9T
VHlwZTsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldE9TVHlwZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIHByaXZhdGVPU1R5cGU7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldE9TVHlwZShOb3RD
aGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRl
T1NUeXBlID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9v
bExpc3RNb2RlbCBwcml2YXRlTnVtT2ZNb25pdG9yczsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdl
dE51bU9mTW9uaXRvcnMoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlTnVtT2ZNb25pdG9y
czsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0TnVtT2ZNb25pdG9ycyhOb3RDaGFuZ2FibGVG
b3JWbUluUG9vbExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlTnVtT2ZNb25p
dG9ycyA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xF
bnRpdHlNb2RlbCBwcml2YXRlQWxsb3dDb25zb2xlUmVjb25uZWN0OwoKICAgIHB1YmxpYyBFbnRp
dHlNb2RlbCBnZXRBbGxvd0NvbnNvbGVSZWNvbm5lY3QoKQogICAgewogICAgICAgIHJldHVybiBw
cml2YXRlQWxsb3dDb25zb2xlUmVjb25uZWN0OwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRB
bGxvd0NvbnNvbGVSZWNvbm5lY3QoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCB2
YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlQWxsb3dDb25zb2xlUmVjb25uZWN0ID0gdmFsdWU7
CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHBy
aXZhdGVEZXNjcmlwdGlvbjsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0RGVzY3JpcHRpb24o
KQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlRGVzY3JpcHRpb247CiAgICB9CgogICAgcHJp
dmF0ZSB2b2lkIHNldERlc2NyaXB0aW9uKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9k
ZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZURlc2NyaXB0aW9uID0gdmFsdWU7CiAgICB9
CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCBwcml2YXRlRG9t
YWluOwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0RG9tYWluKCkKICAgIHsKICAgICAgICByZXR1
cm4gcHJpdmF0ZURvbWFpbjsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0RG9tYWluKE5vdENo
YW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVE
b21haW4gPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29s
RW50aXR5TW9kZWwgcHJpdmF0ZU1lbVNpemU7CgogICAgcHVibGljIEVudGl0eU1vZGVsIGdldE1l
bVNpemUoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlTWVtU2l6ZTsKICAgIH0KCiAgICBw
cml2YXRlIHZvaWQgc2V0TWVtU2l6ZShOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVs
IHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVNZW1TaXplID0gdmFsdWU7CiAgICB9CgogICAg
cHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHByaXZhdGVNaW5BbGxv
Y2F0ZWRNZW1vcnk7CgogICAgcHVibGljIEVudGl0eU1vZGVsIGdldE1pbkFsbG9jYXRlZE1lbW9y
eSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVNaW5BbGxvY2F0ZWRNZW1vcnk7CiAgICB9
CgogICAgcHJpdmF0ZSB2b2lkIHNldE1pbkFsbG9jYXRlZE1lbW9yeShOb3RDaGFuZ2FibGVGb3JW
bUluUG9vbEVudGl0eU1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVNaW5BbGxvY2F0
ZWRNZW1vcnkgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Q
b29sTGlzdE1vZGVsIHByaXZhdGVRdW90YTsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldFF1b3Rh
KCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZVF1b3RhOwogICAgfQoKICAgIHByaXZhdGUg
dm9pZCBzZXRRdW90YShOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCB2YWx1ZSkKICAg
IHsKICAgICAgICBwcml2YXRlUXVvdGEgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENo
YW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHByaXZhdGVDbHVzdGVyOwoKICAgIHB1YmxpYyBM
aXN0TW9kZWwgZ2V0Q2x1c3RlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVDbHVzdGVy
OwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRDbHVzdGVyKE5vdENoYW5nYWJsZUZvclZtSW5Q
b29sTGlzdE1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVDbHVzdGVyID0gdmFsdWU7
CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCBwcml2
YXRlVXNiUG9saWN5OwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0VXNiUG9saWN5KCkKICAgIHsK
ICAgICAgICByZXR1cm4gcHJpdmF0ZVVzYlBvbGljeTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQg
c2V0VXNiUG9saWN5KE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHZhbHVlKQogICAg
ewogICAgICAgIHByaXZhdGVVc2JQb2xpY3kgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5v
dENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHByaXZhdGVUaW1lWm9uZTsKCiAgICBwdWJs
aWMgTGlzdE1vZGVsIGdldFRpbWVab25lKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZVRp
bWVab25lOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRUaW1lWm9uZShOb3RDaGFuZ2FibGVG
b3JWbUluUG9vbExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlVGltZVpvbmUg
PSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1v
ZGVsIHByaXZhdGVOdW1PZlNvY2tldHM7CgogICAgcHVibGljIExpc3RNb2RlbCBnZXROdW1PZlNv
Y2tldHMoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlTnVtT2ZTb2NrZXRzOwogICAgfQoK
ICAgIHByaXZhdGUgdm9pZCBzZXROdW1PZlNvY2tldHMoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xM
aXN0TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZU51bU9mU29ja2V0cyA9IHZhbHVl
OwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCBw
cml2YXRlVG90YWxDUFVDb3JlczsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0VG90YWxDUFVD
b3JlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVUb3RhbENQVUNvcmVzOwogICAgfQoK
ICAgIHByaXZhdGUgdm9pZCBzZXRUb3RhbENQVUNvcmVzKE5vdENoYW5nYWJsZUZvclZtSW5Qb29s
RW50aXR5TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZVRvdGFsQ1BVQ29yZXMgPSB2
YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVs
IHByaXZhdGVDb3Jlc1BlclNvY2tldDsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldENvcmVzUGVy
U29ja2V0KCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUNvcmVzUGVyU29ja2V0OwogICAg
fQoKICAgIHByaXZhdGUgdm9pZCBzZXRDb3Jlc1BlclNvY2tldChOb3RDaGFuZ2FibGVGb3JWbUlu
UG9vbExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlQ29yZXNQZXJTb2NrZXQg
PSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1v
ZGVsIHByaXZhdGVEZWZhdWx0SG9zdDsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldERlZmF1bHRI
b3N0KCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZURlZmF1bHRIb3N0OwogICAgfQoKICAg
IHByaXZhdGUgdm9pZCBzZXREZWZhdWx0SG9zdChOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RN
b2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlRGVmYXVsdEhvc3QgPSB2YWx1ZTsKICAg
IH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgcHJpdmF0
ZWlzU21hcnRjYXJkRW5hYmxlZDsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0SXNTbWFydGNh
cmRFbmFibGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZWlzU21hcnRjYXJkRW5hYmxl
ZDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0SXNTbWFydGNhcmRFbmFibGVkKE5vdENoYW5n
YWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZWlz
U21hcnRjYXJkRW5hYmxlZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxl
Rm9yVm1JblBvb2xFbnRpdHlNb2RlbCBwcml2YXRlSXNTdGF0ZWxlc3M7CgogICAgcHVibGljIEVu
dGl0eU1vZGVsIGdldElzU3RhdGVsZXNzKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUlz
U3RhdGVsZXNzOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRJc1N0YXRlbGVzcyhOb3RDaGFu
Z2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVJ
c1N0YXRlbGVzcyA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xFbnRpdHlNb2RlbCBwcml2YXRlSXNEZWxldGVQcm90ZWN0ZWQ7CgogICAgcHVibGljIEVu
dGl0eU1vZGVsIGdldElzRGVsZXRlUHJvdGVjdGVkKCkgewogICAgICAgIHJldHVybiBwcml2YXRl
SXNEZWxldGVQcm90ZWN0ZWQ7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0SXNEZWxldGVQcm90
ZWN0ZWQoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCBkZWxldGVQcm90ZWN0ZWQp
IHsKICAgICAgICB0aGlzLnByaXZhdGVJc0RlbGV0ZVByb3RlY3RlZCA9IGRlbGV0ZVByb3RlY3Rl
ZDsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHBy
aXZhdGVEaXNwbGF5UHJvdG9jb2w7CgogICAgcHVibGljIExpc3RNb2RlbCBnZXREaXNwbGF5UHJv
dG9jb2woKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlRGlzcGxheVByb3RvY29sOwogICAg
fQoKICAgIHByaXZhdGUgdm9pZCBzZXREaXNwbGF5UHJvdG9jb2woTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xMaXN0TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZURpc3BsYXlQcm90b2Nv
bCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRp
dHlNb2RlbCBwcml2YXRlUHJvdmlzaW9uaW5nOwoKICAgIHB1YmxpYyBFbnRpdHlNb2RlbCBnZXRQ
cm92aXNpb25pbmcoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlUHJvdmlzaW9uaW5nOwog
ICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRQcm92aXNpb25pbmcoTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xFbnRpdHlNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlUHJvdmlzaW9uaW5n
ID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0
eU1vZGVsIHByaXZhdGVQcm92aXNpb25pbmdUaGluX0lzU2VsZWN0ZWQ7CgogICAgcHVibGljIEVu
dGl0eU1vZGVsIGdldFByb3Zpc2lvbmluZ1RoaW5fSXNTZWxlY3RlZCgpCiAgICB7CiAgICAgICAg
cmV0dXJuIHByaXZhdGVQcm92aXNpb25pbmdUaGluX0lzU2VsZWN0ZWQ7CiAgICB9CgogICAgcHVi
bGljIHZvaWQgc2V0UHJvdmlzaW9uaW5nVGhpbl9Jc1NlbGVjdGVkKE5vdENoYW5nYWJsZUZvclZt
SW5Qb29sRW50aXR5TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZVByb3Zpc2lvbmlu
Z1RoaW5fSXNTZWxlY3RlZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxl
Rm9yVm1JblBvb2xFbnRpdHlNb2RlbCBwcml2YXRlUHJvdmlzaW9uaW5nQ2xvbmVfSXNTZWxlY3Rl
ZDsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0UHJvdmlzaW9uaW5nQ2xvbmVfSXNTZWxlY3Rl
ZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVQcm92aXNpb25pbmdDbG9uZV9Jc1NlbGVj
dGVkOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldFByb3Zpc2lvbmluZ0Nsb25lX0lzU2VsZWN0
ZWQoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAg
ICBwcml2YXRlUHJvdmlzaW9uaW5nQ2xvbmVfSXNTZWxlY3RlZCA9IHZhbHVlOwogICAgfQoKICAg
IHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwgcHJpdmF0ZVByaW9yaXR5
OwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0UHJpb3JpdHkoKQogICAgewogICAgICAgIHJldHVy
biBwcml2YXRlUHJpb3JpdHk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldFByaW9yaXR5KE5v
dENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZh
dGVQcmlvcml0eSA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xFbnRpdHlNb2RlbCBwcml2YXRlSXNIaWdobHlBdmFpbGFibGU7CgogICAgcHVibGljIEVu
dGl0eU1vZGVsIGdldElzSGlnaGx5QXZhaWxhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJp
dmF0ZUlzSGlnaGx5QXZhaWxhYmxlOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRJc0hpZ2hs
eUF2YWlsYWJsZShOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHZhbHVlKQogICAg
ewogICAgICAgIHByaXZhdGVJc0hpZ2hseUF2YWlsYWJsZSA9IHZhbHVlOwogICAgfQoKICAgIHBy
aXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwgcHJpdmF0ZUZpcnN0Qm9vdERl
dmljZTsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldEZpcnN0Qm9vdERldmljZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIHByaXZhdGVGaXJzdEJvb3REZXZpY2U7CiAgICB9CgogICAgcHJpdmF0ZSB2
b2lkIHNldEZpcnN0Qm9vdERldmljZShOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCB2
YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlRmlyc3RCb290RGV2aWNlID0gdmFsdWU7CiAgICB9
CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCBwcml2YXRlU2Vj
b25kQm9vdERldmljZTsKCiAgICBwdWJsaWMgTGlzdE1vZGVsIGdldFNlY29uZEJvb3REZXZpY2Uo
KQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlU2Vjb25kQm9vdERldmljZTsKICAgIH0KCiAg
ICBwcml2YXRlIHZvaWQgc2V0U2Vjb25kQm9vdERldmljZShOb3RDaGFuZ2FibGVGb3JWbUluUG9v
bExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlU2Vjb25kQm9vdERldmljZSA9
IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9k
ZWwgcHJpdmF0ZUNkSW1hZ2U7CgogICAgcHVibGljIExpc3RNb2RlbCBnZXRDZEltYWdlKCkKICAg
IHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUNkSW1hZ2U7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldENkSW1hZ2UoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwgdmFsdWUpCiAgICB7
CiAgICAgICAgcHJpdmF0ZUNkSW1hZ2UgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENo
YW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgY2RBdHRhY2hlZDsKCiAgICBwdWJsaWMgRW50
aXR5TW9kZWwgZ2V0Q2RBdHRhY2hlZCgpIHsKICAgICAgICByZXR1cm4gY2RBdHRhY2hlZDsKICAg
IH0KCiAgICBwdWJsaWMgdm9pZCBzZXRDZEF0dGFjaGVkKE5vdENoYW5nYWJsZUZvclZtSW5Qb29s
RW50aXR5TW9kZWwgdmFsdWUpIHsKICAgICAgICBjZEF0dGFjaGVkID0gdmFsdWU7CiAgICB9Cgog
ICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHByaXZhdGVJbml0
cmRfcGF0aDsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0SW5pdHJkX3BhdGgoKQogICAgewog
ICAgICAgIHJldHVybiBwcml2YXRlSW5pdHJkX3BhdGg7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldEluaXRyZF9wYXRoKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgdmFsdWUp
CiAgICB7CiAgICAgICAgcHJpdmF0ZUluaXRyZF9wYXRoID0gdmFsdWU7CiAgICB9CgogICAgcHJp
dmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHByaXZhdGVLZXJuZWxfcGF0
aDsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0S2VybmVsX3BhdGgoKQogICAgewogICAgICAg
IHJldHVybiBwcml2YXRlS2VybmVsX3BhdGg7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldEtl
cm5lbF9wYXRoKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgdmFsdWUpCiAgICB7
CiAgICAgICAgcHJpdmF0ZUtlcm5lbF9wYXRoID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBO
b3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHByaXZhdGVLZXJuZWxfcGFyYW1ldGVy
czsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0S2VybmVsX3BhcmFtZXRlcnMoKQogICAgewog
ICAgICAgIHJldHVybiBwcml2YXRlS2VybmVsX3BhcmFtZXRlcnM7CiAgICB9CgogICAgcHJpdmF0
ZSB2b2lkIHNldEtlcm5lbF9wYXJhbWV0ZXJzKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5
TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZUtlcm5lbF9wYXJhbWV0ZXJzID0gdmFs
dWU7CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVs
IHByaXZhdGVDdXN0b21Qcm9wZXJ0aWVzOwoKICAgIHB1YmxpYyBFbnRpdHlNb2RlbCBnZXRDdXN0
b21Qcm9wZXJ0aWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUN1c3RvbVByb3BlcnRp
ZXM7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldEN1c3RvbVByb3BlcnRpZXMoTm90Q2hhbmdh
YmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2YXRlQ3Vz
dG9tUHJvcGVydGllcyA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9y
Vm1JblBvb2xLZXlWYWx1ZU1vZGVsIGN1c3RvbVByb3BlcnR5U2hlZXQ7CgogICAgcHVibGljIEtl
eVZhbHVlTW9kZWwgZ2V0Q3VzdG9tUHJvcGVydHlTaGVldCgpIHsKICAgICAgICByZXR1cm4gY3Vz
dG9tUHJvcGVydHlTaGVldDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0
eVNoZWV0KE5vdENoYW5nYWJsZUZvclZtSW5Qb29sS2V5VmFsdWVNb2RlbCBjdXN0b21Qcm9wZXJ0
eVNoZWV0KSB7CiAgICAgICAgdGhpcy5jdXN0b21Qcm9wZXJ0eVNoZWV0ID0gY3VzdG9tUHJvcGVy
dHlTaGVldDsKICAgIH0KCiAgICBwcml2YXRlIEhhc2hNYXA8VmVyc2lvbiwgQXJyYXlMaXN0PFN0
cmluZz4+IHByaXZhdGVDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3Q7CgogICAgcHVibGljIEhhc2hN
YXA8VmVyc2lvbiwgQXJyYXlMaXN0PFN0cmluZz4+IGdldEN1c3RvbVByb3BlcnRpZXNLZXlzTGlz
dCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3Q7
CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0Q3VzdG9tUHJvcGVydGllc0tleXNMaXN0KEhhc2hN
YXA8VmVyc2lvbiwgQXJyYXlMaXN0PFN0cmluZz4+IHZhbHVlKQogICAgewogICAgICAgIHByaXZh
dGVDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3QgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIE5v
dENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgcHJpdmF0ZUlzQXV0b0Fzc2lnbjsKCiAg
ICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0SXNBdXRvQXNzaWduKCkKICAgIHsKICAgICAgICByZXR1
cm4gcHJpdmF0ZUlzQXV0b0Fzc2lnbjsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRJc0F1dG9B
c3NpZ24oTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCB2YWx1ZSkKICAgIHsKICAg
ICAgICBwcml2YXRlSXNBdXRvQXNzaWduID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBOb3RD
aGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHByaXZhdGVSdW5WTU9uU3BlY2lmaWNIb3N0
OwoKICAgIHB1YmxpYyBFbnRpdHlNb2RlbCBnZXRSdW5WTU9uU3BlY2lmaWNIb3N0KCkKICAgIHsK
ICAgICAgICByZXR1cm4gcHJpdmF0ZVJ1blZNT25TcGVjaWZpY0hvc3Q7CiAgICB9CgogICAgcHVi
bGljIHZvaWQgc2V0UnVuVk1PblNwZWNpZmljSG9zdChOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVu
dGl0eU1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVSdW5WTU9uU3BlY2lmaWNIb3N0
ID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0
eU1vZGVsIHByaXZhdGVSdW5WTU9uVHJ1c3RlZEhvc3Q7CgogICAgcHVibGljIEVudGl0eU1vZGVs
IGdldFJ1blZNT25UcnVzdGVkSG9zdCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVSdW5W
TU9uVHJ1c3RlZEhvc3Q7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0UnVuVk1PblRydXN0ZWRI
b3N0KE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgdmFsdWUpCiAgICB7CiAgICAg
ICAgcHJpdmF0ZVJ1blZNT25UcnVzdGVkSG9zdCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUg
Tm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCBob3N0Q3B1OwoKICAgIHB1YmxpYyBF
bnRpdHlNb2RlbCBnZXRIb3N0Q3B1KCkgewogICAgICAgIHJldHVybiBob3N0Q3B1OwogICAgfQoK
ICAgIHB1YmxpYyB2b2lkIHNldEhvc3RDcHUoTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlN
b2RlbCBob3N0Q3B1KSB7CiAgICAgICAgdGhpcy5ob3N0Q3B1ID0gaG9zdENwdTsKICAgIH0KCiAg
ICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgcHJpdmF0ZURvbnRN
aWdyYXRlVk07CgogICAgcHVibGljIEVudGl0eU1vZGVsIGdldERvbnRNaWdyYXRlVk0oKQogICAg
ewogICAgICAgIHJldHVybiBwcml2YXRlRG9udE1pZ3JhdGVWTTsKICAgIH0KCiAgICBwdWJsaWMg
dm9pZCBzZXREb250TWlncmF0ZVZNKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwg
dmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZURvbnRNaWdyYXRlVk0gPSB2YWx1ZTsKICAgIH0K
CiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgcHJpdmF0ZUlz
VGVtcGxhdGVQdWJsaWM7CgogICAgcHVibGljIEVudGl0eU1vZGVsIGdldElzVGVtcGxhdGVQdWJs
aWMoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlSXNUZW1wbGF0ZVB1YmxpYzsKICAgIH0K
CiAgICBwcml2YXRlIHZvaWQgc2V0SXNUZW1wbGF0ZVB1YmxpYyhOb3RDaGFuZ2FibGVGb3JWbUlu
UG9vbEVudGl0eU1vZGVsIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVJc1RlbXBsYXRlUHVi
bGljID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBib29sZWFuIHByaXZhdGVJc0ZpcnN0UnVu
OwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzRmlyc3RSdW4oKQogICAgewogICAgICAgIHJldHVy
biBwcml2YXRlSXNGaXJzdFJ1bjsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRJc0ZpcnN0UnVu
KGJvb2xlYW4gdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZUlzRmlyc3RSdW4gPSB2YWx1ZTsK
ICAgIH0KCiAgICBwcml2YXRlIExpc3Q8RGlza01vZGVsPiBkaXNrczsKCiAgICBwdWJsaWMgTGlz
dDxEaXNrTW9kZWw+IGdldERpc2tzKCkKICAgIHsKICAgICAgICByZXR1cm4gZGlza3M7CiAgICB9
CgogICAgcHVibGljIHZvaWQgc2V0RGlza3MoTGlzdDxEaXNrTW9kZWw+IHZhbHVlKQogICAgewog
ICAgICAgIGlmIChkaXNrcyAhPSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIGRpc2tzID0g
dmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRF
dmVudEFyZ3MoIkRpc2tzIikpOyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAgfQoKICAgIHBy
aXZhdGUgRGlza3NBbGxvY2F0aW9uTW9kZWwgZGlza3NBbGxvY2F0aW9uTW9kZWw7CgogICAgcHVi
bGljIERpc2tzQWxsb2NhdGlvbk1vZGVsIGdldERpc2tzQWxsb2NhdGlvbk1vZGVsKCkKICAgIHsK
ICAgICAgICByZXR1cm4gZGlza3NBbGxvY2F0aW9uTW9kZWw7CiAgICB9CgogICAgcHJpdmF0ZSB2
b2lkIHNldERpc2tzQWxsb2NhdGlvbk1vZGVsKERpc2tzQWxsb2NhdGlvbk1vZGVsIHZhbHVlKQog
ICAgewogICAgICAgIGRpc2tzQWxsb2NhdGlvbk1vZGVsID0gdmFsdWU7CiAgICB9CgogICAgcHJp
dmF0ZSBib29sZWFuIGlzRGlza3NBdmFpbGFibGU7CgogICAgcHVibGljIGJvb2xlYW4gZ2V0SXNE
aXNrc0F2YWlsYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzRGlza3NBdmFpbGFibGU7CiAg
ICB9CgogICAgcHVibGljIHZvaWQgc2V0SXNEaXNrc0F2YWlsYWJsZShib29sZWFuIHZhbHVlKQog
ICAgewogICAgICAgIGlmIChpc0Rpc2tzQXZhaWxhYmxlICE9IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgaXNEaXNrc0F2YWlsYWJsZSA9IHZhbHVlOwogICAgICAgICAgICBPblByb3BlcnR5
Q2hhbmdlZChuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKCJJc0Rpc2tzQXZhaWxhYmxlIikp
OyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgYm9vbGVhbiBpc0hv
c3RBdmFpbGFibGU7CgogICAgcHVibGljIGJvb2xlYW4gZ2V0SXNIb3N0QXZhaWxhYmxlKCkKICAg
IHsKICAgICAgICByZXR1cm4gaXNIb3N0QXZhaWxhYmxlOwogICAgfQoKICAgIHB1YmxpYyB2b2lk
IHNldElzSG9zdEF2YWlsYWJsZShib29sZWFuIHZhbHVlKQogICAgewogICAgICAgIGlmIChpc0hv
c3RBdmFpbGFibGUgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpc0hvc3RBdmFpbGFi
bGUgPSB2YWx1ZTsKICAgICAgICAgICAgT25Qcm9wZXJ0eUNoYW5nZWQobmV3IFByb3BlcnR5Q2hh
bmdlZEV2ZW50QXJncygiSXNIb3N0QXZhaWxhYmxlIikpOyAvLyROT04tTkxTLTEkCiAgICAgICAg
fQogICAgfQoKICAgIHByaXZhdGUgQm9vbGVhbiBpc0RhdGFjZW50ZXJBdmFpbGFibGU7CgogICAg
cHVibGljIEJvb2xlYW4gZ2V0SXNEYXRhY2VudGVyQXZhaWxhYmxlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gaXNEYXRhY2VudGVyQXZhaWxhYmxlOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldElz
RGF0YWNlbnRlckF2YWlsYWJsZShCb29sZWFuIHZhbHVlKQogICAgewogICAgICAgIGlmIChpc0Rh
dGFjZW50ZXJBdmFpbGFibGUgPT0gbnVsbCAmJiB2YWx1ZSA9PSBudWxsKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoaXNEYXRhY2VudGVyQXZhaWxh
YmxlID09IG51bGwgfHwgIWlzRGF0YWNlbnRlckF2YWlsYWJsZS5lcXVhbHModmFsdWUpKQogICAg
ICAgIHsKICAgICAgICAgICAgaXNEYXRhY2VudGVyQXZhaWxhYmxlID0gdmFsdWU7CiAgICAgICAg
ICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MoIklzRGF0
YWNlbnRlckF2YWlsYWJsZSIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAgICBw
cml2YXRlIGZpbmFsIFZtTW9kZWxCZWhhdmlvckJhc2UgYmVoYXZpb3I7CgogICAgcHVibGljIFZt
TW9kZWxCZWhhdmlvckJhc2UgZ2V0QmVoYXZpb3IoKSB7CiAgICAgICAgcmV0dXJuIGJlaGF2aW9y
OwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRCZWhhdmlvcihWbU1vZGVsQmVoYXZpb3JCYXNl
IHZhbHVlKSB7CiAgICB9CgogICAgcHJpdmF0ZSBpbnQgX21pbk1lbVNpemUgPSAxOwoKICAgIHB1
YmxpYyBpbnQgZ2V0X01pbk1lbVNpemUoKQogICAgewogICAgICAgIHJldHVybiBfbWluTWVtU2l6
ZTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRfTWluTWVtU2l6ZShpbnQgdmFsdWUpCiAgICB7
CiAgICAgICAgX21pbk1lbVNpemUgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIGludCBfbWF4
TWVtU2l6ZTMyID0gMjA0ODA7CgogICAgcHVibGljIGludCBnZXRfTWF4TWVtU2l6ZTMyKCkKICAg
IHsKICAgICAgICByZXR1cm4gX21heE1lbVNpemUzMjsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBz
ZXRfTWF4TWVtU2l6ZTMyKGludCB2YWx1ZSkKICAgIHsKICAgICAgICBfbWF4TWVtU2l6ZTMyID0g
dmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBpbnQgX21heE1lbVNpemU2NCA9IDI2MjE0NDsKCiAg
ICBwdWJsaWMgaW50IGdldF9NYXhNZW1TaXplNjQoKQogICAgewogICAgICAgIHJldHVybiBfbWF4
TWVtU2l6ZTY0OwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldF9NYXhNZW1TaXplNjQoaW50IHZh
bHVlKQogICAgewogICAgICAgIF9tYXhNZW1TaXplNjQgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2
YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgY3B1UGlubmluZzsKCiAgICBw
dWJsaWMgRW50aXR5TW9kZWwgZ2V0Q3B1UGlubmluZygpIHsKICAgICAgICByZXR1cm4gY3B1UGlu
bmluZzsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRDcHVQaW5uaW5nKE5vdENoYW5nYWJsZUZv
clZtSW5Qb29sRW50aXR5TW9kZWwgY3B1UGlubmluZykgewogICAgICAgIHRoaXMuY3B1UGlubmlu
ZyA9IGNwdVBpbm5pbmc7CiAgICB9CgogICAgcHVibGljIFVuaXRWbU1vZGVsKFZtTW9kZWxCZWhh
dmlvckJhc2UgYmVoYXZpb3IpCiAgICB7CiAgICAgICAgRnJvbnRlbmQuZ2V0UXVlcnlTdGFydGVk
RXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKICAgICAgICBGcm9udGVuZC5nZXRRdWVyeUNvbXBs
ZXRlRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAgICAgRnJvbnRlbmQuU3Vic2NyaWJl
KG5ldyBWZGNRdWVyeVR5cGVbXSB7IFZkY1F1ZXJ5VHlwZS5HZXRTdG9yYWdlRG9tYWluc0J5U3Rv
cmFnZVBvb2xJZCwKICAgICAgICAgICAgICAgIFZkY1F1ZXJ5VHlwZS5HZXRBbGxJc29JbWFnZXNM
aXN0QnlTdG9yYWdlUG9vbElkLCBWZGNRdWVyeVR5cGUuR2V0VGltZVpvbmVzLAogICAgICAgICAg
ICAgICAgVmRjUXVlcnlUeXBlLkdldERlZnVhbHRUaW1lWm9uZSwKICAgICAgICAgICAgICAgIFZk
Y1F1ZXJ5VHlwZS5HZXREb21haW5MaXN0LCBWZGNRdWVyeVR5cGUuR2V0Q29uZmlndXJhdGlvblZh
bHVlLAogICAgICAgICAgICAgICAgVmRjUXVlcnlUeXBlLkdldFZkc0dyb3Vwc0J5U3RvcmFnZVBv
b2xJZCwgVmRjUXVlcnlUeXBlLkdldFZtVGVtcGxhdGVzQnlTdG9yYWdlUG9vbElkLAogICAgICAg
ICAgICAgICAgVmRjUXVlcnlUeXBlLkdldFZtVGVtcGxhdGVzRGlza3MsIFZkY1F1ZXJ5VHlwZS5H
ZXRTdG9yYWdlRG9tYWluc0J5Vm1UZW1wbGF0ZUlkLAogICAgICAgICAgICAgICAgVmRjUXVlcnlU
eXBlLkdldFN0b3JhZ2VEb21haW5CeUlkLCBWZGNRdWVyeVR5cGUuR2V0RGF0YUNlbnRlcnNXaXRo
UGVybWl0dGVkQWN0aW9uT25DbHVzdGVycywKICAgICAgICAgICAgICAgIFZkY1F1ZXJ5VHlwZS5H
ZXRDbHVzdGVyc1dpdGhQZXJtaXR0ZWRBY3Rpb24sIFZkY1F1ZXJ5VHlwZS5HZXRWbVRlbXBsYXRl
c1dpdGhQZXJtaXR0ZWRBY3Rpb24sCiAgICAgICAgICAgICAgICBWZGNRdWVyeVR5cGUuR2V0VmRz
R3JvdXBCeUlkLCBWZGNRdWVyeVR5cGUuR2V0U3RvcmFnZVBvb2xCeUlkLCBWZGNRdWVyeVR5cGUu
R2V0QWxsRGlza3NCeVZtSWQsCiAgICAgICAgICAgICAgICBWZGNRdWVyeVR5cGUuR2V0Vm1UZW1w
bGF0ZSwgVmRjUXVlcnlUeXBlLkdldFZtQ29uZmlndXJhdGlvbkJ5U25hcHNob3QsCiAgICAgICAg
ICAgICAgICBWZGNRdWVyeVR5cGUuR2V0UGVybWl0dGVkU3RvcmFnZURvbWFpbnNCeVN0b3JhZ2VQ
b29sSWQsIFZkY1F1ZXJ5VHlwZS5TZWFyY2ggfSk7CgogICAgICAgIHRoaXMuYmVoYXZpb3IgPSBi
ZWhhdmlvcjsKICAgICAgICB0aGlzLmJlaGF2aW9yLnNldE1vZGVsKHRoaXMpOwoKICAgICAgICBz
ZXRTdG9yYWdlRG9tYWluKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgpKTsK
ICAgICAgICBzZXROYW1lKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkp
OwogICAgICAgIHNldE51bU9mTW9uaXRvcnMobmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlz
dE1vZGVsKCkpOwogICAgICAgIHNldEFsbG93Q29uc29sZVJlY29ubmVjdChuZXcgTm90Q2hhbmdh
YmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBzZXREZXNjcmlwdGlvbihuZXcg
Tm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBzZXREb21haW4o
bmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsKCkpOwogICAgICAgIHNldE1pbkFs
bG9jYXRlZE1lbW9yeShuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsK
ICAgICAgICBzZXRVc2JQb2xpY3kobmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVs
KCkpOwogICAgICAgIHNldElzU3RhdGVsZXNzKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVu
dGl0eU1vZGVsKCkpOwogICAgICAgIHNldElzU21hcnRjYXJkRW5hYmxlZChuZXcgTm90Q2hhbmdh
YmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBzZXRJc0RlbGV0ZVByb3RlY3Rl
ZChuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKCiAgICAgICAgc2V0
Q2RJbWFnZShuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwoKSk7CiAgICAgICAg
Z2V0Q2RJbWFnZSgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgc2V0Q2RBdHRhY2hl
ZChuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBnZXRD
ZEF0dGFjaGVkKCkuZ2V0RW50aXR5Q2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIobmV3IElFdmVu
dExpc3RlbmVyKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZv
aWQgZXZlbnRSYWlzZWQoRXZlbnQgZXYsIE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKSB7
CgogICAgICAgICAgICAgICAgZ2V0Q2RJbWFnZSgpLnNldElzQ2hhbmdhYmxlKChCb29sZWFuKSBn
ZXRDZEF0dGFjaGVkKCkuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAg
ICAgICAgZ2V0Q2RBdHRhY2hlZCgpLnNldEVudGl0eShmYWxzZSk7CgogICAgICAgIHNldElzSGln
aGx5QXZhaWxhYmxlKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwog
ICAgICAgIHNldERvbnRNaWdyYXRlVk0obmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5
TW9kZWwoKSk7CiAgICAgICAgc2V0SXNUZW1wbGF0ZVB1YmxpYyhuZXcgTm90Q2hhbmdhYmxlRm9y
Vm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBzZXRLZXJuZWxfcGFyYW1ldGVycyhuZXcg
Tm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBzZXRLZXJuZWxf
cGF0aChuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBz
ZXRJbml0cmRfcGF0aChuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsK
ICAgICAgICBzZXRDdXN0b21Qcm9wZXJ0aWVzKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVu
dGl0eU1vZGVsKCkpOwogICAgICAgIHNldEN1c3RvbVByb3BlcnR5U2hlZXQobmV3IE5vdENoYW5n
YWJsZUZvclZtSW5Qb29sS2V5VmFsdWVNb2RlbCgpKTsKICAgICAgICBzZXREaXNwbGF5UHJvdG9j
b2wobmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsKCkpOwogICAgICAgIHNldFNl
Y29uZEJvb3REZXZpY2UobmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsKCkpOwog
ICAgICAgIHNldFByaW9yaXR5KG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgp
KTsKCiAgICAgICAgc2V0RGF0YUNlbnRlcihuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0
TW9kZWwoKSk7CiAgICAgICAgZ2V0RGF0YUNlbnRlcigpLmdldFNlbGVjdGVkSXRlbUNoYW5nZWRF
dmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwoKICAgICAgICBzZXRUZW1wbGF0ZShuZXcgTm90Q2hh
bmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwoKSk7CiAgICAgICAgZ2V0VGVtcGxhdGUoKS5nZXRT
ZWxlY3RlZEl0ZW1DaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAgICAgc2V0
UXVvdGEobmV3IE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1vZGVsKCkpOwogICAgICAgIGdl
dFF1b3RhKCkuc2V0SXNBdmFpbGFibGUoZmFsc2UpOwoKICAgICAgICBzZXRDbHVzdGVyKG5ldyBO
b3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgpKTsKICAgICAgICBnZXRDbHVzdGVyKCku
Z2V0U2VsZWN0ZWRJdGVtQ2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CgogICAgICAg
IHNldFRpbWVab25lKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgpKTsKICAg
ICAgICBnZXRUaW1lWm9uZSgpLmdldFNlbGVjdGVkSXRlbUNoYW5nZWRFdmVudCgpLmFkZExpc3Rl
bmVyKHRoaXMpOwoKICAgICAgICBzZXREZWZhdWx0SG9zdChuZXcgTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xMaXN0TW9kZWwoKSk7CiAgICAgICAgZ2V0RGVmYXVsdEhvc3QoKS5nZXRTZWxlY3RlZEl0
ZW1DaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAgICAgc2V0T1NUeXBlKG5l
dyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgpKTsKICAgICAgICBnZXRPU1R5cGUo
KS5nZXRTZWxlY3RlZEl0ZW1DaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAg
ICAgc2V0Rmlyc3RCb290RGV2aWNlKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2Rl
bCgpKTsKICAgICAgICBnZXRGaXJzdEJvb3REZXZpY2UoKS5nZXRTZWxlY3RlZEl0ZW1DaGFuZ2Vk
RXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAgICAgc2V0UHJvdmlzaW9uaW5nKG5ldyBO
b3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdldFByb3Zpc2lv
bmluZygpLmdldEVudGl0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwoKICAgICAg
ICBzZXRNZW1TaXplKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwog
ICAgICAgIGdldE1lbVNpemUoKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0
aGlzKTsKCiAgICAgICAgc2V0VG90YWxDUFVDb3JlcyhuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBv
b2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBnZXRUb3RhbENQVUNvcmVzKCkuZ2V0RW50aXR5Q2hh
bmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CgogICAgICAgIHNldE51bU9mU29ja2V0cyhu
ZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xMaXN0TW9kZWwoKSk7CiAgICAgICAgZ2V0TnVtT2ZT
b2NrZXRzKCkuZ2V0U2VsZWN0ZWRJdGVtQ2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7
CgogICAgICAgIHNldENvcmVzUGVyU29ja2V0KG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExp
c3RNb2RlbCgpKTsKICAgICAgICBnZXRDb3Jlc1BlclNvY2tldCgpLmdldFNlbGVjdGVkSXRlbUNo
YW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwoKICAgICAgICBzZXRSdW5WTU9uU3BlY2lm
aWNIb3N0KG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAg
IGdldFJ1blZNT25TcGVjaWZpY0hvc3QoKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0
ZW5lcih0aGlzKTsKCiAgICAgICAgc2V0UnVuVk1PblRydXN0ZWRIb3N0KG5ldyBOb3RDaGFuZ2Fi
bGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdldFJ1blZNT25UcnVzdGVkSG9z
dCgpLmdldEVudGl0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwoKICAgICAgICBz
ZXRIb3N0Q3B1KG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAg
ICAgIGdldEhvc3RDcHUoKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlz
KTsKCiAgICAgICAgc2V0RG9udE1pZ3JhdGVWTShuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xF
bnRpdHlNb2RlbCgpKTsKICAgICAgICBnZXREb250TWlncmF0ZVZNKCkuZ2V0RW50aXR5Q2hhbmdl
ZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CgogICAgICAgIHNldElzQXV0b0Fzc2lnbihuZXcg
Tm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgpKTsKICAgICAgICBnZXRJc0F1dG9B
c3NpZ24oKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAgICAg
ICAgc2V0SXNUZW1wbGF0ZVB1YmxpYyhuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlN
b2RlbCgpKTsKICAgICAgICBnZXRJc1RlbXBsYXRlUHVibGljKCkuZ2V0RW50aXR5Q2hhbmdlZEV2
ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CgogICAgICAgIHNldElzSG9zdFRhYlZhbGlkKHRydWUp
OwogICAgICAgIHNldElzQ3VzdG9tUHJvcGVydGllc1RhYlZhbGlkKGdldElzSG9zdFRhYlZhbGlk
KCkpOwogICAgICAgIHNldElzQm9vdFNlcXVlbmNlVGFiVmFsaWQoZ2V0SXNDdXN0b21Qcm9wZXJ0
aWVzVGFiVmFsaWQoKSk7CiAgICAgICAgc2V0SXNBbGxvY2F0aW9uVGFiVmFsaWQoZ2V0SXNCb290
U2VxdWVuY2VUYWJWYWxpZCgpKTsKICAgICAgICBzZXRJc0Rpc3BsYXlUYWJWYWxpZChnZXRJc0Fs
bG9jYXRpb25UYWJWYWxpZCgpKTsKICAgICAgICBzZXRJc0ZpcnN0UnVuVGFiVmFsaWQoZ2V0SXNE
aXNwbGF5VGFiVmFsaWQoKSk7CiAgICAgICAgc2V0SXNHZW5lcmFsVGFiVmFsaWQoZ2V0SXNGaXJz
dFJ1blRhYlZhbGlkKCkpOwoKICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGJlY2F1c2UgY3VycmVu
dGx5IHRoZSBhdXRvIGdlbmVyYXRlZCB2aWV3IGNvZGUgdHJpZXMgdG8gcmVnaXN0ZXIgZXZlbnRz
IG9mIHBvb2x0eXBlIGZvcgogICAgICAgIC8vIFZNL1RlbXBsYXRlIHZpZXdzIGFzIHRoaXMgbW9k
ZWwgaXMgc2hhcmVkIGFjcm9zcyBWTS9UZW1wbGF0ZS9Qb29sIG1vZGVscwogICAgICAgIHNldFBv
b2xUeXBlKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCgpKTsKCiAgICAgICAg
c2V0TnVtT2ZEZXNrdG9wcyhuZXcgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2RlbCgp
KTsKICAgICAgICBnZXROdW1PZkRlc2t0b3BzKCkuc2V0RW50aXR5KDApOwogICAgICAgIGdldE51
bU9mRGVza3RvcHMoKS5zZXRJc0F2YWlsYWJsZShmYWxzZSk7CgogICAgICAgIHNldEFzc2lnbmVk
Vm1zKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdl
dEFzc2lnbmVkVm1zKCkuc2V0RW50aXR5KDApOwogICAgICAgIGdldEFzc2lnbmVkVm1zKCkuc2V0
SXNBdmFpbGFibGUoZmFsc2UpOwogICAgICAgIC8vIEFzc2lnbmVkIFZNcyBjb3VudCBpcyBhbHdh
eXMgcmVhZC1vbmx5LgogICAgICAgIGdldEFzc2lnbmVkVm1zKCkuc2V0SXNDaGFuZ2FibGUoZmFs
c2UpOwoKICAgICAgICBzZXRQcmVzdGFydGVkVm1zKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9v
bEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdldFByZXN0YXJ0ZWRWbXMoKS5zZXRFbnRpdHkoMCk7
CiAgICAgICAgZ2V0UHJlc3RhcnRlZFZtcygpLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKCiAgICAg
ICAgc2V0RGlza3NBbGxvY2F0aW9uTW9kZWwobmV3IERpc2tzQWxsb2NhdGlvbk1vZGVsKCkpOwoK
ICAgICAgICBzZXRQcm92aXNpb25pbmdDbG9uZV9Jc1NlbGVjdGVkKG5ldyBOb3RDaGFuZ2FibGVG
b3JWbUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdldFByb3Zpc2lvbmluZ0Nsb25lX0lz
U2VsZWN0ZWQoKS5nZXRFbnRpdHlDaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcih0aGlzKTsKCiAg
ICAgICAgc2V0UHJvdmlzaW9uaW5nVGhpbl9Jc1NlbGVjdGVkKG5ldyBOb3RDaGFuZ2FibGVGb3JW
bUluUG9vbEVudGl0eU1vZGVsKCkpOwogICAgICAgIGdldFByb3Zpc2lvbmluZ1RoaW5fSXNTZWxl
Y3RlZCgpLmdldEVudGl0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwoKICAgICAg
ICBzZXRDcHVQaW5uaW5nKG5ldyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsKCkp
OwogICAgICAgIGdldENwdVBpbm5pbmcoKS5zZXRFbnRpdHkoIiIpOwogICAgICAgIGdldENwdVBp
bm5pbmcoKS5zZXRJc0F2YWlsYWJsZShmYWxzZSk7CgogICAgICAgIGluaXRUaW1lWm9uZXMoKTsK
ICAgIH0KCiAgICBwcml2YXRlIHZvaWQgaW5pdFRpbWVab25lcygpIHsKICAgICAgICBnZXRPU1R5
cGUoKS5nZXRTZWxlY3RlZEl0ZW1DaGFuZ2VkRXZlbnQoKS5hZGRMaXN0ZW5lcihuZXcgSUV2ZW50
TGlzdGVuZXIoKSB7CgogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZv
aWQgZXZlbnRSYWlzZWQoRXZlbnQgZXYsIE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKSB7
CiAgICAgICAgICAgICAgICBnZXRCZWhhdmlvcigpLnVwZGF0ZVRpbWVab25lKCk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9KTsKCiAgICB9CgogICAgcHVibGljIHZvaWQgSW5pdGlhbGl6ZShTeXN0
ZW1UcmVlSXRlbU1vZGVsIFN5c3RlbVRyZWVTZWxlY3RlZEl0ZW0pCiAgICB7CiAgICAgICAgc3Vw
ZXIuSW5pdGlhbGl6ZSgpOwoKICAgICAgICBzZXRIYXNoKGdldEhhc2hOYW1lKCkgKyBuZXcgRGF0
ZSgpKTsKCiAgICAgICAgZ2V0TWVtU2l6ZSgpLnNldEVudGl0eSgyNTYpOwogICAgICAgIGdldE1p
bkFsbG9jYXRlZE1lbW9yeSgpLnNldEVudGl0eSgyNTYpOwogICAgICAgIGdldElzU3RhdGVsZXNz
KCkuc2V0RW50aXR5KGZhbHNlKTsKICAgICAgICBnZXRJc1NtYXJ0Y2FyZEVuYWJsZWQoKS5zZXRF
bnRpdHkoZmFsc2UpOwogICAgICAgIGdldElzSGlnaGx5QXZhaWxhYmxlKCkuc2V0RW50aXR5KGZh
bHNlKTsKICAgICAgICBnZXREb250TWlncmF0ZVZNKCkuc2V0RW50aXR5KGZhbHNlKTsKICAgICAg
ICBnZXRJc0F1dG9Bc3NpZ24oKS5zZXRFbnRpdHkodHJ1ZSk7CiAgICAgICAgZ2V0SXNUZW1wbGF0
ZVB1YmxpYygpLnNldEVudGl0eSh0cnVlKTsKCiAgICAgICAgZ2V0UnVuVk1PblNwZWNpZmljSG9z
dCgpLnNldEVudGl0eShmYWxzZSk7CiAgICAgICAgZ2V0UnVuVk1PblNwZWNpZmljSG9zdCgpLnNl
dElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgZ2V0UnVuVk1PblRydXN0ZWRIb3N0KCkuc2V0
RW50aXR5KGZhbHNlKTsKCiAgICAgICAgZ2V0SG9zdENwdSgpLnNldEVudGl0eShmYWxzZSk7CiAg
ICAgICAgZ2V0UnVuVk1PblNwZWNpZmljSG9zdCgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAg
ICAgICAgZ2V0Q2RJbWFnZSgpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKCiAgICAgICAgSW5pdE9T
VHlwZSgpOwogICAgICAgIEluaXREaXNwbGF5UHJvdG9jb2woKTsKICAgICAgICBJbml0Rmlyc3RC
b290RGV2aWNlKCk7CiAgICAgICAgSW5pdE51bU9mTW9uaXRvcnMoKTsKICAgICAgICBJbml0QWxs
b3dDb25zb2xlUmVjb25uZWN0KCk7CiAgICAgICAgSW5pdE1pbmltYWxWbU1lbVNpemUoKTsKICAg
ICAgICBJbml0TWF4aW1hbFZtTWVtU2l6ZTMyT1MoKTsKCiAgICAgICAgYmVoYXZpb3IuSW5pdGlh
bGl6ZShTeXN0ZW1UcmVlU2VsZWN0ZWRJdGVtKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1
YmxpYyB2b2lkIGV2ZW50UmFpc2VkKEV2ZW50IGV2LCBPYmplY3Qgc2VuZGVyLCBFdmVudEFyZ3Mg
YXJncykKICAgIHsKICAgICAgICBzdXBlci5ldmVudFJhaXNlZChldiwgc2VuZGVyLCBhcmdzKTsK
CiAgICAgICAgaWYgKGV2LmVxdWFscyhGcm9udGVuZC5RdWVyeVN0YXJ0ZWRFdmVudERlZmluaXRp
b24pCiAgICAgICAgICAgICAgICAmJiBTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKEZyb250ZW5k
LmdldEN1cnJlbnRDb250ZXh0KCksIGdldEhhc2goKSkpCiAgICAgICAgewogICAgICAgICAgICBG
cm9udGVuZF9RdWVyeVN0YXJ0ZWQoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZXYuZXF1
YWxzKEZyb250ZW5kLlF1ZXJ5Q29tcGxldGVFdmVudERlZmluaXRpb24pCiAgICAgICAgICAgICAg
ICAmJiBTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKEZyb250ZW5kLmdldEN1cnJlbnRDb250ZXh0
KCksIGdldEhhc2goKSkpCiAgICAgICAgewogICAgICAgICAgICBGcm9udGVuZF9RdWVyeUNvbXBs
ZXRlKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGV2LmVxdWFscyhMaXN0TW9kZWwuU2Vs
ZWN0ZWRJdGVtQ2hhbmdlZEV2ZW50RGVmaW5pdGlvbikpCiAgICAgICAgewogICAgICAgICAgICBp
ZiAoc2VuZGVyID09IGdldERhdGFDZW50ZXIoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgRGF0YUNlbnRlcl9TZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbmRlciwgYXJncyk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoc2VuZGVyID09IGdldFRlbXBsYXRlKCkpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlX1NlbGVjdGVkSXRlbUNoYW5nZWQoc2Vu
ZGVyLCBhcmdzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzZW5kZXIgPT0g
Z2V0Q2x1c3RlcigpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDbHVzdGVyX1NlbGVj
dGVkSXRlbUNoYW5nZWQoc2VuZGVyLCBhcmdzKTsKICAgICAgICAgICAgICAgIEluaXRVc2JQb2xp
Y3koKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzZW5kZXIgPT0gZ2V0VGlt
ZVpvbmUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGltZVpvbmVfU2VsZWN0ZWRJ
dGVtQ2hhbmdlZChzZW5kZXIsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ug
aWYgKHNlbmRlciA9PSBnZXREZWZhdWx0SG9zdCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBEZWZhdWx0SG9zdF9TZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbmRlciwgYXJncyk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoc2VuZGVyID09IGdldE9TVHlwZSgpKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBPU1R5cGVfU2VsZWN0ZWRJdGVtQ2hhbmdlZChzZW5k
ZXIsIGFyZ3MpOwogICAgICAgICAgICAgICAgSW5pdFVzYlBvbGljeSgpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRlciA9PSBnZXRGaXJzdEJvb3REZXZpY2UoKSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgRmlyc3RCb290RGV2aWNlX1NlbGVjdGVkSXRlbUNo
YW5nZWQoc2VuZGVyLCBhcmdzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChz
ZW5kZXIgPT0gZ2V0RGlzcGxheVByb3RvY29sKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIERpc3BsYXlQcm90b2NvbF9TZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbmRlciwgYXJncyk7CiAg
ICAgICAgICAgICAgICBJbml0VXNiUG9saWN5KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
ZWxzZSBpZiAoc2VuZGVyID09IGdldE51bU9mU29ja2V0cygpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBOdW1PZlNvY2tldHNfRW50aXR5Q2hhbmdlZChzZW5kZXIsIGFyZ3MpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRlciA9PSBnZXRDb3Jlc1BlclNvY2tl
dCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb3Jlc1BlclNvY2tldF9FbnRpdHlD
aGFuZ2VkKHNlbmRlciwgYXJncyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZiAoZXYuZXF1YWxzKEVudGl0eU1vZGVsLkVudGl0eUNoYW5nZWRFdmVudERlZmluaXRpb24p
KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNlbmRlciA9PSBnZXRNZW1TaXplKCkpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIE1lbVNpemVfRW50aXR5Q2hhbmdlZChzZW5kZXIsIGFy
Z3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRlciA9PSBnZXRUb3Rh
bENQVUNvcmVzKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRvdGFsQ1BVQ29yZXNf
RW50aXR5Q2hhbmdlZChzZW5kZXIsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UgaWYgKHNlbmRlciA9PSBnZXRSdW5WTU9uU3BlY2lmaWNIb3N0KCkpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIFJ1blZNT25TcGVjaWZpY0hvc3RfRW50aXR5Q2hhbmdlZChzZW5kZXIs
IGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRlciA9PSBnZXRE
b250TWlncmF0ZVZNKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERvbnRNaWdyYXRl
Vk1fRW50aXR5Q2hhbmdlZChzZW5kZXIsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2UgaWYgKHNlbmRlciA9PSBnZXRSdW5WTU9uVHJ1c3RlZEhvc3QoKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgUnVuVk1PblRydXN0ZWRIb3N0X0VudGl0eUNoYW5nZWQoc2VuZGVy
LCBhcmdzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzZW5kZXIgPT0gZ2V0
SXNBdXRvQXNzaWduKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIElzQXV0b0Fzc2ln
bl9FbnRpdHlDaGFuZ2VkKHNlbmRlciwgYXJncyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg
IGVsc2UgaWYgKHNlbmRlciA9PSBnZXRQcm92aXNpb25pbmcoKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgUHJvdmlzaW9uaW5nX1NlbGVjdGVkSXRlbUNoYW5nZWQoc2VuZGVyLCBhcmdz
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzZW5kZXIgPT0gZ2V0UHJvdmlz
aW9uaW5nVGhpbl9Jc1NlbGVjdGVkKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlm
ICgoQm9vbGVhbikgZ2V0UHJvdmlzaW9uaW5nVGhpbl9Jc1NlbGVjdGVkKCkuZ2V0RW50aXR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICBnZXRQcm92aXNpb25pbmcoKS5zZXRFbnRpdHkoZmFsc2Up
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNl
bmRlciA9PSBnZXRQcm92aXNpb25pbmdDbG9uZV9Jc1NlbGVjdGVkKCkpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIGlmICgoQm9vbGVhbikgZ2V0UHJvdmlzaW9uaW5nQ2xvbmVfSXNTZWxl
Y3RlZCgpLmdldEVudGl0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgZ2V0UHJvdmlzaW9uaW5n
KCkuc2V0RW50aXR5KHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKICAgIHByaXZhdGUgaW50IHF1ZXJ5Q291bnRlcjsKCiAgICBwcml2YXRlIHZv
aWQgRnJvbnRlbmRfUXVlcnlTdGFydGVkKCkKICAgIHsKICAgICAgICBxdWVyeUNvdW50ZXIrKzsK
ICAgICAgICBpZiAoZ2V0UHJvZ3Jlc3MoKSA9PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAg
U3RhcnRQcm9ncmVzcyhudWxsKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIEZy
b250ZW5kX1F1ZXJ5Q29tcGxldGUoKQogICAgewogICAgICAgIHF1ZXJ5Q291bnRlci0tOwogICAg
ICAgIGlmIChxdWVyeUNvdW50ZXIgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIFN0b3BQcm9n
cmVzcygpOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgdm9pZCBJbml0TnVtT2ZNb25p
dG9ycygpCiAgICB7CiAgICAgICAgaWYgKGdldFZtVHlwZSgpID09IFZtVHlwZS5EZXNrdG9wKQog
ICAgICAgIHsKICAgICAgICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0TnVtT2ZNb25pdG9yTGlz
dChuZXcgQXN5bmNRdWVyeSh0aGlzLAogICAgICAgICAgICAgICAgICAgIG5ldyBJTmV3QXN5bmND
YWxsYmFjaygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyB2b2lkIE9uU3VjY2VzcyhPYmplY3QgdGFyZ2V0LCBPYmplY3Qg
cmV0dXJuVmFsdWUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml0Vm1Nb2RlbCBt
b2RlbCA9IChVbml0Vm1Nb2RlbCkgdGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50ZWdlciBvbGROdW1PZk1vbml0b3JzID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtb2RlbC5nZXROdW1PZk1vbml0b3JzKCkuZ2V0U2VsZWN0ZWRJdGVtKCkgIT0gbnVs
bCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbGROdW1PZk1vbml0b3JzID0gKEludGVnZXIpIG1vZGVsLmdldE51bU9mTW9uaXRv
cnMoKS5nZXRTZWxlY3RlZEl0ZW0oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxJbnRlZ2VyPiBudW1PZk1vbml0b3Jz
ID0gKEFycmF5TGlzdDxJbnRlZ2VyPikgcmV0dXJuVmFsdWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2RlbC5nZXROdW1PZk1vbml0b3JzKCkuc2V0SXRlbXMobnVtT2ZNb25pdG9ycyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkTnVtT2ZNb25pdG9ycyAhPSBudWxs
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGVsLmdldE51bU9mTW9uaXRvcnMoKS5zZXRTZWxlY3RlZEl0ZW0ob2xkTnVtT2ZN
b25pdG9ycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgZ2V0SGFzaCgpKSk7CiAgICAgICAgfQog
ICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGdldE51bU9mTW9uaXRvcnMoKS5zZXRJ
dGVtcyhuZXcgQXJyYXlMaXN0PEludGVnZXI+KEFycmF5cy5hc0xpc3QobmV3IEludGVnZXJbXSB7
IDEgfSkpKTsKICAgICAgICAgICAgZ2V0TnVtT2ZNb25pdG9ycygpLnNldFNlbGVjdGVkSXRlbSgx
KTsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIHZvaWQgSW5pdEFsbG93Q29uc29sZVJl
Y29ubmVjdCgpCiAgICB7CiAgICAgICAgZ2V0QWxsb3dDb25zb2xlUmVjb25uZWN0KCkuc2V0RW50
aXR5KGdldFZtVHlwZSgpID09IFZtVHlwZS5TZXJ2ZXIpOwogICAgfQoKICAgIHByaXZhdGUgdm9p
ZCBJbml0T1NUeXBlKCkKICAgIHsKICAgICAgICBMaXN0PFZtT3NUeXBlPiBvc0xpc3QgPSBBcnJh
eXMuYXNMaXN0KFZtT3NUeXBlLnZhbHVlcygpKTsKICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KG9z
TGlzdCwgbmV3IENvbXBhcmF0b3I8Vm1Pc1R5cGU+KCkgewoKICAgICAgICAgICAgQE92ZXJyaWRl
CiAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShWbU9zVHlwZSBvMSwgVm1Pc1R5cGUgbzIp
IHsKICAgICAgICAgICAgICAgIC8vIG1vdmluZyBVbmFzc2lnbmVkIHRvIHRoZSBoZWFkIG9mIHRo
ZSBsaXN0CiAgICAgICAgICAgICAgICBpZiAobzEubmFtZSgpLmVxdWFscyhWbU9zVHlwZS5VbmFz
c2lnbmVkLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG8yLm5hbWUoKS5lcXVhbHMoVm1Pc1R5cGUu
VW5hc3NpZ25lZC5uYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG8xLm5hbWUoKS5jb21wYXJlVG8o
bzIubmFtZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBnZXRPU1R5cGUo
KS5zZXRJdGVtcyhvc0xpc3QpOwogICAgICAgIGdldE9TVHlwZSgpLnNldFNlbGVjdGVkSXRlbShW
bU9zVHlwZS5VbmFzc2lnbmVkKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgSW5pdFVzYlBvbGlj
eSgpIHsKICAgICAgICBWRFNHcm91cCBjbHVzdGVyID0gKFZEU0dyb3VwKSBnZXRDbHVzdGVyKCku
Z2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgVm1Pc1R5cGUgb3NUeXBlID0gKFZtT3NUeXBlKSBn
ZXRPU1R5cGUoKS5nZXRTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBEaXNwbGF5VHlwZSBkaXNwbGF5
VHlwZSA9IChEaXNwbGF5VHlwZSkgKGdldERpc3BsYXlQcm90b2NvbCgpLmdldFNlbGVjdGVkSXRl
bSgpICE9IG51bGwgPwogICAgICAgICAgICAgICAgKChFbnRpdHlNb2RlbCkgZ2V0RGlzcGxheVBy
b3RvY29sKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldEVudGl0eSgpIDogbnVsbCk7CgogICAgICAg
IGlmIChvc1R5cGUgPT0gbnVsbCB8fCBjbHVzdGVyID09IG51bGwgfHwgZGlzcGxheVR5cGUgPT0g
bnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBnZXRVc2JQb2xp
Y3koKS5zZXRJc0NoYW5nYWJsZSh0cnVlKTsKICAgICAgICBpZiAoVmVyc2lvbi52M18xLmNvbXBh
cmVUbyhjbHVzdGVyLmdldGNvbXBhdGliaWxpdHlfdmVyc2lvbigpKSA+IDApIHsKICAgICAgICAg
ICAgaWYgKG9zVHlwZS5pc1dpbmRvd3MoKSkgewogICAgICAgICAgICAgICAgZ2V0VXNiUG9saWN5
KCkuc2V0SXRlbXMoQXJyYXlzLmFzTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgVXNiUG9s
aWN5LkRJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICAgICBVc2JQb2xpY3kuRU5BQkxFRF9M
RUdBQ1kKICAgICAgICAgICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICBnZXRVc2JQb2xpY3koKS5zZXRJdGVtcyhBcnJheXMuYXNMaXN0KFVzYlBv
bGljeS5ESVNBQkxFRCkpOwogICAgICAgICAgICAgICAgZ2V0VXNiUG9saWN5KCkuc2V0U2VsZWN0
ZWRJdGVtKFVzYlBvbGljeS5ESVNBQkxFRCk7CiAgICAgICAgICAgICAgICBnZXRVc2JQb2xpY3ko
KS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGlmIChWZXJzaW9uLnYzXzEuY29tcGFyZVRvKGNsdXN0ZXIuZ2V0Y29tcGF0aWJpbGl0eV92ZXJz
aW9uKCkpIDw9IDApIHsKICAgICAgICAgICAgaWYgKG9zVHlwZS5pc0xpbnV4KCkpIHsKICAgICAg
ICAgICAgICAgIGdldFVzYlBvbGljeSgpLnNldEl0ZW1zKEFycmF5cy5hc0xpc3QoCiAgICAgICAg
ICAgICAgICAgICAgICAgIFVzYlBvbGljeS5ESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAg
ICAgVXNiUG9saWN5LkVOQUJMRURfTkFUSVZFCiAgICAgICAgICAgICAgICAgICAgICAgICkpOwog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZ2V0VXNiUG9saWN5KCkuc2V0SXRl
bXMoCiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVXNiUG9saWN5LkRJU0FCTEVELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVzYlBvbGljeS5FTkFCTEVEX0xFR0FDWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVc2JQb2xpY3kuRU5BQkxFRF9OQVRJVkUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGRp
c3BsYXlUeXBlICE9IERpc3BsYXlUeXBlLnF4bCkgewogICAgICAgICAgICBnZXRVc2JQb2xpY3ko
KS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAgICAgfQoKICAgICAgICBnZXRVc2JQb2xpY3ko
KS5zZXRTZWxlY3RlZEl0ZW0oVXNiUG9saWN5LkRJU0FCTEVEKTsKICAgIH0KCiAgICBwcml2YXRl
IHZvaWQgSW5pdE1pbmltYWxWbU1lbVNpemUoKQogICAgewogICAgICAgIEFzeW5jRGF0YVByb3Zp
ZGVyLkdldE1pbmltYWxWbU1lbVNpemUobmV3IEFzeW5jUXVlcnkodGhpcywKICAgICAgICAgICAg
ICAgIG5ldyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAgICAgICAgICBAT3ZlcnJp
ZGUKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdl
dCwgT2JqZWN0IHJldHVyblZhbHVlKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBVbml0Vm1N
b2RlbCB2bU1vZGVsID0gKFVuaXRWbU1vZGVsKSB0YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHZtTW9kZWwuc2V0X01pbk1lbVNpemUoKEludGVnZXIpIHJldHVyblZhbHVlKTsKCiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgZ2V0SGFzaCgpKSk7CiAgICB9Cgog
ICAgcHJpdmF0ZSB2b2lkIEluaXRNYXhpbWFsVm1NZW1TaXplMzJPUygpCiAgICB7CiAgICAgICAg
QXN5bmNEYXRhUHJvdmlkZXIuR2V0TWF4aW1hbFZtTWVtU2l6ZTMyT1MobmV3IEFzeW5jUXVlcnko
dGhpcywKICAgICAgICAgICAgICAgIG5ldyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAg
ICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1
Y2Nlc3MoT2JqZWN0IHRhcmdldCwgT2JqZWN0IHJldHVyblZhbHVlKSB7CgogICAgICAgICAgICAg
ICAgICAgICAgICBVbml0Vm1Nb2RlbCB2bU1vZGVsID0gKFVuaXRWbU1vZGVsKSB0YXJnZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHZtTW9kZWwuc2V0X01heE1lbVNpemUzMigoSW50ZWdlcikg
cmV0dXJuVmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCBn
ZXRIYXNoKCkpKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgVXBkYXRlTWF4aW1hbFZtTWVtU2l6
ZSgpCiAgICB7CiAgICAgICAgVkRTR3JvdXAgY2x1c3RlciA9IChWRFNHcm91cCkgZ2V0Q2x1c3Rl
cigpLmdldFNlbGVjdGVkSXRlbSgpOwoKICAgICAgICBpZiAoY2x1c3RlciAhPSBudWxsKQogICAg
ICAgIHsKICAgICAgICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0TWF4aW1hbFZtTWVtU2l6ZTY0
T1MobmV3IEFzeW5jUXVlcnkodGhpcywKICAgICAgICAgICAgICAgICAgICBuZXcgSU5ld0FzeW5j
Q2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdldCwgT2JqZWN0
IHJldHVyblZhbHVlKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdFZtTW9kZWwg
dm1Nb2RlbCA9IChVbml0Vm1Nb2RlbCkgdGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm1Nb2RlbC5zZXRfTWF4TWVtU2l6ZTY0KChJbnRlZ2VyKSByZXR1cm5WYWx1ZSk7CgogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgZ2V0SGFzaCgpKSwg
Y2x1c3Rlci5nZXRjb21wYXRpYmlsaXR5X3ZlcnNpb24oKS50b1N0cmluZygpKTsKICAgICAgICB9
CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIEluaXREaXNwbGF5UHJvdG9jb2woKQogICAgewogICAg
ICAgIEFycmF5TGlzdDxFbnRpdHlNb2RlbD4gZGlzcGxheVByb3RvY29sT3B0aW9ucyA9IG5ldyBB
cnJheUxpc3Q8RW50aXR5TW9kZWw+KCk7CgogICAgICAgIEVudGl0eU1vZGVsIHNwaWNlUHJvdG9j
b2wgPSBuZXcgRW50aXR5TW9kZWwoKTsKICAgICAgICBzcGljZVByb3RvY29sLnNldFRpdGxlKENv
bnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5zcGljZVRpdGxlKCkp
OwogICAgICAgIHNwaWNlUHJvdG9jb2wuc2V0RW50aXR5KERpc3BsYXlUeXBlLnF4bCk7CgogICAg
ICAgIEVudGl0eU1vZGVsIHZuY1Byb3RvY29sID0gbmV3IEVudGl0eU1vZGVsKCk7CiAgICAgICAg
dm5jUHJvdG9jb2wuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENv
bnN0YW50cygpLlZOQ1RpdGxlKCkpOwogICAgICAgIHZuY1Byb3RvY29sLnNldEVudGl0eShEaXNw
bGF5VHlwZS52bmMpOwoKICAgICAgICBkaXNwbGF5UHJvdG9jb2xPcHRpb25zLmFkZChzcGljZVBy
b3RvY29sKTsKICAgICAgICBkaXNwbGF5UHJvdG9jb2xPcHRpb25zLmFkZCh2bmNQcm90b2NvbCk7
CiAgICAgICAgZ2V0RGlzcGxheVByb3RvY29sKCkuc2V0SXRlbXMoZGlzcGxheVByb3RvY29sT3B0
aW9ucyk7CgogICAgICAgIGdldERpc3BsYXlQcm90b2NvbCgpLmdldFNlbGVjdGVkSXRlbUNoYW5n
ZWRFdmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBJbml0
Rmlyc3RCb290RGV2aWNlKCkKICAgIHsKICAgICAgICBFbnRpdHlNb2RlbCB0ZW1wVmFyID0gbmV3
IEVudGl0eU1vZGVsKCk7CiAgICAgICAgdGVtcFZhci5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2Vy
LmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuaGFyZERpc2tUaXRsZSgpKTsKICAgICAgICB0
ZW1wVmFyLnNldEVudGl0eShCb290U2VxdWVuY2UuQyk7CiAgICAgICAgRW50aXR5TW9kZWwgaGFy
ZERpc2tPcHRpb24gPSB0ZW1wVmFyOwoKICAgICAgICBBcnJheUxpc3Q8RW50aXR5TW9kZWw+IGZp
cnN0Qm9vdERldmljZUl0ZW1zID0gbmV3IEFycmF5TGlzdDxFbnRpdHlNb2RlbD4oKTsKICAgICAg
ICBmaXJzdEJvb3REZXZpY2VJdGVtcy5hZGQoaGFyZERpc2tPcHRpb24pOwogICAgICAgIEVudGl0
eU1vZGVsIHRlbXBWYXIyID0gbmV3IEVudGl0eU1vZGVsKCk7CiAgICAgICAgdGVtcFZhcjIuc2V0
VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLmNkcm9t
VGl0bGUoKSk7CiAgICAgICAgdGVtcFZhcjIuc2V0RW50aXR5KEJvb3RTZXF1ZW5jZS5EKTsKICAg
ICAgICBmaXJzdEJvb3REZXZpY2VJdGVtcy5hZGQodGVtcFZhcjIpOwogICAgICAgIEVudGl0eU1v
ZGVsIHRlbXBWYXIzID0gbmV3IEVudGl0eU1vZGVsKCk7CiAgICAgICAgdGVtcFZhcjMuc2V0VGl0
bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLm5ldHdvcmtQ
WEVUaXRsZSgpKTsKICAgICAgICB0ZW1wVmFyMy5zZXRFbnRpdHkoQm9vdFNlcXVlbmNlLk4pOwog
ICAgICAgIGZpcnN0Qm9vdERldmljZUl0ZW1zLmFkZCh0ZW1wVmFyMyk7CiAgICAgICAgZ2V0Rmly
c3RCb290RGV2aWNlKCkuc2V0SXRlbXMoZmlyc3RCb290RGV2aWNlSXRlbXMpOwogICAgICAgIGdl
dEZpcnN0Qm9vdERldmljZSgpLnNldFNlbGVjdGVkSXRlbShoYXJkRGlza09wdGlvbik7CiAgICB9
CgogICAgcHJpdmF0ZSB2b2lkIERhdGFDZW50ZXJfU2VsZWN0ZWRJdGVtQ2hhbmdlZChPYmplY3Qg
c2VuZGVyLCBFdmVudEFyZ3MgYXJncykKICAgIHsKICAgICAgICBiZWhhdmlvci5EYXRhQ2VudGVy
X1NlbGVjdGVkSXRlbUNoYW5nZWQoKTsKCiAgICAgICAgc3RvcmFnZV9wb29sIGRhdGFDZW50ZXIg
PSAoc3RvcmFnZV9wb29sKSBnZXREYXRhQ2VudGVyKCkuZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAg
ICAgaWYgKGRhdGFDZW50ZXIgIT0gbnVsbCkgewogICAgICAgICAgICBnZXREaXNrc0FsbG9jYXRp
b25Nb2RlbCgpLnNldFF1b3RhRW5mb3JjZW1lbnRUeXBlKGRhdGFDZW50ZXIuZ2V0UXVvdGFFbmZv
cmNlbWVudFR5cGUoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBUZW1wbGF0
ZV9TZWxlY3RlZEl0ZW1DaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAg
ewogICAgICAgIGJlaGF2aW9yLlRlbXBsYXRlX1NlbGVjdGVkSXRlbUNoYW5nZWQoKTsKICAgIH0K
CiAgICBwcml2YXRlIHZvaWQgQ2x1c3Rlcl9TZWxlY3RlZEl0ZW1DaGFuZ2VkKE9iamVjdCBzZW5k
ZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAgIGJlaGF2aW9yLkNsdXN0ZXJfU2VsZWN0
ZWRJdGVtQ2hhbmdlZCgpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBUaW1lWm9uZV9TZWxlY3Rl
ZEl0ZW1DaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgfQoK
ICAgIHByaXZhdGUgdm9pZCBEZWZhdWx0SG9zdF9TZWxlY3RlZEl0ZW1DaGFuZ2VkKE9iamVjdCBz
ZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAgIGJlaGF2aW9yLkRlZmF1bHRIb3N0
X1NlbGVjdGVkSXRlbUNoYW5nZWQoKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgT1NUeXBlX1Nl
bGVjdGVkSXRlbUNoYW5nZWQoT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpCiAgICB7CiAg
ICAgICAgVm1Pc1R5cGUgb3NUeXBlID0gKFZtT3NUeXBlKSBnZXRPU1R5cGUoKS5nZXRTZWxlY3Rl
ZEl0ZW0oKTsKCiAgICAgICAgc2V0SXNXaW5kb3dzT1MoQXN5bmNEYXRhUHJvdmlkZXIuSXNXaW5k
b3dzT3NUeXBlKG9zVHlwZSkpOwogICAgICAgIHNldElzTGludXhfVW5hc3NpZ25fVW5rbm93bk9T
KEFzeW5jRGF0YVByb3ZpZGVyLklzTGludXhPc1R5cGUob3NUeXBlKSB8fCBvc1R5cGUgPT0gVm1P
c1R5cGUuVW5hc3NpZ25lZAogICAgICAgICAgICAgICAgfHwgb3NUeXBlID09IFZtT3NUeXBlLk90
aGVyKTsKCiAgICAgICAgZ2V0SW5pdHJkX3BhdGgoKS5zZXRJc0NoYW5nYWJsZShnZXRJc0xpbnV4
X1VuYXNzaWduX1Vua25vd25PUygpKTsKICAgICAgICBnZXRJbml0cmRfcGF0aCgpLnNldElzQXZh
aWxhYmxlKGdldElzTGludXhfVW5hc3NpZ25fVW5rbm93bk9TKCkpOwoKICAgICAgICBnZXRLZXJu
ZWxfcGF0aCgpLnNldElzQ2hhbmdhYmxlKGdldElzTGludXhfVW5hc3NpZ25fVW5rbm93bk9TKCkp
OwogICAgICAgIGdldEtlcm5lbF9wYXRoKCkuc2V0SXNBdmFpbGFibGUoZ2V0SXNMaW51eF9VbmFz
c2lnbl9Vbmtub3duT1MoKSk7CgogICAgICAgIGdldEtlcm5lbF9wYXJhbWV0ZXJzKCkuc2V0SXND
aGFuZ2FibGUoZ2V0SXNMaW51eF9VbmFzc2lnbl9Vbmtub3duT1MoKSk7CiAgICAgICAgZ2V0S2Vy
bmVsX3BhcmFtZXRlcnMoKS5zZXRJc0F2YWlsYWJsZShnZXRJc0xpbnV4X1VuYXNzaWduX1Vua25v
d25PUygpKTsKCiAgICAgICAgZ2V0RG9tYWluKCkuc2V0SXNDaGFuZ2FibGUoZ2V0SXNXaW5kb3dz
T1MoKSk7CiAgICAgICAgZ2V0QmVoYXZpb3IoKS51cGRhdGVUaW1lWm9uZSgpOwoKICAgIH0KCiAg
ICBwcml2YXRlIHZvaWQgRmlyc3RCb290RGV2aWNlX1NlbGVjdGVkSXRlbUNoYW5nZWQoT2JqZWN0
IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpCiAgICB7CiAgICAgICAgRW50aXR5TW9kZWwgZW50aXR5
TW9kZWwgPSAoRW50aXR5TW9kZWwpIGdldEZpcnN0Qm9vdERldmljZSgpLmdldFNlbGVjdGVkSXRl
bSgpOwogICAgICAgIEJvb3RTZXF1ZW5jZSBmaXJzdERldmljZSA9IChCb290U2VxdWVuY2UpIGVu
dGl0eU1vZGVsLmdldEVudGl0eSgpOwoKICAgICAgICBBcnJheUxpc3Q8RW50aXR5TW9kZWw+IGxp
c3QgPSBuZXcgQXJyYXlMaXN0PEVudGl0eU1vZGVsPigpOwogICAgICAgIGZvciAoT2JqZWN0IGl0
ZW0gOiBnZXRGaXJzdEJvb3REZXZpY2UoKS5nZXRJdGVtcygpKQogICAgICAgIHsKICAgICAgICAg
ICAgRW50aXR5TW9kZWwgYSA9IChFbnRpdHlNb2RlbCkgaXRlbTsKICAgICAgICAgICAgaWYgKChC
b290U2VxdWVuY2UpIGEuZ2V0RW50aXR5KCkgIT0gZmlyc3REZXZpY2UpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIGxpc3QuYWRkKGEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBFbnRpdHlNb2RlbCB0ZW1wVmFyID0gbmV3IEVudGl0eU1vZGVsKCk7CiAgICAgICAgdGVt
cFZhci5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRz
KCkubm9uZVRpdGxlKCkpOwogICAgICAgIEVudGl0eU1vZGVsIG5vbmVPcHRpb24gPSB0ZW1wVmFy
OwoKICAgICAgICBsaXN0LmFkZCgwLCBub25lT3B0aW9uKTsKCiAgICAgICAgZ2V0U2Vjb25kQm9v
dERldmljZSgpLnNldEl0ZW1zKGxpc3QpOwogICAgICAgIGdldFNlY29uZEJvb3REZXZpY2UoKS5z
ZXRTZWxlY3RlZEl0ZW0obm9uZU9wdGlvbik7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIFByb3Zp
c2lvbmluZ19TZWxlY3RlZEl0ZW1DaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdz
KQogICAgewogICAgICAgIGJlaGF2aW9yLlByb3Zpc2lvbmluZ19TZWxlY3RlZEl0ZW1DaGFuZ2Vk
KCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIERpc3BsYXlQcm90b2NvbF9TZWxlY3RlZEl0ZW1D
aGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAgIEVudGl0
eU1vZGVsIGVudGl0eU1vZGVsID0gKEVudGl0eU1vZGVsKSBnZXREaXNwbGF5UHJvdG9jb2woKS5n
ZXRTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBpZiAoZW50aXR5TW9kZWwgPT0gbnVsbCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgRGlzcGxheVR5cGUgdHlw
ZSA9IChEaXNwbGF5VHlwZSkgZW50aXR5TW9kZWwuZ2V0RW50aXR5KCk7CgogICAgICAgIGlmICh0
eXBlID09IERpc3BsYXlUeXBlLnZuYykKICAgICAgICB7CiAgICAgICAgICAgIGdldFVzYlBvbGlj
eSgpLnNldFNlbGVjdGVkSXRlbShvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNz
ZW50aXRpZXMuVXNiUG9saWN5LkRJU0FCTEVEKTsKICAgICAgICAgICAgZ2V0SXNTbWFydGNhcmRF
bmFibGVkKCkuc2V0RW50aXR5KGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGdldFVzYlBvbGlj
eSgpLnNldElzQ2hhbmdhYmxlKHR5cGUgPT0gRGlzcGxheVR5cGUucXhsKTsKICAgICAgICBnZXRJ
c1NtYXJ0Y2FyZEVuYWJsZWQoKS5zZXRJc0NoYW5nYWJsZSh0eXBlID09IERpc3BsYXlUeXBlLnF4
bCk7CgogICAgICAgIFVwZGF0ZU51bU9mTW9uaXRvcnMoKTsKICAgIH0KCiAgICBwcml2YXRlIHZv
aWQgTWVtU2l6ZV9FbnRpdHlDaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQog
ICAgewogICAgICAgIGJlaGF2aW9yLlVwZGF0ZU1pbkFsbG9jYXRlZE1lbW9yeSgpOwogICAgfQoK
ICAgIHByaXZhdGUgdm9pZCBOdW1PZlNvY2tldHNfRW50aXR5Q2hhbmdlZChPYmplY3Qgc2VuZGVy
LCBFdmVudEFyZ3MgYXJncykKICAgIHsKICAgICAgICBiZWhhdmlvci5udW1PZlNvY2tldENoYW5n
ZWQoKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgVG90YWxDUFVDb3Jlc19FbnRpdHlDaGFuZ2Vk
KE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKSB7CiAgICAgICAgLy8gZG8gbm90IGxpc3Rl
biBvbiBjaGFuZ2VzIHdoaWxlIHRoZSB0b3RhbENwdUNvcmVzQ2hhbmdlZCBpcyBhZGp1c3Rpbmcg
dGhlbQogICAgICAgIGdldE51bU9mU29ja2V0cygpLmdldFNlbGVjdGVkSXRlbUNoYW5nZWRFdmVu
dCgpLnJlbW92ZUxpc3RlbmVyKHRoaXMpOwogICAgICAgIGdldFRvdGFsQ1BVQ29yZXMoKS5nZXRF
bnRpdHlDaGFuZ2VkRXZlbnQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKICAgICAgICBnZXRDb3Jl
c1BlclNvY2tldCgpLmdldFNlbGVjdGVkSXRlbUNoYW5nZWRFdmVudCgpLnJlbW92ZUxpc3RlbmVy
KHRoaXMpOwoKICAgICAgICBiZWhhdmlvci50b3RhbENwdUNvcmVzQ2hhbmdlZCgpOwoKICAgICAg
ICAvLyBzdGFydCBsaXN0ZW5pbmcgYWdhaW4KICAgICAgICBnZXRUb3RhbENQVUNvcmVzKCkuZ2V0
RW50aXR5Q2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CiAgICAgICAgZ2V0TnVtT2ZT
b2NrZXRzKCkuZ2V0U2VsZWN0ZWRJdGVtQ2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7
CiAgICAgICAgZ2V0Q29yZXNQZXJTb2NrZXQoKS5nZXRTZWxlY3RlZEl0ZW1DaGFuZ2VkRXZlbnQo
KS5hZGRMaXN0ZW5lcih0aGlzKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgQ29yZXNQZXJTb2Nr
ZXRfRW50aXR5Q2hhbmdlZChPYmplY3Qgc2VuZGVyLCBFdmVudEFyZ3MgYXJncykgewogICAgICAg
IGJlaGF2aW9yLmNvcmVzUGVyU29ja2V0Q2hhbmdlZCgpOwogICAgfQoKICAgIHByaXZhdGUgdm9p
ZCBjbGVhckFuZERpc2FibGUoRW50aXR5TW9kZWwgZW50aXR5TW9kZWwpIHsKICAgICAgICBlbnRp
dHlNb2RlbC5zZXRFbnRpdHkoZmFsc2UpOwogICAgICAgIGVudGl0eU1vZGVsLnNldElzQ2hhbmdh
YmxlKGZhbHNlKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgUnVuVk1PblNwZWNpZmljSG9zdF9F
bnRpdHlDaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAg
IGlmICgoQm9vbGVhbikgZ2V0UnVuVk1PblNwZWNpZmljSG9zdCgpLmdldEVudGl0eSgpID09IHRy
dWUpCiAgICAgICAgewogICAgICAgICAgICBjbGVhckFuZERpc2FibGUoZ2V0RG9udE1pZ3JhdGVW
TSgpKTsKICAgICAgICAgICAgZ2V0SG9zdENwdSgpLnNldElzQ2hhbmdhYmxlKHRydWUpOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBjbGVhckFuZERpc2FibGUo
Z2V0SG9zdENwdSgpKTsKICAgICAgICAgICAgZ2V0RG9udE1pZ3JhdGVWTSgpLnNldElzQ2hhbmdh
YmxlKHRydWUpOwogICAgICAgIH0KICAgICAgICBiZWhhdmlvci51cGRhdGVDcHVQaW5uaW5nVmlz
aWJpbGl0eSgpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBSdW5WTU9uVHJ1c3RlZEhvc3RfRW50
aXR5Q2hhbmdlZChPYmplY3Qgc2VuZGVyLCBFdmVudEFyZ3MgYXJncykKICAgIHsKICAgICAgICBp
ZiAoKEJvb2xlYW4pIGdldFJ1blZNT25UcnVzdGVkSG9zdCgpLmdldEVudGl0eSgpID09IHRydWUp
CiAgICAgICAgewogICAgICAgICAgICBjbGVhckFuZERpc2FibGUoZ2V0UnVuVk1PblNwZWNpZmlj
SG9zdCgpKTsKICAgICAgICAgICAgY2xlYXJBbmREaXNhYmxlKGdldEhvc3RDcHUoKSk7CiAgICAg
ICAgICAgIGNsZWFyQW5kRGlzYWJsZShnZXREb250TWlncmF0ZVZNKCkpOwogICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBnZXRSdW5WTU9uU3BlY2lmaWNIb3N0KCku
c2V0SXNDaGFuZ2FibGUodHJ1ZSk7CiAgICAgICAgICAgIGdldERvbnRNaWdyYXRlVk0oKS5zZXRJ
c0NoYW5nYWJsZSh0cnVlKTsKICAgICAgICB9CiAgICAgICAgYmVoYXZpb3IudXBkYXRlQ3B1UGlu
bmluZ1Zpc2liaWxpdHkoKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgRG9udE1pZ3JhdGVWTV9F
bnRpdHlDaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAg
IGlmKChCb29sZWFuKSBnZXREb250TWlncmF0ZVZNKCkuZ2V0RW50aXR5KCkgPT0gdHJ1ZSApIHsK
ICAgICAgICAgICAgY2xlYXJBbmREaXNhYmxlKGdldFJ1blZNT25TcGVjaWZpY0hvc3QoKSk7CiAg
ICAgICAgICAgIGdldEhvc3RDcHUoKS5zZXRJc0NoYW5nYWJsZSh0cnVlKTsKICAgICAgICB9CiAg
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgY2xlYXJBbmREaXNhYmxlKGdldEhvc3RD
cHUoKSk7CiAgICAgICAgICAgIGdldFJ1blZNT25TcGVjaWZpY0hvc3QoKS5zZXRJc0NoYW5nYWJs
ZSh0cnVlKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIElzQXV0b0Fzc2lnbl9F
bnRpdHlDaGFuZ2VkKE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKQogICAgewogICAgICAg
IGlmICgoQm9vbGVhbikgZ2V0SXNBdXRvQXNzaWduKCkuZ2V0RW50aXR5KCkgPT0gdHJ1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIGNsZWFyQW5kRGlzYWJsZShnZXRSdW5WTU9uU3BlY2lmaWNIb3N0
KCkpOwogICAgICAgICAgICBjbGVhckFuZERpc2FibGUoZ2V0SG9zdENwdSgpKTsKICAgICAgICB9
CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgZ2V0UnVuVk1PblNwZWNpZmljSG9z
dCgpLnNldElzQ2hhbmdhYmxlKHRydWUpOwogICAgICAgIH0KICAgICAgICBiZWhhdmlvci51cGRh
dGVDcHVQaW5uaW5nVmlzaWJpbGl0eSgpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBVcGRhdGVO
dW1PZk1vbml0b3JzKCkKICAgIHsKICAgICAgICBib29sZWFuIGlzVm5jID0gZmFsc2U7CgogICAg
ICAgIGlmIChnZXREaXNwbGF5UHJvdG9jb2woKS5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxsKQog
ICAgICAgIHsKICAgICAgICAgICAgRGlzcGxheVR5cGUgZGlzcGxheVR5cGUgPSAoRGlzcGxheVR5
cGUpICgoRW50aXR5TW9kZWwpIGdldERpc3BsYXlQcm90b2NvbCgpLmdldFNlbGVjdGVkSXRlbSgp
KS5nZXRFbnRpdHkoKTsKICAgICAgICAgICAgaXNWbmMgPSBkaXNwbGF5VHlwZSA9PSBEaXNwbGF5
VHlwZS52bmM7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNWbmMpCiAgICAgICAgewogICAgICAg
ICAgICBnZXROdW1PZk1vbml0b3JzKCkuc2V0U2VsZWN0ZWRJdGVtKDEpOwogICAgICAgICAgICBn
ZXROdW1PZk1vbml0b3JzKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIGdldE51bU9mTW9uaXRvcnMoKS5zZXRJc0NoYW5nYWJsZSh0cnVlKTsKICAg
ICAgICB9CiAgICB9CgogICAgcHVibGljIEJvb3RTZXF1ZW5jZSBnZXRCb290U2VxdWVuY2UoKQog
ICAgewogICAgICAgIEVudGl0eU1vZGVsIGZpcnN0U2VsZWN0ZWRJdGVtID0gKEVudGl0eU1vZGVs
KSBnZXRGaXJzdEJvb3REZXZpY2UoKS5nZXRTZWxlY3RlZEl0ZW0oKTsKICAgICAgICBFbnRpdHlN
b2RlbCBzZWNvbmRTZWxlY3RlZEl0ZW0gPSAoRW50aXR5TW9kZWwpIGdldFNlY29uZEJvb3REZXZp
Y2UoKS5nZXRTZWxlY3RlZEl0ZW0oKTsKCiAgICAgICAgU3RyaW5nIGZpcnN0U2VsZWN0ZWRTdHJp
bmcgPQogICAgICAgICAgICAgICAgZmlyc3RTZWxlY3RlZEl0ZW0uZ2V0RW50aXR5KCkgPT0gbnVs
bCA/ICIiIDogZmlyc3RTZWxlY3RlZEl0ZW0uZ2V0RW50aXR5KCkudG9TdHJpbmcoKTsgLy8kTk9O
LU5MUy0xJAogICAgICAgIFN0cmluZyBzZWNvbmRTZWxlY3RlZFN0cmluZyA9CiAgICAgICAgICAg
ICAgICBzZWNvbmRTZWxlY3RlZEl0ZW0uZ2V0RW50aXR5KCkgPT0gbnVsbCA/ICIiIDogc2Vjb25k
U2VsZWN0ZWRJdGVtLmdldEVudGl0eSgpLnRvU3RyaW5nKCk7IC8vJE5PTi1OTFMtMSQKCiAgICAg
ICAgcmV0dXJuIEJvb3RTZXF1ZW5jZS52YWx1ZU9mKGZpcnN0U2VsZWN0ZWRTdHJpbmcgKyBzZWNv
bmRTZWxlY3RlZFN0cmluZyk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0Qm9vdFNlcXVlbmNl
KEJvb3RTZXF1ZW5jZSB2YWx1ZSkKICAgIHsKICAgICAgICBBcnJheUxpc3Q8Qm9vdFNlcXVlbmNl
PiBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8Qm9vdFNlcXVlbmNlPigpOwogICAgICAgIGZvciAoY2hh
ciBhIDogdmFsdWUudG9TdHJpbmcoKS50b0NoYXJBcnJheSgpKQogICAgICAgIHsKICAgICAgICAg
ICAgaXRlbXMuYWRkKEJvb3RTZXF1ZW5jZS52YWx1ZU9mKChuZXcgQ2hhcmFjdGVyKGEpKS50b1N0
cmluZygpKSk7CiAgICAgICAgfQoKICAgICAgICBPYmplY3QgZmlyc3RCb290RGV2aWNlID0gbnVs
bDsKICAgICAgICBmb3IgKE9iamVjdCBpdGVtIDogZ2V0Rmlyc3RCb290RGV2aWNlKCkuZ2V0SXRl
bXMoKSkKICAgICAgICB7CiAgICAgICAgICAgIEVudGl0eU1vZGVsIGEgPSAoRW50aXR5TW9kZWwp
IGl0ZW07CiAgICAgICAgICAgIGlmICgoQm9vdFNlcXVlbmNlKSBhLmdldEVudGl0eSgpID09IExp
bnEuRmlyc3RPckRlZmF1bHQoaXRlbXMpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBm
aXJzdEJvb3REZXZpY2UgPSBhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldEZp
cnN0Qm9vdERldmljZSgpLnNldFNlbGVjdGVkSXRlbShmaXJzdEJvb3REZXZpY2UpOwoKICAgICAg
ICBBcnJheUxpc3Q8RW50aXR5TW9kZWw+IHNlY29uZERldmljZU9wdGlvbnMgPQogICAgICAgICAg
ICAgICAgTGlucS48RW50aXR5TW9kZWw+IENhc3QoZ2V0U2Vjb25kQm9vdERldmljZSgpLmdldEl0
ZW1zKCkpOwoKICAgICAgICBpZiAoaXRlbXMuc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAg
ICAgIEJvb3RTZXF1ZW5jZSBsYXN0ID0gaXRlbXMuZ2V0KGl0ZW1zLnNpemUoKSAtIDEpOwogICAg
ICAgICAgICBmb3IgKEVudGl0eU1vZGVsIGEgOiBzZWNvbmREZXZpY2VPcHRpb25zKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoYS5nZXRFbnRpdHkoKSAhPSBudWxsICYmIChCb290
U2VxdWVuY2UpIGEuZ2V0RW50aXR5KCkgPT0gbGFzdCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBnZXRTZWNvbmRCb290RGV2aWNlKCkuc2V0U2VsZWN0ZWRJdGVtKGEpOwog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoRW50aXR5
TW9kZWwgYSA6IHNlY29uZERldmljZU9wdGlvbnMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmIChhLmdldEVudGl0eSgpID09IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgZ2V0U2Vjb25kQm9vdERldmljZSgpLnNldFNlbGVjdGVkSXRlbShhKTsKICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgdm9pZCBTZXREYXRhQ2VudGVyKFVuaXRWbU1vZGVs
IG1vZGVsLCBBcnJheUxpc3Q8c3RvcmFnZV9wb29sPiBsaXN0KQogICAgewogICAgICAgIGlmICht
b2RlbC5nZXRCZWhhdmlvcigpLmdldFN5c3RlbVRyZWVTZWxlY3RlZEl0ZW0oKSAhPSBudWxsCiAg
ICAgICAgICAgICAgICAmJiBtb2RlbC5nZXRCZWhhdmlvcigpLmdldFN5c3RlbVRyZWVTZWxlY3Rl
ZEl0ZW0oKS5nZXRUeXBlKCkgIT0gU3lzdGVtVHJlZUl0ZW1UeXBlLlN5c3RlbSkKICAgICAgICB7
CiAgICAgICAgICAgIHN3aXRjaCAobW9kZWwuZ2V0QmVoYXZpb3IoKS5nZXRTeXN0ZW1UcmVlU2Vs
ZWN0ZWRJdGVtKCkuZ2V0VHlwZSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgVGVt
cGxhdGVzOgogICAgICAgICAgICBjYXNlIERhdGFDZW50ZXI6CiAgICAgICAgICAgICAgICBzdG9y
YWdlX3Bvb2wgc2VsZWN0RGF0YUNlbnRlciA9CiAgICAgICAgICAgICAgICAgICAgICAgIChzdG9y
YWdlX3Bvb2wpIG1vZGVsLmdldEJlaGF2aW9yKCkuZ2V0U3lzdGVtVHJlZVNlbGVjdGVkSXRlbSgp
LmdldEVudGl0eSgpOwogICAgICAgICAgICAgICAgZm9yIChzdG9yYWdlX3Bvb2wgZGMgOiBsaXN0
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdERhdGFDZW50ZXIuZ2V0SWQoKS5lcXVh
bHMoZGMuZ2V0SWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RGF0YUNlbnRl
ciA9IGRjOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtb2RlbC5nZXREYXRhQ2VudGVy
KCkKICAgICAgICAgICAgICAgICAgICAgICAgLnNldEl0ZW1zKG5ldyBBcnJheUxpc3Q8c3RvcmFn
ZV9wb29sPihBcnJheXMuYXNMaXN0KG5ldyBzdG9yYWdlX3Bvb2xbXSB7IHNlbGVjdERhdGFDZW50
ZXIgfSkpKTsKICAgICAgICAgICAgICAgIG1vZGVsLmdldERhdGFDZW50ZXIoKS5zZXRTZWxlY3Rl
ZEl0ZW0oc2VsZWN0RGF0YUNlbnRlcik7CiAgICAgICAgICAgICAgICBtb2RlbC5nZXREYXRhQ2Vu
dGVyKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICAgICAgbW9kZWwuZ2V0RGF0
YUNlbnRlcigpLnNldEluZm8oIkNhbm5vdCBjaG9vc2UgRGF0YSBDZW50ZXIgaW4gdHJlZSBjb250
ZXh0Iik7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBj
YXNlIENsdXN0ZXI6CiAgICAgICAgICAgIGNhc2UgVk1zOgogICAgICAgICAgICAgICAgVkRTR3Jv
dXAgY2x1c3RlciA9IChWRFNHcm91cCkgbW9kZWwuZ2V0QmVoYXZpb3IoKS5nZXRTeXN0ZW1UcmVl
U2VsZWN0ZWRJdGVtKCkuZ2V0RW50aXR5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHN0b3JhZ2Vf
cG9vbCBkYyA6IGxpc3QpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KGRjLmdldElkKCkuZXF1YWxzKGNsdXN0ZXIuZ2V0U3RvcmFnZVBvb2xJZCgpKSkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldERhdGFDZW50ZXIo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJdGVtcyhuZXcgQXJyYXlMaXN0
PHN0b3JhZ2VfcG9vbD4oQXJyYXlzLmFzTGlzdChuZXcgc3RvcmFnZV9wb29sW10geyBkYyB9KSkp
OwogICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5nZXREYXRhQ2VudGVyKCkuc2V0U2VsZWN0
ZWRJdGVtKGRjKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbW9kZWwuZ2V0RGF0YUNl
bnRlcigpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgICAgIG1vZGVsLmdldERh
dGFDZW50ZXIoKS5zZXRJbmZvKCJDYW5ub3QgY2hvb3NlIERhdGEgQ2VudGVyIGluIHRyZWUgY29u
dGV4dCIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
Y2FzZSBIb3N0OgogICAgICAgICAgICAgICAgVkRTIGhvc3QgPSAoVkRTKSBtb2RlbC5nZXRCZWhh
dmlvcigpLmdldFN5c3RlbVRyZWVTZWxlY3RlZEl0ZW0oKS5nZXRFbnRpdHkoKTsKICAgICAgICAg
ICAgICAgIGZvciAoc3RvcmFnZV9wb29sIGRjIDogbGlzdCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoZGMuZ2V0SWQoKS5lcXVhbHMoaG9zdC5nZXRTdG9yYWdlUG9v
bElkKCkpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbW9k
ZWwuZ2V0RGF0YUNlbnRlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEl0
ZW1zKG5ldyBBcnJheUxpc3Q8c3RvcmFnZV9wb29sPihBcnJheXMuYXNMaXN0KG5ldyBzdG9yYWdl
X3Bvb2xbXSB7IGRjIH0pKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldERhdGFD
ZW50ZXIoKS5zZXRTZWxlY3RlZEl0ZW0oZGMpOwogICAgICAgICAgICAgICAgICAgICAgICBtb2Rl
bC5nZXREYXRhQ2VudGVyKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAgICAgICAg
ICAgICAgICBtb2RlbC5nZXREYXRhQ2VudGVyKCkuc2V0SW5mbygiQ2Fubm90IGNob29zZSBEYXRh
IENlbnRlciBpbiB0cmVlIGNvbnRleHQiKTsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBTdG9yYWdlOgogICAgICAgICAg
ICAgICAgc3RvcmFnZV9kb21haW5zIHN0b3JhZ2UgPSAoc3RvcmFnZV9kb21haW5zKSBtb2RlbC5n
ZXRCZWhhdmlvcigpLmdldFN5c3RlbVRyZWVTZWxlY3RlZEl0ZW0oKS5nZXRFbnRpdHkoKTsKICAg
ICAgICAgICAgICAgIGZvciAoc3RvcmFnZV9wb29sIGRjIDogbGlzdCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGMuZ2V0SWQoKS5lcXVhbHMoc3RvcmFnZS5nZXRz
dG9yYWdlX3Bvb2xfaWQoKSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBtb2RlbC5nZXREYXRhQ2VudGVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0SXRlbXMobmV3IEFycmF5TGlzdDxzdG9yYWdlX3Bvb2w+KEFycmF5cy5hc0xpc3Qo
bmV3IHN0b3JhZ2VfcG9vbFtdIHsgZGMgfSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgbW9k
ZWwuZ2V0RGF0YUNlbnRlcigpLnNldFNlbGVjdGVkSXRlbShkYyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGVsLmdldERhdGFDZW50ZXIoKS5zZXRJc0NoYW5nYWJsZShmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldERhdGFDZW50ZXIoKS5zZXRJbmZvKCJDYW5ub3Qg
Y2hvb3NlIERhdGEgQ2VudGVyIGluIHRyZWUgY29udGV4dCIpOyAvLyROT04tTkxTLTEkCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgICAgbW9kZWwuZ2V0RGF0YUNlbnRlcigpLnNldEl0ZW1zKGxpc3Qp
OwogICAgICAgICAgICBtb2RlbC5nZXREYXRhQ2VudGVyKCkuc2V0U2VsZWN0ZWRJdGVtKExpbnEu
Rmlyc3RPckRlZmF1bHQobGlzdCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgdm9pZCBT
ZXRDbHVzdGVycyhVbml0Vm1Nb2RlbCBtb2RlbCwgQXJyYXlMaXN0PFZEU0dyb3VwPiBjbHVzdGVy
cywgTkd1aWQgY2x1c3Rlckd1aWQpCiAgICB7CiAgICAgICAgVm1Nb2RlbEJlaGF2aW9yQmFzZSBi
ZWhhdmlvciA9IG1vZGVsLmdldEJlaGF2aW9yKCk7CiAgICAgICAgaWYgKGJlaGF2aW9yLmdldFN5
c3RlbVRyZWVTZWxlY3RlZEl0ZW0oKSAhPSBudWxsCiAgICAgICAgICAgICAgICAmJiBiZWhhdmlv
ci5nZXRTeXN0ZW1UcmVlU2VsZWN0ZWRJdGVtKCkuZ2V0VHlwZSgpICE9IFN5c3RlbVRyZWVJdGVt
VHlwZS5TeXN0ZW0pCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKG1vZGVsLmdldEJlaGF2
aW9yKCkuZ2V0U3lzdGVtVHJlZVNlbGVjdGVkSXRlbSgpLmdldFR5cGUoKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICBjYXNlIENsdXN0ZXI6CiAgICAgICAgICAgIGNhc2UgVk1zOgogICAgICAg
ICAgICAgICAgVkRTR3JvdXAgY2x1c3RlciA9IChWRFNHcm91cCkgYmVoYXZpb3IuZ2V0U3lzdGVt
VHJlZVNlbGVjdGVkSXRlbSgpLmdldEVudGl0eSgpOwogICAgICAgICAgICAgICAgbW9kZWwuZ2V0
Q2x1c3RlcigpLnNldEl0ZW1zKG5ldyBBcnJheUxpc3Q8VkRTR3JvdXA+KEFycmF5cy5hc0xpc3Qo
bmV3IFZEU0dyb3VwW10geyBjbHVzdGVyIH0pKSk7CiAgICAgICAgICAgICAgICBtb2RlbC5nZXRD
bHVzdGVyKCkuc2V0U2VsZWN0ZWRJdGVtKGNsdXN0ZXIpOwogICAgICAgICAgICAgICAgbW9kZWwu
Z2V0Q2x1c3RlcigpLnNldElzQ2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgICAgIG1vZGVs
LmdldENsdXN0ZXIoKS5zZXRJbmZvKCJDYW5ub3QgY2hvb3NlIENsdXN0ZXIgaW4gdHJlZSBjb250
ZXh0Iik7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBj
YXNlIEhvc3Q6CiAgICAgICAgICAgICAgICBWRFMgaG9zdCA9IChWRFMpIGJlaGF2aW9yLmdldFN5
c3RlbVRyZWVTZWxlY3RlZEl0ZW0oKS5nZXRFbnRpdHkoKTsKICAgICAgICAgICAgICAgIGZvciAo
VkRTR3JvdXAgaXRlckNsdXN0ZXIgOiBjbHVzdGVycykKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlckNsdXN0ZXIuZ2V0SWQoKS5lcXVhbHMoaG9zdC5nZXR2ZHNf
Z3JvdXBfaWQoKSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBtb2RlbC5nZXRDbHVzdGVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0
SXRlbXMobmV3IEFycmF5TGlzdDxWRFNHcm91cD4oQXJyYXlzLmFzTGlzdChuZXcgVkRTR3JvdXBb
XSB7IGl0ZXJDbHVzdGVyIH0pKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldENs
dXN0ZXIoKS5zZXRTZWxlY3RlZEl0ZW0oaXRlckNsdXN0ZXIpOwogICAgICAgICAgICAgICAgICAg
ICAgICBtb2RlbC5nZXRDbHVzdGVyKCkuc2V0SXNDaGFuZ2FibGUoZmFsc2UpOwogICAgICAgICAg
ICAgICAgICAgICAgICBtb2RlbC5nZXRDbHVzdGVyKCkuc2V0SW5mbygiQ2Fubm90IGNob29zZSBD
bHVzdGVyIGluIHRyZWUgY29udGV4dCIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
bW9kZWwuZ2V0Q2x1c3RlcigpLnNldEl0ZW1zKGNsdXN0ZXJzKTsKICAgICAgICAgICAgICAgIGlm
IChjbHVzdGVyR3VpZCA9PSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIG1vZGVsLmdldENsdXN0ZXIoKS5zZXRTZWxlY3RlZEl0ZW0oTGlucS5GaXJzdE9yRGVmYXVs
dChjbHVzdGVycykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldENsdXN0ZXIoKS5zZXRT
ZWxlY3RlZEl0ZW0oTGlucS5GaXJzdE9yRGVmYXVsdChjbHVzdGVycywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBMaW5xLkNsdXN0ZXJQcmVkaWNhdGUoKEd1aWQpIGNsdXN0ZXJHdWlk
KSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgIG1vZGVsLmdl
dENsdXN0ZXIoKS5zZXRJdGVtcyhjbHVzdGVycyk7CiAgICAgICAgICAgIGlmIChjbHVzdGVyR3Vp
ZCA9PSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtb2RlbC5nZXRDbHVzdGVy
KCkuc2V0U2VsZWN0ZWRJdGVtKExpbnEuRmlyc3RPckRlZmF1bHQoY2x1c3RlcnMpKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1v
ZGVsLmdldENsdXN0ZXIoKS5zZXRTZWxlY3RlZEl0ZW0oTGlucS5GaXJzdE9yRGVmYXVsdChjbHVz
dGVycywKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbnEuQ2x1c3RlclByZWRpY2F0ZSgo
R3VpZCkgY2x1c3Rlckd1aWQpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAg
cHVibGljIGJvb2xlYW4gVmFsaWRhdGUoKQogICAgewogICAgICAgIGdldERhdGFDZW50ZXIoKS5W
YWxpZGF0ZVNlbGVjdGVkSXRlbShuZXcgSVZhbGlkYXRpb25bXSB7IG5ldyBOb3RFbXB0eVZhbGlk
YXRpb24oKSB9KTsKICAgICAgICBnZXRDbHVzdGVyKCkuVmFsaWRhdGVTZWxlY3RlZEl0ZW0obmV3
IElWYWxpZGF0aW9uW10geyBuZXcgTm90RW1wdHlWYWxpZGF0aW9uKCkgfSk7CiAgICAgICAgZ2V0
TWVtU2l6ZSgpLlZhbGlkYXRlRW50aXR5KG5ldyBJVmFsaWRhdGlvbltdIHsgbmV3IEJ5dGVTaXpl
VmFsaWRhdGlvbigpIH0pOwogICAgICAgIGdldE1pbkFsbG9jYXRlZE1lbW9yeSgpLlZhbGlkYXRl
RW50aXR5KG5ldyBJVmFsaWRhdGlvbltdIHsgbmV3IEJ5dGVTaXplVmFsaWRhdGlvbigpIH0pOwog
ICAgICAgIGdldE9TVHlwZSgpLlZhbGlkYXRlU2VsZWN0ZWRJdGVtKG5ldyBOb3RFbXB0eVZhbGlk
YXRpb25bXSB7IG5ldyBOb3RFbXB0eVZhbGlkYXRpb24oKSB9KTsKCiAgICAgICAgc3RvcmFnZV9w
b29sIGRhdGFDZW50ZXIgPSAoc3RvcmFnZV9wb29sKSBnZXREYXRhQ2VudGVyKCkuZ2V0U2VsZWN0
ZWRJdGVtKCk7CiAgICAgICAgaWYgKGRhdGFDZW50ZXIgIT0gbnVsbCAmJiBkYXRhQ2VudGVyLmdl
dFF1b3RhRW5mb3JjZW1lbnRUeXBlKCkgPT0gUXVvdGFFbmZvcmNlbWVudFR5cGVFbnVtLkhBUkRf
RU5GT1JDRU1FTlQpIHsKICAgICAgICAgICAgZ2V0UXVvdGEoKS5WYWxpZGF0ZVNlbGVjdGVkSXRl
bShuZXcgSVZhbGlkYXRpb25bXSB7IG5ldyBOb3RFbXB0eVF1b3RhVmFsaWRhdGlvbigpIH0pOwog
ICAgICAgIH0KCiAgICAgICAgZ2V0VG90YWxDUFVDb3JlcygpLlZhbGlkYXRlRW50aXR5KG5ldyBJ
VmFsaWRhdGlvbltdIHsKICAgICAgICAgICAgICAgIG5ldyBOb3RFbXB0eVZhbGlkYXRpb24oKSwK
ICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyVmFsaWRhdGlvbigxLCBiZWhhdmlvci5tYXhDcHVz
KSwKICAgICAgICAgICAgICAgIG5ldyBUb3RhbENwdUNvcmVzQ29tcG9zYWJsZVZhbGlkYXRpb24o
KSB9KTsKCiAgICAgICAgaWYgKGdldE9TVHlwZSgpLmdldElzVmFsaWQoKSkKICAgICAgICB7CiAg
ICAgICAgICAgIFZtT3NUeXBlIG9zVHlwZSA9IChWbU9zVHlwZSkgZ2V0T1NUeXBlKCkuZ2V0U2Vs
ZWN0ZWRJdGVtKCk7CiAgICAgICAgICAgIGdldE5hbWUoKS5WYWxpZGF0ZUVudGl0eSgKICAgICAg
ICAgICAgICAgICAgICBuZXcgSVZhbGlkYXRpb25bXSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgTm90RW1wdHlWYWxpZGF0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXcgTGVuZ3RoVmFsaWRhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Z2V0QmVoYXZpb3IoKSBpbnN0YW5jZW9mIFRlbXBsYXRlVm1Nb2RlbEJlaGF2aW9yIHx8IGdldEJl
aGF2aW9yKCkgaW5zdGFuY2VvZiBOZXdUZW1wbGF0ZVZtTW9kZWxCZWhhdmlvcikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBWTV9URU1QTEFURV9OQU1FX01BWF9MSU1JVCA6
IEFzeW5jRGF0YVByb3ZpZGVyLklzV2luZG93c09zVHlwZShvc1R5cGUpID8gV0lORE9XU19WTV9O
QU1FX01BWF9MSU1JVCA6IE5PTl9XSU5ET1dTX1ZNX05BTUVfTUFYX0xJTUlUKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBJMThOTmFtZVZhbGlkYXRpb24oKQogICAgICAgICAgICAg
ICAgICAgIH0pOwoKICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb24oKS5WYWxpZGF0ZUVudGl0eSgK
ICAgICAgICAgICAgICAgICAgICBuZXcgSVZhbGlkYXRpb25bXSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgTGVuZ3RoVmFsaWRhdGlvbihERVNDUklQVElPTl9NQVhfTElNSVQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNwZWNpYWxBc2NpaUkxOE5Pck5vbmVWYWxp
ZGF0aW9uKCkKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGJvb2xlYW4gaXM2
NE9zVHlwZSA9CiAgICAgICAgICAgICAgICAgICAgKG9zVHlwZSA9PSBWbU9zVHlwZS5PdGhlciB8
fCBvc1R5cGUgPT0gVm1Pc1R5cGUuT3RoZXJMaW51eCB8fCBBc3luY0RhdGFQcm92aWRlci5JczY0
Yml0T3NUeXBlKG9zVHlwZSkpOwogICAgICAgICAgICBpbnQgbWF4TWVtU2l6ZSA9IGlzNjRPc1R5
cGUgPyBnZXRfTWF4TWVtU2l6ZTY0KCkgOiBnZXRfTWF4TWVtU2l6ZTMyKCk7CgogICAgICAgICAg
ICBWYWxpZGF0ZU1lbW9yeVNpemUoZ2V0TWVtU2l6ZSgpLCBtYXhNZW1TaXplLCBfbWluTWVtU2l6
ZSk7CiAgICAgICAgICAgIGlmICghKHRoaXMuZ2V0QmVoYXZpb3IoKSBpbnN0YW5jZW9mIFRlbXBs
YXRlVm1Nb2RlbEJlaGF2aW9yKSkgewogICAgICAgICAgICAgICAgLy8gTWluaW11bSAnUGh5c2lj
YWwgTWVtb3J5IEd1YXJhbnRlZWQnIGlzIDFNQgogICAgICAgICAgICAgICAgVmFsaWRhdGVNZW1v
cnlTaXplKGdldE1pbkFsbG9jYXRlZE1lbW9yeSgpLCAoSW50ZWdlcikgZ2V0TWVtU2l6ZSgpLmdl
dEVudGl0eSgpLCAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKChCb29s
ZWFuKSBnZXRJc0F1dG9Bc3NpZ24oKS5nZXRFbnRpdHkoKSA9PSBmYWxzZSAmJiAoQm9vbGVhbikg
Z2V0UnVuVk1PblRydXN0ZWRIb3N0KCkuZ2V0RW50aXR5KCkgPT0gZmFsc2UgKSB7CiAgICAgICAg
ICAgIGdldERlZmF1bHRIb3N0KCkuVmFsaWRhdGVTZWxlY3RlZEl0ZW0obmV3IElWYWxpZGF0aW9u
W10geyBuZXcgTm90RW1wdHlWYWxpZGF0aW9uKCkgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgZ2V0RGVmYXVsdEhvc3QoKS5zZXRJc1ZhbGlkKHRydWUpOwogICAgICAgIH0KCiAgICAg
ICAgZ2V0VGVtcGxhdGUoKS5WYWxpZGF0ZVNlbGVjdGVkSXRlbShuZXcgSVZhbGlkYXRpb25bXSB7
IG5ldyBOb3RFbXB0eVZhbGlkYXRpb24oKSB9KTsKICAgICAgICBnZXREaXNrc0FsbG9jYXRpb25N
b2RlbCgpLlZhbGlkYXRlRW50aXR5KG5ldyBJVmFsaWRhdGlvbltdIHt9KTsKCiAgICAgICAgZ2V0
Q2RJbWFnZSgpLnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgaWYgKGdldENkSW1hZ2UoKS5nZXRJ
c0NoYW5nYWJsZSgpKSB7CiAgICAgICAgICAgIGdldENkSW1hZ2UoKS5WYWxpZGF0ZVNlbGVjdGVk
SXRlbShuZXcgSVZhbGlkYXRpb25bXSB7IG5ldyBOb3RFbXB0eVZhbGlkYXRpb24oKSB9KTsKICAg
ICAgICB9CgogICAgICAgIGdldEtlcm5lbF9wYXRoKCkuc2V0SXNWYWxpZCh0cnVlKTsKICAgICAg
ICBnZXRLZXJuZWxfcGFyYW1ldGVycygpLnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgZ2V0SW5p
dHJkX3BhdGgoKS5zZXRJc1ZhbGlkKHRydWUpOwogICAgICAgIGlmIChnZXRLZXJuZWxfcGF0aCgp
LmdldEVudGl0eSgpID09IG51bGwpIHsKICAgICAgICAgICAgZ2V0S2VybmVsX3BhdGgoKS5zZXRF
bnRpdHkoIiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAgICAgIGlmIChnZXRLZXJuZWxf
cGFyYW1ldGVycygpLmdldEVudGl0eSgpID09IG51bGwpIHsKICAgICAgICAgICAgZ2V0S2VybmVs
X3BhcmFtZXRlcnMoKS5zZXRFbnRpdHkoIiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAg
ICAgIGlmIChnZXRJbml0cmRfcGF0aCgpLmdldEVudGl0eSgpID09IG51bGwpIHsKICAgICAgICAg
ICAgZ2V0SW5pdHJkX3BhdGgoKS5zZXRFbnRpdHkoIiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAg
fQoKICAgICAgICBpZiAoaXNMaW51eF9VbmFzc2lnbl9Vbmtub3duT1MpIHsKICAgICAgICAgICAg
Z2V0S2VybmVsX3BhdGgoKS5WYWxpZGF0ZUVudGl0eShuZXcgSVZhbGlkYXRpb25bXSB7IG5ldyBO
b1RyaW1taW5nV2hpdGVzcGFjZXNWYWxpZGF0aW9uKCkgfSk7CiAgICAgICAgICAgIGdldEluaXRy
ZF9wYXRoKCkuVmFsaWRhdGVFbnRpdHkobmV3IElWYWxpZGF0aW9uW10geyBuZXcgTm9UcmltbWlu
Z1doaXRlc3BhY2VzVmFsaWRhdGlvbigpIH0pOwogICAgICAgICAgICBnZXRLZXJuZWxfcGFyYW1l
dGVycygpLlZhbGlkYXRlRW50aXR5KG5ldyBJVmFsaWRhdGlvbltdIHsgbmV3IE5vVHJpbW1pbmdX
aGl0ZXNwYWNlc1ZhbGlkYXRpb24oKSB9KTsKCiAgICAgICAgICAgIFN0cmluZyBrZXJuZWxQYXRo
ID0gKFN0cmluZykgZ2V0S2VybmVsX3BhdGgoKS5nZXRFbnRpdHkoKTsKICAgICAgICAgICAgU3Ry
aW5nIGluaXRyZFBhdGggPSAoU3RyaW5nKSBnZXRJbml0cmRfcGF0aCgpLmdldEVudGl0eSgpOwog
ICAgICAgICAgICBTdHJpbmcga2VybmVsUGFyYW1zID0gKFN0cmluZykgZ2V0S2VybmVsX3BhcmFt
ZXRlcnMoKS5nZXRFbnRpdHkoKTsKCiAgICAgICAgICAgIGlmICgoa2VybmVsUGFyYW1zLmxlbmd0
aCgpID4gMCB8fCBpbml0cmRQYXRoLmxlbmd0aCgpID4gMCkgJiYga2VybmVsUGF0aC5sZW5ndGgo
KSA9PSAwKSB7CiAgICAgICAgICAgICAgICBib29sZWFuIGtlcm5lbFBhcmFtSW52YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgYm9vbGVhbiBpbmV0ZFBhdGhJbnZhbGlkID0gZmFsc2U7Cgog
ICAgICAgICAgICAgICAgaWYgKGtlcm5lbFBhcmFtcy5sZW5ndGgoKSA+IDApIHsKICAgICAgICAg
ICAgICAgICAgICBnZXRLZXJuZWxfcGFyYW1ldGVycygpLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtSW52YWxpZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBpZiAoaW5pdHJkUGF0aC5sZW5ndGgoKSA+IDApIHsKICAgICAg
ICAgICAgICAgICAgICBnZXRJbml0cmRfcGF0aCgpLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAg
ICAgICAgICAgICAgIGluZXRkUGF0aEludmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPQogICAgICAgICAgICAgICAgICAgICAgICBDb25z
dGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuZ2V0TWVzc2FnZXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbnZhbGlk
UGF0aChrZXJuZWxQYXJhbUludmFsaWQgPyBDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmtlcm5lbEludmFsaWQoKSA6
ICIiLCAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrZXJuZWxQYXJhbUludmFsaWQgJiYgaW5ldGRQYXRoSW52YWxpZCA/IENvbnN0YW50c01hbmFn
ZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZ2V0Q29uc3RhbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLm9yKCkgOiAiIiwgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldGRQYXRoSW52YWxpZCA/IENvbnN0YW50c01hbmFn
ZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZ2V0Q29uc3RhbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmluZXRkSW52YWxpZCgpIDogIiIpOyAvLyROT04tTkxTLTEkCgogICAg
ICAgICAgICAgICAgZ2V0S2VybmVsX3BhdGgoKS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAg
ICAgICAgIGdldEluaXRyZF9wYXRoKCkuZ2V0SW52YWxpZGl0eVJlYXNvbnMoKS5hZGQobXNnKTsK
ICAgICAgICAgICAgICAgIGdldEtlcm5lbF9wYXJhbWV0ZXJzKCkuZ2V0SW52YWxpZGl0eVJlYXNv
bnMoKS5hZGQobXNnKTsKICAgICAgICAgICAgICAgIGdldEtlcm5lbF9wYXRoKCkuZ2V0SW52YWxp
ZGl0eVJlYXNvbnMoKS5hZGQobXNnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
Ym9vbGVhbiBjdXN0b21Qcm9wZXJ0eVNoZWV0VmFsaWQgPSBnZXRDdXN0b21Qcm9wZXJ0eVNoZWV0
KCkudmFsaWRhdGUoKTsKCiAgICAgICAgc2V0SXNCb290U2VxdWVuY2VUYWJWYWxpZCh0cnVlKTsK
ICAgICAgICBzZXRJc0FsbG9jYXRpb25UYWJWYWxpZChnZXRJc0Jvb3RTZXF1ZW5jZVRhYlZhbGlk
KCkpOwogICAgICAgIHNldElzRGlzcGxheVRhYlZhbGlkKGdldElzQWxsb2NhdGlvblRhYlZhbGlk
KCkpOwogICAgICAgIHNldElzRmlyc3RSdW5UYWJWYWxpZChnZXRJc0Rpc3BsYXlUYWJWYWxpZCgp
KTsKICAgICAgICBzZXRJc0dlbmVyYWxUYWJWYWxpZChnZXRJc0ZpcnN0UnVuVGFiVmFsaWQoKSk7
CgogICAgICAgIHNldElzR2VuZXJhbFRhYlZhbGlkKGdldE5hbWUoKS5nZXRJc1ZhbGlkKCkgJiYg
Z2V0RGVzY3JpcHRpb24oKS5nZXRJc1ZhbGlkKCkgJiYgZ2V0RGF0YUNlbnRlcigpLmdldElzVmFs
aWQoKQogICAgICAgICAgICAgICAgJiYgZ2V0VGVtcGxhdGUoKS5nZXRJc1ZhbGlkKCkgJiYgZ2V0
Q2x1c3RlcigpLmdldElzVmFsaWQoKSAmJiBnZXRNZW1TaXplKCkuZ2V0SXNWYWxpZCgpCiAgICAg
ICAgICAgICAgICAmJiBnZXRNaW5BbGxvY2F0ZWRNZW1vcnkoKS5nZXRJc1ZhbGlkKCkpOwoKICAg
ICAgICBzZXRJc0ZpcnN0UnVuVGFiVmFsaWQoZ2V0RG9tYWluKCkuZ2V0SXNWYWxpZCgpICYmIGdl
dFRpbWVab25lKCkuZ2V0SXNWYWxpZCgpKTsKICAgICAgICBzZXRJc0Rpc3BsYXlUYWJWYWxpZChn
ZXRVc2JQb2xpY3koKS5nZXRJc1ZhbGlkKCkgJiYgZ2V0TnVtT2ZNb25pdG9ycygpLmdldElzVmFs
aWQoKSk7CiAgICAgICAgc2V0SXNIb3N0VGFiVmFsaWQoZ2V0RGVmYXVsdEhvc3QoKS5nZXRJc1Zh
bGlkKCkpOwogICAgICAgIHNldElzQWxsb2NhdGlvblRhYlZhbGlkKGdldERpc2tzQWxsb2NhdGlv
bk1vZGVsKCkuZ2V0SXNWYWxpZCgpICYmIGdldE1pbkFsbG9jYXRlZE1lbW9yeSgpLmdldElzVmFs
aWQoKSk7CiAgICAgICAgc2V0SXNCb290U2VxdWVuY2VUYWJWYWxpZChnZXRDZEltYWdlKCkuZ2V0
SXNWYWxpZCgpICYmIGdldEtlcm5lbF9wYXRoKCkuZ2V0SXNWYWxpZCgpKTsKICAgICAgICBzZXRJ
c0N1c3RvbVByb3BlcnRpZXNUYWJWYWxpZChjdXN0b21Qcm9wZXJ0eVNoZWV0VmFsaWQpOwoKICAg
ICAgICByZXR1cm4gZ2V0TmFtZSgpLmdldElzVmFsaWQoKSAmJiBnZXREZXNjcmlwdGlvbigpLmdl
dElzVmFsaWQoKSAmJiBnZXREYXRhQ2VudGVyKCkuZ2V0SXNWYWxpZCgpCiAgICAgICAgICAgICAg
ICAmJiBnZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpLmdldElzVmFsaWQoKSAmJiBnZXRUZW1wbGF0
ZSgpLmdldElzVmFsaWQoKSAmJiBnZXRDbHVzdGVyKCkuZ2V0SXNWYWxpZCgpCiAgICAgICAgICAg
ICAgICAmJiBnZXREZWZhdWx0SG9zdCgpLmdldElzVmFsaWQoKSAmJiBnZXRNZW1TaXplKCkuZ2V0
SXNWYWxpZCgpICYmIGdldE1pbkFsbG9jYXRlZE1lbW9yeSgpLmdldElzVmFsaWQoKQogICAgICAg
ICAgICAgICAgJiYgZ2V0TnVtT2ZNb25pdG9ycygpLmdldElzVmFsaWQoKSAmJiBnZXREb21haW4o
KS5nZXRJc1ZhbGlkKCkgJiYgZ2V0VXNiUG9saWN5KCkuZ2V0SXNWYWxpZCgpCiAgICAgICAgICAg
ICAgICAmJiBnZXRUaW1lWm9uZSgpLmdldElzVmFsaWQoKSAmJiBnZXRPU1R5cGUoKS5nZXRJc1Zh
bGlkKCkgJiYgZ2V0Q2RJbWFnZSgpLmdldElzVmFsaWQoKQogICAgICAgICAgICAgICAgJiYgZ2V0
S2VybmVsX3BhdGgoKS5nZXRJc1ZhbGlkKCkKICAgICAgICAgICAgICAgICYmIGdldEtlcm5lbF9w
YXJhbWV0ZXJzKCkuZ2V0SXNWYWxpZCgpICYmIGdldEluaXRyZF9wYXRoKCkuZ2V0SXNWYWxpZCgp
CiAgICAgICAgICAgICAgICAmJiBiZWhhdmlvci5WYWxpZGF0ZSgpCiAgICAgICAgICAgICAgICAm
JiBjdXN0b21Qcm9wZXJ0eVNoZWV0VmFsaWQgJiYgZ2V0UXVvdGEoKS5nZXRJc1ZhbGlkKCk7Cgog
ICAgfQoKICAgIGNsYXNzIFRvdGFsQ3B1Q29yZXNDb21wb3NhYmxlVmFsaWRhdGlvbiBpbXBsZW1l
bnRzIElWYWxpZGF0aW9uIHsKCiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIFZhbGlk
YXRpb25SZXN1bHQgVmFsaWRhdGUoT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgICAgIGJvb2xlYW4g
aXNPayA9IGJlaGF2aW9yLmlzTnVtT2ZTb2NrZXRzQ29ycmVjdChJbnRlZ2VyLnBhcnNlSW50KGdl
dFRvdGFsQ1BVQ29yZXMoKS5nZXRFbnRpdHkoKS50b1N0cmluZygpKSk7CiAgICAgICAgICAgIFZh
bGlkYXRpb25SZXN1bHQgcmVzID0gbmV3IFZhbGlkYXRpb25SZXN1bHQoKTsKICAgICAgICAgICAg
cmVzLnNldFN1Y2Nlc3MoaXNPayk7CiAgICAgICAgICAgIHJlcy5zZXRSZWFzb25zKEFycmF5cy5h
c0xpc3QoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAg
LmdldE1lc3NhZ2VzKCkKICAgICAgICAgICAgICAgICAgICAuaW5jb3JyZWN0VkNQVU51bWJlcigp
KSk7CiAgICAgICAgICAgIHJldHVybiByZXM7CgogICAgICAgIH0KCiAgICB9CgogICAgcHJpdmF0
ZSB2b2lkIFZhbGlkYXRlTWVtb3J5U2l6ZShFbnRpdHlNb2RlbCBtb2RlbCwgaW50IG1heE1lbVNp
emUsIGludCBtaW5NZW1TaXplKQogICAgewogICAgICAgIGJvb2xlYW4gaXNWYWxpZCA9IGZhbHNl
OwoKICAgICAgICBpbnQgbWVtU2l6ZSA9IChJbnRlZ2VyKSBtb2RlbC5nZXRFbnRpdHkoKTsKCiAg
ICAgICAgaWYgKG1lbVNpemUgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIG1vZGVsLmdldElu
dmFsaWRpdHlSZWFzb25zKCkuYWRkKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKQogICAg
ICAgICAgICAgICAgICAgIC5nZXRNZXNzYWdlcygpCiAgICAgICAgICAgICAgICAgICAgLm1lbVNp
emVCZXR3ZWVuKG1pbk1lbVNpemUsIG1heE1lbVNpemUpKTsKICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZiAobWVtU2l6ZSA+IG1heE1lbVNpemUpCiAgICAgICAgewogICAgICAgICAgICBtb2RlbC5n
ZXRJbnZhbGlkaXR5UmVhc29ucygpLmFkZChDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkK
ICAgICAgICAgICAgICAgICAgICAuZ2V0TWVzc2FnZXMoKQogICAgICAgICAgICAgICAgICAgIC5t
YXhNZW1TaXplSXMobWF4TWVtU2l6ZSkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChtZW1T
aXplIDwgbWluTWVtU2l6ZSkKICAgICAgICB7CiAgICAgICAgICAgIG1vZGVsLmdldEludmFsaWRp
dHlSZWFzb25zKCkuYWRkKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAg
ICAgICAgICAgIC5nZXRNZXNzYWdlcygpCiAgICAgICAgICAgICAgICAgICAgLm1pbk1lbVNpemVJ
cyhtaW5NZW1TaXplKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICAgIGlzVmFsaWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgbW9kZWwuc2V0SXNWYWxpZChp
c1ZhbGlkKTsKICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sTGlzdE1v
ZGVsIHBvb2xUeXBlOwoKICAgIHB1YmxpYyBMaXN0TW9kZWwgZ2V0UG9vbFR5cGUoKQogICAgewog
ICAgICAgIHJldHVybiBwb29sVHlwZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgdm9pZCBzZXRQb29s
VHlwZShOb3RDaGFuZ2FibGVGb3JWbUluUG9vbExpc3RNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAg
ICBwb29sVHlwZSA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1J
blBvb2xFbnRpdHlNb2RlbCBudW1PZkRlc2t0b3BzOwoKICAgIHB1YmxpYyBFbnRpdHlNb2RlbCBn
ZXROdW1PZkRlc2t0b3BzKCkKICAgIHsKICAgICAgICByZXR1cm4gbnVtT2ZEZXNrdG9wczsKICAg
IH0KCiAgICBwcm90ZWN0ZWQgdm9pZCBzZXROdW1PZkRlc2t0b3BzKE5vdENoYW5nYWJsZUZvclZt
SW5Qb29sRW50aXR5TW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgbnVtT2ZEZXNrdG9wcyA9IHZh
bHVlOwogICAgfQoKICAgIHByaXZhdGUgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xFbnRpdHlNb2Rl
bCBhc3NpZ25lZFZtczsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0QXNzaWduZWRWbXMoKQog
ICAgewogICAgICAgIHJldHVybiBhc3NpZ25lZFZtczsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBz
ZXRBc3NpZ25lZFZtcyhOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIHZhbHVlKQog
ICAgewogICAgICAgIGFzc2lnbmVkVm1zID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBib29s
ZWFuIGlzUG9vbFRhYlZhbGlkOwoKICAgIHB1YmxpYyBib29sZWFuIGdldElzUG9vbFRhYlZhbGlk
KCkKICAgIHsKICAgICAgICByZXR1cm4gaXNQb29sVGFiVmFsaWQ7CiAgICB9CgogICAgcHVibGlj
IHZvaWQgc2V0SXNQb29sVGFiVmFsaWQoYm9vbGVhbiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAo
aXNQb29sVGFiVmFsaWQgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpc1Bvb2xUYWJW
YWxpZCA9IHZhbHVlOwogICAgICAgICAgICBPblByb3BlcnR5Q2hhbmdlZChuZXcgUHJvcGVydHlD
aGFuZ2VkRXZlbnRBcmdzKCJJc1Bvb2xUYWJWYWxpZCIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAg
IH0KICAgIH0KCiAgICBwcml2YXRlIE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwg
cHJlc3RhcnRlZFZtczsKCiAgICBwdWJsaWMgRW50aXR5TW9kZWwgZ2V0UHJlc3RhcnRlZFZtcygp
IHsKICAgICAgICByZXR1cm4gcHJlc3RhcnRlZFZtczsKICAgIH0KCiAgICBwcm90ZWN0ZWQgdm9p
ZCBzZXRQcmVzdGFydGVkVm1zKE5vdENoYW5nYWJsZUZvclZtSW5Qb29sRW50aXR5TW9kZWwgdmFs
dWUpIHsKICAgICAgICBwcmVzdGFydGVkVm1zID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBT
dHJpbmcgcHJlc3RhcnRlZFZtc0hpbnQ7CgogICAgcHVibGljIFN0cmluZyBnZXRQcmVzdGFydGVk
Vm1zSGludCgpIHsKICAgICAgICByZXR1cm4gcHJlc3RhcnRlZFZtc0hpbnQ7CiAgICB9CgogICAg
cHVibGljIHZvaWQgc2V0UHJlc3RhcnRlZFZtc0hpbnQoU3RyaW5nIHZhbHVlKSB7CiAgICAgICAg
aWYgKHByZXN0YXJ0ZWRWbXNIaW50ICE9IHZhbHVlKSB7CiAgICAgICAgICAgIHByZXN0YXJ0ZWRW
bXNIaW50ID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0
eUNoYW5nZWRFdmVudEFyZ3MoIlByZXN0YXJ0ZWRWbXNIaW50IikpOyAvLyROT04tTkxTLTEkCiAg
ICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgY2xhc3MgTm90Q2hhbmdhYmxlRm9yVm1JblBvb2xM
aXN0TW9kZWwgZXh0ZW5kcyBMaXN0TW9kZWwgewogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1
YmxpYyB2b2lkIHNldElzQ2hhbmdhYmxlKGJvb2xlYW4gdmFsdWUpIHsKICAgICAgICAgICAgaWYg
KCFpc1ZtQXR0YWNoZWRUb1Bvb2woKSkKICAgICAgICAgICAgICAgIHN1cGVyLnNldElzQ2hhbmdh
YmxlKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBjbGFzcyBOb3RDaGFuZ2Fi
bGVGb3JWbUluUG9vbEVudGl0eU1vZGVsIGV4dGVuZHMgRW50aXR5TW9kZWwgewogICAgICAgIEBP
dmVycmlkZQogICAgICAgIHB1YmxpYyB2b2lkIHNldElzQ2hhbmdhYmxlKGJvb2xlYW4gdmFsdWUp
IHsKICAgICAgICAgICAgaWYgKCFpc1ZtQXR0YWNoZWRUb1Bvb2woKSkKICAgICAgICAgICAgICAg
IHN1cGVyLnNldElzQ2hhbmdhYmxlKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0
ZSBjbGFzcyBOb3RDaGFuZ2FibGVGb3JWbUluUG9vbEtleVZhbHVlTW9kZWwgZXh0ZW5kcyBLZXlW
YWx1ZU1vZGVsIHsKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgdm9pZCBzZXRJc0No
YW5nYWJsZShib29sZWFuIHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghaXNWbUF0dGFjaGVkVG9Q
b29sKCkpCiAgICAgICAgICAgICAgICBzdXBlci5zZXRJc0NoYW5nYWJsZSh2YWx1ZSk7CiAgICAg
ICAgfQogICAgfQp9Cg==
--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_
Content-Type: application/octet-stream; name="AbstractVmPopupWidget.java"
Content-Description: AbstractVmPopupWidget.java
Content-Disposition: attachment; filename="AbstractVmPopupWidget.java";
size=44510; creation-date="Tue, 12 Mar 2013 08:33:20 GMT";
modification-date="Tue, 12 Mar 2013 08:24:49 GMT"
Content-Transfer-Encoding: base64
cGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQudWljb21tb24ucG9wdXA7
CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBv
cnQgamF2YS51dGlsLk1hcC5FbnRyeTsKCmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29t
bW9uLmJ1c2luZXNzZW50aXRpZXMuRGlzazsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5j
b21tb24uYnVzaW5lc3NlbnRpdGllcy5EaXNrLkRpc2tTdG9yYWdlVHlwZTsKaW1wb3J0IG9yZy5v
dmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5EaXNrSW1hZ2U7CmltcG9y
dCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMuSW1hZ2VTdGF0
dXM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMu
UXVvdGE7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRp
ZXMuVXNiUG9saWN5OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVz
c2VudGl0aWVzLlZEUzsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5l
c3NlbnRpdGllcy5WRFNHcm91cDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24u
YnVzaW5lc3NlbnRpdGllcy5WbVRlbXBsYXRlOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3Jl
LmNvbW1vbi5idXNpbmVzc2VudGl0aWVzLlZtVHlwZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu
Y29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5zdG9yYWdlX3Bvb2w7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLmNvcmUuY29tcGF0LkV2ZW50OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3Jl
LmNvbXBhdC5FdmVudEFyZ3M7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tcGF0LklF
dmVudExpc3RlbmVyOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbXBhdC5Qcm9wZXJ0
eUNoYW5nZWRFdmVudEFyZ3M7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi5Db21t
b25BcHBsaWNhdGlvbkNvbnN0YW50czsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9u
LkNvbW1vbkFwcGxpY2F0aW9uTWVzc2FnZXM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNv
bW1vbi5Db21tb25BcHBsaWNhdGlvblJlc291cmNlczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu
dWkuY29tbW9uLmlkaGFuZGxlci5XaXRoRWxlbWVudElkOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2lu
ZS51aS5jb21tb24ud2lkZ2V0LkFsaWduOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS5jb21t
b24ud2lkZ2V0LmRpYWxvZy5BZHZhbmNlZFBhcmFtZXRlcnNFeHBhbmRlcjsKaW1wb3J0IG9yZy5v
dmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdldC5kaWFsb2cuSW5mb0ljb247CmltcG9ydCBvcmcu
b3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQuZGlhbG9nLnRhYi5EaWFsb2dUYWI7CmltcG9y
dCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQuZGlhbG9nLnRhYi5EaWFsb2dUYWJQ
YW5lbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdldC5lZGl0b3IuRW50
aXR5TW9kZWxDZWxsVGFibGU7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRn
ZXQuZWRpdG9yLkVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3I7CmltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLnVpLmNvbW1vbi53aWRnZXQuZWRpdG9yLkVudGl0eU1vZGVsUmFkaW9CdXR0b25FZGl0b3I7
CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQuZWRpdG9yLkVudGl0eU1v
ZGVsVGV4dEJveEVkaXRvcjsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdl
dC5lZGl0b3IuRW50aXR5TW9kZWxUZXh0Qm94T25seUVkaXRvcjsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkuY29tbW9uLndpZGdldC5lZGl0b3IuTGlzdE1vZGVsTGlzdEJveEVkaXRvcjsKaW1w
b3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdldC5mb3JtLmtleV92YWx1ZS5LZXlW
YWx1ZVdpZGdldDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdldC5wYXJz
ZXIuTWVtb3J5U2l6ZVBhcnNlcjsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndp
ZGdldC5yZW5kZXJlci5FbnVtUmVuZGVyZXI7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLmNv
bW1vbi53aWRnZXQucmVuZGVyZXIuTWVtb3J5U2l6ZVJlbmRlcmVyOwppbXBvcnQgb3JnLm92aXJ0
LmVuZ2luZS51aS5jb21tb24ud2lkZ2V0LnJlbmRlcmVyLk51bGxTYWZlUmVuZGVyZXI7CmltcG9y
dCBvcmcub3ZpcnQuZW5naW5lLnVpLmNvbW1vbi53aWRnZXQudGFibGUuY29sdW1uLlRleHRDb2x1
bW5XaXRoVG9vbHRpcDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuY29tbW9uLndpZGdldC51
aWNvbW1vbi5zdG9yYWdlLkRpc2tzQWxsb2NhdGlvblZpZXc7CmltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy5FbnRpdHlNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLkxpc3RNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLnZtcy5EaXNrTW9kZWw7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy52bXMuVW5pdFZtTW9kZWw7CmltcG9ydCBv
cmcub3ZpcnQuZW5naW5lLnVpLnVpY29tcGF0LkVudW1UcmFuc2xhdG9yOwppbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS51aS51aWNvbXBhdC5leHRlcm5hbC5TdHJpbmdVdGlsczsKCmltcG9ydCBjb20u
Z29vZ2xlLmd3dC5jb3JlLmNsaWVudC5HV1Q7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC5lZGl0b3Iu
Y2xpZW50LlNpbXBsZUJlYW5FZGl0b3JEcml2ZXI7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVu
dC5kb20uY2xpZW50LkNsaWNrRXZlbnQ7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5kb20u
Y2xpZW50LkNsaWNrSGFuZGxlcjsKaW1wb3J0IGNvbS5nb29nbGUuZ3d0LmV2ZW50LmxvZ2ljYWwu
c2hhcmVkLlZhbHVlQ2hhbmdlRXZlbnQ7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC5ldmVudC5sb2dp
Y2FsLnNoYXJlZC5WYWx1ZUNoYW5nZUhhbmRsZXI7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC5yZXNv
dXJjZXMuY2xpZW50LkNzc1Jlc291cmNlOwppbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FmZWh0bWwu
Y2xpZW50LlNhZmVIdG1sVGVtcGxhdGVzOwppbXBvcnQgY29tLmdvb2dsZS5nd3Quc2FmZWh0bWwu
c2hhcmVkLlNhZmVIdG1sOwppbXBvcnQgY29tLmdvb2dsZS5nd3QudGV4dC5zaGFyZWQuQWJzdHJh
Y3RSZW5kZXJlcjsKaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVpYmluZGVyLmNsaWVudC5VaUJpbmRl
cjsKaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVpYmluZGVyLmNsaWVudC5VaUZpZWxkOwppbXBvcnQg
Y29tLmdvb2dsZS5nd3QudXNlci5jZWxsdmlldy5jbGllbnQuQ2VsbFRhYmxlOwppbXBvcnQgY29t
Lmdvb2dsZS5nd3QudXNlci5jZWxsdmlldy5jbGllbnQuQ2VsbFRhYmxlLlJlc291cmNlczsKaW1w
b3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkZsb3dQYW5lbDsKaW1wb3J0IGNvbS5n
b29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLkhUTUw7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2Vy
LmNsaWVudC51aS5Ib3Jpem9udGFsUGFuZWw7CmltcG9ydCBjb20uZ29vZ2xlLmd3dC51c2VyLmNs
aWVudC51aS5MYWJlbDsKaW1wb3J0IGNvbS5nb29nbGUuZ3d0LnVzZXIuY2xpZW50LnVpLlBhbmVs
OwppbXBvcnQgY29tLmdvb2dsZS5nd3QudXNlci5jbGllbnQudWkuUmFkaW9CdXR0b247CmltcG9y
dCBjb20uZ29vZ2xlLmd3dC51c2VyLmNsaWVudC51aS5WYWx1ZUxhYmVsOwoKcHVibGljIGFic3Ry
YWN0IGNsYXNzIEFic3RyYWN0Vm1Qb3B1cFdpZGdldCBleHRlbmRzIEFic3RyYWN0TW9kZWxCb3Vu
ZFBvcHVwV2lkZ2V0PFVuaXRWbU1vZGVsPiB7CgogICAgaW50ZXJmYWNlIERyaXZlciBleHRlbmRz
IFNpbXBsZUJlYW5FZGl0b3JEcml2ZXI8VW5pdFZtTW9kZWwsIEFic3RyYWN0Vm1Qb3B1cFdpZGdl
dD4gewogICAgICAgIERyaXZlciBkcml2ZXIgPSBHV1QuY3JlYXRlKERyaXZlci5jbGFzcyk7CiAg
ICB9CgogICAgaW50ZXJmYWNlIFZpZXdVaUJpbmRlciBleHRlbmRzIFVpQmluZGVyPERpYWxvZ1Rh
YlBhbmVsLCBBYnN0cmFjdFZtUG9wdXBXaWRnZXQ+IHsKICAgICAgICBWaWV3VWlCaW5kZXIgdWlC
aW5kZXIgPSBHV1QuY3JlYXRlKFZpZXdVaUJpbmRlci5jbGFzcyk7CiAgICB9CgogICAgcHJvdGVj
dGVkIGludGVyZmFjZSBTdHlsZSBleHRlbmRzIENzc1Jlc291cmNlIHsKICAgICAgICBTdHJpbmcg
bG9uZ0NoZWNrYm94Q29udGVudCgpOwoKICAgICAgICBTdHJpbmcgcHJvdmlzaW9uaW5nRWRpdG9y
Q29udGVudCgpOwoKICAgICAgICBTdHJpbmcgcHJvdmlzaW9uaW5nUmFkaW9Db250ZW50KCk7Cgog
ICAgICAgIFN0cmluZyBjZEF0dGFjaGVkTGFiZWxXaWR0aCgpOwoKICAgICAgICBTdHJpbmcgYXNz
aWduZWRWbXNMYWJlbCgpOwoKICAgICAgICBTdHJpbmcgbGFiZWxEaXNhYmxlZCgpOwogICAgfQoK
ICAgIGludGVyZmFjZSBQcmVzdGFydGVkVm1zQ29udGV4dEhlbHAgZXh0ZW5kcyBTYWZlSHRtbFRl
bXBsYXRlcyB7CiAgICAgICAgQFRlbXBsYXRlKCI8aT57MH08L2k+IikKICAgICAgICBTYWZlSHRt
bCBpdGFsaWNUZXh0Q29udGFpbmVyKFN0cmluZyB0ZXh0KTsKICAgIH0KCiAgICBwcml2YXRlIHN0
YXRpYyBQcmVzdGFydGVkVm1zQ29udGV4dEhlbHAgcHJlc3RhcnRlZFZtc0NvbnRleHRIZWxwOwoK
ICAgIEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgU3R5bGUgc3R5bGU7CgogICAgLy8gPT1HZW5lcmFs
IFRhYj09CiAgICBAVWlGaWVsZAogICAgcHJvdGVjdGVkIERpYWxvZ1RhYiBnZW5lcmFsVGFiOwoK
ICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVlID0gImRhdGFDZW50
ZXIuc2VsZWN0ZWRJdGVtIikKICAgIEBXaXRoRWxlbWVudElkKCJkYXRhQ2VudGVyIikKICAgIHB1
YmxpYyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4gZGF0YUNlbnRlckVkaXRvcjsKCiAg
ICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJjbHVzdGVyLnNl
bGVjdGVkSXRlbSIpCiAgICBAV2l0aEVsZW1lbnRJZCgiY2x1c3RlciIpCiAgICBwdWJsaWMgTGlz
dE1vZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+IGNsdXN0ZXJFZGl0b3I7CgogICAgQFVpRmllbGQo
cHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAicXVvdGEuc2VsZWN0ZWRJdGVtIikK
ICAgIEBXaXRoRWxlbWVudElkKCJxdW90YSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJveEVk
aXRvcjxPYmplY3Q+IHF1b3RhRWRpdG9yOwoKICAgIEBVaUZpZWxkCiAgICBAUGF0aCh2YWx1ZSA9
ICJuYW1lLmVudGl0eSIpCiAgICBAV2l0aEVsZW1lbnRJZCgibmFtZSIpCiAgICBwdWJsaWMgRW50
aXR5TW9kZWxUZXh0Qm94RWRpdG9yIG5hbWVFZGl0b3I7CgogICAgQFVpRmllbGQKICAgIEBQYXRo
KHZhbHVlID0gImRlc2NyaXB0aW9uLmVudGl0eSIpCiAgICBAV2l0aEVsZW1lbnRJZCgiZGVzY3Jp
cHRpb24iKQogICAgcHVibGljIEVudGl0eU1vZGVsVGV4dEJveEVkaXRvciBkZXNjcmlwdGlvbkVk
aXRvcjsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJ0
ZW1wbGF0ZS5zZWxlY3RlZEl0ZW0iKQogICAgQFdpdGhFbGVtZW50SWQoInRlbXBsYXRlIikKICAg
IHB1YmxpYyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4gdGVtcGxhdGVFZGl0b3I7Cgog
ICAgQFVpRmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAibWVtU2l6ZS5l
bnRpdHkiKQogICAgQFdpdGhFbGVtZW50SWQoIm1lbVNpemUiKQogICAgcHVibGljIEVudGl0eU1v
ZGVsVGV4dEJveEVkaXRvciBtZW1TaXplRWRpdG9yOwoKICAgIEBVaUZpZWxkCiAgICBASWdub3Jl
CiAgICBIVE1MIGNwdVBpbm5pbmdMYWJlbDsKCiAgICBAVWlGaWVsZAogICAgQFBhdGgodmFsdWUg
PSAidG90YWxDUFVDb3Jlcy5lbnRpdHkiKQogICAgQFdpdGhFbGVtZW50SWQoInRvdGFsQ1BVQ29y
ZXMiKQogICAgcHVibGljIEVudGl0eU1vZGVsVGV4dEJveEVkaXRvciB0b3RhbHZDUFVzRWRpdG9y
OwoKICAgIEBVaUZpZWxkCiAgICBAUGF0aCh2YWx1ZSA9ICJudW1PZlNvY2tldHMuc2VsZWN0ZWRJ
dGVtIikKICAgIEBXaXRoRWxlbWVudElkKCJudW1PZlNvY2tldHMiKQogICAgcHVibGljIExpc3RN
b2RlbExpc3RCb3hFZGl0b3I8T2JqZWN0PiBudW1PZlNvY2tldHNFZGl0b3I7CgogICAgQFVpRmll
bGQKICAgIEBQYXRoKHZhbHVlID0gImNvcmVzUGVyU29ja2V0LnNlbGVjdGVkSXRlbSIpCiAgICBA
V2l0aEVsZW1lbnRJZCgiY29yZXNQZXJTb2NrZXQiKQogICAgcHVibGljIExpc3RNb2RlbExpc3RC
b3hFZGl0b3I8T2JqZWN0PiBjb3JlUGVyU29ja2V0RWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3Zp
ZGVkID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVlID0gIm9TVHlwZS5zZWxlY3RlZEl0ZW0iKQogICAg
QFdpdGhFbGVtZW50SWQoIm9zVHlwZSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJveEVkaXRv
cjxPYmplY3Q+IG9TVHlwZUVkaXRvcjsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAg
ICBAUGF0aCh2YWx1ZSA9ICJpc0RlbGV0ZVByb3RlY3RlZC5lbnRpdHkiKQogICAgQFdpdGhFbGVt
ZW50SWQoImlzRGVsZXRlUHJvdGVjdGVkIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbENoZWNrQm94
RWRpdG9yIGlzRGVsZXRlUHJvdGVjdGVkRWRpdG9yOwoKICAgIEBVaUZpZWxkCiAgICBASWdub3Jl
CiAgICBMYWJlbCBnZW5lcmFsV2FybmluZ01lc3NhZ2U7CgogICAgLy8gPT0gUG9vbHMgPT0KICAg
IEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgRGlhbG9nVGFiIHBvb2xUYWI7CgogICAgQFVpRmllbGQo
cHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAicG9vbFR5cGUuc2VsZWN0ZWRJdGVt
IikKICAgIEBXaXRoRWxlbWVudElkKCJwb29sVHlwZSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlz
dEJveEVkaXRvcjxPYmplY3Q+IHBvb2xUeXBlRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVk
ID0gdHJ1ZSkKICAgIEBJZ25vcmUKICAgIHB1YmxpYyBJbmZvSWNvbiBuZXdQb29sUHJlc3RhcnRl
ZFZtc0ljb247CgogICAgQFVpRmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQElnbm9yZQogICAg
cHVibGljIEluZm9JY29uIGVkaXRQb29sUHJlc3RhcnRlZFZtc0ljb247CgogICAgQFVpRmllbGQK
ICAgIEBQYXRoKHZhbHVlID0gInByZXN0YXJ0ZWRWbXMuZW50aXR5IikKICAgIEBXaXRoRWxlbWVu
dElkKCJwcmVzdGFydGVkVm1zIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbFRleHRCb3hPbmx5RWRp
dG9yIHByZXN0YXJ0ZWRWbXNFZGl0b3I7CgogICAgQFVpRmllbGQKICAgIEBJZ25vcmUKICAgIHB1
YmxpYyBGbG93UGFuZWwgbmV3UG9vbEVkaXRWbXNQYW5lbDsKCiAgICBAVWlGaWVsZAogICAgQEln
bm9yZQogICAgcHVibGljIExhYmVsIHByZXN0YXJ0ZWRMYWJlbDsKCiAgICBAVWlGaWVsZChwcm92
aWRlZCA9IHRydWUpCiAgICBAUGF0aCgibnVtT2ZEZXNrdG9wcy5lbnRpdHkiKQogICAgQFdpdGhF
bGVtZW50SWQoIm51bU9mVm1zIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3Ig
bnVtT2ZWbXNFZGl0b3I7CgogICAgQFVpRmllbGQKICAgIEBJZ25vcmUKICAgIHB1YmxpYyBGbG93
UGFuZWwgZWRpdFBvb2xFZGl0Vm1zUGFuZWw7CgogICAgQFVpRmllbGQKICAgIEBJZ25vcmUKICAg
IHB1YmxpYyBGbG93UGFuZWwgZWRpdFBvb2xJbmNyYXNlTnVtT2ZWbXNQYW5lbDsKCiAgICBAVWlG
aWVsZAogICAgQElnbm9yZQogICAgcHVibGljIExhYmVsIGVkaXRQcmVzdGFydGVkVm1zTGFiZWw7
CgogICAgQFVpRmllbGQKICAgIEBQYXRoKCJwcmVzdGFydGVkVm1zLmVudGl0eSIpCiAgICBAV2l0
aEVsZW1lbnRJZCgiZWRpdFByZXN0YXJ0ZWRWbXMiKQogICAgcHVibGljIEVudGl0eU1vZGVsVGV4
dEJveE9ubHlFZGl0b3IgZWRpdFByZXN0YXJ0ZWRWbXNFZGl0b3I7CgogICAgQFVpRmllbGQocHJv
dmlkZWQgPSB0cnVlKQogICAgQFBhdGgoIm51bU9mRGVza3RvcHMuZW50aXR5IikKICAgIEBXaXRo
RWxlbWVudElkKCJpbmNyYXNlTnVtT2ZWbXMiKQogICAgcHVibGljIEVudGl0eU1vZGVsVGV4dEJv
eE9ubHlFZGl0b3IgaW5jcmFzZU51bU9mVm1zRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVk
ID0gdHJ1ZSkKICAgIEBQYXRoKCJhc3NpZ25lZFZtcy5lbnRpdHkiKQogICAgcHVibGljIFZhbHVl
TGFiZWw8T2JqZWN0PiBvdXRPZnhJblBvb2w7CgogICAgLy8gPT1Jbml0aWFsIHJ1biBUYWI9PQog
ICAgQFVpRmllbGQKICAgIHByb3RlY3RlZCBEaWFsb2dUYWIgaW5pdGlhbFJ1blRhYjsKCiAgICBA
VWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJkb21haW4uc2VsZWN0
ZWRJdGVtIikKICAgIEBXaXRoRWxlbWVudElkKCJkb21haW4iKQogICAgcHVibGljIExpc3RNb2Rl
bExpc3RCb3hFZGl0b3I8T2JqZWN0PiBkb21haW5FZGl0b3I7CgogICAgQFVpRmllbGQocHJvdmlk
ZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAidGltZVpvbmUuc2VsZWN0ZWRJdGVtIikKICAg
IEBXaXRoRWxlbWVudElkKCJ0aW1lWm9uZSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJveEVk
aXRvcjxPYmplY3Q+IHRpbWVab25lRWRpdG9yOwoKICAgIC8vID09Q29uc29sZSBUYWI9PQogICAg
QFVpRmllbGQKICAgIHByb3RlY3RlZCBEaWFsb2dUYWIgY29uc29sZVRhYjsKCiAgICBAVWlGaWVs
ZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJkaXNwbGF5UHJvdG9jb2wuc2Vs
ZWN0ZWRJdGVtIikKICAgIEBXaXRoRWxlbWVudElkKCJkaXNwbGF5UHJvdG9jb2wiKQogICAgcHVi
bGljIExpc3RNb2RlbExpc3RCb3hFZGl0b3I8T2JqZWN0PiBkaXNwbGF5UHJvdG9jb2xFZGl0b3I7
CgogICAgQFVpRmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAidXNiUG9s
aWN5LnNlbGVjdGVkSXRlbSIpCiAgICBAV2l0aEVsZW1lbnRJZCgidXNiUG9saWN5IikKICAgIHB1
YmxpYyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4gdXNiU3VwcG9ydEVkaXRvcjsKCiAg
ICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJudW1PZk1vbml0
b3JzLnNlbGVjdGVkSXRlbSIpCiAgICBAV2l0aEVsZW1lbnRJZCgibnVtT2ZNb25pdG9ycyIpCiAg
ICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+IG51bU9mTW9uaXRvcnNFZGl0
b3I7CgogICAgQFVpRmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAiaXNT
dGF0ZWxlc3MuZW50aXR5IikKICAgIEBXaXRoRWxlbWVudElkKCJpc1N0YXRlbGVzcyIpCiAgICBw
dWJsaWMgRW50aXR5TW9kZWxDaGVja0JveEVkaXRvciBpc1N0YXRlbGVzc0VkaXRvcjsKCiAgICBA
VWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJpc1NtYXJ0Y2FyZEVu
YWJsZWQuZW50aXR5IikKICAgIEBXaXRoRWxlbWVudElkKCJpc1NtYXJ0Y2FyZEVuYWJsZWQiKQog
ICAgcHVibGljIEVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IgaXNTbWFydGNhcmRFbmFibGVkRWRp
dG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVlID0gImFs
bG93Q29uc29sZVJlY29ubmVjdC5lbnRpdHkiKQogICAgQFdpdGhFbGVtZW50SWQoImFsbG93Q29u
c29sZVJlY29ubmVjdCIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxDaGVja0JveEVkaXRvciBhbGxv
d0NvbnNvbGVSZWNvbm5lY3RFZGl0b3I7CgogICAgLy8gPT1Ib3N0IFRhYj09CiAgICBAVWlGaWVs
ZAogICAgcHJvdGVjdGVkIERpYWxvZ1RhYiBob3N0VGFiOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVk
ID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVlID0gInJ1blZNT25TcGVjaWZpY0hvc3QuZW50aXR5IikK
ICAgIEBXaXRoRWxlbWVudElkKCJydW5WTU9uU3BlY2lmaWNIb3N0IikKICAgIHB1YmxpYyBFbnRp
dHlNb2RlbENoZWNrQm94RWRpdG9yIHJ1blZNT25TcGVjaWZpY0hvc3RFZGl0b3I7CgogICAgQFVp
RmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAiaG9zdENwdS5lbnRpdHki
KQogICAgQFdpdGhFbGVtZW50SWQoImhvc3RDcHUiKQogICAgcHVibGljIEVudGl0eU1vZGVsQ2hl
Y2tCb3hFZGl0b3IgaG9zdENwdUVkaXRvcjsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUp
CiAgICBAUGF0aCh2YWx1ZSA9ICJkb250TWlncmF0ZVZNLmVudGl0eSIpCiAgICBAV2l0aEVsZW1l
bnRJZCgiZG9udE1pZ3JhdGVWTSIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxDaGVja0JveEVkaXRv
ciBkb250TWlncmF0ZVZNRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkKICAg
IEBJZ25vcmUKICAgIEBXaXRoRWxlbWVudElkKCJzcGVjaWZpY0hvc3QiKQogICAgcHVibGljIFJh
ZGlvQnV0dG9uIHNwZWNpZmljSG9zdDsKCiAgICBAVWlGaWVsZAogICAgQElnbm9yZQogICAgcHVi
bGljIExhYmVsIHNwZWNpZmljSG9zdExhYmVsOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1
ZSkKICAgIEBQYXRoKHZhbHVlID0gImRlZmF1bHRIb3N0LnNlbGVjdGVkSXRlbSIpCiAgICBAV2l0
aEVsZW1lbnRJZCgiZGVmYXVsdEhvc3QiKQogICAgcHVibGljIExpc3RNb2RlbExpc3RCb3hFZGl0
b3I8T2JqZWN0PiBkZWZhdWx0SG9zdEVkaXRvcjsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRy
dWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJpc0F1dG9Bc3NpZ24uZW50aXR5IikKICAgIEBXaXRoRWxl
bWVudElkKCJpc0F1dG9Bc3NpZ24iKQogICAgcHVibGljIEVudGl0eU1vZGVsUmFkaW9CdXR0b25F
ZGl0b3IgaXNBdXRvQXNzaWduRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkK
ICAgIEBQYXRoKHZhbHVlID0gInJ1blZNT25UcnVzdGVkSG9zdC5lbnRpdHkiKQogICAgQFdpdGhF
bGVtZW50SWQoInJ1blZNT25UcnVzdGVkSG9zdCIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxSYWRp
b0J1dHRvbkVkaXRvciBydW5WTU9uVHJ1c3RlZEhvc3RFZGl0b3I7CgogICAgQFVpRmllbGQKICAg
IEBQYXRoKHZhbHVlID0gImNwdVBpbm5pbmcuZW50aXR5IikKICAgIEBXaXRoRWxlbWVudElkKCJj
cHVQaW5uaW5nIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3IgY3B1UGlubmlu
ZzsKCiAgICAvLyA9PUhpZ2ggQXZhaWxhYmlsaXR5IFRhYj09CiAgICBAVWlGaWVsZAogICAgcHJv
dGVjdGVkIERpYWxvZ1RhYiBoaWdoQXZhaWxhYmlsaXR5VGFiOwoKICAgIEBVaUZpZWxkKHByb3Zp
ZGVkID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVlID0gImlzSGlnaGx5QXZhaWxhYmxlLmVudGl0eSIp
CiAgICBAV2l0aEVsZW1lbnRJZCgiaXNIaWdobHlBdmFpbGFibGUiKQogICAgcHVibGljIEVudGl0
eU1vZGVsQ2hlY2tCb3hFZGl0b3IgaXNIaWdobHlBdmFpbGFibGVFZGl0b3I7CgogICAgLy8gVE9E
TzogUHJpb3JpdHkgaXMgYSBMaXN0TW9kZWwgd2hpY2ggaXMgcmVuZGVyZWQgYXMgUmFkaW9Cb3gK
ICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkKICAgIEBJZ25vcmUKICAgIEBXaXRoRWxlbWVu
dElkKCJwcmlvcml0eSIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxDZWxsVGFibGU8TGlzdE1vZGVs
PiBwcmlvcml0eUVkaXRvcjsKCiAgICAvLyA9PVJlc291cmNlIEFsbG9jYXRpb24gVGFiPT0KICAg
IEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgRGlhbG9nVGFiIHJlc291cmNlQWxsb2NhdGlvblRhYjsK
CiAgICBAVWlGaWVsZAogICAgcHJvdGVjdGVkIEZsb3dQYW5lbCBzdG9yYWdlQWxsb2NhdGlvblBh
bmVsOwoKICAgIEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgSG9yaXpvbnRhbFBhbmVsIHByb3Zpc2lv
blNlbGVjdGlvblBhbmVsOwoKICAgIEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgRmxvd1BhbmVsIGRp
c2tzQWxsb2NhdGlvblBhbmVsOwoKICAgIEBVaUZpZWxkCiAgICBASWdub3JlCiAgICBAV2l0aEVs
ZW1lbnRJZCgicHJvdmlzaW9uaW5nIikKICAgIHB1YmxpYyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9y
PE9iamVjdD4gcHJvdmlzaW9uaW5nRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1
ZSkKICAgIEBQYXRoKHZhbHVlID0gIm1pbkFsbG9jYXRlZE1lbW9yeS5lbnRpdHkiKQogICAgQFdp
dGhFbGVtZW50SWQoIm1pbkFsbG9jYXRlZE1lbW9yeSIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxU
ZXh0Qm94RWRpdG9yIG1pbkFsbG9jYXRlZE1lbW9yeUVkaXRvcjsKCiAgICBAVWlGaWVsZChwcm92
aWRlZCA9IHRydWUpCiAgICBAUGF0aCh2YWx1ZSA9ICJwcm92aXNpb25pbmdUaGluX0lzU2VsZWN0
ZWQuZW50aXR5IikKICAgIEBXaXRoRWxlbWVudElkKCJwcm92aXNpb25pbmdUaGluIikKICAgIHB1
YmxpYyBFbnRpdHlNb2RlbFJhZGlvQnV0dG9uRWRpdG9yIHByb3Zpc2lvbmluZ1RoaW5FZGl0b3I7
CgogICAgQFVpRmllbGQocHJvdmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAicHJvdmlz
aW9uaW5nQ2xvbmVfSXNTZWxlY3RlZC5lbnRpdHkiKQogICAgQFdpdGhFbGVtZW50SWQoInByb3Zp
c2lvbmluZ0Nsb25lIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbFJhZGlvQnV0dG9uRWRpdG9yIHBy
b3Zpc2lvbmluZ0Nsb25lRWRpdG9yOwoKICAgIEBVaUZpZWxkCiAgICBASWdub3JlCiAgICBMYWJl
bCBkaXNrc0FsbG9jYXRpb25MYWJlbDsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAg
ICBASWdub3JlCiAgICBAV2l0aEVsZW1lbnRJZCgiZGlza3NBbGxvY2F0aW9uIikKICAgIHB1Ymxp
YyBEaXNrc0FsbG9jYXRpb25WaWV3IGRpc2tzQWxsb2NhdGlvblZpZXc7CgogICAgLy8gPT1Cb290
IE9wdGlvbnMgVGFiPT0KICAgIEBVaUZpZWxkCiAgICBwcm90ZWN0ZWQgRGlhbG9nVGFiIGJvb3RP
cHRpb25zVGFiOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1ZSkKICAgIEBQYXRoKHZhbHVl
ID0gImZpcnN0Qm9vdERldmljZS5zZWxlY3RlZEl0ZW0iKQogICAgQFdpdGhFbGVtZW50SWQoImZp
cnN0Qm9vdERldmljZSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+
IGZpcnN0Qm9vdERldmljZUVkaXRvcjsKCiAgICBAVWlGaWVsZChwcm92aWRlZCA9IHRydWUpCiAg
ICBAUGF0aCh2YWx1ZSA9ICJzZWNvbmRCb290RGV2aWNlLnNlbGVjdGVkSXRlbSIpCiAgICBAV2l0
aEVsZW1lbnRJZCgic2Vjb25kQm9vdERldmljZSIpCiAgICBwdWJsaWMgTGlzdE1vZGVsTGlzdEJv
eEVkaXRvcjxPYmplY3Q+IHNlY29uZEJvb3REZXZpY2VFZGl0b3I7CgogICAgQFVpRmllbGQocHJv
dmlkZWQgPSB0cnVlKQogICAgQFBhdGgodmFsdWUgPSAiY2RJbWFnZS5zZWxlY3RlZEl0ZW0iKQog
ICAgQFdpdGhFbGVtZW50SWQoImNkSW1hZ2UiKQogICAgcHVibGljIExpc3RNb2RlbExpc3RCb3hF
ZGl0b3I8T2JqZWN0PiBjZEltYWdlRWRpdG9yOwoKICAgIEBVaUZpZWxkKHByb3ZpZGVkID0gdHJ1
ZSkKICAgIEBQYXRoKHZhbHVlID0gImNkQXR0YWNoZWQuZW50aXR5IikKICAgIEBXaXRoRWxlbWVu
dElkKCJjZEF0dGFjaGVkIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbENoZWNrQm94RWRpdG9yIGNk
QXR0YWNoZWRFZGl0b3I7CgogICAgQFVpRmllbGQKICAgIHByb3RlY3RlZCBGbG93UGFuZWwgbGlu
dXhCb290T3B0aW9uc1BhbmVsOwoKICAgIEBVaUZpZWxkCiAgICBAUGF0aCh2YWx1ZSA9ICJrZXJu
ZWxfcGF0aC5lbnRpdHkiKQogICAgQFdpdGhFbGVtZW50SWQoImtlcm5lbFBhdGgiKQogICAgcHVi
bGljIEVudGl0eU1vZGVsVGV4dEJveEVkaXRvciBrZXJuZWxfcGF0aEVkaXRvcjsKCiAgICBAVWlG
aWVsZAogICAgQFBhdGgodmFsdWUgPSAiaW5pdHJkX3BhdGguZW50aXR5IikKICAgIEBXaXRoRWxl
bWVudElkKCJpbml0cmRQYXRoIikKICAgIHB1YmxpYyBFbnRpdHlNb2RlbFRleHRCb3hFZGl0b3Ig
aW5pdHJkX3BhdGhFZGl0b3I7CgogICAgQFVpRmllbGQKICAgIEBQYXRoKHZhbHVlID0gImtlcm5l
bF9wYXJhbWV0ZXJzLmVudGl0eSIpCiAgICBAV2l0aEVsZW1lbnRJZCgia2VybmVsUGFyYW1ldGVy
cyIpCiAgICBwdWJsaWMgRW50aXR5TW9kZWxUZXh0Qm94RWRpdG9yIGtlcm5lbF9wYXJhbWV0ZXJz
RWRpdG9yOwoKICAgIEBVaUZpZWxkCiAgICBASWdub3JlCiAgICBMYWJlbCBuYXRpdmVVc2JXYXJu
aW5nTWVzc2FnZTsKCiAgICAvLyA9PUN1c3RvbSBQcm9wZXJ0aWVzIFRhYj09CiAgICBAVWlGaWVs
ZAogICAgcHJvdGVjdGVkIERpYWxvZ1RhYiBjdXN0b21Qcm9wZXJ0aWVzVGFiOwoKICAgIEBVaUZp
ZWxkCiAgICBASWdub3JlCiAgICBwcm90ZWN0ZWQgS2V5VmFsdWVXaWRnZXQgY3VzdG9tUHJvcGVy
dGllc1NoZWV0RWRpdG9yOwoKICAgIENvbW1vbkFwcGxpY2F0aW9uQ29uc3RhbnRzIGNvbnN0YW50
czsKICAgIENvbW1vbkFwcGxpY2F0aW9uTWVzc2FnZXMgbWVzc2FnZXM7CgogICAgQFVpRmllbGQK
ICAgIEBJZ25vcmUKICAgIHByb3RlY3RlZCBBZHZhbmNlZFBhcmFtZXRlcnNFeHBhbmRlciBleHBh
bmRlcjsKCiAgICBAVWlGaWVsZAogICAgQElnbm9yZQogICAgUGFuZWwgZXhwYW5kZXJDb250ZW50
OwoKICAgIEBVaUZpZWxkCiAgICBASWdub3JlCiAgICBBZHZhbmNlZFBhcmFtZXRlcnNFeHBhbmRl
ciBnZW5lcmFsQWR2YW5jZWRQYXJhbWV0ZXJFeHBhbmRlcjsKCiAgICBAVWlGaWVsZAogICAgQEln
bm9yZQogICAgUGFuZWwgZ2VuZXJhbEFkdmFuY2VkUGFyYW1ldGVyRXhwYW5kZXJDb250ZW50OwoK
ICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsgInVuY2hlY2tlZCIsICJyYXd0eXBlcyIgfSkKICAgIHB1
YmxpYyBBYnN0cmFjdFZtUG9wdXBXaWRnZXQoQ29tbW9uQXBwbGljYXRpb25Db25zdGFudHMgY29u
c3RhbnRzLAogICAgICAgICAgICBDb21tb25BcHBsaWNhdGlvblJlc291cmNlcyByZXNvdXJjZXMs
CiAgICAgICAgICAgIGZpbmFsIENvbW1vbkFwcGxpY2F0aW9uTWVzc2FnZXMgbWVzc2FnZXMpIHsK
ICAgICAgICB0aGlzLmNvbnN0YW50cyA9IGNvbnN0YW50czsKICAgICAgICB0aGlzLm1lc3NhZ2Vz
ID0gbWVzc2FnZXM7CgogICAgICAgIGluaXRMaXN0Qm94RWRpdG9ycygpOwogICAgICAgIC8vIENv
bnRhaW5zIGEgc3BlY2lhbCBwYXJzZXIvcmVuZGVyZXIKICAgICAgICBtZW1TaXplRWRpdG9yID0g
bmV3IEVudGl0eU1vZGVsVGV4dEJveEVkaXRvcigKICAgICAgICAgICAgICAgIG5ldyBNZW1vcnlT
aXplUmVuZGVyZXIoY29uc3RhbnRzKSwgbmV3IE1lbW9yeVNpemVQYXJzZXIoKSk7CiAgICAgICAg
bWluQWxsb2NhdGVkTWVtb3J5RWRpdG9yID0gbmV3IEVudGl0eU1vZGVsVGV4dEJveEVkaXRvcigK
ICAgICAgICAgICAgICAgIG5ldyBNZW1vcnlTaXplUmVuZGVyZXIoY29uc3RhbnRzKSwgbmV3IE1l
bW9yeVNpemVQYXJzZXIoKSk7CgogICAgICAgIC8vIFRPRE86IEhvdyB0byBhbGlnbiByaWdodCB3
aXRob3V0IGNyZWF0aW5nIHRoZSB3aWRnZXQgbWFudWFsbHk/CiAgICAgICAgcnVuVk1PblNwZWNp
ZmljSG9zdEVkaXRvciA9IG5ldyBFbnRpdHlNb2RlbENoZWNrQm94RWRpdG9yKEFsaWduLlJJR0hU
KTsKICAgICAgICBob3N0Q3B1RWRpdG9yID0gbmV3IEVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3Io
QWxpZ24uUklHSFQpOwogICAgICAgIGRvbnRNaWdyYXRlVk1FZGl0b3IgPSBuZXcgRW50aXR5TW9k
ZWxDaGVja0JveEVkaXRvcihBbGlnbi5SSUdIVCk7CiAgICAgICAgaXNIaWdobHlBdmFpbGFibGVF
ZGl0b3IgPSBuZXcgRW50aXR5TW9kZWxDaGVja0JveEVkaXRvcihBbGlnbi5SSUdIVCk7CiAgICAg
ICAgaXNTdGF0ZWxlc3NFZGl0b3IgPSBuZXcgRW50aXR5TW9kZWxDaGVja0JveEVkaXRvcihBbGln
bi5SSUdIVCk7CiAgICAgICAgaXNEZWxldGVQcm90ZWN0ZWRFZGl0b3IgPSBuZXcgRW50aXR5TW9k
ZWxDaGVja0JveEVkaXRvcihBbGlnbi5SSUdIVCk7CiAgICAgICAgaXNTbWFydGNhcmRFbmFibGVk
RWRpdG9yID0gbmV3IEVudGl0eU1vZGVsQ2hlY2tCb3hFZGl0b3IoQWxpZ24uUklHSFQpOwogICAg
ICAgIGNkQXR0YWNoZWRFZGl0b3IgPSBuZXcgRW50aXR5TW9kZWxDaGVja0JveEVkaXRvcihBbGln
bi5MRUZUKTsKICAgICAgICBhbGxvd0NvbnNvbGVSZWNvbm5lY3RFZGl0b3IgPSBuZXcgRW50aXR5
TW9kZWxDaGVja0JveEVkaXRvcihBbGlnbi5SSUdIVCk7CgogICAgICAgIHByaW9yaXR5RWRpdG9y
ID0gbmV3IEVudGl0eU1vZGVsQ2VsbFRhYmxlPExpc3RNb2RlbD4oCiAgICAgICAgICAgICAgICAo
UmVzb3VyY2VzKSBHV1QuY3JlYXRlKEJ1dHRvbkNlbGxUYWJsZVJlc291cmNlcy5jbGFzcykpOwog
ICAgICAgIGRpc2tzQWxsb2NhdGlvblZpZXcgPSBuZXcgRGlza3NBbGxvY2F0aW9uVmlldyhjb25z
dGFudHMpOwoKICAgICAgICBpZiAocHJlc3RhcnRlZFZtc0NvbnRleHRIZWxwID09IG51bGwpIHsK
ICAgICAgICAgICAgcHJlc3RhcnRlZFZtc0NvbnRleHRIZWxwID0gR1dULmNyZWF0ZShQcmVzdGFy
dGVkVm1zQ29udGV4dEhlbHAuY2xhc3MpOwogICAgICAgIH0KCiAgICAgICAgaW5pdFBvb2xTcGVj
aWZpY1dpZGdldHMocmVzb3VyY2VzLCBtZXNzYWdlcyk7CgogICAgICAgIGluaXRXaWRnZXQoVmll
d1VpQmluZGVyLnVpQmluZGVyLmNyZWF0ZUFuZEJpbmRVaSh0aGlzKSk7CgogICAgICAgIGV4cGFu
ZGVyLmluaXRXaXRoQ29udGVudChleHBhbmRlckNvbnRlbnQuZ2V0RWxlbWVudCgpKTsKICAgICAg
ICBnZW5lcmFsQWR2YW5jZWRQYXJhbWV0ZXJFeHBhbmRlci5pbml0V2l0aENvbnRlbnQoZ2VuZXJh
bEFkdmFuY2VkUGFyYW1ldGVyRXhwYW5kZXJDb250ZW50LmdldEVsZW1lbnQoKSk7CiAgICAgICAg
ZWRpdFByZXN0YXJ0ZWRWbXNFZGl0b3Iuc2V0S2VlcFRpdGxlT25TZXRFbmFibGVkKHRydWUpOwoK
ICAgICAgICBhcHBseVN0eWxlcygpOwoKICAgICAgICBwb29sVGFiLnNldFZpc2libGUoZmFsc2Up
OwoKICAgICAgICBsb2NhbGl6ZShjb25zdGFudHMpOwoKICAgICAgICBnZW5lcmF0ZUlkcygpOwoK
ICAgICAgICBoaWRlUG9vbFNwZWNpZmljRmllbGRzKCk7CgogICAgICAgIHByaW9yaXR5RWRpdG9y
LmFkZEVudGl0eU1vZGVsQ29sdW1uKG5ldyBUZXh0Q29sdW1uV2l0aFRvb2x0aXA8RW50aXR5TW9k
ZWw+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIFN0cmluZyBn
ZXRWYWx1ZShFbnRpdHlNb2RlbCBtb2RlbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVs
LmdldFRpdGxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCAiIik7IC8vJE5PTi1OTFMtMSQK
CiAgICAgICAgRHJpdmVyLmRyaXZlci5pbml0aWFsaXplKHRoaXMpOwogICAgfQoKICAgIHByb3Rl
Y3RlZCB2b2lkIGluaXRQb29sU3BlY2lmaWNXaWRnZXRzKENvbW1vbkFwcGxpY2F0aW9uUmVzb3Vy
Y2VzIHJlc291cmNlcywKICAgICAgICAgICAgZmluYWwgQ29tbW9uQXBwbGljYXRpb25NZXNzYWdl
cyBtZXNzYWdlcykgewogICAgICAgIGNyZWF0ZU51bU9mRGVza3RvcEVkaXRvcnMoKTsKCiAgICAg
ICAgaW5jcmFzZU51bU9mVm1zRWRpdG9yLnNldEtlZXBUaXRsZU9uU2V0RW5hYmxlZCh0cnVlKTsK
ICAgICAgICBudW1PZlZtc0VkaXRvci5zZXRLZWVwVGl0bGVPblNldEVuYWJsZWQodHJ1ZSk7Cgog
ICAgICAgIG5ld1Bvb2xQcmVzdGFydGVkVm1zSWNvbiA9CiAgICAgICAgICAgICAgICBuZXcgSW5m
b0ljb24ocHJlc3RhcnRlZFZtc0NvbnRleHRIZWxwLml0YWxpY1RleHRDb250YWluZXIobWVzc2Fn
ZXMucHJlc3RhcnRlZEhlbHAoKSksIHJlc291cmNlcyk7IC8vJE5PTi1OTFMtMSQKCiAgICAgICAg
ZWRpdFBvb2xQcmVzdGFydGVkVm1zSWNvbiA9CiAgICAgICAgICAgICAgICBuZXcgSW5mb0ljb24o
cHJlc3RhcnRlZFZtc0NvbnRleHRIZWxwLml0YWxpY1RleHRDb250YWluZXIobWVzc2FnZXMucHJl
c3RhcnRlZEhlbHAoKSksIHJlc291cmNlcyk7IC8vJE5PTi1OTFMtMSQKCiAgICAgICAgb3V0T2Z4
SW5Qb29sID0gbmV3IFZhbHVlTGFiZWw8T2JqZWN0PihuZXcgQWJzdHJhY3RSZW5kZXJlcjxPYmpl
Y3Q+KCkgewoKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcg
cmVuZGVyKE9iamVjdCBvYmplY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5v
dXRPZlhWTXNJblBvb2wob2JqZWN0LnRvU3RyaW5nKCkpOwogICAgICAgICAgICB9CgogICAgICAg
IH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlcmUgYXJlIHR3byBlZGl0b3JzIHdoaWNoIGVk
aXRzIHRoZSBzYW1lIGVudGl0eSAtIGluIHRoZSBjb3JyZWN0IHN1YmNsYXNzIG1ha2Ugc3VyZSB0
aGF0IHRoZSBjb3JyZWN0IG9uZSdzCiAgICAgKiB2YWx1ZSBpcyB1c2VkIHRvIGVkaXQgdGhlIG1v
ZGVsCiAgICAgKiA8cD4KICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgY3Jl
YXRlcyB0aGUgc2ltcGxlIGVkaXRvcnMKICAgICAqLwogICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRl
TnVtT2ZEZXNrdG9wRWRpdG9ycygpIHsKICAgICAgICBpbmNyYXNlTnVtT2ZWbXNFZGl0b3IgPSBu
ZXcgRW50aXR5TW9kZWxUZXh0Qm94T25seUVkaXRvcigpOwogICAgICAgIG51bU9mVm1zRWRpdG9y
ID0gbmV3IEVudGl0eU1vZGVsVGV4dEJveEVkaXRvcigpOwogICAgfQoKICAgIHByaXZhdGUgdm9p
ZCBoaWRlUG9vbFNwZWNpZmljRmllbGRzKCkgewogICAgICAgIG51bU9mVm1zRWRpdG9yLnNldFZp
c2libGUoZmFsc2UpOwogICAgICAgIG5ld1Bvb2xFZGl0Vm1zUGFuZWwuc2V0VmlzaWJsZShmYWxz
ZSk7CiAgICAgICAgZWRpdFBvb2xFZGl0Vm1zUGFuZWwuc2V0VmlzaWJsZShmYWxzZSk7CiAgICAg
ICAgZWRpdFBvb2xJbmNyYXNlTnVtT2ZWbXNQYW5lbC5zZXRWaXNpYmxlKGZhbHNlKTsKICAgIH0K
CiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBnZW5lcmF0ZUlkcygpOwoKICAgIEBTdXBwcmVz
c1dhcm5pbmdzKHsgInJhd3R5cGVzIiwgInVuY2hlY2tlZCIgfSkKICAgIHByaXZhdGUgdm9pZCBp
bml0TGlzdEJveEVkaXRvcnMoKSB7CiAgICAgICAgLy8gR2VuZXJhbCB0YWIKICAgICAgICBkYXRh
Q2VudGVyRWRpdG9yID0gbmV3IExpc3RNb2RlbExpc3RCb3hFZGl0b3I8T2JqZWN0PihuZXcgTnVs
bFNhZmVSZW5kZXJlcjxPYmplY3Q+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAg
ICAgcHVibGljIFN0cmluZyByZW5kZXJOdWxsU2FmZShPYmplY3Qgb2JqZWN0KSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gKChzdG9yYWdlX3Bvb2wpIG9iamVjdCkuZ2V0bmFtZSgpOwogICAgICAg
ICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGNsdXN0ZXJFZGl0b3IgPSBuZXcgTGlzdE1vZGVs
TGlzdEJveEVkaXRvcjxPYmplY3Q+KG5ldyBOdWxsU2FmZVJlbmRlcmVyPE9iamVjdD4oKSB7CiAg
ICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHJlbmRlck51bGxT
YWZlKE9iamVjdCBvYmplY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoKFZEU0dyb3VwKSBv
YmplY3QpLmdldG5hbWUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBxdW90
YUVkaXRvciA9IG5ldyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IE51bGxTYWZl
UmVuZGVyZXI8T2JqZWN0PigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1
YmxpYyBTdHJpbmcgcmVuZGVyTnVsbFNhZmUoT2JqZWN0IG9iamVjdCkgewogICAgICAgICAgICAg
ICAgcmV0dXJuICgoUXVvdGEpIG9iamVjdCkuZ2V0UXVvdGFOYW1lKCk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9KTsKCiAgICAgICAgdGVtcGxhdGVFZGl0b3IgPSBuZXcgTGlzdE1vZGVsTGlzdEJv
eEVkaXRvcjxPYmplY3Q+KG5ldyBOdWxsU2FmZVJlbmRlcmVyPE9iamVjdD4oKSB7CiAgICAgICAg
ICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHJlbmRlck51bGxTYWZlKE9i
amVjdCBvYmplY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoKFZtVGVtcGxhdGUpIG9iamVj
dCkuZ2V0bmFtZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIG9TVHlwZUVk
aXRvciA9IG5ldyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IEVudW1SZW5kZXJl
cigpKTsKCiAgICAgICAgLy8gUG9vbHMKICAgICAgICBwb29sVHlwZUVkaXRvciA9IG5ldyBMaXN0
TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IE51bGxTYWZlUmVuZGVyZXI8T2JqZWN0Pigp
IHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVuZGVy
TnVsbFNhZmUoT2JqZWN0IG9iamVjdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICgoRW50aXR5
TW9kZWwpIG9iamVjdCkuZ2V0VGl0bGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAg
ICAgICAvLyBXaW5kb3dzIFN5c3ByZXAKICAgICAgICBkb21haW5FZGl0b3IgPSBuZXcgTGlzdE1v
ZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+KG5ldyBOdWxsU2FmZVJlbmRlcmVyPE9iamVjdD4oKSB7
CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHJlbmRlck51
bGxTYWZlKE9iamVjdCBvYmplY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QudG9T
dHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICB0aW1lWm9uZUVkaXRv
ciA9IG5ldyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IE51bGxTYWZlUmVuZGVy
ZXI8T2JqZWN0PigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBT
dHJpbmcgcmVuZGVyTnVsbFNhZmUoT2JqZWN0IG9iamVjdCkgewogICAgICAgICAgICAgICAgcmV0
dXJuICgoRW50cnk8U3RyaW5nLCBTdHJpbmc+KSBvYmplY3QpLmdldFZhbHVlKCk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gQ29uc29sZSB0YWIKICAgICAgICBkaXNwbGF5
UHJvdG9jb2xFZGl0b3IgPSBuZXcgTGlzdE1vZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+KG5ldyBO
dWxsU2FmZVJlbmRlcmVyPE9iamVjdD4oKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAg
ICAgICBwdWJsaWMgU3RyaW5nIHJlbmRlck51bGxTYWZlKE9iamVjdCBvYmplY3QpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiAoKEVudGl0eU1vZGVsKSBvYmplY3QpLmdldFRpdGxlKCk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgdXNiU3VwcG9ydEVkaXRvciA9IG5ldyBMaXN0
TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IEVudW1SZW5kZXJlcigpKTsKICAgICAgICBu
dW1PZk1vbml0b3JzRWRpdG9yID0gbmV3IExpc3RNb2RlbExpc3RCb3hFZGl0b3I8T2JqZWN0Pihu
ZXcgTnVsbFNhZmVSZW5kZXJlcjxPYmplY3Q+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAg
ICAgICAgICAgcHVibGljIFN0cmluZyByZW5kZXJOdWxsU2FmZShPYmplY3Qgb2JqZWN0KSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9KTsKCiAgICAgICAgLy8gSG9zdCBUYWIKICAgICAgICBzcGVjaWZpY0hvc3QgPSBuZXcg
UmFkaW9CdXR0b24oInJ1blZtT25Ib3N0R3JvdXAiKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIGlz
QXV0b0Fzc2lnbkVkaXRvciA9IG5ldyBFbnRpdHlNb2RlbFJhZGlvQnV0dG9uRWRpdG9yKCJydW5W
bU9uSG9zdEdyb3VwIik7IC8vJE5PTi1OTFMtMSQKICAgICAgICBkZWZhdWx0SG9zdEVkaXRvciA9
IG5ldyBMaXN0TW9kZWxMaXN0Qm94RWRpdG9yPE9iamVjdD4obmV3IE51bGxTYWZlUmVuZGVyZXI8
T2JqZWN0PigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBTdHJp
bmcgcmVuZGVyTnVsbFNhZmUoT2JqZWN0IG9iamVjdCkgewogICAgICAgICAgICAgICAgcmV0dXJu
ICgoVkRTKSBvYmplY3QpLmdldHZkc19uYW1lKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsK
ICAgICAgICBydW5WTU9uVHJ1c3RlZEhvc3RFZGl0b3IgPSBuZXcgRW50aXR5TW9kZWxSYWRpb0J1
dHRvbkVkaXRvcigicnVuVm1Pbkhvc3RHcm91cCIpOyAvLyROT04tTkxTLTEkCgogICAgICAgIC8v
IFJlc291cmNlIEFsbG9jYXRpb24KICAgICAgICBwcm92aXNpb25pbmdUaGluRWRpdG9yID0gbmV3
IEVudGl0eU1vZGVsUmFkaW9CdXR0b25FZGl0b3IoInByb3Zpc2lvbmluZ0dyb3VwIik7IC8vJE5P
Ti1OTFMtMSQKICAgICAgICBwcm92aXNpb25pbmdDbG9uZUVkaXRvciA9IG5ldyBFbnRpdHlNb2Rl
bFJhZGlvQnV0dG9uRWRpdG9yKCJwcm92aXNpb25pbmdHcm91cCIpOyAvLyROT04tTkxTLTEkCgog
ICAgICAgIC8vIEJvb3QgT3B0aW9ucyBUYWIKICAgICAgICBmaXJzdEJvb3REZXZpY2VFZGl0b3Ig
PSBuZXcgTGlzdE1vZGVsTGlzdEJveEVkaXRvcjxPYmplY3Q+KG5ldyBOdWxsU2FmZVJlbmRlcmVy
PE9iamVjdD4oKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgU3Ry
aW5nIHJlbmRlck51bGxTYWZlKE9iamVjdCBvYmplY3QpIHsKICAgICAgICAgICAgICAgIHJldHVy
biAoKEVudGl0eU1vZGVsKSBvYmplY3QpLmdldFRpdGxlKCk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9KTsKCiAgICAgICAgc2Vjb25kQm9vdERldmljZUVkaXRvciA9IG5ldyBMaXN0TW9kZWxMaXN0
Qm94RWRpdG9yPE9iamVjdD4obmV3IE51bGxTYWZlUmVuZGVyZXI8T2JqZWN0PigpIHsKICAgICAg
ICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVuZGVyTnVsbFNhZmUo
T2JqZWN0IG9iamVjdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICgoRW50aXR5TW9kZWwpIG9i
amVjdCkuZ2V0VGl0bGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBjZElt
YWdlRWRpdG9yID0gbmV3IExpc3RNb2RlbExpc3RCb3hFZGl0b3I8T2JqZWN0PihuZXcgTnVsbFNh
ZmVSZW5kZXJlcjxPYmplY3Q+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAg
cHVibGljIFN0cmluZyByZW5kZXJOdWxsU2FmZShPYmplY3Qgb2JqZWN0KSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gKFN0cmluZykgb2JqZWN0OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAg
ICB9CgogICAgcHJvdGVjdGVkIHZvaWQgbG9jYWxpemUoQ29tbW9uQXBwbGljYXRpb25Db25zdGFu
dHMgY29uc3RhbnRzKSB7CiAgICAgICAgLy8gVGFicwogICAgICAgIGhpZ2hBdmFpbGFiaWxpdHlU
YWIuc2V0TGFiZWwoY29uc3RhbnRzLmhpZ2hBdmFpbFZtUG9wdXAoKSk7CiAgICAgICAgcmVzb3Vy
Y2VBbGxvY2F0aW9uVGFiLnNldExhYmVsKGNvbnN0YW50cy5yZXNvdXJjZUFsbG9jVm1Qb3B1cCgp
KTsKICAgICAgICBib290T3B0aW9uc1RhYi5zZXRMYWJlbChjb25zdGFudHMuYm9vdE9wdGlvbnNW
bVBvcHVwKCkpOwogICAgICAgIGN1c3RvbVByb3BlcnRpZXNUYWIuc2V0TGFiZWwoY29uc3RhbnRz
LmN1c3RvbVByb3BzVm1Qb3B1cCgpKTsKCiAgICAgICAgLy8gR2VuZXJhbCBUYWIKICAgICAgICBn
ZW5lcmFsVGFiLnNldExhYmVsKGNvbnN0YW50cy5HZW5lcmFsVm1Qb3B1cCgpKTsKICAgICAgICBk
YXRhQ2VudGVyRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5kY1ZtUG9wdXAoKSk7CiAgICAgICAg
Y2x1c3RlckVkaXRvci5zZXRMYWJlbChjb25zdGFudHMuaG9zdENsdXN0ZXJWbVBvcHVwKCkpOwog
ICAgICAgIHF1b3RhRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5xdW90YVZtUG9wdXAoKSk7CiAg
ICAgICAgbmFtZUVkaXRvci5zZXRMYWJlbChjb25zdGFudHMubmFtZVZtUG9wdXAoKSk7CiAgICAg
ICAgZGVzY3JpcHRpb25FZGl0b3Iuc2V0TGFiZWwoY29uc3RhbnRzLmRlc2NyaXB0aW9uVm1Qb3B1
cCgpKTsKICAgICAgICB0ZW1wbGF0ZUVkaXRvci5zZXRMYWJlbChjb25zdGFudHMuYmFzZWRPblRl
bXBsYXRlVm1Qb3B1cCgpKTsKICAgICAgICBtZW1TaXplRWRpdG9yLnNldExhYmVsKGNvbnN0YW50
cy5tZW1TaXplVm1Qb3B1cCgpKTsKICAgICAgICB0b3RhbHZDUFVzRWRpdG9yLnNldExhYmVsKGNv
bnN0YW50cy5udW1PZlZDUFVzKCkpOwogICAgICAgIGNvcmVQZXJTb2NrZXRFZGl0b3Iuc2V0TGFi
ZWwoY29uc3RhbnRzLmNvcmVzUGVyU29ja2V0KCkpOwogICAgICAgIG51bU9mU29ja2V0c0VkaXRv
ci5zZXRMYWJlbChjb25zdGFudHMubnVtT2ZTb2NrZXRzKCkpOwoKICAgICAgICBvU1R5cGVFZGl0
b3Iuc2V0TGFiZWwoY29uc3RhbnRzLm9zVm1Qb3B1cCgpKTsKICAgICAgICBpc1N0YXRlbGVzc0Vk
aXRvci5zZXRMYWJlbChjb25zdGFudHMuc3RhdGVsZXNzVm1Qb3B1cCgpKTsKICAgICAgICBpc0Rl
bGV0ZVByb3RlY3RlZEVkaXRvci5zZXRMYWJlbChjb25zdGFudHMuZGVsZXRlUHJvdGVjdGlvblBv
cHVwKCkpOwogICAgICAgIGlzU21hcnRjYXJkRW5hYmxlZEVkaXRvci5zZXRMYWJlbChjb25zdGFu
dHMuc21hcnRjYXJkVm1Qb3B1cCgpKTsKCiAgICAgICAgLy8gUG9vbHMgVGFiCiAgICAgICAgcG9v
bFRhYi5zZXRMYWJlbChjb25zdGFudHMucG9vbFZtUG9wdXAoKSk7CiAgICAgICAgcG9vbFR5cGVF
ZGl0b3Iuc2V0TGFiZWwoY29uc3RhbnRzLnBvb2xUeXBlVm1Qb3B1cCgpKTsKICAgICAgICBlZGl0
UHJlc3RhcnRlZFZtc0xhYmVsLnNldFRleHQoY29uc3RhbnRzLnByZXN0YXJ0ZWRWbXMoKSk7Cgog
ICAgICAgIHByZXN0YXJ0ZWRMYWJlbC5zZXRUZXh0KGNvbnN0YW50cy5wcmVzdGFydGVkUG9vbFBv
cHVwKCkpOwogICAgICAgIG51bU9mVm1zRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5udW1PZlZt
c1Bvb2xQb3B1cCgpKTsKCiAgICAgICAgLy8gaW5pdGlhbCBydW4gVGFiCiAgICAgICAgaW5pdGlh
bFJ1blRhYi5zZXRMYWJlbChjb25zdGFudHMuaW5pdGlhbFJ1blZtUG9wdXAoKSk7CiAgICAgICAg
ZG9tYWluRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5kb21haW5WbVBvcHVwKCkpOwogICAgICAg
IHRpbWVab25lRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy50elZtUG9wdXAoKSk7CgogICAgICAg
IC8vIENvbnNvbGUgVGFiCiAgICAgICAgY29uc29sZVRhYi5zZXRMYWJlbChjb25zdGFudHMuY29u
c29sZVZtUG9wdXAoKSk7CiAgICAgICAgZGlzcGxheVByb3RvY29sRWRpdG9yLnNldExhYmVsKGNv
bnN0YW50cy5wcm90b2NvbFZtUG9wdXAoKSk7CiAgICAgICAgdXNiU3VwcG9ydEVkaXRvci5zZXRM
YWJlbChjb25zdGFudHMudXNiUG9saWN5Vm1Qb3B1cCgpKTsKICAgICAgICBudW1PZk1vbml0b3Jz
RWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5tb25pdG9yc1ZtUG9wdXAoKSk7CiAgICAgICAgYWxs
b3dDb25zb2xlUmVjb25uZWN0RWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5hbGxvd0NvbnNvbGVS
ZWNvbm5lY3QoKSk7CgogICAgICAgIC8vIEhvc3QgVGFiCiAgICAgICAgaG9zdFRhYi5zZXRMYWJl
bChjb25zdGFudHMuaG9zdFZtUG9wdXAoKSk7CiAgICAgICAgaXNBdXRvQXNzaWduRWRpdG9yLnNl
dExhYmVsKGNvbnN0YW50cy5hbnlIb3N0SW5DbHVzdGVyVm1Qb3B1cCgpKTsKICAgICAgICAvLyBz
cGVjaWZpY0hvc3RFZGl0b3Iuc2V0TGFiZWwoIlNwZWNpZmljIik7CiAgICAgICAgcnVuVk1PblRy
dXN0ZWRIb3N0RWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5ydW5WTU9uVHJ1c3RlZEhvc3RWbVBv
cHVwKCkpOwogICAgICAgIHJ1blZNT25TcGVjaWZpY0hvc3RFZGl0b3Iuc2V0TGFiZWwoY29uc3Rh
bnRzLnJ1bk9uU2VsZWN0ZWRIb3N0Vm1Qb3B1cCgpKTsKICAgICAgICBob3N0Q3B1RWRpdG9yLnNl
dExhYmVsKGNvbnN0YW50cy51c2VIb3N0Q3B1KCkpOwogICAgICAgIGRvbnRNaWdyYXRlVk1FZGl0
b3Iuc2V0TGFiZWwoY29uc3RhbnRzLmFsbG93TWlncmF0aW9uT25seUFkbWluVm1Qb3B1cCgpKTsK
ICAgICAgICBjcHVQaW5uaW5nLnNldExhYmVsKGNvbnN0YW50cy5jcHVQaW5uaW5nTGFiZWwoKSk7
CiAgICAgICAgY3B1UGlubmluZ0xhYmVsLnNldEhUTUwoY29uc3RhbnRzLmNwdVBpbm5pbmdMYWJl
bEV4cGxhbmF0aW9uKCkpOwoKICAgICAgICAvLyBIaWdoIEF2YWlsYWJpbGl0eSBUYWIKICAgICAg
ICBpc0hpZ2hseUF2YWlsYWJsZUVkaXRvci5zZXRMYWJlbChjb25zdGFudHMuaGlnaGx5QXZhaWxh
YmxlVm1Qb3B1cCgpKTsKCiAgICAgICAgLy8gUmVzb3VyY2UgQWxsb2NhdGlvbiBUYWIKICAgICAg
ICBwcm92aXNpb25pbmdFZGl0b3Iuc2V0TGFiZWwoY29uc3RhbnRzLnRlbXBsYXRlUHJvdmlzVm1Q
b3B1cCgpKTsKICAgICAgICBwcm92aXNpb25pbmdUaGluRWRpdG9yLnNldExhYmVsKGNvbnN0YW50
cy50aGluVm1Qb3B1cCgpKTsKICAgICAgICBwcm92aXNpb25pbmdDbG9uZUVkaXRvci5zZXRMYWJl
bChjb25zdGFudHMuY2xvbmVWbVBvcHVwKCkpOwogICAgICAgIG1pbkFsbG9jYXRlZE1lbW9yeUVk
aXRvci5zZXRMYWJlbChjb25zdGFudHMucGh5c01lbUd1YXJWbVBvcHVwKCkpOwoKICAgICAgICAv
LyBCb290IE9wdGlvbnMKICAgICAgICBmaXJzdEJvb3REZXZpY2VFZGl0b3Iuc2V0TGFiZWwoY29u
c3RhbnRzLmZpcnN0RGV2aWNlVm1Qb3B1cCgpKTsKICAgICAgICBzZWNvbmRCb290RGV2aWNlRWRp
dG9yLnNldExhYmVsKGNvbnN0YW50cy5zZWNvbmREZXZpY2VWbVBvcHVwKCkpOwogICAgICAgIGtl
cm5lbF9wYXRoRWRpdG9yLnNldExhYmVsKGNvbnN0YW50cy5rZXJuZWxQYXRoVm1Qb3B1cCgpKTsK
ICAgICAgICBpbml0cmRfcGF0aEVkaXRvci5zZXRMYWJlbChjb25zdGFudHMuaW5pdHJkUGF0aFZt
UG9wdXAoKSk7CiAgICAgICAga2VybmVsX3BhcmFtZXRlcnNFZGl0b3Iuc2V0TGFiZWwoY29uc3Rh
bnRzLmtlcm5lbFBhcmFtc1ZtUG9wdXAoKSk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIGFwcGx5
U3R5bGVzKCkgewogICAgICAgIHJ1blZNT25TcGVjaWZpY0hvc3RFZGl0b3IuYWRkQ29udGVudFdp
ZGdldFN0eWxlTmFtZShzdHlsZS5sb25nQ2hlY2tib3hDb250ZW50KCkpOwogICAgICAgIGhvc3RD
cHVFZGl0b3IuYWRkQ29udGVudFdpZGdldFN0eWxlTmFtZShzdHlsZS5sb25nQ2hlY2tib3hDb250
ZW50KCkpOwogICAgICAgIGRvbnRNaWdyYXRlVk1FZGl0b3IuYWRkQ29udGVudFdpZGdldFN0eWxl
TmFtZShzdHlsZS5sb25nQ2hlY2tib3hDb250ZW50KCkpOwogICAgICAgIGFsbG93Q29uc29sZVJl
Y29ubmVjdEVkaXRvci5hZGRDb250ZW50V2lkZ2V0U3R5bGVOYW1lKHN0eWxlLmxvbmdDaGVja2Jv
eENvbnRlbnQoKSk7CiAgICAgICAgcHJvdmlzaW9uaW5nRWRpdG9yLmFkZENvbnRlbnRXaWRnZXRT
dHlsZU5hbWUoc3R5bGUucHJvdmlzaW9uaW5nRWRpdG9yQ29udGVudCgpKTsKICAgICAgICBwcm92
aXNpb25pbmdUaGluRWRpdG9yLmFkZENvbnRlbnRXaWRnZXRTdHlsZU5hbWUoc3R5bGUucHJvdmlz
aW9uaW5nUmFkaW9Db250ZW50KCkpOwogICAgICAgIHByb3Zpc2lvbmluZ0Nsb25lRWRpdG9yLmFk
ZENvbnRlbnRXaWRnZXRTdHlsZU5hbWUoc3R5bGUucHJvdmlzaW9uaW5nUmFkaW9Db250ZW50KCkp
OwogICAgICAgIGNkQXR0YWNoZWRFZGl0b3IuYWRkQ29udGVudFdpZGdldFN0eWxlTmFtZShzdHls
ZS5jZEF0dGFjaGVkTGFiZWxXaWR0aCgpKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1Ymxp
YyB2b2lkIGVkaXQoVW5pdFZtTW9kZWwgb2JqZWN0KSB7CiAgICAgICAgcHJpb3JpdHlFZGl0b3Iu
c2V0Um93RGF0YShuZXcgQXJyYXlMaXN0PEVudGl0eU1vZGVsPigpKTsKICAgICAgICBwcmlvcml0
eUVkaXRvci5lZGl0KG9iamVjdC5nZXRQcmlvcml0eSgpKTsKICAgICAgICBEcml2ZXIuZHJpdmVy
LmVkaXQob2JqZWN0KTsKICAgICAgICBpbml0VGFiQXZhaWxhYmlsaXR5TGlzdGVuZXJzKG9iamVj
dCk7CiAgICAgICAgaW5pdExpc3RlbmVycyhvYmplY3QpOwogICAgICAgIGluaXRDdXN0b21Qcm9w
ZXJ0eVNoZWV0KG9iamVjdCk7CgogICAgICAgIC8vIG51bU9mVm1zTGFiZWwuc2V0VmlzaWJsZShm
YWxzZSk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIGluaXRDdXN0b21Qcm9wZXJ0eVNoZWV0KGZp
bmFsIFVuaXRWbU1vZGVsIG9iamVjdCkgewogICAgICAgIG9iamVjdC5nZXRDdXN0b21Qcm9wZXJ0
eVNoZWV0KCkuZ2V0S2V5VmFsdWVMaW5lcygpLmdldEl0ZW1zQ2hhbmdlZEV2ZW50KCkuYWRkTGlz
dGVuZXIobmV3IElFdmVudExpc3RlbmVyKCkgewoKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAg
ICAgICAgIHB1YmxpYyB2b2lkIGV2ZW50UmFpc2VkKEV2ZW50IGV2LCBPYmplY3Qgc2VuZGVyLCBF
dmVudEFyZ3MgYXJncykgewogICAgICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllc1NoZWV0RWRp
dG9yLmVkaXQob2JqZWN0LmdldEN1c3RvbVByb3BlcnR5U2hlZXQoKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9KTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEhvc3RUYWJBdmFpbGFi
aWxpdHkoVW5pdFZtTW9kZWwgbW9kZWwpIHsKICAgICAgICAvL2hvc3RUYWIuc2V0VmlzaWJsZSht
b2RlbC5nZXRJc0hvc3RBdmFpbGFibGUoKSk7CiAgICAgICAgaG9zdFRhYi5zZXRWaXNpYmxlKHRy
dWUpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBpbml0TGlzdGVuZXJzKGZpbmFsIFVuaXRWbU1v
ZGVsIG9iamVjdCkgewogICAgICAgIC8vIFRPRE8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNv
cmUgZnJhbWV3b3JrCiAgICAgICAgb2JqZWN0LmdldFByb3BlcnR5Q2hhbmdlZEV2ZW50KCkuYWRk
TGlzdGVuZXIobmV3IElFdmVudExpc3RlbmVyKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAg
ICAgICAgICAgcHVibGljIHZvaWQgZXZlbnRSYWlzZWQoRXZlbnQgZXYsIE9iamVjdCBzZW5kZXIs
IEV2ZW50QXJncyBhcmdzKSB7CiAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSAoKFBy
b3BlcnR5Q2hhbmdlZEV2ZW50QXJncykgYXJncykuUHJvcGVydHlOYW1lOwogICAgICAgICAgICAg
ICAgaWYgKCJJc0hvc3RBdmFpbGFibGUiLmVxdWFscyhwcm9wTmFtZSkpIHsgLy8kTk9OLU5MUy0x
JAogICAgICAgICAgICAgICAgICAgIHNldHVwSG9zdFRhYkF2YWlsYWJpbGl0eShvYmplY3QpOwog
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiSXNIb3N0VGFiVmFsaWQiLmVxdWFscyhwcm9wTmFt
ZSkpIHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZ2V0SXNI
b3N0VGFiVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBob3N0VGFiLm1hcmtBc1Zh
bGlkKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgaG9zdFRhYi5tYXJrQXNJbnZhbGlkKG51bGwpOwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgc2V0dXBIb3N0VGFiQXZhaWxhYmlsaXR5KG9i
amVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgb2JqZWN0LmdldElzQXV0
b0Fzc2lnbigpLmdldFByb3BlcnR5Q2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIobmV3IElFdmVu
dExpc3RlbmVyKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZv
aWQgZXZlbnRSYWlzZWQoRXZlbnQgZXYsIE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKSB7
CiAgICAgICAgICAgICAgICBib29sZWFuIGlzQXV0b0Fzc2lnbiA9IChCb29sZWFuKSBvYmplY3Qu
Z2V0SXNBdXRvQXNzaWduKCkuZ2V0RW50aXR5KCk7CiAgICAgICAgICAgICAgICBib29sZWFuIHJ1
blZNT25UcnVzdGVkSG9zdCA9IChCb29sZWFuKSBvYmplY3QuZ2V0UnVuVk1PblRydXN0ZWRIb3N0
KCkuZ2V0RW50aXR5KCk7CiAgICAgICAgICAgICAgICBkZWZhdWx0SG9zdEVkaXRvci5zZXRFbmFi
bGVkKCFpc0F1dG9Bc3NpZ24gJiYgIXJ1blZNT25UcnVzdGVkSG9zdCk7CiAgICAgICAgICAgICAg
ICAvL2RlZmF1bHRIb3N0RWRpdG9yLnNldEVuYWJsZWQoIWlzQXV0b0Fzc2lnbik7CgogICAgICAg
ICAgICAgICAgLy8gb25seSB0aGlzIGlzIG5vdCBiaW5kIHRvIHRoZSBtb2RlbCwgc28gbmVlZHMg
dG8gbGlzdGVuIHRvIHRoZSBjaGFuZ2UgZXhwbGljaXRseQogICAgICAgICAgICAgICBzcGVjaWZp
Y0hvc3Quc2V0VmFsdWUoIWlzQXV0b0Fzc2lnbiAmJiAhcnVuVk1PblRydXN0ZWRIb3N0KTsKICAg
ICAgICAgICAgICAgLy9zcGVjaWZpY0hvc3Quc2V0VmFsdWUoIWlzQXV0b0Fzc2lnbik7CiAgICAg
ICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gb25seSBmb3Igbm9uIGxvY2FsIHN0b3Jh
Z2UgYXZhaWxhYmxlCiAgICAgICAgc2V0dXBIb3N0VGFiQXZhaWxhYmlsaXR5KG9iamVjdCk7Cgog
ICAgICAgIG9iamVjdC5nZXRTdG9yYWdlRG9tYWluKCkuZ2V0SXRlbXNDaGFuZ2VkRXZlbnQoKS5h
ZGRMaXN0ZW5lcihuZXcgSUV2ZW50TGlzdGVuZXIoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQog
ICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRl
ciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAgICAgICAgICAgIGFkZERpc2tBbGxvY2F0aW9uKG9i
amVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgb2JqZWN0LmdldFByb3Zp
c2lvbmluZygpLmdldFByb3BlcnR5Q2hhbmdlZEV2ZW50KCkuYWRkTGlzdGVuZXIobmV3IElFdmVu
dExpc3RlbmVyKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZv
aWQgZXZlbnRSYWlzZWQoRXZlbnQgZXYsIE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBhcmdzKSB7
CiAgICAgICAgICAgICAgICBib29sZWFuIGlzUHJvdmlzaW9uaW5nQ2hhbmdhYmxlID0gb2JqZWN0
LmdldFByb3Zpc2lvbmluZygpLmdldElzQ2hhbmdhYmxlKCk7CiAgICAgICAgICAgICAgICBwcm92
aXNpb25pbmdUaGluRWRpdG9yLnNldEVuYWJsZWQoaXNQcm92aXNpb25pbmdDaGFuZ2FibGUpOwog
ICAgICAgICAgICAgICAgcHJvdmlzaW9uaW5nQ2xvbmVFZGl0b3Iuc2V0RW5hYmxlZChpc1Byb3Zp
c2lvbmluZ0NoYW5nYWJsZSk7CgogICAgICAgICAgICAgICAgYm9vbGVhbiBpc1Byb3Zpc2lvbmlu
Z0F2YWlsYWJsZSA9IG9iamVjdC5nZXRQcm92aXNpb25pbmcoKS5nZXRJc0F2YWlsYWJsZSgpOwog
ICAgICAgICAgICAgICAgcHJvdmlzaW9uU2VsZWN0aW9uUGFuZWwuc2V0VmlzaWJsZShpc1Byb3Zp
c2lvbmluZ0F2YWlsYWJsZSk7CgogICAgICAgICAgICAgICAgYm9vbGVhbiBpc0Rpc2tzQXZhaWxh
YmxlID0gb2JqZWN0LmdldElzRGlza3NBdmFpbGFibGUoKTsKICAgICAgICAgICAgICAgIGRpc2tz
QWxsb2NhdGlvblBhbmVsLnNldFZpc2libGUoaXNEaXNrc0F2YWlsYWJsZSk7CgogICAgICAgICAg
ICAgICAgc3RvcmFnZUFsbG9jYXRpb25QYW5lbC5zZXRWaXNpYmxlKGlzUHJvdmlzaW9uaW5nQXZh
aWxhYmxlIHx8IGlzRGlza3NBdmFpbGFibGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7Cgog
ICAgICAgIG9iamVjdC5nZXRVc2JQb2xpY3koKS5nZXRQcm9wZXJ0eUNoYW5nZWRFdmVudCgpLmFk
ZExpc3RlbmVyKG5ldyBJRXZlbnRMaXN0ZW5lcigpIHsKCiAgICAgICAgICAgIEBPdmVycmlkZQog
ICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRl
ciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAgICAgICAgICAgIFByb3BlcnR5Q2hhbmdlZEV2ZW50
QXJncyBlID0gKFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncykgYXJnczsKCiAgICAgICAgICAgICAg
ICBpZiAoZS5Qcm9wZXJ0eU5hbWUgPT0gIlNlbGVjdGVkSXRlbSIpIHsgLy8kTk9OLU5MUy0xJAog
ICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzYk5hdGl2ZU1lc3NhZ2VWaXNpYmlsaXR5KG9iamVj
dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAg
dXBkYXRlVXNiTmF0aXZlTWVzc2FnZVZpc2liaWxpdHkob2JqZWN0KTsKICAgIH0KCiAgICBwcm90
ZWN0ZWQgdm9pZCB1cGRhdGVVc2JOYXRpdmVNZXNzYWdlVmlzaWJpbGl0eShmaW5hbCBVbml0Vm1N
b2RlbCBvYmplY3QpIHsKICAgICAgICBuYXRpdmVVc2JXYXJuaW5nTWVzc2FnZS5zZXRWaXNpYmxl
KG9iamVjdC5nZXRVc2JQb2xpY3koKS5nZXRTZWxlY3RlZEl0ZW0oKSA9PSBVc2JQb2xpY3kuRU5B
QkxFRF9OQVRJVkUpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBhZGREaXNrQWxsb2NhdGlvbihV
bml0Vm1Nb2RlbCBtb2RlbCkgewogICAgICAgIC8vIEFycmF5TGlzdDxzdG9yYWdlX2RvbWFpbnM+
IHN0b3JhZ2VEb21haW5zID0gKEFycmF5TGlzdDxzdG9yYWdlX2RvbWFpbnM+KSBtb2RlbC5nZXRT
dG9yYWdlRG9tYWluKCkuZ2V0SXRlbXMoKTsKICAgICAgICBpZiAoIW1vZGVsLmdldElzRGlza3NB
dmFpbGFibGUoKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRpc2tz
QWxsb2NhdGlvblZpZXcuZWRpdChtb2RlbC5nZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpKTsKICAg
ICAgICBtb2RlbC5nZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpLmdldFN0b3JhZ2VEb21haW4oKS5z
ZXRJdGVtcyhtb2RlbC5nZXRTdG9yYWdlRG9tYWluKCkuZ2V0SXRlbXMoKSk7CiAgICAgICAgbW9k
ZWwuZ2V0RGlza3NBbGxvY2F0aW9uTW9kZWwoKS5zZXREaXNrcyhtb2RlbC5nZXREaXNrcygpKTsK
ICAgIH0KCiAgICBwcml2YXRlIHZvaWQgaW5pdFRhYkF2YWlsYWJpbGl0eUxpc3RlbmVycyhmaW5h
bCBVbml0Vm1Nb2RlbCB2bSkgewogICAgICAgIC8vIFRPRE8gc2hvdWxkIGJlIGhhbmRsZWQgYnkg
dGhlIGNvcmUgZnJhbWV3b3JrCiAgICAgICAgdm0uZ2V0UHJvcGVydHlDaGFuZ2VkRXZlbnQoKS5h
ZGRMaXN0ZW5lcihuZXcgSUV2ZW50TGlzdGVuZXIoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQog
ICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRl
ciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9ICgo
UHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKSBhcmdzKS5Qcm9wZXJ0eU5hbWU7CiAgICAgICAgICAg
ICAgICBpZiAoIklzV2luZG93c09TIi5lcXVhbHMocHJvcE5hbWUpKSB7IC8vJE5PTi1OTFMtMSQK
ICAgICAgICAgICAgICAgICAgICBkb21haW5FZGl0b3Iuc2V0RW5hYmxlZCh2bS5nZXRJc1dpbmRv
d3NPUygpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIklzR2VuZXJhbFRhYlZhbGlkIi5l
cXVhbHMocHJvcE5hbWUpKSB7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgICAgICBpZiAo
dm0uZ2V0SXNHZW5lcmFsVGFiVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmFsVGFiLm1hcmtBc1ZhbGlkKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhbFRhYi5tYXJrQXNJbnZhbGlkKG51bGwpOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIklzRGlzcGxheVRhYlZh
bGlkIi5lcXVhbHMocHJvcE5hbWUpKSB7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgICAg
ICBpZiAodm0uZ2V0SXNEaXNwbGF5VGFiVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlVGFiLm1hcmtBc1ZhbGlkKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVRhYi5tYXJrQXNJbnZhbGlkKG51bGwpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIklzQWxsb2Nh
dGlvblRhYlZhbGlkIi5lcXVhbHMocHJvcE5hbWUpKSB7IC8vJE5PTi1OTFMtMSQKICAgICAgICAg
ICAgICAgICAgICBpZiAodm0uZ2V0SXNBbGxvY2F0aW9uVGFiVmFsaWQoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXNvdXJjZUFsbG9jYXRpb25UYWIubWFya0FzVmFsaWQoKTsKICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFs
bG9jYXRpb25UYWIubWFya0FzSW52YWxpZChudWxsKTsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJJc0hpZ2hseUF2YWlsYWJsZSIuZXF1YWxzKHByb3BO
YW1lKSkgeyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICAgICAgaGlnaEF2YWlsYWJpbGl0
eVRhYi5zZXRWaXNpYmxlKChCb29sZWFuKSB2bS5nZXRJc0hpZ2hseUF2YWlsYWJsZSgpLmdldEVu
dGl0eSgpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIklzQm9vdFNlcXVlbmNlVGFiVmFs
aWQiLmVxdWFscyhwcm9wTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAg
IGlmICgoQm9vbGVhbikgdm0uZ2V0SXNIaWdobHlBdmFpbGFibGUoKS5nZXRFbnRpdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICBib290T3B0aW9uc1RhYi5tYXJrQXNWYWxpZCgpOwogICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RPcHRp
b25zVGFiLm1hcmtBc0ludmFsaWQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICgiSXNDdXN0b21Qcm9wZXJ0aWVzVGFiVmFsaWQiLmVxdWFscyhw
cm9wTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgIGlmICh2bS5nZXRJ
c0N1c3RvbVByb3BlcnRpZXNUYWJWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1
c3RvbVByb3BlcnRpZXNUYWIubWFya0FzVmFsaWQoKTsKICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzVGFiLm1hcmtBc0lu
dmFsaWQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIklzRGlza3NBdmFpbGFibGUiLmVxdWFscyhwcm9wTmFtZSkp
IHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNEaXNrc0F2YWls
YWJsZSA9IHZtLmdldElzRGlza3NBdmFpbGFibGUoKTsKICAgICAgICAgICAgICAgICAgICBkaXNr
c0FsbG9jYXRpb25QYW5lbC5zZXRWaXNpYmxlKGlzRGlza3NBdmFpbGFibGUpOwoKICAgICAgICAg
ICAgICAgICAgICBib29sZWFuIGlzUHJvdmlzaW9uaW5nQXZhaWxhYmxlID0gdm0uZ2V0UHJvdmlz
aW9uaW5nKCkuZ2V0SXNBdmFpbGFibGUoKTsKICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWxs
b2NhdGlvblBhbmVsLnNldFZpc2libGUoaXNQcm92aXNpb25pbmdBdmFpbGFibGUgfHwgaXNEaXNr
c0F2YWlsYWJsZSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc0Rpc2tzQXZhaWxhYmxlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB3YXJuaW5nIG1lc3NhZ2UgYnkgZGlz
a3Mgc3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURpc2tzV2FybmluZ0J5SW1h
Z2VTdGF0dXModm0uZ2V0RGlza3MoKSwgSW1hZ2VTdGF0dXMuSUxMRUdBTCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZURpc2tzV2FybmluZ0J5SW1hZ2VTdGF0dXModm0uZ2V0RGlza3Mo
KSwgSW1hZ2VTdGF0dXMuTE9DS0VEKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHdhcm5pbmcg
bWVzc2FnZQogICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsV2FybmluZ01lc3NhZ2Uuc2V0
VGV4dCgiIik7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gSGlnaCBBdmFpbGFi
aWxpdHkgb25seSBhdmFpbCBpbiBzZXJ2ZXIgbW9kZQogICAgICAgIGhpZ2hBdmFpbGFiaWxpdHlU
YWIuc2V0VmlzaWJsZSh2bS5nZXRWbVR5cGUoKS5lcXVhbHMoVm1UeXBlLlNlcnZlcikpOwoKICAg
ICAgICAvLyBUT0RPOiBNb3ZlIHRvIGEgbW9yZSBhcHByb3ByaWF0ZSBtZXRob2QKICAgICAgICB2
bS5nZXRQcm9wZXJ0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKG5ldyBJRXZlbnRMaXN0ZW5l
cigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGV2ZW50
UmFpc2VkKEV2ZW50IGV2LCBPYmplY3Qgc2VuZGVyLCBFdmVudEFyZ3MgYXJncykgewogICAgICAg
ICAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gKChQcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MpIGFy
Z3MpLlByb3BlcnR5TmFtZTsKICAgICAgICAgICAgICAgIGlmICgiSXNMaW51eF9VbmFzc2lnbl9V
bmtub3duT1MiLmVxdWFscyhwcm9wTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAg
ICAgICAgIGxpbnV4Qm9vdE9wdGlvbnNQYW5lbC5zZXRWaXNpYmxlKHZtLmdldElzTGludXhfVW5h
c3NpZ25fVW5rbm93bk9TKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfSk7CgogICAgICAgIC8vIG9ubHkgYXZhaWwgZm9yIGRlc2t0b3AgbW9kZQogICAgICAgIGlz
U3RhdGVsZXNzRWRpdG9yLnNldFZpc2libGUodm0uZ2V0Vm1UeXBlKCkuZXF1YWxzKFZtVHlwZS5E
ZXNrdG9wKSk7CiAgICAgICAgbnVtT2ZNb25pdG9yc0VkaXRvci5zZXRWaXNpYmxlKHZtLmdldFZt
VHlwZSgpLmVxdWFscyhWbVR5cGUuRGVza3RvcCkpOwoKICAgICAgICBkZWZhdWx0SG9zdEVkaXRv
ci5zZXRFbmFibGVkKGZhbHNlKTsKICAgICAgICBzcGVjaWZpY0hvc3QuYWRkVmFsdWVDaGFuZ2VI
YW5kbGVyKG5ldyBWYWx1ZUNoYW5nZUhhbmRsZXI8Qm9vbGVhbj4oKSB7CiAgICAgICAgICAgIEBP
dmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKFZhbHVlQ2hhbmdl
RXZlbnQ8Qm9vbGVhbj4gZXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SG9zdEVk
aXRvci5zZXRFbmFibGVkKHNwZWNpZmljSG9zdC5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgVmFsdWVDaGFuZ2VFdmVudC5maXJlKGlzQXV0b0Fzc2lnbkVkaXRvci5hc1JhZGlvQnV0
dG9uKCksIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBUT0RP
OiBUaGlzIGlzIGEgaGFjayBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgY2xlYW5seSB2aWEgbW9kZWwg
cHJvcGVydHkgYXZhaWxhYmlsaXR5CiAgICAgICAgaXNBdXRvQXNzaWduRWRpdG9yLmFkZERvbUhh
bmRsZXIobmV3IENsaWNrSGFuZGxlcigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAg
ICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgewogICAgICAgICAgICAg
ICAgZGVmYXVsdEhvc3RFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9LCBDbGlja0V2ZW50LmdldFR5cGUoKSk7CgogICAgICAgIHZtLmdldElzQXV0b0Fzc2ln
bigpLmdldEVudGl0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKG5ldyBJRXZlbnRMaXN0ZW5l
cigpIHsKCiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVu
dFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAg
ICAgICAgICAgIGlmICghaXNBdXRvQXNzaWduRWRpdG9yLmFzUmFkaW9CdXR0b24oKS5nZXRWYWx1
ZSgpICYmICFydW5WTU9uVHJ1c3RlZEhvc3RFZGl0b3IuYXNSYWRpb0J1dHRvbigpLmdldFZhbHVl
KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIb3N0LnNl
dFZhbHVlKHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfSk7CgogICAgICAgIC8qcnVuVk1PblRydXN0ZWRIb3N0RWRpdG9yLmFkZERvbUhhbmRsZXIo
bmV3IENsaWNrSGFuZGxlcigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1
YmxpYyB2b2lkIG9uQ2xpY2soQ2xpY2tFdmVudCBldmVudCkgewogICAgICAgICAgICAgICAgZGVm
YXVsdEhvc3RFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
LCBDbGlja0V2ZW50LmdldFR5cGUoKSk7CgogICAgICAgIHZtLmdldFJ1blZNT25UcnVzdGVkSG9z
dCgpLmdldEVudGl0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKG5ldyBJRXZlbnRMaXN0ZW5l
cigpIHsKCiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVu
dFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAg
ICAgICAgICAgIGlmICghcnVuVk1PblRydXN0ZWRIb3N0RWRpdG9yLmFzUmFkaW9CdXR0b24oKS5n
ZXRWYWx1ZSgpICYmICFpc0F1dG9Bc3NpZ25FZGl0b3IuYXNSYWRpb0J1dHRvbigpLmdldFZhbHVl
KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIb3N0LnNl
dFZhbHVlKHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfSk7Ki8KCiAgICAgICAgY3B1UGlubmluZ0xhYmVsLnNldFZpc2libGUodm0uZ2V0Q3B1UGlu
bmluZygpLmdldElzQXZhaWxhYmxlKCkpOwogICAgICAgIHZtLmdldENwdVBpbm5pbmcoKS5nZXRQ
cm9wZXJ0eUNoYW5nZWRFdmVudCgpLmFkZExpc3RlbmVyKG5ldyBJRXZlbnRMaXN0ZW5lcigpIHsK
CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBldmVudFJhaXNl
ZChFdmVudCBldiwgT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3MpIHsKICAgICAgICAgICAg
ICAgIGNwdVBpbm5pbmdMYWJlbC5zZXRWaXNpYmxlKHZtLmdldENwdVBpbm5pbmcoKS5nZXRJc0F2
YWlsYWJsZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgIH0KCiAgICBwcml2YXRl
IHZvaWQgdXBkYXRlRGlza3NXYXJuaW5nQnlJbWFnZVN0YXR1cyhMaXN0PERpc2tNb2RlbD4gZGlz
a3MsIEltYWdlU3RhdHVzIGltYWdlU3RhdHVzKSB7CiAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4g
ZGlza3NBbGlhc2VzID0KICAgICAgICAgICAgICAgIGdldERpc2tzQWxpYXNlc0J5SW1hZ2VTdGF0
dXMoZGlza3MsIGltYWdlU3RhdHVzKTsKCiAgICAgICAgaWYgKCFkaXNrc0FsaWFzZXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgIGdlbmVyYWxXYXJuaW5nTWVzc2FnZS5zZXRUZXh0KG1lc3NhZ2Vz
LmRpc2tzU3RhdHVzV2FybmluZygKICAgICAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRvci5j
cmVhdGVBbmRUcmFuc2xhdGUoaW1hZ2VTdGF0dXMpLAogICAgICAgICAgICAgICAgICAgIChTdHJp
bmdVdGlscy5qb2luKGRpc2tzQWxpYXNlcywgIiwgIikpKSk7IC8vJE5PTi1OTFMtMSQKICAgICAg
ICB9CiAgICB9CgogICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBnZXREaXNrc0FsaWFzZXNC
eUltYWdlU3RhdHVzKExpc3Q8RGlza01vZGVsPiBkaXNrcywgSW1hZ2VTdGF0dXMgc3RhdHVzKSB7
CiAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gZGlza3NBbGlhc2VzID0gbmV3IEFycmF5TGlzdDxT
dHJpbmc+KCk7CgogICAgICAgIGlmIChkaXNrcyA9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVy
biBkaXNrc0FsaWFzZXM7CiAgICAgICAgfQoKICAgICAgICBmb3IgKERpc2tNb2RlbCBkaXNrTW9k
ZWwgOiBkaXNrcykgewogICAgICAgICAgICBEaXNrIGRpc2sgPSBkaXNrTW9kZWwuZ2V0RGlzaygp
OwogICAgICAgICAgICBpZiAoZGlzay5nZXREaXNrU3RvcmFnZVR5cGUoKSA9PSBEaXNrU3RvcmFn
ZVR5cGUuSU1BR0UgJiYKICAgICAgICAgICAgICAgICAgICAoKERpc2tJbWFnZSkgZGlzaykuZ2V0
aW1hZ2VTdGF0dXMoKSA9PSBzdGF0dXMpIHsKCiAgICAgICAgICAgICAgICBkaXNrc0FsaWFzZXMu
YWRkKGRpc2suZ2V0RGlza0FsaWFzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg
ICByZXR1cm4gZGlza3NBbGlhc2VzOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFVu
aXRWbU1vZGVsIGZsdXNoKCkgewogICAgICAgIHByaW9yaXR5RWRpdG9yLmZsdXNoKCk7CiAgICAg
ICAgcmV0dXJuIERyaXZlci5kcml2ZXIuZmx1c2goKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAg
IHB1YmxpYyB2b2lkIGZvY3VzSW5wdXQoKSB7CiAgICAgICAgbmFtZUVkaXRvci5zZXRGb2N1cyh0
cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgaW50ZXJmYWNlIEJ1dHRvbkNlbGxUYWJsZVJlc291cmNl
cyBleHRlbmRzIENlbGxUYWJsZS5SZXNvdXJjZXMgewogICAgICAgIGludGVyZmFjZSBUYWJsZVN0
eWxlIGV4dGVuZHMgQ2VsbFRhYmxlLlN0eWxlIHsKICAgICAgICB9CgogICAgICAgIEBPdmVycmlk
ZQogICAgICAgIEBTb3VyY2UoeyBDZWxsVGFibGUuU3R5bGUuREVGQVVMVF9DU1MsICJvcmcvb3Zp
cnQvZW5naW5lL3VpL2NvbW1vbi9jc3MvQnV0dG9uQ2VsbFRhYmxlLmNzcyIgfSkKICAgICAgICBU
YWJsZVN0eWxlIGNlbGxUYWJsZVN0eWxlKCk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJs
aWMgaW50IHNldFRhYkluZGV4ZXMoaW50IG5leHRUYWJJbmRleCkgewogICAgICAgIC8vID09R2Vu
ZXJhbCBUYWI9PQogICAgICAgIG5leHRUYWJJbmRleCA9IGdlbmVyYWxUYWIuc2V0VGFiSW5kZXhl
cyhuZXh0VGFiSW5kZXgpOwogICAgICAgIGRhdGFDZW50ZXJFZGl0b3Iuc2V0VGFiSW5kZXgobmV4
dFRhYkluZGV4KyspOwogICAgICAgIGNsdXN0ZXJFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYklu
ZGV4KyspOwogICAgICAgIHF1b3RhRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsK
ICAgICAgICBuYW1lRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsKICAgICAgICBk
ZXNjcmlwdGlvbkVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7CgogICAgICAgIG51
bU9mVm1zRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsKICAgICAgICBwcmVzdGFy
dGVkVm1zRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsKICAgICAgICBlZGl0UHJl
c3RhcnRlZFZtc0VkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7CiAgICAgICAgaW5j
cmFzZU51bU9mVm1zRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsKCiAgICAgICAg
dGVtcGxhdGVFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwogICAgICAgIG1lbVNp
emVFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwogICAgICAgIHRvdGFsdkNQVXNF
ZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwoKICAgICAgICBuZXh0VGFiSW5kZXgg
PSBnZW5lcmFsQWR2YW5jZWRQYXJhbWV0ZXJFeHBhbmRlci5zZXRUYWJJbmRleGVzKG5leHRUYWJJ
bmRleCk7CiAgICAgICAgY29yZVBlclNvY2tldEVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5k
ZXgrKyk7CiAgICAgICAgbnVtT2ZTb2NrZXRzRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRl
eCsrKTsKCiAgICAgICAgb1NUeXBlRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsrKTsK
ICAgICAgICBpc1N0YXRlbGVzc0VkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7CiAg
ICAgICAgaXNEZWxldGVQcm90ZWN0ZWRFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4Kysp
OwoKICAgICAgICAvLyA9PSBQb29scyA9PQogICAgICAgIG5leHRUYWJJbmRleCA9IHBvb2xUYWIu
c2V0VGFiSW5kZXhlcyhuZXh0VGFiSW5kZXgpOwogICAgICAgIHBvb2xUeXBlRWRpdG9yLnNldFRh
YkluZGV4KG5leHRUYWJJbmRleCsrKTsKCiAgICAgICAgLy8gPT1Jbml0aWFsIHJ1biBUYWI9PQog
ICAgICAgIG5leHRUYWJJbmRleCA9IGluaXRpYWxSdW5UYWIuc2V0VGFiSW5kZXhlcyhuZXh0VGFi
SW5kZXgpOwogICAgICAgIHRpbWVab25lRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsr
KTsKICAgICAgICBkb21haW5FZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwoKICAg
ICAgICAvLyA9PUNvbnNvbGUgVGFiPT0KICAgICAgICBuZXh0VGFiSW5kZXggPSBjb25zb2xlVGFi
LnNldFRhYkluZGV4ZXMobmV4dFRhYkluZGV4KTsKICAgICAgICBkaXNwbGF5UHJvdG9jb2xFZGl0
b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwogICAgICAgIHVzYlN1cHBvcnRFZGl0b3Iu
c2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwogICAgICAgIG51bU9mTW9uaXRvcnNFZGl0b3Iu
c2V0VGFiSW5kZXgobmV4dFRhYkluZGV4KyspOwogICAgICAgIGlzU21hcnRjYXJkRW5hYmxlZEVk
aXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7CiAgICAgICAgbmV4dFRhYkluZGV4ID0g
ZXhwYW5kZXIuc2V0VGFiSW5kZXhlcyhuZXh0VGFiSW5kZXgpOwogICAgICAgIGFsbG93Q29uc29s
ZVJlY29ubmVjdEVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7CgogICAgICAgIC8v
ID09SG9zdCBUYWI9PQogICAgICAgIG5leHRUYWJJbmRleCA9IGhvc3RUYWIuc2V0VGFiSW5kZXhl
cyhuZXh0VGFiSW5kZXgpOwogICAgICAgIGlzQXV0b0Fzc2lnbkVkaXRvci5zZXRUYWJJbmRleChu
ZXh0VGFiSW5kZXgrKyk7CiAgICAgICAgc3BlY2lmaWNIb3N0LnNldFRhYkluZGV4KG5leHRUYWJJ
bmRleCsrKTsKICAgICAgICBkZWZhdWx0SG9zdEVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5k
ZXgrKyk7CiAgICAgICAgcnVuVk1PblNwZWNpZmljSG9zdEVkaXRvci5zZXRUYWJJbmRleChuZXh0
VGFiSW5kZXgrKyk7CiAgICAgICAgcnVuVk1PblRydXN0ZWRIb3N0RWRpdG9yLnNldFRhYkluZGV4
KG5leHRUYWJJbmRleCsrKTsKICAgICAgICBob3N0Q3B1RWRpdG9yLnNldFRhYkluZGV4KG5leHRU
YWJJbmRleCsrKTsKICAgICAgICBkb250TWlncmF0ZVZNRWRpdG9yLnNldFRhYkluZGV4KG5leHRU
YWJJbmRleCsrKTsKICAgICAgICBjcHVQaW5uaW5nLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsr
KTsKCiAgICAgICAgLy8gPT1IaWdoIEF2YWlsYWJpbGl0eSBUYWI9PQogICAgICAgIG5leHRUYWJJ
bmRleCA9IGhpZ2hBdmFpbGFiaWxpdHlUYWIuc2V0VGFiSW5kZXhlcyhuZXh0VGFiSW5kZXgpOwog
ICAgICAgIGlzSGlnaGx5QXZhaWxhYmxlRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsr
KTsKICAgICAgICBwcmlvcml0eUVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgrKyk7Cgog
ICAgICAgIC8vID09UmVzb3VyY2UgQWxsb2NhdGlvbiBUYWI9PQogICAgICAgIG5leHRUYWJJbmRl
eCA9IHJlc291cmNlQWxsb2NhdGlvblRhYi5zZXRUYWJJbmRleGVzKG5leHRUYWJJbmRleCk7CiAg
ICAgICAgbWluQWxsb2NhdGVkTWVtb3J5RWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRleCsr
KTsKICAgICAgICBwcm92aXNpb25pbmdFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4Kysp
OwogICAgICAgIHByb3Zpc2lvbmluZ1RoaW5FZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4
KyspOwogICAgICAgIHByb3Zpc2lvbmluZ0Nsb25lRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJ
bmRleCsrKTsKICAgICAgICBuZXh0VGFiSW5kZXggPSBkaXNrc0FsbG9jYXRpb25WaWV3LnNldFRh
YkluZGV4ZXMobmV4dFRhYkluZGV4KTsKCiAgICAgICAgLy8gPT1Cb290IE9wdGlvbnMgVGFiPT0K
ICAgICAgICBuZXh0VGFiSW5kZXggPSBib290T3B0aW9uc1RhYi5zZXRUYWJJbmRleGVzKG5leHRU
YWJJbmRleCk7CiAgICAgICAgZmlyc3RCb290RGV2aWNlRWRpdG9yLnNldFRhYkluZGV4KG5leHRU
YWJJbmRleCsrKTsKICAgICAgICBzZWNvbmRCb290RGV2aWNlRWRpdG9yLnNldFRhYkluZGV4KG5l
eHRUYWJJbmRleCsrKTsKICAgICAgICBjZEF0dGFjaGVkRWRpdG9yLnNldFRhYkluZGV4KG5leHRU
YWJJbmRleCsrKTsKICAgICAgICBjZEltYWdlRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRl
eCsrKTsKICAgICAgICBrZXJuZWxfcGF0aEVkaXRvci5zZXRUYWJJbmRleChuZXh0VGFiSW5kZXgr
Kyk7CiAgICAgICAgaW5pdHJkX3BhdGhFZGl0b3Iuc2V0VGFiSW5kZXgobmV4dFRhYkluZGV4Kysp
OwogICAgICAgIGtlcm5lbF9wYXJhbWV0ZXJzRWRpdG9yLnNldFRhYkluZGV4KG5leHRUYWJJbmRl
eCsrKTsKCiAgICAgICAgLy8gPT1DdXN0b20gUHJvcGVydGllcyBUYWI9PQogICAgICAgIG5leHRU
YWJJbmRleCA9IGN1c3RvbVByb3BlcnRpZXNUYWIuc2V0VGFiSW5kZXhlcyhuZXh0VGFiSW5kZXgp
OwovLyAgICAgICAgY3VzdG9tUHJvcGVydGllc1NoZWV0RWRpdG9yLnNldFRhYkluZGV4KG5leHRU
YWJJbmRleCsrKTsKCiAgICAgICAgcmV0dXJuIG5leHRUYWJJbmRleDsKICAgIH0KfQo=
--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_
Content-Type: application/octet-stream; name="VmListModel.java"
Content-Description: VmListModel.java
Content-Disposition: attachment; filename="VmListModel.java"; size=114678;
creation-date="Tue, 12 Mar 2013 08:37:27 GMT";
modification-date="Tue, 12 Mar 2013 08:29:15 GMT"
Content-Transfer-Encoding: base64
cGFja2FnZSBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy52bXM7CgppbXBv
cnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBq
YXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwppbXBvcnQgamF2
YS51dGlsLkxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcC5F
bnRyeTsKCmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLlZkY0FjdGlvblV0aWxz
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5hY3Rpb24uQWRkVm1Gcm9tU2Ny
YXRjaFBhcmFtZXRlcnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmFjdGlv
bi5BZGRWbUZyb21UZW1wbGF0ZVBhcmFtZXRlcnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNv
cmUuY29tbW9uLmFjdGlvbi5BZGRWbVRlbXBsYXRlUGFyYW1ldGVyczsKaW1wb3J0IG9yZy5vdmly
dC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9uLkF0dGFjaEVudGl0eVRvVGFnUGFyYW1ldGVyczsK
aW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9uLkNoYW5nZURpc2tDb21t
YW5kUGFyYW1ldGVyczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9u
LkNoYW5nZVZNQ2x1c3RlclBhcmFtZXRlcnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUu
Y29tbW9uLmFjdGlvbi5IaWJlcm5hdGVWbVBhcmFtZXRlcnM7CmltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLmNvcmUuY29tbW9uLmFjdGlvbi5NaWdyYXRlVm1QYXJhbWV0ZXJzOwppbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5hY3Rpb24uTWlncmF0ZVZtVG9TZXJ2ZXJQYXJhbWV0ZXJz
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5hY3Rpb24uTW92ZVZtUGFyYW1l
dGVyczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9uLlJlbW92ZVZt
UGFyYW1ldGVyczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9uLlJ1
blZtT25jZVBhcmFtczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9u
LlJ1blZtUGFyYW1zOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5hY3Rpb24u
U2h1dGRvd25WbVBhcmFtZXRlcnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9u
LmFjdGlvbi5TdG9wVm1QYXJhbWV0ZXJzOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNv
bW1vbi5hY3Rpb24uU3RvcFZtVHlwZUVudW07CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUu
Y29tbW9uLmFjdGlvbi5WZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZTsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUuY29yZS5jb21tb24uYWN0aW9uLlZkY0FjdGlvblR5cGU7CmltcG9ydCBvcmcub3ZpcnQu
ZW5naW5lLmNvcmUuY29tbW9uLmFjdGlvbi5WZGNSZXR1cm5WYWx1ZUJhc2U7CmltcG9ydCBvcmcu
b3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmFjdGlvbi5WbU1hbmFnZW1lbnRQYXJhbWV0ZXJzQmFz
ZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYWN0aW9uLlZtT3BlcmF0aW9u
UGFyYW1ldGVyQmFzZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5l
c3NlbnRpdGllcy5EaXNrOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNp
bmVzc2VudGl0aWVzLkRpc2suRGlza1N0b3JhZ2VUeXBlOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2lu
ZS5jb3JlLmNvbW1vbi5idXNpbmVzc2VudGl0aWVzLkRpc2tJbWFnZTsKaW1wb3J0IG9yZy5vdmly
dC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5EaXNwbGF5VHlwZTsKaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5NaWdyYXRpb25T
dXBwb3J0OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2VudGl0
aWVzLlF1b3RhOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2Vu
dGl0aWVzLlVzYlBvbGljeTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVz
aW5lc3NlbnRpdGllcy5WRFM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1
c2luZXNzZW50aXRpZXMuVkRTR3JvdXA7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29t
bW9uLmJ1c2luZXNzZW50aXRpZXMuVk07CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29t
bW9uLmJ1c2luZXNzZW50aXRpZXMuVm1Pc1R5cGU7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNv
cmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMuVm1UZW1wbGF0ZTsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5WbVR5cGU7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMuVm9sdW1lVHlwZTsKaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy5zdG9yYWdlX2Rv
bWFpbnM7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRp
ZXMuc3RvcmFnZV9wb29sOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNp
bmVzc2VudGl0aWVzLm5ldHdvcmsuVm1OZXR3b3JrSW50ZXJmYWNlOwppbXBvcnQgb3JnLm92aXJ0
LmVuZ2luZS5jb3JlLmNvbW1vbi5pbnRlcmZhY2VzLlNlYXJjaFR5cGU7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLmNvcmUuY29tbW9uLm1vZGUuQXBwbGljYXRpb25Nb2RlOwppbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5xdWVyaWVzLkdldEFsbERpc2tzQnlWbUlkUGFyYW1ldGVy
czsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24ucXVlcmllcy5JZFF1ZXJ5UGFy
YW1ldGVyczsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24ucXVlcmllcy5TZWFy
Y2hQYXJhbWV0ZXJzOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5xdWVyaWVz
LlZkY1F1ZXJ5UGFyYW1ldGVyc0Jhc2U7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29t
bW9uLnF1ZXJpZXMuVmRjUXVlcnlSZXR1cm5WYWx1ZTsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu
Y29yZS5jb21tb24ucXVlcmllcy5WZGNRdWVyeVR5cGU7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5l
LmNvcmUuY29tcGF0LkV2ZW50OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbXBhdC5F
dmVudEFyZ3M7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tcGF0Lkd1aWQ7CmltcG9y
dCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuY29tcGF0Lk5HdWlkOwppbXBvcnQgb3JnLm92aXJ0LmVu
Z2luZS5jb3JlLmNvbXBhdC5PYnNlcnZhYmxlQ29sbGVjdGlvbjsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUuY29yZS5jb21wYXQuUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzOwppbXBvcnQgb3JnLm92
aXJ0LmVuZ2luZS5jb3JlLmNvbXBhdC5TdHJpbmdIZWxwZXI7CmltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLmNvcmUuY29tcGF0LlZlcnNpb247CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLmNvcmUuc2Vh
cmNoYmFja2VuZC5TZWFyY2hPYmplY3RzOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS5mcm9u
dGVuZC5Bc3luY1F1ZXJ5OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS5mcm9udGVuZC5Gcm9u
dGVuZDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkuZnJvbnRlbmQuSU5ld0FzeW5jQ2FsbGJh
Y2s7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLkNsb25lcjsKaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIuTGlucTsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkudWljb21tb253ZWIuVGFnc0VxdWFsaXR5Q29tcGFyZXI7CmltcG9ydCBvcmcub3Zp
cnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLlVJQ29tbWFuZDsKaW1wb3J0IG9yZy5vdmlydC5lbmdp
bmUudWkudWljb21tb253ZWIuZGF0YXByb3ZpZGVyLkFzeW5jRGF0YVByb3ZpZGVyOwppbXBvcnQg
b3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5tb2RlbHMuQ29uZmlybWF0aW9uTW9kZWw7
CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy5FbnRpdHlNb2Rl
bDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLklTdXBwb3J0
U3lzdGVtVHJlZUNvbnRleHQ7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2Vi
Lm1vZGVscy5Nb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21tb253ZWIubW9k
ZWxzLlN5c3RlbVRyZWVJdGVtTW9kZWw7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29t
bW9ud2ViLm1vZGVscy5jb25maWd1cmUuQ2hhbmdlQ0RNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5l
bmdpbmUudWkudWljb21tb253ZWIubW9kZWxzLmNvbmZpZ3VyZS5QZXJtaXNzaW9uTGlzdE1vZGVs
OwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5tb2RlbHMudGFncy5UYWdM
aXN0TW9kZWw7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tbW9ud2ViLm1vZGVscy50
YWdzLlRhZ01vZGVsOwppbXBvcnQgb3JnLm92aXJ0LmVuZ2luZS51aS51aWNvbW1vbndlYi5tb2Rl
bHMudGVtcGxhdGVzLlZtQmFzZUxpc3RNb2RlbDsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUudWku
dWljb21tb253ZWIubW9kZWxzLnVzZXJwb3J0YWwuQXR0YWNoQ2RNb2RlbDsKaW1wb3J0IG9yZy5v
dmlydC5lbmdpbmUudWkudWljb21wYXQuQXNzZW1ibHk7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5l
LnVpLnVpY29tcGF0LkNvbnN0YW50c01hbmFnZXI7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVp
LnVpY29tcGF0LkZyb250ZW5kQWN0aW9uQXN5bmNSZXN1bHQ7CmltcG9ydCBvcmcub3ZpcnQuZW5n
aW5lLnVpLnVpY29tcGF0LkZyb250ZW5kTXVsdGlwbGVBY3Rpb25Bc3luY1Jlc3VsdDsKaW1wb3J0
IG9yZy5vdmlydC5lbmdpbmUudWkudWljb21wYXQuRnJvbnRlbmRNdWx0aXBsZVF1ZXJ5QXN5bmNS
ZXN1bHQ7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tcGF0LklGcm9udGVuZEFjdGlv
bkFzeW5jQ2FsbGJhY2s7CmltcG9ydCBvcmcub3ZpcnQuZW5naW5lLnVpLnVpY29tcGF0LklGcm9u
dGVuZE11bHRpcGxlQWN0aW9uQXN5bmNDYWxsYmFjazsKaW1wb3J0IG9yZy5vdmlydC5lbmdpbmUu
dWkudWljb21wYXQuSUZyb250ZW5kTXVsdGlwbGVRdWVyeUFzeW5jQ2FsbGJhY2s7CmltcG9ydCBv
cmcub3ZpcnQuZW5naW5lLnVpLnVpY29tcGF0LlJlc291cmNlTWFuYWdlcjsKCnB1YmxpYyBjbGFz
cyBWbUxpc3RNb2RlbCBleHRlbmRzIFZtQmFzZUxpc3RNb2RlbDxWTT4gaW1wbGVtZW50cyBJU3Vw
cG9ydFN5c3RlbVRyZWVDb250ZXh0CnsKCiAgICBwcml2YXRlIFVJQ29tbWFuZCBwcml2YXRlTmV3
U2VydmVyQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldE5ld1NlcnZlckNvbW1hbmQo
KQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlTmV3U2VydmVyQ29tbWFuZDsKICAgIH0KCiAg
ICBwcml2YXRlIHZvaWQgc2V0TmV3U2VydmVyQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7
CiAgICAgICAgcHJpdmF0ZU5ld1NlcnZlckNvbW1hbmQgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2
YXRlIFVJQ29tbWFuZCBwcml2YXRlTmV3RGVza3RvcENvbW1hbmQ7CgogICAgcHVibGljIFVJQ29t
bWFuZCBnZXROZXdEZXNrdG9wQ29tbWFuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVO
ZXdEZXNrdG9wQ29tbWFuZDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0TmV3RGVza3RvcENv
bW1hbmQoVUlDb21tYW5kIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVOZXdEZXNrdG9wQ29t
bWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgVUlDb21tYW5kIHByaXZhdGVFZGl0Q29t
bWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldEVkaXRDb21tYW5kKCkKICAgIHsKICAgICAg
ICByZXR1cm4gcHJpdmF0ZUVkaXRDb21tYW5kOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRF
ZGl0Q29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZUVkaXRDb21t
YW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1hbmQgcHJpdmF0ZVJlbW92ZUNv
bW1hbmQ7CgogICAgcHVibGljIFVJQ29tbWFuZCBnZXRSZW1vdmVDb21tYW5kKCkKICAgIHsKICAg
ICAgICByZXR1cm4gcHJpdmF0ZVJlbW92ZUNvbW1hbmQ7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldFJlbW92ZUNvbW1hbmQoVUlDb21tYW5kIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVS
ZW1vdmVDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1hbmQgcHJpdmF0
ZVJ1bkNvbW1hbmQ7CgogICAgcHVibGljIFVJQ29tbWFuZCBnZXRSdW5Db21tYW5kKCkKICAgIHsK
ICAgICAgICByZXR1cm4gcHJpdmF0ZVJ1bkNvbW1hbmQ7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldFJ1bkNvbW1hbmQoVUlDb21tYW5kIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVSdW5D
b21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1hbmQgcHJpdmF0ZVBhdXNl
Q29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldFBhdXNlQ29tbWFuZCgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIHByaXZhdGVQYXVzZUNvbW1hbmQ7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldFBhdXNlQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZVBh
dXNlQ29tbWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgVUlDb21tYW5kIHByaXZhdGVT
dG9wQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldFN0b3BDb21tYW5kKCkKICAgIHsK
ICAgICAgICByZXR1cm4gcHJpdmF0ZVN0b3BDb21tYW5kOwogICAgfQoKICAgIHByaXZhdGUgdm9p
ZCBzZXRTdG9wQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZVN0
b3BDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1hbmQgcHJpdmF0ZVNo
dXRkb3duQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldFNodXRkb3duQ29tbWFuZCgp
CiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVTaHV0ZG93bkNvbW1hbmQ7CiAgICB9CgogICAg
cHJpdmF0ZSB2b2lkIHNldFNodXRkb3duQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAg
ICAgICAgcHJpdmF0ZVNodXRkb3duQ29tbWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUg
VUlDb21tYW5kIHByaXZhdGVDYW5jZWxNaWdyYXRlQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21t
YW5kIGdldENhbmNlbE1pZ3JhdGVDb21tYW5kKCkgewogICAgICAgIHJldHVybiBwcml2YXRlQ2Fu
Y2VsTWlncmF0ZUNvbW1hbmQ7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldENhbmNlbE1pZ3Jh
dGVDb21tYW5kKFVJQ29tbWFuZCB2YWx1ZSkgewogICAgICAgIHByaXZhdGVDYW5jZWxNaWdyYXRl
Q29tbWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgVUlDb21tYW5kIHByaXZhdGVNaWdy
YXRlQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldE1pZ3JhdGVDb21tYW5kKCkKICAg
IHsKICAgICAgICByZXR1cm4gcHJpdmF0ZU1pZ3JhdGVDb21tYW5kOwogICAgfQoKICAgIHByaXZh
dGUgdm9pZCBzZXRNaWdyYXRlQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAg
cHJpdmF0ZU1pZ3JhdGVDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1h
bmQgcHJpdmF0ZU5ld1RlbXBsYXRlQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldE5l
d1RlbXBsYXRlQ29tbWFuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVOZXdUZW1wbGF0
ZUNvbW1hbmQ7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldE5ld1RlbXBsYXRlQ29tbWFuZChV
SUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZU5ld1RlbXBsYXRlQ29tbWFuZCA9
IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgVUlDb21tYW5kIHByaXZhdGVSdW5PbmNlQ29tbWFu
ZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldFJ1bk9uY2VDb21tYW5kKCkKICAgIHsKICAgICAg
ICByZXR1cm4gcHJpdmF0ZVJ1bk9uY2VDb21tYW5kOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBz
ZXRSdW5PbmNlQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAgICB7CiAgICAgICAgcHJpdmF0ZVJ1
bk9uY2VDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1hbmQgcHJpdmF0
ZUV4cG9ydENvbW1hbmQ7CgogICAgcHVibGljIFVJQ29tbWFuZCBnZXRFeHBvcnRDb21tYW5kKCkK
ICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUV4cG9ydENvbW1hbmQ7CiAgICB9CgogICAgcHJp
dmF0ZSB2b2lkIHNldEV4cG9ydENvbW1hbmQoVUlDb21tYW5kIHZhbHVlKQogICAgewogICAgICAg
IHByaXZhdGVFeHBvcnRDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBVSUNvbW1h
bmQgcHJpdmF0ZU1vdmVDb21tYW5kOwoKICAgIHB1YmxpYyBVSUNvbW1hbmQgZ2V0TW92ZUNvbW1h
bmQoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlTW92ZUNvbW1hbmQ7CiAgICB9CgogICAg
cHJpdmF0ZSB2b2lkIHNldE1vdmVDb21tYW5kKFVJQ29tbWFuZCB2YWx1ZSkKICAgIHsKICAgICAg
ICBwcml2YXRlTW92ZUNvbW1hbmQgPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIFVJQ29tbWFu
ZCBwcml2YXRlUmV0cmlldmVJc29JbWFnZXNDb21tYW5kOwoKICAgIHB1YmxpYyBVSUNvbW1hbmQg
Z2V0UmV0cmlldmVJc29JbWFnZXNDb21tYW5kKCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0
ZVJldHJpZXZlSXNvSW1hZ2VzQ29tbWFuZDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0UmV0
cmlldmVJc29JbWFnZXNDb21tYW5kKFVJQ29tbWFuZCB2YWx1ZSkKICAgIHsKICAgICAgICBwcml2
YXRlUmV0cmlldmVJc29JbWFnZXNDb21tYW5kID0gdmFsdWU7CiAgICB9CgogICAgcHJpdmF0ZSBV
SUNvbW1hbmQgcHJpdmF0ZUd1aWRlQ29tbWFuZDsKCiAgICBwdWJsaWMgVUlDb21tYW5kIGdldEd1
aWRlQ29tbWFuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVHdWlkZUNvbW1hbmQ7CiAg
ICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldEd1aWRlQ29tbWFuZChVSUNvbW1hbmQgdmFsdWUpCiAg
ICB7CiAgICAgICAgcHJpdmF0ZUd1aWRlQ29tbWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZh
dGUgVUlDb21tYW5kIHByaXZhdGVDaGFuZ2VDZENvbW1hbmQ7CgogICAgcHVibGljIFVJQ29tbWFu
ZCBnZXRDaGFuZ2VDZENvbW1hbmQoKQogICAgewogICAgICAgIHJldHVybiBwcml2YXRlQ2hhbmdl
Q2RDb21tYW5kOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRDaGFuZ2VDZENvbW1hbmQoVUlD
b21tYW5kIHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVDaGFuZ2VDZENvbW1hbmQgPSB2YWx1
ZTsKICAgIH0KCiAgICBwcml2YXRlIFVJQ29tbWFuZCBwcml2YXRlQXNzaWduVGFnc0NvbW1hbmQ7
CgogICAgcHVibGljIFVJQ29tbWFuZCBnZXRBc3NpZ25UYWdzQ29tbWFuZCgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIHByaXZhdGVBc3NpZ25UYWdzQ29tbWFuZDsKICAgIH0KCiAgICBwcml2YXRlIHZv
aWQgc2V0QXNzaWduVGFnc0NvbW1hbmQoVUlDb21tYW5kIHZhbHVlKQogICAgewogICAgICAgIHBy
aXZhdGVBc3NpZ25UYWdzQ29tbWFuZCA9IHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgTW9kZWwg
ZXJyb3JXaW5kb3c7CgogICAgcHVibGljIE1vZGVsIGdldEVycm9yV2luZG93KCkKICAgIHsKICAg
ICAgICByZXR1cm4gZXJyb3JXaW5kb3c7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0RXJyb3JX
aW5kb3coTW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGVycm9yV2luZG93ICE9IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgZXJyb3JXaW5kb3cgPSB2YWx1ZTsKICAgICAgICAgICAg
T25Qcm9wZXJ0eUNoYW5nZWQobmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncygiRXJyb3JXaW5k
b3ciKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBDb25zb2xl
TW9kZWwgZGVmYXVsdENvbnNvbGVNb2RlbDsKCiAgICBwdWJsaWMgQ29uc29sZU1vZGVsIGdldERl
ZmF1bHRDb25zb2xlTW9kZWwoKQogICAgewogICAgICAgIHJldHVybiBkZWZhdWx0Q29uc29sZU1v
ZGVsOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRDb25zb2xlTW9kZWwoQ29uc29s
ZU1vZGVsIHZhbHVlKQogICAgewogICAgICAgIGlmIChkZWZhdWx0Q29uc29sZU1vZGVsICE9IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdENvbnNvbGVNb2RlbCA9IHZhbHVlOwog
ICAgICAgICAgICBPblByb3BlcnR5Q2hhbmdlZChuZXcgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdz
KCJEZWZhdWx0Q29uc29sZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCiAgICAgICAgfQogICAgfQoK
ICAgIHByaXZhdGUgQ29uc29sZU1vZGVsIGFkZGl0aW9uYWxDb25zb2xlTW9kZWw7CgogICAgcHVi
bGljIENvbnNvbGVNb2RlbCBnZXRBZGRpdGlvbmFsQ29uc29sZU1vZGVsKCkKICAgIHsKICAgICAg
ICByZXR1cm4gYWRkaXRpb25hbENvbnNvbGVNb2RlbDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBz
ZXRBZGRpdGlvbmFsQ29uc29sZU1vZGVsKENvbnNvbGVNb2RlbCB2YWx1ZSkKICAgIHsKICAgICAg
ICBpZiAoYWRkaXRpb25hbENvbnNvbGVNb2RlbCAhPSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIGFkZGl0aW9uYWxDb25zb2xlTW9kZWwgPSB2YWx1ZTsKICAgICAgICAgICAgT25Qcm9wZXJ0
eUNoYW5nZWQobmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncygiQWRkaXRpb25hbENvbnNvbGVN
b2RlbCIpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGJvb2xl
YW4gaGFzQWRkaXRpb25hbENvbnNvbGVNb2RlbDsKCiAgICBwdWJsaWMgYm9vbGVhbiBnZXRIYXNB
ZGRpdGlvbmFsQ29uc29sZU1vZGVsKCkKICAgIHsKICAgICAgICByZXR1cm4gaGFzQWRkaXRpb25h
bENvbnNvbGVNb2RlbDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRIYXNBZGRpdGlvbmFsQ29u
c29sZU1vZGVsKGJvb2xlYW4gdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGhhc0FkZGl0aW9uYWxD
b25zb2xlTW9kZWwgIT0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBoYXNBZGRpdGlvbmFs
Q29uc29sZU1vZGVsID0gdmFsdWU7CiAgICAgICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQ
cm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3MoIkhhc0FkZGl0aW9uYWxDb25zb2xlTW9kZWwiKSk7IC8v
JE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIE9ic2VydmFibGVDb2xsZWN0
aW9uPENoYW5nZUNETW9kZWw+IGlzb0ltYWdlczsKCiAgICBwdWJsaWMgT2JzZXJ2YWJsZUNvbGxl
Y3Rpb248Q2hhbmdlQ0RNb2RlbD4gZ2V0SXNvSW1hZ2VzKCkKICAgIHsKICAgICAgICByZXR1cm4g
aXNvSW1hZ2VzOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZXRJc29JbWFnZXMoT2JzZXJ2YWJs
ZUNvbGxlY3Rpb248Q2hhbmdlQ0RNb2RlbD4gdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKChpc29J
bWFnZXMgPT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKSB8fCAoaXNvSW1hZ2VzICE9IG51bGwgJiYg
IWlzb0ltYWdlcy5lcXVhbHModmFsdWUpKSkKICAgICAgICB7CiAgICAgICAgICAgIGlzb0ltYWdl
cyA9IHZhbHVlOwogICAgICAgICAgICBPblByb3BlcnR5Q2hhbmdlZChuZXcgUHJvcGVydHlDaGFu
Z2VkRXZlbnRBcmdzKCJJc29JbWFnZXMiKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB9CiAgICB9
CgogICAgLy8gZ2V0IHsgcmV0dXJuIFNlbGVjdGVkSXRlbXMgPT0gbnVsbCA/IG5ldyBvYmplY3Rb
MF0gOiBTZWxlY3RlZEl0ZW1zLkNhc3Q8Vk0+KCkuU2VsZWN0KGEgPT4KICAgIC8vIGEudm1fZ3Vp
ZCkuQ2FzdDxvYmplY3Q+KCkuVG9BcnJheSgpOyB9CiAgICBwcm90ZWN0ZWQgT2JqZWN0W10gZ2V0
U2VsZWN0ZWRLZXlzKCkKICAgIHsKICAgICAgICBpZiAoZ2V0U2VsZWN0ZWRJdGVtcygpID09IG51
bGwpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbmV3IE9iamVjdFswXTsKICAgICAgICB9
CgogICAgICAgIE9iamVjdFtdIGtleXMgPSBuZXcgT2JqZWN0W2dldFNlbGVjdGVkSXRlbXMoKS5z
aXplKCldOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0U2VsZWN0ZWRJdGVtcygpLnNp
emUoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAga2V5c1tpXSA9ICgoVk0pIGdldFNlbGVj
dGVkSXRlbXMoKS5nZXQoaSkpLmdldElkKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4ga2V5
czsKICAgIH0KCiAgICBwcml2YXRlIE9iamVjdCBwcml2YXRlR3VpZGVDb250ZXh0OwoKICAgIHB1
YmxpYyBPYmplY3QgZ2V0R3VpZGVDb250ZXh0KCkKICAgIHsKICAgICAgICByZXR1cm4gcHJpdmF0
ZUd1aWRlQ29udGV4dDsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRHdWlkZUNvbnRleHQoT2Jq
ZWN0IHZhbHVlKQogICAgewogICAgICAgIHByaXZhdGVHdWlkZUNvbnRleHQgPSB2YWx1ZTsKICAg
IH0KCiAgICBwcml2YXRlIFZNIHByaXZhdGVjdXJyZW50Vm07CgogICAgcHVibGljIFZNIGdldGN1
cnJlbnRWbSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHByaXZhdGVjdXJyZW50Vm07CiAgICB9Cgog
ICAgcHVibGljIHZvaWQgc2V0Y3VycmVudFZtKFZNIHZhbHVlKQogICAgewogICAgICAgIHByaXZh
dGVjdXJyZW50Vm0gPSB2YWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8R3Vp
ZCwgQXJyYXlMaXN0PENvbnNvbGVNb2RlbD4+IGNhY2hlZENvbnNvbGVNb2RlbHM7CgogICAgcHJp
dmF0ZSBIYXNoTWFwPFZlcnNpb24sIEFycmF5TGlzdDxTdHJpbmc+PiBwcml2YXRlQ3VzdG9tUHJv
cGVydGllc0tleXNMaXN0OwoKICAgIHByaXZhdGUgSGFzaE1hcDxWZXJzaW9uLCBBcnJheUxpc3Q8
U3RyaW5nPj4gZ2V0Q3VzdG9tUHJvcGVydGllc0tleXNMaXN0KCkgewogICAgICAgIHJldHVybiBw
cml2YXRlQ3VzdG9tUHJvcGVydGllc0tleXNMaXN0OwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBz
ZXRDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3QoSGFzaE1hcDxWZXJzaW9uLCBBcnJheUxpc3Q8U3Ry
aW5nPj4gdmFsdWUpIHsKICAgICAgICBwcml2YXRlQ3VzdG9tUHJvcGVydGllc0tleXNMaXN0ID0g
dmFsdWU7CiAgICB9CgogICAgcHVibGljIFZtTGlzdE1vZGVsKCkKICAgIHsKICAgICAgICBzZXRU
aXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkudmlydHVh
bE1hY2hpbmVzVGl0bGUoKSk7CiAgICAgICAgc2V0SGFzaE5hbWUoInZpcnR1YWxfbWFjaGluZXMi
KTsgLy8kTk9OLU5MUy0xJAoKICAgICAgICBzZXREZWZhdWx0U2VhcmNoU3RyaW5nKCJWbXM6Iik7
IC8vJE5PTi1OTFMtMSQKICAgICAgICBzZXRTZWFyY2hTdHJpbmcoZ2V0RGVmYXVsdFNlYXJjaFN0
cmluZygpKTsKICAgICAgICBzZXRTZWFyY2hPYmplY3RzKG5ldyBTdHJpbmdbXSB7IFNlYXJjaE9i
amVjdHMuVk1fT0JKX05BTUUsIFNlYXJjaE9iamVjdHMuVk1fUExVX09CSl9OQU1FIH0pOwogICAg
ICAgIHNldEF2YWlsYWJsZUluTW9kZXMoQXBwbGljYXRpb25Nb2RlLlZpcnRPbmx5KTsKCiAgICAg
ICAgY2FjaGVkQ29uc29sZU1vZGVscyA9IG5ldyBIYXNoTWFwPEd1aWQsIEFycmF5TGlzdDxDb25z
b2xlTW9kZWw+PigpOwoKICAgICAgICBzZXROZXdTZXJ2ZXJDb21tYW5kKG5ldyBVSUNvbW1hbmQo
Ik5ld1NlcnZlciIsIHRoaXMpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHNldE5ld0Rlc2t0b3BD
b21tYW5kKG5ldyBVSUNvbW1hbmQoIk5ld0Rlc2t0b3AiLCB0aGlzKSk7IC8vJE5PTi1OTFMtMSQK
ICAgICAgICBzZXRFZGl0Q29tbWFuZChuZXcgVUlDb21tYW5kKCJFZGl0IiwgdGhpcykpOyAvLyRO
T04tTkxTLTEkCiAgICAgICAgc2V0UmVtb3ZlQ29tbWFuZChuZXcgVUlDb21tYW5kKCJSZW1vdmUi
LCB0aGlzKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICBzZXRSdW5Db21tYW5kKG5ldyBVSUNvbW1h
bmQoIlJ1biIsIHRoaXMsIHRydWUpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHNldFBhdXNlQ29t
bWFuZChuZXcgVUlDb21tYW5kKCJQYXVzZSIsIHRoaXMpKTsgLy8kTk9OLU5MUy0xJAogICAgICAg
IHNldFN0b3BDb21tYW5kKG5ldyBVSUNvbW1hbmQoIlN0b3AiLCB0aGlzKSk7IC8vJE5PTi1OTFMt
MSQKICAgICAgICBzZXRTaHV0ZG93bkNvbW1hbmQobmV3IFVJQ29tbWFuZCgiU2h1dGRvd24iLCB0
aGlzKSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICBzZXRNaWdyYXRlQ29tbWFuZChuZXcgVUlDb21t
YW5kKCJNaWdyYXRlIiwgdGhpcykpOyAvLyROT04tTkxTLTEkCiAgICAgICAgc2V0Q2FuY2VsTWln
cmF0ZUNvbW1hbmQobmV3IFVJQ29tbWFuZCgiQ2FuY2VsTWlncmF0aW9uIiwgdGhpcykpOyAvLyRO
T04tTkxTLTEkCiAgICAgICAgc2V0TmV3VGVtcGxhdGVDb21tYW5kKG5ldyBVSUNvbW1hbmQoIk5l
d1RlbXBsYXRlIiwgdGhpcykpOyAvLyROT04tTkxTLTEkCiAgICAgICAgc2V0UnVuT25jZUNvbW1h
bmQobmV3IFVJQ29tbWFuZCgiUnVuT25jZSIsIHRoaXMpKTsgLy8kTk9OLU5MUy0xJAogICAgICAg
IHNldEV4cG9ydENvbW1hbmQobmV3IFVJQ29tbWFuZCgiRXhwb3J0IiwgdGhpcykpOyAvLyROT04t
TkxTLTEkCiAgICAgICAgc2V0TW92ZUNvbW1hbmQobmV3IFVJQ29tbWFuZCgiTW92ZSIsIHRoaXMp
KTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHNldEd1aWRlQ29tbWFuZChuZXcgVUlDb21tYW5kKCJH
dWlkZSIsIHRoaXMpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHNldFJldHJpZXZlSXNvSW1hZ2Vz
Q29tbWFuZChuZXcgVUlDb21tYW5kKCJSZXRyaWV2ZUlzb0ltYWdlcyIsIHRoaXMpKTsgLy8kTk9O
LU5MUy0xJAogICAgICAgIHNldENoYW5nZUNkQ29tbWFuZChuZXcgVUlDb21tYW5kKCJDaGFuZ2VD
RCIsIHRoaXMpKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHNldEFzc2lnblRhZ3NDb21tYW5kKG5l
dyBVSUNvbW1hbmQoIkFzc2lnblRhZ3MiLCB0aGlzKSk7IC8vJE5PTi1OTFMtMSQKCiAgICAgICAg
c2V0SXNvSW1hZ2VzKG5ldyBPYnNlcnZhYmxlQ29sbGVjdGlvbjxDaGFuZ2VDRE1vZGVsPigpKTsK
ICAgICAgICBDaGFuZ2VDRE1vZGVsIHRlbXBWYXIgPSBuZXcgQ2hhbmdlQ0RNb2RlbCgpOwogICAg
ICAgIHRlbXBWYXIuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENv
bnN0YW50cygpLnJldHJpZXZpbmdDRHNUaXRsZSgpKTsKICAgICAgICBnZXRJc29JbWFnZXMoKS5h
ZGQodGVtcFZhcik7CgogICAgICAgIFVwZGF0ZUFjdGlvbkF2YWlsYWJpbGl0eSgpOwoKICAgICAg
ICBnZXRTZWFyY2hOZXh0UGFnZUNvbW1hbmQoKS5zZXRJc0F2YWlsYWJsZSh0cnVlKTsKICAgICAg
ICBnZXRTZWFyY2hQcmV2aW91c1BhZ2VDb21tYW5kKCkuc2V0SXNBdmFpbGFibGUodHJ1ZSk7CiAg
ICAgICAgaWYgKGdldEN1c3RvbVByb3BlcnRpZXNLZXlzTGlzdCgpID09IG51bGwpIHsKICAgICAg
ICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0Q3VzdG9tUHJvcGVydGllc0xpc3QobmV3IEFzeW5j
UXVlcnkodGhpcywKICAgICAgICAgICAgICAgICAgICBuZXcgSU5ld0FzeW5jQ2FsbGJhY2soKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdldCwgT2JqZWN0IHJldHVyblZhbHVl
KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1MaXN0TW9kZWwgbW9kZWwgPSAoVm1M
aXN0TW9kZWwpIHRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5W
YWx1ZSAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZGVsLnNldEN1c3RvbVByb3BlcnRpZXNLZXlzTGlzdChuZXcg
SGFzaE1hcDxWZXJzaW9uLCBBcnJheUxpc3Q8U3RyaW5nPj4oKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGFzaE1hcDxWZXJzaW9uLCBTdHJpbmc+IGRpY3Rpb25hcnkgPSAoSGFz
aE1hcDxWZXJzaW9uLCBTdHJpbmc+KSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxWZXJzaW9uLCBTdHJpbmc+IGtleVZhbHVlUGFpciA6
IGRpY3Rpb25hcnkuZW50cnlTZXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldEN1c3RvbVByb3Bl
cnRpZXNLZXlzTGlzdCgpLnB1dChrZXlWYWx1ZVBhaXIuZ2V0S2V5KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBzIDoga2V5VmFs
dWVQYWlyLmdldFZhbHVlKCkuc3BsaXQoIls7XSIsIC0xKSkgLy8kTk9OLU5MUy0xJAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2RlbC5nZXRDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3QoKS5nZXQoa2V5
VmFsdWVQYWlyLmdldEtleSgpKS5hZGQocyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICB9KSk7CiAgICAgICAgfQoKICAgICAgICAvLyBDYWxsICdJc0NvbW1hbmRDb21wYXRpYmxl
JyBmb3IgcHJlY2FjaGluZwogICAgICAgIEFzeW5jRGF0YVByb3ZpZGVyLklzQ29tbWFuZENvbXBh
dGlibGUobmV3IEFzeW5jUXVlcnkodGhpcywKICAgICAgICAgICAgICAgIG5ldyBJTmV3QXN5bmND
YWxsYmFjaygpIHsKICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdldCwgT2JqZWN0IHJldHVyblZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSksIG51bGwsIG51
bGwsIG51bGwpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBBc3NpZ25UYWdzKCkKICAgIHsKICAg
ICAgICBpZiAoZ2V0V2luZG93KCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICB9CgogICAgICAgIFRhZ0xpc3RNb2RlbCBtb2RlbCA9IG5ldyBUYWdMaXN0TW9k
ZWwoKTsKICAgICAgICBzZXRXaW5kb3cobW9kZWwpOwogICAgICAgIG1vZGVsLnNldFRpdGxlKENv
bnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5hc3NpZ25UYWdzVGl0
bGUoKSk7CiAgICAgICAgbW9kZWwuc2V0SGFzaE5hbWUoImFzc2lnbl90YWdzX3ZtcyIpOyAvLyRO
T04tTkxTLTEkCgogICAgICAgIEdldEF0dGFjaGVkVGFnc1RvU2VsZWN0ZWRWTXMobW9kZWwpOwoK
ICAgICAgICBVSUNvbW1hbmQgdGVtcFZhciA9IG5ldyBVSUNvbW1hbmQoIk9uQXNzaWduVGFncyIs
IHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhci5zZXRUaXRsZShDb25zdGFudHNN
YW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkub2soKSk7CiAgICAgICAgdGVtcFZh
ci5zZXRJc0RlZmF1bHQodHJ1ZSk7CiAgICAgICAgbW9kZWwuZ2V0Q29tbWFuZHMoKS5hZGQodGVt
cFZhcik7CiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIyID0gbmV3IFVJQ29tbWFuZCgiQ2FuY2Vs
IiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyMi5zZXRUaXRsZShDb25zdGFu
dHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuY2FuY2VsKCkpOwogICAgICAg
IHRlbXBWYXIyLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgIG1vZGVsLmdldENvbW1hbmRzKCku
YWRkKHRlbXBWYXIyKTsKICAgIH0KCiAgICBwdWJsaWMgTWFwPEd1aWQsIEJvb2xlYW4+IGF0dGFj
aGVkVGFnc1RvRW50aXRpZXM7CiAgICBwdWJsaWMgQXJyYXlMaXN0PG9yZy5vdmlydC5lbmdpbmUu
Y29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy50YWdzPiBhbGxBdHRhY2hlZFRhZ3M7CiAgICBw
dWJsaWMgaW50IHNlbGVjdGVkSXRlbXNDb3VudGVyOwoKICAgIHByaXZhdGUgdm9pZCBHZXRBdHRh
Y2hlZFRhZ3NUb1NlbGVjdGVkVk1zKFRhZ0xpc3RNb2RlbCBtb2RlbCkKICAgIHsKICAgICAgICBB
cnJheUxpc3Q8R3VpZD4gdm1JZHMgPSBuZXcgQXJyYXlMaXN0PEd1aWQ+KCk7CiAgICAgICAgZm9y
IChPYmplY3QgaXRlbSA6IGdldFNlbGVjdGVkSXRlbXMoKSkKICAgICAgICB7CiAgICAgICAgICAg
IFZNIHZtID0gKFZNKSBpdGVtOwogICAgICAgICAgICB2bUlkcy5hZGQodm0uZ2V0SWQoKSk7CiAg
ICAgICAgfQoKICAgICAgICBhdHRhY2hlZFRhZ3NUb0VudGl0aWVzID0gbmV3IEhhc2hNYXA8R3Vp
ZCwgQm9vbGVhbj4oKTsKICAgICAgICBhbGxBdHRhY2hlZFRhZ3MgPSBuZXcgQXJyYXlMaXN0PG9y
Zy5vdmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy50YWdzPigpOwogICAg
ICAgIHNlbGVjdGVkSXRlbXNDb3VudGVyID0gMDsKCiAgICAgICAgZm9yIChHdWlkIGlkIDogdm1J
ZHMpCiAgICAgICAgewogICAgICAgICAgICBBc3luY0RhdGFQcm92aWRlci5HZXRBdHRhY2hlZFRh
Z3NUb1ZtKG5ldyBBc3luY1F1ZXJ5KG5ldyBPYmplY3RbXSB7IHRoaXMsIG1vZGVsIH0sCiAgICAg
ICAgICAgICAgICAgICAgbmV3IElOZXdBc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgT25T
dWNjZXNzKE9iamVjdCB0YXJnZXQsIE9iamVjdCByZXR1cm5WYWx1ZSkgewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9iamVjdFtdIGFycmF5ID0gKE9iamVjdFtdKSB0YXJnZXQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2RlbCA9IChWbUxpc3RN
b2RlbCkgYXJyYXlbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWdMaXN0TW9kZWwg
dGFnTGlzdE1vZGVsID0gKFRhZ0xpc3RNb2RlbCkgYXJyYXlbMV07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bUxpc3RNb2RlbC5hbGxBdHRhY2hlZFRhZ3MuYWRkQWxsKChBcnJheUxpc3Q8
b3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2VudGl0aWVzLnRhZ3M+KSByZXR1
cm5WYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbC5zZWxlY3Rl
ZEl0ZW1zQ291bnRlcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZtTGlzdE1v
ZGVsLnNlbGVjdGVkSXRlbXNDb3VudGVyID09IHZtTGlzdE1vZGVsLmdldFNlbGVjdGVkSXRlbXMo
KS5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUG9zdEdldEF0dGFjaGVkVGFncyh2bUxpc3RNb2RlbCwgdGFnTGlzdE1v
ZGVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBpZCk7CiAg
ICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBQb3N0R2V0QXR0YWNoZWRUYWdzKFZtTGlz
dE1vZGVsIHZtTGlzdE1vZGVsLCBUYWdMaXN0TW9kZWwgdGFnTGlzdE1vZGVsKQogICAgewogICAg
ICAgIGlmICh2bUxpc3RNb2RlbC5nZXRMYXN0RXhlY3V0ZWRDb21tYW5kKCkgPT0gZ2V0QXNzaWdu
VGFnc0NvbW1hbmQoKSkKICAgICAgICB7CiAgICAgICAgICAgIEFycmF5TGlzdDxvcmcub3ZpcnQu
ZW5naW5lLmNvcmUuY29tbW9uLmJ1c2luZXNzZW50aXRpZXMudGFncz4gYXR0YWNoZWRUYWdzID0K
ICAgICAgICAgICAgICAgICAgICBMaW5xLkRpc3RpbmN0KHZtTGlzdE1vZGVsLmFsbEF0dGFjaGVk
VGFncywgbmV3IFRhZ3NFcXVhbGl0eUNvbXBhcmVyKCkpOwogICAgICAgICAgICBmb3IgKG9yZy5v
dmlydC5lbmdpbmUuY29yZS5jb21tb24uYnVzaW5lc3NlbnRpdGllcy50YWdzIHRhZyA6IGF0dGFj
aGVkVGFncykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKICAg
ICAgICAgICAgICAgIGZvciAob3JnLm92aXJ0LmVuZ2luZS5jb3JlLmNvbW1vbi5idXNpbmVzc2Vu
dGl0aWVzLnRhZ3MgdGFnMiA6IHZtTGlzdE1vZGVsLmFsbEF0dGFjaGVkVGFncykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGFnMi5nZXR0YWdfaWQoKS5lcXVhbHMo
dGFnLmdldHRhZ19pZCgpKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgdm1MaXN0TW9kZWwuYXR0YWNoZWRUYWdzVG9FbnRpdGllcy5wdXQodGFn
LmdldHRhZ19pZCgpLCBjb3VudCA9PSB2bUxpc3RNb2RlbC5nZXRTZWxlY3RlZEl0ZW1zKCkuc2l6
ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWdMaXN0TW9kZWwuc2V0QXR0YWNoZWRU
YWdzVG9FbnRpdGllcyh2bUxpc3RNb2RlbC5hdHRhY2hlZFRhZ3NUb0VudGl0aWVzKTsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVscGVyLnN0cmluZ3NFcXVhbCh2bUxpc3RNb2Rl
bC5nZXRMYXN0RXhlY3V0ZWRDb21tYW5kKCkuZ2V0TmFtZSgpLCAiT25Bc3NpZ25UYWdzIikpIC8v
JE5PTi1OTFMtMSQKICAgICAgICB7CiAgICAgICAgICAgIHZtTGlzdE1vZGVsLlBvc3RPbkFzc2ln
blRhZ3ModGFnTGlzdE1vZGVsLmdldEF0dGFjaGVkVGFnc1RvRW50aXRpZXMoKSk7CiAgICAgICAg
fQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBPbkFzc2lnblRhZ3MoKQogICAgewogICAgICAgIFRh
Z0xpc3RNb2RlbCBtb2RlbCA9IChUYWdMaXN0TW9kZWwpIGdldFdpbmRvdygpOwoKICAgICAgICBH
ZXRBdHRhY2hlZFRhZ3NUb1NlbGVjdGVkVk1zKG1vZGVsKTsKICAgIH0KCiAgICBwdWJsaWMgdm9p
ZCBQb3N0T25Bc3NpZ25UYWdzKE1hcDxHdWlkLCBCb29sZWFuPiBhdHRhY2hlZFRhZ3MpCiAgICB7
CiAgICAgICAgVGFnTGlzdE1vZGVsIG1vZGVsID0gKFRhZ0xpc3RNb2RlbCkgZ2V0V2luZG93KCk7
CiAgICAgICAgQXJyYXlMaXN0PEd1aWQ+IHZtSWRzID0gbmV3IEFycmF5TGlzdDxHdWlkPigpOwoK
ICAgICAgICBmb3IgKE9iamVjdCBpdGVtIDogZ2V0U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsK
ICAgICAgICAgICAgVk0gdm0gPSAoVk0pIGl0ZW07CiAgICAgICAgICAgIHZtSWRzLmFkZCh2bS5n
ZXRJZCgpKTsKICAgICAgICB9CgogICAgICAgIC8vIHByZXBhcmUgYXR0YWNoL2RldGFjaCBsaXN0
cwogICAgICAgIEFycmF5TGlzdDxHdWlkPiB0YWdzVG9BdHRhY2ggPSBuZXcgQXJyYXlMaXN0PEd1
aWQ+KCk7CiAgICAgICAgQXJyYXlMaXN0PEd1aWQ+IHRhZ3NUb0RldGFjaCA9IG5ldyBBcnJheUxp
c3Q8R3VpZD4oKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldEl0ZW1zKCkgIT0gbnVsbCAmJiAoKEFy
cmF5TGlzdDxUYWdNb2RlbD4pIG1vZGVsLmdldEl0ZW1zKCkpLnNpemUoKSA+IDApCiAgICAgICAg
ewogICAgICAgICAgICBBcnJheUxpc3Q8VGFnTW9kZWw+IHRhZ3MgPSAoQXJyYXlMaXN0PFRhZ01v
ZGVsPikgbW9kZWwuZ2V0SXRlbXMoKTsKICAgICAgICAgICAgVGFnTW9kZWwgcm9vdFRhZyA9IHRh
Z3MuZ2V0KDApOwogICAgICAgICAgICBUYWdNb2RlbC5SZWN1cnNpdmVFZGl0QXR0YWNoRGV0YWNo
TGlzdHMocm9vdFRhZywgYXR0YWNoZWRUYWdzLCB0YWdzVG9BdHRhY2gsIHRhZ3NUb0RldGFjaCk7
CiAgICAgICAgfQoKICAgICAgICBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+IHBh
cmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRlcnNCYXNlPigpOwogICAg
ICAgIGZvciAoR3VpZCBhIDogdGFnc1RvQXR0YWNoKQogICAgICAgIHsKICAgICAgICAgICAgcGFy
YW1ldGVycy5hZGQobmV3IEF0dGFjaEVudGl0eVRvVGFnUGFyYW1ldGVycyhhLCB2bUlkcykpOwog
ICAgICAgIH0KICAgICAgICBGcm9udGVuZC5SdW5NdWx0aXBsZUFjdGlvbihWZGNBY3Rpb25UeXBl
LkF0dGFjaFZtc1RvVGFnLCBwYXJhbWV0ZXJzKTsKCiAgICAgICAgcGFyYW1ldGVycyA9IG5ldyBB
cnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+KCk7CiAgICAgICAgZm9yIChHdWlkIGEg
OiB0YWdzVG9EZXRhY2gpCiAgICAgICAgewogICAgICAgICAgICBwYXJhbWV0ZXJzLmFkZChuZXcg
QXR0YWNoRW50aXR5VG9UYWdQYXJhbWV0ZXJzKGEsIHZtSWRzKSk7CiAgICAgICAgfQogICAgICAg
IEZyb250ZW5kLlJ1bk11bHRpcGxlQWN0aW9uKFZkY0FjdGlvblR5cGUuRGV0YWNoVm1Gcm9tVGFn
LCBwYXJhbWV0ZXJzKTsKCiAgICAgICAgQ2FuY2VsKCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IEd1aWRlKCkKICAgIHsKICAgICAgICBWbUd1aWRlTW9kZWwgbW9kZWwgPSBuZXcgVm1HdWlkZU1v
ZGVsKCk7CiAgICAgICAgc2V0V2luZG93KG1vZGVsKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShD
b25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkubmV3VmlydHVhbE1h
Y2hpbmVHdWlkZU1lVGl0bGUoKSk7CiAgICAgICAgbW9kZWwuc2V0SGFzaE5hbWUoIm5ld192aXJ0
dWFsX21hY2hpbmVfLV9ndWlkZV9tZSIpOyAvLyROT04tTkxTLTEkCgogICAgICAgIGlmIChnZXRH
dWlkZUNvbnRleHQoKSA9PSBudWxsKSB7CiAgICAgICAgICAgIFZNIHZtID0gKFZNKSBnZXRTZWxl
Y3RlZEl0ZW0oKTsKICAgICAgICAgICAgc2V0R3VpZGVDb250ZXh0KHZtLmdldElkKCkpOwogICAg
ICAgIH0KCiAgICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0Vm1CeUlkKG5ldyBBc3luY1F1ZXJ5
KHRoaXMsCiAgICAgICAgICAgICAgICBuZXcgSU5ld0FzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAg
ICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgT25T
dWNjZXNzKE9iamVjdCB0YXJnZXQsIE9iamVjdCByZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2RlbCA9IChWbUxpc3RNb2RlbCkgdGFyZ2V0
OwogICAgICAgICAgICAgICAgICAgICAgICBWbUd1aWRlTW9kZWwgbW9kZWwgPSAoVm1HdWlkZU1v
ZGVsKSB2bUxpc3RNb2RlbC5nZXRXaW5kb3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgbW9k
ZWwuc2V0RW50aXR5KHJldHVyblZhbHVlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIFVJQ29t
bWFuZCB0ZW1wVmFyID0gbmV3IFVJQ29tbWFuZCgiQ2FuY2VsIiwgdm1MaXN0TW9kZWwpOyAvLyRO
T04tTkxTLTEkCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBWYXIuc2V0VGl0bGUoQ29uc3Rh
bnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLmNvbmZpZ3VyZUxhdGVyVGl0
bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBWYXIuc2V0SXNEZWZhdWx0KHRydWUp
OwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVmFyLnNldElzQ2FuY2VsKHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICBtb2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyKTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSwgKEd1aWQpIGdldEd1aWRlQ29u
dGV4dCgpKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCB2b2lkIEluaXREZXRh
aWxNb2RlbHMoKQogICAgewogICAgICAgIHN1cGVyLkluaXREZXRhaWxNb2RlbHMoKTsKCiAgICAg
ICAgT2JzZXJ2YWJsZUNvbGxlY3Rpb248RW50aXR5TW9kZWw+IGxpc3QgPSBuZXcgT2JzZXJ2YWJs
ZUNvbGxlY3Rpb248RW50aXR5TW9kZWw+KCk7CiAgICAgICAgbGlzdC5hZGQobmV3IFZtR2VuZXJh
bE1vZGVsKCkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBWbUludGVyZmFjZUxpc3RNb2RlbCgpKTsK
ICAgICAgICBWbURpc2tMaXN0TW9kZWwgZGlza0xpc3RNb2RlbCA9IG5ldyBWbURpc2tMaXN0TW9k
ZWwoKTsKICAgICAgICBkaXNrTGlzdE1vZGVsLnNldFN5c3RlbVRyZWVDb250ZXh0KHRoaXMpOwog
ICAgICAgIGxpc3QuYWRkKGRpc2tMaXN0TW9kZWwpOwogICAgICAgIGxpc3QuYWRkKG5ldyBWbVNu
YXBzaG90TGlzdE1vZGVsKCkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBWbUV2ZW50TGlzdE1vZGVs
KCkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBWbUFwcExpc3RNb2RlbCgpKTsKICAgICAgICBsaXN0
LmFkZChuZXcgUGVybWlzc2lvbkxpc3RNb2RlbCgpKTsKICAgICAgICBsaXN0LmFkZChuZXcgVm1T
ZXNzaW9uc01vZGVsKCkpOwogICAgICAgIHNldERldGFpbE1vZGVscyhsaXN0KTsKICAgIH0KCiAg
ICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIElzU2VhcmNoU3RyaW5nTWF0Y2goU3RyaW5n
IHNlYXJjaFN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gc2VhcmNoU3RyaW5nLnRyaW0oKS50
b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoInZtIik7IC8vJE5PTi1OTFMtMSQKICAgIH0KCiAgICBA
T3ZlcnJpZGUKICAgIHByb3RlY3RlZCB2b2lkIFN5bmNTZWFyY2goKQogICAgewogICAgICAgIFNl
YXJjaFBhcmFtZXRlcnMgdGVtcFZhciA9IG5ldyBTZWFyY2hQYXJhbWV0ZXJzKGdldFNlYXJjaFN0
cmluZygpLCBTZWFyY2hUeXBlLlZNKTsKICAgICAgICB0ZW1wVmFyLnNldE1heENvdW50KGdldFNl
YXJjaFBhZ2VTaXplKCkpOwogICAgICAgIHN1cGVyLlN5bmNTZWFyY2goVmRjUXVlcnlUeXBlLlNl
YXJjaCwgdGVtcFZhcik7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgdm9pZCBB
c3luY1NlYXJjaCgpCiAgICB7CiAgICAgICAgc3VwZXIuQXN5bmNTZWFyY2goKTsKCiAgICAgICAg
c2V0QXN5bmNSZXN1bHQoRnJvbnRlbmQuUmVnaXN0ZXJTZWFyY2goZ2V0U2VhcmNoU3RyaW5nKCks
IFNlYXJjaFR5cGUuVk0sIGdldFNlYXJjaFBhZ2VTaXplKCkpKTsKICAgICAgICBzZXRJdGVtcyhn
ZXRBc3luY1Jlc3VsdCgpLmdldERhdGEoKSk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIFVwZGF0
ZUNvbnNvbGVNb2RlbHMoKQogICAgewogICAgICAgIExpc3QgdGVtcFZhciA9IGdldFNlbGVjdGVk
SXRlbXMoKTsKICAgICAgICBMaXN0IHNlbGVjdGVkSXRlbXMgPSAodGVtcFZhciAhPSBudWxsKSA/
IHRlbXBWYXIgOiBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgT2JqZWN0IHRlbXBWYXIyID0gZ2V0
U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgVk0gdm0gPSAoVk0pICgodGVtcFZhcjIgaW5zdGFuY2Vv
ZiBWTSkgPyB0ZW1wVmFyMiA6IG51bGwpOwoKICAgICAgICBpZiAodm0gPT0gbnVsbCB8fCBzZWxl
Y3RlZEl0ZW1zLnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgICBzZXREZWZhdWx0Q29u
c29sZU1vZGVsKG51bGwpOwogICAgICAgICAgICBzZXRBZGRpdGlvbmFsQ29uc29sZU1vZGVsKG51
bGwpOwogICAgICAgICAgICBzZXRIYXNBZGRpdGlvbmFsQ29uc29sZU1vZGVsKGZhbHNlKTsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFjYWNoZWRDb25z
b2xlTW9kZWxzLmNvbnRhaW5zS2V5KHZtLmdldElkKCkpKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBTcGljZUNvbnNvbGVNb2RlbCBzcGljZUNvbnNvbGVNb2RlbCA9IG5ldyBTcGljZUNv
bnNvbGVNb2RlbCgpOwogICAgICAgICAgICAgICAgc3BpY2VDb25zb2xlTW9kZWwuZ2V0RXJyb3JF
dmVudCgpLmFkZExpc3RlbmVyKHRoaXMpOwogICAgICAgICAgICAgICAgVm5jQ29uc29sZU1vZGVs
IHZuY0NvbnNvbGVNb2RlbCA9IG5ldyBWbmNDb25zb2xlTW9kZWwoKTsKICAgICAgICAgICAgICAg
IHZuY0NvbnNvbGVNb2RlbC5zZXRNb2RlbCh0aGlzKTsKICAgICAgICAgICAgICAgIFJkcENvbnNv
bGVNb2RlbCByZHBDb25zb2xlTW9kZWwgPSBuZXcgUmRwQ29uc29sZU1vZGVsKCk7CgogICAgICAg
ICAgICAgICAgY2FjaGVkQ29uc29sZU1vZGVscy5wdXQodm0uZ2V0SWQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxDb25zb2xlTW9kZWw+KEFycmF5cy5hc0xpc3QobmV3
IENvbnNvbGVNb2RlbFtdIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGljZUNv
bnNvbGVNb2RlbCwgdm5jQ29uc29sZU1vZGVsLCByZHBDb25zb2xlTW9kZWwgfSkpKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgQXJyYXlMaXN0PENvbnNvbGVNb2RlbD4gY2FjaGVkTW9kZWxz
ID0gY2FjaGVkQ29uc29sZU1vZGVscy5nZXQodm0uZ2V0SWQoKSk7CiAgICAgICAgICAgIGZvciAo
Q29uc29sZU1vZGVsIGEgOiBjYWNoZWRNb2RlbHMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGEuc2V0RW50aXR5KG51bGwpOwogICAgICAgICAgICAgICAgYS5zZXRFbnRpdHkodm0pOwog
ICAgICAgICAgICB9CgogICAgICAgICAgICBzZXREZWZhdWx0Q29uc29sZU1vZGVsKHZtLmdldERp
c3BsYXlUeXBlKCkgPT0gRGlzcGxheVR5cGUudm5jID8gY2FjaGVkTW9kZWxzLmdldCgxKSA6IGNh
Y2hlZE1vZGVscy5nZXQoMCkpOwoKICAgICAgICAgICAgaWYgKEFzeW5jRGF0YVByb3ZpZGVyLklz
V2luZG93c09zVHlwZSh2bS5nZXRWbU9zKCkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBmb3IgKENvbnNvbGVNb2RlbCBhIDogY2FjaGVkTW9kZWxzKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgUmRwQ29uc29sZU1vZGVsKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWRkaXRpb25hbENv
bnNvbGVNb2RlbChhKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0SGFzQWRkaXRp
b25hbENvbnNvbGVNb2RlbCh0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNldEFkZGl0aW9uYWxDb25zb2xlTW9kZWwobnVs
bCk7CiAgICAgICAgICAgICAgICBzZXRIYXNBZGRpdGlvbmFsQ29uc29sZU1vZGVsKGZhbHNlKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgQXJyYXlMaXN0PENvbnNv
bGVNb2RlbD4gR2V0Q29uc29sZU1vZGVsc0J5Vm1HdWlkKEd1aWQgdm1HdWlkKQogICAgewogICAg
ICAgIGlmIChjYWNoZWRDb25zb2xlTW9kZWxzICE9IG51bGwgJiYgY2FjaGVkQ29uc29sZU1vZGVs
cy5jb250YWluc0tleSh2bUd1aWQpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNhY2hl
ZENvbnNvbGVNb2RlbHMuZ2V0KHZtR3VpZCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVs
bDsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgTmV3RGVza3RvcCgpCiAgICB7CiAgICAgICAgTmV3
SW50ZXJuYWwoVm1UeXBlLkRlc2t0b3ApOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBOZXdTZXJ2
ZXIoKQogICAgewogICAgICAgIE5ld0ludGVybmFsKFZtVHlwZS5TZXJ2ZXIpOwogICAgfQoKICAg
IHByaXZhdGUgdm9pZCBOZXdJbnRlcm5hbChWbVR5cGUgdm1UeXBlKQogICAgewogICAgICAgIGlm
IChnZXRXaW5kb3coKSAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KCiAgICAgICAgVW5pdFZtTW9kZWwgbW9kZWwgPSBuZXcgVW5pdFZtTW9kZWwobmV3IE5l
d1ZtTW9kZWxCZWhhdmlvcigpKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShDb25zdGFudHNNYW5h
Z2VyLmdldEluc3RhbmNlKCkKICAgICAgICAgICAgICAgIC5nZXRNZXNzYWdlcygpCiAgICAgICAg
ICAgICAgICAubmV3Vm1UaXRsZSh2bVR5cGUgPT0gVm1UeXBlLlNlcnZlciA/IENvbnN0YW50c01h
bmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5zZXJ2ZXJWbVR5cGUoKQogICAgICAg
ICAgICAgICAgICAgICAgICA6IENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25z
dGFudHMoKS5kZXNrdG9wVm1UeXBlKCkpKTsKICAgICAgICBtb2RlbC5zZXRIYXNoTmFtZSgibmV3
XyIgKyAodm1UeXBlID09IFZtVHlwZS5TZXJ2ZXIgPyAic2VydmVyIiA6ICJkZXNrdG9wIikpOyAv
LyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAogICAgICAgIG1vZGVsLnNl
dElzTmV3KHRydWUpOwogICAgICAgIG1vZGVsLnNldFZtVHlwZSh2bVR5cGUpOwogICAgICAgIG1v
ZGVsLnNldEN1c3RvbVByb3BlcnRpZXNLZXlzTGlzdChnZXRDdXN0b21Qcm9wZXJ0aWVzS2V5c0xp
c3QoKSk7CgogICAgICAgIHNldFdpbmRvdyhtb2RlbCk7CgogICAgICAgIG1vZGVsLkluaXRpYWxp
emUoZ2V0U3lzdGVtVHJlZVNlbGVjdGVkSXRlbSgpKTsKCiAgICAgICAgLy8gRW5zdXJlcyB0aGF0
IHRoZSBkZWZhdWx0IHByb3Zpc2lvbmluZyBpcyAiQ2xvbmUiIGZvciBhIG5ldyBzZXJ2ZXIgYW5k
ICJUaGluIiBmb3IgYSBuZXcgZGVza3RvcC4KICAgICAgICBib29sZWFuIHNlbGVjdFZhbHVlID0g
bW9kZWwuZ2V0Vm1UeXBlKCkgPT0gVm1UeXBlLlNlcnZlcjsKICAgICAgICBtb2RlbC5nZXRQcm92
aXNpb25pbmcoKS5zZXRFbnRpdHkoc2VsZWN0VmFsdWUpOwoKICAgICAgICBVSUNvbW1hbmQgdGVt
cFZhciA9IG5ldyBVSUNvbW1hbmQoIk9uU2F2ZSIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAg
ICAgdGVtcFZhci5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29u
c3RhbnRzKCkub2soKSk7CiAgICAgICAgdGVtcFZhci5zZXRJc0RlZmF1bHQodHJ1ZSk7CiAgICAg
ICAgbW9kZWwuZ2V0Q29tbWFuZHMoKS5hZGQodGVtcFZhcik7CiAgICAgICAgVUlDb21tYW5kIHRl
bXBWYXIyID0gbmV3IFVJQ29tbWFuZCgiQ2FuY2VsIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAg
ICAgICB0ZW1wVmFyMi5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0
Q29uc3RhbnRzKCkuY2FuY2VsKCkpOwogICAgICAgIHRlbXBWYXIyLnNldElzQ2FuY2VsKHRydWUp
OwogICAgICAgIG1vZGVsLmdldENvbW1hbmRzKCkuYWRkKHRlbXBWYXIyKTsKICAgIH0KCiAgICBw
cml2YXRlIHZvaWQgRWRpdCgpCiAgICB7CiAgICAgICAgVk0gdm0gPSAoVk0pIGdldFNlbGVjdGVk
SXRlbSgpOwogICAgICAgIGlmICh2bSA9PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGdldFdpbmRvdygpICE9IG51bGwpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBVbml0Vm1Nb2RlbCBtb2Rl
bCA9IG5ldyBVbml0Vm1Nb2RlbChuZXcgRXhpc3RpbmdWbU1vZGVsQmVoYXZpb3Iodm0pKTsKICAg
ICAgICBtb2RlbC5zZXRWbVR5cGUodm0uZ2V0Vm1UeXBlKCkpOwogICAgICAgIG1vZGVsLnNldFZt
QXR0YWNoZWRUb1Bvb2wodm0uZ2V0Vm1Qb29sSWQoKSAhPSBudWxsKTsKICAgICAgICBzZXRXaW5k
b3cobW9kZWwpOwogICAgICAgIG1vZGVsLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5z
dGFuY2UoKQogICAgICAgICAgICAgICAgLmdldE1lc3NhZ2VzKCkKICAgICAgICAgICAgICAgIC5l
ZGl0Vm1UaXRsZSh2bS5nZXRWbVR5cGUoKSA9PSBWbVR5cGUuU2VydmVyID8gQ29uc3RhbnRzTWFu
YWdlci5nZXRJbnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMo
KQogICAgICAgICAgICAgICAgICAgICAgICAuc2VydmVyVm1UeXBlKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgOiBDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCku
ZGVza3RvcFZtVHlwZSgpKSk7CiAgICAgICAgbW9kZWwuc2V0SGFzaE5hbWUoImVkaXRfIiArICh2
bS5nZXRWbVR5cGUoKSA9PSBWbVR5cGUuU2VydmVyID8gInNlcnZlciIgOiAiZGVza3RvcCIpKTsg
Ly8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKICAgICAgICBtb2RlbC5z
ZXRDdXN0b21Qcm9wZXJ0aWVzS2V5c0xpc3QoZ2V0Q3VzdG9tUHJvcGVydGllc0tleXNMaXN0KCkp
OwoKICAgICAgICBtb2RlbC5Jbml0aWFsaXplKHRoaXMuZ2V0U3lzdGVtVHJlZVNlbGVjdGVkSXRl
bSgpKTsKCiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIgPSBuZXcgVUlDb21tYW5kKCJPblNhdmUi
LCB0aGlzKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHRlbXBWYXIuc2V0VGl0bGUoQ29uc3RhbnRz
TWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLm9rKCkpOwogICAgICAgIHRlbXBW
YXIuc2V0SXNEZWZhdWx0KHRydWUpOwogICAgICAgIG1vZGVsLmdldENvbW1hbmRzKCkuYWRkKHRl
bXBWYXIpOwogICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyMiA9IG5ldyBVSUNvbW1hbmQoIkNhbmNl
bCIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhcjIuc2V0VGl0bGUoQ29uc3Rh
bnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLmNhbmNlbCgpKTsKICAgICAg
ICB0ZW1wVmFyMi5zZXRJc0NhbmNlbCh0cnVlKTsKICAgICAgICBtb2RlbC5nZXRDb21tYW5kcygp
LmFkZCh0ZW1wVmFyMik7CiAgICB9CgogICAgcHJpdmF0ZSBNYXA8R3VpZCwgRW50aXR5TW9kZWw+
IHZtc1JlbW92ZU1hcDsKCiAgICBwcml2YXRlIHZvaWQgcmVtb3ZlKCkKICAgIHsKICAgICAgICBp
ZiAoZ2V0V2luZG93KCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICB9CgogICAgICAgIENvbmZpcm1hdGlvbk1vZGVsIHdpbmRvdyA9IG5ldyBDb25maXJtYXRp
b25Nb2RlbCgpOwogICAgICAgIHNldFdpbmRvdyh3aW5kb3cpOwogICAgICAgIHdpbmRvdy5zZXRU
aXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkucmVtb3Zl
VmlydHVhbE1hY2hpbmVzVGl0bGUoKSk7CiAgICAgICAgd2luZG93LnNldEhhc2hOYW1lKCJyZW1v
dmVfdmlydHVhbF9tYWNoaW5lIik7IC8vJE5PTi1OTFMtMSQKICAgICAgICB3aW5kb3cuc2V0TWVz
c2FnZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkudmlydHVh
bE1hY2hpbmVzTXNnKCkpOwoKICAgICAgICB2bXNSZW1vdmVNYXAgPSBuZXcgSGFzaE1hcDxHdWlk
LCBFbnRpdHlNb2RlbD4oKTsKCiAgICAgICAgZm9yIChPYmplY3Qgc2VsZWN0ZWRJdGVtIDogZ2V0
U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsKICAgICAgICAgICAgVk0gdm0gPSAoVk0pIHNlbGVj
dGVkSXRlbTsKICAgICAgICAgICAgRW50aXR5TW9kZWwgcmVtb3ZlRGlza3NDaGVja2JveCA9IG5l
dyBFbnRpdHlNb2RlbCh0cnVlKTsKICAgICAgICAgICAgcmVtb3ZlRGlza3NDaGVja2JveC5zZXRU
aXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkucmVtb3Zl
RGlza3NUaXRsZSgpKTsKICAgICAgICAgICAgcmVtb3ZlRGlza3NDaGVja2JveC5zZXRNZXNzYWdl
KHZtLmdldFZtTmFtZSgpKTsKICAgICAgICAgICAgaWYgKCFOR3VpZC5FbXB0eS5lcXVhbHModm0u
Z2V0Vm10R3VpZCgpKSkgewogICAgICAgICAgICAgICAgdXBkYXRlUmVtb3ZlRGlza3NDaGVja0Jv
eChyZW1vdmVEaXNrc0NoZWNrYm94LCB0cnVlLCBmYWxzZSwgQ29uc3RhbnRzTWFuYWdlci5nZXRJ
bnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQogICAgICAg
ICAgICAgICAgICAgICAgICAucmVtb3ZlVm1EaXNrc1RlbXBsYXRlTXNnKCkpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHZtc1JlbW92ZU1hcC5wdXQodm0uZ2V0SWQoKSwgcmVtb3ZlRGlza3ND
aGVja2JveCk7CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5zZXRJdGVtcyh2bXNSZW1vdmVNYXAu
ZW50cnlTZXQoKSk7CiAgICAgICAgaW5pdFJlbW92ZURpc2tzQ2hlY2tib3hlcyh2bXNSZW1vdmVN
YXApOwoKICAgICAgICBVSUNvbW1hbmQgdGVtcFZhciA9IG5ldyBVSUNvbW1hbmQoIk9uUmVtb3Zl
IiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyLnNldFRpdGxlKENvbnN0YW50
c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5vaygpKTsKICAgICAgICB0ZW1w
VmFyLnNldElzRGVmYXVsdCh0cnVlKTsKICAgICAgICB3aW5kb3cuZ2V0Q29tbWFuZHMoKS5hZGQo
dGVtcFZhcik7CiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIyID0gbmV3IFVJQ29tbWFuZCgiQ2Fu
Y2VsIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyMi5zZXRUaXRsZShDb25z
dGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuY2FuY2VsKCkpOwogICAg
ICAgIHRlbXBWYXIyLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgIHdpbmRvdy5nZXRDb21tYW5k
cygpLmFkZCh0ZW1wVmFyMik7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVJlbW92ZURp
c2tzQ2hlY2tCb3goRW50aXR5TW9kZWwgbW9kZWwsCiAgICAgICAgICAgIGJvb2xlYW4gZGVsZXRl
RGlza3MsCiAgICAgICAgICAgIGJvb2xlYW4gaXNDaGFuZ2FibGUsCiAgICAgICAgICAgIFN0cmlu
ZyBjaGFuZ2VQcm9oaWJpdGlvblJlYXNvbikgewoKICAgICAgICBtb2RlbC5zZXRFbnRpdHkoZGVs
ZXRlRGlza3MpOwogICAgICAgIGlmICghaXNDaGFuZ2FibGUgJiYgY2hhbmdlUHJvaGliaXRpb25S
ZWFzb24gIT0gbnVsbCkgewogICAgICAgICAgICBtb2RlbC5nZXRDaGFuZ2VQcm9oaWJpdGlvblJl
YXNvbnMoKS5hZGQoY2hhbmdlUHJvaGliaXRpb25SZWFzb24pOwogICAgICAgIH0KICAgICAgICBt
b2RlbC5zZXRJc0NoYW5nYWJsZShpc0NoYW5nYWJsZSk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IGluaXRSZW1vdmVEaXNrc0NoZWNrYm94ZXMoZmluYWwgTWFwPEd1aWQsIEVudGl0eU1vZGVsPiB2
bXNNYXApIHsKICAgICAgICBBcnJheUxpc3Q8VmRjUXVlcnlQYXJhbWV0ZXJzQmFzZT4gcGFyYW1z
ID0gbmV3IEFycmF5TGlzdDxWZGNRdWVyeVBhcmFtZXRlcnNCYXNlPigpOwogICAgICAgIEFycmF5
TGlzdDxWZGNRdWVyeVR5cGU+IHF1ZXJpZXMgPSBuZXcgQXJyYXlMaXN0PFZkY1F1ZXJ5VHlwZT4o
KTsKCiAgICAgICAgZm9yIChFbnRyeTxHdWlkLCBFbnRpdHlNb2RlbD4gZW50cnkgOiB2bXNNYXAu
ZW50cnlTZXQoKSkgewogICAgICAgICAgICBpZiAoZW50cnkuZ2V0VmFsdWUoKS5nZXRJc0NoYW5n
YWJsZSgpKSB7IC8vIE5vIHBvaW50IGluIGZldGNoaW5nIFZNIGRpc2tzIGZyb20gb25lcyB0aGF0
IGFscmVhZHkgZGV0ZXJtaW5lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGlzIHVuY2hhbmdlYWJsZSBzaW5jZSB0aGV5IGFyZSBhbHJlYWR5
IGluaXRpYWxpemVkCiAgICAgICAgICAgICAgICBwYXJhbXMuYWRkKG5ldyBHZXRBbGxEaXNrc0J5
Vm1JZFBhcmFtZXRlcnMoZW50cnkuZ2V0S2V5KCkpKTsKICAgICAgICAgICAgICAgIHF1ZXJpZXMu
YWRkKFZkY1F1ZXJ5VHlwZS5HZXRBbGxEaXNrc0J5Vm1JZCk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIC8vIFRPRE86IFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBWZGNR
dWVyeVR5cGUgbGlzdCB3aGVuIHlvdSB3YW5uYSBydW4gdGhlIHNhbWUgcXVlcnkgZm9yIGFsbCBw
YXJhbWV0ZXJzLAogICAgICAgIC8vIHJldmlzZSB3aGVuIHJlZmFjdG9yaW5nIG9yZy5vdmlydC5l
bmdpbmUudWkuRnJvbnRlbmQgdG8gc3VwcG9ydCBydW5NdWx0aXBsZVF1ZXJ5IHdpdGggYSBzaW5n
bGUgcXVlcnkKICAgICAgICBpZiAoIXBhcmFtcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgRnJv
bnRlbmQuUnVuTXVsdGlwbGVRdWVyaWVzKHF1ZXJpZXMsIHBhcmFtcywgbmV3IElGcm9udGVuZE11
bHRpcGxlUXVlcnlBc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAg
ICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBFeGVjdXRlZChGcm9udGVuZE11bHRpcGxlUXVlcnlB
c3luY1Jlc3VsdCByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlc3VsdC5nZXRSZXR1cm5WYWx1ZXMoKS5zaXplKCk7IGkrKykgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmdldFJldHVyblZhbHVlcygpLmdldChpKS5nZXRTdWNjZWVk
ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgR3VpZCB2bUlkID0gKChHZXRBbGxE
aXNrc0J5Vm1JZFBhcmFtZXRlcnMpIHJlc3VsdC5nZXRQYXJhbWV0ZXJzKCkuZ2V0KGkpKS5nZXRW
bUlkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0UmVtb3ZlRGlza3NDaGVjYm94
ZXNQb3N0KHZtSWQsIChMaXN0PERpc2s+KSByZXN1bHQuZ2V0UmV0dXJuVmFsdWVzKCkuZ2V0KGkp
LmdldFJldHVyblZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAg
ICB9CgogICAgcHJpdmF0ZSB2b2lkIGluaXRSZW1vdmVEaXNrc0NoZWNib3hlc1Bvc3QoR3VpZCB2
bUlkLCBMaXN0PERpc2s+IGRpc2tzKSB7CiAgICAgICAgRW50aXR5TW9kZWwgbW9kZWwgPSB2bXNS
ZW1vdmVNYXAuZ2V0KHZtSWQpOwogICAgICAgIGlmIChkaXNrcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgdXBkYXRlUmVtb3ZlRGlza3NDaGVja0JveChtb2RlbCwgZmFsc2UsIGZhbHNlLCBDb25z
dGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkKICAgICAgICAgICAgICAgICAgICAuZ2V0Q29uc3Rh
bnRzKCkKICAgICAgICAgICAgICAgICAgICAucmVtb3ZlVm1EaXNrc05vRGlza3NNc2coKSk7CiAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGJvb2xlYW4gaXNPbmx5U2hhcmVk
RGlza3MgPSB0cnVlOwogICAgICAgIGJvb2xlYW4gaXNTbmFwc2hvdEV4aXN0cyA9IGZhbHNlOwog
ICAgICAgIGZvciAoRGlzayBkaXNrIDogZGlza3MpIHsKICAgICAgICAgICAgaWYgKCFkaXNrLmlz
U2hhcmVhYmxlKCkpIHsKICAgICAgICAgICAgICAgIGlzT25seVNoYXJlZERpc2tzID0gZmFsc2U7
CiAgICAgICAgICAgICAgICBpZiAoZGlzay5nZXREaXNrU3RvcmFnZVR5cGUoKSA9PSBEaXNrU3Rv
cmFnZVR5cGUuSU1BR0UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKChEaXNrSW1hZ2UpIGRp
c2spLmdldFNuYXBzaG90cygpLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aXNTbmFwc2hvdEV4aXN0cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgIH0KCiAgICAgICAgaWYgKGlzU25hcHNob3RFeGlzdHMpIHsKICAgICAgICAgICAgdXBkYXRl
UmVtb3ZlRGlza3NDaGVja0JveChtb2RlbCwgdHJ1ZSwgZmFsc2UsIENvbnN0YW50c01hbmFnZXIu
Z2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQogICAgICAg
ICAgICAgICAgICAgIC5yZW1vdmVWbURpc2tzU25hcHNob3RzTXNnKCkpOwogICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNPbmx5U2hhcmVkRGlza3MpIHsKICAgICAg
ICAgICAgdXBkYXRlUmVtb3ZlRGlza3NDaGVja0JveChtb2RlbCwgZmFsc2UsIGZhbHNlLCBDb25z
dGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkKICAgICAgICAgICAgICAgICAgICAuZ2V0Q29uc3Rh
bnRzKCkKICAgICAgICAgICAgICAgICAgICAucmVtb3ZlVm1EaXNrc0FsbFNoYXJlZE1zZygpKTsK
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHZvaWQgTW92
ZSgpCiAgICB7CiAgICAgICAgVk0gdm0gPSAoVk0pIGdldFNlbGVjdGVkSXRlbSgpOwogICAgICAg
IGlmICh2bSA9PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0K
CiAgICAgICAgaWYgKGdldFdpbmRvdygpICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgfQoKICAgICAgICBNb3ZlRGlza01vZGVsIG1vZGVsID0gbmV3IE1vdmVE
aXNrTW9kZWwoKTsKICAgICAgICBzZXRXaW5kb3cobW9kZWwpOwogICAgICAgIG1vZGVsLnNldFRp
dGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5tb3ZlVmly
dHVhbE1hY2hpbmVUaXRsZSgpKTsKICAgICAgICBtb2RlbC5zZXRIYXNoTmFtZSgibW92ZV92aXJ0
dWFsX21hY2hpbmUiKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIG1vZGVsLnNldElzU291cmNlU3Rv
cmFnZURvbWFpbk5hbWVBdmFpbGFibGUodHJ1ZSk7CiAgICAgICAgbW9kZWwuc2V0RW50aXR5KHRo
aXMpOwogICAgICAgIG1vZGVsLlN0YXJ0UHJvZ3Jlc3MobnVsbCk7CgogICAgICAgIEFzeW5jRGF0
YVByb3ZpZGVyLkdldFZtRGlza0xpc3QobmV3IEFzeW5jUXVlcnkodGhpcywgbmV3IElOZXdBc3lu
Y0NhbGxiYWNrKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZv
aWQgT25TdWNjZXNzKE9iamVjdCB0YXJnZXQsIE9iamVjdCByZXR1cm5WYWx1ZSkgewogICAgICAg
ICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0TW9kZWwgPSAoVm1MaXN0TW9kZWwpIHRhcmdldDsK
ICAgICAgICAgICAgICAgIE1vdmVEaXNrTW9kZWwgbW92ZURpc2tNb2RlbCA9IChNb3ZlRGlza01v
ZGVsKSB2bUxpc3RNb2RlbC5nZXRXaW5kb3coKTsKICAgICAgICAgICAgICAgIExpbmtlZExpc3Q8
RGlza0ltYWdlPiBkaXNrcyA9IChMaW5rZWRMaXN0PERpc2tJbWFnZT4pIHJldHVyblZhbHVlOwog
ICAgICAgICAgICAgICAgQXJyYXlMaXN0PERpc2tJbWFnZT4gZGlza0ltYWdlcyA9IG5ldyBBcnJh
eUxpc3Q8RGlza0ltYWdlPigpOwogICAgICAgICAgICAgICAgZGlza0ltYWdlcy5hZGRBbGwoZGlz
a3MpOwoKICAgICAgICAgICAgICAgIG1vdmVEaXNrTW9kZWwuaW5pdChkaXNrSW1hZ2VzKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0pLCB2bS5nZXRJZCgpLCB0cnVlKTsKICAgIH0KCiAgICBAT3Zl
cnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgdGhlcmVJc05vRXhwb3J0RG9tYWluQmFja3VwRW50
aXR5QXR0YWNoRXhwb3J0RG9tYWluVG9WbXNEY01zZygpIHsKICAgICAgICByZXR1cm4gQ29uc3Rh
bnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpCiAgICAgICAgICAgICAgICAuZ2V0Q29uc3RhbnRzKCkK
ICAgICAgICAgICAgICAgIC50aGVyZUlzTm9FeHBvcnREb21haW5CYWNrdXBWbUF0dGFjaEV4cG9y
dERvbWFpblRvVm1zRGNNc2coKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBW
ZGNRdWVyeVR5cGUgZ2V0RW50aXR5RXhwb3J0RG9tYWluKCkgewogICAgICAgIHJldHVybiBWZGNR
dWVyeVR5cGUuR2V0Vm1zRnJvbUV4cG9ydERvbWFpbjsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAg
IHByb3RlY3RlZCBTdHJpbmcgZW50aXR5UmVzaWRlT25TZXZlcmFsRENzTWFrZVN1cmVUaGVFeHBv
cnRlZFZNUmVzaWRlT25TYW1lRGNNc2coKSB7CiAgICAgICAgcmV0dXJuIENvbnN0YW50c01hbmFn
ZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgLmdldENvbnN0YW50cygpCiAgICAgICAg
ICAgICAgICAudm1zUmVzaWRlT25TZXZlcmFsRENzTWFrZVN1cmVUaGVFeHBvcnRlZFZNUmVzaWRl
T25TYW1lRGNNc2coKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBib29sZWFu
IGVudGl0aWVzU2VsZWN0ZWRPbkRpZmZlcmVudERhdGFDZW50ZXJzKCkKICAgIHsKICAgICAgICBB
cnJheUxpc3Q8Vk0+IHZtcyA9IG5ldyBBcnJheUxpc3Q8Vk0+KCk7CiAgICAgICAgZm9yIChPYmpl
Y3Qgc2VsZWN0ZWRJdGVtIDogZ2V0U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsKICAgICAgICAg
ICAgVk0gYSA9IChWTSkgc2VsZWN0ZWRJdGVtOwogICAgICAgICAgICB2bXMuYWRkKGEpOwogICAg
ICAgIH0KCiAgICAgICAgTWFwPE5HdWlkLCBBcnJheUxpc3Q8Vk0+PiB0ID0gbmV3IEhhc2hNYXA8
Tkd1aWQsIEFycmF5TGlzdDxWTT4+KCk7CiAgICAgICAgZm9yIChWTSBhIDogdm1zKQogICAgICAg
IHsKICAgICAgICAgICAgaWYgKCF0LmNvbnRhaW5zS2V5KGEuZ2V0U3RvcmFnZVBvb2xJZCgpKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdC5wdXQoYS5nZXRTdG9yYWdlUG9vbElkKCks
IG5ldyBBcnJheUxpc3Q8Vk0+KCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBBcnJheUxp
c3Q8Vk0+IGxpc3QgPSB0LmdldChhLmdldFN0b3JhZ2VQb29sSWQoKSk7CiAgICAgICAgICAgIGxp
c3QuYWRkKGEpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHQuc2l6ZSgpID4gMTsKICAgIH0K
CiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdE5hbWVGcm9tRW50aXR5
KFZNIGVudGl0eSkgewogICAgICAgIHJldHVybiBlbnRpdHkuZ2V0Vm1OYW1lKCk7CiAgICB9Cgog
ICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlbnRpdGl0ZXNFcXVhbHNOdWxsU2Fm
ZShWTSBlMSwgVk0gZTIpIHsKICAgICAgICByZXR1cm4gZTEuZ2V0SWQoKS5lcXVhbHMoZTIuZ2V0
SWQoKSk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXBvc2VF
bnRpdHlPblN0b3JhZ2UoU3RyaW5nIGVudGl0aWVzKSB7CiAgICAgICAgcmV0dXJuIENvbnN0YW50
c01hbmFnZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgLmdldE1lc3NhZ2VzKCkKICAg
ICAgICAgICAgICAgIC52bXNBbHJlYWR5RXhpc3RPblRhcmdldEV4cG9ydERvbWFpbihlbnRpdGll
cyk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgSXRlcmFibGU8Vk0+IGFzSXRl
cmFibGVSZXR1cm5WYWx1ZShPYmplY3QgcmV0dXJuVmFsdWUpIHsKICAgICAgICByZXR1cm4gKExp
c3Q8Vk0+KSByZXR1cm5WYWx1ZTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgR2V0VGVtcGxhdGVz
Tm90UHJlc2VudE9uRXhwb3J0RG9tYWluKCkKICAgIHsKICAgICAgICBFeHBvcnRWbU1vZGVsIG1v
ZGVsID0gKEV4cG9ydFZtTW9kZWwpIGdldFdpbmRvdygpOwogICAgICAgIEd1aWQgc3RvcmFnZURv
bWFpbklkID0gKChzdG9yYWdlX2RvbWFpbnMpIG1vZGVsLmdldFN0b3JhZ2UoKS5nZXRTZWxlY3Rl
ZEl0ZW0oKSkuZ2V0SWQoKTsKCiAgICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0RGF0YUNlbnRl
cnNCeVN0b3JhZ2VEb21haW4obmV3IEFzeW5jUXVlcnkodGhpcywKICAgICAgICAgICAgICAgIG5l
dyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdldCwgT2Jq
ZWN0IHJldHVyblZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZtTGlzdE1vZGVsIHZt
TGlzdE1vZGVsID0gKFZtTGlzdE1vZGVsKSB0YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IEFycmF5TGlzdDxzdG9yYWdlX3Bvb2w+IHN0b3JhZ2VQb29scyA9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKEFycmF5TGlzdDxzdG9yYWdlX3Bvb2w+KSByZXR1cm5WYWx1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZV9wb29sIHN0b3JhZ2VQb29sID0gc3RvcmFnZVBv
b2xzLnNpemUoKSA+IDAgPyBzdG9yYWdlUG9vbHMuZ2V0KDApIDogbnVsbDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHZtTGlzdE1vZGVsLlBvc3RHZXRUZW1wbGF0ZXNOb3RQcmVzZW50T25FeHBv
cnREb21haW4oc3RvcmFnZVBvb2wpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0pLCBzdG9yYWdlRG9tYWluSWQpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBQb3N0R2V0
VGVtcGxhdGVzTm90UHJlc2VudE9uRXhwb3J0RG9tYWluKHN0b3JhZ2VfcG9vbCBzdG9yYWdlUG9v
bCkKICAgIHsKICAgICAgICBFeHBvcnRWbU1vZGVsIG1vZGVsID0gKEV4cG9ydFZtTW9kZWwpIGdl
dFdpbmRvdygpOwogICAgICAgIEd1aWQgc3RvcmFnZURvbWFpbklkID0gKChzdG9yYWdlX2RvbWFp
bnMpIG1vZGVsLmdldFN0b3JhZ2UoKS5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0SWQoKTsKCiAgICAg
ICAgaWYgKHN0b3JhZ2VQb29sICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBBc3luY0Rh
dGFQcm92aWRlci5HZXRBbGxUZW1wbGF0ZXNGcm9tRXhwb3J0RG9tYWluKG5ldyBBc3luY1F1ZXJ5
KHRoaXMsCiAgICAgICAgICAgICAgICAgICAgbmV3IElOZXdBc3luY0NhbGxiYWNrKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIHZvaWQgT25TdWNjZXNzKE9iamVjdCB0YXJnZXQsIE9iamVjdCByZXR1cm5WYWx1ZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0TW9kZWwgPSAoVm1M
aXN0TW9kZWwpIHRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8Vm1U
ZW1wbGF0ZSwgQXJyYXlMaXN0PERpc2tJbWFnZT4+IHRlbXBsYXRlc0Rpc2tTZXQgPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSGFzaE1hcDxWbVRlbXBsYXRlLCBBcnJheUxp
c3Q8RGlza0ltYWdlPj4pIHJldHVyblZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIEFycmF5TGlzdDxTdHJpbmc+PiB0ZW1wbGF0ZURpYyA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgQXJyYXlMaXN0
PFN0cmluZz4+KCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgcmVs
ZXZhbnQgdGVtcGxhdGVzIGFyZSBhbHJlYWR5IHRoZXJlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKE9iamVjdCBzZWxlY3RlZEl0ZW0gOiB2bUxpc3RNb2RlbC5nZXRTZWxlY3RlZEl0
ZW1zKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVk0gdm0gPSAoVk0pIHNlbGVjdGVkSXRlbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sZWFuIGhhc01hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChWbVRlbXBsYXRlIGEgOiB0ZW1wbGF0ZXNEaXNrU2V0LmtleVNl
dCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZtLmdldFZtdEd1aWQoKS5lcXVhbHMoYS5nZXRJZCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghdm0uZ2V0Vm10R3VpZCgpLmVxdWFscyhOR3VpZC5FbXB0
eSkgJiYgIWhhc01hdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZURpYy5jb250YWluc0tl
eSh2bS5nZXRWbXROYW1lKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURpYy5wdXQo
dm0uZ2V0Vm10TmFtZSgpLCBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcGxhdGVEaWMuZ2V0KHZtLmdldFZtdE5hbWUoKSkuYWRkKHZtLmdldFZtTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRlbXBTdHI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiB0ZW1wTGlzdDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IG1pc3NpbmdUZW1wbGF0ZXMg
PSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoTWFwLkVudHJ5PFN0cmluZywgQXJyYXlMaXN0PFN0cmluZz4+IGtleVZhbHVlUGFpciA6IHRl
bXBsYXRlRGljLmVudHJ5U2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcExpc3QgPSBrZXlWYWx1ZVBhaXIuZ2V0VmFs
dWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU3RyID0gIlRlbXBsYXRl
ICIgKyBrZXlWYWx1ZVBhaXIuZ2V0S2V5KCkgKyAiIChmb3IgIjsgLy8kTk9OLU5MUy0xJCAvLyRO
T04tTkxTLTIkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBMaXN0LnNpemUoKSAt
IDE7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBTdHIgKz0gdGVtcExpc3QuZ2V0KGkpICsgIiwgIjsg
Ly8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU3RyICs9IHRlbXBMaXN0LmdldChpKSArICIpIjsg
Ly8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdUZW1w
bGF0ZXMuYWRkKHRlbXBTdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtTGlzdE1vZGVsLlBvc3RFeHBvcnRHZXRNaXNzaW5nVGVt
cGxhdGVzKG1pc3NpbmdUZW1wbGF0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVBvb2wuZ2V0SWQo
KSwKICAgICAgICAgICAgICAgICAgICBzdG9yYWdlRG9tYWluSWQpOwogICAgICAgIH0KICAgIH0K
CiAgICBwcml2YXRlIHZvaWQgUG9zdEV4cG9ydEdldE1pc3NpbmdUZW1wbGF0ZXMoQXJyYXlMaXN0
PFN0cmluZz4gbWlzc2luZ1RlbXBsYXRlc0Zyb21WbXMpCiAgICB7CiAgICAgICAgRXhwb3J0Vm1N
b2RlbCBtb2RlbCA9IChFeHBvcnRWbU1vZGVsKSBnZXRXaW5kb3coKTsKICAgICAgICBHdWlkIHN0
b3JhZ2VEb21haW5JZCA9ICgoc3RvcmFnZV9kb21haW5zKSBtb2RlbC5nZXRTdG9yYWdlKCkuZ2V0
U2VsZWN0ZWRJdGVtKCkpLmdldElkKCk7CiAgICAgICAgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFt
ZXRlcnNCYXNlPiBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJz
QmFzZT4oKTsKCiAgICAgICAgbW9kZWwuU3RvcFByb2dyZXNzKCk7CgogICAgICAgIGZvciAoT2Jq
ZWN0IGEgOiBnZXRTZWxlY3RlZEl0ZW1zKCkpCiAgICAgICAgewogICAgICAgICAgICBWTSB2bSA9
IChWTSkgYTsKICAgICAgICAgICAgTW92ZVZtUGFyYW1ldGVycyBwYXJhbWV0ZXIgPSBuZXcgTW92
ZVZtUGFyYW1ldGVycyh2bS5nZXRJZCgpLCBzdG9yYWdlRG9tYWluSWQpOwogICAgICAgICAgICBw
YXJhbWV0ZXIuc2V0Rm9yY2VPdmVycmlkZSgoQm9vbGVhbikgbW9kZWwuZ2V0Rm9yY2VPdmVycmlk
ZSgpLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgcGFyYW1ldGVyLnNldENvcHlDb2xsYXBzZSgo
Qm9vbGVhbikgbW9kZWwuZ2V0Q29sbGFwc2VTbmFwc2hvdHMoKS5nZXRFbnRpdHkoKSk7CiAgICAg
ICAgICAgIHBhcmFtZXRlci5zZXRUZW1wbGF0ZU11c3RFeGlzdHModHJ1ZSk7CgogICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEoQm9v
bGVhbikgbW9kZWwuZ2V0Q29sbGFwc2VTbmFwc2hvdHMoKS5nZXRFbnRpdHkoKSkKICAgICAgICB7
CiAgICAgICAgICAgIGlmICgobWlzc2luZ1RlbXBsYXRlc0Zyb21WbXMgPT0gbnVsbCB8fCBtaXNz
aW5nVGVtcGxhdGVzRnJvbVZtcy5zaXplKCkgPiAwKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgQ29uZmlybWF0aW9uTW9kZWwgY29uZmlybU1vZGVsID0gbmV3IENvbmZpcm1hdGlvbk1v
ZGVsKCk7CiAgICAgICAgICAgICAgICBzZXRDb25maXJtV2luZG93KGNvbmZpcm1Nb2RlbCk7CiAg
ICAgICAgICAgICAgICBjb25maXJtTW9kZWwuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJ
bnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQogICAgICAg
ICAgICAgICAgICAgICAgICAudGVtcGxhdGVzTm90Rm91bmRPbkV4cG9ydERvbWFpblRpdGxlKCkp
OwogICAgICAgICAgICAgICAgY29uZmlybU1vZGVsLnNldEhhc2hOYW1lKCJ0ZW1wbGF0ZV9ub3Rf
Zm91bmRfb25fZXhwb3J0X2RvbWFpbiIpOyAvLyROT04tTkxTLTEkCgogICAgICAgICAgICAgICAg
Y29uZmlybU1vZGVsLnNldE1lc3NhZ2UobWlzc2luZ1RlbXBsYXRlc0Zyb21WbXMgPT0gbnVsbCA/
IENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgICAgICAu
Z2V0Q29uc3RhbnRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgLmNvdWxkTm90UmVhZFRlbXBs
YXRlc0Zyb21FeHBvcnREb21haW5Nc2coKQogICAgICAgICAgICAgICAgICAgICAgICA6IENvbnN0
YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5nZXRDb25zdGFudHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVGb2xs
b3dpbmdUZW1wbGF0ZXNBcmVNaXNzaW5nT25UYXJnZXRFeHBvcnREb21haW5Nc2coKSk7CiAgICAg
ICAgICAgICAgICBjb25maXJtTW9kZWwuc2V0SXRlbXMobWlzc2luZ1RlbXBsYXRlc0Zyb21WbXMp
OwoKICAgICAgICAgICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyID0gbmV3IFVJQ29tbWFuZCgiT25F
eHBvcnROb1RlbXBsYXRlcyIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICB0
ZW1wVmFyLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFu
dHMoKS5vaygpKTsKICAgICAgICAgICAgICAgIHRlbXBWYXIuc2V0SXNEZWZhdWx0KHRydWUpOwog
ICAgICAgICAgICAgICAgY29uZmlybU1vZGVsLmdldENvbW1hbmRzKCkuYWRkKHRlbXBWYXIpOwog
ICAgICAgICAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIyID0gbmV3IFVJQ29tbWFuZCgiQ2FuY2Vs
Q29uZmlybWF0aW9uIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgIHRlbXBW
YXIyLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMo
KS5jYW5jZWwoKSk7CiAgICAgICAgICAgICAgICB0ZW1wVmFyMi5zZXRJc0NhbmNlbCh0cnVlKTsK
ICAgICAgICAgICAgICAgIGNvbmZpcm1Nb2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyMik7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBpZiAobW9kZWwuZ2V0UHJvZ3Jlc3MoKSAhPSBudWxsKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBtb2RlbC5TdGFydFByb2dyZXNzKG51bGwpOwoKICAgICAgICAgICAgICAgIEZyb250ZW5k
LlJ1bk11bHRpcGxlQWN0aW9uKFZkY0FjdGlvblR5cGUuRXhwb3J0Vm0sIHBhcmFtZXRlcnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jQ2Fs
bGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4ZWN1dGVkKEZyb250ZW5kTXVsdGlwbGVB
Y3Rpb25Bc3luY1Jlc3VsdCByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFeHBvcnRWbU1vZGVsIGxvY2FsTW9kZWwgPSAoRXhwb3J0Vm1Nb2RlbCkgcmVzdWx0LmdldFN0
YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxNb2RlbC5TdG9wUHJv
Z3Jlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgbW9kZWwp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICAgIGlmIChtb2RlbC5nZXRQcm9ncmVzcygpICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChWZGNBY3Rp
b25QYXJhbWV0ZXJzQmFzZSBpdGVtIDogcGFyYW1ldGVycykKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgTW92ZVZtUGFyYW1ldGVycyBwYXJhbWV0ZXIgPSAoTW92ZVZtUGFyYW1ldGVycykg
aXRlbTsKICAgICAgICAgICAgICAgIHBhcmFtZXRlci5zZXRUZW1wbGF0ZU11c3RFeGlzdHMoZmFs
c2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBtb2RlbC5TdGFydFByb2dyZXNzKG51bGwp
OwoKICAgICAgICAgICAgRnJvbnRlbmQuUnVuTXVsdGlwbGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5F
eHBvcnRWbSwgcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICBuZXcgSUZyb250ZW5kTXVs
dGlwbGVBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgICAgICBAT3Zl
cnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRl
bmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRXhwb3J0Vm1Nb2RlbCBsb2NhbE1vZGVsID0gKEV4cG9ydFZtTW9kZWwpIHJlc3Vs
dC5nZXRTdGF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxNb2RlbC5TdG9w
UHJvZ3Jlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgbW9kZWwpOwogICAgICAg
IH0KICAgIH0KCiAgICBwdWJsaWMgdm9pZCBPbkV4cG9ydCgpCiAgICB7CiAgICAgICAgRXhwb3J0
Vm1Nb2RlbCBtb2RlbCA9IChFeHBvcnRWbU1vZGVsKSBnZXRXaW5kb3coKTsKICAgICAgICBHdWlk
IHN0b3JhZ2VEb21haW5JZCA9ICgoc3RvcmFnZV9kb21haW5zKSBtb2RlbC5nZXRTdG9yYWdlKCku
Z2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCk7CiAgICAgICAgaWYgKCFtb2RlbC5WYWxpZGF0ZSgp
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbW9kZWwu
U3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgR2V0VGVtcGxhdGVzTm90UHJlc2VudE9uRXhw
b3J0RG9tYWluKCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIE9uRXhwb3J0Tm9UZW1wbGF0ZXMo
KQogICAgewogICAgICAgIEV4cG9ydFZtTW9kZWwgbW9kZWwgPSAoRXhwb3J0Vm1Nb2RlbCkgZ2V0
V2luZG93KCk7CiAgICAgICAgR3VpZCBzdG9yYWdlRG9tYWluSWQgPSAoKHN0b3JhZ2VfZG9tYWlu
cykgbW9kZWwuZ2V0U3RvcmFnZSgpLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRJZCgpOwoKICAgICAg
ICBpZiAobW9kZWwuZ2V0UHJvZ3Jlc3MoKSAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRlcnNC
YXNlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4oKTsKICAg
ICAgICBmb3IgKE9iamVjdCBpdGVtIDogZ2V0U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsKICAg
ICAgICAgICAgVk0gYSA9IChWTSkgaXRlbTsKICAgICAgICAgICAgTW92ZVZtUGFyYW1ldGVycyBw
YXJhbWV0ZXJzID0gbmV3IE1vdmVWbVBhcmFtZXRlcnMoYS5nZXRJZCgpLCBzdG9yYWdlRG9tYWlu
SWQpOwogICAgICAgICAgICBwYXJhbWV0ZXJzLnNldEZvcmNlT3ZlcnJpZGUoKEJvb2xlYW4pIG1v
ZGVsLmdldEZvcmNlT3ZlcnJpZGUoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgIHBhcmFtZXRl
cnMuc2V0Q29weUNvbGxhcHNlKChCb29sZWFuKSBtb2RlbC5nZXRDb2xsYXBzZVNuYXBzaG90cygp
LmdldEVudGl0eSgpKTsKICAgICAgICAgICAgcGFyYW1ldGVycy5zZXRUZW1wbGF0ZU11c3RFeGlz
dHMoZmFsc2UpOwoKICAgICAgICAgICAgbGlzdC5hZGQocGFyYW1ldGVycyk7CiAgICAgICAgfQoK
ICAgICAgICBtb2RlbC5TdGFydFByb2dyZXNzKG51bGwpOwoKICAgICAgICBGcm9udGVuZC5SdW5N
dWx0aXBsZUFjdGlvbihWZGNBY3Rpb25UeXBlLkV4cG9ydFZtLCBsaXN0LAogICAgICAgICAgICAg
ICAgbmV3IElGcm9udGVuZE11bHRpcGxlQWN0aW9uQXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAg
ICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBFeGVj
dXRlZChGcm9udGVuZE11bHRpcGxlQWN0aW9uQXN5bmNSZXN1bHQgcmVzdWx0KSB7CgogICAgICAg
ICAgICAgICAgICAgICAgICBFeHBvcnRWbU1vZGVsIGxvY2FsTW9kZWwgPSAoRXhwb3J0Vm1Nb2Rl
bCkgcmVzdWx0LmdldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTW9kZWwu
U3RvcFByb2dyZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwoKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCBtb2RlbCk7CiAgICB9CgogICAgcHJp
dmF0ZSB2b2lkIFJ1bk9uY2UoKQogICAgewogICAgICAgIFZNIHZtID0gKFZNKSBnZXRTZWxlY3Rl
ZEl0ZW0oKTsKICAgICAgICBSdW5PbmNlTW9kZWwgbW9kZWwgPSBuZXcgUnVuT25jZU1vZGVsKCk7
CiAgICAgICAgc2V0V2luZG93KG1vZGVsKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShDb25zdGFu
dHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkucnVuVmlydHVhbE1hY2hpbmVz
VGl0bGUoKSk7CiAgICAgICAgbW9kZWwuc2V0SGFzaE5hbWUoInJ1bl92aXJ0dWFsX21hY2hpbmUi
KTsgLy8kTk9OLU5MUy0xJAogICAgICAgIG1vZGVsLmdldEF0dGFjaElzbygpLnNldEVudGl0eShm
YWxzZSk7CiAgICAgICAgbW9kZWwuZ2V0QXR0YWNoRmxvcHB5KCkuc2V0RW50aXR5KGZhbHNlKTsK
ICAgICAgICBtb2RlbC5nZXRSdW5Bc1N0YXRlbGVzcygpLnNldEVudGl0eSh2bS5pc1N0YXRlbGVz
cygpKTsKICAgICAgICBtb2RlbC5nZXRSdW5BbmRQYXVzZSgpLnNldEVudGl0eShmYWxzZSk7CiAg
ICAgICAgbW9kZWwuc2V0SHdBY2NlbGVyYXRpb24odHJ1ZSk7CgogICAgICAgIC8vIHBhc3Npbmcg
S2VybmVsIHBhcmFtZXRlcnMKICAgICAgICBtb2RlbC5nZXRLZXJuZWxfcGFyYW1ldGVycygpLnNl
dEVudGl0eSh2bS5nZXRLZXJuZWxQYXJhbXMoKSk7CiAgICAgICAgbW9kZWwuZ2V0S2VybmVsX3Bh
dGgoKS5zZXRFbnRpdHkodm0uZ2V0S2VybmVsVXJsKCkpOwogICAgICAgIG1vZGVsLmdldEluaXRy
ZF9wYXRoKCkuc2V0RW50aXR5KHZtLmdldEluaXRyZFVybCgpKTsKCiAgICAgICAgLy8gQ3VzdG9t
IFByb3BlcnRpZXMKICAgICAgICBtb2RlbC5nZXRDdXN0b21Qcm9wZXJ0eVNoZWV0KCkKICAgICAg
ICAgICAgICAgIC5zZXRLZXlWYWx1ZVN0cmluZyh0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNLZXlz
TGlzdCgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQodm0uZ2V0VmRzR3JvdXBDb21wYXRp
YmlsaXR5VmVyc2lvbigpKSk7CiAgICAgICAgbW9kZWwuZ2V0Q3VzdG9tUHJvcGVydHlTaGVldCgp
LnNldEVudGl0eSh2bS5nZXRDdXN0b21Qcm9wZXJ0aWVzKCkpOwogICAgICAgIG1vZGVsLnNldEN1
c3RvbVByb3BlcnRpZXNLZXlzTGlzdCh0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNLZXlzTGlzdCgp
CiAgICAgICAgICAgICAgICAuZ2V0KHZtLmdldFZkc0dyb3VwQ29tcGF0aWJpbGl0eVZlcnNpb24o
KSkpOwoKICAgICAgICBtb2RlbC5zZXRJc0xpbnV4X1VuYXNzaWduX1Vua25vd25PUyhBc3luY0Rh
dGFQcm92aWRlci5Jc0xpbnV4T3NUeXBlKHZtLmdldFZtT3MoKSkKICAgICAgICAgICAgICAgIHx8
IHZtLmdldFZtT3MoKSA9PSBWbU9zVHlwZS5VbmFzc2lnbmVkIHx8IHZtLmdldFZtT3MoKSA9PSBW
bU9zVHlwZS5PdGhlcik7CiAgICAgICAgbW9kZWwuZ2V0SXNMaW51eE9wdGlvbnNBdmFpbGFibGUo
KS5zZXRFbnRpdHkobW9kZWwuZ2V0SXNMaW51eF9VbmFzc2lnbl9Vbmtub3duT1MoKSk7CiAgICAg
ICAgbW9kZWwuc2V0SXNXaW5kb3dzT1MoQXN5bmNEYXRhUHJvdmlkZXIuSXNXaW5kb3dzT3NUeXBl
KHZtLmdldFZtT3MoKSkpOwogICAgICAgIG1vZGVsLmdldElzVm1GaXJzdFJ1bigpLnNldEVudGl0
eSghdm0uaXNJbml0aWFsaXplZCgpKTsKICAgICAgICBtb2RlbC5nZXRTeXNQcmVwRG9tYWluTmFt
ZSgpLnNldFNlbGVjdGVkSXRlbSh2bS5nZXRWbURvbWFpbigpKTsKCiAgICAgICAgUnVuT25jZVVw
ZGF0ZURpc3BsYXlQcm90b2NvbHModm0pOwogICAgICAgIFJ1bk9uY2VVcGRhdGVGbG9wcHkodm0s
IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKICAgICAgICBSdW5PbmNlVXBkYXRlSW1hZ2VzKHZt
KTsKICAgICAgICBSdW5PbmNlVXBkYXRlRG9tYWlucygpOwogICAgICAgIFJ1bk9uY2VVcGRhdGVC
b290U2VxdWVuY2Uodm0pOwoKICAgICAgICBVSUNvbW1hbmQgdGVtcFZhciA9IG5ldyBVSUNvbW1h
bmQoIk9uUnVuT25jZSIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhci5zZXRU
aXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkub2soKSk7
CiAgICAgICAgdGVtcFZhci5zZXRJc0RlZmF1bHQodHJ1ZSk7CiAgICAgICAgbW9kZWwuZ2V0Q29t
bWFuZHMoKS5hZGQodGVtcFZhcik7CiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIyID0gbmV3IFVJ
Q29tbWFuZCgiQ2FuY2VsIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyMi5z
ZXRUaXRsZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuY2Fu
Y2VsKCkpOwogICAgICAgIHRlbXBWYXIyLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgIG1vZGVs
LmdldENvbW1hbmRzKCkuYWRkKHRlbXBWYXIyKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgUnVu
T25jZVVwZGF0ZURpc3BsYXlQcm90b2NvbHMoVk0gdm0pCiAgICB7CiAgICAgICAgUnVuT25jZU1v
ZGVsIG1vZGVsID0gKFJ1bk9uY2VNb2RlbCkgZ2V0V2luZG93KCk7CgogICAgICAgIEVudGl0eU1v
ZGVsIHRlbXBWYXIgPSBuZXcgRW50aXR5TW9kZWwoKTsKICAgICAgICB0ZW1wVmFyLnNldFRpdGxl
KENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5WTkNUaXRsZSgp
KTsKICAgICAgICB0ZW1wVmFyLnNldEVudGl0eShEaXNwbGF5VHlwZS52bmMpOwogICAgICAgIEVu
dGl0eU1vZGVsIHZuY1Byb3RvY29sID0gdGVtcFZhcjsKCiAgICAgICAgRW50aXR5TW9kZWwgdGVt
cFZhcjIgPSBuZXcgRW50aXR5TW9kZWwoKTsKICAgICAgICB0ZW1wVmFyMi5zZXRUaXRsZShDb25z
dGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuc3BpY2VUaXRsZSgpKTsK
ICAgICAgICB0ZW1wVmFyMi5zZXRFbnRpdHkoRGlzcGxheVR5cGUucXhsKTsKICAgICAgICBFbnRp
dHlNb2RlbCBxeGxQcm90b2NvbCA9IHRlbXBWYXIyOwoKICAgICAgICBib29sZWFuIGlzVm5jU2Vs
ZWN0ZWQgPSB2bS5nZXREZWZhdWx0RGlzcGxheVR5cGUoKSA9PSBEaXNwbGF5VHlwZS52bmM7CiAg
ICAgICAgbW9kZWwuZ2V0RGlzcGxheUNvbnNvbGVfVm5jX0lzU2VsZWN0ZWQoKS5zZXRFbnRpdHko
aXNWbmNTZWxlY3RlZCk7CiAgICAgICAgbW9kZWwuZ2V0RGlzcGxheUNvbnNvbGVfU3BpY2VfSXNT
ZWxlY3RlZCgpLnNldEVudGl0eSghaXNWbmNTZWxlY3RlZCk7CgogICAgICAgIEFycmF5TGlzdDxF
bnRpdHlNb2RlbD4gaXRlbXMgPSBuZXcgQXJyYXlMaXN0PEVudGl0eU1vZGVsPigpOwogICAgICAg
IGl0ZW1zLmFkZCh2bmNQcm90b2NvbCk7CiAgICAgICAgaXRlbXMuYWRkKHF4bFByb3RvY29sKTsK
ICAgICAgICBtb2RlbC5nZXREaXNwbGF5UHJvdG9jb2woKS5zZXRJdGVtcyhpdGVtcyk7CiAgICAg
ICAgbW9kZWwuZ2V0RGlzcGxheVByb3RvY29sKCkuc2V0U2VsZWN0ZWRJdGVtKGlzVm5jU2VsZWN0
ZWQgPyB2bmNQcm90b2NvbCA6IHF4bFByb3RvY29sKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQg
UnVuT25jZVVwZGF0ZUJvb3RTZXF1ZW5jZShWTSB2bSkKICAgIHsKICAgICAgICBBc3luY1F1ZXJ5
IF9hc3luY1F1ZXJ5ID0gbmV3IEFzeW5jUXVlcnkoKTsKICAgICAgICBfYXN5bmNRdWVyeS5zZXRN
b2RlbCh0aGlzKTsKCiAgICAgICAgX2FzeW5jUXVlcnkuYXN5bmNDYWxsYmFjayA9IG5ldyBJTmV3
QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1Ymxp
YyB2b2lkIE9uU3VjY2VzcyhPYmplY3QgbW9kZWwsIE9iamVjdCBSZXR1cm5WYWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0TW9kZWwgPSAoVm1MaXN0
TW9kZWwpIG1vZGVsOwogICAgICAgICAgICAgICAgUnVuT25jZU1vZGVsIHJ1bk9uY2VNb2RlbCA9
IChSdW5PbmNlTW9kZWwpIHZtTGlzdE1vZGVsLmdldFdpbmRvdygpOwogICAgICAgICAgICAgICAg
Ym9vbGVhbiBoYXNOaWNzID0KICAgICAgICAgICAgICAgICAgICAgICAgKChBcnJheUxpc3Q8Vm1O
ZXR3b3JrSW50ZXJmYWNlPikgKChWZGNRdWVyeVJldHVyblZhbHVlKSBSZXR1cm5WYWx1ZSkuZ2V0
UmV0dXJuVmFsdWUoKSkuc2l6ZSgpID4gMDsKCiAgICAgICAgICAgICAgICBpZiAoIWhhc05pY3Mp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQm9vdFNlcXVlbmNlTW9kZWwg
Ym9vdFNlcXVlbmNlTW9kZWwgPSBydW5PbmNlTW9kZWwuZ2V0Qm9vdFNlcXVlbmNlKCk7CiAgICAg
ICAgICAgICAgICAgICAgYm9vdFNlcXVlbmNlTW9kZWwuZ2V0TmV0d29ya09wdGlvbigpLnNldElz
Q2hhbmdhYmxlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICBib290U2VxdWVuY2VNb2RlbC5n
ZXROZXR3b3JrT3B0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDaGFuZ2VQ
cm9oaWJpdGlvblJlYXNvbnMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZCgiVmly
dHVhbCBNYWNoaW5lIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbmV0d29yayBpbnRlcmZhY2UgZGVm
aW5lZCB0byBib290IGZyb20gbmV0d29yay4iKTsgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgRnJvbnRlbmQuUnVuUXVlcnko
VmRjUXVlcnlUeXBlLkdldFZtSW50ZXJmYWNlc0J5Vm1JZCwgbmV3IElkUXVlcnlQYXJhbWV0ZXJz
KHZtLmdldElkKCkpLCBfYXN5bmNRdWVyeSk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIFJ1bk9u
Y2VVcGRhdGVEb21haW5zKCkKICAgIHsKICAgICAgICBSdW5PbmNlTW9kZWwgbW9kZWwgPSAoUnVu
T25jZU1vZGVsKSBnZXRXaW5kb3coKTsKCiAgICAgICAgLy8gVXBkYXRlIERvbWFpbiBsaXN0CiAg
ICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0RG9tYWluTGlzdChuZXcgQXN5bmNRdWVyeShtb2Rl
bCwKICAgICAgICAgICAgICAgIG5ldyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAg
ICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nl
c3MoT2JqZWN0IHRhcmdldCwgT2JqZWN0IHJldHVyblZhbHVlKSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICBSdW5PbmNlTW9kZWwgcnVuT25jZU1vZGVsID0gKFJ1bk9uY2VNb2RlbCkgdGFyZ2V0
OwogICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFN0cmluZz4gZG9tYWlucyA9IChMaXN0PFN0
cmluZz4pIHJldHVyblZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2xkRG9t
YWluID0gKFN0cmluZykgcnVuT25jZU1vZGVsLmdldFN5c1ByZXBEb21haW5OYW1lKCkuZ2V0U2Vs
ZWN0ZWRJdGVtKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGREb21haW4gIT0gbnVs
bCAmJiAhb2xkRG9tYWluLmVxdWFscygiIikgJiYgIWRvbWFpbnMuY29udGFpbnMob2xkRG9tYWlu
KSkgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb21haW5zLmFkZCgwLCBvbGREb21haW4pOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk9uY2VNb2RlbC5nZXRTeXNQcmVw
RG9tYWluTmFtZSgpLnNldEl0ZW1zKGRvbWFpbnMpOwogICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgc2VsZWN0ZWREb21haW4gPSAob2xkRG9tYWluICE9IG51bGwpID8gb2xkRG9tYWluIDog
TGlucS5GaXJzdE9yRGVmYXVsdChkb21haW5zKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKHNlbGVjdGVkRG9tYWluLCAiIikpIC8vJE5PTi1O
TFMtMSQKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuT25jZU1vZGVsLmdldFN5c1ByZXBEb21haW5OYW1lKCkuc2V0U2VsZWN0ZWRJdGVtKHNl
bGVjdGVkRG9tYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9KSwgdHJ1ZSk7CiAgICB9CgogICAgcHVibGljIHZvaWQg
UnVuT25jZVVwZGF0ZUZsb3BweShWTSB2bSwgQXJyYXlMaXN0PFN0cmluZz4gaW1hZ2VzKQogICAg
ewogICAgICAgIFJ1bk9uY2VNb2RlbCBtb2RlbCA9IChSdW5PbmNlTW9kZWwpIGdldFdpbmRvdygp
OwoKICAgICAgICBpZiAoQXN5bmNEYXRhUHJvdmlkZXIuSXNXaW5kb3dzT3NUeXBlKHZtLmdldFZt
T3MoKSkpCiAgICAgICAgewogICAgICAgICAgICAvLyBBZGQgYSBwc2V1ZG8gZmxvcHB5IGRpc2sg
aW1hZ2UgdXNlZCBmb3IgV2luZG93cycgc3lzcHJlcC4KICAgICAgICAgICAgaWYgKCF2bS5pc0lu
aXRpYWxpemVkKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGltYWdlcy5hZGQoMCwg
IltzeXNwcmVwXSIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgICAgICBtb2RlbC5nZXRBdHRh
Y2hGbG9wcHkoKS5zZXRFbnRpdHkodHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbWFnZXMuYWRkKCJbc3lzcHJlcF0iKTsg
Ly8kTk9OLU5MUy0xJAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBtb2RlbC5nZXRG
bG9wcHlJbWFnZSgpLnNldEl0ZW1zKGltYWdlcyk7CgogICAgICAgIGlmIChtb2RlbC5nZXRGbG9w
cHlJbWFnZSgpLmdldElzQ2hhbmdhYmxlKCkgJiYgbW9kZWwuZ2V0RmxvcHB5SW1hZ2UoKS5nZXRT
ZWxlY3RlZEl0ZW0oKSA9PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgbW9kZWwuZ2V0Rmxv
cHB5SW1hZ2UoKS5zZXRTZWxlY3RlZEl0ZW0oTGlucS5GaXJzdE9yRGVmYXVsdChpbWFnZXMpKTsK
ICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIFJ1bk9uY2VVcGRhdGVJbWFnZXMoVk0g
dm0pIHsKCiAgICAgICAgQXN5bmNRdWVyeSBfYXN5bmNRdWVyeTIgPSBuZXcgQXN5bmNRdWVyeSgp
OwogICAgICAgIF9hc3luY1F1ZXJ5Mi5zZXRNb2RlbCh0aGlzKTsKCiAgICAgICAgX2FzeW5jUXVl
cnkyLmFzeW5jQ2FsbGJhY2sgPSBuZXcgSU5ld0FzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAg
IEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IG1vZGVs
MiwgT2JqZWN0IHJlc3VsdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVm1MaXN0TW9k
ZWwgdm1MaXN0TW9kZWwyID0gKFZtTGlzdE1vZGVsKSBtb2RlbDI7CiAgICAgICAgICAgICAgICBW
TSBzZWxlY3RlZFZNID0gKFZNKSB2bUxpc3RNb2RlbDIuZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAg
ICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBpbWFnZXMgPSAoQXJyYXlMaXN0PFN0cmluZz4p
IHJlc3VsdDsKCiAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbDIuUnVuT25jZVVwZGF0ZUZsb3Bw
eShzZWxlY3RlZFZNLCBpbWFnZXMpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBB
c3luY0RhdGFQcm92aWRlci5HZXRGbG9wcHlJbWFnZUxpc3QoX2FzeW5jUXVlcnkyLCB2bS5nZXRT
dG9yYWdlUG9vbElkKCkpOwoKICAgICAgICBBc3luY1F1ZXJ5IGdldEltYWdlTGlzdFF1ZXJ5ID0g
bmV3IEFzeW5jUXVlcnkoKTsKICAgICAgICBnZXRJbWFnZUxpc3RRdWVyeS5zZXRNb2RlbCh0aGlz
KTsKCiAgICAgICAgZ2V0SW1hZ2VMaXN0UXVlcnkuYXN5bmNDYWxsYmFjayA9IG5ldyBJTmV3QXN5
bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyB2
b2lkIE9uU3VjY2VzcyhPYmplY3QgbW9kZWwxLCBPYmplY3QgcmVzdWx0KQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2RlbDEgPSAoVm1MaXN0TW9kZWwp
IG1vZGVsMTsKICAgICAgICAgICAgICAgIFJ1bk9uY2VNb2RlbCBydW5PbmNlTW9kZWwgPSAoUnVu
T25jZU1vZGVsKSB2bUxpc3RNb2RlbDEuZ2V0V2luZG93KCk7CiAgICAgICAgICAgICAgICBBcnJh
eUxpc3Q8U3RyaW5nPiBpbWFnZXMgPSAoQXJyYXlMaXN0PFN0cmluZz4pIHJlc3VsdDsKCiAgICAg
ICAgICAgICAgICBydW5PbmNlTW9kZWwuZ2V0SXNvSW1hZ2UoKS5zZXRJdGVtcyhpbWFnZXMpOwog
ICAgICAgICAgICAgICAgaWYgKHJ1bk9uY2VNb2RlbC5nZXRJc29JbWFnZSgpLmdldElzQ2hhbmdh
YmxlKCkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgcnVuT25jZU1vZGVsLmdldElzb0ltYWdl
KCkuZ2V0U2VsZWN0ZWRJdGVtKCkgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBydW5PbmNlTW9kZWwuZ2V0SXNvSW1hZ2UoKS5zZXRTZWxlY3RlZEl0ZW0oTGlu
cS5GaXJzdE9yRGVmYXVsdChpbWFnZXMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgIH07CiAgICAgICAgQXN5bmNEYXRhUHJvdmlkZXIuR2V0SXJzSW1hZ2VMaXN0KGdl
dEltYWdlTGlzdFF1ZXJ5LCB2bS5nZXRTdG9yYWdlUG9vbElkKCkpOwoKICAgIH0KCiAgICBwcml2
YXRlIHZvaWQgT25SdW5PbmNlKCkKICAgIHsKICAgICAgICBWTSB2bSA9IChWTSkgZ2V0U2VsZWN0
ZWRJdGVtKCk7CiAgICAgICAgaWYgKHZtID09IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBD
YW5jZWwoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgUnVuT25jZU1v
ZGVsIG1vZGVsID0gKFJ1bk9uY2VNb2RlbCkgZ2V0V2luZG93KCk7CgogICAgICAgIGlmICghbW9k
ZWwuVmFsaWRhdGUoKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9Cgog
ICAgICAgIEJvb3RTZXF1ZW5jZU1vZGVsIGJvb3RTZXF1ZW5jZU1vZGVsID0gbW9kZWwuZ2V0Qm9v
dFNlcXVlbmNlKCk7CgogICAgICAgIFJ1blZtT25jZVBhcmFtcyB0ZW1wVmFyID0gbmV3IFJ1blZt
T25jZVBhcmFtcygpOwogICAgICAgIHRlbXBWYXIuc2V0Vm1JZCh2bS5nZXRJZCgpKTsKICAgICAg
ICB0ZW1wVmFyLnNldEJvb3RTZXF1ZW5jZShib290U2VxdWVuY2VNb2RlbC5nZXRTZXF1ZW5jZSgp
KTsKICAgICAgICB0ZW1wVmFyLnNldERpc2tQYXRoKChCb29sZWFuKSBtb2RlbC5nZXRBdHRhY2hJ
c28oKS5nZXRFbnRpdHkoKSA/IChTdHJpbmcpIG1vZGVsLmdldElzb0ltYWdlKCkuZ2V0U2VsZWN0
ZWRJdGVtKCkKICAgICAgICAgICAgICAgIDogIiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVt
cFZhci5zZXRGbG9wcHlQYXRoKG1vZGVsLmdldEZsb3BweUltYWdlUGF0aCgpKTsKICAgICAgICB0
ZW1wVmFyLnNldEt2bUVuYWJsZShtb2RlbC5nZXRId0FjY2VsZXJhdGlvbigpKTsKICAgICAgICB0
ZW1wVmFyLnNldFJ1bkFuZFBhdXNlKChCb29sZWFuKSBtb2RlbC5nZXRSdW5BbmRQYXVzZSgpLmdl
dEVudGl0eSgpKTsKICAgICAgICB0ZW1wVmFyLnNldEFjcGlFbmFibGUodHJ1ZSk7CiAgICAgICAg
dGVtcFZhci5zZXRSdW5Bc1N0YXRlbGVzcygoQm9vbGVhbikgbW9kZWwuZ2V0UnVuQXNTdGF0ZWxl
c3MoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgdGVtcFZhci5zZXRSZWluaXRpYWxpemUobW9kZWwu
Z2V0UmVpbml0aWFsaXplKCkpOwogICAgICAgIHRlbXBWYXIuc2V0Q3VzdG9tUHJvcGVydGllcyht
b2RlbC5nZXRDdXN0b21Qcm9wZXJ0eVNoZWV0KCkuZ2V0RW50aXR5KCkpOwogICAgICAgIFJ1blZt
T25jZVBhcmFtcyBwYXJhbSA9IHRlbXBWYXI7CgogICAgICAgIC8vIGtlcm5lbCBwYXJhbXMKICAg
ICAgICBpZiAobW9kZWwuZ2V0S2VybmVsX3BhdGgoKS5nZXRFbnRpdHkoKSAhPSBudWxsKQogICAg
ICAgIHsKICAgICAgICAgICAgcGFyYW0uc2V0a2VybmVsX3VybCgoU3RyaW5nKSBtb2RlbC5nZXRL
ZXJuZWxfcGF0aCgpLmdldEVudGl0eSgpKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1vZGVsLmdl
dEtlcm5lbF9wYXJhbWV0ZXJzKCkuZ2V0RW50aXR5KCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAg
ICAgICAgIHBhcmFtLnNldGtlcm5lbF9wYXJhbXMoKFN0cmluZykgbW9kZWwuZ2V0S2VybmVsX3Bh
cmFtZXRlcnMoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChtb2RlbC5nZXRJ
bml0cmRfcGF0aCgpLmdldEVudGl0eSgpICE9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBw
YXJhbS5zZXRpbml0cmRfdXJsKChTdHJpbmcpIG1vZGVsLmdldEluaXRyZF9wYXRoKCkuZ2V0RW50
aXR5KCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gU3lzcHJlcCBwYXJhbXMKICAgICAgICBpZiAo
bW9kZWwuZ2V0U3lzUHJlcERvbWFpbk5hbWUoKS5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxsKQog
ICAgICAgIHsKICAgICAgICAgICAgcGFyYW0uc2V0U3lzUHJlcERvbWFpbk5hbWUobW9kZWwuZ2V0
U3lzUHJlcFNlbGVjdGVkRG9tYWluTmFtZSgpLmdldEVudGl0eSgpLmVxdWFscygiIikgPyAoU3Ry
aW5nKSBtb2RlbC5nZXRTeXNQcmVwU2VsZWN0ZWREb21haW5OYW1lKCkgLy8kTk9OLU5MUy0xJAog
ICAgICAgICAgICAgICAgICAgIC5nZXRFbnRpdHkoKQogICAgICAgICAgICAgICAgICAgIDogKFN0
cmluZykgbW9kZWwuZ2V0U3lzUHJlcERvbWFpbk5hbWUoKS5nZXRTZWxlY3RlZEl0ZW0oKSk7CiAg
ICAgICAgfQogICAgICAgIGlmIChtb2RlbC5nZXRTeXNQcmVwVXNlck5hbWUoKS5nZXRFbnRpdHko
KSAhPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcGFyYW0uc2V0U3lzUHJlcFVzZXJOYW1l
KChTdHJpbmcpIG1vZGVsLmdldFN5c1ByZXBVc2VyTmFtZSgpLmdldEVudGl0eSgpKTsKICAgICAg
ICB9CiAgICAgICAgaWYgKG1vZGVsLmdldFN5c1ByZXBQYXNzd29yZCgpLmdldEVudGl0eSgpICE9
IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBwYXJhbS5zZXRTeXNQcmVwUGFzc3dvcmQoKFN0
cmluZykgbW9kZWwuZ2V0U3lzUHJlcFBhc3N3b3JkKCkuZ2V0RW50aXR5KCkpOwogICAgICAgIH0K
CiAgICAgICAgRW50aXR5TW9kZWwgZGlzcGxheVByb3RvY29sU2VsZWN0ZWRJdGVtID0gKEVudGl0
eU1vZGVsKSBtb2RlbC5nZXREaXNwbGF5UHJvdG9jb2woKS5nZXRTZWxlY3RlZEl0ZW0oKTsKICAg
ICAgICBwYXJhbS5zZXRVc2VWbmMoKERpc3BsYXlUeXBlKSBkaXNwbGF5UHJvdG9jb2xTZWxlY3Rl
ZEl0ZW0uZ2V0RW50aXR5KCkgPT0gRGlzcGxheVR5cGUudm5jKTsKICAgICAgICBpZiAoKEJvb2xl
YW4pIG1vZGVsLmdldERpc3BsYXlDb25zb2xlX1ZuY19Jc1NlbGVjdGVkKCkuZ2V0RW50aXR5KCkK
ICAgICAgICAgICAgICAgIHx8IChCb29sZWFuKSBtb2RlbC5nZXREaXNwbGF5Q29uc29sZV9TcGlj
ZV9Jc1NlbGVjdGVkKCkuZ2V0RW50aXR5KCkpCiAgICAgICAgewogICAgICAgICAgICBwYXJhbS5z
ZXRVc2VWbmMoKEJvb2xlYW4pIG1vZGVsLmdldERpc3BsYXlDb25zb2xlX1ZuY19Jc1NlbGVjdGVk
KCkuZ2V0RW50aXR5KCkpOwogICAgICAgIH0KCiAgICAgICAgRnJvbnRlbmQuUnVuQWN0aW9uKFZk
Y0FjdGlvblR5cGUuUnVuVm1PbmNlLCBwYXJhbSwKICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRl
bmRBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQog
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4ZWN1dGVkKEZyb250ZW5kQWN0aW9uQXN5
bmNSZXN1bHQgcmVzdWx0KSB7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0sIHRoaXMpOwoKICAgICAgICBDYW5jZWwoKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgTmV3
VGVtcGxhdGUoKQogICAgewogICAgICAgIFZNIHZtID0gKFZNKSBnZXRTZWxlY3RlZEl0ZW0oKTsK
ICAgICAgICBpZiAodm0gPT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICB9CgogICAgICAgIGlmIChnZXRXaW5kb3coKSAhPSBudWxsKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgVW5pdFZtTW9kZWwgbW9kZWwgPSBuZXcg
VW5pdFZtTW9kZWwobmV3IE5ld1RlbXBsYXRlVm1Nb2RlbEJlaGF2aW9yKHZtKSk7CiAgICAgICAg
c2V0V2luZG93KG1vZGVsKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2Vy
LmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkubmV3VGVtcGxhdGVUaXRsZSgpKTsKICAgICAg
ICBtb2RlbC5zZXRIYXNoTmFtZSgibmV3X3RlbXBsYXRlIik7IC8vJE5PTi1OTFMtMSQKICAgICAg
ICBtb2RlbC5zZXRJc05ldyh0cnVlKTsKICAgICAgICBtb2RlbC5zZXRWbVR5cGUodm0uZ2V0Vm1U
eXBlKCkpOwoKICAgICAgICBtb2RlbC5Jbml0aWFsaXplKGdldFN5c3RlbVRyZWVTZWxlY3RlZEl0
ZW0oKSk7CgogICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyID0gbmV3IFVJQ29tbWFuZCgiT25OZXdU
ZW1wbGF0ZSIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhci5zZXRUaXRsZShD
b25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkub2soKSk7CiAgICAg
ICAgdGVtcFZhci5zZXRJc0RlZmF1bHQodHJ1ZSk7CiAgICAgICAgbW9kZWwuZ2V0Q29tbWFuZHMo
KS5hZGQodGVtcFZhcik7CiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIyID0gbmV3IFVJQ29tbWFu
ZCgiQ2FuY2VsIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyMi5zZXRUaXRs
ZShDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuY2FuY2VsKCkp
OwogICAgICAgIHRlbXBWYXIyLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgIG1vZGVsLmdldENv
bW1hbmRzKCkuYWRkKHRlbXBWYXIyKTsKCiAgICAgICAgbW9kZWwuZ2V0SXNIaWdobHlBdmFpbGFi
bGUoKS5zZXRFbnRpdHkodm0uZ2V0U3RhdGljRGF0YSgpLmlzQXV0b1N0YXJ0dXAoKSk7CiAgICB9
CgogICAgcHJpdmF0ZSB2b2lkIE9uTmV3VGVtcGxhdGUoKQogICAgewogICAgICAgIFVuaXRWbU1v
ZGVsIG1vZGVsID0gKFVuaXRWbU1vZGVsKSBnZXRXaW5kb3coKTsKICAgICAgICBWTSB2bSA9IChW
TSkgZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgaWYgKHZtID09IG51bGwpCiAgICAgICAgewog
ICAgICAgICAgICBDYW5jZWwoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAg
ICAgaWYgKG1vZGVsLmdldFByb2dyZXNzKCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghbW9kZWwuVmFsaWRhdGUoKSkKICAgICAg
ICB7CiAgICAgICAgICAgIG1vZGVsLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG1vZGVs
LmdldE5hbWUoKS5nZXRFbnRpdHkoKTsKCiAgICAgICAgICAgIC8vIENoZWNrIG5hbWUgdW5pY2l0
YXRlLgogICAgICAgICAgICBBc3luY0RhdGFQcm92aWRlci5Jc1RlbXBsYXRlTmFtZVVuaXF1ZShu
ZXcgQXN5bmNRdWVyeSh0aGlzLAogICAgICAgICAgICAgICAgICAgIG5ldyBJTmV3QXN5bmNDYWxs
YmFjaygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyB2b2lkIE9uU3VjY2VzcyhPYmplY3QgdGFyZ2V0LCBPYmplY3QgcmV0
dXJuVmFsdWUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxp
c3RNb2RlbCA9IChWbUxpc3RNb2RlbCkgdGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbGVhbiBpc05hbWVVbmlxdWUgPSAoQm9vbGVhbikgcmV0dXJuVmFsdWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFtZVVuaXF1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml0Vm1Nb2RlbCBW
bU1vZGVsID0gKFVuaXRWbU1vZGVsKSB2bUxpc3RNb2RlbC5nZXRXaW5kb3coKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWbU1vZGVsLmdldEludmFsaWRpdHlSZWFzb25zKCkuY2xl
YXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWbU1vZGVsLmdldE5hbWUoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEludmFsaWRpdHlSZWFz
b25zKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGQoQ29uc3Rh
bnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAubmFtZU11c3RCZVVuaXF1ZUludmFsaWRSZWFzb24oKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1Nb2RlbC5nZXROYW1lKCkuc2V0SXNW
YWxpZChmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1Nb2RlbC5zZXRJ
c1ZhbGlkKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbC5Qb3N0TmFtZVVuaXF1ZUNoZWNr
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAg
ICAgICAgfQogICAgfQoKICAgIHB1YmxpYyB2b2lkIFBvc3ROYW1lVW5pcXVlQ2hlY2soKQogICAg
ewogICAgICAgIFVuaXRWbU1vZGVsIG1vZGVsID0gKFVuaXRWbU1vZGVsKSBnZXRXaW5kb3coKTsK
ICAgICAgICBWTSB2bSA9IChWTSkgZ2V0U2VsZWN0ZWRJdGVtKCk7CgogICAgICAgIFZNIHRlbXBW
YXIgPSBuZXcgVk0oKTsKICAgICAgICB0ZW1wVmFyLnNldElkKHZtLmdldElkKCkpOwogICAgICAg
IHRlbXBWYXIuc2V0Vm1UeXBlKG1vZGVsLmdldFZtVHlwZSgpKTsKICAgICAgICBpZiAobW9kZWwu
Z2V0UXVvdGEoKS5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxsKSB7CiAgICAgICAgICAgIHRlbXBW
YXIuc2V0UXVvdGFJZCgoKFF1b3RhKSBtb2RlbC5nZXRRdW90YSgpLmdldFNlbGVjdGVkSXRlbSgp
KS5nZXRJZCgpKTsKICAgICAgICB9CiAgICAgICAgdGVtcFZhci5zZXRWbU9zKChWbU9zVHlwZSkg
bW9kZWwuZ2V0T1NUeXBlKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpOwogICAgICAgIHRlbXBWYXIuc2V0
TnVtT2ZNb25pdG9ycygoSW50ZWdlcikgbW9kZWwuZ2V0TnVtT2ZNb25pdG9ycygpLmdldFNlbGVj
dGVkSXRlbSgpKTsKICAgICAgICB0ZW1wVmFyLnNldEFsbG93Q29uc29sZVJlY29ubmVjdCgoQm9v
bGVhbikgbW9kZWwuZ2V0QWxsb3dDb25zb2xlUmVjb25uZWN0KCkuZ2V0RW50aXR5KCkpOwogICAg
ICAgIHRlbXBWYXIuc2V0Vm1Eb21haW4obW9kZWwuZ2V0RG9tYWluKCkuZ2V0SXNBdmFpbGFibGUo
KSA/IChTdHJpbmcpIG1vZGVsLmdldERvbWFpbigpLmdldFNlbGVjdGVkSXRlbSgpIDogIiIpOyAv
LyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhci5zZXRWbU1lbVNpemVNYigoSW50ZWdlcikgbW9k
ZWwuZ2V0TWVtU2l6ZSgpLmdldEVudGl0eSgpKTsKICAgICAgICB0ZW1wVmFyLnNldE1pbkFsbG9j
YXRlZE1lbSgoSW50ZWdlcikgbW9kZWwuZ2V0TWluQWxsb2NhdGVkTWVtb3J5KCkuZ2V0RW50aXR5
KCkpOwogICAgICAgIHRlbXBWYXIuc2V0VmRzR3JvdXBJZCgoKFZEU0dyb3VwKSBtb2RlbC5nZXRD
bHVzdGVyKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCkpOwogICAgICAgIHRlbXBWYXIuc2V0
VGltZVpvbmUobW9kZWwuZ2V0VGltZVpvbmUoKS5nZXRJc0F2YWlsYWJsZSgpICYmIG1vZGVsLmdl
dFRpbWVab25lKCkuZ2V0U2VsZWN0ZWRJdGVtKCkgIT0gbnVsbCA/ICgoTWFwLkVudHJ5PFN0cmlu
ZywgU3RyaW5nPikgbW9kZWwuZ2V0VGltZVpvbmUoKQogICAgICAgICAgICAgICAgLmdldFNlbGVj
dGVkSXRlbSgpKS5nZXRLZXkoKQogICAgICAgICAgICAgICAgOiAiIik7IC8vJE5PTi1OTFMtMSQK
ICAgICAgICB0ZW1wVmFyLnNldE51bU9mU29ja2V0cygoSW50ZWdlcikgbW9kZWwuZ2V0TnVtT2ZT
b2NrZXRzKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpOwogICAgICAgIHRlbXBWYXIuc2V0Q3B1UGVyU29j
a2V0KEludGVnZXIucGFyc2VJbnQobW9kZWwuZ2V0VG90YWxDUFVDb3JlcygpLmdldEVudGl0eSgp
LnRvU3RyaW5nKCkpCiAgICAgICAgICAgICAgICAvIChJbnRlZ2VyKSBtb2RlbC5nZXROdW1PZlNv
Y2tldHMoKS5nZXRTZWxlY3RlZEl0ZW0oKSk7CiAgICAgICAgdGVtcFZhci5zZXRBdXRvU3VzcGVu
ZChmYWxzZSk7CiAgICAgICAgdGVtcFZhci5zZXRTdGF0ZWxlc3MoKEJvb2xlYW4pIG1vZGVsLmdl
dElzU3RhdGVsZXNzKCkuZ2V0RW50aXR5KCkpOwogICAgICAgIHRlbXBWYXIuc2V0U21hcnRjYXJk
RW5hYmxlZCgoQm9vbGVhbikgbW9kZWwuZ2V0SXNTbWFydGNhcmRFbmFibGVkKCkuZ2V0RW50aXR5
KCkpOwogICAgICAgIHRlbXBWYXIuc2V0RGVsZXRlUHJvdGVjdGVkKChCb29sZWFuKSBtb2RlbC5n
ZXRJc0RlbGV0ZVByb3RlY3RlZCgpLmdldEVudGl0eSgpKTsKICAgICAgICB0ZW1wVmFyLnNldERl
ZmF1bHRCb290U2VxdWVuY2UobW9kZWwuZ2V0Qm9vdFNlcXVlbmNlKCkpOwogICAgICAgIHRlbXBW
YXIuc2V0QXV0b1N0YXJ0dXAoKEJvb2xlYW4pIG1vZGVsLmdldElzSGlnaGx5QXZhaWxhYmxlKCku
Z2V0RW50aXR5KCkpOwogICAgICAgIHRlbXBWYXIuc2V0SXNvUGF0aChtb2RlbC5nZXRDZEltYWdl
KCkuZ2V0SXNDaGFuZ2FibGUoKSA/IChTdHJpbmcpIG1vZGVsLmdldENkSW1hZ2UoKS5nZXRTZWxl
Y3RlZEl0ZW0oKSA6ICIiKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHRlbXBWYXIuc2V0VXNiUG9s
aWN5KHZtLmdldFVzYlBvbGljeSgpKTsKICAgICAgICB0ZW1wVmFyLnNldEluaXRyZFVybCh2bS5n
ZXRJbml0cmRVcmwoKSk7CiAgICAgICAgdGVtcFZhci5zZXRLZXJuZWxVcmwodm0uZ2V0S2VybmVs
VXJsKCkpOwogICAgICAgIHRlbXBWYXIuc2V0S2VybmVsUGFyYW1zKHZtLmdldEtlcm5lbFBhcmFt
cygpKTsKICAgICAgICB0ZW1wVmFyLnNldERlZGljYXRlZFZtRm9yVmRzKHZtLmdldERlZGljYXRl
ZFZtRm9yVmRzKCkpOwogICAgICAgIHRlbXBWYXIuc2V0TWlncmF0aW9uU3VwcG9ydCh2bS5nZXRN
aWdyYXRpb25TdXBwb3J0KCkpOwoKICAgICAgICBWTSBuZXd2bSA9IHRlbXBWYXI7CgogICAgICAg
IEVudGl0eU1vZGVsIGRpc3BsYXlQcm90b2NvbFNlbGVjdGVkSXRlbSA9IChFbnRpdHlNb2RlbCkg
bW9kZWwuZ2V0RGlzcGxheVByb3RvY29sKCkuZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgbmV3
dm0uc2V0RGVmYXVsdERpc3BsYXlUeXBlKChEaXNwbGF5VHlwZSkgZGlzcGxheVByb3RvY29sU2Vs
ZWN0ZWRJdGVtLmdldEVudGl0eSgpKTsKCiAgICAgICAgRW50aXR5TW9kZWwgcHJpb3JpdHlTZWxl
Y3RlZEl0ZW0gPSAoRW50aXR5TW9kZWwpIG1vZGVsLmdldFByaW9yaXR5KCkuZ2V0U2VsZWN0ZWRJ
dGVtKCk7CiAgICAgICAgbmV3dm0uc2V0UHJpb3JpdHkoKEludGVnZXIpIHByaW9yaXR5U2VsZWN0
ZWRJdGVtLmdldEVudGl0eSgpKTsKCiAgICAgICAgQWRkVm1UZW1wbGF0ZVBhcmFtZXRlcnMgYWRk
Vm1UZW1wbGF0ZVBhcmFtZXRlcnMgPQogICAgICAgICAgICAgICAgbmV3IEFkZFZtVGVtcGxhdGVQ
YXJhbWV0ZXJzKG5ld3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBtb2RlbC5n
ZXROYW1lKCkuZ2V0RW50aXR5KCksCiAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIG1v
ZGVsLmdldERlc2NyaXB0aW9uKCkuZ2V0RW50aXR5KCkpOwogICAgICAgIGFkZFZtVGVtcGxhdGVQ
YXJhbWV0ZXJzLnNldFB1YmxpY1VzZSgoQm9vbGVhbikgbW9kZWwuZ2V0SXNUZW1wbGF0ZVB1Ymxp
YygpLmdldEVudGl0eSgpKTsKCiAgICAgICAgYWRkVm1UZW1wbGF0ZVBhcmFtZXRlcnMuc2V0RGlz
a0luZm9EZXN0aW5hdGlvbk1hcCgKICAgICAgICAgICAgICAgIG1vZGVsLmdldERpc2tzQWxsb2Nh
dGlvbk1vZGVsKCkKICAgICAgICAgICAgICAgICAgICAgICAgLmdldEltYWdlVG9EZXN0aW5hdGlv
bkRvbWFpbk1hcCgoQm9vbGVhbikgbW9kZWwuZ2V0RGlza3NBbGxvY2F0aW9uTW9kZWwoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRJc1NpbmdsZVN0b3JhZ2VEb21haW4oKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbnRpdHkoKSkpOwoKICAgICAgICBt
b2RlbC5TdGFydFByb2dyZXNzKG51bGwpOwoKICAgICAgICBGcm9udGVuZC5SdW5BY3Rpb24oVmRj
QWN0aW9uVHlwZS5BZGRWbVRlbXBsYXRlLCBhZGRWbVRlbXBsYXRlUGFyYW1ldGVycywKICAgICAg
ICAgICAgICAgIG5ldyBJRnJvbnRlbmRBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAg
ICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4ZWN1
dGVkKEZyb250ZW5kQWN0aW9uQXN5bmNSZXN1bHQgcmVzdWx0KSB7CgogICAgICAgICAgICAgICAg
ICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2RlbCA9IChWbUxpc3RNb2RlbCkgcmVzdWx0Lmdl
dFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZtTGlzdE1vZGVsLmdldFdpbmRvdygp
LlN0b3BQcm9ncmVzcygpOwogICAgICAgICAgICAgICAgICAgICAgICBWZGNSZXR1cm5WYWx1ZUJh
c2UgcmV0dXJuVmFsdWVCYXNlID0gcmVzdWx0LmdldFJldHVyblZhbHVlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZUJhc2UgIT0gbnVsbCAmJiByZXR1cm5WYWx1ZUJh
c2UuZ2V0U3VjY2VlZGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtTGlzdE1vZGVsLkNhbmNlbCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHRoaXMpOwog
ICAgfQoKICAgIHByaXZhdGUgdm9pZCBNaWdyYXRlKCkKICAgIHsKICAgICAgICBWTSB2bSA9IChW
TSkgZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgaWYgKHZtID09IG51bGwpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoZ2V0V2luZG93KCkgIT0g
bnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIE1p
Z3JhdGVNb2RlbCBtb2RlbCA9IG5ldyBNaWdyYXRlTW9kZWwoKTsKICAgICAgICBzZXRXaW5kb3co
bW9kZWwpOwogICAgICAgIG1vZGVsLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFu
Y2UoKS5nZXRDb25zdGFudHMoKS5taWdyYXRlVmlydHVhbE1hY2hpbmVzVGl0bGUoKSk7CiAgICAg
ICAgbW9kZWwuc2V0SGFzaE5hbWUoIm1pZ3JhdGVfdmlydHVhbF9tYWNoaW5lIik7IC8vJE5PTi1O
TFMtMSQKICAgICAgICBtb2RlbC5zZXRWbXNPblNhbWVDbHVzdGVyKHRydWUpOwogICAgICAgIG1v
ZGVsLnNldElzQXV0b1NlbGVjdCh0cnVlKTsKICAgICAgICBtb2RlbC5zZXRWbUxpc3QoTGlucS48
Vk0+IENhc3QoZ2V0U2VsZWN0ZWRJdGVtcygpKSk7CgogICAgICAgIEFzeW5jRGF0YVByb3ZpZGVy
LkdldFVwSG9zdExpc3RCeUNsdXN0ZXIobmV3IEFzeW5jUXVlcnkodGhpcywKICAgICAgICAgICAg
ICAgIG5ldyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAgICAgICAgICBAT3ZlcnJp
ZGUKICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IHRhcmdl
dCwgT2JqZWN0IHJldHVyblZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZtTGlzdE1v
ZGVsIHZtTGlzdE1vZGVsID0gKFZtTGlzdE1vZGVsKSB0YXJnZXQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZtTGlzdE1vZGVsLlBvc3RNaWdyYXRlR2V0VXBIb3N0cygoQXJyYXlMaXN0PFZEUz4p
IHJldHVyblZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSwg
dm0uZ2V0VmRzR3JvdXBOYW1lKCkpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBDYW5jZWxNaWdy
YXRpb24oKQogICAgewogICAgICAgIEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4g
bGlzdCA9IG5ldyBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+KCk7CiAgICAgICAg
Zm9yIChPYmplY3QgaXRlbSA6IGdldFNlbGVjdGVkSXRlbXMoKSkgewogICAgICAgICAgICBWTSBh
ID0gKFZNKSBpdGVtOwogICAgICAgICAgICBsaXN0LmFkZChuZXcgVm1PcGVyYXRpb25QYXJhbWV0
ZXJCYXNlKGEuZ2V0SWQoKSkpOwogICAgICAgIH0KCiAgICAgICAgRnJvbnRlbmQuUnVuTXVsdGlw
bGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5DYW5jZWxNaWdyYXRlVm0sIGxpc3QsCiAgICAgICAgICAg
ICAgICBuZXcgSUZyb250ZW5kTXVsdGlwbGVBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAg
ICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4
ZWN1dGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmRNdWx0aXBsZUFjdGlv
bkFzeW5jUmVzdWx0IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0sIG51bGwpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBQb3N0TWlncmF0ZUdldFVwSG9z
dHMoQXJyYXlMaXN0PFZEUz4gaG9zdHMpCiAgICB7CiAgICAgICAgTWlncmF0ZU1vZGVsIG1vZGVs
ID0gKE1pZ3JhdGVNb2RlbCkgZ2V0V2luZG93KCk7CiAgICAgICAgTkd1aWQgcnVuX29uX3ZkcyA9
IG51bGw7CiAgICAgICAgYm9vbGVhbiBhbGxSdW5PblNhbWVWZHMgPSB0cnVlOwoKICAgICAgICBm
b3IgKE9iamVjdCBpdGVtIDogZ2V0U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsKICAgICAgICAg
ICAgVk0gYSA9IChWTSkgaXRlbTsKICAgICAgICAgICAgaWYgKCFhLmdldFZkc0dyb3VwSWQoKS5l
cXVhbHMoKChWTSkgZ2V0U2VsZWN0ZWRJdGVtcygpLmdldCgwKSkuZ2V0VmRzR3JvdXBJZCgpKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbW9kZWwuc2V0Vm1zT25TYW1lQ2x1c3Rlcihm
YWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJ1bl9vbl92ZHMgPT0gbnVsbCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcnVuX29uX3ZkcyA9IGEuZ2V0UnVuT25WZHMo
KS5nZXRWYWx1ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGFsbFJ1bk9u
U2FtZVZkcyAmJiAhcnVuX29uX3Zkcy5lcXVhbHMoYS5nZXRSdW5PblZkcygpLmdldFZhbHVlKCkp
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbGxSdW5PblNhbWVWZHMgPSBmYWxzZTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbW9kZWwuc2V0SXNIb3N0U2VsQXZhaWxh
YmxlKG1vZGVsLmdldFZtc09uU2FtZUNsdXN0ZXIoKSAmJiBob3N0cy5zaXplKCkgPiAwKTsKCiAg
ICAgICAgaWYgKG1vZGVsLmdldFZtc09uU2FtZUNsdXN0ZXIoKSAmJiBhbGxSdW5PblNhbWVWZHMp
CiAgICAgICAgewogICAgICAgICAgICBWRFMgcnVuT25TYW1lVkRTID0gbnVsbDsKICAgICAgICAg
ICAgZm9yIChWRFMgaG9zdCA6IGhvc3RzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBp
ZiAoaG9zdC5nZXRJZCgpLmVxdWFscyhydW5fb25fdmRzKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBydW5PblNhbWVWRFMgPSBob3N0OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGhvc3RzLnJlbW92ZShydW5PblNhbWVWRFMpOwogICAg
ICAgIH0KICAgICAgICBpZiAoaG9zdHMuaXNFbXB0eSgpKQogICAgICAgIHsKICAgICAgICAgICAg
bW9kZWwuc2V0SXNIb3N0U2VsQXZhaWxhYmxlKGZhbHNlKTsKCiAgICAgICAgICAgIGlmIChhbGxS
dW5PblNhbWVWZHMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1vZGVsLnNldE5vU2Vs
QXZhaWxhYmxlKHRydWUpOwoKICAgICAgICAgICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyID0gbmV3
IFVJQ29tbWFuZCgiQ2FuY2VsIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAg
IHRlbXBWYXIuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0
YW50cygpLmNsb3NlKCkpOwogICAgICAgICAgICAgICAgdGVtcFZhci5zZXRJc0RlZmF1bHQodHJ1
ZSk7CiAgICAgICAgICAgICAgICB0ZW1wVmFyLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgICAg
ICAgICAgbW9kZWwuZ2V0Q29tbWFuZHMoKS5hZGQodGVtcFZhcik7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbW9kZWwuZ2V0SG9zdHMo
KS5zZXRJdGVtcyhob3N0cyk7CiAgICAgICAgICAgIG1vZGVsLmdldEhvc3RzKCkuc2V0U2VsZWN0
ZWRJdGVtKExpbnEuRmlyc3RPckRlZmF1bHQoaG9zdHMpKTsKCiAgICAgICAgICAgIFVJQ29tbWFu
ZCB0ZW1wVmFyMiA9IG5ldyBVSUNvbW1hbmQoIk9uTWlncmF0ZSIsIHRoaXMpOyAvLyROT04tTkxT
LTEkCiAgICAgICAgICAgIHRlbXBWYXIyLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5z
dGFuY2UoKS5nZXRDb25zdGFudHMoKS5vaygpKTsKICAgICAgICAgICAgdGVtcFZhcjIuc2V0SXNE
ZWZhdWx0KHRydWUpOwogICAgICAgICAgICBtb2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFy
Mik7CiAgICAgICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyMyA9IG5ldyBVSUNvbW1hbmQoIkNhbmNl
bCIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgICAgIHRlbXBWYXIzLnNldFRpdGxlKENv
bnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5jYW5jZWwoKSk7CiAg
ICAgICAgICAgIHRlbXBWYXIzLnNldElzQ2FuY2VsKHRydWUpOwogICAgICAgICAgICBtb2RlbC5n
ZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyMyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUg
dm9pZCBPbk1pZ3JhdGUoKQogICAgewogICAgICAgIE1pZ3JhdGVNb2RlbCBtb2RlbCA9IChNaWdy
YXRlTW9kZWwpIGdldFdpbmRvdygpOwoKICAgICAgICBpZiAobW9kZWwuZ2V0UHJvZ3Jlc3MoKSAh
PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAg
bW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldElzQXV0b1Nl
bGVjdCgpKQogICAgICAgIHsKICAgICAgICAgICAgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRl
cnNCYXNlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4oKTsK
ICAgICAgICAgICAgZm9yIChPYmplY3QgaXRlbSA6IGdldFNlbGVjdGVkSXRlbXMoKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgVk0gYSA9IChWTSkgaXRlbTsKICAgICAgICAgICAgICAg
IGxpc3QuYWRkKG5ldyBNaWdyYXRlVm1QYXJhbWV0ZXJzKHRydWUsIGEuZ2V0SWQoKSkpOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICBGcm9udGVuZC5SdW5NdWx0aXBsZUFjdGlvbihWZGNBY3Rp
b25UeXBlLk1pZ3JhdGVWbSwgbGlzdCwKICAgICAgICAgICAgICAgICAgICBuZXcgSUZyb250ZW5k
TXVsdGlwbGVBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgICAgICBA
T3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJv
bnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1pZ3JhdGVNb2RlbCBsb2NhbE1vZGVsID0gKE1pZ3JhdGVNb2RlbCkgcmVz
dWx0LmdldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE1vZGVsLlN0
b3BQcm9ncmVzcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsKCk7CgogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgbW9kZWwpOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBBcnJheUxpc3Q8VmRjQWN0
aW9uUGFyYW1ldGVyc0Jhc2U+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRl
cnNCYXNlPigpOwogICAgICAgICAgICBmb3IgKE9iamVjdCBpdGVtIDogZ2V0U2VsZWN0ZWRJdGVt
cygpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWTSBhID0gKFZNKSBpdGVtOwoKICAg
ICAgICAgICAgICAgIGlmIChhLmdldFJ1bk9uVmRzKCkuZ2V0VmFsdWUoKS5lcXVhbHMoKChWRFMp
IG1vZGVsLmdldEhvc3RzKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCkpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIGxpc3QuYWRkKG5ldyBNaWdyYXRlVm1Ub1NlcnZlclBhcmFtZXRlcnMo
dHJ1ZSwgYS5nZXRJZCgpLCAoKFZEUykgbW9kZWwuZ2V0SG9zdHMoKQogICAgICAgICAgICAgICAg
ICAgICAgICAuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCkpKTsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgRnJvbnRlbmQuUnVuTXVsdGlwbGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5NaWdyYXRl
Vm1Ub1NlcnZlciwgbGlzdCwKICAgICAgICAgICAgICAgICAgICBuZXcgSUZyb250ZW5kTXVsdGlw
bGVBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJp
ZGUKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRlbmRN
dWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1pZ3JhdGVNb2RlbCBsb2NhbE1vZGVsID0gKE1pZ3JhdGVNb2RlbCkgcmVzdWx0Lmdl
dFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE1vZGVsLlN0b3BQcm9n
cmVzcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsKCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgbW9kZWwpOwogICAgICAgIH0K
ICAgIH0KCiAgICBwcml2YXRlIHZvaWQgU2h1dGRvd24oKQogICAgewogICAgICAgIENvbmZpcm1h
dGlvbk1vZGVsIG1vZGVsID0gbmV3IENvbmZpcm1hdGlvbk1vZGVsKCk7CiAgICAgICAgc2V0V2lu
ZG93KG1vZGVsKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShDb25zdGFudHNNYW5hZ2VyLmdldElu
c3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuc2h1dGRvd25WaXJ0dWFsTWFjaGluZXNUaXRsZSgpKTsK
ICAgICAgICBtb2RlbC5zZXRIYXNoTmFtZSgic2h1dF9kb3duX3ZpcnR1YWxfbWFjaGluZSIpOyAv
LyROT04tTkxTLTEkCiAgICAgICAgbW9kZWwuc2V0TWVzc2FnZShDb25zdGFudHNNYW5hZ2VyLmdl
dEluc3RhbmNlKCkKICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQogICAgICAgICAgICAg
ICAgLmFyZVlvdVN1cmVZb3VXYW50VG9TaHV0RG93blRoZUZvbGxvd2luZ1ZpcnR1YWxNYWNoaW5l
c01zZygpKTsKICAgICAgICAvLyBtb2RlbC5JdGVtcyA9IFNlbGVjdGVkSXRlbXMuQ2FzdDxWTT4o
KS5TZWxlY3QoYSA9PiBhLnZtX25hbWUpOwogICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGl0ZW1z
ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgZm9yIChPYmplY3QgaXRlbSA6IGdl
dFNlbGVjdGVkSXRlbXMoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZNIGEgPSAoVk0pIGl0ZW07
CiAgICAgICAgICAgIGl0ZW1zLmFkZChhLmdldFZtTmFtZSgpKTsKICAgICAgICB9CiAgICAgICAg
bW9kZWwuc2V0SXRlbXMoaXRlbXMpOwoKICAgICAgICBVSUNvbW1hbmQgdGVtcFZhciA9IG5ldyBV
SUNvbW1hbmQoIk9uU2h1dGRvd24iLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHRlbXBW
YXIuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygp
Lm9rKCkpOwogICAgICAgIHRlbXBWYXIuc2V0SXNEZWZhdWx0KHRydWUpOwogICAgICAgIG1vZGVs
LmdldENvbW1hbmRzKCkuYWRkKHRlbXBWYXIpOwogICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFyMiA9
IG5ldyBVSUNvbW1hbmQoIkNhbmNlbCIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVt
cFZhcjIuc2V0VGl0bGUoQ29uc3RhbnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50
cygpLmNhbmNlbCgpKTsKICAgICAgICB0ZW1wVmFyMi5zZXRJc0NhbmNlbCh0cnVlKTsKICAgICAg
ICBtb2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyMik7CiAgICB9CgogICAgcHJpdmF0ZSB2
b2lkIE9uU2h1dGRvd24oKQogICAgewogICAgICAgIENvbmZpcm1hdGlvbk1vZGVsIG1vZGVsID0g
KENvbmZpcm1hdGlvbk1vZGVsKSBnZXRXaW5kb3coKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldFBy
b2dyZXNzKCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9
CgogICAgICAgIEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4gbGlzdCA9IG5ldyBB
cnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+KCk7CiAgICAgICAgZm9yIChPYmplY3Qg
aXRlbSA6IGdldFNlbGVjdGVkSXRlbXMoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZNIGEgPSAo
Vk0pIGl0ZW07CiAgICAgICAgICAgIGxpc3QuYWRkKG5ldyBTaHV0ZG93blZtUGFyYW1ldGVycyhh
LmdldElkKCksIHRydWUpKTsKICAgICAgICB9CgogICAgICAgIG1vZGVsLlN0YXJ0UHJvZ3Jlc3Mo
bnVsbCk7CgogICAgICAgIEZyb250ZW5kLlJ1bk11bHRpcGxlQWN0aW9uKFZkY0FjdGlvblR5cGUu
U2h1dGRvd25WbSwgbGlzdCwKICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRNdWx0aXBsZUFj
dGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAg
ICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRlbmRNdWx0aXBsZUFjdGlv
bkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybWF0
aW9uTW9kZWwgbG9jYWxNb2RlbCA9IChDb25maXJtYXRpb25Nb2RlbCkgcmVzdWx0LmdldFN0YXRl
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTW9kZWwuU3RvcFByb2dyZXNzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwoKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9LCBtb2RlbCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHN0b3AoKQog
ICAgewogICAgICAgIENvbmZpcm1hdGlvbk1vZGVsIG1vZGVsID0gbmV3IENvbmZpcm1hdGlvbk1v
ZGVsKCk7CiAgICAgICAgc2V0V2luZG93KG1vZGVsKTsKICAgICAgICBtb2RlbC5zZXRUaXRsZShD
b25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuc3RvcFZpcnR1YWxN
YWNoaW5lc1RpdGxlKCkpOwogICAgICAgIG1vZGVsLnNldEhhc2hOYW1lKCJzdG9wX3ZpcnR1YWxf
bWFjaGluZSIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgbW9kZWwuc2V0TWVzc2FnZShDb25zdGFu
dHNNYW5hZ2VyLmdldEluc3RhbmNlKCkKICAgICAgICAgICAgICAgIC5nZXRDb25zdGFudHMoKQog
ICAgICAgICAgICAgICAgLmFyZVlvdVN1cmVZb3VXYW50VG9TdG9wVGhlRm9sbG93aW5nVmlydHVh
bE1hY2hpbmVzTXNnKCkpOwogICAgICAgIC8vIG1vZGVsLkl0ZW1zID0gU2VsZWN0ZWRJdGVtcy5D
YXN0PFZNPigpLlNlbGVjdChhID0+IGEudm1fbmFtZSk7CiAgICAgICAgQXJyYXlMaXN0PFN0cmlu
Zz4gaXRlbXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICBmb3IgKE9iamVjdCBp
dGVtIDogZ2V0U2VsZWN0ZWRJdGVtcygpKQogICAgICAgIHsKICAgICAgICAgICAgVk0gYSA9IChW
TSkgaXRlbTsKICAgICAgICAgICAgaXRlbXMuYWRkKGEuZ2V0Vm1OYW1lKCkpOwogICAgICAgIH0K
ICAgICAgICBtb2RlbC5zZXRJdGVtcyhpdGVtcyk7CgogICAgICAgIFVJQ29tbWFuZCB0ZW1wVmFy
ID0gbmV3IFVJQ29tbWFuZCgiT25TdG9wIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0
ZW1wVmFyLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFu
dHMoKS5vaygpKTsKICAgICAgICB0ZW1wVmFyLnNldElzRGVmYXVsdCh0cnVlKTsKICAgICAgICBt
b2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyKTsKICAgICAgICBVSUNvbW1hbmQgdGVtcFZh
cjIgPSBuZXcgVUlDb21tYW5kKCJDYW5jZWwiLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAogICAgICAg
IHRlbXBWYXIyLnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25z
dGFudHMoKS5jYW5jZWwoKSk7CiAgICAgICAgdGVtcFZhcjIuc2V0SXNDYW5jZWwodHJ1ZSk7CiAg
ICAgICAgbW9kZWwuZ2V0Q29tbWFuZHMoKS5hZGQodGVtcFZhcjIpOwogICAgfQoKICAgIHByaXZh
dGUgdm9pZCBPblN0b3AoKQogICAgewogICAgICAgIENvbmZpcm1hdGlvbk1vZGVsIG1vZGVsID0g
KENvbmZpcm1hdGlvbk1vZGVsKSBnZXRXaW5kb3coKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldFBy
b2dyZXNzKCkgIT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9
CgogICAgICAgIEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4gbGlzdCA9IG5ldyBB
cnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+KCk7CiAgICAgICAgZm9yIChPYmplY3Qg
aXRlbSA6IGdldFNlbGVjdGVkSXRlbXMoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZNIGEgPSAo
Vk0pIGl0ZW07CiAgICAgICAgICAgIGxpc3QuYWRkKG5ldyBTdG9wVm1QYXJhbWV0ZXJzKGEuZ2V0
SWQoKSwgU3RvcFZtVHlwZUVudW0uTk9STUFMKSk7CiAgICAgICAgfQoKICAgICAgICBtb2RlbC5T
dGFydFByb2dyZXNzKG51bGwpOwoKICAgICAgICBGcm9udGVuZC5SdW5NdWx0aXBsZUFjdGlvbihW
ZGNBY3Rpb25UeXBlLlN0b3BWbSwgbGlzdCwKICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRN
dWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgQE92ZXJy
aWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRlbmRNdWx0
aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICAgICAg
Q29uZmlybWF0aW9uTW9kZWwgbG9jYWxNb2RlbCA9IChDb25maXJtYXRpb25Nb2RlbCkgcmVzdWx0
LmdldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTW9kZWwuU3RvcFByb2dy
ZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwoKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9LCBtb2RlbCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IFBhdXNlKCkKICAgIHsKICAgICAgICBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+
IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRlcnNCYXNlPigpOwogICAgICAg
IGZvciAoT2JqZWN0IGl0ZW0gOiBnZXRTZWxlY3RlZEl0ZW1zKCkpCiAgICAgICAgewogICAgICAg
ICAgICBWTSBhID0gKFZNKSBpdGVtOwogICAgICAgICAgICBsaXN0LmFkZChuZXcgSGliZXJuYXRl
Vm1QYXJhbWV0ZXJzKGEuZ2V0SWQoKSkpOwogICAgICAgIH0KCiAgICAgICAgRnJvbnRlbmQuUnVu
TXVsdGlwbGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5IaWJlcm5hdGVWbSwgbGlzdCwKICAgICAgICAg
ICAgICAgIG5ldyBJRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAg
ICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQg
RXhlY3V0ZWQoRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCBudWxsKTsKICAgIH0KCiAgICBw
cml2YXRlIHZvaWQgUnVuKCkKICAgIHsKICAgICAgICBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1l
dGVyc0Jhc2U+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRlcnNCYXNlPigp
OwogICAgICAgIGZvciAoT2JqZWN0IGl0ZW0gOiBnZXRTZWxlY3RlZEl0ZW1zKCkpCiAgICAgICAg
ewogICAgICAgICAgICBWTSBhID0gKFZNKSBpdGVtOwogICAgICAgICAgICAvLyB1c2Ugc3lzcHJl
cCBpZmYgdGhlIHZtIGlzIG5vdCBpbml0aWFsaXplZCBhbmQgdm0gaGFzIFdpbiBPUwogICAgICAg
ICAgICBib29sZWFuIHJlaW5pdGlhbGl6ZSA9ICFhLmlzSW5pdGlhbGl6ZWQoKSAmJiBBc3luY0Rh
dGFQcm92aWRlci5Jc1dpbmRvd3NPc1R5cGUoYS5nZXRWbU9zKCkpOwogICAgICAgICAgICBSdW5W
bVBhcmFtcyB0ZW1wVmFyID0gbmV3IFJ1blZtUGFyYW1zKGEuZ2V0SWQoKSk7CiAgICAgICAgICAg
IHRlbXBWYXIuc2V0UmVpbml0aWFsaXplKHJlaW5pdGlhbGl6ZSk7CiAgICAgICAgICAgIGxpc3Qu
YWRkKHRlbXBWYXIpOwogICAgICAgIH0KCiAgICAgICAgRnJvbnRlbmQuUnVuTXVsdGlwbGVBY3Rp
b24oVmRjQWN0aW9uVHlwZS5SdW5WbSwgbGlzdCwKICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRl
bmRNdWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgQE92
ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRlbmRN
dWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9LCBudWxsKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgT25SZW1v
dmUoKQogICAgewogICAgICAgIENvbmZpcm1hdGlvbk1vZGVsIG1vZGVsID0gKENvbmZpcm1hdGlv
bk1vZGVsKSBnZXRXaW5kb3coKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldFByb2dyZXNzKCkgIT0g
bnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIEFy
cmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8VmRj
QWN0aW9uUGFyYW1ldGVyc0Jhc2U+KCk7CiAgICAgICAgZm9yIChFbnRyeTxHdWlkLCBFbnRpdHlN
b2RlbD4gZW50cnkgOiB2bXNSZW1vdmVNYXAuZW50cnlTZXQoKSkKICAgICAgICB7CiAgICAgICAg
ICAgIGxpc3QuYWRkKG5ldyBSZW1vdmVWbVBhcmFtZXRlcnMoZW50cnkuZ2V0S2V5KCksIGZhbHNl
LCAoQm9vbGVhbikgZW50cnkuZ2V0VmFsdWUoKS5nZXRFbnRpdHkoKSkpOwogICAgICAgIH0KCiAg
ICAgICAgbW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgRnJvbnRlbmQuUnVuTXVs
dGlwbGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5SZW1vdmVWbSwgbGlzdCwKICAgICAgICAgICAgICAg
IG5ldyBJRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAg
ICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0
ZWQoRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgQ29uZmlybWF0aW9uTW9kZWwgbG9jYWxNb2RlbCA9IChDb25maXJtYXRp
b25Nb2RlbCkgcmVzdWx0LmdldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fs
TW9kZWwuU3RvcFByb2dyZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwoK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCBtb2RlbCk7CiAgICB9Cgog
ICAgcHJpdmF0ZSB2b2lkIENoYW5nZUNEKCkKICAgIHsKICAgICAgICBWTSB2bSA9IChWTSkgZ2V0
U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgaWYgKHZtID09IG51bGwpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBBdHRhY2hDZE1vZGVsIG1vZGVsID0gbmV3
IEF0dGFjaENkTW9kZWwoKTsKICAgICAgICBzZXRXaW5kb3cobW9kZWwpOwogICAgICAgIG1vZGVs
LnNldFRpdGxlKENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5j
aGFuZ2VDRFRpdGxlKCkpOwogICAgICAgIG1vZGVsLnNldEhhc2hOYW1lKCJjaGFuZ2VfY2QiKTsg
Ly8kTk9OLU5MUy0xJAoKICAgICAgICBBdHRhY2hDZE1vZGVsIGF0dGFjaENkTW9kZWwgPSAoQXR0
YWNoQ2RNb2RlbCkgZ2V0V2luZG93KCk7CiAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gaW1hZ2Vz
MSA9CiAgICAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PFN0cmluZz4oQXJyYXlzLmFzTGlzdChu
ZXcgU3RyaW5nW10geyAiTm8gQ0RzIiB9KSk7IC8vJE5PTi1OTFMtMSQKICAgICAgICBhdHRhY2hD
ZE1vZGVsLmdldElzb0ltYWdlKCkuc2V0SXRlbXMoaW1hZ2VzMSk7CiAgICAgICAgYXR0YWNoQ2RN
b2RlbC5nZXRJc29JbWFnZSgpLnNldFNlbGVjdGVkSXRlbShMaW5xLkZpcnN0T3JEZWZhdWx0KGlt
YWdlczEpKTsKCiAgICAgICAgQXN5bmNRdWVyeSBnZXRJcnNJbWFnZUxpc3RDYWxsYmFjayA9IG5l
dyBBc3luY1F1ZXJ5KCk7CiAgICAgICAgZ2V0SXJzSW1hZ2VMaXN0Q2FsbGJhY2suc2V0TW9kZWwo
dGhpcyk7CgogICAgICAgIGdldElyc0ltYWdlTGlzdENhbGxiYWNrLmFzeW5jQ2FsbGJhY2sgPSBu
ZXcgSU5ld0FzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAg
ICBwdWJsaWMgdm9pZCBPblN1Y2Nlc3MoT2JqZWN0IG1vZGVsLCBPYmplY3QgcmVzdWx0KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2RlbDIgPSAoVm1M
aXN0TW9kZWwpIG1vZGVsOwogICAgICAgICAgICAgICAgQXR0YWNoQ2RNb2RlbCBfYXR0YWNoQ2RN
b2RlbCA9IChBdHRhY2hDZE1vZGVsKSB2bUxpc3RNb2RlbDIuZ2V0V2luZG93KCk7CiAgICAgICAg
ICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBpbWFnZXMgPSAoQXJyYXlMaXN0PFN0cmluZz4pIHJl
c3VsdDsKICAgICAgICAgICAgICAgIGlmIChpbWFnZXMuc2l6ZSgpID4gMCkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBpbWFnZXMuYWRkKDAsIENvbnNvbGVNb2RlbC5FamVj
dExhYmVsKTsKICAgICAgICAgICAgICAgICAgICBfYXR0YWNoQ2RNb2RlbC5nZXRJc29JbWFnZSgp
LnNldEl0ZW1zKGltYWdlcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
X2F0dGFjaENkTW9kZWwuZ2V0SXNvSW1hZ2UoKS5nZXRJc0NoYW5nYWJsZSgpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIF9hdHRhY2hDZE1vZGVsLmdldElzb0ltYWdlKCku
c2V0U2VsZWN0ZWRJdGVtKExpbnEuRmlyc3RPckRlZmF1bHQoaW1hZ2VzKSk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIEFzeW5jRGF0YVByb3ZpZGVy
LkdldElyc0ltYWdlTGlzdChnZXRJcnNJbWFnZUxpc3RDYWxsYmFjaywgdm0uZ2V0U3RvcmFnZVBv
b2xJZCgpKTsKCiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIgPSBuZXcgVUlDb21tYW5kKCJPbkNo
YW5nZUNEIiwgdGhpcyk7IC8vJE5PTi1OTFMtMSQKICAgICAgICB0ZW1wVmFyLnNldFRpdGxlKENv
bnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5vaygpKTsKICAgICAg
ICB0ZW1wVmFyLnNldElzRGVmYXVsdCh0cnVlKTsKICAgICAgICBtb2RlbC5nZXRDb21tYW5kcygp
LmFkZCh0ZW1wVmFyKTsKICAgICAgICBVSUNvbW1hbmQgdGVtcFZhcjIgPSBuZXcgVUlDb21tYW5k
KCJDYW5jZWwiLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAogICAgICAgIHRlbXBWYXIyLnNldFRpdGxl
KENvbnN0YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5jYW5jZWwoKSk7
CiAgICAgICAgdGVtcFZhcjIuc2V0SXNDYW5jZWwodHJ1ZSk7CiAgICAgICAgbW9kZWwuZ2V0Q29t
bWFuZHMoKS5hZGQodGVtcFZhcjIpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBPbkNoYW5nZUNE
KCkKICAgIHsKICAgICAgICBWTSB2bSA9IChWTSkgZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAg
aWYgKHZtID09IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBDYW5jZWwoKTsKICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgQXR0YWNoQ2RNb2RlbCBtb2RlbCA9IChBdHRh
Y2hDZE1vZGVsKSBnZXRXaW5kb3coKTsKICAgICAgICBpZiAobW9kZWwuZ2V0UHJvZ3Jlc3MoKSAh
PSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAg
U3RyaW5nIGlzb05hbWUgPQogICAgICAgICAgICAgICAgKFN0cmluZ0hlbHBlci5zdHJpbmdzRXF1
YWwobW9kZWwuZ2V0SXNvSW1hZ2UoKS5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpLCBDb25z
b2xlTW9kZWwuRWplY3RMYWJlbCkpID8gIiIgLy8kTk9OLU5MUy0xJAogICAgICAgICAgICAgICAg
ICAgICAgICA6IG1vZGVsLmdldElzb0ltYWdlKCkuZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmco
KTsKCiAgICAgICAgbW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgRnJvbnRlbmQu
UnVuQWN0aW9uKFZkY0FjdGlvblR5cGUuQ2hhbmdlRGlzaywgbmV3IENoYW5nZURpc2tDb21tYW5k
UGFyYW1ldGVycyh2bS5nZXRJZCgpLCBpc29OYW1lKSwKICAgICAgICAgICAgICAgIG5ldyBJRnJv
bnRlbmRBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgIEBPdmVycmlk
ZQogICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4ZWN1dGVkKEZyb250ZW5kQWN0aW9u
QXN5bmNSZXN1bHQgcmVzdWx0KSB7CgogICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hDZE1v
ZGVsIGF0dGFjaENkTW9kZWwgPSAoQXR0YWNoQ2RNb2RlbCkgcmVzdWx0LmdldFN0YXRlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaENkTW9kZWwuU3RvcFByb2dyZXNzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIENhbmNlbCgpOwoKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9LCBtb2RlbCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHByZVNhdmUoKQog
ICAgewogICAgICAgIGZpbmFsIFVuaXRWbU1vZGVsIG1vZGVsID0gKFVuaXRWbU1vZGVsKSBnZXRX
aW5kb3coKTsKICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG1vZGVsLmdldE5h
bWUoKS5nZXRFbnRpdHkoKTsKCiAgICAgICAgaWYgKG1vZGVsLmdldElzTmV3KCkgPT0gZmFsc2Ug
JiYgc2VsZWN0ZWRJdGVtID09IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBDYW5jZWwoKTsK
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgc2V0Y3VycmVudFZtKG1vZGVs
LmdldElzTmV3KCkgPyBuZXcgVk0oKSA6IChWTSkgQ2xvbmVyLmNsb25lKHNlbGVjdGVkSXRlbSkp
OwoKICAgICAgICBpZiAoIW1vZGVsLlZhbGlkYXRlKCkpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgfQoKICAgICAgICBBc3luY0RhdGFQcm92aWRlci5Jc1ZtTmFtZVVuaXF1
ZShuZXcgQXN5bmNRdWVyeSh0aGlzLCBuZXcgSU5ld0FzeW5jQ2FsbGJhY2soKSB7CgogICAgICAg
ICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZvaWQgT25TdWNjZXNzKE9iamVjdCB0
YXJnZXQsIE9iamVjdCByZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCEoQm9vbGVh
bikgcmV0dXJuVmFsdWUgJiYgbmFtZS5jb21wYXJlVG9JZ25vcmVDYXNlKGdldGN1cnJlbnRWbSgp
LmdldFZtTmFtZSgpKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kZWwuZ2V0TmFtZSgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW52YWxpZGl0eVJlYXNvbnMoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmFkZChDb25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNl
KCkuZ2V0Q29uc3RhbnRzKCkubmFtZU11c3RCZVVuaXF1ZUludmFsaWRSZWFzb24oKSk7CiAgICAg
ICAgICAgICAgICAgICAgbW9kZWwuZ2V0TmFtZSgpLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAg
ICAgICAgICAgICAgIG1vZGVsLnNldElzR2VuZXJhbFRhYlZhbGlkKGZhbHNlKTsKICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kZWwuZ2V0TmFtZSgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW52YWxpZGl0eVJlYXNvbnMoKS5jbGVhcigpOwog
ICAgICAgICAgICAgICAgICAgIG1vZGVsLmdldE5hbWUoKS5zZXRJc1ZhbGlkKHRydWUpOwogICAg
ICAgICAgICAgICAgICAgIG1vZGVsLnNldElzR2VuZXJhbFRhYlZhbGlkKHRydWUpOwogICAgICAg
ICAgICAgICAgICAgIG9uU2F2ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgfSksIG5hbWUpOwoKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgb25TYXZlKCkKICAgIHsK
ICAgICAgICBVbml0Vm1Nb2RlbCBtb2RlbCA9IChVbml0Vm1Nb2RlbCkgZ2V0V2luZG93KCk7CiAg
ICAgICAgVk0gc2VsZWN0ZWRJdGVtID0gKFZNKSBnZXRTZWxlY3RlZEl0ZW0oKTsKCiAgICAgICAg
U3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBtb2RlbC5nZXROYW1lKCkuZ2V0RW50aXR5KCk7CgogICAg
ICAgIC8vIFNhdmUgY2hhbmdlcy4KICAgICAgICBWbVRlbXBsYXRlIHRlbXBsYXRlID0gKFZtVGVt
cGxhdGUpIG1vZGVsLmdldFRlbXBsYXRlKCkuZ2V0U2VsZWN0ZWRJdGVtKCk7CgogICAgICAgIGdl
dGN1cnJlbnRWbSgpLnNldFZtVHlwZShtb2RlbC5nZXRWbVR5cGUoKSk7CiAgICAgICAgZ2V0Y3Vy
cmVudFZtKCkuc2V0Vm10R3VpZCh0ZW1wbGF0ZS5nZXRJZCgpKTsKICAgICAgICBnZXRjdXJyZW50
Vm0oKS5zZXRWbU5hbWUobmFtZSk7CiAgICAgICAgaWYgKG1vZGVsLmdldFF1b3RhKCkuZ2V0U2Vs
ZWN0ZWRJdGVtKCkgIT0gbnVsbCkgewogICAgICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRRdW90
YUlkKCgoUXVvdGEpIG1vZGVsLmdldFF1b3RhKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCkp
OwogICAgICAgIH0KICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRWbU9zKChWbU9zVHlwZSkgbW9k
ZWwuZ2V0T1NUeXBlKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpOwogICAgICAgIGdldGN1cnJlbnRWbSgp
LnNldE51bU9mTW9uaXRvcnMoKEludGVnZXIpIG1vZGVsLmdldE51bU9mTW9uaXRvcnMoKS5nZXRT
ZWxlY3RlZEl0ZW0oKSk7CiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0QWxsb3dDb25zb2xlUmVj
b25uZWN0KChCb29sZWFuKSBtb2RlbC5nZXRBbGxvd0NvbnNvbGVSZWNvbm5lY3QoKS5nZXRFbnRp
dHkoKSk7CiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0Vm1EZXNjcmlwdGlvbigoU3RyaW5nKSBt
b2RlbC5nZXREZXNjcmlwdGlvbigpLmdldEVudGl0eSgpKTsKICAgICAgICBnZXRjdXJyZW50Vm0o
KS5zZXRWbURvbWFpbihtb2RlbC5nZXREb21haW4oKS5nZXRJc0F2YWlsYWJsZSgpID8gKFN0cmlu
ZykgbW9kZWwuZ2V0RG9tYWluKCkuZ2V0U2VsZWN0ZWRJdGVtKCkKICAgICAgICAgICAgICAgIDog
IiIpOyAvLyROT04tTkxTLTEkCiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0Vm1NZW1TaXplTWIo
KEludGVnZXIpIG1vZGVsLmdldE1lbVNpemUoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgZ2V0Y3Vy
cmVudFZtKCkuc2V0TWluQWxsb2NhdGVkTWVtKChJbnRlZ2VyKSBtb2RlbC5nZXRNaW5BbGxvY2F0
ZWRNZW1vcnkoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgR3VpZCBuZXdDbHVzdGVySUQgPSAoKFZE
U0dyb3VwKSBtb2RlbC5nZXRDbHVzdGVyKCkuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldElkKCk7CiAg
ICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0VmRzR3JvdXBJZChuZXdDbHVzdGVySUQpOwogICAgICAg
IGdldGN1cnJlbnRWbSgpLnNldFRpbWVab25lKChtb2RlbC5nZXRUaW1lWm9uZSgpLmdldElzQXZh
aWxhYmxlKCkgJiYgbW9kZWwuZ2V0VGltZVpvbmUoKS5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxs
KSA/ICgoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPikgbW9kZWwuZ2V0VGltZVpvbmUoKQogICAg
ICAgICAgICAgICAgLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRLZXkoKQogICAgICAgICAgICAgICAg
OiAiIik7IC8vJE5PTi1OTFMtMSQKICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXROdW1PZlNvY2tl
dHMoKEludGVnZXIpIG1vZGVsLmdldE51bU9mU29ja2V0cygpLmdldFNlbGVjdGVkSXRlbSgpKTsK
ICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRDcHVQZXJTb2NrZXQoSW50ZWdlci5wYXJzZUludCht
b2RlbC5nZXRUb3RhbENQVUNvcmVzKCkuZ2V0RW50aXR5KCkudG9TdHJpbmcoKSkKICAgICAgICAg
ICAgICAgIC8gKEludGVnZXIpIG1vZGVsLmdldE51bU9mU29ja2V0cygpLmdldFNlbGVjdGVkSXRl
bSgpKTsKICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRVc2JQb2xpY3koKFVzYlBvbGljeSkgbW9k
ZWwuZ2V0VXNiUG9saWN5KCkuZ2V0U2VsZWN0ZWRJdGVtKCkpOwogICAgICAgIGdldGN1cnJlbnRW
bSgpLnNldEF1dG9TdXNwZW5kKGZhbHNlKTsKICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRTdGF0
ZWxlc3MoKEJvb2xlYW4pIG1vZGVsLmdldElzU3RhdGVsZXNzKCkuZ2V0RW50aXR5KCkpOwogICAg
ICAgIGdldGN1cnJlbnRWbSgpLnNldFNtYXJ0Y2FyZEVuYWJsZWQoKEJvb2xlYW4pIG1vZGVsLmdl
dElzU21hcnRjYXJkRW5hYmxlZCgpLmdldEVudGl0eSgpKTsKICAgICAgICBnZXRjdXJyZW50Vm0o
KS5zZXREZWxldGVQcm90ZWN0ZWQoKEJvb2xlYW4pIG1vZGVsLmdldElzRGVsZXRlUHJvdGVjdGVk
KCkuZ2V0RW50aXR5KCkpOwogICAgICAgIGdldGN1cnJlbnRWbSgpLnNldERlZmF1bHRCb290U2Vx
dWVuY2UobW9kZWwuZ2V0Qm9vdFNlcXVlbmNlKCkpOwogICAgICAgIGdldGN1cnJlbnRWbSgpLnNl
dElzb1BhdGgobW9kZWwuZ2V0Q2RJbWFnZSgpLmdldElzQ2hhbmdhYmxlKCkgPyAoU3RyaW5nKSBt
b2RlbC5nZXRDZEltYWdlKCkuZ2V0U2VsZWN0ZWRJdGVtKCkKICAgICAgICAgICAgICAgIDogIiIp
OyAvLyROT04tTkxTLTEkCiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0QXV0b1N0YXJ0dXAoKEJv
b2xlYW4pIG1vZGVsLmdldElzSGlnaGx5QXZhaWxhYmxlKCkuZ2V0RW50aXR5KCkpOwoKICAgICAg
ICBnZXRjdXJyZW50Vm0oKS5zZXRJbml0cmRVcmwoKFN0cmluZykgbW9kZWwuZ2V0SW5pdHJkX3Bh
dGgoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0S2VybmVsVXJsKChT
dHJpbmcpIG1vZGVsLmdldEtlcm5lbF9wYXRoKCkuZ2V0RW50aXR5KCkpOwogICAgICAgIGdldGN1
cnJlbnRWbSgpLnNldEtlcm5lbFBhcmFtcygoU3RyaW5nKSBtb2RlbC5nZXRLZXJuZWxfcGFyYW1l
dGVycygpLmdldEVudGl0eSgpKTsKCiAgICAgICAgZ2V0Y3VycmVudFZtKCkuc2V0Q3VzdG9tUHJv
cGVydGllcyhtb2RlbC5nZXRDdXN0b21Qcm9wZXJ0eVNoZWV0KCkuZ2V0RW50aXR5KCkpOwoKICAg
ICAgICBFbnRpdHlNb2RlbCBkaXNwbGF5UHJvdG9jb2xTZWxlY3RlZEl0ZW0gPSAoRW50aXR5TW9k
ZWwpIG1vZGVsLmdldERpc3BsYXlQcm90b2NvbCgpLmdldFNlbGVjdGVkSXRlbSgpOwogICAgICAg
IGdldGN1cnJlbnRWbSgpLnNldERlZmF1bHREaXNwbGF5VHlwZSgoRGlzcGxheVR5cGUpIGRpc3Bs
YXlQcm90b2NvbFNlbGVjdGVkSXRlbS5nZXRFbnRpdHkoKSk7CgogICAgICAgIEVudGl0eU1vZGVs
IHByaW9yaXR5U2VsZWN0ZWRJdGVtID0gKEVudGl0eU1vZGVsKSBtb2RlbC5nZXRQcmlvcml0eSgp
LmdldFNlbGVjdGVkSXRlbSgpOwogICAgICAgIGdldGN1cnJlbnRWbSgpLnNldFByaW9yaXR5KChJ
bnRlZ2VyKSBwcmlvcml0eVNlbGVjdGVkSXRlbS5nZXRFbnRpdHkoKSk7CgogICAgICAgIGdldGN1
cnJlbnRWbSgpLnNldENwdVBpbm5pbmcoKFN0cmluZykgbW9kZWwuZ2V0Q3B1UGlubmluZygpCiAg
ICAgICAgICAgICAgICAuZ2V0RW50aXR5KCkpOwoKICAgICAgICBWRFMgZGVmYXVsdEhvc3QgPSAo
VkRTKSBtb2RlbC5nZXREZWZhdWx0SG9zdCgpLmdldFNlbGVjdGVkSXRlbSgpOwogICAgICAgIGlm
ICgoQm9vbGVhbikgbW9kZWwuZ2V0SXNBdXRvQXNzaWduKCkuZ2V0RW50aXR5KCkpCiAgICAgICAg
ewogICAgICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXREZWRpY2F0ZWRWbUZvclZkcyhudWxsKTsK
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgZ2V0Y3VycmVudFZt
KCkuc2V0RGVkaWNhdGVkVm1Gb3JWZHMoZGVmYXVsdEhvc3QuZ2V0SWQoKSk7CiAgICAgICAgfQoK
ICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRNaWdyYXRpb25TdXBwb3J0KE1pZ3JhdGlvblN1cHBv
cnQuTUlHUkFUQUJMRSk7CiAgICAgICAgaWYgKChCb29sZWFuKSBtb2RlbC5nZXRSdW5WTU9uU3Bl
Y2lmaWNIb3N0KCkuZ2V0RW50aXR5KCkpCiAgICAgICAgewogICAgICAgICAgICBnZXRjdXJyZW50
Vm0oKS5zZXRNaWdyYXRpb25TdXBwb3J0KE1pZ3JhdGlvblN1cHBvcnQuUElOTkVEX1RPX0hPU1Qp
OwogICAgICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRVc2VIb3N0Q3B1RmxhZ3MoKEJvb2xlYW4p
IG1vZGVsLmdldEhvc3RDcHUoKS5nZXRFbnRpdHkoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
aWYgKChCb29sZWFuKSBtb2RlbC5nZXREb250TWlncmF0ZVZNKCkuZ2V0RW50aXR5KCkpCiAgICAg
ICAgewogICAgICAgICAgICBnZXRjdXJyZW50Vm0oKS5zZXRNaWdyYXRpb25TdXBwb3J0KE1pZ3Jh
dGlvblN1cHBvcnQuSU1QTElDSVRMWV9OT05fTUlHUkFUQUJMRSk7CiAgICAgICAgICAgIGdldGN1
cnJlbnRWbSgpLnNldFVzZUhvc3RDcHVGbGFncygoQm9vbGVhbikgbW9kZWwuZ2V0SG9zdENwdSgp
LmdldEVudGl0eSgpKTsKICAgICAgICB9CgogICAgICAgIGlmICgoQm9vbGVhbikgbW9kZWwuZ2V0
UnVuVk1PblRydXN0ZWRIb3N0KCkuZ2V0RW50aXR5KCkpCiAgICAgICAgewogICAgICAgICAgICBn
ZXRjdXJyZW50Vm0oKS5zZXRUcnVzdGVkSG9zdEZsYWcoKEJvb2xlYW4pIG1vZGVsLmdldFJ1blZN
T25UcnVzdGVkSG9zdCgpLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgZ2V0Y3VycmVudFZtKCku
c2V0RGVkaWNhdGVkVm1Gb3JWZHMobnVsbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAobW9kZWwu
Z2V0SXNOZXcoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChnZXRjdXJyZW50Vm0oKS5nZXRW
bXRHdWlkKCkuZXF1YWxzKE5HdWlkLkVtcHR5KSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgaWYgKG1vZGVsLmdldFByb2dyZXNzKCkgIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgbW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgICAgICAgICBGcm9udGVuZC5S
dW5BY3Rpb24oVmRjQWN0aW9uVHlwZS5BZGRWbUZyb21TY3JhdGNoLCBuZXcgQWRkVm1Gcm9tU2Ny
YXRjaFBhcmFtZXRlcnMoZ2V0Y3VycmVudFZtKCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBBcnJheUxpc3Q8RGlza0ltYWdlPigpLAogICAgICAgICAgICAgICAgICAgICAgICBOR3VpZC5F
bXB0eSksCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRBY3Rpb25Bc3luY0Nh
bGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBFeGVjdXRlZChGcm9udGVuZEFjdGlvbkFz
eW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWbUxp
c3RNb2RlbCB2bUxpc3RNb2RlbCA9IChWbUxpc3RNb2RlbCkgcmVzdWx0LmdldFN0YXRlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1MaXN0TW9kZWwuZ2V0V2luZG93KCkuU3Rv
cFByb2dyZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmRjUmV0dXJuVmFs
dWVCYXNlIHJldHVyblZhbHVlQmFzZSA9IHJlc3VsdC5nZXRSZXR1cm5WYWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZUJhc2UgIT0gbnVsbCAmJiBy
ZXR1cm5WYWx1ZUJhc2UuZ2V0U3VjY2VlZGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbC5D
YW5jZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1MaXN0TW9kZWwu
c2V0R3VpZGVDb250ZXh0KHJldHVyblZhbHVlQmFzZS5nZXRBY3Rpb25SZXR1cm5WYWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1MaXN0TW9kZWwuVXBkYXRlQWN0
aW9uQXZhaWxhYmlsaXR5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZt
TGlzdE1vZGVsLmdldEd1aWRlQ29tbWFuZCgpLkV4ZWN1dGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChtb2RlbC5nZXRQcm9ncmVzcygpICE9IG51
bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgoQm9vbGVhbikgbW9kZWwuZ2V0UHJvdmlz
aW9uaW5nKCkuZ2V0RW50aXR5KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgbW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgICAgICAgICAgICAgQXN5bmNR
dWVyeSBfYXN5bmNRdWVyeSA9IG5ldyBBc3luY1F1ZXJ5KCk7CiAgICAgICAgICAgICAgICAgICAg
X2FzeW5jUXVlcnkuc2V0TW9kZWwodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgX2FzeW5jUXVl
cnkuYXN5bmNDYWxsYmFjayA9IG5ldyBJTmV3QXN5bmNDYWxsYmFjaygpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lk
IE9uU3VjY2VzcyhPYmplY3QgbW9kZWwxLCBPYmplY3QgcmVzdWx0MSkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0
TW9kZWwgPSAoVm1MaXN0TW9kZWwpIG1vZGVsMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFycmF5TGlzdDxEaXNrSW1hZ2U+IHRlbXBsYXRlRGlza3MgPSAoQXJyYXlMaXN0PERpc2tJbWFn
ZT4pIHJlc3VsdDE7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdFZtTW9kZWwgdW5p
dFZtTW9kZWwgPSAoVW5pdFZtTW9kZWwpIHZtTGlzdE1vZGVsLmdldFdpbmRvdygpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhhc2hNYXA8R3VpZCwgRGlza0ltYWdlPiBpbWFnZVRvRGVz
dGluYXRpb25Eb21haW5NYXAgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bml0Vm1Nb2RlbC5nZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpLmdldEltYWdlVG9EZXN0aW5hdGlv
bkRvbWFpbk1hcCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxzdG9y
YWdlX2RvbWFpbnM+IGFjdGl2ZVN0b3JhZ2VEb21haW5zID0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5pdFZtTW9kZWwuZ2V0RGlza3NBbGxvY2F0aW9uTW9kZWwoKS5nZXRB
Y3RpdmVTdG9yYWdlRG9tYWlucygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hN
YXA8R3VpZCwgRGlza0ltYWdlPiBkaWN0ID0gdW5pdFZtTW9kZWwuZ2V0RGlza3NBbGxvY2F0aW9u
TW9kZWwoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW1hZ2VUb0Rl
c3RpbmF0aW9uRG9tYWluTWFwKChCb29sZWFuKSB1bml0Vm1Nb2RlbC5nZXREaXNrc0FsbG9jYXRp
b25Nb2RlbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdl
dElzU2luZ2xlU3RvcmFnZURvbWFpbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoRGlza0ltYWdlIHRlbXBsYXRlRGlzayA6IHRlbXBsYXRlRGlza3MpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlza01vZGVs
IGRpc2sgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRGlza01v
ZGVsIGEgOiB1bml0Vm1Nb2RlbC5nZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpLmdldERpc2tzKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGVtcGxhdGVEaXNrLmdldElkKCkuZXF1YWxzKGEuZ2V0RGlzaygp
LmdldElkKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrID0gYTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlX2RvbWFpbnMgc3RvcmFnZURvbWFpbiA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5xLmdldFN0b3JhZ2VCeUlk
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVRv
RGVzdGluYXRpb25Eb21haW5NYXAuZ2V0KHRlbXBsYXRlRGlzay5nZXRJZCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRzdG9yYWdl
X2lkcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmdldCgwKSwgYWN0aXZlU3RvcmFnZURvbWFpbnMpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGlzayAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpY3QuZ2V0KHRlbXBsYXRlRGlzay5nZXRJZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXR2b2x1bWVfdHlwZSgoVm9sdW1lVHlw
ZSkgZGlzay5nZXRWb2x1bWVUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5nZXRTZWxlY3RlZEl0ZW0oKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpY3QuZ2V0KHRlbXBsYXRlRGlzay5nZXRJZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXR2b2x1bWVfZm9ybWF0KEFz
eW5jRGF0YVByb3ZpZGVyLkdldERpc2tWb2x1bWVGb3JtYXQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVm9sdW1lVHlwZSkgZGlzay5nZXRWb2x1
bWVUeXBlKCkuZ2V0U2VsZWN0ZWRJdGVtKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlRG9tYWluLmdldHN0b3JhZ2VfdHlwZSgpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNrLmdldFF1b3RhKCku
Z2V0U2VsZWN0ZWRJdGVtKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGljdC5nZXQodGVtcGxhdGVEaXNrLmdldElkKCkpLnNldFF1b3RhSWQoKChR
dW90YSkgZGlzay5nZXRRdW90YSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0SWQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmFnZV9kb21haW5zIHN0b3JhZ2VEb21haW4gPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RvcmFnZV9kb21haW5zKSB1bml0Vm1Nb2RlbC5nZXREaXNrc0FsbG9j
YXRpb25Nb2RlbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmdldFN0b3JhZ2VEb21haW4oKS5nZXRTZWxlY3RlZEl0ZW0oKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBZGRWbUZyb21UZW1wbGF0ZVBhcmFtZXRlcnMgcGFyYW0gPQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWRkVm1Gcm9tVGVtcGxhdGVQYXJhbWV0ZXJz
KHZtTGlzdE1vZGVsLmdldGN1cnJlbnRWbSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpY3QsIHN0b3JhZ2VEb21haW4uZ2V0SWQoKSk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFZkY0FjdGlvblBhcmFtZXRlcnNCYXNlPiBwYXJh
bWV0ZXJzID0gbmV3IEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJzQmFzZT4oKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKHBhcmFtKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcm9udGVuZC5SdW5NdWx0aXBsZUFjdGlvbihWZGNBY3Rpb25UeXBl
LkFkZFZtRnJvbVRlbXBsYXRlLCBwYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgSUZyb250ZW5kTXVsdGlwbGVBY3Rpb25Bc3luY0NhbGxiYWNrKCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBFeGVjdXRlZChGcm9u
dGVuZE11bHRpcGxlQWN0aW9uQXN5bmNSZXN1bHQgcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0TW9kZWwxID0gKFZt
TGlzdE1vZGVsKSByZXN1bHQuZ2V0U3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbDEuZ2V0V2luZG93KCkuU3RvcFByb2dyZXNzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1MaXN0TW9kZWwx
LkNhbmNlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bUxpc3RNb2RlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIEFzeW5jRGF0YVByb3ZpZGVy
LkdldFRlbXBsYXRlRGlza0xpc3QoX2FzeW5jUXVlcnksIHRlbXBsYXRlLmdldElkKCkpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgIGlmIChtb2RlbC5nZXRQcm9ncmVzcygpICE9IG51bGwpCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBtb2RlbC5TdGFydFByb2dyZXNzKG51bGwp
OwoKICAgICAgICAgICAgICAgICAgICBWbU1hbmFnZW1lbnRQYXJhbWV0ZXJzQmFzZSBwYXJhbXMg
PSBuZXcgVm1NYW5hZ2VtZW50UGFyYW1ldGVyc0Jhc2UoZ2V0Y3VycmVudFZtKCkpOwogICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5zZXREaXNrSW5mb0Rlc3RpbmF0aW9uTWFwKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kZWwuZ2V0RGlza3NBbGxvY2F0aW9uTW9kZWwoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW1hZ2VUb0Rlc3RpbmF0aW9uRG9tYWlu
TWFwKChCb29sZWFuKSBtb2RlbC5nZXREaXNrc0FsbG9jYXRpb25Nb2RlbCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldElzU2luZ2xlU3RvcmFnZURvbWFp
bigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEVudGl0
eSgpKSk7CgogICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxWZGNBY3Rpb25QYXJhbWV0ZXJz
QmFzZT4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+
KCk7CiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQocGFyYW1zKTsKCiAgICAgICAg
ICAgICAgICAgICAgRnJvbnRlbmQuUnVuTXVsdGlwbGVBY3Rpb24oVmRjQWN0aW9uVHlwZS5BZGRW
bSwgcGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRN
dWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZv
aWQgRXhlY3V0ZWQoRnJvbnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWbUxpc3RNb2RlbCB2bUxpc3RNb2Rl
bDEgPSAoVm1MaXN0TW9kZWwpIHJlc3VsdC5nZXRTdGF0ZSgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbDEuZ2V0V2luZG93KCkuU3RvcFByb2dyZXNzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtTGlzdE1vZGVsMS5DYW5jZWwo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSAvLyBVcGRhdGUgZXhp
c3RpbmcgVk0gLT4gY29uc2lzdHMgb2YgZWRpdGluZyBWTSBjbHVzdGVyLCBhbmQgaWYgc3VjY2Vl
ZHMgLSBlZGl0aW5nIFZNOgogICAgICAgIHsKICAgICAgICAgICAgaWYgKG1vZGVsLmdldFByb2dy
ZXNzKCkgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICAvLyBydW5FZGl0Vk06IHNob3VsZCBiZSB0cnVlIGlmIENs
dXN0ZXIgaGFzbid0IGNoYW5nZWQgb3IgaWYKICAgICAgICAgICAgLy8gQ2x1c3RlciBoYXMgY2hh
bmdlZCBhbmQgRWRpdGluZyBpdCBpbiB0aGUgQmFja2VuZCBoYXMgc3VjY2VlZGVkOgogICAgICAg
ICAgICBHdWlkIG9sZENsdXN0ZXJJRCA9IHNlbGVjdGVkSXRlbS5nZXRWZHNHcm91cElkKCk7CiAg
ICAgICAgICAgIGlmIChvbGRDbHVzdGVySUQuZXF1YWxzKG5ld0NsdXN0ZXJJRCkgPT0gZmFsc2Up
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENoYW5nZVZNQ2x1c3RlclBhcmFtZXRlcnMg
cGFyYW1ldGVycyA9CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDaGFuZ2VWTUNsdXN0ZXJQ
YXJhbWV0ZXJzKG5ld0NsdXN0ZXJJRCwgZ2V0Y3VycmVudFZtKCkuZ2V0SWQoKSk7CgogICAgICAg
ICAgICAgICAgbW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgICAgICAgICBGcm9u
dGVuZC5SdW5BY3Rpb24oVmRjQWN0aW9uVHlwZS5DaGFuZ2VWTUNsdXN0ZXIsIHBhcmFtZXRlcnMs
CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRBY3Rpb25Bc3luY0NhbGxiYWNr
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBFeGVjdXRlZChGcm9udGVuZEFjdGlvbkFzeW5jUmVz
dWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWbUxpc3RNb2Rl
bCB2bUxpc3RNb2RlbCA9IChWbUxpc3RNb2RlbCkgcmVzdWx0LmdldFN0YXRlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmRjUmV0dXJuVmFsdWVCYXNlIHJldHVyblZhbHVlQmFz
ZSA9IHJlc3VsdC5nZXRSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXR1cm5WYWx1ZUJhc2UgIT0gbnVsbCAmJiByZXR1cm5WYWx1ZUJhc2UuZ2V0U3Vj
Y2VlZGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcm9udGVuZC5SdW5BY3Rpb24oVmRjQWN0aW9uVHlwZS5V
cGRhdGVWbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
Vm1NYW5hZ2VtZW50UGFyYW1ldGVyc0Jhc2Uodm1MaXN0TW9kZWwuZ2V0Y3VycmVudFZtKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJRnJvbnRlbmRB
Y3Rpb25Bc3luY0NhbGxiYWNrKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRlbmRBY3Rpb25Bc3luY1Jl
c3VsdCByZXN1bHQxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVm1MaXN0TW9kZWwgdm1MaXN0TW9kZWwxID0gKFZtTGlzdE1vZGVsKSByZXN1
bHQxLmdldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bUxpc3RNb2RlbDEuZ2V0V2luZG93KCkuU3RvcFByb2dyZXNzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZGNSZXR1cm5W
YWx1ZUJhc2UgcmV0VmFsID0gcmVzdWx0MS5nZXRSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc1N1Y2NlZWRl
ZCA9IHJldFZhbC5nZXRTdWNjZWVkZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwgIT0gbnVsbCAmJiBpc1N1Y2NlZWRlZCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxp
c3RNb2RlbDEuQ2FuY2VsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtTGlzdE1vZGVsLmdldFdpbmRvdygpLlN0b3BQ
cm9ncmVzcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
aWYgKG1vZGVsLmdldFByb2dyZXNzKCkgIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
bW9kZWwuU3RhcnRQcm9ncmVzcyhudWxsKTsKCiAgICAgICAgICAgICAgICBGcm9udGVuZC5SdW5B
Y3Rpb24oVmRjQWN0aW9uVHlwZS5VcGRhdGVWbSwgbmV3IFZtTWFuYWdlbWVudFBhcmFtZXRlcnNC
YXNlKGdldGN1cnJlbnRWbSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElGcm9udGVu
ZEFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3Zl
cnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIEV4ZWN1dGVkKEZy
b250ZW5kQWN0aW9uQXN5bmNSZXN1bHQgcmVzdWx0KSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZtTGlzdE1vZGVsIHZtTGlzdE1vZGVsID0gKFZtTGlzdE1vZGVsKSByZXN1bHQu
Z2V0U3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bUxpc3RNb2RlbC5n
ZXRXaW5kb3coKS5TdG9wUHJvZ3Jlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZGNSZXR1cm5WYWx1ZUJhc2UgcmV0dXJuVmFsdWVCYXNlID0gcmVzdWx0LmdldFJldHVyblZh
bHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmFz
ZSAhPSBudWxsICYmIHJldHVyblZhbHVlQmFzZS5nZXRTdWNjZWVkZWQoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtTGlzdE1vZGVsLkNhbmNlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0s
IHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBS
ZXRyaWV2ZUlzb0ltYWdlcygpCiAgICB7CiAgICAgICAgT2JqZWN0IHRlbXBWYXIgPSBnZXRTZWxl
Y3RlZEl0ZW0oKTsKICAgICAgICBWTSB2bSA9IChWTSkgKCh0ZW1wVmFyIGluc3RhbmNlb2YgVk0p
ID8gdGVtcFZhciA6IG51bGwpOwogICAgICAgIGlmICh2bSA9PSBudWxsKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgR3VpZCBzdG9yYWdlUG9vbElkID0g
dm0uZ2V0U3RvcmFnZVBvb2xJZCgpOwoKICAgICAgICBnZXRJc29JbWFnZXMoKS5jbGVhcigpOwoK
ICAgICAgICBDaGFuZ2VDRE1vZGVsIHRlbXBWYXIyID0gbmV3IENoYW5nZUNETW9kZWwoKTsKICAg
ICAgICB0ZW1wVmFyMi5zZXRUaXRsZShDb25zb2xlTW9kZWwuRWplY3RMYWJlbCk7CiAgICAgICAg
Q2hhbmdlQ0RNb2RlbCBlamVjdE1vZGVsID0gdGVtcFZhcjI7CiAgICAgICAgZWplY3RNb2RlbC5n
ZXRFeGVjdXRlZEV2ZW50KCkuYWRkTGlzdGVuZXIodGhpcyk7CiAgICAgICAgZ2V0SXNvSW1hZ2Vz
KCkuYWRkKGVqZWN0TW9kZWwpOwoKICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3
IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgQ2hhbmdlQ0RNb2RlbCB0ZW1wVmFyNCA9IG5l
dyBDaGFuZ2VDRE1vZGVsKCk7CiAgICAgICAgdGVtcFZhcjQuc2V0VGl0bGUoQ29uc3RhbnRzTWFu
YWdlci5nZXRJbnN0YW5jZSgpLmdldENvbnN0YW50cygpLm5vQ0RzVGl0bGUoKSk7CiAgICAgICAg
Z2V0SXNvSW1hZ2VzKCkuYWRkKHRlbXBWYXI0KTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgY2hh
bmdlQ0QoT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGUpCiAgICB7CiAgICAgICAgQ2hhbmdlQ0RN
b2RlbCBtb2RlbCA9IChDaGFuZ2VDRE1vZGVsKSBzZW5kZXI7CgogICAgICAgIC8vIFRPRE86IFBh
dGNoIQogICAgICAgIFN0cmluZyBpc29OYW1lID0gbW9kZWwuZ2V0VGl0bGUoKTsKICAgICAgICBp
ZiAoU3RyaW5nSGVscGVyLnN0cmluZ3NFcXVhbChpc29OYW1lLCAiTm8gQ0RzIikpIC8vJE5PTi1O
TFMtMSQKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIE9i
amVjdCB0ZW1wVmFyID0gZ2V0U2VsZWN0ZWRJdGVtKCk7CiAgICAgICAgVk0gdm0gPSAoVk0pICgo
dGVtcFZhciBpbnN0YW5jZW9mIFZNKSA/IHRlbXBWYXIgOiBudWxsKTsKICAgICAgICBpZiAodm0g
PT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAg
IEZyb250ZW5kLlJ1bk11bHRpcGxlQWN0aW9uKFZkY0FjdGlvblR5cGUuQ2hhbmdlRGlzaywKICAg
ICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8VmRjQWN0aW9uUGFyYW1ldGVyc0Jhc2U+KEFycmF5
cy5hc0xpc3QobmV3IFZkY0FjdGlvblBhcmFtZXRlcnNCYXNlW10geyBuZXcgQ2hhbmdlRGlza0Nv
bW1hbmRQYXJhbWV0ZXJzKHZtLmdldElkKCksCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z0hlbHBlci5zdHJpbmdzRXF1YWwoaXNvTmFtZSwgQ29uc29sZU1vZGVsLkVqZWN0TGFiZWwpID8g
IiIgOiBpc29OYW1lKSB9KSksIC8vJE5PTi1OTFMtMSQKICAgICAgICAgICAgICAgIG5ldyBJRnJv
bnRlbmRNdWx0aXBsZUFjdGlvbkFzeW5jQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICAgICAgICAg
QE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgRXhlY3V0ZWQoRnJvbnRl
bmRNdWx0aXBsZUFjdGlvbkFzeW5jUmVzdWx0IHJlc3VsdCkgewoKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbnVsbCk7CiAgICB9CgogICAg
cHVibGljIHZvaWQgQ2FuY2VsKCkKICAgIHsKICAgICAgICBGcm9udGVuZC5VbnN1YnNjcmliZSgp
OwoKICAgICAgICBDYW5jZWxDb25maXJtYXRpb24oKTsKCiAgICAgICAgc2V0R3VpZGVDb250ZXh0
KG51bGwpOwogICAgICAgIHNldFdpbmRvdyhudWxsKTsKCiAgICAgICAgVXBkYXRlQWN0aW9uQXZh
aWxhYmlsaXR5KCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIENhbmNlbENvbmZpcm1hdGlvbigp
CiAgICB7CiAgICAgICAgc2V0Q29uZmlybVdpbmRvdyhudWxsKTsKICAgIH0KCiAgICBwdWJsaWMg
dm9pZCBDYW5jZWxFcnJvcigpCiAgICB7CiAgICAgICAgc2V0RXJyb3JXaW5kb3cobnVsbCk7CiAg
ICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgdm9pZCBPblNlbGVjdGVkSXRlbUNoYW5n
ZWQoKQogICAgewogICAgICAgIHN1cGVyLk9uU2VsZWN0ZWRJdGVtQ2hhbmdlZCgpOwoKICAgICAg
ICBVcGRhdGVBY3Rpb25BdmFpbGFiaWxpdHkoKTsKICAgICAgICBVcGRhdGVDb25zb2xlTW9kZWxz
KCk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgdm9pZCBTZWxlY3RlZEl0ZW1z
Q2hhbmdlZCgpCiAgICB7CiAgICAgICAgc3VwZXIuU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKTsKCiAg
ICAgICAgVXBkYXRlQWN0aW9uQXZhaWxhYmlsaXR5KCk7CiAgICAgICAgVXBkYXRlQ29uc29sZU1v
ZGVscygpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHJvdGVjdGVkIHZvaWQgU2VsZWN0ZWRJ
dGVtUHJvcGVydHlDaGFuZ2VkKE9iamVjdCBzZW5kZXIsIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJn
cyBlKQogICAgewogICAgICAgIHN1cGVyLlNlbGVjdGVkSXRlbVByb3BlcnR5Q2hhbmdlZChzZW5k
ZXIsIGUpOwoKICAgICAgICBpZiAoZS5Qcm9wZXJ0eU5hbWUuZXF1YWxzKCJzdGF0dXMiKSkgLy8k
Tk9OLU5MUy0xJAogICAgICAgIHsKICAgICAgICAgICAgVXBkYXRlQWN0aW9uQXZhaWxhYmlsaXR5
KCk7CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChlLlByb3BlcnR5TmFtZS5lcXVhbHMoImRp
c3BsYXlfdHlwZSIpKSAvLyROT04tTkxTLTEkCiAgICAgICAgewogICAgICAgICAgICBVcGRhdGVD
b25zb2xlTW9kZWxzKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBVcGRhdGVB
Y3Rpb25BdmFpbGFiaWxpdHkoKQogICAgewogICAgICAgIExpc3QgaXRlbXMgPQogICAgICAgICAg
ICAgICAgZ2V0U2VsZWN0ZWRJdGVtcygpICE9IG51bGwgJiYgZ2V0U2VsZWN0ZWRJdGVtKCkgIT0g
bnVsbCA/IGdldFNlbGVjdGVkSXRlbXMoKQogICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBB
cnJheUxpc3QoKTsKCiAgICAgICAgZ2V0RWRpdENvbW1hbmQoKS5zZXRJc0V4ZWN1dGlvbkFsbG93
ZWQoaXNFZGl0Q29tbWFuZEV4ZWN1dGlvbkFsbG93ZWQoaXRlbXMpKTsKICAgICAgICBnZXRSZW1v
dmVDb21tYW5kKCkuc2V0SXNFeGVjdXRpb25BbGxvd2VkKGl0ZW1zLnNpemUoKSA+IDAKICAgICAg
ICAgICAgICAgICYmIFZkY0FjdGlvblV0aWxzLkNhbkV4ZWN1dGUoaXRlbXMsIFZNLmNsYXNzLCBW
ZGNBY3Rpb25UeXBlLlJlbW92ZVZtKSk7CiAgICAgICAgZ2V0UnVuQ29tbWFuZCgpLnNldElzRXhl
Y3V0aW9uQWxsb3dlZChpdGVtcy5zaXplKCkgPiAwCiAgICAgICAgICAgICAgICAmJiBWZGNBY3Rp
b25VdGlscy5DYW5FeGVjdXRlKGl0ZW1zLCBWTS5jbGFzcywgVmRjQWN0aW9uVHlwZS5SdW5WbSkp
OwogICAgICAgIGdldFBhdXNlQ29tbWFuZCgpLnNldElzRXhlY3V0aW9uQWxsb3dlZChpdGVtcy5z
aXplKCkgPiAwCiAgICAgICAgICAgICAgICAmJiBWZGNBY3Rpb25VdGlscy5DYW5FeGVjdXRlKGl0
ZW1zLCBWTS5jbGFzcywgVmRjQWN0aW9uVHlwZS5IaWJlcm5hdGVWbSkpOwogICAgICAgIGdldFNo
dXRkb3duQ29tbWFuZCgpLnNldElzRXhlY3V0aW9uQWxsb3dlZChpdGVtcy5zaXplKCkgPiAwCiAg
ICAgICAgICAgICAgICAmJiBWZGNBY3Rpb25VdGlscy5DYW5FeGVjdXRlKGl0ZW1zLCBWTS5jbGFz
cywgVmRjQWN0aW9uVHlwZS5TaHV0ZG93blZtKSk7CiAgICAgICAgZ2V0U3RvcENvbW1hbmQoKS5z
ZXRJc0V4ZWN1dGlvbkFsbG93ZWQoaXRlbXMuc2l6ZSgpID4gMAogICAgICAgICAgICAgICAgJiYg
VmRjQWN0aW9uVXRpbHMuQ2FuRXhlY3V0ZShpdGVtcywgVk0uY2xhc3MsIFZkY0FjdGlvblR5cGUu
U3RvcFZtKSk7CiAgICAgICAgZ2V0TWlncmF0ZUNvbW1hbmQoKS5zZXRJc0V4ZWN1dGlvbkFsbG93
ZWQoaXRlbXMuc2l6ZSgpID4gMAogICAgICAgICAgICAgICAgJiYgVmRjQWN0aW9uVXRpbHMuQ2Fu
RXhlY3V0ZShpdGVtcywgVk0uY2xhc3MsIFZkY0FjdGlvblR5cGUuTWlncmF0ZVZtKSk7CiAgICAg
ICAgZ2V0Q2FuY2VsTWlncmF0ZUNvbW1hbmQoKS5zZXRJc0V4ZWN1dGlvbkFsbG93ZWQoaXRlbXMu
c2l6ZSgpID4gMAogICAgICAgICAgICAgICAgJiYgVmRjQWN0aW9uVXRpbHMuQ2FuRXhlY3V0ZShp
dGVtcywgVk0uY2xhc3MsIFZkY0FjdGlvblR5cGUuQ2FuY2VsTWlncmF0ZVZtKSk7CiAgICAgICAg
Z2V0TmV3VGVtcGxhdGVDb21tYW5kKCkuc2V0SXNFeGVjdXRpb25BbGxvd2VkKGl0ZW1zLnNpemUo
KSA9PSAxCiAgICAgICAgICAgICAgICAmJiBWZGNBY3Rpb25VdGlscy5DYW5FeGVjdXRlKGl0ZW1z
LCBWTS5jbGFzcywgVmRjQWN0aW9uVHlwZS5BZGRWbVRlbXBsYXRlKSk7CiAgICAgICAgZ2V0UnVu
T25jZUNvbW1hbmQoKS5zZXRJc0V4ZWN1dGlvbkFsbG93ZWQoaXRlbXMuc2l6ZSgpID09IDEKICAg
ICAgICAgICAgICAgICYmIFZkY0FjdGlvblV0aWxzLkNhbkV4ZWN1dGUoaXRlbXMsIFZNLmNsYXNz
LCBWZGNBY3Rpb25UeXBlLlJ1blZtT25jZSkpOwogICAgICAgIGdldEV4cG9ydENvbW1hbmQoKS5z
ZXRJc0V4ZWN1dGlvbkFsbG93ZWQoaXRlbXMuc2l6ZSgpID4gMAogICAgICAgICAgICAgICAgJiYg
VmRjQWN0aW9uVXRpbHMuQ2FuRXhlY3V0ZShpdGVtcywgVk0uY2xhc3MsIFZkY0FjdGlvblR5cGUu
RXhwb3J0Vm0pKTsKICAgICAgICBnZXRNb3ZlQ29tbWFuZCgpLnNldElzRXhlY3V0aW9uQWxsb3dl
ZChpdGVtcy5zaXplKCkgPT0gMQogICAgICAgICAgICAgICAgJiYgVmRjQWN0aW9uVXRpbHMuQ2Fu
RXhlY3V0ZShpdGVtcywgVk0uY2xhc3MsIFZkY0FjdGlvblR5cGUuTW92ZVZtKSk7CiAgICAgICAg
Z2V0UmV0cmlldmVJc29JbWFnZXNDb21tYW5kKCkuc2V0SXNFeGVjdXRpb25BbGxvd2VkKGl0ZW1z
LnNpemUoKSA9PSAxCiAgICAgICAgICAgICAgICAmJiBWZGNBY3Rpb25VdGlscy5DYW5FeGVjdXRl
KGl0ZW1zLCBWTS5jbGFzcywgVmRjQWN0aW9uVHlwZS5DaGFuZ2VEaXNrKSk7CiAgICAgICAgZ2V0
Q2hhbmdlQ2RDb21tYW5kKCkuc2V0SXNFeGVjdXRpb25BbGxvd2VkKGl0ZW1zLnNpemUoKSA9PSAx
CiAgICAgICAgICAgICAgICAmJiBWZGNBY3Rpb25VdGlscy5DYW5FeGVjdXRlKGl0ZW1zLCBWTS5j
bGFzcywgVmRjQWN0aW9uVHlwZS5DaGFuZ2VEaXNrKSk7CiAgICAgICAgZ2V0QXNzaWduVGFnc0Nv
bW1hbmQoKS5zZXRJc0V4ZWN1dGlvbkFsbG93ZWQoaXRlbXMuc2l6ZSgpID4gMCk7CgogICAgICAg
IGdldEd1aWRlQ29tbWFuZCgpLnNldElzRXhlY3V0aW9uQWxsb3dlZChnZXRHdWlkZUNvbnRleHQo
KSAhPSBudWxsCiAgICAgICAgICAgICAgICB8fCAoZ2V0U2VsZWN0ZWRJdGVtKCkgIT0gbnVsbCAm
JiBnZXRTZWxlY3RlZEl0ZW1zKCkgIT0gbnVsbCAmJiBnZXRTZWxlY3RlZEl0ZW1zKCkuc2l6ZSgp
ID09IDEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlm
IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkLgogICAgICovCiAgICBwcml2YXRlIGJvb2xlYW4gaXNF
ZGl0Q29tbWFuZEV4ZWN1dGlvbkFsbG93ZWQoTGlzdCBpdGVtcykgewogICAgICAgIGlmIChpdGVt
cyA9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAg
aWYgKGl0ZW1zLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMg
dm9pZCBldmVudFJhaXNlZChFdmVudCBldiwgT2JqZWN0IHNlbmRlciwgRXZlbnRBcmdzIGFyZ3Mp
CiAgICB7CiAgICAgICAgc3VwZXIuZXZlbnRSYWlzZWQoZXYsIHNlbmRlciwgYXJncyk7CgogICAg
ICAgIGlmIChldi5lcXVhbHMoQ2hhbmdlQ0RNb2RlbC5FeGVjdXRlZEV2ZW50RGVmaW5pdGlvbikp
CiAgICAgICAgewogICAgICAgICAgICBjaGFuZ2VDRChzZW5kZXIsIGFyZ3MpOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmIChldi5lcXVhbHMoQ29uc29sZU1vZGVsLkVycm9yRXZlbnREZWZpbml0
aW9uKSAmJiBzZW5kZXIgaW5zdGFuY2VvZiBTcGljZUNvbnNvbGVNb2RlbCkKICAgICAgICB7CiAg
ICAgICAgICAgIFNwaWNlQ29uc29sZU1vZGVsX0Vycm9yKHNlbmRlciwgKEVycm9yQ29kZUV2ZW50
QXJncykgYXJncyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBTcGljZUNvbnNv
bGVNb2RlbF9FcnJvcihPYmplY3Qgc2VuZGVyLCBFcnJvckNvZGVFdmVudEFyZ3MgZSkKICAgIHsK
ICAgICAgICBSZXNvdXJjZU1hbmFnZXIgcm0gPQogICAgICAgICAgICAgICAgbmV3IFJlc291cmNl
TWFuYWdlcigiVUlDb21tb24uUmVzb3VyY2VzLlJkcEVycm9ycy5SZHBFcnJvcnMiLCBBc3NlbWJs
eS5HZXRFeGVjdXRpbmdBc3NlbWJseSgpKTsgLy8kTk9OLU5MUy0xJAoKICAgICAgICBDb25maXJt
YXRpb25Nb2RlbCBtb2RlbCA9IG5ldyBDb25maXJtYXRpb25Nb2RlbCgpOwogICAgICAgIGlmIChn
ZXRFcnJvcldpbmRvdygpID09IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBzZXRFcnJvcldp
bmRvdyhtb2RlbCk7CiAgICAgICAgfQogICAgICAgIG1vZGVsLnNldFRpdGxlKENvbnN0YW50c01h
bmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5jb25zb2xlRGlzY29ubmVjdGVkVGl0
bGUoKSk7CiAgICAgICAgbW9kZWwuc2V0SGFzaE5hbWUoImNvbnNvbGVfZGlzY29ubmVjdGVkIik7
IC8vJE5PTi1OTFMtMSQKICAgICAgICBtb2RlbC5zZXRNZXNzYWdlKENvbnN0YW50c01hbmFnZXIu
Z2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgLmdldE1lc3NhZ2VzKCkKICAgICAgICAgICAg
ICAgIC5lcnJDb25uZWN0aW5nVm1Vc2luZ1NwaWNlTXNnKHJtLkdldFN0cmluZygiRSIgKyBlLmdl
dEVycm9yQ29kZSgpKSkpOyAvLyROT04tTkxTLTEkCgogICAgICAgIHJtLlJlbGVhc2VBbGxSZXNv
dXJjZXMoKTsKCiAgICAgICAgVUlDb21tYW5kIHRlbXBWYXIgPSBuZXcgVUlDb21tYW5kKCJDYW5j
ZWxFcnJvciIsIHRoaXMpOyAvLyROT04tTkxTLTEkCiAgICAgICAgdGVtcFZhci5zZXRUaXRsZShD
b25zdGFudHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0Q29uc3RhbnRzKCkuY2xvc2UoKSk7CiAg
ICAgICAgdGVtcFZhci5zZXRJc0RlZmF1bHQodHJ1ZSk7CiAgICAgICAgdGVtcFZhci5zZXRJc0Nh
bmNlbCh0cnVlKTsKICAgICAgICBtb2RlbC5nZXRDb21tYW5kcygpLmFkZCh0ZW1wVmFyKTsKICAg
IH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIEV4ZWN1dGVDb21tYW5kKFVJQ29tbWFu
ZCBjb21tYW5kKQogICAgewogICAgICAgIHN1cGVyLkV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOwoK
ICAgICAgICBpZiAoY29tbWFuZCA9PSBnZXROZXdTZXJ2ZXJDb21tYW5kKCkpCiAgICAgICAgewog
ICAgICAgICAgICBOZXdTZXJ2ZXIoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY29tbWFu
ZCA9PSBnZXROZXdEZXNrdG9wQ29tbWFuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgTmV3RGVz
a3RvcCgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IGdldEVkaXRDb21t
YW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBFZGl0KCk7CiAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKGNvbW1hbmQgPT0gZ2V0UmVtb3ZlQ29tbWFuZCgpKQogICAgICAgIHsKICAgICAgICAg
ICAgcmVtb3ZlKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0UnVu
Q29tbWFuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgUnVuKCk7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0UGF1c2VDb21tYW5kKCkpCiAgICAgICAgewogICAgICAg
ICAgICBQYXVzZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IGdldFN0
b3BDb21tYW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBzdG9wKCk7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0U2h1dGRvd25Db21tYW5kKCkpCiAgICAgICAgewog
ICAgICAgICAgICBTaHV0ZG93bigpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5k
ID09IGdldE1pZ3JhdGVDb21tYW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBNaWdyYXRlKCk7
CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0TmV3VGVtcGxhdGVDb21t
YW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBOZXdUZW1wbGF0ZSgpOwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmIChjb21tYW5kID09IGdldFJ1bk9uY2VDb21tYW5kKCkpCiAgICAgICAgewog
ICAgICAgICAgICBSdW5PbmNlKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbW1hbmQg
PT0gZ2V0RXhwb3J0Q29tbWFuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgRXhwb3J0KENvbnN0
YW50c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25zdGFudHMoKS5leHBvcnRWaXJ0dWFsTWFj
aGluZVRpdGxlKCkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IGdldE1v
dmVDb21tYW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBNb3ZlKCk7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0R3VpZGVDb21tYW5kKCkpCiAgICAgICAgewogICAg
ICAgICAgICBHdWlkZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IGdl
dFJldHJpZXZlSXNvSW1hZ2VzQ29tbWFuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgUmV0cmll
dmVJc29JbWFnZXMoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY29tbWFuZCA9PSBnZXRD
aGFuZ2VDZENvbW1hbmQoKSkKICAgICAgICB7CiAgICAgICAgICAgIENoYW5nZUNEKCk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gZ2V0QXNzaWduVGFnc0NvbW1hbmQoKSkK
ICAgICAgICB7CiAgICAgICAgICAgIEFzc2lnblRhZ3MoKTsKICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZiAoU3RyaW5nSGVscGVyLnN0cmluZ3NFcXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uQXNz
aWduVGFncyIpKSAvLyROT04tTkxTLTEkCiAgICAgICAgewogICAgICAgICAgICBPbkFzc2lnblRh
Z3MoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVscGVyLnN0cmluZ3NFcXVh
bChjb21tYW5kLmdldE5hbWUoKSwgIkNhbmNlbCIpKSAvLyROT04tTkxTLTEkCiAgICAgICAgewog
ICAgICAgICAgICBDYW5jZWwoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVs
cGVyLnN0cmluZ3NFcXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uU2F2ZSIpKSAvLyROT04tTkxT
LTEkCiAgICAgICAgewogICAgICAgICAgICBwcmVTYXZlKCk7CiAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKFN0cmluZ0hlbHBlci5zdHJpbmdzRXF1YWwoY29tbWFuZC5nZXROYW1lKCksICJPblJl
bW92ZSIpKSAvLyROT04tTkxTLTEkCiAgICAgICAgewogICAgICAgICAgICBPblJlbW92ZSgpOwog
ICAgICAgIH0KICAgICAgICBlbHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNvbW1h
bmQuZ2V0TmFtZSgpLCAiT25FeHBvcnQiKSkgLy8kTk9OLU5MUy0xJAogICAgICAgIHsKICAgICAg
ICAgICAgT25FeHBvcnQoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVscGVy
LnN0cmluZ3NFcXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uRXhwb3J0Tm9UZW1wbGF0ZXMiKSkg
Ly8kTk9OLU5MUy0xJAogICAgICAgIHsKICAgICAgICAgICAgT25FeHBvcnROb1RlbXBsYXRlcygp
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNv
bW1hbmQuZ2V0TmFtZSgpLCAiQ2FuY2VsQ29uZmlybWF0aW9uIikpIC8vJE5PTi1OTFMtMSQKICAg
ICAgICB7CiAgICAgICAgICAgIENhbmNlbENvbmZpcm1hdGlvbigpOwogICAgICAgIH0KICAgICAg
ICBlbHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNvbW1hbmQuZ2V0TmFtZSgpLCAi
Q2FuY2VsRXJyb3IiKSkgLy8kTk9OLU5MUy0xJAogICAgICAgIHsKICAgICAgICAgICAgQ2FuY2Vs
RXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVscGVyLnN0cmluZ3NF
cXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uUnVuT25jZSIpKSAvLyROT04tTkxTLTEkCiAgICAg
ICAgewogICAgICAgICAgICBPblJ1bk9uY2UoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
U3RyaW5nSGVscGVyLnN0cmluZ3NFcXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uTmV3VGVtcGxh
dGUiKSkgLy8kTk9OLU5MUy0xJAogICAgICAgIHsKICAgICAgICAgICAgT25OZXdUZW1wbGF0ZSgp
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNv
bW1hbmQuZ2V0TmFtZSgpLCAiT25NaWdyYXRlIikpIC8vJE5PTi1OTFMtMSQKICAgICAgICB7CiAg
ICAgICAgICAgIE9uTWlncmF0ZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb21tYW5k
ID09IGdldENhbmNlbE1pZ3JhdGVDb21tYW5kKCkpCiAgICAgICAgewogICAgICAgICAgICBDYW5j
ZWxNaWdyYXRpb24oKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoU3RyaW5nSGVscGVyLnN0
cmluZ3NFcXVhbChjb21tYW5kLmdldE5hbWUoKSwgIk9uU2h1dGRvd24iKSkgLy8kTk9OLU5MUy0x
JAogICAgICAgIHsKICAgICAgICAgICAgT25TaHV0ZG93bigpOwogICAgICAgIH0KICAgICAgICBl
bHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNvbW1hbmQuZ2V0TmFtZSgpLCAiT25T
dG9wIikpIC8vJE5PTi1OTFMtMSQKICAgICAgICB7CiAgICAgICAgICAgIE9uU3RvcCgpOwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChTdHJpbmdIZWxwZXIuc3RyaW5nc0VxdWFsKGNvbW1hbmQu
Z2V0TmFtZSgpLCAiT25DaGFuZ2VDRCIpKSAvLyROT04tTkxTLTEkCiAgICAgICAgewogICAgICAg
ICAgICBPbkNoYW5nZUNEKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbW1hbmQuZ2V0
TmFtZSgpLmVxdWFscygiY2xvc2VWbmNJbmZvIikpIHsgLy8kTk9OLU5MUy0xJAogICAgICAgICAg
ICBzZXRXaW5kb3cobnVsbCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgU3lzdGVtVHJl
ZUl0ZW1Nb2RlbCBzeXN0ZW1UcmVlU2VsZWN0ZWRJdGVtOwoKICAgIEBPdmVycmlkZQogICAgcHVi
bGljIFN5c3RlbVRyZWVJdGVtTW9kZWwgZ2V0U3lzdGVtVHJlZVNlbGVjdGVkSXRlbSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIHN5c3RlbVRyZWVTZWxlY3RlZEl0ZW07CiAgICB9CgogICAgQE92ZXJy
aWRlCiAgICBwdWJsaWMgdm9pZCBzZXRTeXN0ZW1UcmVlU2VsZWN0ZWRJdGVtKFN5c3RlbVRyZWVJ
dGVtTW9kZWwgdmFsdWUpCiAgICB7CiAgICAgICAgc3lzdGVtVHJlZVNlbGVjdGVkSXRlbSA9IHZh
bHVlOwogICAgICAgIE9uUHJvcGVydHlDaGFuZ2VkKG5ldyBQcm9wZXJ0eUNoYW5nZWRFdmVudEFy
Z3MoIlN5c3RlbVRyZWVTZWxlY3RlZEl0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKICAgIH0KCiAgICBA
T3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TGlzdE5hbWUoKSB7CiAgICAgICAgcmV0
dXJuICJWbUxpc3RNb2RlbCI7IC8vJE5PTi1OTFMtMSQKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAg
IHByb3RlY3RlZCBHdWlkIGV4dHJhY3RTdG9yYWdlUG9vbElkTnVsbFNhZmUoVk0gZW50aXR5KSB7
CiAgICAgICAgcmV0dXJuIGVudGl0eS5nZXRTdG9yYWdlUG9vbElkKCk7CiAgICB9Cn0K
--_005_C5A0092C63E939488005F15F736A8112097A57B9SHSMSX101ccrcor_--