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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 E504BC4361B for ; Fri, 18 Dec 2020 06:04:48 +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 8A3D323A5B for ; Fri, 18 Dec 2020 06:04:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8A3D323A5B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 114238920F; Fri, 18 Dec 2020 06:04:48 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 92D4589A88 for ; Fri, 18 Dec 2020 06:04:39 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-30-MA2auNCJNr2WRqjUjsCThA-1; Fri, 18 Dec 2020 01:04:35 -0500 X-MC-Unique: MA2auNCJNr2WRqjUjsCThA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 82F73107ACE8 for ; Fri, 18 Dec 2020 06:04:34 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id B90F360BE5 for ; Fri, 18 Dec 2020 06:04:33 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 18 Dec 2020 16:04:17 +1000 Message-Id: <20201218060420.3203-11-airlied@gmail.com> In-Reply-To: <20201218060420.3203-1-airlied@gmail.com> References: <20201218060420.3203-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 10/13] drm/i915: migrate skl planes code new file (v2) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClJld29yayB0aGUgcGxhbmUg aW5pdCBjYWxscyB0byBkbyB0aGUgZ2VuIHRlc3Qgb25lIGxldmVsIGhpZ2hlci4KClJld29yayBz b21lIG9mIHRoZSBwbGFuZSBoZWxwZXJzIHNvIHRoZXkgY2FuIGxpdmUgaW4gbmV3IGZpbGUsCnRo ZXJlIGlzIHN0aWxsIHNvbWUgc2NvcGUgdG8gY2xlYW4gdXAgdGhlIHBsYW5lL2ZiIGludGVyYWN0 aW9ucwpsYXRlci4KCnYyOiBkcm9wIGF0b21pYyBjb2RlIGJhY2ssIHJlbmFtZSBmaWxlIHRvIFZp bGxlIHN1Z2dlc3Rpb25zLAphZGQgaGVhZGVyIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFp cmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpbSmFuaTogZml4ZWQgdXAgc3BhcnNlIHdhcm5pbmdz Ll0KU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KUmVw b3J0ZWQtYnk6IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwuY29tPgpSZXBvcnRlZC1ieTog RGFuIENhcnBlbnRlciA8ZGFuLmNhcnBlbnRlckBvcmFjbGUuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jICAgICB8ICAgIDQgLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYyAgICAgfCAgIDEzICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8IDE0MDEgKy0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDI5ICstCiAuLi4vZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDIxICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyAgIHwgMTM5NSAtLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmggICB8ICAgIDMgLQogLi4u L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jICAgIHwgMjc5MCArKysrKysr KysrKysrKysrKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oICAg IHwgICAzNyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Zsdl9kc2kuYyAgICAgICAg fCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICAgICAgICB8 ICAgIDEgKwogMTUgZmlsZXMgY2hhbmdlZCwgMjg5MyBpbnNlcnRpb25zKCspLCAyODA4IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv c2tsX3VuaXZlcnNhbF9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmlu ZGV4IGUxYTI0MjM5ZTI1ZS4uYTA1NTg2MGRhZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAt MjE5LDcgKzIxOSw4IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9zcHJpdGUubyBcCiAJ ZGlzcGxheS9pbnRlbF90Yy5vIFwKIAlkaXNwbGF5L2ludGVsX3ZnYS5vIFwKLQlkaXNwbGF5L2k5 eHhfcGxhbmUubworCWRpc3BsYXkvaTl4eF9wbGFuZS5vIFwKKwlkaXNwbGF5L3NrbF91bml2ZXJz YWxfcGxhbmUubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxheS9pbnRlbF9hY3Bp Lm8gXAogCWRpc3BsYXkvaW50ZWxfb3ByZWdpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2k5eHhfcGxhbmUuYwppbmRleCBiNzg5ODVjODU1YTUuLjZjNTY4MDc5ZjQ5MiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKQEAgLTU3OCwxMCArNTc4LDYg QEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBv czsKIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVy c2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfUFJJTUFSWSk7 Ci0KIAlwbGFuZSA9IGludGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJ CXJldHVybiBwbGFuZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aWNsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKaW5kZXgg OWQyNDVhNjg5MzIzLi45ZWVlYzZmYWRlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaWNsX2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aWNsX2RzaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCiAjaW5j bHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5jbHVkZSAi c2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgaW50IGhlYWRlcl9jcmVkaXRzX2F2YWls YWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJICAgIGVudW0gdHJh bnNjb2RlciBkc2lfdHJhbnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0 Yy5jCmluZGV4IGFkNjNkZjE2Mzg1MC4uZDg5Y2Y2ZjJkOTdkIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImlu dGVsX3BpcGVfY3JjLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVkZSAiaTl4 eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGljIHZv aWQgYXNzZXJ0X3ZibGFua19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CkBAIC0y NDQsNyArMjQ1LDExIEBAIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAljcnRjLT5waXBlID0gcGlwZTsKIAljcnRj LT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJzW3BpcGVd OwogCi0JcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBl KTsKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQorCQlwcmltYXJ5ID0gc2tsX3VuaXZl cnNhbF9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkgICAgIFBMQU5FX1BSSU1B UlkpOworCWVsc2UKKwkJcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9w cml2LCBwaXBlKTsKIAlpZiAoSVNfRVJSKHByaW1hcnkpKSB7CiAJCXJldCA9IFBUUl9FUlIocHJp bWFyeSk7CiAJCWdvdG8gZmFpbDsKQEAgLTI1NCw3ICsyNTksMTEgQEAgaW50IGludGVsX2NydGNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQog CWZvcl9lYWNoX3Nwcml0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7CiAJCXN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmU7CiAKLQkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRl dl9wcml2LCBwaXBlLCBzcHJpdGUpOworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQor CQkJcGxhbmUgPSBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwKKwkJ CQkJCQkgICBQTEFORV9TUFJJVEUwICsgc3ByaXRlKTsKKwkJZWxzZQorCQkJcGxhbmUgPSBpbnRl bF9zcHJpdGVfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOwogCQlpZiAoSVNf RVJSKHBsYW5lKSkgewogCQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7CiAJCQlnb3RvIGZhaWw7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwppbmRleCBkZWFiYjFhZDYwNDUu LjM2ZmUxYzI1MzllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5j CkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCiAjaW5jbHVkZSAi aW50ZWxfdGMuaCIKICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCisjaW5jbHVkZSAic2tsX3VuaXZl cnNhbF9wbGFuZS5oIgogCiBzdGF0aWMgY29uc3QgdTggaW5kZXhfdG9fZHBfc2lnbmFsX2xldmVs c1tdID0gewogCVswXSA9IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlO X1BSRV9FTVBIX0xFVkVMXzAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jCmluZGV4IDU4OTVkZDAxNzg4OC4uNDdkN2M2MTk4Mzc3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTAsNiArOTAsNyBAQAog I2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgiCiAjaW5jbHVkZSAi aTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGlj IHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQlz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwpAQCAtMTEyLDcgKzExMyw2IEBA IHN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGlj IHZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Ci1zdGF0aWMgdm9pZCBz a2xfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Owogc3RhdGljIHZvaWQgaWxrX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdfc3Rh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1 aXJlX2N0eCAqY3R4KTsKQEAgLTEwNzgsMjYgKzEwNzgsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50 IGludGVsX3RpbGVfc2l6ZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJcmV0dXJuIElTX0dFTihkZXZfcHJpdiwgMikgPyAyMDQ4IDogNDA5NjsKIH0KIAotc3RhdGlj IGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQg cGxhbmUpCi17Ci0JaWYgKCFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJu IGZhbHNlOwotCi0JcmV0dXJuIHBsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOwot fQotCi1zdGF0aWMgYm9vbCBpc19nZW4xMl9jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQotewot CXJldHVybiBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1Mg fHwKLQkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNf Q0NTOwotCi19Ci0KLXN0YXRpYyBib29sIGlzX2dlbjEyX2Njc19wbGFuZShjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQotewotCXJldHVybiBpc19nZW4xMl9jY3Nf bW9kaWZpZXIoZmItPm1vZGlmaWVyKSAmJiBpc19jY3NfcGxhbmUoZmIsIHBsYW5lKTsKLX0KLQog c3RhdGljIGJvb2wgaXNfYXV4X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgcGxhbmUpCiB7CiAJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQpAQCAt MTEwNiwzNSArMTA4Niw2IEBAIHN0YXRpYyBib29sIGlzX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQogCXJldHVybiBwbGFuZSA9PSAxOwogfQog Ci1zdGF0aWMgaW50IG1haW5fdG9fY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgbWFpbl9wbGFuZSkKLXsKLQlkcm1fV0FSTl9PTihmYi0+ZGV2LCAhaXNfY2Nz X21vZGlmaWVyKGZiLT5tb2RpZmllcikgfHwKLQkJICAgIChtYWluX3BsYW5lICYmIG1haW5fcGxh bmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpKTsKLQotCXJldHVybiBmYi0+Zm9ybWF0 LT5udW1fcGxhbmVzIC8gMiArIG1haW5fcGxhbmU7Ci19Ci0KLXN0YXRpYyBpbnQgY2NzX3RvX21h aW5fcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUp Ci17Ci0JZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIp IHx8Ci0JCSAgICBjY3NfcGxhbmUgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzIC8gMik7Ci0KLQly ZXR1cm4gY2NzX3BsYW5lIC0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Ci19Ci0KLWludCBp bnRlbF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IG1haW5fcGxhbmUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19p OTE1KGZiLT5kZXYpOwotCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQotCQly ZXR1cm4gbWFpbl90b19jY3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOwotCWVsc2UgaWYgKElOVEVM X0dFTihpOTE1KSA8IDExICYmCi0JCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5h cihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVy biAwOwotfQotCiBib29sCiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihjb25z dCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAogCQkJCSAgICB1aW50NjRfdCBtb2RpZmll cikKQEAgLTExNTAsNyArMTEwMSw3IEBAIHN0YXRpYyBib29sIGlzX3NlbWlwbGFuYXJfdXZfcGxh bmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJICAgICAgIGNvbG9yX3BsYW5l ID09IDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGludAogaW50ZWxfdGls ZV93aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9y X3BsYW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZmItPmRldik7CkBAIC0xMjAzLDcgKzExNTQsNyBAQCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiAJfQogfQog Ci1zdGF0aWMgdW5zaWduZWQgaW50Cit1bnNpZ25lZCBpbnQKIGludGVsX3RpbGVfaGVpZ2h0KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiB7CiAJaWYg KGlzX2dlbjEyX2Njc19wbGFuZShmYiwgY29sb3JfcGxhbmUpKQpAQCAtMTMwMyw4ICsxMjU0LDgg QEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9saW5lYXJfYWxpZ25tZW50KGNvbnN0IHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHIKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNp Z25lZCBpbnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCi0JCQkJCSBpbnQgY29sb3JfcGxhbmUpCit1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9h bGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICBpbnQgY29s b3JfcGxhbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShmYi0+ZGV2KTsKIApAQCAtMTU3MywxMCArMTUyNCwxMCBAQCBzdGF0aWMgdTMyIGludGVsX2Fk anVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKICAqIEFkanVzdCB0aGUgdGlsZSBv ZmZzZXQgYnkgbW92aW5nIHRoZSBkaWZmZXJlbmNlIGludG8KICAqIHRoZSB4L3kgb2Zmc2V0cy4K ICAqLwotc3RhdGljIHUzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4 LCBpbnQgKnksCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0 ZSwKLQkJCQkJICAgICBpbnQgY29sb3JfcGxhbmUsCi0JCQkJCSAgICAgdTMyIG9sZF9vZmZzZXQs IHUzMiBuZXdfb2Zmc2V0KQordTMyIGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldChp bnQgKngsIGludCAqeSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnN0YXRlLAorCQkJCSAgICAgIGludCBjb2xvcl9wbGFuZSwKKwkJCQkgICAgICB1MzIgb2xkX29m ZnNldCwgdTMyIG5ld19vZmZzZXQpCiB7CiAJcmV0dXJuIGludGVsX2FkanVzdF9hbGlnbmVkX29m ZnNldCh4LCB5LCBzdGF0ZS0+aHcuZmIsIGNvbG9yX3BsYW5lLAogCQkJCQkgICBzdGF0ZS0+aHcu cm90YXRpb24sCkBAIC0xODUwLDcgKzE4MDEsNyBAQCBib29sIGlzX2Njc19tb2RpZmllcih1NjQg bW9kaWZpZXIpCiAKIHN0YXRpYyBpbnQgZ2VuMTJfY2NzX2F1eF9zdHJpZGUoc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUpCiB7Ci0JcmV0dXJuIERJVl9ST1VORF9VUChm Yi0+cGl0Y2hlc1tjY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKV0sCisJcmV0dXJuIERJ Vl9ST1VORF9VUChmYi0+cGl0Y2hlc1tza2xfY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFu ZSldLAogCQkJICAgIDUxMikgKiA2NDsKIH0KIApAQCAtMjAwOCw3ICsxOTU5LDcgQEAgc3RhdGlj IGJvb2wgaW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gc3RyaWRlID4gbWF4X3N0cmlkZTsKIH0KIAotc3Rh dGljIHZvaWQKK3ZvaWQKIGludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1wbGluZyhpbnQgKmhzdWIs IGludCAqdnN1YiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK IAkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpCkBAIC0yMDMzLDcgKzE5ODQsNyBAQCBpbnRlbF9m Yl9wbGFuZV9nZXRfc3Vic2FtcGxpbmcoaW50ICpoc3ViLCBpbnQgKnZzdWIsCiAJCXJldHVybjsK IAl9CiAKLQltYWluX3BsYW5lID0gY2NzX3RvX21haW5fcGxhbmUoZmIsIGNvbG9yX3BsYW5lKTsK KwltYWluX3BsYW5lID0gc2tsX2Njc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7CiAJ KmhzdWIgPSBkcm1fZm9ybWF0X2luZm9fYmxvY2tfd2lkdGgoZmItPmZvcm1hdCwgY29sb3JfcGxh bmUpIC8KIAkJZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoKGZiLT5mb3JtYXQsIG1haW5fcGxh bmUpOwogCkBAIC0yMDczLDcgKzIwMjQsNyBAQCBpbnRlbF9mYl9jaGVja19jY3NfeHkoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjY3NfcGxhbmUsIGludCB4LCBpbnQgeSkKIAljY3Nf eCA9ICh4ICogaHN1YikgJSB0aWxlX3dpZHRoOwogCWNjc195ID0gKHkgKiB2c3ViKSAlIHRpbGVf aGVpZ2h0OwogCi0JbWFpbl9wbGFuZSA9IGNjc190b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUp OworCW1haW5fcGxhbmUgPSBza2xfY2NzX3RvX21haW5fcGxhbmUoZmIsIGNjc19wbGFuZSk7CiAJ bWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3BsYW5lXS54ICUgdGlsZV93aWR0aDsKIAlt YWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsW21haW5fcGxhbmVdLnkgJSB0aWxlX2hlaWdodDsKIApA QCAtMjA5OSw3ICsyMDUwLDcgQEAgc3RhdGljIHZvaWQKIGludGVsX2ZiX3BsYW5lX2RpbXMoaW50 ICp3LCBpbnQgKmgsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUp CiB7CiAJaW50IG1haW5fcGxhbmUgPSBpc19jY3NfcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSA/Ci0J CQkgY2NzX3RvX21haW5fcGxhbmUoZmIsIGNvbG9yX3BsYW5lKSA6IDA7CisJCQkgc2tsX2Njc190 b19tYWluX3BsYW5lKGZiLCBjb2xvcl9wbGFuZSkgOiAwOwogCWludCBtYWluX2hzdWIsIG1haW5f dnN1YjsKIAlpbnQgaHN1YiwgdnN1YjsKIApAQCAtMjQ3NCw3MyArMjQyNSw2IEBAIHN0YXRpYyBp bnQgaTl4eF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQpCiAJfQogfQogCi1pbnQgc2tsX2Zv cm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCwgYm9vbCByZ2Jfb3JkZXIsIGJvb2wgYWxwaGEpCi17 Ci0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2NToKLQkJ cmV0dXJuIERSTV9GT1JNQVRfUkdCNTY1OwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9OVjEyOgot CQlyZXR1cm4gRFJNX0ZPUk1BVF9OVjEyOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YWVVWOgot CQlyZXR1cm4gRFJNX0ZPUk1BVF9YWVVWODg4ODsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAx MDoKLQkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMDsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAx MjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfUDAxMjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfUDAx NjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfUDAxNjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIx MDoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMDsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIx MjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWTIxMjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTIx NjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWTIxNjsKLQljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWTQx MDoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA7Ci0JY2FzZSBQTEFORV9DVExfRk9S TUFUX1k0MTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjsKLQljYXNlIFBM QU5FX0NUTF9GT1JNQVRfWTQxNjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2Owot CWRlZmF1bHQ6Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4ODoKLQkJaWYgKHJnYl9v cmRlcikgewotCQkJaWYgKGFscGhhKQotCQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1I4ODg4Owot CQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9STUFUX1hCR1I4ODg4OwotCQl9IGVsc2UgewotCQkJ aWYgKGFscGhhKQotCQkJCXJldHVybiBEUk1fRk9STUFUX0FSR0I4ODg4OwotCQkJZWxzZQotCQkJ CXJldHVybiBEUk1fRk9STUFUX1hSR0I4ODg4OwotCQl9Ci0JY2FzZSBQTEFORV9DVExfRk9STUFU X1hSR0JfMjEwMTAxMDoKLQkJaWYgKHJnYl9vcmRlcikgewotCQkJaWYgKGFscGhhKQotCQkJCXJl dHVybiBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOwotCQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9S TUFUX1hCR1IyMTAxMDEwOwotCQl9IGVsc2UgewotCQkJaWYgKGFscGhhKQotCQkJCXJldHVybiBE Uk1fRk9STUFUX0FSR0IyMTAxMDEwOwotCQkJZWxzZQotCQkJCXJldHVybiBEUk1fRk9STUFUX1hS R0IyMTAxMDEwOwotCQl9Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGOgot CQlpZiAocmdiX29yZGVyKSB7Ci0JCQlpZiAoYWxwaGEpCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRf QUJHUjE2MTYxNjE2RjsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSMTYxNjE2 MTZGOwotCQl9IGVsc2UgewotCQkJaWYgKGFscGhhKQotCQkJCXJldHVybiBEUk1fRk9STUFUX0FS R0IxNjE2MTYxNkY7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2 RjsKLQkJfQotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqCiBpbml0aWFsX3BsYW5l X3ZtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJICBzdHJ1Y3QgaW50ZWxfaW5p dGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2NvbmZpZykKQEAgLTI4NDUsNTIgKzI3MjksNiBAQCBp bnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj LAogCQkgICZ0b19pbnRlbF9mcm9udGJ1ZmZlcihmYiktPmJpdHMpOwogfQogCi0KLXN0YXRpYyBi b29sCi1za2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSwKLQkJCSAgICAgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIg bWFpbl9vZmZzZXQsCi0JCQkgICAgICAgaW50IGNjc19wbGFuZSkKLXsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlpbnQgYXV4X3ggPSBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54OwotCWludCBhdXhfeSA9IHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnk7Ci0JdTMyIGF1eF9vZmZzZXQgPSBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7Ci0JdTMyIGFsaWdubWVudCA9 IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCBjY3NfcGxhbmUpOwotCWludCBoc3ViOwotCWludCB2 c3ViOwotCi0JaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIs IGNjc19wbGFuZSk7Ci0Jd2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kg PD0gbWFpbl95KSB7Ci0JCWludCB4LCB5OwotCi0JCWlmIChhdXhfeCA9PSBtYWluX3ggJiYgYXV4 X3kgPT0gbWFpbl95KQotCQkJYnJlYWs7Ci0KLQkJaWYgKGF1eF9vZmZzZXQgPT0gMCkKLQkJCWJy ZWFrOwotCi0JCXggPSBhdXhfeCAvIGhzdWI7Ci0JCXkgPSBhdXhfeSAvIHZzdWI7Ci0JCWF1eF9v ZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJ CSAgICAgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkgICAgICAgY2NzX3BsYW5lLAotCQkJCQkJCSAg ICAgICBhdXhfb2Zmc2V0LAotCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0IC0KLQkJCQkJCQkJYWxp Z25tZW50KTsKLQkJYXV4X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1YjsKLQkJYXV4X3kgPSB5 ICogdnN1YiArIGF1eF95ICUgdnN1YjsKLQl9Ci0KLQlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1 eF95ICE9IG1haW5feSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2Njc19wbGFuZV0ub2Zmc2V0ID0gYXV4X29mZnNldDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY2NzX3BsYW5lXS54ID0gYXV4X3g7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Nj c19wbGFuZV0ueSA9IGF1eF95OwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIHVuc2lnbmVkIGludAog aW50ZWxfcGxhbmVfZmVuY2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKIHsKQEAgLTI5MDIsNjE4ICsyNzQwLDYgQEAgaW50ZWxfcGxhbmVfZmVu Y2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK IAlyZXR1cm4geTsKIH0KIAotc3RhdGljIGludCBpbnRlbF9wbGFuZV9taW5fd2lkdGgoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsCi0JCQkJIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgdW5zaWduZWQgaW50IHJvdGF0aW9uKQot ewotCWlmIChwbGFuZS0+bWluX3dpZHRoKQotCQlyZXR1cm4gcGxhbmUtPm1pbl93aWR0aChmYiwg Y29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNlCi0JCXJldHVybiAxOwotfQotCi1zdGF0aWMg aW50IGludGVsX3BsYW5lX21heF93aWR0aChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJ CSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgaW50IGNvbG9yX3BsYW5l LAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5tYXhfd2lkdGgp Ci0JCXJldHVybiBwbGFuZS0+bWF4X3dpZHRoKGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwot CWVsc2UKLQkJcmV0dXJuIElOVF9NQVg7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4 X2hlaWdodChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSAgY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJICBpbnQgY29sb3JfcGxhbmUsCi0JCQkJICB1bnNpZ25l ZCBpbnQgcm90YXRpb24pCi17Ci0JaWYgKHBsYW5lLT5tYXhfaGVpZ2h0KQotCQlyZXR1cm4gcGxh bmUtPm1heF9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7Ci0JZWxzZQotCQlyZXR1 cm4gSU5UX01BWDsKLX0KLQotc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7 Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWlu dCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OwotCWludCB5ID0gcGxhbmVfc3Rh dGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0JaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0JaW50IG1pbl93aWR0aCA9IGludGVsX3BsYW5lX21pbl93 aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQlpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxh bmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90YXRpb24pOwotCWludCBtYXhfaGVpZ2h0ID0g aW50ZWxfcGxhbmVfbWF4X2hlaWdodChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKLQlpbnQgYXV4 X3BsYW5lID0gaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoZmIsIDApOwotCXUzMiBhdXhfb2Zmc2V0 ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ub2Zmc2V0OwotCXUzMiBhbGln bm1lbnQsIG9mZnNldDsKLQotCWlmICh3ID4gbWF4X3dpZHRoIHx8IHcgPCBtaW5fd2lkdGggfHwg aCA+IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAg InJlcXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBvdXRzaWRlIGxpbWl0cyAobWluOiAl ZHgxIG1heDogJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1pbl93aWR0aCwgbWF4X3dpZHRoLCBt YXhfaGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW50ZWxfYWRkX2ZiX29mZnNl dHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0 ZV9hbGlnbmVkX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwKTsKLQlhbGlnbm1lbnQgPSBp bnRlbF9zdXJmX2FsaWdubWVudChmYiwgMCk7Ci0JaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLCBhbGlnbm1lbnQgJiYgIWlzX3Bvd2VyX29mXzIoYWxpZ25tZW50KSkpCi0JCXJldHVybiAt RUlOVkFMOwotCi0JLyoKLQkgKiBBVVggc3VyZmFjZSBvZmZzZXQgaXMgc3BlY2lmaWVkIGFzIHRo ZSBkaXN0YW5jZSBmcm9tIHRoZQotCSAqIG1haW4gc3VyZmFjZSBvZmZzZXQsIGFuZCBpdCBtdXN0 IGJlIG5vbi1uZWdhdGl2ZS4gTWFrZQotCSAqIHN1cmUgdGhhdCBpcyB3aGF0IHdlIHdpbGwgZ2V0 LgotCSAqLwotCWlmIChhdXhfcGxhbmUgJiYgb2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJb2Zmc2V0 ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUs IDAsCi0JCQkJCQkJICAgb2Zmc2V0LCBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7Ci0K LQkvKgotCSAqIFdoZW4gdXNpbmcgYW4gWC10aWxlZCBzdXJmYWNlLCB0aGUgcGxhbmUgYmxvd3Mg dXAKLQkgKiBpZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBleGNlZWQgdGhlIHN0cmlkZS4KLQkgKgot CSAqIFRPRE86IGxpbmVhciBhbmQgWS10aWxlZCBzZWVtIGZpbmUsIFlmIHVudGVzdGVkLAotCSAq LwotCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpIHsKLQkJaW50 IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKLQotCQl3aGlsZSAoKHggKyB3KSAqIGNwcCA+IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpIHsKLQkJCWlmIChvZmZzZXQgPT0gMCkg ewotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAgIlVuYWJsZSB0byBm aW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIFgtdGlsaW5nXG4iKTsK LQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRq dXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCi0JCQkJCQkJCSAgIG9m ZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJfQotCX0KLQotCS8qCi0JICogQ0NTIEFVWCBz dXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXRzLCB3ZSBtdXN0IG1ha2Ugc3Vy ZQotCSAqIHRoZXkgbWF0Y2ggd2l0aCB0aGUgbWFpbiBzdXJmYWNlIHgveSBvZmZzZXRzLgotCSAq LwotCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewotCQl3aGlsZSAoIXNrbF9j aGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwgeCwgeSwKLQkJCQkJCSAgICAg ICBvZmZzZXQsIGF1eF9wbGFuZSkpIHsKLQkJCWlmIChvZmZzZXQgPT0gMCkKLQkJCQlicmVhazsK LQotCQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwg cGxhbmVfc3RhdGUsIDAsCi0JCQkJCQkJCSAgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsK LQkJfQotCi0JCWlmICh4ICE9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLngg fHwKLQkJICAgIHkgIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0ueSkgewot CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJVbmFibGUgdG8gZmluZCBz dWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIpOwotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0 ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0geDsKLQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHk7Ci0KLQkvKgotCSAqIFB1dCB0aGUgZmluYWwgY29v cmRpbmF0ZXMgYmFjayBzbyB0aGF0IHRoZSBzcmMKLQkgKiBjb29yZGluYXRlIGNoZWNrcyB3aWxs IHNlZSB0aGUgcmlnaHQgdmFsdWVzLgotCSAqLwotCWRybV9yZWN0X3RyYW5zbGF0ZV90bygmcGxh bmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJICAgICAgeCA8PCAxNiwgeSA8PCAxNik7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5z aWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWludCB1dl9w bGFuZSA9IDE7Ci0JaW50IG1heF93aWR0aCA9IGludGVsX3BsYW5lX21heF93aWR0aChwbGFuZSwg ZmIsIHV2X3BsYW5lLCByb3RhdGlvbik7Ci0JaW50IG1heF9oZWlnaHQgPSBpbnRlbF9wbGFuZV9t YXhfaGVpZ2h0KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKLQlpbnQgeCA9IHBsYW5l X3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNzsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNy Yy55MSA+PiAxNzsKLQlpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE3OwotCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE3OwotCXUzMiBvZmZzZXQ7Ci0KLQkvKiBGSVhNRSBub3QgcXVpdGUgc3VyZSBob3cv aWYgdGhlc2UgYXBwbHkgdG8gdGhlIGNocm9tYSBwbGFuZSAqLwotCWlmICh3ID4gbWF4X3dpZHRo IHx8IGggPiBtYXhfaGVpZ2h0KSB7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCi0JCQkgICAg IkNiQ3Igc291cmNlIHNpemUgJWR4JWQgdG9vIGJpZyAobGltaXQgJWR4JWQpXG4iLAotCQkJICAg IHcsIGgsIG1heF93aWR0aCwgbWF4X2hlaWdodCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIHV2X3BsYW5lKTsKLQlv ZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwKLQkJCQkJ CSAgICBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwotCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+ bW9kaWZpZXIpKSB7Ci0JCWludCBjY3NfcGxhbmUgPSBtYWluX3RvX2Njc19wbGFuZShmYiwgdXZf cGxhbmUpOwotCQl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3Nf cGxhbmVdLm9mZnNldDsKLQkJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZi LCB1dl9wbGFuZSk7Ci0KLQkJaWYgKG9mZnNldCA+IGF1eF9vZmZzZXQpCi0JCQlvZmZzZXQgPSBp bnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJCQkJCQkgICBwbGFu ZV9zdGF0ZSwKLQkJCQkJCQkJICAgdXZfcGxhbmUsCi0JCQkJCQkJCSAgIG9mZnNldCwKLQkJCQkJ CQkJICAgYXV4X29mZnNldCAmIH4oYWxpZ25tZW50IC0gMSkpOwotCi0JCXdoaWxlICghc2tsX2No ZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAotCQkJCQkJICAgICAg IG9mZnNldCwgY2NzX3BsYW5lKSkgewotCQkJaWYgKG9mZnNldCA9PSAwKQotCQkJCWJyZWFrOwot Ci0JCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAot CQkJCQkJCQkgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkJICAgdXZfcGxhbmUsCi0JCQkJCQkJCSAg IG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKLQkJfQotCi0JCWlmICh4ICE9IHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggfHwKLQkJICAgIHkgIT0gcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSkgewotCQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwK LQkJCQkgICAgIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQg ZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ub2Zmc2V0ID0gb2Zmc2V0OwotCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVt1dl9wbGFuZV0ueCA9IHg7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W3V2X3BsYW5lXS55ID0geTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNrbF9jaGVj a19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK LXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKLQlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0JaW50IHNy Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCXUzMiBvZmZzZXQ7Ci0JaW50 IGNjc19wbGFuZTsKLQotCWZvciAoY2NzX3BsYW5lID0gMDsgY2NzX3BsYW5lIDwgZmItPmZvcm1h dC0+bnVtX3BsYW5lczsgY2NzX3BsYW5lKyspIHsKLQkJaW50IG1haW5faHN1YiwgbWFpbl92c3Vi OwotCQlpbnQgaHN1YiwgdnN1YjsKLQkJaW50IHgsIHk7Ci0KLQkJaWYgKCFpc19jY3NfcGxhbmUo ZmIsIGNjc19wbGFuZSkpCi0JCQljb250aW51ZTsKLQotCQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vi c2FtcGxpbmcoJm1haW5faHN1YiwgJm1haW5fdnN1YiwgZmIsCi0JCQkJCSAgICAgICBjY3NfdG9f bWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKSk7Ci0JCWludGVsX2ZiX3BsYW5lX2dldF9zdWJzYW1w bGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOwotCi0JCWhzdWIgKj0gbWFpbl9oc3Vi OwotCQl2c3ViICo9IG1haW5fdnN1YjsKLQkJeCA9IHNyY194IC8gaHN1YjsKLQkJeSA9IHNyY195 IC8gdnN1YjsKLQotCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCBj Y3NfcGxhbmUpOwotCi0JCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoJngsICZ5LAotCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwKLQkJCQkJCQkgICAgY2NzX3BsYW5l KTsKLQotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBvZmZz ZXQ7Ci0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggPSAoeCAqIGhzdWIg KwotCQkJCQkJCSBzcmNfeCAlIGhzdWIpIC8KLQkJCQkJCQltYWluX2hzdWI7Ci0JCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKwotCQkJCQkJCSBzcmNf eSAlIHZzdWIpIC8KLQkJCQkJCQltYWluX3ZzdWI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWlu dCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOwotCWludCByZXQsIGk7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0 dChwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcGxhbmVf c3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEhhbmRsZSB0aGUg QVVYIHN1cmZhY2UgZmlyc3Qgc2luY2UgdGhlIG1haW4gc3VyZmFjZSBzZXR1cCBkZXBlbmRzIG9u Ci0JICogaXQuCi0JICovCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Ci0J CXJldCA9IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCQlpZiAocmV0 KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3Nl bWlwbGFuYXIoZmItPmZvcm1hdCwKLQkJCQkJCWZiLT5tb2RpZmllcikpIHsKLQkJcmV0ID0gc2ts X2NoZWNrX252MTJfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCQlpZiAocmV0KQotCQkJcmV0 dXJuIHJldDsKLQl9Ci0KLQlmb3IgKGkgPSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpIDwgQVJS QVlfU0laRShwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmUpOyBpKyspIHsKLQkJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7Ci0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS54ID0gMDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSAwOwotCX0KLQotCXJl dCA9IHNrbF9jaGVja19tYWluX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2tsX2RldGFjaF9zY2Fs ZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsIGludCBpZCkKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7 Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX0NUUkwoaW50ZWxfY3J0Yy0+ cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9Q T1MoaW50ZWxfY3J0Yy0+cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgU0tMX1BTX1dJTl9TWihpbnRlbF9jcnRjLT5waXBlLCBpZCksIDApOwotCi0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19Ci0KLS8q Ci0gKiBUaGlzIGZ1bmN0aW9uIGRldGFjaGVzIChha2EuIHVuYmluZHMpIHVudXNlZCBzY2FsZXJz IGluIGhhcmR3YXJlCi0gKi8KLXN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9Ci0JCSZj cnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7Ci0JaW50IGk7Ci0KLQkvKiBsb29wIHRocm91Z2ggYW5k IGRpc2FibGUgc2NhbGVycyB0aGF0IGFyZW4ndCBpbiB1c2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwg aW50ZWxfY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykgewotCQlpZiAoIXNjYWxlcl9zdGF0ZS0+c2Nh bGVyc1tpXS5pbl91c2UpCi0JCQlza2xfZGV0YWNoX3NjYWxlcihpbnRlbF9jcnRjLCBpKTsKLQl9 Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCQkgIGludCBjb2xvcl9wbGFuZSwgdW5zaWdu ZWQgaW50IHJvdGF0aW9uKQotewotCS8qCi0JICogVGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhwcmVz c2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgotCSAqIGxpbmVhciBidWZm ZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KLQkgKi8KLQlpZiAo aXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKLQkJcmV0dXJuIDY0OwotCWVsc2Ug aWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQotCQlyZXR1cm4gaW50ZWxfdGls ZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKLQllbHNlCi0JCXJldHVybiBpbnRlbF90aWxlX3dp ZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KLXUzMiBza2xfcGxhbmVfc3RyaWRlKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgICAgaW50IGNv bG9yX3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5y b3RhdGlvbjsKLQl1MzIgc3RyaWRlID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3Bs YW5lXS5zdHJpZGU7Ci0KLQlpZiAoY29sb3JfcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5l cykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3RyaWRlIC8gc2tsX3BsYW5lX3N0cmlkZV9tdWx0 KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9j dGxfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCi17Ci0Jc3dpdGNoIChwaXhlbF9mb3JtYXQpIHsK LQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX0lOREVYRUQ7 Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUkdC XzU2NTsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4 ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODggfCBQTEFORV9DVExfT1JE RVJfUkdCWDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FS R0I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg7Ci0JY2FzZSBEUk1f Rk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQkJcmV0 dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwIHwgUExBTkVfQ1RMX09SREVSX1JHQlg7 Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEw MTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAxMDEwOwotCWNhc2UgRFJN X0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgot CQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RiB8IFBMQU5FX0NUTF9PUkRF Ul9SR0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2 RjsKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFU X1hZVVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFU X1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZVjsKLQljYXNlIERSTV9GT1JNQVRfWVZZVToK LQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVllV OwotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0 MjIgfCBQTEFORV9DVExfWVVWNDIyX1VZVlk7Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVllVWTsKLQlj YXNlIERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjsKLQlj YXNlIERSTV9GT1JNQVRfUDAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMDsKLQlj YXNlIERSTV9GT1JNQVRfUDAxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxMjsKLQlj YXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUDAxNjsKLQlj YXNlIERSTV9GT1JNQVRfWTIxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMDsKLQlj YXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxMjsKLQlj YXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTIxNjsKLQlj YXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0 MTA7Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWTQxMjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgotCQlyZXR1cm4g UExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShwaXhlbF9m b3JtYXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxf YWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlp ZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0LT5oYXNfYWxwaGEpCi0JCXJldHVybiBQTEFO RV9DVExfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2Js ZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQ TEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgot CQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BSRU1VTFRJUExZOwotCWNhc2UgRFJNX01PREVf QkxFTkRfQ09WRVJBR0U6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfSFdfUFJFTVVMVElQTFk7 Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9t b2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOwotCX0KLX0KLQotc3RhdGlj IHUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhhKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFwbGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+ aGFzX2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRj aCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JM RU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOwotCWNh c2UgRFJNX01PREVfQkxFTkRfUFJFTVVMVEk6Ci0JCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9T V19QUkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFOgotCQlyZXR1cm4g UExBTkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19D QVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NP TE9SX0FMUEhBX0RJU0FCTEU7Ci0JfQotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfdGls aW5nKHU2NCBmYl9tb2RpZmllcikKLXsKLQlzd2l0Y2ggKGZiX21vZGlmaWVyKSB7Ci0JY2FzZSBE Uk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JCWJyZWFrOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hf VElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWDsKLQljYXNlIEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1k7Ci0JY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NU TF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1M6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8Ci0JCSAgICAg ICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFIHwKLQkJICAgICAgIFBMQU5F X0NUTF9DTEVBUl9DT0xPUl9ESVNBQkxFOwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf R0VOMTJfTUNfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExfTUVE SUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6 Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWUY7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRURfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX1JFTkRF Ul9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmJfbW9k aWZpZXIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxf cm90YXRlKHVuc2lnbmVkIGludCByb3RhdGUpCi17Ci0Jc3dpdGNoIChyb3RhdGUpIHsKLQljYXNl IERSTV9NT0RFX1JPVEFURV8wOgotCQlicmVhazsKLQkvKgotCSAqIERSTV9NT0RFX1JPVEFURV8g aXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggWHJhbmRyCi0JICog d2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBw aW5nLgotCSAqLwotCWNhc2UgRFJNX01PREVfUk9UQVRFXzkwOgotCQlyZXR1cm4gUExBTkVfQ1RM X1JPVEFURV8yNzA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMTgwOgotCQlyZXR1cm4gUExBTkVf Q1RMX1JPVEFURV8xODA7Ci0JY2FzZSBEUk1fTU9ERV9ST1RBVEVfMjcwOgotCQlyZXR1cm4gUExB TkVfQ1RMX1JPVEFURV85MDsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0Uocm90YXRlKTsKLQl9 Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBjbmxfcGxhbmVfY3RsX2ZsaXAodW5zaWdu ZWQgaW50IHJlZmxlY3QpCi17Ci0Jc3dpdGNoIChyZWZsZWN0KSB7Ci0JY2FzZSAwOgotCQlicmVh azsKLQljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GTElQX0hP UklaT05UQUw7Ci0JY2FzZSBEUk1fTU9ERV9SRUZMRUNUX1k6Ci0JZGVmYXVsdDoKLQkJTUlTU0lO R19DQVNFKHJlZmxlY3QpOwotCX0KLQotCXJldHVybiAwOwotfQotCi11MzIgc2tsX3BsYW5lX2N0 bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFw aS5jcnRjLT5kZXYpOwotCXUzMiBwbGFuZV9jdGwgPSAwOwotCi0JaWYgKGNydGNfc3RhdGUtPnVh cGkuYXN5bmNfZmxpcCkKLQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9BU1lOQ19GTElQOwotCi0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp Ci0JCXJldHVybiBwbGFuZV9jdGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQot CQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxFOwotCi0JaWYgKGNydGNf c3RhdGUtPmNzY19lbmFibGUpCi0JCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUElQRV9DU0NfRU5B QkxFOwotCi0JcmV0dXJuIHBsYW5lX2N0bDsKLX0KLQotdTMyIHNrbF9wbGFuZV9jdGwoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwot CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwot CXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQljb25z dCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5j a2V5OwotCXUzMiBwbGFuZV9jdGw7Ci0KLQlwbGFuZV9jdGwgPSBQTEFORV9DVExfRU5BQkxFOwot Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAxMCAmJiAhSVNfR0VNSU5JTEFLRShkZXZfcHJp dikpIHsKLQkJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOwot CQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BMQU5FX0dBTU1BX0RJU0FCTEU7Ci0KLQkJaWYgKHBs YW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZyA9PSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpCi0J CQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1lVVl9UT19SR0JfQ1NDX0ZPUk1BVF9CVDcwOTsKLQot CQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxM X1JBTkdFKQotCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZfUkFOR0VfQ09SUkVDVElPTl9E SVNBQkxFOwotCX0KLQotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2Zvcm1hdChmYi0+Zm9y bWF0LT5mb3JtYXQpOwotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3RpbGluZyhmYi0+bW9k aWZpZXIpOwotCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0ZShyb3RhdGlvbiAmIERS TV9NT0RFX1JPVEFURV9NQVNLKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQot CQlwbGFuZV9jdGwgfD0gY25sX3BsYW5lX2N0bF9mbGlwKHJvdGF0aW9uICYKLQkJCQkJCURSTV9N T0RFX1JFRkxFQ1RfTUFTSyk7Ci0KLQlpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZ X0RFU1RJTkFUSU9OKQotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX0tFWV9FTkFCTEVfREVTVElO QVRJT047Ci0JZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkK LQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKLQotCXJldHVybiBw bGFuZV9jdGw7Ci19Ci0KLXUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0JdTMy IHBsYW5lX2NvbG9yX2N0bCA9IDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkK LQkJcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsKLQotCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFi bGUpCi0JCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0dBTU1BX0VOQUJMRTsK LQotCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExB TkVfQ09MT1JfUElQRV9DU0NfRU5BQkxFOwotCi0JcmV0dXJuIHBsYW5lX2NvbG9yX2N0bDsKLX0K LQotdTMyIGdsa19wbGFuZV9jb2xvcl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCi0JCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCXRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQl1MzIgcGxhbmVf Y29sb3JfY3RsID0gMDsKLQotCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QTEFORV9H QU1NQV9ESVNBQkxFOwotCXBsYW5lX2NvbG9yX2N0bCB8PSBnbGtfcGxhbmVfY29sb3JfY3RsX2Fs cGhhKHBsYW5lX3N0YXRlKTsKLQotCWlmIChmYi0+Zm9ybWF0LT5pc195dXYgJiYgIWljbF9pc19o ZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lLT5pZCkpIHsKLQkJc3dpdGNoIChwbGFuZV9zdGF0ZS0+ aHcuY29sb3JfZW5jb2RpbmcpIHsKLQkJY2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDk6Ci0JCQlw bGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfQ1NDX01PREVfWVVWNzA5X1RPX1JHQjcwOTsK LQkJCWJyZWFrOwotCQljYXNlIERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjA6Ci0JCQlwbGFuZV9jb2xv cl9jdGwgfD0KLQkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVYyMDIwX1RPX1JHQjIwMjA7Ci0J CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBsYW5lX2NvbG9yX2N0bCB8PQotCQkJCVBMQU5FX0NP TE9SX0NTQ19NT0RFX1lVVjYwMV9UT19SR0I2MDE7Ci0JCX0KLQkJaWYgKHBsYW5lX3N0YXRlLT5o dy5jb2xvcl9yYW5nZSA9PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKLQkJCXBsYW5lX2Nv bG9yX2N0bCB8PSBQTEFORV9DT0xPUl9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOwotCX0g ZWxzZSBpZiAoZmItPmZvcm1hdC0+aXNfeXV2KSB7Ci0JCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFO RV9DT0xPUl9JTlBVVF9DU0NfRU5BQkxFOwotCX0KLQotCXJldHVybiBwbGFuZV9jb2xvcl9jdGw7 Ci19Ci0KIHN0YXRpYyBpbnQKIF9faW50ZWxfZGlzcGxheV9yZXN1bWUoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKQEAgLTQw NzgsNDYxICszMzA0LDYgQEAgc3RhdGljIHZvaWQgY3B0X3ZlcmlmeV9tb2Rlc2V0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiB9CiAKLS8qCi0gKiBUaGUgaGFyZHdhcmUg cGhhc2UgMC4wIHJlZmVycyB0byB0aGUgY2VudGVyIG9mIHRoZSBwaXhlbC4KLSAqIFdlIHdhbnQg dG8gc3RhcnQgZnJvbSB0aGUgdG9wL2xlZnQgZWRnZSB3aGljaCBpcyBwaGFzZQotICogLTAuNS4g VGhhdCBtYXRjaGVzIGhvdyB0aGUgaGFyZHdhcmUgY2FsY3VsYXRlcyB0aGUgc2NhbGluZwotICog ZmFjdG9ycyAoZnJvbSB0b3AtbGVmdCBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gYm90dG9tLXJpZ2h0 Ci0gKiBvZiB0aGUgbGFzdCBwaXhlbCwgYXMgb3Bwb3NlZCB0byB0aGUgcGl4ZWwgY2VudGVycyku Ci0gKgotICogRm9yIDQ6MjowIHN1YnNhbXBsZWQgY2hyb21hIHBsYW5lcyB3ZSBvYnZpb3VzbHkg aGF2ZSB0bwotICogYWRqdXN0IHRoYXQgc28gdGhhdCB0aGUgY2hyb21hIHNhbXBsZSBwb3NpdGlv biBsYW5kcyBpbgotICogdGhlIHJpZ2h0IHNwb3QuCi0gKgotICogTm90ZSB0aGF0IGZvciBwYWNr ZWQgWUNiQ3IgNDoyOjIgZm9ybWF0cyB0aGVyZSBpcyBubyB3YXkgdG8KLSAqIGNvbnRyb2wgY2hy b21hIHNpdGluZy4gVGhlIGhhcmR3YXJlIHNpbXBseSByZXBsaWNhdGVzIHRoZQotICogY2hyb21h IHNhbXBsZXMgZm9yIGJvdGggb2YgdGhlIGx1bWEgc2FtcGxlcywgYW5kIHRodXMgd2UgZG9uJ3QK LSAqIGFjdHVhbGx5IGdldCB0aGUgZXhwZWN0ZWQgTVBFRzIgY2hyb21hIHNpdGluZyBjb252ZW50 aW9uIDooCi0gKiBUaGUgc2FtZSBiZWhhdmlvdXIgaXMgb2JzZXJ2ZWQgb24gcHJlLVNLTCBwbGF0 Zm9ybXMgYXMgd2VsbC4KLSAqCi0gKiBUaGVvcnkgYmVoaW5kIHRoZSBmb3JtdWxhIChub3RlIHRo YXQgd2UgaWdub3JlIHN1Yi1waXhlbAotICogc291cmNlIGNvb3JkaW5hdGVzKToKLSAqIHMgPSBz b3VyY2Ugc2FtcGxlIHBvc2l0aW9uCi0gKiBkID0gZGVzdGluYXRpb24gc2FtcGxlIHBvc2l0aW9u Ci0gKgotICogRG93bnNjYWxpbmcgNDoxOgotICogLTAuNQotICogfCAwLjAKLSAqIHwgfCAgICAg MS41IChpbml0aWFsIHBoYXNlKQotICogfCB8ICAgICB8Ci0gKiB2IHYgICAgIHYKLSAqIHwgcyB8 IHMgfCBzIHwgcyB8Ci0gKiB8ICAgICAgIGQgICAgICAgfAotICoKLSAqIFVwc2NhbGluZyAxOjQ6 Ci0gKiAtMC41Ci0gKiB8IC0wLjM3NSAoaW5pdGlhbCBwaGFzZSkKLSAqIHwgfCAgICAgMC4wCi0g KiB8IHwgICAgIHwKLSAqIHYgdiAgICAgdgotICogfCAgICAgICBzICAgICAgIHwKLSAqIHwgZCB8 IGQgfCBkIHwgZCB8Ci0gKi8KLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2UoaW50IHN1YiwgaW50 IHNjYWxlLCBib29sIGNocm9tYV9jb3NpdGVkKQotewotCWludCBwaGFzZSA9IC0weDgwMDA7Ci0J dTE2IHRyaXAgPSAwOwotCi0JaWYgKGNocm9tYV9jb3NpdGVkKQotCQlwaGFzZSArPSAoc3ViIC0g MSkgKiAweDgwMDAgLyBzdWI7Ci0KLQlwaGFzZSArPSBzY2FsZSAvICgyICogc3ViKTsKLQotCS8q Ci0JICogSGFyZHdhcmUgaW5pdGlhbCBwaGFzZSBsaW1pdGVkIHRvIFstMC41OjEuNV0uCi0JICog U2luY2UgdGhlIG1heCBoYXJkd2FyZSBzY2FsZSBmYWN0b3IgaXMgMy4wLCB3ZQotCSAqIHNob3Vs ZCBuZXZlciBhY3R1YWxseSBleGNkZWVkIDEuMCBoZXJlLgotCSAqLwotCVdBUk5fT04ocGhhc2Ug PCAtMHg4MDAwIHx8IHBoYXNlID4gMHgxODAwMCk7Ci0KLQlpZiAocGhhc2UgPCAwKQotCQlwaGFz ZSA9IDB4MTAwMDAgKyBwaGFzZTsKLQllbHNlCi0JCXRyaXAgPSBQU19QSEFTRV9UUklQOwotCi0J cmV0dXJuICgocGhhc2UgPj4gMikgJiBQU19QSEFTRV9NQVNLKSB8IHRyaXA7Ci19Ci0KLSNkZWZp bmUgU0tMX01JTl9TUkNfVyA4Ci0jZGVmaW5lIFNLTF9NQVhfU1JDX1cgNDA5NgotI2RlZmluZSBT S0xfTUlOX1NSQ19IIDgKLSNkZWZpbmUgU0tMX01BWF9TUkNfSCA0MDk2Ci0jZGVmaW5lIFNLTF9N SU5fRFNUX1cgOAotI2RlZmluZSBTS0xfTUFYX0RTVF9XIDQwOTYKLSNkZWZpbmUgU0tMX01JTl9E U1RfSCA4Ci0jZGVmaW5lIFNLTF9NQVhfRFNUX0ggNDA5NgotI2RlZmluZSBJQ0xfTUFYX1NSQ19X IDUxMjAKLSNkZWZpbmUgSUNMX01BWF9TUkNfSCA0MDk2Ci0jZGVmaW5lIElDTF9NQVhfRFNUX1cg NTEyMAotI2RlZmluZSBJQ0xfTUFYX0RTVF9IIDQwOTYKLSNkZWZpbmUgU0tMX01JTl9ZVVZfNDIw X1NSQ19XIDE2Ci0jZGVmaW5lIFNLTF9NSU5fWVVWXzQyMF9TUkNfSCAxNgotCi1zdGF0aWMgaW50 Ci1za2xfdXBkYXRlX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwg Ym9vbCBmb3JjZV9kZXRhY2gsCi0JCSAgdW5zaWduZWQgaW50IHNjYWxlcl91c2VyLCBpbnQgKnNj YWxlcl9pZCwKLQkJICBpbnQgc3JjX3csIGludCBzcmNfaCwgaW50IGRzdF93LCBpbnQgZHN0X2gs Ci0JCSAgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0LAotCQkgIHU2NCBtb2Rp ZmllciwgYm9vbCBuZWVkX3NjYWxlcikKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3Rh dGUgKnNjYWxlcl9zdGF0ZSA9Ci0JCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7Ci0Jc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPQotCQl0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVh cGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShp bnRlbF9jcnRjLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk anVzdGVkX21vZGUgPQotCQkmY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKLQotCS8qCi0J ICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJlYWR5IHJvdGF0ZWQgYnkgMjcwIGRlZ3JlZXMgZm9y Ci0JICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUgcm90YXRpb24gY2FzZXMgKHRvIG1hdGNoIHRo ZQotCSAqIEdUVCBtYXBwaW5nKSwgaGVuY2Ugbm8gbmVlZCB0byBhY2NvdW50IGZvciByb3RhdGlv biBoZXJlLgotCSAqLwotCWlmIChzcmNfdyAhPSBkc3RfdyB8fCBzcmNfaCAhPSBkc3RfaCkKLQkJ bmVlZF9zY2FsZXIgPSB0cnVlOwotCi0JLyoKLQkgKiBTY2FsaW5nL2ZpdHRpbmcgbm90IHN1cHBv cnRlZCBpbiBJRi1JRCBtb2RlIGluIEdFTjkrCi0JICogVE9ETzogSW50ZXJsYWNlIGZldGNoIG1v ZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQyMCBwbGFuYXIgZm9ybWF0cy4KLQkgKiBPbmNlIE5WMTIg aXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhlcmUgd2hpbGUgYWxsb2NhdGluZyBzY2FsZXIKLQkgKiBm b3IgTlYxMi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5ICYmIGNydGNfc3Rh dGUtPmh3LmVuYWJsZSAmJgotCSAgICBuZWVkX3NjYWxlciAmJiBhZGp1c3RlZF9tb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAotCQkJICAgICJQaXBlL1BsYW5lIHNjYWxpbmcgbm90IHN1cHBvcnRlZCB3aXRoIElGLUlE IG1vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIGlmIHBsYW5lIGlz IGJlaW5nIGRpc2FibGVkIG9yIHNjYWxlciBpcyBubyBtb3JlIHJlcXVpcmVkIG9yIGZvcmNlIGRl dGFjaAotCSAqICAtIGZyZWUgc2NhbGVyIGJpbmRlZCB0byB0aGlzIHBsYW5lL2NydGMKLQkgKiAg LSBpbiBvcmRlciB0byBkbyB0aGlzLCB1cGRhdGUgY3J0Yy0+c2NhbGVyX3VzYWdlCi0JICoKLQkg KiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBjcnRjX3N0YXRlIGlzIHNldCBmcmVlIHNvIHRoYXQKLQkg KiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVkIHRvIG90aGVyIHVzZXIuIEFjdHVhbCByZWdpc3Rlcgot CSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBzY2FsZXIgaXMgZG9uZSBpbiBwbGFuZS9wYW5lbC1maXQg cHJvZ3JhbW1pbmcuCi0JICogRm9yIHRoaXMgcHVycG9zZSBjcnRjL3BsYW5lX3N0YXRlLT5zY2Fs ZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4KLQkgKi8KLQlpZiAoZm9yY2VfZGV0YWNoIHx8ICFuZWVk X3NjYWxlcikgewotCQlpZiAoKnNjYWxlcl9pZCA+PSAwKSB7Ci0JCQlzY2FsZXJfc3RhdGUtPnNj YWxlcl91c2VycyAmPSB+KDEgPDwgc2NhbGVyX3VzZXIpOwotCQkJc2NhbGVyX3N0YXRlLT5zY2Fs ZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9IDA7Ci0KLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAotCQkJCSAgICAic2NhbGVyX3VzZXIgaW5kZXggJXUuJXU6ICIKLQkJCQkgICAgIlN0YWdl ZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAotCQkJCSAgICBp bnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgKnNjYWxlcl9pZCwKLQkJCQkgICAgc2NhbGVy X3N0YXRlLT5zY2FsZXJfdXNlcnMpOwotCQkJKnNjYWxlcl9pZCA9IC0xOwotCQl9Ci0JCXJldHVy biAwOwotCX0KLQotCWlmIChmb3JtYXQgJiYgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlw bGFuYXIoZm9ybWF0LCBtb2RpZmllcikgJiYKLQkgICAgKHNyY19oIDwgU0tMX01JTl9ZVVZfNDIw X1NSQ19IIHx8IHNyY193IDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19XKSkgewotCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiUGxhbmFyIFlVVjogc3JjIGRpbWVuc2lvbnMgbm90 IG1ldFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHJhbmdlIGNoZWNrcyAqLwot CWlmIChzcmNfdyA8IFNLTF9NSU5fU1JDX1cgfHwgc3JjX2ggPCBTS0xfTUlOX1NSQ19IIHx8Ci0J ICAgIGRzdF93IDwgU0tMX01JTl9EU1RfVyB8fCBkc3RfaCA8IFNLTF9NSU5fRFNUX0ggfHwKLQkg ICAgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKLQkgICAgIChzcmNfdyA+IElDTF9NQVhf U1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0X3cgPiBJQ0xfTUFY X0RTVF9XIHx8IGRzdF9oID4gSUNMX01BWF9EU1RfSCkpIHx8Ci0JICAgIChJTlRFTF9HRU4oZGV2 X3ByaXYpIDwgMTEgJiYKLQkgICAgIChzcmNfdyA+IFNLTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBT S0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0X3cgPiBTS0xfTUFYX0RTVF9XIHx8IGRzdF9oID4g U0tMX01BWF9EU1RfSCkpKQl7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAg ICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogc3JjICV1eCV1IGRzdCAldXgldSAiCi0JCQkgICAg InNpemUgaXMgb3V0IG9mIHNjYWxlciByYW5nZVxuIiwKLQkJCSAgICBpbnRlbF9jcnRjLT5waXBl LCBzY2FsZXJfdXNlciwgc3JjX3csIHNyY19oLAotCQkJICAgIGRzdF93LCBkc3RfaCk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCS8qIG1hcmsgdGhpcyBwbGFuZSBhcyBhIHNjYWxlciB1c2Vy IGluIGNydGNfc3RhdGUgKi8KLQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyB8PSAoMSA8PCBz Y2FsZXJfdXNlcik7Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJzY2FsZXJfdXNlciBp bmRleCAldS4ldTogIgotCQkgICAgInN0YWdlZCBzY2FsaW5nIHJlcXVlc3QgZm9yICV1eCV1LT4l dXgldSBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAotCQkgICAgaW50ZWxfY3J0Yy0+cGlwZSwgc2Nh bGVyX3VzZXIsIHNyY193LCBzcmNfaCwgZHN0X3csIGRzdF9oLAotCQkgICAgc2NhbGVyX3N0YXRl LT5zY2FsZXJfdXNlcnMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX3VwZGF0 ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqcGlwZV9tb2RlID0gJmNydGNfc3RhdGUtPmh3 LnBpcGVfbW9kZTsKLQlpbnQgd2lkdGgsIGhlaWdodDsKLQotCWlmIChjcnRjX3N0YXRlLT5wY2hf cGZpdC5lbmFibGVkKSB7Ci0JCXdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJmNydGNfc3RhdGUtPnBj aF9wZml0LmRzdCk7Ci0JCWhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmY3J0Y19zdGF0ZS0+cGNo X3BmaXQuZHN0KTsKLQl9IGVsc2UgewotCQl3aWR0aCA9IHBpcGVfbW9kZS0+Y3J0Y19oZGlzcGxh eTsKLQkJaGVpZ2h0ID0gcGlwZV9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCX0KLQlyZXR1cm4gc2ts X3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwgIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSwKLQkJCQkg U0tMX0NSVENfSU5ERVgsCi0JCQkJICZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX2lk LAotCQkJCSBjcnRjX3N0YXRlLT5waXBlX3NyY193LCBjcnRjX3N0YXRlLT5waXBlX3NyY19oLAot CQkJCSB3aWR0aCwgaGVpZ2h0LCBOVUxMLCAwLAotCQkJCSBjcnRjX3N0YXRlLT5wY2hfcGZpdC5l bmFibGVkKTsKLX0KLQotLyoqCi0gKiBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZSAtIFN0YWdlcyB1 cGRhdGUgdG8gc2NhbGVyIHN0YXRlIGZvciBhIGdpdmVuIHBsYW5lLgotICogQGNydGNfc3RhdGU6 IGNydGMncyBzY2FsZXIgc3RhdGUKLSAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRl IHRvIHVwZGF0ZQotICoKLSAqIFJldHVybgotICogICAgIDAgLSBzY2FsZXJfdXNhZ2UgdXBkYXRl ZCBzdWNjZXNzZnVsbHkKLSAqICAgIGVycm9yIC0gcmVxdWVzdGVkIHNjYWxpbmcgY2Fubm90IGJl IHN1cHBvcnRlZCBvciBvdGhlciBlcnJvciBjb25kaXRpb24KLSAqLwotc3RhdGljIGludCBza2xf dXBkYXRlX3NjYWxlcl9wbGFuZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK LQkJCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVj dCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPQotCQl0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCByZXQ7Ci0JYm9vbCBmb3JjZV9kZXRhY2ggPSAh ZmIgfHwgIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGU7Ci0JYm9vbCBuZWVkX3NjYWxlciA9IGZh bHNlOwotCi0JLyogUHJlLWdlbjExIGFuZCBTRFIgcGxhbmVzIGFsd2F5cyBuZWVkIGEgc2NhbGVy IGZvciBwbGFuYXIgZm9ybWF0cy4gKi8KLQlpZiAoIWljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYs IGludGVsX3BsYW5lLT5pZCkgJiYKLQkgICAgZmIgJiYgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2 X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKLQkJbmVlZF9zY2FsZXIgPSB0 cnVlOwotCi0JcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwgZm9yY2VfZGV0YWNo LAotCQkJCWRybV9wbGFuZV9pbmRleCgmaW50ZWxfcGxhbmUtPmJhc2UpLAotCQkJCSZwbGFuZV9z dGF0ZS0+c2NhbGVyX2lkLAotCQkJCWRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5z cmMpID4+IDE2LAotCQkJCWRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+ PiAxNiwKLQkJCQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKLQkJCQlk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCi0JCQkJZmIgPyBmYi0+Zm9y bWF0IDogTlVMTCwKLQkJCQlmYiA/IGZiLT5tb2RpZmllciA6IDAsCi0JCQkJbmVlZF9zY2FsZXIp OwotCi0JaWYgKHJldCB8fCBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkIDwgMCkKLQkJcmV0dXJuIHJl dDsKLQotCS8qIGNoZWNrIGNvbG9ya2V5ICovCi0JaWYgKHBsYW5lX3N0YXRlLT5ja2V5LmZsYWdz KSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJbUExBTkU6JWQ6JXNd IHNjYWxpbmcgd2l0aCBjb2xvciBrZXkgbm90IGFsbG93ZWQiLAotCQkJICAgIGludGVsX3BsYW5l LT5iYXNlLmJhc2UuaWQsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UubmFtZSk7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIHNyYyBmb3JtYXQgKi8KLQlzd2l0Y2ggKGZiLT5m b3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9S TUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQljYXNlIERSTV9GT1JN QVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1f Rk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQljYXNl IERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQljYXNlIERSTV9GT1JN QVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQljYXNlIERSTV9GT1JNQVRfTlYxMjoK LQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTA6Ci0JY2Fz ZSBEUk1fRk9STUFUX1AwMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0JY2FzZSBEUk1fRk9S TUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTY6 Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJf MTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJYnJlYWs7Ci0JY2Fz ZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYx NkY6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FS R0IxNjE2MTYxNkY6Ci0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQotCQkJYnJlYWs7 Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAotCQkJICAgICJbUExBTkU6JWQ6JXNdIEZCOiVkIHVuc3VwcG9ydGVkIHNjYWxpbmcgZm9ybWF0 IDB4JXhcbiIsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UuYmFzZS5pZCwgaW50ZWxfcGxhbmUt PmJhc2UubmFtZSwKLQkJCSAgICBmYi0+YmFzZS5pZCwgZmItPmZvcm1hdC0+Zm9ybWF0KTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgc2tsX3NjYWxlcl9k aXNhYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKLXsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUt PnVhcGkuY3J0Yyk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX3NjYWxl cnM7IGkrKykKLQkJc2tsX2RldGFjaF9zY2FsZXIoY3J0YywgaSk7Ci19Ci0KLXN0YXRpYyBpbnQg Y25sX2NvZWZfdGFwKGludCBpKQotewotCXJldHVybiBpICUgNzsKLX0KLQotc3RhdGljIHUxNiBj bmxfbmVhcmVzdF9maWx0ZXJfY29lZihpbnQgdCkKLXsKLQlyZXR1cm4gdCA9PSAzID8gMHgwODAw IDogMHgzMDAwOwotfQotCi0vKgotICogIFRoZW9yeSBiZWhpbmQgc2V0dGluZyBuZWFyZXN0LW5l aWdoYm9yIGludGVnZXIgc2NhbGluZzoKLSAqCi0gKiAgMTcgcGhhc2Ugb2YgNyB0YXBzIHJlcXVp cmVzIDExOSBjb2VmZmljaWVudHMgaW4gNjAgZHdvcmRzIHBlciBzZXQuCi0gKiAgVGhlIGxldHRl ciByZXByZXNlbnRzIHRoZSBmaWx0ZXIgdGFwIChEIGlzIHRoZSBjZW50ZXIgdGFwKSBhbmQgdGhl IG51bWJlcgotICogIHJlcHJlc2VudHMgdGhlIGNvZWZmaWNpZW50IHNldCBmb3IgYSBwaGFzZSAo MC0xNikuCi0gKgotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHxJbmRleCB2YWx1ZSB8 IERhdGEgdmFsdWUgY29lZmZpZW50IDEgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAyIHwKLSAqICAg ICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDBoICAgICAgfCAgICAgICAgICBCMCAgICAg ICAgICAgIHwgICAgICAgICAgQTAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAq ICAgICAgICAgfCAgIDAxaCAgICAgIHwgICAgICAgICAgRDAgICAgICAgICAgICB8ICAgICAgICAg IEMwICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHwgICAwMmgg ICAgICB8ICAgICAgICAgIEYwICAgICAgICAgICAgfCAgICAgICAgICBFMCAgICAgICAgICAgIHwK LSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDNoICAgICAgfCAgICAgICAgICBB MSAgICAgICAgICAgIHwgICAgICAgICAgRzAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKLSAqICAgICAgICAgfCAgIDA0aCAgICAgIHwgICAgICAgICAgQzEgICAgICAgICAgICB8ICAg ICAgICAgIEIxICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHwg ICAuLi4gICAgICB8ICAgICAgICAgIC4uLiAgICAgICAgICAgfCAgICAgICAgICAuLi4gICAgICAg ICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMzhoICAgICAgfCAgICAg ICAgICBCMTYgICAgICAgICAgIHwgICAgICAgICAgQTE2ICAgICAgICAgICB8Ci0gKiAgICAgICAg ICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKLSAqICAgICAgICAgfCAgIDM5aCAgICAgIHwgICAgICAgICAgRDE2ICAgICAgICAg ICB8ICAgICAgICAgIEMxNiAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAg ICAgIHwgICAzQWggICAgICB8ICAgICAgICAgIEYxNiAgICAgICAgICAgfCAgICAgICAgICBDMTYg ICAgICAgICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgM0JoICAgICAg fCAgICAgICAgUmVzZXJ2ZWQgICAgICAgIHwgICAgICAgICAgRzE2ICAgICAgICAgICB8Ci0gKiAg ICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKLSAqCi0gKiAgVG8gZW5hYmxlIG5lYXJlc3QtbmVpZ2hib3Igc2NhbGlu ZzogIHByb2dyYW0gc2NhbGVyIGNvZWZmaWNlbnRzIHdpdGgKLSAqICB0aGUgY2VudGVyIHRhcCAo RHh4KSB2YWx1ZXMgc2V0IHRvIDEgYW5kIGFsbCBvdGhlciB2YWx1ZXMgc2V0IHRvIDAgYXMgcGVy Ci0gKiAgU0NBTEVSX0NPRUZGSUNJRU5UX0ZPUk1BVAotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBj bmxfcHJvZ3JhbV9uZWFyZXN0X2ZpbHRlcl9jb2VmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQkJCSAgICAgZW51bSBwaXBlIHBpcGUsIGludCBpZCwgaW50IHNldCkKLXsK LQlpbnQgaTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDTkxfUFNfQ09FRl9JTkRF WF9TRVQocGlwZSwgaWQsIHNldCksCi0JCQkgIFBTX0NPRUVfSU5ERVhfQVVUT19JTkMpOwotCi0J Zm9yIChpID0gMDsgaSA8IDE3ICogNzsgaSArPSAyKSB7Ci0JCXUzMiB0bXA7Ci0JCWludCB0Owot Ci0JCXQgPSBjbmxfY29lZl90YXAoaSk7Ci0JCXRtcCA9IGNubF9uZWFyZXN0X2ZpbHRlcl9jb2Vm KHQpOwotCi0JCXQgPSBjbmxfY29lZl90YXAoaSArIDEpOwotCQl0bXAgfD0gY25sX25lYXJlc3Rf ZmlsdGVyX2NvZWYodCkgPDwgMTY7Ci0KLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENO TF9QU19DT0VGX0RBVEFfU0VUKHBpcGUsIGlkLCBzZXQpLAotCQkJCSAgdG1wKTsKLQl9Ci0KLQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05MX1BTX0NPRUZfSU5ERVhfU0VUKHBpcGUsIGlk LCBzZXQpLCAwKTsKLX0KLQotaW5saW5lIHUzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0 KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlciwgaW50IHNldCkKLXsKLQlpZiAoZmlsdGVy ID09IERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSB7Ci0JCXJldHVybiAoUFNf RklMVEVSX1BST0dSQU1NRUQgfAotCQkJUFNfWV9WRVJUX0ZJTFRFUl9TRUxFQ1Qoc2V0KSB8Ci0J CQlQU19ZX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpIHwKLQkJCVBTX1VWX1ZFUlRfRklMVEVSX1NF TEVDVChzZXQpIHwKLQkJCVBTX1VWX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpKTsKLQl9Ci0KLQly ZXR1cm4gUFNfRklMVEVSX01FRElVTTsKLX0KLQotdm9pZCBza2xfc2NhbGVyX3NldHVwX2ZpbHRl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLAotCQkJ ICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlcikKLXsK LQlzd2l0Y2ggKGZpbHRlcikgewotCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFVTFQ6Ci0J CWJyZWFrOwotCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1I6Ci0JCWNu bF9wcm9ncmFtX25lYXJlc3RfZmlsdGVyX2NvZWZzKGRldl9wcml2LCBwaXBlLCBpZCwgc2V0KTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZpbHRlcik7Ci0JfQotfQotCi1z dGF0aWMgdm9pZCBza2xfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGludGVsX2NydGNf c2NhbGVyX3N0YXRlICpzY2FsZXJfc3RhdGUgPQotCQkmY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRl OwotCXN0cnVjdCBkcm1fcmVjdCBzcmMgPSB7Ci0JCS54MiA9IGNydGNfc3RhdGUtPnBpcGVfc3Jj X3cgPDwgMTYsCi0JCS55MiA9IGNydGNfc3RhdGUtPnBpcGVfc3JjX2ggPDwgMTYsCi0JfTsKLQlj b25zdCBzdHJ1Y3QgZHJtX3JlY3QgKmRzdCA9ICZjcnRjX3N0YXRlLT5wY2hfcGZpdC5kc3Q7Ci0J dTE2IHV2X3JnYl9ocGhhc2UsIHV2X3JnYl92cGhhc2U7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRj LT5waXBlOwotCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKGRzdCk7Ci0JaW50IGhlaWdodCA9 IGRybV9yZWN0X2hlaWdodChkc3QpOwotCWludCB4ID0gZHN0LT54MTsKLQlpbnQgeSA9IGRzdC0+ eTE7Ci0JaW50IGhzY2FsZSwgdnNjYWxlOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0JaW50 IGlkOwotCXUzMiBwc19jdHJsOwotCi0JaWYgKCFjcnRjX3N0YXRlLT5wY2hfcGZpdC5lbmFibGVk KQotCQlyZXR1cm47Ci0KLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sCi0JCQljcnRj X3N0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX2lkIDwgMCkpCi0JCXJldHVybjsKLQotCWhzY2Fs ZSA9IGRybV9yZWN0X2NhbGNfaHNjYWxlKCZzcmMsIGRzdCwgMCwgSU5UX01BWCk7Ci0JdnNjYWxl ID0gZHJtX3JlY3RfY2FsY192c2NhbGUoJnNyYywgZHN0LCAwLCBJTlRfTUFYKTsKLQotCXV2X3Jn Yl9ocGhhc2UgPSBza2xfc2NhbGVyX2NhbGNfcGhhc2UoMSwgaHNjYWxlLCBmYWxzZSk7Ci0JdXZf cmdiX3ZwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19waGFzZSgxLCB2c2NhbGUsIGZhbHNlKTsKLQot CWlkID0gc2NhbGVyX3N0YXRlLT5zY2FsZXJfaWQ7Ci0KLQlwc19jdHJsID0gc2tsX3NjYWxlcl9n ZXRfZmlsdGVyX3NlbGVjdChjcnRjX3N0YXRlLT5ody5zY2FsaW5nX2ZpbHRlciwgMCk7Ci0JcHNf Y3RybCB8PSAgUFNfU0NBTEVSX0VOIHwgc2NhbGVyX3N0YXRlLT5zY2FsZXJzW2lkXS5tb2RlOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwot Ci0Jc2tsX3NjYWxlcl9zZXR1cF9maWx0ZXIoZGV2X3ByaXYsIHBpcGUsIGlkLCAwLAotCQkJCWNy dGNfc3RhdGUtPmh3LnNjYWxpbmdfZmlsdGVyKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBTS0xfUFNfQ1RSTChwaXBlLCBpZCksIHBzX2N0cmwpOwotCi0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFNLTF9QU19WUEhBU0UocGlwZSwgaWQpLAotCQkJICBQU19ZX1BIQVNFKDAp IHwgUFNfVVZfUkdCX1BIQVNFKHV2X3JnYl92cGhhc2UpKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgU0tMX1BTX0hQSEFTRShwaXBlLCBpZCksCi0JCQkgIFBTX1lfUEhBU0UoMCkgfCBQ U19VVl9SR0JfUEhBU0UodXZfcmdiX2hwaGFzZSkpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBTS0xfUFNfV0lOX1BPUyhwaXBlLCBpZCksCi0JCQkgIHggPDwgMTYgfCB5KTsKLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9TWihwaXBlLCBpZCksCi0JCQkgIHdp ZHRoIDw8IDE2IHwgaGVpZ2h0KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwotfQotCiBzdGF0aWMgdm9pZCBpbGtfcGZpdF9lbmFi bGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0 IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7 CkBAIC04MTgwLDE1MCArNjk1MSw2IEBAIHN0YXRpYyB2b2lkIHNrbF9nZXRfcGZpdF9jb25maWco c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJCXNjYWxlcl9zdGF0ZS0+c2Nh bGVyX3VzZXJzICY9IH4oMSA8PCBTS0xfQ1JUQ19JTkRFWCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1z a2xfZ2V0X2luaXRpYWxfcGxhbmVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJ ICAgICBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgKnBsYW5lX2NvbmZpZykKLXsK LQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3Rh dGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJh c2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2 KTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+YmFz ZS5wcmltYXJ5KTsKLQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwotCWVudW0g cGlwZSBwaXBlOwotCXUzMiB2YWwsIGJhc2UsIG9mZnNldCwgc3RyaWRlX211bHQsIHRpbGluZywg YWxwaGE7Ci0JaW50IGZvdXJjYywgcGl4ZWxfZm9ybWF0OwotCXVuc2lnbmVkIGludCBhbGlnbmVk X2hlaWdodDsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQlzdHJ1Y3QgaW50ZWxfZnJh bWVidWZmZXIgKmludGVsX2ZiOwotCi0JaWYgKCFwbGFuZS0+Z2V0X2h3X3N0YXRlKHBsYW5lLCAm cGlwZSkpCi0JCXJldHVybjsKLQotCWRybV9XQVJOX09OKGRldiwgcGlwZSAhPSBjcnRjLT5waXBl KTsKLQotCWlmIChjcnRjX3N0YXRlLT5iaWdqb2luZXIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCi0JCQkgICAgIlVuc3VwcG9ydGVkIGJpZ2pvaW5lciBjb25maWd1cmF0aW9uIGZv ciBpbml0aWFsIEZCXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWludGVsX2ZiID0ga3phbGxvYyhz aXplb2YoKmludGVsX2ZiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRlbF9mYikgewotCQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgImZhaWxlZCB0byBhbGxvYyBmYlxuIik7Ci0JCXJldHVy bjsKLQl9Ci0KLQlmYiA9ICZpbnRlbF9mYi0+YmFzZTsKLQotCWZiLT5kZXYgPSBkZXY7Ci0KLQl2 YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpKTsK LQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQotCQlwaXhlbF9mb3JtYXQgPSB2YWwg JiBJQ0xfUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOwotCWVsc2UKLQkJcGl4ZWxfZm9ybWF0ID0gdmFs ICYgUExBTkVfQ1RMX0ZPUk1BVF9NQVNLOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJYWxwaGEgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LAotCQkJCSAgICAgIFBMQU5FX0NPTE9SX0NUTChwaXBlLCBwbGFuZV9pZCkpOwot CQlhbHBoYSAmPSBQTEFORV9DT0xPUl9BTFBIQV9NQVNLOwotCX0gZWxzZSB7Ci0JCWFscGhhID0g dmFsICYgUExBTkVfQ1RMX0FMUEhBX01BU0s7Ci0JfQotCi0JZm91cmNjID0gc2tsX2Zvcm1hdF90 b19mb3VyY2MocGl4ZWxfZm9ybWF0LAotCQkJCSAgICAgIHZhbCAmIFBMQU5FX0NUTF9PUkRFUl9S R0JYLCBhbHBoYSk7Ci0JZmItPmZvcm1hdCA9IGRybV9mb3JtYXRfaW5mbyhmb3VyY2MpOwotCi0J dGlsaW5nID0gdmFsICYgUExBTkVfQ1RMX1RJTEVEX01BU0s7Ci0Jc3dpdGNoICh0aWxpbmcpIHsK LQljYXNlIFBMQU5FX0NUTF9USUxFRF9MSU5FQVI6Ci0JCWZiLT5tb2RpZmllciA9IERSTV9GT1JN QVRfTU9EX0xJTkVBUjsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfVElMRURfWDoKLQkJcGxh bmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19YOwotCQlmYi0+bW9kaWZpZXIgPSBJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfVElMRURfWToK LQkJcGxhbmVfY29uZmlnLT50aWxpbmcgPSBJOTE1X1RJTElOR19ZOwotCQlpZiAodmFsICYgUExB TkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKLQkJCWZiLT5tb2RpZmllciA9IElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTIgPwotCQkJCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX1JDX0NDUyA6Ci0JCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOwotCQllbHNlIGlm ICh2YWwgJiBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEUpCi0JCQlmYi0+bW9k aWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M7Ci0JCWVsc2UKLQkJ CWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOwotCQlicmVhazsKLQljYXNl IFBMQU5FX0NUTF9USUxFRF9ZRjoKLQkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5ERVJfREVDT01Q UkVTU0lPTl9FTkFCTEUpCi0JCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOwotCQllbHNlCi0JCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCS8qCi0JICogRFJNX01PREVfUk9UQVRFXyBpcyBjb3VudGVyIGNsb2Nr d2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFuZHIKLQkgKiB3aGlsZSBpOTE1IEhXIHJv dGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMgd2h5IHRoaXMgc3dhcHBpbmcuCi0JICovCi0Jc3dp dGNoICh2YWwgJiBQTEFORV9DVExfUk9UQVRFX01BU0spIHsKLQljYXNlIFBMQU5FX0NUTF9ST1RB VEVfMDoKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8wOwotCQli cmVhazsKLQljYXNlIFBMQU5FX0NUTF9ST1RBVEVfOTA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRp b24gPSBEUk1fTU9ERV9ST1RBVEVfMjcwOwotCQlicmVhazsKLQljYXNlIFBMQU5FX0NUTF9ST1RB VEVfMTgwOgotCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzE4MDsK LQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzI3MDoKLQkJcGxhbmVfY29uZmlnLT5y b3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV85MDsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTAgJiYKLQkgICAgdmFsICYgUExBTkVfQ1RMX0ZMSVBfSE9SSVpP TlRBTCkKLQkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiB8PSBEUk1fTU9ERV9SRUZMRUNUX1g7Ci0K LQkvKiA5MC8yNzAgZGVncmVlIHJvdGF0aW9uIHdvdWxkIHJlcXVpcmUgZXh0cmEgd29yayAqLwot CWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHBsYW5lX2NvbmZpZy0+cm90YXRpb24pKQotCQln b3RvIGVycm9yOwotCi0JYmFzZSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NVUkYo cGlwZSwgcGxhbmVfaWQpKSAmIDB4ZmZmZmYwMDA7Ci0JcGxhbmVfY29uZmlnLT5iYXNlID0gYmFz ZTsKLQotCW9mZnNldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX09GRlNFVChwaXBl LCBwbGFuZV9pZCkpOwotCi0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU0la RShwaXBlLCBwbGFuZV9pZCkpOwotCWZiLT5oZWlnaHQgPSAoKHZhbCA+PiAxNikgJiAweGZmZmYp ICsgMTsKLQlmYi0+d2lkdGggPSAoKHZhbCA+PiAwKSAmIDB4ZmZmZikgKyAxOwotCi0JdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSk7Ci0J c3RyaWRlX211bHQgPSBza2xfcGxhbmVfc3RyaWRlX211bHQoZmIsIDAsIERSTV9NT0RFX1JPVEFU RV8wKTsKLQlmYi0+cGl0Y2hlc1swXSA9ICh2YWwgJiAweDNmZikgKiBzdHJpZGVfbXVsdDsKLQot CWFsaWduZWRfaGVpZ2h0ID0gaW50ZWxfZmJfYWxpZ25faGVpZ2h0KGZiLCAwLCBmYi0+aGVpZ2h0 KTsKLQotCXBsYW5lX2NvbmZpZy0+c2l6ZSA9IGZiLT5waXRjaGVzWzBdICogYWxpZ25lZF9oZWln aHQ7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJICAgICIlcy8lcyB3aXRoIGZi OiBzaXplPSVkeCVkQCVkLCBvZmZzZXQ9JXgsIHBpdGNoICVkLCBzaXplIDB4JXhcbiIsCi0JCSAg ICBjcnRjLT5iYXNlLm5hbWUsIHBsYW5lLT5iYXNlLm5hbWUsIGZiLT53aWR0aCwgZmItPmhlaWdo dCwKLQkJICAgIGZiLT5mb3JtYXQtPmNwcFswXSAqIDgsIGJhc2UsIGZiLT5waXRjaGVzWzBdLAot CQkgICAgcGxhbmVfY29uZmlnLT5zaXplKTsKLQotCXBsYW5lX2NvbmZpZy0+ZmIgPSBpbnRlbF9m YjsKLQlyZXR1cm47Ci0KLWVycm9yOgotCWtmcmVlKGludGVsX2ZiKTsKLX0KLQogc3RhdGljIHZv aWQgaWxrX2dldF9wZml0X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmgKaW5kZXggMmUyMDdhMmY3YTY2Li43ZjAyMWQwZjliMTMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC01Miw2ICs1Miw3IEBAIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlOwogc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydDsKIHN0cnVjdCBp bnRlbF9kcDsKIHN0cnVjdCBpbnRlbF9lbmNvZGVyOworc3RydWN0IGludGVsX2luaXRpYWxfcGxh bmVfY29uZmlnOwogc3RydWN0IGludGVsX2xvYWRfZGV0ZWN0X3BpcGU7CiBzdHJ1Y3QgaW50ZWxf cGxhbmU7CiBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CkBAIC01MDgsNyArNTA5LDYgQEAgdm9p ZCBpbnRlbF9saW5rX2NvbXB1dGVfbV9uKHUxNiBicHAsIGludCBubGFuZXMsCiAJCQkgICAgc3Ry dWN0IGludGVsX2xpbmtfbV9uICptX24sCiAJCQkgICAgYm9vbCBjb25zdGFudF9uLCBib29sIGZl Y19lbmFibGUpOwogYm9vbCBpc19jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKTsKLWludCBpbnRl bF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50 IG1haW5fcGxhbmUpOwogdm9pZCBscHRfZGlzYWJsZV9jbGtvdXRfZHAoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIHUzMiBpbnRlbF9wbGFuZV9mYl9tYXhfc3RyaWRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQs IHU2NCBtb2RpZmllcik7CkBAIC02MTUsMjIgKzYxNSw3IEBAIGludGVsX2xlZ2FjeV9hdXhfdG9f cG93ZXJfZG9tYWluKGVudW0gYXV4X2NoIGF1eF9jaCk7CiB2b2lkIGludGVsX2NydGNfYXJtX2Zp Zm9fdW5kZXJydW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiAKLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2UoaW50 IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jZW50ZXIpOwotdm9pZCBza2xfc2NhbGVyX2Rp c2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKLXUz MiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZp bHRlciwgaW50IHNldCk7Ci12b2lkIHNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCQkgICAgIGludCBpZCwg aW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyKTsKIHZvaWQgaWxrX3BmaXRf ZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpOwot dTMyIGdsa19wbGFuZV9jb2xvcl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCi0JCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KTsKLXUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpOwotdTMyIHNrbF9wbGFuZV9jdGwoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSk7Ci11MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKLXUzMiBza2xfcGxhbmVfc3RyaWRlKGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCi0JCSAgICAgaW50IHBsYW5l KTsKLWludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKTsKLWludCBza2xfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0LCBib29s IHJnYl9vcmRlciwgYm9vbCBhbHBoYSk7CiBpbnQgYmR3X2dldF9waXBlbWlzY19icHAoc3RydWN0 IGludGVsX2NydGMgKmNydGMpOwogdW5zaWduZWQgaW50IGludGVsX3BsYW5lX2ZlbmNlX3lfb2Zm c2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogCkBAIC02 NTMsNiArNjM4LDE4IEBAIHN0cnVjdCBpbnRlbF9lbmNvZGVyICoKIGludGVsX2dldF9jcnRjX25l d19lbmNvZGVyKGNvbnN0IHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwogCit1bnNpZ25lZCBp bnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQkJICBpbnQgY29sb3JfcGxhbmUpOwordm9pZCBpbnRlbF9mYl9wbGFuZV9nZXRfc3Vic2Ft cGxpbmcoaW50ICpoc3ViLCBpbnQgKnZzdWIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAorCQkJCSAgICBpbnQgY29sb3JfcGxhbmUpOwordTMyIGludGVsX3BsYW5l X2FkanVzdF9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKKwkJCQkgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgIGludCBjb2xvcl9wbGFu ZSwKKwkJCQkgICAgICB1MzIgb2xkX29mZnNldCwgdTMyIG5ld19vZmZzZXQpOwordW5zaWduZWQg aW50IGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsIGludCBjb2xvcl9wbGFuZSk7Cit1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9oZWlnaHQoY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSk7CisKIC8qIG1v ZGVzZXR0aW5nICovCiB2b2lkIGludGVsX21vZGVzZXRfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7CiBpbnQgaW50ZWxfbW9kZXNldF9pbml0X25vaXJxKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKaW5kZXggNDRhMjgzNjNmMzI5Li4yNjJjMzcyY2VjNzkg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9kcF9tc3RfaGVscGVy Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgogI2luY2x1ZGUgPGRybS9kcm1f cHJvYmVfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9yZWN0Lmg+CiAjaW5jbHVkZSA8ZHJt L2RybV92YmxhbmsuaD4KQEAgLTE4MzMsNCArMTgzNCwyNCBAQCBzdGF0aWMgaW5saW5lIHUzMiBp bnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJ cmV0dXJuIGRldl9wcml2LT5mZGlfcGxsX2ZyZXE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBp c19jY3NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkK K3sKKwlpZiAoIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gcGxhbmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDI7Cit9CisKK3N0 YXRpYyBpbmxpbmUgYm9vbCBpc19nZW4xMl9jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQorewor CXJldHVybiBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1Mg fHwKKwkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNf Q0NTOworCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19nZW4xMl9jY3NfcGxhbmUoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkKK3sKKwlyZXR1cm4gaXNfZ2Vu MTJfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgJiYgaXNfY2NzX3BsYW5lKGZiLCBwbGFuZSk7 Cit9CisKICNlbmRpZiAvKiAgX19JTlRFTF9ESVNQTEFZX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMKaW5kZXggMGM4Njg0NjM0ZmNhLi42 MjNiZGRjMGM0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHBfbXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9t c3QuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImludGVsX2RwX21zdC5oIgogI2luY2x1 ZGUgImludGVsX2RwaW9fcGh5LmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgorI2luY2x1ZGUg InNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGljIGludCBpbnRlbF9kcF9tc3RfY29tcHV0 ZV9saW5rX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXggY2YzNTg5ZmQwZGRiLi4zOWM1ZGE4MDVjYTgg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMzY1 LDU5OSArMzY1LDYgQEAgaW50IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0 aWMgdTggaWNsX252MTJfeV9wbGFuZV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQotewotCWlmIChJU19ST0NLRVRMQUtFKGk5MTUpKQotCQlyZXR1cm4gQklUKFBMQU5FX1NQUklU RTIpIHwgQklUKFBMQU5FX1NQUklURTMpOwotCWVsc2UKLQkJcmV0dXJuIEJJVChQTEFORV9TUFJJ VEU0KSB8IEJJVChQTEFORV9TUFJJVEU1KTsKLX0KLQotYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5l KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9u djEyX3lfcGxhbmVfbWFzayhkZXZfcHJpdikgJiBCSVQocGxhbmVfaWQpOwotfQotCi1ib29sIGlj bF9pc19oZHJfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBs YW5lX2lkIHBsYW5lX2lkKQotewotCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYm Ci0JCWljbF9oZHJfcGxhbmVfbWFzaygpICYgQklUKHBsYW5lX2lkKTsKLX0KLQotc3RhdGljIHZv aWQKLXNrbF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKLQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJ dW5zaWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGludCAqZGVuKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcu ZmI7Ci0KLQlpZiAoZmItPmZvcm1hdC0+Y3BwWzBdID09IDgpIHsKLQkJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJCSpudW0gPSAx MDsKLQkJCSpkZW4gPSA4OwotCQl9IGVsc2UgewotCQkJKm51bSA9IDk7Ci0JCQkqZGVuID0gODsK LQkJfQotCX0gZWxzZSB7Ci0JCSpudW0gPSAxOwotCQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRp YyBpbnQgc2tsX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVu OwotCXVuc2lnbmVkIGludCBwaXhlbF9yYXRlID0gaW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRj X3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlza2xfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUsICZudW0sICZkZW4pOwotCi0JLyogdHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xr KyAqLwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2 X3ByaXYpKQotCQlkZW4gKj0gMjsKLQotCXJldHVybiBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAq IG51bSwgZGVuKTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJ CSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQt PmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJN X0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCS8q Ci0JCSAqIFZhbGlkYXRlZCBsaW1pdCBpcyA0aywgYnV0IGhhcyA1ayBzaG91bGQKLQkJICogd29y ayBhcGFydCBmcm9tIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Ci0JCSAqIC0gWXRpbGUgKGFscmVh ZHkgbGltaXRlZCB0byA0aykKLQkJICogLSBGUDE2IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0J CSAqIC0gcmVuZGVyIGNvbXByZXNzaW9uIChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0g S1ZNUiBzcHJpdGUgYW5kIGN1cnNvciAoZG9uJ3QgY2FyZSkKLQkJICogLSBob3Jpem9udGFsIHBh bm5pbmcgKFRPRE8gdmVyaWZ5IHRoaXMpCi0JCSAqIC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAo VE9ETyB2ZXJpZnkgdGhpcykKLQkJICovCi0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2 OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8K LQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0 dXJuIDQwOTY7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJl dHVybiAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGludCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwK LQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3Jt YXQtPmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2Ug RFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0J CWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsK LQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRF9DQ1M6Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAo Y3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDUxMjA7Ci0JZGVm YXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0K LX0KLQotc3RhdGljIGludCBpY2xfcGxhbmVfbWluX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNp Z25lZCBpbnQgcm90YXRpb24pCi17Ci0JLyogV2FfMTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYz OiBnZW4xMSsgKi8KLQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZP Uk1BVF9DODoKLQkJcmV0dXJuIDE4OwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCXJldHVy biAxMDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4 ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4 ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFU X0FCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9G T1JNQVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBE Uk1fRk9STUFUX05WMTI6Ci0JCXJldHVybiAyMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQlj YXNlIERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIDEy OwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdS MTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZP Uk1BVF9BQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0J Y2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJ cmV0dXJuIDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAot CQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1cm4gNTEyMDsKLX0KLQot c3RhdGljIGludCBza2xfcGxhbmVfbWF4X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKLQkJCQlpbnQgY29sb3JfcGxhbmUsCi0JCQkJdW5zaWduZWQgaW50IHJvdGF0aW9u KQotewotCXJldHVybiA0MDk2OwotfQotCi1zdGF0aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0 KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwK LQkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JcmV0dXJuIDQzMjA7Ci19Ci0KLXN0YXRp YyB1bnNpZ25lZCBpbnQKLXNrbF9wbGFuZV9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUsCi0JCSAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgIHVu c2lnbmVkIGludCByb3RhdGlvbikKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpp bmZvID0gZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zvcm1hdCk7Ci0JaW50IGNwcCA9IGluZm8tPmNw cFswXTsKLQotCS8qCi0JICogIlRoZSBzdHJpZGUgaW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRo ZQotCSAqIG9mIHRoZSBzaXplIG9mIDhLIHBpeGVscyBhbmQgMzJLIGJ5dGVzLiIKLQkgKi8KLQlp ZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCi0JCXJldHVybiBtaW4oODE5Miwg MzI3NjggLyBjcHApOwotCWVsc2UKLQkJcmV0dXJuIG1pbig4MTkyICogY3BwLCAzMjc2OCk7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1za2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKLQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0J CSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp OwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZi OwotCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JaW50IHNjYWxlcl9pZCA9IHBsYW5l X3N0YXRlLT5zY2FsZXJfaWQ7Ci0JY29uc3Qgc3RydWN0IGludGVsX3NjYWxlciAqc2NhbGVyID0K LQkJJmNydGNfc3RhdGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJzW3NjYWxlcl9pZF07Ci0JaW50IGNy dGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y195ID0gcGxhbmVfc3Rh dGUtPnVhcGkuZHN0LnkxOwotCXUzMiBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3Rh dGUtPnVhcGkuZHN0KTsKLQl1MzIgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0 ZS0+dWFwaS5kc3QpOwotCXUxNiB5X2hwaGFzZSwgdXZfcmdiX2hwaGFzZTsKLQl1MTYgeV92cGhh c2UsIHV2X3JnYl92cGhhc2U7Ci0JaW50IGhzY2FsZSwgdnNjYWxlOwotCXUzMiBwc19jdHJsOwot Ci0JaHNjYWxlID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywK LQkJCQkgICAgICAmcGxhbmVfc3RhdGUtPnVhcGkuZHN0LAotCQkJCSAgICAgIDAsIElOVF9NQVgp OwotCXZzY2FsZSA9IGRybV9yZWN0X2NhbGNfdnNjYWxlKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMs Ci0JCQkJICAgICAgJnBsYW5lX3N0YXRlLT51YXBpLmRzdCwKLQkJCQkgICAgICAwLCBJTlRfTUFY KTsKLQotCS8qIFRPRE86IGhhbmRsZSBzdWItcGl4ZWwgY29vcmRpbmF0ZXMgKi8KLQlpZiAoaW50 ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVy KSAmJgotCSAgICAhaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkgewotCQl5 X2hwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19waGFzZSgxLCBoc2NhbGUsIGZhbHNlKTsKLQkJeV92 cGhhc2UgPSBza2xfc2NhbGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7Ci0KLQkJLyog TVBFRzIgY2hyb21hIHNpdGluZyBjb252ZW50aW9uICovCi0JCXV2X3JnYl9ocGhhc2UgPSBza2xf c2NhbGVyX2NhbGNfcGhhc2UoMiwgaHNjYWxlLCB0cnVlKTsKLQkJdXZfcmdiX3ZwaGFzZSA9IHNr bF9zY2FsZXJfY2FsY19waGFzZSgyLCB2c2NhbGUsIGZhbHNlKTsKLQl9IGVsc2UgewotCQkvKiBu b3QgdXNlZCAqLwotCQl5X2hwaGFzZSA9IDA7Ci0JCXlfdnBoYXNlID0gMDsKLQotCQl1dl9yZ2Jf aHBoYXNlID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOwotCQl1dl9y Z2JfdnBoYXNlID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIHZzY2FsZSwgZmFsc2UpOwotCX0K LQotCXBzX2N0cmwgPSBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KHBsYW5lX3N0YXRlLT5o dy5zY2FsaW5nX2ZpbHRlciwgMCk7Ci0JcHNfY3RybCB8PSBQU19TQ0FMRVJfRU4gfCBQU19QTEFO RV9TRUwocGxhbmUtPmlkKSB8IHNjYWxlci0+bW9kZTsKLQotCXNrbF9zY2FsZXJfc2V0dXBfZmls dGVyKGRldl9wcml2LCBwaXBlLCBzY2FsZXJfaWQsIDAsCi0JCQkJcGxhbmVfc3RhdGUtPmh3LnNj YWxpbmdfZmlsdGVyKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfQ1RS TChwaXBlLCBzY2FsZXJfaWQpLCBwc19jdHJsKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgU0tMX1BTX1ZQSEFTRShwaXBlLCBzY2FsZXJfaWQpLAotCQkJICBQU19ZX1BIQVNFKHlfdnBo YXNlKSB8IFBTX1VWX1JHQl9QSEFTRSh1dl9yZ2JfdnBoYXNlKSk7Ci0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFNLTF9QU19IUEhBU0UocGlwZSwgc2NhbGVyX2lkKSwKLQkJCSAgUFNfWV9Q SEFTRSh5X2hwaGFzZSkgfCBQU19VVl9SR0JfUEhBU0UodXZfcmdiX2hwaGFzZSkpOwotCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1BPUyhwaXBlLCBzY2FsZXJfaWQpLAot CQkJICAoY3J0Y194IDw8IDE2KSB8IGNydGNfeSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFNLTF9QU19XSU5fU1oocGlwZSwgc2NhbGVyX2lkKSwKLQkJCSAgKGNydGNfdyA8PCAxNikg fCBjcnRjX2gpOwotfQotCi0vKiBQcmVvZmZzZXQgdmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZl cnNpb24gKi8KLSNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0JfSEkJCTB4MTgwMAotI2RlZmluZSBQ UkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCi0jZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xP CQkweDE4MDAKLQotI2RlZmluZSAgUk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwg MTYpCi0jZGVmaW5lICBHT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAwKQotI2Rl ZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCi0KLXN0YXRpYyB2 b2lkCi1pY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJ ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwot CWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9 IHBsYW5lLT5pZDsKLQotCXN0YXRpYyBjb25zdCB1MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0g ewotCQkvKgotCQkgKiBCVC42MDEgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgot CQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEs Ci0JCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgsCi0JCSAqICAxLjAwMCwgMS43MzIsIDAuMDAw MF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewotCQkJMHg3QUY4LCAweDc4 MDAsIDB4MCwKLQkJCTB4OEIyOCwgMHg3ODAwLCAweDlBQzAsCi0JCQkweDAsIDB4NzgwMCwgMHg3 REQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJh bmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAw MCwgMS41NzQsCi0JCSAqICAxLjAwMCwgLTAuMTg3LCAtMC40NjgsCi0JCSAqICAxLjAwMCwgMS44 NTUsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3 Qzk4LCAweDc4MDAsIDB4MCwKLQkJCTB4OUVGOCwgMHg3ODAwLCAweEFDMDAsCi0JCQkweDAsIDB4 NzgwMCwgIDB4N0VEOCwKLQkJfSwKLQkJLyoKLQkJICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNy IC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBb MS4wMDAsIDAuMDAwLCAxLjQ3NCwKLQkJICogIDEuMDAwLCAtMC4xNjQ1LCAtMC41NzEzLAotCQkg KiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIw MjBdID0gewotCQkJMHg3QkM4LCAweDc4MDAsIDB4MCwKLQkJCTB4ODkyOCwgMHg3ODAwLCAweEFB ODgsCi0JCQkweDAsIDB4NzgwMCwgMHg3RjEwLAotCQl9LAotCX07Ci0KLQkvKiBNYXRyaXggZm9y IExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBDb252ZXJzaW9uICovCi0Jc3RhdGljIGNvbnN0 IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0gPSB7Ci0JCS8qCi0JCSAqIEJULjYwMSBMaW10 ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKLQkJICogVGhlIG1hdHJpeCByZXF1aXJl ZCBpcyA6Ci0JCSAqIFsxLjE2NDM4NCwgMC4wMDAsIDEuNTk2MDI3LAotCQkgKiAgMS4xNjQzODQs IC0wLjM5MTc1LCAtMC44MTI4MTMsCi0JCSAqICAxLjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0K LQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewotCQkJMHg3Q0M4LCAweDc5NTAs IDB4MCwKLQkJCTB4OEQwMCwgMHg3OTUwLCAweDlDODgsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODEw LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgTGltaXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJh bmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMTY0Mzg0LCAw LjAwMCwgMS43OTI3NDEsCi0JCSAqICAxLjE2NDM4NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCi0J CSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNC Q1JfQlQ3MDldID0gewotCQkJMHg3RTU4LCAweDc5NTAsIDB4MCwKLQkJCTB4ODg4OCwgMHg3OTUw LCAweEFEQTgsCi0JCQkweDAsIDB4Nzk1MCwgIDB4Njg3MCwKLQkJfSwKLQkJLyoKLQkJICogQlQu MjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRy aXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQsIDAuMDAwLCAxLjY3OCwKLQkJICogIDEuMTY0 LCAtMC4xODczLCAtMC42NTA0LAotCQkgKiAgMS4xNjQsIDIuMTQxNywgMC4wMDAwXQotCQkgKi8K LQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwK LQkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODkwLAotCQl9 LAotCX07Ci0JY29uc3QgdTE2ICpjc2M7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3Jh bmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQotCQljc2MgPSBpbnB1dF9jc2NfbWF0 cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107Ci0JZWxzZQotCQljc2MgPSBpbnB1 dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107Ci0KLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5l X2lkLCAwKSwKLQkJCSAgUk9GRihjc2NbMF0pIHwgR09GRihjc2NbMV0pKTsKLQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAx KSwKLQkJCSAgQk9GRihjc2NbMl0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAyKSwKLQkJCSAgUk9GRihjc2NbM10p IHwgR09GRihjc2NbNF0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAzKSwKLQkJCSAgQk9GRihjc2NbNV0pKTsKLQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBs YW5lX2lkLCA0KSwKLQkJCSAgUk9GRihjc2NbNl0pIHwgR09GRihjc2NbN10pKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lk LCA1KSwKLQkJCSAgQk9GRihjc2NbOF0pKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKLQkJCSAgUFJFT0ZG X1lVVl9UT19SR0JfSEkpOwotCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJN X0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAot CQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICAw KTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5Q VVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICBQUkVPRkZfWVVWX1RPX1JH Ql9NRSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVP RkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9MTyk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkgIFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBp cGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKLQkJ CSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQsIDEpLCAweDApOwotCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihw aXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfcGxhbmVfYXN5 bmNfZmxpcChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxh Z3M7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUgcGlw ZSA9IHBsYW5lLT5waXBlOwotCXUzMiBzdXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0ub2Zmc2V0OwotCXUzMiBwbGFuZV9jdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOwotCi0JcGxh bmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKLQotCXNwaW5fbG9ja19p cnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOwot CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwK LQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkg IGludCBjb2xvcl9wbGFuZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBs YW5lLT5pZDsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCWNvbnN0IHN0cnVjdCBk cm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Ci0JdTMy IHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ub2Zmc2V0 OwotCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFu ZSk7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcu ZmI7Ci0JaW50IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGZiLCBjb2xvcl9w bGFuZSk7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0 Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwotCXUzMiB4ID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OwotCXUzMiB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2NvbG9yX3BsYW5lXS55OwotCXUzMiBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCXUzMiBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxh bmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQl1OCBhbHBoYSA9IHBsYW5lX3N0YXRlLT5ody5h bHBoYSA+PiA4OwotCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwLCBhdXhfZGlzdCA9IDA7Ci0JdW5z aWduZWQgbG9uZyBpcnFmbGFnczsKLQl1MzIga2V5bXNrLCBrZXltYXg7Ci0JdTMyIHBsYW5lX2N0 bCA9IHBsYW5lX3N0YXRlLT5jdGw7Ci0KLQlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9jcnRj KGNydGNfc3RhdGUpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VN SU5JTEFLRShkZXZfcHJpdikpCi0JCXBsYW5lX2NvbG9yX2N0bCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9jdGwgfAotCQkJZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0JLyog U2l6ZXMgYXJlIDAgYmFzZWQgKi8KLQlzcmNfdy0tOwotCXNyY19oLS07Ci0KLQlrZXltYXggPSAo a2V5LT5tYXhfdmFsdWUgJiAweGZmZmZmZikgfCBQTEFORV9LRVlNQVhfQUxQSEEoYWxwaGEpOwot Ci0Ja2V5bXNrID0ga2V5LT5jaGFubmVsX21hc2sgJiAweDdmZmZmZmY7Ci0JaWYgKGFscGhhIDwg MHhmZikKLQkJa2V5bXNrIHw9IFBMQU5FX0tFWU1TS19BTFBIQV9FTkFCTEU7Ci0KLQkvKiBUaGUg c2NhbGVyIHdpbGwgaGFuZGxlIHRoZSBvdXRwdXQgcG9zaXRpb24gKi8KLQlpZiAocGxhbmVfc3Rh dGUtPnNjYWxlcl9pZCA+PSAwKSB7Ci0JCWNydGNfeCA9IDA7Ci0JCWNydGNfeSA9IDA7Ci0JfQot Ci0JaWYgKGF1eF9wbGFuZSkgewotCQlhdXhfZGlzdCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVthdXhfcGxhbmVdLm9mZnNldCAtIHN1cmZfYWRkcjsKLQotCQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA8IDEyKQotCQkJYXV4X2Rpc3QgfD0gc2tsX3BsYW5lX3N0cmlkZShwbGFuZV9zdGF0ZSwg YXV4X3BsYW5lKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1RS SURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfUE9TKHBpcGUsIHBsYW5lX2lkKSwKLQkJCSAgKGNydGNfeSA8PCAxNikgfCBjcnRj X3gpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5l X2lkKSwKLQkJCSAgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKLQotCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksIGF1eF9kaXN0KTsKLQot CWlmIChpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKLQkJCQkgIHBs YW5lX3N0YXRlLT5jdXNfY3RsKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8 IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKLQkJCQkgIHBsYW5lX2NvbG9yX2N0bCk7 Ci0KLQlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYs IHBsYW5lX2lkKSkKLQkJaWNsX3Byb2dyYW1faW5wdXRfY3NjKHBsYW5lLCBjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSk7Ci0KLQlza2xfd3JpdGVfcGxhbmVfd20ocGxhbmUsIGNydGNfc3RhdGUpOwot Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tFWVZBTChwaXBlLCBwbGFuZV9p ZCksCi0JCQkgIGtleS0+bWluX3ZhbHVlKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UExBTkVfS0VZTVNLKHBpcGUsIHBsYW5lX2lkKSwga2V5bXNrKTsKLQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lX2lkKSwga2V5bWF4KTsKLQotCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAot CQkJICAoeSA8PCAxNikgfCB4KTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpCi0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5l X2lkKSwKLQkJCQkgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSA8PCAxNikgfCBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueCk7Ci0KLQlpZiAoIWRybV9hdG9taWNfY3J0Y19uZWVk c19tb2Rlc2V0KCZjcnRjX3N0YXRlLT51YXBpKSkKLQkJaW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5l X3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsK LQotCS8qCi0JICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3 YXMgcHJldmlvdXNseQotCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxhbmUgZW5hYmxl IGF0b21pYyBieSB3cml0aW5nCi0JICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUg dGhlIHN1cmZhY2UgcmVnaXN0ZXIuCi0JICovCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7Ci0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAotCQkJICBpbnRlbF9wbGFu ZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOwotCi0JaWYgKHBsYW5lX3N0 YXRlLT5zY2FsZXJfaWQgPj0gMCkKLQkJc2tsX3Byb2dyYW1fc2NhbGVyKHBsYW5lLCBjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF91cGRhdGVfcGxh bmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlpbnQgY29sb3JfcGxhbmUgPSAwOwotCi0JaWYgKHBsYW5lX3N0YXRl LT5wbGFuYXJfbGlua2VkX3BsYW5lICYmICFwbGFuZV9zdGF0ZS0+cGxhbmFyX3NsYXZlKQotCQkv KiBQcm9ncmFtIHRoZSBVViBwbGFuZSBvbiBwbGFuYXIgbWFzdGVyICovCi0JCWNvbG9yX3BsYW5l ID0gMTsKLQotCXNrbF9wcm9ncmFtX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0 ZSwgY29sb3JfcGxhbmUpOwotfQotc3RhdGljIHZvaWQKLXNrbF9kaXNhYmxlX3BsYW5lKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+ aWQ7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotCi0JaWYgKGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLCAw KTsKLQotCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgMCk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLCAwKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotfQotCi1zdGF0aWMgYm9vbAotc2tsX3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgICAgZW51bSBwaXBlICpwaXBlKQotewotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQll bnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKLQllbnVtIHBsYW5l X2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJv b2wgcmV0OwotCi0JcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUp OwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2 LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0 ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfQ1RMKHBsYW5lLT5waXBlLCBwbGFuZV9p ZCkpICYgUExBTkVfQ1RMX0VOQUJMRTsKLQotCSpwaXBlID0gcGxhbmUtPnBpcGU7Ci0KLQlpbnRl bF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKLQot CXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUx NiBnYW1tYVs4XSkKIHsKIAkvKiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8K QEAgLTIyODIsMjM5ICsxNjg5LDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgaW50ZWxf Zm9ybWF0X2lzX3AwMXgodTMyIGZvcm1hdCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2Ug RFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgotCWNhc2UgRFJNX0ZPUk1B VF9QMDE2OgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQot fQotCi1zdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19mYihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2lu dGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCXN0cnVjdCBkcm1fZm9ybWF0 X25hbWVfYnVmIGZvcm1hdF9uYW1lOwotCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAo cm90YXRpb24gJiB+KERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MCkgJiYK LQkgICAgaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsKLQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCi0JCQkgICAgIlJDIHN1cHBvcnQgb25seSB3aXRoIDAvMTgwIGRlZ3JlZSBy b3RhdGlvbiAoJXgpXG4iLAotCQkJICAgIHJvdGF0aW9uKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YICYmCi0JICAgIGZiLT5tb2Rp ZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCi0JCQkgICAgImhvcml6b250YWwgZmxpcCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbGlu ZWFyIHN1cmZhY2UgZm9ybWF0c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChk cm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQlpZiAoZmItPm1vZGlmaWVyICE9 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEICYmCi0JCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJ CQkgICAgIlkvWWYgdGlsaW5nIHJlcXVpcmVkIGZvciA5MC8yNzAhXG4iKTsKLQkJCXJldHVybiAt RUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJICogOTAvMjcwIGlzIG5vdCBhbGxvd2VkIHdpdGggUkdC NjQgMTY6MTY6MTY6MTYgYW5kCi0JCSAqIEluZGV4ZWQgOC1iaXQuIFJHQiAxNi1iaXQgNTo2OjUg aXMgYWxsb3dlZCBnZW4xMSBvbndhcmRzLgotCQkgKi8KLQkJc3dpdGNoIChmYi0+Zm9ybWF0LT5m b3JtYXQpIHsKLQkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDExKQotCQkJCWJyZWFrOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgRFJNX0ZP Uk1BVF9DODoKLQkJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSMTYxNjE2MTZGOgotCQljYXNlIERSTV9GT1JNQVRfQVJHQjE2MTYxNjE2RjoKLQkJ Y2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgot CQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJY2FzZSBEUk1fRk9STUFUX1kyMTY6Ci0JCWNhc2Ug RFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2 MTY6Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlVuc3VwcG9ydGVk IHBpeGVsIGZvcm1hdCAlcyBmb3IgOTAvMjcwIVxuIiwKLQkJCQkgICAgZHJtX2dldF9mb3JtYXRf bmFtZShmYi0+Zm9ybWF0LT5mb3JtYXQsCi0JCQkJCQkJJmZvcm1hdF9uYW1lKSk7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogWS10aWxp bmcgaXMgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBJbnRlcmxhY2UgbW9kZSAqLwotCWlmIChjcnRj X3N0YXRlLT5ody5lbmFibGUgJiYKLQkgICAgY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5m bGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCi0JICAgIChmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9DQ1MgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfR0VOMTJfUkNfQ0NTIHx8Ci0JICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTKSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwKLQkJCSAgICAiWS9ZZiB0aWxpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogV2FfMTYwNjA1NDE4ODp0Z2wgKi8KLQlpZiAo SVNfVElHRVJMQUtFKGRldl9wcml2KSAmJgotCSAgICBwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAm IEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSAmJgotCSAgICBpbnRlbF9mb3JtYXRfaXNfcDAxeChm Yi0+Zm9ybWF0LT5mb3JtYXQpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJ ICAgICJTb3VyY2UgY29sb3Iga2V5aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBQMDF4IGZvcm1hdHNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBza2xfcGxhbmVfY2hlY2tfZHN0X2Nvb3JkaW5hdGVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JaW50IGNydGNfeCA9 IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JaW50IHBpcGVfc3JjX3cgPSBjcnRjX3N0YXRlLT5w aXBlX3NyY193OwotCi0JLyoKLQkgKiBEaXNwbGF5IFdBICMxMTc1OiBjbmwsZ2xrCi0JICogUGxh bmVzIG90aGVyIHRoYW4gdGhlIGN1cnNvciBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRp c3BsYXkKLQkgKiBjb3JydXB0aW9uIGlmIHN0YXJ0aW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9t IHRoZSByaWdodCBlZGdlIG9mCi0JICogdGhlIHNjcmVlbi4KLQkgKiBCZXNpZGVzIHRoZSBhYm92 ZSBXQSBmaXggdGhlIHNpbWlsYXIgcHJvYmxlbSwgd2hlcmUgcGxhbmVzIG90aGVyCi0JICogdGhh biB0aGUgY3Vyc29yIGVuZGluZyBsZXNzIHRoYW4gNCBwaXhlbHMgZnJvbSB0aGUgbGVmdCBlZGdl IG9mIHRoZQotCSAqIHNjcmVlbiBtYXkgY2F1c2UgRklGTyB1bmRlcmZsb3cgYW5kIGRpc3BsYXkg Y29ycnVwdGlvbi4KLQkgKi8KLQlpZiAoKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpIHx8IElTX0NB Tk5PTkxBS0UoZGV2X3ByaXYpKSAmJgotCSAgICAoY3J0Y194ICsgY3J0Y193IDwgNCB8fCBjcnRj X3ggPiBwaXBlX3NyY193IC0gNCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkgICAgInJlcXVlc3RlZCBwbGFuZSBYICVzIHBvc2l0aW9uICVkIGludmFsaWQgKHZhbGlkIHJh bmdlICVkLSVkKVxuIiwKLQkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gImVuZCIgOiAic3Rh cnQiLAotCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyBjcnRjX3ggKyBjcnRjX3cgOiBjcnRj X3gsCi0JCQkgICAgNCwgcGlwZV9zcmNfdyAtIDQpOwotCQlyZXR1cm4gLUVSQU5HRTsKLQl9Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlv bihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2ln bmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgc3JjX3cg PSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQotCS8qIERp c3BsYXkgV0EgIzExMDYgKi8KLQlpZiAoaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFu YXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgotCSAgICBzcmNfdyAmIDMgJiYKLQkgICAg KHJvdGF0aW9uID09IERSTV9NT0RFX1JPVEFURV8yNzAgfHwKLQkgICAgIHJvdGF0aW9uID09IChE Uk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9ST1RBVEVfOTApKSkgewotCQlEUk1fREVCVUdf S01TKCJzcmMgd2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciByb3RhdGVkIHBsYW5hciBZ VVZcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBza2xfcGxhbmVfbWF4X3NjYWxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQkvKgot CSAqIFdlIGRvbid0IHlldCBrbm93IHRoZSBmaW5hbCBzb3VyY2Ugd2lkdGggbm9yCi0JICogd2hl dGhlciB3ZSBjYW4gdXNlIHRoZSBIUSBzY2FsZXIgbW9kZS4gQXNzdW1lCi0JICogdGhlIGJlc3Qg Y2FzZS4KLQkgKiBGSVhNRSBuZWVkIHRvIHByb3Blcmx5IGNoZWNrIHRoaXMgbGF0ZXIuCi0JICov Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJp dikgfHwKLQkgICAgIWludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3Jt YXQsIGZiLT5tb2RpZmllcikpCi0JCXJldHVybiAweDMwMDAwIC0gMTsKLQllbHNlCi0JCXJldHVy biAweDIwMDAwIC0gMTsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2soc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRl bF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCBtaW5fc2NhbGUg PSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Ci0JaW50IG1heF9zY2FsZSA9IERSTV9QTEFO RV9IRUxQRVJfTk9fU0NBTElORzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2tsX3BsYW5lX2NoZWNr X2ZiKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owot Ci0JLyogdXNlIHNjYWxlciB3aGVuIGNvbG9ya2V5IGlzIG5vdCByZXF1aXJlZCAqLwotCWlmICgh cGxhbmVfc3RhdGUtPmNrZXkuZmxhZ3MgJiYgaW50ZWxfZmJfc2NhbGFibGUoZmIpKSB7Ci0JCW1p bl9zY2FsZSA9IDE7Ci0JCW1heF9zY2FsZSA9IHNrbF9wbGFuZV9tYXhfc2NhbGUoZGV2X3ByaXYs IGZiKTsKLQl9Ci0KLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBpbmcocGxh bmVfc3RhdGUsIGNydGNfc3RhdGUsCi0JCQkJCQltaW5fc2NhbGUsIG1heF9zY2FsZSwgdHJ1ZSk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNrbF9jaGVja19wbGFuZV9zdXJm YWNlKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFu ZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHNrbF9wbGFuZV9j aGVja19kc3RfY29vcmRpbmF0ZXMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQp Ci0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0 ZXMocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBza2xf cGxhbmVfY2hlY2tfbnYxMl9yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCS8qIEhXIG9ubHkgaGFzIDggYml0cyBwaXhlbCBwcmVjaXNpb24sIGRpc2Fi bGUgcGxhbmUgaWYgaW52aXNpYmxlICovCi0JaWYgKCEocGxhbmVfc3RhdGUtPmh3LmFscGhhID4+ IDgpKQotCQlwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlID0gZmFsc2U7Ci0KLQlwbGFuZV9zdGF0 ZS0+Y3RsID0gc2tsX3BsYW5lX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJ cGxhbmVfc3RhdGUtPmNvbG9yX2N0bCA9IGdsa19wbGFuZV9jb2xvcl9jdGwoY3J0Y19zdGF0ZSwK LQkJCQkJCQkgICAgIHBsYW5lX3N0YXRlKTsKLQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195 dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgIGljbF9pc19o ZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lLT5pZCkpCi0JCS8qIEVuYWJsZSBhbmQgdXNlIE1QRUct MiBjaHJvbWEgc2l0aW5nICovCi0JCXBsYW5lX3N0YXRlLT5jdXNfY3RsID0gUExBTkVfQ1VTX0VO QUJMRSB8Ci0JCQlQTEFORV9DVVNfSFBIQVNFXzAgfAotCQkJUExBTkVfQ1VTX1ZQSEFTRV9TSUdO X05FR0FUSVZFIHwgUExBTkVfQ1VTX1ZQSEFTRV8wXzI1OwotCWVsc2UKLQkJcGxhbmVfc3RhdGUt PmN1c19jdGwgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBib29sIGhhc19kc3Rfa2V5 X2luX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewog CXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDk7CkBAIC0yNjkyLDE4NCArMTg2Niw2IEBA IHN0YXRpYyBjb25zdCB1MzIgY2h2X3BpcGVfYl9zcHJpdGVfZm9ybWF0c1tdID0gewogCURSTV9G T1JNQVRfVllVWSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9 IHsKLQlEUk1fRk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJH Qjg4ODgsCi0JRFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURS TV9GT1JNQVRfQUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFU X1hCR1IyMTAxMDEwLAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hC R1IxNjE2MTYxNkYsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1f Rk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19 OwotCi1zdGF0aWMgY29uc3QgdTMyIHNrbF9wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JN QVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1f Rk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdS ODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAs Ci0JRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwK LQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwK LQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4 ODgsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0gewotCURS TV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwK LQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1B VF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIx MDEwMTAsCi0JRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYx NjE2RiwKLQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRf VVlWWSwKLQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRf WFlVVjg4ODgsCi0JRFJNX0ZPUk1BVF9QMDEwLAotCURSTV9GT1JNQVRfUDAxMiwKLQlEUk1fRk9S TUFUX1AwMTYsCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRz W10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFU X1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwK LQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRf QUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1f Rk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1f Rk9STUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0J RFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlE Uk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91 dl9wbGFuZV9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2 NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZP Uk1BVF9BUkdCODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIx MDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEw LAotCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JN QVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JN QVRfTlYxMiwKLQlEUk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JN QVRfUDAxNiwKLQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZPUk1BVF9ZMjEyLAotCURSTV9GT1JN QVRfWTIxNiwKLQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAs Ci0JRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYs Ci19OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0gewotCURS TV9GT1JNQVRfQzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwK LQlEUk1fRk9STUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1B VF9BQkdSODg4OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIx MDEwMTAsCi0JRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FCR1IyMTAxMDEw LAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYs Ci0JRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwK LQlEUk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwK LQlEUk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfUDAxMCwK LQlEUk1fRk9STUFUX1AwMTIsCi0JRFJNX0ZPUk1BVF9QMDE2LAotCURSTV9GT1JNQVRfWTIxMCwK LQlEUk1fRk9STUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4 ODgsCi0JRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYx NiwKLQlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgc2ts X3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQsCi0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07 Ci0KLXN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7 Ci0JSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RF9DQ1MsCi0JSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9ZX1RJ TEVELAotCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwK LQlEUk1fRk9STUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGdlbjEyX3Bs YW5lX2Zvcm1hdF9tb2RpZmllcnNfbWNfY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfR0VOMTJfTUNfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywK LQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlE Uk1fRk9STUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQotc3Rh dGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2Njc1tdID0gewot CUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9STUFUX01PRF9MSU5F QVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQogc3RhdGljIGJvb2wgZzR4X3Nwcml0 ZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJCQkJCSAg ICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCiB7CkBAIC0yOTYyLDE0OCArMTk1OCw2IEBAIHN0 YXRpYyBib29sIHZsdl9zcHJpdGVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFu ZSAqX3BsYW5lLAogCX0KIH0KIAotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3Vw cG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgdTMyIGZvcm1hdCwgdTY0 IG1vZGlmaWVyKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShfcGxhbmUpOwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0Rf TElORUFSOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKLQkJYnJlYWs7 Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRURfQ0NTOgotCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQotCQkJcmV0dXJuIGZhbHNl OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChm b3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hC R1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJH Ujg4ODg6Ci0JCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQotCQkJcmV0dXJuIHRydWU7 Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9S TUFUX1hSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERS TV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNh c2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZP Uk1BVF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEy OgotCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQlj YXNlIERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQljYXNlIERSTV9G T1JNQVRfWFZZVTIxMDEwMTA6Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFU X0M4OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9B QkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJN X0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJN X0ZPUk1BVF9ZMjEyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9Y VllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1v ZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGdlbjEyX3BsYW5lX3N1cHBvcnRz X21jX2NjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQpCi17Ci0JLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5jMF0scmtsW2Fs bF0sZGcxW2FsbF0gKi8KLQlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NLRVRMQUtFKGRl dl9wcml2KSB8fAotCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JFVklEX0Ew LCBUR0xfUkVWSURfQzApKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gcGxhbmVfaWQgPCBQ TEFORV9TUFJJVEU0OwotfQotCi1zdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1 cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgICAgdTMyIGZvcm1hdCwg dTY0IG1vZGlmaWVyKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoX3BsYW5lLT5kZXYpOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRl bF9wbGFuZShfcGxhbmUpOwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgotCQlpZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRz X21jX2NjcyhkZXZfcHJpdiwgcGxhbmUtPmlkKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJZmFsbHRo cm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWF9USUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQly ZXR1cm4gZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRf WFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9B UkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWlmIChpc19jY3NfbW9kaWZp ZXIobW9kaWZpZXIpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJN X0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1BVF9V WVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNh c2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERS TV9GT1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJaWYgKG1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKLQkJCXJldHVybiB0cnVlOwot CQlmYWxsdGhyb3VnaDsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNhc2UgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1f Rk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQljYXNl IERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJN X0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgot CWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYx NjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgot CWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6 Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1vZGlmaWVyID09IERSTV9G T1JNQVRfTU9EX0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hf VElMRUQgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQotCQkJ cmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGc0eF9zcHJpdGVf ZnVuY3MgPSB7CiAJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFu ZSwKQEAgLTMxMzIsMjUxICsxOTg2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf ZnVuY3Mgdmx2X3Nwcml0ZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSB2bHZf c3ByaXRlX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBkcm1f YXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwK LQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwK LQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAotCS5m b3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1bmNz ID0gewotCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0J LmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0 cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGlu dGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRl bF9wbGFuZV9kZXN0cm95X3N0YXRlLAotCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEyX3Bs YW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hh c19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBw aXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKCFIQVNfRkJDKGRldl9w cml2KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBpcGUgPT0gUElQRV9BICYmIHBsYW5l X2lkID09IFBMQU5FX1BSSU1BUlk7Ci19Ci0KLXN0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfcGxh bmFyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgZW51bSBwaXBlIHBp cGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JLyogRGlzcGxheSBXQSAjMDg3MDogc2ts LCBieHQgKi8KLQlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJp dikpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmICFJU19H RU1JTklMQUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKLQkJcmV0dXJuIGZhbHNlOwot Ci0JaWYgKHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExBTkVfU1BS SVRFMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25z dCB1MzIgKnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAotCQkJ CQlpbnQgKm51bV9mb3JtYXRzKQotewotCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJp diwgcGlwZSwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3Bs YW5hcl9mb3JtYXRzKTsKLQkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKLQl9IGVsc2Ugewot CQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJu IHNrbF9wbGFuZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqZ2xrX2dldF9w bGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJZW51 bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVtX2Zvcm1h dHMpCi17Ci0JaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9p ZCkpIHsKLQkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1hdHMpOwot CQlyZXR1cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9ybWF0cyA9 IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1h dHM7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51 bSBwbGFuZV9pZCBwbGFuZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlpZiAoaWNs X2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFS UkFZX1NJWkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9oZHJfcGxhbmVf Zm9ybWF0czsKLQl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYsIHBsYW5l X2lkKSkgewotCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFuZV9mb3Jt YXRzKTsKLQkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpu dW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0 dXJuIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1NjQg KmdlbjEyX2dldF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAotCQkJCQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAoZ2VuMTJfcGxh bmVfc3VwcG9ydHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCXJldHVybiBnZW4xMl9w bGFuZV9mb3JtYXRfbW9kaWZpZXJzX21jX2NjczsKLQllbHNlCi0JCXJldHVybiBnZW4xMl9wbGFu ZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2NjczsKLX0KLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hh c19jY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBw aXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKHBsYW5lX2lkID09IFBM QU5FX0NVUlNPUikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTApCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQot CQlyZXR1cm4gcGlwZSAhPSBQSVBFX0M7Ci0KLQlyZXR1cm4gcGlwZSAhPSBQSVBFX0MgJiYKLQkJ KHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlkgfHwKLQkJIHBsYW5lX2lkID09IFBMQU5FX1NQUklU RTApOwotfQotCi1zdHJ1Y3QgaW50ZWxfcGxhbmUgKgotc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBwaXBlIHBp cGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9m dW5jcyAqcGxhbmVfZnVuY3M7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQllbnVtIGRy bV9wbGFuZV90eXBlIHBsYW5lX3R5cGU7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlv bnM7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jc2M7Ci0JY29uc3QgdTY0ICptb2RpZmllcnM7 Ci0JY29uc3QgdTMyICpmb3JtYXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0OwotCi0J cGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwotCWlmIChJU19FUlIocGxhbmUpKQotCQlyZXR1 cm4gcGxhbmU7Ci0KLQlwbGFuZS0+cGlwZSA9IHBpcGU7Ci0JcGxhbmUtPmlkID0gcGxhbmVfaWQ7 Ci0JcGxhbmUtPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIHBsYW5l X2lkKTsKLQotCXBsYW5lLT5oYXNfZmJjID0gc2tsX3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBp cGUsIHBsYW5lX2lkKTsKLQlpZiAocGxhbmUtPmhhc19mYmMpIHsKLQkJc3RydWN0IGludGVsX2Zi YyAqZmJjID0gJmRldl9wcml2LT5mYmM7Ci0KLQkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9i aXRzIHw9IHBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEpIHsKLQkJcGxhbmUtPm1pbl93aWR0aCA9IGljbF9wbGFuZV9taW5fd2lkdGg7 Ci0JCXBsYW5lLT5tYXhfd2lkdGggPSBpY2xfcGxhbmVfbWF4X3dpZHRoOwotCQlwbGFuZS0+bWF4 X2hlaWdodCA9IGljbF9wbGFuZV9tYXhfaGVpZ2h0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewotCQlwbGFuZS0+bWF4 X3dpZHRoID0gZ2xrX3BsYW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xf cGxhbmVfbWF4X2hlaWdodDsKLQl9IGVsc2UgewotCQlwbGFuZS0+bWF4X3dpZHRoID0gc2tsX3Bs YW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4X2hlaWdo dDsKLQl9Ci0KLQlwbGFuZS0+bWF4X3N0cmlkZSA9IHNrbF9wbGFuZV9tYXhfc3RyaWRlOwotCXBs YW5lLT51cGRhdGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOwotCXBsYW5lLT5kaXNhYmxlX3Bs YW5lID0gc2tsX2Rpc2FibGVfcGxhbmU7Ci0JcGxhbmUtPmdldF9od19zdGF0ZSA9IHNrbF9wbGFu ZV9nZXRfaHdfc3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2NoZWNrOwot CXBsYW5lLT5taW5fY2RjbGsgPSBza2xfcGxhbmVfbWluX2NkY2xrOwotCXBsYW5lLT5hc3luY19m bGlwID0gc2tsX3BsYW5lX2FzeW5jX2ZsaXA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMSkKLQkJZm9ybWF0cyA9IGljbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwK LQkJCQkJCXBsYW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWZvcm1hdHMgPSBnbGtf Z2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9m b3JtYXRzKTsKLQllbHNlCi0JCWZvcm1hdHMgPSBza2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3By aXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKLQotCXBsYW5lLT5oYXNf Y2NzID0gc2tsX3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKTsKLQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewotCQltb2RpZmllcnMgPSBnZW4xMl9nZXRfcGxh bmVfbW9kaWZpZXJzKGRldl9wcml2LCBwbGFuZV9pZCk7Ci0JCXBsYW5lX2Z1bmNzID0gJmdlbjEy X3BsYW5lX2Z1bmNzOwotCX0gZWxzZSB7Ci0JCWlmIChwbGFuZS0+aGFzX2NjcykKLQkJCW1vZGlm aWVycyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2NjczsKLQkJZWxzZQotCQkJbW9kaWZp ZXJzID0gc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3M7Ci0JCXBsYW5lX2Z1bmNzID0g JnNrbF9wbGFuZV9mdW5jczsKLQl9Ci0KLQlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkK LQkJcGxhbmVfdHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7Ci0JZWxzZQotCQlwbGFuZV90 eXBlID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKLQotCXJldCA9IGRybV91bml2ZXJzYWxfcGxh bmVfaW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJCSAgICAgICAwLCBwbGFu ZV9mdW5jcywKLQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsIG1vZGlmaWVycywKLQkJ CQkgICAgICAgcGxhbmVfdHlwZSwKLQkJCQkgICAgICAgInBsYW5lICVkJWMiLCBwbGFuZV9pZCAr IDEsCi0JCQkJICAgICAgIHBpcGVfbmFtZShwaXBlKSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWls OwotCi0Jc3VwcG9ydGVkX3JvdGF0aW9ucyA9Ci0JCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01P REVfUk9UQVRFXzkwIHwKLQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFURV8y NzA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJc3VwcG9ydGVkX3JvdGF0 aW9ucyB8PSBEUk1fTU9ERV9SRUZMRUNUX1g7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9u X3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwKLQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJ CSAgIHN1cHBvcnRlZF9yb3RhdGlvbnMpOwotCi0Jc3VwcG9ydGVkX2NzYyA9IEJJVChEUk1fQ09M T1JfWUNCQ1JfQlQ2MDEpIHwgQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSk7Ci0KLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJc3Vw cG9ydGVkX2NzYyB8PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUMjAyMCk7Ci0KLQlkcm1fcGxhbmVf Y3JlYXRlX2NvbG9yX3Byb3BlcnRpZXMoJnBsYW5lLT5iYXNlLAotCQkJCQkgIHN1cHBvcnRlZF9j c2MsCi0JCQkJCSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKSB8Ci0JCQkJCSAg QklUKERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKSwKLQkJCQkJICBEUk1fQ09MT1JfWUNCQ1Jf QlQ3MDksCi0JCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOwotCi0JZHJtX3Bs YW5lX2NyZWF0ZV9hbHBoYV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UpOwotCWRybV9wbGFuZV9jcmVh dGVfYmxlbmRfbW9kZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgQklUKERSTV9N T0RFX0JMRU5EX1BJWEVMX05PTkUpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUFJF TVVMVEkpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfQ09WRVJBR0UpKTsKLQotCWRy bV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCBwbGFu ZV9pZCk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKLQkJZHJtX3BsYW5lX2Vu YWJsZV9mYl9kYW1hZ2VfY2xpcHMoJnBsYW5lLT5iYXNlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDEwKQotCQlkcm1fcGxhbmVfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5 KCZwbGFuZS0+YmFzZSwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAot CQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7Ci0KLQlkcm1f cGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3Mp OwotCi0JcmV0dXJuIHBsYW5lOwotCi1mYWlsOgotCWludGVsX3BsYW5lX2ZyZWUocGxhbmUpOwot Ci0JcmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RydWN0IGludGVsX3BsYW5lICoKIGludGVs X3Nwcml0ZV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CQkJICBlbnVtIHBpcGUgcGlwZSwgaW50IHNwcml0ZSkKQEAgLTMzODksMTAgKzE5OTgsNiBAQCBp bnRlbF9zcHJpdGVfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBvczsKIAotCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZf cHJpdiwgcGlwZSwKLQkJCQkJCSAgUExBTkVfU1BSSVRFMCArIHNwcml0ZSk7Ci0KIAlwbGFuZSA9 IGludGVsX3BsYW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJCXJldHVybiBwbGFu ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRl LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmluZGV4IDc2 MTI2ZGQ4ZDU4NC4uZTljZjA4ZDBjOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfc3ByaXRlLmgKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0 ZV9lbmQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKTsKIGludCBpbnRl bF9wbGFuZV9jaGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSk7CiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogaW50IGNodl9wbGFuZV9jaGVja19yb3Rh dGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKLXN0cnVj dCBpbnRlbF9wbGFuZSAqCi1za2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9p ZCBwbGFuZV9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNrKHZvaWQp CiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJz YWxfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9w bGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWI5YzY0MTFi N2JlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xf dW5pdmVyc2FsX3BsYW5lLmMKQEAgLTAsMCArMSwyNzkwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24K KyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9kYW1hZ2VfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNp bmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5 cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wc3IuaCIKKyNp bmNsdWRlICJpbnRlbF9zcHJpdGUuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgi CisKK3N0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFU X0M4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZP Uk1BVF9YQkdSODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4 ODgsCisJRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAor CURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJ RFJNX0ZPUk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJ RFJNX0ZPUk1BVF9WWVVZLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29u c3QgdTMyIHNrbF9wbGFuYXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZP Uk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4 LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9S TUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9Y UkdCMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lV WVYsCisJRFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZ VVksCisJRFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0 aWMgY29uc3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJ RFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hC R1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9YUkdCMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9S TUFUX1lVWVYsCisJRFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9S TUFUX1ZZVVksCisJRFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJN X0ZPUk1BVF9QMDEwLAorCURSTV9GT1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCit9Owor CitzdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZP Uk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURS TV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FC R1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAx MCwKKwlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJ RFJNX0ZPUk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJ RFJNX0ZPUk1BVF9WWVVZLAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJ RFJNX0ZPUk1BVF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllV MjEwMTAxMCwKKwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUx NjE2MTYxNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRz W10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFU X1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwK KwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRf QUJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1f Rk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZLAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1f Rk9STUFUX1AwMTAsCisJRFJNX0ZPUk1BVF9QMDEyLAorCURSTV9GT1JNQVRfUDAxNiwKKwlEUk1f Rk9STUFUX1kyMTAsCisJRFJNX0ZPUk1BVF9ZMjEyLAorCURSTV9GT1JNQVRfWTIxNiwKKwlEUk1f Rk9STUFUX1hZVVY4ODg4LAorCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCisJRFJNX0ZPUk1BVF9Y VllVMTJfMTYxNjE2MTYsCisJRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCit9OworCitzdGF0aWMg Y29uc3QgdTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJ RFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hC R1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9BUkdCMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRf WFJHQjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGLAorCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lV WVYsCisJRFJNX0ZPUk1BVF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZ VVksCisJRFJNX0ZPUk1BVF9OVjEyLAorCURSTV9GT1JNQVRfUDAxMCwKKwlEUk1fRk9STUFUX1Aw MTIsCisJRFJNX0ZPUk1BVF9QMDE2LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1ky MTIsCisJRFJNX0ZPUk1BVF9ZMjE2LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1B VF9YVllVMjEwMTAxMCwKKwlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFU X1hWWVUxNjE2MTYxNiwKK307CisKK3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9t b2RpZmllcnNfbm9jY3NbXSA9IHsKKwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCisJSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1B VF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25z dCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCisJSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9S TUFUX01PRF9YX1RJTEVELAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01P RF9JTlZBTElECit9OworCitzdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2Rp ZmllcnNfbWNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NT LAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9M SU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBn ZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2Njc1tdID0geworCUk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1B VF9NT0RfSU5WQUxJRAorfTsKKworaW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQs IGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2Fz ZSBQTEFORV9DVExfRk9STUFUX1JHQl81NjU6CisJCXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsK KwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfTlYxMjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsK KwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFlVVjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4 ODg7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1Aw MTA7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1Aw MTI7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1Aw MTY7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1ky MTA7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1ky MTI7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1ky MTY7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTA6CisJCXJldHVybiBEUk1fRk9STUFUX1hW WVUyMTAxMDEwOworCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEyOgorCQlyZXR1cm4gRFJNX0ZP Uk1BVF9YVllVMTJfMTYxNjE2MTY7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTY6CisJCXJl dHVybiBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjsKKwlkZWZhdWx0OgorCWNhc2UgUExBTkVfQ1RM X0ZPUk1BVF9YUkdCXzg4ODg6CisJCWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlmIChhbHBoYSkKKwkJ CQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSODg4ODsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZP Uk1BVF9YQkdSODg4ODsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJN X0ZPUk1BVF9BUkdCODg4ODsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4 ODsKKwkJfQorCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA6CisJCWlmIChyZ2Jf b3JkZXIpIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAx MDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDsKKwkJfSBlbHNl IHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKKwkJ CWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDsKKwkJfQorCWNhc2UgUExB TkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjoKKwkJaWYgKHJnYl9vcmRlcikgeworCQkJaWYg KGFscGhhKQorCQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY7CisJCQllbHNlCisJ CQkJcmV0dXJuIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjsKKwkJfSBlbHNlIHsKKwkJCWlmIChh bHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOworCQkJZWxzZQorCQkJ CXJldHVybiBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1 OCBpY2xfbnYxMl95X3BsYW5lX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7 CisJaWYgKElTX1JPQ0tFVExBS0UoaTkxNSkpCisJCXJldHVybiBCSVQoUExBTkVfU1BSSVRFMikg fCBCSVQoUExBTkVfU1BSSVRFMyk7CisJZWxzZQorCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTQp IHwgQklUKFBMQU5FX1NQUklURTUpOworfQorCitib29sIGljbF9pc19udjEyX3lfcGxhbmUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVf aWQpCit7CisJcmV0dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJaWNsX252MTJf eV9wbGFuZV9tYXNrKGRldl9wcml2KSAmIEJJVChwbGFuZV9pZCk7Cit9CisKK2Jvb2wgaWNsX2lz X2hkcl9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVf aWQgcGxhbmVfaWQpCit7CisJcmV0dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJ aWNsX2hkcl9wbGFuZV9tYXNrKCkgJiBCSVQocGxhbmVfaWQpOworfQorCitzdGF0aWMgdm9pZAor c2tsX3BsYW5lX3JhdGlvKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQl1bnNp Z25lZCBpbnQgKm51bSwgdW5zaWduZWQgaW50ICpkZW4pCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK Kwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK KworCWlmIChmYi0+Zm9ybWF0LT5jcHBbMF0gPT0gOCkgeworCQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgeworCQkJKm51bSA9IDEwOwor CQkJKmRlbiA9IDg7CisJCX0gZWxzZSB7CisJCQkqbnVtID0gOTsKKwkJCSpkZW4gPSA4OworCQl9 CisJfSBlbHNlIHsKKwkJKm51bSA9IDE7CisJCSpkZW4gPSAxOworCX0KK30KKworc3RhdGljIGlu dCBza2xfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgbnVtLCBkZW47CisJ dW5zaWduZWQgaW50IHBpeGVsX3JhdGUgPSBpbnRlbF9wbGFuZV9waXhlbF9yYXRlKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlKTsKKworCXNrbF9wbGFuZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSwgJm51bSwgJmRlbik7CisKKwkvKiB0d28gcGl4ZWxzIHBlciBjbG9jayBvbiBnbGsrICov CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJp dikpCisJCWRlbiAqPSAyOworCisJcmV0dXJuIERJVl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVt LCBkZW4pOworfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAg ICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3Bw W2NvbG9yX3BsYW5lXTsKKworCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9S TUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJLyoKKwkJ ICogVmFsaWRhdGVkIGxpbWl0IGlzIDRrLCBidXQgaGFzIDVrIHNob3VsZAorCQkgKiB3b3JrIGFw YXJ0IGZyb20gdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKwkJICogLSBZdGlsZSAoYWxyZWFkeSBs aW1pdGVkIHRvIDRrKQorCQkgKiAtIEZQMTYgKGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICog LSByZW5kZXIgY29tcHJlc3Npb24gKGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICogLSBLVk1S IHNwcml0ZSBhbmQgY3Vyc29yIChkb24ndCBjYXJlKQorCQkgKiAtIGhvcml6b250YWwgcGFubmlu ZyAoVE9ETyB2ZXJpZnkgdGhpcykKKwkJICogLSBwaXBlIGFuZCBwbGFuZSBzY2FsaW5nIChUT0RP IHZlcmlmeSB0aGlzKQorCQkgKi8KKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDQwOTY7CisJ CWVsc2UKKwkJCXJldHVybiA1MTIwOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NT OgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzoKKwkJLyogRklYTUUgQVVYIHBsYW5lPyAqLworCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RUQ6CisJCWlmIChjcHAgPT0gOCkKKwkJCXJldHVybiAyMDQ4OworCQllbHNlCisJCQlyZXR1cm4g NDA5NjsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKKwkJcmV0dXJu IDIwNDg7CisJfQorfQorCitzdGF0aWMgaW50IGdsa19wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJ ICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+ Y3BwW2NvbG9yX3BsYW5lXTsKKworCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1f Rk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJaWYg KGNwcCA9PSA4KQorCQkJcmV0dXJuIDQwOTY7CisJCWVsc2UKKwkJCXJldHVybiA1MTIwOworCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lm X1RJTEVEX0NDUzoKKwkJLyogRklYTUUgQVVYIHBsYW5lPyAqLworCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCWlmIChjcHAg PT0gOCkKKwkJCXJldHVybiAyMDQ4OworCQllbHNlCisJCQlyZXR1cm4gNTEyMDsKKwlkZWZhdWx0 OgorCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKKwkJcmV0dXJuIDIwNDg7CisJfQorfQor CitzdGF0aWMgaW50IGljbF9wbGFuZV9taW5fd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVk IGludCByb3RhdGlvbikKK3sKKwkvKiBXYV8xNDAxMTI2NDY1NywgV2FfMTQwMTEwNTA1NjM6IGdl bjExKyAqLworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFU X0M4OgorCQlyZXR1cm4gMTg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIDEw OworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6 CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK KwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAx MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1B VF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gNjsKKwljYXNlIERSTV9G T1JNQVRfTlYxMjoKKwkJcmV0dXJuIDIwOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2Ug RFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gMTI7CisJ Y2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2 MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFU X0FCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNl IERSTV9GT1JNQVRfWFZZVTE2MTYxNjE2OgorCQlyZXR1cm4gNDsKKwlkZWZhdWx0OgorCQlyZXR1 cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaWNsX3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkg ICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCXJldHVybiA1MTIwOworfQorCitzdGF0 aWMgaW50IHNrbF9wbGFuZV9tYXhfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAorCQkJCWludCBjb2xvcl9wbGFuZSwKKwkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7 CisJcmV0dXJuIDQwOTY7Cit9CisKK3N0YXRpYyBpbnQgaWNsX3BsYW5lX21heF9oZWlnaHQoY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJaW50IGNvbG9yX3BsYW5lLAorCQkJ CXVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlyZXR1cm4gNDMyMDsKK30KKworc3RhdGljIHVu c2lnbmVkIGludAorc2tsX3BsYW5lX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKKwkJICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgdW5zaWdu ZWQgaW50IHJvdGF0aW9uKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8g PSBkcm1fZm9ybWF0X2luZm8ocGl4ZWxfZm9ybWF0KTsKKwlpbnQgY3BwID0gaW5mby0+Y3BwWzBd OworCisJLyoKKwkgKiAiVGhlIHN0cmlkZSBpbiBieXRlcyBtdXN0IG5vdCBleGNlZWQgdGhlCisJ ICogb2YgdGhlIHNpemUgb2YgOEsgcGl4ZWxzIGFuZCAzMksgYnl0ZXMuIgorCSAqLworCWlmIChk cm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkKKwkJcmV0dXJuIG1pbig4MTkyLCAzMjc2 OCAvIGNwcCk7CisJZWxzZQorCQlyZXR1cm4gbWluKDgxOTIgKiBjcHAsIDMyNzY4KTsKK30KKwor LyoKKyAqIFRoZSBoYXJkd2FyZSBwaGFzZSAwLjAgcmVmZXJzIHRvIHRoZSBjZW50ZXIgb2YgdGhl IHBpeGVsLgorICogV2Ugd2FudCB0byBzdGFydCBmcm9tIHRoZSB0b3AvbGVmdCBlZGdlIHdoaWNo IGlzIHBoYXNlCisgKiAtMC41LiBUaGF0IG1hdGNoZXMgaG93IHRoZSBoYXJkd2FyZSBjYWxjdWxh dGVzIHRoZSBzY2FsaW5nCisgKiBmYWN0b3JzIChmcm9tIHRvcC1sZWZ0IG9mIHRoZSBmaXJzdCBw aXhlbCB0byBib3R0b20tcmlnaHQKKyAqIG9mIHRoZSBsYXN0IHBpeGVsLCBhcyBvcHBvc2VkIHRv IHRoZSBwaXhlbCBjZW50ZXJzKS4KKyAqCisgKiBGb3IgNDoyOjAgc3Vic2FtcGxlZCBjaHJvbWEg cGxhbmVzIHdlIG9idmlvdXNseSBoYXZlIHRvCisgKiBhZGp1c3QgdGhhdCBzbyB0aGF0IHRoZSBj aHJvbWEgc2FtcGxlIHBvc2l0aW9uIGxhbmRzIGluCisgKiB0aGUgcmlnaHQgc3BvdC4KKyAqCisg KiBOb3RlIHRoYXQgZm9yIHBhY2tlZCBZQ2JDciA0OjI6MiBmb3JtYXRzIHRoZXJlIGlzIG5vIHdh eSB0bworICogY29udHJvbCBjaHJvbWEgc2l0aW5nLiBUaGUgaGFyZHdhcmUgc2ltcGx5IHJlcGxp Y2F0ZXMgdGhlCisgKiBjaHJvbWEgc2FtcGxlcyBmb3IgYm90aCBvZiB0aGUgbHVtYSBzYW1wbGVz LCBhbmQgdGh1cyB3ZSBkb24ndAorICogYWN0dWFsbHkgZ2V0IHRoZSBleHBlY3RlZCBNUEVHMiBj aHJvbWEgc2l0aW5nIGNvbnZlbnRpb24gOigKKyAqIFRoZSBzYW1lIGJlaGF2aW91ciBpcyBvYnNl cnZlZCBvbiBwcmUtU0tMIHBsYXRmb3JtcyBhcyB3ZWxsLgorICoKKyAqIFRoZW9yeSBiZWhpbmQg dGhlIGZvcm11bGEgKG5vdGUgdGhhdCB3ZSBpZ25vcmUgc3ViLXBpeGVsCisgKiBzb3VyY2UgY29v cmRpbmF0ZXMpOgorICogcyA9IHNvdXJjZSBzYW1wbGUgcG9zaXRpb24KKyAqIGQgPSBkZXN0aW5h dGlvbiBzYW1wbGUgcG9zaXRpb24KKyAqCisgKiBEb3duc2NhbGluZyA0OjE6CisgKiAtMC41Cisg KiB8IDAuMAorICogfCB8ICAgICAxLjUgKGluaXRpYWwgcGhhc2UpCisgKiB8IHwgICAgIHwKKyAq IHYgdiAgICAgdgorICogfCBzIHwgcyB8IHMgfCBzIHwKKyAqIHwgICAgICAgZCAgICAgICB8Cisg KgorICogVXBzY2FsaW5nIDE6NDoKKyAqIC0wLjUKKyAqIHwgLTAuMzc1IChpbml0aWFsIHBoYXNl KQorICogfCB8ICAgICAwLjAKKyAqIHwgfCAgICAgfAorICogdiB2ICAgICB2CisgKiB8ICAgICAg IHMgICAgICAgfAorICogfCBkIHwgZCB8IGQgfCBkIHwKKyAqLworc3RhdGljIHUxNiBza2xfc2Nh bGVyX2NhbGNfcGhhc2UoaW50IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jb3NpdGVkKQor eworCWludCBwaGFzZSA9IC0weDgwMDA7CisJdTE2IHRyaXAgPSAwOworCisJaWYgKGNocm9tYV9j b3NpdGVkKQorCQlwaGFzZSArPSAoc3ViIC0gMSkgKiAweDgwMDAgLyBzdWI7CisKKwlwaGFzZSAr PSBzY2FsZSAvICgyICogc3ViKTsKKworCS8qCisJICogSGFyZHdhcmUgaW5pdGlhbCBwaGFzZSBs aW1pdGVkIHRvIFstMC41OjEuNV0uCisJICogU2luY2UgdGhlIG1heCBoYXJkd2FyZSBzY2FsZSBm YWN0b3IgaXMgMy4wLCB3ZQorCSAqIHNob3VsZCBuZXZlciBhY3R1YWxseSBleGNkZWVkIDEuMCBo ZXJlLgorCSAqLworCVdBUk5fT04ocGhhc2UgPCAtMHg4MDAwIHx8IHBoYXNlID4gMHgxODAwMCk7 CisKKwlpZiAocGhhc2UgPCAwKQorCQlwaGFzZSA9IDB4MTAwMDAgKyBwaGFzZTsKKwllbHNlCisJ CXRyaXAgPSBQU19QSEFTRV9UUklQOworCisJcmV0dXJuICgocGhhc2UgPj4gMikgJiBQU19QSEFT RV9NQVNLKSB8IHRyaXA7Cit9CisKKyNkZWZpbmUgU0tMX01JTl9TUkNfVyA4CisjZGVmaW5lIFNL TF9NQVhfU1JDX1cgNDA5NgorI2RlZmluZSBTS0xfTUlOX1NSQ19IIDgKKyNkZWZpbmUgU0tMX01B WF9TUkNfSCA0MDk2CisjZGVmaW5lIFNLTF9NSU5fRFNUX1cgOAorI2RlZmluZSBTS0xfTUFYX0RT VF9XIDQwOTYKKyNkZWZpbmUgU0tMX01JTl9EU1RfSCA4CisjZGVmaW5lIFNLTF9NQVhfRFNUX0gg NDA5NgorI2RlZmluZSBJQ0xfTUFYX1NSQ19XIDUxMjAKKyNkZWZpbmUgSUNMX01BWF9TUkNfSCA0 MDk2CisjZGVmaW5lIElDTF9NQVhfRFNUX1cgNTEyMAorI2RlZmluZSBJQ0xfTUFYX0RTVF9IIDQw OTYKKyNkZWZpbmUgU0tMX01JTl9ZVVZfNDIwX1NSQ19XIDE2CisjZGVmaW5lIFNLTF9NSU5fWVVW XzQyMF9TUkNfSCAxNgorCitzdGF0aWMgaW50Citza2xfdXBkYXRlX3NjYWxlcihzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgYm9vbCBmb3JjZV9kZXRhY2gsCisJCSAgdW5zaWdu ZWQgaW50IHNjYWxlcl91c2VyLCBpbnQgKnNjYWxlcl9pZCwKKwkJICBpbnQgc3JjX3csIGludCBz cmNfaCwgaW50IGRzdF93LCBpbnQgZHN0X2gsCisJCSAgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRf aW5mbyAqZm9ybWF0LAorCQkgIHU2NCBtb2RpZmllciwgYm9vbCBuZWVkX3NjYWxlcikKK3sKKwlz dHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9CisJCSZjcnRjX3N0 YXRlLT5zY2FsZXJfc3RhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPQorCQl0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7CisJY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQorCQkmY3J0Y19zdGF0ZS0+ aHcuYWRqdXN0ZWRfbW9kZTsKKworCS8qCisJICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJlYWR5 IHJvdGF0ZWQgYnkgMjcwIGRlZ3JlZXMgZm9yCisJICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUg cm90YXRpb24gY2FzZXMgKHRvIG1hdGNoIHRoZQorCSAqIEdUVCBtYXBwaW5nKSwgaGVuY2Ugbm8g bmVlZCB0byBhY2NvdW50IGZvciByb3RhdGlvbiBoZXJlLgorCSAqLworCWlmIChzcmNfdyAhPSBk c3RfdyB8fCBzcmNfaCAhPSBkc3RfaCkKKwkJbmVlZF9zY2FsZXIgPSB0cnVlOworCisJLyoKKwkg KiBTY2FsaW5nL2ZpdHRpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlIGluIEdFTjkrCisJ ICogVE9ETzogSW50ZXJsYWNlIGZldGNoIG1vZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQyMCBwbGFu YXIgZm9ybWF0cy4KKwkgKiBPbmNlIE5WMTIgaXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhlcmUgd2hp bGUgYWxsb2NhdGluZyBzY2FsZXIKKwkgKiBmb3IgTlYxMi4KKwkgKi8KKwlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5ICYmIGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJgorCSAgICBuZWVkX3Nj YWxlciAmJiBhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7 CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJQaXBlL1BsYW5lIHNjYWxp bmcgbm90IHN1cHBvcnRlZCB3aXRoIElGLUlEIG1vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwkvKgorCSAqIGlmIHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkIG9yIHNjYWxlciBpcyBu byBtb3JlIHJlcXVpcmVkIG9yIGZvcmNlIGRldGFjaAorCSAqICAtIGZyZWUgc2NhbGVyIGJpbmRl ZCB0byB0aGlzIHBsYW5lL2NydGMKKwkgKiAgLSBpbiBvcmRlciB0byBkbyB0aGlzLCB1cGRhdGUg Y3J0Yy0+c2NhbGVyX3VzYWdlCisJICoKKwkgKiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBjcnRjX3N0 YXRlIGlzIHNldCBmcmVlIHNvIHRoYXQKKwkgKiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVkIHRvIG90 aGVyIHVzZXIuIEFjdHVhbCByZWdpc3RlcgorCSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBzY2FsZXIg aXMgZG9uZSBpbiBwbGFuZS9wYW5lbC1maXQgcHJvZ3JhbW1pbmcuCisJICogRm9yIHRoaXMgcHVy cG9zZSBjcnRjL3BsYW5lX3N0YXRlLT5zY2FsZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4KKwkgKi8K KwlpZiAoZm9yY2VfZGV0YWNoIHx8ICFuZWVkX3NjYWxlcikgeworCQlpZiAoKnNjYWxlcl9pZCA+ PSAwKSB7CisJCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgc2NhbGVyX3Vz ZXIpOworCQkJc2NhbGVyX3N0YXRlLT5zY2FsZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9IDA7CisK KwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAic2NhbGVyX3VzZXIgaW5k ZXggJXUuJXU6ICIKKwkJCQkgICAgIlN0YWdlZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBzY2FsZXJf dXNlcnMgPSAweCV4XG4iLAorCQkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwg KnNjYWxlcl9pZCwKKwkJCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOworCQkJKnNj YWxlcl9pZCA9IC0xOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChmb3JtYXQgJiYgaW50 ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZm9ybWF0LCBtb2RpZmllcikgJiYKKwkg ICAgKHNyY19oIDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19IIHx8IHNyY193IDwgU0tMX01JTl9ZVVZf NDIwX1NSQ19XKSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiUGxh bmFyIFlVVjogc3JjIGRpbWVuc2lvbnMgbm90IG1ldFxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCS8qIHJhbmdlIGNoZWNrcyAqLworCWlmIChzcmNfdyA8IFNLTF9NSU5fU1JDX1cgfHwg c3JjX2ggPCBTS0xfTUlOX1NSQ19IIHx8CisJICAgIGRzdF93IDwgU0tMX01JTl9EU1RfVyB8fCBk c3RfaCA8IFNLTF9NSU5fRFNUX0ggfHwKKwkgICAgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEg JiYKKwkgICAgIChzcmNfdyA+IElDTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFYX1NSQ19I IHx8CisJICAgICAgZHN0X3cgPiBJQ0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gSUNMX01BWF9EU1Rf SCkpIHx8CisJICAgIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEgJiYKKwkgICAgIChzcmNfdyA+ IFNLTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBTS0xfTUFYX1NSQ19IIHx8CisJICAgICAgZHN0X3cg PiBTS0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gU0tMX01BWF9EU1RfSCkpKQl7CisJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogc3Jj ICV1eCV1IGRzdCAldXgldSAiCisJCQkgICAgInNpemUgaXMgb3V0IG9mIHNjYWxlciByYW5nZVxu IiwKKwkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgc3JjX3csIHNyY19oLAor CQkJICAgIGRzdF93LCBkc3RfaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIG1hcmsg dGhpcyBwbGFuZSBhcyBhIHNjYWxlciB1c2VyIGluIGNydGNfc3RhdGUgKi8KKwlzY2FsZXJfc3Rh dGUtPnNjYWxlcl91c2VycyB8PSAoMSA8PCBzY2FsZXJfdXNlcik7CisJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogIgorCQkgICAgInN0YWdlZCBz Y2FsaW5nIHJlcXVlc3QgZm9yICV1eCV1LT4ldXgldSBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAor CQkgICAgaW50ZWxfY3J0Yy0+cGlwZSwgc2NhbGVyX3VzZXIsIHNyY193LCBzcmNfaCwgZHN0X3cs IGRzdF9oLAorCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwaXBlX21v ZGUgPSAmY3J0Y19zdGF0ZS0+aHcucGlwZV9tb2RlOworCWludCB3aWR0aCwgaGVpZ2h0OworCisJ aWYgKGNydGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpIHsKKwkJd2lkdGggPSBkcm1fcmVjdF93 aWR0aCgmY3J0Y19zdGF0ZS0+cGNoX3BmaXQuZHN0KTsKKwkJaGVpZ2h0ID0gZHJtX3JlY3RfaGVp Z2h0KCZjcnRjX3N0YXRlLT5wY2hfcGZpdC5kc3QpOworCX0gZWxzZSB7CisJCXdpZHRoID0gcGlw ZV9tb2RlLT5jcnRjX2hkaXNwbGF5OworCQloZWlnaHQgPSBwaXBlX21vZGUtPmNydGNfdmRpc3Bs YXk7CisJfQorCXJldHVybiBza2xfdXBkYXRlX3NjYWxlcihjcnRjX3N0YXRlLCAhY3J0Y19zdGF0 ZS0+aHcuYWN0aXZlLAorCQkJCSBTS0xfQ1JUQ19JTkRFWCwKKwkJCQkgJmNydGNfc3RhdGUtPnNj YWxlcl9zdGF0ZS5zY2FsZXJfaWQsCisJCQkJIGNydGNfc3RhdGUtPnBpcGVfc3JjX3csIGNydGNf c3RhdGUtPnBpcGVfc3JjX2gsCisJCQkJIHdpZHRoLCBoZWlnaHQsIE5VTEwsIDAsCisJCQkJIGNy dGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpOworfQorCisvKioKKyAqIHNrbF91cGRhdGVfc2Nh bGVyX3BsYW5lIC0gU3RhZ2VzIHVwZGF0ZSB0byBzY2FsZXIgc3RhdGUgZm9yIGEgZ2l2ZW4gcGxh bmUuCisgKiBAY3J0Y19zdGF0ZTogY3J0YydzIHNjYWxlciBzdGF0ZQorICogQHBsYW5lX3N0YXRl OiBhdG9taWMgcGxhbmUgc3RhdGUgdG8gdXBkYXRlCisgKgorICogUmV0dXJuCisgKiAgICAgMCAt IHNjYWxlcl91c2FnZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQorICogICAgZXJyb3IgLSByZXF1ZXN0 ZWQgc2NhbGluZyBjYW5ub3QgYmUgc3VwcG9ydGVkIG9yIG90aGVyIGVycm9yIGNvbmRpdGlvbgor ICovCitpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0KKwkJdG9faW50ZWxfcGxh bmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgcmV0OworCWJvb2wgZm9y Y2VfZGV0YWNoID0gIWZiIHx8ICFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlOworCWJvb2wgbmVl ZF9zY2FsZXIgPSBmYWxzZTsKKworCS8qIFByZS1nZW4xMSBhbmQgU0RSIHBsYW5lcyBhbHdheXMg bmVlZCBhIHNjYWxlciBmb3IgcGxhbmFyIGZvcm1hdHMuICovCisJaWYgKCFpY2xfaXNfaGRyX3Bs YW5lKGRldl9wcml2LCBpbnRlbF9wbGFuZS0+aWQpICYmCisJICAgIGZiICYmIGludGVsX2Zvcm1h dF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCisJCW5l ZWRfc2NhbGVyID0gdHJ1ZTsKKworCXJldCA9IHNrbF91cGRhdGVfc2NhbGVyKGNydGNfc3RhdGUs IGZvcmNlX2RldGFjaCwKKwkJCQlkcm1fcGxhbmVfaW5kZXgoJmludGVsX3BsYW5lLT5iYXNlKSwK KwkJCQkmcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCwKKwkJCQlkcm1fcmVjdF93aWR0aCgmcGxhbmVf c3RhdGUtPnVhcGkuc3JjKSA+PiAxNiwKKwkJCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTYsCisJCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCksCisJCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAorCQkJ CWZiID8gZmItPmZvcm1hdCA6IE5VTEwsCisJCQkJZmIgPyBmYi0+bW9kaWZpZXIgOiAwLAorCQkJ CW5lZWRfc2NhbGVyKTsKKworCWlmIChyZXQgfHwgcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA8IDAp CisJCXJldHVybiByZXQ7CisKKwkvKiBjaGVjayBjb2xvcmtleSAqLworCWlmIChwbGFuZV9zdGF0 ZS0+Y2tleS5mbGFncykgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAi W1BMQU5FOiVkOiVzXSBzY2FsaW5nIHdpdGggY29sb3Iga2V5IG5vdCBhbGxvd2VkIiwKKwkJCSAg ICBpbnRlbF9wbGFuZS0+YmFzZS5iYXNlLmlkLAorCQkJICAgIGludGVsX3BsYW5lLT5iYXNlLm5h bWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayBzcmMgZm9ybWF0ICovCisJ c3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogor CWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJ Y2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwlj YXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIx MDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJ Y2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBEUk1f Rk9STUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJNX0ZPUk1B VF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2Ogor CWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJN X0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNlIERSTV9G T1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6CisJ CWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MSkKKwkJCWJyZWFrOworCQlmYWxsdGhyb3VnaDsKKwlkZWZhdWx0OgorCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiW1BMQU5FOiVkOiVzXSBGQjolZCB1bnN1cHBvcnRlZCBz Y2FsaW5nIGZvcm1hdCAweCV4XG4iLAorCQkJICAgIGludGVsX3BsYW5lLT5iYXNlLmJhc2UuaWQs IGludGVsX3BsYW5lLT5iYXNlLm5hbWUsCisJCQkgICAgZmItPmJhc2UuaWQsIGZiLT5mb3JtYXQt PmZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNubF9jb2VmX3RhcChpbnQgaSkKK3sKKwlyZXR1cm4gaSAlIDc7Cit9CisKK3N0YXRp YyB1MTYgY25sX25lYXJlc3RfZmlsdGVyX2NvZWYoaW50IHQpCit7CisJcmV0dXJuIHQgPT0gMyA/ IDB4MDgwMCA6IDB4MzAwMDsKK30KKworLyoKKyAqICBUaGVvcnkgYmVoaW5kIHNldHRpbmcgbmVh cmVzdC1uZWlnaGJvciBpbnRlZ2VyIHNjYWxpbmc6CisgKgorICogIDE3IHBoYXNlIG9mIDcgdGFw cyByZXF1aXJlcyAxMTkgY29lZmZpY2llbnRzIGluIDYwIGR3b3JkcyBwZXIgc2V0LgorICogIFRo ZSBsZXR0ZXIgcmVwcmVzZW50cyB0aGUgZmlsdGVyIHRhcCAoRCBpcyB0aGUgY2VudGVyIHRhcCkg YW5kIHRoZSBudW1iZXIKKyAqICByZXByZXNlbnRzIHRoZSBjb2VmZmljaWVudCBzZXQgZm9yIGEg cGhhc2UgKDAtMTYpLgorICoKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICB8SW5kZXgg dmFsdWUgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAxIHwgRGF0YSB2YWx1ZSBjb2VmZmllbnQgMiB8 CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAwaCAgICAgIHwgICAgICAgICAg QjAgICAgICAgICAgICB8ICAgICAgICAgIEEwICAgICAgICAgICAgfAorICogICAgICAgICArLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rCisgKiAgICAgICAgIHwgICAwMWggICAgICB8ICAgICAgICAgIEQwICAgICAgICAgICAgfCAg ICAgICAgICBDMCAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICB8 ICAgMDJoICAgICAgfCAgICAgICAgICBGMCAgICAgICAgICAgIHwgICAgICAgICAgRTAgICAgICAg ICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAzaCAgICAgIHwgICAg ICAgICAgQTEgICAgICAgICAgICB8ICAgICAgICAgIEcwICAgICAgICAgICAgfAorICogICAgICAg ICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAwNGggICAgICB8ICAgICAgICAgIEMxICAgICAgICAg ICAgfCAgICAgICAgICBCMSAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAg ICAgICB8ICAgLi4uICAgICAgfCAgICAgICAgICAuLi4gICAgICAgICAgIHwgICAgICAgICAgLi4u ICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDM4aCAgICAg IHwgICAgICAgICAgQjE2ICAgICAgICAgICB8ICAgICAgICAgIEExNiAgICAgICAgICAgfAorICog ICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAzOWggICAgICB8ICAgICAgICAgIEQxNiAg ICAgICAgICAgfCAgICAgICAgICBDMTYgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor ICogICAgICAgICB8ICAgM0FoICAgICAgfCAgICAgICAgICBGMTYgICAgICAgICAgIHwgICAgICAg ICAgQzE2ICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDNC aCAgICAgIHwgICAgICAgIFJlc2VydmVkICAgICAgICB8ICAgICAgICAgIEcxNiAgICAgICAgICAg fAorICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogIFRvIGVuYWJsZSBuZWFyZXN0LW5laWdoYm9y IHNjYWxpbmc6ICBwcm9ncmFtIHNjYWxlciBjb2VmZmljZW50cyB3aXRoCisgKiAgdGhlIGNlbnRl ciB0YXAgKER4eCkgdmFsdWVzIHNldCB0byAxIGFuZCBhbGwgb3RoZXIgdmFsdWVzIHNldCB0byAw IGFzIHBlcgorICogIFNDQUxFUl9DT0VGRklDSUVOVF9GT1JNQVQKKyAqCisgKi8KKworc3RhdGlj IHZvaWQgY25sX3Byb2dyYW1fbmVhcmVzdF9maWx0ZXJfY29lZnMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgIGVudW0gcGlwZSBwaXBlLCBpbnQgaWQsIGludCBz ZXQpCit7CisJaW50IGk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05MX1BTX0NP RUZfSU5ERVhfU0VUKHBpcGUsIGlkLCBzZXQpLAorCQkJICBQU19DT0VFX0lOREVYX0FVVE9fSU5D KTsKKworCWZvciAoaSA9IDA7IGkgPCAxNyAqIDc7IGkgKz0gMikgeworCQl1MzIgdG1wOworCQlp bnQgdDsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkpOworCQl0bXAgPSBjbmxfbmVhcmVzdF9maWx0 ZXJfY29lZih0KTsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkgKyAxKTsKKwkJdG1wIHw9IGNubF9u ZWFyZXN0X2ZpbHRlcl9jb2VmKHQpIDw8IDE2OworCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBDTkxfUFNfQ09FRl9EQVRBX1NFVChwaXBlLCBpZCwgc2V0KSwKKwkJCQkgIHRtcCk7CisJ fQorCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENOTF9QU19DT0VGX0lOREVYX1NFVChw aXBlLCBpZCwgc2V0KSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNrbF9zY2FsZXJfZ2V0 X2ZpbHRlcl9zZWxlY3QoZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyLCBpbnQgc2V0KQor eworCWlmIChmaWx0ZXIgPT0gRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpIHsK KwkJcmV0dXJuIChQU19GSUxURVJfUFJPR1JBTU1FRCB8CisJCQlQU19ZX1ZFUlRfRklMVEVSX1NF TEVDVChzZXQpIHwKKwkJCVBTX1lfSE9SWl9GSUxURVJfU0VMRUNUKHNldCkgfAorCQkJUFNfVVZf VkVSVF9GSUxURVJfU0VMRUNUKHNldCkgfAorCQkJUFNfVVZfSE9SWl9GSUxURVJfU0VMRUNUKHNl dCkpOworCX0KKworCXJldHVybiBQU19GSUxURVJfTUVESVVNOworfQorCitzdGF0aWMgdm9pZCBz a2xfc2NhbGVyX3NldHVwX2ZpbHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGVudW0gcGlwZSBwaXBlLAorCQkJCSAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxp bmdfZmlsdGVyIGZpbHRlcikKK3sKKwlzd2l0Y2ggKGZpbHRlcikgeworCWNhc2UgRFJNX1NDQUxJ TkdfRklMVEVSX0RFRkFVTFQ6CisJCWJyZWFrOworCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX05F QVJFU1RfTkVJR0hCT1I6CisJCWNubF9wcm9ncmFtX25lYXJlc3RfZmlsdGVyX2NvZWZzKGRldl9w cml2LCBwaXBlLCBpZCwgc2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNF KGZpbHRlcik7CisJfQorfQorCit2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9CisJCSZjcnRjX3N0YXRl LT5zY2FsZXJfc3RhdGU7CisJc3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLngyID0gY3J0Y19z dGF0ZS0+cGlwZV9zcmNfdyA8PCAxNiwKKwkJLnkyID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfaCA8 PCAxNiwKKwl9OworCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqZHN0ID0gJmNydGNfc3RhdGUtPnBj aF9wZml0LmRzdDsKKwl1MTYgdXZfcmdiX2hwaGFzZSwgdXZfcmdiX3ZwaGFzZTsKKwllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoZHN0KTsK KwlpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KGRzdCk7CisJaW50IHggPSBkc3QtPngxOwor CWludCB5ID0gZHN0LT55MTsKKwlpbnQgaHNjYWxlLCB2c2NhbGU7CisJdW5zaWduZWQgbG9uZyBp cnFmbGFnczsKKwlpbnQgaWQ7CisJdTMyIHBzX2N0cmw7CisKKwlpZiAoIWNydGNfc3RhdGUtPnBj aF9wZml0LmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYt PmRybSwKKwkJCWNydGNfc3RhdGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQgPCAwKSkKKwkJcmV0 dXJuOworCisJaHNjYWxlID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJnNyYywgZHN0LCAwLCBJTlRf TUFYKTsKKwl2c2NhbGUgPSBkcm1fcmVjdF9jYWxjX3ZzY2FsZSgmc3JjLCBkc3QsIDAsIElOVF9N QVgpOworCisJdXZfcmdiX2hwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19waGFzZSgxLCBoc2NhbGUs IGZhbHNlKTsKKwl1dl9yZ2JfdnBoYXNlID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIHZzY2Fs ZSwgZmFsc2UpOworCisJaWQgPSBzY2FsZXJfc3RhdGUtPnNjYWxlcl9pZDsKKworCXBzX2N0cmwg PSBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KGNydGNfc3RhdGUtPmh3LnNjYWxpbmdfZmls dGVyLCAwKTsKKwlwc19jdHJsIHw9ICBQU19TQ0FMRVJfRU4gfCBzY2FsZXJfc3RhdGUtPnNjYWxl cnNbaWRdLm1vZGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2Nr LCBpcnFmbGFncyk7CisKKwlza2xfc2NhbGVyX3NldHVwX2ZpbHRlcihkZXZfcHJpdiwgcGlwZSwg aWQsIDAsCisJCQkJY3J0Y19zdGF0ZS0+aHcuc2NhbGluZ19maWx0ZXIpOworCisJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19DVFJMKHBpcGUsIGlkKSwgcHNfY3RybCk7CisKKwlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1ZQSEFTRShwaXBlLCBpZCksCisJCQkg IFBTX1lfUEhBU0UoMCkgfCBQU19VVl9SR0JfUEhBU0UodXZfcmdiX3ZwaGFzZSkpOworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfSFBIQVNFKHBpcGUsIGlkKSwKKwkJCSAgUFNf WV9QSEFTRSgwKSB8IFBTX1VWX1JHQl9QSEFTRSh1dl9yZ2JfaHBoYXNlKSk7CisJaW50ZWxfZGVf d3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19XSU5fUE9TKHBpcGUsIGlkKSwKKwkJCSAgeCA8PCAx NiB8IHkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1NaKHBpcGUs IGlkKSwKKwkJCSAgd2lkdGggPDwgMTYgfCBoZWlnaHQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lk Citza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWVudW0gcGlwZSBw aXBlID0gcGxhbmUtPnBpcGU7CisJaW50IHNjYWxlcl9pZCA9IHBsYW5lX3N0YXRlLT5zY2FsZXJf aWQ7CisJY29uc3Qgc3RydWN0IGludGVsX3NjYWxlciAqc2NhbGVyID0KKwkJJmNydGNfc3RhdGUt PnNjYWxlcl9zdGF0ZS5zY2FsZXJzW3NjYWxlcl9pZF07CisJaW50IGNydGNfeCA9IHBsYW5lX3N0 YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0Lnkx OworCXUzMiBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK Kwl1MzIgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwor CXUxNiB5X2hwaGFzZSwgdXZfcmdiX2hwaGFzZTsKKwl1MTYgeV92cGhhc2UsIHV2X3JnYl92cGhh c2U7CisJaW50IGhzY2FsZSwgdnNjYWxlOworCXUzMiBwc19jdHJsOworCisJaHNjYWxlID0gZHJt X3JlY3RfY2FsY19oc2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCQkgICAgICAmcGxh bmVfc3RhdGUtPnVhcGkuZHN0LAorCQkJCSAgICAgIDAsIElOVF9NQVgpOworCXZzY2FsZSA9IGRy bV9yZWN0X2NhbGNfdnNjYWxlKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkJICAgICAgJnBs YW5lX3N0YXRlLT51YXBpLmRzdCwKKwkJCQkgICAgICAwLCBJTlRfTUFYKTsKKworCS8qIFRPRE86 IGhhbmRsZSBzdWItcGl4ZWwgY29vcmRpbmF0ZXMgKi8KKwlpZiAoaW50ZWxfZm9ybWF0X2luZm9f aXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgorCSAgICAhaWNs X2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkgeworCQl5X2hwaGFzZSA9IHNrbF9z Y2FsZXJfY2FsY19waGFzZSgxLCBoc2NhbGUsIGZhbHNlKTsKKwkJeV92cGhhc2UgPSBza2xfc2Nh bGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7CisKKwkJLyogTVBFRzIgY2hyb21hIHNp dGluZyBjb252ZW50aW9uICovCisJCXV2X3JnYl9ocGhhc2UgPSBza2xfc2NhbGVyX2NhbGNfcGhh c2UoMiwgaHNjYWxlLCB0cnVlKTsKKwkJdXZfcmdiX3ZwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19w aGFzZSgyLCB2c2NhbGUsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvKiBub3QgdXNlZCAqLworCQl5 X2hwaGFzZSA9IDA7CisJCXlfdnBoYXNlID0gMDsKKworCQl1dl9yZ2JfaHBoYXNlID0gc2tsX3Nj YWxlcl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOworCQl1dl9yZ2JfdnBoYXNlID0gc2ts X3NjYWxlcl9jYWxjX3BoYXNlKDEsIHZzY2FsZSwgZmFsc2UpOworCX0KKworCXBzX2N0cmwgPSBz a2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KHBsYW5lX3N0YXRlLT5ody5zY2FsaW5nX2ZpbHRl ciwgMCk7CisJcHNfY3RybCB8PSBQU19TQ0FMRVJfRU4gfCBQU19QTEFORV9TRUwocGxhbmUtPmlk KSB8IHNjYWxlci0+bW9kZTsKKworCXNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKGRldl9wcml2LCBw aXBlLCBzY2FsZXJfaWQsIDAsCisJCQkJcGxhbmVfc3RhdGUtPmh3LnNjYWxpbmdfZmlsdGVyKTsK KworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfQ1RSTChwaXBlLCBzY2FsZXJf aWQpLCBwc19jdHJsKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1ZQSEFT RShwaXBlLCBzY2FsZXJfaWQpLAorCQkJICBQU19ZX1BIQVNFKHlfdnBoYXNlKSB8IFBTX1VWX1JH Ql9QSEFTRSh1dl9yZ2JfdnBoYXNlKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNL TF9QU19IUEhBU0UocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgUFNfWV9QSEFTRSh5X2hwaGFzZSkg fCBQU19VVl9SR0JfUEhBU0UodXZfcmdiX2hwaGFzZSkpOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBTS0xfUFNfV0lOX1BPUyhwaXBlLCBzY2FsZXJfaWQpLAorCQkJICAoY3J0Y194IDw8 IDE2KSB8IGNydGNfeSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19XSU5f U1oocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgKGNydGNfdyA8PCAxNikgfCBjcnRjX2gpOworfQor CisvKiBQcmVvZmZzZXQgdmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZlcnNpb24gKi8KKyNkZWZp bmUgUFJFT0ZGX1lVVl9UT19SR0JfSEkJCTB4MTgwMAorI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JH Ql9NRQkJMHgxRjAwCisjZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKKworI2Rl ZmluZSAgUk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lICBH T0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAwKQorI2RlZmluZSAgQk9GRih4KSAg ICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisKK3N0YXRpYyB2b2lkCitpY2xfcHJvZ3Jh bV9pbnB1dF9jc2Moc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBl ID0gcGxhbmUtPnBpcGU7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwor CXN0YXRpYyBjb25zdCB1MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0geworCQkvKgorCQkgKiBC VC42MDEgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4 IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEsCisJCSAqICAxLjAwMCwg LTAuMzM2LCAtMC42OTgsCisJCSAqICAxLjAwMCwgMS43MzIsIDAuMDAwMF0KKwkJICovCisJCVtE Uk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0geworCQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKKwkJCTB4 OEIyOCwgMHg3ODAwLCAweDlBQzAsCisJCQkweDAsIDB4NzgwMCwgMHg3REQ4LAorCQl9LAorCQkv KgorCQkgKiBCVC43MDkgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBU aGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCisJCSAq ICAxLjAwMCwgLTAuMTg3LCAtMC40NjgsCisJCSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KKwkJ ICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0geworCQkJMHg3Qzk4LCAweDc4MDAsIDB4 MCwKKwkJCTB4OUVGOCwgMHg3ODAwLCAweEFDMDAsCisJCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwK KwkJfSwKKwkJLyoKKwkJICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2Ug UkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4wMDAsIDAuMDAwLCAx LjQ3NCwKKwkJICogIDEuMDAwLCAtMC4xNjQ1LCAtMC41NzEzLAorCQkgKiAgMS4wMDAsIDEuODgx NCwgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0geworCQkJMHg3 QkM4LCAweDc4MDAsIDB4MCwKKwkJCTB4ODkyOCwgMHg3ODAwLCAweEFBODgsCisJCQkweDAsIDB4 NzgwMCwgMHg3RjEwLAorCQl9LAorCX07CisKKwkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2Ug dG8gRnVsbCBSYW5nZSBDb252ZXJzaW9uICovCisJc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2Nf bWF0cml4X2xyW11bOV0gPSB7CisJCS8qCisJCSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3Ig LT4gZnVsbCByYW5nZSBSR0IKKwkJICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsx LjE2NDM4NCwgMC4wMDAsIDEuNTk2MDI3LAorCQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44 MTI4MTMsCisJCSAqICAxLjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1f Q09MT1JfWUNCQ1JfQlQ2MDFdID0geworCQkJMHg3Q0M4LCAweDc5NTAsIDB4MCwKKwkJCTB4OEQw MCwgMHg3OTUwLCAweDlDODgsCisJCQkweDAsIDB4Nzk1MCwgMHg2ODEwLAorCQl9LAorCQkvKgor CQkgKiBCVC43MDkgTGltaXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBU aGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKKwkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEs CisJCSAqICAxLjE2NDM4NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCisJCSAqICAxLjE2NDM4NCwg Mi4xMTI0MDIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewor CQkJMHg3RTU4LCAweDc5NTAsIDB4MCwKKwkJCTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCisJCQkw eDAsIDB4Nzk1MCwgIDB4Njg3MCwKKwkJfSwKKwkJLyoKKwkJICogQlQuMjAyMCBMaW1pdGVkIHJh bmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMg OgorCQkgKiBbMS4xNjQsIDAuMDAwLCAxLjY3OCwKKwkJICogIDEuMTY0LCAtMC4xODczLCAtMC42 NTA0LAorCQkgKiAgMS4xNjQsIDIuMTQxNywgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9Z Q0JDUl9CVDIwMjBdID0geworCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwKKwkJCTB4OEE2OCwgMHg3 OTUwLCAweEFDMDAsCisJCQkweDAsIDB4Nzk1MCwgMHg2ODkwLAorCQl9LAorCX07CisJY29uc3Qg dTE2ICpjc2M7CisKKwlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xP Ul9ZQ0JDUl9GVUxMX1JBTkdFKQorCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRl LT5ody5jb2xvcl9lbmNvZGluZ107CisJZWxzZQorCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xy W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107CisKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKKwkJCSAg Uk9GRihjc2NbMF0pIHwgR09GRihjc2NbMV0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKKwkJCSAgQk9GRihj c2NbMl0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NP RUZGKHBpcGUsIHBsYW5lX2lkLCAyKSwKKwkJCSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0p KTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBp cGUsIHBsYW5lX2lkLCAzKSwKKwkJCSAgQk9GRihjc2NbNV0pKTsKKwlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKKwkJ CSAgUk9GRihjc2NbNl0pIHwgR09GRihjc2NbN10pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA1KSwKKwkJCSAgQk9G Rihjc2NbOF0pKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9D U0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKKwkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkp OworCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZV TExfUkFOR0UpCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAorCQkJCSAgUExBTkVfSU5Q VVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCisJCQkJICAwKTsKKwllbHNlCisJCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAorCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihw aXBlLCBwbGFuZV9pZCwgMSksCisJCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9NRSk7CisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVf aWQsIDIpLAorCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9MTyk7CisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsCisJCQkgIFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAw KSwgMHgwKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5QVVRf Q1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQsIDEpLCAweDApOworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LAorCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwg MiksIDB4MCk7Cit9CisKK3N0YXRpYyBib29sIGlzX3N1cmZhY2VfbGluZWFyKGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCit7CisJcmV0dXJuIGZiLT5t b2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgfHwKKwkgICAgICAgaXNfZ2VuMTJfY2Nz X3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3Bs YW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCQkg IGludCBjb2xvcl9wbGFuZSwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCS8qCisJICogVGhl IHN0cmlkZSBpcyBlaXRoZXIgZXhwcmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1 bmtzIGZvcgorCSAqIGxpbmVhciBidWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGls ZWQgYnVmZmVycy4KKwkgKi8KKwlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5l KSkKKwkJcmV0dXJuIDY0OworCWVsc2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRp b24pKQorCQlyZXR1cm4gaW50ZWxfdGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKKwllbHNl CisJCXJldHVybiBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cit9CisK K3N0YXRpYyB1MzIgc2tsX3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAorCQkJICAgIGludCBjb2xvcl9wbGFuZSkKK3sKKwljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBp bnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJdTMyIHN0cmlkZSA9IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0uc3RyaWRlOworCisJaWYgKGNvbG9y X3BsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMpCisJCXJldHVybiAwOworCisJcmV0dXJu IHN0cmlkZSAvIHNrbF9wbGFuZV9zdHJpZGVfbXVsdChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9u KTsKK30KKworc3RhdGljIHZvaWQKK3NrbF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCisJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBw aXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaWYg KGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKKwkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNrbF93 cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgMCk7CisJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitz dGF0aWMgYm9vbAorc2tsX3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAorCQkgICAgICAgZW51bSBwaXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rp c3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lk ID0gcGxhbmUtPmlkOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCisJ cG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOworCXdha2VyZWYg PSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21h aW4pOworCWlmICghd2FrZXJlZikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgUExBTkVfQ1RMKHBsYW5lLT5waXBlLCBwbGFuZV9pZCkpICYgUExBTkVf Q1RMX0VOQUJMRTsKKworCSpwaXBlID0gcGxhbmUtPnBpcGU7CisKKwlpbnRlbF9kaXNwbGF5X3Bv d2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjLCBpbnQgaWQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2Ny dGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIFNLTF9QU19DVFJMKGludGVsX2NydGMtPnBpcGUsIGlkKSwgMCk7CisJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19XSU5fUE9TKGludGVsX2NydGMtPnBpcGUsIGlk KSwgMCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19XSU5fU1ooaW50ZWxf Y3J0Yy0+cGlwZSwgaWQpLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2 LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZXRh Y2hlcyAoYWthLiB1bmJpbmRzKSB1bnVzZWQgc2NhbGVycyBpbiBoYXJkd2FyZQorICovCit2b2lk IHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJf c3RhdGUgKnNjYWxlcl9zdGF0ZSA9CisJCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7CisJaW50 IGk7CisKKwkvKiBsb29wIHRocm91Z2ggYW5kIGRpc2FibGUgc2NhbGVycyB0aGF0IGFyZW4ndCBp biB1c2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykg eworCQlpZiAoIXNjYWxlcl9zdGF0ZS0+c2NhbGVyc1tpXS5pbl91c2UpCisJCQlza2xfZGV0YWNo X3NjYWxlcihpbnRlbF9jcnRjLCBpKTsKKwl9Cit9CisKK3ZvaWQgc2tsX3NjYWxlcl9kaXNhYmxl KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUtPnVhcGku Y3J0Yyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX3NjYWxlcnM7IGkr KykKKwkJc2tsX2RldGFjaF9zY2FsZXIoY3J0YywgaSk7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3Bs YW5lX2N0bF9mb3JtYXQodTMyIHBpeGVsX2Zvcm1hdCkKK3sKKwlzd2l0Y2ggKHBpeGVsX2Zvcm1h dCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfSU5E RVhFRDsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1B VF9SR0JfNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRf QUJHUjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4OCB8IFBMQU5FX0NU TF9PUkRFUl9SR0JYOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JN QVRfQVJHQjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4ODsKKwljYXNl IERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgor CQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTAgfCBQTEFORV9DVExfT1JERVJf UkdCWDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FS R0IyMTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA7CisJY2Fz ZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYx NkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGIHwgUExBTkVfQ1RM X09SREVSX1JHQlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1f Rk9STUFUX0FSR0IxNjE2MTYxNkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYx NjE2MTZGOworCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfWFlVVjsKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVVlWOworCWNhc2UgRFJNX0ZPUk1BVF9Z VllVOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIy X1lWWVU7CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFU X1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVVlWWTsKKwljYXNlIERSTV9GT1JNQVRfVllVWToK KwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9WWVVZ OworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9OVjEy OworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9QMDEw OworCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9QMDEy OworCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9QMDE2 OworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZMjEw OworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZMjEy OworCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZMjE2 OworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JN QVRfWTQxMDsKKwljYXNlIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCQlyZXR1cm4gUExB TkVfQ1RMX0ZPUk1BVF9ZNDEyOworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6CisJCXJl dHVybiBQTEFORV9DVExfRk9STUFUX1k0MTY7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHBp eGVsX2Zvcm1hdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3BsYW5l X2N0bF9hbHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQor eworCWlmICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3JtYXQtPmhhc19hbHBoYSkKKwkJcmV0dXJu IFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCisJc3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcucGl4 ZWxfYmxlbmRfbW9kZSkgeworCWNhc2UgRFJNX01PREVfQkxFTkRfUElYRUxfTk9ORToKKwkJcmV0 dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCWNhc2UgRFJNX01PREVfQkxFTkRfUFJFTVVM VEk6CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfU1dfUFJFTVVMVElQTFk7CisJY2FzZSBEUk1f TU9ERV9CTEVORF9DT1ZFUkFHRToKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9IV19QUkVNVUxU SVBMWTsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2Js ZW5kX21vZGUpOworCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7CisJfQorfQorCitz dGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9y bWF0LT5oYXNfYWxwaGEpCisJCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOworCisJ c3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSkgeworCWNhc2UgRFJNX01P REVfQkxFTkRfUElYRUxfTk9ORToKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7 CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSToKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FM UEhBX1NXX1BSRU1VTFRJUExZOworCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6CisJCXJl dHVybiBQTEFORV9DT0xPUl9BTFBIQV9IV19QUkVNVUxUSVBMWTsKKwlkZWZhdWx0OgorCQlNSVNT SU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpOworCQlyZXR1cm4gUExB TkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgc2tsX3BsYW5lX2N0 bF90aWxpbmcodTY0IGZiX21vZGlmaWVyKQoreworCXN3aXRjaCAoZmJfbW9kaWZpZXIpIHsKKwlj YXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWF9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9YOworCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQ6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWTsKKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwgUExB TkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwKKwkJ ICAgICAgIFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUgfAorCQkgICAgICAg UExBTkVfQ1RMX0NMRUFSX0NPTE9SX0RJU0FCTEU7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9NQ19DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NU TF9NRURJQV9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKKwljYXNlIEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRF9DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExf UkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShm Yl9tb2RpZmllcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3BsYW5l X2N0bF9yb3RhdGUodW5zaWduZWQgaW50IHJvdGF0ZSkKK3sKKwlzd2l0Y2ggKHJvdGF0ZSkgewor CWNhc2UgRFJNX01PREVfUk9UQVRFXzA6CisJCWJyZWFrOworCS8qCisJICogRFJNX01PREVfUk9U QVRFXyBpcyBjb3VudGVyIGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFuZHIK KwkgKiB3aGlsZSBpOTE1IEhXIHJvdGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMgd2h5IHRoaXMg c3dhcHBpbmcuCisJICovCisJY2FzZSBEUk1fTU9ERV9ST1RBVEVfOTA6CisJCXJldHVybiBQTEFO RV9DVExfUk9UQVRFXzI3MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8xODA6CisJCXJldHVybiBQ TEFORV9DVExfUk9UQVRFXzE4MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8yNzA6CisJCXJldHVy biBQTEFORV9DVExfUk9UQVRFXzkwOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShyb3RhdGUp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNubF9wbGFuZV9jdGxfZmxpcCh1 bnNpZ25lZCBpbnQgcmVmbGVjdCkKK3sKKwlzd2l0Y2ggKHJlZmxlY3QpIHsKKwljYXNlIDA6CisJ CWJyZWFrOworCWNhc2UgRFJNX01PREVfUkVGTEVDVF9YOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZM SVBfSE9SSVpPTlRBTDsKKwljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWToKKwlkZWZhdWx0OgorCQlN SVNTSU5HX0NBU0UocmVmbGVjdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIg c2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOworCXUzMiBwbGFuZV9jdGwgPSAwOworCisJaWYgKGNy dGNfc3RhdGUtPnVhcGkuYXN5bmNfZmxpcCkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9BU1lO Q19GTElQOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFL RShkZXZfcHJpdikpCisJCXJldHVybiBwbGFuZV9jdGw7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Z2Ft bWFfZW5hYmxlKQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxFOwor CisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExf UElQRV9DU0NfRU5BQkxFOworCisJcmV0dXJuIHBsYW5lX2N0bDsKK30KKworc3RhdGljIHUzMiBz a2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAor CQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+ dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBs YW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+ aHcucm90YXRpb247CisJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtl eSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKKwl1MzIgcGxhbmVfY3RsOworCisJcGxhbmVfY3RsID0g UExBTkVfQ1RMX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTAgJiYgIUlT X0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7CisJCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX2Fs cGhhKHBsYW5lX3N0YXRlKTsKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QTEFORV9HQU1NQV9E SVNBQkxFOworCisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2RpbmcgPT0gRFJNX0NP TE9SX1lDQkNSX0JUNzA5KQorCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZfVE9fUkdCX0NT Q19GT1JNQVRfQlQ3MDk7CisKKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9PSBE Uk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfWVVW X1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKKwl9CisKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5l X2N0bF9mb3JtYXQoZmItPmZvcm1hdC0+Zm9ybWF0KTsKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5l X2N0bF90aWxpbmcoZmItPm1vZGlmaWVyKTsKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9y b3RhdGUocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfTUFTSyk7CisKKwlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMCkKKwkJcGxhbmVfY3RsIHw9IGNubF9wbGFuZV9jdGxfZmxpcChyb3Rh dGlvbiAmCisJCQkJCQlEUk1fTU9ERV9SRUZMRUNUX01BU0spOworCisJaWYgKGtleS0+ZmxhZ3Mg JiBJOTE1X1NFVF9DT0xPUktFWV9ERVNUSU5BVElPTikKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NU TF9LRVlfRU5BQkxFX0RFU1RJTkFUSU9OOworCWVsc2UgaWYgKGtleS0+ZmxhZ3MgJiBJOTE1X1NF VF9DT0xPUktFWV9TT1VSQ0UpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfS0VZX0VOQUJMRV9T T1VSQ0U7CisKKwlyZXR1cm4gcGxhbmVfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9j b2xvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3Rh dGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMDsKKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworCisJ aWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5F X0NPTE9SX1BJUEVfR0FNTUFfRU5BQkxFOworCisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUp CisJCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0NTQ19FTkFCTEU7CisKKwly ZXR1cm4gcGxhbmVfY29sb3JfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9j dGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAg Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBp LnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDA7CisK KwlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUExBTkVfR0FNTUFfRElTQUJMRTsKKwlw bGFuZV9jb2xvcl9jdGwgfD0gZ2xrX3BsYW5lX2NvbG9yX2N0bF9hbHBoYShwbGFuZV9zdGF0ZSk7 CisKKwlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2 LCBwbGFuZS0+aWQpKSB7CisJCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5n KSB7CisJCWNhc2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgorCQkJcGxhbmVfY29sb3JfY3RsIHw9 IFBMQU5FX0NPTE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7CisJCQlicmVhazsKKwkJY2Fz ZSBEUk1fQ09MT1JfWUNCQ1JfQlQyMDIwOgorCQkJcGxhbmVfY29sb3JfY3RsIHw9CisJCQkJUExB TkVfQ09MT1JfQ1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlwbGFuZV9jb2xvcl9jdGwgfD0KKwkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY2 MDFfVE9fUkdCNjAxOworCQl9CisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0g RFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVf Q09MT1JfWVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKKwl9IGVsc2UgaWYgKGZiLT5mb3Jt YXQtPmlzX3l1dikgeworCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRfQ1ND X0VOQUJMRTsKKwl9CisKKwlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworfQorCitzdGF0aWMgaW50 CittYWluX3RvX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50 IG1haW5fcGxhbmUpCit7CisJZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihm Yi0+bW9kaWZpZXIpIHx8CisJCSAgICAobWFpbl9wbGFuZSAmJiBtYWluX3BsYW5lID49IGZiLT5m b3JtYXQtPm51bV9wbGFuZXMgLyAyKSk7CisKKwlyZXR1cm4gZmItPmZvcm1hdC0+bnVtX3BsYW5l cyAvIDIgKyBtYWluX3BsYW5lOworfQorCitpbnQgc2tsX2Njc190b19tYWluX3BsYW5lKGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQoreworCWRybV9XQVJO X09OKGZiLT5kZXYsICFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSB8fAorCQkgICAgY2Nz X3BsYW5lIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpOworCisJcmV0dXJuIGNjc19wbGFu ZSAtIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOworfQorCisKK3N0YXRpYyBpbnQKK3NrbF9t YWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IG1h aW5fcGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGZi LT5kZXYpOworCisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4g bWFpbl90b19jY3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOworCWVsc2UgaWYgKElOVEVMX0dFTihp OTE1KSA8IDExICYmCisJCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihmYi0+ Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZAorc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJ ICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkgIGludCBj b2xvcl9wbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5p ZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCWNvbnN0IHN0cnVjdCBkcm1faW50 ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7CisJdTMyIHN1cmZf YWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ub2Zmc2V0OworCXUz MiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7CisJ Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJ aW50IGF1eF9wbGFuZSA9IHNrbF9tYWluX3RvX2F1eF9wbGFuZShmYiwgY29sb3JfcGxhbmUpOwor CWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfeSA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC55MTsKKwl1MzIgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtjb2xvcl9wbGFuZV0ueDsKKwl1MzIgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xv cl9wbGFuZV0ueTsKKwl1MzIgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuc3JjKSA+PiAxNjsKKwl1MzIgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7CisJdTggYWxwaGEgPSBwbGFuZV9zdGF0ZS0+aHcuYWxwaGEgPj4g ODsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMCwgYXV4X2Rpc3QgPSAwOworCXVuc2lnbmVkIGxv bmcgaXJxZmxhZ3M7CisJdTMyIGtleW1zaywga2V5bWF4OworCXUzMiBwbGFuZV9jdGwgPSBwbGFu ZV9zdGF0ZS0+Y3RsOworCisJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0 YXRlKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0Uo ZGV2X3ByaXYpKQorCQlwbGFuZV9jb2xvcl9jdGwgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfY3RsIHwK KwkJCWdsa19wbGFuZV9jb2xvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCS8qIFNpemVzIGFy ZSAwIGJhc2VkICovCisJc3JjX3ctLTsKKwlzcmNfaC0tOworCisJa2V5bWF4ID0gKGtleS0+bWF4 X3ZhbHVlICYgMHhmZmZmZmYpIHwgUExBTkVfS0VZTUFYX0FMUEhBKGFscGhhKTsKKworCWtleW1z ayA9IGtleS0+Y2hhbm5lbF9tYXNrICYgMHg3ZmZmZmZmOworCWlmIChhbHBoYSA8IDB4ZmYpCisJ CWtleW1zayB8PSBQTEFORV9LRVlNU0tfQUxQSEFfRU5BQkxFOworCisJLyogVGhlIHNjYWxlciB3 aWxsIGhhbmRsZSB0aGUgb3V0cHV0IHBvc2l0aW9uICovCisJaWYgKHBsYW5lX3N0YXRlLT5zY2Fs ZXJfaWQgPj0gMCkgeworCQljcnRjX3ggPSAwOworCQljcnRjX3kgPSAwOworCX0KKworCWlmIChh dXhfcGxhbmUpIHsKKwkJYXV4X2Rpc3QgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3Bs YW5lXS5vZmZzZXQgLSBzdXJmX2FkZHI7CisKKwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAx MikKKwkJCWF1eF9kaXN0IHw9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGF1eF9wbGFu ZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJx ZmxhZ3MpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NUUklERShwaXBl LCBwbGFuZV9pZCksIHN0cmlkZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X1BPUyhwaXBlLCBwbGFuZV9pZCksCisJCQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKKwlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCksCisJ CQkgIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLCBhdXhfZGlzdCk7CisKKwlpZiAoaWNs X2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQorCQlpbnRlbF9kZV93cml0ZV9mdyhk ZXZfcHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9zdGF0 ZS0+Y3VzX2N0bCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1J TklMQUtFKGRldl9wcml2KSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NP TE9SX0NUTChwaXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9jb2xvcl9jdGwpOworCisJaWYg KGZiLT5mb3JtYXQtPmlzX3l1diAmJiBpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9p ZCkpCisJCWljbF9wcm9ncmFtX2lucHV0X2NzYyhwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUpOworCisJc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKKworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9LRVlWQUwocGlwZSwgcGxhbmVfaWQpLAorCQkJ ICBrZXktPm1pbl92YWx1ZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tF WU1TSyhwaXBlLCBwbGFuZV9pZCksIGtleW1zayk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFBMQU5FX0tFWU1BWChwaXBlLCBwbGFuZV9pZCksIGtleW1heCk7CisKKwlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgKHkg PDwgMTYpIHwgeCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQorCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCksCisJ CQkJICAocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzFdLngpOworCisJaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNl dCgmY3J0Y19zdGF0ZS0+dWFwaSkpCisJCWludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0 Y2gocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7CisKKwkvKgor CSAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIHNlbGYtYXJtcyBpZiB0aGUgcGxhbmUgd2FzIHByZXZp b3VzbHkKKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9taWMg Ynkgd3JpdGluZworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyIGp1c3QgYmVmb3JlIHRoZSBzdXJm YWNlIHJlZ2lzdGVyLgorCSAqLworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9D VEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9v ZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsKKworCWlmIChwbGFuZV9zdGF0ZS0+c2Nh bGVyX2lkID49IDApCisJCXNrbF9wcm9ncmFtX3NjYWxlcihwbGFuZSwgY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfYXN5bmNfZmxpcChz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJZW51 bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5l LT5waXBlOworCXUzMiBzdXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zm c2V0OworCXUzMiBwbGFuZV9jdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOworCisJcGxhbmVfY3RsIHw9 IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZk ZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgaW50 ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsKKworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQor CitzdGF0aWMgdm9pZAorc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAorCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSBjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWludCBjb2xvcl9w bGFuZSA9IDA7CisKKwlpZiAocGxhbmVfc3RhdGUtPnBsYW5hcl9saW5rZWRfcGxhbmUgJiYgIXBs YW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCisJCS8qIFByb2dyYW0gdGhlIFVWIHBsYW5lIG9uIHBs YW5hciBtYXN0ZXIgKi8KKwkJY29sb3JfcGxhbmUgPSAxOworCisJc2tsX3Byb2dyYW1fcGxhbmUo cGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0YXRp YyBib29sIGludGVsX2Zvcm1hdF9pc19wMDF4KHUzMiBmb3JtYXQpCit7CisJc3dpdGNoIChmb3Jt YXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwlj YXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJu IGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfZmIoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwor CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwor CXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlzdHJ1 Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKKworCWlmICghZmIpCisJCXJldHVy biAwOworCisJaWYgKHJvdGF0aW9uICYgfihEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JP VEFURV8xODApICYmCisJICAgIGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJSQyBzdXBwb3J0IG9ubHkgd2l0aCAw LzE4MCBkZWdyZWUgcm90YXRpb24gKCV4KVxuIiwKKwkJCSAgICByb3RhdGlvbik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCAmJgor CSAgICBmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7CisJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJob3Jpem9udGFsIGZsaXAgaXMgbm90IHN1cHBv cnRlZCB3aXRoIGxpbmVhciBzdXJmYWNlIGZvcm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJaWYgKGZi LT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgorCQkgICAgZmItPm1vZGlm aWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkgeworCQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCisJCQkJICAgICJZL1lmIHRpbGluZyByZXF1aXJlZCBmb3IgOTAvMjcwIVxuIik7 CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qCisJCSAqIDkwLzI3MCBpcyBub3QgYWxs b3dlZCB3aXRoIFJHQjY0IDE2OjE2OjE2OjE2IGFuZAorCQkgKiBJbmRleGVkIDgtYml0LiBSR0Ig MTYtYml0IDU6Njo1IGlzIGFsbG93ZWQgZ2VuMTEgb253YXJkcy4KKwkJICovCisJCXN3aXRjaCAo ZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKKwkJCQlicmVhazsKKwkJCWZhbGx0aHJvdWdoOwor CQljYXNlIERSTV9GT1JNQVRfQzg6CisJCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgor CQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX0FSR0Ix NjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCQljYXNlIERSTV9G T1JNQVRfWTIxMDoKKwkJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJCWNhc2UgRFJNX0ZPUk1BVF9Z MjE2OgorCQljYXNlIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCQljYXNlIERSTV9GT1JN QVRfWFZZVTE2MTYxNjE2OgorCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAg ICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgJXMgZm9yIDkwLzI3MCFcbiIsCisJCQkJICAgIGRy bV9nZXRfZm9ybWF0X25hbWUoZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCQkJCSZmb3JtYXRfbmFt ZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0K KworCS8qIFktdGlsaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgSW50ZXJsYWNlIG1vZGUg Ki8KKwlpZiAoY3J0Y19zdGF0ZS0+aHcuZW5hYmxlICYmCisJICAgIGNydGNfc3RhdGUtPmh3LmFk anVzdGVkX21vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSAmJgorCSAgICAoZmIt Pm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8CisJICAgICBmYi0+bW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykpIHsKKwkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCisJCQkgICAgIlkvWWYgdGlsaW5nIG5vdCBzdXBwb3J0ZWQgaW4gSUYt SUQgbW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdhXzE2MDYwNTQxODg6 dGdsICovCisJaWYgKElTX1RJR0VSTEFLRShkZXZfcHJpdikgJiYKKwkgICAgcGxhbmVfc3RhdGUt PmNrZXkuZmxhZ3MgJiBJOTE1X1NFVF9DT0xPUktFWV9TT1VSQ0UgJiYKKwkgICAgaW50ZWxfZm9y bWF0X2lzX3AwMXgoZmItPmZvcm1hdC0+Zm9ybWF0KSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKKwkJCSAgICAiU291cmNlIGNvbG9yIGtleWluZyBub3Qgc3VwcG9ydGVkIHdpdGgg UDAxeCBmb3JtYXRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRlcyhjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwor CWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfdyA9IGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCWludCBwaXBlX3NyY193ID0g Y3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKKworCS8qCisJICogRGlzcGxheSBXQSAjMTE3NTogY25s LGdsaworCSAqIFBsYW5lcyBvdGhlciB0aGFuIHRoZSBjdXJzb3IgbWF5IGNhdXNlIEZJRk8gdW5k ZXJmbG93IGFuZCBkaXNwbGF5CisJICogY29ycnVwdGlvbiBpZiBzdGFydGluZyBsZXNzIHRoYW4g NCBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgZWRnZSBvZgorCSAqIHRoZSBzY3JlZW4uCisJICogQmVz aWRlcyB0aGUgYWJvdmUgV0EgZml4IHRoZSBzaW1pbGFyIHByb2JsZW0sIHdoZXJlIHBsYW5lcyBv dGhlcgorCSAqIHRoYW4gdGhlIGN1cnNvciBlbmRpbmcgbGVzcyB0aGFuIDQgcGl4ZWxzIGZyb20g dGhlIGxlZnQgZWRnZSBvZiB0aGUKKwkgKiBzY3JlZW4gbWF5IGNhdXNlIEZJRk8gdW5kZXJmbG93 IGFuZCBkaXNwbGF5IGNvcnJ1cHRpb24uCisJICovCisJaWYgKChJU19HRU1JTklMQUtFKGRldl9w cml2KSB8fCBJU19DQU5OT05MQUtFKGRldl9wcml2KSkgJiYKKwkgICAgKGNydGNfeCArIGNydGNf dyA8IDQgfHwgY3J0Y194ID4gcGlwZV9zcmNfdyAtIDQpKSB7CisJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAorCQkJICAgICJyZXF1ZXN0ZWQgcGxhbmUgWCAlcyBwb3NpdGlvbiAlZCBpbnZh bGlkICh2YWxpZCByYW5nZSAlZC0lZClcbiIsCisJCQkgICAgY3J0Y194ICsgY3J0Y193IDwgNCA/ ICJlbmQiIDogInN0YXJ0IiwKKwkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gY3J0Y194ICsg Y3J0Y193IDogY3J0Y194LAorCQkJICAgIDQsIHBpcGVfc3JjX3cgLSA0KTsKKwkJcmV0dXJuIC1F UkFOR0U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNr X252MTJfcm90YXRpb24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5o dy5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247 CisJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4g MTY7CisKKwkvKiBEaXNwbGF5IFdBICMxMTA2ICovCisJaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lz X3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkgICAgc3JjX3cg JiAzICYmCisJICAgIChyb3RhdGlvbiA9PSBEUk1fTU9ERV9ST1RBVEVfMjcwIHx8CisJICAgICBy b3RhdGlvbiA9PSAoRFJNX01PREVfUkVGTEVDVF9YIHwgRFJNX01PREVfUk9UQVRFXzkwKSkpIHsK KwkJRFJNX0RFQlVHX0tNUygic3JjIHdpZHRoIG11c3QgYmUgbXVsdGlwbGUgb2YgNCBmb3Igcm90 YXRlZCBwbGFuYXIgWVVWXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX21heF9zY2FsZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIpCit7CisJLyoKKwkgKiBXZSBkb24ndCB5ZXQga25vdyB0aGUgZmluYWwgc291cmNlIHdpZHRo IG5vcgorCSAqIHdoZXRoZXIgd2UgY2FuIHVzZSB0aGUgSFEgc2NhbGVyIG1vZGUuIEFzc3VtZQor CSAqIHRoZSBiZXN0IGNhc2UuCisJICogRklYTUUgbmVlZCB0byBwcm9wZXJseSBjaGVjayB0aGlz IGxhdGVyLgorCSAqLworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlO SUxBS0UoZGV2X3ByaXYpIHx8CisJICAgICFpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBs YW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gMHgzMDAwMCAtIDE7CisJ ZWxzZQorCQlyZXR1cm4gMHgyMDAwMCAtIDE7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfcGxhbmVf bWluX3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJIGNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQgY29sb3JfcGxhbmUsCisJCQkJIHVuc2lnbmVk IGludCByb3RhdGlvbikKK3sKKwlpZiAocGxhbmUtPm1pbl93aWR0aCkKKwkJcmV0dXJuIHBsYW5l LT5taW5fd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7CisJZWxzZQorCQlyZXR1cm4g MTsKK30KKworc3RhdGljIGludCBpbnRlbF9wbGFuZV9tYXhfd2lkdGgoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJ IGludCBjb2xvcl9wbGFuZSwKKwkJCQkgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlmIChw bGFuZS0+bWF4X3dpZHRoKQorCQlyZXR1cm4gcGxhbmUtPm1heF93aWR0aChmYiwgY29sb3JfcGxh bmUsIHJvdGF0aW9uKTsKKwllbHNlCisJCXJldHVybiBJTlRfTUFYOworfQorCitzdGF0aWMgaW50 IGludGVsX3BsYW5lX21heF9oZWlnaHQoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCQkg IGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3BsYW5l LAorCQkJCSAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlmIChwbGFuZS0+bWF4X2hlaWdo dCkKKwkJcmV0dXJuIHBsYW5lLT5tYXhfaGVpZ2h0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24p OworCWVsc2UKKwkJcmV0dXJuIElOVF9NQVg7Cit9CisKK3N0YXRpYyBib29sCitza2xfY2hlY2tf bWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwKKwkJCSAgICAgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIgbWFpbl9vZmZzZXQsCisJ CQkgICAgICAgaW50IGNjc19wbGFuZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbY2NzX3BsYW5lXS54OworCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtjY3NfcGxhbmVdLnk7CisJdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3Jf cGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7CisJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZfYWxp Z25tZW50KGZiLCBjY3NfcGxhbmUpOworCWludCBoc3ViOworCWludCB2c3ViOworCisJaW50ZWxf ZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7CisJ d2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7CisJ CWludCB4LCB5OworCisJCWlmIChhdXhfeCA9PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95KQor CQkJYnJlYWs7CisKKwkJaWYgKGF1eF9vZmZzZXQgPT0gMCkKKwkJCWJyZWFrOworCisJCXggPSBh dXhfeCAvIGhzdWI7CisJCXkgPSBhdXhfeSAvIHZzdWI7CisJCWF1eF9vZmZzZXQgPSBpbnRlbF9w bGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJCSAgICAgICBwbGFuZV9z dGF0ZSwKKwkJCQkJCQkgICAgICAgY2NzX3BsYW5lLAorCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0 LAorCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0IC0KKwkJCQkJCQkJYWxpZ25tZW50KTsKKwkJYXV4 X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1YjsKKwkJYXV4X3kgPSB5ICogdnN1YiArIGF1eF95 ICUgdnN1YjsKKwl9CisKKwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkK KwkJcmV0dXJuIGZhbHNlOworCisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0u b2Zmc2V0ID0gYXV4X29mZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5l XS54ID0gYXV4X3g7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9IGF1 eF95OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3Vy ZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3Rh dGlvbjsKKwlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKKwlpbnQgeSA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKKwlpbnQgdyA9IGRybV9yZWN0X3dpZHRo KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCWludCBoID0gZHJtX3JlY3RfaGVpZ2h0 KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCWludCBtaW5fd2lkdGggPSBpbnRlbF9w bGFuZV9taW5fd2lkdGgocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7CisJaW50IG1heF93aWR0aCA9 IGludGVsX3BsYW5lX21heF93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwlpbnQgbWF4 X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7 CisJaW50IGF1eF9wbGFuZSA9IHNrbF9tYWluX3RvX2F1eF9wbGFuZShmYiwgMCk7CisJdTMyIGF1 eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS5vZmZzZXQ7CisJ dTMyIGFsaWdubWVudCwgb2Zmc2V0OworCisJaWYgKHcgPiBtYXhfd2lkdGggfHwgdyA8IG1pbl93 aWR0aCB8fCBoID4gbWF4X2hlaWdodCkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJCSAgICAicmVxdWVzdGVkIFkvUkdCIHNvdXJjZSBzaXplICVkeCVkIG91dHNpZGUgbGltaXRz IChtaW46ICVkeDEgbWF4OiAlZHglZClcbiIsCisJCQkgICAgdywgaCwgbWluX3dpZHRoLCBtYXhf d2lkdGgsIG1heF9oZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbnRlbF9hZGRf ZmJfb2Zmc2V0cygmeCwgJnksIHBsYW5lX3N0YXRlLCAwKTsKKwlvZmZzZXQgPSBpbnRlbF9wbGFu ZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDApOworCWFsaWdu bWVudCA9IGludGVsX3N1cmZfYWxpZ25tZW50KGZiLCAwKTsKKwlpZiAoZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sIGFsaWdubWVudCAmJiAhaXNfcG93ZXJfb2ZfMihhbGlnbm1lbnQpKSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEFVWCBzdXJmYWNlIG9mZnNldCBpcyBzcGVjaWZp ZWQgYXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlCisJICogbWFpbiBzdXJmYWNlIG9mZnNldCwgYW5k IGl0IG11c3QgYmUgbm9uLW5lZ2F0aXZlLiBNYWtlCisJICogc3VyZSB0aGF0IGlzIHdoYXQgd2Ug d2lsbCBnZXQuCisJICovCisJaWYgKGF1eF9wbGFuZSAmJiBvZmZzZXQgPiBhdXhfb2Zmc2V0KQor CQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFu ZV9zdGF0ZSwgMCwKKwkJCQkJCQkgICBvZmZzZXQsIGF1eF9vZmZzZXQgJiB+KGFsaWdubWVudCAt IDEpKTsKKworCS8qCisJICogV2hlbiB1c2luZyBhbiBYLXRpbGVkIHN1cmZhY2UsIHRoZSBwbGFu ZSBibG93cyB1cAorCSAqIGlmIHRoZSB4IG9mZnNldCArIHdpZHRoIGV4Y2VlZCB0aGUgc3RyaWRl LgorCSAqCisJICogVE9ETzogbGluZWFyIGFuZCBZLXRpbGVkIHNlZW0gZmluZSwgWWYgdW50ZXN0 ZWQsCisJICovCisJaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkg eworCQlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwWzBdOworCisJCXdoaWxlICgoeCArIHcpICog Y3BwID4gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSkgeworCQkJaWYgKG9mZnNl dCA9PSAwKSB7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiVW5h YmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxp bmdcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlvZmZzZXQgPSBpbnRlbF9w bGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJ CQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisJfQorCisJLyoKKwkgKiBD Q1MgQVVYIHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldHMsIHdlIG11c3Qg bWFrZSBzdXJlCisJICogdGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNl dHMuCisJICovCisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJCXdoaWxl ICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAorCQkJ CQkJICAgICAgIG9mZnNldCwgYXV4X3BsYW5lKSkgeworCQkJaWYgKG9mZnNldCA9PSAwKQorCQkJ CWJyZWFrOworCisJCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo JngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGln bm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9w bGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5l XS55KSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgIlVuYWJsZSB0 byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7CisJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4Owor CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55ID0geTsKKworCS8qCisJICogUHV0IHRoZSBm aW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hl Y2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMuCisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRl X3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJ aW50IHV2X3BsYW5lID0gMTsKKwlpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRo KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKKwlpbnQgbWF4X2hlaWdodCA9IGludGVs X3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCB1dl9wbGFuZSwgcm90YXRpb24pOworCWludCB4 ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE3OworCWludCB5ID0gcGxhbmVfc3RhdGUt PnVhcGkuc3JjLnkxID4+IDE3OworCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTc7CisJaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTc7CisJdTMyIG9mZnNldDsKKworCS8qIEZJWE1FIG5vdCBxdWl0ZSBz dXJlIGhvdy9pZiB0aGVzZSBhcHBseSB0byB0aGUgY2hyb21hIHBsYW5lICovCisJaWYgKHcgPiBt YXhfd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwK KwkJCSAgICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHglZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIs CisJCQkgICAgdywgaCwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxh bmUpOworCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5 LAorCQkJCQkJICAgIHBsYW5lX3N0YXRlLCB1dl9wbGFuZSk7CisKKwlpZiAoaXNfY2NzX21vZGlm aWVyKGZiLT5tb2RpZmllcikpIHsKKwkJaW50IGNjc19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5l KGZiLCB1dl9wbGFuZSk7CisJCXUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2Njc19wbGFuZV0ub2Zmc2V0OworCQl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGln bm1lbnQoZmIsIHV2X3BsYW5lKTsKKworCQlpZiAob2Zmc2V0ID4gYXV4X29mZnNldCkKKwkJCW9m ZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJ CSAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCQkgICB1dl9wbGFuZSwKKwkJCQkJCQkJICAgb2Zmc2V0 LAorCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7CisKKwkJd2hpbGUg KCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksCisJCQkJ CQkgICAgICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7CisJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJ YnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgm eCwgJnksCisJCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCQkgICB1dl9wbGFuZSwKKwkJ CQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0g cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS55KSB7CisJCQlkcm1fZGJnX2ttcygmaTkx NS0+ZHJtLAorCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNl IG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJ cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS54ID0geDsKKwlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbdXZfcGxhbmVdLnkgPSB5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsK KwlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7CisJdTMyIG9mZnNl dDsKKwlpbnQgY2NzX3BsYW5lOworCisJZm9yIChjY3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBm Yi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3NfcGxhbmUrKykgeworCQlpbnQgbWFpbl9oc3ViLCBt YWluX3ZzdWI7CisJCWludCBoc3ViLCB2c3ViOworCQlpbnQgeCwgeTsKKworCQlpZiAoIWlzX2Nj c19wbGFuZShmYiwgY2NzX3BsYW5lKSkKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2ZiX3BsYW5l X2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAmbWFpbl92c3ViLCBmYiwKKwkJCQkJICAgICAg IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKSk7CisJCWludGVsX2ZiX3BsYW5l X2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOworCisJCWhzdWIg Kj0gbWFpbl9oc3ViOworCQl2c3ViICo9IG1haW5fdnN1YjsKKwkJeCA9IHNyY194IC8gaHN1YjsK KwkJeSA9IHNyY195IC8gdnN1YjsKKworCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBs YW5lX3N0YXRlLCBjY3NfcGxhbmUpOworCisJCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkg ICAgY2NzX3BsYW5lKTsKKworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5v ZmZzZXQgPSBvZmZzZXQ7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLngg PSAoeCAqIGhzdWIgKworCQkJCQkJCSBzcmNfeCAlIGhzdWIpIC8KKwkJCQkJCQltYWluX2hzdWI7 CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKwor CQkJCQkJCSBzcmNfeSAlIHZzdWIpIC8KKwkJCQkJCQltYWluX3ZzdWI7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gaW50 ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJ LyoKKwkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlIHRoZSBtYWluIHN1cmZh Y2Ugc2V0dXAgZGVwZW5kcyBvbgorCSAqIGl0LgorCSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIo ZmItPm1vZGlmaWVyKSkgeworCQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5l X3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGludGVsX2Zv cm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsCisJCQkJCQlmYi0+bW9kaWZp ZXIpKSB7CisJCXJldCA9IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gZmItPmZvcm1hdC0+ bnVtX3BsYW5lczsgaSA8IEFSUkFZX1NJWkUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lKTsgaSsr KSB7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSAwOworCQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IDA7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS55ID0gMDsKKwl9CisKKwlyZXQgPSBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHBsYW5lX3N0YXRl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBi b29sIGludGVsX2ZiX3NjYWxhYmxlKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQor eworCWlmICghZmIpCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9y bWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBEUk1f Rk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2 MTYxNkY6CisJCXJldHVybiBJTlRFTF9HRU4odG9faTkxNShmYi0+ZGV2KSkgPj0gMTE7CisJZGVm YXVsdDoKKwkJcmV0dXJuIHRydWU7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVj ayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50 IG1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKKwlpbnQgbWF4X3NjYWxl ID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOworCWludCByZXQ7CisKKwlyZXQgPSBza2xf cGxhbmVfY2hlY2tfZmIoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiB1c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVk ICovCisJaWYgKCFwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmJiBpbnRlbF9mYl9zY2FsYWJsZShm YikpIHsKKwkJbWluX3NjYWxlID0gMTsKKwkJbWF4X3NjYWxlID0gc2tsX3BsYW5lX21heF9zY2Fs ZShkZXZfcHJpdiwgZmIpOworCX0KKworCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19j bGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKKwkJCQkJCW1pbl9zY2FsZSwgbWF4X3Nj YWxlLCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2tsX2NoZWNr X3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJcmV0ID0g c2tsX3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRlcyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3Ny Y19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IHNrbF9wbGFuZV9jaGVja19udjEyX3JvdGF0aW9uKHBsYW5lX3N0YXRlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSFcgb25seSBoYXMgOCBiaXRzIHBpeGVsIHByZWNp c2lvbiwgZGlzYWJsZSBwbGFuZSBpZiBpbnZpc2libGUgKi8KKwlpZiAoIShwbGFuZV9zdGF0ZS0+ aHcuYWxwaGEgPj4gOCkpCisJCXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgPSBmYWxzZTsKKwor CXBsYW5lX3N0YXRlLT5jdGwgPSBza2xfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2 X3ByaXYpKQorCQlwbGFuZV9zdGF0ZS0+Y29sb3JfY3RsID0gZ2xrX3BsYW5lX2NvbG9yX2N0bChj cnRjX3N0YXRlLAorCQkJCQkJCSAgICAgcGxhbmVfc3RhdGUpOworCisJaWYgKGludGVsX2Zvcm1h dF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkg ICAgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJLyogRW5hYmxlIGFu ZCB1c2UgTVBFRy0yIGNocm9tYSBzaXRpbmcgKi8KKwkJcGxhbmVfc3RhdGUtPmN1c19jdGwgPSBQ TEFORV9DVVNfRU5BQkxFIHwKKwkJCVBMQU5FX0NVU19IUEhBU0VfMCB8CisJCQlQTEFORV9DVVNf VlBIQVNFX1NJR05fTkVHQVRJVkUgfCBQTEFORV9DVVNfVlBIQVNFXzBfMjU7CisJZWxzZQorCQlw bGFuZV9zdGF0ZS0+Y3VzX2N0bCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wg c2tsX3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ ICAgICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJaWYgKCFI QVNfRkJDKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBpcGUgPT0gUElQ RV9BICYmIHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlk7Cit9CisKK3N0YXRpYyBib29sIHNrbF9w bGFuZV9oYXNfcGxhbmFyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg ZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJLyogRGlzcGxheSBX QSAjMDg3MDogc2tsLCBieHQgKi8KKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJP WFRPTihkZXZfcHJpdikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJU19HRU4oZGV2X3ByaXYs IDkpICYmICFJU19HRU1JTklMQUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQg IT0gUExBTkVfU1BSSVRFMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisK K3N0YXRpYyBjb25zdCB1MzIgKnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkLAorCQkJCQlpbnQgKm51bV9mb3JtYXRzKQoreworCWlmIChza2xfcGxhbmVfaGFzX3Bs YW5hcihkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoc2tsX3BsYW5hcl9mb3JtYXRzKTsKKwkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsK Kwl9IGVsc2UgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRz KTsKKwkJcmV0dXJuIHNrbF9wbGFuZV9mb3JtYXRzOworCX0KK30KKworc3RhdGljIGNvbnN0IHUz MiAqZ2xrX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkJZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCisJCQkJCWlu dCAqbnVtX2Zvcm1hdHMpCit7CisJaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBw aXBlLCBwbGFuZV9pZCkpIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFy X2Zvcm1hdHMpOworCQlyZXR1cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpu dW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gc2ts X3BsYW5lX2Zvcm1hdHM7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5l X2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQllbnVtIHBp cGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwKKwkJCQkJaW50ICpudW1fZm9ybWF0cykK K3sKKwlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGlj bF9oZHJfcGxhbmVfZm9ybWF0czsKKwl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2 X3ByaXYsIHBsYW5lX2lkKSkgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJf eV9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOworCX0g ZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3Jt YXRzKTsKKwkJcmV0dXJuIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRp YyBib29sIHNrbF9wbGFuZV9oYXNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCSAgICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQorewor CWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChJU19HRU1J TklMQUtFKGRldl9wcml2KSkKKwkJcmV0dXJuIHBpcGUgIT0gUElQRV9DOworCisJcmV0dXJuIHBp cGUgIT0gUElQRV9DICYmCisJCShwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZIHx8CisJCSBwbGFu ZV9pZCA9PSBQTEFORV9TUFJJVEUwKTsKK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1h dF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgdTMyIGZv cm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19p bnRlbF9wbGFuZShfcGxhbmUpOworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoK KwkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQorCQkJcmV0 dXJuIGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0 dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoK KwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAx MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNh c2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZP Uk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRf UDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwlj YXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBE Uk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgor CWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJN X0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoK KwkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRl ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGdlbjEyX3BsYW5l X3N1cHBvcnRzX21jX2NjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJ CWVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5j MF0scmtsW2FsbF0sZGcxW2FsbF0gKi8KKwlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NL RVRMQUtFKGRldl9wcml2KSB8fAorCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdM X1JFVklEX0EwLCBUR0xfUkVWSURfQzApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcGxh bmVfaWQgPCBQTEFORV9TUFJJVEU0OworfQorCitzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJCSAgICAgdTMy IGZvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoX3BsYW5lLT5kZXYpOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUg PSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgorCQlpZiAoIWdlbjEyX3BsYW5l X3N1cHBvcnRzX21jX2NjcyhkZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJCXJldHVybiBmYWxzZTsK KwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgorCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERS TV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19j Y3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOwor CWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJN X0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9O VjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoK KwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJaWYgKG1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKKwkJCXJldHVy biB0cnVlOworCQlmYWxsdGhyb3VnaDsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAx MDoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0M4Ogor CWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYx NjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1B VF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJf MTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVy ID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVy biBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1NjQgKmdlbjEyX2dldF9wbGFuZV9tb2Rp ZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgZW51bSBw bGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlpZiAoZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRl dl9wcml2LCBwbGFuZV9pZCkpCisJCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJz X21jX2NjczsKKwllbHNlCisJCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3Jj X2NjczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5l X2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAor CS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNr bF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBk cm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJv eSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0 ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAor CS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVk LAorfTsKKworc3RydWN0IGludGVsX3BsYW5lICoKK3NrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIGVudW0gcGlwZSBwaXBl LCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVu Y3MgKnBsYW5lX2Z1bmNzOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7CisJZW51bSBkcm1f cGxhbmVfdHlwZSBwbGFuZV90eXBlOworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25z OworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfY3NjOworCWNvbnN0IHU2NCAqbW9kaWZpZXJzOwor CWNvbnN0IHUzMiAqZm9ybWF0czsKKwlpbnQgbnVtX2Zvcm1hdHM7CisJaW50IHJldDsKKworCXBs YW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKKwlpZiAoSVNfRVJSKHBsYW5lKSkKKwkJcmV0dXJu IHBsYW5lOworCisJcGxhbmUtPnBpcGUgPSBwaXBlOworCXBsYW5lLT5pZCA9IHBsYW5lX2lkOwor CXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBwbGFuZV9p ZCk7CisKKwlwbGFuZS0+aGFzX2ZiYyA9IHNrbF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBwaXBl LCBwbGFuZV9pZCk7CisJaWYgKHBsYW5lLT5oYXNfZmJjKSB7CisJCXN0cnVjdCBpbnRlbF9mYmMg KmZiYyA9ICZkZXZfcHJpdi0+ZmJjOworCisJCWZiYy0+cG9zc2libGVfZnJhbWVidWZmZXJfYml0 cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OworCX0KKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKSB7CisJCXBsYW5lLT5taW5fd2lkdGggPSBpY2xfcGxhbmVfbWluX3dpZHRoOwor CQlwbGFuZS0+bWF4X3dpZHRoID0gaWNsX3BsYW5lX21heF93aWR0aDsKKwkJcGxhbmUtPm1heF9o ZWlnaHQgPSBpY2xfcGxhbmVfbWF4X2hlaWdodDsKKwl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJcGxhbmUtPm1heF93 aWR0aCA9IGdsa19wbGFuZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3Bs YW5lX21heF9oZWlnaHQ7CisJfSBlbHNlIHsKKwkJcGxhbmUtPm1heF93aWR0aCA9IHNrbF9wbGFu ZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3BsYW5lX21heF9oZWlnaHQ7 CisJfQorCisJcGxhbmUtPm1heF9zdHJpZGUgPSBza2xfcGxhbmVfbWF4X3N0cmlkZTsKKwlwbGFu ZS0+dXBkYXRlX3BsYW5lID0gc2tsX3VwZGF0ZV9wbGFuZTsKKwlwbGFuZS0+ZGlzYWJsZV9wbGFu ZSA9IHNrbF9kaXNhYmxlX3BsYW5lOworCXBsYW5lLT5nZXRfaHdfc3RhdGUgPSBza2xfcGxhbmVf Z2V0X2h3X3N0YXRlOworCXBsYW5lLT5jaGVja19wbGFuZSA9IHNrbF9wbGFuZV9jaGVjazsKKwlw bGFuZS0+bWluX2NkY2xrID0gc2tsX3BsYW5lX21pbl9jZGNsazsKKwlwbGFuZS0+YXN5bmNfZmxp cCA9IHNrbF9wbGFuZV9hc3luY19mbGlwOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEpCisJCWZvcm1hdHMgPSBpY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCisJ CQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlmb3JtYXRzID0gZ2xrX2dl dF9wbGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9y bWF0cyk7CisJZWxzZQorCQlmb3JtYXRzID0gc2tsX2dldF9wbGFuZV9mb3JtYXRzKGRldl9wcml2 LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0cyk7CisKKwlwbGFuZS0+aGFzX2Nj cyA9IHNrbF9wbGFuZV9oYXNfY2NzKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCk7CisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKKwkJbW9kaWZpZXJzID0gZ2VuMTJfZ2V0X3BsYW5l X21vZGlmaWVycyhkZXZfcHJpdiwgcGxhbmVfaWQpOworCQlwbGFuZV9mdW5jcyA9ICZnZW4xMl9w bGFuZV9mdW5jczsKKwl9IGVsc2UgeworCQlpZiAocGxhbmUtPmhhc19jY3MpCisJCQltb2RpZmll cnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3M7CisJCWVsc2UKKwkJCW1vZGlmaWVy cyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX25vY2NzOworCQlwbGFuZV9mdW5jcyA9ICZz a2xfcGxhbmVfZnVuY3M7CisJfQorCisJaWYgKHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlkpCisJ CXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOworCWVsc2UKKwkJcGxhbmVfdHlw ZSA9IERSTV9QTEFORV9UWVBFX09WRVJMQVk7CisKKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5l X2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkgICAgICAgMCwgcGxhbmVf ZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLCBtb2RpZmllcnMsCisJCQkJ ICAgICAgIHBsYW5lX3R5cGUsCisJCQkJICAgICAgICJwbGFuZSAlZCVjIiwgcGxhbmVfaWQgKyAx LAorCQkJCSAgICAgICBwaXBlX25hbWUocGlwZSkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsK KworCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RF X1JPVEFURV85MCB8CisJCURSTV9NT0RFX1JPVEFURV8xODAgfCBEUk1fTU9ERV9ST1RBVEVfMjcw OworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCXN1cHBvcnRlZF9yb3RhdGlv bnMgfD0gRFJNX01PREVfUkVGTEVDVF9YOworCisJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9w cm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAorCQkJCQkg ICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKKworCXN1cHBvcnRlZF9jc2MgPSBCSVQoRFJNX0NPTE9S X1lDQkNSX0JUNjAxKSB8IEJJVChEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpOworCisJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCXN1cHBv cnRlZF9jc2MgfD0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjApOworCisJZHJtX3BsYW5lX2Ny ZWF0ZV9jb2xvcl9wcm9wZXJ0aWVzKCZwbGFuZS0+YmFzZSwKKwkJCQkJICBzdXBwb3J0ZWRfY3Nj LAorCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSkgfAorCQkJCQkgIEJJ VChEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSksCisJCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0JU NzA5LAorCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKTsKKworCWRybV9wbGFu ZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoJnBsYW5lLT5iYXNlKTsKKwlkcm1fcGxhbmVfY3JlYXRl X2JsZW5kX21vZGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkgICAgIEJJVChEUk1fTU9E RV9CTEVORF9QSVhFTF9OT05FKSB8CisJCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX1BSRU1V TFRJKSB8CisJCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFKSk7CisKKwlkcm1f cGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwgcGxhbmVf aWQpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCisJCWRybV9wbGFuZV9lbmFi bGVfZmJfZGFtYWdlX2NsaXBzKCZwbGFuZS0+YmFzZSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9zY2FsaW5nX2ZpbHRlcl9wcm9wZXJ0eSgm cGxhbmUtPmJhc2UsCisJCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFVTFQpIHwKKwkJ CQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJPUikpOworCisJZHJtX3Bs YW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsK KworCXJldHVybiBwbGFuZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsKKwor CXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQKK3NrbF9nZXRfaW5pdGlhbF9wbGFuZV9j b25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9pbml0 aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKQoreworCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShjcnRjLT5iYXNlLnByaW1hcnkpOworCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBwaXBlIHBpcGU7CisJdTMyIHZhbCwg YmFzZSwgb2Zmc2V0LCBzdHJpZGVfbXVsdCwgdGlsaW5nLCBhbHBoYTsKKwlpbnQgZm91cmNjLCBw aXhlbF9mb3JtYXQ7CisJdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0OworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisK KwlpZiAoIXBsYW5lLT5nZXRfaHdfc3RhdGUocGxhbmUsICZwaXBlKSkKKwkJcmV0dXJuOworCisJ ZHJtX1dBUk5fT04oZGV2LCBwaXBlICE9IGNydGMtPnBpcGUpOworCisJaWYgKGNydGNfc3RhdGUt PmJpZ2pvaW5lcikgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiVW5z dXBwb3J0ZWQgYmlnam9pbmVyIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgRkJcbiIpOworCQly ZXR1cm47CisJfQorCisJaW50ZWxfZmIgPSBremFsbG9jKHNpemVvZigqaW50ZWxfZmIpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWludGVsX2ZiKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiZmFpbGVkIHRvIGFsbG9jIGZiXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZiID0gJmludGVs X2ZiLT5iYXNlOworCisJZmItPmRldiA9IGRldjsKKworCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCkpOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEpCisJCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIElDTF9QTEFORV9DVExfRk9STUFU X01BU0s7CisJZWxzZQorCQlwaXhlbF9mb3JtYXQgPSB2YWwgJiBQTEFORV9DVExfRk9STUFUX01B U0s7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRl dl9wcml2KSkgeworCQlhbHBoYSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCisJCQkJICAgICAg UExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7CisJCWFscGhhICY9IFBMQU5FX0NPTE9S X0FMUEhBX01BU0s7CisJfSBlbHNlIHsKKwkJYWxwaGEgPSB2YWwgJiBQTEFORV9DVExfQUxQSEFf TUFTSzsKKwl9CisKKwlmb3VyY2MgPSBza2xfZm9ybWF0X3RvX2ZvdXJjYyhwaXhlbF9mb3JtYXQs CisJCQkJICAgICAgdmFsICYgUExBTkVfQ1RMX09SREVSX1JHQlgsIGFscGhhKTsKKwlmYi0+Zm9y bWF0ID0gZHJtX2Zvcm1hdF9pbmZvKGZvdXJjYyk7CisKKwl0aWxpbmcgPSB2YWwgJiBQTEFORV9D VExfVElMRURfTUFTSzsKKwlzd2l0Y2ggKHRpbGluZykgeworCWNhc2UgUExBTkVfQ1RMX1RJTEVE X0xJTkVBUjoKKwkJZmItPm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSOworCQlicmVh azsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9YOgorCQlwbGFuZV9jb25maWctPnRpbGluZyA9IEk5 MTVfVElMSU5HX1g7CisJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwor CQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgorCQlwbGFuZV9jb25maWctPnRpbGlu ZyA9IEk5MTVfVElMSU5HX1k7CisJCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJF U1NJT05fRU5BQkxFKQorCQkJZmItPm1vZGlmaWVyID0gSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MiA/CisJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoKKwkJCQlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M7CisJCWVsc2UgaWYgKHZhbCAmIFBMQU5FX0NUTF9NRURJ QV9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKwkJZWxzZQorCQkJZmItPm1vZGlmaWVyID0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQ7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1lGOgor CQlpZiAodmFsICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZi LT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7CisJCWVsc2UKKwkJCWZi LT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJTUlTU0lOR19DQVNFKHRpbGluZyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkg KiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRvIHN0YXkgY29tcGF0aWJs ZSB3aXRoIFhyYW5kcgorCSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24gaXMgY2xvY2t3aXNlLCB0 aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KKwkgKi8KKwlzd2l0Y2ggKHZhbCAmIFBMQU5FX0NUTF9S T1RBVEVfTUFTSykgeworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8wOgorCQlwbGFuZV9jb25maWct PnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RM X1JPVEFURV85MDoKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8y NzA7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8xODA6CisJCXBsYW5lX2NvbmZp Zy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOworCQlicmVhazsKKwljYXNlIFBMQU5F X0NUTF9ST1RBVEVfMjcwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9U QVRFXzkwOworCQlicmVhazsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCAm JgorCSAgICB2YWwgJiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMKQorCQlwbGFuZV9jb25maWct PnJvdGF0aW9uIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsKKworCS8qIDkwLzI3MCBkZWdyZWUgcm90 YXRpb24gd291bGQgcmVxdWlyZSBleHRyYSB3b3JrICovCisJaWYgKGRybV9yb3RhdGlvbl85MF9v cl8yNzAocGxhbmVfY29uZmlnLT5yb3RhdGlvbikpCisJCWdvdG8gZXJyb3I7CisKKwliYXNlID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCkpICYgMHhm ZmZmZjAwMDsKKwlwbGFuZV9jb25maWctPmJhc2UgPSBiYXNlOworCisJb2Zmc2V0ID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSk7CisKKwl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSk7CisJ ZmItPmhlaWdodCA9ICgodmFsID4+IDE2KSAmIDB4ZmZmZikgKyAxOworCWZiLT53aWR0aCA9ICgo dmFsID4+IDApICYgMHhmZmZmKSArIDE7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCBQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpKTsKKwlzdHJpZGVfbXVsdCA9IHNrbF9wbGFu ZV9zdHJpZGVfbXVsdChmYiwgMCwgRFJNX01PREVfUk9UQVRFXzApOworCWZiLT5waXRjaGVzWzBd ID0gKHZhbCAmIDB4M2ZmKSAqIHN0cmlkZV9tdWx0OworCisJYWxpZ25lZF9oZWlnaHQgPSBpbnRl bF9mYl9hbGlnbl9oZWlnaHQoZmIsIDAsIGZiLT5oZWlnaHQpOworCisJcGxhbmVfY29uZmlnLT5z aXplID0gZmItPnBpdGNoZXNbMF0gKiBhbGlnbmVkX2hlaWdodDsKKworCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAorCQkgICAgIiVzLyVzIHdpdGggZmI6IHNpemU9JWR4JWRAJWQsIG9mZnNl dD0leCwgcGl0Y2ggJWQsIHNpemUgMHgleFxuIiwKKwkJICAgIGNydGMtPmJhc2UubmFtZSwgcGxh bmUtPmJhc2UubmFtZSwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAorCQkgICAgZmItPmZvcm1hdC0+ Y3BwWzBdICogOCwgYmFzZSwgZmItPnBpdGNoZXNbMF0sCisJCSAgICBwbGFuZV9jb25maWctPnNp emUpOworCisJcGxhbmVfY29uZmlnLT5mYiA9IGludGVsX2ZiOworCXJldHVybjsKKworZXJyb3I6 CisJa2ZyZWUoaW50ZWxfZmIpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uYmRmY2IwZjcyOGUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKQEAgLTAsMCArMSwzNyBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAy MDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfU0tMX1VOSVZFUlNBTF9QTEFO RV9IXworI2RlZmluZSBfU0tMX1VOSVZFUlNBTF9QTEFORV9IXworCitzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyOworc3RydWN0IGludGVsX2F0b21pY19zdGF0ZTsKK3N0cnVjdCBpbnRlbF9jcnRjOwor c3RydWN0IGludGVsX2NydGNfc3RhdGU7CitzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25m aWc7CitzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CisKK2VudW0gcGlwZTsKK2VudW0gcGxhbmVf aWQ7CisKK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwg ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCk7CisKK3ZvaWQgc2tsX2dldF9pbml0aWFsX3BsYW5lX2Nv bmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBpbnRlbF9pbml0aWFs X3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKTsKKworaW50IHNrbF9mb3JtYXRfdG9fZm91cmNj KGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsKKworaW50IHNrbF9jY3Nf dG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19w bGFuZSk7CisKK3ZvaWQgc2tsX3NjYWxlcl9kaXNhYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSk7Cit2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cit2b2lkIHNrbF9kZXRhY2hfc2NhbGVy cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CitpbnQgc2tsX3Vw ZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Citp bnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS92bHZfZHNp LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Zsdl9kc2kuYwppbmRleCBkNTJmOWMx Nzc5MDguLmIzNDNjZTg3MjExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS92bHZfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS92bHZfZHNp LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJpbnRlbF9maWZvX3VuZGVycnVuLmgiCiAj aW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgorI2lu Y2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogLyogcmV0dXJuIHBpeGVscyBpbiB0ZXJt cyBvZiB0eGJ5dGVjbGtocyAqLwogc3RhdGljIHUxNiB0eGJ5dGVjbGtocyh1MTYgcGl4ZWxzLCBp bnQgYnBwLCBpbnQgbGFuZV9jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IDU3ZGI1 NDg2NzNkZC4uOWUyNzlmZjU2M2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTM4LDYg KzM4LDcgQEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNs dWRlICJkaXNwbGF5L2ludGVsX2ZiYy5oIgogI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfc3ByaXRl LmgiCisjaW5jbHVkZSAiZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKICNpbmNsdWRl ICJndC9pbnRlbF9sbGMuaCIKIAotLSAKMi4yNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK