From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Wiklander Subject: [PATCH v14 3/5] tee: add OP-TEE driver Date: Wed, 18 Jan 2017 13:58:14 +0100 Message-ID: <1484744296-30003-4-git-send-email-jens.wiklander@linaro.org> References: <1484744296-30003-1-git-send-email-jens.wiklander@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1484744296-30003-1-git-send-email-jens.wiklander@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Greg Kroah-Hartman , Arnd Bergmann , Olof Johansson , Andrew Morton , Wei Xu Cc: valentin.manea@huawei.com, devicetree@vger.kernel.org, javier@javigon.com, emmanuel.michel@st.com, scott.branden@broadcom.com, Nishanth Menon , broonie@kernel.org, Will Deacon , linux-kernel@vger.kernel.org, jean-michel.delorme@st.com, Jason Gunthorpe , Rob Herring , Al Viro , Jens Wiklander , Mark Rutland , "Andrew F . Davis" , Michal Simek , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QWRkcyBhIE9QLVRFRSBkcml2ZXIgd2hpY2ggYWxzbyBjYW4gYmUgY29tcGlsZWQgYXMgYSBsb2Fk YWJsZSBtb2R1bGUuCgoqIFRhcmdldHMgQVJNIGFuZCBBUk02NAoqIFN1cHBvcnRzIHVzaW5nIHJl c2VydmVkIG1lbW9yeSBmcm9tIE9QLVRFRSBhcyBzaGFyZWQgbWVtb3J5CiogUHJvYmVzIE9QLVRF RSB2ZXJzaW9uIHVzaW5nIFNNQ3MKKiBBY2NlcHRzIHJlcXVlc3RzIG9uIHByaXZpbGVnZWQgYW5k IHVucHJpdmlsZWdlZCBkZXZpY2UKKiBVc2VzIE9QVEVFIG1lc3NhZ2UgcHJvdG9jb2wgdmVyc2lv biAyIHRvIGNvbW11bmljYXRlIHdpdGggc2VjdXJlIHdvcmxkCgpBY2tlZC1ieTogQW5kcmVhcyBE YW5uZW5iZXJnIDxkYW5uZW5iZXJnQHRpLmNvbT4KVGVzdGVkLWJ5OiBKZXJvbWUgRm9yaXNzaWVy IDxqZXJvbWUuZm9yaXNzaWVyQGxpbmFyby5vcmc+IChIaUtleSkKVGVzdGVkLWJ5OiBWb2xvZHlt eXIgQmFiY2h1ayA8dmxhZC5iYWJjaHVrQGdtYWlsLmNvbT4gKFJDQVIgSDMpClJldmlld2VkLWJ5 OiBKYXZpZXIgR29uesOhbGV6IDxqYXZpZXJAamF2aWdvbi5jb20+ClNpZ25lZC1vZmYtYnk6IEpl bnMgV2lrbGFuZGVyIDxqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgotLS0KIE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL3RlZS9LY29uZmlnICAgICAg ICAgICAgICAgfCAgMTAgKwogZHJpdmVycy90ZWUvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAx ICsKIGRyaXZlcnMvdGVlL29wdGVlL0tjb25maWcgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL3Rl ZS9vcHRlZS9NYWtlZmlsZSAgICAgICAgfCAgIDUgKwogZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5j ICAgICAgICAgIHwgNDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy90ZWUv b3B0ZWUvY29yZS5jICAgICAgICAgIHwgNTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9tc2cuaCAgICAgfCA0MzUgKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9wcml2YXRlLmgg fCAxODUgKysrKysrKysrKysrCiBkcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9zbWMuaCAgICAgfCA0 NTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy90ZWUvb3B0ZWUvcnBjLmMg ICAgICAgICAgIHwgNDA0ICsrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvdGVlL29w dGVlL3N1cHAuYyAgICAgICAgICB8IDI3MyArKysrKysrKysrKysrKysrKwogMTIgZmlsZXMgY2hh bmdlZCwgMjgwOCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUv b3B0ZWUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL29wdGVlL01ha2Vm aWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvY2FsbC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfbXNnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3RlZS9vcHRlZS9vcHRlZV9wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Rl ZS9vcHRlZS9vcHRlZV9zbWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdGVlL29wdGVl L3JwYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy90ZWUvb3B0ZWUvc3VwcC5jCgpkaWZm IC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA2ZWVhMzQ3NmIwZDMuLjk3 NWZkMzM5YzAyNiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAg LTkyMTMsNiArOTIxMywxMSBAQCBGOglhcmNoLyovb3Byb2ZpbGUvCiBGOglkcml2ZXJzL29wcm9m aWxlLwogRjoJaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCiAKK09QLVRFRSBEUklWRVIKK006CUpl bnMgV2lrbGFuZGVyIDxqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnPgorUzoJTWFpbnRhaW5lZAor RjoJZHJpdmVycy90ZWUvb3B0ZWUvCisKIE9SQUNMRSBDTFVTVEVSIEZJTEVTWVNURU0gMiAoT0NG UzIpCiBNOglNYXJrIEZhc2hlaCA8bWZhc2hlaEB2ZXJzaXR5LmNvbT4KIE06CUpvZWwgQmVja2Vy IDxqbGJlY0BldmlscGxhbi5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9LY29uZmlnIGIv ZHJpdmVycy90ZWUvS2NvbmZpZwppbmRleCA1MGMyNDRlYWQ0NmQuLjIzMzBhNGViNGU4YiAxMDA2 NDQKLS0tIGEvZHJpdmVycy90ZWUvS2NvbmZpZworKysgYi9kcml2ZXJzL3RlZS9LY29uZmlnCkBA IC02LDMgKzYsMTMgQEAgY29uZmlnIFRFRQogCWhlbHAKIAkgIFRoaXMgaW1wbGVtZW50cyBhIGdl bmVyaWMgaW50ZXJmYWNlIHRvd2FyZHMgYSBUcnVzdGVkIEV4ZWN1dGlvbgogCSAgRW52aXJvbm1l bnQgKFRFRSkuCisKK2lmIFRFRQorCittZW51ICJURUUgZHJpdmVycyIKKworc291cmNlICJkcml2 ZXJzL3RlZS9vcHRlZS9LY29uZmlnIgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL3RlZS9NYWtlZmlsZSBiL2RyaXZlcnMvdGVlL01ha2VmaWxlCmluZGV4IGVjNjQwNDdh ODZlMi4uN2E0ZTRhMWFjMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlZS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL3RlZS9NYWtlZmlsZQpAQCAtMiwzICsyLDQgQEAgb2JqLSQoQ09ORklHX1RFRSkg Kz0gdGVlLm8KIHRlZS1vYmpzICs9IHRlZV9jb3JlLm8KIHRlZS1vYmpzICs9IHRlZV9zaG0ubwog dGVlLW9ianMgKz0gdGVlX3NobV9wb29sLm8KK29iai0kKENPTkZJR19PUFRFRSkgKz0gb3B0ZWUv CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnIGIvZHJpdmVycy90ZWUvb3B0 ZWUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAxMjZk ZTg5ODAzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL0tjb25maWcKQEAg LTAsMCArMSw3IEBACisjIE9QLVRFRSBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBDb25m aWd1cmF0aW9uCitjb25maWcgT1BURUUKKwl0cmlzdGF0ZSAiT1AtVEVFIgorCWRlcGVuZHMgb24g SEFWRV9BUk1fU01DQ0MKKwloZWxwCisJICBUaGlzIGltcGxlbWVudHMgdGhlIE9QLVRFRSBUcnVz dGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKQorCSAgZHJpdmVyLgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy90ZWUvb3B0ZWUvTWFrZWZpbGUgYi9kcml2ZXJzL3RlZS9vcHRlZS9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkyZmU1Nzg5YmNjZQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBA QAorb2JqLSQoQ09ORklHX09QVEVFKSArPSBvcHRlZS5vCitvcHRlZS1vYmpzICs9IGNvcmUubwor b3B0ZWUtb2JqcyArPSBjYWxsLm8KK29wdGVlLW9ianMgKz0gcnBjLm8KK29wdGVlLW9ianMgKz0g c3VwcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9jYWxsLmMgYi9kcml2ZXJzL3Rl ZS9vcHRlZS9jYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45 N2ZhZDBlMmY5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RlZS9vcHRlZS9jYWxsLmMK QEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIExpbmFybyBMaW1p dGVkCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQs IGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KKyNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRl IDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51 eC90ZWVfZHJ2Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+CisjaW5jbHVkZSAib3B0ZWVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIm9wdGVlX3Nt Yy5oIgorCitzdHJ1Y3Qgb3B0ZWVfY2FsbF93YWl0ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlz dF9ub2RlOworCXN0cnVjdCBjb21wbGV0aW9uIGM7CisJYm9vbCBjb21wbGV0ZWQ7Cit9OworCitz dGF0aWMgdm9pZCBvcHRlZV9jcV93YWl0X2luaXQoc3RydWN0IG9wdGVlX2NhbGxfcXVldWUgKmNx LAorCQkJICAgICAgIHN0cnVjdCBvcHRlZV9jYWxsX3dhaXRlciAqdykKK3sKKwltdXRleF9sb2Nr KCZjcS0+bXV0ZXgpOworCisJLyoKKwkgKiBXZSBhZGQgb3Vyc2VsdmVzIHRvIHRoZSBxdWV1ZSwg YnV0IHdlIGRvbid0IHdhaXQuIFRoaXMKKwkgKiBndWFyYW50ZWVzIHRoYXQgd2UgZG9uJ3QgbG9z ZSBhIGNvbXBsZXRpb24gaWYgc2VjdXJlIHdvcmxkCisJICogcmV0dXJucyBidXN5IGFuZCBhbm90 aGVyIHRocmVhZCBqdXN0IGV4aXRlZCBhbmQgdHJ5IHRvIGNvbXBsZXRlCisJICogc29tZW9uZS4K KwkgKi8KKwl3LT5jb21wbGV0ZWQgPSBmYWxzZTsKKwlpbml0X2NvbXBsZXRpb24oJnctPmMpOwor CWxpc3RfYWRkX3RhaWwoJnctPmxpc3Rfbm9kZSwgJmNxLT53YWl0ZXJzKTsKKworCW11dGV4X3Vu bG9jaygmY3EtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgb3B0ZWVfY3Ffd2FpdF9mb3JfY29t cGxldGlvbihzdHJ1Y3Qgb3B0ZWVfY2FsbF9xdWV1ZSAqY3EsCisJCQkJCSBzdHJ1Y3Qgb3B0ZWVf Y2FsbF93YWl0ZXIgKncpCit7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdy0+Yyk7CisKKwltdXRl eF9sb2NrKCZjcS0+bXV0ZXgpOworCisJLyogTW92ZSB0byBlbmQgb2YgbGlzdCB0byBnZXQgb3V0 IG9mIHRoZSB3YXkgZm9yIG90aGVyIHdhaXRlcnMgKi8KKwlsaXN0X2RlbCgmdy0+bGlzdF9ub2Rl KTsKKwl3LT5jb21wbGV0ZWQgPSBmYWxzZTsKKwlyZWluaXRfY29tcGxldGlvbigmdy0+Yyk7CisJ bGlzdF9hZGRfdGFpbCgmdy0+bGlzdF9ub2RlLCAmY3EtPndhaXRlcnMpOworCisJbXV0ZXhfdW5s b2NrKCZjcS0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBvcHRlZV9jcV9jb21wbGV0ZV9vbmUo c3RydWN0IG9wdGVlX2NhbGxfcXVldWUgKmNxKQoreworCXN0cnVjdCBvcHRlZV9jYWxsX3dhaXRl ciAqdzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNxLT53YWl0ZXJzLCBsaXN0X25vZGUp IHsKKwkJaWYgKCF3LT5jb21wbGV0ZWQpIHsKKwkJCWNvbXBsZXRlKCZ3LT5jKTsKKwkJCXctPmNv bXBsZXRlZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgb3B0 ZWVfY3Ffd2FpdF9maW5hbChzdHJ1Y3Qgb3B0ZWVfY2FsbF9xdWV1ZSAqY3EsCisJCQkJc3RydWN0 IG9wdGVlX2NhbGxfd2FpdGVyICp3KQoreworCW11dGV4X2xvY2soJmNxLT5tdXRleCk7CisKKwkv KiBHZXQgb3V0IG9mIHRoZSBsaXN0ICovCisJbGlzdF9kZWwoJnctPmxpc3Rfbm9kZSk7CisKKwlv cHRlZV9jcV9jb21wbGV0ZV9vbmUoY3EpOworCS8qCisJICogSWYgd2UncmUgY29tcGxldGVkIHdl J3ZlIGdvdCBhIGNvbXBsZXRpb24gdGhhdCBzb21lIG90aGVyIHRhc2sKKwkgKiBjb3VsZCBoYXZl IHVzZWQgaW5zdGVhZC4KKwkgKi8KKwlpZiAody0+Y29tcGxldGVkKQorCQlvcHRlZV9jcV9jb21w bGV0ZV9vbmUoY3EpOworCisJbXV0ZXhfdW5sb2NrKCZjcS0+bXV0ZXgpOworfQorCisvKiBSZXF1 aXJlcyB0aGUgZmlscHN0YXRlIG11dGV4IHRvIGJlIGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3B0 ZWVfc2Vzc2lvbiAqZmluZF9zZXNzaW9uKHN0cnVjdCBvcHRlZV9jb250ZXh0X2RhdGEgKmN0eGRh dGEsCisJCQkJCSAgdTMyIHNlc3Npb25faWQpCit7CisJc3RydWN0IG9wdGVlX3Nlc3Npb24gKnNl c3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlc3MsICZjdHhkYXRhLT5zZXNzX2xpc3QsIGxp c3Rfbm9kZSkKKwkJaWYgKHNlc3MtPnNlc3Npb25faWQgPT0gc2Vzc2lvbl9pZCkKKwkJCXJldHVy biBzZXNzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogb3B0ZWVfZG9fY2FsbF93aXRo X2FyZygpIC0gRG8gYW4gU01DIHRvIE9QLVRFRSBpbiBzZWN1cmUgd29ybGQKKyAqIEBjdHg6CWNh bGxpbmcgY29udGV4dAorICogQHBhcmc6CXBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVzc2FnZSB0byBw YXNzIHRvIHNlY3VyZSB3b3JsZAorICoKKyAqIERvZXMgYW5kIFNNQyB0byBPUC1URUUgaW4gc2Vj dXJlIHdvcmxkIGFuZCBoYW5kbGVzIGV2ZW50dWFsIHJlc3VsdGluZworICogUmVtb3RlIFByb2Nl ZHVyZSBDYWxscyAoUlBDKSBmcm9tIE9QLVRFRS4KKyAqCisgKiBSZXR1cm5zIHJldHVybiBjb2Rl IGZyb20gc2VjdXJlIHdvcmxkLCAwIGlzIE9LCisgKi8KK3UzMiBvcHRlZV9kb19jYWxsX3dpdGhf YXJnKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBwaHlzX2FkZHJfdCBwYXJnKQoreworCXN0cnVj dCBvcHRlZSAqb3B0ZWUgPSB0ZWVfZ2V0X2RydmRhdGEoY3R4LT50ZWVkZXYpOworCXN0cnVjdCBv cHRlZV9jYWxsX3dhaXRlciB3OworCXN0cnVjdCBvcHRlZV9ycGNfcGFyYW0gcGFyYW0gPSB7IH07 CisJdTMyIHJldDsKKworCXBhcmFtLmEwID0gT1BURUVfU01DX0NBTExfV0lUSF9BUkc7CisJcmVn X3BhaXJfZnJvbV82NCgmcGFyYW0uYTEsICZwYXJhbS5hMiwgcGFyZyk7CisJLyogSW5pdGlhbGl6 ZSB3YWl0ZXIgKi8KKwlvcHRlZV9jcV93YWl0X2luaXQoJm9wdGVlLT5jYWxsX3F1ZXVlLCAmdyk7 CisJd2hpbGUgKHRydWUpIHsKKwkJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOworCisJCW9wdGVl LT5pbnZva2VfZm4ocGFyYW0uYTAsIHBhcmFtLmExLCBwYXJhbS5hMiwgcGFyYW0uYTMsCisJCQkJ IHBhcmFtLmE0LCBwYXJhbS5hNSwgcGFyYW0uYTYsIHBhcmFtLmE3LAorCQkJCSAmcmVzKTsKKwor CQlpZiAocmVzLmEwID09IE9QVEVFX1NNQ19SRVRVUk5fRVRIUkVBRF9MSU1JVCkgeworCQkJLyoK KwkJCSAqIE91dCBvZiB0aHJlYWRzIGluIHNlY3VyZSB3b3JsZCwgd2FpdCBmb3IgYSB0aHJlYWQK KwkJCSAqIGJlY29tZSBhdmFpbGFibGUuCisJCQkgKi8KKwkJCW9wdGVlX2NxX3dhaXRfZm9yX2Nv bXBsZXRpb24oJm9wdGVlLT5jYWxsX3F1ZXVlLCAmdyk7CisJCX0gZWxzZSBpZiAoT1BURUVfU01D X1JFVFVSTl9JU19SUEMocmVzLmEwKSkgeworCQkJcGFyYW0uYTAgPSByZXMuYTA7CisJCQlwYXJh bS5hMSA9IHJlcy5hMTsKKwkJCXBhcmFtLmEyID0gcmVzLmEyOworCQkJcGFyYW0uYTMgPSByZXMu YTM7CisJCQlvcHRlZV9oYW5kbGVfcnBjKGN0eCwgJnBhcmFtKTsKKwkJfSBlbHNlIHsKKwkJCXJl dCA9IHJlcy5hMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBXZSdyZSBkb25lIHdp dGggb3VyIHRocmVhZCBpbiBzZWN1cmUgd29ybGQsIGlmIHRoZXJlJ3MgYW55CisJICogdGhyZWFk IHdhaXRlcnMgd2FrZSB1cCBvbmUuCisJICovCisJb3B0ZWVfY3Ffd2FpdF9maW5hbCgmb3B0ZWUt PmNhbGxfcXVldWUsICZ3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVl X3NobSAqZ2V0X21zZ19hcmcoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHNpemVfdCBudW1fcGFy YW1zLAorCQkJCSAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICoqbXNnX2FyZywKKwkJCQkgICBwaHlz X2FkZHJfdCAqbXNnX3BhcmcpCit7CisJaW50IHJjOworCXN0cnVjdCB0ZWVfc2htICpzaG07CisJ c3RydWN0IG9wdGVlX21zZ19hcmcgKm1hOworCisJc2htID0gdGVlX3NobV9hbGxvYyhjdHgsIE9Q VEVFX01TR19HRVRfQVJHX1NJWkUobnVtX3BhcmFtcyksCisJCQkgICAgVEVFX1NITV9NQVBQRUQp OworCWlmIChJU19FUlIoc2htKSkKKwkJcmV0dXJuIHNobTsKKworCW1hID0gdGVlX3NobV9nZXRf dmEoc2htLCAwKTsKKwlpZiAoSVNfRVJSKG1hKSkgeworCQlyYyA9IFBUUl9FUlIobWEpOworCQln b3RvIG91dDsKKwl9CisKKwlyYyA9IHRlZV9zaG1fZ2V0X3BhKHNobSwgMCwgbXNnX3BhcmcpOwor CWlmIChyYykKKwkJZ290byBvdXQ7CisKKwltZW1zZXQobWEsIDAsIE9QVEVFX01TR19HRVRfQVJH X1NJWkUobnVtX3BhcmFtcykpOworCW1hLT5udW1fcGFyYW1zID0gbnVtX3BhcmFtczsKKwkqbXNn X2FyZyA9IG1hOworb3V0OgorCWlmIChyYykgeworCQl0ZWVfc2htX2ZyZWUoc2htKTsKKwkJcmV0 dXJuIEVSUl9QVFIocmMpOworCX0KKworCXJldHVybiBzaG07Cit9CisKK2ludCBvcHRlZV9vcGVu X3Nlc3Npb24oc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCSAgICAgICBzdHJ1Y3QgdGVlX2lv Y3RsX29wZW5fc2Vzc2lvbl9hcmcgKmFyZywKKwkJICAgICAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBh cmFtKQoreworCXN0cnVjdCBvcHRlZV9jb250ZXh0X2RhdGEgKmN0eGRhdGEgPSBjdHgtPmRhdGE7 CisJaW50IHJjOworCXN0cnVjdCB0ZWVfc2htICpzaG07CisJc3RydWN0IG9wdGVlX21zZ19hcmcg Km1zZ19hcmc7CisJcGh5c19hZGRyX3QgbXNnX3Bhcmc7CisJc3RydWN0IG9wdGVlX21zZ19wYXJh bSAqbXNnX3BhcmFtOworCXN0cnVjdCBvcHRlZV9zZXNzaW9uICpzZXNzID0gTlVMTDsKKworCS8q ICsyIGZvciB0aGUgbWV0YSBwYXJhbWV0ZXJzIGFkZGVkIGJlbG93ICovCisJc2htID0gZ2V0X21z Z19hcmcoY3R4LCBhcmctPm51bV9wYXJhbXMgKyAyLCAmbXNnX2FyZywgJm1zZ19wYXJnKTsKKwlp ZiAoSVNfRVJSKHNobSkpCisJCXJldHVybiBQVFJfRVJSKHNobSk7CisKKwltc2dfYXJnLT5jbWQg PSBPUFRFRV9NU0dfQ01EX09QRU5fU0VTU0lPTjsKKwltc2dfYXJnLT5jYW5jZWxfaWQgPSBhcmct PmNhbmNlbF9pZDsKKwltc2dfcGFyYW0gPSBPUFRFRV9NU0dfR0VUX1BBUkFNUyhtc2dfYXJnKTsK KworCS8qCisJICogSW5pdGlhbGl6ZSBhbmQgYWRkIHRoZSBtZXRhIHBhcmFtZXRlcnMgbmVlZGVk IHdoZW4gb3BlbmluZyBhCisJICogc2Vzc2lvbi4KKwkgKi8KKwltc2dfcGFyYW1bMF0uYXR0ciA9 IE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQgfAorCQkJICAgIE9QVEVFX01TR19BVFRS X01FVEE7CisJbXNnX3BhcmFtWzFdLmF0dHIgPSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lO UFVUIHwKKwkJCSAgICBPUFRFRV9NU0dfQVRUUl9NRVRBOworCW1lbWNweSgmbXNnX3BhcmFtWzBd LnUudmFsdWUsIGFyZy0+dXVpZCwgc2l6ZW9mKGFyZy0+dXVpZCkpOworCW1lbWNweSgmbXNnX3Bh cmFtWzFdLnUudmFsdWUsIGFyZy0+dXVpZCwgc2l6ZW9mKGFyZy0+Y2xudF91dWlkKSk7CisJbXNn X3BhcmFtWzFdLnUudmFsdWUuYyA9IGFyZy0+Y2xudF9sb2dpbjsKKworCXJjID0gb3B0ZWVfdG9f bXNnX3BhcmFtKG1zZ19wYXJhbSArIDIsIGFyZy0+bnVtX3BhcmFtcywgcGFyYW0pOworCWlmIChy YykKKwkJZ290byBvdXQ7CisKKwlzZXNzID0ga3phbGxvYyhzaXplb2YoKnNlc3MpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXNlc3MpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisK KwlpZiAob3B0ZWVfZG9fY2FsbF93aXRoX2FyZyhjdHgsIG1zZ19wYXJnKSkgeworCQltc2dfYXJn LT5yZXQgPSBURUVDX0VSUk9SX0NPTU1VTklDQVRJT047CisJCW1zZ19hcmctPnJldF9vcmlnaW4g PSBURUVDX09SSUdJTl9DT01NUzsKKwl9CisKKwlpZiAobXNnX2FyZy0+cmV0ID09IFRFRUNfU1VD Q0VTUykgeworCQkvKiBBIG5ldyBzZXNzaW9uIGhhcyBiZWVuIGNyZWF0ZWQsIGFkZCBpdCB0byB0 aGUgbGlzdC4gKi8KKwkJc2Vzcy0+c2Vzc2lvbl9pZCA9IG1zZ19hcmctPnNlc3Npb247CisJCW11 dGV4X2xvY2soJmN0eGRhdGEtPm11dGV4KTsKKwkJbGlzdF9hZGQoJnNlc3MtPmxpc3Rfbm9kZSwg JmN0eGRhdGEtPnNlc3NfbGlzdCk7CisJCW11dGV4X3VubG9jaygmY3R4ZGF0YS0+bXV0ZXgpOwor CX0gZWxzZSB7CisJCWtmcmVlKHNlc3MpOworCX0KKworCWlmIChvcHRlZV9mcm9tX21zZ19wYXJh bShwYXJhbSwgYXJnLT5udW1fcGFyYW1zLCBtc2dfcGFyYW0gKyAyKSkgeworCQlhcmctPnJldCA9 IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwkJYXJnLT5yZXRfb3JpZ2luID0gVEVFQ19PUklH SU5fQ09NTVM7CisJCS8qIENsb3NlIHNlc3Npb24gYWdhaW4gdG8gYXZvaWQgbGVha2FnZSAqLwor CQlvcHRlZV9jbG9zZV9zZXNzaW9uKGN0eCwgbXNnX2FyZy0+c2Vzc2lvbik7CisJfSBlbHNlIHsK KwkJYXJnLT5zZXNzaW9uID0gbXNnX2FyZy0+c2Vzc2lvbjsKKwkJYXJnLT5yZXQgPSBtc2dfYXJn LT5yZXQ7CisJCWFyZy0+cmV0X29yaWdpbiA9IG1zZ19hcmctPnJldF9vcmlnaW47CisJfQorb3V0 OgorCXRlZV9zaG1fZnJlZShzaG0pOworCisJcmV0dXJuIHJjOworfQorCitpbnQgb3B0ZWVfY2xv c2Vfc2Vzc2lvbihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIHNlc3Npb24pCit7CisJc3Ry dWN0IG9wdGVlX2NvbnRleHRfZGF0YSAqY3R4ZGF0YSA9IGN0eC0+ZGF0YTsKKwlzdHJ1Y3QgdGVl X3NobSAqc2htOworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICptc2dfYXJnOworCXBoeXNfYWRkcl90 IG1zZ19wYXJnOworCXN0cnVjdCBvcHRlZV9zZXNzaW9uICpzZXNzOworCisJLyogQ2hlY2sgdGhh dCB0aGUgc2Vzc2lvbiBpcyB2YWxpZCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KKwlt dXRleF9sb2NrKCZjdHhkYXRhLT5tdXRleCk7CisJc2VzcyA9IGZpbmRfc2Vzc2lvbihjdHhkYXRh LCBzZXNzaW9uKTsKKwlpZiAoc2VzcykKKwkJbGlzdF9kZWwoJnNlc3MtPmxpc3Rfbm9kZSk7CisJ bXV0ZXhfdW5sb2NrKCZjdHhkYXRhLT5tdXRleCk7CisJaWYgKCFzZXNzKQorCQlyZXR1cm4gLUVJ TlZBTDsKKwlrZnJlZShzZXNzKTsKKworCXNobSA9IGdldF9tc2dfYXJnKGN0eCwgMCwgJm1zZ19h cmcsICZtc2dfcGFyZyk7CisJaWYgKElTX0VSUihzaG0pKQorCQlyZXR1cm4gUFRSX0VSUihzaG0p OworCisJbXNnX2FyZy0+Y21kID0gT1BURUVfTVNHX0NNRF9DTE9TRV9TRVNTSU9OOworCW1zZ19h cmctPnNlc3Npb24gPSBzZXNzaW9uOworCW9wdGVlX2RvX2NhbGxfd2l0aF9hcmcoY3R4LCBtc2df cGFyZyk7CisKKwl0ZWVfc2htX2ZyZWUoc2htKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG9wdGVl X2ludm9rZV9mdW5jKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgdGVlX2lvY3RsX2lu dm9rZV9hcmcgKmFyZywKKwkJICAgICAgc3RydWN0IHRlZV9wYXJhbSAqcGFyYW0pCit7CisJc3Ry dWN0IG9wdGVlX2NvbnRleHRfZGF0YSAqY3R4ZGF0YSA9IGN0eC0+ZGF0YTsKKwlzdHJ1Y3QgdGVl X3NobSAqc2htOworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICptc2dfYXJnOworCXBoeXNfYWRkcl90 IG1zZ19wYXJnOworCXN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKm1zZ19wYXJhbTsKKwlzdHJ1Y3Qg b3B0ZWVfc2Vzc2lvbiAqc2VzczsKKwlpbnQgcmM7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBzZXNz aW9uIGlzIHZhbGlkICovCisJbXV0ZXhfbG9jaygmY3R4ZGF0YS0+bXV0ZXgpOworCXNlc3MgPSBm aW5kX3Nlc3Npb24oY3R4ZGF0YSwgYXJnLT5zZXNzaW9uKTsKKwltdXRleF91bmxvY2soJmN0eGRh dGEtPm11dGV4KTsKKwlpZiAoIXNlc3MpCisJCXJldHVybiAtRUlOVkFMOworCisJc2htID0gZ2V0 X21zZ19hcmcoY3R4LCBhcmctPm51bV9wYXJhbXMsICZtc2dfYXJnLCAmbXNnX3BhcmcpOworCWlm IChJU19FUlIoc2htKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2htKTsKKwltc2dfYXJnLT5jbWQgPSBP UFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5EOworCW1zZ19hcmctPmZ1bmMgPSBhcmctPmZ1bmM7 CisJbXNnX2FyZy0+c2Vzc2lvbiA9IGFyZy0+c2Vzc2lvbjsKKwltc2dfYXJnLT5jYW5jZWxfaWQg PSBhcmctPmNhbmNlbF9pZDsKKwltc2dfcGFyYW0gPSBPUFRFRV9NU0dfR0VUX1BBUkFNUyhtc2df YXJnKTsKKworCXJjID0gb3B0ZWVfdG9fbXNnX3BhcmFtKG1zZ19wYXJhbSwgYXJnLT5udW1fcGFy YW1zLCBwYXJhbSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCWlmIChvcHRlZV9kb19jYWxs X3dpdGhfYXJnKGN0eCwgbXNnX3BhcmcpKSB7CisJCW1zZ19hcmctPnJldCA9IFRFRUNfRVJST1Jf Q09NTVVOSUNBVElPTjsKKwkJbXNnX2FyZy0+cmV0X29yaWdpbiA9IFRFRUNfT1JJR0lOX0NPTU1T OworCX0KKworCWlmIChvcHRlZV9mcm9tX21zZ19wYXJhbShwYXJhbSwgYXJnLT5udW1fcGFyYW1z LCBtc2dfcGFyYW0pKSB7CisJCW1zZ19hcmctPnJldCA9IFRFRUNfRVJST1JfQ09NTVVOSUNBVElP TjsKKwkJbXNnX2FyZy0+cmV0X29yaWdpbiA9IFRFRUNfT1JJR0lOX0NPTU1TOworCX0KKworCWFy Zy0+cmV0ID0gbXNnX2FyZy0+cmV0OworCWFyZy0+cmV0X29yaWdpbiA9IG1zZ19hcmctPnJldF9v cmlnaW47CitvdXQ6CisJdGVlX3NobV9mcmVlKHNobSk7CisJcmV0dXJuIHJjOworfQorCitpbnQg b3B0ZWVfY2FuY2VsX3JlcShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIGNhbmNlbF9pZCwg dTMyIHNlc3Npb24pCit7CisJc3RydWN0IG9wdGVlX2NvbnRleHRfZGF0YSAqY3R4ZGF0YSA9IGN0 eC0+ZGF0YTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICpt c2dfYXJnOworCXBoeXNfYWRkcl90IG1zZ19wYXJnOworCXN0cnVjdCBvcHRlZV9zZXNzaW9uICpz ZXNzOworCisJLyogQ2hlY2sgdGhhdCB0aGUgc2Vzc2lvbiBpcyB2YWxpZCAqLworCW11dGV4X2xv Y2soJmN0eGRhdGEtPm11dGV4KTsKKwlzZXNzID0gZmluZF9zZXNzaW9uKGN0eGRhdGEsIHNlc3Np b24pOworCW11dGV4X3VubG9jaygmY3R4ZGF0YS0+bXV0ZXgpOworCWlmICghc2VzcykKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlzaG0gPSBnZXRfbXNnX2FyZyhjdHgsIDAsICZtc2dfYXJnLCAmbXNn X3BhcmcpOworCWlmIChJU19FUlIoc2htKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2htKTsKKworCW1z Z19hcmctPmNtZCA9IE9QVEVFX01TR19DTURfQ0FOQ0VMOworCW1zZ19hcmctPnNlc3Npb24gPSBz ZXNzaW9uOworCW1zZ19hcmctPmNhbmNlbF9pZCA9IGNhbmNlbF9pZDsKKwlvcHRlZV9kb19jYWxs X3dpdGhfYXJnKGN0eCwgbXNnX3BhcmcpOworCisJdGVlX3NobV9mcmVlKHNobSk7CisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogb3B0ZWVfZW5hYmxlX3NobV9jYWNoZSgpIC0gRW5hYmxlcyBjYWNo aW5nIG9mIHNvbWUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCisgKgkJCSAgICAgIGluIE9QLVRF RQorICogQG9wdGVlOgltYWluIHNlcnZpY2Ugc3RydWN0CisgKi8KK3ZvaWQgb3B0ZWVfZW5hYmxl X3NobV9jYWNoZShzdHJ1Y3Qgb3B0ZWUgKm9wdGVlKQoreworCXN0cnVjdCBvcHRlZV9jYWxsX3dh aXRlciB3OworCisJLyogV2UgbmVlZCB0byByZXRyeSB1bnRpbCBzZWN1cmUgd29ybGQgaXNuJ3Qg YnVzeS4gKi8KKwlvcHRlZV9jcV93YWl0X2luaXQoJm9wdGVlLT5jYWxsX3F1ZXVlLCAmdyk7CisJ d2hpbGUgKHRydWUpIHsKKwkJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOworCisJCW9wdGVlLT5p bnZva2VfZm4oT1BURUVfU01DX0VOQUJMRV9TSE1fQ0FDSEUsIDAsIDAsIDAsIDAsIDAsIDAsCisJ CQkJIDAsICZyZXMpOworCQlpZiAocmVzLmEwID09IE9QVEVFX1NNQ19SRVRVUk5fT0spCisJCQli cmVhazsKKwkJb3B0ZWVfY3Ffd2FpdF9mb3JfY29tcGxldGlvbigmb3B0ZWUtPmNhbGxfcXVldWUs ICZ3KTsKKwl9CisJb3B0ZWVfY3Ffd2FpdF9maW5hbCgmb3B0ZWUtPmNhbGxfcXVldWUsICZ3KTsK K30KKworLyoqCisgKiBvcHRlZV9lbmFibGVfc2htX2NhY2hlKCkgLSBEaXNhYmxlcyBjYWNoaW5n IG9mIHNvbWUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCisgKgkJCSAgICAgIGluIE9QLVRFRQor ICogQG9wdGVlOgltYWluIHNlcnZpY2Ugc3RydWN0CisgKi8KK3ZvaWQgb3B0ZWVfZGlzYWJsZV9z aG1fY2FjaGUoc3RydWN0IG9wdGVlICpvcHRlZSkKK3sKKwlzdHJ1Y3Qgb3B0ZWVfY2FsbF93YWl0 ZXIgdzsKKworCS8qIFdlIG5lZWQgdG8gcmV0cnkgdW50aWwgc2VjdXJlIHdvcmxkIGlzbid0IGJ1 c3kuICovCisJb3B0ZWVfY3Ffd2FpdF9pbml0KCZvcHRlZS0+Y2FsbF9xdWV1ZSwgJncpOworCXdo aWxlICh0cnVlKSB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCBhcm1fc21jY2NfcmVzIHNtY2NjOwor CQkJc3RydWN0IG9wdGVlX3NtY19kaXNhYmxlX3NobV9jYWNoZV9yZXN1bHQgcmVzdWx0OworCQl9 IHJlczsKKworCQlvcHRlZS0+aW52b2tlX2ZuKE9QVEVFX1NNQ19ESVNBQkxFX1NITV9DQUNIRSwg MCwgMCwgMCwgMCwgMCwgMCwKKwkJCQkgMCwgJnJlcy5zbWNjYyk7CisJCWlmIChyZXMucmVzdWx0 LnN0YXR1cyA9PSBPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJTCkKKwkJCWJyZWFrOyAvKiBBbGwg c2htJ3MgZnJlZWQgKi8KKwkJaWYgKHJlcy5yZXN1bHQuc3RhdHVzID09IE9QVEVFX1NNQ19SRVRV Uk5fT0spIHsKKwkJCXN0cnVjdCB0ZWVfc2htICpzaG07CisKKwkJCXNobSA9IHJlZ19wYWlyX3Rv X3B0cihyZXMucmVzdWx0LnNobV91cHBlcjMyLAorCQkJCQkgICAgICByZXMucmVzdWx0LnNobV9s b3dlcjMyKTsKKwkJCXRlZV9zaG1fZnJlZShzaG0pOworCQl9IGVsc2UgeworCQkJb3B0ZWVfY3Ff d2FpdF9mb3JfY29tcGxldGlvbigmb3B0ZWUtPmNhbGxfcXVldWUsICZ3KTsKKwkJfQorCX0KKwlv cHRlZV9jcV93YWl0X2ZpbmFsKCZvcHRlZS0+Y2FsbF9xdWV1ZSwgJncpOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy90ZWUvb3B0ZWUvY29yZS5jIGIvZHJpdmVycy90ZWUvb3B0ZWUvY29yZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjRmZTc3MTNiMmZiCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUvY29yZS5jCkBAIC0wLDAgKzEsNTk4IEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMg c29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5k IG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cisj aW5jbHVkZSA8bGludXgvdGVlX2Rydi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j bHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgIm9wdGVlX3ByaXZhdGUuaCIKKyNpbmNs dWRlICJvcHRlZV9zbWMuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAib3B0ZWUiCisKKyNkZWZp bmUgT1BURUVfU0hNX05VTV9QUklWX1BBR0VTCTEKKworLyoqCisgKiBvcHRlZV9mcm9tX21zZ19w YXJhbSgpIC0gY29udmVydCBmcm9tIE9QVEVFX01TRyBwYXJhbWV0ZXJzIHRvCisgKgkJCSAgICBz dHJ1Y3QgdGVlX3BhcmFtCisgKiBAcGFyYW1zOglzdWJzeXN0ZW0gaW50ZXJuYWwgcGFyYW1ldGVy IHJlcHJlc2VudGF0aW9uCisgKiBAbnVtX3BhcmFtczoJbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRo ZSBwYXJhbWV0ZXIgYXJyYXlzCisgKiBAbXNnX3BhcmFtczoJT1BURUVfTVNHIHBhcmFtZXRlcnMK KyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIDwwIG9uIGZhaWx1cmUKKyAqLworaW50IG9wdGVl X2Zyb21fbXNnX3BhcmFtKHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtcywgc2l6ZV90IG51bV9wYXJh bXMsCisJCQkgY29uc3Qgc3RydWN0IG9wdGVlX21zZ19wYXJhbSAqbXNnX3BhcmFtcykKK3sKKwlp bnQgcmM7CisJc2l6ZV90IG47CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwlwaHlzX2FkZHJfdCBw YTsKKworCWZvciAobiA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKyspIHsKKwkJc3RydWN0IHRlZV9w YXJhbSAqcCA9IHBhcmFtcyArIG47CisJCWNvbnN0IHN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKm1w ID0gbXNnX3BhcmFtcyArIG47CisJCXUzMiBhdHRyID0gbXAtPmF0dHIgJiBPUFRFRV9NU0dfQVRU Ul9UWVBFX01BU0s7CisKKwkJc3dpdGNoIChhdHRyKSB7CisJCWNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9OT05FOgorCQkJcC0+YXR0ciA9IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTk9ORTsK KwkJCW1lbXNldCgmcC0+dSwgMCwgc2l6ZW9mKHAtPnUpKTsKKwkJCWJyZWFrOworCQljYXNlIE9Q VEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQ6CisJCWNhc2UgT1BURUVfTVNHX0FUVFJfVFlQ RV9WQUxVRV9PVVRQVVQ6CisJCWNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTk9VVDoK KwkJCXAtPmF0dHIgPSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lOUFVUICsKKwkJ CQkgIGF0dHIgLSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUOworCQkJcC0+dS52YWx1 ZS5hID0gbXAtPnUudmFsdWUuYTsKKwkJCXAtPnUudmFsdWUuYiA9IG1wLT51LnZhbHVlLmI7CisJ CQlwLT51LnZhbHVlLmMgPSBtcC0+dS52YWx1ZS5jOworCQkJYnJlYWs7CisJCWNhc2UgT1BURUVf TVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUOgorCQljYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1F TV9PVVRQVVQ6CisJCWNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOT1VUOgorCQkJcC0+ YXR0ciA9IFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOUFVUICsKKwkJCQkgIGF0 dHIgLSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ7CisJCQlwLT51Lm1lbXJlZi5zaXpl ID0gbXAtPnUudG1lbS5zaXplOworCQkJc2htID0gKHN0cnVjdCB0ZWVfc2htICopKHVuc2lnbmVk IGxvbmcpCisJCQkJbXAtPnUudG1lbS5zaG1fcmVmOworCQkJaWYgKCFzaG0pIHsKKwkJCQlwLT51 Lm1lbXJlZi5zaG1fb2ZmcyA9IDA7CisJCQkJcC0+dS5tZW1yZWYuc2htID0gTlVMTDsKKwkJCQli cmVhazsKKwkJCX0KKwkJCXJjID0gdGVlX3NobV9nZXRfcGEoc2htLCAwLCAmcGEpOworCQkJaWYg KHJjKQorCQkJCXJldHVybiByYzsKKwkJCXAtPnUubWVtcmVmLnNobV9vZmZzID0gbXAtPnUudG1l bS5idWZfcHRyIC0gcGE7CisJCQlwLT51Lm1lbXJlZi5zaG0gPSBzaG07CisKKwkJCS8qIENoZWNr IHRoYXQgdGhlIG1lbXJlZiBpcyBjb3ZlcmVkIGJ5IHRoZSBzaG0gb2JqZWN0ICovCisJCQlpZiAo cC0+dS5tZW1yZWYuc2l6ZSkgeworCQkJCXNpemVfdCBvID0gcC0+dS5tZW1yZWYuc2htX29mZnMg KworCQkJCQkgICBwLT51Lm1lbXJlZi5zaXplIC0gMTsKKworCQkJCXJjID0gdGVlX3NobV9nZXRf cGEoc2htLCBvLCBOVUxMKTsKKwkJCQlpZiAocmMpCisJCQkJCXJldHVybiByYzsKKwkJCX0KKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogb3B0ZWVfdG9fbXNnX3BhcmFtKCkgLSBjb252ZXJ0IGZyb20gc3Ry dWN0IHRlZV9wYXJhbXMgdG8gT1BURUVfTVNHIHBhcmFtZXRlcnMKKyAqIEBtc2dfcGFyYW1zOglP UFRFRV9NU0cgcGFyYW1ldGVycworICogQG51bV9wYXJhbXM6CW51bWJlciBvZiBlbGVtZW50cyBp biB0aGUgcGFyYW1ldGVyIGFycmF5cworICogQHBhcmFtczoJc3Vic3lzdGVtIGl0bmVybmFsIHBh cmFtZXRlciByZXByZXNlbnRhdGlvbgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgPDAgb24g ZmFpbHVyZQorICovCitpbnQgb3B0ZWVfdG9fbXNnX3BhcmFtKHN0cnVjdCBvcHRlZV9tc2dfcGFy YW0gKm1zZ19wYXJhbXMsIHNpemVfdCBudW1fcGFyYW1zLAorCQkgICAgICAgY29uc3Qgc3RydWN0 IHRlZV9wYXJhbSAqcGFyYW1zKQoreworCWludCByYzsKKwlzaXplX3QgbjsKKwlwaHlzX2FkZHJf dCBwYTsKKworCWZvciAobiA9IDA7IG4gPCBudW1fcGFyYW1zOyBuKyspIHsKKwkJY29uc3Qgc3Ry dWN0IHRlZV9wYXJhbSAqcCA9IHBhcmFtcyArIG47CisJCXN0cnVjdCBvcHRlZV9tc2dfcGFyYW0g Km1wID0gbXNnX3BhcmFtcyArIG47CisKKwkJc3dpdGNoIChwLT5hdHRyKSB7CisJCWNhc2UgVEVF X0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9OT05FOgorCQkJbXAtPmF0dHIgPSBURUVfSU9DVExfUEFS QU1fQVRUUl9UWVBFX05PTkU7CisJCQltZW1zZXQoJm1wLT51LCAwLCBzaXplb2YobXAtPnUpKTsK KwkJCWJyZWFrOworCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5QVVQ6 CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9PVVRQVVQ6CisJCWNhc2Ug VEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9WQUxVRV9JTk9VVDoKKwkJCW1wLT5hdHRyID0gT1BU RUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTlBVVCArIHAtPmF0dHIgLQorCQkJCSAgIFRFRV9JT0NU TF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5QVVQ7CisJCQltcC0+dS52YWx1ZS5hID0gcC0+dS52 YWx1ZS5hOworCQkJbXAtPnUudmFsdWUuYiA9IHAtPnUudmFsdWUuYjsKKwkJCW1wLT51LnZhbHVl LmMgPSBwLT51LnZhbHVlLmM7CisJCQlicmVhazsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRU Ul9UWVBFX01FTVJFRl9JTlBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX01F TVJFRl9PVVRQVVQ6CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5P VVQ6CisJCQltcC0+YXR0ciA9IE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTlBVVCArCisJCQkJ ICAgcC0+YXR0ciAtCisJCQkJICAgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1SRUZfSU5Q VVQ7CisJCQltcC0+dS50bWVtLnNobV9yZWYgPSAodW5zaWduZWQgbG9uZylwLT51Lm1lbXJlZi5z aG07CisJCQltcC0+dS50bWVtLnNpemUgPSBwLT51Lm1lbXJlZi5zaXplOworCQkJaWYgKCFwLT51 Lm1lbXJlZi5zaG0pIHsKKwkJCQltcC0+dS50bWVtLmJ1Zl9wdHIgPSAwOworCQkJCWJyZWFrOwor CQkJfQorCQkJcmMgPSB0ZWVfc2htX2dldF9wYShwLT51Lm1lbXJlZi5zaG0sCisJCQkJCSAgICBw LT51Lm1lbXJlZi5zaG1fb2ZmcywgJnBhKTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisJ CQltcC0+dS50bWVtLmJ1Zl9wdHIgPSBwYTsKKwkJCW1wLT5hdHRyIHw9IE9QVEVFX01TR19BVFRS X0NBQ0hFX1BSRURFRklORUQgPDwKKwkJCQkJT1BURUVfTVNHX0FUVFJfQ0FDSEVfU0hJRlQ7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBvcHRlZV9nZXRfdmVyc2lvbihzdHJ1Y3QgdGVlX2Rldmlj ZSAqdGVlZGV2LAorCQkJICAgICAgc3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgKnZlcnMp Cit7CisJc3RydWN0IHRlZV9pb2N0bF92ZXJzaW9uX2RhdGEgdiA9IHsKKwkJLmltcGxfaWQgPSBU RUVfSU1QTF9JRF9PUFRFRSwKKwkJLmltcGxfY2FwcyA9IFRFRV9PUFRFRV9DQVBfVFosCisJCS5n ZW5fY2FwcyA9IFRFRV9HRU5fQ0FQX0dQLAorCX07CisJKnZlcnMgPSB2OworfQorCitzdGF0aWMg aW50IG9wdGVlX29wZW4oc3RydWN0IHRlZV9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IG9wdGVl X2NvbnRleHRfZGF0YSAqY3R4ZGF0YTsKKwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2ID0gY3R4 LT50ZWVkZXY7CisJc3RydWN0IG9wdGVlICpvcHRlZSA9IHRlZV9nZXRfZHJ2ZGF0YSh0ZWVkZXYp OworCisJY3R4ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpjdHhkYXRhKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFjdHhkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh0ZWVkZXYgPT0gb3B0ZWUt PnN1cHBfdGVlZGV2KSB7CisJCWJvb2wgYnVzeSA9IHRydWU7CisKKwkJbXV0ZXhfbG9jaygmb3B0 ZWUtPnN1cHAuY3R4X211dGV4KTsKKwkJaWYgKCFvcHRlZS0+c3VwcC5jdHgpIHsKKwkJCWJ1c3kg PSBmYWxzZTsKKwkJCW9wdGVlLT5zdXBwLmN0eCA9IGN0eDsKKwkJfQorCQltdXRleF91bmxvY2so Jm9wdGVlLT5zdXBwLmN0eF9tdXRleCk7CisJCWlmIChidXN5KSB7CisJCQlrZnJlZShjdHhkYXRh KTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwltdXRleF9pbml0KCZjdHhkYXRhLT5t dXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eGRhdGEtPnNlc3NfbGlzdCk7CisKKwljdHgtPmRh dGEgPSBjdHhkYXRhOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvcHRlZV9yZWxlYXNl KHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBvcHRlZV9jb250ZXh0X2RhdGEg KmN0eGRhdGEgPSBjdHgtPmRhdGE7CisJc3RydWN0IHRlZV9kZXZpY2UgKnRlZWRldiA9IGN0eC0+ dGVlZGV2OworCXN0cnVjdCBvcHRlZSAqb3B0ZWUgPSB0ZWVfZ2V0X2RydmRhdGEodGVlZGV2KTsK KwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCXN0cnVjdCBvcHRlZV9tc2dfYXJnICphcmcgPSBOVUxM OworCXBoeXNfYWRkcl90IHBhcmc7CisJc3RydWN0IG9wdGVlX3Nlc3Npb24gKnNlc3M7CisJc3Ry dWN0IG9wdGVlX3Nlc3Npb24gKnNlc3NfdG1wOworCisJaWYgKCFjdHhkYXRhKQorCQlyZXR1cm47 CisKKwlzaG0gPSB0ZWVfc2htX2FsbG9jKGN0eCwgc2l6ZW9mKHN0cnVjdCBvcHRlZV9tc2dfYXJn KSwgVEVFX1NITV9NQVBQRUQpOworCWlmICghSVNfRVJSKHNobSkpIHsKKwkJYXJnID0gdGVlX3No bV9nZXRfdmEoc2htLCAwKTsKKwkJLyoKKwkJICogSWYgdmEycGEgZmFpbHMgZm9yIHNvbWUgcmVh c29uLCB3ZSBjYW4ndCBjYWxsCisJCSAqIG9wdGVlX2Nsb3NlX3Nlc3Npb24oKSwgb25seSBmcmVl IHRoZSBtZW1vcnkuIFNlY3VyZSBPUworCQkgKiB3aWxsIGxlYWsgc2Vzc2lvbnMgYW5kIGZpbmFs bHkgcmVmdXNlIG1vcmUgc2Vzc2lvbnMsIGJ1dAorCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGxldCBu b3JtYWwgd29ybGQgcmVjbGFpbSBpdHMgbWVtb3J5LgorCQkgKi8KKwkJaWYgKCFJU19FUlIoYXJn KSkKKwkJCXRlZV9zaG1fdmEycGEoc2htLCBhcmcsICZwYXJnKTsKKwl9CisKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoc2Vzcywgc2Vzc190bXAsICZjdHhkYXRhLT5zZXNzX2xpc3QsCisJCQkJ IGxpc3Rfbm9kZSkgeworCQlsaXN0X2RlbCgmc2Vzcy0+bGlzdF9ub2RlKTsKKwkJaWYgKCFJU19F UlJfT1JfTlVMTChhcmcpKSB7CisJCQltZW1zZXQoYXJnLCAwLCBzaXplb2YoKmFyZykpOworCQkJ YXJnLT5jbWQgPSBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT047CisJCQlhcmctPnNlc3Npb24g PSBzZXNzLT5zZXNzaW9uX2lkOworCQkJb3B0ZWVfZG9fY2FsbF93aXRoX2FyZyhjdHgsIHBhcmcp OworCQl9CisJCWtmcmVlKHNlc3MpOworCX0KKwlrZnJlZShjdHhkYXRhKTsKKworCWlmICghSVNf RVJSKHNobSkpCisJCXRlZV9zaG1fZnJlZShzaG0pOworCisJY3R4LT5kYXRhID0gTlVMTDsKKwor CWlmICh0ZWVkZXYgPT0gb3B0ZWUtPnN1cHBfdGVlZGV2KSB7CisJCW11dGV4X2xvY2soJm9wdGVl LT5zdXBwLmN0eF9tdXRleCk7CisJCW9wdGVlLT5zdXBwLmN0eCA9IE5VTEw7CisJCW11dGV4X3Vu bG9jaygmb3B0ZWUtPnN1cHAuY3R4X211dGV4KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVl X2RyaXZlcl9vcHMgb3B0ZWVfb3BzID0geworCS5nZXRfdmVyc2lvbiA9IG9wdGVlX2dldF92ZXJz aW9uLAorCS5vcGVuID0gb3B0ZWVfb3BlbiwKKwkucmVsZWFzZSA9IG9wdGVlX3JlbGVhc2UsCisJ Lm9wZW5fc2Vzc2lvbiA9IG9wdGVlX29wZW5fc2Vzc2lvbiwKKwkuY2xvc2Vfc2Vzc2lvbiA9IG9w dGVlX2Nsb3NlX3Nlc3Npb24sCisJLmludm9rZV9mdW5jID0gb3B0ZWVfaW52b2tlX2Z1bmMsCisJ LmNhbmNlbF9yZXEgPSBvcHRlZV9jYW5jZWxfcmVxLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZWVf ZGVzYyBvcHRlZV9kZXNjID0geworCS5uYW1lID0gRFJJVkVSX05BTUUgIi1jbG50IiwKKwkub3Bz ID0gJm9wdGVlX29wcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgdGVlX2RyaXZlcl9vcHMgb3B0ZWVfc3VwcF9vcHMgPSB7CisJLmdldF92ZXJzaW9uID0gb3B0 ZWVfZ2V0X3ZlcnNpb24sCisJLm9wZW4gPSBvcHRlZV9vcGVuLAorCS5yZWxlYXNlID0gb3B0ZWVf cmVsZWFzZSwKKwkuc3VwcF9yZWN2ID0gb3B0ZWVfc3VwcF9yZWN2LAorCS5zdXBwX3NlbmQgPSBv cHRlZV9zdXBwX3NlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHRlZV9kZXNjIG9wdGVlX3N1cHBf ZGVzYyA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FICItc3VwcCIsCisJLm9wcyA9ICZvcHRlZV9z dXBwX29wcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmxhZ3MgPSBURUVfREVTQ19QUklW SUxFR0VELAorfTsKKworc3RhdGljIGJvb2wgb3B0ZWVfbXNnX2FwaV91aWRfaXNfb3B0ZWVfYXBp KG9wdGVlX2ludm9rZV9mbiAqaW52b2tlX2ZuKQoreworCXN0cnVjdCBhcm1fc21jY2NfcmVzIHJl czsKKworCWludm9rZV9mbihPUFRFRV9TTUNfQ0FMTFNfVUlELCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAmcmVzKTsKKworCWlmIChyZXMuYTAgPT0gT1BURUVfTVNHX1VJRF8wICYmIHJlcy5hMSA9PSBP UFRFRV9NU0dfVUlEXzEgJiYKKwkgICAgcmVzLmEyID09IE9QVEVFX01TR19VSURfMiAmJiByZXMu YTMgPT0gT1BURUVfTVNHX1VJRF8zKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9 CisKK3N0YXRpYyBib29sIG9wdGVlX21zZ19hcGlfcmV2aXNpb25faXNfY29tcGF0aWJsZShvcHRl ZV9pbnZva2VfZm4gKmludm9rZV9mbikKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCBhcm1fc21jY2Nf cmVzIHNtY2NjOworCQlzdHJ1Y3Qgb3B0ZWVfc21jX2NhbGxzX3JldmlzaW9uX3Jlc3VsdCByZXN1 bHQ7CisJfSByZXM7CisKKwlpbnZva2VfZm4oT1BURUVfU01DX0NBTExTX1JFVklTSU9OLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAmcmVzLnNtY2NjKTsKKworCWlmIChyZXMucmVzdWx0Lm1ham9yID09 IE9QVEVFX01TR19SRVZJU0lPTl9NQUpPUiAmJgorCSAgICAoaW50KXJlcy5yZXN1bHQubWlub3Ig Pj0gT1BURUVfTVNHX1JFVklTSU9OX01JTk9SKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFs c2U7Cit9CisKK3N0YXRpYyBib29sIG9wdGVlX21zZ19leGNoYW5nZV9jYXBhYmlsaXRpZXMob3B0 ZWVfaW52b2tlX2ZuICppbnZva2VfZm4sCisJCQkJCSAgICB1MzIgKnNlY19jYXBzKQoreworCXVu aW9uIHsKKwkJc3RydWN0IGFybV9zbWNjY19yZXMgc21jY2M7CisJCXN0cnVjdCBvcHRlZV9zbWNf ZXhjaGFuZ2VfY2FwYWJpbGl0aWVzX3Jlc3VsdCByZXN1bHQ7CisJfSByZXM7CisJdTMyIGExID0g MDsKKworCS8qCisJICogVE9ETyBUaGlzIGlzbid0IGVub3VnaCB0byB0ZWxsIGlmIGl0J3MgVVAg c3lzdGVtIChmcm9tIGtlcm5lbAorCSAqIHBvaW50IG9mIHZpZXcpIG9yIG5vdCwgaXNfc21wKCkg cmV0dXJucyB0aGUgdGhlIGluZm9ybWF0aW9uCisJICogbmVlZGVkLCBidXQgY2FuJ3QgYmUgY2Fs bGVkIGRpcmVjdGx5IGZyb20gaGVyZS4KKwkgKi8KKyNpZm5kZWYgQ09ORklHX1NNUAorCWExIHw9 IE9QVEVFX1NNQ19OU0VDX0NBUF9VTklQUk9DRVNTT1I7CisjZW5kaWYKKworCWludm9rZV9mbihP UFRFRV9TTUNfRVhDSEFOR0VfQ0FQQUJJTElUSUVTLCBhMSwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJ ICAmcmVzLnNtY2NjKTsKKworCWlmIChyZXMucmVzdWx0LnN0YXR1cyAhPSBPUFRFRV9TTUNfUkVU VVJOX09LKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqc2VjX2NhcHMgPSByZXMucmVzdWx0LmNhcGFi aWxpdGllczsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCB0ZWVfc2htX3Bvb2wg Kgorb3B0ZWVfY29uZmlnX3NobV9pb3JlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgb3B0ZWVfaW52 b2tlX2ZuICppbnZva2VfZm4sCisJCQkgdm9pZCBfX2lvbWVtICoqaW9yZW1hcGVkX3NobSkKK3sK Kwl1bmlvbiB7CisJCXN0cnVjdCBhcm1fc21jY2NfcmVzIHNtY2NjOworCQlzdHJ1Y3Qgb3B0ZWVf c21jX2dldF9zaG1fY29uZmlnX3Jlc3VsdCByZXN1bHQ7CisJfSByZXM7CisJc3RydWN0IHRlZV9z aG1fcG9vbCAqcG9vbDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXBoeXNfYWRkcl90IHBhZGRy OworCXNpemVfdCBzaXplOworCXBoeXNfYWRkcl90IGJlZ2luOworCXBoeXNfYWRkcl90IGVuZDsK Kwl2b2lkIF9faW9tZW0gKnZhOworCXN0cnVjdCB0ZWVfc2htX3Bvb2xfbWVtX2luZm8gcHJpdl9p bmZvOworCXN0cnVjdCB0ZWVfc2htX3Bvb2xfbWVtX2luZm8gZG1hYnVmX2luZm87CisKKwlpbnZv a2VfZm4oT1BURUVfU01DX0dFVF9TSE1fQ09ORklHLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAmcmVz LnNtY2NjKTsKKwlpZiAocmVzLnJlc3VsdC5zdGF0dXMgIT0gT1BURUVfU01DX1JFVFVSTl9PSykg eworCQlkZXZfaW5mbyhkZXYsICJzaG0gc2VydmljZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJaWYgKHJlcy5yZXN1bHQuc2V0dGluZ3MgIT0g T1BURUVfU01DX1NITV9DQUNIRUQpIHsKKwkJZGV2X2VycihkZXYsICJvbmx5IG5vcm1hbCBjYWNo ZWQgc2hhcmVkIG1lbW9yeSBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKKwl9CisKKwliZWdpbiA9IHJvdW5kdXAocmVzLnJlc3VsdC5zdGFydCwgUEFHRV9TSVpFKTsK KwllbmQgPSByb3VuZGRvd24ocmVzLnJlc3VsdC5zdGFydCArIHJlcy5yZXN1bHQuc2l6ZSwgUEFH RV9TSVpFKTsKKwlwYWRkciA9IGJlZ2luOworCXNpemUgPSBlbmQgLSBiZWdpbjsKKworCWlmIChz aXplIDwgMiAqIE9QVEVFX1NITV9OVU1fUFJJVl9QQUdFUyAqIFBBR0VfU0laRSkgeworCQlkZXZf ZXJyKGRldiwgInRvbyBzbWFsbCBzaGFyZWQgbWVtb3J5IGFyZWFcbiIpOworCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKwl9CisKKwl2YSA9IGlvcmVtYXBfY2FjaGUocGFkZHIsIHNpemUpOwor CWlmICghdmEpIHsKKwkJZGV2X2VycihkZXYsICJzaGFyZWQgbWVtb3J5IGlvcmVtYXAgZmFpbGVk XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCXZhZGRyID0gKHVuc2lnbmVk IGxvbmcpdmE7CisKKwlwcml2X2luZm8udmFkZHIgPSB2YWRkcjsKKwlwcml2X2luZm8ucGFkZHIg PSBwYWRkcjsKKwlwcml2X2luZm8uc2l6ZSA9IE9QVEVFX1NITV9OVU1fUFJJVl9QQUdFUyAqIFBB R0VfU0laRTsKKwlkbWFidWZfaW5mby52YWRkciA9IHZhZGRyICsgT1BURUVfU0hNX05VTV9QUklW X1BBR0VTICogUEFHRV9TSVpFOworCWRtYWJ1Zl9pbmZvLnBhZGRyID0gcGFkZHIgKyBPUFRFRV9T SE1fTlVNX1BSSVZfUEFHRVMgKiBQQUdFX1NJWkU7CisJZG1hYnVmX2luZm8uc2l6ZSA9IHNpemUg LSBPUFRFRV9TSE1fTlVNX1BSSVZfUEFHRVMgKiBQQUdFX1NJWkU7CisKKwlwb29sID0gdGVlX3No bV9wb29sX2FsbG9jX3Jlc19tZW0oZGV2LCAmcHJpdl9pbmZvLCAmZG1hYnVmX2luZm8pOworCWlm IChJU19FUlIocG9vbCkpIHsKKwkJaW91bm1hcCh2YSk7CisJCWdvdG8gb3V0OworCX0KKworCSpp b3JlbWFwZWRfc2htID0gdmE7CitvdXQ6CisJcmV0dXJuIHBvb2w7Cit9CisKK3N0YXRpYyBpbnQg Z2V0X2ludm9rZV9mdW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgb3B0ZWVfaW52b2tlX2ZuICoqaW52 b2tlX2ZuKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJY29u c3QgY2hhciAqbWV0aG9kOworCisJZGV2X2luZm8oZGV2LCAicHJvYmluZyBmb3IgY29uZHVpdCBt ZXRob2QgZnJvbSBEVC5cbiIpOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAi bWV0aG9kIiwgJm1ldGhvZCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAibWlzc2luZyBcIm1ldGhvZFwi IHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHZj IiwgbWV0aG9kKSkgeworCQkqaW52b2tlX2ZuID0gYXJtX3NtY2NjX2h2YzsKKwl9IGVsc2UgaWYg KCFzdHJjbXAoInNtYyIsIG1ldGhvZCkpIHsKKwkJKmludm9rZV9mbiA9IGFybV9zbWNjY19zbWM7 CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oZGV2LCAiaW52YWxpZCBcIm1ldGhvZFwiIHByb3BlcnR5 OiAlc1xuIiwgbWV0aG9kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IG9wdGVlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJb3B0ZWVfaW52b2tlX2ZuICppbnZva2VfZm47CisJc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9v bDsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmlvcmVtYXBl ZF9zaG0gPSBOVUxMOworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVkZXY7CisJdTMyIHNlY19jYXBz OworCWludCByYzsKKworCXJjID0gZ2V0X2ludm9rZV9mdW5jKCZwZGV2LT5kZXYsICZpbnZva2Vf Zm4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKCFvcHRlZV9tc2dfYXBpX3VpZF9p c19vcHRlZV9hcGkoaW52b2tlX2ZuKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiYXBpIHVp ZCBtaXNtYXRjaFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghb3B0ZWVfbXNn X2FwaV9yZXZpc2lvbl9pc19jb21wYXRpYmxlKGludm9rZV9mbikpIHsKKwkJZGV2X3dhcm4oJnBk ZXYtPmRldiwgImFwaSByZXZpc2lvbiBtaXNtYXRjaFxuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmICghb3B0ZWVfbXNnX2V4Y2hhbmdlX2NhcGFiaWxpdGllcyhpbnZva2VfZm4sICZz ZWNfY2FwcykpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNhcGFiaWxpdGllcyBtaXNtYXRj aFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogV2UgaGF2ZSBubyBvdGhl ciBvcHRpb24gZm9yIHNoYXJlZCBtZW1vcnksIGlmIHNlY3VyZSB3b3JsZAorCSAqIGRvZXNuJ3Qg aGF2ZSBhbnkgcmVzZXJ2ZWQgbWVtb3J5IHdlIGNhbiB1c2Ugd2UgY2FuJ3QgY29udGludWUuCisJ ICovCisJaWYgKCEoc2VjX2NhcHMgJiBPUFRFRV9TTUNfU0VDX0NBUF9IQVZFX1JFU0VSVkVSRURf U0hNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwb29sID0gb3B0ZWVfY29uZmlnX3NobV9pb3Jl bWFwKCZwZGV2LT5kZXYsIGludm9rZV9mbiwgJmlvcmVtYXBlZF9zaG0pOworCWlmIChJU19FUlIo cG9vbCkpCisJCXJldHVybiBQVFJfRVJSKHBvb2wpOworCisJb3B0ZWUgPSBkZXZtX2t6YWxsb2Mo JnBkZXYtPmRldiwgc2l6ZW9mKCpvcHRlZSksIEdGUF9LRVJORUwpOworCWlmICghb3B0ZWUpIHsK KwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlvcHRlZS0+ZGV2ID0gJnBkZXYt PmRldjsKKwlvcHRlZS0+aW52b2tlX2ZuID0gaW52b2tlX2ZuOworCisJdGVlZGV2ID0gdGVlX2Rl dmljZV9hbGxvYygmb3B0ZWVfZGVzYywgJnBkZXYtPmRldiwgcG9vbCwgb3B0ZWUpOworCWlmIChJ U19FUlIodGVlZGV2KSkgeworCQlyYyA9IFBUUl9FUlIodGVlZGV2KTsKKwkJZ290byBlcnI7CisJ fQorCW9wdGVlLT50ZWVkZXYgPSB0ZWVkZXY7CisKKwl0ZWVkZXYgPSB0ZWVfZGV2aWNlX2FsbG9j KCZvcHRlZV9zdXBwX2Rlc2MsICZwZGV2LT5kZXYsIHBvb2wsIG9wdGVlKTsKKwlpZiAoSVNfRVJS KHRlZWRldikpIHsKKwkJcmMgPSBQVFJfRVJSKHRlZWRldik7CisJCWdvdG8gZXJyOworCX0KKwlv cHRlZS0+c3VwcF90ZWVkZXYgPSB0ZWVkZXY7CisKKwlyYyA9IHRlZV9kZXZpY2VfcmVnaXN0ZXIo b3B0ZWUtPnRlZWRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycjsKKworCXJjID0gdGVlX2Rldmlj ZV9yZWdpc3RlcihvcHRlZS0+c3VwcF90ZWVkZXYpOworCWlmIChyYykKKwkJZ290byBlcnI7CisK KwltdXRleF9pbml0KCZvcHRlZS0+Y2FsbF9xdWV1ZS5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQo Jm9wdGVlLT5jYWxsX3F1ZXVlLndhaXRlcnMpOworCW9wdGVlX3dhaXRfcXVldWVfaW5pdCgmb3B0 ZWUtPndhaXRfcXVldWUpOworCW9wdGVlX3N1cHBfaW5pdCgmb3B0ZWUtPnN1cHApOworCW9wdGVl LT5pb3JlbWFwZWRfc2htID0gaW9yZW1hcGVkX3NobTsKKwlvcHRlZS0+cG9vbCA9IHBvb2w7CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBvcHRlZSk7CisKKwlvcHRlZV9lbmFibGVfc2ht X2NhY2hlKG9wdGVlKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXplZCBkcml2 ZXJcbiIpOworCXJldHVybiAwOworZXJyOgorCWlmIChvcHRlZSkgeworCQkvKgorCQkgKiB0ZWVf ZGV2aWNlX3VucmVnaXN0ZXIoKSBpcyBzYWZlIHRvIGNhbGwgZXZlbiBpZiB0aGUKKwkJICogZGV2 aWNlcyBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkIHdpdGgKKwkJICogdGVlX2RldmljZV9yZWdpc3Rl cigpIHlldC4KKwkJICovCisJCXRlZV9kZXZpY2VfdW5yZWdpc3RlcihvcHRlZS0+c3VwcF90ZWVk ZXYpOworCQl0ZWVfZGV2aWNlX3VucmVnaXN0ZXIob3B0ZWUtPnRlZWRldik7CisJfQorCWlmIChw b29sKQorCQl0ZWVfc2htX3Bvb2xfZnJlZShwb29sKTsKKwlpZiAoaW9yZW1hcGVkX3NobSkKKwkJ aW91bm1hcChpb3JlbWFwZWRfc2htKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgb3B0 ZWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9wdGVl ICpvcHRlZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyoKKwkgKiBBc2sgT1At VEVFIHRvIGZyZWUgYWxsIGNhY2hlZCBzaGFyZWQgbWVtb3J5IG9iamVjdHMgdG8gZGVjcmVhc2UK KwkgKiByZWZlcmVuY2UgY291bnRlcnMgYW5kIGFsc28gYXZvaWQgd2lsZCBwb2ludGVycyBpbiBz ZWN1cmUgd29ybGQKKwkgKiBpbnRvIHRoZSBvbGQgc2hhcmVkIG1lbW9yeSByYW5nZS4KKwkgKi8K KwlvcHRlZV9kaXNhYmxlX3NobV9jYWNoZShvcHRlZSk7CisKKwkvKgorCSAqIFRoZSB0d28gZGV2 aWNlcyBoYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGJlZm9yZSB3ZSBjYW4gZnJlZSB0aGUKKwkgKiBv dGhlciByZXNvdXJjZXMuCisJICovCisJdGVlX2RldmljZV91bnJlZ2lzdGVyKG9wdGVlLT5zdXBw X3RlZWRldik7CisJdGVlX2RldmljZV91bnJlZ2lzdGVyKG9wdGVlLT50ZWVkZXYpOworCisJdGVl X3NobV9wb29sX2ZyZWUob3B0ZWUtPnBvb2wpOworCWlmIChvcHRlZS0+aW9yZW1hcGVkX3NobSkK KwkJaW91bm1hcChvcHRlZS0+aW9yZW1hcGVkX3NobSk7CisJb3B0ZWVfd2FpdF9xdWV1ZV9leGl0 KCZvcHRlZS0+d2FpdF9xdWV1ZSk7CisJb3B0ZWVfc3VwcF91bmluaXQoJm9wdGVlLT5zdXBwKTsK KwltdXRleF9kZXN0cm95KCZvcHRlZS0+Y2FsbF9xdWV1ZS5tdXRleCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3B0ZWVfbWF0Y2hbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gImxpbmFybyxvcHRlZS10eiIgfSwKKwl7fSwKK307CisKK3N0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9wdGVlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0gewor CQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvcHRlZV9tYXRjaCwK Kwl9LAorCS5wcm9iZSA9IG9wdGVlX3Byb2JlLAorCS5yZW1vdmUgPSBvcHRlZV9yZW1vdmUsCit9 OworCitzdGF0aWMgaW50IF9faW5pdCBvcHRlZV9kcml2ZXJfaW5pdCh2b2lkKQoreworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCS8qCisJICogUHJlZmVycmVkIHBhdGggaXMgL2Zpcm13 YXJlL29wdGVlLCBidXQgaXQncyB0aGUgbWF0Y2hpbmcgdGhhdAorCSAqIG1hdHRlcnMuCisJICov CisJZm9yX2VhY2hfbWF0Y2hpbmdfbm9kZShub2RlLCBvcHRlZV9tYXRjaCkKKwkJb2ZfcGxhdGZv cm1fZGV2aWNlX2NyZWF0ZShub2RlLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBwbGF0Zm9ybV9k cml2ZXJfcmVnaXN0ZXIoJm9wdGVlX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChvcHRlZV9kcml2 ZXJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvcHRlZV9kcml2ZXJfZXhpdCh2b2lkKQor eworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvcHRlZV9kcml2ZXIpOworfQorbW9kdWxl X2V4aXQob3B0ZWVfZHJpdmVyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJMaW5hcm8iKTsKK01P RFVMRV9ERVNDUklQVElPTigiT1AtVEVFIGRyaXZlciIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJ Q0UoIiIpOworTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfbXNnLmggYi9kcml2ZXJzL3Rl ZS9vcHRlZS9vcHRlZV9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjNjMGE5MTIxMzYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL29w dGVlX21zZy5oCkBAIC0wLDAgKzEsNDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIw MTYsIExpbmFybyBMaW1pdGVkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICog dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O VFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq LworI2lmbmRlZiBfT1BURUVfTVNHX0gKKyNkZWZpbmUgX09QVEVFX01TR19ICisKKyNpbmNsdWRl IDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogVGhp cyBmaWxlIGRlZmluZXMgdGhlIE9QLVRFRSBtZXNzYWdlIHByb3RvY29sIHVzZWQgdG8gY29tbXVu aWNhdGUKKyAqIHdpdGggYW4gaW5zdGFuY2Ugb2YgT1AtVEVFIHJ1bm5pbmcgaW4gc2VjdXJlIHdv cmxkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXZpZGVkIGludG8gdGhyZWUgc2VjdGlvbnMuCisg KiAxLiBGb3JtYXR0aW5nIG9mIG1lc3NhZ2VzLgorICogMi4gUmVxdWVzdHMgZnJvbSBub3JtYWwg d29ybGQKKyAqIDMuIFJlcXVlc3RzIGZyb20gc2VjdXJlIHdvcmxkLCBSZW1vdGUgUHJvY2VkdXJl IENhbGwgKFJQQyksIGhhbmRsZWQgYnkKKyAqICAgIHRlZS1zdXBwbGljYW50LgorICovCisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogUGFydCAxIC0gZm9ybWF0dGluZyBvZiBtZXNzYWdlcwor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfTk9O RQkJMHgwCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQJCTB4MQorI2Rl ZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVAkweDIKKyNkZWZpbmUgT1BURUVf TVNHX0FUVFJfVFlQRV9WQUxVRV9JTk9VVAkJMHgzCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZ UEVfUk1FTV9JTlBVVAkJMHg1CisjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9PVVRQ VVQJCTB4NgorI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5PVVQJCTB4NworI2Rl ZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQJCTB4OQorI2RlZmluZSBPUFRFRV9N U0dfQVRUUl9UWVBFX1RNRU1fT1VUUFVUCQkweGEKKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQ RV9UTUVNX0lOT1VUCQkweGIKKworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX01BU0sJCUdF Tk1BU0soNywgMCkKKworLyoKKyAqIE1ldGEgcGFyYW1ldGVyIHRvIGJlIGFic29yYmVkIGJ5IHRo ZSBTZWN1cmUgT1MgYW5kIG5vdCBwYXNzZWQKKyAqIHRvIHRoZSBUcnVzdGVkIEFwcGxpY2F0aW9u LgorICoKKyAqIEN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBPUFRFRV9NU0dfQ01EX09QRU5fU0VT U0lPTi4KKyAqLworI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9NRVRBCQkJQklUKDgpCisKKy8qCisg KiBUaGUgdGVtcG9yYXJ5IHNoYXJlZCBtZW1vcnkgb2JqZWN0IGlzIG5vdCBwaHlzaWNhbGx5IGNv bnRpZ291cyBhbmQgdGhpcworICogdGVtcCBtZW1yZWYgaXMgZm9sbG93ZWQgYnkgYW5vdGhlciBm cmFnbWVudCB1bnRpbCB0aGUgbGFzdCB0ZW1wIG1lbXJlZgorICogdGhhdCBkb2Vzbid0IGhhdmUg dGhpcyBiaXQgc2V0LgorICovCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX0ZSQUdNRU5UCQkJQklU KDkpCisKKy8qCisgKiBNZW1vcnkgYXR0cmlidXRlcyBmb3IgY2FjaGluZyBwYXNzZWQgd2l0aCB0 ZW1wIG1lbXJlZnMuIFRoZSBhY3R1YWwgdmFsdWUKKyAqIHVzZWQgaXMgZGVmaW5lZCBvdXRzaWRl IHRoZSBtZXNzYWdlIHByb3RvY29sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICogT1BURUVfTVNH X0FUVFJfQ0FDSEVfUFJFREVGSU5FRCB3aGljaCBtZWFucyB0aGUgYXR0cmlidXRlcyBhbHJlYWR5 CisgKiBkZWZpbmVkIGZvciB0aGUgbWVtb3J5IHJhbmdlIHNob3VsZCBiZSB1c2VkLiBJZiBvcHRl ZV9zbWMuaCBpcyB1c2VkIGFzCisgKiBiZWFyZXIgb2YgdGhpcyBwcm90b2NvbCBPUFRFRV9TTUNf U0hNXyogaXMgdXNlZCBmb3IgdmFsdWVzLgorICovCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX0NB Q0hFX1NISUZUCQkxNgorI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9DQUNIRV9NQVNLCQlHRU5NQVNL KDIsIDApCisjZGVmaW5lIE9QVEVFX01TR19BVFRSX0NBQ0hFX1BSRURFRklORUQJCTAKKworLyoK KyAqIFNhbWUgdmFsdWVzIGFzIFRFRV9MT0dJTl8qIGZyb20gVEVFIEludGVybmFsIEFQSQorICov CisjZGVmaW5lIE9QVEVFX01TR19MT0dJTl9QVUJMSUMJCQkweDAwMDAwMDAwCisjZGVmaW5lIE9Q VEVFX01TR19MT0dJTl9VU0VSCQkJMHgwMDAwMDAwMQorI2RlZmluZSBPUFRFRV9NU0dfTE9HSU5f R1JPVVAJCQkweDAwMDAwMDAyCisjZGVmaW5lIE9QVEVFX01TR19MT0dJTl9BUFBMSUNBVElPTgkJ MHgwMDAwMDAwNAorI2RlZmluZSBPUFRFRV9NU0dfTE9HSU5fQVBQTElDQVRJT05fVVNFUgkweDAw MDAwMDA1CisjZGVmaW5lIE9QVEVFX01TR19MT0dJTl9BUFBMSUNBVElPTl9HUk9VUAkweDAwMDAw MDA2CisKKy8qKgorICogc3RydWN0IG9wdGVlX21zZ19wYXJhbV90bWVtIC0gdGVtcG9yYXJ5IG1l bW9yeSByZWZlcmVuY2UgcGFyYW1ldGVyCisgKiBAYnVmX3B0cjoJQWRkcmVzcyBvZiB0aGUgYnVm ZmVyCisgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBAc2htX3JlZjoJVGVtcG9yYXJ5 IHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlLCBwb2ludGVyIHRvIGEgc3RydWN0IHRlZV9zaG0KKyAq CisgKiBTZWN1cmUgYW5kIG5vcm1hbCB3b3JsZCBjb21tdW5pY2F0ZXMgcG9pbnRlcnMgYXMgcGh5 c2ljYWwgYWRkcmVzcworICogaW5zdGVhZCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzLiBUaGlzIGlz IGJlY2F1c2Ugc2VjdXJlIGFuZCBub3JtYWwgd29ybGQKKyAqIGhhdmUgY29tcGxldGVseSBpbmRl cGVuZGVudCBtZW1vcnkgbWFwcGluZy4gTm9ybWFsIHdvcmxkIGNhbiBldmVuIGhhdmUgYQorICog aHlwZXJ2aXNvciB3aGljaCBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRk cmVzcyAoQUtBIElQQQorICogaW4gQVJNIGRvY3VtZW50YXRpb24pIHRvIGEgcmVhbCBwaHlzaWNh bCBhZGRyZXNzIGJlZm9yZSBwYXNzaW5nIHRoZQorICogc3RydWN0dXJlIHRvIHNlY3VyZSB3b3Js ZC4KKyAqLworc3RydWN0IG9wdGVlX21zZ19wYXJhbV90bWVtIHsKKwl1NjQgYnVmX3B0cjsKKwl1 NjQgc2l6ZTsKKwl1NjQgc2htX3JlZjsKK307CisKKy8qKgorICogc3RydWN0IG9wdGVlX21zZ19w YXJhbV9ybWVtIC0gcmVnaXN0ZXJlZCBtZW1vcnkgcmVmZXJlbmNlIHBhcmFtZXRlcgorICogQG9m ZnM6CU9mZnNldCBpbnRvIHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlCisgKiBAc2l6ZToJU2l6ZSBv ZiB0aGUgYnVmZmVyCisgKiBAc2htX3JlZjoJU2hhcmVkIG1lbW9yeSByZWZlcmVuY2UsIHBvaW50 ZXIgdG8gYSBzdHJ1Y3QgdGVlX3NobQorICovCitzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtX3JtZW0g eworCXU2NCBvZmZzOworCXU2NCBzaXplOworCXU2NCBzaG1fcmVmOworfTsKKworLyoqCisgKiBz dHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtX3ZhbHVlIC0gb3BhcXVlIHZhbHVlIHBhcmFtZXRlcgorICoK KyAqIFZhbHVlIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB1bmNoZWNrZWQgYmV0d2VlbiBub3JtYWwg YW5kIHNlY3VyZSB3b3JsZC4KKyAqLworc3RydWN0IG9wdGVlX21zZ19wYXJhbV92YWx1ZSB7CisJ dTY0IGE7CisJdTY0IGI7CisJdTY0IGM7Cit9OworCisvKioKKyAqIHN0cnVjdCBvcHRlZV9tc2df cGFyYW0gLSBwYXJhbWV0ZXIgdXNlZCB0b2dldGhlciB3aXRoIHN0cnVjdCBvcHRlZV9tc2dfYXJn CisgKiBAYXR0cjoJYXR0cmlidXRlcworICogQHRtZW06CXBhcmFtZXRlciBieSB0ZW1wb3Jhcnkg bWVtb3J5IHJlZmVyZW5jZQorICogQHJtZW06CXBhcmFtZXRlciBieSByZWdpc3RlcmVkIG1lbW9y eSByZWZlcmVuY2UKKyAqIEB2YWx1ZToJcGFyYW1ldGVyIGJ5IG9wYXF1ZSB2YWx1ZQorICoKKyAq IEBhdHRyICYgT1BURUVfTVNHX0FUVFJfVFlQRV9NQVNLIGluZGljYXRlcyBpZiB0bWVtLCBybWVt IG9yIHZhbHVlIGlzIHVzZWQgaW4KKyAqIHRoZSB1bmlvbi4gT1BURUVfTVNHX0FUVFJfVFlQRV9W QUxVRV8qIGluZGljYXRlcyB2YWx1ZSwKKyAqIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV8qIGlu ZGljYXRlcyB0bWVtIGFuZAorICogT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNXyogaW5kaWNhdGVz IHJtZW0uCisgKiBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkUgaW5kaWNhdGVzIHRoYXQgbm9uZSBv ZiB0aGUgbWVtYmVycyBhcmUgdXNlZC4KKyAqLworc3RydWN0IG9wdGVlX21zZ19wYXJhbSB7CisJ dTY0IGF0dHI7CisJdW5pb24geworCQlzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtX3RtZW0gdG1lbTsK KwkJc3RydWN0IG9wdGVlX21zZ19wYXJhbV9ybWVtIHJtZW07CisJCXN0cnVjdCBvcHRlZV9tc2df cGFyYW1fdmFsdWUgdmFsdWU7CisJfSB1OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb3B0ZWVfbXNn X2FyZyAtIGNhbGwgYXJndW1lbnQKKyAqIEBjbWQ6IENvbW1hbmQsIG9uZSBvZiBPUFRFRV9NU0df Q01EXyogb3IgT1BURUVfTVNHX1JQQ19DTURfKgorICogQGZ1bmM6IFRydXN0ZWQgQXBwbGljYXRp b24gZnVuY3Rpb24sIHNwZWNpZmljIHRvIHRoZSBUcnVzdGVkIEFwcGxpY2F0aW9uLAorICoJICAg ICB1c2VkIGlmIGNtZCA9PSBPUFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5ECisgKiBAc2Vzc2lv bjogSW4gcGFyYW1ldGVyIGZvciBhbGwgT1BURUVfTVNHX0NNRF8qIGV4Y2VwdAorICoJICAgICBP UFRFRV9NU0dfQ01EX09QRU5fU0VTU0lPTiB3aGVyZSBpdCdzIGFuIG91dHB1dCBwYXJhbWV0ZXIg aW5zdGVhZAorICogQGNhbmNlbF9pZDogQ2FuY2VsbGF0aW9uIGlkLCBhIHVuaXF1ZSB2YWx1ZSB0 byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKKyAqIEByZXQ6IHJldHVybiB2YWx1ZQorICogQHJldF9v cmlnaW46IG9yaWdpbiBvZiB0aGUgcmV0dXJuIHZhbHVlCisgKiBAbnVtX3BhcmFtczogbnVtYmVy IG9mIHBhcmFtZXRlcnMgc3VwcGxpZWQgdG8gdGhlIE9TIENvbW1hbmQKKyAqIEBwYXJhbXM6IHRo ZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIHRvIHRoZSBPUyBDb21tYW5kCisgKgorICogQWxsIG5vcm1h bCBjYWxscyB0byBUcnVzdGVkIE9TIHVzZXMgdGhpcyBzdHJ1Y3QuIElmIGNtZCByZXF1aXJlcyBm dXJ0aGVyCisgKiBpbmZvcm1hdGlvbiB0aGFuIHdoYXQgdGhlc2UgZmllbGQgaG9sZHMgaXQgY2Fu IGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlcgorICogdGFnZ2VkIGFzIG1ldGEgKHNldHRpbmcgdGhl IE9QVEVFX01TR19BVFRSX01FVEEgYml0IGluIGNvcnJlc3BvbmRpbmcKKyAqIGF0dHJzIGZpZWxk KS4gQWxsIHBhcmFtZXRlcnMgdGFnZ2VkIGFzIG1ldGEgaGFzIHRvIGNvbWUgZmlyc3QuCisgKgor ICogVGVtcCBtZW1yZWYgcGFyYW1ldGVycyBjYW4gYmUgZnJhZ21lbnRlZCBpZiBzdXBwb3J0ZWQg YnkgdGhlIFRydXN0ZWQgT1MKKyAqICh3aGVuIG9wdGVlX3NtYy5oIGlzIGJlYXJlciBvZiB0aGlz IHByb3RvY29sIHRoaXMgaXMgaW5kaWNhdGVkIHdpdGgKKyAqIE9QVEVFX1NNQ19TRUNfQ0FQX1VO UkVHSVNURVJFRF9TSE0pLiBJZiBhIGxvZ2ljYWwgbWVtcmVmIHBhcmFtZXRlciBpcworICogZnJh Z21lbnRlZCB0aGVuIGhhcyBhbGwgYnV0IHRoZSBsYXN0IGZyYWdtZW50IHRoZQorICogT1BURUVf TVNHX0FUVFJfRlJBR01FTlQgYml0IHNldCBpbiBhdHRycy4gRXZlbiBpZiBhIG1lbXJlZiBpcyBm cmFnbWVudGVkCisgKiBpdCB3aWxsIHN0aWxsIGJlIHByZXNlbnRlZCBhcyBhIHNpbmdsZSBsb2dp Y2FsIG1lbXJlZiB0byB0aGUgVHJ1c3RlZAorICogQXBwbGljYXRpb24uCisgKi8KK3N0cnVjdCBv cHRlZV9tc2dfYXJnIHsKKwl1MzIgY21kOworCXUzMiBmdW5jOworCXUzMiBzZXNzaW9uOworCXUz MiBjYW5jZWxfaWQ7CisJdTMyIHBhZDsKKwl1MzIgcmV0OworCXUzMiByZXRfb3JpZ2luOworCXUz MiBudW1fcGFyYW1zOworCisJLyoKKwkgKiB0aGlzIHN0cnVjdCBpcyA4IGJ5dGUgYWxpZ25lZCBz aW5jZSB0aGUgJ3N0cnVjdCBvcHRlZV9tc2dfcGFyYW0nCisJICogd2hpY2ggZm9sbG93cyByZXF1 aXJlcyA4IGJ5dGUgYWxpZ25tZW50LgorCSAqCisJICogQ29tbWVudGVkIG91dCBlbGVtZW50IHVz ZWQgdG8gdmlzdWFsaXplIHRoZSBsYXlvdXQgZHluYW1pYyBwYXJ0CisJICogb2YgdGhlIHN0cnVj dC4gVGhpcyBmaWVsZCBpcyBub3QgYXZhaWxhYmxlIGF0IGFsbCBpZgorCSAqIG51bV9wYXJhbXMg PT0gMC4KKwkgKgorCSAqIHBhcmFtcyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBtYWNybyBPUFRF RV9NU0dfR0VUX1BBUkFNUworCSAqCisJICogc3RydWN0IG9wdGVlX21zZ19wYXJhbSBwYXJhbXNb bnVtX3BhcmFtc107CisJICovCit9IF9fYWxpZ25lZCg4KTsKKworLyoqCisgKiBPUFRFRV9NU0df R0VUX1BBUkFNUyAtIHJldHVybiBwb2ludGVyIHRvIHN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKgor ICoKKyAqIEB4OiBQb2ludGVyIHRvIGEgc3RydWN0IG9wdGVlX21zZ19hcmcKKyAqCisgKiBSZXR1 cm5zIGEgcG9pbnRlciB0byB0aGUgcGFyYW1zW10gaW5zaWRlIGEgc3RydWN0IG9wdGVlX21zZ19h cmcuCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX0dFVF9QQVJBTVMoeCkgXAorCShzdHJ1Y3Qgb3B0 ZWVfbXNnX3BhcmFtICopKCgoc3RydWN0IG9wdGVlX21zZ19hcmcgKikoeCkpICsgMSkKKworLyoq CisgKiBPUFRFRV9NU0dfR0VUX0FSR19TSVpFIC0gcmV0dXJuIHNpemUgb2Ygc3RydWN0IG9wdGVl X21zZ19hcmcKKyAqCisgKiBAbnVtX3BhcmFtczogTnVtYmVyIG9mIHBhcmFtZXRlcnMgZW1iZWRk ZWQgaW4gdGhlIHN0cnVjdCBvcHRlZV9tc2dfYXJnCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBv ZiB0aGUgc3RydWN0IG9wdGVlX21zZ19hcmcgdG9nZXRoZXIgd2l0aCB0aGUgbnVtYmVyCisgKiBv ZiBlbWJlZGRlZCBwYXJhbWV0ZXJzLgorICovCisjZGVmaW5lIE9QVEVFX01TR19HRVRfQVJHX1NJ WkUobnVtX3BhcmFtcykgXAorCShzaXplb2Yoc3RydWN0IG9wdGVlX21zZ19hcmcpICsgXAorCSBz aXplb2Yoc3RydWN0IG9wdGVlX21zZ19wYXJhbSkgKiAobnVtX3BhcmFtcykpCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogUGFydCAyIC0gcmVxdWVzdHMgZnJvbSBub3JtYWwgd29ybGQKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJldHVybiB0aGUgZm9sbG93aW5nIFVJRCBp ZiB1c2luZyBBUEkgc3BlY2lmaWVkIGluIHRoaXMgZmlsZSB3aXRob3V0CisgKiBmdXJ0aGVyIGV4 dGVuc2lvbnM6CisgKiAzODRmYjNlMC1lN2Y4LTExZTMtYWY2My0wMDAyYTVkNWM1MWIuCisgKiBS ZXByZXNlbnRlZCBpbiA0IDMyLWJpdCB3b3JkcyBpbiBPUFRFRV9NU0dfVUlEXzAsIE9QVEVFX01T R19VSURfMSwKKyAqIE9QVEVFX01TR19VSURfMiwgT1BURUVfTVNHX1VJRF8zLgorICovCisjZGVm aW5lIE9QVEVFX01TR19VSURfMAkJCTB4Mzg0ZmIzZTAKKyNkZWZpbmUgT1BURUVfTVNHX1VJRF8x CQkJMHhlN2Y4MTFlMworI2RlZmluZSBPUFRFRV9NU0dfVUlEXzIJCQkweGFmNjMwMDAyCisjZGVm aW5lIE9QVEVFX01TR19VSURfMwkJCTB4YTVkNWM1MWIKKyNkZWZpbmUgT1BURUVfTVNHX0ZVTkNJ RF9DQUxMU19VSUQJMHhGRjAxCisKKy8qCisgKiBSZXR1cm5zIDIuMCBpZiB1c2luZyBBUEkgc3Bl Y2lmaWVkIGluIHRoaXMgZmlsZSB3aXRob3V0IGZ1cnRoZXIKKyAqIGV4dGVuc2lvbnMuIFJlcHJl c2VudGVkIGluIDIgMzItYml0IHdvcmRzIGluIE9QVEVFX01TR19SRVZJU0lPTl9NQUpPUgorICog YW5kIE9QVEVFX01TR19SRVZJU0lPTl9NSU5PUgorICovCisjZGVmaW5lIE9QVEVFX01TR19SRVZJ U0lPTl9NQUpPUgkyCisjZGVmaW5lIE9QVEVFX01TR19SRVZJU0lPTl9NSU5PUgkwCisjZGVmaW5l IE9QVEVFX01TR19GVU5DSURfQ0FMTFNfUkVWSVNJT04JMHhGRjAzCisKKy8qCisgKiBHZXQgVVVJ RCBvZiBUcnVzdGVkIE9TLgorICoKKyAqIFVzZWQgYnkgbm9uLXNlY3VyZSB3b3JsZCB0byBmaWd1 cmUgb3V0IHdoaWNoIFRydXN0ZWQgT1MgaXMgaW5zdGFsbGVkLgorICogTm90ZSB0aGF0IHJldHVy bmVkIFVVSUQgaXMgdGhlIFVVSUQgb2YgdGhlIFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgor ICoKKyAqIFJldHVybnMgVVVJRCBpbiA0IDMyLWJpdCB3b3JkcyBpbiB0aGUgc2FtZSB3YXkgYXMK KyAqIE9QVEVFX01TR19GVU5DSURfQ0FMTFNfVUlEIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworI2Rl ZmluZSBPUFRFRV9NU0dfT1NfT1BURUVfVVVJRF8wCTB4NDg2MTc4ZTAKKyNkZWZpbmUgT1BURUVf TVNHX09TX09QVEVFX1VVSURfMQkweGU3ZjgxMWUzCisjZGVmaW5lIE9QVEVFX01TR19PU19PUFRF RV9VVUlEXzIJMHhiYzVlMDAwMgorI2RlZmluZSBPUFRFRV9NU0dfT1NfT1BURUVfVVVJRF8zCTB4 YTVkNWM1MWIKKyNkZWZpbmUgT1BURUVfTVNHX0ZVTkNJRF9HRVRfT1NfVVVJRAkweDAwMDAKKwor LyoKKyAqIEdldCByZXZpc2lvbiBvZiBUcnVzdGVkIE9TLgorICoKKyAqIFVzZWQgYnkgbm9uLXNl Y3VyZSB3b3JsZCB0byBmaWd1cmUgb3V0IHdoaWNoIHZlcnNpb24gb2YgdGhlIFRydXN0ZWQgT1MK KyAqIGlzIGluc3RhbGxlZC4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCByZXZpc2lvbiBpcyB0aGUg cmV2aXNpb24gb2YgdGhlCisgKiBUcnVzdGVkIE9TLCBub3Qgb2YgdGhlIEFQSS4KKyAqCisgKiBS ZXR1cm5zIHJldmlzaW9uIGluIDIgMzItYml0IHdvcmRzIGluIHRoZSBzYW1lIHdheSBhcworICog T1BURUVfTVNHX0NBTExTX1JFVklTSU9OIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworI2RlZmluZSBP UFRFRV9NU0dfT1NfT1BURUVfUkVWSVNJT05fTUFKT1IJMQorI2RlZmluZSBPUFRFRV9NU0dfT1Nf T1BURUVfUkVWSVNJT05fTUlOT1IJMAorI2RlZmluZSBPUFRFRV9NU0dfRlVOQ0lEX0dFVF9PU19S RVZJU0lPTgkweDAwMDEKKworLyoKKyAqIERvIGEgc2VjdXJlIGNhbGwgd2l0aCBzdHJ1Y3Qgb3B0 ZWVfbXNnX2FyZyBhcyBhcmd1bWVudAorICogVGhlIE9QVEVFX01TR19DTURfKiBiZWxvdyBkZWZp bmVzIHdoYXQgZ29lcyBpbiBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZzo6Y21kCisgKgorICogT1BURUVf TVNHX0NNRF9PUEVOX1NFU1NJT04gb3BlbnMgYSBzZXNzaW9uIHRvIGEgVHJ1c3RlZCBBcHBsaWNh dGlvbi4KKyAqIFRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBhcmUgdGFnZ2VkIGFzIG1ldGEsIGhv bGRpbmcgdHdvIHZhbHVlCisgKiBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhlIGZvbGxvd2luZyBpbmZv cm1hdGlvbjoKKyAqIHBhcmFtWzBdLnUudmFsdWUuYS1iIHV1aWQgb2YgVHJ1c3RlZCBBcHBsaWNh dGlvbgorICogcGFyYW1bMV0udS52YWx1ZS5hLWIgdXVpZCBvZiBDbGllbnQKKyAqIHBhcmFtWzFd LnUudmFsdWUuYyBMb2dpbiBjbGFzcyBvZiBjbGllbnQgT1BURUVfTVNHX0xPR0lOXyoKKyAqCisg KiBPUFRFRV9NU0dfQ01EX0lOVk9LRV9DT01NQU5EIGludm9rZXMgYSBjb21tYW5kIGEgcHJldmlv dXNseSBvcGVuZWQKKyAqIHNlc3Npb24gdG8gYSBUcnVzdGVkIEFwcGxpY2F0aW9uLiAgc3RydWN0 IG9wdGVlX21zZ19hcmc6OmZ1bmMgaXMgVHJ1c3RlZAorICogQXBwbGljYXRpb24gZnVuY3Rpb24s IHNwZWNpZmljIHRvIHRoZSBUcnVzdGVkIEFwcGxpY2F0aW9uLgorICoKKyAqIE9QVEVFX01TR19D TURfQ0xPU0VfU0VTU0lPTiBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCBzZXNzaW9uIHRvCisg KiBUcnVzdGVkIEFwcGxpY2F0aW9uLgorICoKKyAqIE9QVEVFX01TR19DTURfQ0FOQ0VMIGNhbmNl bHMgYSBjdXJyZW50bHkgaW52b2tlZCBjb21tYW5kLgorICoKKyAqIE9QVEVFX01TR19DTURfUkVH SVNURVJfU0hNIHJlZ2lzdGVycyBhIHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlLiBUaGUKKyAqIGlu Zm9ybWF0aW9uIGlzIHBhc3NlZCBhczoKKyAqIFtpbl0gcGFyYW1bMF0uYXR0cgkJCU9QVEVFX01T R19BVFRSX1RZUEVfVE1FTV9JTlBVVAorICoJCQkJCVt8IE9QVEVFX01TR19BVFRSX0ZSQUdNRU5U XQorICogW2luXSBwYXJhbVswXS51LnRtZW0uYnVmX3B0cgkJcGh5c2ljYWwgYWRkcmVzcyAob2Yg Zmlyc3QgZnJhZ21lbnQpCisgKiBbaW5dIHBhcmFtWzBdLnUudG1lbS5zaXplCQlzaXplIChvZiBm aXJzdCBmcmFnbWVudCkKKyAqIFtpbl0gcGFyYW1bMF0udS50bWVtLnNobV9yZWYJCWhvbGRzIHNo YXJlZCBtZW1vcnkgcmVmZXJlbmNlCisgKiAuLi4KKyAqIFRoZSBzaGFyZWQgbWVtb3J5IGNhbiBv cHRpb25hbGx5IGJlIGZyYWdtZW50ZWQsIHRlbXAgbWVtcmVmcyBjYW4gZm9sbG93CisgKiBlYWNo IG90aGVyIHdpdGggYWxsIGJ1dCB0aGUgbGFzdCB3aXRoIHRoZSBPUFRFRV9NU0dfQVRUUl9GUkFH TUVOVCBiaXQgc2V0LgorICoKKyAqIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE0gdW5yZWdp c3RlcmVzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHNoYXJlZAorICogbWVtb3J5IHJlZmVyZW5j ZS4gVGhlIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBhczoKKyAqIFtpbl0gcGFyYW1bMF0uYXR0cgkJ CU9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTlBVVAorICogW2luXSBwYXJhbVswXS51LnJtZW0u c2htX3JlZgkJaG9sZHMgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UKKyAqIFtpbl0gcGFyYW1bMF0u dS5ybWVtLm9mZnMJCTAKKyAqIFtpbl0gcGFyYW1bMF0udS5ybWVtLnNpemUJCTAKKyAqLworI2Rl ZmluZSBPUFRFRV9NU0dfQ01EX09QRU5fU0VTU0lPTgkwCisjZGVmaW5lIE9QVEVFX01TR19DTURf SU5WT0tFX0NPTU1BTkQJMQorI2RlZmluZSBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT04JMgor I2RlZmluZSBPUFRFRV9NU0dfQ01EX0NBTkNFTAkJMworI2RlZmluZSBPUFRFRV9NU0dfQ01EX1JF R0lTVEVSX1NITQk0CisjZGVmaW5lIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE0JNQorI2Rl ZmluZSBPUFRFRV9NU0dfRlVOQ0lEX0NBTExfV0lUSF9BUkcJMHgwMDA0CisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogUGFydCAzIC0gUmVxdWVzdHMgZnJvbSBzZWN1cmUgd29ybGQsIFJQQwor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQWxsIFJQQyBpcyBkb25lIHdpdGggYSBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZyBhcyBiZWFyZXIgb2YgaW5mb3JtYXRpb24sCisgKiBzdHJ1Y3Qg b3B0ZWVfbXNnX2FyZzo6YXJnIGhvbGRzIHZhbHVlcyBkZWZpbmVkIGJ5IE9QVEVFX01TR19SUENf Q01EXyogYmVsb3cKKyAqCisgKiBSUEMgY29tbXVuaWNhdGlvbiB3aXRoIHRlZS1zdXBwbGljYW50 IGlzIHJldmVyc2VkIGNvbXBhcmVkIHRvIG5vcm1hbAorICogY2xpZW50IGNvbW11bmljYXRpb24g ZGVzcmliZWQgYWJvdmUuIFRoZSBzdXBwbGljYW50IHJlY2VpdmVzIHJlcXVlc3RzCisgKiBhbmQg c2VuZHMgcmVzcG9uc2VzLgorICovCisKKy8qCisgKiBMb2FkIGEgVEEgaW50byBtZW1vcnksIGRl ZmluZWQgaW4gdGVlLXN1cHBsaWNhbnQKKyAqLworI2RlZmluZSBPUFRFRV9NU0dfUlBDX0NNRF9M T0FEX1RBCTAKKworLyoKKyAqIFJlc2VydmVkCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19D TURfUlBNQgkJMQorCisvKgorICogRmlsZSBzeXN0ZW0gYWNjZXNzLCBkZWZpbmVkIGluIHRlZS1z dXBwbGljYW50CisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfRlMJCTIKKworLyoKKyAq IEdldCB0aW1lCisgKgorICogUmV0dXJucyBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgbmFubyBzZWNv bmRzIHNpbmNlIHRoZSBFcG9jaCwKKyAqIDE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAgKFVUQyku CisgKgorICogW291dF0gcGFyYW1bMF0udS52YWx1ZS5hCU51bWJlciBvZiBzZWNvbmRzCisgKiBb b3V0XSBwYXJhbVswXS51LnZhbHVlLmIJTnVtYmVyIG9mIG5hbm8gc2Vjb25kcy4KKyAqLworI2Rl ZmluZSBPUFRFRV9NU0dfUlBDX0NNRF9HRVRfVElNRQkzCisKKy8qCisgKiBXYWl0IHF1ZXVlIHBy aW1pdGl2ZSwgaGVscGVyIGZvciBzZWN1cmUgd29ybGQgdG8gaW1wbGVtZW50IGEgd2FpdCBxdWV1 ZQorICoKKyAqIFdhaXRpbmcgb24gYSBrZXkKKyAqIFtpbl0gcGFyYW1bMF0udS52YWx1ZS5hIE9Q VEVFX01TR19SUENfV0FJVF9RVUVVRV9TTEVFUAorICogW2luXSBwYXJhbVswXS51LnZhbHVlLmIg d2FpdCBrZXkKKyAqCisgKiBXYWtpbmcgdXAgYSBrZXkKKyAqIFtpbl0gcGFyYW1bMF0udS52YWx1 ZS5hIE9QVEVFX01TR19SUENfV0FJVF9RVUVVRV9XQUtFVVAKKyAqIFtpbl0gcGFyYW1bMF0udS52 YWx1ZS5iIHdha2V1cCBrZXkKKyAqLworI2RlZmluZSBPUFRFRV9NU0dfUlBDX0NNRF9XQUlUX1FV RVVFCTQKKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19XQUlUX1FVRVVFX1NMRUVQCTAKKyNkZWZpbmUg T1BURUVfTVNHX1JQQ19XQUlUX1FVRVVFX1dBS0VVUAkxCisKKy8qCisgKiBTdXNwZW5kIGV4ZWN1 dGlvbgorICoKKyAqIFtpbl0gcGFyYW1bMF0udmFsdWUJLmEgbnVtYmVyIG9mIG1pbGxpc2Vjb25k cyB0byBzdXNwZW5kCisgKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfU1VTUEVORAk1CisK Ky8qCisgKiBBbGxvY2F0ZSBhIHBpZWNlIG9mIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBTaGFyZWQg bWVtb3J5IGNhbiBvcHRpb25hbGx5IGJlIGZyYWdtZW50ZWQsIHRvIHN1cHBvcnQgdGhhdCBhZGRp dGlvbmFsCisgKiBzcGFyZSBwYXJhbSBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSByb29t IGZvciBldmVudHVhbCBmcmFnbWVudHMuCisgKiBUaGUgc3BhcmUgcGFyYW0gZW50cmllcyBoYXMg LmF0dHIgPSBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkUgd2hlbgorICogdW51c2VkLiBBbGwgcmV0 dXJuZWQgdGVtcCBtZW1yZWZzIGV4Y2VwdCB0aGUgbGFzdCBzaG91bGQgaGF2ZSB0aGUKKyAqIE9Q VEVFX01TR19BVFRSX0ZSQUdNRU5UIGJpdCBzZXQgaW4gdGhlIGF0dHIgZmllbGQuCisgKgorICog W2luXSAgcGFyYW1bMF0udS52YWx1ZS5hCQl0eXBlIG9mIG1lbW9yeSBvbmUgb2YKKyAqCQkJCQlP UFRFRV9NU0dfUlBDX1NITV9UWVBFXyogYmVsb3cKKyAqIFtpbl0gIHBhcmFtWzBdLnUudmFsdWUu YgkJcmVxdWVzdGVkIHNpemUKKyAqIFtpbl0gIHBhcmFtWzBdLnUudmFsdWUuYwkJcmVxdWlyZWQg YWxpZ25tZW50CisgKgorICogW291dF0gcGFyYW1bMF0udS50bWVtLmJ1Zl9wdHIJcGh5c2ljYWwg YWRkcmVzcyAob2YgZmlyc3QgZnJhZ21lbnQpCisgKiBbb3V0XSBwYXJhbVswXS51LnRtZW0uc2l6 ZQkJc2l6ZSAob2YgZmlyc3QgZnJhZ21lbnQpCisgKiBbb3V0XSBwYXJhbVswXS51LnRtZW0uc2ht X3JlZglzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZQorICogLi4uCisgKiBbb3V0XSBwYXJhbVtuXS51 LnRtZW0uYnVmX3B0cglwaHlzaWNhbCBhZGRyZXNzCisgKiBbb3V0XSBwYXJhbVtuXS51LnRtZW0u c2l6ZQkJc2l6ZQorICogW291dF0gcGFyYW1bbl0udS50bWVtLnNobV9yZWYJc2hhcmVkIG1lbW9y eSByZWZlcmVuY2UgKHNhbWUgdmFsdWUKKyAqCQkJCQlhcyBpbiBwYXJhbVtuLTFdLnUudG1lbS5z aG1fcmVmKQorICovCisjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX1NITV9BTExPQwk2CisvKiBN ZW1vcnkgdGhhdCBjYW4gYmUgc2hhcmVkIHdpdGggYSBub24tc2VjdXJlIHVzZXIgc3BhY2UgYXBw bGljYXRpb24gKi8KKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19TSE1fVFlQRV9BUFBMCTAKKy8qIE1l bW9yeSBvbmx5IHNoYXJlZCB3aXRoIG5vbi1zZWN1cmUga2VybmVsICovCisjZGVmaW5lIE9QVEVF X01TR19SUENfU0hNX1RZUEVfS0VSTkVMCTEKKworLyoKKyAqIEZyZWUgc2hhcmVkIG1lbW9yeSBw cmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIE9QVEVFX01TR19SUENfQ01EX1NITV9BTExPQworICoK KyAqIFtpbl0gIHBhcmFtWzBdLnUudmFsdWUuYQkJdHlwZSBvZiBtZW1vcnkgb25lIG9mCisgKgkJ CQkJT1BURUVfTVNHX1JQQ19TSE1fVFlQRV8qIGFib3ZlCisgKiBbaW5dICBwYXJhbVswXS51LnZh bHVlLmIJCXZhbHVlIG9mIHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlCisgKgkJCQkJcmV0dXJuZWQg aW4gcGFyYW1bMF0udS50bWVtLnNobV9yZWYKKyAqCQkJCQlhYm92ZQorICovCisjZGVmaW5lIE9Q VEVFX01TR19SUENfQ01EX1NITV9GUkVFCTcKKworI2VuZGlmIC8qIF9PUFRFRV9NU0dfSCAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfcHJpdmF0ZS5oIGIvZHJpdmVycy90 ZWUvb3B0ZWUvb3B0ZWVfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uODA3Zjc0YzQxMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0 ZWUvb3B0ZWVfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChj KSAyMDE1LCBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5k CisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3Nl IHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgT1BU RUVfUFJJVkFURV9ICisjZGVmaW5lIE9QVEVFX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8bGludXgv YXJtLXNtY2NjLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGlu dXgvdGVlX2Rydi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAib3B0ZWVf bXNnLmgiCisKKyNkZWZpbmUgT1BURUVfTUFYX0FSR19TSVpFCTEwMjQKKworLyogU29tZSBHbG9i YWwgUGxhdGZvcm0gZXJyb3IgY29kZXMgdXNlZCBpbiB0aGlzIGRyaXZlciAqLworI2RlZmluZSBU RUVDX1NVQ0NFU1MJCQkweDAwMDAwMDAwCisjZGVmaW5lIFRFRUNfRVJST1JfQkFEX1BBUkFNRVRF UlMJMHhGRkZGMDAwNgorI2RlZmluZSBURUVDX0VSUk9SX0NPTU1VTklDQVRJT04JMHhGRkZGMDAw RQorI2RlZmluZSBURUVDX0VSUk9SX09VVF9PRl9NRU1PUlkJMHhGRkZGMDAwQworCisjZGVmaW5l IFRFRUNfT1JJR0lOX0NPTU1TCQkweDAwMDAwMDAyCisKK3R5cGVkZWYgdm9pZCAob3B0ZWVfaW52 b2tlX2ZuKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJ CXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJdW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyAqKTsKKwor c3RydWN0IG9wdGVlX2NhbGxfcXVldWUgeworCS8qIFNlcmlhbGl6ZXMgYWNjZXNzIHRvIHRoaXMg c3RydWN0ICovCisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGVy czsKK307CisKK3N0cnVjdCBvcHRlZV93YWl0X3F1ZXVlIHsKKwkvKiBTZXJpYWxpemVzIGFjY2Vz cyB0byB0aGlzIHN0cnVjdCAqLworCXN0cnVjdCBtdXRleCBtdTsKKwlzdHJ1Y3QgbGlzdF9oZWFk IGRiOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb3B0ZWVfc3VwcCAtIHN1cHBsaWNhbnQgc3luY2hy b25pemF0aW9uIHN0cnVjdAorICogQGN0eAkJCXRoZSBjb250ZXh0IG9mIGN1cnJlbnQgY29ubmVj dGVkIHN1cHBsaWNhbnQuCisgKgkJCWlmICFOVUxMIHRoZSBzdXBwbGljYW50IGRldmljZSBpcyBh dmFpbGFibGUgZm9yIHVzZSwKKyAqCQkJZWxzZSBidXN5CisgKiBAY3R4X211dGV4OgkJaGVsZCB3 aGlsZSBhY2Nlc3NpbmcgQGN0eAorICogQGZ1bmM6CQlzdXBwbGljYW50IGZ1bmN0aW9uIGlkIHRv IGNhbGwKKyAqIEByZXQ6CQljYWxsIHJldHVybiB2YWx1ZQorICogQG51bV9wYXJhbXM6CQludW1i ZXIgb2YgZWxlbWVudHMgaW4gQHBhcmFtCisgKiBAcGFyYW06CQlwYXJhbWV0ZXJzIGZvciBAZnVu YworICogQHJlcV9wb3N0ZWQ6CQlpZiB0cnVlLCBhIHJlcXVlc3QgaGFzIGJlZW4gcG9zdGVkIHRv IHRoZSBzdXBwbGljYW50CisgKiBAc3VwcF9uZXh0X3NlbmQ6CWlmIHRydWUsIG5leHQgc3RlcCBp cyBmb3Igc3VwcGxpY2FudCB0byBzZW5kIHJlc3BvbnNlCisgKiBAdGhyZF9tdXRleDoJCWhlbGQg YnkgdGhlIHRocmVhZCBkb2luZyBhIHJlcXVlc3QgdG8gc3VwcGxpY2FudAorICogQHN1cHBfbXV0 ZXg6CQloZWxkIGJ5IHN1cHBsaWNhbnQgd2hpbGUgb3BlcmF0aW5nIG9uIHRoaXMgc3RydWN0Cisg KiBAZGF0YV90b19zdXBwOglzdXBwbGljYW50IGlzIHdhaXRpbmcgb24gdGhpcyBmb3IgbmV4dCBy ZXF1ZXN0CisgKiBAZGF0YV9mcm9tX3N1cHA6CXJlcXVlc3RpbmcgdGhyZWFkIGlzIHdhaXRpbmcg b24gdGhpcyB0byBnZXQgdGhlIHJlc3VsdAorICovCitzdHJ1Y3Qgb3B0ZWVfc3VwcCB7CisJc3Ry dWN0IHRlZV9jb250ZXh0ICpjdHg7CisJLyogU2VyaWFsaXplcyBhY2Nlc3Mgb2YgY3R4ICovCisJ c3RydWN0IG11dGV4IGN0eF9tdXRleDsKKworCXUzMiBmdW5jOworCXUzMiByZXQ7CisJc2l6ZV90 IG51bV9wYXJhbXM7CisJc3RydWN0IHRlZV9wYXJhbSAqcGFyYW07CisKKwlib29sIHJlcV9wb3N0 ZWQ7CisJYm9vbCBzdXBwX25leHRfc2VuZDsKKwkvKiBTZXJpYWxpemVzIGFjY2VzcyB0byB0aGlz IHN0cnVjdCBmb3IgcmVxdWVzdGluZyB0aHJlYWQgKi8KKwlzdHJ1Y3QgbXV0ZXggdGhyZF9tdXRl eDsKKwkvKiBTZXJpYWxpemVzIGFjY2VzcyB0byB0aGlzIHN0cnVjdCBmb3Igc3VwcGxpY2FudCB0 aHJlYWRzICovCisJc3RydWN0IG11dGV4IHN1cHBfbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24g ZGF0YV90b19zdXBwOworCXN0cnVjdCBjb21wbGV0aW9uIGRhdGFfZnJvbV9zdXBwOworfTsKKwor LyoqCisgKiBzdHJ1Y3Qgb3B0ZWUgLSBtYWluIHNlcnZpY2Ugc3RydWN0CisgKiBAc3VwcF90ZWVk ZXY6CXN1cHBsaWNhbnQgZGV2aWNlCisgKiBAdGVlZGV2OgkJY2xpZW50IGRldmljZQorICogQGRl djoJCXByb2JlZCBkZXZpY2UKKyAqIEBpbnZva2VfZm46CQlmdW5jdGlvbiB0byBpc3N1ZSBzbWMg b3IgaHZjCisgKiBAY2FsbF9xdWV1ZToJCXF1ZXVlIG9mIHRocmVhZHMgd2FpdGluZyB0byBjYWxs IEBpbnZva2VfZm4KKyAqIEB3YWl0X3F1ZXVlOgkJcXVldWUgb2YgdGhyZWFkcyBmcm9tIHNlY3Vy ZSB3b3JsZCB3YWl0aW5nIGZvciBhCisgKgkJCXNlY3VyZSB3b3JsZCBzeW5jIG9iamVjdAorICog QHN1cHA6CQlzdXBwbGljYW50IHN5bmNocm9uaXphdGlvbiBzdHJ1Y3QgZm9yIFJQQyB0byBzdXBw bGljYW50CisgKiBAcG9vbDoJCXNoYXJlZCBtZW1vcnkgcG9vbAorICogQGlvcmVtYXBlZF9zaG0J dmlydHVhbCBhZGRyZXNzIG9mIG1lbW9yeSBpbiBzaGFyZWQgbWVtb3J5IHBvb2wKKyAqLworc3Ry dWN0IG9wdGVlIHsKKwlzdHJ1Y3QgdGVlX2RldmljZSAqc3VwcF90ZWVkZXY7CisJc3RydWN0IHRl ZV9kZXZpY2UgKnRlZWRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJb3B0ZWVfaW52b2tlX2Zu ICppbnZva2VfZm47CisJc3RydWN0IG9wdGVlX2NhbGxfcXVldWUgY2FsbF9xdWV1ZTsKKwlzdHJ1 Y3Qgb3B0ZWVfd2FpdF9xdWV1ZSB3YWl0X3F1ZXVlOworCXN0cnVjdCBvcHRlZV9zdXBwIHN1cHA7 CisJc3RydWN0IHRlZV9zaG1fcG9vbCAqcG9vbDsKKwl2b2lkIF9faW9tZW0gKmlvcmVtYXBlZF9z aG07Cit9OworCitzdHJ1Y3Qgb3B0ZWVfc2Vzc2lvbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0 X25vZGU7CisJdTMyIHNlc3Npb25faWQ7Cit9OworCitzdHJ1Y3Qgb3B0ZWVfY29udGV4dF9kYXRh IHsKKwkvKiBTZXJpYWxpemVzIGFjY2VzcyB0byB0aGlzIHN0cnVjdCAqLworCXN0cnVjdCBtdXRl eCBtdXRleDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNlc3NfbGlzdDsKK307CisKK3N0cnVjdCBvcHRl ZV9ycGNfcGFyYW0geworCXUzMglhMDsKKwl1MzIJYTE7CisJdTMyCWEyOworCXUzMglhMzsKKwl1 MzIJYTQ7CisJdTMyCWE1OworCXUzMglhNjsKKwl1MzIJYTc7Cit9OworCit2b2lkIG9wdGVlX2hh bmRsZV9ycGMoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0cnVjdCBvcHRlZV9ycGNfcGFyYW0g KnBhcmFtKTsKKwordm9pZCBvcHRlZV93YWl0X3F1ZXVlX2luaXQoc3RydWN0IG9wdGVlX3dhaXRf cXVldWUgKndxKTsKK3ZvaWQgb3B0ZWVfd2FpdF9xdWV1ZV9leGl0KHN0cnVjdCBvcHRlZV93YWl0 X3F1ZXVlICp3cSk7CisKK3UzMiBvcHRlZV9zdXBwX3RocmRfcmVxKHN0cnVjdCB0ZWVfY29udGV4 dCAqY3R4LCB1MzIgZnVuYywgc2l6ZV90IG51bV9wYXJhbXMsCisJCQlzdHJ1Y3QgdGVlX3BhcmFt ICpwYXJhbSk7CisKK2ludCBvcHRlZV9zdXBwX3JlYWQoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgs IHZvaWQgX191c2VyICpidWYsIHNpemVfdCBsZW4pOworaW50IG9wdGVlX3N1cHBfd3JpdGUoc3Ry dWN0IHRlZV9jb250ZXh0ICpjdHgsIHZvaWQgX191c2VyICpidWYsIHNpemVfdCBsZW4pOwordm9p ZCBvcHRlZV9zdXBwX2luaXQoc3RydWN0IG9wdGVlX3N1cHAgKnN1cHApOwordm9pZCBvcHRlZV9z dXBwX3VuaW5pdChzdHJ1Y3Qgb3B0ZWVfc3VwcCAqc3VwcCk7CisKK2ludCBvcHRlZV9zdXBwX3Jl Y3Yoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHUzMiAqZnVuYywgdTMyICpudW1fcGFyYW1zLAor CQkgICAgc3RydWN0IHRlZV9wYXJhbSAqcGFyYW0pOworaW50IG9wdGVlX3N1cHBfc2VuZChzdHJ1 Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIHJldCwgdTMyIG51bV9wYXJhbXMsCisJCSAgICBzdHJ1 Y3QgdGVlX3BhcmFtICpwYXJhbSk7CisKK3UzMiBvcHRlZV9kb19jYWxsX3dpdGhfYXJnKHN0cnVj dCB0ZWVfY29udGV4dCAqY3R4LCBwaHlzX2FkZHJfdCBwYXJnKTsKK2ludCBvcHRlZV9vcGVuX3Nl c3Npb24oc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCSAgICAgICBzdHJ1Y3QgdGVlX2lvY3Rs X29wZW5fc2Vzc2lvbl9hcmcgKmFyZywKKwkJICAgICAgIHN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFt KTsKK2ludCBvcHRlZV9jbG9zZV9zZXNzaW9uKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIg c2Vzc2lvbik7CitpbnQgb3B0ZWVfaW52b2tlX2Z1bmMoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgs IHN0cnVjdCB0ZWVfaW9jdGxfaW52b2tlX2FyZyAqYXJnLAorCQkgICAgICBzdHJ1Y3QgdGVlX3Bh cmFtICpwYXJhbSk7CitpbnQgb3B0ZWVfY2FuY2VsX3JlcShzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0 eCwgdTMyIGNhbmNlbF9pZCwgdTMyIHNlc3Npb24pOworCit2b2lkIG9wdGVlX2VuYWJsZV9zaG1f Y2FjaGUoc3RydWN0IG9wdGVlICpvcHRlZSk7Cit2b2lkIG9wdGVlX2Rpc2FibGVfc2htX2NhY2hl KHN0cnVjdCBvcHRlZSAqb3B0ZWUpOworCitpbnQgb3B0ZWVfZnJvbV9tc2dfcGFyYW0oc3RydWN0 IHRlZV9wYXJhbSAqcGFyYW1zLCBzaXplX3QgbnVtX3BhcmFtcywKKwkJCSBjb25zdCBzdHJ1Y3Qg b3B0ZWVfbXNnX3BhcmFtICptc2dfcGFyYW1zKTsKK2ludCBvcHRlZV90b19tc2dfcGFyYW0oc3Ry dWN0IG9wdGVlX21zZ19wYXJhbSAqbXNnX3BhcmFtcywgc2l6ZV90IG51bV9wYXJhbXMsCisJCSAg ICAgICBjb25zdCBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbXMpOworCisvKgorICogU21hbGwgaGVs cGVycworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcmVnX3BhaXJfdG9fcHRyKHUzMiByZWcw LCB1MzIgcmVnMSkKK3sKKwlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykoKCh1NjQpcmVn MCA8PCAzMikgfCByZWcxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ19wYWlyX2Zyb21f NjQodTMyICpyZWcwLCB1MzIgKnJlZzEsIHU2NCB2YWwpCit7CisJKnJlZzAgPSB2YWwgPj4gMzI7 CisJKnJlZzEgPSB2YWw7Cit9CisKKyNlbmRpZiAvKk9QVEVFX1BSSVZBVEVfSCovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9vcHRlZV9zbWMuaCBiL2RyaXZlcnMvdGVlL29wdGVlL29w dGVlX3NtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDQ3MGQ0 NTBiMTgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUvb3B0ZWVfc21jLmgK QEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgTGluYXJv IExpbWl0ZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg IkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBD T05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm IE9QVEVFX1NNQ19ICisjZGVmaW5lIE9QVEVFX1NNQ19ICisKKyNpbmNsdWRlIDxsaW51eC9hcm0t c21jY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBPUFRFRV9TTUNf U1REX0NBTExfVkFMKGZ1bmNfbnVtKSBcCisJQVJNX1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19T VERfQ0FMTCwgQVJNX1NNQ0NDX1NNQ18zMiwgXAorCQkJICAgQVJNX1NNQ0NDX09XTkVSX1RSVVNU RURfT1MsIChmdW5jX251bSkpCisjZGVmaW5lIE9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKGZ1bmNf bnVtKSBcCisJQVJNX1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19GQVNUX0NBTEwsIEFSTV9TTUND Q19TTUNfMzIsIFwKKwkJCSAgIEFSTV9TTUNDQ19PV05FUl9UUlVTVEVEX09TLCAoZnVuY19udW0p KQorCisvKgorICogRnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24u CisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19DT1VOVAkweEZGMDAKKyNkZWZp bmUgT1BURUVfU01DX0NBTExTX0NPVU5UIFwKKwlBUk1fU01DQ0NfQ0FMTF9WQUwoT1BURUVfU01D X0ZBU1RfQ0FMTCwgU01DQ0NfU01DXzMyLCBcCisJCQkgICBTTUNDQ19PV05FUl9UUlVTVEVEX09T X0VORCwgXAorCQkJICAgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19DT1VOVCkKKworLyoKKyAqIE5v cm1hbCBjYWNoZWQgbWVtb3J5ICh3cml0ZS1iYWNrKSwgc2hhcmVhYmxlIGZvciBTTVAgc3lzdGVt cyBhbmQgbm90CisgKiBzaGFyZWFibGUgZm9yIFVQIHN5c3RlbXMuCisgKi8KKyNkZWZpbmUgT1BU RUVfU01DX1NITV9DQUNIRUQJCTEKKworLyoKKyAqIGEwLi5hNyBpcyB1c2VkIGFzIHJlZ2lzdGVy IG5hbWVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3csIG9uIGFybTMyCisgKiB0aGF0IHRyYW5z bGF0ZXMgdG8gcjAuLnI3IGFuZCBvbiBhcm02NCB0byB3MC4udzcuIEluIGJvdGggY2FzZXMgaXQn cworICogMzItYml0IHJlZ2lzdGVycy4KKyAqLworCisvKgorICogRnVuY3Rpb24gc3BlY2lmaWVk IGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24KKyAqCisgKiBSZXR1cm4gb25lIG9mIHRoZSBmb2xs b3dpbmcgVUlEcyBpZiB1c2luZyBBUEkgc3BlY2lmaWVkIGluIHRoaXMgZmlsZQorICogd2l0aG91 dCBmdXJ0aGVyIGV4dGVudGlvbnM6CisgKiA2NWNiNmI5My1hZjBjLTQ2MTctOGVkNi02NDRhOGQx MTQwZjgKKyAqIHNlZSBhbHNvIE9QVEVFX1NNQ19VSURfKiBpbiBvcHRlZV9tc2cuaAorICovCisj ZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfVUlEIE9QVEVFX01TR19GVU5DSURfQ0FMTFNf VUlECisjZGVmaW5lIE9QVEVFX1NNQ19DQUxMU19VSUQgXAorCUFSTV9TTUNDQ19DQUxMX1ZBTChB Uk1fU01DQ0NfRkFTVF9DQUxMLCBBUk1fU01DQ0NfU01DXzMyLCBcCisJCQkgICBBUk1fU01DQ0Nf T1dORVJfVFJVU1RFRF9PU19FTkQsIFwKKwkJCSAgIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfVUlE KQorCisvKgorICogRnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24K KyAqCisgKiBSZXR1cm5zIDIuMCBpZiB1c2luZyBBUEkgc3BlY2lmaWVkIGluIHRoaXMgZmlsZSB3 aXRob3V0IGZ1cnRoZXIgZXh0ZW50aW9ucy4KKyAqIHNlZSBhbHNvIE9QVEVFX01TR19SRVZJU0lP Tl8qIGluIG9wdGVlX21zZy5oCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19S RVZJU0lPTiBPUFRFRV9NU0dfRlVOQ0lEX0NBTExTX1JFVklTSU9OCisjZGVmaW5lIE9QVEVFX1NN Q19DQUxMU19SRVZJU0lPTiBcCisJQVJNX1NNQ0NDX0NBTExfVkFMKEFSTV9TTUNDQ19GQVNUX0NB TEwsIEFSTV9TTUNDQ19TTUNfMzIsIFwKKwkJCSAgIEFSTV9TTUNDQ19PV05FUl9UUlVTVEVEX09T X0VORCwgXAorCQkJICAgT1BURUVfU01DX0ZVTkNJRF9DQUxMU19SRVZJU0lPTikKKworc3RydWN0 IG9wdGVlX3NtY19jYWxsc19yZXZpc2lvbl9yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgbWFqb3I7 CisJdW5zaWduZWQgbG9uZyBtaW5vcjsKKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkMDsKKwl1bnNp Z25lZCBsb25nIHJlc2VydmVkMTsKK307CisKKy8qCisgKiBHZXQgVVVJRCBvZiBUcnVzdGVkIE9T LgorICoKKyAqIFVzZWQgYnkgbm9uLXNlY3VyZSB3b3JsZCB0byBmaWd1cmUgb3V0IHdoaWNoIFRy dXN0ZWQgT1MgaXMgaW5zdGFsbGVkLgorICogTm90ZSB0aGF0IHJldHVybmVkIFVVSUQgaXMgdGhl IFVVSUQgb2YgdGhlIFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgorICoKKyAqIFJldHVybnMg VVVJRCBpbiBhMC00IGluIHRoZSBzYW1lIHdheSBhcyBPUFRFRV9TTUNfQ0FMTFNfVUlECisgKiBk ZXNjcmliZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9HRVRfT1NfVVVJ RCBPUFRFRV9NU0dfRlVOQ0lEX0dFVF9PU19VVUlECisjZGVmaW5lIE9QVEVFX1NNQ19DQUxMX0dF VF9PU19VVUlEIFwKKwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0dF VF9PU19VVUlEKQorCisvKgorICogR2V0IHJldmlzaW9uIG9mIFRydXN0ZWQgT1MuCisgKgorICog VXNlZCBieSBub24tc2VjdXJlIHdvcmxkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmVyc2lvbiBvZiB0 aGUgVHJ1c3RlZCBPUworICogaXMgaW5zdGFsbGVkLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHJl dmlzaW9uIGlzIHRoZSByZXZpc2lvbiBvZiB0aGUKKyAqIFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUg QVBJLgorICoKKyAqIFJldHVybnMgcmV2aXNpb24gaW4gYTAtMSBpbiB0aGUgc2FtZSB3YXkgYXMg T1BURUVfU01DX0NBTExTX1JFVklTSU9OCisgKiBkZXNjcmliZWQgYWJvdmUuCisgKi8KKyNkZWZp bmUgT1BURUVfU01DX0ZVTkNJRF9HRVRfT1NfUkVWSVNJT04gT1BURUVfTVNHX0ZVTkNJRF9HRVRf T1NfUkVWSVNJT04KKyNkZWZpbmUgT1BURUVfU01DX0NBTExfR0VUX09TX1JFVklTSU9OIFwKKwlP UFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0dFVF9PU19SRVZJU0lPTikK KworLyoKKyAqIENhbGwgd2l0aCBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyBhcyBhcmd1bWVudAorICoK KyAqIENhbGwgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NN QypDQUxMX1dJVEhfQVJHCisgKiBhMQlVcHBlciAzMmJpdCBvZiBhIDY0Yml0IHBoeXNpY2FsIHBv aW50ZXIgdG8gYSBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICogYTIJTG93ZXIgMzJiaXQgb2YgYSA2 NGJpdCBwaHlzaWNhbCBwb2ludGVyIHRvIGEgc3RydWN0IG9wdGVlX21zZ19hcmcKKyAqIGEzCUNh Y2hlIHNldHRpbmdzLCBub3QgdXNlZCBpZiBwaHlzaWNhbCBwb2ludGVyIGlzIGluIGEgcHJlZGVm aW5lZCBzaGFyZWQKKyAqCW1lbW9yeSBhcmVhIGVsc2UgcGVyIE9QVEVFX1NNQ19TSE1fKgorICog YTQtNglOb3QgdXNlZAorICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIKKyAqCisg KiBOb3JtYWwgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgorICogYTAJUmV0dXJuIHZhbHVlLCBPUFRF RV9TTUNfUkVUVVJOXyoKKyAqIGExLTMJTm90IHVzZWQKKyAqIGE0LTcJUHJlc2VydmVkCisgKgor ICogT1BURUVfU01DX1JFVFVSTl9FVEhSRUFEX0xJTUlUIHJldHVybiByZWdpc3RlciB1c2FnZToK KyAqIGEwCVJldHVybiB2YWx1ZSwgT1BURUVfU01DX1JFVFVSTl9FVEhSRUFEX0xJTUlUCisgKiBh MS0zCVByZXNlcnZlZAorICogYTQtNwlQcmVzZXJ2ZWQKKyAqCisgKiBSUEMgcmV0dXJuIHJlZ2lz dGVyIHVzYWdlOgorICogYTAJUmV0dXJuIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJOX0lTX1JQQyh2 YWwpCisgKiBhMS0yCVJQQyBwYXJhbWV0ZXJzCisgKiBhMy03CVJlc3VtZSBpbmZvcm1hdGlvbiwg bXVzdCBiZSBwcmVzZXJ2ZWQKKyAqCisgKiBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgorICogT1BU RUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OCVRydXN0ZWQgT1MgZG9lcyBub3QgcmVjb2du aXplIHRoaXMKKyAqCQkJCQlmdW5jdGlvbi4KKyAqIE9QVEVFX1NNQ19SRVRVUk5fT0sJCQlDYWxs IGNvbXBsZXRlZCwgcmVzdWx0IHVwZGF0ZWQgaW4KKyAqCQkJCQl0aGUgcHJldmlvdXNseSBzdXBw bGllZCBzdHJ1Y3QKKyAqCQkJCQlvcHRlZV9tc2dfYXJnLgorICogT1BURUVfU01DX1JFVFVSTl9F VEhSRUFEX0xJTUlUCU51bWJlciBvZiBUcnVzdGVkIE9TIHRocmVhZHMgZXhjZWVkZWQsCisgKgkJ CQkJdHJ5IGFnYWluIGxhdGVyLgorICogT1BURUVfU01DX1JFVFVSTl9FQkFEQUREUgkJQmFkIHBo eXNjaWFsIHBvaW50ZXIgdG8gc3RydWN0CisgKgkJCQkJb3B0ZWVfbXNnX2FyZy4KKyAqIE9QVEVF X1NNQ19SRVRVUk5fRUJBRENNRAkJQmFkL3Vua25vd24gY21kIGluIHN0cnVjdCBvcHRlZV9tc2df YXJnCisgKiBPUFRFRV9TTUNfUkVUVVJOX0lTX1JQQygpCQlDYWxsIHN1c3BlbmRlZCBieSBSUEMg Y2FsbCB0byBub3JtYWwKKyAqCQkJCQl3b3JsZC4KKyAqLworI2RlZmluZSBPUFRFRV9TTUNfRlVO Q0lEX0NBTExfV0lUSF9BUkcgT1BURUVfTVNHX0ZVTkNJRF9DQUxMX1dJVEhfQVJHCisjZGVmaW5l IE9QVEVFX1NNQ19DQUxMX1dJVEhfQVJHIFwKKwlPUFRFRV9TTUNfU1REX0NBTExfVkFMKE9QVEVF X1NNQ19GVU5DSURfQ0FMTF9XSVRIX0FSRykKKworLyoKKyAqIEdldCBTaGFyZWQgTWVtb3J5IENv bmZpZworICoKKyAqIFJldHVybnMgdGhlIFNlY3VyZS9Ob24tc2VjdXJlIHNoYXJlZCBtZW1vcnkg Y29uZmlnLgorICoKKyAqIENhbGwgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24g SUQsIE9QVEVFX1NNQ19HRVRfU0hNX0NPTkZJRworICogYTEtNglOb3QgdXNlZAorICogYTcJSHlw ZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIKKyAqCisgKiBIYXZlIGNvbmZpZyByZXR1cm4gcmVn aXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCisgKiBhMQlQaHlzaWNhbCBh ZGRyZXNzIG9mIHN0YXJ0IG9mIFNITQorICogYTIJU2l6ZSBvZiBvZiBTSE0KKyAqIGEzCUNhY2hl IHNldHRpbmdzIG9mIG1lbW9yeSwgYXMgZGVmaW5lZCBieSB0aGUKKyAqCU9QVEVFX1NNQ19TSE1f KiB2YWx1ZXMgYWJvdmUKKyAqIGE0LTcJUHJlc2VydmVkCisgKgorICogTm90IGF2YWlsYWJsZSBy ZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMCisgKiBhMS0z IE5vdCB1c2VkCisgKiBhNC03CVByZXNlcnZlZAorICovCisjZGVmaW5lIE9QVEVFX1NNQ19GVU5D SURfR0VUX1NITV9DT05GSUcJNworI2RlZmluZSBPUFRFRV9TTUNfR0VUX1NITV9DT05GSUcgXAor CU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfR0VUX1NITV9DT05GSUcp CisKK3N0cnVjdCBvcHRlZV9zbWNfZ2V0X3NobV9jb25maWdfcmVzdWx0IHsKKwl1bnNpZ25lZCBs b25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsK Kwl1bnNpZ25lZCBsb25nIHNldHRpbmdzOworfTsKKworLyoKKyAqIEV4Y2hhbmdlcyBjYXBhYmls aXRpZXMgYmV0d2VlbiBub3JtYWwgd29ybGQgYW5kIHNlY3VyZSB3b3JsZAorICoKKyAqIENhbGwg cmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19FWENIQU5H RV9DQVBBQklMSVRJRVMKKyAqIGExCWJpdGZpZWxkIG9mIG5vcm1hbCB3b3JsZCBjYXBhYmlsaXRp ZXMgT1BURUVfU01DX05TRUNfQ0FQXyoKKyAqIGEyLTYJTm90IHVzZWQKKyAqIGE3CUh5cGVydmlz b3IgQ2xpZW50IElEIHJlZ2lzdGVyCisgKgorICogTm9ybWFsIHJldHVybiByZWdpc3RlciB1c2Fn ZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fT0sKKyAqIGExCWJpdGZpZWxkIG9mIHNlY3VyZSB3 b3JsZCBjYXBhYmlsaXRpZXMgT1BURUVfU01DX1NFQ19DQVBfKgorICogYTItNwlQcmVzZXJ2ZWQK KyAqCisgKiBFcnJvciByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVU VVJOX0VOT1RBVkFJTCwgY2FuJ3QgdXNlIHRoZSBjYXBhYmlsaXRpZXMgZnJvbSBub3JtYWwgd29y bGQKKyAqIGExCWJpdGZpZWxkIG9mIHNlY3VyZSB3b3JsZCBjYXBhYmlsaXRpZXMgT1BURUVfU01D X1NFQ19DQVBfKgorICogYTItNyBQcmVzZXJ2ZWQKKyAqLworLyogTm9ybWFsIHdvcmxkIHdvcmtz IGFzIGEgdW5pcHJvY2Vzc29yIHN5c3RlbSAqLworI2RlZmluZSBPUFRFRV9TTUNfTlNFQ19DQVBf VU5JUFJPQ0VTU09SCQlCSVQoMCkKKy8qIFNlY3VyZSB3b3JsZCBoYXMgcmVzZXJ2ZWQgc2hhcmVk IG1lbW9yeSBmb3Igbm9ybWFsIHdvcmxkIHRvIHVzZSAqLworI2RlZmluZSBPUFRFRV9TTUNfU0VD X0NBUF9IQVZFX1JFU0VSVkVSRURfU0hNCUJJVCgwKQorLyogU2VjdXJlIHdvcmxkIGNhbiBjb21t dW5pY2F0ZSB2aWEgcHJldmlvdXNseSB1bnJlZ2lzdGVyZWQgc2hhcmVkIG1lbW9yeSAqLworI2Rl ZmluZSBPUFRFRV9TTUNfU0VDX0NBUF9VTlJFR0lTVEVSRURfU0hNCUJJVCgxKQorI2RlZmluZSBP UFRFRV9TTUNfRlVOQ0lEX0VYQ0hBTkdFX0NBUEFCSUxJVElFUwk5CisjZGVmaW5lIE9QVEVFX1NN Q19FWENIQU5HRV9DQVBBQklMSVRJRVMgXAorCU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVF X1NNQ19GVU5DSURfRVhDSEFOR0VfQ0FQQUJJTElUSUVTKQorCitzdHJ1Y3Qgb3B0ZWVfc21jX2V4 Y2hhbmdlX2NhcGFiaWxpdGllc19yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXVu c2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOworCXVu c2lnbmVkIGxvbmcgcmVzZXJ2ZWQxOworfTsKKworLyoKKyAqIERpc2FibGUgYW5kIGVtcHRpZXMg Y2FjaGUgb2Ygc2hhcmVkIG1lbW9yeSBvYmplY3RzCisgKgorICogU2VjdXJlIHdvcmxkIGNhbiBj YWNoZSBmcmVxdWVudGx5IHVzZWQgc2hhcmVkIG1lbW9yeSBvYmplY3RzLCBmb3IKKyAqIGV4YW1w bGUgb2JqZWN0cyB1c2VkIGFzIFJQQyBhcmd1bWVudHMuIFdoZW4gc2VjdXJlIHdvcmxkIGlzIGlk bGUgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBvbmUgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2Ug dG8gZnJlZS4gVG8gZGlzYWJsZSB0aGUKKyAqIGNhY2hlIGFuZCBmcmVlIGFsbCBjYWNoZWQgb2Jq ZWN0cyB0aGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgdW50aWwKKyAqIGl0IHJldHVybnMg T1BURUVfU01DX1JFVFVSTl9FTk9UQVZBSUwuCisgKgorICogQ2FsbCByZWdpc3RlciB1c2FnZToK KyAqIGEwCVNNQyBGdW5jdGlvbiBJRCwgT1BURUVfU01DX0RJU0FCTEVfU0hNX0NBQ0hFCisgKiBh MS02CU5vdCB1c2VkCisgKiBhNwlIeXBlcnZpc29yIENsaWVudCBJRCByZWdpc3RlcgorICoKKyAq IE5vcm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09L CisgKiBhMQlVcHBlciAzMmJpdCBvZiBhIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llCisgKiBh MglMb3dlciAzMmJpdCBvZiBhIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llCisgKiBhMy03CVBy ZXNlcnZlZAorICoKKyAqIENhY2hlIGVtcHR5IHJldHVybiByZWdpc3RlciB1c2FnZToKKyAqIGEw CU9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMCisgKiBhMS03CVByZXNlcnZlZAorICoKKyAqIE5v dCBpZGxlIHJldHVybiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRUJV U1kKKyAqIGExLTcJUHJlc2VydmVkCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9ESVNB QkxFX1NITV9DQUNIRQkxMAorI2RlZmluZSBPUFRFRV9TTUNfRElTQUJMRV9TSE1fQ0FDSEUgXAor CU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfRElTQUJMRV9TSE1fQ0FD SEUpCisKK3N0cnVjdCBvcHRlZV9zbWNfZGlzYWJsZV9zaG1fY2FjaGVfcmVzdWx0IHsKKwl1bnNp Z25lZCBsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNobV91cHBlcjMyOworCXVuc2lnbmVk IGxvbmcgc2htX2xvd2VyMzI7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDA7Cit9OworCisvKgor ICogRW5hYmxlIGNhY2hlIG9mIHNoYXJlZCBtZW1vcnkgb2JqZWN0cworICoKKyAqIFNlY3VyZSB3 b3JsZCBjYW4gY2FjaGUgZnJlcXVlbnRseSB1c2VkIHNoYXJlZCBtZW1vcnkgb2JqZWN0cywgZm9y CisgKiBleGFtcGxlIG9iamVjdHMgdXNlZCBhcyBSUEMgYXJndW1lbnRzLiBXaGVuIHNlY3VyZSB3 b3JsZCBpcyBpZGxlIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgT1BURUVfU01DX1JFVFVSTl9P SyBhbmQgdGhlIGNhY2hlIGlzIGVuYWJsZWQuIElmCisgKiBzZWN1cmUgd29ybGQgaXNuJ3QgaWRs ZSBPUFRFRV9TTUNfUkVUVVJOX0VCVVNZIGlzIHJldHVybmVkLgorICoKKyAqIENhbGwgcmVnaXN0 ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19FTkFCTEVfU0hNX0NB Q0hFCisgKiBhMS02CU5vdCB1c2VkCisgKiBhNwlIeXBlcnZpc29yIENsaWVudCBJRCByZWdpc3Rl cgorICoKKyAqIE5vcm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlPUFRFRV9TTUNf UkVUVVJOX09LCisgKiBhMS03CVByZXNlcnZlZAorICoKKyAqIE5vdCBpZGxlIHJldHVybiByZWdp c3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRUJVU1kKKyAqIGExLTcJUHJlc2Vy dmVkCisgKi8KKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9FTkFCTEVfU0hNX0NBQ0hFCTExCisj ZGVmaW5lIE9QVEVFX1NNQ19FTkFCTEVfU0hNX0NBQ0hFIFwKKwlPUFRFRV9TTUNfRkFTVF9DQUxM X1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0VOQUJMRV9TSE1fQ0FDSEUpCisKKy8qCisgKiBSZXN1bWUg ZnJvbSBSUEMgKGZvciBleGFtcGxlIGFmdGVyIHByb2Nlc3NpbmcgYW4gSVJRKQorICoKKyAqIENh bGwgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19DQUxM X1JFVFVSTl9GUk9NX1JQQworICogYTEtMwlWYWx1ZSBvZiBhMS0zIHdoZW4gT1BURUVfU01DX0NB TExfV0lUSF9BUkcgcmV0dXJuZWQKKyAqCU9QVEVFX1NNQ19SRVRVUk5fUlBDIGluIGEwCisgKgor ICogUmV0dXJuIHJlZ2lzdGVyIHVzYWdlIGlzIHRoZSBzYW1lIGFzIGZvciBPUFRFRV9TTUNfKkNB TExfV0lUSF9BUkcgYWJvdmUuCisgKgorICogUG9zc2libGUgcmV0dXJuIHZhbHVlcworICogT1BU RUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OCVRydXN0ZWQgT1MgZG9lcyBub3QgcmVjb2du aXplIHRoaXMKKyAqCQkJCQlmdW5jdGlvbi4KKyAqIE9QVEVFX1NNQ19SRVRVUk5fT0sJCQlPcmln aW5hbCBjYWxsIGNvbXBsZXRlZCwgcmVzdWx0CisgKgkJCQkJdXBkYXRlZCBpbiB0aGUgcHJldmlv dXNseSBzdXBwbGllZC4KKyAqCQkJCQlzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZworICogT1BURUVfU01D X1JFVFVSTl9SUEMJCQlDYWxsIHN1c3BlbmRlZCBieSBSUEMgY2FsbCB0byBub3JtYWwKKyAqCQkJ CQl3b3JsZC4KKyAqIE9QVEVFX1NNQ19SRVRVUk5fRVJFU1VNRQkJUmVzdW1lIGZhaWxlZCwgdGhl IG9wYXF1ZSByZXN1bWUKKyAqCQkJCQlpbmZvcm1hdGlvbiB3YXMgY29ycnVwdC4KKyAqLworI2Rl ZmluZSBPUFRFRV9TTUNfRlVOQ0lEX1JFVFVSTl9GUk9NX1JQQwkzCisjZGVmaW5lIE9QVEVFX1NN Q19DQUxMX1JFVFVSTl9GUk9NX1JQQyBcCisJT1BURUVfU01DX1NURF9DQUxMX1ZBTChPUFRFRV9T TUNfRlVOQ0lEX1JFVFVSTl9GUk9NX1JQQykKKworI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQ Q19QUkVGSVhfTUFTSwkweEZGRkYwMDAwCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fUlBDX1BS RUZJWAkJMHhGRkZGMDAwMAorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GVU5DX01BU0sJ CTB4MDAwMEZGRkYKKworI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0dFVF9SUENfRlVOQyhyZXQp IFwKKwkoKHJldCkgJiBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GVU5DX01BU0spCisKKyNkZWZpbmUg T1BURUVfU01DX1JQQ19WQUwoZnVuYykJCSgoZnVuYykgfCBPUFRFRV9TTUNfUkVUVVJOX1JQQ19Q UkVGSVgpCisKKy8qCisgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFJQQyBwYXJhbWV0ZXIgcGFzc2lu Zy4gVGhlIG1lbW9yeSBpcyB1c2VkIHRvIGhvbGQgYQorICogc3RydWN0IG9wdGVlX21zZ19hcmcu CisgKgorICogIkNhbGwiIHJlZ2lzdGVyIHVzYWdlOgorICogYTAJVGhpcyB2YWx1ZSwgT1BURUVf U01DX1JFVFVSTl9SUENfQUxMT0MKKyAqIGExCVNpemUgaW4gYnl0ZXMgb2YgcmVxdWlyZWQgYXJn dW1lbnQgbWVtb3J5CisgKiBhMglOb3QgdXNlZAorICogYTMJUmVzdW1lIGluZm9ybWF0aW9uLCBt dXN0IGJlIHByZXNlcnZlZAorICogYTQtNQlOb3QgdXNlZAorICogYTYtNwlSZXN1bWUgaW5mb3Jt YXRpb24sIG11c3QgYmUgcHJlc2VydmVkCisgKgorICogIlJldHVybiIgcmVnaXN0ZXIgdXNhZ2U6 CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQy4K KyAqIGExCVVwcGVyIDMyYml0cyBvZiA2NGJpdCBwaHlzaWNhbCBwb2ludGVyIHRvIGFsbG9jYXRl ZAorICoJbWVtb3J5LCAoYTEgPT0gMCAmJiBhMiA9PSAwKSBpZiBzaXplIHdhcyAwIG9yIGlmIG1l bW9yeSBjYW4ndAorICoJYmUgYWxsb2NhdGVkLgorICogYTIJTG93ZXIgMzJiaXRzIG9mIDY0Yml0 IHBoeXNpY2FsIHBvaW50ZXIgdG8gYWxsb2NhdGVkCisgKgltZW1vcnksIChhMSA9PSAwICYmIGEy ID09IDApIGlmIHNpemUgd2FzIDAgb3IgaWYgbWVtb3J5IGNhbid0CisgKgliZSBhbGxvY2F0ZWQK KyAqIGEzCVByZXNlcnZlZAorICogYTQJVXBwZXIgMzJiaXRzIG9mIDY0Yml0IFNoYXJlZCBtZW1v cnkgY29va2llIHVzZWQgd2hlbiBmcmVlaW5nCisgKgl0aGUgbWVtb3J5IG9yIGRvaW5nIGFuIFJQ QworICogYTUJTG93ZXIgMzJiaXRzIG9mIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llIHVzZWQg d2hlbiBmcmVlaW5nCisgKgl0aGUgbWVtb3J5IG9yIGRvaW5nIGFuIFJQQworICogYTYtNwlQcmVz ZXJ2ZWQKKyAqLworI2RlZmluZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQUxMT0MJMAorI2RlZmluZSBP UFRFRV9TTUNfUkVUVVJOX1JQQ19BTExPQyBcCisJT1BURUVfU01DX1JQQ19WQUwoT1BURUVfU01D X1JQQ19GVU5DX0FMTE9DKQorCisvKgorICogRnJlZSBtZW1vcnkgcHJldmlvdXNseSBhbGxvY2F0 ZWQgYnkgT1BURUVfU01DX1JFVFVSTl9SUENfQUxMT0MKKyAqCisgKiAiQ2FsbCIgcmVnaXN0ZXIg dXNhZ2U6CisgKiBhMAlUaGlzIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GUkVFCisgKiBh MQlVcHBlciAzMmJpdHMgb2YgNjRiaXQgc2hhcmVkIG1lbW9yeSBjb29raWUgYmVsb25naW5nIHRv IHRoaXMKKyAqCWFyZ3VtZW50IG1lbW9yeQorICogYTIJTG93ZXIgMzJiaXRzIG9mIDY0Yml0IHNo YXJlZCBtZW1vcnkgY29va2llIGJlbG9uZ2luZyB0byB0aGlzCisgKglhcmd1bWVudCBtZW1vcnkK KyAqIGEzLTcJUmVzdW1lIGluZm9ybWF0aW9uLCBtdXN0IGJlIHByZXNlcnZlZAorICoKKyAqICJS ZXR1cm4iIHJlZ2lzdGVyIHVzYWdlOgorICogYTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNf Q0FMTF9SRVRVUk5fRlJPTV9SUEMuCisgKiBhMS0yCU5vdCB1c2VkCisgKiBhMy03CVByZXNlcnZl ZAorICovCisjZGVmaW5lIE9QVEVFX1NNQ19SUENfRlVOQ19GUkVFCQkyCisjZGVmaW5lIE9QVEVF X1NNQ19SRVRVUk5fUlBDX0ZSRUUgXAorCU9QVEVFX1NNQ19SUENfVkFMKE9QVEVFX1NNQ19SUENf RlVOQ19GUkVFKQorCisvKgorICogRGVsaXZlciBhbiBJUlEgaW4gbm9ybWFsIHdvcmxkLgorICoK KyAqICJDYWxsIiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fUlBDX0lS UQorICogYTEtNwlSZXN1bWUgaW5mb3JtYXRpb24sIG11c3QgYmUgcHJlc2VydmVkCisgKgorICog IlJldHVybiIgcmVnaXN0ZXIgdXNhZ2U6CisgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NN Q19DQUxMX1JFVFVSTl9GUk9NX1JQQy4KKyAqIGExLTcJUHJlc2VydmVkCisgKi8KKyNkZWZpbmUg T1BURUVfU01DX1JQQ19GVU5DX0lSUQkJNAorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19J UlEgXAorCU9QVEVFX1NNQ19SUENfVkFMKE9QVEVFX1NNQ19SUENfRlVOQ19JUlEpCisKKy8qCisg KiBEbyBhbiBSUEMgcmVxdWVzdC4gVGhlIHN1cHBsaWVkIHN0cnVjdCBvcHRlZV9tc2dfYXJnIHRl bGxzIHdoaWNoCisgKiByZXF1ZXN0IHRvIGRvIGFuZCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHJl cXVlc3QuIFRoZSBmb2xsb3dpbmcgZmllbGRzCisgKiBhcmUgdXNlZCAodGhlIHJlc3QgYXJlIHVu dXNlZCk6CisgKiAtIGNtZAkJdGhlIFJlcXVlc3QgSUQKKyAqIC0gcmV0CQlyZXR1cm4gdmFsdWUg b2YgdGhlIHJlcXVlc3QsIGZpbGxlZCBpbiBieSBub3JtYWwgd29ybGQKKyAqIC0gbnVtX3BhcmFt cwkJbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIHRoZSByZXF1ZXN0CisgKiAtIHBhcmFtcwkJdGhl IHBhcmFtZXRlcnMKKyAqIC0gcGFyYW1fYXR0cnMJYXR0cmlidXRlcyBvZiB0aGUgcGFyYW1ldGVy cworICoKKyAqICJDYWxsIiByZWdpc3RlciB1c2FnZToKKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5f UlBDX0NNRAorICogYTEJVXBwZXIgMzJiaXQgb2YgYSA2NGJpdCBTaGFyZWQgbWVtb3J5IGNvb2tp ZSBob2xkaW5nIGEKKyAqCXN0cnVjdCBvcHRlZV9tc2dfYXJnLCBtdXN0IGJlIHByZXNlcnZlZCwg b25seSB0aGUgZGF0YSBzaG91bGQKKyAqCWJlIHVwZGF0ZWQKKyAqIGEyCUxvd2VyIDMyYml0IG9m IGEgNjRiaXQgU2hhcmVkIG1lbW9yeSBjb29raWUgaG9sZGluZyBhCisgKglzdHJ1Y3Qgb3B0ZWVf bXNnX2FyZywgbXVzdCBiZSBwcmVzZXJ2ZWQsIG9ubHkgdGhlIGRhdGEgc2hvdWxkCisgKgliZSB1 cGRhdGVkCisgKiBhMy03CVJlc3VtZSBpbmZvcm1hdGlvbiwgbXVzdCBiZSBwcmVzZXJ2ZWQKKyAq CisgKiAiUmV0dXJuIiByZWdpc3RlciB1c2FnZToKKyAqIGEwCVNNQyBGdW5jdGlvbiBJRCwgT1BU RUVfU01DX0NBTExfUkVUVVJOX0ZST01fUlBDLgorICogYTEtMglOb3QgdXNlZAorICogYTMtNwlQ cmVzZXJ2ZWQKKyAqLworI2RlZmluZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQ01ECQk1CisjZGVmaW5l IE9QVEVFX1NNQ19SRVRVUk5fUlBDX0NNRCBcCisJT1BURUVfU01DX1JQQ19WQUwoT1BURUVfU01D X1JQQ19GVU5DX0NNRCkKKworLyogUmV0dXJuZWQgaW4gYTAgKi8KKyNkZWZpbmUgT1BURUVfU01D X1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OIDB4RkZGRkZGRkYKKworLyogUmV0dXJuZWQgaW4gYTAg b25seSBmcm9tIFRydXN0ZWQgT1MgZnVuY3Rpb25zICovCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRV Uk5fT0sJCTB4MAorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VUSFJFQURfTElNSVQJMHgxCisj ZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fRUJVU1kJCTB4MgorI2RlZmluZSBPUFRFRV9TTUNfUkVU VVJOX0VSRVNVTUUJMHgzCisjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fRUJBREFERFIJMHg0Cisj ZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fRUJBRENNRAkweDUKKyNkZWZpbmUgT1BURUVfU01DX1JF VFVSTl9FTk9NRU0JCTB4NgorI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJTAkweDcK KyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9JU19SUEMocmV0KQlfX29wdGVlX3NtY19yZXR1cm5f aXNfcnBjKChyZXQpKQorCitzdGF0aWMgaW5saW5lIGJvb2wgX19vcHRlZV9zbWNfcmV0dXJuX2lz X3JwYyh1MzIgcmV0KQoreworCXJldHVybiByZXQgIT0gT1BURUVfU01DX1JFVFVSTl9VTktOT1dO X0ZVTkNUSU9OICYmCisJICAgICAgIChyZXQgJiBPUFRFRV9TTUNfUkVUVVJOX1JQQ19QUkVGSVhf TUFTSykgPT0KKwkJCU9QVEVFX1NNQ19SRVRVUk5fUlBDX1BSRUZJWDsKK30KKworI2VuZGlmIC8q IE9QVEVFX1NNQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlZS9vcHRlZS9ycGMuYyBiL2Ry aXZlcnMvdGVlL29wdGVlL3JwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMGI5YzFhMmFjY2QwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90ZWUvb3B0ZWUv cnBjLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwg TGluYXJvIExpbWl0ZWQKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5 IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgor I2luY2x1ZGUgPGxpbnV4L3RlZV9kcnYuaD4KKyNpbmNsdWRlICJvcHRlZV9wcml2YXRlLmgiCisj aW5jbHVkZSAib3B0ZWVfc21jLmgiCisKK3N0cnVjdCB3cV9lbnRyeSB7CisJc3RydWN0IGxpc3Rf aGVhZCBsaW5rOworCXN0cnVjdCBjb21wbGV0aW9uIGM7CisJdTMyIGtleTsKK307CisKK3ZvaWQg b3B0ZWVfd2FpdF9xdWV1ZV9pbml0KHN0cnVjdCBvcHRlZV93YWl0X3F1ZXVlICpwcml2KQorewor CW11dGV4X2luaXQoJnByaXYtPm11KTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZGIpOworfQor Cit2b2lkIG9wdGVlX3dhaXRfcXVldWVfZXhpdChzdHJ1Y3Qgb3B0ZWVfd2FpdF9xdWV1ZSAqcHJp dikKK3sKKwltdXRleF9kZXN0cm95KCZwcml2LT5tdSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRs ZV9ycGNfZnVuY19jbWRfZ2V0X3RpbWUoc3RydWN0IG9wdGVlX21zZ19hcmcgKmFyZykKK3sKKwlz dHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICpwYXJhbXM7CisJc3RydWN0IHRpbWVzcGVjNjQgdHM7CisK KwlpZiAoYXJnLT5udW1fcGFyYW1zICE9IDEpCisJCWdvdG8gYmFkOworCXBhcmFtcyA9IE9QVEVF X01TR19HRVRfUEFSQU1TKGFyZyk7CisJaWYgKChwYXJhbXMtPmF0dHIgJiBPUFRFRV9NU0dfQVRU Ul9UWVBFX01BU0spICE9CisJCQlPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVCkKKwkJ Z290byBiYWQ7CisKKwlnZXRuc3RpbWVvZmRheTY0KCZ0cyk7CisJcGFyYW1zLT51LnZhbHVlLmEg PSB0cy50dl9zZWM7CisJcGFyYW1zLT51LnZhbHVlLmIgPSB0cy50dl9uc2VjOworCisJYXJnLT5y ZXQgPSBURUVDX1NVQ0NFU1M7CisJcmV0dXJuOworYmFkOgorCWFyZy0+cmV0ID0gVEVFQ19FUlJP Ul9CQURfUEFSQU1FVEVSUzsKK30KKworc3RhdGljIHN0cnVjdCB3cV9lbnRyeSAqd3FfZW50cnlf Z2V0KHN0cnVjdCBvcHRlZV93YWl0X3F1ZXVlICp3cSwgdTMyIGtleSkKK3sKKwlzdHJ1Y3Qgd3Ff ZW50cnkgKnc7CisKKwltdXRleF9sb2NrKCZ3cS0+bXUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRy eSh3LCAmd3EtPmRiLCBsaW5rKQorCQlpZiAody0+a2V5ID09IGtleSkKKwkJCWdvdG8gb3V0Owor CisJdyA9IGttYWxsb2Moc2l6ZW9mKCp3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHcpIHsKKwkJaW5p dF9jb21wbGV0aW9uKCZ3LT5jKTsKKwkJdy0+a2V5ID0ga2V5OworCQlsaXN0X2FkZF90YWlsKCZ3 LT5saW5rLCAmd3EtPmRiKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3cS0+bXUpOworCXJl dHVybiB3OworfQorCitzdGF0aWMgdm9pZCB3cV9zbGVlcChzdHJ1Y3Qgb3B0ZWVfd2FpdF9xdWV1 ZSAqd3EsIHUzMiBrZXkpCit7CisJc3RydWN0IHdxX2VudHJ5ICp3ID0gd3FfZW50cnlfZ2V0KHdx LCBrZXkpOworCisJaWYgKHcpIHsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdy0+Yyk7CisJCW11 dGV4X2xvY2soJndxLT5tdSk7CisJCWxpc3RfZGVsKCZ3LT5saW5rKTsKKwkJbXV0ZXhfdW5sb2Nr KCZ3cS0+bXUpOworCQlrZnJlZSh3KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdxX3dha2V1cChz dHJ1Y3Qgb3B0ZWVfd2FpdF9xdWV1ZSAqd3EsIHUzMiBrZXkpCit7CisJc3RydWN0IHdxX2VudHJ5 ICp3ID0gd3FfZW50cnlfZ2V0KHdxLCBrZXkpOworCisJaWYgKHcpCisJCWNvbXBsZXRlKCZ3LT5j KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JwY19mdW5jX2NtZF93cShzdHJ1Y3Qgb3B0ZWUg Km9wdGVlLAorCQkJCSAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICphcmcpCit7CisJc3RydWN0IG9w dGVlX21zZ19wYXJhbSAqcGFyYW1zOworCisJaWYgKGFyZy0+bnVtX3BhcmFtcyAhPSAxKQorCQln b3RvIGJhZDsKKworCXBhcmFtcyA9IE9QVEVFX01TR19HRVRfUEFSQU1TKGFyZyk7CisJaWYgKChw YXJhbXMtPmF0dHIgJiBPUFRFRV9NU0dfQVRUUl9UWVBFX01BU0spICE9CisJCQlPUFRFRV9NU0df QVRUUl9UWVBFX1ZBTFVFX0lOUFVUKQorCQlnb3RvIGJhZDsKKworCXN3aXRjaCAocGFyYW1zLT51 LnZhbHVlLmEpIHsKKwljYXNlIE9QVEVFX01TR19SUENfV0FJVF9RVUVVRV9TTEVFUDoKKwkJd3Ff c2xlZXAoJm9wdGVlLT53YWl0X3F1ZXVlLCBwYXJhbXMtPnUudmFsdWUuYik7CisJCWJyZWFrOwor CWNhc2UgT1BURUVfTVNHX1JQQ19XQUlUX1FVRVVFX1dBS0VVUDoKKwkJd3Ffd2FrZXVwKCZvcHRl ZS0+d2FpdF9xdWV1ZSwgcGFyYW1zLT51LnZhbHVlLmIpOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlnb3RvIGJhZDsKKwl9CisKKwlhcmctPnJldCA9IFRFRUNfU1VDQ0VTUzsKKwlyZXR1cm47Citi YWQ6CisJYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTOworfQorCitzdGF0aWMg dm9pZCBoYW5kbGVfcnBjX2Z1bmNfY21kX3dhaXQoc3RydWN0IG9wdGVlX21zZ19hcmcgKmFyZykK K3sKKwlzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICpwYXJhbXM7CisJdTMyIG1zZWNfdG9fd2FpdDsK KworCWlmIChhcmctPm51bV9wYXJhbXMgIT0gMSkKKwkJZ290byBiYWQ7CisKKwlwYXJhbXMgPSBP UFRFRV9NU0dfR0VUX1BBUkFNUyhhcmcpOworCWlmICgocGFyYW1zLT5hdHRyICYgT1BURUVfTVNH X0FUVFJfVFlQRV9NQVNLKSAhPQorCQkJT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTlBVVCkK KwkJZ290byBiYWQ7CisKKwltc2VjX3RvX3dhaXQgPSBwYXJhbXMtPnUudmFsdWUuYTsKKworCS8q IHNldCB0YXNrJ3Mgc3RhdGUgdG8gaW50ZXJydXB0aWJsZSBzbGVlcCAqLworCXNldF9jdXJyZW50 X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkvKiB0YWtlIGEgbmFwICovCisJc2NoZWR1 bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKG1zZWNfdG9fd2FpdCkpOworCisJYXJnLT5yZXQg PSBURUVDX1NVQ0NFU1M7CisJcmV0dXJuOworYmFkOgorCWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9C QURfUEFSQU1FVEVSUzsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JwY19zdXBwX2NtZChzdHJ1 Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCQlzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqYXJnKQorewor CXN0cnVjdCB0ZWVfcGFyYW0gKnBhcmFtczsKKwlzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICptc2df cGFyYW1zID0gT1BURUVfTVNHX0dFVF9QQVJBTVMoYXJnKTsKKworCWFyZy0+cmV0X29yaWdpbiA9 IFRFRUNfT1JJR0lOX0NPTU1TOworCisJcGFyYW1zID0ga21hbGxvY19hcnJheShhcmctPm51bV9w YXJhbXMsIHNpemVvZihzdHJ1Y3QgdGVlX3BhcmFtKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsK KwlpZiAoIXBhcmFtcykgeworCQlhcmctPnJldCA9IFRFRUNfRVJST1JfT1VUX09GX01FTU9SWTsK KwkJcmV0dXJuOworCX0KKworCWlmIChvcHRlZV9mcm9tX21zZ19wYXJhbShwYXJhbXMsIGFyZy0+ bnVtX3BhcmFtcywgbXNnX3BhcmFtcykpIHsKKwkJYXJnLT5yZXQgPSBURUVDX0VSUk9SX0JBRF9Q QVJBTUVURVJTOworCQlnb3RvIG91dDsKKwl9CisKKwlhcmctPnJldCA9IG9wdGVlX3N1cHBfdGhy ZF9yZXEoY3R4LCBhcmctPmNtZCwgYXJnLT5udW1fcGFyYW1zLCBwYXJhbXMpOworCisJaWYgKG9w dGVlX3RvX21zZ19wYXJhbShtc2dfcGFyYW1zLCBhcmctPm51bV9wYXJhbXMsIHBhcmFtcykpCisJ CWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9CQURfUEFSQU1FVEVSUzsKK291dDoKKwlrZnJlZShwYXJh bXMpOworfQorCitzdGF0aWMgc3RydWN0IHRlZV9zaG0gKmNtZF9hbGxvY19zdXBwbChzdHJ1Y3Qg dGVlX2NvbnRleHQgKmN0eCwgc2l6ZV90IHN6KQoreworCXUzMiByZXQ7CisJc3RydWN0IHRlZV9w YXJhbSBwYXJhbTsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dldF9kcnZkYXRhKGN0eC0+ dGVlZGV2KTsKKwlzdHJ1Y3QgdGVlX3NobSAqc2htOworCisJcGFyYW0uYXR0ciA9IFRFRV9JT0NU TF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ7CisJcGFyYW0udS52YWx1ZS5hID0gT1BURUVf TVNHX1JQQ19TSE1fVFlQRV9BUFBMOworCXBhcmFtLnUudmFsdWUuYiA9IHN6OworCXBhcmFtLnUu dmFsdWUuYyA9IDA7CisKKwlyZXQgPSBvcHRlZV9zdXBwX3RocmRfcmVxKGN0eCwgT1BURUVfTVNH X1JQQ19DTURfU0hNX0FMTE9DLCAxLCAmcGFyYW0pOworCWlmIChyZXQpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJbXV0ZXhfbG9jaygmb3B0ZWUtPnN1cHAuY3R4X211dGV4KTsKKwkv KiBJbmNyZWFzZXMgY291bnQgYXMgc2VjdXJlIHdvcmxkIGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5j ZSAqLworCXNobSA9IHRlZV9zaG1fZ2V0X2Zyb21faWQob3B0ZWUtPnN1cHAuY3R4LCBwYXJhbS51 LnZhbHVlLmMpOworCW11dGV4X3VubG9jaygmb3B0ZWUtPnN1cHAuY3R4X211dGV4KTsKKwlyZXR1 cm4gc2htOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2Z1bmNfY21kX3NobV9hbGxvYyhz dHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwKKwkJCQkJICBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqYXJn KQoreworCXN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKnBhcmFtcyA9IE9QVEVFX01TR19HRVRfUEFS QU1TKGFyZyk7CisJcGh5c19hZGRyX3QgcGE7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwlzaXpl X3Qgc3o7CisJc2l6ZV90IG47CisKKwlhcmctPnJldF9vcmlnaW4gPSBURUVDX09SSUdJTl9DT01N UzsKKworCWlmICghYXJnLT5udW1fcGFyYW1zIHx8CisJICAgIHBhcmFtcy0+YXR0ciAhPSBPUFRF RV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUKSB7CisJCWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9C QURfUEFSQU1FVEVSUzsKKwkJcmV0dXJuOworCX0KKworCWZvciAobiA9IDE7IG4gPCBhcmctPm51 bV9wYXJhbXM7IG4rKykgeworCQlpZiAocGFyYW1zW25dLmF0dHIgIT0gT1BURUVfTVNHX0FUVFJf VFlQRV9OT05FKSB7CisJCQlhcmctPnJldCA9IFRFRUNfRVJST1JfQkFEX1BBUkFNRVRFUlM7CisJ CQlyZXR1cm47CisJCX0KKwl9CisKKwlzeiA9IHBhcmFtcy0+dS52YWx1ZS5iOworCXN3aXRjaCAo cGFyYW1zLT51LnZhbHVlLmEpIHsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZUEVfQVBQTDoK KwkJc2htID0gY21kX2FsbG9jX3N1cHBsKGN0eCwgc3opOworCQlicmVhazsKKwljYXNlIE9QVEVF X01TR19SUENfU0hNX1RZUEVfS0VSTkVMOgorCQlzaG0gPSB0ZWVfc2htX2FsbG9jKGN0eCwgc3os IFRFRV9TSE1fTUFQUEVEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXJnLT5yZXQgPSBURUVD X0VSUk9SX0JBRF9QQVJBTUVURVJTOworCQlyZXR1cm47CisJfQorCisJaWYgKElTX0VSUihzaG0p KSB7CisJCWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9PVVRfT0ZfTUVNT1JZOworCQlyZXR1cm47CisJ fQorCisJaWYgKHRlZV9zaG1fZ2V0X3BhKHNobSwgMCwgJnBhKSkgeworCQlhcmctPnJldCA9IFRF RUNfRVJST1JfQkFEX1BBUkFNRVRFUlM7CisJCWdvdG8gYmFkOworCX0KKworCXBhcmFtc1swXS5h dHRyID0gT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDsKKwlwYXJhbXNbMF0udS50bWVt LmJ1Zl9wdHIgPSBwYTsKKwlwYXJhbXNbMF0udS50bWVtLnNpemUgPSBzejsKKwlwYXJhbXNbMF0u dS50bWVtLnNobV9yZWYgPSAodW5zaWduZWQgbG9uZylzaG07CisJYXJnLT5yZXQgPSBURUVDX1NV Q0NFU1M7CisJcmV0dXJuOworYmFkOgorCXRlZV9zaG1fZnJlZShzaG0pOworfQorCitzdGF0aWMg dm9pZCBjbWRfZnJlZV9zdXBwbChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IHRlZV9z aG0gKnNobSkKK3sKKwlzdHJ1Y3QgdGVlX3BhcmFtIHBhcmFtOworCisJcGFyYW0uYXR0ciA9IFRF RV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfVkFMVUVfSU5PVVQ7CisJcGFyYW0udS52YWx1ZS5hID0g T1BURUVfTVNHX1JQQ19TSE1fVFlQRV9BUFBMOworCXBhcmFtLnUudmFsdWUuYiA9IHRlZV9zaG1f Z2V0X2lkKHNobSk7CisJcGFyYW0udS52YWx1ZS5jID0gMDsKKworCS8qCisJICogTWF0Y2ggdGhl IHRlZV9zaG1fZ2V0X2Zyb21faWQoKSBpbiBjbWRfYWxsb2Nfc3VwcGwoKSBhcyBzZWN1cmUKKwkg KiB3b3JsZCBoYXMgcmVsZWFzZWQgaXRzIHJlZmVyZW5jZS4KKwkgKgorCSAqIEl0J3MgYmV0dGVy IHRvIGRvIHRoaXMgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QgdG8gc3VwcGxpY2FudAorCSAq IGFzIHdlJ2QgbGlrZSB0byBsZXQgdGhlIHByb2Nlc3MgZG9pbmcgdGhlIGluaXRpYWwgYWxsb2Nh dGlvbiB0bworCSAqIGRvIHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlIHRvbyBpbiBvcmRlciB0 byBhdm9pZCBzdGFja2luZworCSAqIG1hbnkgcGVuZGluZyBmcHV0KCkgb24gdGhlIGNsaWVudCBw cm9jZXNzLiBUaGlzIGNvdWxkIG90aGVyd2lzZQorCSAqIGhhcHBlbiBpZiBzZWN1cmUgd29ybGQg ZG9lcyBtYW55IGFsbG9jYXRlIGFuZCBmcmVlIGluIGEgc2luZ2xlCisJICogaW52b2tlLgorCSAq LworCXRlZV9zaG1fcHV0KHNobSk7CisKKwlvcHRlZV9zdXBwX3RocmRfcmVxKGN0eCwgT1BURUVf TVNHX1JQQ19DTURfU0hNX0ZSRUUsIDEsICZwYXJhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRs ZV9ycGNfZnVuY19jbWRfc2htX2ZyZWUoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsCisJCQkJCSBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqYXJnKQoreworCXN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKnBh cmFtcyA9IE9QVEVFX01TR19HRVRfUEFSQU1TKGFyZyk7CisJc3RydWN0IHRlZV9zaG0gKnNobTsK KworCWFyZy0+cmV0X29yaWdpbiA9IFRFRUNfT1JJR0lOX0NPTU1TOworCisJaWYgKGFyZy0+bnVt X3BhcmFtcyAhPSAxIHx8CisJICAgIHBhcmFtcy0+YXR0ciAhPSBPUFRFRV9NU0dfQVRUUl9UWVBF X1ZBTFVFX0lOUFVUKSB7CisJCWFyZy0+cmV0ID0gVEVFQ19FUlJPUl9CQURfUEFSQU1FVEVSUzsK KwkJcmV0dXJuOworCX0KKworCXNobSA9IChzdHJ1Y3QgdGVlX3NobSAqKSh1bnNpZ25lZCBsb25n KXBhcmFtcy0+dS52YWx1ZS5iOworCXN3aXRjaCAocGFyYW1zLT51LnZhbHVlLmEpIHsKKwljYXNl IE9QVEVFX01TR19SUENfU0hNX1RZUEVfQVBQTDoKKwkJY21kX2ZyZWVfc3VwcGwoY3R4LCBzaG0p OworCQlicmVhazsKKwljYXNlIE9QVEVFX01TR19SUENfU0hNX1RZUEVfS0VSTkVMOgorCQl0ZWVf c2htX2ZyZWUoc2htKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXJnLT5yZXQgPSBURUVDX0VS Uk9SX0JBRF9QQVJBTUVURVJTOworCX0KKwlhcmctPnJldCA9IFRFRUNfU1VDQ0VTUzsKK30KKwor c3RhdGljIHZvaWQgaGFuZGxlX3JwY19mdW5jX2NtZChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwg c3RydWN0IG9wdGVlICpvcHRlZSwKKwkJCQlzdHJ1Y3QgdGVlX3NobSAqc2htKQoreworCXN0cnVj dCBvcHRlZV9tc2dfYXJnICphcmc7CisKKwlhcmcgPSB0ZWVfc2htX2dldF92YShzaG0sIDApOwor CWlmIChJU19FUlIoYXJnKSkgeworCQlkZXZfZXJyKG9wdGVlLT5kZXYsICIlczogdGVlX3NobV9n ZXRfdmEgJXAgZmFpbGVkXG4iLAorCQkJX19mdW5jX18sIHNobSk7CisJCXJldHVybjsKKwl9CisK Kwlzd2l0Y2ggKGFyZy0+Y21kKSB7CisJY2FzZSBPUFRFRV9NU0dfUlBDX0NNRF9HRVRfVElNRToK KwkJaGFuZGxlX3JwY19mdW5jX2NtZF9nZXRfdGltZShhcmcpOworCQlicmVhazsKKwljYXNlIE9Q VEVFX01TR19SUENfQ01EX1dBSVRfUVVFVUU6CisJCWhhbmRsZV9ycGNfZnVuY19jbWRfd3Eob3B0 ZWUsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgT1BURUVfTVNHX1JQQ19DTURfU1VTUEVORDoKKwkJ aGFuZGxlX3JwY19mdW5jX2NtZF93YWl0KGFyZyk7CisJCWJyZWFrOworCWNhc2UgT1BURUVfTVNH X1JQQ19DTURfU0hNX0FMTE9DOgorCQloYW5kbGVfcnBjX2Z1bmNfY21kX3NobV9hbGxvYyhjdHgs IGFyZyk7CisJCWJyZWFrOworCWNhc2UgT1BURUVfTVNHX1JQQ19DTURfU0hNX0ZSRUU6CisJCWhh bmRsZV9ycGNfZnVuY19jbWRfc2htX2ZyZWUoY3R4LCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQloYW5kbGVfcnBjX3N1cHBfY21kKGN0eCwgYXJnKTsKKwl9Cit9CisKKy8qKgorICogb3B0 ZWVfaGFuZGxlX3JwYygpIC0gaGFuZGxlIFJQQyBmcm9tIHNlY3VyZSB3b3JsZAorICogQGN0eDoJ Y29udGV4dCBkb2luZyB0aGUgUlBDCisgKiBAcGFyYW06CXZhbHVlIG9mIHJlZ2lzdGVycyBmb3Ig dGhlIFJQQworICoKKyAqIFJlc3VsdCBvZiBSUEMgaXMgd3JpdHRlbiBiYWNrIGludG8gQHBhcmFt LgorICovCit2b2lkIG9wdGVlX2hhbmRsZV9ycGMoc3RydWN0IHRlZV9jb250ZXh0ICpjdHgsIHN0 cnVjdCBvcHRlZV9ycGNfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB0ZWVfZGV2aWNlICp0ZWVk ZXYgPSBjdHgtPnRlZWRldjsKKwlzdHJ1Y3Qgb3B0ZWUgKm9wdGVlID0gdGVlX2dldF9kcnZkYXRh KHRlZWRldik7CisJc3RydWN0IHRlZV9zaG0gKnNobTsKKwlwaHlzX2FkZHJfdCBwYTsKKworCXN3 aXRjaCAoT1BURUVfU01DX1JFVFVSTl9HRVRfUlBDX0ZVTkMocGFyYW0tPmEwKSkgeworCWNhc2Ug T1BURUVfU01DX1JQQ19GVU5DX0FMTE9DOgorCQlzaG0gPSB0ZWVfc2htX2FsbG9jKGN0eCwgcGFy YW0tPmExLCBURUVfU0hNX01BUFBFRCk7CisJCWlmICghSVNfRVJSKHNobSkgJiYgIXRlZV9zaG1f Z2V0X3BhKHNobSwgMCwgJnBhKSkgeworCQkJcmVnX3BhaXJfZnJvbV82NCgmcGFyYW0tPmExLCAm cGFyYW0tPmEyLCBwYSk7CisJCQlyZWdfcGFpcl9mcm9tXzY0KCZwYXJhbS0+YTQsICZwYXJhbS0+ YTUsCisJCQkJCSAodW5zaWduZWQgbG9uZylzaG0pOworCQl9IGVsc2UgeworCQkJcGFyYW0tPmEx ID0gMDsKKwkJCXBhcmFtLT5hMiA9IDA7CisJCQlwYXJhbS0+YTQgPSAwOworCQkJcGFyYW0tPmE1 ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIE9QVEVFX1NNQ19SUENfRlVOQ19GUkVFOgorCQlz aG0gPSByZWdfcGFpcl90b19wdHIocGFyYW0tPmExLCBwYXJhbS0+YTIpOworCQl0ZWVfc2htX2Zy ZWUoc2htKTsKKwkJYnJlYWs7CisJY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfSVJROgorCQkvKgor CQkgKiBBbiBJUlEgd2FzIHJhaXNlZCB3aGlsZSBzZWN1cmUgd29ybGQgd2FzIGV4ZWN1dGluZywK KwkJICogc2luY2UgYWxsIElSUXMgYXJlIGhhbmRsZWQgaW4gTGludXggYSBkdW1teSBSUEMgaXMK KwkJICogcGVyZm9ybWVkIHRvIGxldCBMaW51eCB0YWtlIHRoZSBJUlEgdGhyb3VnaCB0aGUgbm9y bWFsCisJCSAqIHZlY3Rvci4KKwkJICovCisJCWJyZWFrOworCWNhc2UgT1BURUVfU01DX1JQQ19G VU5DX0NNRDoKKwkJc2htID0gcmVnX3BhaXJfdG9fcHRyKHBhcmFtLT5hMSwgcGFyYW0tPmEyKTsK KwkJaGFuZGxlX3JwY19mdW5jX2NtZChjdHgsIG9wdGVlLCBzaG0pOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlkZXZfd2FybihvcHRlZS0+ZGV2LCAiVW5rbm93biBSUEMgZnVuYyAweCV4XG4iLAor CQkJICh1MzIpT1BURUVfU01DX1JFVFVSTl9HRVRfUlBDX0ZVTkMocGFyYW0tPmEwKSk7CisJCWJy ZWFrOworCX0KKworCXBhcmFtLT5hMCA9IE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQzsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVlL29wdGVlL3N1cHAuYyBiL2RyaXZlcnMvdGVlL29w dGVlL3N1cHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI0ZWEw Njc4YTQzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGVlL29wdGVlL3N1cHAuYwpAQCAt MCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgTGluYXJvIExpbWl0ZWQK KyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlz dHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAib3B0 ZWVfcHJpdmF0ZS5oIgorCit2b2lkIG9wdGVlX3N1cHBfaW5pdChzdHJ1Y3Qgb3B0ZWVfc3VwcCAq c3VwcCkKK3sKKwltZW1zZXQoc3VwcCwgMCwgc2l6ZW9mKCpzdXBwKSk7CisJbXV0ZXhfaW5pdCgm c3VwcC0+Y3R4X211dGV4KTsKKwltdXRleF9pbml0KCZzdXBwLT50aHJkX211dGV4KTsKKwltdXRl eF9pbml0KCZzdXBwLT5zdXBwX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnN1cHAtPmRhdGFf dG9fc3VwcCk7CisJaW5pdF9jb21wbGV0aW9uKCZzdXBwLT5kYXRhX2Zyb21fc3VwcCk7Cit9CisK K3ZvaWQgb3B0ZWVfc3VwcF91bmluaXQoc3RydWN0IG9wdGVlX3N1cHAgKnN1cHApCit7CisJbXV0 ZXhfZGVzdHJveSgmc3VwcC0+Y3R4X211dGV4KTsKKwltdXRleF9kZXN0cm95KCZzdXBwLT50aHJk X211dGV4KTsKKwltdXRleF9kZXN0cm95KCZzdXBwLT5zdXBwX211dGV4KTsKK30KKworLyoqCisg KiBvcHRlZV9zdXBwX3RocmRfcmVxKCkgLSByZXF1ZXN0IHNlcnZpY2UgZnJvbSBzdXBwbGljYW50 CisgKiBAY3R4Ogljb250ZXh0IGRvaW5nIHRoZSByZXF1ZXN0CisgKiBAZnVuYzoJZnVuY3Rpb24g cmVxdWVzdGVkCisgKiBAbnVtX3BhcmFtczoJbnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwYXJhbSBh cnJheQorICogQHBhcmFtOglwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbgorICoKKyAqIFJldHVybnMg cmVzdWx0IG9mIG9wZXJhdGlvbiB0byBiZSBwYXNzZWQgdG8gc2VjdXJlIHdvcmxkCisgKi8KK3Uz MiBvcHRlZV9zdXBwX3RocmRfcmVxKHN0cnVjdCB0ZWVfY29udGV4dCAqY3R4LCB1MzIgZnVuYywg c2l6ZV90IG51bV9wYXJhbXMsCisJCQlzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSkKK3sKKwlib29s IGludGVycnVwdGFibGU7CisJc3RydWN0IG9wdGVlICpvcHRlZSA9IHRlZV9nZXRfZHJ2ZGF0YShj dHgtPnRlZWRldik7CisJc3RydWN0IG9wdGVlX3N1cHAgKnN1cHAgPSAmb3B0ZWUtPnN1cHA7CisJ dTMyIHJldDsKKworCS8qCisJICogT3RoZXIgdGhyZWFkcyBibG9ja3MgaGVyZSB1bnRpbCB3ZSd2 ZSBjb3BpZWQgb3VyIGFuc3dlciBmcm9tCisJICogc3VwcGxpY2FudC4KKwkgKi8KKwl3aGlsZSAo bXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzdXBwLT50aHJkX211dGV4KSkgeworCQkvKiBTZWUg Y29tbWVudCBiZWxvdyBvbiB3aGVuIHRoZSBSUEMgY2FuIGJlIGludGVycnVwdGVkLiAqLworCQlt dXRleF9sb2NrKCZzdXBwLT5jdHhfbXV0ZXgpOworCQlpbnRlcnJ1cHRhYmxlID0gIXN1cHAtPmN0 eDsKKwkJbXV0ZXhfdW5sb2NrKCZzdXBwLT5jdHhfbXV0ZXgpOworCQlpZiAoaW50ZXJydXB0YWJs ZSkKKwkJCXJldHVybiBURUVDX0VSUk9SX0NPTU1VTklDQVRJT047CisJfQorCisJLyoKKwkgKiBX ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3Mgbm93IHNpbmNlIHRoZSBzdXBwbGljYW50IGF0IHRoaXMK KwkgKiBwb2ludCBpcyBlaXRoZXIgZG9pbmcgYQorCSAqIHdhaXRfZm9yX2NvbXBsZXRpb25faW50 ZXJydXB0aWJsZSgmc3VwcC0+ZGF0YV90b19zdXBwKSBvciBpcyBpbgorCSAqIHVzZXJzcGFjZSBz dGlsbCBhYm91dCB0byBkbyB0aGUgaW9jdGwoKSB0byBlbnRlcgorCSAqIG9wdGVlX3N1cHBfcmVj digpIGJlbG93LgorCSAqLworCisJc3VwcC0+ZnVuYyA9IGZ1bmM7CisJc3VwcC0+bnVtX3BhcmFt cyA9IG51bV9wYXJhbXM7CisJc3VwcC0+cGFyYW0gPSBwYXJhbTsKKwlzdXBwLT5yZXFfcG9zdGVk ID0gdHJ1ZTsKKworCS8qIExldCBzdXBwbGljYW50IGdldCB0aGUgZGF0YSAqLworCWNvbXBsZXRl KCZzdXBwLT5kYXRhX3RvX3N1cHApOworCisJLyoKKwkgKiBXYWl0IGZvciBzdXBwbGljYW50IHRv IHByb2Nlc3MgYW5kIHJldHVybiByZXN1bHQsIG9uY2Ugd2UndmUKKwkgKiByZXR1cm5lZCBmcm9t IHdhaXRfZm9yX2NvbXBsZXRpb24oZGF0YV9mcm9tX3N1cHApIHdlIGhhdmUKKwkgKiBleGNsdXNp dmUgYWNjZXNzIGFnYWluLgorCSAqLworCXdoaWxlICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVy cnVwdGlibGUoJnN1cHAtPmRhdGFfZnJvbV9zdXBwKSkgeworCQltdXRleF9sb2NrKCZzdXBwLT5j dHhfbXV0ZXgpOworCQlpbnRlcnJ1cHRhYmxlID0gIXN1cHAtPmN0eDsKKwkJaWYgKGludGVycnVw dGFibGUpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSdzIG5vIHN1cHBsaWNhbnQgYXZhaWxhYmxlIGFu ZCBzaW5jZSB0aGUKKwkJCSAqIHN1cHAtPmN0eF9tdXRleCBjdXJyZW50bHkgaXMgaGVsZCBub25l IGNhbgorCQkJICogYmVjb21lIGF2YWlsYWJsZSB1bnRpbCB0aGUgbXV0ZXggcmVsZWFzZWQKKwkJ CSAqIGFnYWluLgorCQkJICoKKwkJCSAqIEludGVycnVwdGluZyBhbiBSUEMgdG8gc3VwcGxpY2Fu dCBpcyBvbmx5CisJCQkgKiBhbGxvd2VkIGFzIGEgd2F5IG9mIHNsaWdodGx5IGltcHJvdmluZyB0 aGUgdXNlcgorCQkJICogZXhwZXJpZW5jZSBpbiBjYXNlIHRoZSBzdXBwbGljYW50IGhhc24ndCBi ZWVuCisJCQkgKiBzdGFydGVkIHlldC4gRHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gdGhlIHN1cHBs aWNhbnQKKwkJCSAqIHdpbGwgc2VydmUgYWxsIHJlcXVlc3RzIGluIGEgdGltZWx5IG1hbm5lciBh bmQKKwkJCSAqIGludGVycnVwdGluZyB0aGVuIHdvdWxkbid0IG1ha2Ugc2Vuc2UuCisJCQkgKi8K KwkJCXN1cHAtPnJldCA9IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwkJCWluaXRfY29tcGxl dGlvbigmc3VwcC0+ZGF0YV90b19zdXBwKTsKKwkJfQorCQltdXRleF91bmxvY2soJnN1cHAtPmN0 eF9tdXRleCk7CisJCWlmIChpbnRlcnJ1cHRhYmxlKQorCQkJYnJlYWs7CisJfQorCisJcmV0ID0g c3VwcC0+cmV0OworCXN1cHAtPnBhcmFtID0gTlVMTDsKKwlzdXBwLT5yZXFfcG9zdGVkID0gZmFs c2U7CisKKwkvKiBXZSdyZSBkb25lLCBsZXQgc29tZW9uZSBlbHNlIHRhbGsgdG8gdGhlIHN1cHBs aWNhbnQgbm93LiAqLworCW11dGV4X3VubG9jaygmc3VwcC0+dGhyZF9tdXRleCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKioKKyAqIG9wdGVlX3N1cHBfcmVjdigpIC0gcmVjZWl2ZSByZXF1ZXN0 IGZvciBzdXBwbGljYW50CisgKiBAY3R4Ogljb250ZXh0IHJlY2VpdmluZyB0aGUgcmVxdWVzdAor ICogQGZ1bmM6CXJlcXVlc3RlZCBmdW5jdGlvbiBpbiBzdXBwbGljYW50CisgKiBAbnVtX3BhcmFt czoJbnVtYmVyIG9mIGVsZW1lbnRzIGFsbG9jYXRlZCBpbiBAcGFyYW0sIHVwZGF0ZWQgd2l0aCBu dW1iZXIKKyAqCQl1c2VkIGVsZW1lbnRzCisgKiBAcGFyYW06CXNwYWNlIGZvciBwYXJhbWV0ZXJz IGZvciBAZnVuYworICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIDwwIG9uIGZhaWx1cmUK KyAqLworaW50IG9wdGVlX3N1cHBfcmVjdihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyICpm dW5jLCB1MzIgKm51bV9wYXJhbXMsCisJCSAgICBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSkKK3sK KwlzdHJ1Y3QgdGVlX2RldmljZSAqdGVlZGV2ID0gY3R4LT50ZWVkZXY7CisJc3RydWN0IG9wdGVl ICpvcHRlZSA9IHRlZV9nZXRfZHJ2ZGF0YSh0ZWVkZXYpOworCXN0cnVjdCBvcHRlZV9zdXBwICpz dXBwID0gJm9wdGVlLT5zdXBwOworCWludCByYzsKKworCS8qCisJICogSW4gY2FzZSB0d28gdGhy ZWFkcyBpbiBvbmUgc3VwcGxpY2FudCBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBzaW11 bHRhbmVvdXNseSB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIGRhdGEgd2l0aCBhIG11dGV4IHdoaWNo CisJICogd2UnbGwgcmVsZWFzZSBiZWZvcmUgcmV0dXJuaW5nLgorCSAqLworCW11dGV4X2xvY2so JnN1cHAtPnN1cHBfbXV0ZXgpOworCisJaWYgKHN1cHAtPnN1cHBfbmV4dF9zZW5kKSB7CisJCS8q CisJCSAqIG9wdGVlX3N1cHBfcmVjdigpIGhhcyBiZWVuIGNhbGxlZCBhZ2FpbiB3aXRob3V0CisJ CSAqIGEgb3B0ZWVfc3VwcF9zZW5kKCkgaW4gYmV0d2Vlbi4gU3VwcGxpY2FudCBoYXMKKwkJICog cHJvYmFibHkgYmVlbiByZXN0YXJ0ZWQgYmVmb3JlIGl0IHdhcyBhYmxlIHRvCisJCSAqIHdyaXRl IGJhY2sgbGFzdCByZXN1bHQuIEFib3J0IGxhc3QgcmVxdWVzdCBhbmQKKwkJICogd2FpdCBmb3Ig YSBuZXcuCisJCSAqLworCQlpZiAoc3VwcC0+cmVxX3Bvc3RlZCkgeworCQkJc3VwcC0+cmV0ID0g VEVFQ19FUlJPUl9DT01NVU5JQ0FUSU9OOworCQkJc3VwcC0+c3VwcF9uZXh0X3NlbmQgPSBmYWxz ZTsKKwkJCWNvbXBsZXRlKCZzdXBwLT5kYXRhX2Zyb21fc3VwcCk7CisJCX0KKwl9CisKKwkvKgor CSAqIFRoaXMgaXMgd2hlcmUgc3VwcGxpY2FudCB3aWxsIGJlIGhhbmdpbmcgbW9zdCBvZiB0aGUK KwkgKiB0aW1lLCBsZXQncyBtYWtlIHRoaXMgaW50ZXJydXB0YWJsZSBzbyB3ZSBjYW4gZWFzaWx5 CisJICogcmVzdGFydCBzdXBwbGljYW50IGlmIG5lZWRlZC4KKwkgKi8KKwlpZiAod2FpdF9mb3Jf Y29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZzdXBwLT5kYXRhX3RvX3N1cHApKSB7CisJCXJjID0g LUVSRVNUQVJUU1lTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXZSBoYXZlIGV4bHVzaXZlIGFj Y2VzcyB0byB0aGUgZGF0YSAqLworCisJaWYgKCpudW1fcGFyYW1zIDwgc3VwcC0+bnVtX3BhcmFt cykgeworCQkvKgorCQkgKiBOb3QgZW5vdWdoIHJvb20gZm9yIHBhcmFtZXRlcnMsIHRlbGwgc3Vw cGxpY2FudAorCQkgKiBpdCBmYWlsZWQgYW5kIGFib3J0IGxhc3QgcmVxdWVzdC4KKwkJICovCisJ CXN1cHAtPnJldCA9IFRFRUNfRVJST1JfQ09NTVVOSUNBVElPTjsKKwkJcmMgPSAtRUlOVkFMOwor CQljb21wbGV0ZSgmc3VwcC0+ZGF0YV9mcm9tX3N1cHApOworCQlnb3RvIG91dDsKKwl9CisKKwkq ZnVuYyA9IHN1cHAtPmZ1bmM7CisJKm51bV9wYXJhbXMgPSBzdXBwLT5udW1fcGFyYW1zOworCW1l bWNweShwYXJhbSwgc3VwcC0+cGFyYW0sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgdGVlX3BhcmFt KSAqIHN1cHAtPm51bV9wYXJhbXMpOworCisJLyogQWxsb3cgb3B0ZWVfc3VwcF9zZW5kKCkgYmVs b3cgdG8gZG8gaXRzIHdvcmsgKi8KKwlzdXBwLT5zdXBwX25leHRfc2VuZCA9IHRydWU7CisKKwly YyA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdXBwLT5zdXBwX211dGV4KTsKKwlyZXR1cm4g cmM7Cit9CisKKy8qKgorICogb3B0ZWVfc3VwcF9zZW5kKCkgLSBzZW5kIHJlc3VsdCBvZiByZXF1 ZXN0IGZyb20gc3VwcGxpY2FudAorICogQGN0eDoJY29udGV4dCBzZW5kaW5nIHJlc3VsdAorICog QHJldDoJcmV0dXJuIHZhbHVlIG9mIHJlcXVlc3QKKyAqIEBudW1fcGFyYW1zOgludW1iZXIgb2Yg cGFyYW1ldGVycyByZXR1cm5lZAorICogQHBhcmFtOglyZXR1cm5lZCBwYXJhbWV0ZXJzCisgKgor ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IG9wdGVl X3N1cHBfc2VuZChzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgdTMyIHJldCwgdTMyIG51bV9wYXJh bXMsCisJCSAgICBzdHJ1Y3QgdGVlX3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdGVlX2Rldmlj ZSAqdGVlZGV2ID0gY3R4LT50ZWVkZXY7CisJc3RydWN0IG9wdGVlICpvcHRlZSA9IHRlZV9nZXRf ZHJ2ZGF0YSh0ZWVkZXYpOworCXN0cnVjdCBvcHRlZV9zdXBwICpzdXBwID0gJm9wdGVlLT5zdXBw OworCXNpemVfdCBuOworCWludCByYyA9IDA7CisKKwkvKgorCSAqIFdlIHN0aWxsIGhhdmUgZXhj bHVzaXZlIGFjY2VzcyB0byB0aGUgZGF0YSBzaW5jZSB0aGF0J3MgaG93IHdlCisJICogbGVmdCBp dCB3aGVuIHJldHVybmluZyBmcm9tIG9wdGVlX3N1cHBfcmVhZCgpLgorCSAqLworCisJLyogU2Vl IGNvbW1lbnQgb24gbXV0ZXggaW4gb3B0ZWVfc3VwcF9yZWFkKCkgYWJvdmUgKi8KKwltdXRleF9s b2NrKCZzdXBwLT5zdXBwX211dGV4KTsKKworCWlmICghc3VwcC0+c3VwcF9uZXh0X3NlbmQpIHsK KwkJLyoKKwkJICogU29tZXRoaW5nIHN0cmFuZ2UgaXMgZ29pbmcgb24sIHN1cHBsaWNhbnQgc2hv dWxkbid0CisJCSAqIGVudGVyIG9wdGVlX3N1cHBfc2VuZCgpIGluIHRoaXMgc3RhdGUKKwkJICov CisJCXJjID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG51bV9wYXJhbXMgIT0g c3VwcC0+bnVtX3BhcmFtcykgeworCQkvKgorCQkgKiBTb21ldGhpbmcgaXMgd3JvbmcsIGxldCBz dXBwbGljYW50IHJlc3RhcnQuIE5leHQgY2FsbCB0bworCQkgKiBvcHRlZV9zdXBwX3JlY3YoKSB3 aWxsIGdpdmUgYW4gZXJyb3IgdG8gdGhlIHJlcXVlc3RpbmcKKwkJICogdGhyZWFkIGFuZCByZWxl YXNlIGl0LgorCQkgKi8KKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBV cGRhdGUgb3V0IGFuZCBpbi9vdXQgcGFyYW1ldGVycyAqLworCWZvciAobiA9IDA7IG4gPCBudW1f cGFyYW1zOyBuKyspIHsKKwkJc3RydWN0IHRlZV9wYXJhbSAqcCA9IHN1cHAtPnBhcmFtICsgbjsK KworCQlzd2l0Y2ggKHAtPmF0dHIpIHsKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBF X1ZBTFVFX09VVFBVVDoKKwkJY2FzZSBURUVfSU9DVExfUEFSQU1fQVRUUl9UWVBFX1ZBTFVFX0lO T1VUOgorCQkJcC0+dS52YWx1ZS5hID0gcGFyYW1bbl0udS52YWx1ZS5hOworCQkJcC0+dS52YWx1 ZS5iID0gcGFyYW1bbl0udS52YWx1ZS5iOworCQkJcC0+dS52YWx1ZS5jID0gcGFyYW1bbl0udS52 YWx1ZS5jOworCQkJYnJlYWs7CisJCWNhc2UgVEVFX0lPQ1RMX1BBUkFNX0FUVFJfVFlQRV9NRU1S RUZfT1VUUFVUOgorCQljYXNlIFRFRV9JT0NUTF9QQVJBTV9BVFRSX1RZUEVfTUVNUkVGX0lOT1VU OgorCQkJcC0+dS5tZW1yZWYuc2l6ZSA9IHBhcmFtW25dLnUubWVtcmVmLnNpemU7CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCXN1cHAtPnJldCA9IHJldDsKKwor CS8qIEFsbG93IG9wdGVlX3N1cHBfcmVjdigpIGFib3ZlIHRvIGRvIGl0cyB3b3JrICovCisJc3Vw cC0+c3VwcF9uZXh0X3NlbmQgPSBmYWxzZTsKKworCS8qIExldCB0aGUgcmVxdWVzdGluZyB0aHJl YWQgY29udGludWUgKi8KKwljb21wbGV0ZSgmc3VwcC0+ZGF0YV9mcm9tX3N1cHApOworb3V0Ogor CW11dGV4X3VubG9jaygmc3VwcC0+c3VwcF9tdXRleCk7CisJcmV0dXJuIHJjOworfQotLSAKMi43 LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==