[COMMIT] Improve the algorithmic complexity of #'concat, move #'concatenate to C.

Aidan Kehoe <[email protected]> Thu, 30 Jun 2016 00:44:01 +0100
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
CkFQUFJPVkUgQ09NTUlUCgpOT1RFOiBUaGlzIHBhdGNoIGhhcyBiZWVuIGNvbW1pdHRlZC4KCiMg
SEcgY2hhbmdlc2V0IHBhdGNoCiMgVXNlciBBaWRhbiBLZWhvZSA8a2Vob2VhQHBhcmhhc2FyZC5u
ZXQ+CiMgRGF0ZSAxNDY3MjQzNjk5IC0zNjAwCiMgICAgICBUaHUgSnVuIDMwIDAwOjQxOjM5IDIw
MTYgKzAxMDAKIyBOb2RlIElEIDE3YTNjNmI1MmRmZGM5ZWQ1M2JmYTMxNDNkMGViNTY1Y2RmYzcz
NzcKIyBQYXJlbnQgIGNiZTEwNzE0MWFmZTVhN2UwOGFmYmJjYjZjZDU0NTc5M2UzNmFjMDYKSW1w
cm92ZSB0aGUgYWxnb3JpdGhtaWMgY29tcGxleGl0eSBvZiAjJ2NvbmNhdCwgbW92ZSAjJ2NvbmNh
dGVuYXRlIHRvIEMuCgpzcmMvQ2hhbmdlTG9nIGFkZGl0aW9uOgoKMjAxNi0wNi0zMCAgQWlkYW4g
S2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KCglNb3ZlICMnY29uY2F0ZW5hdGUgdG8gQywg
aW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24gYW5kCglhbGdvcml0aG1pYyBjb21wbGV4aXR5IG9m
ICMnY29uY2F0LgoJKiBieXRlY29kZS5jOgoJKiBldmVudC1tc3cuYyAoZGRlX2V2YWxfc3RyaW5n
KToKCSogZ2MuYyAoc2hvd19nY19jdXJzb3JfYW5kX21lc3NhZ2UpOgoJKiBnYy5jIChyZW1vdmVf
Z2NfY3Vyc29yX2FuZF9tZXNzYWdlKToKCSogZ3V0dGVyLmMgKGNvbnN0cnVjdF93aW5kb3dfZ3V0
dGVyX3NwZWMpOgoJKiB0bHMuYyAoZ251dGxzX3BrMTFfcGFzc3dvcmQpOgoJKiB0bHMuYyAob3Bl
bnNzbF9lcnJvcl9zdHJpbmcpOgoJQ2FsbCBjb25jYXRlbmF0ZSgpLCBub3QgRmNvbmNhdCgpLCBp
biB0aGVzZSBmaWxlcy4KCgkqIGZucy5jIChjb25jYXQyLCBjb25jYXQzLCB2Y29uY2F0MiwgdmNv
bmNhdDMsIEZhcHBlbmQsIEZjb25jYXQpOgoJTW92ZSB0aGVzZSB0byBzZXF1ZW5jZS5jCgkqIGZu
cy5jIChjb3B5X2xpc3QpOgoJQ2FsbCBjb25jYXRlbmF0ZSgpIGhlcmUsIG5vdCBjb25jYXQoKS4K
CSogZm5zLmMgKEFsc28gc2VlKTogUmVtb3ZlZC4KCSogZm5zLmMgKEZjb3B5X3NlcXVlbmNlKToK
CSogZm5zLmMgKEZjb3B5X2FsaXN0KToKCSogZm5zLmMgKGFyZ3VtZW50cyk6IFJlbW92ZWQuCgkq
IGZucy5jIChuY29uYzIpOgoJYnl0ZWNvZGVfbmNvbmMyKCkgbm93IGRvZXMgaXRzIG93biBHQ2lu
Zywgbm8gbmVlZCBmb3IgdXMgdG8uCgkqIGZucy5jIChieXRlY29kZV9uY29uYzIpOgoJR0NQUk8g
aW4gdGhpcyBmdW5jdGlvbiwgZG9jdW1lbnQgd2h5LgoJKiBmbnMuYyAoRm5jb25jKToKCURvbid0
IEdDUFJPIGluIHRoaXMgZnVuY3Rpb24sIGl0IGlzIG5vdCBjYWxsZWQgZnJvbSBDLCBhbmQgYW55
CglMaXNwIGNhbGxzIHdpbGwgaGF2ZSB0aGVpciBhcmd1bWVudHMgR0NQUk9kIGF1dG9tYXRpY2Fs
bHkuCgkqIGZucy5jIChzeW1zX29mX2Zucyk6CglNb3ZlIEZhcHBlbmQgdG8gc2VxdWVuY2UuYzsg
bW92ZSAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0Cgl0byBzdWJyLmVsLgoJKiBnZW5l
cmFsLXNsb3RzLmg6CglNb3ZlICdiaXQtdmVjdG9yLCAndmVjdG9yIGhlcmUuCgkqIGxpc3AuaDoK
CURlY2xhcmUgY29uY2F0ZW5hdGUoKSwgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgIydjb25jYXQuCgkq
IHNlcXVlbmNlLmM6CgkqIHNlcXVlbmNlLmMgKEZtYXBjb25jYXQpOgoJQ2FsbCBjb25jYXRlbmF0
ZSgpIHJhdGhlciB0aGFuIEZjb25jYXQoKS4KCSogc2VxdWVuY2UuYyAoRm1hcGNhbik6CglHQ1BS
TyB0aGUgYXJndW1lbnRzIHRvIEZuY29uYygpIG91cnNlbHZlcyBoZXJlLgoJKiBzZXF1ZW5jZS5j
IChzdHJ1Y3QgbWVyZ2Vfc3RyaW5nX2V4dGVudHNfc3RydWN0KToKCU1vdmUgdGhpcyBoZXJlIGZy
b20gZm5zLmMoKS4KCSogc2VxdWVuY2UuYyAoY29uY2F0ZW5hdGUpOgoJUmUtaW1wbGVtZW50IGNv
bmNhdCgpLCBwcmV2aW91c2x5IGluIGZucy5jLCBpbiB0aGlzIGZpbGU7IHVzZSBhCgltdWNoIGNo
ZWFwZXIgYWxnb3JpdGhtIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgYWxsLXN0cmluZyBhcmd1bWVu
dHMgYW5kCglhIHN0cmluZyByZXN1bHQsIHVzZSBhIGNoZWFwZXIgYWxnb3JpdGhtIGZvciBhcHBl
bmQoKSwgb25seQoJdHJhdmVyc2luZyBsaXN0cyBhbmQgc3RyaW5ncyBvbmNlLCBjYWxsICMnY29l
cmNlIGFzIG5lY2Vzc2FyeS4KCSogc2VxdWVuY2UuYyAoRmNvbmNhdGVuYXRlKToKCU1ha2UgY29u
Y2F0ZW5hdGUoKSBhdmFpbGFibGUgdG8gTGlzcC4KCSogc2VxdWVuY2UuYyAoY29uY2F0MiwgY29u
Y2F0MywgdmNvbmNhdDIsIHZjb25jYXQzKTogTW92ZWQgaGVyZQoJZnJvbSBmbnMuYy4KCSogc2Vx
dWVuY2UuYyAoRmFwcGVuZCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYywgaW1wbGVtZW50ZWQgaW4K
CXRlcm1zIG9mIGNvbmNhdGVuYXRlKCkuCgkqIHNlcXVlbmNlLmMgKHN5bXNfb2Zfc2VxdWVuY2Up
OgoJTWFrZSBzb21lIHN1YnJzIGF2YWlsYWJsZSBoZXJlLCBtb3ZlIHNvbWUgc3ltYm9scyB0bwoJ
Z2VuZXJhbC1zbG90cy5oLgoKbGlzcC9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE2LTA2LTMwICBB
aWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgoKCSogY2wtZXh0cmEuZWwgKGNvbmNh
dGVuYXRlKTogSW1wbGVtZW50ICMnY29uY2F0ZW5hdGUgaW4KCXNlcXVlbmNlLmMsIGltcGxlbWVu
dCAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0IGluIHRlcm1zIG9mCglpdCByYXRoZXIg
dGhhbiB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KCgkqIGZpbmQtcGF0aHMuZWwgKHBhdGhzLW5vLWxp
c3AtZGlyZWN0b3J5LXJlZ2V4cCk6CgkqIGZpbmQtcGF0aHMuZWwgKHBhdGhzLWNvbnN0cnVjdC1w
YXRoKToKCSogZmluZC1wYXRocy5lbCAocGF0aHMtY29uc3RydWN0LWVtYWNzLWRpcmVjdG9yeSk6
CgkqIGZpbmQtcGF0aHMuZWwgKGNvbnN0cnVjdC1lbWFjcy12ZXJzaW9uLW5hbWUpOgoJKiBmaW5k
LXBhdGhzLmVsIChwYXRocy1kaXJlY3Rvcmllcy13aGljaC1leGlzdCk6CgkqIGxvYWR1cC5lbCAo
cmVhbGx5LWVhcmx5LWVycm9yLWhhbmRsZXIpOgoJKiBtYWtlLWRvY2ZpbGUuZWwgKHByb2Nlc3Mt
YXJncyk6CgkqIHBhY2thZ2VzLmVsIChwYWNrYWdlcy1hZGQtc3VmZml4KToKCSogcGFja2FnZXMu
ZWwgKHBhY2thZ2VzLWxpc3QtYXV0b2xvYWRzLXBhdGgpOgoJKiB1cGRhdGUtZWxjLmVsIChwcmVs
b2FkZWQtZmlsZS1saXN0KToKCSogdXBkYXRlLWVsYy5lbCAoZG8tYXV0b2xvYWQtY29tbWFuZHMp
OgoJVXNlICMnY29uY2F0ZW5hdGUgcmF0aGVyIHRoYW4gIydjb25jYXQgaW4gdGhlc2UgZmlsZXMg
cnVuIGF0IGJ1aWxkCgl0aW1lLCB3aGVyZSAjJ2NvbmNhdCdzIG5ldyBpbXBsZW1lbnRhdGlvbiBm
cm9tIHN1YnIuZWwgaXMgbm90CglhdmFpbGFibGUuCgkqIHN1YnIuZWw6CgkqIHN1YnIuZWwgKGNv
bmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4KCSogc3Vici5lbCAodmNvbmNhdCk6IE1vdmVk
IGhlcmUgZnJvbSBmbnMuYy4KCSogc3Vici5lbCAoYnZjb25jYXQpOiBNb3ZlZCBoZXJlIGZyb20g
Zm5zLmMuCglJbXBsZW1lbnQgYWxsIHRocmVlIGluIHRlcm1zIG9mICMnY29uY2F0ZW5hdGUuIE1h
aW50YWluIHRoZQoJIydjb25jYXQgYnl0ZWNvZGUgZm9yIHRoZSBtb21lbnQuCgpkaWZmIC1yIGNi
ZTEwNzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgbGlzcC9DaGFuZ2VMb2cKLS0tIGEvbGlzcC9DaGFu
Z2VMb2cJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL2xpc3AvQ2hhbmdlTG9n
CVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMSwzICsxLDMwIEBACisyMDE2LTA2
LTMwICBBaWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgorCisJKiBjbC1leHRyYS5l
bCAoY29uY2F0ZW5hdGUpOiBJbXBsZW1lbnQgIydjb25jYXRlbmF0ZSBpbgorCXNlcXVlbmNlLmMs
IGltcGxlbWVudCAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0IGluIHRlcm1zIG9mCisJ
aXQgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSBhcm91bmQuCisKKwkqIGZpbmQtcGF0aHMuZWwg
KHBhdGhzLW5vLWxpc3AtZGlyZWN0b3J5LXJlZ2V4cCk6CisJKiBmaW5kLXBhdGhzLmVsIChwYXRo
cy1jb25zdHJ1Y3QtcGF0aCk6CisJKiBmaW5kLXBhdGhzLmVsIChwYXRocy1jb25zdHJ1Y3QtZW1h
Y3MtZGlyZWN0b3J5KToKKwkqIGZpbmQtcGF0aHMuZWwgKGNvbnN0cnVjdC1lbWFjcy12ZXJzaW9u
LW5hbWUpOgorCSogZmluZC1wYXRocy5lbCAocGF0aHMtZGlyZWN0b3JpZXMtd2hpY2gtZXhpc3Qp
OgorCSogbG9hZHVwLmVsIChyZWFsbHktZWFybHktZXJyb3ItaGFuZGxlcik6CisJKiBtYWtlLWRv
Y2ZpbGUuZWwgKHByb2Nlc3MtYXJncyk6CisJKiBwYWNrYWdlcy5lbCAocGFja2FnZXMtYWRkLXN1
ZmZpeCk6CisJKiBwYWNrYWdlcy5lbCAocGFja2FnZXMtbGlzdC1hdXRvbG9hZHMtcGF0aCk6CisJ
KiB1cGRhdGUtZWxjLmVsIChwcmVsb2FkZWQtZmlsZS1saXN0KToKKwkqIHVwZGF0ZS1lbGMuZWwg
KGRvLWF1dG9sb2FkLWNvbW1hbmRzKToKKwlVc2UgIydjb25jYXRlbmF0ZSByYXRoZXIgdGhhbiAj
J2NvbmNhdCBpbiB0aGVzZSBmaWxlcyBydW4gYXQgYnVpbGQKKwl0aW1lLCB3aGVyZSAjJ2NvbmNh
dCdzIG5ldyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN1YnIuZWwgaXMgbm90CisJYXZhaWxhYmxlLgor
CSogc3Vici5lbDoKKwkqIHN1YnIuZWwgKGNvbmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4K
KwkqIHN1YnIuZWwgKHZjb25jYXQpOiBNb3ZlZCBoZXJlIGZyb20gZm5zLmMuCisJKiBzdWJyLmVs
IChidmNvbmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4KKwlJbXBsZW1lbnQgYWxsIHRocmVl
IGluIHRlcm1zIG9mICMnY29uY2F0ZW5hdGUuIE1haW50YWluIHRoZQorCSMnY29uY2F0IGJ5dGVj
b2RlIGZvciB0aGUgbW9tZW50LgorCiAyMDE2LTAxLTA0ICBTdGVwaGVuIEouIFR1cm5idWxsICA8
c3RlcGhlbkB4ZW1hY3Mub3JnPgogCiAJKiBjbC1zZXEuZWwgKGRlbGV0ZS1pZik6IEZpeCB0eXBv
IGluIGRvY3N0cmluZy4KZGlmZiAtciBjYmUxMDcxNDFhZmUgLXIgMTdhM2M2YjUyZGZkIGxpc3Av
Y2wtZXh0cmEuZWwKLS0tIGEvbGlzcC9jbC1leHRyYS5lbAlUaHUgSnVuIDMwIDAwOjA2OjM4IDIw
MTYgKzAxMDAKKysrIGIvbGlzcC9jbC1leHRyYS5lbAlUaHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYg
KzAxMDAKQEAgLTM2NCwxNyArMzY0LDcgQEAKIAogOzs7IFNlcXVlbmNlIGZ1bmN0aW9ucy4KIAot
OzsgWEVtYWNzOyAjJ3N1YnNlcSBpcyBpbiBDLgotCi0oZGVmdW4gY29uY2F0ZW5hdGUgKHR5cGUg
JnJlc3Qgc2VxcykKLSAgIkNvbmNhdGVuYXRlLCBpbnRvIGEgc2VxdWVuY2Ugb2YgdHlwZSBUWVBF
LCB0aGUgYXJndW1lbnQgU0VRVUVOQ0VTLiIKLSAgOzsgWEVtYWNzIGNoYW5nZTogdXNlIGNhc2Ug
aW5zdGVhZCBvZiBjb25kIGZvciBjbGFyaXR5Ci0gIChjYXNlIHR5cGUKLSAgICAodmVjdG9yIChh
cHBseSAndmNvbmNhdCBzZXFzKSkKLSAgICAoc3RyaW5nIChhcHBseSAnY29uY2F0IHNlcXMpKQot
ICAgIChsaXN0ICAgKHJlZHVjZSAnYXBwZW5kIHNlcXMgOmZyb20tZW5kIHQgOmluaXRpYWwtdmFs
dWUgbmlsKSkKLSAgICAoYml0LXZlY3RvciAoYXBwbHkgJ2J2Y29uY2F0IHNlcXMpKQotICAgICh0
IChjb2VyY2UgKHJlZHVjZSAnYXBwZW5kIHNlcXMgOmZyb20tZW5kIHQgOmluaXRpYWwtdmFsdWUg
bmlsKSB0eXBlKSkpKQorOzsgWEVtYWNzOyAjJ3N1YnNlcSwgIydjb25jYXRlbmF0ZSBhcmUgaW4g
Qy4KIAogOzs7IExpc3QgZnVuY3Rpb25zLgogCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNj
NmI1MmRmZCBsaXNwL2ZpbmQtcGF0aHMuZWwKLS0tIGEvbGlzcC9maW5kLXBhdGhzLmVsCVRodSBK
dW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9saXNwL2ZpbmQtcGF0aHMuZWwJVGh1IEp1
biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC00NSw5ICs0NSwxMCBAQAogICAiRmlsZSBiYXNl
cyB0aGF0IG5hbWUgRW1hY3MgTGlzcCBmaWxlcy4iKQogCiAoZGVmdmFyIHBhdGhzLW5vLWxpc3At
ZGlyZWN0b3J5LXJlZ2V4cAotICAoY29uY2F0ICJcXCgiIHBhdGhzLXZlcnNpb24tY29udHJvbC1m
aWxlbmFtZS1yZWdleHAgIlxcKSIKLQkgICJcXHwiCi0JICAiXFwoIiBwYXRocy1saXNwLWZpbGVu
YW1lLXJlZ2V4cCAiXFwpIikKKyAgKGNvbmNhdGVuYXRlICdzdHJpbmcKKyAgICAgICAgICAgICAg
ICJcXCgiIHBhdGhzLXZlcnNpb24tY29udHJvbC1maWxlbmFtZS1yZWdleHAgIlxcKSIKKyAgICAg
ICAgICAgICAgICJcXHwiCisgICAgICAgICAgICAgICAiXFwoIiBwYXRocy1saXNwLWZpbGVuYW1l
LXJlZ2V4cCAiXFwpIikKICAgIkZpbGUgYmFzZXMgdGhhdCBtYXkgbm90IGJlIGRpcmVjdG9yaWVz
IGNvbnRhaW5pbmcgTGlzcCBjb2RlLiIpCiAKIChkZWZ1biBwYXRocy1maW5kLXJlY3Vyc2l2ZS1w
YXRoIChkaXJlY3RvcmllcyAmb3B0aW9uYWwgbWF4LWRlcHRoIGV4Y2x1ZGUtcmVnZXhwKQpAQCAt
MTExLDEzICsxMTIsMTUgQEAKICAgIkNvbnZlcnQgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHMgQ09N
UE9ORU5UUyBpbnRvIGEgcGF0aC4KIElmIEVYUEFORC1ESVJFQ1RPUlkgaXMgbm9uLU5JTCwgdXNl
IGl0IGFzIGEgZGlyZWN0b3J5IHRvIGZlZWQKIHRvIEVYUEFORC1GSUxFLU5BTUUuIgotICAobGV0
KiAoKHJldmVyc2UtY29tcG9uZW50cyAocmV2ZXJzZSBjb21wb25lbnRzKSkKLQkgKGxhc3QtY29t
cG9uZW50IChjYXIgcmV2ZXJzZS1jb21wb25lbnRzKSkKLQkgKGZpcnN0LWNvbXBvbmVudHMgKHJl
dmVyc2UgKGNkciByZXZlcnNlLWNvbXBvbmVudHMpKSkKLQkgKHBhdGgKLQkgIChhcHBseSAjJ2Nv
bmNhdAotCQkgKGFwcGVuZCAobWFwY2FyICMnZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSBmaXJzdC1j
b21wb25lbnRzKQotCQkJIChsaXN0IGxhc3QtY29tcG9uZW50KSkpKSkKKyAgKGxldCAoKHBhdGgK
KwkgKG1hcGNvbmNhdAorCSAgIydpZGVudGl0eSAKKwkgIChyZWR1Y2UgIydjb25zIGNvbXBvbmVu
dHMgOmtleSAjJ2ZpbGUtbmFtZS1hcy1kaXJlY3RvcnkKKwkJICA6ZnJvbS1lbmQgdCA6ZW5kICgx
LSAobGVuZ3RoIGNvbXBvbmVudHMpKQorICAgICAgICAgICAgICAgICAgOzsgVGhlIGxhc3QgY29t
cG9uZW50IGlzIGEgZmlsZSBuYW1lLCBkbyBub3QgdHJhbnNmb3JtIGl0CisgICAgICAgICAgICAg
ICAgICA7OyB3aXRoICMnZmlsZS1uYW1lLWFzLWRpcmVjdG9yeS4KKwkJICA6aW5pdGlhbC12YWx1
ZSAobGFzdCBjb21wb25lbnRzKSkKKwkgICIiKSkpCiAgICAgKGlmIGV4cGFuZC1kaXJlY3RvcnkK
IAkoZXhwYW5kLWZpbGUtbmFtZSBwYXRoIGV4cGFuZC1kaXJlY3RvcnkpCiAgICAgICBwYXRoKSkp
CkBAIC0xMjksMTAgKzEzMiw3IEBACiBCQVNFIGlzIHRoZSBiYXNlIHRvIGxvb2sgZm9yLiIKICAg
KGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkKICAgIChleHBhbmQtZmlsZS1uYW1lCi0gICAgKGNvbmNh
dAotICAgICAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSByb290KQotICAgICBzdWZmaXgKLSAgICAg
YmFzZSkpKSkKKyAgICAoY29uY2F0ZW5hdGUgJ3N0cmluZyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9y
eSByb290KSBzdWZmaXggYmFzZSkpKSkKIAogCiAoZGVmdW4gcGF0aHMtZm9yLWVhY2gtZW1hY3Mt
ZGlyZWN0b3J5IChmdW5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogKGRlZnVuIGNvbnN0cnVjdC1l
bWFjcy12ZXJzaW9uLW5hbWUgKCkKICAgIkNvbnN0cnVjdCBhIHN0cmluZyBmcm9tIHRoZSByYXcg
WEVtYWNzIHZlcnNpb24gbnVtYmVyLiIKLSAgKGNvbmNhdCBlbWFjcy1wcm9ncmFtLW5hbWUgIi0i
IGVtYWNzLXByb2dyYW0tdmVyc2lvbikpCisgIChjb25jYXRlbmF0ZSAnc3RyaW5nIGVtYWNzLXBy
b2dyYW0tbmFtZSAiLSIgZW1hY3MtcHJvZ3JhbS12ZXJzaW9uKSkKIAogKGRlZnVuIHBhdGhzLWRp
cmVjdG9yaWVzLXdoaWNoLWV4aXN0IChkaXJlY3RvcmllcykKICAgIlJldHVybiB0aGUgZGlyZWN0
b3JpZXMgYW1vbmcgRElSRUNUT1JJRVMuCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1
MmRmZCBsaXNwL2xvYWR1cC5lbAotLS0gYS9saXNwL2xvYWR1cC5lbAlUaHUgSnVuIDMwIDAwOjA2
OjM4IDIwMTYgKzAxMDAKKysrIGIvbGlzcC9sb2FkdXAuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAy
MDE2ICswMTAwCkBAIC0xMTYsNyArMTE2LDcgQEAKIAk7OyAjIyMjIFRoaXMgY29kZSBpcyBkdXBs
aWNhdGVkIGluIHR3byBvdGhlciBwbGFjZXMuCiAJKGxldCAoKHRlbXAtcGF0aCAoZXhwYW5kLWZp
bGUtbmFtZSAiLiIgKGNhciBsb2FkLXBhdGgpKSkpCiAJICAoc2V0cSBsb2FkLXBhdGggKG5jb25j
IChtYXBjYXIKLQkJCQkgICMnKGxhbWJkYSAoaSkgKGNvbmNhdCBpICIvIikpCisJCQkJICAjJyhs
YW1iZGEgKGkpIChjb25jYXRlbmF0ZSAnc3RyaW5nIGkgIi8iKSkKIAkJCQkgIChkaXJlY3Rvcnkt
ZmlsZXMgdGVtcC1wYXRoIHQgIl5bXi0uXSIKIAkJCQkJCSAgIG5pbCAnZGlycy1vbmx5KSkKIAkJ
CQkgKGNvbnMgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgdGVtcC1wYXRoKQpkaWZmIC1yIGNiZTEw
NzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgbGlzcC9tYWtlLWRvY2ZpbGUuZWwKLS0tIGEvbGlzcC9t
YWtlLWRvY2ZpbGUuZWwJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL2xpc3Av
bWFrZS1kb2NmaWxlLmVsCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMTE4LDEw
ICsxMTgsMTEgQEAKIAkJICAgKG5vdCAobWVtYmVyIGFyZyBwcm9jZXNzZWQpKSkKIAkgICh3aGVu
IChzdHJpbmctbWF0Y2ggIlxcKC4qXFwpXFwub2JqJCIgYXJnKQogCSAgICAoc2V0cSBhcmcgKGV4
cGFuZC1maWxlLW5hbWUKLQkJICAgICAgIChjb25jYXQgCi0JCQkoZmlsZS1uYW1lLW5vbmRpcmVj
dG9yeQotCQkJIDs7IG5vIG1hdGNoLXN0cmluZyBzbyB1c2UgaXRzIGltcGxlbWVudGF0aW9uLgot
CQkJIChzdWJzZXEgYXJnIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCSAg
ICAgICAoY29uY2F0ZW5hdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcgCisgICAg
ICAgICAgICAgICAgICAgICAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeQorICAgICAgICAgICAg
ICAgICAgICAgICAgIDs7IG5vIG1hdGNoLXN0cmluZyBzbyB1c2UgaXRzIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzZXEgYXJnIChtYXRjaC1iZWdpbm5pbmcg
MSkgKG1hdGNoLWVuZCAxKSkpCiAJCQkiLmMiKQogCQkgICAgICAgc291cmNlLXNyYykpKQogCSAg
KGlmIChhbmQgKG51bGwgZG9jZmlsZS1vdXQtb2YtZGF0ZSkKZGlmZiAtciBjYmUxMDcxNDFhZmUg
LXIgMTdhM2M2YjUyZGZkIGxpc3AvcGFja2FnZXMuZWwKLS0tIGEvbGlzcC9wYWNrYWdlcy5lbAlU
aHUgSnVuIDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvbGlzcC9wYWNrYWdlcy5lbAlUaHUg
SnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAgLTE4MCw3ICsxODAsNyBAQAogCiAoZGVmdW4g
cGFja2FnZXMtYWRkLXN1ZmZpeCAoc3RyKQogICAoaWYgKG51bGwgKHN0cmluZy1tYXRjaCAiXFwu
ZWxcXCciIHN0cikpCi0gICAgICAoY29uY2F0IHN0ciAiLmVsYyIpCisgICAgICAoY29uY2F0ZW5h
dGUgJ3N0cmluZyBzdHIgIi5lbGMiKQogICAgIHN0cikpCiAKIChkZWZ1biBwYWNrYWdlcy1saXN0
LWF1dG9sb2Fkcy1wYXRoICgpCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBs
aXNwL3N1YnIuZWwKLS0tIGEvbGlzcC9zdWJyLmVsCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiAr
MDEwMAorKysgYi9saXNwL3N1YnIuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBA
IC0yMDIsNiArMjAyLDI5IEBACiAgICAgICAgICAgICh0aGUgKGFuZCBsaXN0IChzYXRpc2ZpZXMg
KGxhbWJkYSAobGlzdCkgKGV2ZXJ5ICdzdHJpbmdwIGxpc3QpKSkpCiAgICAgICAgICAgICAgICAg
bGlzdCkKICAgICAgICAgICAgOnRlc3QgJ2VxdWFscCkpCisKKyhkZWZ1biBjb25jYXQgKCZyZXN0
IGFyZ3MpCisgICJDb25jYXRlbmF0ZSBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgbWFrZSB0aGUgcmVz
dWx0IGEgc3RyaW5nLgorVGhlIHJlc3VsdCBpcyBhIHN0cmluZyB3aG9zZSBlbGVtZW50cyBhcmUg
dGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRzLgorRWFjaCBhcmd1bWVudCBtYXkgYmUg
YSBzdHJpbmcgb3IgYSBsaXN0IG9yIHZlY3RvciBvZiBjaGFyYWN0ZXJzLgorCitBcyBvZiBYRW1h
Y3MgMjEuMCwgdGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBhY2NlcHQgaW5kaXZpZHVhbCBpbnRlZ2Vy
cworYXMgYXJndW1lbnRzLiAgT2xkIGNvZGUgdGhhdCByZWxpZXMgb24sIGZvciBleGFtcGxlLCAo
Y29uY2F0IFwiZm9vXCIgNTApCityZXR1cm5pbmcgXCJmb281MFwiIHdpbGwgZmFpbC4gIFRvIGZp
eCBzdWNoIGNvZGUsIGVpdGhlciBhcHBseQorYGludC10by1zdHJpbmcnIHRvIHRoZSBpbnRlZ2Vy
IGFyZ3VtZW50LCBvciB1c2UgYGZvcm1hdCcuIgorICAoYXBwbHkgIydjb25jYXRlbmF0ZSAnc3Ry
aW5nIGFyZ3MpKQorCisoZGVmdW4gdmNvbmNhdCAoJnJlc3QgYXJncykKKyAgIkNvbmNhdGVuYXRl
IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBtYWtlIHRoZSByZXN1bHQgYSB2ZWN0b3IuCitUaGUgcmVz
dWx0IGlzIGEgdmVjdG9yIHdob3NlIGVsZW1lbnRzIGFyZSB0aGUgZWxlbWVudHMgb2YgYWxsIHRo
ZSBhcmd1bWVudHMuCitFYWNoIGFyZ3VtZW50IG1heSBiZSBhIGxpc3QsIHZlY3RvciwgYml0IHZl
Y3Rvciwgb3Igc3RyaW5nLiIKKyAgKGFwcGx5ICMnY29uY2F0ZW5hdGUgJ3ZlY3RvciBhcmdzKSkK
KworKGRlZnVuIGJ2Y29uY2F0ICgmcmVzdCBhcmdzKQorICAiQ29uY2F0ZW5hdGUgYWxsIHRoZSBh
cmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGJpdCB2ZWN0b3IuCitUaGUgcmVzdWx0IGlz
IGEgYml0IHZlY3RvciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUK
K2FyZ3VtZW50cy4gIEVhY2ggYXJndW1lbnQgbWF5IGJlIGEgbGlzdCwgdmVjdG9yLCBiaXQgdmVj
dG9yLCBvciBzdHJpbmcuIgorICAoYXBwbHkgIydjb25jYXRlbmF0ZSAnYml0LXZlY3RvciBhcmdz
KSkKIAwKIDs7OzsgS2V5bWFwIHN1cHBvcnQuCiA7OyBYRW1hY3M6IHJlbW92ZWQgdG8ga2V5bWFw
LmVsCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBsaXNwL3VwZGF0ZS1lbGMu
ZWwKLS0tIGEvbGlzcC91cGRhdGUtZWxjLmVsCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEw
MAorKysgYi9saXNwL3VwZGF0ZS1lbGMuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAw
CkBAIC0yMTcsOCArMjE3LDggQEAKICAgICAgICAgICAgICAgICAgIDs7ICAgICAgICAgICAgICAg
IGludm9jYXRpb24tZGlyZWN0b3J5IGludm9jYXRpb24tbmFtZSkpKQogCQkgIChraWxsLWVtYWNz
KSkKIAkgICAgICAodXBkYXRlLWVsYy1jaG9wLWV4dGVuc2lvbiBmdWxsLWFyZykpKQotCSAgIChm
dWxsLWFyZy1lbCAoY29uY2F0IGZ1bGwtYXJnLXNhbnMtZXh0ZW5zaW9uICIuZWwiKSkKLQkgICAo
ZnVsbC1hcmctZWxjIChjb25jYXQgZnVsbC1hcmctc2Fucy1leHRlbnNpb24gIi5lbGMiKSkKKwkg
ICAoZnVsbC1hcmctZWwgKGNvbmNhdGVuYXRlICdzdHJpbmcgZnVsbC1hcmctc2Fucy1leHRlbnNp
b24gIi5lbCIpKQorCSAgIChmdWxsLWFyZy1lbGMgKGNvbmNhdGVuYXRlICdzdHJpbmcgZnVsbC1h
cmctc2Fucy1leHRlbnNpb24gIi5lbGMiKSkKIAkgICAoZnVsbC1hcmctZGlyIChmaWxlLW5hbWUt
ZGlyZWN0b3J5IGZ1bGwtYXJnLWVsKSkpCiAJICAgCiAgICAgICA7IChwcmludCBmdWxsLWFyZy1l
bCkKQEAgLTM0OSwxMyArMzQ5LDE1IEBACiAJKHQKIAkgKGxldCAoKGJjLWJvb3RzdHJhcAogCQko
bWFwY2FyICMnKGxhbWJkYSAoYXJnKSAKLQkJCSAgICAoY29uY2F0ICh1cGRhdGUtZWxjLWNob3At
ZXh0ZW5zaW9uCi0JCQkJICAgICAobG9jYXRlLWxpYnJhcnkgYXJnKSkgIi5lbCIpKQorCQkJICAg
IChjb25jYXRlbmF0ZSAnc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh1cGRhdGUtZWxjLWNob3AtZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobG9jYXRlLWxpYnJhcnkgYXJnKSkgIi5lbCIpKQogCQkJbGlz
cC1maWxlcy1uZWVkZWQtZm9yLWJ5dGUtY29tcGlsYXRpb24pKQogCSAgICAgICAoYm9vdHN0cmFw
LW90aGVyCiAJCShtYXBjYXIgIycobGFtYmRhIChhcmcpIAotCQkJICAgIChjb25jYXQgKHVwZGF0
ZS1lbGMtY2hvcC1leHRlbnNpb24KLQkJCQkgICAgIChsb2NhdGUtbGlicmFyeSBhcmcpKSAiLmVs
IikpCisJCQkgICAgKGNvbmNhdGVuYXRlICdzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVwZGF0ZS1lbGMtY2hvcC1leHRlbnNpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhdGUtbGlicmFyeSBhcmcpKSAiLmVs
IikpCiAJCQlsaXNwLWZpbGVzLW5lZWRpbmctZWFybHktYnl0ZS1jb21waWxhdGlvbikpKQogCSAg
IChzZXRxIGluaGliaXQtYXV0b2xvYWRzIHQpCiAJICAgOzsgaWYgYnl0ZWNvbXAgb3IgYnl0ZS1v
cHRpbWl6ZSBuZWVkIHJlY29tcGlsaW5nLCB0aGVuIGxvYWQKZGlmZiAtciBjYmUxMDcxNDFhZmUg
LXIgMTdhM2M2YjUyZGZkIHNyYy9DaGFuZ2VMb2cKLS0tIGEvc3JjL0NoYW5nZUxvZwlUaHUgSnVu
IDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL0NoYW5nZUxvZwlUaHUgSnVuIDMwIDAw
OjQxOjM5IDIwMTYgKzAxMDAKQEAgLTEsMyArMSw2MCBAQAorMjAxNi0wNi0zMCAgQWlkYW4gS2Vo
b2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KKworCU1vdmUgIydjb25jYXRlbmF0ZSB0byBDLCBp
bXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQKKwlhbGdvcml0aG1pYyBjb21wbGV4aXR5IG9m
ICMnY29uY2F0LgorCSogYnl0ZWNvZGUuYzoKKwkqIGV2ZW50LW1zdy5jIChkZGVfZXZhbF9zdHJp
bmcpOgorCSogZ2MuYyAoc2hvd19nY19jdXJzb3JfYW5kX21lc3NhZ2UpOgorCSogZ2MuYyAocmVt
b3ZlX2djX2N1cnNvcl9hbmRfbWVzc2FnZSk6CisJKiBndXR0ZXIuYyAoY29uc3RydWN0X3dpbmRv
d19ndXR0ZXJfc3BlYyk6CisJKiB0bHMuYyAoZ251dGxzX3BrMTFfcGFzc3dvcmQpOgorCSogdGxz
LmMgKG9wZW5zc2xfZXJyb3Jfc3RyaW5nKToKKwlDYWxsIGNvbmNhdGVuYXRlKCksIG5vdCBGY29u
Y2F0KCksIGluIHRoZXNlIGZpbGVzLgorCisJKiBmbnMuYyAoY29uY2F0MiwgY29uY2F0MywgdmNv
bmNhdDIsIHZjb25jYXQzLCBGYXBwZW5kLCBGY29uY2F0KToKKwlNb3ZlIHRoZXNlIHRvIHNlcXVl
bmNlLmMKKwkqIGZucy5jIChjb3B5X2xpc3QpOgorCUNhbGwgY29uY2F0ZW5hdGUoKSBoZXJlLCBu
b3QgY29uY2F0KCkuCisJKiBmbnMuYyAoQWxzbyBzZWUpOiBSZW1vdmVkLgorCSogZm5zLmMgKEZj
b3B5X3NlcXVlbmNlKToKKwkqIGZucy5jIChGY29weV9hbGlzdCk6CisJKiBmbnMuYyAoYXJndW1l
bnRzKTogUmVtb3ZlZC4KKwkqIGZucy5jIChuY29uYzIpOgorCWJ5dGVjb2RlX25jb25jMigpIG5v
dyBkb2VzIGl0cyBvd24gR0NpbmcsIG5vIG5lZWQgZm9yIHVzIHRvLgorCSogZm5zLmMgKGJ5dGVj
b2RlX25jb25jMik6CisJR0NQUk8gaW4gdGhpcyBmdW5jdGlvbiwgZG9jdW1lbnQgd2h5LgorCSog
Zm5zLmMgKEZuY29uYyk6CisJRG9uJ3QgR0NQUk8gaW4gdGhpcyBmdW5jdGlvbiwgaXQgaXMgbm90
IGNhbGxlZCBmcm9tIEMsIGFuZCBhbnkKKwlMaXNwIGNhbGxzIHdpbGwgaGF2ZSB0aGVpciBhcmd1
bWVudHMgR0NQUk9kIGF1dG9tYXRpY2FsbHkuCisJKiBmbnMuYyAoc3ltc19vZl9mbnMpOgorCU1v
dmUgRmFwcGVuZCB0byBzZXF1ZW5jZS5jOyBtb3ZlICMnY29uY2F0LCAjJ3Zjb25jYXQsICMnYnZj
b25jYXQKKwl0byBzdWJyLmVsLgorCSogZ2VuZXJhbC1zbG90cy5oOgorCU1vdmUgJ2JpdC12ZWN0
b3IsICd2ZWN0b3IgaGVyZS4KKwkqIGxpc3AuaDoKKwlEZWNsYXJlIGNvbmNhdGVuYXRlKCksIHRo
ZSBoZWF2eSBsaWZ0aW5nIG9mICMnY29uY2F0LgorCSogc2VxdWVuY2UuYzoKKwkqIHNlcXVlbmNl
LmMgKEZtYXBjb25jYXQpOgorCUNhbGwgY29uY2F0ZW5hdGUoKSByYXRoZXIgdGhhbiBGY29uY2F0
KCkuCisJKiBzZXF1ZW5jZS5jIChGbWFwY2FuKToKKwlHQ1BSTyB0aGUgYXJndW1lbnRzIHRvIEZu
Y29uYygpIG91cnNlbHZlcyBoZXJlLgorCSogc2VxdWVuY2UuYyAoc3RydWN0IG1lcmdlX3N0cmlu
Z19leHRlbnRzX3N0cnVjdCk6CisJTW92ZSB0aGlzIGhlcmUgZnJvbSBmbnMuYygpLgorCSogc2Vx
dWVuY2UuYyAoY29uY2F0ZW5hdGUpOgorCVJlLWltcGxlbWVudCBjb25jYXQoKSwgcHJldmlvdXNs
eSBpbiBmbnMuYywgaW4gdGhpcyBmaWxlOyB1c2UgYQorCW11Y2ggY2hlYXBlciBhbGdvcml0aG0g
Zm9yIHRoZSBjb21tb24gY2FzZSBvZiBhbGwtc3RyaW5nIGFyZ3VtZW50cyBhbmQKKwlhIHN0cmlu
ZyByZXN1bHQsIHVzZSBhIGNoZWFwZXIgYWxnb3JpdGhtIGZvciBhcHBlbmQoKSwgb25seQorCXRy
YXZlcnNpbmcgbGlzdHMgYW5kIHN0cmluZ3Mgb25jZSwgY2FsbCAjJ2NvZXJjZSBhcyBuZWNlc3Nh
cnkuCisJKiBzZXF1ZW5jZS5jIChGY29uY2F0ZW5hdGUpOgorCU1ha2UgY29uY2F0ZW5hdGUoKSBh
dmFpbGFibGUgdG8gTGlzcC4KKwkqIHNlcXVlbmNlLmMgKGNvbmNhdDIsIGNvbmNhdDMsIHZjb25j
YXQyLCB2Y29uY2F0Myk6IE1vdmVkIGhlcmUKKwlmcm9tIGZucy5jLgorCSogc2VxdWVuY2UuYyAo
RmFwcGVuZCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYywgaW1wbGVtZW50ZWQgaW4KKwl0ZXJtcyBv
ZiBjb25jYXRlbmF0ZSgpLgorCSogc2VxdWVuY2UuYyAoc3ltc19vZl9zZXF1ZW5jZSk6CisJTWFr
ZSBzb21lIHN1YnJzIGF2YWlsYWJsZSBoZXJlLCBtb3ZlIHNvbWUgc3ltYm9scyB0bworCWdlbmVy
YWwtc2xvdHMuaC4KKwogMjAxNi0wNi0yOSAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJk
Lm5ldD4KIAogCSogYnl0ZWNvZGUuYyAoQURKVVNUX1NUQUNLX0dDUFJPKToKZGlmZiAtciBjYmUx
MDcxNDFhZmUgLXIgMTdhM2M2YjUyZGZkIHNyYy9ieXRlY29kZS5jCi0tLSBhL3NyYy9ieXRlY29k
ZS5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvYnl0ZWNvZGUuYwlU
aHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAgLTExODUsNyArMTE4NSw3IEBACiAJZG9f
Y29uY2F0OgogCSAgRElTQ0FSRCAobiAtIDEpOwogICAgICAgICAgIFRPUF9MVkFMVUUgPSBUT1A7
IC8qIElnbm9yZSBtdWx0aXBsZSB2YWx1ZXMuICovCi0JICBUT1BfTFZBTFVFID0gRmNvbmNhdCAo
biwgVE9QX0FERFJFU1MpOworCSAgVE9QX0xWQUxVRSA9IGNvbmNhdGVuYXRlIChuLCBUT1BfQURE
UkVTUywgUXN0cmluZywgMCk7CiAJICBicmVhazsKIAogCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1y
IDE3YTNjNmI1MmRmZCBzcmMvZXZlbnQtbXN3LmMKLS0tIGEvc3JjL2V2ZW50LW1zdy5jCVRodSBK
dW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvZXZlbnQtbXN3LmMJVGh1IEp1biAz
MCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogICBhcmdzWzBdID0g
YnVpbGRfYXNjc3RyaW5nICgiKHByb2duICIpOwogICBhcmdzWzFdID0gc3RyOwogICBhcmdzWzJd
ID0gYnVpbGRfYXNjc3RyaW5nICgiKSIpOwotICBzdHIgPSBGY29uY2F0ICgzLCBhcmdzKTsKKyAg
c3RyID0gY29uY2F0ZW5hdGUgKDMsIGFyZ3MsIFFzdHJpbmcsIDApOwogCiAgIG9iaiA9IEZyZWFk
X2Zyb21fc3RyaW5nIChzdHIsIFFuaWwsIFFuaWwpOwogICBVTkdDUFJPOwpkaWZmIC1yIGNiZTEw
NzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgc3JjL2ZpbGVpby5jCi0tLSBhL3NyYy9maWxlaW8uYwlU
aHUgSnVuIDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL2ZpbGVpby5jCVRodSBKdW4g
MzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMTg0OCw3ICsxODQ4LDcgQEAKIAogCWFyZ3NbaSsr
XSA9IEZjaGFyX3RvX3N0cmluZyAoVmRpcmVjdG9yeV9zZXBfY2hhcik7CiAgICAgICBhcmdzW2kr
K10gPSBGZmlsZV9uYW1lX25vbmRpcmVjdG9yeSAoZmlsZW5hbWUpOwotICAgICAgbmV3bmFtZSA9
IEZjb25jYXQgKGksIGFyZ3MpOworICAgICAgbmV3bmFtZSA9IGNvbmNhdGVuYXRlIChpLCBhcmdz
LCBRc3RyaW5nLCAwKTsKICAgICAgIE5VTkdDUFJPOwogICAgIH0KIApAQCAtMjA4OCw3ICsyMDg4
LDcgQEAKICAgICAgIGlmIChzdHJpbmdfYnl0ZSAobmV3bmFtZSwgWFNUUklOR19MRU5HVEggKG5l
d25hbWUpIC0gMSkgIT0gJy8nKQogCWFyZ3NbaSsrXSA9IGJ1aWxkX2FzY3N0cmluZyAoIi8iKTsK
ICAgICAgIGFyZ3NbaSsrXSA9IEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmaWxlbmFtZSk7Ci0g
ICAgICBuZXduYW1lID0gRmNvbmNhdCAoaSwgYXJncyk7CisgICAgICBuZXduYW1lID0gY29uY2F0
ZW5hdGUgKGksIGFyZ3MsIFFzdHJpbmcsIDApOwogICAgICAgTlVOR0NQUk87CiAgICAgfQogCmRp
ZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBzcmMvZm5zLmMKLS0tIGEvc3JjL2Zu
cy5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvZm5zLmMJVGh1IEp1
biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC0zMjEsMTA2ICszMjEsOCBAQAogfQogCiAMCi1l
bnVtICBjb25jYXRfdGFyZ2V0X3R5cGUgeyBjX2NvbnMsIGNfc3RyaW5nLCBjX3ZlY3RvciwgY19i
aXRfdmVjdG9yIH07Ci1zdGF0aWMgTGlzcF9PYmplY3QgY29uY2F0IChpbnQgbmFyZ3MsIExpc3Bf
T2JqZWN0ICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjb25jYXRfdGFy
Z2V0X3R5cGUgdGFyZ2V0X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFz
dF9zcGVjaWFsKTsKLQotTGlzcF9PYmplY3QKLWNvbmNhdDIgKExpc3BfT2JqZWN0IHN0cmluZzEs
IExpc3BfT2JqZWN0IHN0cmluZzIpCi17Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIGFyZ3Nb
MF0gPSBzdHJpbmcxOwotICBhcmdzWzFdID0gc3RyaW5nMjsKLSAgcmV0dXJuIGNvbmNhdCAoMiwg
YXJncywgY19zdHJpbmcsIDApOwotfQotCi1MaXNwX09iamVjdAotY29uY2F0MyAoTGlzcF9PYmpl
Y3Qgc3RyaW5nMSwgTGlzcF9PYmplY3Qgc3RyaW5nMiwgTGlzcF9PYmplY3Qgc3RyaW5nMykKLXsK
LSAgTGlzcF9PYmplY3QgYXJnc1szXTsKLSAgYXJnc1swXSA9IHN0cmluZzE7Ci0gIGFyZ3NbMV0g
PSBzdHJpbmcyOwotICBhcmdzWzJdID0gc3RyaW5nMzsKLSAgcmV0dXJuIGNvbmNhdCAoMywgYXJn
cywgY19zdHJpbmcsIDApOwotfQotCi1MaXNwX09iamVjdAotdmNvbmNhdDIgKExpc3BfT2JqZWN0
IHZlYzEsIExpc3BfT2JqZWN0IHZlYzIpCi17Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIGFy
Z3NbMF0gPSB2ZWMxOwotICBhcmdzWzFdID0gdmVjMjsKLSAgcmV0dXJuIGNvbmNhdCAoMiwgYXJn
cywgY192ZWN0b3IsIDApOwotfQotCi1MaXNwX09iamVjdAotdmNvbmNhdDMgKExpc3BfT2JqZWN0
IHZlYzEsIExpc3BfT2JqZWN0IHZlYzIsIExpc3BfT2JqZWN0IHZlYzMpCi17Ci0gIExpc3BfT2Jq
ZWN0IGFyZ3NbM107Ci0gIGFyZ3NbMF0gPSB2ZWMxOwotICBhcmdzWzFdID0gdmVjMjsKLSAgYXJn
c1syXSA9IHZlYzM7Ci0gIHJldHVybiBjb25jYXQgKDMsIGFyZ3MsIGNfdmVjdG9yLCAwKTsKLX0K
LQotREVGVU4gKCJhcHBlbmQiLCBGYXBwZW5kLCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUg
YWxsIHRoZSBhcmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGxpc3QuCi1UaGUgcmVzdWx0
IGlzIGEgbGlzdCB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJn
dW1lbnRzLgotRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3IsIGJpdCB2ZWN0b3Is
IG9yIHN0cmluZy4KLVRoZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBjb3BpZWQsIGp1c3QgdXNlZCBh
cyB0aGUgdGFpbCBvZiB0aGUgbmV3IGxpc3QuCi1BbHNvIHNlZTogYG5jb25jJy4KLQotYXJndW1l
bnRzOiAoJnJlc3QgQVJHUykKLSovCi0gICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFy
Z3MpKQotewotICByZXR1cm4gY29uY2F0IChuYXJncywgYXJncywgY19jb25zLCAxKTsKLX0KLQot
REVGVU4gKCJjb25jYXQiLCBGY29uY2F0LCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUgYWxs
IHRoZSBhcmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIHN0cmluZy4KLVRoZSByZXN1bHQg
aXMgYSBzdHJpbmcgd2hvc2UgZWxlbWVudHMgYXJlIHRoZSBlbGVtZW50cyBvZiBhbGwgdGhlIGFy
Z3VtZW50cy4KLUVhY2ggYXJndW1lbnQgbWF5IGJlIGEgc3RyaW5nIG9yIGEgbGlzdCBvciB2ZWN0
b3Igb2YgY2hhcmFjdGVycy4KLQotQXMgb2YgWEVtYWNzIDIxLjAsIHRoaXMgZnVuY3Rpb24gZG9l
cyBOT1QgYWNjZXB0IGluZGl2aWR1YWwgaW50ZWdlcnMKLWFzIGFyZ3VtZW50cy4gIE9sZCBjb2Rl
IHRoYXQgcmVsaWVzIG9uLCBmb3IgZXhhbXBsZSwgKGNvbmNhdCAiZm9vIiA1MCkKLXJldHVybmlu
ZyAiZm9vNTAiIHdpbGwgZmFpbC4gIFRvIGZpeCBzdWNoIGNvZGUsIGVpdGhlciBhcHBseQotYGlu
dC10by1zdHJpbmcnIHRvIHRoZSBpbnRlZ2VyIGFyZ3VtZW50LCBvciB1c2UgYGZvcm1hdCcuCi0K
LWFyZ3VtZW50czogKCZyZXN0IEFSR1MpCi0qLwotICAgICAgIChpbnQgbmFyZ3MsIExpc3BfT2Jq
ZWN0ICphcmdzKSkKLXsKLSAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIGNfc3RyaW5nLCAw
KTsKLX0KLQotREVGVU4gKCJ2Y29uY2F0IiwgRnZjb25jYXQsIDAsIE1BTlksIDAsIC8qCi1Db25j
YXRlbmF0ZSBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgbWFrZSB0aGUgcmVzdWx0IGEgdmVjdG9yLgot
VGhlIHJlc3VsdCBpcyBhIHZlY3RvciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9m
IGFsbCB0aGUgYXJndW1lbnRzLgotRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3Is
IGJpdCB2ZWN0b3IsIG9yIHN0cmluZy4KLQotYXJndW1lbnRzOiAoJnJlc3QgQVJHUykKLSovCi0g
ICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpKQotewotICByZXR1cm4gY29uY2F0
IChuYXJncywgYXJncywgY192ZWN0b3IsIDApOwotfQotCi1ERUZVTiAoImJ2Y29uY2F0IiwgRmJ2
Y29uY2F0LCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUgYWxsIHRoZSBhcmd1bWVudHMgYW5k
IG1ha2UgdGhlIHJlc3VsdCBhIGJpdCB2ZWN0b3IuCi1UaGUgcmVzdWx0IGlzIGEgYml0IHZlY3Rv
ciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUKLWFyZ3VtZW50cy4g
IEVhY2ggYXJndW1lbnQgbWF5IGJlIGEgbGlzdCwgdmVjdG9yLCBiaXQgdmVjdG9yLCBvciBzdHJp
bmcuCi0KLWFyZ3VtZW50czogKCZyZXN0IEFSR1MpCi0qLwotICAgICAgIChpbnQgbmFyZ3MsIExp
c3BfT2JqZWN0ICphcmdzKSkKLXsKLSAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIGNfYml0
X3ZlY3RvciwgMCk7Ci19Ci0KLS8qIENvcHkgYSAocG9zc2libHkgZG90dGVkKSBsaXN0LiAgTElT
VCBtdXN0IGJlIGEgY29ucy4KLSAgIENhbid0IHVzZSBjb25jYXQgKDEsICZhbGlzdCwgY19jb25z
LCAwKSAtIGRvZXNuJ3QgaGFuZGxlIGRvdHRlZCBsaXN0cy4gKi8KKy8qIENvcHkgYSAocG9zc2li
bHkgZG90dGVkKSBsaXN0LiAgTElTVCBtdXN0IGJlIGEgY29ucy4gIENhbid0IHVzZSBjb25jYXRl
bmF0ZQorICAgKDEsICZhbGlzdCwgUWxpc3QsIDApIC0gZG9lc24ndCBoYW5kbGUgZG90dGVkIGxp
c3RzLiAqLwogc3RhdGljIExpc3BfT2JqZWN0CiBjb3B5X2xpc3QgKExpc3BfT2JqZWN0IGxpc3Qp
CiB7CkBAIC00NzAsMjU1ICszNzIsMTcgQEAKICAgICAgICAoc2VxdWVuY2UpKQogewogIGFnYWlu
OgotICBpZiAoTklMUCAgICAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlOwotICBpZiAo
Q09OU1AgICAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvcHlfbGlzdCAoc2VxdWVuY2UpOwotICBp
ZiAoU1RSSU5HUCAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdCAoMSwgJnNlcXVlbmNlLCBj
X3N0cmluZywgICAgIDApOwotICBpZiAoVkVDVE9SUCAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNv
bmNhdCAoMSwgJnNlcXVlbmNlLCBjX3ZlY3RvciwgICAgIDApOwotICBpZiAoQklUX1ZFQ1RPUlAg
KHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdCAoMSwgJnNlcXVlbmNlLCBjX2JpdF92ZWN0b3IsIDAp
OworICBpZiAoTklMUCAoc2VxdWVuY2UpKSByZXR1cm4gc2VxdWVuY2U7CisgIGlmIChDT05TUCAo
c2VxdWVuY2UpKSByZXR1cm4gY29weV9saXN0IChzZXF1ZW5jZSk7CisgIGlmIChTVFJJTkdQIChz
ZXF1ZW5jZSkpIHJldHVybiBjb25jYXRlbmF0ZSAoMSwgJnNlcXVlbmNlLCBRc3RyaW5nLCAwKTsK
KyAgaWYgKFZFQ1RPUlAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdGVuYXRlICgxLCAmc2VxdWVu
Y2UsIFF2ZWN0b3IsIDApOworICBpZiAoQklUX1ZFQ1RPUlAgKHNlcXVlbmNlKSkKKyAgICByZXR1
cm4gY29uY2F0ZW5hdGUgKDEsICZzZXF1ZW5jZSwgUWJpdF92ZWN0b3IsIDApOwogCiAgIGNoZWNr
X2xvc2luZ19ieXRlY29kZSAoImNvcHktc2VxdWVuY2UiLCBzZXF1ZW5jZSk7CiAgIHNlcXVlbmNl
ID0gd3JvbmdfdHlwZV9hcmd1bWVudCAoUXNlcXVlbmNlcCwgc2VxdWVuY2UpOwogICBnb3RvIGFn
YWluOwogfQotCi1zdHJ1Y3QgbWVyZ2Vfc3RyaW5nX2V4dGVudHNfc3RydWN0Ci17Ci0gIExpc3Bf
T2JqZWN0IHN0cmluZzsKLSAgQnl0ZWNvdW50IGVudHJ5X29mZnNldDsKLSAgQnl0ZWNvdW50IGVu
dHJ5X2xlbmd0aDsKLX07Ci0KLXN0YXRpYyBMaXNwX09iamVjdAotY29uY2F0IChpbnQgbmFyZ3Ms
IExpc3BfT2JqZWN0ICphcmdzLAotICAgICAgICBlbnVtIGNvbmNhdF90YXJnZXRfdHlwZSB0YXJn
ZXRfdHlwZSwKLSAgICAgICAgaW50IGxhc3Rfc3BlY2lhbCkKLXsKLSAgTGlzcF9PYmplY3QgdmFs
OwotICBMaXNwX09iamVjdCB0YWlsID0gUW5pbDsKLSAgaW50IHRvaW5kZXg7Ci0gIGludCBhcmdu
dW07Ci0gIExpc3BfT2JqZWN0IGxhc3RfdGFpbDsKLSAgTGlzcF9PYmplY3QgcHJldjsKLSAgc3Ry
dWN0IG1lcmdlX3N0cmluZ19leHRlbnRzX3N0cnVjdCAqYXJnc19tc2UgPSAwOwotICBJYnl0ZSAq
c3RyaW5nX3Jlc3VsdCA9IDA7Ci0gIElieXRlICpzdHJpbmdfcmVzdWx0X3B0ciA9IDA7Ci0gIHN0
cnVjdCBnY3BybyBnY3BybzE7Ci0gIGludCBzZGVwID0gc3BlY3BkbF9kZXB0aCAoKTsKLQotICAv
KiBUaGUgbW9kdXMgb3BlcmFuZGkgaW4gRW1hY3MgaXMgImNhbGxlciBnYy1wcm90ZWN0cyBhcmdz
Ii4KLSAgICAgSG93ZXZlciwgY29uY2F0IGlzIGNhbGxlZCBtYW55IHRpbWVzIGluIEVtYWNzIG9u
IGZyZXNobHkKLSAgICAgY3JlYXRlZCBzdHVmZi4gIFNvIHdlIGhlbHAgdGhvc2UgY2FsbGVycyBv
dXQgYnkgcHJvdGVjdGluZwotICAgICB0aGUgYXJncyBvdXJzZWx2ZXMgdG8gc2F2ZSB0aGVtIGEg
bG90IG9mIHRlbXBvcmFyeS12YXJpYWJsZQotICAgICBncmllZi4gKi8KLQotICBHQ1BSTzEgKGFy
Z3NbMF0pOwotICBnY3BybzEubnZhcnMgPSBuYXJnczsKLQotI2lmZGVmIEkxOE4zCi0gIC8qICMj
IyMgaWYgdGhlIHJlc3VsdCBpcyBhIHN0cmluZyBhbmQgYW55IG9mIHRoZSBzdHJpbmdzIGhhdmUg
YSBzdHJpbmcKLSAgICAgZm9yIHRoZSBgc3RyaW5nLXRyYW5zbGF0YWJsZScgcHJvcGVydHksIHRo
ZW4gY29uY2F0IHNob3VsZCBhbHNvCi0gICAgIGNvbmNhdCB0aGUgYXJncyBidXQgdXNlIHRoZSBg
c3RyaW5nLXRyYW5zbGF0YWJsZScgc3RyaW5ncywgYW5kIHN0b3JlCi0gICAgIHRoZSByZXN1bHQg
aW4gdGhlIHJldHVybmVkIHN0cmluZydzIGBzdHJpbmctdHJhbnNsYXRhYmxlJyBwcm9wZXJ0eS4g
Ki8KLSNlbmRpZgotICBpZiAodGFyZ2V0X3R5cGUgPT0gY19zdHJpbmcpCi0gICAgYXJnc19tc2Ug
PSBhbGxvY2FfYXJyYXkgKHN0cnVjdCBtZXJnZV9zdHJpbmdfZXh0ZW50c19zdHJ1Y3QsIG5hcmdz
KTsKLQotICAvKiBJbiBhcHBlbmQsIHRoZSBsYXN0IGFyZyBpc24ndCB0cmVhdGVkIGxpa2UgdGhl
IG90aGVycyAqLwotICBpZiAobGFzdF9zcGVjaWFsICYmIG5hcmdzID4gMCkKLSAgICB7Ci0gICAg
ICBuYXJncy0tOwotICAgICAgbGFzdF90YWlsID0gYXJnc1tuYXJnc107Ci0gICAgfQotICBlbHNl
Ci0gICAgbGFzdF90YWlsID0gUW5pbDsKLQotICAvKiBDaGVjayBhbmQgY29lcmNlIHRoZSBhcmd1
bWVudHMuICovCi0gIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQot
ICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IHNlcSA9IGFyZ3NbYXJnbnVtXTsKLSAgICAgIGlmIChM
SVNUUCAoc2VxKSkKLSAgICAgICAgOwotICAgICAgZWxzZSBpZiAoVkVDVE9SUCAoc2VxKSB8fCBT
VFJJTkdQIChzZXEpIHx8IEJJVF9WRUNUT1JQIChzZXEpKQotICAgICAgICA7Ci0jaWYgMAkJCQkv
KiByZW1vdmVkIGZvciBYRW1hY3MgMjEgKi8KLSAgICAgIGVsc2UgaWYgKEZJWE5VTVAgKHNlcSkp
Ci0gICAgICAgIC8qIFRoaXMgaXMgdG9vIHJldm9sdGluZyB0byB0aGluayBhYm91dCBidXQgbWFp
bnRhaW5zCi0gICAgICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBGU0YgKGFuZCBsb3RzIGFuZCBs
b3RzIG9mIG9sZCBjb2RlKS4gKi8KLSAgICAgICAgYXJnc1thcmdudW1dID0gRm51bWJlcl90b19z
dHJpbmcgKHNlcSk7Ci0jZW5kaWYKLSAgICAgIGVsc2UKLQl7Ci0gICAgICAgICAgY2hlY2tfbG9z
aW5nX2J5dGVjb2RlICgiY29uY2F0Iiwgc2VxKTsKLSAgICAgICAgICBhcmdzW2FyZ251bV0gPSB3
cm9uZ190eXBlX2FyZ3VtZW50IChRc2VxdWVuY2VwLCBzZXEpOwotCX0KLQotICAgICAgaWYgKGFy
Z3NfbXNlKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFNUUklOR1AgKHNlcSkpCi0gICAgICAg
ICAgICBhcmdzX21zZVthcmdudW1dLnN0cmluZyA9IHNlcTsKLSAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBhcmdzX21zZVthcmdudW1dLnN0cmluZyA9IFFuaWw7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgewotICAgIC8qIENoYXJjb3VudCBpcyBhIG1pc25vbWVyIGhlcmUgYXMgd2UgbWlnaHQg
YmUgZGVhbGluZyB3aXRoIHRoZQotICAgICAgIGxlbmd0aCBvZiBhIHZlY3RvciBvciBsaXN0LCBi
dXQgZW1waGFzaXplcyB0aGF0IHdlJ3JlIG5vdCBkZWFsaW5nCi0gICAgICAgd2l0aCBCeXRlY291
bnRzIGluIHN0cmluZ3MgKi8KLSAgICBDaGFyY291bnQgdG90YWxfbGVuZ3RoOwotCi0gICAgZm9y
IChhcmdudW0gPSAwLCB0b3RhbF9sZW5ndGggPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKysp
Ci0gICAgICB7Ci0gICAgICAgIENoYXJjb3VudCB0aGlzbGVuID0gWEZJWE5VTSAoRmxlbmd0aCAo
YXJnc1thcmdudW1dKSk7Ci0gICAgICAgIHRvdGFsX2xlbmd0aCArPSB0aGlzbGVuOwotICAgICAg
fQotCi0gICAgc3dpdGNoICh0YXJnZXRfdHlwZSkKLSAgICAgIHsKLSAgICAgIGNhc2UgY19jb25z
OgotICAgICAgICBpZiAodG90YWxfbGVuZ3RoID09IDApCi0JICB7Ci0JICAgIHVuYmluZF90byAo
c2RlcCk7Ci0JICAgIC8qIEluIGFwcGVuZCwgaWYgYWxsIGJ1dCBsYXN0IGFyZyBhcmUgbmlsLCBy
ZXR1cm4gbGFzdCBhcmcgKi8KLQkgICAgUkVUVVJOX1VOR0NQUk8gKGxhc3RfdGFpbCk7Ci0JICB9
Ci0gICAgICAgIHZhbCA9IEZtYWtlX2xpc3QgKG1ha2VfZml4bnVtICh0b3RhbF9sZW5ndGgpLCBR
bmlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNfdmVjdG9yOgotICAgICAgICB2YWwg
PSBtYWtlX3ZlY3RvciAodG90YWxfbGVuZ3RoLCBRbmlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIGNfYml0X3ZlY3RvcjoKLSAgICAgICAgdmFsID0gbWFrZV9iaXRfdmVjdG9yICh0b3Rh
bF9sZW5ndGgsIFF6ZXJvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNfc3RyaW5nOgot
CS8qIFdlIGRvbid0IG1ha2UgdGhlIHN0cmluZyB5ZXQgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRo
ZQotCSAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMuICBUaGlzIGxvb3Agd2FzIGZvcm1lcmx5IHdy
aXR0ZW4KLQkgICB0byBjYWxsIEZtYWtlX3N0cmluZygpIGhlcmUgYW5kIHRoZW4gY2FsbCBzZXRf
c3RyaW5nX2NoYXIoKQotCSAgIGZvciBlYWNoIGNoYXIuICBUaGlzIHNlZW1zIGxvZ2ljYWwgZW5v
dWdoIGJ1dCBpcyB3YWFhYWFhYWF5Ci0JICAgc2xvdyAtLSBzZXRfc3RyaW5nX2NoYXIoKSBoYXMg
dG8gc2NhbiB0aGUgd2hvbGUgc3RyaW5nIHVwCi0JICAgdG8gdGhlIHBsYWNlIHdoZXJlIHRoZSBz
dWJzdGl0dXRpb24gaXMgY2FsbGVkIGZvciBpbiBvcmRlcgotCSAgIHRvIGZpbmQgdGhlIHBsYWNl
IHRvIGNoYW5nZSwgYW5kIG1heSBoYXZlIHRvIGRvIHNvbWUKLQkgICByZWFsbG9jKClpbmcgaW4g
b3JkZXIgdG8gbWFrZSB0aGUgY2hhciBmaXQgcHJvcGVybHkuCi0JICAgTyhOXjIpIHl1Y2thZ2Uu
ICovCi0gICAgICAgIHZhbCA9IFFuaWw7Ci0Jc3RyaW5nX3Jlc3VsdCA9Ci0JICAoSWJ5dGUgKikg
TUFMTE9DX09SX0FMTE9DQSAodG90YWxfbGVuZ3RoICogTUFYX0lDSEFSX0xFTik7Ci0Jc3RyaW5n
X3Jlc3VsdF9wdHIgPSBzdHJpbmdfcmVzdWx0OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6Ci0JdmFsID0gUW5pbDsKLSAgICAgICAgQUJPUlQgKCk7Ci0gICAgICB9Ci0gIH0KLQotCi0g
IGlmIChDT05TUCAodmFsKSkKLSAgICB0YWlsID0gdmFsLCB0b2luZGV4ID0gLTE7CS8qIC0xIGlu
IHRvaW5kZXggaXMgZmxhZyB3ZSBhcmUKLQkJCQkgICAgbWFraW5nIGEgbGlzdCAqLwotICBlbHNl
Ci0gICAgdG9pbmRleCA9IDA7Ci0KLSAgcHJldiA9IFFuaWw7Ci0KLSAgZm9yIChhcmdudW0gPSAw
OyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCi0gICAgewotICAgICAgQ2hhcmNvdW50IHRoaXNs
ZW5pID0gMDsKLSAgICAgIENoYXJjb3VudCB0aGlzaW5kZXggPSAwOwotICAgICAgTGlzcF9PYmpl
Y3Qgc2VxID0gYXJnc1thcmdudW1dOwotICAgICAgSWJ5dGUgKnN0cmluZ19zb3VyY2VfcHRyID0g
MDsKLSAgICAgIElieXRlICpzdHJpbmdfcHJldl9yZXN1bHRfcHRyID0gc3RyaW5nX3Jlc3VsdF9w
dHI7Ci0KLSAgICAgIGlmICghQ09OU1AgKHNlcSkpCi0JewotCSAgdGhpc2xlbmkgPSBYRklYTlVN
IChGbGVuZ3RoIChzZXEpKTsKLQl9Ci0gICAgICBpZiAoU1RSSU5HUCAoc2VxKSkKLQlzdHJpbmdf
c291cmNlX3B0ciA9IFhTVFJJTkdfREFUQSAoc2VxKTsKLQotICAgICAgd2hpbGUgKDEpCi0Jewot
CSAgTGlzcF9PYmplY3QgZWx0OwotCi0JICAvKiBXZSd2ZSBjb21lIHRvIHRoZSBlbmQgb2YgdGhp
cyBhcmcsIHNvIGV4aXQuICovCi0JICBpZiAoTklMUCAoc2VxKSkKLQkgICAgYnJlYWs7Ci0KLQkg
IC8qIEZldGNoIG5leHQgZWxlbWVudCBvZiBgc2VxJyBhcmcgaW50byBgZWx0JyAqLwotCSAgaWYg
KENPTlNQIChzZXEpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBlbHQgPSBYQ0FSIChz
ZXEpOwotICAgICAgICAgICAgICBzZXEgPSBYQ0RSIChzZXEpOwotICAgICAgICAgICAgfQotCSAg
ZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKHRoaXNpbmRleCA+PSB0aGlzbGVuaSkKLQkJYnJlYWs7
Ci0KLQkgICAgICBpZiAoU1RSSU5HUCAoc2VxKSkKLQkJewotCQkgIGVsdCA9IG1ha2VfY2hhciAo
aXRleHRfaWNoYXIgKHN0cmluZ19zb3VyY2VfcHRyKSk7Ci0JCSAgSU5DX0lCWVRFUFRSIChzdHJp
bmdfc291cmNlX3B0cik7Ci0JCX0KLQkgICAgICBlbHNlIGlmIChWRUNUT1JQIChzZXEpKQotICAg
ICAgICAgICAgICAgIGVsdCA9IFhWRUNUT1JfREFUQSAoc2VxKVt0aGlzaW5kZXhdOwotCSAgICAg
IGVsc2UgaWYgKEJJVF9WRUNUT1JQIChzZXEpKQotCQllbHQgPSBtYWtlX2ZpeG51bSAoYml0X3Zl
Y3Rvcl9iaXQgKFhCSVRfVkVDVE9SIChzZXEpLAotCQkJCQkJdGhpc2luZGV4KSk7Ci0gICAgICAg
ICAgICAgIGVsc2UKLQkJZWx0ID0gRmVsdCAoc2VxLCBtYWtlX2ZpeG51bSAodGhpc2luZGV4KSk7
Ci0gICAgICAgICAgICAgIHRoaXNpbmRleCsrOwotCSAgICB9Ci0KLQkgIC8qIFN0b3JlIGludG8g
cmVzdWx0ICovCi0JICBpZiAodG9pbmRleCA8IDApCi0JICAgIHsKLQkgICAgICAvKiB0b2luZGV4
IG5lZ2F0aXZlIG1lYW5zIHdlIGFyZSBtYWtpbmcgYSBsaXN0ICovCi0JICAgICAgWENBUiAodGFp
bCkgPSBlbHQ7Ci0JICAgICAgcHJldiA9IHRhaWw7Ci0JICAgICAgdGFpbCA9IFhDRFIgKHRhaWwp
OwotCSAgICB9Ci0JICBlbHNlIGlmIChWRUNUT1JQICh2YWwpKQotCSAgICBYVkVDVE9SX0RBVEEg
KHZhbClbdG9pbmRleCsrXSA9IGVsdDsKLQkgIGVsc2UgaWYgKEJJVF9WRUNUT1JQICh2YWwpKQot
CSAgICB7Ci0JICAgICAgQ0hFQ0tfQklUIChlbHQpOwotCSAgICAgIHNldF9iaXRfdmVjdG9yX2Jp
dCAoWEJJVF9WRUNUT1IgKHZhbCksIHRvaW5kZXgrKywgWEZJWE5VTSAoZWx0KSk7Ci0JICAgIH0K
LQkgIGVsc2UKLQkgICAgewotCSAgICAgIENIRUNLX0NIQVJfQ09FUkNFX0lOVCAoZWx0KTsKLQkg
ICAgICBzdHJpbmdfcmVzdWx0X3B0ciArPSBzZXRfaXRleHRfaWNoYXIgKHN0cmluZ19yZXN1bHRf
cHRyLAotCQkJCQkJICAgIFhDSEFSIChlbHQpKTsKLQkgICAgfQotCX0KLSAgICAgIGlmIChhcmdz
X21zZSkKLQl7Ci0JICBhcmdzX21zZVthcmdudW1dLmVudHJ5X29mZnNldCA9Ci0JICAgIHN0cmlu
Z19wcmV2X3Jlc3VsdF9wdHIgLSBzdHJpbmdfcmVzdWx0OwotCSAgYXJnc19tc2VbYXJnbnVtXS5l
bnRyeV9sZW5ndGggPQotCSAgICBzdHJpbmdfcmVzdWx0X3B0ciAtIHN0cmluZ19wcmV2X3Jlc3Vs
dF9wdHI7Ci0JfQotICAgIH0KLQotICAvKiBOb3cgd2UgZmluYWxseSBtYWtlIHRoZSBzdHJpbmcu
ICovCi0gIGlmICh0YXJnZXRfdHlwZSA9PSBjX3N0cmluZykKLSAgICB7Ci0gICAgICB2YWwgPSBt
YWtlX3N0cmluZyAoc3RyaW5nX3Jlc3VsdCwgc3RyaW5nX3Jlc3VsdF9wdHIgLSBzdHJpbmdfcmVz
dWx0KTsKLSAgICAgIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQot
CXsKLQkgIGlmIChTVFJJTkdQIChhcmdzX21zZVthcmdudW1dLnN0cmluZykpCi0JICAgIGNvcHlf
c3RyaW5nX2V4dGVudHMgKHZhbCwgYXJnc19tc2VbYXJnbnVtXS5zdHJpbmcsCi0JCQkJIGFyZ3Nf
bXNlW2FyZ251bV0uZW50cnlfb2Zmc2V0LCAwLAotCQkJCSBhcmdzX21zZVthcmdudW1dLmVudHJ5
X2xlbmd0aCk7Ci0JfQotICAgIH0KLQotICBpZiAoIU5JTFAgKHByZXYpKQotICAgIFhDRFIgKHBy
ZXYpID0gbGFzdF90YWlsOwotCi0gIHVuYmluZF90byAoc2RlcCk7Ci0gIFJFVFVSTl9VTkdDUFJP
ICh2YWwpOwotfQogDAogREVGVU4gKCJjb3B5LWFsaXN0IiwgRmNvcHlfYWxpc3QsIDEsIDEsIDAs
IC8qCiBSZXR1cm4gYSBjb3B5IG9mIEFMSVNULgpAQCAtNzM2LDcgKzQwMCw3IEBACiAgICAgcmV0
dXJuIGFsaXN0OwogICBDSEVDS19DT05TIChhbGlzdCk7CiAKLSAgYWxpc3QgPSBjb25jYXQgKDEs
ICZhbGlzdCwgY19jb25zLCAwKTsKKyAgYWxpc3QgPSBjb25jYXRlbmF0ZSAoMSwgJmFsaXN0LCBR
bGlzdCwgMCk7CiAgIGZvciAodGFpbCA9IGFsaXN0OyBDT05TUCAodGFpbCk7IHRhaWwgPSBYQ0RS
ICh0YWlsKSkKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBjYXIgPSBYQ0FSICh0YWlsKTsKQEAg
LTIzNTIsMjAgKzIwMTYsMjUgQEAKIExpc3BfT2JqZWN0CiBuY29uYzIgKExpc3BfT2JqZWN0IGFy
ZzEsIExpc3BfT2JqZWN0IGFyZzIpCiB7Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIHN0cnVj
dCBnY3BybyBnY3BybzE7Ci0gIGFyZ3NbMF0gPSBhcmcxOwotICBhcmdzWzFdID0gYXJnMjsKLQot
ICBHQ1BSTzEgKGFyZ3NbMF0pOwotICBnY3BybzEubnZhcnMgPSAyOwotCi0gIFJFVFVSTl9VTkdD
UFJPIChieXRlY29kZV9uY29uYzIgKGFyZ3MpKTsKKyAgTGlzcF9PYmplY3QgYXJnc1tdID0geyBh
cmcxLCBhcmcyIH07CisgIHJldHVybiBieXRlY29kZV9uY29uYzIgKGFyZ3MpOwogfQogCiBMaXNw
X09iamVjdAogYnl0ZWNvZGVfbmNvbmMyIChMaXNwX09iamVjdCAqYXJncykKIHsKKyAgc3RydWN0
IGdjcHJvIGdjcHJvMTsKKworICAvKiBUaGUgbW9kdXMgb3BlcmFuZGkgaW4gRW1hY3MgaXMgImNh
bGxlciBnYy1wcm90ZWN0cyBhcmdzIi4gIEluIHRoZSBub3JtYWwKKyAgICAgY291cnNlIG9mIGV2
ZW50cywgd2UgZG9uJ3QgZnVuY2FsbCBhbmQgdGh1cyBkb24ndCBHQywgc28gdGhpcyB3b3VsZCBu
b3QKKyAgICAgbWF0dGVyLCBidXQgd3JvbmdfdHlwZV9hcmd1bWVudCgpIHNpZ25hbHMgYSBjb250
aW51YWJsZSBlcnJvciwgd2hpY2ggd2lsbAorICAgICBmdW5jYWxsIGFuZCBHQy4gVGhlcmUgaXMg
aW5jb21wZXRlIEdDIHByb3RlY3Rpb24gb2Ygb3VyIGFyZ3VtZW50cyB3aGVuCisgICAgIG5jb25j
MigpIGlzIGNhbGxlZCBmcm9tIEMuIEdDUFJPIG91ciBhcmdzLgorCisgICAgIFRoaXMgZG9lcyBu
b3QgYXBwbHkgdG8gRm5jb25jKCkuICovCisgIEdDUFJPMSAoYXJnc1swXSk7CisgIGdjcHJvMS5u
dmFycyA9IDI7CisKICByZXRyeToKIAogICBpZiAoQ09OU1AgKGFyZ3NbMF0pKQpAQCAtMjM4Niwx
MSArMjA1NSwxMSBAQAogCSAgICBzaWduYWxfY2lyY3VsYXJfbGlzdF9lcnJvciAoYXJnc1swXSk7
CiAJfQogICAgICAgWENEUiAoaGFyZSkgPSBhcmdzWzFdOwotICAgICAgcmV0dXJuIGFyZ3NbMF07
CisgICAgICBSRVRVUk5fVU5HQ1BSTyAoYXJnc1swXSk7CiAgICAgfQogICBlbHNlIGlmIChOSUxQ
IChhcmdzWzBdKSkKICAgICB7Ci0gICAgICByZXR1cm4gYXJnc1sxXTsKKyAgICAgIFJFVFVSTl9V
TkdDUFJPIChhcmdzWzFdKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBAIC0yNDEyLDE3ICsyMDgx
LDYgQEAKICAgICAgICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykpCiB7CiAgIGludCBh
cmdudW0gPSAwOwotICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwotCi0gIC8qIFRoZSBtb2R1cyBvcGVy
YW5kaSBpbiBFbWFjcyBpcyAiY2FsbGVyIGdjLXByb3RlY3RzIGFyZ3MiLgotICAgICBIb3dldmVy
LCBuY29uYyAocGFydGljdWxhcmx5IG5jb25jMiAoKSkgaXMgY2FsbGVkIG1hbnkgdGltZXMKLSAg
ICAgaW4gRW1hY3Mgb24gZnJlc2hseSBjcmVhdGVkIHN0dWZmIChlLmcuIHlvdSBzZWUgdGhlIGlk
aW9tCi0gICAgIG5jb25jMiAoRmNvcHlfc2VxdWVuY2UgKGZvbyksIGJhcikgYSBsb3QpLiAgU28g
d2UgaGVscCB0aG9zZQotICAgICBjYWxsZXJzIG91dCBieSBwcm90ZWN0aW5nIHRoZSBhcmdzIG91
cnNlbHZlcyB0byBzYXZlIHRoZW0KLSAgICAgYSBsb3Qgb2YgdGVtcG9yYXJ5LXZhcmlhYmxlIGdy
aWVmLiAqLwotCi0gIEdDUFJPMSAoYXJnc1swXSk7Ci0gIGdjcHJvMS5udmFycyA9IG5hcmdzOwog
CiAgIHdoaWxlIChhcmdudW0gPCBuYXJncykKICAgICB7CkBAIC0yNDY4LDE5ICsyMTI2LDE5IEBA
CiAJCSAgZ290byByZXRyeV9uZXh0OwogCQl9CiAJICAgIH0KLQkgIFJFVFVSTl9VTkdDUFJPICh2
YWwpOworCSAgcmV0dXJuIHZhbDsKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoTklMUCAodmFs
KSkKIAlhcmdudW0rKzsKICAgICAgIGVsc2UgaWYgKGFyZ251bSA9PSBuYXJncyAtIDEpIC8qIGxh
c3QgYXJnPyAqLwotCVJFVFVSTl9VTkdDUFJPICh2YWwpOworCXJldHVybiB2YWw7CiAgICAgICBl
bHNlCiAJewogCSAgYXJnc1thcmdudW1dID0gd3JvbmdfdHlwZV9hcmd1bWVudCAoUWxpc3RwLCB2
YWwpOwogCSAgZ290byByZXRyeTsKIAl9CiAgICAgfQotICBSRVRVUk5fVU5HQ1BSTyAoUW5pbCk7
ICAvKiBObyBub24tbmlsIGFyZ3MgcHJvdmlkZWQuICovCisgIHJldHVybiBRbmlsOyAgLyogTm8g
bm9uLW5pbCBhcmdzIHByb3ZpZGVkLiAqLwogfQogCiAMCkBAIC0zMzI4LDEwICsyOTg2LDYgQEAK
ICAgREVGU1VCUiAoRnN0cmluZ19lcXVhbCk7CiAgIERFRlNVQlIgKEZjb21wYXJlX3N0cmluZ3Mp
OwogICBERUZTVUJSIChGc3RyaW5nX2xlc3NwKTsKLSAgREVGU1VCUiAoRmFwcGVuZCk7Ci0gIERF
RlNVQlIgKEZjb25jYXQpOwotICBERUZTVUJSIChGdmNvbmNhdCk7Ci0gIERFRlNVQlIgKEZidmNv
bmNhdCk7CiAgIERFRlNVQlIgKEZjb3B5X2xpc3QpOwogICBERUZTVUJSIChGY29weV9zZXF1ZW5j
ZSk7CiAgIERFRlNVQlIgKEZjb3B5X2FsaXN0KTsKZGlmZiAtciBjYmUxMDcxNDFhZmUgLXIgMTdh
M2M2YjUyZGZkIHNyYy9nYy5jCi0tLSBhL3NyYy9nYy5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAx
NiArMDEwMAorKysgYi9zcmMvZ2MuYwlUaHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAg
LTE4NjUsNyArMTg2NSw3IEBACiAJICAgICAgYXJnc1swXSA9IChTVFJJTkdQIChWZ2NfbWVzc2Fn
ZSkgPyBWZ2NfbWVzc2FnZSA6CiAJCQkgYnVpbGRfbXNnX3N0cmluZyAoZ2NfZGVmYXVsdF9tZXNz
YWdlKSk7CiAJICAgICAgYXJnc1sxXSA9IGJ1aWxkX2FzY3N0cmluZyAoIi4uLiIpOwotCSAgICAg
IHdob2xlX21zZyA9IEZjb25jYXQgKDIsIGFyZ3MpOworCSAgICAgIHdob2xlX21zZyA9IGNvbmNh
dGVuYXRlICgyLCBhcmdzLCBRc3RyaW5nLCAwKTsKIAkgICAgICBlY2hvX2FyZWFfbWVzc2FnZSAo
ZiwgKElieXRlICopIDAsIHdob2xlX21zZywgMCwgLTEsCiAJCQkJIFFnYXJiYWdlX2NvbGxlY3Rp
bmcpOwogCSAgICB9CkBAIC0xODkzLDcgKzE4OTMsNyBAQAogCQkgIGFyZ3NbMF0gPSAoU1RSSU5H
UCAoVmdjX21lc3NhZ2UpID8gVmdjX21lc3NhZ2UgOgogCQkJICAgICBidWlsZF9tc2dfc3RyaW5n
IChnY19kZWZhdWx0X21lc3NhZ2UpKTsKIAkJICBhcmdzWzFdID0gYnVpbGRfbXNnX3N0cmluZyAo
Ii4uLiBkb25lIik7Ci0JCSAgd2hvbGVfbXNnID0gRmNvbmNhdCAoMiwgYXJncyk7CisJCSAgd2hv
bGVfbXNnID0gY29uY2F0ZW5hdGUgKDIsIGFyZ3MsIFFzdHJpbmcsIDApOwogCQkgIGVjaG9fYXJl
YV9tZXNzYWdlIChzZWxlY3RlZF9mcmFtZSAoKSwgKElieXRlICopIDAsCiAJCQkJICAgICB3aG9s
ZV9tc2csIDAsIC0xLAogCQkJCSAgICAgUWdhcmJhZ2VfY29sbGVjdGluZyk7CmRpZmYgLXIgY2Jl
MTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBzcmMvZ2VuZXJhbC1zbG90cy5oCi0tLSBhL3NyYy9n
ZW5lcmFsLXNsb3RzLmgJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL3NyYy9n
ZW5lcmFsLXNsb3RzLmgJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC02MCw2ICs2
MCw3IEBACiBTWU1CT0wgKFFiaWdmbG9hdCk7CiBTWU1CT0wgKFFiaW5hcnkpOwogU1lNQk9MIChR
Yml0bWFwKTsKK1NZTUJPTCAoUWJpdF92ZWN0b3IpOwogU1lNQk9MIChRYm9vbGVhbik7CiBTWU1C
T0xfS0VZV09SRCAoUV9ib3JkZXIpOwogU1lNQk9MIChRYm90dG9tKTsKQEAgLTMxMiw2ICszMTMs
NyBAQAogU1lNQk9MIChRdXNlcl9kZWZhdWx0KTsKIFNZTUJPTF9LRVlXT1JEIChRX3ZhbHVlKTsK
IFNZTUJPTCAoUXZhbHVlX2Fzc29jKTsKK1NZTUJPTCAoUXZlY3Rvcik7CiBTWU1CT0wgKFF2ZXJ0
aWNhbCk7CiBTWU1CT0xfS0VZV09SRCAoUV92ZXJ0aWNhbGx5X2p1c3RpZnkpOwogU1lNQk9MX0tF
WVdPUkQgKFFfdmlzaWJsZSk7CmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBz
cmMvZ3V0dGVyLmMKLS0tIGEvc3JjL2d1dHRlci5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiAr
MDEwMAorKysgYi9zcmMvZ3V0dGVyLmMJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBA
IC0yNDMsNyArMjQzLDcgQEAKIAl9CiAgICAgfQogCi0gIHJldHVybiBGY29uY2F0IChuYXJncywg
YXJncyk7CisgIHJldHVybiBjb25jYXRlbmF0ZSAobmFyZ3MsIGFyZ3MsIFFzdHJpbmcsIDApOwog
fQogCiAvKiBTaXppbmcgZ3V0dGVycyBpcyBhIHBhaW4gc28gd2UgdHJ5IGFuZCBoZWxwIHRoZSB1
c2VyIGJ5IGRldGVybWluaW5nCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBz
cmMvbGlzcC5oCi0tLSBhL3NyYy9saXNwLmgJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAw
CisrKyBiL3NyYy9saXNwLmgJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC01ODA0
LDYgKzU4MDQsOSBAQAogRVhGVU4gKEZjbGVhcl9zdHJpbmcsIDEpOwogRVhGVU4gKEZyZXBsYWNl
LCBNQU5ZKTsKIAorTGlzcF9PYmplY3QgY29uY2F0ZW5hdGUgKGludCBuc2VxdWVuY2VzLCBMaXNw
X09iamVjdCAqc2VxdWVuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0
IHJlc3VsdF90eXBlLCBCb29saW50IHJldXNlX2xhc3RfbGlzdHApOworCiAvKiBEZWZpbmVkIGlu
IHNpZ25hbC5jICovCiB2b2lkIGluaXRfaW50ZXJydXB0c19sYXRlICh2b2lkKTsKIApkaWZmIC1y
IGNiZTEwNzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgc3JjL3NlcXVlbmNlLmMKLS0tIGEvc3JjL3Nl
cXVlbmNlLmMJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL3NyYy9zZXF1ZW5j
ZS5jCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtNDU1Niw3ICs0NTU2LDcgQEAK
ICAgZm9yIChpID0gMTsgaSA8IG5hcmdzMDsgaSArPSAyKQogICAgIGFyZ3MwW2ldID0gc2VwYXJh
dG9yOwogCi0gIHJldHVybiBGY29uY2F0IChuYXJnczAsIGFyZ3MwKTsKKyAgcmV0dXJuIGNvbmNh
dGVuYXRlIChuYXJnczAsIGFyZ3MwLCBRc3RyaW5nLCAwKTsKIH0KIAogREVGVU4gKCJtYXBjYXIq
IiwgRm1hcGNhclgsIDIsIE1BTlksIDAsIC8qCkBAIC00NjI3LDExICs0NjI3LDE0IEBACiB7CiAg
IEVsZW1jb3VudCBsZW4gPSBzaG9ydGVzdF9sZW5ndGhfYW1vbmdfc2VxdWVuY2VzIChuYXJncyAt
IDEsIGFyZ3MgKyAxKTsKICAgTGlzcF9PYmplY3QgZnVuY3Rpb24gPSBhcmdzWzBdLCAqcmVzdWx0
ID0gYWxsb2NhX2FycmF5IChMaXNwX09iamVjdCwgbGVuKTsKKyAgc3RydWN0IGdjcHJvIGdjcHJv
MTsKIAogICBtYXBjYXJYIChsZW4sIHJlc3VsdCwgUW5pbCwgZnVuY3Rpb24sIG5hcmdzIC0gMSwg
YXJncyArIDEsIFFtYXBjYW4pOwogCi0gIC8qICMnbmNvbmMgR0NQUk9zIGl0cyBhcmdzIGluIGNh
c2Ugb2Ygc2lnbmFscyBhbmQgZXJyb3IuICovCi0gIHJldHVybiBGbmNvbmMgKGxlbiwgcmVzdWx0
KTsKKyAgR0NQUk8xIChyZXN1bHRbMF0pOworICBnY3BybzEubnZhcnMgPSBsZW47CisKKyAgUkVU
VVJOX1VOR0NQUk8gKEZuY29uYyAobGVuLCByZXN1bHQpKTsKIH0KIAogREVGVU4gKCJtYXBjIiwg
Rm1hcGMsIDIsIE1BTlksIDAsIC8qCkBAIC00ODAzLDYgKzQ4MDYsMzU2IEBACiB9CiAKIAwKK3N0
cnVjdCBtZXJnZV9zdHJpbmdfZXh0ZW50c19zdHJ1Y3QKK3sKKyAgTGlzcF9PYmplY3Qgc3RyaW5n
OworICBCeXRlY291bnQgZW50cnlfb2Zmc2V0OworICBCeXRlY291bnQgZW50cnlfbGVuZ3RoOwor
fTsKKworTGlzcF9PYmplY3QKK2NvbmNhdGVuYXRlIChpbnQgbnNlcXVlbmNlcywgTGlzcF9PYmpl
Y3QgKnNlcXVlbmNlcywKKyAgICAgICAgICAgICBMaXNwX09iamVjdCByZXN1bHRfdHlwZSwgQm9v
bGludCByZXVzZV9sYXN0X2xpc3RwKQoreworICBMaXNwX09iamVjdCAqbGlzcF9zdGFnaW5nID0g
TlVMTCwgKmxpc3BfY3Vyc29yID0gTlVMTCwgcmVzdWx0ID0gUW5pbDsKKyAgRWxlbWNvdW50IGlp
LCBqaiwgc3RhZ2luZ19sZW4gPSAwOworICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzI7CisK
KyAgLyogV2UgY2FuIEdDIGluICMnY29lcmNlLCBhbmQgaW4gY29weV9zdHJpbmdfZXh0ZW50cygp
LiBPdXIgY2FsbGVycyBkb24ndAorICAgICBhbGwgR0NQUk8gb3VyIGFyZ3VtZW50cywgZGVzcGl0
ZSB0aGF0IHRoaXMgaXMgdGhlIHVzdWFsIHByb3RvY29sLCBhbmQgd2UKKyAgICAgbmVlZCB0byBH
Q1BSTyBSRVNVTFQgb3Vyc2VsdmVzIGFueXdheS4gKi8KKyAgR0NQUk8yIChzZXF1ZW5jZXNbMF0s
IHJlc3VsdCk7CisgIGdjcHJvMS5udmFycyA9IG5zZXF1ZW5jZXM7CisKKyAgLyogU3RyaW5nIHJl
c3VsdCBpcyB0aGUgY29tbW9uZXN0IGNhc2UsIGFuZCBjYW4gYmUgdmVyeSBjaGVhcCBmb3IKKyAg
ICAgZXhjbHVzaXZlbHktc3RyaW5nIGFyZ3VtZW50czsgZ2V0IHRoZSBjb21wbGV0ZSBieXRlIGxl
bmd0aCwgbWFrZSBhbgorICAgICB1bmluaXRlZCBzdHJpbmcgb2YgdGhhdCBsZW5ndGgsIGFuZCBt
ZW1jcHkgYWxsIHRoZSBhcmd1bWVudHMnIHN0cmluZyBkYXRhCisgICAgIGludG8gdGhlIG5ldyBz
dHJpbmcsIE8oKyBOU0VRVUVOQ0VTIChyZWR1Y2UgIycrIFNFUVVFTkNFUyA6a2V5CisgICAgICMn
Ynl0ZS1sZW5ndGgpKSwgbm8gbmVlZCBmb3IgY2hhcmFjdGVyIGxlbmd0aHMgb3IgSU5DX0lCWVRF
UFRSLiAqLworICBpZiAoRVEgKHJlc3VsdF90eXBlLCBRc3RyaW5nKSkKKyAgICB7CisgICAgICBC
eXRlY291bnQgYnN0YWdpbmdfbGVuID0gMDsKKyAgICAgIElieXRlICpic3RhZ2luZyA9IE5VTEws
ICpjdXJzb3IgPSBOVUxMOworICAgICAgc3RydWN0IG1lcmdlX3N0cmluZ19leHRlbnRzX3N0cnVj
dCAqYXJnc19tc2UKKyAgICAgICAgPSBhbGxvY2FfYXJyYXkgKHN0cnVjdCBtZXJnZV9zdHJpbmdf
ZXh0ZW50c19zdHJ1Y3QsIG5zZXF1ZW5jZXMpOworICAgICAgc3RydWN0IG1lcmdlX3N0cmluZ19l
eHRlbnRzX3N0cnVjdCAqYXJnc19tc2VfY3Vyc29yID0gYXJnc19tc2U7CisKKyAgICAgIGZvciAo
aWkgPSAwOyBpaSA8IG5zZXF1ZW5jZXM7ICsraWkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo
U1RSSU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJz
dGFnaW5nX2xlbiArPSBYU1RSSU5HX0xFTkdUSCAoc2VxdWVuY2VzW2lpXSk7CisgICAgICAgICAg
ICAgIGlmIChOVUxMICE9IHN0cmluZ19leHRlbnRfaW5mbyAoc2VxdWVuY2VzW2lpXSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yLT5zdHJpbmcg
PSBzZXF1ZW5jZXNbaWldOworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yLT5lbnRy
eV9sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgPSBYU1RSSU5HX0xFTkdUSCAoc2VxdWVuY2Vz
W2lpXSk7CisgICAgICAgICAgICAgICAgICBhcmdzX21zZV9jdXJzb3IrKzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3NfbXNlID09IGFyZ3NfbXNlX2N1cnNv
cikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhh
dCB0aGUgY29kZSBjaGVja2luZyBiZWxvdyBmb3Igc3RyaW5nIHdpdGgKKyAgICAgICAgICAgICAg
ICAgICAgIGV4dGVudCBpbmZvIGluIGFyZ3NfbXNlW10gaGFzIGEgdmFsaWQgTGlzcCBvYmplY3Qg
dG8KKyAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgdG8uICovCisgICAgICAgICAgICAgICAg
ICBhcmdzX21zZVswXS5zdHJpbmcgPSBRbmlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEdl
dCB0aGUgaXRlbSBjb3VudCBvZiBlYWNoIHNlcXVlbmNlOyBpbiBwYXNzaW5nLCBjaGVjayB0aGVp
cgorICAgICAgICAgICAgICAgICB0eXBlIGFuZCBjaXJjdWxhcml0eSwgd2VsbC1mb3JtZWRuZXNz
LiBBbGxvY2F0ZSBpdGVtX2NvdW50ICoKKyAgICAgICAgICAgICAgICAgTUFYX0lDSEFSX0xFTiBv
ZiBzdGFnaW5nIHNwYWNlIGZvciBlYWNoIG5vbi1zdHJpbmcgc2VxdWVuY2UKKyAgICAgICAgICAg
ICAgICAgZW5jb3VudGVyZWQuICovCisgICAgICAgICAgICAgIGJzdGFnaW5nX2xlbgorICAgICAg
ICAgICAgICAgICs9IChYRklYTlVNIChGbGVuZ3RoIChzZXF1ZW5jZXNbaWldKSkpICogTUFYX0lD
SEFSX0xFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICByZXN1bHQgPSBtYWtl
X3VuaW5pdF9zdHJpbmcgKGJzdGFnaW5nX2xlbik7CisKKyNpZiBkZWZpbmVkIChFUlJPUl9DSEVD
S19URVhUKQorICAgICAgLyogTWFrZSBzdXJlIHRoZSBkYXRhIG9mIHRoZSBzdHJpbmcgaXMgdmFs
aWQgaW50ZXJuYWwtZm9ybWF0CisgICAgICAgICB0ZXh0LiBSZWxhdGl2ZWx5IGV4cGVuc2l2ZSwg
aW4gdGhhdCBpdCBhZGRzIGFub3RoZXIgdHJhdmVyc2FsIG9mIHRoZQorICAgICAgICAgc3RyaW5n
IGRhdGEgdG8gb3VyIGFsZ29yaXRobSwgYnV0IGF2b2lkcyBhbiBhc3NlcnRpb24gZmFpbHVyZSB3
aXRoCisgICAgICAgICBFUlJPUl9DSEVDS19URVhULiAqLworICAgICAgbWVtc2V0IChYU1RSSU5H
X0RBVEEgKHJlc3VsdCksIDAsIFhTVFJJTkdfTEVOR1RIIChyZXN1bHQpKTsKKyNlbmRpZgorCisg
ICAgICBic3RhZ2luZyA9IGN1cnNvciA9IFhTVFJJTkdfREFUQSAocmVzdWx0KTsKKyAgICAgIGFy
Z3NfbXNlX2N1cnNvciA9IGFyZ3NfbXNlOworCisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBuc2Vx
dWVuY2VzOyArK2lpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFNUUklOR1AgKHNlcXVlbmNl
c1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZW1jcHkgKGN1cnNvciwgWFNU
UklOR19EQVRBIChzZXF1ZW5jZXNbaWldKSwKKyAgICAgICAgICAgICAgICAgICAgICBYU1RSSU5H
X0xFTkdUSCAoc2VxdWVuY2VzW2lpXSkpOworICAgICAgICAgICAgICBpZiAoRVEgKGFyZ3NfbXNl
X2N1cnNvci0+c3RyaW5nLCBzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBhcmdzX21zZV9jdXJzb3ItPmVudHJ5X29mZnNldCA9IGN1cnNvciAtIGJz
dGFnaW5nOworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yKys7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICBjdXJzb3IgKz0gWFNUUklOR19MRU5HVEggKHNlcXVlbmNl
c1tpaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKENPTlNQIChzZXF1ZW5j
ZXNbaWldKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2Uga25vdyB0aGUgbGlz
dCBpcyB3ZWxsLWZvcm1lZCwgYmVjYXVzZSAjJ2xlbmd0aCBzdWNjZWVkZWQsCisgICAgICAgICAg
ICAgICAgIGFib3ZlLCBzbyB3ZSBjYW4gdXNlIGEgc2ltcGxlciBsb29wIHRoYW4gdXN1YWwgZm9y
IGV4dGVybmFsCisgICAgICAgICAgICAgICAgIGxpc3RzLiAqLworICAgICAgICAgICAgICBMSVNU
X0xPT1BfMiAoZWx0LCBzZXF1ZW5jZXNbaWldKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgIENIRUNLX0NIQVJfQ09FUkNFX0lOVCAoZWx0KTsKKyAgICAgICAgICAgICAgICAg
IGN1cnNvciArPSBzZXRfaXRleHRfaWNoYXIgKGN1cnNvciwgWENIQVIgKGVsdCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChBUlJBWVAgKHNl
cXVlbmNlc1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBMaXNwX09iamVjdCBl
bHQgPSBRbmlsOworICAgICAgICAgICAgICBFbGVtY291bnQgbGVuID0gWEZJWE5VTSAoRmxlbmd0
aCAoc2VxdWVuY2VzW2lpXSkpOworCisgICAgICAgICAgICAgIGZvciAoamogPSAwOyBqaiA8IGxl
bjsgKytqaikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBlbHQgPSBGYXJl
ZiAoc2VxdWVuY2VzW2lpXSwgbWFrZV9maXhudW0gKGpqKSk7CisgICAgICAgICAgICAgICAgICBD
SEVDS19DSEFSX0NPRVJDRV9JTlQgKGVsdCk7CisgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0g
c2V0X2l0ZXh0X2ljaGFyIChjdXJzb3IsIFhDSEFSIChlbHQpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBhc3NlcnQgKE5JTFAgKHNlcXVlbmNlc1tpaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICBpZiAoKGN1cnNvciAtIGJzdGFnaW5nKSAhPSBic3RhZ2luZ19sZW4pCisg
ICAgICAgIHsKKyAgICAgICAgICBCeXRlY291bnQgdXNlZF9sZW4gPSBjdXJzb3IgLSBic3RhZ2lu
ZzsKKworICAgICAgICAgIHRleHRfY2hlY2tpbmdfYXNzZXJ0ICh1c2VkX2xlbiA8IGJzdGFnaW5n
X2xlbik7CisKKyAgICAgICAgICAvKiBOby1vbmUgZWxzZSBoYXMgYSBwb2ludGVyIHRvIFJFU1VM
VCwgYW5kIGNhbGxpbmcgcmVzaXplX3N0cmluZygpCisgICAgICAgICAgICAgZ2l2ZXMgY3Jhc2hl
cyBpbiB0ZW1hY3MsIGl0cyBpbXBsZW1lbnRhdGlvbiBpc24ndCB0aG9yb3VnaGx5CisgICAgICAg
ICAgICAgZGVidWdnZWQgYW5kIGl0cyBwZXJmb3JtYW5jZSBpcyBzdWItb3B0aW1hbC4gQ3JlYXRl
IGEgbmV3IFJFU1VMVCwKKyAgICAgICAgICAgICBsZXQgdGhlIGZpcnN0IGJlIEdDZWQgaW5zdGVh
ZC4gKi8KKyAgICAgICAgICByZXN1bHQgPSBtYWtlX3N0cmluZyAoYnN0YWdpbmcsIHVzZWRfbGVu
KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogY29weV9z
dHJpbmdfZXh0ZW50cygpIGNhbiBjYWxsIExpc3AsIG1ha2Ugc3VyZQorICAgICAgICAgICAgIGlu
aXRfc3RyaW5nX2FzY2lpX2JlZ2luKCkgaXMgY2FsbGVkIG9uIFJFU1VMVCBiZWZvcmUgaXRzCisg
ICAgICAgICAgICAgaW52b2NhdGlvbi4gKi8KKyAgICAgICAgICBpbml0X3N0cmluZ19hc2NpaV9i
ZWdpbiAocmVzdWx0KTsKKyAgICAgICAgICBzbGVkZ2VoYW1tZXJfY2hlY2tfYXNjaWlfYmVnaW4g
KHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKGFyZ3NfbXNlIDwgYXJnc19tc2Vf
Y3Vyc29yKQorICAgICAgICB7CisgICAgICAgICAgY29weV9zdHJpbmdfZXh0ZW50cyAocmVzdWx0
LCBhcmdzX21zZS0+c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nf
bXNlLT5lbnRyeV9vZmZzZXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
c19tc2UtPmVudHJ5X2xlbmd0aCk7CisgICAgICAgICAgYXJnc19tc2UrKzsKKyAgICAgICAgfQor
CisgICAgICBSRVRVUk5fVU5HQ1BSTyAocmVzdWx0KTsKKyAgICB9CisKKyAgLyogTGlzdCByZXN1
bHQgaXMgdGhlIG5leHQgY29tbW9uZXN0IGNhc2UsIGFuZCBiZW5lZml0cyBmcm9tIHN0YXJ0aW5n
IGZyb20KKyAgICAgdGhlIGVuZCBhbmQgbW92aW5nIHRvd2FyZHMgdGhlIGJlZ2lubmluZzsgZm9y
IGNvbnMgc2VxdWVuY2VzIHdlIGRvbid0CisgICAgIG5lZWQgdHJhdmVyc2UgdGhlIGxpc3QgdHdp
Y2UgdG8gZ2V0IHRoZSBlbGVtZW50IGNvdW50LCB3ZSBjYW4gdHJhdmVyc2UKKyAgICAgb25jZSBh
bmQgYWRkIGFzIHdlIGdvLCBhbmQgZm9yIHN0cmluZyBzZXF1ZW5jZXMgd2UgYWdhaW4gZG9uJ3Qg
bmVlZCB0aGUKKyAgICAgY2hhciBsZW5ndGggaWYgd2Ugc3RhcnQgYXQgdGhlIGVuZCBhbmQgREVD
X0lCWVRFUFRSLnggICovCisgIGlmIChFUSAocmVzdWx0X3R5cGUsIFFsaXN0KSkKKyAgICB7Cisg
ICAgICBpaSA9IG5zZXF1ZW5jZXM7CisKKyAgICAgIGlmIChyZXVzZV9sYXN0X2xpc3RwICYmIGlp
ID4gMCkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IHNlcXVlbmNlc1stLWlpXTsKKyAg
ICAgICAgfQorCisgICAgICB3aGlsZSAoLS1paSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAg
aWYgKENPTlNQIChzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
TGlzcF9PYmplY3Qgc2VxY29weSA9IEZjb25zIChYQ0FSIChzZXF1ZW5jZXNbaWldKSwgUW5pbCk7
CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGhlYWQgPSBzZXFjb3B5OworCisgICAgICAgICAg
ICAgIEVYVEVSTkFMX0xJU1RfTE9PUF8yIChsaXN0X2VsdCwgWENEUiAoc2VxdWVuY2VzW2lpXSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWFNFVENEUiAoc2VxY29weSwg
RmNvbnMgKGxpc3RfZWx0LCBRbmlsKSk7CisgICAgICAgICAgICAgICAgICBzZXFjb3B5ID0gWENE
UiAoc2VxY29weSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIFhTRVRDRFIg
KHNlcWNvcHksIHJlc3VsdCk7CisgICAgICAgICAgICAgIHJlc3VsdCA9IGhlYWQ7CisKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChTVFJJTkdQIChzZXF1ZW5jZXMgW2lpXSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIElieXRlICpic3RhcnQgPSBYU1RSSU5HX0RBVEEg
KHNlcXVlbmNlc1tpaV0pOworICAgICAgICAgICAgICBJYnl0ZSAqYmN1cnNvciA9IGJzdGFydCAr
IFhTVFJJTkdfTEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKworICAgICAgICAgICAgICB3aGlsZSAo
YmN1cnNvciA+IGJzdGFydCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBE
RUNfSUJZVEVQVFIgKGJjdXJzb3IpOworCisgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGY29u
cyAobWFrZV9jaGFyIChpdGV4dF9pY2hhciAoYmN1cnNvcikpLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChBUlJBWVAgKHNlcXVl
bmNlc1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBqaiA9IFhGSVhOVU0gKEZs
ZW5ndGggKHNlcXVlbmNlc1tpaV0pKTsKKworICAgICAgICAgICAgICBmb3IgKC0tamo7IGpqID49
IDA7IC0tamopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
RmNvbnMgKEZhcmVmIChzZXF1ZW5jZXNbaWldLCBtYWtlX2ZpeG51bSAoamopKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghTklMUCAoc2VxdWVuY2VzW2lpXSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIENIRUNLX1NFUVVFTkNFIChzZXF1ZW5jZXNbaWld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBSRVRVUk5fVU5HQ1BSTyAocmVz
dWx0KTsKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbnNlcXVlbmNlczsgKytpaSkKKyAg
ICB7CisgICAgICBpZiAoU1RSSU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAvKiBObyBuZWVkIHRvIGFjdHVhbGx5IGdldCB0aGUgY2hhciBsZW5ndGgsIHNpbmNlIHRo
ZSBieXRlIGxlbmd0aAorICAgICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhbiBv
ciBlcXVhbCB0byB0aGUgY2hhciBsZW5ndGguIFdlIGp1c3QKKyAgICAgICAgICAgICBhbGxvY2F0
ZSB0aGUgYnl0ZS1jb3VudCBvZiBpdGVtcywgdGhlIGV4dHJhIHNwYWNlIGZvciB0aGUgc3RhZ2lu
ZworICAgICAgICAgICAgIGRvZXNuJ3QgbWF0dGVyLiAqLworICAgICAgICAgIHN0YWdpbmdfbGVu
ICs9IFhTVFJJTkdfTEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKyAgICAgICAgfQorICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgLyogR2V0IHRoZSBpdGVtIGNvdW50IG9mIGVhY2ggc2Vx
dWVuY2U7IGluIHBhc3NpbmcsIGNoZWNrIHRoZWlyCisgICAgICAgICAgICAgdHlwZSBhbmQgY2ly
Y3VsYXJpdHksIHdlbGwtZm9ybWVkbmVzcy4gKi8KKyAgICAgICAgICBzdGFnaW5nX2xlbiArPSAo
WEZJWE5VTSAoRmxlbmd0aCAoc2VxdWVuY2VzW2lpXSkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAvKiBObyBuZWVkIHRvIEdDUFJPIGxpc3Bfc3RhZ2luZywgYWxsIGl0cyBlbGVtZW50cyBhcmUg
aW4gU0VRVUVOQ0VTLiAqLworICBsaXNwX3N0YWdpbmcgPSBsaXNwX2N1cnNvciA9IGFsbG9jYV9h
cnJheSAoTGlzcF9PYmplY3QsIHN0YWdpbmdfbGVuKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCBu
c2VxdWVuY2VzOyArK2lpKQorICAgIHsKKyAgICAgIGlmIChDT05TUCAoc2VxdWVuY2VzW2lpXSkp
CisgICAgICAgIHsKKyAgICAgICAgICAvKiBXZSBrbm93IHRoZSBsaXN0IGlzIHdlbGwtZm9ybWVk
LCBiZWNhdXNlICMnbGVuZ3RoIHN1Y2NlZWRlZCwKKyAgICAgICAgICAgICBhYm92ZSwgc28gd2Ug
Y2FuIHVzZSBhIGNoZWFwZXIgbG9vcCB0aGFuIGlzIHVzdWFsIGZvciBleHRlcm5hbAorICAgICAg
ICAgICAgIGxpc3RzLiAqLworICAgICAgICAgIExJU1RfTE9PUF8yIChlbHQsIHNlcXVlbmNlc1tp
aV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpsaXNwX2N1cnNvciA9IGVsdCwgbGlz
cF9jdXJzb3IrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoU1RS
SU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgIHsKKyAgICAgICAgICBJYnl0ZSAqc3RyaW5n
cCA9IFhTVFJJTkdfREFUQSAoc2VxdWVuY2VzW2lpXSk7CisgICAgICAgICAgSWJ5dGUgKmVuZHAg
PSBzdHJpbmdwICsgWFNUUklOR19MRU5HVEggKHNlcXVlbmNlc1tpaV0pOworCisgICAgICAgICAg
d2hpbGUgKHN0cmluZ3AgPCBlbmRwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqbGlz
cF9jdXJzb3IgPSBtYWtlX2NoYXIgKGl0ZXh0X2ljaGFyIChzdHJpbmdwKSk7CisgICAgICAgICAg
ICAgIElOQ19JQllURVBUUiAoc3RyaW5ncCk7CisgICAgICAgICAgICAgICsrbGlzcF9jdXJzb3I7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKHNlcXVl
bmNlc1tpaV0pKQorICAgICAgICB7CisgICAgICAgICAgRWxlbWNvdW50IGxlbiA9IFhWRUNUT1Jf
TEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKyAgICAgICAgICBtZW1jcHkgKGxpc3BfY3Vyc29yLCBY
VkVDVE9SX0RBVEEgKHNlcXVlbmNlc1tpaV0pLAorICAgICAgICAgICAgICAgICAgbGVuICogc2l6
ZW9mIChMaXNwX09iamVjdCkpOworICAgICAgICAgIGxpc3BfY3Vyc29yICs9IGxlbjsKKyAgICAg
ICAgfQorICAgICAgZWxzZSBpZiAoQVJSQVlQIChzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgewor
ICAgICAgICAgIEVsZW1jb3VudCBsZW4gPSBYRklYTlVNIChGbGVuZ3RoIChzZXF1ZW5jZXNbaWld
KSk7CisKKyAgICAgICAgICBmb3IgKGpqID0gMDsgamogPCBsZW47ICsramosICsrbGlzcF9jdXJz
b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpsaXNwX2N1cnNvciA9IEZhcmVmIChz
ZXF1ZW5jZXNbaWldLCBtYWtlX2ZpeG51bSAoamopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0IChOSUxQIChzZXF1ZW5j
ZXNbaWldKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKEVRIChyZXN1bHRfdHlwZSwgUXZl
Y3RvcikgfHwgRVEgKHJlc3VsdF90eXBlLCBRYXJyYXkpKQorICAgIHsKKyAgICAgIFJFVFVSTl9V
TkdDUFJPIChGdmVjdG9yIChsaXNwX2N1cnNvciAtIGxpc3Bfc3RhZ2luZywgbGlzcF9zdGFnaW5n
KSk7CisgICAgfQorCisgIGlmIChFUSAocmVzdWx0X3R5cGUsIFFiaXRfdmVjdG9yKSkKKyAgICB7
CisgICAgICBSRVRVUk5fVU5HQ1BSTyAoRmJpdF92ZWN0b3IgKGxpc3BfY3Vyc29yIC0gbGlzcF9z
dGFnaW5nLCBsaXNwX3N0YWdpbmcpKTsKKyAgICB9CisKKyAgcmVzdWx0ID0gRmxpc3QgKGxpc3Bf
Y3Vyc29yIC0gbGlzcF9zdGFnaW5nLCBsaXNwX3N0YWdpbmcpOworICByZXN1bHQgPSBjYWxsMiAo
UWNvZXJjZSwgcmVzdWx0LCByZXN1bHRfdHlwZSk7CisgIFJFVFVSTl9VTkdDUFJPIChyZXN1bHQp
OworfQorCitERUZVTiAoImNvbmNhdGVuYXRlIiwgRmNvbmNhdGVuYXRlLCAxLCBNQU5ZLCAwLCAv
KgorQ29uY2F0ZW5hdGUsIGludG8gYSBzZXF1ZW5jZSBvZiB0eXBlIFRZUEUsIHRoZSBhcmd1bWVu
dCBTRVFVRU5DRVMuCisKK2FyZ3VtZW50czogKFRZUEUgJnJlc3QgU0VRVUVOQ0VTKQorKi8KKyAg
ICAgICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykpCit7CisgIExpc3BfT2JqZWN0IHR5
cGUgPSBhcmdzWzBdOworCisgIHJldHVybiBjb25jYXRlbmF0ZSAobmFyZ3MgLSAxLCBhcmdzICsg
MSwgdHlwZSwgMCk7Cit9CisKK0xpc3BfT2JqZWN0Citjb25jYXQyIChMaXNwX09iamVjdCBzZXEx
LCBMaXNwX09iamVjdCBzZXEyKQoreworICBMaXNwX09iamVjdCBhcmdzW10gPSB7IHNlcTEsIHNl
cTIgfTsKKyAgcmV0dXJuIGNvbmNhdGVuYXRlIChjb3VudG9mIChhcmdzKSwgYXJncywgUXN0cmlu
ZywgMCk7Cit9CisKK0xpc3BfT2JqZWN0Citjb25jYXQzIChMaXNwX09iamVjdCBzZXExLCBMaXNw
X09iamVjdCBzZXEyLCBMaXNwX09iamVjdCBzZXEzKQoreworICBMaXNwX09iamVjdCBhcmdzW10g
PSB7IHNlcTEsIHNlcTIsIHNlcTMgfTsKKyAgcmV0dXJuIGNvbmNhdGVuYXRlIChjb3VudG9mIChh
cmdzKSwgYXJncywgUXN0cmluZywgMCk7Cit9CisKK0xpc3BfT2JqZWN0Cit2Y29uY2F0MiAoTGlz
cF9PYmplY3Qgc2VxMSwgTGlzcF9PYmplY3Qgc2VxMikKK3sKKyAgTGlzcF9PYmplY3QgYXJnc1td
ID0geyBzZXExLCBzZXEyIH07CisgIHJldHVybiBjb25jYXRlbmF0ZSAoY291bnRvZiAoYXJncyks
IGFyZ3MsIFF2ZWN0b3IsIDApOworfQorCitMaXNwX09iamVjdAordmNvbmNhdDMgKExpc3BfT2Jq
ZWN0IHNlcTEsIExpc3BfT2JqZWN0IHNlcTIsIExpc3BfT2JqZWN0IHNlcTMpCit7CisgIExpc3Bf
T2JqZWN0IGFyZ3NbXSA9IHsgc2VxMSwgc2VxMiwgc2VxMyB9OworICByZXR1cm4gY29uY2F0ZW5h
dGUgKGNvdW50b2YgKGFyZ3MpLCBhcmdzLCBRdmVjdG9yLCAwKTsKK30KKworREVGVU4gKCJhcHBl
bmQiLCBGYXBwZW5kLCAwLCBNQU5ZLCAwLCAvKgorQ29uY2F0ZW5hdGUgYWxsIHRoZSBhcmd1bWVu
dHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGxpc3QuCitUaGUgcmVzdWx0IGlzIGEgbGlzdCB3aG9z
ZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRzLgorRWFjaCBh
cmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3IsIGJpdCB2ZWN0b3IsIG9yIHN0cmluZy4KK1Ro
ZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBjb3BpZWQsIGp1c3QgdXNlZCBhcyB0aGUgdGFpbCBvZiB0
aGUgbmV3IGxpc3QuCitBbHNvIHNlZTogYG5jb25jJy4KKworYXJndW1lbnRzOiAoJnJlc3QgQVJH
UykKKyovCisgICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpKQoreworICByZXR1
cm4gY29uY2F0ZW5hdGUgKG5hcmdzLCBhcmdzLCBRbGlzdCwgMSk7Cit9CisMCiBERUZVTiAoInJl
ZHVjZSIsIEZyZWR1Y2UsIDIsIE1BTlksIDAsIC8qCiBDb21iaW5lIHRoZSBlbGVtZW50cyBvZiBT
RVFVRU5DRSB1c2luZyBGVU5DVElPTiwgYSBiaW5hcnkgb3BlcmF0aW9uLgogCkBAIC04MjkzLDEx
ICs4NjQ2LDkgQEAKICAgREVGU1lNQk9MIChRbWVyZ2UpOwogICBERUZTWU1CT0wgKFFmaWxsKTsK
ICAgREVGU1lNQk9MIChRaWRlbnRpdHkpOwotICBERUZTWU1CT0wgKFF2ZWN0b3IpOwogICBERUZT
WU1CT0wgKFFhcnJheSk7CiAgIERFRlNZTUJPTCAoUXN0cmluZyk7CiAgIERFRlNZTUJPTCAoUWxp
c3QpOwotICBERUZTWU1CT0wgKFFiaXRfdmVjdG9yKTsKICAgZGVmc3ltYm9sICgmUXNvcnRYLCAi
c29ydCoiKTsKICAgREVGU1lNQk9MIChRcmVkdWNlKTsKICAgREVGU1lNQk9MIChRcmVwbGFjZSk7
CkBAIC04Mzc4LDYgKzg3MjksOCBAQAogICBERUZTVUJSIChGbWFwX2ludG8pOwogICBERUZTVUJS
IChGc29tZSk7CiAgIERFRlNVQlIgKEZldmVyeSk7CisgIERFRlNVQlIgKEZjb25jYXRlbmF0ZSk7
CisgIERFRlNVQlIgKEZhcHBlbmQpOwogICBERUZTVUJSIChGcmVkdWNlKTsKICAgREVGU1VCUiAo
RnJlcGxhY2UpOwogICBERUZTVUJSIChGbnN1YnN0aXR1dGUpOwpkaWZmIC1yIGNiZTEwNzE0MWFm
ZSAtciAxN2EzYzZiNTJkZmQgc3JjL3Rscy5jCi0tLSBhL3NyYy90bHMuYwlUaHUgSnVuIDMwIDAw
OjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL3Rscy5jCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAx
NiArMDEwMApAQCAtNzE5LDcgKzcxOSw3IEBACiAgIGFyZ3NbMl0gPSBidWlsZF9hc2NzdHJpbmcg
KCIgKCIpOwogICBhcmdzWzNdID0gYnVpbGRfZXh0c3RyaW5nICh0b2tlbl91cmwsIFFuYXRpdmUp
OwogICBhcmdzWzRdID0gYnVpbGRfYXNjc3RyaW5nICgiKSIpOwotICBsc3BfcGFzc3dvcmQgPSBj
YWxsMSAoUXJlYWRfcGFzc3dkLCBGY29uY2F0ICg1LCBhcmdzKSk7CisgIGxzcF9wYXNzd29yZCA9
IGNhbGwxIChRcmVhZF9wYXNzd2QsIGNvbmNhdGVuYXRlICg1LCBhcmdzLCBRc3RyaW5nLCAwKSk7
CiAgIGNfcGFzc3dvcmQgPSBMSVNQX1NUUklOR19UT19FWFRFUk5BTCAobHNwX3Bhc3N3b3JkLCBR
bmF0aXZlKTsKIAogICAvKiBJbnNlcnQgdGhlIHBhc3N3b3JkICovCkBAIC04MDAsNyArODAwLDcg
QEAKICAgYXJnc1syXSA9IGJ1aWxkX2FzY3N0cmluZyAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nIChl
cnIpKTsKICAgYXJnc1szXSA9IGJ1aWxkX2FzY3N0cmluZyAoIjoiKTsKICAgYXJnc1s0XSA9IGJ1
aWxkX2FzY3N0cmluZyAoRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcgKGVycikpOwotICByZXR1cm4g
RmNvbmNhdCAoNSwgYXJncyk7CisgIHJldHVybiBjb25jYXRlbmF0ZSAoY291bnRvZiAoYXJncyks
IGFyZ3MsIFFzdHJpbmcsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwoKCi0tIArigJhU
cmFtYWRvbCBpcyBmdXJ0aGVyIGZlZCB0byBjYXR0bGUgW+KApl0gd2hlbiB3b3JraW5nIHRoZW0g
W+KApl0gKGFzIGRyYWZ0CmFuaW1hbHMpIHNvIHRoYXQgdGhlIGFuaW1hbHMgZG8gbm90IGdldCB0
aXJlZCBxdWlja2x5LiDigKbigJkKCeKAlCBBbmdld2FuZHRlIENoZW1pZSwgU2VwdCAyMDE0LCBk
ZXNjcmliaW5nIHRoZSBzb2NpYWwgY29udGV4dCBvZgoJKHN5bnRoZXRpYykgdHJhbWFkb2wgaGF2
aW5nIGJlZW4gZm91bmQgaW4gQ2FtZXJvb24gdHJlZSByb290cy4KCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhFbWFjcy1QYXRjaGVzIG1haWxpbmcgbGlz
dApYRW1hY3MtUGF0Y2hlc0B4ZW1hY3Mub3JnCmh0dHA6Ly9saXN0cy54ZW1hY3Mub3JnL21haWxt
YW4vbGlzdGluZm8veGVtYWNzLXBhdGNoZXMK