From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: dmaengine: fsl-dpaa2-qdma: Add qDMA controller driver for Layerscape SoCs From: Peng Ma Message-Id: <20181225110447.31628-1-peng.ma@nxp.com> Date: Tue, 25 Dec 2018 11:04:47 +0000 To: vkoul@kernel.org Cc: dan.j.williams@intel.com, leoyang.li@nxp.com, jerry.huang@nxp.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Peng Ma List-ID: QWRkIE5YUCBEYXRhIFBhdGggQWNjZWxlcmF0aW9uIEFyY2hpdGVjdHVyZSAyIChkcGFhMikgcXVl dWUgZGlyZWN0Cm1lbW9yeShxRE1BKSBjb250cm9sbGVyIGRyaXZlciBzdXBwb3J0LgpUaGlzIG1v ZHVsZSBjYW4gYmUgZm91bmQgb24gTlhQIExTMiBTb0NzLgoKU2lnbmVkLW9mZi1ieTogUGVuZyBN YSA8cGVuZy5tYUBueHAuY29tPgotLS0KIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZG1hL01ha2VmaWxlICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25maWcgICAg ICAgICAgfCAgICA4ICsKIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL01ha2VmaWxlICAgICAg ICAgfCAgICA4ICsKIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYyAgICAg fCAgNzgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvZnNsLWRwYWEy LXFkbWEvZHBhYTItcWRtYS5oICAgICB8ICAxNTIgKysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZHBh YTItcWRtYS9kcGRtYWkuYyAgICAgICAgIHwgIDQ4MyArKysrKysrKysrKysrKysrKwogZHJpdmVy cy9kbWEvZnNsLWRwYWEyLXFkbWEvZnNsX2RwZG1haS5oICAgICB8ICA1MjQgKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9mc2xfZHBkbWFpX2NtZC5oIHwgIDE5 NyArKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDIxNTYgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9LY29u ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFhMi1x ZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFh Mi1xZG1hLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9k cGRtYWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2Zz bF9kcGRtYWkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1h L2ZzbF9kcGRtYWlfY21kLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJp dmVycy9kbWEvS2NvbmZpZwppbmRleCBkZTUxMWRiLi5mMGQ4MTI1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTY0Niw2ICs2NDYs OCBAQCBzb3VyY2UgImRyaXZlcnMvZG1hL3NoL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9k bWEvdGkvS2NvbmZpZyIKIAorc291cmNlIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25m aWcKKwogIyBjbGllbnRzCiBjb21tZW50ICJETUEgQ2xpZW50cyIKIAlkZXBlbmRzIG9uIERNQV9F TkdJTkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvTWFr ZWZpbGUKaW5kZXggN2ZjYzRkOC4uZjU0MjgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTczLDYgKzczLDcgQEAgb2JqLSQo Q09ORklHX1RJTUJfRE1BKSArPSB0aW1iX2RtYS5vCiBvYmotJChDT05GSUdfWEdFTkVfRE1BKSAr PSB4Z2VuZS1kbWEubwogb2JqLSQoQ09ORklHX1pYX0RNQSkgKz0genhfZG1hLm8KIG9iai0kKENP TkZJR19TVF9GRE1BKSArPSBzdF9mZG1hLm8KK29iai0kKENPTkZJR19GU0xfRFBBQTJfUURNQSkg Kz0gZnNsLWRwYWEyLXFkbWEvCiAKIG9iai15ICs9IG1lZGlhdGVrLwogb2JqLXkgKz0gcWNvbS8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25maWcgYi9kcml2ZXJz L2RtYS9mc2wtZHBhYTItcWRtYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmVjNTkxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2wtZHBhYTIt cWRtYS9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorbWVudWNvbmZpZyBGU0xfRFBBQTJfUURNQQor CXRyaXN0YXRlICJOWFAgRFBBQTIgUURNQSIKKwlkZXBlbmRzIG9uIEZTTF9NQ19CVVMgJiYgRlNM X01DX0RQSU8KKwlzZWxlY3QgRE1BX0VOR0lORQorCXNlbGVjdCBETUFfVklSVFVBTF9DSEFOTkVM UworCWhlbHAKKwkgIE5YUCBEYXRhIFBhdGggQWNjZWxlcmF0aW9uIEFyY2hpdGVjdHVyZSAyIFFE TUEgZHJpdmVyLAorCSAgdXNpbmcgdGhlIE5YUCBNQyBidXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9mc2wtZHBh YTItcWRtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTkw MjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvTWFrZWZp bGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTlhQIERQQUEyIHFETUEg Y29udHJvbGxlcnMKKyMKK2NjZmxhZ3MteSArPSAtRFZFUlNJT049XCJcIgorCitvYmotJChDT05G SUdfRlNMX0RQQUEyX1FETUEpICs9IGZzbC1kcGFhMi1xZG1hLm8KKworZnNsLWRwYWEyLXFkbWEt b2JqcyAgICA6PSBkcGFhMi1xZG1hLm8gZHBkbWFpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h L2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1h L2RwYWEyLXFkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ3Mjgx Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRt YS5jCkBAIC0wLDAgKzEsNzgxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLy8gQ29weXJpZ2h0IDIwMTQtMjAxOCBOWFAKKworLyoKKyAqIEF1dGhvcjogQ2hhbmdtaW5n IEh1YW5nIDxqZXJyeS5odWFuZ0BueHAuY29tPgorICoKKyAqIERyaXZlciBmb3IgdGhlIE5YUCBR RE1BIGVuZ2luZSB3aXRoIFFNYW4gbW9kZS4KKyAqIENoYW5uZWwgdmlydHVhbGl6YXRpb24gaXMg c3VwcG9ydGVkIHRocm91Z2ggZW5xdWV1aW5nIG9mIERNQSBqb2JzIHRvLAorICogb3IgZGVxdWV1 aW5nIERNQSBqb2JzIGZyb20gZGlmZmVyZW50IHdvcmsgcXVldWVzIHdpdGggUU1hbiBwb3J0YWwu CisgKiBUaGlzIG1vZHVsZSBjYW4gYmUgZm91bmQgb24gTlhQIExTMiBTb0NzLgorICoKKyAqLwor CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNs dWRlIDxsaW51eC9pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c19zb2MuaD4KKyNpbmNsdWRl IDxsaW51eC9mc2wvbWMuaD4KKyNpbmNsdWRlIDxzb2MvZnNsL2RwYWEyLWlvLmg+CisKKyNpbmNs dWRlICIuLi92aXJ0LWRtYS5oIgorI2luY2x1ZGUgImZzbF9kcGRtYWlfY21kLmgiCisjaW5jbHVk ZSAiZnNsX2RwZG1haS5oIgorI2luY2x1ZGUgImRwYWEyLXFkbWEuaCIKKworc3RhdGljIGJvb2wg c21tdV9kaXNhYmxlID0gdHJ1ZTsKKworc3RhdGljIHN0cnVjdCBkcGFhMl9xZG1hX2NoYW4gKnRv X2RwYWEyX3FkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjaGFuLCBzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFuLCB2Y2hhbi5jaGFuKTsKK30KKwor c3RhdGljIHN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKnRvX2ZzbF9xZG1hX2NvbXAoc3RydWN0IHZp cnRfZG1hX2Rlc2MgKnZkKQoreworCXJldHVybiBjb250YWluZXJfb2YodmQsIHN0cnVjdCBkcGFh Ml9xZG1hX2NvbXAsIHZkZXNjKTsKK30KKworc3RhdGljIGludCBkcGFhMl9xZG1hX2FsbG9jX2No YW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRt YV9jaGFuICpkcGFhMl9jaGFuID0gdG9fZHBhYTJfcWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBk cGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYSA9IGRwYWEyX2NoYW4tPnFkbWE7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmRwYWEyX3FkbWEtPnByaXYtPmRwZG1haV9kZXYtPmRldjsKKworCWRw YWEyX2NoYW4tPmZkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImZkX3Bvb2wiLCBkZXYsCisJCQkJ CSAgICAgIEZEX1BPT0xfU0laRSwgMzIsIDApOworCWlmICghZHBhYTJfY2hhbi0+ZmRfcG9vbCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gZHBhYTJfcWRtYS0+ZGVzY19hbGxvY2F0ZWQr KzsKK30KKworc3RhdGljIHZvaWQgZHBhYTJfcWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVj dCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFuICpkcGFhMl9jaGFu ID0gdG9fZHBhYTJfcWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAq ZHBhYTJfcWRtYSA9IGRwYWEyX2NoYW4tPnFkbWE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwor CUxJU1RfSEVBRChoZWFkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcGFhMl9jaGFuLT52Y2hh bi5sb2NrLCBmbGFncyk7CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmZHBhYTJfY2hhbi0+ dmNoYW4sICZoZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcGFhMl9jaGFuLT52Y2hh bi5sb2NrLCBmbGFncyk7CisKKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmRwYWEyX2NoYW4t PnZjaGFuLCAmaGVhZCk7CisKKwlkcGFhMl9kcGRtYWlfZnJlZV9jb21wKGRwYWEyX2NoYW4sICZk cGFhMl9jaGFuLT5jb21wX3VzZWQpOworCWRwYWEyX2RwZG1haV9mcmVlX2NvbXAoZHBhYTJfY2hh biwgJmRwYWEyX2NoYW4tPmNvbXBfZnJlZSk7CisKKwlkbWFfcG9vbF9kZXN0cm95KGRwYWEyX2No YW4tPmZkX3Bvb2wpOworCWRwYWEyX3FkbWEtPmRlc2NfYWxsb2NhdGVkLS07Cit9CisKKy8qCisg KiBSZXF1ZXN0IGEgY29tbWFuZCBkZXNjcmlwdG9yIGZvciBlbnF1ZXVlLgorICovCitzdGF0aWMg c3RydWN0IGRwYWEyX3FkbWFfY29tcCAqCitkcGFhMl9xZG1hX3JlcXVlc3RfZGVzYyhzdHJ1Y3Qg ZHBhYTJfcWRtYV9jaGFuICpkcGFhMl9jaGFuKQoreworCXN0cnVjdCBkcGFhMl9xZG1hX2NvbXAg KmNvbXBfdGVtcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZkcGFhMl9jaGFuLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHko JmRwYWEyX2NoYW4tPmNvbXBfZnJlZSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHBh YTJfY2hhbi0+cXVldWVfbG9jaywgZmxhZ3MpOworCQljb21wX3RlbXAgPSBremFsbG9jKHNpemVv ZigqY29tcF90ZW1wKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29tcF90ZW1wKQorCQkJZ290byBl cnI7CisJCWNvbXBfdGVtcC0+ZmRfdmlydF9hZGRyID0KKwkJCWRtYV9wb29sX2FsbG9jKGRwYWEy X2NoYW4tPmZkX3Bvb2wsIEdGUF9OT1dBSVQsCisJCQkJICAgICAgICZjb21wX3RlbXAtPmZkX2J1 c19hZGRyKTsKKwkJaWYgKCFjb21wX3RlbXAtPmZkX3ZpcnRfYWRkcikKKwkJCWdvdG8gZXJyOwor CisJCWNvbXBfdGVtcC0+ZmxfdmlydF9hZGRyID0KKwkJCSh2b2lkICopKChzdHJ1Y3QgZHBhYTJf ZmQgKikKKwkJCQljb21wX3RlbXAtPmZkX3ZpcnRfYWRkciArIDEpOworCQljb21wX3RlbXAtPmZs X2J1c19hZGRyID0gY29tcF90ZW1wLT5mZF9idXNfYWRkciArCisJCQkJCXNpemVvZihzdHJ1Y3Qg ZHBhYTJfZmQpOworCQljb21wX3RlbXAtPmRlc2NfdmlydF9hZGRyID0KKwkJCSh2b2lkICopKChz dHJ1Y3QgZHBhYTJfZmxfZW50cnkgKikKKwkJCQljb21wX3RlbXAtPmZsX3ZpcnRfYWRkciArIDMp OworCQljb21wX3RlbXAtPmRlc2NfYnVzX2FkZHIgPSBjb21wX3RlbXAtPmZsX2J1c19hZGRyICsK KwkJCQlzaXplb2Yoc3RydWN0IGRwYWEyX2ZsX2VudHJ5KSAqIDM7CisKKwkJY29tcF90ZW1wLT5x Y2hhbiA9IGRwYWEyX2NoYW47CisJCXJldHVybiBjb21wX3RlbXA7CisJfQorCWNvbXBfdGVtcCA9 IGxpc3RfZmlyc3RfZW50cnkoJmRwYWEyX2NoYW4tPmNvbXBfZnJlZSwKKwkJCQkgICAgIHN0cnVj dCBkcGFhMl9xZG1hX2NvbXAsIGxpc3QpOworCWxpc3RfZGVsKCZjb21wX3RlbXAtPmxpc3QpOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwYWEyX2NoYW4tPnF1ZXVlX2xvY2ssIGZsYWdzKTsK KworCWNvbXBfdGVtcC0+cWNoYW4gPSBkcGFhMl9jaGFuOworZXJyOgorCXJldHVybiBjb21wX3Rl bXA7Cit9CisKK3N0YXRpYyB2b2lkCitkcGFhMl9xZG1hX3BvcHVsYXRlX2ZkKHUzMiBmb3JtYXQs IHN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKmRwYWEyX2NvbXApCit7CisJc3RydWN0IGRwYWEyX2Zk ICpmZDsKKworCWZkID0gKHN0cnVjdCBkcGFhMl9mZCAqKWRwYWEyX2NvbXAtPmZkX3ZpcnRfYWRk cjsKKwltZW1zZXQoZmQsIDAsIHNpemVvZihzdHJ1Y3QgZHBhYTJfZmQpKTsKKworCS8qIGZkIHBv cHVsYXRlZCAqLworCWRwYWEyX2ZkX3NldF9hZGRyKGZkLCBkcGFhMl9jb21wLT5mbF9idXNfYWRk cik7CisJLyogQnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiwgRnJhbWUgbGlzdCBmb3JtYXQsIHNo b3J0IGxlbmd0aCBkaXNhYmxlICovCisJLyogd2UgbmVlZCB0byBkaXNhYmxlIEJNVCBpZiBmc2wt bWMgdXNlIGlvdmEgYWRkciAqLworCWlmIChzbW11X2Rpc2FibGUpCisJCWRwYWEyX2ZkX3NldF9i cGlkKGZkLCBRTUFOX0ZEX0JNVF9FTkFCTEUpOworCWRwYWEyX2ZkX3NldF9mb3JtYXQoZmQsIFFN QU5fRkRfRk1UX0VOQUJMRSB8IFFNQU5fRkRfU0xfRElTQUJMRSk7CisKKwlkcGFhMl9mZF9zZXRf ZnJjKGZkLCBmb3JtYXQgfCBRRE1BX1NFUl9DVFgpOworfQorCisvKiBmaXJzdCBmcmFtZSBsaXN0 IGZvciBkZXNjcmlwdG9yIGJ1ZmZlciAqLworc3RhdGljIHZvaWQKK2RwYWEyX3FkbWFfcG9wdWxh dGVfZmlyc3RfZnJhbWVsKHN0cnVjdCBkcGFhMl9mbF9lbnRyeSAqZl9saXN0LAorCQkJCSBzdHJ1 Y3QgZHBhYTJfcWRtYV9jb21wICpkcGFhMl9jb21wLAorCQkJCSBib29sIHdydF9jaGFuZ2VkKQor eworCXN0cnVjdCBkcGFhMl9xZG1hX3NkX2QgKnNkZDsKKworCXNkZCA9IChzdHJ1Y3QgZHBhYTJf cWRtYV9zZF9kICopZHBhYTJfY29tcC0+ZGVzY192aXJ0X2FkZHI7CisJbWVtc2V0KHNkZCwgMCwg MiAqIChzaXplb2YoKnNkZCkpKTsKKworCS8qIHNvdXJjZSBkZXNjcmlwdG9yIENNRCAqLworCXNk ZC0+Y21kID0gY3B1X3RvX2xlMzIoUURNQV9TRF9DTURfUkRUVFlQRV9DT0hFUkVOVCk7CisJc2Rk Kys7CisKKwkvKiBkZXN0IGRlc2NyaXB0b3IgQ01EICovCisJaWYgKHdydF9jaGFuZ2VkKQorCQlz ZGQtPmNtZCA9IGNwdV90b19sZTMyKExYMjE2MF9RRE1BX0REX0NNRF9XUlRUWVBFX0NPSEVSRU5U KTsKKwllbHNlCisJCXNkZC0+Y21kID0gY3B1X3RvX2xlMzIoUURNQV9ERF9DTURfV1JUVFlQRV9D T0hFUkVOVCk7CisKKwltZW1zZXQoZl9saXN0LCAwLCBzaXplb2Yoc3RydWN0IGRwYWEyX2ZsX2Vu dHJ5KSk7CisKKwkvKiBmaXJzdCBmcmFtZSBsaXN0IHRvIHNvdXJjZSBkZXNjcmlwdG9yICovCisJ ZHBhYTJfZmxfc2V0X2FkZHIoZl9saXN0LCBkcGFhMl9jb21wLT5kZXNjX2J1c19hZGRyKTsKKwlk cGFhMl9mbF9zZXRfbGVuKGZfbGlzdCwgMHgyMCk7CisJZHBhYTJfZmxfc2V0X2Zvcm1hdChmX2xp c3QsIFFETUFfRkxfRk1UX1NCRiB8IFFETUFfRkxfU0xfTE9ORyk7CisKKwkvKiBieXBhc3MgbWVt b3J5IHRyYW5zbGF0aW9uICovCisJaWYgKHNtbXVfZGlzYWJsZSkKKwkJZl9saXN0LT5icGlkID0g Y3B1X3RvX2xlMTYoUURNQV9GTF9CTVRfRU5BQkxFKTsKK30KKworLyogc291cmNlIGFuZCBkZXN0 aW5hdGlvbiBmcmFtZSBsaXN0ICovCitzdGF0aWMgdm9pZAorZHBhYTJfcWRtYV9wb3B1bGF0ZV9m cmFtZXMoc3RydWN0IGRwYWEyX2ZsX2VudHJ5ICpmX2xpc3QsCisJCQkgICBkbWFfYWRkcl90IGRz dCwgZG1hX2FkZHJfdCBzcmMsCisJCQkgICBzaXplX3QgbGVuLCB1aW50OF90IGZtdCkKK3sKKwkv KiBzb3VyY2UgZnJhbWUgbGlzdCB0byBzb3VyY2UgYnVmZmVyICovCisJbWVtc2V0KGZfbGlzdCwg MCwgc2l6ZW9mKHN0cnVjdCBkcGFhMl9mbF9lbnRyeSkpOworCisJZHBhYTJfZmxfc2V0X2FkZHIo Zl9saXN0LCBzcmMpOworCWRwYWEyX2ZsX3NldF9sZW4oZl9saXN0LCBsZW4pOworCisJLyogc2lu Z2xlIGJ1ZmZlciBmcmFtZSBvciBzY2F0dGVyIGdhdGhlciBmcmFtZSAqLworCWRwYWEyX2ZsX3Nl dF9mb3JtYXQoZl9saXN0LCAoZm10IHwgUURNQV9GTF9TTF9MT05HKSk7CisKKwkvKiBieXBhc3Mg bWVtb3J5IHRyYW5zbGF0aW9uICovCisJaWYgKHNtbXVfZGlzYWJsZSkKKwkJZl9saXN0LT5icGlk ID0gY3B1X3RvX2xlMTYoUURNQV9GTF9CTVRfRU5BQkxFKTsKKworCWZfbGlzdCsrOworCisJLyog ZGVzdGluYXRpb24gZnJhbWUgbGlzdCB0byBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKwltZW1zZXQo Zl9saXN0LCAwLCBzaXplb2Yoc3RydWN0IGRwYWEyX2ZsX2VudHJ5KSk7CisKKwlkcGFhMl9mbF9z ZXRfYWRkcihmX2xpc3QsIGRzdCk7CisJZHBhYTJfZmxfc2V0X2xlbihmX2xpc3QsIGxlbik7CisJ ZHBhYTJfZmxfc2V0X2Zvcm1hdChmX2xpc3QsIChmbXQgfCBRRE1BX0ZMX1NMX0xPTkcpKTsKKwkv KiBzaW5nbGUgYnVmZmVyIGZyYW1lIG9yIHNjYXR0ZXIgZ2F0aGVyIGZyYW1lICovCisJZHBhYTJf Zmxfc2V0X2ZpbmFsKGZfbGlzdCwgUURNQV9GTF9GKTsKKwkvKiBieXBhc3MgbWVtb3J5IHRyYW5z bGF0aW9uICovCisJaWYgKHNtbXVfZGlzYWJsZSkKKwkJZl9saXN0LT5icGlkID0gY3B1X3RvX2xl MTYoUURNQV9GTF9CTVRfRU5BQkxFKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhf ZGVzY3JpcHRvcgorKmRwYWEyX3FkbWFfcHJlcF9tZW1jcHkoc3RydWN0IGRtYV9jaGFuICpjaGFu LCBkbWFfYWRkcl90IGRzdCwKKwkJCWRtYV9hZGRyX3Qgc3JjLCBzaXplX3QgbGVuLCB1bG9uZyBm bGFncykKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFuICpkcGFhMl9jaGFuID0gdG9fZHBhYTJf cWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYTsK KwlzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wICpkcGFhMl9jb21wOworCXN0cnVjdCBkcGFhMl9mbF9l bnRyeSAqZl9saXN0OworCWJvb2wgd3J0X2NoYW5nZWQ7CisJdTMyIGZvcm1hdDsKKworCWRwYWEy X3FkbWEgPSBkcGFhMl9jaGFuLT5xZG1hOworCWRwYWEyX2NvbXAgPSBkcGFhMl9xZG1hX3JlcXVl c3RfZGVzYyhkcGFhMl9jaGFuKTsKKwl3cnRfY2hhbmdlZCA9IChib29sKWRwYWEyX3FkbWEtPnFk bWFfd3J0eXBlX2ZpeHVwOworCisjaWZkZWYgTE9OR19GT1JNQVQKKwlmb3JtYXQgPSBRRE1BX0ZE X0xPTkdfRk9STUFUOworI2Vsc2UKKwlmb3JtYXQgPSBRRE1BX0ZEX1NIT1JUX0ZPUk1BVDsKKyNl bmRpZgorCS8qIHBvcHVsYXRlIEZyYW1lIGRlc2NyaXB0b3IgKi8KKwlkcGFhMl9xZG1hX3BvcHVs YXRlX2ZkKGZvcm1hdCwgZHBhYTJfY29tcCk7CisKKwlmX2xpc3QgPSAoc3RydWN0IGRwYWEyX2Zs X2VudHJ5ICopZHBhYTJfY29tcC0+ZmxfdmlydF9hZGRyOworCisjaWZkZWYgTE9OR19GT1JNQVQK KwkvKiBmaXJzdCBmcmFtZSBsaXN0IGZvciBkZXNjcmlwdG9yIGJ1ZmZlciAobG9nbiBmb3JtYXQp ICovCisJZHBhYTJfcWRtYV9wb3B1bGF0ZV9maXJzdF9mcmFtZWwoZl9saXN0LCBkcGFhMl9jb21w LCB3cnRfY2hhbmdlZCk7CisKKwlmX2xpc3QrKzsKKyNlbmRpZgorCisJZHBhYTJfcWRtYV9wb3B1 bGF0ZV9mcmFtZXMoZl9saXN0LCBkc3QsIHNyYywgbGVuLCBRRE1BX0ZMX0ZNVF9TQkYpOworCisJ cmV0dXJuIHZjaGFuX3R4X3ByZXAoJmRwYWEyX2NoYW4tPnZjaGFuLCAmZHBhYTJfY29tcC0+dmRl c2MsIGZsYWdzKTsKK30KKworc3RhdGljIGVudW0KK2RtYV9zdGF0dXMgZHBhYTJfcWRtYV90eF9z dGF0dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJCWRtYV9jb29raWVfdCBjb29raWUsCisJ CQkJc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlyZXR1cm4gZG1hX2Nvb2tpZV9z dGF0dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgZHBhYTJfcWRt YV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHBhYTJf cWRtYV9jaGFuICpkcGFhMl9jaGFuID0gdG9fZHBhYTJfcWRtYV9jaGFuKGNoYW4pOworCXN0cnVj dCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYSA9IGRwYWEyX2NoYW4tPnFkbWE7CisJc3Ry dWN0IGRwYWEyX3FkbWFfcHJpdiAqcHJpdiA9IGRwYWEyX3FkbWEtPnByaXY7CisJc3RydWN0IGRw YWEyX3FkbWFfY29tcCAqZHBhYTJfY29tcDsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2M7 CisJc3RydWN0IGRwYWEyX2ZkICpmZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHBhYTJfY2hhbi0+cXVldWVfbG9jaywgZmxhZ3MpOwor CXNwaW5fbG9jaygmZHBhYTJfY2hhbi0+dmNoYW4ubG9jayk7CisJaWYgKHZjaGFuX2lzc3VlX3Bl bmRpbmcoJmRwYWEyX2NoYW4tPnZjaGFuKSkgeworCQl2ZGVzYyA9IHZjaGFuX25leHRfZGVzYygm ZHBhYTJfY2hhbi0+dmNoYW4pOworCQlpZiAoIXZkZXNjKQorCQkJZ290byBlcnJfZW5xdWV1ZTsK KwkJZHBhYTJfY29tcCA9IHRvX2ZzbF9xZG1hX2NvbXAodmRlc2MpOworCisJCWZkID0gKHN0cnVj dCBkcGFhMl9mZCAqKWRwYWEyX2NvbXAtPmZkX3ZpcnRfYWRkcjsKKworCQlsaXN0X2RlbCgmdmRl c2MtPm5vZGUpOworCQlsaXN0X2FkZF90YWlsKCZkcGFhMl9jb21wLT5saXN0LCAmZHBhYTJfY2hh bi0+Y29tcF91c2VkKTsKKworCQkvKiBUT0JPOiBwcmlvcml0eSBoYXJkLWNvZGVkIHRvIHplcm8g Ki8KKwkJZXJyID0gZHBhYTJfaW9fc2VydmljZV9lbnF1ZXVlX2ZxKE5VTEwsCisJCQkJcHJpdi0+ dHhfcXVldWVfYXR0clswXS5mcWlkLCBmZCk7CisJCWlmIChlcnIpIHsKKwkJCWxpc3RfZGVsKCZk cGFhMl9jb21wLT5saXN0KTsKKwkJCWxpc3RfYWRkX3RhaWwoJmRwYWEyX2NvbXAtPmxpc3QsCisJ CQkJICAgICAgJmRwYWEyX2NoYW4tPmNvbXBfZnJlZSk7CisJCX0KKwl9CitlcnJfZW5xdWV1ZToK KwlzcGluX3VubG9jaygmZHBhYTJfY2hhbi0+dmNoYW4ubG9jayk7CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZHBhYTJfY2hhbi0+cXVldWVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50 IF9fY29sZCBkcGFhMl9xZG1hX3NldHVwKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpsc19kZXYpCit7 CisJc3RydWN0IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJpbyAqcHByaXY7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJmxzX2Rldi0+ZGV2OworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXY7CisJ dTggcHJpb19kZWYgPSBEUERNQUlfUFJJT19OVU07CisJaW50IGVycjsKKwlpbnQgaTsKKworCXBy aXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5k cHFkbWFfaWQgPSBsc19kZXYtPm9ial9kZXNjLmlkOworCisJLypHZXQgdGhlIGhhbmRsZSBmb3Ig dGhlIERQRE1BSSB0aGlzIGludGVyZmFjZSBpcyBhc3NvY2lhdGUgd2l0aCAqLworCWVyciA9IGRw ZG1haV9vcGVuKHByaXYtPm1jX2lvLCAwLCBwcml2LT5kcHFkbWFfaWQsICZsc19kZXYtPm1jX2hh bmRsZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImRwZG1haV9vcGVuKCkgZmFpbGVk XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGV2X2luZm8oZGV2LCAiT3BlbmVkIGRwZG1haSBv YmplY3Qgc3VjY2Vzc2Z1bGx5XG4iKTsKKworCWVyciA9IGRwZG1haV9nZXRfYXR0cmlidXRlcyhw cml2LT5tY19pbywgMCwgbHNfZGV2LT5tY19oYW5kbGUsCisJCQkJICAgICZwcml2LT5kcGRtYWlf YXR0cik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImRwZG1haV9nZXRfYXR0cmlidXRl cygpIGZhaWxlZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHByaXYtPmRwZG1haV9h dHRyLnZlcnNpb24ubWFqb3IgPiBEUERNQUlfVkVSX01BSk9SKSB7CisJCWRldl9lcnIoZGV2LCAi RFBETUFJIG1ham9yIHZlcnNpb24gbWlzbWF0Y2hcbiIKKwkJCSAgICAgIkZvdW5kICV1LiV1LCBz dXBwb3J0ZWQgdmVyc2lvbiBpcyAldS4ldVxuIiwKKwkJCQlwcml2LT5kcGRtYWlfYXR0ci52ZXJz aW9uLm1ham9yLAorCQkJCXByaXYtPmRwZG1haV9hdHRyLnZlcnNpb24ubWlub3IsCisJCQkJRFBE TUFJX1ZFUl9NQUpPUiwgRFBETUFJX1ZFUl9NSU5PUik7CisJfQorCisJaWYgKHByaXYtPmRwZG1h aV9hdHRyLnZlcnNpb24ubWlub3IgPiBEUERNQUlfVkVSX01JTk9SKSB7CisJCWRldl9lcnIoZGV2 LCAiRFBETUFJIG1pbm9yIHZlcnNpb24gbWlzbWF0Y2hcbiIKKwkJCSAgICAgIkZvdW5kICV1LiV1 LCBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAldS4ldVxuIiwKKwkJCQlwcml2LT5kcGRtYWlfYXR0ci52 ZXJzaW9uLm1ham9yLAorCQkJCXByaXYtPmRwZG1haV9hdHRyLnZlcnNpb24ubWlub3IsCisJCQkJ RFBETUFJX1ZFUl9NQUpPUiwgRFBETUFJX1ZFUl9NSU5PUik7CisJfQorCisJcHJpdi0+bnVtX3Bh aXJzID0gbWluKHByaXYtPmRwZG1haV9hdHRyLm51bV9vZl9wcmlvcml0aWVzLCBwcmlvX2RlZik7 CisJcHByaXYgPSBrY2FsbG9jKHByaXYtPm51bV9wYWlycywgc2l6ZW9mKCpwcHJpdiksIEdGUF9L RVJORUwpOworCWlmICghcHByaXYpIHsKKwkJZGV2X2VycihkZXYsICJremFsbG9jIGZvciBwcHJp diBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXByaXYtPnBwcml2ID0gcHByaXY7CisK Kwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3BhaXJzOyBpKyspIHsKKwkJZXJyID0gZHBkbWFp X2dldF9yeF9xdWV1ZShwcml2LT5tY19pbywgMCwgbHNfZGV2LT5tY19oYW5kbGUsCisJCQkJCSAg aSwgJnByaXYtPnJ4X3F1ZXVlX2F0dHJbaV0pOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRl diwgImRwZG1haV9nZXRfcnhfcXVldWUoKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJ fQorCQlwcHJpdi0+cnNwX2ZxaWQgPSBwcml2LT5yeF9xdWV1ZV9hdHRyW2ldLmZxaWQ7CisKKwkJ ZXJyID0gZHBkbWFpX2dldF90eF9xdWV1ZShwcml2LT5tY19pbywgMCwgbHNfZGV2LT5tY19oYW5k bGUsCisJCQkJCSAgaSwgJnByaXYtPnR4X3F1ZXVlX2F0dHJbaV0pOworCQlpZiAoZXJyKSB7CisJ CQlkZXZfZXJyKGRldiwgImRwZG1haV9nZXRfdHhfcXVldWUoKSBmYWlsZWRcbiIpOworCQkJcmV0 dXJuIGVycjsKKwkJfQorCQlwcHJpdi0+cmVxX2ZxaWQgPSBwcml2LT50eF9xdWV1ZV9hdHRyW2ld LmZxaWQ7CisJCXBwcml2LT5wcmlvID0gaTsKKwkJcHByaXYtPnByaXYgPSBwcml2OworCQlwcHJp disrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcGFhMl9xZG1hX2ZxZGFu X2NiKHN0cnVjdCBkcGFhMl9pb19ub3RpZmljYXRpb25fY3R4ICpjdHgpCit7CisJc3RydWN0IGRw YWEyX3FkbWFfcHJpdl9wZXJfcHJpbyAqcHByaXYgPSBjb250YWluZXJfb2YoY3R4LAorCQkJc3Ry dWN0IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJpbywgbmN0eCk7CisJc3RydWN0IGRwYWEyX3FkbWFf Y29tcCAqZHBhYTJfY29tcCwgKl9jb21wX3RtcDsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2ICpw cml2ID0gcHByaXYtPnByaXY7CisJdTMyIG5fY2hhbnMgPSBwcml2LT5kcGFhMl9xZG1hLT5uX2No YW5zOworCXN0cnVjdCBkcGFhMl9xZG1hX2NoYW4gKnFjaGFuOworCWNvbnN0IHN0cnVjdCBkcGFh Ml9mZCAqZmRfZXE7CisJY29uc3Qgc3RydWN0IGRwYWEyX2ZkICpmZDsKKwlzdHJ1Y3QgZHBhYTJf ZHEgKmRxOworCWludCBpc19sYXN0ID0gMDsKKwlpbnQgZm91bmQ7CisJdTggc3RhdHVzOworCWlu dCBlcnI7CisJaW50IGk7CisKKwlkbyB7CisJCWVyciA9IGRwYWEyX2lvX3NlcnZpY2VfcHVsbF9m cShOVUxMLCBwcHJpdi0+cnNwX2ZxaWQsCisJCQkJCSAgICAgICBwcHJpdi0+c3RvcmUpOworCX0g d2hpbGUgKGVycik7CisKKwl3aGlsZSAoIWlzX2xhc3QpIHsKKwkJZG8geworCQkJZHEgPSBkcGFh Ml9pb19zdG9yZV9uZXh0KHBwcml2LT5zdG9yZSwgJmlzX2xhc3QpOworCQl9IHdoaWxlICghaXNf bGFzdCAmJiAhZHEpOworCQlpZiAoIWRxKSB7CisJCQlkZXZfZXJyKHByaXYtPmRldiwgIkZRSUQg cmV0dXJuZWQgbm8gdmFsaWQgZnJhbWVzIVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q IG9idGFpbiBGRCBhbmQgcHJvY2VzcyB0aGUgZXJyb3IgKi8KKwkJZmQgPSBkcGFhMl9kcV9mZChk cSk7CisKKwkJc3RhdHVzID0gZHBhYTJfZmRfZ2V0X2N0cmwoZmQpICYgMHhmZjsKKwkJaWYgKHN0 YXR1cykKKwkJCWRldl9lcnIocHJpdi0+ZGV2LCAiRkQgZXJyb3Igb2NjdXJyZWRcbiIpOworCQlm b3VuZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuX2NoYW5zOyBpKyspIHsKKwkJCXFjaGFuID0g JnByaXYtPmRwYWEyX3FkbWEtPmNoYW5zW2ldOworCQkJc3Bpbl9sb2NrKCZxY2hhbi0+cXVldWVf bG9jayk7CisJCQlpZiAobGlzdF9lbXB0eSgmcWNoYW4tPmNvbXBfdXNlZCkpIHsKKwkJCQlzcGlu X3VubG9jaygmcWNoYW4tPnF1ZXVlX2xvY2spOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwYWEyX2NvbXAsIF9jb21wX3RtcCwKKwkJCQkJCSAmcWNo YW4tPmNvbXBfdXNlZCwgbGlzdCkgeworCQkJCWZkX2VxID0gKHN0cnVjdCBkcGFhMl9mZCAqKQor CQkJCQlkcGFhMl9jb21wLT5mZF92aXJ0X2FkZHI7CisKKwkJCQlpZiAobGU2NF90b19jcHUoZmRf ZXEtPnNpbXBsZS5hZGRyKSA9PQorCQkJCSAgICBsZTY0X3RvX2NwdShmZC0+c2ltcGxlLmFkZHIp KSB7CisJCQkJCXNwaW5fbG9jaygmcWNoYW4tPnZjaGFuLmxvY2spOworCQkJCQl2Y2hhbl9jb29r aWVfY29tcGxldGUoJgorCQkJCQkJCWRwYWEyX2NvbXAtPnZkZXNjKTsKKwkJCQkJc3Bpbl91bmxv Y2soJnFjaGFuLT52Y2hhbi5sb2NrKTsKKwkJCQkJZm91bmQgPSAxOworCQkJCQlicmVhazsKKwkJ CQl9CisJCQl9CisJCQlzcGluX3VubG9jaygmcWNoYW4tPnF1ZXVlX2xvY2spOworCQkJaWYgKGZv dW5kKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJZHBhYTJfaW9fc2VydmljZV9yZWFybShOVUxM LCBjdHgpOworfQorCitzdGF0aWMgaW50IF9fY29sZCBkcGFhMl9xZG1hX2RwaW9fc2V0dXAoc3Ry dWN0IGRwYWEyX3FkbWFfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2X3Bl cl9wcmlvICpwcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJaW50IGVy ciwgaSwgbnVtOworCisJbnVtID0gcHJpdi0+bnVtX3BhaXJzOworCXBwcml2ID0gcHJpdi0+cHBy aXY7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXBwcml2LT5uY3R4LmlzX2NkYW4g PSAwOworCQlwcHJpdi0+bmN0eC5kZXNpcmVkX2NwdSA9IDE7CisJCXBwcml2LT5uY3R4LmlkID0g cHByaXYtPnJzcF9mcWlkOworCQlwcHJpdi0+bmN0eC5jYiA9IGRwYWEyX3FkbWFfZnFkYW5fY2I7 CisJCWVyciA9IGRwYWEyX2lvX3NlcnZpY2VfcmVnaXN0ZXIoTlVMTCwgJnBwcml2LT5uY3R4KTsK KwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJOb3RpZmljYXRpb24gcmVnaXN0ZXIgZmFp bGVkXG4iKTsKKwkJCWdvdG8gZXJyX3NlcnZpY2U7CisJCX0KKworCQlwcHJpdi0+c3RvcmUgPQor CQkJZHBhYTJfaW9fc3RvcmVfY3JlYXRlKERQQUEyX1FETUFfU1RPUkVfU0laRSwgZGV2KTsKKwkJ aWYgKCFwcHJpdi0+c3RvcmUpIHsKKwkJCWRldl9lcnIoZGV2LCAiZHBhYTJfaW9fc3RvcmVfY3Jl YXRlKCkgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZXJyX3N0b3JlOworCQl9CisKKwkJcHByaXYrKzsK Kwl9CisJcmV0dXJuIDA7CisKK2Vycl9zdG9yZToKKwlkcGFhMl9pb19zZXJ2aWNlX2RlcmVnaXN0 ZXIoTlVMTCwgJnBwcml2LT5uY3R4KTsKK2Vycl9zZXJ2aWNlOgorCXBwcml2LS07CisJd2hpbGUg KHBwcml2ID49IHByaXYtPnBwcml2KSB7CisJCWRwYWEyX2lvX3NlcnZpY2VfZGVyZWdpc3RlcihO VUxMLCAmcHByaXYtPm5jdHgpOworCQlkcGFhMl9pb19zdG9yZV9kZXN0cm95KHBwcml2LT5zdG9y ZSk7CisJCXBwcml2LS07CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZHBhYTJf ZHBtYWlfc3RvcmVfZnJlZShzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2ICpwcml2KQoreworCXN0cnVj dCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8gKnBwcml2ID0gcHJpdi0+cHByaXY7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3BhaXJzOyBpKyspIHsKKwkJZHBhYTJfaW9f c3RvcmVfZGVzdHJveShwcHJpdi0+c3RvcmUpOworCQlwcHJpdisrOworCX0KK30KKworc3RhdGlj IHZvaWQgZHBhYTJfZHBkbWFpX2RwaW9fZnJlZShzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2ICpwcml2 KQoreworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8gKnBwcml2ID0gcHJpdi0+cHBy aXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3BhaXJzOyBpKyspIHsK KwkJZHBhYTJfaW9fc2VydmljZV9kZXJlZ2lzdGVyKE5VTEwsICZwcHJpdi0+bmN0eCk7CisJCXBw cml2Kys7CisJfQorfQorCitzdGF0aWMgaW50IF9fY29sZCBkcGFhMl9kcGRtYWlfYmluZChzdHJ1 Y3QgZHBhYTJfcWRtYV9wcml2ICpwcml2KQoreworCWludCBlcnI7CisJaW50IGksIG51bTsKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IGRwYWEyX3FkbWFfcHJpdl9w ZXJfcHJpbyAqcHByaXY7CisJc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9jZmcgcnhfcXVldWVfY2Zn OworCXN0cnVjdCBmc2xfbWNfZGV2aWNlICpsc19kZXYgPSB0b19mc2xfbWNfZGV2aWNlKGRldik7 CisKKwludW0gPSBwcml2LT5udW1fcGFpcnM7CisJcHByaXYgPSBwcml2LT5wcHJpdjsKKwlmb3Ig KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJcnhfcXVldWVfY2ZnLm9wdGlvbnMgPSBEUERNQUlf UVVFVUVfT1BUX1VTRVJfQ1RYIHwKKwkJCQkJRFBETUFJX1FVRVVFX09QVF9ERVNUOworCQlyeF9x dWV1ZV9jZmcudXNlcl9jdHggPSBwcHJpdi0+bmN0eC5xbWFuNjQ7CisJCXJ4X3F1ZXVlX2NmZy5k ZXN0X2NmZy5kZXN0X3R5cGUgPSBEUERNQUlfREVTVF9EUElPOworCQlyeF9xdWV1ZV9jZmcuZGVz dF9jZmcuZGVzdF9pZCA9IHBwcml2LT5uY3R4LmRwaW9faWQ7CisJCXJ4X3F1ZXVlX2NmZy5kZXN0 X2NmZy5wcmlvcml0eSA9IHBwcml2LT5wcmlvOworCQllcnIgPSBkcGRtYWlfc2V0X3J4X3F1ZXVl KHByaXYtPm1jX2lvLCAwLCBsc19kZXYtPm1jX2hhbmRsZSwKKwkJCQkJICByeF9xdWV1ZV9jZmcu ZGVzdF9jZmcucHJpb3JpdHksCisJCQkJCSAgJnJ4X3F1ZXVlX2NmZyk7CisJCWlmIChlcnIpIHsK KwkJCWRldl9lcnIoZGV2LCAiZHBkbWFpX3NldF9yeF9xdWV1ZSgpIGZhaWxlZFxuIik7CisJCQly ZXR1cm4gZXJyOworCQl9CisKKwkJcHByaXYrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBfX2NvbGQgZHBhYTJfZHBkbWFpX2RwaW9fdW5iaW5kKHN0cnVjdCBkcGFhMl9xZG1h X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBmc2xfbWNfZGV2aWNlICpsc19kZXYgPSB0b19mc2xf bWNfZGV2aWNlKGRldik7CisJc3RydWN0IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJpbyAqcHByaXYg PSBwcml2LT5wcHJpdjsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fcGFpcnM7IGkrKykg eworCQlwcHJpdi0+bmN0eC5xbWFuNjQgPSAwOworCQlwcHJpdi0+bmN0eC5kcGlvX2lkID0gMDsK KwkJcHByaXYrKzsKKwl9CisKKwllcnIgPSBkcGRtYWlfcmVzZXQocHJpdi0+bWNfaW8sIDAsIGxz X2Rldi0+bWNfaGFuZGxlKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGRldiwgImRwZG1haV9yZXNl dCgpIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkcGFhMl9k cGRtYWlfZnJlZV9jb21wKHN0cnVjdCBkcGFhMl9xZG1hX2NoYW4gKnFjaGFuLAorCQkJCSAgIHN0 cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqY29tcF90 bXAsICpfY29tcF90bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcF90bXAsIF9j b21wX3RtcCwKKwkJCQkgaGVhZCwgbGlzdCkgeworCQlkbWFfcG9vbF9mcmVlKHFjaGFuLT5mZF9w b29sLAorCQkJICAgICAgY29tcF90bXAtPmZkX3ZpcnRfYWRkciwKKwkJCSAgICAgIGNvbXBfdG1w LT5mZF9idXNfYWRkcik7CisJCWxpc3RfZGVsKCZjb21wX3RtcC0+bGlzdCk7CisJCWtmcmVlKGNv bXBfdG1wKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwYWEyX2RwZG1haV9mcmVlX2NoYW5uZWxz KHN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYSkKK3sKKwlzdHJ1Y3QgZHBhYTJf cWRtYV9jaGFuICpxY2hhbjsKKwlpbnQgbnVtLCBpOworCisJbnVtID0gZHBhYTJfcWRtYS0+bl9j aGFuczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJcWNoYW4gPSAmZHBhYTJfcWRt YS0+Y2hhbnNbaV07CisJCWRwYWEyX2RwZG1haV9mcmVlX2NvbXAocWNoYW4sICZxY2hhbi0+Y29t cF91c2VkKTsKKwkJZHBhYTJfZHBkbWFpX2ZyZWVfY29tcChxY2hhbiwgJnFjaGFuLT5jb21wX2Zy ZWUpOworCQlkbWFfcG9vbF9kZXN0cm95KHFjaGFuLT5mZF9wb29sKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIGRwYWEyX3FkbWFfZnJlZV9kZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYykK K3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wICpkcGFhMl9jb21wOworCXN0cnVjdCBkcGFhMl9x ZG1hX2NoYW4gKnFjaGFuOworCisJZHBhYTJfY29tcCA9IHRvX2ZzbF9xZG1hX2NvbXAodmRlc2Mp OworCXFjaGFuID0gZHBhYTJfY29tcC0+cWNoYW47CisJbGlzdF9kZWwoJmRwYWEyX2NvbXAtPmxp c3QpOworCWxpc3RfYWRkX3RhaWwoJmRwYWEyX2NvbXAtPmxpc3QsICZxY2hhbi0+Y29tcF9mcmVl KTsKK30KKworc3RhdGljIGludCBkcGFhMl9kcGRtYWlfaW5pdF9jaGFubmVscyhzdHJ1Y3QgZHBh YTJfcWRtYV9lbmdpbmUgKmRwYWEyX3FkbWEpCit7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAq ZHBhYTJfY2hhbjsKKwlpbnQgaTsKKworCUlOSVRfTElTVF9IRUFEKCZkcGFhMl9xZG1hLT5kbWFf ZGV2LmNoYW5uZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHBhYTJfcWRtYS0+bl9jaGFuczsgaSsr KSB7CisJCWRwYWEyX2NoYW4gPSAmZHBhYTJfcWRtYS0+Y2hhbnNbaV07CisJCWRwYWEyX2NoYW4t PnFkbWEgPSBkcGFhMl9xZG1hOworCQlkcGFhMl9jaGFuLT52Y2hhbi5kZXNjX2ZyZWUgPSBkcGFh Ml9xZG1hX2ZyZWVfZGVzYzsKKwkJdmNoYW5faW5pdCgmZHBhYTJfY2hhbi0+dmNoYW4sICZkcGFh Ml9xZG1hLT5kbWFfZGV2KTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRwYWEyX2NoYW4tPnF1ZXVlX2xv Y2spOworCQlJTklUX0xJU1RfSEVBRCgmZHBhYTJfY2hhbi0+Y29tcF91c2VkKTsKKwkJSU5JVF9M SVNUX0hFQUQoJmRwYWEyX2NoYW4tPmNvbXBfZnJlZSk7CisJfQorCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGRwYWEyX3FkbWFfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKmRwZG1haV9k ZXYpCit7CisJc3RydWN0IGRwYWEyX3FkbWFfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmZHBkbWFpX2Rldi0+ZGV2OworCXN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJf cWRtYTsKKwlpbnQgZXJyOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZfc2V0X2RydmRhdGEo ZGV2LCBwcml2KTsKKwlwcml2LT5kcGRtYWlfZGV2ID0gZHBkbWFpX2RldjsKKworCXByaXYtPmlv bW11X2RvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpOworCWlmIChwcml2LT5p b21tdV9kb21haW4pCisJCXNtbXVfZGlzYWJsZSA9IGZhbHNlOworCisJLyogb2J0YWluIGEgTUMg cG9ydGFsICovCisJZXJyID0gZnNsX21jX3BvcnRhbF9hbGxvY2F0ZShkcGRtYWlfZGV2LCAwLCAm cHJpdi0+bWNfaW8pOworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5YSU8pCisJCQllcnIg PSAtRVBST0JFX0RFRkVSOworCQllbHNlCisJCQlkZXZfZXJyKGRldiwgIk1DIHBvcnRhbCBhbGxv Y2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX21jcG9ydGFsOworCX0KKworCS8qIERQRE1B SSBpbml0aWFsaXphdGlvbiAqLworCWVyciA9IGRwYWEyX3FkbWFfc2V0dXAoZHBkbWFpX2Rldik7 CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImRwYWEyX2RwZG1haV9zZXR1cCgpIGZhaWxl ZFxuIik7CisJCWdvdG8gZXJyX2RwZG1haV9zZXR1cDsKKwl9CisKKwkvKiBEUElPICovCisJZXJy ID0gZHBhYTJfcWRtYV9kcGlvX3NldHVwKHByaXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycihk ZXYsICJkcGFhMl9kcGRtYWlfZHBpb19zZXR1cCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2Rw aW9fc2V0dXA7CisJfQorCisJLyogRFBETUFJIGJpbmRpbmcgdG8gRFBJTyAqLworCWVyciA9IGRw YWEyX2RwZG1haV9iaW5kKHByaXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJkcGFh Ml9kcGRtYWlfYmluZCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2JpbmQ7CisJfQorCisJLyog RFBETUFJIGVuYWJsZSAqLworCWVyciA9IGRwZG1haV9lbmFibGUocHJpdi0+bWNfaW8sIDAsIGRw ZG1haV9kZXYtPm1jX2hhbmRsZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImRwZG1h aV9lbmFibGUoKSBmYWlsZVxuIik7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlkcGFhMl9x ZG1hID0ga3phbGxvYyhzaXplb2YoKmRwYWEyX3FkbWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRw YWEyX3FkbWEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZW5nOworCX0KKworCXBy aXYtPmRwYWEyX3FkbWEgPSBkcGFhMl9xZG1hOworCWRwYWEyX3FkbWEtPnByaXYgPSBwcml2Owor CisJZHBhYTJfcWRtYS0+ZGVzY19hbGxvY2F0ZWQgPSAwOworCWRwYWEyX3FkbWEtPm5fY2hhbnMg PSBOVU1fQ0g7CisKKwlkcGFhMl9kcGRtYWlfaW5pdF9jaGFubmVscyhkcGFhMl9xZG1hKTsKKwor CWlmIChzb2NfZGV2aWNlX21hdGNoKHNvY19maXh1cF90dW5pbmcpKQorCQlkcGFhMl9xZG1hLT5x ZG1hX3dydHlwZV9maXh1cCA9IHRydWU7CisJZWxzZQorCQlkcGFhMl9xZG1hLT5xZG1hX3dydHlw ZV9maXh1cCA9IGZhbHNlOworCisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGRwYWEyX3FkbWEt PmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgZHBhYTJfcWRtYS0+ ZG1hX2Rldi5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgZHBhYTJfcWRtYS0+ ZG1hX2Rldi5jYXBfbWFzayk7CisKKwlkcGFhMl9xZG1hLT5kbWFfZGV2LmRldiA9IGRldjsKKwlk cGFhMl9xZG1hLT5kbWFfZGV2LmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9CisJCWRwYWEy X3FkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZHBhYTJfcWRtYS0+ZG1hX2Rldi5kZXZpY2Vf ZnJlZV9jaGFuX3Jlc291cmNlcyA9CisJCWRwYWEyX3FkbWFfZnJlZV9jaGFuX3Jlc291cmNlczsK KwlkcGFhMl9xZG1hLT5kbWFfZGV2LmRldmljZV90eF9zdGF0dXMgPSBkcGFhMl9xZG1hX3R4X3N0 YXR1czsKKwlkcGFhMl9xZG1hLT5kbWFfZGV2LmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBkcGFh Ml9xZG1hX3ByZXBfbWVtY3B5OworCWRwYWEyX3FkbWEtPmRtYV9kZXYuZGV2aWNlX2lzc3VlX3Bl bmRpbmcgPSBkcGFhMl9xZG1hX2lzc3VlX3BlbmRpbmc7CisKKwllcnIgPSBkbWFfYXN5bmNfZGV2 aWNlX3JlZ2lzdGVyKCZkcGFhMl9xZG1hLT5kbWFfZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9l cnIoZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgTlhQIFFETUEgZW5naW5lLlxuIik7CisJCWdvdG8gZXJy X2VuZzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuZzoKKwlkcGRtYWlfZGlzYWJsZShwcml2 LT5tY19pbywgMCwgZHBkbWFpX2Rldi0+bWNfaGFuZGxlKTsKK2Vycl9lbmFibGU6CisJZHBhYTJf ZHBkbWFpX2RwaW9fdW5iaW5kKHByaXYpOworZXJyX2JpbmQ6CisJZHBhYTJfZHBtYWlfc3RvcmVf ZnJlZShwcml2KTsKKwlkcGFhMl9kcGRtYWlfZHBpb19mcmVlKHByaXYpOworZXJyX2RwaW9fc2V0 dXA6CisJZHBkbWFpX2Nsb3NlKHByaXYtPm1jX2lvLCAwLCBkcGRtYWlfZGV2LT5tY19oYW5kbGUp OworZXJyX2RwZG1haV9zZXR1cDoKKwlmc2xfbWNfcG9ydGFsX2ZyZWUocHJpdi0+bWNfaW8pOwor ZXJyX21jcG9ydGFsOgorCWtmcmVlKHByaXYtPnBwcml2KTsKKwlrZnJlZShwcml2KTsKKwlkZXZf c2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRw YWEyX3FkbWFfcmVtb3ZlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICpsc19kZXYpCit7CisJc3RydWN0 IGRldmljZSAqZGV2OworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXY7CisJc3RydWN0IGRw YWEyX3FkbWFfZW5naW5lICpkcGFhMl9xZG1hOworCisJZGV2ID0gJmxzX2Rldi0+ZGV2OworCXBy aXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlkcGFhMl9xZG1hID0gcHJpdi0+ZHBhYTJfcWRt YTsKKworCWRwZG1haV9kaXNhYmxlKHByaXYtPm1jX2lvLCAwLCBsc19kZXYtPm1jX2hhbmRsZSk7 CisJZHBhYTJfZHBkbWFpX2RwaW9fdW5iaW5kKHByaXYpOworCWRwYWEyX2RwbWFpX3N0b3JlX2Zy ZWUocHJpdik7CisJZHBhYTJfZHBkbWFpX2RwaW9fZnJlZShwcml2KTsKKwlkcGRtYWlfY2xvc2Uo cHJpdi0+bWNfaW8sIDAsIGxzX2Rldi0+bWNfaGFuZGxlKTsKKwlmc2xfbWNfcG9ydGFsX2ZyZWUo cHJpdi0+bWNfaW8pOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRwYWEyX2RwZG1h aV9mcmVlX2NoYW5uZWxzKGRwYWEyX3FkbWEpOworCisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lz dGVyKCZkcGFhMl9xZG1hLT5kbWFfZGV2KTsKKwlrZnJlZShwcml2KTsKKwlrZnJlZShkcGFhMl9x ZG1hKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF9tY19kZXZp Y2VfaWQgZHBhYTJfcWRtYV9pZF90YWJsZVtdID0geworCXsKKwkJLnZlbmRvciA9IEZTTF9NQ19W RU5ET1JfRlJFRVNDQUxFLAorCQkub2JqX3R5cGUgPSAiZHBkbWFpIiwKKwl9LAorCXsgLnZlbmRv ciA9IDB4MCB9Cit9OworCitzdGF0aWMgc3RydWN0IGZzbF9tY19kcml2ZXIgZHBhYTJfcWRtYV9k cml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImRwYWEyLXFkbWEiLAorCQkub3du ZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBkcGFhMl9xZG1hX3By b2JlLAorCS5yZW1vdmUJCT0gZHBhYTJfcWRtYV9yZW1vdmUsCisJLm1hdGNoX2lkX3RhYmxlCT0g ZHBhYTJfcWRtYV9pZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHBhYTJfcWRtYV9k cml2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBmc2xfbWNfZHJpdmVyX3JlZ2lzdGVyKCYoZHBh YTJfcWRtYV9kcml2ZXIpKTsKK30KK2xhdGVfaW5pdGNhbGwoZHBhYTJfcWRtYV9kcml2ZXJfaW5p dCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2xfcWRtYV9leGl0KHZvaWQpCit7CisJZnNsX21j X2RyaXZlcl91bnJlZ2lzdGVyKCYoZHBhYTJfcWRtYV9kcml2ZXIpKTsKK30KK21vZHVsZV9leGl0 KGZzbF9xZG1hX2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmZzbC1kcGFhMi1xZG1h Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5YUCBM YXllcnNjYXBlIERQQUEyIHFETUEgZW5naW5lIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5oIGIvZHJpdmVycy9kbWEvZnNsLWRwYWEy LXFkbWEvZHBhYTItcWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNm Y2FkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFh Mi1xZG1hLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCisvKiBDb3B5cmlnaHQgMjAxNC0yMDE4IE5YUCAqLworCisjaWZuZGVmIF9fRFBB QTJfUURNQV9ICisjZGVmaW5lIF9fRFBBQTJfUURNQV9ICisKKyNkZWZpbmUgTE9OR19GT1JNQVQg MQorCisjZGVmaW5lIERQQUEyX1FETUFfU1RPUkVfU0laRSAxNgorI2RlZmluZSBOVU1fQ0ggOAor CitzdHJ1Y3QgZHBhYTJfcWRtYV9zZF9kIHsKKwl1MzIgcnN2OjMyOworCXVuaW9uIHsKKwkJc3Ry dWN0IHsKKwkJCXUzMiBzc2Q6MTI7IC8qIHNvdWNlIHN0cmlkZSBkaXN0YW5jZSAqLworCQkJdTMy IHNzczoxMjsgLyogc291Y2Ugc3RyaWRlIHNpemUgKi8KKwkJCXUzMiByc3YxOjg7CisJCX0gc2Rm OworCQlzdHJ1Y3QgeworCQkJdTMyIGRzZDoxMjsgLyogRGVzdGluYXRpb24gc3RyaWRlIGRpc3Rh bmNlICovCisJCQl1MzIgZHNzOjEyOyAvKiBEZXN0aW5hdGlvbiBzdHJpZGUgc2l6ZSAqLworCQkJ dTMyIHJzdjI6ODsKKwkJfSBkZGY7CisJfSBkZjsKKwl1MzIgcmJwY21kOwkvKiBSb3V0ZS1ieS1w b3J0IGNvbW1hbmQgKi8KKwl1MzIgY21kOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7 CisKKy8qIFNvdXJjZSBkZXNjcmlwdG9yIGNvbW1hbmQgcmVhZCB0cmFuc2FjdGlvbiB0eXBlIGZv ciBSQlA9MDogKi8KKy8qIGNvaGVyZW50IGNvcHkgb2YgY2FjaGVhYmxlIG1lbW9yeSAqLworI2Rl ZmluZSBRRE1BX1NEX0NNRF9SRFRUWVBFX0NPSEVSRU5UICgweGIgPDwgMjgpCisvKiBEZXN0aW5h dGlvbiBkZXNjcmlwdG9yIGNvbW1hbmQgd3JpdGUgdHJhbnNhY3Rpb24gdHlwZSBmb3IgUkJQPTA6 ICovCisvKiBjb2hlcmVudCBjb3B5IG9mIGNhY2hlYWJsZSBtZW1vcnkgKi8KKyNkZWZpbmUgUURN QV9ERF9DTURfV1JUVFlQRV9DT0hFUkVOVCAoMHg2IDw8IDI4KQorI2RlZmluZSBMWDIxNjBfUURN QV9ERF9DTURfV1JUVFlQRV9DT0hFUkVOVCAoMHhiIDw8IDI4KQorCisjZGVmaW5lIFFNQU5fRkRf Rk1UX0VOQUJMRQlCSVQoMCkgLyogZnJhbWUgbGlzdCB0YWJsZSBlbmFibGUgKi8KKyNkZWZpbmUg UU1BTl9GRF9CTVRfRU5BQkxFCUJJVCgxNSkgLyogYnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiAq LworI2RlZmluZSBRTUFOX0ZEX0JNVF9ESVNBQkxFCSgwKSAvKiBieXBhc3MgbWVtb3J5IHRyYW5z bGF0aW9uICovCisjZGVmaW5lIFFNQU5fRkRfU0xfRElTQUJMRQkoMCkgLyogc2hvcnQgbGVuZ3Ro ZSBkaXNhYmxlZCAqLworI2RlZmluZSBRTUFOX0ZEX1NMX0VOQUJMRQlCSVQoMTQpIC8qIHNob3J0 IGxlbmd0aGUgZW5hYmxlZCAqLworCisjZGVmaW5lIFFETUFfRklOQUxfQklUX0RJU0FCTEUJKDAp IC8qIGZpbmFsIGJpdCBkaXNhYmxlICovCisjZGVmaW5lIFFETUFfRklOQUxfQklUX0VOQUJMRQlC SVQoMzEpIC8qIGZpbmFsIGJpdCBlbmFibGUgKi8KKworI2RlZmluZSBRRE1BX0ZEX1NIT1JUX0ZP Uk1BVAlCSVQoMTEpIC8qIHNob3J0IGZvcm1hdCAqLworI2RlZmluZSBRRE1BX0ZEX0xPTkdfRk9S TUFUCSgwKSAvKiBsb25nIGZvcm1hdCAqLworI2RlZmluZSBRRE1BX1NFUl9ESVNBQkxFCSg4KSAv KiBubyBub3RpZmljYXRpb24gKi8KKyNkZWZpbmUgUURNQV9TRVJfQ1RYCQlCSVQoOCkgLyogbm90 aWZpY2F0aW9uIGJ5IEZRRF9DVFhbZnFpZF0gKi8KKyNkZWZpbmUgUURNQV9TRVJfREVTVAkJKDIg PDwgOCkgLyogbm90aWZpY2F0aW9uIGJ5IGRlc3RpbmF0aW9uIGRlc2MgKi8KKyNkZWZpbmUgUURN QV9TRVJfQk9USAkJKDMgPDwgOCkgLyogc29ydWNlIGFuZCBkZXN0IG5vdGlmaWNhdGlvbiAqLwor I2RlZmluZSBRRE1BX0ZEX1NQRl9FTkFMQkUJQklUKDMwKSAvKiBzb3VyY2UgcHJlZmV0Y2ggZW5h YmxlICovCisKKyNkZWZpbmUgUU1BTl9GRF9WQV9FTkFCTEUJQklUKDE0KSAvKiBBZGRyZXNzIHVz ZWQgaXMgdmlydHVhbCBhZGRyZXNzICovCisjZGVmaW5lIFFNQU5fRkRfVkFfRElTQUJMRQkoMCkv KiBBZGRyZXNzIHVzZWQgaXMgYSByZWFsIGFkZHJlc3MgKi8KKy8qIEZsb3cgQ29udGV4dDogNDli aXQgcGh5c2ljYWwgYWRkcmVzcyAqLworI2RlZmluZSBRTUFOX0ZEX0NCTVRfRU5BQkxFCUJJVCgx NSkKKyNkZWZpbmUgUU1BTl9GRF9DQk1UX0RJU0FCTEUJKDApIC8qIEZsb3cgQ29udGV4dDogNjRi aXQgdmlydHVhbCBhZGRyZXNzICovCisjZGVmaW5lIFFNQU5fRkRfU0NfRElTQUJMRQkoMCkgLyog c3Rhc2hpbmcgY29udHJvbCAqLworCisjZGVmaW5lIFFETUFfRkxfRk1UX1NCRgkJKDB4MCkgLyog U2luZ2xlIGJ1ZmZlciBmcmFtZSAqLworI2RlZmluZSBRRE1BX0ZMX0ZNVF9TR0UJCSgweDIpIC8q IFNjYXR0ZXIgZ2F0aGVyIGZyYW1lICovCisjZGVmaW5lIFFETUFfRkxfQk1UX0VOQUJMRQlCSVQo MTUpIC8qIGVuYWJsZSBieXBhc3MgbWVtb3J5IHRyYW5zbGF0aW9uICovCisjZGVmaW5lIFFETUFf RkxfQk1UX0RJU0FCTEUJKDB4MCkgLyogZW5hYmxlIGJ5cGFzcyBtZW1vcnkgdHJhbnNsYXRpb24g Ki8KKyNkZWZpbmUgUURNQV9GTF9TTF9MT05HCQkoMHgwKS8qIGxvbmcgbGVuZ3RoICovCisjZGVm aW5lIFFETUFfRkxfU0xfU0hPUlQJKDB4MSkgLyogc2hvcnQgbGVuZ3RoICovCisjZGVmaW5lIFFE TUFfRkxfRgkJKDB4MSkvKiBsYXN0IGZyYW1lIGxpc3QgYml0ICovCisKKy8qRGVzY3JpcHRpb24g b2YgRnJhbWUgbGlzdCB0YWJsZSBzdHJ1Y3R1cmUqLworc3RydWN0IGRwYWEyX3FkbWFfY2hhbiB7 CisJc3RydWN0IHZpcnRfZG1hX2NoYW4JCXZjaGFuOworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjCQl2 ZGVzYzsKKwllbnVtIGRtYV9zdGF0dXMJCQlzdGF0dXM7CisJc3RydWN0IGRwYWEyX3FkbWFfZW5n aW5lCSpxZG1hOworCisJc3RydWN0IG11dGV4CQkJZHBhYTJfcXVldWVfbXV0ZXg7CisJc3Bpbmxv Y2tfdAkJCXF1ZXVlX2xvY2s7CisJc3RydWN0IGRtYV9wb29sCQkJKmZkX3Bvb2w7CisKKwlzdHJ1 Y3QgbGlzdF9oZWFkCQljb21wX3VzZWQ7CisJc3RydWN0IGxpc3RfaGVhZAkJY29tcF9mcmVlOwor Cit9OworCitzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wIHsKKwlkbWFfYWRkcl90CQlmZF9idXNfYWRk cjsKKwlkbWFfYWRkcl90CQlmbF9idXNfYWRkcjsKKwlkbWFfYWRkcl90CQlkZXNjX2J1c19hZGRy OworCXZvaWQJCQkqZmRfdmlydF9hZGRyOworCXZvaWQJCQkqZmxfdmlydF9hZGRyOworCXZvaWQJ CQkqZGVzY192aXJ0X2FkZHI7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbgkqcWNoYW47CisJc3Ry dWN0IHZpcnRfZG1hX2Rlc2MJdmRlc2M7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworfTsKKwor c3RydWN0IGRwYWEyX3FkbWFfZW5naW5lIHsKKwlzdHJ1Y3QgZG1hX2RldmljZQlkbWFfZGV2Owor CXUzMgkJCW5fY2hhbnM7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbgljaGFuc1tOVU1fQ0hdOwor CWludAkJCXFkbWFfd3J0eXBlX2ZpeHVwOworCWludAkJCWRlc2NfYWxsb2NhdGVkOworCisJc3Ry dWN0IGRwYWEyX3FkbWFfcHJpdiAqcHJpdjsKK307CisKKy8qCisgKiBkcGFhMl9xZG1hX3ByaXYg LSBkcml2ZXIgcHJpdmF0ZSBkYXRhCisgKi8KK3N0cnVjdCBkcGFhMl9xZG1hX3ByaXYgeworCWlu dCBkcHFkbWFfaWQ7CisKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluCSppb21tdV9kb21haW47CisJc3Ry dWN0IGRwZG1haV9hdHRyCWRwZG1haV9hdHRyOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3Ry dWN0IGZzbF9tY19pbwkqbWNfaW87CisJc3RydWN0IGZzbF9tY19kZXZpY2UJKmRwZG1haV9kZXY7 CisJdTgJCQludW1fcGFpcnM7CisKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9lbmdpbmUJKmRwYWEyX3Fk bWE7CisJc3RydWN0IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJpbwkqcHByaXY7CisKKwlzdHJ1Y3Qg ZHBkbWFpX3J4X3F1ZXVlX2F0dHIgcnhfcXVldWVfYXR0cltEUERNQUlfUFJJT19OVU1dOworCXN0 cnVjdCBkcGRtYWlfdHhfcXVldWVfYXR0ciB0eF9xdWV1ZV9hdHRyW0RQRE1BSV9QUklPX05VTV07 Cit9OworCitzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2X3Blcl9wcmlvIHsKKwlpbnQgcmVxX2ZxaWQ7 CisJaW50IHJzcF9mcWlkOworCWludCBwcmlvOworCisJc3RydWN0IGRwYWEyX2lvX3N0b3JlICpz dG9yZTsKKwlzdHJ1Y3QgZHBhYTJfaW9fbm90aWZpY2F0aW9uX2N0eCBuY3R4OworCisJc3RydWN0 IGRwYWEyX3FkbWFfcHJpdiAqcHJpdjsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2RldmljZV9h dHRyaWJ1dGUgc29jX2ZpeHVwX3R1bmluZ1tdID0geworCXsgLmZhbWlseSA9ICJRb3JJUSBMWDIx NjBBIn0sCisJeyB9LAorfTsKKworLyogRkQgcG9vbCBzaXplOiBvbmUgRkQgKyAzIEZyYW1lIGxp c3QgKyAyIHNvdXJjZS9kZXN0aW5hdGlvbiBkZXNjcmlwdG9yICovCisjZGVmaW5lIEZEX1BPT0xf U0laRSAoc2l6ZW9mKHN0cnVjdCBkcGFhMl9mZCkgKyBcCisJCXNpemVvZihzdHJ1Y3QgZHBhYTJf ZmxfZW50cnkpICogMyArIFwKKwkJc2l6ZW9mKHN0cnVjdCBkcGFhMl9xZG1hX3NkX2QpICogMikK Kworc3RhdGljIHZvaWQgZHBhYTJfZHBkbWFpX2ZyZWVfY2hhbm5lbHMoc3RydWN0IGRwYWEyX3Fk bWFfZW5naW5lICpkcGFhMl9xZG1hKTsKK3N0YXRpYyB2b2lkIGRwYWEyX2RwZG1haV9mcmVlX2Nv bXAoc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqcWNoYW4sCisJCQkJICAgc3RydWN0IGxpc3RfaGVh ZCAqaGVhZCk7CisjZW5kaWYgLyogX19EUEFBMl9RRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5jIGIvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFk bWEvZHBkbWFpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1ZjRmNAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5jCkBA IC0wLDAgKzEsNDgzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8g Q29weXJpZ2h0IDIwMTQtMjAxOCBOWFAKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j bHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJmc2xfZHBkbWFpLmgiCisjaW5jbHVkZSAiZnNs X2RwZG1haV9jbWQuaCIKKyNpbmNsdWRlIDxsaW51eC9mc2wvbWMuaD4KKworc3RydWN0IGRwZG1h aV9jbWRfb3BlbiB7CisJX19sZTMyIGRwZG1haV9pZDsKK307CisKK3N0cnVjdCBkcGRtYWlfcnNw X2dldF9hdHRyaWJ1dGVzIHsKKwlfX2xlMzIgaWQ7CisJdTggbnVtX29mX3ByaW9yaXRpZXM7CisJ dTggcGFkMFszXTsKKwlfX2xlMTYgbWFqb3I7CisJX19sZTE2IG1pbm9yOworfTsKKworc3RydWN0 IGRwZG1haV9jbWRfcXVldWUgeworCV9fbGUzMiBkZXN0X2lkOworCXU4IHByaW9yaXR5OworCXU4 IHF1ZXVlOworCXU4IGRlc3RfdHlwZTsKKwl1OCBwYWQ7CisJX19sZTY0IHVzZXJfY3R4OworCXVu aW9uIHsKKwkJX19sZTMyIG9wdGlvbnM7CisJCV9fbGUzMiBmcWlkOworCX07Cit9OworCitzdHJ1 Y3QgZHBkbWFpX3JzcF9nZXRfdHhfcXVldWUgeworCV9fbGU2NCBwYWQ7CisJX19sZTMyIGZxaWQ7 Cit9OworCitpbnQgZHBkbWFpX29wZW4oc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCXUzMiBj bWRfZmxhZ3MsCisJCWludCBkcGRtYWlfaWQsCisJCXUxNiAqdG9rZW4pCit7CisJc3RydWN0IGZz bF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCXN0cnVjdCBkcGRtYWlfY21kX29wZW4gKmNtZF9w YXJhbXM7CisJaW50IGVycjsKKworCS8qIHByZXBhcmUgY29tbWFuZCAqLworCWNtZC5oZWFkZXIg PSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfT1BFTiwKKwkJCQkJICBjbWRfZmxh Z3MsCisJCQkJCSAgMCk7CisKKwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcGRtYWlfY21kX29wZW4g KiljbWQucGFyYW1zOworCWNtZF9wYXJhbXMtPmRwZG1haV9pZCA9IGNwdV90b19sZTMyKGRwZG1h aV9pZCk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29tbWFu ZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJpZXZl IHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwkqdG9rZW4gPSBtY19jbWRfaGRyX3JlYWRfdG9rZW4o JmNtZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcGRtYWlfY2xvc2Uoc3RydWN0IGZzbF9tY19p byAqbWNfaW8sCisJCSB1MzIgY21kX2ZsYWdzLAorCQkgdTE2IHRva2VuKQoreworCXN0cnVjdCBm c2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKworCS8qIHByZXBhcmUgY29tbWFuZCAqLworCWNt ZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfQ0xPU0UsCisJCQkJ CSAgY21kX2ZsYWdzLCB0b2tlbik7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCXJldHVy biBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworfQorCitpbnQgZHBkbWFpX2NyZWF0ZShz dHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJICB1MzIgY21kX2ZsYWdzLAorCQkgIGNvbnN0IHN0 cnVjdCBkcGRtYWlfY2ZnICpjZmcsCisJCSAgdTE2ICp0b2tlbikKK3sKKwlzdHJ1Y3QgZnNsX21j X2NvbW1hbmQgY21kID0geyAwIH07CisJaW50IGVycjsKKworCS8qIHByZXBhcmUgY29tbWFuZCAq LworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfQ1JFQVRF LAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICAwKTsKKwlEUERNQUlfQ01EX0NSRUFURShjbWQs IGNmZyk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29tbWFu ZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJpZXZl IHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwkqdG9rZW4gPSBNQ19DTURfSERSX1JFQURfVE9LRU4o Y21kLmhlYWRlcik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRwZG1haV9kZXN0cm95KHN0cnVj dCBmc2xfbWNfaW8gKm1jX2lvLAorCQkgICB1MzIgY21kX2ZsYWdzLAorCQkgICB1MTYgdG9rZW4p Cit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBj b21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJ RF9ERVNUUk9ZLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisKKwkvKiBzZW5k IGNvbW1hbmQgdG8gbWMqLworCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOwor fQorCitpbnQgZHBkbWFpX2VuYWJsZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJICB1MzIg Y21kX2ZsYWdzLAorCQkgIHUxNiB0b2tlbikKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21k ID0geyAwIH07CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5j b2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX0VOQUJMRSwKKwkJCQkJICBjbWRfZmxhZ3MsCisJ CQkJCSAgdG9rZW4pOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2Vu ZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9kaXNhYmxlKHN0cnVjdCBm c2xfbWNfaW8gKm1jX2lvLAorCQkgICB1MzIgY21kX2ZsYWdzLAorCQkgICB1MTYgdG9rZW4pCit7 CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21t YW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9E SVNBQkxFLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisKKwkvKiBzZW5kIGNv bW1hbmQgdG8gbWMqLworCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworfQor CitpbnQgZHBkbWFpX2lzX2VuYWJsZWQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCSAgICAg IHUzMiBjbWRfZmxhZ3MsCisJCSAgICAgIHUxNiB0b2tlbiwKKwkJICAgICAgaW50ICplbikKK3sK KwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisJaW50IGVycjsKKwkvKiBwcmVw YXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJ X0NNRElEX0lTX0VOQUJMRUQsCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwor CS8qIHNlbmQgY29tbWFuZCB0byBtYyovCisJZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAm Y21kKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogcmV0cmlldmUgcmVzcG9uc2Ug cGFyYW1ldGVycyAqLworCURQRE1BSV9SU1BfSVNfRU5BQkxFRChjbWQsICplbik7CisKKwlyZXR1 cm4gMDsKK30KKworaW50IGRwZG1haV9yZXNldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJ IHUzMiBjbWRfZmxhZ3MsCisJCSB1MTYgdG9rZW4pCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5k IGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1j X2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9SRVNFVCwKKwkJCQkJICBjbWRfZmxhZ3Ms CisJCQkJCSAgdG9rZW4pOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNf c2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9nZXRfaXJxKHN0cnVj dCBmc2xfbWNfaW8gKm1jX2lvLAorCQkgICB1MzIgY21kX2ZsYWdzLAorCQkgICB1MTYgdG9rZW4s CisJCSAgIHU4IGlycV9pbmRleCwKKwkJICAgaW50ICp0eXBlLAorCQkgICBzdHJ1Y3QgZHBkbWFp X2lycV9jZmcJKmlycV9jZmcpCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9 OworCWludCBlcnI7CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNf ZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX0dFVF9JUlEsCisJCQkJCSAgY21kX2ZsYWdz LAorCQkJCQkgIHRva2VuKTsKKwlEUERNQUlfQ01EX0dFVF9JUlEoY21kLCBpcnFfaW5kZXgpOwor CisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwllcnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8s ICZjbWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiByZXRyaWV2ZSByZXNwb25z ZSBwYXJhbWV0ZXJzICovCisJRFBETUFJX1JTUF9HRVRfSVJRKGNtZCwgKnR5cGUsIGlycV9jZmcp OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcGRtYWlfc2V0X2lycShzdHJ1Y3QgZnNsX21jX2lv ICptY19pbywKKwkJICAgdTMyIGNtZF9mbGFncywKKwkJICAgdTE2IHRva2VuLAorCQkgICB1OCBp cnFfaW5kZXgsCisJCSAgIHN0cnVjdCBkcGRtYWlfaXJxX2NmZyAqaXJxX2NmZykKK3sKKwlzdHJ1 Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8K KwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX1NFVF9JUlEs CisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwlEUERNQUlfQ01EX1NFVF9JUlEo Y21kLCBpcnFfaW5kZXgsIGlycV9jZmcpOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwly ZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9nZXRf aXJxX2VuYWJsZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJCSAgdTMyIGNtZF9mbGFncywK KwkJCSAgdTE2IHRva2VuLAorCQkJICB1OCBpcnFfaW5kZXgsCisJCQkgIHU4ICplbikKK3sKKwlz dHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisJaW50IGVycjsKKworCS8qIHByZXBh cmUgY29tbWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlf Q01ESURfR0VUX0lSUV9FTkFCTEUsCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsK KwlEUERNQUlfQ01EX0dFVF9JUlFfRU5BQkxFKGNtZCwgaXJxX2luZGV4KTsKKworCS8qIHNlbmQg Y29tbWFuZCB0byBtYyovCisJZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKKwlp ZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogcmV0cmlldmUgcmVzcG9uc2UgcGFyYW1ldGVy cyAqLworCURQRE1BSV9SU1BfR0VUX0lSUV9FTkFCTEUoY21kLCAqZW4pOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBkcGRtYWlfc2V0X2lycV9lbmFibGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8s CisJCQkgIHUzMiBjbWRfZmxhZ3MsCisJCQkgIHUxNiB0b2tlbiwKKwkJCSAgdTggaXJxX2luZGV4 LAorCQkJICB1OCBlbikKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisK KwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFk ZXIoRFBETUFJX0NNRElEX1NFVF9JUlFfRU5BQkxFLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJ ICB0b2tlbik7CisJRFBETUFJX0NNRF9TRVRfSVJRX0VOQUJMRShjbWQsIGlycV9pbmRleCwgZW4p OworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1j X2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9nZXRfaXJxX21hc2soc3RydWN0IGZzbF9tY19p byAqbWNfaW8sCisJCQl1MzIgY21kX2ZsYWdzLAorCQkJdTE2IHRva2VuLAorCQkJdTggaXJxX2lu ZGV4LAorCQkJdTMyICptYXNrKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAg fTsKKwlpbnQgZXJyOworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1j X2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9HRVRfSVJRX01BU0ssCisJCQkJCSAgY21k X2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwlEUERNQUlfQ01EX0dFVF9JUlFfTUFTSyhjbWQsIGly cV9pbmRleCk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29t bWFuZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJp ZXZlIHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwlEUERNQUlfUlNQX0dFVF9JUlFfTUFTSyhjbWQs ICptYXNrKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHBkbWFpX3NldF9pcnFfbWFzayhzdHJ1 Y3QgZnNsX21jX2lvICptY19pbywKKwkJCXUzMiBjbWRfZmxhZ3MsCisJCQl1MTYgdG9rZW4sCisJ CQl1OCBpcnFfaW5kZXgsCisJCQl1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQg Y21kID0geyAwIH07CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNf ZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX1NFVF9JUlFfTUFTSywKKwkJCQkJICBjbWRf ZmxhZ3MsCisJCQkJCSAgdG9rZW4pOworCURQRE1BSV9DTURfU0VUX0lSUV9NQVNLKGNtZCwgaXJx X2luZGV4LCBtYXNrKTsKKworCS8qIHNlbmQgY29tbWFuZCB0byBtYyovCisJcmV0dXJuIG1jX3Nl bmRfY29tbWFuZChtY19pbywgJmNtZCk7Cit9CisKK2ludCBkcGRtYWlfZ2V0X2lycV9zdGF0dXMo c3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCQkgIHUzMiBjbWRfZmxhZ3MsCisJCQkgIHUxNiB0 b2tlbiwKKwkJCSAgdTggaXJxX2luZGV4LAorCQkJICB1MzIgKnN0YXR1cykKK3sKKwlzdHJ1Y3Qg ZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisJaW50IGVycjsKKworCS8qIHByZXBhcmUgY29t bWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURf R0VUX0lSUV9TVEFUVVMsCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwlEUERN QUlfQ01EX0dFVF9JUlFfU1RBVFVTKGNtZCwgaXJxX2luZGV4LCAqc3RhdHVzKTsKKworCS8qIHNl bmQgY29tbWFuZCB0byBtYyovCisJZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsK KwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogcmV0cmlldmUgcmVzcG9uc2UgcGFyYW1l dGVycyAqLworCURQRE1BSV9SU1BfR0VUX0lSUV9TVEFUVVMoY21kLCAqc3RhdHVzKTsKKworCXJl dHVybiAwOworfQorCitpbnQgZHBkbWFpX2NsZWFyX2lycV9zdGF0dXMoc3RydWN0IGZzbF9tY19p byAqbWNfaW8sCisJCQkgICAgdTMyIGNtZF9mbGFncywKKwkJCSAgICB1MTYgdG9rZW4sCisJCQkg ICAgdTggaXJxX2luZGV4LAorCQkJICAgIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IGZzbF9tY19j b21tYW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRl ciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9DTEVBUl9JUlFfU1RBVFVTLAor CQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisJRFBETUFJX0NNRF9DTEVBUl9JUlFf U1RBVFVTKGNtZCwgaXJxX2luZGV4LCBzdGF0dXMpOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1j Ki8KKwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1h aV9nZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJCSAgdTMyIGNtZF9m bGFncywKKwkJCSAgdTE2IHRva2VuLAorCQkJICBzdHJ1Y3QgZHBkbWFpX2F0dHIgKmF0dHIpCit7 CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCWludCBlcnI7CisJc3RydWN0 IGRwZG1haV9yc3BfZ2V0X2F0dHJpYnV0ZXMgKnJzcF9wYXJhbXM7CisKKwkvKiBwcmVwYXJlIGNv bW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElE X0dFVF9BVFRSLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisKKwkvKiBzZW5k IGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7CisJ aWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJpZXZlIHJlc3BvbnNlIHBhcmFtZXRl cnMgKi8KKwlyc3BfcGFyYW1zID0gKHN0cnVjdCBkcGRtYWlfcnNwX2dldF9hdHRyaWJ1dGVzICop Y21kLnBhcmFtczsKKwlhdHRyLT5pZCA9IGxlMzJfdG9fY3B1KHJzcF9wYXJhbXMtPmlkKTsKKwlh dHRyLT52ZXJzaW9uLm1ham9yID0gbGUxNl90b19jcHUocnNwX3BhcmFtcy0+bWFqb3IpOworCWF0 dHItPnZlcnNpb24ubWlub3IgPSBsZTE2X3RvX2NwdShyc3BfcGFyYW1zLT5taW5vcik7CisJYXR0 ci0+bnVtX29mX3ByaW9yaXRpZXMgPSByc3BfcGFyYW1zLT5udW1fb2ZfcHJpb3JpdGllczsKKwor CXJldHVybiAwOworfQorCitpbnQgZHBkbWFpX3NldF9yeF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lv ICptY19pbywKKwkJCXUzMiBjbWRfZmxhZ3MsCisJCQl1MTYgdG9rZW4sCisJCQl1OCBwcmlvcml0 eSwKKwkJCWNvbnN0IHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnICpjZmcpCit7CisJc3RydWN0 IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCXN0cnVjdCBkcGRtYWlfY21kX3F1ZXVlICpj bWRfcGFyYW1zOworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2Vu Y29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9TRVRfUlhfUVVFVUUsCisJCQkJCSAgY21kX2Zs YWdzLAorCQkJCQkgIHRva2VuKTsKKworCWNtZF9wYXJhbXMgPSAoc3RydWN0IGRwZG1haV9jbWRf cXVldWUgKiljbWQucGFyYW1zOworCWNtZF9wYXJhbXMtPmRlc3RfaWQgPSBjcHVfdG9fbGUzMihj ZmctPmRlc3RfY2ZnLmRlc3RfaWQpOworCWNtZF9wYXJhbXMtPnByaW9yaXR5ID0gY2ZnLT5kZXN0 X2NmZy5wcmlvcml0eTsKKwljbWRfcGFyYW1zLT5xdWV1ZSA9IHByaW9yaXR5OworCWNtZF9wYXJh bXMtPmRlc3RfdHlwZSA9IGNmZy0+ZGVzdF9jZmcuZGVzdF90eXBlOworCWNtZF9wYXJhbXMtPnVz ZXJfY3R4ID0gY3B1X3RvX2xlNjQoY2ZnLT51c2VyX2N0eCk7CisJY21kX3BhcmFtcy0+b3B0aW9u cyA9IGNwdV90b19sZTMyKGNmZy0+b3B0aW9ucyk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMq LworCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworfQorCitpbnQgZHBkbWFp X2dldF9yeF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJCXUzMiBjbWRfZmxhZ3Ms CisJCQl1MTYgdG9rZW4sCisJCQl1OCBwcmlvcml0eSwgc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9h dHRyICphdHRyKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKwlzdHJ1 Y3QgZHBkbWFpX2NtZF9xdWV1ZSAqY21kX3BhcmFtczsKKwlpbnQgZXJyOworCisJLyogcHJlcGFy ZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9D TURJRF9HRVRfUlhfUVVFVUUsCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwor CWNtZF9wYXJhbXMgPSAoc3RydWN0IGRwZG1haV9jbWRfcXVldWUgKiljbWQucGFyYW1zOworCWNt ZF9wYXJhbXMtPnF1ZXVlID0gcHJpb3JpdHk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLwor CWVyciA9IG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCS8qIHJldHJpZXZlIHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwlhdHRyLT5kZXN0 X2NmZy5kZXN0X2lkID0gbGUzMl90b19jcHUoY21kX3BhcmFtcy0+ZGVzdF9pZCk7CisJYXR0ci0+ ZGVzdF9jZmcucHJpb3JpdHkgPSBjbWRfcGFyYW1zLT5wcmlvcml0eTsKKwlhdHRyLT5kZXN0X2Nm Zy5kZXN0X3R5cGUgPSBjbWRfcGFyYW1zLT5kZXN0X3R5cGU7CisJYXR0ci0+dXNlcl9jdHggPSBs ZTY0X3RvX2NwdShjbWRfcGFyYW1zLT51c2VyX2N0eCk7CisJYXR0ci0+ZnFpZCA9IGxlMzJfdG9f Y3B1KGNtZF9wYXJhbXMtPmZxaWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcGRtYWlfZ2V0 X3R4X3F1ZXVlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLAorCQkJdTMyIGNtZF9mbGFncywKKwkJ CXUxNiB0b2tlbiwKKwkJCXU4IHByaW9yaXR5LAorCQkJc3RydWN0IGRwZG1haV90eF9xdWV1ZV9h dHRyICphdHRyKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKwlzdHJ1 Y3QgZHBkbWFpX2NtZF9xdWV1ZSAqY21kX3BhcmFtczsKKwlzdHJ1Y3QgZHBkbWFpX3JzcF9nZXRf dHhfcXVldWUgKnJzcF9wYXJhbXM7CisJaW50IGVycjsKKworCS8qIHByZXBhcmUgY29tbWFuZCAq LworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfR0VUX1RY X1FVRVVFLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisKKwljbWRfcGFyYW1z ID0gKHN0cnVjdCBkcGRtYWlfY21kX3F1ZXVlICopY21kLnBhcmFtczsKKwljbWRfcGFyYW1zLT5x dWV1ZSA9IHByaW9yaXR5OworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwllcnIgPSBtY19z ZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkv KiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovCisKKwlyc3BfcGFyYW1zID0gKHN0cnVj dCBkcGRtYWlfcnNwX2dldF90eF9xdWV1ZSAqKWNtZC5wYXJhbXM7CisJYXR0ci0+ZnFpZCA9IGxl MzJfdG9fY3B1KHJzcF9wYXJhbXMtPmZxaWQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9mc2xfZHBkbWFpLmggYi9kcml2ZXJzL2RtYS9m c2wtZHBhYTItcWRtYS9mc2xfZHBkbWFpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYzhhN2I3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1x ZG1hL2ZzbF9kcGRtYWkuaApAQCAtMCwwICsxLDUyNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KKy8qIENvcHlyaWdodCAyMDE0LTIwMTggTlhQICovCisKKy8qCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogKiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor ICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICogTmVpdGhl ciB0aGUgbmFtZSBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUK KyAqIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzCisgKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVM WSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhh dCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO RCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKyAqLworI2lmbmRlZiBfX0ZTTF9EUERNQUlfSAorI2RlZmluZSBfX0ZTTF9EUERNQUlfSAor CitzdHJ1Y3QgZnNsX21jX2lvOworCisvKiBEYXRhIFBhdGggRE1BIEludGVyZmFjZSBBUEkKKyAq IENvbnRhaW5zIGluaXRpYWxpemF0aW9uIEFQSXMgYW5kIHJ1bnRpbWUgY29udHJvbCBBUElzIGZv ciBEUERNQUkKKyAqLworCisvKiBHZW5lcmFsIERQRE1BSSBtYWNyb3MgKi8KKworLyoqCisgKiBN YXhpbXVtIG51bWJlciBvZiBUeC9SeCBwcmlvcml0aWVzIHBlciBEUERNQUkgb2JqZWN0CisgKi8K KyNkZWZpbmUgRFBETUFJX1BSSU9fTlVNCQkyCisKKy8qKgorICogQWxsIHF1ZXVlcyBjb25zaWRl cmVkOyBzZWUgZHBkbWFpX3NldF9yeF9xdWV1ZSgpCisgKi8KKyNkZWZpbmUgRFBETUFJX0FMTF9R VUVVRVMJKHU4KSgtMSkKKworLyoqCisgKiBkcGRtYWlfb3BlbigpIC0gT3BlbiBhIGNvbnRyb2wg c2Vzc2lvbiBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QKKyAqIEBtY19pbzoJUG9pbnRlciB0byBN QyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUg b3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQGRwZG1haV9pZDoJRFBETUFJIHVuaXF1ZSBJ RAorICogQHRva2VuOglSZXR1cm5lZCB0b2tlbjsgdXNlIGluIHN1YnNlcXVlbnQgQVBJIGNhbGxz CisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBvcGVuIGEgY29udHJvbCBzZXNz aW9uIGZvciBhbgorICogYWxyZWFkeSBjcmVhdGVkIG9iamVjdDsgYW4gb2JqZWN0IG1heSBoYXZl IGJlZW4gZGVjbGFyZWQgaW4KKyAqIHRoZSBEUEwgb3IgYnkgY2FsbGluZyB0aGUgZHBkbWFpX2Ny ZWF0ZSgpIGZ1bmN0aW9uLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdW5pcXVlIGF1dGhl bnRpY2F0aW9uIHRva2VuLAorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpYyBvYmplY3Qg SUQgYW5kIHRoZSBzcGVjaWZpYyBNQworICogcG9ydGFsOyB0aGlzIHRva2VuIG11c3QgYmUgdXNl ZCBpbiBhbGwgc3Vic2VxdWVudCBjb21tYW5kcyBmb3IKKyAqIHRoaXMgc3BlY2lmaWMgb2JqZWN0 LgorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgor ICovCitpbnQgZHBkbWFpX29wZW4oc3RydWN0IGZzbF9tY19pbwkqbWNfaW8sCisJCXUzMgkJY21k X2ZsYWdzLAorCQlpbnQJCQlkcGRtYWlfaWQsCisJCXUxNgkJKnRva2VuKTsKKworLyoqCisgKiBk cGRtYWlfY2xvc2UoKSAtIENsb3NlIHRoZSBjb250cm9sIHNlc3Npb24gb2YgdGhlIG9iamVjdAor ICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxh Z3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9r ZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCwgbm8gZnVydGhlciBvcGVyYXRpb25zIGFyZQorICogYWxsb3dlZCBvbiB0aGUgb2Jq ZWN0IHdpdGhvdXQgb3BlbmluZyBhIG5ldyBjb250cm9sIHNlc3Npb24uCisgKgorICogUmV0dXJu OgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBkcGRtYWlf Y2xvc2Uoc3RydWN0IGZzbF9tY19pbwkqbWNfaW8sCisJCSB1MzIJCWNtZF9mbGFncywKKwkJIHUx NgkJdG9rZW4pOworCisvKioKKyAqIHN0cnVjdCBkcGRtYWlfY2ZnIC0gU3RydWN0dXJlIHJlcHJl c2VudGluZyBEUERNQUkgY29uZmlndXJhdGlvbgorICogQHByaW9yaXRpZXM6IFByaW9yaXRpZXMg Zm9yIHRoZSBETUEgaGFyZHdhcmUgcHJvY2Vzc2luZzsgdmFsaWQgcHJpb3JpdGllcyBhcmUKKyAq CWNvbmZpZ3VyZWQgd2l0aCB2YWx1ZXMgMS04OyB0aGUgZW50cnkgZm9sbG93aW5nIGxhc3QgdmFs aWQgZW50cnkKKyAqCXNob3VsZCBiZSBjb25maWd1cmVkIHdpdGggMAorICovCitzdHJ1Y3QgZHBk bWFpX2NmZyB7CisJdTggcHJpb3JpdGllc1tEUERNQUlfUFJJT19OVU1dOworfTsKKworLyoqCisg KiBkcGRtYWlfY3JlYXRlKCkgLSBDcmVhdGUgdGhlIERQRE1BSSBvYmplY3QKKyAqIEBtY19pbzoJ UG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5k IGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQGNmZzoJQ29uZmlndXJh dGlvbiBzdHJ1Y3R1cmUKKyAqIEB0b2tlbjoJUmV0dXJuZWQgdG9rZW47IHVzZSBpbiBzdWJzZXF1 ZW50IEFQSSBjYWxscworICoKKyAqIENyZWF0ZSB0aGUgRFBETUFJIG9iamVjdCwgYWxsb2NhdGUg cmVxdWlyZWQgcmVzb3VyY2VzIGFuZAorICogcGVyZm9ybSByZXF1aXJlZCBpbml0aWFsaXphdGlv bi4KKyAqCisgKiBUaGUgb2JqZWN0IGNhbiBiZSBjcmVhdGVkIGVpdGhlciBieSBkZWNsYXJpbmcg aXQgaW4gdGhlCisgKiBEUEwgZmlsZSwgb3IgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoK KyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHVuaXF1ZSBhdXRoZW50aWNhdGlvbiB0b2tlbiwK KyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWMgb2JqZWN0IElEIGFuZCB0aGUgc3BlY2lm aWMgTUMKKyAqIHBvcnRhbDsgdGhpcyB0b2tlbiBtdXN0IGJlIHVzZWQgaW4gYWxsIHN1YnNlcXVl bnQgY2FsbHMgdG8KKyAqIHRoaXMgc3BlY2lmaWMgb2JqZWN0LiBGb3Igb2JqZWN0cyB0aGF0IGFy ZSBjcmVhdGVkIHVzaW5nIHRoZQorICogRFBMIGZpbGUsIGNhbGwgZHBkbWFpX29wZW4oKSBmdW5j dGlvbiB0byBnZXQgYW4gYXV0aGVudGljYXRpb24KKyAqIHRva2VuIGZpcnN0LgorICoKKyAqIFJl dHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHBk bWFpX2NyZWF0ZShzdHJ1Y3QgZnNsX21jX2lvCQkqbWNfaW8sCisJCSAgdTMyCQkJY21kX2ZsYWdz LAorCQkgIGNvbnN0IHN0cnVjdCBkcGRtYWlfY2ZnCSpjZmcsCisJCSAgdTE2CQkJKnRva2VuKTsK KworLyoqCisgKiBkcGRtYWlfZGVzdHJveSgpIC0gRGVzdHJveSB0aGUgRFBETUFJIG9iamVjdCBh bmQgcmVsZWFzZSBhbGwgaXRzIHJlc291cmNlcy4KKyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBw b3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3Ig bW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0 CisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UuCisg Ki8KK2ludCBkcGRtYWlfZGVzdHJveShzdHJ1Y3QgZnNsX21jX2lvCSptY19pbywKKwkJICAgdTMy CQljbWRfZmxhZ3MsCisJCSAgIHUxNgkJdG9rZW4pOworCisvKioKKyAqIGRwZG1haV9lbmFibGUo KSAtIEVuYWJsZSB0aGUgRFBETUFJLCBhbGxvdyBzZW5kaW5nIGFuZCByZWNlaXZpbmcgZnJhbWVz LgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRf ZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBA dG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNj ZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRwZG1haV9lbmFibGUoc3RydWN0 IGZzbF9tY19pbwkqbWNfaW8sCisJCSAgdTMyCQljbWRfZmxhZ3MsCisJCSAgdTE2CQl0b2tlbik7 CisKKy8qKgorICogZHBkbWFpX2Rpc2FibGUoKSAtIERpc2FibGUgdGhlIERQRE1BSSwgc3RvcCBz ZW5kaW5nIGFuZCByZWNlaXZpbmcgZnJhbWVzLgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBv cnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBt b3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QK KyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAq LworaW50IGRwZG1haV9kaXNhYmxlKHN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvLAorCQkgICB1MzIJ CWNtZF9mbGFncywKKwkJICAgdTE2CQl0b2tlbik7CisKKy8qKgorICogZHBkbWFpX2lzX2VuYWJs ZWQoKSAtIENoZWNrIGlmIHRoZSBEUERNQUkgaXMgZW5hYmxlZC4KKyAqIEBtY19pbzoJUG9pbnRl ciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdz OyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERN QUkgb2JqZWN0CisgKiBAZW46CQlSZXR1cm5zICcxJyBpZiBvYmplY3QgaXMgZW5hYmxlZDsgJzAn IG90aGVyd2lzZQorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3Ro ZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX2lzX2VuYWJsZWQoc3RydWN0IGZzbF9tY19pbwkqbWNf aW8sCisJCSAgICAgIHUzMgkJY21kX2ZsYWdzLAorCQkgICAgICB1MTYJCXRva2VuLAorCQkgICAg ICBpbnQJCSplbik7CisKKy8qKgorICogZHBkbWFpX3Jlc2V0KCkgLSBSZXNldCB0aGUgRFBETUFJ LCByZXR1cm5zIHRoZSBvYmplY3QgdG8gaW5pdGlhbCBzdGF0ZS4KKyAqIEBtY19pbzoJUG9pbnRl ciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdz OyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERN QUkgb2JqZWN0CisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhl cndpc2UuCisgKi8KK2ludCBkcGRtYWlfcmVzZXQoc3RydWN0IGZzbF9tY19pbwkqbWNfaW8sCisJ CSB1MzIJCWNtZF9mbGFncywKKwkJIHUxNgkJdG9rZW4pOworCisvKioKKyAqIHN0cnVjdCBkcGRt YWlfaXJxX2NmZyAtIElSUSBjb25maWd1cmF0aW9uCisgKiBAYWRkcjoJQWRkcmVzcyB0aGF0IG11 c3QgYmUgd3JpdHRlbiB0byBzaWduYWwgYSBtZXNzYWdlLWJhc2VkIGludGVycnVwdAorICogQHZh bDoJVmFsdWUgdG8gd3JpdGUgaW50byBpcnFfYWRkciBhZGRyZXNzCisgKiBAaXJxX251bTogQSB1 c2VyIGRlZmluZWQgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElSUQorICovCitzdHJ1Y3Qg ZHBkbWFpX2lycV9jZmcgeworCXU2NAlhZGRyOworCXUzMgl2YWw7CisJaW50CQlpcnFfbnVtOwor fTsKKworLyoqCisgKiBkcGRtYWlfc2V0X2lycSgpIC0gU2V0IElSUSBpbmZvcm1hdGlvbiBmb3Ig dGhlIERQRE1BSSB0byB0cmlnZ2VyCisgKiBhbiBpbnRlcnJ1cHQuCisgKiBAbWNfaW86CVBvaW50 ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFn czsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9rZW4gb2YgRFBE TUFJIG9iamVjdAorICogQGlycV9pbmRleDoJSWRlbnRpZmllcyB0aGUgaW50ZXJydXB0IGluZGV4 IHRvIGNvbmZpZ3VyZQorICogQGlycV9jZmc6CUlSUSBjb25maWd1cmF0aW9uCisgKgorICogUmV0 dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBkcGRt YWlfc2V0X2lycShzdHJ1Y3QgZnNsX21jX2lvCQkqbWNfaW8sCisJCSAgIHUzMgkJCWNtZF9mbGFn cywKKwkJICAgdTE2CQkJdG9rZW4sCisJCSAgIHU4CQkJaXJxX2luZGV4LAorCQkgICBzdHJ1Y3Qg ZHBkbWFpX2lycV9jZmcJKmlycV9jZmcpOworCisvKioKKyAqIGRwZG1haV9nZXRfaXJxKCkgLSBH ZXQgSVJRIGluZm9ybWF0aW9uIGZyb20gdGhlIERQRE1BSQorICoKKyAqIEBtY19pbzoJUG9pbnRl ciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdz OyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERN QUkgb2JqZWN0CisgKiBAaXJxX2luZGV4OglUaGUgaW50ZXJydXB0IGluZGV4IHRvIGNvbmZpZ3Vy ZQorICogQHR5cGU6CUludGVycnVwdCB0eXBlOiAwIHJlcHJlc2VudHMgbWVzc2FnZSBpbnRlcnJ1 cHQKKyAqCQl0eXBlIChib3RoIGlycV9hZGRyIGFuZCBpcnFfdmFsIGFyZSB2YWxpZCkKKyAqIEBp cnFfY2ZnOglJUlEgYXR0cmlidXRlcworICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVy cm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX2dldF9pcnEoc3RydWN0IGZzbF9t Y19pbwkJKm1jX2lvLAorCQkgICB1MzIJCQljbWRfZmxhZ3MsCisJCSAgIHUxNgkJCXRva2VuLAor CQkgICB1OAkJCWlycV9pbmRleCwKKwkJICAgaW50CQkJCSp0eXBlLAorCQkgICBzdHJ1Y3QgZHBk bWFpX2lycV9jZmcJKmlycV9jZmcpOworCisvKioKKyAqIGRwZG1haV9zZXRfaXJxX2VuYWJsZSgp IC0gU2V0IG92ZXJhbGwgaW50ZXJydXB0IHN0YXRlLgorICogQG1jX2lvOglQb2ludGVyIHRvIE1D IHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBv ciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9rZW46CQlUb2tlbiBvZiBEUERNQUkgb2Jq ZWN0CisgKiBAaXJxX2luZGV4OglUaGUgaW50ZXJydXB0IGluZGV4IHRvIGNvbmZpZ3VyZQorICog QGVuOgkJCUludGVycnVwdCBzdGF0ZSAtIGVuYWJsZSA9IDEsIGRpc2FibGUgPSAwCisgKgorICog QWxsb3dzIEdQUCBzb2Z0d2FyZSB0byBjb250cm9sIHdoZW4gaW50ZXJydXB0cyBhcmUgZ2VuZXJh dGVkLgorICogRWFjaCBpbnRlcnJ1cHQgY2FuIGhhdmUgdXAgdG8gMzIgY2F1c2VzLiAgVGhlIGVu YWJsZS9kaXNhYmxlIGNvbnRyb2wncyB0aGUKKyAqIG92ZXJhbGwgaW50ZXJydXB0IHN0YXRlLiBp ZiB0aGUgaW50ZXJydXB0IGlzIGRpc2FibGVkIG5vIGNhdXNlcyB3aWxsIGNhdXNlCisgKiBhbiBp bnRlcnJ1cHQKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworaW50IGRwZG1haV9zZXRfaXJxX2VuYWJsZShzdHJ1Y3QgZnNsX21jX2lvCSpt Y19pbywKKwkJCSAgdTMyCQljbWRfZmxhZ3MsCisJCQkgIHUxNgkJdG9rZW4sCisJCQkgIHU4CQlp cnFfaW5kZXgsCisJCQkgIHU4CQllbik7CisKKy8qKgorICogZHBkbWFpX2dldF9pcnFfZW5hYmxl KCkgLSBHZXQgb3ZlcmFsbCBpbnRlcnJ1cHQgc3RhdGUKKyAqIEBtY19pbzoJUG9pbnRlciB0byBN QyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUg b3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOgkJVG9rZW4gb2YgRFBETUFJIG9i amVjdAorICogQGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBjb25maWd1cmUKKyAq IEBlbjoJCQlSZXR1cm5lZCBJbnRlcnJ1cHQgc3RhdGUgLSBlbmFibGUgPSAxLCBkaXNhYmxlID0g MAorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgor ICovCitpbnQgZHBkbWFpX2dldF9pcnFfZW5hYmxlKHN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvLAor CQkJICB1MzIJCWNtZF9mbGFncywKKwkJCSAgdTE2CQl0b2tlbiwKKwkJCSAgdTgJCWlycV9pbmRl eCwKKwkJCSAgdTgJCSplbik7CisKKy8qKgorICogZHBkbWFpX3NldF9pcnFfbWFzaygpIC0gU2V0 IGludGVycnVwdCBtYXNrLgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBv YmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19D TURfRkxBR18nCisgKiBAdG9rZW46CQlUb2tlbiBvZiBEUERNQUkgb2JqZWN0CisgKiBAaXJxX2lu ZGV4OglUaGUgaW50ZXJydXB0IGluZGV4IHRvIGNvbmZpZ3VyZQorICogQG1hc2s6CQlldmVudCBt YXNrIHRvIHRyaWdnZXIgaW50ZXJydXB0OworICoJCQkJZWFjaCBiaXQ6CisgKgkJCQkJMCA9IGln bm9yZSBldmVudAorICoJCQkJCTEgPSBjb25zaWRlciBldmVudCBmb3IgYXNzZXJ0aW5nIElSUQor ICoKKyAqIEV2ZXJ5IGludGVycnVwdCBjYW4gaGF2ZSB1cCB0byAzMiBjYXVzZXMgYW5kIHRoZSBp bnRlcnJ1cHQgbW9kZWwgc3VwcG9ydHMKKyAqIG1hc2tpbmcvdW5tYXNraW5nIGVhY2ggY2F1c2Ug aW5kZXBlbmRlbnRseQorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUg b3RoZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX3NldF9pcnFfbWFzayhzdHJ1Y3QgZnNsX21jX2lv CSptY19pbywKKwkJCXUzMgkJY21kX2ZsYWdzLAorCQkJdTE2CQl0b2tlbiwKKwkJCXU4CQlpcnFf aW5kZXgsCisJCQl1MzIJCW1hc2spOworCisvKioKKyAqIGRwZG1haV9nZXRfaXJxX21hc2soKSAt IEdldCBpbnRlcnJ1cHQgbWFzay4KKyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwncyBJ L08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAn TUNfQ01EX0ZMQUdfJworICogQHRva2VuOgkJVG9rZW4gb2YgRFBETUFJIG9iamVjdAorICogQGly cV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBjb25maWd1cmUKKyAqIEBtYXNrOgkJUmV0 dXJuZWQgZXZlbnQgbWFzayB0byB0cmlnZ2VyIGludGVycnVwdAorICoKKyAqIEV2ZXJ5IGludGVy cnVwdCBjYW4gaGF2ZSB1cCB0byAzMiBjYXVzZXMgYW5kIHRoZSBpbnRlcnJ1cHQgbW9kZWwgc3Vw cG9ydHMKKyAqIG1hc2tpbmcvdW5tYXNraW5nIGVhY2ggY2F1c2UgaW5kZXBlbmRlbnRseQorICoK KyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitp bnQgZHBkbWFpX2dldF9pcnFfbWFzayhzdHJ1Y3QgZnNsX21jX2lvCSptY19pbywKKwkJCXUzMgkJ Y21kX2ZsYWdzLAorCQkJdTE2CQl0b2tlbiwKKwkJCXU4CQlpcnFfaW5kZXgsCisJCQl1MzIJCSpt YXNrKTsKKworLyoqCisgKiBkcGRtYWlfZ2V0X2lycV9zdGF0dXMoKSAtIEdldCB0aGUgY3VycmVu dCBzdGF0dXMgb2YgYW55IHBlbmRpbmcgaW50ZXJydXB0cworICogQG1jX2lvOglQb2ludGVyIHRv IE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9u ZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9rZW46CQlUb2tlbiBvZiBEUERNQUkg b2JqZWN0CisgKiBAaXJxX2luZGV4OglUaGUgaW50ZXJydXB0IGluZGV4IHRvIGNvbmZpZ3VyZQor ICogQHN0YXR1czoJCVJldHVybmVkIGludGVycnVwdHMgc3RhdHVzIC0gb25lIGJpdCBwZXIgY2F1 c2U6CisgKgkJCQkJMCA9IG5vIGludGVycnVwdCBwZW5kaW5nCisgKgkJCQkJMSA9IGludGVycnVw dCBwZW5kaW5nCisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhl cndpc2UuCisgKi8KK2ludCBkcGRtYWlfZ2V0X2lycV9zdGF0dXMoc3RydWN0IGZzbF9tY19pbwkq bWNfaW8sCisJCQkgIHUzMgkJY21kX2ZsYWdzLAorCQkJICB1MTYJCXRva2VuLAorCQkJICB1OAkJ aXJxX2luZGV4LAorCQkJICB1MzIJCSpzdGF0dXMpOworCisvKioKKyAqIGRwZG1haV9jbGVhcl9p cnFfc3RhdHVzKCkgLSBDbGVhciBhIHBlbmRpbmcgaW50ZXJydXB0J3Mgc3RhdHVzCisgKiBAbWNf aW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29t bWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9r ZW4gb2YgRFBETUFJIG9iamVjdAorICogQGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0 byBjb25maWd1cmUKKyAqIEBzdGF0dXM6CWJpdHMgdG8gY2xlYXIgKFcxQykgLSBvbmUgYml0IHBl ciBjYXVzZToKKyAqCQkJMCA9IGRvbid0IGNoYW5nZQorICoJCQkxID0gY2xlYXIgc3RhdHVzIGJp dAorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgor ICovCitpbnQgZHBkbWFpX2NsZWFyX2lycV9zdGF0dXMoc3RydWN0IGZzbF9tY19pbwkqbWNfaW8s CisJCQkgICAgdTMyCQljbWRfZmxhZ3MsCisJCQkgICAgdTE2CQl0b2tlbiwKKwkJCSAgICB1OAkJ aXJxX2luZGV4LAorCQkJICAgIHUzMgkJc3RhdHVzKTsKKworLyoqCisgKiBzdHJ1Y3QgZHBkbWFp X2F0dHIgLSBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIERQRE1BSSBhdHRyaWJ1dGVzCisgKiBAaWQ6 IERQRE1BSSBvYmplY3QgSUQKKyAqIEB2ZXJzaW9uOiBEUERNQUkgdmVyc2lvbgorICogQG51bV9v Zl9wcmlvcml0aWVzOiBudW1iZXIgb2YgcHJpb3JpdGllcworICovCitzdHJ1Y3QgZHBkbWFpX2F0 dHIgeworCWludAlpZDsKKwkvKioKKwkgKiBzdHJ1Y3QgdmVyc2lvbiAtIERQRE1BSSB2ZXJzaW9u CisJICogQG1ham9yOiBEUERNQUkgbWFqb3IgdmVyc2lvbgorCSAqIEBtaW5vcjogRFBETUFJIG1p bm9yIHZlcnNpb24KKwkgKi8KKwlzdHJ1Y3QgeworCQl1MTYgbWFqb3I7CisJCXUxNiBtaW5vcjsK Kwl9IHZlcnNpb247CisJdTggbnVtX29mX3ByaW9yaXRpZXM7Cit9OworCisvKioKKyAqIGRwZG1h aV9nZXRfYXR0cmlidXRlcygpIC0gUmV0cmlldmUgRFBETUFJIGF0dHJpYnV0ZXMuCisgKiBAbWNf aW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29t bWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9r ZW4gb2YgRFBETUFJIG9iamVjdAorICogQGF0dHI6CVJldHVybmVkIG9iamVjdCdzIGF0dHJpYnV0 ZXMKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4K KyAqLworaW50IGRwZG1haV9nZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZnNsX21jX2lvCSptY19pbywK KwkJCSAgdTMyCQljbWRfZmxhZ3MsCisJCQkgIHUxNgkJdG9rZW4sCisJCQkgIHN0cnVjdCBkcGRt YWlfYXR0cgkqYXR0cik7CisKKy8qKgorICogZW51bSBkcGRtYWlfZGVzdCAtIERQRE1BSSBkZXN0 aW5hdGlvbiB0eXBlcworICogQERQRE1BSV9ERVNUX05PTkU6IFVuYXNzaWduZWQgZGVzdGluYXRp b247IFRoZSBxdWV1ZSBpcyBzZXQgaW4gcGFya2VkIG1vZGUKKyAqCWFuZCBkb2VzIG5vdCBnZW5l cmF0ZSBGUURBTiBub3RpZmljYXRpb25zOyB1c2VyIGlzIGV4cGVjdGVkIHRvIGRlcXVldWUKKyAq CWZyb20gdGhlIHF1ZXVlIGJhc2VkIG9uIHBvbGxpbmcgb3Igb3RoZXIgdXNlci1kZWZpbmVkIG1l dGhvZAorICogQERQRE1BSV9ERVNUX0RQSU86IFRoZSBxdWV1ZSBpcyBzZXQgaW4gc2NoZWR1bGUg bW9kZSBhbmQgZ2VuZXJhdGVzIEZRREFOCisgKglub3RpZmljYXRpb25zIHRvIHRoZSBzcGVjaWZp ZWQgRFBJTzsgdXNlciBpcyBleHBlY3RlZCB0byBkZXF1ZXVlCisgKglmcm9tIHRoZSBxdWV1ZSBv bmx5IGFmdGVyIG5vdGlmaWNhdGlvbiBpcyByZWNlaXZlZAorICogQERQRE1BSV9ERVNUX0RQQ09O OiBUaGUgcXVldWUgaXMgc2V0IGluIHNjaGVkdWxlIG1vZGUgYW5kIGRvZXMgbm90IGdlbmVyYXRl CisgKglGUURBTiBub3RpZmljYXRpb25zLCBidXQgaXMgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZp ZWQgRFBDT04gb2JqZWN0OworICoJdXNlciBpcyBleHBlY3RlZCB0byBkZXF1ZXVlIGZyb20gdGhl IERQQ09OIGNoYW5uZWwKKyAqLworZW51bSBkcGRtYWlfZGVzdCB7CisJRFBETUFJX0RFU1RfTk9O RSA9IDAsCisJRFBETUFJX0RFU1RfRFBJTyA9IDEsCisJRFBETUFJX0RFU1RfRFBDT04gPSAyCit9 OworCisvKioKKyAqIHN0cnVjdCBkcGRtYWlfZGVzdF9jZmcgLSBTdHJ1Y3R1cmUgcmVwcmVzZW50 aW5nIERQRE1BSSBkZXN0aW5hdGlvbiBwYXJhbWV0ZXJzCisgKiBAZGVzdF90eXBlOiBEZXN0aW5h dGlvbiB0eXBlCisgKiBAZGVzdF9pZDogRWl0aGVyIERQSU8gSUQgb3IgRFBDT04gSUQsIGRlcGVu ZGluZyBvbiB0aGUgZGVzdGluYXRpb24gdHlwZQorICogQHByaW9yaXR5OiBQcmlvcml0eSBzZWxl Y3Rpb24gd2l0aGluIHRoZSBEUElPIG9yIERQQ09OIGNoYW5uZWw7IHZhbGlkIHZhbHVlcworICoJ YXJlIDAtMSBvciAwLTcsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByaW9yaXRpZXMgaW4g dGhhdAorICoJY2hhbm5lbDsgbm90IHJlbGV2YW50IGZvciAnRFBETUFJX0RFU1RfTk9ORScgb3B0 aW9uCisgKi8KK3N0cnVjdCBkcGRtYWlfZGVzdF9jZmcgeworCWVudW0gZHBkbWFpX2Rlc3QJZGVz dF90eXBlOworCWludAkJCWRlc3RfaWQ7CisJdTgJCXByaW9yaXR5OworfTsKKworLyogRFBETUFJ IHF1ZXVlIG1vZGlmaWNhdGlvbiBvcHRpb25zICovCisKKy8qKgorICogU2VsZWN0IHRvIG1vZGlm eSB0aGUgdXNlcidzIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWV1ZQorICovCisjZGVm aW5lIERQRE1BSV9RVUVVRV9PUFRfVVNFUl9DVFgJMHgwMDAwMDAwMQorCisvKioKKyAqIFNlbGVj dCB0byBtb2RpZnkgdGhlIHF1ZXVlJ3MgZGVzdGluYXRpb24KKyAqLworI2RlZmluZSBEUERNQUlf UVVFVUVfT1BUX0RFU1QJCTB4MDAwMDAwMDIKKworLyoqCisgKiBzdHJ1Y3QgZHBkbWFpX3J4X3F1 ZXVlX2NmZyAtIERQRE1BSSBSWCBxdWV1ZSBjb25maWd1cmF0aW9uCisgKiBAb3B0aW9uczogRmxh Z3MgcmVwcmVzZW50aW5nIHRoZSBzdWdnZXN0ZWQgbW9kaWZpY2F0aW9ucyB0byB0aGUgcXVldWU7 CisgKglVc2UgYW55IGNvbWJpbmF0aW9uIG9mICdEUERNQUlfUVVFVUVfT1BUXzxYPicgZmxhZ3MK KyAqIEB1c2VyX2N0eDogVXNlciBjb250ZXh0IHZhbHVlIHByb3ZpZGVkIGluIHRoZSBmcmFtZSBk ZXNjcmlwdG9yIG9mIGVhY2gKKyAqCWRlcXVldWVkIGZyYW1lOworICoJdmFsaWQgb25seSBpZiAn RFBETUFJX1FVRVVFX09QVF9VU0VSX0NUWCcgaXMgY29udGFpbmVkIGluICdvcHRpb25zJworICog QGRlc3RfY2ZnOiBRdWV1ZSBkZXN0aW5hdGlvbiBwYXJhbWV0ZXJzOworICoJdmFsaWQgb25seSBp ZiAnRFBETUFJX1FVRVVFX09QVF9ERVNUJyBpcyBjb250YWluZWQgaW4gJ29wdGlvbnMnCisgKi8K K3N0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnIHsKKwl1MzIJCW9wdGlvbnM7CisJdTY0CQl1c2Vy X2N0eDsKKwlzdHJ1Y3QgZHBkbWFpX2Rlc3RfY2ZnCWRlc3RfY2ZnOworCit9OworCisvKioKKyAq IGRwZG1haV9zZXRfcnhfcXVldWUoKSAtIFNldCBSeCBxdWV1ZSBjb25maWd1cmF0aW9uCisgKiBA bWNfaW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJ Q29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJ VG9rZW4gb2YgRFBETUFJIG9iamVjdAorICogQHByaW9yaXR5OglTZWxlY3QgdGhlIHF1ZXVlIHJl bGF0aXZlIHRvIG51bWJlciBvZgorICoJCQlwcmlvcml0aWVzIGNvbmZpZ3VyZWQgYXQgRFBETUFJ IGNyZWF0aW9uOyB1c2UKKyAqCQkJRFBETUFJX0FMTF9RVUVVRVMgdG8gY29uZmlndXJlIGFsbCBS eCBxdWV1ZXMKKyAqCQkJaWRlbnRpY2FsbHkuCisgKiBAY2ZnOglSeCBxdWV1ZSBjb25maWd1cmF0 aW9uCisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2Uu CisgKi8KK2ludCBkcGRtYWlfc2V0X3J4X3F1ZXVlKHN0cnVjdCBmc2xfbWNfaW8JCQkqbWNfaW8s CisJCQl1MzIJCQkJY21kX2ZsYWdzLAorCQkJdTE2CQkJCXRva2VuLAorCQkJdTgJCQkJCXByaW9y aXR5LAorCQkJY29uc3Qgc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9jZmcJKmNmZyk7CisKKy8qKgor ICogc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9hdHRyIC0gU3RydWN0dXJlIHJlcHJlc2VudGluZyBh dHRyaWJ1dGVzIG9mIFJ4IHF1ZXVlcworICogQHVzZXJfY3R4OiAgVXNlciBjb250ZXh0IHZhbHVl IHByb3ZpZGVkIGluIHRoZSBmcmFtZSBkZXNjcmlwdG9yIG9mIGVhY2gKKyAqCSBkZXF1ZXVlZCBm cmFtZQorICogQGRlc3RfY2ZnOiBRdWV1ZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uCisgKiBA ZnFpZDogVmlydHVhbCBGUUlEIHZhbHVlIHRvIGJlIHVzZWQgZm9yIGRlcXVldWUgb3BlcmF0aW9u cworICovCitzdHJ1Y3QgZHBkbWFpX3J4X3F1ZXVlX2F0dHIgeworCXU2NAkJdXNlcl9jdHg7CisJ c3RydWN0IGRwZG1haV9kZXN0X2NmZwlkZXN0X2NmZzsKKwl1MzIJCWZxaWQ7Cit9OworCisvKioK KyAqIGRwZG1haV9nZXRfcnhfcXVldWUoKSAtIFJldHJpZXZlIFJ4IHF1ZXVlIGF0dHJpYnV0ZXMu CisgKiBAbWNfaW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9m bGFnczoJQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0 b2tlbjoJVG9rZW4gb2YgRFBETUFJIG9iamVjdAorICogQHByaW9yaXR5OglTZWxlY3QgdGhlIHF1 ZXVlIHJlbGF0aXZlIHRvIG51bWJlciBvZgorICoJCQkJcHJpb3JpdGllcyBjb25maWd1cmVkIGF0 IERQRE1BSSBjcmVhdGlvbgorICogQGF0dHI6CVJldHVybmVkIFJ4IHF1ZXVlIGF0dHJpYnV0ZXMK KyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAq LworaW50IGRwZG1haV9nZXRfcnhfcXVldWUoc3RydWN0IGZzbF9tY19pbwkJKm1jX2lvLAorCQkJ dTMyCQkJY21kX2ZsYWdzLAorCQkJdTE2CQkJdG9rZW4sCisJCQl1OAkJCQlwcmlvcml0eSwKKwkJ CXN0cnVjdCBkcGRtYWlfcnhfcXVldWVfYXR0cgkqYXR0cik7CisKKy8qKgorICogc3RydWN0IGRw ZG1haV90eF9xdWV1ZV9hdHRyIC0gU3RydWN0dXJlIHJlcHJlc2VudGluZyBhdHRyaWJ1dGVzIG9m IFR4IHF1ZXVlcworICogQGZxaWQ6IFZpcnR1YWwgRlFJRCB0byBiZSB1c2VkIGZvciBzZW5kaW5n IGZyYW1lcyB0byBETUEgaGFyZHdhcmUKKyAqLworCitzdHJ1Y3QgZHBkbWFpX3R4X3F1ZXVlX2F0 dHIgeworCXUzMiBmcWlkOworfTsKKworLyoqCisgKiBkcGRtYWlfZ2V0X3R4X3F1ZXVlKCkgLSBS ZXRyaWV2ZSBUeCBxdWV1ZSBhdHRyaWJ1dGVzLgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBv cnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBt b3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QK KyAqIEBwcmlvcml0eToJU2VsZWN0IHRoZSBxdWV1ZSByZWxhdGl2ZSB0byBudW1iZXIgb2YKKyAq CQkJcHJpb3JpdGllcyBjb25maWd1cmVkIGF0IERQRE1BSSBjcmVhdGlvbgorICogQGF0dHI6CVJl dHVybmVkIFR4IHF1ZXVlIGF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNz OyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRwZG1haV9nZXRfdHhfcXVldWUoc3Ry dWN0IGZzbF9tY19pbwkJKm1jX2lvLAorCQkJdTMyCQkJY21kX2ZsYWdzLAorCQkJdTE2CQkJdG9r ZW4sCisJCQl1OAkJCQlwcmlvcml0eSwKKwkJCXN0cnVjdCBkcGRtYWlfdHhfcXVldWVfYXR0cgkq YXR0cik7CisKKyNlbmRpZiAvKiBfX0ZTTF9EUERNQUlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvZnNsLWRwYWEyLXFkbWEvZnNsX2RwZG1haV9jbWQuaCBiL2RyaXZlcnMvZG1hL2ZzbC1k cGFhMi1xZG1hL2ZzbF9kcGRtYWlfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMDcxYTFhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1x ZG1hL2ZzbF9kcGRtYWlfY21kLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgMjAxNC0yMDE4IE5YUCAqLworCisj aWZuZGVmIF9GU0xfRFBETUFJX0NNRF9ICisjZGVmaW5lIF9GU0xfRFBETUFJX0NNRF9ICisKKy8q IERQRE1BSSBWZXJzaW9uICovCisjZGVmaW5lIERQRE1BSV9WRVJfTUFKT1IJCTIKKyNkZWZpbmUg RFBETUFJX1ZFUl9NSU5PUgkJMgorCisjZGVmaW5lIERQRE1BSV9DTURfQkFTRV9WRVJTSU9OCQkw CisjZGVmaW5lIERQRE1BSV9DTURfSURfT0ZGU0VUCQk0CisKKyNkZWZpbmUgRFBETUFJX0NNRElE X0ZPUk1BVCh4KQkJKCgoeCkgPDwgRFBETUFJX0NNRF9JRF9PRkZTRVQpIHwgXAorCQkJCQlEUERN QUlfQ01EX0JBU0VfVkVSU0lPTikKKworLyogQ29tbWFuZCBJRHMgKi8KKyNkZWZpbmUgRFBETUFJ X0NNRElEX0NMT1NFCQlEUERNQUlfQ01ESURfRk9STUFUKDB4ODAwKQorI2RlZmluZSBEUERNQUlf Q01ESURfT1BFTiAgICAgICAgICAgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHg4MEUpCisjZGVm aW5lIERQRE1BSV9DTURJRF9DUkVBVEUgICAgICAgICAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgw eDkwRSkKKyNkZWZpbmUgRFBETUFJX0NNRElEX0RFU1RST1kgICAgICAgICAgICBEUERNQUlfQ01E SURfRk9STUFUKDB4OTAwKQorCisjZGVmaW5lIERQRE1BSV9DTURJRF9FTkFCTEUgICAgICAgICAg ICAgRFBETUFJX0NNRElEX0ZPUk1BVCgweDAwMikKKyNkZWZpbmUgRFBETUFJX0NNRElEX0RJU0FC TEUgICAgICAgICAgICBEUERNQUlfQ01ESURfRk9STUFUKDB4MDAzKQorI2RlZmluZSBEUERNQUlf Q01ESURfR0VUX0FUVFIgICAgICAgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMDQpCisjZGVm aW5lIERQRE1BSV9DTURJRF9SRVNFVCAgICAgICAgICAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgw eDAwNSkKKyNkZWZpbmUgRFBETUFJX0NNRElEX0lTX0VOQUJMRUQgICAgICAgICBEUERNQUlfQ01E SURfRk9STUFUKDB4MDA2KQorCisjZGVmaW5lIERQRE1BSV9DTURJRF9TRVRfSVJRICAgICAgICAg ICAgRFBETUFJX0NNRElEX0ZPUk1BVCgweDAxMCkKKyNkZWZpbmUgRFBETUFJX0NNRElEX0dFVF9J UlEgICAgICAgICAgICBEUERNQUlfQ01ESURfRk9STUFUKDB4MDExKQorI2RlZmluZSBEUERNQUlf Q01ESURfU0VUX0lSUV9FTkFCTEUgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTIpCisjZGVm aW5lIERQRE1BSV9DTURJRF9HRVRfSVJRX0VOQUJMRSAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgw eDAxMykKKyNkZWZpbmUgRFBETUFJX0NNRElEX1NFVF9JUlFfTUFTSyAgICAgICBEUERNQUlfQ01E SURfRk9STUFUKDB4MDE0KQorI2RlZmluZSBEUERNQUlfQ01ESURfR0VUX0lSUV9NQVNLICAgICAg IERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTUpCisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfSVJR X1NUQVRVUyAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgweDAxNikKKyNkZWZpbmUgRFBETUFJX0NN RElEX0NMRUFSX0lSUV9TVEFUVVMJRFBETUFJX0NNRElEX0ZPUk1BVCgweDAxNykKKworI2RlZmlu ZSBEUERNQUlfQ01ESURfU0VUX1JYX1FVRVVFCURQRE1BSV9DTURJRF9GT1JNQVQoMHgxQTApCisj ZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfUlhfUVVFVUUgICAgICAgRFBETUFJX0NNRElEX0ZPUk1B VCgweDFBMSkKKyNkZWZpbmUgRFBETUFJX0NNRElEX0dFVF9UWF9RVUVVRSAgICAgICBEUERNQUlf Q01ESURfRk9STUFUKDB4MUEyKQorCisjZGVmaW5lIE1DX0NNRF9IRFJfVE9LRU5fTyAzMiAgLyog VG9rZW4gZmllbGQgb2Zmc2V0ICovCisjZGVmaW5lIE1DX0NNRF9IRFJfVE9LRU5fUyAxNiAgLyog VG9rZW4gZmllbGQgc2l6ZSAqLworCisjZGVmaW5lIE1BS0VfVU1BU0s2NChfd2lkdGgpIFwKKwko KHU2NCkoKF93aWR0aCkgPCA2NCA/ICgodTY0KTEgPDwgKF93aWR0aCkpIC0gMSA6IFwKKwkodTY0 KS0xKSkgXAorCitzdGF0aWMgaW5saW5lIHU2NCBtY19lbmMoaW50IGxzb2Zmc2V0LCBpbnQgd2lk dGgsIHU2NCB2YWwpCit7CisJcmV0dXJuICh1NjQpKCgodTY0KXZhbCAmIE1BS0VfVU1BU0s2NCh3 aWR0aCkpIDw8IGxzb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1NjQgbWNfZGVjKHU2NCB2 YWwsIGludCBsc29mZnNldCwgaW50IHdpZHRoKQoreworCXJldHVybiAodTY0KSgodmFsID4+IGxz b2Zmc2V0KSAmIE1BS0VfVU1BU0s2NCh3aWR0aCkpOworfQorCisjZGVmaW5lIE1DX0NNRF9PUChf Y21kLCBfcGFyYW0sIF9vZmZzZXQsIF93aWR0aCwgX3R5cGUsIF9hcmcpIFwKKwkoKF9jbWQpLnBh cmFtc1tfcGFyYW1dIHw9IG1jX2VuYygoX29mZnNldCksIChfd2lkdGgpLCBfYXJnKSkKKworI2Rl ZmluZSBNQ19SU1BfT1AoX2NtZCwgX3BhcmFtLCBfb2Zmc2V0LCBfd2lkdGgsIF90eXBlLCBfYXJn KSBcCisJKF9hcmcgPSAoX3R5cGUpbWNfZGVjKF9jbWQucGFyYW1zW19wYXJhbV0sIChfb2Zmc2V0 KSwgKF93aWR0aCkpKQorCisjZGVmaW5lIE1DX0NNRF9IRFJfUkVBRF9UT0tFTihfaGRyKSBcCisJ KCh1MTYpbWNfZGVjKChfaGRyKSwgTUNfQ01EX0hEUl9UT0tFTl9PLCBNQ19DTURfSERSX1RPS0VO X1MpKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBl LCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfQ01EX09QRU4oY21kLCBkcGRtYWlfaWQpIFwK KwlNQ19DTURfT1AoY21kLCAwLCAwLCAgMzIsIGludCwgICAgICBkcGRtYWlfaWQpCisKKy8qICAg ICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICov CisjZGVmaW5lIERQRE1BSV9DTURfQ1JFQVRFKGNtZCwgY2ZnKSBcCitkbyB7IFwKKwlNQ19DTURf T1AoY21kLCAwLCA4LCAgOCwgIHU4LCAgKGNmZyktPnByaW9yaXRpZXNbMF0pO1wKKwlNQ19DTURf T1AoY21kLCAwLCAxNiwgOCwgIHU4LCAgKGNmZyktPnByaW9yaXRpZXNbMV0pO1wKK30gd2hpbGUg KDApCisKKy8qICAgICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUs IGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1BSV9SU1BfSVNfRU5BQkxFRChjbWQsIGVuKSBcCisJ TUNfUlNQX09QKGNtZCwgMCwgMCwgIDEsICBpbnQsCSAgICBlbikKKworLyogICAgICAgICAgICAg ICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUg RFBETUFJX0NNRF9TRVRfSVJRKGNtZCwgaXJxX2luZGV4LCBpcnFfY2ZnKSBcCitkbyB7IFwKKwlN Q19DTURfT1AoY21kLCAwLCAwLCAgOCwgIHU4LCAgaXJxX2luZGV4KTtcCisJTUNfQ01EX09QKGNt ZCwgMCwgMzIsIDMyLCB1MzIsIGlycV9jZmctPnZhbCk7XAorCU1DX0NNRF9PUChjbWQsIDEsIDAs ICA2NCwgdTY0LCBpcnFfY2ZnLT5hZGRyKTtcCisJTUNfQ01EX09QKGNtZCwgMiwgMCwgIDMyLCBp bnQsCSAgICBpcnFfY2ZnLT5pcnFfbnVtKTsgXAorfSB3aGlsZSAoMCkKKworLyogICAgICAgICAg ICAgICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZp bmUgRFBETUFJX0NNRF9HRVRfSVJRKGNtZCwgaXJxX2luZGV4KSBcCisJTUNfQ01EX09QKGNtZCwg MCwgMzIsIDgsICB1OCwgIGlycV9pbmRleCkKKworLyogICAgICAgICAgICAgICAgY21kLCBwYXJh bSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX1JTUF9H RVRfSVJRKGNtZCwgdHlwZSwgaXJxX2NmZykgXAorZG8geyBcCisJTUNfUlNQX09QKGNtZCwgMCwg MCwgIDMyLCB1MzIsIGlycV9jZmctPnZhbCk7IFwKKwlNQ19SU1BfT1AoY21kLCAxLCAwLCAgNjQs IHU2NCwgaXJxX2NmZy0+YWRkcik7XAorCU1DX1JTUF9PUChjbWQsIDIsIDAsICAzMiwgaW50LAkg ICAgaXJxX2NmZy0+aXJxX251bSk7IFwKKwlNQ19SU1BfT1AoY21kLCAyLCAzMiwgMzIsIGludCwJ ICAgIHR5cGUpOyBcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFt LCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfQ01EX1NF VF9JUlFfRU5BQkxFKGNtZCwgaXJxX2luZGV4LCBlbmFibGVfc3RhdGUpIFwKK2RvIHsgXAorCU1D X0NNRF9PUChjbWQsIDAsIDAsICA4LCAgdTgsICBlbmFibGVfc3RhdGUpOyBcCisJTUNfQ01EX09Q KGNtZCwgMCwgMzIsIDgsICB1OCwgIGlycV9pbmRleCk7IFwKK30gd2hpbGUgKDApCisKKy8qICAg ICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICov CisjZGVmaW5lIERQRE1BSV9DTURfR0VUX0lSUV9FTkFCTEUoY21kLCBpcnFfaW5kZXgpIFwKKwlN Q19DTURfT1AoY21kLCAwLCAzMiwgOCwgIHU4LCAgaXJxX2luZGV4KQorCisvKiAgICAgICAgICAg ICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmlu ZSBEUERNQUlfUlNQX0dFVF9JUlFfRU5BQkxFKGNtZCwgZW5hYmxlX3N0YXRlKSBcCisJTUNfUlNQ X09QKGNtZCwgMCwgMCwgIDgsICB1OCwgIGVuYWJsZV9zdGF0ZSkKKworLyogICAgICAgICAgICAg ICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUg RFBETUFJX0NNRF9TRVRfSVJRX01BU0soY21kLCBpcnFfaW5kZXgsIG1hc2spIFwKK2RvIHsgXAor CU1DX0NNRF9PUChjbWQsIDAsIDAsICAzMiwgdTMyLCBtYXNrKTsgXAorCU1DX0NNRF9PUChjbWQs IDAsIDMyLCA4LCAgdTgsICBpcnFfaW5kZXgpOyBcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAg ICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2Rl ZmluZSBEUERNQUlfQ01EX0dFVF9JUlFfTUFTSyhjbWQsIGlycV9pbmRleCkgXAorCU1DX0NNRF9P UChjbWQsIDAsIDMyLCA4LCAgdTgsICBpcnFfaW5kZXgpCisKKy8qICAgICAgICAgICAgICAgIGNt ZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1B SV9SU1BfR0VUX0lSUV9NQVNLKGNtZCwgbWFzaykgXAorCU1DX1JTUF9PUChjbWQsIDAsIDAsICAz MiwgdTMyLCBtYXNrKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdp ZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfQ01EX0dFVF9JUlFfU1RBVFVT KGNtZCwgaXJxX2luZGV4LCBzdGF0dXMpIFwKK2RvIHsgXAorCU1DX0NNRF9PUChjbWQsIDAsIDAs ICAzMiwgdTMyLCBzdGF0dXMpO1wKKwlNQ19DTURfT1AoY21kLCAwLCAzMiwgOCwgIHU4LCAgaXJx X2luZGV4KTtcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBv ZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfUlNQX0dFVF9J UlFfU1RBVFVTKGNtZCwgc3RhdHVzKSBcCisJTUNfUlNQX09QKGNtZCwgMCwgMCwgIDMyLCB1MzIs ICBzdGF0dXMpCisKKy8qICAgICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgs IHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1BSV9DTURfQ0xFQVJfSVJRX1NUQVRVUyhj bWQsIGlycV9pbmRleCwgc3RhdHVzKSBcCitkbyB7IFwKKwlNQ19DTURfT1AoY21kLCAwLCAwLCAg MzIsIHUzMiwgc3RhdHVzKTsgXAorCU1DX0NNRF9PUChjbWQsIDAsIDMyLCA4LCAgdTgsICBpcnFf aW5kZXgpOyBcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBv ZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfUlNQX0dFVF9B VFRSKGNtZCwgYXR0cikgXAorZG8geyBcCisJTUNfUlNQX09QKGNtZCwgMCwgMCwgIDMyLCBpbnQs CShhdHRyKS0+aWQpOyBcCisJTUNfUlNQX09QKGNtZCwgMCwgMzIsICA4LCAgdTgsCShhdHRyKS0+ bnVtX29mX3ByaW9yaXRpZXMpOyBcCisJTUNfUlNQX09QKGNtZCwgMSwgMCwgIDE2LCB1MTYsCShh dHRyKS0+dmVyc2lvbi5tYWpvcik7XAorCU1DX1JTUF9PUChjbWQsIDEsIDE2LCAxNiwgdTE2LAko YXR0ciktPnZlcnNpb24ubWlub3IpO1wKK30gd2hpbGUgKDApCisKKy8qICAgICAgICAgICAgICAg IGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQ RE1BSV9DTURfU0VUX1JYX1FVRVVFKGNtZCwgcHJpb3JpdHksIGNmZykgXAorZG8geyBcCisJTUNf Q01EX09QKGNtZCwgMCwgMCwgIDMyLCBpbnQsCShjZmcpLT5kZXN0X2NmZy5kZXN0X2lkKTsgXAor CU1DX0NNRF9PUChjbWQsIDAsIDMyLCA4LCAgdTgsCShjZmcpLT5kZXN0X2NmZy5wcmlvcml0eSk7 IFwKKwlNQ19DTURfT1AoY21kLCAwLCA0MCwgOCwgIHU4LAlwcmlvcml0eSk7IFwKKwlNQ19DTURf T1AoY21kLCAwLCA0OCwgNCwgIGVudW0gZHBkbWFpX2Rlc3QsIFwKKwkJCShjZmcpLT5kZXN0X2Nm Zy5kZXN0X3R5cGUpOyBcCisJTUNfQ01EX09QKGNtZCwgMSwgMCwgIDY0LCB1NjQsCShjZmcpLT51 c2VyX2N0eCk7IFwKKwlNQ19DTURfT1AoY21kLCAyLCAwLCAgMzIsIHUzMiwJKGNmZyktPm9wdGlv bnMpO1wKK30gd2hpbGUgKDApCisKKy8qICAgICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNl dCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1BSV9DTURfR0VUX1JYX1FV RVVFKGNtZCwgcHJpb3JpdHkpIFwKKwlNQ19DTURfT1AoY21kLCAwLCA0MCwgOCwgIHU4LCAgcHJp b3JpdHkpCisKKy8qICAgICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5 cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1BSV9SU1BfR0VUX1JYX1FVRVVFKGNtZCwgYXR0 cikgXAorZG8geyBcCisJTUNfUlNQX09QKGNtZCwgMCwgMCwgIDMyLCBpbnQsCShhdHRyKS0+ZGVz dF9jZmcuZGVzdF9pZCk7XAorCU1DX1JTUF9PUChjbWQsIDAsIDMyLCA4LCAgdTgsCShhdHRyKS0+ ZGVzdF9jZmcucHJpb3JpdHkpO1wKKwlNQ19SU1BfT1AoY21kLCAwLCA0OCwgNCwgIGVudW0gZHBk bWFpX2Rlc3QsIFwKKwkJCShhdHRyKS0+ZGVzdF9jZmcuZGVzdF90eXBlKTtcCisJTUNfUlNQX09Q KGNtZCwgMSwgMCwgIDY0LCB1NjQsICAoYXR0ciktPnVzZXJfY3R4KTtcCisJTUNfUlNQX09QKGNt ZCwgMiwgMCwgIDMyLCB1MzIsICAoYXR0ciktPmZxaWQpO1wKK30gd2hpbGUgKDApCisKKy8qICAg ICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICov CisjZGVmaW5lIERQRE1BSV9DTURfR0VUX1RYX1FVRVVFKGNtZCwgcHJpb3JpdHkpIFwKKwlNQ19D TURfT1AoY21kLCAwLCA0MCwgOCwgIHU4LCAgcHJpb3JpdHkpCisKKy8qICAgICAgICAgICAgICAg IGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQ RE1BSV9SU1BfR0VUX1RYX1FVRVVFKGNtZCwgYXR0cikgXAorCU1DX1JTUF9PUChjbWQsIDEsIDAs ICAzMiwgdTMyLCAgKGF0dHIpLT5mcWlkKQorCisjZW5kaWYgLyogX0ZTTF9EUERNQUlfQ01EX0gg Ki8K