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=-7.9 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, UNWANTED_LANGUAGE_BODY,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 753B8C2BBD5 for ; Fri, 18 Dec 2020 06:04:49 +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 20ADD23A62 for ; Fri, 18 Dec 2020 06:04:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 20ADD23A62 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 1E6AB89221; Fri, 18 Dec 2020 06:04:48 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95B6489A6D for ; Fri, 18 Dec 2020 06:04:36 +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-347-tSfP__dEN4u6rdMIjCDbvw-1; Fri, 18 Dec 2020 01:04:33 -0500 X-MC-Unique: tSfP__dEN4u6rdMIjCDbvw-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 6ADB0E758 for ; Fri, 18 Dec 2020 06:04:32 +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 D0F1760BE5 for ; Fri, 18 Dec 2020 06:04:31 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 18 Dec 2020 16:04:15 +1000 Message-Id: <20201218060420.3203-9-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 08/13] drm/i915: split fdi code out from intel_display.c 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" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMganVzdCByZWZhY3Rv cnMgb3V0IHRoZSBmZGkgY29kZSB0byBhIHNlcGFyYXRlIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBE YXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpbSmFuaTogY2xlYW5lZCB1cCBpbnRlbF9m ZGkuaCBhIGJpdC5dClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRl bC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8 IDY4NSArLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfdHlwZXMuaCAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2ZkaS5jICAgICAgfCA2ODMgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZmRpLmggICAgICB8ICAyMiArCiA1IGZpbGVzIGNoYW5nZWQsIDcxOCBp bnNlcnRpb25zKCspLCA2ODIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmgKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl CmluZGV4IDMwMzExOTQ2NmQxMi4uZTFhMjQyMzllMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpA QCAtMjA2LDYgKzIwNiw3IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9kcGxsX21nci5v IFwKIAlkaXNwbGF5L2ludGVsX2RzYi5vIFwKIAlkaXNwbGF5L2ludGVsX2ZiYy5vIFwKKwlkaXNw bGF5L2ludGVsX2ZkaS5vIFwKIAlkaXNwbGF5L2ludGVsX2ZpZm9fdW5kZXJydW4ubyBcCiAJZGlz cGxheS9pbnRlbF9mcm9udGJ1ZmZlci5vIFwKIAlkaXNwbGF5L2ludGVsX2dsb2JhbF9zdGF0ZS5v IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKaW5kZXgg ODhhZWNjYzMwMjBiLi41ODk1ZGQwMTc4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiaW50ZWxf ZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKICNp bmNsdWRlICJpbnRlbF9mYmMuaCIKKyNpbmNsdWRlICJpbnRlbF9mZGkuaCIKICNpbmNsdWRlICJp bnRlbF9mYmRldi5oIgogI2luY2x1ZGUgImludGVsX2ZpZm9fdW5kZXJydW4uaCIKICNpbmNsdWRl ICJpbnRlbF9mcm9udGJ1ZmZlci5oIgpAQCAtMTczLDE2ICsxNzQsNiBAQCBzdGF0aWMgdm9pZCBp bnRlbF91cGRhdGVfY3pjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlk ZXZfcHJpdi0+Y3pjbGtfZnJlcSk7CiB9CiAKLS8qIHVuaXRzIG9mIDEwME1IeiAqLwotc3RhdGlj IHUzMiBpbnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Ci17Ci0JaWYgKEhBU19EREkoZGV2X3ByaXYpKQotCQlyZXR1cm4gcGlwZV9jb25maWctPnBvcnRf Y2xvY2s7IC8qIFNQTEwgKi8KLQllbHNlCi0JCXJldHVybiBkZXZfcHJpdi0+ZmRpX3BsbF9mcmVx OwotfQotCiAvKiBXQSBEaXNwbGF5ICMwODI3OiBHZW45OmFsbCAqLwogc3RhdGljIHZvaWQKIHNr bF93YV84Mjcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlw ZSwgYm9vbCBlbmFibGUpCkBAIC0zNzA3LDUzMiArMzY5OCw2IEBAIHN0YXRpYyB2b2lkIGljbF9z ZXRfcGlwZV9jaGlja2VuKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBQSVBFX0NISUNLRU4ocGlwZSksIHRtcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlu dGVsX2ZkaV9ub3JtYWxfdHJhaW4oc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBp cGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRlbXA7Ci0KLQkvKiBlbmFibGUgbm9ybWFsIHRy YWluICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKLQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgewotCQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05F X0lWQiB8IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKLQl9IGVsc2UgewotCQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9OT05FOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkUgfCBG RElfVFhfRU5IQU5DRV9GUkFNRV9FTkFCTEU7Ci0JfQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXApOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Ci0J CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJ X0xJTktfVFJBSU5fTk9STUFMX0NQVDsKLQl9IGVsc2UgewotCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkU7Ci0JfQotCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfRU5IQU5DRV9GUkFNRV9FTkFCTEUp OwotCi0JLyogd2FpdCBvbmUgaWRsZSBwYXR0ZXJuIHRpbWUgKi8KLQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDEwMDApOwotCi0JLyogSVZCIHdhbnRzIGVy cm9yIGNvcnJlY3Rpb24gZW5hYmxlZCAqLwotCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKQot CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAotCQkgICAgICAgICAgICAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpIHwgRkRJX0ZTX0VSUkNfRU5BQkxFIHwgRkRJX0ZFX0VSUkNf RU5BQkxFKTsKLX0KLQotLyogVGhlIEZESSBsaW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgSUxL L0liZXhwZWFrLiAqLwotc3RhdGljIHZvaWQgaWxrX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1wLCB0 cmllczsKLQotCS8qIEZESSBuZWVkcyBiaXRzIGZyb20gcGlwZSBmaXJzdCAqLwotCWFzc2VydF9w aXBlX2VuYWJsZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKLQotCS8q IFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2Nr IGJpdAotCSAgIGZvciB0cmFpbiByZXN1bHQgKi8KLQlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOwot CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9SWF9T WU1CT0xfTE9DSzsKLQl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7Ci0JaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0JaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1 ZGVsYXkoMTUwKTsKLQotCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCi0J cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKLQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9NQVNLOwotCXRlbXAgfD0gRkRJX0RQ X1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKLQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxFKTsKLQotCXJlZyA9IEZE SV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0J dGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VO QUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5 KDE1MCk7Ci0KLQkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBlbmFibGUgY2xvY2sgcG9pbnRlciBh ZnRlciBGREkgZW5hYmxlKi8KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNL RU4ocGlwZSksCi0JCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7Ci0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAotCQkgICAgICAgRkRJ X1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIgfCBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX0VO KTsKLQotCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Ci0JZm9yICh0cmllcyA9IDA7IHRyaWVzIDwg NTsgdHJpZXMrKykgewotCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwot Ci0JCWlmICgodGVtcCAmIEZESV9SWF9CSVRfTE9DSykpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZG9uZS5cbiIpOwotCQkJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Ci0JCQlicmVhazsKLQkJfQotCX0K LQlpZiAodHJpZXMgPT0gNSkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAx IGZhaWwhXG4iKTsKLQotCS8qIFRyYWluIDIgKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwot CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Ci0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUp OwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Ci0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQlyZWcgPSBGRElfUlhfSUlSKHBp cGUpOwotCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKLQkJdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKLQotCQlpZiAodGVtcCAmIEZESV9SWF9TWU1C T0xfTE9DSykgewotCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKLQkJCQkgICAgICAg dGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIkZESSB0cmFpbiAyIGRvbmUuXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh0cmll cyA9PSA1KQotCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIp OwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gZG9uZVxuIik7Ci0K LX0KLQotc3RhdGljIGNvbnN0IGludCBzbmJfYl9mZGlfdHJhaW5fcGFyYW1bXSA9IHsKLQlGRElf TElOS19UUkFJTl80MDBNVl8wREJfU05CX0IsCi0JRkRJX0xJTktfVFJBSU5fNDAwTVZfNkRCX1NO Ql9CLAotCUZESV9MSU5LX1RSQUlOXzYwME1WXzNfNURCX1NOQl9CLAotCUZESV9MSU5LX1RSQUlO XzgwME1WXzBEQl9TTkJfQiwKLX07Ci0KLS8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlv bnMgZm9yIFNOQi9Db3VnYXJwb2ludC4gKi8KLXN0YXRpYyB2b2lkIGdlbjZfZmRpX2xpbmtfdHJh aW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJh c2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2 KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMy IHRlbXAsIGksIHJldHJ5OwotCi0JLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBz eW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0Ci0JICAgZm9yIHRyYWluIHJlc3VsdCAqLwotCXJl ZyA9IEZESV9SWF9JTVIocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwotCXRlbXAgJj0gfkZESV9SWF9CSVRf TE9DSzsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIGVuYWJs ZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsK LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfRFBf UE9SVF9XSURUSF9NQVNLOwotCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ ZmRpX2xhbmVzKTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0gRkRJ X0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBf TUFTSzsKLQkvKiBTTkItQiAqLwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NO Ql9COwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxF KTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKLQkJICAg ICAgIEZESV9SWF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZESV9ERUxBWV85MCk7Ci0KLQlyZWcg PSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp OwotCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fUEFUVEVSTl9NQVNLX0NQVDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFf Q1BUOwotCX0gZWxzZSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JCXRlbXAg fD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsr KSB7Ci0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Ci0J CXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOwotCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKLQotCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0JCXVkZWxheSg1MDApOwotCi0JCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5 KyspIHsKLQkJCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JY X0lJUiAweCV4XG4iLCB0ZW1wKTsKLQkJCWlmICh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLKSB7Ci0J CQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKLQkJCQkJICAgICAgIHRlbXAgfCBGRElf UlhfQklUX0xPQ0spOwotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAg IkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXVkZWxheSg1MCk7 Ci0JCX0KLQkJaWYgKHJldHJ5IDwgNSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSA0KQotCQlk cm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwotCi0JLyogVHJh aW4gMiAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKLQlpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkgewot CQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Ci0JCS8qIFNOQi1CICovCi0J CXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COwotCX0KLQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0J dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKEhBU19QQ0hfQ1BUKGRl dl9wcml2KSkgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwot CQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMl9DUFQ7Ci0JfSBlbHNlIHsKLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRU RVJOXzI7Ci0JfQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JZm9y IChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fVk9MX0VNUF9NQVNLOwotCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKLQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoNTAwKTsKLQotCQlmb3IgKHJldHJ5ID0g MDsgcmV0cnkgPCA1OyByZXRyeSsrKSB7Ci0JCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwotCQkJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Ci0JCQlpZiAodGVtcCAmIEZE SV9SWF9TWU1CT0xfTE9DSykgewotCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCi0J CQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKLQkJCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKLQkJCQkJICAgICJGREkgdHJhaW4gMiBkb25lLlxuIik7Ci0JCQkJYnJl YWs7Ci0JCQl9Ci0JCQl1ZGVsYXkoNTApOwotCQl9Ci0JCWlmIChyZXRyeSA8IDUpCi0JCQlicmVh azsKLQl9Ci0JaWYgKGkgPT0gNCkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFp biAyIGZhaWwhXG4iKTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWlu IGRvbmUuXG4iKTsKLX0KLQotLyogTWFudWFsIGxpbmsgdHJhaW5pbmcgZm9yIEl2eSBCcmlkZ2Ug QTAgcGFydHMgKi8KLXN0YXRpYyB2b2lkIGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW4oc3RydWN0 IGludGVsX2NydGMgKmNydGMsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2Uu ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsK LQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRl bXAsIGksIGo7Ci0KLQkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9s b2NrIGFuZCBiaXRfbG9jayBiaXQKLQkgICBmb3IgdHJhaW4gcmVzdWx0ICovCi0JcmVnID0gRkRJ X1JYX0lNUihwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0 ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7Ci0JdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwot CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJGRElfUlhfSUlSIGJlZm9yZSBsaW5rIHRyYWluIDB4JXhcbiIsCi0JCSAg ICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBGRElfUlhfSUlSKHBpcGUpKSk7Ci0KLQkvKiBUcnkg ZWFjaCB2c3dpbmcgYW5kIHByZWVtcGhhc2lzIHNldHRpbmcgdHdpY2UgYmVmb3JlIG1vdmluZyBv biAqLwotCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNuYl9iX2ZkaV90cmFpbl9wYXJhbSkg KiAyOyBqKyspIHsKLQkJLyogZGlzYWJsZSBmaXJzdCBpbiBjYXNlIHdlIG5lZWQgdG8gcmV0cnkg Ki8KLQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfihGRElfTElOS19UUkFJTl9BVVRPIHwgRkRJX0xJTktf VFJBSU5fTk9ORV9JVkIpOwotCQl0ZW1wICY9IH5GRElfVFhfRU5BQkxFOwotCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwot CQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fQVVUTzsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQ VDsKLQkJdGVtcCAmPSB+RkRJX1JYX0VOQUJMRTsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7Ci0KLQkJLyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBGREkgUlggKi8K LQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01BU0s7Ci0JCXRlbXAgfD0g RkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKLQkJdGVtcCB8PSBGRElf TElOS19UUkFJTl9QQVRURVJOXzFfSVZCOwotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xf RU1QX01BU0s7Ci0JCXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ovMl07Ci0JCXRlbXAg fD0gRkRJX0NPTVBPU0lURV9TWU5DOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Ci0KLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9S WF9NSVNDKHBpcGUpLAotCQkJICAgICAgIEZESV9SWF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZE SV9ERUxBWV85MCk7Ci0KLQkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8xX0NQVDsKLQkJdGVtcCB8PSBGRElfQ09NUE9TSVRFX1NZTkM7Ci0JCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKLQotCQlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXVkZWxheSgxKTsgLyogc2hvdWxkIGJlIDAuNXVz ICovCi0KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJcmVnID0gRkRJX1JYX0lJUihw aXBlKTsKLQkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwotCi0JCQlp ZiAodGVtcCAmIEZESV9SWF9CSVRfTE9DSyB8fAotCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9w cml2LCByZWcpICYgRkRJX1JYX0JJVF9MT0NLKSkgewotCQkJCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsCi0JCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsKLQkJCQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLCBsZXZl bCAlaS5cbiIsCi0JCQkJCSAgICBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXVkZWxheSgxKTsg Lyogc2hvdWxkIGJlIDAuNXVzICovCi0JCX0KLQkJaWYgKGkgPT0gNCkgewotCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJGREkgdHJhaW4gMSBmYWlsIG9uIHZzd2luZyAl ZFxuIiwgaiAvIDIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBUcmFpbiAyICovCi0JCXJl ZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKLQkJdGVtcCB8PSBGRElf TElOS19UUkFJTl9QQVRURVJOXzJfSVZCOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wKTsKLQotCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCQl0ZW1wID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9N QVNLX0NQVDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOwotCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCi0K LQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsK LQkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwotCi0JCQlpZiAodGVt cCAmIEZESV9SWF9TWU1CT0xfTE9DSyB8fAotCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWcpICYgRkRJX1JYX1NZTUJPTF9MT0NLKSkgewotCQkJCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsCi0JCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKLQkJCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkJICAgICJGREkgdHJhaW4gMiBkb25lLCBs ZXZlbCAlaS5cbiIsCi0JCQkJCSAgICBpKTsKLQkJCQlnb3RvIHRyYWluX2RvbmU7Ci0JCQl9Ci0J CQl1ZGVsYXkoMik7IC8qIHNob3VsZCBiZSAxLjV1cyAqLwotCQl9Ci0JCWlmIChpID09IDQpCi0J CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIkZESSB0cmFpbiAyIGZhaWwg b24gdnN3aW5nICVkXG4iLCBqIC8gMik7Ci0JfQotCi10cmFpbl9kb25lOgotCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmUuXG4iKTsKLX0KLQotc3RhdGljIHZvaWQg aWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjX3N0YXRlLT51YXBpLmNydGMpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoaW50ZWxfY3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gaW50 ZWxfY3J0Yy0+cGlwZTsKLQlpOTE1X3JlZ190IHJlZzsKLQl1MzIgdGVtcDsKLQotCS8qIGVuYWJs ZSBQQ0ggRkRJIFJYIFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5jeSAqLwotCXJlZyA9 IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdGVtcCAmPSB+KEZESV9EUF9QT1JUX1dJRFRIX01BU0sgfCAoMHg3IDw8IDE2KSk7Ci0JdGVt cCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwotCXRlbXAgfD0g KGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19N QVNLKSA8PCAxMTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JY X1BMTF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwot CXVkZWxheSgyMDApOwotCi0JLyogU3dpdGNoIGZyb20gUmF3Y2xrIHRvIFBDRGNsayAqLwotCXRl bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXAgfCBGRElfUENEQ0xLKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMjAwKTsKLQotCS8qIEVuYWJsZSBDUFUgRkRJIFRYIFBM TCwgYWx3YXlzIG9uIGZvciBJcm9ubGFrZSAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0J dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKCh0ZW1wICYgRkRJX1RY X1BMTF9FTkFCTEUpID09IDApIHsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCB8IEZESV9UWF9QTExfRU5BQkxFKTsKLQotCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIHJlZyk7Ci0JCXVkZWxheSgxMDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaWxrX2ZkaV9w bGxfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gaW50ZWxf Y3J0Yy0+cGlwZTsKLQlpOTE1X3JlZ190IHJlZzsKLQl1MzIgdGVtcDsKLQotCS8qIFN3aXRjaCBm cm9tIFBDRGNsayB0byBSYXdjbGsgKi8KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgJiB+RkRJX1BDRENMSyk7Ci0KLQkvKiBEaXNhYmxlIENQVSBGREkgVFggUExM ICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9U WF9QTExfRU5BQkxFKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsK LQl1ZGVsYXkoMTAwKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCAmIH5GRElfUlhfUExMX0VOQUJMRSk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRv IHR1cm4gb2ZmLiAqLwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1 ZGVsYXkoMTAwKTsKLX0KLQotc3RhdGljIHZvaWQgaWxrX2ZkaV9kaXNhYmxlKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlp OTE1X3JlZ190IHJlZzsKLQl1MzIgdGVtcDsKLQotCS8qIGRpc2FibGUgQ1BVIEZESSB0eCBhbmQg UENIIEZESSByeCAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCAmIH5GRElfVFhfRU5BQkxFKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwotCXRlbXAgJj0gfigweDcgPDwgMTYpOwotCXRlbXAgfD0gKGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAx MTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9SWF9FTkFCTEUp OwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxMDAp OwotCi0JLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZGlzYWJsZSBjbG9jayBwb2ludGVyIGFmdGVy IGRvd25pbmcgRkRJICovCi0JaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSkKLQkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAotCQkJICAgICAgIEZESV9SWF9Q SEFTRV9TWU5DX1BPSU5URVJfT1ZSKTsKLQotCS8qIHN0aWxsIHNldCB0cmFpbiBwYXR0ZXJuIDEg Ki8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElf TElOS19UUkFJTl9QQVRURVJOXzE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwotCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+ RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJ Tl9QQVRURVJOXzFfQ1BUOwotCX0gZWxzZSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05P TkU7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCX0KLQkvKiBCUEMgaW4g RkRJIHJ4IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IGluIFBJUEVDT05GICovCi0JdGVtcCAmPSB+ KDB4MDcgPDwgMTYpOwotCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05G KHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKLQl1ZGVsYXkoMTAwKTsKLX0KLQogYm9vbCBpbnRlbF9oYXNfcGVuZGluZ19mYl91bnBpbihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGRybV9jcnRjICpj cnRjOwpAQCAtNjYzOSwxNDMgKzYxMDQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9jb25uZWN0b3Jf dmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCX0KIH0K IAotc3RhdGljIGludCBwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlpZiAoY3J0Y19zdGF0ZS0+aHcuZW5hYmxlICYmIGNydGNf c3RhdGUtPmhhc19wY2hfZW5jb2RlcikKLQkJcmV0dXJuIGNydGNfc3RhdGUtPmZkaV9sYW5lczsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlsa19jaGVja19mZGlfbGFuZXMoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUsCi0JCQkgICAgICAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUg PSBwaXBlX2NvbmZpZy0+dWFwaS5zdGF0ZTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqb3RoZXJfY3J0 YzsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb3RoZXJfY3J0Y19zdGF0ZTsKLQotCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkgICAgImNoZWNraW5nIGZkaSBjb25maWcgb24gcGlw ZSAlYywgbGFuZXMgJWlcbiIsCi0JCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5m ZGlfbGFuZXMpOwotCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gNCkgewotCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiaW52YWxpZCBmZGkgbGFuZSBjb25maWcgb24g cGlwZSAlYzogJWkgbGFuZXNcbiIsCi0JCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZp Zy0+ZmRpX2xhbmVzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKElTX0hBU1dFTEwo ZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsKLQkJaWYgKHBpcGVfY29uZmln LT5mZGlfbGFuZXMgPiAyKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkg ICAgIm9ubHkgMiBsYW5lcyBvbiBoYXN3ZWxsLCByZXF1aXJlZDogJWkgbGFuZXNcbiIsCi0JCQkJ ICAgIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxz ZSB7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWlmIChJTlRFTF9OVU1fUElQRVMoZGV2X3By aXYpID09IDIpCi0JCXJldHVybiAwOwotCi0JLyogSXZ5YnJpZGdlIDMgcGlwZSBpcyByZWFsbHkg Y29tcGxpY2F0ZWQgKi8KLQlzd2l0Y2ggKHBpcGUpIHsKLQljYXNlIFBJUEVfQToKLQkJcmV0dXJu IDA7Ci0JY2FzZSBQSVBFX0I6Ci0JCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzIDw9IDIpCi0J CQlyZXR1cm4gMDsKLQotCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2 X3ByaXYsIFBJUEVfQyk7Ci0JCW90aGVyX2NydGNfc3RhdGUgPQotCQkJaW50ZWxfYXRvbWljX2dl dF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKLQkJaWYgKElTX0VSUihvdGhlcl9jcnRj X3N0YXRlKSkKLQkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3RhdGUpOwotCi0JCWlmIChw aXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDApIHsKLQkJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiaW52YWxpZCBzaGFyZWQgZmRpIGxhbmUg Y29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAotCQkJCSAgICBwaXBlX25hbWUocGlwZSks IHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmV0 dXJuIDA7Ci0JY2FzZSBQSVBFX0M6Ci0JCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikg ewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJvbmx5IDIgbGFuZXMg b24gcGlwZSAlYzogcmVxdWlyZWQgJWkgbGFuZXNcbiIsCi0JCQkJICAgIHBpcGVfbmFtZShwaXBl KSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0J CW90aGVyX2NydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgUElQRV9CKTsK LQkJb3RoZXJfY3J0Y19zdGF0ZSA9Ci0JCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh dGUsIG90aGVyX2NydGMpOwotCQlpZiAoSVNfRVJSKG90aGVyX2NydGNfc3RhdGUpKQotCQkJcmV0 dXJuIFBUUl9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7Ci0KLQkJaWYgKHBpcGVfcmVxdWlyZWRfZmRp X2xhbmVzKG90aGVyX2NydGNfc3RhdGUpID4gMikgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCi0JCQkJICAgICJmZGkgbGluayBCIHVzZXMgdG9vIG1hbnkgbGFuZXMgdG8gZW5hYmxl IGxpbmsgQ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZh dWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLSNkZWZpbmUgUkVUUlkgMQotc3RhdGljIGludCBpbGtf ZmRpX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAotCQkJCSAg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq YWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZTsKLQlpbnQgbGFu ZSwgbGlua19idywgZmRpX2RvdGNsb2NrLCByZXQ7Ci0JYm9vbCBuZWVkc19yZWNvbXB1dGUgPSBm YWxzZTsKLQotcmV0cnk6Ci0JLyogRkRJIGlzIGEgYmluYXJ5IHNpZ25hbCBydW5uaW5nIGF0IH4y LjdHSHosIGVuY29kaW5nCi0JICogZWFjaCBvdXRwdXQgb2N0ZXQgYXMgMTAgYml0cy4gVGhlIGFj dHVhbCBmcmVxdWVuY3kKLQkgKiBpcyBzdG9yZWQgYXMgYSBkaXZpZGVyIGludG8gYSAxMDBNSHog Y2xvY2ssIGFuZCB0aGUKLQkgKiBtb2RlIHBpeGVsIGNsb2NrIGlzIHN0b3JlZCBpbiB1bml0cyBv ZiAxS0h6LgotCSAqIEhlbmNlIHRoZSBidyBvZiBlYWNoIGxhbmUgaW4gdGVybXMgb2YgdGhlIG1v ZGUgc2lnbmFsCi0JICogaXM6Ci0JICovCi0JbGlua19idyA9IGludGVsX2ZkaV9saW5rX2ZyZXEo aTkxNSwgcGlwZV9jb25maWcpOwotCi0JZmRpX2RvdGNsb2NrID0gYWRqdXN0ZWRfbW9kZS0+Y3J0 Y19jbG9jazsKLQotCWxhbmUgPSBpbGtfZ2V0X2xhbmVzX3JlcXVpcmVkKGZkaV9kb3RjbG9jaywg bGlua19idywKLQkJCQkgICAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHApOwotCi0JcGlwZV9jb25m aWctPmZkaV9sYW5lcyA9IGxhbmU7Ci0KLQlpbnRlbF9saW5rX2NvbXB1dGVfbV9uKHBpcGVfY29u ZmlnLT5waXBlX2JwcCwgbGFuZSwgZmRpX2RvdGNsb2NrLAotCQkJICAgICAgIGxpbmtfYncsICZw aXBlX2NvbmZpZy0+ZmRpX21fbiwgZmFsc2UsIGZhbHNlKTsKLQotCXJldCA9IGlsa19jaGVja19m ZGlfbGFuZXMoZGV2LCBpbnRlbF9jcnRjLT5waXBlLCBwaXBlX2NvbmZpZyk7Ci0JaWYgKHJldCA9 PSAtRURFQURMSykKLQkJcmV0dXJuIHJldDsKLQotCWlmIChyZXQgPT0gLUVJTlZBTCAmJiBwaXBl X2NvbmZpZy0+cGlwZV9icHAgPiA2KjMpIHsKLQkJcGlwZV9jb25maWctPnBpcGVfYnBwIC09IDIq MzsKLQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKLQkJCSAgICAiZmRpIGxpbmsgYncgY29uc3Ry YWludCwgcmVkdWNpbmcgcGlwZSBicHAgdG8gJWlcbiIsCi0JCQkgICAgcGlwZV9jb25maWctPnBp cGVfYnBwKTsKLQkJbmVlZHNfcmVjb21wdXRlID0gdHJ1ZTsKLQkJcGlwZV9jb25maWctPmJ3X2Nv bnN0cmFpbmVkID0gdHJ1ZTsKLQotCQlnb3RvIHJldHJ5OwotCX0KLQotCWlmIChuZWVkc19yZWNv bXB1dGUpCi0JCXJldHVybiBSRVRSWTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIGJvb2wgaHN3X2Ny dGNfc3RhdGVfaXBzX2NhcGFibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCiB7CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNf c3RhdGUtPnVhcGkuY3J0Yyk7CkBAIC0xMTMwMiw3ICsxMDYzMCw3IEBAIGludGVsX21vZGVzZXRf cGlwZV9jb25maWcoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCXJldHVybiBy ZXQ7CiAJfQogCi0JaWYgKHJldCA9PSBSRVRSWSkgeworCWlmIChyZXQgPT0gSTkxNV9ESVNQTEFZ X0NPTkZJR19SRVRSWSkgewogCQlpZiAoZHJtX1dBUk4oJmk5MTUtPmRybSwgIXJldHJ5LAogCQkJ ICAgICAibG9vcCBpbiBwaXBlIGNvbmZpZ3VyYXRpb24gY29tcHV0YXRpb25cbiIpKQogCQkJcmV0 dXJuIC1FSU5WQUw7CkBAIC0xNTEwMSwxNCArMTQ0MjksNyBAQCB2b2lkIGludGVsX2luaXRfZGlz cGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2 LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwogCX0KIAotCWlmIChJ U19HRU4oZGV2X3ByaXYsIDUpKSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWlu ID0gaWxrX2ZkaV9saW5rX3RyYWluOwotCX0gZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkg ewotCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGdlbjZfZmRpX2xpbmtfdHJh aW47Ci0JfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7Ci0JCS8qIEZJWE1FOiBk ZXRlY3QgQjArIHN0ZXBwaW5nIGFuZCB1c2UgYXV0byB0cmFpbmluZyAqLwotCQlkZXZfcHJpdi0+ ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW47Ci0JfQor CWludGVsX2ZkaV9pbml0X2hvb2soZGV2X3ByaXYpOwogCiAJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOSkgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5jb21taXRfbW9kZXNldF9lbmFibGVzID0g c2tsX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCmluZGV4IDM3YTlmMzA0Y2I1NS4uNDRhMjgz NjNmMzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXlfdHlwZXMuaApAQCAtMTgyNCw0ICsxODI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIGk5 eHhfZHBsbF9jb21wdXRlX2ZwKHN0cnVjdCBkcGxsICpkcGxsKQogCXJldHVybiBkcGxsLT5uIDw8 IDE2IHwgZHBsbC0+bTEgPDwgOCB8IGRwbGwtPm0yOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBp bnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJ aWYgKEhBU19EREkoZGV2X3ByaXYpKQorCQlyZXR1cm4gcGlwZV9jb25maWctPnBvcnRfY2xvY2s7 IC8qIFNQTEwgKi8KKwllbHNlCisJCXJldHVybiBkZXZfcHJpdi0+ZmRpX3BsbF9mcmVxOworfQor CiAjZW5kaWYgLyogIF9fSU5URUxfRElTUExBWV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYjJlYjk2YWUxMGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwpAQCAtMCwwICsxLDY4MyBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBv cmF0aW9uCisgKi8KKyNpbmNsdWRlICJpbnRlbF9hdG9taWMuaCIKKyNpbmNsdWRlICJpbnRlbF9k aXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfZmRpLmgiCisKKy8qIHVuaXRzIG9mIDEw ME1IeiAqLworc3RhdGljIGludCBwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlpZiAoY3J0Y19zdGF0ZS0+aHcuZW5hYmxlICYm IGNydGNfc3RhdGUtPmhhc19wY2hfZW5jb2RlcikKKwkJcmV0dXJuIGNydGNfc3RhdGUtPmZkaV9s YW5lczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlsa19jaGVja19mZGlfbGFuZXMo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUsCisJCQkgICAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUgPSBwaXBlX2NvbmZpZy0+dWFwaS5zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqb3Ro ZXJfY3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb3RoZXJfY3J0Y19zdGF0ZTsKKwor CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkgICAgImNoZWNraW5nIGZkaSBjb25maWcg b24gcGlwZSAlYywgbGFuZXMgJWlcbiIsCisJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29u ZmlnLT5mZGlfbGFuZXMpOworCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gNCkgeworCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiaW52YWxpZCBmZGkgbGFuZSBjb25m aWcgb24gcGlwZSAlYzogJWkgbGFuZXNcbiIsCisJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBl X2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKElTX0hB U1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsKKwkJaWYgKHBpcGVf Y29uZmlnLT5mZGlfbGFuZXMgPiAyKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJCQkgICAgIm9ubHkgMiBsYW5lcyBvbiBoYXN3ZWxsLCByZXF1aXJlZDogJWkgbGFuZXNcbiIs CisJCQkJICAgIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChJTlRFTF9OVU1fUElQRVMo ZGV2X3ByaXYpID09IDIpCisJCXJldHVybiAwOworCisJLyogSXZ5YnJpZGdlIDMgcGlwZSBpcyBy ZWFsbHkgY29tcGxpY2F0ZWQgKi8KKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIFBJUEVfQToKKwkJ cmV0dXJuIDA7CisJY2FzZSBQSVBFX0I6CisJCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzIDw9 IDIpCisJCQlyZXR1cm4gMDsKKworCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3Bp cGUoZGV2X3ByaXYsIFBJUEVfQyk7CisJCW90aGVyX2NydGNfc3RhdGUgPQorCQkJaW50ZWxfYXRv bWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKKwkJaWYgKElTX0VSUihvdGhl cl9jcnRjX3N0YXRlKSkKKwkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3RhdGUpOworCisJ CWlmIChwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDApIHsKKwkJ CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiaW52YWxpZCBzaGFyZWQgZmRp IGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAorCQkJCSAgICBwaXBlX25hbWUo cGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0K KwkJcmV0dXJuIDA7CisJY2FzZSBQSVBFX0M6CisJCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVz ID4gMikgeworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJvbmx5IDIg bGFuZXMgb24gcGlwZSAlYzogcmVxdWlyZWQgJWkgbGFuZXNcbiIsCisJCQkJICAgIHBpcGVfbmFt ZShwaXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ fQorCisJCW90aGVyX2NydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgUElQ RV9CKTsKKwkJb3RoZXJfY3J0Y19zdGF0ZSA9CisJCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3Rh dGUoc3RhdGUsIG90aGVyX2NydGMpOworCQlpZiAoSVNfRVJSKG90aGVyX2NydGNfc3RhdGUpKQor CQkJcmV0dXJuIFBUUl9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7CisKKwkJaWYgKHBpcGVfcmVxdWly ZWRfZmRpX2xhbmVzKG90aGVyX2NydGNfc3RhdGUpID4gMikgeworCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCisJCQkJICAgICJmZGkgbGluayBCIHVzZXMgdG9vIG1hbnkgbGFuZXMgdG8g ZW5hYmxlIGxpbmsgQ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gMDsK KwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK2ludCBpbGtfZmRpX2NvbXB1dGVfY29uZmln KHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAorCQkJCSAgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9j cnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZw aXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZTsKKwlpbnQgbGFuZSwgbGlua19idywgZmRpX2Rv dGNsb2NrLCByZXQ7CisJYm9vbCBuZWVkc19yZWNvbXB1dGUgPSBmYWxzZTsKKworcmV0cnk6CisJ LyogRkRJIGlzIGEgYmluYXJ5IHNpZ25hbCBydW5uaW5nIGF0IH4yLjdHSHosIGVuY29kaW5nCisJ ICogZWFjaCBvdXRwdXQgb2N0ZXQgYXMgMTAgYml0cy4gVGhlIGFjdHVhbCBmcmVxdWVuY3kKKwkg KiBpcyBzdG9yZWQgYXMgYSBkaXZpZGVyIGludG8gYSAxMDBNSHogY2xvY2ssIGFuZCB0aGUKKwkg KiBtb2RlIHBpeGVsIGNsb2NrIGlzIHN0b3JlZCBpbiB1bml0cyBvZiAxS0h6LgorCSAqIEhlbmNl IHRoZSBidyBvZiBlYWNoIGxhbmUgaW4gdGVybXMgb2YgdGhlIG1vZGUgc2lnbmFsCisJICogaXM6 CisJICovCisJbGlua19idyA9IGludGVsX2ZkaV9saW5rX2ZyZXEoaTkxNSwgcGlwZV9jb25maWcp OworCisJZmRpX2RvdGNsb2NrID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19jbG9jazsKKworCWxhbmUg PSBpbGtfZ2V0X2xhbmVzX3JlcXVpcmVkKGZkaV9kb3RjbG9jaywgbGlua19idywKKwkJCQkgICAg ICBwaXBlX2NvbmZpZy0+cGlwZV9icHApOworCisJcGlwZV9jb25maWctPmZkaV9sYW5lcyA9IGxh bmU7CisKKwlpbnRlbF9saW5rX2NvbXB1dGVfbV9uKHBpcGVfY29uZmlnLT5waXBlX2JwcCwgbGFu ZSwgZmRpX2RvdGNsb2NrLAorCQkJICAgICAgIGxpbmtfYncsICZwaXBlX2NvbmZpZy0+ZmRpX21f biwgZmFsc2UsIGZhbHNlKTsKKworCXJldCA9IGlsa19jaGVja19mZGlfbGFuZXMoZGV2LCBpbnRl bF9jcnRjLT5waXBlLCBwaXBlX2NvbmZpZyk7CisJaWYgKHJldCA9PSAtRURFQURMSykKKwkJcmV0 dXJuIHJldDsKKworCWlmIChyZXQgPT0gLUVJTlZBTCAmJiBwaXBlX2NvbmZpZy0+cGlwZV9icHAg PiA2KjMpIHsKKwkJcGlwZV9jb25maWctPnBpcGVfYnBwIC09IDIqMzsKKwkJZHJtX2RiZ19rbXMo Jmk5MTUtPmRybSwKKwkJCSAgICAiZmRpIGxpbmsgYncgY29uc3RyYWludCwgcmVkdWNpbmcgcGlw ZSBicHAgdG8gJWlcbiIsCisJCQkgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKKwkJbmVlZHNf cmVjb21wdXRlID0gdHJ1ZTsKKwkJcGlwZV9jb25maWctPmJ3X2NvbnN0cmFpbmVkID0gdHJ1ZTsK KworCQlnb3RvIHJldHJ5OworCX0KKworCWlmIChuZWVkc19yZWNvbXB1dGUpCisJCXJldHVybiBJ OTE1X0RJU1BMQVlfQ09ORklHX1JFVFJZOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpbnRl bF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBl OworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wOworCisJLyogZW5hYmxlIG5vcm1hbCB0cmFp biAqLworCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+ RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORV9J VkIgfCBGRElfVFhfRU5IQU5DRV9GUkFNRV9FTkFCTEU7CisJfSBlbHNlIHsKKwkJdGVtcCAmPSB+ RkRJX0xJTktfVFJBSU5fTk9ORTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FIHwgRkRJ X1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wKTsKKworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgeworCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOworCQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX05PUk1BTF9DUFQ7CisJfSBlbHNlIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fTk9ORTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FOworCX0KKwlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFKTsK KworCS8qIHdhaXQgb25lIGlkbGUgcGF0dGVybiB0aW1lICovCisJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxMDAwKTsKKworCS8qIElWQiB3YW50cyBlcnJv ciBjb3JyZWN0aW9uIGVuYWJsZWQgKi8KKwlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKKwkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKKwkJCSAgICAgICBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpIHwgRkRJX0ZTX0VSUkNfRU5BQkxFIHwgRkRJX0ZFX0VSUkNfRU5BQkxFKTsK K30KKworLyogVGhlIEZESSBsaW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgSUxLL0liZXhwZWFr LiAqLworc3RhdGljIHZvaWQgaWxrX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBp cGUgPSBjcnRjLT5waXBlOworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wLCB0cmllczsKKwor CS8qIEZESSBuZWVkcyBiaXRzIGZyb20gcGlwZSBmaXJzdCAqLworCWFzc2VydF9waXBlX2VuYWJs ZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKKworCS8qIFRyYWluIDE6 IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAorCSAg IGZvciB0cmFpbiByZXN1bHQgKi8KKwlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOworCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9D SzsKKwl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7CisJaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUw KTsKKworCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCisJcmVnID0gRkRJ X1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0 ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9NQVNLOworCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lE VEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05F OworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOworCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxFKTsKKworCXJlZyA9IEZESV9SWF9DVEwo cGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+ RkRJX0xJTktfVFJBSU5fTk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsK KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7CisK KwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDE1MCk7CisK KwkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBlbmFibGUgY2xvY2sgcG9pbnRlciBhZnRlciBGREkg ZW5hYmxlKi8KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4ocGlwZSks CisJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7CisJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAorCQkgICAgICAgRkRJX1JYX1BIQVNF X1NZTkNfUE9JTlRFUl9PVlIgfCBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX0VOKTsKKworCXJl ZyA9IEZESV9SWF9JSVIocGlwZSk7CisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTsgdHJpZXMr KykgeworCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOworCisJCWlmICgo dGVtcCAmIEZESV9SWF9CSVRfTE9DSykpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRkRJIHRyYWluIDEgZG9uZS5cbiIpOworCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodHJp ZXMgPT0gNSkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZhaWwhXG4i KTsKKworCS8qIFRyYWluIDIgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05P TkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7CisJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X05PTkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7CisJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIHJlZyk7CisJdWRlbGF5KDE1MCk7CisKKwlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCWZv ciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKKwkJdGVtcCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZyk7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JY X0lJUiAweCV4XG4iLCB0ZW1wKTsKKworCQlpZiAodGVtcCAmIEZESV9SWF9TWU1CT0xfTE9DSykg eworCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKKwkJCQkgICAgICAgdGVtcCB8IEZE SV9SWF9TWU1CT0xfTE9DSyk7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0 cmFpbiAyIGRvbmUuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh0cmllcyA9PSA1KQor CQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIpOworCisJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gZG9uZVxuIik7CisKK30KKworc3Rh dGljIGNvbnN0IGludCBzbmJfYl9mZGlfdHJhaW5fcGFyYW1bXSA9IHsKKwlGRElfTElOS19UUkFJ Tl80MDBNVl8wREJfU05CX0IsCisJRkRJX0xJTktfVFJBSU5fNDAwTVZfNkRCX1NOQl9CLAorCUZE SV9MSU5LX1RSQUlOXzYwME1WXzNfNURCX1NOQl9CLAorCUZESV9MSU5LX1RSQUlOXzgwME1WXzBE Ql9TTkJfQiwKK307CisKKy8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMgZm9yIFNO Qi9Db3VnYXJwb2ludC4gKi8KK3N0YXRpYyB2b2lkIGdlbjZfZmRpX2xpbmtfdHJhaW4oc3RydWN0 IGludGVsX2NydGMgKmNydGMsCisJCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwllbnVt IHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaTkxNV9yZWdfdCByZWc7CisJdTMyIHRlbXAsIGks IHJldHJ5OworCisJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9j ayBhbmQgYml0X2xvY2sgYml0CisJICAgZm9yIHRyYWluIHJlc3VsdCAqLworCXJlZyA9IEZESV9S WF9JTVIocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVt cCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOworCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKKwlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKworCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKworCS8qIGVuYWJsZSBDUFUgRkRJ IFRYIGFuZCBQQ0ggRkRJIFJYICovCisJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURU SF9NQVNLOworCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVz KTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJB SU5fUEFUVEVSTl8xOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKKwkv KiBTTkItQiAqLworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxFKTsKKworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKKwkJICAgICAgIEZESV9S WF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZESV9ERUxBWV85MCk7CisKKwlyZWcgPSBGRElfUlhf Q1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChI QVNfUENIX0NQVChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVS Tl9NQVNLX0NQVDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOworCX0g ZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJ TktfVFJBSU5fUEFUVEVSTl8xOworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wIHwgRkRJX1JYX0VOQUJMRSk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IHJlZyk7CisJdWRlbGF5KDE1MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJl ZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7CisJCXRlbXAgfD0g c25iX2JfZmRpX3RyYWluX3BhcmFtW2ldOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wKTsKKworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXVk ZWxheSg1MDApOworCisJCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5KyspIHsKKwkJ CXJlZyA9IEZESV9SWF9JSVIocGlwZSk7CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4 XG4iLCB0ZW1wKTsKKwkJCWlmICh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLKSB7CisJCQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKKwkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfQklUX0xP Q0spOworCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCQkgICAgIkZESSB0cmFp biAxIGRvbmUuXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSg1MCk7CisJCX0KKwkJ aWYgKHJldHJ5IDwgNSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSA0KQorCQlkcm1fZXJyKCZk ZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOworCisJLyogVHJhaW4gMiAqLwor CXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7CisJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5L X1RSQUlOX1BBVFRFUk5fMjsKKwlpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkgeworCQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7CisJCS8qIFNOQi1CICovCisJCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9COworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKKworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkg eworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOworCQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMl9DUFQ7CisJfSBlbHNlIHsKKwkJdGVtcCAmPSB+RkRJ X0xJTktfVFJBSU5fTk9ORTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7CisJ fQorCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJaW50ZWxfZGVfcG9z dGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJZm9yIChpID0gMDsg aSA8IDQ7IGkrKykgeworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VN UF9NQVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKKwkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCQl1ZGVsYXkoNTAwKTsKKworCQlmb3IgKHJldHJ5ID0gMDsgcmV0cnkg PCA1OyByZXRyeSsrKSB7CisJCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCQkJdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisJCQlpZiAodGVtcCAmIEZESV9SWF9TWU1C T0xfTE9DSykgeworCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkJCSAgICAg ICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKKwkJCQkJICAgICJGREkgdHJhaW4gMiBkb25lLlxuIik7CisJCQkJYnJlYWs7CisJCQl9 CisJCQl1ZGVsYXkoNTApOworCQl9CisJCWlmIChyZXRyeSA8IDUpCisJCQlicmVhazsKKwl9CisJ aWYgKGkgPT0gNCkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwh XG4iKTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmUuXG4i KTsKK30KKworLyogTWFudWFsIGxpbmsgdHJhaW5pbmcgZm9yIEl2eSBCcmlkZ2UgQTAgcGFydHMg Ki8KK3N0YXRpYyB2b2lkIGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2Ny dGMgKmNydGMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2OworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaTkxNV9yZWdfdCByZWc7CisJdTMyIHRlbXAsIGksIGo7 CisKKwkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBi aXRfbG9jayBiaXQKKwkgICBmb3IgdHJhaW4gcmVzdWx0ICovCisJcmVnID0gRkRJX1JYX0lNUihw aXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5G RElfUlhfU1lNQk9MX0xPQ0s7CisJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOworCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sICJGRElfUlhfSUlSIGJlZm9yZSBsaW5rIHRyYWluIDB4JXhcbiIsCisJCSAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBGRElfUlhfSUlSKHBpcGUpKSk7CisKKwkvKiBUcnkgZWFjaCB2c3dp bmcgYW5kIHByZWVtcGhhc2lzIHNldHRpbmcgdHdpY2UgYmVmb3JlIG1vdmluZyBvbiAqLworCWZv ciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNuYl9iX2ZkaV90cmFpbl9wYXJhbSkgKiAyOyBqKysp IHsKKwkJLyogZGlzYWJsZSBmaXJzdCBpbiBjYXNlIHdlIG5lZWQgdG8gcmV0cnkgKi8KKwkJcmVn ID0gRkRJX1RYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7CisJCXRlbXAgJj0gfihGRElfTElOS19UUkFJTl9BVVRPIHwgRkRJX0xJTktfVFJBSU5fTk9O RV9JVkIpOworCQl0ZW1wICY9IH5GRElfVFhfRU5BQkxFOworCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKKworCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCQl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f QVVUTzsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKKwkJdGVt cCAmPSB+RkRJX1JYX0VOQUJMRTsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCk7CisKKwkJLyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBGREkgUlggKi8KKwkJcmVnID0g RkRJX1RYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01BU0s7CisJCXRlbXAgfD0gRkRJX0RQX1BP UlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJ Tl9QQVRURVJOXzFfSVZCOworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7 CisJCXRlbXAgfD0gc25iX2JfZmRpX3RyYWluX3BhcmFtW2ovMl07CisJCXRlbXAgfD0gRkRJX0NP TVBPU0lURV9TWU5DOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJ X1RYX0VOQUJMRSk7CisKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9NSVNDKHBp cGUpLAorCQkJICAgICAgIEZESV9SWF9UUDFfVE9fVFAyXzQ4IHwgRkRJX1JYX0ZESV9ERUxBWV85 MCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsK KwkJdGVtcCB8PSBGRElfQ09NUE9TSVRFX1NZTkM7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKKworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJCXVkZWxheSgxKTsgLyogc2hvdWxkIGJlIDAuNXVzICovCisKKwkJ Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKKwkJ CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOworCisJCQlpZiAodGVtcCAm IEZESV9SWF9CSVRfTE9DSyB8fAorCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp ICYgRkRJX1JYX0JJVF9MT0NLKSkgeworCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs CisJCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsKKwkJCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKKwkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLCBsZXZlbCAlaS5cbiIs CisJCQkJCSAgICBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgxKTsgLyogc2hvdWxk IGJlIDAuNXVzICovCisJCX0KKwkJaWYgKGkgPT0gNCkgeworCQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCisJCQkJICAgICJGREkgdHJhaW4gMSBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAv IDIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUcmFpbiAyICovCisJCXJlZyA9IEZESV9U WF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FX0lWQjsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJ Tl9QQVRURVJOXzJfSVZCOworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsK KworCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsK KwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOworCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIHJlZyk7CisJCXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCisKKwkJZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykgeworCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKKwkJCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOworCisJCQlpZiAodGVtcCAmIEZESV9S WF9TWU1CT0xfTE9DSyB8fAorCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpICYg RkRJX1JYX1NZTUJPTF9MT0NLKSkgeworCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs CisJCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKKwkJCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKKwkJCQkJICAgICJGREkgdHJhaW4gMiBkb25lLCBsZXZlbCAlaS5c biIsCisJCQkJCSAgICBpKTsKKwkJCQlnb3RvIHRyYWluX2RvbmU7CisJCQl9CisJCQl1ZGVsYXko Mik7IC8qIHNob3VsZCBiZSAxLjV1cyAqLworCQl9CisJCWlmIChpID09IDQpCisJCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgIkZESSB0cmFpbiAyIGZhaWwgb24gdnN3aW5n ICVkXG4iLCBqIC8gMik7CisJfQorCit0cmFpbl9kb25lOgorCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLCAiRkRJIHRyYWluIGRvbmUuXG4iKTsKK30KKwordm9pZCBpbGtfZmRpX3BsbF9lbmFi bGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0 IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGku Y3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRl bF9jcnRjLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwor CWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wOworCisJLyogZW5hYmxlIFBDSCBGREkgUlggUExM LCB3YWl0IHdhcm11cCBwbHVzIERNSSBsYXRlbmN5ICovCisJcmVnID0gRkRJX1JYX0NUTChwaXBl KTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH4oRkRJ X0RQX1BPUlRfV0lEVEhfTUFTSyB8ICgweDcgPDwgMTYpKTsKKwl0ZW1wIHw9IEZESV9EUF9QT1JU X1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJdGVtcCB8PSAoaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfUExMX0VOQUJMRSk7CisK KwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDIwMCk7CisK KwkvKiBTd2l0Y2ggZnJvbSBSYXdjbGsgdG8gUENEY2xrICovCisJdGVtcCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZyk7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8 IEZESV9QQ0RDTEspOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwor CXVkZWxheSgyMDApOworCisJLyogRW5hYmxlIENQVSBGREkgVFggUExMLCBhbHdheXMgb24gZm9y IElyb25sYWtlICovCisJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKTsKKwlpZiAoKHRlbXAgJiBGRElfVFhfUExMX0VOQUJMRSkgPT0g MCkgeworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX1BMTF9F TkFCTEUpOworCisJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdWRl bGF5KDEwMCk7CisJfQorfQorCit2b2lkIGlsa19mZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2Ny dGMtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJaTkxNV9yZWdf dCByZWc7CisJdTMyIHRlbXA7CisKKwkvKiBTd2l0Y2ggZnJvbSBQQ0RjbGsgdG8gUmF3Y2xrICov CisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9QQ0RD TEspOworCisJLyogRGlzYWJsZSBDUFUgRkRJIFRYIFBMTCAqLworCXJlZyA9IEZESV9UWF9DVEwo cGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfVFhfUExMX0VOQUJMRSk7CisKKwlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDEwMCk7CisKKwlyZWcg PSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp OworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1JYX1BMTF9FTkFC TEUpOworCisJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KKwlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDEwMCk7Cit9CisKK3ZvaWQg aWxrX2ZkaV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0g cGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsKKwor CS8qIGRpc2FibGUgQ1BVIEZESSB0eCBhbmQgUENIIEZESSByeCAqLworCXJlZyA9IEZESV9UWF9D VEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfVFhfRU5BQkxFKTsKKwlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUp OworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfigweDcg PDwgMTYpOworCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUp KSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wICYgfkZESV9SWF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCXVkZWxheSgxMDApOworCisJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwg ZGlzYWJsZSBjbG9jayBwb2ludGVyIGFmdGVyIGRvd25pbmcgRkRJICovCisJaWYgKEhBU19QQ0hf SUJYKGRldl9wcml2KSkKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VO KHBpcGUpLAorCQkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSKTsKKworCS8q IHN0aWxsIHNldCB0cmFpbiBwYXR0ZXJuIDEgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwor CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX05PTkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUp OworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChIQVNfUENIX0NQ VChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQ VDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOworCX0gZWxzZSB7CisJ CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8xOworCX0KKwkvKiBCUEMgaW4gRkRJIHJ4IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0 IGluIFBJUEVDT05GICovCisJdGVtcCAmPSB+KDB4MDcgPDwgMTYpOworCXRlbXAgfD0gKGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8 PCAxMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKworCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAwKTsKK30KKwordm9pZAor aW50ZWxfZmRpX2luaXRfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7 CisJaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpIHsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xp bmtfdHJhaW4gPSBpbGtfZmRpX2xpbmtfdHJhaW47CisJfSBlbHNlIGlmIChJU19HRU4oZGV2X3By aXYsIDYpKSB7CisJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gZ2VuNl9mZGlf bGlua190cmFpbjsKKwl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKKwkJLyog RklYTUU6IGRldGVjdCBCMCsgc3RlcHBpbmcgYW5kIHVzZSBhdXRvIHRyYWluaW5nICovCisJCWRl dl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaXZiX21hbnVhbF9mZGlfbGlua190cmFp bjsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2ZkaS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE5Y2QyMTY2M2ViOAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmgKQEAgLTAs MCArMSwyMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfSU5URUxf RkRJX0hfCisjZGVmaW5lIF9JTlRFTF9GRElfSF8KKworc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7 CitzdHJ1Y3QgaW50ZWxfY3J0YzsKK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOworCisjZGVmaW5l IEk5MTVfRElTUExBWV9DT05GSUdfUkVUUlkgMQoraW50IGlsa19mZGlfY29tcHV0ZV9jb25maWco c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCisJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcpOwordm9pZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKTsKK3ZvaWQgaWxrX2ZkaV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKTsKK3ZvaWQgaWxrX2ZkaV9wbGxfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0Yyk7Cit2b2lkIGlsa19mZGlfcGxsX2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cit2b2lkIGludGVsX2ZkaV9pbml0X2hvb2soc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworI2VuZGlmCi0tIAoyLjI3LjAKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=