From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8122AC64E75 for ; Fri, 27 Nov 2020 12:08:38 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2E33A221F7 for ; Fri, 27 Nov 2020 12:08:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2E33A221F7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3616F6EC2C; Fri, 27 Nov 2020 12:08:05 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8CD7F6EBA5; Fri, 27 Nov 2020 12:07:50 +0000 (UTC) IronPort-SDR: c3Pzj6chuBHRKzDgxBWkpfp9w9tAhN2guEzLFD1NfNEVNpgi3qPu2yTYDKq5mXGB4M60vfI98O 4IvPkgNM5fgQ== X-IronPort-AV: E=McAfee;i="6000,8403,9817"; a="168883356" X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="168883356" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:07:37 -0800 IronPort-SDR: R5UhfezTFIQxJVkKtDeQdq30t/0U50mH0sMHdrGp7dpizN63JQ8njfdegUtzX3QmO04q85NmJh iU648tLeravA== X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="548028527" Received: from mjgleeso-mobl.ger.corp.intel.com (HELO mwauld-desk1.ger.corp.intel.com) ([10.251.85.2]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:07:35 -0800 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Subject: [RFC PATCH 006/162] drm/i915: split gen8+ flush and bb_start emission functions to their own file Date: Fri, 27 Nov 2020 12:04:42 +0000 Message-Id: <20201127120718.454037-7-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201127120718.454037-1-matthew.auld@intel.com> References: <20201127120718.454037-1-matthew.auld@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tvrtko Ursulin , Chris P Wilson , Daniele Ceraolo Spurio , dri-devel@lists.freedesktop.org, John Harrison Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVs LmNvbT4KClRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgYmFja2VuZCB1 c2VkIGFuZCBjYW4gdGhlcmVmb3JlCmJlIHNwbGl0IG91dCBvZiB0aGUgZXhlbGlzdHMgc3VibWlz c2lvbiBmaWxlLCBzbyB0aGV5IGNhbiBiZSByZS11c2VkIGJ5CnRoZSB1cGNvbWluZyBHdUMgc3Vi bWlzc2lvbiBiYWNrZW5kLgoKQmFzZWQgb24gYSBwYXRjaCBieSBDaHJpcyBXaWxzb24uCgpTaWdu ZWQtb2ZmLWJ5OiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9A aW50ZWwuY29tPgpDYzogQ2hyaXMgUCBXaWxzb24gPGNocmlzLnAud2lsc29uQGludGVsLmNvbT4K Q2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+ClJldmll d2VkLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jICAgICAgfCAzOTMgKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oICAgICAg fCAgMjYgKysKIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jICB8 IDM4NSArLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA0MjEgaW5zZXJ0aW9ucygr KSwgMzg0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2dlbjhfZW5naW5lX2NzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBhZWRi ZDhmNTJiZTguLmY5ZWY1MTk5YjEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTgyLDYgKzgy LDcgQEAgZ3QteSArPSBcCiAJZ3QvZ2VuNl9lbmdpbmVfY3MubyBcCiAJZ3QvZ2VuNl9wcGd0dC5v IFwKIAlndC9nZW43X3JlbmRlcmNsZWFyLm8gXAorCWd0L2dlbjhfZW5naW5lX2NzLm8gXAogCWd0 L2dlbjhfcHBndHQubyBcCiAJZ3QvaW50ZWxfYnJlYWRjcnVtYnMubyBcCiAJZ3QvaW50ZWxfY29u dGV4dC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5l X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTk2ZmUxMDg2ODVlCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwpAQCAtMCww ICsxLDM5MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHly aWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCisjaW5jbHVkZSAiaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uaCIgLyogWFhYICovCisj aW5jbHVkZSAiaW50ZWxfZ3B1X2NvbW1hbmRzLmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZy5oIgor CitpbnQgZ2VuOF9lbWl0X2ZsdXNoX3JlbmRlcihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 LCB1MzIgbW9kZSkKK3sKKwlib29sIHZmX2ZsdXNoX3dhID0gZmFsc2UsIGRjX2ZsdXNoX3dhID0g ZmFsc2U7CisJdTMyICpjcywgZmxhZ3MgPSAwOworCWludCBsZW47CisKKwlmbGFncyB8PSBQSVBF X0NPTlRST0xfQ1NfU1RBTEw7CisKKwlpZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKKwkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7CisJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RD X0ZMVVNIX0VOQUJMRTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VOQUJMRTsKKwl9 CisKKwlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgeworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfVExCX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9JTlNUUlVDVElPTl9D QUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9J TlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5WQUxJREFURTsK KwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfUVdfV1JJVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lO REVYOworCisJCS8qCisJCSAqIE9uIEdFTjk6IGJlZm9yZSBWRl9DQUNIRV9JTlZBTElEQVRFIHdl IG5lZWQgdG8gZW1pdCBhIE5VTEwKKwkJICogcGlwZSBjb250cm9sLgorCQkgKi8KKwkJaWYgKElT X0dFTihyZXF1ZXN0LT5lbmdpbmUtPmk5MTUsIDkpKQorCQkJdmZfZmx1c2hfd2EgPSB0cnVlOwor CisJCS8qIFdhRm9yR0FNSGFuZzprYmwgKi8KKwkJaWYgKElTX0tCTF9HVF9SRVZJRChyZXF1ZXN0 LT5lbmdpbmUtPmk5MTUsIDAsIEtCTF9SRVZJRF9CMCkpCisJCQlkY19mbHVzaF93YSA9IHRydWU7 CisJfQorCisJbGVuID0gNjsKKworCWlmICh2Zl9mbHVzaF93YSkKKwkJbGVuICs9IDY7CisKKwlp ZiAoZGNfZmx1c2hfd2EpCisJCWxlbiArPSAxMjsKKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihy ZXF1ZXN0LCBsZW4pOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisK KwlpZiAodmZfZmx1c2hfd2EpCisJCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgMCwg MCk7CisKKwlpZiAoZGNfZmx1c2hfd2EpCisJCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChj cywgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRSwKKwkJCQkJICAgIDApOworCisJY3MgPSBn ZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIp OworCisJaWYgKGRjX2ZsdXNoX3dhKQorCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3Ms IFBJUEVfQ09OVFJPTF9DU19TVEFMTCwgMCk7CisKKwlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVz dCwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnZW44X2VtaXRfZmx1c2goc3RydWN0IGk5 MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpCit7CisJdTMyIGNtZCwgKmNzOworCisJY3Mg PSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIDQpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1 cm4gUFRSX0VSUihjcyk7CisKKwljbWQgPSBNSV9GTFVTSF9EVyArIDE7CisKKwkvKiBXZSBhbHdh eXMgcmVxdWlyZSBhIGNvbW1hbmQgYmFycmllciBzbyB0aGF0IHN1YnNlcXVlbnQKKwkgKiBjb21t YW5kcywgc3VjaCBhcyBicmVhZGNydW1iIGludGVycnVwdHMsIGFyZSBzdHJpY3RseSBvcmRlcmVk CisJICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUgYmVpbmcgZmx1c2hlZCB0 byBtZW1vcnkKKwkgKiAoYW5kIHRodXMgYmVpbmcgY29oZXJlbnQgZnJvbSB0aGUgQ1BVKS4KKwkg Ki8KKwljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfCBNSV9GTFVTSF9EV19PUF9TVE9S RURXOworCisJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKKwkJY21kIHw9IE1JX0lOVkFM SURBVEVfVExCOworCQlpZiAocmVxdWVzdC0+ZW5naW5lLT5jbGFzcyA9PSBWSURFT19ERUNPREVf Q0xBU1MpCisJCQljbWQgfD0gTUlfSU5WQUxJREFURV9CU0Q7CisJfQorCisJKmNzKysgPSBjbWQ7 CisJKmNzKysgPSBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUjsKKwkqY3MrKyA9IDA7IC8qIHVwcGVy IGFkZHIgKi8KKwkqY3MrKyA9IDA7IC8qIHZhbHVlICovCisJaW50ZWxfcmluZ19hZHZhbmNlKHJl cXVlc3QsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ2VuMTFfZW1pdF9mbHVzaF9yZW5k ZXIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpCit7CisJaWYgKG1vZGUg JiBFTUlUX0ZMVVNIKSB7CisJCXUzMiAqY3M7CisJCXUzMiBmbGFncyA9IDA7CisKKwkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9USUxF X0NBQ0hFX0ZMVVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNI RV9GTFVTSDsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOworCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOworCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfRkxVU0hfRU5BQkxFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7CisJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOworCisJCWNzID0gaW50ZWxf cmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKKwkJaWYgKElTX0VSUihjcykpCisJCQlyZXR1cm4gUFRS X0VSUihjcyk7CisKKwkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJD X1BQSFdTUF9TQ1JBVENIX0FERFIpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3Mp OworCX0KKworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCXUzMiAqY3M7CisJCXUz MiBmbGFncyA9IDA7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJCWZs YWdzIHw9IFBJUEVfQ09OVFJPTF9DT01NQU5EX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lO U1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9URVhU VVJFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9J TlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFU RTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZs YWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NU T1JFX0RBVEFfSU5ERVg7CisKKwkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIDYpOwor CQlpZiAoSVNfRVJSKGNzKSkKKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCQljcyA9IGdlbjhf ZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7CisJ CWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB1MzIgcHJlcGFyc2VyX2Rpc2FibGUoYm9vbCBzdGF0ZSkKK3sKKwlyZXR1cm4gTUlf QVJCX0NIRUNLIHwgMSA8PCA4IHwgc3RhdGU7Cit9CisKK3N0YXRpYyBpOTE1X3JlZ190IGF1eF9p bnZfcmVnKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdGF0aWMg Y29uc3QgaTkxNV9yZWdfdCB2ZFtdID0geworCQlHRU4xMl9WRDBfQVVYX05WLAorCQlHRU4xMl9W RDFfQVVYX05WLAorCQlHRU4xMl9WRDJfQVVYX05WLAorCQlHRU4xMl9WRDNfQVVYX05WLAorCX07 CisKKwlzdGF0aWMgY29uc3QgaTkxNV9yZWdfdCB2ZVtdID0geworCQlHRU4xMl9WRTBfQVVYX05W LAorCQlHRU4xMl9WRTFfQVVYX05WLAorCX07CisKKwlpZiAoZW5naW5lLT5jbGFzcyA9PSBWSURF T19ERUNPREVfQ0xBU1MpCisJCXJldHVybiB2ZFtlbmdpbmUtPmluc3RhbmNlXTsKKworCWlmIChl bmdpbmUtPmNsYXNzID09IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTKQorCQlyZXR1cm4gdmVbZW5n aW5lLT5pbnN0YW5jZV07CisKKwlHRU1fQlVHX09OKCJ1bmtub3duIGF1eF9pbnZfcmVnXG4iKTsK KworCXJldHVybiBJTlZBTElEX01NSU9fUkVHOworfQorCitzdGF0aWMgdTMyICoKK2dlbjEyX2Vt aXRfYXV4X3RhYmxlX2ludihjb25zdCBpOTE1X3JlZ190IGludl9yZWcsIHUzMiAqY3MpCit7CisJ KmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKKwkqY3MrKyA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KGludl9yZWcpOworCSpjcysrID0gQVVYX0lOVjsKKwkqY3MrKyA9IE1JX05PT1A7CisK KwlyZXR1cm4gY3M7Cit9CisKK2ludCBnZW4xMl9lbWl0X2ZsdXNoX3JlbmRlcihzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSkKK3sKKwlpZiAobW9kZSAmIEVNSVRfRkxVU0gp IHsKKwkJdTMyIGZsYWdzID0gMDsKKwkJdTMyICpjczsKKworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfVElMRV9DQUNIRV9GTFVTSDsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0wzOwor CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSDsKKwkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOworCQkvKiBXYV8xNDA5NjAwOTA3 OnRnbCAqLworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQVEhfU1RBTEw7CisJCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9G TFVTSF9FTkFCTEU7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7 CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKworCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfQ1NfU1RBTEw7CisKKwkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIDYpOwor CQlpZiAoSVNfRVJSKGNzKSkKKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCQljcyA9IGdlbjEy X2VtaXRfcGlwZV9jb250cm9sKGNzLAorCQkJCQkgICAgIFBJUEVfQ09OVFJPTDBfSERDX1BJUEVM SU5FX0ZMVVNILAorCQkJCQkgICAgIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7CisJ CWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisJfQorCisJaWYgKG1vZGUgJiBFTUlU X0lOVkFMSURBVEUpIHsKKwkJdTMyIGZsYWdzID0gMDsKKwkJdTMyICpjczsKKworCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfQ09NTUFORF9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfVExCX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9JTlNUUlVD VElPTl9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9D QUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5WQUxJ REFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURBVEU7CisJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOworCisJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOworCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfUVdfV1JJVEU7CisKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOworCisJCWNz ID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA4ICsgNCk7CisJCWlmIChJU19FUlIoY3MpKQor CQkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJCS8qCisJCSAqIFByZXZlbnQgdGhlIHByZS1wYXJz ZXIgZnJvbSBza2lwcGluZyBwYXN0IHRoZSBUTEIKKwkJICogaW52YWxpZGF0ZSBhbmQgbG9hZGlu ZyBhIHN0YWxlIHBhZ2UgZm9yIHRoZSBiYXRjaAorCQkgKiBidWZmZXIgLyByZXF1ZXN0IHBheWxv YWQuCisJCSAqLworCQkqY3MrKyA9IHByZXBhcnNlcl9kaXNhYmxlKHRydWUpOworCisJCWNzID0g Z2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9BRERS KTsKKworCQkvKiBoc2RlczogMTgwOTE3NTc5MCAqLworCQljcyA9IGdlbjEyX2VtaXRfYXV4X3Rh YmxlX2ludihHRU4xMl9HRlhfQ0NTX0FVWF9OViwgY3MpOworCisJCSpjcysrID0gcHJlcGFyc2Vy X2Rpc2FibGUoZmFsc2UpOworCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOworCX0K KworCXJldHVybiAwOworfQorCitpbnQgZ2VuMTJfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSkKK3sKKwlpbnRlbF9lbmdpbmVfbWFza190IGF1eF9pbnYg PSAwOworCXUzMiBjbWQsICpjczsKKworCWNtZCA9IDQ7CisJaWYgKG1vZGUgJiBFTUlUX0lOVkFM SURBVEUpCisJCWNtZCArPSAyOworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKQorCQlhdXhf aW52ID0gcmVxdWVzdC0+ZW5naW5lLT5tYXNrICYgfkJJVChCQ1MwKTsKKwlpZiAoYXV4X2ludikK KwkJY21kICs9IDIgKiBod2VpZ2h0OChhdXhfaW52KSArIDI7CisKKwljcyA9IGludGVsX3Jpbmdf YmVnaW4ocmVxdWVzdCwgY21kKTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIo Y3MpOworCisJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpCisJCSpjcysrID0gcHJlcGFyc2Vy X2Rpc2FibGUodHJ1ZSk7CisKKwljbWQgPSBNSV9GTFVTSF9EVyArIDE7CisKKwkvKiBXZSBhbHdh eXMgcmVxdWlyZSBhIGNvbW1hbmQgYmFycmllciBzbyB0aGF0IHN1YnNlcXVlbnQKKwkgKiBjb21t YW5kcywgc3VjaCBhcyBicmVhZGNydW1iIGludGVycnVwdHMsIGFyZSBzdHJpY3RseSBvcmRlcmVk CisJICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUgYmVpbmcgZmx1c2hlZCB0 byBtZW1vcnkKKwkgKiAoYW5kIHRodXMgYmVpbmcgY29oZXJlbnQgZnJvbSB0aGUgQ1BVKS4KKwkg Ki8KKwljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfCBNSV9GTFVTSF9EV19PUF9TVE9S RURXOworCisJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKKwkJY21kIHw9IE1JX0lOVkFM SURBVEVfVExCOworCQlpZiAocmVxdWVzdC0+ZW5naW5lLT5jbGFzcyA9PSBWSURFT19ERUNPREVf Q0xBU1MpCisJCQljbWQgfD0gTUlfSU5WQUxJREFURV9CU0Q7CisJfQorCisJKmNzKysgPSBjbWQ7 CisJKmNzKysgPSBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUjsKKwkqY3MrKyA9IDA7IC8qIHVwcGVy IGFkZHIgKi8KKwkqY3MrKyA9IDA7IC8qIHZhbHVlICovCisKKwlpZiAoYXV4X2ludikgeyAvKiBo c2RlczogMTgwOTE3NTc5MCAqLworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJ CXVuc2lnbmVkIGludCB0bXA7CisKKwkJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShod2Vp Z2h0OChhdXhfaW52KSk7CisJCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCByZXF1ZXN0 LT5lbmdpbmUtPmd0LAorCQkJCSAgICAgICBhdXhfaW52LCB0bXApIHsKKwkJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoYXV4X2ludl9yZWcoZW5naW5lKSk7CisJCQkqY3MrKyA9IEFVWF9J TlY7CisJCX0KKwkJKmNzKysgPSBNSV9OT09QOworCX0KKworCWlmIChtb2RlICYgRU1JVF9JTlZB TElEQVRFKQorCQkqY3MrKyA9IHByZXBhcnNlcl9kaXNhYmxlKGZhbHNlKTsKKworCWludGVsX3Jp bmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdlbjhfZW1p dF9iYl9zdGFydF9ub2FyYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCSAgICAgdTY0IG9m ZnNldCwgdTMyIGxlbiwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXUz MiAqY3M7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOworCWlmIChJU19FUlIoY3Mp KQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkvKgorCSAqIFdhRGlzYWJsZUN0eFJlc3RvcmVB cmJpdHJhdGlvbjpiZHcsY2h2CisJICoKKwkgKiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gTUlf QVJCX0VOQUJMRSBhcyBvZnRlbiBhcyB3ZSBkbyAoaW4KKwkgKiBwYXJ0aWN1bGFyIGFsbCB0aGUg Z2VuIHRoYXQgZG8gbm90IG5lZWQgdGhlIHcvYSBhdCBhbGwhKSwgaWYgd2UKKwkgKiB0b29rIGNh cmUgdG8gbWFrZSBzdXJlIHRoYXQgb24gZXZlcnkgc3dpdGNoIGludG8gdGhpcyBjb250ZXh0CisJ ICogKGJvdGggb3JkaW5hcnkgYW5kIGZvciBwcmVlbXB0aW9uKSB0aGF0IGFyYml0cmFydGlvbiB3 YXMgZW5hYmxlZAorCSAqIHdlIHdvdWxkIGJlIGZpbmUuICBIb3dldmVyLCBmb3IgZ2VuOCB0aGVy ZSBpcyBhbm90aGVyIHcvYSB0aGF0CisJICogcmVxdWlyZXMgdXMgdG8gbm90IHByZWVtcHQgaW5z aWRlIEdQR1BVIGV4ZWN1dGlvbiwgc28gd2Uga2VlcAorCSAqIGFyYml0cmF0aW9uIGRpc2FibGVk IGZvciBnZW44IGJhdGNoZXMuIEFyYml0cmF0aW9uIHdpbGwgYmUKKwkgKiByZS1lbmFibGVkIGJl Zm9yZSB3ZSBjbG9zZSB0aGUgcmVxdWVzdAorCSAqIChlbmdpbmUtPmVtaXRfZmluaV9icmVhZGNy dW1iKS4KKwkgKi8KKwkqY3MrKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKKwor CS8qIEZJWE1FKEJEVyspOiBBZGRyZXNzIHNwYWNlIGFuZCBzZWN1cml0eSBzZWxlY3RvcnMuICov CisJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlRfR0VOOCB8CisJCShmbGFncyAmIEk5MTVf RElTUEFUQ0hfU0VDVVJFID8gMCA6IEJJVCg4KSk7CisJKmNzKysgPSBsb3dlcl8zMl9iaXRzKG9m ZnNldCk7CisJKmNzKysgPSB1cHBlcl8zMl9iaXRzKG9mZnNldCk7CisKKwlpbnRlbF9yaW5nX2Fk dmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ2VuOF9lbWl0X2JiX3N0YXJ0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwK KwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1MzIgKmNzOworCisJY3Mg PSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2KTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBU Ul9FUlIoY3MpOworCisJKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKwor CSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUX0dFTjggfAorCQkoZmxhZ3MgJiBJOTE1X0RJ U1BBVENIX1NFQ1VSRSA/IDAgOiBCSVQoOCkpOworCSpjcysrID0gbG93ZXJfMzJfYml0cyhvZmZz ZXQpOworCSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOworCisJKmNzKysgPSBNSV9BUkJf T05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7CisJKmNzKysgPSBNSV9OT09QOworCisJaW50ZWxfcmlu Z19hZHZhbmNlKHJxLCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmMwYzYyMjg0YjY1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2dlbjhfZW5naW5lX2NzLmgKQEAgLTAsMCArMSwyNiBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBv cmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0dFTjhfRU5HSU5FX0NTX0hfXworI2RlZmluZSBfX0dF TjhfRU5HSU5FX0NTX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGk5 MTVfcmVxdWVzdDsKKworaW50IGdlbjhfZW1pdF9mbHVzaF9yZW5kZXIoc3RydWN0IGk5MTVfcmVx dWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpOworaW50IGdlbjhfZW1pdF9mbHVzaChzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSk7CitpbnQgZ2VuMTFfZW1pdF9mbHVzaF9yZW5k ZXIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpOworaW50IGdlbjEyX2Vt aXRfZmx1c2hfcmVuZGVyKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsK K2ludCBnZW4xMl9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBt b2RlKTsKKworaW50IGdlbjhfZW1pdF9iYl9zdGFydF9ub2FyYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwKKwkJCSAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKKwkJCSAgICAgY29uc3QgdW5zaWdu ZWQgaW50IGZsYWdzKTsKK2ludCBnZW44X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCisJCSAgICAgICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAorCQkgICAgICAgY29uc3QgdW5z aWduZWQgaW50IGZsYWdzKTsKKworI2VuZGlmIC8qIF9fR0VOOF9FTkdJTkVfQ1NfSF9fICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlz c2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Np b24uYwppbmRleCBmYzMzMDIzM2VhMjAuLjkwNjlhNDU2ZDJmNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCkBAIC0xMTIs NiArMTEyLDcgQEAKICNpbmNsdWRlICJpOTE1X3BlcmYuaCIKICNpbmNsdWRlICJpOTE1X3RyYWNl LmgiCiAjaW5jbHVkZSAiaTkxNV92Z3B1LmgiCisjaW5jbHVkZSAiZ2VuOF9lbmdpbmVfY3MuaCIK ICNpbmNsdWRlICJpbnRlbF9icmVhZGNydW1icy5oIgogI2luY2x1ZGUgImludGVsX2NvbnRleHQu aCIKICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKQEAgLTQ0NjUsNjcgKzQ0NjYsNiBAQCBz dGF0aWMgdm9pZCBleGVjbGlzdHNfcmVzZXRfZmluaXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKIAkJICAgICBhdG9taWNfcmVhZCgmZXhlY2xpc3RzLT50YXNrbGV0LmNvdW50KSk7 CiB9CiAKLXN0YXRpYyBpbnQgZ2VuOF9lbWl0X2JiX3N0YXJ0X25vYXJiKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLAotCQkJCSAgICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAotCQkJCSAgICBjb25zdCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JdTMyICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdp bihycSwgNCk7Ci0JaWYgKElTX0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCS8q Ci0JICogV2FEaXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYKLQkgKgotCSAqIFdl IGRvbid0IG5lZWQgdG8gcGVyZm9ybSBNSV9BUkJfRU5BQkxFIGFzIG9mdGVuIGFzIHdlIGRvIChp bgotCSAqIHBhcnRpY3VsYXIgYWxsIHRoZSBnZW4gdGhhdCBkbyBub3QgbmVlZCB0aGUgdy9hIGF0 IGFsbCEpLCBpZiB3ZQotCSAqIHRvb2sgY2FyZSB0byBtYWtlIHN1cmUgdGhhdCBvbiBldmVyeSBz d2l0Y2ggaW50byB0aGlzIGNvbnRleHQKLQkgKiAoYm90aCBvcmRpbmFyeSBhbmQgZm9yIHByZWVt cHRpb24pIHRoYXQgYXJiaXRyYXJ0aW9uIHdhcyBlbmFibGVkCi0JICogd2Ugd291bGQgYmUgZmlu ZS4gIEhvd2V2ZXIsIGZvciBnZW44IHRoZXJlIGlzIGFub3RoZXIgdy9hIHRoYXQKLQkgKiByZXF1 aXJlcyB1cyB0byBub3QgcHJlZW1wdCBpbnNpZGUgR1BHUFUgZXhlY3V0aW9uLCBzbyB3ZSBrZWVw Ci0JICogYXJiaXRyYXRpb24gZGlzYWJsZWQgZm9yIGdlbjggYmF0Y2hlcy4gQXJiaXRyYXRpb24g d2lsbCBiZQotCSAqIHJlLWVuYWJsZWQgYmVmb3JlIHdlIGNsb3NlIHRoZSByZXF1ZXN0Ci0JICog KGVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIpLgotCSAqLwotCSpjcysrID0gTUlfQVJCX09O X09GRiB8IE1JX0FSQl9ESVNBQkxFOwotCi0JLyogRklYTUUoQkRXKyk6IEFkZHJlc3Mgc3BhY2Ug YW5kIHNlY3VyaXR5IHNlbGVjdG9ycy4gKi8KLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFS VF9HRU44IHwKLQkJKGZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPyAwIDogQklUKDgpKTsK LQkqY3MrKyA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0KTsKLQkqY3MrKyA9IHVwcGVyXzMyX2JpdHMo b2Zmc2V0KTsKLQotCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgZ2VuOF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx LAotCQkJICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVk IGludCBmbGFncykKLXsKLQl1MzIgKmNzOwotCi0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2 KTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JKmNzKysgPSBN SV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKLQotCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVS X1NUQVJUX0dFTjggfAotCQkoZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBCSVQo OCkpOwotCSpjcysrID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpOwotCSpjcysrID0gdXBwZXJfMzJf Yml0cyhvZmZzZXQpOwotCi0JKmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7 Ci0JKmNzKysgPSBNSV9OT09QOwotCi0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQly ZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZ2VuOF9sb2dpY2FsX3JpbmdfZW5hYmxlX2lycShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJRU5HSU5FX1dSSVRFKGVuZ2luZSwg UklOR19JTVIsCkBAIC00NTM4LDMyOSArNDQ3OCw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfbG9naWNh bF9yaW5nX2Rpc2FibGVfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlFTkdJ TkVfV1JJVEUoZW5naW5lLCBSSU5HX0lNUiwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7CiB9CiAK LXN0YXRpYyBpbnQgZ2VuOF9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Qs IHUzMiBtb2RlKQotewotCXUzMiBjbWQsICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihy ZXF1ZXN0LCA0KTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0J Y21kID0gTUlfRkxVU0hfRFcgKyAxOwotCi0JLyogV2UgYWx3YXlzIHJlcXVpcmUgYSBjb21tYW5k IGJhcnJpZXIgc28gdGhhdCBzdWJzZXF1ZW50Ci0JICogY29tbWFuZHMsIHN1Y2ggYXMgYnJlYWRj cnVtYiBpbnRlcnJ1cHRzLCBhcmUgc3RyaWN0bHkgb3JkZXJlZAotCSAqIHdydCB0aGUgY29udGVu dHMgb2YgdGhlIHdyaXRlIGNhY2hlIGJlaW5nIGZsdXNoZWQgdG8gbWVtb3J5Ci0JICogKGFuZCB0 aHVzIGJlaW5nIGNvaGVyZW50IGZyb20gdGhlIENQVSkuCi0JICovCi0JY21kIHw9IE1JX0ZMVVNI X0RXX1NUT1JFX0lOREVYIHwgTUlfRkxVU0hfRFdfT1BfU1RPUkVEVzsKLQotCWlmIChtb2RlICYg RU1JVF9JTlZBTElEQVRFKSB7Ci0JCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQjsKLQkJaWYgKHJl cXVlc3QtPmVuZ2luZS0+Y2xhc3MgPT0gVklERU9fREVDT0RFX0NMQVNTKQotCQkJY21kIHw9IE1J X0lOVkFMSURBVEVfQlNEOwotCX0KLQotCSpjcysrID0gY21kOwotCSpjcysrID0gTFJDX1BQSFdT UF9TQ1JBVENIX0FERFI7Ci0JKmNzKysgPSAwOyAvKiB1cHBlciBhZGRyICovCi0JKmNzKysgPSAw OyAvKiB2YWx1ZSAqLwotCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBnZW44X2VtaXRfZmx1c2hfcmVuZGVyKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QsCi0JCQkJICB1MzIgbW9kZSkKLXsKLQlib29sIHZmX2ZsdXNoX3dh ID0gZmFsc2UsIGRjX2ZsdXNoX3dhID0gZmFsc2U7Ci0JdTMyICpjcywgZmxhZ3MgPSAwOwotCWlu dCBsZW47Ci0KLQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Ci0KLQlpZiAobW9kZSAm IEVNSVRfRkxVU0gpIHsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FD SEVfRkxVU0g7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKLQkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX0ZMVVNIX0VOQUJMRTsKLQl9Ci0KLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkg ewotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9JTlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfVkZfQ0FDSEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NB Q0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZB TElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Ci0JCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOwotCi0JCS8qCi0JCSAqIE9uIEdFTjk6IGJlZm9y ZSBWRl9DQUNIRV9JTlZBTElEQVRFIHdlIG5lZWQgdG8gZW1pdCBhIE5VTEwKLQkJICogcGlwZSBj b250cm9sLgotCQkgKi8KLQkJaWYgKElTX0dFTihyZXF1ZXN0LT5lbmdpbmUtPmk5MTUsIDkpKQot CQkJdmZfZmx1c2hfd2EgPSB0cnVlOwotCi0JCS8qIFdhRm9yR0FNSGFuZzprYmwgKi8KLQkJaWYg KElTX0tCTF9HVF9SRVZJRChyZXF1ZXN0LT5lbmdpbmUtPmk5MTUsIDAsIEtCTF9SRVZJRF9CMCkp Ci0JCQlkY19mbHVzaF93YSA9IHRydWU7Ci0JfQotCi0JbGVuID0gNjsKLQotCWlmICh2Zl9mbHVz aF93YSkKLQkJbGVuICs9IDY7Ci0KLQlpZiAoZGNfZmx1c2hfd2EpCi0JCWxlbiArPSAxMjsKLQot CWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCBsZW4pOwotCWlmIChJU19FUlIoY3MpKQot CQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQlpZiAodmZfZmx1c2hfd2EpCi0JCWNzID0gZ2VuOF9l bWl0X3BpcGVfY29udHJvbChjcywgMCwgMCk7Ci0KLQlpZiAoZGNfZmx1c2hfd2EpCi0JCWNzID0g Z2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRSwK LQkJCQkJICAgIDApOwotCi0JY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCBmbGFncywg TFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwotCi0JaWYgKGRjX2ZsdXNoX3dhKQotCQljcyA9IGdl bjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIFBJUEVfQ09OVFJPTF9DU19TVEFMTCwgMCk7Ci0KLQlp bnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgZ2VuMTFfZW1pdF9mbHVzaF9yZW5kZXIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCwKLQkJCQkgICB1MzIgbW9kZSkKLXsKLQlpZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKLQkJdTMy ICpjczsKLQkJdTMyIGZsYWdzID0gMDsKLQotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RB TEw7Ci0KLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RJTEVfQ0FDSEVfRkxVU0g7Ci0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9E Q19GTFVTSF9FTkFCTEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9GTFVTSF9FTkFCTEU7Ci0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X1NUT1JFX0RBVEFfSU5ERVg7Ci0KLQkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIDYp OwotCQlpZiAoSVNfRVJSKGNzKSkKLQkJCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCQljcyA9IGdl bjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7 Ci0JCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0JfQotCi0JaWYgKG1vZGUgJiBF TUlUX0lOVkFMSURBVEUpIHsKLQkJdTMyICpjczsKLQkJdTMyIGZsYWdzID0gMDsKLQotCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Ci0KLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NP TU1BTkRfQ0FDSEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RMQl9JTlZB TElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJ REFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsK LQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FX X1dSSVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKLQotCQlj cyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNik7Ci0JCWlmIChJU19FUlIoY3MpKQotCQkJ cmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywg ZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJl cXVlc3QsIGNzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBwcmVwYXJzZXJf ZGlzYWJsZShib29sIHN0YXRlKQotewotCXJldHVybiBNSV9BUkJfQ0hFQ0sgfCAxIDw8IDggfCBz dGF0ZTsKLX0KLQotc3RhdGljIGk5MTVfcmVnX3QgYXV4X2ludl9yZWcoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0YXRpYyBjb25zdCBpOTE1X3JlZ190IHZkW10g PSB7Ci0JCUdFTjEyX1ZEMF9BVVhfTlYsCi0JCUdFTjEyX1ZEMV9BVVhfTlYsCi0JCUdFTjEyX1ZE Ml9BVVhfTlYsCi0JCUdFTjEyX1ZEM19BVVhfTlYsCi0JfTsKLQotCXN0YXRpYyBjb25zdCBpOTE1 X3JlZ190IHZlW10gPSB7Ci0JCUdFTjEyX1ZFMF9BVVhfTlYsCi0JCUdFTjEyX1ZFMV9BVVhfTlYs Ci0JfTsKLQotCWlmIChlbmdpbmUtPmNsYXNzID09IFZJREVPX0RFQ09ERV9DTEFTUykKLQkJcmV0 dXJuIHZkW2VuZ2luZS0+aW5zdGFuY2VdOwotCi0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gVklERU9f RU5IQU5DRU1FTlRfQ0xBU1MpCi0JCXJldHVybiB2ZVtlbmdpbmUtPmluc3RhbmNlXTsKLQotCUdF TV9CVUdfT04oInVua25vd24gYXV4X2ludl9yZWdcbiIpOwotCi0JcmV0dXJuIElOVkFMSURfTU1J T19SRUc7Ci19Ci0KLXN0YXRpYyB1MzIgKgotZ2VuMTJfZW1pdF9hdXhfdGFibGVfaW52KGNvbnN0 IGk5MTVfcmVnX3QgaW52X3JlZywgdTMyICpjcykKLXsKLQkqY3MrKyA9IE1JX0xPQURfUkVHSVNU RVJfSU1NKDEpOwotCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoaW52X3JlZyk7Ci0JKmNz KysgPSBBVVhfSU5WOwotCSpjcysrID0gTUlfTk9PUDsKLQotCXJldHVybiBjczsKLX0KLQotc3Rh dGljIGludCBnZW4xMl9lbWl0X2ZsdXNoX3JlbmRlcihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1 ZXN0LAotCQkJCSAgIHUzMiBtb2RlKQotewotCWlmIChtb2RlICYgRU1JVF9GTFVTSCkgewotCQl1 MzIgZmxhZ3MgPSAwOwotCQl1MzIgKmNzOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9USUxF X0NBQ0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRkxVU0hfTDM7Ci0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Ci0JCS8qIFdhXzE0MDk2MDA5MDc6dGdsICov Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTDsKLQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX0RDX0ZMVVNIX0VOQUJMRTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VO QUJMRTsKLQotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKLQkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwotCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9D U19TVEFMTDsKLQotCQljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNik7Ci0JCWlmIChJ U19FUlIoY3MpKQotCQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JCWNzID0gZ2VuMTJfZW1pdF9w aXBlX2NvbnRyb2woY3MsCi0JCQkJCSAgICAgUElQRV9DT05UUk9MMF9IRENfUElQRUxJTkVfRkxV U0gsCi0JCQkJCSAgICAgZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKLQkJaW50ZWxf cmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKLQl9Ci0KLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJ REFURSkgewotCQl1MzIgZmxhZ3MgPSAwOwotCQl1MzIgKmNzOwotCi0JCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9DT01NQU5EX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9UTEJfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNUSU9OX0NB Q0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9URVhUVVJFX0NBQ0hFX0lO VkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwot CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURTsKLQkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEU7Ci0KLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19X UklURTsKLQotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Ci0KLQkJY3MgPSBpbnRl bF9yaW5nX2JlZ2luKHJlcXVlc3QsIDggKyA0KTsKLQkJaWYgKElTX0VSUihjcykpCi0JCQlyZXR1 cm4gUFRSX0VSUihjcyk7Ci0KLQkJLyoKLQkJICogUHJldmVudCB0aGUgcHJlLXBhcnNlciBmcm9t IHNraXBwaW5nIHBhc3QgdGhlIFRMQgotCQkgKiBpbnZhbGlkYXRlIGFuZCBsb2FkaW5nIGEgc3Rh bGUgcGFnZSBmb3IgdGhlIGJhdGNoCi0JCSAqIGJ1ZmZlciAvIHJlcXVlc3QgcGF5bG9hZC4KLQkJ ICovCi0JCSpjcysrID0gcHJlcGFyc2VyX2Rpc2FibGUodHJ1ZSk7Ci0KLQkJY3MgPSBnZW44X2Vt aXRfcGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwotCi0J CS8qIGhzZGVzOiAxODA5MTc1NzkwICovCi0JCWNzID0gZ2VuMTJfZW1pdF9hdXhfdGFibGVfaW52 KEdFTjEyX0dGWF9DQ1NfQVVYX05WLCBjcyk7Ci0KLQkJKmNzKysgPSBwcmVwYXJzZXJfZGlzYWJs ZShmYWxzZSk7Ci0JCWludGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VuMTJfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSkKLXsKLQlpbnRlbF9lbmdpbmVfbWFza190IGF1eF9pbnYg PSAwOwotCXUzMiBjbWQsICpjczsKLQotCWNtZCA9IDQ7Ci0JaWYgKG1vZGUgJiBFTUlUX0lOVkFM SURBVEUpCi0JCWNtZCArPSAyOwotCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKQotCQlhdXhf aW52ID0gcmVxdWVzdC0+ZW5naW5lLT5tYXNrICYgfkJJVChCQ1MwKTsKLQlpZiAoYXV4X2ludikK LQkJY21kICs9IDIgKiBod2VpZ2h0OChhdXhfaW52KSArIDI7Ci0KLQljcyA9IGludGVsX3Jpbmdf YmVnaW4ocmVxdWVzdCwgY21kKTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIo Y3MpOwotCi0JaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpCi0JCSpjcysrID0gcHJlcGFyc2Vy X2Rpc2FibGUodHJ1ZSk7Ci0KLQljbWQgPSBNSV9GTFVTSF9EVyArIDE7Ci0KLQkvKiBXZSBhbHdh eXMgcmVxdWlyZSBhIGNvbW1hbmQgYmFycmllciBzbyB0aGF0IHN1YnNlcXVlbnQKLQkgKiBjb21t YW5kcywgc3VjaCBhcyBicmVhZGNydW1iIGludGVycnVwdHMsIGFyZSBzdHJpY3RseSBvcmRlcmVk Ci0JICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUgYmVpbmcgZmx1c2hlZCB0 byBtZW1vcnkKLQkgKiAoYW5kIHRodXMgYmVpbmcgY29oZXJlbnQgZnJvbSB0aGUgQ1BVKS4KLQkg Ki8KLQljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfCBNSV9GTFVTSF9EV19PUF9TVE9S RURXOwotCi0JaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKLQkJY21kIHw9IE1JX0lOVkFM SURBVEVfVExCOwotCQlpZiAocmVxdWVzdC0+ZW5naW5lLT5jbGFzcyA9PSBWSURFT19ERUNPREVf Q0xBU1MpCi0JCQljbWQgfD0gTUlfSU5WQUxJREFURV9CU0Q7Ci0JfQotCi0JKmNzKysgPSBjbWQ7 Ci0JKmNzKysgPSBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUjsKLQkqY3MrKyA9IDA7IC8qIHVwcGVy IGFkZHIgKi8KLQkqY3MrKyA9IDA7IC8qIHZhbHVlICovCi0KLQlpZiAoYXV4X2ludikgeyAvKiBo c2RlczogMTgwOTE3NTc5MCAqLwotCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Ci0J CXVuc2lnbmVkIGludCB0bXA7Ci0KLQkJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShod2Vp Z2h0OChhdXhfaW52KSk7Ci0JCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCByZXF1ZXN0 LT5lbmdpbmUtPmd0LAotCQkJCSAgICAgICBhdXhfaW52LCB0bXApIHsKLQkJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoYXV4X2ludl9yZWcoZW5naW5lKSk7Ci0JCQkqY3MrKyA9IEFVWF9J TlY7Ci0JCX0KLQkJKmNzKysgPSBNSV9OT09QOwotCX0KLQotCWlmIChtb2RlICYgRU1JVF9JTlZB TElEQVRFKQotCQkqY3MrKyA9IHByZXBhcnNlcl9kaXNhYmxlKGZhbHNlKTsKLQotCWludGVsX3Jp bmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIHZvaWQg YXNzZXJ0X3JlcXVlc3RfdmFsaWQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCiB7Ci0tIAoyLjI2 LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=