From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Tue, 18 Aug 2015 14:54:04 -0700 Message-ID: <1439934848-7196-4-git-send-email-eric@anholt.net> References: <1439934848-7196-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1439934848-7196-1-git-send-email-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 Cc: devicetree@vger.kernel.org, Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBmdWxsIFZDNCBkcml2ZXIuICBSaWdodCBub3cgdGhpcyBq dXN0IHN1cHBvcnRzCmNvbmZpZ3VyaW5nIHRoZSBkaXNwbGF5IHVzaW5nIGEgcHJlLWV4aXN0aW5n IHZpZGVvIG1vZGUgKGJlY2F1c2UKY2hhbmdpbmcgdGhlIHBpeGVsIGNsb2NrIGlzbid0IGF2YWls YWJsZSB5ZXQsIGFuZCBkb2Vzbid0IHdvcmsgd2hlbiBpdAppcykuICBIb3dldmVyLCB0aGlzIGlz IGVub3VnaCBmb3IgZmJjb24gYW5kIGJyaW5naW5nIHVwIFggdXNpbmcKeGY4Ni12aWRlby1tb2Rl c2V0dGluZy4KClNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0t LQoKdjI6IERyb3AgRkJfSEVMUEVSIHNlbGVjdCB0aGFua3MgdG8gQXJjaGl0J3MgcGF0Y2hlcy4g IERvIG1hbnVhbCBpbml0CiAgICBvcmRlcmluZyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSAubG9hZCBo b29rLiAgU3RydWN0dXJlIHJlZ2lzdHJhdGlvbgogICAgbW9yZSBsaWtlIHRlZ3JhJ3MsIGJ1dCBz dGlsbCB1c2luZyB0aGUgdHlwaWNhbCAiY29tcG9uZW50IiBjb2RlLgogICAgRHJvcCBuby1vcCBo b29rcyBmb3IgYXRvbWljX2JlZ2luIGFuZCBtb2RlX2ZpeHVwKCkgbm93IHRoYXQKICAgIHRoZXkn cmUgb3B0aW9uYWwuICBEcm9wIHNlbnRpbmVsIGluIE1ha2VmaWxlLiAgRml4IG1pbm9yIHN0eWxl CiAgICBuaXRzIEkgbm90aWNlZCBvbiBhbm90aGVyIHJlcmVhZC4KCiBkcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyAgICAgICB8ICAxMyArCiBk cml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlICAgICAgfCAgMTcgKwogZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfYm8uYyAgICAgIHwgIDUyICsrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ny dGMuYyAgICB8IDU2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgfCAgMzggKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuYyAgICAgfCAyNzEgKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfZHJ2LmggICAgIHwgMTIwICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9o ZG1pLmMgICAgfCA2MzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jICAgICB8IDE2MSArKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9rbXMuYyAgICAgfCAgODQgKysrKysKIGRyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X3BsYW5lLmMgICB8IDMyMCArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9yZWdzLmggICAgfCA1NjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAyODM5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfYm8uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rl YnVnZnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9oZG1pLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X3JlZ3MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggMDZhZTUwMC4uMTliYjBkYiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcKQEAgLTI2MCwzICsyNjAsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9zdGkvS2NvbmZp ZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZyIKIAogc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJt L3ZjNC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDg4NTg1MTAuLjI4M2VkOGUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUK QEAgLTQyLDYgKzQyLDcgQEAgb2JqLSQoQ09ORklHX0RSTV9NR0EpCSs9IG1nYS8KIG9iai0kKENP TkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KIG9iai0kKENPTkZJR19EUk1fSTkxNSkgICs9IGk5MTUv CiBvYmotJChDT05GSUdfRFJNX01HQUcyMDApICs9IG1nYWcyMDAvCitvYmotJChDT05GSUdfRFJN X1ZDNCkgICs9IHZjNC8KIG9iai0kKENPTkZJR19EUk1fQ0lSUlVTX1FFTVUpICs9IGNpcnJ1cy8K IG9iai0kKENPTkZJR19EUk1fU0lTKSAgICs9IHNpcy8KIG9iai0kKENPTkZJR19EUk1fU0FWQUdF KSs9IHNhdmFnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5lODEwZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29u ZmlnCkBAIC0wLDAgKzEsMTMgQEAKK2NvbmZpZyBEUk1fVkM0CisJdHJpc3RhdGUgIkJyb2FkY29t IFZDNCBHcmFwaGljcyIKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNMjgzNQorCWRlcGVuZHMgb24gRFJN CisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgorCWhl bHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGhhcyBh IEJyb2FkY29tCisJICBWQzQgR1BVLCBzdWNoIGFzIHRoZSBSYXNwYmVycnkgUGkgb3Igb3RoZXIg QkNNMjcwOC9CQ00yODM1LgorCisJICBUaGlzIGRyaXZlciByZXF1aXJlcyB0aGF0ICJhdm9pZF93 YXJuaW5ncz0yIiBiZSBwcmVzZW50IGluCisJICB0aGUgY29uZmlnLnR4dCBmb3IgdGhlIGZpcm13 YXJlLCB0byBrZWVwIGl0IGZyb20gc21hc2hpbmcKKwkgIG91ciBkaXNwbGF5IHNldHVwLgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiNGY5Ywot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKQEAgLTAsMCAr MSwxNyBAQAorY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KKworIyBQbGVhc2Uga2VlcCB0aGVz ZSBidWlsZCBsaXN0cyBzb3J0ZWQhCisKKyMgY29yZSBkcml2ZXIgY29kZQordmM0LXkgOj0gXAor CXZjNF9iby5vIFwKKwl2YzRfY3J0Yy5vIFwKKwl2YzRfZHJ2Lm8gXAorCXZjNF9rbXMubyBcCisJ dmM0X2hkbWkubyBcCisJdmM0X2h2cy5vIFwKKwl2YzRfcGxhbmUubworCit2YzQtJChDT05GSUdf REVCVUdfRlMpICs9IHZjNF9kZWJ1Z2ZzLm8KKworb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2 YzQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYyBiL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2JvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YWI5ZjUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMK QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgwqkgMjAxNSBCcm9hZGNvbQorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyogRE9DOiBWQzQgR0VNIEJPIG1hbmFnZW1lbnQg c3VwcG9ydC4KKyAqCisgKiBUaGUgVkM0IEdQVSBhcmNoaXRlY3R1cmUgKGJvdGggc2Nhbm91dCBh bmQgcmVuZGVyaW5nKSBoYXMgZGlyZWN0CisgKiBhY2Nlc3MgdG8gc3lzdGVtIG1lbW9yeSB3aXRo IG5vIE1NVSBpbiBiZXR3ZWVuLiAgVG8gc3VwcG9ydCBpdCwgd2UKKyAqIHVzZSB0aGUgR0VNIENN QSBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIGNvbnRpZ3VvdXMgcmFuZ2VzIG9mCisgKiBw aHlzaWNhbCBtZW1vcnkgZm9yIG91ciBCT3MuCisgKi8KKworI2luY2x1ZGUgInZjNF9kcnYuaCIK Kworc3RydWN0IHZjNF9ibyAqdmM0X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz aXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCisJ Y21hX29iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShkZXYsIHNpemUpOworCWlmIChJU19FUlIoY21h X29iaikpCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuIHRvX3ZjNF9ibygmY21hX29i ai0+YmFzZSk7Cit9CisKK2ludCB2YzRfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCisJCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgc3RydWN0IGRybV9t b2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCWludCBtaW5fcGl0Y2ggPSBESVZfUk9VTkRfVVAo YXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOworCXN0cnVjdCB2YzRfYm8gKmJvID0gTlVMTDsK KwlpbnQgcmV0OworCisJaWYgKGFyZ3MtPnBpdGNoIDwgbWluX3BpdGNoKQorCQlhcmdzLT5waXRj aCA9IG1pbl9waXRjaDsKKworCWlmIChhcmdzLT5zaXplIDwgYXJncy0+cGl0Y2ggKiBhcmdzLT5o ZWlnaHQpCisJCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKworCWJv ID0gdmM0X2JvX2NyZWF0ZShkZXYsIHJvdW5kdXAoYXJncy0+c2l6ZSwgUEFHRV9TSVpFKSk7CisJ aWYgKCFibykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVh dGUoZmlsZV9wcml2LCAmYm8tPmJhc2UuYmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmJvLT5iYXNlLmJhc2UpOworCisJcmV0dXJuIHJl dDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yYzcwZmFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Y3J0Yy5jCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEJyb2Fk Y29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKioKKyAqIERPQzogVkM0IENSVEMg bW9kdWxlCisgKgorICogSW4gVkM0LCB0aGUgUGl4ZWwgVmFsdmUgaXMgd2hhdCBtb3N0IGNsb3Nl bHkgY29ycmVzcG9uZHMgdG8gdGhlCisgKiBEUk0ncyBjb25jZXB0IG9mIGEgQ1JUQy4gIFRoZSBQ ViBnZW5lcmF0ZXMgdmlkZW8gdGltaW5ncyBmcm9tIHRoZQorICogcGl4ZWwgY2xvY2sgYW5kIGl0 cyBjb25maWd1cmF0aW9uLgorICoKKyAqIEhvd2V2ZXIsIHRoZSBEUk0gQ1JUQyBhbHNvIGNvbGxl Y3RzIHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0aGUKKyAqIERSTSBwbGFuZXMgYXR0YWNoZWQg dG8gaXQuICBBcyBhIHJlc3VsdCwgdGhpcyBmaWxlIGFsc28gbWFuYWdlcworICogc2V0dXAgb2Yg dGhlIFZDNCBIVlMncyBkaXNwbGF5IGVsZW1lbnRzIG9uIHRoZSBDUlRDLgorICovCisKKyNpbmNs dWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgor I2luY2x1ZGUgImxpbnV4L2Nsay5oIgorI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVudC5oIgorI2lu Y2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisjZGVmaW5lIENSVENf V1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHZjNF9jcnRjLT5yZWdzICsgKG9mZnNldCkp CisjZGVmaW5lIENSVENfUkVBRChvZmZzZXQpIHJlYWRsKHZjNF9jcnRjLT5yZWdzICsgKG9mZnNl dCkpCisKKyNkZWZpbmUgQ1JUQ19SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMgY29uc3Qg c3RydWN0IHsKKwl1MzIgcmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IGNydGNfcmVnc1tdID0g eworCUNSVENfUkVHKFBWX0NPTlRST0wpLAorCUNSVENfUkVHKFBWX1ZfQ09OVFJPTCksCisJQ1JU Q19SRUcoUFZfVlNZTkNEKSwKKwlDUlRDX1JFRyhQVl9IT1JaQSksCisJQ1JUQ19SRUcoUFZfSE9S WkIpLAorCUNSVENfUkVHKFBWX1ZFUlRBKSwKKwlDUlRDX1JFRyhQVl9WRVJUQiksCisJQ1JUQ19S RUcoUFZfVkVSVEFfRVZFTiksCisJQ1JUQ19SRUcoUFZfVkVSVEJfRVZFTiksCisJQ1JUQ19SRUco UFZfSU5URU4pLAorCUNSVENfUkVHKFBWX0lOVFNUQVQpLAorCUNSVENfUkVHKFBWX1NUQVQpLAor CUNSVENfUkVHKFBWX0hBQ1RfQUNUKSwKK307CisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2R1bXBf cmVncyhzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjKQoreworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoY3J0Y19yZWdzKTsgaSsrKSB7CisJCURSTV9JTkZPKCIweCUwNHgg KCVzKTogMHglMDh4XG4iLAorCQkJIGNydGNfcmVnc1tpXS5yZWcsIGNydGNfcmVnc1tpXS5uYW1l LAorCQkJIENSVENfUkVBRChjcnRjX3JlZ3NbaV0ucmVnKSk7CisJfQorfQorCisjaWZkZWYgQ09O RklHX0RFQlVHX0ZTCitpbnQgdmM0X2NydGNfZGVidWdmc19yZWdzKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVj dCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IG5vZGUtPm1pbm9yLT5kZXY7CisJaW50IGNydGNfaW5kZXggPSAodWludHB0cl90KW5vZGUtPmlu Zm9fZW50LT5kYXRhOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgdmM0X2NydGMg KnZjNF9jcnRjOworCWludCBpOworCisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRj LCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGkgPT0gY3J0Y19p bmRleCkKKwkJCWJyZWFrOworCQlpKys7CisJfQorCWlmICghY3J0YykKKwkJcmV0dXJuIDA7CisJ dmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGNydGNfcmVncyk7IGkrKykgeworCQlzZXFfcHJpbnRmKG0sICIlcyAoMHglMDR4KTogMHgl MDh4XG4iLAorCQkJICAgY3J0Y19yZWdzW2ldLm5hbWUsIGNydGNfcmVnc1tpXS5yZWcsCisJCQkg ICBDUlRDX1JFQUQoY3J0Y19yZWdzW2ldLnJlZykpOworCX0KKworCXJldHVybiAwOworfQorI2Vu ZGlmCisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB1MzIgdmM0X2dldF9m aWZvX2Z1bGxfbGV2ZWwodTMyIGZvcm1hdCkKK3sKKwlzdGF0aWMgY29uc3QgdTMyIGZpZm9fbGVu X2J5dGVzID0gNjQ7CisJc3RhdGljIGNvbnN0IHUzMiBodnNfbGF0ZW5jeV9waXggPSA2OworCisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTY6CisJY2Fz ZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2OgorCQlyZXR1cm4gZmlmb19sZW5fYnl0ZXMgLSAy ICogaHZzX2xhdGVuY3lfcGl4OworCWNhc2UgUFZfQ09OVFJPTF9GT1JNQVRfRFNJVl8xODoKKwkJ cmV0dXJuIGZpZm9fbGVuX2J5dGVzIC0gMTQ7CisJY2FzZSBQVl9DT05UUk9MX0ZPUk1BVF8yNDoK KwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMjQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZp Zm9fbGVuX2J5dGVzIC0gMyAqIGh2c19sYXRlbmN5X3BpeDsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IHZjNF9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVj dCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7CisJdTMyIHZhY3RpdmUgPSAobW9kZS0+dmRp c3BsYXkgPj4KKwkJICAgICAgICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFD RSkgPyAxIDogMCkpOworCXUzMiBmb3JtYXQgPSBQVl9DT05UUk9MX0ZPUk1BVF8yNDsKKwlib29s IGRlYnVnX2R1bXBfcmVncyA9IGZhbHNlOworCisJaWYgKGRlYnVnX2R1bXBfcmVncykgeworCQlE Uk1fSU5GTygiQ1JUQyAlZCByZWdzIGJlZm9yZTpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsK KwkJdmM0X2NydGNfZHVtcF9yZWdzKHZjNF9jcnRjKTsKKwl9CisKKwkvKiBUaGlzIGlzIHdoZXJl IHdlIHdvdWxkIHNldCB0aGUgcGl4ZWwgY2xvY2suICovCisKKwkvKiBSZXNldCB0aGUgUFYgZmlm by4gKi8KKwlDUlRDX1dSSVRFKFBWX0NPTlRST0wsIDApOworCUNSVENfV1JJVEUoUFZfQ09OVFJP TCwgUFZfQ09OVFJPTF9GSUZPX0NMUiB8IFBWX0NPTlRST0xfRU4pOworCUNSVENfV1JJVEUoUFZf Q09OVFJPTCwgMCk7CisKKwlDUlRDX1dSSVRFKFBWX0hPUlpBLAorCQkgICBWQzRfU0VUX0ZJRUxE KG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQkgUFZfSE9SWkFfSEJQKSB8CisJ CSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQsCisJ CQkJIFBWX0hPUlpBX0hTWU5DKSk7CisJQ1JUQ19XUklURShQVl9IT1JaQiwKKwkJICAgVkM0X1NF VF9GSUVMRChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5LAorCQkJCSBQVl9IT1Ja Ql9IRlApIHwKKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgUFZfSE9SWkJfSEFD VElWRSkpOworCisJQ1JUQ19XUklURShQVl9WRVJUQSwKKwkJICAgVkM0X1NFVF9GSUVMRChtb2Rl LT52dG90YWwgLSBtb2RlLT52c3luY19lbmQsCisJCQkJIFBWX1ZFUlRBX1ZCUCkgfAorCQkgICBW QzRfU0VUX0ZJRUxEKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0LAorCQkJCSBQ Vl9WRVJUQV9WU1lOQykpOworCUNSVENfV1JJVEUoUFZfVkVSVEIsCisJCSAgIFZDNF9TRVRfRklF TEQobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSwKKwkJCQkgUFZfVkVSVEJfVkZQ KSB8CisJCSAgIFZDNF9TRVRfRklFTEQodmFjdGl2ZSwgUFZfVkVSVEJfVkFDVElWRSkpOworCWlm IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7CisJCS8qIFdyaXRlIFBW X1ZFUlRBX0VWRU4vVkVSVEJfRVZFTiAqLworCX0KKworCUNSVENfV1JJVEUoUFZfSEFDVF9BQ1Qs IG1vZGUtPmhkaXNwbGF5KTsKKworCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAorCQkgICBQVl9W Q09OVFJPTF9DT05USU5VT1VTKTsKKworCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwKKwkJICAgVkM0 X1NFVF9GSUVMRChmb3JtYXQsIFBWX0NPTlRST0xfRk9STUFUKSB8CisJCSAgIFZDNF9TRVRfRklF TEQodmM0X2dldF9maWZvX2Z1bGxfbGV2ZWwoZm9ybWF0KSwKKwkJCQkgUFZfQ09OVFJPTF9GSUZP X0xFVkVMKSB8CisJCSAgIFBWX0NPTlRST0xfQ0xSX0FUX1NUQVJUIHwKKwkJICAgUFZfQ09OVFJP TF9UUklHR0VSX1VOREVSRkxPVyB8CisJCSAgIFBWX0NPTlRST0xfV0FJVF9IU1RBUlQgfAorCQkg ICBWQzRfU0VUX0ZJRUxEKFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9EUElfU01JX0hETUksCisJCQkJ IFBWX0NPTlRST0xfQ0xLX1NFTEVDVCkgfAorCQkgICBQVl9DT05UUk9MX0ZJRk9fQ0xSIHwKKwkJ ICAgUFZfQ09OVFJPTF9FTik7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZP KCJDUlRDICVkIHJlZ3MgYWZ0ZXI6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRjKSk7CisJCXZjNF9j cnRjX2R1bXBfcmVncyh2YzRfY3J0Yyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXF1aXJlX2h2 c19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9kZXYgKnZj NCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCVdBUk5fT05fT05DRSgoSFZTX1JFQUQoU0NBTEVSX0RJ U1BDVFJMKSAmIFNDQUxFUl9ESVNQQ1RSTF9FTkFCTEUpICE9CisJCSAgICAgU0NBTEVSX0RJU1BD VFJMX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJ c3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgdmM0X2NydGMg KnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7CisKKwlyZXF1aXJlX2h2c19lbmFibGVkKGRl dik7CisKKwlDUlRDX1dSSVRFKFBWX1ZfQ09OVFJPTCwKKwkJICAgQ1JUQ19SRUFEKFBWX1ZfQ09O VFJPTCkgJiB+UFZfVkNPTlRST0xfVklERU4pOworCXdoaWxlIChDUlRDX1JFQUQoUFZfVl9DT05U Uk9MKSAmIFBWX1ZDT05UUk9MX1ZJREVOKQorCQljcHVfcmVsYXgoKTsKKworCS8qIFdpdGhvdXQg YSB3YWl0IGhlcmUsIHdlIGVuZCB1cCB3aXRoIGEgYmxhY2sgc2NyZWVuLiAqLworCW1zbGVlcCgz MCk7CisKKwlpZiAoSFZTX1JFQUQoU0NBTEVSX0RJU1BDVFJMWCh2YzRfY3J0Yy0+Y2hhbm5lbCkp ICYKKwkgICAgU0NBTEVSX0RJU1BDVFJMWF9FTkFCTEUpIHsKKwkJSFZTX1dSSVRFKFNDQUxFUl9E SVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLAorCQkJICBTQ0FMRVJfRElTUENUUkxYX1JFU0VU KTsKKworCQkvKiBXaGlsZSB0aGUgZG9jcyBzYXkgdGhhdCByZXNldCBpcyBzZWxmLWNsZWFyaW5n LCBpdAorCQkgKiBzZWVtcyBpdCBkb2Vzbid0IGFjdHVhbGx5LgorCQkgKi8KKwkJSFZTX1dSSVRF KFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLCAwKTsKKwl9CisKKwkvKiBPbmNl IHdlIGxlYXZlLCB0aGUgc2NhbGVyIHNob3VsZCBiZSBkaXNhYmxlZCBhbmQgaXRzIGZpZm8gZW1w dHkuICovCisKKwlXQVJOX09OX09OQ0UoSFZTX1JFQUQoU0NBTEVSX0RJU1BDVFJMWCh2YzRfY3J0 Yy0+Y2hhbm5lbCkpICYKKwkJICAgICBTQ0FMRVJfRElTUENUUkxYX1JFU0VUKTsKKworCVdBUk5f T05fT05DRShWQzRfR0VUX0ZJRUxEKEhWU19SRUFEKFNDQUxFUl9ESVNQU1RBVFgodmM0X2NydGMt PmNoYW5uZWwpKSwKKwkJCQkgICBTQ0FMRVJfRElTUFNUQVRYX01PREUpICE9CisJCSAgICAgU0NB TEVSX0RJU1BTVEFUWF9NT0RFX0RJU0FCTEVEKTsKKworCVdBUk5fT05fT05DRSgoSFZTX1JFQUQo U0NBTEVSX0RJU1BTVEFUWCh2YzRfY3J0Yy0+Y2hhbm5lbCkpICYKKwkJICAgICAgKFNDQUxFUl9E SVNQU1RBVFhfRlVMTCB8IFNDQUxFUl9ESVNQU1RBVFhfRU1QVFkpKSAhPQorCQkgICAgIFNDQUxF Ul9ESVNQU1RBVFhfRU1QVFkpOworfQorCitzdGF0aWMgdm9pZCB2YzRfY3J0Y19lbmFibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgdmM0 X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0gJnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCisJcmVxdWlyZV9odnNfZW5hYmxlZChkZXYpOwor CisJLyogVHVybiBvbiB0aGUgc2NhbGVyLCB3aGljaCB3aWxsIHdhaXQgZm9yIHZzdGFydCB0byBz dGFydAorCSAqIGNvbXBvc2l0aW5nLgorCSAqLworCUhWU19XUklURShTQ0FMRVJfRElTUENUUkxY KHZjNF9jcnRjLT5jaGFubmVsKSwKKwkJICBWQzRfU0VUX0ZJRUxEKG1vZGUtPmhkaXNwbGF5LCBT Q0FMRVJfRElTUENUUkxYX1dJRFRIKSB8CisJCSAgVkM0X1NFVF9GSUVMRChtb2RlLT52ZGlzcGxh eSwgU0NBTEVSX0RJU1BDVFJMWF9IRUlHSFQpIHwKKwkJICBTQ0FMRVJfRElTUENUUkxYX0VOQUJM RSk7CisKKwkvKiBUdXJuIG9uIHRoZSBwaXhlbCB2YWx2ZSwgd2hpY2ggd2lsbCBlbWl0IHRoZSB2 c3RhcnQgc2lnbmFsLiAqLworCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAorCQkgICBDUlRDX1JF QUQoUFZfVl9DT05UUk9MKSB8IFBWX1ZDT05UUk9MX1ZJREVOKTsKK30KKworc3RhdGljIGludCB2 YzRfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRj LT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZTsKKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2Ny dGMoY3J0Yyk7CisJdTMyIGRsaXN0X2NvdW50ID0gMDsKKworCWRybV9hdG9taWNfY3J0Y19zdGF0 ZV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgc3RhdGUpIHsKKwkJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUgPQorCQkJc3RhdGUtPnN0YXRlLT5wbGFuZV9zdGF0ZXNbZHJtX3BsYW5l X2luZGV4KHBsYW5lKV07CisKKwkJLyogcGxhbmUgbWlnaHQgbm90IGhhdmUgY2hhbmdlZCwgaW4g d2hpY2ggY2FzZSB0YWtlCisJCSAqIGN1cnJlbnQgc3RhdGU6CisJCSAqLworCQlpZiAoIXBsYW5l X3N0YXRlKQorCQkJcGxhbmVfc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisKKwkJZGxpc3RfY291bnQg Kz0gdmM0X3BsYW5lX2RsaXN0X3NpemUocGxhbmVfc3RhdGUpOworCX0KKworCWRsaXN0X2NvdW50 Kys7IC8qIEFjY291bnQgZm9yIFNDQUxFUl9DVEwwX0VORC4gKi8KKworCWlmICghdmM0X2NydGMt PmRsaXN0IHx8IGRsaXN0X2NvdW50ID4gdmM0X2NydGMtPmRsaXN0X3NpemUpIHsKKwkJdmM0X2Ny dGMtPmRsaXN0ID0gKCh1MzIgX19pb21lbSAqKXZjNC0+aHZzLT5kbGlzdCArCisJCQkJICAgSFZT X0JPT1RMT0FERVJfRExJU1RfRU5EKTsKKwkJdmM0X2NydGMtPmRsaXN0X3NpemUgPSAoKFNDQUxF Ul9ETElTVF9TSVpFID4+IDIpIC0KKwkJCQkJSFZTX0JPT1RMT0FERVJfRExJU1RfRU5EKTsKKwor CQlpZiAoZGxpc3RfY291bnQgPiB2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSkgeworCQkJRFJNX0RFQlVH X0tNUygiZGxpc3QgdG9vIGxhcmdlIGZvciBDUlRDICglZCA+ICVkKS5cbiIsCisJCQkJICAgICAg ZGxpc3RfY291bnQsIHZjNF9jcnRjLT5kbGlzdF9zaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2F0b21pY19m bHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg Km9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0 cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0IHZjNF9jcnRjICp2 YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwor CWJvb2wgZGVidWdfZHVtcF9yZWdzID0gZmFsc2U7CisJdTMyIF9faW9tZW0gKmRsaXN0X25leHQg PSB2YzRfY3J0Yy0+ZGxpc3Q7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZP KCJDUlRDICVkIEhWUyBiZWZvcmU6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRjKSk7CisJCXZjNF9o dnNfZHVtcF9zdGF0ZShkZXYpOworCX0KKworCS8qIENvcHkgYWxsIHRoZSBhY3RpdmUgcGxhbmVz JyBkbGlzdCBjb250ZW50cyB0byB0aGUgaGFyZHdhcmUgZGxpc3QuCisJICoKKwkgKiBYWFg6IElm IHRoZSBuZXcgZGlzcGxheSBsaXN0IHdhcyBsYXJnZSBlbm91Z2ggdGhhdCBpdAorCSAqIG92ZXJs YXBwZWQgYSBjdXJyZW50bHktcmVhZCBkaXNwbGF5IGxpc3QsIHdlIG5lZWQgdG8gZG8KKwkgKiBz b21ldGhpbmcgbGlrZSBkaXNhYmxlIHNjYW5vdXQgYmVmb3JlIHB1dHRpbmcgaW4gdGhlIG5ldwor CSAqIGxpc3QuICBGb3Igbm93LCB3ZSdyZSBzYWZlIGJlY2F1c2Ugd2Ugb25seSBoYXZlIHRoZSB0 d28KKwkgKiBwbGFuZXMuCisJICovCisJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBs YW5lLCBjcnRjKSB7CisJCWRsaXN0X25leHQgKz0gdmM0X3BsYW5lX3dyaXRlX2RsaXN0KHBsYW5l LCBkbGlzdF9uZXh0KTsKKwl9CisKKwlpZiAoZGxpc3RfbmV4dCA9PSB2YzRfY3J0Yy0+ZGxpc3Qp IHsKKwkJLyogSWYgbm8gcGxhbmVzIHdlcmUgZW5hYmxlZCwgdXNlIHRoZSBTQ0FMRVJfQ1RMMF9F TkQKKwkJICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBkaXNwbGF5IGxpc3QgbWVtb3J5IChpbiB0aGUK KwkJICogYm9vdGxvYWRlciBzZWN0aW9uKS4gIFdlJ2xsIHJld3JpdGUgdGhhdAorCQkgKiBTQ0FM RVJfQ1RMMF9FTkQsIGp1c3QgaW4gY2FzZSwgdGhvdWdoLgorCQkgKi8KKwkJd3JpdGVsKFNDQUxF Ul9DVEwwX0VORCwgdmM0LT5odnMtPmRsaXN0KTsKKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQTElT VFgodmM0X2NydGMtPmNoYW5uZWwpLCAwKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoU0NBTEVSX0NU TDBfRU5ELCBkbGlzdF9uZXh0KTsKKwkJZGxpc3RfbmV4dCsrOworCisJCUhWU19XUklURShTQ0FM RVJfRElTUExJU1RYKHZjNF9jcnRjLT5jaGFubmVsKSwKKwkJCSAgKHUzMiAqKXZjNF9jcnRjLT5k bGlzdCAtICh1MzIgKil2YzQtPmh2cy0+ZGxpc3QpOworCisJCS8qIE1ha2UgdGhlIG5leHQgZGlz cGxheSBsaXN0IHN0YXJ0IGFmdGVyIG91cnMuICovCisJCXZjNF9jcnRjLT5kbGlzdF9zaXplIC09 IChkbGlzdF9uZXh0IC0gdmM0X2NydGMtPmRsaXN0KTsKKwkJdmM0X2NydGMtPmRsaXN0ID0gZGxp c3RfbmV4dDsKKwl9CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJDUlRD ICVkIEhWUyBhZnRlcjpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKKwkJdmM0X2h2c19kdW1w X3N0YXRlKGRldik7CisJfQorCisJaWYgKGNydGMtPnN0YXRlLT5ldmVudCkgeworCQl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJCWNydGMtPnN0YXRlLT5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2lu ZGV4KGNydGMpOworCisJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsK KworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCXZjNF9j cnRjLT5ldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 CisJfQorfQorCitpbnQgdmM0X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg aW50IGNydGNfaWQpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsK KwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdmM0LT5jcnRjW2NydGNfaWRdOworCisJQ1JU Q19XUklURShQVl9JTlRFTiwgUFZfSU5UX1ZGUF9TVEFSVCk7CisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCB2YzRfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGNf aWQpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3Qg dmM0X2NydGMgKnZjNF9jcnRjID0gdmM0LT5jcnRjW2NydGNfaWRdOworCisJQ1JUQ19XUklURShQ Vl9JTlRFTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2hhbmRsZV9wYWdlX2ZsaXAo c3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAm dmM0X2NydGMtPmJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9j aywgZmxhZ3MpOworCWlmICh2YzRfY3J0Yy0+ZXZlbnQpIHsKKwkJZHJtX2NydGNfc2VuZF92Ymxh bmtfZXZlbnQoY3J0YywgdmM0X2NydGMtPmV2ZW50KTsKKwkJdmM0X2NydGMtPmV2ZW50ID0gTlVM TDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2YzRfY3J0Y19pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkYXRhKQoreworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSBkYXRhOworCXUzMiBz dGF0ID0gQ1JUQ19SRUFEKFBWX0lOVFNUQVQpOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05F OworCisJaWYgKHN0YXQgJiBQVl9JTlRfVkZQX1NUQVJUKSB7CisJCUNSVENfV1JJVEUoUFZfSU5U U1RBVCwgUFZfSU5UX1ZGUF9TVEFSVCk7CisJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJnZjNF9j cnRjLT5iYXNlKTsKKwkJdmM0X2NydGNfaGFuZGxlX3BhZ2VfZmxpcCh2YzRfY3J0Yyk7CisJCXJl dCA9IElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2NydGNfZnVuY3MgdmM0X2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBk cm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5kZXN0cm95ID0gdmM0X2NydGNfZGVzdHJv eSwKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5zZXRfcHJv cGVydHkgPSBOVUxMLAorCS5jdXJzb3Jfc2V0ID0gTlVMTCwgLyogaGFuZGxlZCBieSBkcm1fbW9k ZV9jdXJzb3JfdW5pdmVyc2FsICovCisJLmN1cnNvcl9tb3ZlID0gTlVMTCwgLyogaGFuZGxlZCBi eSBkcm1fbW9kZV9jdXJzb3JfdW5pdmVyc2FsICovCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVs cGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHZjNF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9k ZV9zZXRfbm9mYiA9IHZjNF9jcnRjX21vZGVfc2V0X25vZmIsCisJLmRpc2FibGUgPSB2YzRfY3J0 Y19kaXNhYmxlLAorCS5lbmFibGUgPSB2YzRfY3J0Y19lbmFibGUsCisJLmF0b21pY19jaGVjayA9 IHZjNF9jcnRjX2F0b21pY19jaGVjaywKKwkuYXRvbWljX2ZsdXNoID0gdmM0X2NydGNfYXRvbWlj X2ZsdXNoLAorfTsKKworLyogRnJlZXMgdGhlIHBhZ2UgZmxpcCBldmVudCB3aGVuIHRoZSBEUk0g ZGV2aWNlIGlzIGNsb3NlZCB3aXRoIHRoZQorICogZXZlbnQgc3RpbGwgb3V0c3RhbmRpbmcuCisg Ki8KK3ZvaWQgdmM0X2NhbmNlbF9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3Zj NF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ss IGZsYWdzKTsKKworCWlmICh2YzRfY3J0Yy0+ZXZlbnQgJiYgdmM0X2NydGMtPmV2ZW50LT5iYXNl LmZpbGVfcHJpdiA9PSBmaWxlKSB7CisJCXZjNF9jcnRjLT5ldmVudC0+YmFzZS5kZXN0cm95KCZ2 YzRfY3J0Yy0+ZXZlbnQtPmJhc2UpOworCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCQl2 YzRfY3J0Yy0+ZXZlbnQgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHZjNF9jcnRjX2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKKwlzdHJ1 Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rldihkcm0pOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0 X2NydGM7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1h cnlfcGxhbmUsICpjdXJzb3JfcGxhbmU7CisJaW50IHJldDsKKworCS8qIEZvciBub3csIHdlIGNy ZWF0ZSBqdXN0IHRoZSBwcmltYXJ5IGFuZCB0aGUgbGVnYWN5IGN1cnNvcgorCSAqIHBsYW5lcy4g IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0YWNrIG1vcmUgcGxhbmVzIG9uIGVhc2lseSwKKwkgKiBi dXQgdG8gZG8gdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNvbXB1dGUgdGhlIGJhbmR3aWR0aAorCSAq IHJlcXVpcmVtZW50IG9mIHRoZSBwbGFuZSBjb25maWd1cmF0aW9uLCBhbmQgcmVqZWN0IG9uZXMK KwkgKiB0aGF0IHdpbGwgdGFrZSB0b28gbXVjaC4KKwkgKi8KKwlwcmltYXJ5X3BsYW5lID0gdmM0 X3BsYW5lX2luaXQoZHJtLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZiAoIXByaW1hcnlf cGxhbmUpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29uc3RydWN0IHByaW1hcnkgcGxh bmVcbiIpOworCQlyZXQgPSBQVFJfRVJSKHByaW1hcnlfcGxhbmUpOworCQlnb3RvIGZhaWw7CisJ fQorCisJY3Vyc29yX3BsYW5lID0gdmM0X3BsYW5lX2luaXQoZHJtLCBEUk1fUExBTkVfVFlQRV9D VVJTT1IpOworCWlmICghY3Vyc29yX3BsYW5lKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGNvbnN0cnVjdCBjdXJzb3IgcGxhbmVcbiIpOworCQlyZXQgPSBQVFJfRVJSKGN1cnNvcl9wbGFu ZSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwl2YzRfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqdmM0X2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjNF9jcnRjKQorCQlyZXR1cm4g LUVOT01FTTsKKwljcnRjID0gJnZjNF9jcnRjLT5iYXNlOworCisJdmM0X2NydGMtPnJlZ3MgPSB2 YzRfaW9yZW1hcF9yZWdzKHBkZXYsIDApOworCWlmIChJU19FUlIodmM0X2NydGMtPnJlZ3MpKQor CQlyZXR1cm4gUFRSX0VSUih2YzRfY3J0Yy0+cmVncyk7CisKKwlkcm1fY3J0Y19pbml0X3dpdGhf cGxhbmVzKGRybSwgY3J0YywgcHJpbWFyeV9wbGFuZSwgY3Vyc29yX3BsYW5lLAorCQkJCSAgJnZj NF9jcnRjX2Z1bmNzKTsKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZ2YzRfY3J0Y19oZWxw ZXJfZnVuY3MpOworCXByaW1hcnlfcGxhbmUtPmNydGMgPSBjcnRjOworCWN1cnNvcl9wbGFuZS0+ Y3J0YyA9IGNydGM7CisJdmM0LT5jcnRjW2RybV9jcnRjX2luZGV4KGNydGMpXSA9IHZjNF9jcnRj OworCisJLyogVW50aWwgd2UgaGF2ZSBmdWxsIHNjYW5vdXQgc2V0dXAgdG8gcm91dGUgdGhpbmdz IHRocm91Z2ggdG8KKwkgKiBlbmNvZGVycywgbGluZSB0aGluZ3MgdXAgbGlrZSB0aGUgZmlybXdh cmUgZGlkLgorCSAqLworCXN3aXRjaCAoZHJtX2NydGNfaW5kZXgoY3J0YykpIHsKKwljYXNlIDA6 CisJCXZjNF9jcnRjLT5jaGFubmVsID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2YzRfY3J0 Yy0+Y2hhbm5lbCA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSAyOgorCQl2YzRfY3J0 Yy0+Y2hhbm5lbCA9IDE7CisJCWJyZWFrOworCX0KKworCUNSVENfV1JJVEUoUFZfSU5URU4sIDAp OworCUNSVENfV1JJVEUoUFZfSU5UU1RBVCwgUFZfSU5UX1ZGUF9TVEFSVCk7CisJcmV0ID0gZGV2 bV9yZXF1ZXN0X2lycShkZXYsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksCisJCQkgICAgICAg dmM0X2NydGNfaXJxX2hhbmRsZXIsIDAsICJ2YzQgY3J0YyIsIHZjNF9jcnRjKTsKKworCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHZjNF9jcnRjKTsKKworCXJldHVybiAwOworCitmYWlsOgor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX3VuYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICB2b2lkICpkYXRhKQorewor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsK KwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl2 YzRfY3J0Y19kZXN0cm95KCZ2YzRfY3J0Yy0+YmFzZSk7CisKKwlDUlRDX1dSSVRFKFBWX0lOVEVO LCAwKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgdmM0X2NydGNfb3BzID0geworCS5iaW5kICAgPSB2 YzRfY3J0Y19iaW5kLAorCS51bmJpbmQgPSB2YzRfY3J0Y191bmJpbmQsCit9OworCitzdGF0aWMg aW50IHZjNF9jcnRjX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2YzRfY3J0Y19vcHMpOworfQorCitz dGF0aWMgaW50IHZjNF9jcnRjX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfY3J0Y19vcHMpOworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfY3J0Y19kdF9t YXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSx2YzQtcGl4ZWx2YWx2ZSIgfSwKKwl7 fQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfY3J0Y19kcml2ZXIgPSB7CisJLnBy b2JlID0gdmM0X2NydGNfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSB2YzRfY3J0Y19kZXZfcmVtb3Zl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInZjNF9jcnRjIiwKKwkJLm9mX21hdGNoX3RhYmxl ID0gdmM0X2NydGNfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NzAzOQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYwpAQCAtMCwwICsxLDM4IEBA CisvKgorICogIENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9j aXJjX2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGVi dWdmcy5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisj aW5jbHVkZSAidmM0X3JlZ3MuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW5mb19saXN0 IHZjNF9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7ImhkbWlfcmVncyIsIHZjNF9oZG1pX2RlYnVnZnNf cmVncywgMH0sCisJeyJodnNfcmVncyIsIHZjNF9odnNfZGVidWdmc19yZWdzLCAwfSwKKwl7ImNy dGMwX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkw fSwKKwl7ImNydGMxX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVp bnRwdHJfdCkxfSwKKwl7ImNydGMyX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2 b2lkICopKHVpbnRwdHJfdCkyfSwKK307CisjZGVmaW5lIFZDNF9ERUJVR0ZTX0VOVFJJRVMgQVJS QVlfU0laRSh2YzRfZGVidWdmc19saXN0KQorCitpbnQKK3ZjNF9kZWJ1Z2ZzX2luaXQoc3RydWN0 IGRybV9taW5vciAqbWlub3IpCit7CisJcmV0dXJuIGRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyh2 YzRfZGVidWdmc19saXN0LCBWQzRfREVCVUdGU19FTlRSSUVTLAorCQkJCQltaW5vci0+ZGVidWdm c19yb290LCBtaW5vcik7Cit9CisKK3ZvaWQKK3ZjNF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRy bV9taW5vciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHZjNF9kZWJ1Z2Zz X2xpc3QsIFZDNF9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYWVmYQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC0wLDAgKzEsMjcxIEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQnJvYWRjb20KKyAqIENvcHlyaWdodCAoQykg MjAxMyBSZWQgSGF0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgv ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAidmM0X2Rydi5oIgorI2luY2x1ZGUgInZjNF9yZWdz LmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInZjNCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJy b2FkY29tIFZDNCBncmFwaGljcyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTQwNjE2IgorI2Rl ZmluZSBEUklWRVJfTUFKT1IgMAorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorI2RlZmluZSBEUklW RVJfUEFUQ0hMRVZFTCAwCisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbWFwcGluZyB0aGUgcmVn cyBvbiBhIHBsYXRmb3JtIGRldmljZS4gKi8KK3ZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVn cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKm1hcDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCBpbmRleCk7CisJbWFwID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKCZkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1hcCkpIHsKKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gbWFwIHJlZ2lzdGVyczogJWxkXG4iLCBQVFJfRVJSKG1hcCkpOworCQly ZXR1cm4gbWFwOworCX0KKworCXJldHVybiBtYXA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kcm1f cHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQor eworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0Yywg JmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQl2YzRfY2FuY2VsX3BhZ2VfZmxp cChjcnRjLCBmaWxlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg dmM0X2RybV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29w ZW4sCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9j dGwsCisJLm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJl YWQgPSBkcm1fcmVhZCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRy bV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZjNF9kcm1faW9jdGxzW10gPSB7Cit9 OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmM0X2RybV9kcml2ZXIgPSB7CisJLmRyaXZl cl9mZWF0dXJlcyA9IChEUklWRVJfTU9ERVNFVCB8CisJCQkgICAgRFJJVkVSX0FUT01JQyB8CisJ CQkgICAgRFJJVkVSX0dFTSB8CisJCQkgICAgRFJJVkVSX1BSSU1FKSwKKwkucHJlY2xvc2UgPSB2 YzRfZHJtX3ByZWNsb3NlLAorCisJLmVuYWJsZV92YmxhbmsgPSB2YzRfZW5hYmxlX3ZibGFuaywK KwkuZGlzYWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfY291 bnRlciA9IGRybV92YmxhbmtfY291bnQsCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykK KwkuZGVidWdmc19pbml0ID0gdmM0X2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0g dmM0X2RlYnVnZnNfY2xlYW51cCwKKyNlbmRpZgorCisJLmdlbV9mcmVlX29iamVjdCA9IGRybV9n ZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywK KworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwku cHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9w cmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9 IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dl bV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0g ZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9w cmltZV92dW5tYXAsCisJLmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwK KworCS5kdW1iX2NyZWF0ZSA9IHZjNF9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0g ZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1 bWJfZGVzdHJveSwKKworCS5pb2N0bHMgPSB2YzRfZHJtX2lvY3RscywKKwkubnVtX2lvY3RscyA9 IEFSUkFZX1NJWkUodmM0X2RybV9pb2N0bHMpLAorCS5mb3BzID0gJnZjNF9kcm1fZm9wcywKKwor CS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwkuZGF0ZSA9IERS SVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBEUklWRVJfTUlO T1IsCisJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0YXRpYyBpbnQg dmM0X2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybTsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0OworCWludCByZXQgPSAwOworCisJZGV2LT5jb2hl cmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwl2YzQgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKnZjNCksIEdGUF9LRVJORUwpOworCWlmICghdmM0KQorCQlyZXR1cm4gLUVO T01FTTsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJnZjNF9kcm1fZHJpdmVyLCBkZXYpOworCWlm ICghZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBk cm0pOworCXZjNC0+ZGV2ID0gZHJtOworCWRybS0+ZGV2X3ByaXZhdGUgPSB2YzQ7CisKKwlkcm1f ZGV2X3NldF91bmlxdWUoZHJtLCBkZXZfbmFtZShkZXYpKTsKKworCWRybV9tb2RlX2NvbmZpZ19p bml0KGRybSk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZjsKKworCXJldCA9IGNvbXBvbmVudF9i aW5kX2FsbChkZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZjsKKworCXJldCA9IGRy bV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bmJpbmRfYWxs OworCisJdmM0X2ttc19sb2FkKGRybSk7CisKKwlyZXR1cm4gMDsKK3VuYmluZF9hbGw6CisJY29t cG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwordW5yZWY6CisJZHJtX2Rldl91bnJlZihkcm0p OworCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmM0X2RybV91 bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChk cm0pOworCisJZHJtX3B1dF9kZXYoZHJtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21w b25lbnRfbWFzdGVyX29wcyB2YzRfZHJtX29wcyA9IHsKKwkuYmluZCA9IHZjNF9kcm1fYmluZCwK KwkudW5iaW5kID0gdmM0X2RybV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfb2Yo c3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiBkZXYtPm9mX25vZGUg PT0gZGF0YTsKK30KKworc3RhdGljIGludCBhZGRfY29tcG9uZW50cyhzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKiptYXRjaHB0ciwKKwkJCSAgY29uc3QgY2hhciAq bmFtZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXVuc2ln bmVkIGk7CisKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGU7CisKKwkJbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIG5hbWUsIGkpOworCQlpZiAoIW5v ZGUpCisJCQlicmVhazsKKworCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2hwdHIsIGNv bXBhcmVfb2YsIG5vZGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZjNF9w bGF0Zm9ybV9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKworCWFkZF9jb21wb25lbnRzKGRldiwgJm1hdGNoLCAiY3J0Y3MiKTsKKwlh ZGRfY29tcG9uZW50cyhkZXYsICZtYXRjaCwgImVuY29kZXJzIik7CisJYWRkX2NvbXBvbmVudHMo ZGV2LCAmbWF0Y2gsICJodnNzIik7CisKKwlyZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0 aF9tYXRjaChkZXYsICZ2YzRfZHJtX29wcywgbWF0Y2gpOworfQorCitzdGF0aWMgaW50IHZjNF9w bGF0Zm9ybV9kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29t cG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJnZjNF9kcm1fb3BzKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfb2ZfbWF0Y2hbXSA9 IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sdmM0IiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCB2YzRfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciB2YzRfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSB2YzRfcGxhdGZvcm1fZHJt X3Byb2JlLAorCS5yZW1vdmUJCT0gdmM0X3BsYXRmb3JtX2RybV9yZW1vdmUsCisJLmRyaXZlcgkJ PSB7CisJCS5uYW1lCT0gInZjNC1kcm0iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9m X21hdGNoX3RhYmxlID0gdmM0X29mX21hdGNoLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciAqY29tcG9uZW50X2RyaXZlcnNbXSA9IHsKKwkmdmM0X2hkbWlfZHJpdmVy LAorCSZ2YzRfY3J0Y19kcml2ZXIsCisJJnZjNF9odnNfZHJpdmVyLAorfTsKKworc3RhdGljIGlu dCBfX2luaXQgdmM0X2RybV9yZWdpc3Rlcih2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoY29tcG9uZW50X2RyaXZlcnMpOyBpKyspIHsKKwkJaW50IHJldCA9 IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcihjb21wb25lbnRfZHJpdmVyc1tpXSk7CisJCWlmIChy ZXQpIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rl cihjb21wb25lbnRfZHJpdmVyc1tpXSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVy biBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZjNF9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitz dGF0aWMgdm9pZCBfX2V4aXQgdmM0X2RybV91bnJlZ2lzdGVyKHZvaWQpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSBBUlJBWV9TSVpFKGNvbXBvbmVudF9kcml2ZXJzKSAtIDE7IGkgPj0gMDsgaS0t KQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcihjb21wb25lbnRfZHJpdmVyc1tpXSk7CisK KwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmM0X3BsYXRmb3JtX2RyaXZlcik7Cit9CisK K21vZHVsZV9pbml0KHZjNF9kcm1fcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQodmM0X2RybV91bnJl Z2lzdGVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp2YzQtZHJtIik7CitNT0RVTEVfREVT Q1JJUFRJT04oIkJyb2FkY29tIFZDNCBEUk0gRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJFcmlj IEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJj ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKQEAg LTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJt X2dlbV9jbWFfaGVscGVyLmgiCisKK3N0cnVjdCB2YzRfZGV2IHsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2OworCisJc3RydWN0IHZjNF9oZG1pICpoZG1pOworCXN0cnVjdCB2YzRfaHZzICpodnM7 CisJc3RydWN0IHZjNF9jcnRjICpjcnRjWzNdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg dmM0X2RldiAqCit0b192YzRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJu IChzdHJ1Y3QgdmM0X2RldiAqKWRldi0+ZGV2X3ByaXZhdGU7Cit9CisKK3N0cnVjdCB2YzRfYm8g eworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IHZjNF9ibyAqCit0b192YzRfYm8oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibykKK3sK KwlyZXR1cm4gKHN0cnVjdCB2YzRfYm8gKilibzsKK30KKworc3RydWN0IHZjNF9odnMgeworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXZvaWQg X19pb21lbSAqZGxpc3Q7Cit9OworCitzdHJ1Y3QgdmM0X2NydGMgeworCXN0cnVjdCBkcm1fY3J0 YyBiYXNlOworCXZvaWQgX19pb21lbSAqcmVnczsKKworCS8qIFdoaWNoIEhWUyBjaGFubmVsIHdl J3JlIHVzaW5nIGZvciBvdXIgQ1JUQy4gKi8KKwlpbnQgY2hhbm5lbDsKKworCS8qIFBvaW50ZXIg dG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBkaXNwbGF5IGxpc3QgbWVtb3J5IGZvciB0aGUKKwkgKiBj cnRjLgorCSAqLworCXUzMiBfX2lvbWVtICpkbGlzdDsKKworCXUzMiBkbGlzdF9zaXplOyAvKiBp biBkd29yZHMgKi8KKworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50Owor fTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2NydGMgKgordG9fdmM0X2NydGMoc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXJldHVybiAoc3RydWN0IHZjNF9jcnRjICopY3J0YzsKK30K Kworc3RydWN0IHZjNF9wbGFuZSB7CisJc3RydWN0IGRybV9wbGFuZSBiYXNlOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgdmM0X3BsYW5lICoKK3RvX3ZjNF9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSkKK3sKKwlyZXR1cm4gKHN0cnVjdCB2YzRfcGxhbmUgKilwbGFuZTsKK30KKwor I2RlZmluZSBIVlNfUkVBRChvZmZzZXQpIHJlYWRsKHZjNC0+aHZzLT5yZWdzICsgb2Zmc2V0KQor I2RlZmluZSBIVlNfV1JJVEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHZjNC0+aHZzLT5yZWdz ICsgb2Zmc2V0KQorCisvKiB2YzRfYm8uYyAqLwordm9pZCB2YzRfZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKTsKK3N0cnVjdCB2YzRfYm8gKnZjNF9ib19jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpOworaW50IHZjNF9kdW1iX2NyZWF0 ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworc3RydWN0IGRt YV9idWYgKnZjNF9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBmbGFncyk7CisKKy8qIHZjNF9jcnRjLmMgKi8K K2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9jcnRjX2RyaXZlcjsKK2ludCB2YzRf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCk7Cit2b2lk IHZjNF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCk7 Cit2b2lkIHZjNF9jYW5jZWxfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0 IGRybV9maWxlICpmaWxlKTsKK2ludCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICphcmcpOworCisvKiB2YzRfZGVidWdmcy5jICovCitpbnQgdmM0X2RlYnVn ZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIHZjNF9kZWJ1Z2ZzX2NsZWFu dXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworCisvKiB2YzRfZHJ2LmMgKi8KK3ZvaWQgX19p b21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBp bmRleCk7CisKKy8qIHZjNF9oZG1pLmMgKi8KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHZjNF9oZG1pX2RyaXZlcjsKK3N0cnVjdCBkcm1fZW5jb2RlciAqdmM0X2hkbWlfZW5jb2Rlcl9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RydWN0IGRybV9jb25uZWN0b3IgKnZjNF9o ZG1pX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitpbnQgdmM0X2hkbWlfZGVidWdmc19yZWdzKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKTsKKworLyogdmM0X2h2cy5jICovCitleHRl cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaHZzX2RyaXZlcjsKK3ZvaWQgdmM0X2h2c19k dW1wX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IHZjNF9odnNfZGVidWdmc19y ZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKTsKKworLyogdmM0X2ttcy5jICov CitpbnQgdmM0X2ttc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKiB2YzRfcGxh bmUuYyAqLworc3RydWN0IGRybV9wbGFuZSAqdmM0X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQkgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsKK3UzMiB2YzRfcGxhbmVf d3JpdGVfZGxpc3Qoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHUzMiBfX2lvbWVtICpkbGlzdCk7 Cit1MzIgdmM0X3BsYW5lX2RsaXN0X3NpemUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaGRtaS5jIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfaGRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmNkMzMwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9oZG1p LmMKQEAgLTAsMCArMSw2MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg UmVkIEhhdAorICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAiZHJtX2F0b21pY19oZWxwZXIu aCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZWRpZC5oIgor I2luY2x1ZGUgImxpbnV4L2Nsay5oIgorI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVudC5oIgorI2lu Y2x1ZGUgImxpbnV4L29mX2dwaW8uaCIKKyNpbmNsdWRlICJsaW51eC9vZl9wbGF0Zm9ybS5oIgor I2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisvKiBHZW5lcmFs IEhETUkgaGFyZHdhcmUgc3RhdGUuICovCitzdHJ1Y3QgdmM0X2hkbWkgeworCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGM7CisJdm9pZCBfX2lv bWVtICpoZG1pY29yZV9yZWdzOworCXZvaWQgX19pb21lbSAqaGRfcmVnczsKKwlpbnQgaHBkX2dw aW87CisKKwkvKiBQcm9iZWQgdmlkZW8gbW9kZSBhdCBib290IHRpbWUsIHVzZWQgdG8gZmlsdGVy IGRpc3BsYXkKKwkgKiBtb2RlcyB0byBvbmx5IGFsbG93IGVxdWl2YWxlbnQgb25lcyAoc2luY2Ug d2UgY2FuJ3Qgc2V0IHRoZQorCSAqIHBpeGVsIGNsb2NrIHlldCkuCisJICovCisJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgYm9vdF9tb2RlOworfTsKKyNkZWZpbmUgSERNSV9SRUFEKG9mZnNldCkg cmVhZGwodmM0LT5oZG1pLT5oZG1pY29yZV9yZWdzICsgb2Zmc2V0KQorI2RlZmluZSBIRE1JX1dS SVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzQtPmhkbWktPmhkbWljb3JlX3JlZ3MgKyBv ZmZzZXQpCisjZGVmaW5lIEhEX1JFQUQob2Zmc2V0KSByZWFkbCh2YzQtPmhkbWktPmhkX3JlZ3Mg KyBvZmZzZXQpCisjZGVmaW5lIEhEX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzQt PmhkbWktPmhkX3JlZ3MgKyBvZmZzZXQpCisKKy8qIFZDNCBIRE1JIGVuY29kZXIgS01TIHN0cnVj dCAqLworc3RydWN0IHZjNF9oZG1pX2VuY29kZXIgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNl OworCWJvb2wgaGRtaV9tb25pdG9yOworfTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZjNF9oZG1p X2VuY29kZXIgKgordG9fdmM0X2hkbWlfZW5jb2RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3QgdmM0X2hkbWlfZW5j b2RlciwgYmFzZSk7Cit9CisKKy8qIFZDNCBIRE1JIGNvbm5lY3RvciBLTVMgc3RydWN0ICovCitz dHJ1Y3QgdmM0X2hkbWlfY29ubmVjdG9yIHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwor CisJLyogU2luY2UgdGhlIGNvbm5lY3RvciBpcyBhdHRhY2hlZCB0byBqdXN0IHRoZSBvbmUgZW5j b2RlciwKKwkgKiB0aGlzIGlzIHRoZSByZWZlcmVuY2UgdG8gaXQgc28gd2UgY2FuIGRvIHRoZSBi ZXN0X2VuY29kZXIoKQorCSAqIGhvb2suCisJICovCisJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyOworfTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciAqCit0b192 YzRfaGRtaV9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3Rvciwg YmFzZSk7Cit9CisKKyNkZWZpbmUgSERNSV9SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMg Y29uc3Qgc3RydWN0IHsKKwl1MzIgcmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IGhkbWlfcmVn c1tdID0geworCUhETUlfUkVHKFZDNF9IRE1JX0NPUkVfUkVWKSwKKwlIRE1JX1JFRyhWQzRfSERN SV9TV19SRVNFVF9DT05UUk9MKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9IT1RQTFVHX0lOVCksCisJ SERNSV9SRUcoVkM0X0hETUlfSE9UUExVRyksCisJSERNSV9SRUcoVkM0X0hETUlfSE9SWkEpLAor CUhETUlfUkVHKFZDNF9IRE1JX0hPUlpCKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9GSUZPX0NUTCks CisJSERNSV9SRUcoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpLAorCUhETUlfUkVHKFZDNF9I RE1JX1ZFUlRBMCksCisJSERNSV9SRUcoVkM0X0hETUlfVkVSVEExKSwKKwlIRE1JX1JFRyhWQzRf SERNSV9WRVJUQjApLAorCUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRCMSksCisJSERNSV9SRUcoVkM0 X0hETUlfVFhfUEhZX1JFU0VUX0NUTCksCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMy IHJlZzsKKwljb25zdCBjaGFyICpuYW1lOworfSBoZF9yZWdzW10gPSB7CisJSERNSV9SRUcoVkM0 X0hEX01fQ1RMKSwKKwlIRE1JX1JFRyhWQzRfSERfTUFJX0NUTCksCisJSERNSV9SRUcoVkM0X0hE X1ZJRF9DVEwpLAorCUhETUlfUkVHKFZDNF9IRF9DU0NfQ1RMKSwKKwlIRE1JX1JFRyhWQzRfSERf RlJBTUVfQ09VTlQpLAorfTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IHZjNF9oZG1p X2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1 Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2 YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVj dCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShoZG1pX3JlZ3MpOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMg KDB4JTA0eCk6IDB4JTA4eFxuIiwKKwkJCSAgIGhkbWlfcmVnc1tpXS5uYW1lLCBoZG1pX3JlZ3Nb aV0ucmVnLAorCQkJICAgSERNSV9SRUFEKGhkbWlfcmVnc1tpXS5yZWcpKTsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZF9yZWdzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwg IiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkgICBoZF9yZWdzW2ldLm5hbWUsIGhkX3JlZ3Nb aV0ucmVnLAorCQkJICAgSERfUkVBRChoZF9yZWdzW2ldLnJlZykpOworCX0KKworCXJldHVybiAw OworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgdm9pZCB2YzRfaGRt aV9kdW1wX3JlZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAq dmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoaGRtaV9yZWdzKTsgaSsrKSB7CisJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHglMDh4 XG4iLAorCQkJIGhkbWlfcmVnc1tpXS5yZWcsIGhkbWlfcmVnc1tpXS5uYW1lLAorCQkJIEhETUlf UkVBRChoZG1pX3JlZ3NbaV0ucmVnKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGhkX3JlZ3MpOyBpKyspIHsKKwkJRFJNX0lORk8oIjB4JTA0eCAoJXMpOiAweCUwOHhcbiIsCisJ CQkgaGRfcmVnc1tpXS5yZWcsIGhkX3JlZ3NbaV0ubmFtZSwKKwkJCSBIRF9SRUFEKGhkX3JlZ3Nb aV0ucmVnKSk7CisJfQorfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwordmM0 X2hkbWlfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIGZvcmNlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsK KwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJaWYgKHZjNC0+aGRt aS0+aHBkX2dwaW8pIHsKKwkJaWYgKGdwaW9fZ2V0X3ZhbHVlKHZjNC0+aGRtaS0+aHBkX2dwaW8p KQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQlyZXR1 cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJfQorCisJaWYgKEhETUlfUkVBRChW QzRfSERNSV9IT1RQTFVHKSAmIFZDNF9IRE1JX0hPVFBMVUdfQ09OTkVDVEVEKQorCQlyZXR1cm4g Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0 YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9oZG1pX2Nvbm5lY3Rvcl9k ZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rv cl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rv cik7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2hkbWlfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB2YzRfaGRtaV9jb25uZWN0b3Ig KnZjNF9jb25uZWN0b3IgPQorCQl0b192YzRfaGRtaV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSB2YzRfY29ubmVjdG9yLT5lbmNvZGVyOworCXN0 cnVjdCB2YzRfaGRtaV9lbmNvZGVyICp2YzRfZW5jb2RlciA9IHRvX3ZjNF9oZG1pX2VuY29kZXIo ZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0 cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJaW50IHJldCA9IDA7CisJc3Ry dWN0IGVkaWQgKmVkaWQ7CisKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgdmM0LT5o ZG1pLT5kZGMpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2YzRfZW5jb2Rl ci0+aGRtaV9tb25pdG9yID0gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CisJZHJtX21v ZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJcmV0 ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKiBTaW5jZSB3ZSBjYW4ndCBzZXQgdGhlIHBpeGVsIGNsb2NrIHlldCwgZmlsdGVyIG91 dCBhbGwgdGhlIEVESUQKKyAqIG1vZGVzIHRoYXQgZG9uJ3QgbWF0Y2ggd2hhdCB3YXMgc2V0IHVw IGJ5IHRoZSBmaXJtd2FyZS4KKyAqLworaW50IHZjNF9oZG1pX21vZGVfdmFsaWQoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3Qg dmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICpib290X21vZGUgPSAmdmM0LT5oZG1pLT5ib290X21vZGU7CisKKwlpZiAobW9kZS0+aGRpc3Bs YXkgIT0gYm9vdF9tb2RlLT5oZGlzcGxheSB8fAorCSAgICBtb2RlLT5oc3luY19zdGFydCAhPSBi b290X21vZGUtPmhzeW5jX3N0YXJ0IHx8CisJICAgIG1vZGUtPmhzeW5jX2VuZCAhPSBib290X21v ZGUtPmhzeW5jX2VuZCB8fAorCSAgICBtb2RlLT5odG90YWwgIT0gYm9vdF9tb2RlLT5odG90YWwp IHsKKwkJcmV0dXJuIE1PREVfRVJST1I7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgordmM0X2hkbWlfY29ubmVjdG9yX2Jlc3RfZW5jb2Rl cihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB2YzRfaGRtaV9j b25uZWN0b3IgKmhkbWlfY29ubmVjdG9yID0KKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5l Y3Rvcik7CisJcmV0dXJuIGhkbWlfY29ubmVjdG9yLT5lbmNvZGVyOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdmM0X2hkbWlfY29ubmVjdG9yX2Z1bmNzID0g eworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9 IHZjNF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3By b2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSB2YzRfaGRtaV9jb25uZWN0 b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQs CisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB2YzRfaGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz ID0geworCS5nZXRfbW9kZXMgPSB2YzRfaGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2Rl X3ZhbGlkID0gdmM0X2hkbWlfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gdmM0X2hkbWlf Y29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisKK3N0cnVjdCBkcm1fY29ubmVjdG9yICp2YzRf aGRtaV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9IE5VTEw7CisJc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciAqaGRtaV9jb25uZWN0 b3I7CisJaW50IHJldCA9IDA7CisKKwloZG1pX2Nvbm5lY3RvciA9IGRldm1fa3phbGxvYyhkZXYt PmRldiwgc2l6ZW9mKCpoZG1pX2Nvbm5lY3RvciksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJ aWYgKCFoZG1pX2Nvbm5lY3RvcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJ fQorCWNvbm5lY3RvciA9ICZoZG1pX2Nvbm5lY3Rvci0+YmFzZTsKKworCWhkbWlfY29ubmVjdG9y LT5lbmNvZGVyID0gZW5jb2RlcjsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3Rv ciwgJnZjNF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9I RE1JQSk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnZjNF9oZG1pX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJY29ubmVjdG9yLT5wb2xsZWQgPSAoRFJNX0NPTk5F Q1RPUl9QT0xMX0NPTk5FQ1QgfAorCQkJICAgICBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVD VCk7CisKKwljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gMDsKKwljb25uZWN0b3ItPmRv dWJsZXNjYW5fYWxsb3dlZCA9IDA7CisKKwlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKGNvbm5lY3Rv cik7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNv ZGVyKTsKKworCXJldHVybiBjb25uZWN0b3I7CisKKyBmYWlsOgorCWlmIChjb25uZWN0b3IpCisJ CXZjNF9oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95KGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gRVJSX1BU UihyZXQpOworfQorCitzdGF0aWMgdm9pZCB2YzRfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHZjNF9oZG1pX2VuY29kZXJf ZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSB2YzRfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGlj IHZvaWQgdmM0X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnVuYWRqdXN0ZWRfbW9kZSwK KwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192 YzRfZGV2KGRldik7CisJYm9vbCBkZWJ1Z19kdW1wX3JlZ3MgPSBmYWxzZTsKKwlib29sIGhzeW5j X3BvcyA9ICEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQyk7CisJYm9vbCB2c3lu Y19wb3MgPSAhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCXUzMiB2YWN0 aXZlID0gKG1vZGUtPnZkaXNwbGF5ID4+CisJCSAgICAgICAoKG1vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19JTlRFUkxBQ0UpID8gMSA6IDApKTsKKwl1MzIgdmVydGEgPSAoVkM0X1NFVF9GSUVM RChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCwKKwkJCQkgICBWQzRfSERNSV9W RVJUQV9WU1ApIHwKKwkJICAgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXksCisJCQkJICAgVkM0X0hETUlfVkVSVEFfVkZQKSB8CisJCSAgICAgVkM0X1NF VF9GSUVMRCh2YWN0aXZlLCBWQzRfSERNSV9WRVJUQV9WQUwpKTsKKwl1MzIgdmVydGIgPSAoVkM0 X1NFVF9GSUVMRCgwLCBWQzRfSERNSV9WRVJUQl9WU1BPKSB8CisJCSAgICAgVkM0X1NFVF9GSUVM RChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQsCisJCQkJICAgVkM0X0hETUlfVkVSVEJf VkJQKSk7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJIRE1JIHJlZ3Mg YmVmb3JlOlxuIik7CisJCXZjNF9oZG1pX2R1bXBfcmVncyhkZXYpOworCX0KKworCUhEX1dSSVRF KFZDNF9IRF9WSURfQ1RMLCAwKTsKKworCS8qIFhYWDogVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBz ZXQgdGhlIEhETUkgc3RhdGUgbWFjaGluZQorCSAqIGNsb2NrLCBpZiB3ZSBoYWQgYW4gaW50ZXJm YWNlIGZvciBpdC4KKwkgKi8KKworCUhETUlfV1JJVEUoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRS T0wsCisJCSAgIEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgfAorCQkgICBW QzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9NQU5VQUxfRk9STUFUIHwKKwkJICAgVkM0X0hETUlf U0NIRURVTEVSX0NPTlRST0xfSUdOT1JFX1ZTWU5DX1BSRURJQ1RTKTsKKworCUhETUlfV1JJVEUo VkM0X0hETUlfSE9SWkEsCisJCSAgICh2c3luY19wb3MgPyBWQzRfSERNSV9IT1JaQV9WUE9TIDog MCkgfAorCQkgICAoaHN5bmNfcG9zID8gVkM0X0hETUlfSE9SWkFfSFBPUyA6IDApIHwKKwkJICAg VkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgVkM0X0hETUlfSE9SWkFfSEFQKSk7CisKKwlI RE1JX1dSSVRFKFZDNF9IRE1JX0hPUlpCLAorCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPmh0b3Rh bCAtIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQkgVkM0X0hETUlfSE9SWkJfSEJQKSB8CisJCSAgIFZD NF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQsCisJCQkJIFZD NF9IRE1JX0hPUlpCX0hTUCkgfAorCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPmhzeW5jX3N0YXJ0 IC0gbW9kZS0+aGRpc3BsYXksCisJCQkJIFZDNF9IRE1JX0hPUlpCX0hGUCkpOworCisJSERNSV9X UklURShWQzRfSERNSV9WRVJUQTAsIHZlcnRhKTsKKwlIRE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRB MSwgdmVydGEpOworCisJSERNSV9XUklURShWQzRfSERNSV9WRVJUQjAsIHZlcnRiKTsKKwlIRE1J X1dSSVRFKFZDNF9IRE1JX1ZFUlRCMSwgdmVydGIpOworCisJSERfV1JJVEUoVkM0X0hEX1ZJRF9D VEwsCisJCSAodnN5bmNfcG9zID8gMCA6IFZDNF9IRF9WSURfQ1RMX1ZTWU5DX0xPVykgfAorCQkg KGhzeW5jX3BvcyA/IDAgOiBWQzRfSERfVklEX0NUTF9IU1lOQ19MT1cpKTsKKworCS8qIFRoZSBS R0Igb3JkZXIgYXBwbGllcyBldmVuIHdoZW4gQ1NDIGlzIGRpc2FibGVkLiAqLworCUhEX1dSSVRF KFZDNF9IRF9DU0NfQ1RMLCBWQzRfU0VUX0ZJRUxEKFZDNF9IRF9DU0NfQ1RMX09SREVSX0JHUiwK KwkJCQkJICAgICAgIFZDNF9IRF9DU0NfQ1RMX09SREVSKSk7CisKKwlIRE1JX1dSSVRFKFZDNF9I RE1JX0ZJRk9fQ1RMLCBWQzRfSERNSV9GSUZPX0NUTF9NQVNURVJfU0xBVkVfTik7CisKKwlpZiAo ZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJIRE1JIHJlZ3MgYWZ0ZXI6XG4iKTsKKwkJ dmM0X2hkbWlfZHVtcF9yZWdzKGRldik7CisJfQorfQorCitzdGF0aWMgdm9pZCB2YzRfaGRtaV9l bmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRv X3ZjNF9kZXYoZGV2KTsKKworCUhETUlfV1JJVEUoVkM0X0hETUlfVFhfUEhZX1JFU0VUX0NUTCwg MHhmIDw8IDE2KTsKKwlIRF9XUklURShWQzRfSERfVklEX0NUTCwKKwkJIEhEX1JFQUQoVkM0X0hE X1ZJRF9DVEwpICYgflZDNF9IRF9WSURfQ1RMX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIHZj NF9oZG1pX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlz dHJ1Y3QgdmM0X2hkbWlfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfaGRtaV9lbmNvZGVy KGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3Ry dWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCUhETUlfV1JJVEUoVkM0X0hE TUlfVFhfUEhZX1JFU0VUX0NUTCwgMCk7CisKKwlIRF9XUklURShWQzRfSERfVklEX0NUTCwKKwkJ IEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpIHwKKwkJIFZDNF9IRF9WSURfQ1RMX0VOQUJMRSB8CisJ CSBWQzRfSERfVklEX0NUTF9VTkRFUkZMT1dfRU5BQkxFIHwKKwkJIFZDNF9IRF9WSURfQ1RMX0ZS QU1FX0NPVU5URVJfUkVTRVQpOworCisJaWYgKHZjNF9lbmNvZGVyLT5oZG1pX21vbml0b3IpIHsK KwkJSERNSV9XUklURShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwKKwkJCSAgIEhETUlfUkVB RChWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgfAorCQkJICAgVkM0X0hETUlfU0NIRURVTEVS X0NPTlRST0xfTU9ERV9IRE1JKTsKKworCQl3aGlsZSAoIShIRE1JX1JFQUQoVkM0X0hETUlfU0NI RURVTEVSX0NPTlRST0wpICYKKwkJCSBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9IRE1JX0FD VElWRSkpIHsKKwkJCWNwdV9yZWxheCgpOworCQl9CisJfSBlbHNlIHsKKwkJSERNSV9XUklURShW QzRfSERNSV9SQU1fUEFDS0VUX0NPTkZJRywKKwkJCSAgIEhETUlfUkVBRChWQzRfSERNSV9SQU1f UEFDS0VUX0NPTkZJRykgJgorCQkJICAgfihWQzRfSERNSV9SQU1fUEFDS0VUX0VOQUJMRSkpOwor CQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MLAorCQkJICAgSERNSV9SRUFE KFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSAmCisJCQkgICB+VkM0X0hETUlfU0NIRURVTEVS X0NPTlRST0xfTU9ERV9IRE1JKTsKKworCQl3aGlsZSAoSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVE VUxFUl9DT05UUk9MKSAmCisJCSAgICAgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9IRE1J X0FDVElWRSkgeworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9CisKKwlpZiAodmM0X2VuY29kZXIt PmhkbWlfbW9uaXRvcikgeworCQl1MzIgZHJpZnQ7CisKKwkJV0FSTl9PTighKEhETUlfUkVBRChW QzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgJgorCQkJICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09O VFJPTF9IRE1JX0FDVElWRSkpOworCQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05U Uk9MLAorCQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSB8CisJCQkg ICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9WRVJUX0FMV0FZU19LRUVQT1VUKTsKKworCQkv KiBYWFg6IFNldCBIRE1JX1JBTV9QQUNLRVRfQ09ORklHICgxIDw8IDE2KSBhbmQgc2V0CisJCSAq IHVwIHRoZSBpbmZvZnJhbWUuCisJCSAqLworCisJCWRyaWZ0ID0gSERNSV9SRUFEKFZDNF9IRE1J X0ZJRk9fQ1RMKTsKKwkJZHJpZnQgJj0gVkM0X0hETUlfRklGT19WQUxJRF9XUklURV9NQVNLOwor CisJCUhETUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCisJCQkgICBkcmlmdCAmIH5WQzRfSERN SV9GSUZPX0NUTF9SRUNFTlRFUik7CisJCUhETUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCisJ CQkgICBkcmlmdCB8IFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSKTsKKwkJdWRlbGF5KDEwMDAp OworCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLAorCQkJICAgZHJpZnQgJiB+VkM0X0hE TUlfRklGT19DVExfUkVDRU5URVIpOworCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLAor CQkJICAgZHJpZnQgfCBWQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7CisKKwkJd2hpbGUgKChI RE1JX1JFQUQoVkM0X0hETUlfRklGT19DVEwpICYKKwkJCVZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VO VEVSX0RPTkUpID09IDApIHsKKwkJCWNwdV9yZWxheCgpOworCQl9CisJfQorfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB2YzRfaGRtaV9lbmNvZGVyX2hl bHBlcl9mdW5jcyA9IHsKKwkubW9kZV9zZXQgPSB2YzRfaGRtaV9lbmNvZGVyX21vZGVfc2V0LAor CS5kaXNhYmxlID0gdmM0X2hkbWlfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSB2YzRfaGRt aV9lbmNvZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGMgKgordmM0X2dl dF9jcnRjX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmNydGNfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcnRjX3BkZXY7 CisKKwljcnRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAiY3J0 YyIsIDApOworCWlmICghY3J0Y19ub2RlKSB7CisJCURSTV9FUlJPUigiTm8gQ1JUQyBmb3IgaGRt aSBpbiBEVFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWNydGNfcGRl diA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY3J0Y19ub2RlKTsKKwlpZiAoIWNydGNfcGRldikg eworCQlEUk1fRVJST1IoIk5vIENSVEMgZGV2aWNlIGF0dGFjaGVkIHRvIE9GIG5vZGVcbiIpOwor CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEoY3J0Y19wZGV2KTsKK30KKworc3RydWN0IGRybV9lbmNvZGVyICp2YzRfaGRtaV9lbmNv ZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0 ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7 CisJc3RydWN0IHZjNF9oZG1pX2VuY29kZXIgKnZjNF9oZG1pX2VuY29kZXI7CisJc3RydWN0IGRy bV9jcnRjICpjcnRjOworCWludCByZXQ7CisKKwl2YzRfaGRtaV9lbmNvZGVyID0gZGV2bV9remFs bG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNF9oZG1pX2VuY29kZXIpLAorCQkJCQlHRlBfS0VSTkVM KTsKKwlpZiAoIXZjNF9oZG1pX2VuY29kZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBm YWlsOworCX0KKwllbmNvZGVyID0gJnZjNF9oZG1pX2VuY29kZXItPmJhc2U7CisKKwljcnRjID0g dmM0X2dldF9jcnRjX25vZGUodmM0LT5oZG1pLT5wZGV2KTsKKwlpZiAoSVNfRVJSKGNydGMpKSB7 CisJCXJldCA9IFBUUl9FUlIoY3J0Yyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkcm1fZW5jb2Rl cl9pbml0KGRldiwgZW5jb2RlciwgJnZjNF9oZG1pX2VuY29kZXJfZnVuY3MsCisJCQkgRFJNX01P REVfRU5DT0RFUl9UTURTKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZ2YzRf aGRtaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9 IGRybV9jcnRjX21hc2soY3J0Yyk7CisKKwlyZXR1cm4gZW5jb2RlcjsKKworZmFpbDoKKwlpZiAo ZW5jb2RlcikKKwkJdmM0X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKKworCXJldHVybiBFUlJf UFRSKHJldCk7Cit9CisKKy8qIFJlYWRzIG91dCB0aGUgY3VycmVudCBIRE1JIG1vZGUgcHJvZ3Jl YW1taW5nIGF0IGRyaXZlciBsb2FkIHRpbWUuCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgdXNl ZCBmb3IgbGF0ZXIgZmlsdGVyaW5nIG91dCBvZiB0aGUgRERDLXByb2JlZAorICogdmlkZW8gbW9k ZXMsIHNpbmNlIHdlIGNhbid0IGFjdHVhbGx5IGNoYW5nZSBtb2RlcyBkdWUgdG8gbm90IGhhdmlu ZworICogY29udHJvbCBvZiB0aGUgbmVjZXNzYXJ5IGNsb2Nrcy4gIExhdGVyIG9uLCB3ZSBtYXkg ZW5kIHVwIHJldXNpbmcKKyAqIHRoaXMgZm9yIHNraXBwaW5nIG1vZGVzZXRzIGF0IGJvb3QgdGlt ZS4KKyAqLworc3RhdGljIHZvaWQKK3ZjNF9oZG1pX2dldF9ib290X2Rpc3BsYXlfbW9kZShzdHJ1 Y3QgdmM0X2RldiAqdmM0KQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJnZj NC0+aGRtaS0+Ym9vdF9tb2RlOworCXUzMiBob3J6YSA9IEhETUlfUkVBRChWQzRfSERNSV9IT1Ja QSk7CisJdTMyIGhvcnpiID0gSERNSV9SRUFEKFZDNF9IRE1JX0hPUlpCKTsKKwl1MzIgdmVydGEg PSBIRE1JX1JFQUQoVkM0X0hETUlfVkVSVEEwKTsKKwl1MzIgdmVydGIgPSBIRE1JX1JFQUQoVkM0 X0hETUlfVkVSVEIwKTsKKworCW1lbXNldChtb2RlLCAwLCBzaXplb2YoKm1vZGUpKTsKKworCWlm ICghKGhvcnphICYgVkM0X0hETUlfSE9SWkFfVlBPUykpCisJCW1vZGUtPmZsYWdzIHw9IERSTV9N T0RFX0ZMQUdfTlZTWU5DOworCWlmICghKGhvcnphICYgVkM0X0hETUlfSE9SWkFfSFBPUykpCisJ CW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCW1vZGUtPmhkaXNwbGF5ID0g VkM0X0dFVF9GSUVMRChob3J6YSwgVkM0X0hETUlfSE9SWkFfSEFQKTsKKwltb2RlLT5oc3luY19z dGFydCA9IChtb2RlLT5oZGlzcGxheSArCisJCQkgICAgIFZDNF9HRVRfRklFTEQoaG9yemIsIFZD NF9IRE1JX0hPUlpCX0hGUCkpOworCW1vZGUtPmhzeW5jX2VuZCA9IChtb2RlLT5oc3luY19zdGFy dCArCisJCQkgICBWQzRfR0VUX0ZJRUxEKGhvcnpiLCBWQzRfSERNSV9IT1JaQl9IU1ApKTsKKwlt b2RlLT5odG90YWwgPSAobW9kZS0+aHN5bmNfZW5kICsKKwkJCVZDNF9HRVRfRklFTEQoaG9yemIs IFZDNF9IRE1JX0hPUlpCX0hCUCkpOworCisJbW9kZS0+dmRpc3BsYXkgPSBWQzRfR0VUX0ZJRUxE KHZlcnRhLCBWQzRfSERNSV9WRVJUQV9WQUwpOworCW1vZGUtPnZzeW5jX3N0YXJ0ID0gKG1vZGUt PnZkaXNwbGF5ICsKKwkJCSAgICAgVkM0X0dFVF9GSUVMRCh2ZXJ0YSwgVkM0X0hETUlfVkVSVEFf VkZQKSk7CisJbW9kZS0+dnN5bmNfZW5kID0gKG1vZGUtPnZzeW5jX3N0YXJ0ICsKKwkJCSAgIFZD NF9HRVRfRklFTEQodmVydGEsIFZDNF9IRE1JX1ZFUlRBX1ZTUCkpOworCW1vZGUtPnZ0b3RhbCA9 IChtb2RlLT52c3luY19lbmQgKworCQkJVkM0X0dFVF9GSUVMRCh2ZXJ0YiwgVkM0X0hETUlfVkVS VEJfVkJQKSk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2hkbWlfYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2 YzQgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCB2YzRfaGRtaSAqaGRtaTsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmRkY19ub2RlOworCXUzMiB2YWx1ZTsKKworCWhkbWkgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJldHVy biAtRU5PTUVNOworCisJaGRtaS0+cGRldiA9IHBkZXY7CisJaGRtaS0+aGRtaWNvcmVfcmVncyA9 IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMCk7CisJaWYgKElTX0VSUihoZG1pLT5oZG1pY29yZV9y ZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRtaWNvcmVfcmVncyk7CisKKwloZG1pLT5o ZF9yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAxKTsKKwlpZiAoSVNfRVJSKGhkbWktPmhk X3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5oZF9yZWdzKTsKKworCS8qIEREQyBpMmMg ZHJpdmVyICovCisJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgImRk YyIsIDApOworCWlmICghZGRjX25vZGUpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZmluZCBk ZGMgbm9kZSBpbiBkZXZpY2UgdHJlZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWhk bWktPmRkYyA9IG9mX2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJaWYgKCFo ZG1pLT5kZGMpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRlciBi eSBub2RlXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJLyogT25seSB1c2Ug dGhlIEdQSU8gSFBEIHBpbiBpZiBwcmVzZW50IGluIHRoZSBEVCwgb3RoZXJ3aXNlCisJICogd2Un bGwgdXNlIHRoZSBIRE1JIGNvcmUncyByZWdpc3Rlci4KKwkgKi8KKwlpZiAob2ZfZmluZF9wcm9w ZXJ0eShkZXYtPm9mX25vZGUsICJocGQtZ3BpbyIsICZ2YWx1ZSkpIHsKKwkJaGRtaS0+aHBkX2dw aW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhkZXYtPm9mX25vZGUsICJocGQtZ3BpbyIsIDApOworCQlp ZiAoaGRtaS0+aHBkX2dwaW8gPCAwKQorCQkJcmV0dXJuIGhkbWktPmhwZF9ncGlvOworCX0KKwor CXZjNC0+aGRtaSA9IGhkbWk7CisKKwkvKiBIRE1JIGNvcmUgbXVzdCBiZSBlbmFibGVkLiAqLwor CVdBUk5fT05fT05DRSgoSERfUkVBRChWQzRfSERfTV9DVEwpICYgVkM0X0hEX01fRU5BQkxFKSA9 PSAwKTsKKworCXZjNF9oZG1pX2dldF9ib290X2Rpc3BsYXlfbW9kZSh2YzQpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXB1dF9kZXZpY2UoJnZjNC0+aGRtaS0+ZGRj LT5kZXYpOworCisJdmM0LT5oZG1pID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIHZjNF9oZG1pX29wcyA9IHsKKwkuYmluZCAgID0gdmM0X2hkbWlfYmluZCwK KwkudW5iaW5kID0gdmM0X2hkbWlfdW5iaW5kLAorfTsKKworc3RhdGljIGludCB2YzRfaGRtaV9k ZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gY29tcG9u ZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2hkbWlfb3BzKTsKK30KKworc3RhdGljIGludCB2YzRf aGRtaV9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9u ZW50X2RlbCgmcGRldi0+ZGV2LCAmdmM0X2hkbWlfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmM0X2hkbWlfZHRfbWF0Y2hbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gImJyY20sdmM0LWhkbWkiIH0sCisJe30KK307CisKK3N0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgdmM0X2hkbWlfZHJpdmVyID0geworCS5wcm9iZSA9IHZjNF9oZG1pX2Rldl9w cm9iZSwKKwkucmVtb3ZlID0gdmM0X2hkbWlfZGV2X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJ2YzRfaGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9oZG1pX2R0X21hdGNo LAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zNDkwNmZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfaHZzLmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJv YWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qKgorICogRE9DOiBWQzQgSFZT IG1vZHVsZS4KKyAqCisgKiBUaGUgSFZTIGlzIHRoZSBwaWVjZSBvZiBoYXJkd2FyZSB0aGF0IGRv ZXMgdHJhbnNsYXRpb24sIHNjYWxpbmcsCisgKiBjb2xvcnNwYWNlIGNvbnZlcnNpb24sIGFuZCBj b21wb3NpdGluZyBvZiBwaXhlbHMgc3RvcmVkIGluCisgKiBmcmFtZWJ1ZmZlcnMgaW50byBhIEZJ Rk8gb2YgcGl4ZWxzIGdvaW5nIG91dCB0byB0aGUgUGl4ZWwgVmFsdmUKKyAqIChDUlRDKS4KKyAq CisgKiBUaGVyZSBpcyBhIHNpbmdsZSBnbG9iYWwgSFZTLCB3aXRoIG11bHRpcGxlIG91dHB1dCBG SUZPcyB0aGF0IGNhbgorICogYmUgY29uc3VtZWQgYnkgdGhlIFBWcy4gIFRoaXMgZmlsZSBqdXN0 IG1hbmFnZXMgdGhlIHJlc291cmNlcyBmb3IKKyAqIHRoZSBIVlMsIHdoaWxlIHRoZSB2YzRfY3J0 Yy5jIGNvZGUgYWN0dWFsbHkgZHJpdmVzIEhWUyBzZXR1cCBmb3IKKyAqIGVhY2ggQ1JUQy4KKyAq LworCisjaW5jbHVkZSAibGludXgvY29tcG9uZW50LmgiCisjaW5jbHVkZSAidmM0X2Rydi5oIgor I2luY2x1ZGUgInZjNF9yZWdzLmgiCisKKyNkZWZpbmUgSFZTX1JFRyhyZWcpIHsgcmVnLCAjcmVn IH0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiByZWc7CisJY29uc3QgY2hhciAqbmFtZTsK K30gaHZzX3JlZ3NbXSA9IHsKKwlIVlNfUkVHKFNDQUxFUl9ESVNQQ1RSTCksCisJSFZTX1JFRyhT Q0FMRVJfRElTUFNUQVQpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BJRCksCisJSFZTX1JFRyhTQ0FM RVJfRElTUEVDVFJMKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQUFJPRiksCisJSFZTX1JFRyhTQ0FM RVJfRElTUERJVEhFUiksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEVPTE4pLAorCUhWU19SRUcoU0NB TEVSX0RJU1BMSVNUMCksCisJSFZTX1JFRyhTQ0FMRVJfRElTUExJU1QxKSwKKwlIVlNfUkVHKFND QUxFUl9ESVNQTElTVDIpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BMU1RBVCksCisJSFZTX1JFRyhT Q0FMRVJfRElTUExBQ1QwKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQTEFDVDEpLAorCUhWU19SRUco U0NBTEVSX0RJU1BMQUNUMiksCisJSFZTX1JFRyhTQ0FMRVJfRElTUENUUkwwKSwKKwlIVlNfUkVH KFNDQUxFUl9ESVNQQktHTkQwKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQU1RBVDApLAorCUhWU19S RUcoU0NBTEVSX0RJU1BCQVNFMCksCisJSFZTX1JFRyhTQ0FMRVJfRElTUENUUkwxKSwKKwlIVlNf UkVHKFNDQUxFUl9ESVNQQktHTkQxKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQU1RBVDEpLAorCUhW U19SRUcoU0NBTEVSX0RJU1BCQVNFMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUENUUkwyKSwKKwlI VlNfUkVHKFNDQUxFUl9ESVNQQktHTkQyKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQU1RBVDIpLAor CUhWU19SRUcoU0NBTEVSX0RJU1BCQVNFMiksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEFMUEhBMiks Cit9OworCit2b2lkIHZjNF9odnNfZHVtcF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShodnNfcmVncyk7IGkrKykgeworCQlEUk1fSU5GTygi MHglMDR4ICglcyk6IDB4JTA4eFxuIiwKKwkJCSBodnNfcmVnc1tpXS5yZWcsIGh2c19yZWdzW2ld Lm5hbWUsCisJCQkgSFZTX1JFQUQoaHZzX3JlZ3NbaV0ucmVnKSk7CisJfQorCisJRFJNX0lORk8o IkhWUyBjdHg6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkgKz0gNCkgeworCQlEUk1fSU5G TygiMHglMDh4ICglcyk6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCSBpICog NCwgaSA8IEhWU19CT09UTE9BREVSX0RMSVNUX0VORCA/ICJCIiA6ICJEIiwKKwkJCSAoKHVpbnQz Ml90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgMF0sCisJCQkgKCh1aW50MzJfdCAqKXZjNC0+aHZz LT5kbGlzdClbaSArIDFdLAorCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAy XSwKKwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgM10pOworCX0KK30KKwor I2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IHZjNF9odnNfZGVidWdmc19yZWdzKHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2Rl ID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3Zj NF9kZXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh2c19y ZWdzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJ CQkgICBodnNfcmVnc1tpXS5uYW1lLCBodnNfcmVnc1tpXS5yZWcsCisJCQkgICBIVlNfUkVBRCho dnNfcmVnc1tpXS5yZWcpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMg aW50IHZjNF9odnNfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxh dGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2 ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOwor CXN0cnVjdCB2YzRfaHZzICpodnMgPSBOVUxMOworCisJaHZzID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqaHZzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodnMpCisJCXJldHVybiAt RU5PTUVNOworCisJaHZzLT5wZGV2ID0gcGRldjsKKworCWh2cy0+cmVncyA9IHZjNF9pb3JlbWFw X3JlZ3MocGRldiwgMCk7CisJaWYgKElTX0VSUihodnMtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VS UihodnMtPnJlZ3MpOworCisJaHZzLT5kbGlzdCA9IGh2cy0+cmVncyArIFNDQUxFUl9ETElTVF9T VEFSVDsKKworCXZjNC0+aHZzID0gaHZzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2 YzRfaHZzX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwK KwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRf ZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRl OworCisJdmM0LT5odnMgPSBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVu dF9vcHMgdmM0X2h2c19vcHMgPSB7CisJLmJpbmQgICA9IHZjNF9odnNfYmluZCwKKwkudW5iaW5k ID0gdmM0X2h2c191bmJpbmQsCit9OworCitzdGF0aWMgaW50IHZjNF9odnNfZGV2X3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBk ZXYtPmRldiwgJnZjNF9odnNfb3BzKTsKK30KKworc3RhdGljIGludCB2YzRfaHZzX2Rldl9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2 LT5kZXYsICZ2YzRfaHZzX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHZjNF9odnNfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g ImJyY20sdmM0LWh2cyIgfSwKKwl7fQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRf aHZzX2RyaXZlciA9IHsKKwkucHJvYmUgPSB2YzRfaHZzX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0g dmM0X2h2c19kZXZfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInZjNF9odnMiLAor CQkub2ZfbWF0Y2hfdGFibGUgPSB2YzRfaHZzX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWU5NmJjCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKQEAgLTAsMCArMSw4 NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKi8KKworLyoqCisgKiBET0M6IFZDNCBLTVMKKyAqCisgKiBUaGlzIGlzIHRoZSBn ZW5lcmFsIGNvZGUgZm9yIGltcGxlbWVudGluZyBLTVMgbW9kZSBzZXR0aW5nIHRoYXQKKyAqIGRv ZXNuJ3QgY2xlYXJseSBhc3NvY2lhdGUgd2l0aCBhbnkgb2YgdGhlIG90aGVyIG9iamVjdHMgKHBs YW5lLAorICogY3J0YywgSERNSSBlbmNvZGVyKS4KKyAqLworCisjaW5jbHVkZSAiZHJtX2NydGMu aCIKKyNpbmNsdWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hl bHBlci5oIgorI2luY2x1ZGUgImRybV9wbGFuZV9oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJf Y21hX2hlbHBlci5oIgorI2luY2x1ZGUgInZjNF9kcnYuaCIKKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fbW9kZV9jb25maWdfZnVuY3MgdmM0X21vZGVfZnVuY3MgPSB7CisJLmF0b21pY19jaGVj ayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0LAorCS5mYl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKK307CisK Ky8qIENhbGxzIG91dCB0byBpbml0aWFsaXplIGFsbCBvZiB0aGUgVkM0IEtNUyBvYmplY3RzLiAq Lworc3RhdGljIGludCB2YzRfaW5pdF9tb2Rlc2V0X29iamVjdHMoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0ID0gMDsKKworCWVuY29kZXIgPSB2YzRfaGRtaV9l bmNvZGVyX2luaXQoZGV2KTsKKwlpZiAoSVNfRVJSKGVuY29kZXIpKSB7CisJCWRldl9lcnIoZGV2 LT5kZXYsICJmYWlsZWQgdG8gY29uc3RydWN0IEhETUkgZW5jb2RlclxuIik7CisJCXJldCA9IFBU Ul9FUlIoZW5jb2Rlcik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwljb25uZWN0b3IgPSB2YzRfaGRt aV9jb25uZWN0b3JfaW5pdChkZXYsIGVuY29kZXIpOworCWlmIChJU19FUlIoY29ubmVjdG9yKSkg eworCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rvcik7CisJCWRldl9lcnIoZGV2LT5kZXYsICJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBIRE1JIGNvbm5lY3RvclxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisK K2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBk ZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl di0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdmJsYW5rXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDIwNDg7CisJZGV2LT5tb2RlX2Nv bmZpZy5tYXhfaGVpZ2h0ID0gMjA0ODsKKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnZjNF9t b2RlX2Z1bmNzOworCWRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMjQ7CisKKwly ZXQgPSB2YzRfaW5pdF9tb2Rlc2V0X29iamVjdHMoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZh aWw7CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKKworCWRybV9mYmRldl9jbWFfaW5p dChkZXYsIDMyLAorCQkJICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKKwkJCSAgIGRldi0+ bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQo ZGV2KTsKKworZmFpbDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkOGIxMAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKQEAgLTAsMCArMSwzMjAgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICovCisKKy8qKgorICogRE9DOiBWQzQgcGxhbmUgbW9kdWxlCisgKgorICogRWFjaCBEUk0gcGxh bmUgaXMgYSBsYXllciBvZiBwaXhlbHMgYmVpbmcgc2Nhbm5lZCBvdXQgYnkgdGhlIEhWUy4KKyAq CisgKiBBdCBhdG9taWMgbW9kZXNldCBjaGVjayB0aW1lLCB3ZSBjb21wdXRlIHRoZSBIVlMgZGlz cGxheSBlbGVtZW50CisgKiBzdGF0ZSB0aGF0IHdvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgZGlzcGxh eWluZyB0aGUgcGxhbmUgKGdpdmluZyB1cyBhCisgKiBjaGFuY2UgdG8gZmlndXJlIG91dCBpZiBh IHBsYW5lIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCksIHRoZW4gYXQKKyAqIGF0b21pYyBmbHVz aCB0aW1lIHRoZSBDUlRDIHdpbGwgYXNrIHVzIHRvIHdyaXRlIG91ciBlbGVtZW50IHN0YXRlCisg KiBpbnRvIHRoZSByZWdpb24gb2YgdGhlIEhWUyB0aGF0IGl0IGhhcyBhbGxvY2F0ZWQgZm9yIHVz LgorICovCisKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIKKyNp bmNsdWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9mYl9jbWFfaGVscGVy LmgiCisjaW5jbHVkZSAiZHJtX3BsYW5lX2hlbHBlci5oIgorCitzdHJ1Y3QgdmM0X3BsYW5lX3N0 YXRlIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7CisJdTMyICpkbGlzdDsKKwl1MzIg ZGxpc3Rfc2l6ZTsgLyogTnVtYmVyIG9mIGR3b3JkcyBpbiBhbGxvY2F0ZWQgZm9yIHRoZSBkaXNw bGF5IGxpc3QgKi8KKwl1MzIgZGxpc3RfY291bnQ7IC8qIE51bWJlciBvZiB1c2VkIGR3b3JkcyBp biB0aGUgZGlzcGxheSBsaXN0LiAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X3Bs YW5lX3N0YXRlICoKK3RvX3ZjNF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlyZXR1cm4gKHN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKilzdGF0ZTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBodnNfZm9ybWF0IHsKKwl1MzIgZHJtOyAvKiBEUk1fRk9STUFU XyogKi8KKwl1MzIgaHZzOyAvKiBIVlNfRk9STUFUXyogKi8KKwl1MzIgcGl4ZWxfb3JkZXI7CisJ Ym9vbCBoYXNfYWxwaGE7Cit9IGh2c19mb3JtYXRzW10gPSB7CisJeworCQkuZHJtID0gRFJNX0ZP Uk1BVF9YUkdCODg4OCwgLmh2cyA9IEhWU19QSVhFTF9GT1JNQVRfUkdCQTg4ODgsCisJCS5waXhl bF9vcmRlciA9IEhWU19QSVhFTF9PUkRFUl9BQkdSLCAuaGFzX2FscGhhID0gZmFsc2UsCisJfSwK Kwl7CisJCS5kcm0gPSBEUk1fRk9STUFUX0FSR0I4ODg4LCAuaHZzID0gSFZTX1BJWEVMX0ZPUk1B VF9SR0JBODg4OCwKKwkJLnBpeGVsX29yZGVyID0gSFZTX1BJWEVMX09SREVSX0FCR1IsIC5oYXNf YWxwaGEgPSB0cnVlLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh2c19mb3JtYXQg KnZjNF9nZXRfaHZzX2Zvcm1hdCh1MzIgZHJtX2Zvcm1hdCkKK3sKKwl1bnNpZ25lZCBpOworCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHZzX2Zvcm1hdHMpOyBpKyspIHsKKwkJaWYgKGh2 c19mb3JtYXRzW2ldLmRybSA9PSBkcm1fZm9ybWF0KQorCQkJcmV0dXJuICZodnNfZm9ybWF0c1tp XTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGJvb2wgcGxhbmVfZW5hYmxlZChz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUtPmZiICYmIHN0 YXRlLT5jcnRjOworfQorCitzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICp2YzRfcGxhbmVfZHVwbGlj YXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCB2YzRfcGxhbmVf c3RhdGUgKnZjNF9zdGF0ZTsKKworCWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUpKQorCQlyZXR1 cm4gTlVMTDsKKworCXZjNF9zdGF0ZSA9IGttZW1kdXAocGxhbmUtPnN0YXRlLCBzaXplb2YoKnZj NF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghdmM0X3N0YXRlKQorCQlyZXR1cm4gTlVMTDsK KworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmdmM0 X3N0YXRlLT5iYXNlKTsKKworCWlmICh2YzRfc3RhdGUtPmRsaXN0KSB7CisJCXZjNF9zdGF0ZS0+ ZGxpc3QgPSBrbWVtZHVwKHZjNF9zdGF0ZS0+ZGxpc3QsCisJCQkJCSAgIHZjNF9zdGF0ZS0+ZGxp c3RfY291bnQgKiA0LAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2YzRfc3RhdGUtPmRs aXN0KSB7CisJCQlrZnJlZSh2YzRfc3RhdGUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJdmM0 X3N0YXRlLT5kbGlzdF9zaXplID0gdmM0X3N0YXRlLT5kbGlzdF9jb3VudDsKKwl9CisKKwlyZXR1 cm4gJnZjNF9zdGF0ZS0+YmFzZTsKK30KKwordm9pZCB2YzRfcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3Bs YW5lX3N0YXRlKHN0YXRlKTsKKworCWtmcmVlKHZjNF9zdGF0ZS0+ZGxpc3QpOworCV9fZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZSwgJnZjNF9zdGF0ZS0+YmFzZSk7 CisJa2ZyZWUoc3RhdGUpOworfQorCisvKiBDYWxsZWQgZHVyaW5nIGluaXQgdG8gYWxsb2NhdGUg dGhlIHBsYW5lJ3MgYXRvbWljIHN0YXRlLiAqLwordm9pZCB2YzRfcGxhbmVfcmVzZXQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRl OworCisJV0FSTl9PTihwbGFuZS0+c3RhdGUpOworCisJdmM0X3N0YXRlID0ga3phbGxvYyhzaXpl b2YoKnZjNF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghdmM0X3N0YXRlKQorCQlyZXR1cm47 CisKKwlwbGFuZS0+c3RhdGUgPSAmdmM0X3N0YXRlLT5iYXNlOworCXZjNF9zdGF0ZS0+YmFzZS5w bGFuZSA9IHBsYW5lOworfQorCitzdGF0aWMgdm9pZCB2YzRfZGxpc3Rfd3JpdGUoc3RydWN0IHZj NF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlLCB1MzIgdmFsKQoreworCWlmICh2YzRfc3RhdGUtPmRs aXN0X2NvdW50ID09IHZjNF9zdGF0ZS0+ZGxpc3Rfc2l6ZSkgeworCQl1MzIgbmV3X3NpemUgPSBt YXgoNHUsIHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQgKiAyKTsKKwkJdTMyICpuZXdfZGxpc3QgPSBr bWFsbG9jKG5ld19zaXplICogNCwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFuZXdfZGxpc3QpCisJ CQlyZXR1cm47CisJCW1lbWNweShuZXdfZGxpc3QsIHZjNF9zdGF0ZS0+ZGxpc3QsIHZjNF9zdGF0 ZS0+ZGxpc3RfY291bnQgKiA0KTsKKworCQlrZnJlZSh2YzRfc3RhdGUtPmRsaXN0KTsKKwkJdmM0 X3N0YXRlLT5kbGlzdCA9IG5ld19kbGlzdDsKKwkJdmM0X3N0YXRlLT5kbGlzdF9zaXplID0gbmV3 X3NpemU7CisJfQorCisJdmM0X3N0YXRlLT5kbGlzdFt2YzRfc3RhdGUtPmRsaXN0X2NvdW50Kytd ID0gdmFsOworfQorCisvKiBXcml0ZXMgb3V0IGEgZnVsbCBkaXNwbGF5IGxpc3QgZm9yIGFuIGFj dGl2ZSBwbGFuZSB0byB0aGUgcGxhbmUncworICogcHJpdmF0ZSBkbGlzdCBzdGF0ZS4KKyAqLwor c3RhdGljIGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X3Bs YW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9v YmplY3QgKmJvID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJdTMyIGN0bDBfb2Zm c2V0ID0gdmM0X3N0YXRlLT5kbGlzdF9jb3VudDsKKwljb25zdCBzdHJ1Y3QgaHZzX2Zvcm1hdCAq Zm9ybWF0ID0gdmM0X2dldF9odnNfZm9ybWF0KGZiLT5waXhlbF9mb3JtYXQpOworCXVpbnQzMl90 IG9mZnNldCA9IGZiLT5vZmZzZXRzWzBdOworCWludCBjcnRjX3ggPSBzdGF0ZS0+Y3J0Y194Owor CWludCBjcnRjX3kgPSBzdGF0ZS0+Y3J0Y195OworCWludCBjcnRjX3cgPSBzdGF0ZS0+Y3J0Y193 OworCWludCBjcnRjX2ggPSBzdGF0ZS0+Y3J0Y19oOworCisJaWYgKGNydGNfeCA8IDApIHsKKwkJ b2Zmc2V0ICs9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApICogLWNy dGNfeDsKKwkJY3J0Y193ICs9IGNydGNfeDsKKwkJY3J0Y194ID0gMDsKKwl9CisKKwlpZiAoY3J0 Y195IDwgMCkgeworCQlvZmZzZXQgKz0gZmItPnBpdGNoZXNbMF0gKiAtY3J0Y195OworCQljcnRj X2ggKz0gY3J0Y195OworCQljcnRjX3kgPSAwOworCX0KKworCXZjNF9kbGlzdF93cml0ZSh2YzRf c3RhdGUsCisJCQlTQ0FMRVJfQ1RMMF9WQUxJRCB8CisJCQkoZm9ybWF0LT5waXhlbF9vcmRlciA8 PCBTQ0FMRVJfQ1RMMF9PUkRFUl9TSElGVCkgfAorCQkJKGZvcm1hdC0+aHZzIDw8IFNDQUxFUl9D VEwwX1BJWEVMX0ZPUk1BVF9TSElGVCkgfAorCQkJU0NBTEVSX0NUTDBfVU5JVFkpOworCisJLyog UG9zaXRpb24gV29yZCAwOiBJbWFnZSBQb3NpdGlvbnMgYW5kIEFscGhhIFZhbHVlICovCisJdmM0 X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwKKwkJCVZDNF9TRVRfRklFTEQoMHhmZiwgU0NBTEVSX1BP UzBfRklYRURfQUxQSEEpIHwKKwkJCVZDNF9TRVRfRklFTEQoY3J0Y194LCBTQ0FMRVJfUE9TMF9T VEFSVF9YKSB8CisJCQlWQzRfU0VUX0ZJRUxEKGNydGNfeSwgU0NBTEVSX1BPUzBfU1RBUlRfWSkp OworCisJLyogUG9zaXRpb24gV29yZCAxOiBTY2FsZWQgSW1hZ2UgRGltZW5zaW9ucy4KKwkgKiBT a2lwcGVkIGR1ZSB0byBTQ0FMRVJfQ1RMMF9VTklUWSBzY2FsaW5nLgorCSAqLworCisJLyogUG9z aXRpb24gV29yZCAyOiBTb3VyY2UgSW1hZ2UgU2l6ZSwgQWxwaGEgTW9kZSAqLworCXZjNF9kbGlz dF93cml0ZSh2YzRfc3RhdGUsCisJCQlWQzRfU0VUX0ZJRUxEKGZvcm1hdC0+aGFzX2FscGhhID8K KwkJCQkgICAgICBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX1BJUEVMSU5FIDoKKwkJCQkgICAgICBT Q0FMRVJfUE9TMl9BTFBIQV9NT0RFX0ZJWEVELAorCQkJCSAgICAgIFNDQUxFUl9QT1MyX0FMUEhB X01PREUpIHwKKwkJCVZDNF9TRVRfRklFTEQoY3J0Y193LCBTQ0FMRVJfUE9TMl9XSURUSCkgfAor CQkJVkM0X1NFVF9GSUVMRChjcnRjX2gsIFNDQUxFUl9QT1MyX0hFSUdIVCkpOworCisJLyogUG9z aXRpb24gV29yZCAzOiBDb250ZXh0LiAgV3JpdHRlbiBieSB0aGUgSFZTLiAqLworCXZjNF9kbGlz dF93cml0ZSh2YzRfc3RhdGUsIDB4YzBjMGMwYzApOworCisJLyogUG9pbnRlciBXb3JkIDA6IFJH QiAvIFkgUG9pbnRlciAqLworCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUsIGJvLT5wYWRkciAr IG9mZnNldCk7CisKKwkvKiBQb2ludGVyIENvbnRleHQgV29yZCAwOiBXcml0dGVuIGJ5IHRoZSBI VlMgKi8KKwl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLCAweGMwYzBjMGMwKTsKKworCS8qIFBp dGNoIHdvcmQgMDogUG9pbnRlciAwIFBpdGNoICovCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0 ZSwKKwkJCVZDNF9TRVRfRklFTEQoZmItPnBpdGNoZXNbMF0sIFNDQUxFUl9TUkNfUElUQ0gpKTsK KworCXZjNF9zdGF0ZS0+ZGxpc3RbY3RsMF9vZmZzZXRdIHw9CisJCVZDNF9TRVRfRklFTEQodmM0 X3N0YXRlLT5kbGlzdF9jb3VudCwgU0NBTEVSX0NUTDBfU0laRSk7CisKKwlyZXR1cm4gMDsKK30K KworLyogSWYgYSBtb2Rlc2V0IGludm9sdmVzIGNoYW5naW5nIHRoZSBzZXR1cCBvZiBhIHBsYW5l LCB0aGUgYXRvbWljCisgKiBpbmZyYXN0cnVjdHVyZSB3aWxsIGNhbGwgdGhpcyB0byB2YWxpZGF0 ZSBhIHByb3Bvc2VkIHBsYW5lIHNldHVwLgorICogSG93ZXZlciwgaWYgYSBwbGFuZSBpc24ndCBn ZXR0aW5nIHVwZGF0ZWQsIHRoaXMgKGFuZCB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdmM0X3BsYW5l X2F0b21pY191cGRhdGUpIHdvbid0IGdldCBjYWxsZWQuICBUaHVzLCB3ZQorICogY29tcHV0ZSB0 aGUgZGxpc3QgaGVyZSBhbmQgaGF2ZSBhbGwgYWN0aXZlIHBsYW5lIGRsaXN0cyBnZXQgdXBkYXRl ZAorICogaW4gdGhlIENSVEMncyBmbHVzaC4KKyAqLworc3RhdGljIGludCB2YzRfcGxhbmVfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0g dG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRlKTsKKworCXZjNF9zdGF0ZS0+ZGxpc3RfY291bnQgPSAw OworCisJaWYgKHBsYW5lX2VuYWJsZWQoc3RhdGUpKQorCQlyZXR1cm4gdmM0X3BsYW5lX21vZGVf c2V0KHBsYW5lLCBzdGF0ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg dmM0X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwkvKiBObyBjb250ZW50cyBo ZXJlLiAgU2luY2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBpbiB0aGUgQ1JUQydzCisJICogZGxpc3Qg d2Ugc2hvdWxkIGJlIHN0b3JlZCwgb3VyIGRsaXN0IGlzIHVwbG9hZGVkIHRvIHRoZQorCSAqIGhh cmR3YXJlIHdpdGggdmM0X3BsYW5lX3dyaXRlX2RsaXN0KCkgYXQgQ1JUQyBhdG9taWNfZmx1c2gK KwkgKiB0aW1lLgorCSAqLworfQorCit1MzIgdmM0X3BsYW5lX3dyaXRlX2RsaXN0KHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLCB1MzIgX19pb21lbSAqZGxpc3QpCit7CisJc3RydWN0IHZjNF9wbGFu ZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJ aW50IGk7CisKKwkvKiBDYW4ndCBtZW1jcHlfdG9pbygpIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUg MzItYml0IHdyaXRlcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmM0X3N0YXRlLT5kbGlzdF9jb3Vu dDsgaSsrKQorCQl3cml0ZWwodmM0X3N0YXRlLT5kbGlzdFtpXSwgJmRsaXN0W2ldKTsKKworCXJl dHVybiB2YzRfc3RhdGUtPmRsaXN0X2NvdW50OworfQorCit1MzIgdmM0X3BsYW5lX2RsaXN0X3Np emUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9z dGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRlKTsKKworCXJldHVybiB2 YzRfc3RhdGUtPmRsaXN0X2NvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9oZWxwZXJfZnVuY3MgdmM0X3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkucHJlcGFyZV9mYiA9 IE5VTEwsCisJLmNsZWFudXBfZmIgPSBOVUxMLAorCS5hdG9taWNfY2hlY2sgPSB2YzRfcGxhbmVf YXRvbWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlID0gdmM0X3BsYW5lX2F0b21pY191cGRhdGUs Cit9OworCitzdGF0aWMgdm9pZCB2YzRfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKK3sKKwlkcm1fcGxhbmVfaGVscGVyX2Rpc2FibGUocGxhbmUpOworCWRybV9wbGFuZV9j bGVhbnVwKHBsYW5lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg dmM0X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91 cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxl X3BsYW5lLAorCS5kZXN0cm95ID0gdmM0X3BsYW5lX2Rlc3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9 IE5VTEwsCisJLnJlc2V0ID0gdmM0X3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gdmM0X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSB2YzRfcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0cnVjdCBkcm1fcGxhbmUgKnZjNF9w bGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJIGVudW0gZHJtX3BsYW5lX3R5 cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5VTEw7CisJc3RydWN0IHZj NF9wbGFuZSAqdmM0X3BsYW5lOworCXUzMiBmb3JtYXRzW0FSUkFZX1NJWkUoaHZzX2Zvcm1hdHMp XTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpOworCisJdmM0X3BsYW5lID0gZGV2bV9remFs bG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNF9wbGFuZSksCisJCQkJIEdGUF9LRVJORUwpOworCWlm ICghdmM0X3BsYW5lKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShodnNfZm9ybWF0cyk7IGkrKykKKwkJZm9ybWF0c1tp XSA9IGh2c19mb3JtYXRzW2ldLmRybTsKKwlwbGFuZSA9ICZ2YzRfcGxhbmUtPmJhc2U7CisJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgcGxhbmUsIDB4ZmYsCisJCQkJICAgICAg ICZ2YzRfcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0 cyksCisJCQkJICAgICAgIHR5cGUpOworCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZ2 YzRfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBwbGFuZTsKK2ZhaWw6CisJaWYgKHBs YW5lKQorCQl2YzRfcGxhbmVfZGVzdHJveShwbGFuZSk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQp OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oIGIvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjBlZmY2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9y ZWdzLmgKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IMKpIDIwMTQtMjAxNSBC cm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBWQzRfTUFTSyho aWdoLCBsb3cpICgoKDEgPDwgKChoaWdoKSAtIChsb3cpICsgMSkpIC0gMSkgPDwgKGxvdykpCisv KiBVc2luZyB0aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAqLworI2RlZmlu ZSBWQzRfU0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQl1aW50 MzJfdCBmaWVsZHZhbCA9ICh2YWx1ZSkgPDwgZmllbGQjI19TSElGVDsJCVwKKwkJV0FSTl9PTigo ZmllbGR2YWwgJiB+ZmllbGQjI19NQVNLKSAhPSAwKTsJCVwKKwkJZmllbGR2YWwgJiBmaWVsZCMj X01BU0s7CQkJCVwKKwkgfSkKKworI2RlZmluZSBWQzRfR0VUX0ZJRUxEKHdvcmQsIGZpZWxkKSAo KCh3b3JkKSAmIGZpZWxkIyNfTUFTSykgPj4JCVwKKwkJCQkgICAgZmllbGQjI19TSElGVCkKKwor I2RlZmluZSBWM0RfSURFTlQwICAgMHgwMDAwMAorIyBkZWZpbmUgVjNEX0VYUEVDVEVEX0lERU5U MCBcCisJKCgyIDw8IDI0KSB8IFwKKwkoJ1YnIDw8IDApIHwgXAorCSgnMycgPDwgOCkgfCBcCisJ ICgnRCcgPDwgMTYpKQorCisjZGVmaW5lIFYzRF9JREVOVDEgICAweDAwMDA0CisvKiBNdWx0aXBs ZXMgb2YgMWtiICovCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAgICAgICAg ICAgICAgICAgICAgVkM0X01BU0soMzEsIDI4KQorIyBkZWZpbmUgVjNEX0lERU5UMV9WUE1fU0la RV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDI4CisjIGRlZmluZSBWM0RfSURFTlQxX05TRU1f TUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMjMsIDE2KQorIyBkZWZpbmUg VjNEX0lERU5UMV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjIGRlZmlu ZSBWM0RfSURFTlQxX1RVUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0so MTUsIDEyKQorIyBkZWZpbmUgVjNEX0lERU5UMV9UVVBTX1NISUZUICAgICAgICAgICAgICAgICAg ICAgICAgIDEyCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAgICAgICAg ICAgICAgICAgVkM0X01BU0soMTEsIDgpCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfU0hJRlQg ICAgICAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xDX01BU0sg ICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDcsIDQpCisjIGRlZmluZSBWM0RfSURF TlQxX05TTENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUgVjNEX0lE RU5UMV9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMsIDApCisj IGRlZmluZSBWM0RfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAor CisjZGVmaW5lIFYzRF9JREVOVDIgICAweDAwMDA4CisjZGVmaW5lIFYzRF9TQ1JBVENIICAweDAw MDEwCisjZGVmaW5lIFYzRF9MMkNBQ1RMICAweDAwMDIwCisjIGRlZmluZSBWM0RfTDJDQUNUTF9M MkNDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgZGVmaW5lIFYzRF9M MkNBQ1RMX0wyQ0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyBkZWZp bmUgVjNEX0wyQ0FDVExfTDJDRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDAp CisKKyNkZWZpbmUgVjNEX1NMQ0FDVEwgIDB4MDAwMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1Qx Q0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygyNywgMjQpCisjIGRlZmlu ZSBWM0RfU0xDQUNUTF9UMUNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyMgZGVm aW5lIFYzRF9TTENBQ1RMX1QwQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFT SygxOSwgMTYpCisjIGRlZmluZSBWM0RfU0xDQUNUTF9UMENDX1NISUZUICAgICAgICAgICAgICAg ICAgICAgICAgMTYKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19NQVNLICAgICAgICAgICAgICAg ICAgICAgICAgICBWQzRfTUFTSygxMSwgOCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19TSElG VCAgICAgICAgICAgICAgICAgICAgICAgICA4CisjIGRlZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFT SyAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9T TENBQ1RMX0lDQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNE X0lOVENUTCAgIDB4MDAwMzAKKyNkZWZpbmUgVjNEX0lOVEVOQSAgIDB4MDAwMzQKKyNkZWZpbmUg VjNEX0lOVERJUyAgIDB4MDAwMzgKKyMgZGVmaW5lIFYzRF9JTlRfU1BJTExVU0UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorIyBkZWZpbmUgVjNEX0lOVF9PVVRPTUVNICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjIGRlZmluZSBWM0RfSU5UX0ZM RE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyMgZGVmaW5lIFYz RF9JTlRfRlJET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisj ZGVmaW5lIFYzRF9DVDBDUyAgICAweDAwMTAwCisjZGVmaW5lIFYzRF9DVDFDUyAgICAweDAwMTA0 CisjZGVmaW5lIFYzRF9DVE5DUyhuKSAoVjNEX0NUMENTICsgNCAqIG4pCisjIGRlZmluZSBWM0Rf Q1RSU1RBICAgICAgKDEgPDwgMTUpCisjIGRlZmluZSBWM0RfQ1RTRU1BICAgICAgKDEgPDwgMTIp CisjIGRlZmluZSBWM0RfQ1RSVFNEICAgICAgKDEgPDwgOCkKKyMgZGVmaW5lIFYzRF9DVFJVTiAg ICAgICAoMSA8PCA1KQorIyBkZWZpbmUgVjNEX0NUU1VCUyAgICAgICgxIDw8IDQpCisjIGRlZmlu ZSBWM0RfQ1RFUlIgICAgICAgKDEgPDwgMykKKyMgZGVmaW5lIFYzRF9DVE1PREUgICAgICAoMSA8 PCAwKQorCisjZGVmaW5lIFYzRF9DVDBFQSAgICAweDAwMTA4CisjZGVmaW5lIFYzRF9DVDFFQSAg ICAweDAwMTBjCisjZGVmaW5lIFYzRF9DVE5FQShuKSAoVjNEX0NUMEVBICsgNCAqIChuKSkKKyNk ZWZpbmUgVjNEX0NUMENBICAgIDB4MDAxMTAKKyNkZWZpbmUgVjNEX0NUMUNBICAgIDB4MDAxMTQK KyNkZWZpbmUgVjNEX0NUTkNBKG4pIChWM0RfQ1QwQ0EgKyA0ICogKG4pKQorI2RlZmluZSBWM0Rf Q1QwMFJBMCAgMHgwMDExOAorI2RlZmluZSBWM0RfQ1QwMVJBMCAgMHgwMDExYworI2RlZmluZSBW M0RfQ1ROUkEwKG4pIChWM0RfQ1QwMFJBMCArIDQgKiAobikpCisjZGVmaW5lIFYzRF9DVDBMQyAg ICAweDAwMTIwCisjZGVmaW5lIFYzRF9DVDFMQyAgICAweDAwMTI0CisjZGVmaW5lIFYzRF9DVE5M QyhuKSAoVjNEX0NUMExDICsgNCAqIChuKSkKKyNkZWZpbmUgVjNEX0NUMFBDICAgIDB4MDAxMjgK KyNkZWZpbmUgVjNEX0NUMVBDICAgIDB4MDAxMmMKKyNkZWZpbmUgVjNEX0NUTlBDKG4pIChWM0Rf Q1QwUEMgKyA0ICogKG4pKQorCisjZGVmaW5lIFYzRF9QQ1MgICAgICAweDAwMTMwCisjIGRlZmlu ZSBWM0RfQk1PT00gICAgICAgKDEgPDwgOCkKKyMgZGVmaW5lIFYzRF9STUJVU1kgICAgICAoMSA8 PCAzKQorIyBkZWZpbmUgVjNEX1JNQUNUSVZFICAgICgxIDw8IDIpCisjIGRlZmluZSBWM0RfQk1C VVNZICAgICAgKDEgPDwgMSkKKyMgZGVmaW5lIFYzRF9CTUFDVElWRSAgICAoMSA8PCAwKQorCisj ZGVmaW5lIFYzRF9CRkMgICAgICAweDAwMTM0CisjZGVmaW5lIFYzRF9SRkMgICAgICAweDAwMTM4 CisjZGVmaW5lIFYzRF9CUENBICAgICAweDAwMzAwCisjZGVmaW5lIFYzRF9CUENTICAgICAweDAw MzA0CisjZGVmaW5lIFYzRF9CUE9BICAgICAweDAwMzA4CisjZGVmaW5lIFYzRF9CUE9TICAgICAw eDAwMzBjCisjZGVmaW5lIFYzRF9CWENGICAgICAweDAwMzEwCisjZGVmaW5lIFYzRF9TUVJTVjAg ICAweDAwNDEwCisjZGVmaW5lIFYzRF9TUVJTVjEgICAweDAwNDE0CisjZGVmaW5lIFYzRF9TUUNO VEwgICAweDAwNDE4CisjZGVmaW5lIFYzRF9TUlFQQyAgICAweDAwNDMwCisjZGVmaW5lIFYzRF9T UlFVQSAgICAweDAwNDM0CisjZGVmaW5lIFYzRF9TUlFVTCAgICAweDAwNDM4CisjZGVmaW5lIFYz RF9TUlFDUyAgICAweDAwNDNjCisjZGVmaW5lIFYzRF9WUEFDTlRMICAweDAwNTAwCisjZGVmaW5l IFYzRF9WUE1CQVNFICAweDAwNTA0CisjZGVmaW5lIFYzRF9QQ1RSQyAgICAweDAwNjcwCisjZGVm aW5lIFYzRF9QQ1RSRSAgICAweDAwNjc0CisjZGVmaW5lIFYzRF9QQ1RSMCAgICAweDAwNjgwCisj ZGVmaW5lIFYzRF9QQ1RSUzAgICAweDAwNjg0CisjZGVmaW5lIFYzRF9QQ1RSMSAgICAweDAwNjg4 CisjZGVmaW5lIFYzRF9QQ1RSUzEgICAweDAwNjhjCisjZGVmaW5lIFYzRF9QQ1RSMiAgICAweDAw NjkwCisjZGVmaW5lIFYzRF9QQ1RSUzIgICAweDAwNjk0CisjZGVmaW5lIFYzRF9QQ1RSMyAgICAw eDAwNjk4CisjZGVmaW5lIFYzRF9QQ1RSUzMgICAweDAwNjljCisjZGVmaW5lIFYzRF9QQ1RSNCAg ICAweDAwNmEwCisjZGVmaW5lIFYzRF9QQ1RSUzQgICAweDAwNmE0CisjZGVmaW5lIFYzRF9QQ1RS NSAgICAweDAwNmE4CisjZGVmaW5lIFYzRF9QQ1RSUzUgICAweDAwNmFjCisjZGVmaW5lIFYzRF9Q Q1RSNiAgICAweDAwNmIwCisjZGVmaW5lIFYzRF9QQ1RSUzYgICAweDAwNmI0CisjZGVmaW5lIFYz RF9QQ1RSNyAgICAweDAwNmI4CisjZGVmaW5lIFYzRF9QQ1RSUzcgICAweDAwNmJjCisjZGVmaW5l IFYzRF9QQ1RSOCAgICAweDAwNmMwCisjZGVmaW5lIFYzRF9QQ1RSUzggICAweDAwNmM0CisjZGVm aW5lIFYzRF9QQ1RSOSAgICAweDAwNmM4CisjZGVmaW5lIFYzRF9QQ1RSUzkgICAweDAwNmNjCisj ZGVmaW5lIFYzRF9QQ1RSMTAgICAweDAwNmQwCisjZGVmaW5lIFYzRF9QQ1RSUzEwICAweDAwNmQ0 CisjZGVmaW5lIFYzRF9QQ1RSMTEgICAweDAwNmQ4CisjZGVmaW5lIFYzRF9QQ1RSUzExICAweDAw NmRjCisjZGVmaW5lIFYzRF9QQ1RSMTIgICAweDAwNmUwCisjZGVmaW5lIFYzRF9QQ1RSUzEyICAw eDAwNmU0CisjZGVmaW5lIFYzRF9QQ1RSMTMgICAweDAwNmU4CisjZGVmaW5lIFYzRF9QQ1RSUzEz ICAweDAwNmVjCisjZGVmaW5lIFYzRF9QQ1RSMTQgICAweDAwNmYwCisjZGVmaW5lIFYzRF9QQ1RS UzE0ICAweDAwNmY0CisjZGVmaW5lIFYzRF9QQ1RSMTUgICAweDAwNmY4CisjZGVmaW5lIFYzRF9Q Q1RSUzE1ICAweDAwNmZjCisjZGVmaW5lIFYzRF9CR0UgICAgICAweDAwZjAwCisjZGVmaW5lIFYz RF9GREJHTyAgICAweDAwZjA0CisjZGVmaW5lIFYzRF9GREJHQiAgICAweDAwZjA4CisjZGVmaW5l IFYzRF9GREJHUiAgICAweDAwZjBjCisjZGVmaW5lIFYzRF9GREJHUyAgICAweDAwZjEwCisjZGVm aW5lIFYzRF9FUlJTVEFUICAweDAwZjIwCisKKyNkZWZpbmUgUFZfQ09OVFJPTAkJCQkweDAwCisj IGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9NQVNLCQkJVkM0X01BU0soMjMsIDIxKQorIyBkZWZp bmUgUFZfQ09OVFJPTF9GT1JNQVRfU0hJRlQJCTIxCisjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1B VF8yNAkJCTAKKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTYJCTEKKyMgZGVmaW5l IFBWX0NPTlRST0xfRk9STUFUX0RTSUNfMTYJCTIKKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFU X0RTSVZfMTgJCTMKKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMjQJCTQKKworIyBk ZWZpbmUgUFZfQ09OVFJPTF9GSUZPX0xFVkVMX01BU0sJCVZDNF9NQVNLKDIwLCAxNSkKKyMgZGVm aW5lIFBWX0NPTlRST0xfRklGT19MRVZFTF9TSElGVAkJMTUKKyMgZGVmaW5lIFBWX0NPTlRST0xf Q0xSX0FUX1NUQVJUCQkoMSA8PCAxNCkKKyMgZGVmaW5lIFBWX0NPTlRST0xfVFJJR0dFUl9VTkRF UkZMT1cJCSgxIDw8IDEzKQorIyBkZWZpbmUgUFZfQ09OVFJPTF9XQUlUX0hTVEFSVAkJCSgxIDw8 IDEyKQorIyBkZWZpbmUgUFZfQ09OVFJPTF9DTEtfU0VMRUNUX0RTSQkJMAorIyBkZWZpbmUgUFZf Q09OVFJPTF9DTEtfU0VMRUNUX0RQSV9TTUlfSERNSQkxCisjIGRlZmluZSBQVl9DT05UUk9MX0NM S19TRUxFQ1RfTUFTSwkJVkM0X01BU0soMywgMikKKyMgZGVmaW5lIFBWX0NPTlRST0xfQ0xLX1NF TEVDVF9TSElGVAkJMgorIyBkZWZpbmUgUFZfQ09OVFJPTF9GSUZPX0NMUgkJCSgxIDw8IDEpCisj IGRlZmluZSBQVl9DT05UUk9MX0VOCQkJCSgxIDw8IDApCisKKyNkZWZpbmUgUFZfVl9DT05UUk9M CQkJCTB4MDQKKyMgZGVmaW5lIFBWX1ZDT05UUk9MX0NPTlRJTlVPVVMJCQkoMSA8PCAxKQorIyBk ZWZpbmUgUFZfVkNPTlRST0xfVklERU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIFBWX1ZTWU5DRAkJ CQkweDA4CisKKyNkZWZpbmUgUFZfSE9SWkEJCQkJMHgwYworIyBkZWZpbmUgUFZfSE9SWkFfSEJQ X01BU0sJCQlWQzRfTUFTSygzMSwgMTYpCisjIGRlZmluZSBQVl9IT1JaQV9IQlBfU0hJRlQJCQkx NgorIyBkZWZpbmUgUFZfSE9SWkFfSFNZTkNfTUFTSwkJCVZDNF9NQVNLKDE1LCAwKQorIyBkZWZp bmUgUFZfSE9SWkFfSFNZTkNfU0hJRlQJCQkwCisKKyNkZWZpbmUgUFZfSE9SWkIJCQkJMHgxMAor IyBkZWZpbmUgUFZfSE9SWkJfSEZQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYpCisjIGRlZmluZSBQ Vl9IT1JaQl9IRlBfU0hJRlQJCQkxNgorIyBkZWZpbmUgUFZfSE9SWkJfSEFDVElWRV9NQVNLCQkJ VkM0X01BU0soMTUsIDApCisjIGRlZmluZSBQVl9IT1JaQl9IQUNUSVZFX1NISUZUCQkJMAorCisj ZGVmaW5lIFBWX1ZFUlRBCQkJCTB4MTQKKyMgZGVmaW5lIFBWX1ZFUlRBX1ZCUF9NQVNLCQkJVkM0 X01BU0soMzEsIDE2KQorIyBkZWZpbmUgUFZfVkVSVEFfVkJQX1NISUZUCQkJMTYKKyMgZGVmaW5l IFBWX1ZFUlRBX1ZTWU5DX01BU0sJCQlWQzRfTUFTSygxNSwgMCkKKyMgZGVmaW5lIFBWX1ZFUlRB X1ZTWU5DX1NISUZUCQkJMAorCisjZGVmaW5lIFBWX1ZFUlRCCQkJCTB4MTgKKyMgZGVmaW5lIFBW X1ZFUlRCX1ZGUF9NQVNLCQkJVkM0X01BU0soMzEsIDE2KQorIyBkZWZpbmUgUFZfVkVSVEJfVkZQ X1NISUZUCQkJMTYKKyMgZGVmaW5lIFBWX1ZFUlRCX1ZBQ1RJVkVfTUFTSwkJCVZDNF9NQVNLKDE1 LCAwKQorIyBkZWZpbmUgUFZfVkVSVEJfVkFDVElWRV9TSElGVAkJCTAKKworI2RlZmluZSBQVl9W RVJUQV9FVkVOCQkJCTB4MWMKKyNkZWZpbmUgUFZfVkVSVEJfRVZFTgkJCQkweDIwCisKKyNkZWZp bmUgUFZfSU5URU4JCQkJMHgyNAorI2RlZmluZSBQVl9JTlRTVEFUCQkJCTB4MjgKKyMgZGVmaW5l IFBWX0lOVF9WSURfSURMRQkJCSgxIDw8IDkpCisjIGRlZmluZSBQVl9JTlRfVkZQX0VORAkJCQko MSA8PCA4KQorIyBkZWZpbmUgUFZfSU5UX1ZGUF9TVEFSVAkJCSgxIDw8IDcpCisjIGRlZmluZSBQ Vl9JTlRfVkFDVF9TVEFSVAkJCSgxIDw8IDYpCisjIGRlZmluZSBQVl9JTlRfVkJQX1NUQVJUCQkJ KDEgPDwgNSkKKyMgZGVmaW5lIFBWX0lOVF9WU1lOQ19TVEFSVAkJCSgxIDw8IDQpCisjIGRlZmlu ZSBQVl9JTlRfSEZQX1NUQVJUCQkJKDEgPDwgMykKKyMgZGVmaW5lIFBWX0lOVF9IQUNUX1NUQVJU CQkJKDEgPDwgMikKKyMgZGVmaW5lIFBWX0lOVF9IQlBfU1RBUlQJCQkoMSA8PCAxKQorIyBkZWZp bmUgUFZfSU5UX0hTWU5DX1NUQVJUCQkJKDEgPDwgMCkKKworI2RlZmluZSBQVl9TVEFUCQkJCQkw eDJjCisKKyNkZWZpbmUgUFZfSEFDVF9BQ1QJCQkJMHgzMAorCisjZGVmaW5lIFNDQUxFUl9ESVNQ Q1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisvKiBHbG9iYWwgcmVnaXN0 ZXIgZm9yIGNsb2NrIGdhdGluZyB0aGUgSFZTICovCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxf RU5BQkxFCQkJKDEgPDwgMzEpCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMkVJU0xVUgkJ KDEgPDwgMTUpCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMUVJU0xVUgkJKDEgPDwgMTQp CisvKiBFbmFibGVzIERpc3BsYXkgMCBzaG9ydCBsaW5lIGFuZCB1bmRlcnJ1biBjb250cmlidXRp b24gdG8KKyAqIFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMC4gIE5vdGUgdGhhdCBzaG9ydCBmcmFt ZSBjb250cmlidXRpb25zIGFyZQorICogYWx3YXlzIGVuYWJsZWQuCisgKi8KKyMgZGVmaW5lIFND QUxFUl9ESVNQQ1RSTF9EU1AwRUlTTFVSCQkoMSA8PCAxMykKKyMgZGVmaW5lIFNDQUxFUl9ESVNQ Q1RSTF9EU1AyRUlFT0xOCQkoMSA8PCAxMikKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1Ay RUlFT0YJCSgxIDw8IDExKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDFFSUVPTE4JCSgx IDw8IDEwKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDFFSUVPRgkJKDEgPDwgOSkKKy8q IEVuYWJsZXMgRGlzcGxheSAwIGVuZC1vZi1saW5lLU4gY29udHJpYnV0aW9uIHRvCisgKiBTQ0FM RVJfRElTUFNUQVRfSVJRRElTUDAKKyAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDBF SUVPTE4JCSgxIDw8IDgpCisvKiBFbmFibGVzIERpc3BsYXkgMCBFT0YgY29udHJpYnV0aW9uIHRv IFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMCAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RT UDBFSUVPRgkJKDEgPDwgNykKKworIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX1NMVlJERUlSUQkJ KDEgPDwgNikKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9TTFZXUkVJUlEJCSgxIDw8IDUpCisj IGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRE1BRUlSUQkJKDEgPDwgNCkKKyMgZGVmaW5lIFNDQUxF Ul9ESVNQQ1RSTF9ESVNQMkVJUlEJCSgxIDw8IDMpCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxf RElTUDFFSVJRCQkoMSA8PCAyKQorLyogRW5hYmxlcyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0 aGUgZW5hYmxlZCBFT0YvRU9MTi9FSVNMVVIKKyAqIGJpdHMgYW5kIHNob3J0IGZyYW1lcy4uCisg Ki8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9ESVNQMEVJUlEJCSgxIDw8IDEpCisvKiBFbmFi bGVzIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHNjYWxlciBwcm9maWxlciBpbnRlcnJ1cHQuICov CisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfU0NMRUlSUQkJKDEgPDwgMCkKKworI2RlZmluZSBT Q0FMRVJfRElTUFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorIyBkZWZp bmUgU0NBTEVSX0RJU1BTVEFUX0NPQkxPVzIJCSgxIDw8IDI5KQorIyBkZWZpbmUgU0NBTEVSX0RJ U1BTVEFUX0VPTE4yCQkJKDEgPDwgMjgpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNGUkFN RTIJCSgxIDw8IDI3KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElORTIJCSgxIDw8IDI2 KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VVRkxPVzIJCSgxIDw8IDI1KQorIyBkZWZpbmUg U0NBTEVSX0RJU1BTVEFUX0VPRjIJCQkoMSA8PCAyNCkKKworIyBkZWZpbmUgU0NBTEVSX0RJU1BT VEFUX0NPQkxPVzEJCSgxIDw8IDIxKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPTE4xCQkJ KDEgPDwgMjApCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNGUkFNRTEJCSgxIDw8IDE5KQor IyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElORTEJCSgxIDw8IDE4KQorIyBkZWZpbmUgU0NB TEVSX0RJU1BTVEFUX0VVRkxPVzEJCSgxIDw8IDE3KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFU X0VPRjEJCQkoMSA8PCAxNikKKworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX1JFU1BfTUFTSwkJ VkM0X01BU0soMTUsIDE0KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX1JFU1BfU0hJRlQJCTE0 CisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfUkVTUF9PS0FZCQkwCisjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfUkVTUF9FWE9LQVkJCTEKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQX1NM VkVSUgkJMgorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX1JFU1BfREVDRVJSCQkzCisKKyMgZGVm aW5lIFNDQUxFUl9ESVNQU1RBVF9DT0JMT1cwCQkoMSA8PCAxMykKKy8qIFNldCB3aGVuIHRoZSBE SVNQRU9MTiBsaW5lIGlzIGRvbmUgY29tcG9zaXRpbmcuICovCisjIGRlZmluZSBTQ0FMRVJfRElT UFNUQVRfRU9MTjAJCQkoMSA8PCAxMikKKy8qIFNldCB3aGVuIFZTVEFSVCBpcyBzZWVuIGJ1dCB0 aGVyZSBhcmUgc3RpbGwgcGl4ZWxzIGluIHRoZSBjdXJyZW50CisgKiBvdXRwdXQgbGluZS4KKyAq LworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTRlJBTUUwCQkoMSA8PCAxMSkKKy8qIFNldCB3 aGVuIEhTVEFSVCBpcyBzZWVuIGJ1dCB0aGVyZSBhcmUgc3RpbGwgcGl4ZWxzIGluIHRoZSBjdXJy ZW50CisgKiBvdXRwdXQgbGluZS4KKyAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTTElO RTAJCSgxIDw8IDEwKQorLyogU2V0IHdoZW4gdGhlIHRoZSBkb3duc3RyZWFtIHRyaWVzIHRvIHJl YWQgZnJvbSB0aGUgZGlzcGxheSBGSUZPCisgKiB3aGlsZSBpdCdzIGVtcHR5LgorICovCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfRVVGTE9XMAkJKDEgPDwgOSkKKy8qIFNldCB3aGVuIHRoZSBk aXNwbGF5IG1vZGUgY2hhbmdlcyBmcm9tIFJVTiB0byBFT0YgKi8KKyMgZGVmaW5lIFNDQUxFUl9E SVNQU1RBVF9FT0YwCQkJKDEgPDwgOCkKKworLyogU2V0IG9uIEFYSSBpbnZhbGlkIERNQSBJRCBl cnJvci4gKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9ETUFfRVJST1IJCSgxIDw8IDcpCisv KiBTZXQgb24gQVhJIHNsYXZlIHJlYWQgZGVjb2RlIGVycm9yICovCisjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfSVJRU0xWUkQJCSgxIDw8IDYpCisvKiBTZXQgb24gQVhJIHNsYXZlIHdyaXRlIGRl Y29kZSBlcnJvciAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUVNMVldSCQkoMSA8PCA1 KQorLyogU2V0IHdoZW4gU0NBTEVSX0RJU1BTVEFUX0RNQV9FUlJPUiBpcyBzZXQsIG9yCisgKiBT Q0FMRVJfRElTUFNUQVRfUkVTUF9FUlJPUiBpcyBub3QgU0NBTEVSX0RJU1BTVEFUX1JFU1BfT0tB WS4KKyAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUURNQQkJCSgxIDw8IDQpCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRRElTUDIJCSgxIDw8IDMpCisjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfSVJRRElTUDEJCSgxIDw8IDIpCisvKiBTZXQgd2hlbiBhbnkgb2YgdGhlIEVPRi9F T0xOL0VTRlJBTUUvRVNMSU5FIGJpdHMgYXJlIHNldCBhbmQgdGhlaXIKKyAqIGNvcnJlc3BvbmRp bmcgaW50ZXJydXB0IGJpdCBpcyBlbmFibGVkIGluIERJU1BDVFJMLgorICovCisjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRfSVJRRElTUDAJCSgxIDw8IDEpCisvKiBPbiByZWFkLCB0aGUgcHJvZmls ZXIgaW50ZXJydXB0LiAgT24gd3JpdGUsIGNsZWFyICphbGwqIGludGVycnVwdCBiaXRzLiAqLwor IyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUVNDTAkJCSgxIDw8IDApCisKKyNkZWZpbmUgU0NB TEVSX0RJU1BJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUg U0NBTEVSX0RJU1BFQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKKyNkZWZp bmUgU0NBTEVSX0RJU1BQUk9GICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNk ZWZpbmUgU0NBTEVSX0RJU1BESVRIRVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQK KyNkZWZpbmUgU0NBTEVSX0RJU1BFT0xOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw MTgKKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MDAwMjAKKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUMSAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwMjQKKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUMiAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAwMjgKKyNkZWZpbmUgU0NBTEVSX0RJU1BMU1RBVCAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMmMKKyNkZWZpbmUgU0NBTEVSX0RJU1BMSVNUWCh4KQkJCShTQ0FMRVJfRElT UExJU1QwICsJXAorCQkJCQkJICh4KSAqIChTQ0FMRVJfRElTUExJU1QxIC0gXAorCQkJCQkJCVND QUxFUl9ESVNQTElTVDApKQorCisjZGVmaW5lIFNDQUxFUl9ESVNQTEFDVDAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIFNDQUxFUl9ESVNQTEFDVDEgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIFNDQUxFUl9ESVNQTEFDVDIgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTDAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxY X0VOQUJMRQkJKDEgPDwgMzEpCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxYX1JFU0VUCQkJKDEg PDwgMzApCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxYX1dJRFRIX01BU0sJCVZDNF9NQVNLKDIz LCAxMikKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEhfU0hJRlQJCTEyCisjIGRlZmlu ZSBTQ0FMRVJfRElTUENUUkxYX0hFSUdIVF9NQVNLCQlWQzRfTUFTSygxMSwgMCkKKyMgZGVmaW5l IFNDQUxFUl9ESVNQQ1RSTFhfSEVJR0hUX1NISUZUCQkwCisKKyNkZWZpbmUgU0NBTEVSX0RJU1BC S0dORDAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgU0NBTEVSX0RJ U1BTVEFUMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKyNkZWZpbmUgU0NBTEVS X0RJU1BCQVNFMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKKyMgZGVmaW5lIFND QUxFUl9ESVNQU1RBVFhfTU9ERV9NQVNLCQlWQzRfTUFTSygzMSwgMzApCisjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRYX01PREVfU0hJRlQJCTMwCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX01P REVfRElTQUJMRUQJCTAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9JTklUCQkxCisj IGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX01PREVfUlVOCQkyCisjIGRlZmluZSBTQ0FMRVJfRElT UFNUQVRYX01PREVfRU9GCQkzCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX0ZVTEwJCQkoMSA8 PCAyOSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfRU1QVFkJCQkoMSA8PCAyOCkKKyNkZWZp bmUgU0NBTEVSX0RJU1BDVFJMMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNk ZWZpbmUgU0NBTEVSX0RJU1BCS0dORDEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQK KyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw NTgKKyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWCh4KQkJCShTQ0FMRVJfRElTUFNUQVQwICsgICAg ICAgIFwKKwkJCQkJCSAoeCkgKiAoU0NBTEVSX0RJU1BTVEFUMSAtIFwKKwkJCQkJCQlTQ0FMRVJf RElTUFNUQVQwKSkKKyNkZWZpbmUgU0NBTEVSX0RJU1BCQVNFMSAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwNWMKKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMMiAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMWCh4KQkJCShTQ0FMRVJf RElTUENUUkwwICsgICAgICAgIFwKKwkJCQkJCSAoeCkgKiAoU0NBTEVSX0RJU1BDVFJMMSAtIFwK KwkJCQkJCQlTQ0FMRVJfRElTUENUUkwwKSkKKyNkZWZpbmUgU0NBTEVSX0RJU1BCS0dORDIgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKKyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUMiAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKyNkZWZpbmUgU0NBTEVSX0RJU1BCQVNF MiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNmMKKyNkZWZpbmUgU0NBTEVSX0RJU1BB TFBIQTIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgU0NBTEVSX0dB TUFERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgU0NBTEVS X0dBTURBVEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgU0NB TEVSX0RMSVNUX1NUQVJUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUg U0NBTEVSX0RMSVNUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworI2Rl ZmluZSBWQzRfSERNSV9DT1JFX1JFVgkJCTB4MDAwCisKKyNkZWZpbmUgVkM0X0hETUlfU1dfUkVT RVRfQ09OVFJPTAkJMHgwMDQKKyMgZGVmaW5lIFZDNF9IRE1JX1NXX1JFU0VUX0ZPUk1BVF9ERVRF Q1QJKDEgPDwgMSkKKyMgZGVmaW5lIFZDNF9IRE1JX1NXX1JFU0VUX0hETUkJCQkoMSA8PCAwKQor CisjZGVmaW5lIFZDNF9IRE1JX0hPVFBMVUdfSU5UCQkJMHgwMDgKKworI2RlZmluZSBWQzRfSERN SV9IT1RQTFVHCQkJMHgwMGMKKyMgZGVmaW5lIFZDNF9IRE1JX0hPVFBMVUdfQ09OTkVDVEVECQko MSA8PCAwKQorCisjZGVmaW5lIFZDNF9IRE1JX1JBTV9QQUNLRVRfQ09ORklHCQkweDBhMAorIyBk ZWZpbmUgVkM0X0hETUlfUkFNX1BBQ0tFVF9FTkFCTEUJCSgxIDw8IDE2KQorCisjZGVmaW5lIFZD NF9IRE1JX0hPUlpBCQkJCTB4MGM0CisjIGRlZmluZSBWQzRfSERNSV9IT1JaQV9WUE9TCQkJKDEg PDwgMTQpCisjIGRlZmluZSBWQzRfSERNSV9IT1JaQV9IUE9TCQkJKDEgPDwgMTMpCisvKiBIb3Jp em9udGFsIGFjdGl2ZSBwaXhlbHMgKGhkaXNwbGF5KS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1JX0hP UlpBX0hBUF9NQVNLCQlWQzRfTUFTSygxMiwgMCkKKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpBX0hB UF9TSElGVAkJMAorCisjZGVmaW5lIFZDNF9IRE1JX0hPUlpCCQkJCTB4MGM4CisvKiBIb3Jpem9u dGFsIHBhY2sgcG9yY2ggKGh0b3RhbCAtIGhzeW5jX2VuZCkuICovCisjIGRlZmluZSBWQzRfSERN SV9IT1JaQl9IQlBfTUFTSwkJVkM0X01BU0soMjksIDIwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9S WkJfSEJQX1NISUZUCQkyMAorLyogSG9yaXpvbnRhbCBzeW5jIHB1bHNlIChoc3luY19lbmQgLSBo c3luY19zdGFydCkuICovCisjIGRlZmluZSBWQzRfSERNSV9IT1JaQl9IU1BfTUFTSwkJVkM0X01B U0soMTksIDEwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9SWkJfSFNQX1NISUZUCQkxMAorLyogSG9y aXpvbnRhbCBmcm9udCBwb3JjaCAoaHN5bmNfc3RhcnQgLSBoZGlzcGxheSkuICovCisjIGRlZmlu ZSBWQzRfSERNSV9IT1JaQl9IRlBfTUFTSwkJVkM0X01BU0soOSwgMCkKKyMgZGVmaW5lIFZDNF9I RE1JX0hPUlpCX0hGUF9TSElGVAkJMAorCisjZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMCQkJMHgw NWMKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSX0RPTkUJKDEgPDwgMTQpCisj IGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9VU0VfRU1QVFkJCSgxIDw8IDEzKQorIyBkZWZpbmUg VkM0X0hETUlfRklGT19DVExfT05fVkIJCSgxIDw8IDcpCisjIGRlZmluZSBWQzRfSERNSV9GSUZP X0NUTF9SRUNFTlRFUgkJKDEgPDwgNikKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0ZJRk9f UkVTRVQJCSgxIDw8IDUpCisjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9VU0VfUExMX0xPQ0sJ CSgxIDw8IDQpCisjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9JTlZfQ0xLX1hGUgkJKDEgPDwg MykKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0NBUFRVUkVfUFRSCQkoMSA8PCAyKQorIyBk ZWZpbmUgVkM0X0hETUlfRklGT19DVExfVVNFX0ZVTEwJCSgxIDw8IDEpCisjIGRlZmluZSBWQzRf SERNSV9GSUZPX0NUTF9NQVNURVJfU0xBVkVfTgkoMSA8PCAwKQorIyBkZWZpbmUgVkM0X0hETUlf RklGT19WQUxJRF9XUklURV9NQVNLCQkweGVmZmYKKworI2RlZmluZSBWQzRfSERNSV9TQ0hFRFVM RVJfQ09OVFJPTAkJMHgwYzAKKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX01B TlVBTF9GT1JNQVQgKDEgPDwgMTUpCisjIGRlZmluZSBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJP TF9JR05PUkVfVlNZTkNfUFJFRElDVFMgKDEgPDwgNSkKKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVE VUxFUl9DT05UUk9MX1ZFUlRfQUxXQVlTX0tFRVBPVVQJKDEgPDwgMykKKyMgZGVmaW5lIFZDNF9I RE1JX1NDSEVEVUxFUl9DT05UUk9MX0hETUlfQUNUSVZFCSgxIDw8IDEpCisjIGRlZmluZSBWQzRf SERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9NT0RFX0hETUkJKDEgPDwgMCkKKworI2RlZmluZSBWQzRf SERNSV9WRVJUQTAJCQkJMHgwY2MKKyNkZWZpbmUgVkM0X0hETUlfVkVSVEExCQkJCTB4MGQ0Cisv KiBWZXJ0aWNhbCBzeW5jIHB1bHNlICh2c3luY19lbmQgLSB2c3luY19zdGFydCkuICovCisjIGRl ZmluZSBWQzRfSERNSV9WRVJUQV9WU1BfTUFTSwkJVkM0X01BU0soMjQsIDIwKQorIyBkZWZpbmUg VkM0X0hETUlfVkVSVEFfVlNQX1NISUZUCQkyMAorLyogVmVydGljYWwgZnJvbnQgcG9yY2ggKHZz eW5jX3N0YXJ0IC0gdmRpc3BsYXkpLiAqLworIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVkZQX01B U0sJCVZDNF9NQVNLKDE5LCAxMykKKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRBX1ZGUF9TSElGVAkJ MTMKKy8qIFZlcnRpY2FsIGFjdGl2ZSBsaW5lcyAodmRpc3BsYXkpLiAqLworIyBkZWZpbmUgVkM0 X0hETUlfVkVSVEFfVkFMX01BU0sJCVZDNF9NQVNLKDEyLCAwKQorIyBkZWZpbmUgVkM0X0hETUlf VkVSVEFfVkFMX1NISUZUCQkwCisKKyNkZWZpbmUgVkM0X0hETUlfVkVSVEIwCQkJCTB4MGQwCisj ZGVmaW5lIFZDNF9IRE1JX1ZFUlRCMQkJCQkweDBkOAorLyogVmVydGljYWwgc3luYyBwdWxzZSBv ZmZzZXQgKGZvciBpbnRlcmxhY2VkKSAqLworIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJfVlNQT19N QVNLCQlWQzRfTUFTSygyMSwgOSkKKyMgZGVmaW5lIFZDNF9IRE1JX1ZFUlRCX1ZTUE9fU0hJRlQJ CTkKKy8qIFZlcnRpY2FsIHBhY2sgcG9yY2ggKHZ0b3RhbCAtIHZzeW5jX2VuZCkuICovCisjIGRl ZmluZSBWQzRfSERNSV9WRVJUQl9WQlBfTUFTSwkJVkM0X01BU0soOCwgMCkKKyMgZGVmaW5lIFZD NF9IRE1JX1ZFUlRCX1ZCUF9TSElGVAkJMAorCisjZGVmaW5lIFZDNF9IRE1JX1RYX1BIWV9SRVNF VF9DVEwJCTB4MmMwCisKKyNkZWZpbmUgVkM0X0hEX01fQ1RMCQkJCTB4MDBjCisjIGRlZmluZSBW QzRfSERfTV9TV19SU1QJCQkoMSA8PCAyKQorIyBkZWZpbmUgVkM0X0hEX01fRU5BQkxFCQkJKDEg PDwgMCkKKworI2RlZmluZSBWQzRfSERfTUFJX0NUTAkJCQkweDAxNAorCisjZGVmaW5lIFZDNF9I RF9WSURfQ1RMCQkJCTB4MDM4CisjIGRlZmluZSBWQzRfSERfVklEX0NUTF9FTkFCTEUJCQkoMSA8 PCAzMSkKKyMgZGVmaW5lIFZDNF9IRF9WSURfQ1RMX1VOREVSRkxPV19FTkFCTEUJKDEgPDwgMzAp CisjIGRlZmluZSBWQzRfSERfVklEX0NUTF9GUkFNRV9DT1VOVEVSX1JFU0VUCSgxIDw8IDI5KQor IyBkZWZpbmUgVkM0X0hEX1ZJRF9DVExfVlNZTkNfTE9XCQkoMSA8PCAyOCkKKyMgZGVmaW5lIFZD NF9IRF9WSURfQ1RMX0hTWU5DX0xPVwkJKDEgPDwgMjcpCisKKyNkZWZpbmUgVkM0X0hEX0NTQ19D VEwJCQkJMHgwNDAKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX01BU0sJCVZDNF9NQVNL KDcsIDUpCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9TSElGVAkJNQorIyBkZWZpbmUg VkM0X0hEX0NTQ19DVExfT1JERVJfUkdCCQkwCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRF Ul9CR1IJCTEKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX0JSRwkJMgorIyBkZWZpbmUg VkM0X0hEX0NTQ19DVExfT1JERVJfR1JCCQkzCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRF Ul9HQlIJCTQKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX1JCRwkJNQorIyBkZWZpbmUg VkM0X0hEX0NTQ19DVExfUEFETVNCCQkJKDEgPDwgNCkKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RM X01PREVfTUFTSwkJVkM0X01BU0soMywgMikKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX01PREVf U0hJRlQJCTIKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX01PREVfUkdCX1RPX1NEX1lQUlBCCTAK KyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX01PREVfUkdCX1RPX0hEX1lQUlBCCTEKKyMgZGVmaW5l IFZDNF9IRF9DU0NfQ1RMX01PREVfQ1VTVE9NCQkyCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9S R0IyWUNDCQkJKDEgPDwgMSkKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX0VOQUJMRQkJCSgxIDw8 IDApCisKKyNkZWZpbmUgVkM0X0hEX0ZSQU1FX0NPVU5UCQkJMHgwNjgKKworLyogSFZTIGRpc3Bs YXkgbGlzdCBpbmZvcm1hdGlvbi4gKi8KKyNkZWZpbmUgSFZTX0JPT1RMT0FERVJfRExJU1RfRU5E ICAgICAgICAgICAgICAgIDMyCisKK2VudW0gaHZzX3BpeGVsX2Zvcm1hdCB7CisJLyogOGJwcCAq LworCUhWU19QSVhFTF9GT1JNQVRfUkdCMzMyID0gMCwKKwkvKiAxNmJwcCAqLworCUhWU19QSVhF TF9GT1JNQVRfUkdCQTQ0NDQgPSAxLAorCUhWU19QSVhFTF9GT1JNQVRfUkdCNTU1ID0gMiwKKwlI VlNfUElYRUxfRk9STUFUX1JHQkE1NTUxID0gMywKKwlIVlNfUElYRUxfRk9STUFUX1JHQjU2NSA9 IDQsCisJLyogMjRicHAgKi8KKwlIVlNfUElYRUxfRk9STUFUX1JHQjg4OCA9IDUsCisJSFZTX1BJ WEVMX0ZPUk1BVF9SR0JBNjY2NiA9IDYsCisJLyogMzJicHAgKi8KKwlIVlNfUElYRUxfRk9STUFU X1JHQkE4ODg4ID0gNworfTsKKworLyogTm90ZTogdGhlIExTQiBpcyB0aGUgcmlnaHRtb3N0IGNo YXJhY3RlciBzaG93bi4gIE9ubHkgdmFsaWQgZm9yCisgKiBIVlNfUElYRUxfRk9STUFUX1JHQjg4 ODgsIG5vdCBSR0I4ODguCisgKi8KKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1JHQkEJCQkwCisj ZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9CR1JBCQkJMQorI2RlZmluZSBIVlNfUElYRUxfT1JERVJf QVJHQgkJCTIKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX0FCR1IJCQkzCisKKyNkZWZpbmUgSFZT X1BJWEVMX09SREVSX1hCUkcJCQkwCisjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9YUkJHCQkJMQor I2RlZmluZSBIVlNfUElYRUxfT1JERVJfWFJHQgkJCTIKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVS X1hCR1IJCQkzCisKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hZQ0JDUgkJCTAKKyNkZWZpbmUg SFZTX1BJWEVMX09SREVSX1hZQ1JDQgkJCTEKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1lYQ0JD UgkJCTIKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1lYQ1JDQgkJCTMKKworI2RlZmluZSBTQ0FM RVJfQ1RMMF9FTkQJCQkJKDEgPDwgMzEpCisjZGVmaW5lIFNDQUxFUl9DVEwwX1ZBTElECQkJKDEg PDwgMzApCisKKyNkZWZpbmUgU0NBTEVSX0NUTDBfU0laRV9NQVNLCQkJVkM0X01BU0soMjksIDI0 KQorI2RlZmluZSBTQ0FMRVJfQ1RMMF9TSVpFX1NISUZUCQkJMjQKKworI2RlZmluZSBTQ0FMRVJf Q1RMMF9IRkxJUCAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIFNDQUxF Ul9DVEwwX1ZGTElQICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKworI2RlZmluZSBT Q0FMRVJfQ1RMMF9PUkRFUl9NQVNLCQkJVkM0X01BU0soMTQsIDEzKQorI2RlZmluZSBTQ0FMRVJf Q1RMMF9PUkRFUl9TSElGVAkJCTEzCisKKy8qIFNldCB0byBpbmRpY2F0ZSBubyBzY2FsaW5nLiAq LworI2RlZmluZSBTQ0FMRVJfQ1RMMF9VTklUWQkJCSgxIDw8IDQpCisKKyNkZWZpbmUgU0NBTEVS X0NUTDBfUElYRUxfRk9STUFUX01BU0sJCVZDNF9NQVNLKDMsIDApCisjZGVmaW5lIFNDQUxFUl9D VEwwX1BJWEVMX0ZPUk1BVF9TSElGVAkJMAorCisjZGVmaW5lIFNDQUxFUl9QT1MwX0ZJWEVEX0FM UEhBX01BU0sJCVZDNF9NQVNLKDMxLCAyNCkKKyNkZWZpbmUgU0NBTEVSX1BPUzBfRklYRURfQUxQ SEFfU0hJRlQJCTI0CisKKyNkZWZpbmUgU0NBTEVSX1BPUzBfU1RBUlRfWV9NQVNLCQlWQzRfTUFT SygyMywgMTIpCisjZGVmaW5lIFNDQUxFUl9QT1MwX1NUQVJUX1lfU0hJRlQJCTEyCisKKyNkZWZp bmUgU0NBTEVSX1BPUzBfU1RBUlRfWF9NQVNLCQlWQzRfTUFTSygxMSwgMCkKKyNkZWZpbmUgU0NB TEVSX1BPUzBfU1RBUlRfWF9TSElGVAkJMAorCisjZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01P REVfTUFTSwkJVkM0X01BU0soMzEsIDMwKQorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RF X1NISUZUCQkzMAorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX1BJUEVMSU5FCQkwCisj ZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfRklYRUQJCTEKKyNkZWZpbmUgU0NBTEVSX1BP UzJfQUxQSEFfTU9ERV9GSVhFRF9OT05aRVJPCTIKKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFf TU9ERV9GSVhFRF9PVkVSXzB4MDcJMworCisjZGVmaW5lIFNDQUxFUl9QT1MyX0hFSUdIVF9NQVNL CQkJVkM0X01BU0soMjcsIDE2KQorI2RlZmluZSBTQ0FMRVJfUE9TMl9IRUlHSFRfU0hJRlQJCTE2 CisKKyNkZWZpbmUgU0NBTEVSX1BPUzJfV0lEVEhfTUFTSwkJCVZDNF9NQVNLKDExLCAwKQorI2Rl ZmluZSBTQ0FMRVJfUE9TMl9XSURUSF9TSElGVAkJCTAKKworI2RlZmluZSBTQ0FMRVJfU1JDX1BJ VENIX01BU0sJCQlWQzRfTUFTSygxNSwgMCkKKyNkZWZpbmUgU0NBTEVSX1NSQ19QSVRDSF9TSElG VAkJCTAKLS0gCjIuMS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=