[PATCH v10 12/20] xen: add a hook to perform AP startup
QVAgc3RhcnR1cCBvbiBQVkggZm9sbG93cyB0aGUgUFYgbWV0aG9kLCBzbyB3ZSBuZWVkIHRvIGFk
ZCBhIGhvb2sgaW4Kb3JkZXIgdG8gZGl2ZXJnZSBmcm9tIGJhcmUgbWV0YWwuCi0tLQogc3lzL2Ft
ZDY0L2FtZDY0L21wX21hY2hkZXAuYyB8ICAgMTQgKysrLS0tCiBzeXMvYW1kNjQvaW5jbHVkZS9j
cHUuaCAgICAgIHwgICAgMSArCiBzeXMvYW1kNjQvaW5jbHVkZS9zbXAuaCAgICAgIHwgICAgMSAr
CiBzeXMveDg2L3hlbi9odm0uYyAgICAgICAgICAgIHwgICAxMiArKysrKy0KIHN5cy94ODYveGVu
L3B2LmMgICAgICAgICAgICAgfCAgIDg1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogc3lzL3hlbi9wdi5oICAgICAgICAgICAgICAgICB8ICAgMzIgKysrKysrKysr
KysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMveGVuL3B2LmgKCmRpZmYgLS1naXQgYS9zeXMvYW1k
NjQvYW1kNjQvbXBfbWFjaGRlcC5jIGIvc3lzL2FtZDY0L2FtZDY0L21wX21hY2hkZXAuYwppbmRl
eCA0YWY0ZjhmLi4xN2U5NTdkIDEwMDY0NAotLS0gYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRl
cC5jCisrKyBiL3N5cy9hbWQ2NC9hbWQ2NC9tcF9tYWNoZGVwLmMKQEAgLTkwLDcgKzkwLDcgQEAg
ZXh0ZXJuICBzdHJ1Y3QgcGNwdSBfX3BjcHVbXTsKIAogLyogQVAgdXNlcyB0aGlzIGR1cmluZyBi
b290c3RyYXAuICBEbyBub3Qgc3RhdGljaXplLiAgKi8KIGNoYXIgKmJvb3RTVEs7Ci1zdGF0aWMg
aW50IGJvb3RBUDsKK2ludCBib290QVA7CiAKIC8qIEZyZWUgdGhlc2UgYWZ0ZXIgdXNlICovCiB2
b2lkICpib290c3RhY2tzW01BWENQVV07CkBAIC0xMjQsNyArMTI0LDggQEAgc3RhdGljIHVfbG9u
ZyAqaXBpX2hhcmRjbG9ja19jb3VudHNbTUFYQ1BVXTsKIAogLyogRGVmYXVsdCBjcHVfb3BzIGlt
cGxlbWVudGF0aW9uLiAqLwogc3RydWN0IGNwdV9vcHMgY3B1X29wcyA9IHsKLQkuaXBpX3ZlY3Rv
cmVkID0gbGFwaWNfaXBpX3ZlY3RvcmVkCisJLmlwaV92ZWN0b3JlZCA9IGxhcGljX2lwaV92ZWN0
b3JlZCwKKwkuc3RhcnRfYWxsX2FwcyA9IG5hdGl2ZV9zdGFydF9hbGxfYXBzLAogfTsKIAogZXh0
ZXJuIGludGhhbmRfdCBJRFRWRUMoZmFzdF9zeXNjYWxsKSwgSURUVkVDKGZhc3Rfc3lzY2FsbDMy
KTsKQEAgLTEzOCw3ICsxMzksNyBAQCBleHRlcm4gaW50IHBtYXBfcGNpZF9lbmFibGVkOwogc3Rh
dGljIHZvbGF0aWxlIGNwdXNldF90IGlwaV9ubWlfcGVuZGluZzsKIAogLyogdXNlZCB0byBob2xk
IHRoZSBBUCdzIHVudGlsIHdlIGFyZSByZWFkeSB0byByZWxlYXNlIHRoZW0gKi8KLXN0YXRpYyBz
dHJ1Y3QgbXR4IGFwX2Jvb3RfbXR4Oworc3RydWN0IG10eCBhcF9ib290X210eDsKIAogLyogU2V0
IHRvIDEgb25jZSB3ZSdyZSByZWFkeSB0byBsZXQgdGhlIEFQcyBvdXQgb2YgdGhlIHBlbi4gKi8K
IHN0YXRpYyB2b2xhdGlsZSBpbnQgYXBzX3JlYWR5ID0gMDsKQEAgLTE2NSw3ICsxNjYsNiBAQCBz
dGF0aWMgaW50IGNwdV9jb3JlczsJCQkvKiBjb3JlcyBwZXIgcGFja2FnZSAqLwogCiBzdGF0aWMg
dm9pZAlhc3NpZ25fY3B1X2lkcyh2b2lkKTsKIHN0YXRpYyB2b2lkCXNldF9pbnRlcnJ1cHRfYXBp
Y19pZHModm9pZCk7Ci1zdGF0aWMgaW50CXN0YXJ0X2FsbF9hcHModm9pZCk7CiBzdGF0aWMgaW50
CXN0YXJ0X2FwKGludCBhcGljX2lkKTsKIHN0YXRpYyB2b2lkCXJlbGVhc2VfYXBzKHZvaWQgKmR1
bW15KTsKIApAQCAtNTY5LDcgKzU2OSw3IEBAIGNwdV9tcF9zdGFydCh2b2lkKQogCWFzc2lnbl9j
cHVfaWRzKCk7CiAKIAkvKiBTdGFydCBlYWNoIEFwcGxpY2F0aW9uIFByb2Nlc3NvciAqLwotCXN0
YXJ0X2FsbF9hcHMoKTsKKwljcHVfb3BzLnN0YXJ0X2FsbF9hcHMoKTsKIAogCXNldF9pbnRlcnJ1
cHRfYXBpY19pZHMoKTsKIH0KQEAgLTkwOCw4ICs5MDgsOCBAQCBhc3NpZ25fY3B1X2lkcyh2b2lk
KQogLyoKICAqIHN0YXJ0IGVhY2ggQVAgaW4gb3VyIGxpc3QKICAqLwotc3RhdGljIGludAotc3Rh
cnRfYWxsX2Fwcyh2b2lkKQoraW50CituYXRpdmVfc3RhcnRfYWxsX2Fwcyh2b2lkKQogewogCXZt
X29mZnNldF90IHZhID0gYm9vdF9hZGRyZXNzICsgS0VSTkJBU0U7CiAJdV9pbnQ2NF90ICpwdDQs
ICpwdDMsICpwdDI7CmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaCBiL3N5cy9h
bWQ2NC9pbmNsdWRlL2NwdS5oCmluZGV4IDNjNWQ1ZGYuLjk4ZGMzZTAgMTAwNjQ0Ci0tLSBhL3N5
cy9hbWQ2NC9pbmNsdWRlL2NwdS5oCisrKyBiL3N5cy9hbWQ2NC9pbmNsdWRlL2NwdS5oCkBAIC02
NCw2ICs2NCw3IEBAIHN0cnVjdCBjcHVfb3BzIHsKIAl2b2lkICgqY3B1X2luaXQpKHZvaWQpOwog
CXZvaWQgKCpjcHVfcmVzdW1lKSh2b2lkKTsKIAl2b2lkICgqaXBpX3ZlY3RvcmVkKSh1X2ludCwg
aW50KTsKKwlpbnQgICgqc3RhcnRfYWxsX2Fwcykodm9pZCk7CiB9OwogCiBleHRlcm4gc3RydWN0
CWNwdV9vcHMgY3B1X29wczsKZGlmZiAtLWdpdCBhL3N5cy9hbWQ2NC9pbmNsdWRlL3NtcC5oIGIv
c3lzL2FtZDY0L2luY2x1ZGUvc21wLmgKaW5kZXggZDFiMzY2Yi4uMTViYzgyMyAxMDA2NDQKLS0t
IGEvc3lzL2FtZDY0L2luY2x1ZGUvc21wLmgKKysrIGIvc3lzL2FtZDY0L2luY2x1ZGUvc21wLmgK
QEAgLTc5LDYgKzc5LDcgQEAgdm9pZAlzbXBfbWFza2VkX2ludmxwZ19yYW5nZShjcHVzZXRfdCBt
YXNrLCBzdHJ1Y3QgcG1hcCAqcG1hcCwKIAkgICAgdm1fb2Zmc2V0X3Qgc3RhcnR2YSwgdm1fb2Zm
c2V0X3QgZW5kdmEpOwogdm9pZAlzbXBfaW52bHRsYihzdHJ1Y3QgcG1hcCAqcG1hcCk7CiB2b2lk
CXNtcF9tYXNrZWRfaW52bHRsYihjcHVzZXRfdCBtYXNrLCBzdHJ1Y3QgcG1hcCAqcG1hcCk7Citp
bnQJbmF0aXZlX3N0YXJ0X2FsbF9hcHModm9pZCk7CiAKICNlbmRpZiAvKiAhTE9DT1JFICovCiAj
ZW5kaWYgLyogU01QICovCmRpZmYgLS1naXQgYS9zeXMveDg2L3hlbi9odm0uYyBiL3N5cy94ODYv
eGVuL2h2bS5jCmluZGV4IGZiMWVkNzkuLjQ5Y2FhY2YgMTAwNjQ0Ci0tLSBhL3N5cy94ODYveGVu
L2h2bS5jCisrKyBiL3N5cy94ODYveGVuL2h2bS5jCkBAIC01Myw2ICs1Myw5IEBAIF9fRkJTRElE
KCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDx4ZW4vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPHhl
bi9odm0uaD4KICNpbmNsdWRlIDx4ZW4veGVuX2ludHIuaD4KKyNpZmRlZiBfX2FtZDY0X18KKyNp
bmNsdWRlIDx4ZW4vcHYuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0v
cGFyYW1zLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CkBAIC0xMTksNyArMTIy
LDEwIEBAIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZSA9IFhFTl9OQVRJVkU7
CiBzdHJ1Y3QgY3B1X29wcyB4ZW5faHZtX2NwdV9vcHMgPSB7CiAJLmlwaV92ZWN0b3JlZAk9IGxh
cGljX2lwaV92ZWN0b3JlZCwKIAkuY3B1X2luaXQJPSB4ZW5faHZtX2NwdV9pbml0LAotCS5jcHVf
cmVzdW1lCT0geGVuX2h2bV9jcHVfcmVzdW1lCisJLmNwdV9yZXN1bWUJPSB4ZW5faHZtX2NwdV9y
ZXN1bWUsCisjaWZkZWYgX19hbWQ2NF9fCisJLnN0YXJ0X2FsbF9hcHMgPSBuYXRpdmVfc3RhcnRf
YWxsX2FwcywKKyNlbmRpZgogfTsKIAogc3RhdGljIE1BTExPQ19ERUZJTkUoTV9YRU5IVk0sICJ4
ZW5faHZtIiwgIlhlbiBIVk0gUFYgU3VwcG9ydCIpOwpAQCAtNjk4LDYgKzcwNCwxMCBAQCB4ZW5f
aHZtX2luaXQoZW51bSB4ZW5faHZtX2luaXRfdHlwZSBpbml0X3R5cGUpCiAJCXNldHVwX3hlbl9m
ZWF0dXJlcygpOwogCQljcHVfb3BzID0geGVuX2h2bV9jcHVfb3BzOwogIAkJdm1fZ3Vlc3QgPSBW
TV9HVUVTVF9YRU47CisjaWZkZWYgX19hbWQ2NF9fCisJCWlmICh4ZW5fcHZfZG9tYWluKCkpCisJ
CQljcHVfb3BzLnN0YXJ0X2FsbF9hcHMgPSB4ZW5fcHZfc3RhcnRfYWxsX2FwczsKKyNlbmRpZgog
CQlicmVhazsKIAljYXNlIFhFTl9IVk1fSU5JVF9SRVNVTUU6CiAJCWlmIChlcnJvciAhPSAwKQpk
aWZmIC0tZ2l0IGEvc3lzL3g4Ni94ZW4vcHYuYyBiL3N5cy94ODYveGVuL3B2LmMKaW5kZXggZDEx
YmMxYS4uMjJmZDZhNiAxMDA2NDQKLS0tIGEvc3lzL3g4Ni94ZW4vcHYuYworKysgYi9zeXMveDg2
L3hlbi9wdi5jCkBAIC0zNCw4ICszNCwxMSBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5j
bHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KICNpbmNsdWRlIDxz
eXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8c3lzL2xvY2su
aD4KICNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5j
bHVkZSA8c3lzL3NtcC5oPgogCiAjaW5jbHVkZSA8dm0vdm0uaD4KICNpbmNsdWRlIDx2bS92bV9l
eHRlcm4uaD4KQEAgLTQ5LDkgKzUyLDEzIEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNs
dWRlIDxtYWNoaW5lL3N5c2FyY2guaD4KICNpbmNsdWRlIDxtYWNoaW5lL2Nsb2NrLmg+CiAjaW5j
bHVkZSA8bWFjaGluZS9wYy9iaW9zLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zbXAuaD4KIAogI2lu
Y2x1ZGUgPHhlbi94ZW4tb3MuaD4KICNpbmNsdWRlIDx4ZW4vaHlwZXJ2aXNvci5oPgorI2luY2x1
ZGUgPHhlbi9wdi5oPgorCisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS92Y3B1Lmg+CiAKIC8qIE5h
dGl2ZSBpbml0aWFsIGZ1bmN0aW9uICovCiBleHRlcm4gdV9pbnQ2NF90IGhhbW1lcl90aW1lKHVf
aW50NjRfdCwgdV9pbnQ2NF90KTsKQEAgLTY1LDYgKzcyLDE1IEBAIHN0YXRpYyBjYWRkcl90IHhl
bl9wdl9wYXJzZV9wcmVsb2FkX2RhdGEodV9pbnQ2NF90KTsKIHN0YXRpYyB2b2lkIHhlbl9wdl9w
YXJzZV9tZW1tYXAoY2FkZHJfdCwgdm1fcGFkZHJfdCAqLCBpbnQgKik7CiAKIHN0YXRpYyB2b2lk
IHhlbl9wdl9zZXRfaW5pdF9vcHModm9pZCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRXh0ZXJuIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyog
VmFyaWFibGVzIHVzZWQgYnkgYW1kNjQgbXBfbWFjaGRlcCB0byBzdGFydCBBUHMgKi8KK2V4dGVy
biBzdHJ1Y3QgbXR4IGFwX2Jvb3RfbXR4OworZXh0ZXJuIHZvaWQgKmJvb3RzdGFja3NbXTsKK2V4
dGVybiBjaGFyICpkb3VibGVmYXVsdF9zdGFjazsKK2V4dGVybiBjaGFyICpubWlfc3RhY2s7Citl
eHRlcm4gdm9pZCAqZHBjcHU7CitleHRlcm4gaW50IGJvb3RBUDsKK2V4dGVybiBjaGFyICpib290
U1RLOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBEYXRhIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogWGVuIGluaXRfb3BzIGltcGxlbWVu
dGF0aW9uLiAqLwpAQCAtMTY4LDYgKzE4NCw3NSBAQCBoYW1tZXJfdGltZV94ZW4oc3RhcnRfaW5m
b190ICpzaSwgdV9pbnQ2NF90IHhlbnN0YWNrKQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFBWIHNwZWNpZmljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCitzdGF0aWMgaW50CitzdGFydF94ZW5fYXAoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdmNwdV9n
dWVzdF9jb250ZXh0ICpjdHh0OworCWludCBtcywgY3B1cyA9IG1wX25hcHM7CisKKwljdHh0ID0g
bWFsbG9jKHNpemVvZigqY3R4dCksIE1fVEVNUCwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChj
dHh0ID09IE5VTEwpCisJCXBhbmljKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5Iik7CisKKwlj
dHh0LT5mbGFncyA9IFZHQ0ZfSU5fS0VSTkVMOworCWN0eHQtPnVzZXJfcmVncy5yaXAgPSAodW5z
aWduZWQgbG9uZykgaW5pdF9zZWNvbmRhcnk7CisJY3R4dC0+dXNlcl9yZWdzLnJzcCA9ICh1bnNp
Z25lZCBsb25nKSBib290U1RLOworCisJLyogU2V0IHRoZSBBUCB0byB1c2UgdGhlIHNhbWUgcGFn
ZSB0YWJsZXMgKi8KKwljdHh0LT5jdHJscmVnWzNdID0gS1BNTDRwaHlzOworCisJaWYgKEhZUEVS
VklTT1JfdmNwdV9vcChWQ1BVT1BfaW5pdGlhbGlzZSwgY3B1LCBjdHh0KSkKKwkJcGFuaWMoInVu
YWJsZSB0byBpbml0aWFsaXplIEFQIyVkXG4iLCBjcHUpOworCisJZnJlZShjdHh0LCBNX1RFTVAp
OworCisJLyogTGF1bmNoIHRoZSB2Q1BVICovCisJaWYgKEhZUEVSVklTT1JfdmNwdV9vcChWQ1BV
T1BfdXAsIGNwdSwgTlVMTCkpCisJCXBhbmljKCJ1bmFibGUgdG8gc3RhcnQgQVAjJWRcbiIsIGNw
dSk7CisKKwkvKiBXYWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgaXQgdG8gc3RhcnQuICovCisJZm9y
IChtcyA9IDA7IG1zIDwgNTAwMDsgbXMrKykgeworCQlpZiAobXBfbmFwcyA+IGNwdXMpCisJCQly
ZXR1cm4gKDEpOwkvKiByZXR1cm4gU1VDQ0VTUyAqLworCQlERUxBWSgxMDAwKTsKKwl9CisKKwly
ZXR1cm4gKDApOworfQorCitpbnQKK3hlbl9wdl9zdGFydF9hbGxfYXBzKHZvaWQpCit7CisJaW50
IGNwdTsKKworCW10eF9pbml0KCZhcF9ib290X210eCwgImFwIGJvb3QiLCBOVUxMLCBNVFhfU1BJ
Tik7CisKKwlmb3IgKGNwdSA9IDE7IGNwdSA8IG1wX25jcHVzOyBjcHUrKykgeworCisJCS8qIGFs
bG9jYXRlIGFuZCBzZXQgdXAgYW4gaWRsZSBzdGFjayBkYXRhIHBhZ2UgKi8KKwkJYm9vdHN0YWNr
c1tjcHVdID0gKHZvaWQgKilrbWVtX21hbGxvYyhrZXJuZWxfYXJlbmEsCisJCSAgICBLU1RBQ0tf
UEFHRVMgKiBQQUdFX1NJWkUsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJZG91YmxlZmF1bHRfc3Rh
Y2sgPSAoY2hhciAqKWttZW1fbWFsbG9jKGtlcm5lbF9hcmVuYSwKKwkJICAgIFBBR0VfU0laRSwg
TV9XQUlUT0sgfCBNX1pFUk8pOworCQlubWlfc3RhY2sgPSAoY2hhciAqKWttZW1fbWFsbG9jKGtl
cm5lbF9hcmVuYSwgUEFHRV9TSVpFLAorCQkgICAgTV9XQUlUT0sgfCBNX1pFUk8pOworCQlkcGNw
dSA9ICh2b2lkICopa21lbV9tYWxsb2Moa2VybmVsX2FyZW5hLCBEUENQVV9TSVpFLAorCQkgICAg
TV9XQUlUT0sgfCBNX1pFUk8pOworCisJCWJvb3RTVEsgPSAoY2hhciAqKWJvb3RzdGFja3NbY3B1
XSArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSAtIDg7CisJCWJvb3RBUCA9IGNwdTsKKworCQkv
KiBhdHRlbXB0IHRvIHN0YXJ0IHRoZSBBcHBsaWNhdGlvbiBQcm9jZXNzb3IgKi8KKwkJaWYgKCFz
dGFydF94ZW5fYXAoY3B1KSkKKwkJCXBhbmljKCJBUCAjJWQgZmFpbGVkIHRvIHN0YXJ0ISIsIGNw
dSk7CisKKwkJQ1BVX1NFVChjcHUsICZhbGxfY3B1cyk7CS8qIHJlY29yZCBBUCBpbiBDUFUgbWFw
ICovCisJfQorCisJcmV0dXJuIChtcF9uYXBzKTsKK30KKwogLyoKICAqIEZ1bmN0aW9ucyB0byBj
b252ZXJ0IHRoZSAiZXh0cmEiIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IFhlbgogICogaW50byBGcmVl
QlNEIGJvb3Qgb3B0aW9ucyAoZnJvbSB0aGUgaTM4NiBYZW4gcG9ydCkuCmRpZmYgLS1naXQgYS9z
eXMveGVuL3B2LmggYi9zeXMveGVuL3B2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDViNzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3N5cy94ZW4vcHYuaApAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2Vy
LnBhdUBjaXRyaXguY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZglfX1hF
Tl9QVl9IX18KKyNkZWZpbmUJX19YRU5fUFZfSF9fCisKK2ludAl4ZW5fcHZfc3RhcnRfYWxsX2Fw
cyh2b2lkKTsKKworI2VuZGlmCS8qIF9fWEVOX1BWX0hfXyAqLwotLSAKMS43LjcuNSAoQXBwbGUg
R2l0LTI2KQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
ZnJlZWJzZC1jdXJyZW50QGZyZWVic2Qub3JnIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuZnJl
ZWJzZC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlYnNkLWN1cnJlbnQKVG8gdW5zdWJzY3JpYmUs
IHNlbmQgYW55IG1haWwgdG8gImZyZWVic2QtY3VycmVudC11bnN1YnNjcmliZUBmcmVlYnNkLm9y
ZyI=