[PATCH v7 04/19] amd64: introduce hook for custom preload metada
LS0tCiBzeXMvYW1kNjQvYW1kNjQvbWFjaGRlcC5jICAgfCAgIDQ1ICsrKysrKysrKysrKystLS0t
CiBzeXMvYW1kNjQvaW5jbHVkZS9zeXNhcmNoLmggfCAgIDEyICsrKysrCiBzeXMvY29uZi9maWxl
cy5hbWQ2NCAgICAgICAgfCAgICAxICsKIHN5cy94ODYveGVuL3B2LmMgICAgICAgICAgICB8ICAx
MTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzL3hlbi9w
di5oICAgICAgICAgICAgICAgIHwgICAyOCArKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAx
ODkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lz
L3g4Ni94ZW4vcHYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy94ZW4vcHYuaAoKZGlmZiAtLWdp
dCBhL3N5cy9hbWQ2NC9hbWQ2NC9tYWNoZGVwLmMgYi9zeXMvYW1kNjQvYW1kNjQvbWFjaGRlcC5j
CmluZGV4IDE4ODBmMjMuLjA5ZDlhMWEgMTAwNjQ0Ci0tLSBhL3N5cy9hbWQ2NC9hbWQ2NC9tYWNo
ZGVwLmMKKysrIGIvc3lzL2FtZDY0L2FtZDY0L21hY2hkZXAuYwpAQCAtMTI2LDYgKzEyNiw3IEBA
IF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgogI2luY2x1
ZGUgPG1hY2hpbmUvc2lnZnJhbWUuaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NwZWNpYWxyZWcuaD4K
KyNpbmNsdWRlIDxtYWNoaW5lL3N5c2FyY2guaD4KICNpZmRlZiBQRVJGTU9OCiAjaW5jbHVkZSA8
bWFjaGluZS9wZXJmbW9uLmg+CiAjZW5kaWYKQEAgLTE0OCw2ICsxNDksNyBAQCBfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CiAKICNpZmRlZiBYRU5IVk0KICNpbmNsdWRlIDx4ZW4veGVuLW9zLmg+Cisj
aW5jbHVkZSA8eGVuL3B2Lmg+CiAjZW5kaWYKIAogLyogU2FuaXR5IGNoZWNrIGZvciBfX2N1cnRo
cmVhZCgpICovCkBAIC0xNzIsNiArMTc0LDE0IEBAIHN0YXRpYyBpbnQgIHNldF9mcGNvbnRleHQo
c3RydWN0IHRocmVhZCAqdGQsIGNvbnN0IG1jb250ZXh0X3QgKm1jcCwKICAgICBjaGFyICp4ZnB1
c3RhdGUsIHNpemVfdCB4ZnB1c3RhdGVfbGVuKTsKIFNZU0lOSVQoY3B1LCBTSV9TVUJfQ1BVLCBT
SV9PUkRFUl9GSVJTVCwgY3B1X3N0YXJ0dXAsIE5VTEwpOwogCisvKiBQcmVsb2FkIGRhdGEgcGFy
c2UgZnVuY3Rpb24gKi8KK3N0YXRpYyBjYWRkcl90IG5hdGl2ZV9wYXJzZV9wcmVsb2FkX2RhdGEo
dV9pbnQ2NF90KTsKKworLyogRGVmYXVsdCBpbml0X29wcyBpbXBsZW1lbnRhdGlvbi4gKi8KK3N0
cnVjdCBpbml0X29wcyBpbml0X29wcyA9IHsKKwkucGFyc2VfcHJlbG9hZF9kYXRhID0JbmF0aXZl
X3BhcnNlX3ByZWxvYWRfZGF0YSwKK307CisKIC8qCiAgKiBUaGUgZmlsZSAiY29uZi9sZHNjcmlw
dC5hbWQ2NCIgZGVmaW5lcyB0aGUgc3ltYm9sICJrZXJucGh5cyIuICBJdHMgdmFsdWUgaXMKICAq
IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IHdoaWNoIHRoZSBrZXJuZWwgaXMgbG9hZGVkLgpAQCAt
MTY5MCw2ICsxNzAwLDI2IEBAIGRvX25leHQ6CiAJbXNnYnVmcCA9IChzdHJ1Y3QgbXNnYnVmICop
UEhZU19UT19ETUFQKHBoeXNfYXZhaWxbcGFfaW5keF0pOwogfQogCitzdGF0aWMgY2FkZHJfdAor
bmF0aXZlX3BhcnNlX3ByZWxvYWRfZGF0YSh1X2ludDY0X3QgbW9kdWxlcCkKK3sKKwljYWRkcl90
IGttZHA7CisKKwlwcmVsb2FkX21ldGFkYXRhID0gKGNhZGRyX3QpKHVpbnRwdHJfdCkobW9kdWxl
cCArIEtFUk5CQVNFKTsKKwlwcmVsb2FkX2Jvb3RzdHJhcF9yZWxvY2F0ZShLRVJOQkFTRSk7CisJ
a21kcCA9IHByZWxvYWRfc2VhcmNoX2J5X3R5cGUoImVsZiBrZXJuZWwiKTsKKwlpZiAoa21kcCA9
PSBOVUxMKQorCQlrbWRwID0gcHJlbG9hZF9zZWFyY2hfYnlfdHlwZSgiZWxmNjQga2VybmVsIik7
CisJYm9vdGhvd3RvID0gTURfRkVUQ0goa21kcCwgTU9ESU5GT01EX0hPV1RPLCBpbnQpOworCWtl
cm5fZW52cCA9IE1EX0ZFVENIKGttZHAsIE1PRElORk9NRF9FTlZQLCBjaGFyICopICsgS0VSTkJB
U0U7CisjaWZkZWYgRERCCisJa3N5bV9zdGFydCA9IE1EX0ZFVENIKGttZHAsIE1PRElORk9NRF9T
U1lNLCB1aW50cHRyX3QpOworCWtzeW1fZW5kID0gTURfRkVUQ0goa21kcCwgTU9ESU5GT01EX0VT
WU0sIHVpbnRwdHJfdCk7CisjZW5kaWYKKworCXJldHVybiAoa21kcCk7Cit9CisKICNpZmRlZiBY
RU5IVk0KIC8qCiAgKiBGaXJzdCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIFhlbiBQVkggYm9vdCBz
ZXF1ZW5jZS4KQEAgLTE3NTQsNiArMTc4NCw5IEBAIGhhbW1lcl90aW1lX3hlbihzdGFydF9pbmZv
X3QgKnNpLCB1X2ludDY0X3QgeGVuc3RhY2spCiAJfQogCWxvYWRfY3IzKCgodV9pbnQ2NF90KSZQ
VDRbMF0pIC0gS0VSTkJBU0UpOwogCisJLyogU2V0IHRoZSBob29rcyBmb3IgZWFybHkgZnVuY3Rp
b25zIHRoYXQgZGl2ZXJnZSBmcm9tIGJhcmUgbWV0YWwgKi8KKwl4ZW5fcHZfc2V0X2luaXRfb3Bz
KCk7CisKIAkvKiBOb3cgd2UgY2FuIGp1bXAgaW50byB0aGUgbmF0aXZlIGluaXQgZnVuY3Rpb24g
Ki8KIAlyZXR1cm4gKGhhbW1lcl90aW1lKDAsIHBoeXNmcmVlKSk7CiB9CkBAIC0xNzgzLDE3ICsx
ODE2LDcgQEAgaGFtbWVyX3RpbWUodV9pbnQ2NF90IG1vZHVsZXAsIHVfaW50NjRfdCBwaHlzZnJl
ZSkKIAkgKi8KIAlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFkMCk7CiAKLQlwcmVsb2FkX21l
dGFkYXRhID0gKGNhZGRyX3QpKHVpbnRwdHJfdCkobW9kdWxlcCArIEtFUk5CQVNFKTsKLQlwcmVs
b2FkX2Jvb3RzdHJhcF9yZWxvY2F0ZShLRVJOQkFTRSk7Ci0Ja21kcCA9IHByZWxvYWRfc2VhcmNo
X2J5X3R5cGUoImVsZiBrZXJuZWwiKTsKLQlpZiAoa21kcCA9PSBOVUxMKQotCQlrbWRwID0gcHJl
bG9hZF9zZWFyY2hfYnlfdHlwZSgiZWxmNjQga2VybmVsIik7Ci0JYm9vdGhvd3RvID0gTURfRkVU
Q0goa21kcCwgTU9ESU5GT01EX0hPV1RPLCBpbnQpOwotCWtlcm5fZW52cCA9IE1EX0ZFVENIKGtt
ZHAsIE1PRElORk9NRF9FTlZQLCBjaGFyICopICsgS0VSTkJBU0U7Ci0jaWZkZWYgRERCCi0Ja3N5
bV9zdGFydCA9IE1EX0ZFVENIKGttZHAsIE1PRElORk9NRF9TU1lNLCB1aW50cHRyX3QpOwotCWtz
eW1fZW5kID0gTURfRkVUQ0goa21kcCwgTU9ESU5GT01EX0VTWU0sIHVpbnRwdHJfdCk7Ci0jZW5k
aWYKKwlrbWRwID0gaW5pdF9vcHMucGFyc2VfcHJlbG9hZF9kYXRhKG1vZHVsZXApOwogCiAJLyog
SW5pdCBiYXNpYyB0dW5hYmxlcywgaHogZXRjICovCiAJaW5pdF9wYXJhbTEoKTsKZGlmZiAtLWdp
dCBhL3N5cy9hbWQ2NC9pbmNsdWRlL3N5c2FyY2guaCBiL3N5cy9hbWQ2NC9pbmNsdWRlL3N5c2Fy
Y2guaAppbmRleCBjZDM4MGQ0Li41OGFjOGNkIDEwMDY0NAotLS0gYS9zeXMvYW1kNjQvaW5jbHVk
ZS9zeXNhcmNoLmgKKysrIGIvc3lzL2FtZDY0L2luY2x1ZGUvc3lzYXJjaC5oCkBAIC00LDMgKzQs
MTUgQEAKIC8qICRGcmVlQlNEJCAqLwogCiAjaW5jbHVkZSA8eDg2L3N5c2FyY2guaD4KKworLyoK
KyAqIFN0cnVjdCBjb250YWluaW5nIHBvaW50ZXJzIHRvIGluaXQgZnVuY3Rpb25zIHdob3NlCisg
KiBpbXBsZW1lbnRhdGlvbiBpcyBydW4gdGltZSBzZWxlY3RhYmxlLiAgU2VsZWN0aW9uIGNhbiBi
ZSBtYWRlLAorICogZm9yIGV4YW1wbGUsIGJhc2VkIG9uIGRldGVjdGlvbiBvZiBhIEJJT1MgdmFy
aWFudCBvcgorICogaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KKyAqLworc3RydWN0IGluaXRfb3Bz
IHsKKwljYWRkcl90CSgqcGFyc2VfcHJlbG9hZF9kYXRhKSh1X2ludDY0X3QpOworfTsKKworZXh0
ZXJuIHN0cnVjdCBpbml0X29wcyBpbml0X29wczsKZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVz
LmFtZDY0IGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQKaW5kZXggZDFiZGNkOS4uYjNiMTMxOSAxMDA2
NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMuYW1kNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQK
QEAgLTU2NiwzICs1NjYsNCBAQCB4ODYveDg2L25leHVzLmMJCQlzdGFuZGFyZAogeDg2L3g4Ni90
c2MuYwkJCXN0YW5kYXJkCiB4ODYveGVuL2h2bS5jCQkJb3B0aW9uYWwJeGVuaHZtCiB4ODYveGVu
L3hlbl9pbnRyLmMJCW9wdGlvbmFsCXhlbiB8IHhlbmh2bQoreDg2L3hlbi9wdi5jCQkJb3B0aW9u
YWwJeGVuaHZtCmRpZmYgLS1naXQgYS9zeXMveDg2L3hlbi9wdi5jIGIvc3lzL3g4Ni94ZW4vcHYu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFjYTMyCi0tLSAvZGV2L251
bGwKKysrIGIvc3lzL3g4Ni94ZW4vcHYuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwNCBDaHJpc3RpYW4gTGltcGFjaC4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0y
MDA2LDIwMDggS2lwIE1hY3kKKyAqIENvcHlyaWdodCAoYykgMjAxMyBSb2dlciBQYXUgTW9ubsOp
IDxyb2dlci5wYXVAY2l0cml4LmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5
cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+
CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorCisjaW5j
bHVkZSA8bWFjaGluZS9zeXNhcmNoLmg+CisKKyNpbmNsdWRlIDx4ZW4veGVuLW9zLmg+CisjaW5j
bHVkZSA8eGVuL3B2Lmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcndhcmQg
RGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgY2FkZHJf
dCB4ZW5fcHZfcGFyc2VfcHJlbG9hZF9kYXRhKHVfaW50NjRfdCk7CisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisvKiBYZW4gaW5pdF9vcHMgaW1wbGVtZW50YXRpb24uICovCitzdHJ1Y3QgaW5p
dF9vcHMgeGVuX2luaXRfb3BzID0geworCS5wYXJzZV9wcmVsb2FkX2RhdGEgPQl4ZW5fcHZfcGFy
c2VfcHJlbG9hZF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdAoreworCWNvbnN0IGNoYXIJKmV2
OworCWludAkJbWFzazsKK30gaG93dG9fbmFtZXNbXSA9IHsKKwl7ImJvb3RfYXNrbmFtZSIsCVJC
X0FTS05BTUV9LAorCXsiYm9vdF9zaW5nbGUiLAkJUkJfU0lOR0xFfSwKKwl7ImJvb3Rfbm9zeW5j
IiwJCVJCX05PU1lOQ30sCisJeyJib290X2hhbHQiLAkJUkJfQVNLTkFNRX0sCisJeyJib290X3Nl
cmlhbCIsCQlSQl9TRVJJQUx9LAorCXsiYm9vdF9jZHJvbSIsCQlSQl9DRFJPTX0sCisJeyJib290
X2dkYiIsCQlSQl9HREJ9LAorCXsiYm9vdF9nZGJfcGF1c2UiLAlSQl9SRVNFUlZFRDF9LAorCXsi
Ym9vdF92ZXJib3NlIiwJUkJfVkVSQk9TRX0sCisJeyJib290X211bHRpY29ucyIsCVJCX01VTFRJ
UExFfSwKKwl7TlVMTCwJMH0KK307CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gY29udmVydCB0aGUg
ImV4dHJhIiBwYXJhbWV0ZXJzIHBhc3NlZCBieSBYZW4KKyAqIGludG8gRnJlZUJTRCBib290IG9w
dGlvbnMgKGZyb20gdGhlIGkzODYgWGVuIHBvcnQpLgorICovCitzdGF0aWMgY2hhciAqCit4ZW5f
c2V0Ym9vdGVudihjaGFyICpjbWRfbGluZSkKK3sKKwljaGFyICpjbWRfbGluZV9uZXh0OworCisg
ICAgICAgIC8qIFNraXAgbGVhZGluZyBzcGFjZXMgKi8KKyAgICAgICAgZm9yICg7ICpjbWRfbGlu
ZSA9PSAnICc7IGNtZF9saW5lKyspOworCisJZm9yIChjbWRfbGluZV9uZXh0ID0gY21kX2xpbmU7
IHN0cnNlcCgmY21kX2xpbmVfbmV4dCwgIiwiKSAhPSBOVUxMOyk7CisJcmV0dXJuIChjbWRfbGlu
ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3hlbl9ib290aG93dG8oY2hhciAqZW52cCkKK3sKKwlpbnQg
aSwgaG93dG8gPSAwOworCisJLyogZ2V0IGVxdWl2YWxlbnRzIGZyb20gdGhlIGVudmlyb25tZW50
ICovCisJZm9yIChpID0gMDsgaG93dG9fbmFtZXNbaV0uZXYgIT0gTlVMTDsgaSsrKQorCQlpZiAo
Z2V0ZW52KGhvd3RvX25hbWVzW2ldLmV2KSAhPSBOVUxMKQorCQkJaG93dG8gfD0gaG93dG9fbmFt
ZXNbaV0ubWFzazsKKwlyZXR1cm4gKGhvd3RvKTsKK30KKworc3RhdGljIGNhZGRyX3QKK3hlbl9w
dl9wYXJzZV9wcmVsb2FkX2RhdGEodV9pbnQ2NF90IG1vZHVsZXApCit7CisJLyogUGFyc2UgdGhl
IGV4dHJhIGJvb3QgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgWGVuICovCisJaWYgKEhZUEVSVklTT1Jf
c3RhcnRfaW5mby0+Y21kX2xpbmUpCisJCWtlcm5fZW52cCA9IHhlbl9zZXRib290ZW52KEhZUEVS
VklTT1Jfc3RhcnRfaW5mby0+Y21kX2xpbmUpOworCWJvb3Rob3d0byB8PSB4ZW5fYm9vdGhvd3Rv
KGtlcm5fZW52cCk7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCit2b2lkCit4ZW5fcHZfc2V0X2lu
aXRfb3BzKHZvaWQpCit7CisJLyogSW5pdCBvcHMgZm9yIFhlbiBQViAqLworCWluaXRfb3BzID0g
eGVuX2luaXRfb3BzOworfQpkaWZmIC0tZ2l0IGEvc3lzL3hlbi9wdi5oIGIvc3lzL3hlbi9wdi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjg3NzYKLS0tIC9kZXYvbnVs
bAorKysgYi9zeXMveGVuL3B2LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
ZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv
biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0
aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk
byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg
aW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl
IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ
TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK
KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC
RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX
SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ
TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S
IFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiAk
RnJlZUJTRCQKKyAqLworCisjaWZuZGVmCV9fWEVOX1BWX0hfXworI2RlZmluZQlfX1hFTl9QVl9I
X18KKwordm9pZAl4ZW5fcHZfc2V0X2luaXRfb3BzKHZvaWQpOworCisjZW5kaWYJLyogX19YRU5f
UFZfSF9fICovCi0tIAoxLjcuNy41IChBcHBsZSBHaXQtMjYpCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmcmVlYnNkLWN1cnJlbnRAZnJlZWJzZC5vcmcg
bWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5mcmVlYnNkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zy
ZWVic2QtY3VycmVudApUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkgbWFpbCB0byAiZnJlZWJzZC1j
dXJyZW50LXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIg==