From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [RFC PATCH 07/11] drm/i915: Expose PMU for Observation Architecture Date: Thu, 7 May 2015 15:15:50 +0100 Message-ID: <1431008154-6833-8-git-send-email-robert@sixbynine.org> References: <1431008154-6833-1-git-send-email-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1431008154-6833-1-git-send-email-robert@sixbynine.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra , David Airlie , linux-api@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ingo Molnar , Paul Mackerras , Arnaldo Carvalho de Melo , Daniel Vetter List-Id: linux-api@vger.kernel.org R2VuIGdyYXBoaWNzIGhhcmR3YXJlIGNhbiBiZSBzZXQgdXAgdG8gcGVyaW9kaWNhbGx5IHdyaXRl IHNuYXBzaG90cyBvZgpwZXJmb3JtYW5jZSBjb3VudGVycyBpbnRvIGEgY2lyY3VsYXIgYnVmZmVy IGFuZCB0aGlzIHBhdGNoIGV4cG9zZXMgdGhhdApjYXBhYmlsaXR5IHRvIHVzZXJzcGFjZSB2aWEg dGhlIHBlcmYgaW50ZXJmYWNlLgoKVG8gc3RhcnQgd2l0aCB0aGlzIG9ubHkgZW5hYmxlcyB0aGUg QSAoYWdncmVnYXRpbmcpIGNvdW50ZXJzIHdpdGggdGhlCnNpbXBsZXN0IGNvbmZpZ3VyYXRpb24g cmVxdWlyZW1lbnRzLgoKT25seSBIYXN3ZWxsIGlzIHN1cHBvcnRlZCBjdXJyZW50bHkuCgpTaWdu ZWQtb2ZmLWJ5OiBSb2JlcnQgQnJhZ2cgPHJvYmVydEBzaXhieW5pbmUub3JnPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RtYS5jICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgICAgIHwgIDUzICsrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fY29udGV4dC5jIHwgIDQ1ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29hX3BlcmYu YyAgICAgfCA3NTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICB8ICA2OCArKysKIGluY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaCAgICAgICAgICAgICB8ICAyOSArKwogNyBmaWxlcyBjaGFuZ2VkLCA5NDIgaW5z ZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9vYV9wZXJmLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGE2OTAw MmUuLjhhZjlmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIGk5MTUt eSA6PSBpOTE1X2Rydi5vIFwKIAogaTkxNS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2Mz Mi5vCiBpOTE1LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMubworaTkxNS0kKENP TkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9vYV9wZXJmLm8KIAogIyBHRU0gY29kZQogaTkxNS15 ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IGU0NDEx NmYuLjFkZTY2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtODE3LDYgKzgxNywxMSBA QCBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBs b25nIGZsYWdzKQogCW11dGV4X2luaXQoJmRldl9wcml2LT5kcGlvX2xvY2spOwogCW11dGV4X2lu aXQoJmRldl9wcml2LT5tb2Rlc2V0X3Jlc3RvcmVfbG9jayk7CiAKKwkvKiBNdXN0IGF0IGxlYXN0 IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIHRyeWluZyB0byBwaW4gYW55IGNvbnRleHQKKwkgKiBvdGhl cndpc2UgaTkxNV9vYV9jb250ZXh0X3Bpbl9ub3RpZnkoKSB3aWxsIGxvY2sgYW4gdW4taW5pdGlh bGl6ZWQKKwkgKiBzcGlubG9jaywgdXBzZXR0aW5nIGxvY2tkZXAgY2hlY2tzICovCisJaTkxNV9v YV9wbXVfcmVnaXN0ZXIoZGV2KTsKKwogCWludGVsX3BtX3NldHVwKGRldik7CiAKIAlpbnRlbF9k aXNwbGF5X2NyY19pbml0KGRldik7CkBAIC0xMDYyLDYgKzEwNjcsNyBAQCBpbnQgaTkxNV9kcml2 ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCisJ aTkxNV9vYV9wbXVfdW5yZWdpc3RlcihkZXYpOwogCWludGVsX3Bvd2VyX2RvbWFpbnNfZmluaShk ZXZfcHJpdik7CiAKIAlpbnRlbF9ncHVfaXBzX3RlYXJkb3duKCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAppbmRleCBmNTAyMGE4Li4zZDhlNGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAg LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNodGFibGUuaD4KICNpbmNsdWRlIDxs aW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxs aW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CiAKIC8qIEdlbmVy YWwgY3VzdG9taXphdGlvbjoKQEAgLTE4MTYsNiArMTgxNywzNSBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSB7CiAJICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRwX3dxOwogCisjaWZk ZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJc3RydWN0IHsKKwkJc3RydWN0IHBtdSBwbXU7CisJCXNw aW5sb2NrX3QgbG9jazsKKwkJc3RydWN0IGhydGltZXIgdGltZXI7CisJCXN0cnVjdCBwdF9yZWdz IGR1bW15X3JlZ3M7CisKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV4Y2x1c2l2ZV9ldmVudDsKKwkJ c3RydWN0IGludGVsX2NvbnRleHQgKnNwZWNpZmljX2N0eDsKKwkJYm9vbCBldmVudF9hY3RpdmU7 CisKKwkJYm9vbCBwZXJpb2RpYzsKKwkJdTMyIHBlcmlvZF9leHBvbmVudDsKKworCQl1MzIgbWV0 cmljc19zZXQ7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7CisJCQl1MzIgZ3R0X29mZnNldDsKKwkJCXU4ICphZGRyOworCQkJdTMyIGhlYWQ7CisJCQl1 MzIgdGFpbDsKKwkJCWludCBmb3JtYXQ7CisJCQlpbnQgZm9ybWF0X3NpemU7CisJCQlzcGlubG9j a190IGZsdXNoX2xvY2s7CisJCX0gb2FfYnVmZmVyOworCX0gb2FfcG11OworI2VuZGlmCisKIAkv KiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVmZmVyIG9y IGV4ZWNsaXN0cykgYXdheSAqLwogCXN0cnVjdCB7CiAJCWludCAoKmV4ZWNidWZfc3VibWl0KShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCkBAIC0yOTc1LDYg KzMwMDUsMjAgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFt X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwordm9p ZCBpOTE1X29hX2NvbnRleHRfcGluX25vdGlmeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCisJCQkJc3RydWN0IGludGVsX2NvbnRleHQgKmNvbnRleHQpOwordm9pZCBpOTE1X29h X2NvbnRleHRfdW5waW5fbm90aWZ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK KwkJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCitzdGF0aWMgaW5s aW5lIHZvaWQKK2k5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKKwkJCSAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjb250ZXh0KSB7fQor c3RhdGljIGlubGluZSB2b2lkCitpOTE1X29hX2NvbnRleHRfdW5waW5fbm90aWZ5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQg KmNvbnRleHQpIHt9CisjZW5kaWYKKwogLyogaTkxNV9nZW1fZXZpY3QuYyAqLwogaW50IF9fbXVz dF9jaGVjayBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK IAkJCQkJICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKQEAgLTMwODQsNiArMzEyOCwx NSBAQCBpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCiAJ CSAgICB1MzIgYmF0Y2hfbGVuLAogCQkgICAgYm9vbCBpc19tYXN0ZXIpOwogCisvKiBpOTE1X29h X3BlcmYuYyAqLworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworZXh0ZXJuIHZvaWQgaTkxNV9v YV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpOTE1 X29hX3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworI2Vsc2UKK3N0YXRp YyBpbmxpbmUgdm9pZCBpOTE1X29hX3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KSB7fQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfb2FfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRy bV9kZXZpY2UgKmRldikge30KKyNlbmRpZgorCiAvKiBpOTE1X3N1c3BlbmQuYyAqLwogZXh0ZXJu IGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50 IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCBkZDViZmY2Li4zNjI0NDM1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC0xMzMsNiArMTMzLDMzIEBAIHN0 YXRpYyBpbnQgZ2V0X2NvbnRleHRfc2l6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJldHVy biByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaTkxNV9nZW1fY29udGV4dF9waW5fc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQor eworCWludCByZXQ7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0 ZXgpKTsKKworCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihjdHgtPmxlZ2FjeV9od19jdHgu cmNzX3N0YXRlLAorCQkJCSAgICBnZXRfY29udGV4dF9hbGlnbm1lbnQoZGV2KSwgMCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWk5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5KGRldi0+ ZGV2X3ByaXZhdGUsIGN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9n ZW1fY29udGV4dF91bnBpbl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCkKK3sKKwkvKiBFbnN1cmUgdGhhdCB3ZSBzdG9wIHRoZSBP QSB1bml0IHJlZmVyZW5jaW5nIHRoZSBjb250ZXh0ICpiZWZvcmUqCisJICogYWN0dWFsbHkgdW5w aW5uaW5nIHRoZSBjdHggKi8KKwlpOTE1X29hX2NvbnRleHRfdW5waW5fbm90aWZ5KGRldi0+ZGV2 X3ByaXZhdGUsIGN0eCk7CisKKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihjdHgtPmxlZ2Fj eV9od19jdHgucmNzX3N0YXRlKTsKK30KKwogdm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3Ry dWN0IGtyZWYgKmN0eF9yZWYpCiB7CiAJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IGNvbnRh aW5lcl9vZihjdHhfcmVmLApAQCAtMjYwLDggKzI4Nyw3IEBAIGk5MTVfZ2VtX2NyZWF0ZV9jb250 ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAqIGJlIGF2YWlsYWJsZS4gVG8gYXZvaWQg dGhpcyB3ZSBhbHdheXMgcGluIHRoZSBkZWZhdWx0CiAJCSAqIGNvbnRleHQuCiAJCSAqLwotCQly ZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4oY3R4LT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZSwK LQkJCQkJICAgIGdldF9jb250ZXh0X2FsaWdubWVudChkZXYpLCAwKTsKKwkJcmV0ID0gaTkxNV9n ZW1fY29udGV4dF9waW5fc3RhdGUoZGV2LCBjdHgpOwogCQlpZiAocmV0KSB7CiAJCQlEUk1fREVC VUdfRFJJVkVSKCJDb3VsZG4ndCBwaW4gJWRcbiIsIHJldCk7CiAJCQlnb3RvIGVycl9kZXN0cm95 OwpAQCAtMjg3LDcgKzMxMyw3IEBAIGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAKIGVycl91bnBpbjoKIAlpZiAoaXNfZ2xvYmFsX2RlZmF1bHRfY3R4ICYm IGN0eC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUpCi0JCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3Vu cGluKGN0eC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUpOworCQlpOTE1X2dlbV9jb250ZXh0X3Vu cGluX3N0YXRlKGRldiwgY3R4KTsKIGVycl9kZXN0cm95OgogCWk5MTVfZ2VtX2NvbnRleHRfdW5y ZWZlcmVuY2UoY3R4KTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwpAQCAtMzE0LDcgKzM0MCw3IEBA IHZvaWQgaTkxNV9nZW1fY29udGV4dF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJ CWlmIChsY3R4KSB7CiAJCQlpZiAobGN0eC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUgJiYgaSA9 PSBSQ1MpCi0JCQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4obGN0eC0+bGVnYWN5X2h3X2N0 eC5yY3Nfc3RhdGUpOworCQkJCWk5MTVfZ2VtX2NvbnRleHRfdW5waW5fc3RhdGUoZGV2LCBsY3R4 KTsKIAogCQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShsY3R4KTsKIAkJCXJpbmctPmxh c3RfY29udGV4dCA9IE5VTEw7CkBAIC0zODgsMTIgKzQxNCwxMiBAQCB2b2lkIGk5MTVfZ2VtX2Nv bnRleHRfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlpZiAoZGV2X3ByaXYtPnJpbmdb UkNTXS5sYXN0X2NvbnRleHQgPT0gZGN0eCkgewogCQkJLyogRmFrZSBzd2l0Y2ggdG8gTlVMTCBj b250ZXh0ICovCiAJCQlXQVJOX09OKGRjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5hY3Rp dmUpOwotCQkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oZGN0eC0+bGVnYWN5X2h3X2N0eC5y Y3Nfc3RhdGUpOworCQkJaTkxNV9nZW1fY29udGV4dF91bnBpbl9zdGF0ZShkZXYsIGRjdHgpOwog CQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShkY3R4KTsKIAkJCWRldl9wcml2LT5yaW5n W1JDU10ubGFzdF9jb250ZXh0ID0gTlVMTDsKIAkJfQogCi0JCWk5MTVfZ2VtX29iamVjdF9nZ3R0 X3VucGluKGRjdHgtPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlKTsKKwkJaTkxNV9nZW1fY29udGV4 dF91bnBpbl9zdGF0ZShkZXYsIGRjdHgpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJOTE1X05V TV9SSU5HUzsgaSsrKSB7CkBAIC02NTAsOCArNjc2LDcgQEAgc3RhdGljIGludCBkb19zd2l0Y2go c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAogCS8qIFRyeWluZyB0byBwaW4gZmlyc3Qg bWFrZXMgZXJyb3IgaGFuZGxpbmcgZWFzaWVyLiAqLwogCWlmIChyaW5nID09ICZkZXZfcHJpdi0+ cmluZ1tSQ1NdKSB7Ci0JCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3Bpbih0by0+bGVnYWN5X2h3 X2N0eC5yY3Nfc3RhdGUsCi0JCQkJCSAgICBnZXRfY29udGV4dF9hbGlnbm1lbnQocmluZy0+ZGV2 KSwgMCk7CisJCXJldCA9IGk5MTVfZ2VtX2NvbnRleHRfcGluX3N0YXRlKHJpbmctPmRldiwgdG8p OwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC03NjMsNyArNzg4LDcgQEAgc3Rh dGljIGludCBkb19zd2l0Y2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAkJCWZyb20t PmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5sYXN0X3JlYWRfcmVxKSAhPSByaW5nKTsKIAogCQkv KiBvYmogaXMga2VwdCBhbGl2ZSB1bnRpbCB0aGUgbmV4dCByZXF1ZXN0IGJ5IGl0cyBhY3RpdmUg cmVmICovCi0JCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGZyb20tPmxlZ2FjeV9od19jdHgu cmNzX3N0YXRlKTsKKwkJaTkxNV9nZW1fY29udGV4dF91bnBpbl9zdGF0ZShyaW5nLT5kZXYsIGZy b20pOwogCQlpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGZyb20pOwogCX0KIApAQCAtNzg2 LDcgKzgxMSw3IEBAIGRvbmU6CiAKIHVucGluX291dDoKIAlpZiAocmluZy0+aWQgPT0gUkNTKQot CQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbih0by0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUp OworCQlpOTE1X2dlbV9jb250ZXh0X3VucGluX3N0YXRlKHJpbmctPmRldiwgdG8pOwogCXJldHVy biByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb2FfcGVy Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vYV9wZXJmLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjZjU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfb2FfcGVyZi5jCkBAIC0wLDAgKzEsNzUwIEBACisjaW5jbHVkZSA8 bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisKKyNpbmNsdWRl ICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX3JpbmdidWZmZXIuaCIKKworLyogTXVzdCBi ZSBhIHBvd2VyIG9mIHR3byAqLworI2RlZmluZSBPQV9CVUZGRVJfU0laRQkgICAgIFNaXzE2TQor I2RlZmluZSBPQV9UQUtFTih0YWlsLCBoZWFkKSAoKHRhaWwgLSBoZWFkKSAmIChPQV9CVUZGRVJf U0laRSAtIDEpKQorCisjZGVmaW5lIEZSRVFVRU5DWSAyMDAKKyNkZWZpbmUgUEVSSU9EIG1heF90 KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkKKworc3RhdGljIGludCBoc3df cGVyZl9mb3JtYXRfc2l6ZXNbXSA9IHsKKwk2NCwgIC8qIEExM19IU1cgKi8KKwkxMjgsIC8qIEEy OV9IU1cgKi8KKwkxMjgsIC8qIEExM19COF9DOF9IU1cgKi8KKwktMSwgIC8qIERpc2FsbG93ZWQg c2luY2UgMTkyIGJ5dGVzIGRvZXNuJ3QgZmFjdG9yIGludG8gYnVmZmVyIHNpemUKKwkJKEEyOV9C OF9DOF9IU1cpICovCisJNjQsICAvKiBCNF9DOF9IU1cgKi8KKwkyNTYsIC8qIEE0NV9COF9DOF9I U1cgKi8KKwkxMjgsIC8qIEI0X0M4X0ExNl9IU1cgKi8KKwk2NCAgIC8qIEM0X0I4X0hTVyAqLwor fTsKKworc3RhdGljIHZvaWQgZm9yd2FyZF9vbmVfb2Ffc25hcHNob3RfdG9fZXZlbnQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgIHU4ICpzbmFwc2hvdCwKKwkJ CQkJICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHBlcmZfc2FtcGxl X2RhdGEgZGF0YTsKKwlpbnQgc25hcHNob3Rfc2l6ZSA9IGRldl9wcml2LT5vYV9wbXUub2FfYnVm ZmVyLmZvcm1hdF9zaXplOworCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQgcmF3OworCisJV0FSTl9P TihzbmFwc2hvdF9zaXplID09IDApOworCisJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAw LCBldmVudC0+aHcubGFzdF9wZXJpb2QpOworCisJLyogTm90ZTogdGhlIGNvbWJpbmVkIHUzMiBy YXctPnNpemUgbWVtYmVyICsgcmF3IGRhdGEgaXRzZWxmIG11c3QgYmUgOAorCSAqIGJ5dGUgYWxp Z25lZC4gKFNlZSBub3RlIGluIGluaXRfb2FfYnVmZmVyIGZvciBtb3JlIGRldGFpbHMpICovCisJ cmF3LnNpemUgPSBzbmFwc2hvdF9zaXplICsgNDsKKwlyYXcuZGF0YSA9IHNuYXBzaG90OworCisJ ZGF0YS5yYXcgPSAmcmF3OworCisJcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgJmRhdGEsICZk ZXZfcHJpdi0+b2FfcG11LmR1bW15X3JlZ3MpOworfQorCitzdGF0aWMgdTMyIGZvcndhcmRfb2Ff c25hcHNob3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQl1MzIgaGVh ZCwKKwkJCQl1MzIgdGFpbCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXhjbHVzaXZlX2V2ZW50 ID0gZGV2X3ByaXYtPm9hX3BtdS5leGNsdXNpdmVfZXZlbnQ7CisJaW50IHNuYXBzaG90X3NpemUg PSBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5mb3JtYXRfc2l6ZTsKKwl1OCAqb2FfYnVmX2Jh c2UgPSBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5hZGRyOworCXUzMiBtYXNrID0gKE9BX0JV RkZFUl9TSVpFIC0gMSk7CisJdTggKnNuYXBzaG90OworCXUzMiB0YWtlbjsKKworCWhlYWQgLT0g ZGV2X3ByaXYtPm9hX3BtdS5vYV9idWZmZXIuZ3R0X29mZnNldDsKKwl0YWlsIC09IGRldl9wcml2 LT5vYV9wbXUub2FfYnVmZmVyLmd0dF9vZmZzZXQ7CisKKwkvKiBOb3RlOiB0aGUgZ3B1IGRvZXNu J3Qgd3JhcCB0aGUgdGFpbCBhY2NvcmRpbmcgdG8gdGhlIE9BIGJ1ZmZlciBzaXplCisJICogc28g d2hlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBvdXIgaGVhZC90YWlsIHZhbHVlcyBhcmUgaW4tYm91 bmRzIHdlCisJICogdXNlIHRoZSBhYm92ZSBtYXNrLgorCSAqLworCisJd2hpbGUgKCh0YWtlbiA9 IE9BX1RBS0VOKHRhaWwsIGhlYWQpKSkgeworCQkvKiBUaGUgdGFpbCBpbmNyZWFzZXMgaW4gNjQg Ynl0ZSBpbmNyZW1lbnRzLCBub3QgaW4KKwkJICogZm9ybWF0X3NpemUgc3RlcHMuICovCisJCWlm ICh0YWtlbiA8IHNuYXBzaG90X3NpemUpCisJCQlicmVhazsKKworCQlzbmFwc2hvdCA9IG9hX2J1 Zl9iYXNlICsgKGhlYWQgJiBtYXNrKTsKKwkJaGVhZCArPSBzbmFwc2hvdF9zaXplOworCisJCS8q IFdlIGN1cnJlbnRseSBvbmx5IGFsbG93IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNvdW50ZXJz CisJCSAqIHNvIG9ubHkgaGF2ZSBvbmUgZXZlbnQgdG8gZm9yd2FyZCB0b28uLi4gKi8KKwkJaWYg KGRldl9wcml2LT5vYV9wbXUuZXZlbnRfYWN0aXZlKQorCQkJZm9yd2FyZF9vbmVfb2Ffc25hcHNo b3RfdG9fZXZlbnQoZGV2X3ByaXYsIHNuYXBzaG90LAorCQkJCQkJCSBleGNsdXNpdmVfZXZlbnQp OworCX0KKworCXJldHVybiBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5ndHRfb2Zmc2V0ICsg aGVhZDsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfb2Ffc25hcHNob3RzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICBib29sIHNraXBfaWZfZmx1c2hpbmcpCit7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgb2FzdGF0dXMyOworCXUzMiBvYXN0YXR1czE7 CisJdTMyIGhlYWQ7CisJdTMyIHRhaWw7CisKKwkvKiBDYW4gZWl0aGVyIGZsdXNoIHZpYSBocnRp bWVyIGNhbGxiYWNrIG9yIHBtdSBtZXRob2RzL2ZvcHMgKi8KKwlpZiAoc2tpcF9pZl9mbHVzaGlu ZykgeworCisJCS8qIElmIHRoZSBocnRpbWVyIHRyaWdnZXJzIGF0IHRoZSBzYW1lIHRpbWUgdGhh dCB3ZSBhcmUKKwkJICogcmVzcG9uZGluZyB0byBhIHVzZXJzcGFjZSBpbml0aWF0ZWQgZmx1c2gg dGhlbiB3ZSBjYW4KKwkJICoganVzdCBiYWlsIG91dC4uLgorCQkgKi8KKwkJaWYgKCFzcGluX3Ry eWxvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPm9hX3BtdS5vYV9idWZmZXIuZmx1c2hfbG9jaywKKwkJ CQkJICBmbGFncykpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCXNwaW5fbG9ja19pcnFzYXZlKCZk ZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5mbHVzaF9sb2NrLCBmbGFncyk7CisKKwlXQVJOX09O KCFkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5hZGRyKTsKKworCW9hc3RhdHVzMiA9IEk5MTVf UkVBRChHRU43X09BU1RBVFVTMik7CisJb2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFU VVMxKTsKKworCWhlYWQgPSBvYXN0YXR1czIgJiBHRU43X09BU1RBVFVTMl9IRUFEX01BU0s7CisJ dGFpbCA9IG9hc3RhdHVzMSAmIEdFTjdfT0FTVEFUVVMxX1RBSUxfTUFTSzsKKworCWlmIChvYXN0 YXR1czEgJiAoR0VON19PQVNUQVRVUzFfT0FCVUZGRVJfT1ZFUkZMT1cgfAorCQkJIEdFTjdfT0FT VEFUVVMxX1JFUE9SVF9MT1NUKSkgeworCisJCS8qIFhYWDogSG93IGNhbiB3ZSBjb252ZXkgcmVw b3J0LWxvc3QgZXJyb3JzIHRvIHVzZXJzcGFjZT8gIEl0CisJCSAqIGRvZXNuJ3QgbG9vayBsaWtl IHBlcmYncyBfUkVQT1JUX0xPU1QgbWVjaGFuaXNtIGlzCisJCSAqIGFwcHJvcHJpYXRlIGluIHRo aXMgY2FzZTsgdGhhdCdzIGp1c3QgZm9yIGNhc2VzIHdoZXJlIHdlCisJCSAqIHJ1biBvdXQgb2Yg c3BhY2UgZm9yIHNhbXBsZXMgaW4gdGhlIHBlcmYgY2lyY3VsYXIgYnVmZmVyLgorCQkgKgorCQkg KiBNYXliZSB3ZSBjYW4gY2xhaW0gYSBzcGVjaWFsIHJlcG9ydC1pZCBhbmQgdXNlIHRoYXQgdG8K KwkJICogZm9yd2FyZCBzdGF0dXMgZmxhZ3M/CisJCSAqLworCQlwcl9kZWJ1ZygiT0EgYnVmZmVy IHJlYWQgZXJyb3I6IGFkZHIgPSAlcCwgaGVhZCA9ICV1LCBvZmZzZXQgPSAldSwgdGFpbCA9ICV1 IGNudCBvJ2Zsb3cgPSAlZCwgYnVmIG8nZmxvdyA9ICVkLCBycHQgbG9zdCA9ICVkXG4iLAorCQkJ IGRldl9wcml2LT5vYV9wbXUub2FfYnVmZmVyLmFkZHIsCisJCQkgaGVhZCwKKwkJCSBoZWFkIC0g ZGV2X3ByaXYtPm9hX3BtdS5vYV9idWZmZXIuZ3R0X29mZnNldCwKKwkJCSB0YWlsLAorCQkJIG9h c3RhdHVzMSAmIEdFTjdfT0FTVEFUVVMxX0NPVU5URVJfT1ZFUkZMT1cgPyAxIDogMCwKKwkJCSBv YXN0YXR1czEgJiBHRU43X09BU1RBVFVTMV9PQUJVRkZFUl9PVkVSRkxPVyA/IDEgOiAwLAorCQkJ IG9hc3RhdHVzMSAmIEdFTjdfT0FTVEFUVVMxX1JFUE9SVF9MT1NUID8gMSA6IDApOworCisJCUk5 MTVfV1JJVEUoR0VON19PQVNUQVRVUzEsIG9hc3RhdHVzMSAmCisJCQkgICB+KEdFTjdfT0FTVEFU VVMxX09BQlVGRkVSX09WRVJGTE9XIHwKKwkJCSAgICAgR0VON19PQVNUQVRVUzFfUkVQT1JUX0xP U1QpKTsKKwl9CisKKwloZWFkID0gZm9yd2FyZF9vYV9zbmFwc2hvdHMoZGV2X3ByaXYsIGhlYWQs IHRhaWwpOworCisJSTkxNV9XUklURShHRU43X09BU1RBVFVTMiwgKGhlYWQgJiBHRU43X09BU1RB VFVTMl9IRUFEX01BU0spIHwKKwkJCQkgICAgR0VON19PQVNUQVRVUzJfR0dUVCk7CisKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5mbHVzaF9sb2Nr LCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitvYV9idWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwltdXRleF9sb2NrKCZpOTE1LT5kZXYtPnN0cnVjdF9t dXRleCk7CisKKwl2dW5tYXAoaTkxNS0+b2FfcG11Lm9hX2J1ZmZlci5hZGRyKTsKKwlpOTE1X2dl bV9vYmplY3RfZ2d0dF91bnBpbihpOTE1LT5vYV9wbXUub2FfYnVmZmVyLm9iaik7CisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2UoJmk5MTUtPm9hX3BtdS5vYV9idWZmZXIub2JqLT5iYXNlKTsK KworCWk5MTUtPm9hX3BtdS5vYV9idWZmZXIub2JqID0gTlVMTDsKKwlpOTE1LT5vYV9wbXUub2Ff YnVmZmVyLmd0dF9vZmZzZXQgPSAwOworCWk5MTUtPm9hX3BtdS5vYV9idWZmZXIuYWRkciA9IE5V TEw7CisKKwltdXRleF91bmxvY2soJmk5MTUtPmRldi0+c3RydWN0X211dGV4KTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9vYV9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVu dC0+cG11LCB0eXBlb2YoKmk5MTUpLCBvYV9wbXUucG11KTsKKworCVdBUk5fT04oZXZlbnQtPnBh cmVudCk7CisKKwlvYV9idWZmZXJfZGVzdHJveShpOTE1KTsKKworCWk5MTUtPm9hX3BtdS5zcGVj aWZpY19jdHggPSBOVUxMOworCisJQlVHX09OKGk5MTUtPm9hX3BtdS5leGNsdXNpdmVfZXZlbnQg IT0gZXZlbnQpOworCWk5MTUtPm9hX3BtdS5leGNsdXNpdmVfZXZlbnQgPSBOVUxMOworCisJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7CisJaW50ZWxfcnVu dGltZV9wbV9wdXQoaTkxNSk7Cit9CisKK3N0YXRpYyB2b2lkICp2bWFwX29hX2J1ZmZlcihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWludCBpOworCXZvaWQgKmFkZHIgPSBO VUxMOworCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dfaXRlcjsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz OworCisJcGFnZXMgPSBkcm1fbWFsbG9jX2FiKG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQs IHNpemVvZigqcGFnZXMpKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkgeworCQlEUk1fREVCVUdfRFJJ VkVSKCJGYWlsZWQgdG8gZ2V0IHNwYWNlIGZvciBwYWdlc1xuIik7CisJCWdvdG8gZmluaXNoOwor CX0KKworCWkgPSAwOworCWZvcl9lYWNoX3NnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsLCAmc2dfaXRl ciwgb2JqLT5wYWdlcy0+bmVudHMsIDApIHsKKwkJcGFnZXNbaV0gPSBzZ19wYWdlX2l0ZXJfcGFn ZSgmc2dfaXRlcik7CisJCWkrKzsKKwl9CisKKwlhZGRyID0gdm1hcChwYWdlcywgaSwgMCwgUEFH RV9LRVJORUwpOworCWlmIChhZGRyID09IE5VTEwpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFp bGVkIHRvIHZtYXAgcGFnZXNcbiIpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKK2ZpbmlzaDoKKwlp ZiAocGFnZXMpCisJCWRybV9mcmVlX2xhcmdlKHBhZ2VzKTsKKwlyZXR1cm4gYWRkcjsKK30KKwor c3RhdGljIGludCBpbml0X29hX2J1ZmZlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKGV2ZW50 LT5wbXUsIHR5cGVvZigqZGV2X3ByaXYpLCBvYV9wbXUucG11KTsKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqYm87CisJaW50IHJldDsKKworCUJVR19PTighSVNfSEFTV0VMTChkZXZfcHJp di0+ZGV2KSk7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldl9wcml2LT5kZXYtPnN0cnVj dF9tdXRleCkpOworCUJVR19PTihkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5vYmopOworCisJ c3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5vYV9wbXUub2FfYnVmZmVyLmZsdXNoX2xvY2spOwor CisJLyogTkI6IFdlIG92ZXIgYWxsb2NhdGUgdGhlIE9BIGJ1ZmZlciBkdWUgdG8gdGhlIHdheSBy YXcgc2FtcGxlIGRhdGEKKwkgKiBnZXRzIGNvcGllZCBmcm9tIHRoZSBncHUgbWFwcGVkIGNpcmN1 bGFyIGJ1ZmZlciBpbnRvIHRoZSBwZXJmCisJICogY2lyY3VsYXIgYnVmZmVyIHNvIHRoYXQgb25s eSBvbmUgY29weSBpcyByZXF1aXJlZC4KKwkgKgorCSAqIEZvciBlYWNoIHBlcmYgc2FtcGxlIChy YXctPnNpemUgKyA0KSBuZWVkcyB0byBiZSA4IGJ5dGUgYWxpZ25lZCwKKwkgKiB3aGVyZSB0aGUg NCBjb3JyZXNwb25kcyB0byB0aGUgMzJiaXQgcmF3LT5zaXplIG1lbWJlciB0aGF0J3MKKwkgKiBh ZGRlZCB0byB0aGUgc2FtcGxlIGhlYWRlciB0aGF0IHVzZXJzcGFjZSBzZWVzLgorCSAqCisJICog RHVlIHRvIHRoZSArIDQgZm9yIHRoZSBzaXplIG1lbWJlcjogd2hlbiB3ZSBjb3B5IGEgcmVwb3J0 IHRvIHRoZQorCSAqIHVzZXJzcGFjZSBmYWNpbmcgcGVyZiBidWZmZXIgd2UgYWx3YXlzIGNvcHkg YW4gYWRkaXRpb25hbCA0IGJ5dGVzCisJICogZnJvbSB0aGUgc3Vic2VxdWVudCByZXBvcnQgdG8g bWFrZSB1cCBmb3IgdGhlIG1pc3MgYWxpZ25tZW50LCBidXQKKwkgKiB3aGVuIGEgcmVwb3J0IGlz IGF0IHRoZSBlbmQgb2YgdGhlIGdwdSBtYXBwZWQgYnVmZmVyIHdlIG5lZWQgdG8KKwkgKiByZWFk IDQgYnl0ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJICovCisJYm8gPSBpOTE1X2dl bV9hbGxvY19vYmplY3QoZGV2X3ByaXYtPmRldiwgT0FfQlVGRkVSX1NJWkUgKyBQQUdFX1NJWkUp OworCWlmIChibyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIE9B IGJ1ZmZlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKwlkZXZfcHJp di0+b2FfcG11Lm9hX2J1ZmZlci5vYmogPSBibzsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9z ZXRfY2FjaGVfbGV2ZWwoYm8sIEk5MTVfQ0FDSEVfTExDKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl91bnJlZjsKKworCS8qIFByZUhTVyByZXF1aXJlZCA1MTJLIGFsaWdubWVudCwgSFNXIHJlcXVp cmVzIDE2TSAqLworCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihibywgU1pfMTZNLCAwKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJlZjsKKworCWRldl9wcml2LT5vYV9wbXUub2FfYnVm ZmVyLmd0dF9vZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoYm8pOworCWRldl9wcml2 LT5vYV9wbXUub2FfYnVmZmVyLmFkZHIgPSB2bWFwX29hX2J1ZmZlcihibyk7CisKKwkvKiBQcmUt RGV2QkRXOiBPQUJVRkZFUiBtdXN0IGJlIHNldCB3aXRoIGNvdW50ZXJzIG9mZiwKKwkgKiBiZWZv cmUgT0FTVEFUVVMxLCBidXQgYWZ0ZXIgT0FTVEFUVVMyICovCisJSTkxNV9XUklURShHRU43X09B U1RBVFVTMiwgZGV2X3ByaXYtPm9hX3BtdS5vYV9idWZmZXIuZ3R0X29mZnNldCB8CisJCSAgIEdF TjdfT0FTVEFUVVMyX0dHVFQpOyAvKiBoZWFkICovCisJSTkxNV9XUklURShHRU43X09BQlVGRkVS LCBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5ndHRfb2Zmc2V0KTsKKwlJOTE1X1dSSVRFKEdF TjdfT0FTVEFUVVMxLCBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5ndHRfb2Zmc2V0IHwKKwkJ ICAgR0VON19PQVNUQVRVUzFfT0FCVUZGRVJfU0laRV8xNk0pOyAvKiB0YWlsICovCisKKwlEUk1f REVCVUdfRFJJVkVSKCJPQSBCdWZmZXIgaW5pdGlhbGl6ZWQsIGd0dCBvZmZzZXQgPSAweCV4LCB2 YWRkciA9ICVwIiwKKwkJCSBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5ndHRfb2Zmc2V0LAor CQkJIGRldl9wcml2LT5vYV9wbXUub2FfYnVmZmVyLmFkZHIpOworCisJcmV0dXJuIDA7CisKK2Vy cl91bnJlZjoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmYm8tPmJhc2Up OworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBo cnRpbWVyX3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihocnRpbWVyLCB0eXBlb2YoKmk5MTUp LCBvYV9wbXUudGltZXIpOworCisJZmx1c2hfb2Ffc25hcHNob3RzKGk5MTUsIHRydWUpOworCisJ aHJ0aW1lcl9mb3J3YXJkX25vdyhocnRpbWVyLCBuc190b19rdGltZShQRVJJT0QpKTsKKwlyZXR1 cm4gSFJUSU1FUl9SRVNUQVJUOworfQorCitzdGF0aWMgc3RydWN0IGludGVsX2NvbnRleHQgKgor bG9va3VwX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCSAgICAg ICBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxwLAorCSAgICAgICB1MzIgY3R4X3VzZXJfaGFuZGxlKQor eworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmZGV2X3ByaXYt PmNvbnRleHRfbGlzdCwgbGluaykgeworCQlzdHJ1Y3QgZHJtX2ZpbGUgKmRybV9maWxlOworCisJ CWlmICghY3R4LT5maWxlX3ByaXYpCisJCQljb250aW51ZTsKKworCQlkcm1fZmlsZSA9IGN0eC0+ ZmlsZV9wcml2LT5maWxlOworCisJCWlmICh1c2VyX2ZpbHAtPnByaXZhdGVfZGF0YSA9PSBkcm1f ZmlsZSAmJgorCQkgICAgY3R4LT51c2VyX2hhbmRsZSA9PSBjdHhfdXNlcl9oYW5kbGUpIHsKKwkJ CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiBj dHg7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgp OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9vYV9jb3B5X2F0dHIoZHJt X2k5MTVfb2FfYXR0cl90IF9fdXNlciAqdWF0dHIsCisJCQkgICAgIGRybV9pOTE1X29hX2F0dHJf dCAqYXR0cikKK3sKKwl1MzIgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKCFhY2Nlc3Nfb2soVkVS SUZZX1dSSVRFLCB1YXR0ciwgSTkxNV9PQV9BVFRSX1NJWkVfVkVSMCkpCisJCXJldHVybiAtRUZB VUxUOworCisJLyoKKwkgKiB6ZXJvIHRoZSBmdWxsIHN0cnVjdHVyZSwgc28gdGhhdCBhIHNob3J0 IGNvcHkgd2lsbCBiZSBuaWNlLgorCSAqLworCW1lbXNldChhdHRyLCAwLCBzaXplb2YoKmF0dHIp KTsKKworCXJldCA9IGdldF91c2VyKHNpemUsICZ1YXR0ci0+c2l6ZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCWlmIChzaXplID4gUEFHRV9TSVpFKQkvKiBzaWxseSBsYXJnZSAqLwor CQlnb3RvIGVycl9zaXplOworCisJaWYgKHNpemUgPCBJOTE1X09BX0FUVFJfU0laRV9WRVIwKQor CQlnb3RvIGVycl9zaXplOworCisJLyoKKwkgKiBJZiB3ZSdyZSBoYW5kZWQgYSBiaWdnZXIgc3Ry dWN0IHRoYW4gd2Uga25vdyBvZiwKKwkgKiBlbnN1cmUgYWxsIHRoZSB1bmtub3duIGJpdHMgYXJl IDAgLSBpLmUuIG5ldworCSAqIHVzZXItc3BhY2UgZG9lcyBub3QgcmVseSBvbiBhbnkga2VybmVs IGZlYXR1cmUKKwkgKiBleHRlbnNpb25zIHdlIGRvbnQga25vdyBhYm91dCB5ZXQuCisJICovCisJ aWYgKHNpemUgPiBzaXplb2YoKmF0dHIpKSB7CisJCXVuc2lnbmVkIGNoYXIgX191c2VyICphZGRy OworCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZW5kOworCQl1bnNpZ25lZCBjaGFyIHZhbDsKKwor CQlhZGRyID0gKHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplb2YoKmF0dHIpOworCQllbmQgID0g KHZvaWQgX191c2VyICopdWF0dHIgKyBzaXplOworCisJCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRy KyspIHsKKwkJCXJldCA9IGdldF91c2VyKHZhbCwgYWRkcik7CisJCQlpZiAocmV0KQorCQkJCXJl dHVybiByZXQ7CisJCQlpZiAodmFsKQorCQkJCWdvdG8gZXJyX3NpemU7CisJCX0KKwkJc2l6ZSA9 IHNpemVvZigqYXR0cik7CisJfQorCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYXR0ciwgdWF0dHIs IHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGF0dHItPl9fcmVz ZXJ2ZWRfMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJf c2l6ZToKKwlwdXRfdXNlcihzaXplb2YoKmF0dHIpLCAmdWF0dHItPnNpemUpOworCXJldCA9IC1F MkJJRzsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBpOTE1X29hX2V2ZW50X2luaXQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmRldl9wcml2KSwgb2Ff cG11LnBtdSk7CisJZHJtX2k5MTVfb2FfYXR0cl90IG9hX2F0dHI7CisJdTY0IHJlcG9ydF9mb3Jt YXQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11 LT50eXBlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldCA9IGk5MTVfb2FfY29weV9hdHRyKHRv X3VzZXJfcHRyKGV2ZW50LT5hdHRyLmNvbmZpZyksICZvYV9hdHRyKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJLyogVG8gYXZvaWQgdGhlIGNvbXBsZXhpdHkgb2YgaGF2aW5nIHRvIGFj Y3VyYXRlbHkgZmlsdGVyCisJICogY291bnRlciBzbmFwc2hvdHMgYW5kIG1hcnNoYWwgdG8gdGhl IGFwcHJvcHJpYXRlIGNsaWVudAorCSAqIHdlIGN1cnJlbnRseSBvbmx5IGFsbG93IGV4Y2x1c2l2 ZSBhY2Nlc3MgKi8KKwlpZiAoZGV2X3ByaXYtPm9hX3BtdS5vYV9idWZmZXIub2JqKQorCQlyZXR1 cm4gLUVCVVNZOworCisJcmVwb3J0X2Zvcm1hdCA9IG9hX2F0dHIuZm9ybWF0OworCWRldl9wcml2 LT5vYV9wbXUub2FfYnVmZmVyLmZvcm1hdCA9IHJlcG9ydF9mb3JtYXQ7CisJZGV2X3ByaXYtPm9h X3BtdS5tZXRyaWNzX3NldCA9IG9hX2F0dHIubWV0cmljc19zZXQ7CisKKwlpZiAoSVNfSEFTV0VM TChkZXZfcHJpdi0+ZGV2KSkgeworCQlpbnQgc25hcHNob3Rfc2l6ZTsKKworCQlpZiAocmVwb3J0 X2Zvcm1hdCA+PSBBUlJBWV9TSVpFKGhzd19wZXJmX2Zvcm1hdF9zaXplcykpCisJCQlyZXR1cm4g LUVJTlZBTDsKKworCQlzbmFwc2hvdF9zaXplID0gaHN3X3BlcmZfZm9ybWF0X3NpemVzW3JlcG9y dF9mb3JtYXRdOworCQlpZiAoc25hcHNob3Rfc2l6ZSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsK KworCQlkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5mb3JtYXRfc2l6ZSA9IHNuYXBzaG90X3Np emU7CisKKwkJaWYgKG9hX2F0dHIubWV0cmljc19zZXQgPiBJOTE1X09BX01FVFJJQ1NfU0VUXzNE KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJQlVHKCk7IC8qIHBtdSBzaG91bGRu J3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyog U2luY2Ugd2UgYXJlIGxpbWl0ZWQgdG8gYW4gZXhwb25lbnRpYWwgc2NhbGUgZm9yCisJICogcHJv Z3JhbW1pbmcgdGhlIE9BIHNhbXBsaW5nIHBlcmlvZCB3ZSBkb24ndCBhbGxvdyB1c2Vyc3BhY2UK KwkgKiB0byBwYXNzIGEgcHJlY2lzZSBhdHRyLnNhbXBsZV9wZXJpb2QuICovCisJaWYgKGV2ZW50 LT5hdHRyLmZyZXEgfHwKKwkgICAgKGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QgIT0gMCAmJgor CSAgICAgZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCAhPSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlkZXZfcHJpdi0+b2FfcG11LnBlcmlvZGljID0gZXZlbnQtPmF0dHIuc2FtcGxlX3Blcmlv ZDsKKworCS8qIEluc3RlYWQgb2YgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGNvbmZpZ3VyZSB0aGUg cGVyaW9kIHZpYQorCSAqIGF0dHIuc2FtcGxlX3BlcmlvZCB3ZSBpbnN0ZWFkIGFjY2VwdCBhbiBl eHBvbmVudCB3aGVyZWJ5CisJICogdGhlIHNhbXBsZV9wZXJpb2Qgd2lsbCBiZToKKwkgKgorCSAq ICAgODBucyAqIDJeKHBlcmlvZF9leHBvbmVudCArIDEpCisJICoKKwkgKiBQcm9ncmFtbWluZyBh IHBlcmlvZCBvZiAxNjAgbmFub3NlY29uZHMgd291bGQgbm90IGJlIHZlcnkKKwkgKiBwb2xpdGUs IHNvIGhpZ2hlciBmcmVxdWVuY2llcyBhcmUgcmVzZXJ2ZWQgZm9yIHJvb3QuCisJICovCisJaWYg KGRldl9wcml2LT5vYV9wbXUucGVyaW9kaWMpIHsKKwkJdTY0IHBlcmlvZF9leHBvbmVudCA9IG9h X2F0dHIudGltZXJfZXhwb25lbnQ7CisKKwkJaWYgKHBlcmlvZF9leHBvbmVudCA+IDYzKQorCQkJ cmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHBlcmlvZF9leHBvbmVudCA8IDE1ICYmICFjYXBhYmxl KENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZGV2X3ByaXYtPm9hX3Bt dS5wZXJpb2RfZXhwb25lbnQgPSBwZXJpb2RfZXhwb25lbnQ7CisJfSBlbHNlIGlmIChvYV9hdHRy LnRpbWVyX2V4cG9uZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFdlIGJ5cGFzcyB0aGUg ZGVmYXVsdCBwZXJmIGNvcmUgcGVyZl9wYXJhbm9pZF9jcHUoKSB8fAorCSAqIENBUF9TWVNfQURN SU4gY2hlY2sgYnkgdXNpbmcgdGhlIFBFUkZfUE1VX0NBUF9JU19ERVZJQ0UKKwkgKiBmbGFnIGFu ZCBpbnN0ZWFkIGF1dGhlbnRpY2F0ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjdXJyZW50CisJICog cGlkIG93bnMgdGhlIHNwZWNpZmllZCBjb250ZXh0LCBvciByZXF1aXJlIENBUF9TWVNfQURNSU4K KwkgKiB3aGVuIGNvbGxlY3RpbmcgY3Jvc3MtY29udGV4dCBtZXRyaWNzLgorCSAqLworCWRldl9w cml2LT5vYV9wbXUuc3BlY2lmaWNfY3R4ID0gTlVMTDsKKwlpZiAob2FfYXR0ci5zaW5nbGVfY29u dGV4dCkgeworCQl1MzIgY3R4X2lkID0gb2FfYXR0ci5jdHhfaWQ7CisJCXVuc2lnbmVkIGludCBk cm1fZmQgPSBvYV9hdHRyLmRybV9mZDsKKwkJc3RydWN0IGZkIGZkID0gZmRnZXQoZHJtX2ZkKTsK KworCQlpZiAoZmQuZmlsZSkgeworCQkJZGV2X3ByaXYtPm9hX3BtdS5zcGVjaWZpY19jdHggPQor CQkJCWxvb2t1cF9jb250ZXh0KGRldl9wcml2LCBmZC5maWxlLCBjdHhfaWQpOworCQl9CisJfQor CisJaWYgKCFkZXZfcHJpdi0+b2FfcG11LnNwZWNpZmljX2N0eCAmJiAhY2FwYWJsZShDQVBfU1lT X0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZGV2 LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGluaXRfb2FfYnVmZmVyKGV2ZW50KTsKKwltdXRleF91 bmxvY2soJmRldl9wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJQlVHX09OKGRldl9wcml2LT5vYV9wbXUuZXhjbHVzaXZlX2V2ZW50KTsKKwlk ZXZfcHJpdi0+b2FfcG11LmV4Y2x1c2l2ZV9ldmVudCA9IGV2ZW50OworCisJZXZlbnQtPmRlc3Ry b3kgPSBpOTE1X29hX2V2ZW50X2Rlc3Ryb3k7CisKKwkvKiBQUk0gLSBvYnNlcnZhYmlsaXR5IHBl cmZvcm1hbmNlIGNvdW50ZXJzOgorCSAqCisJICogICBPQUNPTlRST0wsIHBlcmZvcm1hbmNlIGNv dW50ZXIgZW5hYmxlLCBub3RlOgorCSAqCisJICogICAiV2hlbiB0aGlzIGJpdCBpcyBzZXQsIGlu IG9yZGVyIHRvIGhhdmUgY29oZXJlbnQgY291bnRzLAorCSAqICAgUkM2IHBvd2VyIHN0YXRlIGFu ZCB0cnVuayBjbG9jayBnYXRpbmcgbXVzdCBiZSBkaXNhYmxlZC4KKwkgKiAgIFRoaXMgY2FuIGJl IGFjaGlldmVkIGJ5IHByb2dyYW1taW5nIE1NSU8gcmVnaXN0ZXJzIGFzCisJICogICAweEEwOTQ9 MCBhbmQgMHhBMDkwWzMxXT0xIgorCSAqCisJICogICBJbiBvdXIgY2FzZSB3ZSBhcmUgZXhwZWN0 ZWQgdGhhdCB0YWtpbmcgcG0gKyBGT1JDRVdBS0UKKwkgKiAgIHJlZmVyZW5jZXMgd2lsbCBlZmZl Y3RpdmVseSBkaXNhYmxlIFJDNiBhbmQgdHJ1bmsgY2xvY2sKKwkgKiAgIGdhdGluZy4KKwkgKi8K KwlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIHVwZGF0ZV9vYWNvbnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQoreworCUJVR19PTighc3Bpbl9pc19sb2NrZWQoJmRldl9wcml2LT5vYV9wbXUubG9jaykpOwor CisJaWYgKGRldl9wcml2LT5vYV9wbXUuZXZlbnRfYWN0aXZlKSB7CisJCXVuc2lnbmVkIGxvbmcg Y3R4X2lkID0gMDsKKwkJYm9vbCBwaW5uaW5nX29rID0gZmFsc2U7CisKKwkJaWYgKGRldl9wcml2 LT5vYV9wbXUuc3BlY2lmaWNfY3R4KSB7CisJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0K KwkJCQlkZXZfcHJpdi0+b2FfcG11LnNwZWNpZmljX2N0eDsKKwkJCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmogPQorCQkJCWN0eC0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGU7CisKKwkJ CWlmIChpOTE1X2dlbV9vYmpfaXNfcGlubmVkKG9iaikpIHsKKwkJCQljdHhfaWQgPSBpOTE1X2dl bV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKKwkJCQlwaW5uaW5nX29rID0gdHJ1ZTsKKwkJCX0KKwkJ fQorCisJCWlmICgoY3R4X2lkID09IDAgfHwgcGlubmluZ19vaykpIHsKKwkJCWJvb2wgcGVyaW9k aWMgPSBkZXZfcHJpdi0+b2FfcG11LnBlcmlvZGljOworCQkJdTMyIHBlcmlvZF9leHBvbmVudCA9 IGRldl9wcml2LT5vYV9wbXUucGVyaW9kX2V4cG9uZW50OworCQkJdTMyIHJlcG9ydF9mb3JtYXQg PSBkZXZfcHJpdi0+b2FfcG11Lm9hX2J1ZmZlci5mb3JtYXQ7CisKKwkJCUk5MTVfV1JJVEUoR0VO N19PQUNPTlRST0wsCisJCQkJICAgKGN0eF9pZCAmIEdFTjdfT0FDT05UUk9MX0NUWF9NQVNLKSB8 CisJCQkJICAgKHBlcmlvZF9leHBvbmVudCA8PAorCQkJCSAgICBHRU43X09BQ09OVFJPTF9USU1F Ul9QRVJJT0RfU0hJRlQpIHwKKwkJCQkgICAocGVyaW9kaWMgPworCQkJCSAgICBHRU43X09BQ09O VFJPTF9USU1FUl9FTkFCTEUgOiAwKSB8CisJCQkJICAgKHJlcG9ydF9mb3JtYXQgPDwKKwkJCQkg ICAgR0VON19PQUNPTlRST0xfRk9STUFUX1NISUZUKSB8CisJCQkJICAgKGN0eF9pZCA/CisJCQkJ ICAgIEdFTjdfT0FDT05UUk9MX1BFUl9DVFhfRU5BQkxFIDogMCkgfAorCQkJCSAgIEdFTjdfT0FD T05UUk9MX0VOQUJMRSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlJOTE1X1dSSVRFKEdFTjdf T0FDT05UUk9MLCAwKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9vYV9ldmVudF9zdGFydChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCpkZXZf cHJpdiksIG9hX3BtdS5wbXUpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1MzIgb2Fz dGF0dXMxLCB0YWlsOworCisJLyogUFJNIC0gb2JzZXJ2YWJpbGl0eSBwZXJmb3JtYW5jZSBjb3Vu dGVyczoKKwkgKgorCSAqICAgT0FDT05UUk9MLCBzcGVjaWZpYyBjb250ZXh0IGVuYWJsZToKKwkg KgorCSAqICAgIk9BIHVuaXQgbGV2ZWwgY2xvY2sgZ2F0aW5nIG11c3QgYmUgRU5BQkxFRCB3aGVu IHVzaW5nCisJICogICBzcGVjaWZpYyBDb250ZXh0SUQgZmVhdHVyZS4iCisJICoKKwkgKiBBc3N1 bWluZyB3ZSBkb24ndCBldmVyIGRpc2FibGUgT0EgdW5pdCBsZXZlbCBjbG9jayBnYXRpbmcKKwkg KiBsZXRzIGp1c3QgYXNzZXJ0IHRoYXQgdGhpcyBjb25kaXRpb24gaXMgbWV0Li4uCisJICovCisJ V0FSTl9PTkNFKEk5MTVfUkVBRChHRU42X1VDR0NUTDMpICYgR0VONl9PQUNTVU5JVF9DTE9DS19H QVRFX0RJU0FCTEUsCisJCSAgImRpc2FibGVkIE9BIHVuaXQgbGV2ZWwgY2xvY2sgZ2F0aW5nIHdp bGwgcmVzdWx0IGluIGluY29ycmVjdCBwZXItY29udGV4dCBPQSBjb3VudGVycyIpOworCisJLyog WFhYOiBPbiBIYXN3ZWxsLCB3aGVuIHRocmVzaG9sZCBkaXNhYmxlIG1vZGUgaXMgZGVzaXJlZCwK KwkgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHRocmVzaG9sZCBlbmFibGUgdG8gJzAnLCB3ZSBu ZWVkIHRvCisJICogcHJvZ3JhbSBpdCB0byAnMScgYW5kIHNldCBPQVNUQVJUVFJJRzEgYml0cyAx NTowIHRvIDAKKwkgKiAodGhyZXNob2xkIHZhbHVlIG9mIDApCisJICovCisJSTkxNV9XUklURShP QVNUQVJUVFJJRzYsIChPQVNUQVJUVFJJRzZfQjRfVE9fQjdfVEhSRVNIT0xEX0VOQUJMRSB8CisJ CQkJICBPQVNUQVJUVFJJRzZfQjRfQ1VTVE9NX0VWRU5UX0VOQUJMRSkpOworCUk5MTVfV1JJVEUo T0FTVEFSVFRSSUc1LCAwKTsgLyogdGhyZXNob2xkIHZhbHVlICovCisKKwlJOTE1X1dSSVRFKE9B U1RBUlRUUklHMiwgKE9BU1RBUlRUUklHMl9CMF9UT19CM19USFJFU0hPTERfRU5BQkxFIHwKKwkJ CQkgIE9BU1RBUlRUUklHMl9CMF9DVVNUT01fRVZFTlRfRU5BQkxFKSk7CisJSTkxNV9XUklURShP QVNUQVJUVFJJRzEsIDApOyAvKiB0aHJlc2hvbGQgdmFsdWUgKi8KKworCS8qIFNldHVwIEIwIGFz IHRoZSBncHUgY2xvY2sgY291bnRlci4uLiAqLworCUk5MTVfV1JJVEUoT0FDRUMwXzAsIE9BQ0VD MF8wX0IwX0NPTVBBUkVfR1JFQVRFUl9PUl9FUVVBTCk7IC8qIHRvIDAgKi8KKwlJOTE1X1dSSVRF KE9BQ0VDMF8xLCAweGZmZmUpOyAvKiBTZWxlY3QgTk9BWzBdICovCisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPm9hX3BtdS5sb2NrLCBsb2NrX2ZsYWdzKTsKKworCWRldl9wcml2LT5v YV9wbXUuZXZlbnRfYWN0aXZlID0gdHJ1ZTsKKwl1cGRhdGVfb2Fjb250cm9sKGRldl9wcml2KTsK KworCS8qIFJlc2V0IHRoZSBoZWFkIHB0ciB0byBlbnN1cmUgd2UgZG9uJ3QgZm9yd2FyZCByZXBv cnRzIHJlbGF0aW5nCisJICogdG8gYSBwcmV2aW91cyBwZXJmIGV2ZW50ICovCisJb2FzdGF0dXMx ID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKKwl0YWlsID0gb2FzdGF0dXMxICYgR0VON19P QVNUQVRVUzFfVEFJTF9NQVNLOworCUk5MTVfV1JJVEUoR0VON19PQVNUQVRVUzIsICh0YWlsICYg R0VON19PQVNUQVRVUzJfSEVBRF9NQVNLKSB8CisJCQkJICAgIEdFTjdfT0FTVEFUVVMyX0dHVFQp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPm9hX3BtdS5sb2NrLCBsb2Nr X2ZsYWdzKTsKKworCWlmIChldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kKQorCQlfX2hydGltZXJf c3RhcnRfcmFuZ2VfbnMoJmRldl9wcml2LT5vYV9wbXUudGltZXIsCisJCQkJCSBuc190b19rdGlt ZShQRVJJT0QpLCAwLAorCQkJCQkgSFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQsIDApOworCisJZXZl bnQtPmh3LnN0YXRlID0gMDsKK30KKworc3RhdGljIHZvaWQgaTkxNV9vYV9ldmVudF9zdG9wKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmRl dl9wcml2KSwgb2FfcG11LnBtdSk7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5vYV9wbXUubG9jaywgbG9ja19mbGFncyk7CisJZGV2 X3ByaXYtPm9hX3BtdS5ldmVudF9hY3RpdmUgPSBmYWxzZTsKKwl1cGRhdGVfb2Fjb250cm9sKGRl dl9wcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+b2FfcG11LmxvY2ss IGxvY2tfZmxhZ3MpOworCisJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QpIHsKKwkJaHJ0 aW1lcl9jYW5jZWwoJmRldl9wcml2LT5vYV9wbXUudGltZXIpOworCQlmbHVzaF9vYV9zbmFwc2hv dHMoZGV2X3ByaXYsIGZhbHNlKTsKKwl9CisKKwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19T VE9QUEVEOworfQorCitzdGF0aWMgaW50IGk5MTVfb2FfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2 ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCisJ CWk5MTVfb2FfZXZlbnRfc3RhcnQoZXZlbnQsIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBpOTE1X29hX2V2ZW50X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKK3sKKwlpOTE1X29hX2V2ZW50X3N0b3AoZXZlbnQsIGZsYWdzKTsKK30KKworc3Rh dGljIHZvaWQgaTkxNV9vYV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+ cG11LCB0eXBlb2YoKmk5MTUpLCBvYV9wbXUucG11KTsKKworCS8qIFhYWDogV2hhdCBjb3VudGVy IHdvdWxkIGJlIHVzZWZ1bCBoZXJlPyAqLworCWxvY2FsNjRfc2V0KCZldmVudC0+Y291bnQsIDAp OworfQorCitzdGF0aWMgdm9pZCBpOTE1X29hX2V2ZW50X2ZsdXNoKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5l cl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBvYV9wbXUucG11KTsKKworCS8qIFdlIHdh bnQgdXNlcnNwYWNlIHRvIGJlIGFibGUgdG8gdXNlIGEgcmVhZCgpIHRvIGV4cGxpY2l0bHkKKwkg KiBmbHVzaCBPQSBjb3VudGVyIHNuYXBzaG90cy4uLiAqLworCWlmIChldmVudC0+YXR0ci5zYW1w bGVfcGVyaW9kKQorCQlmbHVzaF9vYV9zbmFwc2hvdHMoaTkxNSwgdHJ1ZSk7Cit9CisKK3N0YXRp YyBpbnQgaTkxNV9vYV9ldmVudF9ldmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQor eworCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfb2FfY29udGV4dF9waW5fbm90aWZ5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldl9wcml2LT5vYV9w bXUucG11LmV2ZW50X2luaXQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJmRldl9wcml2LT5vYV9wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGRldl9wcml2LT5vYV9w bXUuc3BlY2lmaWNfY3R4ID09IGNvbnRleHQpCisJCXVwZGF0ZV9vYWNvbnRyb2woZGV2X3ByaXYp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPm9hX3BtdS5sb2NrLCBmbGFn cyk7Cit9CisKK3ZvaWQgaTkxNV9vYV9jb250ZXh0X3VucGluX25vdGlmeShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY29udGV4 dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldl9wcml2LT5vYV9wbXUucG11 LmV2ZW50X2luaXQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRl dl9wcml2LT5vYV9wbXUubG9jaywgZmxhZ3MpOworCisJaWYgKGRldl9wcml2LT5vYV9wbXUuc3Bl Y2lmaWNfY3R4ID09IGNvbnRleHQpCisJCXVwZGF0ZV9vYWNvbnRyb2woZGV2X3ByaXYpOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPm9hX3BtdS5sb2NrLCBmbGFncyk7Cit9 CisKK3ZvaWQgaTkxNV9vYV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsKKworCWlmICgh SVNfSEFTV0VMTChkZXYpKQorCQlyZXR1cm47CisKKwkvKiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwg YWJvdXQgZm9yd2FyZGluZyBjcHUgbWV0cmljcyB0bworCSAqIHVzZXJzcGFjZSBjb25zaWRlcmlu ZyB0aGF0IFBFUkZfUE1VX0NBUF9JU19ERVZJQ0UgYnlwYXNzZXMKKwkgKiB0aGUgZXZlbnRzL2Nv cmUgc2VjdXJpdHkgY2hlY2sgdGhhdCBzdG9wcyBhbiB1bnByaXZpbGVnZWQKKwkgKiBwcm9jZXNz IGNvbGxlY3RpbmcgbWV0cmljcyBmb3Igb3RoZXIgcHJvY2Vzc2VzLgorCSAqLworCWk5MTUtPm9h X3BtdS5kdW1teV9yZWdzID0gKnRhc2tfcHRfcmVncyhjdXJyZW50KTsKKworCWhydGltZXJfaW5p dCgmaTkxNS0+b2FfcG11LnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwp OworCWk5MTUtPm9hX3BtdS50aW1lci5mdW5jdGlvbiA9IGhydGltZXJfc2FtcGxlOworCisJc3Bp bl9sb2NrX2luaXQoJmk5MTUtPm9hX3BtdS5sb2NrKTsKKworCWk5MTUtPm9hX3BtdS5wbXUuY2Fw YWJpbGl0aWVzICA9IFBFUkZfUE1VX0NBUF9JU19ERVZJQ0U7CisKKwkvKiBFZmZlY3RpdmVseSBk aXNhbGxvdyBvcGVuaW5nIGFuIGV2ZW50IHdpdGggYSBzcGVjaWZpYyBwaWQKKwkgKiBzaW5jZSB3 ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgY3B1Li4uCisJ ICovCisJaTkxNS0+b2FfcG11LnBtdS50YXNrX2N0eF9uciAgID0gcGVyZl9pbnZhbGlkX2NvbnRl eHQ7CisKKwlpOTE1LT5vYV9wbXUucG11LmV2ZW50X2luaXQgICAgPSBpOTE1X29hX2V2ZW50X2lu aXQ7CisJaTkxNS0+b2FfcG11LnBtdS5hZGQJICAgICAgID0gaTkxNV9vYV9ldmVudF9hZGQ7CisJ aTkxNS0+b2FfcG11LnBtdS5kZWwJICAgICAgID0gaTkxNV9vYV9ldmVudF9kZWw7CisJaTkxNS0+ b2FfcG11LnBtdS5zdGFydAkgICAgICAgPSBpOTE1X29hX2V2ZW50X3N0YXJ0OworCWk5MTUtPm9h X3BtdS5wbXUuc3RvcAkgICAgICAgPSBpOTE1X29hX2V2ZW50X3N0b3A7CisJaTkxNS0+b2FfcG11 LnBtdS5yZWFkCSAgICAgICA9IGk5MTVfb2FfZXZlbnRfcmVhZDsKKwlpOTE1LT5vYV9wbXUucG11 LmZsdXNoCSAgICAgICA9IGk5MTVfb2FfZXZlbnRfZmx1c2g7CisJaTkxNS0+b2FfcG11LnBtdS5l dmVudF9pZHggICAgID0gaTkxNV9vYV9ldmVudF9ldmVudF9pZHg7CisKKwlpZiAocGVyZl9wbXVf cmVnaXN0ZXIoJmk5MTUtPm9hX3BtdS5wbXUsICJpOTE1X29hIiwgLTEpKQorCQlpOTE1LT5vYV9w bXUucG11LmV2ZW50X2luaXQgPSBOVUxMOworfQorCit2b2lkIGk5MTVfb2FfcG11X3VucmVnaXN0 ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IHRvX2k5MTUoZGV2KTsKKworCWlmIChpOTE1LT5vYV9wbXUucG11LmV2ZW50X2luaXQg PT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+b2FfcG11 LnBtdSk7CisJaTkxNS0+b2FfcG11LnBtdS5ldmVudF9pbml0ID0gTlVMTDsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlZy5oCmluZGV4IDJmYTE2NjkuLjllNDI3Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaApAQCAtNTE2LDYgKzUxNiw3MyBAQAogI2RlZmluZSBHRU43XzNEUFJJTV9CQVNFX1ZFUlRF WCAgICAgICAgIDB4MjQ0MAogCiAjZGVmaW5lIEdFTjdfT0FDT05UUk9MIDB4MjM2MAorI2RlZmlu ZSAgR0VON19PQUNPTlRST0xfQ1RYX01BU0sJICAgIDB4RkZGRkYwMDAKKyNkZWZpbmUgIEdFTjdf T0FDT05UUk9MX1RJTUVSX1BFUklPRF9NQVNLICAgMHgzRgorI2RlZmluZSAgR0VON19PQUNPTlRS T0xfVElNRVJfUEVSSU9EX1NISUZUICA2CisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9USU1FUl9F TkFCTEUJICAgICgxPDw1KQorI2RlZmluZSAgR0VON19PQUNPTlRST0xfRk9STUFUX0ExMwkgICAg KDA8PDIpCisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9GT1JNQVRfQTI5CSAgICAoMTw8MikKKyNk ZWZpbmUgIEdFTjdfT0FDT05UUk9MX0ZPUk1BVF9BMTNfQjhfQzggICAgKDI8PDIpCisjZGVmaW5l ICBHRU43X09BQ09OVFJPTF9GT1JNQVRfQTI5X0I4X0M4ICAgICgzPDwyKQorI2RlZmluZSAgR0VO N19PQUNPTlRST0xfRk9STUFUX0I0X0M4CSAgICAoNDw8MikKKyNkZWZpbmUgIEdFTjdfT0FDT05U Uk9MX0ZPUk1BVF9BNDVfQjhfQzggICAgKDU8PDIpCisjZGVmaW5lICBHRU43X09BQ09OVFJPTF9G T1JNQVRfQjRfQzhfQTE2ICAgICg2PDwyKQorI2RlZmluZSAgR0VON19PQUNPTlRST0xfRk9STUFU X0M0X0I4CSAgICAoNzw8MikKKyNkZWZpbmUgIEdFTjdfT0FDT05UUk9MX0ZPUk1BVF9TSElGVAkg ICAgMgorI2RlZmluZSAgR0VON19PQUNPTlRST0xfUEVSX0NUWF9FTkFCTEUJICAgICgxPDwxKQor I2RlZmluZSAgR0VON19PQUNPTlRST0xfRU5BQkxFCQkgICAgKDE8PDApCisKKyNkZWZpbmUgT0FT VEFSVFRSSUc1IDB4MDI3MjAKKyNkZWZpbmUgIE9BU1RBUlRUUklHNV9USFJFU0hPTERfVkFMVUVf TUFTSwkweGZmZmYKKworI2RlZmluZSBPQVNUQVJUVFJJRzYgMHgwMjcyNAorI2RlZmluZSAgT0FT VEFSVFRSSUc2X0I0X1RPX0I3X1RIUkVTSE9MRF9FTkFCTEUgKDE8PDIzKQorI2RlZmluZSAgT0FT VEFSVFRSSUc2X0I0X0NVU1RPTV9FVkVOVF9FTkFCTEUJKDE8PDI4KQorCisjZGVmaW5lIE9BU1RB UlRUUklHMSAweDAyNzEwCisjZGVmaW5lICBPQVNUQVJUVFJJRzFfVEhSRVNIT0xEX1ZBTFVFX01B U0sJMHhmZmZmCisKKyNkZWZpbmUgT0FTVEFSVFRSSUcyIDB4MDI3MTQKKyNkZWZpbmUgIE9BU1RB UlRUUklHMl9CMF9UT19CM19USFJFU0hPTERfRU5BQkxFICgxPDwyMykKKyNkZWZpbmUgIE9BU1RB UlRUUklHMl9CMF9DVVNUT01fRVZFTlRfRU5BQkxFCSgxPDwyOCkKKworI2RlZmluZSBPQUNFQzBf MCAweDI3NzAKKyNkZWZpbmUgIE9BQ0VDMF8wX0IwX0NPTVBBUkVfQU5ZX0VRVUFMCQkwCisjZGVm aW5lICBPQUNFQzBfMF9CMF9DT01QQVJFX09SCQkJMAorI2RlZmluZSAgT0FDRUMwXzBfQjBfQ09N UEFSRV9HUkVBVEVSX1RIQU4JMQorI2RlZmluZSAgT0FDRUMwXzBfQjBfQ09NUEFSRV9FUVVBTAkJ MgorI2RlZmluZSAgT0FDRUMwXzBfQjBfQ09NUEFSRV9HUkVBVEVSX09SX0VRVUFMCTMKKyNkZWZp bmUgIE9BQ0VDMF8wX0IwX0NPTVBBUkVfTEVTU19USEFOCQk0CisjZGVmaW5lICBPQUNFQzBfMF9C MF9DT01QQVJFX05PVF9FUVVBTAkJNQorI2RlZmluZSAgT0FDRUMwXzBfQjBfQ09NUEFSRV9MRVNT X09SX0VRVUFMCTYKKyNkZWZpbmUgIE9BQ0VDMF8wX0IwX0NPTVBBUkVfVkFMVUVfTUFTSwkJMHhm ZmZmCisjZGVmaW5lICBPQUNFQzBfMF9CMF9DT01QQVJFX1ZBTFVFX1NISUZUCTMKKworI2RlZmlu ZSBPQUNFQzBfMSAweDI3NzQKKworI2RlZmluZSBHRU43X09BQlVGRkVSIDB4MjNCMCAvKiBSL1cg Ki8KKyNkZWZpbmUgIEdFTjdfT0FCVUZGRVJfT1ZFUlJVTl9ESVNBQkxFCSAgICAoMTw8MykKKyNk ZWZpbmUgIEdFTjdfT0FCVUZGRVJfRURHRV9UUklHR0VSCSAgICAoMTw8MikKKyNkZWZpbmUgIEdF TjdfT0FCVUZGRVJfU1RPUF9SRVNVTUVfRU5BQkxFICAgKDE8PDEpCisjZGVmaW5lICBHRU43X09B QlVGRkVSX1JFU1VNRQkJICAgICgxPDwwKQorCisjZGVmaW5lIEdFTjdfT0FTVEFUVVMxIDB4MjM2 NAorI2RlZmluZSAgR0VON19PQVNUQVRVUzFfVEFJTF9NQVNLCSAgICAweGZmZmZmZmMwCisjZGVm aW5lICBHRU43X09BU1RBVFVTMV9PQUJVRkZFUl9TSVpFXzEyOEsgICgwPDwzKQorI2RlZmluZSAg R0VON19PQVNUQVRVUzFfT0FCVUZGRVJfU0laRV8yNTZLICAoMTw8MykKKyNkZWZpbmUgIEdFTjdf T0FTVEFUVVMxX09BQlVGRkVSX1NJWkVfNTEySyAgKDI8PDMpCisjZGVmaW5lICBHRU43X09BU1RB VFVTMV9PQUJVRkZFUl9TSVpFXzFNICAgICgzPDwzKQorI2RlZmluZSAgR0VON19PQVNUQVRVUzFf T0FCVUZGRVJfU0laRV8yTSAgICAoNDw8MykKKyNkZWZpbmUgIEdFTjdfT0FTVEFUVVMxX09BQlVG RkVSX1NJWkVfNE0gICAgKDU8PDMpCisjZGVmaW5lICBHRU43X09BU1RBVFVTMV9PQUJVRkZFUl9T SVpFXzhNICAgICg2PDwzKQorI2RlZmluZSAgR0VON19PQVNUQVRVUzFfT0FCVUZGRVJfU0laRV8x Nk0gICAoNzw8MykKKyNkZWZpbmUgIEdFTjdfT0FTVEFUVVMxX0NPVU5URVJfT1ZFUkZMT1cgICAg KDE8PDIpCisjZGVmaW5lICBHRU43X09BU1RBVFVTMV9PQUJVRkZFUl9PVkVSRkxPVyAgICgxPDwx KQorI2RlZmluZSAgR0VON19PQVNUQVRVUzFfUkVQT1JUX0xPU1QJICAgICgxPDwwKQorCisjZGVm aW5lIEdFTjdfT0FTVEFUVVMyIDB4MjM2OAorI2RlZmluZSBHRU43X09BU1RBVFVTMl9IRUFEX01B U0sgICAgMHhmZmZmZmZjMAorI2RlZmluZSBHRU43X09BU1RBVFVTMl9HR1RUCSAgICAweDEKIAog I2RlZmluZSBfR0VON19QSVBFQV9ERV9MT0FEX1NMCTB4NzAwNjgKICNkZWZpbmUgX0dFTjdfUElQ RUJfREVfTE9BRF9TTAkweDcxMDY4CkBAIC02NDk3LDYgKzY1NjQsNyBAQCBlbnVtIHNrbF9kaXNw X3Bvd2VyX3dlbGxzIHsKICMgZGVmaW5lIEdFTjZfUkNDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJ CSgxIDw8IDExKQogCiAjZGVmaW5lIEdFTjZfVUNHQ1RMMwkJCQkweDk0MDgKKyMgZGVmaW5lIEdF TjZfT0FDU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCAyMCkKIAogI2RlZmluZSBHRU43 X1VDR0NUTDQJCQkJMHg5NDBjCiAjZGVmaW5lICBHRU43X0wzQkFOSzJYX0NMT0NLX0dBVEVfRElT QUJMRQkoMTw8MjUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9p bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggNDg1MWQ2Ni4uZjc4ZjIzMiAxMDA2NDQK LS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaApAQCAtNTgsNiArNTgsMzUgQEAKICNkZWZpbmUgSTkxNV9FUlJPUl9VRVZFTlQJ CSJFUlJPUiIKICNkZWZpbmUgSTkxNV9SRVNFVF9VRVZFTlQJCSJSRVNFVCIKIAorLyoqCisgKiBE T0M6IHBlcmYgZXZlbnRzIGNvbmZpZ3VyYXRpb24gZXhwb3NlZCBieSBpOTE1IHRocm91Z2ggL3N5 cy9idXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTVfb2EKKyAqCisgKi8KKworI2RlZmluZSBJ OTE1X09BX0ZPUk1BVF9BMTNfSFNXCQkwCisjZGVmaW5lIEk5MTVfT0FfRk9STUFUX0EyOV9IU1cJ CTEKKyNkZWZpbmUgSTkxNV9PQV9GT1JNQVRfQTEzX0I4X0M4X0hTVwkyCisjZGVmaW5lIEk5MTVf T0FfRk9STUFUX0I0X0M4X0hTVwk0CisjZGVmaW5lIEk5MTVfT0FfRk9STUFUX0E0NV9COF9DOF9I U1cJNQorI2RlZmluZSBJOTE1X09BX0ZPUk1BVF9CNF9DOF9BMTZfSFNXCTYKKyNkZWZpbmUgSTkx NV9PQV9GT1JNQVRfQzRfQjhfSFNXCTcKKworI2RlZmluZSBJOTE1X09BX0FUVFJfU0laRV9WRVIw CQkzMiAgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KKwordHlwZWRlZiBzdHJ1 Y3QgX2RybV9pOTE1X29hX2F0dHIgeworCV9fdTMyIHNpemU7CisKKwlfX3UzMiBmb3JtYXQ7CisJ X191MzIgbWV0cmljc19zZXQ7CisJX191MzIgdGltZXJfZXhwb25lbnQ7CisKKwlfX3UzMiBkcm1f ZmQ7CisJX191MzIgY3R4X2lkOworCisJX191NjQgc2luZ2xlX2NvbnRleHQgOiAxLAorCSAgICAg IF9fcmVzZXJ2ZWRfMSA6IDYzOworfSBkcm1faTkxNV9vYV9hdHRyX3Q7CisKIC8qIEVhY2ggcmVn aW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhl bS4KICAqLwogI2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQkvKiB0YWJsZSBzaXplIDJr IC0gbWF4aW11bSBkdWUgdG8gdXNlCi0tIAoyLjMuMgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK