From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: [PATCH v1 20/20] libxl/acpi: Build ACPI tables for HVMlite guests Date: Tue, 5 Jul 2016 15:05:19 -0400 Message-ID: <1467745519-9868-21-git-send-email-boris.ostrovsky@oracle.com> References: <1467745519-9868-1-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1467745519-9868-1-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, julien.grall@arm.com, jbeulich@suse.com, zhaoshenglong@huawei.com, boris.ostrovsky@oracle.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNv bT4KLS0tCgpDaGFuZ2VzIGluIHYxOgoqIE1vdmUgdG8gbGlieGwKKiBBZGRlZCBwb3B1bGF0ZV9h Y3BpX3BhZ2VzKCkKKiBTdGFzaCBsb2NhdGlvbi9zaXplIG9mIHRhYmxlcyBpbiB4Y19kb21faW1h Z2UgKHRvIGJlIHVzZWQgaW4gY29uc3RydWN0aW5nIGU4MjAgbWFwKQoqIFVzZSBsaWJ4bCBhbGxv Y2F0b3IKKiBPbmx5IHNldCBYRU5fWDg2X0VNVV9MQVBJQyBmbGFnIGlmICdhcGljJyBvcHRpb24g aXMgc2V0LgoqIE1ha2UgYWNwaV9idWlsZF90YWJsZXMoKSByZXR1cm4gZXJyb3IgY29kZQoKIC5n aXRpZ25vcmUgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHRvb2xzL2xpYmFjcGkvYnVpbGQu YyAgICAgICAgfCAgICA3ICstCiB0b29scy9saWJhY3BpL2xpYmFjcGkuaCAgICAgIHwgICAxNSAr Ky0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgIDE3ICsrKy0KIHRvb2xzL2xpYnhs L2xpYnhsX2FyY2guaCAgICAgfCAgICAzICsKIHRvb2xzL2xpYnhsL2xpYnhsX2RvbS5jICAgICAg fCAgICAxICsKIHRvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jICAgICAgfCAgIDI5ICsrKy0tCiB0b29s cy9saWJ4bC9saWJ4bF94ODZfYWNwaS5jIHwgIDI5MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmggfCAgIDIxICsr KwogOSBmaWxlcyBjaGFuZ2VkLCAzNzMgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmgKCmRpZmYgLS1naXQgYS8uZ2l0 aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA5ZGQyMDg2Li5kNGRhMzdmIDEwMDY0NAotLS0gYS8u Z2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTE3OSw2ICsxNzksMTAgQEAgdG9vbHMvbGli eGwvdGVzdGVudW0uYwogdG9vbHMvbGlieGwvdG1wLioKIHRvb2xzL2xpYnhsL19saWJ4bC5hcGkt Zm9yLWNoZWNrCiB0b29scy9saWJ4bC8qLmFwaS1vawordG9vbHMvbGlieGwvbWtfZHNkdAordG9v bHMvbGlieGwvZHNkdCouYwordG9vbHMvbGlieGwvZHNkdF8qLmFzbAordG9vbHMvbGlieGwvc3Nk dF8qLmgKIHRvb2xzL21pc2MvY3B1cGVyZi9jcHVwZXJmLXBlcmZjbnRyCiB0b29scy9taXNjL2Nw dXBlcmYvY3B1cGVyZi14ZW4KIHRvb2xzL21pc2MveGNfc2hhZG93CmRpZmYgLS1naXQgYS90b29s cy9saWJhY3BpL2J1aWxkLmMgYi90b29scy9saWJhY3BpL2J1aWxkLmMKaW5kZXggMjkwZjAwNS4u YTZkZGY1MyAxMDA2NDQKLS0tIGEvdG9vbHMvbGliYWNwaS9idWlsZC5jCisrKyBiL3Rvb2xzL2xp YmFjcGkvYnVpbGQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInNzZHRfdHBtLmgiCiAj aW5jbHVkZSAic3NkdF9wbS5oIgogI2luY2x1ZGUgIng4Ni5oIgorI2luY2x1ZGUgPHhlbi9odm0v aHZtX2luZm9fdGFibGUuaD4KICNpbmNsdWRlIDx4ZW4vaHZtL2h2bV94c19zdHJpbmdzLmg+CiAj aW5jbHVkZSA8eGVuL2h2bS9wYXJhbXMuaD4KIApAQCAtNDczLDcgKzQ3NCw3IEBAIHN0YXRpYyBp bnQgbmV3X3ZtX2dpZChzdHJ1Y3QgYWNwaV9jdHh0ICpjdHh0LAogICAgIHJldHVybiAxOwogfQog Ci12b2lkIGFjcGlfYnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBh Y3BpX2NvbmZpZyAqY29uZmlnKQoraW50IGFjcGlfYnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0 eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnKQogewogICAgIHN0cnVjdCBhY3Bp XzIwX3JzZHAgKnJzZHA7CiAgICAgc3RydWN0IGFjcGlfMjBfcnNkdCAqcnNkdDsKQEAgLTU5NCwx MSArNTk1LDExIEBAIHZvaWQgYWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4 dCwgc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpCiAKICAgICAqKHN0cnVjdCBhY3BpX2luZm8g Kiljb25maWctPmFpbmZvcCA9IGNvbmZpZy0+YWluZm87CiAKLSAgICByZXR1cm47CisgICAgcmV0 dXJuIDA7CiAKIG9vbToKICAgICBwcmludGYoInVuYWJsZSB0byBidWlsZCBBQ1BJIHRhYmxlczog b3V0IG9mIG1lbW9yeVxuIik7Ci0KKyAgICByZXR1cm4gLTE7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS90b29scy9saWJhY3BpL2xpYmFjcGkuaCBiL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCmluZGV4 IDg3YTI5MzcuLjc5MWViYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCisr KyBiL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCkBAIC02OSw2ICs2OSwxNSBAQCBzdHJ1Y3QgYWNw aV9jdHh0IHsKICAgICAgICAgdm9pZCAqKCphbGxvYykoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwg dWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pOwogICAgICAgICB1bnNpZ25lZCBsb25nICgq djJwKShzdHJ1Y3QgYWNwaV9jdHh0ICpjdHh0LCB2b2lkICp2KTsKICAgICB9IG1lbV9vcHM7CisK KyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaXplOworICAgIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0 OworCisgICAgLyogTWVtb3J5IGFsbG9jYXRvciAqLworICAgIHVuc2lnbmVkIGxvbmcgYWxsb2Nf YmFzZV9wYWRkcjsKKyAgICB1bnNpZ25lZCBsb25nIGFsbG9jX2Jhc2VfdmFkZHI7CisgICAgdW5z aWduZWQgbG9uZyBhbGxvY19jdXJycDsKKyAgICB1bnNpZ25lZCBsb25nIGFsbG9jX2VuZDsKIH07 CiAKIHN0cnVjdCBhY3BpX2NvbmZpZyB7CkBAIC05OCwxMyArMTA3LDEzIEBAIHN0cnVjdCBhY3Bp X2NvbmZpZyB7CiAgICAgICogVGhpcyBtdXN0IG1hdGNoIHRoZSBPcGVyYXRpb25SZWdpb24oQklP UywgU3lzdGVtTWVtb3J5LCAuLi4uKQogICAgICAqIGRlZmluaXRpb24gaW4gdGhlIERTRFQKICAg ICAgKi8KLSAgICB1bnNpZ25lZCBpbnQgYWluZm9wOworICAgIHVuc2lnbmVkIGxvbmcgYWluZm9w OwogCiAgICAgLyogUlNEUCBhZGRyZXNzICovCi0gICAgdW5zaWduZWQgaW50IHJzZHA7CisgICAg dW5zaWduZWQgbG9uZyByc2RwOwogfTsKIAotdm9pZCBhY3BpX2J1aWxkX3RhYmxlcyhzdHJ1Y3Qg YWNwaV9jdHh0ICpjdHh0LCBzdHJ1Y3QgYWNwaV9jb25maWcgKmNvbmZpZyk7CitpbnQgYWNwaV9i dWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgc3RydWN0IGFjcGlfY29uZmlnICpj b25maWcpOwogCiAjZW5kaWYgLyogX19MSUJBQ1BJX0hfXyAqLwogCmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCmluZGV4IDNhMmQ2NGEuLjE4 YmUyZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhs L01ha2VmaWxlCkBAIC03NSw3ICs3NSwyMCBAQCBlbHNlCiBMSUJYTF9PQkpTLXkgKz0gbGlieGxf bm9fY29sby5vCiBlbmRpZgogCi1MSUJYTF9PQkpTLSQoQ09ORklHX1g4NikgKz0gbGlieGxfY3B1 aWQubyBsaWJ4bF94ODYubyBsaWJ4bF9wc3IubworQUNQSV9QQVRIICA9ICQoWEVOX1JPT1QpL3Rv b2xzL2xpYmFjcGkKK0FDUElfRklMRVMgPSBkc2R0X3B2aC5jIGJ1aWxkLmMgc3RhdGljX3RhYmxl cy5jCitBQ1BJX09CSlMgID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoQUNQSV9GSUxFUykpCiskKEFD UElfRklMRVMpOiBhY3BpCiskKEFDUElfT0JKUyk6IENGTEFHUyArPSAtSS4gLURTVERVVElMUz1c IiQoQ1VSRElSKS9saWJ4bF94ODZfYWNwaS5oXCIKK3ZwYXRoIGJ1aWxkLmMgJChBQ1BJX1BBVEgp LwordnBhdGggc3RhdGljX3RhYmxlcy5jICQoQUNQSV9QQVRIKS8KK0xJQlhMX09CSlMtJChDT05G SUdfWDg2KSArPSAkKEFDUElfT0JKUykKKworLlBIT05ZOiBhY3BpCithY3BpOgorCSQoTUFLRSkg LUMgJChBQ1BJX1BBVEgpIEFDUElfQlVJTERfRElSPSQoc2hlbGwgcHdkKQorCitMSUJYTF9PQkpT LSQoQ09ORklHX1g4NikgKz0gbGlieGxfY3B1aWQubyBsaWJ4bF94ODYubyBsaWJ4bF9wc3IubyBs aWJ4bF94ODZfYWNwaS5vCiBMSUJYTF9PQkpTLSQoQ09ORklHX0FSTSkgKz0gbGlieGxfbm9jcHVp ZC5vIGxpYnhsX2FybS5vIGxpYnhsX2xpYmZkdF9jb21wYXQubwogCiBpZmVxICgkKENPTkZJR19O ZXRCU0QpLHkpCkBAIC0xNjYsNiArMTc5LDcgQEAgJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZM QUdTX1hMKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9IC1pbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xz L2NvbmZpZy5oICMgbGlieGxfanNvbi5oIG5lZWRzIGl0LgogCiBsaWJ4bF9kb20ubzogQ0ZMQUdT ICs9IC1JJChYRU5fUk9PVCkvdG9vbHMgICMgaW5jbHVkZSBsaWJhY3BpL3g4Ni5oCitsaWJ4bF94 ODZfYWNwaS5vOiBDRkxBR1MgKz0gLUkkKFhFTl9ST09UKS90b29scwogCiBTQVZFX0hFTFBFUl9P QkpTID0gbGlieGxfc2F2ZV9oZWxwZXIubyBfbGlieGxfc2F2ZV9tc2dzX2hlbHBlci5vCiAkKFNB VkVfSEVMUEVSX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuY3RybCkgJChDRkxBR1Nf bGlieGVuZXZ0Y2huKQpAQCAtMzA4LDYgKzMyMiw3IEBAIGNsZWFuOgogCSQoUk0pIC1mIHRlc3Rp ZGwuYy5uZXcgdGVzdGlkbC5jICouYXBpLW9rCiAJJChSTSkgLWYgeGVubGlnaHQucGMKIAkkKFJN KSAtZiB4bHV0aWwucGMKKwkkKE1BS0UpIC1DICQoQUNQSV9QQVRIKSBBQ1BJX0JVSUxEX0RJUj0k KHNoZWxsIHB3ZCkgY2xlYW4KIAogZGlzdGNsZWFuOiBjbGVhbgogCSQoUk0pIC1mIHhlbmxpZ2h0 LnBjLmluIHhsdXRpbC5wYy5pbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5o IGIvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCmluZGV4IDM0YTg1M2MuLjdjNjUzNmIgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9h cmNoLmgKQEAgLTYyLDQgKzYyLDcgQEAgaW50IGxpYnhsX19hcmNoX2RvbWFpbl9jb25zdHJ1Y3Rf bWVtbWFwKGxpYnhsX19nYyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKTsKIAoraW50IGxpYnhsX19kb21fbG9hZF9h Y3BpKGxpYnhsX19nYyAqZ2MsCisJCQkgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmluZm8sCisJ CQkgc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvbGlieGxfZG9tLmMgYi90b29scy9saWJ4bC9saWJ4bF9kb20uYwppbmRleCBiYTM0NzJl Li43ZTRlMjg5IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9kb20uYworKysgYi90b29s cy9saWJ4bC9saWJ4bF9kb20uYwpAQCAtNjU3LDYgKzY1Nyw3IEBAIHN0YXRpYyBpbnQgbGlieGxf X2J1aWxkX2RvbShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgTE9HRShF UlJPUiwgInhjX2RvbV9idWlsZF9pbWFnZSBmYWlsZWQiKTsKICAgICAgICAgZ290byBvdXQ7CiAg ICAgfQorCiAgICAgaWYgKCAocmV0ID0geGNfZG9tX2Jvb3RfaW1hZ2UoZG9tKSkgIT0gMCApIHsK ICAgICAgICAgTE9HRShFUlJPUiwgInhjX2RvbV9ib290X2ltYWdlIGZhaWxlZCIpOwogICAgICAg ICBnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMv bGlieGwvbGlieGxfeDg2LmMKaW5kZXggMzJjZTFkMi4uNzIwMWRiYiAxMDA2NDQKLS0tIGEvdG9v bHMvbGlieGwvbGlieGxfeDg2LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKQEAgLTgs MTUgKzgsMTggQEAgaW50IGxpYnhsX19hcmNoX2RvbWFpbl9wcmVwYXJlX2NvbmZpZyhsaWJ4bF9f Z2MgKmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19kb21haW5f Y29uZmlndXJhdGlvbl90ICp4Y19jb25maWcpCiB7CiAKLSAgICBpZiAoZF9jb25maWctPmNfaW5m by50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSAmJgotICAgICAgICBkX2NvbmZpZy0+Yl9p bmZvLmRldmljZV9tb2RlbF92ZXJzaW9uICE9Ci0gICAgICAgIExJQlhMX0RFVklDRV9NT0RFTF9W RVJTSU9OX05PTkUpIHsKLSAgICAgICAgLyogSFZNIGRvbWFpbnMgd2l0aCBhIGRldmljZSBtb2Rl bC4gKi8KLSAgICAgICAgeGNfY29uZmlnLT5lbXVsYXRpb25fZmxhZ3MgPSBYRU5fWDg2X0VNVV9B TEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogUFYgb3IgSFZNIGRvbWFpbnMgd2l0aG91dCBh IGRldmljZSBtb2RlbC4gKi8KKyAgICBpZiAoZF9jb25maWctPmNfaW5mby50eXBlID09IExJQlhM X0RPTUFJTl9UWVBFX0hWTSkgeworICAgICAgICBpZiAoZF9jb25maWctPmJfaW5mby5kZXZpY2Vf bW9kZWxfdmVyc2lvbiAhPQorICAgICAgICAgICAgTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05f Tk9ORSkKKyAgICAgICAgICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9uX2ZsYWdzID0gWEVOX1g4Nl9F TVVfQUxMOworICAgICAgICBlbHNlIGlmIChsaWJ4bF9kZWZib29sX3ZhbChkX2NvbmZpZy0+Yl9p bmZvLnUuaHZtLmFwaWMpKQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEhWTSBndWVz dHMgd2l0aG91dCBkZXZpY2UgbW9kZWwgbWF5IHdhbnQKKyAgICAgICAgICAgICAqIHRvIGhhdmUg TEFQSUMgZW11bGF0aW9uLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB4Y19jb25maWct PmVtdWxhdGlvbl9mbGFncyA9IFhFTl9YODZfRU1VX0xBUElDOworICAgIH0gZWxzZSAKICAgICAg ICAgeGNfY29uZmlnLT5lbXVsYXRpb25fZmxhZ3MgPSAwOwotICAgIH0KIAogICAgIHJldHVybiAw OwogfQpAQCAtMzY2LDcgKzM2OSwxNSBAQCBpbnQgbGlieGxfX2FyY2hfZG9tYWluX2ZpbmFsaXNl X2h3X2Rlc2NyaXB0aW9uKGxpYnhsX19nYyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICppbmZvLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9t X2ltYWdlICpkb20pCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBp ZiAoKGluZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSAmJgorICAgICAgICAoaW5m by0+ZGV2aWNlX21vZGVsX3ZlcnNpb24gPT0gTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9O RSkpIHsKKyAgICAgICAgaWYgKCAocmV0ID0gbGlieGxfX2RvbV9sb2FkX2FjcGkoZ2MsIGluZm8s IGRvbSkpICE9IDAgKQorICAgICAgICAgICAgTE9HRShFUlJPUiwgImxpYnhsX2RvbV9sb2FkX2Fj cGkgZmFpbGVkIik7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKIH0KIAogLyogUmV0dXJuIDAg b24gc3VjY2VzcywgRVJST1JfKiBvbiBmYWlsdXJlLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfeDg2X2FjcGkuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0ZjA2MwotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyAqIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK KyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNs ZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lu Y2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGlieGxfYXJjaC5oIgorI2luY2x1 ZGUgPHhlbi9odm0vaHZtX2luZm9fdGFibGUuaD4KKyNpbmNsdWRlIDx4ZW4vaHZtL2U4MjAuaD4K KyNpbmNsdWRlICJsaWJhY3BpL2xpYmFjcGkuaCIKKworI2luY2x1ZGUgPHhjX2RvbS5oPgorCisj ZGVmaW5lIE5VTV9BQ1BJX1BBR0VTIDE2IC8qIE51bWJlciBvZiBwYWdlcyBob2xkaW5nIEFDUEkg dGFibGVzICovCisjZGVmaW5lIFJTRFBfQUREUkVTUyAoMHhmZmZmZnVsIC0gNjQpIC8qIExhc3Qg ZG91Ymxld29yZCBvZiBCSU9TIFJPIG1lbW9yeSAqLworI2RlZmluZSBBQ1BJX0lORk9fUEhZU0lD QUxfQUREUkVTUyAweGZjMDAwMDAwCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGRzZHRf cHZoW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGRzZHRfcHZoX2xlbjsKKworLyogQXNz dW1lcyBjb250aWd1b3VzIHBoeXNpY2FsIHNwYWNlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2 aXJ0X3RvX3BoeXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgdm9pZCAqdikKK3sKKyAgICByZXR1 cm4gKCgodW5zaWduZWQgbG9uZyl2IC0gY3R4dC0+YWxsb2NfYmFzZV92YWRkcikgKworICAgICAg ICAgICAgY3R4dC0+YWxsb2NfYmFzZV9wYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkICptZW1fYWxs b2Moc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24p Cit7CisgICAgdW5zaWduZWQgbG9uZyBzLCBlOworCisgICAgLyogQWxpZ24gdG8gYXQgbGVhc3Qg MTYgYnl0ZXMuICovCisgICAgaWYgKGFsaWduIDwgMTYpCisgICAgICAgIGFsaWduID0gMTY7CisK KyAgICBzID0gKGN0eHQtPmFsbG9jX2N1cnJwICsgYWxpZ24pICYgfigodW5zaWduZWQgbG9uZylh bGlnbiAtIDEpOworICAgIGUgPSBzICsgc2l6ZSAtIDE7CisKKyAgICAvKiBUT0RPOiBSZWFsbG9j YXRlIG1lbW9yeSAqLworICAgIGlmICgoZSA8IHMpIHx8IChlID49IGN0eHQtPmFsbG9jX2VuZCkp IHJldHVybiBOVUxMOworCisgICAgd2hpbGUgKGN0eHQtPmFsbG9jX2N1cnJwID4+IGN0eHQtPnBh Z2Vfc2hpZnQgIT0gCisgICAgICAgICAgIGUgPj4gY3R4dC0+cGFnZV9zaGlmdCkKKyAgICAgICAg Y3R4dC0+YWxsb2NfY3VycnAgKz0gY3R4dC0+cGFnZV9zaXplOworCisgICAgY3R4dC0+YWxsb2Nf Y3VycnAgPSBlOworCisgICAgcmV0dXJuICh2b2lkICopczsKK30KKworc3RhdGljIGludCBpbml0 X2FjcGlfY29uZmlnKGxpYnhsX19nYyAqZ2MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnKQoreworICAgIHhjX2ludGVyZmFjZSAqeGNo ID0gZG9tLT54Y2g7CisgICAgdWludDMyX3QgZG9taWQgPSBkb20tPmd1ZXN0X2RvbWlkOworICAg IHhjX2RvbWluZm9fdCBpbmZvOworICAgIGludCBpLCByYzsKKworICAgIGNvbmZpZy0+ZHNkdF9h bnljcHUgPSBjb25maWctPmRzZHRfMTVjcHUgPSBkc2R0X3B2aDsKKyAgICBjb25maWctPmRzZHRf YW55Y3B1X2xlbiA9IGNvbmZpZy0+ZHNkdF8xNWNwdV9sZW4gPSBkc2R0X3B2aF9sZW47CisKKyAg ICByYyA9IHhjX2RvbWFpbl9nZXRpbmZvKHhjaCwgZG9taWQsIDEsICZpbmZvKTsKKyAgICBpZiAo cmMgPCAwKSB7CisgICAgICAgIExPRyhFUlJPUiwgIiVzOiBnZXRkb21haW5pbmZvIGZhaWxlZCAo cmM9JWQpIiwgX19GVU5DVElPTl9fLCByYyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisK KyAgICBjb25maWctPmh2bWluZm8gPSBsaWJ4bF9femFsbG9jKGdjLCBzaXplb2YoKmNvbmZpZy0+ aHZtaW5mbykpOworCisgICAgY29uZmlnLT5odm1pbmZvLT5hcGljX21vZGUgPSBsaWJ4bF9kZWZi b29sX3ZhbChiX2luZm8tPnUuaHZtLmFwaWMpOworCisgICAgaWYgKGRvbS0+bnJfdm5vZGVzKSB7 CisgICAgICAgIHN0cnVjdCBhY3BpX251bWEgKm51bWEgPSAmY29uZmlnLT5udW1hOworCisgICAg ICAgIHJjID0geGNfZG9tYWluX2dldHZudW1hKHhjaCwgZG9taWQsICZudW1hLT5ucl92bm9kZXMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1hLT5ucl92bWVtcmFuZ2VzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnLT5odm1pbmZvLT5ucl92Y3B1 cywgTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1Is ICIlczogeGNfZG9tYWluX2dldHZudW1hIGZhaWxlZCAocmM9JWQpIiwKKyAgICAgICAgICAgICAg ICBfX0ZVTkNUSU9OX18sIHJjKTsKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQor CisgICAgICAgIG51bWEtPnZtZW1yYW5nZSA9IGxpYnhsX196YWxsb2MoZ2MsIGRvbS0+bnJfdm1l bXJhbmdlcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KCpudW1hLT52bWVtcmFuZ2UpKTsKKyAgICAgICAgbnVtYS0+dmRpc3RhbmNlID0gbGlieGxfX3ph bGxvYyhnYywgZG9tLT5ucl92bm9kZXMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YoKm51bWEtPnZkaXN0YW5jZSkpOworICAgICAgICBudW1hLT52Y3B1 X3RvX3Zub2RlID0gbGlieGxfX3phbGxvYyhnYywgY29uZmlnLT5odm1pbmZvLT5ucl92Y3B1cyAq CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKm51 bWEtPnZjcHVfdG9fdm5vZGUpKTsKKyAgICAgICAgcmMgPSB4Y19kb21haW5fZ2V0dm51bWEoeGNo LCBkb21pZCwgJm51bWEtPm5yX3Zub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm51bWEtPm5yX3ZtZW1yYW5nZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjb25maWctPmh2bWluZm8tPm5yX3ZjcHVzLCBudW1hLT52bWVtcmFuZ2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bWEtPnZkaXN0YW5jZSwgbnVtYS0+dmNwdV90b192bm9k ZSk7CisJaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICIlczogeGNfZG9tYWluX2dl dHZudW1hIGZhaWxlZCAocmM9JWQpIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHJj KTsKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg ICAgICAgIGNvbmZpZy0+aHZtaW5mby0+bnJfdmNwdXMgPSBpbmZvLm1heF92Y3B1X2lkICsgMTsK KworICAgIGZvciAoaT0wOyBpPGNvbmZpZy0+aHZtaW5mby0+bnJfdmNwdXM7IGkrKykKKyAgICAg ICAgY29uZmlnLT5odm1pbmZvLT52Y3B1X29ubGluZVtpIC8gOF0gfD0gMSA8PCAoaSAmIDcpOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfYWNwaV9wYWdlcyhzdHJ1 Y3QgeGNfZG9tX2ltYWdlICpkb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVu X3Bmbl90ICpleHRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBudW1fcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFj cGlfY3R4dCAqY3R4dCkKK3sKKyAgICBpbnQgcmM7CisgICAgeGNfaW50ZXJmYWNlICp4Y2ggPSBk b20tPnhjaDsKKyAgICB1aW50MzJfdCBkb21pZCA9IGRvbS0+Z3Vlc3RfZG9taWQ7CisgICAgdW5z aWduZWQgbG9uZyBpZHgsIGZpcnN0X2hpZ2hfaWR4ID0gKDF1bGwgPDwgKDMyIC0gY3R4dC0+cGFn ZV9zaGlmdCkpOworCisgICAgZm9yICg7IG51bV9wYWdlczsgbnVtX3BhZ2VzLS0sIGV4dGVudHMr KykgeworCisgICAgICAgIGlmICh4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcCh4Y2gsIGRvbWlk LCAxLCAwLCAwLCBleHRlbnRzKSA9PSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgaWYgKGRvbS0+aGlnaG1lbV9lbmQpIHsKKyAgICAgICAgICAgIGlkeCA9IC0tZG9tLT5oaWdo bWVtX2VuZDsKKyAgICAgICAgICAgIGlmICggaWR4ID09IGZpcnN0X2hpZ2hfaWR4ICkKKyAgICAg ICAgICAgICAgICBkb20tPmhpZ2htZW1fZW5kID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAgICBpZHggPSAtLWRvbS0+bG93bWVtX2VuZDsKKworICAgICAgICByYyA9IHhjX2RvbWFpbl9h ZGRfdG9fcGh5c21hcCh4Y2gsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYRU5NQVBTUEFDRV9nbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZHgsICpleHRlbnRzKTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgbGlieGxfX2RvbV9sb2Fk X2FjcGkobGlieGxfX2djICpnYywKKwkJCSBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqaW5mbywK KwkJCSBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCit7CisgICAgc3RydWN0IGFjcGlfY29uZmln IGNvbmZpZyA9IHswfTsKKyAgICBzdHJ1Y3QgYWNwaV9jdHh0IGN0eHQ7CisgICAgdWludDMyX3Qg ZG9taWQgPSBkb20tPmd1ZXN0X2RvbWlkOworICAgIHhjX2ludGVyZmFjZSAqeGNoID0gZG9tLT54 Y2g7CisgICAgaW50IHJjLCBpLCBhY3BpX3BhZ2VzX251bTsKKyAgICB4ZW5fcGZuX3QgZXh0ZW50 LCAqZXh0ZW50czsKKyAgICB2b2lkICphY3BpX3BhZ2VzLCAqZ3Vlc3RfYWNwaV9wYWdlcyA9IE5V TEw7CisgICAgdW5zaWduZWQgbG9uZyBwYWdlX21hc2s7CisKKyAgICBpZiAoKGluZm8tPnR5cGUg IT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSB8fAorICAgICAgICAoaW5mby0+ZGV2aWNlX21vZGVs X3ZlcnNpb24gIT0gTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9ORSkpCisgICAgICAgIHJl dHVybiAwOworCisgICAgY3R4dC5wYWdlX3NpemUgPSBYQ19ET01fUEFHRV9TSVpFKGRvbSk7Cisg ICAgY3R4dC5wYWdlX3NoaWZ0ID0gWENfRE9NX1BBR0VfU0hJRlQoZG9tKTsKKyAgICBwYWdlX21h c2sgPSAoMVVMIDw8IGN0eHQucGFnZV9zaGlmdCkgLSAxOworCisgICAgY3R4dC5tZW1fb3BzLmFs bG9jID0gbWVtX2FsbG9jOworICAgIGN0eHQubWVtX29wcy52MnAgPSB2aXJ0X3RvX3BoeXM7CisK KyAgICByYyA9IGluaXRfYWNwaV9jb25maWcoZ2MsIGRvbSwgaW5mbywgJmNvbmZpZyk7CisgICAg aWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJPUiwgIiVzOiBpbml0X2FjcGlfY29uZmlnIGZhaWxl ZCAocmM9JWQpIiwgX19GVU5DVElPTl9fLCByYyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9 CisKKyAgICAvKiBNYXAgcGFnZSB0aGF0IHdpbGwgaG9sZCBSU0RQICovCisgICAgZXh0ZW50ID0g UlNEUF9BRERSRVNTID4+IGN0eHQucGFnZV9zaGlmdDsKKyAgICByYyA9IHBvcHVsYXRlX2FjcGlf cGFnZXMoZG9tLCAmZXh0ZW50LCAxLCAmY3R4dCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIExP RyhFUlJPUiwgIiVzOiBwb3B1bGF0ZV9hY3BpX3BhZ2VzIGZvciByc2RwIGZhaWxlZCB3aXRoICVk IiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMpOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisgICAgY29uZmlnLnJzZHAgPSAodW5zaWduZWQgbG9uZyl4Y19tYXBfZm9yZWlnbl9yYW5n ZSh4Y2gsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3R4dC5wYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNEUF9BRERS RVNTID4+IGN0eHQucGFnZV9zaGlmdCk7CisgICAgaWYgKCFjb25maWcucnNkcCkgeworICAgICAg ICBMT0coRVJST1IsICIlczogQ2FuJ3QgbWFwIGFjcGlfcGh5c2ljYWwiLCBfX0ZVTkNUSU9OX18p OworICAgICAgICByYyA9IC0xOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBN YXAgYWNwaV9pbmZvIHBhZ2UgKi8KKyAgICBleHRlbnQgPSBBQ1BJX0lORk9fUEhZU0lDQUxfQURE UkVTUyA+PiBjdHh0LnBhZ2Vfc2hpZnQ7CisgICAgcmMgPSBwb3B1bGF0ZV9hY3BpX3BhZ2VzKGRv bSwgJmV4dGVudCwgMSwgJmN0eHQpOworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1Is ICIlczogcG9wdWxhdGVfYWNwaV9wYWdlcyBmb3IgYWNwaV9pbmZvIGZhaWxlZCB3aXRoICVkIiwK KyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICBjb25maWcuYWluZm9wID0gKHVuc2lnbmVkIGxvbmcpeGNfbWFwX2ZvcmVpZ25fcmFu Z2UoeGNoLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3R4dC5wYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD UElfSU5GT19QSFlTSUNBTF9BRERSRVNTID4+IGN0eHQucGFnZV9zaGlmdCk7CisgICAgaWYgKCFj b25maWcuYWluZm9wKSB7CisgICAgICAgIExPRyhFUlJPUiwgIiVzOiBDYW4ndCBtYXAgYWNwaV9p bmZvX3BhZ2UiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByYyA9IC0xOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICAvKiBQYWdlcyB0byBob2xkIEFDUEkgdGFibGVzICovCisgICAg YWNwaV9wYWdlcyA9ICBsaWJ4bF9fbWFsbG9jKGdjLCAoTlVNX0FDUElfUEFHRVMgKyAxKSAqIGN0 eHQucGFnZV9zaXplKTsKKyAgICB3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYWNwaV9wYWdlcyAmIHBh Z2VfbWFzaykKKyAgICAgICAgYWNwaV9wYWdlcysrOworCisgICAgLyoKKyAgICAgKiBTZXQgdXAg YWxsb2NhdG9yIG1lbW9yeS4KKyAgICAgKiBTdGFydCBuZXh0IHRvIGFjcGlfaW5mbyBwYWdlIHRv IGF2b2lkIGZyYWN0dXJpbmcgZTgyMC4KKyAgICAgKi8KKyAgICBjdHh0LmFsbG9jX2Jhc2VfcGFk ZHIgPSBBQ1BJX0lORk9fUEhZU0lDQUxfQUREUkVTUyArIGN0eHQucGFnZV9zaXplOworICAgIGN0 eHQuYWxsb2NfYmFzZV92YWRkciA9IGN0eHQuYWxsb2NfY3VycnAgPSAodW5zaWduZWQgbG9uZylh Y3BpX3BhZ2VzOworICAgIGN0eHQuYWxsb2NfZW5kID0gKHVuc2lnbmVkIGxvbmcpYWNwaV9wYWdl cyArCisgICAgICAgIChOVU1fQUNQSV9QQUdFUyAqIGN0eHQucGFnZV9zaXplKTsKKworICAgIC8q IEJ1aWxkIHRoZSB0YWJsZXMgKi8KKyAgICByYyA9IGFjcGlfYnVpbGRfdGFibGVzKCZjdHh0LCAm Y29uZmlnKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiJXM6IGFjcGlfYnVp bGRfdGFibGVzIGZhaWxlZCB3aXRoICVkIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMp OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBDb3B5IEFDUEkgdGFibGVzIGlu dG8gZ3Vlc3QncyBtZW1vcnkgKi8KKyAgICBhY3BpX3BhZ2VzX251bSA9CisgICAgICAgICgoY3R4 dC5hbGxvY19jdXJycCAtICh1bnNpZ25lZCBsb25nKWFjcGlfcGFnZXMpID4+IGN0eHQucGFnZV9z aGlmdCkgKworICAgICAgICAoKGN0eHQuYWxsb2NfY3VycnAgJiBwYWdlX21hc2spID8gMSA6IDAp OworICAgIGV4dGVudHMgPSBsaWJ4bF9fbWFsbG9jKGdjLCBhY3BpX3BhZ2VzX251bSAqIHNpemVv ZigqZXh0ZW50cykpOworICAgIGZvciAoaSA9IDA7IGkgPCBhY3BpX3BhZ2VzX251bTsgaSsrKQor ICAgICAgICBleHRlbnRzW2ldID0gKGN0eHQuYWxsb2NfYmFzZV9wYWRkciA+PiBjdHh0LnBhZ2Vf c2hpZnQpICsgaTsKKyAgICByYyA9IHBvcHVsYXRlX2FjcGlfcGFnZXMoZG9tLCBleHRlbnRzLCBh Y3BpX3BhZ2VzX251bSwgJmN0eHQpOworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1Is ICIlczogcG9wdWxhdGVfYWNwaV9wYWdlcyBmb3IgQVBDSSB0YWJsZXMgZmFpbGVkIHdpdGggJWQi LAorICAgICAgICAgICAgX19GVU5DVElPTl9fLCByYyk7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKyAgICBndWVzdF9hY3BpX3BhZ2VzID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoeGNoLCBkb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC5wYWdl X3NpemUgKiBhY3BpX3BhZ2VzX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4dC5hbGxvY19iYXNlX3BhZGRyID4+IGN0eHQucGFn ZV9zaGlmdCk7CisgICAgaWYgKCFndWVzdF9hY3BpX3BhZ2VzKSB7CisgICAgICAgIExPRyhFUlJP UiwgIiVzIENhbid0IG1hcCBndWVzdF9hY3BpX3BhZ2VzIiwgX19GVU5DVElPTl9fKTsKKyAgICAg ICAgcmMgPSAtMTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbWVtY3B5KGd1ZXN0 X2FjcGlfcGFnZXMsIGFjcGlfcGFnZXMsIGFjcGlfcGFnZXNfbnVtICogY3R4dC5wYWdlX3NpemUp OworCisgICAgZG9tLT5hY3BpX3BmbiA9IEFDUElfSU5GT19QSFlTSUNBTF9BRERSRVNTID4+IGN0 eHQucGFnZV9zaGlmdDsKKyAgICBkb20tPmFjcGlfcGFnZXMgPSAgYWNwaV9wYWdlc19udW0gKyAx OworCitvdXQ6CisgICAgbXVubWFwKGd1ZXN0X2FjcGlfcGFnZXMsIGFjcGlfcGFnZXNfbnVtICog Y3R4dC5wYWdlX3NpemUpOworICAgIG11bm1hcCgodm9pZCAqKWNvbmZpZy5haW5mb3AsIGN0eHQu cGFnZV9zaXplKTsKKyAgICBtdW5tYXAoKHZvaWQgKiljb25maWcucnNkcCwgY3R4dC5wYWdlX3Np emUpOworCisgICAgcmV0dXJuIHJjOworCit9CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICog bW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5oIGIv dG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xODk5ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2 X2FjcGkuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIExJQlhMX1g4Nl9BQ1BJX0gKKyNkZWZp bmUgTElCWExfWDg2X0FDUElfSAorCisjaW5jbHVkZSAibGlieGxfaW50ZXJuYWwuaCIKKworI2Rl ZmluZSBBU1NFUlQoeCkgYXNzZXJ0KHgpCisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYml0KHVu c2lnbmVkIGludCBiLCB2b2lkICpwKQoreworICAgIHJldHVybiAhISgoKHVpbnQ4X3QgKilwKVti Pj4zXSAmICgxdTw8KGImNykpKTsKK30KKworI2VuZGlmIC8qIExJQlhMX1hfODZfQUNQSV9IICov CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNl dDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjEuNy4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==