From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id C22A66E9B2 for ; Wed, 18 Dec 2019 17:13:31 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 18 Dec 2019 18:12:48 +0100 Message-Id: <20191218171250.15232-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 1/3] lib/intel_bufops: Introduce buffer operations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: RGlmZmVyZW50IEdFTnMgc3VwcG9ydHMgZGlmZmVyZW50IHRpbGUgc3VyZmFjZXMuIE9sZGVyIEdF TnMKaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFjZSB0aWxpbmcgLyBkZXRpbGlu Zy4KTmV3ZXIgR0VOcyBoYXZlIHRvIHRpbGUgLyBkZXRpbGUgc3VjaCBzdXJmYWNlIGluIHNvZnR3 YXJlLgoKVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZlIGVhc2llciB0aGlzIGNvZGUgYWRkcyBi dWZmZXIKb3BlcmF0aW9ucyAoc2hvcnQgYnVmX29wcykgdG8gdXNlIGFwcHJvcHJpYXRlIGZ1bmN0 aW9ucyBhbGxvd2luZwpjb3B5aW5nIGxpbmVhciBidWZmZXIgdG8gQk8gYW5kIGZyb20gQk8gdG8g bGluZWFyIGJ1ZmZlcgpyZWdhcmRsZXNzIEdQVSBnZW5lcmF0aW9uIGFuZCB0aWxpbmcvc3dpenps aW5nIHdpdGhpbiBCTy4gRm9yIEdFTnMKaGF2aW5nIGZlbmNlcyBzdXBwb3J0IHByZWZlcmVuY2Ug aXMgdG8gdXNlIHRoZW0gaWYgdGhleSBhcmUgYXZhaWxhYmxlCihYIC8gWSB0aWxpbmcgaXMgcHJv YmVkIG9uIGJ1Zl9vcHMgaW5pdGlhbGl6YXRpb24pLgoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcg S2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IEthdGFyenluYSBEZWMgPGthdGFy enluYS5kZWNAaW50ZWwuY29tPgpDYzogVmFuc2hpZGhhciBLb25kYSA8dmFuc2hpZGhhci5yLmtv bmRhQGludGVsLmNvbT4KLS0tCiAuLi4vaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3Mu eG1sICAgICAgfCAgICAxICsKIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDIgKwogbGliL2ludGVsX2J1Zm9wcy5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMTA5NiArKysrKysrKysrKysrKysrKwogbGliL2ludGVsX2J1Zm9wcy5oICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA4NCArKwogbGliL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDExODQgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9idWZvcHMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9idWZvcHMuaAoKZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJl bmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCBiL2RvY3MvcmVmZXJlbmNl L2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAppbmRleCA0NTRkNjRlNS4uYWE5 ZmVmMjAgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10 b29scy1kb2NzLnhtbAorKysgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUt dG9vbHMtZG9jcy54bWwKQEAgLTQyLDYgKzQyLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4 bWwvaWd0X3ZnZW0ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF94ODYueG1s Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2ludGVsX2JhdGNoYnVmZmVyLnhtbCIvPgor ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9idWZvcHMueG1sIi8+CiAgICAgPHhpOmlu Y2x1ZGUgaHJlZj0ieG1sL2ludGVsX2NoaXBzZXQueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJl Zj0ieG1sL2ludGVsX2lvLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pb2N0bF93 cmFwcGVycy54bWwiLz4KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01h a2VmaWxlLnNvdXJjZXMKaW5kZXggNWRkMzk2MmUuLmRhMzRlYWU3IDEwMDY0NAotLS0gYS9saWIv TWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtNjcsNiArNjcs OCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlpbnRlbF9hdWIuaAkJXAogCWludGVsX2JhdGNo YnVmZmVyLmMJXAogCWludGVsX2JhdGNoYnVmZmVyLmgJXAorCWludGVsX2J1Zm9wcy5jCQlcCisJ aW50ZWxfYnVmb3BzLmgJCVwKIAlpbnRlbF9jaGlwc2V0LmMJCVwKIAlpbnRlbF9jaGlwc2V0LmgJ CVwKIAlpbnRlbF9kZXZpY2VfaW5mby5jCVwKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9idWZvcHMu YyBiL2xpYi9pbnRlbF9idWZvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uZGVkZTZkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaW50ZWxfYnVmb3BzLmMKQEAgLTAs MCArMSwxMDk2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisK KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3Rf eDg2LmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCisKKy8qKgorICogU0VDVElPTjppbnRl bF9idWZvcHMKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQnVmZmVyIG9wZXJhdGlvbiBvbiB0aWxl ZCBzdXJmYWNlcworICogQHRpdGxlOiBCdWZmZXIgb3BlcmF0aW9ucworICogQGluY2x1ZGU6IGln dC5oCisgKgorICogIyBCdWZmZXIgb3BlcmF0aW9ucworICoKKyAqIEludGVsIEdQVSBkZXZpY2Vz IHN1cHBvcnRzIGRpZmZlcmVudCBzZXQgb2YgdGlsZWQgc3VyZmFjZXMuCisgKiBDaGVja2luZyBl YWNoIHRpbWUgd2hhdCB0aWxlIGZvcm1hdHMgYXJlIHN1cHBvcnRzIGlzIGN1bWJlcnNvbWUgYW5k CisgKiBlcnJvciBwcm9uZS4KKyAqCisgKiBCdWZmZXIgb3BlcmF0aW9uIChidWZfb3BzKSBwcm92 aWRlIGEgd3JhcHBlciB0byBjb25kaXRpb25hbCBjb2RlIHdoaWNoCisgKiBjYW4gYmUgdXNlZCB3 aXRob3V0IHdvcnJ5aW5nIG9mIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZ2l2aW5nOgorICogLSBj b3B5IGxpbmVhciB0byB0aWxlZCBidWZmZXIKKyAqIC0gY29weSB0aWxlZCBidWZmZXIgdG8gbGlu ZWFyCisgKgorICogRm9sbG93aW5nIGNvZGUgb3JkZXIgc2hvdWxkIGJlIHVzZWQgKGxpbmVhciBp cyBwbGFpbiBtZW1vcnkgd2l0aCBzb21lCisgKiBpbWFnZSBkYXRhKToKKyAqCisgKiB8WzwhLS0g bGFuZ3VhZ2U9ImMiIC0tPgorICogc3RydWN0IGJ1Zl9vcHMgKmJvcHM7CisgKiBzdHJ1Y3QgaW50 ZWxfYnVmIGlidWY7CisgKiAuLi4KKyAqIGJvcHMgPSBidWZfb3BzX2NyZWF0ZShmZCk7CisgKiBp bnRlbF9idWZfaW5pdChib3BzLCAmaWJ1ZiwgNTEyLCA1MTIsIDMyLCBJOTE1X1RJTElOR19YLCBm YWxzZSk7CisgKiAuLi4KKyAqIGxpbmVhcl90b19pbnRlbF9idWYoYm9wcywgJmlidWYsIGxpbmVh cik7CisgKiAuLi4KKyAqIGludGVsX2J1Zl90b19saW5lYXIoYm9wcywgJmlidWYsIGxpbmVhcik7 CisgKiAuLi4KKyAqIGludGVsX2J1Zl9jbG9zZShib3BzLCAmaWJ1Zik7CisgKiAuLi4KKyAqIGJ1 Zl9vcHNfZGVzdHJveShib3BzKTsKKyAqIF18CisgKgorICogQ2FsbGluZyBidWZfb3BzX2NyZWF0 ZShmZCkgcHJvYmVzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoc3VwcG9ydGVkIGZlbmNlcywKKyAq IHN3aXp6bGluZykgYW5kIHJldHVybnMgb3BhcXVlIHBvaW50ZXIgdG8gYnVmX29wcy4gRnJvbSBu b3cgb24KKyAqIGludGVsX2J1Zl90b19saW5lYXIoKSBhbmQgbGluZWFyX3RvX2ludGVsX2J1Zigp IHdpbGwgY2hvb3NlIGFwcHJvcHJpYXRlCisgKiBmdW5jdGlvbiB0byBkbyB0aGUgam9iLgorICov CisKKy8vI2RlZmluZSBCVUZPUFNfREVCVUdHSU5HCisjaWZkZWYgQlVGT1BTX0RFQlVHR0lORwor I2RlZmluZSBERUJVRyguLi4pIHByaW50ZihfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREVCVUdGTigp IERFQlVHKCJcdCAtPiAlcygpXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBERUJV RyguLi4pCisjZGVmaW5lIERFQlVHRk4oKQorI2VuZGlmCisKKyNkZWZpbmUgVElMRV9ERUYoeCkg KDEgPDwgKHgpKQorI2RlZmluZSBUSUxFX05PTkUgICBUSUxFX0RFRihJOTE1X1RJTElOR19OT05F KQorI2RlZmluZSBUSUxFX1ggICAgICBUSUxFX0RFRihJOTE1X1RJTElOR19YKQorI2RlZmluZSBU SUxFX1kgICAgICBUSUxFX0RFRihJOTE1X1RJTElOR19ZKQorI2RlZmluZSBUSUxFX1lmICAgICBU SUxFX0RFRihJOTE1X1RJTElOR19ZZikKKyNkZWZpbmUgVElMRV9ZcyAgICAgVElMRV9ERUYoSTkx NV9USUxJTkdfWXMpCisKK3R5cGVkZWYgdm9pZCAoKmJvX2NvcHkpKHN0cnVjdCBidWZfb3BzICos IHN0cnVjdCBpbnRlbF9idWYgKiwgdWludDMyX3QgKik7CisKK3N0cnVjdCBidWZfb3BzIHsKKwlp bnQgZmQ7CisJaW50IGdlbl9zdGFydDsKKwlpbnQgZ2VuX2VuZDsKKwlpbnQgaW50ZWxfZ2VuOwor CXVpbnQzMl90IHN1cHBvcnRlZF90aWxlczsKKwl1aW50MzJfdCBzdXBwb3J0ZWRfaHdfdGlsZXM7 CisJdWludDMyX3Qgc3dpenpsZV94OworCXVpbnQzMl90IHN3aXp6bGVfeTsKKwlib19jb3B5IGxp bmVhcl90bzsKKwlib19jb3B5IGxpbmVhcl90b194OworCWJvX2NvcHkgbGluZWFyX3RvX3k7CisJ Ym9fY29weSBsaW5lYXJfdG9feWY7CisJYm9fY29weSBsaW5lYXJfdG9feXM7CisJYm9fY29weSB0 b19saW5lYXI7CisJYm9fY29weSB4X3RvX2xpbmVhcjsKKwlib19jb3B5IHlfdG9fbGluZWFyOwor CWJvX2NvcHkgeWZfdG9fbGluZWFyOworCWJvX2NvcHkgeXNfdG9fbGluZWFyOworfTsKKworc3Rh dGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIodWludDMyX3QgdGlsaW5nKSB7CisJc3dpdGNoICh0 aWxpbmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX05PTkU6IHJldHVybiAiTk9ORSI7CisJY2FzZSBJ OTE1X1RJTElOR19YOiAgICByZXR1cm4gIlgiOworCWNhc2UgSTkxNV9USUxJTkdfWTogICAgcmV0 dXJuICJZIjsKKwljYXNlIEk5MTVfVElMSU5HX1lmOiAgIHJldHVybiAiWWYiOworCWNhc2UgSTkx NV9USUxJTkdfWXM6ICAgcmV0dXJuICJZcyI7CisJZGVmYXVsdDogICAgICAgICAgICAgICByZXR1 cm4gIlVOS05PV04iOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJvb2xfc3RyKGJvb2wg dikKK3sKKwlyZXR1cm4gdiA/ICJ5ZXMiIDogIm5vIjsKK30KKworc3RhdGljIGlubGluZSBib29s IGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRp bGluZykKK3sKKwlyZXR1cm4gYm9wcy0+c3VwcG9ydGVkX2h3X3RpbGVzICYgVElMRV9ERUYodGls aW5nKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX3RpbGluZ19zdXBwb3J0ZWQoc3RydWN0 IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKK3sKKwlyZXR1cm4gYm9wcy0+c3VwcG9y dGVkX3RpbGVzICYgVElMRV9ERUYodGlsaW5nKTsKK30KKworc3RhdGljIGludCBfX2dlbV9nZXRf dGlsaW5nKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nICphcmcpCit7CisJ aW50IGVycjsKKworCWVyciA9IDA7CisJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVf R0VNX0dFVF9USUxJTkcsIGFyZykpCisJCWVyciA9IC1lcnJubzsKKwllcnJubyA9IDA7CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbCBfX2dldF90aWxpbmcoaW50IGZkLCB1aW50MzJf dCBoYW5kbGUsIHVpbnQzMl90ICp0aWxpbmcsCisJCQkgdWludDMyX3QgKnN3aXp6bGUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nIGdldF90aWxpbmc7CisKKwltZW1zZXQoJmdl dF90aWxpbmcsIDAsIHNpemVvZihnZXRfdGlsaW5nKSk7CisJZ2V0X3RpbGluZy5oYW5kbGUgPSBo YW5kbGU7CisKKwlpZiAoX19nZW1fZ2V0X3RpbGluZyhmZCwgJmdldF90aWxpbmcpICE9IDApCisJ CXJldHVybiBmYWxzZTsKKworCSp0aWxpbmcgPSBnZXRfdGlsaW5nLnRpbGluZ19tb2RlOworCSpz d2l6emxlID0gZ2V0X3RpbGluZy5zd2l6emxlX21vZGU7CisJaWd0X2RlYnVnKCJidWYgdGlsaW5n OiAlcywgc3dpenpsZTogJXgsIHBoeXNfc3dpenpsZTogJXhcbiIsCisJCSAgdGlsaW5nX3N0cihn ZXRfdGlsaW5nLnRpbGluZ19tb2RlKSwKKwkJICBnZXRfdGlsaW5nLnN3aXp6bGVfbW9kZSwKKwkJ ICBnZXRfdGlsaW5nLnBoeXNfc3dpenpsZV9tb2RlKTsKKworCXJldHVybiBnZXRfdGlsaW5nLnBo eXNfc3dpenpsZV9tb2RlID09IGdldF90aWxpbmcuc3dpenpsZV9tb2RlOworfQorCitzdGF0aWMg aW50IF9fc2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgdGlsaW5n LAorCQkJdWludDMyX3Qgc3RyaWRlKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGlu ZyBzdDsKKworCXN0LmhhbmRsZSA9IGhhbmRsZTsKKwlzdC50aWxpbmdfbW9kZSA9IHRpbGluZzsK KwlzdC5zdHJpZGUgPSB0aWxpbmcgPyBzdHJpZGUgOiAwOworCisJcmV0dXJuIGlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRU1fU0VUX1RJTElORywgJnN0KTsKK30KKworc3RhdGljIHZvaWQgc2V0 X2h3X3RpbGVkKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7 CisJaW50IHJldDsKKworCWlmIChidWYtPnRpbGluZyAhPSBJOTE1X1RJTElOR19YICYmIGJ1Zi0+ dGlsaW5nICE9IEk5MTVfVElMSU5HX1kpCisJCXJldHVybjsKKworCWlmICghYnVmX29wc19oYXNf aHdfZmVuY2UoYm9wcywgYnVmLT50aWxpbmcpKQorCQlyZXR1cm47CisKKwlyZXQgPSBfX3NldF90 aWxpbmcoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCBidWYtPnRpbGluZywgYnVmLT5zdHJpZGUpOwor CWlndF9hc3NlcnQocmV0ID09IDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzd2l6emxl X2JpdCh1bnNpZ25lZCBpbnQgYml0LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4g KG9mZnNldCAmICgxdWwgPDwgYml0KSkgPj4gKGJpdCAtIDYpOworfQorCitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBzd2l6emxlX2FkZHIodm9pZCAqcHRyLCB1aW50MzJfdCBzd2l6emxlKQoreworCXVu c2lnbmVkIGxvbmcgYWRkciA9IHRvX3VzZXJfcG9pbnRlcihwdHIpOworCisJc3dpdGNoIChzd2l6 emxlKSB7CisJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORToKKwkJcmV0dXJuIGFkZHI7CisJ Y2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOToKKwkJcmV0dXJuIGFkZHIgXiBzd2l6emxlX2JpdCg5 LCBhZGRyKTsKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOgorCQlyZXR1cm4gYWRkciBe IHN3aXp6bGVfYml0KDksIGFkZHIpIF4gc3dpenpsZV9iaXQoMTAsIGFkZHIpOworCWNhc2UgSTkx NV9CSVRfNl9TV0laWkxFXzlfMTE6CisJCXJldHVybiBhZGRyIF4gc3dpenpsZV9iaXQoOSwgYWRk cikgXiBzd2l6emxlX2JpdCgxMSwgYWRkcik7CisJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8x MF8xMToKKwkJcmV0dXJuIChhZGRyIF4KKwkJCXN3aXp6bGVfYml0KDksIGFkZHIpIF4KKwkJCXN3 aXp6bGVfYml0KDEwLCBhZGRyKSBeCisJCQlzd2l6emxlX2JpdCgxMSwgYWRkcikpOworCisJY2Fz ZSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjoKKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85 XzE3OgorCWNhc2UgSTkxNV9CSVRfNl9TV0laWkxFXzlfMTBfMTc6CisJZGVmYXVsdDoKKwkJLyog SWYgd2UgaGl0IHRoaXMgY2FzZSwgd2UgbmVlZCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhl CisJCSAqIGFwcHJvcHJpYXRlIHN3aXp6bGluZyBtZXRob2QuICovCisJCWlndF9yZXF1aXJlKGZh bHNlKTsKKwkJcmV0dXJuIGFkZHI7CisJfQorfQorCitzdGF0aWMgdm9pZCAqeF9wdHIodm9pZCAq cHRyLAorCQkgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksCisJCSAgIHVuc2lnbmVk IGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjcHApCit7CisJY29uc3QgaW50IHRpbGVfd2lkdGgg PSA1MTI7CisJY29uc3QgaW50IHRpbGVfaGVpZ2h0ID0gODsKKwljb25zdCBpbnQgdGlsZV9zaXpl ID0gdGlsZV93aWR0aCAqIHRpbGVfaGVpZ2h0OworCWludCB0aWxlX3gsIHRpbGVfeTsKKwlpbnQg b2Zmc2V0X3gsIG9mZnNldF95LCBwb3M7CisKKwl4ICo9IGNwcDsKKwl0aWxlX3ggPSB4IC8gdGls ZV93aWR0aDsKKwl0aWxlX3kgPSB5IC8gdGlsZV9oZWlnaHQ7CisJb2Zmc2V0X3ggPSAodGlsZV94 ICogdGlsZV9zaXplKTsKKwlvZmZzZXRfeSA9ICh0aWxlX3kgKiBzdHJpZGUgKiB0aWxlX2hlaWdo dCk7CisKKwlwb3MgPSBvZmZzZXRfeSArIG9mZnNldF94ICsKKwkJCSh5ICUgdGlsZV9oZWlnaHQg KiB0aWxlX3dpZHRoKSArICh4ICUgdGlsZV93aWR0aCk7CisKKwlyZXR1cm4gcHRyICsgcG9zOwor fQorCitzdGF0aWMgdm9pZCAqeV9wdHIodm9pZCAqcHRyLAorCQkgICB1bnNpZ25lZCBpbnQgeCwg dW5zaWduZWQgaW50IHksCisJCSAgIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBj cHApCit7CisJY29uc3QgaW50IHRpbGVfd2lkdGggPSAxMjg7CisJY29uc3QgaW50IHRpbGVfaGVp Z2h0ID0gMzI7CisJY29uc3QgaW50IG93b3JkcyA9IDE2OworCWNvbnN0IGludCB0aWxlX3NpemUg PSB0aWxlX3dpZHRoICogdGlsZV9oZWlnaHQ7CisJaW50IHRpbGVfeCwgdGlsZV95OworCWludCBv ZmZzZXRfeCwgb2Zmc2V0X3ksIHBvczsKKwlpbnQgc2hpZnRfeCwgc2hpZnRfeTsKKworCXggKj0g Y3BwOworCXRpbGVfeCA9IHggLyB0aWxlX3dpZHRoOworCXRpbGVfeSA9IHkgLyB0aWxlX2hlaWdo dDsKKwlvZmZzZXRfeCA9IHRpbGVfeCAqIHRpbGVfc2l6ZTsKKwlvZmZzZXRfeSA9IHRpbGVfeSAq IHN0cmlkZSAqIHRpbGVfaGVpZ2h0OworCXNoaWZ0X3ggPSB4ICUgb3dvcmRzICsgKHggJSB0aWxl X3dpZHRoKSAvIG93b3JkcyAqIHRpbGVfd2lkdGggKiBjcHA7CisJc2hpZnRfeSA9IHkgJSB0aWxl X2hlaWdodCAqIG93b3JkczsKKworCXBvcyA9IG9mZnNldF95ICsgb2Zmc2V0X3ggKyBzaGlmdF94 ICsgc2hpZnRfeTsKKworCXJldHVybiBwdHIgKyBwb3M7Cit9CisKK3N0YXRpYyB2b2lkICp5Zl9w dHIodm9pZCAqcHRyLAorCQkgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkg ICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKK3sKKwljb25zdCBpbnQg dGlsZV9zaXplID0gNCAqIDEwMjQ7CisJY29uc3QgaW50IHRpbGVfd2lkdGggPSAxMjg7CisJaW50 IHJvd19zaXplID0gKHN0cmlkZSAvIHRpbGVfd2lkdGgpICogdGlsZV9zaXplOworCisJeCAqPSBj cHA7IC8qIGNvbnZlcnQgdG8gQnl0ZSBvZmZzZXQgKi8KKworCisJLyoKKwkgKiBXaXRoaW4gYSA0 ayBZZiB0aWxlLCB0aGUgYnl0ZSBzd2l6emxpbmcgcGF0dGVybiBpcworCSAqIG1zYi4uLi4uLmxz YgorCSAqIHh5eHl4eXl5eHh4eAorCSAqIFRoZSB0aWxlcyB0aGVtc2VsdmVzIGFyZSBsYWlkIG91 dCBpbiByb3cgbWFqb3Igb3JkZXIuCisJICovCisJcmV0dXJuIHB0ciArCisJCQkoKHggJiAweGYp ICogMSkgKyAvKiA0eDEgcGl4ZWxzKDMyYnBwKSA9IDE2QiAqLworCQkJKCh5ICYgMHgzKSAqIDE2 KSArIC8qIDR4NCBwaXhlbHMgPSA2NEIgKi8KKwkJCSgoKHkgJiAweDQpID4+IDIpICogNjQpICsg LyogMXgyIDY0QiBibG9ja3MgKi8KKwkJCSgoKHggJiAweDEwKSA+PiA0KSAqIDEyOCkgKyAvKiAy eDIgNjRCIGJsb2NrcyA9IDI1NkIgYmxvY2sgKi8KKwkJCSgoKHkgJiAweDgpID4+IDMpICogMjU2 KSArIC8qIDJ4MSAyNTZCIGJsb2NrcyAqLworCQkJKCgoeCAmIDB4MjApID4+IDUpICogNTEyKSAr IC8qIDJ4MiAyNTZCIGJsb2NrcyAqLworCQkJKCgoeSAmIDB4MTApID4+IDQpICogMTAyNCkgKyAv KiA0eDIgMjU2IGJsb2NrcyAqLworCQkJKCgoeCAmIDB4NDApID4+IDYpICogMjA0OCkgKyAvKiA0 eDQgMjU2QiBibG9ja3MgPSA0ayB0aWxlICovCisJCQkoKCh4ICYgfjB4N2YpID4+IDcpICogdGls ZV9zaXplKSArIC8qIHJvdyBvZiB0aWxlcyAqLworCQkJKCgoeSAmIH4weDFmKSA+PiA1KSAqIHJv d19zaXplKTsKK30KKwordHlwZWRlZiB2b2lkICooKmZuX3B0cikodm9pZCAqLCB1bnNpZ25lZCBp bnQsIHVuc2lnbmVkIGludCwKKwkJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0YXRp YyBmbl9wdHIgX19nZXRfdGlsZV9mbl9wdHIoaW50IHRpbGluZykKK3sKKwlmbl9wdHIgZm4gPSBO VUxMOworCisJc3dpdGNoICh0aWxpbmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWZuID0g eF9wdHI7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJZm4gPSB5X3B0cjsKKwkJ YnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZZjoKKwkJZm4gPSB5Zl9wdHI7CisJCWJyZWFrOwor CWNhc2UgSTkxNV9USUxJTkdfWXM6CisJCS8qIFRvIGJlIGltcGxlbWVudGVkICovCisJCWJyZWFr OworCX0KKworCWlndF9hc3NlcnRfZihmbiwgIkNhbid0IGZpbmQgdGlsZSBmdW5jdGlvbiBmb3Ig dGlsaW5nOiAlZFxuIiwgdGlsaW5nKTsKKworCXJldHVybiBmbjsKK30KKworc3RhdGljIHZvaWQg X19jb3B5X2xpbmVhcl90byhpbnQgZmQsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAg Y29uc3QgdWludDMyX3QgKmxpbmVhciwKKwkJCSAgICAgaW50IHRpbGluZywgdWludDMyX3Qgc3dp enpsZSkKK3sKKwlpbnQgaGVpZ2h0ID0gaW50ZWxfYnVmX2hlaWdodChidWYpOworCWludCB3aWR0 aCA9IGludGVsX2J1Zl93aWR0aChidWYpOworCWZuX3B0ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRy KHRpbGluZyk7CisJdm9pZCAqbWFwOworCisJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+aGFuZGxl LAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisK KwltYXAgPSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkg ICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJaWYgKCFtYXApCisJCW1h cCA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+aGFuZGxlLCAwLAorCQkJCSAgICBidWYtPnNpemUs IFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7 IHkrKykgeworCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKwkJCXVpbnQzMl90 ICpwdHIgPSBmbihtYXAsIHgsIHksIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcC84KTsKKworCQkJaWYg KHN3aXp6bGUpCisJCQkJcHRyID0gZnJvbV91c2VyX3BvaW50ZXIoc3dpenpsZV9hZGRyKHB0ciwK KwkJCQkJCQkJICAgICBzd2l6emxlKSk7CisJCQkqcHRyID0gbGluZWFyW3kgKiB3aWR0aCArIHhd OworCQl9CisJfQorCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQg Y29weV9saW5lYXJfdG9feChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAq YnVmLAorCQkJICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCURFQlVHRk4oKTsKKwlfX2NvcHlf bGluZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWCwgYm9wcy0+c3dp enpsZV94KTsKK30KKworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feShzdHJ1Y3QgYnVmX29w cyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICB1aW50MzJfdCAqbGluZWFy KQoreworCURFQlVHRk4oKTsKKwlfX2NvcHlfbGluZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVh ciwgSTkxNV9USUxJTkdfWSwgYm9wcy0+c3dpenpsZV95KTsKK30KKworc3RhdGljIHZvaWQgY29w eV9saW5lYXJfdG9feWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJREVCVUdGTigpOworCV9fY29weV9s aW5lYXJfdG8oYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZZiwgMCk7Cit9CisK K3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3lzKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1 Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCURFQlVH Rk4oKTsKKwlfX2NvcHlfbGluZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJ TkdfWXMsIDApOworfQorCitzdGF0aWMgdm9pZCBfX2NvcHlfdG9fbGluZWFyKGludCBmZCwgc3Ry dWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICB1aW50MzJfdCAqbGluZWFyLCBpbnQgdGlsaW5n LCB1aW50MzJfdCBzd2l6emxlKQoreworCWludCBoZWlnaHQgPSBpbnRlbF9idWZfaGVpZ2h0KGJ1 Zik7CisJaW50IHdpZHRoID0gaW50ZWxfYnVmX3dpZHRoKGJ1Zik7CisJZm5fcHRyIGZuID0gX19n ZXRfdGlsZV9mbl9wdHIodGlsaW5nKTsKKwl2b2lkICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihm ZCwgYnVmLT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOworCisJbWFwID0gX19nZW1f bW1hcF9vZmZzZXRfX2NwdShmZCwgYnVmLT5oYW5kbGUsIDAsIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFE KTsKKwlpZiAoIW1hcCkKKwkJbWFwID0gZ2VtX21tYXBfX2NwdShmZCwgYnVmLT5oYW5kbGUsIDAs IGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEKTsKKworCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5 KyspIHsKKwkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisJCQl1aW50MzJfdCAq cHRyID0gZm4obWFwLCB4LCB5LCBidWYtPnN0cmlkZSwgYnVmLT5icHAvOCk7CisKKwkJCWlmIChz d2l6emxlKQorCQkJCXB0ciA9IGZyb21fdXNlcl9wb2ludGVyKHN3aXp6bGVfYWRkcihwdHIsCisJ CQkJCQkJCSAgICAgc3dpenpsZSkpOworCQkJbGluZWFyW3kgKiB3aWR0aCArIHhdID0gKnB0cjsK KwkJfQorCX0KKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNv cHlfeF90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZOKCk7CisJX19jb3B5X3Rv X2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1gsIGJvcHMtPnN3aXp6 bGVfeCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfeV90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMg KmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikK K3sKKwlERUJVR0ZOKCk7CisJX19jb3B5X3RvX2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIs IEk5MTVfVElMSU5HX1ksIGJvcHMtPnN3aXp6bGVfeSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlf eWZfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYs CisJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCURFQlVHRk4oKTsKKwlfX2NvcHlfdG9f bGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWWYsIDApOworfQorCitz dGF0aWMgdm9pZCBjb3B5X3lzX3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0 IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlERUJVR0ZO KCk7CisJX19jb3B5X3RvX2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5H X1lzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9fZ3R0KHN0cnVjdCBidWZf b3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxp bmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlERUJVR0ZOKCk7CisKKwlnZW1fc2V0X2RvbWFpbihi b3BzLT5mZCwgYnVmLT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1 X0dFTV9ET01BSU5fR1RUKTsKKworCW1hcCA9IGdlbV9tbWFwX19ndHQoYm9wcy0+ZmQsIGJ1Zi0+ aGFuZGxlLAorCQkJICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlt ZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUp OworfQorCitzdGF0aWMgdm9pZCBjb3B5X2d0dF90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJv cHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQor eworCXZvaWQgKm1hcDsKKworCURFQlVHRk4oKTsKKworCWdlbV9zZXRfZG9tYWluKGJvcHMtPmZk LCBidWYtPmhhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOworCisJbWFw ID0gZ2VtX21tYXBfX2d0dChib3BzLT5mZCwgYnVmLT5oYW5kbGUsCisJCQkgICAgYnVmLT5zaXpl LCBQUk9UX1JFQUQpOworCisJaWd0X21lbWNweV9mcm9tX3djKGxpbmVhciwgbWFwLCBidWYtPnNp emUpOworCisJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weV9s aW5lYXJfdG9fd2Moc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwK KwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJdm9pZCAqbWFwOworCisJREVCVUdGTigp OworCisJZ2VtX3NldF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAorCQkgICAgICAgSTkx NV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisKKwltYXAgPSBfX2dlbV9t bWFwX29mZnNldF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAorCQkJCSAgICBidWYtPnNp emUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCWlmICghbWFwKQorCQltYXAgPSBnZW1fbW1h cF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAorCQkJCSAgIGJ1Zi0+c2l6ZSwgUFJPVF9S RUFEIHwgUFJPVF9XUklURSk7CisKKwltZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+c2l6ZSk7CisK KwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3djX3RvX2xp bmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAg ICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlERUJVR0ZOKCk7CisKKwln ZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVmLT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9E T01BSU5fR1RULCAwKTsKKworCW1hcCA9IF9fZ2VtX21tYXBfb2Zmc2V0X193Yyhib3BzLT5mZCwg YnVmLT5oYW5kbGUsIDAsCisJCQkJICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEKTsKKwlpZiAoIW1h cCkKKwkJbWFwID0gZ2VtX21tYXBfX3djKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkg ICBidWYtPnNpemUsIFBST1RfUkVBRCk7CisKKwlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBt YXAsIGJ1Zi0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPnNpemUpOworfQorCitzdGF0aWMg dm9pZCBjb3B5X2xpbmVhcl90b19jcHUoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRl bF9idWYgKmJ1ZiwKKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsK KworCURFQlVHRk4oKTsKKworCWdlbV9zZXRfZG9tYWluKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwK KwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJTl9DUFUpOworCisJ bWFwID0gX19nZW1fbW1hcF9vZmZzZXRfX2NwdShib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCisJ CQkJICAgICBidWYtPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCWlmICghbWFwKQor CQltYXAgPSBnZW1fbW1hcF9fY3B1KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAg YnVmLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKworCW1lbWNweShtYXAsIGxpbmVh ciwgYnVmLT5zaXplKTsKKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2 b2lkIGNvcHlfY3B1X3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVs X2J1ZiAqYnVmLAorCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJdm9pZCAqbWFwOwor CisJREVCVUdGTigpOworCisJZ2VtX3NldF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAor CQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisKKwltYXAgPSBfX2dlbV9tbWFwX29m ZnNldF9fY3B1KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKKwkJCQkgICAgIGJ1Zi0+c2l6ZSwg UFJPVF9SRUFEKTsKKwlpZiAoIW1hcCkKKwkJbWFwID0gZ2VtX21tYXBfX2NwdShib3BzLT5mZCwg YnVmLT5oYW5kbGUsIDAsCisJCQkJICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEKTsKKworCW1lbWNw eShsaW5lYXIsIG1hcCwgYnVmLT5zaXplKTsKKworCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cit9 CisKK3ZvaWQgaW50ZWxfYnVmX3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0 IGludGVsX2J1ZiAqYnVmLAorCQkJIHVpbnQzMl90ICpsaW5lYXIpCit7CisJaWd0X2Fzc2VydChi b3BzKTsKKworCXN3aXRjaCAoYnVmLT50aWxpbmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX05PTkU6 CisJCWlndF9hc3NlcnQoYm9wcy0+dG9fbGluZWFyKTsKKwkJYm9wcy0+dG9fbGluZWFyKGJvcHMs IGJ1ZiwgbGluZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19YOgorCQlpZ3RfYXNz ZXJ0KGJvcHMtPnhfdG9fbGluZWFyKTsKKwkJYm9wcy0+eF90b19saW5lYXIoYm9wcywgYnVmLCBs aW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWlndF9hc3NlcnQoYm9w cy0+eV90b19saW5lYXIpOworCQlib3BzLT55X3RvX2xpbmVhcihib3BzLCBidWYsIGxpbmVhcik7 CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWWY6CisJCWlndF9hc3NlcnQoYm9wcy0+eWZf dG9fbGluZWFyKTsKKwkJYm9wcy0+eWZfdG9fbGluZWFyKGJvcHMsIGJ1ZiwgbGluZWFyKTsKKwkJ YnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZczoKKwkJaWd0X2Fzc2VydChib3BzLT55c190b19s aW5lYXIpOworCQlib3BzLT55c190b19saW5lYXIoYm9wcywgYnVmLCBsaW5lYXIpOworCQlicmVh azsKKwl9Cit9CisKK3ZvaWQgbGluZWFyX3RvX2ludGVsX2J1ZihzdHJ1Y3QgYnVmX29wcyAqYm9w cywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJIHVpbnQzMl90ICpsaW5lYXIpCit7CisJaWd0 X2Fzc2VydChib3BzKTsKKworCXN3aXRjaCAoYnVmLT50aWxpbmcpIHsKKwljYXNlIEk5MTVfVElM SU5HX05PTkU6CisJCWlndF9hc3NlcnQoYm9wcy0+bGluZWFyX3RvKTsKKwkJYm9wcy0+bGluZWFy X3RvKGJvcHMsIGJ1ZiwgbGluZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19YOgor CQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90b194KTsKKwkJYm9wcy0+bGluZWFyX3RvX3goYm9w cywgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWlndF9h c3NlcnQoYm9wcy0+bGluZWFyX3RvX3kpOworCQlib3BzLT5saW5lYXJfdG9feShib3BzLCBidWYs IGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWWY6CisJCWlndF9hc3NlcnQo Ym9wcy0+bGluZWFyX3RvX3lmKTsKKwkJYm9wcy0+bGluZWFyX3RvX3lmKGJvcHMsIGJ1ZiwgbGlu ZWFyKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZczoKKwkJaWd0X2Fzc2VydChib3Bz LT5saW5lYXJfdG9feXMpOworCQlib3BzLT5saW5lYXJfdG9feXMoYm9wcywgYnVmLCBsaW5lYXIp OworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW50ZWxfYnVmX2luaXQoc3RydWN0 IGJ1Zl9vcHMgKmJvcHMsCisJCQkgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgc3RydWN0 IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAs CisJCQkgICAgIHVpbnQzMl90IHJlcV90aWxpbmcsIGJvb2wgY29tcHJlc3Npb24pCit7CisJdWlu dDMyX3QgdGlsaW5nID0gcmVxX3RpbGluZzsKKwl1aW50MzJfdCBzaXplOworCisJaWd0X2Fzc2Vy dChib3BzKTsKKwlpZ3RfYXNzZXJ0KGJ1Zik7CisJaWd0X2Fzc2VydCh3aWR0aCA+IDAgJiYgaGVp Z2h0ID4gMCk7CisJaWd0X2Fzc2VydChicHAgPT0gOCB8fCBicHAgPT0gMTYgfHwgYnBwID09IDMy KTsKKworCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisKKwlpZiAoY29tcHJlc3Npb24p IHsKKwkJaW50IGF1eF93aWR0aCwgYXV4X2hlaWdodDsKKworCQlpZ3RfcmVxdWlyZShib3BzLT5p bnRlbF9nZW4gPj0gOSk7CisJCWlndF9hc3NlcnQocmVxX3RpbGluZyA9PSBJOTE1X1RJTElOR19Z IHx8CisJCQkgICByZXFfdGlsaW5nID09IEk5MTVfVElMSU5HX1lmKTsKKworCQkvKgorCQkgKiBP biBHRU4xMisgd2UgYWxpZ24gdGhlIG1haW4gc3VyZmFjZSB0byA0ICogNCBtYWluIHN1cmZhY2UK KwkJICogdGlsZXMsIHdoaWNoIGlzIDY0a0IuIFRoZXNlIDE2IHRpbGVzIGFyZSBtYXBwZWQgYnkg NCBBVVgKKwkJICogQ0NTIHVuaXRzLCB0aGF0IGlzIDQgKiA2NCBieXRlcy4gVGhlc2UgNCBDQ1Mg dW5pdHMgYXJlIGluCisJCSAqIHR1cm4gbWFwcGVkIGJ5IG9uZSBMMSBBVVggcGFnZSB0YWJsZSBl bnRyeS4KKwkJICovCisJCWlmIChib3BzLT5pbnRlbF9nZW4gPj0gMTIpCisJCQlidWYtPnN0cmlk ZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjggKiA0KTsKKwkJZWxzZQorCQkJYnVmLT5z dHJpZGUgPSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKKworCQlpZiAoYm9wcy0+aW50 ZWxfZ2VuID49IDEyKQorCQkJaGVpZ2h0ID0gQUxJR04oaGVpZ2h0LCA0ICogMzIpOworCisJCWJ1 Zi0+c2l6ZSA9IGJ1Zi0+c3RyaWRlICogaGVpZ2h0OworCQlidWYtPnRpbGluZyA9IHRpbGluZzsK KwkJYnVmLT5icHAgPSBicHA7CisJCWJ1Zi0+Y29tcHJlc3Npb24gPSBjb21wcmVzc2lvbjsKKwor CQlhdXhfd2lkdGggPSBpbnRlbF9idWZfYXV4X3dpZHRoKGJvcHMtPmludGVsX2dlbiwgYnVmKTsK KwkJYXV4X2hlaWdodCA9IGludGVsX2J1Zl9hdXhfaGVpZ2h0KGJvcHMtPmludGVsX2dlbiwgYnVm KTsKKworCQlidWYtPmF1eC5vZmZzZXQgPSBidWYtPnN0cmlkZSAqIEFMSUdOKGhlaWdodCwgMzIp OworCQlidWYtPmF1eC5zdHJpZGUgPSBhdXhfd2lkdGg7CisKKwkJc2l6ZSA9IGJ1Zi0+YXV4Lm9m ZnNldCArIGF1eF93aWR0aCAqIGF1eF9oZWlnaHQ7CisKKwl9IGVsc2UgeworCQlidWYtPnN0cmlk ZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOworCQlidWYtPnNpemUgPSBidWYtPnN0 cmlkZSAqIGhlaWdodDsKKwkJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJCWJ1Zi0+YnBwID0gYnBw OworCisJCXNpemUgPSBidWYtPnN0cmlkZSAqIEFMSUdOKGhlaWdodCwgMzIpOworCX0KKworCWlm IChoYW5kbGUpCisJCWJ1Zi0+aGFuZGxlID0gaGFuZGxlOworCWVsc2UKKwkJYnVmLT5oYW5kbGUg PSBnZW1fY3JlYXRlKGJvcHMtPmZkLCBzaXplKTsKKworCXNldF9od190aWxlZChib3BzLCBidWYp OworfQorCisvKioKKyAqIGludGVsX2J1Zl9pbml0CisgKiBAYm9wczogcG9pbnRlciB0byBidWZf b3BzCisgKiBAYnVmOiBwb2ludGVyIHRvIGludGVsX2J1ZiBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVk CisgKiBAd2lkdGg6IHN1cmZhY2Ugd2lkdGgKKyAqIEBoZWlnaHQ6IHN1cmZhY2UgaGVpZ2h0Cisg KiBAYnBwOiBiaXRzLXBlci1waXhlbCAoOCAvIDE2IC8gMzIpCisgKiBAdGlsaW5nOiBzdXJmYWNl IHRpbGluZworICogQGNvbXByZXNzaW9uOiBzdXJmYWNlIGNvbXByZXNzaW9uIGZsYWcgb24gLyBv ZmYKKyAqCisgKiBGdW5jdGlvbiBjcmVhdGVzIG5ldyBCTyB3aXRoaW4gaW50ZWxfYnVmIHN0cnVj dHVyZSBhbmQgZmlsbHMgYWxsCisgKiBzdHJ1Y3R1cmUgZmllbGRzLgorICoKKyAqIE5vdGUuIEZv ciBYIC8gWSBpZiBHUFUgc3VwcG9ydHMgZmVuY2VzIEhXIHRpbGluZyBpcyBjb25maWd1cmVkLgor ICovCit2b2lkIGludGVsX2J1Zl9pbml0KHN0cnVjdCBidWZfb3BzICpib3BzLAorCQkgICAgc3Ry dWN0IGludGVsX2J1ZiAqYnVmLAorCQkgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBw LAorCQkgICAgdWludDMyX3QgdGlsaW5nLCBib29sIGNvbXByZXNzaW9uKQoreworCV9faW50ZWxf YnVmX2luaXQoYm9wcywgMCwgYnVmLCB3aWR0aCwgaGVpZ2h0LCBicHAsIHRpbGluZywKKwkJCSBj b21wcmVzc2lvbik7Cit9CisKKy8qKgorICogaW50ZWxfYnVmX2Nsb3NlCisgKiBAYm9wczogcG9p bnRlciB0byBidWZfb3BzCisgKiBAYnVmOiBwb2ludGVyIHRvIGludGVsX2J1ZiBzdHJ1Y3R1cmUK KyAqCisgKiBGdW5jdGlvbiBjbG9zZXMgZ2VtIEJPIGluc2lkZSBpbnRlbF9idWYuCisgKi8KK3Zv aWQgaW50ZWxfYnVmX2Nsb3NlKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVm ICpidWYpCit7CisJaWd0X2Fzc2VydChib3BzKTsKKwlpZ3RfYXNzZXJ0KGJ1Zik7CisKKwlnZW1f Y2xvc2UoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlKTsKK30KKworLyoqCisgKiBpbnRlbF9idWZfaW5p dF91c2luZ19oYW5kbGUKKyAqIEBib3BzOiBwb2ludGVyIHRvIGJ1Zl9vcHMKKyAqIEBoYW5kbGU6 IEJPIGhhbmRsZSBjcmVhdGVkIGJ5IHRoZSBjYWxsZXIKKyAqIEBidWY6IHBvaW50ZXIgdG8gaW50 ZWxfYnVmIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQKKyAqIEB3aWR0aDogc3VyZmFjZSB3aWR0aAor ICogQGhlaWdodDogc3VyZmFjZSBoZWlnaHQKKyAqIEBicHA6IGJpdHMtcGVyLXBpeGVsICg4IC8g MTYgLyAzMikKKyAqIEB0aWxpbmc6IHN1cmZhY2UgdGlsaW5nCisgKiBAY29tcHJlc3Npb246IHN1 cmZhY2UgY29tcHJlc3Npb24gZmxhZyBvbiAvIG9mZgorICoKKyAqIEZ1bmN0aW9uIGNvbmZpZ3Vy ZXMgQk8gaGFuZGxlIHdpdGhpbiBpbnRlbF9idWYgc3RydWN0dXJlIHBhc3NlZCBieSB0aGUgY2Fs bGVyCisgKiAod2l0aCBhbGwgaXRzIG1ldGFkYXRhIC0gd2lkdGgsIGhlaWdodCwgLi4uKS4gVXNl ZnVsIGlmIEJPIHdhcyBjcmVhdGVkCisgKiBvdXRzaWRlLgorICoKKyAqIE5vdGU6IGludGVsX2J1 Zl9jbG9zZSgpIGNhbiBiZSB1c2VkIHRvIGNsb3NlIHRoZSBCTyBoYW5kbGUsIGJ1dCBjYWxsZXIK KyAqIG11c3QgYmUgYXdhcmUgdG8gbm90IGNsb3NlIHRoZSBCTyB0d2ljZS4KKyAqLwordm9pZCBp bnRlbF9idWZfaW5pdF91c2luZ19oYW5kbGUoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCisJCQkJIHVp bnQzMl90IGhhbmRsZSwKKwkJCQkgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJCSBpbnQgd2lk dGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCQkJIHVpbnQzMl90IHJlcV90aWxpbmcsIGJvb2wg Y29tcHJlc3Npb24pCit7CisJX19pbnRlbF9idWZfaW5pdChib3BzLCBoYW5kbGUsIGJ1Ziwgd2lk dGgsIGhlaWdodCwgYnBwLCByZXFfdGlsaW5nLAorCQkJIGNvbXByZXNzaW9uKTsKK30KKworI2Rl ZmluZSBERUZBVUxUX0JVRk9QUyhfX2dlbl9zdGFydCwgX19nZW5fZW5kKSBcCisJLmdlbl9zdGFy dCAgICAgICAgICA9IF9fZ2VuX3N0YXJ0LCBcCisJLmdlbl9lbmQgICAgICAgICAgICA9IF9fZ2Vu X2VuZCwgXAorCS5zdXBwb3J0ZWRfaHdfdGlsZXMgPSBUSUxFX1ggfCBUSUxFX1ksIFwKKwkubGlu ZWFyX3RvX3ggICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0LCBcCisJLmxpbmVhcl90b195ICAg ICAgICA9IGNvcHlfbGluZWFyX3RvX2d0dCwgXAorCS5saW5lYXJfdG9feWYgICAgICAgPSBjb3B5 X2xpbmVhcl90b195ZiwgXAorCS5saW5lYXJfdG9feXMgICAgICAgPSBjb3B5X2xpbmVhcl90b195 cywgXAorCS54X3RvX2xpbmVhciAgICAgICAgPSBjb3B5X2d0dF90b19saW5lYXIsIFwKKwkueV90 b19saW5lYXIgICAgICAgID0gY29weV9ndHRfdG9fbGluZWFyLCBcCisJLnlmX3RvX2xpbmVhciAg ICAgICA9IGNvcHlfeWZfdG9fbGluZWFyLCBcCisJLnlzX3RvX2xpbmVhciAgICAgICA9IGNvcHlf eXNfdG9fbGluZWFyCisKK3N0cnVjdCBidWZfb3BzIGJ1Zl9vcHNfYXJyW10gPSB7CisJLyogR2Vu ZXJhdGlvbnMgMCAtIDggKi8KK3sKKwlERUZBVUxUX0JVRk9QUygwLCA4KSwKKwkuc3VwcG9ydGVk X3RpbGVzICAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9ZLAorCS5saW5lYXJfdG8gICAg ICAgICAgPSBjb3B5X2xpbmVhcl90b19jcHUsCisJLnRvX2xpbmVhciAgICAgICAgICA9IGNvcHlf Y3B1X3RvX2xpbmVhciwKK30sCisvKiBHZW5lcmF0aW9ucyA5IC0gMTEgKi8KK3sKKwlERUZBVUxU X0JVRk9QUyg5LCAxMSksCisJLnN1cHBvcnRlZF90aWxlcyAgICA9IFRJTEVfTk9ORSB8IFRJTEVf WCB8IFRJTEVfWSB8IFRJTEVfWWYsCisJLmxpbmVhcl90byAgICAgICAgICA9IGNvcHlfbGluZWFy X3RvX2NwdSwKKwkudG9fbGluZWFyICAgICAgICAgID0gY29weV9jcHVfdG9fbGluZWFyLAorfSwK Ky8qIEdlbmVyYXRpb24gMTIgKi8KK3sKKwlERUZBVUxUX0JVRk9QUygxMiwgMTIpLAorCS5zdXBw b3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9ORSB8IFRJTEVfWCB8IFRJTEVfWSB8IFRJTEVfWWYgfCBU SUxFX1lzLAorCS5saW5lYXJfdG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX3djLAorCS50b19s aW5lYXIgICAgICAgICA9IGNvcHlfd2NfdG9fbGluZWFyLAorfSwKK307CisKK3N0YXRpYyBib29s IHByb2JlX2h3X3RpbGluZyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQor eworCXVpbnQ2NF90IHNpemUgPSAyNTYgKiAyNTY7CisJdWludDMyX3QgaGFuZGxlLCBidWZfdGls aW5nLCBidWZfc3dpenpsZTsKKwl1aW50MzJfdCBzdHJpZGU7CisJaW50IHJldDsKKwlib29sIGlz X3NldCA9IGZhbHNlOworCisJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19YKQorCQlzdHJpZGUg PSA1MTI7CisJZWxzZSBpZiAodGlsaW5nID09IEk5MTVfVElMSU5HX1kpCisJCXN0cmlkZSA9IDEy ODsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKKworCWhhbmRsZSA9IGdlbV9jcmVhdGUoYm9wcy0+ ZmQsIHNpemUpOworCisJLyogU2luZ2xlIHNob3QsIGlmIG5vIGZlbmNlcyBhcmUgYXZhaWxhYmxl IHdlIGZhaWwgaW1tZWRpYXRlbHkgKi8KKwlyZXQgPSBfX3NldF90aWxpbmcoYm9wcy0+ZmQsIGhh bmRsZSwgdGlsaW5nLCBzdHJpZGUpOworCWlmIChyZXQpCisJCWdvdG8gZW5kOworCisJaXNfc2V0 ID0gX19nZXRfdGlsaW5nKGJvcHMtPmZkLCBoYW5kbGUsICZidWZfdGlsaW5nLCAmYnVmX3N3aXp6 bGUpOworCWlmIChpc19zZXQpIHsKKwkJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19YKQorCQkJ Ym9wcy0+c3dpenpsZV94ID0gYnVmX3N3aXp6bGU7CisJCWVsc2UgaWYgKHRpbGluZyA9PSBJOTE1 X1RJTElOR19ZKQorCQkJYm9wcy0+c3dpenpsZV95ID0gYnVmX3N3aXp6bGU7CisJfQorZW5kOgor CWdlbV9jbG9zZShib3BzLT5mZCwgaGFuZGxlKTsKKworCXJldHVybiBpc19zZXQ7Cit9CisKK3N0 YXRpYyB2b2lkICphbGxvY19hbGlnbmVkKHVpbnQ2NF90IHNpemUpCit7CisJdm9pZCAqcDsKKwor CWlndF9hc3NlcnRfZXEocG9zaXhfbWVtYWxpZ24oJnAsIDE2LCBzaXplKSwgMCk7CisKKwlyZXR1 cm4gcDsKK30KKworLyoKKyAqIFNpbXBsZSBpZGVtcG90ZW5jeSB0ZXN0IGJldHdlZW4gSFcgLT4g U1cgYW5kIFNXIC0+IEhXIEJPLgorICovCitzdGF0aWMgdm9pZCBpZGVtcG90ZW5jeV9zZWxmdGVz dChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQoreworCXN0cnVjdCBpbnRl bF9idWYgYnVmOworCXVpbnQ4X3QgKmxpbmVhcl9pbiwgKmxpbmVhcl9vdXQsICptYXA7CisJaW50 IGk7CisJY29uc3QgaW50IHdpZHRoID0gNTEyOworCWNvbnN0IGludCBoZWlnaHQgPSA1MTI7CisJ Y29uc3QgaW50IGJwcCA9IDMyOworCWNvbnN0IGludCBzaXplID0gd2lkdGggKiBoZWlnaHQgKiBi cHAgLyA4OworCWJvb2wgc29mdHdhcmVfdGlsaW5nID0gZmFsc2U7CisKKwlpZiAoIWlzX2h3X3Rp bGluZ19zdXBwb3J0ZWQoYm9wcywgdGlsaW5nKSkKKwkJcmV0dXJuOworCisJbGluZWFyX2luID0g YWxsb2NfYWxpZ25lZChzaXplKTsKKwlsaW5lYXJfb3V0ID0gYWxsb2NfYWxpZ25lZChzaXplKTsK KworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWxpbmVhcl9pbltpXSA9IGkgJSAyNTM7 IC8qIHByaW1lIGNob3NlbiBpbnRlbnRpb25hbGx5ICovCisKKwlkbyB7CisJCWlndF9kZWJ1Zygi Q2hlY2tpbmcgaWRlbXBvdGVuY3ksIFNXOiAlcywgSFc6ICVzLCB0aWxpbmc6ICVzXG4iLAorCQkJ ICBib29sX3N0cihzb2Z0d2FyZV90aWxpbmcpLAorCQkJICBib29sX3N0cighc29mdHdhcmVfdGls aW5nKSwKKwkJCSAgdGlsaW5nX3N0cih0aWxpbmcpKTsKKwkJaW50ZWxfYnVmX2luaXQoYm9wcywg JmJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCB0aWxpbmcsIGZhbHNlKTsKKwkJYnVmX29wc19zZXRf c29mdHdhcmVfdGlsaW5nKGJvcHMsIHRpbGluZywgc29mdHdhcmVfdGlsaW5nKTsKKworCQlsaW5l YXJfdG9faW50ZWxfYnVmKGJvcHMsICZidWYsICh1aW50MzJfdCAqKSBsaW5lYXJfaW4pOworCQlt YXAgPSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGJvcHMtPmZkLCBidWYuaGFuZGxlLCAwLAorCQkJ CQkgICBidWYuc2l6ZSwgUFJPVF9SRUFEKTsKKwkJaWYgKCFtYXApCisJCQltYXAgPSBnZW1fbW1h cF9fY3B1KGJvcHMtPmZkLCBidWYuaGFuZGxlLCAwLAorCQkJCQkgICAgYnVmLnNpemUsIFBST1Rf UkVBRCk7CisJCWlndF9hc3NlcnQobWFwKTsKKwkJaWd0X2Fzc2VydChtZW1jbXAobGluZWFyX2lu LCBtYXAsIHNpemUpKTsKKworCQlidWZfb3BzX3NldF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGls aW5nLCAhc29mdHdhcmVfdGlsaW5nKTsKKwkJaW50ZWxfYnVmX3RvX2xpbmVhcihib3BzLCAmYnVm LCAodWludDMyX3QgKikgbGluZWFyX291dCk7CisJCWlndF9hc3NlcnQoIW1lbWNtcChsaW5lYXJf aW4sIGxpbmVhcl9vdXQsIHNpemUpKTsKKworCQltdW5tYXAobWFwLCBzaXplKTsKKwkJaW50ZWxf YnVmX2Nsb3NlKGJvcHMsICZidWYpOworCisJCXNvZnR3YXJlX3RpbGluZyA9ICFzb2Z0d2FyZV90 aWxpbmc7CisJfSB3aGlsZSAoc29mdHdhcmVfdGlsaW5nKTsKKworCWlndF9kZWJ1ZygiSWRlbXBv dGVuY3kgZm9yICVzIHRpbGluZyBPS1xuIiwgdGlsaW5nX3N0cih0aWxpbmcpKTsKKwlidWZfb3Bz X3NldF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGlsaW5nLCBmYWxzZSk7Cit9CisKKy8qKgorICog YnVmX29wc19jcmVhdGUKKyAqIEBmZDogZGV2aWNlIGZpbGVkZXNjcmlwdG9yCisgKgorICogQ3Jl YXRlIGJ1Zl9vcHMgc3RydWN0dXJlIGRlcGVuZGluZyBvbiBmZC1kZXZpY2UgY2FwYWJpbGl0aWVz LgorICoKKyAqIFJldHVybnM6IG9wYXF1ZSBwb2ludGVyIHRvIGJ1Zl9vcHMuCisgKgorICovCitz dHJ1Y3QgYnVmX29wcyAqYnVmX29wc19jcmVhdGUoaW50IGZkKQoreworCXN0cnVjdCBidWZfb3Bz ICpib3BzID0gY2FsbG9jKDEsIHNpemVvZigqYm9wcykpOworCXVpbnQzMl90IGRldmlkOworCWlu dCBnZW5lcmF0aW9uOworCisJaWd0X2Fzc2VydChib3BzKTsKKworCWRldmlkID0gaW50ZWxfZ2V0 X2RybV9kZXZpZChmZCk7CisJZ2VuZXJhdGlvbiA9IGludGVsX2dlbihkZXZpZCk7CisKKwkvKiBQ cmVkZWZpbmVkIHNldHRpbmdzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1 Zl9vcHNfYXJyKTsgaSsrKSB7CisJCWlmIChnZW5lcmF0aW9uID49IGJ1Zl9vcHNfYXJyW2ldLmdl bl9zdGFydCAmJgorCQkJCWdlbmVyYXRpb24gPD0gYnVmX29wc19hcnJbaV0uZ2VuX2VuZCkgewor CQkJbWVtY3B5KGJvcHMsICZidWZfb3BzX2FycltpXSwgc2l6ZW9mKCpib3BzKSk7CisJCQlib3Bz LT5mZCA9IGZkOworCQkJYm9wcy0+aW50ZWxfZ2VuID0gZ2VuZXJhdGlvbjsKKwkJCWlndF9kZWJ1 ZygiZ2VuZXJhdGlvbjogJWQsIHN1cHBvcnRlZCB0aWxlczogMHglMDJ4XG4iLAorCQkJCSAgZ2Vu ZXJhdGlvbiwgYm9wcy0+c3VwcG9ydGVkX3RpbGVzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ LyogTGV0J3MgcHJvYmUgWCBhbmQgWSBodyB0aWxpbmcgc3VwcG9ydCAqLworCWlmIChpc19od190 aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1gpKSB7CisJCWJvb2wgc3VwcG9ydGVk ID0gcHJvYmVfaHdfdGlsaW5nKGJvcHMsIEk5MTVfVElMSU5HX1gpOworCisJCWlndF9kZWJ1Zygi WCBmZW5jZSBzdXBwb3J0OiAlc1xuIiwgYm9vbF9zdHIoc3VwcG9ydGVkKSk7CisJCWlmICghc3Vw cG9ydGVkKSB7CisJCQlib3BzLT5zdXBwb3J0ZWRfaHdfdGlsZXMgJj0gflRJTEVfWDsKKwkJCWJv cHMtPmxpbmVhcl90b194ID0gY29weV9saW5lYXJfdG9feDsKKwkJCWJvcHMtPnhfdG9fbGluZWFy ID0gY29weV94X3RvX2xpbmVhcjsKKwkJfQorCX0KKworCWlmIChpc19od190aWxpbmdfc3VwcG9y dGVkKGJvcHMsIEk5MTVfVElMSU5HX1kpKSB7CisJCWJvb2wgc3VwcG9ydGVkID0gcHJvYmVfaHdf dGlsaW5nKGJvcHMsIEk5MTVfVElMSU5HX1kpOworCisJCWlndF9kZWJ1ZygiWSBmZW5jZSBzdXBw b3J0OiAlc1xuIiwgYm9vbF9zdHIoc3VwcG9ydGVkKSk7CisJCWlmICghc3VwcG9ydGVkKSB7CisJ CQlib3BzLT5zdXBwb3J0ZWRfaHdfdGlsZXMgJj0gflRJTEVfWTsKKwkJCWJvcHMtPmxpbmVhcl90 b195ID0gY29weV9saW5lYXJfdG9feTsKKwkJCWJvcHMtPnlfdG9fbGluZWFyID0gY29weV95X3Rv X2xpbmVhcjsKKwkJfQorCX0KKworCS8qIERpc2FibGUgb3RoZXIgdGlsaW5nIGZvcm1hdCBmdW5j dGlvbnMgaWYgbm90IHN1cHBvcnRlZCAqLworCWlmICghaXNfdGlsaW5nX3N1cHBvcnRlZChib3Bz LCBJOTE1X1RJTElOR19ZZikpIHsKKwkJaWd0X2RlYnVnKCJZZiBmb3JtYXQgbm90IHN1cHBvcnRl ZFxuIik7CisJCWJvcHMtPmxpbmVhcl90b195ZiA9IE5VTEw7CisJCWJvcHMtPnlmX3RvX2xpbmVh ciA9IE5VTEw7CisJfQorCisJaWYgKCFpc190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElM SU5HX1lzKSkgeworCQlpZ3RfZGVidWcoIllzIGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJ Ym9wcy0+bGluZWFyX3RvX3lzID0gTlVMTDsKKwkJYm9wcy0+eXNfdG9fbGluZWFyID0gTlVMTDsK Kwl9CisKKwlpZ3RfYXNzZXJ0KGJvcHMtPmludGVsX2dlbik7CisKKwlpZGVtcG90ZW5jeV9zZWxm dGVzdChib3BzLCBJOTE1X1RJTElOR19YKTsKKwlpZGVtcG90ZW5jeV9zZWxmdGVzdChib3BzLCBJ OTE1X1RJTElOR19ZKTsKKworCXJldHVybiBib3BzOworfQorCisvKioKKyAqIGJ1Zl9vcHNfZGVz dHJveQorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICoKKyAqIEZ1bmN0aW9uIGZyZWVz IGJ1Zl9vcHMgc3RydWN0dXJlLgorICovCit2b2lkIGJ1Zl9vcHNfZGVzdHJveShzdHJ1Y3QgYnVm X29wcyAqYm9wcykKK3sKKwlpZ3RfYXNzZXJ0KGJvcHMpOworCWZyZWUoYm9wcyk7Cit9CisKKy8q KgorICogYnVmX29wc19zZXRfc29mdHdhcmVfdGlsaW5nCisgKiBAYm9wczogcG9pbnRlciB0byBi dWZfb3BzCisgKiBAdGlsaW5nOiBzdXJmYWNlIHRpbGluZworICogQHVzZV9zb2Z0d2FyZV90aWxp bmc6IGlmIHRydWUgdXNlIHNvZnR3YXJlIGNvcHlpbmcgbWV0aG9kcywgb3RoZXJ3aXNlCisgKiB1 c2UgaGFyZHdhcmUgKHZpYSBndHQpCisgKgorICogRnVuY3Rpb24gYWxsb3dzIHN3aXRjaCBYIC8g WSBzdXJmYWNlcyB0byBzb2Z0d2FyZSAvIGhhcmR3YXJlIGNvcHlpbmcgbWV0aG9kcworICogd2hp Y2ggaG9ub3JzIHRpbGluZyBhbmQgc3dpenpsaW5nLgorICoKKyAqIFJldHVybnM6CisgKiBmYWxz ZSAtIHN3aXRjaCB3YXNuJ3QgcG9zc2libGUuCisgKiB0cnVlIC0gc3dpdGNoIHRvIHNvZnR3YXJl IC8gaGFyZHdhcmUgbWV0aG9kIHN1Y2NlZWQuCisgKi8KK2Jvb2wgYnVmX29wc19zZXRfc29mdHdh cmVfdGlsaW5nKHN0cnVjdCBidWZfb3BzICpib3BzLAorCQkJCSB1aW50MzJfdCB0aWxpbmcsCisJ CQkJIGJvb2wgdXNlX3NvZnR3YXJlX3RpbGluZykKK3sKKwlib29sIHdhc19jaGFuZ2VkID0gdHJ1 ZTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlzd2l0Y2ggKHRpbGluZykgeworCWNhc2UgSTkx NV9USUxJTkdfWDoKKwkJaWYgKHVzZV9zb2Z0d2FyZV90aWxpbmcpIHsKKwkJCWlndF9kZWJ1Zygi LT4gY2hhbmdlIFggdG8gU1dcbiIpOworCQkJYm9wcy0+bGluZWFyX3RvX3ggPSBjb3B5X2xpbmVh cl90b194OworCQkJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X3hfdG9fbGluZWFyOworCQl9IGVs c2UgeworCQkJaWYgKGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJTkdfWCkp IHsKKwkJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBYIHRvIEhXXG4iKTsKKwkJCQlib3BzLT5saW5l YXJfdG9feCA9IGNvcHlfbGluZWFyX3RvX2d0dDsKKwkJCQlib3BzLT54X3RvX2xpbmVhciA9IGNv cHlfZ3R0X3RvX2xpbmVhcjsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2RlYnVnKCItPiBYIGNhbm5v dCBiZSBjaGFuZ2VkIHRvIEhXXG4iKTsKKwkJCQl3YXNfY2hhbmdlZCA9IGZhbHNlOworCQkJfQor CQl9CisJCWJyZWFrOworCisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlpZiAodXNlX3NvZnR3YXJl X3RpbGluZykgeworCQkJaWd0X2RlYnVnKCItPiBjaGFuZ2UgWSB0byBTV1xuIik7CisJCQlib3Bz LT5saW5lYXJfdG9feSA9IGNvcHlfbGluZWFyX3RvX3k7CisJCQlib3BzLT55X3RvX2xpbmVhciA9 IGNvcHlfeV90b19saW5lYXI7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfaHdfdGlsaW5nX3N1cHBv cnRlZChib3BzLCBJOTE1X1RJTElOR19ZKSkgeworCQkJCWlndF9kZWJ1ZygiLT4gY2hhbmdlIFkg dG8gSFdcbiIpOworCQkJCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5lYXJfdG9fZ3R0Owor CQkJCWJvcHMtPnlfdG9fbGluZWFyID0gY29weV9ndHRfdG9fbGluZWFyOworCQkJfSBlbHNlIHsK KwkJCQlpZ3RfZGVidWcoIi0+IFkgY2Fubm90IGJlIGNoYW5nZWQgdG8gSFdcbiIpOworCQkJCXdh c19jaGFuZ2VkID0gZmFsc2U7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlp Z3Rfd2FybigiSW52YWxpZCB0aWxpbmc6ICVkXG4iLCB0aWxpbmcpOworCQl3YXNfY2hhbmdlZCA9 IGZhbHNlOworCX0KKworCXJldHVybiB3YXNfY2hhbmdlZDsKK30KKworLyoqCisgKiBidWZfb3Bz X2hhc19od19mZW5jZQorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcworICogQHRpbGluZzog c3VyZmFjZSB0aWxpbmcKKyAqCisgKiBGdW5jdGlvbiBjaGVja3MgaWYgc3VyZmFjZSB3aXRoIHRp bGluZyBoYXMgSFcgZmVuY2VzIHdoaWNoIGNhbiBiZSB1c2VkCisgKiB0byBjb3B5IGl0IHZpYSBn dHQuCisgKgorICogUmV0dXJuczoKKyAqIGZhbHNlIC0gZmVuY2UgZm9yIHRpbGluZyBpcyBub3Qg c3VwcG9ydGVkLgorICogdHJ1ZSAtIGZlbmNlIGZvciB0aWxpbmcgaXMgc3VwcG9ydGVkLgorICov Citib29sIGJ1Zl9vcHNfaGFzX2h3X2ZlbmNlKHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJf dCB0aWxpbmcpCit7CisJdWludDMyX3QgdGlsZV9tYXNrID0gVElMRV9ERUYodGlsaW5nKTsKKwor CWlndF9hc3NlcnQoYm9wcyk7CisKKwlpZiAodGlsZV9tYXNrICYgYm9wcy0+c3VwcG9ydGVkX2h3 X3RpbGVzKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBi dWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydAorICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcwor ICogQHRpbGluZzogc3VyZmFjZSB0aWxpbmcKKyAqCisgKiBGdW5jdGlvbiBjaGVja3MgY2FwYWJp bGl0aWVzIHRvIGhhbmRsZSBzdXJmYWNlcyB3aXRoIHRpbGluZyBpbiBHUFUuCisgKgorICogUmV0 dXJuczoKKyAqIGZhbHNlIC0gR1BVIGRvZXMgbm90IHN1cHBvcnQgdGlsaW5nLgorICogdHJ1ZSAt IEdQVSBzdXBwb3J0cyB0aWxpbmcuCisgKi8KK2Jvb2wgYnVmX29wc19oYXNfdGlsaW5nX3N1cHBv cnQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKK3sKKwl1aW50MzJfdCB0 aWxlX21hc2sgPSBUSUxFX0RFRih0aWxpbmcpOworCisJaWd0X2Fzc2VydChib3BzKTsKKworCWlm ICh0aWxlX21hc2sgJiBib3BzLT5zdXBwb3J0ZWRfdGlsZXMpCisJCXJldHVybiB0cnVlOworCisJ cmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2J1Zm9wcy5oIGIvbGliL2lu dGVsX2J1Zm9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42NjlhMjcy MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pbnRlbF9idWZvcHMuaApAQCAtMCwwICsxLDg0IEBA CisjaWZuZGVmIF9fSU5URUxfQlVGT1BTX0hfXworI2RlZmluZSBfX0lOVEVMX0JVRk9QU19IX18K KworI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdHJ1Y3QgYnVmX29wczsKKworc3RydWN0IGludGVs X2J1ZiB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHN0cmlkZTsKKwl1aW50MzJfdCB0 aWxpbmc7CisJdWludDMyX3QgYnBwOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgY29tcHJl c3Npb247CisJc3RydWN0IHsKKwkJdWludDMyX3Qgb2Zmc2V0OworCQl1aW50MzJfdCBzdHJpZGU7 CisJfSBhdXg7Cit9OworCitpbmxpbmUgdW5zaWduZWQgaW50ZWxfYnVmX3dpZHRoKGNvbnN0IHN0 cnVjdCBpbnRlbF9idWYgKmJ1ZikKK3sKKwlyZXR1cm4gYnVmLT5zdHJpZGUvKGJ1Zi0+YnBwIC8g OCk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnRlbF9idWZfaGVpZ2h0KGNvbnN0IHN0cnVjdCBp bnRlbF9idWYgKmJ1ZikKK3sKKwlyZXR1cm4gYnVmLT5zaXplL2J1Zi0+c3RyaWRlOworfQorCitp bmxpbmUgaW50IGludGVsX2J1Zl9hdXhfd2lkdGgoaW50IGdlbiwgY29uc3Qgc3RydWN0IGludGVs X2J1ZiAqYnVmKQoreworCS8qCisJICogR0VOMTIrOiBUaGUgQVVYIENDUyB1bml0IHNpemUgaXMg NjQgYnl0ZXMgbWFwcGluZyA0IG1haW4gc3VyZmFjZQorCSAqIHRpbGVzLiBUaHVzIHRoZSB3aWR0 aCBvZiB0aGUgQ0NTIHVuaXQgaXMgNCozMj0xMjggcGl4ZWxzIG9uIHRoZQorCSAqIG1haW4gc3Vy ZmFjZS4KKwkgKi8KKwlpZiAoZ2VuID49IDEyKQorCQlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVs X2J1Zl93aWR0aChidWYpLCAxMjgpICogNjQ7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVs X2J1Zl93aWR0aChidWYpLCAxMDI0KSAqIDEyODsKK30KKworaW5saW5lIGludCBpbnRlbF9idWZf YXV4X2hlaWdodChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCit7CisJLyoK KwkgKiBHRU4xMis6IFRoZSBBVVggQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQg bWFpbiBzdXJmYWNlCisJICogdGlsZXMuIFRodXMgdGhlIGhlaWdodCBvZiB0aGUgQ0NTIHVuaXQg aXMgMzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgorCSAqIHN1cmZhY2UuCisJICovCisJaWYgKGdl biA+PSAxMikKKwkJcmV0dXJuIERJVl9ST1VORF9VUChpbnRlbF9idWZfaGVpZ2h0KGJ1ZiksIDMy KTsKKworCXJldHVybiBESVZfUk9VTkRfVVAoaW50ZWxfYnVmX2hlaWdodChidWYpLCA1MTIpICog MzI7Cit9CisKK3N0cnVjdCBidWZfb3BzICpidWZfb3BzX2NyZWF0ZShpbnQgZmQpOwordm9pZCBi dWZfb3BzX2Rlc3Ryb3koc3RydWN0IGJ1Zl9vcHMgKmJvcHMpOworCitib29sIGJ1Zl9vcHNfc2V0 X3NvZnR3YXJlX3RpbGluZyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywKKwkJCQkgdWludDMyX3QgdGls aW5nLAorCQkJCSBib29sIHVzZV9zb2Z0d2FyZV90aWxpbmcpOworCit2b2lkIGludGVsX2J1Zl90 b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKKwkJ CSB1aW50MzJfdCAqbGluZWFyKTsKKwordm9pZCBsaW5lYXJfdG9faW50ZWxfYnVmKHN0cnVjdCBi dWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgdWludDMyX3QgKmxpbmVh cik7CisKK2Jvb2wgYnVmX29wc19oYXNfaHdfZmVuY2Uoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVp bnQzMl90IHRpbGluZyk7Citib29sIGJ1Zl9vcHNfaGFzX3RpbGluZ19zdXBwb3J0KHN0cnVjdCBi dWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpOworCit2b2lkIGludGVsX2J1Zl9pbml0KHN0 cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCSAgICBpbnQgd2lk dGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCSAgICB1aW50MzJfdCB0aWxpbmcsIGJvb2wgY29t cHJlc3Npb24pOwordm9pZCBpbnRlbF9idWZfY2xvc2Uoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0 cnVjdCBpbnRlbF9idWYgKmJ1Zik7CisKK3ZvaWQgaW50ZWxfYnVmX2luaXRfdXNpbmdfaGFuZGxl KHN0cnVjdCBidWZfb3BzICpib3BzLAorCQkJCSB1aW50MzJfdCBoYW5kbGUsCisJCQkJIHN0cnVj dCBpbnRlbF9idWYgKmJ1ZiwKKwkJCQkgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAor CQkJCSB1aW50MzJfdCByZXFfdGlsaW5nLCBib29sIGNvbXByZXNzaW9uKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggNTdlYjdk OTMuLmNmM2UzNWRhIDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21lc29u LmJ1aWxkCkBAIC0yNyw2ICsyNyw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpZ3RfeDg2LmMnLAog CSdpbnN0ZG9uZS5jJywKIAknaW50ZWxfYmF0Y2hidWZmZXIuYycsCisJJ2ludGVsX2J1Zm9wcy5j JywKIAknaW50ZWxfY2hpcHNldC5jJywKIAknaW50ZWxfZGV2aWNlX2luZm8uYycsCiAJJ2ludGVs X29zLmMnLAotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXYK