From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: [PATCH v5 2/3] drm/arm: Add support for Mali Display Processors Date: Wed, 15 Jun 2016 15:51:34 +0100 Message-ID: <1466002295-24813-3-git-send-email-Liviu.Dudau@arm.com> References: <1466002295-24813-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: <1466002295-24813-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 ICAgfCAyMTYgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jICAg IHwgNTEyICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9kcnYuaCAgICB8ICA1NCArKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMg ICAgIHwgNjkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfaHcuaCAgICAgfCAyNDEgKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgfCAyOTggKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oICAgfCAxNzIgKysrKysrKysrCiA5IGZpbGVzIGNo YW5nZWQsIDIyMDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 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 IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTZhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisg 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 ZXYtPmxlYXZlX2NvbmZpZ19tb2RlKGh3ZGV2KTsKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7 Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZp Y2UoY3J0Yyk7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7 CisKKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworCWh3ZGV2LT5lbnRlcl9jb25maWdfbW9k ZShod2Rldik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5weGxjbGspOworfQorCitz dGF0aWMgaW50IG1hbGlkcF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKKwlzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7CisJdTMyIHJvdF9t ZW1fZnJlZSwgcm90X21lbV91c2FibGU7CisJaW50IHJvdGF0ZWRfcGxhbmVzID0gMDsKKworCS8q CisJICogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvdGF0aW9uIG1lbW9yeSBhdmFpbGFibGUg Zm9yIHBsYW5lcworCSAqIHRoYXQgbmVlZCA5MMKwIGFuZCAyNzDCsCByb3RhdGlvbi4gRWFjaCBw bGFuZSBoYXMgc2V0IGl0cyByZXF1aXJlZAorCSAqIG1lbW9yeSBzaXplIGluIHRoZSAtPnBsYW5l X2NoZWNrKCkgY2FsbGJhY2ssIGhlcmUgd2Ugb25seSBtYWtlCisJICogc3VyZSB0aGF0IHRoZSBz dW1zIGFyZSBsZXNzIHRoYXQgdGhlIHRvdGFsIHVzYWJsZSBtZW1vcnkuCisJICoKKwkgKiBUaGUg cm90YXRpb24gbWVtb3J5IGFsbG9jYXRpb24gYWxnb3JpdGhtIChmb3IgZWFjaCBwbGFuZSk6CisJ ICogIGEuIElmIG5vIG1vcmUgcm90YXRlZCBwbGFuZXMgZXhpc3QsIGFsbCByZW1haW5pbmcgcm90 YXRlCisJICogICAgIG1lbW9yeSBpbiB0aGUgYmFuayBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0 aGUgcGxhbmUuCisJICogIGIuIElmIG90aGVyIHJvdGF0ZWQgcGxhbmVzIGV4aXN0LCBhbmQgcGxh bmUncyBsYXllciBJRCBpcworCSAqICAgICBERV9WSURFTzEsIGl0IGNhbiB1c2UgYWxsIHRoZSBt ZW1vcnkgZnJvbSBmaXJzdCBiYW5rIGlmCisJICogICAgIHNlY29uZGFyeSByb3RhdGlvbiBtZW1v cnkgYmFuayBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCBjYW4KKwkgKiAgICAgdXNlIHVwIHRv IGhhbGYgdGhlIGJhbmsncyBtZW1vcnkuCisJICogIGMuIElmIG90aGVyIHJvdGF0ZWQgcGxhbmVz IGV4aXN0LCBhbmQgcGxhbmUncyBsYXllciBJRCBpcyBub3QKKwkgKiAgICAgREVfVklERU8xLCBp dCBjYW4gdXNlIGhhbGYgb2YgdGhlIGF2YWlsYWJsZSBtZW1vcnkKKwkgKgorCSAqIE5vdGU6IHRo aXMgYWxnb3JpdGhtIGFzc3VtZXMgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHBsYW5lcyBh cmUKKwkgKiBjaGVja2VkIGFsd2F5cyBoYXMgREVfVklERU8xIHBsYW5lIGZpcnN0IGluIHRoZSBs aXN0IGlmIGl0IGlzCisJICogcm90YXRlZC4gQmVjYXVzZSB0aGF0IGlzIGhvdyB3ZSBjcmVhdGUg dGhlIHBsYW5lcyBpbiB0aGUgZmlyc3QKKwkgKiBwbGFjZSwgdW5kZXIgY3VycmVudCBEUk0gdmVy c2lvbiB0aGluZ3Mgd29yaywgYnV0IGlmIGV2ZXIgdGhlIG9yZGVyCisJICogaW4gd2hpY2ggZHJt X2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKCkgaXRlcmF0ZXMgb3ZlciBwbGFuZXMK KwkgKiBjaGFuZ2VzLCB3ZSBuZWVkIHRvIHByZS1zb3J0IHRoZSBwbGFuZXMgYmVmb3JlIHZhbGlk YXRpb24uCisJICovCisKKwkvKiBmaXJzdCBjb3VudCB0aGUgbnVtYmVyIG9mIHJvdGF0ZWQgcGxh bmVzICovCisJZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5l LCBwc3RhdGUsIHN0YXRlKSB7CisJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFU RURfTUFTSykKKwkJCXJvdGF0ZWRfcGxhbmVzKys7CisJfQorCisJcm90X21lbV9mcmVlID0gaHdk ZXYtPnJvdGF0aW9uX21lbW9yeVswXTsKKwkvKgorCSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEg cGxhbmUgdXNpbmcgcm90YXRpb24gbWVtb3J5LCB1c2UgdGhlIHNlY29uZAorCSAqIGJsb2NrIG9m IHJvdGF0aW9uIG1lbW9yeSBhcyB3ZWxsCisJICovCisJaWYgKHJvdGF0ZWRfcGxhbmVzID4gMSkK KwkJcm90X21lbV9mcmVlICs9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV07CisKKwkvKiBub3cg dmFsaWRhdGUgdGhlIHJvdGF0aW9uIG1lbW9yeSByZXF1aXJlbWVudHMgKi8KKwlkcm1fYXRvbWlj X2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmVfc3RhdGUocGxhbmUsIHBzdGF0ZSwgc3RhdGUpIHsK KwkJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOworCQlz dHJ1Y3QgbWFsaWRwX3BsYW5lX3N0YXRlICptcyA9IHRvX21hbGlkcF9wbGFuZV9zdGF0ZShwc3Rh dGUpOworCisJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFURURfTUFTSykgewor CQkJLyogcHJvY2VzcyBjdXJyZW50IHBsYW5lICovCisJCQlyb3RhdGVkX3BsYW5lcy0tOworCisJ CQlpZiAoIXJvdGF0ZWRfcGxhbmVzKSB7CisJCQkJLyogbm8gbW9yZSByb3RhdGVkIHBsYW5lcywg d2UgY2FuIHVzZSB3aGF0J3MgbGVmdCAqLworCQkJCXJvdF9tZW1fdXNhYmxlID0gcm90X21lbV9m cmVlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKG1wLT5sYXllci0+aWQgIT0gREVfVklERU8xKSB8 fAorCQkJCSAgICAoaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9PSAwKSkKKwkJCQkJcm90X21l bV91c2FibGUgPSByb3RfbWVtX2ZyZWUgLyAyOworCQkJCWVsc2UKKwkJCQkJcm90X21lbV91c2Fi bGUgPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdOworCQkJfQorCisJCQlyb3RfbWVtX2ZyZWUg LT0gcm90X21lbV91c2FibGU7CisKKwkJCWlmIChtcy0+cm90bWVtX3NpemUgPiByb3RfbWVtX3Vz YWJsZSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtYWxpZHBfY3J0Y19oZWxw ZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBtYWxpZHBfY3J0Y19tb2RlX2ZpeHVwLAorCS5l bmFibGUgPSBtYWxpZHBfY3J0Y19lbmFibGUsCisJLmRpc2FibGUgPSBtYWxpZHBfY3J0Y19kaXNh YmxlLAorCS5hdG9taWNfY2hlY2sgPSBtYWxpZHBfY3J0Y19hdG9taWNfY2hlY2ssCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG1hbGlkcF9jcnRjX2Z1bmNzID0gewor CS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNf aGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf ZmxpcCwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlLAorfTsKKworaW50IG1hbGlkcF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlz dHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gTlVMTCwgKnBsYW5lOworCWludCByZXQ7CisKKwly ZXQgPSBtYWxpZHBfZGVfcGxhbmVzX2luaXQoZHJtKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1f RVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXNlIHBsYW5lc1xuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJZHJtX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBkcm0pIHsKKwkJaWYgKHBsYW5lLT50eXBl ID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKKwkJCXByaW1hcnkgPSBwbGFuZTsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJaWYgKCFwcmltYXJ5KSB7CisJCURSTV9FUlJPUigibm8gcHJpbWFy eSBwbGFuZSBmb3VuZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gY3J0Y19jbGVhbnVw X3BsYW5lczsKKwl9CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJm1h bGlkcC0+Y3J0YywgcHJpbWFyeSwgTlVMTCwKKwkJCQkJJm1hbGlkcF9jcnRjX2Z1bmNzLCBOVUxM KTsKKworCWlmICghcmV0KSB7CisJCWRybV9jcnRjX2hlbHBlcl9hZGQoJm1hbGlkcC0+Y3J0Yywg Jm1hbGlkcF9jcnRjX2hlbHBlcl9mdW5jcyk7CisJCXJldHVybiAwOworCX0KKworY3J0Y19jbGVh bnVwX3BsYW5lczoKKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKKworCXJldHVybiBy ZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU1YjQ0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9kcnYuYwpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAqIChDKSBDT1BZUklHSFQgMjAx NiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTGl2aXUgRHVk YXUgPExpdml1LkR1ZGF1QGFybS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBw cm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCisgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgor ICoKKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUwL0RQNjUwIEtNUy9EUk0gZHJpdmVyCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVt Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j cnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4K KworI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKKyNpbmNsdWRlICJtYWxpZHBfcmVncy5oIgorI2lu Y2x1ZGUgIm1hbGlkcF9ody5oIgorCisjZGVmaW5lIE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQJ MjUwCisKKy8qCisgKiBzZXQgdGhlICJjb25maWcgdmFsaWQiIGJpdCBhbmQgd2FpdCB1bnRpbCB0 aGUgaGFyZHdhcmUgYWN0cyBvbiBpdAorICovCitzdGF0aWMgaW50IG1hbGlkcF9zZXRfYW5kX3dh aXRfY29uZmlnX3ZhbGlkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisJaW50IHJldDsKKworCWh3ZGV2LT5zZXRfY29uZmln X3ZhbGlkKGh3ZGV2KTsKKwkvKiBkb24ndCB3YWl0IGZvciBjb25maWdfdmFsaWQgZmxhZyBpZiB3 ZSBhcmUgaW4gY29uZmlnIG1vZGUgKi8KKwlpZiAoaHdkZXYtPmluX2NvbmZpZ19tb2RlKGh3ZGV2 KSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91 dChtYWxpZHAtPndxLAorCQkJYXRvbWljX3JlYWQoJm1hbGlkcC0+Y29uZmlnX3ZhbGlkKSA9PSAx LAorCQkJbXNlY3NfdG9famlmZmllcyhNQUxJRFBfQ09ORl9WQUxJRF9USU1FT1VUKSk7CisKKwly ZXR1cm4gKHJldCA+IDApID8gMCA6IC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlk cF9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0 IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZfY21h X2hvdHBsdWdfZXZlbnQobWFsaWRwLT5mYmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9h dG9taWNfY29tbWl0X2h3X2RvbmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQorewor CXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0t PmRldl9wcml2YXRlOworCWludCByZXQgPSBtYWxpZHBfc2V0X2FuZF93YWl0X2NvbmZpZ192YWxp ZChkcm0pOworCisJaWYgKHJldCkKKwkJRFJNX0RFQlVHX0RSSVZFUigidGltZWQgb3V0IHdhaXRp bmcgZm9yIHVwZGF0ZWQgY29uZmlndXJhdGlvblxuIik7CisKKwlldmVudCA9IG1hbGlkcC0+Y3J0 Yy5zdGF0ZS0+ZXZlbnQ7CisJaWYgKGV2ZW50KSB7CisJCW1hbGlkcC0+Y3J0Yy5zdGF0ZS0+ZXZl bnQgPSBOVUxMOworCisJCXNwaW5fbG9ja19pcnEoJmRybS0+ZXZlbnRfbG9jayk7CisJCWlmIChk cm1fY3J0Y192YmxhbmtfZ2V0KCZtYWxpZHAtPmNydGMpID09IDApCisJCQlkcm1fY3J0Y19hcm1f dmJsYW5rX2V2ZW50KCZtYWxpZHAtPmNydGMsIGV2ZW50KTsKKwkJZWxzZQorCQkJZHJtX2NydGNf c2VuZF92YmxhbmtfZXZlbnQoJm1hbGlkcC0+Y3J0YywgZXZlbnQpOworCQlzcGluX3VubG9ja19p cnEoJmRybS0+ZXZlbnRfbG9jayk7CisJfQorCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19k b25lKHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgbWFsaWRwX2F0b21pY19jb21taXRfdGFpbChz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IHN0YXRlLT5kZXY7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNh Ymxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFi bGVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBz dGF0ZSwgdHJ1ZSk7CisKKwltYWxpZHBfYXRvbWljX2NvbW1pdF9od19kb25lKHN0YXRlKTsKKwor CWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7CisKKwlkcm1f YXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIG1hbGlkcF9tb2RlX2NvbmZpZ19oZWxw ZXJzID0geworCS5hdG9taWNfY29tbWl0X3RhaWwgPSBtYWxpZHBfYXRvbWljX2NvbW1pdF90YWls LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbWFsaWRw X21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwK Kwkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IG1hbGlkcF9vdXRwdXRfcG9sbF9jaGFuZ2VkLAorCS5h dG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9 IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBpbnQgbWFsaWRwX2VuYWJs ZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IGNydGMpCit7CisJ c3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisKKwltYWxpZHBfaHdfZW5hYmxl X2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLAorCQkJICAgICBod2Rldi0+bWFwLmRlX2lycV9t YXAudnN5bmNfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFsaWRwX2Rpc2Fi bGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQorewor CXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCisJbWFsaWRwX2h3X2Rpc2Fi bGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCisJCQkgICAgICBod2Rldi0+bWFwLmRlX2ly cV9tYXAudnN5bmNfaXJxKTsKK30KKworc3RhdGljIGludCBtYWxpZHBfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZHJtKQoreworCWludCByZXQ7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9 IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFs aWRwLT5kZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2Nv bmZpZy5taW5fd2lkdGggPSBod2Rldi0+bWluX2xpbmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQgPSBod2Rldi0+bWluX2xpbmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmlnLm1h eF93aWR0aCA9IGh3ZGV2LT5tYXhfbGluZV9zaXplOworCWRybS0+bW9kZV9jb25maWcubWF4X2hl aWdodCA9IGh3ZGV2LT5tYXhfbGluZV9zaXplOworCWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAm bWFsaWRwX21vZGVfY29uZmlnX2Z1bmNzOworCWRybS0+bW9kZV9jb25maWcuaGVscGVyX3ByaXZh dGUgPSAmbWFsaWRwX21vZGVfY29uZmlnX2hlbHBlcnM7CisKKwlyZXQgPSBtYWxpZHBfY3J0Y19p bml0KGRybSk7CisJaWYgKHJldCkgeworCQlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hbGlkcF9p cnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpcnFfZGUsIGly cV9zZSwgcmV0ID0gMDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRh KCZwZGV2LT5kZXYpOworCisJLyogZmV0Y2ggdGhlIGludGVycnVwdHMgZnJvbSBEVCAqLworCWly cV9kZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJERSIpOworCWlmIChpcnFfZGUg PCAwKSB7CisJCURSTV9FUlJPUigibm8gJ0RFJyBJUlEgc3BlY2lmaWVkIVxuIik7CisJCXJldHVy biBpcnFfZGU7CisJfQorCWlycV9zZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJT RSIpOworCWlmIChpcnFfc2UgPCAwKSB7CisJCURSTV9FUlJPUigibm8gJ1NFJyBJUlEgc3BlY2lm aWVkIVxuIik7CisJCXJldHVybiBpcnFfc2U7CisJfQorCisJcmV0ID0gbWFsaWRwX2RlX2lycV9p bml0KGRybSwgaXJxX2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWFs aWRwX3NlX2lycV9pbml0KGRybSwgaXJxX3NlKTsKKwlpZiAocmV0KSB7CisJCW1hbGlkcF9kZV9p cnFfZmluaShkcm0pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBtYWxpZHBfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3Ry dWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZf Y21hX3Jlc3RvcmVfbW9kZShtYWxpZHAtPmZiZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3Bl biA9IGRybV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3Rs ID0gZHJtX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJt X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1f cmVhZCwKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCisJLm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFw LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG1hbGlkcF9kcml2ZXIgPSB7CisJLmRy aXZlcl9mZWF0dXJlcyA9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9N SUMgfAorCQkJICAgRFJJVkVSX1BSSU1FLAorCS5sYXN0Y2xvc2UgPSBtYWxpZHBfbGFzdGNsb3Nl LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIsCisJLmVu YWJsZV92YmxhbmsgPSBtYWxpZHBfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBt YWxpZHBfZGlzYWJsZV92YmxhbmssCisJLmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCA9IGRybV9n ZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywK KwkuZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zm c2V0ID0gZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1f Z2VtX2R1bWJfZGVzdHJveSwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9o YW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9f aGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdl bV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9z Z190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX2lt cG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2Vt X3ByaW1lX3ZtYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAorCS5nZW1fcHJpbWVfdnVubWFw ID0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVfbW1hcCA9IGRybV9nZW1f Y21hX3ByaW1lX21tYXAsCisJLmZvcHMgPSAmZm9wcywKKwkubmFtZSA9ICJtYWxpLWRwIiwKKwku ZGVzYyA9ICJBUk0gTWFsaSBEaXNwbGF5IFByb2Nlc3NvciBkcml2ZXIiLAorCS5kYXRlID0gIjIw MTYwMTA2IiwKKwkubWFqb3IgPSAxLAorCS5taW5vciA9IDAsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCAgbWFsaWRwX2RybV9vZl9tYXRjaFtdID0geworCXsKKwkJLmNv bXBhdGlibGUgPSAiYXJtLG1hbGktZHA1MDAiLAorCQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01B TElEUF81MDBdCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNTUwIiwKKwkJ LmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTUwXQorCX0sCisJeworCQkuY29tcGF0aWJs ZSA9ICJhcm0sbWFsaS1kcDY1MCIsCisJCS5kYXRhID0gJm1hbGlkcF9kZXZpY2VbTUFMSURQXzY1 MF0KKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1hbGlkcF9kcm1fb2Zf bWF0Y2gpOworCisjZGVmaW5lIE1BWF9PVVRQVVRfQ0hBTk5FTFMJMworCitzdGF0aWMgaW50IG1h bGlkcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHA7CisJ c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwkvKiBudW1iZXIgb2YgbGluZXMgZm9y IHRoZSBSLCBHIGFuZCBCIG91dHB1dCAqLworCXU4IG91dHB1dF93aWR0aFtNQVhfT1VUUFVUX0NI QU5ORUxTXTsKKwlpbnQgcmV0ID0gMCwgaTsKKwl1MzIgdmVyc2lvbiwgb3V0X2RlcHRoID0gMDsK KworCW1hbGlkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWFsaWRwKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFtYWxpZHApCisJCXJldHVybiAtRU5PTUVNOworCisJaHdkZXYgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmh3ZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFod2RldikKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIGNvcHkgdGhlIGFzc29jaWF0ZWQgZGF0YSBmcm9t IG1hbGlkcF9kcm1fb2ZfbWF0Y2ggdG8gYXZvaWQKKwkgKiBoYXZpbmcgdG8ga2VlcCBhIHJlZmVy ZW5jZSB0byB0aGUgT0Ygbm9kZSBhZnRlciBiaW5kaW5nCisJICovCisJbWVtY3B5KGh3ZGV2LCBv Zl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KSwgc2l6ZW9mKCpod2RldikpOworCW1hbGlkcC0+ ZGV2ID0gaHdkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmbWFsaWRwLT5ldmVudF9saXN0KTsKKwor CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJ aHdkZXYtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19F UlIoaHdkZXYtPnJlZ3MpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBjb250cm9sIHJl Z2lzdGVycyBhcmVhXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPnJlZ3MpOworCX0KKwor CWh3ZGV2LT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGh3 ZGV2LT5wY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPnBjbGspOworCisJaHdkZXYtPmFj bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiYWNsayIpOworCWlmIChJU19FUlIoaHdkZXYtPmFjbGsp KQorCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+YWNsayk7CisKKwlod2Rldi0+bWNsayA9IGRldm1f Y2xrX2dldChkZXYsICJtY2xrIik7CisJaWYgKElTX0VSUihod2Rldi0+bWNsaykpCisJCXJldHVy biBQVFJfRVJSKGh3ZGV2LT5tY2xrKTsKKworCWh3ZGV2LT5weGxjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicHhsY2xrIik7CisJaWYgKElTX0VSUihod2Rldi0+cHhsY2xrKSkKKwkJcmV0dXJuIFBU Ul9FUlIoaHdkZXYtPnB4bGNsayk7CisKKwkvKiBHZXQgdGhlIG9wdGlvbmFsIGZyYW1lYnVmZmVy IG1lbW9yeSByZXNvdXJjZSAqLworCXJldCA9IG9mX3Jlc2VydmVkX21lbV9kZXZpY2VfaW5pdChk ZXYpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCXJldHVybiByZXQ7CisKKwlkcm0g PSBkcm1fZGV2X2FsbG9jKCZtYWxpZHBfZHJpdmVyLCBkZXYpOworCWlmICghZHJtKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gYWxsb2NfZmFpbDsKKwl9CisKKwkvKiBFbmFibGUgQVBCIGNs b2NrIGluIG9yZGVyIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyAqLworCWNsa19wcmVw YXJlX2VuYWJsZShod2Rldi0+cGNsayk7CisJLyoKKwkgKiBFbmFibGUgQVhJIGNsb2NrIGFuZCBt YWluIGNsb2NrIHNvIHRoYXQgcHJlZmV0Y2ggY2FuIHN0YXJ0IG9uY2UKKwkgKiB0aGUgcmVnaXN0 ZXJzIGFyZSBzZXQKKwkgKi8KKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPmFjbGspOworCWNs a19wcmVwYXJlX2VuYWJsZShod2Rldi0+bWNsayk7CisKKwlyZXQgPSBod2Rldi0+cXVlcnlfaHco aHdkZXYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIEhXIGNvbmZpZ3VyYXRp b25cbiIpOworCQlnb3RvIHF1ZXJ5X2h3X2ZhaWw7CisJfQorCisJdmVyc2lvbiA9IG1hbGlkcF9o d19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfREVfQ09SRV9JRCk7CisJ RFJNX0lORk8oImZvdW5kIEFSTSBNYWxpLURQJTN4IHZlcnNpb24gciVkcCVkXG4iLCB2ZXJzaW9u ID4+IDE2LAorCQkgKHZlcnNpb24gPj4gMTIpICYgMHhmLCAodmVyc2lvbiA+PiA4KSAmIDB4Zik7 CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBsaW5lcyB1c2VkIGZvciBvdXRwdXQgb2YgUkdCIGRh dGEgKi8KKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KGRldi0+b2Zfbm9kZSwKKwkJ CQkJImFybSxtYWxpZHAtb3V0cHV0LXBvcnQtbGluZXMiLAorCQkJCQlvdXRwdXRfd2lkdGgsIE1B WF9PVVRQVVRfQ0hBTk5FTFMpOworCWlmIChyZXQpCisJCWdvdG8gcXVlcnlfaHdfZmFpbDsKKwor CWZvciAoaSA9IDA7IGkgPCBNQVhfT1VUUFVUX0NIQU5ORUxTOyBpKyspCisJCW91dF9kZXB0aCA9 IChvdXRfZGVwdGggPDwgOCkgfCAob3V0cHV0X3dpZHRoW2ldICYgMHhmKTsKKwltYWxpZHBfaHdf d3JpdGUoaHdkZXYsIG91dF9kZXB0aCwgaHdkZXYtPm1hcC5vdXRfZGVwdGhfYmFzZSk7CisKKwlk cm0tPmRldl9wcml2YXRlID0gbWFsaWRwOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRybSk7CisJ YXRvbWljX3NldCgmbWFsaWRwLT5jb25maWdfdmFsaWQsIDApOworCWluaXRfd2FpdHF1ZXVlX2hl YWQoJm1hbGlkcC0+d3EpOworCisJcmV0ID0gbWFsaWRwX2luaXQoZHJtKTsKKwlpZiAocmV0IDwg MCkKKwkJZ290byBpbml0X2ZhaWw7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7 CisJaWYgKHJldCkKKwkJZ290byByZWdpc3Rlcl9mYWlsOworCisJLyogU2V0IHRoZSBDUlRDJ3Mg cG9ydCBzbyB0aGF0IHRoZSBlbmNvZGVyIGNvbXBvbmVudCBjYW4gZmluZCBpdCAqLworCW1hbGlk cC0+Y3J0Yy5wb3J0ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBO VUxMKTsKKworCXJldCA9IGNvbXBvbmVudF9iaW5kX2FsbChkZXYsIGRybSk7CisJb2Zfbm9kZV9w dXQobWFsaWRwLT5jcnRjLnBvcnQpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBiaW5kIGFsbCBjb21wb25lbnRzXG4iKTsKKwkJZ290byBiaW5kX2ZhaWw7CisJfQorCisJ cmV0ID0gbWFsaWRwX2lycV9pbml0KHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGlycV9p bml0X2ZhaWw7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVfY29uZmln Lm51bV9jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0 aWFsaXNlIHZibGFua1xuIik7CisJCWdvdG8gdmJsYW5rX2ZhaWw7CisJfQorCisJZHJtX21vZGVf Y29uZmlnX3Jlc2V0KGRybSk7CisKKwltYWxpZHAtPmZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0 KGRybSwgMzIsIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMsCisJCQkJCSAgIGRybS0+bW9kZV9j b25maWcubnVtX2Nvbm5lY3Rvcik7CisKKwlpZiAoSVNfRVJSKG1hbGlkcC0+ZmJkZXYpKSB7CisJ CXJldCA9IFBUUl9FUlIobWFsaWRwLT5mYmRldik7CisJCW1hbGlkcC0+ZmJkZXYgPSBOVUxMOwor CQlnb3RvIGZiZGV2X2ZhaWw7CisJfQorCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7 CisJcmV0dXJuIDA7CisKK2ZiZGV2X2ZhaWw6CisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cit2 YmxhbmtfZmFpbDoKKwltYWxpZHBfc2VfaXJxX2ZpbmkoZHJtKTsKKwltYWxpZHBfZGVfaXJxX2Zp bmkoZHJtKTsKK2lycV9pbml0X2ZhaWw6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0p OworYmluZF9mYWlsOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworcmVnaXN0ZXJfZmFpbDoK KwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51 cChkcm0pOworaW5pdF9mYWlsOgorCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRldl9zZXRf ZHJ2ZGF0YShkZXYsIE5VTEwpOworcXVlcnlfaHdfZmFpbDoKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoaHdkZXYtPm1jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+YWNsayk7CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5wY2xrKTsKKwlkcm1fZGV2X3VucmVmKGRybSk7 CithbGxvY19mYWlsOgorCW9mX3Jlc2VydmVkX21lbV9kZXZpY2VfcmVsZWFzZShkZXYpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFsaWRwX3VuYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCisJaWYgKG1hbGlkcC0+ ZmJkZXYpIHsKKwkJZHJtX2ZiZGV2X2NtYV9maW5pKG1hbGlkcC0+ZmJkZXYpOworCQltYWxpZHAt PmZiZGV2ID0gTlVMTDsKKwl9CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJbWFs aWRwX3NlX2lycV9maW5pKGRybSk7CisJbWFsaWRwX2RlX2lycV9maW5pKGRybSk7CisJZHJtX3Zi bGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworCWRy bV9kZXZfdW5yZWdpc3Rlcihkcm0pOworCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwor CWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7 CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3 ZGV2LT5tY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShod2Rldi0+cGNsayk7CisJZHJtX2Rldl91bnJlZihkcm0pOworCW9m X3Jlc2VydmVkX21lbV9kZXZpY2VfcmVsZWFzZShkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIG1hbGlkcF9tYXN0ZXJfb3BzID0geworCS5iaW5kID0g bWFsaWRwX2JpbmQsCisJLnVuYmluZCA9IG1hbGlkcF91bmJpbmQsCit9OworCitzdGF0aWMgaW50 IG1hbGlkcF9jb21wYXJlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRhdGE7CisKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09 IG5wOworfQorCitzdGF0aWMgaW50IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCwgKmVwOworCXN0 cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKworCWlmICghcGRldi0+ZGV2Lm9m X25vZGUpCisJCXJldHVybiAtRU5PREVWOworCisJLyogdGhlcmUgaXMgb25seSBvbmUgb3V0cHV0 IHBvcnQgaW5zaWRlIGVhY2ggZGV2aWNlLCBmaW5kIGl0ICovCisJZXAgPSBvZl9ncmFwaF9nZXRf bmV4dF9lbmRwb2ludChwZGV2LT5kZXYub2Zfbm9kZSwgTlVMTCk7CisJaWYgKCFlcCkKKwkJcmV0 dXJuIC1FTk9ERVY7CisKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZXApKSB7CisJCW9m X25vZGVfcHV0KGVwKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogYWRkIHRoZSByZW1v dGUgZW5jb2RlciBwb3J0IGFzIGNvbXBvbmVudCAqLworCXBvcnQgPSBvZl9ncmFwaF9nZXRfcmVt b3RlX3BvcnRfcGFyZW50KGVwKTsKKwlvZl9ub2RlX3B1dChlcCk7CisJaWYgKCFwb3J0IHx8ICFv Zl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnQpKSB7CisJCW9mX25vZGVfcHV0KHBvcnQpOworCQly ZXR1cm4gLUVBR0FJTjsKKwl9CisKKwljb21wb25lbnRfbWF0Y2hfYWRkKCZwZGV2LT5kZXYsICZt YXRjaCwgbWFsaWRwX2NvbXBhcmVfZGV2LCBwb3J0KTsKKwlyZXR1cm4gY29tcG9uZW50X21hc3Rl cl9hZGRfd2l0aF9tYXRjaCgmcGRldi0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9vcHMsCisJCQkJCSAg ICAgICBtYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwX3BsYXRmb3JtX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2 LT5kZXYsICZtYWxpZHBfbWFzdGVyX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIG1hbGlkcF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9 IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZSwKKwkucmVtb3ZlCQk9IG1hbGlkcF9wbGF0Zm9ybV9yZW1v dmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAibWFsaS1kcCIsCisJCS5vZl9tYXRjaF90YWJs ZQk9IG1hbGlkcF9kcm1fb2ZfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIobWFsaWRwX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1 IDxMaXZpdS5EdWRhdUBhcm0uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gTWFsaSBE UCBEUk0gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTU4ZmQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaApAQCAtMCww ICsxLDU0IEBACisvKgorICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNv bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQg dG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0 aGUgdGVybXMKKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFA1MDAv RFA1NTAvRFA2NTAgS01TL0RSTSBkcml2ZXIgc3RydWN0dXJlcworICovCisKKyNpZm5kZWYgX19N QUxJRFBfRFJWX0hfXworI2RlZmluZSBfX01BTElEUF9EUlZfSF9fCisKKyNpbmNsdWRlIDxsaW51 eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJtYWxpZHBfaHcu aCIKKworc3RydWN0IG1hbGlkcF9kcm0geworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpkZXY7 CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRf bGlzdDsKKwlzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlh dG9taWNfdCBjb25maWdfdmFsaWQ7Cit9OworCisjZGVmaW5lIGNydGNfdG9fbWFsaWRwX2Rldmlj ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG1hbGlkcF9kcm0sIGNydGMpCisKK3N0cnVjdCBt YWxpZHBfcGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXY7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciAqbGF5ZXI7Cit9Owor CitzdHJ1Y3QgbWFsaWRwX3BsYW5lX3N0YXRlIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJh c2U7CisKKwkvKiBzaXplIG9mIHRoZSByZXF1aXJlZCByb3RhdGlvbiBtZW1vcnkgaWYgcGxhbmUg aXMgcm90YXRlZCAqLworCXUzMiByb3RtZW1fc2l6ZTsKK307CisKKyNkZWZpbmUgdG9fbWFsaWRw X3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFsaWRwX3BsYW5lLCBiYXNlKQorI2Rl ZmluZSB0b19tYWxpZHBfcGxhbmVfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtYWxp ZHBfcGxhbmVfc3RhdGUsIGJhc2UpCisKK2ludCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRybSk7Cit2b2lkIG1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKTsKK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pOworCisvKiBvZnRlbiB1c2VkIGNvbWJpbmF0aW9uIG9mIHJvdGF0aW9uYWwgYml0cyAq LworI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9NQVNLCShCSVQoRFJNX1JPVEFURV85MCkgfCBCSVQo RFJNX1JPVEFURV8yNzApKQorCisjZW5kaWYgIC8qIF9fTUFMSURQX0RSVl9IX18gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0v YXJtL21hbGlkcF9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTMy ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCkBA IC0wLDAgKzEsNjkxIEBACisvKgorICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVA YXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJv dmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVj dCB0byB0aGUgdGVybXMKKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkg RFA1MDAvRFA1NTAvRFA2NTAgaGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBUaGlzIGlz IHdoZXJlCisgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgdGhl IGhhcmR3YXJlIGlzIGJlaW5nIGRlYWx0IHdpdGgKKyAqIGluIGFuIGF0dGVtcHQgdG8gcHJvdmlk ZSB0byB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGNvZGUgYSB1bmlmaWVkIHZpZXcKKyAqLworCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUg PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisjaW5jbHVkZSA8dmlk ZW8vZGlzcGxheV90aW1pbmcuaD4KKworI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKKyNpbmNsdWRl ICJtYWxpZHBfaHcuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0 IG1hbGlkcDUwMF9kZV9mb3JtYXRzW10gPSB7CisJLyogICAgZm91cmNjLCAgIGxheWVycyBzdXBw b3J0aW5nIHRoZSBmb3JtYXQsICAgICBpbnRlcm5hbCBpZCAgKi8KKwl7IERSTV9GT1JNQVRfQVJH QjIxMDEwMTAsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDAgfSwK Kwl7IERSTV9GT1JNQVRfQUJHUjIxMDEwMTAsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X0dSQVBISUNTMiwgIDEgfSwKKwl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIERFX1ZJREVPMSB8IERF X0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDIgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjg4ODgs IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDMgfSwKKwl7IERSTV9G T1JNQVRfWFJHQjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwg IDQgfSwKKwl7IERSTV9GT1JNQVRfWEJHUjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8 IERFX0dSQVBISUNTMiwgIDUgfSwKKwl7IERSTV9GT1JNQVRfUkdCODg4LCBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA2IH0sCisJeyBEUk1fRk9STUFUX0JHUjg4OCwg REVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNyB9LAorCXsgRFJNX0ZP Uk1BVF9SR0JBNTU1MSwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAg OCB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSMTU1NSwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfR1JBUEhJQ1MyLCAgOSB9LAorCXsgRFJNX0ZPUk1BVF9SR0I1NjUsIERFX1ZJREVPMSB8IERF X0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgMTAgfSwKKwl7IERSTV9GT1JNQVRfQkdSNTY1LCBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsIDExIH0sCisJeyBEUk1fRk9S TUFUX1VZVlksIERFX1ZJREVPMSwgMTIgfSwKKwl7IERSTV9GT1JNQVRfWVVZViwgREVfVklERU8x LCAxMyB9LAorCXsgRFJNX0ZPUk1BVF9OVjEyLCBERV9WSURFTzEsIDE0IH0sCisJeyBEUk1fRk9S TUFUX1lVVjQyMCwgREVfVklERU8xLCAxNSB9LAorfTsKKworI2RlZmluZSBNQUxJRFBfSUQoX19n cm91cCwgX19mb3JtYXQpIFwKKwkoKCgoX19ncm91cCkgJiAweDcpIDw8IDMpIHwgKChfX2Zvcm1h dCkgJiAweDcpKQorCisjZGVmaW5lIE1BTElEUF9DT01NT05fRk9STUFUUyBcCisJLyogICAgZm91 cmNjLCAgIGxheWVycyBzdXBwb3J0aW5nIHRoZSBmb3JtYXQsICAgICAgaW50ZXJuYWwgaWQgICAq LyBcCisJeyBEUk1fRk9STUFUX0FSR0IyMTAxMDEwLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEg fCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAwKSB9LCBcCisJeyBEUk1fRk9STUFUX0FCR1IyMTAx MDEwLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAx KSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQkExMDEwMTAyLCBERV9WSURFTzEgfCBERV9HUkFQSElD UzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAyKSB9LCBcCisJeyBEUk1fRk9STUFUX0JHUkEx MDEwMTAyLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgw LCAzKSB9LCBcCisJeyBEUk1fRk9STUFUX0FSR0I4ODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElD UzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDApIH0sIFwKKwl7IERSTV9G T1JNQVRfQUJHUjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERF X1NNQVJULCBNQUxJRFBfSUQoMSwgMSkgfSwgXAorCXsgRFJNX0ZPUk1BVF9SR0JBODg4OCwgREVf VklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgx LCAyKSB9LCBcCisJeyBEUk1fRk9STUFUX0JHUkE4ODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElD UzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDMpIH0sIFwKKwl7IERSTV9G T1JNQVRfWFJHQjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERF X1NNQVJULCBNQUxJRFBfSUQoMiwgMCkgfSwgXAorCXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgREVf VklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgy LCAxKSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQlg4ODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElD UzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDIpIH0sIFwKKwl7IERSTV9G T1JNQVRfQkdSWDg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERF X1NNQVJULCBNQUxJRFBfSUQoMiwgMykgfSwgXAorCXsgRFJNX0ZPUk1BVF9SR0I4ODgsIERFX1ZJ REVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDMsIDApIH0sIFwKKwl7 IERSTV9GT1JNQVRfQkdSODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIs IE1BTElEUF9JRCgzLCAxKSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQkE1NTUxLCBERV9WSURFTzEg fCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAwKSB9LCBcCisJeyBEUk1f Rk9STUFUX0FCR1IxNTU1LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1B TElEUF9JRCg0LCAxKSB9LCBcCisJeyBEUk1fRk9STUFUX1JHQjU2NSwgREVfVklERU8xIHwgREVf R1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNCwgMikgfSwgXAorCXsgRFJNX0ZPUk1B VF9CR1I1NjUsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lE KDQsIDMpIH0sIFwKKwl7IERSTV9GT1JNQVRfWVVZViwgREVfVklERU8xIHwgREVfVklERU8yLCBN QUxJRFBfSUQoNSwgMikgfSwJXAorCXsgRFJNX0ZPUk1BVF9VWVZZLCBERV9WSURFTzEgfCBERV9W SURFTzIsIE1BTElEUF9JRCg1LCAzKSB9LAlcCisJeyBEUk1fRk9STUFUX05WMTIsIERFX1ZJREVP MSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDYpIH0sCVwKKwl7IERSTV9GT1JNQVRfWVVWNDIw LCBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA3KSB9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCBtYWxpZHA1NTBfZGVfZm9ybWF0c1tdID0gewor CU1BTElEUF9DT01NT05fRk9STUFUUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRw X2xheWVyIG1hbGlkcDUwMF9sYXllcnNbXSA9IHsKKwl7IERFX1ZJREVPMSwgTUFMSURQNTAwX0RF X0xWX0JBU0UsIE1BTElEUDUwMF9ERV9MVl9QVFJfQkFTRSB9LAorCXsgREVfR1JBUEhJQ1MxLCBN QUxJRFA1MDBfREVfTEcxX0JBU0UsIE1BTElEUDUwMF9ERV9MRzFfUFRSX0JBU0UgfSwKKwl7IERF X0dSQVBISUNTMiwgTUFMSURQNTAwX0RFX0xHMl9CQVNFLCBNQUxJRFA1MDBfREVfTEcyX1BUUl9C QVNFIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciBtYWxpZHA1NTBf bGF5ZXJzW10gPSB7CisJeyBERV9WSURFTzEsIE1BTElEUDU1MF9ERV9MVjFfQkFTRSwgTUFMSURQ NTUwX0RFX0xWMV9QVFJfQkFTRSB9LAorCXsgREVfR1JBUEhJQ1MxLCBNQUxJRFA1NTBfREVfTEdf QkFTRSwgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNFIH0sCisJeyBERV9WSURFTzIsIE1BTElEUDU1 MF9ERV9MVjJfQkFTRSwgTUFMSURQNTUwX0RFX0xWMl9QVFJfQkFTRSB9LAorCXsgREVfU01BUlQs IE1BTElEUDU1MF9ERV9MU19CQVNFLCBNQUxJRFA1NTBfREVfTFNfUFRSX0JBU0UgfSwKK307CisK KyNkZWZpbmUgTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQJNQorCitzdGF0aWMgaW50 IG1hbGlkcDUwMF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7CisJ dTMyIGNvbmYgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQNTAwX0NPTkZJR19JRCk7CisJ LyogYml0IDQgb2YgdGhlIENPTkZJR19JRCByZWdpc3RlciBob2xkcyB0aGUgbGluZSBzaXplIG11 bHRpcGxpZXIgKi8KKwl1OCBsbl9zaXplX211bHQgPSBjb25mICYgMHgxMCA/IDIgOiAxOworCisJ aHdkZXYtPm1pbl9saW5lX3NpemUgPSAyOworCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfMksg KiBsbl9zaXplX211bHQ7CisJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXSA9IFNaXzFLICogNjQg KiBsbl9zaXplX211bHQ7CisJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IDA7IC8qIG5vIHNl Y29uZCByb3RhdGlvbiBtZW1vcnkgYmFuayAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIG1hbGlkcDUwMF9lbnRlcl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAq aHdkZXYpCit7CisJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7CisKKwltYWxpZHBfaHdfc2V0Yml0 cyhod2RldiwgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEsIE1BTElEUDUwMF9EQ19DT05UUk9MKTsK Kwl3aGlsZSAoY291bnQpIHsKKwkJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2 LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwkJaWYgKChzdGF0dXMgJiBNQUxJ RFA1MDBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpCisJCQlicmVh azsKKwkJLyoKKwkJICogZW50ZXJpbmcgY29uZmlnIG1vZGUgY2FuIHRha2UgYXMgbG9uZyBhcyB0 aGUgcmVuZGVyaW5nCisJCSAqIG9mIGEgZnVsbCBmcmFtZSwgaGVuY2UgdGhlIGxvbmcgc2xlZXAg aGVyZQorCQkgKi8KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMDAwKTsKKwkJY291bnQtLTsKKwl9 CisJV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBjb25maWcgbW9kZSIp OworfQorCitzdGF0aWMgdm9pZCBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMTAwOworCisJ bWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEsIE1BTElE UDUwMF9EQ19DT05UUk9MKTsKKwl3aGlsZSAoY291bnQpIHsKKwkJc3RhdHVzID0gbWFsaWRwX2h3 X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwkJ aWYgKChzdGF0dXMgJiBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSkgPT0gMCkKKwkJCWJyZWFrOwor CQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJY291bnQtLTsKKwl9CisJV0FSTihjb3VudCA9 PSAwLCAidGltZW91dCB3aGlsZSBsZWF2aW5nIGNvbmZpZyBtb2RlIik7Cit9CisKK3N0YXRpYyBi b29sIG1hbGlkcDUwMF9pbl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYpCit7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBo d2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7CisJaWYgKChzdGF0dXMgJiBN QUxJRFA1MDBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpCisJCXJl dHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHA1MDBf c2V0X2NvbmZpZ192YWxpZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7CisJbWFs aWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDUwMF9DT05GSUdf VkFMSUQpOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHA1MDBfbW9kZXNldChzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm1vZGUpCit7CisJdTMyIHZhbCA9 IDA7CisKKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ0xFQVJfTUFT SywgTUFMSURQNTAwX0RDX0NPTlRST0wpOworCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxB R1NfSFNZTkNfSElHSCkKKwkJdmFsIHw9IE1BTElEUDUwMF9IU1lOQ1BPTDsKKwlpZiAobW9kZS0+ ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1ZTWU5DX0hJR0gpCisJCXZhbCB8PSBNQUxJRFA1MDBfVlNZ TkNQT0w7CisJdmFsIHw9IE1BTElEUF9ERV9ERUZBVUxUX1BSRUZFVENIX1NUQVJUOworCW1hbGlk cF9od19zZXRiaXRzKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9EQ19DT05UUk9MKTsKKworCS8qCisJ ICogTWFsaS1EUDUwMCBlbmNvZGVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGxpa2UgdGhpczoKKwkg KiAgICAtIHJlZCAgIEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMTI6MF0KKwkgKiAgICAtIGdyZWVu IEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMjc6MTZdCisJICogICAgLSBibHVlICBAIChNQUxJRFA1 MDBfQkdORF9DT0xPUiArIDQpWzEyOjBdCisJICovCisJdmFsID0gKChNQUxJRFBfQkdORF9DT0xP Ul9HICYgMHhmZmYpIDw8IDE2KSB8CisJICAgICAgKE1BTElEUF9CR05EX0NPTE9SX1IgJiAweGZm Zik7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9CR05EX0NPTE9SKTsK KwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIE1BTElEUF9CR05EX0NPTE9SX0IsIE1BTElEUDUwMF9C R05EX0NPTE9SICsgNCk7CisKKwl2YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhm cm9udF9wb3JjaCkgfAorCQlNQUxJRFBfREVfSF9CQUNLUE9SQ0gobW9kZS0+aGJhY2tfcG9yY2gp OworCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5HU19CQVNFICsg TUFMSURQX0RFX0hfVElNSU5HUyk7CisKKwl2YWwgPSBNQUxJRFA1MDBfREVfVl9GUk9OVFBPUkNI KG1vZGUtPnZmcm9udF9wb3JjaCkgfAorCQlNQUxJRFBfREVfVl9CQUNLUE9SQ0gobW9kZS0+dmJh Y2tfcG9yY2gpOworCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5H U19CQVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7CisKKwl2YWwgPSBNQUxJRFBfREVfSF9TWU5D V0lEVEgobW9kZS0+aHN5bmNfbGVuKSB8CisJCU1BTElEUF9ERV9WX1NZTkNXSURUSChtb2RlLT52 c3luY19sZW4pOworCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5H U19CQVNFICsgTUFMSURQX0RFX1NZTkNfV0lEVEgpOworCisJdmFsID0gTUFMSURQX0RFX0hfQUNU SVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RFX1ZfQUNUSVZFKG1vZGUtPnZhY3RpdmUpOwor CW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5HU19CQVNFICsgTUFM SURQX0RFX0hWX0FDVElWRSk7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0lO VEVSTEFDRUQpCisJCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lM QUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7CisJZWxzZQorCQltYWxpZHBfaHdfY2xlYXJi aXRzKGh3ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVO Qyk7Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwNTAwX3JvdG1lbV9yZXF1aXJlZChzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCkKK3sKKwl1bnNpZ25l ZCBpbnQgZGVwdGg7CisJaW50IGJwcDsKKworCS8qIFJHQjg4OCBvciBCR1I4ODggY2FuJ3QgYmUg cm90YXRlZCAqLworCWlmICgoZm10ID09IERSTV9GT1JNQVRfUkdCODg4KSB8fCAoZm10ID09IERS TV9GT1JNQVRfQkdSODg4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEVhY2ggbGF5 ZXIgbmVlZHMgZW5vdWdoIHJvdGF0aW9uIG1lbW9yeSB0byBmaXQgOCBsaW5lcworCSAqIHdvcnRo IG9mIHBpeGVsIGRhdGEuIFJlcXVpcmVkIHNpemUgaXMgdGhlbjoKKwkgKiAgICBzaXplID0gcm90 YXRlZF93aWR0aCAqIChicHAgLyA4KSAqIDg7CisJICovCisJZHJtX2ZiX2dldF9icHBfZGVwdGgo Zm10LCAmZGVwdGgsICZicHApOworCisJcmV0dXJuIHcgKiBicHA7Cit9CisKK3N0YXRpYyBpbnQg bWFsaWRwNTUwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKK3sKKwl1 MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1NTBfQ09ORklHX0lEKTsKKwl1 OCBsbl9zaXplID0gKGNvbmYgPj4gNCkgJiAweDMsIHJzaXplOworCisJaHdkZXYtPm1pbl9saW5l X3NpemUgPSAyOworCisJc3dpdGNoIChsbl9zaXplKSB7CisJY2FzZSAwOgorCQlod2Rldi0+bWF4 X2xpbmVfc2l6ZSA9IFNaXzJLOworCQkvKiB0d28gYmFua3Mgb2YgNjRLQiBmb3Igcm90YXRpb24g bWVtb3J5ICovCisJCXJzaXplID0gNjQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaHdkZXYtPm1h eF9saW5lX3NpemUgPSBTWl80SzsKKwkJLyogdHdvIGJhbmtzIG9mIDEyOEtCIGZvciByb3RhdGlv biBtZW1vcnkgKi8KKwkJcnNpemUgPSAxMjg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaHdkZXYt Pm1heF9saW5lX3NpemUgPSAxMjgwOworCQkvKiB0d28gYmFua3Mgb2YgNDBLQiBmb3Igcm90YXRp b24gbWVtb3J5ICovCisJCXJzaXplID0gNDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogcmVz ZXJ2ZWQgdmFsdWUgKi8KKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAwOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gaHdkZXYtPnJvdGF0aW9u X21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IG1hbGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYpCit7CisJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7CisKKwltYWxpZHBfaHdfc2V0Yml0cyho d2RldiwgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEsIE1BTElEUDU1MF9EQ19DT05UUk9MKTsKKwl3 aGlsZSAoY291bnQpIHsKKwkJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5t YXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1 NTBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpCisJCQlicmVhazsK KwkJLyoKKwkJICogZW50ZXJpbmcgY29uZmlnIG1vZGUgY2FuIHRha2UgYXMgbG9uZyBhcyB0aGUg cmVuZGVyaW5nCisJCSAqIG9mIGEgZnVsbCBmcmFtZSwgaGVuY2UgdGhlIGxvbmcgc2xlZXAgaGVy ZQorCQkgKi8KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMDAwKTsKKwkJY291bnQtLTsKKwl9CisJ V0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBjb25maWcgbW9kZSIpOwor fQorCitzdGF0aWMgdm9pZCBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1hbGlk cF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMTAwOworCisJbWFs aWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEsIE1BTElEUDU1 MF9EQ19DT05UUk9MKTsKKwl3aGlsZSAoY291bnQpIHsKKwkJc3RhdHVzID0gbWFsaWRwX2h3X3Jl YWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwkJaWYg KChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkgPT0gMCkKKwkJCWJyZWFrOworCQl1 c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJY291bnQtLTsKKwl9CisJV0FSTihjb3VudCA9PSAw LCAidGltZW91dCB3aGlsZSBsZWF2aW5nIGNvbmZpZyBtb2RlIik7Cit9CisKK3N0YXRpYyBib29s IG1hbGlkcDU1MF9pbl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYp Cit7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rl di0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7CisJaWYgKChzdGF0dXMgJiBNQUxJ RFA1NTBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpCisJCXJldHVy biB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHA1NTBfc2V0 X2NvbmZpZ192YWxpZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7CisJbWFsaWRw X2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFM SUQpOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHA1NTBfbW9kZXNldChzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm1vZGUpCit7CisJdTMyIHZhbCA9IE1B TElEUF9ERV9ERUZBVUxUX1BSRUZFVENIX1NUQVJUOworCisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2 LCB2YWwsIE1BTElEUDU1MF9ERV9DT05UUk9MKTsKKwkvKgorCSAqIE1hbGktRFA1NTAgYW5kIE1h bGktRFA2NTAgZW5jb2RlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGxpa2UgdGhpczoKKwkgKiAgIC0g cmVkICAgQCBNQUxJRFA1NTBfREVfQkdORF9DT0xPUlsyMzoxNl0KKwkgKiAgIC0gZ3JlZW4gQCBN QUxJRFA1NTBfREVfQkdORF9DT0xPUlsxNTo4XQorCSAqICAgLSBibHVlICBAIE1BTElEUDU1MF9E RV9CR05EX0NPTE9SWzc6MF0KKwkgKgorCSAqIFdlIG5lZWQgdG8gdHJ1bmNhdGUgdGhlIGxlYXN0 IHNpZ25pZmljYW50IDQgYml0cyBmcm9tIHRoZSBkZWZhdWx0CisJICogTUFMSURQX0JHTkRfQ09M T1JfeCB2YWx1ZXMKKwkgKi8KKwl2YWwgPSAoKChNQUxJRFBfQkdORF9DT0xPUl9SID4+IDQpICYg MHhmZikgPDwgMTYpIHwKKwkgICAgICAoKChNQUxJRFBfQkdORF9DT0xPUl9HID4+IDQpICYgMHhm ZikgPDwgOCkgfAorCSAgICAgICgoTUFMSURQX0JHTkRfQ09MT1JfQiA+PiA0KSAmIDB4ZmYpOwor CW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfREVfQkdORF9DT0xPUik7CisK Kwl2YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAorCQlN QUxJRFBfREVfSF9CQUNLUE9SQ0gobW9kZS0+aGJhY2tfcG9yY2gpOworCW1hbGlkcF9od193cml0 ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfVElNSU5HU19CQVNFICsgTUFMSURQX0RFX0hfVElNSU5H Uyk7CisKKwl2YWwgPSBNQUxJRFA1NTBfREVfVl9GUk9OVFBPUkNIKG1vZGUtPnZmcm9udF9wb3Jj aCkgfAorCQlNQUxJRFBfREVfVl9CQUNLUE9SQ0gobW9kZS0+dmJhY2tfcG9yY2gpOworCW1hbGlk cF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfVElNSU5HU19CQVNFICsgTUFMSURQX0RF X1ZfVElNSU5HUyk7CisKKwl2YWwgPSBNQUxJRFBfREVfSF9TWU5DV0lEVEgobW9kZS0+aHN5bmNf bGVuKSB8CisJCU1BTElEUF9ERV9WX1NZTkNXSURUSChtb2RlLT52c3luY19sZW4pOworCWlmICht b2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSCkKKwkJdmFsIHw9IE1BTElEUDU1 MF9IU1lOQ1BPTDsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1ZTWU5DX0hJR0gp CisJCXZhbCB8PSBNQUxJRFA1NTBfVlNZTkNQT0w7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2 YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfU1lOQ19XSURUSCk7CisKKwl2 YWwgPSBNQUxJRFBfREVfSF9BQ1RJVkUobW9kZS0+aGFjdGl2ZSkgfCBNQUxJRFBfREVfVl9BQ1RJ VkUobW9kZS0+dmFjdGl2ZSk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1 MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSFZfQUNUSVZFKTsKKworCWlmIChtb2RlLT5mbGFn cyAmIERJU1BMQVlfRkxBR1NfSU5URVJMQUNFRCkKKwkJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYs IE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKKwllbHNl CisJCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBN QUxJRFBfREVfRElTUExBWV9GVU5DKTsKK30KKworc3RhdGljIGludCBtYWxpZHA1NTBfcm90bWVt X3JlcXVpcmVkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1 MzIgZm10KQoreworCXUzMiBieXRlc19wZXJfY29sOworCisJLyogcmF3IFJHQjg4OCBvciBCR1I4 ODggY2FuJ3QgYmUgcm90YXRlZCAqLworCWlmICgoZm10ID09IERSTV9GT1JNQVRfUkdCODg4KSB8 fCAoZm10ID09IERSTV9GT1JNQVRfQkdSODg4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0 Y2ggKGZtdCkgeworCS8qIDggbGluZXMgYXQgNCBieXRlcyBwZXIgcGl4ZWwgKi8KKwljYXNlIERS TV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgorCWNh c2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAxMDI6 CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoK KwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJ Y2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwlj YXNlIERSTV9GT1JNQVRfUkdCODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJLyogMTYg bGluZXMgYXQgMiBieXRlcyBwZXIgcGl4ZWwgKi8KKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6 CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJ Y2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwljYXNlIERSTV9GT1JNQVRfVVlWWToKKwljYXNlIERS TV9GT1JNQVRfWVVZVjoKKwkJYnl0ZXNfcGVyX2NvbCA9IDMyOworCQlicmVhazsKKwkvKiAxNiBs aW5lcyBhdCAxLjUgYnl0ZXMgcGVyIHBpeGVsICovCisJY2FzZSBEUk1fRk9STUFUX05WMTI6CisJ Y2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwkJYnl0ZXNfcGVyX2NvbCA9IDI0OworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdyAqIGJ5dGVzX3Bl cl9jb2w7Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwNjUwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldikKK3sKKwl1MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBN QUxJRFA1NTBfQ09ORklHX0lEKTsKKwl1OCBsbl9zaXplID0gKGNvbmYgPj4gNCkgJiAweDMsIHJz aXplOworCisJaHdkZXYtPm1pbl9saW5lX3NpemUgPSA0OworCisJc3dpdGNoIChsbl9zaXplKSB7 CisJY2FzZSAwOgorCWNhc2UgMjoKKwkJLyogcmVzZXJ2ZWQgdmFsdWVzICovCisJCWh3ZGV2LT5t YXhfbGluZV9zaXplID0gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSAxOgorCQlod2Rldi0+ bWF4X2xpbmVfc2l6ZSA9IFNaXzRLOworCQkvKiB0d28gYmFua3Mgb2YgMTI4S0IgZm9yIHJvdGF0 aW9uIG1lbW9yeSAqLworCQlyc2l6ZSA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlod2Rl di0+bWF4X2xpbmVfc2l6ZSA9IDI1NjA7CisJCS8qIHR3byBiYW5rcyBvZiA4MEtCIGZvciByb3Rh dGlvbiBtZW1vcnkgKi8KKwkJcnNpemUgPSA4MDsKKwl9CisKKwlod2Rldi0+cm90YXRpb25fbWVt b3J5WzBdID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7CisJcmV0 dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1hbGlkcF9kZXZpY2Vb TUFMSURQX01BWF9ERVZJQ0VTXSA9IHsKKwlbTUFMSURQXzUwMF0gPSB7CisJCS5tYXAgPSB7CisJ CQkuc2VfYmFzZSA9IE1BTElEUDUwMF9TRV9CQVNFLAorCQkJLmRjX2Jhc2UgPSBNQUxJRFA1MDBf RENfQkFTRSwKKwkJCS5vdXRfZGVwdGhfYmFzZSA9IE1BTElEUDUwMF9PVVRQVVRfREVQVEgsCisJ CQkuZmVhdHVyZXMgPSAwLAkvKiBubyBDTEVBUklSUSByZWdpc3RlciAqLworCQkJLm5fbGF5ZXJz ID0gQVJSQVlfU0laRShtYWxpZHA1MDBfbGF5ZXJzKSwKKwkJCS5sYXllcnMgPSBtYWxpZHA1MDBf bGF5ZXJzLAorCQkJLmRlX2lycV9tYXAgPSB7CisJCQkJLmlycV9tYXNrID0gTUFMSURQX0RFX0lS UV9VTkRFUlJVTiB8CisJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJRX0FYSV9FUlIgfAorCQkJCQkg ICAgTUFMSURQNTAwX0RFX0lSUV9WU1lOQyB8CisJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJRX0dM T0JBTCwKKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lSUV9WU1lOQywKKwkJCX0sCisJ CQkuc2VfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZf TU9ERSwKKwkJCQkudnN5bmNfaXJxID0gMCwKKwkJCX0sCisJCQkuZGNfaXJxX21hcCA9IHsKKwkJ CQkuaXJxX21hc2sgPSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfVkFMSUQsCisJCQkJLnZzeW5jX2ly cSA9IE1BTElEUDUwMF9ERV9JUlFfQ09ORl9WQUxJRCwKKwkJCX0sCisJCQkuaW5wdXRfZm9ybWF0 cyA9IG1hbGlkcDUwMF9kZV9mb3JtYXRzLAorCQkJLm5faW5wdXRfZm9ybWF0cyA9IEFSUkFZX1NJ WkUobWFsaWRwNTAwX2RlX2Zvcm1hdHMpLAorCQl9LAorCQkucXVlcnlfaHcgPSBtYWxpZHA1MDBf cXVlcnlfaHcsCisJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlkcDUwMF9lbnRlcl9jb25maWdf bW9kZSwKKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0gbWFsaWRwNTAwX2xlYXZlX2NvbmZpZ19tb2Rl LAorCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1MDBfaW5fY29uZmlnX21vZGUsCisJCS5zZXRf Y29uZmlnX3ZhbGlkID0gbWFsaWRwNTAwX3NldF9jb25maWdfdmFsaWQsCisJCS5tb2Rlc2V0ID0g bWFsaWRwNTAwX21vZGVzZXQsCisJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxpZHA1MDBfcm90bWVt X3JlcXVpcmVkLAorCX0sCisJW01BTElEUF81NTBdID0geworCQkubWFwID0geworCQkJLnNlX2Jh c2UgPSBNQUxJRFA1NTBfU0VfQkFTRSwKKwkJCS5kY19iYXNlID0gTUFMSURQNTUwX0RDX0JBU0Us CisJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRILAorCQkJLmZl YXR1cmVzID0gTUFMSURQX1JFR01BUF9IQVNfQ0xFQVJJUlEsCisJCQkubl9sYXllcnMgPSBBUlJB WV9TSVpFKG1hbGlkcDU1MF9sYXllcnMpLAorCQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXllcnMs CisJCQkuZGVfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVS UlVOIHwKKwkJCQkJICAgIE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCisJCQkJLnZzeW5jX2lycSA9 IE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCisJCQl9LAorCQkJLnNlX2lycV9tYXAgPSB7CisJCQkJ LmlycV9tYXNrID0gTUFMSURQNTUwX1NFX0lSUV9FT1cgfAorCQkJCQkgICAgTUFMSURQNTUwX1NF X0lSUV9BWElfRVJSLAorCQkJfSwKKwkJCS5kY19pcnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9 IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTUw X0RDX0lSUV9DT05GX1ZBTElELAorCQkJfSwKKwkJCS5pbnB1dF9mb3JtYXRzID0gbWFsaWRwNTUw X2RlX2Zvcm1hdHMsCisJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlfU0laRShtYWxpZHA1NTBf ZGVfZm9ybWF0cyksCisJCX0sCisJCS5xdWVyeV9odyA9IG1hbGlkcDU1MF9xdWVyeV9odywKKwkJ LmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2VudGVyX2NvbmZpZ19tb2RlLAorCQkubGVh dmVfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUsCisJCS5pbl9jb25m aWdfbW9kZSA9IG1hbGlkcDU1MF9pbl9jb25maWdfbW9kZSwKKwkJLnNldF9jb25maWdfdmFsaWQg PSBtYWxpZHA1NTBfc2V0X2NvbmZpZ192YWxpZCwKKwkJLm1vZGVzZXQgPSBtYWxpZHA1NTBfbW9k ZXNldCwKKwkJLnJvdG1lbV9yZXF1aXJlZCA9IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWlyZWQsCisJ fSwKKwlbTUFMSURQXzY1MF0gPSB7CisJCS5tYXAgPSB7CisJCQkuc2VfYmFzZSA9IE1BTElEUDU1 MF9TRV9CQVNFLAorCQkJLmRjX2Jhc2UgPSBNQUxJRFA1NTBfRENfQkFTRSwKKwkJCS5vdXRfZGVw dGhfYmFzZSA9IE1BTElEUDU1MF9ERV9PVVRQVVRfREVQVEgsCisJCQkuZmVhdHVyZXMgPSBNQUxJ RFBfUkVHTUFQX0hBU19DTEVBUklSUSwKKwkJCS5uX2xheWVycyA9IEFSUkFZX1NJWkUobWFsaWRw NTUwX2xheWVycyksCisJCQkubGF5ZXJzID0gbWFsaWRwNTUwX2xheWVycywKKwkJCS5kZV9pcnFf bWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElEUF9ERV9JUlFfVU5ERVJSVU4gfAorCQkJCQkg ICAgTUFMSURQNjUwX0RFX0lSUV9EUklGVCB8CisJCQkJCSAgICBNQUxJRFA1NTBfREVfSVJRX1ZT WU5DLAorCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAorCQkJfSwKKwkJ CS5zZV9pcnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1MF9TRV9JUlFfRU9XIHwK KwkJCQkJICAgIE1BTElEUDU1MF9TRV9JUlFfQVhJX0VSUiwKKwkJCX0sCisJCQkuZGNfaXJxX21h cCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQsCisJCQkJ LnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKKwkJCX0sCisJCQkuaW5w dXRfZm9ybWF0cyA9IG1hbGlkcDU1MF9kZV9mb3JtYXRzLAorCQkJLm5faW5wdXRfZm9ybWF0cyA9 IEFSUkFZX1NJWkUobWFsaWRwNTUwX2RlX2Zvcm1hdHMpLAorCQl9LAorCQkucXVlcnlfaHcgPSBt YWxpZHA2NTBfcXVlcnlfaHcsCisJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9lbnRl cl9jb25maWdfbW9kZSwKKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2xlYXZlX2Nv bmZpZ19tb2RlLAorCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUs CisJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTUwX3NldF9jb25maWdfdmFsaWQsCisJCS5t b2Rlc2V0ID0gbWFsaWRwNTUwX21vZGVzZXQsCisJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxpZHA1 NTBfcm90bWVtX3JlcXVpcmVkLAorCX0sCit9OworCit1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9p ZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCAqbWFwLAorCQkJICAgdTggbGF5ZXJfaWQs IHUzMiBmb3JtYXQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFw LT5uX2lucHV0X2Zvcm1hdHM7IGkrKykgeworCQlpZiAoKChtYXAtPmlucHV0X2Zvcm1hdHNbaV0u bGF5ZXIgJiBsYXllcl9pZCkgPT0gbGF5ZXJfaWQpICYmCisJCSAgICAobWFwLT5pbnB1dF9mb3Jt YXRzW2ldLmZvcm1hdCA9PSBmb3JtYXQpKQorCQkJcmV0dXJuIG1hcC0+aW5wdXRfZm9ybWF0c1tp XS5pZDsKKwl9CisKKwlyZXR1cm4gTUFMSURQX0lOVkFMSURfRk9STUFUX0lEOworfQorCitzdGF0 aWMgdm9pZCBtYWxpZHBfaHdfY2xlYXJfaXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTggYmxvY2ssIHUzMiBpcnEpCit7CisJdTMyIGJhc2UgPSBtYWxpZHBfZ2V0X2Jsb2NrX2Jh c2UoaHdkZXYsIGJsb2NrKTsKKworCWlmIChod2Rldi0+bWFwLmZlYXR1cmVzICYgTUFMSURQX1JF R01BUF9IQVNfQ0xFQVJJUlEpCisJCW1hbGlkcF9od193cml0ZShod2RldiwgaXJxLCBiYXNlICsg TUFMSURQX1JFR19DTEVBUklSUSk7CisJZWxzZQorCQltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGly cSwgYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG1h bGlkcF9kZV9pcnEoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBhcmc7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7 CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2OworCWNvbnN0IHN0cnVjdCBtYWxpZHBf aXJxX21hcCAqZGU7CisJdTMyIHN0YXR1cywgbWFzaywgZGNfc3RhdHVzOworCWlycXJldHVybl90 IHJldCA9IElSUV9OT05FOworCisJaWYgKCFkcm0tPmRldl9wcml2YXRlKQorCQlyZXR1cm4gSVJR X0hBTkRMRUQ7CisKKwlod2RldiA9IG1hbGlkcC0+ZGV2OworCWRlID0gJmh3ZGV2LT5tYXAuZGVf aXJxX21hcDsKKworCS8qIGZpcnN0IGhhbmRsZSB0aGUgY29uZmlnIHZhbGlkIElSUSAqLworCWRj X3N0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJ RFBfUkVHX1NUQVRVUyk7CisJaWYgKGRjX3N0YXR1cyAmIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC52 c3luY19pcnEpIHsKKwkJLyogd2UgaGF2ZSBhIHBhZ2UgZmxpcCBldmVudCAqLworCQlhdG9taWNf c2V0KCZtYWxpZHAtPmNvbmZpZ192YWxpZCwgMSk7CisJCW1hbGlkcF9od19jbGVhcl9pcnEoaHdk ZXYsIE1BTElEUF9EQ19CTE9DSywgZGNfc3RhdHVzKTsKKwkJcmV0ID0gSVJRX1dBS0VfVEhSRUFE OworCX0KKworCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFBfUkVHX1NUQVRV Uyk7CisJaWYgKCEoc3RhdHVzICYgZGUtPmlycV9tYXNrKSkKKwkJcmV0dXJuIHJldDsKKworCW1h c2sgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQX1JFR19NQVNLSVJRKTsKKwlzdGF0dXMg Jj0gbWFzazsKKwlpZiAoc3RhdHVzICYgZGUtPnZzeW5jX2lycSkKKwkJZHJtX2NydGNfaGFuZGxl X3ZibGFuaygmbWFsaWRwLT5jcnRjKTsKKworCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1B TElEUF9ERV9CTE9DSywgc3RhdHVzKTsKKworCXJldHVybiAocmV0ID09IElSUV9OT05FKSA/IElS UV9IQU5ETEVEIDogcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX2RlX2lycV90 aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IGFyZzsKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKworCXdha2VfdXAoJm1hbGlkcC0+d3EpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQor CitpbnQgbWFsaWRwX2RlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEp Cit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisJaW50IHJldDsKKwor CS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLworCW1hbGlkcF9od19kaXNhYmxl X2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLCAweGZmZmZmZmZmKTsKKwltYWxpZHBfaHdfY2xl YXJfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCW1hbGlkcF9od19k aXNhYmxlX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NLLCAweGZmZmZmZmZmKTsKKwltYWxpZHBf aHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfRENfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCisJcmV0 ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwgaXJxLCBtYWxpZHBfZGVfaXJx LAorCQkJCQltYWxpZHBfZGVfaXJxX3RocmVhZF9oYW5kbGVyLAorCQkJCQlJUlFGX1NIQVJFRCwg Im1hbGlkcC1kZSIsIGRybSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gaW5zdGFsbCBERSBJUlEgaGFuZGxlclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyog Zmlyc3QgZW5hYmxlIHRoZSBEQyBibG9jayBJUlFzICovCisJbWFsaWRwX2h3X2VuYWJsZV9pcnEo aHdkZXYsIE1BTElEUF9EQ19CTE9DSywKKwkJCSAgICAgaHdkZXYtPm1hcC5kY19pcnFfbWFwLmly cV9tYXNrKTsKKworCS8qIG5vdyBlbmFibGUgdGhlIERFIGJsb2NrIElSUXMgKi8KKwltYWxpZHBf aHdfZW5hYmxlX2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLAorCQkJICAgICBod2Rldi0+bWFw LmRlX2lycV9tYXAuaXJxX21hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWFsaWRwX2Rl X2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlkcF9kcm0g Km1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2ID0gbWFsaWRwLT5kZXY7CisKKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElE UF9ERV9CTE9DSywKKwkJCSAgICAgIGh3ZGV2LT5tYXAuZGVfaXJxX21hcC5pcnFfbWFzayk7CisJ bWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfRENfQkxPQ0ssCisJCQkgICAgICBo d2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qg bWFsaWRwX3NlX2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IGFyZzsKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKwl1MzIg c3RhdHVzLCBtYXNrOworCisJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5t YXAuc2VfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwlpZiAoIShzdGF0dXMgJiBod2Rldi0+ bWFwLnNlX2lycV9tYXAuaXJxX21hc2spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltYXNrID0g bWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9SRUdfTUFT S0lSUSk7CisJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFz ZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKKwlzdGF0dXMgJj0gbWFzazsKKwkvKiBUb0RvOiBzdGF0 dXMgZGVjb2RpbmcgYW5kIGZpcmluZyB1cCBvZiBWU1lOQyBhbmQgcGFnZSBmbGlwIGV2ZW50cyAq LworCisJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCBzdGF0dXMp OworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRw X3NlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJcmV0dXJuIElS UV9IQU5ETEVEOworfQorCitpbnQgbWFsaWRwX3NlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIGludCBpcnEpCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7 CisJaW50IHJldDsKKworCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLworCW1h bGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCAweGZmZmZmZmZmKTsK KwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIDB4ZmZmZmZmZmYp OworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwgaXJxLCBtYWxp ZHBfc2VfaXJxLAorCQkJCQltYWxpZHBfc2VfaXJxX3RocmVhZF9oYW5kbGVyLAorCQkJCQlJUlFG X1NIQVJFRCwgIm1hbGlkcC1zZSIsIGRybSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gaW5zdGFsbCBTRSBJUlEgaGFuZGxlclxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywKKwkJCSAg ICAgaHdkZXYtPm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKTsKKworCXJldHVybiAwOworfQorCit2 b2lkIG1hbGlkcF9zZV9pcnFfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVj dCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCisJbWFsaWRwX2h3X2Rpc2FibGVfaXJx KGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssCisJCQkgICAgICBod2Rldi0+bWFwLnNlX2lycV9tYXAu aXJxX21hc2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcu aCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMTQxNzQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hcm0vbWFsaWRwX2h3LmgKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKgorICogKEMpIENPUFlS SUdIVCAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRl ciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBhbmQg YW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCisg KiBvZiBzdWNoIEdOVSBsaWNlbmNlLgorICoKKyAqIEFSTSBNYWxpIERQIGhhcmR3YXJlIG1hbmlw dWxhdGlvbiByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIF9fTUFMSURQX0hXX0hfXworI2RlZmlu ZSBfX01BTElEUF9IV19IX18KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUg Im1hbGlkcF9yZWdzLmgiCisKK3N0cnVjdCB2aWRlb21vZGU7CitzdHJ1Y3QgY2xrOworCisvKiBN YWxpIERQIElQIGJsb2NrcyAqLworZW51bSB7CisJTUFMSURQX0RFX0JMT0NLID0gMCwKKwlNQUxJ RFBfU0VfQkxPQ0ssCisJTUFMSURQX0RDX0JMT0NLCit9OworCisvKiBNYWxpIERQIGxheWVyIElE cyAqLworZW51bSB7CisJREVfVklERU8xID0gQklUKDApLAorCURFX0dSQVBISUNTMSA9IEJJVCgx KSwKKwlERV9HUkFQSElDUzIgPSBCSVQoMiksIC8qIHVzZWQgb25seSBpbiBEUDUwMCAqLworCURF X1ZJREVPMiA9IEJJVCgzKSwKKwlERV9TTUFSVCA9IEJJVCg0KSwKK307CisKK3N0cnVjdCBtYWxp ZHBfaW5wdXRfZm9ybWF0IHsKKwl1MzIgZm9ybWF0OwkJLyogRFJNIGZvdXJjYyAqLworCXU4IGxh eWVyOwkJLyogYml0bWFzayBvZiBsYXllcnMgc3VwcG9ydGluZyBpdCAqLworCXU4IGlkOwkJCS8q IHVzZWQgaW50ZXJuYWxseSAqLworfTsKKworI2RlZmluZSBNQUxJRFBfSU5WQUxJRF9GT1JNQVRf SUQJMHhmZgorCisvKgorICogaGlkZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiByZWdpc3RlciBt YXBzCisgKiBieSB1c2luZyBhIGNvbW1vbiBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUKKyAqIGJhc2Ug cmVnaXN0ZXIgb2Zmc2V0cworICovCisKK3N0cnVjdCBtYWxpZHBfaXJxX21hcCB7CisJdTMyIGly cV9tYXNrOwkJLyogbWFzayBvZiBJUlFzIHRoYXQgY2FuIGJlIGVuYWJsZWQgaW4gdGhlIGJsb2Nr ICovCisJdTMyIHZzeW5jX2lycTsJCS8qIElSUSBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIGR1cmlu ZyBWU1lOQyAqLworfTsKKworc3RydWN0IG1hbGlkcF9sYXllciB7CisJdTE2IGlkOwkJCS8qIGxh eWVyIElEICovCisJdTE2IGJhc2U7CQkvKiBhZGRyZXNzIG9mZnNldCBmb3IgdGhlIHJlZ2lzdGVy IGJhbmsgKi8KKwl1MTYgcHRyOwkJLyogYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSBwb2ludGVyIHJl Z2lzdGVyICovCit9OworCisvKiByZWdtYXAgZmVhdHVyZXMgKi8KKyNkZWZpbmUgTUFMSURQX1JF R01BUF9IQVNfQ0xFQVJJUlEJKDEgPDwgMCkKKworc3RydWN0IG1hbGlkcF9od19yZWdtYXAgewor CS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBERSByZWdpc3RlciBiYW5rICovCisJLyogaXMgYWx3 YXlzIDB4MDAwMCAqLworCS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBTRSByZWdpc3RlcnMgYmFu ayAqLworCWNvbnN0IHUxNiBzZV9iYXNlOworCS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBEQyBy ZWdpc3RlcnMgYmFuayAqLworCWNvbnN0IHUxNiBkY19iYXNlOworCisJLyogYWRkcmVzcyBvZmZz ZXQgZm9yIHRoZSBvdXRwdXQgZGVwdGggcmVnaXN0ZXIgKi8KKwljb25zdCB1MTYgb3V0X2RlcHRo X2Jhc2U7CisKKwkvKiBiaXRtYXAgd2l0aCByZWdpc3RlciBtYXAgZmVhdHVyZXMgKi8KKwljb25z dCB1OCBmZWF0dXJlczsKKworCS8qIGxpc3Qgb2Ygc3VwcG9ydGVkIGxheWVycyAqLworCWNvbnN0 IHU4IG5fbGF5ZXJzOworCWNvbnN0IHN0cnVjdCBtYWxpZHBfbGF5ZXIgKmxheWVyczsKKworCWNv bnN0IHN0cnVjdCBtYWxpZHBfaXJxX21hcCBkZV9pcnFfbWFwOworCWNvbnN0IHN0cnVjdCBtYWxp ZHBfaXJxX21hcCBzZV9pcnFfbWFwOworCWNvbnN0IHN0cnVjdCBtYWxpZHBfaXJxX21hcCBkY19p cnFfbWFwOworCisJLyogbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0cyBmb3IgZWFjaCBs YXllciAqLworCWNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0ICppbnB1dF9mb3JtYXRz OworCWNvbnN0IHU4IG5faW5wdXRfZm9ybWF0czsKK307CisKK3N0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlIHsKKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCBtYXA7CisJdm9pZCBfX2lvbWVt ICpyZWdzOworCisJLyogQVBCIGNsb2NrICovCisJc3RydWN0IGNsayAqcGNsazsKKwkvKiBBWEkg Y2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICphY2xrOworCS8qIG1haW4gY2xvY2sgZm9yIGRpc3BsYXkg Y29yZSAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogcGl4ZWwgY2xvY2sgZm9yIGRpc3BsYXkg Y29yZSAqLworCXN0cnVjdCBjbGsgKnB4bGNsazsKKworCS8qCisJICogVmFsaWRhdGUgdGhlIGRy aXZlciBpbnN0YW5jZSBhZ2FpbnN0IHRoZSBoYXJkd2FyZSBiaXRzCisJICovCisJaW50ICgqcXVl cnlfaHcpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7CisKKwkvKgorCSAqIFNldCB0 aGUgaGFyZHdhcmUgaW50byBjb25maWcgbW9kZSwgcmVhZHkgdG8gYWNjZXB0IG1vZGUgY2hhbmdl cworCSAqLworCXZvaWQgKCplbnRlcl9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2KTsKKworCS8qCisJICogVGVsbCBoYXJkd2FyZSB0byBleGl0IGNvbmZpZ3VyYXRp b24gbW9kZQorCSAqLworCXZvaWQgKCpsZWF2ZV9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2KTsKKworCS8qCisJICogUXVlcnkgaWYgaGFyZHdhcmUgaXMgaW4gY29u ZmlndXJhdGlvbiBtb2RlCisJICovCisJYm9vbCAoKmluX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYpOworCisJLyoKKwkgKiBTZXQgY29uZmlndXJhdGlvbiB2YWxp ZCBmbGFnIGZvciBoYXJkd2FyZSBwYXJhbWV0ZXJzIHRoYXQgY2FuCisJICogYmUgY2hhbmdlZCBv dXRzaWRlIHRoZSBjb25maWd1cmF0aW9uIG1vZGUuIEhhcmR3YXJlIHdpbGwgdXNlCisJICogdGhl IG5ldyBzZXR0aW5ncyB3aGVuIGNvbmZpZyB2YWxpZCBpcyBzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0 aGUKKwkgKiBjdXJyZW50IGJ1ZmZlciBzY2Fub3V0CisJICovCisJdm9pZCAoKnNldF9jb25maWdf dmFsaWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7CisKKwkvKgorCSAqIFNldCBh IG5ldyBtb2RlIGluIGhhcmR3YXJlLiBSZXF1aXJlcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW4KKwkg KiBjb25maWd1cmF0aW9uIG1vZGUgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorCSAq LworCXZvaWQgKCptb2Rlc2V0KShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVj dCB2aWRlb21vZGUgKm0pOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHJvdGF0 aW9uIG1lbW9yeSBnaXZlbiB0aGUgYWN0aXZlIGFyZWEKKwkgKiBhbmQgdGhlIGJ1ZmZlciBmb3Jt YXQuCisJICovCisJaW50ICgqcm90bWVtX3JlcXVpcmVkKShzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCk7CisKKwl1OCBmZWF0dXJlczsKKworCXU4 IG1pbl9saW5lX3NpemU7CisJdTE2IG1heF9saW5lX3NpemU7CisKKwkvKiBzaXplIG9mIG1lbW9y eSB1c2VkIGZvciByb3RhdGluZyBsYXllcnMsIHVwIHRvIHR3byBiYW5rcyBhdmFpbGFibGUgKi8K Kwl1MzIgcm90YXRpb25fbWVtb3J5WzJdOworfTsKKworLyogU3VwcG9ydGVkIHZhcmlhbnRzIG9m IHRoZSBoYXJkd2FyZSAqLworZW51bSB7CisJTUFMSURQXzUwMCA9IDAsCisJTUFMSURQXzU1MCwK KwlNQUxJRFBfNjUwLAorCS8qIGtlZXAgdGhlIG5leHQgZW50cnkgbGFzdCAqLworCU1BTElEUF9N QVhfREVWSUNFUworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1h bGlkcF9kZXZpY2VbTUFMSURQX01BWF9ERVZJQ0VTXTsKKworc3RhdGljIGlubGluZSB1MzIgbWFs aWRwX2h3X3JlYWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgcmVnKQorewor CXJldHVybiByZWFkbChod2Rldi0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBtYWxpZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAorCQkJCSAg IHUzMiB2YWx1ZSwgdTMyIHJlZykKK3sKKwl3cml0ZWwodmFsdWUsIGh3ZGV2LT5yZWdzICsgcmVn KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hbGlkcF9od19zZXRiaXRzKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiwKKwkJCQkgICAgIHUzMiBtYXNrLCB1MzIgcmVnKQoreworCXUz MiBkYXRhID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIHJlZyk7CisKKwlkYXRhIHw9IG1hc2s7CisJ bWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBkYXRhLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgbWFsaWRwX2h3X2NsZWFyYml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsCisJ CQkJICAgICAgIHUzMiBtYXNrLCB1MzIgcmVnKQoreworCXUzMiBkYXRhID0gbWFsaWRwX2h3X3Jl YWQoaHdkZXYsIHJlZyk7CisKKwlkYXRhICY9IH5tYXNrOworCW1hbGlkcF9od193cml0ZShod2Rl diwgZGF0YSwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgbWFsaWRwX2dldF9ibG9ja19i YXNlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwKKwkJCQkJdTggYmxvY2spCit7CisJ c3dpdGNoIChibG9jaykgeworCWNhc2UgTUFMSURQX1NFX0JMT0NLOgorCQlyZXR1cm4gaHdkZXYt Pm1hcC5zZV9iYXNlOworCWNhc2UgTUFMSURQX0RDX0JMT0NLOgorCQlyZXR1cm4gaHdkZXYtPm1h cC5kY19iYXNlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFs aWRwX2h3X2Rpc2FibGVfaXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwKKwkJCQkJ IHU4IGJsb2NrLCB1MzIgaXJxKQoreworCXUzMiBiYXNlID0gbWFsaWRwX2dldF9ibG9ja19iYXNl KGh3ZGV2LCBibG9jayk7CisKKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBpcnEsIGJhc2Ug KyBNQUxJRFBfUkVHX01BU0tJUlEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFsaWRwX2h3 X2VuYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAorCQkJCQl1OCBibG9j aywgdTMyIGlycSkKK3sKKwl1MzIgYmFzZSA9IG1hbGlkcF9nZXRfYmxvY2tfYmFzZShod2Rldiwg YmxvY2spOworCisJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9S RUdfTUFTS0lSUSk7Cit9CisKK2ludCBtYWxpZHBfZGVfaXJxX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRybSwgaW50IGlycSk7Cit2b2lkIG1hbGlkcF9kZV9pcnFfZmluaShzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKTsKK2ludCBtYWxpZHBfc2VfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSwgaW50IGlycSk7Cit2b2lkIG1hbGlkcF9zZV9pcnFfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKTsKKwordTggbWFsaWRwX2h3X2dldF9mb3JtYXRfaWQoY29uc3Qgc3RydWN0IG1hbGlkcF9o d19yZWdtYXAgKm1hcCwKKwkJCSAgIHU4IGxheWVyX2lkLCB1MzIgZm9ybWF0KTsKKworLyoKKyAq IGJhY2tncm91bmQgY29sb3IgY29tcG9uZW50cyBhcmUgZGVmaW5lZCBhcyAxMmJpdHMgdmFsdWVz LAorICogdGhleSB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQgd2hlbiBzdG9yZWQgb24gaGFyZHdhcmUg dGhhdAorICogc3VwcG9ydHMgb25seSA4Yml0cyBwZXIgY2hhbm5lbAorICovCisjZGVmaW5lIE1B TElEUF9CR05EX0NPTE9SX1IJCTB4MDAwCisjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX0cJCTB4 MDAwCisjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX0IJCTB4MDAwCisKKyNlbmRpZiAgLyogX19N QUxJRFBfSFdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9w bGFuZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTA5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwpAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAq IChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq IEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUg dGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVz ZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCisgKiBvZiBz dWNoIEdOVSBsaWNlbmNlLgorICoKKyAqIEFSTSBNYWxpIERQIHBsYW5lIG1hbmlwdWxhdGlvbiBy b3V0aW5lcy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFu ZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm1hbGlkcF9ody5oIgorI2luY2x1ZGUgIm1hbGlkcF9k cnYuaCIKKworLyogTGF5ZXIgc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBN QUxJRFBfTEFZRVJfRk9STUFUCQkweDAwMAorI2RlZmluZSBNQUxJRFBfTEFZRVJfQ09OVFJPTAkJ MHgwMDQKKyNkZWZpbmUgICBMQVlFUl9FTkFCTEUJCQkoMSA8PCAwKQorI2RlZmluZSAgIExBWUVS X1JPVF9PRkZTRVQJCTgKKyNkZWZpbmUgICBMQVlFUl9IX0ZMSVAJCQkoMSA8PCAxMCkKKyNkZWZp bmUgICBMQVlFUl9WX0ZMSVAJCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBMQVlFUl9ST1RfTUFTSwkJ KDB4ZiA8PCA4KQorI2RlZmluZSBNQUxJRFBfTEFZRVJfU0laRQkJMHgwMGMKKyNkZWZpbmUgICBM QVlFUl9IX1ZBTCh4KQkJKCgoeCkgJiAweDFmZmYpIDw8IDApCisjZGVmaW5lICAgTEFZRVJfVl9W QUwoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQX0xBWUVSX0NPTVBf U0laRQkJMHgwMTAKKyNkZWZpbmUgTUFMSURQX0xBWUVSX09GRlNFVAkJMHgwMTQKKyNkZWZpbmUg TUFMSURQX0xBWUVSX1NUUklERQkJMHgwMTgKKworc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5l X2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG1hbGlkcF9wbGFu ZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOworCisJaWYgKG1wLT5iYXNlLmZiKQorCQlk cm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UobXAtPmJhc2UuZmIpOworCisJZHJtX3BsYW5lX2hl bHBlcl9kaXNhYmxlKHBsYW5lKTsKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJZGV2bV9r ZnJlZShwbGFuZS0+ZGV2LT5kZXYsIG1wKTsKK30KKworc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq bWFsaWRwX2R1cGxpY2F0ZV9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sK KwlzdHJ1Y3QgbWFsaWRwX3BsYW5lX3N0YXRlICpzdGF0ZSwgKm1fc3RhdGU7CisKKwlpZiAoIXBs YW5lLT5zdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpz dGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSkgeworCQltX3N0YXRlID0gdG9fbWFsaWRw X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpOworCQlzdGF0ZS0+cm90bWVtX3Np emUgPSBtX3N0YXRlLT5yb3RtZW1fc2l6ZTsKKwl9CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOwor fQorCit2b2lkIG1hbGlkcF9kZXN0cm95X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAorCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtYWxp ZHBfcGxhbmVfc3RhdGUgKm1fc3RhdGUgPSB0b19tYWxpZHBfcGxhbmVfc3RhdGUoc3RhdGUpOwor CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHN0YXRlKTsKKwlrZnJl ZShtX3N0YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbWFs aWRwX2RlX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBl cl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNh YmxlX3BsYW5lLAorCS5kZXN0cm95ID0gbWFsaWRwX2RlX3BsYW5lX2Rlc3Ryb3ksCisJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBtYWxpZHBfZHVwbGljYXRlX3BsYW5lX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IG1hbGlkcF9kZXN0cm95X3BsYW5lX3N0YXRlLAorfTsKKworc3RhdGljIGludCBtYWxpZHBf ZGVfcGxhbmVfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFs aWRwX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lX3N0YXRlICptcyA9IHRvX21h bGlkcF9wbGFuZV9zdGF0ZShzdGF0ZSk7CisJdTggZm9ybWF0X2lkOworCXUzMiBzcmNfdywgc3Jj X2g7CisKKwlpZiAoIXN0YXRlLT5jcnRjIHx8ICFzdGF0ZS0+ZmIpCisJCXJldHVybiAwOworCisJ Zm9ybWF0X2lkID0gbWFsaWRwX2h3X2dldF9mb3JtYXRfaWQoJm1wLT5od2Rldi0+bWFwLCBtcC0+ bGF5ZXItPmlkLAorCQkJCQkgICAgc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpOworCWlmIChmb3Jt YXRfaWQgPT0gTUFMSURQX0lOVkFMSURfRk9STUFUX0lEKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXNyY193ID0gc3RhdGUtPnNyY193ID4+IDE2OworCXNyY19oID0gc3RhdGUtPnNyY19oID4+IDE2 OworCisJaWYgKChzdGF0ZS0+Y3J0Y193ID4gbXAtPmh3ZGV2LT5tYXhfbGluZV9zaXplKSB8fAor CSAgICAoc3RhdGUtPmNydGNfaCA+IG1wLT5od2Rldi0+bWF4X2xpbmVfc2l6ZSkgfHwKKwkgICAg KHN0YXRlLT5jcnRjX3cgPCBtcC0+aHdkZXYtPm1pbl9saW5lX3NpemUpIHx8CisJICAgIChzdGF0 ZS0+Y3J0Y19oIDwgbXAtPmh3ZGV2LT5taW5fbGluZV9zaXplKSB8fAorCSAgICAoc3RhdGUtPmNy dGNfdyAhPSBzcmNfdykgfHwgKHN0YXRlLT5jcnRjX2ggIT0gc3JjX2gpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCS8qIHBhY2tlZCBSR0I4ODggLyBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCBvciBm bGlwcGVkICovCisJaWYgKHN0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSAmJgor CSAgICAoc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODggfHwKKwkg ICAgIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfQkdSODg4KSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwltcy0+cm90bWVtX3NpemUgPSAwOworCWlmIChzdGF0ZS0+cm90YXRp b24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7CisJCWludCB2YWw7CisKKwkJdmFsID0gbXAtPmh3 ZGV2LT5yb3RtZW1fcmVxdWlyZWQobXAtPmh3ZGV2LCBzdGF0ZS0+Y3J0Y19oLAorCQkJCQkJIHN0 YXRlLT5jcnRjX3csCisJCQkJCQkgc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpOworCQlpZiAodmFs IDwgMCkKKwkJCXJldHVybiB2YWw7CisKKwkJbXMtPnJvdG1lbV9zaXplID0gdmFsOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfdXBkYXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7CisJc3RydWN0IG1hbGlk cF9wbGFuZSAqbXA7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgKm1hcDsKKwl1OCBm b3JtYXRfaWQ7CisJdTE2IHB0cjsKKwl1MzIgZm9ybWF0LCBzcmNfdywgc3JjX2gsIGRlc3Rfdywg ZGVzdF9oLCB2YWwgPSAwOworCWludCBudW1fcGxhbmVzLCBpOworCisJbXAgPSB0b19tYWxpZHBf cGxhbmUocGxhbmUpOworCisJbWFwID0gJm1wLT5od2Rldi0+bWFwOworCWZvcm1hdCA9IHBsYW5l LT5zdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdDsKKwlmb3JtYXRfaWQgPSBtYWxpZHBfaHdfZ2V0X2Zv cm1hdF9pZChtYXAsIG1wLT5sYXllci0+aWQsIGZvcm1hdCk7CisJbnVtX3BsYW5lcyA9IGRybV9m b3JtYXRfbnVtX3BsYW5lcyhmb3JtYXQpOworCisJLyogY29udmVydCBzcmMgdmFsdWVzIGZyb20g UTE2IGZpeGVkIHBvaW50IHRvIGludGVnZXIgKi8KKwlzcmNfdyA9IHBsYW5lLT5zdGF0ZS0+c3Jj X3cgPj4gMTY7CisJc3JjX2ggPSBwbGFuZS0+c3RhdGUtPnNyY19oID4+IDE2OworCWlmIChwbGFu ZS0+c3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFURURfTUFTSykgeworCQlkZXN0X3cgPSBw bGFuZS0+c3RhdGUtPmNydGNfaDsKKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7CisJ fSBlbHNlIHsKKwkJZGVzdF93ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7CisJCWRlc3RfaCA9IHBs YW5lLT5zdGF0ZS0+Y3J0Y19oOworCX0KKworCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIGZv cm1hdF9pZCwgbXAtPmxheWVyLT5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVz OyBpKyspIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBvZmZzZXQgZm9yIHRoZSBsYXllcidzIHBsYW5l IHJlZ2lzdGVycyAqLworCQlwdHIgPSBtcC0+bGF5ZXItPnB0ciArIChpIDw8IDQpOworCisJCW9i aiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoocGxhbmUtPnN0YXRlLT5mYiwgaSk7CisJCW1hbGlk cF9od193cml0ZShtcC0+aHdkZXYsIGxvd2VyXzMyX2JpdHMob2JqLT5wYWRkciksIHB0cik7CisJ CW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIHVwcGVyXzMyX2JpdHMob2JqLT5wYWRkciksIHB0 ciArIDQpOworCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBwbGFuZS0+c3RhdGUtPmZiLT5w aXRjaGVzW2ldLAorCQkJCW1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9TVFJJREUpOwor CX0KKworCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKHNyY193KSB8IExB WUVSX1ZfVkFMKHNyY19oKSwKKwkJCW1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9TSVpF KTsKKworCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKGRlc3RfdykgfCBM QVlFUl9WX1ZBTChkZXN0X2gpLAorCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX0NP TVBfU0laRSk7CisKKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBMQVlFUl9IX1ZBTChwbGFu ZS0+c3RhdGUtPmNydGNfeCkgfAorCQkJTEFZRVJfVl9WQUwocGxhbmUtPnN0YXRlLT5jcnRjX3kp LAorCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX09GRlNFVCk7CisKKwkvKiBmaXJz dCBjbGVhciB0aGUgcm90YXRpb24gYml0cyBpbiB0aGUgcmVnaXN0ZXIgKi8KKwltYWxpZHBfaHdf Y2xlYXJiaXRzKG1wLT5od2RldiwgTEFZRVJfUk9UX01BU0ssCisJCQkgICAgbXAtPmxheWVyLT5i YXNlICsgTUFMSURQX0xBWUVSX0NPTlRST0wpOworCisJLyogc2V0dXAgdGhlIHJvdGF0aW9uIGFu ZCBheGlzIGZsaXAgYml0cyAqLworCWlmIChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgRFJNX1JP VEFURV9NQVNLKQorCQl2YWwgPSBpbG9nMihwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgRFJNX1JP VEFURV9NQVNLKSA8PCBMQVlFUl9ST1RfT0ZGU0VUOworCWlmIChwbGFuZS0+c3RhdGUtPnJvdGF0 aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKQorCQl2YWwgfD0gTEFZRVJfVl9GTElQOworCWlmIChw bGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1kpKQorCQl2YWwgfD0gTEFZ RVJfSF9GTElQOworCisJLyogc2V0IHRoZSAnZW5hYmxlIGxheWVyJyBiaXQgKi8KKwl2YWwgfD0g TEFZRVJfRU5BQkxFOworCisJbWFsaWRwX2h3X3NldGJpdHMobXAtPmh3ZGV2LCB2YWwsCisJCQkg IG1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKK30KKworc3RhdGljIHZv aWQgbWFsaWRwX2RlX3BsYW5lX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ ICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtYWxpZHBfcGxh bmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKKworCW1hbGlkcF9od19jbGVhcmJpdHMo bXAtPmh3ZGV2LCBMQVlFUl9FTkFCTEUsCisJCQkgICAgbXAtPmxheWVyLT5iYXNlICsgTUFMSURQ X0xBWUVSX0NPTlRST0wpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxw ZXJfZnVuY3MgbWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNr ID0gbWFsaWRwX2RlX3BsYW5lX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlID0gbWFsaWRwX2RlX3Bs YW5lX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtYWxpZHBfZGVfcGxhbmVfZGlzYWJsZSwK K307CisKK2ludCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkK K3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwljb25z dCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCAqbWFwID0gJm1hbGlkcC0+ZGV2LT5tYXA7CisJc3Ry dWN0IG1hbGlkcF9wbGFuZSAqcGxhbmUgPSBOVUxMOworCWVudW0gZHJtX3BsYW5lX3R5cGUgcGxh bmVfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGNydGNzID0gMSA8PCBkcm0tPm1vZGVfY29uZmlnLm51 bV9jcnRjOworCXUzMiAqZm9ybWF0czsKKwlpbnQgcmV0LCBpLCBqLCBuOworCisJZm9ybWF0cyA9 IGtjYWxsb2MobWFwLT5uX2lucHV0X2Zvcm1hdHMsIHNpemVvZigqZm9ybWF0cyksIEdGUF9LRVJO RUwpOworCWlmICghZm9ybWF0cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXA7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1hcC0+bl9sYXllcnM7IGkrKykgeworCQl1OCBpZCA9 IG1hcC0+bGF5ZXJzW2ldLmlkOworCisJCXBsYW5lID0ga3phbGxvYyhzaXplb2YoKnBsYW5lKSwg R0ZQX0tFUk5FTCk7CisJCWlmICghcGxhbmUpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3Rv IGNsZWFudXA7CisJCX0KKworCQkvKiBidWlsZCB0aGUgbGlzdCBvZiBEUk0gc3VwcG9ydGVkIGZv cm1hdHMgYmFzZWQgb24gdGhlIG1hcCAqLworCQlmb3IgKG4gPSAwLCBqID0gMDsgIGogPCBtYXAt Pm5faW5wdXRfZm9ybWF0czsgaisrKSB7CisJCQlpZiAoKG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5s YXllciAmIGlkKSA9PSBpZCkKKwkJCQlmb3JtYXRzW24rK10gPSBtYXAtPmlucHV0X2Zvcm1hdHNb al0uZm9ybWF0OworCQl9CisKKwkJcGxhbmVfdHlwZSA9IChpID09IDApID8gRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSA6CisJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVk7CisJCXJldCA9IGRybV91 bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZwbGFuZS0+YmFzZSwgY3J0Y3MsCisJCQkJCSAgICAg ICAmbWFsaWRwX2RlX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLAorCQkJCQkgICAgICAgbiwgcGxhbmVf dHlwZSwgTlVMTCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBjbGVhbnVwOworCisJCWlmICgh ZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkgeworCQkJdW5zaWduZWQgbG9uZyBm bGFncyA9IEJJVChEUk1fUk9UQVRFXzApIHwKKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfOTAp IHwKKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMTgwKSB8CisJCQkJCSAgICAgIEJJVChEUk1f Uk9UQVRFXzI3MCkgfAorCQkJCQkgICAgICBCSVQoRFJNX1JFRkxFQ1RfWCkgfAorCQkJCQkgICAg ICBCSVQoRFJNX1JFRkxFQ1RfWSk7CisJCQlkcm0tPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3Bl cnR5ID0KKwkJCQlkcm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoZHJtLCBmbGFncyk7 CisJCX0KKwkJLyogU01BUlQgbGF5ZXIgY2FuJ3QgYmUgcm90YXRlZCAqLworCQlpZiAoZHJtLT5t b2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSAmJiAoaWQgIT0gREVfU01BUlQpKQorCQkJZHJt X29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2UsCisJCQkJCQkgICBkcm0t Pm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5LAorCQkJCQkJICAgQklUKERSTV9ST1RBVEVf MCkpOworCisJCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZwbGFuZS0+YmFzZSwKKwkJCQkgICAgICZt YWxpZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwkJcGxhbmUtPmh3ZGV2ID0gbWFsaWRwLT5k ZXY7CisJCXBsYW5lLT5sYXllciA9ICZtYXAtPmxheWVyc1tpXTsKKwl9CisKKwlrZnJlZShmb3Jt YXRzKTsKKworCXJldHVybiAwOworCitjbGVhbnVwOgorCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJv eShkcm0pOworCWtmcmVlKGZvcm1hdHMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtYWxp ZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwLCAqcHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcHQsICZk cm0tPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QsIGhlYWQpIHsKKwkJZHJtX3BsYW5lX2NsZWFudXAo cCk7CisJCWtmcmVlKHApOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZlY2IzCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgor ICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkg dXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKKyAqIG9m IHN1Y2ggR05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgcmVn aXN0ZXJzIGRlZmluaXRpb24uCisgKi8KKworI2lmbmRlZiBfX01BTElEUF9SRUdTX0hfXworI2Rl ZmluZSBfX01BTElEUF9SRUdTX0hfXworCisvKgorICogYWJicmV2aWF0aW9ucyB1c2VkOgorICog ICAgLSBEQyAtIGRpc3BsYXkgY29yZSAoZ2VuZXJhbCBzZXR0aW5ncykKKyAqICAgIC0gREUgLSBk aXNwbGF5IGVuZ2luZQorICogICAgLSBTRSAtIHNjYWxpbmcgZW5naW5lCisgKi8KKworLyogaW50 ZXJydXB0IGJpdCBtYXNrcyAqLworI2RlZmluZSBNQUxJRFBfREVfSVJRX1VOREVSUlVOCQkJKDEg PDwgMCkKKworI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0FYSV9FUlIJCSgxIDw8IDQpCisjZGVm aW5lIE1BTElEUDUwMF9ERV9JUlFfVlNZTkMJCQkoMSA8PCA1KQorI2RlZmluZSBNQUxJRFA1MDBf REVfSVJRX1BST0dfTElORQkJKDEgPDwgNikKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9TQVRV UkFUSU9OCQkoMSA8PCA3KQorI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfVkFMSUQJCSgx IDw8IDgpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQ09ORl9NT0RFCQkoMSA8PCAxMSkKKyNk ZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX0FDVElWRQkJKDEgPDwgMTcpCisjZGVmaW5lIE1B TElEUDUwMF9ERV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkKKyNkZWZpbmUgTUFMSURQNTAwX0RF X0lSUV9URVNUTU9ERV9BQ1RJVkUJKDEgPDwgMTkpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFf Rk9SQ0VfQkxOS19BQ1RJVkUJKDEgPDwgMjQpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQVhJ X0JVU1kJCSgxIDw8IDI4KQorI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0dMT0JBTAkJCSgxIDw8 IDMxKQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfTU9ERQkJKDEgPDwgMCkKKyNkZWZp bmUgTUFMSURQNTAwX1NFX0lSUV9DT05GX1ZBTElECQkoMSA8PCA0KQorI2RlZmluZSBNQUxJRFA1 MDBfU0VfSVJRX0lOSVRfQlVTWQkJKDEgPDwgNSkKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9B WElfRVJST1IJCSgxIDw8IDgpCisjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfT1ZFUlJVTgkJKDEg PDwgOSkKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9HX0xJTkUxCQkoMSA8PCAxMikKKyNk ZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9HX0xJTkUyCQkoMSA8PCAxMykKKyNkZWZpbmUgTUFM SURQNTAwX1NFX0lSUV9DT05GX0FDVElWRQkJKDEgPDwgMTcpCisjZGVmaW5lIE1BTElEUDUwMF9T RV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9BWElf QlVTWQkJKDEgPDwgMjgpCisjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfR0xPQkFMCQkJKDEgPDwg MzEpCisKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9TQVRVUkFUSU9OCQkoMSA8PCA4KQorI2Rl ZmluZSBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1BTElEUDU1 MF9ERV9JUlFfUFJPR19MSU5FCQkoMSA8PCAxMykKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9B WElfRVJSCQkoMSA8PCAxNikKKyNkZWZpbmUgTUFMSURQNTUwX1NFX0lSUV9FT1cJCQkoMSA8PCAw KQorI2RlZmluZSBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQorI2RlZmluZSBN QUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQJCSgxIDw8IDApCisjZGVmaW5lIE1BTElEUDU1MF9E Q19JUlFfQ09ORl9NT0RFCQkoMSA8PCA0KQorI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZf QUNUSVZFCQkoMSA8PCAxNikKKyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9ERQkJCSgxIDw8IDIw KQorI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX1NFCQkJKDEgPDwgMjQpCisKKyNkZWZpbmUgTUFM SURQNjUwX0RFX0lSUV9EUklGVAkJCSgxIDw8IDQpCisKKy8qIGJpdCBtYXNrcyB0aGF0IGFyZSBj b21tb24gYmV0d2VlbiBwcm9kdWN0cyAqLworI2RlZmluZSAgIE1BTElEUF9DRkdfVkFMSUQJCSgx IDw8IDApCisjZGVmaW5lICAgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQJKDEgPDwgOCkKKworLyog cmVnaXN0ZXIgb2Zmc2V0cyBmb3IgSVJRIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgTUFMSURQX1JF R19TVEFUVVMJCTB4MDAwMDAKKyNkZWZpbmUgTUFMSURQX1JFR19TRVRJUlEJCTB4MDAwMDQKKyNk ZWZpbmUgTUFMSURQX1JFR19NQVNLSVJRCQkweDAwMDA4CisjZGVmaW5lIE1BTElEUF9SRUdfQ0xF QVJJUlEJCTB4MDAwMGMKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBNQUxJRFBf REVfQ09SRV9JRAkJMHgwMDAxOAorI2RlZmluZSBNQUxJRFBfREVfRElTUExBWV9GVU5DCQkweDAw MDIwCisKKy8qIHRoZXNlIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIE1BTElEUDV4MF9USU1JTkdT X0JBU0UgKi8KKyNkZWZpbmUgTUFMSURQX0RFX0hfVElNSU5HUwkJMHgwCisjZGVmaW5lIE1BTElE UF9ERV9WX1RJTUlOR1MJCTB4NAorI2RlZmluZSBNQUxJRFBfREVfU1lOQ19XSURUSAkJMHg4Cisj ZGVmaW5lIE1BTElEUF9ERV9IVl9BQ1RJVkUJCTB4YworCisvKiBtYWNyb3MgdG8gc2V0IHZhbHVl cyBpbnRvIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKHgpCSgo KHgpICYgMHhmZmYpIDw8IDApCisjZGVmaW5lIE1BTElEUF9ERV9IX0JBQ0tQT1JDSCh4KQkoKCh4 KSAmIDB4M2ZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQNTAwX0RFX1ZfRlJPTlRQT1JDSCh4KQko KCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0goeCkJ KCgoeCkgJiAweGZmZikgPDwgMCkKKyNkZWZpbmUgTUFMSURQX0RFX1ZfQkFDS1BPUkNIKHgpCSgo KHgpICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIE1BTElEUF9ERV9IX1NZTkNXSURUSCh4KQkoKCh4 KSAmIDB4M2ZmKSA8PCAwKQorI2RlZmluZSBNQUxJRFBfREVfVl9TWU5DV0lEVEgoeCkJKCgoeCkg JiAweGZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQX0RFX0hfQUNUSVZFKHgpCQkoKCh4KSAmIDB4 MWZmZikgPDwgMCkKKyNkZWZpbmUgTUFMSURQX0RFX1ZfQUNUSVZFKHgpCQkoKCh4KSAmIDB4MWZm ZikgPDwgMTYpCisKKy8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdHMgc3BlY2lmaWMgdG8gRFA1 MDAgKi8KKyNkZWZpbmUgTUFMSURQNTAwX0RDX0JBU0UJCTB4MDAwMDAKKyNkZWZpbmUgTUFMSURQ NTAwX0RDX0NPTlRST0wJCTB4MDAwMGMKKyNkZWZpbmUgICBNQUxJRFA1MDBfRENfQ09ORklHX1JF UQkoMSA8PCAxNykKKyNkZWZpbmUgICBNQUxJRFA1MDBfSFNZTkNQT0wJCSgxIDw8IDIwKQorI2Rl ZmluZSAgIE1BTElEUDUwMF9WU1lOQ1BPTAkJKDEgPDwgMjEpCisjZGVmaW5lICAgTUFMSURQNTAw X0RDX0NMRUFSX01BU0sJMHgzMDBmZmYKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xJTkVfQ09VTlRF UgkweDAwMDEwCisjZGVmaW5lIE1BTElEUDUwMF9ERV9BWElfQ09OVFJPTAkweDAwMDE0CisjZGVm aW5lIE1BTElEUDUwMF9ERV9TRUNVUkVfQ1RSTAkweDAwMDFjCisjZGVmaW5lIE1BTElEUDUwMF9E RV9DSFJPTUFfS0VZCQkweDAwMDI0CisjZGVmaW5lIE1BTElEUDUwMF9USU1JTkdTX0JBU0UJCTB4 MDAwMjgKKworI2RlZmluZSBNQUxJRFA1MDBfQ09ORklHXzNECQkweDAwMDM4CisjZGVmaW5lIE1B TElEUDUwMF9CR05EX0NPTE9SCQkweDAwMDNjCisjZGVmaW5lIE1BTElEUDUwMF9PVVRQVVRfREVQ VEgJCTB4MDAwNDQKKyNkZWZpbmUgTUFMSURQNTAwX1lVVl9SR0JfQ09FRgkJMHgwMDA0OAorI2Rl ZmluZSBNQUxJRFA1MDBfQ09MT1JfQURKX0NPRUYJMHgwMDA3OAorI2RlZmluZSBNQUxJRFA1MDBf Q09FRl9UQUJMRV9BRERSCTB4MDAwYTgKKyNkZWZpbmUgTUFMSURQNTAwX0NPRUZfVEFCTEVfREFU QQkweDAwMGFjCisjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9CQVNFCQkweDAwMTAwCisjZGVmaW5l IE1BTElEUDUwMF9ERV9MVl9QVFJfQkFTRQkweDAwMTI0CisjZGVmaW5lIE1BTElEUDUwMF9ERV9M RzFfQkFTRQkJMHgwMDIwMAorI2RlZmluZSBNQUxJRFA1MDBfREVfTEcxX1BUUl9CQVNFCTB4MDAy MWMKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMl9CQVNFCQkweDAwMzAwCisjZGVmaW5lIE1BTElE UDUwMF9ERV9MRzJfUFRSX0JBU0UJMHgwMDMxYworI2RlZmluZSBNQUxJRFA1MDBfU0VfQkFTRQkJ MHgwMGMwMAorI2RlZmluZSBNQUxJRFA1MDBfU0VfUFRSX0JBU0UJCTB4MDBlMGMKKyNkZWZpbmUg TUFMSURQNTAwX0RDX0lSUV9CQVNFCQkweDAwZjAwCisjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdf VkFMSUQJCTB4MDBmMDAKKyNkZWZpbmUgTUFMSURQNTAwX0NPTkZJR19JRAkJMHgwMGZkNAorCisv KiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNpZmljIHRvIERQNTUwL0RQNjUwICovCisj ZGVmaW5lIE1BTElEUDU1MF9ERV9DT05UUk9MCQkweDAwMDEwCisjZGVmaW5lIE1BTElEUDU1MF9E RV9MSU5FX0NPVU5URVIJMHgwMDAxNAorI2RlZmluZSBNQUxJRFA1NTBfREVfQVhJX0NPTlRST0wJ MHgwMDAxOAorI2RlZmluZSBNQUxJRFA1NTBfREVfUU9TCQkweDAwMDFjCisjZGVmaW5lIE1BTElE UDU1MF9USU1JTkdTX0JBU0UJCTB4MDAwMzAKKyNkZWZpbmUgTUFMSURQNTUwX0hTWU5DUE9MCQko MSA8PCAxMikKKyNkZWZpbmUgTUFMSURQNTUwX1ZTWU5DUE9MCQkoMSA8PCAyOCkKKworI2RlZmlu ZSBNQUxJRFA1NTBfREVfRElTUF9TSURFQkFORAkweDAwMDQwCisjZGVmaW5lIE1BTElEUDU1MF9E RV9CR05EX0NPTE9SCQkweDAwMDQ0CisjZGVmaW5lIE1BTElEUDU1MF9ERV9PVVRQVVRfREVQVEgJ MHgwMDA0YworI2RlZmluZSBNQUxJRFA1NTBfREVfQ09MT1JfQ09FRgkJMHgwMDA1MAorI2RlZmlu ZSBNQUxJRFA1NTBfREVfQ09FRl9UQUJMRV9BRERSCTB4MDAwODAKKyNkZWZpbmUgTUFMSURQNTUw X0RFX0NPRUZfVEFCTEVfREFUQQkweDAwMDg0CisjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfQkFT RQkJMHgwMDEwMAorI2RlZmluZSBNQUxJRFA1NTBfREVfTFYxX1BUUl9CQVNFCTB4MDAxMjQKKyNk ZWZpbmUgTUFMSURQNTUwX0RFX0xWMl9CQVNFCQkweDAwMjAwCisjZGVmaW5lIE1BTElEUDU1MF9E RV9MVjJfUFRSX0JBU0UJMHgwMDIyNAorI2RlZmluZSBNQUxJRFA1NTBfREVfTEdfQkFTRQkJMHgw MDMwMAorI2RlZmluZSBNQUxJRFA1NTBfREVfTEdfUFRSX0JBU0UJMHgwMDMxYworI2RlZmluZSBN QUxJRFA1NTBfREVfTFNfQkFTRQkJMHgwMDQwMAorI2RlZmluZSBNQUxJRFA1NTBfREVfTFNfUFRS X0JBU0UJMHgwMDQyYworI2RlZmluZSBNQUxJRFA1NTBfREVfUEVSRl9CQVNFCQkweDAwNTAwCisj ZGVmaW5lIE1BTElEUDU1MF9TRV9CQVNFCQkweDA4MDAwCisjZGVmaW5lIE1BTElEUDU1MF9EQ19C QVNFCQkweDBjMDAwCisjZGVmaW5lIE1BTElEUDU1MF9EQ19DT05UUk9MCQkweDBjMDEwCisjZGVm aW5lICAgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEJKDEgPDwgMTYpCisjZGVmaW5lIE1BTElEUDU1 MF9DT05GSUdfVkFMSUQJCTB4MGMwMTQKKyNkZWZpbmUgTUFMSURQNTUwX0NPTkZJR19JRAkJMHgw ZmZkNAorCisvKgorICogU3RhcnRpbmcgd2l0aCBEUDU1MCB0aGUgcmVnaXN0ZXIgbWFwIGJsb2Nr cyBoYXMgYmVlbiBzdGFuZGFyZGlzZWQgdG8gdGhlCisgKiBmb2xsb3dpbmcgbGF5b3V0OgorICoK KyAqICAgT2Zmc2V0ICAgICAgICAgICAgQmxvY2sgcmVnaXN0ZXJzCisgKiAgMHgwMDAwMCAgICAg ICAgICAgIERpc3BsYXkgRW5naW5lCisgKiAgMHgwODAwMCAgICAgICAgICAgIFNjYWxpbmcgRW5n aW5lCisgKiAgMHgwYzAwMCAgICAgICAgICAgIERpc3BsYXkgQ29yZQorICogIDB4MTAwMDAgICAg ICAgICAgICBTZWN1cmUgY29udHJvbAorICoKKyAqIFRoZSBvbGQgRFA1MDAgSVAgbWl4ZXMgc29t ZSBEQyB3aXRoIHRoZSBERSByZWdpc3RlcnMsIGhlbmNlIHRoZSBuZWVkCisgKiBmb3IgYSBtYXBw aW5nIHN0cnVjdHVyZS4KKyAqLworCisjZW5kaWYgLyogX19NQUxJRFBfUkVHU19IX18gKi8KLS0g CjIuOC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK