[COMMIT] Clean up and finish regexp matching with relocating Lisp buffers

Aidan Kehoe <[email protected]> Thu, 31 Mar 2016 20:34:37 +0100
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
CkkgaGF2ZSBhIG5ldyBtYWNoaW5lLCBhbmQgSSBjYW4gbm93IGNvbnNpc3RlbnRseSB0cmlnZ2Vy
IGNyYXNoZXMgaW4gdGhlCnJlZ3VsYXIgZXhwcmVzc2lvbiBjb2RlIHdoZW4gSSBidWlsZCB3aXRo
IHRoZSByZWxvY2F0aW5nIExpc3AgYnVmZmVyCmFsbG9jYXRvciB0dXJuZWQgb24uIFRoZSBiZWxv
dyBmaXhlcyB0aGlzLgoKVGhlcmXigJlzIG5vIGVhc3kgd2F5IHRvIHdyaXRlIGEgdGVzdCBmcm9t
IHRoZSBMaXNwIHNpZGUgdG8gc3RvcCB0aGlzCmhhcHBlbmluZy0taXTigJlzIGEgbWFzc2l2ZSwg
dW53aWVsZHkgcmVndWxhciBleHByZXNzaW9uIGNvbnN0cnVjdGVkIGJ5CiMnY29tcGlsYXRpb24t
cGFyc2UtZXJyb3IgdGhhdCBwcm92b2tlZCB0aGUgY3Jhc2hlcy4gT24gdGhlIEMgc2lkZSwgSQpz
dXBwb3NlIGZvciBkZWJ1ZyBidWlsZHMgd2UgY291bGQgZXhlY3V0ZSB0aGUgaWYgKHJtZHBfb2Zm
c2V0KSB7fSBibG9jayBzb21lCmZyYWN0aW9uIG9mIHRoZSB0aW1lLCBzYW5pdHkgY2hlY2tpbmcg
bG9jYWwgdmFsdWVzLgoKQVBQUk9WRSBDT01NSVQKCk5PVEU6IFRoaXMgcGF0Y2ggaGFzIGJlZW4g
Y29tbWl0dGVkLgoKIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEFpZGFuIEtlaG9lIDxrZWhv
ZWFAcGFyaGFzYXJkLm5ldD4KIyBEYXRlIDE0NTk0NTIxOTAgLTM2MDAKIyAgICAgIFRodSBNYXIg
MzEgMjA6MjM6MTAgMjAxNiArMDEwMAojIE5vZGUgSUQgMDNlZGYwZjcxZDcwN2Y0YTk4ZmEzNjVh
OTU1NGFjYmY5NTFmNzVmYQojIFBhcmVudCAgNzFmZjg4M2VmNzk1NjAwNmVlYWY0YTU2MWI4MjM1
OTRjMmY4YWVmOQpDbGVhbiB1cCBhbmQgZmluaXNoIHJlZ2V4cCBtYXRjaGluZyB3aXRoIHJlbG9j
YXRpbmcgTGlzcCBidWZmZXJzCgpzcmMvQ2hhbmdlTG9nIGFkZGl0aW9uOgoKMjAxNi0wMy0zMSAg
QWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KCglDbGVhbiB1cCBhbmQgZmluaXNo
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiByZWd1bGFyIGV4cHJlc3Npb24KCXNlYXJjaGluZyB3aXRo
aW4gcmVsb2NhdGluZyBMaXNwIGJ1ZmZlcnMuIEFzIHdlbGwgYXMgcmVsb2NhdGluZwoJbG9jYWwg
cG9pbnRlcnMgd2l0aGluIHJlX21hdGNoXzJfaW50ZXJuYWwoKSBhbmQgcmVfc2VhcmNoXzIoKSwK
CXJlbG9jYXRlIHBvaW50ZXJzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiByZWdpc3RlciBiZWdpbiBh
bmQgZW5kCgl2YWx1ZXMsIGFuZCBwb2ludGVycyB0aGF0IGFyZSBzYXZlZCBpbiB0aGUgZmFpbHVy
ZSBzdGFjay4KCgkqIHJlZ2V4LmM6CgkqIHJlZ2V4LmMgKG9mZnNldF9wb3N0X3JlbG9jYXRpb24p
OiBNYWtlIHRoaXMgaW5saW5lLgoJKiByZWdleC5jIChERUJVR19SVU5USU1FX0ZMQUdTKTogTmV3
ICNkZWZpbmUsIHplcm8gb24gYSBub24tZGVidWcKCWJ1aWxkLCByZWZsZWN0cyBkZWJ1Z19yZWdl
eHBzIG9uIGEgZGVidWcgYnVpbGQsIG1ha2VzIHZhcmlvdXMKCXRoaW5ncyBjaGVhcGVyIG9uIGEg
ZGVidWcgYnVpbGQuCgkqIHJlZ2V4LmMgKG1hbGxvY19jaGVja2luZ19hc3NlcnQpOiBNYWtlIHRo
aXMgYXZhaWxhYmxlIGFuZCBlbXB0eQoJaWYgdGhpcyBpcyBub3QgWEVtYWNzLgoJKiByZWdleC5j
IChQVVNIX0ZBSUxVUkVfUE9JTlRFUl8xKTogTmV3LiBUaGlzIHdhcyBwcmV2aW91c2x5CglQVVNI
X0ZBSUxVUkVfUE9JTlRFUigpLgoJKiByZWdleC5jIChQVVNIX0ZBSUxVUkVfUE9JTlRFUik6IFNh
bml0eS1jaGVjayB0aGUgYXJndW1lbnQgaGVyZQoJd2hlbiB0aGUgcmVsZXZhbnQgYXNzZXJ0aW9u
cyBhcmUgdHVybmVkIG9uLgoJKiByZWdleC5jIChQVVNIX0ZBSUxVUkVfUkVMT0NBVEFCTEUpOiBO
ZXcuIFB1c2ggYSByZWxvY2F0YWJsZQoJcG9pbnRlciBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrOyBz
YW5pdHktY2hlY2sgaXRzIHZhbHVlIHdoZW4gdGhlCglyZWxldmFudCBhc3NlcnRpb25zIGFyZSB0
dXJuZWQgb24uCgkqIHJlZ2V4LmMgKHBvcF9mYWlsdXJlX3JlbG9jYXRhYmxlXzEpOiBOZXcuIFNh
bml0eS1jaGVjayBhCglyZWxvY2F0YWJsZSBwb2ludGVyLCB0aGVuIHBvcCBhbmQgcmV0dXJuIGl0
IGZyb20gdGhlIGZhaWx1cmUKCXN0YWNrLgoJKiByZWdleC5jIChQT1BfRkFJTFVSRV9SRUxPQ0FU
QUJMRSk6IE5ldy4gUG9wIGEgcmVsb2NhdGFibGUKCXBvaW50ZXIgZnJvbSB0aGUgZmFpbHVyZSBz
dGFjaywgY2FsbGluZwoJcG9wX2ZhaWx1cmVfcmVsb2NhdGFibGVfMSgpIGlmIGFwcHJvcHJpYXRl
LgoJKiByZWdleC5jIChQVVNIX0ZBSUxVUkVfUE9JTlQpOgoJUmVvcmdhbmlzZSB0aGlzIHRvIGtl
ZXAgZGVidWdnaW5nIGNvZGUgbW9yZSB0byBpdHNlbGYsIG1ha2luZyBpdAoJZWFzaWVyIHRvIHNl
ZSB3aGF0IGFjdHVhbCBub24tZGVidWcgY29kZSBpcyBiZWluZyBleGN1ZGUuCgkqIHJlZ2V4LmMg
KFBPUF9GQUlMVVJFX1BPSU5UKTogRGl0dG8uCgkqIHJlZ2V4LmMgKE1BWUJFX1NUQVJUX09WRVJf
V0lUSF9FWFRFTkRFRCk6IENoYW5nZSB0aGUgc3ludGF4IG9mCgl0aGlzIG1hY3JvIHRvIHNvbWV0
aGluZyBjbGFuZyBwcmVmZXJzLCBpbiBwYXNzaW5nLgoJKiByZWdleC5jIChyZV9tYXRjaF8yX2lu
dGVybmFsKToKCUluaXRpYWxpc2UgYmVzdF9yZWdzdGFydCwgYmVzdF9yZWdlbmQgaGVyZSB0b28s
IHdpdGggdGhlIHJlc3Qgb2YKCXRoZSByZWdpc3RlciBpbmZvcm1hdGlvbi4KCmRpZmYgLXIgNzFm
Zjg4M2VmNzk1IC1yIDAzZWRmMGY3MWQ3MCBzcmMvQ2hhbmdlTG9nCi0tLSBhL3NyYy9DaGFuZ2VM
b2cJU3VuIEZlYiAyOCAxMjo1OTowNyAyMDE2ICswMDAwCisrKyBiL3NyYy9DaGFuZ2VMb2cJVGh1
IE1hciAzMSAyMDoyMzoxMCAyMDE2ICswMTAwCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTYtMDMtMzEg
IEFpZGFuIEtlaG9lICA8a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CisKKwlDbGVhbiB1cCBhbmQgZmlu
aXNoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiByZWd1bGFyIGV4cHJlc3Npb24KKwlzZWFyY2hpbmcg
d2l0aGluIHJlbG9jYXRpbmcgTGlzcCBidWZmZXJzLiBBcyB3ZWxsIGFzIHJlbG9jYXRpbmcKKwls
b2NhbCBwb2ludGVycyB3aXRoaW4gcmVfbWF0Y2hfMl9pbnRlcm5hbCgpIGFuZCByZV9zZWFyY2hf
MigpLAorCXJlbG9jYXRlIHBvaW50ZXJzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiByZWdpc3RlciBi
ZWdpbiBhbmQgZW5kCisJdmFsdWVzLCBhbmQgcG9pbnRlcnMgdGhhdCBhcmUgc2F2ZWQgaW4gdGhl
IGZhaWx1cmUgc3RhY2suCisKKwkqIHJlZ2V4LmM6CisJKiByZWdleC5jIChvZmZzZXRfcG9zdF9y
ZWxvY2F0aW9uKTogTWFrZSB0aGlzIGlubGluZS4KKwkqIHJlZ2V4LmMgKERFQlVHX1JVTlRJTUVf
RkxBR1MpOiBOZXcgI2RlZmluZSwgemVybyBvbiBhIG5vbi1kZWJ1ZworCWJ1aWxkLCByZWZsZWN0
cyBkZWJ1Z19yZWdleHBzIG9uIGEgZGVidWcgYnVpbGQsIG1ha2VzIHZhcmlvdXMKKwl0aGluZ3Mg
Y2hlYXBlciBvbiBhIGRlYnVnIGJ1aWxkLgorCSogcmVnZXguYyAobWFsbG9jX2NoZWNraW5nX2Fz
c2VydCk6IE1ha2UgdGhpcyBhdmFpbGFibGUgYW5kIGVtcHR5CisJaWYgdGhpcyBpcyBub3QgWEVt
YWNzLgorCSogcmVnZXguYyAoUFVTSF9GQUlMVVJFX1BPSU5URVJfMSk6IE5ldy4gVGhpcyB3YXMg
cHJldmlvdXNseQorCVBVU0hfRkFJTFVSRV9QT0lOVEVSKCkuIAorCSogcmVnZXguYyAoUFVTSF9G
QUlMVVJFX1BPSU5URVIpOiBTYW5pdHktY2hlY2sgdGhlIGFyZ3VtZW50IGhlcmUKKwl3aGVuIHRo
ZSByZWxldmFudCBhc3NlcnRpb25zIGFyZSB0dXJuZWQgb24uCisJKiByZWdleC5jIChQVVNIX0ZB
SUxVUkVfUkVMT0NBVEFCTEUpOiBOZXcuIFB1c2ggYSByZWxvY2F0YWJsZQorCXBvaW50ZXIgb250
byB0aGUgZmFpbHVyZSBzdGFjazsgc2FuaXR5LWNoZWNrIGl0cyB2YWx1ZSB3aGVuIHRoZQorCXJl
bGV2YW50IGFzc2VydGlvbnMgYXJlIHR1cm5lZCBvbi4KKwkqIHJlZ2V4LmMgKHBvcF9mYWlsdXJl
X3JlbG9jYXRhYmxlXzEpOiBOZXcuIFNhbml0eS1jaGVjayBhCisJcmVsb2NhdGFibGUgcG9pbnRl
ciwgdGhlbiBwb3AgYW5kIHJldHVybiBpdCBmcm9tIHRoZSBmYWlsdXJlCisJc3RhY2suCisJKiBy
ZWdleC5jIChQT1BfRkFJTFVSRV9SRUxPQ0FUQUJMRSk6IE5ldy4gUG9wIGEgcmVsb2NhdGFibGUK
Kwlwb2ludGVyIGZyb20gdGhlIGZhaWx1cmUgc3RhY2ssIGNhbGxpbmcKKwlwb3BfZmFpbHVyZV9y
ZWxvY2F0YWJsZV8xKCkgaWYgYXBwcm9wcmlhdGUuCisJKiByZWdleC5jIChQVVNIX0ZBSUxVUkVf
UE9JTlQpOgorCVJlb3JnYW5pc2UgdGhpcyB0byBrZWVwIGRlYnVnZ2luZyBjb2RlIG1vcmUgdG8g
aXRzZWxmLCBtYWtpbmcgaXQKKwllYXNpZXIgdG8gc2VlIHdoYXQgYWN0dWFsIG5vbi1kZWJ1ZyBj
b2RlIGlzIGJlaW5nIGV4Y3VkZS4KKwkqIHJlZ2V4LmMgKFBPUF9GQUlMVVJFX1BPSU5UKTogRGl0
dG8uCisJKiByZWdleC5jIChNQVlCRV9TVEFSVF9PVkVSX1dJVEhfRVhURU5ERUQpOiBDaGFuZ2Ug
dGhlIHN5bnRheCBvZgorCXRoaXMgbWFjcm8gdG8gc29tZXRoaW5nIGNsYW5nIHByZWZlcnMsIGlu
IHBhc3NpbmcuCisJKiByZWdleC5jIChyZV9tYXRjaF8yX2ludGVybmFsKToKKwlJbml0aWFsaXNl
IGJlc3RfcmVnc3RhcnQsIGJlc3RfcmVnZW5kIGhlcmUgdG9vLCB3aXRoIHRoZSByZXN0IG9mCisJ
dGhlIHJlZ2lzdGVyIGluZm9ybWF0aW9uLgorCiAyMDE2LTAyLTI4ICBBaWRhbiBLZWhvZSAgPGtl
aG9lYUBwYXJoYXNhcmQubmV0PgogCiAJKiBwcmludC5jIChwcmludF9zeW1ib2wpOgpkaWZmIC1y
IDcxZmY4ODNlZjc5NSAtciAwM2VkZjBmNzFkNzAgc3JjL3JlZ2V4LmMKLS0tIGEvc3JjL3JlZ2V4
LmMJU3VuIEZlYiAyOCAxMjo1OTowNyAyMDE2ICswMDAwCisrKyBiL3NyYy9yZWdleC5jCVRodSBN
YXIgMzEgMjA6MjM6MTAgMjAxNiArMDEwMApAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICBzdHJpbmcg
ZGF0YSBzbyB0aGF0IHRoZXkgd2lsbCBiZSBhY2N1cmF0ZSBhZ2FpbiwgYWZ0ZXIgYW4gYWxsb2Nh
dGlvbiBvcgogICAgcmVhbGxvY2F0aW9uIHRoYXQgcG90ZW50aWFsbHkgcmVsb2NhdGVkIHRoZSBi
dWZmZXIgZGF0YS4KICovCi1zdGF0aWMgQnl0ZWNvdW50CitzdGF0aWMgaW5saW5lIEJ5dGVjb3Vu
dAogb2Zmc2V0X3Bvc3RfcmVsb2NhdGlvbiAoTGlzcF9PYmplY3QgbGlzcG9iaiwgSWJ5dGUgKm9y
aWdfYnVmdGV4dCkKIHsKICAgaWYgKCFCVUZGRVJQIChsaXNwb2JqKSkKQEAgLTczMCw2ICs3MzAs
NyBAQAogZXh0ZXJuIGludCBkZWJ1Z19yZWdleHBzOwogCiAjZGVmaW5lIERFQlVHX1NUQVRFTUVO
VChlKSBlCisjZGVmaW5lIERFQlVHX1JVTlRJTUVfRkxBR1MgZGVidWdfcmVnZXhwcwogCiAjZGVm
aW5lIERFQlVHX1BSSU5UMSh4KSBpZiAoZGVidWdfcmVnZXhwcykgcHJpbnRmICh4KQogI2RlZmlu
ZSBERUJVR19QUklOVDIoeDEsIHgyKSBpZiAoZGVidWdfcmVnZXhwcykgcHJpbnRmICh4MSwgeDIp
CkBAIC0xMTU1LDkgKzExNTYsMTEgQEAKICNpZm5kZWYgZW1hY3MKICN1bmRlZiBhc3NlcnQKICNk
ZWZpbmUgYXNzZXJ0KGUpICgodm9pZCkgKDEpKQorI2RlZmluZSBtYWxsb2NfY2hlY2tpbmdfYXNz
ZXJ0IGFzc2VydAogI2VuZGlmCiAKICNkZWZpbmUgREVCVUdfU1RBVEVNRU5UKGUpCisjZGVmaW5l
IERFQlVHX1JVTlRJTUVfRkxBR1MgMAogCiAjZGVmaW5lIERFQlVHX1BSSU5UMSh4KQogI2RlZmlu
ZSBERUJVR19QUklOVDIoeDEsIHgyKQpAQCAtMTMzOCw2ICsxMzQxLDEzIEBACiAjZW5kaWYKIAog
DAorLyogUmVnaXN0ZXJzIGFyZSBzZXQgdG8gYSBzZW50aW5lbCB3aGVuIHRoZXkgaGF2ZW4ndCB5
ZXQgbWF0Y2hlZC4gVGhpcworICAgZGVjbGFyYXRpb24gaXMgYWhlYWQgb2YgbW9zdCBvZiB0aGUg
cmVnaXN0ZXItc3BlY2lmaWMgc3R1ZmYgaW4gdGhpcyBmaWxlCisgICBiZWNhdXNlIGl0cyB2YWx1
ZSBpcyBleGFtaW5lZCBpbiB0aGUgZmFpbHVyZSBzdGFjayBjb2RlLiAqLworc3RhdGljIHVuc2ln
bmVkIGNoYXIgcmVnX3Vuc2V0X2R1bW15OworI2RlZmluZSBSRUdfVU5TRVRfVkFMVUUgKCZyZWdf
dW5zZXRfZHVtbXkpCisjZGVmaW5lIFJFR19VTlNFVChlKSAoKGUpID09IFJFR19VTlNFVF9WQUxV
RSkKKwogLyogRmFpbHVyZSBzdGFjayBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvczsgYm90aCByZV9j
b21waWxlX2Zhc3RtYXAgYW5kCiAgICByZV9tYXRjaF8yIHVzZSBhIGZhaWx1cmUgc3RhY2suICBU
aGVzZSBoYXZlIHRvIGJlIG1hY3JvcyBiZWNhdXNlIG9mCiAgICBSRUdFWF9BTExPQ0FURV9TVEFD
Sy4gICovCkBAIC0xNDM2LDY4ICsxNDQ2LDE1OSBAQAogI2lmICFkZWZpbmVkIChlbWFjcykgfHwg
IWRlZmluZWQgKFJFTF9BTExPQykKICNkZWZpbmUgUkVfTUFUQ0hfUkVMT0NBVEVfTU9WRUFCTEVf
REFUQV9QT0lOVEVSUygpCiAjZWxzZQotLyogRG9uJ3QgY2hhbmdlIE5VTEwgcG9pbnRlcnMgKi8K
LSNkZWZpbmUgQUREX0lGX05aKHZhbCkgaWYgKHZhbCkgdmFsICs9IHJtZHBfb2Zmc2V0Ci0jZGVm
aW5lIFJFX01BVENIX1JFTE9DQVRFX01PVkVBQkxFX0RBVEFfUE9JTlRFUlMoKQkJCSAgXAotZG8J
CQkJCQkJCQkgIFwKLXsJCQkJCQkJCQkgIFwKLSAgQnl0ZWNvdW50IHJtZHBfb2Zmc2V0ID0gb2Zm
c2V0X3Bvc3RfcmVsb2NhdGlvbiAobGlzcG9iaiwgb3JpZ19idWZ0ZXh0KTsgXAotCQkJCQkJCQkJ
ICBcCi0gIGlmIChybWRwX29mZnNldCkJCQkJCQkJICBcCi0gICAgewkJCQkJCQkJCSAgXAotICAg
ICAgaW50IGk7CQkJCQkJCQkgIFwKLQkJCQkJCQkJCSAgXAotICAgICAgQUREX0lGX05aIChzdHJp
bmcxKTsJCQkJCQkgIFwKLSAgICAgIEFERF9JRl9OWiAoc3RyaW5nMik7CQkJCQkJICBcCi0gICAg
ICBBRERfSUZfTlogKGQpOwkJCQkJCQkgIFwKLSAgICAgIEFERF9JRl9OWiAoZGVuZCk7CQkJCQkJ
CSAgXAotICAgICAgQUREX0lGX05aIChlbmQxKTsJCQkJCQkJICBcCi0gICAgICBBRERfSUZfTlog
KGVuZDIpOwkJCQkJCQkgIFwKLSAgICAgIEFERF9JRl9OWiAoZW5kX21hdGNoXzEpOwkJCQkJCSAg
XAotICAgICAgQUREX0lGX05aIChlbmRfbWF0Y2hfMik7CQkJCQkJICBcCi0JCQkJCQkJCQkgIFwK
LSAgICAgIGlmIChidWZwLT5yZV9uZ3JvdXBzKQkJCQkJCSAgXAotCXsJCQkJCQkJCSAgXAotCSAg
Zm9yIChpID0gMDsgaSA8IG51bV9yZWdzOyBpKyspCQkJCSAgXAotCSAgICB7CQkJCQkJCQkgIFwK
LQkgICAgICBBRERfSUZfTlogKHJlZ3N0YXJ0W2ldKTsJCQkJCSAgXAotCSAgICAgIEFERF9JRl9O
WiAocmVnZW5kW2ldKTsJCQkJCSAgXAotCSAgICAgIEFERF9JRl9OWiAob2xkX3JlZ3N0YXJ0W2ld
KTsJCQkJICBcCi0JICAgICAgQUREX0lGX05aIChvbGRfcmVnZW5kW2ldKTsJCQkJICBcCi0JICAg
ICAgQUREX0lGX05aIChiZXN0X3JlZ3N0YXJ0W2ldKTsJCQkJICBcCi0JICAgICAgQUREX0lGX05a
IChiZXN0X3JlZ2VuZFtpXSk7CQkJCSAgXAotCSAgICAgIEFERF9JRl9OWiAocmVnX2R1bW15W2ld
KTsJCQkJCSAgXAotCSAgICB9CQkJCQkJCQkgIFwKLQl9CQkJCQkJCQkgIFwKLQkJCQkJCQkJCSAg
XAotICAgICAgQUREX0lGX05aIChtYXRjaF9lbmQpOwkJCQkJCSAgXAotICAgIH0JCQkJCQkJCQkg
IFwKLX0gd2hpbGUgKDApCisKKy8qIFVwZGF0ZSBhIHJlbG9jYXRhYmxlIHBvaW50ZXIgdG8gcmVm
bGVjdCB0aGF0IGl0cyBhc3NvY2lhdGVkIGJ1ZmZlciBoYXMKKyAgIGJlZW4gcmVsb2NhdGVkLiBE
b24ndCBjaGFuZ2UgTlVMTCBwb2ludGVycyBvciByZWdpc3RlcnMgdGhhdCBoYXZlIG5vdAorICAg
YmVlbiBzZXQuIElmIGFzc2VydGlvbnMgYXJlIHR1cm5lZCBvbiwgc2FuaXR5LWNoZWNrIHRoZSB2
YWx1ZSBwYXNzZWQgaW4sCisgICBtYWtpbmcgc3VyZSBpdCByZWZsZWN0cyBidWZmZXIgZGF0YS4g
QXBwcm9wcmlhdGUgZm9yIHVzZSBib3RoIGluCisgICByZV9tYXRjaF8yX2ludGVybmFsKCkgYW5k
IHJlX3NlYXJjaF8yKCkuICovCisjZGVmaW5lIFJFTE9DQVRFX0lGX09LKHZhbCkgUkVMT0NBVEVf
SUZfT0tfMSAodmFsLCAxKQorCisvKiBTYW1lIGFzIGFib3ZlLCBidXQgbWFrZSBubyBhc3NlcnRp
b25zIGFib3V0IGhvdyBwbGF1c2libGUgdGhlIHZhbHVlIG9mCisgICBWQUwgaXMuICovCisjZGVm
aW5lIFJFTE9DQVRFX0lGX09LX05PX0FTU0VSVCh2YWwpIFJFTE9DQVRFX0lGX09LXzEgKHZhbCwg
MCkKKworLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIFJFTE9DQVRFX0lGX09LKCkgYW5kIFJFTE9D
QVRFX0lGX09LX05PX0FTU0VSVCgpLiAqLworI2RlZmluZSBSRUxPQ0FURV9JRl9PS18xKHZhbCwg
YXNzZXJ0X29rKQkJCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBp
ZiAoYXNzZXJ0X29rKQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgbWFsbG9jX2NoZWNraW5nX2Fz
c2VydAkJCQkJXAorCSAgICAoKChyZV9jaGFyICopICh2YWwpID49IChyZV9jaGFyICopIHN0cmlu
ZzEJCQlcCisJICAgICAgJiYgKHJlX2NoYXIgKikgKHZhbCkgPD0gKHJlX2NoYXIgKikgc3RyaW5n
MSArIHNpemUxKQlcCisJICAgICB8fCAoKHJlX2NoYXIgKikodmFsKSA+PSAocmVfY2hhciAqKSBz
dHJpbmcyCQlcCisJCSAmJiAocmVfY2hhciAqKSh2YWwpCQkJCQlcCisJCSA8PSAocmVfY2hhciAq
KSBzdHJpbmcyICsgc2l6ZTIpIHx8CQkJXAorCSAgICAgKHZhbCkgPT0gTlVMTCB8fCBSRUdfVU5T
RVQgKCh1bnNpZ25lZCBjaGFyICopKHZhbCkpKTsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGlmICgo
dmFsKSAhPSBOVUxMICYmICFSRUdfVU5TRVQgKCh1bnNpZ25lZCBjaGFyICopKHZhbCkpKQkJXAor
CXsJCQkJCQkJCVwKKwkgICh2YWwpICs9IHJtZHBfb2Zmc2V0OwkJCQkJCVwKKwl9CQkJCQkJCQlc
CisgICAgfSB3aGlsZSAoMCkKKworLyogV2l0aGluIHJlX21hdGNoXzJfaW50ZXJuYWwoKSwgY2hl
Y2sgd2hldGhlciB0aGUgY3VycmVudCBzZWFyY2ggc3RyaW5nCisgICByZWZsZWN0cyBhIExpc3Ag
YnVmZmVyIHRoYXQgaGFzIGp1c3QgaGFkIGl0cyB0ZXh0IHJlYWxsb2NhdGVkLiBJZiBzbywKKyAg
IHVwZGF0ZSB0aGUgbG9jYWwgc2F2ZWQgcG9pbnRlciB2YWx1ZXMgdG8gcmVmbGVjdCB0aGUgbmV3
IHRleHQKKyAgIGFkZHJlc3Nlcy4gVGhlIGxvY2FsIHZhbHVlcyBpbiBxdWVzdGlvbiBhcmUgdGhl
IGxvY2FsIHZhbHVlcyB3aXRoaW4KKyAgIHJlX21hdGNoXzJfaW50ZXJuYWwoKSwgdG9nZXRoZXIg
d2l0aCByZWd1bGFyIGV4cHJlc3Npb24gcmVnaXN0ZXIgdmFsdWVzCisgICBhbmQgdGhvc2UgdmFs
dWVzIG9uIHRoZSBmYWlsIHN0YWNrLiAqLworI2RlZmluZSBSRV9NQVRDSF9SRUxPQ0FURV9NT1ZF
QUJMRV9EQVRBX1BPSU5URVJTKCkgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgQnl0ZWNvdW50IHJtZHBfb2Zmc2V0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA9IG9mZnNl
dF9wb3N0X3JlbG9jYXRpb24gKGxpc3BvYmosIG9yaWdfYnVmdGV4dCk7ICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKHJtZHBfb2Zmc2V0KSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgIC8qIFRoaXMgYmxvY2sgd2lsbCBiZSBleGVjdXRlZCByYXJlbHkgZW5vdWdoIHRo
YXQgaXQgd291bGQgYmUgXAorICAgICAgICAgICAgIHJlYXNvbmFibGUgdG8gbWFrZSBpdCBhIG5v
bi1pbmxpbmUgZnVuY3Rpb24uIEhvd2V2ZXIsIGFzIGEgXAorICAgICAgICAgICAgIGZ1bmN0aW9u
IGl0IHdvdWxkIG5lZWQgdG8gdGFrZSAxNyBhcmd1bWVudHMgdG8gbW9kaWZ5LCAgICAgXAorICAg
ICAgICAgICAgIHdoaWNoIGlzIHZlcnkgdW53aWVsZHkuICovICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgIEVsZW1jb3VudCBpaSwgamosIGhpZ2hfcmVnLCBsb3df
cmVnOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgIFJFTE9DQVRFX0lGX09LIChkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LIChkZW5kKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LIChl
bmRfbWF0Y2hfMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
IFJFTE9DQVRFX0lGX09LIChlbmRfbWF0Y2hfMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LIChtYXRjaF9lbmQpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlm
IChidWZwLT5yZV9uZ3JvdXBzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAvKiBSZWdpc3RlciB6ZXJvIGlz
IG1hbmFnZWQgc3BlY2lhbGx5LCBzZWUgdGhlIGNvZGUgaW4gICAgXAorICAgICAgICAgICAgICAg
ICBzdWNjZWVkX2xhYmVsLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICBmb3IgKGlpID0gMTsgaWkgPCBudW1fcmVnczsgaWkrKykgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
UkVMT0NBVEVfSUZfT0sgKHJlZ3N0YXJ0W2lpXSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgUkVMT0NBVEVfSUZfT0sgKHJlZ2VuZFtpaV0pOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgUkVMT0NBVEVfSUZfT0sgKG9sZF9y
ZWdzdGFydFtpaV0pOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgUkVM
T0NBVEVfSUZfT0sgKG9sZF9yZWdlbmRbaWldKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgUkVMT0NBVEVfSUZfT0sgKGJlc3RfcmVnc3RhcnRbaWldKTsgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgUkVMT0NBVEVfSUZfT0sgKGJlc3RfcmVn
ZW5kW2lpXSk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLyogQ2hlY2sgdGhlIHJl
bGV2YW50IGVsZW1lbnRzIG9uIHRoZSBmYWlsIHN0YWNrLiAqLyAgICAgICAgXAorICAgICAgICAg
IGlpID0gZmFpbF9zdGFjay5hdmFpbCAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgIHdoaWxlIChpaSA+PSAwKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICBERUJVR19TVEFURU1FTlQgKGlpLS0pOyAvKiBTa2lwIHRoZSBmYWlsdXJlIGlkLiAqLyAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAvKiBzdHJpbmdfcGxhY2U6ICov
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBS
RUxPQ0FURV9JRl9PSyAoZmFpbF9zdGFjay5zdGFja1tpaV0ucG9pbnRlcik7IGlpLS07ICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBpaS0tOyAvKiBwYXR0ZXJuX3BsYWNl
LCBub3QgcmVsb2NhdGFibGUuICovICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAvKiBOZWl0aGVyIGhpZ2hfcmVnIG5vciBsb3dfcmVnIGFyZSByZWxvY2F0
YWJsZSwgYnV0IHdlICAgXAorICAgICAgICAgICAgICAgICBuZWVkIHRoZWlyIHZhbHVlcyB0byBs
b29wIHRocm91Z2ggdGhlIHNhdmVkICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICByZWdp
c3RlcnMuKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICBoaWdoX3JlZyA9IGZhaWxfc3RhY2suc3RhY2tbaWldLmludGVnZXI7IGlpLS07
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICBsb3dfcmVnID0gZmFpbF9zdGFjay5zdGFja1tp
aV0uaW50ZWdlcjsgaWktLTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICBtYWxsb2NfY2hlY2tpbmdfYXNzZXJ0IChpaSA+PSAoaGlnaF9yZWcgLSBsb3dfcmVn
KSk7ICAgICAgXAorICAgICAgICAgICAgICBmb3IgKGpqID0gaGlnaF9yZWc7IGpqID49IGxvd19y
ZWc7IGpqLS0pICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgaWktLTsgLyogcmVnX2luZm9bdGhpc19yZWddLndvcmQgKi8gICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgLyogcmVnZW5kW3Ro
aXNfcmVnXTogKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgUkVMT0NBVEVfSUZfT0sgKGZhaWxfc3RhY2suc3RhY2tbaWldLnBvaW50ZXIpOyBpaS0t
OyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgLyogcmVnc3RhcnRbdGhp
c19yZWddOiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICAgUkVMT0NBVEVfSUZfT0sgKGZhaWxfc3RhY2suc3RhY2tbaWldLnBvaW50ZXIpOyBpaS0tOyAg
XAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgIC8qIFdlIHVzZSB0aGUgZm9sbG93aW5nIHdoZW4gZXhhbWluaW5nIGFsbCB0aGUg
b3RoZXIgdmFsdWVzICAgXAorICAgICAgICAgICAgIGZvciBwbGF1c2liaWxpdHksIHdoaWNoIG1h
a2VzIGl0IGltcHJhY3RpY2FsIHRvIGV4YW1pbmUgICAgXAorICAgICAgICAgICAgIHRoZW0gZm9y
IHBsYXVzaWJpbGl0eSB0aGVtc2VsdmVzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LX05PX0FTU0VSVCAoc3RyaW5n
MSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09L
X05PX0FTU0VSVCAoc3RyaW5nMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgIFJFTE9DQVRFX0lGX09LX05PX0FTU0VSVCAoZW5kMSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LX05PX0FTU0VSVCAoZW5kMik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
IC8qIENhcmVmdWwsIG9yaWdfYnVmdGV4dCBpcyBhIHJlbG9jYXRhYmxlIHBvaW50ZXIgdG9vLiAq
LyAgICAgXAorICAgICAgICAgIFJFTE9DQVRFX0lGX09LX05PX0FTU0VSVCAob3JpZ19idWZ0ZXh0
KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUg
KDApCiAjZW5kaWYgLyogIWRlZmluZWQgKGVtYWNzKSB8fCAhZGVmaW5lZCAoUkVMX0FMTE9DKSAq
LwogCiAjaWYgIWRlZmluZWQgKGVtYWNzKSB8fCAhZGVmaW5lZCAoUkVMX0FMTE9DKQogI2RlZmlu
ZSBSRV9TRUFSQ0hfUkVMT0NBVEVfTU9WRUFCTEVfREFUQV9QT0lOVEVSUygpCiAjZWxzZQotI2Rl
ZmluZSBSRV9TRUFSQ0hfUkVMT0NBVEVfTU9WRUFCTEVfREFUQV9QT0lOVEVSUygpCQkJICBcCi1k
bwkJCQkJCQkJCSAgXAotewkJCQkJCQkJCSAgXAorLyogV2l0aGluIHJlX3NlYXJjaF8yKCksIGNo
ZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2VhcmNoIHN0cmluZyByZWZsZWN0cyBhCisgICBMaXNw
IGJ1ZmZlciB0aGF0IGhhcyBqdXN0IGhhZCBpdHMgdGV4dCByZWFsbG9jYXRlZC4gSWYgc28sIHVw
ZGF0ZSB0aGUKKyAgIGZ1bmN0aW9uLWxvY2FsIHNhdmVkIHBvaW50ZXIgdmFsdWVzIHRvIHJlZmxl
Y3QgdGhlIG5ldyB0ZXh0CisgICBhZGRyZXNzZXMuIFRoZXJlIGFyZSBubyByZWd1bGFyIGV4cHJl
c3Npb24gcmVnaXN0ZXIgdmFsdWVzIHRvIHVwZGF0ZSwgbm9yCisgICBpcyB0aGVyZSBhIGZhaWwg
c3RhY2suICovCisjZGVmaW5lIFJFX1NFQVJDSF9SRUxPQ0FURV9NT1ZFQUJMRV9EQVRBX1BPSU5U
RVJTKCkgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgIEJ5dGVjb3VudCBybWRwX29mZnNldCA9IG9mZnNldF9wb3N0X3JlbG9j
YXRpb24gKGxpc3BvYmosIG9yaWdfYnVmdGV4dCk7IFwKLQkJCQkJCQkJCSAgXAotICBpZiAocm1k
cF9vZmZzZXQpCQkJCQkJCSAgXAotICAgIHsJCQkJCQkJCQkgIFwKLSAgICAgIEFERF9JRl9OWiAo
c3RyMSk7CQkJCQkJCSAgXAotICAgICAgQUREX0lGX05aIChzdHIyKTsJCQkJCQkJICBcCi0gICAg
ICBBRERfSUZfTlogKHN0cmluZzEpOwkJCQkJCSAgXAotICAgICAgQUREX0lGX05aIChzdHJpbmcy
KTsJCQkJCQkgIFwKLSAgICAgIEFERF9JRl9OWiAoZCk7CQkJCQkJCSAgXAotICAgIH0JCQkJCQkJ
CQkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocm1kcF9vZmZzZXQpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgIFJFTE9DQVRFX0lGX09LIChzdHIxKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgUkVMT0NBVEVfSUZfT0sgKHN0cjIp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBS
RUxPQ0FURV9JRl9PSyAoc3RyaW5nMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIFJFTE9DQVRFX0lGX09LIChzdHJpbmcyKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgUkVMT0NBVEVfSUZfT0sgKGQp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIC8qIENhcmVmdWwsIG9yaWdfYnVmdGV4dCBpcyBhIHJlbG9j
YXRhYmxlIHBvaW50ZXIgdG9vLiAqLyAgICAgICAgICAgXAorICAgICAgUkVMT0NBVEVfSUZfT0tf
Tk9fQVNTRVJUIChvcmlnX2J1ZnRleHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBlbWFjcyAqLwogCi0v
KiBQdXNoIHBvaW50ZXIgUE9JTlRFUiBvbiBGQUlMX1NUQUNLLgotICAgUmV0dXJuIDEgaWYgd2Fz
IGFibGUgdG8gZG8gc28gYW5kIDAgaWYgcmFuIG91dCBvZiBtZW1vcnkgYWxsb2NhdGluZwotICAg
c3BhY2UgdG8gZG8gc28uICAqLworLyogV2l0aGluIHJlX2NvbXBwaWxlX2Zhc3RtYXAoKSwgcHVz
aCBwb2ludGVyIFBPSU5URVIgb250byBGQUlMX1NUQUNLLgorICAgUmV0dXJuIDEgaWYgYWJsZSB0
byBkbyBzbyBhbmQgMCBpZiByYW4gb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nCisgICBzcGFjZSB0
byBkbyBzby4KKworICAgcmVfY29tcGlsZV9mYXN0bWFwKCkgaGFzIG5vIGFjY2VzcyB0byBidWZm
ZXIgZGF0YSwgc3RhcnRzIHdpdGggYW4gZW1wdHkKKyAgIGZhaWxfc3RhY2ssIGFuZCBjbGVhbnMg
dXAgdGhlIHZhbHVlcyBpdCBhZGRzIG9uIGV4aXQuIFRoaXMgbWVhbnMKKyAgIGNvbnNpZGVyYXRp
b25zIG9mIHdoZXRoZXIgcG9pbnRlcnMgYXJlIHJlbG9jYXRhYmxlIGRvbid0IGFwcGx5LiAqLwog
I2RlZmluZSBQVVNIX1BBVFRFUk5fT1AoUE9JTlRFUiwgRkFJTF9TVEFDSykJCQkJXAogICAoKEZB
SUxfU1RBQ0tfRlVMTCAoKQkJCQkJCQlcCiAgICAgJiYgIURPVUJMRV9GQUlMX1NUQUNLIChGQUlM
X1NUQUNLKSkJCQkJCVwKQEAgLTE1MDUsMTEgKzE2MDYsMzUgQEAKICAgIDogKChGQUlMX1NUQUNL
KS5zdGFja1soRkFJTF9TVEFDSykuYXZhaWwrK10ucG9pbnRlciA9IFBPSU5URVIsCVwKICAgICAg
IDEpKQogCi0vKiBQdXNoIGEgcG9pbnRlciB2YWx1ZSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgot
ICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9u
bHkKLSAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCi0j
ZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVEVSKGl0ZW0pCQkJCQlcCi0gIGZhaWxfc3RhY2suc3Rh
Y2tbZmFpbF9zdGFjay5hdmFpbCsrXS5wb2ludGVyID0gKHVuc2lnbmVkIGNoYXIgKikgKGl0ZW0p
CisjZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVEVSXzEoaXRlbSkJCQkJCVwKKyAgZmFpbF9zdGFj
ay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdLnBvaW50ZXIgPSAocmVfY2hhciAqKSAoaXRlbSkK
KworLyogUHVzaCBhIG5vbi1yZWxvY2F0YWJsZSAobm9uLWJ1ZmZlci10ZXh0KSBwb2ludGVyIHZh
bHVlIG9udG8gdGhlIGZhaWx1cmUKKyAgIHN0YWNrLiAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZh
aWxfc3RhY2snLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbQorICAgd2l0aGluIGBQVVNIX0ZB
SUxVUkVfUE9JTlQnLCBpdHNlbGYgb25seSBmcm9tIHdpdGhpbgorICAgcmVfbWF0Y2hfMl9pbnRl
cm5hbCgpLgorICAgSWYgYXNzZXJ0aW9ucyBhcmUgdHVybmVkIG9uLCBhc3NlcnQgdGhhdCBpdGVt
IGlzIG5vdCBvbmUgb2YgdGhlCisgICByZWxvY2F0YWJsZSB2YWx1ZXMgd2Uga25vdyBhYm91dC4g
Ki8KKyNkZWZpbmUgUFVTSF9GQUlMVVJFX1BPSU5URVIoaXRlbSkgZG8gewkJCQkJXAorICAgIG1h
bGxvY19jaGVja2luZ19hc3NlcnQgKE5VTEwgPT0gaXRlbSB8fAkJCQlcCisJCQkgICAgISgoaXRl
bSA+PSBzdHJpbmcxICYmIGl0ZW0gPD0gZW5kMSkgfHwJXAorCQkJICAgICAgKGl0ZW0gPj0gc3Ry
aW5nMiAmJiBpdGVtIDw9IGVuZDIpIHx8CVwKKwkJCSAgICAgIFJFR19VTlNFVCAoKGNvbnN0IHJl
X2NoYXIgKilpdGVtKSkpOwlcCisgICAgUFVTSF9GQUlMVVJFX1BPSU5URVJfMSAoaXRlbSk7CQkJ
CQlcCisgIH0gd2hpbGUgKDApCisKKy8qIFB1c2ggYSBwb2ludGVyIHRvIGJ1ZmZlciB0ZXh0IG9u
dG8gdGhlIGZhaWx1cmUgc3RhY2suIElmIGFzc2VydGlvbnMgYXJlCisgICB0dXJuZWQgb24sIHNh
bml0eS1jaGVjayB0aGUgcG9pbnRlci4gTm90ZSB0aGF0IG5vIHR5cGUgaW5mbyBpcyBzYXZlZCwg
YW5kCisgICB0aGUgcmVsZXZhbnQgY29kZSBpbiBSRV9NQVRDSF9SRUxPQ0FURV9NT1ZFQUJMRV9E
QVRBX1BPSU5URVJTKCkgaXMKKyAgIGZyYWdpbGUgYW5kIGRlcGVuZGVudCBvbiB0aGUgb3JkZXIg
b2Ygb3BlcmF0aW9ucyBpbiBQVVNIX0ZBSUxVUkVfUE9JTlQoKSwKKyAgIGp1c3QgYXMgdGhlIGNv
ZGUgaW4gUE9QX0ZBSUxVUkVfUE9JTlQgaXMuICovCisjZGVmaW5lIFBVU0hfRkFJTFVSRV9SRUxP
Q0FUQUJMRShpdGVtKSBkbyB7CQkJCVwKKyAgICBtYWxsb2NfY2hlY2tpbmdfYXNzZXJ0ICgoaXRl
bSA+PSBzdHJpbmcxICYmIGl0ZW0gPD0gZW5kMSkgfHwJXAorCQkJICAgIChpdGVtID49IHN0cmlu
ZzIgJiYgaXRlbSA8PSBlbmQyKSB8fAlcCisJCQkgICAgaXRlbSA9PSBOVUxMIHx8CQkJCVwKKwkJ
CSAgICBSRUdfVU5TRVQgKCh1bnNpZ25lZCBjaGFyICopaXRlbSkpOwkJXAorICAgIFBVU0hfRkFJ
TFVSRV9QT0lOVEVSXzEgKGl0ZW0pOwkJCQkJXAorICB9IHdoaWxlICgwKQogCiAvKiBUaGlzIHB1
c2hlcyBhbiBpbnRlZ2VyLXZhbHVlZCBpdGVtIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCiAgICBB
c3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQpA
QCAtMTUyNiwyNyArMTY1MSwzNyBAQAogLyogVGhlc2UgdGhyZWUgUE9QLi4uIG9wZXJhdGlvbnMg
Y29tcGxlbWVudCB0aGUgdGhyZWUgUFVTSC4uLiBvcGVyYXRpb25zLgogICAgQWxsIGFzc3VtZSB0
aGF0IGBmYWlsX3N0YWNrJyBpcyBub25lbXB0eS4gICovCiAjZGVmaW5lIFBPUF9GQUlMVVJFX1BP
SU5URVIoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0ucG9pbnRlcgorCisj
aWZkZWYgZW1hY3MKK3N0YXRpYyBpbmxpbmUgcmVfY2hhciAqCitwb3BfZmFpbHVyZV9yZWxvY2F0
YWJsZV8xIChmYWlsX3N0YWNrX3R5cGUgKmZhaWxfc3RhY2tfcHRyLCByZV9jaGFyICpzdHJpbmcx
LAorCQkJICAgcmVfY2hhciAqZW5kMSwgcmVfY2hhciAqc3RyaW5nMiwgcmVfY2hhciAqZW5kMikK
K3sKKyAgcmVfY2hhciAqaXRlbSA9IGZhaWxfc3RhY2tfcHRyLT5zdGFja1tmYWlsX3N0YWNrX3B0
ci0+YXZhaWwgLSAxXS5wb2ludGVyOworICBtYWxsb2NfY2hlY2tpbmdfYXNzZXJ0ICgoaXRlbSA+
PSBzdHJpbmcxICYmIGl0ZW0gPD0gZW5kMSkgfHwKKwkJCSAgKGl0ZW0gPj0gc3RyaW5nMiAmJiBp
dGVtIDw9IGVuZDIpIHx8CisJCQkgIGl0ZW0gPT0gTlVMTCB8fCBSRUdfVU5TRVQgKCh1bnNpZ25l
ZCBjaGFyICopaXRlbSkpOworICBmYWlsX3N0YWNrX3B0ci0+YXZhaWwgLT0gMTsKKyAgcmV0dXJu
IGl0ZW07Cit9CisjZGVmaW5lIFBPUF9GQUlMVVJFX1JFTE9DQVRBQkxFKCkJCVwKKyAgcG9wX2Zh
aWx1cmVfcmVsb2NhdGFibGVfMSAoJmZhaWxfc3RhY2ssIHN0cmluZzEsIGVuZDEsIHN0cmluZzIs
IGVuZDIpCisjZWxzZQorI2RlZmluZSBQT1BfRkFJTFVSRV9SRUxPQ0FUQUJMRSBQT1BfRkFJTFVS
RV9QT0lOVEVSIAorI2VuZGlmICAgIAorCiAjZGVmaW5lIFBPUF9GQUlMVVJFX0lOVCgpIGZhaWxf
c3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5pbnRlZ2VyCiAjZGVmaW5lIFBPUF9GQUlM
VVJFX0VMVCgpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXQogCi0vKiBVc2Vk
IHRvIG9taXQgcHVzaGluZyBmYWlsdXJlIHBvaW50IGlkJ3Mgd2hlbiB3ZSdyZSBub3QgZGVidWdn
aW5nLiAgKi8KLSNpZmRlZiBERUJVRwotI2RlZmluZSBERUJVR19QVVNIIFBVU0hfRkFJTFVSRV9J
TlQKLSNkZWZpbmUgREVCVUdfUE9QKGl0ZW1fYWRkcikgKihpdGVtX2FkZHIpID0gUE9QX0ZBSUxV
UkVfSU5UICgpCi0jZWxzZQotI2RlZmluZSBERUJVR19QVVNIKGl0ZW0pCi0jZGVmaW5lIERFQlVH
X1BPUChpdGVtX2FkZHIpCi0jZW5kaWYKLQotCi0vKiBQdXNoIHRoZSBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgc3RhdGUgd2Ugd2lsbCBuZWVkCi0gICBpZiB3ZSBldmVyIGZhaWwgYmFjayB0byBpdC4K
LQotICAgUmVxdWlyZXMgdmFyaWFibGVzIGZhaWxfc3RhY2ssIHJlZ3N0YXJ0LCByZWdlbmQsIHJl
Z19pbmZvLCBhbmQKLSAgIG51bV9yZWdzIGJlIGRlY2xhcmVkLiAgRE9VQkxFX0ZBSUxfU1RBQ0sg
cmVxdWlyZXMgYGRlc3RpbmF0aW9uJyBiZQotICAgZGVjbGFyZWQuCi0KLSAgIERvZXMgYHJldHVy
biBGQUlMVVJFX0NPREUnIGlmIHJ1bnMgb3V0IG9mIG1lbW9yeS4gICovCisvKiBQdXNoIHRoZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgd2Ugd2lsbCBuZWVkIGlmIHdlIGV2ZXIgZmFpbCBi
YWNrIHRvCisgICBpdC4KKworICAgUmVxdWlyZXMgdmFyaWFibGVzIGZhaWxfc3RhY2ssIHJlZ3N0
YXJ0LCByZWdlbmQsIHJlZ19pbmZvLCBhbmQgbnVtX3JlZ3MKKyAgIGJlIGRlY2xhcmVkLiAgRE9V
QkxFX0ZBSUxfU1RBQ0sgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJyBiZSBkZWNsYXJlZC4KKworICAg
RG9lcyBgcmV0dXJuIEZBSUxVUkVfQ09ERScgaWYgcnVucyBvdXQgb2YgbWVtb3J5LiAKKworICAg
SW4gcHJhY3RpY2FsIHRlcm1zLCBvbmx5IHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiByZV9tYXRj
aF8yX2ludGVybmFsLiAqLwogCiAjaWYgIWRlZmluZWQgKFJFR0VYX01BTExPQykgJiYgIWRlZmlu
ZWQgKFJFR0VYX1JFTF9BTExPQykKICNkZWZpbmUgREVDTEFSRV9ERVNUSU5BVElPTiBjaGFyICpk
ZXN0aW5hdGlvbgpAQCAtMTU2MSwxNyArMTY5NiwyMCBAQAogICAgICBvZiAwICsgLTEgaXNuJ3Qg
ZG9uZSBhcyB1bnNpZ25lZC4gICovCQkJCVwKICAgaW50IHRoaXNfcmVnOwkJCQkJCQkJXAogCQkJ
CQkJCQkJXAotICBERUJVR19TVEFURU1FTlQgKGZhaWx1cmVfaWQrKyk7CQkJCQlcCi0gIERFQlVH
X1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3B1c2hlZCsrKTsJCQkJXAotICBERUJVR19GQUlM
X1BSSU5UMiAoIlxuUFVTSF9GQUlMVVJFX1BPSU5UICMlZDpcbiIsIGZhaWx1cmVfaWQpOwlcCi0g
IERFQlVHX0ZBSUxfUFJJTlQyICgiICBCZWZvcmUgcHVzaCwgbmV4dCBhdmFpbDogJWxkXG4iLAkJ
XAotCQkobG9uZykgKGZhaWxfc3RhY2spLmF2YWlsKTsJCQkJXAotICBERUJVR19GQUlMX1BSSU5U
MiAoIiAgICAgICAgICAgICAgICAgICAgIHNpemU6ICVsZFxuIiwJCVwKLQkJKGxvbmcpIChmYWls
X3N0YWNrKS5zaXplKTsJCQkJXAorICBERUJVR19TVEFURU1FTlQgKChmYWlsdXJlX2lkKyssIG5m
YWlsdXJlX3BvaW50c19wdXNoZWQrKykpOwkJXAogCQkJCQkJCQkJXAotICBERUJVR19GQUlMX1BS
SU5UMiAoIiAgc2xvdHMgbmVlZGVkOiAlZFxuIiwgTlVNX0ZBSUxVUkVfSVRFTVMpOwlcCi0gIERF
QlVHX0ZBSUxfUFJJTlQyICgiICAgICBhdmFpbGFibGU6ICVsZFxuIiwJCQkJXAotCQkobG9uZykg
UkVNQUlOSU5HX0FWQUlMX1NMT1RTKTsJCQkJXAorICBpZiAoREVCVUdfUlVOVElNRV9GTEFHUyAm
IFJFX0RFQlVHX0ZBSUxVUkVfUE9JTlQpCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBERUJV
R19GQUlMX1BSSU5UMiAoIlxuUFVTSF9GQUlMVVJFX1BPSU5UICMlZDpcbiIsIGZhaWx1cmVfaWQp
OwlcCisgICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAgQmVmb3JlIHB1c2gsIG5leHQgYXZhaWw6
ICVsZFxuIiwJCVwKKwkJCSAobG9uZykgKGZhaWxfc3RhY2spLmF2YWlsKTsJCQlcCisgICAgICBE
RUJVR19GQUlMX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgIHNpemU6ICVsZFxuIiwJCVwK
KwkJCSAobG9uZykgKGZhaWxfc3RhY2spLnNpemUpOwkJCVwKKyAgICAgIAkJCQkJCQkJCVwKKyAg
ICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICBzbG90cyBuZWVkZWQ6ICVkXG4iLCBOVU1fRkFJTFVS
RV9JVEVNUyk7CVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICAgICBhdmFpbGFibGU6ICVs
ZFxuIiwJCQlcCisJCQkgKGxvbmcpIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7CQkJXAorICAgIH0J
CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAgIC8qIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBh
bGxvY2F0ZWQgZm9yIHdoYXQgd2Ugd2lsbCBwdXNoLiAgKi8JXAogICB3aGlsZSAoUkVNQUlOSU5H
X0FWQUlMX1NMT1RTIDwgTlVNX0ZBSUxVUkVfSVRFTVMpCQkJXApAQCAtMTU4NCw2MCArMTcyMiw3
OCBAQAogCSAgcmV0dXJuIGZhaWx1cmVfY29kZTsJCQkJCQlcCiAJfQkJCQkJCQkJXAogICAgICAg
RU5EX1JFR0VYX01BTExPQ19PSyAoKTsJCQkJCQlcCi0gICAgICBERUJVR19GQUlMX1BSSU5UMiAo
IlxuICBEb3VibGVkIHN0YWNrOyBzaXplIG5vdzogJWxkXG4iLAkJXAotCQkgICAgKGxvbmcpIChm
YWlsX3N0YWNrKS5zaXplKTsJCQkJXAotICAgICAgREVCVUdfRkFJTF9QUklOVDIgKCIgIHNsb3Rz
IGF2YWlsYWJsZTogJWxkXG4iLAkJCVwKLQkJICAgIChsb25nKSBSRU1BSU5JTkdfQVZBSUxfU0xP
VFMpOwkJCVwKKyAgICAgIFJFX01BVENIX1JFTE9DQVRFX01PVkVBQkxFX0RBVEFfUE9JTlRFUlMg
KCk7CQkJXAogCQkJCQkJCQkJXAotICAgICAgUkVfTUFUQ0hfUkVMT0NBVEVfTU9WRUFCTEVfREFU
QV9QT0lOVEVSUyAoKTsJCQlcCisgICAgICBpZiAoREVCVUdfUlVOVElNRV9GTEFHUyAmIFJFX0RF
QlVHX0ZBSUxVUkVfUE9JTlQpCQkJXAorCXsJCQkJCQkJCVwKKwkgIERFQlVHX0ZBSUxfUFJJTlQy
ICgiXG4gIERvdWJsZWQgc3RhY2s7IHNpemUgbm93OiAlbGRcbiIsCVwKKwkJCSAgICAgKGxvbmcp
IChmYWlsX3N0YWNrKS5zaXplKTsJCQlcCisJICBERUJVR19GQUlMX1BSSU5UMiAoIiAgc2xvdHMg
YXZhaWxhYmxlOiAlbGRcbiIsCQlcCisJCQkgICAgIChsb25nKSBSRU1BSU5JTkdfQVZBSUxfU0xP
VFMpOwkJXAorCX0JCQkJCQkJCVwKICAgICB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAogICAvKiBQ
dXNoIHRoZSBpbmZvLCBzdGFydGluZyB3aXRoIHRoZSByZWdpc3RlcnMuICAqLwkJCVwKLSAgREVC
VUdfRkFJTF9QUklOVDEgKCJcbiIpOwkJCQkJCVwKLQkJCQkJCQkJCVwKICAgZm9yICh0aGlzX3Jl
ZyA9IGxvd2VzdF9hY3RpdmVfcmVnOyB0aGlzX3JlZyA8PSBoaWdoZXN0X2FjdGl2ZV9yZWc7CVwK
ICAgICAgICB0aGlzX3JlZysrKQkJCQkJCQlcCiAgICAgewkJCQkJCQkJCVwKLSAgICAgIERFQlVH
X0ZBSUxfUFJJTlQyICgiICBQdXNoaW5nIHJlZzogJWRcbiIsIHRoaXNfcmVnKTsJCVwKKyAgICAg
IFBVU0hfRkFJTFVSRV9SRUxPQ0FUQUJMRSAocmVnc3RhcnRbdGhpc19yZWddKTsJCQlcCisgICAg
ICBQVVNIX0ZBSUxVUkVfUkVMT0NBVEFCTEUgKHJlZ2VuZFt0aGlzX3JlZ10pOwkJCVwKKyAgICAg
IFBVU0hfRkFJTFVSRV9FTFQgKHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkKTsJCQlcCisJCQkJCQkJ
CQlcCiAgICAgICBERUJVR19TVEFURU1FTlQgKG51bV9yZWdzX3B1c2hlZCsrKTsJCQkJXAogCQkJ
CQkJCQkJXAotICAgICAgREVCVUdfRkFJTF9QUklOVDIgKCIgICAgc3RhcnQ6IDB4JWx4XG4iLCAo
bG9uZykgcmVnc3RhcnRbdGhpc19yZWddKTsgXAotICAgICAgUFVTSF9GQUlMVVJFX1BPSU5URVIg
KHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQkJXAorICAgICAgaWYgKERFQlVHX1JVTlRJTUVfRkxBR1Mg
JiBSRV9ERUJVR19GQUlMVVJFX1BPSU5UKQkJCVwKKwl7CQkJCQkJCQlcCisJICBERUJVR19GQUlM
X1BSSU5UMiAoIiAgUHVzaGluZyByZWc6ICVkXG4iLCB0aGlzX3JlZyk7CQlcCiAJCQkJCQkJCQlc
Ci0gICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAgICBlbmQ6IDB4JWx4XG4iLCAobG9uZykgcmVn
ZW5kW3RoaXNfcmVnXSk7CVwKLSAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChyZWdlbmRbdGhp
c19yZWddKTsJCQkJXAotCQkJCQkJCQkJXAotICAgICAgREVCVUdfRkFJTF9QUklOVDIgKCIgICAg
aW5mbzogMHglbHhcbiAgICAgICIsCQkJXAotCQkgICAgKiAobG9uZyAqKSAoJnJlZ19pbmZvW3Ro
aXNfcmVnXSkpOwkJCVwKLSAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiIG1hdGNoX251bGw9JWQi
LAkJCQlcCi0JCSAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bdGhpc19yZWdd
KSk7CVwKLSAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiIGFjdGl2ZT0lZCIsIElTX0FDVElWRSAo
cmVnX2luZm9bdGhpc19yZWddKSk7CVwKLSAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiIG1hdGNo
ZWRfc29tZXRoaW5nPSVkIiwJCQlcCi0JCSAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9b
dGhpc19yZWddKSk7CQlcCi0gICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiBldmVyX21hdGNoZWRf
c29tZXRoaW5nPSVkIiwJCQlcCi0JCSAgICBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5m
b1t0aGlzX3JlZ10pKTsJXAotICAgICAgREVCVUdfRkFJTF9QUklOVDEgKCJcbiIpOwkJCQkJCVwK
LSAgICAgIFBVU0hfRkFJTFVSRV9FTFQgKHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkKTsJCQlcCisJ
ICBERUJVR19GQUlMX1BSSU5UMiAoIiAgICBzdGFydDogMHglbHhcbiIsCQkJXAorCQkJICAgICAo
bG9uZykgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKwkgIERFQlVHX0ZBSUxfUFJJTlQyICgiICAg
IGVuZDogMHglbHhcbiIsCQkJXAorCQkJICAgICAobG9uZykgcmVnZW5kW3RoaXNfcmVnXSk7CQkJ
XAorCSAgREVCVUdfRkFJTF9QUklOVDIgKCIgICAgaW5mbzogMHglbHhcbiAgICAgICIsCQkJXAor
CQkJICAgICAqIChsb25nICopICgmcmVnX2luZm9bdGhpc19yZWddKSk7CQlcCisJICBERUJVR19G
QUlMX1BSSU5UMiAoIiBtYXRjaF9udWxsPSVkIiwJCQkJXAorCQkJICAgICBSRUdfTUFUQ0hfTlVM
TF9TVFJJTkdfUCAocmVnX2luZm8JCVwKKwkJCQkJCSAgICAgIFt0aGlzX3JlZ10pKTsJXAorCSAg
REVCVUdfRkFJTF9QUklOVDIgKCIgYWN0aXZlPSVkIiwJCQkJXAorCQkJICAgICBJU19BQ1RJVkUg
KHJlZ19pbmZvW3RoaXNfcmVnXSkpOwkJXAorCSAgREVCVUdfRkFJTF9QUklOVDIgKCIgbWF0Y2hl
ZF9zb21ldGhpbmc9JWQiLAkJCVwKKwkJCSAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZv
W3RoaXNfcmVnXSkpOwlcCisJICBERUJVR19GQUlMX1BSSU5UMiAoIiBldmVyX21hdGNoZWRfc29t
ZXRoaW5nPSVkIiwJCVwKKwkJCSAgICAgRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm8J
CVwKKwkJCQkJCSAgICAgW3RoaXNfcmVnXSkpOwlcCisJICBERUJVR19GQUlMX1BSSU5UMSAoIlxu
Iik7CQkJCQlcCisJfQkJCQkJCQkJXAogICAgIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0gIERF
QlVHX0ZBSUxfUFJJTlQyICgiICBQdXNoaW5nICBsb3cgYWN0aXZlIHJlZzogJWRcbiIsIGxvd2Vz
dF9hY3RpdmVfcmVnKTsgXAogICBQVVNIX0ZBSUxVUkVfSU5UIChsb3dlc3RfYWN0aXZlX3JlZyk7
CQkJCQlcCi0JCQkJCQkJCQlcCi0gIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQdXNoaW5nIGhpZ2gg
YWN0aXZlIHJlZzogJWRcbiIsIGhpZ2hlc3RfYWN0aXZlX3JlZyk7IFwKICAgUFVTSF9GQUlMVVJF
X0lOVCAoaGlnaGVzdF9hY3RpdmVfcmVnKTsJCQkJXAogCQkJCQkJCQkJXAotICBERUJVR19GQUlM
X1BSSU5UMiAoIiAgUHVzaGluZyBwYXR0ZXJuIDB4JWx4OiBcbiIsIChsb25nKSBwYXR0ZXJuX3Bs
YWNlKTsgXAotICBERUJVR19GQUlMX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdHRl
cm5fcGxhY2UsIHBlbmQpOwlcCiAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChwYXR0ZXJuX3BsYWNl
KTsJCQkJCVwKIAkJCQkJCQkJCVwKLSAgREVCVUdfRkFJTF9QUklOVDIgKCIgIFB1c2hpbmcgc3Ry
aW5nIDB4JWx4OiBgIiwgKGxvbmcpIHN0cmluZ19wbGFjZSk7CVwKLSAgREVCVUdfRkFJTF9QUklO
VF9ET1VCTEVfU1RSSU5HIChzdHJpbmdfcGxhY2UsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBc
Ci0JCQkgICAgIHNpemUyKTsJCQkJCVwKLSAgREVCVUdfRkFJTF9QUklOVDEgKCInXG4iKTsJCQkJ
CQlcCi0gIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChzdHJpbmdfcGxhY2UpOwkJCQkJXAorICBQVVNI
X0ZBSUxVUkVfUkVMT0NBVEFCTEUgKHN0cmluZ19wbGFjZSk7CQkJCVwKIAkJCQkJCQkJCVwKLSAg
REVCVUdfRkFJTF9QUklOVDIgKCIgIFB1c2hpbmcgZmFpbHVyZSBpZDogJXVcbiIsIGZhaWx1cmVf
aWQpOwkJXAotICBERUJVR19QVVNIIChmYWlsdXJlX2lkKTsJCQkJCQlcCisgIC8qIENhbid0IHB1
dCB0aGlzIHdpdGhpbiB0aGUgREVCVUdfUlVOVElNRV9GTEFHUywgdGhlIGRlY2lzaW9uIGlzIG1h
ZGUJXAorICAgICBhdCBjb21waWxlIHRpbWUgKi8JCQkJCQkJXAorICBERUJVR19TVEFURU1FTlQg
KFBVU0hfRkFJTFVSRV9JTlQgKGZhaWx1cmVfaWQpKTsJCQlcCisJCQkJCQkJCQlcCisgIGlmIChE
RUJVR19SVU5USU1FX0ZMQUdTICYgUkVfREVCVUdfRkFJTFVSRV9QT0lOVCkJCQlcCisgICAgewkJ
CQkJCQkJCVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQdXNoaW5nICBsb3cgYWN0aXZl
IHJlZzogJWRcbiIsCQlcCisJCQkgbG93ZXN0X2FjdGl2ZV9yZWcpOwkJCQlcCisgICAgICBERUJV
R19GQUlMX1BSSU5UMiAoIiAgUHVzaGluZyBoaWdoIGFjdGl2ZSByZWc6ICVkXG4iLAkJXAorCQkJ
IGhpZ2hlc3RfYWN0aXZlX3JlZyk7CQkJCVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQ
dXNoaW5nIHBhdHRlcm4gMHglbHg6IFxuIiwJCQlcCisJCQkgKGxvbmcpIHBhdHRlcm5fcGxhY2Up
OwkJCQlcCisgICAgICBERUJVR19GQUlMX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBh
dHRlcm5fcGxhY2UsIHBlbmQpOwlcCisgICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAgUHVzaGlu
ZyBzdHJpbmcgMHglbHg6IGAiLAkJCVwKKwkJCSAobG9uZykgc3RyaW5nX3BsYWNlKTsJCQkJXAor
ICAgICAgREVCVUdfRkFJTF9QUklOVF9ET1VCTEVfU1RSSU5HIChzdHJpbmdfcGxhY2UsIHN0cmlu
ZzEsIHNpemUxLAlcCisJCQkJICAgICAgc3RyaW5nMiwgc2l6ZTIpOwkJCVwKKyAgICAgIERFQlVH
X0ZBSUxfUFJJTlQxICgiJ1xuIik7CQkJCQlcCisgICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAg
UHVzaGluZyBmYWlsdXJlIGlkOiAldVxuIiwgZmFpbHVyZV9pZCk7CVwKKyAgICB9CQkJCQkJCQkJ
XAogfSB3aGlsZSAoMCkKIAogLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJl
IHB1c2hlZCBhbmQgcG9wcGVkIG9uIHRoZSBzdGFjawpAQCAtMTY2OCw3ICsxODI0LDcgQEAKIAog
LyogUG9wcyB3aGF0IFBVU0hfRkFJTF9TVEFDSyBwdXNoZXMuCiAKLSAgIFdlIHJlc3RvcmUgaW50
byB0aGUgcGFyYW1ldGVycywgYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsdmFsdWVzOgorICAgV2Ug
cmVzdG9yZSBpbnRvIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycywgYWxsIG9mIHdoaWNoIHNob3Vs
ZCBiZSBsdmFsdWVzOgogICAgICBTVFIgLS0gdGhlIHNhdmVkIGRhdGEgcG9zaXRpb24uCiAgICAg
IFBBVCAtLSB0aGUgc2F2ZWQgcGF0dGVybiBwb3NpdGlvbi4KICAgICAgTE9XX1JFRywgSElHSF9S
RUcgLS0gdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBhY3RpdmUgcmVnaXN0ZXJzLgpAQCAtMTY4MSw2
NyArMTgzNyw3MiBAQAogI2RlZmluZSBQT1BfRkFJTFVSRV9QT0lOVChzdHIsIHBhdCwgbG93X3Jl
ZywgaGlnaF9yZWcsCQkJXAogICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzdGFydCwgcmVn
ZW5kLCByZWdfaW5mbykJCQlcCiBkbyB7CQkJCQkJCQkJXAotICBERUJVR19TVEFURU1FTlQgKGZh
aWxfc3RhY2tfZWx0X3QgZmZhaWx1cmVfaWQ7KQkJCVwKKyAgREVCVUdfU1RBVEVNRU5UIChpbnQg
ZmZhaWx1cmVfaWQ7KQkJCQkJXAogICBpbnQgdGhpc19yZWc7CQkJCQkJCQlcCiAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnN0cmluZ190ZW1wOwkJCQkJXAogCQkJCQkJCQkJXAotICBhc3NlcnQgKCFG
QUlMX1NUQUNLX0VNUFRZICgpKTsJCQkJCVwKLQkJCQkJCQkJCVwKICAgLyogUmVtb3ZlIGZhaWx1
cmUgcG9pbnRzIGFuZCBwb2ludCB0byBob3cgbWFueSByZWdzIHB1c2hlZC4gICovCVwKLSAgREVC
VUdfRkFJTF9QUklOVDEgKCJQT1BfRkFJTFVSRV9QT0lOVDpcbiIpOwkJCQlcCi0gIERFQlVHX0ZB
SUxfUFJJTlQyICgiICBCZWZvcmUgcG9wLCBuZXh0IGF2YWlsOiAlbGRcbiIsCQkJXAotCQkobG9u
ZykgZmFpbF9zdGFjay5hdmFpbCk7CQkJCVwKLSAgREVCVUdfRkFJTF9QUklOVDIgKCIgICAgICAg
ICAgICAgICAgICAgIHNpemU6ICVsZFxuIiwJCQlcCi0JCShsb25nKSBmYWlsX3N0YWNrLnNpemUp
OwkJCQlcCi0JCQkJCQkJCQlcCiAgIGFzc2VydCAoZmFpbF9zdGFjay5hdmFpbCA+PSBOVU1fTk9O
UkVHX0lURU1TKTsJCQlcCiAJCQkJCQkJCQlcCi0gIERFQlVHX1BPUCAoJmZmYWlsdXJlX2lkLmlu
dGVnZXIpOwkJCQkJXAotICBERUJVR19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyBmYWlsdXJlIGlk
OiAlZFxuIiwJCQlcCi0JCSogKGludCAqKSAmZmZhaWx1cmVfaWQpOwkJCQlcCisgIGlmIChERUJV
R19SVU5USU1FX0ZMQUdTICYgUkVfREVCVUdfRkFJTFVSRV9QT0lOVCkJCQlcCisgICAgewkJCQkJ
CQkJCVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQxICgiUE9QX0ZBSUxVUkVfUE9JTlQ6XG4iKTsJ
CQlcCisgICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAgQmVmb3JlIHBvcCwgbmV4dCBhdmFpbDog
JWxkXG4iLAkJXAorCQkJIChsb25nKSBmYWlsX3N0YWNrLmF2YWlsKTsJCQlcCisgICAgICBERUJV
R19GQUlMX1BSSU5UMiAoIiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJWxkXG4iLAkJXAorCQkJ
IChsb25nKSBmYWlsX3N0YWNrLnNpemUpOwkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJ
XAorICBERUJVR19TVEFURU1FTlQgKGZmYWlsdXJlX2lkID0gUE9QX0ZBSUxVUkVfSU5UKCkpOwkJ
CVwKIAkJCQkJCQkJCVwKICAgLyogSWYgdGhlIHNhdmVkIHN0cmluZyBsb2NhdGlvbiBpcyBOVUxM
LCBpdCBjYW1lIGZyb20gYW4JCVwKICAgICAgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIG9w
Y29kZSwgYW5kIHdlIHdhbnQgdG8gdGhyb3cgYXdheSB0aGUJXAogICAgICBzYXZlZCBOVUxMLCB0
aHVzIHJldGFpbmluZyBvdXIgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLiAgKi8JXAot
ICBzdHJpbmdfdGVtcCA9IFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CQkJCQlcCisgIHN0cmluZ190
ZW1wID0gUE9QX0ZBSUxVUkVfUkVMT0NBVEFCTEUgKCk7CQkJCVwKICAgaWYgKHN0cmluZ190ZW1w
ICE9IE5VTEwpCQkJCQkJXAogICAgIHN0ciA9IHN0cmluZ190ZW1wOwkJCQkJCQlcCiAJCQkJCQkJ
CQlcCi0gIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQb3BwaW5nIHN0cmluZyAweCVseDogYCIsICAo
bG9uZykgc3RyKTsJCVwKLSAgREVCVUdfRkFJTF9QUklOVF9ET1VCTEVfU1RSSU5HIChzdHIsIHN0
cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMik7CVwKLSAgREVCVUdfRkFJTF9QUklOVDEgKCIn
XG4iKTsJCQkJCQlcCi0JCQkJCQkJCQlcCiAgIHBhdCA9ICh1bnNpZ25lZCBjaGFyICopIFBPUF9G
QUlMVVJFX1BPSU5URVIgKCk7CQkJXAotICBERUJVR19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyBw
YXR0ZXJuIDB4JWx4OiAiLCAobG9uZykgcGF0KTsJCVwKLSAgREVCVUdfRkFJTF9QUklOVF9DT01Q
SUxFRF9QQVRURVJOIChidWZwLCBwYXQsIHBlbmQpOwkJCVwKIAkJCQkJCQkJCVwKICAgLyogUmVz
dG9yZSByZWdpc3RlciBpbmZvLiAgKi8JCQkJCQlcCiAgIGhpZ2hfcmVnID0gUE9QX0ZBSUxVUkVf
SU5UICgpOwkJCQkJXAotICBERUJVR19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyBoaWdoIGFjdGl2
ZSByZWc6ICVkXG4iLCBoaWdoX3JlZyk7CVwKKyAgbG93X3JlZyA9IFBPUF9GQUlMVVJFX0lOVCAo
KTsJCQkJCQlcCiAJCQkJCQkJCQlcCi0gIGxvd19yZWcgPSBQT1BfRkFJTFVSRV9JTlQgKCk7CQkJ
CQkJXAotICBERUJVR19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyAgbG93IGFjdGl2ZSByZWc6ICVk
XG4iLCBsb3dfcmVnKTsJXAorICBpZiAoREVCVUdfUlVOVElNRV9GTEFHUyAmIFJFX0RFQlVHX0ZB
SUxVUkVfUE9JTlQpCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBERUJVR19GQUlMX1BSSU5U
MiAoIiAgUG9wcGluZyBmYWlsdXJlIGlkOiAlZFxuIiwgZmZhaWx1cmVfaWQpOwlcCisgICAgICBE
RUJVR19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyBzdHJpbmcgMHglbHg6IGAiLCAgKGxvbmcpIHN0
cik7CVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlRfRE9VQkxFX1NUUklORyAoc3RyLCBzdHJpbmcx
LCBzaXplMSwJCVwKKwkJCQkgICAgICBzdHJpbmcyLCBzaXplMik7CQkJXAorICAgICAgREVCVUdf
RkFJTF9QUklOVDEgKCInXG4iKTsJCQkJCVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQ
b3BwaW5nIHBhdHRlcm4gMHglbHg6ICIsIChsb25nKSBwYXQpOwlcCisgICAgICBERUJVR19GQUlM
X1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdCwgcGVuZCk7CQlcCisgICAgICBERUJV
R19GQUlMX1BSSU5UMiAoIiAgUG9wcGluZyBoaWdoIGFjdGl2ZSByZWc6ICVkXG4iLCBoaWdoX3Jl
Zyk7CVwKKyAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICBQb3BwaW5nICBsb3cgYWN0aXZlIHJl
ZzogJWRcbiIsIGxvd19yZWcpOwlcCisgICAgfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKICAgZm9y
ICh0aGlzX3JlZyA9IGhpZ2hfcmVnOyB0aGlzX3JlZyA+PSBsb3dfcmVnOyB0aGlzX3JlZy0tKQkJ
XAogICAgIHsJCQkJCQkJCQlcCi0gICAgICBERUJVR19GQUlMX1BSSU5UMiAoIiAgICBQb3BwaW5n
IHJlZzogJWRcbiIsIHRoaXNfcmVnKTsJCVwKKyAgICAgIHJlZ19pbmZvW3RoaXNfcmVnXS53b3Jk
ID0gUE9QX0ZBSUxVUkVfRUxUICgpOwkJCVwKKyAgICAgIHJlZ2VuZFt0aGlzX3JlZ10gPSBQT1Bf
RkFJTFVSRV9SRUxPQ0FUQUJMRSAoKTsJCQlcCisgICAgICByZWdzdGFydFt0aGlzX3JlZ10gPSBQ
T1BfRkFJTFVSRV9SRUxPQ0FUQUJMRSAoKTsJCQlcCiAJCQkJCQkJCQlcCi0gICAgICByZWdfaW5m
b1t0aGlzX3JlZ10ud29yZCA9IFBPUF9GQUlMVVJFX0VMVCAoKTsJCQlcCi0gICAgICBERUJVR19G
QUlMX1BSSU5UMiAoIiAgICAgIGluZm86IDB4JWx4XG4iLAkJCQlcCi0JCSAgICAqIChsb25nICop
ICZyZWdfaW5mb1t0aGlzX3JlZ10pOwkJCVwKLQkJCQkJCQkJCVwKLSAgICAgIHJlZ2VuZFt0aGlz
X3JlZ10gPSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwkJCVwKLSAgICAgIERFQlVHX0ZBSUxfUFJJ
TlQyICgiICAgICAgZW5kOiAweCVseFxuIiwgKGxvbmcpIHJlZ2VuZFt0aGlzX3JlZ10pOyBcCi0J
CQkJCQkJCQlcCi0gICAgICByZWdzdGFydFt0aGlzX3JlZ10gPSBQT1BfRkFJTFVSRV9QT0lOVEVS
ICgpOwkJCVwKLSAgICAgIERFQlVHX0ZBSUxfUFJJTlQyICgiICAgICAgc3RhcnQ6IDB4JWx4XG4i
LCAobG9uZykgcmVnc3RhcnRbdGhpc19yZWddKTsgXAorICAgICAgaWYgKERFQlVHX1JVTlRJTUVf
RkxBR1MgJiBSRV9ERUJVR19GQUlMVVJFX1BPSU5UKQkJCVwKKwl7CQkJCQkJCQlcCisJICBERUJV
R19GQUlMX1BSSU5UMiAoIiAgICBQb3BwaW5nIHJlZzogJWRcbiIsIHRoaXNfcmVnKTsJXAorCSAg
REVCVUdfRkFJTF9QUklOVDIgKCIgICAgICBpbmZvOiAweCVseFxuIiwJCQlcCisJCQkgICAgICog
KGxvbmcgKikgJnJlZ19pbmZvW3RoaXNfcmVnXSk7CQlcCisJICBERUJVR19GQUlMX1BSSU5UMiAo
IiAgICAgIGVuZDogMHglbHhcbiIsCQkJXAorCQkJICAgICAobG9uZykgcmVnZW5kW3RoaXNfcmVn
XSk7CQkJXAorCSAgREVCVUdfRkFJTF9QUklOVDIgKCIgICAgICBzdGFydDogMHglbHhcbiIsCQkJ
XAorCQkJICAgICAobG9uZykgcmVnc3RhcnRbdGhpc19yZWddKTsJCVwKKwl9CQkJCQkJCQlcCiAg
ICAgfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKICAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsJ
CQkJCQlcCiAgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3BvcHBlZCsrKTsJCQkJ
XAogfSB3aGlsZSAoMCkgLyogUE9QX0ZBSUxVUkVfUE9JTlQgKi8KIAotCiAMCiAvKiBTdHJ1Y3R1
cmUgZm9yIHBlci1yZWdpc3RlciAoYS5rLmEuIHBlci1ncm91cCkgaW5mb3JtYXRpb24uCiAgICBP
dGhlciByZWdpc3RlciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUKQEAgLTE3OTQsMTEgKzE5NTUs
NiBAQAogCX0JCQkJCQkJCVwKICAgICB9CQkJCQkJCQkJXAogICB3aGlsZSAoMCkKLQotLyogUmVn
aXN0ZXJzIGFyZSBzZXQgdG8gYSBzZW50aW5lbCB3aGVuIHRoZXkgaGF2ZW4ndCB5ZXQgbWF0Y2hl
ZC4gICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciByZWdfdW5zZXRfZHVtbXk7Ci0jZGVmaW5lIFJF
R19VTlNFVF9WQUxVRSAoJnJlZ191bnNldF9kdW1teSkKLSNkZWZpbmUgUkVHX1VOU0VUKGUpICgo
ZSkgPT0gUkVHX1VOU0VUX1ZBTFVFKQogDAogLyogU3Vicm91dGluZSBkZWNsYXJhdGlvbnMgYW5k
IG1hY3JvcyBmb3IgcmVnZXhfY29tcGlsZS4gICovCiAKQEAgLTI1OTksMTIgKzI3NTUsMTIgQEAK
IAogI2lmZGVmIE1VTEUKICNkZWZpbmUgTUFZQkVfU1RBUlRfT1ZFUl9XSVRIX0VYVEVOREVEKGNo
KQlcCi0JICBpZiAoY2ggPj0gMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGlmIChj
aCA+PSAweDgwKSBkbwkJCVwKIAkgICAgewkJCQkJXAogCSAgICAgIGdvdG8gc3RhcnRfb3Zlcl93
aXRoX2V4dGVuZGVkOwlcCiAJICAgIH0gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBNQVlCRV9T
VEFSVF9PVkVSX1dJVEhfRVhURU5ERUQoY2gpCisjZGVmaW5lIE1BWUJFX1NUQVJUX09WRVJfV0lU
SF9FWFRFTkRFRChjaCkgKHZvaWQpKGNoKQogI2VuZGlmCiAKICAgICAgICAgY2FzZSAnWyc6CkBA
IC01MjkxLDkgKzU0NDcsOCBAQAogICAgICByZWdpc3RlciBpbmZvcm1hdGlvbiBzdHJ1Y3QuICAq
LwogICBmb3IgKG1jbnQgPSAxOyBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKICAgICB7Ci0gICAg
ICByZWdzdGFydFttY250XSA9IHJlZ2VuZFttY250XQotICAgICAgICA9IG9sZF9yZWdzdGFydFtt
Y250XSA9IG9sZF9yZWdlbmRbbWNudF0gPSBSRUdfVU5TRVRfVkFMVUU7Ci0KKyAgICAgIHJlZ3N0
YXJ0W21jbnRdID0gcmVnZW5kW21jbnRdID0gb2xkX3JlZ3N0YXJ0W21jbnRdID0gb2xkX3JlZ2Vu
ZFttY250XQorCT0gYmVzdF9yZWdzdGFydFttY250XSA9IGJlc3RfcmVnZW5kW21jbnRdID0gUkVH
X1VOU0VUX1ZBTFVFOwogICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW21j
bnRdKSA9IE1BVENIX05VTExfVU5TRVRfVkFMVUU7CiAgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZv
W21jbnRdKSA9IDA7CiAgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bbWNudF0pID0g
MDsKQEAgLTYzMzksNyArNjQ5NCw3IEBACiAgICAgICAgICAgREVCVUdfTUFUQ0hfUFJJTlQxICgi
RVhFQ1VUSU5HIHB1c2hfZHVtbXlfZmFpbHVyZS5cbiIpOwogICAgICAgICAgIC8qIFNlZSBjb21t
ZW50cyBqdXN0IGFib3ZlIGF0IGBkdW1teV9mYWlsdXJlX2p1bXAnIGFib3V0IHRoZQogICAgICAg
ICAgICAgIHR3byB6ZXJvZXMuICAqLwotICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAoKHVu
c2lnbmVkIGNoYXIgKikgMCwgKHVuc2lnbmVkIGNoYXIgKikgMCwgLTIpOworICAgICAgICAgIFBV
U0hfRkFJTFVSRV9QT0lOVCAoKHJlX2NoYXIgKikgMCwgKHJlX2NoYXIgKikgMCwgLTIpOwogICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qIEhhdmUgdG8gc3VjY2VlZCBtYXRjaGluZyB3aGF0
IGZvbGxvd3MgYXQgbGVhc3QgbiB0aW1lcy4KCgotLSAK4oCYVHJhbWFkb2wgaXMgZnVydGhlciBm
ZWQgdG8gY2F0dGxlIFvigKZdIHdoZW4gd29ya2luZyB0aGVtIFvigKZdIChhcyBkcmFmdAphbmlt
YWxzKSBzbyB0aGF0IHRoZSBhbmltYWxzIGRvIG5vdCBnZXQgdGlyZWQgcXVpY2tseS4g4oCm4oCZ
CgnigJQgQW5nZXdhbmR0ZSBDaGVtaWUsIFNlcHQgMjAxNCwgZGVzY3JpYmluZyB0aGUgc29jaWFs
IGNvbnRleHQgb2YKCShzeW50aGV0aWMpIHRyYW1hZG9sIGhhdmluZyBiZWVuIGZvdW5kIGluIENh
bWVyb29uIHRyZWUgcm9vdHMuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpYRW1hY3MtUGF0Y2hlcyBtYWlsaW5nIGxpc3QKWEVtYWNzLVBhdGNoZXNAeGVt
YWNzLm9yZwpodHRwOi8vbGlzdHMueGVtYWNzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbWFjcy1w
YXRjaGVzCg==