From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: [PATCH v3 2/3] drm/arm: Add support for Mali Display Processors Date: Thu, 9 Jun 2016 17:18:18 +0100 Message-ID: <1465489099-25628-3-git-send-email-Liviu.Dudau@arm.com> References: <1465489099-25628-1-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1465489099-25628-1-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Rob Herring , Brian Starkey , Emil Velikov , Daniel Vetter Cc: devicetree , LKML , DRI devel , LAKML List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZmFtaWx5IG9mIERpc3BsYXkgUHJvY2Vzc29ycyBmcm9t IEFSTSBMdGQuClRoaXMgY29tbWl0IGFkZHMgYmFzaWMgc3VwcG9ydCBmb3IgTWFsaSBEUDUwMCwg RFA1NTAgYW5kIERQNjUwCnBhcnRzLCB3aXRoIG9ubHkgdGhlIGRpc3BsYXkgZW5naW5lIGJlaW5n IHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LgoKQ2M6IERhdmlkIEJyb3duIDxEYXZpZC5Ccm93bkBh cm0uY29tPgpDYzogQnJpYW4gU3RhcmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgoKU2lnbmVk LW9mZi1ieTogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2FybS9LY29uZmlnICAgICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL2FybS9N YWtlZmlsZSAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5j ICAgfCAyMzkgKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMg ICAgfCA1MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX2Rydi5oICAgIHwgIDQ4ICsrKwogZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcu YyAgICAgfCA2OTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9ody5oICAgICB8IDI0MSArKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYyB8IDI3MSArKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oICAgfCAxNzIgKysrKysrKysrCiA5IGZpbGVzIGNo YW5nZWQsIDIxODAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hcm0vbWFsaWRwX2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hcm0vbWFsaWRwX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9ody5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBf aHcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5l cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2FybS9LY29uZmlnCmluZGV4IGVhZWQ0NTQuLjFiMjkwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcK QEAgLTI1LDMgKzI1LDE5IEBAIGNvbmZpZyBEUk1fSERMQ0RfU0hPV19VTkRFUlJVTgogCSAgRW5h YmxlIHRoaXMgb3B0aW9uIHRvIHNob3cgaW4gcmVkIGNvbG91ciB0aGUgcGl4ZWxzIHRoYXQgdGhl CiAJICBIRExDRCBkZXZpY2UgZGlkIG5vdCBmZXRjaCBmcm9tIGZyYW1lYnVmZmVyIGR1ZSB0byB1 bmRlcnJ1bgogCSAgY29uZGl0aW9ucy4KKworY29uZmlnIERSTV9NQUxJX0RJU1BMQVkKKwl0cmlz dGF0ZSAiQVJNIE1hbGkgRGlzcGxheSBQcm9jZXNzb3IiCisJZGVwZW5kcyBvbiBEUk0gJiYgT0Yg JiYgKEFSTSB8fCBBUk02NCkKKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlzZWxlY3QgRFJNX0FS TQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKKwlz ZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCisJaGVs cAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhlIEFSTSBN YWxpIERpc3BsYXkKKwkgIFByb2Nlc3NvciBkcml2ZXIuIEl0IHN1cHBvcnRzIHRoZSBEUDUwMCwg RFA1NTAgYW5kIERQNjUwIHZhcmlhbnRzCisJICBvZiB0aGUgaGFyZHdhcmUuCisKKwkgIElmIGNv bXBpbGVkIGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG1hbGktZHAuCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtl ZmlsZQppbmRleCA4OWRjYjdiLi5iYjhiMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YXJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKQEAgLTEsMiAr MSw0IEBACiBoZGxjZC15IDo9IGhkbGNkX2Rydi5vIGhkbGNkX2NydGMubwogb2JqLSQoQ09ORklH X0RSTV9IRExDRCkJKz0gaGRsY2QubworbWFsaS1kcC15IDo9IG1hbGlkcF9kcnYubyBtYWxpZHBf aHcubyBtYWxpZHBfcGxhbmVzLm8gbWFsaWRwX2NydGMubworb2JqLSQoQ09ORklHX0RSTV9NQUxJ X0RJU1BMQVkpCSs9IG1hbGktZHAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9t YWxpZHBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjcxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisg KiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgYW5kIGFueSB1 c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcworICogb2Yg c3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKiBBUk0gTWFsaSBEUDUwMC9EUDU1MC9EUDY1MCBkcml2 ZXIgKGNydGMgb3BlcmF0aW9ucykKKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUu aD4KKworI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKKwor c3RhdGljIGJvb2wgbWFsaWRwX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCQkJICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IG1hbGlkcF9k cm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKKwlzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKworCS8qCisJICogY2hlY2sgdGhhdCB0 aGUgaGFyZHdhcmUgY2FuIGRyaXZlIHRoZSByZXF1aXJlZCBjbG9jayByYXRlLAorCSAqIGJ1dCBz a2lwIHRoZSBjaGVjayBpZiB0aGUgY2xvY2sgaXMgbWVhbnQgdG8gYmUgZGlzYWJsZWQgKHJlcV9y YXRlID0gMCkKKwkgKi8KKwlsb25nIHJhdGUsIHJlcV9yYXRlID0gbW9kZS0+Y3J0Y19jbG9jayAq IDEwMDA7CisKKwlpZiAocmVxX3JhdGUpIHsKKwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2 LT5tY2xrLCByZXFfcmF0ZSk7CisJCWlmIChyYXRlIDwgcmVxX3JhdGUpIHsKKwkJCURSTV9ERUJV R19EUklWRVIoIm1jbGsgY2xvY2sgdW5hYmxlIHRvIHJlYWNoICVkIGtIelxuIiwKKwkJCQkJIG1v ZGUtPmNydGNfY2xvY2spOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmF0ZSA9IGNsa19y b3VuZF9yYXRlKGh3ZGV2LT5weGxjbGssIHJlcV9yYXRlKTsKKwkJaWYgKHJhdGUgIT0gcmVxX3Jh dGUpIHsKKwkJCURSTV9ERUJVR19EUklWRVIoInB4bGNsayBkb2Vzbid0IHN1cHBvcnQgJWxkIEh6 XG4iLAorCQkJCQkgcmVxX3JhdGUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGNydGNfdG9fbWFs aWRwX2RldmljZShjcnRjKTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxp ZHAtPmRldjsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCisJZHJtX2Rpc3BsYXlfbW9kZV90b192 aWRlb21vZGUoJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLCAmdm0pOworCisJY2xrX3ByZXBh cmVfZW5hYmxlKGh3ZGV2LT5weGxjbGspOworCisJLyogbWNsayBuZWVkcyB0byBiZSBzZXQgdG8g dGhlIHNhbWUgb3IgaGlnaGVyIHJhdGUgdGhhbiBweGxjbGsgKi8KKwljbGtfc2V0X3JhdGUoaHdk ZXYtPm1jbGssIGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2sgKiAxMDAwKTsK KwljbGtfc2V0X3JhdGUoaHdkZXYtPnB4bGNsaywgY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu Y3J0Y19jbG9jayAqIDEwMDApOworCisJaHdkZXYtPm1vZGVzZXQoaHdkZXYsICZ2bSk7CisJaHdk ZXYtPmxlYXZlX2NvbmZpZ19tb2RlKGh3ZGV2KTsKK30KKworc3RhdGljIHZvaWQgbWFsaWRwX2Ny dGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG1hbGlkcF9kcm0g Km1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKKwlzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKworCS8qCisJICogYXZvaWQgZGlzYWJsaW5n IGFscmVhZHkgZGlzYWJsZWQgY2xvY2tzIGFuZCBoYXJkd2FyZQorCSAqIChhcyBpcyB0aGUgY2Fz ZSBhdCBkZXZpY2UgcHJvYmUgdGltZSkKKwkgKi8KKwlpZiAoY3J0Yy0+c3RhdGUtPmFjdGl2ZSkg eworCQlod2Rldi0+ZW50ZXJfY29uZmlnX21vZGUoaHdkZXYpOworCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUoaHdkZXYtPnB4bGNsayk7CisJfQorfQorCitzdGF0aWMgaW50IG1hbGlkcF9jcnRjX2F0 b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGNydGNfdG9f bWFsaWRwX2RldmljZShjcnRjKTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBt YWxpZHAtPmRldjsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpwc3RhdGU7CisJdTMyIHJvdF9tZW1fZnJlZSwgcm90X21lbV91c2FibGU7CisJaW50 IHJvdGF0ZWRfcGxhbmVzID0gMDsKKworCS8qCisJICogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdo IHJvdGF0aW9uIG1lbW9yeSBhdmFpbGFibGUgZm9yIHBsYW5lcworCSAqIHRoYXQgbmVlZCA5MMKw IGFuZCAyNzDCsCByb3RhdGlvbi4gRWFjaCBwbGFuZSBoYXMgc2V0IGl0cyByZXF1aXJlZAorCSAq IG1lbW9yeSBzaXplIGluIHRoZSAtPnBsYW5lX2NoZWNrKCkgY2FsbGJhY2ssIGhlcmUgd2Ugb25s eSBtYWtlCisJICogc3VyZSB0aGF0IHRoZSBzdW1zIGFyZSBsZXNzIHRoYXQgdGhlIHRvdGFsIHVz YWJsZSBtZW1vcnkuCisJICoKKwkgKiBUaGUgcm90YXRpb24gbWVtb3J5IGFsbG9jYXRpb24gYWxn b3JpdGhtIChmb3IgZWFjaCBwbGFuZSk6CisJICogIGEuIElmIG5vIG1vcmUgcm90YXRlZCBwbGFu ZXMgZXhpc3QsIGFsbCByZW1haW5pbmcgcm90YXRlCisJICogICAgIG1lbW9yeSBpbiB0aGUgYmFu ayBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgcGxhbmUuCisJICogIGIuIElmIG90aGVyIHJv dGF0ZWQgcGxhbmVzIGV4aXN0LCBhbmQgcGxhbmUncyBsYXllciBJRCBpcworCSAqICAgICBERV9W SURFTzEsIGl0IGNhbiB1c2UgYWxsIHRoZSBtZW1vcnkgZnJvbSBmaXJzdCBiYW5rIGlmCisJICog ICAgIHNlY29uZGFyeSByb3RhdGlvbiBtZW1vcnkgYmFuayBpcyBhdmFpbGFibGUsIG90aGVyd2lz ZSBpdCBjYW4KKwkgKiAgICAgdXNlIHVwIHRvIGhhbGYgdGhlIGJhbmsncyBtZW1vcnkuCisJICog IGMuIElmIG90aGVyIHJvdGF0ZWQgcGxhbmVzIGV4aXN0LCBhbmQgcGxhbmUncyBsYXllciBJRCBp cyBub3QKKwkgKiAgICAgREVfVklERU8xLCBpdCBjYW4gdXNlIGhhbGYgb2YgdGhlIGF2YWlsYWJs ZSBtZW1vcnkKKwkgKgorCSAqIE5vdGU6IHRoaXMgYWxnb3JpdGhtIGFzc3VtZXMgdGhhdCB0aGUg b3JkZXIgaW4gd2hpY2ggdGhlIHBsYW5lcyBhcmUKKwkgKiBjaGVja2VkIGFsd2F5cyBoYXMgREVf VklERU8xIHBsYW5lIGZpcnN0IGluIHRoZSBsaXN0IGlmIGl0IGlzCisJICogcm90YXRlZC4gQmVj YXVzZSB0aGF0IGlzIGhvdyB3ZSBjcmVhdGUgdGhlIHBsYW5lcyBpbiB0aGUgZmlyc3QKKwkgKiBw bGFjZSwgdW5kZXIgY3VycmVudCBEUk0gdmVyc2lvbiB0aGluZ3Mgd29yaywgYnV0IGlmIGV2ZXIg dGhlIG9yZGVyCisJICogaW4gd2hpY2ggZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3Bs YW5lKCkgaXRlcmF0ZXMgb3ZlciBwbGFuZXMKKwkgKiBjaGFuZ2VzLCB3ZSBuZWVkIHRvIHByZS1z b3J0IHRoZSBwbGFuZXMgYmVmb3JlIHZhbGlkYXRpb24uCisJICovCisKKwkvKiBmaXJzdCBjb3Vu dCB0aGUgbnVtYmVyIG9mIHJvdGF0ZWQgcGxhbmVzICovCisJZHJtX2F0b21pY19jcnRjX3N0YXRl X2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgeworCQlwc3RhdGUgPSBkcm1fYXRvbWljX2dl dF9wbGFuZV9zdGF0ZShzdGF0ZS0+c3RhdGUsIHBsYW5lKTsKKwkJaWYgKHBzdGF0ZS0+cm90YXRp b24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKQorCQkJcm90YXRlZF9wbGFuZXMrKzsKKwl9CisKKwly b3RfbWVtX2ZyZWUgPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdOworCS8qCisJICogaWYgd2Ug aGF2ZSBtb3JlIHRoYW4gMSBwbGFuZSB1c2luZyByb3RhdGlvbiBtZW1vcnksIHVzZSB0aGUgc2Vj b25kCisJICogYmxvY2sgb2Ygcm90YXRpb24gbWVtb3J5IGFzIHdlbGwKKwkgKi8KKwlpZiAocm90 YXRlZF9wbGFuZXMgPiAxKQorCQlyb3RfbWVtX2ZyZWUgKz0gaHdkZXYtPnJvdGF0aW9uX21lbW9y eVsxXTsKKworCS8qIG5vdyB2YWxpZGF0ZSB0aGUgcm90YXRpb24gbWVtb3J5IHJlcXVpcmVtZW50 cyAqLworCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgc3RhdGUp IHsKKwkJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwor CisJCXBzdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLT5zdGF0ZSwgcGxh bmUpOworCQlpZiAocHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKKwkJ CS8qIHByb2Nlc3MgY3VycmVudCBwbGFuZSAqLworCQkJcm90YXRlZF9wbGFuZXMtLTsKKworCQkJ aWYgKCFyb3RhdGVkX3BsYW5lcykgeworCQkJCS8qIG5vIG1vcmUgcm90YXRlZCBwbGFuZXMsIHdl IGNhbiB1c2Ugd2hhdCdzIGxlZnQgKi8KKwkJCQlyb3RfbWVtX3VzYWJsZSA9IHJvdF9tZW1fZnJl ZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKChtcC0+bGF5ZXItPmlkICE9IERFX1ZJREVPMSkgfHwK KwkJCQkgICAgKGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV0gPT0gMCkpCisJCQkJCXJvdF9tZW1f dXNhYmxlID0gcm90X21lbV9mcmVlIC8gMjsKKwkJCQllbHNlCisJCQkJCXJvdF9tZW1fdXNhYmxl ID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXTsKKwkJCX0KKworCQkJcm90X21lbV9mcmVlIC09 IHJvdF9tZW1fdXNhYmxlOworCisJCQlpZiAobXAtPnJvdG1lbV9zaXplID4gcm90X21lbV91c2Fi bGUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgbWFsaWRwX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJCQkgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBk cm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCisJ aWYgKGV2ZW50KSB7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisKKwkJc3Bpbl9sb2Nr X2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwkJaWYgKGRybV9jcnRjX3ZibGFua19nZXQo Y3J0YykgPT0gMCkKKwkJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwor CQllbHNlCisJCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJCXNw aW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1hbGlkcF9jcnRjX2hlbHBlcl9mdW5j cyA9IHsKKwkubW9kZV9maXh1cCA9IG1hbGlkcF9jcnRjX21vZGVfZml4dXAsCisJLmVuYWJsZSA9 IG1hbGlkcF9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1hbGlkcF9jcnRjX2Rpc2FibGUsCisJ LmF0b21pY19jaGVjayA9IG1hbGlkcF9jcnRjX2F0b21pY19jaGVjaywKKwkuYXRvbWljX2ZsdXNo ID0gbWFsaWRwX2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19mdW5jcyBtYWxpZHBfY3J0Y19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9jcnRj X2NsZWFudXAsCisJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAor CS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLnJlc2V0ID0gZHJt X2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKK307CisKK2ludCBt YWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wbGFuZSAqcHJp bWFyeSA9IE5VTEwsICpwbGFuZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWFsaWRwX2RlX3BsYW5l c19pbml0KGRybSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5p dGlhbGlzZSBwbGFuZXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9mb3JfZWFjaF9w bGFuZShwbGFuZSwgZHJtKSB7CisJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9Q UklNQVJZKSB7CisJCQlwcmltYXJ5ID0gcGxhbmU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlm ICghcHJpbWFyeSkgeworCQlEUk1fRVJST1IoIm5vIHByaW1hcnkgcGxhbmUgZm91bmRcbiIpOwor CQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGNydGNfY2xlYW51cF9wbGFuZXM7CisJfQorCisJcmV0 ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtYWxpZHAtPmNydGMsIHByaW1hcnks IE5VTEwsCisJCQkJCSZtYWxpZHBfY3J0Y19mdW5jcywgTlVMTCk7CisKKwlpZiAoIXJldCkgewor CQlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtYWxpZHAtPmNydGMsICZtYWxpZHBfY3J0Y19oZWxwZXJf ZnVuY3MpOworCQlyZXR1cm4gMDsKKwl9CisKK2NydGNfY2xlYW51cF9wbGFuZXM6CisJbWFsaWRw X2RlX3BsYW5lc19kZXN0cm95KGRybSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQ4OGEyCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMKQEAgLTAs MCArMSw1MDAgQEAKKy8qCisgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0u Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRl ZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91 bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRv IHRoZSB0ZXJtcworICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKiBBUk0gTWFsaSBEUDUw MC9EUDU1MC9EUDY1MCBLTVMvRFJNIGRyaXZlcgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgorCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2Nt YV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisKKyNpbmNsdWRlICJtYWxpZHBf ZHJ2LmgiCisjaW5jbHVkZSAibWFsaWRwX3JlZ3MuaCIKKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIK KworI2RlZmluZSBNQUxJRFBfQ09ORl9WQUxJRF9USU1FT1VUCTI1MAorCisvKgorICogc2V0IHRo ZSAiY29uZmlnIHZhbGlkIiBiaXQgYW5kIHdhaXQgdW50aWwgdGhlIGhhcmR3YXJlIGFjdHMgb24g aXQKKyAqLworc3RhdGljIGludCBtYWxpZHBfc2V0X2FuZF93YWl0X2NvbmZpZ192YWxpZChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0t PmRldl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ ZGV2OworCWludCByZXQ7CisKKwlod2Rldi0+c2V0X2NvbmZpZ192YWxpZChod2Rldik7CisJLyog ZG9uJ3Qgd2FpdCBmb3IgY29uZmlnX3ZhbGlkIGZsYWcgaWYgd2UgYXJlIGluIGNvbmZpZyBtb2Rl ICovCisJaWYgKGh3ZGV2LT5pbl9jb25maWdfbW9kZShod2RldikpCisJCXJldHVybiAwOworCisJ cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWFsaWRwLT53cSwKKwkJCWF0 b21pY19yZWFkKCZtYWxpZHAtPmNvbmZpZ192YWxpZCkgPT0gMSwKKwkJCW1zZWNzX3RvX2ppZmZp ZXMoTUFMSURQX0NPTkZfVkFMSURfVElNRU9VVCkpOworCisJcmV0dXJuIChyZXQgPiAwKSA/IDAg OiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfb3V0cHV0X3BvbGxfY2hhbmdl ZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAg PSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKG1hbGlkcC0+ZmJkZXYpCisJCWRybV9mYmRldl9j bWFfaG90cGx1Z19ldmVudChtYWxpZHAtPmZiZGV2KTsKK30KKworc3RhdGljIHZvaWQgbWFsaWRw X2F0b21pY19jb21taXRfaHdfZG9uZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHN0YXRlLT5kZXY7CisJaW50IHJldCA9IG1hbGlk cF9zZXRfYW5kX3dhaXRfY29uZmlnX3ZhbGlkKGRybSk7CisKKwlpZiAocmV0KQorCQlEUk1fREVC VUdfRFJJVkVSKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgdXBkYXRlZCBjb25maWd1cmF0aW9uXG4i KTsKKworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lKHN0YXRlKTsKK30KKworc3Rh dGljIHZvaWQgbWFsaWRwX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHN0YXRlLT5kZXY7CisKKwlk cm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0sIHN0YXRlKTsKKwlk cm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3RhdGUpOworCWRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBzdGF0ZSwgZmFsc2UpOworCisJbWFs aWRwX2F0b21pY19jb21taXRfaHdfZG9uZShzdGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl93 YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51 cF9wbGFuZXMoZHJtLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfY29uZmln X2hlbHBlcl9mdW5jcyBtYWxpZHBfbW9kZV9jb25maWdfaGVscGVycyA9IHsKKwkuYXRvbWljX2Nv bW1pdF90YWlsID0gbWFsaWRwX2F0b21pY19jb21taXRfdGFpbCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIG1hbGlkcF9tb2RlX2NvbmZpZ19mdW5jcyA9 IHsKKwkuZmJfY3JlYXRlID0gZHJtX2ZiX2NtYV9jcmVhdGUsCisJLm91dHB1dF9wb2xsX2NoYW5n ZWQgPSBtYWxpZHBfb3V0cHV0X3BvbGxfY2hhbmdlZCwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0 b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9j b21taXQsCit9OworCitzdGF0aWMgaW50IG1hbGlkcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBjcnRjKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICpt YWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diA9IG1hbGlkcC0+ZGV2OworCisJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9E RV9CTE9DSywKKwkJCSAgICAgaHdkZXYtPm1hcC5kZV9pcnFfbWFwLnZzeW5jX2lycSk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAq bWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYgPSBtYWxpZHAtPmRldjsKKworCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQ X0RFX0JMT0NLLAorCQkJICAgICAgaHdkZXYtPm1hcC5kZV9pcnFfbWFwLnZzeW5jX2lycSk7Cit9 CisKK3N0YXRpYyBpbnQgbWFsaWRwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlp bnQgcmV0OworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwor CXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCisJZHJtX21v ZGVfY29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gaHdk ZXYtPm1pbl9saW5lX3NpemU7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gaHdkZXYt Pm1pbl9saW5lX3NpemU7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBod2Rldi0+bWF4 X2xpbmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBod2Rldi0+bWF4X2xp bmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1hbGlkcF9tb2RlX2NvbmZpZ19m dW5jczsKKwlkcm0tPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2YXRlID0gJm1hbGlkcF9tb2RlX2Nv bmZpZ19oZWxwZXJzOworCisJcmV0ID0gbWFsaWRwX2NydGNfaW5pdChkcm0pOworCWlmIChyZXQp IHsKKwkJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWxpZHBfaXJxX2luaXQoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaXJxX2RlLCBpcnFfc2UsIHJldCA9IDA7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCS8q IGZldGNoIHRoZSBpbnRlcnJ1cHRzIGZyb20gRFQgKi8KKwlpcnFfZGUgPSBwbGF0Zm9ybV9nZXRf aXJxX2J5bmFtZShwZGV2LCAiREUiKTsKKwlpZiAoaXJxX2RlIDwgMCkgeworCQlEUk1fRVJST1Io Im5vICdERScgSVJRIHNwZWNpZmllZCFcbiIpOworCQlyZXR1cm4gaXJxX2RlOworCX0KKwlpcnFf c2UgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiU0UiKTsKKwlpZiAoaXJxX3NlIDwg MCkgeworCQlEUk1fRVJST1IoIm5vICdTRScgSVJRIHNwZWNpZmllZCFcbiIpOworCQlyZXR1cm4g aXJxX3NlOworCX0KKworCXJldCA9IG1hbGlkcF9kZV9pcnFfaW5pdChkcm0sIGlycV9kZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1hbGlkcF9zZV9pcnFfaW5pdChkcm0s IGlycV9zZSk7CisJaWYgKHJldCkgeworCQltYWxpZHBfZGVfaXJxX2ZpbmkoZHJtKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFsaWRwX2xhc3Rj bG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxp ZHAgPSBkcm0tPmRldl9wcml2YXRlOworCisJZHJtX2ZiZGV2X2NtYV9yZXN0b3JlX21vZGUobWFs aWRwLT5mYmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZv cHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVs ZWFzZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKyNpZmRl ZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5k aWYKKwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisJLmxsc2VlayA9IG5v b3BfbGxzZWVrLAorCS5tbWFwID0gZHJtX2dlbV9jbWFfbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2RyaXZlciBtYWxpZHBfZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklW RVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfCBEUklWRVJfQVRPTUlDIHwKKwkJCSAgIERSSVZFUl9Q UklNRSwKKwkubGFzdGNsb3NlID0gbWFsaWRwX2xhc3RjbG9zZSwKKwkuZ2V0X3ZibGFua19jb3Vu dGVyID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gbWFsaWRw X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbWFsaWRwX2Rpc2FibGVfdmJsYW5r LAorCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKKwkuZ2VtX3Zt X29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gZHJtX2dlbV9jbWFf ZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1fY21hX2R1bWJfbWFwX29m ZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisJLnByaW1lX2hh bmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5wcmltZV9mZF90b19o YW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9 IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmlt ZV9pbXBvcnQsCisJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9n ZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9w cmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV92bWFwID0gZHJtX2dlbV9jbWFfcHJp bWVfdm1hcCwKKwkuZ2VtX3ByaW1lX3Z1bm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwK KwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAorCS5mb3BzID0gJmZv cHMsCisJLm5hbWUgPSAibWFsaS1kcCIsCisJLmRlc2MgPSAiQVJNIE1hbGkgRGlzcGxheSBQcm9j ZXNzb3IgZHJpdmVyIiwKKwkuZGF0ZSA9ICIyMDE2MDEwNiIsCisJLm1ham9yID0gMSwKKwkubWlu b3IgPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgIG1hbGlkcF9k cm1fb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNTAwIiwK KwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTAwXQorCX0sCisJeworCQkuY29tcGF0 aWJsZSA9ICJhcm0sbWFsaS1kcDU1MCIsCisJCS5kYXRhID0gJm1hbGlkcF9kZXZpY2VbTUFMSURQ XzU1MF0KKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiYXJtLG1hbGktZHA2NTAiLAorCQkuZGF0 YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF82NTBdCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBtYWxpZHBfZHJtX29mX21hdGNoKTsKKworI2RlZmluZSBNQVhfT1VUUFVU X0NIQU5ORUxTCTMKKworc3RhdGljIGludCBtYWxpZHBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlz dHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwOworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl djsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisJLyogbnVtYmVyIG9mIGxpbmVzIGZvciB0aGUgUiwgRyBhbmQgQiBvdXRwdXQgKi8KKwl1 OCBvdXRwdXRfd2lkdGhbTUFYX09VVFBVVF9DSEFOTkVMU107CisJaW50IHJldCA9IDAsIGk7CisJ dTMyIHZlcnNpb24sIG91dF9kZXB0aCA9IDA7CisKKwltYWxpZHAgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKm1hbGlkcCksIEdGUF9LRVJORUwpOworCWlmICghbWFsaWRwKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWh3ZGV2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpod2RldiksIEdG UF9LRVJORUwpOworCWlmICghaHdkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBj b3B5IHRoZSBhc3NvY2lhdGVkIGRhdGEgZnJvbSBtYWxpZHBfZHJtX29mX21hdGNoIHRvIGF2b2lk CisJICogaGF2aW5nIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIE9GIG5vZGUgYWZ0ZXIgYmlu ZGluZworCSAqLworCW1lbWNweShod2Rldiwgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldiks IHNpemVvZigqaHdkZXYpKTsKKwltYWxpZHAtPmRldiA9IGh3ZGV2OworCisJSU5JVF9MSVNUX0hF QUQoJm1hbGlkcC0+ZXZlbnRfbGlzdCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWh3ZGV2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGh3ZGV2LT5yZWdzKSkgeworCQlEUk1fRVJS T1IoIkZhaWxlZCB0byBtYXAgY29udHJvbCByZWdpc3RlcnMgYXJlYVxuIik7CisJCXJldHVybiBQ VFJfRVJSKGh3ZGV2LT5yZWdzKTsKKwl9CisKKwlod2Rldi0+cGNsayA9IGRldm1fY2xrX2dldChk ZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihod2Rldi0+cGNsaykpCisJCXJldHVybiBQVFJfRVJS KGh3ZGV2LT5wY2xrKTsKKworCWh3ZGV2LT5hY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImFjbGsi KTsKKwlpZiAoSVNfRVJSKGh3ZGV2LT5hY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPmFj bGspOworCisJaHdkZXYtPm1jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAibWNsayIpOworCWlmIChJ U19FUlIoaHdkZXYtPm1jbGspKQorCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+bWNsayk7CisKKwlo d2Rldi0+cHhsY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInB4bGNsayIpOworCWlmIChJU19FUlIo aHdkZXYtPnB4bGNsaykpCisJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5weGxjbGspOworCisJLyog R2V0IHRoZSBvcHRpb25hbCBmcmFtZWJ1ZmZlciBtZW1vcnkgcmVzb3VyY2UgKi8KKwlyZXQgPSBv Zl9yZXNlcnZlZF9tZW1fZGV2aWNlX2luaXQoZGV2KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5P REVWKQorCQlyZXR1cm4gcmV0OworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmbWFsaWRwX2RyaXZl ciwgZGV2KTsKKwlpZiAoIWRybSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGFsbG9jX2Zh aWw7CisJfQorCisJLyogRW5hYmxlIEFQQiBjbG9jayBpbiBvcmRlciB0byBnZXQgYWNjZXNzIHRv IHRoZSByZWdpc3RlcnMgKi8KKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPnBjbGspOworCS8q CisJICogRW5hYmxlIEFYSSBjbG9jayBhbmQgbWFpbiBjbG9jayBzbyB0aGF0IHByZWZldGNoIGNh biBzdGFydCBvbmNlCisJICogdGhlIHJlZ2lzdGVycyBhcmUgc2V0CisJICovCisJY2xrX3ByZXBh cmVfZW5hYmxlKGh3ZGV2LT5hY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPm1jbGsp OworCisJcmV0ID0gaHdkZXYtPnF1ZXJ5X2h3KGh3ZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9F UlJPUigiSW52YWxpZCBIVyBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBxdWVyeV9od19mYWls OworCX0KKworCXZlcnNpb24gPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19i YXNlICsgTUFMSURQX0RFX0NPUkVfSUQpOworCURSTV9JTkZPKCJmb3VuZCBBUk0gTWFsaS1EUCUz eCB2ZXJzaW9uIHIlZHAlZFxuIiwgdmVyc2lvbiA+PiAxNiwKKwkJICh2ZXJzaW9uID4+IDEyKSAm IDB4ZiwgKHZlcnNpb24gPj4gOCkgJiAweGYpOworCisJLyogc2V0IHRoZSBudW1iZXIgb2YgbGlu ZXMgdXNlZCBmb3Igb3V0cHV0IG9mIFJHQiBkYXRhICovCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVh ZF91OF9hcnJheShkZXYtPm9mX25vZGUsCisJCQkJCSJhcm0sbWFsaWRwLW91dHB1dC1wb3J0LWxp bmVzIiwKKwkJCQkJb3V0cHV0X3dpZHRoLCBNQVhfT1VUUFVUX0NIQU5ORUxTKTsKKwlpZiAocmV0 KQorCQlnb3RvIHF1ZXJ5X2h3X2ZhaWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX09VVFBVVF9D SEFOTkVMUzsgaSsrKQorCQlvdXRfZGVwdGggPSAob3V0X2RlcHRoIDw8IDgpIHwgKG91dHB1dF93 aWR0aFtpXSAmIDB4Zik7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBvdXRfZGVwdGgsIGh3ZGV2 LT5tYXAub3V0X2RlcHRoX2Jhc2UpOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IG1hbGlkcDsKKwlk ZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOworCWF0b21pY19zZXQoJm1hbGlkcC0+Y29uZmlnX3Zh bGlkLCAwKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWxpZHAtPndxKTsKKworCXJldCA9IG1h bGlkcF9pbml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gaW5pdF9mYWlsOworCisJcmV0 ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQpCisJCWdvdG8gcmVnaXN0ZXJf ZmFpbDsKKworCS8qIFNldCB0aGUgQ1JUQydzIHBvcnQgc28gdGhhdCB0aGUgZW5jb2RlciBjb21w b25lbnQgY2FuIGZpbmQgaXQgKi8KKwltYWxpZHAtPmNydGMucG9ydCA9IG9mX2dyYXBoX2dldF9u ZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVMTCk7CisKKwlyZXQgPSBjb21wb25lbnRfYmlu ZF9hbGwoZGV2LCBkcm0pOworCW9mX25vZGVfcHV0KG1hbGlkcC0+Y3J0Yy5wb3J0KTsKKworCWlm IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBhbGwgY29tcG9uZW50c1xuIik7 CisJCWdvdG8gYmluZF9mYWlsOworCX0KKworCXJldCA9IG1hbGlkcF9pcnFfaW5pdChwZGV2KTsK KwlpZiAocmV0IDwgMCkKKwkJZ290byBpcnFfaW5pdF9mYWlsOworCisJcmV0ID0gZHJtX3ZibGFu a19pbml0KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7CisJaWYgKHJldCA8IDApIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOworCQlnb3RvIHZi bGFua19mYWlsOworCX0KKworCWRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOworCisJbWFsaWRw LT5mYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdChkcm0sIDMyLCBkcm0tPm1vZGVfY29uZmlnLm51 bV9jcnRjLAorCQkJCQkgICBkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOworCisJaWYg KElTX0VSUihtYWxpZHAtPmZiZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKG1hbGlkcC0+ZmJkZXYp OworCQltYWxpZHAtPmZiZGV2ID0gTlVMTDsKKwkJZ290byBmYmRldl9mYWlsOworCX0KKworCWRy bV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOworCXJldHVybiAwOworCitmYmRldl9mYWlsOgor CWRybV92YmxhbmtfY2xlYW51cChkcm0pOwordmJsYW5rX2ZhaWw6CisJbWFsaWRwX3NlX2lycV9m aW5pKGRybSk7CisJbWFsaWRwX2RlX2lycV9maW5pKGRybSk7CitpcnFfaW5pdF9mYWlsOgorCWNv bXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJtKTsKK2JpbmRfZmFpbDoKKwlkcm1fZGV2X3VucmVn aXN0ZXIoZHJtKTsKK3JlZ2lzdGVyX2ZhaWw6CisJbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRy bSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK2luaXRfZmFpbDoKKwlkcm0tPmRl dl9wcml2YXRlID0gTlVMTDsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKK3F1ZXJ5X2h3 X2ZhaWw6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+ cGNsayk7CisJZHJtX2Rldl91bnJlZihkcm0pOworYWxsb2NfZmFpbDoKKwlvZl9yZXNlcnZlZF9t ZW1fZGV2aWNlX3JlbGVhc2UoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IG1hbGlkcF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBt YWxpZHAtPmRldjsKKworCWlmIChtYWxpZHAtPmZiZGV2KSB7CisJCWRybV9mYmRldl9jbWFfZmlu aShtYWxpZHAtPmZiZGV2KTsKKwkJbWFsaWRwLT5mYmRldiA9IE5VTEw7CisJfQorCWRybV9rbXNf aGVscGVyX3BvbGxfZmluaShkcm0pOworCW1hbGlkcF9zZV9pcnFfZmluaShkcm0pOworCW1hbGlk cF9kZV9pcnFfZmluaShkcm0pOworCWRybV92YmxhbmtfY2xlYW51cChkcm0pOworCWNvbXBvbmVu dF91bmJpbmRfYWxsKGRldiwgZHJtKTsKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKKwltYWxp ZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p OworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwp OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+bWNsayk7CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGh3ZGV2LT5hY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPnBjbGsp OworCWRybV9kZXZfdW5yZWYoZHJtKTsKKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2Uo ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtYWxp ZHBfbWFzdGVyX29wcyA9IHsKKwkuYmluZCA9IG1hbGlkcF9iaW5kLAorCS51bmJpbmQgPSBtYWxp ZHBfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtYWxpZHBfY29tcGFyZV9kZXYoc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkYXRh OworCisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBucDsKK30KKworc3RhdGljIGludCBtYWxpZHBf cGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnBvcnQsICplcDsKKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9 IE5VTEw7CisKKwlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CS8qIHRoZXJlIGlzIG9ubHkgb25lIG91dHB1dCBwb3J0IGluc2lkZSBlYWNoIGRldmljZSwgZmlu ZCBpdCAqLworCWVwID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQocGRldi0+ZGV2Lm9mX25v ZGUsIE5VTEwpOworCWlmICghZXApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFvZl9kZXZp Y2VfaXNfYXZhaWxhYmxlKGVwKSkgeworCQlvZl9ub2RlX3B1dChlcCk7CisJCXJldHVybiAtRU5P REVWOworCX0KKworCS8qIGFkZCB0aGUgcmVtb3RlIGVuY29kZXIgcG9ydCBhcyBjb21wb25lbnQg Ki8KKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7CisJb2Zfbm9k ZV9wdXQoZXApOworCWlmICghcG9ydCB8fCAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwb3J0KSkg eworCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJY29tcG9u ZW50X21hdGNoX2FkZCgmcGRldi0+ZGV2LCAmbWF0Y2gsIG1hbGlkcF9jb21wYXJlX2RldiwgcG9y dCk7CisJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goJnBkZXYtPmRldiwg Jm1hbGlkcF9tYXN0ZXJfb3BzLAorCQkJCQkgICAgICAgbWF0Y2gpOworfQorCitzdGF0aWMgaW50 IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK Kwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9vcHMpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWxpZHBfcGxh dGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSBtYWxpZHBfcGxhdGZvcm1fcHJvYmUsCisJLnJl bW92ZQkJPSBtYWxpZHBfcGxhdGZvcm1fcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0g Im1hbGktZHAiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBtYWxpZHBfZHJtX29mX21hdGNoLAorCX0s Cit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hbGlkcF9wbGF0Zm9ybV9kcml2ZXIpOwor CitNT0RVTEVfQVVUSE9SKCJMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4iKTsKK01P RFVMRV9ERVNDUklQVElPTigiQVJNIE1hbGkgRFAgRFJNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zY2FlMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfZHJ2LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIChDKSBDT1BZUklH SFQgMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTGl2 aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2Yg dGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCisgKiBvZiBzdWNoIEdOVSBsaWNl bmNlLgorICoKKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUwL0RQNjUwIEtNUy9EUk0gZHJpdmVyIHN0 cnVjdHVyZXMKKyAqLworCisjaWZuZGVmIF9fTUFMSURQX0RSVl9IX18KKyNkZWZpbmUgX19NQUxJ RFBfRFJWX0hfXworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93 YWl0Lmg+CisjaW5jbHVkZSAibWFsaWRwX2h3LmgiCisKK3N0cnVjdCBtYWxpZHBfZHJtIHsKKwlz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRl djsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7CisJc3RydWN0IGRybV9jcnRjIGNydGM7 CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJYXRvbWljX3QgY29uZmlnX3ZhbGlkOworfTsKKwor I2RlZmluZSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBt YWxpZHBfZHJtLCBjcnRjKQorCitzdHJ1Y3QgbWFsaWRwX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3Bs YW5lIGJhc2U7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2OworCWNvbnN0IHN0cnVj dCBtYWxpZHBfbGF5ZXIgKmxheWVyOworCS8qIHNpemUgb2YgdGhlIHJlcXVpcmVkIHJvdGF0aW9u IG1lbW9yeSB3aGVuIHBsYW5lIGlzIHJvdGF0ZWQgKi8KKwl1MzIgcm90bWVtX3NpemU7Cit9Owor CisjZGVmaW5lIHRvX21hbGlkcF9wbGFuZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG1hbGlk cF9wbGFuZSwgYmFzZSkKKworaW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKTsKK3ZvaWQgbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pOworaW50IG1hbGlkcF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7 CisKKy8qIG9mdGVuIHVzZWQgY29tYmluYXRpb24gb2Ygcm90YXRpb25hbCBiaXRzICovCisjZGVm aW5lIE1BTElEUF9ST1RBVEVEX01BU0sJKEJJVChEUk1fUk9UQVRFXzkwKSB8IEJJVChEUk1fUk9U QVRFXzI3MCkpCisKKyNlbmRpZiAgLyogX19NQUxJRFBfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxMzJmMQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKQEAgLTAsMCAr MSw2OTEgQEAKKy8qCisgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0 byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRo ZSB0ZXJtcworICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKiBBUk0gTWFsaSBEUDUwMC9E UDU1MC9EUDY1MCBoYXJkd2FyZSBtYW5pcHVsYXRpb24gcm91dGluZXMuIFRoaXMgaXMgd2hlcmUK KyAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUgaGFyZHdh cmUgaXMgYmVpbmcgZGVhbHQgd2l0aAorICogaW4gYW4gYXR0ZW1wdCB0byBwcm92aWRlIHRvIHRo ZSByZXN0IG9mIHRoZSBkcml2ZXIgY29kZSBhIHVuaWZpZWQgdmlldworICovCisKKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby9kaXNw bGF5X3RpbWluZy5oPgorCisjaW5jbHVkZSAibWFsaWRwX2Rydi5oIgorI2luY2x1ZGUgIm1hbGlk cF9ody5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRw NTAwX2RlX2Zvcm1hdHNbXSA9IHsKKwkvKiAgICBmb3VyY2MsICAgbGF5ZXJzIHN1cHBvcnRpbmcg dGhlIGZvcm1hdCwgICAgIGludGVybmFsIGlkICAqLworCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAx MCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMCB9LAorCXsgRFJN X0ZPUk1BVF9BQkdSMjEwMTAxMCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJ Q1MyLCAgMSB9LAorCXsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJ Q1MxIHwgREVfR1JBUEhJQ1MyLCAgMiB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSODg4OCwgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMyB9LAorCXsgRFJNX0ZPUk1BVF9Y UkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNCB9LAor CXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JB UEhJQ1MyLCAgNSB9LAorCXsgRFJNX0ZPUk1BVF9SR0I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBI SUNTMSB8IERFX0dSQVBISUNTMiwgIDYgfSwKKwl7IERSTV9GT1JNQVRfQkdSODg4LCBERV9WSURF TzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA3IH0sCisJeyBEUk1fRk9STUFUX1JH QkE1NTUxLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA4IH0sCisJ eyBEUk1fRk9STUFUX0FCR1IxNTU1LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQ SElDUzIsICA5IH0sCisJeyBEUk1fRk9STUFUX1JHQjU2NSwgREVfVklERU8xIHwgREVfR1JBUEhJ Q1MxIHwgREVfR1JBUEhJQ1MyLCAxMCB9LAorCXsgRFJNX0ZPUk1BVF9CR1I1NjUsIERFX1ZJREVP MSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgMTEgfSwKKwl7IERSTV9GT1JNQVRfVVlW WSwgREVfVklERU8xLCAxMiB9LAorCXsgRFJNX0ZPUk1BVF9ZVVlWLCBERV9WSURFTzEsIDEzIH0s CisJeyBEUk1fRk9STUFUX05WMTIsIERFX1ZJREVPMSwgMTQgfSwKKwl7IERSTV9GT1JNQVRfWVVW NDIwLCBERV9WSURFTzEsIDE1IH0sCit9OworCisjZGVmaW5lIE1BTElEUF9JRChfX2dyb3VwLCBf X2Zvcm1hdCkgXAorCSgoKChfX2dyb3VwKSAmIDB4NykgPDwgMykgfCAoKF9fZm9ybWF0KSAmIDB4 NykpCisKKyNkZWZpbmUgTUFMSURQX0NPTU1PTl9GT1JNQVRTIFwKKwkvKiAgICBmb3VyY2MsICAg bGF5ZXJzIHN1cHBvcnRpbmcgdGhlIGZvcm1hdCwgICAgICBpbnRlcm5hbCBpZCAgICovIFwKKwl7 IERSTV9GT1JNQVRfQVJHQjIxMDEwMTAsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJ REVPMiwgTUFMSURQX0lEKDAsIDApIH0sIFwKKwl7IERSTV9GT1JNQVRfQUJHUjIxMDEwMTAsIERF X1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDEpIH0sIFwK Kwl7IERSTV9GT1JNQVRfUkdCQTEwMTAxMDIsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X1ZJREVPMiwgTUFMSURQX0lEKDAsIDIpIH0sIFwKKwl7IERSTV9GT1JNQVRfQkdSQTEwMTAxMDIs IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDMpIH0s IFwKKwl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMSwgMCkgfSwgXAorCXsgRFJNX0ZPUk1BVF9B QkdSODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgxLCAxKSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQkE4ODg4LCBERV9WSURFTzEg fCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDIpIH0s IFwKKwl7IERSTV9GT1JNQVRfQkdSQTg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMSwgMykgfSwgXAorCXsgRFJNX0ZPUk1BVF9Y UkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgyLCAwKSB9LCBcCisJeyBEUk1fRk9STUFUX1hCR1I4ODg4LCBERV9WSURFTzEg fCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDEpIH0s IFwKKwl7IERSTV9GT1JNQVRfUkdCWDg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMiwgMikgfSwgXAorCXsgRFJNX0ZPUk1BVF9C R1JYODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgyLCAzKSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQjg4OCwgREVfVklERU8xIHwg REVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMywgMCkgfSwgXAorCXsgRFJNX0ZP Uk1BVF9CR1I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQ X0lEKDMsIDEpIH0sIFwKKwl7IERSTV9GT1JNQVRfUkdCQTU1NTEsIERFX1ZJREVPMSB8IERFX0dS QVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDQsIDApIH0sIFwKKwl7IERSTV9GT1JNQVRf QUJHUjE1NTUsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lE KDQsIDEpIH0sIFwKKwl7IERSTV9GT1JNQVRfUkdCNTY1LCBERV9WSURFTzEgfCBERV9HUkFQSElD UzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAyKSB9LCBcCisJeyBEUk1fRk9STUFUX0JHUjU2 NSwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNCwgMykg fSwgXAorCXsgRFJNX0ZPUk1BVF9ZVVlWLCBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9J RCg1LCAyKSB9LAlcCisJeyBEUk1fRk9STUFUX1VZVlksIERFX1ZJREVPMSB8IERFX1ZJREVPMiwg TUFMSURQX0lEKDUsIDMpIH0sCVwKKwl7IERSTV9GT1JNQVRfTlYxMiwgREVfVklERU8xIHwgREVf VklERU8yLCBNQUxJRFBfSUQoNSwgNikgfSwJXAorCXsgRFJNX0ZPUk1BVF9ZVVY0MjAsIERFX1ZJ REVPMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDcpIH0KKworc3RhdGljIGNvbnN0IHN0cnVj dCBtYWxpZHBfaW5wdXRfZm9ybWF0IG1hbGlkcDU1MF9kZV9mb3JtYXRzW10gPSB7CisJTUFMSURQ X0NPTU1PTl9GT1JNQVRTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfbGF5ZXIg bWFsaWRwNTAwX2xheWVyc1tdID0geworCXsgREVfVklERU8xLCBNQUxJRFA1MDBfREVfTFZfQkFT RSwgTUFMSURQNTAwX0RFX0xWX1BUUl9CQVNFIH0sCisJeyBERV9HUkFQSElDUzEsIE1BTElEUDUw MF9ERV9MRzFfQkFTRSwgTUFMSURQNTAwX0RFX0xHMV9QVFJfQkFTRSB9LAorCXsgREVfR1JBUEhJ Q1MyLCBNQUxJRFA1MDBfREVfTEcyX0JBU0UsIE1BTElEUDUwMF9ERV9MRzJfUFRSX0JBU0UgfSwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2xheWVyIG1hbGlkcDU1MF9sYXllcnNb XSA9IHsKKwl7IERFX1ZJREVPMSwgTUFMSURQNTUwX0RFX0xWMV9CQVNFLCBNQUxJRFA1NTBfREVf TFYxX1BUUl9CQVNFIH0sCisJeyBERV9HUkFQSElDUzEsIE1BTElEUDU1MF9ERV9MR19CQVNFLCBN QUxJRFA1NTBfREVfTEdfUFRSX0JBU0UgfSwKKwl7IERFX1ZJREVPMiwgTUFMSURQNTUwX0RFX0xW Ml9CQVNFLCBNQUxJRFA1NTBfREVfTFYyX1BUUl9CQVNFIH0sCisJeyBERV9TTUFSVCwgTUFMSURQ NTUwX0RFX0xTX0JBU0UsIE1BTElEUDU1MF9ERV9MU19QVFJfQkFTRSB9LAorfTsKKworI2RlZmlu ZSBNQUxJRFBfREVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVAk1CisKK3N0YXRpYyBpbnQgbWFsaWRw NTAwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sKKwl1MzIgY29u ZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1MDBfQ09ORklHX0lEKTsKKwkvKiBiaXQg NCBvZiB0aGUgQ09ORklHX0lEIHJlZ2lzdGVyIGhvbGRzIHRoZSBsaW5lIHNpemUgbXVsdGlwbGll ciAqLworCXU4IGxuX3NpemVfbXVsdCA9IGNvbmYgJiAweDEwID8gMiA6IDE7CisKKwlod2Rldi0+ bWluX2xpbmVfc2l6ZSA9IDI7CisJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl8ySyAqIGxuX3Np emVfbXVsdDsKKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gU1pfMUsgKiA2NCAqIGxuX3Np emVfbXVsdDsKKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gMDsgLyogbm8gc2Vjb25kIHJv dGF0aW9uIG1lbW9yeSBiYW5rICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFs aWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikK K3sKKwl1MzIgc3RhdHVzLCBjb3VudCA9IDEwMDsKKworCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2 LCBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQNTAwX0RDX0NPTlRST0wpOworCXdoaWxl IChjb3VudCkgeworCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5k Y19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCQlpZiAoKHN0YXR1cyAmIE1BTElEUDUwMF9E Q19DT05GSUdfUkVRKSA9PSBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSkKKwkJCWJyZWFrOworCQkv KgorCQkgKiBlbnRlcmluZyBjb25maWcgbW9kZSBjYW4gdGFrZSBhcyBsb25nIGFzIHRoZSByZW5k ZXJpbmcKKwkJICogb2YgYSBmdWxsIGZyYW1lLCBoZW5jZSB0aGUgbG9uZyBzbGVlcCBoZXJlCisJ CSAqLworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOworCQljb3VudC0tOworCX0KKwlXQVJO KGNvdW50ID09IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZpZyBtb2RlIik7Cit9CisK K3N0YXRpYyB2b2lkIG1hbGlkcDUwMF9sZWF2ZV9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYpCit7CisJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7CisKKwltYWxpZHBf aHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQNTAwX0RD X0NPTlRST0wpOworCXdoaWxlIChjb3VudCkgeworCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZCho d2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCQlpZiAoKHN0 YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKSA9PSAwKQorCQkJYnJlYWs7CisJCXVzbGVl cF9yYW5nZSgxMDAsIDEwMDApOworCQljb3VudC0tOworCX0KKwlXQVJOKGNvdW50ID09IDAsICJ0 aW1lb3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKK30KKworc3RhdGljIGJvb2wgbWFs aWRwNTAwX2luX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sK Kwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5t YXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwlpZiAoKHN0YXR1cyAmIE1BTElEUDUw MF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSkKKwkJcmV0dXJuIHRy dWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcDUwMF9zZXRfY29u ZmlnX3ZhbGlkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sKKwltYWxpZHBfaHdf c2V0Yml0cyhod2RldiwgTUFMSURQX0NGR19WQUxJRCwgTUFMSURQNTAwX0NPTkZJR19WQUxJRCk7 Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcDUwMF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMDsKKwor CW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUDUwMF9EQ19DTEVBUl9NQVNLLCBNQUxJ RFA1MDBfRENfQ09OVFJPTCk7CisJaWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19IU1lO Q19ISUdIKQorCQl2YWwgfD0gTUFMSURQNTAwX0hTWU5DUE9MOworCWlmIChtb2RlLT5mbGFncyAm IERJU1BMQVlfRkxBR1NfVlNZTkNfSElHSCkKKwkJdmFsIHw9IE1BTElEUDUwMF9WU1lOQ1BPTDsK Kwl2YWwgfD0gTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQ7CisJbWFsaWRwX2h3X3Nl dGJpdHMoaHdkZXYsIHZhbCwgTUFMSURQNTAwX0RDX0NPTlRST0wpOworCisJLyoKKwkgKiBNYWxp LURQNTAwIGVuY29kZXMgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgorCSAqICAgIC0g cmVkICAgQCBNQUxJRFA1MDBfQkdORF9DT0xPUlsxMjowXQorCSAqICAgIC0gZ3JlZW4gQCBNQUxJ RFA1MDBfQkdORF9DT0xPUlsyNzoxNl0KKwkgKiAgICAtIGJsdWUgIEAgKE1BTElEUDUwMF9CR05E X0NPTE9SICsgNClbMTI6MF0KKwkgKi8KKwl2YWwgPSAoKE1BTElEUF9CR05EX0NPTE9SX0cgJiAw eGZmZikgPDwgMTYpIHwKKwkgICAgICAoTUFMSURQX0JHTkRfQ09MT1JfUiAmIDB4ZmZmKTsKKwlt YWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTAwX0JHTkRfQ09MT1IpOworCW1hbGlk cF9od193cml0ZShod2RldiwgTUFMSURQX0JHTkRfQ09MT1JfQiwgTUFMSURQNTAwX0JHTkRfQ09M T1IgKyA0KTsKKworCXZhbCA9IE1BTElEUF9ERV9IX0ZST05UUE9SQ0gobW9kZS0+aGZyb250X3Bv cmNoKSB8CisJCU1BTElEUF9ERV9IX0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7CisJbWFs aWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBf REVfSF9USU1JTkdTKTsKKworCXZhbCA9IE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+ dmZyb250X3BvcmNoKSB8CisJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19wb3Jj aCk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0Ug KyBNQUxJRFBfREVfVl9USU1JTkdTKTsKKworCXZhbCA9IE1BTElEUF9ERV9IX1NZTkNXSURUSCht b2RlLT5oc3luY19sZW4pIHwKKwkJTUFMSURQX0RFX1ZfU1lOQ1dJRFRIKG1vZGUtPnZzeW5jX2xl bik7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0Ug KyBNQUxJRFBfREVfU1lOQ19XSURUSCk7CisKKwl2YWwgPSBNQUxJRFBfREVfSF9BQ1RJVkUobW9k ZS0+aGFjdGl2ZSkgfCBNQUxJRFBfREVfVl9BQ1RJVkUobW9kZS0+dmFjdGl2ZSk7CisJbWFsaWRw X2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVf SFZfQUNUSVZFKTsKKworCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfSU5URVJMQUNF RCkKKwkJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBN QUxJRFBfREVfRElTUExBWV9GVU5DKTsKKwllbHNlCisJCW1hbGlkcF9od19jbGVhcmJpdHMoaHdk ZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKK30K Kworc3RhdGljIGludCBtYWxpZHA1MDBfcm90bWVtX3JlcXVpcmVkKHN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KQoreworCXVuc2lnbmVkIGludCBk ZXB0aDsKKwlpbnQgYnBwOworCisJLyogUkdCODg4IG9yIEJHUjg4OCBjYW4ndCBiZSByb3RhdGVk ICovCisJaWYgKChmbXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHx8IChmbXQgPT0gRFJNX0ZPUk1B VF9CR1I4ODgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogRWFjaCBsYXllciBuZWVk cyBlbm91Z2ggcm90YXRpb24gbWVtb3J5IHRvIGZpdCA4IGxpbmVzCisJICogd29ydGggb2YgcGl4 ZWwgZGF0YS4gUmVxdWlyZWQgc2l6ZSBpcyB0aGVuOgorCSAqICAgIHNpemUgPSByb3RhdGVkX3dp ZHRoICogKGJwcCAvIDgpICogODsKKwkgKi8KKwlkcm1fZmJfZ2V0X2JwcF9kZXB0aChmbXQsICZk ZXB0aCwgJmJwcCk7CisKKwlyZXR1cm4gdyAqIGJwcDsKK30KKworc3RhdGljIGludCBtYWxpZHA1 NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBjb25m ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUDU1MF9DT05GSUdfSUQpOworCXU4IGxuX3Np emUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7CisKKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9 IDI7CisKKwlzd2l0Y2ggKGxuX3NpemUpIHsKKwljYXNlIDA6CisJCWh3ZGV2LT5tYXhfbGluZV9z aXplID0gU1pfMks7CisJCS8qIHR3byBiYW5rcyBvZiA2NEtCIGZvciByb3RhdGlvbiBtZW1vcnkg Ki8KKwkJcnNpemUgPSA2NDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlod2Rldi0+bWF4X2xpbmVf c2l6ZSA9IFNaXzRLOworCQkvKiB0d28gYmFua3Mgb2YgMTI4S0IgZm9yIHJvdGF0aW9uIG1lbW9y eSAqLworCQlyc2l6ZSA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlod2Rldi0+bWF4X2xp bmVfc2l6ZSA9IDEyODA7CisJCS8qIHR3byBiYW5rcyBvZiA0MEtCIGZvciByb3RhdGlvbiBtZW1v cnkgKi8KKwkJcnNpemUgPSA0MDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiByZXNlcnZlZCB2 YWx1ZSAqLworCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDA7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF0gPSBod2Rldi0+cm90YXRpb25fbWVtb3J5 WzFdID0gcnNpemUgKiBTWl8xSzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFsaWRw NTUwX2VudGVyX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sK Kwl1MzIgc3RhdHVzLCBjb3VudCA9IDEwMDsKKworCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBN QUxJRFA1NTBfRENfQ09ORklHX1JFUSwgTUFMSURQNTUwX0RDX0NPTlRST0wpOworCXdoaWxlIChj b3VudCkgeworCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19i YXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCQlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9EQ19D T05GSUdfUkVRKSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkKKwkJCWJyZWFrOworCQkvKgor CQkgKiBlbnRlcmluZyBjb25maWcgbW9kZSBjYW4gdGFrZSBhcyBsb25nIGFzIHRoZSByZW5kZXJp bmcKKwkJICogb2YgYSBmdWxsIGZyYW1lLCBoZW5jZSB0aGUgbG9uZyBzbGVlcCBoZXJlCisJCSAq LworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOworCQljb3VudC0tOworCX0KKwlXQVJOKGNv dW50ID09IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZpZyBtb2RlIik7Cit9CisKK3N0 YXRpYyB2b2lkIG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYpCit7CisJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7CisKKwltYWxpZHBfaHdf Y2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSwgTUFMSURQNTUwX0RDX0NP TlRST0wpOworCXdoaWxlIChjb3VudCkgeworCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2Rl diwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCQlpZiAoKHN0YXR1 cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSAwKQorCQkJYnJlYWs7CisJCXVzbGVlcF9y YW5nZSgxMDAsIDEwMDApOworCQljb3VudC0tOworCX0KKwlXQVJOKGNvdW50ID09IDAsICJ0aW1l b3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKK30KKworc3RhdGljIGJvb2wgbWFsaWRw NTUwX2luX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sKKwl1 MzIgc3RhdHVzOworCisJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAu ZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9E Q19DT05GSUdfUkVRKSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkKKwkJcmV0dXJuIHRydWU7 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcDU1MF9zZXRfY29uZmln X3ZhbGlkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sKKwltYWxpZHBfaHdfc2V0 Yml0cyhod2RldiwgTUFMSURQX0NGR19WQUxJRCwgTUFMSURQNTUwX0NPTkZJR19WQUxJRCk7Cit9 CisKK3N0YXRpYyB2b2lkIG1hbGlkcDU1MF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gTUFMSURQX0RF X0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQ7CisKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwg TUFMSURQNTUwX0RFX0NPTlRST0wpOworCS8qCisJICogTWFsaS1EUDU1MCBhbmQgTWFsaS1EUDY1 MCBlbmNvZGUgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgorCSAqICAgLSByZWQgICBA IE1BTElEUDU1MF9ERV9CR05EX0NPTE9SWzIzOjE2XQorCSAqICAgLSBncmVlbiBAIE1BTElEUDU1 MF9ERV9CR05EX0NPTE9SWzE1OjhdCisJICogICAtIGJsdWUgIEAgTUFMSURQNTUwX0RFX0JHTkRf Q09MT1JbNzowXQorCSAqCisJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgbGVhc3Qgc2lnbmlm aWNhbnQgNCBiaXRzIGZyb20gdGhlIGRlZmF1bHQKKwkgKiBNQUxJRFBfQkdORF9DT0xPUl94IHZh bHVlcworCSAqLworCXZhbCA9ICgoKE1BTElEUF9CR05EX0NPTE9SX1IgPj4gNCkgJiAweGZmKSA8 PCAxNikgfAorCSAgICAgICgoKE1BTElEUF9CR05EX0NPTE9SX0cgPj4gNCkgJiAweGZmKSA8PCA4 KSB8CisJICAgICAgKChNQUxJRFBfQkdORF9DT0xPUl9CID4+IDQpICYgMHhmZik7CisJbWFsaWRw X2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SKTsKKworCXZhbCA9 IE1BTElEUF9ERV9IX0ZST05UUE9SQ0gobW9kZS0+aGZyb250X3BvcmNoKSB8CisJCU1BTElEUF9E RV9IX0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2 LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9USU1JTkdTKTsKKwor CXZhbCA9IE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+dmZyb250X3BvcmNoKSB8CisJ CU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfVl9USU1J TkdTKTsKKworCXZhbCA9IE1BTElEUF9ERV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwK KwkJTUFMSURQX0RFX1ZfU1lOQ1dJRFRIKG1vZGUtPnZzeW5jX2xlbik7CisJaWYgKG1vZGUtPmZs YWdzICYgRElTUExBWV9GTEFHU19IU1lOQ19ISUdIKQorCQl2YWwgfD0gTUFMSURQNTUwX0hTWU5D UE9MOworCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNfSElHSCkKKwkJdmFs IHw9IE1BTElEUDU1MF9WU1lOQ1BPTDsKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFM SURQNTUwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKKworCXZhbCA9IE1B TElEUF9ERV9IX0FDVElWRShtb2RlLT5oYWN0aXZlKSB8IE1BTElEUF9ERV9WX0FDVElWRShtb2Rl LT52YWN0aXZlKTsKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlO R1NfQkFTRSArIE1BTElEUF9ERV9IVl9BQ1RJVkUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRElT UExBWV9GTEFHU19JTlRFUkxBQ0VEKQorCQltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQ X0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9ERV9ESVNQTEFZX0ZVTkMpOworCWVsc2UKKwkJbWFs aWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9E RV9ESVNQTEFZX0ZVTkMpOworfQorCitzdGF0aWMgaW50IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWly ZWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MTYgdywgdTE2IGgsIHUzMiBmbXQp Cit7CisJdTMyIGJ5dGVzX3Blcl9jb2w7CisKKwkvKiByYXcgUkdCODg4IG9yIEJHUjg4OCBjYW4n dCBiZSByb3RhdGVkICovCisJaWYgKChmbXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHx8IChmbXQg PT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZm10 KSB7CisJLyogOCBsaW5lcyBhdCA0IGJ5dGVzIHBlciBwaXhlbCAqLworCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBEUk1f Rk9STUFUX1JHQkExMDEwMTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjoKKwljYXNl IERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2Ug RFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERS TV9GT1JNQVRfUkdCWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkvKiAxNiBsaW5lcyBh dCAyIGJ5dGVzIHBlciBwaXhlbCAqLworCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKKwljYXNl IERSTV9GT1JNQVRfQUJHUjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERS TV9GT1JNQVRfQkdSNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1B VF9ZVVlWOgorCQlieXRlc19wZXJfY29sID0gMzI7CisJCWJyZWFrOworCS8qIDE2IGxpbmVzIGF0 IDEuNSBieXRlcyBwZXIgcGl4ZWwgKi8KKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwljYXNlIERS TV9GT1JNQVRfWVVWNDIwOgorCQlieXRlc19wZXJfY29sID0gMjQ7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiB3ICogYnl0ZXNfcGVyX2NvbDsK K30KKworc3RhdGljIGludCBtYWxpZHA2NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2KQoreworCXUzMiBjb25mID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUDU1 MF9DT05GSUdfSUQpOworCXU4IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7CisK Kwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDQ7CisKKwlzd2l0Y2ggKGxuX3NpemUpIHsKKwljYXNl IDA6CisJY2FzZSAyOgorCQkvKiByZXNlcnZlZCB2YWx1ZXMgKi8KKwkJaHdkZXYtPm1heF9saW5l X3NpemUgPSAwOworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIDE6CisJCWh3ZGV2LT5tYXhfbGlu ZV9zaXplID0gU1pfNEs7CisJCS8qIHR3byBiYW5rcyBvZiAxMjhLQiBmb3Igcm90YXRpb24gbWVt b3J5ICovCisJCXJzaXplID0gMTI4OworCQlicmVhazsKKwljYXNlIDM6CisJCWh3ZGV2LT5tYXhf bGluZV9zaXplID0gMjU2MDsKKwkJLyogdHdvIGJhbmtzIG9mIDgwS0IgZm9yIHJvdGF0aW9uIG1l bW9yeSAqLworCQlyc2l6ZSA9IDgwOworCX0KKworCWh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF0g PSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gcnNpemUgKiBTWl8xSzsKKwlyZXR1cm4gMDsK K30KKworY29uc3Qgc3RydWN0IG1hbGlkcF9od19kZXZpY2UgbWFsaWRwX2RldmljZVtNQUxJRFBf TUFYX0RFVklDRVNdID0geworCVtNQUxJRFBfNTAwXSA9IHsKKwkJLm1hcCA9IHsKKwkJCS5zZV9i YXNlID0gTUFMSURQNTAwX1NFX0JBU0UsCisJCQkuZGNfYmFzZSA9IE1BTElEUDUwMF9EQ19CQVNF LAorCQkJLm91dF9kZXB0aF9iYXNlID0gTUFMSURQNTAwX09VVFBVVF9ERVBUSCwKKwkJCS5mZWF0 dXJlcyA9IDAsCS8qIG5vIENMRUFSSVJRIHJlZ2lzdGVyICovCisJCQkubl9sYXllcnMgPSBBUlJB WV9TSVpFKG1hbGlkcDUwMF9sYXllcnMpLAorCQkJLmxheWVycyA9IG1hbGlkcDUwMF9sYXllcnMs CisJCQkuZGVfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVS UlVOIHwKKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VSUiB8CisJCQkJCSAgICBNQUxJ RFA1MDBfREVfSVJRX1ZTWU5DIHwKKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFfR0xPQkFMLAor CQkJCS52c3luY19pcnEgPSBNQUxJRFA1MDBfREVfSVJRX1ZTWU5DLAorCQkJfSwKKwkJCS5zZV9p cnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElEUDUwMF9TRV9JUlFfQ09ORl9NT0RFLAor CQkJCS52c3luY19pcnEgPSAwLAorCQkJfSwKKwkJCS5kY19pcnFfbWFwID0geworCQkJCS5pcnFf bWFzayA9IE1BTElEUDUwMF9ERV9JUlFfQ09ORl9WQUxJRCwKKwkJCQkudnN5bmNfaXJxID0gTUFM SURQNTAwX0RFX0lSUV9DT05GX1ZBTElELAorCQkJfSwKKwkJCS5pbnB1dF9mb3JtYXRzID0gbWFs aWRwNTAwX2RlX2Zvcm1hdHMsCisJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlfU0laRShtYWxp ZHA1MDBfZGVfZm9ybWF0cyksCisJCX0sCisJCS5xdWVyeV9odyA9IG1hbGlkcDUwMF9xdWVyeV9o dywKKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlLAor CQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUsCisJCS5p bl9jb25maWdfbW9kZSA9IG1hbGlkcDUwMF9pbl9jb25maWdfbW9kZSwKKwkJLnNldF9jb25maWdf dmFsaWQgPSBtYWxpZHA1MDBfc2V0X2NvbmZpZ192YWxpZCwKKwkJLm1vZGVzZXQgPSBtYWxpZHA1 MDBfbW9kZXNldCwKKwkJLnJvdG1lbV9yZXF1aXJlZCA9IG1hbGlkcDUwMF9yb3RtZW1fcmVxdWly ZWQsCisJfSwKKwlbTUFMSURQXzU1MF0gPSB7CisJCS5tYXAgPSB7CisJCQkuc2VfYmFzZSA9IE1B TElEUDU1MF9TRV9CQVNFLAorCQkJLmRjX2Jhc2UgPSBNQUxJRFA1NTBfRENfQkFTRSwKKwkJCS5v dXRfZGVwdGhfYmFzZSA9IE1BTElEUDU1MF9ERV9PVVRQVVRfREVQVEgsCisJCQkuZmVhdHVyZXMg PSBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUSwKKwkJCS5uX2xheWVycyA9IEFSUkFZX1NJWkUo bWFsaWRwNTUwX2xheWVycyksCisJCQkubGF5ZXJzID0gbWFsaWRwNTUwX2xheWVycywKKwkJCS5k ZV9pcnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElEUF9ERV9JUlFfVU5ERVJSVU4gfAor CQkJCQkgICAgTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKKwkJCQkudnN5bmNfaXJxID0gTUFMSURQ NTUwX0RFX0lSUV9WU1lOQywKKwkJCX0sCisJCQkuc2VfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21h c2sgPSBNQUxJRFA1NTBfU0VfSVJRX0VPVyB8CisJCQkJCSAgICBNQUxJRFA1NTBfU0VfSVJRX0FY SV9FUlIsCisJCQl9LAorCQkJLmRjX2lycV9tYXAgPSB7CisJCQkJLmlycV9tYXNrID0gTUFMSURQ NTUwX0RDX0lSUV9DT05GX1ZBTElELAorCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfRENfSVJR X0NPTkZfVkFMSUQsCisJCQl9LAorCQkJLmlucHV0X2Zvcm1hdHMgPSBtYWxpZHA1NTBfZGVfZm9y bWF0cywKKwkJCS5uX2lucHV0X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9kZV9mb3Jt YXRzKSwKKwkJfSwKKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNTUwX3F1ZXJ5X2h3LAorCQkuZW50ZXJf Y29uZmlnX21vZGUgPSBtYWxpZHA1NTBfZW50ZXJfY29uZmlnX21vZGUsCisJCS5sZWF2ZV9jb25m aWdfbW9kZSA9IG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZSwKKwkJLmluX2NvbmZpZ19tb2Rl ID0gbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlLAorCQkuc2V0X2NvbmZpZ192YWxpZCA9IG1hbGlk cDU1MF9zZXRfY29uZmlnX3ZhbGlkLAorCQkubW9kZXNldCA9IG1hbGlkcDU1MF9tb2Rlc2V0LAor CQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZCwKKwl9LAorCVtN QUxJRFBfNjUwXSA9IHsKKwkJLm1hcCA9IHsKKwkJCS5zZV9iYXNlID0gTUFMSURQNTUwX1NFX0JB U0UsCisJCQkuZGNfYmFzZSA9IE1BTElEUDU1MF9EQ19CQVNFLAorCQkJLm91dF9kZXB0aF9iYXNl ID0gTUFMSURQNTUwX0RFX09VVFBVVF9ERVBUSCwKKwkJCS5mZWF0dXJlcyA9IE1BTElEUF9SRUdN QVBfSEFTX0NMRUFSSVJRLAorCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1NTBfbGF5 ZXJzKSwKKwkJCS5sYXllcnMgPSBtYWxpZHA1NTBfbGF5ZXJzLAorCQkJLmRlX2lycV9tYXAgPSB7 CisJCQkJLmlycV9tYXNrID0gTUFMSURQX0RFX0lSUV9VTkRFUlJVTiB8CisJCQkJCSAgICBNQUxJ RFA2NTBfREVfSVJRX0RSSUZUIHwKKwkJCQkJICAgIE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCisJ CQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCisJCQl9LAorCQkJLnNlX2ly cV9tYXAgPSB7CisJCQkJLmlycV9tYXNrID0gTUFMSURQNTUwX1NFX0lSUV9FT1cgfAorCQkJCQkg ICAgTUFMSURQNTUwX1NFX0lSUV9BWElfRVJSLAorCQkJfSwKKwkJCS5kY19pcnFfbWFwID0gewor CQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKKwkJCQkudnN5bmNf aXJxID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElELAorCQkJfSwKKwkJCS5pbnB1dF9mb3Jt YXRzID0gbWFsaWRwNTUwX2RlX2Zvcm1hdHMsCisJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlf U0laRShtYWxpZHA1NTBfZGVfZm9ybWF0cyksCisJCX0sCisJCS5xdWVyeV9odyA9IG1hbGlkcDY1 MF9xdWVyeV9odywKKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2VudGVyX2NvbmZp Z19tb2RlLAorCQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21v ZGUsCisJCS5pbl9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9pbl9jb25maWdfbW9kZSwKKwkJLnNl dF9jb25maWdfdmFsaWQgPSBtYWxpZHA1NTBfc2V0X2NvbmZpZ192YWxpZCwKKwkJLm1vZGVzZXQg PSBtYWxpZHA1NTBfbW9kZXNldCwKKwkJLnJvdG1lbV9yZXF1aXJlZCA9IG1hbGlkcDU1MF9yb3Rt ZW1fcmVxdWlyZWQsCisJfSwKK307CisKK3U4IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKGNvbnN0 IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAsCisJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZv cm1hdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXAtPm5faW5w dXRfZm9ybWF0czsgaSsrKSB7CisJCWlmICgoKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5sYXllciAm IGxheWVyX2lkKSA9PSBsYXllcl9pZCkgJiYKKwkJICAgIChtYXAtPmlucHV0X2Zvcm1hdHNbaV0u Zm9ybWF0ID09IGZvcm1hdCkpCisJCQlyZXR1cm4gbWFwLT5pbnB1dF9mb3JtYXRzW2ldLmlkOwor CX0KKworCXJldHVybiBNQUxJRFBfSU5WQUxJRF9GT1JNQVRfSUQ7Cit9CisKK3N0YXRpYyB2b2lk IG1hbGlkcF9od19jbGVhcl9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBi bG9jaywgdTMyIGlycSkKK3sKKwl1MzIgYmFzZSA9IG1hbGlkcF9nZXRfYmxvY2tfYmFzZShod2Rl diwgYmxvY2spOworCisJaWYgKGh3ZGV2LT5tYXAuZmVhdHVyZXMgJiBNQUxJRFBfUkVHTUFQX0hB U19DTEVBUklSUSkKKwkJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBf UkVHX0NMRUFSSVJRKTsKKwllbHNlCisJCW1hbGlkcF9od193cml0ZShod2RldiwgaXJxLCBiYXNl ICsgTUFMSURQX1JFR19TVEFUVVMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX2Rl X2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFy ZzsKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXY7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFw ICpkZTsKKwl1MzIgc3RhdHVzLCBtYXNrLCBkY19zdGF0dXM7CisJaXJxcmV0dXJuX3QgcmV0ID0g SVJRX05PTkU7CisKKwlpZiAoIWRybS0+ZGV2X3ByaXZhdGUpCisJCXJldHVybiBJUlFfSEFORExF RDsKKworCWh3ZGV2ID0gbWFsaWRwLT5kZXY7CisJZGUgPSAmaHdkZXYtPm1hcC5kZV9pcnFfbWFw OworCisJLyogZmlyc3QgaGFuZGxlIHRoZSBjb25maWcgdmFsaWQgSVJRICovCisJZGNfc3RhdHVz ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdf U1RBVFVTKTsKKwlpZiAoZGNfc3RhdHVzICYgaHdkZXYtPm1hcC5kY19pcnFfbWFwLnZzeW5jX2ly cSkgeworCQkvKiB3ZSBoYXZlIGEgcGFnZSBmbGlwIGV2ZW50ICovCisJCWF0b21pY19zZXQoJm1h bGlkcC0+Y29uZmlnX3ZhbGlkLCAxKTsKKwkJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFM SURQX0RDX0JMT0NLLCBkY19zdGF0dXMpOworCQlyZXQgPSBJUlFfV0FLRV9USFJFQUQ7CisJfQor CisJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUF9SRUdfU1RBVFVTKTsKKwlp ZiAoIShzdGF0dXMgJiBkZS0+aXJxX21hc2spKQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9IG1h bGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFBfUkVHX01BU0tJUlEpOworCXN0YXR1cyAmPSBtYXNr OworCWlmIChzdGF0dXMgJiBkZS0+dnN5bmNfaXJxKQorCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5r KCZtYWxpZHAtPmNydGMpOworCisJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RF X0JMT0NLLCBzdGF0dXMpOworCisJcmV0dXJuIChyZXQgPT0gSVJRX05PTkUpID8gSVJRX0hBTkRM RUQgOiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfZGVfaXJxX3RocmVhZF9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g YXJnOworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCisJ d2FrZV91cCgmbWFsaWRwLT53cSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBt YWxpZHBfZGVfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSkKK3sKKwlz dHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKwlpbnQgcmV0OworCisJLyogZW5z dXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCisJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3 ZGV2LCBNQUxJRFBfREVfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCW1hbGlkcF9od19jbGVhcl9pcnEo aHdkZXYsIE1BTElEUF9ERV9CTE9DSywgMHhmZmZmZmZmZik7CisJbWFsaWRwX2h3X2Rpc2FibGVf aXJxKGh3ZGV2LCBNQUxJRFBfRENfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCW1hbGlkcF9od19jbGVh cl9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywgMHhmZmZmZmZmZik7CisKKwlyZXQgPSBkZXZt X3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRybS0+ZGV2LCBpcnEsIG1hbGlkcF9kZV9pcnEsCisJCQkJ CW1hbGlkcF9kZV9pcnFfdGhyZWFkX2hhbmRsZXIsCisJCQkJCUlSUUZfU0hBUkVELCAibWFsaWRw LWRlIiwgZHJtKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbnN0 YWxsIERFIElSUSBoYW5kbGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmaXJzdCBl bmFibGUgdGhlIERDIGJsb2NrIElSUXMgKi8KKwltYWxpZHBfaHdfZW5hYmxlX2lycShod2Rldiwg TUFMSURQX0RDX0JMT0NLLAorCQkJICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2sp OworCisJLyogbm93IGVuYWJsZSB0aGUgREUgYmxvY2sgSVJRcyAqLworCW1hbGlkcF9od19lbmFi bGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCisJCQkgICAgIGh3ZGV2LT5tYXAuZGVfaXJx X21hcC5pcnFfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtYWxpZHBfZGVfaXJxX2Zp bmkoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBt YWxpZHAtPmRldjsKKworCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RFX0JM T0NLLAorCQkJICAgICAgaHdkZXYtPm1hcC5kZV9pcnFfbWFwLmlycV9tYXNrKTsKKwltYWxpZHBf aHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywKKwkJCSAgICAgIGh3ZGV2LT5t YXAuZGNfaXJxX21hcC5pcnFfbWFzayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBf c2VfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g YXJnOworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCXUzMiBzdGF0dXMs IG1hc2s7CisKKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9i YXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCWlmICghKHN0YXR1cyAmIGh3ZGV2LT5tYXAuc2Vf aXJxX21hcC5pcnFfbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW1hc2sgPSBtYWxpZHBf aHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9iYXNlICsgTUFMSURQX1JFR19NQVNLSVJRKTsK KwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9iYXNlICsgTUFM SURQX1JFR19TVEFUVVMpOworCXN0YXR1cyAmPSBtYXNrOworCS8qIFRvRG86IHN0YXR1cyBkZWNv ZGluZyBhbmQgZmlyaW5nIHVwIG9mIFZTWU5DIGFuZCBwYWdlIGZsaXAgZXZlbnRzICovCisKKwlt YWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIHN0YXR1cyk7CisKKwly ZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfc2VfaXJx X3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisKK2ludCBtYWxpZHBfc2VfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg aW50IGlycSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKwlpbnQg cmV0OworCisJLyogZW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCisJbWFsaWRwX2h3 X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCW1hbGlk cF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgMHhmZmZmZmZmZik7CisKKwly ZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRybS0+ZGV2LCBpcnEsIG1hbGlkcF9zZV9p cnEsCisJCQkJCW1hbGlkcF9zZV9pcnFfdGhyZWFkX2hhbmRsZXIsCisJCQkJCUlSUUZfU0hBUkVE LCAibWFsaWRwLXNlIiwgZHJtKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBpbnN0YWxsIFNFIElSUSBoYW5kbGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlt YWxpZHBfaHdfZW5hYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLAorCQkJICAgICBod2Rl di0+bWFwLnNlX2lycV9tYXAuaXJxX21hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWFs aWRwX3NlX2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisKKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYs IE1BTElEUF9TRV9CTE9DSywKKwkJCSAgICAgIGh3ZGV2LT5tYXAuc2VfaXJxX21hcC5pcnFfbWFz ayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5oIGIvZHJp dmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xNDE3NDNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9t YWxpZHBfaHcuaApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqCisgKiAoQykgQ09QWVJJR0hUIDIw MTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNl IGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKKyAqIG9mIHN1 Y2ggR05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFAgaGFyZHdhcmUgbWFuaXB1bGF0aW9u IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgX19NQUxJRFBfSFdfSF9fCisjZGVmaW5lIF9fTUFM SURQX0hXX0hfXworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSAibWFsaWRw X3JlZ3MuaCIKKworc3RydWN0IHZpZGVvbW9kZTsKK3N0cnVjdCBjbGs7CisKKy8qIE1hbGkgRFAg SVAgYmxvY2tzICovCitlbnVtIHsKKwlNQUxJRFBfREVfQkxPQ0sgPSAwLAorCU1BTElEUF9TRV9C TE9DSywKKwlNQUxJRFBfRENfQkxPQ0sKK307CisKKy8qIE1hbGkgRFAgbGF5ZXIgSURzICovCitl bnVtIHsKKwlERV9WSURFTzEgPSBCSVQoMCksCisJREVfR1JBUEhJQ1MxID0gQklUKDEpLAorCURF X0dSQVBISUNTMiA9IEJJVCgyKSwgLyogdXNlZCBvbmx5IGluIERQNTAwICovCisJREVfVklERU8y ID0gQklUKDMpLAorCURFX1NNQVJUID0gQklUKDQpLAorfTsKKworc3RydWN0IG1hbGlkcF9pbnB1 dF9mb3JtYXQgeworCXUzMiBmb3JtYXQ7CQkvKiBEUk0gZm91cmNjICovCisJdTggbGF5ZXI7CQkv KiBiaXRtYXNrIG9mIGxheWVycyBzdXBwb3J0aW5nIGl0ICovCisJdTggaWQ7CQkJLyogdXNlZCBp bnRlcm5hbGx5ICovCit9OworCisjZGVmaW5lIE1BTElEUF9JTlZBTElEX0ZPUk1BVF9JRAkweGZm CisKKy8qCisgKiBoaWRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlZ2lzdGVyIG1hcHMKKyAq IGJ5IHVzaW5nIGEgY29tbW9uIHN0cnVjdHVyZSB0byBob2xkIHRoZQorICogYmFzZSByZWdpc3Rl ciBvZmZzZXRzCisgKi8KKworc3RydWN0IG1hbGlkcF9pcnFfbWFwIHsKKwl1MzIgaXJxX21hc2s7 CQkvKiBtYXNrIG9mIElSUXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUgYmxvY2sgKi8KKwl1 MzIgdnN5bmNfaXJxOwkJLyogSVJRIGJpdCB1c2VkIGZvciBzaWduYWxpbmcgZHVyaW5nIFZTWU5D ICovCit9OworCitzdHJ1Y3QgbWFsaWRwX2xheWVyIHsKKwl1MTYgaWQ7CQkJLyogbGF5ZXIgSUQg Ki8KKwl1MTYgYmFzZTsJCS8qIGFkZHJlc3Mgb2Zmc2V0IGZvciB0aGUgcmVnaXN0ZXIgYmFuayAq LworCXUxNiBwdHI7CQkvKiBhZGRyZXNzIG9mZnNldCBmb3IgdGhlIHBvaW50ZXIgcmVnaXN0ZXIg Ki8KK307CisKKy8qIHJlZ21hcCBmZWF0dXJlcyAqLworI2RlZmluZSBNQUxJRFBfUkVHTUFQX0hB U19DTEVBUklSUQkoMSA8PCAwKQorCitzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCB7CisJLyogYWRk cmVzcyBvZmZzZXQgb2YgdGhlIERFIHJlZ2lzdGVyIGJhbmsgKi8KKwkvKiBpcyBhbHdheXMgMHgw MDAwICovCisJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhlIFNFIHJlZ2lzdGVycyBiYW5rICovCisJ Y29uc3QgdTE2IHNlX2Jhc2U7CisJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhlIERDIHJlZ2lzdGVy cyBiYW5rICovCisJY29uc3QgdTE2IGRjX2Jhc2U7CisKKwkvKiBhZGRyZXNzIG9mZnNldCBmb3Ig dGhlIG91dHB1dCBkZXB0aCByZWdpc3RlciAqLworCWNvbnN0IHUxNiBvdXRfZGVwdGhfYmFzZTsK KworCS8qIGJpdG1hcCB3aXRoIHJlZ2lzdGVyIG1hcCBmZWF0dXJlcyAqLworCWNvbnN0IHU4IGZl YXR1cmVzOworCisJLyogbGlzdCBvZiBzdXBwb3J0ZWQgbGF5ZXJzICovCisJY29uc3QgdTggbl9s YXllcnM7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciAqbGF5ZXJzOworCisJY29uc3Qgc3Ry dWN0IG1hbGlkcF9pcnFfbWFwIGRlX2lycV9tYXA7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFf bWFwIHNlX2lycV9tYXA7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIGRjX2lycV9tYXA7 CisKKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXRzIGZvciBlYWNoIGxheWVyICov CisJY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgKmlucHV0X2Zvcm1hdHM7CisJY29u c3QgdTggbl9pbnB1dF9mb3JtYXRzOworfTsKKworc3RydWN0IG1hbGlkcF9od19kZXZpY2Ugewor CWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwIG1hcDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7 CisKKwkvKiBBUEIgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpwY2xrOworCS8qIEFYSSBjbG9jayAq LworCXN0cnVjdCBjbGsgKmFjbGs7CisJLyogbWFpbiBjbG9jayBmb3IgZGlzcGxheSBjb3JlICov CisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBwaXhlbCBjbG9jayBmb3IgZGlzcGxheSBjb3JlICov CisJc3RydWN0IGNsayAqcHhsY2xrOworCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgZHJpdmVyIGlu c3RhbmNlIGFnYWluc3QgdGhlIGhhcmR3YXJlIGJpdHMKKwkgKi8KKwlpbnQgKCpxdWVyeV9odyko c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKKworCS8qCisJICogU2V0IHRoZSBoYXJk d2FyZSBpbnRvIGNvbmZpZyBtb2RlLCByZWFkeSB0byBhY2NlcHQgbW9kZSBjaGFuZ2VzCisJICov CisJdm9pZCAoKmVudGVyX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYpOworCisJLyoKKwkgKiBUZWxsIGhhcmR3YXJlIHRvIGV4aXQgY29uZmlndXJhdGlvbiBtb2Rl CisJICovCisJdm9pZCAoKmxlYXZlX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYpOworCisJLyoKKwkgKiBRdWVyeSBpZiBoYXJkd2FyZSBpcyBpbiBjb25maWd1cmF0 aW9uIG1vZGUKKwkgKi8KKwlib29sICgqaW5fY29uZmlnX21vZGUpKHN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2Rldik7CisKKwkvKgorCSAqIFNldCBjb25maWd1cmF0aW9uIHZhbGlkIGZsYWcg Zm9yIGhhcmR3YXJlIHBhcmFtZXRlcnMgdGhhdCBjYW4KKwkgKiBiZSBjaGFuZ2VkIG91dHNpZGUg dGhlIGNvbmZpZ3VyYXRpb24gbW9kZS4gSGFyZHdhcmUgd2lsbCB1c2UKKwkgKiB0aGUgbmV3IHNl dHRpbmdzIHdoZW4gY29uZmlnIHZhbGlkIGlzIHNldCBhZnRlciB0aGUgZW5kIG9mIHRoZQorCSAq IGN1cnJlbnQgYnVmZmVyIHNjYW5vdXQKKwkgKi8KKwl2b2lkICgqc2V0X2NvbmZpZ192YWxpZCko c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKKworCS8qCisJICogU2V0IGEgbmV3IG1v ZGUgaW4gaGFyZHdhcmUuIFJlcXVpcmVzIHRoZSBoYXJkd2FyZSB0byBiZSBpbgorCSAqIGNvbmZp Z3VyYXRpb24gbW9kZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisJICovCisJdm9p ZCAoKm1vZGVzZXQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3RydWN0IHZpZGVv bW9kZSAqbSk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgcm90YXRpb24gbWVt b3J5IGdpdmVuIHRoZSBhY3RpdmUgYXJlYQorCSAqIGFuZCB0aGUgYnVmZmVyIGZvcm1hdC4KKwkg Ki8KKwlpbnQgKCpyb3RtZW1fcmVxdWlyZWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KTsKKworCXU4IGZlYXR1cmVzOworCisJdTggbWluX2xp bmVfc2l6ZTsKKwl1MTYgbWF4X2xpbmVfc2l6ZTsKKworCS8qIHNpemUgb2YgbWVtb3J5IHVzZWQg Zm9yIHJvdGF0aW5nIGxheWVycywgdXAgdG8gdHdvIGJhbmtzIGF2YWlsYWJsZSAqLworCXUzMiBy b3RhdGlvbl9tZW1vcnlbMl07Cit9OworCisvKiBTdXBwb3J0ZWQgdmFyaWFudHMgb2YgdGhlIGhh cmR3YXJlICovCitlbnVtIHsKKwlNQUxJRFBfNTAwID0gMCwKKwlNQUxJRFBfNTUwLAorCU1BTElE UF82NTAsCisJLyoga2VlcCB0aGUgbmV4dCBlbnRyeSBsYXN0ICovCisJTUFMSURQX01BWF9ERVZJ Q0VTCit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IG1hbGlkcF9od19kZXZpY2UgbWFsaWRwX2Rl dmljZVtNQUxJRFBfTUFYX0RFVklDRVNdOworCitzdGF0aWMgaW5saW5lIHUzMiBtYWxpZHBfaHdf cmVhZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiByZWcpCit7CisJcmV0dXJu IHJlYWRsKGh3ZGV2LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hbGlk cF9od193cml0ZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsCisJCQkJICAgdTMyIHZh bHVlLCB1MzIgcmVnKQoreworCXdyaXRlbCh2YWx1ZSwgaHdkZXYtPnJlZ3MgKyByZWcpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgbWFsaWRwX2h3X3NldGJpdHMoc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2LAorCQkJCSAgICAgdTMyIG1hc2ssIHUzMiByZWcpCit7CisJdTMyIGRhdGEg PSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVnKTsKKworCWRhdGEgfD0gbWFzazsKKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIGRhdGEsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWxp ZHBfaHdfY2xlYXJiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwKKwkJCQkgICAg ICAgdTMyIG1hc2ssIHUzMiByZWcpCit7CisJdTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2Rl diwgcmVnKTsKKworCWRhdGEgJj0gfm1hc2s7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBkYXRh LCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtYWxpZHBfZ2V0X2Jsb2NrX2Jhc2Uoc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAorCQkJCQl1OCBibG9jaykKK3sKKwlzd2l0Y2gg KGJsb2NrKSB7CisJY2FzZSBNQUxJRFBfU0VfQkxPQ0s6CisJCXJldHVybiBod2Rldi0+bWFwLnNl X2Jhc2U7CisJY2FzZSBNQUxJRFBfRENfQkxPQ0s6CisJCXJldHVybiBod2Rldi0+bWFwLmRjX2Jh c2U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWxpZHBfaHdf ZGlzYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAorCQkJCQkgdTggYmxv Y2ssIHUzMiBpcnEpCit7CisJdTMyIGJhc2UgPSBtYWxpZHBfZ2V0X2Jsb2NrX2Jhc2UoaHdkZXYs IGJsb2NrKTsKKworCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIGlycSwgYmFzZSArIE1BTElE UF9SRUdfTUFTS0lSUSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWxpZHBfaHdfZW5hYmxl X2lycShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsCisJCQkJCXU4IGJsb2NrLCB1MzIg aXJxKQoreworCXUzMiBiYXNlID0gbWFsaWRwX2dldF9ibG9ja19iYXNlKGh3ZGV2LCBibG9jayk7 CisKKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19NQVNL SVJRKTsKK30KKworaW50IG1hbGlkcF9kZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBpbnQgaXJxKTsKK3ZvaWQgbWFsaWRwX2RlX2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pOworaW50IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQg aXJxKTsKK3ZvaWQgbWFsaWRwX3NlX2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwor Cit1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21h cCAqbWFwLAorCQkJICAgdTggbGF5ZXJfaWQsIHUzMiBmb3JtYXQpOworCisvKgorICogYmFja2dy b3VuZCBjb2xvciBjb21wb25lbnRzIGFyZSBkZWZpbmVkIGFzIDEyYml0cyB2YWx1ZXMsCisgKiB0 aGV5IHdpbGwgYmUgc2hpZnRlZCByaWdodCB3aGVuIHN0b3JlZCBvbiBoYXJkd2FyZSB0aGF0Cisg KiBzdXBwb3J0cyBvbmx5IDhiaXRzIHBlciBjaGFubmVsCisgKi8KKyNkZWZpbmUgTUFMSURQX0JH TkRfQ09MT1JfUgkJMHgwMDAKKyNkZWZpbmUgTUFMSURQX0JHTkRfQ09MT1JfRwkJMHgwMDAKKyNk ZWZpbmUgTUFMSURQX0JHTkRfQ09MT1JfQgkJMHgwMDAKKworI2VuZGlmICAvKiBfX01BTElEUF9I V19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5j IGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZjM3MTg4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogKEMpIENP UFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9y OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlv dSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKKyAqIG9mIHN1Y2ggR05V IGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFAgcGxhbmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVz LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBl ci5oPgorCisjaW5jbHVkZSAibWFsaWRwX2h3LmgiCisjaW5jbHVkZSAibWFsaWRwX2Rydi5oIgor CisvKiBMYXllciBzcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE1BTElEUF9M QVlFUl9GT1JNQVQJCTB4MDAwCisjZGVmaW5lIE1BTElEUF9MQVlFUl9DT05UUk9MCQkweDAwNAor I2RlZmluZSAgIExBWUVSX0VOQUJMRQkJCSgxIDw8IDApCisjZGVmaW5lICAgTEFZRVJfUk9UX09G RlNFVAkJOAorI2RlZmluZSAgIExBWUVSX0hfRkxJUAkJCSgxIDw8IDEwKQorI2RlZmluZSAgIExB WUVSX1ZfRkxJUAkJCSgxIDw8IDExKQorI2RlZmluZSAgIExBWUVSX1JPVF9NQVNLCQkoMHhmIDw8 IDgpCisjZGVmaW5lIE1BTElEUF9MQVlFUl9TSVpFCQkweDAwYworI2RlZmluZSAgIExBWUVSX0hf VkFMKHgpCQkoKCh4KSAmIDB4MWZmZikgPDwgMCkKKyNkZWZpbmUgICBMQVlFUl9WX1ZBTCh4KQkJ KCgoeCkgJiAweDFmZmYpIDw8IDE2KQorI2RlZmluZSBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFCQkw eDAxMAorI2RlZmluZSBNQUxJRFBfTEFZRVJfT0ZGU0VUCQkweDAxNAorI2RlZmluZSBNQUxJRFBf TEFZRVJfU1RSSURFCQkweDAxOAorCitzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfZGVzdHJv eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lICptcCA9 IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7CisKKwlpZiAobXAtPmJhc2UuZmIpCisJCWRybV9mcmFt ZWJ1ZmZlcl91bnJlZmVyZW5jZShtcC0+YmFzZS5mYik7CisKKwlkcm1fcGxhbmVfaGVscGVyX2Rp c2FibGUocGxhbmUpOworCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5lKTsKKwlkZXZtX2tmcmVlKHBs YW5lLT5kZXYtPmRldiwgbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9m dW5jcyBtYWxpZHBfZGVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9t aWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVs cGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBtYWxpZHBfZGVfcGxhbmVfZGVzdHJveSwK KwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0 YXRlLAorfTsKKworc3RhdGljIGludCBtYWxpZHBfZGVfcGxhbmVfY2hlY2soc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCisJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0 cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKKwl1OCBmb3Jt YXRfaWQ7CisJdTMyIHNyY193LCBzcmNfaDsKKworCWlmICghc3RhdGUtPmNydGMgfHwgIXN0YXRl LT5mYikKKwkJcmV0dXJuIDA7CisKKwlmb3JtYXRfaWQgPSBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9p ZCgmbXAtPmh3ZGV2LT5tYXAsIG1wLT5sYXllci0+aWQsCisJCQkJCSAgICBzdGF0ZS0+ZmItPnBp eGVsX2Zvcm1hdCk7CisJaWYgKGZvcm1hdF9pZCA9PSBNQUxJRFBfSU5WQUxJRF9GT1JNQVRfSUQp CisJCXJldHVybiAtRUlOVkFMOworCisJc3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7CisJc3Jj X2ggPSBzdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwlpZiAoKHN0YXRlLT5jcnRjX3cgPiBtcC0+aHdk ZXYtPm1heF9saW5lX3NpemUpIHx8CisJICAgIChzdGF0ZS0+Y3J0Y19oID4gbXAtPmh3ZGV2LT5t YXhfbGluZV9zaXplKSB8fAorCSAgICAoc3RhdGUtPmNydGNfdyA8IG1wLT5od2Rldi0+bWluX2xp bmVfc2l6ZSkgfHwKKwkgICAgKHN0YXRlLT5jcnRjX2ggPCBtcC0+aHdkZXYtPm1pbl9saW5lX3Np emUpIHx8CisJICAgIChzdGF0ZS0+Y3J0Y193ICE9IHNyY193KSB8fCAoc3RhdGUtPmNydGNfaCAh PSBzcmNfaCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcGFja2VkIFJHQjg4OCAvIEJHUjg4 OCBjYW4ndCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgKi8KKwlpZiAoc3RhdGUtPnJvdGF0aW9uICE9 IEJJVChEUk1fUk9UQVRFXzApICYmCisJICAgIChzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCA9PSBE Uk1fRk9STUFUX1JHQjg4OCB8fAorCSAgICAgc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJN X0ZPUk1BVF9CR1I4ODgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1wLT5yb3RtZW1fc2l6ZSA9 IDA7CisJaWYgKHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKKwkJaW50 IHZhbDsKKworCQl2YWwgPSBtcC0+aHdkZXYtPnJvdG1lbV9yZXF1aXJlZChtcC0+aHdkZXYsIHN0 YXRlLT5jcnRjX2gsCisJCQkJCQkgc3RhdGUtPmNydGNfdywKKwkJCQkJCSBzdGF0ZS0+ZmItPnBp eGVsX2Zvcm1hdCk7CisJCWlmICh2YWwgPCAwKQorCQkJcmV0dXJuIHZhbDsKKworCQltcC0+cm90 bWVtX3NpemUgPSB2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlk cF9kZV9wbGFuZV91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKm9iajsKKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lICptcDsKKwljb25zdCBzdHJ1Y3QgbWFsaWRw X2h3X3JlZ21hcCAqbWFwOworCXU4IGZvcm1hdF9pZDsKKwl1MTYgcHRyOworCXUzMiBmb3JtYXQs IHNyY193LCBzcmNfaCwgZGVzdF93LCBkZXN0X2gsIHZhbCA9IDA7CisJaW50IG51bV9wbGFuZXMs IGk7CisKKwltcCA9IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7CisKKwltYXAgPSAmbXAtPmh3ZGV2 LT5tYXA7CisJZm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0OworCWZvcm1h dF9pZCA9IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKG1hcCwgbXAtPmxheWVyLT5pZCwgZm9ybWF0 KTsKKwludW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCk7CisKKwkvKiBj b252ZXJ0IHNyYyB2YWx1ZXMgZnJvbSBRMTYgZml4ZWQgcG9pbnQgdG8gaW50ZWdlciAqLworCXNy Y193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNjsKKwlzcmNfaCA9IHBsYW5lLT5zdGF0ZS0+ c3JjX2ggPj4gMTY7CisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9UQVRF RF9NQVNLKSB7CisJCWRlc3RfdyA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y19oOworCQlkZXN0X2ggPSBw bGFuZS0+c3RhdGUtPmNydGNfdzsKKwl9IGVsc2UgeworCQlkZXN0X3cgPSBwbGFuZS0+c3RhdGUt PmNydGNfdzsKKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7CisJfQorCisJbWFsaWRw X2h3X3dyaXRlKG1wLT5od2RldiwgZm9ybWF0X2lkLCBtcC0+bGF5ZXItPmJhc2UpOworCisJZm9y IChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgeworCQkvKiBjYWxjdWxhdGUgdGhlIG9mZnNl dCBmb3IgdGhlIGxheWVyJ3MgcGxhbmUgcmVnaXN0ZXJzICovCisJCXB0ciA9IG1wLT5sYXllci0+ cHRyICsgKGkgPDwgNCk7CisKKwkJb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihwbGFuZS0+ c3RhdGUtPmZiLCBpKTsKKwkJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgbG93ZXJfMzJfYml0 cyhvYmotPnBhZGRyKSwgcHRyKTsKKwkJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgdXBwZXJf MzJfYml0cyhvYmotPnBhZGRyKSwgcHRyICsgNCk7CisJCW1hbGlkcF9od193cml0ZShtcC0+aHdk ZXYsIHBsYW5lLT5zdGF0ZS0+ZmItPnBpdGNoZXNbaV0sCisJCQkJbXAtPmxheWVyLT5iYXNlICsg TUFMSURQX0xBWUVSX1NUUklERSk7CisJfQorCisJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2Rldiwg TEFZRVJfSF9WQUwoc3JjX3cpIHwgTEFZRVJfVl9WQUwoc3JjX2gpLAorCQkJbXAtPmxheWVyLT5i YXNlICsgTUFMSURQX0xBWUVSX1NJWkUpOworCisJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2Rldiwg TEFZRVJfSF9WQUwoZGVzdF93KSB8IExBWUVSX1ZfVkFMKGRlc3RfaCksCisJCQltcC0+bGF5ZXIt PmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFKTsKKworCW1hbGlkcF9od193cml0ZShtcC0+ aHdkZXYsIExBWUVSX0hfVkFMKHBsYW5lLT5zdGF0ZS0+Y3J0Y194KSB8CisJCQlMQVlFUl9WX1ZB TChwbGFuZS0+c3RhdGUtPmNydGNfeSksCisJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZ RVJfT0ZGU0VUKTsKKworCS8qIGZpcnN0IGNsZWFyIHRoZSByb3RhdGlvbiBiaXRzIGluIHRoZSBy ZWdpc3RlciAqLworCW1hbGlkcF9od19jbGVhcmJpdHMobXAtPmh3ZGV2LCBMQVlFUl9ST1RfTUFT SywKKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7CisKKwkv KiBzZXR1cCB0aGUgcm90YXRpb24gYW5kIGF4aXMgZmxpcCBiaXRzICovCisJaWYgKHBsYW5lLT5z dGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spCisJCXZhbCA9IGlsb2cyKHBsYW5lLT5z dGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIDw8IExBWUVSX1JPVF9PRkZTRVQ7CisJ aWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWCkpCisJCXZhbCB8 PSBMQVlFUl9WX0ZMSVA7CisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQoRFJNX1JF RkxFQ1RfWSkpCisJCXZhbCB8PSBMQVlFUl9IX0ZMSVA7CisKKwkvKiBzZXQgdGhlICdlbmFibGUg bGF5ZXInIGJpdCAqLworCXZhbCB8PSBMQVlFUl9FTkFCTEU7CisKKwltYWxpZHBfaHdfc2V0Yml0 cyhtcC0+aHdkZXYsIHZhbCwKKwkJCSAgbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX0NP TlRST0wpOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfZGlzYWJsZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUp Cit7CisJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwor CisJbWFsaWRwX2h3X2NsZWFyYml0cyhtcC0+aHdkZXYsIExBWUVSX0VOQUJMRSwKKwkJCSAgICBt cC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtYWxpZHBfZGVfcGxhbmVfaGVscGVyX2Z1 bmNzID0geworCS5hdG9taWNfY2hlY2sgPSBtYWxpZHBfZGVfcGxhbmVfY2hlY2ssCisJLmF0b21p Y191cGRhdGUgPSBtYWxpZHBfZGVfcGxhbmVfdXBkYXRlLAorCS5hdG9taWNfZGlzYWJsZSA9IG1h bGlkcF9kZV9wbGFuZV9kaXNhYmxlLAorfTsKKworaW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBk cm0tPmRldl9wcml2YXRlOworCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAgPSAm bWFsaWRwLT5kZXYtPm1hcDsKKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lICpwbGFuZSA9IE5VTEw7CisJ ZW51bSBkcm1fcGxhbmVfdHlwZSBwbGFuZV90eXBlOworCXVuc2lnbmVkIGxvbmcgY3J0Y3MgPSAx IDw8IGRybS0+bW9kZV9jb25maWcubnVtX2NydGM7CisJdTMyICpmb3JtYXRzOworCWludCByZXQs IGksIGosIG47CisKKwlmb3JtYXRzID0ga2NhbGxvYyhtYXAtPm5faW5wdXRfZm9ybWF0cywgc2l6 ZW9mKCpmb3JtYXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmb3JtYXRzKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFwLT5uX2xh eWVyczsgaSsrKSB7CisJCXU4IGlkID0gbWFwLT5sYXllcnNbaV0uaWQ7CisKKwkJcGxhbmUgPSBr emFsbG9jKHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwbGFuZSkgeworCQkJ cmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCS8qIGJ1aWxkIHRoZSBs aXN0IG9mIERSTSBzdXBwb3J0ZWQgZm9ybWF0cyBiYXNlZCBvbiB0aGUgbWFwICovCisJCWZvciAo biA9IDAsIGogPSAwOyAgaiA8IG1hcC0+bl9pbnB1dF9mb3JtYXRzOyBqKyspIHsKKwkJCWlmICgo bWFwLT5pbnB1dF9mb3JtYXRzW2pdLmxheWVyICYgaWQpID09IGlkKQorCQkJCWZvcm1hdHNbbisr XSA9IG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5mb3JtYXQ7CisJCX0KKworCQlwbGFuZV90eXBlID0g KGkgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkJRFJNX1BMQU5FX1RZUEVf T1ZFUkxBWTsKKwkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgJnBsYW5lLT5i YXNlLCBjcnRjcywKKwkJCQkJICAgICAgICZtYWxpZHBfZGVfcGxhbmVfZnVuY3MsIGZvcm1hdHMs CisJCQkJCSAgICAgICBuLCBwbGFuZV90eXBlLCBOVUxMKTsKKwkJaWYgKHJldCA8IDApCisJCQln b3RvIGNsZWFudXA7CisKKwkJaWYgKCFkcm0tPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5 KSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gQklUKERSTV9ST1RBVEVfMCkgfAorCQkJCQkg ICAgICBCSVQoRFJNX1JPVEFURV85MCkgfAorCQkJCQkgICAgICBCSVQoRFJNX1JPVEFURV8xODAp IHwKKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMjcwKSB8CisJCQkJCSAgICAgIEJJVChEUk1f UkVGTEVDVF9YKSB8CisJCQkJCSAgICAgIEJJVChEUk1fUkVGTEVDVF9ZKTsKKwkJCWRybS0+bW9k ZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQorCQkJCWRybV9tb2RlX2NyZWF0ZV9yb3RhdGlv bl9wcm9wZXJ0eShkcm0sIGZsYWdzKTsKKwkJfQorCQkvKiBTTUFSVCBsYXllciBjYW4ndCBiZSBy b3RhdGVkICovCisJCWlmIChkcm0tPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5ICYmIChp ZCAhPSBERV9TTUFSVCkpCisJCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUtPmJh c2UuYmFzZSwKKwkJCQkJCSAgIGRybS0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHksCisJ CQkJCQkgICBCSVQoRFJNX1JPVEFURV8wKSk7CisKKwkJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBs YW5lLT5iYXNlLAorCQkJCSAgICAgJm1hbGlkcF9kZV9wbGFuZV9oZWxwZXJfZnVuY3MpOworCQlw bGFuZS0+aHdkZXYgPSBtYWxpZHAtPmRldjsKKwkJcGxhbmUtPmxheWVyID0gJm1hcC0+bGF5ZXJz W2ldOworCX0KKworCWtmcmVlKGZvcm1hdHMpOworCisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJ bWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7CisJa2ZyZWUoZm9ybWF0cyk7CisKKwlyZXR1 cm4gcmV0OworfQorCit2b2lkIG1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnAsICpwdDsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShwLCBwdCwgJmRybS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkg eworCQlkcm1fcGxhbmVfY2xlYW51cChwKTsKKwkJa2ZyZWUocCk7CisJfQorfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmVj YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9yZWdzLmgK QEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRh dUBhcm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBw cm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcworICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKiBBUk0gTWFs aSBEUDUwMC9EUDU1MC9EUDY1MCByZWdpc3RlcnMgZGVmaW5pdGlvbi4KKyAqLworCisjaWZuZGVm IF9fTUFMSURQX1JFR1NfSF9fCisjZGVmaW5lIF9fTUFMSURQX1JFR1NfSF9fCisKKy8qCisgKiBh YmJyZXZpYXRpb25zIHVzZWQ6CisgKiAgICAtIERDIC0gZGlzcGxheSBjb3JlIChnZW5lcmFsIHNl dHRpbmdzKQorICogICAgLSBERSAtIGRpc3BsYXkgZW5naW5lCisgKiAgICAtIFNFIC0gc2NhbGlu ZyBlbmdpbmUKKyAqLworCisvKiBpbnRlcnJ1cHQgYml0IG1hc2tzICovCisjZGVmaW5lIE1BTElE UF9ERV9JUlFfVU5ERVJSVU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFf QVhJX0VSUgkJKDEgPDwgNCkKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9WU1lOQwkJCSgxIDw8 IDUpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfUFJPR19MSU5FCQkoMSA8PCA2KQorI2RlZmlu ZSBNQUxJRFA1MDBfREVfSVJRX1NBVFVSQVRJT04JCSgxIDw8IDcpCisjZGVmaW5lIE1BTElEUDUw MF9ERV9JUlFfQ09ORl9WQUxJRAkJKDEgPDwgOCkKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9D T05GX01PREUJCSgxIDw8IDExKQorI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfQUNUSVZF CQkoMSA8PCAxNykKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9QTV9BQ1RJVkUJCSgxIDw8IDE4 KQorI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1RFU1RNT0RFX0FDVElWRQkoMSA8PCAxOSkKKyNk ZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9GT1JDRV9CTE5LX0FDVElWRQkoMSA8PCAyNCkKKyNkZWZp bmUgTUFMSURQNTAwX0RFX0lSUV9BWElfQlVTWQkJKDEgPDwgMjgpCisjZGVmaW5lIE1BTElEUDUw MF9ERV9JUlFfR0xPQkFMCQkJKDEgPDwgMzEpCisjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09O Rl9NT0RFCQkoMSA8PCAwKQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfVkFMSUQJCSgx IDw8IDQpCisjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfSU5JVF9CVVNZCQkoMSA8PCA1KQorI2Rl ZmluZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9FUlJPUgkJKDEgPDwgOCkKKyNkZWZpbmUgTUFMSURQ NTAwX1NFX0lSUV9PVkVSUlVOCQkoMSA8PCA5KQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX1BS T0dfTElORTEJCSgxIDw8IDEyKQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX1BST0dfTElORTIJ CSgxIDw8IDEzKQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAx NykKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QTV9BQ1RJVkUJCSgxIDw8IDE4KQorI2RlZmlu ZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKKyNkZWZpbmUgTUFMSURQNTAw X1NFX0lSUV9HTE9CQUwJCQkoMSA8PCAzMSkKKworI2RlZmluZSBNQUxJRFA1NTBfREVfSVJRX1NB VFVSQVRJT04JCSgxIDw8IDgpCisjZGVmaW5lIE1BTElEUDU1MF9ERV9JUlFfVlNZTkMJCQkoMSA8 PCAxMikKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9QUk9HX0xJTkUJCSgxIDw8IDEzKQorI2Rl ZmluZSBNQUxJRFA1NTBfREVfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQorI2RlZmluZSBNQUxJRFA1 NTBfU0VfSVJRX0VPVwkJCSgxIDw8IDApCisjZGVmaW5lIE1BTElEUDU1MF9TRV9JUlFfQVhJX0VS UgkJKDEgPDwgMTYpCisjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRAkJKDEgPDwg MCkKKyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9DT05GX01PREUJCSgxIDw8IDQpCisjZGVmaW5l IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9BQ1RJVkUJCSgxIDw8IDE2KQorI2RlZmluZSBNQUxJRFA1 NTBfRENfSVJRX0RFCQkJKDEgPDwgMjApCisjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFfU0UJCQko MSA8PCAyNCkKKworI2RlZmluZSBNQUxJRFA2NTBfREVfSVJRX0RSSUZUCQkJKDEgPDwgNCkKKwor LyogYml0IG1hc2tzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIHByb2R1Y3RzICovCisjZGVmaW5l ICAgTUFMSURQX0NGR19WQUxJRAkJKDEgPDwgMCkKKyNkZWZpbmUgICBNQUxJRFBfRElTUF9GVU5D X0lMQUNFRAkoMSA8PCA4KQorCisvKiByZWdpc3RlciBvZmZzZXRzIGZvciBJUlEgbWFuYWdlbWVu dCAqLworI2RlZmluZSBNQUxJRFBfUkVHX1NUQVRVUwkJMHgwMDAwMAorI2RlZmluZSBNQUxJRFBf UkVHX1NFVElSUQkJMHgwMDAwNAorI2RlZmluZSBNQUxJRFBfUkVHX01BU0tJUlEJCTB4MDAwMDgK KyNkZWZpbmUgTUFMSURQX1JFR19DTEVBUklSUQkJMHgwMDAwYworCisvKiByZWdpc3RlciBvZmZz ZXRzICovCisjZGVmaW5lIE1BTElEUF9ERV9DT1JFX0lECQkweDAwMDE4CisjZGVmaW5lIE1BTElE UF9ERV9ESVNQTEFZX0ZVTkMJCTB4MDAwMjAKKworLyogdGhlc2Ugb2Zmc2V0cyBhcmUgcmVsYXRp dmUgdG8gTUFMSURQNXgwX1RJTUlOR1NfQkFTRSAqLworI2RlZmluZSBNQUxJRFBfREVfSF9USU1J TkdTCQkweDAKKyNkZWZpbmUgTUFMSURQX0RFX1ZfVElNSU5HUwkJMHg0CisjZGVmaW5lIE1BTElE UF9ERV9TWU5DX1dJRFRICQkweDgKKyNkZWZpbmUgTUFMSURQX0RFX0hWX0FDVElWRQkJMHhjCisK Ky8qIG1hY3JvcyB0byBzZXQgdmFsdWVzIGludG8gcmVnaXN0ZXJzICovCisjZGVmaW5lIE1BTElE UF9ERV9IX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKKyNkZWZpbmUgTUFMSURQ X0RFX0hfQkFDS1BPUkNIKHgpCSgoKHgpICYgMHgzZmYpIDw8IDE2KQorI2RlZmluZSBNQUxJRFA1 MDBfREVfVl9GUk9OVFBPUkNIKHgpCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgTUFMSURQ NTUwX0RFX1ZfRlJPTlRQT1JDSCh4KQkoKCh4KSAmIDB4ZmZmKSA8PCAwKQorI2RlZmluZSBNQUxJ RFBfREVfVl9CQUNLUE9SQ0goeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQ X0RFX0hfU1lOQ1dJRFRIKHgpCSgoKHgpICYgMHgzZmYpIDw8IDApCisjZGVmaW5lIE1BTElEUF9E RV9WX1NZTkNXSURUSCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBNQUxJRFBfREVf SF9BQ1RJVkUoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAwKQorI2RlZmluZSBNQUxJRFBfREVfVl9B Q1RJVkUoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAxNikKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyBh bmQgYml0cyBzcGVjaWZpYyB0byBEUDUwMCAqLworI2RlZmluZSBNQUxJRFA1MDBfRENfQkFTRQkJ MHgwMDAwMAorI2RlZmluZSBNQUxJRFA1MDBfRENfQ09OVFJPTAkJMHgwMDAwYworI2RlZmluZSAg IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRCSgxIDw8IDE3KQorI2RlZmluZSAgIE1BTElEUDUwMF9I U1lOQ1BPTAkJKDEgPDwgMjApCisjZGVmaW5lICAgTUFMSURQNTAwX1ZTWU5DUE9MCQkoMSA8PCAy MSkKKyNkZWZpbmUgICBNQUxJRFA1MDBfRENfQ0xFQVJfTUFTSwkweDMwMGZmZgorI2RlZmluZSBN QUxJRFA1MDBfREVfTElORV9DT1VOVEVSCTB4MDAwMTAKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0FY SV9DT05UUk9MCTB4MDAwMTQKKyNkZWZpbmUgTUFMSURQNTAwX0RFX1NFQ1VSRV9DVFJMCTB4MDAw MWMKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0NIUk9NQV9LRVkJCTB4MDAwMjQKKyNkZWZpbmUgTUFM SURQNTAwX1RJTUlOR1NfQkFTRQkJMHgwMDAyOAorCisjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdf M0QJCTB4MDAwMzgKKyNkZWZpbmUgTUFMSURQNTAwX0JHTkRfQ09MT1IJCTB4MDAwM2MKKyNkZWZp bmUgTUFMSURQNTAwX09VVFBVVF9ERVBUSAkJMHgwMDA0NAorI2RlZmluZSBNQUxJRFA1MDBfWVVW X1JHQl9DT0VGCQkweDAwMDQ4CisjZGVmaW5lIE1BTElEUDUwMF9DT0xPUl9BREpfQ09FRgkweDAw MDc4CisjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxFX0FERFIJMHgwMDBhOAorI2RlZmluZSBN QUxJRFA1MDBfQ09FRl9UQUJMRV9EQVRBCTB4MDAwYWMKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xW X0JBU0UJCTB4MDAxMDAKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xWX1BUUl9CQVNFCTB4MDAxMjQK KyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMV9CQVNFCQkweDAwMjAwCisjZGVmaW5lIE1BTElEUDUw MF9ERV9MRzFfUFRSX0JBU0UJMHgwMDIxYworI2RlZmluZSBNQUxJRFA1MDBfREVfTEcyX0JBU0UJ CTB4MDAzMDAKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMl9QVFJfQkFTRQkweDAwMzFjCisjZGVm aW5lIE1BTElEUDUwMF9TRV9CQVNFCQkweDAwYzAwCisjZGVmaW5lIE1BTElEUDUwMF9TRV9QVFJf QkFTRQkJMHgwMGUwYworI2RlZmluZSBNQUxJRFA1MDBfRENfSVJRX0JBU0UJCTB4MDBmMDAKKyNk ZWZpbmUgTUFMSURQNTAwX0NPTkZJR19WQUxJRAkJMHgwMGYwMAorI2RlZmluZSBNQUxJRFA1MDBf Q09ORklHX0lECQkweDAwZmQ0CisKKy8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdHMgc3BlY2lm aWMgdG8gRFA1NTAvRFA2NTAgKi8KKyNkZWZpbmUgTUFMSURQNTUwX0RFX0NPTlRST0wJCTB4MDAw MTAKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xJTkVfQ09VTlRFUgkweDAwMDE0CisjZGVmaW5lIE1B TElEUDU1MF9ERV9BWElfQ09OVFJPTAkweDAwMDE4CisjZGVmaW5lIE1BTElEUDU1MF9ERV9RT1MJ CTB4MDAwMWMKKyNkZWZpbmUgTUFMSURQNTUwX1RJTUlOR1NfQkFTRQkJMHgwMDAzMAorI2RlZmlu ZSBNQUxJRFA1NTBfSFNZTkNQT0wJCSgxIDw8IDEyKQorI2RlZmluZSBNQUxJRFA1NTBfVlNZTkNQ T0wJCSgxIDw8IDI4KQorCisjZGVmaW5lIE1BTElEUDU1MF9ERV9ESVNQX1NJREVCQU5ECTB4MDAw NDAKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1IJCTB4MDAwNDQKKyNkZWZpbmUgTUFM SURQNTUwX0RFX09VVFBVVF9ERVBUSAkweDAwMDRjCisjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0xP Ul9DT0VGCQkweDAwMDUwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0VGX1RBQkxFX0FERFIJMHgw MDA4MAorI2RlZmluZSBNQUxJRFA1NTBfREVfQ09FRl9UQUJMRV9EQVRBCTB4MDAwODQKKyNkZWZp bmUgTUFMSURQNTUwX0RFX0xWMV9CQVNFCQkweDAwMTAwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9M VjFfUFRSX0JBU0UJMHgwMDEyNAorI2RlZmluZSBNQUxJRFA1NTBfREVfTFYyX0JBU0UJCTB4MDAy MDAKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xWMl9QVFJfQkFTRQkweDAwMjI0CisjZGVmaW5lIE1B TElEUDU1MF9ERV9MR19CQVNFCQkweDAwMzAwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9MR19QVFJf QkFTRQkweDAwMzFjCisjZGVmaW5lIE1BTElEUDU1MF9ERV9MU19CQVNFCQkweDAwNDAwCisjZGVm aW5lIE1BTElEUDU1MF9ERV9MU19QVFJfQkFTRQkweDAwNDJjCisjZGVmaW5lIE1BTElEUDU1MF9E RV9QRVJGX0JBU0UJCTB4MDA1MDAKKyNkZWZpbmUgTUFMSURQNTUwX1NFX0JBU0UJCTB4MDgwMDAK KyNkZWZpbmUgTUFMSURQNTUwX0RDX0JBU0UJCTB4MGMwMDAKKyNkZWZpbmUgTUFMSURQNTUwX0RD X0NPTlRST0wJCTB4MGMwMTAKKyNkZWZpbmUgICBNQUxJRFA1NTBfRENfQ09ORklHX1JFUQkoMSA8 PCAxNikKKyNkZWZpbmUgTUFMSURQNTUwX0NPTkZJR19WQUxJRAkJMHgwYzAxNAorI2RlZmluZSBN QUxJRFA1NTBfQ09ORklHX0lECQkweDBmZmQ0CisKKy8qCisgKiBTdGFydGluZyB3aXRoIERQNTUw IHRoZSByZWdpc3RlciBtYXAgYmxvY2tzIGhhcyBiZWVuIHN0YW5kYXJkaXNlZCB0byB0aGUKKyAq IGZvbGxvd2luZyBsYXlvdXQ6CisgKgorICogICBPZmZzZXQgICAgICAgICAgICBCbG9jayByZWdp c3RlcnMKKyAqICAweDAwMDAwICAgICAgICAgICAgRGlzcGxheSBFbmdpbmUKKyAqICAweDA4MDAw ICAgICAgICAgICAgU2NhbGluZyBFbmdpbmUKKyAqICAweDBjMDAwICAgICAgICAgICAgRGlzcGxh eSBDb3JlCisgKiAgMHgxMDAwMCAgICAgICAgICAgIFNlY3VyZSBjb250cm9sCisgKgorICogVGhl IG9sZCBEUDUwMCBJUCBtaXhlcyBzb21lIERDIHdpdGggdGhlIERFIHJlZ2lzdGVycywgaGVuY2Ug dGhlIG5lZWQKKyAqIGZvciBhIG1hcHBpbmcgc3RydWN0dXJlLgorICovCisKKyNlbmRpZiAvKiBf X01BTElEUF9SRUdTX0hfXyAqLwotLSAKMi44LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=