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: [v2,1/2] dmaengine: fsl-dpaa2-qdma: Add the DPDMAI(Data Path DMA Interface) support From: Peng Ma Message-Id: <20190304091012.9885-1-peng.ma@nxp.com> Date: Mon, 4 Mar 2019 17:10:11 +0800 To: vkoul@kernel.org Cc: dan.j.williams@intel.com, leoyang.li@nxp.com, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, Peng Ma List-ID: VGhlIE1DIGV4cG9ydHMgdGhlIERQRE1BSSBvYmplY3QgYXMgYW4gaW50ZXJmYWNlIHRvIG9wZXJh dGUgdGhlIERQQUEyIFFETUEKRW5naW5lLiBUaGUgRFBETUFJIGVuYWJsZXMgc2VuZGluZyBmcmFt ZS1iYXNlZCByZXF1ZXN0cyB0byBRRE1BIGFuZCByZWNlaXZpbmcKYmFjayBjb25maXJtYXRpb24g cmVzcG9uc2Ugb24gdHJhbnNhY3Rpb24gY29tcGxldGlvbiwgdXRpbGl6aW5nIHRoZSBEUEFBMiBR Qk1hbgppbmZyYXN0cnVjdHVyZS4gRFBETUFJIG9iamVjdCBwcm92aWRlcyB1cCB0byB0d28gcHJp b3JpdGllcyBmb3IgcHJvY2Vzc2luZyBRRE1BCnJlcXVlc3RzLgpUaGUgZm9sbG93aW5nIGxpc3Qg c3VtbWFyaXplcyB0aGUgRFBETUFJIG1haW4gZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllczoKCTEu IFN1cHBvcnRzIHVwIHRvIHR3byBzY2hlZHVsaW5nIHByaW9yaXRpZXMgZm9yIHByb2Nlc3Npbmcg c2VydmljZQoJcmVxdWVzdHMuCgktIEVhY2ggRFBETUFJIHRyYW5zbWl0IHF1ZXVlIGlzIG1hcHBl ZCB0byBvbmUgb2YgdHdvIHNlcnZpY2UgcHJpb3JpdGllcywKCWFsbG93aW5nIGZ1cnRoZXIgcHJp b3JpdGl6YXRpb24gaW4gaGFyZHdhcmUgYmV0d2VlbiByZXF1ZXN0cyBmcm9tCglkaWZmZXJlbnQg RFBETUFJIG9iamVjdHMuCgkyLiBTdXBwb3J0cyB1cCB0byB0d28gcmVjZWl2ZSBxdWV1ZXMgZm9y IGluY29taW5nIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24KCWNvbmZpcm1hdGlvbnMuCgktIEVhY2gg RFBETUFJIHJlY2VpdmUgcXVldWUgaXMgbWFwcGVkIHRvIG9uZSBvZiB0d28gcmVjZWl2ZSBwcmlv cml0aWVzLAoJYWxsb3dpbmcgZnVydGhlciBwcmlvcml0aXphdGlvbiBiZXR3ZWVuIG90aGVyIGlu dGVyZmFjZXMgd2hlbiBhc3NvY2lhdGluZwoJdGhlIERQRE1BSSByZWNlaXZlIHF1ZXVlcyB0byBE UElPIG9yIERQQ09OIG9iamVjdHMuCgkzLiBTdXBwb3J0cyBkaWZmZXJlbnQgc2NoZWR1bGluZyBv cHRpb25zIGZvciBwcm9jZXNzaW5nIHJlY2VpdmVkIHBhY2tldHM6CgktIFF1ZXVlcyBjYW4gYmUg Y29uZmlndXJlZCBlaXRoZXIgaW4gJ3BhcmtlZCcgbW9kZSAoZGVmYXVsdCksIG9hdHRhY2hlZAoJ dG8gYSBEUElPIG9iamVjdCwgb3IgYXR0YWNoZWQgdG8gRFBDT04gb2JqZWN0LgoJNC4gQWxsb3dz IGludGVyYWN0aW9uIHdpdGggb25lIG9yIG1vcmUgRFBJTyBvYmplY3RzIGZvciBkZXF1ZXVlaW5n L2VucXVldWVpbmcKCWZyYW1lIGRlc2NyaXB0b3JzKEZEKSBhbmQgZm9yIGFjcXVpcmluZy9yZWxl YXNpbmcgYnVmZmVycy4KCTUuIFN1cHBvcnRzIGVuYWJsZSwgZGlzYWJsZSwgYW5kIHJlc2V0IG9w ZXJhdGlvbnMuCkFkZCBEUERNQUkgdG8gc3VwcG9ydCBzb21lIHBsYXRmb3JtcyB3aXRoIGRwYWEy IHFkbWEgZW5naW5lLgoKU2lnbmVkLW9mZi1ieTogUGVuZyBNYSA8cGVuZy5tYUBueHAuY29tPgot LS0KY2hhbmdlIGZvciB2MjoKCS0gc3BsaXQgdGhlIHYxIHBhdGNoIHRvIHR3byBwYXRjaHMKCS0g YWRkIGRldGFpbCBjb21tZW50cwoKIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5j ICAgICB8ICA0ODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvZnNs LWRwYWEyLXFkbWEvZHBkbWFpLmggICAgIHwgIDUyNCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGRtYWlfY21kLmggfCAgMTk3ICsr KysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMjA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBk bWFpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGRt YWkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1h aV9jbWQuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5j IGIvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBkbWFpLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNjg1ZWFiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1h L2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5jCkBAIC0wLDAgKzEsNDgzIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IDIwMTQtMjAxOCBOWFAKKworI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJk cGRtYWkuaCIKKyNpbmNsdWRlICJkcGRtYWlfY21kLmgiCisjaW5jbHVkZSA8bGludXgvZnNsL21j Lmg+CisKK3N0cnVjdCBkcGRtYWlfY21kX29wZW4geworCV9fbGUzMiBkcGRtYWlfaWQ7Cit9Owor CitzdHJ1Y3QgZHBkbWFpX3JzcF9nZXRfYXR0cmlidXRlcyB7CisJX19sZTMyIGlkOworCXU4IG51 bV9vZl9wcmlvcml0aWVzOworCXU4IHBhZDBbM107CisJX19sZTE2IG1ham9yOworCV9fbGUxNiBt aW5vcjsKK307CisKK3N0cnVjdCBkcGRtYWlfY21kX3F1ZXVlIHsKKwlfX2xlMzIgZGVzdF9pZDsK Kwl1OCBwcmlvcml0eTsKKwl1OCBxdWV1ZTsKKwl1OCBkZXN0X3R5cGU7CisJdTggcGFkOworCV9f bGU2NCB1c2VyX2N0eDsKKwl1bmlvbiB7CisJCV9fbGUzMiBvcHRpb25zOworCQlfX2xlMzIgZnFp ZDsKKwl9OworfTsKKworc3RydWN0IGRwZG1haV9yc3BfZ2V0X3R4X3F1ZXVlIHsKKwlfX2xlNjQg cGFkOworCV9fbGUzMiBmcWlkOworfTsKKworaW50IGRwZG1haV9vcGVuKHN0cnVjdCBmc2xfbWNf aW8gKm1jX2lvLAorCQl1MzIgY21kX2ZsYWdzLAorCQlpbnQgZHBkbWFpX2lkLAorCQl1MTYgKnRv a2VuKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKwlzdHJ1Y3QgZHBk bWFpX2NtZF9vcGVuICpjbWRfcGFyYW1zOworCWludCBlcnI7CisKKwkvKiBwcmVwYXJlIGNvbW1h bmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX09Q RU4sCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIDApOworCisJY21kX3BhcmFtcyA9IChzdHJ1 Y3QgZHBkbWFpX2NtZF9vcGVuICopY21kLnBhcmFtczsKKwljbWRfcGFyYW1zLT5kcGRtYWlfaWQg PSBjcHVfdG9fbGUzMihkcGRtYWlfaWQpOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwll cnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworCWlmIChlcnIpCisJCXJldHVybiBl cnI7CisKKwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovCisJKnRva2VuID0gbWNf Y21kX2hkcl9yZWFkX3Rva2VuKCZjbWQpOworCXJldHVybiAwOworfQorCitpbnQgZHBkbWFpX2Ns b3NlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLAorCQkgdTMyIGNtZF9mbGFncywKKwkJIHUxNiB0 b2tlbikKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07CisKKwkvKiBwcmVw YXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJ X0NNRElEX0NMT1NFLAorCQkJCQkgIGNtZF9mbGFncywgdG9rZW4pOworCisJLyogc2VuZCBjb21t YW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKK30KKwor aW50IGRwZG1haV9jcmVhdGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCSAgdTMyIGNtZF9m bGFncywKKwkJICBjb25zdCBzdHJ1Y3QgZHBkbWFpX2NmZyAqY2ZnLAorCQkgIHUxNiAqdG9rZW4p Cit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCWludCBlcnI7CisKKwkv KiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIo RFBETUFJX0NNRElEX0NSRUFURSwKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAgMCk7CisJRFBE TUFJX0NNRF9DUkVBVEUoY21kLCBjZmcpOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwll cnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworCWlmIChlcnIpCisJCXJldHVybiBl cnI7CisKKwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovCisJKnRva2VuID0gTUNf Q01EX0hEUl9SRUFEX1RPS0VOKGNtZC5oZWFkZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBk cGRtYWlfZGVzdHJveShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJICAgdTMyIGNtZF9mbGFn cywKKwkJICAgdTE2IHRva2VuKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAg fTsKKworCS8qIHByZXBhcmUgY29tbWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21k X2hlYWRlcihEUERNQUlfQ01ESURfREVTVFJPWSwKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAg dG9rZW4pOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2VuZF9jb21t YW5kKG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9lbmFibGUoc3RydWN0IGZzbF9tY19p byAqbWNfaW8sCisJCSAgdTMyIGNtZF9mbGFncywKKwkJICB1MTYgdG9rZW4pCit7CisJc3RydWN0 IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJ Y21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9FTkFCTEUsCisJ CQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKworCS8qIHNlbmQgY29tbWFuZCB0byBt YyovCisJcmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7Cit9CisKK2ludCBkcGRt YWlfZGlzYWJsZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJICAgdTMyIGNtZF9mbGFncywK KwkJICAgdTE2IHRva2VuKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsK KworCS8qIHByZXBhcmUgY29tbWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hl YWRlcihEUERNQUlfQ01ESURfRElTQUJMRSwKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAgdG9r ZW4pOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2VuZF9jb21tYW5k KG1jX2lvLCAmY21kKTsKK30KKworaW50IGRwZG1haV9pc19lbmFibGVkKHN0cnVjdCBmc2xfbWNf aW8gKm1jX2lvLAorCQkgICAgICB1MzIgY21kX2ZsYWdzLAorCQkgICAgICB1MTYgdG9rZW4sCisJ CSAgICAgIGludCAqZW4pCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9Owor CWludCBlcnI7CisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29k ZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9JU19FTkFCTEVELAorCQkJCQkgIGNtZF9mbGFncywK KwkJCQkJICB0b2tlbik7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3Nl bmRfY29tbWFuZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8q IHJldHJpZXZlIHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwlEUERNQUlfUlNQX0lTX0VOQUJMRUQo Y21kLCAqZW4pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcGRtYWlfcmVzZXQoc3RydWN0IGZz bF9tY19pbyAqbWNfaW8sCisJCSB1MzIgY21kX2ZsYWdzLAorCQkgdTE2IHRva2VuKQoreworCXN0 cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKworCS8qIHByZXBhcmUgY29tbWFuZCAq LworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfUkVTRVQs CisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKworCS8qIHNlbmQgY29tbWFuZCB0 byBtYyovCisJcmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7Cit9CisKK2ludCBk cGRtYWlfZ2V0X2lycShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJICAgdTMyIGNtZF9mbGFn cywKKwkJICAgdTE2IHRva2VuLAorCQkgICB1OCBpcnFfaW5kZXgsCisJCSAgIGludCAqdHlwZSwK KwkJICAgc3RydWN0IGRwZG1haV9pcnFfY2ZnCSppcnFfY2ZnKQoreworCXN0cnVjdCBmc2xfbWNf Y29tbWFuZCBjbWQgPSB7IDAgfTsKKwlpbnQgZXJyOworCisJLyogcHJlcGFyZSBjb21tYW5kICov CisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9HRVRfSVJR LAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisJRFBETUFJX0NNRF9HRVRfSVJR KGNtZCwgaXJxX2luZGV4KTsKKworCS8qIHNlbmQgY29tbWFuZCB0byBtYyovCisJZXJyID0gbWNf c2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ LyogcmV0cmlldmUgcmVzcG9uc2UgcGFyYW1ldGVycyAqLworCURQRE1BSV9SU1BfR0VUX0lSUShj bWQsICp0eXBlLCBpcnFfY2ZnKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHBkbWFpX3NldF9p cnEoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCSAgIHUzMiBjbWRfZmxhZ3MsCisJCSAgIHUx NiB0b2tlbiwKKwkJICAgdTggaXJxX2luZGV4LAorCQkgICBzdHJ1Y3QgZHBkbWFpX2lycV9jZmcg KmlycV9jZmcpCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCisJLyog cHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQ RE1BSV9DTURJRF9TRVRfSVJRLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisJ RFBETUFJX0NNRF9TRVRfSVJRKGNtZCwgaXJxX2luZGV4LCBpcnFfY2ZnKTsKKworCS8qIHNlbmQg Y29tbWFuZCB0byBtYyovCisJcmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7Cit9 CisKK2ludCBkcGRtYWlfZ2V0X2lycV9lbmFibGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJ CQkgIHUzMiBjbWRfZmxhZ3MsCisJCQkgIHUxNiB0b2tlbiwKKwkJCSAgdTggaXJxX2luZGV4LAor CQkJICB1OCAqZW4pCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCWlu dCBlcnI7CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2Rl X2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX0dFVF9JUlFfRU5BQkxFLAorCQkJCQkgIGNtZF9mbGFn cywKKwkJCQkJICB0b2tlbik7CisJRFBETUFJX0NNRF9HRVRfSVJRX0VOQUJMRShjbWQsIGlycV9p bmRleCk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29tbWFu ZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJpZXZl IHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwlEUERNQUlfUlNQX0dFVF9JUlFfRU5BQkxFKGNtZCwg KmVuKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHBkbWFpX3NldF9pcnFfZW5hYmxlKHN0cnVj dCBmc2xfbWNfaW8gKm1jX2lvLAorCQkJICB1MzIgY21kX2ZsYWdzLAorCQkJICB1MTYgdG9rZW4s CisJCQkgIHU4IGlycV9pbmRleCwKKwkJCSAgdTggZW4pCit7CisJc3RydWN0IGZzbF9tY19jb21t YW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9 IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9TRVRfSVJRX0VOQUJMRSwKKwkJCQkJ ICBjbWRfZmxhZ3MsCisJCQkJCSAgdG9rZW4pOworCURQRE1BSV9DTURfU0VUX0lSUV9FTkFCTEUo Y21kLCBpcnFfaW5kZXgsIGVuKTsKKworCS8qIHNlbmQgY29tbWFuZCB0byBtYyovCisJcmV0dXJu IG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNtZCk7Cit9CisKK2ludCBkcGRtYWlfZ2V0X2lycV9t YXNrKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLAorCQkJdTMyIGNtZF9mbGFncywKKwkJCXUxNiB0 b2tlbiwKKwkJCXU4IGlycV9pbmRleCwKKwkJCXUzMiAqbWFzaykKK3sKKwlzdHJ1Y3QgZnNsX21j X2NvbW1hbmQgY21kID0geyAwIH07CisJaW50IGVycjsKKworCS8qIHByZXBhcmUgY29tbWFuZCAq LworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfR0VUX0lS UV9NQVNLLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisJRFBETUFJX0NNRF9H RVRfSVJRX01BU0soY21kLCBpcnFfaW5kZXgpOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8K KwllcnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworCWlmIChlcnIpCisJCXJldHVy biBlcnI7CisKKwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovCisJRFBETUFJX1JT UF9HRVRfSVJRX01BU0soY21kLCAqbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRwZG1h aV9zZXRfaXJxX21hc2soc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCQl1MzIgY21kX2ZsYWdz LAorCQkJdTE2IHRva2VuLAorCQkJdTggaXJxX2luZGV4LAorCQkJdTMyIG1hc2spCit7CisJc3Ry dWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCisJLyogcHJlcGFyZSBjb21tYW5kICov CisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9TRVRfSVJR X01BU0ssCisJCQkJCSAgY21kX2ZsYWdzLAorCQkJCQkgIHRva2VuKTsKKwlEUERNQUlfQ01EX1NF VF9JUlFfTUFTSyhjbWQsIGlycV9pbmRleCwgbWFzayk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8g bWMqLworCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOworfQorCitpbnQgZHBk bWFpX2dldF9pcnFfc3RhdHVzKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLAorCQkJICB1MzIgY21k X2ZsYWdzLAorCQkJICB1MTYgdG9rZW4sCisJCQkgIHU4IGlycV9pbmRleCwKKwkJCSAgdTMyICpz dGF0dXMpCit7CisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9OworCWludCBlcnI7 CisKKwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9o ZWFkZXIoRFBETUFJX0NNRElEX0dFVF9JUlFfU1RBVFVTLAorCQkJCQkgIGNtZF9mbGFncywKKwkJ CQkJICB0b2tlbik7CisJRFBETUFJX0NNRF9HRVRfSVJRX1NUQVRVUyhjbWQsIGlycV9pbmRleCwg KnN0YXR1cyk7CisKKwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLworCWVyciA9IG1jX3NlbmRfY29t bWFuZChtY19pbywgJmNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJldHJp ZXZlIHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8KKwlEUERNQUlfUlNQX0dFVF9JUlFfU1RBVFVTKGNt ZCwgKnN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRwZG1haV9jbGVhcl9pcnFfc3Rh dHVzKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLAorCQkJICAgIHUzMiBjbWRfZmxhZ3MsCisJCQkg ICAgdTE2IHRva2VuLAorCQkJICAgIHU4IGlycV9pbmRleCwKKwkJCSAgICB1MzIgc3RhdHVzKQor eworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKworCS8qIHByZXBhcmUgY29t bWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURf Q0xFQVJfSVJRX1NUQVRVUywKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAgdG9rZW4pOworCURQ RE1BSV9DTURfQ0xFQVJfSVJRX1NUQVRVUyhjbWQsIGlycV9pbmRleCwgc3RhdHVzKTsKKworCS8q IHNlbmQgY29tbWFuZCB0byBtYyovCisJcmV0dXJuIG1jX3NlbmRfY29tbWFuZChtY19pbywgJmNt ZCk7Cit9CisKK2ludCBkcGRtYWlfZ2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZzbF9tY19pbyAqbWNf aW8sCisJCQkgIHUzMiBjbWRfZmxhZ3MsCisJCQkgIHUxNiB0b2tlbiwKKwkJCSAgc3RydWN0IGRw ZG1haV9hdHRyICphdHRyKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsK KwlpbnQgZXJyOworCXN0cnVjdCBkcGRtYWlfcnNwX2dldF9hdHRyaWJ1dGVzICpyc3BfcGFyYW1z OworCisJLyogcHJlcGFyZSBjb21tYW5kICovCisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRf aGVhZGVyKERQRE1BSV9DTURJRF9HRVRfQVRUUiwKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAg dG9rZW4pOworCisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8KKwllcnIgPSBtY19zZW5kX2NvbW1h bmQobWNfaW8sICZjbWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiByZXRyaWV2 ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovCisJcnNwX3BhcmFtcyA9IChzdHJ1Y3QgZHBkbWFpX3Jz cF9nZXRfYXR0cmlidXRlcyAqKWNtZC5wYXJhbXM7CisJYXR0ci0+aWQgPSBsZTMyX3RvX2NwdShy c3BfcGFyYW1zLT5pZCk7CisJYXR0ci0+dmVyc2lvbi5tYWpvciA9IGxlMTZfdG9fY3B1KHJzcF9w YXJhbXMtPm1ham9yKTsKKwlhdHRyLT52ZXJzaW9uLm1pbm9yID0gbGUxNl90b19jcHUocnNwX3Bh cmFtcy0+bWlub3IpOworCWF0dHItPm51bV9vZl9wcmlvcml0aWVzID0gcnNwX3BhcmFtcy0+bnVt X29mX3ByaW9yaXRpZXM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRwZG1haV9zZXRfcnhfcXVl dWUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sCisJCQl1MzIgY21kX2ZsYWdzLAorCQkJdTE2IHRv a2VuLAorCQkJdTggcHJpb3JpdHksCisJCQljb25zdCBzdHJ1Y3QgZHBkbWFpX3J4X3F1ZXVlX2Nm ZyAqY2ZnKQoreworCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsKKwlzdHJ1Y3Qg ZHBkbWFpX2NtZF9xdWV1ZSAqY21kX3BhcmFtczsKKworCS8qIHByZXBhcmUgY29tbWFuZCAqLwor CWNtZC5oZWFkZXIgPSBtY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfU0VUX1JYX1FV RVVFLAorCQkJCQkgIGNtZF9mbGFncywKKwkJCQkJICB0b2tlbik7CisKKwljbWRfcGFyYW1zID0g KHN0cnVjdCBkcGRtYWlfY21kX3F1ZXVlICopY21kLnBhcmFtczsKKwljbWRfcGFyYW1zLT5kZXN0 X2lkID0gY3B1X3RvX2xlMzIoY2ZnLT5kZXN0X2NmZy5kZXN0X2lkKTsKKwljbWRfcGFyYW1zLT5w cmlvcml0eSA9IGNmZy0+ZGVzdF9jZmcucHJpb3JpdHk7CisJY21kX3BhcmFtcy0+cXVldWUgPSBw cmlvcml0eTsKKwljbWRfcGFyYW1zLT5kZXN0X3R5cGUgPSBjZmctPmRlc3RfY2ZnLmRlc3RfdHlw ZTsKKwljbWRfcGFyYW1zLT51c2VyX2N0eCA9IGNwdV90b19sZTY0KGNmZy0+dXNlcl9jdHgpOwor CWNtZF9wYXJhbXMtPm9wdGlvbnMgPSBjcHVfdG9fbGUzMihjZmctPm9wdGlvbnMpOworCisJLyog c2VuZCBjb21tYW5kIHRvIG1jKi8KKwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21k KTsKK30KKworaW50IGRwZG1haV9nZXRfcnhfcXVldWUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8s CisJCQl1MzIgY21kX2ZsYWdzLAorCQkJdTE2IHRva2VuLAorCQkJdTggcHJpb3JpdHksIHN0cnVj dCBkcGRtYWlfcnhfcXVldWVfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQg Y21kID0geyAwIH07CisJc3RydWN0IGRwZG1haV9jbWRfcXVldWUgKmNtZF9wYXJhbXM7CisJaW50 IGVycjsKKworCS8qIHByZXBhcmUgY29tbWFuZCAqLworCWNtZC5oZWFkZXIgPSBtY19lbmNvZGVf Y21kX2hlYWRlcihEUERNQUlfQ01ESURfR0VUX1JYX1FVRVVFLAorCQkJCQkgIGNtZF9mbGFncywK KwkJCQkJICB0b2tlbik7CisKKwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcGRtYWlfY21kX3F1ZXVl ICopY21kLnBhcmFtczsKKwljbWRfcGFyYW1zLT5xdWV1ZSA9IHByaW9yaXR5OworCisJLyogc2Vu ZCBjb21tYW5kIHRvIG1jKi8KKwllcnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0 ZXJzICovCisJYXR0ci0+ZGVzdF9jZmcuZGVzdF9pZCA9IGxlMzJfdG9fY3B1KGNtZF9wYXJhbXMt PmRlc3RfaWQpOworCWF0dHItPmRlc3RfY2ZnLnByaW9yaXR5ID0gY21kX3BhcmFtcy0+cHJpb3Jp dHk7CisJYXR0ci0+ZGVzdF9jZmcuZGVzdF90eXBlID0gY21kX3BhcmFtcy0+ZGVzdF90eXBlOwor CWF0dHItPnVzZXJfY3R4ID0gbGU2NF90b19jcHUoY21kX3BhcmFtcy0+dXNlcl9jdHgpOworCWF0 dHItPmZxaWQgPSBsZTMyX3RvX2NwdShjbWRfcGFyYW1zLT5mcWlkKTsKKworCXJldHVybiAwOwor fQorCitpbnQgZHBkbWFpX2dldF90eF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywKKwkJ CXUzMiBjbWRfZmxhZ3MsCisJCQl1MTYgdG9rZW4sCisJCQl1OCBwcmlvcml0eSwKKwkJCXN0cnVj dCBkcGRtYWlfdHhfcXVldWVfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQg Y21kID0geyAwIH07CisJc3RydWN0IGRwZG1haV9jbWRfcXVldWUgKmNtZF9wYXJhbXM7CisJc3Ry dWN0IGRwZG1haV9yc3BfZ2V0X3R4X3F1ZXVlICpyc3BfcGFyYW1zOworCWludCBlcnI7CisKKwkv KiBwcmVwYXJlIGNvbW1hbmQgKi8KKwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIo RFBETUFJX0NNRElEX0dFVF9UWF9RVUVVRSwKKwkJCQkJICBjbWRfZmxhZ3MsCisJCQkJCSAgdG9r ZW4pOworCisJY21kX3BhcmFtcyA9IChzdHJ1Y3QgZHBkbWFpX2NtZF9xdWV1ZSAqKWNtZC5wYXJh bXM7CisJY21kX3BhcmFtcy0+cXVldWUgPSBwcmlvcml0eTsKKworCS8qIHNlbmQgY29tbWFuZCB0 byBtYyovCisJZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsKKwlpZiAoZXJyKQor CQlyZXR1cm4gZXJyOworCisJLyogcmV0cmlldmUgcmVzcG9uc2UgcGFyYW1ldGVycyAqLworCisJ cnNwX3BhcmFtcyA9IChzdHJ1Y3QgZHBkbWFpX3JzcF9nZXRfdHhfcXVldWUgKiljbWQucGFyYW1z OworCWF0dHItPmZxaWQgPSBsZTMyX3RvX2NwdShyc3BfcGFyYW1zLT5mcWlkKTsKKworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBkbWFpLmgg Yi9kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGRtYWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5jOGE3YjdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEv ZnNsLWRwYWEyLXFkbWEvZHBkbWFpLmgKQEAgLTAsMCArMSw1MjQgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgMjAxNC0yMDE4IE5YUCAqLwor CisvKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICogUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAq IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBu b3IgdGhlCisgKiBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVS TkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF IENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19GU0xfRFBETUFJX0gKKyNkZWZpbmUgX19GU0xfRFBE TUFJX0gKKworc3RydWN0IGZzbF9tY19pbzsKKworLyogRGF0YSBQYXRoIERNQSBJbnRlcmZhY2Ug QVBJCisgKiBDb250YWlucyBpbml0aWFsaXphdGlvbiBBUElzIGFuZCBydW50aW1lIGNvbnRyb2wg QVBJcyBmb3IgRFBETUFJCisgKi8KKworLyogR2VuZXJhbCBEUERNQUkgbWFjcm9zICovCisKKy8q KgorICogTWF4aW11bSBudW1iZXIgb2YgVHgvUnggcHJpb3JpdGllcyBwZXIgRFBETUFJIG9iamVj dAorICovCisjZGVmaW5lIERQRE1BSV9QUklPX05VTQkJMgorCisvKioKKyAqIEFsbCBxdWV1ZXMg Y29uc2lkZXJlZDsgc2VlIGRwZG1haV9zZXRfcnhfcXVldWUoKQorICovCisjZGVmaW5lIERQRE1B SV9BTExfUVVFVUVTCSh1OCkoLTEpCisKKy8qKgorICogZHBkbWFpX29wZW4oKSAtIE9wZW4gYSBj b250cm9sIHNlc3Npb24gZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0CisgKiBAbWNfaW86CVBvaW50 ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFn czsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEBkcGRtYWlfaWQ6CURQRE1BSSB1 bmlxdWUgSUQKKyAqIEB0b2tlbjoJUmV0dXJuZWQgdG9rZW47IHVzZSBpbiBzdWJzZXF1ZW50IEFQ SSBjYWxscworICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gb3BlbiBhIGNvbnRy b2wgc2Vzc2lvbiBmb3IgYW4KKyAqIGFscmVhZHkgY3JlYXRlZCBvYmplY3Q7IGFuIG9iamVjdCBt YXkgaGF2ZSBiZWVuIGRlY2xhcmVkIGluCisgKiB0aGUgRFBMIG9yIGJ5IGNhbGxpbmcgdGhlIGRw ZG1haV9jcmVhdGUoKSBmdW5jdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHVuaXF1 ZSBhdXRoZW50aWNhdGlvbiB0b2tlbiwKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWMg b2JqZWN0IElEIGFuZCB0aGUgc3BlY2lmaWMgTUMKKyAqIHBvcnRhbDsgdGhpcyB0b2tlbiBtdXN0 IGJlIHVzZWQgaW4gYWxsIHN1YnNlcXVlbnQgY29tbWFuZHMgZm9yCisgKiB0aGlzIHNwZWNpZmlj IG9iamVjdC4KKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworaW50IGRwZG1haV9vcGVuKHN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvLAorCQl1 MzIJCWNtZF9mbGFncywKKwkJaW50CQkJZHBkbWFpX2lkLAorCQl1MTYJCSp0b2tlbik7CisKKy8q KgorICogZHBkbWFpX2Nsb3NlKCkgLSBDbG9zZSB0aGUgY29udHJvbCBzZXNzaW9uIG9mIHRoZSBv YmplY3QKKyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBA Y21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJwor ICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0CisgKgorICogQWZ0ZXIgdGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQsIG5vIGZ1cnRoZXIgb3BlcmF0aW9ucyBhcmUKKyAqIGFsbG93ZWQgb24g dGhlIG9iamVjdCB3aXRob3V0IG9wZW5pbmcgYSBuZXcgY29udHJvbCBzZXNzaW9uLgorICoKKyAq IFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQg ZHBkbWFpX2Nsb3NlKHN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvLAorCQkgdTMyCQljbWRfZmxhZ3Ms CisJCSB1MTYJCXRva2VuKTsKKworLyoqCisgKiBzdHJ1Y3QgZHBkbWFpX2NmZyAtIFN0cnVjdHVy ZSByZXByZXNlbnRpbmcgRFBETUFJIGNvbmZpZ3VyYXRpb24KKyAqIEBwcmlvcml0aWVzOiBQcmlv cml0aWVzIGZvciB0aGUgRE1BIGhhcmR3YXJlIHByb2Nlc3Npbmc7IHZhbGlkIHByaW9yaXRpZXMg YXJlCisgKgljb25maWd1cmVkIHdpdGggdmFsdWVzIDEtODsgdGhlIGVudHJ5IGZvbGxvd2luZyBs YXN0IHZhbGlkIGVudHJ5CisgKglzaG91bGQgYmUgY29uZmlndXJlZCB3aXRoIDAKKyAqLworc3Ry dWN0IGRwZG1haV9jZmcgeworCXU4IHByaW9yaXRpZXNbRFBETUFJX1BSSU9fTlVNXTsKK307CisK Ky8qKgorICogZHBkbWFpX2NyZWF0ZSgpIC0gQ3JlYXRlIHRoZSBEUERNQUkgb2JqZWN0CisgKiBA bWNfaW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJ Q29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEBjZmc6CUNv bmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKiBAdG9rZW46CVJldHVybmVkIHRva2VuOyB1c2UgaW4g c3Vic2VxdWVudCBBUEkgY2FsbHMKKyAqCisgKiBDcmVhdGUgdGhlIERQRE1BSSBvYmplY3QsIGFs bG9jYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQKKyAqIHBlcmZvcm0gcmVxdWlyZWQgaW5pdGlh bGl6YXRpb24uCisgKgorICogVGhlIG9iamVjdCBjYW4gYmUgY3JlYXRlZCBlaXRoZXIgYnkgZGVj bGFyaW5nIGl0IGluIHRoZQorICogRFBMIGZpbGUsIG9yIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlv bi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB1bmlxdWUgYXV0aGVudGljYXRpb24g dG9rZW4sCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmljIG9iamVjdCBJRCBhbmQgdGhl IHNwZWNpZmljIE1DCisgKiBwb3J0YWw7IHRoaXMgdG9rZW4gbXVzdCBiZSB1c2VkIGluIGFsbCBz dWJzZXF1ZW50IGNhbGxzIHRvCisgKiB0aGlzIHNwZWNpZmljIG9iamVjdC4gRm9yIG9iamVjdHMg dGhhdCBhcmUgY3JlYXRlZCB1c2luZyB0aGUKKyAqIERQTCBmaWxlLCBjYWxsIGRwZG1haV9vcGVu KCkgZnVuY3Rpb24gdG8gZ2V0IGFuIGF1dGhlbnRpY2F0aW9uCisgKiB0b2tlbiBmaXJzdC4KKyAq CisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLwor aW50IGRwZG1haV9jcmVhdGUoc3RydWN0IGZzbF9tY19pbwkJKm1jX2lvLAorCQkgIHUzMgkJCWNt ZF9mbGFncywKKwkJICBjb25zdCBzdHJ1Y3QgZHBkbWFpX2NmZwkqY2ZnLAorCQkgIHUxNgkJCSp0 b2tlbik7CisKKy8qKgorICogZHBkbWFpX2Rlc3Ryb3koKSAtIERlc3Ryb3kgdGhlIERQRE1BSSBv YmplY3QgYW5kIHJlbGVhc2UgYWxsIGl0cyByZXNvdXJjZXMuCisgKiBAbWNfaW86CVBvaW50ZXIg dG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFnczsg b25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9rZW4gb2YgRFBETUFJ IG9iamVjdAorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3 aXNlLgorICovCitpbnQgZHBkbWFpX2Rlc3Ryb3koc3RydWN0IGZzbF9tY19pbwkqbWNfaW8sCisJ CSAgIHUzMgkJY21kX2ZsYWdzLAorCQkgICB1MTYJCXRva2VuKTsKKworLyoqCisgKiBkcGRtYWlf ZW5hYmxlKCkgLSBFbmFibGUgdGhlIERQRE1BSSwgYWxsb3cgc2VuZGluZyBhbmQgcmVjZWl2aW5n IGZyYW1lcy4KKyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0Cisg KiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdf JworICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0CisgKgorICogUmV0dXJuOgknMCcg b24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBkcGRtYWlfZW5hYmxl KHN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvLAorCQkgIHUzMgkJY21kX2ZsYWdzLAorCQkgIHUxNgkJ dG9rZW4pOworCisvKioKKyAqIGRwZG1haV9kaXNhYmxlKCkgLSBEaXNhYmxlIHRoZSBEUERNQUks IHN0b3Agc2VuZGluZyBhbmQgcmVjZWl2aW5nIGZyYW1lcy4KKyAqIEBtY19pbzoJUG9pbnRlciB0 byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBv bmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkg b2JqZWN0CisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndp c2UuCisgKi8KK2ludCBkcGRtYWlfZGlzYWJsZShzdHJ1Y3QgZnNsX21jX2lvCSptY19pbywKKwkJ ICAgdTMyCQljbWRfZmxhZ3MsCisJCSAgIHUxNgkJdG9rZW4pOworCisvKioKKyAqIGRwZG1haV9p c19lbmFibGVkKCkgLSBDaGVjayBpZiB0aGUgRFBETUFJIGlzIGVuYWJsZWQuCisgKiBAbWNfaW86 CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFu ZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9rZW4g b2YgRFBETUFJIG9iamVjdAorICogQGVuOgkJUmV0dXJucyAnMScgaWYgb2JqZWN0IGlzIGVuYWJs ZWQ7ICcwJyBvdGhlcndpc2UKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBj b2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRwZG1haV9pc19lbmFibGVkKHN0cnVjdCBmc2xfbWNf aW8JKm1jX2lvLAorCQkgICAgICB1MzIJCWNtZF9mbGFncywKKwkJICAgICAgdTE2CQl0b2tlbiwK KwkJICAgICAgaW50CQkqZW4pOworCisvKioKKyAqIGRwZG1haV9yZXNldCgpIC0gUmVzZXQgdGhl IERQRE1BSSwgcmV0dXJucyB0aGUgb2JqZWN0IHRvIGluaXRpYWwgc3RhdGUuCisgKiBAbWNfaW86 CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFu ZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9rZW4g b2YgRFBETUFJIG9iamVjdAorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNv ZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX3Jlc2V0KHN0cnVjdCBmc2xfbWNfaW8JKm1j X2lvLAorCQkgdTMyCQljbWRfZmxhZ3MsCisJCSB1MTYJCXRva2VuKTsKKworLyoqCisgKiBzdHJ1 Y3QgZHBkbWFpX2lycV9jZmcgLSBJUlEgY29uZmlndXJhdGlvbgorICogQGFkZHI6CUFkZHJlc3Mg dGhhdCBtdXN0IGJlIHdyaXR0ZW4gdG8gc2lnbmFsIGEgbWVzc2FnZS1iYXNlZCBpbnRlcnJ1cHQK KyAqIEB2YWw6CVZhbHVlIHRvIHdyaXRlIGludG8gaXJxX2FkZHIgYWRkcmVzcworICogQGlycV9u dW06IEEgdXNlciBkZWZpbmVkIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBJUlEKKyAqLwor c3RydWN0IGRwZG1haV9pcnFfY2ZnIHsKKwl1NjQJYWRkcjsKKwl1MzIJdmFsOworCWludAkJaXJx X251bTsKK307CisKKy8qKgorICogZHBkbWFpX3NldF9pcnEoKSAtIFNldCBJUlEgaW5mb3JtYXRp b24gZm9yIHRoZSBEUERNQUkgdG8gdHJpZ2dlcgorICogYW4gaW50ZXJydXB0LgorICogQG1jX2lv OglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxhZ3M6CUNvbW1h bmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9rZW46CVRva2Vu IG9mIERQRE1BSSBvYmplY3QKKyAqIEBpcnFfaW5kZXg6CUlkZW50aWZpZXMgdGhlIGludGVycnVw dCBpbmRleCB0byBjb25maWd1cmUKKyAqIEBpcnFfY2ZnOglJUlEgY29uZmlndXJhdGlvbgorICoK KyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitp bnQgZHBkbWFpX3NldF9pcnEoc3RydWN0IGZzbF9tY19pbwkJKm1jX2lvLAorCQkgICB1MzIJCQlj bWRfZmxhZ3MsCisJCSAgIHUxNgkJCXRva2VuLAorCQkgICB1OAkJCWlycV9pbmRleCwKKwkJICAg c3RydWN0IGRwZG1haV9pcnFfY2ZnCSppcnFfY2ZnKTsKKworLyoqCisgKiBkcGRtYWlfZ2V0X2ly cSgpIC0gR2V0IElSUSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBEUERNQUkKKyAqCisgKiBAbWNfaW86 CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFu ZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJVG9rZW4g b2YgRFBETUFJIG9iamVjdAorICogQGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBj b25maWd1cmUKKyAqIEB0eXBlOglJbnRlcnJ1cHQgdHlwZTogMCByZXByZXNlbnRzIG1lc3NhZ2Ug aW50ZXJydXB0CisgKgkJdHlwZSAoYm90aCBpcnFfYWRkciBhbmQgaXJxX3ZhbCBhcmUgdmFsaWQp CisgKiBAaXJxX2NmZzoJSVJRIGF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNj ZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRwZG1haV9nZXRfaXJxKHN0cnVj dCBmc2xfbWNfaW8JCSptY19pbywKKwkJICAgdTMyCQkJY21kX2ZsYWdzLAorCQkgICB1MTYJCQl0 b2tlbiwKKwkJICAgdTgJCQlpcnFfaW5kZXgsCisJCSAgIGludAkJCQkqdHlwZSwKKwkJICAgc3Ry dWN0IGRwZG1haV9pcnFfY2ZnCSppcnFfY2ZnKTsKKworLyoqCisgKiBkcGRtYWlfc2V0X2lycV9l bmFibGUoKSAtIFNldCBvdmVyYWxsIGludGVycnVwdCBzdGF0ZS4KKyAqIEBtY19pbzoJUG9pbnRl ciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdz OyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOgkJVG9rZW4gb2YgRFBE TUFJIG9iamVjdAorICogQGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBjb25maWd1 cmUKKyAqIEBlbjoJCQlJbnRlcnJ1cHQgc3RhdGUgLSBlbmFibGUgPSAxLCBkaXNhYmxlID0gMAor ICoKKyAqIEFsbG93cyBHUFAgc29mdHdhcmUgdG8gY29udHJvbCB3aGVuIGludGVycnVwdHMgYXJl IGdlbmVyYXRlZC4KKyAqIEVhY2ggaW50ZXJydXB0IGNhbiBoYXZlIHVwIHRvIDMyIGNhdXNlcy4g IFRoZSBlbmFibGUvZGlzYWJsZSBjb250cm9sJ3MgdGhlCisgKiBvdmVyYWxsIGludGVycnVwdCBz dGF0ZS4gaWYgdGhlIGludGVycnVwdCBpcyBkaXNhYmxlZCBubyBjYXVzZXMgd2lsbCBjYXVzZQor ICogYW4gaW50ZXJydXB0CisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29k ZSBvdGhlcndpc2UuCisgKi8KK2ludCBkcGRtYWlfc2V0X2lycV9lbmFibGUoc3RydWN0IGZzbF9t Y19pbwkqbWNfaW8sCisJCQkgIHUzMgkJY21kX2ZsYWdzLAorCQkJICB1MTYJCXRva2VuLAorCQkJ ICB1OAkJaXJxX2luZGV4LAorCQkJICB1OAkJZW4pOworCisvKioKKyAqIGRwZG1haV9nZXRfaXJx X2VuYWJsZSgpIC0gR2V0IG92ZXJhbGwgaW50ZXJydXB0IHN0YXRlCisgKiBAbWNfaW86CVBvaW50 ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFn czsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJCVRva2VuIG9mIERQ RE1BSSBvYmplY3QKKyAqIEBpcnFfaW5kZXg6CVRoZSBpbnRlcnJ1cHQgaW5kZXggdG8gY29uZmln dXJlCisgKiBAZW46CQkJUmV0dXJuZWQgSW50ZXJydXB0IHN0YXRlIC0gZW5hYmxlID0gMSwgZGlz YWJsZSA9IDAKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworaW50IGRwZG1haV9nZXRfaXJxX2VuYWJsZShzdHJ1Y3QgZnNsX21jX2lvCSpt Y19pbywKKwkJCSAgdTMyCQljbWRfZmxhZ3MsCisJCQkgIHUxNgkJdG9rZW4sCisJCQkgIHU4CQlp cnFfaW5kZXgsCisJCQkgIHU4CQkqZW4pOworCisvKioKKyAqIGRwZG1haV9zZXRfaXJxX21hc2so KSAtIFNldCBpbnRlcnJ1cHQgbWFzay4KKyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwn cyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBv ZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOgkJVG9rZW4gb2YgRFBETUFJIG9iamVjdAorICog QGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBjb25maWd1cmUKKyAqIEBtYXNrOgkJ ZXZlbnQgbWFzayB0byB0cmlnZ2VyIGludGVycnVwdDsKKyAqCQkJCWVhY2ggYml0OgorICoJCQkJ CTAgPSBpZ25vcmUgZXZlbnQKKyAqCQkJCQkxID0gY29uc2lkZXIgZXZlbnQgZm9yIGFzc2VydGlu ZyBJUlEKKyAqCisgKiBFdmVyeSBpbnRlcnJ1cHQgY2FuIGhhdmUgdXAgdG8gMzIgY2F1c2VzIGFu ZCB0aGUgaW50ZXJydXB0IG1vZGVsIHN1cHBvcnRzCisgKiBtYXNraW5nL3VubWFza2luZyBlYWNo IGNhdXNlIGluZGVwZW5kZW50bHkKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJv ciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRwZG1haV9zZXRfaXJxX21hc2soc3RydWN0IGZz bF9tY19pbwkqbWNfaW8sCisJCQl1MzIJCWNtZF9mbGFncywKKwkJCXUxNgkJdG9rZW4sCisJCQl1 OAkJaXJxX2luZGV4LAorCQkJdTMyCQltYXNrKTsKKworLyoqCisgKiBkcGRtYWlfZ2V0X2lycV9t YXNrKCkgLSBHZXQgaW50ZXJydXB0IG1hc2suCisgKiBAbWNfaW86CVBvaW50ZXIgdG8gTUMgcG9y dGFsJ3MgSS9PIG9iamVjdAorICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFnczsgb25lIG9yIG1v cmUgb2YgJ01DX0NNRF9GTEFHXycKKyAqIEB0b2tlbjoJCVRva2VuIG9mIERQRE1BSSBvYmplY3QK KyAqIEBpcnFfaW5kZXg6CVRoZSBpbnRlcnJ1cHQgaW5kZXggdG8gY29uZmlndXJlCisgKiBAbWFz azoJCVJldHVybmVkIGV2ZW50IG1hc2sgdG8gdHJpZ2dlciBpbnRlcnJ1cHQKKyAqCisgKiBFdmVy eSBpbnRlcnJ1cHQgY2FuIGhhdmUgdXAgdG8gMzIgY2F1c2VzIGFuZCB0aGUgaW50ZXJydXB0IG1v ZGVsIHN1cHBvcnRzCisgKiBtYXNraW5nL3VubWFza2luZyBlYWNoIGNhdXNlIGluZGVwZW5kZW50 bHkKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4K KyAqLworaW50IGRwZG1haV9nZXRfaXJxX21hc2soc3RydWN0IGZzbF9tY19pbwkqbWNfaW8sCisJ CQl1MzIJCWNtZF9mbGFncywKKwkJCXUxNgkJdG9rZW4sCisJCQl1OAkJaXJxX2luZGV4LAorCQkJ dTMyCQkqbWFzayk7CisKKy8qKgorICogZHBkbWFpX2dldF9pcnFfc3RhdHVzKCkgLSBHZXQgdGhl IGN1cnJlbnQgc3RhdHVzIG9mIGFueSBwZW5kaW5nIGludGVycnVwdHMKKyAqIEBtY19pbzoJUG9p bnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZs YWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOgkJVG9rZW4gb2Yg RFBETUFJIG9iamVjdAorICogQGlycV9pbmRleDoJVGhlIGludGVycnVwdCBpbmRleCB0byBjb25m aWd1cmUKKyAqIEBzdGF0dXM6CQlSZXR1cm5lZCBpbnRlcnJ1cHRzIHN0YXR1cyAtIG9uZSBiaXQg cGVyIGNhdXNlOgorICoJCQkJCTAgPSBubyBpbnRlcnJ1cHQgcGVuZGluZworICoJCQkJCTEgPSBp bnRlcnJ1cHQgcGVuZGluZworICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNv ZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX2dldF9pcnFfc3RhdHVzKHN0cnVjdCBmc2xf bWNfaW8JKm1jX2lvLAorCQkJICB1MzIJCWNtZF9mbGFncywKKwkJCSAgdTE2CQl0b2tlbiwKKwkJ CSAgdTgJCWlycV9pbmRleCwKKwkJCSAgdTMyCQkqc3RhdHVzKTsKKworLyoqCisgKiBkcGRtYWlf Y2xlYXJfaXJxX3N0YXR1cygpIC0gQ2xlYXIgYSBwZW5kaW5nIGludGVycnVwdCdzIHN0YXR1cwor ICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxh Z3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9r ZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqIEBpcnFfaW5kZXg6CVRoZSBpbnRlcnJ1cHQg aW5kZXggdG8gY29uZmlndXJlCisgKiBAc3RhdHVzOgliaXRzIHRvIGNsZWFyIChXMUMpIC0gb25l IGJpdCBwZXIgY2F1c2U6CisgKgkJCTAgPSBkb24ndCBjaGFuZ2UKKyAqCQkJMSA9IGNsZWFyIHN0 YXR1cyBiaXQKKyAqCisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVy d2lzZS4KKyAqLworaW50IGRwZG1haV9jbGVhcl9pcnFfc3RhdHVzKHN0cnVjdCBmc2xfbWNfaW8J Km1jX2lvLAorCQkJICAgIHUzMgkJY21kX2ZsYWdzLAorCQkJICAgIHUxNgkJdG9rZW4sCisJCQkg ICAgdTgJCWlycV9pbmRleCwKKwkJCSAgICB1MzIJCXN0YXR1cyk7CisKKy8qKgorICogc3RydWN0 IGRwZG1haV9hdHRyIC0gU3RydWN0dXJlIHJlcHJlc2VudGluZyBEUERNQUkgYXR0cmlidXRlcwor ICogQGlkOiBEUERNQUkgb2JqZWN0IElECisgKiBAdmVyc2lvbjogRFBETUFJIHZlcnNpb24KKyAq IEBudW1fb2ZfcHJpb3JpdGllczogbnVtYmVyIG9mIHByaW9yaXRpZXMKKyAqLworc3RydWN0IGRw ZG1haV9hdHRyIHsKKwlpbnQJaWQ7CisJLyoqCisJICogc3RydWN0IHZlcnNpb24gLSBEUERNQUkg dmVyc2lvbgorCSAqIEBtYWpvcjogRFBETUFJIG1ham9yIHZlcnNpb24KKwkgKiBAbWlub3I6IERQ RE1BSSBtaW5vciB2ZXJzaW9uCisJICovCisJc3RydWN0IHsKKwkJdTE2IG1ham9yOworCQl1MTYg bWlub3I7CisJfSB2ZXJzaW9uOworCXU4IG51bV9vZl9wcmlvcml0aWVzOworfTsKKworLyoqCisg KiBkcGRtYWlfZ2V0X2F0dHJpYnV0ZXMoKSAtIFJldHJpZXZlIERQRE1BSSBhdHRyaWJ1dGVzLgor ICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRfZmxh Z3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBAdG9r ZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqIEBhdHRyOglSZXR1cm5lZCBvYmplY3QncyBh dHRyaWJ1dGVzCisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhl cndpc2UuCisgKi8KK2ludCBkcGRtYWlfZ2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZzbF9tY19pbwkq bWNfaW8sCisJCQkgIHUzMgkJY21kX2ZsYWdzLAorCQkJICB1MTYJCXRva2VuLAorCQkJICBzdHJ1 Y3QgZHBkbWFpX2F0dHIJKmF0dHIpOworCisvKioKKyAqIGVudW0gZHBkbWFpX2Rlc3QgLSBEUERN QUkgZGVzdGluYXRpb24gdHlwZXMKKyAqIEBEUERNQUlfREVTVF9OT05FOiBVbmFzc2lnbmVkIGRl c3RpbmF0aW9uOyBUaGUgcXVldWUgaXMgc2V0IGluIHBhcmtlZCBtb2RlCisgKglhbmQgZG9lcyBu b3QgZ2VuZXJhdGUgRlFEQU4gbm90aWZpY2F0aW9uczsgdXNlciBpcyBleHBlY3RlZCB0byBkZXF1 ZXVlCisgKglmcm9tIHRoZSBxdWV1ZSBiYXNlZCBvbiBwb2xsaW5nIG9yIG90aGVyIHVzZXItZGVm aW5lZCBtZXRob2QKKyAqIEBEUERNQUlfREVTVF9EUElPOiBUaGUgcXVldWUgaXMgc2V0IGluIHNj aGVkdWxlIG1vZGUgYW5kIGdlbmVyYXRlcyBGUURBTgorICoJbm90aWZpY2F0aW9ucyB0byB0aGUg c3BlY2lmaWVkIERQSU87IHVzZXIgaXMgZXhwZWN0ZWQgdG8gZGVxdWV1ZQorICoJZnJvbSB0aGUg cXVldWUgb25seSBhZnRlciBub3RpZmljYXRpb24gaXMgcmVjZWl2ZWQKKyAqIEBEUERNQUlfREVT VF9EUENPTjogVGhlIHF1ZXVlIGlzIHNldCBpbiBzY2hlZHVsZSBtb2RlIGFuZCBkb2VzIG5vdCBn ZW5lcmF0ZQorICoJRlFEQU4gbm90aWZpY2F0aW9ucywgYnV0IGlzIGNvbm5lY3RlZCB0byB0aGUg c3BlY2lmaWVkIERQQ09OIG9iamVjdDsKKyAqCXVzZXIgaXMgZXhwZWN0ZWQgdG8gZGVxdWV1ZSBm cm9tIHRoZSBEUENPTiBjaGFubmVsCisgKi8KK2VudW0gZHBkbWFpX2Rlc3QgeworCURQRE1BSV9E RVNUX05PTkUgPSAwLAorCURQRE1BSV9ERVNUX0RQSU8gPSAxLAorCURQRE1BSV9ERVNUX0RQQ09O ID0gMgorfTsKKworLyoqCisgKiBzdHJ1Y3QgZHBkbWFpX2Rlc3RfY2ZnIC0gU3RydWN0dXJlIHJl cHJlc2VudGluZyBEUERNQUkgZGVzdGluYXRpb24gcGFyYW1ldGVycworICogQGRlc3RfdHlwZTog RGVzdGluYXRpb24gdHlwZQorICogQGRlc3RfaWQ6IEVpdGhlciBEUElPIElEIG9yIERQQ09OIElE LCBkZXBlbmRpbmcgb24gdGhlIGRlc3RpbmF0aW9uIHR5cGUKKyAqIEBwcmlvcml0eTogUHJpb3Jp dHkgc2VsZWN0aW9uIHdpdGhpbiB0aGUgRFBJTyBvciBEUENPTiBjaGFubmVsOyB2YWxpZCB2YWx1 ZXMKKyAqCWFyZSAwLTEgb3IgMC03LCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBwcmlvcml0 aWVzIGluIHRoYXQKKyAqCWNoYW5uZWw7IG5vdCByZWxldmFudCBmb3IgJ0RQRE1BSV9ERVNUX05P TkUnIG9wdGlvbgorICovCitzdHJ1Y3QgZHBkbWFpX2Rlc3RfY2ZnIHsKKwllbnVtIGRwZG1haV9k ZXN0CWRlc3RfdHlwZTsKKwlpbnQJCQlkZXN0X2lkOworCXU4CQlwcmlvcml0eTsKK307CisKKy8q IERQRE1BSSBxdWV1ZSBtb2RpZmljYXRpb24gb3B0aW9ucyAqLworCisvKioKKyAqIFNlbGVjdCB0 byBtb2RpZnkgdGhlIHVzZXIncyBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVldWUKKyAq LworI2RlZmluZSBEUERNQUlfUVVFVUVfT1BUX1VTRVJfQ1RYCTB4MDAwMDAwMDEKKworLyoqCisg KiBTZWxlY3QgdG8gbW9kaWZ5IHRoZSBxdWV1ZSdzIGRlc3RpbmF0aW9uCisgKi8KKyNkZWZpbmUg RFBETUFJX1FVRVVFX09QVF9ERVNUCQkweDAwMDAwMDAyCisKKy8qKgorICogc3RydWN0IGRwZG1h aV9yeF9xdWV1ZV9jZmcgLSBEUERNQUkgUlggcXVldWUgY29uZmlndXJhdGlvbgorICogQG9wdGlv bnM6IEZsYWdzIHJlcHJlc2VudGluZyB0aGUgc3VnZ2VzdGVkIG1vZGlmaWNhdGlvbnMgdG8gdGhl IHF1ZXVlOworICoJVXNlIGFueSBjb21iaW5hdGlvbiBvZiAnRFBETUFJX1FVRVVFX09QVF88WD4n IGZsYWdzCisgKiBAdXNlcl9jdHg6IFVzZXIgY29udGV4dCB2YWx1ZSBwcm92aWRlZCBpbiB0aGUg ZnJhbWUgZGVzY3JpcHRvciBvZiBlYWNoCisgKglkZXF1ZXVlZCBmcmFtZTsKKyAqCXZhbGlkIG9u bHkgaWYgJ0RQRE1BSV9RVUVVRV9PUFRfVVNFUl9DVFgnIGlzIGNvbnRhaW5lZCBpbiAnb3B0aW9u cycKKyAqIEBkZXN0X2NmZzogUXVldWUgZGVzdGluYXRpb24gcGFyYW1ldGVyczsKKyAqCXZhbGlk IG9ubHkgaWYgJ0RQRE1BSV9RVUVVRV9PUFRfREVTVCcgaXMgY29udGFpbmVkIGluICdvcHRpb25z JworICovCitzdHJ1Y3QgZHBkbWFpX3J4X3F1ZXVlX2NmZyB7CisJdTMyCQlvcHRpb25zOworCXU2 NAkJdXNlcl9jdHg7CisJc3RydWN0IGRwZG1haV9kZXN0X2NmZwlkZXN0X2NmZzsKKworfTsKKwor LyoqCisgKiBkcGRtYWlfc2V0X3J4X3F1ZXVlKCkgLSBTZXQgUnggcXVldWUgY29uZmlndXJhdGlv bgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAqIEBjbWRf ZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nCisgKiBA dG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqIEBwcmlvcml0eToJU2VsZWN0IHRoZSBx dWV1ZSByZWxhdGl2ZSB0byBudW1iZXIgb2YKKyAqCQkJcHJpb3JpdGllcyBjb25maWd1cmVkIGF0 IERQRE1BSSBjcmVhdGlvbjsgdXNlCisgKgkJCURQRE1BSV9BTExfUVVFVUVTIHRvIGNvbmZpZ3Vy ZSBhbGwgUnggcXVldWVzCisgKgkJCWlkZW50aWNhbGx5LgorICogQGNmZzoJUnggcXVldWUgY29u ZmlndXJhdGlvbgorICoKKyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3Ro ZXJ3aXNlLgorICovCitpbnQgZHBkbWFpX3NldF9yeF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lvCQkJ Km1jX2lvLAorCQkJdTMyCQkJCWNtZF9mbGFncywKKwkJCXUxNgkJCQl0b2tlbiwKKwkJCXU4CQkJ CQlwcmlvcml0eSwKKwkJCWNvbnN0IHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnCSpjZmcpOwor CisvKioKKyAqIHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfYXR0ciAtIFN0cnVjdHVyZSByZXByZXNl bnRpbmcgYXR0cmlidXRlcyBvZiBSeCBxdWV1ZXMKKyAqIEB1c2VyX2N0eDogIFVzZXIgY29udGV4 dCB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgZnJhbWUgZGVzY3JpcHRvciBvZiBlYWNoCisgKgkgZGVx dWV1ZWQgZnJhbWUKKyAqIEBkZXN0X2NmZzogUXVldWUgZGVzdGluYXRpb24gY29uZmlndXJhdGlv bgorICogQGZxaWQ6IFZpcnR1YWwgRlFJRCB2YWx1ZSB0byBiZSB1c2VkIGZvciBkZXF1ZXVlIG9w ZXJhdGlvbnMKKyAqLworc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9hdHRyIHsKKwl1NjQJCXVzZXJf Y3R4OworCXN0cnVjdCBkcGRtYWlfZGVzdF9jZmcJZGVzdF9jZmc7CisJdTMyCQlmcWlkOworfTsK KworLyoqCisgKiBkcGRtYWlfZ2V0X3J4X3F1ZXVlKCkgLSBSZXRyaWV2ZSBSeCBxdWV1ZSBhdHRy aWJ1dGVzLgorICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QKKyAq IEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18n CisgKiBAdG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QKKyAqIEBwcmlvcml0eToJU2VsZWN0 IHRoZSBxdWV1ZSByZWxhdGl2ZSB0byBudW1iZXIgb2YKKyAqCQkJCXByaW9yaXRpZXMgY29uZmln dXJlZCBhdCBEUERNQUkgY3JlYXRpb24KKyAqIEBhdHRyOglSZXR1cm5lZCBSeCBxdWV1ZSBhdHRy aWJ1dGVzCisgKgorICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndp c2UuCisgKi8KK2ludCBkcGRtYWlfZ2V0X3J4X3F1ZXVlKHN0cnVjdCBmc2xfbWNfaW8JCSptY19p bywKKwkJCXUzMgkJCWNtZF9mbGFncywKKwkJCXUxNgkJCXRva2VuLAorCQkJdTgJCQkJcHJpb3Jp dHksCisJCQlzdHJ1Y3QgZHBkbWFpX3J4X3F1ZXVlX2F0dHIJKmF0dHIpOworCisvKioKKyAqIHN0 cnVjdCBkcGRtYWlfdHhfcXVldWVfYXR0ciAtIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYXR0cmli dXRlcyBvZiBUeCBxdWV1ZXMKKyAqIEBmcWlkOiBWaXJ0dWFsIEZRSUQgdG8gYmUgdXNlZCBmb3Ig c2VuZGluZyBmcmFtZXMgdG8gRE1BIGhhcmR3YXJlCisgKi8KKworc3RydWN0IGRwZG1haV90eF9x dWV1ZV9hdHRyIHsKKwl1MzIgZnFpZDsKK307CisKKy8qKgorICogZHBkbWFpX2dldF90eF9xdWV1 ZSgpIC0gUmV0cmlldmUgVHggcXVldWUgYXR0cmlidXRlcy4KKyAqIEBtY19pbzoJUG9pbnRlciB0 byBNQyBwb3J0YWwncyBJL08gb2JqZWN0CisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBv bmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJworICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkg b2JqZWN0CisgKiBAcHJpb3JpdHk6CVNlbGVjdCB0aGUgcXVldWUgcmVsYXRpdmUgdG8gbnVtYmVy IG9mCisgKgkJCXByaW9yaXRpZXMgY29uZmlndXJlZCBhdCBEUERNQUkgY3JlYXRpb24KKyAqIEBh dHRyOglSZXR1cm5lZCBUeCBxdWV1ZSBhdHRyaWJ1dGVzCisgKgorICogUmV0dXJuOgknMCcgb24g U3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2ludCBkcGRtYWlfZ2V0X3R4X3F1 ZXVlKHN0cnVjdCBmc2xfbWNfaW8JCSptY19pbywKKwkJCXUzMgkJCWNtZF9mbGFncywKKwkJCXUx NgkJCXRva2VuLAorCQkJdTgJCQkJcHJpb3JpdHksCisJCQlzdHJ1Y3QgZHBkbWFpX3R4X3F1ZXVl X2F0dHIJKmF0dHIpOworCisjZW5kaWYgLyogX19GU0xfRFBETUFJX0ggKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haV9jbWQuaCBiL2RyaXZlcnMvZG1hL2Zz bC1kcGFhMi1xZG1hL2RwZG1haV9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4wNzFhMWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFk bWEvZHBkbWFpX2NtZC5oCkBAIC0wLDAgKzEsMTk3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IDIwMTQtMjAxOCBOWFAgKi8KKworI2lmbmRl ZiBfRlNMX0RQRE1BSV9DTURfSAorI2RlZmluZSBfRlNMX0RQRE1BSV9DTURfSAorCisvKiBEUERN QUkgVmVyc2lvbiAqLworI2RlZmluZSBEUERNQUlfVkVSX01BSk9SCQkyCisjZGVmaW5lIERQRE1B SV9WRVJfTUlOT1IJCTIKKworI2RlZmluZSBEUERNQUlfQ01EX0JBU0VfVkVSU0lPTgkJMAorI2Rl ZmluZSBEUERNQUlfQ01EX0lEX09GRlNFVAkJNAorCisjZGVmaW5lIERQRE1BSV9DTURJRF9GT1JN QVQoeCkJCSgoKHgpIDw8IERQRE1BSV9DTURfSURfT0ZGU0VUKSB8IFwKKwkJCQkJRFBETUFJX0NN RF9CQVNFX1ZFUlNJT04pCisKKy8qIENvbW1hbmQgSURzICovCisjZGVmaW5lIERQRE1BSV9DTURJ RF9DTE9TRQkJRFBETUFJX0NNRElEX0ZPUk1BVCgweDgwMCkKKyNkZWZpbmUgRFBETUFJX0NNRElE X09QRU4gICAgICAgICAgICAgICBEUERNQUlfQ01ESURfRk9STUFUKDB4ODBFKQorI2RlZmluZSBE UERNQUlfQ01ESURfQ1JFQVRFICAgICAgICAgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHg5MEUp CisjZGVmaW5lIERQRE1BSV9DTURJRF9ERVNUUk9ZICAgICAgICAgICAgRFBETUFJX0NNRElEX0ZP Uk1BVCgweDkwMCkKKworI2RlZmluZSBEUERNQUlfQ01ESURfRU5BQkxFICAgICAgICAgICAgIERQ RE1BSV9DTURJRF9GT1JNQVQoMHgwMDIpCisjZGVmaW5lIERQRE1BSV9DTURJRF9ESVNBQkxFICAg ICAgICAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgweDAwMykKKyNkZWZpbmUgRFBETUFJX0NNRElE X0dFVF9BVFRSICAgICAgICAgICBEUERNQUlfQ01ESURfRk9STUFUKDB4MDA0KQorI2RlZmluZSBE UERNQUlfQ01ESURfUkVTRVQgICAgICAgICAgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMDUp CisjZGVmaW5lIERQRE1BSV9DTURJRF9JU19FTkFCTEVEICAgICAgICAgRFBETUFJX0NNRElEX0ZP Uk1BVCgweDAwNikKKworI2RlZmluZSBEUERNQUlfQ01ESURfU0VUX0lSUSAgICAgICAgICAgIERQ RE1BSV9DTURJRF9GT1JNQVQoMHgwMTApCisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfSVJRICAg ICAgICAgICAgRFBETUFJX0NNRElEX0ZPUk1BVCgweDAxMSkKKyNkZWZpbmUgRFBETUFJX0NNRElE X1NFVF9JUlFfRU5BQkxFICAgICBEUERNQUlfQ01ESURfRk9STUFUKDB4MDEyKQorI2RlZmluZSBE UERNQUlfQ01ESURfR0VUX0lSUV9FTkFCTEUgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTMp CisjZGVmaW5lIERQRE1BSV9DTURJRF9TRVRfSVJRX01BU0sgICAgICAgRFBETUFJX0NNRElEX0ZP Uk1BVCgweDAxNCkKKyNkZWZpbmUgRFBETUFJX0NNRElEX0dFVF9JUlFfTUFTSyAgICAgICBEUERN QUlfQ01ESURfRk9STUFUKDB4MDE1KQorI2RlZmluZSBEUERNQUlfQ01ESURfR0VUX0lSUV9TVEFU VVMgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTYpCisjZGVmaW5lIERQRE1BSV9DTURJRF9D TEVBUl9JUlFfU1RBVFVTCURQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTcpCisKKyNkZWZpbmUgRFBE TUFJX0NNRElEX1NFVF9SWF9RVUVVRQlEUERNQUlfQ01ESURfRk9STUFUKDB4MUEwKQorI2RlZmlu ZSBEUERNQUlfQ01ESURfR0VUX1JYX1FVRVVFICAgICAgIERQRE1BSV9DTURJRF9GT1JNQVQoMHgx QTEpCisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfVFhfUVVFVUUgICAgICAgRFBETUFJX0NNRElE X0ZPUk1BVCgweDFBMikKKworI2RlZmluZSBNQ19DTURfSERSX1RPS0VOX08gMzIgIC8qIFRva2Vu IGZpZWxkIG9mZnNldCAqLworI2RlZmluZSBNQ19DTURfSERSX1RPS0VOX1MgMTYgIC8qIFRva2Vu IGZpZWxkIHNpemUgKi8KKworI2RlZmluZSBNQUtFX1VNQVNLNjQoX3dpZHRoKSBcCisJKCh1NjQp KChfd2lkdGgpIDwgNjQgPyAoKHU2NCkxIDw8IChfd2lkdGgpKSAtIDEgOiBcCisJKHU2NCktMSkp IFwKKworc3RhdGljIGlubGluZSB1NjQgbWNfZW5jKGludCBsc29mZnNldCwgaW50IHdpZHRoLCB1 NjQgdmFsKQoreworCXJldHVybiAodTY0KSgoKHU2NCl2YWwgJiBNQUtFX1VNQVNLNjQod2lkdGgp KSA8PCBsc29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG1jX2RlYyh1NjQgdmFsLCBp bnQgbHNvZmZzZXQsIGludCB3aWR0aCkKK3sKKwlyZXR1cm4gKHU2NCkoKHZhbCA+PiBsc29mZnNl dCkgJiBNQUtFX1VNQVNLNjQod2lkdGgpKTsKK30KKworI2RlZmluZSBNQ19DTURfT1AoX2NtZCwg X3BhcmFtLCBfb2Zmc2V0LCBfd2lkdGgsIF90eXBlLCBfYXJnKSBcCisJKChfY21kKS5wYXJhbXNb X3BhcmFtXSB8PSBtY19lbmMoKF9vZmZzZXQpLCAoX3dpZHRoKSwgX2FyZykpCisKKyNkZWZpbmUg TUNfUlNQX09QKF9jbWQsIF9wYXJhbSwgX29mZnNldCwgX3dpZHRoLCBfdHlwZSwgX2FyZykgXAor CShfYXJnID0gKF90eXBlKW1jX2RlYyhfY21kLnBhcmFtc1tfcGFyYW1dLCAoX29mZnNldCksIChf d2lkdGgpKSkKKworI2RlZmluZSBNQ19DTURfSERSX1JFQURfVE9LRU4oX2hkcikgXAorCSgodTE2 KW1jX2RlYygoX2hkciksIE1DX0NNRF9IRFJfVE9LRU5fTywgTUNfQ01EX0hEUl9UT0tFTl9TKSkK KworLyogICAgICAgICAgICAgICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJn X25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX0NNRF9PUEVOKGNtZCwgZHBkbWFpX2lkKSBcCisJTUNf Q01EX09QKGNtZCwgMCwgMCwgIDMyLCBpbnQsICAgICAgZHBkbWFpX2lkKQorCisvKiAgICAgICAg ICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2Rl ZmluZSBEUERNQUlfQ01EX0NSRUFURShjbWQsIGNmZykgXAorZG8geyBcCisJTUNfQ01EX09QKGNt ZCwgMCwgOCwgIDgsICB1OCwgIChjZmcpLT5wcmlvcml0aWVzWzBdKTtcCisJTUNfQ01EX09QKGNt ZCwgMCwgMTYsIDgsICB1OCwgIChjZmcpLT5wcmlvcml0aWVzWzFdKTtcCit9IHdoaWxlICgwKQor CisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdf bmFtZSAqLworI2RlZmluZSBEUERNQUlfUlNQX0lTX0VOQUJMRUQoY21kLCBlbikgXAorCU1DX1JT UF9PUChjbWQsIDAsIDAsICAxLCAgaW50LAkgICAgZW4pCisKKy8qICAgICAgICAgICAgICAgIGNt ZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1B SV9DTURfU0VUX0lSUShjbWQsIGlycV9pbmRleCwgaXJxX2NmZykgXAorZG8geyBcCisJTUNfQ01E X09QKGNtZCwgMCwgMCwgIDgsICB1OCwgIGlycV9pbmRleCk7XAorCU1DX0NNRF9PUChjbWQsIDAs IDMyLCAzMiwgdTMyLCBpcnFfY2ZnLT52YWwpO1wKKwlNQ19DTURfT1AoY21kLCAxLCAwLCAgNjQs IHU2NCwgaXJxX2NmZy0+YWRkcik7XAorCU1DX0NNRF9PUChjbWQsIDIsIDAsICAzMiwgaW50LAkg ICAgaXJxX2NmZy0+aXJxX251bSk7IFwKK30gd2hpbGUgKDApCisKKy8qICAgICAgICAgICAgICAg IGNtZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQ RE1BSV9DTURfR0VUX0lSUShjbWQsIGlycV9pbmRleCkgXAorCU1DX0NNRF9PUChjbWQsIDAsIDMy LCA4LCAgdTgsICBpcnFfaW5kZXgpCisKKy8qICAgICAgICAgICAgICAgIGNtZCwgcGFyYW0sIG9m ZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1BSV9SU1BfR0VUX0lS UShjbWQsIHR5cGUsIGlycV9jZmcpIFwKK2RvIHsgXAorCU1DX1JTUF9PUChjbWQsIDAsIDAsICAz MiwgdTMyLCBpcnFfY2ZnLT52YWwpOyBcCisJTUNfUlNQX09QKGNtZCwgMSwgMCwgIDY0LCB1NjQs IGlycV9jZmctPmFkZHIpO1wKKwlNQ19SU1BfT1AoY21kLCAyLCAwLCAgMzIsIGludCwJICAgIGly cV9jZmctPmlycV9udW0pOyBcCisJTUNfUlNQX09QKGNtZCwgMiwgMzIsIDMyLCBpbnQsCSAgICB0 eXBlKTsgXAorfSB3aGlsZSAoMCkKKworLyogICAgICAgICAgICAgICAgY21kLCBwYXJhbSwgb2Zm c2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX0NNRF9TRVRfSVJR X0VOQUJMRShjbWQsIGlycV9pbmRleCwgZW5hYmxlX3N0YXRlKSBcCitkbyB7IFwKKwlNQ19DTURf T1AoY21kLCAwLCAwLCAgOCwgIHU4LCAgZW5hYmxlX3N0YXRlKTsgXAorCU1DX0NNRF9PUChjbWQs IDAsIDMyLCA4LCAgdTgsICBpcnFfaW5kZXgpOyBcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAg ICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2Rl ZmluZSBEUERNQUlfQ01EX0dFVF9JUlFfRU5BQkxFKGNtZCwgaXJxX2luZGV4KSBcCisJTUNfQ01E X09QKGNtZCwgMCwgMzIsIDgsICB1OCwgIGlycV9pbmRleCkKKworLyogICAgICAgICAgICAgICAg Y21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBE TUFJX1JTUF9HRVRfSVJRX0VOQUJMRShjbWQsIGVuYWJsZV9zdGF0ZSkgXAorCU1DX1JTUF9PUChj bWQsIDAsIDAsICA4LCAgdTgsICBlbmFibGVfc3RhdGUpCisKKy8qICAgICAgICAgICAgICAgIGNt ZCwgcGFyYW0sIG9mZnNldCwgd2lkdGgsIHR5cGUsIGFyZ19uYW1lICovCisjZGVmaW5lIERQRE1B SV9DTURfU0VUX0lSUV9NQVNLKGNtZCwgaXJxX2luZGV4LCBtYXNrKSBcCitkbyB7IFwKKwlNQ19D TURfT1AoY21kLCAwLCAwLCAgMzIsIHUzMiwgbWFzayk7IFwKKwlNQ19DTURfT1AoY21kLCAwLCAz MiwgOCwgIHU4LCAgaXJxX2luZGV4KTsgXAorfSB3aGlsZSAoMCkKKworLyogICAgICAgICAgICAg ICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUg RFBETUFJX0NNRF9HRVRfSVJRX01BU0soY21kLCBpcnFfaW5kZXgpIFwKKwlNQ19DTURfT1AoY21k LCAwLCAzMiwgOCwgIHU4LCAgaXJxX2luZGV4KQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBh cmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfUlNQ X0dFVF9JUlFfTUFTSyhjbWQsIG1hc2spIFwKKwlNQ19SU1BfT1AoY21kLCAwLCAwLCAgMzIsIHUz MiwgbWFzaykKKworLyogICAgICAgICAgICAgICAgY21kLCBwYXJhbSwgb2Zmc2V0LCB3aWR0aCwg dHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX0NNRF9HRVRfSVJRX1NUQVRVUyhjbWQs IGlycV9pbmRleCwgc3RhdHVzKSBcCitkbyB7IFwKKwlNQ19DTURfT1AoY21kLCAwLCAwLCAgMzIs IHUzMiwgc3RhdHVzKTtcCisJTUNfQ01EX09QKGNtZCwgMCwgMzIsIDgsICB1OCwgIGlycV9pbmRl eCk7XAorfSB3aGlsZSAoMCkKKworLyogICAgICAgICAgICAgICAgY21kLCBwYXJhbSwgb2Zmc2V0 LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX1JTUF9HRVRfSVJRX1NU QVRVUyhjbWQsIHN0YXR1cykgXAorCU1DX1JTUF9PUChjbWQsIDAsIDAsICAzMiwgdTMyLCAgc3Rh dHVzKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBl LCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfQ01EX0NMRUFSX0lSUV9TVEFUVVMoY21kLCBp cnFfaW5kZXgsIHN0YXR1cykgXAorZG8geyBcCisJTUNfQ01EX09QKGNtZCwgMCwgMCwgIDMyLCB1 MzIsIHN0YXR1cyk7IFwKKwlNQ19DTURfT1AoY21kLCAwLCAzMiwgOCwgIHU4LCAgaXJxX2luZGV4 KTsgXAorfSB3aGlsZSAoMCkKKworLyogICAgICAgICAgICAgICAgY21kLCBwYXJhbSwgb2Zmc2V0 LCB3aWR0aCwgdHlwZSwgYXJnX25hbWUgKi8KKyNkZWZpbmUgRFBETUFJX1JTUF9HRVRfQVRUUihj bWQsIGF0dHIpIFwKK2RvIHsgXAorCU1DX1JTUF9PUChjbWQsIDAsIDAsICAzMiwgaW50LAkoYXR0 ciktPmlkKTsgXAorCU1DX1JTUF9PUChjbWQsIDAsIDMyLCAgOCwgIHU4LAkoYXR0ciktPm51bV9v Zl9wcmlvcml0aWVzKTsgXAorCU1DX1JTUF9PUChjbWQsIDEsIDAsICAxNiwgdTE2LAkoYXR0cikt PnZlcnNpb24ubWFqb3IpO1wKKwlNQ19SU1BfT1AoY21kLCAxLCAxNiwgMTYsIHUxNiwJKGF0dHIp LT52ZXJzaW9uLm1pbm9yKTtcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAgICAgICAgICBjbWQs IHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlf Q01EX1NFVF9SWF9RVUVVRShjbWQsIHByaW9yaXR5LCBjZmcpIFwKK2RvIHsgXAorCU1DX0NNRF9P UChjbWQsIDAsIDAsICAzMiwgaW50LAkoY2ZnKS0+ZGVzdF9jZmcuZGVzdF9pZCk7IFwKKwlNQ19D TURfT1AoY21kLCAwLCAzMiwgOCwgIHU4LAkoY2ZnKS0+ZGVzdF9jZmcucHJpb3JpdHkpOyBcCisJ TUNfQ01EX09QKGNtZCwgMCwgNDAsIDgsICB1OCwJcHJpb3JpdHkpOyBcCisJTUNfQ01EX09QKGNt ZCwgMCwgNDgsIDQsICBlbnVtIGRwZG1haV9kZXN0LCBcCisJCQkoY2ZnKS0+ZGVzdF9jZmcuZGVz dF90eXBlKTsgXAorCU1DX0NNRF9PUChjbWQsIDEsIDAsICA2NCwgdTY0LAkoY2ZnKS0+dXNlcl9j dHgpOyBcCisJTUNfQ01EX09QKGNtZCwgMiwgMCwgIDMyLCB1MzIsCShjZmcpLT5vcHRpb25zKTtc Cit9IHdoaWxlICgwKQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdp ZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfQ01EX0dFVF9SWF9RVUVVRShj bWQsIHByaW9yaXR5KSBcCisJTUNfQ01EX09QKGNtZCwgMCwgNDAsIDgsICB1OCwgIHByaW9yaXR5 KQorCisvKiAgICAgICAgICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBh cmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlfUlNQX0dFVF9SWF9RVUVVRShjbWQsIGF0dHIpIFwK K2RvIHsgXAorCU1DX1JTUF9PUChjbWQsIDAsIDAsICAzMiwgaW50LAkoYXR0ciktPmRlc3RfY2Zn LmRlc3RfaWQpO1wKKwlNQ19SU1BfT1AoY21kLCAwLCAzMiwgOCwgIHU4LAkoYXR0ciktPmRlc3Rf Y2ZnLnByaW9yaXR5KTtcCisJTUNfUlNQX09QKGNtZCwgMCwgNDgsIDQsICBlbnVtIGRwZG1haV9k ZXN0LCBcCisJCQkoYXR0ciktPmRlc3RfY2ZnLmRlc3RfdHlwZSk7XAorCU1DX1JTUF9PUChjbWQs IDEsIDAsICA2NCwgdTY0LCAgKGF0dHIpLT51c2VyX2N0eCk7XAorCU1DX1JTUF9PUChjbWQsIDIs IDAsICAzMiwgdTMyLCAgKGF0dHIpLT5mcWlkKTtcCit9IHdoaWxlICgwKQorCisvKiAgICAgICAg ICAgICAgICBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2Rl ZmluZSBEUERNQUlfQ01EX0dFVF9UWF9RVUVVRShjbWQsIHByaW9yaXR5KSBcCisJTUNfQ01EX09Q KGNtZCwgMCwgNDAsIDgsICB1OCwgIHByaW9yaXR5KQorCisvKiAgICAgICAgICAgICAgICBjbWQs IHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFtZSAqLworI2RlZmluZSBEUERNQUlf UlNQX0dFVF9UWF9RVUVVRShjbWQsIGF0dHIpIFwKKwlNQ19SU1BfT1AoY21kLCAxLCAwLCAgMzIs IHUzMiwgIChhdHRyKS0+ZnFpZCkKKworI2VuZGlmIC8qIF9GU0xfRFBETUFJX0NNRF9IICovCg==