From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/2] drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+ Date: Thu, 19 Apr 2018 12:20:35 -0700 Message-ID: <20180419192035.19898-3-eric@anholt.net> References: <20180419192035.19898-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180419192035.19898-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, Rob Herring , Mark Rutland , devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org VGhpcyBkcml2ZXIgd2lsbCBiZSB1c2VkIHRvIHN1cHBvcnQgTWVzYSBvbiB0aGUgQnJvYWRjb20g NzI2OCBhbmQgNzI3OApwbGF0Zm9ybXMuCgpWM0QgMy4zIGludHJvZHVjZXMgYW4gTU1VLCB3aGlj aCBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCBDTUEgb3IgdmM0J3MKY29tcGxpY2F0ZWQgQ0wvc2hh ZGVyIHZhbGlkYXRpb24gc2NoZW1lLiAgVGhpcyBtYXNzaXZlbHkgY2hhbmdlcyB0aGUKR0VNIGJl aGF2aW9yLCBzbyBJJ3ZlIGZvcmtlZCBvZmYgdG8gYSBuZXcgZHJpdmVyLgoKU2lnbmVkLW9mZi1i eTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCiBEb2N1bWVudGF0aW9uL2dwdS9k cml2ZXJzLnJzdCAgICAgICAgICB8ICAgMSArCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAg ICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vdjNkL0tjb25maWcgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJz L2dwdS9kcm0vdjNkL01ha2VmaWxlICAgICAgICAgICB8ICAxOCArCiBkcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9iby5jICAgICAgICAgICB8IDM5MiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX2RlYnVnZnMuYyAgICAgIHwgMTkxICsrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS92M2QvdjNkX2Rydi5jICAgICAgICAgIHwgMzcxICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vdjNkL3YzZF9kcnYuaCAgICAgICAgICB8IDMwNSArKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfZmVuY2UuYyAgICAgICAgfCAgNTggKysrCiBkcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9nZW0uYyAgICAgICAgICB8IDY3MSArKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYyAgICAgICAgICB8IDIxMSArKysrKysrKwogZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMgICAgICAgICAgfCAxMjIgKysrKysKIGRyaXZlcnMv Z3B1L2RybS92M2QvdjNkX3JlZ3MuaCAgICAgICAgIHwgMjk1ICsrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vdjNkL3YzZF9zY2hlZC5jICAgICAgICB8IDIzMCArKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS92M2QvdjNkX3RyYWNlLmggICAgICAgIHwgIDgyICsrKwogZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfdHJhY2VfcG9pbnRzLmMgfCAgIDkgKwogaW5jbHVkZS91YXBpL2RybS92M2RfZHJt LmggICAgICAgICAgICAgfCAxOTEgKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgMzE2OCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC9LY29uZmln CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC9NYWtlZmlsZQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2JvLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kZWJ1Z2ZzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3YzZC92M2RfZmVuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rf aXJxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9tbXUuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFjZS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2VfcG9pbnRzLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBpbmNsdWRlL3VhcGkvZHJtL3YzZF9kcm0uaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRp b24vZ3B1L2RyaXZlcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJpdmVycy5yc3QKaW5kZXgg ZDNhYjZhYmFlODM4Li5mOTgyNTU4ZmMyNWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1 L2RyaXZlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RyaXZlcnMucnN0CkBAIC0xMCw2 ICsxMCw3IEBAIEdQVSBEcml2ZXIgRG9jdW1lbnRhdGlvbgogICAgdGVncmEKICAgIHRpbnlkcm0K ICAgIHR2ZTIwMAorICAgdjNkCiAgICB2YzQKICAgIGJyaWRnZS9kdy1oZG1pCiAgICB4ZW4tZnJv bnQKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYmNhM2MzMmZi MTQxLi43MzE0ZDY2ODMzZmQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlO RVJTCkBAIC00Nzk1LDYgKzQ3OTUsMTUgQEAgUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9ncHUv ZHJtL29tYXBkcm0vCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxh eS90aS8KIAorRFJNIERSSVZFUlMgRk9SIFYzRAorTToJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0 Lm5ldD4KK1Q6CWdpdCBnaXQ6Ly9naXRodWIuY29tL2FuaG9sdC9saW51eAorUzoJU3VwcG9ydGVk CitGOglkcml2ZXJzL2dwdS9kcm0vdjNkLworRjoJaW5jbHVkZS91YXBpL2RybS92M2RfZHJtLmgK K0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyY20sYmNtLXYz ZC50eHQKK1Q6CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MK KwogRFJNIERSSVZFUlMgRk9SIFZDNAogTToJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4K IFQ6CWdpdCBnaXQ6Ly9naXRodWIuY29tL2FuaG9sdC9saW51eApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA3NTc4MjVh YzYwZGYuLjFjNzNhNDU1ZmRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK KysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI2Nyw2ICsyNjcsOCBAQCBzb3VyY2Ug ImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9n cHUvZHJtL2lteC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZp ZyIKKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCiAKIHNvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA5ZDY2NjU3ZWExMTcu LjdhNDAxZWRkODc2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNjEsNiArNjEsNyBAQCBvYmotJChDT05GSUdf RFJNX01HQSkJKz0gbWdhLwogb2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQo Q09ORklHX0RSTV9JOTE1KQkrPSBpOTE1Lwogb2JqLSQoQ09ORklHX0RSTV9NR0FHMjAwKSArPSBt Z2FnMjAwLworb2JqLSQoQ09ORklHX0RSTV9WM0QpICArPSB2M2QvCiBvYmotJChDT05GSUdfRFJN X1ZDNCkgICs9IHZjNC8KIG9iai0kKENPTkZJR19EUk1fQ0lSUlVTX1FFTVUpICs9IGNpcnJ1cy8K IG9iai0kKENPTkZJR19EUk1fU0lTKSAgICs9IHNpcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEwYzAyNTkzNTViZAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZp ZyBEUk1fVjNECisJdHJpc3RhdGUgIkJyb2FkY29tIFYzRCAzLnggYW5kIG5ld2VyIgorCWRlcGVu ZHMgb24gQVJDSF9CQ00gfHwgQVJDSF9CQ01TVEIgfHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBv biBEUk0KKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlzZWxlY3QgRFJNX1NDSEVECisJaGVscAor CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIGEgQnJv YWRjb20KKwkgIFYzRCAzLnggb3IgbmV3ZXIgR1BVLCBzdWNoIGFzIEJDTTcyNjguCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3YzZC9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM0NDQ2ZTFk ZTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvTWFrZWZpbGUKQEAg LTAsMCArMSwxOCBAQAorIyBQbGVhc2Uga2VlcCB0aGVzZSBidWlsZCBsaXN0cyBzb3J0ZWQhCisK KyMgY29yZSBkcml2ZXIgY29kZQordjNkLXkgOj0gXAorCXYzZF9iby5vIFwKKwl2M2RfZHJ2Lm8g XAorCXYzZF9mZW5jZS5vIFwKKwl2M2RfZ2VtLm8gXAorCXYzZF9pcnEubyBcCisJdjNkX21tdS5v IFwKKwl2M2RfdHJhY2VfcG9pbnRzLm8gXAorCXYzZF9zY2hlZC5vCisKK3YzZC0kKENPTkZJR19E RUJVR19GUykgKz0gdjNkX2RlYnVnZnMubworCitvYmotJChDT05GSUdfRFJNX1YzRCkgICs9IHYz ZC5vCisKK0NGTEFHU192M2RfdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9i by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTFjM2JlOTBiZDRj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfYm8uYwpAQCAtMCww ICsxLDM5MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5 cmlnaHQgKEMpIDIwMTUtMjAxOCBCcm9hZGNvbSAqLworCisvKioKKyAqIERPQzogVjNEIEdFTSBC TyBtYW5hZ2VtZW50IHN1cHBvcnQKKyAqCisgKiBDb21wYXJlZCB0byBWQzQgKFYzRCAyLngpLCBW M0QgMy4zIGludHJvZHVjZXMgYW4gTU1VIGJldHdlZW4gdGhlCisgKiBHUFUgYW5kIHRoZSBidXMs IGFsbG93aW5nIHVzIHRvIHVzZSBzaG1lbSBvYmplY3RzIGZvciBvdXIgc3RvcmFnZQorICogaW5z dGVhZCBvZiBDTUEuCisgKgorICogUGh5c2ljYWxseSBjb250aWd1b3VzIG9iamVjdHMgbWF5IHN0 aWxsIGJlIGltcG9ydGVkIHRvIFYzRCwgYnV0IHRoZQorICogZHJpdmVyIGRvZXNuJ3QgYWxsb2Nh dGUgcGh5c2ljYWxseSBjb250aWd1b3VzIG9iamVjdHMgb24gaXRzIG93bi4KKyAqIERpc3BsYXkg ZW5naW5lcyByZXF1aXJpbmcgcGh5c2ljYWxseSBjb250aWd1b3VzIGFsbG9jYXRpb25zIHNob3Vs ZAorICogbG9vayBpbnRvIE1lc2EncyAicmVuZGVyb25seSIgc3VwcG9ydCAoYXMgdXNlZCBieSB0 aGUgTWVzYSBwbDExMQorICogZHJpdmVyKSBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gaW50ZWdy YXRlIHdpdGggVjNELgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVk ZSA8bGludXgvcGZuX3QuaD4KKworI2luY2x1ZGUgInYzZF9kcnYuaCIKKyNpbmNsdWRlICJ1YXBp L2RybS92M2RfZHJtLmgiCisKKy8qIFBpbnMgdGhlIHNobWVtIHBhZ2VzLCBmaWxscyBpbiB0aGUg LnBhZ2VzIGFuZCAuc2d0IGZpZWxkcyBvZiB0aGUgQk8sIGFuZCBtYXBzCisgKiBpdCBmb3IgRE1B LgorICovCitzdGF0aWMgaW50Cit2M2RfYm9fZ2V0X3BhZ2VzKHN0cnVjdCB2M2RfYm8gKmJvKQor eworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJmJvLT5iYXNlOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlpbnQgbnBhZ2VzID0gb2JqLT5zaXplID4+IFBBR0Vf U0hJRlQ7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZiby0+bG9jayk7CisJaWYgKGJv LT5wYWdlc19yZWZjb3VudCsrICE9IDApCisJCWdvdG8gdW5sb2NrOworCisJaWYgKCFvYmotPmlt cG9ydF9hdHRhY2gpIHsKKwkJYm8tPnBhZ2VzID0gZHJtX2dlbV9nZXRfcGFnZXMob2JqKTsKKwkJ aWYgKElTX0VSUihiby0+cGFnZXMpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGJvLT5wYWdlcyk7CisJ CQlnb3RvIHVubG9jazsKKwkJfQorCisJCWJvLT5zZ3QgPSBkcm1fcHJpbWVfcGFnZXNfdG9fc2co Ym8tPnBhZ2VzLCBucGFnZXMpOworCQlpZiAoSVNfRVJSKGJvLT5zZ3QpKSB7CisJCQlyZXQgPSBQ VFJfRVJSKGJvLT5zZ3QpOworCQkJZ290byBwdXRfcGFnZXM7CisJCX0KKwl9IGVsc2UgeworCQli by0+cGFnZXMgPSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9mKCpiby0+cGFnZXMpLCBHRlBfS0VSTkVM KTsKKwkJaWYgKCFiby0+cGFnZXMpCisJCQlnb3RvIHB1dF9wYWdlczsKKworCQlkcm1fcHJpbWVf c2dfdG9fcGFnZV9hZGRyX2FycmF5cyhiby0+c2d0LCBiby0+cGFnZXMsCisJCQkJCQkgTlVMTCwg bnBhZ2VzKTsKKwl9CisKKwkvKiBNYXAgdGhlIHBhZ2VzIGZvciB1c2UgYnkgdGhlIEdQVS4gKi8K KwlkbWFfbWFwX3NnKGRldi0+ZGV2LCBiby0+c2d0LT5zZ2wsCisJCSAgIGJvLT5zZ3QtPm5lbnRz LCBETUFfQklESVJFQ1RJT05BTCk7CisKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKworCXJl dHVybiAwOworCitwdXRfcGFnZXM6CisJZHJtX2dlbV9wdXRfcGFnZXMob2JqLCBiby0+cGFnZXMs IHRydWUsIHRydWUpOworCWJvLT5wYWdlcyA9IE5VTEw7Cit1bmxvY2s6CisJYm8tPnBhZ2VzX3Jl ZmNvdW50LS07CisJbXV0ZXhfdW5sb2NrKCZiby0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQKK3YzZF9ib19wdXRfcGFnZXMoc3RydWN0IHYzZF9ibyAqYm8pCit7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmYm8tPmJhc2U7CisKKwltdXRleF9sb2NrKCZiby0+ bG9jayk7CisJaWYgKC0tYm8tPnBhZ2VzX3JlZmNvdW50ID09IDApIHsKKwkJZG1hX3VubWFwX3Nn KG9iai0+ZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKKwkJCSAgICAgYm8tPnNndC0+bmVudHMsIERN QV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKCFvYmotPmltcG9ydF9hdHRhY2gpIHsKKwkJCXNnX2Zy ZWVfdGFibGUoYm8tPnNndCk7CisJCQlrZnJlZShiby0+c2d0KTsKKwkJCWRybV9nZW1fcHV0X3Bh Z2VzKG9iaiwgYm8tPnBhZ2VzLCB0cnVlLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCWtmcmVlKGJv LT5wYWdlcyk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZiby0+bG9jayk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgdjNkX2JvICp2M2RfYm9fY3JlYXRlX3N0cnVjdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCQkgICBzaXplX3QgdW5hbGlnbmVkX3NpemUpCit7CisJc3RydWN0IHYzZF9kZXYg KnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlz dHJ1Y3QgdjNkX2JvICpibzsKKwlzaXplX3Qgc2l6ZSA9IHJvdW5kdXAodW5hbGlnbmVkX3NpemUs IFBBR0VfU0laRSk7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgcmV0OworCisJaWYg KHNpemUgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlibyA9IGt6YWxsb2Mo c2l6ZW9mKCpibyksIEdGUF9LRVJORUwpOworCWlmICghYm8pCisJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOworCW9iaiA9ICZiby0+YmFzZTsKKworCUlOSVRfTElTVF9IRUFEKCZiby0+dm1hcyk7 CisJSU5JVF9MSVNUX0hFQUQoJmJvLT51bnJlZl9oZWFkKTsKKwltdXRleF9pbml0KCZiby0+bG9j ayk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKTsKKwlpZiAo cmV0KQorCQlnb3RvIGZyZWVfYm87CisKKwlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7CisJcmV0 ID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoJnYzZC0+bW0sICZiby0+bm9kZSwKKwkJCQkJ IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZULAorCQkJCQkgR01QX0dSQU5VTEFSSVRZID4+IFBBR0Vf U0hJRlQsIDAsIDApOworCXNwaW5fdW5sb2NrKCZ2M2QtPm1tX2xvY2spOworCWlmIChyZXQpCisJ CWdvdG8gZnJlZV9vYmo7CisKKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmop OworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9tbTsKKworCXJldHVybiBibzsKKworZnJlZV9tbToK KwlzcGluX2xvY2tfaXJxc2F2ZSgmdjNkLT5tbV9sb2NrLCBpcnFmbGFncyk7CisJZHJtX21tX3Jl bW92ZV9ub2RlKCZiby0+bm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNkLT5tbV9s b2NrLCBpcnFmbGFncyk7CisKK2ZyZWVfb2JqOgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2Jq KTsKK2ZyZWVfYm86CisJa2ZyZWUoYm8pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0 cnVjdCB2M2RfYm8gKnYzZF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgICAgIHNpemVfdCB1bmFsaWduZWRfc2l6ZSkKK3sK KwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqOworCXN0cnVjdCB2M2RfYm8gKmJvOworCWludCByZXQ7CisKKwlibyA9IHYz ZF9ib19jcmVhdGVfc3RydWN0KGRldiwgdW5hbGlnbmVkX3NpemUpOworCWlmIChJU19FUlIoYm8p KQorCQlyZXR1cm4gYm87CisJb2JqID0gJmJvLT5iYXNlOworCisJYm8tPnJlc3YgPSAmYm8tPl9y ZXN2OworCXJlc2VydmF0aW9uX29iamVjdF9pbml0KGJvLT5yZXN2KTsKKworCXJldCA9IHYzZF9i b19nZXRfcGFnZXMoYm8pOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9tbTsKKworCXYzZF9tbXVf aW5zZXJ0X3B0ZXMoYm8pOworCisJbXV0ZXhfbG9jaygmdjNkLT5ib19sb2NrKTsKKwl2M2QtPmJv X3N0YXRzLm51bV9hbGxvY2F0ZWQrKzsKKwl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCAr PSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKKwltdXRleF91bmxvY2soJnYzZC0+Ym9fbG9jayk7 CisKKwlyZXR1cm4gYm87CisKK2ZyZWVfbW06CisJc3Bpbl9sb2NrKCZ2M2QtPm1tX2xvY2spOwor CWRybV9tbV9yZW1vdmVfbm9kZSgmYm8tPm5vZGUpOworCXNwaW5fdW5sb2NrKCZ2M2QtPm1tX2xv Y2spOworCisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtmcmVlKGJvKTsKKwlyZXR1 cm4gRVJSX1BUUihyZXQpOworfQorCisvKiBDYWxsZWQgRFJNIGNvcmUgb24gdGhlIGxhc3QgdXNl cnNwYWNlL2tlcm5lbCB1bnJlZmVyZW5jZSBvZiB0aGUKKyAqIEJPLgorICovCit2b2lkIHYzZF9m cmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdjNkX2Rl diAqdjNkID0gdG9fdjNkX2RldihvYmotPmRldik7CisJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192 M2RfYm8ob2JqKTsKKworCW11dGV4X2xvY2soJnYzZC0+Ym9fbG9jayk7CisJdjNkLT5ib19zdGF0 cy5udW1fYWxsb2NhdGVkLS07CisJdjNkLT5ib19zdGF0cy5wYWdlc19hbGxvY2F0ZWQgLT0gb2Jq LT5zaXplID4+IFBBR0VfU0hJRlQ7CisJbXV0ZXhfdW5sb2NrKCZ2M2QtPmJvX2xvY2spOworCisJ cmVzZXJ2YXRpb25fb2JqZWN0X2ZpbmkoJmJvLT5fcmVzdik7CisKKwl2M2RfYm9fcHV0X3BhZ2Vz KGJvKTsKKworCWlmIChvYmotPmltcG9ydF9hdHRhY2gpCisJCWRybV9wcmltZV9nZW1fZGVzdHJv eShvYmosIGJvLT5zZ3QpOworCisJdjNkX21tdV9yZW1vdmVfcHRlcyhibyk7CisJc3Bpbl9sb2Nr KCZ2M2QtPm1tX2xvY2spOworCWRybV9tbV9yZW1vdmVfbm9kZSgmYm8tPm5vZGUpOworCXNwaW5f dW5sb2NrKCZ2M2QtPm1tX2xvY2spOworCisJbXV0ZXhfZGVzdHJveSgmYm8tPmxvY2spOworCisJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtmcmVlKGJvKTsKK30KKworc3RydWN0IHJl c2VydmF0aW9uX29iamVjdCAqdjNkX3ByaW1lX3Jlc19vYmooc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2RfYm8ob2JqKTsKKworCXJldHVy biBiby0+cmVzdjsKK30KKworc3RhdGljIHZvaWQKK3YzZF9zZXRfbW1hcF92bWFfZmxhZ3Moc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQ OworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBw Z3Byb3Rfd3JpdGVjb21iaW5lKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOworfQor CitpbnQgdjNkX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq ID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2RfYm8o b2JqKTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlwZ29mZl90IHBnb2ZmOworCWludCByZXQ7CisK KwkvKiBXZSBkb24ndCB1c2Ugdm1mLT5wZ29mZiBzaW5jZSB0aGF0IGhhcyB0aGUgZmFrZSBvZmZz ZXQ6ICovCisJcGdvZmYgPSAodm1mLT5hZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9T SElGVDsKKwlwZm4gPSBwYWdlX3RvX3Bmbihiby0+cGFnZXNbcGdvZmZdKTsKKworCXJldCA9IHZt X2luc2VydF9taXhlZCh2bWEsIHZtZi0+YWRkcmVzcywgX19wZm5fdG9fcGZuX3QocGZuLCBQRk5f REVWKSk7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVBR0FJTjoKKwljYXNlIDA6CisJY2Fz ZSAtRVJFU1RBUlRTWVM6CisJY2FzZSAtRUlOVFI6CisJY2FzZSAtRUJVU1k6CisJCS8qCisJCSAq IEVCVVNZIGlzIG9rOiB0aGlzIGp1c3QgbWVhbnMgdGhhdCBhbm90aGVyIHRocmVhZAorCQkgKiBh bHJlYWR5IGRpZCB0aGUgam9iLgorCQkgKi8KKwkJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKKwlj YXNlIC1FTk9NRU06CisJCXJldHVybiBWTV9GQVVMVF9PT007CisJZGVmYXVsdDoKKwkJcmV0dXJu IFZNX0ZBVUxUX1NJR0JVUzsKKwl9Cit9CisKK2ludCB2M2RfbW1hcChzdHJ1Y3QgZmlsZSAqZmls cCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRy bV9nZW1fbW1hcChmaWxwLCB2bWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2M2Rf c2V0X21tYXBfdm1hX2ZsYWdzKHZtYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdjNkX3By aW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXBfb2JqKG9iaiwgb2Jq LT5zaXplLCB2bWEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdjNkX3NldF9t bWFwX3ZtYV9mbGFncyh2bWEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgKnYzZF9wcmltZV92 bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCVdBUk5fT05DRSgxLCAibm90IGlt cGxlbWVudGVkIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgdjNkX3ByaW1lX3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCit7CisJLyogTm90aGluZyB0 byBkbyAqLworfQorCitzdHJ1Y3Qgc2dfdGFibGUgKgordjNkX3ByaW1lX2dldF9zZ190YWJsZShz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3Yz ZF9ibyhvYmopOworCWludCBucGFnZXMgPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKKworCXJl dHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBhZ2VzLCBucGFnZXMpOworfQorCitzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKgordjNkX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJ CQkgIHN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq OworCXN0cnVjdCB2M2RfYm8gKmJvOworCisJYm8gPSB2M2RfYm9fY3JlYXRlX3N0cnVjdChkZXYs IGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJuIEVSUl9Q VFIoUFRSX0VSUihibykpOworCW9iaiA9ICZiby0+YmFzZTsKKworCWJvLT5yZXN2ID0gYXR0YWNo LT5kbWFidWYtPnJlc3Y7CisKKwliby0+c2d0ID0gc2d0OworCXYzZF9ib19nZXRfcGFnZXMoYm8p OworCisJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7CisKKwlyZXR1cm4gb2JqOworfQorCitpbnQg djNkX2NyZWF0ZV9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAor CQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92M2RfY3JlYXRl X2JvICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgdjNkX2JvICpibyA9IE5VTEw7CisJaW50IHJldDsK KworCWJvID0gdjNkX2JvX2NyZWF0ZShkZXYsIGZpbGVfcHJpdiwgUEFHRV9BTElHTihhcmdzLT5z aXplKSk7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBQVFJfRVJSKGJvKTsKKworCWFyZ3Mt Pm9mZnNldCA9IGJvLT5ub2RlLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CisKKwlyZXQgPSBkcm1fZ2Vt X2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCAmYm8tPmJhc2UsICZhcmdzLT5oYW5kbGUpOworCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZiby0+YmFzZSk7CisKKwlyZXR1cm4g cmV0OworfQorCitpbnQgdjNkX21tYXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3Ry dWN0IGRybV92M2RfbW1hcF9ibyAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpnZW1fb2JqOworCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYs IGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRv IGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVOT0VOVDsK Kwl9CisKKwkvKiBUaGUgbW1hcCBvZmZzZXQgd2FzIHNldCB1cCBhdCBCTyBhbGxvY2F0aW9uIHRp bWUuICovCisJYXJncy0+b2Zmc2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnZW1fb2Jq LT52bWFfbm9kZSk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW1f b2JqKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92M2RfZ2V0X2JvX29mZnNldCAqYXJncyA9IGRhdGE7 CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXN0cnVjdCB2M2RfYm8gKmJvOwor CisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsIGFyZ3MtPmhhbmRs ZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VN IEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJYm8gPSB0 b192M2RfYm8oZ2VtX29iaik7CisKKwlhcmdzLT5vZmZzZXQgPSBiby0+bm9kZS5zdGFydCA8PCBQ QUdFX1NISUZUOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtX29i aik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9k ZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZGI2MmM1NDU3NDgKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwxOTEgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAy MDE0LTIwMTggQnJvYWRjb20gKi8KKworI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5j bHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVk ZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKworI2luY2x1ZGUgInYzZF9kcnYuaCIKKyNpbmNsdWRlICJ2M2Rf cmVncy5oIgorCisjZGVmaW5lIFJFR0RFRihyZWcpIHsgcmVnLCAjcmVnIH0KK3N0cnVjdCB2M2Rf cmVnX2RlZiB7CisJdTMyIHJlZzsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCB2M2RfcmVnX2RlZiB2M2RfaHViX3JlZ19kZWZzW10gPSB7CisJUkVHREVGKFYz RF9IVUJfQVhJQ0ZHKSwKKwlSRUdERUYoVjNEX0hVQl9VSUZDRkcpLAorCVJFR0RFRihWM0RfSFVC X0lERU5UMCksCisJUkVHREVGKFYzRF9IVUJfSURFTlQxKSwKKwlSRUdERUYoVjNEX0hVQl9JREVO VDIpLAorCVJFR0RFRihWM0RfSFVCX0lERU5UMyksCisJUkVHREVGKFYzRF9IVUJfSU5UX1NUUyks CisJUkVHREVGKFYzRF9IVUJfSU5UX01TS19TVFMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2M2RfcmVnX2RlZiB2M2RfZ2NhX3JlZ19kZWZzW10gPSB7CisJUkVHREVGKFYzRF9HQ0FfU0FG RV9TSFVURE9XTiksCisJUkVHREVGKFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0spLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB2M2RfcmVnX2RlZiB2M2RfY29yZV9yZWdfZGVmc1tdID0gewor CVJFR0RFRihWM0RfQ1RMX0lERU5UMCksCisJUkVHREVGKFYzRF9DVExfSURFTlQxKSwKKwlSRUdE RUYoVjNEX0NUTF9JREVOVDIpLAorCVJFR0RFRihWM0RfQ1RMX01JU0NDRkcpLAorCVJFR0RFRihW M0RfQ1RMX0lOVF9TVFMpLAorCVJFR0RFRihWM0RfQ1RMX0lOVF9NU0tfU1RTKSwKKwlSRUdERUYo VjNEX0NMRV9DVDBDUyksCisJUkVHREVGKFYzRF9DTEVfQ1QwQ0EpLAorCVJFR0RFRihWM0RfQ0xF X0NUMEVBKSwKKwlSRUdERUYoVjNEX0NMRV9DVDFDUyksCisJUkVHREVGKFYzRF9DTEVfQ1QxQ0Ep LAorCVJFR0RFRihWM0RfQ0xFX0NUMUVBKSwKKworCVJFR0RFRihWM0RfUFRCX0JQQ0EpLAorCVJF R0RFRihWM0RfUFRCX0JQQ1MpLAorCisJUkVHREVGKFYzRF9NTVVfQ1RMKSwKKwlSRUdERUYoVjNE X01NVV9WSU9fQUREUiksCisKKwlSRUdERUYoVjNEX0dNUF9TVEFUVVMpLAorCVJFR0RFRihWM0Rf R01QX0NGRyksCisJUkVHREVGKFYzRF9HTVBfVklPX0FERFIpLAorfTsKKworc3RhdGljIGludCB2 M2RfdjNkX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sK KwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0t PnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJ c3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKKwlpbnQgaSwgY29yZTsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYzZF9odWJfcmVnX2RlZnMpOyBpKyspIHsKKwkJ c2VxX3ByaW50ZihtLCAiJXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKKwkJCSAgIHYzZF9odWJfcmVn X2RlZnNbaV0ubmFtZSwgdjNkX2h1Yl9yZWdfZGVmc1tpXS5yZWcsCisJCQkgICBWM0RfUkVBRCh2 M2RfaHViX3JlZ19kZWZzW2ldLnJlZykpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHYzZF9nY2FfcmVnX2RlZnMpOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMgKDB4JTA0 eCk6IDB4JTA4eFxuIiwKKwkJCSAgIHYzZF9nY2FfcmVnX2RlZnNbaV0ubmFtZSwgdjNkX2djYV9y ZWdfZGVmc1tpXS5yZWcsCisJCQkgICBWM0RfR0NBX1JFQUQodjNkX2djYV9yZWdfZGVmc1tpXS5y ZWcpKTsKKwl9CisKKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgdjNkLT5jb3JlczsgY29yZSsrKSB7 CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYzZF9jb3JlX3JlZ19kZWZzKTsgaSsrKSB7 CisJCQlzZXFfcHJpbnRmKG0sICJjb3JlICVkICVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkJ ICAgY29yZSwKKwkJCQkgICB2M2RfY29yZV9yZWdfZGVmc1tpXS5uYW1lLAorCQkJCSAgIHYzZF9j b3JlX3JlZ19kZWZzW2ldLnJlZywKKwkJCQkgICBWM0RfQ09SRV9SRUFEKGNvcmUsCisJCQkJCQkg djNkX2NvcmVfcmVnX2RlZnNbaV0ucmVnKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCB2M2RfdjNkX2RlYnVnZnNfaWRlbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9p bmZvX25vZGUgKiltLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5t aW5vci0+ZGV2OworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJdTMy IGlkZW50MCwgaWRlbnQxLCBpZGVudDIsIGlkZW50MywgY29yZXM7CisJaW50IHJldCwgY29yZTsK KworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmModjNkLT5kZXYpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJaWRlbnQwID0gVjNEX1JFQUQoVjNEX0hVQl9JREVOVDApOworCWlk ZW50MSA9IFYzRF9SRUFEKFYzRF9IVUJfSURFTlQxKTsKKwlpZGVudDIgPSBWM0RfUkVBRChWM0Rf SFVCX0lERU5UMik7CisJaWRlbnQzID0gVjNEX1JFQUQoVjNEX0hVQl9JREVOVDMpOworCWNvcmVz ID0gVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9IVUJfSURFTlQxX05DT1JFUyk7CisKKwlzZXFf cHJpbnRmKG0sICJSZXZpc2lvbjogICAlZC4lZC4lZC4lZFxuIiwKKwkJICAgVjNEX0dFVF9GSUVM RChpZGVudDEsIFYzRF9IVUJfSURFTlQxX1RWRVIpLAorCQkgICBWM0RfR0VUX0ZJRUxEKGlkZW50 MSwgVjNEX0hVQl9JREVOVDFfUkVWKSwKKwkJICAgVjNEX0dFVF9GSUVMRChpZGVudDMsIFYzRF9I VUJfSURFTlQzX0lQUkVWKSwKKwkJICAgVjNEX0dFVF9GSUVMRChpZGVudDMsIFYzRF9IVUJfSURF TlQzX0lQSURYKSk7CisJc2VxX3ByaW50ZihtLCAiTU1VOiAgICAgICAgJXNcbiIsCisJCSAgIChp ZGVudDIgJiBWM0RfSFVCX0lERU5UMl9XSVRIX01NVSkgPyAieWVzIiA6ICJubyIpOworCXNlcV9w cmludGYobSwgIlRGVTogICAgICAgICVzXG4iLAorCQkgICAoaWRlbnQxICYgVjNEX0hVQl9JREVO VDFfV0lUSF9URlUpID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJUU1k6ICAgICAg ICAlc1xuIiwKKwkJICAgKGlkZW50MSAmIFYzRF9IVUJfSURFTlQxX1dJVEhfVFNZKSA/ICJ5ZXMi IDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiTVNPOiAgICAgICAgJXNcbiIsCisJCSAgIChpZGVu dDEgJiBWM0RfSFVCX0lERU5UMV9XSVRIX01TTykgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmlu dGYobSwgIkwzQzogICAgICAgICVzICglZGtiKVxuIiwKKwkJICAgKGlkZW50MSAmIFYzRF9IVUJf SURFTlQxX1dJVEhfTDNDKSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgVjNEX0dFVF9GSUVMRChpZGVu dDIsIFYzRF9IVUJfSURFTlQyX0wzQ19OS0IpKTsKKworCWZvciAoY29yZSA9IDA7IGNvcmUgPCBj b3JlczsgY29yZSsrKSB7CisJCXUzMiBtaXNjY2ZnOworCQl1MzIgbnNsYywgbnRtdSwgcXVwczsK KworCQlpZGVudDAgPSBWM0RfQ09SRV9SRUFEKGNvcmUsIFYzRF9DVExfSURFTlQwKTsKKwkJaWRl bnQxID0gVjNEX0NPUkVfUkVBRChjb3JlLCBWM0RfQ1RMX0lERU5UMSk7CisJCWlkZW50MiA9IFYz RF9DT1JFX1JFQUQoY29yZSwgVjNEX0NUTF9JREVOVDIpOworCQltaXNjY2ZnID0gVjNEX0NPUkVf UkVBRChjb3JlLCBWM0RfQ1RMX01JU0NDRkcpOworCisJCW5zbGMgPSBWM0RfR0VUX0ZJRUxEKGlk ZW50MSwgVjNEX0lERU5UMV9OU0xDKTsKKwkJbnRtdSA9IFYzRF9HRVRfRklFTEQoaWRlbnQxLCBW M0RfSURFTlQxX05UTVUpOworCQlxdXBzID0gVjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9JREVO VDFfUVVQUyk7CisKKwkJc2VxX3ByaW50ZihtLCAiQ29yZSAlZDpcbiIsIGNvcmUpOworCQlzZXFf cHJpbnRmKG0sICIgIFJldmlzaW9uOiAgICAgJWQuJWRcbiIsCisJCQkgICBWM0RfR0VUX0ZJRUxE KGlkZW50MCwgVjNEX0lERU5UMF9WRVIpLAorCQkJICAgVjNEX0dFVF9GSUVMRChpZGVudDEsIFYz RF9JREVOVDFfUkVWKSk7CisJCXNlcV9wcmludGYobSwgIiAgU2xpY2VzOiAgICAgICAlZFxuIiwg bnNsYyk7CisJCXNlcV9wcmludGYobSwgIiAgVE1VczogICAgICAgICAlZFxuIiwgbnNsYyAqIG50 bXUpOworCQlzZXFfcHJpbnRmKG0sICIgIFFQVXM6ICAgICAgICAgJWRcbiIsIG5zbGMgKiBxdXBz KTsKKwkJc2VxX3ByaW50ZihtLCAiICBTZW1hcGhvcmVzOiAgICVkXG4iLAorCQkJICAgVjNEX0dF VF9GSUVMRChpZGVudDEsIFYzRF9JREVOVDFfTlNFTSkpOworCQlzZXFfcHJpbnRmKG0sICIgIEJD RyBpbnQ6ICAgICAgJWRcbiIsCisJCQkgICAoaWRlbnQyICYgVjNEX0lERU5UMl9CQ0dfSU5UKSAh PSAwKTsKKwkJc2VxX3ByaW50ZihtLCAiICBPdmVycmlkZSBUTVU6ICVkXG4iLAorCQkJICAgKG1p c2NjZmcgJiBWM0RfTUlTQ0NGR19PVlJUTVVPVVQpICE9IDApOworCX0KKworCXBtX3J1bnRpbWVf bWFya19sYXN0X2J1c3kodjNkLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHYz ZC0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHYzZF9kZWJ1Z2ZzX2JvX3N0 YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5m b19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+cHJpdmF0ZTsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgdjNkX2RldiAq djNkID0gdG9fdjNkX2RldihkZXYpOworCisJbXV0ZXhfbG9jaygmdjNkLT5ib19sb2NrKTsKKwlz ZXFfcHJpbnRmKG0sICJhbGxvY2F0ZWQgYm9zOiAgICAgICAgICAlZFxuIiwKKwkJICAgdjNkLT5i b19zdGF0cy5udW1fYWxsb2NhdGVkKTsKKwlzZXFfcHJpbnRmKG0sICJhbGxvY2F0ZWQgYm8gc2l6 ZSAoa2IpOiAlbGRcbiIsCisJCSAgIChsb25nKXYzZC0+Ym9fc3RhdHMucGFnZXNfYWxsb2NhdGVk IDw8IChQQUdFX1NISUZUIC0gMTApKTsKKwltdXRleF91bmxvY2soJnYzZC0+Ym9fbG9jayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW5mb19saXN0IHYzZF9k ZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7InYzZF9pZGVudCIsIHYzZF92M2RfZGVidWdmc19pZGVudCwg MH0sCisJeyJ2M2RfcmVncyIsIHYzZF92M2RfZGVidWdmc19yZWdzLCAwfSwKKwl7ImJvX3N0YXRz IiwgdjNkX2RlYnVnZnNfYm9fc3RhdHMsIDB9LAorfTsKKworaW50Cit2M2RfZGVidWdmc19pbml0 KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVf ZmlsZXModjNkX2RlYnVnZnNfbGlzdCwKKwkJCQkJQVJSQVlfU0laRSh2M2RfZGVidWdmc19saXN0 KSwKKwkJCQkJbWlub3ItPmRlYnVnZnNfcm9vdCwgbWlub3IpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyYTNkMjg5NWY5NQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5jCkBAIC0wLDAg KzEsMzcxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHly aWdodCAoQykgMjAxNC0yMDE4IEJyb2FkY29tICovCisKKy8qKgorICogRE9DOiBCcm9hZGNvbSBW M0QgR3JhcGhpY3MgRHJpdmVyCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEJyb2Fk Y29tIFYzRCAzLjMgYW5kIDQuMSBPcGVuR0wgRVMgR1BVcy4KKyAqIEZvciBWM0QgMi54IHN1cHBv cnQsIHNlZSB0aGUgVkM0IGRyaXZlci4KKyAqCisgKiBDdXJyZW50bHkgb25seSBzaW5nbGUtY29y ZSByZW5kZXJpbmcgdXNpbmcgdGhlIGJpbm5lciBhbmQgcmVuZGVyZXIKKyAqIGlzIHN1cHBvcnRl ZC4gIFRoZSBURlUgKHRleHR1cmUgZm9ybWF0dGluZyB1bml0KSBhbmQgVjNEIDQueCdzIENTRAor ICogKGNvbXB1dGUgc2hhZGVyIGRpc3BhdGNoKSBhcmUgbm90IHlldCBzdXBwb3J0ZWQuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKworI2luY2x1ZGUgInVh cGkvZHJtL3YzZF9kcm0uaCIKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3Jl Z3MuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAidjNkIgorI2RlZmluZSBEUklWRVJfREVTQyAi QnJvYWRjb20gVjNEIGdyYXBoaWNzIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxODA0MTkiCisj ZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisjZGVmaW5lIERS SVZFUl9QQVRDSExFVkVMIDAKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB2M2RfcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHRvX3Yz ZF9kZXYoZHJtKTsKKworCXYzZF9pcnFfZGlzYWJsZSh2M2QpOworCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKHYzZC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHYzZF9ydW50 aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2Rf ZGV2KGRybSk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSh2M2QtPmNs ayk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogWFhYOiBWUE0gYmFzZSAq LworCisJdjNkX21tdV9zZXRfcGFnZV90YWJsZSh2M2QpOworCXYzZF9pcnFfZW5hYmxlKHYzZCk7 CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9v cHMgdjNkX3YzZF9wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKHYzZF9ydW50aW1lX3N1 c3BlbmQsIHYzZF9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBpbnQgdjNkX2dl dF9wYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAg ICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2Qg PSB0b192M2RfZGV2KGRldik7CisJc3RydWN0IGRybV92M2RfZ2V0X3BhcmFtICphcmdzID0gZGF0 YTsKKwlpbnQgcmV0OworCXN0YXRpYyBjb25zdCB1MzIgcmVnX21hcFtdID0geworCQlbRFJNX1Yz RF9QQVJBTV9WM0RfVUlGQ0ZHXSA9IFYzRF9IVUJfVUlGQ0ZHLAorCQlbRFJNX1YzRF9QQVJBTV9W M0RfSFVCX0lERU5UMV0gPSBWM0RfSFVCX0lERU5UMSwKKwkJW0RSTV9WM0RfUEFSQU1fVjNEX0hV Ql9JREVOVDJdID0gVjNEX0hVQl9JREVOVDIsCisJCVtEUk1fVjNEX1BBUkFNX1YzRF9IVUJfSURF TlQzXSA9IFYzRF9IVUJfSURFTlQzLAorCQlbRFJNX1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQw XSA9IFYzRF9DVExfSURFTlQwLAorCQlbRFJNX1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQxXSA9 IFYzRF9DVExfSURFTlQxLAorCQlbRFJNX1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQyXSA9IFYz RF9DVExfSURFTlQyLAorCX07CisKKwlpZiAoYXJncy0+cGFkICE9IDApCisJCXJldHVybiAtRUlO VkFMOworCisJLyogTm90ZSB0aGF0IERSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMCBpcyAw LCBzbyB3ZSBuZWVkCisJICogdG8gZXhwbGljaXRseSBhbGxvdyBpdCBpbiB0aGUgInRoZSByZWdp c3RlciBpbiBvdXIKKwkgKiBwYXJhbWV0ZXIgbWFwIiBjaGVjay4KKwkgKi8KKwlpZiAoYXJncy0+ cGFyYW0gPCBBUlJBWV9TSVpFKHJlZ19tYXApICYmCisJICAgIChyZWdfbWFwW2FyZ3MtPnBhcmFt XSB8fAorCSAgICAgYXJncy0+cGFyYW0gPT0gRFJNX1YzRF9QQVJBTV9WM0RfQ09SRTBfSURFTlQw KSkgeworCQl1MzIgb2Zmc2V0ID0gcmVnX21hcFthcmdzLT5wYXJhbV07CisKKwkJaWYgKGFyZ3Mt PnZhbHVlICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBwbV9ydW50aW1lX2dl dF9zeW5jKHYzZC0+ZGV2KTsKKwkJaWYgKGFyZ3MtPnBhcmFtID49IERSTV9WM0RfUEFSQU1fVjNE X0NPUkUwX0lERU5UMCAmJgorCQkgICAgYXJncy0+cGFyYW0gPD0gRFJNX1YzRF9QQVJBTV9WM0Rf Q09SRTBfSURFTlQyKSB7CisJCQlhcmdzLT52YWx1ZSA9IFYzRF9DT1JFX1JFQUQoMCwgb2Zmc2V0 KTsKKwkJfSBlbHNlIHsKKwkJCWFyZ3MtPnZhbHVlID0gVjNEX1JFQUQob2Zmc2V0KTsKKwkJfQor CQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHYzZC0+ZGV2KTsKKwkJcG1fcnVudGltZV9wdXRf YXV0b3N1c3BlbmQodjNkLT5kZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBbnkgcGFyYW1z IHRoYXQgYXJlbid0IGp1c3QgcmVnaXN0ZXIgcmVhZHMgd291bGQgZ28gaGVyZS4gKi8KKworCURS TV9ERUJVRygiVW5rbm93biBwYXJhbWV0ZXIgJWRcbiIsIGFyZ3MtPnBhcmFtKTsKKwlyZXR1cm4g LUVJTlZBTDsKK30KKworc3RhdGljIGludAordjNkX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192 M2RfZGV2KGRldik7CisJc3RydWN0IHYzZF9maWxlX3ByaXYgKnYzZF9wcml2OworCWludCBpOwor CisJdjNkX3ByaXYgPSBremFsbG9jKHNpemVvZigqdjNkX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXYzZF9wcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXYzZF9wcml2LT52M2QgPSB2M2Q7 CisKKwlmb3IgKGkgPSAwOyBpIDwgVjNEX01BWF9RVUVVRVM7IGkrKykgeworCQlkcm1fc2NoZWRf ZW50aXR5X2luaXQoJnYzZC0+cXVldWVbaV0uc2NoZWQsCisJCQkJICAgICAgJnYzZF9wcml2LT5z Y2hlZF9lbnRpdHlbaV0sCisJCQkJICAgICAgJnYzZC0+cXVldWVbaV0uc2NoZWQuc2NoZWRfcnFb RFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTF0sCisJCQkJICAgICAgMzIsIE5VTEwpOworCX0KKwor CWZpbGUtPmRyaXZlcl9wcml2ID0gdjNkX3ByaXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQKK3YzZF9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRldik7CisJ c3RydWN0IHYzZF9maWxlX3ByaXYgKnYzZF9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJZW51 bSB2M2RfcXVldWUgcTsKKworCWZvciAocSA9IDA7IHEgPCBWM0RfTUFYX1FVRVVFUzsgcSsrKSB7 CisJCWRybV9zY2hlZF9lbnRpdHlfZmluaSgmdjNkLT5xdWV1ZVtxXS5zY2hlZCwKKwkJCQkgICAg ICAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtxXSk7CisJfQorCisJa2ZyZWUodjNkX3ByaXYpOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2M2RfZHJtX2ZvcHMgPSB7 CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9 IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IHYz ZF9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwKKwkuY29tcGF0 X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHYzZF9kcm1faW9jdGxzW10gPSB7 CisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX1NVQk1JVF9DTCwgdjNkX3N1Ym1pdF9jbF9pb2N0bCwg RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoVjNEX1dBSVRfQk8sIHYzZF93 YWl0X2JvX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihWM0Rf Q1JFQVRFX0JPLCB2M2RfY3JlYXRlX2JvX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1f SU9DVExfREVGX0RSVihWM0RfTU1BUF9CTywgdjNkX21tYXBfYm9faW9jdGwsIERSTV9SRU5ERVJf QUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9HRVRfUEFSQU0sIHYzZF9nZXRfcGFyYW1f aW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKFYzRF9HRVRfQk9f T0ZGU0VULCB2M2RfZ2V0X2JvX29mZnNldF9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHYzZF92bV9vcHMgPSB7 CisJLmZhdWx0ID0gdjNkX2dlbV9mYXVsdCwKKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKKwku Y2xvc2UgPSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVy IHYzZF9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSAoRFJJVkVSX0dFTSB8CisJ CQkgICAgRFJJVkVSX1JFTkRFUiB8CisJCQkgICAgRFJJVkVSX1BSSU1FIHwKKwkJCSAgICBEUklW RVJfU1lOQ09CSiksCisKKwkub3BlbiA9IHYzZF9vcGVuLAorCS5wb3N0Y2xvc2UgPSB2M2RfcG9z dGNsb3NlLAorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJLmRlYnVnZnNfaW5pdCA9 IHYzZF9kZWJ1Z2ZzX2luaXQsCisjZW5kaWYKKworCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQg PSB2M2RfZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAmdjNkX3ZtX29wcywKKworCS5wcmlt ZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRf dG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9pbXBv cnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1f cHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfcmVzX29iaiA9IHYzZF9wcmltZV9yZXNfb2JqLAor CS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gdjNkX3ByaW1lX2dldF9zZ190YWJsZSwKKwkuZ2Vt X3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IHYzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdl bV9wcmltZV92bWFwID0gdjNkX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSB2M2Rf cHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVfbW1hcCA9IHYzZF9wcmltZV9tbWFwLAorCisJLmlv Y3RscyA9IHYzZF9kcm1faW9jdGxzLAorCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh2M2RfZHJt X2lvY3RscyksCisJLmZvcHMgPSAmdjNkX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFN RSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9y ID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKKwkucGF0Y2hsZXZlbCA9 IERSSVZFUl9QQVRDSExFVkVMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgdjNkX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLDcyNjgtdjNkIiB9 LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSw3Mjc4LXYzZCIgfSwKKwl7fSwKK307CitNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCB2M2Rfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50CittYXBfcmVncyhz dHJ1Y3QgdjNkX2RldiAqdjNkLCB2b2lkIF9faW9tZW0gKipyZWdzLCBjb25zdCBjaGFyICpuYW1l KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0KKwkJcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZSh2M2QtPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKworCSpyZWdzID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKHYzZC0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoKnJlZ3MpKQorCQly ZXR1cm4gUFRSX0VSUigqcmVncyk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCB2M2RfcGxhdGZvcm1fZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtOworCXN0cnVjdCB2M2RfZGV2ICp2M2Q7CisJaW50IHJldDsKKwl1MzIgaWRlbnQxOworCisJ ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzNik7CisKKwl2M2QgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnYzZCksIEdGUF9LRVJORUwpOworCWlmICghdjNkKQorCQly ZXR1cm4gLUVOT01FTTsKKwl2M2QtPmRldiA9IGRldjsKKwl2M2QtPnBkZXYgPSBwZGV2OworCisJ cmV0ID0gbWFwX3JlZ3ModjNkLCAmdjNkLT5icmlkZ2VfcmVncywgImJyaWRnZSIpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtYXBfcmVncyh2M2QsICZ2M2QtPmh1Yl9yZWdz LCAiaHViIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1hcF9yZWdzKHYz ZCwgJnYzZC0+Y29yZV9yZWdzWzBdLCAiY29yZTAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJaWRlbnQxID0gVjNEX1JFQUQoVjNEX0hVQl9JREVOVDEpOworCXYzZC0+dmVyID0gKFYz RF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9UVkVSKSAqIDEwICsKKwkJICAgIFYz RF9HRVRfRklFTEQoaWRlbnQxLCBWM0RfSFVCX0lERU5UMV9SRVYpKTsKKwl2M2QtPmNvcmVzID0g VjNEX0dFVF9GSUVMRChpZGVudDEsIFYzRF9IVUJfSURFTlQxX05DT1JFUyk7CisJV0FSTl9PTih2 M2QtPmNvcmVzID4gMSk7IC8qIG11bHRpY29yZSBub3QgeWV0IGltcGxlbWVudGVkICovCisKKwlp ZiAodjNkLT52ZXIgPCA0MSkgeworCQlyZXQgPSBtYXBfcmVncyh2M2QsICZ2M2QtPmdjYV9yZWdz LCAiZ2NhIik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXYzZC0+bW11X3Nj cmF0Y2ggPSBkbWFfYWxsb2Nfd2MoZGV2LCA0MDk2LCAmdjNkLT5tbXVfc2NyYXRjaF9wYWRkciwK KwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pOworCWlmICghdjNk LT5tbXVfc2NyYXRjaCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNTVUg c2NyYXRjaCBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1fcnVudGltZV91 c2VfYXV0b3N1c3BlbmQoZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShk ZXYsIDUwKTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJZHJtID0gZHJtX2Rldl9hbGxv YygmdjNkX2RybV9kcml2ZXIsIGRldik7CisJaWYgKElTX0VSUihkcm0pKSB7CisJCXJldCA9IFBU Ul9FUlIoZHJtKTsKKwkJZ290byBkbWFfZnJlZTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBkcm0pOworCXYzZC0+ZHJtID0gZHJtOworCWRybS0+ZGV2X3ByaXZhdGUgPSB2M2Q7 CisKKwlyZXQgPSB2M2RfZ2VtX2luaXQoZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGRldl9kZXN0 cm95OworCisJdjNkX2lycV9pbml0KHYzZCk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRy bSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBnZW1fZGVzdHJveTsKKworCXJldHVybiAwOworCitn ZW1fZGVzdHJveToKKwl2M2RfZ2VtX2Rlc3Ryb3koZHJtKTsKK2Rldl9kZXN0cm95OgorCWRybV9k ZXZfcHV0KGRybSk7CitkbWFfZnJlZToKKwlkbWFfZnJlZV93YyhkZXYsIDQwOTYsIHYzZC0+bW11 X3NjcmF0Y2gsIHYzZC0+bW11X3NjcmF0Y2hfcGFkZHIpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB2M2RfcGxhdGZvcm1fZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihkcm0pOworCisJZHJt X2Rldl91bnJlZ2lzdGVyKGRybSk7CisKKwl2M2RfZ2VtX2Rlc3Ryb3koZHJtKTsKKworCWRybV9k ZXZfcHV0KGRybSk7CisKKwlkbWFfZnJlZV93Yyh2M2QtPmRldiwgNDA5NiwgdjNkLT5tbXVfc2Ny YXRjaCwgdjNkLT5tbXVfc2NyYXRjaF9wYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdjNkX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gdjNkX3BsYXRmb3JtX2RybV9wcm9iZSwKKwkucmVtb3ZlCQk9IHYzZF9wbGF0Zm9ybV9kcm1f cmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ2M2QiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSB2M2Rfb2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHYzZF9kcm1f cmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2M2Rf cGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHYzZF9kcm1fdW5yZWdp c3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2M2RfcGxhdGZvcm1f ZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodjNkX2RybV9yZWdpc3Rlcik7Cittb2R1bGVfZXhp dCh2M2RfZHJtX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnYzZC1kcm0i KTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gVjNEIERSTSBEcml2ZXIiKTsKK01PRFVM RV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Iik7CitNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZDBkMzIzYWZiNDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3YzZC92M2RfZHJ2LmgKQEAgLTAsMCArMSwzMDUgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQnJvYWRjb20g Ki8KKworI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5o PgorI2luY2x1ZGUgPGRybS9ncHVfc2NoZWR1bGVyLmg+CisKKyNkZWZpbmUgR01QX0dSQU5VTEFS SVRZICgxMjggKiAxMDI0KQorCisvKiBFbnVtIGZvciBlYWNoIG9mIHRoZSBWM0QgcXVldWVzLiAg V2UgbWFpbnRhaW4gdmFyaW91cyBxdWV1ZQorICogdHJhY2tpbmcgYXMgYW4gYXJyYXkgYmVjYXVz ZSBhdCBzb21lIHBvaW50IHdlJ2xsIHdhbnQgdG8gc3VwcG9ydAorICogdGhlIFRGVSAodGV4dHVy ZSBmb3JtYXR0aW5nIHVuaXQpIGFzIGFub3RoZXIgcXVldWUuCisgKi8KK2VudW0gdjNkX3F1ZXVl IHsKKwlWM0RfQklOLAorCVYzRF9SRU5ERVIsCit9OworCisjZGVmaW5lIFYzRF9NQVhfUVVFVUVT IChWM0RfUkVOREVSICsgMSkKKworc3RydWN0IHYzZF9xdWV1ZV9zdGF0ZSB7CisJc3RydWN0IGRy bV9ncHVfc2NoZWR1bGVyIHNjaGVkOworCisJdTY0IGZlbmNlX2NvbnRleHQ7CisJdTY0IGVtaXRf c2Vxbm87CisJdTY0IGZpbmlzaGVkX3NlcW5vOworfTsKKworc3RydWN0IHYzZF9kZXYgeworCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm07CisKKwkvKiBTaG9ydCByZXByZXNlbnRhdGlvbiAoZS5nLiAz MywgNDEpIG9mIHRoZSBWM0QgdGVjaCB2ZXJzaW9uCisJICogYW5kIHJldmlzaW9uLgorCSAqLwor CWludCB2ZXI7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsKKwl2b2lkIF9faW9tZW0gKmh1Yl9yZWdzOworCXZvaWQgX19pb21lbSAqY29yZV9y ZWdzWzNdOworCXZvaWQgX19pb21lbSAqYnJpZGdlX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpnY2Ff cmVnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwkvKiBWaXJ0dWFsIGFuZCBETUEgYWRkcmVzc2Vz IG9mIHRoZSBzaW5nbGUgc2hhcmVkIHBhZ2UgdGFibGUuICovCisJdm9sYXRpbGUgdTMyICpwdDsK KwlkbWFfYWRkcl90IHB0X3BhZGRyOworCisJLyogVmlydHVhbCBhbmQgRE1BIGFkZHJlc3NlcyBv ZiB0aGUgTU1VJ3Mgc2NyYXRjaCBwYWdlLiAgV2hlbgorCSAqIGEgcmVhZCBvciB3cml0ZSBpcyBp bnZhbGlkIGluIHRoZSBNTVUsIGl0IHdpbGwgYmUKKwkgKiByZWRpcmVjdGVkIGhlcmUuCisJICov CisJdm9pZCAqbW11X3NjcmF0Y2g7CisJZG1hX2FkZHJfdCBtbXVfc2NyYXRjaF9wYWRkcjsKKwor CS8qIE51bWJlciBvZiBWM0QgY29yZXMuICovCisJdTMyIGNvcmVzOworCisJLyogQWxsb2NhdG9y IG1hbmFnaW5nIHRoZSBhZGRyZXNzIHNwYWNlLiAgQWxsIHVuaXRzIGFyZSBpbgorCSAqIG51bWJl ciBvZiBwYWdlcy4KKwkgKi8KKwlzdHJ1Y3QgZHJtX21tIG1tOworCXNwaW5sb2NrX3QgbW1fbG9j azsKKworCXN0cnVjdCB2M2RfYm8gKm92ZXJmbG93X2JvOworCXN0cnVjdCB3b3JrX3N0cnVjdCBv dmVyZmxvd19tZW1fd29yazsKKworCXN0cnVjdCB2M2RfZXhlY19pbmZvICpiaW5fam9iOworCXN0 cnVjdCB2M2RfZXhlY19pbmZvICpyZW5kZXJfam9iOworCisJc3RydWN0IHYzZF9xdWV1ZV9zdGF0 ZSBxdWV1ZVtWM0RfTUFYX1FVRVVFU107CisKKwkvKiBTcGlubG9jayB1c2VkIHRvIHN5bmNocm9u aXplIHRoZSBvdmVyZmxvdyBtZW1vcnkKKwkgKiBtYW5hZ2VtZW50IGFnYWluc3QgYmluIGpvYiBz dWJtaXNzaW9uLgorCSAqLworCXNwaW5sb2NrX3Qgam9iX2xvY2s7CisKKwkvKiBQcm90ZWN0cyBi b19zdGF0cyAqLworCXN0cnVjdCBtdXRleCBib19sb2NrOworCisJLyogTG9jayB0YWtlbiB3aGVu IHJlc2V0dGluZyB0aGUgR1BVLCB0byBrZWVwIG11bHRpcGxlCisJICogcHJvY2Vzc2VzIGZyb20g dHJ5aW5nIHRvIHBhcmsgdGhlIHNjaGVkdWxlciB0aHJlYWRzIGFuZAorCSAqIHJlc2V0IGF0IG9u Y2UuCisJICovCisJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7CisKKwlzdHJ1Y3QgeworCQl1MzIg bnVtX2FsbG9jYXRlZDsKKwkJdTMyIHBhZ2VzX2FsbG9jYXRlZDsKKwl9IGJvX3N0YXRzOworfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjNkX2RldiAqCit0b192M2RfZGV2KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2RldiAqKWRldi0+ZGV2X3ByaXZh dGU7Cit9CisKKy8qIFRoZSBwZXItZmQgc3RydWN0LCB3aGljaCB0cmFja3MgdGhlIE1NVSBtYXBw aW5ncy4gKi8KK3N0cnVjdCB2M2RfZmlsZV9wcml2IHsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkOwor CisJc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgc2NoZWRfZW50aXR5W1YzRF9NQVhfUVVFVUVTXTsK K307CisKKy8qIFRyYWNrcyBhIG1hcHBpbmcgb2YgYSBCTyBpbnRvIGEgcGVyLWZkIGFkZHJlc3Mg c3BhY2UgKi8KK3N0cnVjdCB2M2Rfdm1hIHsKKwlzdHJ1Y3QgdjNkX3BhZ2VfdGFibGUgKnB0Owor CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogZW50cnkgaW4gdjNkX2JvLnZtYXMgKi8KK307CisK K3N0cnVjdCB2M2RfYm8geworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOworCisJc3RydWN0 IG11dGV4IGxvY2s7CisKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKworCXUzMiBwYWdlc19y ZWZjb3VudDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBzZ190YWJsZSAqc2d0Owor CXZvaWQgKnZhZGRyOworCisJc3RydWN0IGxpc3RfaGVhZCB2bWFzOyAgICAvKiBsaXN0IG9mIHYz ZF92bWEgKi8KKworCS8qIExpc3QgZW50cnkgZm9yIHRoZSBCTydzIHBvc2l0aW9uIGluCisJICog djNkX2V4ZWNfaW5mby0+dW5yZWZfbGlzdAorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdW5yZWZf aGVhZDsKKworCS8qIG5vcm1hbGx5IChyZXN2ID09ICZfcmVzdikgZXhjZXB0IGZvciBpbXBvcnRl ZCBibydzICovCisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlzdHJ1Y3QgcmVz ZXJ2YXRpb25fb2JqZWN0IF9yZXN2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjNkX2Jv ICoKK3RvX3YzZF9ibyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvKQoreworCXJldHVybiAoc3Ry dWN0IHYzZF9ibyAqKWJvOworfQorCitzdHJ1Y3QgdjNkX2ZlbmNlIHsKKwlzdHJ1Y3QgZG1hX2Zl bmNlIGJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwkvKiB2M2Qgc2Vxbm8gZm9yIHNp Z25hbGVkKCkgdGVzdCAqLworCXU2NCBzZXFubzsKKwllbnVtIHYzZF9xdWV1ZSBxdWV1ZTsKK307 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHYzZF9mZW5jZSAqCit0b192M2RfZmVuY2Uoc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIChzdHJ1Y3QgdjNkX2ZlbmNlICopZmVuY2U7 Cit9CisKKyNkZWZpbmUgVjNEX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmh1Yl9yZWdzICsgb2Zm c2V0KQorI2RlZmluZSBWM0RfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+aHVi X3JlZ3MgKyBvZmZzZXQpCisKKyNkZWZpbmUgVjNEX0JSSURHRV9SRUFEKG9mZnNldCkgcmVhZGwo djNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0JSSURHRV9XUklURShvZmZz ZXQsIHZhbCkgd3JpdGVsKHZhbCwgdjNkLT5icmlkZ2VfcmVncyArIG9mZnNldCkKKworI2RlZmlu ZSBWM0RfR0NBX1JFQUQob2Zmc2V0KSByZWFkbCh2M2QtPmdjYV9yZWdzICsgb2Zmc2V0KQorI2Rl ZmluZSBWM0RfR0NBX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2M2QtPmdjYV9yZWdz ICsgb2Zmc2V0KQorCisjZGVmaW5lIFYzRF9DT1JFX1JFQUQoY29yZSwgb2Zmc2V0KSByZWFkbCh2 M2QtPmNvcmVfcmVnc1tjb3JlXSArIG9mZnNldCkKKyNkZWZpbmUgVjNEX0NPUkVfV1JJVEUoY29y ZSwgb2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHYzZC0+Y29yZV9yZWdzW2NvcmVdICsgb2Zmc2V0 KQorCitzdHJ1Y3QgdjNkX2pvYiB7CisJc3RydWN0IGRybV9zY2hlZF9qb2IgYmFzZTsKKworCXN0 cnVjdCB2M2RfZXhlY19pbmZvICpleGVjOworCisJLyogQW4gb3B0aW9uYWwgZmVuY2UgdXNlcnNw YWNlIGNhbiBwYXNzIGluIGZvciB0aGUgam9iIHRvIGRlcGVuZCBvbi4gKi8KKwlzdHJ1Y3QgZG1h X2ZlbmNlICppbl9mZW5jZTsKKworCS8qIHYzZCBmZW5jZSB0byBiZSBzaWduYWxlZCBieSBJUlEg aGFuZGxlciB3aGVuIHRoZSBqb2IgaXMgY29tcGxldGUuICovCisJc3RydWN0IGRtYV9mZW5jZSAq ZG9uZV9mZW5jZTsKKworCS8qIEdQVSB2aXJ0dWFsIGFkZHJlc3NlcyBvZiB0aGUgc3RhcnQvZW5k IG9mIHRoZSBDTCBqb2IuICovCisJdTMyIHN0YXJ0LCBlbmQ7Cit9OworCitzdHJ1Y3QgdjNkX2V4 ZWNfaW5mbyB7CisJc3RydWN0IHYzZF9kZXYgKnYzZDsKKworCXN0cnVjdCB2M2Rfam9iIGJpbiwg cmVuZGVyOworCisJLyogRmVuY2UgZm9yIHdoZW4gdGhlIHNjaGVkdWxlciBjb25zaWRlcnMgdGhl IGJpbm5lciB0byBiZQorCSAqIGRvbmUsIGZvciByZW5kZXIgdG8gZGVwZW5kIG9uLgorCSAqLwor CXN0cnVjdCBkbWFfZmVuY2UgKmJpbl9kb25lX2ZlbmNlOworCisJc3RydWN0IGtyZWYgcmVmY291 bnQ7CisKKwkvKiBUaGlzIGlzIHRoZSBhcnJheSBvZiBCT3MgdGhhdCB3ZXJlIGxvb2tlZCB1cCBh dCB0aGUgc3RhcnQgb2YgZXhlYy4gKi8KKwlzdHJ1Y3QgdjNkX2JvICoqYm87CisJdTMyIGJvX2Nv dW50OworCisJLyogTGlzdCBvZiBvdmVyZmxvdyBCT3MgdXNlZCBpbiB0aGUgam9iIHRoYXQgbmVl ZCB0byBiZQorCSAqIHJlbGVhc2VkIG9uY2UgdGhlIGpvYiBpcyBjb21wbGV0ZS4gIFRoZSBjdXJy cmVudCBvdmVyZmxvdworCSAqIEJPIHdpbGwgYWx3YXlzIGdldCBtb3ZlZCB0byB0aGUgbW9zdCBy ZWNlbnQgdjNkX2V4ZWNfaW5mbworCSAqIGFzIGJpbiBqb2JzIGdldCBzdWJtaXR0ZWQuCisJICov CisJc3RydWN0IGxpc3RfaGVhZCB1bnJlZl9saXN0OworCisJLyogU3VibWl0dGVkIHRpbGUgbWVt b3J5IGFsbG9jYXRpb24gc3RhcnQvc2l6ZSwgdGlsZSBzdGF0ZS4gKi8KKwl1MzIgcW1hLCBxbXMs IHF0czsKK307CisKKy8qKgorICogX3dhaXRfZm9yIC0gbWFnaWMgKHJlZ2lzdGVyKSB3YWl0IG1h Y3JvCisgKgorICogRG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yIG1vZGVzZXQgcGF0aHMgd2hlbiBy dW4gdW5kZXIga2RnYiBvciBzaW1pbGFyIGF0b21pYworICogY29udGV4dHMuIE5vdGUgdGhhdCBp dCdzIGltcG9ydGFudCB0aGF0IHdlIGNoZWNrIHRoZSBjb25kaXRpb24gYWdhaW4gYWZ0ZXIKKyAq IGhhdmluZyB0aW1lZCBvdXQsIHNpbmNlIHRoZSB0aW1lb3V0IGNvdWxkIGJlIGR1ZSB0byBwcmVl bXB0aW9uIG9yIHNpbWlsYXIgYW5kCisgKiB3ZSd2ZSBuZXZlciBoYWQgYSBjaGFuY2UgdG8gY2hl Y2sgdGhlIGNvbmRpdGlvbiBiZWZvcmUgdGhlIHRpbWVvdXQuCisgKi8KKyNkZWZpbmUgX3dhaXRf Zm9yKENPTkQsIE1TLCBXKSAoeyBcCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X18gPSBqaWZmaWVz ICsgbXNlY3NfdG9famlmZmllcyhNUykgKyAxOwlcCisJaW50IHJldF9fID0gMDsJCQkJCQkJXAor CXdoaWxlICghKENPTkQpKSB7CQkJCQkJXAorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1l b3V0X18pKSB7CQkJXAorCQkJaWYgKCEoQ09ORCkpCQkJCQlcCisJCQkJcmV0X18gPSAtRVRJTUVE T1VUOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCWlmIChXICYmIGRybV9j YW5fc2xlZXAoKSkgIHsJCQkJXAorCQkJbXNsZWVwKFcpOwkJCQkJXAorCQl9IGVsc2UgewkJCQkJ CVwKKwkJCWNwdV9yZWxheCgpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJcmV0 X187CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIHdhaXRfZm9yKENPTkQsIE1TKSBfd2FpdF9mb3Io Q09ORCwgTVMsIDEpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuc2Vjc190b19qaWZm aWVzX3RpbWVvdXQoY29uc3QgdTY0IG4pCit7CisJLyogbnNlY3NfdG9famlmZmllczY0KCkgZG9l cyBub3QgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdyAqLworCWlmIChOU0VDX1BFUl9TRUMgJSBIWiAm JgorCSAgICBkaXZfdTY0KG4sIE5TRUNfUEVSX1NFQykgPj0gTUFYX0pJRkZZX09GRlNFVCAvIEha KQorCQlyZXR1cm4gTUFYX0pJRkZZX09GRlNFVDsKKworCXJldHVybiBtaW5fdCh1NjQsIE1BWF9K SUZGWV9PRkZTRVQsIG5zZWNzX3RvX2ppZmZpZXM2NChuKSArIDEpOworfQorCisvKiB2M2RfYm8u YyAqLwordm9pZCB2M2RfZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2Jq KTsKK3N0cnVjdCB2M2RfYm8gKnYzZF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK2ludCB2 M2RfY3JlYXRlX2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJ CQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgdjNkX21tYXBfYm9faW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpOworaW50IHYzZF9nZXRfYm9fb2Zmc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp OworaW50IHYzZF9nZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpOworaW50IHYzZF9tbWFw KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0ICp2M2RfcHJpbWVfcmVzX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaik7CitpbnQgdjNkX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqdjNkX3ByaW1l X2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKnYzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkJCSBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJCQkJCQkgc3Ry dWN0IHNnX3RhYmxlICpzZ3QpOwordm9pZCAqdjNkX3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOwordm9pZCB2M2RfcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLCB2b2lkICp2YWRkcik7CisKKy8qIHYzZF9kZWJ1Z2ZzLmMgKi8KK2ludCB2M2RfZGVi dWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKworLyogdjNkX2ZlbmNlLmMgKi8K K2V4dGVybiBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyB2M2RfZmVuY2Vfb3BzOworc3RydWN0 IGRtYV9mZW5jZSAqdjNkX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgdjNkX2RldiAqdjNkLCBlbnVtIHYz ZF9xdWV1ZSBxdWV1ZSk7CisKKy8qIHYzZF9nZW0uYyAqLworaW50IHYzZF9nZW1faW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgdjNkX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOworaW50IHYzZF9zdWJtaXRfY2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCB2M2Rf d2FpdF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIHYzZF9leGVjX3B1dChzdHJ1Y3Qg djNkX2V4ZWNfaW5mbyAqZXhlYyk7Cit2b2lkIHYzZF9yZXNldChzdHJ1Y3QgdjNkX2RldiAqdjNk KTsKK3ZvaWQgdjNkX2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB2M2RfZGV2ICp2M2QpOwordm9p ZCB2M2RfZmx1c2hfY2FjaGVzKHN0cnVjdCB2M2RfZGV2ICp2M2QpOworCisvKiB2M2RfaXJxLmMg Ki8KK3ZvaWQgdjNkX2lycV9pbml0KHN0cnVjdCB2M2RfZGV2ICp2M2QpOwordm9pZCB2M2RfaXJx X2VuYWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3ZvaWQgdjNkX2lycV9kaXNhYmxlKHN0cnVj dCB2M2RfZGV2ICp2M2QpOwordm9pZCB2M2RfaXJxX3Jlc2V0KHN0cnVjdCB2M2RfZGV2ICp2M2Qp OworCisvKiB2M2RfbW11LmMgKi8KK2ludCB2M2RfbW11X2dldF9vZmZzZXQoc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYsIHN0cnVjdCB2M2RfYm8gKmJvLAorCQkgICAgICAgdTMyICpvZmZzZXQp OworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9kZXYgKnYzZCk7Cit2b2lk IHYzZF9tbXVfaW5zZXJ0X3B0ZXMoc3RydWN0IHYzZF9ibyAqYm8pOwordm9pZCB2M2RfbW11X3Jl bW92ZV9wdGVzKHN0cnVjdCB2M2RfYm8gKmJvKTsKKworLyogdjNkX3NjaGVkLmMgKi8KK2ludCB2 M2Rfc2NoZWRfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNkKTsKK3ZvaWQgdjNkX3NjaGVkX2Zpbmko c3RydWN0IHYzZF9kZXYgKnYzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZmVuY2UuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdhMTg4Y2Q4ZDcxYQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2ZlbmNlLmMKQEAgLTAsMCArMSw1OCBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTct MjAxOCBCcm9hZGNvbSAqLworCisjaW5jbHVkZSAidjNkX2Rydi5oIgorCitzdHJ1Y3QgZG1hX2Zl bmNlICp2M2RfZmVuY2VfY3JlYXRlKHN0cnVjdCB2M2RfZGV2ICp2M2QsIGVudW0gdjNkX3F1ZXVl IHF1ZXVlKQoreworCXN0cnVjdCB2M2RfZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBremFsbG9j KHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKKworCWZlbmNlLT5kZXYgPSB2M2QtPmRybTsKKwlmZW5jZS0+cXVldWUg PSBxdWV1ZTsKKwlmZW5jZS0+c2Vxbm8gPSArK3YzZC0+cXVldWVbcXVldWVdLmVtaXRfc2Vxbm87 CisJZG1hX2ZlbmNlX2luaXQoJmZlbmNlLT5iYXNlLCAmdjNkX2ZlbmNlX29wcywgJnYzZC0+am9i X2xvY2ssCisJCSAgICAgICB2M2QtPnF1ZXVlW3F1ZXVlXS5mZW5jZV9jb250ZXh0LCBmZW5jZS0+ c2Vxbm8pOworCisJcmV0dXJuICZmZW5jZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIg KnYzZF9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJ cmV0dXJuICJ2M2QiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdjNkX2ZlbmNlX2dldF90aW1l bGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCB2M2RfZmVuY2Ug KmYgPSB0b192M2RfZmVuY2UoZmVuY2UpOworCisJaWYgKGYtPnF1ZXVlID09IFYzRF9CSU4pCisJ CXJldHVybiAidjNkLWJpbiI7CisJZWxzZQorCQlyZXR1cm4gInYzZC1yZW5kZXIiOworfQorCitz dGF0aWMgYm9vbCB2M2RfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdjNkX2ZlbmNlX3NpZ25h bGVkKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCB2M2RfZmVuY2UgKmYgPSB0 b192M2RfZmVuY2UoZmVuY2UpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGYt PmRldik7CisKKwlyZXR1cm4gdjNkLT5xdWV1ZVtmLT5xdWV1ZV0uZmluaXNoZWRfc2Vxbm8gPj0g Zi0+c2Vxbm87Cit9CisKK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIHYzZF9mZW5jZV9vcHMg PSB7CisJLmdldF9kcml2ZXJfbmFtZSA9IHYzZF9mZW5jZV9nZXRfZHJpdmVyX25hbWUsCisJLmdl dF90aW1lbGluZV9uYW1lID0gdjNkX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lLAorCS5lbmFibGVf c2lnbmFsaW5nID0gdjNkX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcsCisJLnNpZ25hbGVkID0gdjNk X2ZlbmNlX3NpZ25hbGVkLAorCS53YWl0ID0gZG1hX2ZlbmNlX2RlZmF1bHRfd2FpdCwKKwkucmVs ZWFzZSA9IGRtYV9mZW5jZV9mcmVlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MjRiZDYzZTRlYTgKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9nZW0uYwpAQCAtMCwwICsxLDY3MSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTQt MjAxOCBCcm9hZGNvbSAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3N5bmNvYmouaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxs aW51eC9zY2hlZC9zaWduYWwuaD4KKworI2luY2x1ZGUgInVhcGkvZHJtL3YzZF9kcm0uaCIKKyNp bmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3MuaCIKKyNpbmNsdWRlICJ2M2Rf dHJhY2UuaCIKKworc3RhdGljIHZvaWQKK3YzZF9pbml0X2NvcmUoc3RydWN0IHYzZF9kZXYgKnYz ZCwgaW50IGNvcmUpCit7CisJLyogU2V0IE9WUlRNVU9VVCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUg dGV4dHVyZSBzYW1wbGVyIHVuaWZvcm0KKwkgKiBjb25maWd1cmF0aW9uJ3MgdG11IG91dHB1dCB0 eXBlIGZpZWxkIGlzIHVzZWQsIGluc3RlYWQgb2YKKwkgKiB1c2luZyB0aGUgaGFyZHdhcmUgZGVm YXVsdCBiZWhhdmlvciBiYXNlZCBvbiB0aGUgdGV4dHVyZQorCSAqIHR5cGUuICBJZiB5b3Ugd2Fu dCB0aGUgZGVmYXVsdCBiZWhhdmlvciwgeW91IGNhbiBzdGlsbCBwdXQKKwkgKiAiMiIgaW4gdGhl IGluZGlyZWN0IHRleHR1cmUgc3RhdGUncyBvdXRwdXRfdHlwZSBmaWVsZC4KKwkgKi8KKwlWM0Rf Q09SRV9XUklURShjb3JlLCBWM0RfQ1RMX01JU0NDRkcsIFYzRF9NSVNDQ0ZHX09WUlRNVU9VVCk7 CisKKwkvKiBXaGVuZXZlciB3ZSBmbHVzaCB0aGUgTDJUIGNhY2hlLCB3ZSBhbHdheXMgd2FudCB0 byBmbHVzaAorCSAqIHRoZSB3aG9sZSB0aGluZy4KKwkgKi8KKwlWM0RfQ09SRV9XUklURShjb3Jl LCBWM0RfQ1RMX0wyVEZMU1RBLCAwKTsKKwlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0wy VEZMRU5ELCB+MCk7Cit9CisKKy8qIFNldHMgaW52YXJpYW50IHN0YXRlIGZvciB0aGUgSFcuICov CitzdGF0aWMgdm9pZAordjNkX2luaXRfaHdfc3RhdGUoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sK Kwl2M2RfaW5pdF9jb3JlKHYzZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfaWRsZV9heGko c3RydWN0IHYzZF9kZXYgKnYzZCwgaW50IGNvcmUpCit7CisJVjNEX0NPUkVfV1JJVEUoY29yZSwg VjNEX0dNUF9DRkcsIFYzRF9HTVBfQ0ZHX1NUT1BfUkVRKTsKKworCWlmICh3YWl0X2ZvcigoVjNE X0NPUkVfUkVBRChjb3JlLCBWM0RfR01QX1NUQVRVUykgJgorCQkgICAgICAoVjNEX0dNUF9TVEFU VVNfUkRfQ09VTlRfTUFTSyB8CisJCSAgICAgICBWM0RfR01QX1NUQVRVU19XUl9DT1VOVF9NQVNL IHwKKwkJICAgICAgIFYzRF9HTVBfU1RBVFVTX0NGR19CVVNZKSkgPT0gMCwgMTAwKSkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byB3YWl0IGZvciBzYWZlIEdNUCBzaHV0ZG93blxuIik7CisJfQor fQorCitzdGF0aWMgdm9pZAordjNkX2lkbGVfZ2NhKHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJ aWYgKHYzZC0+dmVyID49IDQxKQorCQlyZXR1cm47CisKKwlWM0RfR0NBX1dSSVRFKFYzRF9HQ0Ff U0FGRV9TSFVURE9XTiwgVjNEX0dDQV9TQUZFX1NIVVRET1dOX0VOKTsKKworCWlmICh3YWl0X2Zv cigoVjNEX0dDQV9SRUFEKFYzRF9HQ0FfU0FGRV9TSFVURE9XTl9BQ0spICYKKwkJICAgICAgVjNE X0dDQV9TQUZFX1NIVVRET1dOX0FDS19BQ0tFRCkgPT0KKwkJICAgICBWM0RfR0NBX1NBRkVfU0hV VERPV05fQUNLX0FDS0VELCAxMDApKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHdhaXQgZm9y IHNhZmUgR0NBIHNodXRkb3duXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfcmVzZXRf djNkKHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJaW50IHZlcnNpb24gPSBWM0RfQlJJREdFX1JF QUQoVjNEX1RPUF9HUl9CUklER0VfUkVWSVNJT04pOworCisJaWYgKFYzRF9HRVRfRklFTEQodmVy c2lvbiwgVjNEX1RPUF9HUl9CUklER0VfTUFKT1IpID09IDIpIHsKKwkJVjNEX0JSSURHRV9XUklU RShWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzAsCisJCQkJIFYzRF9UT1BfR1JfQlJJREdFX1NX X0lOSVRfMF9WM0RfQ0xLXzEwOF9TV19JTklUKTsKKwkJVjNEX0JSSURHRV9XUklURShWM0RfVE9Q X0dSX0JSSURHRV9TV19JTklUXzAsIDApOworCisJCS8qIEdGWEgtMTM4MzogVGhlIFNXX0lOSVQg bWF5IGNhdXNlIGEgc3RyYXkgd3JpdGUgdG8gYWRkcmVzcyAwCisJCSAqIG9mIHRoZSB1bml0LCBz byByZXNldCBpdCB0byBpdHMgcG93ZXItb24gdmFsdWUgaGVyZS4KKwkJICovCisJCVYzRF9XUklU RShWM0RfSFVCX0FYSUNGRywgVjNEX0hVQl9BWElDRkdfTUFYX0xFTl9NQVNLKTsKKwl9IGVsc2Ug eworCQlXQVJOX09OX09OQ0UoVjNEX0dFVF9GSUVMRCh2ZXJzaW9uLAorCQkJCQkgICBWM0RfVE9Q X0dSX0JSSURHRV9NQUpPUikgIT0gNyk7CisJCVYzRF9CUklER0VfV1JJVEUoVjNEX1RPUF9HUl9C UklER0VfU1dfSU5JVF8xLAorCQkJCSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzFfVjNEX0NM S18xMDhfU1dfSU5JVCk7CisJCVYzRF9CUklER0VfV1JJVEUoVjNEX1RPUF9HUl9CUklER0VfU1df SU5JVF8xLCAwKTsKKwl9CisKKwl2M2RfaW5pdF9od19zdGF0ZSh2M2QpOworfQorCit2b2lkCit2 M2RfcmVzZXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gdjNkLT5kcm07CisKKwlEUk1fRVJST1IoIlJlc2V0dGluZyBHUFUuXG4iKTsKKwl0cmFjZV92 M2RfcmVzZXRfYmVnaW4oZGV2KTsKKworCS8qIFhYWDogb25seSBuZWVkZWQgZm9yIHNhZmUgcG93 ZXJkb3duLCBub3QgcmVzZXQuICovCisJaWYgKGZhbHNlKQorCQl2M2RfaWRsZV9heGkodjNkLCAw KTsKKworCXYzZF9pZGxlX2djYSh2M2QpOworCXYzZF9yZXNldF92M2QodjNkKTsKKworCXYzZF9t bXVfc2V0X3BhZ2VfdGFibGUodjNkKTsKKwl2M2RfaXJxX3Jlc2V0KHYzZCk7CisKKwl0cmFjZV92 M2RfcmVzZXRfZW5kKGRldik7Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfZmx1c2hfbDMoc3RydWN0 IHYzZF9kZXYgKnYzZCkKK3sKKwlpZiAodjNkLT52ZXIgPCA0MSkgeworCQl1MzIgZ2NhX2N0cmwg PSBWM0RfR0NBX1JFQUQoVjNEX0dDQV9DQUNIRV9DVFJMKTsKKworCQlWM0RfR0NBX1dSSVRFKFYz RF9HQ0FfQ0FDSEVfQ1RSTCwKKwkJCSAgICAgIGdjYV9jdHJsIHwgVjNEX0dDQV9DQUNIRV9DVFJM X0ZMVVNIKTsKKworCQlpZiAodjNkLT52ZXIgPCAzMykgeworCQkJVjNEX0dDQV9XUklURShWM0Rf R0NBX0NBQ0hFX0NUUkwsCisJCQkJICAgICAgZ2NhX2N0cmwgJiB+VjNEX0dDQV9DQUNIRV9DVFJM X0ZMVVNIKTsKKwkJfQorCX0KK30KKworLyogSW52YWxpZGF0ZXMgdGhlIChyZWFkLW9ubHkpIEwy IGNhY2hlLiAqLworc3RhdGljIHZvaWQKK3YzZF9pbnZhbGlkYXRlX2wyKHN0cnVjdCB2M2RfZGV2 ICp2M2QsIGludCBjb3JlKQoreworCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExfTDJDQUNU TCwKKwkJICAgICAgIFYzRF9MMkNBQ1RMX0wyQ0NMUiB8CisJCSAgICAgICBWM0RfTDJDQUNUTF9M MkNFTkEpOworfQorCitzdGF0aWMgdm9pZAordjNkX2ludmFsaWRhdGVfbDF0ZChzdHJ1Y3QgdjNk X2RldiAqdjNkLCBpbnQgY29yZSkKK3sKKwlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0wy VENBQ1RMLCBWM0RfTDJUQ0FDVExfVE1VV0NGKTsKKwlpZiAod2FpdF9mb3IoIShWM0RfQ09SRV9S RUFEKGNvcmUsIFYzRF9DVExfTDJUQ0FDVEwpICYKKwkJICAgICAgIFYzRF9MMlRDQUNUTF9MMlRG TFMpLCAxMDApKSB7CisJCURSTV9FUlJPUigiVGltZW91dCB3YWl0aW5nIGZvciBMMVQgd3JpdGUg Y29tYmluZXIgZmx1c2hcbiIpOworCX0KK30KKworLyogSW52YWxpZGF0ZXMgdGV4dHVyZSBMMiBj YWNoZWxpbmVzICovCitzdGF0aWMgdm9pZAordjNkX2ZsdXNoX2wydChzdHJ1Y3QgdjNkX2RldiAq djNkLCBpbnQgY29yZSkKK3sKKwl2M2RfaW52YWxpZGF0ZV9sMXRkKHYzZCwgY29yZSk7CisKKwlW M0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0wyVENBQ1RMLAorCQkgICAgICAgVjNEX0wyVENB Q1RMX0wyVEZMUyB8CisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKFYzRF9MMlRDQUNUTF9GTE1fRkxV U0gsIFYzRF9MMlRDQUNUTF9GTE0pKTsKKwlpZiAod2FpdF9mb3IoIShWM0RfQ09SRV9SRUFEKGNv cmUsIFYzRF9DVExfTDJUQ0FDVEwpICYKKwkJICAgICAgIFYzRF9MMlRDQUNUTF9MMlRGTFMpLCAx MDApKSB7CisJCURSTV9FUlJPUigiVGltZW91dCB3YWl0aW5nIGZvciBMMlQgZmx1c2hcbiIpOwor CX0KK30KKworLyogSW52YWxpZGF0ZXMgdGhlIHNsaWNlIGNhY2hlcy4gIFRoZXNlIGFyZSByZWFk LW9ubHkgY2FjaGVzLiAqLworc3RhdGljIHZvaWQKK3YzZF9pbnZhbGlkYXRlX3NsaWNlcyhzdHJ1 Y3QgdjNkX2RldiAqdjNkLCBpbnQgY29yZSkKK3sKKwlWM0RfQ09SRV9XUklURShjb3JlLCBWM0Rf Q1RMX1NMQ0FDVEwsCisJCSAgICAgICBWM0RfU0VUX0ZJRUxEKDB4ZiwgVjNEX1NMQ0FDVExfVFZD Q1MpIHwKKwkJICAgICAgIFYzRF9TRVRfRklFTEQoMHhmLCBWM0RfU0xDQUNUTF9URENDUykgfAor CQkgICAgICAgVjNEX1NFVF9GSUVMRCgweGYsIFYzRF9TTENBQ1RMX1VDQykgfAorCQkgICAgICAg VjNEX1NFVF9GSUVMRCgweGYsIFYzRF9TTENBQ1RMX0lDQykpOworfQorCisvKiBJbnZhbGlkYXRl cyB0ZXh0dXJlIEwyIGNhY2hlbGluZXMgKi8KK3N0YXRpYyB2b2lkCit2M2RfaW52YWxpZGF0ZV9s MnQoc3RydWN0IHYzZF9kZXYgKnYzZCwgaW50IGNvcmUpCit7CisJVjNEX0NPUkVfV1JJVEUoY29y ZSwKKwkJICAgICAgIFYzRF9DVExfTDJUQ0FDVEwsCisJCSAgICAgICBWM0RfTDJUQ0FDVExfTDJU RkxTIHwKKwkJICAgICAgIFYzRF9TRVRfRklFTEQoVjNEX0wyVENBQ1RMX0ZMTV9DTEVBUiwgVjNE X0wyVENBQ1RMX0ZMTSkpOworCWlmICh3YWl0X2ZvcighKFYzRF9DT1JFX1JFQUQoY29yZSwgVjNE X0NUTF9MMlRDQUNUTCkgJgorCQkgICAgICAgVjNEX0wyVENBQ1RMX0wyVEZMUyksIDEwMCkpIHsK KwkJRFJNX0VSUk9SKCJUaW1lb3V0IHdhaXRpbmcgZm9yIEwyVCBpbnZhbGlkYXRlXG4iKTsKKwl9 Cit9CisKK3ZvaWQKK3YzZF9pbnZhbGlkYXRlX2NhY2hlcyhzdHJ1Y3QgdjNkX2RldiAqdjNkKQor eworCXYzZF9mbHVzaF9sMyh2M2QpOworCisJdjNkX2ludmFsaWRhdGVfbDIodjNkLCAwKTsKKwl2 M2RfaW52YWxpZGF0ZV9zbGljZXModjNkLCAwKTsKKwl2M2RfZmx1c2hfbDJ0KHYzZCwgMCk7Cit9 CisKK3ZvaWQKK3YzZF9mbHVzaF9jYWNoZXMoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwl2M2Rf aW52YWxpZGF0ZV9sMXRkKHYzZCwgMCk7CisJdjNkX2ludmFsaWRhdGVfbDJ0KHYzZCwgMCk7Cit9 CisKK3N0YXRpYyB2b2lkCit2M2RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IHYzZF9leGVj X2luZm8gKmV4ZWMpCit7CisJc3RydWN0IGRtYV9mZW5jZSAqb3V0X2ZlbmNlID0gJmV4ZWMtPnJl bmRlci5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkOworCXN0cnVjdCB2M2RfYm8gKmJvOworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IGV4ZWMtPmJvX2NvdW50OyBpKyspIHsKKwkJYm8gPSB0b192 M2RfYm8oJmV4ZWMtPmJvW2ldLT5iYXNlKTsKKworCQkvKiBYWFg6IFVzZSBzaGFyZWQgZmVuY2Vz IGZvciByZWFkLW9ubHkgb2JqZWN0cy4gKi8KKwkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNs X2ZlbmNlKGJvLT5yZXN2LCBvdXRfZmVuY2UpOworCX0KK30KKworc3RhdGljIHZvaWQKK3YzZF91 bmxvY2tfYm9fcmVzZXJ2YXRpb25zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1 Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYywKKwkJCSAgIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqYWNx dWlyZV9jdHgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7 IGkrKykgeworCQlzdHJ1Y3QgdjNkX2JvICpibyA9IHRvX3YzZF9ibygmZXhlYy0+Ym9baV0tPmJh c2UpOworCisJCXd3X211dGV4X3VubG9jaygmYm8tPnJlc3YtPmxvY2spOworCX0KKworCXd3X2Fj cXVpcmVfZmluaShhY3F1aXJlX2N0eCk7Cit9CisKKy8qIFRha2VzIHRoZSByZXNlcnZhdGlvbiBs b2NrIG9uIGFsbCB0aGUgQk9zIGJlaW5nIHJlZmVyZW5jZWQsIHNvIHRoYXQKKyAqIGF0IHF1ZXVl IHN1Ym1pdCB0aW1lIHdlIGNhbiB1cGRhdGUgdGhlIHJlc2VydmF0aW9ucy4KKyAqCisgKiBXZSBk b24ndCBsb2NrIHRoZSBSQ0wgdGhlIHRpbGUgYWxsb2Mvc3RhdGUgQk9zLCBvciBvdmVyZmxvdyBt ZW1vcnkKKyAqIChhbGwgb2Ygd2hpY2ggYXJlIG9uIGV4ZWMtPnVucmVmX2xpc3QpLiAgVGhleSdy ZSBlbnRpcmVseSBwcml2YXRlCisgKiB0byB2M2QsIHNvIHdlIGRvbid0IGF0dGFjaCBkbWEtYnVm IGZlbmNlcyB0byB0aGVtLgorICovCitzdGF0aWMgaW50Cit2M2RfbG9ja19ib19yZXNlcnZhdGlv bnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhl YywKKwkJCSBzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4KQoreworCWludCBjb250 ZW5kZWRfbG9jayA9IC0xOworCWludCBpLCByZXQ7CisJc3RydWN0IHYzZF9ibyAqYm87CisKKwl3 d19hY3F1aXJlX2luaXQoYWNxdWlyZV9jdHgsICZyZXNlcnZhdGlvbl93d19jbGFzcyk7CisKK3Jl dHJ5OgorCWlmIChjb250ZW5kZWRfbG9jayAhPSAtMSkgeworCQlibyA9IHRvX3YzZF9ibygmZXhl Yy0+Ym9bY29udGVuZGVkX2xvY2tdLT5iYXNlKTsKKwkJcmV0ID0gd3dfbXV0ZXhfbG9ja19zbG93 X2ludGVycnVwdGlibGUoJmJvLT5yZXN2LT5sb2NrLAorCQkJCQkJICAgICAgIGFjcXVpcmVfY3R4 KTsKKwkJaWYgKHJldCkgeworCQkJd3dfYWNxdWlyZV9kb25lKGFjcXVpcmVfY3R4KTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkr KykgeworCQlpZiAoaSA9PSBjb250ZW5kZWRfbG9jaykKKwkJCWNvbnRpbnVlOworCisJCWJvID0g dG9fdjNkX2JvKCZleGVjLT5ib1tpXS0+YmFzZSk7CisKKwkJcmV0ID0gd3dfbXV0ZXhfbG9ja19p bnRlcnJ1cHRpYmxlKCZiby0+cmVzdi0+bG9jaywgYWNxdWlyZV9jdHgpOworCQlpZiAocmV0KSB7 CisJCQlpbnQgajsKKworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJCWJvID0gdG9f djNkX2JvKCZleGVjLT5ib1tqXS0+YmFzZSk7CisJCQkJd3dfbXV0ZXhfdW5sb2NrKCZiby0+cmVz di0+bG9jayk7CisJCQl9CisKKwkJCWlmIChjb250ZW5kZWRfbG9jayAhPSAtMSAmJiBjb250ZW5k ZWRfbG9jayA+PSBpKSB7CisJCQkJYm8gPSB0b192M2RfYm8oJmV4ZWMtPmJvW2NvbnRlbmRlZF9s b2NrXS0+YmFzZSk7CisKKwkJCQl3d19tdXRleF91bmxvY2soJmJvLT5yZXN2LT5sb2NrKTsKKwkJ CX0KKworCQkJaWYgKHJldCA9PSAtRURFQURMSykgeworCQkJCWNvbnRlbmRlZF9sb2NrID0gaTsK KwkJCQlnb3RvIHJldHJ5OworCQkJfQorCisJCQl3d19hY3F1aXJlX2RvbmUoYWNxdWlyZV9jdHgp OworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXd3X2FjcXVpcmVfZG9uZShhY3F1aXJlX2N0 eCk7CisKKwkvKiBSZXNlcnZlIHNwYWNlIGZvciBvdXIgc2hhcmVkIChyZWFkLW9ubHkpIGZlbmNl IHJlZmVyZW5jZXMsCisJICogYmVmb3JlIHdlIGNvbW1pdCB0aGUgQ0wgdG8gdGhlIGhhcmR3YXJl LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKSB7CisJCWJvID0g dG9fdjNkX2JvKCZleGVjLT5ib1tpXS0+YmFzZSk7CisKKwkJcmV0ID0gcmVzZXJ2YXRpb25fb2Jq ZWN0X3Jlc2VydmVfc2hhcmVkKGJvLT5yZXN2KTsKKwkJaWYgKHJldCkgeworCQkJdjNkX3VubG9j a19ib19yZXNlcnZhdGlvbnMoZGV2LCBleGVjLCBhY3F1aXJlX2N0eCk7CisJCQlyZXR1cm4gcmV0 OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdjNkX2NsX2xvb2t1cF9ib3Mo KSAtIFNldHMgdXAgZXhlYy0+Ym9bXSB3aXRoIHRoZSBHRU0gb2JqZWN0cworICogcmVmZXJlbmNl ZCBieSB0aGUgam9iLgorICogQGRldjogRFJNIGRldmljZQorICogQGZpbGVfcHJpdjogRFJNIGZp bGUgZm9yIHRoaXMgZmQKKyAqIEBleGVjOiBWM0Qgam9iIGJlaW5nIHNldCB1cAorICoKKyAqIFRo ZSBjb21tYW5kIHZhbGlkYXRvciBuZWVkcyB0byByZWZlcmVuY2UgQk9zIGJ5IHRoZWlyIGluZGV4 IHdpdGhpbgorICogdGhlIHN1Ym1pdHRlZCBqb2IncyBCTyBsaXN0LiAgVGhpcyBkb2VzIHRoZSB2 YWxpZGF0aW9uIG9mIHRoZSBqb2IncworICogQk8gbGlzdCBhbmQgcmVmZXJlbmNlIGNvdW50aW5n IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGpvYi4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5j dGlvbiBkb2Vzbid0IG5lZWQgdG8gdW5yZWZlcmVuY2UgdGhlIEJPcyBvbgorICogZmFpbHVyZSwg YmVjYXVzZSB0aGF0IHdpbGwgaGFwcGVuIGF0IHYzZF9leGVjX2NsZWFudXAoKSB0aW1lLgorICov CitzdGF0aWMgaW50Cit2M2RfY2xfbG9va3VwX2JvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgIHN0cnVjdCBkcm1fdjNkX3N1Ym1p dF9jbCAqYXJncywKKwkJICBzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAqZXhlYykKK3sKKwl1MzIgKmhh bmRsZXM7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlleGVjLT5ib19jb3VudCA9IGFyZ3Mt PmJvX2hhbmRsZV9jb3VudDsKKworCWlmICghZXhlYy0+Ym9fY291bnQpIHsKKwkJLyogU2VlIGNv bW1lbnQgb24gYm9faW5kZXggZm9yIHdoeSB3ZSBoYXZlIHRvIGNoZWNrCisJCSAqIHRoaXMuCisJ CSAqLworCQlEUk1fREVCVUcoIlJlbmRlcmluZyByZXF1aXJlcyBCT3NcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlleGVjLT5ibyA9IGt2bWFsbG9jX2FycmF5KGV4ZWMtPmJvX2NvdW50 LAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKiksCisJCQkJICBHRlBf S0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFleGVjLT5ibykgeworCQlEUk1fREVCVUcoIkZh aWxlZCB0byBhbGxvY2F0ZSB2YWxpZGF0ZWQgQk8gcG9pbnRlcnNcbiIpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwloYW5kbGVzID0ga3ZtYWxsb2NfYXJyYXkoZXhlYy0+Ym9fY291bnQsIHNp emVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhhbmRsZXMpIHsKKwkJcmV0ID0gLUVOT01F TTsKKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW5jb21pbmcgR0VNIGhhbmRsZXNc biIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGhhbmRsZXMsCisJ CQkgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWFyZ3MtPmJvX2hhbmRsZXMsCisJCQkgICBl eGVjLT5ib19jb3VudCAqIHNpemVvZih1MzIpKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlEUk1f REVCVUcoIkZhaWxlZCB0byBjb3B5IGluIEdFTSBoYW5kbGVzXG4iKTsKKwkJZ290byBmYWlsOwor CX0KKworCXNwaW5fbG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBp IDwgZXhlYy0+Ym9fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvID0g aWRyX2ZpbmQoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwKKwkJCQkJCSAgICAgaGFuZGxlc1tpXSk7 CisJCWlmICghYm8pIHsKKwkJCURSTV9ERUJVRygiRmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVk OiAlZFxuIiwKKwkJCQkgIGksIGhhbmRsZXNbaV0pOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCXNw aW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCQkJZ290byBmYWlsOworCQl9CisJ CWRybV9nZW1fb2JqZWN0X2dldChibyk7CisJCWV4ZWMtPmJvW2ldID0gdG9fdjNkX2JvKGJvKTsK Kwl9CisJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisKK2ZhaWw6CisJa3Zm cmVlKGhhbmRsZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCit2M2RfZXhlY19j bGVhbnVwKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMg PSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgdjNkX2V4ZWNfaW5mbywKKwkJCQkJCSAgcmVmY291 bnQpOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBleGVjLT52M2Q7CisJdW5zaWduZWQgaW50IGk7 CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlzdHJ1Y3QgdjNkX2JvICpibywgKnNhdmUsICpv dmVyZmxvdyA9IE5VTEw7CisKKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbi5pbl9mZW5jZSk7CisJ ZG1hX2ZlbmNlX3B1dChleGVjLT5yZW5kZXIuaW5fZmVuY2UpOworCisJZG1hX2ZlbmNlX3B1dChl eGVjLT5iaW4uZG9uZV9mZW5jZSk7CisJZG1hX2ZlbmNlX3B1dChleGVjLT5yZW5kZXIuZG9uZV9m ZW5jZSk7CisKKwlkbWFfZmVuY2VfcHV0KGV4ZWMtPmJpbl9kb25lX2ZlbmNlKTsKKworCWZvciAo aSA9IDA7IGkgPCBleGVjLT5ib19jb3VudDsgaSsrKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZV91bmxvY2tlZCgmZXhlYy0+Ym9baV0tPmJhc2UpOworCWt2ZnJlZShleGVjLT5ibyk7CisK KwkvKiBSdW5uaW5nIGEgYmluIGpvYiBtYXkgbW92ZSB0aGUgY3VycmVudCBvdmVyZmxvdyBCTyBm cm9tIG91cgorCSAqIHVucmVmX2xpc3QgdG8gdGhlIG5ldyBiaW4gam9iJ3MgdW5yZWZfbGlzdCwg c28gd2UgbmVlZCB0bworCSAqIHNvcnQgdGhyb3VnaCBvdXIgdW5yZWZfbGlzdCB1bmRlciB0aGUg am9iIGxvY2sgdG8gcHVsbCB0aGUKKwkgKiBvdmVyZmxvdyBCTyBvZmYgb2YgaXQuICBXZSBjYW4n dCB1bnJlZmVyZW5jZSB1bmRlciB0aGUKKwkgKiBqb2JfbG9jaywgaXQncyBpcnFzYWZlIGJ1dCB1 bnJlZmVyZW5jaW5nIHRha2VzIGEgbXV0ZXguCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYz ZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYm8sIHNh dmUsICZleGVjLT51bnJlZl9saXN0LCB1bnJlZl9oZWFkKSB7CisJCWlmIChibyA9PSB2M2QtPm92 ZXJmbG93X2JvKSB7CisJCQlvdmVyZmxvdyA9IGJvOworCQkJbGlzdF9kZWxfaW5pdCgmYm8tPnVu cmVmX2hlYWQpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzZC0+am9iX2xv Y2ssIGlycWZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgc2F2ZSwgJmV4 ZWMtPnVucmVmX2xpc3QsIHVucmVmX2hlYWQpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVu Y2VfdW5sb2NrZWQoJmJvLT5iYXNlKTsKKwl9CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJm92ZXJmbG93LT5iYXNlKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3ko djNkLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHYzZC0+ZGV2KTsKKworCWtm cmVlKGV4ZWMpOworfQorCit2b2lkIHYzZF9leGVjX3B1dChzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAq ZXhlYykKK3sKKwlrcmVmX3B1dCgmZXhlYy0+cmVmY291bnQsIHYzZF9leGVjX2NsZWFudXApOwor fQorCitpbnQKK3YzZF93YWl0X2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCisJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKwlz dHJ1Y3QgZHJtX3YzZF93YWl0X2JvICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbV9vYmo7CisJc3RydWN0IHYzZF9ibyAqYm87CisJdW5zaWduZWQgbG9uZyBzdGFydCA9 IGppZmZpZXM7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2ppZmZpZXMgPQorCQluc2Vjc190b19q aWZmaWVzX3RpbWVvdXQoYXJncy0+dGltZW91dF9ucyk7CisKKwlpZiAoYXJncy0+cGFkICE9IDAp CisJCXJldHVybiAtRUlOVkFMOworCisJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChm aWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKCFnZW1fb2JqKSB7CisJCURSTV9ERUJVRygi RmFpbGVkIHRvIGxvb2sgdXAgR0VNIEJPICVkXG4iLCBhcmdzLT5oYW5kbGUpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisJYm8gPSB0b192M2RfYm8oZ2VtX29iaik7CisKKwlyZXQgPSByZXNlcnZh dGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShiby0+cmVzdiwKKwkJCQkJCSAgdHJ1ZSwgdHJ1 ZSwKKwkJCQkJCSAgdGltZW91dF9qaWZmaWVzKTsKKworCS8qIERlY3JlbWVudCB0aGUgdXNlcidz IHRpbWVvdXQsIGluIGNhc2Ugd2UgZ290IGludGVycnVwdGVkCisJICogc3VjaCB0aGF0IHRoZSBp b2N0bCB3aWxsIGJlIHJlc3RhcnRlZC4KKwkgKi8KKwlhcmdzLT50aW1lb3V0X25zIC09IGppZmZp ZXNfdG9fbnNlY3MoamlmZmllcyAtIHN0YXJ0KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJl bmNlX3VubG9ja2VkKGdlbV9vYmopOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJ ZWxzZSBpZiAocmV0ID09IDApCisJCXJldHVybiAtRVRJTUU7CisJZWxzZQorCQlyZXR1cm4gMDsK K30KKworLyoqCisgKiB2M2Rfc3VibWl0X2NsX2lvY3RsKCkgLSBTdWJtaXRzIGEgam9iIChmcmFt ZSkgdG8gdGhlIFYzRC4KKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBkYXRhOiBpb2N0bCBhcmd1 bWVudAorICogQGZpbGVfcHJpdjogRFJNIGZpbGUgZm9yIHRoaXMgZmQKKyAqCisgKiBUaGlzIGlz IHRoZSBtYWluIGVudHJ5cG9pbnQgZm9yIHVzZXJzcGFjZSB0byBzdWJtaXQgYSAzRCBmcmFtZSB0 bworICogdGhlIEdQVS4gIFVzZXJzcGFjZSBwcm92aWRlcyB0aGUgYmlubmVyIGNvbW1hbmQgbGlz dCAoaWYKKyAqIGFwcGxpY2FibGUpLCBhbmQgdGhlIGtlcm5lbCBzZXRzIHVwIHRoZSByZW5kZXIg Y29tbWFuZCBsaXN0IHRvIGRyYXcKKyAqIHRvIHRoZSBmcmFtZWJ1ZmZlciBkZXNjcmliZWQgaW4g dGhlIGlvY3RsLCB1c2luZyB0aGUgY29tbWFuZCBsaXN0cworICogdGhhdCB0aGUgM0QgZW5naW5l J3MgYmlubmVyIHdpbGwgcHJvZHVjZS4KKyAqLworaW50Cit2M2Rfc3VibWl0X2NsX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwor CXN0cnVjdCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7 CisJc3RydWN0IGRybV92M2Rfc3VibWl0X2NsICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgdjNkX2V4 ZWNfaW5mbyAqZXhlYzsKKwlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggYWNxdWlyZV9jdHg7CisJc3Ry dWN0IGRybV9zeW5jb2JqICpzeW5jX291dDsKKwlpbnQgcmV0ID0gMDsKKworCWV4ZWMgPSBrY2Fs bG9jKDEsIHNpemVvZigqZXhlYyksIEdGUF9LRVJORUwpOworCWlmICghZXhlYykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKHYzZC0+ZGV2KTsKKwlpZiAo cmV0IDwgMCkgeworCQlrZnJlZShleGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlrcmVmX2lu aXQoJmV4ZWMtPnJlZmNvdW50KTsKKworCXJldCA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmls ZV9wcml2LCBhcmdzLT5pbl9zeW5jX2JjbCwKKwkJCQkgICAgICZleGVjLT5iaW4uaW5fZmVuY2Up OworCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gZHJtX3N5bmNv YmpfZmluZF9mZW5jZShmaWxlX3ByaXYsIGFyZ3MtPmluX3N5bmNfcmNsLAorCQkJCSAgICAgJmV4 ZWMtPnJlbmRlci5pbl9mZW5jZSk7CisJaWYgKHJldCA9PSAtRUlOVkFMKQorCQlnb3RvIGZhaWw7 CisKKwlleGVjLT5xbWEgPSBhcmdzLT5xbWE7CisJZXhlYy0+cW1zID0gYXJncy0+cW1zOworCWV4 ZWMtPnF0cyA9IGFyZ3MtPnF0czsKKwlleGVjLT5iaW4uZXhlYyA9IGV4ZWM7CisJZXhlYy0+Ymlu LnN0YXJ0ID0gYXJncy0+YmNsX3N0YXJ0OworCWV4ZWMtPmJpbi5lbmQgPSBhcmdzLT5iY2xfZW5k OworCWV4ZWMtPnJlbmRlci5leGVjID0gZXhlYzsKKwlleGVjLT5yZW5kZXIuc3RhcnQgPSBhcmdz LT5yY2xfc3RhcnQ7CisJZXhlYy0+cmVuZGVyLmVuZCA9IGFyZ3MtPnJjbF9lbmQ7CisJZXhlYy0+ djNkID0gdjNkOworCUlOSVRfTElTVF9IRUFEKCZleGVjLT51bnJlZl9saXN0KTsKKworCXJldCA9 IHYzZF9jbF9sb29rdXBfYm9zKGRldiwgZmlsZV9wcml2LCBhcmdzLCBleGVjKTsKKwlpZiAocmV0 KQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSB2M2RfbG9ja19ib19yZXNlcnZhdGlvbnMoZGV2LCBl eGVjLCAmYWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCWlmIChleGVj LT5iaW4uc3RhcnQgIT0gZXhlYy0+YmluLmVuZCkgeworCQlyZXQgPSBkcm1fc2NoZWRfam9iX2lu aXQoJmV4ZWMtPmJpbi5iYXNlLAorCQkJCQkgJnYzZC0+cXVldWVbVjNEX0JJTl0uc2NoZWQsCisJ CQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfQklOXSwKKwkJCQkJIHYzZF9wcml2KTsK KwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF91bnJlc2VydmU7CisKKwkJZXhlYy0+YmluX2RvbmVf ZmVuY2UgPQorCQkJZG1hX2ZlbmNlX2dldCgmZXhlYy0+YmluLmJhc2Uuc19mZW5jZS0+ZmluaXNo ZWQpOworCisJCWtyZWZfZ2V0KCZleGVjLT5yZWZjb3VudCk7IC8qIHB1dCBieSBzY2hlZHVsZXIg am9iIGNvbXBsZXRpb24gKi8KKwkJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmZXhlYy0+Ymlu LmJhc2UsCisJCQkJCSAgJnYzZF9wcml2LT5zY2hlZF9lbnRpdHlbVjNEX0JJTl0pOworCX0KKwor CXJldCA9IGRybV9zY2hlZF9qb2JfaW5pdCgmZXhlYy0+cmVuZGVyLmJhc2UsCisJCQkJICZ2M2Qt PnF1ZXVlW1YzRF9SRU5ERVJdLnNjaGVkLAorCQkJCSAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtW M0RfUkVOREVSXSwKKwkJCQkgdjNkX3ByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF91bnJl c2VydmU7CisKKwlrcmVmX2dldCgmZXhlYy0+cmVmY291bnQpOyAvKiBwdXQgYnkgc2NoZWR1bGVy IGpvYiBjb21wbGV0aW9uICovCisJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmZXhlYy0+cmVu ZGVyLmJhc2UsCisJCQkJICAmdjNkX3ByaXYtPnNjaGVkX2VudGl0eVtWM0RfUkVOREVSXSk7CisK Kwl2M2RfYXR0YWNoX29iamVjdF9mZW5jZXMoZXhlYyk7CisKKwl2M2RfdW5sb2NrX2JvX3Jlc2Vy dmF0aW9ucyhkZXYsIGV4ZWMsICZhY3F1aXJlX2N0eCk7CisKKwkvKiBVcGRhdGUgdGhlIHJldHVy biBzeW5jIG9iamVjdCBmb3IgdGhlICovCisJc3luY19vdXQgPSBkcm1fc3luY29ial9maW5kKGZp bGVfcHJpdiwgYXJncy0+b3V0X3N5bmMpOworCWlmIChzeW5jX291dCkgeworCQlkcm1fc3luY29i al9yZXBsYWNlX2ZlbmNlKHN5bmNfb3V0LAorCQkJCQkgICZleGVjLT5yZW5kZXIuYmFzZS5zX2Zl bmNlLT5maW5pc2hlZCk7CisJCWRybV9zeW5jb2JqX3B1dChzeW5jX291dCk7CisJfQorCisJdjNk X2V4ZWNfcHV0KGV4ZWMpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5yZXNlcnZlOgorCXYzZF91 bmxvY2tfYm9fcmVzZXJ2YXRpb25zKGRldiwgZXhlYywgJmFjcXVpcmVfY3R4KTsKK2ZhaWw6CisJ djNkX2V4ZWNfcHV0KGV4ZWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50Cit2M2RfZ2VtX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9f djNkX2RldihkZXYpOworCXUzMiBwdF9zaXplID0gNDA5NiAqIDEwMjQ7CisJaW50IHJldCwgaTsK KworCWZvciAoaSA9IDA7IGkgPCBWM0RfTUFYX1FVRVVFUzsgaSsrKQorCQl2M2QtPnF1ZXVlW2ld LmZlbmNlX2NvbnRleHQgPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTsKKworCXNwaW5fbG9j a19pbml0KCZ2M2QtPm1tX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2M2QtPmpvYl9sb2NrKTsK KwltdXRleF9pbml0KCZ2M2QtPmJvX2xvY2spOworCW11dGV4X2luaXQoJnYzZC0+cmVzZXRfbG9j ayk7CisKKwkvKiBOb3RlOiBXZSBkb24ndCBhbGxvY2F0ZSBhZGRyZXNzIDAuICBWYXJpb3VzIGJp dHMgb2YgSFcKKwkgKiB0cmVhdCAwIGFzIHNwZWNpYWwsIHN1Y2ggYXMgdGhlIG9jY2x1c2lvbiBx dWVyeSBjb3VudGVycworCSAqIHdoZXJlIDAgbWVhbnMgImRpc2FibGVkIi4KKwkgKi8KKwlkcm1f bW1faW5pdCgmdjNkLT5tbSwgMSwgcHRfc2l6ZSAvIHNpemVvZih1MzIpIC0gMSk7CisKKwl2M2Qt PnB0ID0gZG1hX2FsbG9jX2NvaGVyZW50KHYzZC0+ZGV2LCBwdF9zaXplLAorCQkJCSAgICAgJnYz ZC0+cHRfcGFkZHIsCisJCQkJICAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBf WkVSTyk7CisJaWYgKCF2M2QtPnB0KSB7CisJCWRybV9tbV90YWtlZG93bigmdjNkLT5tbSk7CisJ CWRldl9lcnIodjNkLT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2UgdGFibGVzLiAi CisJCQkiUGxlYXNlIGVuc3VyZSB5b3UgaGF2ZSBDTUEgZW5hYmxlZC5cbiIpOworCQlyZXR1cm4g LUVOT01FTTsKKwl9CisKKwl2M2RfaW5pdF9od19zdGF0ZSh2M2QpOworCXYzZF9tbXVfc2V0X3Bh Z2VfdGFibGUodjNkKTsKKworCXJldCA9IHYzZF9zY2hlZF9pbml0KHYzZCk7CisJaWYgKHJldCkg eworCQlkcm1fbW1fdGFrZWRvd24oJnYzZC0+bW0pOworCQlkbWFfZnJlZV9jb2hlcmVudCh2M2Qt PmRldiwgNDA5NiAqIDEwMjQsICh2b2lkICopdjNkLT5wdCwKKwkJCQkgIHYzZC0+cHRfcGFkZHIp OworCX0KKworCXJldHVybiAwOworfQorCit2b2lkCit2M2RfZ2VtX2Rlc3Ryb3koc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYp OworCWVudW0gdjNkX3F1ZXVlIHE7CisKKwl2M2Rfc2NoZWRfZmluaSh2M2QpOworCisJLyogV2Fp dGluZyBmb3IgZXhlYyB0byBmaW5pc2ggd291bGQgbmVlZCB0byBiZSBkb25lIGJlZm9yZQorCSAq IHVucmVnaXN0ZXJpbmcgVjNELgorCSAqLworCWZvciAocSA9IDA7IHEgPCBWM0RfTUFYX1FVRVVF UzsgcSsrKSB7CisJCVdBUk5fT04odjNkLT5xdWV1ZVtxXS5lbWl0X3NlcW5vICE9CisJCQl2M2Qt PnF1ZXVlW3FdLmZpbmlzaGVkX3NlcW5vKTsKKwl9CisKKwlkcm1fbW1fdGFrZWRvd24oJnYzZC0+ bW0pOworCisJZG1hX2ZyZWVfY29oZXJlbnQodjNkLT5kZXYsIDQwOTYgKiAxMDI0LCAodm9pZCAq KXYzZC0+cHQsIHYzZC0+cHRfcGFkZHIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3YzZC92M2RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBiNDhjZDcwYzk5NQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCkBAIC0wLDAgKzEsMjExIEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdodCAoQykgMjAx NC0yMDE4IEJyb2FkY29tICovCisKKy8qKgorICogRE9DOiBJbnRlcnJ1cHQgbWFuYWdlbWVudCBm b3IgdGhlIFYzRCBlbmdpbmUKKyAqCisgKiBXaGVuIHdlIHRha2UgYSBiaW5uaW5nIG9yIHJlbmRl cmluZyBmbHVzaCBkb25lIGludGVycnVwdCwgd2UgbmVlZAorICogdG8gc2lnbmFsIHRoZSBmZW5j ZSBmb3IgdGhhdCBqb2Igc28gdGhhdCB0aGUgc2NoZWR1bGVyIGNhbiBxdWV1ZSB1cAorICogdGhl IG5leHQgb25lIGFuZCB1bmJsb2NrIGFueSB3YWl0ZXJzLgorICoKKyAqIFdoZW4gd2UgdGFrZSB0 aGUgYmlubmVyIG91dCBvZiBtZW1vcnkgaW50ZXJydXB0LCB3ZSBuZWVkIHRvCisgKiBhbGxvY2F0 ZSBzb21lIG5ldyBtZW1vcnkgYW5kIHBhc3MgaXQgdG8gdGhlIGJpbm5lciBzbyB0aGF0IHRoZQor ICogY3VycmVudCBqb2IgY2FuIG1ha2UgcHJvZ3Jlc3MuCisgKi8KKworI2luY2x1ZGUgInYzZF9k cnYuaCIKKyNpbmNsdWRlICJ2M2RfcmVncy5oIgorCisjZGVmaW5lIFYzRF9DT1JFX0lSUVMgKCh1 MzIpKFYzRF9JTlRfT1VUT01FTSB8CVwKKwkJCSAgICAgVjNEX0lOVF9GTERPTkUgfAlcCisJCQkg ICAgIFYzRF9JTlRfRlJET05FIHwJXAorCQkJICAgICBWM0RfSU5UX0dNUFYpKQorCisjZGVmaW5l IFYzRF9IVUJfSVJRUyAoKHUzMikoVjNEX0hVQl9JTlRfTU1VX1dSViB8CVwKKwkJCSAgICBWM0Rf SFVCX0lOVF9NTVVfUFRJIHwJXAorCQkJICAgIFYzRF9IVUJfSU5UX01NVV9DQVApKQorCitzdGF0 aWMgdm9pZAordjNkX292ZXJmbG93X21lbV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK K3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2 M2RfZGV2LCBvdmVyZmxvd19tZW1fd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHYz ZC0+ZHJtOworCXN0cnVjdCB2M2RfYm8gKmJvID0gdjNkX2JvX2NyZWF0ZShkZXYsIE5VTEwgLyog WFhYOiBHTVAgKi8sIDI1NiAqIDEwMjQpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlp ZiAoSVNfRVJSKGJvKSkgeworCQlEUk1fRVJST1IoIkNvdWxkbid0IGFsbG9jYXRlIGJpbm5lciBv dmVyZmxvdyBtZW1cbiIpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYz ZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwlpZiAodjNkLT5vdmVyZmxvd19ibykKKwkJZHJtX2dl bV9vYmplY3RfcHV0X3VubG9ja2VkKCZ2M2QtPm92ZXJmbG93X2JvLT5iYXNlKTsKKwl2M2QtPm92 ZXJmbG93X2JvID0gYm87CisKKwkvKiBBc3NvY2lhdGUgdGhlIG92ZXJmbG93IEJPIHdpdGggdGhl IGN1cnJlbnQgYmluIGpvYiwgaWYgYW55LgorCSAqIFRoZSBCTyB3b24ndCBiZSBmaW5hbGx5IHVu cmVmZXJlbmNlZCAoaW4gdGhlIG9iamVjdF9wdXQKKwkgKiBhYm92ZSkgdW50aWwgdGhlIGxhc3Qg YmluIGpvYiB1c2luZyBpdCBoYXMgbWFkZSBpdCBoYXMKKwkgKiBmaW5pc2hlZCByZW5kZXJpbmcu CisJICoKKwkgKiBXZSBmYWlsIHRvIHVwZGF0ZSBpdHMgcmVzZXJ2YXRpb24gZm9yIHRoZSBqb2In cyByZW5kZXIgZG9uZQorCSAqIGZlbmNlLCBidXQgbm90aGluZyBjYW4gZmluZCB0aGlzIG9iamVj dCB0byB0cnkgdG8gdXNlIGl0cworCSAqIHJlc2VydmF0aW9uLgorCSAqLworCWlmICh2M2QtPmJp bl9qb2IpIHsKKwkJZHJtX2dlbV9vYmplY3RfZ2V0KCZiby0+YmFzZSk7CisJCWxpc3RfYWRkX3Rh aWwoJnYzZC0+b3ZlcmZsb3dfYm8tPnVucmVmX2hlYWQsCisJCQkgICAgICAmdjNkLT5iaW5fam9i LT51bnJlZl9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNkLT5qb2JfbG9j aywgaXJxZmxhZ3MpOworCisJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX1BUQl9CUE9BLCBiby0+bm9k ZS5zdGFydCA8PCBQQUdFX1NISUZUKTsKKwlWM0RfQ09SRV9XUklURSgwLCBWM0RfUFRCX0JQT1Ms IGJvLT5iYXNlLnNpemUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3YzZF9pcnEoaW50IGly cSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSBhcmc7CisJdTMyIGludHN0 czsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKworCWludHN0cyA9IFYzRF9DT1JF X1JFQUQoMCwgVjNEX0NUTF9JTlRfU1RTKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1 cHRzIHdlJ3JlIGhhbmRsaW5nIGhlcmUuICovCisJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NUTF9J TlRfQ0xSLCBpbnRzdHMpOworCisJaWYgKGludHN0cyAmIFYzRF9JTlRfT1VUT01FTSkgeworCQkv KiBOb3RlIHRoYXQgdGhlIE9PTSBzdGF0dXMgaXMgZWRnZSBzaWduYWxlZCwgc28gdGhlCisJCSAq IGludGVycnVwdCB3b24ndCBoYXBwZW4gYWdhaW4gdW50aWwgdGhlIHdlIGFjdHVhbGx5CisJCSAq IGFkZCBtb3JlIG1lbW9yeS4KKwkJICovCisJCXNjaGVkdWxlX3dvcmsoJnYzZC0+b3ZlcmZsb3df bWVtX3dvcmspOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaW50c3RzICYg VjNEX0lOVF9GTERPTkUpIHsKKwkJdjNkLT5xdWV1ZVtWM0RfQklOXS5maW5pc2hlZF9zZXFubysr OworCQlkbWFfZmVuY2Vfc2lnbmFsKHYzZC0+YmluX2pvYi0+YmluLmRvbmVfZmVuY2UpOworCQlz dGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaW50c3RzICYgVjNEX0lOVF9GUkRPTkUp IHsKKwkJdjNkLT5xdWV1ZVtWM0RfUkVOREVSXS5maW5pc2hlZF9zZXFubysrOworCQlkbWFfZmVu Y2Vfc2lnbmFsKHYzZC0+cmVuZGVyX2pvYi0+cmVuZGVyLmRvbmVfZmVuY2UpOworCisJCXN0YXR1 cyA9IElSUV9IQU5ETEVEOworCX0KKworCS8qIFdlIHNob3VsZG4ndCBiZSB0cmlnZ2VyaW5nIHRo ZXNlIGlmIHdlIGhhdmUgR01QIGluCisJICogYWx3YXlzLWFsbG93ZWQgbW9kZS4KKwkgKi8KKwlp ZiAoaW50c3RzICYgVjNEX0lOVF9HTVBWKQorCQlkZXZfZXJyKHYzZC0+ZGV2LCAiR01QIHZpb2xh dGlvblxuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3Yz ZF9odWJfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0g YXJnOworCXUzMiBpbnRzdHM7CisJaXJxcmV0dXJuX3Qgc3RhdHVzID0gSVJRX05PTkU7CisKKwlp bnRzdHMgPSBWM0RfUkVBRChWM0RfSFVCX0lOVF9TVFMpOworCisJLyogQWNrbm93bGVkZ2UgdGhl IGludGVycnVwdHMgd2UncmUgaGFuZGxpbmcgaGVyZS4gKi8KKwlWM0RfV1JJVEUoVjNEX0hVQl9J TlRfQ0xSLCBpbnRzdHMpOworCisJaWYgKGludHN0cyAmIChWM0RfSFVCX0lOVF9NTVVfV1JWIHwK KwkJICAgICAgVjNEX0hVQl9JTlRfTU1VX1BUSSB8CisJCSAgICAgIFYzRF9IVUJfSU5UX01NVV9D QVApKSB7CisJCXUzMiBheGlfaWQgPSBWM0RfUkVBRChWM0RfTU1VX1ZJT19JRCk7CisJCXU2NCB2 aW9fYWRkciA9ICh1NjQpVjNEX1JFQUQoVjNEX01NVV9WSU9fQUREUikgPDwgODsKKworCQlkZXZf ZXJyKHYzZC0+ZGV2LCAiTU1VIGVycm9yIGZyb20gY2xpZW50ICVkIGF0IDB4JTA4bGx4JXMlcyVz XG4iLAorCQkJYXhpX2lkLCAobG9uZyBsb25nKXZpb19hZGRyLAorCQkJKChpbnRzdHMgJiBWM0Rf SFVCX0lOVF9NTVVfV1JWKSA/CisJCQkgIiwgd3JpdGUgdmlvbGF0aW9uIiA6ICIiKSwKKwkJCSgo aW50c3RzICYgVjNEX0hVQl9JTlRfTU1VX1BUSSkgPworCQkJICIsIHB0ZSBpbnZhbGlkIiA6ICIi KSwKKwkJCSgoaW50c3RzICYgVjNEX0hVQl9JTlRfTU1VX0NBUCkgPworCQkJICIsIGNhcCBleGNl ZWRlZCIgOiAiIikpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gc3Rh dHVzOworfQorCit2b2lkCit2M2RfaXJxX2luaXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwlp bnQgcmV0LCBjb3JlOworCisJSU5JVF9XT1JLKCZ2M2QtPm92ZXJmbG93X21lbV93b3JrLCB2M2Rf b3ZlcmZsb3dfbWVtX3dvcmspOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBz b21lb25lIG1pZ2h0IGhhdmUgbGVmdCBhcm91bmQKKwkgKiBmb3IgdXMuCisJICovCisJZm9yIChj b3JlID0gMDsgY29yZSA8IHYzZC0+Y29yZXM7IGNvcmUrKykKKwkJVjNEX0NPUkVfV1JJVEUoY29y ZSwgVjNEX0NUTF9JTlRfQ0xSLCBWM0RfQ09SRV9JUlFTKTsKKwlWM0RfV1JJVEUoVjNEX0hVQl9J TlRfQ0xSLCBWM0RfSFVCX0lSUVMpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSh2M2QtPmRl diwgcGxhdGZvcm1fZ2V0X2lycSh2M2QtPnBkZXYsIDApLAorCQkJICAgICAgIHYzZF9odWJfaXJx LCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgICAidjNkX2h1YiIsIHYzZCk7CisJcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycSh2M2QtPmRldiwgcGxhdGZvcm1fZ2V0X2lycSh2M2QtPnBkZXYsIDEpLAorCQkJ ICAgICAgIHYzZF9pcnEsIElSUUZfU0hBUkVELAorCQkJICAgICAgICJ2M2RfY29yZTAiLCB2M2Qp OworCWlmIChyZXQpCisJCWRldl9lcnIodjNkLT5kZXYsICJJUlEgc2V0dXAgZmFpbGVkOiAlZFxu IiwgcmV0KTsKKworCXYzZF9pcnFfZW5hYmxlKHYzZCk7Cit9CisKK3ZvaWQKK3YzZF9pcnFfZW5h YmxlKHN0cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJaW50IGNvcmU7CisKKwkvKiBFbmFibGUgb3Vy IHNldCBvZiBpbnRlcnJ1cHRzLCBtYXNraW5nIG91dCBhbnkgb3RoZXJzLiAqLworCWZvciAoY29y ZSA9IDA7IGNvcmUgPCB2M2QtPmNvcmVzOyBjb3JlKyspIHsKKwkJVjNEX0NPUkVfV1JJVEUoY29y ZSwgVjNEX0NUTF9JTlRfTVNLX1NFVCwgflYzRF9DT1JFX0lSUVMpOworCQlWM0RfQ09SRV9XUklU RShjb3JlLCBWM0RfQ1RMX0lOVF9NU0tfQ0xSLCBWM0RfQ09SRV9JUlFTKTsKKwl9CisKKwlWM0Rf V1JJVEUoVjNEX0hVQl9JTlRfTVNLX1NFVCwgflYzRF9IVUJfSVJRUyk7CisJVjNEX1dSSVRFKFYz RF9IVUJfSU5UX01TS19DTFIsIFYzRF9IVUJfSVJRUyk7Cit9CisKK3ZvaWQKK3YzZF9pcnFfZGlz YWJsZShzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCBjb3JlOworCisJLyogRGlzYWJsZSBh bGwgaW50ZXJydXB0cy4gKi8KKwlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgdjNkLT5jb3JlczsgY29y ZSsrKQorCQlWM0RfQ09SRV9XUklURShjb3JlLCBWM0RfQ1RMX0lOVF9NU0tfU0VULCB+MCk7CisJ VjNEX1dSSVRFKFYzRF9IVUJfSU5UX01TS19TRVQsIH4wKTsKKworCS8qIENsZWFyIGFueSBwZW5k aW5nIGludGVycnVwdHMgd2UgbWlnaHQgaGF2ZSBsZWZ0LiAqLworCWZvciAoY29yZSA9IDA7IGNv cmUgPCB2M2QtPmNvcmVzOyBjb3JlKyspCisJCVYzRF9DT1JFX1dSSVRFKGNvcmUsIFYzRF9DVExf SU5UX0NMUiwgVjNEX0NPUkVfSVJRUyk7CisJVjNEX1dSSVRFKFYzRF9IVUJfSU5UX0NMUiwgVjNE X0hVQl9JUlFTKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJnYzZC0+b3ZlcmZsb3dfbWVtX3dvcmsp OworfQorCisvKiogUmVpbml0aWFsaXplcyBpbnRlcnJ1cHQgcmVnaXN0ZXJzIHdoZW4gYSBHUFUg cmVzZXQgaXMgcGVyZm9ybWVkLiAqLwordm9pZCB2M2RfaXJxX3Jlc2V0KHN0cnVjdCB2M2RfZGV2 ICp2M2QpCit7CisJLyoKKwkgKiBUdXJuIGFsbCBvdXIgaW50ZXJydXB0cyBvbi4gIEJpbm5lciBv dXQgb2YgbWVtb3J5IGlzIHRoZQorCSAqIG9ubHkgb25lIHdlIGV4cGVjdCB0byB0cmlnZ2VyIGF0 IHRoaXMgcG9pbnQsIHNpbmNlIHdlJ3ZlCisJICoganVzdCBjb21lIGZyb20gcG93ZXJvbiBhbmQg aGF2ZW4ndCBzdXBwbGllZCBhbnkgb3ZlcmZsb3cKKwkgKiBtZW1vcnkgeWV0LgorCSAqLworCXYz ZF9pcnFfZW5hYmxlKHYzZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3Yz ZF9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX21tdS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjAwZjk3YzMxYjcwCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfbW11LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg QnJvYWRjb20gKi8KKworLyoqCisgKiBET0M6IEJyb2FkY29tIFYzRCBNTVUKKyAqCisgKiBUaGUg VjNEIDMueCBoYXJkd2FyZSAoY29tcGFyZWQgdG8gVkM0KSBub3cgaW5jbHVkZXMgYW4gTU1VLiAg SXQgaGFzCisgKiBhIHNpbmdsZSBsZXZlbCBvZiBwYWdlIHRhYmxlcyBmb3IgdGhlIFYzRCdzIDRH QiBhZGRyZXNzIHNwYWNlIHRvCisgKiBtYXAgdG8gQVhJIGJ1cyBhZGRyZXNzZXMsIHRodXMgaXQg Y291bGQgbmVlZCB1cCB0byA0TUIgb2YKKyAqIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkg dG8gc3RvcmUgdGhlIFBURXMuCisgKgorICogQmVjYXVzZSB0aGUgNE1CIG9mIGNvbnRpZ3VvdXMg bWVtb3J5IGZvciBwYWdlIHRhYmxlcyBpcyBwcmVjaW91cywKKyAqIGFuZCBzd2l0Y2hpbmcgYmV0 d2VlbiB0aGVtIGlzIGV4cGVuc2l2ZSwgd2UgbG9hZCBhbGwgQk9zIGludG8gdGhlCisgKiBzYW1l IDRHQiBhZGRyZXNzIHNwYWNlLgorICoKKyAqIFRvIHByb3RlY3QgY2xpZW50cyBmcm9tIGVhY2gg b3RoZXIsIHdlIHNob3VsZCB1c2UgdGhlIEdNUCB0bworICogcXVpY2tseSBtYXNrIG91dCAoYXQg MTI4a2IgZ3JhbnVsYXJpdHkpIHdoYXQgcGFnZXMgYXJlIGF2YWlsYWJsZSB0bworICogZWFjaCBj bGllbnQuICBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKi8KKworI2luY2x1ZGUgInYz ZF9kcnYuaCIKKyNpbmNsdWRlICJ2M2RfcmVncy5oIgorCisjZGVmaW5lIFYzRF9NTVVfUEFHRV9T SElGVCAxMgorCisvKiBOb3RlOiBBbGwgUFRFcyBmb3IgdGhlIDFNQiBzdXBlcnBhZ2UgbXVzdCBi ZSBmaWxsZWQgd2l0aCB0aGUKKyAqIHN1cGVycGFnZSBiaXQgc2V0LgorICovCisjZGVmaW5lIFYz RF9QVEVfU1VQRVJQQUdFIEJJVCgzMSkKKyNkZWZpbmUgVjNEX1BURV9XUklURUFCTEUgQklUKDI5 KQorI2RlZmluZSBWM0RfUFRFX1ZBTElEIEJJVCgyOCkKKworc3RhdGljIGludCB2M2RfbW11X2Zs dXNoX2FsbChzdHJ1Y3QgdjNkX2RldiAqdjNkKQoreworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1 cmUgdGhhdCBhbm90aGVyIGZsdXNoIGlzbid0IGFscmVhZHkgcnVubmluZyB3aGVuIHdlCisJICog c3RhcnQgdGhpcyBvbmUuCisJICovCisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1V X0NUTCkgJgorCQkJIFYzRF9NTVVfQ1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYgKHJldCkK KwkJZGV2X2Vycih2M2QtPmRldiwgIlRMQiBjbGVhciB3YWl0IGlkbGUgcHJlLXdhaXQgZmFpbGVk XG4iKTsKKworCVYzRF9XUklURShWM0RfTU1VX0NUTCwgVjNEX1JFQUQoVjNEX01NVV9DVEwpIHwK KwkJICBWM0RfTU1VX0NUTF9UTEJfQ0xFQVIpOworCisJVjNEX1dSSVRFKFYzRF9NTVVDX0NPTlRS T0wsCisJCSAgVjNEX01NVUNfQ09OVFJPTF9GTFVTSCB8CisJCSAgVjNEX01NVUNfQ09OVFJPTF9F TkFCTEUpOworCisJcmV0ID0gd2FpdF9mb3IoIShWM0RfUkVBRChWM0RfTU1VX0NUTCkgJgorCQkJ IFYzRF9NTVVfQ1RMX1RMQl9DTEVBUklORyksIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KHYzZC0+ZGV2LCAiVExCIGNsZWFyIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldCA9IHdhaXRfZm9yKCEoVjNEX1JFQUQoVjNEX01NVUNfQ09OVFJPTCkgJgor CQkJIFYzRF9NTVVDX0NPTlRST0xfRkxVU0hJTkcpLCAxMDApOworCWlmIChyZXQpCisJCWRldl9l cnIodjNkLT5kZXYsICJNTVVDIGZsdXNoIHdhaXQgaWRsZSBmYWlsZWRcbiIpOworCisJcmV0dXJu IHJldDsKK30KKworaW50IHYzZF9tbXVfc2V0X3BhZ2VfdGFibGUoc3RydWN0IHYzZF9kZXYgKnYz ZCkKK3sKKwlWM0RfV1JJVEUoVjNEX01NVV9QVF9QQV9CQVNFLCB2M2QtPnB0X3BhZGRyID4+IFYz RF9NTVVfUEFHRV9TSElGVCk7CisJVjNEX1dSSVRFKFYzRF9NTVVfQ1RMLAorCQkgIFYzRF9NTVVf Q1RMX0VOQUJMRSB8CisJCSAgVjNEX01NVV9DVExfUFRfSU5WQUxJRCB8CisJCSAgVjNEX01NVV9D VExfUFRfSU5WQUxJRF9BQk9SVCB8CisJCSAgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0FC T1JUIHwKKwkJICBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURfQUJPUlQpOworCVYzRF9XUklURShW M0RfTU1VX0lMTEVHQUxfQUREUiwKKwkJICAodjNkLT5tbXVfc2NyYXRjaF9wYWRkciA+PiBWM0Rf TU1VX1BBR0VfU0hJRlQpIHwKKwkJICBWM0RfTU1VX0lMTEVHQUxfQUREUl9FTkFCTEUpOworCVYz RF9XUklURShWM0RfTU1VQ19DT05UUk9MLCBWM0RfTU1VQ19DT05UUk9MX0VOQUJMRSk7CisKKwly ZXR1cm4gdjNkX21tdV9mbHVzaF9hbGwodjNkKTsKK30KKwordm9pZCB2M2RfbW11X2luc2VydF9w dGVzKHN0cnVjdCB2M2RfYm8gKmJvKQoreworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2Rf ZGV2KGJvLT5iYXNlLmRldik7CisJdTMyIHBhZ2UgPSBiby0+bm9kZS5zdGFydDsKKwl1MzIgcGFn ZV9wcm90ID0gVjNEX1BURV9XUklURUFCTEUgfCBWM0RfUFRFX1ZBTElEOworCXVuc2lnbmVkIGlu dCBjb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKKworCWZvcl9lYWNoX3NnKGJvLT5z Z3QtPnNnbCwgc2dsLCBiby0+c2d0LT5uZW50cywgY291bnQpIHsKKwkJdTMyIHBhZ2VfYWRkcmVz cyA9IHNnX2RtYV9hZGRyZXNzKHNnbCkgPj4gVjNEX01NVV9QQUdFX1NISUZUOworCQl1MzIgcHRl ID0gcGFnZV9wcm90IHwgcGFnZV9hZGRyZXNzOworCQl1MzIgaTsKKworCQlCVUdfT04ocGFnZV9h ZGRyZXNzICsgKHNnX2RtYV9sZW4oc2dsKSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpID49CisJCSAg ICAgICBCSVQoMjQpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbihzZ2wpID4+IFYz RF9NTVVfUEFHRV9TSElGVDsgaSsrKQorCQkJdjNkLT5wdFtwYWdlKytdID0gcHRlICsgaTsKKwl9 CisKKwlXQVJOX09OX09OQ0UocGFnZSAtIGJvLT5ub2RlLnN0YXJ0ICE9CisJCSAgICAgYm8tPmJh c2Uuc2l6ZSA+PiBWM0RfTU1VX1BBR0VfU0hJRlQpOworCisJaWYgKHYzZF9tbXVfZmx1c2hfYWxs KHYzZCkpCisJCWRldl9lcnIodjNkLT5kZXYsICJNTVUgZmx1c2ggdGltZW91dFxuIik7Cit9CisK K3ZvaWQgdjNkX21tdV9yZW1vdmVfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKK3sKKwlzdHJ1Y3Qg djNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihiby0+YmFzZS5kZXYpOworCXUzMiBucGFnZXMgPSBi by0+YmFzZS5zaXplID4+IFYzRF9NTVVfUEFHRV9TSElGVDsKKwl1MzIgcGFnZTsKKworCWZvciAo cGFnZSA9IGJvLT5ub2RlLnN0YXJ0OyBwYWdlIDwgYm8tPm5vZGUuc3RhcnQgKyBucGFnZXM7IHBh Z2UrKykKKwkJdjNkLT5wdFtwYWdlXSA9IDA7CisKKwlpZiAodjNkX21tdV9mbHVzaF9hbGwodjNk KSkKKwkJZGV2X2Vycih2M2QtPmRldiwgIk1NVSBmbHVzaCB0aW1lb3V0XG4iKTsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS92 M2QvdjNkX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZj MTMyODJkZmMyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3Jl Z3MuaApAQCAtMCwwICsxLDI5NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBCcm9hZGNvbSAqLworCisjaWZuZGVmIFYz RF9SRUdTX0gKKyNkZWZpbmUgVjNEX1JFR1NfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+ CisKKyNkZWZpbmUgVjNEX01BU0soaGlnaCwgbG93KSAoKHUzMilHRU5NQVNLKGhpZ2gsIGxvdykp CisvKiBVc2luZyB0aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAqLworI2Rl ZmluZSBWM0RfU0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQl1 MzIgZmllbGR2YWwgPSAodmFsdWUpIDw8IGZpZWxkIyNfU0hJRlQ7CQlcCisJCVdBUk5fT04oKGZp ZWxkdmFsICYgfmZpZWxkIyNfTUFTSykgIT0gMCk7CQlcCisJCWZpZWxkdmFsICYgZmllbGQjI19N QVNLOwkJCQlcCisJIH0pCisKKyNkZWZpbmUgVjNEX0dFVF9GSUVMRCh3b3JkLCBmaWVsZCkgKCgo d29yZCkgJiBmaWVsZCMjX01BU0spID4+CQlcCisJCQkJICAgIGZpZWxkIyNfU0hJRlQpCisKKy8q IEh1YiByZWdpc3RlcnMgZm9yIHNoYXJlZCBoYXJkd2FyZSBiZXR3ZWVuIFYzRCBjb3Jlcy4gKi8K KworI2RlZmluZSBWM0RfSFVCX0FYSUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAKKyMgZGVmaW5lIFYzRF9IVUJfQVhJQ0ZHX01BWF9MRU5fTUFTSyAgICAgICAgICAg ICAgICAgICBWM0RfTUFTSygzLCAwKQorIyBkZWZpbmUgVjNEX0hVQl9BWElDRkdfTUFYX0xFTl9T SElGVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVjNEX0hVQl9VSUZDRkcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0CisjZGVmaW5lIFYzRF9IVUJfSURFTlQwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOAorCisjZGVmaW5lIFYzRF9IVUJf SURFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBkZWZpbmUg VjNEX0hVQl9JREVOVDFfV0lUSF9NU08gICAgICAgICAgICAgICAgICAgICAgIEJJVCgxOSkKKyMg ZGVmaW5lIFYzRF9IVUJfSURFTlQxX1dJVEhfVFNZICAgICAgICAgICAgICAgICAgICAgICBCSVQo MTgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9XSVRIX1RGVSAgICAgICAgICAgICAgICAgICAg ICAgQklUKDE3KQorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDFfV0lUSF9MM0MgICAgICAgICAgICAg ICAgICAgICAgIEJJVCgxNikKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX05IT1NUU19NQVNLICAg ICAgICAgICAgICAgICAgICBWM0RfTUFTSygxNSwgMTIpCisjIGRlZmluZSBWM0RfSFVCX0lERU5U MV9OSE9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIKKyMgZGVmaW5lIFYzRF9IVUJfSURF TlQxX05DT1JFU19NQVNLICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwgOCkKKyMgZGVm aW5lIFYzRF9IVUJfSURFTlQxX05DT1JFU19TSElGVCAgICAgICAgICAgICAgICAgICA4CisjIGRl ZmluZSBWM0RfSFVCX0lERU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgVjNEX01B U0soNywgNCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAg ICAgICAgICA0CisjIGRlZmluZSBWM0RfSFVCX0lERU5UMV9UVkVSX01BU0sgICAgICAgICAgICAg ICAgICAgICAgVjNEX01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9IVUJfSURFTlQxX1RWRVJfU0hJ RlQgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0hVQl9JREVOVDIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwCisjIGRlZmluZSBWM0RfSFVCX0lERU5U Ml9XSVRIX01NVSAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBWM0RfSFVC X0lERU5UMl9MM0NfTktCX01BU0sgICAgICAgICAgICAgICAgICAgVjNEX01BU0soNywgMCkKKyMg ZGVmaW5lIFYzRF9IVUJfSURFTlQyX0wzQ19OS0JfU0hJRlQgICAgICAgICAgICAgICAgICAwCisK KyNkZWZpbmUgVjNEX0hVQl9JREVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDE0CisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9NQVNLICAgICAgICAgICAgICAg ICAgICAgVjNEX01BU0soMTUsIDgpCisjIGRlZmluZSBWM0RfSFVCX0lERU5UM19JUFJFVl9TSElG VCAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0hVQl9JREVOVDNfSVBJRFhfTUFT SyAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDApCisjIGRlZmluZSBWM0RfSFVCX0lE RU5UM19JUElEWF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIFYzRF9IVUJf SU5UX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1MAorI2RlZmluZSBW M0RfSFVCX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTQKKyNk ZWZpbmUgVjNEX0hVQl9JTlRfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDU4CisjZGVmaW5lIFYzRF9IVUJfSU5UX01TS19TVFMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDA1YworI2RlZmluZSBWM0RfSFVCX0lOVF9NU0tfU0VUICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwNjAKKyNkZWZpbmUgVjNEX0hVQl9JTlRfTVNLX0NMUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDY0CisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVfV1JWICAg ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDUpCisjIGRlZmluZSBWM0RfSFVCX0lOVF9NTVVf UFRJICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBWM0RfSFVCX0lO VF9NTVVfQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmluZSBWM0Rf SFVCX0lOVF9NU08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRlZmlu ZSBWM0RfSFVCX0lOVF9URlVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisj IGRlZmluZSBWM0RfSFVCX0lOVF9URlVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklU KDApCisKKyNkZWZpbmUgVjNEX0dDQV9DQUNIRV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDBjCisjIGRlZmluZSBWM0RfR0NBX0NBQ0hFX0NUUkxfRkxVU0ggICAgICAgICAg ICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9TQUZFX1NIVVRET1dOICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMGIwCisjIGRlZmluZSBWM0RfR0NBX1NBRkVfU0hVVERP V05fRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dDQV9TQUZF X1NIVVRET1dOX0FDSyAgICAgICAgICAgICAgICAgICAgICAweDAwMGI0CisjIGRlZmluZSBWM0Rf R0NBX1NBRkVfU0hVVERPV05fQUNLX0FDS0VEICAgICAgICAgICAgICAgMworCisjIGRlZmluZSBW M0RfVE9QX0dSX0JSSURHRV9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMAorIyBk ZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1JfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9N QVNLKDE1LCA4KQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUFKT1JfU0hJRlQgICAgICAg ICAgICAgICAgIDgKKyMgZGVmaW5lIFYzRF9UT1BfR1JfQlJJREdFX01JTk9SX01BU0sgICAgICAg ICAgICAgICAgICBWM0RfTUFTSyg3LCAwKQorIyBkZWZpbmUgVjNEX1RPUF9HUl9CUklER0VfTUlO T1JfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworLyogNzI2OCByZXNldCByZWcgKi8KKyMgZGVm aW5lIFYzRF9UT1BfR1JfQlJJREdFX1NXX0lOSVRfMCAgICAgICAgICAgICAgICAgICAweDAwMDA4 CisjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURHRV9TV19JTklUXzBfVjNEX0NMS18xMDhfU1dfSU5J VCBCSVQoMCkKKy8qIDcyNzggcmVzZXQgcmVnICovCisjIGRlZmluZSBWM0RfVE9QX0dSX0JSSURH RV9TV19JTklUXzEgICAgICAgICAgICAgICAgICAgMHgwMDAwYworIyBkZWZpbmUgVjNEX1RPUF9H Ul9CUklER0VfU1dfSU5JVF8xX1YzRF9DTEtfMTA4X1NXX0lOSVQgQklUKDApCisKKy8qIFBlci1N TVUgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lIFYzRF9NTVVDX0NPTlRST0wgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMTAwMAorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJPTF9DTEVB UiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX01NVUNfQ09OVFJP TF9GTFVTSElORyAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZpbmUgVjNEX01NVUNf Q09OVFJPTF9GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorIyBkZWZpbmUgVjNE X01NVUNfQ09OVFJPTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQorCisjZGVm aW5lIFYzRF9NTVVfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIw MAorIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVEICAgICAgICAgICAgICAgICAgICAg IEJJVCgyNykKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX0NBUF9FWENFRURFRF9BQk9SVCAgICAgICAg ICAgICAgICBCSVQoMjYpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9DQVBfRVhDRUVERURfSU5UICAg ICAgICAgICAgICAgICAgQklUKDI1KQorIyBkZWZpbmUgVjNEX01NVV9DVExfQ0FQX0VYQ0VFREVE X0VYQ0VQVElPTiAgICAgICAgICAgIEJJVCgyNCkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1BUX0lO VkFMSUQgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMjApCisjIGRlZmluZSBWM0RfTU1VX0NU TF9QVF9JTlZBTElEX0FCT1JUICAgICAgICAgICAgICAgICAgQklUKDE5KQorIyBkZWZpbmUgVjNE X01NVV9DVExfUFRfSU5WQUxJRF9JTlQgICAgICAgICAgICAgICAgICAgIEJJVCgxOCkKKyMgZGVm aW5lIFYzRF9NTVVfQ1RMX1BUX0lOVkFMSURfRVhDRVBUSU9OICAgICAgICAgICAgICBCSVQoMTcp CisjIGRlZmluZSBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJT04gICAgICAgICAgICAgICAgICAg QklUKDE2KQorIyBkZWZpbmUgVjNEX01NVV9DVExfV1JJVEVfVklPTEFUSU9OX0FCT1JUICAgICAg ICAgICAgIEJJVCgxMSkKKyMgZGVmaW5lIFYzRF9NTVVfQ1RMX1dSSVRFX1ZJT0xBVElPTl9JTlQg ICAgICAgICAgICAgICBCSVQoMTApCisjIGRlZmluZSBWM0RfTU1VX0NUTF9XUklURV9WSU9MQVRJ T05fRVhDRVBUSU9OICAgICAgICAgQklUKDkpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9UTEJfQ0xF QVJJTkcgICAgICAgICAgICAgICAgICAgICAgQklUKDcpCisjIGRlZmluZSBWM0RfTU1VX0NUTF9U TEJfU1RBVFNfQ0xFQVIgICAgICAgICAgICAgICAgICAgQklUKDMpCisjIGRlZmluZSBWM0RfTU1V X0NUTF9UTEJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRlZmluZSBW M0RfTU1VX0NUTF9UTEJfU1RBVFNfRU5BQkxFICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRl ZmluZSBWM0RfTU1VX0NUTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDAp CisKKyNkZWZpbmUgVjNEX01NVV9QVF9QQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMjA0CisjZGVmaW5lIFYzRF9NTVVfSElUICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMTIwOAorI2RlZmluZSBWM0RfTU1VX01JU1NFUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDEyMGMKKyNkZWZpbmUgVjNEX01NVV9TVEFMTFMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAxMjEwCisKKyNkZWZpbmUgVjNEX01NVV9BRERSX0NB UCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMjE0CisjIGRlZmluZSBWM0RfTU1V X0FERFJfQ0FQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQorIyBkZWZpbmUg VjNEX01NVV9BRERSX0NBUF9NUEFHRV9NQVNLICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDEx LCAwKQorIyBkZWZpbmUgVjNEX01NVV9BRERSX0NBUF9NUEFHRV9TSElGVCAgICAgICAgICAgICAg ICAgIDAKKworI2RlZmluZSBWM0RfTU1VX1NIT09UX0RPV04gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDEyMTgKKyMgZGVmaW5lIFYzRF9NTVVfU0hPT1RfRE9XTl9TSE9PVElORyAgICAg ICAgICAgICAgICAgICBCSVQoMjkpCisjIGRlZmluZSBWM0RfTU1VX1NIT09UX0RPV05fU0hPT1Qg ICAgICAgICAgICAgICAgICAgICAgQklUKDI4KQorIyBkZWZpbmUgVjNEX01NVV9TSE9PVF9ET1dO X1BBR0VfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDI3LCAwKQorIyBkZWZpbmUgVjNE X01NVV9TSE9PVF9ET1dOX1BBR0VfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBW M0RfTU1VX0JZUEFTU19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMWMKKyNk ZWZpbmUgVjNEX01NVV9CWVBBU1NfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAx MjIwCisKKy8qIEFYSSBJRCBvZiB0aGUgYWNjZXNzIHRoYXQgZmF1bHRlZCAqLworI2RlZmluZSBW M0RfTU1VX1ZJT19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMmMKKwor LyogQWRkcmVzcyBmb3IgaWxsZWdhbCBQVEVzIHRvIHJldHVybiAqLworI2RlZmluZSBWM0RfTU1V X0lMTEVHQUxfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEyMzAKKyMgZGVmaW5l IFYzRF9NTVVfSUxMRUdBTF9BRERSX0VOQUJMRSAgICAgICAgICAgICAgICAgICBCSVQoMzEpCisK Ky8qIEFkZHJlc3MgdGhhdCBmYXVsdGVkICovCisjZGVmaW5lIFYzRF9NTVVfVklPX0FERFIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIzNAorCisvKiBQZXItVjNELWNvcmUgcmVn aXN0ZXJzICovCisKKyNkZWZpbmUgVjNEX0NUTF9JREVOVDAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAwCisjIGRlZmluZSBWM0RfSURFTlQwX1ZFUl9NQVNLICAgICAgICAg ICAgICAgICAgICAgICAgICAgVjNEX01BU0soMzEsIDI0KQorIyBkZWZpbmUgVjNEX0lERU5UMF9W RVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgVjNEX0NUTF9J REVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0CisvKiBNdWx0aXBs ZXMgb2YgMWtiICovCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAgICAgICAg ICAgICAgICAgICAgVjNEX01BU0soMzEsIDI4KQorIyBkZWZpbmUgVjNEX0lERU5UMV9WUE1fU0la RV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDI4CisjIGRlZmluZSBWM0RfSURFTlQxX05TRU1f TUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMjMsIDE2KQorIyBkZWZpbmUg VjNEX0lERU5UMV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjIGRlZmlu ZSBWM0RfSURFTlQxX05UTVVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0so MTUsIDEyKQorIyBkZWZpbmUgVjNEX0lERU5UMV9OVE1VX1NISUZUICAgICAgICAgICAgICAgICAg ICAgICAgIDEyCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgICAgVjNEX01BU0soMTEsIDgpCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfU0hJRlQg ICAgICAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xDX01BU0sg ICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDcsIDQpCisjIGRlZmluZSBWM0RfSURF TlQxX05TTENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUgVjNEX0lE RU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYzRF9NQVNLKDMsIDApCisj IGRlZmluZSBWM0RfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAor CisjZGVmaW5lIFYzRF9DVExfSURFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAwOAorIyBkZWZpbmUgVjNEX0lERU5UMl9CQ0dfSU5UICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgyOCkKKworI2RlZmluZSBWM0RfQ1RMX01JU0NDRkcgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMTgKKyMgZGVmaW5lIFYzRF9NSVNDQ0ZHX09WUlRNVU9VVCAg ICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKKworI2RlZmluZSBWM0RfQ1RMX0wyQ0FDVEwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAKKyMgZGVmaW5lIFYzRF9MMkNB Q1RMX0wyQ0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikKKyMgZGVmaW5lIFYz RF9MMkNBQ1RMX0wyQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMSkKKyMgZGVm aW5lIFYzRF9MMkNBQ1RMX0wyQ0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkK KworI2RlZmluZSBWM0RfQ1RMX1NMQ0FDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1RWQ0NTX01BU0sgICAgICAgICAgICAgICAg ICAgICAgICBWM0RfTUFTSygyNywgMjQpCisjIGRlZmluZSBWM0RfU0xDQUNUTF9UVkNDU19TSElG VCAgICAgICAgICAgICAgICAgICAgICAgMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1REQ0NTX01B U0sgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxOSwgMTYpCisjIGRlZmluZSBWM0Rf U0xDQUNUTF9URENDU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTYKKyMgZGVmaW5lIFYz RF9TTENBQ1RMX1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWM0RfTUFTSygxMSwg OCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAg ICA4CisjIGRlZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg ICAgVjNEX01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19TSElGVCAgICAgICAg ICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0NUTF9MMlRDQUNUTCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDMwCisjIGRlZmluZSBWM0RfTDJUQ0FDVExfVE1VV0NG ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjIGRlZmluZSBWM0RfTDJUQ0FDVExf TDJUX05PX1dNICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpCisjIGRlZmluZSBWM0RfTDJU Q0FDVExfRkxNX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgMAorIyBkZWZpbmUgVjNEX0wy VENBQ1RMX0ZMTV9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5lIFYzRF9M MlRDQUNUTF9GTE1fQ0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAyCisjIGRlZmluZSBWM0Rf TDJUQ0FDVExfRkxNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgVjNEX01BU0soMiwgMSkK KyMgZGVmaW5lIFYzRF9MMlRDQUNUTF9GTE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAx CisjIGRlZmluZSBWM0RfTDJUQ0FDVExfTDJURkxTICAgICAgICAgICAgICAgICAgICAgICAgICAg QklUKDApCisjZGVmaW5lIFYzRF9DVExfTDJURkxTVEEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAzNAorI2RlZmluZSBWM0RfQ1RMX0wyVEZMRU5EICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAwMzgKKworI2RlZmluZSBWM0RfQ1RMX0lOVF9TVFMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTAKKyNkZWZpbmUgVjNEX0NUTF9JTlRfU0VUICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDU0CisjZGVmaW5lIFYzRF9DVExfSU5U X0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1OAorI2RlZmluZSBWM0Rf Q1RMX0lOVF9NU0tfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNWMKKyNkZWZp bmUgVjNEX0NUTF9JTlRfTVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYw CisjZGVmaW5lIFYzRF9DVExfSU5UX01TS19DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDA2NAorIyBkZWZpbmUgVjNEX0lOVF9RUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFYzRF9NQVNLKDI3LCAxNikKKyMgZGVmaW5lIFYzRF9JTlRfUVBVX1NISUZUICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0lOVF9HTVBWICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0lOVF9UUkZCICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUgVjNEX0lOVF9T UElMTFVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNE X0lOVF9PVVRPTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBkZWZp bmUgVjNEX0lOVF9GTERPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQor IyBkZWZpbmUgVjNEX0lOVF9GUkRPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJ VCgwKQorCisjZGVmaW5lIFYzRF9DTEVfQ1QwQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDEwMAorI2RlZmluZSBWM0RfQ0xFX0NUMUNTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAxMDQKKyNkZWZpbmUgVjNEX0NMRV9DVE5DUyhuKSAoVjNEX0NMRV9D VDBDUyArIDQgKiBuKQorI2RlZmluZSBWM0RfQ0xFX0NUMEVBICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAxMDgKKyNkZWZpbmUgVjNEX0NMRV9DVDFFQSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMTBjCisjZGVmaW5lIFYzRF9DTEVfQ1RORUEobikgKFYz RF9DTEVfQ1QwRUEgKyA0ICogbikKKyNkZWZpbmUgVjNEX0NMRV9DVDBDQSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMTEwCisjZGVmaW5lIFYzRF9DTEVfQ1QxQ0EgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExNAorI2RlZmluZSBWM0RfQ0xFX0NUTkNB KG4pIChWM0RfQ0xFX0NUMENBICsgNCAqIG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUkEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExOAorI2RlZmluZSBWM0RfQ0xFX0NUMVJB ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMWMKKyNkZWZpbmUgVjNEX0NM RV9DVDBMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTIwCisjZGVmaW5l IFYzRF9DTEVfQ1QxTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEyNAor I2RlZmluZSBWM0RfQ0xFX0NUMFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAxMjgKKyNkZWZpbmUgVjNEX0NMRV9DVDFQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMTJjCisjZGVmaW5lIFYzRF9DTEVfUENTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDEzMAorI2RlZmluZSBWM0RfQ0xFX0JGQyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAxMzQKKyNkZWZpbmUgVjNEX0NMRV9SRkMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTM4CisjZGVmaW5lIFYzRF9DTEVfVEZCQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzYworI2RlZmluZSBWM0RfQ0xF X1RGSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAKKyNkZWZpbmUg VjNEX0NMRV9DVDFDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQ0Cisj ZGVmaW5lIFYzRF9DTEVfQ1QxVElMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDE0OAorI2RlZmluZSBWM0RfQ0xFX0NUMVRTS0lQICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxNGMKKyNkZWZpbmUgVjNEX0NMRV9DVDFQVENUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMTUwCisjZGVmaW5lIFYzRF9DTEVfQ1QwU1lOQyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDE1NAorI2RlZmluZSBWM0RfQ0xFX0NUMVNZTkMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTgKKyNkZWZpbmUgVjNEX0NMRV9DVDBRVFMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTVjCisjIGRlZmluZSBWM0RfQ0xF X0NUMFFUU19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFYz RF9DTEVfQ1QwUUJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2MAorI2Rl ZmluZSBWM0RfQ0xFX0NUMVFCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx NjQKKyNkZWZpbmUgVjNEX0NMRV9DVE5RQkEobikgKFYzRF9DTEVfQ1QwUUJBICsgNCAqIG4pCisj ZGVmaW5lIFYzRF9DTEVfQ1QwUUVBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDE2OAorI2RlZmluZSBWM0RfQ0xFX0NUMVFFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAxNmMKKyNkZWZpbmUgVjNEX0NMRV9DVE5RRUEobikgKFYzRF9DTEVfQ1QwUUVBICsg NCAqIG4pCisjZGVmaW5lIFYzRF9DTEVfQ1QwUU1BICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDE3MAorI2RlZmluZSBWM0RfQ0xFX0NUMFFNUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MDAxNzQKKyNkZWZpbmUgVjNEX0NMRV9DVDFRQ0ZHICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMTc4CisvKiBJZiBzZXQgd2l0aG91dCBFVFBST0MsIGVu dGlyZWx5IHNraXAgdGlsZXMgd2l0aCBubyBwcmltaXRpdmVzLiAqLworIyBkZWZpbmUgVjNEX0NM RV9RQ0ZHX0VURklMVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg3KQorLyogSWYgc2V0 IHdpdGggRVRGSUxULCBqdXN0IHdyaXRlIHRoZSBjbGVhciBjb2xvciB0byB0aWxlcyB3aXRoIG5v CisgKiBwcmltaXRpdmVzLgorICovCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRQUk9DICAgICAg ICAgICAgICAgICAgICAgICAgICAgQklUKDYpCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdfRVRTRkxV U0ggICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfQ0xFX1FDRkdf TUNESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX1BU Ql9CUENBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwCisjZGVmaW5l IFYzRF9QVEJfQlBDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwNAor I2RlZmluZSBWM0RfUFRCX0JQT0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAzMDgKKyNkZWZpbmUgVjNEX1BUQl9CUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMzBjCisKKyNkZWZpbmUgVjNEX1BUQl9CWENGICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMzEwCisjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfUldPUkRFUkRJU0Eg ICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfUFRCX0JYQ0ZfQ0xJUERJ U0EgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dNUF9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwCisjIGRlZmluZSBWM0Rf R01QX1NUQVRVU19HTVBSU1QgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMxKQorIyBkZWZp bmUgVjNEX0dNUF9TVEFUVVNfV1JfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgIFYzRF9NQVNL KDMwLCAyNCkKKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1dSX0NPVU5UX1NISUZUICAgICAgICAg ICAgICAgICAyNAorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfUkRfQ09VTlRfTUFTSyAgICAgICAg ICAgICAgICAgIFYzRF9NQVNLKDIyLCAxNikKKyMgZGVmaW5lIFYzRF9HTVBfU1RBVFVTX1JEX0NP VU5UX1NISUZUICAgICAgICAgICAgICAgICAxNgorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfV1Jf QUNUSVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorIyBkZWZpbmUgVjNEX0dNUF9TVEFU VVNfUkRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQorIyBkZWZpbmUgVjNEX0dN UF9TVEFUVVNfQ0ZHX0JVU1kgICAgICAgICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUg VjNEX0dNUF9TVEFUVVNfQ05UT1ZGICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQorIyBk ZWZpbmUgVjNEX0dNUF9TVEFUVVNfSU5WUFJPVCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgx KQorIyBkZWZpbmUgVjNEX0dNUF9TVEFUVVNfVklPICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJJVCgwKQorCisjZGVmaW5lIFYzRF9HTVBfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDgwNAorIyBkZWZpbmUgVjNEX0dNUF9DRkdfTEJVUlNURU4gICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgzKQorIyBkZWZpbmUgVjNEX0dNUF9DRkdfUEdDUlNFTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJJVCgpCisjIGRlZmluZSBWM0RfR01QX0NGR19TVE9QX1JF USAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfR01QX0NGR19Q Uk9UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0dN UF9WSU9fQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODA4CisjZGVmaW5l IFYzRF9HTVBfVklPX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwYwor I2RlZmluZSBWM0RfR01QX1RBQkxFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDA4MTAKKyNkZWZpbmUgVjNEX0dNUF9DTEVBUl9MT0FEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwODE0CisjZGVmaW5lIFYzRF9HTVBfUFJFU0VSVkVfTE9BRCAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDgxOAorI2RlZmluZSBWM0RfR01QX1ZBTElEX0xJTkVTICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDA4MjAKKworI2VuZGlmIC8qIFYzRF9SRUdTX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMgYi9kcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uNmM2OGIzY2U0NWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92 M2Rfc2NoZWQuYwpAQCAtMCwwICsxLDIzMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTggQnJvYWRjb20gKi8KKworLyoqCisgKiBE T0M6IEJyb2FkY29tIFYzRCBzY2hlZHVsaW5nCisgKgorICogVGhlIHNoYXJlZCBEUk0gR1BVIHNj aGVkdWxlciBpcyB1c2VkIHRvIGNvb3JkaW5hdGUgc3VibWl0dGluZyBqb2JzCisgKiB0byB0aGUg aGFyZHdhcmUuICBFYWNoIERSTSBmZCAocm91Z2hseSBhIGNsaWVudCBwcm9jZXNzKSBnZXRzIGl0 cworICogb3duIHNjaGVkdWxlciBlbnRpdHksIHdoaWNoIHdpbGwgcHJvY2VzcyBqb2JzIGluIG9y ZGVyLiAgVGhlIEdQVQorICogc2NoZWR1bGVyIHdpbGwgcm91bmQtcm9iaW4gYmV0d2VlbiBjbGll bnRzIHRvIHN1Ym1pdCB0aGUgbmV4dCBqb2IuCisgKgorICogRm9yIHNpbXBsaWNpdHksIGFuZCBp biBvcmRlciB0byBrZWVwIGxhdGVuY3kgbG93IGZvciBpbnRlcmFjdGl2ZQorICogam9icyB3aGVu IGJ1bGsgYmFja2dyb3VuZCBqb2JzIGFyZSBxdWV1ZWQgdXAsIHdlIHN1Ym1pdCBhIG5ldyBqb2IK KyAqIHRvIHRoZSBIVyBvbmx5IHdoZW4gaXQgaGFzIGNvbXBsZXRlZCB0aGUgbGFzdCBvbmUsIGlu c3RlYWQgb2YKKyAqIGZpbGxpbmcgdXAgdGhlIENUWzAxXVEgRklGT3Mgd2l0aCBqb2JzLiAgU2lt aWxhcmx5LCB3ZSB1c2UKKyAqIHYzZF9qb2JfZGVwZW5kZW5jeSgpIHRvIG1hbmFnZSB0aGUgZGVw ZW5kZW5jeSBiZXR3ZWVuIGJpbiBhbmQKKyAqIHJlbmRlciwgaW5zdGVhZCBvZiBoYXZpbmcgdGhl IGNsaWVudHMgc3VibWl0IGpvYnMgd2l0aCB1c2luZyB0aGUKKyAqIEhXJ3Mgc2VtYXBob3JlcyB0 byBpbnRlcmxvY2sgYmV0d2VlbiB0aGVtLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+CisKKyNpbmNsdWRlICJ2M2RfZHJ2LmgiCisjaW5jbHVkZSAidjNkX3JlZ3MuaCIKKyNpbmNs dWRlICJ2M2RfdHJhY2UuaCIKKworc3RhdGljIHN0cnVjdCB2M2Rfam9iICoKK3RvX3YzZF9qb2Io c3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KHNjaGVkX2pvYiwgc3RydWN0IHYzZF9qb2IsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZAordjNk X2pvYl9mcmVlKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3RydWN0IHYz ZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKworCXYzZF9leGVjX3B1dChqb2It PmV4ZWMpOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGZlbmNlcyB0aGF0IHRoZSBiaW4gam9i IGRlcGVuZHMgb24sIG9uZSBieSBvbmUuCisgKiB2M2Rfam9iX3J1bigpIHdvbid0IGJlIGNhbGxl ZCB1bnRpbCBhbGwgb2YgdGhlbSBoYXZlIGJlZW4gc2lnbmFsZWQuCisgKi8KK3N0YXRpYyBzdHJ1 Y3QgZG1hX2ZlbmNlICoKK3YzZF9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAq c2NoZWRfam9iLAorCQkgICBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqc19lbnRpdHkpCit7CisJ c3RydWN0IHYzZF9qb2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNk X2V4ZWNfaW5mbyAqZXhlYyA9IGpvYi0+ZXhlYzsKKwllbnVtIHYzZF9xdWV1ZSBxID0gam9iID09 ICZleGVjLT5iaW4gPyBWM0RfQklOIDogVjNEX1JFTkRFUjsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZTsKKworCWZlbmNlID0gam9iLT5pbl9mZW5jZTsKKwlpZiAoZmVuY2UpIHsKKwkJam9iLT5p bl9mZW5jZSA9IE5VTEw7CisJCXJldHVybiBmZW5jZTsKKwl9CisKKwlpZiAocSA9PSBWM0RfUkVO REVSKSB7CisJCS8qIElmIHdlIGhhZCBhIGJpbiBqb2IsIHRoZSByZW5kZXIgam9iIGRlZmluaXRl bHkgZGVwZW5kcyBvbgorCQkgKiBpdC4gV2UgZmlyc3QgaGF2ZSB0byB3YWl0IGZvciBiaW4gdG8g YmUgc2NoZWR1bGVkLCBzbyB0aGF0CisJCSAqIGl0cyBkb25lX2ZlbmNlIGlzIGNyZWF0ZWQuCisJ CSAqLworCQlmZW5jZSA9IGV4ZWMtPmJpbl9kb25lX2ZlbmNlOworCQlpZiAoZmVuY2UpIHsKKwkJ CWV4ZWMtPmJpbl9kb25lX2ZlbmNlID0gTlVMTDsKKwkJCXJldHVybiBmZW5jZTsKKwkJfQorCX0K KworCS8qIFhYWDogV2FpdCBvbiBhIGZlbmNlIGZvciBzd2l0Y2hpbmcgdGhlIEdNUCBpZiBuZWNl c3NhcnksCisJICogYW5kIHRoZW4gZG8gc28uCisJICovCisKKwlyZXR1cm4gZmVuY2U7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICp2M2Rfam9iX3J1bihzdHJ1Y3QgZHJtX3NjaGVkX2pv YiAqc2NoZWRfam9iKQoreworCXN0cnVjdCB2M2Rfam9iICpqb2IgPSB0b192M2Rfam9iKHNjaGVk X2pvYik7CisJc3RydWN0IHYzZF9leGVjX2luZm8gKmV4ZWMgPSBqb2ItPmV4ZWM7CisJZW51bSB2 M2RfcXVldWUgcSA9IGpvYiA9PSAmZXhlYy0+YmluID8gVjNEX0JJTiA6IFYzRF9SRU5ERVI7CisJ c3RydWN0IHYzZF9kZXYgKnYzZCA9IGV4ZWMtPnYzZDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gdjNkLT5kcm07CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJdW5zaWduZWQgbG9uZyBp cnFmbGFnczsKKworCWlmICh1bmxpa2VseShqb2ItPmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQuZXJy b3IpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIExvY2sgcmVxdWlyZWQgYXJvdW5kIGJpbl9qb2Ig dXBkYXRlIHZzIElSUSBoYW5kbGVyJ3MKKwkgKiB2M2QtPm92ZXJmbG93X21lbSBjaGFuZ2UuCisJ ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKwlpZiAo cSA9PSBWM0RfQklOKSB7CisJCXYzZC0+YmluX2pvYiA9IGpvYi0+ZXhlYzsKKworCQlpZiAodjNk LT5vdmVyZmxvd19ibykgeworCQkJaWYgKGxpc3RfZW1wdHkoJnYzZC0+b3ZlcmZsb3dfYm8tPnVu cmVmX2hlYWQpKQorCQkJCWRybV9nZW1fb2JqZWN0X2dldCgmdjNkLT5vdmVyZmxvd19iby0+YmFz ZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmdjNkLT5vdmVyZmxvd19iby0+dW5yZWZfaGVhZCwKKwkJ CQkgICAgICAgJnYzZC0+YmluX2pvYi0+dW5yZWZfbGlzdCk7CisJCX0KKwl9IGVsc2UgeworCQl2 M2QtPnJlbmRlcl9qb2IgPSBqb2ItPmV4ZWM7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKKworCS8qIENhbiB3ZSBhdm9pZCB0aGlzIGZsdXNo IHdoZW4gcT09UkVOREVSPyAgV2UgbmVlZCB0byBiZQorCSAqIGNhcmVmdWwgb2Ygc2NoZWR1bGlu ZywgdGhvdWdoIC0tIGltYWdpbmUgam9iMCByZW5kZXJpbmcgdG8KKwkgKiB0ZXh0dXJlIGFuZCBq b2IxIHJlYWRpbmcsIGFuZCB0aGVtIGJlaW5nIGV4ZWN1dGVkIGFzIGJpbjAsCisJICogYmluMSwg cmVuZGVyMCwgcmVuZGVyMSwgc28gdGhhdCByZW5kZXIxJ3MgZmx1c2ggYXQgYmluIHRpbWUKKwkg KiB3YXNuJ3QgZW5vdWdoLgorCSAqLworCXYzZF9pbnZhbGlkYXRlX2NhY2hlcyh2M2QpOworCisJ ZmVuY2UgPSB2M2RfZmVuY2VfY3JlYXRlKHYzZCwgcSk7CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJu IGZlbmNlOworCisJaWYgKGpvYi0+ZG9uZV9mZW5jZSkKKwkJZG1hX2ZlbmNlX3B1dChqb2ItPmRv bmVfZmVuY2UpOworCWpvYi0+ZG9uZV9mZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOworCisJ dHJhY2VfdjNkX3N1Ym1pdF9jbChkZXYsIHEgPT0gVjNEX1JFTkRFUiwgdG9fdjNkX2ZlbmNlKGZl bmNlKS0+c2Vxbm8sCisJCQkgICAgam9iLT5zdGFydCwgam9iLT5lbmQpOworCisJaWYgKHEgPT0g VjNEX0JJTikgeworCQlpZiAoZXhlYy0+cW1hKSB7CisJCQlWM0RfQ09SRV9XUklURSgwLCBWM0Rf Q0xFX0NUMFFNQSwgZXhlYy0+cW1hKTsKKwkJCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1Qw UU1TLCBleGVjLT5xbXMpOworCQl9CisJCWlmIChleGVjLT5xdHMpIHsKKwkJCVYzRF9DT1JFX1dS SVRFKDAsIFYzRF9DTEVfQ1QwUVRTLAorCQkJCSAgICAgICBWM0RfQ0xFX0NUMFFUU19FTkFCTEUg fAorCQkJCSAgICAgICBleGVjLT5xdHMpOworCQl9CisJfSBlbHNlIHsKKwkJLyogWFhYOiBTZXQg dGhlIFFDRkcgKi8KKwl9CisKKwkvKiBTZXQgdGhlIGN1cnJlbnQgYW5kIGVuZCBhZGRyZXNzIG9m IHRoZSBjb250cm9sIGxpc3QuCisJICogV3JpdGluZyB0aGUgZW5kIHJlZ2lzdGVyIGlzIHdoYXQg c3RhcnRzIHRoZSBqb2IuCisJICovCisJVjNEX0NPUkVfV1JJVEUoMCwgVjNEX0NMRV9DVE5RQkEo cSksIGpvYi0+c3RhcnQpOworCVYzRF9DT1JFX1dSSVRFKDAsIFYzRF9DTEVfQ1ROUUVBKHEpLCBq b2ItPmVuZCk7CisKKwlyZXR1cm4gZmVuY2U7Cit9CisKK3N0YXRpYyB2b2lkCit2M2Rfam9iX3Rp bWVkb3V0KHN0cnVjdCBkcm1fc2NoZWRfam9iICpzY2hlZF9qb2IpCit7CisJc3RydWN0IHYzZF9q b2IgKmpvYiA9IHRvX3YzZF9qb2Ioc2NoZWRfam9iKTsKKwlzdHJ1Y3QgdjNkX2V4ZWNfaW5mbyAq ZXhlYyA9IGpvYi0+ZXhlYzsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gZXhlYy0+djNkOworCWVu dW0gdjNkX3F1ZXVlIHE7CisKKwltdXRleF9sb2NrKCZ2M2QtPnJlc2V0X2xvY2spOworCisJLyog YmxvY2sgc2NoZWR1bGVyICovCisJZm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVFVUVTOyBxKysp IHsKKwkJc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCA9ICZ2M2QtPnF1ZXVlW3FdLnNj aGVkOworCisJCWt0aHJlYWRfcGFyayhzY2hlZC0+dGhyZWFkKTsKKwkJZHJtX3NjaGVkX2h3X2pv Yl9yZXNldChzY2hlZCwgKHNjaGVkX2pvYi0+c2NoZWQgPT0gc2NoZWQgPworCQkJCQkgICAgICAg c2NoZWRfam9iIDogTlVMTCkpOworCX0KKworCS8qIGdldCB0aGUgR1BVIGJhY2sgaW50byB0aGUg aW5pdCBzdGF0ZSAqLworCXYzZF9yZXNldCh2M2QpOworCisJLyogVW5ibG9jayBzY2hlZHVsZXJz IGFuZCByZXN0YXJ0IHRoZWlyIGpvYnMuICovCisJZm9yIChxID0gMDsgcSA8IFYzRF9NQVhfUVVF VUVTOyBxKyspIHsKKwkJZHJtX3NjaGVkX2pvYl9yZWNvdmVyeSgmdjNkLT5xdWV1ZVtxXS5zY2hl ZCk7CisJCWt0aHJlYWRfdW5wYXJrKHYzZC0+cXVldWVbcV0uc2NoZWQudGhyZWFkKTsKKwl9CisK KwltdXRleF91bmxvY2soJnYzZC0+cmVzZXRfbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3NjaGVkX2JhY2tlbmRfb3BzIHYzZF9zY2hlZF9vcHMgPSB7CisJLmRlcGVuZGVuY3kg PSB2M2Rfam9iX2RlcGVuZGVuY3ksCisJLnJ1bl9qb2IgPSB2M2Rfam9iX3J1biwKKwkudGltZWRv dXRfam9iID0gdjNkX2pvYl90aW1lZG91dCwKKwkuZnJlZV9qb2IgPSB2M2Rfam9iX2ZyZWUKK307 CisKK2ludAordjNkX3NjaGVkX2luaXQoc3RydWN0IHYzZF9kZXYgKnYzZCkKK3sKKwlpbnQgaHdf am9ic19saW1pdCA9IDE7CisJaW50IGpvYl9oYW5nX2xpbWl0ID0gMDsKKwlpbnQgaGFuZ19saW1p dF9tcyA9IDUwMDsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX3NjaGVkX2luaXQoJnYzZC0+cXVl dWVbVjNEX0JJTl0uc2NoZWQsCisJCQkgICAgICZ2M2Rfc2NoZWRfb3BzLAorCQkJICAgICBod19q b2JzX2xpbWl0LCBqb2JfaGFuZ19saW1pdCwKKwkJCSAgICAgbXNlY3NfdG9famlmZmllcyhoYW5n X2xpbWl0X21zKSwKKwkJCSAgICAgInYzZF9iaW4iKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo djNkLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIGJpbiBzY2hlZHVsZXI6ICVkLiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHJtX3NjaGVkX2luaXQoJnYzZC0+cXVldWVbVjNE X1JFTkRFUl0uc2NoZWQsCisJCQkgICAgICZ2M2Rfc2NoZWRfb3BzLAorCQkJICAgICBod19qb2Jz X2xpbWl0LCBqb2JfaGFuZ19saW1pdCwKKwkJCSAgICAgbXNlY3NfdG9famlmZmllcyhoYW5nX2xp bWl0X21zKSwKKwkJCSAgICAgInYzZF9yZW5kZXIiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo djNkLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIHJlbmRlciBzY2hlZHVsZXI6ICVkLiIsCisJCQly ZXQpOworCQlkcm1fc2NoZWRfZmluaSgmdjNkLT5xdWV1ZVtWM0RfQklOXS5zY2hlZCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3YzZF9zY2hlZF9maW5pKHN0 cnVjdCB2M2RfZGV2ICp2M2QpCit7CisJZW51bSB2M2RfcXVldWUgcTsKKworCWZvciAocSA9IDA7 IHEgPCBWM0RfTUFYX1FVRVVFUzsgcSsrKQorCQlkcm1fc2NoZWRfZmluaSgmdjNkLT5xdWV1ZVtx XS5zY2hlZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFjZS5o IGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjg1ZGQzNTFlMWUwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlLmgKQEAgLTAsMCArMSw4MiBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBCcm9h ZGNvbSAqLworCisjaWYgIWRlZmluZWQoX1YzRF9UUkFDRV9IXykgfHwgZGVmaW5lZChUUkFDRV9I RUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1YzRF9UUkFDRV9IXworCisjaW5jbHVkZSA8bGlu dXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51 eC90cmFjZXBvaW50Lmg+CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lT VEVNIHYzZAorI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdjNkX3RyYWNlCisKK1RSQUNFX0VW RU5UKHYzZF9zdWJtaXRfY2wsCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IGJvb2wgaXNfcmVuZGVyLAorCQkgICAgIHVpbnQ2NF90IHNlcW5vLAorCQkgICAgIHUzMiBjdG5x YmEsIHUzMiBjdG5xZWEpLAorCSAgICBUUF9BUkdTKGRldiwgaXNfcmVuZGVyLCBzZXFubywgY3Ru cWJhLCBjdG5xZWEpLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCQkgICAgIF9fZmllbGQo dTMyLCBkZXYpCisJCQkgICAgIF9fZmllbGQoYm9vbCwgaXNfcmVuZGVyKQorCQkJICAgICBfX2Zp ZWxkKHU2NCwgc2Vxbm8pCisJCQkgICAgIF9fZmllbGQodTMyLCBjdG5xYmEpCisJCQkgICAgIF9f ZmllbGQodTMyLCBjdG5xZWEpCisJCQkgICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJ CQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OworCQkJICAgX19lbnRyeS0+ aXNfcmVuZGVyID0gaXNfcmVuZGVyOworCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKKwkJ CSAgIF9fZW50cnktPmN0bnFiYSA9IGN0bnFiYTsKKwkJCSAgIF9fZW50cnktPmN0bnFlYSA9IGN0 bnFlYTsKKwkJCSAgICksCisKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsICVzLCBzZXFubz0lbGx1 LCAweCUwOHguLjB4JTA4eCIsCisJCSAgICAgIF9fZW50cnktPmRldiwKKwkJICAgICAgX19lbnRy eS0+aXNfcmVuZGVyID8gIlJDTCIgOiAiQkNMIiwKKwkJICAgICAgX19lbnRyeS0+c2Vxbm8sCisJ CSAgICAgIF9fZW50cnktPmN0bnFiYSwKKwkJICAgICAgX19lbnRyeS0+Y3RucWVhKQorKTsKKwor VFJBQ0VfRVZFTlQodjNkX3Jlc2V0X2JlZ2luLAorCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KSwKKwkgICAgVFBfQVJHUyhkZXYpLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnko CisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCisJCQkgICAgICksCisKKwkgICAgVFBfZmFzdF9h c3NpZ24oCisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OworCQkJICAg KSwKKworCSAgICBUUF9wcmludGsoImRldj0ldSIsCisJCSAgICAgIF9fZW50cnktPmRldikKKyk7 CisKK1RSQUNFX0VWRU5UKHYzZF9yZXNldF9lbmQsCisJICAgIFRQX1BST1RPKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpLAorCSAgICBUUF9BUkdTKGRldiksCisKKwkgICAgVFBfU1RSVUNUX19lbnRy eSgKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKKwkJCSAgICAgKSwKKworCSAgICBUUF9mYXN0 X2Fzc2lnbigKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CisJCQkg ICApLAorCisJICAgIFRQX3ByaW50aygiZGV2PSV1IiwKKwkJICAgICAgX19lbnRyeS0+ZGV2KQor KTsKKworI2VuZGlmIC8qIF9WM0RfVFJBQ0VfSF8gKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUg b3V0c2lkZSBwcm90ZWN0aW9uICovCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5l IFRSQUNFX0lOQ0xVREVfUEFUSCAuCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF90cmFjZV9wb2ludHMuYyBiL2RyaXZl cnMvZ3B1L2RybS92M2QvdjNkX3RyYWNlX3BvaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uNDgyOTIyZDdjN2UxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3YzZC92M2RfdHJhY2VfcG9pbnRzLmMKQEAgLTAsMCArMSw5IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qIENvcHlyaWdodCAoQykgMjAxNSBCcm9h ZGNvbSAqLworCisjaW5jbHVkZSAidjNkX2Rydi5oIgorCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCisj ZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJ2M2RfdHJhY2UuaCIKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS92M2RfZHJtLmggYi9pbmNsdWRlL3VhcGkv ZHJtL3YzZF9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIw MWEwNzY0NWJkZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vdjNkX2RybS5o CkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxOCBCcm9hZGNv bQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisj aWZuZGVmIF9WM0RfRFJNX0hfCisjZGVmaW5lIF9WM0RfRFJNX0hfCisKKyNpbmNsdWRlICJkcm0u aCIKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisj ZGVmaW5lIERSTV9WM0RfU1VCTUlUX0NMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNk ZWZpbmUgRFJNX1YzRF9XQUlUX0JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2Rl ZmluZSBEUk1fVjNEX0NSRUFURV9CTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVm aW5lIERSTV9WM0RfTU1BUF9CTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZp bmUgRFJNX1YzRF9HRVRfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmlu ZSBEUk1fVjNEX0dFVF9CT19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDA1CisKKyNkZWZp bmUgRFJNX0lPQ1RMX1YzRF9TVUJNSVRfQ0wgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5E X0JBU0UgKyBEUk1fVjNEX1NVQk1JVF9DTCwgc3RydWN0IGRybV92M2Rfc3VibWl0X2NsKQorI2Rl ZmluZSBEUk1fSU9DVExfVjNEX1dBSVRfQk8gICAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9WM0RfV0FJVF9CTywgc3RydWN0IGRybV92M2Rfd2FpdF9ibykKKyNkZWZp bmUgRFJNX0lPQ1RMX1YzRF9DUkVBVEVfQk8gICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5E X0JBU0UgKyBEUk1fVjNEX0NSRUFURV9CTywgc3RydWN0IGRybV92M2RfY3JlYXRlX2JvKQorI2Rl ZmluZSBEUk1fSU9DVExfVjNEX01NQVBfQk8gICAgICAgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9WM0RfTU1BUF9CTywgc3RydWN0IGRybV92M2RfbW1hcF9ibykKKyNkZWZp bmUgRFJNX0lPQ1RMX1YzRF9HRVRfUEFSQU0gICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5E X0JBU0UgKyBEUk1fVjNEX0dFVF9QQVJBTSwgc3RydWN0IGRybV92M2RfZ2V0X3BhcmFtKQorI2Rl ZmluZSBEUk1fSU9DVExfVjNEX0dFVF9CT19PRkZTRVQgICAgICAgRFJNX0lPV1IoRFJNX0NPTU1B TkRfQkFTRSArIERSTV9WM0RfR0VUX0JPX09GRlNFVCwgc3RydWN0IGRybV92M2RfZ2V0X2JvX29m ZnNldCkKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3YzZF9zdWJtaXRfY2wgLSBpb2N0bCBhcmd1bWVu dCBmb3Igc3VibWl0dGluZyBjb21tYW5kcyB0byB0aGUgM0QKKyAqIGVuZ2luZS4KKyAqCisgKiBU aGlzIGFza3MgdGhlIGtlcm5lbCB0byBoYXZlIHRoZSBHUFUgZXhlY3V0ZSBhbiBvcHRpb25hbCBi aW5uZXIKKyAqIGNvbW1hbmQgbGlzdCwgYW5kIGEgcmVuZGVyIGNvbW1hbmQgbGlzdC4KKyAqLwor c3RydWN0IGRybV92M2Rfc3VibWl0X2NsIHsKKwkvKiBQb2ludGVyIHRvIHRoZSBiaW5uZXIgY29t bWFuZCBsaXN0LgorCSAqCisJICogVGhpcyBpcyB0aGUgZmlyc3Qgc2V0IG9mIGNvbW1hbmRzIGV4 ZWN1dGVkLCB3aGljaCBydW5zIHRoZQorCSAqIGNvb3JkaW5hdGUgc2hhZGVyIHRvIGRldGVybWlu ZSB3aGVyZSBwcmltaXRpdmVzIGxhbmQgb24gdGhlIHNjcmVlbiwKKwkgKiB0aGVuIHdyaXRlcyBv dXQgdGhlIHN0YXRlIHVwZGF0ZXMgYW5kIGRyYXcgY2FsbHMgbmVjZXNzYXJ5IHBlciB0aWxlCisJ ICogdG8gdGhlIHRpbGUgYWxsb2NhdGlvbiBCTy4KKwkgKi8KKwlfX3UzMiBiY2xfc3RhcnQ7CisK KwkgLyoqIEVuZCBhZGRyZXNzIG9mIHRoZSBCQ0wgKGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIEJDTCkg Ki8KKwlfX3UzMiBiY2xfZW5kOworCisJLyogT2Zmc2V0IG9mIHRoZSByZW5kZXIgY29tbWFuZCBs aXN0LgorCSAqCisJICogVGhpcyBpcyB0aGUgc2Vjb25kIHNldCBvZiBjb21tYW5kcyBleGVjdXRl ZCwgd2hpY2ggd2lsbCBlaXRoZXIKKwkgKiBleGVjdXRlIHRoZSB0aWxlcyB0aGF0IGhhdmUgYmVl biBzZXQgdXAgYnkgdGhlIEJDTCwgb3IgYSBmaXhlZCBzZXQKKwkgKiBvZiB0aWxlcyAoaW4gdGhl IGNhc2Ugb2YgUkNMLW9ubHkgYmxpdHMpLgorCSAqLworCV9fdTMyIHJjbF9zdGFydDsKKworCSAv KiogRW5kIGFkZHJlc3Mgb2YgdGhlIFJDTCAoZmlyc3QgYnl0ZSBhZnRlciB0aGUgUkNMKSAqLwor CV9fdTMyIHJjbF9lbmQ7CisKKwkvKiogQW4gb3B0aW9uYWwgc3luYyBvYmplY3QgdG8gd2FpdCBv biBiZWZvcmUgc3RhcnRpbmcgdGhlIEJDTC4gKi8KKwlfX3UzMiBpbl9zeW5jX2JjbDsKKwkvKiog QW4gb3B0aW9uYWwgc3luYyBvYmplY3QgdG8gd2FpdCBvbiBiZWZvcmUgc3RhcnRpbmcgdGhlIFJD TC4gKi8KKwlfX3UzMiBpbl9zeW5jX3JjbDsKKwkvKiogQW4gb3B0aW9uYWwgc3luYyBvYmplY3Qg dG8gcGxhY2UgdGhlIGNvbXBsZXRpb24gZmVuY2UgaW4uICovCisJX191MzIgb3V0X3N5bmM7CisK KwkvKiBPZmZzZXQgb2YgdGhlIHRpbGUgYWxsb2MgbWVtb3J5CisJICoKKwkgKiBUaGlzIGlzIG9w dGlvbmFsIG9uIFYzRCAzLjMgKHdoZXJlIHRoZSBDTCBjYW4gc2V0IHRoZSB2YWx1ZSkgYnV0CisJ ICogcmVxdWlyZWQgb24gVjNEIDQuMS4KKwkgKi8KKwlfX3UzMiBxbWE7CisKKwkvKiogU2l6ZSBv ZiB0aGUgdGlsZSBhbGxvYyBtZW1vcnkuICovCisJX191MzIgcW1zOworCisJLyoqIE9mZnNldCBv ZiB0aGUgdGlsZSBzdGF0ZSBkYXRhIGFycmF5LiAqLworCV9fdTMyIHF0czsKKworCS8qIFBvaW50 ZXIgdG8gYSB1MzIgYXJyYXkgb2YgdGhlIEJPcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBq b2IuCisJICovCisJX191NjQgYm9faGFuZGxlczsKKworCS8qIE51bWJlciBvZiBCTyBoYW5kbGVz IHBhc3NlZCBpbiAoc2l6ZSBpcyB0aGF0IHRpbWVzIDQpLiAqLworCV9fdTMyIGJvX2hhbmRsZV9j b3VudDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92M2Rfd2FpdF9ibyAtIGlvY3RsIGFyZ3Vt ZW50IGZvciB3YWl0aW5nIGZvcgorICogY29tcGxldGlvbiBvZiB0aGUgbGFzdCBEUk1fVjNEX1NV Qk1JVF9DTCBvbiBhIEJPLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSBt dWx0aXBsZSBwcm9jZXNzZXMgbWlnaHQgYmUKKyAqIHJlbmRlcmluZyB0byBhIEJPIGFuZCB5b3Ug d2FudCB0byB3YWl0IGZvciBhbGwgcmVuZGVyaW5nIHRvIGJlCisgKiBjb21wbGV0ZWQuCisgKi8K K3N0cnVjdCBkcm1fdjNkX3dhaXRfYm8geworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CisJ X191NjQgdGltZW91dF9uczsKK307CisKKy8qKgorICogc3RydWN0IGRybV92M2RfY3JlYXRlX2Jv IC0gaW9jdGwgYXJndW1lbnQgZm9yIGNyZWF0aW5nIFYzRCBCT3MuCisgKgorICogVGhlcmUgYXJl IGN1cnJlbnRseSBubyB2YWx1ZXMgZm9yIHRoZSBmbGFncyBhcmd1bWVudCwgYnV0IGl0IG1heSBi ZQorICogdXNlZCBpbiBhIGZ1dHVyZSBleHRlbnNpb24uCisgKi8KK3N0cnVjdCBkcm1fdjNkX2Ny ZWF0ZV9ibyB7CisJX191MzIgc2l6ZTsKKwlfX3UzMiBmbGFnczsKKwkvKiogUmV0dXJuZWQgR0VN IGhhbmRsZSBmb3IgdGhlIEJPLiAqLworCV9fdTMyIGhhbmRsZTsKKwkvKioKKwkgKiBSZXR1cm5l ZCBvZmZzZXQgZm9yIHRoZSBCTyBpbiB0aGUgVjNEIGFkZHJlc3Mgc3BhY2UuICBUaGlzIG9mZnNl dAorCSAqIGlzIHByaXZhdGUgdG8gdGhlIERSTSBmZCBhbmQgaXMgdmFsaWQgZm9yIHRoZSBsaWZl dGltZSBvZiB0aGUgR0VNCisJICogaGFuZGxlLgorCSAqCisJICogVGhpcyBvZmZzZXQgdmFsdWUg d2lsbCBhbHdheXMgYmUgbm9uemVybywgc2luY2UgdmFyaW91cyBIVworCSAqIHVuaXRzIHRyZWF0 IDAgc3BlY2lhbGx5LgorCSAqLworCV9fdTMyIG9mZnNldDsKK307CisKKy8qKgorICogc3RydWN0 IGRybV92M2RfbW1hcF9ibyAtIGlvY3RsIGFyZ3VtZW50IGZvciBtYXBwaW5nIFYzRCBCT3MuCisg KgorICogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IHBlcmZvcm0gYW4gbW1hcC4gIEluc3RlYWQsIGl0 IHJldHVybnMgdGhlCisgKiBvZmZzZXQgeW91IG5lZWQgdG8gdXNlIGluIGFuIG1tYXAgb24gdGhl IERSTSBkZXZpY2Ugbm9kZS4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgdG9vbHMgbGlrZSB2YWxncmlu ZCBlbmQgdXAga25vd2luZyBhYm91dCB0aGUgbWFwcGVkCisgKiBtZW1vcnkuCisgKgorICogVGhl cmUgYXJlIGN1cnJlbnRseSBubyB2YWx1ZXMgZm9yIHRoZSBmbGFncyBhcmd1bWVudCwgYnV0IGl0 IG1heSBiZQorICogdXNlZCBpbiBhIGZ1dHVyZSBleHRlbnNpb24uCisgKi8KK3N0cnVjdCBkcm1f djNkX21tYXBfYm8geworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAq LworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBmbGFnczsKKwkvKiogb2Zmc2V0IGludG8gdGhlIGRy bSBub2RlIHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwuICovCisJX191NjQgb2Zmc2V0 OworfTsKKworZW51bSBkcm1fdjNkX3BhcmFtIHsKKwlEUk1fVjNEX1BBUkFNX1YzRF9VSUZDRkcs CisJRFJNX1YzRF9QQVJBTV9WM0RfSFVCX0lERU5UMSwKKwlEUk1fVjNEX1BBUkFNX1YzRF9IVUJf SURFTlQyLAorCURSTV9WM0RfUEFSQU1fVjNEX0hVQl9JREVOVDMsCisJRFJNX1YzRF9QQVJBTV9W M0RfQ09SRTBfSURFTlQwLAorCURSTV9WM0RfUEFSQU1fVjNEX0NPUkUwX0lERU5UMSwKKwlEUk1f VjNEX1BBUkFNX1YzRF9DT1JFMF9JREVOVDIsCit9OworCitzdHJ1Y3QgZHJtX3YzZF9nZXRfcGFy YW0geworCV9fdTMyIHBhcmFtOworCV9fdTMyIHBhZDsKKwlfX3U2NCB2YWx1ZTsKK307CisKKy8q KgorICogUmV0dXJucyB0aGUgb2Zmc2V0IGZvciB0aGUgQk8gaW4gdGhlIFYzRCBhZGRyZXNzIHNw YWNlIGZvciB0aGlzIERSTSBmZC4KKyAqIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgcmV0dXJuZWQg YnkgZHJtX3YzZF9jcmVhdGVfYm8sIGlmIHRoYXQgd2FzIGNhbGxlZAorICogZnJvbSB0aGlzIERS TSBmZC4KKyAqLworc3RydWN0IGRybV92M2RfZ2V0X2JvX29mZnNldCB7CisJX191MzIgaGFuZGxl OworCV9fdTMyIG9mZnNldDsKK307CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2Vu ZGlmCisKKyNlbmRpZiAvKiBfVjNEX0RSTV9IXyAqLwotLSAKMi4xNy4wCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==