X-MimeOLE: Produced By Microsoft Exchange V6.5.7226.0
Received: from pdsmsx404.ccr.corp.intel.com ([172.16.12.64]) by
	pdsmsx403.ccr.corp.intel.com with Microsoft
	SMTPSVC(6.0.3790.211); Fri, 20 May 2005 11:59:45 +0800
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C55CF1.0162A417"
Received: from pgsmsx402.gar.corp.intel.com ([172.30.190.22]) by
	pdsmsx404.ccr.corp.intel.com with Microsoft
	SMTPSVC(6.0.3790.211); Fri, 20 May 2005 11:59:45 +0800
Received: from fmsmsx311.amr.corp.intel.com ([132.233.42.214]) by
	pgsmsx402.gar.corp.intel.com with Microsoft
	SMTPSVC(6.0.3790.211); Fri, 20 May 2005 11:59:43 +0800
Received: from fmsmsx331.amr.corp.intel.com ([132.233.42.156]) by
	fmsmsx311.amr.corp.intel.com with Microsoft
	SMTPSVC(6.0.3790.211); Thu, 19 May 2005 20:59:36 -0700
Received: from fmsmsxvs041.fm.intel.com ([132.233.42.126]) by
	fmsmsx331.amr.corp.intel.com with Microsoft
	SMTPSVC(6.0.3790.211); Thu, 19 May 2005 20:59:36 -0700
Received: from fmsfmr100.fm.intel.com ([10.1.192.58]) by
	fmsmsxvs041.fm.intel.com (SAVSMTP 3.1.7.47) with SMTP id
	M2005051920593605970 for <xiaofeng.ling@intel.com>;
	Thu, 19 May 2005 20:59:36 -0700
Received: from intel.com (xling.sh.intel.com [172.16.219.75]) by
	fmsfmr100.fm.intel.com (8.12.10/8.12.10/d: major-inner.mc,v 1.2
	2004/09/17 18:05:01 root Exp $) with ESMTP id j4K3xYjZ021445
	for <xiaofeng.ling@intel.com>; Fri, 20 May 2005 03:59:35 GMT
Content-class: urn:content-classes:message
Subject: [PATCH]vbd/vnif paravirtulization driver hypervisor support
Date: Fri, 20 May 2005 12:04:22 +0800
Message-ID: <3ACA40606221794F80A5670F0AF15F840827EB3A@pdsmsx403>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: [PATCH]vbd/vnif paravirtulization driver hypervisor support
Thread-Index: AcVc8FwRT5+tiTB0Sp2X9xUmRah0Ww==
From: "Ling, Xiaofeng" <xiaofeng.ling@intel.com>
To: "Ling, Xiaofeng" <xiaofeng.ling@intel.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C55CF1.0162A417
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

This patch adds paravirutulization driver support for vmx domain in
hypervisor.  The VBD and VNIF frontend driver can then be used in=20
unmodified kernel as a module to get better performance than device =
model.
The backend driver needs no change and can work together with =
xeno-linux.
The event channel mechanism works as a pci device in guest linux, so
a event channel device driver will as basic module in guest kernel.

What's the patch done is:
1.copy_to/from_guest support, which is used to copy context from/to=20
guest space to hypervisor space.
2.copy_to/from_user will call copy_to/from_guest for a vmx domain.
3.A separate hypercall table for paravirutulization driver which mask
some unused entries.
4.add hypercalls for address translation.and share page mapping(event=20
channel and grant table)
5.clean some hypercalls path for vmx domain.





------_=_NextPart_001_01C55CF1.0162A417
Content-Type: text/x-patch;
	name="paravirtulization-driver-hypervisor.patch"
Content-Transfer-Encoding: base64
Content-Description: paravirtulization-driver-hypervisor.patch
Content-Disposition: inline;
	filename="paravirtulization-driver-hypervisor.patch"

IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBkaWZmIC1OcnUgc3R5bGUgcGF0Y2guDQoj
DQojIENoYW5nZVNldA0KIyAgIDIwMDUvMDUvMjAgMTE6Mjc6MDQrMDg6MDAgeGlhb2ZlbmcubGlu
Z0BpbnRlbC5jb20gDQojICAgVGhpcyBwYXRjaCBhZGRzIHBhcmF2aXJ1dHVsaXphdGlvbiBkcml2
ZXIgc3VwcG9ydCBmb3Igdm14IGRvbWFpbiBpbiBoeXBlcnZpc29yLg0KIyAgIFRoZSBWQkQgYW5k
IFZOSUYgZnJvbnRlbmQgZHJpdmVyIGNhbiB0aGVuIGJlIHVzZWQgaW4gdW5tb2RpZmllZCBrZXJu
ZWwgYXMgYSBtb2R1bGUgdG8gZ2V0IA0KIyAgIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIGRldmlj
ZSBtb2RlbC4NCiMgICBUaGUgYmFja2VuZCBkcml2ZXIgbmVlZHMgbm8gY2hhbmdlIGFuZCBjYW4g
d29yayB0b2dldGhlciB3aXRoIHhlbm8tbGludXguDQojICAgVGhlIGV2ZW50IGNoYW5uZWwgbWVj
aGFuaXNtIHdvcmtzIGFzIGEgcGNpIGRldmljZSBpbiBndWVzdCBsaW51eC4gDQojICAgDQojICAg
U2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgTGluZyA8eGlhb2ZlbmcubGluZ0BpbnRlbC5jb20+DQoj
IA0KIyBCaXRLZWVwZXIvZXRjL2xvZ2dpbmdfb2sNCiMgICAyMDA1LzA1LzIwIDExOjI3OjA0KzA4
OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICsxIC0wDQojICAgTG9nZ2luZyB0byBsb2dnaW5n
QG9wZW5sb2dnaW5nLm9yZyBhY2NlcHRlZA0KIyANCiMgeGVuL2luY2x1ZGUveGVuL2NvbmZpZy5o
DQojICAgMjAwNS8wNS8yMCAxMToyNzowMSswODowMCB4aWFvZmVuZy5saW5nQGludGVsLmNvbSAr
OCAtMA0KIyAgIEFkZCBkZWJ1ZyBwcmludCBmb3Igdm14IGRyaXZlcg0KIyANCiMgeGVuL2luY2x1
ZGUvcHVibGljL3hlbi5oDQojICAgMjAwNS8wNS8yMCAxMToyNzowMSswODowMCB4aWFvZmVuZy5s
aW5nQGludGVsLmNvbSArMTMgLTENCiMgICBhZGQgdmlydHVhbCBkZXZpY2UgaHlwZXJjYWxsIGVu
dHJ5DQojIA0KIyB4ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC14ODZfMzIuaA0KIyAgIDIwMDUvMDUv
MjAgMTE6Mjc6MDErMDg6MDAgeGlhb2ZlbmcubGluZ0BpbnRlbC5jb20gKzUgLTANCiMgICBhZGQg
dm1jYWxsIHRvIGRvIGh5cGVyY2FsbCBpbiB2bXggZG9tYWluIA0KIyANCiMgeGVuL2luY2x1ZGUv
YXNtLXg4Ni94ODZfNjQvdWFjY2Vzcy5oDQojICAgMjAwNS8wNS8yMCAxMToyNzowMSswODowMCB4
aWFvZmVuZy5saW5nQGludGVsLmNvbSArNSAtMA0KIyAgIGNvcHlfdG8vZnJvbV9ndWVzdCBmb3Ig
dm14IGRvbWFpbi4NCiMgDQojIHhlbi9pbmNsdWRlL2FzbS14ODYveDg2XzMyL3VhY2Nlc3MuaA0K
IyAgIDIwMDUvMDUvMjAgMTE6Mjc6MDErMDg6MDAgeGlhb2ZlbmcubGluZ0BpbnRlbC5jb20gKzUg
LTANCiMgICBjb3B5X3RvL2Zyb21fZ3Vlc3QgZm9yIHZteCBkb21haW4uDQojIA0KIyB4ZW4vaW5j
bHVkZS9hc20teDg2L3ZteF92bWNzLmgNCiMgICAyMDA1LzA1LzIwIDExOjI3OjAxKzA4OjAwIHhp
YW9mZW5nLmxpbmdAaW50ZWwuY29tICsyIC0wDQojICAgZGVidWcgZm9yIFZNWCBWQkQgYW5kIFZO
SUYNCiMgDQojIHhlbi9jb21tb24vbXVsdGljYWxsLmMNCiMgICAyMDA1LzA1LzIwIDExOjI3OjAx
KzA4OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICszNCAtOQ0KIyAgIHZteCBkb21haW4gaHlw
ZXJjYWxsIHBhdGggDQojIA0KIyB4ZW4vY29tbW9uL2dyYW50X3RhYmxlLmMNCiMgICAyMDA1LzA1
LzIwIDExOjI3OjAxKzA4OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICsyOSAtNg0KIyAgIHNl
dHVwIGdyYW50IHRhYmxlIGZvciB2bXggZG9tYWluDQojIA0KIyB4ZW4vY29tbW9uL2RvbV9tZW1f
b3BzLmMNCiMgICAyMDA1LzA1LzIwIDExOjI3OjAxKzA4OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwu
Y29tICsxMiAtNQ0KIyAgIGh5cGVyY2FsbCBwYXRoIGZvciB2bXggZG9tYWluDQojIA0KIyB4ZW4v
YXJjaC94ODYveDg2XzY0L3VzZXJjb3B5LmMNCiMgICAyMDA1LzA1LzIwIDExOjI3OjAxKzA4OjAw
IHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICsxNSAtMA0KIyAgIGNvcHlfdG8vZnJvbV9ndWVzdCBz
dHViIGZvciB4ODZfNjQNCiMgDQojIHhlbi9hcmNoL3g4Ni94ODZfMzIvdXNlcmNvcHkuYw0KIyAg
IDIwMDUvMDUvMjAgMTE6Mjc6MDErMDg6MDAgeGlhb2ZlbmcubGluZ0BpbnRlbC5jb20gKzk5IC0w
DQojICAgY29weV90by9mcm9tX2d1ZXN0IGZvciB2bXggZG9tYWluDQojIA0KIyB4ZW4vYXJjaC94
ODYveDg2XzMyL2VudHJ5LlMNCiMgICAyMDA1LzA1LzIwIDExOjI3OjAxKzA4OjAwIHhpYW9mZW5n
LmxpbmdAaW50ZWwuY29tICszNiAtMA0KIyAgIGFkZCBhbiBoeXBlcmNhbGwgdGFibGUgZm9yIHZt
eCBkb2FtaW0sIG1hc2sgdW51c2VkIGh5cGVyY2FsbHMNCiMgDQojIHhlbi9hcmNoL3g4Ni92bXhf
aW8uYw0KIyAgIDIwMDUvMDUvMjAgMTE6Mjc6MDErMDg6MDAgeGlhb2ZlbmcubGluZ0BpbnRlbC5j
b20gKzUzIC03DQojICAgZGVsaWV2ZSBldmVudCB0byB2bXggZG9tYWluIGJ5IGlycQ0KIyANCiMg
eGVuL2FyY2gveDg2L3ZteC5jDQojICAgMjAwNS8wNS8yMCAxMToyNzowMSswODowMCB4aWFvZmVu
Zy5saW5nQGludGVsLmNvbSArODMgLTQNCiMgICBoeXBlcmNhbGwgZW50cnkgZm9yIHZteCBkb21h
aW4gYnkgdm1jYWxsDQojIA0KIyB4ZW4vYXJjaC94ODYvc2hhZG93LmMNCiMgICAyMDA1LzA1LzIw
IDExOjI3OjAxKzA4OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICsyNSAtMg0KIyAgIHNldCBt
YXAgZm9yIHZteCBkb21haW4NCiMgDQojIHhlbi9hcmNoL3g4Ni9tbS5jDQojICAgMjAwNS8wNS8y
MCAxMToyNzowMSswODowMCB4aWFvZmVuZy5saW5nQGludGVsLmNvbSArMjcgLTEzDQojICAgY2xl
YXIgdm14IGh5cGVyY2FsbCBwYXRoDQojIA0KIyB4ZW4vYXJjaC94ODYvZG9tYWluLmMNCiMgICAy
MDA1LzA1LzIwIDExOjI3OjAxKzA4OjAwIHhpYW9mZW5nLmxpbmdAaW50ZWwuY29tICsxIC0wDQoj
ICAgYWRkIGNhbGwgYmFjayBpcnEgbWVtYmVyDQojIA0KZGlmZiAtTnJ1IGEveGVuL2FyY2gveDg2
L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jDQotLS0gYS94ZW4vYXJjaC94ODYvZG9t
YWluLmMJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9kb21h
aW4uYwkyMDA1LTA1LTIwIDExOjQwOjEyICswODowMA0KQEAgLTI2NSw2ICsyNjUsNyBAQA0KICAg
ICBlZC0+YXJjaC5wZXJkb21haW5fcHRlc1tGSVJTVF9SRVNFUlZFRF9HRFRfUEFHRV0gPQ0KICAg
ICAgICAgbDFlX2NyZWF0ZV9wYWdlKHZpcnRfdG9fcGFnZShnZHRfdGFibGUpLCBQQUdFX0hZUEVS
VklTT1IpOw0KIA0KKyAgICBlZC0+YXJjaC5jYWxsYmFja19pcnEgPSAwOw0KICAgICBlZC0+YXJj
aC5ndWVzdF92dGFibGUgID0gX19saW5lYXJfbDJfdGFibGU7DQogICAgIGVkLT5hcmNoLnNoYWRv
d192dGFibGUgPSBfX3NoYWRvd19saW5lYXJfbDJfdGFibGU7DQogDQpkaWZmIC1OcnUgYS94ZW4v
YXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jDQotLS0gYS94ZW4vYXJjaC94ODYvbW0u
YwkyMDA1LTA1LTIwIDExOjQwOjEyICswODowMA0KKysrIGIveGVuL2FyY2gveDg2L21tLmMJMjAw
NS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCkBAIC0xODQ4LDIxICsxODQ4LDMyIEBADQogDQogICAg
IGlmICggdW5saWtlbHkoIWFycmF5X2FjY2Vzc19vayh1cmVxcywgY291bnQsIHNpemVvZihyZXEp
KSkgKQ0KICAgICB7DQotICAgICAgICByYyA9IC1FRkFVTFQ7DQotICAgICAgICBnb3RvIG91dDsN
CisgICAgICAgaWYoIVZNWF9ET01BSU4oY3VycmVudCkpew0KKyAgICAgICAgICAgcmMgPSAtRUZB
VUxUOw0KKyAgICAgICAgICAgZ290byBvdXQ7DQorICAgICAgIH0NCiAgICAgfQ0KIA0KICAgICBm
b3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQ0KICAgICB7DQotICAgICAgICBpZiAoIGh5cGVy
Y2FsbF9wcmVlbXB0X2NoZWNrKCkgKQ0KKyAgICAgICAgaWYoVk1YX0RPTUFJTihjdXJyZW50KSkN
CiAgICAgICAgIHsNCi0gICAgICAgICAgICByYyA9IGh5cGVyY2FsbDRfY3JlYXRlX2NvbnRpbnVh
dGlvbigNCi0gICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUsIHVyZXFzLCAN
Ci0gICAgICAgICAgICAgICAgKGNvdW50IC0gaSkgfCBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgcGRv
bmUsIGZvcmVpZ25kb20pOw0KLSAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgICAgICBy
YyA9IGNvcHlfZnJvbV9ndWVzdCgmcmVxLCB1cmVxcywgc2l6ZW9mKHJlcSkpOw0KICAgICAgICAg
fQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICggaHlwZXJjYWxs
X3ByZWVtcHRfY2hlY2soKSApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByYyA9
IGh5cGVyY2FsbDRfY3JlYXRlX2NvbnRpbnVhdGlvbigNCisgICAgICAgICAgICAgICAgICAgICAg
ICBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZSwgdXJlcXMsIA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIChjb3VudCAtIGkpIHwgTU1VX1VQREFURV9QUkVFTVBURUQsIHBkb25lLCBmb3JlaWduZG9t
KTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
IHJjID0gX19jb3B5X2Zyb21fdXNlcigmcmVxLCB1cmVxcywgc2l6ZW9mKHJlcSkpOw0KIA0KLSAg
ICAgICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZyZXEsIHVyZXFzLCBzaXplb2Yo
cmVxKSkgIT0gMCkgKQ0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCB1bmxpa2VseShyYykgIT0g
MCkgDQogICAgICAgICB7DQogICAgICAgICAgICAgTUVNX0xPRygiQmFkIF9fY29weV9mcm9tX3Vz
ZXIiKTsNCiAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7DQpAQCAtMjAwOCw3ICsyMDE5LDggQEAN
CiAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgfQ0KIA0KLSAgICAgICAgICAg
IGlmICggdW5saWtlbHkoc2hhZG93X21vZGVfdHJhbnNsYXRlKEZPUkVJR05ET00pICYmICFJU19Q
UklWKGQpKSApDQorICAgICAgICAgICAgaWYgKCB1bmxpa2VseShzaGFkb3dfbW9kZV90cmFuc2xh
dGUoRk9SRUlHTkRPTSkgJiYgIUlTX1BSSVYoZCkgDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAhc2hhZG93X21vZGVfZXh0ZXJuYWwoRk9SRUlHTkRPTSkpICkNCiAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgIE1FTV9MT0coImNhbid0IG11dGF0ZSB0aGUgbTJwIG9mIHRyYW5z
bGF0ZWQgZ3Vlc3RzIik7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KQEAgLTIxMTUsNyArMjEy
Nyw2IEBADQogICAgIHJldHVybiByYzsNCiB9DQogDQotDQogaW50IGRvX3VwZGF0ZV92YV9tYXBw
aW5nKHVuc2lnbmVkIGxvbmcgdmEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGwxX3BnZW50
cnlfdCAgdmFsLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn
cykNCkBAIC0yMTM4LDkgKzIxNDksMTIgQEANCiAgICAgaWYgKCB1bmxpa2VseShzaGFkb3dfbW9k
ZV9lbmFibGVkKGQpKSApDQogICAgICAgICBjaGVja19wYWdldGFibGUoZWQsICJwcmUtdmEiKTsg
LyogZGVidWcgKi8NCiANCi0gICAgaWYgKCB1bmxpa2VseSghbW9kX2wxX2VudHJ5KCZsaW5lYXJf
cGdfdGFibGVbbDFfbGluZWFyX29mZnNldCh2YSldLA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsKSkgKQ0KLSAgICAgICAgcmMgPSAtRUlOVkFMOw0KKyAgICBpZiAoICFzaGFk
b3dfbW9kZV9leHRlcm5hbChkKSApDQorICAgIHsNCisgICAgICAgIGlmICggdW5saWtlbHkoIW1v
ZF9sMV9lbnRyeSgmbGluZWFyX3BnX3RhYmxlW2wxX2xpbmVhcl9vZmZzZXQodmEpXSwNCisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWwpKSApDQorICAgICAgICAgICAgcmMgPSAtRUlOVkFMOw0K
KyAgICB9DQogDQogICAgIGlmICggbGlrZWx5KHJjID09IDApICYmIHVubGlrZWx5KHNoYWRvd19t
b2RlX2VuYWJsZWQoZCkpICkNCiAgICAgew0KZGlmZiAtTnJ1IGEveGVuL2FyY2gveDg2L3NoYWRv
dy5jIGIveGVuL2FyY2gveDg2L3NoYWRvdy5jDQotLS0gYS94ZW4vYXJjaC94ODYvc2hhZG93LmMJ
MjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9zaGFkb3cuYwky
MDA1LTA1LTIwIDExOjQwOjEyICswODowMA0KQEAgLTI3NDYsNiArMjc0Niw3IEBADQogICAgIHN0
cnVjdCBkb21haW4gKmQgPSBlZC0+ZG9tYWluOw0KICAgICBsMV9wZ2VudHJ5X3Qgc3B0ZTsNCiAg
ICAgaW50IHJjID0gMDsNCisgICAgdW5zaWduZWQgbG9uZyBncGEsIG1mbjsNCiANCiAgICAgc2hh
ZG93X2xvY2soZCk7DQogDQpAQCAtMjc1Niw5ICsyNzU3LDMxIEBADQogICAgIC8vIGxpbmVhcl9w
Z190YWJsZVtsMV9saW5lYXJfb2Zmc2V0KHZhKV0gdG8gYmUgaW4gc3luYykuLi4NCiAgICAgLy8N
CiAgICAgX19zaGFkb3dfc3luY192YShlZCwgdmEpOw0KKyAgICANCisgICAgaWYoIVZNWF9ET01B
SU4oZWQpKQ0KKyAgICB7DQorICAgICAgICBsMXB0ZV9wcm9wYWdhdGVfZnJvbV9ndWVzdChkLCB2
YWwsICZzcHRlKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGdwYSA9IGd2
YV90b19ncGEodmEpOw0KKyAgICAgICAgbWZuID0gbDFlX2dldF9wZm4odmFsKTsNCisgICAgICAg
IGlmKGdwYSkgDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYobDFlX2dldF92YWx1ZSh2YWwp
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2V0X3BoeXN0b21hY2hpbmUoZ3Bh
ID4+IFBBR0VfU0hJRlQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1mbik7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgc2V0X3BoeXN0b21h
Y2hpbmUoZ3BhID4+IFBBR0VfU0hJRlQsIElOVkFMSURfTUZOKTsNCisgICAgICAgIH0NCiANCi0g
ICAgbDFwdGVfcHJvcGFnYXRlX2Zyb21fZ3Vlc3QoZCwgdmFsLCAmc3B0ZSk7DQotICAgIHNoYWRv
d19zZXRfbDFlKHZhLCBzcHRlLCAwKTsNCisgICAgICAgIHNwdGUgPSB2YWw7DQorDQorICAgIH0N
CisNCisgICAgc2hhZG93X3NldF9sMWUodmEsIHNwdGUsIFZNWF9ET01BSU4oZWQpKTsNCiANCiAg
ICAgLyoNCiAgICAgICogSWYgd2UncmUgaW4gbG9nLWRpcnR5IG1vZGUgdGhlbiB3ZSBuZWVkIHRv
IG5vdGUgdGhhdCB3ZSd2ZSB1cGRhdGVkDQpkaWZmIC1OcnUgYS94ZW4vYXJjaC94ODYvdm14LmMg
Yi94ZW4vYXJjaC94ODYvdm14LmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni92bXguYwkyMDA1LTA1LTIw
IDExOjQwOjEyICswODowMA0KKysrIGIveGVuL2FyY2gveDg2L3ZteC5jCTIwMDUtMDUtMjAgMTE6
NDA6MTIgKzA4OjAwDQpAQCAtOTc2LDIwICs5NzYsNDkgQEANCiBjaGFyIHByaW50X2J1ZltCVUZf
U0laXTsNCiBzdGF0aWMgaW50IGluZGV4Ow0KIA0KLXN0YXRpYyB2b2lkIHZteF9wcmludF9saW5l
KGNvbnN0IGNoYXIgYywgc3RydWN0IGV4ZWNfZG9tYWluICpkKSANCithc21saW5rYWdlIHVuc2ln
bmVkIGxvbmcgZG9fdm14X3ByaW50X2xpbmUodW5zaWduZWQgbG9uZyBjaCkgDQogew0KIA0KKyNp
ZiBWTVhfREVCVUcNCisgICAgY2hhciBjID0gKGNoYXIpY2g7DQogICAgIGlmIChpbmRleCA9PSBN
QVhfTElORSB8fCBjID09ICdcbicpIHsNCiAgICAgICAgIGlmIChpbmRleCA9PSBNQVhfTElORSkg
ew0KICAgICAgICAgICAgIHByaW50X2J1ZltpbmRleCsrXSA9IGM7DQogICAgICAgICB9DQogICAg
ICAgICBwcmludF9idWZbaW5kZXhdID0gJ1wwJzsNCi0gICAgICAgIHByaW50aygiKEdVRVNUOiAl
dSkgJXNcbiIsIGQtPmRvbWFpbi0+ZG9tYWluX2lkLCAoY2hhciAqKSAmcHJpbnRfYnVmKTsNCisg
ICAgICAgIHByaW50aygiKEdVRVNUOiAldSkgJXNcbiIsIGN1cnJlbnQtPmRvbWFpbi0+ZG9tYWlu
X2lkLCAoY2hhciAqKSAmcHJpbnRfYnVmKTsNCiAgICAgICAgIGluZGV4ID0gMDsNCiAgICAgfQ0K
ICAgICBlbHNlDQogICAgICAgICBwcmludF9idWZbaW5kZXgrK10gPSBjOw0KKyNlbmRpZg0KKyAg
ICByZXR1cm4gMDsNCit9DQorDQorI2lmIGRlZmluZWQoX19pMzg2X18pDQordm9pZCB2bXhfZG9f
aHlwZXJjYWxsKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpwcmVncykNCit7DQorCXVuc2lnbmVkIGxv
bmcgcmV0Y29kZTsNCisJX19hc21fXyBfX3ZvbGF0aWxlX18oDQorCQkicHVzaGwgJTZcblx0Ig0K
KwkJInB1c2hsICU1XG5cdCINCisJCSJwdXNobCAlNFxuXHQiDQorCQkicHVzaGwgJTNcblx0Ig0K
KwkJInB1c2hsICUyXG5cdCINCisJCSJjYWxsICoodm14X2h5cGVyY2FsbF90YWJsZSkoLCUwLDQp
XG5cdCINCisJCSJhZGRsICQyMCwgJSVlc3Bcblx0Ig0KKwkJOiI9JmEiKHJldGNvZGUpDQorCQk6
IjAiKHByZWdzLT5lYXgpLCAiciIocHJlZ3MtPmVieCksICJyIihwcmVncy0+ZWN4KSwNCisJCSAi
ciIocHJlZ3MtPmVkeCksICJyIihwcmVncy0+ZXNpKSwgInIiKHByZWdzLT5lZGkpDQorCSk7DQor
CXByZWdzLT5lYXggPSByZXRjb2RlOw0KKwlyZXR1cm47DQorfQ0KKyNlbHNlDQordm9pZCB2bXhf
ZG9faHlwZXJjYWxsKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpwcmVncykNCit7DQogfQ0KKyNlbmRp
Zg0KIA0KIHZvaWQgc2F2ZV92bXhfY3B1X3VzZXJfcmVncyhzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq
Y3R4dCkNCiB7DQpAQCAtMTIzMCw4ICsxMjU5LDcgQEANCiAgICAgICAgIF9fZ2V0X2luc3RydWN0
aW9uX2xlbmd0aChpbnN0X2xlbik7DQogICAgICAgICBfX3ZtcmVhZChHVUVTVF9FSVAsICZlaXAp
Ow0KICAgICAgICAgX192bXJlYWQoRVhJVF9RVUFMSUZJQ0FUSU9OLCAmZXhpdF9xdWFsaWZpY2F0
aW9uKTsNCi0NCi0gICAgICAgIHZteF9wcmludF9saW5lKHJlZ3MuZWF4LCBlZCk7IC8qIHByb3Zp
ZGVzIHRoZSBjdXJyZW50IGRvbWFpbiAqLw0KKyAgICAgICAgIHZteF9kb19oeXBlcmNhbGwoJnJl
Z3MpOw0KICAgICAgICAgX191cGRhdGVfZ3Vlc3RfZWlwKGluc3RfbGVuKTsNCiAgICAgICAgIGJy
ZWFrOw0KICAgICBjYXNlIEVYSVRfUkVBU09OX0NSX0FDQ0VTUzoNCkBAIC0xMjk1LDYgKzEzMjMs
NTcgQEANCiAjZW5kaWYNCiANCiB9DQorDQoraW50IGRvX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2ln
bmVkIGxvbmcgdmEsDQorICAgICAgICAgICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCAgdmFs
LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7DQorLyog
DQorICogVGhlIHZhIG11c3QgYmUgYSBwYWdlIHN0YXJ0IGFkZHJlc3MNCisgKi8NCitpbnQgbWFw
X3NoYXJlcGFnZV90b19ndWVzdCh1bnNpZ25lZCBsb25nIGd2YSwgdW5zaWduZWQgbG9uZyBzaGFy
ZWQpDQorew0KKyAgICBsMV9wZ2VudHJ5X3QgdmFsLCBncHRlOyANCisNCisgICAgZ3B0ZSA9IGd2
YV90b19ncHRlKGd2YSk7DQorICAgIHZhbCA9IGwxZV9jcmVhdGVfcGh5cygoX19wYShzaGFyZWQp
KSwgbDFlX2dldF9mbGFncyhncHRlKSk7DQorICAgIHJldHVybiBkb191cGRhdGVfdmFfbWFwcGlu
ZyhndmEsIHZhbCwgMCk7DQorfQ0KKyAgDQorYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIGRvX3Zp
cnR1YWxfZGV2aWNlX29wKHVuc2lnbmVkIGxvbmcgb3AsIA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsIA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmcyKQ0KK3sN
CisJc3dpdGNoIChvcCkgDQorICAgIHsNCisgICAgICAgIGNhc2UgU0VUX1NIQVJFSU5GT19NQVA6
DQorCQkgICAgcmV0dXJuIG1hcF9zaGFyZXBhZ2VfdG9fZ3Vlc3QoYXJnMSwgDQorICAgICAgICAg
ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+ZG9tYWluLT5zaGFyZWRfaW5m
byk7DQorICAgICAgICBjYXNlIFNFVF9DQUxMQkFDS19JUlE6DQorICAgICAgICAgICAgaWYoYXJn
MSkNCisgICAgICAgICAgICAgICAgY3VycmVudC0+YXJjaC5jYWxsYmFja19pcnEgPSAweDIwK2Fy
ZzE7DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICBjdXJyZW50LT5hcmNoLmNh
bGxiYWNrX2lycSA9IDA7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICBjYXNlIEFE
RFJfTUFDSFRPUEhZUzogDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBw
aHlzID0gDQorICAgICAgICAgICAgICAgIF9fbWZuX3RvX2dwZm4oY3VycmVudC0+ZG9tYWluLCBh
cmcxID4+IFBBR0VfU0hJRlQpOw0KKyAgICAgICAgICAgIHBoeXMgPSAocGh5cyA8PCBQQUdFX1NI
SUZUKSB8IChhcmcxICYgflBBR0VfTUFTSyk7DQorICAgICAgICAgICAgcmV0dXJuIHBoeXM7DQor
ICAgICAgICB9DQorICAgICAgICBjYXNlIEFERFJfUEhZU1RPTUFDSDoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1hY2hpbmUgPSANCisgICAgICAgICAgICAgICAgX19n
cGZuX3RvX21mbihjdXJyZW50LT5kb21haW4sIGFyZzEgPj4gUEFHRV9TSElGVCk7DQorICAgICAg
ICAgICAgbWFjaGluZSA9IChtYWNoaW5lIDw8IFBBR0VfU0hJRlQpIHwgKGFyZzEgJiB+UEFHRV9N
QVNLKTsNCisgICAgICAgICAgICByZXR1cm4gbWFjaGluZTsNCisgICAgICAgIH0NCisgICAgICAg
IGRlZmF1bHQ6DQorCSAgICAgICAgcHJpbnRrKCJOb3Qgc3VwcG9ydGVkIHZpcnR1YWwgZGV2aWNl
IG9wZXJhdGlvblxuIik7DQorICAgIH0NCisgICAgcmV0dXJuIDBMOw0KK30NCisNCiANCiAjZW5k
aWYgLyogQ09ORklHX1ZNWCAqLw0KIA0KZGlmZiAtTnJ1IGEveGVuL2FyY2gveDg2L3ZteF9pby5j
IGIveGVuL2FyY2gveDg2L3ZteF9pby5jDQotLS0gYS94ZW4vYXJjaC94ODYvdm14X2lvLmMJMjAw
NS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisrKyBiL3hlbi9hcmNoL3g4Ni92bXhfaW8uYwkyMDA1
LTA1LTIwIDExOjQwOjEyICswODowMA0KQEAgLTE5NiwxMiArMTk2LDE0IEBADQogICAgIG1wY2lf
cCA9ICZlZC0+YXJjaC5hcmNoX3ZteC52bXhfcGxhdGZvcm0ubXBjaTsNCiAgICAgaW5zdF9kZWNv
ZGVyX3JlZ3MgPSBtcGNpX3AtPmluc3RfZGVjb2Rlcl9yZWdzOw0KIA0KLSAgICAvKiBjbGVhciB0
aGUgcGVuZGluZyBldmVudCAqLw0KLSAgICBlZC0+dmNwdV9pbmZvLT5ldnRjaG5fdXBjYWxsX3Bl
bmRpbmcgPSAwOw0KICAgICAvKiBjbGVhciB0aGUgcGVuZGluZyBiaXQgZm9yIHBvcnQgMiAqLw0K
LSAgICBjbGVhcl9iaXQoSU9QQUNLRVRfUE9SVD4+NSwgJmVkLT52Y3B1X2luZm8tPmV2dGNobl9w
ZW5kaW5nX3NlbCk7DQogICAgIGNsZWFyX2JpdChJT1BBQ0tFVF9QT1JULCAmZC0+c2hhcmVkX2lu
Zm8tPmV2dGNobl9wZW5kaW5nWzBdKTsNCiANCisgICAgaWYgKCFkLT5zaGFyZWRfaW5mby0+ZXZ0
Y2huX3BlbmRpbmdbSU9QQUNLRVRfUE9SVD4+NV0pDQorICAgICAgICBjbGVhcl9iaXQoSU9QQUNL
RVRfUE9SVD4+NSwgJmVkLT52Y3B1X2luZm8tPmV2dGNobl9wZW5kaW5nX3NlbCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICANCisgICAgaWYgKCFlZC0+dmNwdV9pbmZvLT5ldnRjaG5f
cGVuZGluZ19zZWwpIA0KKyAgICAgICAgZWQtPnZjcHVfaW5mby0+ZXZ0Y2huX3VwY2FsbF9wZW5k
aW5nID0gMDsNCisNCiAgICAgdmlvID0gKHZjcHVfaW9kYXRhX3QgKikgZWQtPmFyY2guYXJjaF92
bXgudm14X3BsYXRmb3JtLnNoYXJlZF9wYWdlX3ZhOw0KICAgICBpZiAodmlvID09IDApIHsNCiAg
ICAgICAgIFZNWF9EQkdfTE9HKERCR19MRVZFTF8xLCANCkBAIC00MjcsNiArNDI5LDI1IEBADQog
ICAgIHJldHVybjsNCiB9DQogDQoraW50IHZteF9ldmVudF90b19pcnEoc3RydWN0IGV4ZWNfZG9t
YWluICplZCkgDQorew0KKyAgICB2Y3B1X2lvZGF0YV90ICp2aW87DQorDQorICAgIHZpbyA9ICh2
Y3B1X2lvZGF0YV90ICopIGVkLT5hcmNoLmFyY2hfdm14LnZteF9wbGF0Zm9ybS5zaGFyZWRfcGFn
ZV92YTsNCisgICAgaWYgKHZpbyA9PSAwKSB7DQorICAgICAgICBWTVhfREJHX0xPRyhEQkdfTEVW
RUxfVkJELCANCisgICAgICAgICAgICAgICAgImJhZCBzaGFyZWQgcGFnZTogJWx4XG4iLCAodW5z
aWduZWQgbG9uZykgdmlvKTsNCisgICAgICAgIGRvbWFpbl9jcmFzaCgpOw0KKyAgICB9DQorICAg
IC8qDQorICAgICAqIHRoZSBldmVudCBpcyBvbmx5IGZvciBndWVzdCwganVzdCBzZXQgY2FsbGJh
Y2sgaW50ZXJydXB0IA0KKyAgICAgKiBiaXQgIGFuZCByZXR1cm4NCisgICAgICovDQorICAgIHJl
dHVybiB0ZXN0X2FuZF9zZXRfYml0KGVkLT5hcmNoLmNhbGxiYWNrX2lycSwgJnZpby0+dnBfaW50
clswXSk7DQorDQorfQ0KKw0KKy8qIGZvciBkZWJ1ZyB1c2UqLw0KIHZvaWQgdm14X2RvX3Jlc3Vt
ZShzdHJ1Y3QgZXhlY19kb21haW4gKmQpIA0KIHsNCiAgICAgdm14X3N0dHMoKTsNCkBAIC00NDAs
MTIgKzQ2MSwzNCBAQA0KICAgICBfX3Ztd3JpdGUoSE9TVF9FU1AsICh1bnNpZ25lZCBsb25nKWdl
dF9zdGFja19ib3R0b20oKSk7DQogDQogICAgIGlmIChldmVudF9wZW5kaW5nKGQpKSB7DQotICAg
ICAgICBpZiAodGVzdF9iaXQoSU9QQUNLRVRfUE9SVCwgJmQtPmRvbWFpbi0+c2hhcmVkX2luZm8t
PmV2dGNobl9wZW5kaW5nWzBdKSkgDQorICAgICAgICBpZiAodGVzdF9iaXQoSU9QQUNLRVRfUE9S
VCwgJmQtPmRvbWFpbi0+c2hhcmVkX2luZm8tPmV2dGNobl9wZW5kaW5nWzBdKSkNCiAgICAgICAg
ICAgICB2bXhfaW9fYXNzaXN0KGQpOw0KKyAgICAgICAgaWYoZXZlbnRfcGVuZGluZyhkKSAmJiAh
ZC0+dmNwdV9pbmZvLT5jYWxsYmFja19tYXNrKSB7DQorICAgICAgICAgICAgVk1YX0RCR19MT0co
REJHX0xFVkVMX1ZCRCwNCisgICAgICAgICAgICAgICAiPHZiZD5pbnNlcnQgY2FsbGJhY2sgaW50
ZXJydXB0XG4iKTsNCisNCisgICAgICAgICAgICB2bXhfZXZlbnRfdG9faXJxKGQpOyANCisgICAg
ICAgICAgICBkLT52Y3B1X2luZm8tPmNhbGxiYWNrX21hc2sgPSANCisgICAgICAgICAgICAgICAg
ZC0+ZG9tYWluLT5zaGFyZWRfaW5mby0+ZXZ0Y2huX3BlbmRpbmdbMF07DQorDQorICAgICAgICB9
ICAgICAgICAgICAgICAgDQorICAgICAgICBpZiAodGVzdF9iaXQoQVJDSF9WTVhfSU9fV0FJVCwg
JmQtPmFyY2guYXJjaF92bXguZmxhZ3MpKSB7DQorICAgICAgICAgICAgLyoNCisgICAgICAgICAg
ICAgKiBjbGVhciB0aGUgaW5kaWNhdG9yLCBzbyB0aGF0IGV2dGNobl9zZXRfcGVuZGluZyBjYW4g
DQorICAgICAgICAgICAgICogdW5ibG9jayBkb21haW4gYWdhaW4gDQorICAgICAgICAgICAgICov
DQorICAgICAgICAgICAgZC0+dmNwdV9pbmZvLT5ldnRjaG5fdXBjYWxsX3BlbmRpbmcgPSAwOw0K
IA0KLSAgICAgICAgZWxzZSBpZiAodGVzdF9iaXQoQVJDSF9WTVhfSU9fV0FJVCwgJmQtPmFyY2gu
YXJjaF92bXguZmxhZ3MpKSB7DQotICAgICAgICAgICAgcHJpbnRrKCJnb3QgYW4gZXZlbnQgd2hp
bGUgYmxvY2tlZCBvbiBJL09cbiIpOw0KKyAgICAgICAgICAgIC8qY2xlYXIgdGhlIGJpdCwgc28g
dGhhdCBkZXZpY2UtbW9kZWwgY2FuIHVuYmxvY2sgZG9tYWluIGFnYWluICovDQorICAgICAgICAg
ICAgY2xlYXJfYml0KElPUEFDS0VUX1BPUlQ+PjUsICZkLT52Y3B1X2luZm8tPmV2dGNobl9wZW5k
aW5nX3NlbCk7DQorDQorICAgICAgICAgICAgVk1YX0RCR19MT0coREJHX0xFVkVMX1ZCRCwNCisg
ICAgICAgICAgICAgICAgIkkvTyBub3QgY29tcGxldGUsIGRvX2Jsb2NrXG4iKTsNCiAgICAgICAg
ICAgICBkb19ibG9jaygpOw0KKw0KKyAgICAgICAgICAgIC8qIGRvX2Jsb2NrIHNoYWxsIG5vdCBy
ZXR1cm4gYXQgdGhpcyB0aW1lKi8NCisgICAgICAgICAgICBwcmludGsoImRvX2Jsb2NrIHJldHVy
biBpbiB2bXhfZG9fcmVzdW1lISEhXG4iKTsNCisNCiAgICAgICAgIH0NCiAgICAgICAgICAgICAg
ICAgDQogICAgICAgICAvKiBBc3N1bXB0aW9uOiBkZXZpY2UgbW9kZWwgd2lsbCBub3QgaW5qZWN0
IGFuIGludGVycnVwdA0KQEAgLTQ1NCw4ICs0OTcsMTEgQEANCiAgICAgICAgICAqIGEgcmVzcG9u
c2UgdG8gaW9yZXFfdCBpcyBub3Qgb2suDQogICAgICAgICAgKi8NCiAgICAgfQ0KLSAgICBpZiAo
IXRlc3RfYml0KEFSQ0hfVk1YX0lPX1dBSVQsICZkLT5hcmNoLmFyY2hfdm14LmZsYWdzKSkNCisN
CisgICAgaWYgKCF0ZXN0X2JpdChBUkNIX1ZNWF9JT19XQUlULCAmZC0+YXJjaC5hcmNoX3ZteC5m
bGFncykpIA0KICAgICAgICAgdm14X2ludHJfYXNzaXN0KGQpOw0KKyAgICBlbHNlDQorICAgICAg
ICBkb19ibG9jaygpOw0KIH0NCiANCiAjZW5kaWYgLyogQ09ORklHX1ZNWCAqLw0KZGlmZiAtTnJ1
IGEveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRyeS5TIGIveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRy
eS5TDQotLS0gYS94ZW4vYXJjaC94ODYveDg2XzMyL2VudHJ5LlMJMjAwNS0wNS0yMCAxMTo0MDox
MiArMDg6MDANCisrKyBiL3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwkyMDA1LTA1LTIwIDEx
OjQwOjEyICswODowMA0KQEAgLTc0OSw2ICs3NDksNDIgQEANCiAgICAgICAgIC5sb25nIGRvX2Jv
b3RfdmNwdQ0KICAgICAgICAgLmxvbmcgZG9fbmlfaHlwZXJjYWxsICAgICAgIC8qIDI1ICovDQog
ICAgICAgICAubG9uZyBkb19tbXVleHRfb3ANCisgICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2Fs
bCAgICAgICANCisgICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbCAgICAgICAvKiB2aXJ1dGFs
IGRldmljZSBvcCBmb3IgVk1YICovDQogICAgICAgICAucmVwdCBOUl9oeXBlcmNhbGxzLSgoLi1o
eXBlcmNhbGxfdGFibGUpLzQpDQorICAgICAgICAubG9uZyBkb19uaV9oeXBlcmNhbGwNCisgICAg
ICAgIC5lbmRyDQorDQorRU5UUlkodm14X2h5cGVyY2FsbF90YWJsZSkNCisgICAgICAgIC5sb25n
IGRvX25pX2h5cGVyY2FsbCAgICAgICAvKiAgMCAqLw0KKyAgICAgICAgLmxvbmcgZG9fbW11X3Vw
ZGF0ZQ0KKyAgICAgICAgLmxvbmcgZG9fbmlfaHlwZXJjYWxsDQorICAgICAgICAubG9uZyBkb19u
aV9oeXBlcmNhbGwNCisgICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbA0KKyAgICAgICAgLmxv
bmcgZG9fbmlfaHlwZXJjYWxsICAgICAgIC8qICA1ICovDQorICAgICAgICAubG9uZyBkb19uaV9o
eXBlcmNhbGwNCisgICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbA0KKyAgICAgICAgLmxvbmcg
ZG9fbmlfaHlwZXJjYWxsDQorICAgICAgICAubG9uZyBkb19uaV9oeXBlcmNhbGwNCisgICAgICAg
IC5sb25nIGRvX25pX2h5cGVyY2FsbCAgICAgICAvKiAxMCAqLw0KKyAgICAgICAgLmxvbmcgZG9f
dm14X3ByaW50X2xpbmUNCisgICAgICAgIC5sb25nIGRvX2RvbV9tZW1fb3ANCisgICAgICAgIC5s
b25nIGRvX211bHRpY2FsbA0KKyAgICAgICAgLmxvbmcgZG9fdXBkYXRlX3ZhX21hcHBpbmcNCisg
ICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbCAgICAgICAvKiAxNSAqLw0KKyAgICAgICAgLmxv
bmcgZG9fZXZlbnRfY2hhbm5lbF9vcA0KKyAgICAgICAgLmxvbmcgZG9feGVuX3ZlcnNpb24NCisg
ICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbA0KKyAgICAgICAgLmxvbmcgZG9fbmlfaHlwZXJj
YWxsDQorICAgICAgICAubG9uZyBkb19ncmFudF90YWJsZV9vcCAgICAgLyogMjAgKi8NCisgICAg
ICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbA0KKyAgICAgICAgLmxvbmcgZG9fbmlfaHlwZXJjYWxs
DQorICAgICAgICAubG9uZyBkb19uaV9oeXBlcmNhbGwNCisgICAgICAgIC5sb25nIGRvX25pX2h5
cGVyY2FsbA0KKyAgICAgICAgLmxvbmcgZG9fbmlfaHlwZXJjYWxsICAgICAgIC8qIDI1ICovDQor
ICAgICAgICAubG9uZyBkb19uaV9oeXBlcmNhbGwNCisgICAgICAgIC5sb25nIGRvX25pX2h5cGVy
Y2FsbCAgICAgICANCisgICAgICAgIC5sb25nIGRvX3ZpcnR1YWxfZGV2aWNlX29wICAvKiAyOCAq
Lw0KKyAgICAgICAgLnJlcHQgTlJfaHlwZXJjYWxscy0oKC4tdm14X2h5cGVyY2FsbF90YWJsZSkv
NCkNCiAgICAgICAgIC5sb25nIGRvX25pX2h5cGVyY2FsbA0KICAgICAgICAgLmVuZHINCmRpZmYg
LU5ydSBhL3hlbi9hcmNoL3g4Ni94ODZfMzIvdXNlcmNvcHkuYyBiL3hlbi9hcmNoL3g4Ni94ODZf
MzIvdXNlcmNvcHkuYw0KLS0tIGEveGVuL2FyY2gveDg2L3g4Nl8zMi91c2VyY29weS5jCTIwMDUt
MDUtMjAgMTE6NDA6MTIgKzA4OjAwDQorKysgYi94ZW4vYXJjaC94ODYveDg2XzMyL3VzZXJjb3B5
LmMJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCkBAIC04LDYgKzgsOCBAQA0KICNpbmNsdWRl
IDx4ZW4vY29uZmlnLmg+DQogI2luY2x1ZGUgPHhlbi9tbS5oPg0KICNpbmNsdWRlIDxhc20vdWFj
Y2Vzcy5oPg0KKyNpbmNsdWRlIDxhc20vZG9tYWluX3BhZ2UuaD4NCisjaW5jbHVkZSA8YXNtL3No
YWRvdy5oPg0KIA0KIHN0YXRpYyBpbmxpbmUgaW50IF9fbW92c2xfaXNfb2sodW5zaWduZWQgbG9u
ZyBhMSwgdW5zaWduZWQgbG9uZyBhMiwgdW5zaWduZWQgbG9uZyBuKQ0KIHsNCkBAIC0zOTQsNiAr
Mzk2LDk4IEBADQogCXJldHVybiBuOw0KIH0NCiANCit2b2lkKiBtYXBfZG9tYWluX3ZhZGRyKHZv
aWQgKiBndWVzdF92YWRkciwgdW5zaWduZWQgbG9uZyBsZW4pDQorew0KKyAgICBsMV9wZ2VudHJ5
X3QgZ3B0ZTsNCisgICAgdW5zaWduZWQgbG9uZyBtZm47DQorICAgIHVuc2lnbmVkIGxvbmcgbWE7
DQorICAgIHZvaWQgKiB2c3RhcnQ7DQorICAgIA0KKyAgICBpZiAobGVuID4gUEFHRV9TSVpFKSAN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgDQorICAgIGlmICgoKHVu
c2lnbmVkIGxvbmcpZ3Vlc3RfdmFkZHIgJiBQQUdFX01BU0spID09IA0KKyAgICAgICAgKCgodW5z
aWduZWQgbG9uZylndWVzdF92YWRkciArIGxlbiAtMSkgJiBQQUdFX01BU0spKSANCisgICAgew0K
KyAgICAgICAgZ3B0ZSA9IGd2YV90b19ncHRlKCh1bnNpZ25lZCBsb25nKWd1ZXN0X3ZhZGRyKTsN
CisgICAgICAgIG1mbiA9IHBoeXNfdG9fbWFjaGluZV9tYXBwaW5nKGwxZV9nZXRfcGZuKGdwdGUp
KTsNCisgICAgICAgIG1hID0gKG1mbiA8PCBQQUdFX1NISUZUKSB8IA0KKyAgICAgICAgICAgICAo
KHVuc2lnbmVkIGxvbmcpZ3Vlc3RfdmFkZHIgJiAoUEFHRV9TSVpFIC0gMSkpOw0KKyAgICAgICAg
dnN0YXJ0ID0gKHZvaWQgKiltYXBfZG9tYWluX21lbShtYSk7DQorICAgIH0NCisgICAgZWxzZSAN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0dXJuIHZzdGFy
dDsNCit9DQorDQordW5zaWduZWQgbG9uZw0KK2NvcHlfZnJvbV9ndWVzdCh2b2lkICp0bywgY29u
c3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikNCit7DQorICAgIHZvaWQgKmhm
cm9tOyAgICANCisgICAgdW5zaWduZWQgbG9uZyBuY29weTsNCisgICAgaW50IG5sZWZ0Ow0KKyAg
ICBuY29weSA9ICgoKHVuc2lnbmVkIGxvbmcpZnJvbSAgKyBQQUdFX1NJWkUpICYgUEFHRV9NQVNL
KSAtIA0KKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWZyb207DQorICAgIG5jb3B5ID0gbmNv
cHkgPiBuID8gbiA6IG5jb3B5OyAgDQorDQorICAgIGZvcihubGVmdCA9IG47IG5sZWZ0ID4gMDsg
bmNvcHkgPSBubGVmdCA+IFBBR0VfU0laRSA/IFBBR0VfU0laRSA6IG5sZWZ0KSANCisgICAgew0K
KyAgICAgICAgaGZyb20gPSBtYXBfZG9tYWluX3ZhZGRyKCh2b2lkKilmcm9tLCBuY29weSk7DQor
ICAgICAgICBpZihoZnJvbSkgDQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KHRvLCBo
ZnJvbSwgbmNvcHkpOw0KKyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9tZW0oKHZvaWQqKWhmcm9t
KTsgDQorICAgICAgICB9DQorICAgICAgICBlbHNlIA0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHByaW50aygiZXJyb3IhLCBjb3B5IGZyb20gZ3Vlc3QgbWFwIGVycm9yLCBmcm9tOiVwLCBuY29w
eTolbGRcbiIsIA0KKyAgICAgICAgICAgICAgICAgICBmcm9tLCBuY29weSk7DQorICAgICAgICAg
ICAgIHJldHVybiBubGVmdDsNCisgICAgICAgIH0NCisgICAgICAgIG5sZWZ0IC09IG5jb3B5Ow0K
KyAgICAgICAgZnJvbSArPSBuY29weTsNCisgICAgICAgIHRvICs9IG5jb3B5Ow0KKyAgICB9DQor
ICAgIHJldHVybiBubGVmdDsNCit9DQorRVhQT1JUX1NZTUJPTChjb3B5X2Zyb21fZ3Vlc3QpOw0K
Kw0KK3Vuc2lnbmVkIGxvbmcNCitjb3B5X3RvX2d1ZXN0KHZvaWQgX191c2VyICp0bywgY29uc3Qg
dm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQ0KK3sNCisgICAgdm9pZCAqaHRvOyAgDQorICAg
IHVuc2lnbmVkIGxvbmcgbmNvcHk7DQorICAgIGludCBubGVmdDsNCisNCisgICAgbmNvcHkgPSAo
KCh1bnNpZ25lZCBsb25nKXRvICArIFBBR0VfU0laRSkgJiBQQUdFX01BU0spIC0gKHVuc2lnbmVk
IGxvbmcpdG87DQorICAgIG5jb3B5ID0gbmNvcHkgPiBuID8gbiA6IG5jb3B5OyAgDQorDQorICAg
IGZvcihubGVmdCA9IG47IG5sZWZ0ID4gMDsgbmNvcHkgPSBubGVmdCA+IFBBR0VfU0laRSA/IFBB
R0VfU0laRSA6IG5sZWZ0KSANCisgICAgew0KKyAgICAgICAgaHRvID0gbWFwX2RvbWFpbl92YWRk
cigodm9pZCopdG8sIG5jb3B5KTsNCisgICAgICAgIGlmKGh0bykgDQorICAgICAgICB7DQorICAg
ICAgICAgICAgbWVtY3B5KGh0bywgZnJvbSwgbmNvcHkpOw0KKyAgICAgICAgICAgIHVubWFwX2Rv
bWFpbl9tZW0oKHZvaWQqKWh0byk7IA0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSANCisgICAg
ICAgIHsNCisgICAgICAgICAgICBwcmludGsoImVycm9yISwgY29weSB0byBndWVzdCBtYXAgZXJy
b3IsIGZyb206JXAsIG5jb3B5OiVsZFxuIiwgDQorICAgICAgICAgICAgICAgICAgIGZyb20sIG5j
b3B5KTsNCisgICAgICAgICAgICByZXR1cm4gbmxlZnQ7DQorICAgICAgICB9DQorICAgICAgICBu
bGVmdCAtPSBuY29weTsNCisgICAgICAgIGZyb20gKz0gbmNvcHk7DQorICAgICAgICB0byArPSBu
Y29weTsNCisgICAgfQ0KKyAgICByZXR1cm4gbmxlZnQ7DQorfQ0KK0VYUE9SVF9TWU1CT0woY29w
eV90b19ndWVzdCk7DQorDQogLyoqDQogICogY29weV90b191c2VyOiAtIENvcHkgYSBibG9jayBv
ZiBkYXRhIGludG8gdXNlciBzcGFjZS4NCiAgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywg
aW4gdXNlciBzcGFjZS4NCkBAIC00MTAsNiArNTA0LDggQEANCiB1bnNpZ25lZCBsb25nDQogY29w
eV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9u
ZyBuKQ0KIHsNCisgICAgaWYoVk1YX0RPTUFJTihjdXJyZW50KSkNCisgICAgICAgIHJldHVybiBj
b3B5X3RvX2d1ZXN0KHRvLCBmcm9tLCBuKTsNCiAJaWYgKGFjY2Vzc19vayh0bywgbikpDQogCQlu
ID0gX19jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOw0KIAlyZXR1cm4gbjsNCkBAIC00MzQsNiAr
NTMwLDkgQEANCiB1bnNpZ25lZCBsb25nDQogY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0
IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pDQogew0KKw0KKyAgICBpZihWTVhf
RE9NQUlOKGN1cnJlbnQpKQ0KKyAgICAgICAgcmV0dXJuIGNvcHlfZnJvbV9ndWVzdCh0bywgZnJv
bSwgbik7DQogCWlmIChhY2Nlc3Nfb2soZnJvbSwgbikpDQogCQluID0gX19jb3B5X2Zyb21fdXNl
cih0bywgZnJvbSwgbik7DQogCWVsc2UNCmRpZmYgLU5ydSBhL3hlbi9hcmNoL3g4Ni94ODZfNjQv
dXNlcmNvcHkuYyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQvdXNlcmNvcHkuYw0KLS0tIGEveGVuL2Fy
Y2gveDg2L3g4Nl82NC91c2VyY29weS5jCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQorKysg
Yi94ZW4vYXJjaC94ODYveDg2XzY0L3VzZXJjb3B5LmMJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6
MDANCkBAIC0xMzIsNiArMTMyLDIxIEBADQogCXJldHVybiBuOw0KIH0NCiANCit1bnNpZ25lZCBs
b25nDQorY29weV9mcm9tX2d1ZXN0KHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwg
dW5zaWduZWQgbG9uZyBuKQ0KK3sNCisgIHJldHVybiBuOw0KK30NCitFWFBPUlRfU1lNQk9MKGNv
cHlfZnJvbV9ndWVzdCk7DQorDQordW5zaWduZWQgbG9uZw0KK2NvcHlfdG9fZ3Vlc3Qodm9pZCBf
X3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pDQorew0KKyAgICBy
ZXR1cm4gbjsNCit9DQorRVhQT1JUX1NZTUJPTChjb3B5X3RvX2d1ZXN0KTsNCisNCisNCiAvKioN
CiAgKiBjb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNl
Lg0KICAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLg0KZGlmZiAt
TnJ1IGEveGVuL2NvbW1vbi9kb21fbWVtX29wcy5jIGIveGVuL2NvbW1vbi9kb21fbWVtX29wcy5j
DQotLS0gYS94ZW4vY29tbW9uL2RvbV9tZW1fb3BzLmMJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6
MDANCisrKyBiL3hlbi9jb21tb24vZG9tX21lbV9vcHMuYwkyMDA1LTA1LTIwIDExOjQwOjEyICsw
ODowMA0KQEAgLTgwLDE1ICs4MCwyMSBAQA0KICAgICBzdHJ1Y3QgcGZuX2luZm8gKnBhZ2U7DQog
ICAgIHVuc2lnbmVkIGxvbmcgICAgaSwgaiwgbXBmbjsNCiANCi0gICAgaWYgKCAhYXJyYXlfYWNj
ZXNzX29rKGV4dGVudF9saXN0LCBucl9leHRlbnRzLCBzaXplb2YoKmV4dGVudF9saXN0KSkgKQ0K
KyAgICBpZiAoICFWTVhfRE9NQUlOKGN1cnJlbnQpICYmIA0KKyAgICAgICAgIHVubGlrZWx5KCFh
cnJheV9hY2Nlc3Nfb2soZXh0ZW50X2xpc3QsIG5yX2V4dGVudHMsIA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpleHRlbnRfbGlzdCkpKSApDQogICAgICAgICBy
ZXR1cm4gc3RhcnRfZXh0ZW50Ow0KIA0KICAgICBmb3IgKCBpID0gc3RhcnRfZXh0ZW50OyBpIDwg
bnJfZXh0ZW50czsgaSsrICkNCiAgICAgew0KLSAgICAgICAgUFJFRU1QVF9DSEVDSyhNRU1PUF9k
ZWNyZWFzZV9yZXNlcnZhdGlvbik7DQotDQotICAgICAgICBpZiAoIHVubGlrZWx5KF9fZ2V0X3Vz
ZXIobXBmbiwgJmV4dGVudF9saXN0W2ldKSAhPSAwKSApDQotICAgICAgICAgICAgcmV0dXJuIGk7
DQorICAgICAgICBpZiggVk1YX0RPTUFJTihjdXJyZW50KSkgew0KKyAgICAgICAgICAgIGlmKGNv
cHlfZnJvbV9ndWVzdCgmbXBmbiwgJmV4dGVudF9saXN0W2ldLCBzaXplb2YobXBmbikpICE9IDAp
DQorICAgICAgICAgICAgICAgIHJldHVybiBpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAg
ICAgICBQUkVFTVBUX0NIRUNLKE1FTU9QX2RlY3JlYXNlX3Jlc2VydmF0aW9uKTsNCisgICAgICAg
ICAgIGlmICggdW5saWtlbHkoX19nZXRfdXNlcihtcGZuLCAmZXh0ZW50X2xpc3RbaV0pICE9IDAp
ICkNCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7DQorICAgICAgICB9DQogDQogICAgICAgICBm
b3IgKCBqID0gMDsgaiA8ICgxIDw8IGV4dGVudF9vcmRlcik7IGorKyApDQogICAgICAgICB7DQpA
QCAtMTAwLDYgKzEwNiw3IEBADQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIA0KICAgICAg
ICAgICAgIHBhZ2UgPSAmZnJhbWVfdGFibGVbbXBmbiArIGpdOw0KKw0KICAgICAgICAgICAgIGlm
ICggdW5saWtlbHkoIWdldF9wYWdlKHBhZ2UsIGQpKSApDQogICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICBEUFJJTlRLKCJCYWQgcGFnZSBmcmVlIGZvciBkb21haW4gJXVcbiIsIGQtPmRv
bWFpbl9pZCk7DQpkaWZmIC1OcnUgYS94ZW4vY29tbW9uL2dyYW50X3RhYmxlLmMgYi94ZW4vY29t
bW9uL2dyYW50X3RhYmxlLmMNCi0tLSBhL3hlbi9jb21tb24vZ3JhbnRfdGFibGUuYwkyMDA1LTA1
LTIwIDExOjQwOjEyICswODowMA0KKysrIGIveGVuL2NvbW1vbi9ncmFudF90YWJsZS5jCTIwMDUt
MDUtMjAgMTE6NDA6MTIgKzA4OjAwDQpAQCAtMTU5LDcgKzE1OSwxMCBAQA0KIA0KICAgICAgICAg
Lyogcm1iKCk7ICovIC8qIG5vdCBvbiB4ODYgKi8NCiANCi0gICAgICAgIGZyYW1lID0gX19ncGZu
X3RvX21mbl9mb3JlaWduKGdyYW50aW5nX2QsIHNoYS0+ZnJhbWUpOw0KKyAgICAgICAgaWYoIXNo
YWRvd19tb2RlX3RyYW5zbGF0ZShncmFudGluZ19kKSkNCisgICAgICAgICAgICBmcmFtZSA9IF9f
Z3Bmbl90b19tZm5fZm9yZWlnbihncmFudGluZ19kLCBzaGEtPmZyYW1lKTsNCisgICAgICAgIGVs
c2UNCisgICAgICAgICAgICBmcmFtZSA9IHNoYS0+ZnJhbWU7DQogDQogICAgICAgICBpZiAoIHVu
bGlrZWx5KCFwZm5fdmFsaWQoZnJhbWUpKSB8fA0KICAgICAgICAgICAgICB1bmxpa2VseSghKChk
ZXZfaHN0X3JvX2ZsYWdzICYgR05UTUFQX3JlYWRvbmx5KSA/DQpAQCAtNjY4LDcgKzY3MSw4IEBA
DQogICAgIHsNCiAgICAgICAgIERQUklOVEsoIlhlbiBvbmx5IHN1cHBvcnRzIHVwIHRvICVkIGdy
YW50LXRhYmxlIGZyYW1lcyBwZXIgZG9tYWluLlxuIiwNCiAgICAgICAgICAgICAgICAgTlJfR1JB
TlRfRlJBTUVTKTsNCi0gICAgICAgICh2b2lkKXB1dF91c2VyKEdOVFNUX2dlbmVyYWxfZXJyb3Is
ICZ1b3AtPnN0YXR1cyk7DQorICAgICAgICBvcC5zdGF0dXMgPSBHTlRTVF9nZW5lcmFsX2Vycm9y
Ow0KKyAgICAgICAgKHZvaWQpY29weV90b191c2VyKHVvcCwgJm9wLCBzaXplb2Yob3ApKTsNCiAg
ICAgICAgIHJldHVybiAwOw0KICAgICB9DQogDQpAQCAtNjc4LDI1ICs2ODIsNDQgQEANCiAgICAg
fQ0KICAgICBlbHNlIGlmICggdW5saWtlbHkoIUlTX1BSSVYoY3VycmVudC0+ZG9tYWluKSkgKQ0K
ICAgICB7DQotICAgICAgICAodm9pZClwdXRfdXNlcihHTlRTVF9wZXJtaXNzaW9uX2RlbmllZCwg
JnVvcC0+c3RhdHVzKTsNCisgICAgICAgIG9wLnN0YXR1cyA9IEdOVFNUX3Blcm1pc3Npb25fZGVu
aWVkOw0KKyAgICAgICAgKHZvaWQpY29weV90b191c2VyKHVvcCwgJm9wLCBzaXplb2Yob3ApKTsN
CiAgICAgICAgIHJldHVybiAwOw0KICAgICB9DQogDQogICAgIGlmICggdW5saWtlbHkoKGQgPSBm
aW5kX2RvbWFpbl9ieV9pZChvcC5kb20pKSA9PSBOVUxMKSApDQogICAgIHsNCiAgICAgICAgIERQ
UklOVEsoIkJhZCBkb21pZCAlZC5cbiIsIG9wLmRvbSk7DQotICAgICAgICAodm9pZClwdXRfdXNl
cihHTlRTVF9iYWRfZG9tYWluLCAmdW9wLT5zdGF0dXMpOw0KKyAgICAgICAgb3Auc3RhdHVzID0g
R05UU1RfYmFkX2RvbWFpbjsNCisgICAgICAgICh2b2lkKWNvcHlfdG9fdXNlcih1b3AsICZvcCwg
c2l6ZW9mKG9wKSk7DQogICAgICAgICByZXR1cm4gMDsNCiAgICAgfQ0KIA0KICAgICBpZiAoIG9w
Lm5yX2ZyYW1lcyA8PSBOUl9HUkFOVF9GUkFNRVMgKQ0KICAgICB7DQogICAgICAgICBBU1NFUlQo
ZC0+Z3JhbnRfdGFibGUgIT0gTlVMTCk7DQotICAgICAgICAodm9pZClwdXRfdXNlcihHTlRTVF9v
a2F5LCAmdW9wLT5zdGF0dXMpOw0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBvcC5ucl9mcmFt
ZXM7IGkrKyApDQorICAgICAgICBpZighVk1YX0RPTUFJTihjdXJyZW50KSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICAodm9pZClwdXRfdXNlcihHTlRTVF9va2F5LCAmdW9wLT5zdGF0dXMpOw0K
KyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgb3AubnJfZnJhbWVzOyBpKysgKQ0KICAgICAg
ICAgICAgICh2b2lkKXB1dF91c2VyKA0KICAgICAgICAgICAgICAgICAodmlydF90b19waHlzKGQt
PmdyYW50X3RhYmxlLT5zaGFyZWQpID4+IFBBR0VfU0hJRlQpICsgaSwNCiAgICAgICAgICAgICAg
ICAgJnVvcC0+ZnJhbWVfbGlzdFtpXSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAg
ICAgICB7DQorICAgICAgICAgICAgb3Auc3RhdHVzID0gR05UU1Rfb2theTsNCisgICAgICAgICAg
ICBmb3IgKCBpID0gMDsgaSA8IG9wLm5yX2ZyYW1lczsgaSsrICkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgaWYobWFwX3NoYXJlcGFnZV90b19ndWVzdCgodW5zaWduZWQgbG9uZylv
cC5mcmFtZV9saXN0ICsgaSAqIFBBR0VfU0laRSwgKHVuc2lnbmVkIGxvbmcpZC0+Z3JhbnRfdGFi
bGUtPnNoYXJlZCArIGkgKiBQQUdFX1NJWkUpKQ0KKyAgICAgICAgICAgICAgIHsNCisgICAgIA0K
KyAgICAgICAgICAgICAgICAgICBvcC5zdGF0dXMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOw0KKyAg
ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICh2b2lkKWNvcHlfdG9fdXNlcih1b3AsICZvcCwgc2l6ZW9mKG9wKSk7
DQorICAgICAgICB9DQogICAgIH0NCiANCiAgICAgcHV0X2RvbWFpbihkKTsNCmRpZmYgLU5ydSBh
L3hlbi9jb21tb24vbXVsdGljYWxsLmMgYi94ZW4vY29tbW9uL211bHRpY2FsbC5jDQotLS0gYS94
ZW4vY29tbW9uL211bHRpY2FsbC5jCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQorKysgYi94
ZW4vY29tbW9uL211bHRpY2FsbC5jCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQpAQCAtMTcs
NiArMTcsNyBAQA0KIHsNCiAgICAgc3RydWN0IG1jX3N0YXRlICptY3MgPSAmbWNfc3RhdGVbc21w
X3Byb2Nlc3Nvcl9pZCgpXTsNCiAgICAgdW5zaWduZWQgaW50ICAgICBpOw0KKyAgICBpbnQgcmM7
DQogDQogICAgIGlmICggdW5saWtlbHkoX190ZXN0X2FuZF9zZXRfYml0KF9NQ1NGX2luX211bHRp
Y2FsbCwgJm1jcy0+ZmxhZ3MpKSApDQogICAgIHsNCkBAIC0yNCw3ICsyNSw4IEBADQogICAgICAg
ICByZXR1cm4gLUVJTlZBTDsNCiAgICAgfQ0KIA0KLSAgICBpZiAoIHVubGlrZWx5KCFhcnJheV9h
Y2Nlc3Nfb2soY2FsbF9saXN0LCBucl9jYWxscywgc2l6ZW9mKCpjYWxsX2xpc3QpKSkgKQ0KKyAg
ICBpZiAobGlrZWx5KCFWTVhfRE9NQUlOKGN1cnJlbnQpKSAmJiANCisgICAgICAgIHVubGlrZWx5
KCFhcnJheV9hY2Nlc3Nfb2soY2FsbF9saXN0LCBucl9jYWxscywgc2l6ZW9mKCpjYWxsX2xpc3Qp
KSkgKQ0KICAgICB7DQogICAgICAgICBEUFJJTlRLKCJCYWQgbWVtb3J5IHJhbmdlICVwIGZvciAl
dSoldSBieXRlcy5cbiIsDQogICAgICAgICAgICAgICAgIGNhbGxfbGlzdCwgbnJfY2FsbHMsICh1
bnNpZ25lZCBpbnQpc2l6ZW9mKCpjYWxsX2xpc3QpKTsNCkBAIC0zMywyMyArMzUsNDAgQEANCiAN
CiAgICAgZm9yICggaSA9IDA7IGkgPCBucl9jYWxsczsgaSsrICkNCiAgICAgew0KLSAgICAgICAg
aWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZtY3MtPmNhbGwsICZjYWxsX2xpc3RbaV0s
IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqY2FsbF9s
aXN0KSkpICkNCisgICAgICAgIGlmKFZNWF9ET01BSU4oY3VycmVudCkpIA0KICAgICAgICAgew0K
LSAgICAgICAgICAgIERQUklOVEsoIkVycm9yIGNvcHlpbmcgZnJvbSB1c2VyIHJhbmdlICVwIGZv
ciAldSBieXRlcy5cbiIsDQotICAgICAgICAgICAgICAgICAgICAmY2FsbF9saXN0W2ldLCAodW5z
aWduZWQgaW50KXNpemVvZigqY2FsbF9saXN0KSk7DQorICAgICAgICAgICAgcmMgPSBjb3B5X2Zy
b21fZ3Vlc3QoJm1jcy0+Y2FsbCwgJmNhbGxfbGlzdFtpXSwgDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjYWxsX2xpc3QpKTsgDQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICAgICAgcmMgPSBfX2NvcHlfZnJvbV91c2VyKCZtY3MtPmNh
bGwsICZjYWxsX2xpc3RbaV0sIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZigqY2FsbF9saXN0KSk7DQorICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApDQor
ICAgICAgICB7DQorICAgICAgICAgICAgRFBSSU5USygiRXJyb3IgY29weWluZyBmcm9tIHVzZXIg
cmFuZ2UgJXAgZm9yICV1IGJ5dGVzLiVkLCAlZFxuIiwNCisgICAgICAgICAgICAgICAgICAgICZj
YWxsX2xpc3RbaV0sIHNpemVvZigqY2FsbF9saXN0KSwgaSwgcmMpOw0KICAgICAgICAgICAgIGdv
dG8gZmF1bHQ7DQogICAgICAgICB9DQogDQogICAgICAgICBkb19tdWx0aWNhbGxfY2FsbCgmbWNz
LT5jYWxsKTsNCiANCi0gICAgICAgIGlmICggdW5saWtlbHkoX19wdXRfdXNlcihtY3MtPmNhbGwu
YXJnc1s1XSwgJmNhbGxfbGlzdFtpXS5hcmdzWzVdKSkgKQ0KKyAgICAgICAgaWYoVk1YX0RPTUFJ
TihjdXJyZW50KSkgDQorICAgICAgICB7DQorICAgICAgICAgICAgcmMgPSBjb3B5X3RvX2d1ZXN0
KCZjYWxsX2xpc3RbaV0uYXJnc1s1XSwgJm1jcy0+Y2FsbC5hcmdzWzVdLCANCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1jcy0+Y2FsbC5hcmdzWzVdKSk7DQorICAgICAg
ICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcmMgID0gX19wdXRf
dXNlcihtY3MtPmNhbGwuYXJnc1s1XSwgJmNhbGxfbGlzdFtpXS5hcmdzWzVdKTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIGlmICggdW5saWtlbHkocmMpICkNCiAgICAgICAgIHsNCiAgICAgICAg
ICAgICBEUFJJTlRLKCJFcnJvciB3cml0aW5nIHJlc3VsdCBiYWNrIHRvIG11bHRpY2FsbCBibG9j
ay5cbiIpOw0KICAgICAgICAgICAgIGdvdG8gZmF1bHQ7DQogICAgICAgICB9DQogDQotICAgICAg
ICBpZiAoIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQ0KKyAgICAgICAgaWYgKCBoeXBlcmNh
bGxfcHJlZW1wdF9jaGVjaygpICYmICFWTVhfRE9NQUlOKGN1cnJlbnQpKQ0KICAgICAgICAgew0K
ICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICogQ29weSB0aGUgc3ViLWNhbGwgY29udGlu
dWF0aW9uIGlmIGl0IHdhcyBwcmVlbXB0ZWQuDQpAQCAtNTcsOSArNzYsMTUgQEANCiAgICAgICAg
ICAgICAgKi8NCiAgICAgICAgICAgICBpZiAoICF0ZXN0X2JpdChfTUNTRl9jYWxsX3ByZWVtcHRl
ZCwgJm1jcy0+ZmxhZ3MpICkNCiAgICAgICAgICAgICAgICAgaSsrOw0KLSAgICAgICAgICAgIGVs
c2UNCi0gICAgICAgICAgICAgICAgKHZvaWQpX19jb3B5X3RvX3VzZXIoJmNhbGxfbGlzdFtpXSwg
Jm1jcy0+Y2FsbCwNCisgICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgaWYoVk1YX0RPTUFJTihjdXJyZW50KSkNCisgICAgICAgICAgICAgICAgICAgICh2
b2lkKWNvcHlfdG9fZ3Vlc3QoJmNhbGxfbGlzdFtpXSwgJm1jcy0+Y2FsbCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjYWxsX2xpc3QpKTsNCisgICAgICAg
ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAodm9pZClfX2NvcHlfdG9fdXNl
cigmY2FsbF9saXN0W2ldLCAmbWNzLT5jYWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2YoKmNhbGxfbGlzdCkpOw0KKyAgICAgICAgICAgIH0NCiANCiAgICAg
ICAgICAgICAvKiBPbmx5IGNyZWF0ZSBhIGNvbnRpbnVhdGlvbiBpZiB0aGVyZSBpcyB3b3JrIGxl
ZnQgdG8gYmUgZG9uZS4gKi8NCiAgICAgICAgICAgICBpZiAoIGkgPCBucl9jYWxscyApDQpkaWZm
IC1OcnUgYS94ZW4vaW5jbHVkZS9hc20teDg2L3ZteF92bWNzLmggYi94ZW4vaW5jbHVkZS9hc20t
eDg2L3ZteF92bWNzLmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvdm14X3ZtY3MuaAkyMDA1
LTA1LTIwIDExOjQwOjEyICswODowMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni92bXhfdm1j
cy5oCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQpAQCAtMTg1LDYgKzE4NSw4IEBADQogI2Rl
ZmluZSBEQkdfTEVWRUxfMyAgICAgKDEgPDwgMykNCiAjZGVmaW5lIERCR19MRVZFTF9JTyAgICAo
MSA8PCA0KQ0KICNkZWZpbmUgREJHX0xFVkVMX1ZNTVUgICgxIDw8IDUpDQorI2RlZmluZSBEQkdf
TEVWRUxfVkJEICAoMSA8PCA2KQ0KKyNkZWZpbmUgREJHX0xFVkVMX1ZOSUYgICgxIDw8IDcpDQog
DQogZXh0ZXJuIHVuc2lnbmVkIGludCBvcHRfdm14X2RlYnVnX2xldmVsOw0KICNkZWZpbmUgVk1Y
X0RCR19MT0cobGV2ZWwsIF9mLCBfYS4uLikgICAgICAgICAgIFwNCmRpZmYgLU5ydSBhL3hlbi9p
bmNsdWRlL2FzbS14ODYveDg2XzMyL3VhY2Nlc3MuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYveDg2
XzMyL3VhY2Nlc3MuaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni94ODZfMzIvdWFjY2Vzcy5o
CTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3g4
Nl8zMi91YWNjZXNzLmgJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCkBAIC0zMzIsNiArMzMy
LDExIEBADQogdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBs
b25nIG4pOw0KIA0KK3Vuc2lnbmVkIGxvbmcgY29weV90b19ndWVzdCh2b2lkIF9fdXNlciAqdG8s
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25l
ZCBsb25nIG4pOw0KK3Vuc2lnbmVkIGxvbmcgY29weV9mcm9tX2d1ZXN0KHZvaWQgKnRvLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNp
Z25lZCBsb25nIG4pOw0KKw0KIHVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAq
bWVtLCB1bnNpZ25lZCBsb25nIGxlbik7DQogdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9p
ZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOw0KIA0KZGlmZiAtTnJ1IGEveGVuL2lu
Y2x1ZGUvYXNtLXg4Ni94ODZfNjQvdWFjY2Vzcy5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni94ODZf
NjQvdWFjY2Vzcy5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3g4Nl82NC91YWNjZXNzLmgJ
MjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYveDg2
XzY0L3VhY2Nlc3MuaAkyMDA1LTA1LTIwIDExOjQwOjEyICswODowMA0KQEAgLTIyNCw2ICsyMjQs
MTEgQEANCiB1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0
IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7IA0KIHVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3Vz
ZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsZW4pOyANCiAN
Cit1bnNpZ25lZCBsb25nIGNvcHlfdG9fZ3Vlc3Qodm9pZCBfX3VzZXIgKnRvLCANCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsN
Cit1bnNpZ25lZCBsb25nIGNvcHlfZnJvbV9ndWVzdCh2b2lkICp0bywNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBu
KTsNCisNCiBzdGF0aWMgYWx3YXlzX2lubGluZSBpbnQgX19jb3B5X2Zyb21fdXNlcih2b2lkICpk
c3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpIA0KIHsgDQogICAgIGlu
dCByZXQgPSAwOw0KZGlmZiAtTnJ1IGEveGVuL2luY2x1ZGUvcHVibGljL2FyY2gteDg2XzMyLmgg
Yi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC14ODZfMzIuaA0KLS0tIGEveGVuL2luY2x1ZGUvcHVi
bGljL2FyY2gteDg2XzMyLmgJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisrKyBiL3hlbi9p
bmNsdWRlL3B1YmxpYy9hcmNoLXg4Nl8zMi5oCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQpA
QCAtNTcsNyArNTcsMTIgQEANCiAjZGVmaW5lIEZMQVRfVVNFUl9TUyAgICBGTEFUX1JJTkczX1NT
DQogDQogLyogQW5kIHRoZSB0cmFwIHZlY3RvciBpcy4uLiAqLw0KKyNpZiBkZWZpbmVkIChDT05G
SUdfVk1YX0dVRVNUKQ0KKy8qZm9yIFZNWCBwYXJhdmlydHVhbGl6ZWQgZHJpdmVyKi8NCisjZGVm
aW5lIFRSQVBfSU5TVFIJIi5ieXRlIDB4MGYsMHgwMSwweGMxXG4iDQorI2Vsc2UNCiAjZGVmaW5l
IFRSQVBfSU5TVFIgImludCAkMHg4MiINCisjZW5kaWYNCiANCiANCiAvKg0KZGlmZiAtTnJ1IGEv
eGVuL2luY2x1ZGUvcHVibGljL3hlbi5oIGIveGVuL2luY2x1ZGUvcHVibGljL3hlbi5oDQotLS0g
YS94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCisr
KyBiL3hlbi9pbmNsdWRlL3B1YmxpYy94ZW4uaAkyMDA1LTA1LTIwIDExOjQwOjEyICswODowMA0K
QEAgLTU4LDYgKzU4LDcgQEANCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9ib290X3ZjcHUgICAgICAg
ICAgICAyNA0KICNkZWZpbmUgX19IWVBFUlZJU09SX3NldF9zZWdtZW50X2Jhc2UgICAgIDI1IC8q
IHg4Ni82NCBvbmx5ICovDQogI2RlZmluZSBfX0hZUEVSVklTT1JfbW11ZXh0X29wICAgICAgICAg
ICAgMjYNCisjZGVmaW5lIF9fSFlQRVJWSVNPUl92aXJ0dWFsX2RldmljZV9vcCAgICAyOAkNCiAN
CiAvKg0KICAqIE1VTFRJQ0FMTFMNCkBAIC0yNDQsNiArMjQ1LDE2IEBADQogI2RlZmluZSBWTUFT
U1RfVFlQRV93cml0YWJsZV9wYWdldGFibGVzICAyDQogI2RlZmluZSBNQVhfVk1BU1NUX1RZUEUg
Mg0KIA0KKy8qDQorICogQ29tbWFuZHMgdG8gSFlQRVJWSVNPUl92aXJ0dWFsX2RldmljZV9vcCgp
Lg0KKyAqLw0KKw0KKyNkZWZpbmUgU0VUX1NIQVJFSU5GT19NQVAgICAxDQorI2RlZmluZSBBRERS
X01BQ0hUT1BIWVMgICAgIDINCisjZGVmaW5lIEFERFJfUEhZU1RPTUFDSCAgICAgMw0KKyNkZWZp
bmUgU0VUX1BIWVNUT01BQ0ggICAgIDQNCisjZGVmaW5lIFNFVF9DQUxMQkFDS19JUlEgICAgNQ0K
Kw0KICNpZm5kZWYgX19BU1NFTUJMWV9fDQogDQogdHlwZWRlZiB1MTYgZG9taWRfdDsNCkBAIC0z
MzIsNyArMzQzLDggQEANCiAgICAgICovDQogICAgIHU4IGV2dGNobl91cGNhbGxfcGVuZGluZzsg
ICAgICAgICAgIC8qIDAgKi8NCiAgICAgdTggZXZ0Y2huX3VwY2FsbF9tYXNrOyAgICAgICAgICAg
ICAgLyogMSAqLw0KLSAgICB1OCBwYWQwLCBwYWQxOw0KKyAgICB1OCBjYWxsYmFja19tYXNrOyAg
ICAgICAgICAgICAgICAgICAvKiAyICovIA0KKyAgICB1OCBwYWQxOw0KICAgICB1MzIgZXZ0Y2hu
X3BlbmRpbmdfc2VsOyAgICAgICAgICAgICAvKiA0ICovDQogICAgIGFyY2hfdmNwdV9pbmZvX3Qg
YXJjaDsgICAgICAgICAgICAgIC8qIDggKi8NCiB9IFBBQ0tFRCB2Y3B1X2luZm9fdDsgICAgICAg
ICAgICAgICAgICAgLyogOCArIGFyY2ggKi8NCmRpZmYgLU5ydSBhL3hlbi9pbmNsdWRlL3hlbi9j
b25maWcuaCBiL3hlbi9pbmNsdWRlL3hlbi9jb25maWcuaA0KLS0tIGEveGVuL2luY2x1ZGUveGVu
L2NvbmZpZy5oCTIwMDUtMDUtMjAgMTE6NDA6MTIgKzA4OjAwDQorKysgYi94ZW4vaW5jbHVkZS94
ZW4vY29uZmlnLmgJMjAwNS0wNS0yMCAxMTo0MDoxMiArMDg6MDANCkBAIC0zNiw2ICszNiwxNCBA
QA0KICNkZWZpbmUgRFBSSU5USyhfZiwgX2EuLi4pICgodm9pZCkwKQ0KICNlbmRpZg0KIA0KKyNp
ZmRlZiBWRVJCT1NFDQorI2RlZmluZSBWTklGUFJJTlRLKF9hLi4uKSBcDQorICAgICBpZihWTVhf
RE9NQUlOKGN1cnJlbnQpKSAgXA0KKyAgICAgICAgcHJpbnRrKF9hKTsNCisjZWxzZQ0KKyNkZWZp
bmUgVk5JRlBSSU5USyhfYS4uLikgDQorI2VuZGlmDQorDQogI2lmbmRlZiBfX0FTU0VNQkxZX18N
CiAjaW5jbHVkZSA8eGVuL2NvbXBpbGVyLmg+DQogI2VuZGlmDQo=

------_=_NextPart_001_01C55CF1.0162A417--
