[mono/monodevelop] [17 commits] 00967611: 16307 - reset motion after actions

"Jeremie Laval ([email protected])" <[email protected]> Thu, 21 Nov 2013 16:44:41 +0000
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <000001427b8c9aa2-7febb55c-6ff0-4a84-94de-37a34b396c44-000000@email.amazonses.com>
DQogICBCcmFuY2g6IHJlZnMvaGVhZHMvbW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoDQogICAgIEhv
bWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wDQogIENvbXBhcmU6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbXBhcmUvMGFmZmQwYWM0YjUxLi4uNDc5
OWYxYzIyYmVjDQoNCiAgIENvbW1pdDogMDA5Njc2MTEzNmRlNDc3N2NhZmRjODMwNzlmMmM4YjM0
OTQzYWI4ZA0KICAgQXV0aG9yOiBram5pbHNzb24gPGtqbmlsc3NvbkBnbWFpbC5jb20+IChram5p
bHNzb24pDQogICAgIERhdGU6IDIwMTMtMTEtMTkgMTk6NDk6MTAgR01UDQogICAgICBVUkw6IGh0
dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC8wMDk2NzYxMTM2ZGU0Nzc3
Y2FmZGM4MzA3OWYyYzhiMzQ5NDNhYjhkDQoNCjE2MzA3IC0gcmVzZXQgbW90aW9uIGFmdGVyIGFj
dGlvbnMNCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUvTW9uby5UZXh0ZWRpdG9y
L01vbm8uVGV4dEVkaXRvci5WaS9WaU1vZGUuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9N
b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
QEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIFJlc2V0IChzdHJpbmcgc3RhdHVzKQogCQl7CiAJCQlD
dXJTdGF0ZSA9IFN0YXRlLk5vcm1hbDsKIAkJCVJlc2V0RWRpdG9yU3RhdGUgKERhdGEpOwotCQkJ
CisJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCWNvbW1hbmRCdWZmZXIuTGVuZ3RoID0gMDsK
IAkJCVN0YXR1cyA9IHN0YXR1czsKIAkJfQpAQCAtNjE3LDYgKzYxNyw3IEBAIHByb3RlY3RlZCBv
dmVycmlkZSB2b2lkIEhhbmRsZUtleXByZXNzIChHZGsuS2V5IGtleSwgdWludCB1bmljb2RlS2V5
LCBHZGsuTW9kaWZpCiAJCQkJCQlSdW5BY3Rpb25zIChhY3Rpb24sIENsaXBib2FyZEFjdGlvbnMu
Q3V0KTsKIAkJCQkJU3RhdHVzID0gIi0tIElOU0VSVCAtLSI7CiAJCQkJCUN1clN0YXRlID0gU3Rh
dGUuSW5zZXJ0OworCQkJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCQkJQ2FyZXQuTW9kZSA9
IENhcmV0TW9kZS5JbnNlcnQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUmVzZXQgKCJVbnJlY29nbmlz
ZWQgbW90aW9uIik7DQoNCiAgIENvbW1pdDogNTgwN2NhYTk4MGMzNzZjOTM0YWVlMTk5ZjEyNGJh
OTU3ZTVhNDNlNA0KICAgQXV0aG9yOiBNaWNoYWVsIEh1dGNoaW5zb24gPG0uai5odXRjaGluc29u
QGdtYWlsLmNvbT4gKG1odXRjaCkNCiAgICAgRGF0ZTogMjAxMy0xMS0xOSAyMjo0NTozMCBHTVQN
CiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0LzU4
MDdjYWE5ODBjMzc2YzkzNGFlZTE5OWYxMjRiYTk1N2U1YTQzZTQNCg0KTWVyZ2UgcHVsbCByZXF1
ZXN0ICM0MzggZnJvbSBram5pbHNzb24vbWFzdGVyCgoxNjMwNyAtIHZpIG1vZGUgLSByZXNldCBt
b3Rpb24gYWZ0ZXIgYWN0aW9ucw0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9zcmMvY29yZS9N
b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcwoNCk1vZGlmaWVkOiBt
YWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0b3IuVmkvVmlNb2RlLmNz
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgUmVzZXQgKHN0cmluZyBzdGF0
dXMpCiAJCXsKIAkJCUN1clN0YXRlID0gU3RhdGUuTm9ybWFsOwogCQkJUmVzZXRFZGl0b3JTdGF0
ZSAoRGF0YSk7Ci0JCQkKKwkJCW1vdGlvbiA9IE1vdGlvbi5Ob25lOwogCQkJY29tbWFuZEJ1ZmZl
ci5MZW5ndGggPSAwOwogCQkJU3RhdHVzID0gc3RhdHVzOwogCQl9CkBAIC02MTcsNiArNjE3LDcg
QEAgcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgSGFuZGxlS2V5cHJlc3MgKEdkay5LZXkga2V5LCB1
aW50IHVuaWNvZGVLZXksIEdkay5Nb2RpZmkKIAkJCQkJCVJ1bkFjdGlvbnMgKGFjdGlvbiwgQ2xp
cGJvYXJkQWN0aW9ucy5DdXQpOwogCQkJCQlTdGF0dXMgPSAiLS0gSU5TRVJUIC0tIjsKIAkJCQkJ
Q3VyU3RhdGUgPSBTdGF0ZS5JbnNlcnQ7CisJCQkJCW1vdGlvbiA9IE1vdGlvbi5Ob25lOwogCQkJ
CQlDYXJldC5Nb2RlID0gQ2FyZXRNb2RlLkluc2VydDsKIAkJCQl9IGVsc2UgewogCQkJCQlSZXNl
dCAoIlVucmVjb2duaXNlZCBtb3Rpb24iKTsNCg0KICAgQ29tbWl0OiA2ODQ4MWU4MzY5ZDY1NWMy
OWQxNzI2MGJmMTMzOTFlMzdmYTcwYzc4DQogICBBdXRob3I6IFRoZXJ6b2sgPHRlcm9tYXJpb0B5
YWhvby5jb20+IChUaGVyem9rKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDAxOjE5OjE2IEdNVA0K
ICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNjg0
ODFlODM2OWQ2NTVjMjlkMTcyNjBiZjEzMzkxZTM3ZmE3MGM3OA0KDQpbTW9ub0FkZGluc10gQnVt
cCByZXZpc2lvbiBmb3IgYnVnIDE0NDIxLg0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRl
cm5hbC9tb25vLWFkZGlucwoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL21vbm8tYWRkaW5zDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgMGExYzBhMDZlZDczODE5
MDZhMjc0NjZhZmE5MWJkODI0Zjc1ZGUwMgorU3VicHJvamVjdCBjb21taXQgMjFkNzE1YWRlZGFh
OWE4YmMxMjU1ZGU3ZGRmMGQyNDQ1NjIyYzE4Nw0KDQogICBDb21taXQ6IGQ5ZmEwYzA2OWJiYjBj
MzQ0ZjFmNDBkYzUxZGVkZDhmNTBjNzhjMDINCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1
ZWdlckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDA2OjUy
OjI4IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9j
b21taXQvZDlmYTBjMDY5YmJiMGMzNDRmMWY0MGRjNTFkZWRkOGY1MGM3OGMwMg0KDQpGaXhlZCAn
QnVnIDE2MzMyIC0gRHVwbGljYXRlIEJPTSEgJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4v
c3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5Tb3VyY2VFZGl0b3IyL01vbm9EZXZlbG9wLlNvdXJjZUVk
aXRvci9Tb3VyY2VFZGl0b3JWaWV3LmNzCiAgTSBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRv
ci9Nb25vLlRleHRFZGl0b3IuVXRpbHMvVGV4dEZpbGVVdGlsaXR5LmNzCiAgTSBtYWluL3NyYy9j
b3JlL01vbm9EZXZlbG9wLlRleHRFZGl0b3IuVGVzdHMvTW9uby5UZXh0RWRpdG9yLlRlc3RzL1Rl
eHRGaWxlUmVhZGVyVGVzdHMuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZl
bG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZp
ZXcuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCkBAIC04MzUsOSArODM1LDkgQEAgcHVibGljIHZvaWQgTG9hZCAo
c3RyaW5nIGZpbGVOYW1lLCBFbmNvZGluZyBsb2FkRW5jb2RpbmcsIGJvb2wgcmVsb2FkID0gZmFs
c2UpCiAJCQllbHNlIHsKIAkJCQlpbkxvYWQgPSB0cnVlOwogCQkJCWlmIChsb2FkRW5jb2Rpbmcg
PT0gbnVsbCkgewotCQkJCQl0ZXh0ID0gVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxl
TmFtZSwgb3V0IGhhZEJvbSwgb3V0IHRoaXMuZW5jb2RpbmcpOwotCQkJCX0KLQkJCQllbHNlIHsK
KwkJCQkJdGV4dCA9IFRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZU5hbWUsIG91dCBo
YWRCb20sIG91dCBlbmNvZGluZyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZW5jb2RpbmcgPSBsb2Fk
RW5jb2Rpbmc7CiAJCQkJCXRleHQgPSBUZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGVO
YW1lLCBsb2FkRW5jb2RpbmcsIG91dCBoYWRCb20pOwogCQkJCX0KIAkJCQlpZiAocmVsb2FkKSB7
DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0
b3IuVXRpbHMvVGV4dEZpbGVVdGlsaXR5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTU2LDYgKzE1Niwy
NSBAQCBwdWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChieXRlW10gYnl0ZXMsIG91dCBFbmNv
ZGluZyBlbmNvZGluZywgb3V0IGJvb2wgaGFkQgogCQkJfQogCQl9CiAKKwkJcHVibGljIHN0YXRp
YyBzdHJpbmcgR2V0VGV4dCAoYnl0ZVtdIGJ5dGVzLCBFbmNvZGluZyBlbmNvZGluZywgb3V0IGJv
b2wgaGFkQm9tKQorCQl7CisJCQlieXRlW10gYm9tID0gZW5jb2RpbmcuR2V0UHJlYW1ibGUgKCk7
CisJCQlpZiAoYm9tICE9IG51bGwgJiYgYm9tLkxlbmd0aCA+IDAgJiYgYm9tLkxlbmd0aCA8PSBi
eXRlcy5MZW5ndGgpIHsKKwkJCQloYWRCb20gPSB0cnVlOworCQkJCWZvciAoaW50IGkgPSAwOyBp
IDwgYm9tLkxlbmd0aDsgaSsrKSB7CisJCQkJCWlmIChieXRlcyBbaV0gIT0gYm9tIFtpXSkgewor
CQkJCQkJaGFkQm9tID0gZmFsc2U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0g
ZWxzZSB7CisJCQkJaGFkQm9tID0gZmFsc2U7CisJCQl9CisJCQlpZiAoaGFkQm9tKSAKKwkJCQly
ZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcywgYm9tLkxlbmd0aCwgYnl0ZXMuTGVuZ3Ro
IC0gYm9tLkxlbmd0aCk7CisJCQlyZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcyk7CisJ
CX0KKwogCQlwdWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChTdHJlYW0gaW5wdXRTdHJlYW0p
CiAJCXsKIAkJCXVzaW5nICh2YXIgc3RyZWFtID0gT3BlblN0cmVhbSAoaW5wdXRTdHJlYW0pKSB7
CkBAIC0zMDMsMjEgKzMyMiw4IEBAIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlYWRBbGxUZXh0IChz
dHJpbmcgZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nLCBvdXQgYm9vbCBoCiAJCQkJdGhyb3cg
bmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbiAoImVuY29kaW5nIik7CiAJCQkKIAkJCWJ5dGVbXSBj
b250ZW50ID0gRmlsZS5SZWFkQWxsQnl0ZXMgKGZpbGVOYW1lKTsKLQkJCWJ5dGVbXSBib20gPSBl
bmNvZGluZy5HZXRQcmVhbWJsZSAoKTsKLQkJCWlmIChib20gIT0gbnVsbCAmJiBib20uTGVuZ3Ro
ID4gMCAmJiBib20uTGVuZ3RoIDw9IGNvbnRlbnQuTGVuZ3RoKSB7Ci0JCQkJaGFkQm9tID0gdHJ1
ZTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGJvbS5MZW5ndGg7IGkrKykgewotCQkJCQlpZiAo
Y29udGVudCBbaV0gIT0gYm9tIFtpXSkgewotCQkJCQkJaGFkQm9tPSBmYWxzZTsKLQkJCQkJCWJy
ZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQloYWRCb20gPSBmYWxzZTsKLQkJ
CX0KLQkJCXJldHVybiBlbmNvZGluZy5HZXRTdHJpbmcgKGNvbnRlbnQpOworCQkJcmV0dXJuIEdl
dFRleHQgKGNvbnRlbnQsIGVuY29kaW5nLCBvdXQgaGFkQm9tKTsgCiAJCX0KLQogCQkjZW5kcmVn
aW9uCiAKIAkJI3JlZ2lvbiBBU0NJSSBlbmNvZGluZyBjaGVjaw0KDQpNb2RpZmllZDogbWFpbi9z
cmMvY29yZS9Nb25vRGV2ZWxvcC5UZXh0RWRpdG9yLlRlc3RzL01vbm8uVGV4dEVkaXRvci5UZXN0
cy9UZXh0RmlsZVJlYWRlclRlc3RzLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTQzLDYgKzE0MywxOCBA
QCBwdWJsaWMgdm9pZCBUZXN0R0IxODAzMCAoKQogCQkJYnl0ZVtdIGlucHV0ID0gRW5jb2Rpbmcu
R2V0RW5jb2RpbmcgKDU0OTM2KS5HZXRCeXRlcyAoc3JjKTsKIAkJCUFzc2VydC5BcmVFcXVhbCAo
c3JjLCBUZXh0RmlsZVV0aWxpdHkuR2V0VGV4dCAoaW5wdXQpKTsKIAkJfQorCisJCS8vLyA8c3Vt
bWFyeT4KKwkJLy8vIEJ1ZyAxNjMzMiAtIER1cGxpY2F0ZSBCT00hIAorCQkvLy8gPC9zdW1tYXJ5
PgorCQlbVGVzdCgpXQorCQlwdWJsaWMgdm9pZCBUZXN0QnVnMTYzMzIgKCkJCisJCXsKKwkJCWJ5
dGVbXSBpbnB1dCA9IG5ldyBieXRlW10geyAweEVGLCAweEJCLCAweEJGLCAoYnl0ZSknYSd9Owor
CQkJYm9vbCBoYWRCb207CisJCQlBc3NlcnQuQXJlRXF1YWwgKCJhIiwgVGV4dEZpbGVVdGlsaXR5
LkdldFRleHQgKGlucHV0LCBFbmNvZGluZy5VVEY4LCBvdXQgaGFkQm9tKSk7CisJCQlBc3NlcnQu
SXNUcnVlIChoYWRCb20pOworCQl9CiAJfQogfQogDQoNCiAgIENvbW1pdDogZTBlZjUxNjBiYTEz
MDdiZTc2NjliYTliYmVkZjY5YzZkNWI4ZTZkYQ0KICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1r
cnVlZ2VyQHhhbWFyaW4uY29tPiAobWtydWVnZXIpDQogICAgIERhdGU6IDIwMTMtMTEtMjAgMDc6
MDI6MTggR01UDQogICAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9w
L2NvbW1pdC9lMGVmNTE2MGJhMTMwN2JlNzY2OWJhOWJiZWRmNjljNmQ1YjhlNmRhDQoNCltJZGVd
IE5ld2x5IGNyZWF0ZWQgZmlsZXMgYWx3YXlzIGNyZWF0ZSBhIEJPTS4NCg0KQ2hhbmdlZCBwYXRo
czoKICBNIG1haW4vc3JjL2NvcmUvTW9ub0RldmVsb3AuSWRlL01vbm9EZXZlbG9wLklkZS5UZW1w
bGF0ZXMvU2luZ2xlRmlsZURlc2NyaXB0aW9uVGVtcGxhdGUuY3MKDQpNb2RpZmllZDogbWFpbi9z
cmMvY29yZS9Nb25vRGV2ZWxvcC5JZGUvTW9ub0RldmVsb3AuSWRlLlRlbXBsYXRlcy9TaW5nbGVG
aWxlRGVzY3JpcHRpb25UZW1wbGF0ZS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTI3Miw3ICsyNzIsMTEg
QEAgcHVibGljIHZpcnR1YWwgU3RyZWFtIENyZWF0ZUZpbGVDb250ZW50IChTb2x1dGlvbkl0ZW0g
cG9saWN5UGFyZW50LCBQcm9qZWN0IHByb2oKIAkJCQkJY29udGVudCA9IGZvcm1hdHRlZDsKIAkJ
CX0KIAkJCQotCQkJTWVtb3J5U3RyZWFtIG1zID0gbmV3IE1lbW9yeVN0cmVhbSAoKTsKKwkJCXZh
ciBtcyA9IG5ldyBNZW1vcnlTdHJlYW0gKCk7CisKKwkJCXZhciBib20gPSBFbmNvZGluZy5VVEY4
LkdldFByZWFtYmxlICgpOworCQkJbXMuV3JpdGUgKGJvbSwgMCwgYm9tLkxlbmd0aCk7CisKIAkJ
CWJ5dGVbXSBkYXRhOwogCQkJaWYgKEFkZFN0YW5kYXJkSGVhZGVyKSB7CiAJCQkJc3RyaW5nIGhl
YWRlciA9IFN0YW5kYXJkSGVhZGVyU2VydmljZS5HZXRIZWFkZXIgKHBvbGljeVBhcmVudCwgZmls
ZU5hbWUsIHRydWUpOw0KDQogICBDb21taXQ6IDZiNTMxNDRmOTkwNzQxNWFlZDJjNTY5OGJiOGQw
OTJjNGY5ODQ5YmINCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdlckB4YW1hcmluLmNv
bT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDA3OjIyOjM0IEdNVA0KICAgICAg
VVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNmI1MzE0NGY5
OTA3NDE1YWVkMmM1Njk4YmI4ZDA5MmM0Zjk4NDliYg0KDQpbU291cmNlRWRpdG9yXSBGaXhlZCBh
IGJ1ZyB3aGVyZSB0aGUgQk9NIGNvdWxkIGdldCByZW1vdmVkLg0KDQpDaGFuZ2VkIHBhdGhzOgog
IE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3Au
U291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZpZXcuY3MKICBNIG1haW4vc3JjL2FkZGlucy9Nb25v
RGV2ZWxvcC5Tb3VyY2VFZGl0b3IyL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvci9Tb3VyY2VFZGl0
b3JXaWRnZXQuY3MKDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJj
ZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvclZpZXcuY3MNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCkBAIC02OTIsMTEgKzY5MiwxNSBAQCBwdWJsaWMgdm9pZCBTYXZlIChzdHJpbmcg
ZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nKQogCQkJCQl2YXIgd3JpdGVCb20gPSBoYWRCb207
CiAJCQkJCXZhciB3cml0ZVRleHQgPSBEb2N1bWVudC5UZXh0OwogCQkJCQlpZiAod3JpdGVFbmNv
ZGluZyA9PSBudWxsKSB7Ci0JCQkJCQl3cml0ZUVuY29kaW5nID0gRW5jb2RpbmcuVVRGODsKLQkJ
CQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwg
aXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQK
LQkJCQkJCS8vIGNoYW5nZWQgZmlsZXMuCi0JCQkJCQl3cml0ZUJvbSA9IGZhbHNlOwotLy8JCQkJ
CQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNBU0NJ
SSAod3JpdGVUZXh0KTsKKwkJCQkJCWlmICh0aGlzLmVuY29kaW5nICE9IG51bGwpIHsKKwkJCQkJ
CQl3cml0ZUVuY29kaW5nID0gdGhpcy5lbmNvZGluZzsKKwkJCQkJCX0gZWxzZSB7IAorCQkJCQkJ
CXdyaXRlRW5jb2RpbmcgPSBFbmNvZGluZy5VVEY4OworCQkJCQkJCS8vIERpc2FibGVkLiBTaG93
cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwgaXQncyBhdG0gY29uZnVzaW5nIGZv
ciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQKKwkJCQkJCQkvLyBjaGFuZ2VkIGZp
bGVzLgorCQkJCQkJCXdyaXRlQm9tID0gZmFsc2U7CisJLy8JCQkJCQl3cml0ZUJvbSA9IU1vbm8u
VGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNBU0NJSSAod3JpdGVUZXh0KTsKKwkJ
CQkJCX0KIAkJCQkJfQogCQkJCQlNb25vLlRleHRFZGl0b3IuVXRpbHMuVGV4dEZpbGVVdGlsaXR5
LldyaXRlVGV4dCAoZmlsZU5hbWUsIHdyaXRlVGV4dCwgd3JpdGVFbmNvZGluZywgd3JpdGVCb20p
OwogCQkJCX0gY2F0Y2ggKEludmFsaWRFbmNvZGluZ0V4Y2VwdGlvbikgewpAQCAtOTEwLDcgKzkx
NCw3IEBAIGludGVybmFsIHZvaWQgU3RvcmVTZXR0aW5ncyAoKQogCiAJCWJvb2wgd2Fybk92ZXJ3
cml0ZSA9IGZhbHNlOwogCQlib29sIGluTG9hZCA9IGZhbHNlOwotCQlFbmNvZGluZyBlbmNvZGlu
ZyA9IG51bGw7CisJCUVuY29kaW5nIGVuY29kaW5nOwogCQlib29sIGhhZEJvbSA9IGZhbHNlOwog
CiAJCWludGVybmFsIHZvaWQgUmVwbGFjZUNvbnRlbnQgKHN0cmluZyBmaWxlTmFtZSwgc3RyaW5n
IGNvbnRlbnQsIEVuY29kaW5nIGVuY29kaW5nKQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5z
L01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJj
ZUVkaXRvcldpZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTkyNyw3ICs5MjcsNyBAQCBpbnRlcm5h
bCB2b2lkIENvbnZlcnRMaW5lRW5kaW5ncyAoKQogCQkJCQluZXdUZXh0LkFwcGVuZCAoY29ycmVj
dEVvbCk7CiAJCQl9CiAJCQl2aWV3LlN0b3JlU2V0dGluZ3MgKCk7Ci0JCQl2aWV3LlJlcGxhY2VD
b250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmluZyAoKSwgbnVsbCk7CisJ
CQl2aWV3LlJlcGxhY2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmlu
ZyAoKSwgdmlldy5Tb3VyY2VFbmNvZGluZyk7CiAJCQlEb2N1bWVudC5IYXNMaW5lRW5kaW5nTWlz
bWF0Y2hPblRleHRTZXQgPSBmYWxzZTsKIAkJCXZpZXcuTG9hZFNldHRpbmdzICgpOwogCQl9CkBA
IC0xMDczLDcgKzEwNzMsNyBAQCBwdWJsaWMgdm9pZCBTaG93QXV0b1NhdmVXYXJuaW5nIChzdHJp
bmcgZmlsZU5hbWUpCiAJCQkJCQlBdXRvU2F2ZS5SZW1vdmVBdXRvU2F2ZUZpbGUgKGZpbGVOYW1l
KTsKIAkJCQkJCVRleHRFZGl0b3IuR3JhYkZvY3VzICgpOwogCQkJCQkJdmlldy5Mb2FkIChmaWxl
TmFtZSk7Ci0JCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgbnVs
bCk7CisJCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgdmlldy5T
b3VyY2VFbmNvZGluZyk7CiAJCQkJCQl2aWV3LldvcmtiZW5jaFdpbmRvdy5Eb2N1bWVudC5SZXBh
cnNlRG9jdW1lbnQgKCk7CiAJCQkJCQl2aWV3LklzRGlydHkgPSB0cnVlOwogCQkJCQl9IGNhdGNo
IChFeGNlcHRpb24gZXgpIHsNCg0KICAgQ29tbWl0OiA5NThjNmY0MzIyNjg4MWYwYjQ4YTI3YWE4
MGRiZGZkOTA5MGJkMzk2DQogICBBdXRob3I6IE1pa2UgS3LDvGdlciA8bWtydWVnZXJAeGFtYXJp
bi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTogMjAxMy0xMS0yMCAwODozNToyNyBHTVQNCiAg
ICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0Lzk1OGM2
ZjQzMjI2ODgxZjBiNDhhMjdhYTgwZGJkZmQ5MDkwYmQzOTYNCg0KRml4ZWQgJ0J1ZyAxNjA4MyAt
ICJGaW5kIFJlZmVyZW5jZXMiIGZhaWxzIGlmIGZpbGVzIGFyZSBtb3ZlZCcuDQoNCkNoYW5nZWQg
cGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5DU2hh
cnAuUmVmYWN0b3JpbmcvQ1NoYXJwUmVmZXJlbmNlRmluZGVyLmNzCg0KTW9kaWZpZWQ6IG1haW4v
c3JjL2FkZGlucy9DU2hhcnBCaW5kaW5nL01vbm9EZXZlbG9wLkNTaGFycC5SZWZhY3RvcmluZy9D
U2hhcnBSZWZlcmVuY2VGaW5kZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC01Miw3ICs1Miw3IEBAIGNs
YXNzIENTaGFycFJlZmVyZW5jZUZpbmRlciA6IFJlZmVyZW5jZUZpbmRlcgogCQlMaXN0PEZpbGVQ
YXRoPiBmaWxlcyA9IG5ldyBMaXN0PEZpbGVQYXRoPiAoKTsKIAkJTGlzdDxUdXBsZTxGaWxlUGF0
aCwgTW9ub0RldmVsb3AuSWRlLkd1aS5Eb2N1bWVudD4+IG9wZW5Eb2N1bWVudHMgPSBuZXcgTGlz
dDxUdXBsZTxGaWxlUGF0aCwgTW9ub0RldmVsb3AuSWRlLkd1aS5Eb2N1bWVudD4+ICgpOwogCQkK
LQkJc3RyaW5nIG1lbWJlck5hbWU7DQorCQlzdHJpbmcgbWVtYmVyTmFtZTsKIAkJc3RyaW5nIGtl
eXdvcmROYW1lOwogCQkKIAkJcHVibGljIENTaGFycFJlZmVyZW5jZUZpbmRlciAoKQpAQCAtNjMs
MTcgKzYzLDE3IEBAIHB1YmxpYyBDU2hhcnBSZWZlcmVuY2VGaW5kZXIgKCkKIAkJcHVibGljIHZv
aWQgU2V0U2VhcmNoZWRNZW1iZXJzIChJRW51bWVyYWJsZTxvYmplY3Q+IG1lbWJlcnMpCiAJCXsK
IAkJCXNlYXJjaGVkTWVtYmVycyA9IG5ldyBMaXN0PG9iamVjdD4gKG1lbWJlcnMpOwotCQkJdmFy
IGZpcnN0TWVtYmVyID0gc2VhcmNoZWRNZW1iZXJzLkZpcnN0T3JEZWZhdWx0ICgpOw0KLQkJCWlm
IChmaXJzdE1lbWJlciBpcyBJTmFtZWRFbGVtZW50KSB7DQorCQkJdmFyIGZpcnN0TWVtYmVyID0g
c2VhcmNoZWRNZW1iZXJzLkZpcnN0T3JEZWZhdWx0ICgpOworCQkJaWYgKGZpcnN0TWVtYmVyIGlz
IElOYW1lZEVsZW1lbnQpIHsKIAkJCQl2YXIgbmFtZWRFbGVtZW50ID0gKElOYW1lZEVsZW1lbnQp
Zmlyc3RNZW1iZXI7CiAJCQkJdmFyIG5hbWUgPSBuYW1lZEVsZW1lbnQuTmFtZTsKIAkJCQlpZiAo
bmFtZWRFbGVtZW50IGlzIElNZXRob2QgJiYgKCgoSU1ldGhvZCluYW1lZEVsZW1lbnQpLklzQ29u
c3RydWN0b3IgfCAoKElNZXRob2QpbmFtZWRFbGVtZW50KS5Jc0Rlc3RydWN0b3IpKQogCQkJCQlu
YW1lID0gKChJTWV0aG9kKW5hbWVkRWxlbWVudCkuRGVjbGFyaW5nVHlwZS5OYW1lOwotCQkJCW1l
bWJlck5hbWUgPSBuYW1lOw0KLQ0KLQkJCQlrZXl3b3JkTmFtZSA9IENTaGFycEFtYmllbmNlLk5l
dFRvQ1NoYXJwVHlwZU5hbWUgKG5hbWVkRWxlbWVudC5GdWxsTmFtZSk7DQotCQkJCWlmIChrZXl3
b3JkTmFtZSA9PSBuYW1lZEVsZW1lbnQuRnVsbE5hbWUpDQotCQkJCQlrZXl3b3JkTmFtZSA9IG51
bGw7DQorCQkJCW1lbWJlck5hbWUgPSBuYW1lOworCisJCQkJa2V5d29yZE5hbWUgPSBDU2hhcnBB
bWJpZW5jZS5OZXRUb0NTaGFycFR5cGVOYW1lIChuYW1lZEVsZW1lbnQuRnVsbE5hbWUpOworCQkJ
CWlmIChrZXl3b3JkTmFtZSA9PSBuYW1lZEVsZW1lbnQuRnVsbE5hbWUpCisJCQkJCWtleXdvcmRO
YW1lID0gbnVsbDsKIAkJCX0KIAkJCWlmIChmaXJzdE1lbWJlciBpcyBzdHJpbmcpCiAJCQkJbWVt
YmVyTmFtZSA9IGZpcnN0TWVtYmVyLlRvU3RyaW5nICgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIE1l
bWJlclJlZmVyZW5jZSBHZXRSZWZlcmVuY2UgKFByb2plY3QgcHJvamVjdCwgUmVzb2x2ZVJlc3Vs
dCByZXN1bHQsIEFzdE5vZGUgbm9kCiAJCXNraXA6CiAKIAkJCXZhciByZWdpb24gPSBuZXcgRG9t
UmVnaW9uIChmaWxlTmFtZSwgbm9kZS5TdGFydExvY2F0aW9uLCBub2RlLkVuZExvY2F0aW9uKTsK
LQ0KKwogCQkJdmFyIGxlbmd0aCA9IG5vZGUgaXMgUHJpbWl0aXZlVHlwZSA/IGtleXdvcmROYW1l
Lkxlbmd0aCA6IG5vZGUuRW5kTG9jYXRpb24uQ29sdW1uIC0gbm9kZS5TdGFydExvY2F0aW9uLkNv
bHVtbjsKIAkJCWlmICh2YWxpZCA9PSBudWxsKQogCQkJCXZhbGlkID0gc2VhcmNoZWRNZW1iZXJz
LkZpcnN0T3JEZWZhdWx0ICgpOwpAQCAtMzA0LDcgKzMwNCwxMiBAQCBwdWJsaWMgb3ZlcnJpZGUg
SUVudW1lcmFibGU8TWVtYmVyUmVmZXJlbmNlPiBGaW5kUmVmZXJlbmNlcyAoUHJvamVjdCBwcm9q
ZWN0LCBJUAogCQkJZm9yZWFjaCAodmFyIGZpbGUgaW4gZmlsZXMpIHsKIAkJCQlpZiAobW9uaXRv
ciAhPSBudWxsKQogCQkJCQltb25pdG9yLlN0ZXAgKDEpOwotCQkJCXN0cmluZyB0ZXh0ID0gTW9u
by5UZXh0RWRpdG9yLlV0aWxzLlRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZSk7CisJ
CQkJc3RyaW5nIHRleHQ7CisJCQkJdHJ5IHsKKwkJCQkJdGV4dCA9IE1vbm8uVGV4dEVkaXRvci5V
dGlscy5UZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGUpOworCQkJCX0gY2F0Y2ggKEV4
Y2VwdGlvbikgeworCQkJCQljb250aW51ZTsKKwkJCQl9CiAJCQkJaWYgKG1lbWJlck5hbWUgIT0g
bnVsbCAmJiB0ZXh0LkluZGV4T2YgKG1lbWJlck5hbWUsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5h
bCkgPCAwICYmCiAJCQkJCShrZXl3b3JkTmFtZSA9PSBudWxsIHx8IHRleHQuSW5kZXhPZiAoa2V5
d29yZE5hbWUsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbCkgPCAwKSkKIAkJCQkJY29udGludWU7
DQoNCiAgIENvbW1pdDogNTE4MzQxMGVlMmM2ZjQwY2Q0YTYwYjZjYTE4MDlhODFkOWQ4YWMyZA0K
ICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1rcnVlZ2VyQHhhbWFyaW4uY29tPiAobWtydWVnZXIp
DQogICAgIERhdGU6IDIwMTMtMTEtMjAgMTE6MjE6MzAgR01UDQogICAgICBVUkw6IGh0dHBzOi8v
Z2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC81MTgzNDEwZWUyYzZmNDBjZDRhNjBi
NmNhMTgwOWE4MWQ5ZDhhYzJkDQoNCltSZWZhY3RvcmluZ10gQWRkZWQgaW5zdHJ1bWVudGF0aW9u
IHRpbWVyIGZvciBiYWNrZ3JvdW5kIGFuYWx5c2lzLg0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFp
bi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlJlZmFjdG9yaW5nL01vbm9EZXZlbG9wLlJlZmFjdG9y
aW5nL1JlZmFjdG9yaW5nU2VydmljZS5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvTW9u
b0RldmVsb3AuUmVmYWN0b3JpbmcvTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcvUmVmYWN0b3JpbmdT
ZXJ2aWNlLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpAQCAtNDEsNiArNDEsNyBAQAogdXNpbmcgTW9uby5UZXh0
RWRpdG9yOwogdXNpbmcgTW9ub0RldmVsb3AuSWRlLlR5cGVTeXN0ZW07CiB1c2luZyBTeXN0ZW0u
RGlhZ25vc3RpY3M7Cit1c2luZyBNb25vRGV2ZWxvcC5Db3JlLkluc3RydW1lbnRhdGlvbjsKIAog
bmFtZXNwYWNlIE1vbm9EZXZlbG9wLlJlZmFjdG9yaW5nCiB7CkBAIC0yMDQsNDkgKzIwNSwyNiBA
QCBwdWJsaWMgc3RhdGljIFRhc2s8SUVudW1lcmFibGU8Q29kZUFjdGlvbj4+IEdldFZhbGlkQWN0
aW9ucyAoRG9jdW1lbnQgZG9jLCBUZXh0TAogCQkJc3RyaW5nIGRpc2FibGVkTm9kZXMgPSBlZGl0
b3IgIT0gbnVsbCA/IFByb3BlcnR5U2VydmljZS5HZXQgKCJDb250ZXh0QWN0aW9ucy4iICsgZWRp
dG9yLk1pbWVUeXBlLCAiIikgPz8gIiIgOiAiIjsKIAkJCXJldHVybiBUYXNrLkZhY3RvcnkuU3Rh
cnROZXcgKGRlbGVnYXRlIHsKIAkJCQl2YXIgcmVzdWx0ID0gbmV3IExpc3Q8Q29kZUFjdGlvbj4g
KCk7CisJCQkJdmFyIHRpbWVyID0gSW5zdHJ1bWVudGF0aW9uU2VydmljZS5DcmVhdGVUaW1lckNv
dW50ZXIgKCJTb3VyY2UgYW5hbHlzaXMgYmFja2dyb3VuZCB0YXNrIiwgIlNvdXJjZSBhbmFseXNp
cyIpOworCQkJCXRpbWVyLkJlZ2luVGltaW5nICgpOwogCQkJCXRyeSB7Ci0JCQkJCSNpZiBQUk9G
SUxFCi0JCQkJCXZhciBydW5MaXN0ID0gbmV3IExpc3Q8VHVwbGU8bG9uZywgc3RyaW5nPj4gKCk7
Ci0JCQkJCXZhciBnbG9iYWxDbG9jayA9IG5ldyBTdG9wd2F0Y2goKTsKLQkJCQkJZ2xvYmFsQ2xv
Y2suU3RhcnQgKCk7Ci0KLQkJCQkJI2VuZGlmCi0KIAkJCQkJdmFyIHBhcnNlZERvY3VtZW50ID0g
ZG9jLlBhcnNlZERvY3VtZW50OwogCQkJCQlpZiAoZWRpdG9yICE9IG51bGwgJiYgcGFyc2VkRG9j
dW1lbnQgIT0gbnVsbCAmJiBwYXJzZWREb2N1bWVudC5DcmVhdGVSZWZhY3RvcmluZ0NvbnRleHQg
IT0gbnVsbCkgewogCQkJCQkJdmFyIGN0eCA9IHBhcnNlZERvY3VtZW50LkNyZWF0ZVJlZmFjdG9y
aW5nQ29udGV4dCAoZG9jLCBjYW5jZWxsYXRpb25Ub2tlbik7CiAJCQkJCQlpZiAoY3R4ICE9IG51
bGwpIHsKIAkJCQkJCQlmb3JlYWNoICh2YXIgcHJvdmlkZXIgaW4gY29udGV4dEFjdGlvbnMuV2hl
cmUgKGZpeCA9PiBkaXNhYmxlZE5vZGVzLkluZGV4T2YgKGZpeC5JZFN0cmluZywgU3RyaW5nQ29t
cGFyaXNvbi5PcmRpbmFsKSA8IDApKSB7Ci0JCQkJCQkJCSNpZiBQUk9GSUxFCi0JCQkJCQkJCXZh
ciBjbG9jayA9IG5ldyBTdG9wd2F0Y2goKTsKLQkJCQkJCQkJY2xvY2suU3RhcnQgKCk7Ci0JCQkJ
CQkJCSNlbmRpZgogCQkJCQkJCQl0cnkgewogCQkJCQkJCQkJcmVzdWx0LkFkZFJhbmdlIChwcm92
aWRlci5HZXRBY3Rpb25zIChkb2MsIGN0eCwgbG9jLCBjYW5jZWxsYXRpb25Ub2tlbikpOwogCQkJ
CQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIAkJCQkJCQkJCUxvZ2dpbmdTZXJ2aWNlLkxv
Z0Vycm9yICgiRXJyb3IgaW4gY29udGV4dCBhY3Rpb24gcHJvdmlkZXIgIiArIHByb3ZpZGVyLlRp
dGxlLCBleCk7CiAJCQkJCQkJCX0KLQkJCQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJCQkJY2xvY2su
U3RvcCAoKTsKLQkJCQkJCQkJbG9jayAocnVuTGlzdCkgewotCQkJCQkJCQkJcnVuTGlzdC5BZGQg
KFR1cGxlLkNyZWF0ZSAoY2xvY2suRWxhcHNlZE1pbGxpc2Vjb25kcywgcHJvdmlkZXIuVGl0bGUp
KTsgCi0JCQkJCQkJCX0KLQkJCQkJCQkJI2VuZGlmCiAJCQkJCQkJfQogCQkJCQkJfQogCQkJCQl9
Ci0JCQkJCSNpZiBQUk9GSUxFCi0JCQkJCWdsb2JhbENsb2NrLlN0b3AgKCk7Ci0JCQkJCXJ1bkxp
c3QuU29ydCAoKTsKLQkJCQkJQ29uc29sZS5Xcml0ZUxpbmUgKCJBbGw6ICIgKyBnbG9iYWxDbG9j
ay5FbGFwc2VkTWlsbGlzZWNvbmRzICsibXMiKTsKLQkJCQkJZm9yZWFjaCAodmFyIGl0ZW0gaW4g
cnVuTGlzdCkgewotCQkJCQkJaWYgKGl0ZW0uSXRlbTEgPT0gMCkKLQkJCQkJCQljb250aW51ZTsK
LQkJCQkJCUNvbnNvbGUuV3JpdGVMaW5lIChpdGVtLkl0ZW0xICsibXNcdDogIiArIGl0ZW0uSXRl
bTIpOwotCQkJCQl9Ci0JCQkJCSNlbmRpZgogCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewog
CQkJCQlMb2dnaW5nU2VydmljZS5Mb2dFcnJvciAoIkVycm9yIGluIGFuYWx5c2lzIHNlcnZpY2Ui
LCBleCk7CisJCQkJfSBmaW5hbGx5IHsKKwkJCQkJdGltZXIuRW5kVGltaW5nICgpOwogCQkJCX0K
IAkJCQlyZXR1cm4gKElFbnVtZXJhYmxlPENvZGVBY3Rpb24+KXJlc3VsdDsKIAkJCX0sIGNhbmNl
bGxhdGlvblRva2VuKTsNCg0KICAgQ29tbWl0OiA2ZmMwNzIxOTcwNDg3N2JkNWM1ZDAzYzdlZjhi
NWI2MDkwZjcyNWRkDQogICBBdXRob3I6IEplZmZyZXkgU3RlZGZhc3QgPGplZmZAeGFtYXJpbi5j
b20+IChqc3RlZGZhc3QpDQogICAgIERhdGU6IDIwMTMtMTEtMjAgMjA6NTM6NTIgR01UDQogICAg
ICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC82ZmMwNzIx
OTcwNDg3N2JkNWM1ZDAzYzdlZjhiNWI2MDkwZjcyNWRkDQoNCmJ1bXBlZCBtZC1hZGRpbnMNCg0K
Q2hhbmdlZCBwYXRoczoKICBNIHZlcnNpb24tY2hlY2tzCg0KTW9kaWZpZWQ6IHZlcnNpb24tY2hl
Y2tzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpAQCAtMTcsNyArMTcsNyBAQCBERVBbMF09bWQtYWRkaW5zCiBERVBf
TkFNRVswXT1NREFERElOUwogREVQX1BBVEhbMF09JHt0b3Bfc3JjZGlyfS8uLi9tZC1hZGRpbnMK
IERFUF9NT0RVTEVbMF09Z2l0QGdpdGh1Yi5jb206eGFtYXJpbi9tZC1hZGRpbnMuZ2l0Ci1ERVBf
TkVFREVEX1ZFUlNJT05bMF09ZmYyNWVhOTA3NmI3YTgwZmJiNTJiY2RhODI3OTQ1NzlmMmFhNTc1
YgorREVQX05FRURFRF9WRVJTSU9OWzBdPTM5M2JhNGJhOTQ2M2U4MmZhOWI4ZGM3OGExYjQwMWQ2
NGExNDQxNTUKIERFUF9CUkFOQ0hfQU5EX1JFTU9URVswXT0ibWFzdGVyIG9yaWdpbi9tYXN0ZXIi
CiAKICMgaGVhcC1zaG90DQoNCiAgIENvbW1pdDogNTIyZjc5NTRlMTQ4NmUwY2QyMDIwZjMxYTY0
ODZiZTc2NTUyOWZlZg0KICAgQXV0aG9yOiBBbGFuIE1jR292ZXJuIDxhbGFuQHhhbWFyaW4uY29t
PiAoYWxhbm1jZ292ZXJuKQ0KICAgICBEYXRlOiAyMDEzLTExLTIwIDIyOjIwOjMyIEdNVA0KICAg
ICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvNTIyZjc5
NTRlMTQ4NmUwY2QyMDIwZjMxYTY0ODZiZTc2NTUyOWZlZg0KDQpbR2l0XSBEaXNhYmxlIHRoZXNl
IDQgbmV3IHRlc3RzIHVudGlsIHRoZXkgY2FuIGJlIG1hZGUgZ3JlZW4gb24gTWFjDQoNCkNoYW5n
ZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3Au
VmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5VGVzdHMuY3MKDQpNb2Rp
ZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNpb25D
b250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpA
QCAtMTYyLDYgKzE2Miw3IEBAIHByb3RlY3RlZCBvdmVycmlkZSB2b2lkIEJsYW1lRXh0cmFJbnRl
cm5hbHMgKEFubm90YXRpb24gW10gYW5ub3RhdGlvbnMpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJ
W0lnbm9yZSAoInRoaXMgaXMgYSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHll
dCIpXQ0KIAkJcHVibGljIHZvaWQgVGVzdEdpdFN0YXNoICgpDQogCQl7DQogCQkJdmFyIHJlcG8y
ID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCkBAIC0xNzYsNiArMTc3LDcgQEAgcHVibGljIHZvaWQg
VGVzdEdpdFN0YXNoICgpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJW0lnbm9yZSAoInRoaXMgaXMg
YSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHlldCIpXQ0KIAkJcHVibGljIHZv
aWQgVGVzdEdpdEJyYW5jaENyZWF0aW9uICgpDQogCQl7DQogCQkJdmFyIHJlcG8yID0gKEdpdFJl
cG9zaXRvcnkpUmVwbzsNCkBAIC0yMDQsNiArMjA2LDcgQEAgcHVibGljIHZvaWQgVGVzdEdpdEJy
YW5jaENyZWF0aW9uICgpCiAJCX0NCiANCiAJCVtUZXN0XQ0KKwkJW0lnbm9yZSAoInRoaXMgaXMg
YSBuZXcgdGVzdCB3aGljaCBkb2Vzbid0IHBhc3Mgb24gTWFjIHlldCIpXQ0KIAkJcHVibGljIHZv
aWQgVGVzdEdpdFN5bmNCcmFuY2hlcyAoKQ0KIAkJew0KIAkJCXZhciByZXBvMiA9IChHaXRSZXBv
c2l0b3J5KVJlcG87DQpAQCAtMzA3LDYgKzMxMCw3IEBAIHB1YmxpYyB2b2lkIFRlc3RSZW1vdGUg
KCkKIAkJfQ0KIA0KIAkJW1Rlc3RdDQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdo
aWNoIGRvZXNuJ3QgcGFzcyBvbiBNYWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0SXNNZXJn
ZWQgKCkNCiAJCXsNCiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0NCg0KICAg
Q29tbWl0OiBkYWUzYzBjYjdkMzYwMDE0ZGNhYzJlZDgwZGU0YzdmMjIwYjdjMjc1DQogICBBdXRo
b3I6IFVuZ3VyZWFudSBNYXJpdXMgPHRlcm9tYXJpb0B5YWhvby5jb20+IChUaGVyem9rKQ0KICAg
ICBEYXRlOiAyMDEzLTExLTIwIDIzOjA0OjM1IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1
Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQvZGFlM2MwY2I3ZDM2MDAxNGRjYWMyZWQ4MGRl
NGM3ZjIyMGI3YzI3NQ0KDQpbR2l0XSBSZW1vdmUga2V5Y2hhaW4gc3RvcmFnZSBmb3IgZ2l0IHBh
c3N3b3JkcwoKVW50aWwgd2UgZmluZCBhIGJldHRlciB3YXkgdG8gc3RvcmUgdGhlbSBhbmQgbm90
IGJlIGNvcnJ1cHRlZC4KCkRvd25zaWRlOiBJdCByZXF1aXJlcyBwYXNzIGlucHV0IG9uIGV2ZXJ5
IHB1c2guDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRy
b2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01vbm9EZXZlbG9wLlZlcnNpb25Db250
cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcwoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVy
c2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01vbm9EZXZlbG9wLlZl
cnNpb25Db250cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljIG92ZXJyaWRlIGJvb2wgR2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3Jl
ZGVudGlhbEl0ZW1bXSBpdGVtcykKIAkJCQogCQkJLy8gV2UgYWx3YXlzIG5lZWQgdG8gcnVuIHRo
ZSBUcnlHZXQqIG1ldGhvZHMgYXMgd2UgbmVlZCB0aGUgcGFzc3BocmFzZUl0ZW0vcGFzc3dvcmRJ
dGVtIHBvcHVsYXRlZCBldmVuCiAJCQkvLyBpZiB0aGUgcGFzc3dvcmQgc3RvcmUgY29udGFpbnMg
YW4gaW52YWxpZCBwYXNzd29yZC9ubyBwYXNzd29yZAotCQkJaWYgKFRyeUdldFVzZXJuYW1lUGFz
c3dvcmQgKHVyaSwgaXRlbXMsIG91dCBwYXNzd29yZEl0ZW0pIHx8IFRyeUdldFBhc3NwaHJhc2Ug
KHVyaSwgaXRlbXMsIG91dCBwYXNzcGhyYXNlSXRlbSkpIHsKKwkJCWlmICgvKlRyeUdldFVzZXJu
YW1lUGFzc3dvcmQgKHVyaSwgaXRlbXMsIG91dCBwYXNzd29yZEl0ZW0pIHx8ICovVHJ5R2V0UGFz
c3BocmFzZSAodXJpLCBpdGVtcywgb3V0IHBhc3NwaHJhc2VJdGVtKSkgewogCQkJCS8vIElmIHRo
ZSBwYXNzd29yZCBzdG9yZSBoYXMgYSBwYXNzd29yZCBhbmQgd2UgYWxyZWFkeSB0cmllZCB1c2lu
ZyBpdCwgaXQgY291bGQgYmUgaW5jb3JyZWN0LgogCQkJCS8vIElmIHRoaXMgaGFwcGVucywgZG8g
bm90IHJldHVybiB0cnVlIGFuZCBhc2sgdGhlIHVzZXIgZm9yIGEgbmV3IHBhc3N3b3JkLgogCQkJ
CWlmICghSGFzUmVzZXQpIHsKQEAgLTc1LDkgKzc1LDkgQEAgcHVibGljIG92ZXJyaWRlIGJvb2wg
R2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3JlZGVudGlhbEl0ZW1bXSBpdGVtcykKIAkJCQkKIAkJ
CUhhc1Jlc2V0ID0gZmFsc2U7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJaWYgKHBhc3N3b3JkSXRl
bSAhPSBudWxsKSB7CisJCQkJLyppZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKIAkJCQkJUGFz
c3dvcmRTZXJ2aWNlLkFkZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcgKCkpLCBu
ZXcgc3RyaW5nIChwYXNzd29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKLQkJCQl9IGVsc2UgaWYgKHBh
c3NwaHJhc2VJdGVtICE9IG51bGwpIHsKKwkJCQl9IGVsc2UqLyBpZiAocGFzc3BocmFzZUl0ZW0g
IT0gbnVsbCkgewogCQkJCQlQYXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkg
KHVyaS5Ub1N0cmluZyAoKSksIHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CiAJ
CQl9DQoNCiAgIENvbW1pdDogZTg3YTEyY2ZiZjVhMTRjZWJmMzQ1OTc0MzkzZDlhODdkYzgxZWU3
Nw0KICAgQXV0aG9yOiBVbmd1cmVhbnUgTWFyaXVzIDx0ZXJvbWFyaW9AeWFob28uY29tPiAoVGhl
cnpvaykNCiAgICAgRGF0ZTogMjAxMy0xMS0yMCAyMzoyMjo0MyBHTVQNCiAgICAgIFVSTDogaHR0
cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVsb3AvY29tbWl0L2U4N2ExMmNmYmY1YTE0Y2Vi
ZjM0NTk3NDM5M2Q5YTg3ZGM4MWVlNzcNCg0KW0dpdF0gUHJvcGVybHkgZml4IGtleWNoYWluIHNh
dmluZwoKRGFtbiB5b3UgaGFja2ZpeCENCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2Fk
ZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5HaXQvTW9ub0Rl
dmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L0dpdENyZWRlbnRpYWxzLmNzCg0KTW9kaWZpZWQ6IG1h
aW4vc3JjL2FkZGlucy9WZXJzaW9uQ29udHJvbC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29udHJvbC5H
aXQvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L0dpdENyZWRlbnRpYWxzLmNzDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBHZXQgKFVSSWlz
aCB1cmksIHBhcmFtcyBDcmVkZW50aWFsSXRlbVtdIGl0ZW1zKQogCQkJCiAJCQkvLyBXZSBhbHdh
eXMgbmVlZCB0byBydW4gdGhlIFRyeUdldCogbWV0aG9kcyBhcyB3ZSBuZWVkIHRoZSBwYXNzcGhy
YXNlSXRlbS9wYXNzd29yZEl0ZW0gcG9wdWxhdGVkIGV2ZW4KIAkJCS8vIGlmIHRoZSBwYXNzd29y
ZCBzdG9yZSBjb250YWlucyBhbiBpbnZhbGlkIHBhc3N3b3JkL25vIHBhc3N3b3JkCi0JCQlpZiAo
LypUcnlHZXRVc2VybmFtZVBhc3N3b3JkICh1cmksIGl0ZW1zLCBvdXQgcGFzc3dvcmRJdGVtKSB8
fCAqL1RyeUdldFBhc3NwaHJhc2UgKHVyaSwgaXRlbXMsIG91dCBwYXNzcGhyYXNlSXRlbSkpIHsK
KwkJCWlmIChUcnlHZXRVc2VybmFtZVBhc3N3b3JkICh1cmksIGl0ZW1zLCBvdXQgcGFzc3dvcmRJ
dGVtKSB8fCBUcnlHZXRQYXNzcGhyYXNlICh1cmksIGl0ZW1zLCBvdXQgcGFzc3BocmFzZUl0ZW0p
KSB7CiAJCQkJLy8gSWYgdGhlIHBhc3N3b3JkIHN0b3JlIGhhcyBhIHBhc3N3b3JkIGFuZCB3ZSBh
bHJlYWR5IHRyaWVkIHVzaW5nIGl0LCBpdCBjb3VsZCBiZSBpbmNvcnJlY3QuCiAJCQkJLy8gSWYg
dGhpcyBoYXBwZW5zLCBkbyBub3QgcmV0dXJuIHRydWUgYW5kIGFzayB0aGUgdXNlciBmb3IgYSBu
ZXcgcGFzc3dvcmQuCiAJCQkJaWYgKCFIYXNSZXNldCkgewpAQCAtNzUsOSArNzUsMTAgQEAgcHVi
bGljIG92ZXJyaWRlIGJvb2wgR2V0IChVUklpc2ggdXJpLCBwYXJhbXMgQ3JlZGVudGlhbEl0ZW1b
XSBpdGVtcykKIAkJCQkKIAkJCUhhc1Jlc2V0ID0gZmFsc2U7CiAJCQlpZiAocmVzdWx0KSB7Ci0J
CQkJLyppZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKLQkJCQkJUGFzc3dvcmRTZXJ2aWNlLkFk
ZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcgKCkpLCBuZXcgc3RyaW5nIChwYXNz
d29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKLQkJCQl9IGVsc2UqLyBpZiAocGFzc3BocmFzZUl0ZW0g
IT0gbnVsbCkgeworCQkJCXZhciB1c2VyID0gaXRlbXMuT2ZUeXBlPENyZWRlbnRpYWxJdGVtLlVz
ZXJuYW1lPiAoKS5GaXJzdE9yRGVmYXVsdCAoKTsKKwkJCQlpZiAocGFzc3dvcmRJdGVtICE9IG51
bGwpIHsKKwkJCQkJUGFzc3dvcmRTZXJ2aWNlLkFkZFdlYlVzZXJOYW1lQW5kUGFzc3dvcmQgKG5l
dyBVcmkgKHVyaS5Ub1N0cmluZyAoKSksIHVzZXIuR2V0VmFsdWUgKCksIG5ldyBzdHJpbmcgKHBh
c3N3b3JkSXRlbS5HZXRWYWx1ZSAoKSkpOworCQkJCX0gZWxzZSBpZiAocGFzc3BocmFzZUl0ZW0g
IT0gbnVsbCkgewogCQkJCQlQYXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkg
KHVyaS5Ub1N0cmluZyAoKSksIHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CiAJ
CQl9CkBAIC0xMTgsMTAgKzExOSwxMCBAQCBzdGF0aWMgYm9vbCBUcnlHZXRVc2VybmFtZVBhc3N3
b3JkIChVUklpc2ggdXJpLCBDcmVkZW50aWFsSXRlbVtdIGl0ZW1zLCBvdXQgQ3JlZAogCQkJaWYg
KGl0ZW1zLkxlbmd0aCA9PSAyICYmIHVzZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVs
bCkgewogCQkJCXBhc3N3b3JkSXRlbSA9IHBhc3N3b3JkOwogCi0JCQkJdmFyIHBhc3N3b3JkVmFs
dWUgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViUGFzc3dvcmQgKGFjdHVhbFVybCk7Ci0JCQkJaWYg
KHBhc3N3b3JkVmFsdWUgIT0gbnVsbCkgewotCQkJCQl1c2VybmFtZS5TZXRWYWx1ZSAoYWN0dWFs
VXJsLlVzZXJJbmZvKTsKLQkJCQkJcGFzc3dvcmQuU2V0VmFsdWVOb0NvcHkgKHBhc3N3b3JkVmFs
dWUuVG9BcnJheSAoKSk7CisJCQkJdmFyIGNyZWQgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViVXNl
ck5hbWVBbmRQYXNzd29yZCAoYWN0dWFsVXJsKTsKKwkJCQlpZiAoY3JlZCAhPSBudWxsKSB7CisJ
CQkJCXVzZXJuYW1lLlNldFZhbHVlIChjcmVkLkl0ZW0xKTsKKwkJCQkJcGFzc3dvcmQuU2V0VmFs
dWVOb0NvcHkgKGNyZWQuSXRlbTIuVG9BcnJheSAoKSk7CiAJCQkJCXJldHVybiB0cnVlOwogCQkJ
CX0KIAkJCX0gZWxzZSB7DQoNCiAgIENvbW1pdDogNjA3ZTk1YTdlNjYxYmFlZmE0MDRmMmI4MTQ5
YzRiOTFlODAwYzVmYw0KICAgQXV0aG9yOiBNaWtlIEtyw7xnZXIgPG1rcnVlZ2VyQHhhbWFyaW4u
Y29tPiAobWtydWVnZXIpDQogICAgIERhdGU6IDIwMTMtMTEtMjEgMDY6MDU6MjMgR01UDQogICAg
ICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL21vbm9kZXZlbG9wL2NvbW1pdC82MDdlOTVh
N2U2NjFiYWVmYTQwNGYyYjgxNDljNGI5MWU4MDBjNWZjDQoNCltTb3VyY2VFZGl0b3JdIFBhcnNl
ciBlcnJvciB1bmRlcmxpbmVzIGFyZSBub3cgbW9yZSBwcmVjaXNlLg0KDQpDaGFuZ2VkIHBhdGhz
OgogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVs
b3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvcldpZGdldC5jcwoNCk1vZGlmaWVkOiBtYWluL3Ny
Yy9hZGRpbnMvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yMi9Nb25vRGV2ZWxvcC5Tb3VyY2VFZGl0
b3IvU291cmNlRWRpdG9yV2lkZ2V0LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTcyMCw2ICsxNzIwLDE0
IEBAIHB1YmxpYyBFcnJvck1hcmtlciAoVGV4dERvY3VtZW50IGRvYywgRXJyb3IgaW5mbywgRG9j
dW1lbnRMaW5lIGxpbmUpCiAJCQlXYXZlID0gdHJ1ZTsKIAkJCQogCQkJU3RhcnRDb2wgPSBJbmZv
LlJlZ2lvbi5CZWdpbkNvbHVtbjsKKwkJCXZhciBzdGFydE9mZnNldCA9IGxpbmUuT2Zmc2V0Owor
CQkJd2hpbGUgKFN0YXJ0Q29sIDwgbGluZS5MZW5ndGgpIHsKKwkJCQljaGFyIGNoID0gZG9jLkdl
dENoYXJBdCAoc3RhcnRPZmZzZXQgKyBTdGFydENvbCAtIDEpOworCQkJCWlmICghY2hhci5Jc1do
aXRlU3BhY2UgKGNoKSkKKwkJCQkJYnJlYWs7CisJCQkJU3RhcnRDb2wrKzsKKwkJCX0KKwogCQkJ
aWYgKEluZm8uUmVnaW9uLkVuZENvbHVtbiA+IFN0YXJ0Q29sKSB7CiAJCQkJRW5kQ29sID0gSW5m
by5SZWdpb24uRW5kQ29sdW1uOwogCQkJfSBlbHNlIHsNCg0KICAgQ29tbWl0OiBiNjExZmE2YzZk
YmJiZmY0MmY5Yjk0ZjhjMDhlYmE1NzdmOTFkNDlhDQogICBBdXRob3I6IE1pa2UgS3LDvGdlciA8
bWtydWVnZXJAeGFtYXJpbi5jb20+IChta3J1ZWdlcikNCiAgICAgRGF0ZTogMjAxMy0xMS0yMSAw
NjowNToyMyBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVs
b3AvY29tbWl0L2I2MTFmYTZjNmRiYmJmZjQyZjliOTRmOGMwOGViYTU3N2Y5MWQ0OWENCg0KRml4
ZWQgJ0J1ZyAxNjM2NiAtIEVycm9yIGhpbnRzIGFyZSBub3QgZGlzcGxheWVkIGlmIHRoZSBjb2Rl
IGhhcyBzbWFsbAppbmRlbnQuJy4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vc3JjL2NvcmUv
TW9uby5UZXh0ZWRpdG9yL01vbm8uVGV4dEVkaXRvci9HdWkvVGV4dEFyZWEuY3MKDQpNb2RpZmll
ZDogbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yL0d1aS9UZXh0
QXJlYS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KQEAgLTI2NTMsNyArMjY1Myw3IEBAIHB1YmxpYyBpbnQgUmVw
bGFjZUFsbCAoc3RyaW5nIHdpdGhQYXR0ZXJuKQogCQkKIAkJdm9pZCBTaG93VG9vbHRpcCAoR2Rr
Lk1vZGlmaWVyVHlwZSBtb2RpZmllclN0YXRlKQogCQl7Ci0JCQlpZiAobXggPCBUZXh0Vmlld01h
cmdpbi5YT2Zmc2V0ICsgVGV4dFZpZXdNYXJnaW4uVGV4dFN0YXJ0UG9zaXRpb24pIHsKKwkJCWlm
IChteCA8IFRleHRWaWV3TWFyZ2luLlRleHRTdGFydFBvc2l0aW9uKSB7CiAJCQkJSGlkZVRvb2x0
aXAgKCk7CiAJCQkJcmV0dXJuOwogCQkJfQ0KDQogICBDb21taXQ6IGNiODBiMGJiZmFmNjgzOGUx
YjkyZTM1NmMyNjgyOWFhYWM4M2QwMDANCiAgIEF1dGhvcjogTWlrZSBLcsO8Z2VyIDxta3J1ZWdl
ckB4YW1hcmluLmNvbT4gKG1rcnVlZ2VyKQ0KICAgICBEYXRlOiAyMDEzLTExLTIxIDA3OjAwOjQz
IEdNVA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21t
aXQvY2I4MGIwYmJmYWY2ODM4ZTFiOTJlMzU2YzI2ODI5YWFhYzgzZDAwMA0KDQpGaXhlZCAnQnVn
IDE2MzY4IC0gRG9jdW1lbnQgZm9ybWF0dGluZzogTmV3IGxpbmUgaW5zaWRlL2Fyb3VuZCAjcmVn
aW9uIGltcHJvdmVtZW50PycNCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1haW4vZXh0ZXJuYWwvbnJl
ZmFjdG9yeQoNCk1vZGlmaWVkOiBtYWluL2V4dGVybmFsL25yZWZhY3RvcnkNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
CkBAIC0xICsxIEBACi1TdWJwcm9qZWN0IGNvbW1pdCBlYTc1YmFjM2YzNzQwNjFiYTNjMjhhZTAw
ZjdiOTY1MTg5ZjkzZjMxCitTdWJwcm9qZWN0IGNvbW1pdCA2NTA5ZTc2NDhmNjA1NjQ5ZGNmMDFm
ODI2Yzk2YTU3YzRhNTU1NjliDQoNCiAgIENvbW1pdDogMzFhZDRjMzYxYWMyNTY1ZjJmOWVmOGQ1
OWRhZmFlY2U2OGQwOTljYQ0KICAgQXV0aG9yOiBKw6lyw6ltaWUgTGF2YWwgPGplcmVtaWUubGF2
YWxAZ21haWwuY29tPiAoZ2FydW1hKQ0KICAgICBEYXRlOiAyMDEzLTExLTIxIDE2OjIxOjI1IEdN
VA0KICAgICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vbW9uby9tb25vZGV2ZWxvcC9jb21taXQv
MzFhZDRjMzYxYWMyNTY1ZjJmOWVmOGQ1OWRhZmFlY2U2OGQwOTljYQ0KDQpbYnVpbGRdIEJ1bXAg
bWQtYWRkaW5zDQoNCkNoYW5nZWQgcGF0aHM6CiAgTSB2ZXJzaW9uLWNoZWNrcwoNCk1vZGlmaWVk
OiB2ZXJzaW9uLWNoZWNrcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE3LDcgKzE3LDcgQEAgREVQWzBdPW1k
LWFkZGlucwogREVQX05BTUVbMF09TURBRERJTlMKIERFUF9QQVRIWzBdPSR7dG9wX3NyY2Rpcn0v
Li4vbWQtYWRkaW5zCiBERVBfTU9EVUxFWzBdPWdpdEBnaXRodWIuY29tOnhhbWFyaW4vbWQtYWRk
aW5zLmdpdAotREVQX05FRURFRF9WRVJTSU9OWzBdPTM5M2JhNGJhOTQ2M2U4MmZhOWI4ZGM3OGEx
YjQwMWQ2NGExNDQxNTUKK0RFUF9ORUVERURfVkVSU0lPTlswXT0wMmZjOGZhNzIzNzUzOGEwZGNk
NzQ0ZWQ5ZjE0OWUzZmM2YWJjM2YyCiBERVBfQlJBTkNIX0FORF9SRU1PVEVbMF09Im1hc3RlciBv
cmlnaW4vbWFzdGVyIgogCiAjIGhlYXAtc2hvdA0KDQogICBDb21taXQ6IDQ3OTlmMWMyMmJlYzU4
MTgzNWRmOWE1NjFjMjI5OWJiNDBhYmIxZDQNCiAgIEF1dGhvcjogSsOpcsOpbWllIExhdmFsIDxq
ZXJlbWllLmxhdmFsQGdtYWlsLmNvbT4gKGdhcnVtYSkNCiAgICAgRGF0ZTogMjAxMy0xMS0yMSAx
NjoyNzoxMiBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9ub2RldmVs
b3AvY29tbWl0LzQ3OTlmMWMyMmJlYzU4MTgzNWRmOWE1NjFjMjI5OWJiNDBhYmIxZDQNCg0KTWVy
Z2UgYnJhbmNoICdtYXN0ZXInIGludG8gbW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoCgpDb25mbGlj
dHM6Cgl2ZXJzaW9uLWNoZWNrcw0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbWFpbi9leHRlcm5hbC9t
b25vLWFkZGlucwogIE0gbWFpbi9leHRlcm5hbC9ucmVmYWN0b3J5CiAgTSBtYWluL3NyYy9hZGRp
bnMvQ1NoYXJwQmluZGluZy9Nb25vRGV2ZWxvcC5DU2hhcnAuUmVmYWN0b3JpbmcvQ1NoYXJwUmVm
ZXJlbmNlRmluZGVyLmNzCiAgTSBtYWluL3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuUmVmYWN0b3Jp
bmcvTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcvUmVmYWN0b3JpbmdTZXJ2aWNlLmNzCiAgTSBtYWlu
L3NyYy9hZGRpbnMvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yMi9Nb25vRGV2ZWxvcC5Tb3VyY2VF
ZGl0b3IvU291cmNlRWRpdG9yVmlldy5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL01vbm9EZXZlbG9w
LlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1NvdXJjZUVkaXRvcldpZGdl
dC5jcwogIE0gbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250cm9sL01vbm9EZXZlbG9wLlZlcnNp
b25Db250cm9sLkdpdC5UZXN0cy9CYXNlR2l0UmVwb3NpdG9yeVRlc3RzLmNzCiAgTSBtYWluL3Ny
Yy9hZGRpbnMvVmVyc2lvbkNvbnRyb2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0L01v
bm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9HaXRDcmVkZW50aWFscy5jcwogIE0gbWFpbi9z
cmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlV0aWxzL1RleHRGaWxlVXRp
bGl0eS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9y
LlZpL1ZpTW9kZS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vLlRleHRlZGl0b3IvTW9uby5UZXh0
RWRpdG9yL0d1aS9UZXh0QXJlYS5jcwogIE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5JZGUv
TW9ub0RldmVsb3AuSWRlLlRlbXBsYXRlcy9TaW5nbGVGaWxlRGVzY3JpcHRpb25UZW1wbGF0ZS5j
cwogIE0gbWFpbi9zcmMvY29yZS9Nb25vRGV2ZWxvcC5UZXh0RWRpdG9yLlRlc3RzL01vbm8uVGV4
dEVkaXRvci5UZXN0cy9UZXh0RmlsZVJlYWRlclRlc3RzLmNzCiAgTSB2ZXJzaW9uLWNoZWNrcwoN
Ck1vZGlmaWVkOiBtYWluL2V4dGVybmFsL21vbm8tYWRkaW5zDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMSAr
MSBAQAotU3VicHJvamVjdCBjb21taXQgMGExYzBhMDZlZDczODE5MDZhMjc0NjZhZmE5MWJkODI0
Zjc1ZGUwMgorU3VicHJvamVjdCBjb21taXQgMjFkNzE1YWRlZGFhOWE4YmMxMjU1ZGU3ZGRmMGQy
NDQ1NjIyYzE4Nw0KDQpNb2RpZmllZDogbWFpbi9leHRlcm5hbC9ucmVmYWN0b3J5DQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQpAQCAtMSArMSBAQAotU3VicHJvamVjdCBjb21taXQgZWE3NWJhYzNmMzc0MDYxYmEzYzI4
YWUwMGY3Yjk2NTE4OWY5M2YzMQorU3VicHJvamVjdCBjb21taXQgNjUwOWU3NjQ4ZjYwNTY0OWRj
ZjAxZjgyNmM5NmE1N2M0YTU1NTY5Yg0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL0NTaGFy
cEJpbmRpbmcvTW9ub0RldmVsb3AuQ1NoYXJwLlJlZmFjdG9yaW5nL0NTaGFycFJlZmVyZW5jZUZp
bmRlci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQ1NoYXJwUmVmZXJl
bmNlRmluZGVyIDogUmVmZXJlbmNlRmluZGVyCiAJCUxpc3Q8RmlsZVBhdGg+IGZpbGVzID0gbmV3
IExpc3Q8RmlsZVBhdGg+ICgpOwogCQlMaXN0PFR1cGxlPEZpbGVQYXRoLCBNb25vRGV2ZWxvcC5J
ZGUuR3VpLkRvY3VtZW50Pj4gb3BlbkRvY3VtZW50cyA9IG5ldyBMaXN0PFR1cGxlPEZpbGVQYXRo
LCBNb25vRGV2ZWxvcC5JZGUuR3VpLkRvY3VtZW50Pj4gKCk7CiAJCQotCQlzdHJpbmcgbWVtYmVy
TmFtZTsNCisJCXN0cmluZyBtZW1iZXJOYW1lOwogCQlzdHJpbmcga2V5d29yZE5hbWU7CiAJCQog
CQlwdWJsaWMgQ1NoYXJwUmVmZXJlbmNlRmluZGVyICgpCkBAIC02MywxNyArNjMsMTcgQEAgcHVi
bGljIENTaGFycFJlZmVyZW5jZUZpbmRlciAoKQogCQlwdWJsaWMgdm9pZCBTZXRTZWFyY2hlZE1l
bWJlcnMgKElFbnVtZXJhYmxlPG9iamVjdD4gbWVtYmVycykKIAkJewogCQkJc2VhcmNoZWRNZW1i
ZXJzID0gbmV3IExpc3Q8b2JqZWN0PiAobWVtYmVycyk7Ci0JCQl2YXIgZmlyc3RNZW1iZXIgPSBz
ZWFyY2hlZE1lbWJlcnMuRmlyc3RPckRlZmF1bHQgKCk7DQotCQkJaWYgKGZpcnN0TWVtYmVyIGlz
IElOYW1lZEVsZW1lbnQpIHsNCisJCQl2YXIgZmlyc3RNZW1iZXIgPSBzZWFyY2hlZE1lbWJlcnMu
Rmlyc3RPckRlZmF1bHQgKCk7CisJCQlpZiAoZmlyc3RNZW1iZXIgaXMgSU5hbWVkRWxlbWVudCkg
ewogCQkJCXZhciBuYW1lZEVsZW1lbnQgPSAoSU5hbWVkRWxlbWVudClmaXJzdE1lbWJlcjsKIAkJ
CQl2YXIgbmFtZSA9IG5hbWVkRWxlbWVudC5OYW1lOwogCQkJCWlmIChuYW1lZEVsZW1lbnQgaXMg
SU1ldGhvZCAmJiAoKChJTWV0aG9kKW5hbWVkRWxlbWVudCkuSXNDb25zdHJ1Y3RvciB8ICgoSU1l
dGhvZCluYW1lZEVsZW1lbnQpLklzRGVzdHJ1Y3RvcikpCiAJCQkJCW5hbWUgPSAoKElNZXRob2Qp
bmFtZWRFbGVtZW50KS5EZWNsYXJpbmdUeXBlLk5hbWU7Ci0JCQkJbWVtYmVyTmFtZSA9IG5hbWU7
DQotDQotCQkJCWtleXdvcmROYW1lID0gQ1NoYXJwQW1iaWVuY2UuTmV0VG9DU2hhcnBUeXBlTmFt
ZSAobmFtZWRFbGVtZW50LkZ1bGxOYW1lKTsNCi0JCQkJaWYgKGtleXdvcmROYW1lID09IG5hbWVk
RWxlbWVudC5GdWxsTmFtZSkNCi0JCQkJCWtleXdvcmROYW1lID0gbnVsbDsNCisJCQkJbWVtYmVy
TmFtZSA9IG5hbWU7CisKKwkJCQlrZXl3b3JkTmFtZSA9IENTaGFycEFtYmllbmNlLk5ldFRvQ1No
YXJwVHlwZU5hbWUgKG5hbWVkRWxlbWVudC5GdWxsTmFtZSk7CisJCQkJaWYgKGtleXdvcmROYW1l
ID09IG5hbWVkRWxlbWVudC5GdWxsTmFtZSkKKwkJCQkJa2V5d29yZE5hbWUgPSBudWxsOwogCQkJ
fQogCQkJaWYgKGZpcnN0TWVtYmVyIGlzIHN0cmluZykKIAkJCQltZW1iZXJOYW1lID0gZmlyc3RN
ZW1iZXIuVG9TdHJpbmcgKCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgTWVtYmVyUmVmZXJlbmNlIEdl
dFJlZmVyZW5jZSAoUHJvamVjdCBwcm9qZWN0LCBSZXNvbHZlUmVzdWx0IHJlc3VsdCwgQXN0Tm9k
ZSBub2QKIAkJc2tpcDoKIAogCQkJdmFyIHJlZ2lvbiA9IG5ldyBEb21SZWdpb24gKGZpbGVOYW1l
LCBub2RlLlN0YXJ0TG9jYXRpb24sIG5vZGUuRW5kTG9jYXRpb24pOwotDQorCiAJCQl2YXIgbGVu
Z3RoID0gbm9kZSBpcyBQcmltaXRpdmVUeXBlID8ga2V5d29yZE5hbWUuTGVuZ3RoIDogbm9kZS5F
bmRMb2NhdGlvbi5Db2x1bW4gLSBub2RlLlN0YXJ0TG9jYXRpb24uQ29sdW1uOwogCQkJaWYgKHZh
bGlkID09IG51bGwpCiAJCQkJdmFsaWQgPSBzZWFyY2hlZE1lbWJlcnMuRmlyc3RPckRlZmF1bHQg
KCk7CkBAIC0zMDQsNyArMzA0LDEyIEBAIHB1YmxpYyBvdmVycmlkZSBJRW51bWVyYWJsZTxNZW1i
ZXJSZWZlcmVuY2U+IEZpbmRSZWZlcmVuY2VzIChQcm9qZWN0IHByb2plY3QsIElQCiAJCQlmb3Jl
YWNoICh2YXIgZmlsZSBpbiBmaWxlcykgewogCQkJCWlmIChtb25pdG9yICE9IG51bGwpCiAJCQkJ
CW1vbml0b3IuU3RlcCAoMSk7Ci0JCQkJc3RyaW5nIHRleHQgPSBNb25vLlRleHRFZGl0b3IuVXRp
bHMuVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxlKTsKKwkJCQlzdHJpbmcgdGV4dDsK
KwkJCQl0cnkgeworCQkJCQl0ZXh0ID0gTW9uby5UZXh0RWRpdG9yLlV0aWxzLlRleHRGaWxlVXRp
bGl0eS5SZWFkQWxsVGV4dCAoZmlsZSk7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uKSB7CisJCQkJ
CWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAobWVtYmVyTmFtZSAhPSBudWxsICYmIHRleHQuSW5k
ZXhPZiAobWVtYmVyTmFtZSwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsKSA8IDAgJiYKIAkJCQkJ
KGtleXdvcmROYW1lID09IG51bGwgfHwgdGV4dC5JbmRleE9mIChrZXl3b3JkTmFtZSwgU3RyaW5n
Q29tcGFyaXNvbi5PcmRpbmFsKSA8IDApKQogCQkJCQljb250aW51ZTsNCg0KTW9kaWZpZWQ6IG1h
aW4vc3JjL2FkZGlucy9Nb25vRGV2ZWxvcC5SZWZhY3RvcmluZy9Nb25vRGV2ZWxvcC5SZWZhY3Rv
cmluZy9SZWZhY3RvcmluZ1NlcnZpY2UuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC00MSw2ICs0MSw3IEBA
CiB1c2luZyBNb25vLlRleHRFZGl0b3I7CiB1c2luZyBNb25vRGV2ZWxvcC5JZGUuVHlwZVN5c3Rl
bTsKIHVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKK3VzaW5nIE1vbm9EZXZlbG9wLkNvcmUuSW5z
dHJ1bWVudGF0aW9uOwogCiBuYW1lc3BhY2UgTW9ub0RldmVsb3AuUmVmYWN0b3JpbmcKIHsKQEAg
LTIwNCw0OSArMjA1LDI2IEBAIHB1YmxpYyBzdGF0aWMgVGFzazxJRW51bWVyYWJsZTxDb2RlQWN0
aW9uPj4gR2V0VmFsaWRBY3Rpb25zIChEb2N1bWVudCBkb2MsIFRleHRMCiAJCQlzdHJpbmcgZGlz
YWJsZWROb2RlcyA9IGVkaXRvciAhPSBudWxsID8gUHJvcGVydHlTZXJ2aWNlLkdldCAoIkNvbnRl
eHRBY3Rpb25zLiIgKyBlZGl0b3IuTWltZVR5cGUsICIiKSA/PyAiIiA6ICIiOwogCQkJcmV0dXJu
IFRhc2suRmFjdG9yeS5TdGFydE5ldyAoZGVsZWdhdGUgewogCQkJCXZhciByZXN1bHQgPSBuZXcg
TGlzdDxDb2RlQWN0aW9uPiAoKTsKKwkJCQl2YXIgdGltZXIgPSBJbnN0cnVtZW50YXRpb25TZXJ2
aWNlLkNyZWF0ZVRpbWVyQ291bnRlciAoIlNvdXJjZSBhbmFseXNpcyBiYWNrZ3JvdW5kIHRhc2si
LCAiU291cmNlIGFuYWx5c2lzIik7CisJCQkJdGltZXIuQmVnaW5UaW1pbmcgKCk7CiAJCQkJdHJ5
IHsKLQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJdmFyIHJ1bkxpc3QgPSBuZXcgTGlzdDxUdXBsZTxs
b25nLCBzdHJpbmc+PiAoKTsKLQkJCQkJdmFyIGdsb2JhbENsb2NrID0gbmV3IFN0b3B3YXRjaCgp
OwotCQkJCQlnbG9iYWxDbG9jay5TdGFydCAoKTsKLQotCQkJCQkjZW5kaWYKLQogCQkJCQl2YXIg
cGFyc2VkRG9jdW1lbnQgPSBkb2MuUGFyc2VkRG9jdW1lbnQ7CiAJCQkJCWlmIChlZGl0b3IgIT0g
bnVsbCAmJiBwYXJzZWREb2N1bWVudCAhPSBudWxsICYmIHBhcnNlZERvY3VtZW50LkNyZWF0ZVJl
ZmFjdG9yaW5nQ29udGV4dCAhPSBudWxsKSB7CiAJCQkJCQl2YXIgY3R4ID0gcGFyc2VkRG9jdW1l
bnQuQ3JlYXRlUmVmYWN0b3JpbmdDb250ZXh0IChkb2MsIGNhbmNlbGxhdGlvblRva2VuKTsKIAkJ
CQkJCWlmIChjdHggIT0gbnVsbCkgewogCQkJCQkJCWZvcmVhY2ggKHZhciBwcm92aWRlciBpbiBj
b250ZXh0QWN0aW9ucy5XaGVyZSAoZml4ID0+IGRpc2FibGVkTm9kZXMuSW5kZXhPZiAoZml4Lklk
U3RyaW5nLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWwpIDwgMCkpIHsKLQkJCQkJCQkJI2lmIFBS
T0ZJTEUKLQkJCQkJCQkJdmFyIGNsb2NrID0gbmV3IFN0b3B3YXRjaCgpOwotCQkJCQkJCQljbG9j
ay5TdGFydCAoKTsKLQkJCQkJCQkJI2VuZGlmCiAJCQkJCQkJCXRyeSB7CiAJCQkJCQkJCQlyZXN1
bHQuQWRkUmFuZ2UgKHByb3ZpZGVyLkdldEFjdGlvbnMgKGRvYywgY3R4LCBsb2MsIGNhbmNlbGxh
dGlvblRva2VuKSk7CiAJCQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCQkJCQkJCQkJ
TG9nZ2luZ1NlcnZpY2UuTG9nRXJyb3IgKCJFcnJvciBpbiBjb250ZXh0IGFjdGlvbiBwcm92aWRl
ciAiICsgcHJvdmlkZXIuVGl0bGUsIGV4KTsKIAkJCQkJCQkJfQotCQkJCQkJCQkjaWYgUFJPRklM
RQotCQkJCQkJCQljbG9jay5TdG9wICgpOwotCQkJCQkJCQlsb2NrIChydW5MaXN0KSB7Ci0JCQkJ
CQkJCQlydW5MaXN0LkFkZCAoVHVwbGUuQ3JlYXRlIChjbG9jay5FbGFwc2VkTWlsbGlzZWNvbmRz
LCBwcm92aWRlci5UaXRsZSkpOyAKLQkJCQkJCQkJfQotCQkJCQkJCQkjZW5kaWYKIAkJCQkJCQl9
CiAJCQkJCQl9CiAJCQkJCX0KLQkJCQkJI2lmIFBST0ZJTEUKLQkJCQkJZ2xvYmFsQ2xvY2suU3Rv
cCAoKTsKLQkJCQkJcnVuTGlzdC5Tb3J0ICgpOwotCQkJCQlDb25zb2xlLldyaXRlTGluZSAoIkFs
bDogIiArIGdsb2JhbENsb2NrLkVsYXBzZWRNaWxsaXNlY29uZHMgKyJtcyIpOwotCQkJCQlmb3Jl
YWNoICh2YXIgaXRlbSBpbiBydW5MaXN0KSB7Ci0JCQkJCQlpZiAoaXRlbS5JdGVtMSA9PSAwKQot
CQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJQ29uc29sZS5Xcml0ZUxpbmUgKGl0ZW0uSXRlbTEgKyJt
c1x0OiAiICsgaXRlbS5JdGVtMik7Ci0JCQkJCX0KLQkJCQkJI2VuZGlmCiAJCQkJfSBjYXRjaCAo
RXhjZXB0aW9uIGV4KSB7CiAJCQkJCUxvZ2dpbmdTZXJ2aWNlLkxvZ0Vycm9yICgiRXJyb3IgaW4g
YW5hbHlzaXMgc2VydmljZSIsIGV4KTsKKwkJCQl9IGZpbmFsbHkgeworCQkJCQl0aW1lci5FbmRU
aW1pbmcgKCk7CiAJCQkJfQogCQkJCXJldHVybiAoSUVudW1lcmFibGU8Q29kZUFjdGlvbj4pcmVz
dWx0OwogCQkJfSwgY2FuY2VsbGF0aW9uVG9rZW4pOw0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRk
aW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1Nv
dXJjZUVkaXRvclZpZXcuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC02OTIsMTEgKzY5MiwxNSBAQCBwdWJs
aWMgdm9pZCBTYXZlIChzdHJpbmcgZmlsZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nKQogCQkJCQl2
YXIgd3JpdGVCb20gPSBoYWRCb207CiAJCQkJCXZhciB3cml0ZVRleHQgPSBEb2N1bWVudC5UZXh0
OwogCQkJCQlpZiAod3JpdGVFbmNvZGluZyA9PSBudWxsKSB7Ci0JCQkJCQl3cml0ZUVuY29kaW5n
ID0gRW5jb2RpbmcuVVRGODsKLQkJCQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291
cmNlIGNvbnRyb2wgYXMgZGlmZiwgaXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8g
c2VlIGEgY2hhbmdlIHdpdGhvdXQKLQkJCQkJCS8vIGNoYW5nZWQgZmlsZXMuCi0JCQkJCQl3cml0
ZUJvbSA9IGZhbHNlOwotLy8JCQkJCQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5U
ZXh0RmlsZVV0aWxpdHkuSXNBU0NJSSAod3JpdGVUZXh0KTsKKwkJCQkJCWlmICh0aGlzLmVuY29k
aW5nICE9IG51bGwpIHsKKwkJCQkJCQl3cml0ZUVuY29kaW5nID0gdGhpcy5lbmNvZGluZzsKKwkJ
CQkJCX0gZWxzZSB7IAorCQkJCQkJCXdyaXRlRW5jb2RpbmcgPSBFbmNvZGluZy5VVEY4OworCQkJ
CQkJCS8vIERpc2FibGVkLiBTaG93cyB1cCBpbiB0aGUgc291cmNlIGNvbnRyb2wgYXMgZGlmZiwg
aXQncyBhdG0gY29uZnVzaW5nIGZvciB0aGUgdXNlcnMgdG8gc2VlIGEgY2hhbmdlIHdpdGhvdXQK
KwkJCQkJCQkvLyBjaGFuZ2VkIGZpbGVzLgorCQkJCQkJCXdyaXRlQm9tID0gZmFsc2U7CisJLy8J
CQkJCQl3cml0ZUJvbSA9IU1vbm8uVGV4dEVkaXRvci5VdGlscy5UZXh0RmlsZVV0aWxpdHkuSXNB
U0NJSSAod3JpdGVUZXh0KTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlNb25vLlRleHRFZGl0b3Iu
VXRpbHMuVGV4dEZpbGVVdGlsaXR5LldyaXRlVGV4dCAoZmlsZU5hbWUsIHdyaXRlVGV4dCwgd3Jp
dGVFbmNvZGluZywgd3JpdGVCb20pOwogCQkJCX0gY2F0Y2ggKEludmFsaWRFbmNvZGluZ0V4Y2Vw
dGlvbikgewpAQCAtODM1LDkgKzgzOSw5IEBAIHB1YmxpYyB2b2lkIExvYWQgKHN0cmluZyBmaWxl
TmFtZSwgRW5jb2RpbmcgbG9hZEVuY29kaW5nLCBib29sIHJlbG9hZCA9IGZhbHNlKQogCQkJZWxz
ZSB7CiAJCQkJaW5Mb2FkID0gdHJ1ZTsKIAkJCQlpZiAobG9hZEVuY29kaW5nID09IG51bGwpIHsK
LQkJCQkJdGV4dCA9IFRleHRGaWxlVXRpbGl0eS5SZWFkQWxsVGV4dCAoZmlsZU5hbWUsIG91dCBo
YWRCb20sIG91dCB0aGlzLmVuY29kaW5nKTsKLQkJCQl9Ci0JCQkJZWxzZSB7CisJCQkJCXRleHQg
PSBUZXh0RmlsZVV0aWxpdHkuUmVhZEFsbFRleHQgKGZpbGVOYW1lLCBvdXQgaGFkQm9tLCBvdXQg
ZW5jb2RpbmcpOworCQkJCX0gZWxzZSB7CisJCQkJCWVuY29kaW5nID0gbG9hZEVuY29kaW5nOwog
CQkJCQl0ZXh0ID0gVGV4dEZpbGVVdGlsaXR5LlJlYWRBbGxUZXh0IChmaWxlTmFtZSwgbG9hZEVu
Y29kaW5nLCBvdXQgaGFkQm9tKTsKIAkJCQl9CiAJCQkJaWYgKHJlbG9hZCkgewpAQCAtOTEwLDcg
KzkxNCw3IEBAIGludGVybmFsIHZvaWQgU3RvcmVTZXR0aW5ncyAoKQogCiAJCWJvb2wgd2Fybk92
ZXJ3cml0ZSA9IGZhbHNlOwogCQlib29sIGluTG9hZCA9IGZhbHNlOwotCQlFbmNvZGluZyBlbmNv
ZGluZyA9IG51bGw7CisJCUVuY29kaW5nIGVuY29kaW5nOwogCQlib29sIGhhZEJvbSA9IGZhbHNl
OwogCiAJCWludGVybmFsIHZvaWQgUmVwbGFjZUNvbnRlbnQgKHN0cmluZyBmaWxlTmFtZSwgc3Ry
aW5nIGNvbnRlbnQsIEVuY29kaW5nIGVuY29kaW5nKQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRk
aW5zL01vbm9EZXZlbG9wLlNvdXJjZUVkaXRvcjIvTW9ub0RldmVsb3AuU291cmNlRWRpdG9yL1Nv
dXJjZUVkaXRvcldpZGdldC5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTkyNyw3ICs5MjcsNyBAQCBpbnRl
cm5hbCB2b2lkIENvbnZlcnRMaW5lRW5kaW5ncyAoKQogCQkJCQluZXdUZXh0LkFwcGVuZCAoY29y
cmVjdEVvbCk7CiAJCQl9CiAJCQl2aWV3LlN0b3JlU2V0dGluZ3MgKCk7Ci0JCQl2aWV3LlJlcGxh
Y2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0cmluZyAoKSwgbnVsbCk7
CisJCQl2aWV3LlJlcGxhY2VDb250ZW50IChEb2N1bWVudC5GaWxlTmFtZSwgbmV3VGV4dC5Ub1N0
cmluZyAoKSwgdmlldy5Tb3VyY2VFbmNvZGluZyk7CiAJCQlEb2N1bWVudC5IYXNMaW5lRW5kaW5n
TWlzbWF0Y2hPblRleHRTZXQgPSBmYWxzZTsKIAkJCXZpZXcuTG9hZFNldHRpbmdzICgpOwogCQl9
CkBAIC0xMDczLDcgKzEwNzMsNyBAQCBwdWJsaWMgdm9pZCBTaG93QXV0b1NhdmVXYXJuaW5nIChz
dHJpbmcgZmlsZU5hbWUpCiAJCQkJCQlBdXRvU2F2ZS5SZW1vdmVBdXRvU2F2ZUZpbGUgKGZpbGVO
YW1lKTsKIAkJCQkJCVRleHRFZGl0b3IuR3JhYkZvY3VzICgpOwogCQkJCQkJdmlldy5Mb2FkIChm
aWxlTmFtZSk7Ci0JCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwg
bnVsbCk7CisJCQkJCQl2aWV3LlJlcGxhY2VDb250ZW50IChmaWxlTmFtZSwgY29udGVudCwgdmll
dy5Tb3VyY2VFbmNvZGluZyk7CiAJCQkJCQl2aWV3LldvcmtiZW5jaFdpbmRvdy5Eb2N1bWVudC5S
ZXBhcnNlRG9jdW1lbnQgKCk7CiAJCQkJCQl2aWV3LklzRGlydHkgPSB0cnVlOwogCQkJCQl9IGNh
dGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTE3MjAsNiArMTcyMCwxNCBAQCBwdWJsaWMgRXJyb3JN
YXJrZXIgKFRleHREb2N1bWVudCBkb2MsIEVycm9yIGluZm8sIERvY3VtZW50TGluZSBsaW5lKQog
CQkJV2F2ZSA9IHRydWU7CiAJCQkKIAkJCVN0YXJ0Q29sID0gSW5mby5SZWdpb24uQmVnaW5Db2x1
bW47CisJCQl2YXIgc3RhcnRPZmZzZXQgPSBsaW5lLk9mZnNldDsKKwkJCXdoaWxlIChTdGFydENv
bCA8IGxpbmUuTGVuZ3RoKSB7CisJCQkJY2hhciBjaCA9IGRvYy5HZXRDaGFyQXQgKHN0YXJ0T2Zm
c2V0ICsgU3RhcnRDb2wgLSAxKTsKKwkJCQlpZiAoIWNoYXIuSXNXaGl0ZVNwYWNlIChjaCkpCisJ
CQkJCWJyZWFrOworCQkJCVN0YXJ0Q29sKys7CisJCQl9CisKIAkJCWlmIChJbmZvLlJlZ2lvbi5F
bmRDb2x1bW4gPiBTdGFydENvbCkgewogCQkJCUVuZENvbCA9IEluZm8uUmVnaW9uLkVuZENvbHVt
bjsKIAkJCX0gZWxzZSB7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9hZGRpbnMvVmVyc2lvbkNvbnRy
b2wvTW9ub0RldmVsb3AuVmVyc2lvbkNvbnRyb2wuR2l0LlRlc3RzL0Jhc2VHaXRSZXBvc2l0b3J5
VGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNjIsNiArMTYyLDcgQEAgcHJvdGVjdGVkIG92ZXJy
aWRlIHZvaWQgQmxhbWVFeHRyYUludGVybmFscyAoQW5ub3RhdGlvbiBbXSBhbm5vdGF0aW9ucykK
IAkJfQ0KIA0KIAkJW1Rlc3RdDQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNo
IGRvZXNuJ3QgcGFzcyBvbiBNYWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0U3Rhc2gg
KCkNCiAJCXsNCiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KQEAgLTE3Niw2
ICsxNzcsNyBAQCBwdWJsaWMgdm9pZCBUZXN0R2l0U3Rhc2ggKCkKIAkJfQ0KIA0KIAkJW1Rlc3Rd
DQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNoIGRvZXNuJ3QgcGFzcyBvbiBN
YWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkNCiAJCXsN
CiAJCQl2YXIgcmVwbzIgPSAoR2l0UmVwb3NpdG9yeSlSZXBvOw0KQEAgLTIwNCw2ICsyMDYsNyBA
QCBwdWJsaWMgdm9pZCBUZXN0R2l0QnJhbmNoQ3JlYXRpb24gKCkKIAkJfQ0KIA0KIAkJW1Rlc3Rd
DQorCQlbSWdub3JlICgidGhpcyBpcyBhIG5ldyB0ZXN0IHdoaWNoIGRvZXNuJ3QgcGFzcyBvbiBN
YWMgeWV0IildDQogCQlwdWJsaWMgdm9pZCBUZXN0R2l0U3luY0JyYW5jaGVzICgpDQogCQl7DQog
CQkJdmFyIHJlcG8yID0gKEdpdFJlcG9zaXRvcnkpUmVwbzsNCkBAIC0zMDcsNiArMzEwLDcgQEAg
cHVibGljIHZvaWQgVGVzdFJlbW90ZSAoKQogCQl9DQogDQogCQlbVGVzdF0NCisJCVtJZ25vcmUg
KCJ0aGlzIGlzIGEgbmV3IHRlc3Qgd2hpY2ggZG9lc24ndCBwYXNzIG9uIE1hYyB5ZXQiKV0NCiAJ
CXB1YmxpYyB2b2lkIFRlc3RJc01lcmdlZCAoKQ0KIAkJew0KIAkJCXZhciByZXBvMiA9IChHaXRS
ZXBvc2l0b3J5KVJlcG87DQ0KDQpNb2RpZmllZDogbWFpbi9zcmMvYWRkaW5zL1ZlcnNpb25Db250
cm9sL01vbm9EZXZlbG9wLlZlcnNpb25Db250cm9sLkdpdC9Nb25vRGV2ZWxvcC5WZXJzaW9uQ29u
dHJvbC5HaXQvR2l0Q3JlZGVudGlhbHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC03NSw4ICs3NSw5IEBA
IHB1YmxpYyBvdmVycmlkZSBib29sIEdldCAoVVJJaXNoIHVyaSwgcGFyYW1zIENyZWRlbnRpYWxJ
dGVtW10gaXRlbXMpCiAJCQkJCiAJCQlIYXNSZXNldCA9IGZhbHNlOwogCQkJaWYgKHJlc3VsdCkg
eworCQkJCXZhciB1c2VyID0gaXRlbXMuT2ZUeXBlPENyZWRlbnRpYWxJdGVtLlVzZXJuYW1lPiAo
KS5GaXJzdE9yRGVmYXVsdCAoKTsKIAkJCQlpZiAocGFzc3dvcmRJdGVtICE9IG51bGwpIHsKLQkJ
CQkJUGFzc3dvcmRTZXJ2aWNlLkFkZFdlYlBhc3N3b3JkIChuZXcgVXJpICh1cmkuVG9TdHJpbmcg
KCkpLCBuZXcgc3RyaW5nIChwYXNzd29yZEl0ZW0uR2V0VmFsdWUgKCkpKTsKKwkJCQkJUGFzc3dv
cmRTZXJ2aWNlLkFkZFdlYlVzZXJOYW1lQW5kUGFzc3dvcmQgKG5ldyBVcmkgKHVyaS5Ub1N0cmlu
ZyAoKSksIHVzZXIuR2V0VmFsdWUgKCksIG5ldyBzdHJpbmcgKHBhc3N3b3JkSXRlbS5HZXRWYWx1
ZSAoKSkpOwogCQkJCX0gZWxzZSBpZiAocGFzc3BocmFzZUl0ZW0gIT0gbnVsbCkgewogCQkJCQlQ
YXNzd29yZFNlcnZpY2UuQWRkV2ViUGFzc3dvcmQgKG5ldyBVcmkgKHVyaS5Ub1N0cmluZyAoKSks
IHBhc3NwaHJhc2VJdGVtLkdldFZhbHVlICgpKTsKIAkJCQl9CkBAIC0xMTgsMTAgKzExOSwxMCBA
QCBzdGF0aWMgYm9vbCBUcnlHZXRVc2VybmFtZVBhc3N3b3JkIChVUklpc2ggdXJpLCBDcmVkZW50
aWFsSXRlbVtdIGl0ZW1zLCBvdXQgQ3JlZAogCQkJaWYgKGl0ZW1zLkxlbmd0aCA9PSAyICYmIHVz
ZXJuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewogCQkJCXBhc3N3b3JkSXRlbSA9
IHBhc3N3b3JkOwogCi0JCQkJdmFyIHBhc3N3b3JkVmFsdWUgPSBQYXNzd29yZFNlcnZpY2UuR2V0
V2ViUGFzc3dvcmQgKGFjdHVhbFVybCk7Ci0JCQkJaWYgKHBhc3N3b3JkVmFsdWUgIT0gbnVsbCkg
ewotCQkJCQl1c2VybmFtZS5TZXRWYWx1ZSAoYWN0dWFsVXJsLlVzZXJJbmZvKTsKLQkJCQkJcGFz
c3dvcmQuU2V0VmFsdWVOb0NvcHkgKHBhc3N3b3JkVmFsdWUuVG9BcnJheSAoKSk7CisJCQkJdmFy
IGNyZWQgPSBQYXNzd29yZFNlcnZpY2UuR2V0V2ViVXNlck5hbWVBbmRQYXNzd29yZCAoYWN0dWFs
VXJsKTsKKwkJCQlpZiAoY3JlZCAhPSBudWxsKSB7CisJCQkJCXVzZXJuYW1lLlNldFZhbHVlIChj
cmVkLkl0ZW0xKTsKKwkJCQkJcGFzc3dvcmQuU2V0VmFsdWVOb0NvcHkgKGNyZWQuSXRlbTIuVG9B
cnJheSAoKSk7CiAJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCX0gZWxzZSB7DQoNCk1vZGlm
aWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9Nb25vLlRleHRFZGl0b3IuVXRpbHMv
VGV4dEZpbGVVdGlsaXR5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMTU2LDYgKzE1NiwyNSBAQCBwdWJs
aWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChieXRlW10gYnl0ZXMsIG91dCBFbmNvZGluZyBlbmNv
ZGluZywgb3V0IGJvb2wgaGFkQgogCQkJfQogCQl9CiAKKwkJcHVibGljIHN0YXRpYyBzdHJpbmcg
R2V0VGV4dCAoYnl0ZVtdIGJ5dGVzLCBFbmNvZGluZyBlbmNvZGluZywgb3V0IGJvb2wgaGFkQm9t
KQorCQl7CisJCQlieXRlW10gYm9tID0gZW5jb2RpbmcuR2V0UHJlYW1ibGUgKCk7CisJCQlpZiAo
Ym9tICE9IG51bGwgJiYgYm9tLkxlbmd0aCA+IDAgJiYgYm9tLkxlbmd0aCA8PSBieXRlcy5MZW5n
dGgpIHsKKwkJCQloYWRCb20gPSB0cnVlOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYm9tLkxl
bmd0aDsgaSsrKSB7CisJCQkJCWlmIChieXRlcyBbaV0gIT0gYm9tIFtpXSkgeworCQkJCQkJaGFk
Qm9tID0gZmFsc2U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJ
CQkJaGFkQm9tID0gZmFsc2U7CisJCQl9CisJCQlpZiAoaGFkQm9tKSAKKwkJCQlyZXR1cm4gZW5j
b2RpbmcuR2V0U3RyaW5nIChieXRlcywgYm9tLkxlbmd0aCwgYnl0ZXMuTGVuZ3RoIC0gYm9tLkxl
bmd0aCk7CisJCQlyZXR1cm4gZW5jb2RpbmcuR2V0U3RyaW5nIChieXRlcyk7CisJCX0KKwogCQlw
dWJsaWMgc3RhdGljIHN0cmluZyBHZXRUZXh0IChTdHJlYW0gaW5wdXRTdHJlYW0pCiAJCXsKIAkJ
CXVzaW5nICh2YXIgc3RyZWFtID0gT3BlblN0cmVhbSAoaW5wdXRTdHJlYW0pKSB7CkBAIC0zMDMs
MjEgKzMyMiw4IEBAIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlYWRBbGxUZXh0IChzdHJpbmcgZmls
ZU5hbWUsIEVuY29kaW5nIGVuY29kaW5nLCBvdXQgYm9vbCBoCiAJCQkJdGhyb3cgbmV3IEFyZ3Vt
ZW50TnVsbEV4Y2VwdGlvbiAoImVuY29kaW5nIik7CiAJCQkKIAkJCWJ5dGVbXSBjb250ZW50ID0g
RmlsZS5SZWFkQWxsQnl0ZXMgKGZpbGVOYW1lKTsKLQkJCWJ5dGVbXSBib20gPSBlbmNvZGluZy5H
ZXRQcmVhbWJsZSAoKTsKLQkJCWlmIChib20gIT0gbnVsbCAmJiBib20uTGVuZ3RoID4gMCAmJiBi
b20uTGVuZ3RoIDw9IGNvbnRlbnQuTGVuZ3RoKSB7Ci0JCQkJaGFkQm9tID0gdHJ1ZTsKLQkJCQlm
b3IgKGludCBpID0gMDsgaSA8IGJvbS5MZW5ndGg7IGkrKykgewotCQkJCQlpZiAoY29udGVudCBb
aV0gIT0gYm9tIFtpXSkgewotCQkJCQkJaGFkQm9tPSBmYWxzZTsKLQkJCQkJCWJyZWFrOwotCQkJ
CQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQloYWRCb20gPSBmYWxzZTsKLQkJCX0KLQkJCXJl
dHVybiBlbmNvZGluZy5HZXRTdHJpbmcgKGNvbnRlbnQpOworCQkJcmV0dXJuIEdldFRleHQgKGNv
bnRlbnQsIGVuY29kaW5nLCBvdXQgaGFkQm9tKTsgCiAJCX0KLQogCQkjZW5kcmVnaW9uCiAKIAkJ
I3JlZ2lvbiBBU0NJSSBlbmNvZGluZyBjaGVjaw0KDQpNb2RpZmllZDogbWFpbi9zcmMvY29yZS9N
b25vLlRleHRlZGl0b3IvTW9uby5UZXh0RWRpdG9yLlZpL1ZpTW9kZS5jcw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
QEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIFJlc2V0IChzdHJpbmcgc3RhdHVzKQogCQl7CiAJCQlD
dXJTdGF0ZSA9IFN0YXRlLk5vcm1hbDsKIAkJCVJlc2V0RWRpdG9yU3RhdGUgKERhdGEpOwotCQkJ
CisJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCWNvbW1hbmRCdWZmZXIuTGVuZ3RoID0gMDsK
IAkJCVN0YXR1cyA9IHN0YXR1czsKIAkJfQpAQCAtNjE3LDYgKzYxNyw3IEBAIHByb3RlY3RlZCBv
dmVycmlkZSB2b2lkIEhhbmRsZUtleXByZXNzIChHZGsuS2V5IGtleSwgdWludCB1bmljb2RlS2V5
LCBHZGsuTW9kaWZpCiAJCQkJCQlSdW5BY3Rpb25zIChhY3Rpb24sIENsaXBib2FyZEFjdGlvbnMu
Q3V0KTsKIAkJCQkJU3RhdHVzID0gIi0tIElOU0VSVCAtLSI7CiAJCQkJCUN1clN0YXRlID0gU3Rh
dGUuSW5zZXJ0OworCQkJCQltb3Rpb24gPSBNb3Rpb24uTm9uZTsKIAkJCQkJQ2FyZXQuTW9kZSA9
IENhcmV0TW9kZS5JbnNlcnQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJUmVzZXQgKCJVbnJlY29nbmlz
ZWQgbW90aW9uIik7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm8uVGV4dGVkaXRvci9N
b25vLlRleHRFZGl0b3IvR3VpL1RleHRBcmVhLmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjY1Myw3ICsy
NjUzLDcgQEAgcHVibGljIGludCBSZXBsYWNlQWxsIChzdHJpbmcgd2l0aFBhdHRlcm4pCiAJCQog
CQl2b2lkIFNob3dUb29sdGlwIChHZGsuTW9kaWZpZXJUeXBlIG1vZGlmaWVyU3RhdGUpCiAJCXsK
LQkJCWlmIChteCA8IFRleHRWaWV3TWFyZ2luLlhPZmZzZXQgKyBUZXh0Vmlld01hcmdpbi5UZXh0
U3RhcnRQb3NpdGlvbikgeworCQkJaWYgKG14IDwgVGV4dFZpZXdNYXJnaW4uVGV4dFN0YXJ0UG9z
aXRpb24pIHsKIAkJCQlIaWRlVG9vbHRpcCAoKTsKIAkJCQlyZXR1cm47CiAJCQl9DQoNCk1vZGlm
aWVkOiBtYWluL3NyYy9jb3JlL01vbm9EZXZlbG9wLklkZS9Nb25vRGV2ZWxvcC5JZGUuVGVtcGxh
dGVzL1NpbmdsZUZpbGVEZXNjcmlwdGlvblRlbXBsYXRlLmNzDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjcy
LDcgKzI3MiwxMSBAQCBwdWJsaWMgdmlydHVhbCBTdHJlYW0gQ3JlYXRlRmlsZUNvbnRlbnQgKFNv
bHV0aW9uSXRlbSBwb2xpY3lQYXJlbnQsIFByb2plY3QgcHJvagogCQkJCQljb250ZW50ID0gZm9y
bWF0dGVkOwogCQkJfQogCQkJCi0JCQlNZW1vcnlTdHJlYW0gbXMgPSBuZXcgTWVtb3J5U3RyZWFt
ICgpOworCQkJdmFyIG1zID0gbmV3IE1lbW9yeVN0cmVhbSAoKTsKKworCQkJdmFyIGJvbSA9IEVu
Y29kaW5nLlVURjguR2V0UHJlYW1ibGUgKCk7CisJCQltcy5Xcml0ZSAoYm9tLCAwLCBib20uTGVu
Z3RoKTsKKwogCQkJYnl0ZVtdIGRhdGE7CiAJCQlpZiAoQWRkU3RhbmRhcmRIZWFkZXIpIHsKIAkJ
CQlzdHJpbmcgaGVhZGVyID0gU3RhbmRhcmRIZWFkZXJTZXJ2aWNlLkdldEhlYWRlciAocG9saWN5
UGFyZW50LCBmaWxlTmFtZSwgdHJ1ZSk7DQoNCk1vZGlmaWVkOiBtYWluL3NyYy9jb3JlL01vbm9E
ZXZlbG9wLlRleHRFZGl0b3IuVGVzdHMvTW9uby5UZXh0RWRpdG9yLlRlc3RzL1RleHRGaWxlUmVh
ZGVyVGVzdHMuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xNDMsNiArMTQzLDE4IEBAIHB1YmxpYyB2b2lk
IFRlc3RHQjE4MDMwICgpCiAJCQlieXRlW10gaW5wdXQgPSBFbmNvZGluZy5HZXRFbmNvZGluZyAo
NTQ5MzYpLkdldEJ5dGVzIChzcmMpOwogCQkJQXNzZXJ0LkFyZUVxdWFsIChzcmMsIFRleHRGaWxl
VXRpbGl0eS5HZXRUZXh0IChpbnB1dCkpOwogCQl9CisKKwkJLy8vIDxzdW1tYXJ5PgorCQkvLy8g
QnVnIDE2MzMyIC0gRHVwbGljYXRlIEJPTSEgCisJCS8vLyA8L3N1bW1hcnk+CisJCVtUZXN0KCld
CisJCXB1YmxpYyB2b2lkIFRlc3RCdWcxNjMzMiAoKQkKKwkJeworCQkJYnl0ZVtdIGlucHV0ID0g
bmV3IGJ5dGVbXSB7IDB4RUYsIDB4QkIsIDB4QkYsIChieXRlKSdhJ307CisJCQlib29sIGhhZEJv
bTsKKwkJCUFzc2VydC5BcmVFcXVhbCAoImEiLCBUZXh0RmlsZVV0aWxpdHkuR2V0VGV4dCAoaW5w
dXQsIEVuY29kaW5nLlVURjgsIG91dCBoYWRCb20pKTsKKwkJCUFzc2VydC5Jc1RydWUgKGhhZEJv
bSk7CisJCX0KIAl9CiB9CiANCg0KTW9kaWZpZWQ6IHZlcnNpb24tY2hlY2tzDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpAQCAtMTcsNyArMTcsNyBAQCBERVBbMF09bWQtYWRkaW5zCiBERVBfTkFNRVswXT1NREFERElO
UwogREVQX1BBVEhbMF09JHt0b3Bfc3JjZGlyfS8uLi9tZC1hZGRpbnMKIERFUF9NT0RVTEVbMF09
Z2l0QGdpdGh1Yi5jb206eGFtYXJpbi9tZC1hZGRpbnMuZ2l0Ci1ERVBfTkVFREVEX1ZFUlNJT05b
MF09MTFlNDcxZDBlNDlmMDQwYzdlYWEwYzYwNmM4YjhkOThkYTExOGNiZQorREVQX05FRURFRF9W
RVJTSU9OWzBdPTAyZmM4ZmE3MjM3NTM4YTBkY2Q3NDRlZDlmMTQ5ZTNmYzZhYmMzZjIKIERFUF9C
UkFOQ0hfQU5EX1JFTU9URVswXT0ibW9ub2RldmVsb3AtNC4zLjAtYnJhbmNoIG9yaWdpbi9tb25v
ZGV2ZWxvcC00LjMuMC1icmFuY2giCiAKICMgaGVhcC1zaG90DQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNb25vLXBhdGNoZXMgbWFpbGxpc3QgIC0gIE1v
bm8tcGF0Y2hlc0BsaXN0cy54aW1pYW4uY29tCmh0dHA6Ly9saXN0cy54aW1pYW4uY29tL21haWxt
YW4vbGlzdGluZm8vbW9uby1wYXRjaGVzCg==