[Date Prev][Date Next] [Chronological] [Thread] [Top]

RE: (ITS#5879) LDAPConnection doesn't always uses default constraints for referral handling



This is a multi-part message in MIME format.

------_=_NextPart_001_01C9711D.AD2F41AD
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hello,

Attached is the suggested LDAPConnection.java to fix this issue.=20

Thanks,

Maurice
________________________________________________________________________
________________________________________
Maurice Smulders| Firmware Engineer | Quantum Corporation | Office:
720.249.3817 | Mobile: 720.514.0310 | Maurice.Smulders@quantum.com
-----Original Message-----
From: openldap-its@OpenLDAP.org [mailto:openldap-its@OpenLDAP.org]=20
Sent: Wednesday, January 07, 2009 3:39 PM
To: Maurice Smulders
Subject: Re: (ITS#5879) LDAPConnection doesn't always uses default
constraints for referral handling


*** THIS IS AN AUTOMATICALLY GENERATED REPLY ***

Thanks for your report to the OpenLDAP Issue Tracking System.  Your
report has been assigned the tracking number ITS#5879.

One of our support engineers will look at your report in due course.
Note that this may take some time because our support engineers
are volunteers.  They only work on OpenLDAP when they have spare
time.

If you need to provide additional information in regards to your
issue report, you may do so by replying to this message.  Note that
any mail sent to openldap-its@openldap.org with (ITS#5879)
in the subject will automatically be attached to the issue report.

	mailto:openldap-its@openldap.org?subject=3D(ITS#5879)

You may follow the progress of this report by loading the following
URL in a web browser:
    http://www.OpenLDAP.org/its/index.cgi?findid=3D5879

Please remember to retain your issue tracking number (ITS#5879)
on any further messages you send to us regarding this report.  If
you don't then you'll just waste our time and yours because we
won't be able to properly track the report.

Please note that the Issue Tracking System is not intended to
be used to seek help in the proper use of OpenLDAP Software.
Such requests will be closed.

OpenLDAP Software is user supported.
	http://www.OpenLDAP.org/support/

--------------
Copyright 1998-2007 The OpenLDAP Foundation, All Rights Reserved.


------_=_NextPart_001_01C9711D.AD2F41AD
Content-Type: application/octet-stream;
	name="LDAPConnection.java"
Content-Transfer-Encoding: base64
Content-Description: LDAPConnection.java
Content-Disposition: attachment;
	filename="LDAPConnection.java"

LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCiAqICRPcGVuTERBUDogcGtnL2psZGFwL2NvbS9ub3ZlbGwv
bGRhcC9MREFQQ29ubmVjdGlvbi5qYXZhLHYgMS4xNTQgMjAwNi8wMi8wOSAwODo0Mzo0NSBzdW5p
bGsgRXhwICQNCiAqDQogKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzIE5vdmVsbCwgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLg0KICoNCiAqIFRISVMgV09SSyBJUyBTVUJKRUNUIFRPIFUuUy4g
QU5EIElOVEVSTkFUSU9OQUwgQ09QWVJJR0hUIExBV1MgQU5EDQogKiBUUkVBVElFUy4gVVNFLCBN
T0RJRklDQVRJT04sIEFORCBSRURJU1RSSUJVVElPTiBPRiBUSElTIFdPUksgSVMgU1VCSkVDVA0K
ICogVE8gVkVSU0lPTiAyLjAuMSBPRiBUSEUgT1BFTkxEQVAgUFVCTElDIExJQ0VOU0UsIEEgQ09Q
WSBPRiBXSElDSCBJUw0KICogQVZBSUxBQkxFIEFUIEhUVFA6Ly9XV1cuT1BFTkxEQVAuT1JHL0xJ
Q0VOU0UuSFRNTCBPUiBJTiBUSEUgRklMRSAiTElDRU5TRSINCiAqIElOIFRIRSBUT1AtTEVWRUwg
RElSRUNUT1JZIE9GIFRIRSBESVNUUklCVVRJT04uIEFOWSBVU0UgT1IgRVhQTE9JVEFUSU9ODQog
KiBPRiBUSElTIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIElOIFZFUlNJT04gMi4wLjEg
T0YgVEhFIE9QRU5MREFQDQogKiBQVUJMSUMgTElDRU5TRSwgT1IgT1RIRVIgUFJJT1IgV1JJVFRF
TiBDT05TRU5UIEZST00gTk9WRUxMLCBDT1VMRCBTVUJKRUNUDQogKiBUSEUgUEVSUEVUUkFUT1Ig
VE8gQ1JJTUlOQUwgQU5EIENJVklMIExJQUJJTElUWS4NCiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
DQoNCnBhY2thZ2UgY29tLm5vdmVsbC5sZGFwOw0KDQppbXBvcnQgamF2YS5pby5VbnN1cHBvcnRl
ZEVuY29kaW5nRXhjZXB0aW9uOw0KaW1wb3J0IGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbjsNCmlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQpp
bXBvcnQgamF2YS51dGlsLk1hcDsNCmltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOw0K
DQppbXBvcnQgY29tLm5vdmVsbC5zZWN1cml0eS5zYXNsLio7DQppbXBvcnQgamF2YXguc2VjdXJp
dHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXI7DQoNCmltcG9ydCBjb20ubm92ZWxsLmxk
YXAuKjsNCmltcG9ydCBjb20ubm92ZWxsLmxkYXAuYXNuMS4qOw0KaW1wb3J0IGNvbS5ub3ZlbGwu
bGRhcC5jbGllbnQuKjsNCmltcG9ydCBjb20ubm92ZWxsLmxkYXAuY2xpZW50LkJpbmRQcm9wZXJ0
aWVzOw0KaW1wb3J0IGNvbS5ub3ZlbGwubGRhcC5jbGllbnQuRGVidWc7DQppbXBvcnQgY29tLm5v
dmVsbC5sZGFwLmNsaWVudC5SZWZlcnJhbEluZm87DQppbXBvcnQgY29tLm5vdmVsbC5sZGFwLnJm
YzIyNTEuUmZjQmluZFJlcXVlc3Q7DQppbXBvcnQgY29tLm5vdmVsbC5sZGFwLnJmYzIyNTEuUmZj
QmluZFJlc3BvbnNlOw0KDQovL2ltcG9ydCBjb20ubm92ZWxsLmxkYXAubWVzc2FnZS4qOw0KaW1w
b3J0IGNvbS5ub3ZlbGwubGRhcC5yZXNvdXJjZXMuRXhjZXB0aW9uTWVzc2FnZXM7DQoNCi8qKg0K
ICogVGhlIGNlbnRyYWwgY2xhc3MgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIGNvbm5lY3Rpb24NCiAq
IHRvIGEgZGlyZWN0b3J5IHNlcnZlciB0aHJvdWdoIHRoZSBMREFQIHByb3RvY29sLg0KICogTERB
UENvbm5lY3Rpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBwZXJmb3JtIGNvbW1vbiBMREFQDQogKiBv
cGVyYXRpb25zIHN1Y2ggYXMgc2VhcmNoLCBtb2RpZnkgYW5kIGFkZC4NCiAqDQogKiA8cD5JbiBh
ZGRpdGlvbiwgTERBUENvbm5lY3Rpb24gb2JqZWN0cyBhbGxvdyB5b3UgdG8gYmluZCB0byBhbg0K
ICogTERBUCBzZXJ2ZXIsIHNldCBjb25uZWN0aW9uIGFuZCBzZWFyY2ggY29uc3RyYWludHMsIGFu
ZCBwZXJmb3JtDQogKiBzZXZlcmFsIG90aGVyIHRhc2tzLg0KICoNCiAqIDxwPkFuIExEQVBDb25u
ZWN0aW9uIG9iamVjdCBpcyBub3QgY29ubmVjdGVkIG9uDQogKiBjb25zdHJ1Y3Rpb24gYW5kIGNh
biBvbmx5IGJlIGNvbm5lY3RlZCB0byBvbmUgc2VydmVyIGF0IG9uZQ0KICogcG9ydC4gTXVsdGlw
bGUgdGhyZWFkcyBtYXkgc2hhcmUgdGhpcyBzaW5nbGUgY29ubmVjdGlvbiwgdHlwaWNhbGx5DQog
KiBieSBjbG9uaW5nIHRoZSBjb25uZWN0aW9uIG9iamVjdCwgb25lIGZvciBlYWNoIHRocmVhZC4g
QW4NCiAqIGFwcGxpY2F0aW9uIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgTERBUENvbm5lY3Rpb24g
b2JqZWN0LCBjb25uZWN0ZWQNCiAqIHRvIHRoZSBzYW1lIG9yIGRpZmZlcmVudCBkaXJlY3Rvcnkg
c2VydmVycy48L3A+DQogKg0KICogIDxwPlNhbXBsZSBDb2RlOiA8YSBocmVmPSJodHRwOi8vZGV2
ZWxvcGVyLm5vdmVsbC5jb20vbmRrL2RvYy9zYW1wbGVjb2RlL2psZGFwX3NhbXBsZS9qbGRhcF9z
YW1wbGUvU2VhcmNoLmphdmEuaHRtbCI+U2VhcmNoLmphdmE8L3A+DQogKg0KICovDQpwdWJsaWMg
Y2xhc3MgTERBUENvbm5lY3Rpb24gaW1wbGVtZW50cyBDbG9uZWFibGUNCnsNCiAgICBwcml2YXRl
IExEQVBTZWFyY2hDb25zdHJhaW50cyBkZWZTZWFyY2hDb25zID0gbmV3IExEQVBTZWFyY2hDb25z
dHJhaW50cygpOw0KICAgIHByaXZhdGUgTERBUENvbnRyb2xbXSByZXNwb25zZUN0bHMgPSBudWxs
Ow0KDQogICAgLy8gU3luY2hyb25pemF0aW9uIE9iamVjdCB1c2VkIHRvIHN5bmNocm9uaXplIGFj
Y2VzcyB0byByZXNwb25zZUN0bHMNCiAgICBwcml2YXRlIE9iamVjdCByZXNwb25zZUN0bFNlbWFw
aG9yZSA9IG5ldyBPYmplY3QoKTsNCg0KICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb25uID0gbnVs
bDsNCg0KICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBuYW1lTG9jayA9IG5ldyBPYmplY3QoKTsg
Ly8gcHJvdGVjdCBhZ2VudE51bQ0KICAgIHByaXZhdGUgc3RhdGljIGludCBsQ29ubk51bSA9IDA7
ICAvLyBEZWJ1ZywgTERBUENvbm5lY3Rpb24gbnVtYmVyDQogICAgcHJpdmF0ZSBTdHJpbmcgbmFt
ZTsgICAgICAgICAgICAgLy8gU3RyaW5nIG5hbWUgZm9yIGRlYnVnDQoNCiAgICAvKioNCiAgICAg
KiBVc2VkIHdpdGggc2VhcmNoIHRvIHNwZWNpZnkgdGhhdCB0aGUgc2NvcGUgb2YgZW50cnlzIHRv
IHNlYXJjaCBpcyB0bw0KICAgICAqIHNlYXJjaCBvbmx5IHRoZSBiYXNlIG9iZWN0Lg0KICAgICAq
DQogICAgICo8cD5TQ09QRV9CQVNFID0gMDwvcD4NCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBTQ09QRV9CQVNFICAgPSAwOw0KDQogICAgLyoqDQogICAgICogVXNlZCB3aXRo
IHNlYXJjaCB0byBzcGVjaWZ5IHRoYXQgdGhlIHNjb3BlIG9mIGVudHJ5cyB0byBzZWFyY2ggaXMg
dG8NCiAgICAgKiBzZWFyY2ggb25seSB0aGUgaW1tZWRpYXRlIHN1Ym9yZGluYXRlcyBvZiB0aGUg
YmFzZSBvYmVjdC4NCiAgICAgKg0KICAgICAqPHA+U0NPUEVfT05FID0gMTwvcD4NCiAgICAgKi8N
CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ09QRV9PTkUgICAgPSAxOw0KDQogICAgLyoq
DQogICAgICogVXNlZCB3aXRoIHNlYXJjaCB0byBzcGVjaWZ5IHRoYXQgdGhlIHNjb3BlIG9mIGVu
dHJ5cyB0byBzZWFyY2ggaXMgdG8NCiAgICAgKiBzZWFyY2ggdGhlIGJhc2Ugb2JqZWN0IGFuZCBh
bGwgZW50cmllcyB3aXRoaW4gaXRzIHN1YnRyZWUuDQogICAgICoNCiAgICAgKjxwPlNDT1BFX09O
RSA9IDI8L3A+DQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NPUEVfU1VC
ICAgID0gMjsNCiAgICANCiAgICAvKioNCiAgICAgKiBVc2VkIHdpdGggc2VhcmNoIHRvIHNwZWNp
ZnkgdGhhdCB0aGUgc2NvcGUgb2YgZW50cmllcyB0byBzZWFyY2ggaXMgdG8NCiAgICAgKiBzZWFy
Y2ggdGhlIHN1Ym9yZGluYXRlIHN1YnRyZWUgb2JqZWN0IGFuZCBhbGwgZW50cmllcyB3aXRoaW4g
aXQuDQogICAgICoNCiAgICAgKjxwPlNDT1BFX1NVQk9SRElOQVRFU1VCVFJFRSA9IDQ8L3A+DQog
ICAgICovDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NPUEVfU1VCT1JESU5BVEVTVUJU
UkVFID0gNDsNCg0KICAgIC8qKg0KICAgICAqIFVzZWQgd2l0aCBzZWFyY2ggaW5zdGVhZCBvZiBh
biBhdHRyaWJ1dGUgbGlzdCB0byBpbmRpY2F0ZSB0aGF0IG5vDQogICAgICogYXR0cmlidXRlcyBh
cmUgdG8gYmUgcmV0dXJuZWQuDQogICAgICoNCiAgICAgKjxwPk5PX0FUVFJTID0gIjEuMSI8L3A+
DQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fQVRUUlMgPSAiMS4x
IjsNCg0KICAgIC8qKg0KICAgICAqIFVzZWQgd2l0aCBzZWFyY2ggaW5zdGVhZCBvZiBhbiBhdHRy
aWJ1dGUgbGlzdCB0byBpbmRpY2F0ZSB0aGF0IGFsbA0KICAgICAqIGF0dHJpYnV0ZXMgYXJlIHRv
IGJlIHJldHVybmVkLg0KICAgICAqDQogICAgICo8cD5BTExfVVNFUl9BVFRSUyA9ICIqIjwvcD4N
CiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTExfVVNFUl9BVFRSUyA9
ICIqIjsNCg0KICAgIC8qKg0KICAgICAqIFNwZWNpZmllcyB0aGUgTERBUHYzIHByb3RvY29sIHZl
cnNpb24gd2hlbiBwZXJmb3JtaW5nIGEgYmluZCBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiA8
cD5TcGVjaWZpZXMgTERBUCB2ZXJzaW9uIFYzIG9mIHRoZSBwcm90b2NvbCwgYW5kIGlzIHNwZWNp
ZmllZA0KICAgICAqIHdoZW4gcGVyZm9ybWluZyBiaW5kIG9wZXJhdGlvbnMuDQogICAgICogPHA+
WW91IGNhbiB1c2UgdGhpcyBpZGVudGlmaWVyIGluIHRoZSB2ZXJzaW9uIHBhcmFtZXRlcg0KICAg
ICAqIG9mIHRoZSBiaW5kIG1ldGhvZCB0byBzcGVjaWZ5IGFuIExEQVB2MyBiaW5kLg0KICAgICAq
IExEQVBfVjMgaXMgdGhlIGRlZmF1bHQgcHJvdG9jb2wgdmVyc2lvbjwvcD4NCiAgICAgKg0KICAg
ICAqPHA+TERBUF9WMyA9IDM8L3A+DQogICAgICoNCiAgICAgKiBAc2VlICNiaW5kKGludCwgU3Ry
aW5nLCBieXRlW10pDQogICAgICogQHNlZSAjYmluZChpbnQsIFN0cmluZywgYnl0ZVtdLCBMREFQ
Q29uc3RyYWludHMpDQogICAgICogQHNlZSAjYmluZChpbnQsIFN0cmluZywgYnl0ZVtdLCBMREFQ
UmVzcG9uc2VRdWV1ZSkNCiAgICAgKiBAc2VlICNiaW5kKGludCwgU3RyaW5nLCBieXRlW10sIExE
QVBSZXNwb25zZVF1ZXVlLCBMREFQQ29uc3RyYWludHMpDQogICAgICovDQogICAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgTERBUF9WMyA9IDM7DQoNCiAgICAvKioNCiAgICAgKiBUaGUgZGVmYXVs
dCBwb3J0IG51bWJlciBmb3IgTERBUCBzZXJ2ZXJzLg0KICAgICAqDQogICAgICogPHA+WW91IGNh
biB1c2UgdGhpcyBpZGVudGlmaWVyIHRvIHNwZWNpZnkgdGhlIHBvcnQgd2hlbiBlc3RhYmxpc2hp
bmcNCiAgICAgKiBhIGNsZWFyIHRleHQgY29ubmVjdGlvbiB0byBhIHNlcnZlci4gIFRoaXMgdGhl
IGRlZmF1bHQgcG9ydC48L3A+DQogICAgICoNCiAgICAgKjxwPkRFRkFVTFRfUE9SVCA9IDM4OTwv
cD4NCiAgICAgKg0KICAgICAqIEBzZWUgI2Nvbm5lY3QoU3RyaW5nLCBpbnQpDQogICAgICovDQog
ICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9QT1JUID0gMzg5Ow0KDQoNCiAgICAv
KioNCiAgICAgKiBUaGUgZGVmYXVsdCBTU0wgcG9ydCBudW1iZXIgZm9yIExEQVAgc2VydmVycy4N
CiAgICAgKg0KICAgICAqPHA+REVGQVVMVF9TU0xfUE9SVCA9IDYzNjwvcD4NCiAgICAgKg0KICAg
ICAqIDxwPllvdSBjYW4gdXNlIHRoaXMgaWRlbnRpZmllciB0byBzcGVjaWZ5IHRoZSBwb3J0IHdo
ZW4gZXN0YWJsaXNoaW5nDQogICAgICogYSBhbiBTU0wgY29ubmVjdGlvbiB0byBhIHNlcnZlci48
L3A+Lg0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU1NMX1BP
UlQgPSA2MzY7DQoNCiAgICAvKioNCiAgICAgKiBBIHN0cmluZyB0aGF0IGNhbiBiZSBwYXNzZWQg
aW4gdG8gdGhlIGdldFByb3BlcnR5IG1ldGhvZC4NCiAgICAgKg0KICAgICAqPHA+TERBUF9QUk9Q
RVJUWV9TREsgPSAidmVyc2lvbi5zZGsiPC9wPg0KICAgICAqDQogICAgICogPHA+WW91IGNhbiB1
c2UgdGhpcyBzdHJpbmcgdG8gcmVxdWVzdCB0aGUgdmVyc2lvbiBvZiB0aGUgU0RLPC9wPi4NCiAg
ICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMREFQX1BST1BFUlRZX1NESyA9
ICJ2ZXJzaW9uLnNkayI7DQoNCiAgICAvKioNCiAgICAgKiBBIHN0cmluZyB0aGF0IGNhbiBiZSBw
YXNzZWQgaW4gdG8gdGhlIGdldFByb3BlcnR5IG1ldGhvZC4NCiAgICAgKg0KICAgICAqPHA+TERB
UF9QUk9QRVJUWV9QUk9UT0NPTCA9ICJ2ZXJzaW9uLnByb3RvY29sIjwvcD4NCiAgICAgKg0KICAg
ICAqIDxwPllvdSBjYW4gdXNlIHRoaXMgc3RyaW5nIHRvIHJlcXVlc3QgdGhlIHZlcnNpb24gb2Yg
dGhlDQogICAgICogTERBUCBwcm90b2NvbDwvcD4uDQogICAgICovDQogICAgcHVibGljIHN0YXRp
YyBmaW5hbCBTdHJpbmcgTERBUF9QUk9QRVJUWV9QUk9UT0NPTCA9ICJ2ZXJzaW9uLnByb3RvY29s
IjsNCg0KICAgIC8qKg0KICAgICAqIEEgc3RyaW5nIHRoYXQgY2FuIGJlIHBhc3NlZCBpbiB0byB0
aGUgZ2V0UHJvcGVydHkgbWV0aG9kLg0KICAgICAqDQogICAgICo8cD5MREFQX1BST1BFUlRZX1NF
Q1VSSVRZID0gInZlcnNpb24uc2VjdXJpdHkiPC9wPg0KICAgICAqDQogICAgICogPHA+WW91IGNh
biB1c2UgdGhpcyBzdHJpbmcgdG8gcmVxdWVzdCB0aGUgdHlwZSBvZiBzZWN1cml0eQ0KICAgICAq
IGJlaW5nIHVzZWQ8L3A+Lg0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n
IExEQVBfUFJPUEVSVFlfU0VDVVJJVFkgPSAidmVyc2lvbi5zZWN1cml0eSI7DQoNCiAgICAvKioN
CiAgICAgKiBBIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzZXJ2ZXIgc2h1dGRvd24g
bm90aWZpY2F0aW9uIE9JRC4NCiAgICAgKiBUaGlzIG5vdGlmaWNhdGlvbiBtYXkgYmUgdXNlZCBi
eSB0aGUgc2VydmVyIHRvIGFkdmlzZSB0aGUgY2xpZW50IHRoYXQNCiAgICAgKiB0aGUgc2VydmVy
IGlzIGFib3V0IHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGR1ZSB0byBhbiBlcnJvcg0KICAgICAq
IGNvbmRpdGlvbi4NCiAgICAgKg0KICAgICAqPHA+U0VSVkVSX1NIVVRET1dOX09JRCA9ICIxLjMu
Ni4xLjQuMS4xNDY2LjIwMDM2Ig0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIFNFUlZFUl9TSFVURE9XTl9PSUQgPSAiMS4zLjYuMS40LjEuMTQ2Ni4yMDAzNiI7DQoNCiAg
ICAvKioNCiAgICAgKiBUaGUgT0lEIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBTdGFydFRMUyBy
ZXF1ZXN0IGFuZCByZXNwb25zZS4NCiAgICAgKi8NCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgU1RBUlRfVExTX09JRCA9ICIxLjMuNi4xLjQuMS4xNDY2LjIwMDM3IjsNCg0KICAgIC8q
DQogICAgICogQ29uc3RydWN0b3JzDQogICAgICovDQoNCiAgICAvKioNCiAgICAgKiBDb25zdHJ1
Y3RzIGEgbmV3IExEQVBDb25uZWN0aW9uIG9iamVjdCwgd2hpY2ggcmVwcmVzZW50cyBhIGNvbm5l
Y3Rpb24NCiAgICAgKiB0byBhbiBMREFQIHNlcnZlci4NCiAgICAgKg0KICAgICAqIDxwPkNhbGxp
bmcgdGhlIGNvbnN0cnVjdG9yIGRvZXMgbm90IGFjdHVhbGx5IGVzdGFibGlzaCB0aGUgY29ubmVj
dGlvbi4NCiAgICAgKiBUbyBjb25uZWN0IHRvIHRoZSBMREFQIHNlcnZlciwgdXNlIHRoZSBjb25u
ZWN0IG1ldGhvZC48L3A+DQogICAgICoNCiAgICAgKiBAc2VlICNjb25uZWN0KFN0cmluZywgaW50
KQ0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQQ29ubmVjdGlvbigpDQogICAgew0KICAgICAgICB0
aGlzKCBudWxsKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENv
bnN0cnVjdHMgYSBuZXcgTERBUENvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCB3aWxsIHVzZSB0aGUg
c3VwcGxpZWQNCiAgICAgKiBjbGFzcyBmYWN0b3J5IHRvIGNvbnN0cnVjdCBhIHNvY2tldCBjb25u
ZWN0aW9uIGR1cmluZw0KICAgICAqIExEQVBDb25uZWN0aW9uLmNvbm5lY3QgbWV0aG9kLg0KICAg
ICAqDQogICAgICogIEBwYXJhbSBmYWN0b3J5ICAgICBBbiBvYmplY3QgY2FwYWJsZSBvZiBwcm9k
dWNpbmcgYSBTb2NrZXQuDQogICAgICoNCiAgICAgKiBAc2VlICNjb25uZWN0KFN0cmluZywgaW50
KQ0KICAgICAqIEBzZWUgI2dldFNvY2tldEZhY3RvcnkoKQ0KICAgICAqIEBzZWUgI3NldFNvY2tl
dEZhY3RvcnkoIExEQVBTb2NrZXRGYWN0b3J5KQ0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQQ29u
bmVjdGlvbihMREFQU29ja2V0RmFjdG9yeSBmYWN0b3J5KQ0KICAgIHsNCiAgICAgICAgLy8gR2V0
IGEgdW5pcXVlIGNvbm5lY3Rpb24gbmFtZSBmb3IgZGVidWcNCiAgICAgICAgaWYoIERlYnVnLkxE
QVBfREVCVUcpIHsNCiAgICAgICAgICAgIHN5bmNocm9uaXplZCggbmFtZUxvY2spIHsNCiAgICAg
ICAgICAgICAgICBuYW1lID0gIkxEQVBDb25uZWN0aW9uKCIgKyArK2xDb25uTnVtICsgIik6ICI7
DQogICAgICAgICAgICB9DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVxdWVz
dHMsIG5hbWUgKyAiQ3JlYXRlZCIpOw0KICAgICAgICB9DQogICAgICAgIGNvbm4gPSBuZXcgQ29u
bmVjdGlvbiggZmFjdG9yeSApOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQog
ICAgICogQ29uc3RydWN0cyBhIG5ldyBMREFQQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIHdpbGwg
dXNlIHRoZSBzdXBwbGllZA0KICAgICAqIHRpbWVvdXQgdmFsdWUgdG8gY29uc3RydWN0IGEgc29j
a2V0IGNvbm5lY3Rpb24gZHVyaW5nDQogICAgICogTERBUENvbm5lY3Rpb24uY29ubmVjdCBtZXRo
b2Qgd2l0aCB0aGUgc3BlY2lmaWVkIHNvY2tldCANCiAgICAgKiBjb25uZWN0IHRpbWVvdXQgdmFs
dWUuDQogICAgICoNCiAgICAgKiAgQHBhcmFtIHRpbWVvdXQgICAgIEFuIG9iamVjdCBjYXBhYmxl
IG9mIHByb2R1Y2luZyBhIFNvY2tldCANCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgg
dGhlIHNwZWNpZmllZCBTb2NrZXQgQ29ubmVjdCB0aW1lb3V0IHZhbHVlLg0KICAgICAqDQogICAg
ICogQHNlZSAjZ2V0U29ja2V0VGltZU91dCgpDQogICAgICogQHNlZSAjc2V0U29ja2V0VGltZU91
dChpbnQpDQogICAgICovDQogICAgDQogICAgcHVibGljIExEQVBDb25uZWN0aW9uKGludCB0aW1l
b3V0KQ0KICAgIHsNCiAgICAgICAgLy8gR2V0IGEgdW5pcXVlIGNvbm5lY3Rpb24gbmFtZSBmb3Ig
ZGVidWcNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIHN5bmNo
cm9uaXplZCggbmFtZUxvY2spIHsNCiAgICAgICAgICAgICAgICBuYW1lID0gIkxEQVBDb25uZWN0
aW9uKCIgKyArK2xDb25uTnVtICsgIik6ICI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBE
ZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKyAiQ3JlYXRlZCIpOw0KICAgICAg
ICB9DQogICAgICAgIGNvbm4gPSBuZXcgQ29ubmVjdGlvbiggdGltZW91dCApOw0KICAgICAgICBy
ZXR1cm47DQogICAgfQ0KICAgIC8qDQogICAgICogVGhlIGZvbGxvd2luZyBhcmUgbWV0aG9kcyB0
aGF0IGFmZmVjdCB0aGUgb3BlcmF0aW9uIG9mDQogICAgICogTERBUENvbm5lY3Rpb24sIGJ1dCBh
cmUgbm90IExEQVAgcmVxdWVzdHMuDQogICAgICovDQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5z
IGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGggYSBwcml2YXRlIGNvbnRleHQsIGJ1dCBzaGFyaW5n
IHRoZQ0KICAgICAqIG5ldHdvcmsgY29ubmVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuDQogICAgICoN
CiAgICAgKiA8cD5UaGUgbmV0d29yayBjb25uZWN0aW9uIHJlbWFpbnMgb3BlbiB1bnRpbCBhbGwg
Y2xvbmVzIGhhdmUNCiAgICAgKiBkaXNjb25uZWN0ZWQgb3IgZ29uZSBvdXQgb2Ygc2NvcGUuIEFu
eSBjb25uZWN0aW9uIG9wZW5lZCBhZnRlcg0KICAgICAqIGNsb25pbmcgaXMgcHJpdmF0ZSB0byB0
aGUgb2JqZWN0IG1ha2luZyB0aGUgY29ubmVjdGlvbi48L3A+DQogICAgICoNCiAgICAgKiA8cD5U
aGUgY2xvbmUgY2FuIGlzc3VlIHJlcXVlc3RzIGFuZCBmcmVlbHkgbW9kaWZ5IG9wdGlvbnMgYW5k
IHNlYXJjaA0KICAgICAqIGNvbnN0cmFpbnRzLCBhbmQgLCB3aXRob3V0IGFmZmVjdGluZyB0aGUg
c291cmNlIG9iamVjdCBvciBvdGhlciBjbG9uZXMuDQogICAgICogSWYgdGhlIGNsb25lIGRpc2Nv
bm5lY3RzIG9yIHJlY29ubmVjdHMsIGl0IGlzIGNvbXBsZXRlbHkgZGlzc29jaWF0ZWQNCiAgICAg
KiBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0IGFuZCBvdGhlciBjbG9uZXMuIFJlYXV0aGVudGljYXRp
bmcgaW4gYSBjbG9uZSwNCiAgICAgKiBob3dldmVyLCBpcyBhIGdsb2JhbCBvcGVyYXRpb24gd2hp
Y2ggd2lsbCBhZmZlY3QgdGhlIHNvdXJjZSBvYmplY3QNCiAgICAgKiBhbmQgYWxsIGFzc29jaWF0
ZWQgY2xvbmVzLCBiZWNhdXNlIGl0IGFwcGxpZXMgdG8gdGhlIHNpbmdsZSBzaGFyZWQNCiAgICAg
KiBwaHlzaWNhbCBjb25uZWN0aW9uLiBBbnkgcmVxdWVzdCBieSBhbiBhc3NvY2lhdGVkIG9iamVj
dCBhZnRlciBvbmUNCiAgICAgKiBoYXMgcmVhdXRoZW50aWNhdGVkIHdpbGwgY2FycnkgdGhlIG5l
dyBpZGVudGl0eS48L3A+DQogICAgICoNCiAgICAgKiBAcmV0dXJuIEEgb2YgdGhlIG9iamVjdC4N
CiAgICAgKi8NCiAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkNCiAgICB7DQogICAgICAgIExEQVBD
b25uZWN0aW9uIG5ld0Nsb25lOw0KICAgICAgICBPYmplY3QgbmV3T2JqOw0KICAgICAgICB0cnkg
ew0KICAgICAgICAgICAgbmV3T2JqID0gc3VwZXIuY2xvbmUoKTsNCiAgICAgICAgICAgIG5ld0Ns
b25lID0gKExEQVBDb25uZWN0aW9uKW5ld09iajsNCiAgICAgICAgfSBjYXRjaCggQ2xvbmVOb3RT
dXBwb3J0ZWRFeGNlcHRpb24gY2UpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJJbnRlcm5hbCBlcnJvciwgY2Fubm90IGNyZWF0ZSBjbG9uZSIpOw0KICAgICAgICB9
DQogICAgICAgIG5ld0Nsb25lLmNvbm4gPSBjb25uOyAgIC8vIHNhbWUgdW5kZXJseWluZyBjb25u
ZWN0aW9uDQogICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1
Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgImNsb25lKCki
KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vbm93IGp1c3QgZHVwbGljYXRlIHRoZSBkZWZTZWFy
Y2hDb25zIGFuZCByZXNwb25zZUN0bHMNCiAgICAgICAgaWYgKGRlZlNlYXJjaENvbnMgIT0gbnVs
bCl7DQogICAgICAgICAgICBuZXdDbG9uZS5kZWZTZWFyY2hDb25zPShMREFQU2VhcmNoQ29uc3Ry
YWludHMpZGVmU2VhcmNoQ29ucy5jbG9uZSgpOw0KICAgICAgICB9DQogICAgICAgIGVsc2V7DQog
ICAgICAgICAgICBuZXdDbG9uZS5kZWZTZWFyY2hDb25zID0gbnVsbDsNCiAgICAgICAgfQ0KICAg
ICAgICBpZiAocmVzcG9uc2VDdGxzICE9IG51bGwpew0KICAgICAgICAgICAgbmV3Q2xvbmUucmVz
cG9uc2VDdGxzID0gbmV3IExEQVBDb250cm9sW3Jlc3BvbnNlQ3Rscy5sZW5ndGhdOw0KICAgICAg
ICAgICAgZm9yKGludCBpPTA7IGkgPCByZXNwb25zZUN0bHMubGVuZ3RoOyBpKyspew0KICAgICAg
ICAgICAgICAgIG5ld0Nsb25lLnJlc3BvbnNlQ3Rsc1tpXSA9IChMREFQQ29udHJvbClyZXNwb25z
ZUN0bHNbaV0uY2xvbmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNl
IHsNCiAgICAgICAgICAgIG5ld0Nsb25lLnJlc3BvbnNlQ3RscyA9IG51bGw7DQogICAgICAgIH0N
CiAgICAgICAgY29ubi5pbmNyQ2xvbmVDb3VudCgpOyAgICAgLy8gSW5jcmVtZW50IHRoZSBjb3Vu
dCBvZiBjbG9uZXMNCiAgICAgICAgcmV0dXJuIG5ld09iajsNCiAgICB9DQoNCiAgICAvKioNCiAg
ICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIG9wZW4sIGFuZCByZWxlYXNlcyBhbnkgb3Ro
ZXIgcmVzb3VyY2VzIGhlbGQNCiAgICAgKiBieSB0aGUgb2JqZWN0Lg0KICAgICAqDQogICAgICog
QGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVk
ZXMgYW4gZXJyb3INCiAgICAgKiBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAg
ICoNCiAgICAgKiBAc2VlICNkaXNjb25uZWN0DQogICAgICovDQogICAgcHJvdGVjdGVkIHZvaWQg
ZmluYWxpemUoKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAg
Ly8gRGlzY29ubmVjdCBkaWQgbm90IGNvbWUgZnJvbSB1c2VyIEFQSSBjYWxsDQogICAgICAgIGRp
c2Nvbm5lY3QoZGVmU2VhcmNoQ29ucywgZmFsc2UpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0K
DQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgcHJvdG9jb2wgdmVyc2lvbiB1c2VzIHRvIGF1
dGhlbnRpY2F0ZS4NCiAgICAgKg0KICAgICAqIDxwPiAwIGlzIHJldHVybmVkIGlmIG5vIGF1dGhl
bnRpY2F0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZC48L3A+DQogICAgICoNCiAgICAgKiBAcmV0dXJu
IFRoZSBwcm90b2wgdmVyc2lvbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiBvciAwDQogICAgICog
bm90IGF1dGhlbnRpY2F0ZWQuDQogICAgICoNCiAgICAgKiBAc2VlICNiaW5kKCBpbnQsIFN0cmlu
ZywgU3RyaW5nKQ0KICAgICAqLw0KICAgIHB1YmxpYyBpbnQgZ2V0UHJvdG9jb2xWZXJzaW9uKCkN
CiAgICB7DQogICAgICAgIEJpbmRQcm9wZXJ0aWVzIHByb3AgPSBjb25uLmdldEJpbmRQcm9wZXJ0
aWVzKCk7DQogICAgICAgIGlmKCBwcm9wID09IG51bGwpIHsNCiAgICAgICAgICAgIHJldHVybiBM
REFQX1YzOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBwcm9wLmdldFByb3RvY29sVmVyc2lv
bigpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIGRpc3Rpbmd1aXNoZWQg
bmFtZSAoRE4pIHVzZWQgZm9yIGFzIHRoZSBiaW5kIG5hbWUgZHVyaW5nDQogICAgICogdGhlIGxh
c3Qgc3VjY2Vzc2Z1bCBiaW5kIG9wZXJhdGlvbi4gIDxjb2RlPm51bGw8L2NvZGU+IGlzIHJldHVy
bmVkDQogICAgICogaWYgbm8gYXV0aGVudGljYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIG9yIGlm
IHRoZSBiaW5kIHJlc3VsdGVkIGluDQogICAgICogYW4gYW9ueW1vdXMgY29ubmVjdGlvbi4NCiAg
ICAgKg0KICAgICAqIEByZXR1cm4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBpZiBhdXRoZW50aWNh
dGVkOyBvdGhlcndpc2UsIG51bGwuDQogICAgICoNCiAgICAgKiBAc2VlICNiaW5kKCBTdHJpbmcs
IFN0cmluZykNCiAgICAgKiBAc2VlICNpc0JvdW5kKCkNCiAgICAgKi8NCiAgICBwdWJsaWMgU3Ry
aW5nIGdldEF1dGhlbnRpY2F0aW9uRE4oKQ0KICAgIHsNCiAgICAgICAgQmluZFByb3BlcnRpZXMg
cHJvcCA9IGNvbm4uZ2V0QmluZFByb3BlcnRpZXMoKTsNCiAgICAgICAgaWYoIHByb3AgPT0gbnVs
bCkgew0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIH0NCiAgICAgICAgaWYoIHBy
b3AuaXNBbm9ueW1vdXMoKSkgew0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIH0N
CiAgICAgICAgcmV0dXJuIHByb3AuZ2V0QXV0aGVudGljYXRpb25ETigpOw0KICAgIH0NCg0KICAg
IC8qKg0KICAgICAqIFJldHVybnMgdGhlIG1ldGhvZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUg
Y29ubmVjdGlvbi4gVGhlIHJldHVybg0KICAgICAqIHZhbHVlIGlzIG9uZSBvZiB0aGUgZm9sbG93
aW5nOg0KICAgICAqDQogICAgICogIDx1bD4NCiAgICAgKiAgPGxpPiJub25lIiBpbmRpY2F0ZXMg
dGhlIGNvbm5lY3Rpb24gaXMgbm90IGF1dGhlbnRpY2F0ZWQuPC9saT4NCiAgICAgKg0KICAgICAq
DQogICAgICogIDxsaT4ic2ltcGxlIiBpbmRpY2F0ZXMgc2ltcGxlIGF1dGhlbnRpY2F0aW9uIHdh
cyB1c2VkIG9yIHRoYXQgYSBudWxsDQogICAgICogICAgICAgICAgICAgICAgIG9yIGVtcHR5IGF1
dGhlbnRpY2F0aW9uIEROIHdhcyBzcGVjaWZpZWQuPC9saT4NCiAgICAgKg0KICAgICAqICA8bGk+
InNhc2wiIGluZGljYXRlcyB0aGF0IGEgU0FTTCBtZWNoYW5pc20gd2FzIHVzZWQgdG8gYXV0aGVu
dGljYXRlPC9saT4NCiAgICAgKiAgPC91bD4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gVGhlIG1l
dGhvZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgY29ubmVjdGlvbi4NCiAgICAgKi8NCiAgICBw
dWJsaWMgU3RyaW5nIGdldEF1dGhlbnRpY2F0aW9uTWV0aG9kKCkNCiAgICB7DQogICAgICAgIEJp
bmRQcm9wZXJ0aWVzIHByb3AgPSBjb25uLmdldEJpbmRQcm9wZXJ0aWVzKCk7DQogICAgICAgIGlm
KCBwcm9wID09IG51bGwpIHsNCiAgICAgICAgICAgIHJldHVybiAic2ltcGxlIjsNCiAgICAgICAg
fQ0KICAgICAgICByZXR1cm4gY29ubi5nZXRCaW5kUHJvcGVydGllcygpLmdldEF1dGhlbnRpY2F0
aW9uTWV0aG9kKCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgcHJvcGVy
dGllcyBpZiBhbnkgc3BlY2lmaWVkIG9uIGJpbmRpbmcgd2l0aCBhDQogICAgICogU0FTTCBtZWNo
YW5pc20uDQogICAgICoNCiAgICAgKiA8cD4gTnVsbCBpcyByZXR1cm5lZCBpZiBubyBhdXRoZW50
aWNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQNCiAgICAgKiBvciBubyBhdXRoZW50aWNhdGlvbiBN
YXAgaXMgcHJlc2VudC48L3A+DQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRoZSBiaW5kIHByb3Bl
cnRpZXMgTWFwIE9iamVjdCB1c2VkIGZvciBTQVNMIGJpbmQgb3IgbnVsbCBpZg0KICAgICAqIHRo
ZSBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50IG9yIG5vdCBhdXRoZW50aWNhdGVkLg0KICAgICAq
DQogICAgICogQHNlZSAjYmluZCggU3RyaW5nLCBTdHJpbmcsIFN0cmluZ1tdLCBNYXAsIE9iamVj
dCApDQogICAgICovDQogICAgcHVibGljIE1hcCBnZXRTYXNsQmluZFByb3BlcnRpZXMoKQ0KICAg
IHsNCiAgICAgICAgQmluZFByb3BlcnRpZXMgcHJvcCA9IGNvbm4uZ2V0QmluZFByb3BlcnRpZXMo
KTsNCiAgICAgICAgaWYoIHByb3AgPT0gbnVsbCkgew0KICAgICAgICAgICAgcmV0dXJuIG51bGw7
DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGNvbm4uZ2V0QmluZFByb3BlcnRpZXMoKS5nZXRT
YXNsQmluZFByb3BlcnRpZXMoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRo
ZSBjYWxsIGJhY2sgaGFuZGxlciBpZiBhbnkgc3BlY2lmaWVkIG9uIGJpbmRpbmcgd2l0aCBhDQog
ICAgICogU0FTTCBtZWNoYW5pc20uDQogICAgICoNCiAgICAgKiA8cD4gTnVsbCBpcyByZXR1cm5l
ZCBpZiBubyBhdXRoZW50aWNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQNCiAgICAgKiBvciBubyBh
dXRoZW50aWNhdGlvbiBjYWxsIGJhY2sgaGFuZGxlciBpcyBwcmVzZW50LjwvcD4NCiAgICAgKg0K
ICAgICAqIEByZXR1cm4gVGhlIGNhbGwgYmFjayBoYW5kbGVyIHVzZWQgZm9yIFNBU0wgYmluZCBv
ciBudWxsIGlmIHRoZQ0KICAgICAqIG9iamVjdCBpcyBub3QgcHJlc2VudCBvciBub3QgYXV0aGVu
dGljYXRlZC4NCiAgICAgKg0KICAgICAqIEBzZWUgI2JpbmQoIFN0cmluZywgU3RyaW5nLCBTdHJp
bmdbXSwgTWFwLCBPYmplY3QgKQ0KICAgICAqLw0KICAgIHB1YmxpYyBPYmplY3QgLyogamF2YXgu
c2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXIgKi8NCiAgICAgICAgICAgICAg
ICAgICAgIGdldFNhc2xCaW5kQ2FsbGJhY2tIYW5kbGVyKCkNCiAgICB7DQogICAgICAgIEJpbmRQ
cm9wZXJ0aWVzIHByb3AgPSBjb25uLmdldEJpbmRQcm9wZXJ0aWVzKCk7DQogICAgICAgIGlmKCBw
cm9wID09IG51bGwpIHsNCiAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICB9DQogICAg
ICAgIHJldHVybiBjb25uLmdldEJpbmRQcm9wZXJ0aWVzKCkuZ2V0U2FzbENhbGxiYWNrSGFuZGxl
cigpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzZXQg
b2YgY29uc3RyYWludHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMNCiAgICAgKiBjb25uZWN0aW9uLiBU
aGVzZSBjb25zdHJhaW50cyBhcHBseSB0byBhbGwgb3BlcmF0aW9ucyBwZXJmb3JtZWQNCiAgICAg
KiB0aHJvdWdoIHRoaXMgY29ubmVjdGlvbiAodW5sZXNzIGEgZGlmZmVyZW50IHNldCBvZiBjb25z
dHJhaW50cyBpcw0KICAgICAqIHNwZWNpZmllZCB3aGVuIGNhbGxpbmcgYW4gb3BlcmF0aW9uIG1l
dGhvZCkuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRoZSBzZXQgb2YgZGVmYXVsdCBjb250cmFp
bnRzIHRoYXQgYXBwbHkgdG8gdGhpcyBjb25uZWN0aW9uLg0KICAgICAqDQogICAgICogQHNlZSAj
c2V0Q29uc3RyYWludHMoTERBUENvbnN0cmFpbnRzKQ0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQ
Q29uc3RyYWludHMgZ2V0Q29uc3RyYWludHMoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChMREFQ
Q29uc3RyYWludHMpKHRoaXMuZGVmU2VhcmNoQ29ucykuY2xvbmUoKTsNCiAgICB9DQoNCiAgICAv
KioNCiAgICAgKiBSZXR1cm5zIHRoZSBob3N0IG5hbWUgb2YgdGhlIExEQVAgc2VydmVyIHRvIHdo
aWNoIHRoZSBvYmplY3QgaXMgb3INCiAgICAgKiB3YXMgbGFzdCBjb25uZWN0ZWQsIGluIHRoZSBm
b3JtYXQgb3JpZ2luYWxseSBzcGVjaWZpZWQuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRoZSBo
b3N0IG5hbWUgb2YgdGhlIExEQVAgc2VydmVyIHRvIHdoaWNoIHRoZSBvYmplY3QgbGFzdA0KICAg
ICAqIGNvbm5lY3RlZCBvciBudWxsIGlmIHRoZSBvYmplY3QgaGFzIG5ldmVyIGNvbm5lY3RlZC4N
CiAgICAgKg0KICAgICAqIEBzZWUgI2Nvbm5lY3QoIFN0cmluZywgaW50KQ0KICAgICAqLw0KICAg
IHB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpDQogICAgew0KICAgICAgICByZXR1cm4gY29ubi5nZXRI
b3N0KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgcG9ydCBudW1iZXIg
b2YgdGhlIExEQVAgc2VydmVyIHRvIHdoaWNoIHRoZSBvYmplY3QgaXMgb3INCiAgICAgKiB3YXMg
bGFzdCBjb25uZWN0ZWQuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRoZSBwb3J0IG51bWJlciBv
ZiB0aGUgTERBUCBzZXJ2ZXIgdG8gd2hpY2ggdGhlIG9iamVjdCBsYXN0DQogICAgICogY29ubmVj
dGVkIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5ldmVyIGNvbm5lY3RlZC4NCiAgICAgKg0KICAg
ICAqIEBzZWUgI2Nvbm5lY3QoIFN0cmluZywgaW50KQ0KICAgICAqLw0KICAgIHB1YmxpYyBpbnQg
Z2V0UG9ydCgpDQogICAgew0KICAgICAgICByZXR1cm4gY29ubi5nZXRQb3J0KCk7DQogICAgfQ0K
DQogICAgLyoqDQogICAgICogUmV0dXJucyBhIHByb3BlcnR5IG9mIGEgY29ubmVjdGlvbiBvYmpl
Y3QuDQogICAgICoNCiAgICAgKiAgQHBhcmFtIG5hbWUgICBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0
byBiZSByZXR1cm5lZC4NCiAgICAgKg0KICAgICAqIDxwPlRoZSBmb2xsb3dpbmcgcmVhZC1vbmx5
IHByb3BlcnRpZXMgYXJlIGF2YWlsYWJsZQ0KICAgICAqICBmb3IgYW55IGdpdmVuIGNvbm5lY3Rp
b246PC9wPg0KICAgICAqICA8dWw+DQogICAgICogIDxsaT5MREFQX1BST1BFUlRZX1NESyByZXR1
cm5zIHRoZSB2ZXJzaW9uIG9mIHRoaXMgU0RLLA0KICAgICAqICAgICAgICAgICAgICAgICAgICAg
ICAgYXMgYSBGbG9hdCBkYXRhIHR5cGUuPC9saT4NCiAgICAgKg0KICAgICAqICA8bGk+TERBUF9Q
Uk9QRVJUWV9QUk9UT0NPTCByZXR1cm5zIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIG9m
DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBMREFQIHByb3RvY29sLCBhcyBh
IEZsb2F0IGRhdGEgdHlwZS48L2xpPg0KICAgICAqDQogICAgICogIDxsaT5MREFQX1BST1BFUlRZ
X1NFQ1VSSVRZIHJldHVybnMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUNCiAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgb2YgYXV0aGVudGljYXRpb24gc3VwcG9y
dGVkLCBhcyBhDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy4NCiAg
ICAgKiAgPC91bD4NCiAgICAgKg0KICAgICAqICA8cD5BIGRlZXAgY29weSBvZiB0aGUgcHJvcGVy
dHkgaXMgcHJvdmlkZWQgd2hlcmUgYXBwbGljYWJsZTsgYQ0KICAgICAqICBjbGllbnQgZG9lcyBu
b3QgbmVlZCB0byBjbG9uZSB0aGUgb2JqZWN0IHJlY2VpdmVkLjwvcD4NCiAgICAgKg0KICAgICAq
ICBAcmV0dXJuIFRoZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJvcGVy
dHksDQogICAgICogIG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkLg0KICAg
ICAqDQogICAgICogQHNlZSBMREFQQ29uc3RyYWludHMjZ2V0UHJvcGVydHkoU3RyaW5nKQ0KICAg
ICAqIEBzZWUgTERBUENvbnN0cmFpbnRzI3NldFByb3BlcnR5KFN0cmluZywgT2JqZWN0KQ0KICAg
ICAqLw0KICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpDQogICAgew0K
ICAgICAgICBpZiAobmFtZS5lcXVhbHNJZ25vcmVDYXNlKExEQVBfUFJPUEVSVFlfU0RLKSkNCiAg
ICAgICAgICAgIHJldHVybiBjb25uLnNkazsNCiAgICAgICAgZWxzZSBpZiAobmFtZS5lcXVhbHNJ
Z25vcmVDYXNlKExEQVBfUFJPUEVSVFlfUFJPVE9DT0wpKQ0KICAgICAgICAgICAgcmV0dXJuIGNv
bm4ucHJvdG9jb2w7DQogICAgICAgIGVsc2UgaWYgKG5hbWUuZXF1YWxzSWdub3JlQ2FzZShMREFQ
X1BST1BFUlRZX1NFQ1VSSVRZKSkNCiAgICAgICAgICAgIHJldHVybiBjb25uLnNlY3VyaXR5Ow0K
ICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICB9DQogICAg
fQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHNldCBvZiBzZWFyY2gg
Y29uc3RyYWludHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMNCiAgICAgKiBjb25uZWN0aW9uLiBUaGVz
ZSBjb25zdHJhaW50cyBhcHBseSB0byBzZWFyY2ggb3BlcmF0aW9ucyBwZXJmb3JtZWQNCiAgICAg
KiB0aHJvdWdoIHRoaXMgY29ubmVjdGlvbiAodW5sZXNzIGEgZGlmZmVyZW50IHNldCBvZg0KICAg
ICAqIGNvbnN0cmFpbnRzIGlzIHNwZWNpZmllZCB3aGVuIGNhbGxpbmcgdGhlIHNlYXJjaCBvcGVy
YXRpb24gbWV0aG9kKS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gVGhlIHNldCBvZiBkZWZhdWx0
IHNlYXJjaCBjb250cmFpbnRzIHRoYXQgYXBwbHkgdG8NCiAgICAgKiB0aGlzIGNvbm5lY3Rpb24u
DQogICAgICoNCiAgICAgKiBAc2VlICNzZXRDb25zdHJhaW50cw0KICAgICAqIEBzZWUgI3NlYXJj
aCggU3RyaW5nLCBpbnQsIFN0cmluZywgU3RyaW5nW10sIGJvb2xlYW4sIExEQVBTZWFyY2hDb25z
dHJhaW50cykNCiAgICAgKi8NCiAgICBwdWJsaWMgTERBUFNlYXJjaENvbnN0cmFpbnRzIGdldFNl
YXJjaENvbnN0cmFpbnRzKCkNCiAgICB7DQogICAgICAgIHJldHVybiAoTERBUFNlYXJjaENvbnN0
cmFpbnRzKXRoaXMuZGVmU2VhcmNoQ29ucy5jbG9uZSgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAg
ICAqIFJldHVybnMgdGhlIExEQVBTb2NrZXRGYWN0b3J5IHVzZWQgdG8gZXN0YWJsaXNoIHRoaXMg
c2VydmVyIGNvbm5lY3Rpb24uDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRoZSBMREFQU29ja2V0
RmFjdG9yeSB1c2VkIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24uDQogICAgICoNCiAgICAgKiBA
c2VlICNMREFQQ29ubmVjdGlvbiggTERBUFNvY2tldEZhY3RvcnkpDQogICAgICogQHNlZSAjc2V0
U29ja2V0RmFjdG9yeSggTERBUFNvY2tldEZhY3RvcnkpDQogICAgICovDQogICAgcHVibGljIExE
QVBTb2NrZXRGYWN0b3J5IGdldFNvY2tldEZhY3RvcnkoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJu
IGNvbm4uZ2V0U29ja2V0RmFjdG9yeSgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEluZGlj
YXRlcyB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGF1dGhlbnRpY2F0ZWQgdG8gdGhlIGNvbm5lY3Rl
ZCBMREFQDQogICAgICogc2VydmVyLg0KICAgICAqDQogICAgICogQHJldHVybiBUcnVlIGlmIHRo
ZSBvYmplY3QgaGFzIGF1dGhlbnRpY2F0ZWQ7IGZhbHNlIGlmIGl0IGhhcyBub3QNCiAgICAgKiBh
dXRoZW50aWNhdGVkLg0KICAgICAqDQogICAgICogQHNlZSAjYmluZCggU3RyaW5nLCBTdHJpbmcp
DQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNCb3VuZCgpDQogICAgew0KICAgICAgICBy
ZXR1cm4gY29ubi5pc0JvdW5kKCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSW5kaWNhdGVz
IHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhpcyBvYmplY3QgaXMgb3Bl
bg0KICAgICAqIGF0IHRoaXMgdGltZS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gIFRydWUgaWYg
Y29ubmVjdGlvbiBpcyBvcGVuOyBmYWxzZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuDQog
ICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWQoKQ0KICAgIHsNCiAgICAgICAg
cmV0dXJuIGNvbm4uaXNDb25uZWN0ZWQoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaGVj
a3Mgd2hldGhlciB0aGUgY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGlzIG9iamVjdCBpcyBz
dGlsbA0KICAgICAqIGFsaXZlIG9yIG5vdC4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gIFRydWUg
aWYgY29ubmVjdGlvbiBpcyBhbGl2ZTsgZmFsc2UgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2Vk
Lg0KICAgICAqLw0KICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGlvbkFsaXZlKCkNCiAgICB7
DQogICAgICAgICAgIHJldHVybiBjb25uLmlzQ29ubmVjdGlvbkFsaXZlKCk7DQogICAgfQ0KICAg
IC8qKg0KICAgICAqIEluZGljYXRhdGVzIGlmIHRoZSBjb25uZWN0aW9uIGlzIHByb3RlY3RlZCBi
eSBUTFMuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIElmIHN0YXJ0VExTIGhhcyBjb21wbGV0ZWQg
dGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLg0KICAgICAqIElmIHN0b3BUTFMgaGFzIGNvbXBsZXRl
ZCBvciBzdGFydCB0bHMgZmFpbGVkLCB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLg0KICAgICAq
DQogICAgICogQHJldHVybiAgVHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBwcm90ZWN0ZWQgYnkg
VExTLg0KICAgICAqDQogICAgICogQHNlZSAjc3RhcnRUTFMNCiAgICAgKiBAc2VlICNzdG9wVExT
DQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNUTFMoKQ0KICAgIHsNCiAgICAgICByZXR1
cm4gY29ubi5pc1RMUygpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIFNv
Y2tldFRpbWVPdXQgdmFsdWUgc2V0Lg0KICAgICAqDQogICAgICogQHJldHVybiBSZXR1cm5zIHRo
ZSBTb2NrZXRUaW1lT3V0IHZhbHVlIGlmIHNldCwgZWxzZSAwDQogICAgICoNCiAgICAgKkBzZWUg
I3NldFNvY2tldFRpbWVPdXQoaW50KQ0KICAgICAqLw0KICAgIA0KICAgIHB1YmxpYyBpbnQgZ2V0
U29ja2V0VGltZU91dCgpDQogICAgew0KICAgICAgICByZXR1cm4gY29ubi5nZXRTb2NrZXRUaW1l
T3V0KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0cyB0aGUgU29ja2V0VGltZU91dCB2
YWx1ZS4NCiAgICAgKg0KICAgICAqQHNlZSAjZ2V0U29ja2V0VGltZU91dCgpDQogICAgICovDQoN
CiAgICBwdWJsaWMgdm9pZCBzZXRTb2NrZXRUaW1lT3V0KGludCB0aW1lb3V0KQ0KICAgIHsNCiAg
ICAgICAgY29ubi5zZXRTb2NrZXRUaW1lT3V0KHRpbWVvdXQpOw0KICAgICAgICByZXR1cm47DQog
ICAgfQ0KICAgICANCiAgICAvKioNCiAgICAgKiBTZXRzIHRoZSBjb25zdHJhaW50cyB0aGF0IGFw
cGx5IHRvIGFsbCBvcGVyYXRpb25zIHBlcmZvcm1lZCB0aHJvdWdoDQogICAgICogdGhpcyBjb25u
ZWN0aW9uICh1bmxlc3MgYSBkaWZmZXJlbnQgc2V0IG9mIGNvbnN0cmFpbnRzIGlzIHNwZWNpZmll
ZA0KICAgICAqIHdoZW4gY2FsbGluZyBhbiBvcGVyYXRpb24gbWV0aG9kKS4gIEFuIExEQVBTZWFy
Y2hDb25zdHJhaW50cyBvYmplY3QNCiAgICAgKiB3aGljaCBpcyBwYXNzZWQgdG8gdGhpcyBtZXRo
b2Qgc2V0cyBhbGwgY29uc3RyYWludHMsIHdoaWxlIGFuDQogICAgICogTERBUENvbnN0cmFpbnRz
IG9iamVjdCBwYXNzZWQgdG8gdGhpcyBtZXRob2Qgc2V0cyBvbmx5IGJhc2UgY29uc3RyYWludHMu
DQogICAgICoNCiAgICAgKiBAcGFyYW0gY29ucyAgQW4gTERBUENvbnN0cmFpbnRzIG9yIExEQVBT
ZWFyY2hDb25zdHJhaW50cyBPYmplY3QNCiAgICAgKiBjb250YWluaW5nIHRoZSBjb250c3RyYWlu
dCB2YWx1ZXMgdG8gc2V0Lg0KICAgICAqDQogICAgICogQHNlZSAjZ2V0Q29uc3RyYWludHMoKQ0K
ICAgICAqIEBzZWUgI2dldFNlYXJjaENvbnN0cmFpbnRzKCkNCiAgICAgKi8NCiAgICBwdWJsaWMg
dm9pZCBzZXRDb25zdHJhaW50cyhMREFQQ29uc3RyYWludHMgY29ucykNCiAgICB7DQogICAgICAg
IC8vIFNldCBhbGwgY29uc3RyYWludHMsIHJlcGxhY2UgdGhlIG9iamVjdCB3aXRoIGEgbmV3IG9u
ZQ0KICAgICAgICBpZiggY29ucyBpbnN0YW5jZW9mIExEQVBTZWFyY2hDb25zdHJhaW50cykgew0K
ICAgICAgICAgICAgZGVmU2VhcmNoQ29ucyA9IChMREFQU2VhcmNoQ29uc3RyYWludHMpY29ucy5j
bG9uZSgpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gV2Ug
c2V0IHRoZSBjb25zdHJhaW50cyB0aGlzIHdheSwgc28gYSB0aHJlYWQgZG9lc24ndCBnZXQgYW4N
CiAgICAgICAgLy8gY29uY29uc2lzdGFudCB2aWV3IG9mIHRoZSByZWZlcnJhbHMuDQogICAgICAg
IExEQVBTZWFyY2hDb25zdHJhaW50cyBuZXdDb25zID0NCiAgICAgICAgICAgICAgICAgICAgKExE
QVBTZWFyY2hDb25zdHJhaW50cylkZWZTZWFyY2hDb25zLmNsb25lKCk7DQogICAgICAgIG5ld0Nv
bnMuc2V0SG9wTGltaXQoY29ucy5nZXRIb3BMaW1pdCgpKTsNCiAgICAgICAgbmV3Q29ucy5zZXRU
aW1lTGltaXQoY29ucy5nZXRUaW1lTGltaXQoKSk7DQogICAgICAgIG5ld0NvbnMuc2V0UmVmZXJy
YWxIYW5kbGVyKGNvbnMuZ2V0UmVmZXJyYWxIYW5kbGVyKCkpOw0KICAgICAgICBuZXdDb25zLnNl
dFJlZmVycmFsRm9sbG93aW5nKGNvbnMuZ2V0UmVmZXJyYWxGb2xsb3dpbmcoKSk7DQogICAgICAg
IExEQVBDb250cm9sW10gbHNjID0gY29ucy5nZXRDb250cm9scygpOw0KICAgICAgICBpZiggbHNj
ICE9IG51bGwpIHsNCiAgICAgICAgICAgIG5ld0NvbnMuc2V0Q29udHJvbHMoIGxzYyk7DQogICAg
ICAgIH0NCiAgICAgICAgSGFzaHRhYmxlIGxwID0gbmV3Q29ucy5nZXRQcm9wZXJ0aWVzKCk7DQog
ICAgICAgIGlmKCBscCAhPSBudWxsKSB7DQogICAgICAgICAgICBuZXdDb25zLnNldFByb3BlcnRp
ZXMoIGxwKTsNCiAgICAgICAgfQ0KICAgICAgICBkZWZTZWFyY2hDb25zID0gbmV3Q29uczsNCiAg
ICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEVzdGFibGlzaGVzIHRoZSBk
ZWZhdWx0IExEQVBTb2NrZXRGYWN0b3J5IHVzZWQgd2hlbg0KICAgICAqIExEQVBDb25uZWN0aW9u
IG9iamVjdHMgYXJlIGNvbnN0cnVjdGVkIHVubGVzcyBhbg0KICAgICAqIExEQVBTb2NrZXRGYWN0
b3J5IGlzIHNwZWNpZmllZCBpbiB0aGUgTERBUENvbm5lY3Rpb24NCiAgICAgKiBvYmplY3QgY29u
c3RydWN0b3IuDQogICAgICoNCiAgICAgKiA8cD5UaGlzIG1ldGhvZCBzZXRzIHRoZSBkZWZhdWx0
IExEQVBTb2NrZXRGYWN0b3J5IHVzZWQgZm9yDQogICAgICogYWxsIHN1YnNlcXVlbnQgTERBUENv
bm5lY3Rpb24gb2JqZWN0cyBjb25zdHJ1Y3RlZC4gIElmIGNhbGxlZA0KICAgICAqIGFmdGVyIExE
QVBDb25uZWN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQsIHRob3NlIGFscmVhZHkgY3JlYXRlZCBh
cmUgbm90DQogICAgICogYWZmZWN0ZWQgZXZlbiBpZiB0aGV5IGRpc2Nvbm5lY3QgYW5kIGVzdGFi
bGlzaCBhIG5ldyBjb25uZWN0aW9uLg0KICAgICAqIEl0IGFmZmVjdHMgTERBUENvbm5lY3Rpb24g
b2JqZWN0cyBvbmx5IGFzIHRoZXkgYXJlIGNvbnN0cnVjdGVkLjwvcD4NCiAgICAgKg0KICAgICAq
DQogICAgICogPHA+VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgcHJvdmlkZXMgYSB0eXBpY2Fs
IHVzYWdlIGV4YW1wbGU6DQogICAgICogPHByZT48Y29kZT4NCiAgICAgKiAgIGlmICh1c2luZ1RM
Uykgew0KICAgICAqICAgICAgIExEQVBDb25uZWN0aW9uLnNldFNvY2tldEZhY3RvcnkobXlUTFNG
YWN0b3J5KTsNCiAgICAgKiAgIH0NCiAgICAgKiAgIC4uLg0KICAgICAqICAgTERBUENvbm5lY3Rp
b24gY29ubiA9IG5ldyBMREFQQ29ubmVjdGlvbigpOw0KICAgICAqICAgY29ubi5jb25uZWN0KG15
SG9zdCwgbXlQb3J0KTsNCiAgICAgKiA8L2NvZGU+PC9wcmU+PC9wPg0KICAgICAqDQogICAgICog
PHA+SW4gdGhpcyBleGFtcGxlLCBjb25uZWN0aW9ucyBhcmUgY29uc3RydWN0ZWQgd2l0aCB0aGUg
ZGVmYXVsdA0KICAgICAqIExEQVBTb2NrZXRGYWN0b3J5LiAgQXQgYXBwbGljYXRpb24gc3RhcnQt
dXAgdGltZSwgdGhlIGRlZmF1bHQgbWF5IGJlDQogICAgICogc2V0IHRvIHVzZSBhIHBhcnRpY3Vs
YXIgcHJvdmlkZWQgVExTIHNvY2tldCBmYWN0b3J5LjwvcD4NCiAgICAgKg0KICAgICAqIEBwYXJh
bSBmYWN0b3J5ICBBIGZhY3Rvcnkgb2JqZWN0IHdoaWNoIGNhbiBjb25zdHJ1Y3Qgc29ja2V0DQog
ICAgICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIGZvciBhbiBMREFQQ29ubmVjdGlvbi4N
CiAgICAgKg0KICAgICAqIEBzZWUgI0xEQVBDb25uZWN0aW9uKCBMREFQU29ja2V0RmFjdG9yeSkN
CiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U29ja2V0RmFjdG9yeSggTERBUFNv
Y2tldEZhY3RvcnkgZmFjdG9yeSkNCiAgICB7DQogICAgICAgIENvbm5lY3Rpb24uc2V0U29ja2V0
RmFjdG9yeSggZmFjdG9yeSk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKioNCiAg
ICAgKiBSZWdpc3RlcnMgYW4gb2JqZWN0IHRvIGJlIG5vdGlmaWVkIG9uIGFycml2YWwgb2YgYW4g
dW5zb2xpY2l0ZWQNCiAgICAgKiBtZXNzYWdlIGZyb20gYSBzZXJ2ZXIuDQogICAgICoNCiAgICAg
KiA8cD5BbiB1bnNvbGljaXRlZCBtZXNzYWdlIGhhcyB0aGUgSUQgMC4gQSBuZXcgdGhyZWFkIGlz
IGNyZWF0ZWQgYW5kDQogICAgICogdGhlIG1ldGhvZCAibWVzc2FnZVJlY2VpdmVkIiBpbiBlYWNo
IHJlZ2lzdGVyZWQgb2JqZWN0IGlzIGNhbGxlZCBpbg0KICAgICAqIHR1cm4uPC9wPg0KICAgICAq
DQogICAgICogIEBwYXJhbSBsaXN0ZW5lciAgQW4gb2JqZWN0IHRvIGJlIG5vdGlmaWVkIG9uIGFy
cml2YWwgb2YgYW4NCiAgICAgKiAgICAgICAgIHVuc29saWNpdGVkIG1lc3NhZ2UgZnJvbSBhIHNl
cnZlci4gIFRoaXMgb2JqZWN0IG11c3QNCiAgICAgKiAgICAgICAgICAgaW1wbGVtZW50IHRoZSBM
REFQVW5zb2xpY2l0ZWROb3RpZmljYXRpb25MaXN0ZW5lciBpbnRlcmZhY2UuDQogICAgICoNCiAg
ICAgKi8NCiAgICBwdWJsaWMgdm9pZCBhZGRVbnNvbGljaXRlZE5vdGlmaWNhdGlvbkxpc3RlbmVy
KA0KICAgICAgICAgICAgTERBUFVuc29saWNpdGVkTm90aWZpY2F0aW9uTGlzdGVuZXIgbGlzdGVu
ZXIpDQogICAgew0KICAgICAgICBpZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAg
RGVidWcudHJhY2UoIERlYnVnLmFwaVJlcXVlc3RzLCBuYW1lICsNCiAgICAgICAgICAgICAiYWRk
VW5zb2xpY2l0ZWROT3RpZmljYXRpb25MaXN0ZW5lcigpIik7DQogICAgICAgIH0NCiAgICAgICAg
aWYgKGxpc3RlbmVyICE9IG51bGwpDQogICAgICAgICAgICBjb25uLmFkZFVuc29saWNpdGVkTm90
aWZpY2F0aW9uTGlzdGVuZXIobGlzdGVuZXIpOw0KICAgIH0NCg0KDQoNCiAgICAvKioNCiAgICAg
KiBEZXJlZ2lzdGVycyBhbiBvYmplY3Qgc28gdGhhdCBpdCB3aWxsIG5vIGxvbmdlciBiZSBub3Rp
ZmllZCBvbg0KICAgICAqIGFycml2YWwgb2YgYW4gdW5zb2xpY2l0ZWQgbWVzc2FnZSBmcm9tIGEg
c2VydmVyLiBJZiB0aGUgb2JqZWN0IGlzDQogICAgICogbnVsbCBvciB3YXMgbm90IHByZXZpb3Vz
bHkgcmVnaXN0ZXJlZCBmb3IgdW5zb2xpY2l0ZWQgbm90aWZpY2F0aW9ucywNCiAgICAgKiB0aGUg
bWV0aG9kIGRvZXMgbm90aGluZy4NCiAgICAgKg0KICAgICAqDQogICAgICogIEBwYXJhbSBsaXN0
ZW5lciAgQW4gb2JqZWN0IHRvIG5vIGxvbmdlciBiZSBub3RpZmllZCBvbiBhcnJpdmFsIG9mDQog
ICAgICogICAgICAgICAgICAgICAgICAgYW4gdW5zb2xpY2l0ZWQgbWVzc2FnZSBmcm9tIGEgc2Vy
dmVyLg0KICAgICAqDQogICAgICovDQogICAgcHVibGljIHZvaWQgcmVtb3ZlVW5zb2xpY2l0ZWRO
b3RpZmljYXRpb25MaXN0ZW5lcigNCiAgICAgICAgICAgICAgICAgICAgICAgIExEQVBVbnNvbGlj
aXRlZE5vdGlmaWNhdGlvbkxpc3RlbmVyIGxpc3RlbmVyKQ0KICAgIHsNCiAgICAgICAgaWYoIERl
YnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1
ZXN0cywgbmFtZSArDQogICAgICAgICAgICAicmVtb3ZlVW5zb2xpY2l0ZWROT3RpZmljYXRpb25M
aXN0ZW5lcigpIik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkN
CiAgICAgICAgICAgIGNvbm4ucmVtb3ZlVW5zb2xpY2l0ZWROb3RpZmljYXRpb25MaXN0ZW5lcihs
aXN0ZW5lcik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU3RhcnRzIFRyYW5zcG9ydCBMYXll
ciBTZWN1cml0eSAoVExTKSBwcm90b2NvbCBvbiB0aGlzIGNvbm5lY3Rpb24NCiAgICAgKiB0byBl
bmFibGUgc2Vzc2lvbiBwcml2YWN5Lg0KICAgICAqDQogICAgICogPHA+VGhpcyBhZmZlY3RzIHRo
ZSBMREFQQ29ubmVjdGlvbiBvYmplY3QgYW5kIGFsbCBjbG9uZWQgb2JqZWN0cy4gQQ0KICAgICAq
IHNvY2tldCBmYWN0b3J5IHRoYXQgaW1wbGVtZW50cyBMREFQVExTU29ja2V0RmFjdG9yeSBtdXN0
IGJlIHNldCBvbiB0aGUNCiAgICAgKiBjb25uZWN0aW9uLjwvcD4NCiAgICAgKg0KICAgICAqIEBl
eGNlcHRpb24gTERBUEV4Y2VwdGlvbiBUaHJvd24gaWYgVExTIGNhbm5vdCBiZSBzdGFydGVkLiAg
SWYgYQ0KICAgICAqIFNvY2tldEZhY3RvcnkgaGFzIGJlZW4gc3BlY2lmaWVkIHRoYXQgZG9lcyBu
b3QgaW1wbGVtZW50DQogICAgICogTERBUFRMU1NvY2tldEZhY3RvcnkgYW4gTERBUEV4Y2VwdGlv
biBpcyB0aHJvd24uDQogICAgICoNCiAgICAgKiBAc2VlICNpc1RMUw0KICAgICAqIEBzZWUgI3N0
b3BUTFMNCiAgICAgKiBAc2VlICNzZXRTb2NrZXRGYWN0b3J5DQogICAgICovDQogICAgcHVibGlj
IHZvaWQgc3RhcnRUTFMoKSB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYo
IERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlS
ZXF1ZXN0cywgbmFtZSArICJzdGFydFRMUygpIik7DQogICAgICAgIH0NCg0KDQogICAgICAgIExE
QVBNZXNzYWdlIHN0YXJ0VExTID0gbWFrZUV4dGVuZGVkT3BlcmF0aW9uKA0KICAgICAgICAgICAg
ICAgIG5ldyBMREFQRXh0ZW5kZWRPcGVyYXRpb24oIHRoaXMuU1RBUlRfVExTX09JRCwgbnVsbCAp
LCBudWxsKTsNCg0KICAgICAgICBpbnQgdGxzSUQgPSBzdGFydFRMUy5nZXRNZXNzYWdlSUQoKTsN
Cg0KICAgICAgICBjb25uLmFjcXVpcmVXcml0ZVNlbWFwaG9yZSggdGxzSUQgKTsNCiAgICAgICAg
dHJ5IHsNCiAgICAgICAgICAgIGlmICghY29ubi5hcmVNZXNzYWdlc0NvbXBsZXRlKCkpew0KICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBMREFQTG9jYWxFeGNlcHRpb24oDQogICAgICAgICAgICAg
ICAgICAgICAgICBFeGNlcHRpb25NZXNzYWdlcy5PVVRTVEFORElOR19PUEVSQVRJT05TLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgTERBUEV4Y2VwdGlvbi5PUEVSQVRJT05TX0VSUk9SICk7DQog
ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIFN0b3AgcmVhZGVyIHdoZW4gcmVzcG9uc2Ug
dG8gc3RhcnRUTFMgcmVxdWVzdCByZWNlaXZlZA0KICAgICAgICAgICAgY29ubi5zdG9wUmVhZGVy
T25SZXBseSggdGxzSUQgKTsNCg0KICAgICAgICAgICAgLy8gc2VuZCB0bHMgbWVzc2FnZQ0KICAg
ICAgICAgICAgTERBUFJlc3BvbnNlUXVldWUgcXVldWUgPQ0KICAgICAgICAgICAgICAgICAgICBz
ZW5kUmVxdWVzdFRvU2VydmVyKA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUTFMsDQog
ICAgICAgICAgICAgICAgICAgICAgICBkZWZTZWFyY2hDb25zLmdldFRpbWVMaW1pdCgpLCBudWxs
LCBudWxsICk7DQoNCiAgICAgICAgICAgIExEQVBFeHRlbmRlZFJlc3BvbnNlIHJlc3BvbnNlID0N
CiAgICAgICAgICAgICAgICAgICAgKExEQVBFeHRlbmRlZFJlc3BvbnNlKSBxdWV1ZS5nZXRSZXNw
b25zZSgpOw0KICAgICAgICAgICAgcmVzcG9uc2UuY2hrUmVzdWx0Q29kZSgpOw0KDQogICAgICAg
ICAgICBjb25uLnN0YXJ0VExTKCk7DQogICAgICAgIH0NCiAgICAgICAgZmluYWxseSB7DQogICAg
ICAgICAgICAvL0ZyZWUgdGhpcyBzZW1hcGhvcmUgbm8gbWF0dGVyIHdoYXQgZXhjZXB0aW9ucyBn
ZXQgdGhyb3duDQogICAgICAgICAgICBjb25uLnN0YXJ0UmVhZGVyKCk7DQogICAgICAgICAgICBj
b25uLmZyZWVXcml0ZVNlbWFwaG9yZSggdGxzSUQgKSA7DQogICAgICAgIH0NCiAgICAgICAgcmV0
dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFN0b3BzIFRyYW5zcG9ydCBMYXllciBTZWN1
cml0eShUTFMpIG9uIHRoZSBMREFQQ29ubmVjdGlvbiBhbmQgcmV2ZXJ0cw0KICAgICAqIGJhY2sg
dG8gYW4gYW5vbnltb3VzIHN0YXRlLg0KICAgICAqDQogICAgICogQHRocm93cyBMREFQRXhjZXB0
aW9uIFRoaXMgY2FuIG9jY3VyIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6IDxVTD4NCiAgICAg
KiAgICAgICAgICA8TEk+U3RhcnRUTFMgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUgc3RvcFRM
Uw0KICAgICAqICAgICAgICAgIDxMST5UaGVyZSBleGlzdHMgb3V0c3RhbmRpbmcgbWVzc2FnZXMg
dGhhdCBoYXZlIG5vdCByZWNlaXZlZCBhbGwNCiAgICAgKiAgICAgICAgICByZXNwb25zZXMNCiAg
ICAgKiAgICAgICAgICA8TEk+VGhlIHNldmVyIHdhcyBub3QgYWJsZSB0byBzdXBwb3J0IHRoZSBv
cGVyYXRpb248L1VMPg0KICAgICAqDQogICAgICogPHA+Tm90ZTogVGhlIFN1biBhbmQgSUJNIGlt
cGxlbWVudGlvbnMgb2YgSlNTRSBkbyBub3QgY3VycmVudGx5IGFsbG93DQogICAgICogc3RvcHBp
bmcgVExTIG9uIGFuIG9wZW4gU29ja2V0LiAgSW4gb3JkZXIgdG8gcHJvZHVjZSB0aGUgc2FtZSBy
ZXN1bHRzDQogICAgICogdGhpcyBtZXRob2QgY3VycmVudGx5IGRpc2Nvbm5lY3RzIHRoZSBzb2Nr
ZXQgYW5kIHJlY29ubmVjdHMsIGdpdmluZw0KICAgICAqIHRoZSBhcHBsaWNhdGlvbiBhbiBhbm9u
eW1vdXMgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyLCBhcyByZXF1aXJlZA0KICAgICAqIGJ5IFN0
b3BUTFMuPC9wPg0KICAgICAqDQogICAgICogQHNlZSAjc3RhcnRUTFMNCiAgICAgKiBAc2VlICNp
c1RMUw0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHN0b3BUTFMoKSB0aHJvd3MgTERBUEV4Y2Vw
dGlvbiB7DQoNCiAgICAgICAgaWYgKCFpc1RMUygpKXsNCiAgICAgICAgICAgIHRocm93IG5ldyBM
REFQTG9jYWxFeGNlcHRpb24oRXhjZXB0aW9uTWVzc2FnZXMuTk9fU1RBUlRUTFMsDQogICAgICAg
ICAgICAgICAgICAgIExEQVBFeGNlcHRpb24uT1BFUkFUSU9OU19FUlJPUiApOw0KICAgICAgICB9
DQoNCiAgICAgICAgaW50IHNlbWFwaG9yZUlEID0gY29ubi5hY3F1aXJlV3JpdGVTZW1hcGhvcmUo
KTsNCiAgICAgICAgdHJ5ew0KICAgICAgICAgICAgaWYgKCFjb25uLmFyZU1lc3NhZ2VzQ29tcGxl
dGUoKSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBMREFQTG9jYWxFeGNlcHRpb24oDQog
ICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25NZXNzYWdlcy5PVVRTVEFORElOR19PUEVS
QVRJT05TLA0KICAgICAgICAgICAgICAgICAgICAgICAgTERBUEV4Y2VwdGlvbi5PUEVSQVRJT05T
X0VSUk9SICk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvL3N0b3BUTFMgc3RvcHMgYW5k
IHN0YXJ0cyB0aGUgcmVhZGVyIHRocmVhZCBmb3IgdXMuDQogICAgICAgICAgICBjb25uLnN0b3BU
TFMoKTsNCiAgICAgICAgfQ0KICAgICAgICBmaW5hbGx5IHsNCiAgICAgICAgICAgIGNvbm4uZnJl
ZVdyaXRlU2VtYXBob3JlKHNlbWFwaG9yZUlEKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm47
DQogICAgfQ0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIC8vIEJlbG93IGFyZSBhbGwgb2Yg
dGhlIExEQVAgcHJvdG9jb2wgb3BlcmF0aW9uIG1ldGhvZHMNCiAgICAvLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCg0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIC8vIGFiYW5kb24gbWV0aG9kcw0KICAg
IC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKg0KDQogICAgLyoqDQogICAgICoNCiAgICAgKg0KICAgICAqIE5v
dGlmaWVzIHRoZSBzZXJ2ZXIgbm90IHRvIHNlbmQgYWRkaXRpb25hbCByZXN1bHRzIGFzc29jaWF0
ZWQgd2l0aA0KICAgICAqIHRoaXMgTERBUFNlYXJjaFJlc3VsdHMgb2JqZWN0LCBhbmQgZGlzY2Fy
ZHMgYW55IHJlc3VsdHMgYWxyZWFkeQ0KICAgICAqIHJlY2VpdmVkLg0KICAgICAqDQogICAgICog
IEBwYXJhbSByZXN1bHRzICAgQW4gb2JqZWN0IHJldHVybmVkIGZyb20gYSBzZWFyY2guDQogICAg
ICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24g
d2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9p
ZCBhYmFuZG9uKExEQVBTZWFyY2hSZXN1bHRzIHJlc3VsdHMpDQogICAgICAgIHRocm93cyBMREFQ
RXhjZXB0aW9uDQogICAgew0KICAgICAgICBhYmFuZG9uKCByZXN1bHRzLCBkZWZTZWFyY2hDb25z
ICk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKg0KICAgICAqDQog
ICAgICogTm90aWZpZXMgdGhlIHNlcnZlciBub3QgdG8gc2VuZCBhZGRpdGlvbmFsIHJlc3VsdHMg
YXNzb2NpYXRlZCB3aXRoDQogICAgICogdGhpcyBMREFQU2VhcmNoUmVzdWx0cyBvYmplY3QsIGFu
ZCBkaXNjYXJkcyBhbnkgcmVzdWx0cyBhbHJlYWR5DQogICAgICogcmVjZWl2ZWQuDQogICAgICoN
CiAgICAgKiAgQHBhcmFtIHJlc3VsdHMgICBBbiBvYmplY3QgcmV0dXJuZWQgZnJvbSBhIHNlYXJj
aC4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBjb25zICAgICBUaGUgY29udHJhaW50
cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogIEBleGNlcHRpb24g
TERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9y
DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGFuZCBhbiBMREFQIGVy
cm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQgYWJhbmRvbihMREFQU2VhcmNoUmVz
dWx0cyByZXN1bHRzLCBMREFQQ29uc3RyYWludHMgY29ucykNCiAgICAgICAgdGhyb3dzIExEQVBF
eGNlcHRpb24NCiAgICB7DQogICAgICAgIHJlc3VsdHMuYWJhbmRvbigpOw0KICAgICAgICByZXR1
cm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICoNCiAgICAgKiAgQWJhbmRvbnMgYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbi4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gaWQgICAgICBUaGUgSUQg
b2YgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gdG8gYWJhbmRvbi4gVGhlIElEDQogICAgICog
ICAgICAgICAgICAgICAgIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSByZXNwb25zZSBxdWV1ZSBm
b3IgdGhlDQogICAgICogICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4NCiAgICAgKg0KICAgICAq
ICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNs
dWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQog
ICAgICovDQogICAgcHVibGljIHZvaWQgYWJhbmRvbihpbnQgaWQpDQogICAgICAgIHRocm93cyBM
REFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBhYmFuZG9uKGlkLCBkZWZTZWFyY2hDb25zKTsN
CiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqICBBYmFuZG9ucyBhbiBh
c3luY2hyb25vdXMgb3BlcmF0aW9uLCB1c2luZyB0aGUgc3BlY2lmaWVkDQogICAgICogIGNvbnN0
cmFpbnRzLg0KICAgICAqDQogICAgICogIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGFzeW5jaHJv
bm91cyBvcGVyYXRpb24gdG8gYWJhbmRvbi4NCiAgICAgKiAgICAgICAgICAgIFRoZSBJRCBjYW4g
YmUgb2J0YWluZWQgZnJvbSB0aGUgc2VhcmNoDQogICAgICogICAgICAgICAgICBxdWV1ZSBmb3Ig
dGhlIG9wZXJhdGlvbi4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBjb25zIFRoZSBj
b250cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4
Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMg
YW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAq
Lw0KICAgIHB1YmxpYyB2b2lkIGFiYW5kb24oaW50IGlkLCBMREFQQ29uc3RyYWludHMgY29ucykN
CiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIC8vIFdlIG5lZWQg
dG8gaW5mb3JtIHRoZSBNZXNzYWdlIEFnZW50IHdoaWNoIG93bnMgdGhpcyBtZXNzYWdlSUQgdG8N
CiAgICAgICAgLy8gcmVtb3ZlIGl0IGZyb20gdGhlIHF1ZXVlLg0KICAgICAgICB0cnkgew0KICAg
ICAgICAgICAgTWVzc2FnZUFnZW50IGFnZW50ID0gY29ubi5nZXRNZXNzYWdlQWdlbnQoaWQpOw0K
ICAgICAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgICAgICBEZWJ1
Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgICAgICJhYmFu
ZG9uKCIgKyBpZCArICIpIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhZ2VudC5hYmFu
ZG9uKGlkLCBjb25zKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfSBjYXRjaCggTm9T
dWNoRmllbGRFeGNlcHRpb24gZXgpIHsNCiAgICAgICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVH
KSB7DQogICAgICAgICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLmFwaVJlcXVlc3RzLCBuYW1l
ICsNCiAgICAgICAgICAgICAgICAiYWJhbmRvbigiICsgaWQgKyAiKSwgYWdlbnQgbm90IGZvdW5k
Iik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm47IC8vIElnbm9yZSBlcnJvcg0K
ICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWJhbmRvbnMgYWxsIG91dHN0YW5k
aW5nIG9wZXJhdGlvbnMgbWFuYWdlZCBieSB0aGUgcXVldWUuDQogICAgICoNCiAgICAgKiA8cD5B
bGwgb3BlcmF0aW9ucyBpbiBwcm9ncmVzcywgd2hpY2ggYXJlIG1hbmFnZWQgYnkgdGhlIHNwZWNp
ZmllZCBxdWV1ZSwNCiAgICAgKiBhcmUgYWJhbmRvbmVkLjwvcD4NCiAgICAgKg0KICAgICAqICBA
cGFyYW0gcXVldWUgICAgIFRoZSBxdWV1ZSByZXR1cm5lZCBmcm9tIGFuIGFzeW5jaHJvbm91cyBy
ZXF1ZXN0Lg0KICAgICAqICAgICAgICAgICAgICAgICAgIEFsbCBvdXRzdGFuZGluZyBvcGVyYXRp
b25zIG1hbmFnZWQgYnkgdGhlIHF1ZXVlDQogICAgICogICAgICAgICAgICAgICAgICAgYXJlIGFi
YW5kb25lZCwgYW5kIHRoZSBxdWV1ZSBpcyBlbXB0aWVkLg0KICAgICAqDQogICAgICogIEBleGNl
cHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFu
IGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8N
CiAgICBwdWJsaWMgdm9pZCBhYmFuZG9uKCBMREFQTWVzc2FnZVF1ZXVlIHF1ZXVlKQ0KICAgICAg
ICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgYWJhbmRvbiggcXVldWUsIGRl
ZlNlYXJjaENvbnMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICog
QWJhbmRvbnMgYWxsIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMgbWFuYWdlZCBieSB0aGUgcXVldWUu
DQogICAgICoNCiAgICAgKiA8cD5BbGwgb3BlcmF0aW9ucyBpbiBwcm9ncmVzcywgd2hpY2ggYXJl
IG1hbmFnZWQgYnkgdGhlIHNwZWNpZmllZA0KICAgICAqIHF1ZXVlLCBhcmUgYWJhbmRvbmVkLjwv
cD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gcXVldWUgICAgIFRoZSBxdWV1ZSByZXR1cm5lZCBm
cm9tIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0Lg0KICAgICAqICAgICAgICAgICAgICAgICAgIEFs
bCBvdXRzdGFuZGluZyBvcGVyYXRpb25zIG1hbmFnZWQgYnkgdGhlIHF1ZXVlDQogICAgICogICAg
ICAgICAgICAgICAgICAgYXJlIGFiYW5kb25lZCwgYW5kIHRoZSBxdWV1ZSBpcyBlbXB0aWVkLg0K
ICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgIFRoZSBjb250cmFpbnRzIHNw
ZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQ
RXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAg
ICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1Ymxp
YyB2b2lkIGFiYW5kb24oIExEQVBNZXNzYWdlUXVldWUgcXVldWUsIExEQVBDb25zdHJhaW50cyBj
b25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYoIERl
YnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1
ZXN0cywgbmFtZSArDQogICAgICAgICAgICAiYWJhbmRvbihxdWV1ZSkiKTsNCiAgICAgICAgfQ0K
ICAgICAgICBpZihxdWV1ZSAhPSBudWxsKSB7DQogICAgICAgICAgICBNZXNzYWdlQWdlbnQgYWdl
bnQ7DQogICAgICAgICAgICBpZiggcXVldWUgaW5zdGFuY2VvZiBMREFQU2VhcmNoUXVldWUpIHsN
CiAgICAgICAgICAgICAgICBhZ2VudCA9IHF1ZXVlLmdldE1lc3NhZ2VBZ2VudCgpOw0KICAgICAg
ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhZ2VudCA9IHF1ZXVlLmdldE1lc3NhZ2VB
Z2VudCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaW50W10gbXNnSWRzID0gYWdlbnQu
Z2V0TWVzc2FnZUlEcygpOw0KICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8bXNnSWRzLmxlbmd0
aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgYWdlbnQuYWJhbmRvbihtc2dJZHNbaV0sIGNvbnMp
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAg
ICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCiAgICAvLyBhZGQgbWV0aG9kcw0KICAgIC8vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0KDQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSBhZGRzIGFuIGVudHJ5IHRv
IHRoZSBkaXJlY3RvcnkuDQogICAgICoNCiAgICAgKiBAcGFyYW0gZW50cnkgICAgTERBUEVudHJ5
IG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBkaXN0aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAg
ICAgIG5hbWUgYW5kIGF0dHJpYnV0ZXMgb2YgdGhlIG5ldyBlbnRyeS4NCiAgICAgKg0KICAgICAq
ICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNs
dWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQog
ICAgICovDQogICAgcHVibGljIHZvaWQgYWRkKExEQVBFbnRyeSBlbnRyeSkNCiAgICAgICAgdGhy
b3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGFkZChlbnRyeSwgZGVmU2VhcmNoQ29u
cyk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAgLyoqDQogICAgICoNCiAgICAgKiBT
eW5jaHJvbm91c2x5IGFkZHMgYW4gZW50cnkgdG8gdGhlIGRpcmVjdG9yeSwgdXNpbmcgdGhlIHNw
ZWNpZmllZA0KICAgICAqIGNvbnN0cmFpbnRzLg0KICAgICAqDQogICAgICogIEBwYXJhbSBlbnRy
eSAgIExEQVBFbnRyeSBvYmplY3Qgc3BlY2lmeWluZyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAq
ICAgICAgICAgICAgICAgICBuYW1lIGFuZCBhdHRyaWJ1dGVzIG9mIHRoZSBuZXcgZW50cnkuDQog
ICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICBDb25zdHJhaW50cyBzcGVjaWZp
YyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2Vw
dGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICog
IG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCg0KICAgIHB1YmxpYyB2
b2lkIGFkZChMREFQRW50cnkgZW50cnksDQogICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJh
aW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAg
TERBUFJlc3BvbnNlUXVldWUgcXVldWUgPSBhZGQoZW50cnksIG51bGwsIGNvbnMpOw0KDQogICAg
ICAgIC8vIEdldCBhIGhhbmRsZSB0byB0aGUgYWRkIHJlc3BvbnNlDQogICAgICAgIExEQVBSZXNw
b25zZSBhZGRSZXNwb25zZSA9IChMREFQUmVzcG9uc2UpKHF1ZXVlLmdldFJlc3BvbnNlKCkpOw0K
DQogICAgICAgIC8vIFNldCBsb2NhbCBjb3B5IG9mIHJlc3BvbnNlQ29udHJvbHMgc3luY2hyb25v
dXNseSBpZiB0aGVyZSB3ZXJlIGFueQ0KICAgICAgICBzeW5jaHJvbml6ZWQgKHJlc3BvbnNlQ3Rs
U2VtYXBob3JlKSB7DQogICAgICAgICAgICByZXNwb25zZUN0bHMgPSBhZGRSZXNwb25zZS5nZXRD
b250cm9scygpOw0KICAgICAgICB9DQogICAgICAgIGNoa1Jlc3VsdENvZGUoIHF1ZXVlLCBjb25z
LCBhZGRSZXNwb25zZSk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAg
KiBBc3luY2hyb25vdXNseSBhZGRzIGFuIGVudHJ5IHRvIHRoZSBkaXJlY3RvcnkuDQogICAgICoN
CiAgICAgKiAgQHBhcmFtIGVudHJ5ICAgTERBUEVudHJ5IG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBk
aXN0aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgIG5hbWUgYW5kIGF0dHJpYnV0ZXMg
b2YgdGhlIG5ldyBlbnRyeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBxdWV1ZSAg
IEhhbmRsZXIgZm9yIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAg
ICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBJZiBpdCBpcyBudWxsLCBh
DQogICAgICogICAgICAgICAgICAgICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFs
bHkuDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBl
eGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4g
TERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBh
ZGQoTERBUEVudHJ5IGVudHJ5LCBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSkNCiAgICAgICAgdGhy
b3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIHJldHVybiBhZGQoZW50cnksIHF1ZXVl
LCBkZWZTZWFyY2hDb25zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBc3luY2hyb25vdXNs
eSBhZGRzIGFuIGVudHJ5IHRvIHRoZSBkaXJlY3RvcnksIHVzaW5nIHRoZSBzcGVjaWZpZWQNCiAg
ICAgKiBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZW50cnkgICBMREFQRW50
cnkgb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGRpc3Rpbmd1aXNoZWQNCiAgICAgKiAgICAgICAgICAg
ICAgICAgbmFtZSBhbmQgYXR0cmlidXRlcyBvZiB0aGUgbmV3IGVudHJ5Lg0KICAgICAqPGJyPjxi
cj4NCiAgICAgKiAgQHBhcmFtIHF1ZXVlICBIYW5kbGVyIGZvciBtZXNzYWdlcyByZXR1cm5lZCBm
cm9tIGEgc2VydmVyIGluDQogICAgICogICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gdGhpcyBy
ZXF1ZXN0LiBJZiBpdCBpcyBudWxsLCBhDQogICAgICogICAgICAgICAgICAgICAgcXVldWUgb2Jq
ZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJh
bSBjb25zICAgQ29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4NCiAgICAgKg0K
ICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGlj
aCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNv
ZGUuDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIGFkZChMREFQRW50cnkg
ZW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9uc2VRdWV1
ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJhaW50
cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYo
IERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlS
ZXF1ZXN0cywgbmFtZSArDQogICAgICAgICAgICAiYWRkKCkiKTsNCiAgICAgICAgfQ0KICAgICAg
ICBpZihjb25zID09IG51bGwpDQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNoQ29uczsNCg0K
ICAgICAgICAvLyBlcnJvciBjaGVjayB0aGUgcGFyYW1ldGVycw0KICAgICAgICBpZihlbnRyeSA9
PSBudWxsICkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigiVGhlIExEQVBFbnRyeSBwYXJhbWV0ZXIiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICIg
Y2Fubm90IGJlIG51bGwiKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiggZW50cnkuZ2V0RE4oKSA9
PSBudWxsKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
KCJUaGUgRE4gdmFsdWUgbXVzdCBiZSBwcmVzZW50IiArDQogICAgICAgICAgICAgICAgICAgICAg
ICAiIGluIHRoZSBMREFQRW50cnkgb2JqZWN0Iik7DQogICAgICAgIH0NCg0KICAgICAgICBMREFQ
TWVzc2FnZSBtc2cgPSBuZXcgTERBUEFkZFJlcXVlc3QoIGVudHJ5LCBjb25zLmdldENvbnRyb2xz
KCkpOw0KDQogICAgICAgIHJldHVybiBzZW5kUmVxdWVzdFRvU2VydmVyKG1zZywgY29ucy5nZXRU
aW1lTGltaXQoKSwgcXVldWUsIG51bGwpOw0KICAgIH0NCg0KICAgIC8vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kg0KICAgIC8vIGJpbmQgbWV0aG9kcw0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQogICAgLyoq
DQogICAgICogU3luY2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRoZSBMREFQIHNlcnZlciAo
dGhhdCB0aGUgb2JqZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5lY3RlZCB0bykgYXMgYW4g
TERBUHYzIGJpbmQsIHVzaW5nIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQNCiAgICAgKiBwYXNzd29y
ZC4NCiAgICAgKg0KICAgICAqIDxwPklmIHRoZSBvYmplY3QgaGFzIGJlZW4gZGlzY29ubmVjdGVk
IGZyb20gYW4gTERBUCBzZXJ2ZXIsDQogICAgICogdGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVj
b25uZWN0IHRvIHRoZSBzZXJ2ZXIuIElmIHRoZSBvYmplY3QNCiAgICAgKiBoYXMgYWxyZWFkeSBh
dXRoZW50aWNhdGVkLCB0aGUgb2xkIGF1dGhlbnRpY2F0aW9uIGlzIGRpc2NhcmRlZC48L3A+DQog
ICAgICoNCiAgICAgKiAgQHBhcmFtIGRuICAgICAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwg
c3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5k
IGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAg
IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAg
ICAgICAgICAgICAgICBuYW1lLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHBhc3N3
ZCAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICog
ICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5kIGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQg
c2hvdWxkDQogICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBh
cyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAgICAgICAgICAgICBuYW1lIGFuZCBwYXNz
d2QgYXMgcGFzc3dvcmQuDQogICAgICo8YnI+PGJyPg0KICAgICAqICAgICAgICAgICAgICAgICBO
b3RlOiB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHVzZSBjYXJlIGluIHRoZSB1c2UNCiAgICAgKiAg
ICAgICAgICAgICAgICAgb2YgU3RyaW5nIHBhc3N3b3JkIG9iamVjdHMuICBUaGVzZSBhcmUgbG9u
ZyBsaXZlZA0KICAgICAqICAgICAgICAgICAgICAgICBvYmplY3RzLCBhbmQgbWF5IGV4cG9zZSBh
IHNlY3VyaXR5IHJpc2ssIGVzcGVjaWFsbHkNCiAgICAgKiAgICAgICAgICAgICAgICAgaW4gb2Jq
ZWN0cyB0aGF0IGFyZSBzZXJpYWxpemVkLiAgVGhlIExEQVBDb25uZWN0aW9uDQogICAgICogICAg
ICAgICAgICAgICAgIGtlZXBzIG5vIGxvbmcgbGl2ZWQgaW5zdGFuY2VzIG9mIHRoZXNlIG9iamVj
dHMuDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBl
eGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4g
TERBUCBlcnJvciBjb2RlLg0KICAgICAqDQogICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkg
e0BsaW5rICNiaW5kKGludCwgU3RyaW5nLCBieXRlW10pfQ0KICAgICAqLw0KICAgIHB1YmxpYyB2
b2lkIGJpbmQoU3RyaW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhc3N3ZCkN
CiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGJpbmQoIExEQVBf
VjMsIGRuLCBwYXNzd2QsIGRlZlNlYXJjaENvbnMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0K
DQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRoZSBMREFQ
IHNlcnZlciAodGhhdCB0aGUgb2JqZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5lY3RlZCB0
bykgdXNpbmcgdGhlIHNwZWNpZmllZCBuYW1lLCBwYXNzd29yZCwNCiAgICAgKiBhbmQgTERBUCB2
ZXJzaW9uLg0KICAgICAqDQogICAgICogPHA+SWYgdGhlIG9iamVjdCBoYXMgYmVlbiBkaXNjb25u
ZWN0ZWQgZnJvbSBhbiBMREFQIHNlcnZlciwNCiAgICAgKiB0aGlzIG1ldGhvZCBhdHRlbXB0cyB0
byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhlIG9iamVjdA0KICAgICAqIGhhcyBhbHJl
YWR5IGF1dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRpb24gaXMgZGlzY2FyZGVkLjwv
cD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gdmVyc2lvbiAgVGhlIExEQVAgcHJvdG9jb2wgdmVy
c2lvbiwgdXNlIExEQVBfVjMuDQogICAgICogICAgICAgICAgICAgICAgICBMREFQX1YyIGlzIG5v
dCBzdXBwb3J0ZWQuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gZG4gICAgICBJZiBu
b24tbnVsbCBhbmQgbm9uLWVtcHR5LCBzcGVjaWZpZXMgdGhhdCB0aGUNCiAgICAgKiAgICAgICAg
ICAgICAgICAgY29ubmVjdGlvbiBhbmQgYWxsIG9wZXJhdGlvbnMgdGhyb3VnaCBpdCBzaG91bGQN
CiAgICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB3aXRoIGRuIGFzIHRoZSBk
aXN0aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgIG5hbWUuDQogICAgICo8YnI+PGJy
Pg0KICAgICAqICBAcGFyYW0gcGFzc3dkICBJZiBub24tbnVsbCBhbmQgbm9uLWVtcHR5LCBzcGVj
aWZpZXMgdGhhdCB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBhbmQgYWxs
IG9wZXJhdGlvbnMgdGhyb3VnaCBpdCBzaG91bGQNCiAgICAgKiAgICAgICAgICAgICAgICAgYmUg
YXV0aGVudGljYXRlZCB3aXRoIGRuIGFzIHRoZSBkaXN0aW5ndWlzaGVkDQogICAgICogICAgICAg
ICAgICAgICAgIG5hbWUgYW5kIHBhc3N3ZCBhcyBwYXNzd29yZC4NCiAgICAgKjxicj48YnI+DQog
ICAgICogICAgICAgICAgICAgICAgIE5vdGU6IHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgdXNlIGNh
cmUgaW4gdGhlIHVzZQ0KICAgICAqICAgICAgICAgICAgICAgICBvZiBTdHJpbmcgcGFzc3dvcmQg
b2JqZWN0cy4gIFRoZXNlIGFyZSBsb25nIGxpdmVkDQogICAgICogICAgICAgICAgICAgICAgIG9i
amVjdHMsIGFuZCBtYXkgZXhwb3NlIGEgc2VjdXJpdHkgcmlzaywgZXNwZWNpYWxseQ0KICAgICAq
ICAgICAgICAgICAgICAgICBpbiBvYmplY3RzIHRoYXQgYXJlIHNlcmlhbGl6ZWQuICBUaGUgTERB
UENvbm5lY3Rpb24NCiAgICAgKiAgICAgICAgICAgICAgICAga2VlcHMgbm8gbG9uZyBsaXZlZCBp
bnN0YW5jZXMgb2YgdGhlc2Ugb2JqZWN0cy4NCiAgICAgKg0KICAgICAqICBAZXhjZXB0aW9uIExE
QVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0K
ICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAgICoNCiAgICAgKiBA
ZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2JpbmQoaW50LCBTdHJpbmcsIGJ5dGVbXSl9
DQogICAgICovDQogICAgcHVibGljIHZvaWQgYmluZChpbnQgdmVyc2lvbiwNCiAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXNzd2Qp
DQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBiaW5kKCB2ZXJz
aW9uLCBkbiwgcGFzc3dkLCBkZWZTZWFyY2hDb25zKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0N
Cg0KICAgIC8qKg0KICAgICAqIFN5bmNocm9ub3VzbHkgYXV0aGVudGljYXRlcyB0byB0aGUgTERB
UCBzZXJ2ZXIgKHRoYXQgdGhlIG9iamVjdCBpcw0KICAgICAqIGN1cnJlbnRseSBjb25uZWN0ZWQg
dG8pIGFzIGFuIExEQVB2MyBiaW5kLCB1c2luZyB0aGUgc3BlY2lmaWVkIG5hbWUsDQogICAgICog
cGFzc3dvcmQsIGFuZCBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqIDxwPklmIHRoZSBvYmpl
Y3QgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gYW4gTERBUCBzZXJ2ZXIsDQogICAgICogdGhp
cyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIElmIHRoZSBvYmpl
Y3QNCiAgICAgKiBoYXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLCB0aGUgb2xkIGF1dGhlbnRpY2F0
aW9uIGlzIGRpc2NhcmRlZC48L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIGRuICAgICAgSWYg
bm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAg
ICAgICAgICAgIGNvbm5lY3Rpb24gYW5kIGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxk
DQogICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0aGUg
ZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAgICAgICAgICAgICBuYW1lLg0KICAgICAqPGJyPjxi
cj4NCiAgICAgKiAgQHBhcmFtIHBhc3N3ZCAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3Bl
Y2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5kIGFs
bCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAgIGJl
IGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAg
ICAgICAgICAgICBuYW1lIGFuZCBwYXNzd2QgYXMgcGFzc3dvcmQuDQogICAgICogICAgICAgICAg
ICAgICAgIE5vdGU6IHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgdXNlIGNhcmUgaW4gdGhlIHVzZQ0K
ICAgICAqICAgICAgICAgICAgICAgICBvZiBTdHJpbmcgcGFzc3dvcmQgb2JqZWN0cy4gIFRoZXNl
IGFyZSBsb25nIGxpdmVkDQogICAgICogICAgICAgICAgICAgICAgIG9iamVjdHMsIGFuZCBtYXkg
ZXhwb3NlIGEgc2VjdXJpdHkgcmlzaywgZXNwZWNpYWxseQ0KICAgICAqICAgICAgICAgICAgICAg
ICBpbiBvYmplY3RzIHRoYXQgYXJlIHNlcmlhbGl6ZWQuICBUaGUgTERBUENvbm5lY3Rpb24NCiAg
ICAgKiAgICAgICAgICAgICAgICAga2VlcHMgbm8gbG9uZyBsaXZlZCBpbnN0YW5jZXMgb2YgdGhl
c2Ugb2JqZWN0cy4NCiAgICAgKjxicj48YnI+DQogICAgICogQHBhcmFtIGNvbnMgICAgIENvbnN0
cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4Y2Vw
dGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4g
ZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqDQog
ICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNiaW5kKGludCwgU3RyaW5nLCBi
eXRlW10sIExEQVBDb25zdHJhaW50cyl9DQogICAgICovDQogICAgcHVibGljIHZvaWQgYmluZChT
dHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dkLA0KICAgICAgICAg
ICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgICAgICAgICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgYmluZCggTERBUF9WMywgZG4sIHBh
c3N3ZCwgY29ucyk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBT
eW5jaHJvbm91c2x5IGF1dGhlbnRpY2F0ZXMgdG8gdGhlIExEQVAgc2VydmVyICh0aGF0IHRoZSBv
YmplY3QgaXMNCiAgICAgKiBjdXJyZW50bHkgY29ubmVjdGVkIHRvKSB1c2luZyB0aGUgc3BlY2lm
aWVkIG5hbWUsIHBhc3N3b3JkLCBMREFQIHZlcnNpb24sDQogICAgICogYW5kIGNvbnN0cmFpbnRz
Lg0KICAgICAqDQogICAgICogPHA+SWYgdGhlIG9iamVjdCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQg
ZnJvbSBhbiBMREFQIHNlcnZlciwNCiAgICAgKiB0aGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZWNv
bm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhlIG9iamVjdA0KICAgICAqIGhhcyBhbHJlYWR5IGF1
dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRpb24gaXMgZGlzY2FyZGVkLjwvcD4NCiAg
ICAgKg0KICAgICAqICBAcGFyYW0gdmVyc2lvbiAgVGhlIExEQVAgcHJvdG9jb2wgdmVyc2lvbiwg
dXNlIExEQVBfVjMuDQogICAgICogICAgICAgICAgICAgICAgICBMREFQX1YyIGlzIG5vdCBzdXBw
b3J0ZWQuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gZG4gICAgICAgSWYgbm9uLW51
bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAg
ICAgICBjb25uZWN0aW9uIGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0IHNob3VsZA0KICAg
ICAqICAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB3aXRoIGRuIGFzIHRoZSBkaXN0
aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgICBuYW1lLg0KICAgICAqPGJyPjxicj4N
CiAgICAgKiAgQHBhcmFtIHBhc3N3ZCAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lm
aWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5kIGFsbCBv
cGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAgIGJlIGF1
dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAgICAg
ICAgICAgICBuYW1lIGFuZCBwYXNzd2QgYXMgcGFzc3dvcmQuDQogICAgICo8YnI+PGJyPg0KICAg
ICAqICAgICAgICAgICAgICAgICBOb3RlOiB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHVzZSBjYXJl
IGluIHRoZSB1c2UNCiAgICAgKiAgICAgICAgICAgICAgICAgb2YgU3RyaW5nIHBhc3N3b3JkIG9i
amVjdHMuICBUaGVzZSBhcmUgbG9uZyBsaXZlZA0KICAgICAqICAgICAgICAgICAgICAgICBvYmpl
Y3RzLCBhbmQgbWF5IGV4cG9zZSBhIHNlY3VyaXR5IHJpc2ssIGVzcGVjaWFsbHkNCiAgICAgKiAg
ICAgICAgICAgICAgICAgaW4gb2JqZWN0cyB0aGF0IGFyZSBzZXJpYWxpemVkLiAgVGhlIExEQVBD
b25uZWN0aW9uDQogICAgICogICAgICAgICAgICAgICAgIGtlZXBzIG5vIGxvbmcgbGl2ZWQgaW5z
dGFuY2VzIG9mIHRoZXNlIG9iamVjdHMuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0g
Y29ucyAgICBUaGUgY29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4NCiAgICAg
Kg0KICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3
aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9y
IGNvZGUuDQogICAgICoNCiAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieQ0KICAgICAqIHtA
bGluayAjYmluZChpbnQsIFN0cmluZywgYnl0ZVtdLCBMREFQQ29uc3RyYWludHMpfQ0KICAgICAq
Lw0KICAgIHB1YmxpYyB2b2lkIGJpbmQoaW50IHZlcnNpb24sDQogICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dkLA0KICAgICAg
ICAgICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93cyBMREFQ
RXhjZXB0aW9uDQogICAgew0KICAgICAgICBieXRlW10gcHcgPSBudWxsOw0KICAgICAgICBpZigg
cGFzc3dkICE9IG51bGwpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgcHcg
PSBwYXNzd2QuZ2V0Qnl0ZXMoIlVURjgiKTsNCiAgICAgICAgICAgICAgICBwYXNzd2QgPSBudWxs
OyAgLy8gS2VlcCBubyByZWZlcmVuY2UgdG8gU3RyaW5nIG9iamVjdA0KICAgICAgICAgICAgfSBj
YXRjaCggVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBleCkgew0KICAgICAgICAgICAgICAg
IHBhc3N3ZCA9IG51bGw7ICAvLyBLZWVwIG5vIHJlZmVyZW5jZSB0byBTdHJpbmcgb2JqZWN0DQog
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIGV4LnRvU3RyaW5nKCkp
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGJpbmQodmVyc2lvbiwgZG4sIHB3
LCBjb25zKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFN5bmNo
cm9ub3VzbHkgYXV0aGVudGljYXRlcyB0byB0aGUgTERBUCBzZXJ2ZXIgKHRoYXQgdGhlIG9iamVj
dCBpcw0KICAgICAqIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8pIHVzaW5nIHRoZSBzcGVjaWZpZWQg
bmFtZSwgcGFzc3dvcmQsDQogICAgICogYW5kIExEQVAgdmVyc2lvbi4NCiAgICAgKg0KICAgICAq
IDxwPklmIHRoZSBvYmplY3QgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gYW4gTERBUCBzZXJ2
ZXIsDQogICAgICogdGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2
ZXIuIElmIHRoZSBvYmplY3QNCiAgICAgKiBoYXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLCB0aGUg
b2xkIGF1dGhlbnRpY2F0aW9uIGlzIGRpc2NhcmRlZC48L3A+DQogICAgICoNCiAgICAgKiAgQHBh
cmFtIHZlcnNpb24gIFRoZSB2ZXJzaW9uIG9mIHRoZSBMREFQIHByb3RvY29sIHRvIHVzZQ0KICAg
ICAqICAgICAgICAgICAgICAgICAgaW4gdGhlIGJpbmQsIHVzZSBMREFQX1YzLiAgTERBUF9WMiBp
cyBub3Qgc3VwcG9ydGVkLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGRuICAgICAg
SWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAg
ICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5kIGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hv
dWxkDQogICAgICogICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0
aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAgICAgICAgICAgICBuYW1lLg0KICAgICAqPGJy
Pjxicj4NCiAgICAgKiAgQHBhcmFtIHBhc3N3ZCAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwg
c3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5k
IGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAg
IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBkbiBhcyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAg
ICAgICAgICAgICAgICBuYW1lIGFuZCBwYXNzd2QgYXMgcGFzc3dvcmQuDQogICAgICoNCiAgICAg
KiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5j
bHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0K
ICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIGJpbmQoaW50IHZlcnNpb24sDQogICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICBieXRlW10gcGFzc3dkKQ0K
ICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgYmluZCh2ZXJzaW9u
LCBkbiwgcGFzc3dkLCBkZWZTZWFyY2hDb25zKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0K
ICAgIC8qKg0KICAgICAqDQogICAgICogU3luY2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRo
ZSBMREFQIHNlcnZlciAodGhhdCB0aGUgb2JqZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5l
Y3RlZCB0bykgdXNpbmcgdGhlIHNwZWNpZmllZCBuYW1lLCBwYXNzd29yZCwgTERBUCB2ZXJzaW9u
LA0KICAgICAqIGFuZCBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqIDxwPklmIHRoZSBvYmpl
Y3QgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gYW4gTERBUCBzZXJ2ZXIsDQogICAgICogdGhp
cyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIElmIHRoZSBvYmpl
Y3QNCiAgICAgKiBoYXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLCB0aGUgb2xkIGF1dGhlbnRpY2F0
aW9uIGlzIGRpc2NhcmRlZC48L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHZlcnNpb24gIFRo
ZSBMREFQIHByb3RvY29sIHZlcnNpb24sIHVzZSBMREFQX1YzLg0KICAgICAqICAgICAgICAgICAg
ICAgICAgTERBUF9WMiBpcyBub3Qgc3VwcG9ydGVkLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAg
QHBhcmFtIGRuICAgICAgIElmIG5vbi1udWxsIGFuZCBub24tZW1wdHksIHNwZWNpZmllcyB0aGF0
IHRoZQ0KICAgICAqICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBhbmQgYWxsIG9wZXJhdGlv
bnMgdGhyb3VnaCBpdCBzaG91bGQNCiAgICAgKiAgICAgICAgICAgICAgICAgIGJlIGF1dGhlbnRp
Y2F0ZWQgd2l0aCBkbiBhcyB0aGUgZGlzdGluZ3Vpc2hlZA0KICAgICAqICAgICAgICAgICAgICAg
ICAgbmFtZS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBwYXNzd2QgIElmIG5vbi1u
dWxsIGFuZCBub24tZW1wdHksIHNwZWNpZmllcyB0aGF0IHRoZQ0KICAgICAqICAgICAgICAgICAg
ICAgICBjb25uZWN0aW9uIGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0IHNob3VsZA0KICAg
ICAqICAgICAgICAgICAgICAgICBiZSBhdXRoZW50aWNhdGVkIHdpdGggZG4gYXMgdGhlIGRpc3Rp
bmd1aXNoZWQNCiAgICAgKiAgICAgICAgICAgICAgICAgbmFtZSBhbmQgcGFzc3dkIGFzIHBhc3N3
b3JkLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgVGhlIGNvbnN0cmFp
bnRzIHNwZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlv
biBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJy
b3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAg
IHB1YmxpYyB2b2lkIGJpbmQoaW50IHZlcnNpb24sDQogICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgZG4sDQogICAgICAgICAgICAgICAgICAgICBieXRlW10gcGFzc3dkLA0KICAgICAgICAgICAg
ICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0
aW9uDQogICAgew0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSA9DQogICAgICAgICAg
ICBiaW5kKHZlcnNpb24sIGRuLCBwYXNzd2QsIG51bGwsIGNvbnMpOw0KICAgICAgICBMREFQUmVz
cG9uc2UgcmVzID0gKExEQVBSZXNwb25zZSlxdWV1ZS5nZXRSZXNwb25zZSgpOw0KICAgICAgICBp
ZiggcmVzICE9IG51bGwpIHsNCiAgICAgICAgICAgIC8vIFNldCBsb2NhbCBjb3B5IG9mIHJlc3Bv
bnNlQ29udHJvbHMgc3luY2hyb25vdXNseSBpZiBhbnkNCiAgICAgICAgICAgIHN5bmNocm9uaXpl
ZCAocmVzcG9uc2VDdGxTZW1hcGhvcmUpIHsNCiAgICAgICAgICAgICAgICByZXNwb25zZUN0bHMg
PSByZXMuZ2V0Q29udHJvbHMoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgY2hrUmVz
dWx0Q29kZSggcXVldWUsIGNvbnMsIHJlcyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuOw0K
ICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFzeW5jaHJvbm91c2x5IGF1dGhlbnRpY2F0ZXMgdG8g
dGhlIExEQVAgc2VydmVyICh0aGF0IHRoZSBvYmplY3QgaXMNCiAgICAgKiBjdXJyZW50bHkgY29u
bmVjdGVkIHRvKSB1c2luZyB0aGUgc3BlY2lmaWVkIG5hbWUsIHBhc3N3b3JkLCBMREFQDQogICAg
ICogdmVyc2lvbiwgYW5kIHF1ZXVlLg0KICAgICAqDQogICAgICogPHA+SWYgdGhlIG9iamVjdCBo
YXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBhbiBMREFQIHNlcnZlciwNCiAgICAgKiB0aGlzIG1l
dGhvZCBhdHRlbXB0cyB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhlIG9iamVjdA0K
ICAgICAqIGhhcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRpb24g
aXMgZGlzY2FyZGVkLjwvcD4NCiAgICAgKg0KICAgICAqDQogICAgICogIEBwYXJhbSB2ZXJzaW9u
ICBUaGUgTERBUCBwcm90b2NvbCB2ZXJzaW9uLCB1c2UgTERBUF9WMy4NCiAgICAgKiAgICAgICAg
ICAgICAgICAgIExEQVBfVjIgaXMgbm90IHN1cHBvcnRlZC4NCiAgICAgKiA8YnI+PGJyPg0KICAg
ICAqICBAcGFyYW0gZG4gICAgICBJZiBub24tbnVsbCBhbmQgbm9uLWVtcHR5LCBzcGVjaWZpZXMg
dGhhdCB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBhbmQgYWxsIG9wZXJh
dGlvbnMgdGhyb3VnaCBpdCBzaG91bGQNCiAgICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVu
dGljYXRlZCB3aXRoIGRuIGFzIHRoZSBkaXN0aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAg
ICAgIG5hbWUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gcGFzc3dkICBJZiBub24t
bnVsbCBhbmQgbm9uLWVtcHR5LCBzcGVjaWZpZXMgdGhhdCB0aGUNCiAgICAgKiAgICAgICAgICAg
ICAgICAgY29ubmVjdGlvbiBhbmQgYWxsIG9wZXJhdGlvbnMgdGhyb3VnaCBpdCBzaG91bGQNCiAg
ICAgKiAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB3aXRoIGRuIGFzIHRoZSBkaXN0
aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgIG5hbWUgYW5kIHBhc3N3ZCBhcyBwYXNz
d29yZC4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBxdWV1ZSAgIEhhbmRsZXIgZm9y
IG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAg
ICAgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBJZiBpdCBpcyBudWxsLCBhDQogICAgICogICAg
ICAgICAgICAgICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICoN
CiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hp
Y2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBj
b2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBiaW5kKGludCB2ZXJz
aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkbiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gcGFzc3dkLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIExEQVBSZXNwb25zZVF1ZXVlIHF1ZXVlKQ0KICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIGJpbmQodmVyc2lvbiwg
ZG4sIHBhc3N3ZCwgcXVldWUsIGRlZlNlYXJjaENvbnMpOw0KICAgIH0NCg0KICAgIC8qKg0KICAg
ICAqIEFzeW5jaHJvbm91c2x5IGF1dGhlbnRpY2F0ZXMgdG8gdGhlIExEQVAgc2VydmVyICh0aGF0
IHRoZSBvYmplY3QgaXMNCiAgICAgKiBjdXJyZW50bHkgY29ubmVjdGVkIHRvKSB1c2luZyB0aGUg
c3BlY2lmaWVkIG5hbWUsIHBhc3N3b3JkLCBMREFQDQogICAgICogdmVyc2lvbiwgcXVldWUsIGFu
ZCBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqIDxwPklmIHRoZSBvYmplY3QgaGFzIGJlZW4g
ZGlzY29ubmVjdGVkIGZyb20gYW4gTERBUCBzZXJ2ZXIsDQogICAgICogdGhpcyBtZXRob2QgYXR0
ZW1wdHMgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIElmIHRoZSBvYmplY3QNCiAgICAgKiBo
YWQgYWxyZWFkeSBhdXRoZW50aWNhdGVkLCB0aGUgb2xkIGF1dGhlbnRpY2F0aW9uIGlzIGRpc2Nh
cmRlZC48L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHZlcnNpb24gIFRoZSBMREFQIHByb3Rv
Y29sIHZlcnNpb24sIHVzZSBMREFQX1YzLg0KICAgICAqICAgICAgICAgICAgICAgICAgTERBUF9W
MiBpcyBub3Qgc3VwcG9ydGVkLg0KICAgICAqIDxicj48YnI+DQogICAgICogIEBwYXJhbSBkbiAg
ICAgIElmIG5vbi1udWxsIGFuZCBub24tZW1wdHksIHNwZWNpZmllcyB0aGF0IHRoZQ0KICAgICAq
ICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0
IHNob3VsZA0KICAgICAqICAgICAgICAgICAgICAgICBiZSBhdXRoZW50aWNhdGVkIHdpdGggZG4g
YXMgdGhlIGRpc3Rpbmd1aXNoZWQNCiAgICAgKiAgICAgICAgICAgICAgICAgbmFtZS4NCiAgICAg
Kjxicj48YnI+DQogICAgICogIEBwYXJhbSBwYXNzd2QgIElmIG5vbi1udWxsIGFuZCBub24tZW1w
dHksIHNwZWNpZmllcyB0aGF0IHRoZQ0KICAgICAqICAgICAgICAgICAgICAgICBjb25uZWN0aW9u
IGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0IHNob3VsZA0KICAgICAqICAgICAgICAgICAg
ICAgICBiZSBhdXRoZW50aWNhdGVkIHdpdGggZG4gYXMgdGhlIGRpc3Rpbmd1aXNoZWQNCiAgICAg
KiAgICAgICAgICAgICAgICAgbmFtZSBhbmQgcGFzc3dkIGFzIHBhc3N3b3JkLg0KICAgICAqPGJy
Pjxicj4NCiAgICAgKiAgQHBhcmFtIHF1ZXVlICAgSGFuZGxlciBmb3IgbWVzc2FnZXMgcmV0dXJu
ZWQgZnJvbSBhIHNlcnZlciBpbg0KICAgICAqICAgICAgICAgICAgICAgICByZXNwb25zZSB0byB0
aGlzIHJlcXVlc3QuIElmIGl0IGlzIG51bGwsIGENCiAgICAgKiAgICAgICAgICAgICAgICAgcXVl
dWUgb2JqZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAgICAgKjxicj48YnI+DQogICAgICog
IEBwYXJhbSBjb25zICAgICAgQ29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4N
CiAgICAgKg0KICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2Vw
dGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQ
IGVycm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIGJpbmQo
aW50IHZlcnNpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRu
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBwYXNzd2QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFJlc3BvbnNlUXVldWUgcXVldWUsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQog
ICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBpZiggRGVidWcuTERB
UF9ERUJVRykgew0KICAgICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLmFwaVJlcXVlc3RzLCBu
YW1lICsNCiAgICAgICAgICAgICJiaW5kKFwiIiArIGRuICsgIlwiKSIpOw0KICAgICAgICB9DQog
ICAgICAgIGludCBtc2dJZDsNCiAgICAgICAgQmluZFByb3BlcnRpZXMgYmluZFByb3BzOw0KICAg
ICAgICBpZihjb25zID09IG51bGwpDQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNoQ29uczsN
Cg0KICAgICAgICBpZihkbiA9PSBudWxsKSB7DQogICAgICAgICAgICBkbiA9ICIiOw0KICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgZG4gPSBkbi50cmltKCk7DQogICAgICAgIH0NCg0KICAg
ICAgICBpZihwYXNzd2QgPT0gbnVsbCkNCiAgICAgICAgICAgIHBhc3N3ZCA9IG5ldyBieXRlW10g
e307DQoNCiAgICAgICAgYm9vbGVhbiBhbm9ueW1vdXMgPSBmYWxzZTsNCiAgICAgICAgaWYoIHBh
c3N3ZC5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgYW5vbnltb3VzID0gdHJ1ZTsgLy8gYW5v
bnltb3VzLCBwYXNzd2QgbGVuZ3RoIHplcm8gd2l0aCBzaW1wbGUgYmluZA0KICAgICAgICAgICAg
ZG4gPSAiIjsgICAgICAgICAgLy8gc2V0IHRvIG51bGwgaWYgYW5vbnltb3VzDQogICAgICAgIH0N
CiAgICAgICAgTERBUE1lc3NhZ2UgbXNnID0gbmV3IExEQVBCaW5kUmVxdWVzdCggdmVyc2lvbiwg
ZG4sIHBhc3N3ZCwgY29ucy5nZXRDb250cm9scygpKTsNCg0KICAgICAgICBtc2dJZCA9IG1zZy5n
ZXRNZXNzYWdlSUQoKTsNCiAgICAgICAgYmluZFByb3BzID0gbmV3IEJpbmRQcm9wZXJ0aWVzKCB2
ZXJzaW9uLCBkbiwgInNpbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYW5vbnltb3VzLCBudWxsLCBudWxsKTsNCg0KICAgICAgICAvLyBGb3IgYmluZCByZXF1
ZXN0cywgaWYgbm90IGNvbm5lY3RlZCwgYXR0ZW1wdCB0byByZWNvbm5lY3QNCiAgICAgICAgaWYo
ICEgY29ubi5pc0Nvbm5lY3RlZCgpKSB7DQogICAgICAgICAgICBpZiggY29ubi5nZXRIb3N0KCkg
IT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIGNvbm4uY29ubmVjdCggY29ubi5nZXRIb3N0KCks
IGNvbm4uZ2V0UG9ydCgpKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg
dGhyb3cgbmV3IExEQVBFeGNlcHRpb24oIEV4Y2VwdGlvbk1lc3NhZ2VzLkNPTk5FQ1RJT05fSU1Q
T1NTSUJMRSwNCiAgICAgICAgICAgICAgICAgICAgTERBUEV4Y2VwdGlvbi5DT05ORUNUX0VSUk9S
LCBudWxsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRoZSBzZW1h
cGhvcmUgaXMgcmVsZWFzZWQgd2hlbiB0aGUgYmluZCByZXNwb25zZSBpcyBxdWV1ZWQuDQogICAg
ICAgIGNvbm4uYWNxdWlyZVdyaXRlU2VtYXBob3JlKCBtc2dJZCk7DQoNCiAgICAgICAgcmV0dXJu
IHNlbmRSZXF1ZXN0VG9TZXJ2ZXIoIG1zZyxjb25zLmdldFRpbWVMaW1pdCgpLCBxdWV1ZSwgYmlu
ZFByb3BzKTsNCiAgICB9DQoNCiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAvLyBTQVNMIGJp
bmQgbWV0aG9kcw0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQogICAgLyoqDQogICAgICogU3lu
Y2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRoZSBMREFQIHNlcnZlciAodGhhdCB0aGUgb2Jq
ZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5lY3RlZCB0bykgdXNpbmcgdGhlIHNwZWNpZmll
ZCBuYW1lIGFuZCB0aGUgc3BlY2lmaWVkIHNldCBvZg0KICAgICAqIG1lY2hhbmlzbXMuDQogICAg
ICoNCiAgICAgKiA8cD5JZiBub25lIG9mIHRoZSByZXF1ZXN0ZWQgU0FTTCBtZWNoYW5pc21zIGlz
IGF2YWlsYWJsZSwgYW4NCiAgICAgKiBleGNlcHRpb24gaXMgdGhyb3duLiAgSWYgdGhlIG9iamVj
dCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBhbg0KICAgICAqIExEQVAgc2VydmVyLCB0aGlz
IG1ldGhvZCBhdHRlbXB0cyB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhlDQogICAg
ICogb2JqZWN0IGhhcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRp
b24gaXMNCiAgICAgKiBkaXNjYXJkZWQuIElmIG1lY2hhbmlzbXMgaXMgbnVsbCwgb3IgaWYgdGhl
IGZpcnN0IHZlcnNpb24gb2YgdGhlDQogICAgICogbWV0aG9kIGlzIGNhbGxlZCwgdGhlIExEQVAg
c2VydmVyIHdpbGwgYmUgaW50ZXJyb2dhdGVkIGZvciBpdHMNCiAgICAgKiBzdXBwb3J0ZWRTYXNs
TWVjaGFuaXNtcyBhdHRyaWJ1dGUgb2YgaXRzIHJvb3QgRFNFLiBTZWUgUkZDIDIyNTEgZm9yIGEN
CiAgICAgKiBkaXNjdXNzaW9uIG9mIHRoZSBTQVNMIGNsYXNzZXMuIDwvcD4NCiAgICAgKg0KICAg
ICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICBJZiBub24tbnVsbCBhbmQgbm9uLWVtcHR5LCBz
cGVjaWZpZXMgdGhhdCB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gYW5k
IGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAg
ICBiZSBhdXRoZW50aWNhdGVkIHdpdGggZG4gYXMgdGhlIGRpc3Rpbmd1aXNoZWQNCiAgICAgKiAg
ICAgICAgICAgICAgICAgIG5hbWUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gYXV0
aHpJZCAgSWYgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgc3BlY2lmaWVzIGFuIExEQVAgYXV0aHpJ
ZCB0bw0KICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0byB0aGUgU0FTTCBsYXllci4gIElm
IG51bGwgb3IgZW1wdHksIHRoZSBhdXRoeklkDQogICAgICogICAgICAgICAgICAgICAgICB3aWxs
IGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nIGFuZCBwcm9jZXNzZWQNCiAgICAgKiAgICAg
ICAgICAgICAgICAgIGFzIHBlciBSRkMgMjIyMi4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBw
YXJhbSBwcm9wcyAgICBUaGUgb3B0aW9uYWwgcXVhbGlmaWVycyBmb3IgdGhlIGF1dGhlbnRpY2F0
aW9uDQogICAgICogICAgICAgICAgICAgICAgICBzZXNzaW9uLg0KICAgICAqPGJyPjxicj4NCiAg
ICAgKiAgQHBhcmFtIGNiaCAgICAgIEEgY2xhc3Mgd2hpY2ggbWF5IGJlIGNhbGxlZCBieSB0aGUg
U0FTTCBjbGllbnQNCiAgICAgKiAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIHRvIG9i
dGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogICAgICogICAgICAgICAgICAgICAgICByZXF1
aXJlZCwgc3VjaCBhcyBhZGRpdGlvbmFsIGNyZWRlbnRpYWxzLg0KICAgICAqICAgICAgICAgICAg
ICAgICAgSWYgY2JoIGlzIG5vdCBvZiB0eXBlDQogICAgICogICAgICAgICAgICAgICAgICBqYXZh
eC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrSGFuZGxlciwgYQ0KICAgICAqICAgICAg
ICAgICAgICAgICAgUnVudGltZUV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4NCiAgICAgKg0KICAg
ICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBp
bmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUu
DQogICAgICovDQogICAgcHVibGljIHZvaWQgYmluZChTdHJpbmcgZG4sDQogICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgYXV0aHpJZCwNCiAgICAgICAgICAgICAgICAgICAgIE1hcCBwcm9wcywN
CiAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBjYmgpLypqYXZheC5zZWN1cml0eS5hdXRoLmNh
bGxiYWNrLkNhbGxiYWNrSGFuZGxlciovDQogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgTERB
UEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgYmluZCggZG4sIGF1dGh6SWQsIHByb3BzLCBjYmgs
IGRlZlNlYXJjaENvbnMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQogICAg
ICogU3luY2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRoZSBMREFQIHNlcnZlciAodGhhdCB0
aGUgb2JqZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5lY3RlZCB0bykgdXNpbmcgdGhlIHNw
ZWNpZmllZCBuYW1lIGFuZCB0aGUgc3BlY2lmaWVkIHNldCBvZg0KICAgICAqIG1lY2hhbmlzbXMu
DQogICAgICoNCiAgICAgKiA8cD5JZiBub25lIG9mIHRoZSByZXF1ZXN0ZWQgU0FTTCBtZWNoYW5p
c21zIGlzIGF2YWlsYWJsZSwgYW4NCiAgICAgKiBleGNlcHRpb24gaXMgdGhyb3duLiAgSWYgdGhl
IG9iamVjdCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBhbg0KICAgICAqIExEQVAgc2VydmVy
LCB0aGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhl
DQogICAgICogb2JqZWN0IGhhcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVu
dGljYXRpb24gaXMNCiAgICAgKiBkaXNjYXJkZWQuIElmIG1lY2hhbmlzbXMgaXMgbnVsbCwgb3Ig
aWYgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlDQogICAgICogbWV0aG9kIGlzIGNhbGxlZCwgdGhl
IExEQVAgc2VydmVyIHdpbGwgYmUgaW50ZXJyb2dhdGVkIGZvciBpdHMNCiAgICAgKiBzdXBwb3J0
ZWRTYXNsTWVjaGFuaXNtcyBhdHRyaWJ1dGUgb2YgaXRzIHJvb3QgRFNFLiBTZWUgUkZDIDIyNTEg
Zm9yIGENCiAgICAgKiBkaXNjdXNzaW9uIG9mIHRoZSBTQVNMIGNsYXNzZXMuIDwvcD4NCiAgICAg
Kg0KICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICBJZiBub24tbnVsbCBhbmQgbm9uLWVt
cHR5LCBzcGVjaWZpZXMgdGhhdCB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rp
b24gYW5kIGFsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQgc2hvdWxkDQogICAgICogICAgICAgICAg
ICAgICAgICBiZSBhdXRoZW50aWNhdGVkIHdpdGggZG4gYXMgdGhlIGRpc3Rpbmd1aXNoZWQNCiAg
ICAgKiAgICAgICAgICAgICAgICAgIG5hbWUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFy
YW0gYXV0aHpJZCAgSWYgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgc3BlY2lmaWVzIGFuIExEQVAg
YXV0aHpJZCB0bw0KICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0byB0aGUgU0FTTCBsYXll
ci4gIElmIG51bGwgb3IgZW1wdHksIHRoZSBhdXRoeklkDQogICAgICogICAgICAgICAgICAgICAg
ICB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nIGFuZCBwcm9jZXNzZWQNCiAgICAg
KiAgICAgICAgICAgICAgICAgIGFzIHBlciBSRkMgMjIyMi4NCiAgICAgKjxicj48YnI+DQogICAg
ICogIEBwYXJhbSBwcm9wcyAgICBUaGUgb3B0aW9uYWwgcXVhbGlmaWVycyBmb3IgdGhlIGF1dGhl
bnRpY2F0aW9uDQogICAgICogICAgICAgICAgICAgICAgICBzZXNzaW9uLg0KICAgICAqPGJyPjxi
cj4NCiAgICAgKiAgQHBhcmFtIGNiaCAgICAgIEEgY2xhc3Mgd2hpY2ggbWF5IGJlIGNhbGxlZCBi
eSB0aGUgU0FTTCBjbGllbnQNCiAgICAgKiAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9u
IHRvIG9idGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogICAgICogICAgICAgICAgICAgICAg
ICByZXF1aXJlZCwgc3VjaCBhcyBhZGRpdGlvbmFsIGNyZWRlbnRpYWxzLg0KICAgICAqICAgICAg
ICAgICAgICAgICAgSWYgY2JoIGlzIG5vdCBvZiB0eXBlDQogICAgICogICAgICAgICAgICAgICAg
ICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrSGFuZGxlciwgYQ0KICAgICAq
ICAgICAgICAgICAgICAgICAgUnVudGltZUV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4NCiAgICAg
Kjxicj48YnI+DQogICAgICogIEBwYXJhbSBjb25zICAgICBDb25zdHJhaW50cyBzcGVjaWZpYyB0
byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlv
biBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1l
c3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBi
aW5kKFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhdXRoeklkLA0KICAg
ICAgICAgICAgICAgICAgICAgTWFwIHByb3BzLA0KICAgICAgICAgICAgICAgICAgICAgT2JqZWN0
IGNiaCwvKmphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2tIYW5kbGVyKi8NCiAg
ICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIC8vIkxEQVBDb25uZWN0
aW9uLmJpbmQod2l0aCBtZWNoYW5pc21zKSBpcyBub3QgSW1wbGVtZW50ZWQuIg0KICAgICAgICB0
aHJvdyBuZXcgTERBUExvY2FsRXhjZXB0aW9uKEV4Y2VwdGlvbk1lc3NhZ2VzLk5PVF9JTVBMRU1F
TlRFRCwNCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJMREFQQ29ubmVjdGlvbi5iaW5k
KHdpdGggbWVjaGFuaXNtcykifSwNCiAgICAgICAgICAgICAgICBMREFQRXhjZXB0aW9uLkxEQVBf
Tk9UX1NVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSBh
dXRoZW50aWNhdGVzIHRvIHRoZSBMREFQIHNlcnZlciAodGhhdCB0aGUgb2JqZWN0IGlzDQogICAg
ICogY3VycmVudGx5IGNvbm5lY3RlZCB0bykgdXNpbmcgdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB0
aGUgc3BlY2lmaWVkIHNldCBvZg0KICAgICAqIG1lY2hhbmlzbXMuDQogICAgICoNCiAgICAgKiA8
cD5JZiBub25lIG9mIHRoZSByZXF1ZXN0ZWQgU0FTTCBtZWNoYW5pc21zIGlzIGF2YWlsYWJsZSwg
YW4NCiAgICAgKiBleGNlcHRpb24gaXMgdGhyb3duLiAgSWYgdGhlIG9iamVjdCBoYXMgYmVlbiBk
aXNjb25uZWN0ZWQgZnJvbSBhbg0KICAgICAqIExEQVAgc2VydmVyLCB0aGlzIG1ldGhvZCBhdHRl
bXB0cyB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlci4gSWYgdGhlDQogICAgICogb2JqZWN0IGhh
cyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRpb24gaXMNCiAgICAg
KiBkaXNjYXJkZWQuIElmIG1lY2hhbmlzbXMgaXMgbnVsbCwgb3IgaWYgdGhlIGZpcnN0IHZlcnNp
b24gb2YgdGhlDQogICAgICogbWV0aG9kIGlzIGNhbGxlZCwgdGhlIExEQVAgc2VydmVyIHdpbGwg
YmUgaW50ZXJyb2dhdGVkIGZvciBpdHMNCiAgICAgKiBzdXBwb3J0ZWRTYXNsTWVjaGFuaXNtcyBh
dHRyaWJ1dGUgb2YgaXRzIHJvb3QgRFNFLiBTZWUgUkZDIDIyNTEgZm9yIGENCiAgICAgKiBkaXNj
dXNzaW9uIG9mIHRoZSBTQVNMIGNsYXNzZXMuIDwvcD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0g
ZG4gICAgICAgSWYgbm9uLW51bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQog
ICAgICogICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJv
dWdoIGl0IHNob3VsZA0KICAgICAqICAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB3
aXRoIGRuIGFzIHRoZSBkaXN0aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgICBuYW1l
Lg0KICAgICAqICBAcGFyYW0gYXV0aHpJZCAgSWYgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgc3Bl
Y2lmaWVzIGFuIExEQVAgYXV0aHpJZCB0bw0KICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0
byB0aGUgU0FTTCBsYXllci4gIElmIG51bGwgb3IgZW1wdHksIHRoZSBhdXRoeklkDQogICAgICog
ICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nIGFuZCBw
cm9jZXNzZWQNCiAgICAgKiAgICAgICAgICAgICAgICAgIGFzIHBlciBSRkMgMjIyMi4NCiAgICAg
Kjxicj48YnI+DQogICAgICogIEBwYXJhbSBtZWNoYW5pc21zICAgIEFuIGFycmF5IG9mIElBTkEt
cmVnaXN0ZXJlZCBTQVNMIG1lY2hhbmlzbXMgd2hpY2gNCiAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgdGhlIGNsaWVudCBpcyB3aWxsaW5nIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24uDQog
ICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gcHJvcHMgICAgVGhlIG9wdGlvbmFsIHF1YWxp
ZmllcnMgZm9yIHRoZSBhdXRoZW50aWNhdGlvbg0KICAgICAqICAgICAgICAgICAgICAgICAgc2Vz
c2lvbi4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBjYmggICAgICBBIGNsYXNzIHdo
aWNoIG1heSBiZSBjYWxsZWQgYnkgdGhlIFNBU0wgY2xpZW50DQogICAgICogICAgICAgICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbiB0byBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KICAg
ICAqICAgICAgICAgICAgICAgICAgcmVxdWlyZWQsIHN1Y2ggYXMgYWRkaXRpb25hbCBjcmVkZW50
aWFscy4NCiAgICAgKiAgICAgICAgICAgICAgICAgIElmIGNiaCBpcyBub3Qgb2YgdHlwZQ0KICAg
ICAqICAgICAgICAgICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFj
a0hhbmRsZXIsIGENCiAgICAgKiAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFeGNlcHRpb24gd2ls
bCBiZSB0aHJvd24uDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEg
Z2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2Fn
ZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIGJpbmQo
U3RyaW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGF1dGh6SWQsDQogICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdbXSBtZWNoYW5pc21zLA0KICAgICAgICAgICAgICAgICAgICAg
TWFwIHByb3BzLA0KICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGNiaCkvKmphdmF4LnNlY3Vy
aXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2tIYW5kbGVyKi8NCiAgICAgICAgICAgICAgICAgICAg
IHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBiaW5kKCBkbiwgYXV0aHpJZCwg
bWVjaGFuaXNtcywgcHJvcHMsIGNiaCwgZGVmU2VhcmNoQ29ucyk7DQogICAgICAgIHJldHVybjsN
CiAgICB9DQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSBhdXRoZW50aWNhdGVzIHRvIHRo
ZSBMREFQIHNlcnZlciAodGhhdCB0aGUgb2JqZWN0IGlzDQogICAgICogY3VycmVudGx5IGNvbm5l
Y3RlZCB0bykgdXNpbmcgdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB0aGUgc3BlY2lmaWVkIHNldCBv
Zg0KICAgICAqIG1lY2hhbmlzbXMuDQogICAgICoNCiAgICAgKiA8cD5JZiBub25lIG9mIHRoZSBy
ZXF1ZXN0ZWQgU0FTTCBtZWNoYW5pc21zIGlzIGF2YWlsYWJsZSwgYW4NCiAgICAgKiBleGNlcHRp
b24gaXMgdGhyb3duLiAgSWYgdGhlIG9iamVjdCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBh
bg0KICAgICAqIExEQVAgc2VydmVyLCB0aGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZWNvbm5lY3Qg
dG8gdGhlIHNlcnZlci4gSWYgdGhlDQogICAgICogb2JqZWN0IGhhcyBhbHJlYWR5IGF1dGhlbnRp
Y2F0ZWQsIHRoZSBvbGQgYXV0aGVudGljYXRpb24gaXMNCiAgICAgKiBkaXNjYXJkZWQuIElmIG1l
Y2hhbmlzbXMgaXMgbnVsbCwgb3IgaWYgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlDQogICAgICog
bWV0aG9kIGlzIGNhbGxlZCwgdGhlIExEQVAgc2VydmVyIHdpbGwgYmUgaW50ZXJyb2dhdGVkIGZv
ciBpdHMNCiAgICAgKiBzdXBwb3J0ZWRTYXNsTWVjaGFuaXNtcyBhdHRyaWJ1dGUgb2YgaXRzIHJv
b3QgRFNFLiBTZWUgUkZDIDIyNTEgZm9yIGENCiAgICAgKiBkaXNjdXNzaW9uIG9mIHRoZSBTQVNM
IGNsYXNzZXMuIDwvcD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICAgSWYgbm9uLW51
bGwgYW5kIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoYXQgdGhlDQogICAgICogICAgICAgICAgICAg
ICAgICBjb25uZWN0aW9uIGFuZCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0IHNob3VsZA0KICAg
ICAqICAgICAgICAgICAgICAgICAgYmUgYXV0aGVudGljYXRlZCB3aXRoIGRuIGFzIHRoZSBkaXN0
aW5ndWlzaGVkDQogICAgICogICAgICAgICAgICAgICAgICBuYW1lLg0KICAgICAqICBAcGFyYW0g
YXV0aHpJZCAgSWYgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgc3BlY2lmaWVzIGFuIExEQVAgYXV0
aHpJZCB0bw0KICAgICAqICAgICAgICAgICAgICAgICAgcGFzcyB0byB0aGUgU0FTTCBsYXllci4g
IElmIG51bGwgb3IgZW1wdHksIHRoZSBhdXRoeklkDQogICAgICogICAgICAgICAgICAgICAgICB3
aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nIGFuZCBwcm9jZXNzZWQNCiAgICAgKiAg
ICAgICAgICAgICAgICAgIGFzIHBlciBSRkMgMjIyMi4NCiAgICAgKjxicj48YnI+DQogICAgICog
IEBwYXJhbSBtZWNoYW5pc21zICAgIEFuIGFycmF5IG9mIElBTkEtcmVnaXN0ZXJlZCBTQVNMIG1l
Y2hhbmlzbXMgd2hpY2gNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsaWVudCBp
cyB3aWxsaW5nIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24uDQogICAgICo8YnI+PGJyPg0KICAg
ICAqICBAcGFyYW0gcHJvcHMgICAgVGhlIG9wdGlvbmFsIHF1YWxpZmllcnMgZm9yIHRoZSBhdXRo
ZW50aWNhdGlvbg0KICAgICAqICAgICAgICAgICAgICAgICAgc2Vzc2lvbi4NCiAgICAgKjxicj48
YnI+DQogICAgICogIEBwYXJhbSBjYmggICAgICBBIGNsYXNzIHdoaWNoIG1heSBiZSBjYWxsZWQg
YnkgdGhlIFNBU0wgY2xpZW50DQogICAgICogICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
biB0byBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KICAgICAqICAgICAgICAgICAgICAg
ICAgcmVxdWlyZWQsIHN1Y2ggYXMgYWRkaXRpb25hbCBjcmVkZW50aWFscy4NCiAgICAgKiAgICAg
ICAgICAgICAgICAgIElmIGNiaCBpcyBub3Qgb2YgdHlwZQ0KICAgICAqICAgICAgICAgICAgICAg
ICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXIsIGENCiAgICAg
KiAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFeGNlcHRpb24gd2lsbCBiZSB0aHJvd24uDQogICAg
ICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICAgQ29uc3RyYWludHMgc3BlY2lmaWMg
dG8gdGhlIG9wZXJhdGlvbi4NCiAgICAgKg0KICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRp
b24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBt
ZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQg
YmluZChTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXV0aHpJZCwNCiAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIG1lY2hhbmlzbXMsDQogICAgICAgICAgICAgICAg
ICAgICBNYXAgcHJvcHMsDQogICAgICAgICAgICAgICAgICAgICBPYmplY3QgY2JoLC8qamF2YXgu
c2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXIqLw0KICAgICAgICAgICAgICAg
ICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgICAgICAgICAgICAgICB0aHJvd3Mg
TERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAg
ICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1ZXN0cywgbmFtZSArDQogICAgICAg
ICAgICAic2FzbEJpbmQoIiArIGRuICsgIikiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKGNv
bnMgPT0gbnVsbCkNCiAgICAgICAgICAgIGNvbnMgPSBkZWZTZWFyY2hDb25zOw0KDQogICAgICAg
IGlmKGRuID09IG51bGwpDQogICAgICAgICAgICBkbiA9ICIiOw0KDQogICAgICAgIGlmIChhdXRo
eklkID09IG51bGwpDQogICAgICAgICAgICBhdXRoeklkID0gIiI7DQoNCiAgICAgICAgdHJ5DQog
ICAgICAgIHsNCiAgICAgICAgICAgIFNhc2xDbGllbnQgc2FzbENsaWVudCA9IFNhc2wuY3JlYXRl
U2FzbENsaWVudChtZWNoYW5pc21zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRoeklkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibGRhcCIsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0SG9zdCgpLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcywNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENhbGxiYWNr
SGFuZGxlciljYmgpOw0KICAgICAgICAgICAgaWYgKHNhc2xDbGllbnQgPT0gbnVsbCkNCiAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTERBUEV4Y2VwdGlvbigNCiAgICAg
ICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgU0FTTCBtZWNoYW5pc20ocykgYW5kL29yIHBy
b3BlcnRpZXMiLA0KICAgICAgICAgICAgICAgICAgICAgIExEQVBFeGNlcHRpb24uQVVUSF9NRVRI
T0RfTk9UX1NVUFBPUlRFRCwgbnVsbCk7DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAg
aWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVi
dWcuc2FzbEJpbmQsIG5hbWUgKw0KICAgICAgICAgICAgICAgICAgICAic2FzbENsaWVudCBjcmVh
dGVkLCBtZWNoYW5pc20gIiArDQogICAgICAgICAgICAgICAgICAgIHNhc2xDbGllbnQuZ2V0TWVj
aGFuaXNtTmFtZSgpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgYnl0ZVtdICBjbGll
bnRSZXNwb25zZSA9IG51bGw7DQogICAgICAgICAgICBib29sZWFuIGFub255bW91cyA9IGZhbHNl
Ow0KICAgICAgICAgICAgQmluZFByb3BlcnRpZXMgYmluZFByb3BzID0gbmV3IEJpbmRQcm9wZXJ0
aWVzKExEQVBfVjMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNhc2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOw0K
DQogICAgICAgICAgICAvLyBBY3F1aXJlIHRoZSBiaW5kIHNlbWFwaG9yZSBhbmQgY29tbXVuaWNh
dGUgaXRzIHZhbHVlIHRvDQogICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBDb25uZWN0
aW9uIGNsYXNzLg0KICAgICAgICAgICAgaW50IGlkID0gY29ubi5hY3F1aXJlV3JpdGVTZW1hcGhv
cmUoKTsNCiAgICAgICAgICAgIGNvbm4uc2V0QmluZFNlbUlkKCBpZCk7DQoNCiAgICAgICAgICAg
IGlmIChzYXNsQ2xpZW50Lmhhc0luaXRpYWxSZXNwb25zZSgpKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICAgIGNsaWVudFJlc3BvbnNlID0gc2FzbENsaWVudC5ldmFsdWF0ZUNoYWxsZW5n
ZShuZXcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZVswXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB3aGlsZSgh
c2FzbENsaWVudC5pc0NvbXBsZXRlKCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
dHJ5DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBieXRlW10gcmVwbHlC
dWYgPSBMREFQVHJhbnNwb3J0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xpZW50UmVzcG9uc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzYXNsQ2xpZW50LmdldE1lY2hhbmlzbU5hbWUoKSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRQcm9wcyk7DQoNCiAgICAgICAgICAgICAgICAg
ICAgaWYocmVwbHlCdWYhPW51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLnNhc2xCaW5kLCBuYW1lICsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNhc2xDbGllbnQgcmVzcG9uc2UgIiArIHJlcGx5QnVmLmxl
bmd0aCArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMiKTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFJlc3Bv
bnNlID0gc2FzbENsaWVudC5ldmFsdWF0ZUNoYWxsZW5nZSgNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseUJ1Zik7DQogICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiggRGVidWcuTERBUF9ERUJVRykg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5zYXNsQmlu
ZCwgbmFtZSArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYXNsQ2xpZW50IHJl
c3BvbnNlIGVtcHR5Iik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
ICAgICAgICAgICBjbGllbnRSZXNwb25zZSA9IHNhc2xDbGllbnQuZXZhbHVhdGVDaGFsbGVuZ2Uo
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IGJ5dGVbMF0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgIGNhdGNoKFNhc2xFeGNlcHRpb24gZSkNCiAgICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FsbCB3aWxsIGZyZWUgYW55IGNsaWVu
dCByZXNvdXJjZXMuDQogICAgICAgICAgICAgICAgICAgIHNhc2xDbGllbnQuZGlzcG9zZSgpOw0K
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTERBUEV4Y2VwdGlvbigiVW5leHBlY3RlZCBT
QVNMIGVycm9yLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMREFQRXhjZXB0aW9uLk9USEVSLCBudWxsLCBlKTsNCiAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICAgICAgY2F0Y2goTERBUEV4Y2VwdGlvbiBsZGUpDQogICAgICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbGwgd2lsbCBmcmVlIGFueSBjbGllbnQgcmVz
b3VyY2VzLg0KICAgICAgICAgICAgICAgICAgICBzYXNsQ2xpZW50LmRpc3Bvc2UoKTsNCiAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbGRlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
IH0NCiAgICAgICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICAgICAg
RGVidWcudHJhY2UoIERlYnVnLnNhc2xCaW5kLCBuYW1lICsgInNhc2xCaW5kIENvbXBsZXRlIik7
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKFNhc2xFeGNlcHRpb24g
ZVNhc2wpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBMREFQRXhjZXB0aW9uKCJT
QVNMIEJpbmQgRXJyb3IuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
REFQRXhjZXB0aW9uLk9USEVSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVNhc2wuZ2V0Q2F1
c2UoKSk7DQogICAgICAgIH0NCg0KICAgICAgICAvL0xEQVAgQmluZCBjb21wbGV0ZQ0KICAgICAg
ICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSW1wbGVtZW50cyBhIExEQVAgVHJh
bnNwb3J0IG1ldGhvZCB3aGljaCByZWNpdmVzIHJlcXVlc3RzIGZyb20gdGhlDQogICAgICogc2Fz
bENsaWVudCBhbmQgc2VuZCBEYXRhIHRvIHRoZSBMREFQIHNlcnZlciBhbmQgcmV0dXJucyB0aGUg
cmVzcG9uc2UNCiAgICAgKiBiYWNrIHRvIHRoZSBzYXNsQ2xpZW50DQogICAgICoNCiAgICAgKiBA
cGFyYW0gdG9Xcml0ZSAgIHJlcXVlc3QgcmVjZWl2ZWQgZnJvbSBzYXNsQ2xpZW50IGluIGEgYnl0
ZSBhcnJheQ0KICAgICAqIEBwYXJhbSBtZWNoYW5pc20gTmFtZSBvZiB0aGUgc2FzbENsaWVudCAg
TWVjaGFuaXNtDQogICAgICogQHBhcmFtIGJpbmRQcm9wcyBCaW5kcHJvcGVydGllcw0KICAgICAq
DQogICAgICogQHJldHVybiAgUmVzcG9uc2UgcmVpdmVkIGZyb20gdGhlIExEQVAgc2VydmVyIGlu
IGEgYnl0ZSBhcnJheQ0KICAgICAqDQogICAgICogQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEg
Z2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2Fn
ZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHByaXZhdGUgYnl0ZVtdIExE
QVBUcmFuc3BvcnQoIGJ5dGVbXSB0b1dyaXRlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBtZWNoYW5pc20sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmluZFByb3BlcnRpZXMgYmluZFByb3BzKQ0KICAgICAgICAgICAgdGhyb3dzIExEQVBFeGNl
cHRpb24NCiAgICB7DQoNCiAgICAgICAgTERBUE1lc3NhZ2UgICAgIG1zZzsNCiAgICAgICAgUmZj
QmluZFJlc3BvbnNlIGJpbmRSZXNwb25zZTsNCiAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnM7
DQogICAgICAgIEFTTjFPY3RldFN0cmluZyBzZXJ2ZXJDcmVkczsNCg0KICAgICAgICBjb25zID0g
ZGVmU2VhcmNoQ29uczsNCiAgICAgICAgbXNnID0gbmV3IExEQVBNZXNzYWdlKExEQVBNZXNzYWdl
LkJJTkRfUkVRVUVTVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmZjQmlu
ZFJlcXVlc3QoTERBUF9WMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lY2hhbmlzbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9Xcml0ZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29ucy5nZXRDb250cm9scygpKTsNCg0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSA9
IHNlbmRSZXF1ZXN0VG9TZXJ2ZXIobXNnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zLmdldFRpbWVMaW1pdCgpLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kUHJvcHMpOw0K
ICAgICAgICBMREFQUmVzcG9uc2UgbGRhcFJlc3BvbnNlID0gKExEQVBSZXNwb25zZSlxdWV1ZS5n
ZXRSZXNwb25zZSgpOw0KICAgICAgICBiaW5kUmVzcG9uc2UgPSAoUmZjQmluZFJlc3BvbnNlKWxk
YXBSZXNwb25zZS5nZXRBU04xT2JqZWN0KCkuZ2V0KDEpOw0KICAgICAgICBzZXJ2ZXJDcmVkcyA9
IGJpbmRSZXNwb25zZS5nZXRTZXJ2ZXJTYXNsQ3JlZHMoKTsNCiAgICAgICAgaW50IHJlc3VsdENv
ZGUgPSBsZGFwUmVzcG9uc2UuZ2V0UmVzdWx0Q29kZSgpOw0KDQogICAgICAgIGJ5dGVbXSByZXBs
eUJ1ZiA9IG51bGw7DQogICAgICAgIGlmICgocmVzdWx0Q29kZSA9PSBMREFQRXhjZXB0aW9uLlNB
U0xfQklORF9JTl9QUk9HUkVTUykgfHwNCiAgICAgICAgICAgIChyZXN1bHRDb2RlID09IExEQVBF
eGNlcHRpb24uU1VDQ0VTUykpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChzZXJ2ZXJDcmVk
cyAhPSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcGx5QnVmID0gc2Vy
dmVyQ3JlZHMuYnl0ZVZhbHVlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAg
ZWxzZSB7DQogICAgICAgICAgIGxkYXBSZXNwb25zZS5jaGtSZXN1bHRDb2RlKCk7DQogICAgICAg
ICAgIHRocm93IG5ldyBMREFQRXhjZXB0aW9uKCJTQVNMIEJpbmQgRXJyb3IuIiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENvZGUsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudWxsKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcmVw
bHlCdWY7DQogICAgfQ0KDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgLy8gY29tcGFyZSBt
ZXRob2RzDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCiAgICAvKioNCiAgICAgKg0KICAgICAq
IFN5bmNocm9ub3VzbHkgY2hlY2tzIHRvIHNlZSBpZiBhbiBlbnRyeSBjb250YWlucyBhbiBhdHRy
aWJ1dGUNCiAgICAgKiB3aXRoIGEgc3BlY2lmaWVkIHZhbHVlLg0KICAgICAqDQogICAgICogIEBw
YXJhbSBkbiAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IHRvIHVzZSBp
biB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgY29tcGFyaXNvbi4NCiAgICAgKjxicj48YnI+
DQogICAgICogIEBwYXJhbSBhdHRyICAgIFRoZSBhdHRyaWJ1dGUgdG8gY29tcGFyZSBhZ2FpbnN0
IHRoZSBlbnRyeS4gVGhlDQogICAgICogICAgICAgICAgICAgICAgIG1ldGhvZCBjaGVja3MgdG8g
c2VlIGlmIHRoZSBlbnRyeSBoYXMgYW4NCiAgICAgKiAgICAgICAgICAgICAgICAgYXR0cmlidXRl
IHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgdmFsdWUgYXMgdGhpcw0KICAgICAqICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUuDQogICAgICoNCiAgICAgKiAgQHJldHVybiBUcnVlIGlmIHRoZSBlbnRy
eSBoYXMgdGhlIHZhbHVlLA0KICAgICAqICAgICAgICAgIGFuZCBmYWxzZSBpZiB0aGUgZW50cnkg
ZG9lcyBub3QNCiAgICAgKiAgICAgICAgICBoYXZlIHRoZSB2YWx1ZSBvciB0aGUgYXR0cmlidXRl
Lg0KICAgICAqDQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhj
ZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExE
QVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgYm9vbGVhbiBjb21wYXJlKFN0cmlu
ZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBBdHRyaWJ1dGUgYXR0cikNCiAg
ICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIHJldHVybiBjb21wYXJl
KGRuLCBhdHRyLCBkZWZTZWFyY2hDb25zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKg0KICAg
ICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIHRvIHNlZSBpZiBhbiBlbnRyeSBjb250YWlucyBhbiBh
dHRyaWJ1dGUgd2l0aCBhDQogICAgICogc3BlY2lmaWVkIHZhbHVlLCB1c2luZyB0aGUgc3BlY2lm
aWVkIGNvbnN0cmFpbnRzLg0KICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgIFRoZSBkaXN0
aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IHRvIHVzZSBpbiB0aGUNCiAgICAgKiAgICAgICAg
ICAgICAgICAgY29tcGFyaXNvbi4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBhdHRy
ICAgIFRoZSBhdHRyaWJ1dGUgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBlbnRyeS4gVGhlDQogICAg
ICogICAgICAgICAgICAgICAgIG1ldGhvZCBjaGVja3MgdG8gc2VlIGlmIHRoZSBlbnRyeSBoYXMg
YW4NCiAgICAgKiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBh
bmQgdmFsdWUgYXMgdGhpcw0KICAgICAqICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuDQogICAg
ICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICBDb25zdHJhaW50cyBzcGVjaWZpYyB0
byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZW50
cnkgaGFzIHRoZSB2YWx1ZSwNCiAgICAgKiAgICAgICAgICBhbmQgZmFsc2UgaWYgdGhlIGVudHJ5
IGRvZXMgbm90DQogICAgICogICAgICAgICAgaGF2ZSB0aGUgdmFsdWUgb3IgdGhlIGF0dHJpYnV0
ZS4NCiAgICAgKg0KICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4
Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1
YmxpYyBib29sZWFuIGNvbXBhcmUoU3RyaW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTERBUEF0dHJpYnV0ZSBhdHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENv
bnN0cmFpbnRzIGNvbnMpDQogICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAg
ICAgIGJvb2xlYW4gcmV0ID0gZmFsc2U7DQoNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcp
IHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1ZXN0cywgbmFtZSArDQog
ICAgICAgICAgICAiY29tcGFyZSgiICsgZG4gKyAiKSBpZiB2YWx1ZSIpOw0KICAgICAgICB9DQog
ICAgICAgIExEQVBSZXNwb25zZVF1ZXVlIHF1ZXVlID0gY29tcGFyZShkbiwgYXR0ciwgbnVsbCwg
Y29ucyk7DQoNCiAgICAgICAgTERBUFJlc3BvbnNlIHJlcyA9IChMREFQUmVzcG9uc2UpcXVldWUu
Z2V0UmVzcG9uc2UoKTsNCg0KICAgICAgICAvLyBTZXQgbG9jYWwgY29weSBvZiByZXNwb25zZUNv
bnRyb2xzIHN5bmNocm9ub3VzbHkgLSBpZiB0aGVyZSB3ZXJlIGFueQ0KICAgICAgICBzeW5jaHJv
bml6ZWQgKHJlc3BvbnNlQ3RsU2VtYXBob3JlKSB7DQogICAgICAgICAgICByZXNwb25zZUN0bHMg
PSByZXMuZ2V0Q29udHJvbHMoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKHJlcy5nZXRSZXN1
bHRDb2RlKCkgPT0gTERBUEV4Y2VwdGlvbi5DT01QQVJFX1RSVUUpIHsNCiAgICAgICAgICAgIHJl
dCA9IHRydWU7DQogICAgICAgIH0gZWxzZQ0KICAgICAgICBpZihyZXMuZ2V0UmVzdWx0Q29kZSgp
ID09IExEQVBFeGNlcHRpb24uQ09NUEFSRV9GQUxTRSkgew0KICAgICAgICAgICAgcmV0ID0gZmFs
c2U7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjaGtSZXN1bHRDb2RlKCBxdWV1ZSwg
Y29ucywgcmVzKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gcmV0Ow0KICAgIH0NCg0KICAg
IC8qKg0KICAgICAqIEFzeW5jaHJvbm91c2x5IGNvbXBhcmVzIGFuIGF0dHJpYnV0ZSB2YWx1ZSB3
aXRoIG9uZSBpbiB0aGUgZGlyZWN0b3J5LA0KICAgICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgcXVl
dWUuDQogICAgICogPHA+DQogICAgICogUGxlYXNlIG5vdGUgdGhhdCBhIHN1Y2Nlc3NmdWwgY29t
cGxldGlvbiBvZiB0aGlzIGNvbW1hbmQgcmVzdWx0cyBpbg0KICAgICAqIG9uZSBvZiB0d28gc3Rh
dHVzIGNvZGVzOiBMREFQRXhjZXB0aW9uLkNPTVBBUkVfVFJVRSBpZiB0aGUgZW50cnkNCiAgICAg
KiBoYXMgdGhlIHZhbHVlLCBhbmQgTERBUEV4Y2VwdGlvbi5DT01QQVJFX0ZBTFNFIGlmIHRoZSBl
bnRyeQ0KICAgICAqIGRvZXMgbm90IGhhdmUgdGhlIHZhbHVlIG9yIHRoZSBhdHRyaWJ1dGUuDQog
ICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gZG4gICAgICBUaGUgZGlzdGluZ3Vpc2hlZCBu
YW1lIG9mIHRoZSBlbnRyeSBjb250YWluaW5nIGFuDQogICAgICogICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSB0byBjb21wYXJlLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGF0dHIg
ICAgQW4gYXR0cmlidXRlIHRvIGNvbXBhcmUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFy
YW0gcXVldWUgICBUaGUgcXVldWUgZm9yIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2ZXIg
aW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBJ
ZiBpdCBpcyBudWxsLCBhDQogICAgICogICAgICAgICAgICAgICAgICAgIHF1ZXVlIG9iamVjdCBp
cyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhj
ZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAg
KiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqDQogICAgICogQHNlZSBM
REFQRXhjZXB0aW9uI0NPTVBBUkVfVFJVRQ0KICAgICAqIEBzZWUgTERBUEV4Y2VwdGlvbiNDT01Q
QVJFX0ZBTFNFDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIGNvbXBhcmUo
U3RyaW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBB
dHRyaWJ1dGUgYXR0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
REFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSkNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAg
ICB7DQogICAgICAgIHJldHVybiBjb21wYXJlKGRuLCBhdHRyLCBxdWV1ZSwgZGVmU2VhcmNoQ29u
cyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXN5bmNocm9ub3VzbHkgY29tcGFyZXMgYW4g
YXR0cmlidXRlIHZhbHVlIHdpdGggb25lIGluIHRoZSBkaXJlY3RvcnksDQogICAgICogdXNpbmcg
dGhlIHNwZWNpZmllZCBxdWV1ZSBhbmQgY29udHJhaW50cy4NCiAgICAgKiA8cD4NCiAgICAgKiBQ
bGVhc2Ugbm90ZSB0aGF0IGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoaXMgY29tbWFuZCBy
ZXN1bHRzIGluDQogICAgICogb25lIG9mIHR3byBzdGF0dXMgY29kZXM6IExEQVBFeGNlcHRpb24u
Q09NUEFSRV9UUlVFIGlmIHRoZSBlbnRyeQ0KICAgICAqIGhhcyB0aGUgdmFsdWUsIGFuZCBMREFQ
RXhjZXB0aW9uLkNPTVBBUkVfRkFMU0UgaWYgdGhlIGVudHJ5DQogICAgICogZG9lcyBub3QgaGF2
ZSB0aGUgdmFsdWUgb3IgdGhlIGF0dHJpYnV0ZS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBw
YXJhbSBkbiAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IGNvbnRhaW5p
bmcgYW4NCiAgICAgKiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHRvIGNvbXBhcmUuDQogICAg
ICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gYXR0ciAgICBBbiBhdHRyaWJ1dGUgdG8gY29tcGFy
ZS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBxdWV1ZSAgICAgSGFuZGxlciBmb3Ig
bWVzc2FnZXMgcmV0dXJuZWQgZnJvbSBhIHNlcnZlciBpbg0KICAgICAqICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAg
ICAgICAgICAgICAgICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAg
ICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICAgIENvbnN0cmFpbnRzIHNwZWNpZmlj
IHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0
aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAg
bWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqDQogICAgICogQHNlZSBMREFQ
RXhjZXB0aW9uI0NPTVBBUkVfVFJVRQ0KICAgICAqIEBzZWUgTERBUEV4Y2VwdGlvbiNDT01QQVJF
X0ZBTFNFDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIGNvbXBhcmUoU3Ry
aW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBBdHRyaWJ1
dGUgYXR0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9u
c2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQ
Q29uc3RyYWludHMgY29ucykNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQog
ICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSgg
RGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgImNvbXBhcmUoIiArIGRuICsg
IikgY29tcGFyZSB2YWx1ZSIpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoIGF0dHIuc2l6ZSgp
ICE9IDEpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
ImNvbXBhcmU6IEV4YWN0bHkgb25lIHZhbHVlICIgKw0KICAgICAgICAgICAgICAgICAgICAibXVz
dCBiZSBwcmVzZW50IGluIHRoZSBMREFQQXR0cmlidXRlIik7DQogICAgICAgIH0NCg0KICAgICAg
ICBpZihkbiA9PSBudWxsICkgew0KICAgICAgICAgICAgLy8gSW52YWxpZCBwYXJhbWV0ZXINCiAg
ICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbXBhcmU6IERO
IGNhbm5vdCBiZSBudWxsIik7DQogICAgICAgIH0NCg0KICAgICAgICBpZihjb25zID09IG51bGwp
DQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNoQ29uczsNCg0KICAgICAgICBMREFQTWVzc2Fn
ZSBtc2cgPSBuZXcgTERBUENvbXBhcmVSZXF1ZXN0KCBkbiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5nZXROYW1lKCksDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZ2V0Qnl0ZVZhbHVl
KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnMuZ2V0Q29udHJvbHMoKSk7DQoNCiAgICAgICAgcmV0dXJuIHNlbmRSZXF1ZXN0VG9TZXJ2ZXIo
bXNnLCBjb25zLmdldFRpbWVMaW1pdCgpLCBxdWV1ZSwgbnVsbCk7DQogICAgfQ0KDQogICAgLy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqDQogICAgLy8gY29ubmVjdCBtZXRob2RzDQogICAgLy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQoNCiAgICAvKioNCiAgICAgKg0KICAgICAqICBDb25uZWN0cyB0byB0aGUgc3BlY2lm
aWVkIGhvc3QgYW5kIHBvcnQuDQogICAgICoNCiAgICAgKiAgPHA+SWYgdGhpcyBMREFQQ29ubmVj
dGlvbiBvYmplY3QgcmVwcmVzZW50cyBhbiBvcGVuIGNvbm5lY3Rpb24sIHRoZQ0KICAgICAqICBj
b25uZWN0aW9uIGlzIGNsb3NlZCBmaXJzdCBiZWZvcmUgdGhlIG5ldyBjb25uZWN0aW9uIGlzIG9w
ZW5lZC4NCiAgICAgKiAgQXQgdGhpcyBwb2ludCwgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24s
IGFuZCBhbnkgb3BlcmF0aW9ucyBhcmUNCiAgICAgKiAgY29uZHVjdGVkIGFzIGFuIGFub255bW91
cyBjbGllbnQuPC9wPg0KICAgICAqDQogICAgICogIDxwPiBXaGVuIG1vcmUgdGhhbiBvbmUgaG9z
dCBuYW1lIGlzIHNwZWNpZmllZCwgZWFjaCBob3N0IGlzIGNvbnRhY3RlZA0KICAgICAqICBpbiB0
dXJuIHVudGlsIGEgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQuPC9wPg0KICAgICAqDQog
ICAgICogIEBwYXJhbSBob3N0IEEgaG9zdCBuYW1lIG9yIGEgZG90dGVkIHN0cmluZyByZXByZXNl
bnRpbmcgdGhlIElQIGFkZHJlc3MNCiAgICAgKiAgICAgICAgICAgICAgb2YgYSBob3N0IHJ1bm5p
bmcgYW4gTERBUCBzZXJ2ZXIuIEl0IG1heSBhbHNvDQogICAgICogICAgICAgICAgICAgIGNvbnRh
aW4gYSBsaXN0IG9mIGhvc3QgbmFtZXMsIHNwYWNlLWRlbGltaXRlZC4gRWFjaCBob3N0DQogICAg
ICogICAgICAgICAgICAgIG5hbWUgY2FuIGluY2x1ZGUgYSB0cmFpbGluZyBjb2xvbiBhbmQgcG9y
dCBudW1iZXIuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gcG9ydCBUaGUgVENQIG9y
IFVEUCBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvIG9yIGNvbnRhY3QuDQogICAgICogICAgICAg
ICAgICAgIFRoZSBkZWZhdWx0IExEQVAgcG9ydCBpcyAzODkuIFRoZSBwb3J0IHBhcmFtZXRlciBp
cw0KICAgICAqICAgICAgICAgICAgICBpZ25vcmVkIGZvciBhbnkgaG9zdCBoYW1lIHdoaWNoIGlu
Y2x1ZGVzIGEgY29sb24gYW5kDQogICAgICogICAgICAgICAgICAgIHBvcnQgbnVtYmVyLg0KICAg
ICAqPGJyPjxicj4NCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBl
eGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKg0KICAgICAq
Lw0KICAgIHB1YmxpYyB2b2lkIGNvbm5lY3QoU3RyaW5nIGhvc3QsIGludCBwb3J0KQ0KICAgICAg
ICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgLy8gY29ubmVjdCBkb2Vzbid0
IGFmZmVjdCBvdGhlciBjbG9uZXMNCiAgICAgICAgLy8gSWYgbm90IGEgY2xvbmUsIGRlc3Ryb3lz
IG9sZCBjb25uZWN0aW9uLg0KICAgICAgICBpZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAg
ICAgICAgRGVidWcudHJhY2UoIERlYnVnLmFwaVJlcXVlc3RzLCBuYW1lICsNCiAgICAgICAgICAg
ICJjb25uZWN0KCIgKyBob3N0ICsgIiwgIiArIHBvcnQgKyAiKSIpOw0KICAgICAgICB9DQoNCiAg
ICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBzcGFjZS1kZWxpbWl0ZWQgbGlzdA0KICAgICAgICBT
dHJpbmdUb2tlbml6ZXIgaG9zdExpc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhvc3QsIiAiKTsN
CiAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSBudWxsOw0KDQogICAgICAgIGludCBzcGVjaWZpZWRQ
b3J0Ow0KICAgICAgICBpbnQgY29sb25JbmRleDsgLy9hZnRlciB0aGUgY29sb24gaXMgdGhlIHBv
cnQNCiAgICAgICAgd2hpbGUgKGhvc3RMaXN0Lmhhc01vcmVUb2tlbnMoKSkgew0KICAgICAgICAg
ICAgdHJ5ew0KICAgICAgICAgICAgICAgIHNwZWNpZmllZFBvcnQ9cG9ydDsNCiAgICAgICAgICAg
ICAgICBhZGRyZXNzID0gaG9zdExpc3QubmV4dFRva2VuKCk7DQogICAgICAgICAgICAgICAgY29s
b25JbmRleCA9IGFkZHJlc3MuaW5kZXhPZigoaW50KSc6Jyk7DQogICAgICAgICAgICAgICAgaWYg
KGNvbG9uSW5kZXggIT0gLTEgJiYgY29sb25JbmRleCsxICE9IGFkZHJlc3MubGVuZ3RoKCkpew0K
ICAgICAgICAgICAgICAgICAgICAvL3BhcnNlIFBvcnQgb3V0IG9mIGFkZHJlc3MNCiAgICAgICAg
ICAgICAgICAgICAgdHJ5ew0KICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkUG9ydCA9
IEludGVnZXIucGFyc2VJbnQoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzLnN1YnN0cmluZyhjb2xvbkluZGV4KzEpKTsNCiAgICAgICAgICAgICAgICAgICAgICAg
IGFkZHJlc3MgPSAgIGFkZHJlc3Muc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpOw0KICAgICAgICAg
ICAgICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBlKXsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25NZXNzYWdlcy5JTlZBTElEX0FERFJFU1MpOw0K
ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
IC8vIFRoaXMgbWF5IHJldHVybiBhIGRpZmZlcmVudCBjb25uIG9iamVjdA0KICAgICAgICAgICAg
ICAgIC8vIERpc2Fzc29jaWF0ZSB0aGlzIGNsb25lIHdpdGggdGhlIHVuZGVybHlpbmcgY29ubmVj
dGlvbi4NCiAgICAgICAgICAgICAgICBjb25uID0gY29ubi5kZXN0cm95Q2xvbmUoIHRydWUpOw0K
ICAgICAgICAgICAgICAgIGNvbm4uY29ubmVjdCggYWRkcmVzcywgc3BlY2lmaWVkUG9ydCk7DQog
ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9Y2F0Y2ggKExEQVBFeGNlcHRpb24g
TEUpew0KICAgICAgICAgICAgICAgIGlmICghaG9zdExpc3QuaGFzTW9yZVRva2VucygpKQ0KICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBMRTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg
ICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgLy8gZGVs
ZXRlIG1ldGhvZHMNCiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KICAgIC8qKg0KICAgICAqDQog
ICAgICogU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBlbnRyeSB3aXRoIHRoZSBzcGVjaWZpZWQg
ZGlzdGluZ3Vpc2hlZCBuYW1lDQogICAgICogZnJvbSB0aGUgZGlyZWN0b3J5Lg0KICAgICAqDQog
ICAgICogPHA+Tm90ZTogQSBEZWxldGUgb3BlcmF0aW9uIHdpbGwgbm90IHJlbW92ZSBhbiBlbnRy
eSB0aGF0IGNvbnRhaW5zDQogICAgICogc3Vib3JkaW5hdGUgZW50cmllcywgbm9yIHdpbGwgaXQg
ZGVyZWZlcmVuY2UgYWxpYXMgZW50cmllcy4gPC9wPg0KICAgICAqDQogICAgICogIEBwYXJhbSBk
biAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IHRvIGRlbGV0ZS4NCiAg
ICAgKg0KICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlv
biB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVy
cm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQgZGVsZXRlKFN0cmluZyBkbikNCiAg
ICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGRlbGV0ZShkbiwgZGVm
U2VhcmNoQ29ucyk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCg0KICAgIC8qKg0KICAgICAq
IFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGUgZW50cnkgd2l0aCB0aGUgc3BlY2lmaWVkIGRpc3Rp
bmd1aXNoZWQgbmFtZQ0KICAgICAqIGZyb20gdGhlIGRpcmVjdG9yeSwgdXNpbmcgdGhlIHNwZWNp
ZmllZCBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqIDxwPk5vdGU6IEEgRGVsZXRlIG9wZXJh
dGlvbiB3aWxsIG5vdCByZW1vdmUgYW4gZW50cnkgdGhhdCBjb250YWlucw0KICAgICAqIHN1Ym9y
ZGluYXRlIGVudHJpZXMsIG5vciB3aWxsIGl0IGRlcmVmZXJlbmNlIGFsaWFzIGVudHJpZXMuIDwv
cD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1l
IG9mIHRoZSBlbnRyeSB0byBkZWxldGUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0g
Y29ucyAgICBDb25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQog
ICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNo
IGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQgZGVs
ZXRlKFN0cmluZyBkbiwgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93cyBMREFQ
RXhjZXB0aW9uDQogICAgew0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSA9DQogICAg
ICAgICAgICBkZWxldGUoZG4sIG51bGwsIGNvbnMpOw0KDQogICAgICAgIC8vIEdldCBhIGhhbmRs
ZSB0byB0aGUgZGVsZXRlIHJlc3BvbnNlDQogICAgICAgIExEQVBSZXNwb25zZSBkZWxldGVSZXNw
b25zZSA9IChMREFQUmVzcG9uc2UpKHF1ZXVlLmdldFJlc3BvbnNlKCkpOw0KDQogICAgICAgIC8v
IFNldCBsb2NhbCBjb3B5IG9mIHJlc3BvbnNlQ29udHJvbHMgc3luY2hyb25vdXNseSAtIGlmIHRo
ZXJlIHdlcmUgYW55DQogICAgICAgIHN5bmNocm9uaXplZCAocmVzcG9uc2VDdGxTZW1hcGhvcmUp
IHsNCiAgICAgICAgICAgIHJlc3BvbnNlQ3RscyA9IGRlbGV0ZVJlc3BvbnNlLmdldENvbnRyb2xz
KCk7DQogICAgICAgIH0NCiAgICAgICAgY2hrUmVzdWx0Q29kZSggcXVldWUsIGNvbnMsIGRlbGV0
ZVJlc3BvbnNlKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFz
eW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGVudHJ5IHdpdGggdGhlIHNwZWNpZmllZCBkaXN0aW5n
dWlzaGVkIG5hbWUNCiAgICAgKiBmcm9tIHRoZSBkaXJlY3RvcnkgYW5kIHJldHVybnMgdGhlIHJl
c3VsdHMgdG8gdGhlIHNwZWNpZmllZCBxdWV1ZS4NCiAgICAgKg0KICAgICAqIDxwPk5vdGU6IEEg
RGVsZXRlIG9wZXJhdGlvbiB3aWxsIG5vdCByZW1vdmUgYW4gZW50cnkgdGhhdCBjb250YWlucw0K
ICAgICAqIHN1Ym9yZGluYXRlIGVudHJpZXMsIG5vciB3aWxsIGl0IGRlcmVmZXJlbmNlIGFsaWFz
IGVudHJpZXMuIDwvcD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICBUaGUgZGlzdGlu
Z3Vpc2hlZCBuYW1lIG9mIHRoZSBlbnRyeSB0byBtb2RpZnkuDQogICAgICo8YnI+PGJyPg0KICAg
ICAqICBAcGFyYW0gcXVldWUgICAgIFRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgcmV0dXJuZWQgZnJv
bSBhIHNlcnZlciBpbg0KICAgICAqICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHRoaXMg
cmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAgICAgICAgICAgICAgICAgIHF1ZXVl
IG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlv
biBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJy
b3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqDQogICAg
ICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIGRlbGV0ZShTdHJpbmcgZG4sIExEQVBS
ZXNwb25zZVF1ZXVlIHF1ZXVlKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsN
CiAgICAgICAgcmV0dXJuIGRlbGV0ZShkbiwgcXVldWUsIGRlZlNlYXJjaENvbnMpOw0KICAgIH0N
Cg0KICAgIC8qKg0KICAgICAqIEFzeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGVudHJ5IHdpdGgg
dGhlIHNwZWNpZmllZCBkaXN0aW5ndWlzaGVkIG5hbWUNCiAgICAgKiBmcm9tIHRoZSBkaXJlY3Rv
cnksIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udHJhaW50cyBhbmQgcXVldWUuDQogICAgICoNCiAg
ICAgKiA8cD5Ob3RlOiBBIERlbGV0ZSBvcGVyYXRpb24gd2lsbCBub3QgcmVtb3ZlIGFuIGVudHJ5
IHRoYXQgY29udGFpbnMNCiAgICAgKiBzdWJvcmRpbmF0ZSBlbnRyaWVzLCBub3Igd2lsbCBpdCBk
ZXJlZmVyZW5jZSBhbGlhcyBlbnRyaWVzLiA8L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIGRu
ICAgICAgVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiB0aGUgZW50cnkgdG8gZGVsZXRlLg0KICAg
ICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHF1ZXVlICAgICAgVGhlIHF1ZXVlIGZvciBtZXNz
YWdlcyByZXR1cm5lZCBmcm9tIGEgc2VydmVyIGluDQogICAgICogICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAgICAg
ICAgICAgICAgICAgICBxdWV1ZSBvYmplY3QgaXMgY3JlYXRlZCBpbnRlcm5hbGx5Lg0KICAgICAq
PGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgVGhlIGNvbnN0cmFpbnRzIHNwZWNpZmlj
IHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0
aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAg
bWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqDQogICAgICovDQogICAgcHVi
bGljIExEQVBSZXNwb25zZVF1ZXVlIGRlbGV0ZShTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcp
IHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1ZXN0cywgbmFtZSArDQog
ICAgICAgICAgICAiZGVsZXRlKCIgKyBkbiArICIpIik7DQogICAgICAgIH0NCiAgICAgICAgaWYo
ZG4gPT0gbnVsbCkgew0KICAgICAgICAgICAgLy8gSW52YWxpZCBETiBwYXJhbWV0ZXINCiAgICAg
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uTWVzc2FnZXMuRE5fUEFSQU1fRVJST1Ip
Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYoY29ucyA9PSBudWxsKQ0KICAgICAgICAgICAgY29u
cyA9IGRlZlNlYXJjaENvbnM7DQoNCiAgICAgICAgTERBUE1lc3NhZ2UgbXNnID0gbmV3IExEQVBE
ZWxldGVSZXF1ZXN0KCBkbiwgY29ucy5nZXRDb250cm9scygpKTsNCg0KICAgICAgICByZXR1cm4g
c2VuZFJlcXVlc3RUb1NlcnZlcihtc2csIGNvbnMuZ2V0VGltZUxpbWl0KCksIHF1ZXVlLCBudWxs
KTsNCiAgICB9DQoNCiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAvLyBkaXNjb25uZWN0IG1l
dGhvZA0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQogICAgLyoqDQogICAgICoNCiAgICAgKiBT
eW5jaHJvbm91c2x5IGRpc2Nvbm5lY3RzIGZyb20gdGhlIExEQVAgc2VydmVyLg0KICAgICAqDQog
ICAgICogPHA+QmVmb3JlIHRoZSBvYmplY3QgY2FuIHBlcmZvcm0gTERBUCBvcGVyYXRpb25zIGFn
YWluLCBpdCBtdXN0DQogICAgICogcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYnkgY2FsbGluZyBj
b25uZWN0LjwvcD4NCiAgICAgKg0KICAgICAqIDxwPlRoZSBkaXNjb25uZWN0IG1ldGhvZCBhYmFu
ZG9ucyBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdHMsIGlzc3VlcyBhbg0KICAgICAqIHVuYmluZCBy
ZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIsIGFuZCB0aGVuIGNsb3NlcyB0aGUgc29ja2V0LjwvcD4NCiAg
ICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9u
IHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJy
b3IgY29kZS4NCiAgICAgKg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QoKQ0K
ICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgLy8gZGlzY29ubmVj
dCBmcm9tIEFQSSBjYWxsDQogICAgICAgIGRpc2Nvbm5lY3QoIGRlZlNlYXJjaENvbnMsIHRydWUp
Ow0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNs
eSBkaXNjb25uZWN0cyBmcm9tIHRoZSBMREFQIHNlcnZlci4NCiAgICAgKg0KICAgICAqIDxwPkJl
Zm9yZSB0aGUgb2JqZWN0IGNhbiBwZXJmb3JtIExEQVAgb3BlcmF0aW9ucyBhZ2FpbiwgaXQgbXVz
dA0KICAgICAqIHJlY29ubmVjdCB0byB0aGUgc2VydmVyIGJ5IGNhbGxpbmcgY29ubmVjdC48L3A+
DQogICAgICoNCiAgICAgKiA8cD5UaGUgZGlzY29ubmVjdCBtZXRob2QgYWJhbmRvbnMgYW55IG91
dHN0YW5kaW5nIHJlcXVlc3RzLCBpc3N1ZXMgYW4NCiAgICAgKiB1bmJpbmQgcmVxdWVzdCB0byB0
aGUgc2VydmVyLCBhbmQgdGhlbiBjbG9zZXMgdGhlIHNvY2tldC48L3A+DQogICAgICoNCiAgICAg
KiBAcGFyYW0gY29ucyBMRFBDb25zdHJhaW50cyB0byBiZSBzZXQgd2l0aCB0aGUgdW5iaW5kIHJl
cXVlc3QNCiAgICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwg
ZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFu
IExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCBM
REFQQ29uc3RyYWludHMgY29ucykNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7
DQogICAgICAgIC8vIGRpc2Nvbm5lY3QgZnJvbSBBUEkgY2FsbA0KICAgICAgICBkaXNjb25uZWN0
KGNvbnMsIHRydWUpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICog
U3luY2hyb25vdXNseSBkaXNjb25uZWN0IGZyb20gdGhlIHNlcnZlcg0KICAgICAqDQogICAgICog
QHBhcmFtIGhvdyB0cnVlIGlmIGFwcGxpY2F0aW9uIGNhbGwgZGlzY29ubmVjdCBBUEksIGZhbHNl
IGlmIGZpbmFsaXplLg0KICAgICAqLw0KICAgIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0KExEQVBD
b25zdHJhaW50cyBjb25zLCBib29sZWFuIGhvdykNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRp
b24NCiAgICB7DQogICAgICAgIC8vIGRpc2Nvbm5lY3QgZG9lc24ndCBhZmZlY3Qgb3RoZXIgY2xv
bmVzDQogICAgICAgIC8vIElmIG5vdCBhIGNsb25lLCBkaXN0cm95cyBjb25uZWN0aW9uDQogICAg
ICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVi
dWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgKGhvdz8iZGlzY29ubmVjdCgpIjoi
ZmluYWxpemUoKSIpKTsNCiAgICAgICAgfQ0KICAgICAgICBjb25uID0gY29ubi5kZXN0cm95Q2xv
bmUoaG93KTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kg0KICAgIC8vIGV4dGVuZGVkT3BlcmF0aW9uIG1ldGhvZHMNCiAgICAvLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCg0KICAgIC8qKg0KICAgICAqIFByb3ZpZGVzIGEgc3luY2hyb25vdXMgbWVhbnMgdG8gYWNj
ZXNzIGV4dGVuZGVkLCBub24tbWFuZGF0b3J5DQogICAgICogb3BlcmF0aW9ucyBvZmZlcmVkIGJ5
IGEgcGFydGljdWxhciBMREFQdjMgY29tcGxpYW50IHNlcnZlci4NCiAgICAgKg0KICAgICAqIEBw
YXJhbSBvcCAgVGhlIG9iamVjdCB3aGljaCBjb250YWlucyAoMSkgYW4gaWRlbnRpZmllciBvZiBh
biBleHRlbmRlZA0KICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uIHdoaWNoIHNob3VsZCBiZSBy
ZWNvZ25pemVkIGJ5IHRoZSBwYXJ0aWN1bGFyIExEQVANCiAgICAgKiAgICAgICAgICAgIHNlcnZl
ciB0aGlzIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gYW5kICgyKQ0KICAgICAqICAgICAgICAgICAg
YW4gb3BlcmF0aW9uLXNwZWNpZmljIHNlcXVlbmNlIG9mIG9jdGV0IHN0cmluZ3MNCiAgICAgKiAg
ICAgICAgICAgIG9yIEJFUi1lbmNvZGVkIHZhbHVlcy4NCiAgICAgKg0KICAgICAqIEByZXR1cm4g
QW4gb3BlcmF0aW9uLXNwZWNpZmljIG9iamVjdCwgY29udGFpbmluZyBhbiBJRCBhbmQgZWl0aGVy
IGFuIG9jdGV0DQogICAgICogc3RyaW5nIG9yIEJFUi1lbmNvZGVkIHZhbHVlcy4NCiAgICAgKg0K
ICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNo
IGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29k
ZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgTERBUEV4dGVuZGVkUmVzcG9uc2UgZXh0ZW5kZWRPcGVy
YXRpb24oTERBUEV4dGVuZGVkT3BlcmF0aW9uIG9wKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2Vw
dGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIGV4dGVuZGVkT3BlcmF0aW9uKG9wLCBkZWZTZWFy
Y2hDb25zKTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqICBTeW5jaHJvbm91cyBMREFQIGV4dGVu
ZGVkIHJlcXVlc3Qgd2l0aCBTZWFyY2hDb25zdHJhaW50cw0KICAgICAqLw0KDQogICAgIC8qKg0K
ICAgICAqDQogICAgICogUHJvdmlkZXMgYSBzeW5jaHJvbm91cyBtZWFucyB0byBhY2Nlc3MgZXh0
ZW5kZWQsIG5vbi1tYW5kYXRvcnkNCiAgICAgKiBvcGVyYXRpb25zIG9mZmVyZWQgYnkgYSBwYXJ0
aWN1bGFyIExEQVB2MyBjb21wbGlhbnQgc2VydmVyLg0KICAgICAqDQogICAgICogQHBhcmFtIG9w
ICBUaGUgb2JqZWN0IHdoaWNoIGNvbnRhaW5zICgxKSBhbiBpZGVudGlmaWVyIG9mIGFuIGV4dGVu
ZGVkDQogICAgICogICAgICAgICAgICBvcGVyYXRpb24gd2hpY2ggc2hvdWxkIGJlIHJlY29nbml6
ZWQgYnkgdGhlIHBhcnRpY3VsYXIgTERBUA0KICAgICAqICAgICAgICAgICAgc2VydmVyIHRoaXMg
Y2xpZW50IGlzIGNvbm5lY3RlZCB0byBhbmQgKDIpIGFuDQogICAgICogICAgICAgICAgICBvcGVy
YXRpb24tc3BlY2lmaWMgc2VxdWVuY2Ugb2Ygb2N0ZXQgc3RyaW5ncw0KICAgICAqICAgICAgICAg
ICAgb3IgQkVSLWVuY29kZWQgdmFsdWVzLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiBAcGFyYW0g
Y29ucyBUaGUgY29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4NCiAgICAgKg0K
ICAgICAqIEByZXR1cm4gQW4gb3BlcmF0aW9uLXNwZWNpZmljIG9iamVjdCwgY29udGFpbmluZyBh
biBJRCBhbmQgZWl0aGVyIGFuDQogICAgICogb2N0ZXQgc3RyaW5nIG9yIEJFUi1lbmNvZGVkIHZh
bHVlcy4NCiAgICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwg
ZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFu
IExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCg0KICAgIHB1YmxpYyBMREFQRXh0ZW5kZWRSZXNw
b25zZSBleHRlbmRlZE9wZXJhdGlvbihMREFQRXh0ZW5kZWRPcGVyYXRpb24gb3AsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJhaW50
cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCg0KICAgICAgICAv
LyBDYWxsIGFzeW5jaHJvbm91cyBBUEkgYW5kIGdldCBiYWNrIGhhbmRsZXIgdG8gcmVwb25zZSBx
dWV1ZQ0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSA9IGV4dGVuZGVkT3BlcmF0aW9u
KG9wLCBjb25zLCBudWxsKTsNCiAgICAgICAgTERBUEV4dGVuZGVkUmVzcG9uc2UgcmVzcG9uc2Ug
PQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMREFQRXh0ZW5kZWRSZXNwb25zZSkgcXVl
dWUuZ2V0UmVzcG9uc2UoKTsNCg0KICAgICAgICAvLyBTZXQgbG9jYWwgY29weSBvZiByZXNwb25z
ZUNvbnRyb2xzIHN5bmNocm9ub3VzbHkgLSBpZiB0aGVyZSB3ZXJlIGFueQ0KICAgICAgICBzeW5j
aHJvbml6ZWQgKHJlc3BvbnNlQ3RsU2VtYXBob3JlKSB7DQogICAgICAgICAgICByZXNwb25zZUN0
bHMgPSByZXNwb25zZS5nZXRDb250cm9scygpOw0KICAgICAgICB9DQoNCiAgICAgICAgY2hrUmVz
dWx0Q29kZSggcXVldWUsIGNvbnMsIHJlc3BvbnNlKTsNCiAgICAgICAgcmV0dXJuIHJlc3BvbnNl
Ow0KICAgIH0NCg0KDQogICAgLyoNCiAgICAgKiBBc3luY2hyb25vdXMgTERBUCBleHRlbmRlZCBy
ZXF1ZXN0DQogICAgICovDQoNCiAgICAvKioNCiAgICAgKiBQcm92aWRlcyBhbiBhc3luY2hyb25v
dXMgbWVhbnMgdG8gYWNjZXNzIGV4dGVuZGVkLCBub24tbWFuZGF0b3J5DQogICAgICogb3BlcmF0
aW9ucyBvZmZlcmVkIGJ5IGEgcGFydGljdWxhciBMREFQdjMgY29tcGxpYW50IHNlcnZlci4NCiAg
ICAgKg0KICAgICAqIEBwYXJhbSBvcCAgVGhlIG9iamVjdCB3aGljaCBjb250YWlucyAoMSkgYW4g
aWRlbnRpZmllciBvZiBhbiBleHRlbmRlZA0KICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uIHdo
aWNoIHNob3VsZCBiZSByZWNvZ25pemVkIGJ5IHRoZSBwYXJ0aWN1bGFyIExEQVANCiAgICAgKiAg
ICAgICAgICAgIHNlcnZlciB0aGlzIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gYW5kICgyKSBhbg0K
ICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uLXNwZWNpZmljIHNlcXVlbmNlIG9mIG9jdGV0IHN0
cmluZ3MNCiAgICAgKiAgICAgICAgICAgIG9yIEJFUi1lbmNvZGVkIHZhbHVlcy4NCiAgICAgKjxi
cj48YnI+DQogICAgICogQHBhcmFtIHF1ZXVlICAgICBUaGUgcXVldWUgZm9yIG1lc3NhZ2VzIHJl
dHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
IHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYSBxdWV1ZQ0KICAgICAqICAgICAgICAg
ICAgICAgICAgb2JqZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAgICAgKg0KICAgICAqIEBy
ZXR1cm4gQW4gb3BlcmF0aW9uLXNwZWNpZmljIG9iamVjdCwgY29udGFpbmluZyBhbiBJRCBhbmQg
ZWl0aGVyIGFuIG9jdGV0DQogICAgICogc3RyaW5nIG9yIEJFUi1lbmNvZGVkIHZhbHVlcy4NCiAg
ICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9u
IHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJy
b3IgY29kZS4NCiAgICAgKi8NCg0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBleHRlbmRl
ZE9wZXJhdGlvbihMREFQRXh0ZW5kZWRPcGVyYXRpb24gb3AsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTERBUFJlc3BvbnNlUXVldWUgcXVldWUpDQogICAgICAgIHRocm93
cyBMREFQRXhjZXB0aW9uDQogICAgew0KDQogICAgICAgIHJldHVybiBleHRlbmRlZE9wZXJhdGlv
bihvcCwgZGVmU2VhcmNoQ29ucywgcXVldWUpOw0KICAgIH0NCg0KDQogICAgLyoNCiAgICAgKiAg
QXN5bmNocm9ub3VzIExEQVAgZXh0ZW5kZWQgcmVxdWVzdCB3aXRoIFNlYXJjaENvbnN0cmFpbnRz
DQogICAgICovDQoNCiAgICAvKioNCiAgICAgKiBQcm92aWRlcyBhbiBhc3luY2hyb25vdXMgbWVh
bnMgdG8gYWNjZXNzIGV4dGVuZGVkLCBub24tbWFuZGF0b3J5DQogICAgICogb3BlcmF0aW9ucyBv
ZmZlcmVkIGJ5IGEgcGFydGljdWxhciBMREFQdjMgY29tcGxpYW50IHNlcnZlci4NCiAgICAgKg0K
ICAgICAqIEBwYXJhbSBvcCAgVGhlIG9iamVjdCB3aGljaCBjb250YWlucyAoMSkgYW4gaWRlbnRp
ZmllciBvZiBhbiBleHRlbmRlZA0KICAgICAqICAgICAgICAgICAgb3BlcmF0aW9uIHdoaWNoIHNo
b3VsZCBiZSByZWNvZ25pemVkIGJ5IHRoZSBwYXJ0aWN1bGFyIExEQVANCiAgICAgKiAgICAgICAg
ICAgIHNlcnZlciB0aGlzIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gYW5kICgyKSBhbiBvcGVyYXRp
b24tDQogICAgICogICAgICAgICBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBvY3RldCBzdHJpbmdzIG9y
IEJFUi1lbmNvZGVkIHZhbHVlcy4NCiAgICAgKjxicj48YnI+DQogICAgICogQHBhcmFtIHF1ZXVl
ICAgICBUaGUgcXVldWUgZm9yIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAg
ICAgKiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMg
bnVsbCwgYSBxdWV1ZQ0KICAgICAqICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGNyZWF0ZWQg
aW50ZXJuYWxseS4NCiAgICAgKjxicj48YnI+DQogICAgICogQHBhcmFtIGNvbnMgICAgICBUaGUg
Y29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhpcyBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiBA
cmV0dXJuIEFuIG9wZXJhdGlvbi1zcGVjaWZpYyBvYmplY3QsIGNvbnRhaW5pbmcgYW4gSUQgYW5k
IGVpdGhlciBhbg0KICAgICAqIG9jdGV0IHN0cmluZyBvciBCRVItZW5jb2RlZCB2YWx1ZXMuDQog
ICAgICoNCiAgICAgKiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlv
biB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVy
cm9yIGNvZGUuDQogICAgICovDQoNCiAgICBwdWJsaWMgTERBUFJlc3BvbnNlUXVldWUgZXh0ZW5k
ZWRPcGVyYXRpb24oTERBUEV4dGVuZGVkT3BlcmF0aW9uIG9wLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQQ29uc3RyYWludHMgY29ucywNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFJlc3BvbnNlUXVl
dWUgcXVldWUpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICAv
LyBVc2UgZGVmYXVsdCBjb25zdHJhaW50cyBpZiBub25lLXNwZWNpZmllZA0KICAgICAgICBpZihj
b25zID09IG51bGwpDQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNoQ29uczsNCiAgICAgICAg
TERBUE1lc3NhZ2UgbXNnID0gbWFrZUV4dGVuZGVkT3BlcmF0aW9uKG9wLCBjb25zKTsNCiAgICAg
ICAgcmV0dXJuIHNlbmRSZXF1ZXN0VG9TZXJ2ZXIobXNnLCBjb25zLmdldFRpbWVMaW1pdCgpLCBx
dWV1ZSwgbnVsbCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRm9ybXVsYXRlcyB0aGUgZXh0
ZW5kZWQgb3BlcmF0aW9uLCBjb25zdHJhaW50cyBpbnRvIGFuDQogICAgICogTERBUE1lc3NhZ2Ug
YW5kIHJldHVybnMgdGhlIExEQVBNZXNzYWdlLiAgVGhpcyBpcyB1c2VkIGJ5DQogICAgICogZXh0
ZW5kZWRPcGVyYXRpb24gYW5kIHN0YXJ0VExTIHdoaWNoIG5lZWRzIHRoZSBMREFQTWVzc2FnZSB0
bw0KICAgICAqIGdldCB0aGUgTWVzc2FnZUlELg0KICAgICAqLw0KICAgIHByb3RlY3RlZCBMREFQ
TWVzc2FnZSBtYWtlRXh0ZW5kZWRPcGVyYXRpb24oTERBUEV4dGVuZGVkT3BlcmF0aW9uIG9wLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0
cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAg
ICAvLyBVc2UgZGVmYXVsdCBjb25zdHJhaW50cyBpZiBub25lLXNwZWNpZmllZA0KICAgICAgICBp
Zihjb25zID09IG51bGwpDQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNoQ29uczsNCg0KICAg
ICAgICAvLyBlcnJvciBjaGVjayB0aGUgcGFyYW1ldGVycw0KICAgICAgICBpZiAob3AuZ2V0SUQo
KSA9PSBudWxsKSB7DQogICAgICAgICAgICAvLyBJbnZhbGlkIGV4dGVuZGVkIG9wZXJhdGlvbiBw
YXJhbWV0ZXIsIG5vIE9JRCBzcGVjaWZpZWQNCiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RXhjZXB0aW9uTWVzc2FnZXMuT1BfUEFSQU1fRVJST1IpOw0KICAgICAgICB9DQoNCiAgICAgICAg
cmV0dXJuIG5ldyBMREFQRXh0ZW5kZWRSZXF1ZXN0KG9wLCBjb25zLmdldENvbnRyb2xzKCkpOw0K
ICAgIH0NCg0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIC8vIGdldFJlc3BvbnNlQ29udHJv
bHMgbWV0aG9kDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCiAgICAgLyoqDQogICAgICogIFJl
dHVybnMgdGhlIFNlcnZlciBDb250cm9scyBhc3NvY2lhdGVkIHdpdGggdGhlIG1vc3QgcmVjZW50
IHJlc3BvbnNlDQogICAgICogIHRvIGEgc3luY2hyb25vdXMgcmVxdWVzdCBvbiB0aGlzIGNvbm5l
Y3Rpb24gb2JqZWN0LCBvciBudWxsDQogICAgICogIGlmIHRoZSBsYXRlc3QgcmVzcG9uc2UgY29u
dGFpbmVkIG5vIFNlcnZlciBDb250cm9scy4gVGhlIG1ldGhvZA0KICAgICAqICBhbHdheXMgcmV0
dXJucyBudWxsIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdHMuIEZvciBhc3luY2hyb25vdXMNCiAg
ICAgKiAgcmVxdWVzdHMsIHRoZSByZXNwb25zZSBjb250cm9scyBhcmUgYXZhaWxhYmxlIGluIExE
QVBNZXNzYWdlLg0KICAgICAqDQogICAgICogIEByZXR1cm4gVGhlIHNlcnZlciBjb250cm9scyBh
c3NvY2lhdGVkIHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3BvbnNlDQogICAgICogIHRvIGEgc3lu
Y2hyb25vdXMgcmVxdWVzdCBvciBudWxsIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBubyBzZXJ2
ZXINCiAgICAgKiAgY29udHJvbHMuDQogICAgICoNCiAgICAgKiBAc2VlIExEQVBNZXNzYWdlI2dl
dENvbnRyb2xzKCkNCiAgICAgKi8NCiAgICBwdWJsaWMgTERBUENvbnRyb2xbXSBnZXRSZXNwb25z
ZUNvbnRyb2xzKCkNCiAgICB7DQogICAgICAgIGlmKCByZXNwb25zZUN0bHMgPT0gbnVsbCkgew0K
ICAgICAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgICAgICBEZWJ1
Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgICAgICJnZXRS
ZXNwb25zZUNvbnRyb2xzKCkgcmV0dXJucyBudWxsIik7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RF
QlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUg
Kw0KICAgICAgICAgICAgImdldFJlc3BvbnNlQ29udHJvbHMoKSIpOw0KICAgICAgICB9DQoNCiAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjbG9uZSB0aGUgY29udHJvbCBqdXN0IGluIGNhc2UNCiAgICAg
ICAgLy8gd2UgaGF2ZSB0d28gY2xpZW50IHRocmVhZHMgdGhhdCBlbmQgdXAgcmV0cmVpdmluZyB0
aGUNCiAgICAgICAgLy8gc2FtZSBjb250cm9sLg0KICAgICAgICBMREFQQ29udHJvbCBbXSBjbG9u
ZWRDb250cm9sID0gbmV3IExEQVBDb250cm9sIFtyZXNwb25zZUN0bHMubGVuZ3RoXTsNCg0KICAg
ICAgICAvLyBBbHNvIG5vdGUgd2Ugc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBsb2NhbCByZXNw
b25zZQ0KICAgICAgICAvLyBjb250cm9sIG9iamVjdCBqdXN0IGluIGNhc2UgYW5vdGhlciBtZXNz
YWdlIGNvbnRhaW5pbmcgY29udHJvbHMNCiAgICAgICAgLy8gY29tZXMgaW4gZnJvbSB0aGUgc2Vy
dmVyIHdoaWxlIHdlIGFyZSBidXN5IGR1cGxpY2F0aW5nDQogICAgICAgIC8vIHRoaXMgb25lLg0K
ICAgICAgICBzeW5jaHJvbml6ZWQgKHJlc3BvbnNlQ3RsU2VtYXBob3JlKSB7DQogICAgICAgICAg
ICBmb3IoaW50IGkgPSAwOyBpIDwgcmVzcG9uc2VDdGxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAg
ICAgICAgICAgICAgY2xvbmVkQ29udHJvbFtpXSA9IChMREFQQ29udHJvbCkgKHJlc3BvbnNlQ3Rs
c1tpXSkuY2xvbmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFJl
dHVybiB0aGUgY2xvbmVkIGNvcHkuICBOb3RlIHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUNCiAgICAg
ICAgLy8gY29udHJvbCBpbiB0aGUgbG9jYWwgcmVzcG9uc2VDdGxzIHZhcmlhYmxlIGp1c3QgaW4g
Y2FzZQ0KICAgICAgICAvLyBzb21lYm9keSByZXF1ZXN0cyBpdCBhZ2Fpbi4NCiAgICAgICAgcmV0
dXJuIGNsb25lZENvbnRyb2w7DQogICAgfQ0KDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAg
Ly8gbW9kaWZ5IG1ldGhvZHMNCiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KICAgIC8qKg0KICAg
ICAqIFN5bmNocm9ub3VzbHkgbWFrZXMgYSBzaW5nbGUgY2hhbmdlIHRvIGFuIGV4aXN0aW5nIGVu
dHJ5IGluIHRoZQ0KICAgICAqIGRpcmVjdG9yeS4NCiAgICAgKg0KICAgICAqIDxwPkZvciBleGFt
cGxlLCB0aGlzIG1vZGlmeSBtZXRob2QgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRl
LA0KICAgICAqIGFkZHMgYSBuZXcgYXR0cmlidXRlIHZhbHVlLCBvciByZW1vdmVzIGFuIGV4aXN0
aW5nIGF0dHJpYnV0ZSB2YWx1ZS4gPC9wPg0KICAgICAqDQogICAgICogPHA+VGhlIExEQVBNb2Rp
ZmljYXRpb24gb2JqZWN0IHNwZWNpZmllcyBib3RoIHRoZSBjaGFuZ2UgdG8gYmUgbWFkZSBhbmQN
CiAgICAgKiB0aGUgTERBUEF0dHJpYnV0ZSB2YWx1ZSB0byBiZSBjaGFuZ2VkLjwvcD4NCiAgICAg
Kg0KICAgICAqIDxwPklmIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGgge0BsaW5rIExEQVBFeGNlcHRp
b24jQ09OTkVDVF9FUlJPUn0sDQogICAgICogaXQgaXMgaW5kZXRlcm1pbmF0ZSB3aGV0aGVyIG9y
IG5vdCB0aGUgc2VydmVyIG1hZGUgdGhlIG1vZGlmaWNhdGlvbi48L3A+DQogICAgICoNCiAgICAg
KiAgQHBhcmFtIGRuICAgICBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIHRoZSBlbnRyeSB0byBt
b2RpZnkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gbW9kICAgIEEgc2luZ2xlIGNo
YW5nZSB0byBiZSBtYWRlIHRvIHRoZSBlbnRyeS4NCiAgICAgKg0KICAgICAqIEBleGNlcHRpb24g
TERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9y
DQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBw
dWJsaWMgdm9pZCBtb2RpZnkoIFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIExE
QVBNb2RpZmljYXRpb24gbW9kKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsN
CiAgICAgICAgbW9kaWZ5KGRuLCBtb2QsIGRlZlNlYXJjaENvbnMpOw0KICAgICAgICByZXR1cm47
DQogICAgfQ0KDQogICAgLyoqDQogICAgICoNCiAgICAgKiBTeW5jaHJvbm91c2x5IG1ha2VzIGEg
c2luZ2xlIGNoYW5nZSB0byBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUNCiAgICAgKiBkaXJlY3Rv
cnksIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludHMuDQogICAgICoNCiAgICAgKiA8cD5G
b3IgZXhhbXBsZSwgdGhpcyBtb2RpZnkgbWV0aG9kIGNoYW5nZXMgdGhlIHZhbHVlIG9mIGFuIGF0
dHJpYnV0ZSwNCiAgICAgKiBhZGRzIGEgbmV3IGF0dHJpYnV0ZSB2YWx1ZSwgb3IgcmVtb3ZlcyBh
biBleGlzdGluZyBhdHRyaWJ1dGUgdmFsdWUuPC9wPg0KICAgICAqDQogICAgICogPHA+VGhlIExE
QVBNb2RpZmljYXRpb24gb2JqZWN0IHNwZWNpZmllcyBib3RoIHRoZSBjaGFuZ2UgdG8gYmUNCiAg
ICAgKiBtYWRlIGFuZCB0aGUgTERBUEF0dHJpYnV0ZSB2YWx1ZSB0byBiZSBjaGFuZ2VkLjwvcD4N
CiAgICAgKg0KICAgICAqIDxwPklmIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGgge0BsaW5rIExEQVBF
eGNlcHRpb24jQ09OTkVDVF9FUlJPUn0sDQogICAgICogaXQgaXMgaW5kZXRlcm1pbmF0ZSB3aGV0
aGVyIG9yIG5vdCB0aGUgc2VydmVyIG1hZGUgdGhlIG1vZGlmaWNhdGlvbi48L3A+DQogICAgICoN
CiAgICAgKiAgQHBhcmFtIGRuICAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVu
dHJ5IHRvIG1vZGlmeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBtb2QgICAgICBB
IHNpbmdsZSBjaGFuZ2UgdG8gYmUgbWFkZSB0byB0aGUgZW50cnkuDQogICAgICo8YnI+PGJyPg0K
ICAgICAqICBAcGFyYW0gY29ucyAgICAgVGhlIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBv
cGVyYXRpb24uDQogICAgICoNCiAgICAgKiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5l
cmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFu
ZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQgbW9kaWZ5KCBT
dHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICAgICBMREFQTW9kaWZpY2F0aW9uIG1vZCwN
CiAgICAgICAgICAgICAgICAgICAgICAgIExEQVBDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgTERBUE1vZGlmaWNhdGlvbltdIG1v
ZHMgPSBuZXcgTERBUE1vZGlmaWNhdGlvblsxXTsNCiAgICAgICAgbW9kc1swXSA9IG1vZDsNCiAg
ICAgICAgbW9kaWZ5KGRuLCBtb2RzLCBjb25zKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0K
ICAgIC8qKg0KICAgICAqDQogICAgICogU3luY2hyb25vdXNseSBtYWtlcyBhIHNldCBvZiBjaGFu
Z2VzIHRvIGFuIGV4aXN0aW5nIGVudHJ5IGluIHRoZQ0KICAgICAqIGRpcmVjdG9yeS4NCiAgICAg
Kg0KICAgICAqIDxwPkZvciBleGFtcGxlLCB0aGlzIG1vZGlmeSBtZXRob2QgY2hhbmdlcyBhdHRy
aWJ1dGUgdmFsdWVzLCBhZGRzDQogICAgICogbmV3IGF0dHJpYnV0ZSB2YWx1ZXMsIG9yIHJlbW92
ZXMgZXhpc3RpbmcgYXR0cmlidXRlIHZhbHVlcy48L3A+DQogICAgICoNCiAgICAgKiA8cD5CZWNh
dXNlIHRoZSBzZXJ2ZXIgYXBwbGllcyBhbGwgY2hhbmdlcyBpbiBhbiBMREFQTW9kaWZpY2F0aW9u
IGFycmF5DQogICAgICogYXRvbWljYWxseSwgdGhlIGFwcGxpY2F0aW9uIGNhbiBleHBlY3QgdGhh
dCBubyBjaGFuZ2VzDQogICAgICogaGF2ZSBiZWVuIHBlcmZvcm1lZCBpZiBhbiBlcnJvciBpcyBy
ZXR1cm5lZC4NCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlscyB3aXRoIHtAbGluayBMREFQRXhj
ZXB0aW9uI0NPTk5FQ1RfRVJST1J9LA0KICAgICAqIGl0IGlzIGluZGV0ZXJtaW5hdGUgd2hldGhl
ciBvciBub3QgdGhlIHNlcnZlciBtYWRlIHRoZSBtb2RpZmljYXRpb25zLjwvcD4NCiAgICAgKg0K
ICAgICAqICBAcGFyYW0gZG4gICAgIERpc3Rpbmd1aXNoZWQgbmFtZSBvZiB0aGUgZW50cnkgdG8g
bW9kaWZ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIG1vZHMgICBUaGUgY2hhbmdl
cyB0byBiZSBtYWRlIHRvIHRoZSBlbnRyeS4NCiAgICAgKg0KICAgICAqIEBleGNlcHRpb24gTERB
UEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQog
ICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJs
aWMgdm9pZCBtb2RpZnkoIFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIExEQVBN
b2RpZmljYXRpb25bXSBtb2RzKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsN
CiAgICAgICAgbW9kaWZ5KGRuLCBtb2RzLCBkZWZTZWFyY2hDb25zKTsNCiAgICAgICAgcmV0dXJu
Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFN5bmNocm9ub3VzbHkgbWFrZXMgYSBzZXQgb2Yg
Y2hhbmdlcyB0byBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUNCiAgICAgKiBkaXJlY3RvcnksIHVz
aW5nIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludHMuDQogICAgICoNCiAgICAgKiA8cD5Gb3IgZXhh
bXBsZSwgdGhpcyBtb2RpZnkgbWV0aG9kIGNoYW5nZXMgYXR0cmlidXRlIHZhbHVlcywgYWRkcyBu
ZXcNCiAgICAgKiBhdHRyaWJ1dGUgdmFsdWVzLCBvciByZW1vdmVzIGV4aXN0aW5nIGF0dHJpYnV0
ZSB2YWx1ZXMuPC9wPg0KICAgICAqDQogICAgICogPHA+QmVjYXVzZSB0aGUgc2VydmVyIGFwcGxp
ZXMgYWxsIGNoYW5nZXMgaW4gYW4gTERBUE1vZGlmaWNhdGlvbiBhcnJheQ0KICAgICAqIGF0b21p
Y2FsbHksIHRoZSBhcHBsaWNhdGlvbiBjYW4gZXhwZWN0IHRoYXQgbm8gY2hhbmdlcw0KICAgICAq
IGhhdmUgYmVlbiBwZXJmb3JtZWQgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQuDQogICAgICogSWYg
dGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB7QGxpbmsgTERBUEV4Y2VwdGlvbiNDT05ORUNUX0VSUk9S
fSwNCiAgICAgKiBpdCBpcyBpbmRldGVybWluYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzZXJ2ZXIg
bWFkZSB0aGUgbW9kaWZpY2F0aW9ucy48L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIGRuICAg
ICAgVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiB0aGUgZW50cnkgdG8gbW9kaWZ5Lg0KICAgICAq
PGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIG1vZHMgICAgVGhlIGNoYW5nZXMgdG8gYmUgbWFkZSB0
byB0aGUgZW50cnkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICBUaGUg
Y29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4NCiAgICAgKg0KICAgICAqIEBl
eGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVz
IGFuDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UgYW5kIGFu
IExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBtb2RpZnkoIFN0cmlu
ZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIExEQVBNb2RpZmljYXRpb25bXSBtb2RzLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRo
cm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1
ZSA9DQogICAgICAgICAgICBtb2RpZnkoZG4sIG1vZHMsIG51bGwsIGNvbnMpOw0KDQogICAgICAg
IC8vIEdldCBhIGhhbmRsZSB0byB0aGUgbW9kaWZ5IHJlc3BvbnNlDQogICAgICAgIExEQVBSZXNw
b25zZSBtb2RpZnlSZXNwb25zZSA9IChMREFQUmVzcG9uc2UpKHF1ZXVlLmdldFJlc3BvbnNlKCkp
Ow0KDQogICAgICAgIC8vIFNldCBsb2NhbCBjb3B5IG9mIHJlc3BvbnNlQ29udHJvbHMgc3luY2hy
b25vdXNseSAtIGlmIHRoZXJlIHdlcmUgYW55DQogICAgICAgIHN5bmNocm9uaXplZCAocmVzcG9u
c2VDdGxTZW1hcGhvcmUpIHsNCiAgICAgICAgICAgIHJlc3BvbnNlQ3RscyA9IG1vZGlmeVJlc3Bv
bnNlLmdldENvbnRyb2xzKCk7DQogICAgICAgIH0NCg0KICAgICAgICBjaGtSZXN1bHRDb2RlKCBx
dWV1ZSwgY29ucywgbW9kaWZ5UmVzcG9uc2UpOw0KDQogICAgICAgIHJldHVybjsNCiAgICB9DQoN
CiAgICAvKioNCiAgICAgKiBBc3luY2hyb25vdXNseSBtYWtlcyBhIHNpbmdsZSBjaGFuZ2UgdG8g
YW4gZXhpc3RpbmcgZW50cnkgaW4gdGhlDQogICAgICogZGlyZWN0b3J5Lg0KICAgICAqDQogICAg
ICogPHA+Rm9yIGV4YW1wbGUsIHRoaXMgbW9kaWZ5IG1ldGhvZCBjYW4gY2hhbmdlIHRoZSB2YWx1
ZSBvZiBhbiBhdHRyaWJ1dGUsDQogICAgICogYWRkIGEgbmV3IGF0dHJpYnV0ZSB2YWx1ZSwgb3Ig
cmVtb3ZlIGFuIGV4aXN0aW5nIGF0dHJpYnV0ZSB2YWx1ZS48L3A+DQogICAgICoNCiAgICAgKiA8
cD5UaGUgTERBUE1vZGlmaWNhdGlvbiBvYmplY3Qgc3BlY2lmaWVzIGJvdGggdGhlIGNoYW5nZSB0
byBiZSBtYWRlIGFuZA0KICAgICAqIHRoZSBMREFQQXR0cmlidXRlIHZhbHVlIHRvIGJlIGNoYW5n
ZWQuPC9wPg0KICAgICAqDQogICAgICogPHA+SWYgdGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB7QGxp
bmsgTERBUEV4Y2VwdGlvbiNDT05ORUNUX0VSUk9SfSwNCiAgICAgKiBpdCBpcyBpbmRldGVybWlu
YXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzZXJ2ZXIgbWFkZSB0aGUgbW9kaWZpY2F0aW9uLjwvcD4N
CiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICAgICBEaXN0aW5ndWlzaGVkIG5hbWUgb2Yg
dGhlIGVudHJ5IHRvIG1vZGlmeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBtb2Qg
ICAgICAgIEEgc2luZ2xlIGNoYW5nZSB0byBiZSBtYWRlIHRvIHRoZSBlbnRyeS4NCiAgICAgKjxi
cj48YnI+DQogICAgICogIEBwYXJhbSBxdWV1ZSAgICAgIEhhbmRsZXIgZm9yIG1lc3NhZ2VzIHJl
dHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2UgdG8gdGhpcyByZXF1ZXN0LiBJZiBpdCBpcyBudWxsLCBhDQogICAgICogICAgICAgICAgICAg
ICAgICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICoNCiAgICAg
KiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5j
bHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0K
ICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBtb2RpZnkoU3RyaW5nIGRuLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUE1vZGlmaWNhdGlvbiBtb2Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBx
dWV1ZSkNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIHJldHVy
biBtb2RpZnkoZG4sIG1vZCwgcXVldWUsIGRlZlNlYXJjaENvbnMpOw0KICAgIH0NCg0KICAgIC8q
Kg0KICAgICAqIEFzeW5jaHJvbm91c2x5IG1ha2VzIGEgc2luZ2xlIGNoYW5nZSB0byBhbiBleGlz
dGluZyBlbnRyeSBpbiB0aGUNCiAgICAgKiBkaXJlY3RvcnksIHVzaW5nIHRoZSBzcGVjaWZpZWQg
Y29uc3RyYWludHMgYW5kIHF1ZXVlLg0KICAgICAqDQogICAgICogPHA+Rm9yIGV4YW1wbGUsIHRo
aXMgbW9kaWZ5IG1ldGhvZCBjYW4gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsDQog
ICAgICogYWRkIGEgbmV3IGF0dHJpYnV0ZSB2YWx1ZSwgb3IgcmVtb3ZlIGFuIGV4aXN0aW5nIGF0
dHJpYnV0ZSB2YWx1ZS48L3A+DQogICAgICoNCiAgICAgKiA8cD5UaGUgTERBUE1vZGlmaWNhdGlv
biBvYmplY3Qgc3BlY2lmaWVzIGJvdGggdGhlIGNoYW5nZSB0byBiZSBtYWRlDQogICAgICogYW5k
IHRoZSBMREFQQXR0cmlidXRlIHZhbHVlIHRvIGJlIGNoYW5nZWQuPC9wPg0KICAgICAqDQogICAg
ICogPHA+SWYgdGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB7QGxpbmsgTERBUEV4Y2VwdGlvbiNDT05O
RUNUX0VSUk9SfSwNCiAgICAgKiBpdCBpcyBpbmRldGVybWluYXRlIHdoZXRoZXIgb3Igbm90IHRo
ZSBzZXJ2ZXIgbWFkZSB0aGUgbW9kaWZpY2F0aW9uLjwvcD4NCiAgICAgKg0KICAgICAqICBAcGFy
YW0gZG4gICAgICAgICAgRGlzdGluZ3Vpc2hlZCBuYW1lIG9mIHRoZSBlbnRyeSB0byBtb2RpZnku
DQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gbW9kICAgICAgICAgQSBzaW5nbGUgY2hh
bmdlIHRvIGJlIG1hZGUgdG8gdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBh
cmFtIHF1ZXVlICAgICAgIEhhbmRsZXIgZm9yIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2
ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVz
dC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAgICAgICAgICAgICAgICAgICAgcXVldWUgb2Jq
ZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJh
bSBjb25zICAgICAgICBDb25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0KICAg
ICAqDQogICAgICogQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24g
d2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJv
ciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBtb2RpZnkoU3Ry
aW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUE1vZGlmaWNh
dGlvbiBtb2QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9u
c2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBD
b25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAg
ICAgICAgTERBUE1vZGlmaWNhdGlvbltdIG1vZHMgPSBuZXcgTERBUE1vZGlmaWNhdGlvblsxXTsN
CiAgICAgICAgbW9kc1swXSA9IG1vZDsNCiAgICAgICAgcmV0dXJuIG1vZGlmeShkbiwgbW9kcywg
cXVldWUsIGNvbnMpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEFzeW5jaHJvbm91c2x5IG1h
a2VzIGEgc2V0IG9mIGNoYW5nZXMgdG8gYW4gZXhpc3RpbmcgZW50cnkgaW4gdGhlDQogICAgICog
ZGlyZWN0b3J5Lg0KICAgICAqDQogICAgICogPHA+Rm9yIGV4YW1wbGUsIHRoaXMgbW9kaWZ5IG1l
dGhvZCBjYW4gY2hhbmdlIGF0dHJpYnV0ZSB2YWx1ZXMsIGFkZCBuZXcNCiAgICAgKiBhdHRyaWJ1
dGUgdmFsdWVzLCBvciByZW1vdmUgZXhpc3RpbmcgYXR0cmlidXRlIHZhbHVlcy48L3A+DQogICAg
ICoNCiAgICAgKiA8cD5CZWNhdXNlIHRoZSBzZXJ2ZXIgYXBwbGllcyBhbGwgY2hhbmdlcyBpbiBh
biBMREFQTW9kaWZpY2F0aW9uIGFycmF5DQogICAgICogYXRvbWljYWxseSwgdGhlIGFwcGxpY2F0
aW9uIGNhbiBleHBlY3QgdGhhdCBubyBjaGFuZ2VzDQogICAgICogaGF2ZSBiZWVuIHBlcmZvcm1l
ZCBpZiBhbiBlcnJvciBpcyByZXR1cm5lZC4NCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlscyB3
aXRoIHtAbGluayBMREFQRXhjZXB0aW9uI0NPTk5FQ1RfRVJST1J9LA0KICAgICAqIGl0IGlzIGlu
ZGV0ZXJtaW5hdGUgd2hldGhlciBvciBub3QgdGhlIHNlcnZlciBtYWRlIHRoZSBtb2RpZmljYXRp
b25zLjwvcD4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICAgICBUaGUgZGlzdGluZ3Vp
c2hlZCBuYW1lIG9mIHRoZSBlbnRyeSB0byBtb2RpZnkuDQogICAgICo8YnI+PGJyPg0KICAgICAq
ICBAcGFyYW0gbW9kcyAgICAgICBUaGUgY2hhbmdlcyB0byBiZSBtYWRlIHRvIHRoZSBlbnRyeS4N
CiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBxdWV1ZSAgICAgIFRoZSBxdWV1ZSBmb3Ig
bWVzc2FnZXMgcmV0dXJuZWQgZnJvbSBhIHNlcnZlciBpbg0KICAgICAqICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIElmIGl0IGlzIG51bGwsIGENCiAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcXVldWUgb2JqZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAg
ICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9u
IHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJv
ciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSBtb2RpZnkoU3Ry
aW5nIGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUE1vZGlmaWNh
dGlvbltdIG1vZHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVz
cG9uc2VRdWV1ZSBxdWV1ZSkNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQog
ICAgICAgIHJldHVybiBtb2RpZnkoZG4sIG1vZHMsIHF1ZXVlLCBkZWZTZWFyY2hDb25zKTsNCiAg
ICB9DQoNCiAgICAvKioNCiAgICAgKiBBc3luY2hyb25vdXNseSBtYWtlcyBhIHNldCBvZiBjaGFu
Z2VzIHRvIGFuIGV4aXN0aW5nIGVudHJ5IGluIHRoZQ0KICAgICAqIGRpcmVjdG9yeSwgdXNpbmcg
dGhlIHNwZWNpZmllZCBjb25zdHJhaW50cyBhbmQgcXVldWUuDQogICAgICoNCiAgICAgKiA8cD5G
b3IgZXhhbXBsZSwgdGhpcyBtb2RpZnkgbWV0aG9kIGNhbiBjaGFuZ2UgYXR0cmlidXRlIHZhbHVl
cywgYWRkIG5ldw0KICAgICAqIGF0dHJpYnV0ZSB2YWx1ZXMsIG9yIHJlbW92ZSBleGlzdGluZyBh
dHRyaWJ1dGUgdmFsdWVzLjwvcD4NCiAgICAgKg0KICAgICAqIDxwPkJlY2F1c2UgdGhlIHNlcnZl
ciBhcHBsaWVzIGFsbCBjaGFuZ2VzIGluIGFuIExEQVBNb2RpZmljYXRpb24gYXJyYXkNCiAgICAg
KiBhdG9taWNhbGx5LCB0aGUgYXBwbGljYXRpb24gY2FuIGV4cGVjdCB0aGF0IG5vIGNoYW5nZXMN
CiAgICAgKiBoYXZlIGJlZW4gcGVyZm9ybWVkIGlmIGFuIGVycm9yIGlzIHJldHVybmVkLg0KICAg
ICAqIElmIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGgge0BsaW5rIExEQVBFeGNlcHRpb24jQ09OTkVD
VF9FUlJPUn0sDQogICAgICogaXQgaXMgaW5kZXRlcm1pbmF0ZSB3aGV0aGVyIG9yIG5vdCB0aGUg
c2VydmVyIG1hZGUgdGhlIG1vZGlmaWNhdGlvbnMuPC9wPg0KICAgICAqDQogICAgICogIEBwYXJh
bSBkbiAgICAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IHRvIG1vZGlm
eS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBtb2RzICAgICAgIFRoZSBjaGFuZ2Vz
IHRvIGJlIG1hZGUgdG8gdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFt
IHF1ZXVlICAgICAgVGhlIHF1ZXVlIGZvciBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIGEgc2VydmVy
IGluDQogICAgICogICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4g
SWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAgICAgICAgICAgICAgICAgICBxdWV1ZSBvYmplY3Qg
aXMgY3JlYXRlZCBpbnRlcm5hbGx5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNv
bnMgICAgICAgQ29uc3RyYWludHMgc3BlY2lmaWMgdG8gdGhlIG9wZXJhdGlvbi4NCiAgICAgKg0K
ICAgICAqICBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGlj
aCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNv
ZGUuDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIG1vZGlmeShTdHJpbmcg
ZG4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQTW9kaWZpY2F0aW9u
W10gbW9kcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBSZXNwb25z
ZVF1ZXVlIHF1ZXVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENv
bnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAg
ICAgICBpZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgRGVidWcudHJhY2UoIERl
YnVnLmFwaVJlcXVlc3RzLCBuYW1lICsNCiAgICAgICAgICAgICJtb2RpZnkoIiArIGRuICsgIiks
ICIgKyBtb2RzLmxlbmd0aCArICIgbW9kaWZpY2F0aW9ucyIpOw0KICAgICAgICB9DQogICAgICAg
IGlmKGRuID09IG51bGwpIHsNCiAgICAgICAgICAgIC8vIEludmFsaWQgRE4gcGFyYW1ldGVyDQog
ICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbk1lc3NhZ2VzLkROX1BBUkFNX0VS
Uk9SKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKGNvbnMgPT0gbnVsbCkNCiAgICAgICAgICAg
IGNvbnMgPSBkZWZTZWFyY2hDb25zOw0KDQogICAgICAgIExEQVBNZXNzYWdlIG1zZyA9IG5ldyBM
REFQTW9kaWZ5UmVxdWVzdCggZG4sIG1vZHMsIGNvbnMuZ2V0Q29udHJvbHMoKSk7DQoNCiAgICAg
ICAgcmV0dXJuIHNlbmRSZXF1ZXN0VG9TZXJ2ZXIobXNnLCBjb25zLmdldFRpbWVMaW1pdCgpLCBx
dWV1ZSwgbnVsbCk7DQogICAgfQ0KDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgLy8gcmVh
ZCBtZXRob2RzDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCiAgICAvKioNCiAgICAgKiBTeW5j
aHJvbm91c2x5IHJlYWRzIHRoZSBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBkaXN0aWd1aXNoZWQg
bmFtZSAoRE4pDQogICAgICogYW5kIHJldHJpZXZlcyBhbGwgYXR0cmlidXRlcyBmb3IgdGhlIGVu
dHJ5Lg0KICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICAgVGhlIGRpc3Rpbmd1aXNoZWQg
bmFtZSBvZiB0aGUgZW50cnkgdG8gcmV0cmlldmUuDQogICAgICoNCiAgICAgKiAgQHJldHVybiB0
aGUgTERBUEVudHJ5IHJlYWQgZnJvbSB0aGUgc2VydmVyLg0KICAgICAqDQogICAgICogIEBleGNl
cHRpb24gTERBUEV4Y2VwdGlvbiBpZiB0aGUgb2JqZWN0IHdhcyBub3QgZm91bmQNCiAgICAgKi8N
CiAgICBwdWJsaWMgTERBUEVudHJ5IHJlYWQoU3RyaW5nIGRuKQ0KICAgICAgICB0aHJvd3MgTERB
UEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIHJlYWQoZG4sIGRlZlNlYXJjaENvbnMp
Ow0KICAgIH0NCg0KDQogICAgLyoqDQogICAgICoNCiAgICAgKiBTeW5jaHJvbm91c2x5IHJlYWRz
IHRoZSBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBkaXN0aWd1aXNoZWQgbmFtZSAoRE4pLA0KICAg
ICAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludHMsIGFuZCByZXRyaWV2ZXMgYWxsIGF0
dHJpYnV0ZXMgZm9yIHRoZQ0KICAgICAqIGVudHJ5Lg0KICAgICAqDQogICAgICogIEBwYXJhbSBk
biAgICAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5IHRvIHJldHJpZXZl
Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgICAgVGhlIGNvbnN0cmFp
bnRzIHNwZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQHJldHVybiB0
aGUgTERBUEVudHJ5IHJlYWQgZnJvbSB0aGUgc2VydmVyDQogICAgICoNCiAgICAgKiAgQGV4Y2Vw
dGlvbiBMREFQRXhjZXB0aW9uIGlmIHRoZSBvYmplY3Qgd2FzIG5vdCBmb3VuZA0KICAgICAqLw0K
ICAgIHB1YmxpYyBMREFQRW50cnkgcmVhZChTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIExEQVBTZWFyY2hDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4
Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIHJlYWQoZG4sIG51bGwsIGNvbnMpOw0KICAg
IH0NCg0KICAgIC8qKg0KICAgICAqDQogICAgICogU3luY2hyb25vdXNseSByZWFkcyB0aGUgZW50
cnkgZm9yIHRoZSBzcGVjaWZpZWQgZGlzdGluZ3Vpc2hlZCBuYW1lIChETikNCiAgICAgKiBhbmQg
cmV0cmlldmVzIG9ubHkgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzIGZyb20gdGhlIGVudHJ5Lg0K
ICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUg
b2YgdGhlIGVudHJ5IHRvIHJldHJpZXZlLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFt
IGF0dHJzICAgICAgVGhlIG5hbWVzIG9mIHRoZSBhdHRyaWJ1dGVzIHRvIHJldHJpZXZlLg0KICAg
ICAqDQogICAgICogIEByZXR1cm4gdGhlIExEQVBFbnRyeSByZWFkIGZyb20gdGhlIHNlcnZlcg0K
ICAgICAqDQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBpZiB0aGUgb2JqZWN0IHdh
cyBub3QgZm91bmQNCiAgICAgKi8NCiAgICBwdWJsaWMgTERBUEVudHJ5IHJlYWQoU3RyaW5nIGRu
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBhdHRycykNCiAgICAgICAgdGhy
b3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIHJldHVybiByZWFkKGRuLCBhdHRycywg
ZGVmU2VhcmNoQ29ucyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSBy
ZWFkcyB0aGUgZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQgZGlzdGluZ3Vpc2hlZCBuYW1lIChETiks
DQogICAgICogdXNpbmcgdGhlIHNwZWNpZmllZCBjb25zdHJhaW50cywgYW5kIHJldHJpZXZlcyBv
bmx5IHRoZSBzcGVjaWZpZWQNCiAgICAgKiBhdHRyaWJ1dGVzIGZyb20gdGhlIGVudHJ5Lg0KICAg
ICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIHRo
ZSBlbnRyeSB0byByZXRyaWV2ZS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBhdHRy
cyAgICBUaGUgbmFtZXMgb2YgdGhlIGF0dHJpYnV0ZXMgdG8gcmV0cmlldmUuDQogICAgICo8YnI+
PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICAgVGhlIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRv
IHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAgKiAgQHJldHVybiB0aGUgTERBUEVudHJ5IHJl
YWQgZnJvbSB0aGUgc2VydmVyDQogICAgICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0
aW9uIGlmIHRoZSBvYmplY3Qgd2FzIG5vdCBmb3VuZA0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQ
RW50cnkgcmVhZChTdHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1td
IGF0dHJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQU2VhcmNoQ29uc3RyYWludHMg
Y29ucykNCiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGlmKCBE
ZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVx
dWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgInJlYWQoIiArIGRuICsgIikiKTsNCiAgICAgICAg
fQ0KICAgICAgICBMREFQU2VhcmNoUmVzdWx0cyBzciA9IHNlYXJjaChkbiwgU0NPUEVfQkFTRSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGZhbHNlLCBjb25zKTsNCg0KICAgICAg
ICBMREFQRW50cnkgcmV0ID0gbnVsbDsNCiAgICAgICAgaWYoIHNyLmhhc01vcmUoKSkgew0KICAg
ICAgICAgICAgcmV0ID0gc3IubmV4dCgpOw0KICAgICAgICAgICAgaWYoIHNyLmhhc01vcmUoKSkg
ew0KICAgICAgICAgICAgICAgIC8vICJSZWFkIHJlc3BvbnNlIGlzIGFtYmlndW91cywgbXVsdGlw
bGUgZW50cmllcyByZXR1cm5lZCINCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTERBUExvY2Fs
RXhjZXB0aW9uKEV4Y2VwdGlvbk1lc3NhZ2VzLlJFQURfTVVMVElQTEUsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMREFQRXhjZXB0aW9uLkFNQklHVU9VU19SRVNQT05TRSk7
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHJldDsNCiAgICB9DQoN
CiAgICAvKioNCiAgICAgKiBTeW5jaHJvbm91c2x5IHJlYWRzIHRoZSBlbnRyeSBzcGVjaWZpZWQg
YnkgdGhlIExEQVAgVVJMLg0KICAgICAqDQogICAgICogPHA+V2hlbiB0aGlzIHJlYWQgbWV0aG9k
IGlzIGNhbGxlZCwgYSBuZXcgY29ubmVjdGlvbiBpcyBjcmVhdGVkDQogICAgICogYXV0b21hdGlj
YWxseSwgdXNpbmcgdGhlIGhvc3QgYW5kIHBvcnQgc3BlY2lmaWVkIGluIHRoZSBVUkwuIEFmdGVy
DQogICAgICogZmluZGluZyB0aGUgZW50cnksIHRoZSBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0
aW9uIChpbiBvdGhlciB3b3JkcywNCiAgICAgKiBpdCBkaXNjb25uZWN0cyBmcm9tIHRoZSBMREFQ
IHNlcnZlcikuPC9wPg0KICAgICAqDQogICAgICogPHA+SWYgdGhlIFVSTCBzcGVjaWZpZXMgYSBm
aWx0ZXIgYW5kIHNjb3BlLCB0aGV5IGFyZSBub3QgdXNlZC4gT2YgdGhlDQogICAgICogaW5mb3Jt
YXRpb24gc3BlY2lmaWVkIGluIHRoZSBVUkwsIHRoaXMgbWV0aG9kIG9ubHkgdXNlcyB0aGUgTERB
UCBob3N0DQogICAgICogbmFtZSBhbmQgcG9ydCBudW1iZXIsIHRoZSBiYXNlIGRpc3Rpbmd1aXNo
ZWQgbmFtZSAoRE4pLCBhbmQgdGhlIGxpc3QNCiAgICAgKiBvZiBhdHRyaWJ1dGVzIHRvIHJldHVy
bi48L3A+DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHRvR2V0ICAgICAgICAgICBMREFQIFVSTCBz
cGVjaWZ5aW5nIHRoZSBlbnRyeSB0byByZWFkLg0KICAgICAqDQogICAgICogIEByZXR1cm4gVGhl
IGVudHJ5IHNwZWNpZmllZCBieSB0aGUgYmFzZSBETi4NCiAgICAgKg0KICAgICAqICBAZXhjZXB0
aW9uIExEQVBFeGNlcHRpb24gaWYgdGhlIG9iamVjdCB3YXMgbm90IGZvdW5kDQogICAgICovDQog
ICAgcHVibGljIHN0YXRpYyBMREFQRW50cnkgcmVhZChMREFQVXJsIHRvR2V0KQ0KICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcp
IHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5hcGlSZXF1ZXN0cywgInJlYWQoIiAr
IHRvR2V0LnRvU3RyaW5nKCkgKyAiKSIpOw0KICAgICAgICB9DQogICAgICAgIExEQVBDb25uZWN0
aW9uIGxjb25uID0gbmV3IExEQVBDb25uZWN0aW9uKCk7DQogICAgICAgIGxjb25uLmNvbm5lY3Qo
dG9HZXQuZ2V0SG9zdCgpLHRvR2V0LmdldFBvcnQoKSk7DQogICAgICAgIExEQVBFbnRyeSB0b1Jl
dHVybiA9IGxjb25uLnJlYWQodG9HZXQuZ2V0RE4oKSx0b0dldC5nZXRBdHRyaWJ1dGVBcnJheSgp
KTsNCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRy
YWNlKCBEZWJ1Zy5hcGlSZXF1ZXN0cywgInJlYWQ6IGRpc2Nvbm5lY3QoKSIpOw0KICAgICAgICB9
DQogICAgICAgIGxjb25uLmRpc2Nvbm5lY3QoKTsNCiAgICAgICAgcmV0dXJuIHRvUmV0dXJuOw0K
ICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFN5bmNocm9ub3VzbHkgcmVhZHMgdGhlIGVudHJ5IHNw
ZWNpZmllZCBieSB0aGUgTERBUCBVUkwsIHVzaW5nIHRoZQ0KICAgICAqIHNwZWNpZmllZCBjb25z
dHJhaW50cy4NCiAgICAgKg0KICAgICAqIDxwPldoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBh
IG5ldyBjb25uZWN0aW9uIGlzIGNyZWF0ZWQNCiAgICAgKiBhdXRvbWF0aWNhbGx5LCB1c2luZyB0
aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gdGhlIFVSTC4gQWZ0ZXINCiAgICAgKiBmaW5k
aW5nIHRoZSBlbnRyeSwgdGhlIG1ldGhvZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gKGluIG90aGVy
IHdvcmRzLA0KICAgICAqIGl0IGRpc2Nvbm5lY3RzIGZyb20gdGhlIExEQVAgc2VydmVyKS48L3A+
DQogICAgICoNCiAgICAgKiA8cD5JZiB0aGUgVVJMIHNwZWNpZmllcyBhIGZpbHRlciBhbmQgc2Nv
cGUsIHRoZXkgYXJlIG5vdCB1c2VkLiBPZiB0aGUNCiAgICAgKiBpbmZvcm1hdGlvbiBzcGVjaWZp
ZWQgaW4gdGhlIFVSTCwgdGhpcyBtZXRob2Qgb25seSB1c2VzIHRoZSBMREFQIGhvc3QNCiAgICAg
KiBuYW1lIGFuZCBwb3J0IG51bWJlciwgdGhlIGJhc2UgZGlzdGluZ3Vpc2hlZCBuYW1lIChETiks
IGFuZCB0aGUgbGlzdA0KICAgICAqIG9mIGF0dHJpYnV0ZXMgdG8gcmV0dXJuLjwvcD4NCiAgICAg
Kg0KICAgICAqIEByZXR1cm4gVGhlIGVudHJ5IHNwZWNpZmllZCBieSB0aGUgYmFzZSBETi4NCiAg
ICAgKg0KICAgICAqIEBwYXJhbSB0b0dldCAgICAgICBMREFQIFVSTCBzcGVjaWZ5aW5nIHRoZSBl
bnRyeSB0byByZWFkLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiBAcGFyYW0gY29ucyAgICAgICBD
b25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogIEBl
eGNlcHRpb24gTERBUEV4Y2VwdGlvbiBpZiB0aGUgb2JqZWN0IHdhcyBub3QgZm91bmQNCiAgICAg
Ki8NCiAgICBwdWJsaWMgc3RhdGljIExEQVBFbnRyeSByZWFkKExEQVBVcmwgdG9HZXQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQU2VhcmNoQ29uc3RyYWludHMgY29ucykN
CiAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGlmKCBEZWJ1Zy5M
REFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMs
ICJyZWFkKCIgKyB0b0dldC50b1N0cmluZygpICsgIikiKTsNCiAgICAgICAgfQ0KICAgICAgICBM
REFQQ29ubmVjdGlvbiBsY29ubiA9IG5ldyBMREFQQ29ubmVjdGlvbigpOw0KICAgICAgICBsY29u
bi5jb25uZWN0KHRvR2V0LmdldEhvc3QoKSx0b0dldC5nZXRQb3J0KCkpOw0KICAgICAgICBMREFQ
RW50cnkgdG9SZXR1cm4gPSBsY29ubi5yZWFkKHRvR2V0LmdldEROKCksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b0dldC5nZXRBdHRyaWJ1dGVBcnJheSgpLCBjb25zKTsN
CiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNl
KCBEZWJ1Zy5hcGlSZXF1ZXN0cywgInJlYWQ6IGRpc2Nvbm5lY3QoKSIpOw0KICAgICAgICB9DQog
ICAgICAgIGxjb25uLmRpc2Nvbm5lY3QoKTsNCiAgICAgICAgcmV0dXJuIHRvUmV0dXJuOw0KICAg
IH0NCg0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIC8vIHJlbmFtZSBtZXRob2RzDQogICAg
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqDQoNCiAgICAvKioNCiAgICAgKg0KICAgICAqIFN5bmNocm9ub3Vz
bHkgcmVuYW1lcyBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5Lg0KICAgICAqDQog
ICAgICogIEBwYXJhbSBkbiAgICAgICBUaGUgY3VycmVudCBkaXN0aW5ndWlzaGVkIG5hbWUgb2Yg
dGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIG5ld1JkbiAgIFRoZSBu
ZXcgcmVsYXRpdmUgZGlzdGluZ3Vpc2hlZCBuYW1lIGZvciB0aGUgZW50cnkuDQogICAgICo8YnI+
PGJyPg0KICAgICAqICBAcGFyYW0gZGVsZXRlT2xkUmRuICAgSWYgdHJ1ZSwgdGhlIG9sZCBuYW1l
IGlzIG5vdCByZXRhaW5lZCBhcyBhbg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIHZhbHVlLiBJZiBmYWxzZSwgdGhlIG9sZCBuYW1lIGlzDQogICAgICogICAgICAgICAg
ICAgICAgICAgICAgICByZXRhaW5lZCBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUuDQogICAgICoNCiAg
ICAgKiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBp
bmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUu
DQogICAgICovDQogICAgcHVibGljIHZvaWQgcmVuYW1lKFN0cmluZyBkbiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIG5ld1JkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVh
biBkZWxldGVPbGRSZG4pDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAg
ICAgICByZW5hbWUoZG4sIG5ld1JkbiwgZGVsZXRlT2xkUmRuLCBkZWZTZWFyY2hDb25zKTsNCiAg
ICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqDQogICAgICogU3luY2hyb25v
dXNseSByZW5hbWVzIGFuIGV4aXN0aW5nIGVudHJ5IGluIHRoZSBkaXJlY3RvcnksIHVzaW5nIHRo
ZQ0KICAgICAqIHNwZWNpZmllZCBjb25zdHJhaW50cy4NCiAgICAgKg0KICAgICAqICBAcGFyYW0g
ZG4gICAgICAgICAgICAgVGhlIGN1cnJlbnQgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIHRoZSBlbnRy
eS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBuZXdSZG4gICAgICAgICBUaGUgbmV3
IHJlbGF0aXZlIGRpc3Rpbmd1aXNoZWQgbmFtZSBmb3IgdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxi
cj4NCiAgICAgKiAgQHBhcmFtIGRlbGV0ZU9sZFJkbiAgIElmIHRydWUsIHRoZSBvbGQgbmFtZSBp
cyBub3QgcmV0YWluZWQgYXMgYW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSB2YWx1ZS4gSWYgZmFsc2UsIHRoZSBvbGQgbmFtZSBpcw0KICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0YWluZWQgYXMgYW4gYXR0cmlidXRlIHZhbHVlLg0KICAgICAqPGJyPjxi
cj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgICAgICAgIFRoZSBjb25zdHJhaW50cyBzcGVjaWZp
YyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICogQGV4Y2VwdGlvbiBMREFQRXhjZXB0
aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiBt
ZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIHZvaWQg
cmVuYW1lKFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1JkbiwN
CiAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkZWxldGVPbGRSZG4sDQogICAgICAgICAg
ICAgICAgICAgICAgIExEQVBDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4
Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgLy8gbnVsbCBmb3IgbmV3UGFyZW50ZG4gbWVhbnMgdGhh
dCB0aGlzIGlzIG9yaWdpbmF0aW5nIGFzIGFuIExEQVB2MiBjYWxsDQogICAgICAgIHJlbmFtZShk
biwgbmV3UmRuLCBudWxsLCBkZWxldGVPbGRSZG4sIGNvbnMpOw0KICAgICAgICByZXR1cm47DQog
ICAgfQ0KDQogICAgLyoqDQogICAgICogU3luY2hyb25vdXNseSByZW5hbWVzIGFuIGV4aXN0aW5n
IGVudHJ5IGluIHRoZSBkaXJlY3RvcnksIHBvc3NpYmx5DQogICAgICogcmVwb3NpdGlvbmluZyB0
aGUgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSB0cmVlLg0KICAgICAqDQogICAgICogIEBwYXJhbSBk
biAgICAgICAgICAgICBUaGUgY3VycmVudCBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5
Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIG5ld1JkbiAgICAgICAgIFRoZSBuZXcg
cmVsYXRpdmUgZGlzdGluZ3Vpc2hlZCBuYW1lIGZvciB0aGUgZW50cnkuDQogICAgICo8YnI+PGJy
Pg0KICAgICAqICBAcGFyYW0gbmV3UGFyZW50ZG4gICAgVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBv
ZiBhbiBleGlzdGluZyBlbnRyeSB3aGljaA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
aXMgdG8gYmUgdGhlIG5ldyBwYXJlbnQgb2YgdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAg
ICAgKiAgQHBhcmFtIGRlbGV0ZU9sZFJkbiAgIElmIHRydWUsIHRoZSBvbGQgbmFtZSBpcyBub3Qg
cmV0YWluZWQgYXMgYW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2
YWx1ZS4gSWYgZmFsc2UsIHRoZSBvbGQgbmFtZSBpcw0KICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0YWluZWQgYXMgYW4gYXR0cmlidXRlIHZhbHVlLg0KICAgICAqDQogICAgICogQGV4
Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVkZXMg
YW4gZXJyb3INCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBhbmQgYW4g
TERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHJlbmFtZShTdHJpbmcg
ZG4sDQogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdSZG4sDQogICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyBuZXdQYXJlbnRkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgYm9v
bGVhbiBkZWxldGVPbGRSZG4pDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0K
ICAgICAgICByZW5hbWUoZG4sIG5ld1JkbiwgbmV3UGFyZW50ZG4sIGRlbGV0ZU9sZFJkbiwgZGVm
U2VhcmNoQ29ucyk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKg0K
ICAgICAqIFN5bmNocm9ub3VzbHkgcmVuYW1lcyBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUgZGly
ZWN0b3J5LCB1c2luZyB0aGUNCiAgICAgKiBzcGVjaWZpZWQgY29uc3RyYWludHMgYW5kIHBvc3Np
Ymx5IHJlcG9zaXRpb25pbmcgdGhlIGVudHJ5IGluIHRoZQ0KICAgICAqIGRpcmVjdG9yeSB0cmVl
Lg0KICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICAgICAgICBUaGUgY3VycmVudCBkaXN0
aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBh
cmFtIG5ld1JkbiAgICAgICAgIFRoZSBuZXcgcmVsYXRpdmUgZGlzdGluZ3Vpc2hlZCBuYW1lIGZv
ciB0aGUgZW50cnkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gbmV3UGFyZW50ZG4g
ICAgVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBleGlzdGluZyBlbnRyeSB3aGljaA0KICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgdGhlIG5ldyBwYXJlbnQgb2YgdGhl
IGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGRlbGV0ZU9sZFJkbiAgIElm
IHRydWUsIHRoZSBvbGQgbmFtZSBpcyBub3QgcmV0YWluZWQgYXMgYW4NCiAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2YWx1ZS4gSWYgZmFsc2UsIHRoZSBvbGQgbmFtZSBp
cw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluZWQgYXMgYW4gYXR0cmlidXRl
IHZhbHVlLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgICAgICAgIFRo
ZSBjb25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0KICAgICAqDQogICAgICog
QGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24gd2hpY2ggaW5jbHVk
ZXMgYW4gZXJyb3INCiAgICAgKiBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9yIGNvZGUuDQogICAg
ICovDQogICAgcHVibGljIHZvaWQgcmVuYW1lKFN0cmluZyBkbiwNCiAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIG5ld1JkbiwNCiAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1Bh
cmVudGRuLA0KICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlbGV0ZU9sZFJkbiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMpDQogICAgICAgIHRocm93
cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSA9
DQogICAgICAgICAgICByZW5hbWUoZG4sIG5ld1JkbiwgbmV3UGFyZW50ZG4sIGRlbGV0ZU9sZFJk
biwgbnVsbCwgY29ucyk7DQoNCiAgICAgICAgLy8gR2V0IGEgaGFuZGxlIHRvIHRoZSByZW5hbWUg
cmVzcG9uc2UNCiAgICAgICAgTERBUFJlc3BvbnNlIHJlbmFtZVJlc3BvbnNlID0gKExEQVBSZXNw
b25zZSkocXVldWUuZ2V0UmVzcG9uc2UoKSk7DQoNCiAgICAgICAgLy8gU2V0IGxvY2FsIGNvcHkg
b2YgcmVzcG9uc2VDb250cm9scyBzeW5jaHJvbm91c2x5IC0gaWYgdGhlcmUgd2VyZSBhbnkNCiAg
ICAgICAgc3luY2hyb25pemVkIChyZXNwb25zZUN0bFNlbWFwaG9yZSkgew0KICAgICAgICAgICAg
cmVzcG9uc2VDdGxzID0gcmVuYW1lUmVzcG9uc2UuZ2V0Q29udHJvbHMoKTsNCiAgICAgICAgfQ0K
DQogICAgICAgIGNoa1Jlc3VsdENvZGUoIHF1ZXVlLCBjb25zLCByZW5hbWVSZXNwb25zZSk7DQog
ICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIHJlbmFtZQ0KICAgICAqLw0K
DQogICAgLyoqDQogICAgICogQXN5bmNocm9ub3VzbHkgcmVuYW1lcyBhbiBleGlzdGluZyBlbnRy
eSBpbiB0aGUgZGlyZWN0b3J5Lg0KICAgICAqDQogICAgICogIEBwYXJhbSBkbiAgICAgICAgICAg
ICBUaGUgY3VycmVudCBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIGVudHJ5Lg0KICAgICAqPGJy
Pjxicj4NCiAgICAgKiAgQHBhcmFtIG5ld1JkbiAgICAgICAgIFRoZSBuZXcgcmVsYXRpdmUgZGlz
dGluZ3Vpc2hlZCBuYW1lIGZvciB0aGUgZW50cnkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBA
cGFyYW0gZGVsZXRlT2xkUmRuICAgSWYgdHJ1ZSwgdGhlIG9sZCBuYW1lIGlzIG5vdCByZXRhaW5l
ZCBhcyBhbg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZhbHVlLiBJ
ZiBmYWxzZSwgdGhlIG9sZCBuYW1lIGlzDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBy
ZXRhaW5lZCBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBA
cGFyYW0gcXVldWUgICAgICAgICAgVGhlIHF1ZXVlIGZvciBtZXNzYWdlcyByZXR1cm5lZCBmcm9t
IGEgc2VydmVyIGluDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSB0byB0
aGlzIHJlcXVlc3QuIElmIGl0IGlzIG51bGwsIGENCiAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICoNCiAgICAgKiBA
ZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRl
cyBhbiBlcnJvcg0KICAgICAqIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAg
Ki8NCiAgICBwdWJsaWMgTERBUFJlc3BvbnNlUXVldWUgcmVuYW1lKFN0cmluZyBkbiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdSZG4sDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlbGV0ZU9sZFJkbiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBSZXNwb25zZVF1ZXVlIHF1ZXVlKQ0KICAg
ICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIHJlbmFtZShk
biwgbmV3UmRuLCBkZWxldGVPbGRSZG4sIHF1ZXVlLCBkZWZTZWFyY2hDb25zKTsNCiAgICB9DQoN
CiAgICAvKioNCiAgICAgKiBBc3luY2hyb25vdXNseSByZW5hbWVzIGFuIGV4aXN0aW5nIGVudHJ5
IGluIHRoZSBkaXJlY3RvcnksIHVzaW5nIHRoZQ0KICAgICAqIHNwZWNpZmllZCBjb25zdHJhaW50
cy4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gZG4gICAgICAgICAgICAgVGhlIGN1cnJlbnQgZGlz
dGluZ3Vpc2hlZCBuYW1lIG9mIHRoZSBlbnRyeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBw
YXJhbSBuZXdSZG4gICAgICAgICBUaGUgbmV3IHJlbGF0aXZlIGRpc3Rpbmd1aXNoZWQgbmFtZSBm
b3IgdGhlIGVudHJ5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGRlbGV0ZU9sZFJk
biAgIElmIHRydWUsIHRoZSBvbGQgbmFtZSBpcyBub3QgcmV0YWluZWQgYXMgYW4NCiAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2YWx1ZS4gSWYgZmFsc2UsIHRoZSBvbGQg
bmFtZSBpcw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluZWQgYXMgYW4gYXR0
cmlidXRlIHZhbHVlLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHF1ZXVlICAgICAg
ICAgIFRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgcmV0dXJuZWQgZnJvbSBhIHNlcnZlciBpbg0KICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiBJZiBp
dCBpcyBudWxsLCBhDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZSBvYmplY3Qg
aXMgY3JlYXRlZCBpbnRlcm5hbGx5Lg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNv
bnMgICAgICAgICAgIFRoZSBjb25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgb3BlcmF0aW9uLg0K
ICAgICAqDQogICAgICogQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRp
b24gd2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiBtZXNzYWdlIGFuZCBhbiBMREFQIGVy
cm9yIGNvZGUuDQogICAgICovDQogICAgcHVibGljIExEQVBSZXNwb25zZVF1ZXVlIHJlbmFtZShT
dHJpbmcgZG4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3
UmRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBkZWxldGVP
bGRSZG4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQUmVzcG9uc2VR
dWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBDb25z
dHJhaW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAg
ICAgcmV0dXJuIHJlbmFtZShkbiwgbmV3UmRuLCBudWxsLCBkZWxldGVPbGRSZG4sIHF1ZXVlLCBj
b25zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBc3luY2hyb25vdXNseSByZW5hbWVzIGFu
IGV4aXN0aW5nIGVudHJ5IGluIHRoZSBkaXJlY3RvcnksIHBvc3NpYmx5DQogICAgICogcmVwb3Np
dGlvbmluZyB0aGUgZW50cnkgaW4gdGhlIGRpcmVjdG9yeS4NCiAgICAgKg0KICAgICAqICBAcGFy
YW0gZG4gICAgICAgICAgICAgVGhlIGN1cnJlbnQgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIHRoZSBl
bnRyeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBuZXdSZG4gICAgICAgICBUaGUg
bmV3IHJlbGF0aXZlIGRpc3Rpbmd1aXNoZWQgbmFtZSBmb3IgdGhlIGVudHJ5Lg0KICAgICAqPGJy
Pjxicj4NCiAgICAgKiAgQHBhcmFtIG5ld1BhcmVudGRuICAgIFRoZSBkaXN0aW5ndWlzaGVkIG5h
bWUgb2YgYW4gZXhpc3RpbmcgZW50cnkgd2hpY2gNCiAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgIGlzIHRvIGJlIHRoZSBuZXcgcGFyZW50IG9mIHRoZSBlbnRyeS4NCiAgICAgKjxicj48YnI+
DQogICAgICogIEBwYXJhbSBkZWxldGVPbGRSZG4gICBJZiB0cnVlLCB0aGUgb2xkIG5hbWUgaXMg
bm90IHJldGFpbmVkIGFzIGFuDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgdmFsdWUuIElmIGZhbHNlLCB0aGUgb2xkIG5hbWUgaXMNCiAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldGFpbmVkIGFzIGFuIGF0dHJpYnV0ZSB2YWx1ZS4NCiAgICAgKjxicj48YnI+
DQogICAgICogIEBwYXJhbSBxdWV1ZSAgICAgICAgICBUaGUgcXVldWUgZm9yIG1lc3NhZ2VzIHJl
dHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAgICAgICAg
ICAgICAgICAgICAgICAgcXVldWUgb2JqZWN0IGlzIGNyZWF0ZWQgaW50ZXJuYWxseS4NCiAgICAg
Kg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdo
aWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBj
b2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQUmVzcG9uc2VRdWV1ZSByZW5hbWUoU3RyaW5n
IGRuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1JkbiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdQYXJlbnRkbiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVsZXRlT2xkUmRu
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFJlc3BvbnNlUXVldWUg
cXVldWUpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBpZigg
RGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLmFwaVJl
cXVlc3RzLCBuYW1lICsNCiAgICAgICAgICAgICJyZW5hbWUoIiArIGRuICsgIiwiICsgbmV3UmRu
ICsgIiwiICsgbmV3UGFyZW50ZG4gKyAiKSIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBy
ZW5hbWUoZG4sIG5ld1JkbiwgbmV3UGFyZW50ZG4sDQogICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlT2xkUmRuLCBxdWV1ZSwgZGVmU2VhcmNoQ29ucyk7DQogICAgfQ0KDQogICAgLyoqDQogICAg
ICogQXN5bmNocm9ub3VzbHkgcmVuYW1lcyBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUgZGlyZWN0
b3J5LCB1c2luZyB0aGUNCiAgICAgKiBzcGVjaWZpZWQgY29uc3RyYWludHMgYW5kIHBvc3NpYmls
eSByZXBvc2l0aW9uaW5nIHRoZSBlbnRyeSBpbiB0aGUNCiAgICAgKiBkaXJlY3RvcnkuDQogICAg
ICoNCiAgICAgKiAgQHBhcmFtIGRuICAgICAgICAgICAgIFRoZSBjdXJyZW50IGRpc3Rpbmd1aXNo
ZWQgbmFtZSBvZiB0aGUgZW50cnkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gbmV3
UmRuICAgICAgICAgVGhlIG5ldyByZWxhdGl2ZSBkaXN0aW5ndWlzaGVkIG5hbWUgZm9yIHRoZSBl
bnRyeS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSBuZXdQYXJlbnRkbiAgICBUaGUg
ZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIGV4aXN0aW5nIGVudHJ5IHdoaWNoDQogICAgICogICAg
ICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSB0aGUgbmV3IHBhcmVudCBvZiB0aGUgZW50cnku
DQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gZGVsZXRlT2xkUmRuICAgSWYgdHJ1ZSwg
dGhlIG9sZCBuYW1lIGlzIG5vdCByZXRhaW5lZCBhcyBhbg0KICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIHZhbHVlLiBJZiBmYWxzZSwgdGhlIG9sZCBuYW1lIGlzDQogICAg
ICogICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lZCBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUu
DQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gcXVldWUgICAgICAgICAgVGhlIHF1ZXVl
IGZvciBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIGEgc2VydmVyIGluDQogICAgICogICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIElmIGl0IGlzIG51bGwsIGEN
CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGlu
dGVybmFsbHkuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICAgICAgICAg
VGhlIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBvcGVyYXRpb24uDQogICAgICoNCiAgICAg
KiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNs
dWRlcyBhbiBlcnJvcg0KICAgICAqIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAg
ICAgKi8NCiAgICBwdWJsaWMgTERBUFJlc3BvbnNlUXVldWUgcmVuYW1lKFN0cmluZyBkbiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXdSZG4sDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UGFyZW50ZG4sDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRlbGV0ZU9sZFJkbiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBSZXNwb25zZVF1ZXVlIHF1ZXVlLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMp
DQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBpZihkbiA9PSBu
dWxsIHx8IG5ld1JkbiA9PSBudWxsKSB7DQogICAgICAgICAgICAvLyBJbnZhbGlkIEROIG9yIFJE
TiBwYXJhbWV0ZXINCiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uTWVzc2Fn
ZXMuUkROX1BBUkFNX0VSUk9SKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKCBEZWJ1Zy5MREFQ
X0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5h
bWUgKw0KICAgICAgICAgICAgInJlbmFtZSgiICsgZG4gKyAiLCIgKyBuZXdSZG4gKyAiLCIgKyBu
ZXdQYXJlbnRkbiArICIpIik7DQogICAgICAgIH0NCiAgICAgICAgaWYoY29ucyA9PSBudWxsKQ0K
ICAgICAgICAgICAgY29ucyA9IGRlZlNlYXJjaENvbnM7DQoNCiAgICAgICAgTERBUE1lc3NhZ2Ug
bXNnID0gbmV3IExEQVBNb2RpZnlETlJlcXVlc3QoIGRuLCBuZXdSZG4sIG5ld1BhcmVudGRuLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVPbGRSZG4sIGNvbnMuZ2V0Q29u
dHJvbHMoKSk7DQoNCiAgICAgICAgcmV0dXJuIHNlbmRSZXF1ZXN0VG9TZXJ2ZXIobXNnLCBjb25z
LmdldFRpbWVMaW1pdCgpLCBxdWV1ZSwgbnVsbCk7DQogICAgfQ0KDQogICAgLy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQogICAgLy8gc2VhcmNoIG1ldGhvZHMNCiAgICAvLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0K
ICAgIC8qKg0KICAgICAqDQogICAgICogU3luY2hyb25vdXNseSBwZXJmb3JtcyB0aGUgc2VhcmNo
IHNwZWNpZmllZCBieSB0aGUgcGFyYW1ldGVycy4NCiAgICAgKg0KICAgICAqICBAcGFyYW0gYmFz
ZSAgICAgICAgICAgVGhlIGJhc2UgZGlzdGluZ3Vpc2hlZCBuYW1lIHRvIHNlYXJjaCBmcm9tLg0K
ICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHNjb3BlICAgICAgICAgIFRoZSBzY29wZSBv
ZiB0aGUgZW50cmllcyB0byBzZWFyY2guIFRoZSBmb2xsb3dpbmcNCiAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZSB0aGUgdmFsaWQgb3B0aW9uczoNCiAgICAgKjx1bD4NCiAgICAgKiAg
IDxsaT5TQ09QRV9CQVNFIC0gc2VhcmNoZXMgb25seSB0aGUgYmFzZSBETg0KICAgICAqDQogICAg
ICogICA8bGk+U0NPUEVfT05FIC0gc2VhcmNoZXMgb25seSBlbnRyaWVzIHVuZGVyIHRoZSBiYXNl
IERODQogICAgICoNCiAgICAgKiAgIDxsaT5TQ09QRV9TVUIgLSBzZWFyY2hlcyB0aGUgYmFzZSBE
TiBhbmQgYWxsIGVudHJpZXMNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhp
biBpdHMgc3VidHJlZQ0KICAgICAqPC91bD48YnI+PGJyPg0KICAgICAqICBAcGFyYW0gZmlsdGVy
ICAgICAgICAgU2VhcmNoIGZpbHRlciBzcGVjaWZ5aW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEuDQog
ICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gYXR0cnMgICAgICAgICAgTmFtZXMgb2YgYXR0
cmlidXRlcyB0byByZXRyaWV2ZS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJhbSB0eXBl
c09ubHkgICAgICBJZiB0cnVlLCByZXR1cm5zIHRoZSBuYW1lcyBidXQgbm90IHRoZSB2YWx1ZXMg
b2YNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGVzIGZvdW5kLiBJ
ZiBmYWxzZSwgcmV0dXJucyB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVz
IGFuZCB2YWx1ZXMgZm9yIGF0dHJpYnV0ZXMgZm91bmQuDQogICAgICoNCiAgICAgKiBAZXhjZXB0
aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBl
cnJvcg0KICAgICAqIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAg
ICBwdWJsaWMgTERBUFNlYXJjaFJlc3VsdHMgc2VhcmNoKFN0cmluZyBiYXNlLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjb3BlLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbHRlciwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ1tdIGF0dHJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbGVhbiB0eXBlc09ubHkpDQogICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9u
DQogICAgew0KICAgICAgICByZXR1cm4gc2VhcmNoKGJhc2UsIHNjb3BlLCBmaWx0ZXIsIGF0dHJz
LCB0eXBlc09ubHksIGRlZlNlYXJjaENvbnMpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqDQog
ICAgICogU3luY2hyb25vdXNseSBwZXJmb3JtcyB0aGUgc2VhcmNoIHNwZWNpZmllZCBieSB0aGUg
cGFyYW1ldGVycywNCiAgICAgKiB1c2luZyB0aGUgc3BlY2lmaWVkIHNlYXJjaCBjb25zdHJhaW50
cyAoc3VjaCBhcyB0aGUNCiAgICAgKiBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGZpbmQg
b3IgdGhlIG1heGltdW0gdGltZSB0byB3YWl0IGZvcg0KICAgICAqIHNlYXJjaCByZXN1bHRzKS4N
CiAgICAgKg0KICAgICAqIDxwPkFzIHBhcnQgb2YgdGhlIHNlYXJjaCBjb25zdHJhaW50cywgdGhl
IG1ldGhvZCBhbGxvd3Mgc3BlY2lmeWluZw0KICAgICAqIHdoZXRoZXIgb3Igbm90IHRoZSByZXN1
bHRzIGFyZSB0byBiZSBkZWxpdmVyZWQgYWxsIGF0IG9uY2Ugb3IgaW4NCiAgICAgKiBzbWFsbGVy
IGJhdGNoZXMuIElmIHNwZWNpZmllZCB0aGF0IHRoZSByZXN1bHRzIGFyZSB0byBiZSBkZWxpdmVy
ZWQgaW4NCiAgICAgKiBzbWFsbGVyIGJhdGNoZXMsIGVhY2ggaXRlcmF0aW9uIGJsb2NrcyBvbmx5
IHVudGlsIHRoZSBuZXh0IGJhdGNoIG9mDQogICAgICogcmVzdWx0cyBpcyByZXR1cm5lZC48L3A+
DQogICAgICoNCiAgICAgKiAgQHBhcmFtIGJhc2UgICAgICAgICAgIFRoZSBiYXNlIGRpc3Rpbmd1
aXNoZWQgbmFtZSB0byBzZWFyY2ggZnJvbS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJh
bSBzY29wZSAgICAgICAgICBUaGUgc2NvcGUgb2YgdGhlIGVudHJpZXMgdG8gc2VhcmNoLiBUaGUg
Zm9sbG93aW5nDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBhcmUgdGhlIHZhbGlkIG9w
dGlvbnM6DQogICAgICo8dWw+DQogICAgICogICA8bGk+U0NPUEVfQkFTRSAtIHNlYXJjaGVzIG9u
bHkgdGhlIGJhc2UgRE4NCiAgICAgKg0KICAgICAqICAgPGxpPlNDT1BFX09ORSAtIHNlYXJjaGVz
IG9ubHkgZW50cmllcyB1bmRlciB0aGUgYmFzZSBETg0KICAgICAqDQogICAgICogICA8bGk+U0NP
UEVfU1VCIC0gc2VhcmNoZXMgdGhlIGJhc2UgRE4gYW5kIGFsbCBlbnRyaWVzDQogICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBpdHMgc3VidHJlZQ0KICAgICAqPC91bD48YnI+
PGJyPg0KICAgICAqICBAcGFyYW0gZmlsdGVyICAgICAgICAgVGhlIHNlYXJjaCBmaWx0ZXIgc3Bl
Y2lmeWluZyB0aGUgc2VhcmNoIGNyaXRlcmlhLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBh
cmFtIGF0dHJzICAgICAgICAgIFRoZSBuYW1lcyBvZiBhdHRyaWJ1dGVzIHRvIHJldHJpZXZlLg0K
ICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHR5cGVzT25seSAgICAgIElmIHRydWUsIHJl
dHVybnMgdGhlIG5hbWVzIGJ1dCBub3QgdGhlIHZhbHVlcyBvZg0KICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlIGF0dHJpYnV0ZXMgZm91bmQuICBJZiBmYWxzZSwgcmV0dXJucyB0aGUN
CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzIGFuZCB2YWx1ZXMgZm9yIGF0dHJp
YnV0ZXMgZm91bmQuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gY29ucyAgICAgICAg
ICAgVGhlIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBzZWFyY2guDQogICAgICoNCiAgICAg
KiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3aGljaCBpbmNs
dWRlcyBhbiBlcnJvcg0KICAgICAqIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAg
ICAgKi8NCiAgICBwdWJsaWMgTERBUFNlYXJjaFJlc3VsdHMgc2VhcmNoKFN0cmluZyBiYXNlLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjb3BlLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbHRlciwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGF0dHJzLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbGVhbiB0eXBlc09ubHksDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMREFQU2VhcmNoQ29uc3RyYWludHMgY29ucykNCiAgICAgICAgdGhy
b3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIExEQVBTZWFyY2hRdWV1ZSBxdWV1ZSA9
DQogICAgICAgICAgICBzZWFyY2goYmFzZSwgc2NvcGUsIGZpbHRlciwgYXR0cnMsIHR5cGVzT25s
eSwgbnVsbCwgY29ucyk7DQoNCiAgICAgICAgaWYoIGNvbnMgPT0gbnVsbCApDQogICAgICAgICAg
ICBjb25zID0gZGVmU2VhcmNoQ29uczsNCiAgICAgICAgcmV0dXJuIG5ldyBMREFQU2VhcmNoUmVz
dWx0cyh0aGlzLCBxdWV1ZSwgY29ucyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXN5bmNo
cm9ub3VzbHkgcGVyZm9ybXMgdGhlIHNlYXJjaCBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRlcnMu
DQogICAgICoNCiAgICAgKiAgQHBhcmFtIGJhc2UgICAgICAgICAgIFRoZSBiYXNlIGRpc3Rpbmd1
aXNoZWQgbmFtZSB0byBzZWFyY2ggZnJvbS4NCiAgICAgKjxicj48YnI+DQogICAgICogIEBwYXJh
bSBzY29wZSAgICAgICAgICBUaGUgc2NvcGUgb2YgdGhlIGVudHJpZXMgdG8gc2VhcmNoLiBUaGUg
Zm9sbG93aW5nDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBhcmUgdGhlIHZhbGlkIG9w
dGlvbnM6DQogICAgICo8dWw+DQogICAgICogICA8bGk+U0NPUEVfQkFTRSAtIHNlYXJjaGVzIG9u
bHkgdGhlIGJhc2UgRE4NCiAgICAgKg0KICAgICAqICAgPGxpPlNDT1BFX09ORSAtIHNlYXJjaGVz
IG9ubHkgZW50cmllcyB1bmRlciB0aGUgYmFzZSBETg0KICAgICAqDQogICAgICogICA8bGk+U0NP
UEVfU1VCIC0gc2VhcmNoZXMgdGhlIGJhc2UgRE4gYW5kIGFsbCBlbnRyaWVzDQogICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBpdHMgc3VidHJlZQ0KICAgICAqPC91bD48YnI+
PGJyPg0KICAgICAqICBAcGFyYW0gZmlsdGVyICAgICAgICAgU2VhcmNoIGZpbHRlciBzcGVjaWZ5
aW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0g
YXR0cnMgICAgICAgICAgTmFtZXMgb2YgYXR0cmlidXRlcyB0byByZXRyaWV2ZS4NCiAgICAgKjxi
cj48YnI+DQogICAgICogIEBwYXJhbSB0eXBlc09ubHkgICAgICBJZiB0cnVlLCByZXR1cm5zIHRo
ZSBuYW1lcyBidXQgbm90IHRoZSB2YWx1ZXMgb2YNCiAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoZSBhdHRyaWJ1dGVzIGZvdW5kLiAgSWYgZmFsc2UsIHJldHVybnMgdGhlDQogICAgICog
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhbmQgdmFsdWVzIGZvciBhdHRyaWJ1dGVzIGZv
dW5kLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIHF1ZXVlICAgICAgICAgIEhhbmRs
ZXIgZm9yIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwg
YQ0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUgb2JqZWN0IGlzIGNyZWF0ZWQg
aW50ZXJuYWxseS4NCiAgICAgKg0KICAgICAqIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdl
bmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogbWVzc2FnZSBh
bmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAgIHB1YmxpYyBMREFQU2VhcmNoUXVl
dWUgc2VhcmNoKFN0cmluZyBiYXNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY29wZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmls
dGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGF0dHJzLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdHlwZXNPbmx5LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBTZWFyY2hRdWV1ZSBxdWV1ZSkNCiAg
ICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIHJldHVybiBzZWFyY2go
YmFzZSwgc2NvcGUsIGZpbHRlciwgYXR0cnMsIHR5cGVzT25seSwNCiAgICAgICAgICAgICAgICAg
ICAgICBxdWV1ZSwgZGVmU2VhcmNoQ29ucyk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXN5
bmNocm9ub3VzbHkgcGVyZm9ybXMgdGhlIHNlYXJjaCBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRl
cnMsDQogICAgICogYWxzbyBhbGxvd2luZyBzcGVjaWZpY2F0aW9uIG9mIGNvbnN0cmFpbnRzIGZv
ciB0aGUgc2VhcmNoIChzdWNoDQogICAgICogYXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJp
ZXMgdG8gZmluZCBvciB0aGUgbWF4aW11bSB0aW1lIHRvDQogICAgICogd2FpdCBmb3Igc2VhcmNo
IHJlc3VsdHMpLg0KICAgICAqDQogICAgICogIEBwYXJhbSBiYXNlICAgICAgICAgICBUaGUgYmFz
ZSBkaXN0aW5ndWlzaGVkIG5hbWUgdG8gc2VhcmNoIGZyb20uDQogICAgICo8YnI+PGJyPg0KICAg
ICAqICBAcGFyYW0gc2NvcGUgICAgICAgICAgVGhlIHNjb3BlIG9mIHRoZSBlbnRyaWVzIHRvIHNl
YXJjaC4gVGhlIGZvbGxvd2luZw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHRo
ZSB2YWxpZCBvcHRpb25zOg0KICAgICAqPHVsPg0KICAgICAqICAgPGxpPlNDT1BFX0JBU0UgLSBz
ZWFyY2hlcyBvbmx5IHRoZSBiYXNlIERODQogICAgICoNCiAgICAgKiAgIDxsaT5TQ09QRV9PTkUg
LSBzZWFyY2hlcyBvbmx5IGVudHJpZXMgdW5kZXIgdGhlIGJhc2UgRE4NCiAgICAgKg0KICAgICAq
ICAgPGxpPlNDT1BFX1NVQiAtIHNlYXJjaGVzIHRoZSBiYXNlIEROIGFuZCBhbGwgZW50cmllcw0K
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGl0cyBzdWJ0cmVlDQogICAg
ICo8L3VsPjxicj48YnI+DQogICAgICogIEBwYXJhbSBmaWx0ZXIgICAgICAgICBUaGUgc2VhcmNo
IGZpbHRlciBzcGVjaWZ5aW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEuDQogICAgICo8YnI+PGJyPg0K
ICAgICAqICBAcGFyYW0gYXR0cnMgICAgICAgICAgVGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMgdG8g
cmV0cmlldmUuDQogICAgICo8YnI+PGJyPg0KICAgICAqICBAcGFyYW0gdHlwZXNPbmx5ICAgICAg
SWYgdHJ1ZSwgcmV0dXJucyB0aGUgbmFtZXMgYnV0IG5vdCB0aGUgdmFsdWVzIG9mDQogICAgICog
ICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXR0cmlidXRlcyBmb3VuZC4gIElmIGZhbHNlLCBy
ZXR1cm5zIHRoZQ0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgYW5kIHZhbHVl
cyBmb3IgYXR0cmlidXRlcyBmb3VuZC4NCiAgICAgKiA8YnI+PGJyPg0KICAgICAqICBAcGFyYW0g
cXVldWUgICAgICAgICAgVGhlIHF1ZXVlIGZvciBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIGEgc2Vy
dmVyIGluDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSB0byB0aGlzIHJl
cXVlc3QuIElmIGl0IGlzIG51bGwsIGENCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHF1
ZXVlIG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICo8YnI+PGJyPg0KICAgICAq
ICBAcGFyYW0gY29ucyAgICAgICAgICAgVGhlIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIHRoZSBz
ZWFyY2guDQogICAgICoNCiAgICAgKiBAZXhjZXB0aW9uIExEQVBFeGNlcHRpb24gQSBnZW5lcmFs
IGV4Y2VwdGlvbiB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqIG1lc3NhZ2UgYW5kIGFu
IExEQVAgZXJyb3IgY29kZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgTERBUFNlYXJjaFF1ZXVlIHNl
YXJjaChTdHJpbmcgYmFzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2NvcGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbHRlciwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBhdHRycywNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHR5cGVzT25seSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQU2VhcmNoUXVldWUgcXVldWUsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFNlYXJjaENvbnN0cmFpbnRzIGNvbnMpDQog
ICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICBpZiggZmlsdGVyID09
IG51bGwpIHsNCiAgICAgICAgICAgIGZpbHRlciA9ICJvYmplY3RjbGFzcz0qIjsNCiAgICAgICAg
fQ0KICAgICAgICBpZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgRGVidWcudHJh
Y2UoIERlYnVnLmFwaVJlcXVlc3RzLCBuYW1lICsNCiAgICAgICAgICAgICJzZWFyY2goXCIiICsg
YmFzZSArICJcIiwiICsgc2NvcGUgKyAiLFwiIiArIGZpbHRlciArICJcIikiKTsNCiAgICAgICAg
fQ0KICAgICAgICBpZihjb25zID09IG51bGwpDQogICAgICAgICAgICBjb25zID0gZGVmU2VhcmNo
Q29uczsNCg0KICAgICAgICBMREFQTWVzc2FnZSBtc2cgPSBuZXcgTERBUFNlYXJjaFJlcXVlc3Qo
IGJhc2UsIHNjb3BlLCBmaWx0ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0cnMsIGNvbnMuZ2V0RGVyZWZlcmVuY2UoKSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zLmdldE1heFJlc3VsdHMo
KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
LmdldFNlcnZlclRpbWVMaW1pdCgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVzT25seSwgY29ucy5nZXRDb250cm9scygpKTsNCiAgICAgICAg
TWVzc2FnZUFnZW50IGFnZW50Ow0KICAgICAgICBMREFQU2VhcmNoUXVldWUgbXlxdWV1ZSA9IHF1
ZXVlOw0KICAgICAgICBpZihteXF1ZXVlID09IG51bGwpIHsNCiAgICAgICAgICAgIGFnZW50ID0g
bmV3IE1lc3NhZ2VBZ2VudCgpOw0KICAgICAgICAgICAgbXlxdWV1ZSA9IG5ldyBMREFQU2VhcmNo
UXVldWUoIGFnZW50ICk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhZ2VudCA9IHF1
ZXVlLmdldE1lc3NhZ2VBZ2VudCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAg
ICAgICAgIGFnZW50LnNlbmRNZXNzYWdlKCBjb25uLCBtc2csIGNvbnMuZ2V0VGltZUxpbWl0KCks
IG15cXVldWUsIG51bGwpOw0KICAgICAgICB9IGNhdGNoKExEQVBFeGNlcHRpb24gbGV4KSB7DQog
ICAgICAgICAgICB0aHJvdyBsZXg7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG15cXVldWU7
DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBMREFQIFVSTCBzZWFyY2gNCiAgICAgKi8NCg0KICAg
IC8qKg0KICAgICAqIFN5bmNocm9ub3VzbHkgcGVyZm9ybXMgdGhlIHNlYXJjaCBzcGVjaWZpZWQg
YnkgdGhlIExEQVAgVVJMLCByZXR1cm5pbmcNCiAgICAgKiBhbiBlbnVtZXJhYmxlIExEQVBTZWFy
Y2hSZXN1bHRzIG9iamVjdC4NCiAgICAgKg0KICAgICAqIEBwYXJhbSB0b0dldCBUaGUgTERBUCBV
Ukwgc3BlY2lmeWluZyB0aGUgZW50cnkgdG8gcmVhZC4NCiAgICAgKg0KICAgICAqIEBleGNlcHRp
b24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVy
cm9yDQogICAgICogbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAgICAqLw0KICAg
IHB1YmxpYyBzdGF0aWMgTERBUFNlYXJjaFJlc3VsdHMgc2VhcmNoKExEQVBVcmwgdG9HZXQpDQog
ICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQogICAgew0KICAgICAgICAvLyBHZXQgYSBjbG9u
ZSBvZiBkZWZhdWx0IHNlYXJjaCBjb25zdHJhaW50cywgbWV0aG9kIGFsdGVycyBiYXRjaFNpemUN
CiAgICAgICAgcmV0dXJuIHNlYXJjaCggdG9HZXQsIG51bGwpOw0KICAgIH0NCg0KICAgIC8qDQog
ICAgICogTERBUCBVUkwgc2VhcmNoDQogICAgICovDQoNCiAgICAvKioNCiAgICAgKiBTeW5jaHJv
bm91c2x5IHBlcmZvbXMgdGhlIHNlYXJjaCBzcGVjaWZpZWQgYnkgdGhlIExEQVAgVVJMLCB1c2lu
Zw0KICAgICAqIHRoZSBzcGVjaWZpZWQgc2VhcmNoIGNvbnN0cmFpbnRzIChzdWNoIGFzIHRoZSBt
YXhpbXVtIG51bWJlciBvZg0KICAgICAqIGVudHJpZXMgdG8gZmluZCBvciB0aGUgbWF4aW11bSB0
aW1lIHRvIHdhaXQgZm9yIHNlYXJjaCByZXN1bHRzKS4NCiAgICAgKg0KICAgICAqIDxwPldoZW4g
dGhpcyBtZXRob2QgaXMgY2FsbGVkLCBhIG5ldyBjb25uZWN0aW9uIGlzIGNyZWF0ZWQNCiAgICAg
KiBhdXRvbWF0aWNhbGx5LCB1c2luZyB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gdGhl
IFVSTC4gQWZ0ZXINCiAgICAgKiBhbGwgc2VhcmNoIHJlc3VsdHMgaGF2ZSBiZWVuIHJlY2VpdmVk
IGZyb20gdGhlIHNlcnZlciwgdGhlIG1ldGhvZA0KICAgICAqIGNsb3NlcyB0aGUgY29ubmVjdGlv
biAoaW4gb3RoZXIgd29yZHMsIGl0IGRpc2Nvbm5lY3RzIGZyb20gdGhlIExEQVANCiAgICAgKiBz
ZXJ2ZXIpLjwvcD4NCiAgICAgKg0KICAgICAqIDxwPkFzIHBhcnQgb2YgdGhlIHNlYXJjaCBjb25z
dHJhaW50cywgYSBjaG9pY2UgY2FuIGJlIG1hZGUgYXMgdG8gd2hldGhlcg0KICAgICAqIHRvIGhh
dmUgdGhlIHJlc3VsdHMgZGVsaXZlcmVkIGFsbCBhdCBvbmNlIG9yIGluIHNtYWxsZXIgYmF0Y2hl
cy4gSWYNCiAgICAgKiB0aGUgcmVzdWx0cyBhcmUgdG8gYmUgZGVsaXZlcmVkIGluIHNtYWxsZXIg
YmF0Y2hlcywgZWFjaCBpdGVyYXRpb24NCiAgICAgKiBibG9ja3Mgb25seSB1bnRpbCB0aGUgbmV4
dCBiYXRjaCBvZiByZXN1bHRzIGlzIHJldHVybmVkLjwvcD4NCiAgICAgKg0KICAgICAqDQogICAg
ICogIEBwYXJhbSB0b0dldCAgICAgICAgICBMREFQIFVSTCBzcGVjaWZ5aW5nIHRoZSBlbnRyeSB0
byByZWFkLg0KICAgICAqPGJyPjxicj4NCiAgICAgKiAgQHBhcmFtIGNvbnMgICAgICAgICAgIFRo
ZSBjb25zdHJhaW50cyBzcGVjaWZpYyB0byB0aGUgc2VhcmNoLg0KICAgICAqDQogICAgICogIEBl
eGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVz
IGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAg
Ki8NCiAgICBwdWJsaWMgc3RhdGljIExEQVBTZWFyY2hSZXN1bHRzIHNlYXJjaChMREFQVXJsIHRv
R2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBTZWFy
Y2hDb25zdHJhaW50cyBjb25zKQ0KICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsN
CiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgIERlYnVnLnRyYWNl
KCBEZWJ1Zy5hcGlSZXF1ZXN0cywNCiAgICAgICAgICAgICAgICAgICAgIkxEQVBDb25uZWN0aW9u
LnNlYXJjaCgiICsgdG9HZXQudG9TdHJpbmcoKSArICIpIik7DQogICAgICAgIH0NCiAgICAgICAg
TERBUENvbm5lY3Rpb24gbGNvbm4gPSBuZXcgTERBUENvbm5lY3Rpb24oKTsNCiAgICAgICAgbGNv
bm4uY29ubmVjdCh0b0dldC5nZXRIb3N0KCksdG9HZXQuZ2V0UG9ydCgpKTsNCiAgICAgICAgaWYo
IGNvbnMgPT0gbnVsbCkgew0KICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNsb25lLCBzbyB3ZSBh
bHJlYWR5IGhhdmUgb3VyIG93biBjb3B5DQogICAgICAgICAgICBjb25zID0gbGNvbm4uZ2V0U2Vh
cmNoQ29uc3RyYWludHMoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIGdldCBv
dXIgb3duIGNvcHkgb2YgdXNlcidzIGNvbnN0cmFpbnRzIGJlY2F1c2Ugd2UgbW9kaWZ5IGl0DQog
ICAgICAgICAgICBjb25zID0gKExEQVBTZWFyY2hDb25zdHJhaW50cyljb25zLmNsb25lKCk7DQog
ICAgICAgIH0NCiAgICAgICAgY29ucy5zZXRCYXRjaFNpemUoMCk7IC8vIE11c3Qgd2FpdCB1bnRp
bCBhbGwgcmVzdWx0cyBhcnJpdmUNCiAgICAgICAgTERBUFNlYXJjaFJlc3VsdHMgdG9SZXR1cm4g
PSBsY29ubi5zZWFyY2godG9HZXQuZ2V0RE4oKSwNCiAgICAgICAgICAgICAgICB0b0dldC5nZXRT
Y29wZSgpLCB0b0dldC5nZXRGaWx0ZXIoKSwgdG9HZXQuZ2V0QXR0cmlidXRlQXJyYXkoKSwNCiAg
ICAgICAgICAgICAgICBmYWxzZSwgY29ucyk7DQogICAgICAgIGxjb25uLmRpc2Nvbm5lY3QoKTsN
CiAgICAgICAgcmV0dXJuIHRvUmV0dXJuOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNlbmRz
IGFuIExEQVAgcmVxdWVzdCB0byBhIGRpcmVjdG9yeSBzZXJ2ZXIuDQogICAgICoNCiAgICAgKiA8
cD5UaGUgc3BlY2lmaWVkIHRoZSBMREFQIHJlcXVlc3QgaXMgc2VudCB0byB0aGUgZGlyZWN0b3J5
IHNlcnZlcg0KICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbm5lY3Rpb24gdXNpbmcgZGVm
YXVsdCBjb25zdHJhaW50cy4gQW4gTERBUA0KICAgICAqIHJlcXVlc3Qgb2JqZWN0IGlzIGEgc3Vi
Y2xhc3Mge0BsaW5rIExEQVBNZXNzYWdlfSB3aXRoIHRoZSBvcGVyYXRpb24NCiAgICAgKiB0eXBl
IHNldCB0byBvbmUgb2YgdGhlIHJlcXVlc3QgdHlwZXMuIFlvdSBjYW4gYnVpbGQgYSByZXF1ZXN0
IGJ5IHVzaW5nDQogICAgICogdGhlIHJlcXVlc3QgY2xhc3NlcyBmb3VuZCBpbiB0aGlzIHBhY2th
Z2U8L3A+DQogICAgICoNCiAgICAgKiA8cD5Zb3Ugc2hvdWxkIG5vdGUgdGhhdCwgc2luY2UgTERB
UCByZXF1ZXN0cyBzZW50IHRvIHRoZSBzZXJ2ZXINCiAgICAgKiB1c2luZyBzZW5kUmVxdWVzdCBh
cmUgYXN5bmNocm9ub3VzLCBhdXRvbWF0aWMgcmVmZXJyYWwgZm9sbG93aW5nDQogICAgICogZG9l
cyBub3QgYXBwbHkgdG8gdGhlc2UgcmVxdWVzdHMuPC9wPg0KICAgICAqDQogICAgICogQHBhcmFt
IHJlcXVlc3QgVGhlIExEQVAgcmVxdWVzdCB0byBzZW5kIHRvIHRoZSBkaXJlY3Rvcnkgc2VydmVy
Lg0KICAgICAqIEBwYXJhbSBxdWV1ZSAgICBUaGUgcXVldWUgZm9yIG1lc3NhZ2VzIHJldHVybmVk
IGZyb20gYSBzZXJ2ZXIgaW4NCiAgICAgKiAgICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gdGhp
cyByZXF1ZXN0LiBJZiBpdCBpcyBudWxsLCBhDQogICAgICogICAgICAgICAgICAgICAgIHF1ZXVl
IG9iamVjdCBpcyBjcmVhdGVkIGludGVybmFsbHkuDQogICAgICogQGV4Y2VwdGlvbiAgICAgTERB
UEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQog
ICAgICogICAgICAgICAgICAgICAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJvciBjb2RlLg0KICAg
ICAqDQogICAgICogQHNlZSBMREFQTWVzc2FnZSNnZXRUeXBlKCkNCiAgICAgKiBAc2VlIExEQVBN
ZXNzYWdlI2lzUmVxdWVzdCgpDQogICAgICovDQogICAgcHVibGljIExEQVBNZXNzYWdlUXVldWUg
c2VuZFJlcXVlc3QoIExEQVBNZXNzYWdlIHJlcXVlc3QsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExEQVBNZXNzYWdlUXVldWUgcXVldWUpDQogICAgICAgICAgICB0
aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbmRSZXF1ZXN0KCBy
ZXF1ZXN0LCBxdWV1ZSwgbnVsbCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2VuZHMgYW4g
TERBUCByZXF1ZXN0IHRvIGEgZGlyZWN0b3J5IHNlcnZlci4NCiAgICAgKg0KICAgICAqIDxwPlRo
ZSBzcGVjaWZpZWQgdGhlIExEQVAgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBkaXJlY3Rvcnkgc2Vy
dmVyDQogICAgICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29ubmVjdGlvbi4gQW4gTERBUCByZXF1
ZXN0IG9iamVjdCBpcyBhbg0KICAgICAqIHtAbGluayBMREFQTWVzc2FnZX0gd2l0aCB0aGUgb3Bl
cmF0aW9uIHR5cGUgc2V0IHRvIG9uZSBvZiB0aGUgcmVxdWVzdA0KICAgICAqIHR5cGVzLiBZb3Ug
Y2FuIGJ1aWxkIGEgcmVxdWVzdCBieSB1c2luZyB0aGUgcmVxdWVzdCBjbGFzc2VzIGZvdW5kIGlu
IHRoaXMNCiAgICAgKiBwYWNrYWdlPC9wPg0KICAgICAqDQogICAgICogPHA+WW91IHNob3VsZCBu
b3RlIHRoYXQsIHNpbmNlIExEQVAgcmVxdWVzdHMgc2VudCB0byB0aGUgc2VydmVyDQogICAgICog
dXNpbmcgc2VuZFJlcXVlc3QgYXJlIGFzeW5jaHJvbm91cywgYXV0b21hdGljIHJlZmVycmFsIGZv
bGxvd2luZw0KICAgICAqIGRvZXMgbm90IGFwcGx5IHRvIHRoZXNlIHJlcXVlc3RzLjwvcD4NCiAg
ICAgKg0KICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBMREFQIHJlcXVlc3QgdG8gc2VuZCB0byB0
aGUgZGlyZWN0b3J5IHNlcnZlci4NCiAgICAgKiBAcGFyYW0gcXVldWUgICAgVGhlIHF1ZXVlIGZv
ciBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIGEgc2VydmVyIGluDQogICAgICogICAgICAgICAgICAg
ICAgIHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gSWYgaXQgaXMgbnVsbCwgYQ0KICAgICAqICAg
ICAgICAgICAgICAgICBxdWV1ZSBvYmplY3QgaXMgY3JlYXRlZCBpbnRlcm5hbGx5Lg0KICAgICAq
IEBwYXJhbSBjb25zICAgIFRoZSBjb25zdHJhaW50cyB0aGF0IGFwcGx5IHRvIHRoaXMgcmVxdWVz
dA0KICAgICAqIEBleGNlcHRpb24gICAgIExEQVBFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlv
biB3aGljaCBpbmNsdWRlcyBhbiBlcnJvcg0KICAgICAqICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
YW5kIGFuIExEQVAgZXJyb3IgY29kZS4NCiAgICAgKg0KICAgICAqIEBzZWUgTERBUE1lc3NhZ2Uj
Z2V0VHlwZSgpDQogICAgICogQHNlZSBMREFQTWVzc2FnZSNpc1JlcXVlc3QoKQ0KICAgICAqLw0K
ICAgIHB1YmxpYyBMREFQTWVzc2FnZVF1ZXVlIHNlbmRSZXF1ZXN0KCBMREFQTWVzc2FnZSByZXF1
ZXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQTWVzc2Fn
ZVF1ZXVlIHF1ZXVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
REFQQ29uc3RyYWludHMgY29ucykNCiAgICAgICAgICAgIHRocm93cyBMREFQRXhjZXB0aW9uDQog
ICAgew0KDQogICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1
Zy50cmFjZSggRGVidWcuYXBpUmVxdWVzdHMsIG5hbWUgKw0KICAgICAgICAgICAgInNlbmRSZXF1
ZXN0KCIgKyByZXF1ZXN0LnRvU3RyaW5nKCkgKyAiKSIpOw0KICAgICAgICB9DQoNCiAgICAgICAg
aWYoICEgcmVxdWVzdC5pc1JlcXVlc3QoKSApIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKCAiT2JqZWN0IGlzIG5vdCBhIHJlcXVlc3QgbWVzc2FnZSIpOw0KICAgICAg
ICB9DQoNCiAgICAgICAgaWYoY29ucyA9PSBudWxsKSB7DQogICAgICAgICAgICBjb25zID0gZGVm
U2VhcmNoQ29uczsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEdldCB0aGUgY29ycmVjdCBxdWV1
ZSBmb3IgYSBzZWFyY2ggcmVxdWVzdA0KICAgICAgICBNZXNzYWdlQWdlbnQgYWdlbnQ7DQogICAg
ICAgIExEQVBNZXNzYWdlUXVldWUgbXlxdWV1ZSA9IHF1ZXVlOw0KICAgICAgICBpZihteXF1ZXVl
ID09IG51bGwpIHsNCiAgICAgICAgICAgIGFnZW50ID0gbmV3IE1lc3NhZ2VBZ2VudCgpOw0KICAg
ICAgICAgICAgaWYoIHJlcXVlc3QuZ2V0VHlwZSgpID09IExEQVBNZXNzYWdlLlNFQVJDSF9SRVFV
RVNUKSB7DQogICAgICAgICAgICAgICAgbXlxdWV1ZSA9IG5ldyBMREFQU2VhcmNoUXVldWUoIGFn
ZW50ICk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIG15cXVldWUgPSBu
ZXcgTERBUFJlc3BvbnNlUXVldWUoIGFnZW50ICk7DQogICAgICAgICAgICB9DQogICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICBpZiggcmVxdWVzdC5nZXRUeXBlKCkgPT0gTERBUE1lc3NhZ2Uu
U0VBUkNIX1JFUVVFU1QpIHsNCiAgICAgICAgICAgICAgICBhZ2VudCA9IHF1ZXVlLmdldE1lc3Nh
Z2VBZ2VudCgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhZ2VudCA9
IHF1ZXVlLmdldE1lc3NhZ2VBZ2VudCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAg
ICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGFnZW50LnNlbmRNZXNzYWdlKCBjb25uLCByZXF1ZXN0
LCBjb25zLmdldFRpbWVMaW1pdCgpLCBteXF1ZXVlLCBudWxsKTsNCiAgICAgICAgfSBjYXRjaChM
REFQRXhjZXB0aW9uIGxleCkgew0KICAgICAgICAgICAgdGhyb3cgbGV4Ow0KICAgICAgICB9DQog
ICAgICAgIHJldHVybiBteXF1ZXVlOw0KICAgIH0NCg0KICAgIC8vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
ICAgIC8vIGhlbHBlciBtZXRob2RzDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCiAgICAvKioN
CiAgICAgKiBMb2NhdGVzIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlIGFnZW50IGFuZCBzZW5kcw0K
ICAgICAqIHRoZSBMREFQIHJlcXVlc3QgdG8gYSBkaXJlY3Rvcnkgc2VydmVyLg0KICAgICAqDQog
ICAgICogQHBhcmFtIG1zZyB0aGUgbWVzc2FnZSB0byBzZW5kDQogICAgICo8YnI+PGJyPg0KICAg
ICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0IHZhbHVlDQogICAgICo8YnI+PGJyPg0KICAg
ICAqIEBwYXJhbSBxdWV1ZSB0aGUgcmVzcG9uc2UgcXVldWUgb3IgbnVsbA0KICAgICAqDQogICAg
ICogQHJldHVybiB0aGUgTERBUFJlc3BvbnNlUXVldWUgZm9yIHRoaXMgcmVxdWVzdA0KICAgICAq
DQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9uIHdo
aWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJyb3Ig
Y29kZS4NCiAgICAgKi8NCiAgICBwcml2YXRlIExEQVBSZXNwb25zZVF1ZXVlIHNlbmRSZXF1ZXN0
VG9TZXJ2ZXIoIExEQVBNZXNzYWdlIG1zZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdGltZW91dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMREFQUmVzcG9uc2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kUHJvcGVydGllcyBiaW5kUHJvcHMpDQogICAg
ICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgTWVzc2FnZUFnZW50
IGFnZW50Ow0KICAgICAgICBpZihxdWV1ZSA9PSBudWxsKSB7DQogICAgICAgICAgICBhZ2VudCA9
IG5ldyBNZXNzYWdlQWdlbnQoKTsNCiAgICAgICAgICAgIHF1ZXVlID0gbmV3IExEQVBSZXNwb25z
ZVF1ZXVlKCBhZ2VudCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhZ2VudCA9IHF1
ZXVlLmdldE1lc3NhZ2VBZ2VudCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgYWdlbnQuc2VuZE1l
c3NhZ2UoIGNvbm4sIG1zZywgdGltZW91dCwgcXVldWUsIGJpbmRQcm9wcyk7DQogICAgICAgIHJl
dHVybiBxdWV1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm4gdGhlIENvbm5lY3Rp
b24gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIExEQVBDb25uZWN0aW9uDQogICAgICoNCiAg
ICAgKiBAcmV0dXJuIHRoZSBDb25uZWN0aW9uIG9iamVjdA0KICAgICAqLw0KICAgIC8qIHBhY2th
Z2UgKi8NCiAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oICkNCiAgICB7DQogICAgICAgIHJl
dHVybiBjb25uOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybiB0aGUgQ29ubmVjdGlv
biBvYmplY3QgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBMREFQQ29ubmVjdGlvbg0KICAgICAq
DQogICAgICogQHJldHVybiB0aGUgQ29ubmVjdGlvbiBvYmplY3QgbmFtZQ0KICAgICAqLw0KICAg
IC8qIHBhY2thZ2UgKi8NCiAgICBTdHJpbmcgZ2V0Q29ubmVjdGlvbk5hbWUoICkNCiAgICB7DQog
ICAgICAgIHJldHVybiBuYW1lOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIGdldCBhbiBMREFQ
Q29ubmVjdGlvbiBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZm9sbG93IGEgcmVmZXJyYWwuDQogICAg
ICogVGhpcyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgaWYgY29ucy5nZXRSZWZlcnJhbEZvbGxv
d2luZygpIHJldHVybnMNCiAgICAgKiBmYWxzZS4NCiAgICAgKg0KICAgICAqIEBwYXJhbSByZWZl
cnJhbHMgdGhlIGFycmF5IG9mIHJlZmVycmFsIHN0cmluZ3MNCiAgICAgKjxicj48YnI+DQogICAg
ICoNCiAgICAgKiBAcmV0dXJuIFRoZSByZWZlcnJhbEluZm8gb2JqZWN0DQogICAgICoNCiAgICAg
KiAgQGV4Y2VwdGlvbiBMREFQUmVmZXJyYWxFeGNlcHRpb24gQSBnZW5lcmFsIGV4Y2VwdGlvbiB3
aGljaCBpbmNsdWRlcw0KICAgICAqICBhbiBlcnJvciBtZXNzYWdlIGFuZCBhbiBMREFQIGVycm9y
IGNvZGUuDQogICAgICovDQogICAgcHJpdmF0ZSBSZWZlcnJhbEluZm8gZ2V0UmVmZXJyYWxDb25u
ZWN0aW9uKCBTdHJpbmdbXSByZWZlcnJhbHMsIExEQVBDb25zdHJhaW50cyBjb25zKQ0KICAgICAg
ICAgICAgICAgICAgICB0aHJvd3MgTERBUFJlZmVycmFsRXhjZXB0aW9uDQogICAgew0KICAgICAg
ICBSZWZlcnJhbEluZm8gcmVmSW5mbyA9IG51bGw7DQogICAgICAgIFRocm93YWJsZSBleCA9IG51
bGw7DQogICAgICAgIExEQVBDb25uZWN0aW9uIHJjb25uID0gbnVsbDsNCiAgICAgICAgaWYoIGNv
bnMgPT0gbnVsbCApIHsNCiAgICAgICAgICAgIGNvbnMgPSBkZWZTZWFyY2hDb25zOw0KICAgICAg
ICB9DQogICAgICAgIExEQVBSZWZlcnJhbEhhbmRsZXIgcmggPSBjb25zLmdldFJlZmVycmFsSGFu
ZGxlcigpOw0KICAgICAgICBpbnQgaSA9IDA7DQogICAgICAgIC8vIENoZWNrIGlmIHdlIHVzZSBM
REFQUmViaW5kIHRvIGdldCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscw0KICAgICAgICBpZigg
KHJoID09IG51bGwpIHx8ICAgICAgKHJoIGluc3RhbmNlb2YgTERBUEF1dGhIYW5kbGVyKSkgew0K
ICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IHJlZmVycmFscy5sZW5ndGg7IGkrKykgew0KICAg
ICAgICAgICAgICAgIC8vIGRuLCBwdyBhcmUgbnVsbCBpbiB0aGUgZGVmYXVsdCBjYXNlIChhbm9u
eW1vdXMgYmluZCkNCiAgICAgICAgICAgICAgICBTdHJpbmcgZG4gPSBudWxsOw0KICAgICAgICAg
ICAgICAgIGJ5dGVbXSBwdyA9IG51bGw7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg
ICAgICAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5yZWZlcnJhbHMsICAgbmFtZSArDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldFJlZmVycmFsQ29ubmVj
dGlvbjogIiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInVybD0iICsgcmVmZXJyYWxzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgICAgICByY29ubiA9IG5ldyBMREFQQ29ubmVjdGlvbiggY29ubi5nZXRTb2Nr
ZXRGYWN0b3J5KCkpOw0KICAgICAgICAgICAgICAgICAgICByY29ubi5zZXRDb25zdHJhaW50cygg
ZGVmU2VhcmNoQ29ucyk7DQogICAgICAgICAgICAgICAgICAgIExEQVBVcmwgdXJsID0gbmV3IExE
QVBVcmwocmVmZXJyYWxzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgcmNvbm4uY29ubmVjdCh1
cmwuZ2V0SG9zdCgpLHVybC5nZXRQb3J0KCkpOw0KICAgICAgICAgICAgICAgICAgICBpZiggcmgg
IT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJoIGluc3RhbmNlb2YgTERB
UEF1dGhIYW5kbGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGFwcGxp
Y2F0aW9uIHN1cHBsaWVkIGRuIGFuZCBwdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIExE
QVBBdXRoUHJvdmlkZXIgYXAgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
TERBUEF1dGhIYW5kbGVyKXJoKS5nZXRBdXRoUHJvdmlkZXIoDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsLmdldEhvc3QoKSx1cmwuZ2V0UG9ydCgpKTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkbiA9IGFwLmdldEROKCk7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHcgPSBhcC5nZXRQYXNzd29yZCgpOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJjb25uLmJp
bmQoIExEQVBfVjMsIGRuLCBwdyk7DQogICAgICAgICAgICAgICAgICAgIGV4ID0gbnVsbDsNCiAg
ICAgICAgICAgICAgICAgICAgcmVmSW5mbyA9IG5ldyBSZWZlcnJhbEluZm8ocmNvbm4sIHJlZmVy
cmFscywgdXJsKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhpcyBjb25uZWN0
aW9uIGNyZWF0ZWQgdG8gZm9sbG93IHJlZmVycmFsDQogICAgICAgICAgICAgICAgICAgIHJjb25u
LmdldENvbm5lY3Rpb24oKS5zZXRBY3RpdmVSZWZlcnJhbCggcmVmSW5mbyk7DQogICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSBsZXgp
IHsNCiAgICAgICAgICAgICAgICAgICAgaWYoIHJjb25uICE9IG51bGwpIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIERlYnVn
LkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcudHJh
Y2UoIERlYnVnLnJlZmVycmFscywgbmFtZSArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZ2V0UmVmZXJyYWxDb25uZWN0aW9uLCBleGNlcHRpb24gIiArDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluZGluZyBmb3IgcmVmZXJyYWwiICsgbGV4LnRv
U3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByY29ubi5kaXNjb25uZWN0KCk7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmNvbm4gPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ID0gbGV4
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggTERBUEV4Y2VwdGlvbiBlKSB7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBpZ25vcmUNCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIC8vIENoZWNrIGlmIGFwcGxpY2F0aW9uIGdl
dHMgY29ubmVjdGlvbiBhbmQgZG9lcyBiaW5kDQogICAgICAgIGVsc2UgeyAvLyAgcmggaW5zdGFu
Y2VvZiBMREFQQmluZA0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBpZiggRGVi
dWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcu
cmVmZXJyYWxzLCBuYW1lICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJnZXRSZWZlcnJhbENvbm5lY3Rpb246ICIgKw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGwgTERBUEJpbmQuYmluZCgpIik7DQog
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJjb25uID0gKChMREFQQmluZEhhbmRs
ZXIpcmgpLmJpbmQoIHJlZmVycmFscywgdGhpcyk7DQogICAgICAgICAgICAgICAgaWYoIHJjb25u
ID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgTERBUFJlZmVycmFsRXhjZXB0aW9uIHJl
eCA9IG5ldyBMREFQUmVmZXJyYWxFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgICAgICAgICBF
eGNlcHRpb25NZXNzYWdlcy5SRUZFUlJBTF9FUlJPUik7DQogICAgICAgICAgICAgICAgICAgIHJl
eC5zZXRSZWZlcnJhbHMoIHJlZmVycmFscyk7DQogICAgICAgICAgICAgICAgICAgIHRocm93IHJl
eDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCBVcmwgYmVsb25ncyB0byB0aGUgY29ubmVjdGlvbg0KICAgICAgICAgICAgICAgIGZvciggaW50
IGlkeCA9IDA7IGlkeCA8IHJlZmVycmFscy5sZW5ndGg7IGlkeCsrKSB7DQogICAgICAgICAgICAg
ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICBMREFQVXJsIHVybCA9IG5ldyBM
REFQVXJsKCByZWZlcnJhbHNbaWR4XSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiggRGVi
dWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnLnRyYWNl
KCBEZWJ1Zy5yZWZlcnJhbHMsIG5hbWUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJnZXRSZWZlcnJhbENvbm5lY3Rpb246ICIgKw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJlIGhvc3QgcG9ydCAiICsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwuZ2V0SG9zdCgpICsgIi0iICsgcmNvbm4u
Z2V0SG9zdCgpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICYg
IiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmdldFBvcnQo
KSArICItIiArIHJjb25uLmdldFBvcnQoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiggdXJsLmdldEhvc3QoKS5lcXVhbHNJZ25vcmVDYXNl
KHJjb25uLmdldEhvc3QoKSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVy
bC5nZXRQb3J0KCkgPT0gcmNvbm4uZ2V0UG9ydCgpKSkgew0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZkluZm8gPSBuZXcgUmVmZXJyYWxJbmZvKHJjb25uLCByZWZlcnJhbHMsIHVybCk7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBFeGNlcHRpb24gZSkgew0KICAg
ICAgICAgICAgICAgICAgICAgICAgOyAvLyBpZ25vcmUNCiAgICAgICAgICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiggcmVmSW5mbyA9PSBudWxsKSB7
DQogICAgICAgICAgICAgICAgICAgIGlmKCBEZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAg
ICAgICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcucmVmZXJyYWxzLCBuYW1lICsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRSZWZlcnJhbENvbm5lY3Rpb246ICIg
Kw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxEQVBCaW5kLmJpbmQoKTog
IiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNvdWxkIG5vdCBtYXRj
aCBjb25uZWN0aW9uIHdpdGggVVJMIiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWZlcnJhbHMudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICAgICAgLy8gQ291bGQgbm90IG1hdGNoIExEQVBCaW5kLmJpbmQoKSBjb25uZWNj
dGlvbiB3aXRoIFVSTCBsaXN0DQogICAgICAgICAgICAgICAgICAgIGV4ID0gbmV3IExEQVBMb2Nh
bEV4Y2VwdGlvbigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25NZXNzYWdl
cy5SRUZFUlJBTF9CSU5EX01BVENILA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBF
eGNlcHRpb24uQ09OTkVDVF9FUlJPUik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fSBjYXRjaCggVGhyb3dhYmxlIGxleCkgew0KICAgICAgICAgICAgICAgIGlmKCBEZWJ1Zy5MREFQ
X0RFQlVHKSB7DQogICAgICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5yZWZlcnJh
bHMsIG5hbWUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0UmVmZXJyYWxD
b25uZWN0aW9uOiAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4Y2VwdGlv
biBmcm9tIExEQVBCaW5kLmJpbmQoKTogIiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxleC50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
cmNvbm4gPSBudWxsOw0KICAgICAgICAgICAgICAgIGV4ID0gbGV4Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICAgIGlmKCBleCAhPSBudWxsKSB7DQogICAgICAgICAgICAvLyBDb3Vs
ZCBub3QgY29ubmVjdCB0byBhbnkgc2VydmVyLCB0aHJvdyBhbiBleGNlcHRpb24NCiAgICAgICAg
ICAgIExEQVBFeGNlcHRpb24gbGRhcGV4Ow0KICAgICAgICAgICAgaWYoIGV4IGluc3RhbmNlb2Yg
TERBUFJlZmVycmFsRXhjZXB0aW9uKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgKExEQVBSZWZl
cnJhbEV4Y2VwdGlvbilleDsNCiAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgaWYoIGV4
IGluc3RhbmNlb2YgTERBUEV4Y2VwdGlvbikgew0KICAgICAgICAgICAgICAgIGxkYXBleCA9IChM
REFQRXhjZXB0aW9uKWV4Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBs
ZGFwZXggPSBuZXcgTERBUExvY2FsRXhjZXB0aW9uKA0KICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25NZXNzYWdlcy5TRVJWRVJfQ09OTkVDVF9FUlJPUiwNCiAgICAgICAgICAgICAgICAgICAg
bmV3IE9iamVjdFtdIHsgY29ubi5nZXRIb3N0KCkgfSwNCiAgICAgICAgICAgICAgICAgICAgTERB
UEV4Y2VwdGlvbi5DT05ORUNUX0VSUk9SLCBleCk7DQogICAgICAgICAgICB9DQogICAgICAgICAg
ICAvLyBFcnJvciBhdHRlbXB0aW5nIHRvIGZvbGxvdyBhIHJlZmVycmFsDQogICAgICAgICAgICBM
REFQUmVmZXJyYWxFeGNlcHRpb24gcmV4ID0gbmV3IExEQVBSZWZlcnJhbEV4Y2VwdGlvbigNCiAg
ICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uTWVzc2FnZXMuUkVGRVJSQUxfRVJST1IsDQogICAg
ICAgICAgICAgICAgICAgIGxkYXBleCk7DQogICAgICAgICAgICByZXguc2V0UmVmZXJyYWxzKHJl
ZmVycmFscyk7DQogICAgICAgICAgICAvLyBVc2UgbGFzdCBVUkwgc3RyaW5nIGZvciB0aGUgZmFp
bGVkIHJlZmVycmFsDQogICAgICAgICAgICByZXguc2V0RmFpbGVkUmVmZXJyYWwoIHJlZmVycmFs
c1tyZWZlcnJhbHMubGVuZ3RoLTFdKTsNCiAgICAgICAgICAgIHRocm93IHJleDsNCiAgICAgICAg
fQ0KDQogICAgICAgIC8vIFdlIG5vdyBoYXZlIGFuIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbg0K
ICAgICAgICAvLyB0byBiZSB1c2VkIHRvIGZvbGxvdyB0aGUgcmVmZXJyYWwuDQogICAgICAgIHJl
dHVybiByZWZJbmZvOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoZWNrIHRoZSByZXN1bHQg
Y29kZSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIG5lZWRlZC4NCiAgICAgKg0KICAgICAqIDxw
PklmIHJlZmVycmFsIGZvbGxvd2luZyBpcyBlbmFibGVkLCBjaGVja3MgaWYgd2UgbmVlZCB0bw0K
ICAgICAqIGZvbGxvdyBhIHJlZmVycmFsPC9wPg0KICAgICAqDQogICAgICogQHBhcmFtIHF1ZXVl
IC0gdGhlIG1lc3NhZ2UgcXVldWUgb2YgdGhlIGN1cnJlbnQgcmVzcG9uc2UNCiAgICAgKg0KICAg
ICAqIEBwYXJhbSBjb25zIC0gdGhlIGNvbnN0cmFpbnRzIHRoYXQgYXBwbHkgdG8gdGhlIHJlcXVl
c3QNCiAgICAgKg0KICAgICAqIEBwYXJhbSByZXNwb25zZSAtIHRoZSBMREFQUmVzcG9uc2UgdG8g
Y2hlY2sNCiAgICAgKi8NCiAgICBwcml2YXRlIHZvaWQgY2hrUmVzdWx0Q29kZSggTERBUE1lc3Nh
Z2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUENvbnN0
cmFpbnRzIGNvbnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBSZXNwb25z
ZSByZXNwb25zZSkNCiAgICAgICAgICAgICAgICB0aHJvd3MgTERBUEV4Y2VwdGlvbg0KICAgICB7
DQogICAgICAgIGlmKCAocmVzcG9uc2UuZ2V0UmVzdWx0Q29kZSgpID09IExEQVBFeGNlcHRpb24u
UkVGRVJSQUwpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zLmdl
dFJlZmVycmFsRm9sbG93aW5nKCkpIHsNCiAgICAgICAgICAgIC8vIFBlcmZvcm0gcmVmZXJyYWwg
Zm9sbG93aW5nIGFuZCByZXR1cm4NCiAgICAgICAgICAgIEFycmF5TGlzdCByZWZDb25uID0gbnVs
bDsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgY2hhc2VSZWZlcnJhbCggcXVl
dWUsIGNvbnMsIHJlc3BvbnNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0
UmVmZXJyYWxzKCksIDAsIGZhbHNlLCBudWxsICk7DQogICAgICAgICAgICB9IGZpbmFsbHkgew0K
ICAgICAgICAgICAgICAgIHJlbGVhc2VSZWZlcnJhbENvbm5lY3Rpb25zKCByZWZDb25uKTsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIFRocm93cyBleGNl
cHRpb24gZm9yIG5vbiBzdWNjZXNzIHJlc3VsdA0KICAgICAgICAgICAgcmVzcG9uc2UuY2hrUmVz
dWx0Q29kZSgpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybjsNCiAgICAgfQ0KDQogICAgLyoq
DQogICAgICogRm9sbG93IHJlZmVycmFscyBpZiBuZWNlc3NhcnkgcmVmZXJyYWwgZm9sbG93aW5n
IGVuYWJsZWQuDQogICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBieSBzeW5jaHJv
bm91cyByZXF1ZXN0cy4NCiAgICAgKiBTZWFyY2ggcmVzcG9uc2VzIGNvbWUgaGVyZSBvbmx5IGlm
IHJlZmVycmFsIGZvbGxvd2luZyBpcw0KICAgICAqIGVuYWJsZWQgYW5kIGlmIHdlIGFyZSBwcm9j
ZXNzaW5nIGEgU2VhcmNoUmVzdWx0UmVmZXJlbmNlDQogICAgICogb3IgYSBSZXNwb25zZSB3aXRo
IGEgc3RhdHVzIG9mIFJFRkVSUkFMLCBpLmUuIHdlIGFyZQ0KICAgICAqIGdvaW5nIHRvIGZvbGxv
dyBhIHJlZmVycmFsLg0KICAgICAqDQogICAgICogVGhpcyBmdW5jdGlvbnMgcmVjdXJzaXZlbHkg
Zm9sbG93cyBhIHJlZmVycmFsIHVudGlsIGEgcmVzdWx0DQogICAgICogaXMgcmV0dXJuZWQgb3Ig
dW50aWwgdGhlIGhvcCBsaW1pdCBpcyByZWFjaGVkLg0KICAgICAqDQogICAgICogQHBhcmFtIHF1
ZXVlIFRoZSBMREFQUmVzcG9uc2VRdWV1ZSBmb3IgdGhpcyByZXF1ZXN0DQogICAgICogPGJyPjxi
cj4NCiAgICAgKiBAcGFyYW0gY29ucyBUaGUgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byB0aGUg
cmVxdWVzdA0KICAgICAqIDxicj48YnI+DQogICAgICogQHBhcmFtIG1zZyBUaGUgcmVmZXJyYWwg
b3Igc2VhcmNoIHJlZmVyZW5jZSByZXNwb25zZSBtZXNzYWdlDQogICAgICogPGJyPjxicj4NCiAg
ICAgKiBAcGFyYW0gaW5pdGlhbFJlZmVycmFscyBUaGUgcmVmZXJyYWwgYXJyYXkgcmV0dXJuZWQg
ZnJvbSB0aGUNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgcmVxdWVzdC4N
CiAgICAgKiA8YnI+PGJyPg0KICAgICAqIEBwYXJhbSBob3BDb3VudCB0aGUgbnVtYmVyIG9mIGhv
cHMgYWxyZWFkeSB1c2VkIHdoaWxlDQogICAgICogICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0
aGlzIHJlZmVycmFsDQogICAgICogPGJyPjxicj4NCiAgICAgKiBAcGFyYW0gc2VhcmNoUmVmZXJl
bmNlIHRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgYSBzZWFyY2ggcmVmZXJlbmNlDQogICAgICogPGJy
Pjxicj4NCiAgICAgKiBAcGFyYW0gY29ubmVjdGlvbkxpc3QgQW4gb3B0aW9uYWwgYXJyYXkgbGlz
dCB1c2VkIHRvIHN0b3JlDQogICAgICogICAgICAgIHRoZSBMREFQQ29ubmVjdGlvbiBvYmplY3Rz
IHVzZWQgaW4gZm9sbG93aW5nIHRoZSByZWZlcnJhbC4NCiAgICAgKg0KICAgICAqIEByZXR1cm4g
VGhlIGFycmF5IGxpc3QgdXNlZCB0byBzdG9yZSB0aGUgYWxsIExEQVBDb25uZWN0aW9uIG9iamVj
dHMNCiAgICAgKiAgICAgICAgdXNlZCBpbiBmb2xsb3dpbmcgdGhlIHJlZmVycmFsLiAgVGhlIGxp
c3Qgd2lsbCBiZSBlbXB0eQ0KICAgICAqICAgICAgICBpZiB0aGVyZSB3ZXJlIG5vbmUuDQogICAg
ICoNCiAgICAgKiAgQGV4Y2VwdGlvbiBMREFQRXhjZXB0aW9uIEEgZ2VuZXJhbCBleGNlcHRpb24g
d2hpY2ggaW5jbHVkZXMgYW4gZXJyb3INCiAgICAgKiAgbWVzc2FnZSBhbmQgYW4gTERBUCBlcnJv
ciBjb2RlLg0KICAgICAqLw0KICAgIC8qIHBhY2thZ2UgKi8NCiAgICBBcnJheUxpc3QgY2hhc2VS
ZWZlcnJhbCggTERBUE1lc3NhZ2VRdWV1ZSBxdWV1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTERBUENvbnN0cmFpbnRzIGNvbnMsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExEQVBNZXNzYWdlIG1zZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nW10gaW5pdGlhbFJlZmVycmFscywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGhvcENvdW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFu
IHNlYXJjaFJlZmVyZW5jZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlM
aXN0IGNvbm5lY3Rpb25MaXN0KQ0KICAgICAgICAgICAgICAgICAgICB0aHJvd3MgTERBUEV4Y2Vw
dGlvbg0KICAgIHsNCiAgICAgICAgQXJyYXlMaXN0IGNvbm5MaXN0ID0gY29ubmVjdGlvbkxpc3Q7
DQogICAgICAgIExEQVBDb25uZWN0aW9uIHJjb25uID0gbnVsbDsgLy8gbmV3IGNvbm4gZm9yIGZv
bGxvd2luZyByZWZlcnJhbA0KICAgICAgICBSZWZlcnJhbEluZm8gcmluZm8gPSBudWxsOyAgIC8v
IHJlZmVycmFsIGluZm8NCiAgICAgICAgTERBUE1lc3NhZ2Ugb3JpZ01zZzsNCg0KICAgICAgICBp
ZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLnJl
ZmVycmFscywgICBuYW1lICsNCiAgICAgICAgICAgICAgICAiQ2hlY2sgZm9yIHJlZmVycmFscywg
cmVmZXJlbmNlID0gIiArIHNlYXJjaFJlZmVyZW5jZSk7DQogICAgICAgIH0NCiAgICAgICAgLy8g
R2V0IGEgcGxhY2UgdG8gc3RvcmUgbmV3IGNvbm5lY3Rpb25zDQogICAgICAgIGlmKCBjb25uTGlz
dCA9PSBudWxsKSB7DQogICAgICAgICAgICBjb25uTGlzdCA9IG5ldyBBcnJheUxpc3QoIGNvbnMu
Z2V0SG9wTGltaXQoKSk7DQogICAgICAgIH0NCiAgICAgICAgLy8gRm9sbG93aW5nIHJlZmVycmFs
cyBvciBzZWFyY2ggcmVmZXJlbmNlDQogICAgICAgIFN0cmluZyBbXSByZWZzOyAgICAgICAgICAg
ICAvLyByZWZlcnJhbCBsaXN0DQogICAgICAgIGlmKCBpbml0aWFsUmVmZXJyYWxzICE9IG51bGwp
IHsNCiAgICAgICAgICAgIC8vIFNlYXJjaCBjb250aW51YXRpb24gcmVmZXJlbmNlIGZyb20gYSBz
ZWFyY2ggcmVxdWVzdA0KICAgICAgICAgICAgcmVmcyA9IGluaXRpYWxSZWZlcnJhbHM7DQogICAg
ICAgICAgICBvcmlnTXNnID0gbXNnLmdldFJlcXVlc3RpbmdNZXNzYWdlKCk7DQogICAgICAgIH0g
ZWxzZSB7IC8vIE5vdCBhIHNlYXJjaCByZXF1ZXN0DQogICAgICAgICAgICBMREFQUmVzcG9uc2Ug
cmVzcCA9IChMREFQUmVzcG9uc2UpcXVldWUuZ2V0UmVzcG9uc2UoKTsNCiAgICAgICAgICAgIGlm
KCByZXNwLmdldFJlc3VsdENvZGUoKSAhPSBMREFQRXhjZXB0aW9uLlJFRkVSUkFMKSB7DQogICAg
ICAgICAgICAgICAgLy8gTm90IHJlZmVycmFsIHJlc3VsdCx0aHJvdyBFeGNlcHRpb24gaWYgbm9u
emVybyByZXN1bHQNCiAgICAgICAgICAgICAgICByZXNwLmNoa1Jlc3VsdENvZGUoKTsNCiAgICAg
ICAgICAgICAgICByZXR1cm4gY29ubkxpc3Q7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAv
LyBXZSBoYXZlIGEgcmVmZXJyYWwgcmVzcG9uc2UNCiAgICAgICAgICAgIHJlZnMgPSByZXNwLmdl
dFJlZmVycmFscygpOw0KICAgICAgICAgICAgb3JpZ01zZyA9IHJlc3AuZ2V0UmVxdWVzdGluZ01l
c3NhZ2UoKTsNCiAgICAgICAgfQ0KICAgICAgICBMREFQVXJsIHJlZlVybDsgICAgICAgICAgICAg
Ly8gcmVmZXJyYWwgcmVwcmVzZW50ZWQgYXMgVVJMDQogICAgICAgIHRyeSB7DQogICAgICAgICAg
ICAvLyBpbmNyZW1lbnQgaG9wIGNvdW50LCBjaGVjayBtYXggaG9wcw0KICAgICAgICAgICAgaWYo
IGhvcENvdW50KysgPiBjb25zLmdldEhvcExpbWl0KCkpIHsNCiAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgTERBUExvY2FsRXhjZXB0aW9uKCJNYXggaG9wcyBleGNlZWRlZCIsDQogICAgICAgICAg
ICAgICAgICAgIExEQVBFeGNlcHRpb24uUkVGRVJSQUxfTElNSVRfRVhDRUVERUQpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgLy8gR2V0IGEgY29ubmVjdGlvbiB0byBmb2xsb3cgdGhlIHJl
ZmVycmFsDQogICAgICAgICAgICByaW5mbyA9IGdldFJlZmVycmFsQ29ubmVjdGlvbiggcmVmcywg
Y29ucyk7DQogICAgICAgICAgICByY29ubiA9IHJpbmZvLmdldFJlZmVycmFsQ29ubmVjdGlvbigp
Ow0KICAgICAgICAgICAgcmVmVXJsID0gcmluZm8uZ2V0UmVmZXJyYWxVcmwoKTsNCiAgICAgICAg
ICAgIGNvbm5MaXN0LmFkZCggcmNvbm4pOw0KDQogICAgICAgICAgICBpZiggRGVidWcuTERBUF9E
RUJVRykgew0KICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5yZWZlcnJhbHMsICAg
bmFtZSArDQogICAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNoUmVmZXJlbmNlPyJGb2xsb3dp
bmcgc2VhcmNoIHJlZmVyZW5jZSBVUkwgIiA6DQogICAgICAgICAgICAgICAgICAgICAgICAiRm9s
bG93aW5nIHJlZmVycmFsIFVSTCAiKSArIHJlZlVybC50b1N0cmluZygpKTsNCiAgICAgICAgICAg
IH0NCg0KICAgICAgICAgICAgLy8gcmVidWlsZCBtc2cgaW50byBuZXcgbXNnIGNoYW5naW5nIG1z
Z0lELGRuLHNjb3BlLGZpbHRlcg0KICAgICAgICAgICAgTERBUE1lc3NhZ2UgbmV3TXNnID0gcmVi
dWlsZFJlcXVlc3QoIG9yaWdNc2csDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVmVXJsLCBzZWFyY2hSZWZlcmVuY2UpOw0KDQogICAgICAgICAgICBp
ZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1
Zy5yZWZlcnJhbHMsICAgbmFtZSArDQogICAgICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgcmVm
ZXJyYWwgZm9yICIgKyByZWZVcmwudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgRGVidWcu
dHJhY2UoIERlYnVnLnJlZmVycmFscywgICBuYW1lICsNCiAgICAgICAgICAgICAgICAgICAgInJl
cXVlc3QgIiArIG5ld01zZy50b1N0cmluZygpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg
ICAgLy8gU2VuZCBuZXcgbWVzc2FnZSBvbiBuZXcgY29ubmVjdGlvbg0KICAgICAgICAgICAgdHJ5
IHsNCiAgICAgICAgICAgICAgICBNZXNzYWdlQWdlbnQgYWdlbnQ7DQogICAgICAgICAgICAgICAg
aWYoIHF1ZXVlIGluc3RhbmNlb2YgTERBUFJlc3BvbnNlUXVldWUpIHsNCiAgICAgICAgICAgICAg
ICAgICAgYWdlbnQ9cXVldWUuZ2V0TWVzc2FnZUFnZW50KCk7DQogICAgICAgICAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWdlbnQ9cXVldWUuZ2V0TWVzc2FnZUFnZW50KCk7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGFnZW50LnNlbmRNZXNzYWdlKCBy
Y29ubi5nZXRDb25uZWN0aW9uKCksIG5ld01zZywNCiAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZlNlYXJjaENvbnMuZ2V0VGltZUxpbWl0KCksIHF1ZXVlLCBudWxsKTsNCiAgICAgICAgICAgIH0g
Y2F0Y2goSW50ZXJUaHJlYWRFeGNlcHRpb24gZXgpIHsNCiAgICAgICAgICAgICAgICAvLyBFcnJv
ciBlbmRpbmcgcmVxdWVzdCB0byByZWZlcnJlZCBzZXJ2ZXINCiAgICAgICAgICAgICAgICBMREFQ
UmVmZXJyYWxFeGNlcHRpb24gcmV4ID0gbmV3IExEQVBSZWZlcnJhbEV4Y2VwdGlvbigNCiAgICAg
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbk1lc3NhZ2VzLlJFRkVSUkFMX1NFTkQsDQogICAgICAg
ICAgICAgICAgICAgICBMREFQRXhjZXB0aW9uLkNPTk5FQ1RfRVJST1IsIG51bGwsIGV4KTsNCiAg
ICAgICAgICAgICAgICByZXguc2V0UmVmZXJyYWxzKCBpbml0aWFsUmVmZXJyYWxzKTsNCiAgICAg
ICAgICAgICAgICBSZWZlcnJhbEluZm8gcmVmPXJjb25uLmdldENvbm5lY3Rpb24oKS5nZXRBY3Rp
dmVSZWZlcnJhbCgpOw0KICAgICAgICAgICAgICAgIHJleC5zZXRGYWlsZWRSZWZlcnJhbCggcmVm
LmdldFJlZmVycmFsVXJsKCkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgdGhyb3cgcmV4
Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiggaW5pdGlhbFJlZmVycmFscyA9PSBu
dWxsKSB7DQogICAgICAgICAgICAgICAgLy8gRm9yIG9wZXJhdGlvbiByZXN1bHRzLCB3aGVuIGFs
bCByZXNwb25zZXMgYXJlIGNvbXBsZXRlLA0KICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFjayB1
bndpbmRzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGFuZCByZXR1cm5zDQogICAgICAgICAgICAgICAg
Ly8gdG8gdGhlIGFwcGxpY2F0aW9uLg0KICAgICAgICAgICAgICAgIC8vIEFuIGV4Y2VwdGlvbiBp
cyB0aHJvd24gZm9yIGFuIGVycm9yDQogICAgICAgICAgICAgICAgY29ubkxpc3QgPSBjaGFzZVJl
ZmVycmFsKCBxdWV1ZSwgY29ucywgbnVsbCwgbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBob3BDb3VudCwgZmFsc2UsIGNvbm5MaXN0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICAgICAgLy8gRm9yIHNlYXJjaCwganVzdCByZXR1cm4gdG8gTERBUFNlYXJjaFJl
c3VsdHMgb2JqZWN0DQogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5MaXN0Ow0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCiAgICAgICAgICAgIGlmKCBE
ZWJ1Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICAgICAgRGVidWcudHJhY2UoIERlYnVnLnJl
ZmVycmFscywgbmFtZSArDQogICAgICAgICAgICAgICAgICAgICAgICAiVGhyb3cgZXhjZXB0aW9u
ICIgKyBleC50b1N0cmluZygpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYoIGV4
IGluc3RhbmNlb2YgTERBUFJlZmVycmFsRXhjZXB0aW9uKSB7DQogICAgICAgICAgICAgICAgdGhy
b3cgKExEQVBSZWZlcnJhbEV4Y2VwdGlvbilleDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAg
ICAgICAgICAgICAgICAvLyBTZXQgcmVmZXJyYWwgbGlzdCBhbmQgZmFpbGVkIHJlZmVycmFsDQog
ICAgICAgICAgICAgICAgTERBUFJlZmVycmFsRXhjZXB0aW9uIHJleCA9IG5ldyBMREFQUmVmZXJy
YWxFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbk1lc3NhZ2VzLlJFRkVS
UkFMX0VSUk9SLCBleCk7DQogICAgICAgICAgICAgICAgcmV4LnNldFJlZmVycmFscyggcmVmcyk7
DQogICAgICAgICAgICAgICAgaWYoIHJpbmZvICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAg
ICAgcmV4LnNldEZhaWxlZFJlZmVycmFsKCByaW5mby5nZXRSZWZlcnJhbFVybCgpLnRvU3RyaW5n
KCkpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHJleC5z
ZXRGYWlsZWRSZWZlcnJhbCggcmVmc1tyZWZzLmxlbmd0aCAtIDFdKTsNCiAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgICAgdGhyb3cgcmV4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9
DQogICAgICAgIHJldHVybiBjb25uTGlzdDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBCdWls
ZHMgYSBuZXcgcmVxdWVzdCByZXBsYWNpbmcgZG4sIHNjb3BlLCBhbmQgZmlsdGVyIHdoZXJlIGFw
cHJvcHJhdGUNCiAgICAgKg0KICAgICAqIEBwYXJhbSBtc2cgdGhlIG9yaWdpbmFsIExEQVBNZXNz
YWdlIHRvIGJ1aWxkIHRoZSBuZXcgcmVxdWVzdCBmcm9tDQogICAgICogPGJyPjxicj4NCiAgICAg
KiBAcGFyYW0gdXJsIHRoZSByZWZlcnJhbCB1cmwNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYSBu
ZXcgTERBUE1lc3NhZ2Ugd2l0aCBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiByZXBsYWNlZA0KICAg
ICAqDQogICAgICogIEBleGNlcHRpb24gTERBUEV4Y2VwdGlvbiBBIGdlbmVyYWwgZXhjZXB0aW9u
IHdoaWNoIGluY2x1ZGVzIGFuIGVycm9yDQogICAgICogIG1lc3NhZ2UgYW5kIGFuIExEQVAgZXJy
b3IgY29kZS4NCiAgICAgKi8NCiAgICBwcml2YXRlDQogICAgTERBUE1lc3NhZ2UgcmVidWlsZFJl
cXVlc3QoIExEQVBNZXNzYWdlIG1zZywgTERBUFVybCB1cmwsIGJvb2xlYW4gcmVmZXJlbmNlKQ0K
ICAgICAgICAgICAgdGhyb3dzIExEQVBFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGlmKCBEZWJ1
Zy5MREFQX0RFQlVHKSB7DQogICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcucmVmZXJyYWxz
LCBuYW1lICsNCiAgICAgICAgICAgICAgICAicmVidWlsZFJlcXVlc3Q6IG9yaWdpbmFsIHJlcXVl
c3QgPSAiICsNCiAgICAgICAgICAgICAgICAibWVzc2FnZSgiICsgbXNnLmdldE1lc3NhZ2VJRCgp
ICsgIiksIHJlcXVlc3QgdHlwZSAiICsNCiAgICAgICAgICAgICAgICBtc2cuZ2V0VHlwZSgpKTsN
CiAgICAgICAgfQ0KDQogICAgICAgIFN0cmluZyBkbiA9IHVybC5nZXRETigpOyAvLyBuZXcgYmFz
ZQ0KICAgICAgICBTdHJpbmcgZmlsdGVyID0gbnVsbDsNCg0KICAgICAgICBzd2l0Y2goIG1zZy5n
ZXRUeXBlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgTERBUE1lc3NhZ2UuU0VBUkNIX1JFUVVFU1Q6
DQogICAgICAgICAgICAgICAgaWYoIHJlZmVyZW5jZSkgew0KICAgICAgICAgICAgICAgICAgICBm
aWx0ZXIgPSB1cmwuZ2V0RmlsdGVyKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICAgICAgLy8gV2UgYXJlIGFsbG93ZWQgdG8gZ2V0IGEgcmVmZXJy
YWwgZm9yIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgICAgIGNhc2UgTERBUE1lc3NhZ2UuQUREX1JF
UVVFU1Q6DQogICAgICAgICAgICBjYXNlIExEQVBNZXNzYWdlLkJJTkRfUkVRVUVTVDoNCiAgICAg
ICAgICAgIGNhc2UgTERBUE1lc3NhZ2UuQ09NUEFSRV9SRVFVRVNUOg0KICAgICAgICAgICAgY2Fz
ZSBMREFQTWVzc2FnZS5ERUxfUkVRVUVTVDoNCiAgICAgICAgICAgIGNhc2UgTERBUE1lc3NhZ2Uu
RVhURU5ERURfUkVRVUVTVDoNCiAgICAgICAgICAgIGNhc2UgTERBUE1lc3NhZ2UuTU9ESUZZX1JE
Tl9SRVFVRVNUOg0KICAgICAgICAgICAgY2FzZSBMREFQTWVzc2FnZS5NT0RJRllfUkVRVUVTVDoN
CiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcmV0
dXJuIG5vIHJlc3BvbnNlDQogICAgICAgICAgICBjYXNlIExEQVBNZXNzYWdlLkFCQU5ET05fUkVR
VUVTVDoNCiAgICAgICAgICAgIGNhc2UgTERBUE1lc3NhZ2UuVU5CSU5EX1JFUVVFU1Q6DQogICAg
ICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBMREFQTG9jYWxFeGNl
cHRpb24oDQogICAgICAgICAgICAgICAgICAgICAvLyAiUmVmZXJyYWwgZG9lc24ndCBtYWtlIHNl
bnNlIGZvciBjb21tYW5kIg0KICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25NZXNzYWdlcy5J
TVBST1BFUl9SRUZFUlJBTCwNCiAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlZ2VyKCBtc2cuZ2V0VHlwZSgpKQ0KICAgICAg
ICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICBMREFQRXhjZXB0aW9uLkxPQ0FM
X0VSUk9SKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBtc2cuY2xvbmUoIGRuLCBmaWx0
ZXIsIHJlZmVyZW5jZSk7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBSZWxlYXNlIGNvbm5lY3Rp
b25zIGFjcXVpcmVkIGJ5IGZvbGxvd2luZyByZWZlcnJhbHMNCiAgICAgKg0KICAgICAqIEBwYXJh
bSBsaXN0IHRoZSBsaXN0IG9mIHRoZSBjb25uZWN0aW9ucw0KICAgICAqLw0KICAgIC8qIHBhY2th
Z2UgKi8NCiAgIHZvaWQgcmVsZWFzZVJlZmVycmFsQ29ubmVjdGlvbnMoIEFycmF5TGlzdCBsaXN0
KQ0KICAgew0KICAgICAgICBpZiggbGlzdCA9PSBudWxsKSB7DQogICAgICAgICAgICByZXR1cm47
DQogICAgICAgIH0NCiAgICAgICAgaWYoIERlYnVnLkxEQVBfREVCVUcpIHsNCiAgICAgICAgICAg
IERlYnVnLnRyYWNlKCBEZWJ1Zy5yZWZlcnJhbHMsIG5hbWUgKw0KICAgICAgICAgICAgICAgICJS
ZWxlYXNlIHJlZmVyYWwgY29ubmVjdGlvbnMiKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBSZWxl
YXNlIHJlZmVycmFsIGNvbm5lY3Rpb25zDQogICAgICAgIGZvciggaW50IGkgPSBsaXN0LnNpemUo
KS0xOyBpID49IDA7IGktLSkgew0KICAgICAgICAgICAgTERBUENvbm5lY3Rpb24gcmNvbm4gPSBu
dWxsOw0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByY29ubiA9IChMREFQQ29u
bmVjdGlvbilsaXN0LnJlbW92ZShpKTsNCiAgICAgICAgICAgICAgICBpZiggRGVidWcuTERBUF9E
RUJVRykgew0KICAgICAgICAgICAgICAgICAgICBEZWJ1Zy50cmFjZSggRGVidWcucmVmZXJyYWxz
LCAiXHQiICsgbmFtZSArDQogICAgICAgICAgICAgICAgICAgICAgICAiRGlzY29ubmVjdGluZyAi
ICsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJjb25uLmdldENvbm5lY3Rpb25OYW1lKCkpOw0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByY29ubi5kaXNjb25uZWN0KCk7DQog
ICAgICAgICAgICB9IGNhdGNoKCBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXgpIHsN
CiAgICAgICAgICAgICAgICBpZiggRGVidWcuTERBUF9ERUJVRykgew0KICAgICAgICAgICAgICAg
ICAgICBEZWJ1Zy50cmFjZSggRGVidWcucmVmZXJyYWxzLCAiXHQiICsgbmFtZSArDQogICAgICAg
ICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGdldCBjb25uIGF0IGluZGV4ICIgKyBpKTsNCiAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9
IGNhdGNoKCBMREFQRXhjZXB0aW9uIGxleCkgew0KICAgICAgICAgICAgICAgIGlmKCBEZWJ1Zy5M
REFQX0RFQlVHKSB7DQogICAgICAgICAgICAgICAgICAgIERlYnVnLnRyYWNlKCBEZWJ1Zy5yZWZl
cnJhbHMsICJcdCIgKyBuYW1lICsNCiAgICAgICAgICAgICAgICAgICAgICAgICJEaXNjb25uZWN0
IGZhaWxlZCBmb3IgIiArIHJjb25uLmdldENvbm5lY3Rpb25OYW1lKCkpOw0KICAgICAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAg
Ly8gU2NoZW1hIFJlbGF0ZWQgbWV0aG9kcw0KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQogICAg
LyoqDQogICAgICogUmV0cmlldmVzIHRoZSBzY2hlbWEgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGlj
dWxhciBzY2hlbWEgRE4gaW4gdGhlDQogICAgICogZGlyZWN0b3J5IHNlcnZlci4NCiAgICAgKiA8
cD5UaGUgc2NoZW1hIEROIGZvciBhIHBhcnRpY3VsYXIgZW50cnkgaXMgb2J0YWluZWQgYnkgY2Fs
bGluZyB0aGUNCiAgICAgKiBnZXRTY2hlbWFETiBtZXRob2Qgb2YgTERBUENvbm5lY3Rpb248L3A+
DQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgc2NoZW1hRE4gVGhlIHNjaGVtYSBETiB1c2VkIHRv
IGZldGNoIHRoZSBzY2hlbWEuDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgIEFuIExEQVBTY2hl
bWEgZW50cnkgY29udGFpbmluZyBzY2hlbWEgYXR0cmlidXRlcy4gIElmIHRoZQ0KICAgICAqIGVu
dHJ5IGNvbnRhaW5zIG5vIHNjaGVtYSBhdHRyaWJ1dGVzIHRoZW4gdGhlIHJldHVybmVkIExEQVBT
Y2hlbWEgb2JqZWN0DQogICAgICogd2lsbCBiZSBlbXB0eS4NCiAgICAgKg0KICAgICAqIEBleGNl
cHRpb24gTERBUEV4Y2VwdGlvbiAgICAgVGhpcyBleGNlcHRpb24gb2NjdXJzIGlmIHRoZSBzY2hl
bWEgZW50cnkNCiAgICAgKiAgICAgICAgICBjYW5ub3QgYmUgcmV0cmlldmVkIHdpdGggdGhpcyBj
b25uZWN0aW9uLg0KICAgICAqIEBzZWUgI2dldFNjaGVtYUROKCkNCiAgICAgKiBAc2VlICNnZXRT
Y2hlbWFETihTdHJpbmcpDQogICAgICovDQogICAgcHVibGljIExEQVBTY2hlbWEgZmV0Y2hTY2hl
bWEgKCBTdHJpbmcgc2NoZW1hRE4gKSB0aHJvd3MgTERBUEV4Y2VwdGlvbiB7DQogICAgICAgIC8q
IFJlYWQgdGhlIHNjaGVtYSBkZWZpbml0aW9ucy4gIElmIG5vIGVudHJ5IGlzIGZvdW5kIGFuDQog
ICAgICAgICAqIEV4Y2VwdGlvbiBpcyB0aHJvd24gKi8NCiAgICAgICAgTERBUEVudHJ5IGVudCA9
IHJlYWQoc2NoZW1hRE4sIExEQVBTY2hlbWEuc2NoZW1hVHlwZU5hbWVzKTsNCiAgICAgICAgcmV0
dXJuIG5ldyBMREFQU2NoZW1hKGVudCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0cmll
dmVzIHRoZSBEaXN0aWd1aXNoZWQgTmFtZSAoRE4pIGZvciB0aGUgc2NoZW1hIGFkdmVydGlzZWQg
aW4gdGhlDQogICAgICogcm9vdCBEU0Ugb2YgdGhlIERpcmVjdG9yeSBTZXJ2ZXIuDQogICAgICoN
CiAgICAgKiA8cD5UaGUgRE4gY2FuIGJlIHVzZWQgd2l0aCB0aGUgbWV0aG9kcyBmZXRjaFNjaGVt
YSBhbmQgbW9kaWZ5IHRvIHJldHJlaXZlDQogICAgICogYW5kIGV4dGVuZCBzY2hlbWEgZGVmaW5p
dGlvbnMuICBUaGUgc2NoZW1hIGVudHJ5IGlzIGxvY2F0ZWQgYnkgcmVhZGluZw0KICAgICAqIHN1
YnNjaGVtYVN1YmVudHJ5IGF0dHJpYnV0ZSBvZiB0aGUgcm9vdCBEU0UuICBUaGlzIGlzIGVxdWl2
YWxlbnQgdG8NCiAgICAgKiBjYWxsaW5nIHtAbGluayAjZ2V0U2NoZW1hRE4oU3RyaW5nKSB9IHdp
dGggdGhlIEROIHBhcmFtZXRlciBhcyBhbiBlbXB0eQ0KICAgICAqIHN0cmluZzogPGNvZGU+Z2V0
U2NoZW1hRE4oIiIpPC9jb2RlPi4NCiAgICAgKiA8L3A+DQogICAgICoNCiAgICAgKiAgQHJldHVy
biAgICAgRGlzdGluZ3Vpc2hlZCBOYW1lIG9mIGEgc2NoZW1hIGVudHJ5IGluIGVmZmVjdCBmb3Ig
dGhlDQogICAgICogICAgICAgICAgICAgIERpcmVjdG9yeS4NCiAgICAgKiAgQGV4Y2VwdGlvbiBM
REFQRXhjZXB0aW9uICAgICBUaGlzIGV4Y2VwdGlvbiBvY2N1cnMgaWYgdGhlIHNjaGVtYSBETg0K
ICAgICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIG9yIGlmIHRoZSBzdWJzY2hlbWFTdWJlbnRyeSBh
dHRyaWJ1dGUgYXNzb2NpYXRlZA0KICAgICAqIHdpdGggdGhlIHJvb3QgRFNFIGNvbnRhaW5zIG11
bHRpcGxlIHZhbHVlcy4NCiAgICAgKg0KICAgICAqICBAc2VlICNmZXRjaFNjaGVtYQ0KICAgICAq
ICBAc2VlICNtb2RpZnkNCiAgICAgKi8NCiAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYUROKCkg
dGhyb3dzIExEQVBFeGNlcHRpb24gew0KICAgICAgICByZXR1cm4gZ2V0U2NoZW1hRE4oIiIpOw0K
ICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHJpZXZlcyB0aGUgRGlzdGlndWlzaGVkIE5hbWUg
KEROKSBvZiB0aGUgc2NoZW1hIGFzc29jaWF0ZWQgd2l0aCBhDQogICAgICogZW50cnkgaW4gdGhl
IERpcmVjdG9yeS4NCiAgICAgKg0KICAgICAqIDxwPlRoZSBETiBjYW4gYmUgdXNlZCB3aXRoIHRo
ZSBtZXRob2RzIGZldGNoU2NoZW1hIGFuZCBtb2RpZnkgdG8gcmV0cmVpdmUNCiAgICAgKiBhbmQg
ZXh0ZW5kIHNjaGVtYSBkZWZpbml0aW9ucy4gIFJlYWRzIHRoZSBzdWJzY2hlbWFTdWJlbnRyeSBv
ZiB0aGUgZW50cnkNCiAgICAgKiBzcGVjaWZpZWQuPHA+DQogICAgICoNCiAgICAgKiBAcGFyYW0g
ZG4gICAgIERpc3Rpbmd1aXNoZWQgTmFtZSBvZiBhbnkgZW50cnkuICBUaGUgc3Vic2NoZW1hU3Vi
ZW50cnkNCiAgICAgKiAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBpcyBxdWVyaWVkIGZyb20gdGhp
cyBlbnRyeS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgICBEaXN0aW5ndWlzaGVkIE5hbWUg
b2YgYSBzY2hlbWEgZW50cnkgaW4gZWZmZWN0IGZvciB0aGUgZW50cnkNCiAgICAgKiAgICAgICAg
ICAgICAgIGlkZW50aWZpZWQgYnkgPGNvZGU+ZG48L2NvZGU+Lg0KICAgICAqDQogICAgICogQGV4
Y2VwdGlvbiBMREFQRXhjZXB0aW9uICAgICBUaGlzIGV4Y2VwdGlvbiBvY2N1cnMgaWYgYSBudWxs
IG9yIGVtcHR5DQogICAgICogdmFsdWUgaXMgcGFzc2VkIGFzIGRuLCBpZiB0aGUgc3Vic2NoZW1h
c3ViZW50cnkgYXR0cmlidXRlIGNhbm5vdA0KICAgICAqIGJlIHJldHJpZXZlZCwgb3IgdGhlIHN1
YnNjaGVtYXN1YmVudHJ5IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcy4NCiAgICAgKg0KICAgICAq
ICBAc2VlICNmZXRjaFNjaGVtYQ0KICAgICAqICBAc2VlICNtb2RpZnkNCiAgICAgKi8NCiAgICBw
dWJsaWMgU3RyaW5nIGdldFNjaGVtYUROKCBTdHJpbmcgZG4gKQ0KICAgICAgICB0aHJvd3MgTERB
UEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgU3RyaW5nIGF0dHJTdWJTY2hlbWFbXSA9IHsgInN1
YnNjaGVtYVN1YmVudHJ5IiB9Ow0KDQogICAgICAgIC8qIFJlYWQgdGhlIGVudHJpZXMgc3Vic2No
ZW1hU3ViZW50cnkgYXR0cmlidXRlLiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmDQogICAgICAgICAq
IG5vIGVudHJpZXMgYXJlIHJldHVybmVkLiAqLw0KICAgICAgICBMREFQRW50cnkgZW50ID0gdGhp
cy5yZWFkKCBkbiwgYXR0clN1YlNjaGVtYSApOw0KDQogICAgICAgIExEQVBBdHRyaWJ1dGUgYXR0
ciA9IGVudC5nZXRBdHRyaWJ1dGUoIGF0dHJTdWJTY2hlbWFbMF0gKTsNCiAgICAgICAgU3RyaW5n
IHZhbHVlc1tdID0gYXR0ci5nZXRTdHJpbmdWYWx1ZUFycmF5KCk7DQogICAgICAgIGlmKCB2YWx1
ZXMgPT0gbnVsbCB8fCB2YWx1ZXMubGVuZ3RoIDwgMSApIHsNCiAgICAgICAgICAgIHRocm93IG5l
dyBMREFQTG9jYWxFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgRXhjZXB0aW9uTWVzc2FnZXMu
Tk9fU0NIRU1BLA0KICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IGRuIH0sDQogICAgICAg
ICAgICAgICAgTERBUEV4Y2VwdGlvbi5OT19SRVNVTFRTX1JFVFVSTkVEKTsNCiAgICAgICAgfQ0K
ICAgICAgICBlbHNlIGlmKCB2YWx1ZXMubGVuZ3RoID4gMSApIHsNCiAgICAgICAgICAgIHRocm93
IG5ldyBMREFQTG9jYWxFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgRXhjZXB0aW9uTWVzc2Fn
ZXMuTVVMVElQTEVfU0NIRU1BLA0KICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IGRuIH0s
DQogICAgICAgICAgICAgICAgTERBUEV4Y2VwdGlvbi5DT05TVFJBSU5UX1ZJT0xBVElPTik7DQog
ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTsNCiAgIH0NCiAgIA0KfQ0K

------_=_NextPart_001_01C9711D.AD2F41AD--