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 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 58E56C433FE for ; Wed, 9 Dec 2020 04:22:02 +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 193B52389E for ; Wed, 9 Dec 2020 04:22:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 193B52389E 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 4BC7F6E0EB; Wed, 9 Dec 2020 04:22:00 +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 B938889C18 for ; Wed, 9 Dec 2020 04:21:56 +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-396-cM8YWg3NOvCnRlDzqpdGxw-1; Tue, 08 Dec 2020 23:21:54 -0500 X-MC-Unique: cM8YWg3NOvCnRlDzqpdGxw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2BD26C73A3 for ; Wed, 9 Dec 2020 04:21:53 +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 921445275D for ; Wed, 9 Dec 2020 04:21:52 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 9 Dec 2020 14:21:44 +1000 Message-Id: <20201209042144.2281-5-airlied@gmail.com> In-Reply-To: <20201209042144.2281-1-airlied@gmail.com> References: <20201209042144.2281-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 4/4] 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 YXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCA2ODQgKy0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCAgfCAgMTAgKwogLi4uL2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMgICAgICB8IDY4MiArKysrKysrKysrKysrKysr KwogNSBmaWxlcyBjaGFuZ2VkLCA3MDQgaW5zZXJ0aW9ucygrKSwgNjgyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRp LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDhiMzU3YzIxMmFlMi4uZjc0YjdjMTNmZmJkIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjA2LDYgKzIwNiw3IEBAIGk5MTUteSArPSBcCiAJZGlz cGxheS9pbnRlbF9kcGxsX21nci5vIFwKIAlkaXNwbGF5L2ludGVsX2RzYi5vIFwKIAlkaXNwbGF5 L2ludGVsX2ZiYy5vIFwKKwlkaXNwbGF5L2ludGVsX2ZkaS5vIFwKIAlkaXNwbGF5L2ludGVsX2Zp Zm9fdW5kZXJydW4ubyBcCiAJZGlzcGxheS9pbnRlbF9mcm9udGJ1ZmZlci5vIFwKIAlkaXNwbGF5 L2ludGVsX2dsb2JhbF9zdGF0ZS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKaW5kZXggNzg4YjFkZWY2MWVlLi41MTE5YTAwNDBlMzYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC0xNzAsMTYgKzE3 MCw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jemNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2LT5jemNsa19mcmVxKTsKIH0KIAotLyogdW5pdHMg b2YgMTAwTUh6ICovCi1zdGF0aWMgdTMyIGludGVsX2ZkaV9saW5rX2ZyZXEoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlpZiAoSEFTX0RESShkZXZfcHJpdikpCi0JCXJldHVy biBwaXBlX2NvbmZpZy0+cG9ydF9jbG9jazsgLyogU1BMTCAqLwotCWVsc2UKLQkJcmV0dXJuIGRl dl9wcml2LT5mZGlfcGxsX2ZyZXE7Ci19Ci0KIC8qIFdBIERpc3BsYXkgIzA4Mjc6IEdlbjk6YWxs ICovCiBzdGF0aWMgdm9pZAogc2tsX3dhXzgyNyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIGVudW0gcGlwZSBwaXBlLCBib29sIGVuYWJsZSkKQEAgLTM3NzYsNTMyICszNzY2LDYg QEAgc3RhdGljIHZvaWQgaWNsX3NldF9waXBlX2NoaWNrZW4oc3RydWN0IGludGVsX2NydGMgKmNy dGMpCiAJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBJUEVfQ0hJQ0tFTihwaXBlKSwgdG1wKTsK IH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCWVudW0g cGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlpOTE1X3JlZ190IHJlZzsKLQl1MzIgdGVtcDsKLQot CS8qIGVuYWJsZSBub3JtYWwgdHJhaW4gKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRl bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWlmIChJU19JVllCUklER0UoZGV2 X3ByaXYpKSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOwotCQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOwot CX0gZWxzZSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JCXRlbXAgfD0gRkRJ X0xJTktfVFJBSU5fTk9ORSB8IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKLQl9Ci0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBp cGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWlmIChIQVNfUENI X0NQVChkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNL X0NQVDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT1JNQUxfQ1BUOwotCX0gZWxzZSB7Ci0J CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f Tk9ORTsKLQl9Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9F TkhBTkNFX0ZSQU1FX0VOQUJMRSk7Ci0KLQkvKiB3YWl0IG9uZSBpZGxlIHBhdHRlcm4gdGltZSAq LwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTAwMCk7 Ci0KLQkvKiBJVkIgd2FudHMgZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCi0JaWYgKElTX0lW WUJSSURHRShkZXZfcHJpdikpCi0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCi0JCSAg ICAgICAgICAgICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZykgfCBGRElfRlNfRVJSQ19F TkFCTEUgfCBGRElfRkVfRVJSQ19FTkFCTEUpOwotfQotCi0vKiBUaGUgRkRJIGxpbmsgdHJhaW5p bmcgZnVuY3Rpb25zIGZvciBJTEsvSWJleHBlYWsuICovCi1zdGF0aWMgdm9pZCBpbGtfZmRpX2xp bmtfdHJhaW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaTkxNV9yZWdf dCByZWc7Ci0JdTMyIHRlbXAsIHRyaWVzOwotCi0JLyogRkRJIG5lZWRzIGJpdHMgZnJvbSBwaXBl IGZpcnN0ICovCi0JYXNzZXJ0X3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1 X3RyYW5zY29kZXIpOwotCi0JLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1i b2xfbG9jayBhbmQgYml0X2xvY2sgYml0Ci0JICAgZm9yIHRyYWluIHJlc3VsdCAqLwotCXJlZyA9 IEZESV9SWF9JTVIocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwotCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9D SzsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQlpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JLyogZW5hYmxlIENQVSBGREkgVFgg YW5kIFBDSCBGREkgUlggKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01B U0s7Ci0JdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwot CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9F TkFCTEUpOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCXRlbXAg fD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGVu YWJsZSBjbG9jayBwb2ludGVyIGFmdGVyIEZESSBlbmFibGUqLwotCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKLQkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5D X1BPSU5URVJfT1ZSKTsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4o cGlwZSksCi0JCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUiB8IEZESV9SWF9Q SEFTRV9TWU5DX1BPSU5URVJfRU4pOwotCi0JcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKLQlmb3Ig KHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysrKSB7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOwotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9J SVIgMHgleFxuIiwgdGVtcCk7Ci0KLQkJaWYgKCh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLKSkgewot CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBkb25lLlxuIik7Ci0J CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsK LQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh0cmllcyA9PSA1KQotCQlkcm1fZXJyKCZkZXZfcHJp di0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwotCi0JLyogVHJhaW4gMiAqLwotCXJlZyA9 IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlO X1BBVFRFUk5fMjsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCXJl ZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX1BBVFRFUk5fMjsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQot CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQot CXJlZyA9IEZESV9SWF9JSVIocGlwZSk7Ci0JZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTsgdHJp ZXMrKykgewotCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwotCi0JCWlm ICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9MT0NLKSB7Ci0JCQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcmVnLAotCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX1NZTUJPTF9MT0NLKTsKLQkJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZG9uZS5cbiIpOwotCQkJYnJlYWs7 Ci0JCX0KLQl9Ci0JaWYgKHRyaWVzID09IDUpCi0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJG REkgdHJhaW4gMiBmYWlsIVxuIik7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZE SSB0cmFpbiBkb25lXG4iKTsKLQotfQotCi1zdGF0aWMgY29uc3QgaW50IHNuYl9iX2ZkaV90cmFp bl9wYXJhbVtdID0gewotCUZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQiwKLQlGRElfTElO S19UUkFJTl80MDBNVl82REJfU05CX0IsCi0JRkRJX0xJTktfVFJBSU5fNjAwTVZfM181REJfU05C X0IsCi0JRkRJX0xJTktfVFJBSU5fODAwTVZfMERCX1NOQl9CLAotfTsKLQotLyogVGhlIEZESSBs aW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgU05CL0NvdWdhcnBvaW50LiAqLwotc3RhdGljIHZv aWQgZ2VuNl9mZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQljb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlp OTE1X3JlZ190IHJlZzsKLQl1MzIgdGVtcCwgaSwgcmV0cnk7Ci0KLQkvKiBUcmFpbiAxOiB1bWFz ayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKLQkgICBmb3Ig dHJhaW4gcmVzdWx0ICovCi0JcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKLQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7Ci0J dGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXApOwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxh eSgxNTApOwotCi0JLyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBGREkgUlggKi8KLQlyZWcg PSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp OwotCXRlbXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01BU0s7Ci0JdGVtcCB8PSBGRElfRFBfUE9S VF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Ci0JdGVtcCAmPSB+RkRJ X0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwotCS8qIFNOQi1CICovCi0JdGVtcCB8PSBGRElfTElO S19UUkFJTl80MDBNVl8wREJfU05CX0I7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCB8IEZESV9UWF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9S WF9NSVNDKHBpcGUpLAotCQkgICAgICAgRkRJX1JYX1RQMV9UT19UUDJfNDggfCBGRElfUlhfRkRJ X0RFTEFZXzkwKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewotCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwotCQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7Ci0JfSBlbHNlIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktf VFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Ci0JfQotCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKLQotCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQotCWZv ciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQkJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RS QUlOX1ZPTF9FTVBfTUFTSzsKLQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07Ci0J CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5KDUwMCk7Ci0KLQkJZm9yIChyZXRyeSA9 IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewotCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKLQkJ CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwotCQkJaWYgKHRlbXAgJiBG RElfUlhfQklUX0xPQ0spIHsKLQkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAotCQkJ CQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Ci0JCQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCi0JCQkJCSAgICAiRkRJIHRyYWluIDEgZG9uZS5cbiIpOwotCQkJCWJyZWFrOwot CQkJfQotCQkJdWRlbGF5KDUwKTsKLQkJfQotCQlpZiAocmV0cnkgPCA1KQotCQkJYnJlYWs7Ci0J fQotCWlmIChpID09IDQpCi0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBm YWlsIVxuIik7Ci0KLQkvKiBUcmFpbiAyICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwotCWlmIChJU19H RU4oZGV2X3ByaXYsIDYpKSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFT SzsKLQkJLyogU05CLUIgKi8KLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl80MDBNVl8wREJfU05C X0I7Ci0JfQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JcmVnID0g RkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK LQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0NQ VDsKLQl9IGVsc2UgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKLQl9Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0J dWRlbGF5KDE1MCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXJlZyA9IEZESV9U WF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Ci0JCXRlbXAgfD0gc25iX2JfZmRp X3RyYWluX3BhcmFtW2ldOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsK LQotCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXVkZWxheSg1MDAp OwotCi0JCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5KyspIHsKLQkJCXJlZyA9IEZE SV9SWF9JSVIocGlwZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK LQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1w KTsKLQkJCWlmICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9MT0NLKSB7Ci0JCQkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywKLQkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0sp OwotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAgIkZESSB0cmFpbiAy IGRvbmUuXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXVkZWxheSg1MCk7Ci0JCX0KLQkJaWYg KHJldHJ5IDwgNSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSA0KQotCQlkcm1fZXJyKCZkZXZf cHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIpOwotCi0JZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sICJGREkgdHJhaW4gZG9uZS5cbiIpOwotfQotCi0vKiBNYW51YWwgbGluayB0cmFp bmluZyBmb3IgSXZ5IEJyaWRnZSBBMCBwYXJ0cyAqLwotc3RhdGljIHZvaWQgaXZiX21hbnVhbF9m ZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCQkgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlpOTE1 X3JlZ190IHJlZzsKLQl1MzIgdGVtcCwgaSwgajsKLQotCS8qIFRyYWluIDE6IHVtYXNrIEZESSBS WCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAotCSAgIGZvciB0cmFpbiBy ZXN1bHQgKi8KLQlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKLQl0ZW1wICY9 IH5GRElfUlhfQklUX0xPQ0s7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7 Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7 Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgYmVmb3JlIGxpbmsg dHJhaW4gMHgleFxuIiwKLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEZESV9SWF9JSVIo cGlwZSkpKTsKLQotCS8qIFRyeSBlYWNoIHZzd2luZyBhbmQgcHJlZW1waGFzaXMgc2V0dGluZyB0 d2ljZSBiZWZvcmUgbW92aW5nIG9uICovCi0JZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc25i X2JfZmRpX3RyYWluX3BhcmFtKSAqIDI7IGorKykgewotCQkvKiBkaXNhYmxlIGZpcnN0IGluIGNh c2Ugd2UgbmVlZCB0byByZXRyeSAqLwotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+KEZESV9MSU5LX1RS QUlOX0FVVE8gfCBGRElfTElOS19UUkFJTl9OT05FX0lWQik7Ci0JCXRlbXAgJj0gfkZESV9UWF9F TkFCTEU7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JCXJlZyA9 IEZESV9SWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp OwotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9BVVRPOwotCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9QQVRURVJOX01BU0tfQ1BUOwotCQl0ZW1wICY9IH5GRElfUlhfRU5BQkxFOwotCQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCQkvKiBlbmFibGUgQ1BVIEZESSBU WCBhbmQgUENIIEZESSBSWCAqLwotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lE VEhfTUFTSzsKLQkJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFu ZXMpOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9JVkI7Ci0JCXRlbXAgJj0g fkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKLQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5f cGFyYW1bai8yXTsKLQkJdGVtcCB8PSBGRElfQ09NUE9TSVRFX1NZTkM7Ci0JCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxFKTsKLQotCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgRkRJX1JYX01JU0MocGlwZSksCi0JCQkgICAgICAgRkRJX1JYX1RQMV9U T19UUDJfNDggfCBGRElfUlhfRkRJX0RFTEFZXzkwKTsKLQotCQlyZWcgPSBGRElfUlhfQ1RMKHBp cGUpOwotCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCB8PSBG RElfTElOS19UUkFJTl9QQVRURVJOXzFfQ1BUOwotCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lO QzsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUp OwotCi0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5KDEp OyAvKiBzaG91bGQgYmUgMC41dXMgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0J CQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwotCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZyk7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgl eFxuIiwgdGVtcCk7Ci0KLQkJCWlmICh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLIHx8Ci0JCQkgICAg KGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZykgJiBGRElfUlhfQklUX0xPQ0spKSB7Ci0JCQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKLQkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhf QklUX0xPQ0spOwotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAgIkZE SSB0cmFpbiAxIGRvbmUsIGxldmVsICVpLlxuIiwKLQkJCQkJICAgIGkpOwotCQkJCWJyZWFrOwot CQkJfQotCQkJdWRlbGF5KDEpOyAvKiBzaG91bGQgYmUgMC41dXMgKi8KLQkJfQotCQlpZiAoaSA9 PSA0KSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIkZESSB0cmFp biAxIGZhaWwgb24gdnN3aW5nICVkXG4iLCBqIC8gMik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0J CS8qIFRyYWluIDIgKi8KLQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVf SVZCOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMl9JVkI7Ci0JCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7 Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMl9DUFQ7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0J CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5KDIpOyAvKiBz aG91bGQgYmUgMS41dXMgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlyZWcg PSBGRElfUlhfSUlSKHBpcGUpOwotCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwg dGVtcCk7Ci0KLQkJCWlmICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9MT0NLIHx8Ci0JCQkgICAgKGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZykgJiBGRElfUlhfU1lNQk9MX0xPQ0spKSB7Ci0JCQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKLQkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhf U1lNQk9MX0xPQ0spOwotCQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCQkgICAg IkZESSB0cmFpbiAyIGRvbmUsIGxldmVsICVpLlxuIiwKLQkJCQkJICAgIGkpOwotCQkJCWdvdG8g dHJhaW5fZG9uZTsKLQkJCX0KLQkJCXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCi0J CX0KLQkJaWYgKGkgPT0gNCkKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAg ICAiRkRJIHRyYWluIDIgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKLQl9Ci0KLXRyYWlu X2RvbmU6Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gZG9uZS5cbiIp OwotfQotCi1zdGF0aWMgdm9pZCBpbGtfZmRpX3BsbF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7Ci0J ZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUz MiB0ZW1wOwotCi0JLyogZW5hYmxlIFBDSCBGREkgUlggUExMLCB3YWl0IHdhcm11cCBwbHVzIERN SSBsYXRlbmN5ICovCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH4oRkRJX0RQX1BPUlRfV0lEVEhfTUFTSyB8 ICgweDcgPDwgMTYpKTsKLQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZk aV9sYW5lcyk7Ci0JdGVtcCB8PSAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUElQRUNPTkYocGlw ZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgfCBGRElfUlhfUExMX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDIwMCk7Ci0KLQkvKiBTd2l0Y2ggZnJvbSBSYXdj bGsgdG8gUENEY2xrICovCi0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9QQ0RDTEspOwotCi0JaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgyMDApOwotCi0JLyog RW5hYmxlIENQVSBGREkgVFggUExMLCBhbHdheXMgb24gZm9yIElyb25sYWtlICovCi0JcmVnID0g RkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK LQlpZiAoKHRlbXAgJiBGRElfVFhfUExMX0VOQUJMRSkgPT0gMCkgewotCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX1BMTF9FTkFCTEUpOwotCi0JCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotfQotCi1z dGF0aWMgdm9pZCBpbGtfZmRpX3BsbF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JZW51 bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0 ZW1wOwotCi0JLyogU3dpdGNoIGZyb20gUENEY2xrIHRvIFJhd2NsayAqLwotCXJlZyA9IEZESV9S WF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUENEQ0xLKTsKLQotCS8qIERp c2FibGUgQ1BVIEZESSBUWCBQTEwgKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgJiB+RkRJX1RYX1BMTF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxMDApOwotCi0JcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9SWF9QTExfRU5BQkxFKTsKLQotCS8qIFdh aXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxMDApOwotfQotCi1zdGF0aWMgdm9pZCBpbGtfZmRp X2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBp cGUgPSBjcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1wOwotCi0JLyogZGlz YWJsZSBDUFUgRkRJIHR4IGFuZCBQQ0ggRkRJIHJ4ICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBl KTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9UWF9FTkFCTEUpOwotCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+KDB4NyA8PCAxNik7 Ci0JdGVtcCB8PSAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQ RUNPTkZfQlBDX01BU0spIDw8IDExOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRl bXAgJiB+RkRJX1JYX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IHJlZyk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBkaXNhYmxl IGNsb2NrIHBvaW50ZXIgYWZ0ZXIgZG93bmluZyBGREkgKi8KLQlpZiAoSEFTX1BDSF9JQlgoZGV2 X3ByaXYpKQotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4ocGlwZSks Ci0JCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIpOwotCi0JLyogc3RpbGwg c2V0IHRyYWluIHBhdHRlcm4gMSAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Tk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKEhBU19QQ0hfQ1BUKGRldl9w cml2KSkgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwotCQl0 ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7Ci0JfSBlbHNlIHsKLQkJdGVtcCAm PSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJO XzE7Ci0JfQotCS8qIEJQQyBpbiBGREkgcnggaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gUElQ RUNPTkYgKi8KLQl0ZW1wICY9IH4oMHgwNyA8PCAxNik7Ci0JdGVtcCB8PSAoaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOwot CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxMDApOwotfQotCiBib29sIGludGVsX2hh c19wZW5kaW5nX2ZiX3VucGluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsK IAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CkBAIC02NzA4LDE0MyArNjE3Miw2IEBAIHN0YXRpYyB2 b2lkIGludGVsX2Nvbm5lY3Rvcl92ZXJpZnlfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCiAJfQogfQogCi1zdGF0aWMgaW50IHBpcGVfcmVxdWlyZWRfZmRpX2xhbmVz KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCWlmIChjcnRjX3N0YXRl LT5ody5lbmFibGUgJiYgY3J0Y19zdGF0ZS0+aGFzX3BjaF9lbmNvZGVyKQotCQlyZXR1cm4gY3J0 Y19zdGF0ZS0+ZmRpX2xhbmVzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWxrX2No ZWNrX2ZkaV9sYW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSwKLQkJ CSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT51YXBpLnN0YXRlOwotCXN0cnVjdCBp bnRlbF9jcnRjICpvdGhlcl9jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvdGhlcl9j cnRjX3N0YXRlOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCSAgICAiY2hlY2tp bmcgZmRpIGNvbmZpZyBvbiBwaXBlICVjLCBsYW5lcyAlaVxuIiwKLQkJICAgIHBpcGVfbmFtZShw aXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7Ci0JaWYgKHBpcGVfY29uZmlnLT5mZGlfbGFu ZXMgPiA0KSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJpbnZhbGlk IGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBsYW5lc1xuIiwKLQkJCSAgICBwaXBlX25h bWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkg ewotCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDIpIHsKLQkJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAib25seSAyIGxhbmVzIG9uIGhhc3dlbGwsIHJlcXVpcmVk OiAlaSBsYW5lc1xuIiwKLQkJCQkgICAgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JaWYgKElO VEVMX05VTV9QSVBFUyhkZXZfcHJpdikgPT0gMikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBJdnlicmlk Z2UgMyBwaXBlIGlzIHJlYWxseSBjb21wbGljYXRlZCAqLwotCXN3aXRjaCAocGlwZSkgewotCWNh c2UgUElQRV9BOgotCQlyZXR1cm4gMDsKLQljYXNlIFBJUEVfQjoKLQkJaWYgKHBpcGVfY29uZmln LT5mZGlfbGFuZXMgPD0gMikKLQkJCXJldHVybiAwOwotCi0JCW90aGVyX2NydGMgPSBpbnRlbF9n ZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgUElQRV9DKTsKLQkJb3RoZXJfY3J0Y19zdGF0ZSA9 Ci0JCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIG90aGVyX2NydGMpOwotCQlp ZiAoSVNfRVJSKG90aGVyX2NydGNfc3RhdGUpKQotCQkJcmV0dXJuIFBUUl9FUlIob3RoZXJfY3J0 Y19zdGF0ZSk7Ci0KLQkJaWYgKHBpcGVfcmVxdWlyZWRfZmRpX2xhbmVzKG90aGVyX2NydGNfc3Rh dGUpID4gMCkgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJpbnZh bGlkIHNoYXJlZCBmZGkgbGFuZSBjb25maWcgb24gcGlwZSAlYzogJWkgbGFuZXNcbiIsCi0JCQkJ ICAgIHBpcGVfbmFtZShwaXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQljYXNlIFBJUEVfQzoKLQkJaWYgKHBpcGVfY29u ZmlnLT5mZGlfbGFuZXMgPiAyKSB7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJ CQkgICAgIm9ubHkgMiBsYW5lcyBvbiBwaXBlICVjOiByZXF1aXJlZCAlaSBsYW5lc1xuIiwKLQkJ CQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQl9Ci0KLQkJb3RoZXJfY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBl KGRldl9wcml2LCBQSVBFX0IpOwotCQlvdGhlcl9jcnRjX3N0YXRlID0KLQkJCWludGVsX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7Ci0JCWlmIChJU19FUlIob3RoZXJf Y3J0Y19zdGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihvdGhlcl9jcnRjX3N0YXRlKTsKLQotCQlp ZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3RoZXJfY3J0Y19zdGF0ZSkgPiAyKSB7Ci0JCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgImZkaSBsaW5rIEIgdXNlcyB0b28g bWFueSBsYW5lcyB0byBlbmFibGUgbGluayBDXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9 Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0KLQotI2RlZmluZSBSRVRS WSAxCi1zdGF0aWMgaW50IGlsa19mZGlfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMsCi0JCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Ci17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2OwotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOwotCWNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBpcGVfY29uZmlnLT5ody5hZGp1 c3RlZF9tb2RlOwotCWludCBsYW5lLCBsaW5rX2J3LCBmZGlfZG90Y2xvY2ssIHJldDsKLQlib29s IG5lZWRzX3JlY29tcHV0ZSA9IGZhbHNlOwotCi1yZXRyeToKLQkvKiBGREkgaXMgYSBiaW5hcnkg c2lnbmFsIHJ1bm5pbmcgYXQgfjIuN0dIeiwgZW5jb2RpbmcKLQkgKiBlYWNoIG91dHB1dCBvY3Rl dCBhcyAxMCBiaXRzLiBUaGUgYWN0dWFsIGZyZXF1ZW5jeQotCSAqIGlzIHN0b3JlZCBhcyBhIGRp dmlkZXIgaW50byBhIDEwME1IeiBjbG9jaywgYW5kIHRoZQotCSAqIG1vZGUgcGl4ZWwgY2xvY2sg aXMgc3RvcmVkIGluIHVuaXRzIG9mIDFLSHouCi0JICogSGVuY2UgdGhlIGJ3IG9mIGVhY2ggbGFu ZSBpbiB0ZXJtcyBvZiB0aGUgbW9kZSBzaWduYWwKLQkgKiBpczoKLQkgKi8KLQlsaW5rX2J3ID0g aW50ZWxfZmRpX2xpbmtfZnJlcShpOTE1LCBwaXBlX2NvbmZpZyk7Ci0KLQlmZGlfZG90Y2xvY2sg PSBhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrOwotCi0JbGFuZSA9IGlsa19nZXRfbGFuZXNfcmVx dWlyZWQoZmRpX2RvdGNsb2NrLCBsaW5rX2J3LAotCQkJCSAgICAgIHBpcGVfY29uZmlnLT5waXBl X2JwcCk7Ci0KLQlwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID0gbGFuZTsKLQotCWludGVsX2xpbmtf Y29tcHV0ZV9tX24ocGlwZV9jb25maWctPnBpcGVfYnBwLCBsYW5lLCBmZGlfZG90Y2xvY2ssCi0J CQkgICAgICAgbGlua19idywgJnBpcGVfY29uZmlnLT5mZGlfbV9uLCBmYWxzZSwgZmFsc2UpOwot Ci0JcmV0ID0gaWxrX2NoZWNrX2ZkaV9sYW5lcyhkZXYsIGludGVsX2NydGMtPnBpcGUsIHBpcGVf Y29uZmlnKTsKLQlpZiAocmV0ID09IC1FREVBRExLKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHJl dCA9PSAtRUlOVkFMICYmIHBpcGVfY29uZmlnLT5waXBlX2JwcCA+IDYqMykgewotCQlwaXBlX2Nv bmZpZy0+cGlwZV9icHAgLT0gMiozOwotCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJICAg ICJmZGkgbGluayBidyBjb25zdHJhaW50LCByZWR1Y2luZyBwaXBlIGJwcCB0byAlaVxuIiwKLQkJ CSAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHApOwotCQluZWVkc19yZWNvbXB1dGUgPSB0cnVlOwot CQlwaXBlX2NvbmZpZy0+YndfY29uc3RyYWluZWQgPSB0cnVlOwotCi0JCWdvdG8gcmV0cnk7Ci0J fQotCi0JaWYgKG5lZWRzX3JlY29tcHV0ZSkKLQkJcmV0dXJuIFJFVFJZOwotCi0JcmV0dXJuIHJl dDsKLX0KLQogYm9vbCBoc3dfY3J0Y19zdGF0ZV9pcHNfY2FwYWJsZShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKQEAgLTExMzc5LDcgKzEwNzA2 LDcgQEAgaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAocmV0ID09IFJFVFJZKSB7CisJaWYg KHJldCA9PSBJOTE1X0RJU1BMQVlfQ09ORklHX1JFVFJZKSB7CiAJCWlmIChkcm1fV0FSTigmaTkx NS0+ZHJtLCAhcmV0cnksCiAJCQkgICAgICJsb29wIGluIHBpcGUgY29uZmlndXJhdGlvbiBjb21w dXRhdGlvblxuIikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1MTc4LDE0ICsxNDUwNSw3IEBA IHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rp c2FibGU7CiAJfQogCi0JaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpIHsKLQkJZGV2X3ByaXYtPmRp c3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpbGtfZmRpX2xpbmtfdHJhaW47Ci0JfSBlbHNlIGlmIChJ U19HRU4oZGV2X3ByaXYsIDYpKSB7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWlu ID0gZ2VuNl9mZGlfbGlua190cmFpbjsKLQl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJp dikpIHsKLQkJLyogRklYTUU6IGRldGVjdCBCMCsgc3RlcHBpbmcgYW5kIHVzZSBhdXRvIHRyYWlu aW5nICovCi0JCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaXZiX21hbnVhbF9m ZGlfbGlua190cmFpbjsKLQl9CisJaW50ZWxfaW5pdF9mZGlfaG9vayhkZXZfcHJpdik7CiAKIAlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LmNvbW1p dF9tb2Rlc2V0X2VuYWJsZXMgPSBza2xfY29tbWl0X21vZGVzZXRfZW5hYmxlczsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKaW5kZXggZjFlMzZjY2E4NmMx Li43MzFlYTZmNzc3N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5oCkBAIC02NzcsNiArNjc3LDE2IEBAIHZvaWQgdmx2X2NvbXB1dGVfZHBsbChzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKIHZvaWQgY2h2X2NvbXB1dGVfZHBsbChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKIAkJICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmln KTsKIAorLyogZmRpICovCisjZGVmaW5lIEk5MTVfRElTUExBWV9DT05GSUdfUkVUUlkgMQoraW50 IGlsa19mZGlfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCisJ CQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwordm9pZCBpbnRlbF9m ZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKK3ZvaWQgaWxrX2ZkaV9k aXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKK3ZvaWQgaWxrX2ZkaV9wbGxfZGlzYWJs ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0Yyk7Cit2b2lkIGlsa19mZGlfcGxsX2VuYWJs ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cit2b2lkIGludGVs X2luaXRfZmRpX2hvb2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKwogLyog bW9kZXNldHRpbmcgKi8KIHZvaWQgaW50ZWxfbW9kZXNldF9pbml0X2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KTsKIGludCBpbnRlbF9tb2Rlc2V0X2luaXRfbm9pcnEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAppbmRleCA4MjMwODNiMjMxYmMuLjljNjg0NTUyOTAz YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 X3R5cGVzLmgKQEAgLTE4MDQsNCArMTgwNCwxMyBAQCBzdGF0aWMgaW5saW5lIHUzMiBpOXh4X2Rw bGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKIAlyZXR1cm4gZHBsbC0+biA8PCAxNiB8 IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgaW50ZWxf ZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCWlmIChI QVNfRERJKGRldl9wcml2KSkKKwkJcmV0dXJuIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrOyAvKiBT UExMICovCisJZWxzZQorCQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsKK30KKwogI2Vu ZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9mZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmJmNGVmODQ2ODZlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZmRpLmMKQEAgLTAsMCArMSw2ODIgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgorICovCisjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxh eV90eXBlcy5oIgorCisvKiB1bml0cyBvZiAxMDBNSHogKi8KK3N0YXRpYyBpbnQgcGlwZV9yZXF1 aXJlZF9mZGlfbGFuZXMoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJ aWYgKGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJiBjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIp CisJCXJldHVybiBjcnRjX3N0YXRlLT5mZGlfbGFuZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpbGtfY2hlY2tfZmRpX2xhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0g cGlwZSBwaXBlLAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZp ZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3Rh dGU7CisJc3RydWN0IGludGVsX2NydGMgKm90aGVyX2NydGM7CisJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKm90aGVyX2NydGNfc3RhdGU7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJICAgICJjaGVja2luZyBmZGkgY29uZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAorCQkg ICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwlpZiAocGlwZV9j b25maWctPmZkaV9sYW5lcyA+IDQpIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJ CQkgICAgImludmFsaWQgZmRpIGxhbmUgY29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAor CQkJICAgIHBpcGVfbmFtZShwaXBlKSwgcGlwZV9jb25maWctPmZkaV9sYW5lcyk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdF TEwoZGV2X3ByaXYpKSB7CisJCWlmIChwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgeworCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJvbmx5IDIgbGFuZXMgb24gaGFz d2VsbCwgcmVxdWlyZWQ6ICVpIGxhbmVzXG4iLAorCQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRpX2xh bmVzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0K Kwl9CisKKwlpZiAoSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAyKQorCQlyZXR1cm4gMDsK KworCS8qIEl2eWJyaWRnZSAzIHBpcGUgaXMgcmVhbGx5IGNvbXBsaWNhdGVkICovCisJc3dpdGNo IChwaXBlKSB7CisJY2FzZSBQSVBFX0E6CisJCXJldHVybiAwOworCWNhc2UgUElQRV9COgorCQlp ZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA8PSAyKQorCQkJcmV0dXJuIDA7CisKKwkJb3RoZXJf Y3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBQSVBFX0MpOworCQlvdGhl cl9jcnRjX3N0YXRlID0KKwkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3Ro ZXJfY3J0Yyk7CisJCWlmIChJU19FUlIob3RoZXJfY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gUFRS X0VSUihvdGhlcl9jcnRjX3N0YXRlKTsKKworCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMo b3RoZXJfY3J0Y19zdGF0ZSkgPiAwKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK KwkJCQkgICAgImludmFsaWQgc2hhcmVkIGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBs YW5lc1xuIiwKKwkJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVz KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHVybiAwOworCWNhc2UgUElQRV9DOgor CQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDIpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAorCQkJCSAgICAib25seSAyIGxhbmVzIG9uIHBpcGUgJWM6IHJlcXVpcmVkICVp IGxhbmVzXG4iLAorCQkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFu ZXMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0 X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQik7CisJCW90aGVyX2NydGNfc3RhdGUgPQor CQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKKwkJaWYg KElTX0VSUihvdGhlcl9jcnRjX3N0YXRlKSkKKwkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNf c3RhdGUpOworCisJCWlmIChwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRl KSA+IDIpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiZmRpIGxp bmsgQiB1c2VzIHRvbyBtYW55IGxhbmVzIHRvIGVuYWJsZSBsaW5rIENcbiIpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQor CitpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YywKKwkJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7 CisJaW50IGxhbmUsIGxpbmtfYncsIGZkaV9kb3RjbG9jaywgcmV0OworCWJvb2wgbmVlZHNfcmVj b21wdXRlID0gZmFsc2U7CisKK3JldHJ5OgorCS8qIEZESSBpcyBhIGJpbmFyeSBzaWduYWwgcnVu bmluZyBhdCB+Mi43R0h6LCBlbmNvZGluZworCSAqIGVhY2ggb3V0cHV0IG9jdGV0IGFzIDEwIGJp dHMuIFRoZSBhY3R1YWwgZnJlcXVlbmN5CisJICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRv IGEgMTAwTUh6IGNsb2NrLCBhbmQgdGhlCisJICogbW9kZSBwaXhlbCBjbG9jayBpcyBzdG9yZWQg aW4gdW5pdHMgb2YgMUtIei4KKwkgKiBIZW5jZSB0aGUgYncgb2YgZWFjaCBsYW5lIGluIHRlcm1z IG9mIHRoZSBtb2RlIHNpZ25hbAorCSAqIGlzOgorCSAqLworCWxpbmtfYncgPSBpbnRlbF9mZGlf bGlua19mcmVxKGk5MTUsIHBpcGVfY29uZmlnKTsKKworCWZkaV9kb3RjbG9jayA9IGFkanVzdGVk X21vZGUtPmNydGNfY2xvY2s7CisKKwlsYW5lID0gaWxrX2dldF9sYW5lc19yZXF1aXJlZChmZGlf ZG90Y2xvY2ssIGxpbmtfYncsCisJCQkJICAgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKKwor CXBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOworCisJaW50ZWxfbGlua19jb21wdXRlX21f bihwaXBlX2NvbmZpZy0+cGlwZV9icHAsIGxhbmUsIGZkaV9kb3RjbG9jaywKKwkJCSAgICAgICBs aW5rX2J3LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZhbHNlLCBmYWxzZSk7CisKKwlyZXQgPSBp bGtfY2hlY2tfZmRpX2xhbmVzKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgcGlwZV9jb25maWcpOwor CWlmIChyZXQgPT0gLUVERUFETEspCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ID09IC1FSU5W QUwgJiYgcGlwZV9jb25maWctPnBpcGVfYnBwID4gNiozKSB7CisJCXBpcGVfY29uZmlnLT5waXBl X2JwcCAtPSAyKjM7CisJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCisJCQkgICAgImZkaSBsaW5r IGJ3IGNvbnN0cmFpbnQsIHJlZHVjaW5nIHBpcGUgYnBwIHRvICVpXG4iLAorCQkJICAgIHBpcGVf Y29uZmlnLT5waXBlX2JwcCk7CisJCW5lZWRzX3JlY29tcHV0ZSA9IHRydWU7CisJCXBpcGVfY29u ZmlnLT5id19jb25zdHJhaW5lZCA9IHRydWU7CisKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAo bmVlZHNfcmVjb21wdXRlKQorCQlyZXR1cm4gSTkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWTsKKwor CXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwor CWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVt cDsKKworCS8qIGVuYWJsZSBub3JtYWwgdHJhaW4gKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUp OworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChJU19JVllCUklE R0UoZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOworCQl0 ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5B QkxFOworCX0gZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAg fD0gRkRJX0xJTktfVFJBSU5fTk9ORSB8IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKKwl9 CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhf Q1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChI QVNfUENIX0NQVChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVS Tl9NQVNLX0NQVDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT1JNQUxfQ1BUOworCX0gZWxz ZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fTk9ORTsKKwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZE SV9SWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRSk7CisKKwkvKiB3YWl0IG9uZSBpZGxlIHBhdHRlcm4g dGltZSAqLworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXko MTAwMCk7CisKKwkvKiBJVkIgd2FudHMgZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCisJaWYg KElTX0lWWUJSSURHRShkZXZfcHJpdikpCisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs CisJCQkgICAgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19FUlJDX0VO QUJMRSB8IEZESV9GRV9FUlJDX0VOQUJMRSk7Cit9CisKKy8qIFRoZSBGREkgbGluayB0cmFpbmlu ZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KK3N0YXRpYyB2b2lkIGlsa19mZGlfbGlu a190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190 IHJlZzsKKwl1MzIgdGVtcCwgdHJpZXM7CisKKwkvKiBGREkgbmVlZHMgYml0cyBmcm9tIHBpcGUg Zmlyc3QgKi8KKwlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVf dHJhbnNjb2Rlcik7CisKKwkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJv bF9sb2NrIGFuZCBiaXRfbG9jayBiaXQKKwkgICBmb3IgdHJhaW4gcmVzdWx0ICovCisJcmVnID0g RkRJX1JYX0lNUihwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK Kwl0ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7CisJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NL OworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCWludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDE1MCk7CisKKwkvKiBlbmFibGUgQ1BVIEZESSBUWCBh bmQgUENIIEZESSBSWCAqLworCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFT SzsKKwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJ dGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VO QUJMRSk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJdGVtcCB8 PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9w cml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5h YmxlIGNsb2NrIHBvaW50ZXIgYWZ0ZXIgRkRJIGVuYWJsZSovCisJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIEZESV9SWF9DSElDS0VOKHBpcGUpLAorCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNf UE9JTlRFUl9PVlIpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihw aXBlKSwKKwkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BI QVNFX1NZTkNfUE9JTlRFUl9FTik7CisKKwlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCWZvciAo dHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJ UiAweCV4XG4iLCB0ZW1wKTsKKworCQlpZiAoKHRlbXAgJiBGRElfUlhfQklUX0xPQ0spKSB7CisJ CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKKwkJ CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwor CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHRyaWVzID09IDUpCisJCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sICJGREkgdHJhaW4gMSBmYWlsIVxuIik7CisKKwkvKiBUcmFpbiAyICovCisJcmVnID0g RkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK Kwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8yOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJcmVn ID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJB SU5fUEFUVEVSTl8yOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJ cmVnID0gRkRJX1JYX0lJUihwaXBlKTsKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmll cysrKSB7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisKKwkJaWYg KHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKKwkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsCisJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOworCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMiBkb25lLlxuIik7CisJCQlicmVhazsK KwkJfQorCX0KKwlpZiAodHJpZXMgPT0gNSkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZE SSB0cmFpbiAyIGZhaWwhXG4iKTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJ IHRyYWluIGRvbmVcbiIpOworCit9CisKK3N0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRpX3RyYWlu X3BhcmFtW10gPSB7CisJRkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9CLAorCUZESV9MSU5L X1RSQUlOXzQwME1WXzZEQl9TTkJfQiwKKwlGRElfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJf QiwKKwlGRElfTElOS19UUkFJTl84MDBNVl8wREJfU05CX0IsCit9OworCisvKiBUaGUgRkRJIGxp bmsgdHJhaW5pbmcgZnVuY3Rpb25zIGZvciBTTkIvQ291Z2FycG9pbnQuICovCitzdGF0aWMgdm9p ZCBnZW42X2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCWNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5 MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wLCBpLCByZXRyeTsKKworCS8qIFRyYWluIDE6IHVtYXNr IEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAorCSAgIGZvciB0 cmFpbiByZXN1bHQgKi8KKwlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOworCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKKwl0 ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5 KDE1MCk7CisKKwkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLworCXJlZyA9 IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKKwl0ZW1wIHw9IEZESV9EUF9QT1JU X1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Tk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9WT0xfRU1QX01BU0s7CisJLyogU05CLUIgKi8KKwl0ZW1wIHw9IEZESV9MSU5L X1RSQUlOXzQwME1WXzBEQl9TTkJfQjsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wIHwgRkRJX1RYX0VOQUJMRSk7CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JY X01JU0MocGlwZSksCisJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElf REVMQVlfOTApOworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVnKTsKKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7CisJCXRl bXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJ TktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKKwl9IGVsc2UgeworCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl9CisJaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOworCisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJZm9y IChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJB SU5fVk9MX0VNUF9NQVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKKwkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoNTAwKTsKKworCQlmb3IgKHJldHJ5ID0g MDsgcmV0cnkgPCA1OyByZXRyeSsrKSB7CisJCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCQkJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisJCQlpZiAodGVtcCAmIEZE SV9SWF9CSVRfTE9DSykgeworCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkJ CSAgICAgICB0ZW1wIHwgRkRJX1JYX0JJVF9MT0NLKTsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKKwkJCQkJICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7CisJCQkJYnJlYWs7CisJ CQl9CisJCQl1ZGVsYXkoNTApOworCQl9CisJCWlmIChyZXRyeSA8IDUpCisJCQlicmVhazsKKwl9 CisJaWYgKGkgPT0gNCkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZh aWwhXG4iKTsKKworCS8qIFRyYWluIDIgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRl bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RS QUlOX05PTkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7CisJaWYgKElTX0dF TihkZXZfcHJpdiwgNikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL OworCQkvKiBTTkItQiAqLworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJf QjsKKwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBG RElfUlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwor CWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f UEFUVEVSTl9NQVNLX0NQVDsKKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BU OworCX0gZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wKTsKKworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1 ZGVsYXkoMTUwKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmVnID0gRkRJX1RY X0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRl bXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKKwkJdGVtcCB8PSBzbmJfYl9mZGlf dHJhaW5fcGFyYW1baV07CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwor CisJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdWRlbGF5KDUwMCk7 CisKKwkJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgeworCQkJcmVnID0gRkRJ X1JYX0lJUihwaXBlKTsKKwkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwor CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXAp OworCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKKwkJCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7 CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRyYWluIDIg ZG9uZS5cbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJdWRlbGF5KDUwKTsKKwkJfQorCQlpZiAo cmV0cnkgPCA1KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDQpCisJCWRybV9lcnIoJmRldl9w cml2LT5kcm0sICJGREkgdHJhaW4gMiBmYWlsIVxuIik7CisKKwlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cit9CisKKy8qIE1hbnVhbCBsaW5rIHRyYWlu aW5nIGZvciBJdnkgQnJpZGdlIEEwIHBhcnRzICovCitzdGF0aWMgdm9pZCBpdmJfbWFudWFsX2Zk aV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5MTVf cmVnX3QgcmVnOworCXUzMiB0ZW1wLCBpLCBqOworCisJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJY IEludGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sgYml0CisJICAgZm9yIHRyYWluIHJl c3VsdCAqLworCXJlZyA9IEZESV9SWF9JTVIocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOworCXRlbXAgJj0g fkZESV9SWF9CSVRfTE9DSzsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsK KworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsK KworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZvcmUgbGluayB0 cmFpbiAweCV4XG4iLAorCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRkRJX1JYX0lJUihw aXBlKSkpOworCisJLyogVHJ5IGVhY2ggdnN3aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0aW5nIHR3 aWNlIGJlZm9yZSBtb3Zpbmcgb24gKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzbmJf Yl9mZGlfdHJhaW5fcGFyYW0pICogMjsgaisrKSB7CisJCS8qIGRpc2FibGUgZmlyc3QgaW4gY2Fz ZSB3ZSBuZWVkIHRvIHJldHJ5ICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJB SU5fQVVUTyB8IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCKTsKKwkJdGVtcCAmPSB+RkRJX1RYX0VO QUJMRTsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJcmVnID0g RkRJX1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX0FVVE87CisJCXRlbXAgJj0gfkZESV9MSU5LX1RS QUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgJj0gfkZESV9SWF9FTkFCTEU7CisJCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJCS8qIGVuYWJsZSBDUFUgRkRJIFRY IGFuZCBQQ0ggRkRJIFJYICovCisJCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURU SF9NQVNLOworCQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5l cyk7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lWQjsKKwkJdGVtcCAmPSB+ RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9w YXJhbVtqLzJdOworCQl0ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lOQzsKKwkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9FTkFCTEUpOworCisJCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBGRElfUlhfTUlTQyhwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfVFAxX1RP X1RQMl80OCB8IEZESV9SWF9GRElfREVMQVlfOTApOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlw ZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wIHw9IEZE SV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7CisJCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5D OworCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7 CisKKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoMSk7 IC8qIHNob3VsZCBiZSAwLjV1cyAqLworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJ CXJlZyA9IEZESV9SWF9JSVIocGlwZSk7CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4 XG4iLCB0ZW1wKTsKKworCQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKKwkJCSAgICAo aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsKKwkJCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9C SVRfTE9DSyk7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJ IHRyYWluIDEgZG9uZSwgbGV2ZWwgJWkuXG4iLAorCQkJCQkgICAgaSk7CisJCQkJYnJlYWs7CisJ CQl9CisJCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLworCQl9CisJCWlmIChpID09 IDQpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiRkRJIHRyYWlu IDEgZmFpbCBvbiB2c3dpbmcgJWRcbiIsIGogLyAyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyogVHJhaW4gMiAqLworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9J VkI7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKKwkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsK KwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFU VEVSTl8yX0NQVDsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoMik7IC8qIHNo b3VsZCBiZSAxLjV1cyAqLworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJlZyA9 IEZESV9SWF9JSVIocGlwZSk7CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0 ZW1wKTsKKworCQkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0sgfHwKKwkJCSAgICAoaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsKKwkJCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9T WU1CT0xfTE9DSyk7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAi RkRJIHRyYWluIDIgZG9uZSwgbGV2ZWwgJWkuXG4iLAorCQkJCQkgICAgaSk7CisJCQkJZ290byB0 cmFpbl9kb25lOworCQkJfQorCQkJdWRlbGF5KDIpOyAvKiBzaG91bGQgYmUgMS41dXMgKi8KKwkJ fQorCQlpZiAoaSA9PSA0KQorCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAg ICJGREkgdHJhaW4gMiBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOworCX0KKwordHJhaW5f ZG9uZToKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7 Cit9CisKK3ZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlw ZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsK KworCS8qIGVuYWJsZSBQQ0ggRkRJIFJYIFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5j eSAqLworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+KEZESV9EUF9QT1JUX1dJRFRIX01BU0sgfCAoMHg3IDw8 IDE2KSk7CisJdGVtcCB8PSBGRElfRFBfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMp OworCXRlbXAgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJ UEVDT05GX0JQQ19NQVNLKSA8PCAxMTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0 ZW1wIHwgRkRJX1JYX1BMTF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9w cml2LCByZWcpOworCXVkZWxheSgyMDApOworCisJLyogU3dpdGNoIGZyb20gUmF3Y2xrIHRvIFBD RGNsayAqLworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUENEQ0xLKTsKKworCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMjAwKTsKKworCS8qIEVuYWJsZSBD UFUgRkRJIFRYIFBMTCwgYWx3YXlzIG9uIGZvciBJcm9ubGFrZSAqLworCXJlZyA9IEZESV9UWF9D VEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaWYgKCh0 ZW1wICYgRkRJX1RYX1BMTF9FTkFCTEUpID09IDApIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCB8IEZESV9UWF9QTExfRU5BQkxFKTsKKworCQlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXVkZWxheSgxMDApOworCX0KK30KKwordm9pZCBpbGtf ZmRpX3BsbF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjKQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBp bnRlbF9jcnRjLT5waXBlOworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wOworCisJLyogU3dp dGNoIGZyb20gUENEY2xrIHRvIFJhd2NsayAqLworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUENEQ0xLKTsKKworCS8qIERpc2FibGUgQ1BVIEZESSBU WCBQTEwgKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+ RkRJX1RYX1BMTF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBy ZWcpOworCXVkZWxheSgxMDApOworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLCB0ZW1wICYgfkZESV9SWF9QTExfRU5BQkxFKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjbG9j a3MgdG8gdHVybiBvZmYuICovCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcp OworCXVkZWxheSgxMDApOworfQorCit2b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGNydGMtPmJhc2UuZGV2KTsKKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaTkx NV9yZWdfdCByZWc7CisJdTMyIHRlbXA7CisKKwkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBD SCBGREkgcnggKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAg JiB+RkRJX1RYX0VOQUJMRSk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcp OworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKKwl0ZW1wICY9IH4oMHg3IDw8IDE2KTsKKwl0ZW1wIHw9IChpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7 CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsK KworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAwKTsK KworCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBk b3duaW5nIEZESSAqLworCWlmIChIQVNfUENIX0lCWChkZXZfcHJpdikpCisJCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfUEhB U0VfU1lOQ19QT0lOVEVSX09WUik7CisKKwkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICov CisJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJ TktfVFJBSU5fUEFUVEVSTl8xOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAp OworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZE SV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8xX0NQVDsKKwl9IGVsc2UgeworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05F OworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl9CisJLyogQlBDIGluIEZE SSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAqLworCXRlbXAgJj0gfigw eDA3IDw8IDE2KTsKKwl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihw aXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCk7CisKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJdWRlbGF5KDEwMCk7Cit9CisKK3ZvaWQKK2ludGVsX2luaXRfZmRpX2hvb2soc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7 CisJCWRldl9wcml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaWxrX2ZkaV9saW5rX3RyYWlu OworCX0gZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxh eS5mZGlfbGlua190cmFpbiA9IGdlbjZfZmRpX2xpbmtfdHJhaW47CisJfSBlbHNlIGlmIChJU19J VllCUklER0UoZGV2X3ByaXYpKSB7CisJCS8qIEZJWE1FOiBkZXRlY3QgQjArIHN0ZXBwaW5nIGFu ZCB1c2UgYXV0byB0cmFpbmluZyAqLworCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFp biA9IGl2Yl9tYW51YWxfZmRpX2xpbmtfdHJhaW47CisJfQorfQotLSAKMi4yNy4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK